geonetwork-ui 2.4.0-alpha.1.4e1f08cf → 2.4.0-alpha.1.68624e7b

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 (440) hide show
  1. package/esm2022/libs/api/metadata-converter/src/lib/dcat-ap/dcat-ap.converter.mjs +47 -35
  2. package/esm2022/libs/api/metadata-converter/src/lib/dcat-ap/read-parts.mjs +71 -40
  3. package/esm2022/libs/api/metadata-converter/src/lib/dcat-ap/utils/graph-utils.mjs +37 -26
  4. package/esm2022/libs/api/metadata-converter/src/lib/dcat-ap/utils/serialize-to-xml.mjs +30 -8
  5. package/esm2022/libs/api/metadata-converter/src/lib/dcat-ap/write-parts.mjs +32 -12
  6. package/esm2022/libs/api/metadata-converter/src/lib/function-utils.mjs +1 -1
  7. package/esm2022/libs/api/metadata-converter/src/lib/gn4/gn4.converter.mjs +3 -2
  8. package/esm2022/libs/api/metadata-converter/src/lib/gn4/gn4.field.mapper.mjs +12 -3
  9. package/esm2022/libs/api/metadata-converter/src/lib/iso19115-3/iso19115-3.converter.mjs +9 -5
  10. package/esm2022/libs/api/metadata-converter/src/lib/iso19115-3/read-parts.mjs +22 -9
  11. package/esm2022/libs/api/metadata-converter/src/lib/iso19115-3/write-parts.mjs +36 -18
  12. package/esm2022/libs/api/metadata-converter/src/lib/iso19139/iso19139.converter.mjs +96 -39
  13. package/esm2022/libs/api/metadata-converter/src/lib/iso19139/read-parts.mjs +80 -26
  14. package/esm2022/libs/api/metadata-converter/src/lib/iso19139/write-parts.mjs +102 -62
  15. package/esm2022/libs/api/metadata-converter/src/lib/xml-utils.mjs +69 -17
  16. package/esm2022/libs/api/repository/src/lib/gn4/gn4-repository.mjs +19 -11
  17. package/esm2022/libs/api/repository/src/lib/gn4/platform/gn4-platform.service.mjs +3 -7
  18. package/esm2022/libs/common/domain/src/lib/model/error/index.mjs +2 -0
  19. package/esm2022/libs/common/domain/src/lib/model/error/publication-version.error.mjs +8 -0
  20. package/esm2022/libs/common/domain/src/lib/model/record/index.mjs +2 -1
  21. package/esm2022/libs/common/domain/src/lib/model/record/metadata.model.mjs +1 -1
  22. package/esm2022/libs/common/domain/src/lib/model/record/organization.model.mjs +1 -1
  23. package/esm2022/libs/common/domain/src/lib/model/record/translation.model.mjs +2 -0
  24. package/esm2022/libs/common/domain/src/lib/model/search/sort-by.model.mjs +2 -1
  25. package/esm2022/libs/feature/dataviz/src/lib/chart-view/chart-view.component.mjs +3 -3
  26. package/esm2022/libs/feature/dataviz/src/lib/table-view/table-view.component.mjs +3 -3
  27. package/esm2022/libs/feature/editor/src/lib/+state/editor.actions.mjs +2 -1
  28. package/esm2022/libs/feature/editor/src/lib/+state/editor.effects.mjs +2 -2
  29. package/esm2022/libs/feature/editor/src/lib/+state/editor.facade.mjs +5 -1
  30. package/esm2022/libs/feature/editor/src/lib/+state/editor.models.mjs +1 -1
  31. package/esm2022/libs/feature/editor/src/lib/+state/editor.reducer.mjs +21 -1
  32. package/esm2022/libs/feature/editor/src/lib/components/constraint-card/constraint-card.component.mjs +68 -0
  33. package/esm2022/libs/feature/editor/src/lib/components/contact-card/contact-card.component.mjs +3 -4
  34. package/esm2022/libs/feature/editor/src/lib/components/generic-keywords/generic-keywords.component.mjs +15 -7
  35. package/esm2022/libs/feature/editor/src/lib/components/import-record/import-record.component.mjs +26 -8
  36. package/esm2022/libs/feature/editor/src/lib/components/online-resource-card/online-resource-card.component.mjs +21 -7
  37. package/esm2022/libs/feature/editor/src/lib/components/online-service-resource-input/online-service-resource-input.component.mjs +2 -4
  38. package/esm2022/libs/feature/editor/src/lib/components/record-form/form-field/form-field-constraints/form-field-constraints.component.mjs +76 -0
  39. package/esm2022/libs/feature/editor/src/lib/components/record-form/form-field/form-field-constraints-shortcuts/constraints.utils.mjs +35 -0
  40. package/esm2022/libs/feature/editor/src/lib/components/record-form/form-field/form-field-constraints-shortcuts/form-field-constraints-shortcuts.component.mjs +130 -0
  41. package/esm2022/libs/feature/editor/src/lib/components/record-form/form-field/form-field-contacts-for-resource/form-field-contacts-for-resource.component.mjs +16 -6
  42. package/esm2022/libs/feature/editor/src/lib/components/record-form/form-field/form-field-license/form-field-license.component.mjs +29 -48
  43. package/esm2022/libs/feature/editor/src/lib/components/record-form/form-field/form-field-online-link-resources/form-field-online-link-resources.component.mjs +3 -3
  44. package/esm2022/libs/feature/editor/src/lib/components/record-form/form-field/form-field-online-resources/form-field-online-resources.component.mjs +3 -3
  45. package/esm2022/libs/feature/editor/src/lib/components/record-form/form-field/form-field-open-data/form-field-open-data.component.mjs +15 -15
  46. package/esm2022/libs/feature/editor/src/lib/components/record-form/form-field/form-field-spatial-extent/form-field-spatial-extent.component.mjs +3 -3
  47. package/esm2022/libs/feature/editor/src/lib/components/record-form/form-field/form-field-temporal-extents/form-field-temporal-extents.component.mjs +16 -6
  48. package/esm2022/libs/feature/editor/src/lib/components/record-form/form-field/form-field.component.mjs +19 -7
  49. package/esm2022/libs/feature/editor/src/lib/components/record-form/record-form.component.mjs +3 -3
  50. package/esm2022/libs/feature/editor/src/lib/fields.config.mjs +55 -11
  51. package/esm2022/libs/feature/editor/src/lib/models/editor-config.model.mjs +1 -1
  52. package/esm2022/libs/feature/map/src/lib/feature-map.module.mjs +1 -5
  53. package/esm2022/libs/feature/map/src/lib/layers-panel/layers-panel.component.mjs +29 -10
  54. package/esm2022/libs/feature/record/src/lib/external-viewer-button/external-viewer-button.component.mjs +4 -4
  55. package/esm2022/libs/feature/record/src/lib/feature-record.module.mjs +28 -9
  56. package/esm2022/libs/feature/record/src/lib/map-view/map-view.component.mjs +9 -9
  57. package/esm2022/libs/feature/router/src/lib/default/state/router.effects.mjs +3 -3
  58. package/esm2022/libs/feature/search/src/lib/feature-search.module.mjs +1 -5
  59. package/esm2022/libs/feature/search/src/lib/sort-by/sort-by.component.mjs +5 -1
  60. package/esm2022/libs/feature/search/src/lib/utils/service/fields.mjs +20 -1
  61. package/esm2022/libs/feature/search/src/lib/utils/service/fields.service.mjs +4 -2
  62. package/esm2022/libs/ui/catalog/src/lib/organisation-preview/organisation-preview.component.mjs +4 -4
  63. package/esm2022/libs/ui/catalog/src/lib/ui-catalog.module.mjs +23 -7
  64. package/esm2022/libs/ui/dataviz/src/lib/figure/figure.component.mjs +5 -5
  65. package/esm2022/libs/ui/dataviz/src/lib/ui-dataviz.module.mjs +31 -5
  66. package/esm2022/libs/ui/elements/src/lib/api-card/api-card.component.mjs +6 -6
  67. package/esm2022/libs/ui/elements/src/lib/download-item/download-item.component.mjs +5 -5
  68. package/esm2022/libs/ui/elements/src/lib/error/error.component.mjs +5 -5
  69. package/esm2022/libs/ui/elements/src/lib/image-overlay-preview/image-overlay-preview.component.mjs +6 -6
  70. package/esm2022/libs/ui/elements/src/lib/link-card/link-card.component.mjs +15 -5
  71. package/esm2022/libs/ui/elements/src/lib/markdown-editor/markdown-editor.component.mjs +2 -4
  72. package/esm2022/libs/ui/elements/src/lib/metadata-contact/metadata-contact.component.mjs +6 -6
  73. package/esm2022/libs/ui/elements/src/lib/metadata-info/linkify.directive.mjs +2 -2
  74. package/esm2022/libs/ui/elements/src/lib/metadata-info/metadata-info.component.mjs +11 -11
  75. package/esm2022/libs/ui/elements/src/lib/metadata-quality-item/metadata-quality-item.component.mjs +5 -5
  76. package/esm2022/libs/ui/elements/src/lib/notification/notification.component.mjs +36 -5
  77. package/esm2022/libs/ui/elements/src/lib/pagination/pagination.component.mjs +7 -7
  78. package/esm2022/libs/ui/elements/src/lib/pagination-buttons/pagination-buttons.component.mjs +5 -5
  79. package/esm2022/libs/ui/elements/src/lib/record-api-form/record-api-form.component.mjs +2 -2
  80. package/esm2022/libs/ui/elements/src/lib/related-record-card/related-record-card.component.mjs +7 -7
  81. package/esm2022/libs/ui/elements/src/lib/ui-elements.module.mjs +60 -8
  82. package/esm2022/libs/ui/elements/src/lib/user-feedback-item/user-feedback-item.component.mjs +7 -7
  83. package/esm2022/libs/ui/inputs/src/lib/autocomplete/autocomplete.component.mjs +28 -11
  84. package/esm2022/libs/ui/inputs/src/lib/badge/badge.component.mjs +19 -5
  85. package/esm2022/libs/ui/inputs/src/lib/check-toggle/check-toggle.component.mjs +5 -5
  86. package/esm2022/libs/ui/inputs/src/lib/copy-text-button/copy-text-button.component.mjs +5 -5
  87. package/esm2022/libs/ui/inputs/src/lib/date-picker/date-picker.component.mjs +17 -7
  88. package/esm2022/libs/ui/inputs/src/lib/date-range-picker/date-range-picker.component.mjs +17 -7
  89. package/esm2022/libs/ui/inputs/src/lib/dropdown-multiselect/dropdown-multiselect.component.mjs +5 -5
  90. package/esm2022/libs/ui/inputs/src/lib/dropdown-selector/dropdown-selector.component.mjs +23 -7
  91. package/esm2022/libs/ui/inputs/src/lib/file-input/file-input.component.mjs +26 -8
  92. package/esm2022/libs/ui/inputs/src/lib/image-input/image-input.component.mjs +32 -8
  93. package/esm2022/libs/ui/inputs/src/lib/navigation-button/navigation-button.component.mjs +4 -4
  94. package/esm2022/libs/ui/inputs/src/lib/previous-next-buttons/previous-next-buttons.component.mjs +15 -5
  95. package/esm2022/libs/ui/inputs/src/lib/search-input/search-input.component.mjs +15 -5
  96. package/esm2022/libs/ui/inputs/src/lib/star-toggle/star-toggle.component.mjs +4 -4
  97. package/esm2022/libs/ui/inputs/src/lib/ui-inputs.module.mjs +36 -8
  98. package/esm2022/libs/ui/inputs/src/lib/url-input/url-input.component.mjs +49 -20
  99. package/esm2022/libs/ui/layout/src/lib/expandable-panel/expandable-panel.component.mjs +4 -4
  100. package/esm2022/libs/ui/layout/src/lib/expandable-panel-button/expandable-panel-button.component.mjs +4 -4
  101. package/esm2022/libs/ui/layout/src/lib/form-field-wrapper/form-field-wrapper.component.mjs +5 -4
  102. package/esm2022/libs/ui/layout/src/lib/interactive-table/interactive-table.component.mjs +5 -5
  103. package/esm2022/libs/ui/layout/src/lib/max-lines/max-lines.component.mjs +3 -3
  104. package/esm2022/libs/ui/layout/src/lib/sortable-list/sortable-list.component.mjs +3 -11
  105. package/esm2022/libs/ui/layout/src/lib/ui-layout.module.mjs +17 -5
  106. package/esm2022/libs/ui/map/src/lib/components/map-container/map-container.component.mjs +16 -6
  107. package/esm2022/libs/ui/search/src/lib/record-preview-feed/record-preview-feed.component.mjs +4 -4
  108. package/esm2022/libs/ui/search/src/lib/record-preview-row/record-preview-row.component.mjs +4 -4
  109. package/esm2022/libs/ui/search/src/lib/results-table/action-menu/action-menu.component.mjs +24 -32
  110. package/esm2022/libs/ui/search/src/lib/results-table/results-table.component.mjs +71 -14
  111. package/esm2022/libs/ui/search/src/lib/ui-search.module.mjs +27 -7
  112. package/esm2022/libs/ui/widgets/src/lib/popup-alert/popup-alert.component.mjs +5 -5
  113. package/esm2022/libs/ui/widgets/src/lib/ui-widgets.module.mjs +3 -7
  114. package/esm2022/libs/util/i18n/src/index.mjs +2 -1
  115. package/esm2022/libs/util/i18n/src/lib/i18n.constants.mjs +1 -38
  116. package/esm2022/libs/util/i18n/src/lib/lang.service.mjs +2 -2
  117. package/esm2022/libs/util/i18n/src/lib/language-codes.mjs +40 -0
  118. package/esm2022/translations/de.json +32 -13
  119. package/esm2022/translations/en.json +27 -8
  120. package/esm2022/translations/es.json +21 -2
  121. package/esm2022/translations/fr.json +26 -7
  122. package/esm2022/translations/it.json +24 -5
  123. package/esm2022/translations/nl.json +21 -2
  124. package/esm2022/translations/pt.json +21 -2
  125. package/fesm2022/geonetwork-ui.mjs +2054 -739
  126. package/fesm2022/geonetwork-ui.mjs.map +1 -1
  127. package/libs/api/metadata-converter/src/lib/dcat-ap/dcat-ap.converter.d.ts +2 -2
  128. package/libs/api/metadata-converter/src/lib/dcat-ap/dcat-ap.converter.d.ts.map +1 -1
  129. package/libs/api/metadata-converter/src/lib/dcat-ap/read-parts.d.ts +6 -5
  130. package/libs/api/metadata-converter/src/lib/dcat-ap/read-parts.d.ts.map +1 -1
  131. package/libs/api/metadata-converter/src/lib/dcat-ap/utils/graph-utils.d.ts +11 -5
  132. package/libs/api/metadata-converter/src/lib/dcat-ap/utils/graph-utils.d.ts.map +1 -1
  133. package/libs/api/metadata-converter/src/lib/dcat-ap/utils/serialize-to-xml.d.ts.map +1 -1
  134. package/libs/api/metadata-converter/src/lib/dcat-ap/write-parts.d.ts.map +1 -1
  135. package/libs/api/metadata-converter/src/lib/function-utils.d.ts +1 -1
  136. package/libs/api/metadata-converter/src/lib/function-utils.d.ts.map +1 -1
  137. package/libs/api/metadata-converter/src/lib/gn4/gn4.converter.d.ts.map +1 -1
  138. package/libs/api/metadata-converter/src/lib/gn4/gn4.field.mapper.d.ts.map +1 -1
  139. package/libs/api/metadata-converter/src/lib/iso19115-3/iso19115-3.converter.d.ts.map +1 -1
  140. package/libs/api/metadata-converter/src/lib/iso19115-3/read-parts.d.ts +5 -3
  141. package/libs/api/metadata-converter/src/lib/iso19115-3/read-parts.d.ts.map +1 -1
  142. package/libs/api/metadata-converter/src/lib/iso19115-3/write-parts.d.ts +4 -2
  143. package/libs/api/metadata-converter/src/lib/iso19115-3/write-parts.d.ts.map +1 -1
  144. package/libs/api/metadata-converter/src/lib/iso19139/iso19139.converter.d.ts +3 -2
  145. package/libs/api/metadata-converter/src/lib/iso19139/iso19139.converter.d.ts.map +1 -1
  146. package/libs/api/metadata-converter/src/lib/iso19139/read-parts.d.ts +11 -4
  147. package/libs/api/metadata-converter/src/lib/iso19139/read-parts.d.ts.map +1 -1
  148. package/libs/api/metadata-converter/src/lib/iso19139/write-parts.d.ts +13 -8
  149. package/libs/api/metadata-converter/src/lib/iso19139/write-parts.d.ts.map +1 -1
  150. package/libs/api/metadata-converter/src/lib/xml-utils.d.ts +45 -2
  151. package/libs/api/metadata-converter/src/lib/xml-utils.d.ts.map +1 -1
  152. package/libs/api/repository/src/lib/gn4/gn4-repository.d.ts +10 -8
  153. package/libs/api/repository/src/lib/gn4/gn4-repository.d.ts.map +1 -1
  154. package/libs/common/domain/src/lib/model/error/index.d.ts +2 -0
  155. package/libs/common/domain/src/lib/model/error/index.d.ts.map +1 -0
  156. package/libs/common/domain/src/lib/model/error/publication-version.error.d.ts +5 -0
  157. package/libs/common/domain/src/lib/model/error/publication-version.error.d.ts.map +1 -0
  158. package/libs/common/domain/src/lib/model/record/index.d.ts +1 -0
  159. package/libs/common/domain/src/lib/model/record/index.d.ts.map +1 -1
  160. package/libs/common/domain/src/lib/model/record/metadata.model.d.ts +11 -2
  161. package/libs/common/domain/src/lib/model/record/metadata.model.d.ts.map +1 -1
  162. package/libs/common/domain/src/lib/model/record/organization.model.d.ts +2 -0
  163. package/libs/common/domain/src/lib/model/record/organization.model.d.ts.map +1 -1
  164. package/libs/common/domain/src/lib/model/record/translation.model.d.ts +26 -0
  165. package/libs/common/domain/src/lib/model/record/translation.model.d.ts.map +1 -0
  166. package/libs/common/domain/src/lib/model/search/sort-by.model.d.ts.map +1 -1
  167. package/libs/feature/editor/src/lib/+state/editor.actions.d.ts +8 -0
  168. package/libs/feature/editor/src/lib/+state/editor.actions.d.ts.map +1 -1
  169. package/libs/feature/editor/src/lib/+state/editor.effects.d.ts +1 -1
  170. package/libs/feature/editor/src/lib/+state/editor.facade.d.ts +4 -2
  171. package/libs/feature/editor/src/lib/+state/editor.facade.d.ts.map +1 -1
  172. package/libs/feature/editor/src/lib/+state/editor.models.d.ts +1 -1
  173. package/libs/feature/editor/src/lib/+state/editor.models.d.ts.map +1 -1
  174. package/libs/feature/editor/src/lib/+state/editor.reducer.d.ts.map +1 -1
  175. package/libs/feature/editor/src/lib/+state/editor.selectors.d.ts +1 -1
  176. package/libs/feature/editor/src/lib/+state/editor.selectors.d.ts.map +1 -1
  177. package/libs/feature/editor/src/lib/components/constraint-card/constraint-card.component.d.ts +16 -0
  178. package/libs/feature/editor/src/lib/components/constraint-card/constraint-card.component.d.ts.map +1 -0
  179. package/libs/feature/editor/src/lib/components/contact-card/contact-card.component.d.ts.map +1 -1
  180. package/libs/feature/editor/src/lib/components/generic-keywords/generic-keywords.component.d.ts.map +1 -1
  181. package/libs/feature/editor/src/lib/components/import-record/import-record.component.d.ts.map +1 -1
  182. package/libs/feature/editor/src/lib/components/online-resource-card/online-resource-card.component.d.ts.map +1 -1
  183. package/libs/feature/editor/src/lib/components/online-service-resource-input/online-service-resource-input.component.d.ts.map +1 -1
  184. package/libs/feature/editor/src/lib/components/record-form/form-field/form-field-constraints/form-field-constraints.component.d.ts +18 -0
  185. package/libs/feature/editor/src/lib/components/record-form/form-field/form-field-constraints/form-field-constraints.component.d.ts.map +1 -0
  186. package/libs/feature/editor/src/lib/components/record-form/form-field/form-field-constraints-shortcuts/constraints.utils.d.ts +6 -0
  187. package/libs/feature/editor/src/lib/components/record-form/form-field/form-field-constraints-shortcuts/constraints.utils.d.ts.map +1 -0
  188. package/libs/feature/editor/src/lib/components/record-form/form-field/form-field-constraints-shortcuts/form-field-constraints-shortcuts.component.d.ts +32 -0
  189. package/libs/feature/editor/src/lib/components/record-form/form-field/form-field-constraints-shortcuts/form-field-constraints-shortcuts.component.d.ts.map +1 -0
  190. 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 -1
  191. package/libs/feature/editor/src/lib/components/record-form/form-field/form-field-license/form-field-license.component.d.ts +14 -35
  192. package/libs/feature/editor/src/lib/components/record-form/form-field/form-field-license/form-field-license.component.d.ts.map +1 -1
  193. package/libs/feature/editor/src/lib/components/record-form/form-field/form-field-open-data/form-field-open-data.component.d.ts +1 -2
  194. package/libs/feature/editor/src/lib/components/record-form/form-field/form-field-open-data/form-field-open-data.component.d.ts.map +1 -1
  195. package/libs/feature/editor/src/lib/components/record-form/form-field/form-field-temporal-extents/form-field-temporal-extents.component.d.ts.map +1 -1
  196. package/libs/feature/editor/src/lib/components/record-form/form-field/form-field.component.d.ts +5 -3
  197. package/libs/feature/editor/src/lib/components/record-form/form-field/form-field.component.d.ts.map +1 -1
  198. package/libs/feature/editor/src/lib/fields.config.d.ts +7 -2
  199. package/libs/feature/editor/src/lib/fields.config.d.ts.map +1 -1
  200. package/libs/feature/editor/src/lib/models/editor-config.model.d.ts +6 -3
  201. package/libs/feature/editor/src/lib/models/editor-config.model.d.ts.map +1 -1
  202. package/libs/feature/map/src/lib/feature-map.module.d.ts +9 -10
  203. package/libs/feature/map/src/lib/feature-map.module.d.ts.map +1 -1
  204. package/libs/feature/map/src/lib/layers-panel/layers-panel.component.d.ts.map +1 -1
  205. package/libs/feature/record/src/lib/feature-record.module.d.ts +10 -10
  206. package/libs/feature/record/src/lib/feature-record.module.d.ts.map +1 -1
  207. package/libs/feature/search/src/lib/feature-search.module.d.ts +3 -4
  208. package/libs/feature/search/src/lib/feature-search.module.d.ts.map +1 -1
  209. package/libs/feature/search/src/lib/sort-by/sort-by.component.d.ts.map +1 -1
  210. package/libs/feature/search/src/lib/utils/service/fields.d.ts +5 -0
  211. package/libs/feature/search/src/lib/utils/service/fields.d.ts.map +1 -1
  212. package/libs/feature/search/src/lib/utils/service/fields.service.d.ts.map +1 -1
  213. package/libs/ui/catalog/src/lib/ui-catalog.module.d.ts +3 -3
  214. package/libs/ui/catalog/src/lib/ui-catalog.module.d.ts.map +1 -1
  215. package/libs/ui/dataviz/src/lib/ui-dataviz.module.d.ts +3 -3
  216. package/libs/ui/dataviz/src/lib/ui-dataviz.module.d.ts.map +1 -1
  217. package/libs/ui/elements/src/lib/link-card/link-card.component.d.ts.map +1 -1
  218. package/libs/ui/elements/src/lib/markdown-editor/markdown-editor.component.d.ts.map +1 -1
  219. package/libs/ui/elements/src/lib/metadata-quality-item/metadata-quality-item.component.d.ts +1 -1
  220. package/libs/ui/elements/src/lib/metadata-quality-item/metadata-quality-item.component.d.ts.map +1 -1
  221. package/libs/ui/elements/src/lib/notification/notification.component.d.ts +1 -0
  222. package/libs/ui/elements/src/lib/notification/notification.component.d.ts.map +1 -1
  223. package/libs/ui/elements/src/lib/ui-elements.module.d.ts +17 -17
  224. package/libs/ui/elements/src/lib/ui-elements.module.d.ts.map +1 -1
  225. package/libs/ui/inputs/src/lib/autocomplete/autocomplete.component.d.ts.map +1 -1
  226. package/libs/ui/inputs/src/lib/badge/badge.component.d.ts.map +1 -1
  227. package/libs/ui/inputs/src/lib/check-toggle/check-toggle.component.d.ts +2 -2
  228. package/libs/ui/inputs/src/lib/check-toggle/check-toggle.component.d.ts.map +1 -1
  229. package/libs/ui/inputs/src/lib/date-picker/date-picker.component.d.ts.map +1 -1
  230. package/libs/ui/inputs/src/lib/date-range-picker/date-range-picker.component.d.ts.map +1 -1
  231. package/libs/ui/inputs/src/lib/dropdown-selector/dropdown-selector.component.d.ts.map +1 -1
  232. package/libs/ui/inputs/src/lib/file-input/file-input.component.d.ts +1 -1
  233. package/libs/ui/inputs/src/lib/file-input/file-input.component.d.ts.map +1 -1
  234. package/libs/ui/inputs/src/lib/image-input/image-input.component.d.ts.map +1 -1
  235. package/libs/ui/inputs/src/lib/previous-next-buttons/previous-next-buttons.component.d.ts.map +1 -1
  236. package/libs/ui/inputs/src/lib/search-input/search-input.component.d.ts.map +1 -1
  237. package/libs/ui/inputs/src/lib/ui-inputs.module.d.ts +18 -18
  238. package/libs/ui/inputs/src/lib/ui-inputs.module.d.ts.map +1 -1
  239. package/libs/ui/inputs/src/lib/url-input/url-input.component.d.ts +14 -12
  240. package/libs/ui/inputs/src/lib/url-input/url-input.component.d.ts.map +1 -1
  241. package/libs/ui/layout/src/lib/interactive-table/interactive-table.component.d.ts.map +1 -1
  242. package/libs/ui/layout/src/lib/sortable-list/sortable-list.component.d.ts.map +1 -1
  243. package/libs/ui/layout/src/lib/ui-layout.module.d.ts +3 -3
  244. package/libs/ui/layout/src/lib/ui-layout.module.d.ts.map +1 -1
  245. package/libs/ui/map/src/lib/components/map-container/map-container.component.d.ts.map +1 -1
  246. package/libs/ui/search/src/lib/results-table/action-menu/action-menu.component.d.ts +10 -6
  247. package/libs/ui/search/src/lib/results-table/action-menu/action-menu.component.d.ts.map +1 -1
  248. package/libs/ui/search/src/lib/results-table/results-table.component.d.ts +11 -1
  249. package/libs/ui/search/src/lib/results-table/results-table.component.d.ts.map +1 -1
  250. package/libs/ui/search/src/lib/ui-search.module.d.ts +5 -5
  251. package/libs/ui/search/src/lib/ui-search.module.d.ts.map +1 -1
  252. package/libs/ui/widgets/src/lib/popup-alert/popup-alert.component.d.ts.map +1 -1
  253. package/libs/ui/widgets/src/lib/ui-widgets.module.d.ts +1 -2
  254. package/libs/ui/widgets/src/lib/ui-widgets.module.d.ts.map +1 -1
  255. package/libs/util/i18n/src/index.d.ts +1 -0
  256. package/libs/util/i18n/src/index.d.ts.map +1 -1
  257. package/libs/util/i18n/src/lib/i18n.constants.d.ts +0 -35
  258. package/libs/util/i18n/src/lib/i18n.constants.d.ts.map +1 -1
  259. package/libs/util/i18n/src/lib/language-codes.d.ts +38 -0
  260. package/libs/util/i18n/src/lib/language-codes.d.ts.map +1 -0
  261. package/package.json +1 -1
  262. package/src/libs/api/metadata-converter/src/lib/dcat-ap/dcat-ap.converter.ts +156 -34
  263. package/src/libs/api/metadata-converter/src/lib/dcat-ap/read-parts.ts +140 -47
  264. package/src/libs/api/metadata-converter/src/lib/dcat-ap/utils/graph-utils.ts +62 -47
  265. package/src/libs/api/metadata-converter/src/lib/dcat-ap/utils/serialize-to-xml.ts +37 -7
  266. package/src/libs/api/metadata-converter/src/lib/dcat-ap/write-parts.ts +51 -18
  267. package/src/libs/api/metadata-converter/src/lib/fixtures/eu.dcat-ap.records.ts +473 -2
  268. package/src/libs/api/metadata-converter/src/lib/fixtures/generic.records.ts +35 -3
  269. package/src/libs/api/metadata-converter/src/lib/fixtures/geo2france.records.ts +18 -3
  270. package/src/libs/api/metadata-converter/src/lib/fixtures/geocat-ch.records.ts +326 -4
  271. package/src/libs/api/metadata-converter/src/lib/fixtures/metawal.records.ts +76 -2
  272. package/src/libs/api/metadata-converter/src/lib/fixtures/opendataswiss.records.ts +336 -9
  273. package/src/libs/api/metadata-converter/src/lib/fixtures/sextant.records.ts +404 -2
  274. package/src/libs/api/metadata-converter/src/lib/fixtures/vlaanderen.dcat-ap.records.ts +4 -1
  275. package/src/libs/api/metadata-converter/src/lib/function-utils.ts +1 -1
  276. package/src/libs/api/metadata-converter/src/lib/gn4/gn4.converter.ts +2 -1
  277. package/src/libs/api/metadata-converter/src/lib/gn4/gn4.field.mapper.ts +13 -2
  278. package/src/libs/api/metadata-converter/src/lib/iso19115-3/iso19115-3.converter.ts +11 -3
  279. package/src/libs/api/metadata-converter/src/lib/iso19115-3/read-parts.ts +45 -10
  280. package/src/libs/api/metadata-converter/src/lib/iso19115-3/write-parts.ts +86 -24
  281. package/src/libs/api/metadata-converter/src/lib/iso19139/iso19139.converter.ts +108 -38
  282. package/src/libs/api/metadata-converter/src/lib/iso19139/read-parts.ts +205 -44
  283. package/src/libs/api/metadata-converter/src/lib/iso19139/write-parts.ts +396 -170
  284. package/src/libs/api/metadata-converter/src/lib/xml-utils.ts +76 -18
  285. package/src/libs/api/repository/src/lib/gn4/gn4-repository.ts +60 -51
  286. package/src/libs/api/repository/src/lib/gn4/platform/gn4-platform.service.ts +6 -6
  287. package/src/libs/common/domain/src/lib/model/error/index.ts +1 -0
  288. package/src/libs/common/domain/src/lib/model/error/publication-version.error.ts +9 -0
  289. package/src/libs/common/domain/src/lib/model/record/index.ts +1 -0
  290. package/src/libs/common/domain/src/lib/model/record/metadata.model.ts +23 -3
  291. package/src/libs/common/domain/src/lib/model/record/organization.model.ts +4 -0
  292. package/src/libs/common/domain/src/lib/model/record/translation.model.ts +49 -0
  293. package/src/libs/common/domain/src/lib/model/search/sort-by.model.ts +1 -0
  294. package/src/libs/common/fixtures/src/lib/editor/editor.fixtures.ts +0 -3
  295. package/src/libs/common/fixtures/src/lib/elasticsearch/full-response.fixtures.ts +1672 -0
  296. package/src/libs/common/fixtures/src/lib/records.fixtures.ts +16 -15
  297. package/src/libs/feature/dataviz/src/lib/chart-view/chart-view.component.html +1 -1
  298. package/src/libs/feature/dataviz/src/lib/table-view/table-view.component.html +1 -1
  299. package/src/libs/feature/editor/src/lib/+state/editor.actions.ts +6 -0
  300. package/src/libs/feature/editor/src/lib/+state/editor.effects.ts +1 -1
  301. package/src/libs/feature/editor/src/lib/+state/editor.facade.ts +6 -0
  302. package/src/libs/feature/editor/src/lib/+state/editor.models.ts +1 -1
  303. package/src/libs/feature/editor/src/lib/+state/editor.reducer.ts +21 -0
  304. package/src/libs/feature/editor/src/lib/components/constraint-card/constraint-card.component.css +4 -0
  305. package/src/libs/feature/editor/src/lib/components/constraint-card/constraint-card.component.html +28 -0
  306. package/src/libs/feature/editor/src/lib/components/constraint-card/constraint-card.component.ts +71 -0
  307. package/src/libs/feature/editor/src/lib/components/contact-card/contact-card.component.ts +1 -2
  308. package/src/libs/feature/editor/src/lib/components/generic-keywords/generic-keywords.component.css +3 -0
  309. package/src/libs/feature/editor/src/lib/components/generic-keywords/generic-keywords.component.html +4 -4
  310. package/src/libs/feature/editor/src/lib/components/generic-keywords/generic-keywords.component.ts +12 -2
  311. package/src/libs/feature/editor/src/lib/components/import-record/import-record.component.html +3 -4
  312. package/src/libs/feature/editor/src/lib/components/import-record/import-record.component.ts +24 -4
  313. package/src/libs/feature/editor/src/lib/components/online-resource-card/online-resource-card.component.html +1 -1
  314. package/src/libs/feature/editor/src/lib/components/online-resource-card/online-resource-card.component.ts +15 -2
  315. package/src/libs/feature/editor/src/lib/components/online-service-resource-input/online-service-resource-input.component.ts +0 -2
  316. package/src/libs/feature/editor/src/lib/components/record-form/form-field/form-field-constraints/form-field-constraints.component.css +4 -0
  317. package/src/libs/feature/editor/src/lib/components/record-form/form-field/form-field-constraints/form-field-constraints.component.html +24 -0
  318. package/src/libs/feature/editor/src/lib/components/record-form/form-field/form-field-constraints/form-field-constraints.component.ts +85 -0
  319. package/src/libs/feature/editor/src/lib/components/record-form/form-field/form-field-constraints-shortcuts/constraints.utils.ts +42 -0
  320. package/src/libs/feature/editor/src/lib/components/record-form/form-field/form-field-constraints-shortcuts/form-field-constraints-shortcuts.component.css +4 -0
  321. package/src/libs/feature/editor/src/lib/components/record-form/form-field/form-field-constraints-shortcuts/form-field-constraints-shortcuts.component.html +34 -0
  322. package/src/libs/feature/editor/src/lib/components/record-form/form-field/form-field-constraints-shortcuts/form-field-constraints-shortcuts.component.ts +210 -0
  323. package/src/libs/feature/editor/src/lib/components/record-form/form-field/form-field-contacts-for-resource/form-field-contacts-for-resource.component.html +1 -1
  324. package/src/libs/feature/editor/src/lib/components/record-form/form-field/form-field-contacts-for-resource/form-field-contacts-for-resource.component.ts +13 -2
  325. package/src/libs/feature/editor/src/lib/components/record-form/form-field/form-field-license/form-field-license.component.html +10 -8
  326. package/src/libs/feature/editor/src/lib/components/record-form/form-field/form-field-license/form-field-license.component.ts +33 -45
  327. package/src/libs/feature/editor/src/lib/components/record-form/form-field/form-field-online-link-resources/form-field-online-link-resources.component.html +1 -0
  328. package/src/libs/feature/editor/src/lib/components/record-form/form-field/form-field-online-resources/form-field-online-resources.component.html +3 -2
  329. package/src/libs/feature/editor/src/lib/components/record-form/form-field/form-field-open-data/form-field-open-data.component.html +1 -1
  330. package/src/libs/feature/editor/src/lib/components/record-form/form-field/form-field-open-data/form-field-open-data.component.ts +15 -12
  331. package/src/libs/feature/editor/src/lib/components/record-form/form-field/form-field-spatial-extent/form-field-spatial-extent.component.html +1 -1
  332. package/src/libs/feature/editor/src/lib/components/record-form/form-field/form-field-temporal-extents/form-field-temporal-extents.component.html +3 -2
  333. package/src/libs/feature/editor/src/lib/components/record-form/form-field/form-field-temporal-extents/form-field-temporal-extents.component.ts +13 -2
  334. package/src/libs/feature/editor/src/lib/components/record-form/form-field/form-field.component.html +34 -20
  335. package/src/libs/feature/editor/src/lib/components/record-form/form-field/form-field.component.ts +23 -5
  336. package/src/libs/feature/editor/src/lib/components/record-form/record-form.component.html +6 -1
  337. package/src/libs/feature/editor/src/lib/fields.config.ts +59 -11
  338. package/src/libs/feature/editor/src/lib/models/editor-config.model.ts +10 -4
  339. package/src/libs/feature/map/src/lib/feature-map.module.ts +0 -2
  340. package/src/libs/feature/map/src/lib/layers-panel/layers-panel.component.html +3 -5
  341. package/src/libs/feature/map/src/lib/layers-panel/layers-panel.component.ts +21 -2
  342. package/src/libs/feature/record/src/lib/external-viewer-button/external-viewer-button.component.html +1 -1
  343. package/src/libs/feature/record/src/lib/feature-record.module.ts +13 -3
  344. package/src/libs/feature/record/src/lib/map-view/map-view.component.html +2 -6
  345. package/src/libs/feature/router/src/lib/default/state/router.effects.ts +2 -2
  346. package/src/libs/feature/search/src/lib/feature-search.module.ts +0 -2
  347. package/src/libs/feature/search/src/lib/sort-by/sort-by.component.ts +4 -0
  348. package/src/libs/feature/search/src/lib/utils/service/fields.service.ts +3 -0
  349. package/src/libs/feature/search/src/lib/utils/service/fields.ts +26 -0
  350. package/src/libs/ui/catalog/src/lib/organisation-preview/organisation-preview.component.html +2 -3
  351. package/src/libs/ui/catalog/src/lib/ui-catalog.module.ts +11 -3
  352. package/src/libs/ui/dataviz/src/lib/figure/figure.component.html +4 -4
  353. package/src/libs/ui/dataviz/src/lib/ui-dataviz.module.ts +17 -2
  354. package/src/libs/ui/elements/src/lib/api-card/api-card.component.html +4 -4
  355. package/src/libs/ui/elements/src/lib/download-item/download-item.component.html +5 -3
  356. package/src/libs/ui/elements/src/lib/error/error.component.css +24 -19
  357. package/src/libs/ui/elements/src/lib/error/error.component.html +11 -21
  358. package/src/libs/ui/elements/src/lib/image-overlay-preview/image-overlay-preview.component.html +3 -5
  359. package/src/libs/ui/elements/src/lib/link-card/link-card.component.html +2 -6
  360. package/src/libs/ui/elements/src/lib/link-card/link-card.component.ts +13 -2
  361. package/src/libs/ui/elements/src/lib/markdown-editor/markdown-editor.component.ts +0 -2
  362. package/src/libs/ui/elements/src/lib/metadata-contact/metadata-contact.component.html +20 -22
  363. package/src/libs/ui/elements/src/lib/metadata-info/linkify.directive.ts +1 -1
  364. package/src/libs/ui/elements/src/lib/metadata-info/metadata-info.component.css +1 -1
  365. package/src/libs/ui/elements/src/lib/metadata-info/metadata-info.component.html +41 -20
  366. package/src/libs/ui/elements/src/lib/metadata-quality-item/metadata-quality-item.component.html +1 -1
  367. package/src/libs/ui/elements/src/lib/metadata-quality-item/metadata-quality-item.component.ts +1 -1
  368. package/src/libs/ui/elements/src/lib/notification/notification.component.html +9 -13
  369. package/src/libs/ui/elements/src/lib/notification/notification.component.ts +33 -2
  370. package/src/libs/ui/elements/src/lib/pagination/pagination.component.html +2 -2
  371. package/src/libs/ui/elements/src/lib/pagination-buttons/pagination-buttons.component.html +2 -2
  372. package/src/libs/ui/elements/src/lib/record-api-form/record-api-form.component.css +2 -2
  373. package/src/libs/ui/elements/src/lib/related-record-card/related-record-card.component.html +4 -3
  374. package/src/libs/ui/elements/src/lib/ui-elements.module.ts +48 -2
  375. package/src/libs/ui/elements/src/lib/user-feedback-item/user-feedback-item.component.html +2 -6
  376. package/src/libs/ui/inputs/src/lib/autocomplete/autocomplete.component.css +3 -10
  377. package/src/libs/ui/inputs/src/lib/autocomplete/autocomplete.component.html +4 -4
  378. package/src/libs/ui/inputs/src/lib/autocomplete/autocomplete.component.ts +17 -2
  379. package/src/libs/ui/inputs/src/lib/badge/badge.component.html +1 -1
  380. package/src/libs/ui/inputs/src/lib/badge/badge.component.ts +15 -2
  381. package/src/libs/ui/inputs/src/lib/check-toggle/check-toggle.component.html +4 -1
  382. package/src/libs/ui/inputs/src/lib/check-toggle/check-toggle.component.ts +3 -3
  383. package/src/libs/ui/inputs/src/lib/copy-text-button/copy-text-button.component.html +4 -4
  384. package/src/libs/ui/inputs/src/lib/date-picker/date-picker.component.html +1 -3
  385. package/src/libs/ui/inputs/src/lib/date-picker/date-picker.component.ts +13 -2
  386. package/src/libs/ui/inputs/src/lib/date-range-picker/date-range-picker.component.html +1 -3
  387. package/src/libs/ui/inputs/src/lib/date-range-picker/date-range-picker.component.ts +13 -2
  388. package/src/libs/ui/inputs/src/lib/dropdown-multiselect/dropdown-multiselect.component.html +16 -20
  389. package/src/libs/ui/inputs/src/lib/dropdown-selector/dropdown-selector.component.html +5 -4
  390. package/src/libs/ui/inputs/src/lib/dropdown-selector/dropdown-selector.component.ts +16 -2
  391. package/src/libs/ui/inputs/src/lib/file-input/file-input.component.html +9 -9
  392. package/src/libs/ui/inputs/src/lib/file-input/file-input.component.ts +18 -3
  393. package/src/libs/ui/inputs/src/lib/image-input/image-input.component.html +17 -23
  394. package/src/libs/ui/inputs/src/lib/image-input/image-input.component.ts +27 -2
  395. package/src/libs/ui/inputs/src/lib/navigation-button/navigation-button.component.html +1 -3
  396. package/src/libs/ui/inputs/src/lib/previous-next-buttons/previous-next-buttons.component.html +2 -10
  397. package/src/libs/ui/inputs/src/lib/previous-next-buttons/previous-next-buttons.component.ts +16 -2
  398. package/src/libs/ui/inputs/src/lib/search-input/search-input.component.html +2 -2
  399. package/src/libs/ui/inputs/src/lib/search-input/search-input.component.ts +13 -2
  400. package/src/libs/ui/inputs/src/lib/star-toggle/star-toggle.component.css +0 -9
  401. package/src/libs/ui/inputs/src/lib/star-toggle/star-toggle.component.html +1 -5
  402. package/src/libs/ui/inputs/src/lib/ui-inputs.module.ts +29 -2
  403. package/src/libs/ui/inputs/src/lib/url-input/url-input.component.css +1 -1
  404. package/src/libs/ui/inputs/src/lib/url-input/url-input.component.html +8 -17
  405. package/src/libs/ui/inputs/src/lib/url-input/url-input.component.ts +49 -20
  406. package/src/libs/ui/layout/src/lib/expandable-panel/expandable-panel.component.html +2 -4
  407. package/src/libs/ui/layout/src/lib/expandable-panel-button/expandable-panel-button.component.html +2 -6
  408. package/src/libs/ui/layout/src/lib/form-field-wrapper/form-field-wrapper.component.html +1 -1
  409. package/src/libs/ui/layout/src/lib/form-field-wrapper/form-field-wrapper.component.ts +2 -2
  410. package/src/libs/ui/layout/src/lib/interactive-table/interactive-table.component.css +4 -8
  411. package/src/libs/ui/layout/src/lib/interactive-table/interactive-table.component.html +9 -9
  412. package/src/libs/ui/layout/src/lib/interactive-table/interactive-table.component.ts +8 -2
  413. package/src/libs/ui/layout/src/lib/max-lines/max-lines.component.html +1 -1
  414. package/src/libs/ui/layout/src/lib/sortable-list/sortable-list.component.ts +1 -9
  415. package/src/libs/ui/layout/src/lib/ui-layout.module.ts +18 -2
  416. package/src/libs/ui/map/src/lib/components/map-container/map-container.component.html +4 -3
  417. package/src/libs/ui/map/src/lib/components/map-container/map-container.component.ts +13 -2
  418. package/src/libs/ui/search/src/lib/record-preview-feed/record-preview-feed.component.html +14 -12
  419. package/src/libs/ui/search/src/lib/record-preview-row/record-preview-row.component.html +8 -8
  420. package/src/libs/ui/search/src/lib/results-table/action-menu/action-menu.component.html +59 -26
  421. package/src/libs/ui/search/src/lib/results-table/action-menu/action-menu.component.ts +17 -33
  422. package/src/libs/ui/search/src/lib/results-table/results-table.component.html +22 -8
  423. package/src/libs/ui/search/src/lib/results-table/results-table.component.ts +87 -3
  424. package/src/libs/ui/search/src/lib/ui-search.module.ts +17 -2
  425. package/src/libs/ui/widgets/src/lib/popup-alert/popup-alert.component.html +1 -3
  426. package/src/libs/ui/widgets/src/lib/popup-alert/popup-alert.component.ts +8 -2
  427. package/src/libs/ui/widgets/src/lib/ui-widgets.module.ts +0 -2
  428. package/src/libs/util/i18n/src/index.ts +1 -0
  429. package/src/libs/util/i18n/src/lib/i18n.constants.ts +0 -43
  430. package/src/libs/util/i18n/src/lib/lang.service.ts +1 -1
  431. package/src/libs/util/i18n/src/lib/language-codes.ts +44 -0
  432. package/tailwind.base.css +15 -5
  433. package/translations/de.json +32 -13
  434. package/translations/en.json +27 -8
  435. package/translations/es.json +21 -2
  436. package/translations/fr.json +26 -7
  437. package/translations/it.json +24 -5
  438. package/translations/nl.json +21 -2
  439. package/translations/pt.json +21 -2
  440. package/translations/sk.json +22 -3
