geonetwork-ui 2.3.2 → 2.4.0-alpha.1.09f416f8

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 (1213) hide show
  1. package/esm2022/libs/api/metadata-converter/src/index.mjs +4 -1
  2. package/esm2022/libs/api/metadata-converter/src/lib/common/license.mjs +64 -0
  3. package/esm2022/libs/api/metadata-converter/src/lib/common/url.mjs +14 -0
  4. package/esm2022/libs/api/metadata-converter/src/lib/dcat-ap/dcat-ap.converter.mjs +266 -0
  5. package/esm2022/libs/api/metadata-converter/src/lib/dcat-ap/index.mjs +2 -0
  6. package/esm2022/libs/api/metadata-converter/src/lib/dcat-ap/namespaces.mjs +17 -0
  7. package/esm2022/libs/api/metadata-converter/src/lib/dcat-ap/read-parts.mjs +227 -0
  8. package/esm2022/libs/api/metadata-converter/src/lib/dcat-ap/utils/graph-utils.mjs +57 -0
  9. package/esm2022/libs/api/metadata-converter/src/lib/dcat-ap/utils/serialize-to-xml.mjs +96 -0
  10. package/esm2022/libs/api/metadata-converter/src/lib/dcat-ap/utils/uri.mjs +2 -0
  11. package/esm2022/libs/api/metadata-converter/src/lib/dcat-ap/write-parts.mjs +47 -0
  12. package/esm2022/libs/api/metadata-converter/src/lib/find-converter.mjs +11 -1
  13. package/esm2022/libs/api/metadata-converter/src/lib/function-utils.mjs +1 -1
  14. package/esm2022/libs/api/metadata-converter/src/lib/gn4/atomic-operations.mjs +2 -1
  15. package/esm2022/libs/api/metadata-converter/src/lib/gn4/gn4.converter.mjs +6 -5
  16. package/esm2022/libs/api/metadata-converter/src/lib/gn4/gn4.field.mapper.mjs +24 -8
  17. package/esm2022/libs/api/metadata-converter/src/lib/gn4/metadata-url.service.mjs +4 -4
  18. package/esm2022/libs/api/metadata-converter/src/lib/gn4/types/index.mjs +2 -1
  19. package/esm2022/libs/api/metadata-converter/src/lib/gn4/types/keywords.model.mjs +2 -0
  20. package/esm2022/libs/api/metadata-converter/src/lib/gn4/types/metadata.model.mjs +1 -1
  21. package/esm2022/libs/api/metadata-converter/src/lib/iso19115-3/iso19115-3.converter.mjs +12 -8
  22. package/esm2022/libs/api/metadata-converter/src/lib/iso19115-3/read-parts.mjs +27 -11
  23. package/esm2022/libs/api/metadata-converter/src/lib/iso19115-3/write-parts.mjs +53 -43
  24. package/esm2022/libs/api/metadata-converter/src/lib/iso19139/iso19139.converter.mjs +104 -52
  25. package/esm2022/libs/api/metadata-converter/src/lib/iso19139/read-parts.mjs +107 -25
  26. package/esm2022/libs/api/metadata-converter/src/lib/iso19139/utils/geometry.mjs +31 -0
  27. package/esm2022/libs/api/metadata-converter/src/lib/iso19139/utils/keyword.mapper.mjs +1 -1
  28. package/esm2022/libs/api/metadata-converter/src/lib/iso19139/write-parts.mjs +151 -101
  29. package/esm2022/libs/api/metadata-converter/src/lib/xml-utils.mjs +118 -24
  30. package/esm2022/libs/api/repository/src/lib/gn4/auth/auth.service.mjs +4 -4
  31. package/esm2022/libs/api/repository/src/lib/gn4/auth/gravatar.service.mjs +4 -4
  32. package/esm2022/libs/api/repository/src/lib/gn4/elasticsearch/elasticsearch.service.mjs +4 -4
  33. package/esm2022/libs/api/repository/src/lib/gn4/favorites/favorites.service.mjs +4 -4
  34. package/esm2022/libs/api/repository/src/lib/gn4/gn4-repository.mjs +156 -14
  35. package/esm2022/libs/api/repository/src/lib/gn4/organizations/organizations-from-groups.service.mjs +5 -4
  36. package/esm2022/libs/api/repository/src/lib/gn4/organizations/organizations-from-metadata.service.mjs +6 -4
  37. package/esm2022/libs/api/repository/src/lib/gn4/platform/gn4-platform.mapper.mjs +25 -7
  38. package/esm2022/libs/api/repository/src/lib/gn4/platform/gn4-platform.service.mjs +114 -18
  39. package/esm2022/libs/api/repository/src/lib/gn4/selection/selection.service.mjs +4 -4
  40. package/esm2022/libs/api/repository/src/lib/gn4/settings/gn4-settings.service.mjs +4 -4
  41. package/esm2022/libs/common/domain/src/lib/model/error/index.mjs +2 -0
  42. package/esm2022/libs/common/domain/src/lib/model/error/publication-version.error.mjs +8 -0
  43. package/esm2022/libs/common/domain/src/lib/model/record/contact.model.mjs +28 -1
  44. package/esm2022/libs/common/domain/src/lib/model/record/index.mjs +2 -1
  45. package/esm2022/libs/common/domain/src/lib/model/record/metadata.model.mjs +1 -1
  46. package/esm2022/libs/common/domain/src/lib/model/record/organization.model.mjs +1 -1
  47. package/esm2022/libs/common/domain/src/lib/model/record/translation.model.mjs +2 -0
  48. package/esm2022/libs/common/domain/src/lib/model/thesaurus/thesaurus.model.mjs +1 -1
  49. package/esm2022/libs/common/domain/src/lib/model/user/user.model.mjs +1 -1
  50. package/esm2022/libs/common/domain/src/lib/platform.service.interface.mjs +1 -1
  51. package/esm2022/libs/common/domain/src/lib/repository/records-repository.interface.mjs +1 -1
  52. package/esm2022/libs/data-access/gn4/src/fixtures/site.fixtures.mjs +5 -5
  53. package/esm2022/libs/data-access/gn4/src/fixtures/ui.fixtures.mjs +3 -3
  54. package/esm2022/libs/data-access/gn4/src/openapi/api/atom.api.service.mjs +4 -4
  55. package/esm2022/libs/data-access/gn4/src/openapi/api/customstyle.api.service.mjs +4 -4
  56. package/esm2022/libs/data-access/gn4/src/openapi/api/formatters.api.service.mjs +4 -4
  57. package/esm2022/libs/data-access/gn4/src/openapi/api/groups.api.service.mjs +4 -4
  58. package/esm2022/libs/data-access/gn4/src/openapi/api/harvesters.api.service.mjs +4 -4
  59. package/esm2022/libs/data-access/gn4/src/openapi/api/identifiers.api.service.mjs +4 -4
  60. package/esm2022/libs/data-access/gn4/src/openapi/api/languages.api.service.mjs +4 -4
  61. package/esm2022/libs/data-access/gn4/src/openapi/api/links.api.service.mjs +4 -4
  62. package/esm2022/libs/data-access/gn4/src/openapi/api/logos.api.service.mjs +4 -4
  63. package/esm2022/libs/data-access/gn4/src/openapi/api/mapservers.api.service.mjs +4 -4
  64. package/esm2022/libs/data-access/gn4/src/openapi/api/mapservices.api.service.mjs +4 -4
  65. package/esm2022/libs/data-access/gn4/src/openapi/api/me.api.service.mjs +4 -4
  66. package/esm2022/libs/data-access/gn4/src/openapi/api/operations.api.service.mjs +4 -4
  67. package/esm2022/libs/data-access/gn4/src/openapi/api/pages.api.service.mjs +4 -4
  68. package/esm2022/libs/data-access/gn4/src/openapi/api/processes.api.service.mjs +4 -4
  69. package/esm2022/libs/data-access/gn4/src/openapi/api/records.api.service.mjs +6 -10
  70. package/esm2022/libs/data-access/gn4/src/openapi/api/regions.api.service.mjs +4 -4
  71. package/esm2022/libs/data-access/gn4/src/openapi/api/registries.api.service.mjs +4 -4
  72. package/esm2022/libs/data-access/gn4/src/openapi/api/related.api.service.mjs +4 -4
  73. package/esm2022/libs/data-access/gn4/src/openapi/api/search.api.service.mjs +4 -4
  74. package/esm2022/libs/data-access/gn4/src/openapi/api/selections.api.service.mjs +4 -4
  75. package/esm2022/libs/data-access/gn4/src/openapi/api/site.api.service.mjs +4 -4
  76. package/esm2022/libs/data-access/gn4/src/openapi/api/sources.api.service.mjs +4 -4
  77. package/esm2022/libs/data-access/gn4/src/openapi/api/standards.api.service.mjs +4 -4
  78. package/esm2022/libs/data-access/gn4/src/openapi/api/status.api.service.mjs +4 -4
  79. package/esm2022/libs/data-access/gn4/src/openapi/api/tags.api.service.mjs +4 -4
  80. package/esm2022/libs/data-access/gn4/src/openapi/api/tools.api.service.mjs +4 -4
  81. package/esm2022/libs/data-access/gn4/src/openapi/api/ui.api.service.mjs +4 -4
  82. package/esm2022/libs/data-access/gn4/src/openapi/api/userfeedback.api.service.mjs +4 -4
  83. package/esm2022/libs/data-access/gn4/src/openapi/api/users.api.service.mjs +4 -4
  84. package/esm2022/libs/data-access/gn4/src/openapi/api/usersearches.api.service.mjs +4 -4
  85. package/esm2022/libs/data-access/gn4/src/openapi/api/userselections.api.service.mjs +4 -4
  86. package/esm2022/libs/data-access/gn4/src/openapi/api.module.mjs +5 -5
  87. package/esm2022/libs/data-access/gn4/src/openapi/model/user.api.model.mjs +1 -1
  88. package/esm2022/libs/feature/auth/src/lib/feature-auth.module.mjs +5 -5
  89. package/esm2022/libs/feature/catalog/src/index.mjs +2 -1
  90. package/esm2022/libs/feature/catalog/src/lib/feature-catalog.module.mjs +11 -8
  91. package/esm2022/libs/feature/catalog/src/lib/my-org/my-org.service.mjs +4 -4
  92. package/esm2022/libs/feature/catalog/src/lib/organisations/organisations.component.mjs +12 -12
  93. package/esm2022/libs/feature/catalog/src/lib/organization-url.token.mjs +4 -0
  94. package/esm2022/libs/feature/catalog/src/lib/records/records.service.mjs +7 -9
  95. package/esm2022/libs/feature/catalog/src/lib/site-title/site-title.component.mjs +4 -4
  96. package/esm2022/libs/feature/catalog/src/lib/source-label/source-label.component.mjs +4 -4
  97. package/esm2022/libs/feature/catalog/src/lib/sources/sources.service.mjs +4 -4
  98. package/esm2022/libs/feature/dataviz/src/lib/chart-view/chart-view.component.mjs +8 -8
  99. package/esm2022/libs/feature/dataviz/src/lib/feature-dataviz.module.mjs +18 -12
  100. package/esm2022/libs/feature/dataviz/src/lib/figure/figure-container/figure-container.component.mjs +4 -4
  101. package/esm2022/libs/feature/dataviz/src/lib/figure/figure.service.mjs +4 -4
  102. package/esm2022/libs/feature/dataviz/src/lib/geo-table-view/geo-table-view.component.mjs +41 -51
  103. package/esm2022/libs/feature/dataviz/src/lib/service/data.service.mjs +4 -4
  104. package/esm2022/libs/feature/dataviz/src/lib/table-view/table-view.component.mjs +5 -5
  105. package/esm2022/libs/feature/editor/src/index.mjs +2 -1
  106. package/esm2022/libs/feature/editor/src/lib/+state/editor.actions.mjs +4 -1
  107. package/esm2022/libs/feature/editor/src/lib/+state/editor.effects.mjs +37 -8
  108. package/esm2022/libs/feature/editor/src/lib/+state/editor.facade.mjs +19 -7
  109. package/esm2022/libs/feature/editor/src/lib/+state/editor.models.mjs +1 -1
  110. package/esm2022/libs/feature/editor/src/lib/+state/editor.reducer.mjs +12 -4
  111. package/esm2022/libs/feature/editor/src/lib/+state/editor.selectors.mjs +18 -6
  112. package/esm2022/libs/feature/editor/src/lib/components/contact-card/contact-card.component.mjs +16 -0
  113. package/esm2022/libs/feature/editor/src/lib/components/generic-keywords/generic-keywords.component.mjs +88 -0
  114. package/esm2022/libs/feature/editor/src/lib/components/import-record/import-record.component.mjs +113 -0
  115. package/esm2022/libs/feature/editor/src/lib/components/online-resource-card/online-resource-card.component.mjs +85 -0
  116. package/esm2022/libs/feature/editor/src/lib/components/online-service-resource-input/online-service-resource-input.component.mjs +70 -0
  117. package/esm2022/libs/feature/editor/src/lib/components/record-form/form-field/form-field-array/form-field-array.component.mjs +4 -4
  118. package/esm2022/libs/feature/editor/src/lib/components/record-form/form-field/form-field-contacts/form-field-contacts.component.mjs +109 -0
  119. package/esm2022/libs/feature/editor/src/lib/components/record-form/form-field/form-field-contacts-for-resource/form-field-contacts-for-resource.component.mjs +157 -0
  120. package/esm2022/libs/feature/editor/src/lib/components/record-form/form-field/form-field-date-updated/form-field-date-updated.component.mjs +19 -0
  121. package/esm2022/libs/feature/editor/src/lib/components/record-form/form-field/form-field-file/form-field-file.component.mjs +4 -4
  122. package/esm2022/libs/feature/editor/src/lib/components/record-form/form-field/form-field-keywords/form-field-keywords.component.mjs +50 -0
  123. package/esm2022/libs/feature/editor/src/lib/components/record-form/form-field/form-field-license/form-field-license.component.mjs +13 -11
  124. package/esm2022/libs/feature/editor/src/lib/components/record-form/form-field/form-field-map-container/form-field-map-container.component.mjs +79 -0
  125. package/esm2022/libs/feature/editor/src/lib/components/record-form/form-field/form-field-object/form-field-object.component.mjs +4 -4
  126. package/esm2022/libs/feature/editor/src/lib/components/record-form/form-field/form-field-online-link-resources/form-field-online-link-resources.component.mjs +151 -0
  127. package/esm2022/libs/feature/editor/src/lib/components/record-form/form-field/form-field-online-resources/form-field-online-resources.component.mjs +191 -0
  128. package/esm2022/libs/feature/editor/src/lib/components/record-form/form-field/form-field-open-data/form-field-open-data.component.mjs +44 -0
  129. package/esm2022/libs/feature/editor/src/lib/components/record-form/form-field/form-field-overviews/form-field-overviews.component.mjs +104 -0
  130. package/esm2022/libs/feature/editor/src/lib/components/record-form/form-field/form-field-rich/form-field-rich.component.mjs +14 -18
  131. package/esm2022/libs/feature/editor/src/lib/components/record-form/form-field/form-field-simple/form-field-simple.component.mjs +11 -10
  132. package/esm2022/libs/feature/editor/src/lib/components/record-form/form-field/form-field-spatial-extent/form-field-spatial-extent.component.mjs +141 -6
  133. package/esm2022/libs/feature/editor/src/lib/components/record-form/form-field/form-field-temporal-extents/form-field-temporal-extents.component.mjs +88 -0
  134. package/esm2022/libs/feature/editor/src/lib/components/record-form/form-field/form-field-update-frequency/form-field-update-frequency.component.mjs +73 -57
  135. package/esm2022/libs/feature/editor/src/lib/components/record-form/form-field/form-field.component.mjs +53 -70
  136. package/esm2022/libs/feature/editor/src/lib/components/record-form/form-field/index.mjs +5 -3
  137. package/esm2022/libs/feature/editor/src/lib/components/record-form/record-form.component.mjs +15 -9
  138. package/esm2022/libs/feature/editor/src/lib/components/wizard/wizard.component.mjs +5 -5
  139. package/esm2022/libs/feature/editor/src/lib/components/wizard-field/wizard-field.component.mjs +11 -11
  140. package/esm2022/libs/feature/editor/src/lib/components/wizard-summarize/wizard-summarize.component.mjs +4 -4
  141. package/esm2022/libs/feature/editor/src/lib/expressions.mjs +1 -1
  142. package/esm2022/libs/feature/editor/src/lib/feature-editor.module.mjs +12 -9
  143. package/esm2022/libs/feature/editor/src/lib/fields.config.mjs +217 -45
  144. package/esm2022/libs/feature/editor/src/lib/models/editor-config.model.mjs +2 -0
  145. package/esm2022/libs/feature/editor/src/lib/models/index.mjs +2 -1
  146. package/esm2022/libs/feature/editor/src/lib/services/editor.service.mjs +36 -45
  147. package/esm2022/libs/feature/editor/src/lib/services/wizard.service.mjs +4 -4
  148. package/esm2022/libs/feature/map/src/index.mjs +2 -9
  149. package/esm2022/libs/feature/map/src/lib/+state/map.actions.mjs +4 -7
  150. package/esm2022/libs/feature/map/src/lib/+state/map.facade.mjs +12 -18
  151. package/esm2022/libs/feature/map/src/lib/+state/map.reducer.mjs +13 -44
  152. package/esm2022/libs/feature/map/src/lib/+state/map.selectors.mjs +3 -2
  153. package/esm2022/libs/feature/map/src/lib/add-layer-from-catalog/add-layer-from-catalog.component.mjs +8 -8
  154. package/esm2022/libs/feature/map/src/lib/add-layer-from-catalog/add-layer-record-preview/add-layer-record-preview.component.mjs +21 -20
  155. package/esm2022/libs/feature/map/src/lib/add-layer-from-file/add-layer-from-file.component.mjs +25 -16
  156. package/esm2022/libs/feature/map/src/lib/add-layer-from-ogc-api/add-layer-from-ogc-api.component.mjs +17 -16
  157. package/esm2022/libs/feature/map/src/lib/add-layer-from-wfs/add-layer-from-wfs.component.mjs +20 -15
  158. package/esm2022/libs/feature/map/src/lib/add-layer-from-wms/add-layer-from-wms.component.mjs +18 -13
  159. package/esm2022/libs/feature/map/src/lib/constant/index.mjs +1 -2
  160. package/esm2022/libs/feature/map/src/lib/feature-map.module.mjs +12 -75
  161. package/esm2022/libs/feature/map/src/lib/geocoding/geocoding.component.mjs +44 -30
  162. package/esm2022/libs/feature/map/src/lib/geocoding.service.mjs +4 -4
  163. package/esm2022/libs/feature/map/src/lib/layers-panel/layers-panel.component.mjs +65 -21
  164. package/esm2022/libs/feature/map/src/lib/map-state-container/map-state-container.component.mjs +27 -0
  165. package/esm2022/libs/feature/map/src/lib/style/map-style.fixtures.mjs +3 -3
  166. package/esm2022/libs/feature/map/src/lib/style/map-style.service.mjs +4 -4
  167. package/esm2022/libs/feature/map/src/lib/utils/map-utils.service.mjs +14 -173
  168. package/esm2022/libs/feature/notifications/src/lib/feature-notifications.module.mjs +5 -5
  169. package/esm2022/libs/feature/notifications/src/lib/notifications-container/notifications-container.component.mjs +4 -4
  170. package/esm2022/libs/feature/notifications/src/lib/notifications.service.mjs +4 -4
  171. package/esm2022/libs/feature/record/src/lib/data-view/data-view.component.mjs +4 -4
  172. package/esm2022/libs/feature/record/src/lib/data-view-permalink/data-view-permalink.component.mjs +44 -25
  173. package/esm2022/libs/feature/record/src/lib/data-view-share/data-view-share.component.mjs +15 -7
  174. package/esm2022/libs/feature/record/src/lib/data-view-web-component/data-view-web-component.component.mjs +51 -17
  175. package/esm2022/libs/feature/record/src/lib/external-viewer-button/external-viewer-button.component.mjs +24 -20
  176. package/esm2022/libs/feature/record/src/lib/feature-record.module.mjs +46 -18
  177. package/esm2022/libs/feature/record/src/lib/map-view/map-view.component.mjs +41 -53
  178. package/esm2022/libs/feature/record/src/lib/state/mdview.effects.mjs +5 -5
  179. package/esm2022/libs/feature/record/src/lib/state/mdview.facade.mjs +7 -5
  180. package/esm2022/libs/feature/router/src/lib/default/constants.mjs +2 -1
  181. package/esm2022/libs/feature/router/src/lib/default/container/search-router.container.directive.mjs +4 -4
  182. package/esm2022/libs/feature/router/src/lib/default/router.config.mjs +1 -1
  183. package/esm2022/libs/feature/router/src/lib/default/router.module.mjs +5 -5
  184. package/esm2022/libs/feature/router/src/lib/default/router.service.mjs +12 -5
  185. package/esm2022/libs/feature/router/src/lib/default/services/router-search.service.mjs +4 -4
  186. package/esm2022/libs/feature/router/src/lib/default/state/router.effects.mjs +4 -4
  187. package/esm2022/libs/feature/router/src/lib/default/state/router.facade.mjs +11 -4
  188. package/esm2022/libs/feature/search/src/index.mjs +2 -2
  189. package/esm2022/libs/feature/search/src/lib/facets/facets-container/facets-container.component.mjs +4 -4
  190. package/esm2022/libs/feature/search/src/lib/facets/facets.module.mjs +5 -5
  191. package/esm2022/libs/feature/search/src/lib/facets/facets.service.mjs +4 -4
  192. package/esm2022/libs/feature/search/src/lib/favorites/favorite-star/favorite-star.component.mjs +4 -4
  193. package/esm2022/libs/feature/search/src/lib/feature-search.module.mjs +11 -12
  194. package/esm2022/libs/feature/search/src/lib/filter-dropdown/filter-dropdown.component.mjs +4 -4
  195. package/esm2022/libs/feature/search/src/lib/fuzzy-search/fuzzy-search.component.mjs +6 -6
  196. package/esm2022/libs/feature/search/src/lib/records-metrics/records-metrics.component.mjs +4 -4
  197. package/esm2022/libs/feature/search/src/lib/results-hits-number/results-hits.container.component.mjs +4 -4
  198. package/esm2022/libs/feature/search/src/lib/results-layout/results-layout.component.mjs +4 -4
  199. package/esm2022/libs/feature/search/src/lib/results-list/results-list.container.component.mjs +4 -4
  200. package/esm2022/libs/feature/search/src/lib/results-table/results-table-container.component.mjs +94 -0
  201. package/esm2022/libs/feature/search/src/lib/sort-by/sort-by.component.mjs +4 -4
  202. package/esm2022/libs/feature/search/src/lib/state/container/search-state.container.directive.mjs +4 -4
  203. package/esm2022/libs/feature/search/src/lib/state/effects.mjs +4 -4
  204. package/esm2022/libs/feature/search/src/lib/state/search.facade.mjs +11 -6
  205. package/esm2022/libs/feature/search/src/lib/state/selectors.mjs +4 -1
  206. package/esm2022/libs/feature/search/src/lib/utils/service/fields.mjs +20 -1
  207. package/esm2022/libs/feature/search/src/lib/utils/service/fields.service.mjs +13 -7
  208. package/esm2022/libs/feature/search/src/lib/utils/service/search.service.mjs +4 -4
  209. package/esm2022/libs/ui/catalog/src/lib/catalog-title/catalog-title.component.mjs +4 -4
  210. package/esm2022/libs/ui/catalog/src/lib/language-switcher/language-switcher.component.mjs +4 -4
  211. package/esm2022/libs/ui/catalog/src/lib/organisation-preview/organisation-preview.component.mjs +8 -8
  212. package/esm2022/libs/ui/catalog/src/lib/organisations-filter/organisations-filter.component.mjs +9 -9
  213. package/esm2022/libs/ui/catalog/src/lib/organisations-result/organisations-result.component.mjs +4 -4
  214. package/esm2022/libs/ui/catalog/src/lib/ui-catalog.module.mjs +28 -14
  215. package/esm2022/libs/ui/dataviz/src/lib/chart/chart.component.mjs +4 -4
  216. package/esm2022/libs/ui/dataviz/src/lib/figure/figure.component.mjs +9 -12
  217. package/esm2022/libs/ui/dataviz/src/lib/table/table.component.mjs +4 -4
  218. package/esm2022/libs/ui/dataviz/src/lib/table/table.fixtures.mjs +3 -3
  219. package/esm2022/libs/ui/dataviz/src/lib/ui-dataviz.module.mjs +33 -7
  220. package/esm2022/libs/ui/elements/src/index.mjs +5 -4
  221. package/esm2022/libs/ui/elements/src/lib/api-card/api-card.component.mjs +8 -8
  222. package/esm2022/libs/ui/elements/src/lib/avatar/avatar.component.mjs +4 -4
  223. package/esm2022/libs/ui/elements/src/lib/confirmation-dialog/confirmation-dialog.component.mjs +27 -0
  224. package/esm2022/libs/ui/elements/src/lib/content-ghost/content-ghost.component.mjs +4 -4
  225. package/esm2022/libs/ui/elements/src/lib/download-item/download-item.component.mjs +8 -8
  226. package/esm2022/libs/ui/elements/src/lib/downloads-list/downloads-list.component.mjs +4 -4
  227. package/esm2022/libs/ui/elements/src/lib/error/error.component.mjs +9 -7
  228. package/esm2022/libs/ui/elements/src/lib/image-overlay-preview/image-overlay-preview.component.mjs +8 -8
  229. package/esm2022/libs/ui/elements/src/lib/link-card/link-card.component.mjs +18 -8
  230. package/esm2022/libs/ui/elements/src/lib/markdown-editor/markdown-editor.component.mjs +8 -9
  231. package/esm2022/libs/ui/elements/src/lib/markdown-parser/markdown-parser.component.mjs +5 -5
  232. package/esm2022/libs/ui/elements/src/lib/metadata-catalog/metadata-catalog.component.mjs +4 -4
  233. package/esm2022/libs/ui/elements/src/lib/metadata-contact/metadata-contact.component.mjs +8 -8
  234. package/esm2022/libs/ui/elements/src/lib/metadata-info/linkify.directive.mjs +5 -5
  235. package/esm2022/libs/ui/elements/src/lib/metadata-info/metadata-info.component.mjs +15 -15
  236. package/esm2022/libs/ui/elements/src/lib/metadata-quality/metadata-quality.component.mjs +7 -13
  237. package/esm2022/libs/ui/elements/src/lib/metadata-quality-item/metadata-quality-item.component.mjs +7 -7
  238. package/esm2022/libs/ui/elements/src/lib/notification/notification.component.mjs +38 -7
  239. package/esm2022/libs/ui/elements/src/lib/pagination/pagination.component.mjs +9 -9
  240. package/esm2022/libs/ui/elements/src/lib/pagination-buttons/pagination-buttons.component.mjs +7 -7
  241. package/esm2022/libs/ui/elements/src/lib/record-api-form/record-api-form.component.mjs +7 -7
  242. package/esm2022/libs/ui/elements/src/lib/related-record-card/related-record-card.component.mjs +30 -11
  243. package/esm2022/libs/ui/elements/src/lib/thumbnail/thumbnail.component.mjs +4 -4
  244. package/esm2022/libs/ui/elements/src/lib/ui-elements.module.mjs +78 -19
  245. package/esm2022/libs/ui/elements/src/lib/user-feedback-item/time-since.pipe.mjs +4 -4
  246. package/esm2022/libs/ui/elements/src/lib/user-feedback-item/user-feedback-item.component.mjs +9 -9
  247. package/esm2022/libs/ui/elements/src/lib/user-preview/user-preview.component.mjs +5 -5
  248. package/esm2022/libs/ui/inputs/src/index.mjs +7 -1
  249. package/esm2022/libs/ui/inputs/src/lib/autocomplete/autocomplete.component.mjs +98 -31
  250. package/esm2022/libs/ui/inputs/src/lib/badge/badge.component.mjs +44 -0
  251. package/esm2022/libs/ui/inputs/src/lib/button/button.component.mjs +11 -4
  252. package/esm2022/libs/ui/inputs/src/lib/check-toggle/check-toggle.component.mjs +4 -4
  253. package/esm2022/libs/ui/inputs/src/lib/checkbox/checkbox.component.mjs +4 -4
  254. package/esm2022/libs/ui/inputs/src/lib/chips-input/chips-input.component.mjs +4 -4
  255. package/esm2022/libs/ui/inputs/src/lib/copy-text-button/copy-text-button.component.mjs +7 -7
  256. package/esm2022/libs/ui/inputs/src/lib/date-picker/date-picker.component.mjs +24 -7
  257. package/esm2022/libs/ui/inputs/src/lib/date-range-picker/date-range-picker.component.mjs +38 -16
  258. package/esm2022/libs/ui/inputs/src/lib/drag-and-drop-file-input/drag-and-drop-file-input.component.mjs +4 -4
  259. package/esm2022/libs/ui/inputs/src/lib/dropdown-multiselect/dropdown-multiselect.component.mjs +7 -7
  260. package/esm2022/libs/ui/inputs/src/lib/dropdown-selector/dropdown-selector.component.mjs +25 -9
  261. package/esm2022/libs/ui/inputs/src/lib/editable-label/editable-label.directive.mjs +28 -26
  262. package/esm2022/libs/ui/inputs/src/lib/file-input/file-input.component.mjs +103 -0
  263. package/esm2022/libs/ui/inputs/src/lib/files-drop/files-drop.directive.mjs +4 -4
  264. package/esm2022/libs/ui/inputs/src/lib/image-input/image-input.component.mjs +50 -22
  265. package/esm2022/libs/ui/inputs/src/lib/navigation-button/navigation-button.component.mjs +6 -6
  266. package/esm2022/libs/ui/inputs/src/lib/previous-next-buttons/previous-next-buttons.component.mjs +17 -7
  267. package/esm2022/libs/ui/inputs/src/lib/search-input/search-input.component.mjs +19 -7
  268. package/esm2022/libs/ui/inputs/src/lib/star-toggle/star-toggle.component.mjs +6 -6
  269. package/esm2022/libs/ui/inputs/src/lib/switch-toggle/switch-toggle.component.mjs +34 -0
  270. package/esm2022/libs/ui/inputs/src/lib/text-area/text-area.component.mjs +9 -23
  271. package/esm2022/libs/ui/inputs/src/lib/text-input/text-input.component.mjs +8 -19
  272. package/esm2022/libs/ui/inputs/src/lib/ui-inputs.module.mjs +48 -28
  273. package/esm2022/libs/ui/inputs/src/lib/url-input/url-input.component.mjs +69 -0
  274. package/esm2022/libs/ui/inputs/src/lib/viewport-intersector/viewport-intersector.component.mjs +4 -4
  275. package/esm2022/libs/ui/layout/src/index.mjs +4 -1
  276. package/esm2022/libs/ui/layout/src/lib/anchor-link/anchor-link.directive.mjs +4 -4
  277. package/esm2022/libs/ui/layout/src/lib/block-list/block-list.component.mjs +4 -4
  278. package/esm2022/libs/ui/layout/src/lib/carousel/carousel.component.mjs +4 -4
  279. package/esm2022/libs/ui/layout/src/lib/expandable-panel/expandable-panel.component.mjs +6 -6
  280. package/esm2022/libs/ui/layout/src/lib/expandable-panel-button/expandable-panel-button.component.mjs +6 -6
  281. package/esm2022/libs/ui/layout/src/lib/form-field-wrapper/form-field-wrapper.component.mjs +7 -6
  282. package/esm2022/libs/ui/layout/src/lib/interactive-table/interactive-table-column/interactive-table-column.component.mjs +4 -4
  283. package/esm2022/libs/ui/layout/src/lib/interactive-table/interactive-table.component.mjs +7 -7
  284. package/esm2022/libs/ui/layout/src/lib/max-lines/max-lines.component.mjs +71 -0
  285. package/esm2022/libs/ui/layout/src/lib/modal-dialog/modal-dialog.component.mjs +29 -0
  286. package/esm2022/libs/ui/layout/src/lib/sortable-list/sortable-list.component.mjs +35 -0
  287. package/esm2022/libs/ui/layout/src/lib/sticky-header/sticky-header.component.mjs +4 -4
  288. package/esm2022/libs/ui/layout/src/lib/ui-layout.module.mjs +20 -8
  289. package/esm2022/libs/ui/map/src/index.mjs +4 -3
  290. package/esm2022/libs/ui/map/src/lib/components/feature-detail/feature-detail.component.mjs +10 -8
  291. package/esm2022/libs/ui/map/src/lib/components/map-container/map-container.component.mjs +147 -0
  292. package/esm2022/libs/ui/map/src/lib/components/map-container/map-settings.token.mjs +13 -0
  293. package/esm2022/libs/ui/map/src/lib/map-utils.mjs +37 -0
  294. package/esm2022/libs/ui/search/src/index.mjs +2 -1
  295. package/esm2022/libs/ui/search/src/lib/facets/facet-block/facet-block.component.mjs +7 -7
  296. package/esm2022/libs/ui/search/src/lib/facets/facet-item/facet-item.component.mjs +7 -7
  297. package/esm2022/libs/ui/search/src/lib/facets/facet-list/facet-list.component.mjs +4 -4
  298. package/esm2022/libs/ui/search/src/lib/facets/facets.module.mjs +5 -5
  299. package/esm2022/libs/ui/search/src/lib/facets/fixtures/aggregations-model-response.mjs +7 -7
  300. package/esm2022/libs/ui/search/src/lib/record-metric/record-metric.component.mjs +4 -4
  301. package/esm2022/libs/ui/search/src/lib/record-preview/record-preview.component.mjs +4 -4
  302. package/esm2022/libs/ui/search/src/lib/record-preview-card/record-preview-card.component.mjs +4 -4
  303. package/esm2022/libs/ui/search/src/lib/record-preview-feed/record-preview-feed.component.mjs +6 -6
  304. package/esm2022/libs/ui/search/src/lib/record-preview-list/record-preview-list.component.mjs +4 -4
  305. package/esm2022/libs/ui/search/src/lib/record-preview-row/record-preview-row.component.mjs +6 -6
  306. package/esm2022/libs/ui/search/src/lib/record-preview-text/record-preview-text.component.mjs +4 -4
  307. package/esm2022/libs/ui/search/src/lib/record-preview-title/record-preview-title.component.mjs +4 -4
  308. package/esm2022/libs/ui/search/src/lib/results-hits-number/results-hits-number.component.mjs +4 -4
  309. package/esm2022/libs/ui/search/src/lib/results-list/results-list.component.mjs +4 -4
  310. package/esm2022/libs/ui/search/src/lib/results-list-item/results-list-item.component.mjs +4 -4
  311. package/esm2022/libs/ui/search/src/lib/results-table/action-menu/action-menu.component.mjs +59 -0
  312. package/esm2022/libs/ui/search/src/lib/results-table/results-table.component.mjs +197 -0
  313. package/esm2022/libs/ui/search/src/lib/ui-search.module.mjs +31 -11
  314. package/esm2022/libs/ui/widgets/src/index.mjs +2 -2
  315. package/esm2022/libs/ui/widgets/src/lib/color-scale/color-scale.component.mjs +4 -4
  316. package/esm2022/libs/ui/widgets/src/lib/loading-mask/loading-mask.component.mjs +4 -4
  317. package/esm2022/libs/ui/widgets/src/lib/popover/popover.component.mjs +68 -0
  318. package/esm2022/libs/ui/widgets/src/lib/popup-alert/popup-alert.component.mjs +8 -6
  319. package/esm2022/libs/ui/widgets/src/lib/progress-bar/progress-bar.component.mjs +4 -4
  320. package/esm2022/libs/ui/widgets/src/lib/spinning-loader/spinning-loader.component.mjs +4 -4
  321. package/esm2022/libs/ui/widgets/src/lib/step-bar/step-bar.component.mjs +4 -4
  322. package/esm2022/libs/ui/widgets/src/lib/ui-widgets.module.mjs +7 -21
  323. package/esm2022/libs/util/app-config/src/index.mjs +2 -1
  324. package/esm2022/libs/util/app-config/src/lib/fixtures.mjs +10 -10
  325. package/esm2022/libs/util/app-config/src/lib/map-layers.mjs +27 -0
  326. package/esm2022/libs/util/i18n/src/index.mjs +2 -1
  327. package/esm2022/libs/util/i18n/src/lib/i18n.constants.mjs +1 -38
  328. package/esm2022/libs/util/i18n/src/lib/i18n.interceptor.mjs +4 -4
  329. package/esm2022/libs/util/i18n/src/lib/lang.service.mjs +5 -5
  330. package/esm2022/libs/util/i18n/src/lib/language-codes.mjs +40 -0
  331. package/esm2022/libs/util/i18n/src/lib/util-i18n.module.mjs +5 -5
  332. package/esm2022/libs/util/shared/src/lib/image-fallback.directive.mjs +4 -4
  333. package/esm2022/libs/util/shared/src/lib/links/link-classifier.service.mjs +4 -4
  334. package/esm2022/libs/util/shared/src/lib/links/link-utils.mjs +1 -1
  335. package/esm2022/libs/util/shared/src/lib/services/log.service.mjs +4 -4
  336. package/esm2022/libs/util/shared/src/lib/services/proxy.service.mjs +4 -4
  337. package/esm2022/libs/util/shared/src/lib/services/theme.service.mjs +5 -4
  338. package/esm2022/libs/util/shared/src/lib/util-shared.module.mjs +5 -5
  339. package/esm2022/libs/util/shared/src/lib/utils/bytes-convert.mjs +4 -1
  340. package/esm2022/libs/util/shared/src/lib/utils/index.mjs +2 -1
  341. package/esm2022/libs/util/shared/src/lib/utils/no-duplicate-file-name.mjs +19 -0
  342. package/esm2022/translations/de.json +182 -34
  343. package/esm2022/translations/en.json +189 -41
  344. package/esm2022/translations/es.json +159 -11
  345. package/esm2022/translations/fr.json +220 -72
  346. package/esm2022/translations/it.json +162 -14
  347. package/esm2022/translations/nl.json +159 -11
  348. package/esm2022/translations/pt.json +159 -11
  349. package/fesm2022/geonetwork-ui.mjs +9969 -5377
  350. package/fesm2022/geonetwork-ui.mjs.map +1 -1
  351. package/libs/api/metadata-converter/src/index.d.ts +3 -0
  352. package/libs/api/metadata-converter/src/index.d.ts.map +1 -1
  353. package/libs/api/metadata-converter/src/lib/common/license.d.ts +3 -0
  354. package/libs/api/metadata-converter/src/lib/common/license.d.ts.map +1 -0
  355. package/libs/api/metadata-converter/src/lib/common/url.d.ts +7 -0
  356. package/libs/api/metadata-converter/src/lib/common/url.d.ts.map +1 -0
  357. package/libs/api/metadata-converter/src/lib/dcat-ap/dcat-ap.converter.d.ts +13 -0
  358. package/libs/api/metadata-converter/src/lib/dcat-ap/dcat-ap.converter.d.ts.map +1 -0
  359. package/libs/api/metadata-converter/src/lib/dcat-ap/index.d.ts +2 -0
  360. package/libs/api/metadata-converter/src/lib/dcat-ap/index.d.ts.map +1 -0
  361. package/libs/api/metadata-converter/src/lib/dcat-ap/namespaces.d.ts +16 -0
  362. package/libs/api/metadata-converter/src/lib/dcat-ap/namespaces.d.ts.map +1 -0
  363. package/libs/api/metadata-converter/src/lib/dcat-ap/read-parts.d.ts +21 -0
  364. package/libs/api/metadata-converter/src/lib/dcat-ap/read-parts.d.ts.map +1 -0
  365. package/libs/api/metadata-converter/src/lib/dcat-ap/utils/graph-utils.d.ts +15 -0
  366. package/libs/api/metadata-converter/src/lib/dcat-ap/utils/graph-utils.d.ts.map +1 -0
  367. package/libs/api/metadata-converter/src/lib/dcat-ap/utils/serialize-to-xml.d.ts +8 -0
  368. package/libs/api/metadata-converter/src/lib/dcat-ap/utils/serialize-to-xml.d.ts.map +1 -0
  369. package/libs/api/metadata-converter/src/lib/dcat-ap/utils/uri.d.ts +2 -0
  370. package/libs/api/metadata-converter/src/lib/dcat-ap/utils/uri.d.ts.map +1 -0
  371. package/libs/api/metadata-converter/src/lib/dcat-ap/write-parts.d.ts +6 -0
  372. package/libs/api/metadata-converter/src/lib/dcat-ap/write-parts.d.ts.map +1 -0
  373. package/libs/api/metadata-converter/src/lib/find-converter.d.ts.map +1 -1
  374. package/libs/api/metadata-converter/src/lib/function-utils.d.ts +1 -1
  375. package/libs/api/metadata-converter/src/lib/function-utils.d.ts.map +1 -1
  376. package/libs/api/metadata-converter/src/lib/gn4/atomic-operations.d.ts.map +1 -1
  377. package/libs/api/metadata-converter/src/lib/gn4/gn4.converter.d.ts.map +1 -1
  378. package/libs/api/metadata-converter/src/lib/gn4/gn4.field.mapper.d.ts +3 -3
  379. package/libs/api/metadata-converter/src/lib/gn4/gn4.field.mapper.d.ts.map +1 -1
  380. package/libs/api/metadata-converter/src/lib/gn4/types/index.d.ts +1 -0
  381. package/libs/api/metadata-converter/src/lib/gn4/types/index.d.ts.map +1 -1
  382. package/libs/api/metadata-converter/src/lib/gn4/types/keywords.model.d.ts +27 -0
  383. package/libs/api/metadata-converter/src/lib/gn4/types/keywords.model.d.ts.map +1 -0
  384. package/libs/api/metadata-converter/src/lib/gn4/types/metadata.model.d.ts +1 -0
  385. package/libs/api/metadata-converter/src/lib/gn4/types/metadata.model.d.ts.map +1 -1
  386. package/libs/api/metadata-converter/src/lib/iso19115-3/iso19115-3.converter.d.ts.map +1 -1
  387. package/libs/api/metadata-converter/src/lib/iso19115-3/read-parts.d.ts +6 -4
  388. package/libs/api/metadata-converter/src/lib/iso19115-3/read-parts.d.ts.map +1 -1
  389. package/libs/api/metadata-converter/src/lib/iso19115-3/write-parts.d.ts +5 -4
  390. package/libs/api/metadata-converter/src/lib/iso19115-3/write-parts.d.ts.map +1 -1
  391. package/libs/api/metadata-converter/src/lib/iso19139/iso19139.converter.d.ts +3 -2
  392. package/libs/api/metadata-converter/src/lib/iso19139/iso19139.converter.d.ts.map +1 -1
  393. package/libs/api/metadata-converter/src/lib/iso19139/read-parts.d.ts +23 -9
  394. package/libs/api/metadata-converter/src/lib/iso19139/read-parts.d.ts.map +1 -1
  395. package/libs/api/metadata-converter/src/lib/iso19139/utils/geometry.d.ts +5 -0
  396. package/libs/api/metadata-converter/src/lib/iso19139/utils/geometry.d.ts.map +1 -0
  397. package/libs/api/metadata-converter/src/lib/iso19139/utils/keyword.mapper.d.ts +1 -1
  398. package/libs/api/metadata-converter/src/lib/iso19139/utils/keyword.mapper.d.ts.map +1 -1
  399. package/libs/api/metadata-converter/src/lib/iso19139/write-parts.d.ts +20 -15
  400. package/libs/api/metadata-converter/src/lib/iso19139/write-parts.d.ts.map +1 -1
  401. package/libs/api/metadata-converter/src/lib/xml-utils.d.ts +104 -2
  402. package/libs/api/metadata-converter/src/lib/xml-utils.d.ts.map +1 -1
  403. package/libs/api/repository/src/lib/gn4/gn4-repository.d.ts +35 -8
  404. package/libs/api/repository/src/lib/gn4/gn4-repository.d.ts.map +1 -1
  405. package/libs/api/repository/src/lib/gn4/organizations/organizations-from-groups.service.d.ts.map +1 -1
  406. package/libs/api/repository/src/lib/gn4/organizations/organizations-from-metadata.service.d.ts.map +1 -1
  407. package/libs/api/repository/src/lib/gn4/platform/gn4-platform.mapper.d.ts +3 -3
  408. package/libs/api/repository/src/lib/gn4/platform/gn4-platform.mapper.d.ts.map +1 -1
  409. package/libs/api/repository/src/lib/gn4/platform/gn4-platform.service.d.ts +20 -8
  410. package/libs/api/repository/src/lib/gn4/platform/gn4-platform.service.d.ts.map +1 -1
  411. package/libs/common/domain/src/lib/model/error/index.d.ts +2 -0
  412. package/libs/common/domain/src/lib/model/error/index.d.ts.map +1 -0
  413. package/libs/common/domain/src/lib/model/error/publication-version.error.d.ts +5 -0
  414. package/libs/common/domain/src/lib/model/error/publication-version.error.d.ts.map +1 -0
  415. package/libs/common/domain/src/lib/model/record/contact.model.d.ts +2 -1
  416. package/libs/common/domain/src/lib/model/record/contact.model.d.ts.map +1 -1
  417. package/libs/common/domain/src/lib/model/record/index.d.ts +1 -0
  418. package/libs/common/domain/src/lib/model/record/index.d.ts.map +1 -1
  419. package/libs/common/domain/src/lib/model/record/metadata.model.d.ts +24 -16
  420. package/libs/common/domain/src/lib/model/record/metadata.model.d.ts.map +1 -1
  421. package/libs/common/domain/src/lib/model/record/organization.model.d.ts +3 -0
  422. package/libs/common/domain/src/lib/model/record/organization.model.d.ts.map +1 -1
  423. package/libs/common/domain/src/lib/model/record/translation.model.d.ts +26 -0
  424. package/libs/common/domain/src/lib/model/record/translation.model.d.ts.map +1 -0
  425. package/libs/common/domain/src/lib/model/thesaurus/thesaurus.model.d.ts +12 -5
  426. package/libs/common/domain/src/lib/model/thesaurus/thesaurus.model.d.ts.map +1 -1
  427. package/libs/common/domain/src/lib/model/user/user.model.d.ts +1 -1
  428. package/libs/common/domain/src/lib/model/user/user.model.d.ts.map +1 -1
  429. package/libs/common/domain/src/lib/platform.service.interface.d.ts +20 -3
  430. package/libs/common/domain/src/lib/platform.service.interface.d.ts.map +1 -1
  431. package/libs/common/domain/src/lib/repository/records-repository.interface.d.ts +51 -1
  432. package/libs/common/domain/src/lib/repository/records-repository.interface.d.ts.map +1 -1
  433. package/libs/data-access/gn4/src/fixtures/site.fixtures.d.ts +2 -2
  434. package/libs/data-access/gn4/src/fixtures/site.fixtures.d.ts.map +1 -1
  435. package/libs/data-access/gn4/src/fixtures/ui.fixtures.d.ts +1 -1
  436. package/libs/data-access/gn4/src/fixtures/ui.fixtures.d.ts.map +1 -1
  437. package/libs/data-access/gn4/src/openapi/api/records.api.service.d.ts +6 -6
  438. package/libs/data-access/gn4/src/openapi/api/records.api.service.d.ts.map +1 -1
  439. package/libs/data-access/gn4/src/openapi/model/user.api.model.d.ts +1 -1
  440. package/libs/feature/catalog/src/index.d.ts +1 -0
  441. package/libs/feature/catalog/src/index.d.ts.map +1 -1
  442. package/libs/feature/catalog/src/lib/feature-catalog.module.d.ts +2 -1
  443. package/libs/feature/catalog/src/lib/feature-catalog.module.d.ts.map +1 -1
  444. package/libs/feature/catalog/src/lib/organisations/organisations.component.d.ts.map +1 -1
  445. package/libs/feature/catalog/src/lib/organization-url.token.d.ts +3 -0
  446. package/libs/feature/catalog/src/lib/organization-url.token.d.ts.map +1 -0
  447. package/libs/feature/catalog/src/lib/records/records.service.d.ts.map +1 -1
  448. package/libs/feature/dataviz/src/lib/chart-view/chart-view.component.d.ts +2 -2
  449. package/libs/feature/dataviz/src/lib/chart-view/chart-view.component.d.ts.map +1 -1
  450. package/libs/feature/dataviz/src/lib/feature-dataviz.module.d.ts +10 -8
  451. package/libs/feature/dataviz/src/lib/feature-dataviz.module.d.ts.map +1 -1
  452. package/libs/feature/dataviz/src/lib/geo-table-view/geo-table-view.component.d.ts +13 -20
  453. package/libs/feature/dataviz/src/lib/geo-table-view/geo-table-view.component.d.ts.map +1 -1
  454. package/libs/feature/dataviz/src/lib/service/data.service.d.ts +6 -6
  455. package/libs/feature/dataviz/src/lib/service/data.service.d.ts.map +1 -1
  456. package/libs/feature/dataviz/src/lib/table-view/table-view.component.d.ts +3 -3
  457. package/libs/feature/dataviz/src/lib/table-view/table-view.component.d.ts.map +1 -1
  458. package/libs/feature/editor/src/index.d.ts +1 -0
  459. package/libs/feature/editor/src/index.d.ts.map +1 -1
  460. package/libs/feature/editor/src/lib/+state/editor.actions.d.ts +11 -0
  461. package/libs/feature/editor/src/lib/+state/editor.actions.d.ts.map +1 -1
  462. package/libs/feature/editor/src/lib/+state/editor.effects.d.ts +13 -1
  463. package/libs/feature/editor/src/lib/+state/editor.effects.d.ts.map +1 -1
  464. package/libs/feature/editor/src/lib/+state/editor.facade.d.ts +14 -11
  465. package/libs/feature/editor/src/lib/+state/editor.facade.d.ts.map +1 -1
  466. package/libs/feature/editor/src/lib/+state/editor.models.d.ts +9 -1
  467. package/libs/feature/editor/src/lib/+state/editor.models.d.ts.map +1 -1
  468. package/libs/feature/editor/src/lib/+state/editor.reducer.d.ts +13 -2
  469. package/libs/feature/editor/src/lib/+state/editor.reducer.d.ts.map +1 -1
  470. package/libs/feature/editor/src/lib/+state/editor.selectors.d.ts +7 -9
  471. package/libs/feature/editor/src/lib/+state/editor.selectors.d.ts.map +1 -1
  472. package/libs/feature/editor/src/lib/components/contact-card/contact-card.component.d.ts +8 -0
  473. package/libs/feature/editor/src/lib/components/contact-card/contact-card.component.d.ts.map +1 -0
  474. package/libs/feature/editor/src/lib/components/generic-keywords/generic-keywords.component.d.ts +33 -0
  475. package/libs/feature/editor/src/lib/components/generic-keywords/generic-keywords.component.d.ts.map +1 -0
  476. package/libs/feature/editor/src/lib/components/import-record/import-record.component.d.ts +34 -0
  477. package/libs/feature/editor/src/lib/components/import-record/import-record.component.d.ts.map +1 -0
  478. package/libs/feature/editor/src/lib/components/online-resource-card/online-resource-card.component.d.ts +15 -0
  479. package/libs/feature/editor/src/lib/components/online-resource-card/online-resource-card.component.d.ts.map +1 -0
  480. package/libs/feature/editor/src/lib/components/online-service-resource-input/online-service-resource-input.component.d.ts +16 -0
  481. package/libs/feature/editor/src/lib/components/online-service-resource-input/online-service-resource-input.component.d.ts.map +1 -0
  482. package/libs/feature/editor/src/lib/components/record-form/form-field/form-field-contacts/form-field-contacts.component.d.ts +38 -0
  483. package/libs/feature/editor/src/lib/components/record-form/form-field/form-field-contacts/form-field-contacts.component.d.ts.map +1 -0
  484. package/libs/feature/editor/src/lib/components/record-form/form-field/form-field-contacts-for-resource/form-field-contacts-for-resource.component.d.ts +41 -0
  485. package/libs/feature/editor/src/lib/components/record-form/form-field/form-field-contacts-for-resource/form-field-contacts-for-resource.component.d.ts.map +1 -0
  486. package/libs/feature/editor/src/lib/components/record-form/form-field/form-field-date-updated/form-field-date-updated.component.d.ts +9 -0
  487. package/libs/feature/editor/src/lib/components/record-form/form-field/form-field-date-updated/form-field-date-updated.component.d.ts.map +1 -0
  488. package/libs/feature/editor/src/lib/components/record-form/form-field/form-field-keywords/form-field-keywords.component.d.ts +17 -0
  489. package/libs/feature/editor/src/lib/components/record-form/form-field/form-field-keywords/form-field-keywords.component.d.ts.map +1 -0
  490. package/libs/feature/editor/src/lib/components/record-form/form-field/form-field-license/form-field-license.component.d.ts +6 -4
  491. package/libs/feature/editor/src/lib/components/record-form/form-field/form-field-license/form-field-license.component.d.ts.map +1 -1
  492. package/libs/feature/editor/src/lib/components/record-form/form-field/form-field-map-container/form-field-map-container.component.d.ts +15 -0
  493. package/libs/feature/editor/src/lib/components/record-form/form-field/form-field-map-container/form-field-map-container.component.d.ts.map +1 -0
  494. package/libs/feature/editor/src/lib/components/record-form/form-field/form-field-online-link-resources/form-field-online-link-resources.component.d.ts +35 -0
  495. package/libs/feature/editor/src/lib/components/record-form/form-field/form-field-online-link-resources/form-field-online-link-resources.component.d.ts.map +1 -0
  496. package/libs/feature/editor/src/lib/components/record-form/form-field/form-field-online-resources/form-field-online-resources.component.d.ts +44 -0
  497. package/libs/feature/editor/src/lib/components/record-form/form-field/form-field-online-resources/form-field-online-resources.component.d.ts.map +1 -0
  498. package/libs/feature/editor/src/lib/components/record-form/form-field/form-field-open-data/form-field-open-data.component.d.ts +15 -0
  499. package/libs/feature/editor/src/lib/components/record-form/form-field/form-field-open-data/form-field-open-data.component.d.ts.map +1 -0
  500. package/libs/feature/editor/src/lib/components/record-form/form-field/form-field-overviews/form-field-overviews.component.d.ts +31 -0
  501. package/libs/feature/editor/src/lib/components/record-form/form-field/form-field-overviews/form-field-overviews.component.d.ts.map +1 -0
  502. package/libs/feature/editor/src/lib/components/record-form/form-field/form-field-rich/form-field-rich.component.d.ts +4 -6
  503. package/libs/feature/editor/src/lib/components/record-form/form-field/form-field-rich/form-field-rich.component.d.ts.map +1 -1
  504. package/libs/feature/editor/src/lib/components/record-form/form-field/form-field-simple/form-field-simple.component.d.ts +4 -3
  505. package/libs/feature/editor/src/lib/components/record-form/form-field/form-field-simple/form-field-simple.component.d.ts.map +1 -1
  506. package/libs/feature/editor/src/lib/components/record-form/form-field/form-field-spatial-extent/form-field-spatial-extent.component.d.ts +28 -0
  507. package/libs/feature/editor/src/lib/components/record-form/form-field/form-field-spatial-extent/form-field-spatial-extent.component.d.ts.map +1 -1
  508. package/libs/feature/editor/src/lib/components/record-form/form-field/form-field-temporal-extents/form-field-temporal-extents.component.d.ts +25 -0
  509. package/libs/feature/editor/src/lib/components/record-form/form-field/form-field-temporal-extents/form-field-temporal-extents.component.d.ts.map +1 -0
  510. package/libs/feature/editor/src/lib/components/record-form/form-field/form-field-update-frequency/form-field-update-frequency.component.d.ts +9 -9
  511. package/libs/feature/editor/src/lib/components/record-form/form-field/form-field-update-frequency/form-field-update-frequency.component.d.ts.map +1 -1
  512. package/libs/feature/editor/src/lib/components/record-form/form-field/form-field.component.d.ts +19 -25
  513. package/libs/feature/editor/src/lib/components/record-form/form-field/form-field.component.d.ts.map +1 -1
  514. package/libs/feature/editor/src/lib/components/record-form/form-field/index.d.ts +4 -2
  515. package/libs/feature/editor/src/lib/components/record-form/form-field/index.d.ts.map +1 -1
  516. package/libs/feature/editor/src/lib/components/record-form/record-form.component.d.ts +7 -7
  517. package/libs/feature/editor/src/lib/components/record-form/record-form.component.d.ts.map +1 -1
  518. package/libs/feature/editor/src/lib/expressions.d.ts +1 -1
  519. package/libs/feature/editor/src/lib/expressions.d.ts.map +1 -1
  520. package/libs/feature/editor/src/lib/feature-editor.module.d.ts +2 -1
  521. package/libs/feature/editor/src/lib/feature-editor.module.d.ts.map +1 -1
  522. package/libs/feature/editor/src/lib/fields.config.d.ts +56 -2
  523. package/libs/feature/editor/src/lib/fields.config.d.ts.map +1 -1
  524. package/libs/feature/editor/src/lib/models/editor-config.model.d.ts +42 -0
  525. package/libs/feature/editor/src/lib/models/editor-config.model.d.ts.map +1 -0
  526. package/libs/feature/editor/src/lib/models/index.d.ts +1 -0
  527. package/libs/feature/editor/src/lib/models/index.d.ts.map +1 -1
  528. package/libs/feature/editor/src/lib/services/editor.service.d.ts +8 -10
  529. package/libs/feature/editor/src/lib/services/editor.service.d.ts.map +1 -1
  530. package/libs/feature/map/src/index.d.ts +1 -8
  531. package/libs/feature/map/src/index.d.ts.map +1 -1
  532. package/libs/feature/map/src/lib/+state/map.actions.d.ts +13 -39
  533. package/libs/feature/map/src/lib/+state/map.actions.d.ts.map +1 -1
  534. package/libs/feature/map/src/lib/+state/map.facade.d.ts +9 -10
  535. package/libs/feature/map/src/lib/+state/map.facade.d.ts.map +1 -1
  536. package/libs/feature/map/src/lib/+state/map.reducer.d.ts +4 -2
  537. package/libs/feature/map/src/lib/+state/map.reducer.d.ts.map +1 -1
  538. package/libs/feature/map/src/lib/+state/map.selectors.d.ts +6 -1
  539. package/libs/feature/map/src/lib/+state/map.selectors.d.ts.map +1 -1
  540. package/libs/feature/map/src/lib/add-layer-from-catalog/add-layer-from-catalog.component.d.ts +1 -1
  541. package/libs/feature/map/src/lib/add-layer-from-catalog/add-layer-from-catalog.component.d.ts.map +1 -1
  542. package/libs/feature/map/src/lib/add-layer-from-catalog/add-layer-record-preview/add-layer-record-preview.component.d.ts +8 -10
  543. package/libs/feature/map/src/lib/add-layer-from-catalog/add-layer-record-preview/add-layer-record-preview.component.d.ts.map +1 -1
  544. package/libs/feature/map/src/lib/add-layer-from-file/add-layer-from-file.component.d.ts +1 -1
  545. package/libs/feature/map/src/lib/add-layer-from-file/add-layer-from-file.component.d.ts.map +1 -1
  546. package/libs/feature/map/src/lib/add-layer-from-ogc-api/add-layer-from-ogc-api.component.d.ts +3 -3
  547. package/libs/feature/map/src/lib/add-layer-from-ogc-api/add-layer-from-ogc-api.component.d.ts.map +1 -1
  548. package/libs/feature/map/src/lib/add-layer-from-wfs/add-layer-from-wfs.component.d.ts +2 -2
  549. package/libs/feature/map/src/lib/add-layer-from-wfs/add-layer-from-wfs.component.d.ts.map +1 -1
  550. package/libs/feature/map/src/lib/add-layer-from-wms/add-layer-from-wms.component.d.ts +2 -2
  551. package/libs/feature/map/src/lib/add-layer-from-wms/add-layer-from-wms.component.d.ts.map +1 -1
  552. package/libs/feature/map/src/lib/constant/index.d.ts +0 -1
  553. package/libs/feature/map/src/lib/constant/index.d.ts.map +1 -1
  554. package/libs/feature/map/src/lib/feature-map.module.d.ts +11 -23
  555. package/libs/feature/map/src/lib/feature-map.module.d.ts.map +1 -1
  556. package/libs/feature/map/src/lib/geocoding/geocoding.component.d.ts +7 -7
  557. package/libs/feature/map/src/lib/geocoding/geocoding.component.d.ts.map +1 -1
  558. package/libs/feature/map/src/lib/layers-panel/layers-panel.component.d.ts +5 -4
  559. package/libs/feature/map/src/lib/layers-panel/layers-panel.component.d.ts.map +1 -1
  560. package/libs/feature/map/src/lib/map-state-container/map-state-container.component.d.ts +14 -0
  561. package/libs/feature/map/src/lib/map-state-container/map-state-container.component.d.ts.map +1 -0
  562. package/libs/feature/map/src/lib/style/map-style.fixtures.d.ts +2 -2
  563. package/libs/feature/map/src/lib/style/map-style.fixtures.d.ts.map +1 -1
  564. package/libs/feature/map/src/lib/utils/map-utils.service.d.ts +0 -30
  565. package/libs/feature/map/src/lib/utils/map-utils.service.d.ts.map +1 -1
  566. package/libs/feature/record/src/lib/data-view/data-view.component.d.ts +3 -3
  567. package/libs/feature/record/src/lib/data-view/data-view.component.d.ts.map +1 -1
  568. package/libs/feature/record/src/lib/data-view-permalink/data-view-permalink.component.d.ts +4 -1
  569. package/libs/feature/record/src/lib/data-view-permalink/data-view-permalink.component.d.ts.map +1 -1
  570. package/libs/feature/record/src/lib/data-view-share/data-view-share.component.d.ts +4 -1
  571. package/libs/feature/record/src/lib/data-view-share/data-view-share.component.d.ts.map +1 -1
  572. package/libs/feature/record/src/lib/data-view-web-component/data-view-web-component.component.d.ts +4 -1
  573. package/libs/feature/record/src/lib/data-view-web-component/data-view-web-component.component.d.ts.map +1 -1
  574. package/libs/feature/record/src/lib/external-viewer-button/external-viewer-button.component.d.ts +10 -7
  575. package/libs/feature/record/src/lib/external-viewer-button/external-viewer-button.component.d.ts.map +1 -1
  576. package/libs/feature/record/src/lib/feature-record.module.d.ts +13 -10
  577. package/libs/feature/record/src/lib/feature-record.module.d.ts.map +1 -1
  578. package/libs/feature/record/src/lib/map-view/map-view.component.d.ts +14 -20
  579. package/libs/feature/record/src/lib/map-view/map-view.component.d.ts.map +1 -1
  580. package/libs/feature/record/src/lib/state/mdview.effects.d.ts.map +1 -1
  581. package/libs/feature/record/src/lib/state/mdview.facade.d.ts +7 -7
  582. package/libs/feature/record/src/lib/state/mdview.facade.d.ts.map +1 -1
  583. package/libs/feature/router/src/lib/default/constants.d.ts +1 -0
  584. package/libs/feature/router/src/lib/default/constants.d.ts.map +1 -1
  585. package/libs/feature/router/src/lib/default/router.config.d.ts +1 -0
  586. package/libs/feature/router/src/lib/default/router.config.d.ts.map +1 -1
  587. package/libs/feature/router/src/lib/default/router.service.d.ts +1 -0
  588. package/libs/feature/router/src/lib/default/router.service.d.ts.map +1 -1
  589. package/libs/feature/router/src/lib/default/state/router.facade.d.ts +1 -0
  590. package/libs/feature/router/src/lib/default/state/router.facade.d.ts.map +1 -1
  591. package/libs/feature/search/src/index.d.ts +1 -1
  592. package/libs/feature/search/src/index.d.ts.map +1 -1
  593. package/libs/feature/search/src/lib/feature-search.module.d.ts +3 -3
  594. package/libs/feature/search/src/lib/feature-search.module.d.ts.map +1 -1
  595. package/libs/feature/search/src/lib/fuzzy-search/fuzzy-search.component.d.ts.map +1 -1
  596. package/libs/feature/search/src/lib/results-table/results-table-container.component.d.ts +37 -0
  597. package/libs/feature/search/src/lib/results-table/results-table-container.component.d.ts.map +1 -0
  598. package/libs/feature/search/src/lib/state/search.facade.d.ts +2 -0
  599. package/libs/feature/search/src/lib/state/search.facade.d.ts.map +1 -1
  600. package/libs/feature/search/src/lib/state/selectors.d.ts +1 -0
  601. package/libs/feature/search/src/lib/state/selectors.d.ts.map +1 -1
  602. package/libs/feature/search/src/lib/utils/service/fields.d.ts +5 -0
  603. package/libs/feature/search/src/lib/utils/service/fields.d.ts.map +1 -1
  604. package/libs/feature/search/src/lib/utils/service/fields.service.d.ts.map +1 -1
  605. package/libs/ui/catalog/src/lib/organisation-preview/organisation-preview.component.d.ts +2 -2
  606. package/libs/ui/catalog/src/lib/organisations-filter/organisations-filter.component.d.ts +1 -1
  607. package/libs/ui/catalog/src/lib/organisations-filter/organisations-filter.component.d.ts.map +1 -1
  608. package/libs/ui/catalog/src/lib/ui-catalog.module.d.ts +9 -9
  609. package/libs/ui/catalog/src/lib/ui-catalog.module.d.ts.map +1 -1
  610. package/libs/ui/dataviz/src/lib/figure/figure.component.d.ts +1 -2
  611. package/libs/ui/dataviz/src/lib/figure/figure.component.d.ts.map +1 -1
  612. package/libs/ui/dataviz/src/lib/table/table.fixtures.d.ts +2 -2
  613. package/libs/ui/dataviz/src/lib/table/table.fixtures.d.ts.map +1 -1
  614. package/libs/ui/dataviz/src/lib/ui-dataviz.module.d.ts +3 -3
  615. package/libs/ui/dataviz/src/lib/ui-dataviz.module.d.ts.map +1 -1
  616. package/libs/ui/elements/src/index.d.ts +4 -3
  617. package/libs/ui/elements/src/index.d.ts.map +1 -1
  618. package/libs/ui/elements/src/lib/confirmation-dialog/confirmation-dialog.component.d.ts +18 -0
  619. package/libs/ui/elements/src/lib/confirmation-dialog/confirmation-dialog.component.d.ts.map +1 -0
  620. package/libs/ui/elements/src/lib/download-item/download-item.component.d.ts +2 -2
  621. package/libs/ui/elements/src/lib/download-item/download-item.component.d.ts.map +1 -1
  622. package/libs/ui/elements/src/lib/downloads-list/downloads-list.component.d.ts +7 -7
  623. package/libs/ui/elements/src/lib/downloads-list/downloads-list.component.d.ts.map +1 -1
  624. package/libs/ui/elements/src/lib/error/error.component.d.ts +3 -1
  625. package/libs/ui/elements/src/lib/error/error.component.d.ts.map +1 -1
  626. package/libs/ui/elements/src/lib/link-card/link-card.component.d.ts +2 -2
  627. package/libs/ui/elements/src/lib/link-card/link-card.component.d.ts.map +1 -1
  628. package/libs/ui/elements/src/lib/markdown-editor/markdown-editor.component.d.ts +2 -2
  629. package/libs/ui/elements/src/lib/markdown-editor/markdown-editor.component.d.ts.map +1 -1
  630. package/libs/ui/elements/src/lib/metadata-quality/metadata-quality.component.d.ts +0 -3
  631. package/libs/ui/elements/src/lib/metadata-quality/metadata-quality.component.d.ts.map +1 -1
  632. package/libs/ui/elements/src/lib/metadata-quality-item/metadata-quality-item.component.d.ts +1 -1
  633. package/libs/ui/elements/src/lib/metadata-quality-item/metadata-quality-item.component.d.ts.map +1 -1
  634. package/libs/ui/elements/src/lib/notification/notification.component.d.ts +1 -0
  635. package/libs/ui/elements/src/lib/notification/notification.component.d.ts.map +1 -1
  636. package/libs/ui/elements/src/lib/record-api-form/record-api-form.component.d.ts +1 -1
  637. package/libs/ui/elements/src/lib/related-record-card/related-record-card.component.d.ts +5 -1
  638. package/libs/ui/elements/src/lib/related-record-card/related-record-card.component.d.ts.map +1 -1
  639. package/libs/ui/elements/src/lib/ui-elements.module.d.ts +21 -18
  640. package/libs/ui/elements/src/lib/ui-elements.module.d.ts.map +1 -1
  641. package/libs/ui/inputs/src/index.d.ts +6 -0
  642. package/libs/ui/inputs/src/index.d.ts.map +1 -1
  643. package/libs/ui/inputs/src/lib/autocomplete/autocomplete.component.d.ts +15 -4
  644. package/libs/ui/inputs/src/lib/autocomplete/autocomplete.component.d.ts.map +1 -1
  645. package/libs/ui/inputs/src/lib/badge/badge.component.d.ts +11 -0
  646. package/libs/ui/inputs/src/lib/badge/badge.component.d.ts.map +1 -0
  647. package/libs/ui/inputs/src/lib/button/button.component.d.ts +1 -1
  648. package/libs/ui/inputs/src/lib/button/button.component.d.ts.map +1 -1
  649. package/libs/ui/inputs/src/lib/date-picker/date-picker.component.d.ts.map +1 -1
  650. package/libs/ui/inputs/src/lib/date-range-picker/date-range-picker.component.d.ts +4 -4
  651. package/libs/ui/inputs/src/lib/date-range-picker/date-range-picker.component.d.ts.map +1 -1
  652. package/libs/ui/inputs/src/lib/dropdown-selector/dropdown-selector.component.d.ts.map +1 -1
  653. package/libs/ui/inputs/src/lib/editable-label/editable-label.directive.d.ts +5 -3
  654. package/libs/ui/inputs/src/lib/editable-label/editable-label.directive.d.ts.map +1 -1
  655. package/libs/ui/inputs/src/lib/file-input/file-input.component.d.ts +24 -0
  656. package/libs/ui/inputs/src/lib/file-input/file-input.component.d.ts.map +1 -0
  657. package/libs/ui/inputs/src/lib/image-input/image-input.component.d.ts +4 -5
  658. package/libs/ui/inputs/src/lib/image-input/image-input.component.d.ts.map +1 -1
  659. package/libs/ui/inputs/src/lib/previous-next-buttons/previous-next-buttons.component.d.ts.map +1 -1
  660. package/libs/ui/inputs/src/lib/search-input/search-input.component.d.ts +1 -1
  661. package/libs/ui/inputs/src/lib/search-input/search-input.component.d.ts.map +1 -1
  662. package/libs/ui/inputs/src/lib/switch-toggle/switch-toggle.component.d.ts +17 -0
  663. package/libs/ui/inputs/src/lib/switch-toggle/switch-toggle.component.d.ts.map +1 -0
  664. package/libs/ui/inputs/src/lib/text-area/text-area.component.d.ts +0 -4
  665. package/libs/ui/inputs/src/lib/text-area/text-area.component.d.ts.map +1 -1
  666. package/libs/ui/inputs/src/lib/text-input/text-input.component.d.ts +2 -4
  667. package/libs/ui/inputs/src/lib/text-input/text-input.component.d.ts.map +1 -1
  668. package/libs/ui/inputs/src/lib/ui-inputs.module.d.ts +33 -35
  669. package/libs/ui/inputs/src/lib/ui-inputs.module.d.ts.map +1 -1
  670. package/libs/ui/inputs/src/lib/url-input/url-input.component.d.ts +21 -0
  671. package/libs/ui/inputs/src/lib/url-input/url-input.component.d.ts.map +1 -0
  672. package/libs/ui/layout/src/index.d.ts +3 -0
  673. package/libs/ui/layout/src/index.d.ts.map +1 -1
  674. package/libs/ui/layout/src/lib/form-field-wrapper/form-field-wrapper.component.d.ts +2 -2
  675. package/libs/ui/layout/src/lib/form-field-wrapper/form-field-wrapper.component.d.ts.map +1 -1
  676. package/libs/ui/layout/src/lib/interactive-table/interactive-table-column/interactive-table-column.component.d.ts +1 -1
  677. package/libs/ui/layout/src/lib/interactive-table/interactive-table.component.d.ts.map +1 -1
  678. package/libs/ui/{elements → layout}/src/lib/max-lines/max-lines.component.d.ts +2 -2
  679. package/libs/ui/layout/src/lib/max-lines/max-lines.component.d.ts.map +1 -0
  680. package/libs/ui/layout/src/lib/modal-dialog/modal-dialog.component.d.ts +20 -0
  681. package/libs/ui/layout/src/lib/modal-dialog/modal-dialog.component.d.ts.map +1 -0
  682. package/libs/ui/layout/src/lib/sortable-list/sortable-list.component.d.ts +14 -0
  683. package/libs/ui/layout/src/lib/sortable-list/sortable-list.component.d.ts.map +1 -0
  684. package/libs/ui/layout/src/lib/ui-layout.module.d.ts +3 -3
  685. package/libs/ui/layout/src/lib/ui-layout.module.d.ts.map +1 -1
  686. package/libs/ui/map/src/index.d.ts +3 -2
  687. package/libs/ui/map/src/index.d.ts.map +1 -1
  688. package/libs/ui/map/src/lib/components/feature-detail/feature-detail.component.d.ts +3 -4
  689. package/libs/ui/map/src/lib/components/feature-detail/feature-detail.component.d.ts.map +1 -1
  690. package/libs/ui/map/src/lib/components/map-container/map-container.component.d.ts +37 -0
  691. package/libs/ui/map/src/lib/components/map-container/map-container.component.d.ts.map +1 -0
  692. package/libs/ui/map/src/lib/components/map-container/map-settings.token.d.ts +18 -0
  693. package/libs/ui/map/src/lib/components/map-container/map-settings.token.d.ts.map +1 -0
  694. package/libs/ui/map/src/lib/map-utils.d.ts +7 -0
  695. package/libs/ui/map/src/lib/map-utils.d.ts.map +1 -0
  696. package/libs/ui/search/src/index.d.ts +1 -0
  697. package/libs/ui/search/src/index.d.ts.map +1 -1
  698. package/libs/ui/search/src/lib/facets/fixtures/aggregations-model-response.d.ts +3 -3
  699. package/libs/ui/search/src/lib/facets/fixtures/aggregations-model-response.d.ts.map +1 -1
  700. package/libs/ui/search/src/lib/results-table/action-menu/action-menu.component.d.ts +24 -0
  701. package/libs/ui/search/src/lib/results-table/action-menu/action-menu.component.d.ts.map +1 -0
  702. package/libs/ui/search/src/lib/results-table/results-table.component.d.ts +46 -0
  703. package/libs/ui/search/src/lib/results-table/results-table.component.d.ts.map +1 -0
  704. package/libs/ui/search/src/lib/ui-search.module.d.ts +5 -5
  705. package/libs/ui/search/src/lib/ui-search.module.d.ts.map +1 -1
  706. package/libs/ui/widgets/src/index.d.ts +1 -1
  707. package/libs/ui/widgets/src/index.d.ts.map +1 -1
  708. package/libs/ui/widgets/src/lib/popover/popover.component.d.ts +19 -0
  709. package/libs/ui/widgets/src/lib/popover/popover.component.d.ts.map +1 -0
  710. package/libs/ui/widgets/src/lib/popup-alert/popup-alert.component.d.ts +1 -1
  711. package/libs/ui/widgets/src/lib/popup-alert/popup-alert.component.d.ts.map +1 -1
  712. package/libs/ui/widgets/src/lib/ui-widgets.module.d.ts +9 -12
  713. package/libs/ui/widgets/src/lib/ui-widgets.module.d.ts.map +1 -1
  714. package/libs/util/app-config/src/index.d.ts +1 -0
  715. package/libs/util/app-config/src/index.d.ts.map +1 -1
  716. package/libs/util/app-config/src/lib/fixtures.d.ts +8 -8
  717. package/libs/util/app-config/src/lib/fixtures.d.ts.map +1 -1
  718. package/libs/util/app-config/src/lib/map-layers.d.ts +4 -0
  719. package/libs/util/app-config/src/lib/map-layers.d.ts.map +1 -0
  720. package/libs/util/i18n/src/index.d.ts +1 -0
  721. package/libs/util/i18n/src/index.d.ts.map +1 -1
  722. package/libs/util/i18n/src/lib/i18n.constants.d.ts +0 -35
  723. package/libs/util/i18n/src/lib/i18n.constants.d.ts.map +1 -1
  724. package/libs/util/i18n/src/lib/language-codes.d.ts +38 -0
  725. package/libs/util/i18n/src/lib/language-codes.d.ts.map +1 -0
  726. package/libs/util/shared/src/lib/links/link-classifier.service.d.ts +3 -3
  727. package/libs/util/shared/src/lib/links/link-classifier.service.d.ts.map +1 -1
  728. package/libs/util/shared/src/lib/links/link-utils.d.ts +6 -6
  729. package/libs/util/shared/src/lib/links/link-utils.d.ts.map +1 -1
  730. package/libs/util/shared/src/lib/services/theme.service.d.ts.map +1 -1
  731. package/libs/util/shared/src/lib/utils/bytes-convert.d.ts +2 -1
  732. package/libs/util/shared/src/lib/utils/bytes-convert.d.ts.map +1 -1
  733. package/libs/util/shared/src/lib/utils/index.d.ts +1 -0
  734. package/libs/util/shared/src/lib/utils/index.d.ts.map +1 -1
  735. package/libs/util/shared/src/lib/utils/no-duplicate-file-name.d.ts +2 -0
  736. package/libs/util/shared/src/lib/utils/no-duplicate-file-name.d.ts.map +1 -0
  737. package/package.json +5 -3
  738. package/src/libs/api/metadata-converter/src/index.ts +3 -0
  739. package/src/libs/api/metadata-converter/src/lib/common/license.ts +66 -0
  740. package/src/libs/api/metadata-converter/src/lib/common/url.ts +15 -0
  741. package/src/libs/api/metadata-converter/src/lib/dcat-ap/dcat-ap.converter.ts +500 -0
  742. package/src/libs/api/metadata-converter/src/lib/dcat-ap/index.ts +1 -0
  743. package/src/libs/api/metadata-converter/src/lib/dcat-ap/namespaces.ts +17 -0
  744. package/src/libs/api/metadata-converter/src/lib/dcat-ap/read-parts.ts +463 -0
  745. package/src/libs/api/metadata-converter/src/lib/dcat-ap/utils/graph-utils.ts +110 -0
  746. package/src/libs/api/metadata-converter/src/lib/dcat-ap/utils/individual-name.ts +20 -0
  747. package/src/libs/api/metadata-converter/src/lib/dcat-ap/utils/keyword.mapper.ts +16 -0
  748. package/src/libs/api/metadata-converter/src/lib/dcat-ap/utils/role.mapper.ts +48 -0
  749. package/src/libs/api/metadata-converter/src/lib/dcat-ap/utils/serialize-to-xml.ts +127 -0
  750. package/src/libs/api/metadata-converter/src/lib/dcat-ap/utils/status.mapper.ts +19 -0
  751. package/src/libs/api/metadata-converter/src/lib/dcat-ap/utils/update-frequency.mapper.ts +67 -0
  752. package/src/libs/api/metadata-converter/src/lib/dcat-ap/utils/uri.ts +1 -0
  753. package/src/libs/api/metadata-converter/src/lib/dcat-ap/write-parts.ts +101 -0
  754. package/src/libs/api/metadata-converter/src/lib/find-converter.ts +13 -0
  755. package/src/libs/api/metadata-converter/src/lib/fixtures/eu.dcat-ap.records.ts +743 -0
  756. package/src/libs/api/metadata-converter/src/lib/fixtures/generic.records.ts +41 -5
  757. package/src/libs/api/metadata-converter/src/lib/fixtures/geo2france.records.ts +24 -5
  758. package/src/libs/api/metadata-converter/src/lib/fixtures/geocat-ch.records.ts +364 -17
  759. package/src/libs/api/metadata-converter/src/lib/fixtures/metawal.records.ts +82 -4
  760. package/src/libs/api/metadata-converter/src/lib/fixtures/opendataswiss.records.ts +437 -0
  761. package/src/libs/api/metadata-converter/src/lib/fixtures/sextant.records.ts +487 -0
  762. package/src/libs/api/metadata-converter/src/lib/fixtures/vlaanderen.dcat-ap.records.ts +76 -0
  763. package/src/libs/api/metadata-converter/src/lib/function-utils.ts +1 -1
  764. package/src/libs/api/metadata-converter/src/lib/gn4/atomic-operations.ts +1 -0
  765. package/src/libs/api/metadata-converter/src/lib/gn4/gn4.converter.ts +2 -1
  766. package/src/libs/api/metadata-converter/src/lib/gn4/gn4.field.mapper.ts +31 -18
  767. package/src/libs/api/metadata-converter/src/lib/gn4/types/index.ts +1 -0
  768. package/src/libs/api/metadata-converter/src/lib/gn4/types/keywords.model.ts +27 -0
  769. package/src/libs/api/metadata-converter/src/lib/gn4/types/metadata.model.ts +1 -0
  770. package/src/libs/api/metadata-converter/src/lib/iso19115-3/iso19115-3.converter.ts +16 -9
  771. package/src/libs/api/metadata-converter/src/lib/iso19115-3/read-parts.ts +57 -14
  772. package/src/libs/api/metadata-converter/src/lib/iso19115-3/write-parts.ts +112 -65
  773. package/src/libs/api/metadata-converter/src/lib/iso19139/iso19139.converter.ts +118 -53
  774. package/src/libs/api/metadata-converter/src/lib/iso19139/read-parts.ts +283 -54
  775. package/src/libs/api/metadata-converter/src/lib/iso19139/utils/geometry.ts +39 -0
  776. package/src/libs/api/metadata-converter/src/lib/iso19139/utils/keyword.mapper.ts +1 -1
  777. package/src/libs/api/metadata-converter/src/lib/iso19139/write-parts.ts +486 -289
  778. package/src/libs/api/metadata-converter/src/lib/xml-utils.ts +132 -28
  779. package/src/libs/api/repository/src/lib/gn4/gn4-repository.ts +291 -16
  780. package/src/libs/api/repository/src/lib/gn4/organizations/organizations-from-groups.service.ts +1 -0
  781. package/src/libs/api/repository/src/lib/gn4/organizations/organizations-from-metadata.service.ts +3 -1
  782. package/src/libs/api/repository/src/lib/gn4/platform/gn4-platform.mapper.ts +37 -5
  783. package/src/libs/api/repository/src/lib/gn4/platform/gn4-platform.service.ts +248 -31
  784. package/src/libs/common/domain/src/lib/model/error/index.ts +1 -0
  785. package/src/libs/common/domain/src/lib/model/error/publication-version.error.ts +9 -0
  786. package/src/libs/common/domain/src/lib/model/record/contact.model.ts +29 -1
  787. package/src/libs/common/domain/src/lib/model/record/index.ts +1 -0
  788. package/src/libs/common/domain/src/lib/model/record/metadata.model.ts +37 -20
  789. package/src/libs/common/domain/src/lib/model/record/organization.model.ts +5 -0
  790. package/src/libs/common/domain/src/lib/model/record/translation.model.ts +49 -0
  791. package/src/libs/common/domain/src/lib/model/thesaurus/thesaurus.model.ts +13 -6
  792. package/src/libs/common/domain/src/lib/model/user/user.model.ts +1 -1
  793. package/src/libs/common/domain/src/lib/platform.service.interface.ts +38 -3
  794. package/src/libs/common/domain/src/lib/repository/records-repository.interface.ts +72 -3
  795. package/src/libs/common/fixtures/src/index.ts +6 -1
  796. package/src/libs/common/fixtures/src/lib/editor/editor.fixtures.ts +156 -0
  797. package/src/libs/common/fixtures/src/lib/editor/index.ts +1 -0
  798. package/src/libs/common/fixtures/src/lib/elasticsearch/{aggregations-request.ts → aggregations-request.fixtures.ts} +1 -3
  799. package/src/libs/common/fixtures/src/lib/elasticsearch/{aggregations-response.ts → aggregations-response.fixtures.ts} +6 -8
  800. package/src/libs/common/fixtures/src/lib/elasticsearch/{full-response.ts → full-response.fixtures.ts} +1673 -3
  801. package/src/libs/common/fixtures/src/lib/elasticsearch/index.ts +5 -5
  802. package/src/libs/common/fixtures/src/lib/elasticsearch/metadata-links.fixtures.ts +1 -3
  803. package/src/libs/common/fixtures/src/lib/elasticsearch/metadata.fixtures.ts +1739 -1742
  804. package/src/libs/common/fixtures/src/lib/elasticsearch/{search-requests.ts → search-requests.fixtures.ts} +1 -3
  805. package/src/libs/common/fixtures/src/lib/elasticsearch/{search-responses.ts → search-responses.fixtures.ts} +4 -6
  806. package/src/libs/common/fixtures/src/lib/geojson.fixtures.ts +57178 -57195
  807. package/src/libs/common/fixtures/src/lib/gn4/groups.fixtures.ts +2 -4
  808. package/src/libs/common/fixtures/src/lib/individual.fixtures.ts +61 -0
  809. package/src/libs/common/fixtures/src/lib/link.fixtures.ts +233 -164
  810. package/src/libs/common/fixtures/src/lib/map/index.ts +1 -0
  811. package/src/libs/common/fixtures/src/lib/map/map-context.fixtures.ts +53 -0
  812. package/src/libs/common/fixtures/src/lib/ol-feature.fixtures.ts +10 -0
  813. package/src/libs/common/fixtures/src/lib/organisations.fixture.ts +65 -3
  814. package/src/libs/common/fixtures/src/lib/record-link.fixtures.ts +9 -7
  815. package/src/libs/common/fixtures/src/lib/records.fixtures.ts +220 -16
  816. package/src/libs/common/fixtures/src/lib/repository.fixtures.ts +4 -4
  817. package/src/libs/common/fixtures/src/lib/search/aggregations.ts +2 -3
  818. package/src/libs/common/fixtures/src/lib/user-feedbacks.fixtures.ts +14 -15
  819. package/src/libs/common/fixtures/src/lib/user.fixtures.ts +45 -15
  820. package/src/libs/data-access/datafeeder/src/openapi/model/datasetMetadata.api.model.ts +4 -0
  821. package/src/libs/data-access/datafeeder/src/openapi/model/datasetUploadStatus.api.model.ts +2 -0
  822. package/src/libs/data-access/gn4/src/fixtures/site.fixtures.ts +4 -4
  823. package/src/libs/data-access/gn4/src/fixtures/ui.fixtures.ts +2 -2
  824. package/src/libs/data-access/gn4/src/openapi/api/records.api.service.ts +10 -14
  825. package/src/libs/data-access/gn4/src/openapi/model/user.api.model.ts +1 -1
  826. package/src/libs/data-access/gn4/src/spec.yaml +4 -13
  827. package/src/libs/feature/catalog/src/index.ts +1 -0
  828. package/src/libs/feature/catalog/src/lib/feature-catalog.module.ts +5 -2
  829. package/src/libs/feature/catalog/src/lib/organisations/organisations.component.html +1 -1
  830. package/src/libs/feature/catalog/src/lib/organisations/organisations.component.ts +2 -2
  831. package/src/libs/feature/catalog/src/lib/organization-url.token.ts +6 -0
  832. package/src/libs/feature/catalog/src/lib/records/records.service.ts +6 -8
  833. package/src/libs/feature/catalog/src/lib/sources/sources.fixture.ts +1 -1
  834. package/src/libs/feature/dataviz/src/lib/chart-view/chart-view.component.html +1 -1
  835. package/src/libs/feature/dataviz/src/lib/chart-view/chart-view.component.ts +3 -3
  836. package/src/libs/feature/dataviz/src/lib/feature-dataviz.module.ts +8 -3
  837. package/src/libs/feature/dataviz/src/lib/figure/figure.fixtures.ts +2 -2
  838. package/src/libs/feature/dataviz/src/lib/geo-table-view/geo-table-view.component.html +5 -2
  839. package/src/libs/feature/dataviz/src/lib/geo-table-view/geo-table-view.component.ts +38 -78
  840. package/src/libs/feature/dataviz/src/lib/service/data.service.ts +6 -6
  841. package/src/libs/feature/dataviz/src/lib/table-view/table-view.component.html +1 -1
  842. package/src/libs/feature/dataviz/src/lib/table-view/table-view.component.ts +4 -4
  843. package/src/libs/feature/editor/src/index.ts +1 -0
  844. package/src/libs/feature/editor/src/lib/+state/editor.actions.ts +14 -1
  845. package/src/libs/feature/editor/src/lib/+state/editor.effects.ts +97 -17
  846. package/src/libs/feature/editor/src/lib/+state/editor.facade.ts +28 -4
  847. package/src/libs/feature/editor/src/lib/+state/editor.models.ts +12 -1
  848. package/src/libs/feature/editor/src/lib/+state/editor.reducer.ts +32 -9
  849. package/src/libs/feature/editor/src/lib/+state/editor.selectors.ts +32 -8
  850. package/src/libs/feature/editor/src/lib/components/contact-card/contact-card.component.html +15 -0
  851. package/src/libs/feature/editor/src/lib/components/contact-card/contact-card.component.ts +17 -0
  852. package/src/libs/feature/editor/src/lib/components/generic-keywords/generic-keywords.component.css +3 -0
  853. package/src/libs/feature/editor/src/lib/components/generic-keywords/generic-keywords.component.html +26 -0
  854. package/src/libs/feature/editor/src/lib/components/generic-keywords/generic-keywords.component.ts +100 -0
  855. package/src/libs/feature/editor/src/lib/components/import-record/import-record.component.html +46 -0
  856. package/src/libs/feature/editor/src/lib/components/import-record/import-record.component.ts +152 -0
  857. package/src/libs/feature/editor/src/lib/components/online-resource-card/online-resource-card.component.html +35 -0
  858. package/src/libs/feature/editor/src/lib/components/online-resource-card/online-resource-card.component.ts +92 -0
  859. package/src/libs/feature/editor/src/lib/components/online-service-resource-input/online-service-resource-input.component.html +31 -0
  860. package/src/libs/feature/editor/src/lib/components/online-service-resource-input/online-service-resource-input.component.ts +80 -0
  861. package/src/libs/feature/editor/src/lib/components/record-form/form-field/form-field-contacts/form-field-contacts.component.html +40 -0
  862. package/src/libs/feature/editor/src/lib/components/record-form/form-field/form-field-contacts/form-field-contacts.component.ts +170 -0
  863. package/src/libs/feature/editor/src/lib/components/record-form/form-field/form-field-contacts-for-resource/form-field-contacts-for-resource.component.css +4 -0
  864. package/src/libs/feature/editor/src/lib/components/record-form/form-field/form-field-contacts-for-resource/form-field-contacts-for-resource.component.html +66 -0
  865. package/src/libs/feature/editor/src/lib/components/record-form/form-field/form-field-contacts-for-resource/form-field-contacts-for-resource.component.ts +221 -0
  866. package/src/libs/feature/editor/src/lib/components/record-form/form-field/form-field-date-updated/form-field-date-updated.component.html +4 -0
  867. package/src/libs/feature/editor/src/lib/components/record-form/form-field/form-field-date-updated/form-field-date-updated.component.ts +21 -0
  868. package/src/libs/feature/editor/src/lib/components/record-form/form-field/form-field-keywords/form-field-keywords.component.html +10 -0
  869. package/src/libs/feature/editor/src/lib/components/record-form/form-field/form-field-keywords/form-field-keywords.component.ts +78 -0
  870. package/src/libs/feature/editor/src/lib/components/record-form/form-field/form-field-license/form-field-license.component.css +8 -0
  871. package/src/libs/feature/editor/src/lib/components/record-form/form-field/form-field-license/form-field-license.component.ts +13 -5
  872. package/src/libs/feature/editor/src/lib/components/record-form/form-field/form-field-map-container/form-field-map-container.component.html +1 -0
  873. package/src/libs/feature/editor/src/lib/components/record-form/form-field/form-field-map-container/form-field-map-container.component.ts +86 -0
  874. package/src/libs/feature/editor/src/lib/components/record-form/form-field/form-field-online-link-resources/form-field-online-link-resources.component.html +43 -0
  875. package/src/libs/feature/editor/src/lib/components/record-form/form-field/form-field-online-link-resources/form-field-online-link-resources.component.ts +186 -0
  876. package/src/libs/feature/editor/src/lib/components/record-form/form-field/form-field-online-resources/form-field-online-resources.component.css +0 -0
  877. package/src/libs/feature/editor/src/lib/components/record-form/form-field/form-field-online-resources/form-field-online-resources.component.html +71 -0
  878. package/src/libs/feature/editor/src/lib/components/record-form/form-field/form-field-online-resources/form-field-online-resources.component.ts +241 -0
  879. package/src/libs/feature/editor/src/lib/components/record-form/form-field/form-field-open-data/form-field-open-data.component.css +0 -0
  880. package/src/libs/feature/editor/src/lib/components/record-form/form-field/form-field-open-data/form-field-open-data.component.html +6 -0
  881. package/src/libs/feature/editor/src/lib/components/record-form/form-field/form-field-open-data/form-field-open-data.component.ts +48 -0
  882. package/src/libs/feature/editor/src/lib/components/record-form/form-field/form-field-overviews/form-field-overviews.component.css +0 -0
  883. package/src/libs/feature/editor/src/lib/components/record-form/form-field/form-field-overviews/form-field-overviews.component.html +11 -0
  884. package/src/libs/feature/editor/src/lib/components/record-form/form-field/form-field-overviews/form-field-overviews.component.ts +123 -0
  885. package/src/libs/feature/editor/src/lib/components/record-form/form-field/form-field-rich/form-field-rich.component.html +15 -8
  886. package/src/libs/feature/editor/src/lib/components/record-form/form-field/form-field-rich/form-field-rich.component.ts +11 -14
  887. package/src/libs/feature/editor/src/lib/components/record-form/form-field/form-field-simple/form-field-simple.component.html +5 -3
  888. package/src/libs/feature/editor/src/lib/components/record-form/form-field/form-field-simple/form-field-simple.component.ts +11 -4
  889. package/src/libs/feature/editor/src/lib/components/record-form/form-field/form-field-spatial-extent/form-field-spatial-extent.component.html +20 -1
  890. package/src/libs/feature/editor/src/lib/components/record-form/form-field/form-field-spatial-extent/form-field-spatial-extent.component.ts +212 -1
  891. package/src/libs/feature/editor/src/lib/components/record-form/form-field/form-field-temporal-extents/form-field-temporal-extents.component.css +4 -0
  892. package/src/libs/feature/editor/src/lib/components/record-form/form-field/form-field-temporal-extents/form-field-temporal-extents.component.html +34 -0
  893. package/src/libs/feature/editor/src/lib/components/record-form/form-field/form-field-temporal-extents/form-field-temporal-extents.component.ts +98 -0
  894. package/src/libs/feature/editor/src/lib/components/record-form/form-field/form-field-update-frequency/form-field-update-frequency.component.css +4 -0
  895. package/src/libs/feature/editor/src/lib/components/record-form/form-field/form-field-update-frequency/form-field-update-frequency.component.html +16 -14
  896. package/src/libs/feature/editor/src/lib/components/record-form/form-field/form-field-update-frequency/form-field-update-frequency.component.ts +101 -90
  897. package/src/libs/feature/editor/src/lib/components/record-form/form-field/form-field.component.html +127 -83
  898. package/src/libs/feature/editor/src/lib/components/record-form/form-field/form-field.component.ts +61 -77
  899. package/src/libs/feature/editor/src/lib/components/record-form/form-field/index.ts +4 -2
  900. package/src/libs/feature/editor/src/lib/components/record-form/record-form.component.html +52 -9
  901. package/src/libs/feature/editor/src/lib/components/record-form/record-form.component.ts +20 -7
  902. package/src/libs/feature/editor/src/lib/components/wizard/wizard.component.html +2 -6
  903. package/src/libs/feature/editor/src/lib/components/wizard-field/wizard-field.component.html +1 -1
  904. package/src/libs/feature/editor/src/lib/expressions.ts +1 -1
  905. package/src/libs/feature/editor/src/lib/feature-editor.module.ts +4 -2
  906. package/src/libs/feature/editor/src/lib/fields.config.ts +258 -45
  907. package/src/libs/feature/editor/src/lib/models/editor-config.model.ts +65 -0
  908. package/src/libs/feature/editor/src/lib/models/index.ts +1 -0
  909. package/src/libs/feature/editor/src/lib/services/editor.service.ts +48 -54
  910. package/src/libs/feature/map/src/index.ts +1 -8
  911. package/src/libs/feature/map/src/lib/+state/map.actions.ts +10 -25
  912. package/src/libs/feature/map/src/lib/+state/map.facade.ts +11 -15
  913. package/src/libs/feature/map/src/lib/+state/map.reducer.ts +16 -53
  914. package/src/libs/feature/map/src/lib/+state/map.selectors.ts +7 -2
  915. package/src/libs/feature/map/src/lib/add-layer-from-catalog/add-layer-from-catalog.component.ts +3 -0
  916. package/src/libs/feature/map/src/lib/add-layer-from-catalog/add-layer-record-preview/add-layer-record-preview.component.ts +23 -22
  917. package/src/libs/feature/map/src/lib/add-layer-from-file/add-layer-from-file.component.ts +22 -11
  918. package/src/libs/feature/map/src/lib/add-layer-from-ogc-api/add-layer-from-ogc-api.component.html +1 -1
  919. package/src/libs/feature/map/src/lib/add-layer-from-ogc-api/add-layer-from-ogc-api.component.ts +21 -19
  920. package/src/libs/feature/map/src/lib/add-layer-from-wfs/add-layer-from-wfs.component.html +1 -1
  921. package/src/libs/feature/map/src/lib/add-layer-from-wfs/add-layer-from-wfs.component.ts +17 -10
  922. package/src/libs/feature/map/src/lib/add-layer-from-wms/add-layer-from-wms.component.html +1 -1
  923. package/src/libs/feature/map/src/lib/add-layer-from-wms/add-layer-from-wms.component.ts +17 -10
  924. package/src/libs/feature/map/src/lib/constant/index.ts +0 -1
  925. package/src/libs/feature/map/src/lib/feature-map.module.ts +2 -43
  926. package/src/libs/feature/map/src/lib/geocoding/geocoding.component.ts +38 -20
  927. package/src/libs/feature/map/src/lib/layers-panel/layers-panel.component.html +5 -7
  928. package/src/libs/feature/map/src/lib/layers-panel/layers-panel.component.ts +58 -6
  929. package/src/libs/feature/map/src/lib/map-state-container/map-state-container.component.css +0 -0
  930. package/src/libs/feature/map/src/lib/map-state-container/map-state-container.component.html +4 -0
  931. package/src/libs/feature/map/src/lib/map-state-container/map-state-container.component.ts +29 -0
  932. package/src/libs/feature/map/src/lib/style/map-style.fixtures.ts +29 -27
  933. package/src/libs/feature/map/src/lib/utils/map-utils.service.ts +8 -232
  934. package/src/libs/feature/record/src/lib/data-view/data-view.component.ts +3 -3
  935. package/src/libs/feature/record/src/lib/data-view-permalink/data-view-permalink.component.ts +36 -19
  936. package/src/libs/feature/record/src/lib/data-view-share/data-view-share.component.html +6 -2
  937. package/src/libs/feature/record/src/lib/data-view-share/data-view-share.component.ts +11 -0
  938. package/src/libs/feature/record/src/lib/data-view-web-component/data-view-web-component.component.ts +59 -12
  939. package/src/libs/feature/record/src/lib/external-viewer-button/external-viewer-button.component.html +1 -1
  940. package/src/libs/feature/record/src/lib/external-viewer-button/external-viewer-button.component.ts +29 -20
  941. package/src/libs/feature/record/src/lib/feature-record.module.ts +27 -8
  942. package/src/libs/feature/record/src/lib/map-view/map-view.component.html +6 -10
  943. package/src/libs/feature/record/src/lib/map-view/map-view.component.ts +45 -72
  944. package/src/libs/feature/record/src/lib/state/mdview.effects.ts +1 -3
  945. package/src/libs/feature/record/src/lib/state/mdview.facade.ts +5 -1
  946. package/src/libs/feature/router/src/lib/default/constants.ts +1 -0
  947. package/src/libs/feature/router/src/lib/default/router.config.ts +1 -0
  948. package/src/libs/feature/router/src/lib/default/router.service.ts +13 -1
  949. package/src/libs/feature/router/src/lib/default/state/router.facade.ts +8 -0
  950. package/src/libs/feature/search/src/index.ts +1 -1
  951. package/src/libs/feature/search/src/lib/feature-search.module.ts +2 -3
  952. package/src/libs/feature/search/src/lib/fuzzy-search/fuzzy-search.component.html +2 -1
  953. package/src/libs/feature/search/src/lib/fuzzy-search/fuzzy-search.component.ts +2 -2
  954. package/src/libs/feature/search/src/lib/results-table/results-table-container.component.css +0 -0
  955. package/src/libs/feature/search/src/lib/results-table/results-table-container.component.html +15 -0
  956. package/src/libs/feature/search/src/lib/results-table/results-table-container.component.ts +114 -0
  957. package/src/libs/feature/search/src/lib/state/fixtures/search-state.fixtures.ts +2 -2
  958. package/src/libs/feature/search/src/lib/state/search.facade.ts +11 -0
  959. package/src/libs/feature/search/src/lib/state/selectors.ts +7 -0
  960. package/src/libs/feature/search/src/lib/utils/service/fields.service.ts +19 -2
  961. package/src/libs/feature/search/src/lib/utils/service/fields.ts +26 -0
  962. package/src/libs/ui/catalog/src/lib/organisation-preview/organisation-preview.component.html +10 -9
  963. package/src/libs/ui/catalog/src/lib/organisation-preview/organisation-preview.component.ts +2 -2
  964. package/src/libs/ui/catalog/src/lib/organisations-filter/organisations-filter.component.ts +8 -1
  965. package/src/libs/ui/catalog/src/lib/ui-catalog.module.ts +13 -6
  966. package/src/libs/ui/dataviz/src/lib/chart/chart.fixtures.ts +2 -2
  967. package/src/libs/ui/dataviz/src/lib/figure/figure.component.html +15 -7
  968. package/src/libs/ui/dataviz/src/lib/figure/figure.component.ts +3 -7
  969. package/src/libs/ui/dataviz/src/lib/table/table.fixtures.ts +2 -2
  970. package/src/libs/ui/dataviz/src/lib/ui-dataviz.module.ts +17 -2
  971. package/src/libs/ui/elements/src/index.ts +4 -3
  972. package/src/libs/ui/elements/src/lib/api-card/api-card.component.html +29 -29
  973. package/src/libs/ui/elements/src/lib/confirmation-dialog/confirmation-dialog.component.css +0 -0
  974. package/src/libs/ui/elements/src/lib/confirmation-dialog/confirmation-dialog.component.html +12 -0
  975. package/src/libs/ui/elements/src/lib/confirmation-dialog/confirmation-dialog.component.ts +37 -0
  976. package/src/libs/ui/elements/src/lib/download-item/download-item.component.html +5 -3
  977. package/src/libs/ui/elements/src/lib/download-item/download-item.component.ts +4 -4
  978. package/src/libs/ui/elements/src/lib/downloads-list/downloads-list.component.ts +7 -7
  979. package/src/libs/ui/elements/src/lib/error/error.component.css +24 -19
  980. package/src/libs/ui/elements/src/lib/error/error.component.html +27 -13
  981. package/src/libs/ui/elements/src/lib/error/error.component.ts +2 -0
  982. package/src/libs/ui/elements/src/lib/image-overlay-preview/image-overlay-preview.component.html +1 -3
  983. package/src/libs/ui/elements/src/lib/link-card/link-card.component.html +2 -6
  984. package/src/libs/ui/elements/src/lib/link-card/link-card.component.ts +16 -5
  985. package/src/libs/ui/elements/src/lib/markdown-editor/markdown-editor.component.html +13 -17
  986. package/src/libs/ui/elements/src/lib/markdown-editor/markdown-editor.component.ts +1 -3
  987. package/src/libs/ui/elements/src/lib/markdown-parser/markdown-parser.component.css +7 -1
  988. package/src/libs/ui/elements/src/lib/metadata-contact/metadata-contact.component.html +20 -22
  989. package/src/libs/ui/elements/src/lib/metadata-info/linkify.directive.ts +1 -1
  990. package/src/libs/ui/elements/src/lib/metadata-info/metadata-info.component.css +1 -1
  991. package/src/libs/ui/elements/src/lib/metadata-info/metadata-info.component.html +26 -23
  992. package/src/libs/ui/elements/src/lib/metadata-quality/metadata-quality.component.html +14 -20
  993. package/src/libs/ui/elements/src/lib/metadata-quality/metadata-quality.component.ts +0 -10
  994. package/src/libs/ui/elements/src/lib/metadata-quality-item/metadata-quality-item.component.html +1 -1
  995. package/src/libs/ui/elements/src/lib/metadata-quality-item/metadata-quality-item.component.ts +1 -1
  996. package/src/libs/ui/elements/src/lib/notification/notification.component.html +9 -13
  997. package/src/libs/ui/elements/src/lib/notification/notification.component.ts +33 -2
  998. package/src/libs/ui/elements/src/lib/pagination/pagination.component.html +2 -2
  999. package/src/libs/ui/elements/src/lib/pagination-buttons/pagination-buttons.component.html +2 -2
  1000. package/src/libs/ui/elements/src/lib/record-api-form/record-api-form.component.css +2 -2
  1001. package/src/libs/ui/elements/src/lib/record-api-form/record-api-form.component.html +2 -2
  1002. package/src/libs/ui/elements/src/lib/related-record-card/related-record-card.component.html +5 -4
  1003. package/src/libs/ui/elements/src/lib/related-record-card/related-record-card.component.ts +22 -1
  1004. package/src/libs/ui/elements/src/lib/ui-elements.module.ts +59 -8
  1005. package/src/libs/ui/elements/src/lib/user-feedback-item/user-feedback-item.component.html +2 -6
  1006. package/src/libs/ui/elements/src/lib/user-preview/user-preview.component.html +1 -1
  1007. package/src/libs/ui/inputs/src/index.ts +6 -0
  1008. package/src/libs/ui/inputs/src/lib/autocomplete/autocomplete.component.css +20 -21
  1009. package/src/libs/ui/inputs/src/lib/autocomplete/autocomplete.component.html +36 -18
  1010. package/src/libs/ui/inputs/src/lib/autocomplete/autocomplete.component.ts +112 -30
  1011. package/src/libs/ui/inputs/src/lib/badge/badge.component.css +0 -0
  1012. package/src/libs/ui/inputs/src/lib/badge/badge.component.html +26 -0
  1013. package/src/libs/ui/inputs/src/lib/badge/badge.component.ts +41 -0
  1014. package/src/libs/ui/inputs/src/lib/button/button.component.ts +15 -1
  1015. package/src/libs/ui/inputs/src/lib/copy-text-button/copy-text-button.component.html +4 -4
  1016. package/src/libs/ui/inputs/src/lib/date-picker/date-picker.component.css +7 -2
  1017. package/src/libs/ui/inputs/src/lib/date-picker/date-picker.component.html +12 -5
  1018. package/src/libs/ui/inputs/src/lib/date-picker/date-picker.component.ts +27 -3
  1019. package/src/libs/ui/inputs/src/lib/date-range-picker/date-range-picker.component.css +7 -2
  1020. package/src/libs/ui/inputs/src/lib/date-range-picker/date-range-picker.component.html +27 -24
  1021. package/src/libs/ui/inputs/src/lib/date-range-picker/date-range-picker.component.ts +31 -16
  1022. package/src/libs/ui/inputs/src/lib/dropdown-multiselect/dropdown-multiselect.component.html +16 -20
  1023. package/src/libs/ui/inputs/src/lib/dropdown-selector/dropdown-selector.component.html +5 -4
  1024. package/src/libs/ui/inputs/src/lib/dropdown-selector/dropdown-selector.component.ts +16 -2
  1025. package/src/libs/ui/inputs/src/lib/editable-label/editable-label.directive.ts +40 -26
  1026. package/src/libs/ui/inputs/src/lib/file-input/file-input.component.css +4 -0
  1027. package/src/libs/ui/inputs/src/lib/file-input/file-input.component.html +89 -0
  1028. package/src/libs/ui/inputs/src/lib/file-input/file-input.component.ts +106 -0
  1029. package/src/libs/ui/inputs/src/lib/image-input/image-input.component.css +4 -0
  1030. package/src/libs/ui/inputs/src/lib/image-input/image-input.component.html +81 -79
  1031. package/src/libs/ui/inputs/src/lib/image-input/image-input.component.ts +44 -16
  1032. package/src/libs/ui/inputs/src/lib/navigation-button/navigation-button.component.html +1 -3
  1033. package/src/libs/ui/inputs/src/lib/previous-next-buttons/previous-next-buttons.component.html +2 -10
  1034. package/src/libs/ui/inputs/src/lib/previous-next-buttons/previous-next-buttons.component.ts +16 -2
  1035. package/src/libs/ui/inputs/src/lib/search-input/search-input.component.html +2 -2
  1036. package/src/libs/ui/inputs/src/lib/search-input/search-input.component.ts +16 -1
  1037. package/src/libs/ui/inputs/src/lib/star-toggle/star-toggle.component.css +0 -9
  1038. package/src/libs/ui/inputs/src/lib/star-toggle/star-toggle.component.html +1 -5
  1039. package/src/libs/ui/inputs/src/lib/switch-toggle/switch-toggle.component.css +32 -0
  1040. package/src/libs/ui/inputs/src/lib/switch-toggle/switch-toggle.component.html +14 -0
  1041. package/src/libs/ui/inputs/src/lib/switch-toggle/switch-toggle.component.ts +39 -0
  1042. package/src/libs/ui/inputs/src/lib/text-area/text-area.component.html +3 -2
  1043. package/src/libs/ui/inputs/src/lib/text-area/text-area.component.ts +3 -28
  1044. package/src/libs/ui/inputs/src/lib/text-input/text-input.component.html +4 -3
  1045. package/src/libs/ui/inputs/src/lib/text-input/text-input.component.ts +4 -16
  1046. package/src/libs/ui/inputs/src/lib/ui-inputs.module.ts +32 -11
  1047. package/src/libs/ui/inputs/src/lib/url-input/url-input.component.css +9 -0
  1048. package/src/libs/ui/inputs/src/lib/url-input/url-input.component.html +35 -0
  1049. package/src/libs/ui/inputs/src/lib/url-input/url-input.component.ts +67 -0
  1050. package/src/libs/ui/layout/src/index.ts +3 -0
  1051. package/src/libs/ui/layout/src/lib/expandable-panel/expandable-panel.component.html +2 -4
  1052. package/src/libs/ui/layout/src/lib/expandable-panel-button/expandable-panel-button.component.html +2 -6
  1053. package/src/libs/ui/layout/src/lib/form-field-wrapper/form-field-wrapper.component.html +8 -3
  1054. package/src/libs/ui/layout/src/lib/form-field-wrapper/form-field-wrapper.component.ts +4 -4
  1055. package/src/libs/ui/layout/src/lib/interactive-table/interactive-table.component.css +5 -9
  1056. package/src/libs/ui/layout/src/lib/interactive-table/interactive-table.component.html +12 -11
  1057. package/src/libs/ui/layout/src/lib/interactive-table/interactive-table.component.ts +8 -2
  1058. package/src/libs/ui/layout/src/lib/max-lines/max-lines.component.css +0 -0
  1059. package/src/libs/ui/{elements → layout}/src/lib/max-lines/max-lines.component.html +2 -1
  1060. package/src/libs/ui/{elements → layout}/src/lib/max-lines/max-lines.component.ts +9 -5
  1061. package/src/libs/ui/layout/src/lib/modal-dialog/modal-dialog.component.css +0 -0
  1062. package/src/libs/ui/layout/src/lib/modal-dialog/modal-dialog.component.html +15 -0
  1063. package/src/libs/ui/layout/src/lib/modal-dialog/modal-dialog.component.ts +44 -0
  1064. package/src/libs/ui/layout/src/lib/sortable-list/sortable-list.component.css +18 -0
  1065. package/src/libs/ui/layout/src/lib/sortable-list/sortable-list.component.html +37 -0
  1066. package/src/libs/ui/layout/src/lib/sortable-list/sortable-list.component.ts +45 -0
  1067. package/src/libs/ui/layout/src/lib/ui-layout.module.ts +18 -3
  1068. package/src/libs/ui/map/src/index.ts +3 -2
  1069. package/src/libs/ui/map/src/lib/components/feature-detail/feature-detail.component.html +1 -1
  1070. package/src/libs/ui/map/src/lib/components/feature-detail/feature-detail.component.ts +8 -5
  1071. package/src/libs/ui/map/src/lib/components/map-container/map-container.component.css +0 -0
  1072. package/src/libs/ui/map/src/lib/components/{map/map.component.html → map-container/map-container.component.html} +4 -3
  1073. package/src/libs/ui/map/src/lib/components/map-container/map-container.component.ts +214 -0
  1074. package/src/libs/ui/map/src/lib/components/map-container/map-settings.token.ts +23 -0
  1075. package/src/libs/ui/map/src/lib/map-utils.ts +54 -0
  1076. package/src/libs/ui/search/src/index.ts +1 -0
  1077. package/src/libs/ui/search/src/lib/facets/fixtures/aggregations-model-response.ts +7 -6
  1078. package/src/libs/ui/search/src/lib/record-preview-feed/record-preview-feed.component.html +14 -12
  1079. package/src/libs/ui/search/src/lib/record-preview-row/record-preview-row.component.html +8 -8
  1080. package/src/libs/ui/search/src/lib/results-table/action-menu/action-menu.component.css +0 -0
  1081. package/src/libs/ui/search/src/lib/results-table/action-menu/action-menu.component.html +59 -0
  1082. package/src/libs/ui/search/src/lib/results-table/action-menu/action-menu.component.ts +58 -0
  1083. package/src/libs/ui/search/src/lib/results-table/results-table.component.css +0 -0
  1084. package/src/libs/{feature → ui}/search/src/lib/results-table/results-table.component.html +66 -16
  1085. package/src/libs/ui/search/src/lib/results-table/results-table.component.ts +235 -0
  1086. package/src/libs/ui/search/src/lib/ui-search.module.ts +17 -2
  1087. package/src/libs/ui/widgets/src/index.ts +1 -1
  1088. package/src/libs/ui/widgets/src/lib/popover/popover.component.css +0 -0
  1089. package/src/libs/ui/widgets/src/lib/popover/popover.component.html +3 -0
  1090. package/src/libs/ui/widgets/src/lib/popover/popover.component.ts +85 -0
  1091. package/src/libs/ui/widgets/src/lib/popup-alert/popup-alert.component.html +1 -3
  1092. package/src/libs/ui/widgets/src/lib/popup-alert/popup-alert.component.ts +10 -0
  1093. package/src/libs/ui/widgets/src/lib/ui-widgets.module.ts +0 -8
  1094. package/src/libs/util/app-config/src/index.ts +1 -0
  1095. package/src/libs/util/app-config/src/lib/fixtures.ts +9 -9
  1096. package/src/libs/util/app-config/src/lib/map-layers.ts +31 -0
  1097. package/src/libs/util/i18n/src/index.ts +1 -0
  1098. package/src/libs/util/i18n/src/lib/i18n.constants.ts +0 -43
  1099. package/src/libs/util/i18n/src/lib/lang.service.ts +1 -1
  1100. package/src/libs/util/i18n/src/lib/language-codes.ts +44 -0
  1101. package/src/libs/util/shared/src/lib/links/link-classifier.service.ts +4 -3
  1102. package/src/libs/util/shared/src/lib/links/link-utils.ts +6 -6
  1103. package/src/libs/util/shared/src/lib/services/theme.service.ts +1 -0
  1104. package/src/libs/util/shared/src/lib/utils/bytes-convert.ts +4 -1
  1105. package/src/libs/util/shared/src/lib/utils/index.ts +1 -0
  1106. package/src/libs/util/shared/src/lib/utils/no-duplicate-file-name.ts +23 -0
  1107. package/tailwind.base.config.js +1 -0
  1108. package/tailwind.base.css +90 -10
  1109. package/translations/de.json +182 -34
  1110. package/translations/en.json +189 -41
  1111. package/translations/es.json +159 -11
  1112. package/translations/fr.json +220 -72
  1113. package/translations/it.json +162 -14
  1114. package/translations/nl.json +159 -11
  1115. package/translations/pt.json +159 -11
  1116. package/translations/sk.json +161 -13
  1117. package/esm2022/libs/feature/editor/src/lib/components/record-form/form-field/form-field-resource-updated/form-field-resource-updated.component.mjs +0 -15
  1118. package/esm2022/libs/feature/editor/src/lib/components/record-form/form-field/form-field-temporal-extent/form-field-temporal-extent.component.mjs +0 -11
  1119. package/esm2022/libs/feature/editor/src/lib/components/record-form/form-field/form-field.model.mjs +0 -2
  1120. package/esm2022/libs/feature/editor/src/lib/models/fields.model.mjs +0 -2
  1121. package/esm2022/libs/feature/map/src/lib/+state/map.effects.mjs +0 -15
  1122. package/esm2022/libs/feature/map/src/lib/+state/map.models.mjs +0 -2
  1123. package/esm2022/libs/feature/map/src/lib/constant/map-options.mjs +0 -8
  1124. package/esm2022/libs/feature/map/src/lib/constant/style.constant.mjs +0 -17
  1125. package/esm2022/libs/feature/map/src/lib/feature-info/feature-info.service.mjs +0 -38
  1126. package/esm2022/libs/feature/map/src/lib/manager/map-instance.directive.mjs +0 -19
  1127. package/esm2022/libs/feature/map/src/lib/manager/map-manager.service.mjs +0 -19
  1128. package/esm2022/libs/feature/map/src/lib/map-container/map-container.component.mjs +0 -27
  1129. package/esm2022/libs/feature/map/src/lib/map-context/component/map-context.component.mjs +0 -46
  1130. package/esm2022/libs/feature/map/src/lib/map-context/map-context.model.mjs +0 -10
  1131. package/esm2022/libs/feature/map/src/lib/map-context/map-context.service.mjs +0 -289
  1132. package/esm2022/libs/feature/search/src/lib/results-table/results-table.component.mjs +0 -128
  1133. package/esm2022/libs/ui/elements/src/lib/max-lines/max-lines.component.mjs +0 -69
  1134. package/esm2022/libs/ui/map/src/lib/components/map/map.component.mjs +0 -40
  1135. package/esm2022/libs/ui/map/src/lib/ui-map.module.mjs +0 -33
  1136. package/esm2022/libs/ui/widgets/src/lib/badge/badge.component.mjs +0 -17
  1137. package/libs/feature/editor/src/lib/components/record-form/form-field/form-field-resource-updated/form-field-resource-updated.component.d.ts +0 -8
  1138. package/libs/feature/editor/src/lib/components/record-form/form-field/form-field-resource-updated/form-field-resource-updated.component.d.ts.map +0 -1
  1139. package/libs/feature/editor/src/lib/components/record-form/form-field/form-field-temporal-extent/form-field-temporal-extent.component.d.ts +0 -6
  1140. package/libs/feature/editor/src/lib/components/record-form/form-field/form-field-temporal-extent/form-field-temporal-extent.component.d.ts.map +0 -1
  1141. package/libs/feature/editor/src/lib/components/record-form/form-field/form-field.model.d.ts +0 -26
  1142. package/libs/feature/editor/src/lib/components/record-form/form-field/form-field.model.d.ts.map +0 -1
  1143. package/libs/feature/editor/src/lib/models/fields.model.d.ts +0 -15
  1144. package/libs/feature/editor/src/lib/models/fields.model.d.ts.map +0 -1
  1145. package/libs/feature/map/src/lib/+state/map.effects.d.ts +0 -9
  1146. package/libs/feature/map/src/lib/+state/map.effects.d.ts.map +0 -1
  1147. package/libs/feature/map/src/lib/+state/map.models.d.ts +0 -9
  1148. package/libs/feature/map/src/lib/+state/map.models.d.ts.map +0 -1
  1149. package/libs/feature/map/src/lib/constant/map-options.d.ts +0 -9
  1150. package/libs/feature/map/src/lib/constant/map-options.d.ts.map +0 -1
  1151. package/libs/feature/map/src/lib/constant/style.constant.d.ts +0 -4
  1152. package/libs/feature/map/src/lib/constant/style.constant.d.ts.map +0 -1
  1153. package/libs/feature/map/src/lib/feature-info/feature-info.service.d.ts +0 -16
  1154. package/libs/feature/map/src/lib/feature-info/feature-info.service.d.ts.map +0 -1
  1155. package/libs/feature/map/src/lib/manager/map-instance.directive.d.ts +0 -9
  1156. package/libs/feature/map/src/lib/manager/map-instance.directive.d.ts.map +0 -1
  1157. package/libs/feature/map/src/lib/manager/map-manager.service.d.ts +0 -11
  1158. package/libs/feature/map/src/lib/manager/map-manager.service.d.ts.map +0 -1
  1159. package/libs/feature/map/src/lib/map-container/map-container.component.d.ts +0 -12
  1160. package/libs/feature/map/src/lib/map-container/map-container.component.d.ts.map +0 -1
  1161. package/libs/feature/map/src/lib/map-context/component/map-context.component.d.ts +0 -26
  1162. package/libs/feature/map/src/lib/map-context/component/map-context.component.d.ts.map +0 -1
  1163. package/libs/feature/map/src/lib/map-context/map-context.model.d.ts +0 -77
  1164. package/libs/feature/map/src/lib/map-context/map-context.model.d.ts.map +0 -1
  1165. package/libs/feature/map/src/lib/map-context/map-context.service.d.ts +0 -26
  1166. package/libs/feature/map/src/lib/map-context/map-context.service.d.ts.map +0 -1
  1167. package/libs/feature/search/src/lib/results-table/results-table.component.d.ts +0 -33
  1168. package/libs/feature/search/src/lib/results-table/results-table.component.d.ts.map +0 -1
  1169. package/libs/ui/elements/src/lib/max-lines/max-lines.component.d.ts.map +0 -1
  1170. package/libs/ui/map/src/lib/components/map/map.component.d.ts +0 -19
  1171. package/libs/ui/map/src/lib/components/map/map.component.d.ts.map +0 -1
  1172. package/libs/ui/map/src/lib/ui-map.module.d.ts +0 -13
  1173. package/libs/ui/map/src/lib/ui-map.module.d.ts.map +0 -1
  1174. package/libs/ui/widgets/src/lib/badge/badge.component.d.ts +0 -7
  1175. package/libs/ui/widgets/src/lib/badge/badge.component.d.ts.map +0 -1
  1176. package/src/libs/common/fixtures/src/lib/ol-feature.fixture.ts +0 -7
  1177. package/src/libs/common/fixtures/src/lib/utils/freeze.ts +0 -10
  1178. package/src/libs/common/fixtures/src/lib/utils/index.ts +0 -1
  1179. package/src/libs/feature/editor/src/lib/components/overview-upload/overview-upload.component.html +0 -8
  1180. package/src/libs/feature/editor/src/lib/components/overview-upload/overview-upload.component.ts +0 -70
  1181. package/src/libs/feature/editor/src/lib/components/record-form/form-field/form-field-resource-updated/form-field-resource-updated.component.html +0 -4
  1182. package/src/libs/feature/editor/src/lib/components/record-form/form-field/form-field-resource-updated/form-field-resource-updated.component.ts +0 -15
  1183. package/src/libs/feature/editor/src/lib/components/record-form/form-field/form-field-temporal-extent/form-field-temporal-extent.component.html +0 -1
  1184. package/src/libs/feature/editor/src/lib/components/record-form/form-field/form-field-temporal-extent/form-field-temporal-extent.component.ts +0 -10
  1185. package/src/libs/feature/editor/src/lib/components/record-form/form-field/form-field.model.ts +0 -43
  1186. package/src/libs/feature/editor/src/lib/models/fields.model.ts +0 -29
  1187. package/src/libs/feature/map/src/lib/+state/map.effects.ts +0 -7
  1188. package/src/libs/feature/map/src/lib/+state/map.models.ts +0 -9
  1189. package/src/libs/feature/map/src/lib/constant/map-options.ts +0 -17
  1190. package/src/libs/feature/map/src/lib/feature-info/feature-info.service.ts +0 -42
  1191. package/src/libs/feature/map/src/lib/manager/map-instance.directive.ts +0 -10
  1192. package/src/libs/feature/map/src/lib/manager/map-manager.service.ts +0 -13
  1193. package/src/libs/feature/map/src/lib/map-container/map-container.component.html +0 -1
  1194. package/src/libs/feature/map/src/lib/map-container/map-container.component.ts +0 -26
  1195. package/src/libs/feature/map/src/lib/map-context/component/map-context.component.html +0 -1
  1196. package/src/libs/feature/map/src/lib/map-context/component/map-context.component.ts +0 -57
  1197. package/src/libs/feature/map/src/lib/map-context/map-context.fixtures.ts +0 -51
  1198. package/src/libs/feature/map/src/lib/map-context/map-context.model.ts +0 -95
  1199. package/src/libs/feature/map/src/lib/map-context/map-context.service.ts +0 -318
  1200. package/src/libs/feature/search/src/lib/results-table/results-table.component.ts +0 -164
  1201. package/src/libs/ui/map/src/lib/components/map/map.component.ts +0 -57
  1202. package/src/libs/ui/map/src/lib/ui-map.module.ts +0 -19
  1203. package/src/libs/ui/widgets/src/lib/badge/badge.component.html +0 -10
  1204. package/src/libs/ui/widgets/src/lib/badge/badge.component.ts +0 -11
  1205. /package/src/libs/feature/editor/src/lib/components/{overview-upload/overview-upload.component.css → contact-card/contact-card.component.css} +0 -0
  1206. /package/src/libs/feature/editor/src/lib/components/{record-form/form-field/form-field-resource-updated/form-field-resource-updated.component.css → import-record/import-record.component.css} +0 -0
  1207. /package/src/libs/feature/editor/src/lib/components/{record-form/form-field/form-field-temporal-extent/form-field-temporal-extent.component.css → online-resource-card/online-resource-card.component.css} +0 -0
  1208. /package/src/libs/feature/{map/src/lib/map-container/map-container.component.css → editor/src/lib/components/online-service-resource-input/online-service-resource-input.component.css} +0 -0
  1209. /package/src/libs/feature/{map/src/lib/map-context/component/map-context.component.css → editor/src/lib/components/record-form/form-field/form-field-contacts/form-field-contacts.component.css} +0 -0
  1210. /package/src/libs/feature/{search/src/lib/results-table/results-table.component.css → editor/src/lib/components/record-form/form-field/form-field-date-updated/form-field-date-updated.component.css} +0 -0
  1211. /package/src/libs/{ui/elements/src/lib/max-lines/max-lines.component.css → feature/editor/src/lib/components/record-form/form-field/form-field-keywords/form-field-keywords.component.css} +0 -0
  1212. /package/src/libs/{ui/map/src/lib/components/map/map.component.css → feature/editor/src/lib/components/record-form/form-field/form-field-map-container/form-field-map-container.component.css} +0 -0
  1213. /package/src/libs/{ui/widgets/src/lib/badge/badge.component.css → feature/editor/src/lib/components/record-form/form-field/form-field-online-link-resources/form-field-online-link-resources.component.css} +0 -0
@@ -1,17 +1,48 @@
1
1
  import { matchMimeType, matchProtocol } from '../common/distribution.mapper';
2
2
  import { combine, fallback, filterArray, flattenArray, getAtIndex, map, mapArray, pipe, } from '../function-utils';
3
- import { findChildElement, findChildrenElement, findNestedElement, findNestedElements, findParent, readAttribute, readText, } from '../xml-utils';
3
+ import { findChildElement, findChildrenElement, findNestedElement, findNestedElements, findParent, firstChildElement, readAttribute, readText, } from '../xml-utils';
4
+ import { readGeometry } from './utils/geometry';
4
5
  import { fullNameToParts } from './utils/individual-name';
5
6
  import { getKeywordTypeFromKeywordTypeCode } from './utils/keyword.mapper';
6
7
  import { getRoleFromRoleCode } from './utils/role.mapper';
7
8
  import { getStatusFromStatusCode } from './utils/status.mapper';
8
9
  import { getUpdateFrequencyFromFrequencyCode } from './utils/update-frequency.mapper';
10
+ import { LANG_3_TO_2_MAPPER } from '../../../../../../libs/util/i18n/src/lib/language-codes';
9
11
  export function extractCharacterString() {
10
12
  return pipe(fallback(findChildElement('gco:CharacterString', false), findChildElement('gmx:Anchor', false)), readText());
11
13
  }
14
+ /**
15
+ * Translated values will also be collected in the translations object
16
+ */
17
+ export function extractLocalizedCharacterString(fieldName, translations) {
18
+ return combine(pipe(fallback(findChildElement('gco:CharacterString', false), findChildElement('gmx:Anchor', false)), readText()), (el) => {
19
+ const translatedValues = findNestedElements('gmd:PT_FreeText', 'gmd:textGroup', 'gmd:LocalisedCharacterString')(el);
20
+ const translationsSafe = translations ?? {};
21
+ if (!translatedValues.length)
22
+ return translationsSafe;
23
+ const valueTranslations = translatedValues.reduce((prev, translationEl) => {
24
+ const lang = readAttribute('locale')(translationEl)
25
+ .toLowerCase()
26
+ .replace(/^#/, '');
27
+ const value = readText()(translationEl);
28
+ if (!lang) {
29
+ return prev;
30
+ }
31
+ return { ...prev, [lang]: value };
32
+ }, {});
33
+ translationsSafe[fieldName] = {
34
+ ...translationsSafe[fieldName],
35
+ ...valueTranslations,
36
+ };
37
+ return translationsSafe;
38
+ });
39
+ }
12
40
  export function extractDateTime() {
13
41
  return pipe(fallback(findChildElement('gco:DateTime', false), findChildElement('gco:Date', false)), readText(), map((dateStr) => (dateStr ? new Date(dateStr) : null)));
14
42
  }
43
+ export function extractDecimal() {
44
+ return pipe(findChildElement('gco:Decimal', false), readText(), map((numberStr) => (numberStr ? Number(numberStr) : null)));
45
+ }
15
46
  export function extractUrl() {
16
47
  const getUrl = pipe(findChildElement('gmd:URL', false), readText());
17
48
  const getCharacterString = pipe(findChildElement('gco:CharacterString', false), readText());
@@ -35,9 +66,10 @@ export function extractRole() {
35
66
  // from gmd:CI_ResponsibleParty
36
67
  export function extractOrganization() {
37
68
  const getUrl = pipe(findNestedElements('gmd:contactInfo', 'gmd:CI_Contact', 'gmd:onlineResource', 'gmd:CI_OnlineResource', 'gmd:linkage'), getAtIndex(0), extractUrl());
38
- return pipe(combine(pipe(findChildElement('gmd:organisationName', false), extractCharacterString()), getUrl), map(([name, website]) => ({
69
+ return pipe(combine(pipe(findChildElement('gmd:organisationName', false), extractLocalizedCharacterString('name')), getUrl), map(([[name, translations], website]) => ({
39
70
  name,
40
71
  ...(website && { website }),
72
+ translations,
41
73
  })));
42
74
  }
43
75
  // from gmd:CI_ResponsibleParty
@@ -70,38 +102,42 @@ export function extractStatus() {
70
102
  }
71
103
  // from gmd:resourceConstraints
72
104
  export function extractLegalConstraints() {
73
- return pipe(findChildrenElement('gmd:MD_LegalConstraints', false), filterArray(pipe(findChildrenElement('gmd:MD_RestrictionCode'), mapArray(readAttribute('codeListValue')), map((values) => values.indexOf('license') === -1))), mapArray(combine(findChildrenElement('gmd:otherConstraints'), findChildrenElement('gmd:useLimitation'))), flattenArray(), flattenArray(), mapArray(combine(extractCharacterString(), extractUrl())), mapArray(([text, url]) => ({
105
+ return pipe(findChildrenElement('gmd:MD_LegalConstraints', false), filterArray(pipe(findChildrenElement('gmd:MD_RestrictionCode'), mapArray(readAttribute('codeListValue')), map((values) => values.indexOf('license') === -1))), mapArray(combine(findChildrenElement('gmd:otherConstraints'), findChildrenElement('gmd:useLimitation'))), flattenArray(), flattenArray(), mapArray(combine(extractLocalizedCharacterString('text'), extractUrl())), mapArray(([[text, translations], url]) => ({
74
106
  ...(url && { url }),
75
107
  text,
108
+ translations,
76
109
  })));
77
110
  }
78
111
  // from gmd:resourceConstraints
79
112
  export function extractSecurityConstraints() {
80
- return pipe(findNestedElements('gmd:MD_SecurityConstraints', 'gmd:useLimitation'), flattenArray(), mapArray(combine(extractCharacterString(), extractUrl())), mapArray(([text, url]) => ({
113
+ return pipe(findNestedElements('gmd:MD_SecurityConstraints', 'gmd:useLimitation'), flattenArray(), mapArray(combine(extractLocalizedCharacterString('text'), extractUrl())), mapArray(([[text, translations], url]) => ({
81
114
  ...(url && { url }),
82
115
  text,
116
+ translations,
83
117
  })));
84
118
  }
85
119
  // from gmd:resourceConstraints
86
120
  export function extractOtherConstraints() {
87
- return pipe(findNestedElements('gmd:MD_Constraints', 'gmd:useLimitation'), flattenArray(), mapArray(combine(extractCharacterString(), extractUrl())), mapArray(([text, url]) => ({
121
+ return pipe(findNestedElements('gmd:MD_Constraints', 'gmd:useLimitation'), flattenArray(), mapArray(combine(extractLocalizedCharacterString('text'), extractUrl())), mapArray(([[text, translations], url]) => ({
88
122
  ...(url && { url }),
89
123
  text,
124
+ translations,
90
125
  })));
91
126
  }
92
127
  // from gmd:resourceConstraints
93
128
  export function extractLicenses() {
94
- return pipe(findChildrenElement('gmd:MD_LegalConstraints', false), filterArray(pipe(findChildrenElement('gmd:MD_RestrictionCode'), mapArray(readAttribute('codeListValue')), map((values) => values.indexOf('license') > -1))), mapArray(combine(findChildrenElement('gmd:otherConstraints'), findChildrenElement('gmd:useLimitation'))), flattenArray(), flattenArray(), mapArray(combine(extractCharacterString(), extractUrl())), mapArray(([text, url]) => ({
129
+ return pipe(findChildrenElement('gmd:MD_LegalConstraints', false), filterArray(pipe(findChildrenElement('gmd:MD_RestrictionCode'), mapArray(readAttribute('codeListValue')), map((values) => values.indexOf('license') > -1))), mapArray(combine(findChildrenElement('gmd:otherConstraints'), findChildrenElement('gmd:useLimitation'))), flattenArray(), flattenArray(), mapArray(combine(extractLocalizedCharacterString('text'), extractUrl())), mapArray(([[text, translations], url]) => ({
95
130
  ...(url && { url }),
96
131
  text,
132
+ translations,
97
133
  })));
98
134
  }
99
135
  const getMimeType = pipe(findParent('gmd:MD_Distribution'), findNestedElement('gmd:distributionFormat', 'gmd:MD_Format', 'gmd:name'), extractCharacterString(), map(matchMimeType));
100
136
  /**
101
- * Extract distributions from a MD_Distribution element
137
+ * Extract online resources from an MD_Distribution element
102
138
  * @param getMimeTypeFn This function starts from a gmd:transferOptions element
103
139
  */
104
- export function extractDatasetDistributions(getMimeTypeFn) {
140
+ export function extractDatasetOnlineResources(getMimeTypeFn) {
105
141
  const getUrl = pipe(findChildElement('gmd:linkage'), extractMandatoryUrl());
106
142
  const getProtocolStr = pipe(findChildElement('gmd:protocol'), extractCharacterString());
107
143
  const getProtocol = pipe(getProtocolStr, map(matchProtocol));
@@ -109,9 +145,13 @@ export function extractDatasetDistributions(getMimeTypeFn) {
109
145
  const getIsService = pipe(getProtocol, map((protocol) => protocol !== 'other'));
110
146
  const getIsDownload = pipe(combine(getIsService, getOnlineFunction, getProtocolStr), map(([isService, onlineFunction, protocolStr]) => (!isService && onlineFunction === 'download') ||
111
147
  /download/i.test(protocolStr)));
112
- const getName = pipe(findChildElement('gmd:name'), extractCharacterString());
113
- const getDescription = pipe(findChildElement('gmd:description'), extractCharacterString());
114
- return pipe(findNestedElements('gmd:transferOptions', 'gmd:MD_DigitalTransferOptions', 'gmd:onLine', 'gmd:CI_OnlineResource'), mapArray(combine(getIsService, getIsDownload, getProtocol, getUrl, getName, getDescription, getMimeTypeFn)), mapArray(([isService, isDownload, protocol, url, name, description, mimeType]) => {
148
+ const getName = pipe(findChildElement('gmd:name'), extractLocalizedCharacterString('name'));
149
+ const getDescription = pipe(findChildElement('gmd:description'), extractLocalizedCharacterString('description'));
150
+ return pipe(findNestedElements('gmd:transferOptions', 'gmd:MD_DigitalTransferOptions', 'gmd:onLine', 'gmd:CI_OnlineResource'), mapArray(combine(getIsService, getIsDownload, getProtocol, getUrl, getName, getDescription, getMimeTypeFn)), mapArray(([isService, isDownload, protocol, url, [name, nameTranslations], [description, descriptionTranslations], mimeType,]) => {
151
+ const translations = {
152
+ ...nameTranslations,
153
+ ...descriptionTranslations,
154
+ };
115
155
  if (isService) {
116
156
  const hasIdentifier = protocol === 'wms' || protocol === 'wfs';
117
157
  return {
@@ -121,6 +161,7 @@ export function extractDatasetDistributions(getMimeTypeFn) {
121
161
  ...(name && hasIdentifier && { identifierInService: name }),
122
162
  ...(name && { name }),
123
163
  ...(description && { description }),
164
+ translations,
124
165
  };
125
166
  }
126
167
  else if (isDownload) {
@@ -130,6 +171,7 @@ export function extractDatasetDistributions(getMimeTypeFn) {
130
171
  ...(name && { name }),
131
172
  ...(description && { description }),
132
173
  ...(mimeType && { mimeType }),
174
+ translations,
133
175
  };
134
176
  }
135
177
  else {
@@ -138,6 +180,7 @@ export function extractDatasetDistributions(getMimeTypeFn) {
138
180
  url: url,
139
181
  ...(name && { name }),
140
182
  ...(description && { description }),
183
+ translations,
141
184
  };
142
185
  }
143
186
  }));
@@ -244,11 +287,11 @@ export function readResourcePublished(rootEl) {
244
287
  export function readRecordUpdated(rootEl) {
245
288
  return pipe(findChildElement('gmd:dateStamp'), extractDateTime())(rootEl);
246
289
  }
247
- export function readTitle(rootEl) {
248
- return pipe(findIdentification(), findNestedElement('gmd:citation', 'gmd:CI_Citation', 'gmd:title'), extractCharacterString())(rootEl);
290
+ export function readTitle(rootEl, translations) {
291
+ return pipe(findIdentification(), findNestedElement('gmd:citation', 'gmd:CI_Citation', 'gmd:title'), extractLocalizedCharacterString('title', translations), map(([title]) => title))(rootEl);
249
292
  }
250
- export function readAbstract(rootEl) {
251
- return pipe(findIdentification(), findChildElement('gmd:abstract', false), extractCharacterString())(rootEl);
293
+ export function readAbstract(rootEl, translations) {
294
+ return pipe(findIdentification(), findChildElement('gmd:abstract', false), extractLocalizedCharacterString('abstract', translations), map(([abstract]) => abstract))(rootEl);
252
295
  }
253
296
  export function readContacts(rootEl) {
254
297
  return pipe(findChildrenElement('gmd:contact', false), mapArray(findChildElement('gmd:CI_ResponsibleParty', false)), mapArray(extractIndividual()))(rootEl);
@@ -275,11 +318,12 @@ export function readKeywordGroup(rootEl) {
275
318
  const type = pipe(findChildrenElement('gmd:MD_KeywordTypeCode'), mapArray(readAttribute('codeListValue')), map((values) => getKeywordTypeFromKeywordTypeCode(values[0])))(rootEl);
276
319
  const thesaurus = pipe(findNestedElement('gmd:thesaurusName'), readThesaurus)(rootEl);
277
320
  return pipe(findChildrenElement('gmd:keyword'), mapArray((el) => {
278
- const label = extractCharacterString()(el);
321
+ const [label, translations] = extractLocalizedCharacterString('label')(el);
279
322
  return {
280
323
  ...(thesaurus ? { thesaurus } : {}),
281
324
  label,
282
325
  type,
326
+ translations,
283
327
  };
284
328
  }))(rootEl);
285
329
  }
@@ -315,11 +359,8 @@ export function readOverviews(rootEl) {
315
359
  ...(description && { description }),
316
360
  })))(rootEl);
317
361
  }
318
- export function readLineage(rootEl) {
319
- return pipe(findNestedElement('gmd:dataQualityInfo', 'gmd:DQ_DataQuality', 'gmd:lineage', 'gmd:LI_Lineage', 'gmd:statement'), extractCharacterString())(rootEl);
320
- }
321
- export function readDistributions(rootEl) {
322
- return pipe(findNestedElements('gmd:distributionInfo', 'gmd:MD_Distribution'), mapArray(extractDatasetDistributions(getMimeType)), flattenArray())(rootEl);
362
+ export function readLineage(rootEl, translations) {
363
+ return pipe(findNestedElement('gmd:dataQualityInfo', 'gmd:DQ_DataQuality', 'gmd:lineage', 'gmd:LI_Lineage', 'gmd:statement'), extractLocalizedCharacterString('lineage', translations), map(([lineage]) => lineage))(rootEl);
323
364
  }
324
365
  export function readUpdateFrequency(rootEl) {
325
366
  return pipe(findIdentification(), findNestedElement('gmd:resourceMaintenance', 'gmd:MD_MaintenanceInformation'), extractUpdateFrequency(), map((updateFrequency) => updateFrequency || 'unknown'))(rootEl);
@@ -330,15 +371,20 @@ export function extractServiceOnlineResources() {
330
371
  const getProtocol = pipe(getProtocolStr, map(matchProtocol));
331
372
  const getOnlineFunction = pipe(findNestedElement('gmd:function', 'gmd:CI_OnLineFunctionCode'), readAttribute('codeListValue'));
332
373
  const getIsLink = pipe(getOnlineFunction, map((onlineFunction) => onlineFunction === 'information'));
333
- const getName = pipe(findChildElement('gmd:name'), extractCharacterString());
334
- const getDescription = pipe(findChildElement('gmd:description'), extractCharacterString());
335
- return pipe(findNestedElements('gmd:transferOptions', 'gmd:MD_DigitalTransferOptions', 'gmd:onLine', 'gmd:CI_OnlineResource'), mapArray(combine(getIsLink, getProtocol, getUrl, getName, getDescription)), mapArray(([isLink, protocol, url, name, description]) => {
374
+ const getName = pipe(findChildElement('gmd:name'), extractLocalizedCharacterString('name'));
375
+ const getDescription = pipe(findChildElement('gmd:description'), extractLocalizedCharacterString('description', {}));
376
+ return pipe(findNestedElements('gmd:transferOptions', 'gmd:MD_DigitalTransferOptions', 'gmd:onLine', 'gmd:CI_OnlineResource'), mapArray(combine(getIsLink, getProtocol, getUrl, getName, getDescription)), mapArray(([isLink, protocol, url, [name, nameTranslations], [description, descriptionTranslations],]) => {
377
+ const translations = {
378
+ ...nameTranslations,
379
+ ...descriptionTranslations,
380
+ };
336
381
  if (isLink) {
337
382
  return {
338
383
  type: 'link',
339
384
  url: url,
340
385
  ...(name && { name }),
341
386
  ...(description && { description }),
387
+ translations,
342
388
  };
343
389
  }
344
390
  else {
@@ -347,11 +393,15 @@ export function extractServiceOnlineResources() {
347
393
  endpointUrl: url,
348
394
  protocol,
349
395
  ...(description && { description }),
396
+ translations,
350
397
  };
351
398
  }
352
399
  }));
353
400
  }
354
401
  export function readOnlineResources(rootEl) {
402
+ if (readKind(rootEl) === 'dataset') {
403
+ return pipe(findNestedElements('gmd:distributionInfo', 'gmd:MD_Distribution'), mapArray((el) => extractDatasetOnlineResources(getMimeType)(el)), flattenArray())(rootEl);
404
+ }
355
405
  return pipe(findNestedElements('gmd:distributionInfo', 'gmd:MD_Distribution'), mapArray(extractServiceOnlineResources()), flattenArray())(rootEl);
356
406
  }
357
407
  export function readTemporalExtents(rootEl) {
@@ -369,4 +419,36 @@ export function readTemporalExtents(rootEl) {
369
419
  }
370
420
  }))(rootEl);
371
421
  }
372
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVhZC1wYXJ0cy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvYXBpL21ldGFkYXRhLWNvbnZlcnRlci9zcmMvbGliL2lzbzE5MTM5L3JlYWQtcGFydHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBZ0JBLE9BQU8sRUFBRSxhQUFhLEVBQUUsYUFBYSxFQUFFLE1BQU0sK0JBQStCLENBQUE7QUFDNUUsT0FBTyxFQUVMLE9BQU8sRUFDUCxRQUFRLEVBQ1IsV0FBVyxFQUNYLFlBQVksRUFDWixVQUFVLEVBQ1YsR0FBRyxFQUNILFFBQVEsRUFDUixJQUFJLEdBQ0wsTUFBTSxtQkFBbUIsQ0FBQTtBQUMxQixPQUFPLEVBRUwsZ0JBQWdCLEVBQ2hCLG1CQUFtQixFQUNuQixpQkFBaUIsRUFDakIsa0JBQWtCLEVBQ2xCLFVBQVUsRUFDVixhQUFhLEVBQ2IsUUFBUSxHQUNULE1BQU0sY0FBYyxDQUFBO0FBQ3JCLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQTtBQUN6RCxPQUFPLEVBQUUsaUNBQWlDLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQTtBQUMxRSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQTtBQUN6RCxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQTtBQUMvRCxPQUFPLEVBQUUsbUNBQW1DLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQTtBQUVyRixNQUFNLFVBQVUsc0JBQXNCO0lBSXBDLE9BQU8sSUFBSSxDQUNULFFBQVEsQ0FDTixnQkFBZ0IsQ0FBQyxxQkFBcUIsRUFBRSxLQUFLLENBQUMsRUFDOUMsZ0JBQWdCLENBQUMsWUFBWSxFQUFFLEtBQUssQ0FBQyxDQUN0QyxFQUNELFFBQVEsRUFBRSxDQUNYLENBQUE7QUFDSCxDQUFDO0FBRUQsTUFBTSxVQUFVLGVBQWU7SUFDN0IsT0FBTyxJQUFJLENBQ1QsUUFBUSxDQUNOLGdCQUFnQixD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LElBQUksRUFBRSxFQUFFLENBQUMsQ0FBQztnQkFDYixLQUFLLEVBQUUsSUFBSTthQUNaLENBQUMsQ0FBQyxDQUNKLENBQUMsU0FBUyxDQUFDLENBQUE7U0FDYjtJQUNILENBQUMsQ0FBQyxDQUNILENBQUMsTUFBTSxDQUFDLENBQUE7QUFDWCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ29uc3RyYWludCxcbiAgRGF0YXNldERpc3RyaWJ1dGlvbixcbiAgR3JhcGhpY092ZXJ2aWV3LFxuICBJbmRpdmlkdWFsLFxuICBLZXl3b3JkLFxuICBLZXl3b3JkVGhlc2F1cnVzLFxuICBPcmdhbml6YXRpb24sXG4gIFJlY29yZEtpbmQsXG4gIFJlY29yZFN0YXR1cyxcbiAgUm9sZSxcbiAgU2VydmljZU9ubGluZVJlc291cmNlLFxuICBTcGF0aWFsUmVwcmVzZW50YXRpb25UeXBlLFxuICBVcGRhdGVGcmVxdWVuY3ksXG4gIFVwZGF0ZUZyZXF1ZW5jeUN1c3RvbSxcbn0gZnJvbSAnLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb21tb24vZG9tYWluL3NyYy9saWIvbW9kZWwvcmVjb3JkJ1xuaW1wb3J0IHsgbWF0Y2hNaW1lVHlwZSwgbWF0Y2hQcm90b2NvbCB9IGZyb20gJy4uL2NvbW1vbi9kaXN0cmlidXRpb24ubWFwcGVyJ1xuaW1wb3J0IHtcbiAgQ2hhaW5hYmxlRnVuY3Rpb24sXG4gIGNvbWJpbmUsXG4gIGZhbGxiYWNrLFxuICBmaWx0ZXJBcnJheSxcbiAgZmxhdHRlbkFycmF5LFxuICBnZXRBdEluZGV4LFxuICBtYXAsXG4gIG1hcEFycmF5LFxuICBwaXBlLFxufSBmcm9tICcuLi9mdW5jdGlvbi11dGlscydcbmltcG9ydCB7XG4gIFhtbEVsZW1lbnQsXG4gIGZpbmRDaGlsZEVsZW1lbnQsXG4gIGZpbmRDaGlsZHJlbkVsZW1lbnQsXG4gIGZpbmROZXN0ZWRFbGVtZW50LFxuICBmaW5kTmVzdGVkRWxlbWVudHMsXG4gIGZpbmRQYXJlbnQsXG4gIHJlYWRBdHRyaWJ1dGUsXG4gIHJlYWRUZXh0LFxufSBmcm9tICcuLi94bWwtdXRpbHMnXG5pbXBvcnQgeyBmdWxsTmFtZVRvUGFydHMgfSBmcm9tICcuL3V0aWxzL2luZGl2aWR1YWwtbmFtZSdcbmltcG9ydCB7IGdldEtleXdvcmRUeXBlRnJvbUtleXdvcmRUeXBlQ29kZSB9IGZyb20gJy4vdXRpbHMva2V5d29yZC5tYXBwZXInXG5pbXBvcnQgeyBnZXRSb2xlRnJvbVJvbGVDb2RlIH0gZnJvbSAnLi91dGlscy9yb2xlLm1hcHBlcidcbmltcG9ydCB7IGdldFN0YXR1c0Zyb21TdGF0dXNDb2RlIH0gZnJvbSAnLi91dGlscy9zdGF0dXMubWFwcGVyJ1xuaW1wb3J0IHsgZ2V0VXBkYXRlRnJlcXVlbmN5RnJvbUZyZXF1ZW5jeUNvZGUgfSBmcm9tICcuL3V0aWxzL3VwZGF0ZS1mcmVxdWVuY3kubWFwcGVyJ1xuXG5leHBvcnQgZnVuY3Rpb24gZXh0cmFjdENoYXJhY3RlclN0cmluZygpOiBDaGFpbmFibGVGdW5jdGlvbjxcbiAgWG1sRWxlbWVudCxcbiAgc3RyaW5nXG4+IHtcbiAgcmV0dXJuIHBpcGUoXG4gICAgZmFsbGJhY2soXG4gICAgICBmaW5kQ2hpbGRFbGVtZW50KCdnY286Q2hhcmFjdGVyU3RyaW5nJywgZmFsc2UpLFxuICAgICAgZmluZENoaWxkRWxlbWVudCgnZ214OkFuY2hvcicsIGZhbHNlKVxuICAgICksXG4gICAgcmVhZFRleHQoKVxuICApXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBleHRyYWN0RGF0ZVRpbWUoKTogQ2hhaW5hYmxlRnVuY3Rpb248WG1sRWxlbWVudCwgRGF0ZT4ge1xuICByZXR1cm4gcGlwZShcbiAgICBmYWxsYmFjayhcbiAgICAgIGZpbmRDaGlsZEVsZW1lbnQoJ2djbzpEYXRlVGltZScsIGZhbHNlKSxcbiAgICAgIGZpbmRDaGlsZEVsZW1lbnQoJ2djbzpEYXRlJywgZmFsc2UpXG4gICAgKSxcbiAgICByZWFkVGV4dCgpLFxuICAgIG1hcCgoZGF0ZVN0cikgPT4gKGRhdGVTdHIgPyBuZXcgRGF0ZShkYXRlU3RyKSA6IG51bGwpKVxuICApXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBleHRyYWN0VXJsKCk6IENoYWluYWJsZUZ1bmN0aW9uPFhtbEVsZW1lbnQsIFVSTD4ge1xuICBjb25zdCBnZXRVcmwgPSBwaXBlKGZpbmRDaGlsZEVsZW1lbnQoJ2dtZDpVUkwnLCBmYWxzZSksIHJlYWRUZXh0KCkpXG4gIGNvbnN0IGdldENoYXJhY3RlclN0cmluZyA9IHBpcGUoXG4gICAgZmluZENoaWxkRWxlbWVudCgnZ2NvOkNoYXJhY3RlclN0cmluZycsIGZhbHNlKSxcbiAgICByZWFkVGV4dCgpXG4gIClcbiAgY29uc3QgZ2V0QW5jaG9yID0gcGlwZShcbiAgICBmaW5kQ2hpbGRFbGVtZW50KCdnbXg6QW5jaG9yJywgZmFsc2UpLFxuICAgIHJlYWRBdHRyaWJ1dGUoJ3hsaW5rOmhyZWYnKVxuICApXG4gIHJldHVybiBwaXBlKFxuICAgIGZhbGxiYWNrKGdldFVybCwgZ2V0QW5jaG9yLCBnZXRDaGFyYWN0ZXJTdHJpbmcpLFxuICAgIG1hcCgodXJsU3RyKSA9PiB7XG4gICAgICB0cnkge1xuICAgICAgICByZXR1cm4gbmV3IFVSTCh1cmxTdHIpXG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIHJldHVybiBudWxsXG4gICAgICB9XG4gICAgfSlcbiAgKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZXh0cmFjdE1hbmRhdG9yeVVybCgpIHtcbiAgcmV0dXJuIGZhbGxiYWNrKGV4dHJhY3RVcmwoKSwgKCkgPT4gbmV3IFVSTCgnaHR0cDovL21pc3NpbmcnKSlcbn1cblxuLy8gZnJvbSBnbWQ6cm9sZVxuZXhwb3J0IGZ1bmN0aW9uIGV4dHJhY3RSb2xlKCk6IENoYWluYWJsZUZ1bmN0aW9uPFhtbEVsZW1lbnQsIFJvbGU+IHtcbiAgcmV0dXJuIHBpcGUoXG4gICAgZmluZENoaWxkRWxlbWVudCgnZ21kOkNJX1JvbGVDb2RlJyksXG4gICAgcmVhZEF0dHJpYnV0ZSgnY29kZUxpc3RWYWx1ZScpLFxuICAgIG1hcChnZXRSb2xlRnJvbVJvbGVDb2RlKVxuICApXG59XG5cbi8vIGZyb20gZ21kOkNJX1Jlc3BvbnNpYmxlUGFydHlcbmV4cG9ydCBmdW5jdGlvbiBleHRyYWN0T3JnYW5pemF0aW9uKCk6IENoYWluYWJsZUZ1bmN0aW9uPFxuICBYbWxFbGVtZW50LFxuICBPcmdhbml6YXRpb25cbj4ge1xuICBjb25zdCBnZXRVcmwgPSBwaXBlKFxuICAgIGZpbmROZXN0ZWRFbGVtZW50cyhcbiAgICAgICdnbWQ6Y29udGFjdEluZm8nLFxuICAgICAgJ2dtZDpDSV9Db250YWN0JyxcbiAgICAgICdnbWQ6b25saW5lUmVzb3VyY2UnLFxuICAgICAgJ2dtZDpDSV9PbmxpbmVSZXNvdXJjZScsXG4gICAgICAnZ21kOmxpbmthZ2UnXG4gICAgKSxcbiAgICBnZXRBdEluZGV4KDApLFxuICAgIGV4dHJhY3RVcmwoKVxuICApXG4gIHJldHVybiBwaXBlKFxuICAgIGNvbWJpbmUoXG4gICAgICBwaXBlKFxuICAgICAgICBmaW5kQ2hpbGRFbGVtZW50KCdnbWQ6b3JnYW5pc2F0aW9uTmFtZScsIGZhbHNlKSxcbiAgICAgICAgZXh0cmFjdENoYXJhY3RlclN0cmluZygpXG4gICAgICApLFxuICAgICAgZ2V0VXJsXG4gICAgKSxcbiAgICBtYXAoKFtuYW1lLCB3ZWJzaXRlXSkgPT4gKHtcbiAgICAgIG5hbWUsXG4gICAgICAuLi4od2Vic2l0ZSAmJiB7IHdlYnNpdGUgfSksXG4gICAgfSkpXG4gIClcbn1cblxuLy8gZnJvbSBnbWQ6Q0lfUmVzcG9uc2libGVQYXJ0eVxuZXhwb3J0IGZ1bmN0aW9uIGV4dHJhY3RJbmRpdmlkdWFsKCk6IENoYWluYWJsZUZ1bmN0aW9uPFhtbEVsZW1lbnQsIEluZGl2aWR1YWw+IHtcbiAgY29uc3QgZ2V0Um9sZSA9IHBpcGUoZmluZENoaWxkRWxlbWVudCgnZ21kOnJvbGUnKSwgZXh0cmFjdFJvbGUoKSlcbiAgY29uc3QgZ2V0UG9zaXRpb24gPSBwaXBlKFxuICAgIGZpbmRDaGlsZEVsZW1lbnQoJ2dtZDpwb3NpdGlvbk5hbWUnKSxcbiAgICBleHRyYWN0Q2hhcmFjdGVyU3RyaW5nKClcbiAgKVxuICBjb25zdCBnZXROYW1lUGFydHMgPSBwaXBlKFxuICAgIGZpbmRDaGlsZEVsZW1lbnQoJ2dtZDppbmRpdmlkdWFsTmFtZScpLFxuICAgIGV4dHJhY3RDaGFyYWN0ZXJTdHJpbmcoKSxcbiAgICBtYXAoKGZ1bGxOYW1lKSA9PiB7XG4gICAgICBpZiAoIWZ1bGxOYW1lKSByZXR1cm4gW11cbiAgICAgIHJldHVybiBmdWxsTmFtZVRvUGFydHMoZnVsbE5hbWUpXG4gICAgfSlcbiAgKVxuICBjb25zdCBnZXRPcmdhbml6YXRpb24gPSBleHRyYWN0T3JnYW5pemF0aW9uKClcbiAgY29uc3QgZ2V0Q29udGFjdFJvb3QgPSBmaW5kTmVzdGVkRWxlbWVudCgnZ21kOmNvbnRhY3RJbmZvJywgJ2dtZDpDSV9Db250YWN0JylcbiAgY29uc3QgZ2V0RW1haWwgPSBwaXBlKFxuICAgIGdldENvbnRhY3RSb290LFxuICAgIGZpbmRDaGlsZEVsZW1lbnQoJ2dtZDplbGVjdHJvbmljTWFpbEFkZHJlc3MnKSxcbiAgICBleHRyYWN0Q2hhcmFjdGVyU3RyaW5nKCksXG4gICAgbWFwKChlbWFpbCkgPT4gKGVtYWlsID09PSBudWxsID8gJ21pc3NpbmdAbWlzc2luZy5jb20nIDogZW1haWwpKVxuICApXG4gIGNvbnN0IGdldEFkZHJlc3MgPSBwaXBlKFxuICAgIGdldENvbnRhY3RSb290LFxuICAgIGZpbmROZXN0ZWRFbGVtZW50KCdnbWQ6YWRkcmVzcycsICdnbWQ6Q0lfQWRkcmVzcycpLFxuICAgIGNvbWJpbmUoXG4gICAgICBwaXBlKFxuICAgICAgICBmaW5kQ2hpbGRFbGVtZW50KCdnbWQ6ZGVsaXZlcnlQb2ludCcsIGZhbHNlKSxcbiAgICAgICAgZXh0cmFjdENoYXJhY3RlclN0cmluZygpXG4gICAgICApLFxuICAgICAgcGlwZShmaW5kQ2hpbGRFbGVtZW50KCdnbWQ6Y2l0eScsIGZhbHNlKSwgZXh0cmFjdENoYXJhY3RlclN0cmluZygpKSxcbiAgICAgIHBpcGUoZmluZENoaWxkRWxlbWVudCgnZ21kOnBvc3RhbENvZGUnLCBmYWxzZSksIGV4dHJhY3RDaGFyYWN0ZXJTdHJpbmcoKSksXG4gICAgICBwaXBlKGZpbmRDaGlsZEVsZW1lbnQoJ2dtZDpjb3VudHJ5JywgZmFsc2UpLCBleHRyYWN0Q2hhcmFjdGVyU3RyaW5nKCkpXG4gICAgKSxcbiAgICBtYXAoKHBhcnRzKSA9PiBwYXJ0cy5maWx0ZXIoKHApID0+ICEhcCkuam9pbignLCAnKSlcbiAgKVxuICBjb25zdCBnZXRQaG9uZSA9IHBpcGUoXG4gICAgZ2V0Q29udGFjdFJvb3QsXG4gICAgZmluZE5lc3RlZEVsZW1lbnQoJ2dtZDpwaG9uZScsICdnbWQ6Q0lfVGVsZXBob25lJywgJ2dtZDp2b2ljZScpLFxuICAgIGV4dHJhY3RDaGFyYWN0ZXJTdHJpbmcoKVxuICApXG4gIHJldHVybiBwaXBlKFxuICAgIGNvbWJpbmUoXG4gICAgICBnZXRSb2xlLFxuICAgICAgZ2V0UG9zaXRpb24sXG4gICAgICBnZXROYW1lUGFydHMsXG4gICAgICBnZXRPcmdhbml6YXRpb24sXG4gICAgICBnZXRFbWFpbCxcbiAgICAgIGdldEFkZHJlc3MsXG4gICAgICBnZXRQaG9uZVxuICAgICksXG4gICAgbWFwKFxuICAgICAgKFtcbiAgICAgICAgcm9sZSxcbiAgICAgICAgcG9zaXRpb24sXG4gICAgICAgIFtmaXJzdE5hbWUsIGxhc3ROYW1lXSxcbiAgICAgICAgb3JnYW5pemF0aW9uLFxuICAgICAgICBlbWFpbCxcbiAgICAgICAgYWRkcmVzcyxcbiAgICAgICAgcGhvbmUsXG4gICAgICBdKSA9PiAoe1xuICAgICAgICBlbWFpbCxcbiAgICAgICAgcm9sZSxcbiAgICAgICAgb3JnYW5pemF0aW9uLFxuICAgICAgICAuLi4ocG9zaXRpb24gJiYgeyBwb3NpdGlvbiB9KSxcbiAgICAgICAgLi4uKGZpcnN0TmFtZSAmJiB7IGZpcnN0TmFtZSB9KSxcbiAgICAgICAgLi4uKGxhc3ROYW1lICYmIHsgbGFzdE5hbWUgfSksXG4gICAgICAgIC4uLihhZGRyZXNzICYmIHsgYWRkcmVzcyB9KSxcbiAgICAgICAgLi4uKHBob25lICYmIHsgcGhvbmUgfSksXG4gICAgICB9KVxuICAgIClcbiAgKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZXh0cmFjdFN0YXR1cygpOiBDaGFpbmFibGVGdW5jdGlvbjxYbWxFbGVtZW50LCBSZWNvcmRTdGF0dXM+IHtcbiAgcmV0dXJuIHBpcGUoXG4gICAgZmluZENoaWxkRWxlbWVudCgnZ21kOk1EX1Byb2dyZXNzQ29kZScpLFxuICAgIHJlYWRBdHRyaWJ1dGUoJ2NvZGVMaXN0VmFsdWUnKSxcbiAgICBtYXAoZ2V0U3RhdHVzRnJvbVN0YXR1c0NvZGUpXG4gIClcbn1cblxuLy8gZnJvbSBnbWQ6cmVzb3VyY2VDb25zdHJhaW50c1xuZXhwb3J0IGZ1bmN0aW9uIGV4dHJhY3RMZWdhbENvbnN0cmFpbnRzKCk6IENoYWluYWJsZUZ1bmN0aW9uPFxuICBYbWxFbGVtZW50LFxuICBBcnJheTxDb25zdHJhaW50PlxuPiB7XG4gIHJldHVybiBwaXBlKFxuICAgIGZpbmRDaGlsZHJlbkVsZW1lbnQoJ2dtZDpNRF9MZWdhbENvbnN0cmFpbnRzJywgZmFsc2UpLFxuICAgIGZpbHRlckFycmF5KFxuICAgICAgcGlwZShcbiAgICAgICAgZmluZENoaWxkcmVuRWxlbWVudCgnZ21kOk1EX1Jlc3RyaWN0aW9uQ29kZScpLFxuICAgICAgICBtYXBBcnJheShyZWFkQXR0cmlidXRlKCdjb2RlTGlzdFZhbHVlJykpLFxuICAgICAgICBtYXAoKHZhbHVlcykgPT4gdmFsdWVzLmluZGV4T2YoJ2xpY2Vuc2UnKSA9PT0gLTEpXG4gICAgICApXG4gICAgKSxcbiAgICBtYXBBcnJheShcbiAgICAgIGNvbWJpbmUoXG4gICAgICAgIGZpbmRDaGlsZHJlbkVsZW1lbnQoJ2dtZDpvdGhlckNvbnN0cmFpbnRzJyksXG4gICAgICAgIGZpbmRDaGlsZHJlbkVsZW1lbnQoJ2dtZDp1c2VMaW1pdGF0aW9uJylcbiAgICAgIClcbiAgICApLFxuICAgIGZsYXR0ZW5BcnJheSgpLFxuICAgIGZsYXR0ZW5BcnJheSgpLFxuICAgIG1hcEFycmF5KGNvbWJpbmUoZXh0cmFjdENoYXJhY3RlclN0cmluZygpLCBleHRyYWN0VXJsKCkpKSxcbiAgICBtYXBBcnJheSgoW3RleHQsIHVybF0pID0+ICh7XG4gICAgICAuLi4odXJsICYmIHsgdXJsIH0pLFxuICAgICAgdGV4dCxcbiAgICB9KSlcbiAgKVxufVxuXG4vLyBmcm9tIGdtZDpyZXNvdXJjZUNvbnN0cmFpbnRzXG5leHBvcnQgZnVuY3Rpb24gZXh0cmFjdFNlY3VyaXR5Q29uc3RyYWludHMoKTogQ2hhaW5hYmxlRnVuY3Rpb248XG4gIFhtbEVsZW1lbnQsXG4gIEFycmF5PENvbnN0cmFpbnQ+XG4+IHtcbiAgcmV0dXJuIHBpcGUoXG4gICAgZmluZE5lc3RlZEVsZW1lbnRzKCdnbWQ6TURfU2VjdXJpdHlDb25zdHJhaW50cycsICdnbWQ6dXNlTGltaXRhdGlvbicpLFxuICAgIGZsYXR0ZW5BcnJheSgpLFxuICAgIG1hcEFycmF5KGNvbWJpbmUoZXh0cmFjdENoYXJhY3RlclN0cmluZygpLCBleHRyYWN0VXJsKCkpKSxcbiAgICBtYXBBcnJheSgoW3RleHQsIHVybF0pID0+ICh7XG4gICAgICAuLi4odXJsICYmIHsgdXJsIH0pLFxuICAgICAgdGV4dCxcbiAgICB9KSlcbiAgKVxufVxuXG4vLyBmcm9tIGdtZDpyZXNvdXJjZUNvbnN0cmFpbnRzXG5leHBvcnQgZnVuY3Rpb24gZXh0cmFjdE90aGVyQ29uc3RyYWludHMoKTogQ2hhaW5hYmxlRnVuY3Rpb248XG4gIFhtbEVsZW1lbnQsXG4gIEFycmF5PENvbnN0cmFpbnQ+XG4+IHtcbiAgcmV0dXJuIHBpcGUoXG4gICAgZmluZE5lc3RlZEVsZW1lbnRzKCdnbWQ6TURfQ29uc3RyYWludHMnLCAnZ21kOnVzZUxpbWl0YXRpb24nKSxcbiAgICBmbGF0dGVuQXJyYXkoKSxcbiAgICBtYXBBcnJheShjb21iaW5lKGV4dHJhY3RDaGFyYWN0ZXJTdHJpbmcoKSwgZXh0cmFjdFVybCgpKSksXG4gICAgbWFwQXJyYXkoKFt0ZXh0LCB1cmxdKSA9PiAoe1xuICAgICAgLi4uKHVybCAmJiB7IHVybCB9KSxcbiAgICAgIHRleHQsXG4gICAgfSkpXG4gIClcbn1cblxuLy8gZnJvbSBnbWQ6cmVzb3VyY2VDb25zdHJhaW50c1xuZXhwb3J0IGZ1bmN0aW9uIGV4dHJhY3RMaWNlbnNlcygpOiBDaGFpbmFibGVGdW5jdGlvbjxcbiAgWG1sRWxlbWVudCxcbiAgQXJyYXk8Q29uc3RyYWludD5cbj4ge1xuICByZXR1cm4gcGlwZShcbiAgICBmaW5kQ2hpbGRyZW5FbGVtZW50KCdnbWQ6TURfTGVnYWxDb25zdHJhaW50cycsIGZhbHNlKSxcbiAgICBmaWx0ZXJBcnJheShcbiAgICAgIHBpcGUoXG4gICAgICAgIGZpbmRDaGlsZHJlbkVsZW1lbnQoJ2dtZDpNRF9SZXN0cmljdGlvbkNvZGUnKSxcbiAgICAgICAgbWFwQXJyYXkocmVhZEF0dHJpYnV0ZSgnY29kZUxpc3RWYWx1ZScpKSxcbiAgICAgICAgbWFwKCh2YWx1ZXMpID0+IHZhbHVlcy5pbmRleE9mKCdsaWNlbnNlJykgPiAtMSlcbiAgICAgIClcbiAgICApLFxuICAgIG1hcEFycmF5KFxuICAgICAgY29tYmluZShcbiAgICAgICAgZmluZENoaWxkcmVuRWxlbWVudCgnZ21kOm90aGVyQ29uc3RyYWludHMnKSxcbiAgICAgICAgZmluZENoaWxkcmVuRWxlbWVudCgnZ21kOnVzZUxpbWl0YXRpb24nKVxuICAgICAgKVxuICAgICksXG4gICAgZmxhdHRlbkFycmF5KCksXG4gICAgZmxhdHRlbkFycmF5KCksXG4gICAgbWFwQXJyYXkoY29tYmluZShleHRyYWN0Q2hhcmFjdGVyU3RyaW5nKCksIGV4dHJhY3RVcmwoKSkpLFxuICAgIG1hcEFycmF5KChbdGV4dCwgdXJsXSkgPT4gKHtcbiAgICAgIC4uLih1cmwgJiYgeyB1cmwgfSksXG4gICAgICB0ZXh0LFxuICAgIH0pKVxuICApXG59XG5cbmNvbnN0IGdldE1pbWVUeXBlID0gcGlwZShcbiAgZmluZFBhcmVudCgnZ21kOk1EX0Rpc3RyaWJ1dGlvbicpLFxuICBmaW5kTmVzdGVkRWxlbWVudCgnZ21kOmRpc3RyaWJ1dGlvbkZvcm1hdCcsICdnbWQ6TURfRm9ybWF0JywgJ2dtZDpuYW1lJyksXG4gIGV4dHJhY3RDaGFyYWN0ZXJTdHJpbmcoKSxcbiAgbWFwKG1hdGNoTWltZVR5cGUpXG4pXG5cbi8qKlxuICogRXh0cmFjdCBkaXN0cmlidXRpb25zIGZyb20gYSBNRF9EaXN0cmlidXRpb24gZWxlbWVudFxuICogQHBhcmFtIGdldE1pbWVUeXBlRm4gVGhpcyBmdW5jdGlvbiBzdGFydHMgZnJvbSBhIGdtZDp0cmFuc2Zlck9wdGlvbnMgZWxlbWVudFxuICovXG5leHBvcnQgZnVuY3Rpb24gZXh0cmFjdERhdGFzZXREaXN0cmlidXRpb25zKFxuICBnZXRNaW1lVHlwZUZuOiBDaGFpbmFibGVGdW5jdGlvbjxYbWxFbGVtZW50LCBzdHJpbmc+XG4pOiBDaGFpbmFibGVGdW5jdGlvbjxYbWxFbGVtZW50LCBEYXRhc2V0RGlzdHJpYnV0aW9uW10+IHtcbiAgY29uc3QgZ2V0VXJsID0gcGlwZShmaW5kQ2hpbGRFbGVtZW50KCdnbWQ6bGlua2FnZScpLCBleHRyYWN0TWFuZGF0b3J5VXJsKCkpXG4gIGNvbnN0IGdldFByb3RvY29sU3RyID0gcGlwZShcbiAgICBmaW5kQ2hpbGRFbGVtZW50KCdnbWQ6cHJvdG9jb2wnKSxcbiAgICBleHRyYWN0Q2hhcmFjdGVyU3RyaW5nKClcbiAgKVxuICBjb25zdCBnZXRQcm90b2NvbCA9IHBpcGUoZ2V0UHJvdG9jb2xTdHIsIG1hcChtYXRjaFByb3RvY29sKSlcbiAgY29uc3QgZ2V0T25saW5lRnVuY3Rpb24gPSBwaXBlKFxuICAgIGZpbmROZXN0ZWRFbGVtZW50KCdnbWQ6ZnVuY3Rpb24nLCAnZ21kOkNJX09uTGluZUZ1bmN0aW9uQ29kZScpLFxuICAgIHJlYWRBdHRyaWJ1dGUoJ2NvZGVMaXN0VmFsdWUnKVxuICApXG4gIGNvbnN0IGdldElzU2VydmljZSA9IHBpcGUoXG4gICAgZ2V0UHJvdG9jb2wsXG4gICAgbWFwKChwcm90b2NvbCkgPT4gcHJvdG9jb2wgIT09ICdvdGhlcicpXG4gIClcbiAgY29uc3QgZ2V0SXNEb3dubG9hZCA9IHBpcGUoXG4gICAgY29tYmluZShnZXRJc1NlcnZpY2UsIGdldE9ubGluZUZ1bmN0aW9uLCBnZXRQcm90b2NvbFN0ciksXG4gICAgbWFwKFxuICAgICAgKFtpc1NlcnZpY2UsIG9ubGluZUZ1bmN0aW9uLCBwcm90b2NvbFN0cl0pID0+XG4gICAgICAgICghaXNTZXJ2aWNlICYmIG9ubGluZUZ1bmN0aW9uID09PSAnZG93bmxvYWQnKSB8fFxuICAgICAgICAvZG93bmxvYWQvaS50ZXN0KHByb3RvY29sU3RyKVxuICAgIClcbiAgKVxuICBjb25zdCBnZXROYW1lID0gcGlwZShmaW5kQ2hpbGRFbGVtZW50KCdnbWQ6bmFtZScpLCBleHRyYWN0Q2hhcmFjdGVyU3RyaW5nKCkpXG4gIGNvbnN0IGdldERlc2NyaXB0aW9uID0gcGlwZShcbiAgICBmaW5kQ2hpbGRFbGVtZW50KCdnbWQ6ZGVzY3JpcHRpb24nKSxcbiAgICBleHRyYWN0Q2hhcmFjdGVyU3RyaW5nKClcbiAgKVxuICByZXR1cm4gcGlwZShcbiAgICBmaW5kTmVzdGVkRWxlbWVudHMoXG4gICAgICAnZ21kOnRyYW5zZmVyT3B0aW9ucycsXG4gICAgICAnZ21kOk1EX0RpZ2l0YWxUcmFuc2Zlck9wdGlvbnMnLFxuICAgICAgJ2dtZDpvbkxpbmUnLFxuICAgICAgJ2dtZDpDSV9PbmxpbmVSZXNvdXJjZSdcbiAgICApLFxuICAgIG1hcEFycmF5KFxuICAgICAgY29tYmluZShcbiAgICAgICAgZ2V0SXNTZXJ2aWNlLFxuICAgICAgICBnZXRJc0Rvd25sb2FkLFxuICAgICAgICBnZXRQcm90b2NvbCxcbiAgICAgICAgZ2V0VXJsLFxuICAgICAgICBnZXROYW1lLFxuICAgICAgICBnZXREZXNjcmlwdGlvbixcbiAgICAgICAgZ2V0TWltZVR5cGVGblxuICAgICAgKVxuICAgICksXG4gICAgbWFwQXJyYXkoXG4gICAgICAoW2lzU2VydmljZSwgaXNEb3dubG9hZCwgcHJvdG9jb2wsIHVybCwgbmFtZSwgZGVzY3JpcHRpb24sIG1pbWVUeXBlXSkgPT4ge1xuICAgICAgICBpZiAoaXNTZXJ2aWNlKSB7XG4gICAgICAgICAgY29uc3QgaGFzSWRlbnRpZmllciA9IHByb3RvY29sID09PSAnd21zJyB8fCBwcm90b2NvbCA9PT0gJ3dmcydcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdHlwZTogJ3NlcnZpY2UnLFxuICAgICAgICAgICAgdXJsOiB1cmwsXG4gICAgICAgICAgICBhY2Nlc3NTZXJ2aWNlUHJvdG9jb2w6IHByb3RvY29sLFxuICAgICAgICAgICAgLi4uKG5hbWUgJiYgaGFzSWRlbnRpZmllciAmJiB7IGlkZW50aWZpZXJJblNlcnZpY2U6IG5hbWUgfSksXG4gICAgICAgICAgICAuLi4obmFtZSAmJiB7IG5hbWUgfSksXG4gICAgICAgICAgICAuLi4oZGVzY3JpcHRpb24gJiYgeyBkZXNjcmlwdGlvbiB9KSxcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAoaXNEb3dubG9hZCkge1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB0eXBlOiAnZG93bmxvYWQnLFxuICAgICAgICAgICAgdXJsOiB1cmwsXG4gICAgICAgICAgICAuLi4obmFtZSAmJiB7IG5hbWUgfSksXG4gICAgICAgICAgICAuLi4oZGVzY3JpcHRpb24gJiYgeyBkZXNjcmlwdGlvbiB9KSxcbiAgICAgICAgICAgIC4uLihtaW1lVHlwZSAmJiB7IG1pbWVUeXBlIH0pLFxuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdHlwZTogJ2xpbmsnLFxuICAgICAgICAgICAgdXJsOiB1cmwsXG4gICAgICAgICAgICAuLi4obmFtZSAmJiB7IG5hbWUgfSksXG4gICAgICAgICAgICAuLi4oZGVzY3JpcHRpb24gJiYgeyBkZXNjcmlwdGlvbiB9KSxcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICApXG4gIClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFVwZGF0ZUZyZXF1ZW5jeUZyb21DdXN0b21QZXJpb2QoXG4gIGlzb1BlcmlvZDogc3RyaW5nXG4pOiBVcGRhdGVGcmVxdWVuY3lDdXN0b20ge1xuICBpZiAoIWlzb1BlcmlvZCkgcmV0dXJuIG51bGxcbiAgY29uc3QgbWF0Y2hlcyA9IGlzb1BlcmlvZC5tYXRjaChcbiAgICAvXi0/UCg/OihbMC05XSspWSk/KD86KFswLTldKylNKT8oPzooWzAtOV0rKUQpP1Q/KD86KFswLTldKylIKT8vXG4gIClcbiAgaWYgKCFtYXRjaGVzKSByZXR1cm4gbnVsbFxuICBjb25zdCB5ZWFycyA9IHBhcnNlSW50KG1hdGNoZXNbMV0sIDEwKSB8fCAwXG4gIGNvbnN0IG1vbnRocyA9IHBhcnNlSW50KG1hdGNoZXNbMl0sIDEwKSB8fCAwXG4gIGNvbnN0IGRheXMgPSBwYXJzZUludChtYXRjaGVzWzNdLCAxMCkgfHwgMFxuICBjb25zdCBob3VycyA9IHBhcnNlSW50KG1hdGNoZXNbNF0sIDEwKSB8fCAwXG4gIGlmICh5ZWFycykge1xuICAgIHJldHVybiB7XG4gICAgICBwZXI6ICd5ZWFyJyxcbiAgICAgIHVwZGF0ZWRUaW1lczogMSxcbiAgICB9XG4gIH0gZWxzZSBpZiAobW9udGhzID09PSAxKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHBlcjogJ21vbnRoJyxcbiAgICAgIHVwZGF0ZWRUaW1lczogMSxcbiAgICB9XG4gIH0gZWxzZSBpZiAobW9udGhzKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHBlcjogJ3llYXInLFxuICAgICAgdXBkYXRlZFRpbWVzOiBNYXRoLnJvdW5kKDEyIC8gbW9udGhzKSxcbiAgICB9XG4gIH0gZWxzZSBpZiAoZGF5cyA9PT0gMSkge1xuICAgIHJldHVybiB7XG4gICAgICBwZXI6ICdkYXknLFxuICAgICAgdXBkYXRlZFRpbWVzOiAxLFxuICAgIH1cbiAgfSBlbHNlIGlmIChkYXlzIDw9IDcpIHtcbiAgICByZXR1cm4ge1xuICAgICAgcGVyOiAnd2VlaycsXG4gICAgICB1cGRhdGVkVGltZXM6IE1hdGgucm91bmQoNyAvIGRheXMgLSAwLjAwMDEpLCAvLyB0aGlzIGlzIHRvIG1ha2Ugc3VyZSB0aGF0ICdldmVyeSAyIGRheXMnID0gJzMgdGltZXMgcGVyIHdlZWsnXG4gICAgfVxuICB9IGVsc2UgaWYgKGRheXMpIHtcbiAgICByZXR1cm4ge1xuICAgICAgcGVyOiAnbW9udGgnLFxuICAgICAgdXBkYXRlZFRpbWVzOiBNYXRoLnJvdW5kKDMwIC8gZGF5cyksXG4gICAgfVxuICB9IGVsc2UgaWYgKGhvdXJzKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHBlcjogJ2RheScsXG4gICAgICB1cGRhdGVkVGltZXM6IE1hdGgucm91bmQoMjQgLyBkYXlzKSxcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG51bGxcbn1cblxuLy8gZnJvbSBnbWQ6TURfTWFpbnRlbmFuY2VJbmZvcm1hdGlvblxuZXhwb3J0IGZ1bmN0aW9uIGV4dHJhY3RVcGRhdGVGcmVxdWVuY3koKTogQ2hhaW5hYmxlRnVuY3Rpb248XG4gIFhtbEVsZW1lbnQsXG4gIFVwZGF0ZUZyZXF1ZW5jeVxuPiB7XG4gIHJldHVybiBmYWxsYmFjayhcbiAgICBwaXBlKFxuICAgICAgZmluZENoaWxkRWxlbWVudCgnZ21kOk1EX01haW50ZW5hbmNlRnJlcXVlbmN5Q29kZScpLFxuICAgICAgcmVhZEF0dHJpYnV0ZSgnY29kZUxpc3RWYWx1ZScpLFxuICAgICAgbWFwKGdldFVwZGF0ZUZyZXF1ZW5jeUZyb21GcmVxdWVuY3lDb2RlKVxuICAgICksXG4gICAgcGlwZShcbiAgICAgIGZpbmROZXN0ZWRFbGVtZW50KFxuICAgICAgICAnZ21kOnVzZXJEZWZpbmVkTWFpbnRlbmFuY2VGcmVxdWVuY3knLFxuICAgICAgICAnZ3RzOlRNX1BlcmlvZER1cmF0aW9uJ1xuICAgICAgKSxcbiAgICAgIHJlYWRUZXh0KCksXG4gICAgICBtYXAoZ2V0VXBkYXRlRnJlcXVlbmN5RnJvbUN1c3RvbVBlcmlvZClcbiAgICApLFxuICAgIG1hcCgoKSA9PiAndW5rbm93bicpXG4gIClcbn1cblxuLyoqXG4gKiBMb29rcyBmb3Igc3J2OlNWX1NlcnZpY2VJZGVudGlmaWNhdGlvbiBvciBnbWQ6TURfRGF0YUlkZW50aWZpY2F0aW9uIGVsZW1lbnRcbiAqIFdpbGwgZmluZCB0aGUgZmlyc3Qgb25lIHRoYXQgZXhpc3RzLCBub3QgcmVhZGluZyB0aGUgdHlwZSBvZiB0aGUgcmVjb3JkXG4gKiAodGhpcyBhbGxvd3MgdXNpbmcgdGhpcyBmdW5jdGlvbiBpbiBvdGhlciBzaW1pbGFyIHNjaGVtYXMpXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBmaW5kSWRlbnRpZmljYXRpb24oKSB7XG4gIHJldHVybiBwaXBlKFxuICAgIGZpbmRDaGlsZEVsZW1lbnQoJ2dtZDppZGVudGlmaWNhdGlvbkluZm8nLCBmYWxzZSksXG4gICAgY29tYmluZShcbiAgICAgIGZpbmRDaGlsZEVsZW1lbnQoJ2dtZDpNRF9EYXRhSWRlbnRpZmljYXRpb24nLCBmYWxzZSksXG4gICAgICBmaW5kQ2hpbGRFbGVtZW50KCdzcnY6U1ZfU2VydmljZUlkZW50aWZpY2F0aW9uJywgZmFsc2UpXG4gICAgKSxcbiAgICBmaWx0ZXJBcnJheSgoZWwpID0+IGVsICE9PSBudWxsKSxcbiAgICBnZXRBdEluZGV4KDApXG4gIClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGV4dHJhY3RJZGVudGlmaWNhdGlvbkRhdGUoXG4gIHR5cGU6ICdjcmVhdGlvbicgfCAncmV2aXNpb24nIHwgJ3B1YmxpY2F0aW9uJ1xuKSB7XG4gIHJldHVybiBwaXBlKFxuICAgIGZpbmRJZGVudGlmaWNhdGlvbigpLFxuICAgIGZpbmROZXN0ZWRFbGVtZW50cygnZ21kOmNpdGF0aW9uJywgJ2dtZDpDSV9DaXRhdGlvbicsICdnbWQ6ZGF0ZScpLFxuICAgIGZpbHRlckFycmF5KFxuICAgICAgcGlwZShcbiAgICAgICAgZmluZE5lc3RlZEVsZW1lbnRzKFxuICAgICAgICAgICdnbWQ6Q0lfRGF0ZScsXG4gICAgICAgICAgJ2dtZDpkYXRlVHlwZScsXG4gICAgICAgICAgJ2dtZDpDSV9EYXRlVHlwZUNvZGUnXG4gICAgICAgICksXG4gICAgICAgIGdldEF0SW5kZXgoMCksXG4gICAgICAgIHJlYWRBdHRyaWJ1dGUoJ2NvZGVMaXN0VmFsdWUnKSxcbiAgICAgICAgbWFwKCh2YWx1ZSkgPT4gdmFsdWUgPT09IHR5cGUpXG4gICAgICApXG4gICAgKSxcbiAgICBnZXRBdEluZGV4KDApLFxuICAgIGZpbmROZXN0ZWRFbGVtZW50cygnZ21kOkNJX0RhdGUnLCAnZ21kOmRhdGUnKSxcbiAgICBnZXRBdEluZGV4KDApLFxuICAgIGV4dHJhY3REYXRlVGltZSgpXG4gIClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFNwYXRpYWxSZXByZXNlbnRhdGlvbkZyb21Db2RlKFxuICBzcGF0aWFsUmVwcmVzZW50YXRpb25Db2RlOiBzdHJpbmdcbik6IFNwYXRpYWxSZXByZXNlbnRhdGlvblR5cGUgfCBudWxsIHtcbiAgc3dpdGNoIChzcGF0aWFsUmVwcmVzZW50YXRpb25Db2RlKSB7XG4gICAgY2FzZSAnZ3JpZCc6XG4gICAgY2FzZSAndmVjdG9yJzpcbiAgICBjYXNlICd0aW4nOlxuICAgIGNhc2UgJ3RhYmxlJzpcbiAgICBjYXNlICdwb2ludCc6XG4gICAgICByZXR1cm4gc3BhdGlhbFJlcHJlc2VudGF0aW9uQ29kZVxuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gbnVsbFxuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZWFkVW5pcXVlSWRlbnRpZmllcihyb290RWw6IFhtbEVsZW1lbnQpOiBzdHJpbmcge1xuICByZXR1cm4gcGlwZShcbiAgICBmaW5kQ2hpbGRFbGVtZW50KCdnbWQ6ZmlsZUlkZW50aWZpZXInLCBmYWxzZSksXG4gICAgZXh0cmFjdENoYXJhY3RlclN0cmluZygpXG4gICkocm9vdEVsKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVhZEtpbmQocm9vdEVsOiBYbWxFbGVtZW50KTogUmVjb3JkS2luZCB7XG4gIHJldHVybiBwaXBlKFxuICAgIGZpbmROZXN0ZWRFbGVtZW50KCdnbWQ6aGllcmFyY2h5TGV2ZWwnLCAnZ21kOk1EX1Njb3BlQ29kZScpLFxuICAgIHJlYWRBdHRyaWJ1dGUoJ2NvZGVMaXN0VmFsdWUnKSxcbiAgICBtYXAoXG4gICAgICAoc2NvcGVDb2RlKTogUmVjb3JkS2luZCA9PlxuICAgICAgICBzY29wZUNvZGUgPT09ICdzZXJ2aWNlJyA/ICdzZXJ2aWNlJyA6ICdkYXRhc2V0J1xuICAgIClcbiAgKShyb290RWwpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZWFkT3duZXJPcmdhbml6YXRpb24ocm9vdEVsOiBYbWxFbGVtZW50KTogT3JnYW5pemF0aW9uIHtcbiAgcmV0dXJuIHBpcGUoXG4gICAgZmluZE5lc3RlZEVsZW1lbnQoJ2dtZDpjb250YWN0JywgJ2dtZDpDSV9SZXNwb25zaWJsZVBhcnR5JyksXG4gICAgZXh0cmFjdE9yZ2FuaXphdGlvbigpXG4gICkocm9vdEVsKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVhZFJlc291cmNlVXBkYXRlZChyb290RWw6IFhtbEVsZW1lbnQpOiBEYXRlIHtcbiAgcmV0dXJuIGV4dHJhY3RJZGVudGlmaWNhdGlvbkRhdGUoJ3JldmlzaW9uJykocm9vdEVsKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVhZFJlc291cmNlQ3JlYXRlZChyb290RWw6IFhtbEVsZW1lbnQpOiBEYXRlIHtcbiAgcmV0dXJuIGV4dHJhY3RJZGVudGlmaWNhdGlvbkRhdGUoJ2NyZWF0aW9uJykocm9vdEVsKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVhZFJlc291cmNlUHVibGlzaGVkKHJvb3RFbDogWG1sRWxlbWVudCk6IERhdGUge1xuICByZXR1cm4gZXh0cmFjdElkZW50aWZpY2F0aW9uRGF0ZSgncHVibGljYXRpb24nKShyb290RWwpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZWFkUmVjb3JkVXBkYXRlZChyb290RWw6IFhtbEVsZW1lbnQpOiBEYXRlIHtcbiAgcmV0dXJuIHBpcGUoZmluZENoaWxkRWxlbWVudCgnZ21kOmRhdGVTdGFtcCcpLCBleHRyYWN0RGF0ZVRpbWUoKSkocm9vdEVsKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVhZFRpdGxlKHJvb3RFbDogWG1sRWxlbWVudCk6IHN0cmluZyB7XG4gIHJldHVybiBwaXBlKFxuICAgIGZpbmRJZGVudGlmaWNhdGlvbigpLFxuICAgIGZpbmROZXN0ZWRFbGVtZW50KCdnbWQ6Y2l0YXRpb24nLCAnZ21kOkNJX0NpdGF0aW9uJywgJ2dtZDp0aXRsZScpLFxuICAgIGV4dHJhY3RDaGFyYWN0ZXJTdHJpbmcoKVxuICApKHJvb3RFbClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlYWRBYnN0cmFjdChyb290RWw6IFhtbEVsZW1lbnQpOiBzdHJpbmcge1xuICByZXR1cm4gcGlwZShcbiAgICBmaW5kSWRlbnRpZmljYXRpb24oKSxcbiAgICBmaW5kQ2hpbGRFbGVtZW50KCdnbWQ6YWJzdHJhY3QnLCBmYWxzZSksXG4gICAgZXh0cmFjdENoYXJhY3RlclN0cmluZygpXG4gICkocm9vdEVsKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVhZENvbnRhY3RzKHJvb3RFbDogWG1sRWxlbWVudCk6IEluZGl2aWR1YWxbXSB7XG4gIHJldHVybiBwaXBlKFxuICAgIGZpbmRDaGlsZHJlbkVsZW1lbnQoJ2dtZDpjb250YWN0JywgZmFsc2UpLFxuICAgIG1hcEFycmF5KGZpbmRDaGlsZEVsZW1lbnQoJ2dtZDpDSV9SZXNwb25zaWJsZVBhcnR5JywgZmFsc2UpKSxcbiAgICBtYXBBcnJheShleHRyYWN0SW5kaXZpZHVhbCgpKVxuICApKHJvb3RFbClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlYWRDb250YWN0c0ZvclJlc291cmNlKHJvb3RFbDogWG1sRWxlbWVudCk6IEluZGl2aWR1YWxbXSB7XG4gIHJldHVybiBwaXBlKFxuICAgIGZpbmRJZGVudGlmaWNhdGlvbigpLFxuICAgIGNvbWJpbmUoXG4gICAgICBmaW5kQ2hpbGRyZW5FbGVtZW50KCdnbWQ6Y29udGFjdCcsIGZhbHNlKSxcbiAgICAgIGZpbmRDaGlsZHJlbkVsZW1lbnQoJ2dtZDpwb2ludE9mQ29udGFjdCcsIGZhbHNlKVxuICAgICksXG4gICAgZmxhdHRlbkFycmF5KCksXG4gICAgbWFwQXJyYXkoZmluZENoaWxkRWxlbWVudCgnZ21kOkNJX1Jlc3BvbnNpYmxlUGFydHknLCBmYWxzZSkpLFxuICAgIG1hcEFycmF5KGV4dHJhY3RJbmRpdmlkdWFsKCkpXG4gICkocm9vdEVsKVxufVxuXG4vLyBmcm9tIGdtZDp0aGVzYXVydXNOYW1lXG5leHBvcnQgZnVuY3Rpb24gcmVhZFRoZXNhdXJ1cyhyb290RWw6IFhtbEVsZW1lbnQpOiBLZXl3b3JkVGhlc2F1cnVzIHtcbiAgaWYgKCFyb290RWwpIHJldHVybiBudWxsXG5cbiAgY29uc3QgZmluZElkZW50aWZpZXIgPSBmaW5kTmVzdGVkRWxlbWVudChcbiAgICAnZ21kOkNJX0NpdGF0aW9uJyxcbiAgICAnZ21kOmlkZW50aWZpZXInLFxuICAgICdnbWQ6TURfSWRlbnRpZmllcicsXG4gICAgJ2dtZDpjb2RlJ1xuICApXG4gIGNvbnN0IGlkID0gcGlwZShmaW5kSWRlbnRpZmllciwgZXh0cmFjdENoYXJhY3RlclN0cmluZygpKShyb290RWwpXG4gIGNvbnN0IHVybCA9IHBpcGUoZmluZElkZW50aWZpZXIsIGV4dHJhY3RVcmwoKSkocm9vdEVsKVxuICBjb25zdCBuYW1lID0gcGlwZShcbiAgICBmaW5kTmVzdGVkRWxlbWVudCgnZ21kOkNJX0NpdGF0aW9uJywgJ2dtZDp0aXRsZScpLFxuICAgIGV4dHJhY3RDaGFyYWN0ZXJTdHJpbmcoKVxuICApKHJvb3RFbClcbiAgcmV0dXJuIHtcbiAgICBpZCxcbiAgICAuLi4obmFtZSAmJiB7IG5hbWUgfSksXG4gICAgLi4uKHVybCAmJiB7IHVybCB9KSxcbiAgfVxufVxuXG4vLyBmcm9tIGdtZDpNRF9LZXl3b3Jkc1xuZXhwb3J0IGZ1bmN0aW9uIHJlYWRLZXl3b3JkR3JvdXAocm9vdEVsOiBYbWxFbGVtZW50KTogS2V5d29yZFtdIHtcbiAgY29uc3QgdHlwZSA9IHBpcGUoXG4gICAgZmluZENoaWxkcmVuRWxlbWVudCgnZ21kOk1EX0tleXdvcmRUeXBlQ29kZScpLFxuICAgIG1hcEFycmF5KHJlYWRBdHRyaWJ1dGUoJ2NvZGVMaXN0VmFsdWUnKSksXG4gICAgbWFwKCh2YWx1ZXMpID0+IGdldEtleXdvcmRUeXBlRnJvbUtleXdvcmRUeXBlQ29kZSh2YWx1ZXNbMF0pKVxuICApKHJvb3RFbClcbiAgY29uc3QgdGhlc2F1cnVzID0gcGlwZShcbiAgICBmaW5kTmVzdGVkRWxlbWVudCgnZ21kOnRoZXNhdXJ1c05hbWUnKSxcbiAgICByZWFkVGhlc2F1cnVzXG4gICkocm9vdEVsKVxuICByZXR1cm4gcGlwZShcbiAgICBmaW5kQ2hpbGRyZW5FbGVtZW50KCdnbWQ6a2V5d29yZCcpLFxuICAgIG1hcEFycmF5KChlbCkgPT4ge1xuICAgICAgY29uc3QgbGFiZWwgPSBleHRyYWN0Q2hhcmFjdGVyU3RyaW5nKCkoZWwpXG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi4odGhlc2F1cnVzID8geyB0aGVzYXVydXMgfSA6IHt9KSxcbiAgICAgICAgbGFiZWwsXG4gICAgICAgIHR5cGUsXG4gICAgICB9IGFzIEtleXdvcmRcbiAgICB9KVxuICApKHJvb3RFbClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlYWRLZXl3b3Jkcyhyb290RWw6IFhtbEVsZW1lbnQpOiBLZXl3b3JkW10ge1xuICByZXR1cm4gcGlwZShcbiAgICBmaW5kSWRlbnRpZmljYXRpb24oKSxcbiAgICBmaW5kTmVzdGVkRWxlbWVudHMoJ2dtZDpkZXNjcmlwdGl2ZUtleXdvcmRzJywgJ2dtZDpNRF9LZXl3b3JkcycpLFxuICAgIG1hcEFycmF5KHJlYWRLZXl3b3JkR3JvdXApLFxuICAgIGZsYXR0ZW5BcnJheSgpXG4gICkocm9vdEVsKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVhZFN0YXR1cyhyb290RWw6IFhtbEVsZW1lbnQpOiBSZWNvcmRTdGF0dXMge1xuICByZXR1cm4gcGlwZShcbiAgICBmaW5kSWRlbnRpZmljYXRpb24oKSxcbiAgICBmaW5kQ2hpbGRFbGVtZW50KCdnbWQ6c3RhdHVzJywgZmFsc2UpLFxuICAgIGV4dHJhY3RTdGF0dXMoKVxuICApKHJvb3RFbClcbn1cblxuY29uc3QgZ2V0Q29uc3RyYWludHMgPSBwaXBlKFxuICBmaW5kSWRlbnRpZmljYXRpb24oKSxcbiAgZmluZENoaWxkcmVuRWxlbWVudCgnZ21kOnJlc291cmNlQ29uc3RyYWludHMnLCBmYWxzZSlcbilcblxuZXhwb3J0IGZ1bmN0aW9uIHJlYWRMZWdhbENvbnN0cmFpbnRzKHJvb3RFbDogWG1sRWxlbWVudCk6IENvbnN0cmFpbnRbXSB7XG4gIHJldHVybiBwaXBlKFxuICAgIGdldENvbnN0cmFpbnRzLFxuICAgIG1hcEFycmF5KGV4dHJhY3RMZWdhbENvbnN0cmFpbnRzKCkpLFxuICAgIGZsYXR0ZW5BcnJheSgpLFxuICAgIGZsYXR0ZW5BcnJheSgpXG4gICkocm9vdEVsKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVhZFNlY3VyaXR5Q29uc3RyYWludHMocm9vdEVsOiBYbWxFbGVtZW50KTogQ29uc3RyYWludFtdIHtcbiAgcmV0dXJuIHBpcGUoXG4gICAgZ2V0Q29uc3RyYWludHMsXG4gICAgbWFwQXJyYXkoZXh0cmFjdFNlY3VyaXR5Q29uc3RyYWludHMoKSksXG4gICAgZmxhdHRlbkFycmF5KClcbiAgKShyb290RWwpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZWFkT3RoZXJDb25zdHJhaW50cyhyb290RWw6IFhtbEVsZW1lbnQpOiBDb25zdHJhaW50W10ge1xuICByZXR1cm4gcGlwZShcbiAgICBnZXRDb25zdHJhaW50cyxcbiAgICBtYXBBcnJheShleHRyYWN0T3RoZXJDb25zdHJhaW50cygpKSxcbiAgICBmbGF0dGVuQXJyYXkoKVxuICApKHJvb3RFbClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlYWRMaWNlbnNlcyhyb290RWw6IFhtbEVsZW1lbnQpOiBDb25zdHJhaW50W10ge1xuICByZXR1cm4gcGlwZShcbiAgICBnZXRDb25zdHJhaW50cyxcbiAgICBtYXBBcnJheShleHRyYWN0TGljZW5zZXMoKSksXG4gICAgZmxhdHRlbkFycmF5KClcbiAgKShyb290RWwpXG59XG5cbi8vIG5vdCB1c2VkIHlldFxuZXhwb3J0IGZ1bmN0aW9uIHJlYWRJc29Ub3BpY3Mocm9vdEVsOiBYbWxFbGVtZW50KTogc3RyaW5nW10ge1xuICByZXR1cm4gcGlwZShcbiAgICBmaW5kSWRlbnRpZmljYXRpb24oKSxcbiAgICBmaW5kQ2hpbGRyZW5FbGVtZW50KCdnbWQ6TURfVG9waWNDYXRlZ29yeUNvZGUnLCB0cnVlKSxcbiAgICBtYXBBcnJheShyZWFkVGV4dCgpKVxuICApKHJvb3RFbClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlYWRTcGF0aWFsUmVwcmVzZW50YXRpb24oXG4gIHJvb3RFbDogWG1sRWxlbWVudFxuKTogU3BhdGlhbFJlcHJlc2VudGF0aW9uVHlwZSB8IG51bGwge1xuICByZXR1cm4gcGlwZShcbiAgICBmaW5kSWRlbnRpZmljYXRpb24oKSxcbiAgICBmaW5kTmVzdGVkRWxlbWVudChcbiAgICAgICdnbWQ6c3BhdGlhbFJlcHJlc2VudGF0aW9uVHlwZScsXG4gICAgICAnZ21kOk1EX1NwYXRpYWxSZXByZXNlbnRhdGlvblR5cGVDb2RlJ1xuICAgICksXG4gICAgcmVhZEF0dHJpYnV0ZSgnY29kZUxpc3RWYWx1ZScpLFxuICAgIG1hcChnZXRTcGF0aWFsUmVwcmVzZW50YXRpb25Gcm9tQ29kZSlcbiAgKShyb290RWwpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZWFkT3ZlcnZpZXdzKHJvb3RFbDogWG1sRWxlbWVudCk6IEdyYXBoaWNPdmVydmlld1tdIHtcbiAgcmV0dXJuIHBpcGUoXG4gICAgZmluZElkZW50aWZpY2F0aW9uKCksXG4gICAgZmluZENoaWxkcmVuRWxlbWVudCgnZ21kOmdyYXBoaWNPdmVydmlldycsIGZhbHNlKSxcbiAgICBtYXBBcnJheShcbiAgICAgIGNvbWJpbmUoXG4gICAgICAgIHBpcGUoZmluZENoaWxkRWxlbWVudCgnZ21kOmZpbGVOYW1lJyksIGV4dHJhY3RNYW5kYXRvcnlVcmwoKSksXG4gICAgICAgIHBpcGUoZmluZENoaWxkRWxlbWVudCgnZ21kOmZpbGVEZXNjcmlwdGlvbicpLCBleHRyYWN0Q2hhcmFjdGVyU3RyaW5nKCkpXG4gICAgICApXG4gICAgKSxcbiAgICBtYXBBcnJheSgoW3VybCwgZGVzY3JpcHRpb25dKSA9PiAoe1xuICAgICAgdXJsLFxuICAgICAgLi4uKGRlc2NyaXB0aW9uICYmIHsgZGVzY3JpcHRpb24gfSksXG4gICAgfSkpXG4gICkocm9vdEVsKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVhZExpbmVhZ2Uocm9vdEVsOiBYbWxFbGVtZW50KTogc3RyaW5nIHtcbiAgcmV0dXJuIHBpcGUoXG4gICAgZmluZE5lc3RlZEVsZW1lbnQoXG4gICAgICAnZ21kOmRhdGFRdWFsaXR5SW5mbycsXG4gICAgICAnZ21kOkRRX0RhdGFRdWFsaXR5JyxcbiAgICAgICdnbWQ6bGluZWFnZScsXG4gICAgICAnZ21kOkxJX0xpbmVhZ2UnLFxuICAgICAgJ2dtZDpzdGF0ZW1lbnQnXG4gICAgKSxcbiAgICBleHRyYWN0Q2hhcmFjdGVyU3RyaW5nKClcbiAgKShyb290RWwpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZWFkRGlzdHJpYnV0aW9ucyhyb290RWw6IFhtbEVsZW1lbnQpOiBEYXRhc2V0RGlzdHJpYnV0aW9uW10ge1xuICByZXR1cm4gcGlwZShcbiAgICBmaW5kTmVzdGVkRWxlbWVudHMoJ2dtZDpkaXN0cmlidXRpb25JbmZvJywgJ2dtZDpNRF9EaXN0cmlidXRpb24nKSxcbiAgICBtYXBBcnJheShleHRyYWN0RGF0YXNldERpc3RyaWJ1dGlvbnMoZ2V0TWltZVR5cGUpKSxcbiAgICBmbGF0dGVuQXJyYXkoKVxuICApKHJvb3RFbClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlYWRVcGRhdGVGcmVxdWVuY3kocm9vdEVsOiBYbWxFbGVtZW50KTogVXBkYXRlRnJlcXVlbmN5IHtcbiAgcmV0dXJuIHBpcGUoXG4gICAgZmluZElkZW50aWZpY2F0aW9uKCksXG4gICAgZmluZE5lc3RlZEVsZW1lbnQoXG4gICAgICAnZ21kOnJlc291cmNlTWFpbnRlbmFuY2UnLFxuICAgICAgJ2dtZDpNRF9NYWludGVuYW5jZUluZm9ybWF0aW9uJ1xuICAgICksXG4gICAgZXh0cmFjdFVwZGF0ZUZyZXF1ZW5jeSgpLFxuICAgIG1hcCgodXBkYXRlRnJlcXVlbmN5KSA9PiB1cGRhdGVGcmVxdWVuY3kgfHwgJ3Vua25vd24nKVxuICApKHJvb3RFbClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGV4dHJhY3RTZXJ2aWNlT25saW5lUmVzb3VyY2VzKCk6IENoYWluYWJsZUZ1bmN0aW9uPFxuICBYbWxFbGVtZW50LFxuICBTZXJ2aWNlT25saW5lUmVzb3VyY2VbXVxuPiB7XG4gIGNvbnN0IGdldFVybCA9IHBpcGUoZmluZENoaWxkRWxlbWVudCgnZ21kOmxpbmthZ2UnKSwgZXh0cmFjdE1hbmRhdG9yeVVybCgpKVxuICBjb25zdCBnZXRQcm90b2NvbFN0ciA9IHBpcGUoXG4gICAgZmluZENoaWxkRWxlbWVudCgnZ21kOnByb3RvY29sJyksXG4gICAgZXh0cmFjdENoYXJhY3RlclN0cmluZygpXG4gIClcbiAgY29uc3QgZ2V0UHJvdG9jb2wgPSBwaXBlKGdldFByb3RvY29sU3RyLCBtYXAobWF0Y2hQcm90b2NvbCkpXG4gIGNvbnN0IGdldE9ubGluZUZ1bmN0aW9uID0gcGlwZShcbiAgICBmaW5kTmVzdGVkRWxlbWVudCgnZ21kOmZ1bmN0aW9uJywgJ2dtZDpDSV9PbkxpbmVGdW5jdGlvbkNvZGUnKSxcbiAgICByZWFkQXR0cmlidXRlKCdjb2RlTGlzdFZhbHVlJylcbiAgKVxuICBjb25zdCBnZXRJc0xpbmsgPSBwaXBlKFxuICAgIGdldE9ubGluZUZ1bmN0aW9uLFxuICAgIG1hcCgob25saW5lRnVuY3Rpb24pID0+IG9ubGluZUZ1bmN0aW9uID09PSAnaW5mb3JtYXRpb24nKVxuICApXG4gIGNvbnN0IGdldE5hbWUgPSBwaXBlKGZpbmRDaGlsZEVsZW1lbnQoJ2dtZDpuYW1lJyksIGV4dHJhY3RDaGFyYWN0ZXJTdHJpbmcoKSlcbiAgY29uc3QgZ2V0RGVzY3JpcHRpb24gPSBwaXBlKFxuICAgIGZpbmRDaGlsZEVsZW1lbnQoJ2dtZDpkZXNjcmlwdGlvbicpLFxuICAgIGV4dHJhY3RDaGFyYWN0ZXJTdHJpbmcoKVxuICApXG4gIHJldHVybiBwaXBlKFxuICAgIGZpbmROZXN0ZWRFbGVtZW50cyhcbiAgICAgICdnbWQ6dHJhbnNmZXJPcHRpb25zJyxcbiAgICAgICdnbWQ6TURfRGlnaXRhbFRyYW5zZmVyT3B0aW9ucycsXG4gICAgICAnZ21kOm9uTGluZScsXG4gICAgICAnZ21kOkNJX09ubGluZVJlc291cmNlJ1xuICAgICksXG4gICAgbWFwQXJyYXkoY29tYmluZShnZXRJc0xpbmssIGdldFByb3RvY29sLCBnZXRVcmwsIGdldE5hbWUsIGdldERlc2NyaXB0aW9uKSksXG4gICAgbWFwQXJyYXkoKFtpc0xpbmssIHByb3RvY29sLCB1cmwsIG5hbWUsIGRlc2NyaXB0aW9uXSkgPT4ge1xuICAgICAgaWYgKGlzTGluaykge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHR5cGU6ICdsaW5rJyxcbiAgICAgICAgICB1cmw6IHVybCxcbiAgICAgICAgICAuLi4obmFtZSAmJiB7IG5hbWUgfSksXG4gICAgICAgICAgLi4uKGRlc2NyaXB0aW9uICYmIHsgZGVzY3JpcHRpb24gfSksXG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgdHlwZTogJ2VuZHBvaW50JyxcbiAgICAgICAgICBlbmRwb2ludFVybDogdXJsLFxuICAgICAgICAgIHByb3RvY29sLFxuICAgICAgICAgIC4uLihkZXNjcmlwdGlvbiAmJiB7IGRlc2NyaXB0aW9uIH0pLFxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSlcbiAgKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVhZE9ubGluZVJlc291cmNlcyhcbiAgcm9vdEVsOiBYbWxFbGVtZW50XG4pOiBTZXJ2aWNlT25saW5lUmVzb3VyY2VbXSB7XG4gIHJldHVybiBwaXBlKFxuICAgIGZpbmROZXN0ZWRFbGVtZW50cygnZ21kOmRpc3RyaWJ1dGlvbkluZm8nLCAnZ21kOk1EX0Rpc3RyaWJ1dGlvbicpLFxuICAgIG1hcEFycmF5KGV4dHJhY3RTZXJ2aWNlT25saW5lUmVzb3VyY2VzKCkpLFxuICAgIGZsYXR0ZW5BcnJheSgpXG4gICkocm9vdEVsKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVhZFRlbXBvcmFsRXh0ZW50cyhyb290RWw6IFhtbEVsZW1lbnQpIHtcbiAgcmV0dXJuIHBpcGUoXG4gICAgZmluZElkZW50aWZpY2F0aW9uKCksXG4gICAgZmluZE5lc3RlZEVsZW1lbnRzKCdnbWQ6ZXh0ZW50JywgJ2dtZDpFWF9FeHRlbnQnLCAnZ21kOnRlbXBvcmFsRWxlbWVudCcpLFxuICAgIG1hcEFycmF5KFxuICAgICAgY29tYmluZShcbiAgICAgICAgZmluZE5lc3RlZEVsZW1lbnQoXG4gICAgICAgICAgJ2dtZDpFWF9UZW1wb3JhbEV4dGVudCcsXG4gICAgICAgICAgJ2dtZDpleHRlbnQnLFxuICAgICAgICAgICdnbWw6VGltZVBlcmlvZCdcbiAgICAgICAgKSxcbiAgICAgICAgZmluZE5lc3RlZEVsZW1lbnQoXG4gICAgICAgICAgJ2dtZDpFWF9UZW1wb3JhbEV4dGVudCcsXG4gICAgICAgICAgJ2dtZDpleHRlbnQnLFxuICAgICAgICAgICdnbWw6VGltZUluc3RhbnQnXG4gICAgICAgIClcbiAgICAgIClcbiAgICApLFxuICAgIG1hcEFycmF5KChbcGVyaW9kRWwsIGluc3RhbnRFbF0pID0+IHtcbiAgICAgIGlmIChwZXJpb2RFbCkge1xuICAgICAgICByZXR1cm4gcGlwZShcbiAgICAgICAgICBjb21iaW5lKFxuICAgICAgICAgICAgcGlwZShcbiAgICAgICAgICAgICAgZmluZENoaWxkRWxlbWVudCgnZ21sOmJlZ2luUG9zaXRpb24nLCBmYWxzZSksXG4gICAgICAgICAgICAgIHJlYWRUZXh0KCksXG4gICAgICAgICAgICAgIG1hcCgoZGF0ZVN0cikgPT4gKGRhdGVTdHIgPyBuZXcgRGF0ZShkYXRlU3RyKSA6IG51bGwpKVxuICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIHBpcGUoXG4gICAgICAgICAgICAgIGZpbmRDaGlsZEVsZW1lbnQoJ2dtbDplbmRQb3NpdGlvbicsIGZhbHNlKSxcbiAgICAgICAgICAgICAgcmVhZFRleHQoKSxcbiAgICAgICAgICAgICAgbWFwKChkYXRlU3RyKSA9PiAoZGF0ZVN0ciA/IG5ldyBEYXRlKGRhdGVTdHIpIDogbnVsbCkpXG4gICAgICAgICAgICApXG4gICAgICAgICAgKSxcbiAgICAgICAgICBtYXAoKFtzdGFydCwgZW5kXSkgPT4gKHtcbiAgICAgICAgICAgIHN0YXJ0LFxuICAgICAgICAgICAgZW5kLFxuICAgICAgICAgIH0pKVxuICAgICAgICApKHBlcmlvZEVsKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHBpcGUoXG4gICAgICAgICAgZmluZENoaWxkRWxlbWVudCgnZ21sOnRpbWVQb3NpdGlvbicsIGZhbHNlKSxcbiAgICAgICAgICByZWFkVGV4dCgpLFxuICAgICAgICAgIG1hcCgoZGF0ZVN0cikgPT4gKGRhdGVTdHIgPyBuZXcgRGF0ZShkYXRlU3RyKSA6IG51bGwpKSxcbiAgICAgICAgICBtYXAoKGRhdGUpID0+ICh7XG4gICAgICAgICAgICBzdGFydDogZGF0ZSxcbiAgICAgICAgICB9KSlcbiAgICAgICAgKShpbnN0YW50RWwpXG4gICAgICB9XG4gICAgfSlcbiAgKShyb290RWwpXG59XG4iXX0=
422
+ export function readSpatialExtents(rootEl) {
423
+ const extractGeometry = (rootEl) => {
424
+ if (!rootEl)
425
+ return null;
426
+ return pipe(findChildElement('gmd:polygon', false), firstChildElement, map((el) => (el ? readGeometry(el) : null)))(rootEl);
427
+ };
428
+ const extractBBox = (rootEl) => {
429
+ if (!rootEl)
430
+ return null;
431
+ return pipe(combine(pipe(findChildElement('gmd:westBoundLongitude'), extractDecimal()), pipe(findChildElement('gmd:southBoundLatitude'), extractDecimal()), pipe(findChildElement('gmd:eastBoundLongitude'), extractDecimal()), pipe(findChildElement('gmd:northBoundLatitude'), extractDecimal())))(rootEl);
432
+ };
433
+ const extractDescription = (rootEl) => {
434
+ if (!rootEl)
435
+ return [null, {}];
436
+ return pipe(findNestedElement('gmd:geographicIdentifier', 'gmd:MD_Identifier', 'gmd:code'), extractLocalizedCharacterString('description'))(rootEl);
437
+ };
438
+ return pipe(findIdentification(), findNestedElements('gmd:extent', 'gmd:EX_Extent', 'gmd:geographicElement'), mapArray(combine(pipe(findChildElement('gmd:EX_BoundingPolygon'), extractGeometry), pipe(findChildElement('gmd:EX_GeographicBoundingBox'), extractBBox), pipe(findChildElement('gmd:EX_GeographicDescription'), extractDescription))), filterArray(([geometry, bbox, [description]]) => !!geometry || !!bbox || !!description), mapArray(([geometry, bbox, [description, translations]]) => {
439
+ return {
440
+ ...(geometry && { geometry }),
441
+ ...(bbox && { bbox }),
442
+ ...(description && { description }),
443
+ translations,
444
+ };
445
+ }))(rootEl);
446
+ }
447
+ export function readOtherLanguages(rootEl) {
448
+ const defaultLanguage = readDefaultLanguage(rootEl);
449
+ return pipe(findChildrenElement('gmd:locale', false), mapArray(pipe(findChildElement('gmd:LanguageCode'), readAttribute('codeListValue'), map((lang) => LANG_3_TO_2_MAPPER[lang.toLowerCase()]))), map((languages) => (languages.length ? languages : [defaultLanguage])))(rootEl);
450
+ }
451
+ export function readDefaultLanguage(rootEl) {
452
+ return pipe(findChildElement('gmd:language', false), findChildElement('gmd:LanguageCode'), readAttribute('codeListValue'), map((lang) => (lang ? LANG_3_TO_2_MAPPER[lang.toLowerCase()] : null)))(rootEl);
453
+ }
454
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVhZC1wYXJ0cy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvYXBpL21ldGFkYXRhLWNvbnZlcnRlci9zcmMvbGliL2lzbzE5MTM5L3JlYWQtcGFydHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBMEJBLE9BQU8sRUFBRSxhQUFhLEVBQUUsYUFBYSxFQUFFLE1BQU0sK0JBQStCLENBQUE7QUFDNUUsT0FBTyxFQUVMLE9BQU8sRUFDUCxRQUFRLEVBQ1IsV0FBVyxFQUNYLFlBQVksRUFDWixVQUFVLEVBQ1YsR0FBRyxFQUNILFFBQVEsRUFDUixJQUFJLEdBQ0wsTUFBTSxtQkFBbUIsQ0FBQTtBQUMxQixPQUFPLEVBQ0wsZ0JBQWdCLEVBQ2hCLG1CQUFtQixFQUNuQixpQkFBaUIsRUFDakIsa0JBQWtCLEVBQ2xCLFVBQVUsRUFDVixpQkFBaUIsRUFDakIsYUFBYSxFQUNiLFFBQVEsR0FFVCxNQUFNLGNBQWMsQ0FBQTtBQUNyQixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sa0JBQWtCLENBQUE7QUFDL0MsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHlCQUF5QixDQUFBO0FBQ3pELE9BQU8sRUFBRSxpQ0FBaUMsRUFBRSxNQUFNLHdCQUF3QixDQUFBO0FBQzFFLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHFCQUFxQixDQUFBO0FBQ3pELE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLHVCQUF1QixDQUFBO0FBQy9ELE9BQU8sRUFBRSxtQ0FBbUMsRUFBRSxNQUFNLGlDQUFpQyxDQUFBO0FBQ3JGLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHlEQUF5RCxDQUFBO0FBRTVGLE1BQU0sVUFBVSxzQkFBc0I7SUFJcEMsT0FBTyxJQUFJLENBQ1QsUUFBUSxDQUNOLGdCQUFnQixDQUFDLHFCQUFxQixFQUFFLEtBQUssQ0FBQyxFQUM5QyxnQkFBZ0IsQ0FBQyxZQUFZLEVBQUUsS0FBSyxDQUFD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VSxtQkFBbUIsQ0FBQyxNQUFrQjtJQUNwRCxPQUFPLElBQUksQ0FDVCxnQkFBZ0IsQ0FBQyxjQUFjLEVBQUUsS0FBSyxDQUFDLEVBQ3ZDLGdCQUFnQixDQUFDLGtCQUFrQixDQUFDLEVBQ3BDLGFBQWEsQ0FBQyxlQUFlLENBQUMsRUFDOUIsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQ3RFLENBQUMsTUFBTSxDQUFDLENBQUE7QUFDWCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ29uc3RyYWludCxcbiAgQ29uc3RyYWludFRyYW5zbGF0aW9ucyxcbiAgRGF0YXNldE9ubGluZVJlc291cmNlLFxuICBGaWVsZFRyYW5zbGF0aW9uLFxuICBHcmFwaGljT3ZlcnZpZXcsXG4gIEluZGl2aWR1YWwsXG4gIEtleXdvcmQsXG4gIEtleXdvcmRUcmFuc2xhdGlvbnMsXG4gIExhbmd1YWdlQ29kZSxcbiAgTW9kZWxUcmFuc2xhdGlvbnMsXG4gIE9ubGluZVJlc291cmNlLFxuICBPbmxpbmVSZXNvdXJjZVRyYW5zbGF0aW9ucyxcbiAgT3JnYW5pemF0aW9uLFxuICBPcmdhbml6YXRpb25UcmFuc2xhdGlvbnMsXG4gIFJlY29yZEtpbmQsXG4gIFJlY29yZFN0YXR1cyxcbiAgUmVjb3JkVHJhbnNsYXRpb25zLFxuICBSb2xlLFxuICBTZXJ2aWNlT25saW5lUmVzb3VyY2UsXG4gIFNwYXRpYWxSZXByZXNlbnRhdGlvblR5cGUsXG4gIFVwZGF0ZUZyZXF1ZW5jeSxcbiAgVXBkYXRlRnJlcXVlbmN5Q3VzdG9tLFxufSBmcm9tICcuLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NvbW1vbi9kb21haW4vc3JjL2xpYi9tb2RlbC9yZWNvcmQnXG5pbXBvcnQgeyBUaGVzYXVydXNNb2RlbCB9IGZyb20gJy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY29tbW9uL2RvbWFpbi9zcmMvbGliL21vZGVsL3RoZXNhdXJ1cydcbmltcG9ydCB7IEdlb21ldHJ5IH0gZnJvbSAnZ2VvanNvbidcbmltcG9ydCB7IG1hdGNoTWltZVR5cGUsIG1hdGNoUHJvdG9jb2wgfSBmcm9tICcuLi9jb21tb24vZGlzdHJpYnV0aW9uLm1hcHBlcidcbmltcG9ydCB7XG4gIENoYWluYWJsZUZ1bmN0aW9uLFxuICBjb21iaW5lLFxuICBmYWxsYmFjayxcbiAgZmlsdGVyQXJyYXksXG4gIGZsYXR0ZW5BcnJheSxcbiAgZ2V0QXRJbmRleCxcbiAgbWFwLFxuICBtYXBBcnJheSxcbiAgcGlwZSxcbn0gZnJvbSAnLi4vZnVuY3Rpb24tdXRpbHMnXG5pbXBvcnQge1xuICBmaW5kQ2hpbGRFbGVtZW50LFxuICBmaW5kQ2hpbGRyZW5FbGVtZW50LFxuICBmaW5kTmVzdGVkRWxlbWVudCxcbiAgZmluZE5lc3RlZEVsZW1lbnRzLFxuICBmaW5kUGFyZW50LFxuICBmaXJzdENoaWxkRWxlbWVudCxcbiAgcmVhZEF0dHJpYnV0ZSxcbiAgcmVhZFRleHQsXG4gIFhtbEVsZW1lbnQsXG59IGZyb20gJy4uL3htbC11dGlscydcbmltcG9ydCB7IHJlYWRHZW9tZXRyeSB9IGZyb20gJy4vdXRpbHMvZ2VvbWV0cnknXG5pbXBvcnQgeyBmdWxsTmFtZVRvUGFydHMgfSBmcm9tICcuL3V0aWxzL2luZGl2aWR1YWwtbmFtZSdcbmltcG9ydCB7IGdldEtleXdvcmRUeXBlRnJvbUtleXdvcmRUeXBlQ29kZSB9IGZyb20gJy4vdXRpbHMva2V5d29yZC5tYXBwZXInXG5pbXBvcnQgeyBnZXRSb2xlRnJvbVJvbGVDb2RlIH0gZnJvbSAnLi91dGlscy9yb2xlLm1hcHBlcidcbmltcG9ydCB7IGdldFN0YXR1c0Zyb21TdGF0dXNDb2RlIH0gZnJvbSAnLi91dGlscy9zdGF0dXMubWFwcGVyJ1xuaW1wb3J0IHsgZ2V0VXBkYXRlRnJlcXVlbmN5RnJvbUZyZXF1ZW5jeUNvZGUgfSBmcm9tICcuL3V0aWxzL3VwZGF0ZS1mcmVxdWVuY3kubWFwcGVyJ1xuaW1wb3J0IHsgTEFOR18zX1RPXzJfTUFQUEVSIH0gZnJvbSAnLi4vLi4vLi4vLi4vLi4vLi4vbGlicy91dGlsL2kxOG4vc3JjL2xpYi9sYW5ndWFnZS1jb2RlcydcblxuZXhwb3J0IGZ1bmN0aW9uIGV4dHJhY3RDaGFyYWN0ZXJTdHJpbmcoKTogQ2hhaW5hYmxlRnVuY3Rpb248XG4gIFhtbEVsZW1lbnQsXG4gIHN0cmluZ1xuPiB7XG4gIHJldHVybiBwaXBlKFxuICAgIGZhbGxiYWNrKFxuICAgICAgZmluZENoaWxkRWxlbWVudCgnZ2NvOkNoYXJhY3RlclN0cmluZycsIGZhbHNlKSxcbiAgICAgIGZpbmRDaGlsZEVsZW1lbnQoJ2dteDpBbmNob3InLCBmYWxzZSlcbiAgICApLFxuICAgIHJlYWRUZXh0KClcbiAgKVxufVxuXG4vKipcbiAqIFRyYW5zbGF0ZWQgdmFsdWVzIHdpbGwgYWxzbyBiZSBjb2xsZWN0ZWQgaW4gdGhlIHRyYW5zbGF0aW9ucyBvYmplY3RcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGV4dHJhY3RMb2NhbGl6ZWRDaGFyYWN0ZXJTdHJpbmc8VCBleHRlbmRzIE1vZGVsVHJhbnNsYXRpb25zPihcbiAgZmllbGROYW1lOiBzdHJpbmcsXG4gIHRyYW5zbGF0aW9ucz86IFRcbik6IENoYWluYWJsZUZ1bmN0aW9uPFhtbEVsZW1lbnQsIFtzdHJpbmcsIFRdPiB7XG4gIHJldHVybiBjb21iaW5lKFxuICAgIHBpcGUoXG4gICAgICBmYWxsYmFjayhcbiAgICAgICAgZmluZENoaWxkRWxlbWVudCgnZ2NvOkNoYXJhY3RlclN0cmluZycsIGZhbHNlKSxcbiAgICAgICAgZmluZENoaWxkRWxlbWVudCgnZ214OkFuY2hvcicsIGZhbHNlKVxuICAgICAgKSxcbiAgICAgIHJlYWRUZXh0KClcbiAgICApLFxuICAgIChlbCkgPT4ge1xuICAgICAgY29uc3QgdHJhbnNsYXRlZFZhbHVlcyA9IGZpbmROZXN0ZWRFbGVtZW50cyhcbiAgICAgICAgJ2dtZDpQVF9GcmVlVGV4dCcsXG4gICAgICAgICdnbWQ6dGV4dEdyb3VwJyxcbiAgICAgICAgJ2dtZDpMb2NhbGlzZWRDaGFyYWN0ZXJTdHJpbmcnXG4gICAgICApKGVsKVxuICAgICAgY29uc3QgdHJhbnNsYXRpb25zU2FmZSA9IHRyYW5zbGF0aW9ucyA/PyAoe30gYXMgVClcbiAgICAgIGlmICghdHJhbnNsYXRlZFZhbHVlcy5sZW5ndGgpIHJldHVybiB0cmFuc2xhdGlvbnNTYWZlXG4gICAgICBjb25zdCB2YWx1ZVRyYW5zbGF0aW9uczogRmllbGRUcmFuc2xhdGlvbiA9IHRyYW5zbGF0ZWRWYWx1ZXMucmVkdWNlKFxuICAgICAgICAocHJldiwgdHJhbnNsYXRpb25FbCkgPT4ge1xuICAgICAgICAgIGNvbnN0IGxhbmcgPSByZWFkQXR0cmlidXRlKCdsb2NhbGUnKSh0cmFuc2xhdGlvbkVsKVxuICAgICAgICAgICAgLnRvTG93ZXJDYXNlKClcbiAgICAgICAgICAgIC5yZXBsYWNlKC9eIy8sICcnKVxuICAgICAgICAgIGNvbnN0IHZhbHVlID0gcmVhZFRleHQoKSh0cmFuc2xhdGlvbkVsKVxuICAgICAgICAgIGlmICghbGFuZykge1xuICAgICAgICAgICAgcmV0dXJuIHByZXZcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIHsgLi4ucHJldiwgW2xhbmddOiB2YWx1ZSB9XG4gICAgICAgIH0sXG4gICAgICAgIHt9XG4gICAgICApXG4gICAgICB0cmFuc2xhdGlvbnNTYWZlW2ZpZWxkTmFtZV0gPSB7XG4gICAgICAgIC4uLnRyYW5zbGF0aW9uc1NhZmVbZmllbGROYW1lXSxcbiAgICAgICAgLi4udmFsdWVUcmFuc2xhdGlvbnMsXG4gICAgICB9XG4gICAgICByZXR1cm4gdHJhbnNsYXRpb25zU2FmZVxuICAgIH1cbiAgKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZXh0cmFjdERhdGVUaW1lKCk6IENoYWluYWJsZUZ1bmN0aW9uPFhtbEVsZW1lbnQsIERhdGU+IHtcbiAgcmV0dXJuIHBpcGUoXG4gICAgZmFsbGJhY2soXG4gICAgICBmaW5kQ2hpbGRFbGVtZW50KCdnY286RGF0ZVRpbWUnLCBmYWxzZSksXG4gICAgICBmaW5kQ2hpbGRFbGVtZW50KCdnY286RGF0ZScsIGZhbHNlKVxuICAgICksXG4gICAgcmVhZFRleHQoKSxcbiAgICBtYXAoKGRhdGVTdHIpID0+IChkYXRlU3RyID8gbmV3IERhdGUoZGF0ZVN0cikgOiBudWxsKSlcbiAgKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZXh0cmFjdERlY2ltYWwoKTogQ2hhaW5hYmxlRnVuY3Rpb248WG1sRWxlbWVudCwgbnVtYmVyPiB7XG4gIHJldHVybiBwaXBlKFxuICAgIGZpbmRDaGlsZEVsZW1lbnQoJ2djbzpEZWNpbWFsJywgZmFsc2UpLFxuICAgIHJlYWRUZXh0KCksXG4gICAgbWFwKChudW1iZXJTdHIpID0+IChudW1iZXJTdHIgPyBOdW1iZXIobnVtYmVyU3RyKSA6IG51bGwpKVxuICApXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBleHRyYWN0VXJsKCk6IENoYWluYWJsZUZ1bmN0aW9uPFhtbEVsZW1lbnQsIFVSTD4ge1xuICBjb25zdCBnZXRVcmwgPSBwaXBlKGZpbmRDaGlsZEVsZW1lbnQoJ2dtZDpVUkwnLCBmYWxzZSksIHJlYWRUZXh0KCkpXG4gIGNvbnN0IGdldENoYXJhY3RlclN0cmluZyA9IHBpcGUoXG4gICAgZmluZENoaWxkRWxlbWVudCgnZ2NvOkNoYXJhY3RlclN0cmluZycsIGZhbHNlKSxcbiAgICByZWFkVGV4dCgpXG4gIClcbiAgY29uc3QgZ2V0QW5jaG9yID0gcGlwZShcbiAgICBmaW5kQ2hpbGRFbGVtZW50KCdnbXg6QW5jaG9yJywgZmFsc2UpLFxuICAgIHJlYWRBdHRyaWJ1dGUoJ3hsaW5rOmhyZWYnKVxuICApXG4gIHJldHVybiBwaXBlKFxuICAgIGZhbGxiYWNrKGdldFVybCwgZ2V0QW5jaG9yLCBnZXRDaGFyYWN0ZXJTdHJpbmcpLFxuICAgIG1hcCgodXJsU3RyKSA9PiB7XG4gICAgICB0cnkge1xuICAgICAgICByZXR1cm4gbmV3IFVSTCh1cmxTdHIpXG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIHJldHVybiBudWxsXG4gICAgICB9XG4gICAgfSlcbiAgKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZXh0cmFjdE1hbmRhdG9yeVVybCgpIHtcbiAgcmV0dXJuIGZhbGxiYWNrKGV4dHJhY3RVcmwoKSwgKCkgPT4gbmV3IFVSTCgnaHR0cDovL21pc3NpbmcnKSlcbn1cblxuLy8gZnJvbSBnbWQ6cm9sZVxuZXhwb3J0IGZ1bmN0aW9uIGV4dHJhY3RSb2xlKCk6IENoYWluYWJsZUZ1bmN0aW9uPFhtbEVsZW1lbnQsIFJvbGU+IHtcbiAgcmV0dXJuIHBpcGUoXG4gICAgZmluZENoaWxkRWxlbWVudCgnZ21kOkNJX1JvbGVDb2RlJyksXG4gICAgcmVhZEF0dHJpYnV0ZSgnY29kZUxpc3RWYWx1ZScpLFxuICAgIG1hcChnZXRSb2xlRnJvbVJvbGVDb2RlKVxuICApXG59XG5cbi8vIGZyb20gZ21kOkNJX1Jlc3BvbnNpYmxlUGFydHlcbmV4cG9ydCBmdW5jdGlvbiBleHRyYWN0T3JnYW5pemF0aW9uKCk6IENoYWluYWJsZUZ1bmN0aW9uPFxuICBYbWxFbGVtZW50LFxuICBPcmdhbml6YXRpb25cbj4ge1xuICBjb25zdCBnZXRVcmwgPSBwaXBlKFxuICAgIGZpbmROZXN0ZWRFbGVtZW50cyhcbiAgICAgICdnbWQ6Y29udGFjdEluZm8nLFxuICAgICAgJ2dtZDpDSV9Db250YWN0JyxcbiAgICAgICdnbWQ6b25saW5lUmVzb3VyY2UnLFxuICAgICAgJ2dtZDpDSV9PbmxpbmVSZXNvdXJjZScsXG4gICAgICAnZ21kOmxpbmthZ2UnXG4gICAgKSxcbiAgICBnZXRBdEluZGV4KDApLFxuICAgIGV4dHJhY3RVcmwoKVxuICApXG4gIHJldHVybiBwaXBlKFxuICAgIGNvbWJpbmUoXG4gICAgICBwaXBlKFxuICAgICAgICBmaW5kQ2hpbGRFbGVtZW50KCdnbWQ6b3JnYW5pc2F0aW9uTmFtZScsIGZhbHNlKSxcbiAgICAgICAgZXh0cmFjdExvY2FsaXplZENoYXJhY3RlclN0cmluZzxPcmdhbml6YXRpb25UcmFuc2xhdGlvbnM+KCduYW1lJylcbiAgICAgICksXG4gICAgICBnZXRVcmxcbiAgICApLFxuICAgIG1hcCgoW1tuYW1lLCB0cmFuc2xhdGlvbnNdLCB3ZWJzaXRlXSkgPT4gKHtcbiAgICAgIG5hbWUsXG4gICAgICAuLi4od2Vic2l0ZSAmJiB7IHdlYnNpdGUgfSksXG4gICAgICB0cmFuc2xhdGlvbnMsXG4gICAgfSkpXG4gIClcbn1cblxuLy8gZnJvbSBnbWQ6Q0lfUmVzcG9uc2libGVQYXJ0eVxuZXhwb3J0IGZ1bmN0aW9uIGV4dHJhY3RJbmRpdmlkdWFsKCk6IENoYWluYWJsZUZ1bmN0aW9uPFhtbEVsZW1lbnQsIEluZGl2aWR1YWw+IHtcbiAgY29uc3QgZ2V0Um9sZSA9IHBpcGUoZmluZENoaWxkRWxlbWVudCgnZ21kOnJvbGUnKSwgZXh0cmFjdFJvbGUoKSlcbiAgY29uc3QgZ2V0UG9zaXRpb24gPSBwaXBlKFxuICAgIGZpbmRDaGlsZEVsZW1lbnQoJ2dtZDpwb3NpdGlvbk5hbWUnKSxcbiAgICBleHRyYWN0Q2hhcmFjdGVyU3RyaW5nKClcbiAgKVxuICBjb25zdCBnZXROYW1lUGFydHMgPSBwaXBlKFxuICAgIGZpbmRDaGlsZEVsZW1lbnQoJ2dtZDppbmRpdmlkdWFsTmFtZScpLFxuICAgIGV4dHJhY3RDaGFyYWN0ZXJTdHJpbmcoKSxcbiAgICBtYXAoKGZ1bGxOYW1lKSA9PiB7XG4gICAgICBpZiAoIWZ1bGxOYW1lKSByZXR1cm4gW11cbiAgICAgIHJldHVybiBmdWxsTmFtZVRvUGFydHMoZnVsbE5hbWUpXG4gICAgfSlcbiAgKVxuICBjb25zdCBnZXRPcmdhbml6YXRpb24gPSBleHRyYWN0T3JnYW5pemF0aW9uKClcbiAgY29uc3QgZ2V0Q29udGFjdFJvb3QgPSBmaW5kTmVzdGVkRWxlbWVudCgnZ21kOmNvbnRhY3RJbmZvJywgJ2dtZDpDSV9Db250YWN0JylcbiAgY29uc3QgZ2V0RW1haWwgPSBwaXBlKFxuICAgIGdldENvbnRhY3RSb290LFxuICAgIGZpbmRDaGlsZEVsZW1lbnQoJ2dtZDplbGVjdHJvbmljTWFpbEFkZHJlc3MnKSxcbiAgICBleHRyYWN0Q2hhcmFjdGVyU3RyaW5nKCksXG4gICAgbWFwKChlbWFpbCkgPT4gKGVtYWlsID09PSBudWxsID8gJ21pc3NpbmdAbWlzc2luZy5jb20nIDogZW1haWwpKVxuICApXG4gIGNvbnN0IGdldEFkZHJlc3MgPSBwaXBlKFxuICAgIGdldENvbnRhY3RSb290LFxuICAgIGZpbmROZXN0ZWRFbGVtZW50KCdnbWQ6YWRkcmVzcycsICdnbWQ6Q0lfQWRkcmVzcycpLFxuICAgIGNvbWJpbmUoXG4gICAgICBwaXBlKFxuICAgICAgICBmaW5kQ2hpbGRFbGVtZW50KCdnbWQ6ZGVsaXZlcnlQb2ludCcsIGZhbHNlKSxcbiAgICAgICAgZXh0cmFjdENoYXJhY3RlclN0cmluZygpXG4gICAgICApLFxuICAgICAgcGlwZShmaW5kQ2hpbGRFbGVtZW50KCdnbWQ6Y2l0eScsIGZhbHNlKSwgZXh0cmFjdENoYXJhY3RlclN0cmluZygpKSxcbiAgICAgIHBpcGUoZmluZENoaWxkRWxlbWVudCgnZ21kOnBvc3RhbENvZGUnLCBmYWxzZSksIGV4dHJhY3RDaGFyYWN0ZXJTdHJpbmcoKSksXG4gICAgICBwaXBlKGZpbmRDaGlsZEVsZW1lbnQoJ2dtZDpjb3VudHJ5JywgZmFsc2UpLCBleHRyYWN0Q2hhcmFjdGVyU3RyaW5nKCkpXG4gICAgKSxcbiAgICBtYXAoKHBhcnRzKSA9PiBwYXJ0cy5maWx0ZXIoKHApID0+ICEhcCkuam9pbignLCAnKSlcbiAgKVxuICBjb25zdCBnZXRQaG9uZSA9IHBpcGUoXG4gICAgZ2V0Q29udGFjdFJvb3QsXG4gICAgZmluZE5lc3RlZEVsZW1lbnQoJ2dtZDpwaG9uZScsICdnbWQ6Q0lfVGVsZXBob25lJywgJ2dtZDp2b2ljZScpLFxuICAgIGV4dHJhY3RDaGFyYWN0ZXJTdHJpbmcoKVxuICApXG4gIHJldHVybiBwaXBlKFxuICAgIGNvbWJpbmUoXG4gICAgICBnZXRSb2xlLFxuICAgICAgZ2V0UG9zaXRpb24sXG4gICAgICBnZXROYW1lUGFydHMsXG4gICAgICBnZXRPcmdhbml6YXRpb24sXG4gICAgICBnZXRFbWFpbCxcbiAgICAgIGdldEFkZHJlc3MsXG4gICAgICBnZXRQaG9uZVxuICAgICksXG4gICAgbWFwKFxuICAgICAgKFtcbiAgICAgICAgcm9sZSxcbiAgICAgICAgcG9zaXRpb24sXG4gICAgICAgIFtmaXJzdE5hbWUsIGxhc3ROYW1lXSxcbiAgICAgICAgb3JnYW5pemF0aW9uLFxuICAgICAgICBlbWFpbCxcbiAgICAgICAgYWRkcmVzcyxcbiAgICAgICAgcGhvbmUsXG4gICAgICBdKSA9PiAoe1xuICAgICAgICBlbWFpbCxcbiAgICAgICAgcm9sZSxcbiAgICAgICAgb3JnYW5pemF0aW9uLFxuICAgICAgICAuLi4ocG9zaXRpb24gJiYgeyBwb3NpdGlvbiB9KSxcbiAgICAgICAgLi4uKGZpcnN0TmFtZSAmJiB7IGZpcnN0TmFtZSB9KSxcbiAgICAgICAgLi4uKGxhc3ROYW1lICYmIHsgbGFzdE5hbWUgfSksXG4gICAgICAgIC4uLihhZGRyZXNzICYmIHsgYWRkcmVzcyB9KSxcbiAgICAgICAgLi4uKHBob25lICYmIHsgcGhvbmUgfSksXG4gICAgICB9KVxuICAgIClcbiAgKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZXh0cmFjdFN0YXR1cygpOiBDaGFpbmFibGVGdW5jdGlvbjxYbWxFbGVtZW50LCBSZWNvcmRTdGF0dXM+IHtcbiAgcmV0dXJuIHBpcGUoXG4gICAgZmluZENoaWxkRWxlbWVudCgnZ21kOk1EX1Byb2dyZXNzQ29kZScpLFxuICAgIHJlYWRBdHRyaWJ1dGUoJ2NvZGVMaXN0VmFsdWUnKSxcbiAgICBtYXAoZ2V0U3RhdHVzRnJvbVN0YXR1c0NvZGUpXG4gIClcbn1cblxuLy8gZnJvbSBnbWQ6cmVzb3VyY2VDb25zdHJhaW50c1xuZXhwb3J0IGZ1bmN0aW9uIGV4dHJhY3RMZWdhbENvbnN0cmFpbnRzKCk6IENoYWluYWJsZUZ1bmN0aW9uPFxuICBYbWxFbGVtZW50LFxuICBBcnJheTxDb25zdHJhaW50PlxuPiB7XG4gIHJldHVybiBwaXBlKFxuICAgIGZpbmRDaGlsZHJlbkVsZW1lbnQoJ2dtZDpNRF9MZWdhbENvbnN0cmFpbnRzJywgZmFsc2UpLFxuICAgIGZpbHRlckFycmF5KFxuICAgICAgcGlwZShcbiAgICAgICAgZmluZENoaWxkcmVuRWxlbWVudCgnZ21kOk1EX1Jlc3RyaWN0aW9uQ29kZScpLFxuICAgICAgICBtYXBBcnJheShyZWFkQXR0cmlidXRlKCdjb2RlTGlzdFZhbHVlJykpLFxuICAgICAgICBtYXAoKHZhbHVlcykgPT4gdmFsdWVzLmluZGV4T2YoJ2xpY2Vuc2UnKSA9PT0gLTEpXG4gICAgICApXG4gICAgKSxcbiAgICBtYXBBcnJheShcbiAgICAgIGNvbWJpbmUoXG4gICAgICAgIGZpbmRDaGlsZHJlbkVsZW1lbnQoJ2dtZDpvdGhlckNvbnN0cmFpbnRzJyksXG4gICAgICAgIGZpbmRDaGlsZHJlbkVsZW1lbnQoJ2dtZDp1c2VMaW1pdGF0aW9uJylcbiAgICAgIClcbiAgICApLFxuICAgIGZsYXR0ZW5BcnJheSgpLFxuICAgIGZsYXR0ZW5BcnJheSgpLFxuICAgIG1hcEFycmF5KFxuICAgICAgY29tYmluZShcbiAgICAgICAgZXh0cmFjdExvY2FsaXplZENoYXJhY3RlclN0cmluZzxDb25zdHJhaW50VHJhbnNsYXRpb25zPigndGV4dCcpLFxuICAgICAgICBleHRyYWN0VXJsKClcbiAgICAgIClcbiAgICApLFxuICAgIG1hcEFycmF5KChbW3RleHQsIHRyYW5zbGF0aW9uc10sIHVybF0pID0+ICh7XG4gICAgICAuLi4odXJsICYmIHsgdXJsIH0pLFxuICAgICAgdGV4dCxcbiAgICAgIHRyYW5zbGF0aW9ucyxcbiAgICB9KSlcbiAgKVxufVxuXG4vLyBmcm9tIGdtZDpyZXNvdXJjZUNvbnN0cmFpbnRzXG5leHBvcnQgZnVuY3Rpb24gZXh0cmFjdFNlY3VyaXR5Q29uc3RyYWludHMoKTogQ2hhaW5hYmxlRnVuY3Rpb248XG4gIFhtbEVsZW1lbnQsXG4gIEFycmF5PENvbnN0cmFpbnQ+XG4+IHtcbiAgcmV0dXJuIHBpcGUoXG4gICAgZmluZE5lc3RlZEVsZW1lbnRzKCdnbWQ6TURfU2VjdXJpdHlDb25zdHJhaW50cycsICdnbWQ6dXNlTGltaXRhdGlvbicpLFxuICAgIGZsYXR0ZW5BcnJheSgpLFxuICAgIG1hcEFycmF5KFxuICAgICAgY29tYmluZShcbiAgICAgICAgZXh0cmFjdExvY2FsaXplZENoYXJhY3RlclN0cmluZzxDb25zdHJhaW50VHJhbnNsYXRpb25zPigndGV4dCcpLFxuICAgICAgICBleHRyYWN0VXJsKClcbiAgICAgIClcbiAgICApLFxuICAgIG1hcEFycmF5KChbW3RleHQsIHRyYW5zbGF0aW9uc10sIHVybF0pID0+ICh7XG4gICAgICAuLi4odXJsICYmIHsgdXJsIH0pLFxuICAgICAgdGV4dCxcbiAgICAgIHRyYW5zbGF0aW9ucyxcbiAgICB9KSlcbiAgKVxufVxuXG4vLyBmcm9tIGdtZDpyZXNvdXJjZUNvbnN0cmFpbnRzXG5leHBvcnQgZnVuY3Rpb24gZXh0cmFjdE90aGVyQ29uc3RyYWludHMoKTogQ2hhaW5hYmxlRnVuY3Rpb248XG4gIFhtbEVsZW1lbnQsXG4gIEFycmF5PENvbnN0cmFpbnQ+XG4+IHtcbiAgcmV0dXJuIHBpcGUoXG4gICAgZmluZE5lc3RlZEVsZW1lbnRzKCdnbWQ6TURfQ29uc3RyYWludHMnLCAnZ21kOnVzZUxpbWl0YXRpb24nKSxcbiAgICBmbGF0dGVuQXJyYXkoKSxcbiAgICBtYXBBcnJheShcbiAgICAgIGNvbWJpbmUoXG4gICAgICAgIGV4dHJhY3RMb2NhbGl6ZWRDaGFyYWN0ZXJTdHJpbmc8Q29uc3RyYWludFRyYW5zbGF0aW9ucz4oJ3RleHQnKSxcbiAgICAgICAgZXh0cmFjdFVybCgpXG4gICAgICApXG4gICAgKSxcbiAgICBtYXBBcnJheSgoW1t0ZXh0LCB0cmFuc2xhdGlvbnNdLCB1cmxdKSA9PiAoe1xuICAgICAgLi4uKHVybCAmJiB7IHVybCB9KSxcbiAgICAgIHRleHQsXG4gICAgICB0cmFuc2xhdGlvbnMsXG4gICAgfSkpXG4gIClcbn1cblxuLy8gZnJvbSBnbWQ6cmVzb3VyY2VDb25zdHJhaW50c1xuZXhwb3J0IGZ1bmN0aW9uIGV4dHJhY3RMaWNlbnNlcygpOiBDaGFpbmFibGVGdW5jdGlvbjxcbiAgWG1sRWxlbWVudCxcbiAgQXJyYXk8Q29uc3RyYWludD5cbj4ge1xuICByZXR1cm4gcGlwZShcbiAgICBmaW5kQ2hpbGRyZW5FbGVtZW50KCdnbWQ6TURfTGVnYWxDb25zdHJhaW50cycsIGZhbHNlKSxcbiAgICBmaWx0ZXJBcnJheShcbiAgICAgIHBpcGUoXG4gICAgICAgIGZpbmRDaGlsZHJlbkVsZW1lbnQoJ2dtZDpNRF9SZXN0cmljdGlvbkNvZGUnKSxcbiAgICAgICAgbWFwQXJyYXkocmVhZEF0dHJpYnV0ZSgnY29kZUxpc3RWYWx1ZScpKSxcbiAgICAgICAgbWFwKCh2YWx1ZXMpID0+IHZhbHVlcy5pbmRleE9mKCdsaWNlbnNlJykgPiAtMSlcbiAgICAgIClcbiAgICApLFxuICAgIG1hcEFycmF5KFxuICAgICAgY29tYmluZShcbiAgICAgICAgZmluZENoaWxkcmVuRWxlbWVudCgnZ21kOm90aGVyQ29uc3RyYWludHMnKSxcbiAgICAgICAgZmluZENoaWxkcmVuRWxlbWVudCgnZ21kOnVzZUxpbWl0YXRpb24nKVxuICAgICAgKVxuICAgICksXG4gICAgZmxhdHRlbkFycmF5KCksXG4gICAgZmxhdHRlbkFycmF5KCksXG4gICAgbWFwQXJyYXkoXG4gICAgICBjb21iaW5lKFxuICAgICAgICBleHRyYWN0TG9jYWxpemVkQ2hhcmFjdGVyU3RyaW5nPENvbnN0cmFpbnRUcmFuc2xhdGlvbnM+KCd0ZXh0JyksXG4gICAgICAgIGV4dHJhY3RVcmwoKVxuICAgICAgKVxuICAgICksXG4gICAgbWFwQXJyYXkoKFtbdGV4dCwgdHJhbnNsYXRpb25zXSwgdXJsXSkgPT4gKHtcbiAgICAgIC4uLih1cmwgJiYgeyB1cmwgfSksXG4gICAgICB0ZXh0LFxuICAgICAgdHJhbnNsYXRpb25zLFxuICAgIH0pKVxuICApXG59XG5cbmNvbnN0IGdldE1pbWVUeXBlID0gcGlwZShcbiAgZmluZFBhcmVudCgnZ21kOk1EX0Rpc3RyaWJ1dGlvbicpLFxuICBmaW5kTmVzdGVkRWxlbWVudCgnZ21kOmRpc3RyaWJ1dGlvbkZvcm1hdCcsICdnbWQ6TURfRm9ybWF0JywgJ2dtZDpuYW1lJyksXG4gIGV4dHJhY3RDaGFyYWN0ZXJTdHJpbmcoKSxcbiAgbWFwKG1hdGNoTWltZVR5cGUpXG4pXG5cbi8qKlxuICogRXh0cmFjdCBvbmxpbmUgcmVzb3VyY2VzIGZyb20gYW4gTURfRGlzdHJpYnV0aW9uIGVsZW1lbnRcbiAqIEBwYXJhbSBnZXRNaW1lVHlwZUZuIFRoaXMgZnVuY3Rpb24gc3RhcnRzIGZyb20gYSBnbWQ6dHJhbnNmZXJPcHRpb25zIGVsZW1lbnRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGV4dHJhY3REYXRhc2V0T25saW5lUmVzb3VyY2VzKFxuICBnZXRNaW1lVHlwZUZuOiBDaGFpbmFibGVGdW5jdGlvbjxYbWxFbGVtZW50LCBzdHJpbmc+XG4pOiBDaGFpbmFibGVGdW5jdGlvbjxYbWxFbGVtZW50LCBEYXRhc2V0T25saW5lUmVzb3VyY2VbXT4ge1xuICBjb25zdCBnZXRVcmwgPSBwaXBlKGZpbmRDaGlsZEVsZW1lbnQoJ2dtZDpsaW5rYWdlJyksIGV4dHJhY3RNYW5kYXRvcnlVcmwoKSlcbiAgY29uc3QgZ2V0UHJvdG9jb2xTdHIgPSBwaXBlKFxuICAgIGZpbmRDaGlsZEVsZW1lbnQoJ2dtZDpwcm90b2NvbCcpLFxuICAgIGV4dHJhY3RDaGFyYWN0ZXJTdHJpbmcoKVxuICApXG4gIGNvbnN0IGdldFByb3RvY29sID0gcGlwZShnZXRQcm90b2NvbFN0ciwgbWFwKG1hdGNoUHJvdG9jb2wpKVxuICBjb25zdCBnZXRPbmxpbmVGdW5jdGlvbiA9IHBpcGUoXG4gICAgZmluZE5lc3RlZEVsZW1lbnQoJ2dtZDpmdW5jdGlvbicsICdnbWQ6Q0lfT25MaW5lRnVuY3Rpb25Db2RlJyksXG4gICAgcmVhZEF0dHJpYnV0ZSgnY29kZUxpc3RWYWx1ZScpXG4gIClcbiAgY29uc3QgZ2V0SXNTZXJ2aWNlID0gcGlwZShcbiAgICBnZXRQcm90b2NvbCxcbiAgICBtYXAoKHByb3RvY29sKSA9PiBwcm90b2NvbCAhPT0gJ290aGVyJylcbiAgKVxuICBjb25zdCBnZXRJc0Rvd25sb2FkID0gcGlwZShcbiAgICBjb21iaW5lKGdldElzU2VydmljZSwgZ2V0T25saW5lRnVuY3Rpb24sIGdldFByb3RvY29sU3RyKSxcbiAgICBtYXAoXG4gICAgICAoW2lzU2VydmljZSwgb25saW5lRnVuY3Rpb24sIHByb3RvY29sU3RyXSkgPT5cbiAgICAgICAgKCFpc1NlcnZpY2UgJiYgb25saW5lRnVuY3Rpb24gPT09ICdkb3dubG9hZCcpIHx8XG4gICAgICAgIC9kb3dubG9hZC9pLnRlc3QocHJvdG9jb2xTdHIpXG4gICAgKVxuICApXG4gIGNvbnN0IGdldE5hbWUgPSBwaXBlKFxuICAgIGZpbmRDaGlsZEVsZW1lbnQoJ2dtZDpuYW1lJyksXG4gICAgZXh0cmFjdExvY2FsaXplZENoYXJhY3RlclN0cmluZzxPbmxpbmVSZXNvdXJjZVRyYW5zbGF0aW9ucz4oJ25hbWUnKVxuICApXG4gIGNvbnN0IGdldERlc2NyaXB0aW9uID0gcGlwZShcbiAgICBmaW5kQ2hpbGRFbGVtZW50KCdnbWQ6ZGVzY3JpcHRpb24nKSxcbiAgICBleHRyYWN0TG9jYWxpemVkQ2hhcmFjdGVyU3RyaW5nPE9ubGluZVJlc291cmNlVHJhbnNsYXRpb25zPignZGVzY3JpcHRpb24nKVxuICApXG4gIHJldHVybiBwaXBlKFxuICAgIGZpbmROZXN0ZWRFbGVtZW50cyhcbiAgICAgICdnbWQ6dHJhbnNmZXJPcHRpb25zJyxcbiAgICAgICdnbWQ6TURfRGlnaXRhbFRyYW5zZmVyT3B0aW9ucycsXG4gICAgICAnZ21kOm9uTGluZScsXG4gICAgICAnZ21kOkNJX09ubGluZVJlc291cmNlJ1xuICAgICksXG4gICAgbWFwQXJyYXkoXG4gICAgICBjb21iaW5lKFxuICAgICAgICBnZXRJc1NlcnZpY2UsXG4gICAgICAgIGdldElzRG93bmxvYWQsXG4gICAgICAgIGdldFByb3RvY29sLFxuICAgICAgICBnZXRVcmwsXG4gICAgICAgIGdldE5hbWUsXG4gICAgICAgIGdldERlc2NyaXB0aW9uLFxuICAgICAgICBnZXRNaW1lVHlwZUZuXG4gICAgICApXG4gICAgKSxcbiAgICBtYXBBcnJheShcbiAgICAgIChbXG4gICAgICAgIGlzU2VydmljZSxcbiAgICAgICAgaXNEb3dubG9hZCxcbiAgICAgICAgcHJvdG9jb2wsXG4gICAgICAgIHVybCxcbiAgICAgICAgW25hbWUsIG5hbWVUcmFuc2xhdGlvbnNdLFxuICAgICAgICBbZGVzY3JpcHRpb24sIGRlc2NyaXB0aW9uVHJhbnNsYXRpb25zXSxcbiAgICAgICAgbWltZVR5cGUsXG4gICAgICBdKSA9PiB7XG4gICAgICAgIGNvbnN0IHRyYW5zbGF0aW9ucyA9IHtcbiAgICAgICAgICAuLi5uYW1lVHJhbnNsYXRpb25zLFxuICAgICAgICAgIC4uLmRlc2NyaXB0aW9uVHJhbnNsYXRpb25zLFxuICAgICAgICB9XG4gICAgICAgIGlmIChpc1NlcnZpY2UpIHtcbiAgICAgICAgICBjb25zdCBoYXNJZGVudGlmaWVyID0gcHJvdG9jb2wgPT09ICd3bXMnIHx8IHByb3RvY29sID09PSAnd2ZzJ1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB0eXBlOiAnc2VydmljZScsXG4gICAgICAgICAgICB1cmw6IHVybCxcbiAgICAgICAgICAgIGFjY2Vzc1NlcnZpY2VQcm90b2NvbDogcHJvdG9jb2wsXG4gICAgICAgICAgICAuLi4obmFtZSAmJiBoYXNJZGVudGlmaWVyICYmIHsgaWRlbnRpZmllckluU2VydmljZTogbmFtZSB9KSxcbiAgICAgICAgICAgIC4uLihuYW1lICYmIHsgbmFtZSB9KSxcbiAgICAgICAgICAgIC4uLihkZXNjcmlwdGlvbiAmJiB7IGRlc2NyaXB0aW9uIH0pLFxuICAgICAgICAgICAgdHJhbnNsYXRpb25zLFxuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChpc0Rvd25sb2FkKSB7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHR5cGU6ICdkb3dubG9hZCcsXG4gICAgICAgICAgICB1cmw6IHVybCxcbiAgICAgICAgICAgIC4uLihuYW1lICYmIHsgbmFtZSB9KSxcbiAgICAgICAgICAgIC4uLihkZXNjcmlwdGlvbiAmJiB7IGRlc2NyaXB0aW9uIH0pLFxuICAgICAgICAgICAgLi4uKG1pbWVUeXBlICYmIHsgbWltZVR5cGUgfSksXG4gICAgICAgICAgICB0cmFuc2xhdGlvbnMsXG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB0eXBlOiAnbGluaycsXG4gICAgICAgICAgICB1cmw6IHVybCxcbiAgICAgICAgICAgIC4uLihuYW1lICYmIHsgbmFtZSB9KSxcbiAgICAgICAgICAgIC4uLihkZXNjcmlwdGlvbiAmJiB7IGRlc2NyaXB0aW9uIH0pLFxuICAgICAgICAgICAgdHJhbnNsYXRpb25zLFxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIClcbiAgKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0VXBkYXRlRnJlcXVlbmN5RnJvbUN1c3RvbVBlcmlvZChcbiAgaXNvUGVyaW9kOiBzdHJpbmdcbik6IFVwZGF0ZUZyZXF1ZW5jeUN1c3RvbSB7XG4gIGlmICghaXNvUGVyaW9kKSByZXR1cm4gbnVsbFxuICBjb25zdCBtYXRjaGVzID0gaXNvUGVyaW9kLm1hdGNoKFxuICAgIC9eLT9QKD86KFswLTldKylZKT8oPzooWzAtOV0rKU0pPyg/OihbMC05XSspRCk/VD8oPzooWzAtOV0rKUgpPy9cbiAgKVxuICBpZiAoIW1hdGNoZXMpIHJldHVybiBudWxsXG4gIGNvbnN0IHllYXJzID0gcGFyc2VJbnQobWF0Y2hlc1sxXSwgMTApIHx8IDBcbiAgY29uc3QgbW9udGhzID0gcGFyc2VJbnQobWF0Y2hlc1syXSwgMTApIHx8IDBcbiAgY29uc3QgZGF5cyA9IHBhcnNlSW50KG1hdGNoZXNbM10sIDEwKSB8fCAwXG4gIGNvbnN0IGhvdXJzID0gcGFyc2VJbnQobWF0Y2hlc1s0XSwgMTApIHx8IDBcbiAgaWYgKHllYXJzKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHBlcjogJ3llYXInLFxuICAgICAgdXBkYXRlZFRpbWVzOiAxLFxuICAgIH1cbiAgfSBlbHNlIGlmIChtb250aHMgPT09IDEpIHtcbiAgICByZXR1cm4ge1xuICAgICAgcGVyOiAnbW9udGgnLFxuICAgICAgdXBkYXRlZFRpbWVzOiAxLFxuICAgIH1cbiAgfSBlbHNlIGlmIChtb250aHMpIHtcbiAgICByZXR1cm4ge1xuICAgICAgcGVyOiAneWVhcicsXG4gICAgICB1cGRhdGVkVGltZXM6IE1hdGgucm91bmQoMTIgLyBtb250aHMpLFxuICAgIH1cbiAgfSBlbHNlIGlmIChkYXlzID09PSAxKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHBlcjogJ2RheScsXG4gICAgICB1cGRhdGVkVGltZXM6IDEsXG4gICAgfVxuICB9IGVsc2UgaWYgKGRheXMgPD0gNykge1xuICAgIHJldHVybiB7XG4gICAgICBwZXI6ICd3ZWVrJyxcbiAgICAgIHVwZGF0ZWRUaW1lczogTWF0aC5yb3VuZCg3IC8gZGF5cyAtIDAuMDAwMSksIC8vIHRoaXMgaXMgdG8gbWFrZSBzdXJlIHRoYXQgJ2V2ZXJ5IDIgZGF5cycgPSAnMyB0aW1lcyBwZXIgd2VlaydcbiAgICB9XG4gIH0gZWxzZSBpZiAoZGF5cykge1xuICAgIHJldHVybiB7XG4gICAgICBwZXI6ICdtb250aCcsXG4gICAgICB1cGRhdGVkVGltZXM6IE1hdGgucm91bmQoMzAgLyBkYXlzKSxcbiAgICB9XG4gIH0gZWxzZSBpZiAoaG91cnMpIHtcbiAgICByZXR1cm4ge1xuICAgICAgcGVyOiAnZGF5JyxcbiAgICAgIHVwZGF0ZWRUaW1lczogTWF0aC5yb3VuZCgyNCAvIGRheXMpLFxuICAgIH1cbiAgfVxuICByZXR1cm4gbnVsbFxufVxuXG4vLyBmcm9tIGdtZDpNRF9NYWludGVuYW5jZUluZm9ybWF0aW9uXG5leHBvcnQgZnVuY3Rpb24gZXh0cmFjdFVwZGF0ZUZyZXF1ZW5jeSgpOiBDaGFpbmFibGVGdW5jdGlvbjxcbiAgWG1sRWxlbWVudCxcbiAgVXBkYXRlRnJlcXVlbmN5XG4+IHtcbiAgcmV0dXJuIGZhbGxiYWNrKFxuICAgIHBpcGUoXG4gICAgICBmaW5kQ2hpbGRFbGVtZW50KCdnbWQ6TURfTWFpbnRlbmFuY2VGcmVxdWVuY3lDb2RlJyksXG4gICAgICByZWFkQXR0cmlidXRlKCdjb2RlTGlzdFZhbHVlJyksXG4gICAgICBtYXAoZ2V0VXBkYXRlRnJlcXVlbmN5RnJvbUZyZXF1ZW5jeUNvZGUpXG4gICAgKSxcbiAgICBwaXBlKFxuICAgICAgZmluZE5lc3RlZEVsZW1lbnQoXG4gICAgICAgICdnbWQ6dXNlckRlZmluZWRNYWludGVuYW5jZUZyZXF1ZW5jeScsXG4gICAgICAgICdndHM6VE1fUGVyaW9kRHVyYXRpb24nXG4gICAgICApLFxuICAgICAgcmVhZFRleHQoKSxcbiAgICAgIG1hcChnZXRVcGRhdGVGcmVxdWVuY3lGcm9tQ3VzdG9tUGVyaW9kKVxuICAgICksXG4gICAgbWFwKCgpID0+ICd1bmtub3duJylcbiAgKVxufVxuXG4vKipcbiAqIExvb2tzIGZvciBzcnY6U1ZfU2VydmljZUlkZW50aWZpY2F0aW9uIG9yIGdtZDpNRF9EYXRhSWRlbnRpZmljYXRpb24gZWxlbWVudFxuICogV2lsbCBmaW5kIHRoZSBmaXJzdCBvbmUgdGhhdCBleGlzdHMsIG5vdCByZWFkaW5nIHRoZSB0eXBlIG9mIHRoZSByZWNvcmRcbiAqICh0aGlzIGFsbG93cyB1c2luZyB0aGlzIGZ1bmN0aW9uIGluIG90aGVyIHNpbWlsYXIgc2NoZW1hcylcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGZpbmRJZGVudGlmaWNhdGlvbigpIHtcbiAgcmV0dXJuIHBpcGUoXG4gICAgZmluZENoaWxkRWxlbWVudCgnZ21kOmlkZW50aWZpY2F0aW9uSW5mbycsIGZhbHNlKSxcbiAgICBjb21iaW5lKFxuICAgICAgZmluZENoaWxkRWxlbWVudCgnZ21kOk1EX0RhdGFJZGVudGlmaWNhdGlvbicsIGZhbHNlKSxcbiAgICAgIGZpbmRDaGlsZEVsZW1lbnQoJ3NydjpTVl9TZXJ2aWNlSWRlbnRpZmljYXRpb24nLCBmYWxzZSlcbiAgICApLFxuICAgIGZpbHRlckFycmF5KChlbCkgPT4gZWwgIT09IG51bGwpLFxuICAgIGdldEF0SW5kZXgoMClcbiAgKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZXh0cmFjdElkZW50aWZpY2F0aW9uRGF0ZShcbiAgdHlwZTogJ2NyZWF0aW9uJyB8ICdyZXZpc2lvbicgfCAncHVibGljYXRpb24nXG4pIHtcbiAgcmV0dXJuIHBpcGUoXG4gICAgZmluZElkZW50aWZpY2F0aW9uKCksXG4gICAgZmluZE5lc3RlZEVsZW1lbnRzKCdnbWQ6Y2l0YXRpb24nLCAnZ21kOkNJX0NpdGF0aW9uJywgJ2dtZDpkYXRlJyksXG4gICAgZmlsdGVyQXJyYXkoXG4gICAgICBwaXBlKFxuICAgICAgICBmaW5kTmVzdGVkRWxlbWVudHMoXG4gICAgICAgICAgJ2dtZDpDSV9EYXRlJyxcbiAgICAgICAgICAnZ21kOmRhdGVUeXBlJyxcbiAgICAgICAgICAnZ21kOkNJX0RhdGVUeXBlQ29kZSdcbiAgICAgICAgKSxcbiAgICAgICAgZ2V0QXRJbmRleCgwKSxcbiAgICAgICAgcmVhZEF0dHJpYnV0ZSgnY29kZUxpc3RWYWx1ZScpLFxuICAgICAgICBtYXAoKHZhbHVlKSA9PiB2YWx1ZSA9PT0gdHlwZSlcbiAgICAgIClcbiAgICApLFxuICAgIGdldEF0SW5kZXgoMCksXG4gICAgZmluZE5lc3RlZEVsZW1lbnRzKCdnbWQ6Q0lfRGF0ZScsICdnbWQ6ZGF0ZScpLFxuICAgIGdldEF0SW5kZXgoMCksXG4gICAgZXh0cmFjdERhdGVUaW1lKClcbiAgKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0U3BhdGlhbFJlcHJlc2VudGF0aW9uRnJvbUNvZGUoXG4gIHNwYXRpYWxSZXByZXNlbnRhdGlvbkNvZGU6IHN0cmluZ1xuKTogU3BhdGlhbFJlcHJlc2VudGF0aW9uVHlwZSB8IG51bGwge1xuICBzd2l0Y2ggKHNwYXRpYWxSZXByZXNlbnRhdGlvbkNvZGUpIHtcbiAgICBjYXNlICdncmlkJzpcbiAgICBjYXNlICd2ZWN0b3InOlxuICAgIGNhc2UgJ3Rpbic6XG4gICAgY2FzZSAndGFibGUnOlxuICAgIGNhc2UgJ3BvaW50JzpcbiAgICAgIHJldHVybiBzcGF0aWFsUmVwcmVzZW50YXRpb25Db2RlXG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBudWxsXG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlYWRVbmlxdWVJZGVudGlmaWVyKHJvb3RFbDogWG1sRWxlbWVudCk6IHN0cmluZyB7XG4gIHJldHVybiBwaXBlKFxuICAgIGZpbmRDaGlsZEVsZW1lbnQoJ2dtZDpmaWxlSWRlbnRpZmllcicsIGZhbHNlKSxcbiAgICBleHRyYWN0Q2hhcmFjdGVyU3RyaW5nKClcbiAgKShyb290RWwpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZWFkS2luZChyb290RWw6IFhtbEVsZW1lbnQpOiBSZWNvcmRLaW5kIHtcbiAgcmV0dXJuIHBpcGUoXG4gICAgZmluZE5lc3RlZEVsZW1lbnQoJ2dtZDpoaWVyYXJjaHlMZXZlbCcsICdnbWQ6TURfU2NvcGVDb2RlJyksXG4gICAgcmVhZEF0dHJpYnV0ZSgnY29kZUxpc3RWYWx1ZScpLFxuICAgIG1hcChcbiAgICAgIChzY29wZUNvZGUpOiBSZWNvcmRLaW5kID0+XG4gICAgICAgIHNjb3BlQ29kZSA9PT0gJ3NlcnZpY2UnID8gJ3NlcnZpY2UnIDogJ2RhdGFzZXQnXG4gICAgKVxuICApKHJvb3RFbClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlYWRPd25lck9yZ2FuaXphdGlvbihyb290RWw6IFhtbEVsZW1lbnQpOiBPcmdhbml6YXRpb24ge1xuICByZXR1cm4gcGlwZShcbiAgICBmaW5kTmVzdGVkRWxlbWVudCgnZ21kOmNvbnRhY3QnLCAnZ21kOkNJX1Jlc3BvbnNpYmxlUGFydHknKSxcbiAgICBleHRyYWN0T3JnYW5pemF0aW9uKClcbiAgKShyb290RWwpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZWFkUmVzb3VyY2VVcGRhdGVkKHJvb3RFbDogWG1sRWxlbWVudCk6IERhdGUge1xuICByZXR1cm4gZXh0cmFjdElkZW50aWZpY2F0aW9uRGF0ZSgncmV2aXNpb24nKShyb290RWwpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZWFkUmVzb3VyY2VDcmVhdGVkKHJvb3RFbDogWG1sRWxlbWVudCk6IERhdGUge1xuICByZXR1cm4gZXh0cmFjdElkZW50aWZpY2F0aW9uRGF0ZSgnY3JlYXRpb24nKShyb290RWwpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZWFkUmVzb3VyY2VQdWJsaXNoZWQocm9vdEVsOiBYbWxFbGVtZW50KTogRGF0ZSB7XG4gIHJldHVybiBleHRyYWN0SWRlbnRpZmljYXRpb25EYXRlKCdwdWJsaWNhdGlvbicpKHJvb3RFbClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlYWRSZWNvcmRVcGRhdGVkKHJvb3RFbDogWG1sRWxlbWVudCk6IERhdGUge1xuICByZXR1cm4gcGlwZShmaW5kQ2hpbGRFbGVtZW50KCdnbWQ6ZGF0ZVN0YW1wJyksIGV4dHJhY3REYXRlVGltZSgpKShyb290RWwpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZWFkVGl0bGUoXG4gIHJvb3RFbDogWG1sRWxlbWVudCxcbiAgdHJhbnNsYXRpb25zOiBSZWNvcmRUcmFuc2xhdGlvbnNcbik6IHN0cmluZyB7XG4gIHJldHVybiBwaXBlKFxuICAgIGZpbmRJZGVudGlmaWNhdGlvbigpLFxuICAgIGZpbmROZXN0ZWRFbGVtZW50KCdnbWQ6Y2l0YXRpb24nLCAnZ21kOkNJX0NpdGF0aW9uJywgJ2dtZDp0aXRsZScpLFxuICAgIGV4dHJhY3RMb2NhbGl6ZWRDaGFyYWN0ZXJTdHJpbmcoJ3RpdGxlJywgdHJhbnNsYXRpb25zKSxcbiAgICBtYXAoKFt0aXRsZV0pID0+IHRpdGxlKVxuICApKHJvb3RFbClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlYWRBYnN0cmFjdChcbiAgcm9vdEVsOiBYbWxFbGVtZW50LFxuICB0cmFuc2xhdGlvbnM6IFJlY29yZFRyYW5zbGF0aW9uc1xuKTogc3RyaW5nIHtcbiAgcmV0dXJuIHBpcGUoXG4gICAgZmluZElkZW50aWZpY2F0aW9uKCksXG4gICAgZmluZENoaWxkRWxlbWVudCgnZ21kOmFic3RyYWN0JywgZmFsc2UpLFxuICAgIGV4dHJhY3RMb2NhbGl6ZWRDaGFyYWN0ZXJTdHJpbmcoJ2Fic3RyYWN0JywgdHJhbnNsYXRpb25zKSxcbiAgICBtYXAoKFthYnN0cmFjdF0pID0+IGFic3RyYWN0KVxuICApKHJvb3RFbClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlYWRDb250YWN0cyhyb290RWw6IFhtbEVsZW1lbnQpOiBJbmRpdmlkdWFsW10ge1xuICByZXR1cm4gcGlwZShcbiAgICBmaW5kQ2hpbGRyZW5FbGVtZW50KCdnbWQ6Y29udGFjdCcsIGZhbHNlKSxcbiAgICBtYXBBcnJheShmaW5kQ2hpbGRFbGVtZW50KCdnbWQ6Q0lfUmVzcG9uc2libGVQYXJ0eScsIGZhbHNlKSksXG4gICAgbWFwQXJyYXkoZXh0cmFjdEluZGl2aWR1YWwoKSlcbiAgKShyb290RWwpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZWFkQ29udGFjdHNGb3JSZXNvdXJjZShyb290RWw6IFhtbEVsZW1lbnQpOiBJbmRpdmlkdWFsW10ge1xuICByZXR1cm4gcGlwZShcbiAgICBmaW5kSWRlbnRpZmljYXRpb24oKSxcbiAgICBjb21iaW5lKFxuICAgICAgZmluZENoaWxkcmVuRWxlbWVudCgnZ21kOmNvbnRhY3QnLCBmYWxzZSksXG4gICAgICBmaW5kQ2hpbGRyZW5FbGVtZW50KCdnbWQ6cG9pbnRPZkNvbnRhY3QnLCBmYWxzZSlcbiAgICApLFxuICAgIGZsYXR0ZW5BcnJheSgpLFxuICAgIG1hcEFycmF5KGZpbmRDaGlsZEVsZW1lbnQoJ2dtZDpDSV9SZXNwb25zaWJsZVBhcnR5JywgZmFsc2UpKSxcbiAgICBtYXBBcnJheShleHRyYWN0SW5kaXZpZHVhbCgpKVxuICApKHJvb3RFbClcbn1cblxuLy8gZnJvbSBnbWQ6dGhlc2F1cnVzTmFtZVxuZXhwb3J0IGZ1bmN0aW9uIHJlYWRUaGVzYXVydXMocm9vdEVsOiBYbWxFbGVtZW50KTogVGhlc2F1cnVzTW9kZWwge1xuICBpZiAoIXJvb3RFbCkgcmV0dXJuIG51bGxcblxuICBjb25zdCBmaW5kSWRlbnRpZmllciA9IGZpbmROZXN0ZWRFbGVtZW50KFxuICAgICdnbWQ6Q0lfQ2l0YXRpb24nLFxuICAgICdnbWQ6aWRlbnRpZmllcicsXG4gICAgJ2dtZDpNRF9JZGVudGlmaWVyJyxcbiAgICAnZ21kOmNvZGUnXG4gIClcbiAgY29uc3QgaWQgPSBwaXBlKGZpbmRJZGVudGlmaWVyLCBleHRyYWN0Q2hhcmFjdGVyU3RyaW5nKCkpKHJvb3RFbClcbiAgY29uc3QgdXJsID0gcGlwZShmaW5kSWRlbnRpZmllciwgZXh0cmFjdFVybCgpKShyb290RWwpXG4gIGNvbnN0IG5hbWUgPSBwaXBlKFxuICAgIGZpbmROZXN0ZWRFbGVtZW50KCdnbWQ6Q0lfQ2l0YXRpb24nLCAnZ21kOnRpdGxlJyksXG4gICAgZXh0cmFjdENoYXJhY3RlclN0cmluZygpXG4gICkocm9vdEVsKVxuICByZXR1cm4ge1xuICAgIGlkLFxuICAgIC4uLihuYW1lICYmIHsgbmFtZSB9KSxcbiAgICAuLi4odXJsICYmIHsgdXJsIH0pLFxuICB9XG59XG5cbi8vIGZyb20gZ21kOk1EX0tleXdvcmRzXG5leHBvcnQgZnVuY3Rpb24gcmVhZEtleXdvcmRHcm91cChyb290RWw6IFhtbEVsZW1lbnQpOiBLZXl3b3JkW10ge1xuICBjb25zdCB0eXBlID0gcGlwZShcbiAgICBmaW5kQ2hpbGRyZW5FbGVtZW50KCdnbWQ6TURfS2V5d29yZFR5cGVDb2RlJyksXG4gICAgbWFwQXJyYXkocmVhZEF0dHJpYnV0ZSgnY29kZUxpc3RWYWx1ZScpKSxcbiAgICBtYXAoKHZhbHVlcykgPT4gZ2V0S2V5d29yZFR5cGVGcm9tS2V5d29yZFR5cGVDb2RlKHZhbHVlc1swXSkpXG4gICkocm9vdEVsKVxuICBjb25zdCB0aGVzYXVydXMgPSBwaXBlKFxuICAgIGZpbmROZXN0ZWRFbGVtZW50KCdnbWQ6dGhlc2F1cnVzTmFtZScpLFxuICAgIHJlYWRUaGVzYXVydXNcbiAgKShyb290RWwpXG4gIHJldHVybiBwaXBlKFxuICAgIGZpbmRDaGlsZHJlbkVsZW1lbnQoJ2dtZDprZXl3b3JkJyksXG4gICAgbWFwQXJyYXkoKGVsKSA9PiB7XG4gICAgICBjb25zdCBbbGFiZWwsIHRyYW5zbGF0aW9uc10gPVxuICAgICAgICBleHRyYWN0TG9jYWxpemVkQ2hhcmFjdGVyU3RyaW5nPEtleXdvcmRUcmFuc2xhdGlvbnM+KCdsYWJlbCcpKGVsKVxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4uKHRoZXNhdXJ1cyA/IHsgdGhlc2F1cnVzIH0gOiB7fSksXG4gICAgICAgIGxhYmVsLFxuICAgICAgICB0eXBlLFxuICAgICAgICB0cmFuc2xhdGlvbnMsXG4gICAgICB9IGFzIEtleXdvcmRcbiAgICB9KVxuICApKHJvb3RFbClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlYWRLZXl3b3Jkcyhyb290RWw6IFhtbEVsZW1lbnQpOiBLZXl3b3JkW10ge1xuICByZXR1cm4gcGlwZShcbiAgICBmaW5kSWRlbnRpZmljYXRpb24oKSxcbiAgICBmaW5kTmVzdGVkRWxlbWVudHMoJ2dtZDpkZXNjcmlwdGl2ZUtleXdvcmRzJywgJ2dtZDpNRF9LZXl3b3JkcycpLFxuICAgIG1hcEFycmF5KHJlYWRLZXl3b3JkR3JvdXApLFxuICAgIGZsYXR0ZW5BcnJheSgpXG4gICkocm9vdEVsKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVhZFN0YXR1cyhyb290RWw6IFhtbEVsZW1lbnQpOiBSZWNvcmRTdGF0dXMge1xuICByZXR1cm4gcGlwZShcbiAgICBmaW5kSWRlbnRpZmljYXRpb24oKSxcbiAgICBmaW5kQ2hpbGRFbGVtZW50KCdnbWQ6c3RhdHVzJywgZmFsc2UpLFxuICAgIGV4dHJhY3RTdGF0dXMoKVxuICApKHJvb3RFbClcbn1cblxuY29uc3QgZ2V0Q29uc3RyYWludHMgPSBwaXBlKFxuICBmaW5kSWRlbnRpZmljYXRpb24oKSxcbiAgZmluZENoaWxkcmVuRWxlbWVudCgnZ21kOnJlc291cmNlQ29uc3RyYWludHMnLCBmYWxzZSlcbilcblxuZXhwb3J0IGZ1bmN0aW9uIHJlYWRMZWdhbENvbnN0cmFpbnRzKHJvb3RFbDogWG1sRWxlbWVudCk6IENvbnN0cmFpbnRbXSB7XG4gIHJldHVybiBwaXBlKFxuICAgIGdldENvbnN0cmFpbnRzLFxuICAgIG1hcEFycmF5KGV4dHJhY3RMZWdhbENvbnN0cmFpbnRzKCkpLFxuICAgIGZsYXR0ZW5BcnJheSgpLFxuICAgIGZsYXR0ZW5BcnJheSgpXG4gICkocm9vdEVsKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVhZFNlY3VyaXR5Q29uc3RyYWludHMocm9vdEVsOiBYbWxFbGVtZW50KTogQ29uc3RyYWludFtdIHtcbiAgcmV0dXJuIHBpcGUoXG4gICAgZ2V0Q29uc3RyYWludHMsXG4gICAgbWFwQXJyYXkoZXh0cmFjdFNlY3VyaXR5Q29uc3RyYWludHMoKSksXG4gICAgZmxhdHRlbkFycmF5KClcbiAgKShyb290RWwpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZWFkT3RoZXJDb25zdHJhaW50cyhyb290RWw6IFhtbEVsZW1lbnQpOiBDb25zdHJhaW50W10ge1xuICByZXR1cm4gcGlwZShcbiAgICBnZXRDb25zdHJhaW50cyxcbiAgICBtYXBBcnJheShleHRyYWN0T3RoZXJDb25zdHJhaW50cygpKSxcbiAgICBmbGF0dGVuQXJyYXkoKVxuICApKHJvb3RFbClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlYWRMaWNlbnNlcyhyb290RWw6IFhtbEVsZW1lbnQpOiBDb25zdHJhaW50W10ge1xuICByZXR1cm4gcGlwZShcbiAgICBnZXRDb25zdHJhaW50cyxcbiAgICBtYXBBcnJheShleHRyYWN0TGljZW5zZXMoKSksXG4gICAgZmxhdHRlbkFycmF5KClcbiAgKShyb290RWwpXG59XG5cbi8vIG5vdCB1c2VkIHlldFxuZXhwb3J0IGZ1bmN0aW9uIHJlYWRJc29Ub3BpY3Mocm9vdEVsOiBYbWxFbGVtZW50KTogc3RyaW5nW10ge1xuICByZXR1cm4gcGlwZShcbiAgICBmaW5kSWRlbnRpZmljYXRpb24oKSxcbiAgICBmaW5kQ2hpbGRyZW5FbGVtZW50KCdnbWQ6TURfVG9waWNDYXRlZ29yeUNvZGUnLCB0cnVlKSxcbiAgICBtYXBBcnJheShyZWFkVGV4dCgpKVxuICApKHJvb3RFbClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlYWRTcGF0aWFsUmVwcmVzZW50YXRpb24oXG4gIHJvb3RFbDogWG1sRWxlbWVudFxuKTogU3BhdGlhbFJlcHJlc2VudGF0aW9uVHlwZSB8IG51bGwge1xuICByZXR1cm4gcGlwZShcbiAgICBmaW5kSWRlbnRpZmljYXRpb24oKSxcbiAgICBmaW5kTmVzdGVkRWxlbWVudChcbiAgICAgICdnbWQ6c3BhdGlhbFJlcHJlc2VudGF0aW9uVHlwZScsXG4gICAgICAnZ21kOk1EX1NwYXRpYWxSZXByZXNlbnRhdGlvblR5cGVDb2RlJ1xuICAgICksXG4gICAgcmVhZEF0dHJpYnV0ZSgnY29kZUxpc3RWYWx1ZScpLFxuICAgIG1hcChnZXRTcGF0aWFsUmVwcmVzZW50YXRpb25Gcm9tQ29kZSlcbiAgKShyb290RWwpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZWFkT3ZlcnZpZXdzKHJvb3RFbDogWG1sRWxlbWVudCk6IEdyYXBoaWNPdmVydmlld1tdIHtcbiAgcmV0dXJuIHBpcGUoXG4gICAgZmluZElkZW50aWZpY2F0aW9uKCksXG4gICAgZmluZENoaWxkcmVuRWxlbWVudCgnZ21kOmdyYXBoaWNPdmVydmlldycsIGZhbHNlKSxcbiAgICBtYXBBcnJheShcbiAgICAgIGNvbWJpbmUoXG4gICAgICAgIHBpcGUoZmluZENoaWxkRWxlbWVudCgnZ21kOmZpbGVOYW1lJyksIGV4dHJhY3RNYW5kYXRvcnlVcmwoKSksXG4gICAgICAgIHBpcGUoZmluZENoaWxkRWxlbWVudCgnZ21kOmZpbGVEZXNjcmlwdGlvbicpLCBleHRyYWN0Q2hhcmFjdGVyU3RyaW5nKCkpXG4gICAgICApXG4gICAgKSxcbiAgICBtYXBBcnJheSgoW3VybCwgZGVzY3JpcHRpb25dKSA9PiAoe1xuICAgICAgdXJsLFxuICAgICAgLi4uKGRlc2NyaXB0aW9uICYmIHsgZGVzY3JpcHRpb24gfSksXG4gICAgfSkpXG4gICkocm9vdEVsKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVhZExpbmVhZ2UoXG4gIHJvb3RFbDogWG1sRWxlbWVudCxcbiAgdHJhbnNsYXRpb25zOiBSZWNvcmRUcmFuc2xhdGlvbnNcbik6IHN0cmluZyB7XG4gIHJldHVybiBwaXBlKFxuICAgIGZpbmROZXN0ZWRFbGVtZW50KFxuICAgICAgJ2dtZDpkYXRhUXVhbGl0eUluZm8nLFxuICAgICAgJ2dtZDpEUV9EYXRhUXVhbGl0eScsXG4gICAgICAnZ21kOmxpbmVhZ2UnLFxuICAgICAgJ2dtZDpMSV9MaW5lYWdlJyxcbiAgICAgICdnbWQ6c3RhdGVtZW50J1xuICAgICksXG4gICAgZXh0cmFjdExvY2FsaXplZENoYXJhY3RlclN0cmluZygnbGluZWFnZScsIHRyYW5zbGF0aW9ucyksXG4gICAgbWFwKChbbGluZWFnZV0pID0+IGxpbmVhZ2UpXG4gICkocm9vdEVsKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVhZFVwZGF0ZUZyZXF1ZW5jeShyb290RWw6IFhtbEVsZW1lbnQpOiBVcGRhdGVGcmVxdWVuY3kge1xuICByZXR1cm4gcGlwZShcbiAgICBmaW5kSWRlbnRpZmljYXRpb24oKSxcbiAgICBmaW5kTmVzdGVkRWxlbWVudChcbiAgICAgICdnbWQ6cmVzb3VyY2VNYWludGVuYW5jZScsXG4gICAgICAnZ21kOk1EX01haW50ZW5hbmNlSW5mb3JtYXRpb24nXG4gICAgKSxcbiAgICBleHRyYWN0VXBkYXRlRnJlcXVlbmN5KCksXG4gICAgbWFwKCh1cGRhdGVGcmVxdWVuY3kpID0+IHVwZGF0ZUZyZXF1ZW5jeSB8fCAndW5rbm93bicpXG4gICkocm9vdEVsKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZXh0cmFjdFNlcnZpY2VPbmxpbmVSZXNvdXJjZXMoKTogQ2hhaW5hYmxlRnVuY3Rpb248XG4gIFhtbEVsZW1lbnQsXG4gIFNlcnZpY2VPbmxpbmVSZXNvdXJjZVtdXG4+IHtcbiAgY29uc3QgZ2V0VXJsID0gcGlwZShmaW5kQ2hpbGRFbGVtZW50KCdnbWQ6bGlua2FnZScpLCBleHRyYWN0TWFuZGF0b3J5VXJsKCkpXG4gIGNvbnN0IGdldFByb3RvY29sU3RyID0gcGlwZShcbiAgICBmaW5kQ2hpbGRFbGVtZW50KCdnbWQ6cHJvdG9jb2wnKSxcbiAgICBleHRyYWN0Q2hhcmFjdGVyU3RyaW5nKClcbiAgKVxuICBjb25zdCBnZXRQcm90b2NvbCA9IHBpcGUoZ2V0UHJvdG9jb2xTdHIsIG1hcChtYXRjaFByb3RvY29sKSlcbiAgY29uc3QgZ2V0T25saW5lRnVuY3Rpb24gPSBwaXBlKFxuICAgIGZpbmROZXN0ZWRFbGVtZW50KCdnbWQ6ZnVuY3Rpb24nLCAnZ21kOkNJX09uTGluZUZ1bmN0aW9uQ29kZScpLFxuICAgIHJlYWRBdHRyaWJ1dGUoJ2NvZGVMaXN0VmFsdWUnKVxuICApXG4gIGNvbnN0IGdldElzTGluayA9IHBpcGUoXG4gICAgZ2V0T25saW5lRnVuY3Rpb24sXG4gICAgbWFwKChvbmxpbmVGdW5jdGlvbikgPT4gb25saW5lRnVuY3Rpb24gPT09ICdpbmZvcm1hdGlvbicpXG4gIClcbiAgY29uc3QgZ2V0TmFtZSA9IHBpcGUoXG4gICAgZmluZENoaWxkRWxlbWVudCgnZ21kOm5hbWUnKSxcbiAgICBleHRyYWN0TG9jYWxpemVkQ2hhcmFjdGVyU3RyaW5nPE9ubGluZVJlc291cmNlVHJhbnNsYXRpb25zPignbmFtZScpXG4gIClcbiAgY29uc3QgZ2V0RGVzY3JpcHRpb24gPSBwaXBlKFxuICAgIGZpbmRDaGlsZEVsZW1lbnQoJ2dtZDpkZXNjcmlwdGlvbicpLFxuICAgIGV4dHJhY3RMb2NhbGl6ZWRDaGFyYWN0ZXJTdHJpbmc8T25saW5lUmVzb3VyY2VUcmFuc2xhdGlvbnM+KFxuICAgICAgJ2Rlc2NyaXB0aW9uJyxcbiAgICAgIHt9XG4gICAgKVxuICApXG4gIHJldHVybiBwaXBlKFxuICAgIGZpbmROZXN0ZWRFbGVtZW50cyhcbiAgICAgICdnbWQ6dHJhbnNmZXJPcHRpb25zJyxcbiAgICAgICdnbWQ6TURfRGlnaXRhbFRyYW5zZmVyT3B0aW9ucycsXG4gICAgICAnZ21kOm9uTGluZScsXG4gICAgICAnZ21kOkNJX09ubGluZVJlc291cmNlJ1xuICAgICksXG4gICAgbWFwQXJyYXkoY29tYmluZShnZXRJc0xpbmssIGdldFByb3RvY29sLCBnZXRVcmwsIGdldE5hbWUsIGdldERlc2NyaXB0aW9uKSksXG4gICAgbWFwQXJyYXkoXG4gICAgICAoW1xuICAgICAgICBpc0xpbmssXG4gICAgICAgIHByb3RvY29sLFxuICAgICAgICB1cmwsXG4gICAgICAgIFtuYW1lLCBuYW1lVHJhbnNsYXRpb25zXSxcbiAgICAgICAgW2Rlc2NyaXB0aW9uLCBkZXNjcmlwdGlvblRyYW5zbGF0aW9uc10sXG4gICAgICBdKSA9PiB7XG4gICAgICAgIGNvbnN0IHRyYW5zbGF0aW9ucyA9IHtcbiAgICAgICAgICAuLi5uYW1lVHJhbnNsYXRpb25zLFxuICAgICAgICAgIC4uLmRlc2NyaXB0aW9uVHJhbnNsYXRpb25zLFxuICAgICAgICB9XG4gICAgICAgIGlmIChpc0xpbmspIHtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdHlwZTogJ2xpbmsnLFxuICAgICAgICAgICAgdXJsOiB1cmwsXG4gICAgICAgICAgICAuLi4obmFtZSAmJiB7IG5hbWUgfSksXG4gICAgICAgICAgICAuLi4oZGVzY3JpcHRpb24gJiYgeyBkZXNjcmlwdGlvbiB9KSxcbiAgICAgICAgICAgIHRyYW5zbGF0aW9ucyxcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHR5cGU6ICdlbmRwb2ludCcsXG4gICAgICAgICAgICBlbmRwb2ludFVybDogdXJsLFxuICAgICAgICAgICAgcHJvdG9jb2wsXG4gICAgICAgICAgICAuLi4oZGVzY3JpcHRpb24gJiYgeyBkZXNjcmlwdGlvbiB9KSxcbiAgICAgICAgICAgIHRyYW5zbGF0aW9ucyxcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICApXG4gIClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlYWRPbmxpbmVSZXNvdXJjZXMocm9vdEVsOiBYbWxFbGVtZW50KTogT25saW5lUmVzb3VyY2VbXSB7XG4gIGlmIChyZWFkS2luZChyb290RWwpID09PSAnZGF0YXNldCcpIHtcbiAgICByZXR1cm4gcGlwZShcbiAgICAgIGZpbmROZXN0ZWRFbGVtZW50cygnZ21kOmRpc3RyaWJ1dGlvbkluZm8nLCAnZ21kOk1EX0Rpc3RyaWJ1dGlvbicpLFxuICAgICAgbWFwQXJyYXkoKGVsKSA9PiBleHRyYWN0RGF0YXNldE9ubGluZVJlc291cmNlcyhnZXRNaW1lVHlwZSkoZWwpKSxcbiAgICAgIGZsYXR0ZW5BcnJheSgpXG4gICAgKShyb290RWwpXG4gIH1cbiAgcmV0dXJuIHBpcGUoXG4gICAgZmluZE5lc3RlZEVsZW1lbnRzKCdnbWQ6ZGlzdHJpYnV0aW9uSW5mbycsICdnbWQ6TURfRGlzdHJpYnV0aW9uJyksXG4gICAgbWFwQXJyYXkoZXh0cmFjdFNlcnZpY2VPbmxpbmVSZXNvdXJjZXMoKSksXG4gICAgZmxhdHRlbkFycmF5KClcbiAgKShyb290RWwpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZWFkVGVtcG9yYWxFeHRlbnRzKHJvb3RFbDogWG1sRWxlbWVudCkge1xuICByZXR1cm4gcGlwZShcbiAgICBmaW5kSWRlbnRpZmljYXRpb24oKSxcbiAgICBmaW5kTmVzdGVkRWxlbWVudHMoJ2dtZDpleHRlbnQnLCAnZ21kOkVYX0V4dGVudCcsICdnbWQ6dGVtcG9yYWxFbGVtZW50JyksXG4gICAgbWFwQXJyYXkoXG4gICAgICBjb21iaW5lKFxuICAgICAgICBmaW5kTmVzdGVkRWxlbWVudChcbiAgICAgICAgICAnZ21kOkVYX1RlbXBvcmFsRXh0ZW50JyxcbiAgICAgICAgICAnZ21kOmV4dGVudCcsXG4gICAgICAgICAgJ2dtbDpUaW1lUGVyaW9kJ1xuICAgICAgICApLFxuICAgICAgICBmaW5kTmVzdGVkRWxlbWVudChcbiAgICAgICAgICAnZ21kOkVYX1RlbXBvcmFsRXh0ZW50JyxcbiAgICAgICAgICAnZ21kOmV4dGVudCcsXG4gICAgICAgICAgJ2dtbDpUaW1lSW5zdGFudCdcbiAgICAgICAgKVxuICAgICAgKVxuICAgICksXG4gICAgbWFwQXJyYXkoKFtwZXJpb2RFbCwgaW5zdGFudEVsXSkgPT4ge1xuICAgICAgaWYgKHBlcmlvZEVsKSB7XG4gICAgICAgIHJldHVybiBwaXBlKFxuICAgICAgICAgIGNvbWJpbmUoXG4gICAgICAgICAgICBwaXBlKFxuICAgICAgICAgICAgICBmaW5kQ2hpbGRFbGVtZW50KCdnbWw6YmVnaW5Qb3NpdGlvbicsIGZhbHNlKSxcbiAgICAgICAgICAgICAgcmVhZFRleHQoKSxcbiAgICAgICAgICAgICAgbWFwKChkYXRlU3RyKSA9PiAoZGF0ZVN0ciA/IG5ldyBEYXRlKGRhdGVTdHIpIDogbnVsbCkpXG4gICAgICAgICAgICApLFxuICAgICAgICAgICAgcGlwZShcbiAgICAgICAgICAgICAgZmluZENoaWxkRWxlbWVudCgnZ21sOmVuZFBvc2l0aW9uJywgZmFsc2UpLFxuICAgICAgICAgICAgICByZWFkVGV4dCgpLFxuICAgICAgICAgICAgICBtYXAoKGRhdGVTdHIpID0+IChkYXRlU3RyID8gbmV3IERhdGUoZGF0ZVN0cikgOiBudWxsKSlcbiAgICAgICAgICAgIClcbiAgICAgICAgICApLFxuICAgICAgICAgIG1hcCgoW3N0YXJ0LCBlbmRdKSA9PiAoe1xuICAgICAgICAgICAgc3RhcnQsXG4gICAgICAgICAgICBlbmQsXG4gICAgICAgICAgfSkpXG4gICAgICAgICkocGVyaW9kRWwpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gcGlwZShcbiAgICAgICAgICBmaW5kQ2hpbGRFbGVtZW50KCdnbWw6dGltZVBvc2l0aW9uJywgZmFsc2UpLFxuICAgICAgICAgIHJlYWRUZXh0KCksXG4gICAgICAgICAgbWFwKChkYXRlU3RyKSA9PiAoZGF0ZVN0ciA/IG5ldyBEYXRlKGRhdGVTdHIpIDogbnVsbCkpLFxuICAgICAgICAgIG1hcCgoZGF0ZSkgPT4gKHtcbiAgICAgICAgICAgIHN0YXJ0OiBkYXRlLFxuICAgICAgICAgIH0pKVxuICAgICAgICApKGluc3RhbnRFbClcbiAgICAgIH1cbiAgICB9KVxuICApKHJvb3RFbClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlYWRTcGF0aWFsRXh0ZW50cyhyb290RWw6IFhtbEVsZW1lbnQpIHtcbiAgY29uc3QgZXh0cmFjdEdlb21ldHJ5ID0gKHJvb3RFbDogWG1sRWxlbWVudCk6IEdlb21ldHJ5ID0+IHtcbiAgICBpZiAoIXJvb3RFbCkgcmV0dXJuIG51bGxcbiAgICByZXR1cm4gcGlwZShcbiAgICAgIGZpbmRDaGlsZEVsZW1lbnQoJ2dtZDpwb2x5Z29uJywgZmFsc2UpLFxuICAgICAgZmlyc3RDaGlsZEVsZW1lbnQsXG4gICAgICBtYXAoKGVsKSA9PiAoZWwgPyByZWFkR2VvbWV0cnkoZWwpIDogbnVsbCkpXG4gICAgKShyb290RWwpXG4gIH1cblxuICBjb25zdCBleHRyYWN0QkJveCA9IChcbiAgICByb290RWw6IFhtbEVsZW1lbnRcbiAgKTogW251bWJlciwgbnVtYmVyLCBudW1iZXIsIG51bWJlcl0gPT4ge1xuICAgIGlmICghcm9vdEVsKSByZXR1cm4gbnVsbFxuICAgIHJldHVybiBwaXBlKFxuICAgICAgY29tYmluZShcbiAgICAgICAgcGlwZShmaW5kQ2hpbGRFbGVtZW50KCdnbWQ6d2VzdEJvdW5kTG9uZ2l0dWRlJyksIGV4dHJhY3REZWNpbWFsKCkpLFxuICAgICAgICBwaXBlKGZpbmRDaGlsZEVsZW1lbnQoJ2dtZDpzb3V0aEJvdW5kTGF0aXR1ZGUnKSwgZXh0cmFjdERlY2ltYWwoKSksXG4gICAgICAgIHBpcGUoZmluZENoaWxkRWxlbWVudCgnZ21kOmVhc3RCb3VuZExvbmdpdHVkZScpLCBleHRyYWN0RGVjaW1hbCgpKSxcbiAgICAgICAgcGlwZShmaW5kQ2hpbGRFbGVtZW50KCdnbWQ6bm9ydGhCb3VuZExhdGl0dWRlJyksIGV4dHJhY3REZWNpbWFsKCkpXG4gICAgICApXG4gICAgKShyb290RWwpXG4gIH1cblxuICBjb25zdCBleHRyYWN0RGVzY3JpcHRpb24gPSAoXG4gICAgcm9vdEVsOiBYbWxFbGVtZW50XG4gICk6IFtzdHJpbmcsIE1vZGVsVHJhbnNsYXRpb25zXSA9PiB7XG4gICAgaWYgKCFyb290RWwpIHJldHVybiBbbnVsbCwge31dXG4gICAgcmV0dXJuIHBpcGUoXG4gICAgICBmaW5kTmVzdGVkRWxlbWVudChcbiAgICAgICAgJ2dtZDpnZW9ncmFwaGljSWRlbnRpZmllcicsXG4gICAgICAgICdnbWQ6TURfSWRlbnRpZmllcicsXG4gICAgICAgICdnbWQ6Y29kZSdcbiAgICAgICksXG4gICAgICBleHRyYWN0TG9jYWxpemVkQ2hhcmFjdGVyU3RyaW5nKCdkZXNjcmlwdGlvbicpXG4gICAgKShyb290RWwpXG4gIH1cblxuICByZXR1cm4gcGlwZShcbiAgICBmaW5kSWRlbnRpZmljYXRpb24oKSxcbiAgICBmaW5kTmVzdGVkRWxlbWVudHMoJ2dtZDpleHRlbnQnLCAnZ21kOkVYX0V4dGVudCcsICdnbWQ6Z2VvZ3JhcGhpY0VsZW1lbnQnKSxcbiAgICBtYXBBcnJheShcbiAgICAgIGNvbWJpbmUoXG4gICAgICAgIHBpcGUoZmluZENoaWxkRWxlbWVudCgnZ21kOkVYX0JvdW5kaW5nUG9seWdvbicpLCBleHRyYWN0R2VvbWV0cnkpLFxuICAgICAgICBwaXBlKGZpbmRDaGlsZEVsZW1lbnQoJ2dtZDpFWF9HZW9ncmFwaGljQm91bmRpbmdCb3gnKSwgZXh0cmFjdEJCb3gpLFxuICAgICAgICBwaXBlKFxuICAgICAgICAgIGZpbmRDaGlsZEVsZW1lbnQoJ2dtZDpFWF9HZW9ncmFwaGljRGVzY3JpcHRpb24nKSxcbiAgICAgICAgICBleHRyYWN0RGVzY3JpcHRpb25cbiAgICAgICAgKVxuICAgICAgKVxuICAgICksXG4gICAgZmlsdGVyQXJyYXkoXG4gICAgICAoW2dlb21ldHJ5LCBiYm94LCBbZGVzY3JpcHRpb25dXSkgPT4gISFnZW9tZXRyeSB8fCAhIWJib3ggfHwgISFkZXNjcmlwdGlvblxuICAgICksXG4gICAgbWFwQXJyYXkoKFtnZW9tZXRyeSwgYmJveCwgW2Rlc2NyaXB0aW9uLCB0cmFuc2xhdGlvbnNdXSkgPT4ge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4uKGdlb21ldHJ5ICYmIHsgZ2VvbWV0cnkgfSksXG4gICAgICAgIC4uLihiYm94ICYmIHsgYmJveCB9KSxcbiAgICAgICAgLi4uKGRlc2NyaXB0aW9uICYmIHsgZGVzY3JpcHRpb24gfSksXG4gICAgICAgIHRyYW5zbGF0aW9ucyxcbiAgICAgIH1cbiAgICB9KVxuICApKHJvb3RFbClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlYWRPdGhlckxhbmd1YWdlcyhyb290RWw6IFhtbEVsZW1lbnQpOiBMYW5ndWFnZUNvZGVbXSB7XG4gIGNvbnN0IGRlZmF1bHRMYW5ndWFnZSA9IHJlYWREZWZhdWx0TGFuZ3VhZ2Uocm9vdEVsKVxuICByZXR1cm4gcGlwZShcbiAgICBmaW5kQ2hpbGRyZW5FbGVtZW50KCdnbWQ6bG9jYWxlJywgZmFsc2UpLFxuICAgIG1hcEFycmF5KFxuICAgICAgcGlwZShcbiAgICAgICAgZmluZENoaWxkRWxlbWVudCgnZ21kOkxhbmd1YWdlQ29kZScpLFxuICAgICAgICByZWFkQXR0cmlidXRlKCdjb2RlTGlzdFZhbHVlJyksXG4gICAgICAgIG1hcCgobGFuZykgPT4gTEFOR18zX1RPXzJfTUFQUEVSW2xhbmcudG9Mb3dlckNhc2UoKV0pXG4gICAgICApXG4gICAgKSxcbiAgICBtYXAoKGxhbmd1YWdlcykgPT4gKGxhbmd1YWdlcy5sZW5ndGggPyBsYW5ndWFnZXMgOiBbZGVmYXVsdExhbmd1YWdlXSkpXG4gICkocm9vdEVsKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVhZERlZmF1bHRMYW5ndWFnZShyb290RWw6IFhtbEVsZW1lbnQpOiBMYW5ndWFnZUNvZGUge1xuICByZXR1cm4gcGlwZShcbiAgICBmaW5kQ2hpbGRFbGVtZW50KCdnbWQ6bGFuZ3VhZ2UnLCBmYWxzZSksXG4gICAgZmluZENoaWxkRWxlbWVudCgnZ21kOkxhbmd1YWdlQ29kZScpLFxuICAgIHJlYWRBdHRyaWJ1dGUoJ2NvZGVMaXN0VmFsdWUnKSxcbiAgICBtYXAoKGxhbmcpID0+IChsYW5nID8gTEFOR18zX1RPXzJfTUFQUEVSW2xhbmcudG9Mb3dlckNhc2UoKV0gOiBudWxsKSlcbiAgKShyb290RWwpXG59XG4iXX0=
@@ -0,0 +1,31 @@
1
+ import GML32 from 'ol/format/GML32';
2
+ import GeoJSON from 'ol/format/GeoJSON';
3
+ import { parse } from 'ol/xml';
4
+ import { createDocument, getRootElement, parseXmlString, xmlToString, } from '../../xml-utils';
5
+ export function readGeometry(el) {
6
+ const xmlDoc = createDocument(el);
7
+ xmlDoc.root.attributes['xmlns'] = 'http://www.opengis.net/gml/3.2';
8
+ const gmlString = xmlToString(xmlDoc);
9
+ const doc = parse(gmlString);
10
+ // we need an intermediate node to be able to parse the GML
11
+ const node = document.createElement('pre');
12
+ node.appendChild(doc.documentElement);
13
+ const gml32Format = new GML32();
14
+ // eslint-disable-next-line @typescript-eslint/ban-ts-comment
15
+ // @ts-ignore
16
+ const geometry = gml32Format.readGeometryFromNode(node);
17
+ const geojsonFormat = new GeoJSON();
18
+ return geojsonFormat.writeGeometryObject(geometry);
19
+ }
20
+ export function writeGeometry(geometryObject) {
21
+ const geojsonFormat = new GeoJSON();
22
+ const geometry = geojsonFormat.readGeometry(geometryObject);
23
+ const gml32Format = new GML32();
24
+ const node = gml32Format.writeGeometryNode(geometry);
25
+ // eslint-disable-next-line @typescript-eslint/ban-ts-comment
26
+ // @ts-ignore
27
+ const element = node.firstElementChild;
28
+ const gmlString = new XMLSerializer().serializeToString(element);
29
+ return getRootElement(parseXmlString(gmlString));
30
+ }
31
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2VvbWV0cnkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2FwaS9tZXRhZGF0YS1jb252ZXJ0ZXIvc3JjL2xpYi9pc28xOTEzOS91dGlscy9nZW9tZXRyeS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQSxPQUFPLEtBQUssTUFBTSxpQkFBaUIsQ0FBQTtBQUNuQyxPQUFPLE9BQU8sTUFBTSxtQkFBbUIsQ0FBQTtBQUN2QyxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sUUFBUSxDQUFBO0FBQzlCLE9BQU8sRUFDTCxjQUFjLEVBQ2QsY0FBYyxFQUNkLGNBQWMsRUFDZCxXQUFXLEdBQ1osTUFBTSxpQkFBaUIsQ0FBQTtBQUV4QixNQUFNLFVBQVUsWUFBWSxDQUFDLEVBQWM7SUFDekMsTUFBTSxNQUFNLEdBQUcsY0FBYyxDQUFDLEVBQUUsQ0FBQyxDQUFBO0lBQ2pDLE1BQU0sQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxHQUFHLGdDQUFnQyxDQUFBO0lBQ2xFLE1BQU0sU0FBUyxHQUFHLFdBQVcsQ0FBQyxNQUFNLENBQUMsQ0FBQTtJQUNyQyxNQUFNLEdBQUcsR0FBRyxLQUFLLENBQUMsU0FBUyxDQUFDLENBQUE7SUFDNUIsMkRBQTJEO0lBQzNELE1BQU0sSUFBSSxHQUFHLFFBQVEsQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLENBQUE7SUFDMUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsZUFBZSxDQUFDLENBQUE7SUFDckMsTUFBTSxXQUFXLEdBQUcsSUFBSSxLQUFLLEVBQUUsQ0FBQTtJQUMvQiw2REFBNkQ7SUFDN0QsYUFBYTtJQUNiLE1BQU0sUUFBUSxHQUFHLFdBQVcsQ0FBQyxvQkFBb0IsQ0FBQyxJQUFJLENBQUMsQ0FBQTtJQUN2RCxNQUFNLGFBQWEsR0FBRyxJQUFJLE9BQU8sRUFBRSxDQUFBO0lBQ25DLE9BQU8sYUFBYSxDQUFDLG1CQUFtQixDQUFDLFFBQVEsQ0FBQyxDQUFBO0FBQ3BELENBQUM7QUFFRCxNQUFNLFVBQVUsYUFBYSxDQUFDLGNBQXdCO0lBQ3BELE1BQU0sYUFBYSxHQUFHLElBQUksT0FBTyxFQUFFLENBQUE7SUFDbkMsTUFBTSxRQUFRLEdBQUcsYUFBYSxDQUFDLFlBQVksQ0FBQyxjQUFjLENBQUMsQ0FBQTtJQUMzRCxNQUFNLFdBQVcsR0FBRyxJQUFJLEtBQUssRUFBRSxDQUFBO0lBQy9CLE1BQU0sSUFBSSxHQUFHLFdBQVcsQ0FBQyxpQkFBaUIsQ0FBQyxRQUFRLENBQUMsQ0FBQTtJQUNwRCw2REFBNkQ7SUFDN0QsYUFBYTtJQUNiLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxpQkFBZ0MsQ0FBQTtJQUNyRCxNQUFNLFNBQVMsR0FBRyxJQUFJLGFBQWEsRUFBRSxDQUFDLGlCQUFpQixDQUFDLE9BQU8sQ0FBQyxDQUFBO0lBQ2hFLE9BQU8sY0FBYyxDQUFDLGNBQWMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFBO0FBQ2xELENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBYbWxFbGVtZW50IH0gZnJvbSAnQHJncm92ZS9wYXJzZS14bWwnXG5pbXBvcnQgeyBHZW9tZXRyeSB9IGZyb20gJ2dlb2pzb24nXG5pbXBvcnQgR01MMzIgZnJvbSAnb2wvZm9ybWF0L0dNTDMyJ1xuaW1wb3J0IEdlb0pTT04gZnJvbSAnb2wvZm9ybWF0L0dlb0pTT04nXG5pbXBvcnQgeyBwYXJzZSB9IGZyb20gJ29sL3htbCdcbmltcG9ydCB7XG4gIGNyZWF0ZURvY3VtZW50LFxuICBnZXRSb290RWxlbWVudCxcbiAgcGFyc2VYbWxTdHJpbmcsXG4gIHhtbFRvU3RyaW5nLFxufSBmcm9tICcuLi8uLi94bWwtdXRpbHMnXG5cbmV4cG9ydCBmdW5jdGlvbiByZWFkR2VvbWV0cnkoZWw6IFhtbEVsZW1lbnQpOiBHZW9tZXRyeSB7XG4gIGNvbnN0IHhtbERvYyA9IGNyZWF0ZURvY3VtZW50KGVsKVxuICB4bWxEb2Mucm9vdC5hdHRyaWJ1dGVzWyd4bWxucyddID0gJ2h0dHA6Ly93d3cub3Blbmdpcy5uZXQvZ21sLzMuMidcbiAgY29uc3QgZ21sU3RyaW5nID0geG1sVG9TdHJpbmcoeG1sRG9jKVxuICBjb25zdCBkb2MgPSBwYXJzZShnbWxTdHJpbmcpXG4gIC8vIHdlIG5lZWQgYW4gaW50ZXJtZWRpYXRlIG5vZGUgdG8gYmUgYWJsZSB0byBwYXJzZSB0aGUgR01MXG4gIGNvbnN0IG5vZGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdwcmUnKVxuICBub2RlLmFwcGVuZENoaWxkKGRvYy5kb2N1bWVudEVsZW1lbnQpXG4gIGNvbnN0IGdtbDMyRm9ybWF0ID0gbmV3IEdNTDMyKClcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9iYW4tdHMtY29tbWVudFxuICAvLyBAdHMtaWdub3JlXG4gIGNvbnN0IGdlb21ldHJ5ID0gZ21sMzJGb3JtYXQucmVhZEdlb21ldHJ5RnJvbU5vZGUobm9kZSlcbiAgY29uc3QgZ2VvanNvbkZvcm1hdCA9IG5ldyBHZW9KU09OKClcbiAgcmV0dXJuIGdlb2pzb25Gb3JtYXQud3JpdGVHZW9tZXRyeU9iamVjdChnZW9tZXRyeSlcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHdyaXRlR2VvbWV0cnkoZ2VvbWV0cnlPYmplY3Q6IEdlb21ldHJ5KTogWG1sRWxlbWVudCB7XG4gIGNvbnN0IGdlb2pzb25Gb3JtYXQgPSBuZXcgR2VvSlNPTigpXG4gIGNvbnN0IGdlb21ldHJ5ID0gZ2VvanNvbkZvcm1hdC5yZWFkR2VvbWV0cnkoZ2VvbWV0cnlPYmplY3QpXG4gIGNvbnN0IGdtbDMyRm9ybWF0ID0gbmV3IEdNTDMyKClcbiAgY29uc3Qgbm9kZSA9IGdtbDMyRm9ybWF0LndyaXRlR2VvbWV0cnlOb2RlKGdlb21ldHJ5KVxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L2Jhbi10cy1jb21tZW50XG4gIC8vIEB0cy1pZ25vcmVcbiAgY29uc3QgZWxlbWVudCA9IG5vZGUuZmlyc3RFbGVtZW50Q2hpbGQgYXMgSFRNTEVsZW1lbnRcbiAgY29uc3QgZ21sU3RyaW5nID0gbmV3IFhNTFNlcmlhbGl6ZXIoKS5zZXJpYWxpemVUb1N0cmluZyhlbGVtZW50KVxuICByZXR1cm4gZ2V0Um9vdEVsZW1lbnQocGFyc2VYbWxTdHJpbmcoZ21sU3RyaW5nKSlcbn1cbiJdfQ==