@@ -1,6 +1,6 @@
1
1
  import { BaseConverter, MetadataMapperContext } from '../base.converter';
2
2
  import { isEqual } from '../convert-utils';
3
- import { readAbstract, readContacts, readContactsForResource, readKeywords, readLandingPage, readLicenses, readOnlineResources, readOwnerOrganization, readRecordCreated, readRecordUpdated, readResourceCreated, readResourceUpdated, readSpatialExtents, readTitle, readTopics, readUniqueIdentifier, } from './read-parts';
3
+ import { readAbstract, readContacts, readContactsForResource, readDefaultLanguage, readKeywords, readLandingPage, readLicenses, readOnlineResources, readOwnerOrganization, readRecordCreated, readRecordUpdated, readResourceCreated, readResourceUpdated, readSpatialExtents, readTitle, readTopics, readUniqueIdentifier, } from './read-parts';
4
4
  import { writeAbstract, writeTitle, writeUniqueIdentifier } from './write-parts';
5
5
  import { graph, sym } from 'rdflib';
6
6
  import { DCAT, RDF } from './namespaces';
@@ -28,6 +28,8 @@ export class DcatApConverter extends BaseConverter {
28
28
  resourceCreated: readResourceCreated,
29
29
  ownerOrganization: readOwnerOrganization,
30
30
  licenses: readLicenses,
31
+ defaultLanguage: readDefaultLanguage,
32
+ otherLanguages: () => [],
31
33
  // TODO
32
34
  kind: () => 'dataset',
33
35
  recordPublished: () => undefined,
@@ -42,7 +44,7 @@ export class DcatApConverter extends BaseConverter {
42
44
  temporalExtents: () => [],
43
45
  spatialRepresentation: () => undefined,
44
46
  extras: () => undefined,
45
- languages: () => [],
47
+ translations: () => undefined,
46
48
  };
47
49
  this.writers = {
48
50
  uniqueIdentifier: writeUniqueIdentifier,
@@ -75,46 +77,53 @@ export class DcatApConverter extends BaseConverter {
75
77
  spatialExtents: () => undefined,
76
78
  extras: () => undefined,
77
79
  landingPage: () => undefined,
78
- languages: () => undefined,
80
+ defaultLanguage: () => undefined,
81
+ otherLanguages: () => undefined,
82
+ translations: () => undefined,
79
83
  };
80
84
  }
81
85
  async readRecord(document) {
82
86
  const dataStore = graph();
83
87
  await loadGraph(dataStore, document, this.contentType);
84
88
  const catalogRecord = dataStore.the(null, null, DCAT('CatalogRecord'));
85
- const uniqueIdentifier = this.readers['uniqueIdentifier'](dataStore, catalogRecord);
86
- const kind = this.readers['kind'](dataStore, catalogRecord);
87
- const ownerOrganization = this.readers['ownerOrganization'](dataStore, catalogRecord);
88
- const title = this.readers['title'](dataStore, catalogRecord);
89
- const abstract = this.readers['abstract'](dataStore, catalogRecord);
90
- const contacts = this.readers['contacts'](dataStore, catalogRecord);
91
- const contactsForResource = this.readers['contactsForResource'](dataStore, catalogRecord);
92
- const recordUpdated = this.readers['recordUpdated'](dataStore, catalogRecord);
93
- const recordCreated = this.readers['recordCreated'](dataStore, catalogRecord);
94
- const recordPublished = this.readers['recordPublished'](dataStore, catalogRecord);
95
- const resourceCreated = this.readers['resourceCreated'](dataStore, catalogRecord);
96
- const resourceUpdated = this.readers['resourceUpdated'](dataStore, catalogRecord);
97
- const resourcePublished = this.readers['resourcePublished'](dataStore, catalogRecord);
98
- const keywords = this.readers['keywords'](dataStore, catalogRecord);
99
- const topics = this.readers['topics'](dataStore, catalogRecord);
100
- const legalConstraints = this.readers['legalConstraints'](dataStore, catalogRecord);
101
- const otherConstraints = this.readers['otherConstraints'](dataStore, catalogRecord);
102
- const securityConstraints = this.readers['securityConstraints'](dataStore, catalogRecord);
103
- const licenses = this.readers['licenses'](dataStore, catalogRecord);
104
- const overviews = this.readers['overviews'](dataStore, catalogRecord);
105
- const landingPage = this.readers['landingPage'](dataStore, catalogRecord);
89
+ const tr = {};
90
+ // we need the default language first for the other fields
91
+ const defaultLanguage = this.readers['defaultLanguage'](dataStore, catalogRecord, tr, null);
92
+ const uniqueIdentifier = this.readers['uniqueIdentifier'](dataStore, catalogRecord, tr, defaultLanguage);
93
+ const kind = this.readers['kind'](dataStore, catalogRecord, tr, defaultLanguage);
94
+ const ownerOrganization = this.readers['ownerOrganization'](dataStore, catalogRecord, tr, defaultLanguage);
95
+ const title = this.readers['title'](dataStore, catalogRecord, tr, defaultLanguage);
96
+ const abstract = this.readers['abstract'](dataStore, catalogRecord, tr, defaultLanguage);
97
+ const contacts = this.readers['contacts'](dataStore, catalogRecord, tr, defaultLanguage);
98
+ const contactsForResource = this.readers['contactsForResource'](dataStore, catalogRecord, tr, defaultLanguage);
99
+ const recordUpdated = this.readers['recordUpdated'](dataStore, catalogRecord, tr, defaultLanguage);
100
+ const recordCreated = this.readers['recordCreated'](dataStore, catalogRecord, tr, defaultLanguage);
101
+ const recordPublished = this.readers['recordPublished'](dataStore, catalogRecord, tr, defaultLanguage);
102
+ const resourceCreated = this.readers['resourceCreated'](dataStore, catalogRecord, tr, defaultLanguage);
103
+ const resourceUpdated = this.readers['resourceUpdated'](dataStore, catalogRecord, tr, defaultLanguage);
104
+ const resourcePublished = this.readers['resourcePublished'](dataStore, catalogRecord, tr, defaultLanguage);
105
+ const keywords = this.readers['keywords'](dataStore, catalogRecord, tr, defaultLanguage);
106
+ const topics = this.readers['topics'](dataStore, catalogRecord, tr, defaultLanguage);
107
+ const legalConstraints = this.readers['legalConstraints'](dataStore, catalogRecord, tr, defaultLanguage);
108
+ const otherConstraints = this.readers['otherConstraints'](dataStore, catalogRecord, tr, defaultLanguage);
109
+ const securityConstraints = this.readers['securityConstraints'](dataStore, catalogRecord, tr, defaultLanguage);
110
+ const licenses = this.readers['licenses'](dataStore, catalogRecord, tr, defaultLanguage);
111
+ const overviews = this.readers['overviews'](dataStore, catalogRecord, tr, defaultLanguage);
112
+ const landingPage = this.readers['landingPage'](dataStore, catalogRecord, tr, defaultLanguage);
113
+ const otherLanguages = this.readers['otherLanguages'](dataStore, catalogRecord, tr, defaultLanguage);
106
114
  if (kind === 'dataset') {
107
- const status = this.readers['status'](dataStore, catalogRecord);
108
- const spatialRepresentation = this.readers['spatialRepresentation'](dataStore, catalogRecord);
109
- const spatialExtents = this.readers['spatialExtents'](dataStore, catalogRecord);
110
- const temporalExtents = this.readers['temporalExtents'](dataStore, catalogRecord);
111
- const lineage = this.readers['lineage'](dataStore, catalogRecord);
112
- const onlineResources = this.readers['onlineResources'](dataStore, catalogRecord);
113
- const updateFrequency = this.readers['updateFrequency'](dataStore, catalogRecord);
115
+ const status = this.readers['status'](dataStore, catalogRecord, tr, defaultLanguage);
116
+ const spatialRepresentation = this.readers['spatialRepresentation'](dataStore, catalogRecord, tr, defaultLanguage);
117
+ const spatialExtents = this.readers['spatialExtents'](dataStore, catalogRecord, tr, defaultLanguage);
118
+ const temporalExtents = this.readers['temporalExtents'](dataStore, catalogRecord, tr, defaultLanguage);
119
+ const lineage = this.readers['lineage'](dataStore, catalogRecord, tr, defaultLanguage);
120
+ const onlineResources = this.readers['onlineResources'](dataStore, catalogRecord, tr, defaultLanguage);
121
+ const updateFrequency = this.readers['updateFrequency'](dataStore, catalogRecord, tr, defaultLanguage);
114
122
  return {
115
123
  uniqueIdentifier,
116
124
  kind,
117
- languages: [],
125
+ defaultLanguage,
126
+ otherLanguages,
118
127
  ...(recordCreated && { recordCreated }),
119
128
  ...(recordPublished && { recordPublished }),
120
129
  recordUpdated,
@@ -141,14 +150,16 @@ export class DcatApConverter extends BaseConverter {
141
150
  onlineResources,
142
151
  updateFrequency,
143
152
  ...(landingPage && { landingPage }),
153
+ translations: tr,
144
154
  };
145
155
  }
146
156
  else {
147
- const onlineResources = this.readers['onlineResources'](dataStore, catalogRecord);
157
+ const onlineResources = this.readers['onlineResources'](dataStore, catalogRecord, tr, defaultLanguage);
148
158
  return {
149
159
  uniqueIdentifier,
150
160
  kind,
151
- languages: [],
161
+ defaultLanguage,
162
+ otherLanguages,
152
163
  ...(recordCreated && { recordCreated }),
153
164
  ...(recordPublished && { recordPublished }),
154
165
  recordUpdated,
@@ -169,6 +180,7 @@ export class DcatApConverter extends BaseConverter {
169
180
  overviews,
170
181
  onlineResources,
171
182
  ...(landingPage && { landingPage }),
183
+ translations: tr,
172
184
  };
173
185
  }
174
186
  }
@@ -251,4 +263,4 @@ export class DcatApConverter extends BaseConverter {
251
263
  return dataStore.serialize(undefined, this.contentType, null, {});
252
264
  }
253
265
  }
254
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGNhdC1hcC5jb252ZXJ0ZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2FwaS9tZXRhZGF0YS1jb252ZXJ0ZXIvc3JjL2xpYi9kY2F0LWFwL2RjYXQtYXAuY29udmVydGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQU1BLE9BQU8sRUFBRSxhQUFhLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQTtBQUN4RSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sa0JBQWtCLENBQUE7QUFDMUMsT0FBTyxFQUNMLFlBQVksRUFDWixZQUFZLEVBQ1osdUJBQXVCLEVBQ3ZCLFlBQVksRUFDWixlQUFlLEVBQ2YsWUFBWSxFQUNaLG1CQUFtQixFQUNuQixxQkFBcUIsRUFDckIsaUJBQWlCLEVBQ2pCLGlCQUFpQixFQUNqQixtQkFBbUIsRUFDbkIsbUJBQW1CLEVBQ25CLGtCQUFrQixFQUNsQixTQUFTLEVBQ1QsVUFBVSxFQUNWLG9CQUFvQixHQUNyQixNQUFNLGNBQWMsQ0FBQTtBQUNyQixPQUFPLEVBQUUsYUFBYSxFQUFFLFVBQVUsRUFBRSxxQkFBcUIsRUFBRSxNQUFNLGVBQWUsQ0FBQTtBQUNoRixPQUFPLEVBQUUsS0FBSyxFQUErQixHQUFHLEVBQUUsTUFBTSxRQUFRLENBQUE7QUFDaEUsT0FBTyxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsTUFBTSxjQUFjLENBQUE7QUFDeEMsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGFBQWEsQ0FBQTtBQUV0QyxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0scUJBQXFCLENBQUE7QUFDL0MsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sMEJBQTBCLENBQUE7QUFFM0QsTUFBTSxPQUFPLGVBQWdCLFNBQVEsYUFBcUI7SUEyRXhELFlBQ1UsY0FBMkIscUJBQXFCLEVBQ3hELE1BQTZCLElBQUkscUJBQXFCLEVBQUU7UUFFeEQsS0FBSyxDQUFDLEdB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QyxPQUFPLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxNQUFNLEVBQUUsU0FBUyxFQUFFLFVBQVUsQ0FBQyxDQUFBO1lBQ2hFLFlBQVksQ0FBQyx1QkFBdUIsQ0FBQztnQkFDbkMsSUFBSSxDQUFDLE9BQU8sQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDLE1BQU0sRUFBRSxTQUFTLEVBQUUsVUFBVSxDQUFDLENBQUE7WUFDdEUsWUFBWSxDQUFDLFdBQVcsQ0FBQztnQkFDdkIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsQ0FBQyxNQUFNLEVBQUUsU0FBUyxFQUFFLFVBQVUsQ0FBQyxDQUFBO1lBQzFELFlBQVksQ0FBQyxpQkFBaUIsQ0FBQztnQkFDN0IsSUFBSSxDQUFDLE9BQU8sQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLE1BQU0sRUFBRSxTQUFTLEVBQUUsVUFBVSxDQUFDLENBQUE7WUFDaEUsWUFBWSxDQUFDLFNBQVMsQ0FBQztnQkFDckIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQyxNQUFNLEVBQUUsU0FBUyxFQUFFLFVBQVUsQ0FBQyxDQUFBO1NBQ3pEO1FBRUQsSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsRUFBRTtZQUNwQyxPQUFPLGdCQUFnQixDQUFDLFNBQVMsQ0FBQyxDQUFBO1NBQ25DO1FBRUQsT0FBTyxTQUFTLENBQUMsU0FBUyxDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUMsV0FBVyxFQUFFLElBQUksRUFBRSxFQUFFLENBQUMsQ0FBQTtJQUNuRSxDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBDYXRhbG9nUmVjb3JkLFxuICBDYXRhbG9nUmVjb3JkS2V5cyxcbiAgRGF0YXNldFJlY29yZCxcbiAgU2VydmljZVJlY29yZCxcbn0gZnJvbSAnLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb21tb24vZG9tYWluL3NyYy9saWIvbW9kZWwvcmVjb3JkJ1xuaW1wb3J0IHsgQmFzZUNvbnZlcnRlciwgTWV0YWRhdGFNYXBwZXJDb250ZXh0IH0gZnJvbSAnLi4vYmFzZS5jb252ZXJ0ZXInXG5pbXBvcnQgeyBpc0VxdWFsIH0gZnJvbSAnLi4vY29udmVydC11dGlscydcbmltcG9ydCB7XG4gIHJlYWRBYnN0cmFjdCxcbiAgcmVhZENvbnRhY3RzLFxuICByZWFkQ29udGFjdHNGb3JSZXNvdXJjZSxcbiAgcmVhZEtleXdvcmRzLFxuICByZWFkTGFuZGluZ1BhZ2UsXG4gIHJlYWRMaWNlbnNlcyxcbiAgcmVhZE9ubGluZVJlc291cmNlcyxcbiAgcmVhZE93bmVyT3JnYW5pemF0aW9uLFxuICByZWFkUmVjb3JkQ3JlYXRlZCxcbiAgcmVhZFJlY29yZFVwZGF0ZWQsXG4gIHJlYWRSZXNvdXJjZUNyZWF0ZWQsXG4gIHJlYWRSZXNvdXJjZVVwZGF0ZWQsXG4gIHJlYWRTcGF0aWFsRXh0ZW50cyxcbiAgcmVhZFRpdGxlLFxuICByZWFkVG9waWNzLFxuICByZWFkVW5pcXVlSWRlbnRpZmllcixcbn0gZnJvbSAnLi9yZWFkLXBhcnRzJ1xuaW1wb3J0IHsgd3JpdGVBYnN0cmFjdCwgd3JpdGVUaXRsZSwgd3JpdGVVbmlxdWVJZGVudGlmaWVyIH0gZnJvbSAnLi93cml0ZS1wYXJ0cydcbmltcG9ydCB7IGdyYXBoLCBOYW1lZE5vZGUsIFN0YXRlbWVudCwgU3RvcmUsIHN5bSB9IGZyb20gJ3JkZmxpYidcbmltcG9ydCB7IERDQVQsIFJERiB9IGZyb20gJy4vbmFtZXNwYWNlcydcbmltcG9ydCB7IEJBU0VfVVJJIH0gZnJvbSAnLi91dGlscy91cmknXG5pbXBvcnQgdHlwZSB7IENvbnRlbnRUeXBlIH0gZnJvbSAncmRmbGliL2xpYi90eXBlcydcbmltcG9ydCB7IGxvYWRHcmFwaCB9IGZyb20gJy4vdXRpbHMvZ3JhcGgtdXRpbHMnXG5pbXBvcnQgeyBleHBvcnRHcmFwaFRvWG1sIH0gZnJvbSAnLi91dGlscy9zZXJpYWxpemUtdG8teG1sJ1xuXG5leHBvcnQgY2xhc3MgRGNhdEFwQ29udmVydGVyIGV4dGVuZHMgQmFzZUNvbnZlcnRlcjxzdHJpbmc+IHtcbiAgcHJvdGVjdGVkIHJlYWRlcnM6IFJlY29yZDxcbiAgICBDYXRhbG9nUmVjb3JkS2V5cyxcbiAgICAoZGF0YVN0b3JlOiBTdG9yZSwgY2F0YWxvZ1JlY29yZDogTmFtZWROb2RlKSA9PiB1bmtub3duXG4gID4gPSB7XG4gICAgdW5pcXVlSWRlbnRpZmllcjogcmVhZFVuaXF1ZUlkZW50aWZpZXIsXG4gICAgdGl0bGU6IHJlYWRUaXRsZSxcbiAgICBhYnN0cmFjdDogcmVhZEFic3RyYWN0LFxuICAgIGNvbnRhY3RzOiByZWFkQ29udGFjdHMsXG4gICAgY29udGFjdHNGb3JSZXNvdXJjZTogcmVhZENvbnRhY3RzRm9yUmVzb3VyY2UsXG4gICAgbGFuZGluZ1BhZ2U6IHJlYWRMYW5kaW5nUGFnZSxcbiAgICBvbmxpbmVSZXNvdXJjZXM6IHJlYWRPbmxpbmVSZXNvdXJjZXMsXG4gICAgc3BhdGlhbEV4dGVudHM6IHJlYWRTcGF0aWFsRXh0ZW50cyxcbiAgICBrZXl3b3JkczogcmVhZEtleXdvcmRzLFxuICAgIHRvcGljczogcmVhZFRvcGljcyxcbiAgICByZWNvcmRVcGRhdGVkOiByZWFkUmVjb3JkVXBkYXRlZCxcbiAgICByZWNvcmRDcmVhdGVkOiByZWFkUmVjb3JkQ3JlYXRlZCxcbiAgICByZXNvdXJjZVVwZGF0ZWQ6IHJlYWRSZXNvdXJjZVVwZGF0ZWQsXG4gICAgcmVzb3VyY2VDcmVhdGVkOiByZWFkUmVzb3VyY2VDcmVhdGVkLFxuICAgIG93bmVyT3JnYW5pemF0aW9uOiByZWFkT3duZXJPcmdhbml6YXRpb24sXG4gICAgbGljZW5zZXM6IHJlYWRMaWNlbnNlcyxcbiAgICAvLyBUT0RPXG4gICAga2luZDogKCkgPT4gJ2RhdGFzZXQnLFxuICAgIHJlY29yZFB1Ymxpc2hlZDogKCkgPT4gdW5kZWZpbmVkLFxuICAgIHJlc291cmNlUHVibGlzaGVkOiAoKSA9PiB1bmRlZmluZWQsXG4gICAgbGVnYWxDb25zdHJhaW50czogKCkgPT4gW10sXG4gICAgc2VjdXJpdHlDb25zdHJhaW50czogKCkgPT4gW10sXG4gICAgb3RoZXJDb25zdHJhaW50czogKCkgPT4gW10sXG4gICAgc3RhdHVzOiAoKSA9PiAnY29tcGxldGVkJyxcbiAgICB1cGRhdGVGcmVxdWVuY3k6ICgpID0+ICd1bmtub3duJyxcbiAgICBvdmVydmlld3M6ICgpID0+IFtdLFxuICAgIGxpbmVhZ2U6ICgpID0+ICcnLFxuICAgIHRlbXBvcmFsRXh0ZW50czogKCkgPT4gW10sXG4gICAgc3BhdGlhbFJlcHJlc2VudGF0aW9uOiAoKSA9PiB1bmRlZmluZWQsXG4gICAgZXh0cmFzOiAoKSA9PiB1bmRlZmluZWQsXG4gICAgbGFuZ3VhZ2VzOiAoKSA9PiBbXSxcbiAgfVxuXG4gIHByb3RlY3RlZCB3cml0ZXJzOiBSZWNvcmQ8XG4gICAgQ2F0YWxvZ1JlY29yZEtleXMsXG4gICAgKHJlY29yZDogQ2F0YWxvZ1JlY29yZCwgZGF0YVN0b3JlOiBTdG9yZSwgY2F0YWxvZ1JlY29yZDogTmFtZWROb2RlKSA9PiB2b2lkXG4gID4gPSB7XG4gICAgdW5pcXVlSWRlbnRpZmllcjogd3JpdGVVbmlxdWVJZGVudGlmaWVyLFxuICAgIHRpdGxlOiB3cml0ZVRpdGxlLFxuICAgIGFic3RyYWN0OiB3cml0ZUFic3RyYWN0LFxuICAgIC8vIFRPRE9cbiAgICBraW5kOiAoKSA9PiB1bmRlZmluZWQsXG4gICAgb3duZXJPcmdhbml6YXRpb246ICgpID0+IHVuZGVmaW5lZCxcbiAgICByZWNvcmRVcGRhdGVkOiAoKSA9PiB1bmRlZmluZWQsXG4gICAgcmVjb3JkQ3JlYXRlZDogKCkgPT4gdW5kZWZpbmVkLFxuICAgIHJlY29yZFB1Ymxpc2hlZDogKCkgPT4gdW5kZWZpbmVkLFxuICAgIHJlc291cmNlVXBkYXRlZDogKCkgPT4gdW5kZWZpbmVkLFxuICAgIHJlc291cmNlQ3JlYXRlZDogKCkgPT4gdW5kZWZpbmVkLFxuICAgIHJlc291cmNlUHVibGlzaGVkOiAoKSA9PiB1bmRlZmluZWQsXG4gICAgY29udGFjdHM6ICgpID0+IHVuZGVmaW5lZCxcbiAgICBjb250YWN0c0ZvclJlc291cmNlOiAoKSA9PiB1bmRlZmluZWQsXG4gICAga2V5d29yZHM6ICgpID0+IHVuZGVmaW5lZCxcbiAgICB0b3BpY3M6ICgpID0+IHVuZGVmaW5lZCxcbiAgICBsaWNlbnNlczogKCkgPT4gdW5kZWZpbmVkLFxuICAgIGxlZ2FsQ29uc3RyYWludHM6ICgpID0+IHVuZGVmaW5lZCxcbiAgICBzZWN1cml0eUNvbnN0cmFpbnRzOiAoKSA9PiB1bmRlZmluZWQsXG4gICAgb3RoZXJDb25zdHJhaW50czogKCkgPT4gdW5kZWZpbmVkLFxuICAgIHN0YXR1czogKCkgPT4gdW5kZWZpbmVkLFxuICAgIHVwZGF0ZUZyZXF1ZW5jeTogKCkgPT4gdW5kZWZpbmVkLFxuICAgIHNwYXRpYWxSZXByZXNlbnRhdGlvbjogKCkgPT4gdW5kZWZpbmVkLFxuICAgIG92ZXJ2aWV3czogKCkgPT4gdW5kZWZpbmVkLFxuICAgIGxpbmVhZ2U6ICgpID0+IHVuZGVmaW5lZCxcbiAgICBvbmxpbmVSZXNvdXJjZXM6ICgpID0+IHVuZGVmaW5lZCxcbiAgICB0ZW1wb3JhbEV4dGVudHM6ICgpID0+IHVuZGVmaW5lZCxcbiAgICBzcGF0aWFsRXh0ZW50czogKCkgPT4gdW5kZWZpbmVkLFxuICAgIGV4dHJhczogKCkgPT4gdW5kZWZpbmVkLFxuICAgIGxhbmRpbmdQYWdlOiAoKSA9PiB1bmRlZmluZWQsXG4gICAgbGFuZ3VhZ2VzOiAoKSA9PiB1bmRlZmluZWQsXG4gIH1cblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGNvbnRlbnRUeXBlOiBDb250ZW50VHlwZSA9ICdhcHBsaWNhdGlvbi9yZGYreG1sJyxcbiAgICBjdHg6IE1ldGFkYXRhTWFwcGVyQ29udGV4dCA9IG5ldyBNZXRhZGF0YU1hcHBlckNvbnRleHQoKVxuICApIHtcbiAgICBzdXBlcihjdHgpXG4gIH1cblxuICBhc3luYyByZWFkUmVjb3JkKGRvY3VtZW50OiBzdHJpbmcpOiBQcm9taXNlPENhdGFsb2dSZWNvcmQ+IHtcbiAgICBjb25zdCBkYXRhU3RvcmUgPSBncmFwaCgpXG4gICAgYXdhaXQgbG9hZEdyYXBoKGRhdGFTdG9yZSwgZG9jdW1lbnQsIHRoaXMuY29udGVudFR5cGUpXG5cbiAgICBjb25zdCBjYXRhbG9nUmVjb3JkID0gZGF0YVN0b3JlLnRoZShcbiAgICAgIG51bGwsXG4gICAgICBudWxsLFxuICAgICAgRENBVCgnQ2F0YWxvZ1JlY29yZCcpXG4gICAgKSBhcyBOYW1lZE5vZGVcblxuICAgIGNvbnN0IHVuaXF1ZUlkZW50aWZpZXIgPSB0aGlzLnJlYWRlcnNbJ3VuaXF1ZUlkZW50aWZpZXInXShcbiAgICAgIGRhdGFTdG9yZSxcbiAgICAgIGNhdGFsb2dSZWNvcmRcbiAgICApXG4gICAgY29uc3Qga2luZCA9IHRoaXMucmVhZGVyc1sna2luZCddKGRhdGFTdG9yZSwgY2F0YWxvZ1JlY29yZClcbiAgICBjb25zdCBvd25lck9yZ2FuaXphdGlvbiA9IHRoaXMucmVhZGVyc1snb3duZXJPcmdhbml6YXRpb24nXShcbiAgICAgIGRhdGFTdG9yZSxcbiAgICAgIGNhdGFsb2dSZWNvcmRcbiAgICApXG4gICAgY29uc3QgdGl0bGUgPSB0aGlzLnJlYWRlcnNbJ3RpdGxlJ10oZGF0YVN0b3JlLCBjYXRhbG9nUmVjb3JkKVxuICAgIGNvbnN0IGFic3RyYWN0ID0gdGhpcy5yZWFkZXJzWydhYnN0cmFjdCddKGRhdGFTdG9yZSwgY2F0YWxvZ1JlY29yZClcbiAgICBjb25zdCBjb250YWN0cyA9IHRoaXMucmVhZGVyc1snY29udGFjdHMnXShkYXRhU3RvcmUsIGNhdGFsb2dSZWNvcmQpXG4gICAgY29uc3QgY29udGFjdHNGb3JSZXNvdXJjZSA9IHRoaXMucmVhZGVyc1snY29udGFjdHNGb3JSZXNvdXJjZSddKFxuICAgICAgZGF0YVN0b3JlLFxuICAgICAgY2F0YWxvZ1JlY29yZFxuICAgIClcbiAgICBjb25zdCByZWNvcmRVcGRhdGVkID0gdGhpcy5yZWFkZXJzWydyZWNvcmRVcGRhdGVkJ10oXG4gICAgICBkYXRhU3RvcmUsXG4gICAgICBjYXRhbG9nUmVjb3JkXG4gICAgKVxuICAgIGNvbnN0IHJlY29yZENyZWF0ZWQgPSB0aGlzLnJlYWRlcnNbJ3JlY29yZENyZWF0ZWQnXShcbiAgICAgIGRhdGFTdG9yZSxcbiAgICAgIGNhdGFsb2dSZWNvcmRcbiAgICApXG4gICAgY29uc3QgcmVjb3JkUHVibGlzaGVkID0gdGhpcy5yZWFkZXJzWydyZWNvcmRQdWJsaXNoZWQnXShcbiAgICAgIGRhdGFTdG9yZSxcbiAgICAgIGNhdGFsb2dSZWNvcmRcbiAgICApXG4gICAgY29uc3QgcmVzb3VyY2VDcmVhdGVkID0gdGhpcy5yZWFkZXJzWydyZXNvdXJjZUNyZWF0ZWQnXShcbiAgICAgIGRhdGFTdG9yZSxcbiAgICAgIGNhdGFsb2dSZWNvcmRcbiAgICApXG4gICAgY29uc3QgcmVzb3VyY2VVcGRhdGVkID0gdGhpcy5yZWFkZXJzWydyZXNvdXJjZVVwZGF0ZWQnXShcbiAgICAgIGRhdGFTdG9yZSxcbiAgICAgIGNhdGFsb2dSZWNvcmRcbiAgICApXG4gICAgY29uc3QgcmVzb3VyY2VQdWJsaXNoZWQgPSB0aGlzLnJlYWRlcnNbJ3Jlc291cmNlUHVibGlzaGVkJ10oXG4gICAgICBkYXRhU3RvcmUsXG4gICAgICBjYXRhbG9nUmVjb3JkXG4gICAgKVxuICAgIGNvbnN0IGtleXdvcmRzID0gdGhpcy5yZWFkZXJzWydrZXl3b3JkcyddKGRhdGFTdG9yZSwgY2F0YWxvZ1JlY29yZClcbiAgICBjb25zdCB0b3BpY3MgPSB0aGlzLnJlYWRlcnNbJ3RvcGljcyddKGRhdGFTdG9yZSwgY2F0YWxvZ1JlY29yZClcbiAgICBjb25zdCBsZWdhbENvbnN0cmFpbnRzID0gdGhpcy5yZWFkZXJzWydsZWdhbENvbnN0cmFpbnRzJ10oXG4gICAgICBkYXRhU3RvcmUsXG4gICAgICBjYXRhbG9nUmVjb3JkXG4gICAgKVxuICAgIGNvbnN0IG90aGVyQ29uc3RyYWludHMgPSB0aGlzLnJlYWRlcnNbJ290aGVyQ29uc3RyYWludHMnXShcbiAgICAgIGRhdGFTdG9yZSxcbiAgICAgIGNhdGFsb2dSZWNvcmRcbiAgICApXG4gICAgY29uc3Qgc2VjdXJpdHlDb25zdHJhaW50cyA9IHRoaXMucmVhZGVyc1snc2VjdXJpdHlDb25zdHJhaW50cyddKFxuICAgICAgZGF0YVN0b3JlLFxuICAgICAgY2F0YWxvZ1JlY29yZFxuICAgIClcbiAgICBjb25zdCBsaWNlbnNlcyA9IHRoaXMucmVhZGVyc1snbGljZW5zZXMnXShkYXRhU3RvcmUsIGNhdGFsb2dSZWNvcmQpXG4gICAgY29uc3Qgb3ZlcnZpZXdzID0gdGhpcy5yZWFkZXJzWydvdmVydmlld3MnXShkYXRhU3RvcmUsIGNhdGFsb2dSZWNvcmQpXG4gICAgY29uc3QgbGFuZGluZ1BhZ2UgPSB0aGlzLnJlYWRlcnNbJ2xhbmRpbmdQYWdlJ10oZGF0YVN0b3JlLCBjYXRhbG9nUmVjb3JkKVxuXG4gICAgaWYgKGtpbmQgPT09ICdkYXRhc2V0Jykge1xuICAgICAgY29uc3Qgc3RhdHVzID0gdGhpcy5yZWFkZXJzWydzdGF0dXMnXShkYXRhU3RvcmUsIGNhdGFsb2dSZWNvcmQpXG4gICAgICBjb25zdCBzcGF0aWFsUmVwcmVzZW50YXRpb24gPSB0aGlzLnJlYWRlcnNbJ3NwYXRpYWxSZXByZXNlbnRhdGlvbiddKFxuICAgICAgICBkYXRhU3RvcmUsXG4gICAgICAgIGNhdGFsb2dSZWNvcmRcbiAgICAgIClcbiAgICAgIGNvbnN0IHNwYXRpYWxFeHRlbnRzID0gdGhpcy5yZWFkZXJzWydzcGF0aWFsRXh0ZW50cyddKFxuICAgICAgICBkYXRhU3RvcmUsXG4gICAgICAgIGNhdGFsb2dSZWNvcmRcbiAgICAgIClcbiAgICAgIGNvbnN0IHRlbXBvcmFsRXh0ZW50cyA9IHRoaXMucmVhZGVyc1sndGVtcG9yYWxFeHRlbnRzJ10oXG4gICAgICAgIGRhdGFTdG9yZSxcbiAgICAgICAgY2F0YWxvZ1JlY29yZFxuICAgICAgKVxuICAgICAgY29uc3QgbGluZWFnZSA9IHRoaXMucmVhZGVyc1snbGluZWFnZSddKGRhdGFTdG9yZSwgY2F0YWxvZ1JlY29yZClcbiAgICAgIGNvbnN0IG9ubGluZVJlc291cmNlcyA9IHRoaXMucmVhZGVyc1snb25saW5lUmVzb3VyY2VzJ10oXG4gICAgICAgIGRhdGFTdG9yZSxcbiAgICAgICAgY2F0YWxvZ1JlY29yZFxuICAgICAgKVxuICAgICAgY29uc3QgdXBkYXRlRnJlcXVlbmN5ID0gdGhpcy5yZWFkZXJzWyd1cGRhdGVGcmVxdWVuY3knXShcbiAgICAgICAgZGF0YVN0b3JlLFxuICAgICAgICBjYXRhbG9nUmVjb3JkXG4gICAgICApXG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIHVuaXF1ZUlkZW50aWZpZXIsXG4gICAgICAgIGtpbmQsXG4gICAgICAgIGxhbmd1YWdlczogW10sXG4gICAgICAgIC4uLihyZWNvcmRDcmVhdGVkICYmIHsgcmVjb3JkQ3JlYXRlZCB9KSxcbiAgICAgICAgLi4uKHJlY29yZFB1Ymxpc2hlZCAmJiB7IHJlY29yZFB1Ymxpc2hlZCB9KSxcbiAgICAgICAgcmVjb3JkVXBkYXRlZCxcbiAgICAgICAgLi4uKHJlc291cmNlQ3JlYXRlZCAmJiB7IHJlc291cmNlQ3JlYXRlZCB9KSxcbiAgICAgICAgLi4uKHJlc291cmNlVXBkYXRlZCAmJiB7IHJlc291cmNlVXBkYXRlZCB9KSxcbiAgICAgICAgLi4uKHJlc291cmNlUHVibGlzaGVkICYmIHsgcmVzb3VyY2VQdWJsaXNoZWQgfSksXG4gICAgICAgIHN0YXR1cyxcbiAgICAgICAgdGl0bGUsXG4gICAgICAgIGFic3RyYWN0LFxuICAgICAgICBvd25lck9yZ2FuaXphdGlvbixcbiAgICAgICAgY29udGFjdHMsXG4gICAgICAgIGNvbnRhY3RzRm9yUmVzb3VyY2UsXG4gICAgICAgIGtleXdvcmRzLFxuICAgICAgICB0b3BpY3MsXG4gICAgICAgIGxpY2Vuc2VzLFxuICAgICAgICBsZWdhbENvbnN0cmFpbnRzLFxuICAgICAgICBzZWN1cml0eUNvbnN0cmFpbnRzLFxuICAgICAgICBvdGhlckNvbnN0cmFpbnRzLFxuICAgICAgICBsaW5lYWdlLFxuICAgICAgICAuLi4oc3BhdGlhbFJlcHJlc2VudGF0aW9uICYmIHsgc3BhdGlhbFJlcHJlc2VudGF0aW9uIH0pLFxuICAgICAgICBvdmVydmlld3MsXG4gICAgICAgIHNwYXRpYWxFeHRlbnRzLFxuICAgICAgICB0ZW1wb3JhbEV4dGVudHMsXG4gICAgICAgIG9ubGluZVJlc291cmNlcyxcbiAgICAgICAgdXBkYXRlRnJlcXVlbmN5LFxuICAgICAgICAuLi4obGFuZGluZ1BhZ2UgJiYgeyBsYW5kaW5nUGFnZSB9KSxcbiAgICAgIH0gYXMgRGF0YXNldFJlY29yZFxuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBvbmxpbmVSZXNvdXJjZXMgPSB0aGlzLnJlYWRlcnNbJ29ubGluZVJlc291cmNlcyddKFxuICAgICAgICBkYXRhU3RvcmUsXG4gICAgICAgIGNhdGFsb2dSZWNvcmRcbiAgICAgIClcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHVuaXF1ZUlkZW50aWZpZXIsXG4gICAgICAgIGtpbmQsXG4gICAgICAgIGxhbmd1YWdlczogW10sXG4gICAgICAgIC4uLihyZWNvcmRDcmVhdGVkICYmIHsgcmVjb3JkQ3JlYXRlZCB9KSxcbiAgICAgICAgLi4uKHJlY29yZFB1Ymxpc2hlZCAmJiB7IHJlY29yZFB1Ymxpc2hlZCB9KSxcbiAgICAgICAgcmVjb3JkVXBkYXRlZCxcbiAgICAgICAgLi4uKHJlc291cmNlQ3JlYXRlZCAmJiB7IHJlc291cmNlQ3JlYXRlZCB9KSxcbiAgICAgICAgLi4uKHJlc291cmNlVXBkYXRlZCAmJiB7IHJlc291cmNlVXBkYXRlZCB9KSxcbiAgICAgICAgLi4uKHJlc291cmNlUHVibGlzaGVkICYmIHsgcmVzb3VyY2VQdWJsaXNoZWQgfSksXG4gICAgICAgIHRpdGxlLFxuICAgICAgICBhYnN0cmFjdCxcbiAgICAgICAgb3duZXJPcmdhbml6YXRpb24sXG4gICAgICAgIGNvbnRhY3RzLFxuICAgICAgICBjb250YWN0c0ZvclJlc291cmNlLFxuICAgICAgICBrZXl3b3JkcyxcbiAgICAgICAgdG9waWNzLFxuICAgICAgICBsaWNlbnNlcyxcbiAgICAgICAgbGVnYWxDb25zdHJhaW50cyxcbiAgICAgICAgc2VjdXJpdHlDb25zdHJhaW50cyxcbiAgICAgICAgb3RoZXJDb25zdHJhaW50cyxcbiAgICAgICAgb3ZlcnZpZXdzLFxuICAgICAgICBvbmxpbmVSZXNvdXJjZXMsXG4gICAgICAgIC4uLihsYW5kaW5nUGFnZSAmJiB7IGxhbmRpbmdQYWdlIH0pLFxuICAgICAgfSBhcyBTZXJ2aWNlUmVjb3JkXG4gICAgfVxuICB9XG5cbiAgYXN5bmMgd3JpdGVSZWNvcmQoXG4gICAgcmVjb3JkOiBDYXRhbG9nUmVjb3JkLFxuICAgIHJlZmVyZW5jZT86IHN0cmluZ1xuICApOiBQcm9taXNlPHN0cmluZz4ge1xuICAgIGNvbnN0IGRhdGFTdG9yZSA9IGdyYXBoKClcbiAgICBsZXQgZmllbGRDaGFuZ2VkOiAobmFtZTogc3RyaW5nKSA9PiBib29sZWFuXG4gICAgaWYgKHJlZmVyZW5jZSkge1xuICAgICAgY29uc3Qgb3JpZ2luYWxSZWNvcmQgPSBhd2FpdCB0aGlzLnJlYWRSZWNvcmQocmVmZXJlbmNlKVxuICAgICAgYXdhaXQgbG9hZEdyYXBoKFxuICAgICAgICBkYXRhU3RvcmUsXG4gICAgICAgIHJlZmVyZW5jZSxcbiAgICAgICAgdGhpcy5jb250ZW50VHlwZSxcbiAgICAgICAgRENBVCgnQ2F0YWxvZ1JlY29yZCcpLnZhbHVlXG4gICAgICApXG5cbiAgICAgIGZpZWxkQ2hhbmdlZCA9IChuYW1lOiBzdHJpbmcpID0+IHtcbiAgICAgICAgcmV0dXJuIG9yaWdpbmFsUmVjb3JkICE9PSBudWxsXG4gICAgICAgICAgPyAhaXNFcXVhbChyZWNvcmRbbmFtZV0sIG9yaWdpbmFsUmVjb3JkW25hbWVdKVxuICAgICAgICAgIDogdHJ1ZVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBmaWVsZENoYW5nZWQgPSAoKSA9PiB0cnVlXG4gICAgfVxuXG4gICAgbGV0IHJlY29yZE5vZGUgPSBkYXRhU3RvcmUudGhlKFxuICAgICAgbnVsbCxcbiAgICAgIFJERigndHlwZScpLFxuICAgICAgRENBVCgnQ2F0YWxvZ1JlY29yZCcpXG4gICAgKSBhcyBOYW1lZE5vZGVcbiAgICBpZiAoIXJlY29yZE5vZGUpIHtcbiAgICAgIGNvbnN0IHN0YXRlbWVudCA9IGRhdGFTdG9yZS5hZGQoXG4gICAgICAgIHN5bShgJHtCQVNFX1VSSX1yZWNvcmQvJHtyZWNvcmQudW5pcXVlSWRlbnRpZmllcn1gKSxcbiAgICAgICAgUkRGKCd0eXBlJyksXG4gICAgICAgIERDQVQoJ0NhdGFsb2dSZWNvcmQnKVxuICAgICAgKSBhcyBTdGF0ZW1lbnRcbiAgICAgIHJlY29yZE5vZGUgPSBzdGF0ZW1lbnQuc3ViamVjdCBhcyBOYW1lZE5vZGVcbiAgICB9XG5cbiAgICBmaWVsZENoYW5nZWQoJ3VuaXF1ZUlkZW50aWZpZXInKSAmJlxuICAgICAgdGhpcy53cml0ZXJzWyd1bmlxdWVJZGVudGlmaWVyJ10ocmVjb3JkLCBkYXRhU3RvcmUsIHJlY29yZE5vZGUpXG4gICAgZmllbGRDaGFuZ2VkKCdraW5kJykgJiYgdGhpcy53cml0ZXJzWydraW5kJ10ocmVjb3JkLCBkYXRhU3RvcmUsIHJlY29yZE5vZGUpXG5cbiAgICBmaWVsZENoYW5nZWQoJ2NvbnRhY3RzJykgJiZcbiAgICAgIHRoaXMud3JpdGVyc1snY29udGFjdHMnXShyZWNvcmQsIGRhdGFTdG9yZSwgcmVjb3JkTm9kZSlcbiAgICBmaWVsZENoYW5nZWQoJ293bmVyT3JnYW5pemF0aW9uJykgJiZcbiAgICAgIHRoaXMud3JpdGVyc1snb3duZXJPcmdhbml6YXRpb24nXShyZWNvcmQsIGRhdGFTdG9yZSwgcmVjb3JkTm9kZSlcblxuICAgIGZpZWxkQ2hhbmdlZCgncmVjb3JkVXBkYXRlZCcpICYmXG4gICAgICB0aGlzLndyaXRlcnNbJ3JlY29yZFVwZGF0ZWQnXShyZWNvcmQsIGRhdGFTdG9yZSwgcmVjb3JkTm9kZSlcbiAgICBmaWVsZENoYW5nZWQoJ3JlY29yZENyZWF0ZWQnKSAmJlxuICAgICAgdGhpcy53cml0ZXJzWydyZWNvcmRDcmVhdGVkJ10ocmVjb3JkLCBkYXRhU3RvcmUsIHJlY29yZE5vZGUpXG4gICAgZmllbGRDaGFuZ2VkKCdyZWNvcmRQdWJsaXNoZWQnKSAmJlxuICAgICAgdGhpcy53cml0ZXJzWydyZWNvcmRQdWJsaXNoZWQnXShyZWNvcmQsIGRhdGFTdG9yZSwgcmVjb3JkTm9kZSlcblxuICAgIGZpZWxkQ2hhbmdlZCgndGl0bGUnKSAmJlxuICAgICAgdGhpcy53cml0ZXJzWyd0aXRsZSddKHJlY29yZCwgZGF0YVN0b3JlLCByZWNvcmROb2RlKVxuICAgIGZpZWxkQ2hhbmdlZCgnYWJzdHJhY3QnKSAmJlxuICAgICAgdGhpcy53cml0ZXJzWydhYnN0cmFjdCddKHJlY29yZCwgZGF0YVN0b3JlLCByZWNvcmROb2RlKVxuXG4gICAgZmllbGRDaGFuZ2VkKCdyZXNvdXJjZUNyZWF0ZWQnKSAmJlxuICAgICAgdGhpcy53cml0ZXJzWydyZXNvdXJjZUNyZWF0ZWQnXShyZWNvcmQsIGRhdGFTdG9yZSwgcmVjb3JkTm9kZSlcbiAgICBmaWVsZENoYW5nZWQoJ3Jlc291cmNlUHVibGlzaGVkJykgJiZcbiAgICAgIHRoaXMud3JpdGVyc1sncmVzb3VyY2VQdWJsaXNoZWQnXShyZWNvcmQsIGRhdGFTdG9yZSwgcmVjb3JkTm9kZSlcbiAgICBmaWVsZENoYW5nZWQoJ3Jlc291cmNlVXBkYXRlZCcpICYmXG4gICAgICB0aGlzLndyaXRlcnNbJ3Jlc291cmNlVXBkYXRlZCddKHJlY29yZCwgZGF0YVN0b3JlLCByZWNvcmROb2RlKVxuXG4gICAgZmllbGRDaGFuZ2VkKCdjb250YWN0c0ZvclJlc291cmNlJykgJiZcbiAgICAgIHRoaXMud3JpdGVyc1snY29udGFjdHNGb3JSZXNvdXJjZSddKHJlY29yZCwgZGF0YVN0b3JlLCByZWNvcmROb2RlKVxuXG4gICAgZmllbGRDaGFuZ2VkKCdrZXl3b3JkcycpICYmXG4gICAgICB0aGlzLndyaXRlcnNbJ2tleXdvcmRzJ10ocmVjb3JkLCBkYXRhU3RvcmUsIHJlY29yZE5vZGUpXG4gICAgZmllbGRDaGFuZ2VkKCd0b3BpY3MnKSAmJlxuICAgICAgdGhpcy53cml0ZXJzWyd0b3BpY3MnXShyZWNvcmQsIGRhdGFTdG9yZSwgcmVjb3JkTm9kZSlcbiAgICBmaWVsZENoYW5nZWQoJ2xlZ2FsQ29uc3RyYWludHMnKSAmJlxuICAgICAgdGhpcy53cml0ZXJzWydsZWdhbENvbnN0cmFpbnRzJ10ocmVjb3JkLCBkYXRhU3RvcmUsIHJlY29yZE5vZGUpXG4gICAgZmllbGRDaGFuZ2VkKCdzZWN1cml0eUNvbnN0cmFpbnRzJykgJiZcbiAgICAgIHRoaXMud3JpdGVyc1snc2VjdXJpdHlDb25zdHJhaW50cyddKHJlY29yZCwgZGF0YVN0b3JlLCByZWNvcmROb2RlKVxuICAgIGZpZWxkQ2hhbmdlZCgnbGljZW5zZXMnKSAmJlxuICAgICAgdGhpcy53cml0ZXJzWydsaWNlbnNlcyddKHJlY29yZCwgZGF0YVN0b3JlLCByZWNvcmROb2RlKVxuICAgIGZpZWxkQ2hhbmdlZCgnb3RoZXJDb25zdHJhaW50cycpICYmXG4gICAgICB0aGlzLndyaXRlcnNbJ290aGVyQ29uc3RyYWludHMnXShyZWNvcmQsIGRhdGFTdG9yZSwgcmVjb3JkTm9kZSlcbiAgICBmaWVsZENoYW5nZWQoJ29ubGluZVJlc291cmNlcycpICYmXG4gICAgICB0aGlzLndyaXRlcnNbJ29ubGluZVJlc291cmNlcyddKHJlY29yZCwgZGF0YVN0b3JlLCByZWNvcmROb2RlKVxuXG4gICAgaWYgKHJlY29yZC5raW5kID09PSAnZGF0YXNldCcpIHtcbiAgICAgIGZpZWxkQ2hhbmdlZCgnc3RhdHVzJykgJiZcbiAgICAgICAgdGhpcy53cml0ZXJzWydzdGF0dXMnXShyZWNvcmQsIGRhdGFTdG9yZSwgcmVjb3JkTm9kZSlcbiAgICAgIGZpZWxkQ2hhbmdlZCgndXBkYXRlRnJlcXVlbmN5JykgJiZcbiAgICAgICAgdGhpcy53cml0ZXJzWyd1cGRhdGVGcmVxdWVuY3knXShyZWNvcmQsIGRhdGFTdG9yZSwgcmVjb3JkTm9kZSlcbiAgICAgIGZpZWxkQ2hhbmdlZCgnc3BhdGlhbFJlcHJlc2VudGF0aW9uJykgJiZcbiAgICAgICAgdGhpcy53cml0ZXJzWydzcGF0aWFsUmVwcmVzZW50YXRpb24nXShyZWNvcmQsIGRhdGFTdG9yZSwgcmVjb3JkTm9kZSlcbiAgICAgIGZpZWxkQ2hhbmdlZCgnb3ZlcnZpZXdzJykgJiZcbiAgICAgICAgdGhpcy53cml0ZXJzWydvdmVydmlld3MnXShyZWNvcmQsIGRhdGFTdG9yZSwgcmVjb3JkTm9kZSlcbiAgICAgIGZpZWxkQ2hhbmdlZCgndGVtcG9yYWxFeHRlbnRzJykgJiZcbiAgICAgICAgdGhpcy53cml0ZXJzWyd0ZW1wb3JhbEV4dGVudHMnXShyZWNvcmQsIGRhdGFTdG9yZSwgcmVjb3JkTm9kZSlcbiAgICAgIGZpZWxkQ2hhbmdlZCgnbGluZWFnZScpICYmXG4gICAgICAgIHRoaXMud3JpdGVyc1snbGluZWFnZSddKHJlY29yZCwgZGF0YVN0b3JlLCByZWNvcmROb2RlKVxuICAgIH1cblxuICAgIGlmICh0aGlzLmNvbnRlbnRUeXBlLmluY2x1ZGVzKCd4bWwnKSkge1xuICAgICAgcmV0dXJuIGV4cG9ydEdyYXBoVG9YbWwoZGF0YVN0b3JlKVxuICAgIH1cblxuICAgIHJldHVybiBkYXRhU3RvcmUuc2VyaWFsaXplKHVuZGVmaW5lZCwgdGhpcy5jb250ZW50VHlwZSwgbnVsbCwge30pXG4gIH1cbn1cbiJdfQ==
266
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGNhdC1hcC5jb252ZXJ0ZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2FwaS9tZXRhZGF0YS1jb252ZXJ0ZXIvc3JjL2xpYi9kY2F0LWFwL2RjYXQtYXAuY29udmVydGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQVFBLE9BQU8sRUFBRSxhQUFhLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQTtBQUN4RSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sa0JBQWtCLENBQUE7QUFDMUMsT0FBTyxFQUNMLFlBQVksRUFDWixZQUFZLEVBQ1osdUJBQXVCLEVBQ3ZCLG1CQUFtQixFQUNuQixZQUFZLEVBQ1osZUFBZSxFQUNmLFlBQVksRUFDWixtQkFBbUIsRUFDbkIscUJBQXFCLEVBQ3JCLGlCQUFpQixFQUNqQixpQkFBaUIsRUFDakIsbUJBQW1CLEVBQ25CLG1CQUFtQixFQUNuQixrQkFBa0IsRUFDbEIsU0FBUyxFQUNULFVBQVUsRUFDVixvQkFBb0IsR0FDckIsTUFBTSxjQUFjLENBQUE7QUFDckIsT0FBTyxFQUFFLGFBQWEsRUFBRSxVQUFVLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxlQUFlLENBQUE7QUFDaEYsT0FBTyxFQUFFLEtBQUssRUFBK0IsR0FBRyxFQUFFLE1BQU0sUUFBUSxDQUFBO0FBQ2hFLE9BQU8sRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLE1BQU0sY0FBYyxDQUFBO0FBQ3hDLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxhQUFhLENBQUE7QUFFdEMsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLHFCQUFxQixDQUFBO0FBQy9DLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLDBCQUEwQixDQUFBO0FBRTNELE1BQU0sT0FBTyxlQUFnQixTQUFRLGFBQXFCO0lBb0Z4RCxZQUNVLGNBQTJCLHFCQUFxQixFQUN4RCxNQUE2QixJQUFJLHFCQUFxQixFQUFFO1FBRXhE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cmRLZXlzLFxuICBEYXRhc2V0UmVjb3JkLFxuICBMYW5ndWFnZUNvZGUsXG4gIFJlY29yZFRyYW5zbGF0aW9ucyxcbiAgU2VydmljZVJlY29yZCxcbn0gZnJvbSAnLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb21tb24vZG9tYWluL3NyYy9saWIvbW9kZWwvcmVjb3JkJ1xuaW1wb3J0IHsgQmFzZUNvbnZlcnRlciwgTWV0YWRhdGFNYXBwZXJDb250ZXh0IH0gZnJvbSAnLi4vYmFzZS5jb252ZXJ0ZXInXG5pbXBvcnQgeyBpc0VxdWFsIH0gZnJvbSAnLi4vY29udmVydC11dGlscydcbmltcG9ydCB7XG4gIHJlYWRBYnN0cmFjdCxcbiAgcmVhZENvbnRhY3RzLFxuICByZWFkQ29udGFjdHNGb3JSZXNvdXJjZSxcbiAgcmVhZERlZmF1bHRMYW5ndWFnZSxcbiAgcmVhZEtleXdvcmRzLFxuICByZWFkTGFuZGluZ1BhZ2UsXG4gIHJlYWRMaWNlbnNlcyxcbiAgcmVhZE9ubGluZVJlc291cmNlcyxcbiAgcmVhZE93bmVyT3JnYW5pemF0aW9uLFxuICByZWFkUmVjb3JkQ3JlYXRlZCxcbiAgcmVhZFJlY29yZFVwZGF0ZWQsXG4gIHJlYWRSZXNvdXJjZUNyZWF0ZWQsXG4gIHJlYWRSZXNvdXJjZVVwZGF0ZWQsXG4gIHJlYWRTcGF0aWFsRXh0ZW50cyxcbiAgcmVhZFRpdGxlLFxuICByZWFkVG9waWNzLFxuICByZWFkVW5pcXVlSWRlbnRpZmllcixcbn0gZnJvbSAnLi9yZWFkLXBhcnRzJ1xuaW1wb3J0IHsgd3JpdGVBYnN0cmFjdCwgd3JpdGVUaXRsZSwgd3JpdGVVbmlxdWVJZGVudGlmaWVyIH0gZnJvbSAnLi93cml0ZS1wYXJ0cydcbmltcG9ydCB7IGdyYXBoLCBOYW1lZE5vZGUsIFN0YXRlbWVudCwgU3RvcmUsIHN5bSB9IGZyb20gJ3JkZmxpYidcbmltcG9ydCB7IERDQVQsIFJERiB9IGZyb20gJy4vbmFtZXNwYWNlcydcbmltcG9ydCB7IEJBU0VfVVJJIH0gZnJvbSAnLi91dGlscy91cmknXG5pbXBvcnQgdHlwZSB7IENvbnRlbnRUeXBlIH0gZnJvbSAncmRmbGliL2xpYi90eXBlcydcbmltcG9ydCB7IGxvYWRHcmFwaCB9IGZyb20gJy4vdXRpbHMvZ3JhcGgtdXRpbHMnXG5pbXBvcnQgeyBleHBvcnRHcmFwaFRvWG1sIH0gZnJvbSAnLi91dGlscy9zZXJpYWxpemUtdG8teG1sJ1xuXG5leHBvcnQgY2xhc3MgRGNhdEFwQ29udmVydGVyIGV4dGVuZHMgQmFzZUNvbnZlcnRlcjxzdHJpbmc+IHtcbiAgcHJvdGVjdGVkIHJlYWRlcnM6IFJlY29yZDxcbiAgICBDYXRhbG9nUmVjb3JkS2V5cyxcbiAgICAoXG4gICAgICBkYXRhU3RvcmU6IFN0b3JlLFxuICAgICAgY2F0YWxvZ1JlY29yZDogTmFtZWROb2RlLFxuICAgICAgdHJhbnNsYXRpb25zOiBSZWNvcmRUcmFuc2xhdGlvbnMsXG4gICAgICBkZWZhdWx0TGFuZ3VhZ2U6IExhbmd1YWdlQ29kZVxuICAgICkgPT4gdW5rbm93blxuICA+ID0ge1xuICAgIHVuaXF1ZUlkZW50aWZpZXI6IHJlYWRVbmlxdWVJZGVudGlmaWVyLFxuICAgIHRpdGxlOiByZWFkVGl0bGUsXG4gICAgYWJzdHJhY3Q6IHJlYWRBYnN0cmFjdCxcbiAgICBjb250YWN0czogcmVhZENvbnRhY3RzLFxuICAgIGNvbnRhY3RzRm9yUmVzb3VyY2U6IHJlYWRDb250YWN0c0ZvclJlc291cmNlLFxuICAgIGxhbmRpbmdQYWdlOiByZWFkTGFuZGluZ1BhZ2UsXG4gICAgb25saW5lUmVzb3VyY2VzOiByZWFkT25saW5lUmVzb3VyY2VzLFxuICAgIHNwYXRpYWxFeHRlbnRzOiByZWFkU3BhdGlhbEV4dGVudHMsXG4gICAga2V5d29yZHM6IHJlYWRLZXl3b3JkcyxcbiAgICB0b3BpY3M6IHJlYWRUb3BpY3MsXG4gICAgcmVjb3JkVXBkYXRlZDogcmVhZFJlY29yZFVwZGF0ZWQsXG4gICAgcmVjb3JkQ3JlYXRlZDogcmVhZFJlY29yZENyZWF0ZWQsXG4gICAgcmVzb3VyY2VVcGRhdGVkOiByZWFkUmVzb3VyY2VVcGRhdGVkLFxuICAgIHJlc291cmNlQ3JlYXRlZDogcmVhZFJlc291cmNlQ3JlYXRlZCxcbiAgICBvd25lck9yZ2FuaXphdGlvbjogcmVhZE93bmVyT3JnYW5pemF0aW9uLFxuICAgIGxpY2Vuc2VzOiByZWFkTGljZW5zZXMsXG4gICAgZGVmYXVsdExhbmd1YWdlOiByZWFkRGVmYXVsdExhbmd1YWdlLFxuICAgIG90aGVyTGFuZ3VhZ2VzOiAoKSA9PiBbXSwgLy8gbGFuZ3VhZ2VzIHdpbGwgYmUgaW5mZXJyZWQgZnJvbSBmb3VuZCB0cmFuc2xhdGlvbnNcbiAgICAvLyBUT0RPXG4gICAga2luZDogKCkgPT4gJ2RhdGFzZXQnLFxuICAgIHJlY29yZFB1Ymxpc2hlZDogKCkgPT4gdW5kZWZpbmVkLFxuICAgIHJlc291cmNlUHVibGlzaGVkOiAoKSA9PiB1bmRlZmluZWQsXG4gICAgbGVnYWxDb25zdHJhaW50czogKCkgPT4gW10sXG4gICAgc2VjdXJpdHlDb25zdHJhaW50czogKCkgPT4gW10sXG4gICAgb3RoZXJDb25zdHJhaW50czogKCkgPT4gW10sXG4gICAgc3RhdHVzOiAoKSA9PiAnY29tcGxldGVkJyxcbiAgICB1cGRhdGVGcmVxdWVuY3k6ICgpID0+ICd1bmtub3duJyxcbiAgICBvdmVydmlld3M6ICgpID0+IFtdLFxuICAgIGxpbmVhZ2U6ICgpID0+ICcnLFxuICAgIHRlbXBvcmFsRXh0ZW50czogKCkgPT4gW10sXG4gICAgc3BhdGlhbFJlcHJlc2VudGF0aW9uOiAoKSA9PiB1bmRlZmluZWQsXG4gICAgZXh0cmFzOiAoKSA9PiB1bmRlZmluZWQsXG4gICAgdHJhbnNsYXRpb25zOiAoKSA9PiB1bmRlZmluZWQsXG4gIH1cblxuICBwcm90ZWN0ZWQgd3JpdGVyczogUmVjb3JkPFxuICAgIENhdGFsb2dSZWNvcmRLZXlzLFxuICAgIChyZWNvcmQ6IENhdGFsb2dSZWNvcmQsIGRhdGFTdG9yZTogU3RvcmUsIGNhdGFsb2dSZWNvcmQ6IE5hbWVkTm9kZSkgPT4gdm9pZFxuICA+ID0ge1xuICAgIHVuaXF1ZUlkZW50aWZpZXI6IHdyaXRlVW5pcXVlSWRlbnRpZmllcixcbiAgICB0aXRsZTogd3JpdGVUaXRsZSxcbiAgICBhYnN0cmFjdDogd3JpdGVBYnN0cmFjdCxcbiAgICAvLyBUT0RPXG4gICAga2luZDogKCkgPT4gdW5kZWZpbmVkLFxuICAgIG93bmVyT3JnYW5pemF0aW9uOiAoKSA9PiB1bmRlZmluZWQsXG4gICAgcmVjb3JkVXBkYXRlZDogKCkgPT4gdW5kZWZpbmVkLFxuICAgIHJlY29yZENyZWF0ZWQ6ICgpID0+IHVuZGVmaW5lZCxcbiAgICByZWNvcmRQdWJsaXNoZWQ6ICgpID0+IHVuZGVmaW5lZCxcbiAgICByZXNvdXJjZVVwZGF0ZWQ6ICgpID0+IHVuZGVmaW5lZCxcbiAgICByZXNvdXJjZUNyZWF0ZWQ6ICgpID0+IHVuZGVmaW5lZCxcbiAgICByZXNvdXJjZVB1Ymxpc2hlZDogKCkgPT4gdW5kZWZpbmVkLFxuICAgIGNvbnRhY3RzOiAoKSA9PiB1bmRlZmluZWQsXG4gICAgY29udGFjdHNGb3JSZXNvdXJjZTogKCkgPT4gdW5kZWZpbmVkLFxuICAgIGtleXdvcmRzOiAoKSA9PiB1bmRlZmluZWQsXG4gICAgdG9waWNzOiAoKSA9PiB1bmRlZmluZWQsXG4gICAgbGljZW5zZXM6ICgpID0+IHVuZGVmaW5lZCxcbiAgICBsZWdhbENvbnN0cmFpbnRzOiAoKSA9PiB1bmRlZmluZWQsXG4gICAgc2VjdXJpdHlDb25zdHJhaW50czogKCkgPT4gdW5kZWZpbmVkLFxuICAgIG90aGVyQ29uc3RyYWludHM6ICgpID0+IHVuZGVmaW5lZCxcbiAgICBzdGF0dXM6ICgpID0+IHVuZGVmaW5lZCxcbiAgICB1cGRhdGVGcmVxdWVuY3k6ICgpID0+IHVuZGVmaW5lZCxcbiAgICBzcGF0aWFsUmVwcmVzZW50YXRpb246ICgpID0+IHVuZGVmaW5lZCxcbiAgICBvdmVydmlld3M6ICgpID0+IHVuZGVmaW5lZCxcbiAgICBsaW5lYWdlOiAoKSA9PiB1bmRlZmluZWQsXG4gICAgb25saW5lUmVzb3VyY2VzOiAoKSA9PiB1bmRlZmluZWQsXG4gICAgdGVtcG9yYWxFeHRlbnRzOiAoKSA9PiB1bmRlZmluZWQsXG4gICAgc3BhdGlhbEV4dGVudHM6ICgpID0+IHVuZGVmaW5lZCxcbiAgICBleHRyYXM6ICgpID0+IHVuZGVmaW5lZCxcbiAgICBsYW5kaW5nUGFnZTogKCkgPT4gdW5kZWZpbmVkLFxuICAgIGRlZmF1bHRMYW5ndWFnZTogKCkgPT4gdW5kZWZpbmVkLFxuICAgIG90aGVyTGFuZ3VhZ2VzOiAoKSA9PiB1bmRlZmluZWQsXG4gICAgdHJhbnNsYXRpb25zOiAoKSA9PiB1bmRlZmluZWQsXG4gIH1cblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGNvbnRlbnRUeXBlOiBDb250ZW50VHlwZSA9ICdhcHBsaWNhdGlvbi9yZGYreG1sJyxcbiAgICBjdHg6IE1ldGFkYXRhTWFwcGVyQ29udGV4dCA9IG5ldyBNZXRhZGF0YU1hcHBlckNvbnRleHQoKVxuICApIHtcbiAgICBzdXBlcihjdHgpXG4gIH1cblxuICBhc3luYyByZWFkUmVjb3JkKGRvY3VtZW50OiBzdHJpbmcpOiBQcm9taXNlPENhdGFsb2dSZWNvcmQ+IHtcbiAgICBjb25zdCBkYXRhU3RvcmUgPSBncmFwaCgpXG4gICAgYXdhaXQgbG9hZEdyYXBoKGRhdGFTdG9yZSwgZG9jdW1lbnQsIHRoaXMuY29udGVudFR5cGUpXG5cbiAgICBjb25zdCBjYXRhbG9nUmVjb3JkID0gZGF0YVN0b3JlLnRoZShcbiAgICAgIG51bGwsXG4gICAgICBudWxsLFxuICAgICAgRENBVCgnQ2F0YWxvZ1JlY29yZCcpXG4gICAgKSBhcyBOYW1lZE5vZGVcblxuICAgIGNvbnN0IHRyOiBSZWNvcmRUcmFuc2xhdGlvbnMgPSB7fVxuXG4gICAgLy8gd2UgbmVlZCB0aGUgZGVmYXVsdCBsYW5ndWFnZSBmaXJzdCBmb3IgdGhlIG90aGVyIGZpZWxkc1xuICAgIGNvbnN0IGRlZmF1bHRMYW5ndWFnZSA9IHRoaXMucmVhZGVyc1snZGVmYXVsdExhbmd1YWdlJ10oXG4gICAgICBkYXRhU3RvcmUsXG4gICAgICBjYXRhbG9nUmVjb3JkLFxuICAgICAgdHIsXG4gICAgICBudWxsXG4gICAgKSBhcyBzdHJpbmdcbiAgICBjb25zdCB1bmlxdWVJZGVudGlmaWVyID0gdGhpcy5yZWFkZXJzWyd1bmlxdWVJZGVudGlmaWVyJ10oXG4gICAgICBkYXRhU3RvcmUsXG4gICAgICBjYXRhbG9nUmVjb3JkLFxuICAgICAgdHIsXG4gICAgICBkZWZhdWx0TGFuZ3VhZ2VcbiAgICApXG4gICAgY29uc3Qga2luZCA9IHRoaXMucmVhZGVyc1sna2luZCddKFxuICAgICAgZGF0YVN0b3JlLFxuICAgICAgY2F0YWxvZ1JlY29yZCxcbiAgICAgIHRyLFxuICAgICAgZGVmYXVsdExhbmd1YWdlXG4gICAgKVxuICAgIGNvbnN0IG93bmVyT3JnYW5pemF0aW9uID0gdGhpcy5yZWFkZXJzWydvd25lck9yZ2FuaXphdGlvbiddKFxuICAgICAgZGF0YVN0b3JlLFxuICAgICAgY2F0YWxvZ1JlY29yZCxcbiAgICAgIHRyLFxuICAgICAgZGVmYXVsdExhbmd1YWdlXG4gICAgKVxuICAgIGNvbnN0IHRpdGxlID0gdGhpcy5yZWFkZXJzWyd0aXRsZSddKFxuICAgICAgZGF0YVN0b3JlLFxuICAgICAgY2F0YWxvZ1JlY29yZCxcbiAgICAgIHRyLFxuICAgICAgZGVmYXVsdExhbmd1YWdlXG4gICAgKVxuICAgIGNvbnN0IGFic3RyYWN0ID0gdGhpcy5yZWFkZXJzWydhYnN0cmFjdCddKFxuICAgICAgZGF0YVN0b3JlLFxuICAgICAgY2F0YWxvZ1JlY29yZCxcbiAgICAgIHRyLFxuICAgICAgZGVmYXVsdExhbmd1YWdlXG4gICAgKVxuICAgIGNvbnN0IGNvbnRhY3RzID0gdGhpcy5yZWFkZXJzWydjb250YWN0cyddKFxuICAgICAgZGF0YVN0b3JlLFxuICAgICAgY2F0YWxvZ1JlY29yZCxcbiAgICAgIHRyLFxuICAgICAgZGVmYXVsdExhbmd1YWdlXG4gICAgKVxuICAgIGNvbnN0IGNvbnRhY3RzRm9yUmVzb3VyY2UgPSB0aGlzLnJlYWRlcnNbJ2NvbnRhY3RzRm9yUmVzb3VyY2UnXShcbiAgICAgIGRhdGFTdG9yZSxcbiAgICAgIGNhdGFsb2dSZWNvcmQsXG4gICAgICB0cixcbiAgICAgIGRlZmF1bHRMYW5ndWFnZVxuICAgIClcbiAgICBjb25zdCByZWNvcmRVcGRhdGVkID0gdGhpcy5yZWFkZXJzWydyZWNvcmRVcGRhdGVkJ10oXG4gICAgICBkYXRhU3RvcmUsXG4gICAgICBjYXRhbG9nUmVjb3JkLFxuICAgICAgdHIsXG4gICAgICBkZWZhdWx0TGFuZ3VhZ2VcbiAgICApXG4gICAgY29uc3QgcmVjb3JkQ3JlYXRlZCA9IHRoaXMucmVhZGVyc1sncmVjb3JkQ3JlYXRlZCddKFxuICAgICAgZGF0YVN0b3JlLFxuICAgICAgY2F0YWxvZ1JlY29yZCxcbiAgICAgIHRyLFxuICAgICAgZGVmYXVsdExhbmd1YWdlXG4gICAgKVxuICAgIGNvbnN0IHJlY29yZFB1Ymxpc2hlZCA9IHRoaXMucmVhZGVyc1sncmVjb3JkUHVibGlzaGVkJ10oXG4gICAgICBkYXRhU3RvcmUsXG4gICAgICBjYXRhbG9nUmVjb3JkLFxuICAgICAgdHIsXG4gICAgICBkZWZhdWx0TGFuZ3VhZ2VcbiAgICApXG4gICAgY29uc3QgcmVzb3VyY2VDcmVhdGVkID0gdGhpcy5yZWFkZXJzWydyZXNvdXJjZUNyZWF0ZWQnXShcbiAgICAgIGRhdGFTdG9yZSxcbiAgICAgIGNhdGFsb2dSZWNvcmQsXG4gICAgICB0cixcbiAgICAgIGRlZmF1bHRMYW5ndWFnZVxuICAgIClcbiAgICBjb25zdCByZXNvdXJjZVVwZGF0ZWQgPSB0aGlzLnJlYWRlcnNbJ3Jlc291cmNlVXBkYXRlZCddKFxuICAgICAgZGF0YVN0b3JlLFxuICAgICAgY2F0YWxvZ1JlY29yZCxcbiAgICAgIHRyLFxuICAgICAgZGVmYXVsdExhbmd1YWdlXG4gICAgKVxuICAgIGNvbnN0IHJlc291cmNlUHVibGlzaGVkID0gdGhpcy5yZWFkZXJzWydyZXNvdXJjZVB1Ymxpc2hlZCddKFxuICAgICAgZGF0YVN0b3JlLFxuICAgICAgY2F0YWxvZ1JlY29yZCxcbiAgICAgIHRyLFxuICAgICAgZGVmYXVsdExhbmd1YWdlXG4gICAgKVxuICAgIGNvbnN0IGtleXdvcmRzID0gdGhpcy5yZWFkZXJzWydrZXl3b3JkcyddKFxuICAgICAgZGF0YVN0b3JlLFxuICAgICAgY2F0YWxvZ1JlY29yZCxcbiAgICAgIHRyLFxuICAgICAgZGVmYXVsdExhbmd1YWdlXG4gICAgKVxuICAgIGNvbnN0IHRvcGljcyA9IHRoaXMucmVhZGVyc1sndG9waWNzJ10oXG4gICAgICBkYXRhU3RvcmUsXG4gICAgICBjYXRhbG9nUmVjb3JkLFxuICAgICAgdHIsXG4gICAgICBkZWZhdWx0TGFuZ3VhZ2VcbiAgICApXG4gICAgY29uc3QgbGVnYWxDb25zdHJhaW50cyA9IHRoaXMucmVhZGVyc1snbGVnYWxDb25zdHJhaW50cyddKFxuICAgICAgZGF0YVN0b3JlLFxuICAgICAgY2F0YWxvZ1JlY29yZCxcbiAgICAgIHRyLFxuICAgICAgZGVmYXVsdExhbmd1YWdlXG4gICAgKVxuICAgIGNvbnN0IG90aGVyQ29uc3RyYWludHMgPSB0aGlzLnJlYWRlcnNbJ290aGVyQ29uc3RyYWludHMnXShcbiAgICAgIGRhdGFTdG9yZSxcbiAgICAgIGNhdGFsb2dSZWNvcmQsXG4gICAgICB0cixcbiAgICAgIGRlZmF1bHRMYW5ndWFnZVxuICAgIClcbiAgICBjb25zdCBzZWN1cml0eUNvbnN0cmFpbnRzID0gdGhpcy5yZWFkZXJzWydzZWN1cml0eUNvbnN0cmFpbnRzJ10oXG4gICAgICBkYXRhU3RvcmUsXG4gICAgICBjYXRhbG9nUmVjb3JkLFxuICAgICAgdHIsXG4gICAgICBkZWZhdWx0TGFuZ3VhZ2VcbiAgICApXG4gICAgY29uc3QgbGljZW5zZXMgPSB0aGlzLnJlYWRlcnNbJ2xpY2Vuc2VzJ10oXG4gICAgICBkYXRhU3RvcmUsXG4gICAgICBjYXRhbG9nUmVjb3JkLFxuICAgICAgdHIsXG4gICAgICBkZWZhdWx0TGFuZ3VhZ2VcbiAgICApXG4gICAgY29uc3Qgb3ZlcnZpZXdzID0gdGhpcy5yZWFkZXJzWydvdmVydmlld3MnXShcbiAgICAgIGRhdGFTdG9yZSxcbiAgICAgIGNhdGFsb2dSZWNvcmQsXG4gICAgICB0cixcbiAgICAgIGRlZmF1bHRMYW5ndWFnZVxuICAgIClcbiAgICBjb25zdCBsYW5kaW5nUGFnZSA9IHRoaXMucmVhZGVyc1snbGFuZGluZ1BhZ2UnXShcbiAgICAgIGRhdGFTdG9yZSxcbiAgICAgIGNhdGFsb2dSZWNvcmQsXG4gICAgICB0cixcbiAgICAgIGRlZmF1bHRMYW5ndWFnZVxuICAgIClcbiAgICBjb25zdCBvdGhlckxhbmd1YWdlcyA9IHRoaXMucmVhZGVyc1snb3RoZXJMYW5ndWFnZXMnXShcbiAgICAgIGRhdGFTdG9yZSxcbiAgICAgIGNhdGFsb2dSZWNvcmQsXG4gICAgICB0cixcbiAgICAgIGRlZmF1bHRMYW5ndWFnZVxuICAgIClcblxuICAgIGlmIChraW5kID09PSAnZGF0YXNldCcpIHtcbiAgICAgIGNvbnN0IHN0YXR1cyA9IHRoaXMucmVhZGVyc1snc3RhdHVzJ10oXG4gICAgICAgIGRhdGFTdG9yZSxcbiAgICAgICAgY2F0YWxvZ1JlY29yZCxcbiAgICAgICAgdHIsXG4gICAgICAgIGRlZmF1bHRMYW5ndWFnZVxuICAgICAgKVxuICAgICAgY29uc3Qgc3BhdGlhbFJlcHJlc2VudGF0aW9uID0gdGhpcy5yZWFkZXJzWydzcGF0aWFsUmVwcmVzZW50YXRpb24nXShcbiAgICAgICAgZGF0YVN0b3JlLFxuICAgICAgICBjYXRhbG9nUmVjb3JkLFxuICAgICAgICB0cixcbiAgICAgICAgZGVmYXVsdExhbmd1YWdlXG4gICAgICApXG4gICAgICBjb25zdCBzcGF0aWFsRXh0ZW50cyA9IHRoaXMucmVhZGVyc1snc3BhdGlhbEV4dGVudHMnXShcbiAgICAgICAgZGF0YVN0b3JlLFxuICAgICAgICBjYXRhbG9nUmVjb3JkLFxuICAgICAgICB0cixcbiAgICAgICAgZGVmYXVsdExhbmd1YWdlXG4gICAgICApXG4gICAgICBjb25zdCB0ZW1wb3JhbEV4dGVudHMgPSB0aGlzLnJlYWRlcnNbJ3RlbXBvcmFsRXh0ZW50cyddKFxuICAgICAgICBkYXRhU3RvcmUsXG4gICAgICAgIGNhdGFsb2dSZWNvcmQsXG4gICAgICAgIHRyLFxuICAgICAgICBkZWZhdWx0TGFuZ3VhZ2VcbiAgICAgIClcbiAgICAgIGNvbnN0IGxpbmVhZ2UgPSB0aGlzLnJlYWRlcnNbJ2xpbmVhZ2UnXShcbiAgICAgICAgZGF0YVN0b3JlLFxuICAgICAgICBjYXRhbG9nUmVjb3JkLFxuICAgICAgICB0cixcbiAgICAgICAgZGVmYXVsdExhbmd1YWdlXG4gICAgICApXG4gICAgICBjb25zdCBvbmxpbmVSZXNvdXJjZXMgPSB0aGlzLnJlYWRlcnNbJ29ubGluZVJlc291cmNlcyddKFxuICAgICAgICBkYXRhU3RvcmUsXG4gICAgICAgIGNhdGFsb2dSZWNvcmQsXG4gICAgICAgIHRyLFxuICAgICAgICBkZWZhdWx0TGFuZ3VhZ2VcbiAgICAgIClcbiAgICAgIGNvbnN0IHVwZGF0ZUZyZXF1ZW5jeSA9IHRoaXMucmVhZGVyc1sndXBkYXRlRnJlcXVlbmN5J10oXG4gICAgICAgIGRhdGFTdG9yZSxcbiAgICAgICAgY2F0YWxvZ1JlY29yZCxcbiAgICAgICAgdHIsXG4gICAgICAgIGRlZmF1bHRMYW5ndWFnZVxuICAgICAgKVxuXG4gICAgICByZXR1cm4ge1xuICAgICAgICB1bmlxdWVJZGVudGlmaWVyLFxuICAgICAgICBraW5kLFxuICAgICAgICBkZWZhdWx0TGFuZ3VhZ2UsXG4gICAgICAgIG90aGVyTGFuZ3VhZ2VzLFxuICAgICAgICAuLi4ocmVjb3JkQ3JlYXRlZCAmJiB7IHJlY29yZENyZWF0ZWQgfSksXG4gICAgICAgIC4uLihyZWNvcmRQdWJsaXNoZWQgJiYgeyByZWNvcmRQdWJsaXNoZWQgfSksXG4gICAgICAgIHJlY29yZFVwZGF0ZWQsXG4gICAgICAgIC4uLihyZXNvdXJjZUNyZWF0ZWQgJiYgeyByZXNvdXJjZUNyZWF0ZWQgfSksXG4gICAgICAgIC4uLihyZXNvdXJjZVVwZGF0ZWQgJiYgeyByZXNvdXJjZVVwZGF0ZWQgfSksXG4gICAgICAgIC4uLihyZXNvdXJjZVB1Ymxpc2hlZCAmJiB7IHJlc291cmNlUHVibGlzaGVkIH0pLFxuICAgICAgICBzdGF0dXMsXG4gICAgICAgIHRpdGxlLFxuICAgICAgICBhYnN0cmFjdCxcbiAgICAgICAgb3duZXJPcmdhbml6YXRpb24sXG4gICAgICAgIGNvbnRhY3RzLFxuICAgICAgICBjb250YWN0c0ZvclJlc291cmNlLFxuICAgICAgICBrZXl3b3JkcyxcbiAgICAgICAgdG9waWNzLFxuICAgICAgICBsaWNlbnNlcyxcbiAgICAgICAgbGVnYWxDb25zdHJhaW50cyxcbiAgICAgICAgc2VjdXJpdHlDb25zdHJhaW50cyxcbiAgICAgICAgb3RoZXJDb25zdHJhaW50cyxcbiAgICAgICAgbGluZWFnZSxcbiAgICAgICAgLi4uKHNwYXRpYWxSZXByZXNlbnRhdGlvbiAmJiB7IHNwYXRpYWxSZXByZXNlbnRhdGlvbiB9KSxcbiAgICAgICAgb3ZlcnZpZXdzLFxuICAgICAgICBzcGF0aWFsRXh0ZW50cyxcbiAgICAgICAgdGVtcG9yYWxFeHRlbnRzLFxuICAgICAgICBvbmxpbmVSZXNvdXJjZXMsXG4gICAgICAgIHVwZGF0ZUZyZXF1ZW5jeSxcbiAgICAgICAgLi4uKGxhbmRpbmdQYWdlICYmIHsgbGFuZGluZ1BhZ2UgfSksXG4gICAgICAgIHRyYW5zbGF0aW9uczogdHIsXG4gICAgICB9IGFzIERhdGFzZXRSZWNvcmRcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3Qgb25saW5lUmVzb3VyY2VzID0gdGhpcy5yZWFkZXJzWydvbmxpbmVSZXNvdXJjZXMnXShcbiAgICAgICAgZGF0YVN0b3JlLFxuICAgICAgICBjYXRhbG9nUmVjb3JkLFxuICAgICAgICB0cixcbiAgICAgICAgZGVmYXVsdExhbmd1YWdlXG4gICAgICApXG4gICAgICByZXR1cm4ge1xuICAgICAgICB1bmlxdWVJZGVudGlmaWVyLFxuICAgICAgICBraW5kLFxuICAgICAgICBkZWZhdWx0TGFuZ3VhZ2UsXG4gICAgICAgIG90aGVyTGFuZ3VhZ2VzLFxuICAgICAgICAuLi4ocmVjb3JkQ3JlYXRlZCAmJiB7IHJlY29yZENyZWF0ZWQgfSksXG4gICAgICAgIC4uLihyZWNvcmRQdWJsaXNoZWQgJiYgeyByZWNvcmRQdWJsaXNoZWQgfSksXG4gICAgICAgIHJlY29yZFVwZGF0ZWQsXG4gICAgICAgIC4uLihyZXNvdXJjZUNyZWF0ZWQgJiYgeyByZXNvdXJjZUNyZWF0ZWQgfSksXG4gICAgICAgIC4uLihyZXNvdXJjZVVwZGF0ZWQgJiYgeyByZXNvdXJjZVVwZGF0ZWQgfSksXG4gICAgICAgIC4uLihyZXNvdXJjZVB1Ymxpc2hlZCAmJiB7IHJlc291cmNlUHVibGlzaGVkIH0pLFxuICAgICAgICB0aXRsZSxcbiAgICAgICAgYWJzdHJhY3QsXG4gICAgICAgIG93bmVyT3JnYW5pemF0aW9uLFxuICAgICAgICBjb250YWN0cyxcbiAgICAgICAgY29udGFjdHNGb3JSZXNvdXJjZSxcbiAgICAgICAga2V5d29yZHMsXG4gICAgICAgIHRvcGljcyxcbiAgICAgICAgbGljZW5zZXMsXG4gICAgICAgIGxlZ2FsQ29uc3RyYWludHMsXG4gICAgICAgIHNlY3VyaXR5Q29uc3RyYWludHMsXG4gICAgICAgIG90aGVyQ29uc3RyYWludHMsXG4gICAgICAgIG92ZXJ2aWV3cyxcbiAgICAgICAgb25saW5lUmVzb3VyY2VzLFxuICAgICAgICAuLi4obGFuZGluZ1BhZ2UgJiYgeyBsYW5kaW5nUGFnZSB9KSxcbiAgICAgICAgdHJhbnNsYXRpb25zOiB0cixcbiAgICAgIH0gYXMgU2VydmljZVJlY29yZFxuICAgIH1cbiAgfVxuXG4gIGFzeW5jIHdyaXRlUmVjb3JkKFxuICAgIHJlY29yZDogQ2F0YWxvZ1JlY29yZCxcbiAgICByZWZlcmVuY2U/OiBzdHJpbmdcbiAgKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICBjb25zdCBkYXRhU3RvcmUgPSBncmFwaCgpXG4gICAgbGV0IGZpZWxkQ2hhbmdlZDogKG5hbWU6IHN0cmluZykgPT4gYm9vbGVhblxuICAgIGlmIChyZWZlcmVuY2UpIHtcbiAgICAgIGNvbnN0IG9yaWdpbmFsUmVjb3JkID0gYXdhaXQgdGhpcy5yZWFkUmVjb3JkKHJlZmVyZW5jZSlcbiAgICAgIGF3YWl0IGxvYWRHcmFwaChcbiAgICAgICAgZGF0YVN0b3JlLFxuICAgICAgICByZWZlcmVuY2UsXG4gICAgICAgIHRoaXMuY29udGVudFR5cGUsXG4gICAgICAgIERDQVQoJ0NhdGFsb2dSZWNvcmQnKS52YWx1ZVxuICAgICAgKVxuXG4gICAgICBmaWVsZENoYW5nZWQgPSAobmFtZTogc3RyaW5nKSA9PiB7XG4gICAgICAgIHJldHVybiBvcmlnaW5hbFJlY29yZCAhPT0gbnVsbFxuICAgICAgICAgID8gIWlzRXF1YWwocmVjb3JkW25hbWVdLCBvcmlnaW5hbFJlY29yZFtuYW1lXSlcbiAgICAgICAgICA6IHRydWVcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgZmllbGRDaGFuZ2VkID0gKCkgPT4gdHJ1ZVxuICAgIH1cblxuICAgIGxldCByZWNvcmROb2RlID0gZGF0YVN0b3JlLnRoZShcbiAgICAgIG51bGwsXG4gICAgICBSREYoJ3R5cGUnKSxcbiAgICAgIERDQVQoJ0NhdGFsb2dSZWNvcmQnKVxuICAgICkgYXMgTmFtZWROb2RlXG4gICAgaWYgKCFyZWNvcmROb2RlKSB7XG4gICAgICBjb25zdCBzdGF0ZW1lbnQgPSBkYXRhU3RvcmUuYWRkKFxuICAgICAgICBzeW0oYCR7QkFTRV9VUkl9cmVjb3JkLyR7cmVjb3JkLnVuaXF1ZUlkZW50aWZpZXJ9YCksXG4gICAgICAgIFJERigndHlwZScpLFxuICAgICAgICBEQ0FUKCdDYXRhbG9nUmVjb3JkJylcbiAgICAgICkgYXMgU3RhdGVtZW50XG4gICAgICByZWNvcmROb2RlID0gc3RhdGVtZW50LnN1YmplY3QgYXMgTmFtZWROb2RlXG4gICAgfVxuXG4gICAgZmllbGRDaGFuZ2VkKCd1bmlxdWVJZGVudGlmaWVyJykgJiZcbiAgICAgIHRoaXMud3JpdGVyc1sndW5pcXVlSWRlbnRpZmllciddKHJlY29yZCwgZGF0YVN0b3JlLCByZWNvcmROb2RlKVxuICAgIGZpZWxkQ2hhbmdlZCgna2luZCcpICYmIHRoaXMud3JpdGVyc1sna2luZCddKHJlY29yZCwgZGF0YVN0b3JlLCByZWNvcmROb2RlKVxuXG4gICAgZmllbGRDaGFuZ2VkKCdjb250YWN0cycpICYmXG4gICAgICB0aGlzLndyaXRlcnNbJ2NvbnRhY3RzJ10ocmVjb3JkLCBkYXRhU3RvcmUsIHJlY29yZE5vZGUpXG4gICAgZmllbGRDaGFuZ2VkKCdvd25lck9yZ2FuaXphdGlvbicpICYmXG4gICAgICB0aGlzLndyaXRlcnNbJ293bmVyT3JnYW5pemF0aW9uJ10ocmVjb3JkLCBkYXRhU3RvcmUsIHJlY29yZE5vZGUpXG5cbiAgICBmaWVsZENoYW5nZWQoJ3JlY29yZFVwZGF0ZWQnKSAmJlxuICAgICAgdGhpcy53cml0ZXJzWydyZWNvcmRVcGRhdGVkJ10ocmVjb3JkLCBkYXRhU3RvcmUsIHJlY29yZE5vZGUpXG4gICAgZmllbGRDaGFuZ2VkKCdyZWNvcmRDcmVhdGVkJykgJiZcbiAgICAgIHRoaXMud3JpdGVyc1sncmVjb3JkQ3JlYXRlZCddKHJlY29yZCwgZGF0YVN0b3JlLCByZWNvcmROb2RlKVxuICAgIGZpZWxkQ2hhbmdlZCgncmVjb3JkUHVibGlzaGVkJykgJiZcbiAgICAgIHRoaXMud3JpdGVyc1sncmVjb3JkUHVibGlzaGVkJ10ocmVjb3JkLCBkYXRhU3RvcmUsIHJlY29yZE5vZGUpXG5cbiAgICBmaWVsZENoYW5nZWQoJ3RpdGxlJykgJiZcbiAgICAgIHRoaXMud3JpdGVyc1sndGl0bGUnXShyZWNvcmQsIGRhdGFTdG9yZSwgcmVjb3JkTm9kZSlcbiAgICBmaWVsZENoYW5nZWQoJ2Fic3RyYWN0JykgJiZcbiAgICAgIHRoaXMud3JpdGVyc1snYWJzdHJhY3QnXShyZWNvcmQsIGRhdGFTdG9yZSwgcmVjb3JkTm9kZSlcblxuICAgIGZpZWxkQ2hhbmdlZCgncmVzb3VyY2VDcmVhdGVkJykgJiZcbiAgICAgIHRoaXMud3JpdGVyc1sncmVzb3VyY2VDcmVhdGVkJ10ocmVjb3JkLCBkYXRhU3RvcmUsIHJlY29yZE5vZGUpXG4gICAgZmllbGRDaGFuZ2VkKCdyZXNvdXJjZVB1Ymxpc2hlZCcpICYmXG4gICAgICB0aGlzLndyaXRlcnNbJ3Jlc291cmNlUHVibGlzaGVkJ10ocmVjb3JkLCBkYXRhU3RvcmUsIHJlY29yZE5vZGUpXG4gICAgZmllbGRDaGFuZ2VkKCdyZXNvdXJjZVVwZGF0ZWQnKSAmJlxuICAgICAgdGhpcy53cml0ZXJzWydyZXNvdXJjZVVwZGF0ZWQnXShyZWNvcmQsIGRhdGFTdG9yZSwgcmVjb3JkTm9kZSlcblxuICAgIGZpZWxkQ2hhbmdlZCgnY29udGFjdHNGb3JSZXNvdXJjZScpICYmXG4gICAgICB0aGlzLndyaXRlcnNbJ2NvbnRhY3RzRm9yUmVzb3VyY2UnXShyZWNvcmQsIGRhdGFTdG9yZSwgcmVjb3JkTm9kZSlcblxuICAgIGZpZWxkQ2hhbmdlZCgna2V5d29yZHMnKSAmJlxuICAgICAgdGhpcy53cml0ZXJzWydrZXl3b3JkcyddKHJlY29yZCwgZGF0YVN0b3JlLCByZWNvcmROb2RlKVxuICAgIGZpZWxkQ2hhbmdlZCgndG9waWNzJykgJiZcbiAgICAgIHRoaXMud3JpdGVyc1sndG9waWNzJ10ocmVjb3JkLCBkYXRhU3RvcmUsIHJlY29yZE5vZGUpXG4gICAgZmllbGRDaGFuZ2VkKCdsZWdhbENvbnN0cmFpbnRzJykgJiZcbiAgICAgIHRoaXMud3JpdGVyc1snbGVnYWxDb25zdHJhaW50cyddKHJlY29yZCwgZGF0YVN0b3JlLCByZWNvcmROb2RlKVxuICAgIGZpZWxkQ2hhbmdlZCgnc2VjdXJpdHlDb25zdHJhaW50cycpICYmXG4gICAgICB0aGlzLndyaXRlcnNbJ3NlY3VyaXR5Q29uc3RyYWludHMnXShyZWNvcmQsIGRhdGFTdG9yZSwgcmVjb3JkTm9kZSlcbiAgICBmaWVsZENoYW5nZWQoJ2xpY2Vuc2VzJykgJiZcbiAgICAgIHRoaXMud3JpdGVyc1snbGljZW5zZXMnXShyZWNvcmQsIGRhdGFTdG9yZSwgcmVjb3JkTm9kZSlcbiAgICBmaWVsZENoYW5nZWQoJ290aGVyQ29uc3RyYWludHMnKSAmJlxuICAgICAgdGhpcy53cml0ZXJzWydvdGhlckNvbnN0cmFpbnRzJ10ocmVjb3JkLCBkYXRhU3RvcmUsIHJlY29yZE5vZGUpXG4gICAgZmllbGRDaGFuZ2VkKCdvbmxpbmVSZXNvdXJjZXMnKSAmJlxuICAgICAgdGhpcy53cml0ZXJzWydvbmxpbmVSZXNvdXJjZXMnXShyZWNvcmQsIGRhdGFTdG9yZSwgcmVjb3JkTm9kZSlcblxuICAgIGlmIChyZWNvcmQua2luZCA9PT0gJ2RhdGFzZXQnKSB7XG4gICAgICBmaWVsZENoYW5nZWQoJ3N0YXR1cycpICYmXG4gICAgICAgIHRoaXMud3JpdGVyc1snc3RhdHVzJ10ocmVjb3JkLCBkYXRhU3RvcmUsIHJlY29yZE5vZGUpXG4gICAgICBmaWVsZENoYW5nZWQoJ3VwZGF0ZUZyZXF1ZW5jeScpICYmXG4gICAgICAgIHRoaXMud3JpdGVyc1sndXBkYXRlRnJlcXVlbmN5J10ocmVjb3JkLCBkYXRhU3RvcmUsIHJlY29yZE5vZGUpXG4gICAgICBmaWVsZENoYW5nZWQoJ3NwYXRpYWxSZXByZXNlbnRhdGlvbicpICYmXG4gICAgICAgIHRoaXMud3JpdGVyc1snc3BhdGlhbFJlcHJlc2VudGF0aW9uJ10ocmVjb3JkLCBkYXRhU3RvcmUsIHJlY29yZE5vZGUpXG4gICAgICBmaWVsZENoYW5nZWQoJ292ZXJ2aWV3cycpICYmXG4gICAgICAgIHRoaXMud3JpdGVyc1snb3ZlcnZpZXdzJ10ocmVjb3JkLCBkYXRhU3RvcmUsIHJlY29yZE5vZGUpXG4gICAgICBmaWVsZENoYW5nZWQoJ3RlbXBvcmFsRXh0ZW50cycpICYmXG4gICAgICAgIHRoaXMud3JpdGVyc1sndGVtcG9yYWxFeHRlbnRzJ10ocmVjb3JkLCBkYXRhU3RvcmUsIHJlY29yZE5vZGUpXG4gICAgICBmaWVsZENoYW5nZWQoJ2xpbmVhZ2UnKSAmJlxuICAgICAgICB0aGlzLndyaXRlcnNbJ2xpbmVhZ2UnXShyZWNvcmQsIGRhdGFTdG9yZSwgcmVjb3JkTm9kZSlcbiAgICB9XG5cbiAgICBpZiAodGhpcy5jb250ZW50VHlwZS5pbmNsdWRlcygneG1sJykpIHtcbiAgICAgIHJldHVybiBleHBvcnRHcmFwaFRvWG1sKGRhdGFTdG9yZSlcbiAgICB9XG5cbiAgICByZXR1cm4gZGF0YVN0b3JlLnNlcmlhbGl6ZSh1bmRlZmluZWQsIHRoaXMuY29udGVudFR5cGUsIG51bGwsIHt9KVxuICB9XG59XG4iXX0=