geonetwork-ui 2.8.0-dev.3945a34e1 → 2.8.0-dev.5745b522e

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 (92) hide show
  1. package/esm2022/libs/api/metadata-converter/src/lib/common/distribution.mapper.mjs +5 -1
  2. package/esm2022/libs/api/metadata-converter/src/lib/gn4/gn4.field.mapper.mjs +3 -1
  3. package/esm2022/libs/api/repository/src/lib/gn4/auth/auth.service.mjs +2 -2
  4. package/esm2022/libs/api/repository/src/lib/gn4/platform/gn4-platform.mapper.mjs +7 -3
  5. package/esm2022/libs/api/repository/src/lib/gn4/platform/gn4-platform.service.mjs +10 -10
  6. package/esm2022/libs/api/repository/src/lib/gn4/settings/gn4-settings.service.mjs +3 -2
  7. package/esm2022/libs/common/domain/src/lib/model/record/metadata.model.mjs +3 -1
  8. package/esm2022/libs/common/domain/src/lib/model/search/sort-by.model.mjs +6 -1
  9. package/esm2022/libs/data-access/gn4/src/openapi/model/user.api.model.mjs +1 -1
  10. package/esm2022/libs/feature/record/src/lib/map-view/map-view.component.mjs +2 -1
  11. package/esm2022/libs/feature/router/src/lib/default/router.service.mjs +5 -1
  12. package/esm2022/libs/feature/router/src/lib/default/state/router.effects.mjs +9 -7
  13. package/esm2022/libs/feature/search/src/lib/sort-by/sort-by.component.mjs +8 -12
  14. package/esm2022/libs/ui/elements/src/lib/error/error.component.mjs +3 -3
  15. package/esm2022/libs/ui/elements/src/lib/external-link-card/external-link-card.component.mjs +11 -4
  16. package/esm2022/libs/ui/elements/src/lib/metadata-info/metadata-info.component.mjs +3 -3
  17. package/esm2022/libs/ui/inputs/src/lib/dropdown-selector/dropdown-selector.component.mjs +2 -3
  18. package/esm2022/libs/util/shared/src/lib/links/link-classifier.service.mjs +5 -1
  19. package/esm2022/libs/util/shared/src/lib/links/link-utils.mjs +12 -1
  20. package/esm2022/libs/util/shared/src/lib/services/proxy.service.mjs +9 -11
  21. package/esm2022/libs/util/shared/src/lib/utils/sort-by.mjs +9 -6
  22. package/esm2022/translations/de.json +7 -2
  23. package/esm2022/translations/en.json +8 -4
  24. package/esm2022/translations/es.json +7 -2
  25. package/esm2022/translations/fr.json +8 -3
  26. package/esm2022/translations/it.json +8 -3
  27. package/esm2022/translations/nl.json +7 -2
  28. package/esm2022/translations/pt.json +7 -2
  29. package/esm2022/translations/sk.json +7 -2
  30. package/fesm2022/geonetwork-ui.mjs +146 -68
  31. package/fesm2022/geonetwork-ui.mjs.map +1 -1
  32. package/libs/api/metadata-converter/src/lib/common/distribution.mapper.d.ts.map +1 -1
  33. package/libs/api/metadata-converter/src/lib/gn4/gn4.field.mapper.d.ts.map +1 -1
  34. package/libs/api/repository/src/lib/gn4/auth/auth.service.d.ts.map +1 -1
  35. package/libs/api/repository/src/lib/gn4/platform/gn4-platform.mapper.d.ts.map +1 -1
  36. package/libs/api/repository/src/lib/gn4/platform/gn4-platform.service.d.ts +7 -7
  37. package/libs/api/repository/src/lib/gn4/platform/gn4-platform.service.d.ts.map +1 -1
  38. package/libs/api/repository/src/lib/gn4/settings/gn4-settings.service.d.ts.map +1 -1
  39. package/libs/common/domain/src/lib/model/record/metadata.model.d.ts +1 -1
  40. package/libs/common/domain/src/lib/model/record/metadata.model.d.ts.map +1 -1
  41. package/libs/common/domain/src/lib/model/search/sort-by.model.d.ts.map +1 -1
  42. package/libs/data-access/gn4/src/openapi/model/user.api.model.d.ts +1 -1
  43. package/libs/feature/record/src/lib/map-view/map-view.component.d.ts.map +1 -1
  44. package/libs/feature/router/src/lib/default/router.service.d.ts +2 -0
  45. package/libs/feature/router/src/lib/default/router.service.d.ts.map +1 -1
  46. package/libs/feature/router/src/lib/default/state/router.effects.d.ts +3 -1
  47. package/libs/feature/router/src/lib/default/state/router.effects.d.ts.map +1 -1
  48. package/libs/feature/search/src/lib/sort-by/sort-by.component.d.ts +4 -3
  49. package/libs/feature/search/src/lib/sort-by/sort-by.component.d.ts.map +1 -1
  50. package/libs/ui/elements/src/lib/downloads-list/downloads-list.component.d.ts +1 -1
  51. package/libs/ui/elements/src/lib/external-link-card/external-link-card.component.d.ts +3 -2
  52. package/libs/ui/elements/src/lib/external-link-card/external-link-card.component.d.ts.map +1 -1
  53. package/libs/ui/inputs/src/lib/dropdown-selector/dropdown-selector.component.d.ts.map +1 -1
  54. package/libs/util/shared/src/lib/links/link-classifier.service.d.ts.map +1 -1
  55. package/libs/util/shared/src/lib/links/link-utils.d.ts +6 -0
  56. package/libs/util/shared/src/lib/links/link-utils.d.ts.map +1 -1
  57. package/libs/util/shared/src/lib/services/proxy.service.d.ts +5 -4
  58. package/libs/util/shared/src/lib/services/proxy.service.d.ts.map +1 -1
  59. package/libs/util/shared/src/lib/utils/sort-by.d.ts.map +1 -1
  60. package/package.json +1 -1
  61. package/src/libs/api/metadata-converter/src/lib/common/distribution.mapper.ts +2 -0
  62. package/src/libs/api/metadata-converter/src/lib/gn4/gn4.field.mapper.ts +2 -0
  63. package/src/libs/api/repository/src/lib/gn4/auth/auth.service.ts +4 -1
  64. package/src/libs/api/repository/src/lib/gn4/platform/gn4-platform.mapper.ts +12 -4
  65. package/src/libs/api/repository/src/lib/gn4/platform/gn4-platform.service.ts +37 -36
  66. package/src/libs/api/repository/src/lib/gn4/settings/gn4-settings.service.ts +3 -2
  67. package/src/libs/common/domain/src/lib/model/record/metadata.model.ts +4 -0
  68. package/src/libs/common/domain/src/lib/model/search/sort-by.model.ts +5 -0
  69. package/src/libs/common/fixtures/src/lib/elasticsearch/metadata-links.fixtures.ts +5 -0
  70. package/src/libs/common/fixtures/src/lib/link.fixtures.ts +19 -0
  71. package/src/libs/data-access/gn4/src/openapi/model/user.api.model.ts +1 -1
  72. package/src/libs/feature/record/src/lib/map-view/map-view.component.ts +1 -0
  73. package/src/libs/feature/router/src/lib/default/router.service.ts +8 -0
  74. package/src/libs/feature/router/src/lib/default/state/router.effects.ts +6 -7
  75. package/src/libs/feature/search/src/lib/sort-by/sort-by.component.ts +8 -12
  76. package/src/libs/ui/elements/src/lib/error/error.component.html +5 -1
  77. package/src/libs/ui/elements/src/lib/external-link-card/external-link-card.component.html +43 -22
  78. package/src/libs/ui/elements/src/lib/external-link-card/external-link-card.component.ts +12 -3
  79. package/src/libs/ui/elements/src/lib/metadata-info/metadata-info.component.html +2 -2
  80. package/src/libs/ui/inputs/src/lib/dropdown-selector/dropdown-selector.component.ts +4 -2
  81. package/src/libs/util/shared/src/lib/links/link-classifier.service.ts +4 -0
  82. package/src/libs/util/shared/src/lib/links/link-utils.ts +11 -0
  83. package/src/libs/util/shared/src/lib/services/proxy.service.ts +6 -2
  84. package/src/libs/util/shared/src/lib/utils/sort-by.ts +8 -5
  85. package/translations/de.json +7 -2
  86. package/translations/en.json +8 -4
  87. package/translations/es.json +7 -2
  88. package/translations/fr.json +8 -3
  89. package/translations/it.json +8 -3
  90. package/translations/nl.json +7 -2
  91. package/translations/pt.json +7 -2
  92. package/translations/sk.json +7 -2
@@ -20,7 +20,7 @@ export class ErrorComponent {
20
20
  this.types = ErrorType;
21
21
  }
22
22
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ErrorComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
23
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: ErrorComponent, isStandalone: true, selector: "gn-ui-error", inputs: { type: "type", error: "error", recordId: "recordId" }, ngImport: i0, template: "<div\n class=\"p-[1.7em] bg-red-50 text-red-800 text-[1.5em] text-center rounded-lg\"\n>\n <div\n *ngIf=\"type === types.COULD_NOT_REACH_API\"\n data-test=\"could-not-reach-api-error\"\n >\n <div class=\"relative opacity-40\">\n <ng-icon name=\"matFace\" class=\"face\"></ng-icon>\n <ng-icon name=\"matQuestionMark\" class=\"question-mark1\"></ng-icon>\n <ng-icon name=\"matQuestionMark\" class=\"question-mark2\"></ng-icon>\n </div>\n <div translate>search.error.couldNotReachApi</div>\n </div>\n <div\n *ngIf=\"type === types.DATASET_HAS_NO_LINK\"\n data-test=\"dataset-has-no-link-error\"\n >\n <div class=\"relative opacity-40\">\n <ng-icon name=\"matComputerOutline\"></ng-icon>\n </div>\n <div translate>search.error.recordHasnolink</div>\n </div>\n <div *ngIf=\"type === types.RECEIVED_ERROR\" data-test=\"received-error-error\">\n <div class=\"relative opacity-40\">\n <ng-icon name=\"matMoodBad\" class=\"face\"></ng-icon>\n </div>\n <div translate>search.error.receivedError</div>\n <div *ngIf=\"error\">{{ error }}</div>\n </div>\n <div *ngIf=\"type === types.ORGANIZATION_HAS_NO_DATASET\">\n <div class=\"relative opacity-40\">\n <ng-icon name=\"matComputerOutline\" class=\"computer\"></ng-icon>\n <ng-icon name=\"matQuestionMark\" class=\"computer-question-mark\"> </ng-icon>\n </div>\n <div translate>search.error.organizationHasNoDataset</div>\n </div>\n <div\n *ngIf=\"type === types.RECORD_NOT_FOUND\"\n data-test=\"record-not-found-error\"\n >\n <div class=\"relative opacity-40\">\n <ng-icon name=\"matComputerOutline\" class=\"computer\"></ng-icon>\n <ng-icon name=\"matQuestionMark\" class=\"computer-question-mark\"> </ng-icon>\n </div>\n <div translate [translateParams]=\"{ id: recordId }\">\n search.error.recordNotFound\n </div>\n <div *ngIf=\"error\">{{ error }}</div>\n </div>\n <div\n *ngIf=\"type === types.ORGANIZATION_NOT_FOUND\"\n data-test=\"org-not-found-error\"\n >\n <div class=\"relative opacity-40\">\n <ng-icon name=\"matComputerOutline\" class=\"computer\"></ng-icon>\n <ng-icon name=\"matQuestionMark\" class=\"computer-question-mark\"> </ng-icon>\n </div>\n <div translate [translateParams]=\"{ id: recordId }\">\n search.error.organizationNotFound\n </div>\n <div *ngIf=\"error\">{{ error }}</div>\n </div>\n</div>\n", styles: ["ng-icon{width:5rem;height:5rem}ng-icon.face{width:3em;height:3em}ng-icon.question-mark1{position:absolute;bottom:1.9em;left:calc(50% + 1.2em);width:1.7em;height:1.7em}ng-icon.question-mark2{position:absolute;bottom:2.3em;left:calc(50% + 2.3em);width:1.4em;height:1.4em}ng-icon.computer{width:3em;height:3em}ng-icon.computer-question-mark{position:absolute;top:.7em;left:calc(50% - .6em);width:1.2em;height:1.2em}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: NgIcon, selector: "ng-icon", inputs: ["name", "svg", "size", "strokeWidth", "color"] }, { kind: "directive", type: TranslateDirective, selector: "[translate],[ngx-translate]", inputs: ["translate", "translateParams"] }], viewProviders: [
23
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: ErrorComponent, isStandalone: true, selector: "gn-ui-error", inputs: { type: "type", error: "error", recordId: "recordId" }, ngImport: i0, template: "<div\n class=\"p-[1.7em] text-[1.5em] text-center rounded-lg\"\n [ngClass]=\"{\n 'bg-red-50 text-red-800': type !== types.DATASET_HAS_NO_LINK,\n 'bg-gray-100 text-black': type === types.DATASET_HAS_NO_LINK,\n }\"\n>\n <div\n *ngIf=\"type === types.COULD_NOT_REACH_API\"\n data-test=\"could-not-reach-api-error\"\n >\n <div class=\"relative opacity-40\">\n <ng-icon name=\"matFace\" class=\"face\"></ng-icon>\n <ng-icon name=\"matQuestionMark\" class=\"question-mark1\"></ng-icon>\n <ng-icon name=\"matQuestionMark\" class=\"question-mark2\"></ng-icon>\n </div>\n <div translate>search.error.couldNotReachApi</div>\n </div>\n <div\n *ngIf=\"type === types.DATASET_HAS_NO_LINK\"\n data-test=\"dataset-has-no-link-error\"\n >\n <div class=\"relative opacity-40\">\n <ng-icon name=\"matComputerOutline\"></ng-icon>\n </div>\n <div translate>search.error.recordHasnolink</div>\n </div>\n <div *ngIf=\"type === types.RECEIVED_ERROR\" data-test=\"received-error-error\">\n <div class=\"relative opacity-40\">\n <ng-icon name=\"matMoodBad\" class=\"face\"></ng-icon>\n </div>\n <div translate>search.error.receivedError</div>\n <div *ngIf=\"error\">{{ error }}</div>\n </div>\n <div *ngIf=\"type === types.ORGANIZATION_HAS_NO_DATASET\">\n <div class=\"relative opacity-40\">\n <ng-icon name=\"matComputerOutline\" class=\"computer\"></ng-icon>\n <ng-icon name=\"matQuestionMark\" class=\"computer-question-mark\"> </ng-icon>\n </div>\n <div translate>search.error.organizationHasNoDataset</div>\n </div>\n <div\n *ngIf=\"type === types.RECORD_NOT_FOUND\"\n data-test=\"record-not-found-error\"\n >\n <div class=\"relative opacity-40\">\n <ng-icon name=\"matComputerOutline\" class=\"computer\"></ng-icon>\n <ng-icon name=\"matQuestionMark\" class=\"computer-question-mark\"> </ng-icon>\n </div>\n <div translate [translateParams]=\"{ id: recordId }\">\n search.error.recordNotFound\n </div>\n <div *ngIf=\"error\">{{ error }}</div>\n </div>\n <div\n *ngIf=\"type === types.ORGANIZATION_NOT_FOUND\"\n data-test=\"org-not-found-error\"\n >\n <div class=\"relative opacity-40\">\n <ng-icon name=\"matComputerOutline\" class=\"computer\"></ng-icon>\n <ng-icon name=\"matQuestionMark\" class=\"computer-question-mark\"> </ng-icon>\n </div>\n <div translate [translateParams]=\"{ id: recordId }\">\n search.error.organizationNotFound\n </div>\n <div *ngIf=\"error\">{{ error }}</div>\n </div>\n</div>\n", styles: ["ng-icon{width:5rem;height:5rem}ng-icon.face{width:3em;height:3em}ng-icon.question-mark1{position:absolute;bottom:1.9em;left:calc(50% + 1.2em);width:1.7em;height:1.7em}ng-icon.question-mark2{position:absolute;bottom:2.3em;left:calc(50% + 2.3em);width:1.4em;height:1.4em}ng-icon.computer{width:3em;height:3em}ng-icon.computer-question-mark{position:absolute;top:.7em;left:calc(50% - .6em);width:1.2em;height:1.2em}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: NgIcon, selector: "ng-icon", inputs: ["name", "svg", "size", "strokeWidth", "color"] }, { kind: "directive", type: TranslateDirective, selector: "[translate],[ngx-translate]", inputs: ["translate", "translateParams"] }], viewProviders: [
24
24
  provideIcons({
25
25
  matFace,
26
26
  matQuestionMark,
@@ -38,7 +38,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
38
38
  matMoodBad,
39
39
  matComputerOutline,
40
40
  }),
41
- ], template: "<div\n class=\"p-[1.7em] bg-red-50 text-red-800 text-[1.5em] text-center rounded-lg\"\n>\n <div\n *ngIf=\"type === types.COULD_NOT_REACH_API\"\n data-test=\"could-not-reach-api-error\"\n >\n <div class=\"relative opacity-40\">\n <ng-icon name=\"matFace\" class=\"face\"></ng-icon>\n <ng-icon name=\"matQuestionMark\" class=\"question-mark1\"></ng-icon>\n <ng-icon name=\"matQuestionMark\" class=\"question-mark2\"></ng-icon>\n </div>\n <div translate>search.error.couldNotReachApi</div>\n </div>\n <div\n *ngIf=\"type === types.DATASET_HAS_NO_LINK\"\n data-test=\"dataset-has-no-link-error\"\n >\n <div class=\"relative opacity-40\">\n <ng-icon name=\"matComputerOutline\"></ng-icon>\n </div>\n <div translate>search.error.recordHasnolink</div>\n </div>\n <div *ngIf=\"type === types.RECEIVED_ERROR\" data-test=\"received-error-error\">\n <div class=\"relative opacity-40\">\n <ng-icon name=\"matMoodBad\" class=\"face\"></ng-icon>\n </div>\n <div translate>search.error.receivedError</div>\n <div *ngIf=\"error\">{{ error }}</div>\n </div>\n <div *ngIf=\"type === types.ORGANIZATION_HAS_NO_DATASET\">\n <div class=\"relative opacity-40\">\n <ng-icon name=\"matComputerOutline\" class=\"computer\"></ng-icon>\n <ng-icon name=\"matQuestionMark\" class=\"computer-question-mark\"> </ng-icon>\n </div>\n <div translate>search.error.organizationHasNoDataset</div>\n </div>\n <div\n *ngIf=\"type === types.RECORD_NOT_FOUND\"\n data-test=\"record-not-found-error\"\n >\n <div class=\"relative opacity-40\">\n <ng-icon name=\"matComputerOutline\" class=\"computer\"></ng-icon>\n <ng-icon name=\"matQuestionMark\" class=\"computer-question-mark\"> </ng-icon>\n </div>\n <div translate [translateParams]=\"{ id: recordId }\">\n search.error.recordNotFound\n </div>\n <div *ngIf=\"error\">{{ error }}</div>\n </div>\n <div\n *ngIf=\"type === types.ORGANIZATION_NOT_FOUND\"\n data-test=\"org-not-found-error\"\n >\n <div class=\"relative opacity-40\">\n <ng-icon name=\"matComputerOutline\" class=\"computer\"></ng-icon>\n <ng-icon name=\"matQuestionMark\" class=\"computer-question-mark\"> </ng-icon>\n </div>\n <div translate [translateParams]=\"{ id: recordId }\">\n search.error.organizationNotFound\n </div>\n <div *ngIf=\"error\">{{ error }}</div>\n </div>\n</div>\n", styles: ["ng-icon{width:5rem;height:5rem}ng-icon.face{width:3em;height:3em}ng-icon.question-mark1{position:absolute;bottom:1.9em;left:calc(50% + 1.2em);width:1.7em;height:1.7em}ng-icon.question-mark2{position:absolute;bottom:2.3em;left:calc(50% + 2.3em);width:1.4em;height:1.4em}ng-icon.computer{width:3em;height:3em}ng-icon.computer-question-mark{position:absolute;top:.7em;left:calc(50% - .6em);width:1.2em;height:1.2em}\n"] }]
41
+ ], template: "<div\n class=\"p-[1.7em] text-[1.5em] text-center rounded-lg\"\n [ngClass]=\"{\n 'bg-red-50 text-red-800': type !== types.DATASET_HAS_NO_LINK,\n 'bg-gray-100 text-black': type === types.DATASET_HAS_NO_LINK,\n }\"\n>\n <div\n *ngIf=\"type === types.COULD_NOT_REACH_API\"\n data-test=\"could-not-reach-api-error\"\n >\n <div class=\"relative opacity-40\">\n <ng-icon name=\"matFace\" class=\"face\"></ng-icon>\n <ng-icon name=\"matQuestionMark\" class=\"question-mark1\"></ng-icon>\n <ng-icon name=\"matQuestionMark\" class=\"question-mark2\"></ng-icon>\n </div>\n <div translate>search.error.couldNotReachApi</div>\n </div>\n <div\n *ngIf=\"type === types.DATASET_HAS_NO_LINK\"\n data-test=\"dataset-has-no-link-error\"\n >\n <div class=\"relative opacity-40\">\n <ng-icon name=\"matComputerOutline\"></ng-icon>\n </div>\n <div translate>search.error.recordHasnolink</div>\n </div>\n <div *ngIf=\"type === types.RECEIVED_ERROR\" data-test=\"received-error-error\">\n <div class=\"relative opacity-40\">\n <ng-icon name=\"matMoodBad\" class=\"face\"></ng-icon>\n </div>\n <div translate>search.error.receivedError</div>\n <div *ngIf=\"error\">{{ error }}</div>\n </div>\n <div *ngIf=\"type === types.ORGANIZATION_HAS_NO_DATASET\">\n <div class=\"relative opacity-40\">\n <ng-icon name=\"matComputerOutline\" class=\"computer\"></ng-icon>\n <ng-icon name=\"matQuestionMark\" class=\"computer-question-mark\"> </ng-icon>\n </div>\n <div translate>search.error.organizationHasNoDataset</div>\n </div>\n <div\n *ngIf=\"type === types.RECORD_NOT_FOUND\"\n data-test=\"record-not-found-error\"\n >\n <div class=\"relative opacity-40\">\n <ng-icon name=\"matComputerOutline\" class=\"computer\"></ng-icon>\n <ng-icon name=\"matQuestionMark\" class=\"computer-question-mark\"> </ng-icon>\n </div>\n <div translate [translateParams]=\"{ id: recordId }\">\n search.error.recordNotFound\n </div>\n <div *ngIf=\"error\">{{ error }}</div>\n </div>\n <div\n *ngIf=\"type === types.ORGANIZATION_NOT_FOUND\"\n data-test=\"org-not-found-error\"\n >\n <div class=\"relative opacity-40\">\n <ng-icon name=\"matComputerOutline\" class=\"computer\"></ng-icon>\n <ng-icon name=\"matQuestionMark\" class=\"computer-question-mark\"> </ng-icon>\n </div>\n <div translate [translateParams]=\"{ id: recordId }\">\n search.error.organizationNotFound\n </div>\n <div *ngIf=\"error\">{{ error }}</div>\n </div>\n</div>\n", styles: ["ng-icon{width:5rem;height:5rem}ng-icon.face{width:3em;height:3em}ng-icon.question-mark1{position:absolute;bottom:1.9em;left:calc(50% + 1.2em);width:1.7em;height:1.7em}ng-icon.question-mark2{position:absolute;bottom:2.3em;left:calc(50% + 2.3em);width:1.4em;height:1.4em}ng-icon.computer{width:3em;height:3em}ng-icon.computer-question-mark{position:absolute;top:.7em;left:calc(50% - .6em);width:1.2em;height:1.2em}\n"] }]
42
42
  }], propDecorators: { type: [{
43
43
  type: Input
44
44
  }], error: [{
@@ -46,4 +46,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
46
46
  }], recordId: [{
47
47
  type: Input
48
48
  }] } });
49
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXJyb3IuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy91aS9lbGVtZW50cy9zcmMvbGliL2Vycm9yL2Vycm9yLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvdWkvZWxlbWVudHMvc3JjL2xpYi9lcnJvci9lcnJvci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxNQUFNLGVBQWUsQ0FBQTtBQUN6RSxPQUFPLEVBQUUsTUFBTSxFQUFFLFlBQVksRUFBRSxNQUFNLGdCQUFnQixDQUFBO0FBQ3JELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQTtBQUM5QyxPQUFPLEVBQ0wsT0FBTyxFQUNQLFVBQVUsRUFDVixlQUFlLEdBQ2hCLE1BQU0sbUNBQW1DLENBQUE7QUFDMUMsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sa0NBQWtDLENBQUE7QUFDckUsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0scUJBQXFCLENBQUE7OztBQUV4RCxNQUFNLENBQU4sSUFBWSxTQU9YO0FBUEQsV0FBWSxTQUFTO0lBQ25CLHVFQUFtQixDQUFBO0lBQ25CLDZEQUFjLENBQUE7SUFDZCxpRUFBZ0IsQ0FBQTtJQUNoQix1RUFBbUIsQ0FBQTtJQUNuQix1RkFBMkIsQ0FBQTtJQUMzQiw2RUFBc0IsQ0FBQTtBQUN4QixDQUFDLEVBUFcsU0FBUyxLQUFULFNBQVMsUUFPcEI7QUFrQkQsTUFBTSxPQUFPLGNBQWM7SUFoQjNCO1FBb0JFLFVBQUssR0FBRyxTQUFTLENBQUE7S0FDbEI7K0dBTFksY0FBYzttR0FBZCxjQUFjLHVJQ3BDM0IsczRFQWdFQSx1ZER0Q1ksWUFBWSxtSUFBRSxNQUFNLDZHQUFFLGtCQUFrQix1R0FDbkM7WUFDYixZQUFZLENBQUM7Z0JBQ1gsT0FBTztnQkFDUCxlQUFlO2dCQUNmLFVBQVU7Z0JBQ1Ysa0JBQWtCO2FBQ25CLENBQUM7U0FDSDs7NEZBRVUsY0FBYztrQkFoQjFCLFNBQVM7K0JBQ0UsYUFBYSxtQkFHTix1QkFBdUIsQ0FBQyxNQUFNLGNBQ25DLElBQUksV0FDUCxDQUFDLFlBQVksRUFBRSxNQUFNLEVBQUUsa0JBQWtCLENBQUMsaUJBQ3BDO3dCQUNiLFlBQVksQ0FBQzs0QkFDWCxPQUFPOzRCQUNQLGVBQWU7NEJBQ2YsVUFBVTs0QkFDVixrQkFBa0I7eUJBQ25CLENBQUM7cUJBQ0g7OEJBR1EsSUFBSTtzQkFBWixLQUFLO2dCQUNHLEtBQUs7c0JBQWIsS0FBSztnQkFDRyxRQUFRO3NCQUFoQixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENvbXBvbmVudCwgSW5wdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJ1xuaW1wb3J0IHsgTmdJY29uLCBwcm92aWRlSWNvbnMgfSBmcm9tICdAbmctaWNvbnMvY29yZSdcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbidcbmltcG9ydCB7XG4gIG1hdEZhY2UsXG4gIG1hdE1vb2RCYWQsXG4gIG1hdFF1ZXN0aW9uTWFyayxcbn0gZnJvbSAnQG5nLWljb25zL21hdGVyaWFsLWljb25zL2Jhc2VsaW5lJ1xuaW1wb3J0IHsgbWF0Q29tcHV0ZXJPdXRsaW5lIH0gZnJvbSAnQG5nLWljb25zL21hdGVyaWFsLWljb25zL291dGxpbmUnXG5pbXBvcnQgeyBUcmFuc2xhdGVEaXJlY3RpdmUgfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJ1xuXG5leHBvcnQgZW51bSBFcnJvclR5cGUge1xuICBDT1VMRF9OT1RfUkVBQ0hfQVBJLFxuICBSRUNFSVZFRF9FUlJPUixcbiAgUkVDT1JEX05PVF9GT1VORCxcbiAgREFUQVNFVF9IQVNfTk9fTElOSyxcbiAgT1JHQU5JWkFUSU9OX0hBU19OT19EQVRBU0VULFxuICBPUkdBTklaQVRJT05fTk9UX0ZPVU5ELFxufVxuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdnbi11aS1lcnJvcicsXG4gIHRlbXBsYXRlVXJsOiAnLi9lcnJvci5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2Vycm9yLmNvbXBvbmVudC5jc3MnXSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtDb21tb25Nb2R1bGUsIE5nSWNvbiwgVHJhbnNsYXRlRGlyZWN0aXZlXSxcbiAgdmlld1Byb3ZpZGVyczogW1xuICAgIHByb3ZpZGVJY29ucyh7XG4gICAgICBtYXRGYWNlLFxuICAgICAgbWF0UXVlc3Rpb25NYXJrLFxuICAgICAgbWF0TW9vZEJhZCxcbiAgICAgIG1hdENvbXB1dGVyT3V0bGluZSxcbiAgICB9KSxcbiAgXSxcbn0pXG5leHBvcnQgY2xhc3MgRXJyb3JDb21wb25lbnQge1xuICBASW5wdXQoKSB0eXBlITogRXJyb3JUeXBlXG4gIEBJbnB1dCgpIGVycm9yPzogc3RyaW5nXG4gIEBJbnB1dCgpIHJlY29yZElkPzogc3RyaW5nXG4gIHR5cGVzID0gRXJyb3JUeXBlXG59XG4iLCI8ZGl2XG4gIGNsYXNzPVwicC1bMS43ZW1dIGJnLXJlZC01MCB0ZXh0LXJlZC04MDAgdGV4dC1bMS41ZW1dIHRleHQtY2VudGVyIHJvdW5kZWQtbGdcIlxuPlxuICA8ZGl2XG4gICAgKm5nSWY9XCJ0eXBlID09PSB0eXBlcy5DT1VMRF9OT1RfUkVBQ0hfQVBJXCJcbiAgICBkYXRhLXRlc3Q9XCJjb3VsZC1ub3QtcmVhY2gtYXBpLWVycm9yXCJcbiAgPlxuICAgIDxkaXYgY2xhc3M9XCJyZWxhdGl2ZSBvcGFjaXR5LTQwXCI+XG4gICAgICA8bmctaWNvbiBuYW1lPVwibWF0RmFjZVwiIGNsYXNzPVwiZmFjZVwiPjwvbmctaWNvbj5cbiAgICAgIDxuZy1pY29uIG5hbWU9XCJtYXRRdWVzdGlvbk1hcmtcIiBjbGFzcz1cInF1ZXN0aW9uLW1hcmsxXCI+PC9uZy1pY29uPlxuICAgICAgPG5nLWljb24gbmFtZT1cIm1hdFF1ZXN0aW9uTWFya1wiIGNsYXNzPVwicXVlc3Rpb24tbWFyazJcIj48L25nLWljb24+XG4gICAgPC9kaXY+XG4gICAgPGRpdiB0cmFuc2xhdGU+c2VhcmNoLmVycm9yLmNvdWxkTm90UmVhY2hBcGk8L2Rpdj5cbiAgPC9kaXY+XG4gIDxkaXZcbiAgICAqbmdJZj1cInR5cGUgPT09IHR5cGVzLkRBVEFTRVRfSEFTX05PX0xJTktcIlxuICAgIGRhdGEtdGVzdD1cImRhdGFzZXQtaGFzLW5vLWxpbmstZXJyb3JcIlxuICA+XG4gICAgPGRpdiBjbGFzcz1cInJlbGF0aXZlIG9wYWNpdHktNDBcIj5cbiAgICAgIDxuZy1pY29uIG5hbWU9XCJtYXRDb21wdXRlck91dGxpbmVcIj48L25nLWljb24+XG4gICAgPC9kaXY+XG4gICAgPGRpdiB0cmFuc2xhdGU+c2VhcmNoLmVycm9yLnJlY29yZEhhc25vbGluazwvZGl2PlxuICA8L2Rpdj5cbiAgPGRpdiAqbmdJZj1cInR5cGUgPT09IHR5cGVzLlJFQ0VJVkVEX0VSUk9SXCIgZGF0YS10ZXN0PVwicmVjZWl2ZWQtZXJyb3ItZXJyb3JcIj5cbiAgICA8ZGl2IGNsYXNzPVwicmVsYXRpdmUgb3BhY2l0eS00MFwiPlxuICAgICAgPG5nLWljb24gbmFtZT1cIm1hdE1vb2RCYWRcIiBjbGFzcz1cImZhY2VcIj48L25nLWljb24+XG4gICAgPC9kaXY+XG4gICAgPGRpdiB0cmFuc2xhdGU+c2VhcmNoLmVycm9yLnJlY2VpdmVkRXJyb3I8L2Rpdj5cbiAgICA8ZGl2ICpuZ0lmPVwiZXJyb3JcIj57eyBlcnJvciB9fTwvZGl2PlxuICA8L2Rpdj5cbiAgPGRpdiAqbmdJZj1cInR5cGUgPT09IHR5cGVzLk9SR0FOSVpBVElPTl9IQVNfTk9fREFUQVNFVFwiPlxuICAgIDxkaXYgY2xhc3M9XCJyZWxhdGl2ZSBvcGFjaXR5LTQwXCI+XG4gICAgICA8bmctaWNvbiBuYW1lPVwibWF0Q29tcHV0ZXJPdXRsaW5lXCIgY2xhc3M9XCJjb21wdXRlclwiPjwvbmctaWNvbj5cbiAgICAgIDxuZy1pY29uIG5hbWU9XCJtYXRRdWVzdGlvbk1hcmtcIiBjbGFzcz1cImNvbXB1dGVyLXF1ZXN0aW9uLW1hcmtcIj4gPC9uZy1pY29uPlxuICAgIDwvZGl2PlxuICAgIDxkaXYgdHJhbnNsYXRlPnNlYXJjaC5lcnJvci5vcmdhbml6YXRpb25IYXNOb0RhdGFzZXQ8L2Rpdj5cbiAgPC9kaXY+XG4gIDxkaXZcbiAgICAqbmdJZj1cInR5cGUgPT09IHR5cGVzLlJFQ09SRF9OT1RfRk9VTkRcIlxuICAgIGRhdGEtdGVzdD1cInJlY29yZC1ub3QtZm91bmQtZXJyb3JcIlxuICA+XG4gICAgPGRpdiBjbGFzcz1cInJlbGF0aXZlIG9wYWNpdHktNDBcIj5cbiAgICAgIDxuZy1pY29uIG5hbWU9XCJtYXRDb21wdXRlck91dGxpbmVcIiBjbGFzcz1cImNvbXB1dGVyXCI+PC9uZy1pY29uPlxuICAgICAgPG5nLWljb24gbmFtZT1cIm1hdFF1ZXN0aW9uTWFya1wiIGNsYXNzPVwiY29tcHV0ZXItcXVlc3Rpb24tbWFya1wiPiA8L25nLWljb24+XG4gICAgPC9kaXY+XG4gICAgPGRpdiB0cmFuc2xhdGUgW3RyYW5zbGF0ZVBhcmFtc109XCJ7IGlkOiByZWNvcmRJZCB9XCI+XG4gICAgICBzZWFyY2guZXJyb3IucmVjb3JkTm90Rm91bmRcbiAgICA8L2Rpdj5cbiAgICA8ZGl2ICpuZ0lmPVwiZXJyb3JcIj57eyBlcnJvciB9fTwvZGl2PlxuICA8L2Rpdj5cbiAgPGRpdlxuICAgICpuZ0lmPVwidHlwZSA9PT0gdHlwZXMuT1JHQU5JWkFUSU9OX05PVF9GT1VORFwiXG4gICAgZGF0YS10ZXN0PVwib3JnLW5vdC1mb3VuZC1lcnJvclwiXG4gID5cbiAgICA8ZGl2IGNsYXNzPVwicmVsYXRpdmUgb3BhY2l0eS00MFwiPlxuICAgICAgPG5nLWljb24gbmFtZT1cIm1hdENvbXB1dGVyT3V0bGluZVwiIGNsYXNzPVwiY29tcHV0ZXJcIj48L25nLWljb24+XG4gICAgICA8bmctaWNvbiBuYW1lPVwibWF0UXVlc3Rpb25NYXJrXCIgY2xhc3M9XCJjb21wdXRlci1xdWVzdGlvbi1tYXJrXCI+IDwvbmctaWNvbj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IHRyYW5zbGF0ZSBbdHJhbnNsYXRlUGFyYW1zXT1cInsgaWQ6IHJlY29yZElkIH1cIj5cbiAgICAgIHNlYXJjaC5lcnJvci5vcmdhbml6YXRpb25Ob3RGb3VuZFxuICAgIDwvZGl2PlxuICAgIDxkaXYgKm5nSWY9XCJlcnJvclwiPnt7IGVycm9yIH19PC9kaXY+XG4gIDwvZGl2PlxuPC9kaXY+XG4iXX0=
49
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXJyb3IuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy91aS9lbGVtZW50cy9zcmMvbGliL2Vycm9yL2Vycm9yLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvdWkvZWxlbWVudHMvc3JjL2xpYi9lcnJvci9lcnJvci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxNQUFNLGVBQWUsQ0FBQTtBQUN6RSxPQUFPLEVBQUUsTUFBTSxFQUFFLFlBQVksRUFBRSxNQUFNLGdCQUFnQixDQUFBO0FBQ3JELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQTtBQUM5QyxPQUFPLEVBQ0wsT0FBTyxFQUNQLFVBQVUsRUFDVixlQUFlLEdBQ2hCLE1BQU0sbUNBQW1DLENBQUE7QUFDMUMsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sa0NBQWtDLENBQUE7QUFDckUsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0scUJBQXFCLENBQUE7OztBQUV4RCxNQUFNLENBQU4sSUFBWSxTQU9YO0FBUEQsV0FBWSxTQUFTO0lBQ25CLHVFQUFtQixDQUFBO0lBQ25CLDZEQUFjLENBQUE7SUFDZCxpRUFBZ0IsQ0FBQTtJQUNoQix1RUFBbUIsQ0FBQTtJQUNuQix1RkFBMkIsQ0FBQTtJQUMzQiw2RUFBc0IsQ0FBQTtBQUN4QixDQUFDLEVBUFcsU0FBUyxLQUFULFNBQVMsUUFPcEI7QUFrQkQsTUFBTSxPQUFPLGNBQWM7SUFoQjNCO1FBb0JFLFVBQUssR0FBRyxTQUFTLENBQUE7S0FDbEI7K0dBTFksY0FBYzttR0FBZCxjQUFjLHVJQ3BDM0IsNmdGQW9FQSx1ZEQxQ1ksWUFBWSxpT0FBRSxNQUFNLDZHQUFFLGtCQUFrQix1R0FDbkM7WUFDYixZQUFZLENBQUM7Z0JBQ1gsT0FBTztnQkFDUCxlQUFlO2dCQUNmLFVBQVU7Z0JBQ1Ysa0JBQWtCO2FBQ25CLENBQUM7U0FDSDs7NEZBRVUsY0FBYztrQkFoQjFCLFNBQVM7K0JBQ0UsYUFBYSxtQkFHTix1QkFBdUIsQ0FBQyxNQUFNLGNBQ25DLElBQUksV0FDUCxDQUFDLFlBQVksRUFBRSxNQUFNLEVBQUUsa0JBQWtCLENBQUMsaUJBQ3BDO3dCQUNiLFlBQVksQ0FBQzs0QkFDWCxPQUFPOzRCQUNQLGVBQWU7NEJBQ2YsVUFBVTs0QkFDVixrQkFBa0I7eUJBQ25CLENBQUM7cUJBQ0g7OEJBR1EsSUFBSTtzQkFBWixLQUFLO2dCQUNHLEtBQUs7c0JBQWIsS0FBSztnQkFDRyxRQUFRO3NCQUFoQixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENvbXBvbmVudCwgSW5wdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJ1xuaW1wb3J0IHsgTmdJY29uLCBwcm92aWRlSWNvbnMgfSBmcm9tICdAbmctaWNvbnMvY29yZSdcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbidcbmltcG9ydCB7XG4gIG1hdEZhY2UsXG4gIG1hdE1vb2RCYWQsXG4gIG1hdFF1ZXN0aW9uTWFyayxcbn0gZnJvbSAnQG5nLWljb25zL21hdGVyaWFsLWljb25zL2Jhc2VsaW5lJ1xuaW1wb3J0IHsgbWF0Q29tcHV0ZXJPdXRsaW5lIH0gZnJvbSAnQG5nLWljb25zL21hdGVyaWFsLWljb25zL291dGxpbmUnXG5pbXBvcnQgeyBUcmFuc2xhdGVEaXJlY3RpdmUgfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJ1xuXG5leHBvcnQgZW51bSBFcnJvclR5cGUge1xuICBDT1VMRF9OT1RfUkVBQ0hfQVBJLFxuICBSRUNFSVZFRF9FUlJPUixcbiAgUkVDT1JEX05PVF9GT1VORCxcbiAgREFUQVNFVF9IQVNfTk9fTElOSyxcbiAgT1JHQU5JWkFUSU9OX0hBU19OT19EQVRBU0VULFxuICBPUkdBTklaQVRJT05fTk9UX0ZPVU5ELFxufVxuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdnbi11aS1lcnJvcicsXG4gIHRlbXBsYXRlVXJsOiAnLi9lcnJvci5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2Vycm9yLmNvbXBvbmVudC5jc3MnXSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtDb21tb25Nb2R1bGUsIE5nSWNvbiwgVHJhbnNsYXRlRGlyZWN0aXZlXSxcbiAgdmlld1Byb3ZpZGVyczogW1xuICAgIHByb3ZpZGVJY29ucyh7XG4gICAgICBtYXRGYWNlLFxuICAgICAgbWF0UXVlc3Rpb25NYXJrLFxuICAgICAgbWF0TW9vZEJhZCxcbiAgICAgIG1hdENvbXB1dGVyT3V0bGluZSxcbiAgICB9KSxcbiAgXSxcbn0pXG5leHBvcnQgY2xhc3MgRXJyb3JDb21wb25lbnQge1xuICBASW5wdXQoKSB0eXBlITogRXJyb3JUeXBlXG4gIEBJbnB1dCgpIGVycm9yPzogc3RyaW5nXG4gIEBJbnB1dCgpIHJlY29yZElkPzogc3RyaW5nXG4gIHR5cGVzID0gRXJyb3JUeXBlXG59XG4iLCI8ZGl2XG4gIGNsYXNzPVwicC1bMS43ZW1dIHRleHQtWzEuNWVtXSB0ZXh0LWNlbnRlciByb3VuZGVkLWxnXCJcbiAgW25nQ2xhc3NdPVwie1xuICAgICdiZy1yZWQtNTAgdGV4dC1yZWQtODAwJzogdHlwZSAhPT0gdHlwZXMuREFUQVNFVF9IQVNfTk9fTElOSyxcbiAgICAnYmctZ3JheS0xMDAgdGV4dC1ibGFjayc6IHR5cGUgPT09IHR5cGVzLkRBVEFTRVRfSEFTX05PX0xJTkssXG4gIH1cIlxuPlxuICA8ZGl2XG4gICAgKm5nSWY9XCJ0eXBlID09PSB0eXBlcy5DT1VMRF9OT1RfUkVBQ0hfQVBJXCJcbiAgICBkYXRhLXRlc3Q9XCJjb3VsZC1ub3QtcmVhY2gtYXBpLWVycm9yXCJcbiAgPlxuICAgIDxkaXYgY2xhc3M9XCJyZWxhdGl2ZSBvcGFjaXR5LTQwXCI+XG4gICAgICA8bmctaWNvbiBuYW1lPVwibWF0RmFjZVwiIGNsYXNzPVwiZmFjZVwiPjwvbmctaWNvbj5cbiAgICAgIDxuZy1pY29uIG5hbWU9XCJtYXRRdWVzdGlvbk1hcmtcIiBjbGFzcz1cInF1ZXN0aW9uLW1hcmsxXCI+PC9uZy1pY29uPlxuICAgICAgPG5nLWljb24gbmFtZT1cIm1hdFF1ZXN0aW9uTWFya1wiIGNsYXNzPVwicXVlc3Rpb24tbWFyazJcIj48L25nLWljb24+XG4gICAgPC9kaXY+XG4gICAgPGRpdiB0cmFuc2xhdGU+c2VhcmNoLmVycm9yLmNvdWxkTm90UmVhY2hBcGk8L2Rpdj5cbiAgPC9kaXY+XG4gIDxkaXZcbiAgICAqbmdJZj1cInR5cGUgPT09IHR5cGVzLkRBVEFTRVRfSEFTX05PX0xJTktcIlxuICAgIGRhdGEtdGVzdD1cImRhdGFzZXQtaGFzLW5vLWxpbmstZXJyb3JcIlxuICA+XG4gICAgPGRpdiBjbGFzcz1cInJlbGF0aXZlIG9wYWNpdHktNDBcIj5cbiAgICAgIDxuZy1pY29uIG5hbWU9XCJtYXRDb21wdXRlck91dGxpbmVcIj48L25nLWljb24+XG4gICAgPC9kaXY+XG4gICAgPGRpdiB0cmFuc2xhdGU+c2VhcmNoLmVycm9yLnJlY29yZEhhc25vbGluazwvZGl2PlxuICA8L2Rpdj5cbiAgPGRpdiAqbmdJZj1cInR5cGUgPT09IHR5cGVzLlJFQ0VJVkVEX0VSUk9SXCIgZGF0YS10ZXN0PVwicmVjZWl2ZWQtZXJyb3ItZXJyb3JcIj5cbiAgICA8ZGl2IGNsYXNzPVwicmVsYXRpdmUgb3BhY2l0eS00MFwiPlxuICAgICAgPG5nLWljb24gbmFtZT1cIm1hdE1vb2RCYWRcIiBjbGFzcz1cImZhY2VcIj48L25nLWljb24+XG4gICAgPC9kaXY+XG4gICAgPGRpdiB0cmFuc2xhdGU+c2VhcmNoLmVycm9yLnJlY2VpdmVkRXJyb3I8L2Rpdj5cbiAgICA8ZGl2ICpuZ0lmPVwiZXJyb3JcIj57eyBlcnJvciB9fTwvZGl2PlxuICA8L2Rpdj5cbiAgPGRpdiAqbmdJZj1cInR5cGUgPT09IHR5cGVzLk9SR0FOSVpBVElPTl9IQVNfTk9fREFUQVNFVFwiPlxuICAgIDxkaXYgY2xhc3M9XCJyZWxhdGl2ZSBvcGFjaXR5LTQwXCI+XG4gICAgICA8bmctaWNvbiBuYW1lPVwibWF0Q29tcHV0ZXJPdXRsaW5lXCIgY2xhc3M9XCJjb21wdXRlclwiPjwvbmctaWNvbj5cbiAgICAgIDxuZy1pY29uIG5hbWU9XCJtYXRRdWVzdGlvbk1hcmtcIiBjbGFzcz1cImNvbXB1dGVyLXF1ZXN0aW9uLW1hcmtcIj4gPC9uZy1pY29uPlxuICAgIDwvZGl2PlxuICAgIDxkaXYgdHJhbnNsYXRlPnNlYXJjaC5lcnJvci5vcmdhbml6YXRpb25IYXNOb0RhdGFzZXQ8L2Rpdj5cbiAgPC9kaXY+XG4gIDxkaXZcbiAgICAqbmdJZj1cInR5cGUgPT09IHR5cGVzLlJFQ09SRF9OT1RfRk9VTkRcIlxuICAgIGRhdGEtdGVzdD1cInJlY29yZC1ub3QtZm91bmQtZXJyb3JcIlxuICA+XG4gICAgPGRpdiBjbGFzcz1cInJlbGF0aXZlIG9wYWNpdHktNDBcIj5cbiAgICAgIDxuZy1pY29uIG5hbWU9XCJtYXRDb21wdXRlck91dGxpbmVcIiBjbGFzcz1cImNvbXB1dGVyXCI+PC9uZy1pY29uPlxuICAgICAgPG5nLWljb24gbmFtZT1cIm1hdFF1ZXN0aW9uTWFya1wiIGNsYXNzPVwiY29tcHV0ZXItcXVlc3Rpb24tbWFya1wiPiA8L25nLWljb24+XG4gICAgPC9kaXY+XG4gICAgPGRpdiB0cmFuc2xhdGUgW3RyYW5zbGF0ZVBhcmFtc109XCJ7IGlkOiByZWNvcmRJZCB9XCI+XG4gICAgICBzZWFyY2guZXJyb3IucmVjb3JkTm90Rm91bmRcbiAgICA8L2Rpdj5cbiAgICA8ZGl2ICpuZ0lmPVwiZXJyb3JcIj57eyBlcnJvciB9fTwvZGl2PlxuICA8L2Rpdj5cbiAgPGRpdlxuICAgICpuZ0lmPVwidHlwZSA9PT0gdHlwZXMuT1JHQU5JWkFUSU9OX05PVF9GT1VORFwiXG4gICAgZGF0YS10ZXN0PVwib3JnLW5vdC1mb3VuZC1lcnJvclwiXG4gID5cbiAgICA8ZGl2IGNsYXNzPVwicmVsYXRpdmUgb3BhY2l0eS00MFwiPlxuICAgICAgPG5nLWljb24gbmFtZT1cIm1hdENvbXB1dGVyT3V0bGluZVwiIGNsYXNzPVwiY29tcHV0ZXJcIj48L25nLWljb24+XG4gICAgICA8bmctaWNvbiBuYW1lPVwibWF0UXVlc3Rpb25NYXJrXCIgY2xhc3M9XCJjb21wdXRlci1xdWVzdGlvbi1tYXJrXCI+IDwvbmctaWNvbj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IHRyYW5zbGF0ZSBbdHJhbnNsYXRlUGFyYW1zXT1cInsgaWQ6IHJlY29yZElkIH1cIj5cbiAgICAgIHNlYXJjaC5lcnJvci5vcmdhbml6YXRpb25Ob3RGb3VuZFxuICAgIDwvZGl2PlxuICAgIDxkaXYgKm5nSWY9XCJlcnJvclwiPnt7IGVycm9yIH19PC9kaXY+XG4gIDwvZGl2PlxuPC9kaXY+XG4iXX0=
@@ -2,6 +2,7 @@ import { ChangeDetectionStrategy, Component, Input } from '@angular/core';
2
2
  import { CommonModule } from '@angular/common';
3
3
  import { NgIconComponent, provideIcons, provideNgIconsConfig, } from '@ng-icons/core';
4
4
  import { matOpenInNew } from '@ng-icons/material-icons/baseline';
5
+ import { iconoirDatabase } from '@ng-icons/iconoir';
5
6
  import { getBadgeColor, getFileFormat } from '../../../../../../libs/util/shared/src';
6
7
  import { TranslatePipe } from '@ngx-translate/core';
7
8
  import * as i0 from "@angular/core";
@@ -18,7 +19,7 @@ export class ExternalLinkCardComponent {
18
19
  }
19
20
  set size(value) {
20
21
  this._size = value;
21
- this.cardClass = this.sizeClassMap[value];
22
+ this.cardClass = `group flex flex-row justify-between card-shadow rounded overflow-hidden ${this.sizeClassMap[value]}`;
22
23
  }
23
24
  get size() {
24
25
  return this._size;
@@ -29,6 +30,10 @@ export class ExternalLinkCardComponent {
29
30
  }
30
31
  return this.link.name || this.link.description || '';
31
32
  }
33
+ get isDatabase() {
34
+ return (this.link.type === 'service' &&
35
+ this.link.accessServiceProtocol === 'postgis');
36
+ }
32
37
  getLinkFormat(link) {
33
38
  return getFileFormat(link);
34
39
  }
@@ -39,21 +44,23 @@ export class ExternalLinkCardComponent {
39
44
  static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: ExternalLinkCardComponent, isStandalone: true, selector: "gn-ui-external-link-card", inputs: { link: "link", size: "size" }, providers: [
40
45
  provideIcons({
41
46
  matOpenInNew,
47
+ iconoirDatabase,
42
48
  }),
43
49
  provideNgIconsConfig({ size: '1.5em' }),
44
- ], ngImport: i0, template: "<a\n [href]=\"link.url\"\n target=\"_blank\"\n class=\"group flex flex-row justify-between card-shadow cursor-pointer rounded overflow-hidden\"\n [ngClass]=\"cardClass\"\n [title]=\"title\"\n>\n <div class=\"flex flex-col justify-between flex-1 min-w-0\">\n <div class=\"gn-ui-card-title\">\n {{ link.description || link.name }}\n </div>\n <div class=\"gn-ui-card-detail\">\n {{ link.name }}\n </div>\n <p *ngIf=\"!link.name && !link.description\" class=\"gn-ui-card-title\">\n {{ link.url }}\n </p>\n <div class=\"pt-1\">\n <span\n class=\"inline-flex items-center justify-center px-2 py-1 text-13 font-medium leading-none text-white rounded transition-opacity opacity-70 group-hover:opacity-100\"\n [style.background-color]=\"getLinkColor(link)\"\n data-cy=\"download-format\"\n >{{\n getLinkFormat(link) || ('downloads.format.unknown' | translate)\n }}</span\n >\n </div>\n </div>\n <div\n class=\"flex min-w-[32px]\"\n [ngClass]=\"size === 'S' ? 'items-end' : 'items-center'\"\n >\n <div class=\"gn-ui-card-icon\">\n <ng-icon\n class=\"inline-block card-icon align-middle\"\n name=\"matOpenInNew\"\n ></ng-icon>\n </div>\n </div>\n</a>\n", styles: [""], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: NgIconComponent, selector: "ng-icon", inputs: ["name", "svg", "size", "strokeWidth", "color"] }, { kind: "pipe", type: TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
50
+ ], ngImport: i0, template: "<ng-container *ngIf=\"isDatabase; else clickableLink\">\n <div [ngClass]=\"cardClass\" [title]=\"title\">\n <ng-container *ngTemplateOutlet=\"cardContent\"></ng-container>\n <div\n class=\"flex min-w-[32px]\"\n [ngClass]=\"size === 'S' ? 'items-end' : 'items-center'\"\n >\n <div\n class=\"gn-ui-card-icon\"\n [title]=\"'record.metadata.link.postgis.tooltip' | translate\"\n >\n <ng-icon\n class=\"inline-block card-icon align-middle\"\n name=\"iconoirDatabase\"\n ></ng-icon>\n </div>\n </div>\n </div>\n</ng-container>\n\n<ng-template #clickableLink>\n <a [href]=\"link.url\" target=\"_blank\" [ngClass]=\"cardClass\" [title]=\"title\">\n <ng-container *ngTemplateOutlet=\"cardContent\"></ng-container>\n <div\n class=\"flex min-w-[32px]\"\n [ngClass]=\"size === 'S' ? 'items-end' : 'items-center'\"\n >\n <div class=\"gn-ui-card-icon\">\n <ng-icon\n class=\"inline-block card-icon align-middle\"\n name=\"matOpenInNew\"\n ></ng-icon>\n </div>\n </div>\n </a>\n</ng-template>\n<ng-template #cardContent>\n <div class=\"flex flex-col justify-between flex-1 min-w-0\">\n <div class=\"gn-ui-card-title\">\n {{ link.description || link.name }}\n </div>\n <div class=\"gn-ui-card-detail\">\n <ng-container *ngIf=\"isDatabase\">\n {{ 'record.metadata.link.postgis.table' | translate }}\n </ng-container>\n {{ link.name }}\n </div>\n <p *ngIf=\"!link.name && !link.description\" class=\"gn-ui-card-title\">\n {{ link.url }}\n </p>\n <div class=\"pt-1\">\n <span\n class=\"inline-flex items-center justify-center px-2 py-1 text-13 font-medium leading-none text-white rounded transition-opacity opacity-70 group-hover:opacity-100\"\n [style.background-color]=\"getLinkColor(link)\"\n data-cy=\"download-format\"\n >\n {{ getLinkFormat(link) || ('downloads.format.unknown' | translate) }}\n </span>\n </div>\n </div>\n</ng-template>\n", styles: [""], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: NgIconComponent, selector: "ng-icon", inputs: ["name", "svg", "size", "strokeWidth", "color"] }, { kind: "pipe", type: TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
45
51
  }
46
52
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ExternalLinkCardComponent, decorators: [{
47
53
  type: Component,
48
54
  args: [{ selector: 'gn-ui-external-link-card', changeDetection: ChangeDetectionStrategy.OnPush, standalone: true, imports: [CommonModule, NgIconComponent, TranslatePipe], providers: [
49
55
  provideIcons({
50
56
  matOpenInNew,
57
+ iconoirDatabase,
51
58
  }),
52
59
  provideNgIconsConfig({ size: '1.5em' }),
53
- ], template: "<a\n [href]=\"link.url\"\n target=\"_blank\"\n class=\"group flex flex-row justify-between card-shadow cursor-pointer rounded overflow-hidden\"\n [ngClass]=\"cardClass\"\n [title]=\"title\"\n>\n <div class=\"flex flex-col justify-between flex-1 min-w-0\">\n <div class=\"gn-ui-card-title\">\n {{ link.description || link.name }}\n </div>\n <div class=\"gn-ui-card-detail\">\n {{ link.name }}\n </div>\n <p *ngIf=\"!link.name && !link.description\" class=\"gn-ui-card-title\">\n {{ link.url }}\n </p>\n <div class=\"pt-1\">\n <span\n class=\"inline-flex items-center justify-center px-2 py-1 text-13 font-medium leading-none text-white rounded transition-opacity opacity-70 group-hover:opacity-100\"\n [style.background-color]=\"getLinkColor(link)\"\n data-cy=\"download-format\"\n >{{\n getLinkFormat(link) || ('downloads.format.unknown' | translate)\n }}</span\n >\n </div>\n </div>\n <div\n class=\"flex min-w-[32px]\"\n [ngClass]=\"size === 'S' ? 'items-end' : 'items-center'\"\n >\n <div class=\"gn-ui-card-icon\">\n <ng-icon\n class=\"inline-block card-icon align-middle\"\n name=\"matOpenInNew\"\n ></ng-icon>\n </div>\n </div>\n</a>\n" }]
60
+ ], template: "<ng-container *ngIf=\"isDatabase; else clickableLink\">\n <div [ngClass]=\"cardClass\" [title]=\"title\">\n <ng-container *ngTemplateOutlet=\"cardContent\"></ng-container>\n <div\n class=\"flex min-w-[32px]\"\n [ngClass]=\"size === 'S' ? 'items-end' : 'items-center'\"\n >\n <div\n class=\"gn-ui-card-icon\"\n [title]=\"'record.metadata.link.postgis.tooltip' | translate\"\n >\n <ng-icon\n class=\"inline-block card-icon align-middle\"\n name=\"iconoirDatabase\"\n ></ng-icon>\n </div>\n </div>\n </div>\n</ng-container>\n\n<ng-template #clickableLink>\n <a [href]=\"link.url\" target=\"_blank\" [ngClass]=\"cardClass\" [title]=\"title\">\n <ng-container *ngTemplateOutlet=\"cardContent\"></ng-container>\n <div\n class=\"flex min-w-[32px]\"\n [ngClass]=\"size === 'S' ? 'items-end' : 'items-center'\"\n >\n <div class=\"gn-ui-card-icon\">\n <ng-icon\n class=\"inline-block card-icon align-middle\"\n name=\"matOpenInNew\"\n ></ng-icon>\n </div>\n </div>\n </a>\n</ng-template>\n<ng-template #cardContent>\n <div class=\"flex flex-col justify-between flex-1 min-w-0\">\n <div class=\"gn-ui-card-title\">\n {{ link.description || link.name }}\n </div>\n <div class=\"gn-ui-card-detail\">\n <ng-container *ngIf=\"isDatabase\">\n {{ 'record.metadata.link.postgis.table' | translate }}\n </ng-container>\n {{ link.name }}\n </div>\n <p *ngIf=\"!link.name && !link.description\" class=\"gn-ui-card-title\">\n {{ link.url }}\n </p>\n <div class=\"pt-1\">\n <span\n class=\"inline-flex items-center justify-center px-2 py-1 text-13 font-medium leading-none text-white rounded transition-opacity opacity-70 group-hover:opacity-100\"\n [style.background-color]=\"getLinkColor(link)\"\n data-cy=\"download-format\"\n >\n {{ getLinkFormat(link) || ('downloads.format.unknown' | translate) }}\n </span>\n </div>\n </div>\n</ng-template>\n" }]
54
61
  }], propDecorators: { link: [{
55
62
  type: Input
56
63
  }], size: [{
57
64
  type: Input
58
65
  }] } });
59
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXh0ZXJuYWwtbGluay1jYXJkLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvdWkvZWxlbWVudHMvc3JjL2xpYi9leHRlcm5hbC1saW5rLWNhcmQvZXh0ZXJuYWwtbGluay1jYXJkLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvdWkvZWxlbWVudHMvc3JjL2xpYi9leHRlcm5hbC1saW5rLWNhcmQvZXh0ZXJuYWwtbGluay1jYXJkLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLE1BQU0sZUFBZSxDQUFBO0FBRXpFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQTtBQUM5QyxPQUFPLEVBQ0wsZUFBZSxFQUNmLFlBQVksRUFDWixvQkFBb0IsR0FDckIsTUFBTSxnQkFBZ0IsQ0FBQTtBQUN2QixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sbUNBQW1DLENBQUE7QUFDaEUsT0FBTyxFQUFFLGFBQWEsRUFBRSxhQUFhLEVBQUUsTUFBTSx3Q0FBd0MsQ0FBQTtBQUNyRixPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0scUJBQXFCLENBQUE7OztBQWlCbkQsTUFBTSxPQUFPLHlCQUF5QjtJQWR0QztRQWlCbUIsaUJBQVksR0FBNkI7WUFDeEQsQ0FBQyxFQUFFLHdCQUF3QjtZQUMzQixDQUFDLEVBQUUsd0JBQXdCO1lBQzNCLENBQUMsRUFBRSxrQkFBa0I7WUFDckIsRUFBRSxFQUFFLHlCQUF5QjtTQUM5QixDQUFBO1FBU0QsY0FBUyxHQUFHLEVBQUUsQ0FBQTtLQWdCZjtJQXZCQyxJQUFhLElBQUksQ0FBQyxLQUFlO1FBQy9CLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFBO1FBQ2xCLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsQ0FBQTtJQUMzQyxDQUFDO0lBQ0QsSUFBSSxJQUFJO1FBQ04sT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFBO0lBQ25CLENBQUM7SUFHRCxJQUFJLEtBQUs7UUFDUCxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7WUFDNUMsT0FBTyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxNQUFNLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUE7UUFDdkQsQ0FBQztRQUNELE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLElBQUksRUFBRSxDQUFBO0lBQ3RELENBQUM7SUFFRCxhQUFhLENBQUMsSUFBUztRQUNyQixPQUFPLGFBQWEsQ0FBQyxJQUFJLENBQUMsQ0FBQTtJQUM1QixDQUFDO0lBRUQsWUFBWSxDQUFDLElBQVM7UUFDcEIsT0FBTyxhQUFhLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUE7SUFDM0MsQ0FBQzsrR0FoQ1UseUJBQXlCO21HQUF6Qix5QkFBeUIsK0dBUHpCO1lBQ1QsWUFBWSxDQUFDO2dCQUNYLFlBQVk7YUFDYixDQUFDO1lBQ0Ysb0JBQW9CLENBQUMsRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLENBQUM7U0FDeEMsMEJDekJILGt3Q0F3Q0EseUREckJZLFlBQVksaU9BQUUsZUFBZSx3R0FBRSxhQUFhOzs0RkFRM0MseUJBQXlCO2tCQWRyQyxTQUFTOytCQUNFLDBCQUEwQixtQkFHbkIsdUJBQXVCLENBQUMsTUFBTSxjQUNuQyxJQUFJLFdBQ1AsQ0FBQyxZQUFZLEVBQUUsZUFBZSxFQUFFLGFBQWEsQ0FBQyxhQUM1Qzt3QkFDVCxZQUFZLENBQUM7NEJBQ1gsWUFBWTt5QkFDYixDQUFDO3dCQUNGLG9CQUFvQixDQUFDLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxDQUFDO3FCQUN4Qzs4QkFJUSxJQUFJO3NCQUFaLEtBQUs7Z0JBUU8sSUFBSTtzQkFBaEIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDb21wb25lbnQsIElucHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSdcbmltcG9ydCB7IERhdGFzZXRPbmxpbmVSZXNvdXJjZSB9IGZyb20gJy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY29tbW9uL2RvbWFpbi9zcmMvbGliL21vZGVsL3JlY29yZCdcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbidcbmltcG9ydCB7XG4gIE5nSWNvbkNvbXBvbmVudCxcbiAgcHJvdmlkZUljb25zLFxuICBwcm92aWRlTmdJY29uc0NvbmZpZyxcbn0gZnJvbSAnQG5nLWljb25zL2NvcmUnXG5pbXBvcnQgeyBtYXRPcGVuSW5OZXcgfSBmcm9tICdAbmctaWNvbnMvbWF0ZXJpYWwtaWNvbnMvYmFzZWxpbmUnXG5pbXBvcnQgeyBnZXRCYWRnZUNvbG9yLCBnZXRGaWxlRm9ybWF0IH0gZnJvbSAnLi4vLi4vLi4vLi4vLi4vLi4vbGlicy91dGlsL3NoYXJlZC9zcmMnXG5pbXBvcnQgeyBUcmFuc2xhdGVQaXBlIH0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSdcblxudHlwZSBDYXJkU2l6ZSA9ICdMJyB8ICdNJyB8ICdTJyB8ICdYUydcbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2duLXVpLWV4dGVybmFsLWxpbmstY2FyZCcsXG4gIHRlbXBsYXRlVXJsOiAnLi9leHRlcm5hbC1saW5rLWNhcmQuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9leHRlcm5hbC1saW5rLWNhcmQuY29tcG9uZW50LmNzcyddLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW0NvbW1vbk1vZHVsZSwgTmdJY29uQ29tcG9uZW50LCBUcmFuc2xhdGVQaXBlXSxcbiAgcHJvdmlkZXJzOiBbXG4gICAgcHJvdmlkZUljb25zKHtcbiAgICAgIG1hdE9wZW5Jbk5ldyxcbiAgICB9KSxcbiAgICBwcm92aWRlTmdJY29uc0NvbmZpZyh7IHNpemU6ICcxLjVlbScgfSksXG4gIF0sXG59KVxuZXhwb3J0IGNsYXNzIEV4dGVybmFsTGlua0NhcmRDb21wb25lbnQge1xuICBwcml2YXRlIF9zaXplOiBDYXJkU2l6ZVxuICBASW5wdXQoKSBsaW5rOiBEYXRhc2V0T25saW5lUmVzb3VyY2VcbiAgcHJpdmF0ZSByZWFkb25seSBzaXplQ2xhc3NNYXA6IFJlY29yZDxDYXJkU2l6ZSwgc3RyaW5nPiA9IHtcbiAgICBMOiAnZ24tdWktY2FyZC1sIHB5LTIgcHgtNScsXG4gICAgTTogJ2duLXVpLWNhcmQtbSBweS0yIHB4LTUnLFxuICAgIFM6ICdnbi11aS1jYXJkLXMgcC00JyxcbiAgICBYUzogJ2duLXVpLWNhcmQteHMgcHktMiBweC01JyxcbiAgfVxuXG4gIEBJbnB1dCgpIHNldCBzaXplKHZhbHVlOiBDYXJkU2l6ZSkge1xuICAgIHRoaXMuX3NpemUgPSB2YWx1ZVxuICAgIHRoaXMuY2FyZENsYXNzID0gdGhpcy5zaXplQ2xhc3NNYXBbdmFsdWVdXG4gIH1cbiAgZ2V0IHNpemUoKTogQ2FyZFNpemUge1xuICAgIHJldHVybiB0aGlzLl9zaXplXG4gIH1cbiAgY2FyZENsYXNzID0gJydcblxuICBnZXQgdGl0bGUoKSB7XG4gICAgaWYgKHRoaXMubGluay5uYW1lICYmIHRoaXMubGluay5kZXNjcmlwdGlvbikge1xuICAgICAgcmV0dXJuIGAke3RoaXMubGluay5uYW1lfSB8ICR7dGhpcy5saW5rLmRlc2NyaXB0aW9ufWBcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMubGluay5uYW1lIHx8IHRoaXMubGluay5kZXNjcmlwdGlvbiB8fCAnJ1xuICB9XG5cbiAgZ2V0TGlua0Zvcm1hdChsaW5rOiBhbnkpIHtcbiAgICByZXR1cm4gZ2V0RmlsZUZvcm1hdChsaW5rKVxuICB9XG5cbiAgZ2V0TGlua0NvbG9yKGxpbms6IGFueSkge1xuICAgIHJldHVybiBnZXRCYWRnZUNvbG9yKGdldEZpbGVGb3JtYXQobGluaykpXG4gIH1cbn1cbiIsIjxhXG4gIFtocmVmXT1cImxpbmsudXJsXCJcbiAgdGFyZ2V0PVwiX2JsYW5rXCJcbiAgY2xhc3M9XCJncm91cCBmbGV4IGZsZXgtcm93IGp1c3RpZnktYmV0d2VlbiBjYXJkLXNoYWRvdyBjdXJzb3ItcG9pbnRlciByb3VuZGVkIG92ZXJmbG93LWhpZGRlblwiXG4gIFtuZ0NsYXNzXT1cImNhcmRDbGFzc1wiXG4gIFt0aXRsZV09XCJ0aXRsZVwiXG4+XG4gIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtY29sIGp1c3RpZnktYmV0d2VlbiBmbGV4LTEgbWluLXctMFwiPlxuICAgIDxkaXYgY2xhc3M9XCJnbi11aS1jYXJkLXRpdGxlXCI+XG4gICAgICB7eyBsaW5rLmRlc2NyaXB0aW9uIHx8IGxpbmsubmFtZSB9fVxuICAgIDwvZGl2PlxuICAgIDxkaXYgY2xhc3M9XCJnbi11aS1jYXJkLWRldGFpbFwiPlxuICAgICAge3sgbGluay5uYW1lIH19XG4gICAgPC9kaXY+XG4gICAgPHAgKm5nSWY9XCIhbGluay5uYW1lICYmICFsaW5rLmRlc2NyaXB0aW9uXCIgY2xhc3M9XCJnbi11aS1jYXJkLXRpdGxlXCI+XG4gICAgICB7eyBsaW5rLnVybCB9fVxuICAgIDwvcD5cbiAgICA8ZGl2IGNsYXNzPVwicHQtMVwiPlxuICAgICAgPHNwYW5cbiAgICAgICAgY2xhc3M9XCJpbmxpbmUtZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgcHgtMiBweS0xIHRleHQtMTMgZm9udC1tZWRpdW0gbGVhZGluZy1ub25lIHRleHQtd2hpdGUgcm91bmRlZCB0cmFuc2l0aW9uLW9wYWNpdHkgb3BhY2l0eS03MCBncm91cC1ob3ZlcjpvcGFjaXR5LTEwMFwiXG4gICAgICAgIFtzdHlsZS5iYWNrZ3JvdW5kLWNvbG9yXT1cImdldExpbmtDb2xvcihsaW5rKVwiXG4gICAgICAgIGRhdGEtY3k9XCJkb3dubG9hZC1mb3JtYXRcIlxuICAgICAgICA+e3tcbiAgICAgICAgICBnZXRMaW5rRm9ybWF0KGxpbmspIHx8ICgnZG93bmxvYWRzLmZvcm1hdC51bmtub3duJyB8IHRyYW5zbGF0ZSlcbiAgICAgICAgfX08L3NwYW5cbiAgICAgID5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG4gIDxkaXZcbiAgICBjbGFzcz1cImZsZXggbWluLXctWzMycHhdXCJcbiAgICBbbmdDbGFzc109XCJzaXplID09PSAnUycgPyAnaXRlbXMtZW5kJyA6ICdpdGVtcy1jZW50ZXInXCJcbiAgPlxuICAgIDxkaXYgY2xhc3M9XCJnbi11aS1jYXJkLWljb25cIj5cbiAgICAgIDxuZy1pY29uXG4gICAgICAgIGNsYXNzPVwiaW5saW5lLWJsb2NrIGNhcmQtaWNvbiBhbGlnbi1taWRkbGVcIlxuICAgICAgICBuYW1lPVwibWF0T3BlbkluTmV3XCJcbiAgICAgID48L25nLWljb24+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuPC9hPlxuIl19
66
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXh0ZXJuYWwtbGluay1jYXJkLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvdWkvZWxlbWVudHMvc3JjL2xpYi9leHRlcm5hbC1saW5rLWNhcmQvZXh0ZXJuYWwtbGluay1jYXJkLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvdWkvZWxlbWVudHMvc3JjL2xpYi9leHRlcm5hbC1saW5rLWNhcmQvZXh0ZXJuYWwtbGluay1jYXJkLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLE1BQU0sZUFBZSxDQUFBO0FBRXpFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQTtBQUM5QyxPQUFPLEVBQ0wsZUFBZSxFQUNmLFlBQVksRUFDWixvQkFBb0IsR0FDckIsTUFBTSxnQkFBZ0IsQ0FBQTtBQUN2QixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sbUNBQW1DLENBQUE7QUFDaEUsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLG1CQUFtQixDQUFBO0FBQ25ELE9BQU8sRUFBRSxhQUFhLEVBQUUsYUFBYSxFQUFFLE1BQU0sd0NBQXdDLENBQUE7QUFDckYsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHFCQUFxQixDQUFBOzs7QUFrQm5ELE1BQU0sT0FBTyx5QkFBeUI7SUFmdEM7UUFrQm1CLGlCQUFZLEdBQTZCO1lBQ3hELENBQUMsRUFBRSx3QkFBd0I7WUFDM0IsQ0FBQyxFQUFFLHdCQUF3QjtZQUMzQixDQUFDLEVBQUUsa0JBQWtCO1lBQ3JCLEVBQUUsRUFBRSx5QkFBeUI7U0FDOUIsQ0FBQTtRQVNELGNBQVMsR0FBRyxFQUFFLENBQUE7S0F1QmY7SUE5QkMsSUFBYSxJQUFJLENBQUMsS0FBZTtRQUMvQixJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQTtRQUNsQixJQUFJLENBQUMsU0FBUyxHQUFHLDJFQUEyRSxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUE7SUFDeEgsQ0FBQztJQUNELElBQUksSUFBSTtRQUNOLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQTtJQUNuQixDQUFDO0lBR0QsSUFBSSxLQUFLO1FBQ1AsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO1lBQzVDLE9BQU8sR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksTUFBTSxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFBO1FBQ3ZELENBQUM7UUFDRCxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxJQUFJLEVBQUUsQ0FBQTtJQUN0RCxDQUFDO0lBRUQsSUFBSSxVQUFVO1FBQ1osT0FBTyxDQUNMLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxLQUFLLFNBQVM7WUFDNUIsSUFBSSxDQUFDLElBQUksQ0FBQyxxQkFBcUIsS0FBSyxTQUFTLENBQzlDLENBQUE7SUFDSCxDQUFDO0lBRUQsYUFBYSxDQUFDLElBQTJCO1FBQ3ZDLE9BQU8sYUFBYSxDQUFDLElBQUksQ0FBQyxDQUFBO0lBQzVCLENBQUM7SUFFRCxZQUFZLENBQUMsSUFBMkI7UUFDdEMsT0FBTyxhQUFhLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUE7SUFDM0MsQ0FBQzsrR0F2Q1UseUJBQXlCO21HQUF6Qix5QkFBeUIsK0dBUnpCO1lBQ1QsWUFBWSxDQUFDO2dCQUNYLFlBQVk7Z0JBQ1osZUFBZTthQUNoQixDQUFDO1lBQ0Ysb0JBQW9CLENBQUMsRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLENBQUM7U0FDeEMsMEJDM0JILGdpRUE2REEseUREekNZLFlBQVksd1lBQUUsZUFBZSx3R0FBRSxhQUFhOzs0RkFTM0MseUJBQXlCO2tCQWZyQyxTQUFTOytCQUNFLDBCQUEwQixtQkFHbkIsdUJBQXVCLENBQUMsTUFBTSxjQUNuQyxJQUFJLFdBQ1AsQ0FBQyxZQUFZLEVBQUUsZUFBZSxFQUFFLGFBQWEsQ0FBQyxhQUM1Qzt3QkFDVCxZQUFZLENBQUM7NEJBQ1gsWUFBWTs0QkFDWixlQUFlO3lCQUNoQixDQUFDO3dCQUNGLG9CQUFvQixDQUFDLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxDQUFDO3FCQUN4Qzs4QkFJUSxJQUFJO3NCQUFaLEtBQUs7Z0JBUU8sSUFBSTtzQkFBaEIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDb21wb25lbnQsIElucHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSdcbmltcG9ydCB7IERhdGFzZXRPbmxpbmVSZXNvdXJjZSB9IGZyb20gJy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY29tbW9uL2RvbWFpbi9zcmMvbGliL21vZGVsL3JlY29yZCdcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbidcbmltcG9ydCB7XG4gIE5nSWNvbkNvbXBvbmVudCxcbiAgcHJvdmlkZUljb25zLFxuICBwcm92aWRlTmdJY29uc0NvbmZpZyxcbn0gZnJvbSAnQG5nLWljb25zL2NvcmUnXG5pbXBvcnQgeyBtYXRPcGVuSW5OZXcgfSBmcm9tICdAbmctaWNvbnMvbWF0ZXJpYWwtaWNvbnMvYmFzZWxpbmUnXG5pbXBvcnQgeyBpY29ub2lyRGF0YWJhc2UgfSBmcm9tICdAbmctaWNvbnMvaWNvbm9pcidcbmltcG9ydCB7IGdldEJhZGdlQ29sb3IsIGdldEZpbGVGb3JtYXQgfSBmcm9tICcuLi8uLi8uLi8uLi8uLi8uLi9saWJzL3V0aWwvc2hhcmVkL3NyYydcbmltcG9ydCB7IFRyYW5zbGF0ZVBpcGUgfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJ1xuXG50eXBlIENhcmRTaXplID0gJ0wnIHwgJ00nIHwgJ1MnIHwgJ1hTJ1xuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnZ24tdWktZXh0ZXJuYWwtbGluay1jYXJkJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2V4dGVybmFsLWxpbmstY2FyZC5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2V4dGVybmFsLWxpbmstY2FyZC5jb21wb25lbnQuY3NzJ10sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlLCBOZ0ljb25Db21wb25lbnQsIFRyYW5zbGF0ZVBpcGVdLFxuICBwcm92aWRlcnM6IFtcbiAgICBwcm92aWRlSWNvbnMoe1xuICAgICAgbWF0T3BlbkluTmV3LFxuICAgICAgaWNvbm9pckRhdGFiYXNlLFxuICAgIH0pLFxuICAgIHByb3ZpZGVOZ0ljb25zQ29uZmlnKHsgc2l6ZTogJzEuNWVtJyB9KSxcbiAgXSxcbn0pXG5leHBvcnQgY2xhc3MgRXh0ZXJuYWxMaW5rQ2FyZENvbXBvbmVudCB7XG4gIHByaXZhdGUgX3NpemU6IENhcmRTaXplXG4gIEBJbnB1dCgpIGxpbms6IERhdGFzZXRPbmxpbmVSZXNvdXJjZVxuICBwcml2YXRlIHJlYWRvbmx5IHNpemVDbGFzc01hcDogUmVjb3JkPENhcmRTaXplLCBzdHJpbmc+ID0ge1xuICAgIEw6ICdnbi11aS1jYXJkLWwgcHktMiBweC01JyxcbiAgICBNOiAnZ24tdWktY2FyZC1tIHB5LTIgcHgtNScsXG4gICAgUzogJ2duLXVpLWNhcmQtcyBwLTQnLFxuICAgIFhTOiAnZ24tdWktY2FyZC14cyBweS0yIHB4LTUnLFxuICB9XG5cbiAgQElucHV0KCkgc2V0IHNpemUodmFsdWU6IENhcmRTaXplKSB7XG4gICAgdGhpcy5fc2l6ZSA9IHZhbHVlXG4gICAgdGhpcy5jYXJkQ2xhc3MgPSBgZ3JvdXAgZmxleCBmbGV4LXJvdyBqdXN0aWZ5LWJldHdlZW4gY2FyZC1zaGFkb3cgcm91bmRlZCBvdmVyZmxvdy1oaWRkZW4gJHt0aGlzLnNpemVDbGFzc01hcFt2YWx1ZV19YFxuICB9XG4gIGdldCBzaXplKCk6IENhcmRTaXplIHtcbiAgICByZXR1cm4gdGhpcy5fc2l6ZVxuICB9XG4gIGNhcmRDbGFzcyA9ICcnXG5cbiAgZ2V0IHRpdGxlKCkge1xuICAgIGlmICh0aGlzLmxpbmsubmFtZSAmJiB0aGlzLmxpbmsuZGVzY3JpcHRpb24pIHtcbiAgICAgIHJldHVybiBgJHt0aGlzLmxpbmsubmFtZX0gfCAke3RoaXMubGluay5kZXNjcmlwdGlvbn1gXG4gICAgfVxuICAgIHJldHVybiB0aGlzLmxpbmsubmFtZSB8fCB0aGlzLmxpbmsuZGVzY3JpcHRpb24gfHwgJydcbiAgfVxuXG4gIGdldCBpc0RhdGFiYXNlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAoXG4gICAgICB0aGlzLmxpbmsudHlwZSA9PT0gJ3NlcnZpY2UnICYmXG4gICAgICB0aGlzLmxpbmsuYWNjZXNzU2VydmljZVByb3RvY29sID09PSAncG9zdGdpcydcbiAgICApXG4gIH1cblxuICBnZXRMaW5rRm9ybWF0KGxpbms6IERhdGFzZXRPbmxpbmVSZXNvdXJjZSk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGdldEZpbGVGb3JtYXQobGluaylcbiAgfVxuXG4gIGdldExpbmtDb2xvcihsaW5rOiBEYXRhc2V0T25saW5lUmVzb3VyY2UpOiBzdHJpbmcge1xuICAgIHJldHVybiBnZXRCYWRnZUNvbG9yKGdldEZpbGVGb3JtYXQobGluaykpXG4gIH1cbn1cbiIsIjxuZy1jb250YWluZXIgKm5nSWY9XCJpc0RhdGFiYXNlOyBlbHNlIGNsaWNrYWJsZUxpbmtcIj5cbiAgPGRpdiBbbmdDbGFzc109XCJjYXJkQ2xhc3NcIiBbdGl0bGVdPVwidGl0bGVcIj5cbiAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiY2FyZENvbnRlbnRcIj48L25nLWNvbnRhaW5lcj5cbiAgICA8ZGl2XG4gICAgICBjbGFzcz1cImZsZXggbWluLXctWzMycHhdXCJcbiAgICAgIFtuZ0NsYXNzXT1cInNpemUgPT09ICdTJyA/ICdpdGVtcy1lbmQnIDogJ2l0ZW1zLWNlbnRlcidcIlxuICAgID5cbiAgICAgIDxkaXZcbiAgICAgICAgY2xhc3M9XCJnbi11aS1jYXJkLWljb25cIlxuICAgICAgICBbdGl0bGVdPVwiJ3JlY29yZC5tZXRhZGF0YS5saW5rLnBvc3RnaXMudG9vbHRpcCcgfCB0cmFuc2xhdGVcIlxuICAgICAgPlxuICAgICAgICA8bmctaWNvblxuICAgICAgICAgIGNsYXNzPVwiaW5saW5lLWJsb2NrIGNhcmQtaWNvbiBhbGlnbi1taWRkbGVcIlxuICAgICAgICAgIG5hbWU9XCJpY29ub2lyRGF0YWJhc2VcIlxuICAgICAgICA+PC9uZy1pY29uPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuPC9uZy1jb250YWluZXI+XG5cbjxuZy10ZW1wbGF0ZSAjY2xpY2thYmxlTGluaz5cbiAgPGEgW2hyZWZdPVwibGluay51cmxcIiB0YXJnZXQ9XCJfYmxhbmtcIiBbbmdDbGFzc109XCJjYXJkQ2xhc3NcIiBbdGl0bGVdPVwidGl0bGVcIj5cbiAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiY2FyZENvbnRlbnRcIj48L25nLWNvbnRhaW5lcj5cbiAgICA8ZGl2XG4gICAgICBjbGFzcz1cImZsZXggbWluLXctWzMycHhdXCJcbiAgICAgIFtuZ0NsYXNzXT1cInNpemUgPT09ICdTJyA/ICdpdGVtcy1lbmQnIDogJ2l0ZW1zLWNlbnRlcidcIlxuICAgID5cbiAgICAgIDxkaXYgY2xhc3M9XCJnbi11aS1jYXJkLWljb25cIj5cbiAgICAgICAgPG5nLWljb25cbiAgICAgICAgICBjbGFzcz1cImlubGluZS1ibG9jayBjYXJkLWljb24gYWxpZ24tbWlkZGxlXCJcbiAgICAgICAgICBuYW1lPVwibWF0T3BlbkluTmV3XCJcbiAgICAgICAgPjwvbmctaWNvbj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L2E+XG48L25nLXRlbXBsYXRlPlxuPG5nLXRlbXBsYXRlICNjYXJkQ29udGVudD5cbiAgPGRpdiBjbGFzcz1cImZsZXggZmxleC1jb2wganVzdGlmeS1iZXR3ZWVuIGZsZXgtMSBtaW4tdy0wXCI+XG4gICAgPGRpdiBjbGFzcz1cImduLXVpLWNhcmQtdGl0bGVcIj5cbiAgICAgIHt7IGxpbmsuZGVzY3JpcHRpb24gfHwgbGluay5uYW1lIH19XG4gICAgPC9kaXY+XG4gICAgPGRpdiBjbGFzcz1cImduLXVpLWNhcmQtZGV0YWlsXCI+XG4gICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiaXNEYXRhYmFzZVwiPlxuICAgICAgICB7eyAncmVjb3JkLm1ldGFkYXRhLmxpbmsucG9zdGdpcy50YWJsZScgfCB0cmFuc2xhdGUgfX1cbiAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAge3sgbGluay5uYW1lIH19XG4gICAgPC9kaXY+XG4gICAgPHAgKm5nSWY9XCIhbGluay5uYW1lICYmICFsaW5rLmRlc2NyaXB0aW9uXCIgY2xhc3M9XCJnbi11aS1jYXJkLXRpdGxlXCI+XG4gICAgICB7eyBsaW5rLnVybCB9fVxuICAgIDwvcD5cbiAgICA8ZGl2IGNsYXNzPVwicHQtMVwiPlxuICAgICAgPHNwYW5cbiAgICAgICAgY2xhc3M9XCJpbmxpbmUtZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgcHgtMiBweS0xIHRleHQtMTMgZm9udC1tZWRpdW0gbGVhZGluZy1ub25lIHRleHQtd2hpdGUgcm91bmRlZCB0cmFuc2l0aW9uLW9wYWNpdHkgb3BhY2l0eS03MCBncm91cC1ob3ZlcjpvcGFjaXR5LTEwMFwiXG4gICAgICAgIFtzdHlsZS5iYWNrZ3JvdW5kLWNvbG9yXT1cImdldExpbmtDb2xvcihsaW5rKVwiXG4gICAgICAgIGRhdGEtY3k9XCJkb3dubG9hZC1mb3JtYXRcIlxuICAgICAgPlxuICAgICAgICB7eyBnZXRMaW5rRm9ybWF0KGxpbmspIHx8ICgnZG93bmxvYWRzLmZvcm1hdC51bmtub3duJyB8IHRyYW5zbGF0ZSkgfX1cbiAgICAgIDwvc3Bhbj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG48L25nLXRlbXBsYXRlPlxuIl19
@@ -89,7 +89,7 @@ export class MetadataInfoComponent {
89
89
  return this.dateService.formatDateTime(date);
90
90
  }
91
91
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: MetadataInfoComponent, deps: [{ token: i1.DateService }], target: i0.ɵɵFactoryTarget.Component }); }
92
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: MetadataInfoComponent, isStandalone: true, selector: "gn-ui-metadata-info", inputs: { metadata: "metadata", incomplete: "incomplete" }, outputs: { keyword: "keyword" }, ngImport: i0, template: "<div class=\"mb-6 md-description sm:mb-4 sm:pr-16\">\n <gn-ui-content-ghost\n ghostClass=\"h-[178px]\"\n [showContent]=\"fieldReady('abstract')\"\n >\n <gn-ui-max-lines [maxLines]=\"6\" *ngIf=\"metadata.abstract\">\n <div class=\"mb-6\">\n <gn-ui-markdown-parser\n [textContent]=\"metadata.abstract\"\n ></gn-ui-markdown-parser>\n </div>\n </gn-ui-max-lines>\n </gn-ui-content-ghost>\n\n <p\n class=\"mt-6 mb-3 font-medium text-black text-sm\"\n translate\n *ngIf=\"!fieldReady('keywords') || metadata.keywords?.length\"\n >\n record.metadata.keywords\n </p>\n\n <gn-ui-content-ghost\n ghostClass=\"h-[31px] w-3/4\"\n [showContent]=\"fieldReady('keywords')\"\n >\n <div *ngIf=\"metadata.keywords?.length\">\n <div class=\"metadata-info-keywords sm:pb-4 flex flex-wrap gap-2\">\n <gn-ui-badge\n class=\"inline-block lowercase\"\n (click)=\"onKeywordClick(keyword)\"\n [clickable]=\"true\"\n *ngFor=\"let keyword of metadata.keywords\"\n >{{ keyword.label }}</gn-ui-badge\n >\n </div>\n </div>\n </gn-ui-content-ghost>\n</div>\n\n<gn-ui-expandable-panel\n *ngIf=\"\n metadata.licenses ||\n metadata.legalConstraints ||\n metadata.securityConstraints ||\n metadata.otherConstraints\n \"\n [title]=\"'record.metadata.usage' | translate\"\n data-test=\"usage-panel\"\n>\n <div class=\"flex flex-col gap-[10px] mr-4 py-[12px] rounded text-gray-900\">\n <ng-container *ngFor=\"let license of licenses\">\n <div *ngIf=\"license.url; else noUrl\" class=\"text-primary\">\n <a\n [href]=\"license.url\"\n target=\"_blank\"\n class=\"cursor-pointer hover:underline transition-all\"\n >\n {{ license.text }}\n <ng-icon\n class=\"!w-[12px] !h-[12px] !text-[12px] opacity-75 shrink-0\"\n name=\"matOpenInNew\"\n ></ng-icon>\n </a>\n </div>\n <ng-template #noUrl>\n <div class=\"text-primary\" gnUiLinkify>\n {{ license.text }}\n </div>\n </ng-template>\n </ng-container>\n <ng-container *ngIf=\"legalConstraints.length\">\n <div class=\"mb-6\">\n <gn-ui-markdown-parser\n *ngFor=\"let constraint of legalConstraints\"\n [textContent]=\"constraint\"\n >\n </gn-ui-markdown-parser>\n </div>\n </ng-container>\n <ng-container *ngIf=\"otherConstraints.length\">\n <div gnUiLinkify *ngFor=\"let constraint of otherConstraints\">\n <span\n translate\n class=\"font-medium text-black text-sm mb-[2px] mt-[16px]\"\n >\n record.metadata.otherConstraints\n </span>\n <div class=\"mb-6\">\n <gn-ui-markdown-parser [textContent]=\"constraint\">\n </gn-ui-markdown-parser>\n </div>\n </div>\n </ng-container>\n\n <span class=\"noUsage\" *ngIf=\"!hasUsage\">\n {{ 'record.metadata.noUsage' | translate }}\n </span>\n </div>\n</gn-ui-expandable-panel>\n<gn-ui-expandable-panel\n *ngIf=\"\n (metadata.kind === 'dataset' && metadata.lineage) ||\n metadata.resourceUpdated ||\n metadata.updateFrequency ||\n (metadata.kind === 'dataset' && metadata.status)\n \"\n [title]=\"'record.metadata.details' | translate\"\n data-test=\"details-panel\"\n>\n <div *ngIf=\"metadata.lineage\" class=\"text-gray-900 flex flex-col mt-4 gap-2\">\n <p class=\"whitespace-pre-line break-words text-gray-900\" gnUiLinkify>\n {{ metadata.lineage }}\n </p>\n </div>\n <div class=\"flex flex-row gap-6 mt-5 mb-8\" *ngIf=\"resourceContact\">\n <div\n *ngIf=\"resourceContact.organization?.logoUrl?.href\"\n class=\"flex items-center justify-center border-solid border border-gray-300 rounded-md bg-white h-32 overflow-hidden\"\n >\n <gn-ui-thumbnail\n class=\"relative h-full w-full\"\n [thumbnailUrl]=\"resourceContact.organization.logoUrl.href\"\n fit=\"contain\"\n ></gn-ui-thumbnail>\n </div>\n <div class=\"flex flex-col gap-1\">\n <p class=\"text-sm font-medium\" translate>record.metadata.producer</p>\n <div\n class=\"text-primary font-title text-21 mr-2 cursor-pointer hover:underline\"\n data-cy=\"organization-name\"\n >\n {{ resourceContact.organization?.name }}\n </div>\n <div *ngIf=\"resourceContact.organization?.website\">\n <a\n [href]=\"resourceContact.organization.website\"\n target=\"_blank\"\n class=\"contact-website text-primary text-sm cursor-pointer hover:underline transition-all\"\n >{{ resourceContact.organization.website }}\n <ng-icon\n class=\"!w-[12px] !h-[12px] !text-[12px] opacity-75 shrink-0\"\n name=\"matOpenInNew\"\n ></ng-icon>\n </a>\n </div>\n <div class=\"mt-4\" *ngIf=\"resourceContact.email\">\n <div class=\"flex\">\n <ng-icon\n class=\"!w-5 !h-5 !text-[20px] opacity-75 shrink-0\"\n name=\"matMailOutline\"\n ></ng-icon>\n <a\n *ngIf=\"resourceContact.email\"\n [href]=\"'mailto:' + resourceContact.email\"\n class=\"text-sm hover:underline ml-2\"\n target=\"_blank\"\n data-cy=\"contact-email\"\n >{{ resourceContact?.email }}</a\n >\n </div>\n </div>\n </div>\n </div>\n <div\n class=\"py-6 px-6 rounded bg-gray-100 grid grid-cols-2 gap-y-6 gap-x-[20px] text-gray-700\"\n >\n <div *ngIf=\"metadata.resourceCreated\">\n <p class=\"text-sm\" translate>record.metadata.creation</p>\n <p class=\"text-primary font-medium mt-1\">\n {{ formatDate(metadata.resourceCreated) }}\n </p>\n </div>\n <div *ngIf=\"metadata.resourcePublished\">\n <p class=\"text-sm\" translate>record.metadata.publication</p>\n <p class=\"text-primary font-medium mt-1\">\n {{ formatDate(metadata.resourcePublished) }}\n </p>\n </div>\n <div *ngIf=\"updateFrequency\">\n <p class=\"text-sm\" translate>record.metadata.updateFrequency</p>\n <p\n class=\"text-primary font-medium mt-1 updateFrequency\"\n translate\n [translateParams]=\"{ count: updatedTimes }\"\n >\n {{ updateFrequency }}\n </p>\n </div>\n <div *ngIf=\"metadata.otherLanguages?.length\">\n <p class=\"text-sm mb-1\" translate>record.metadata.languages</p>\n <div class=\"flex flex-row gap-1 flex-wrap\">\n <p\n class=\"text-primary font-medium\"\n translate\n *ngFor=\"let language of metadata.otherLanguages\"\n >\n language.{{ language }}\n </p>\n </div>\n </div>\n <div *ngIf=\"temporalExtent\">\n <p class=\"text-sm\" translate>record.metadata.temporalExtent</p>\n <div class=\"flex flex-row gap-1 mb-1 text-primary font-medium\">\n <p\n *ngIf=\"temporalExtent.start && temporalExtent.end\"\n translate\n [translateParams]=\"{\n start: temporalExtent.start,\n end: temporalExtent.end,\n }\"\n >\n record.metadata.temporalExtent.fromDateToDate\n </p>\n <p\n *ngIf=\"temporalExtent.start && !temporalExtent.end\"\n translate\n [translateParams]=\"{ start: temporalExtent.start }\"\n >\n record.metadata.temporalExtent.sinceDate\n </p>\n <p\n *ngIf=\"!temporalExtent.start && temporalExtent.end\"\n translate\n [translateParams]=\"{ end: temporalExtent.end }\"\n >\n record.metadata.temporalExtent.untilDate\n </p>\n </div>\n </div>\n </div>\n</gn-ui-expandable-panel>\n<gn-ui-expandable-panel\n *ngIf=\"\n metadata.kind !== 'dataset' &&\n metadata.spatialExtents &&\n metadata.spatialExtents.length\n \"\n [title]=\"'service.metadata.spatialExtent' | translate\"\n data-test=\"spatial-extent-panel\"\n>\n <gn-ui-spatial-extent\n class=\"flex h-[271px] w-full rounded-lg border border-gray-100 mt-3 mb-6\"\n [spatialExtents]=\"metadata.spatialExtents\"\n ></gn-ui-spatial-extent>\n</gn-ui-expandable-panel>\n<gn-ui-expandable-panel\n *ngIf=\"metadata.landingPage\"\n [title]=\"'service.metadata.other' | translate\"\n data-test=\"other-panel\"\n>\n <div class=\"flex flex-col gap-4 mr-4 py-5 rounded text-gray-700\">\n <div *ngIf=\"metadata.recordUpdated\">\n <p class=\"text-sm\" translate>record.metadata.updatedOn</p>\n <p class=\"text-primary font-medium\">\n {{ metadata.recordUpdated && formatDateTime(metadata.recordUpdated) }}\n </p>\n </div>\n <div *ngIf=\"metadata.landingPage\">\n <p class=\"text-sm\" translate>record.metadata.sheet</p>\n <p class=\"text-primary font-medium\" translate>\n <a [href]=\"metadata.landingPage\" target=\"_blank\">\n <span class=\"break-all\" gnUiLinkify>{{ metadata.landingPage }}</span>\n </a>\n </p>\n </div>\n <div *ngIf=\"metadata.ownerOrganization\">\n <p class=\"text-sm\" translate>record.metadata.owner</p>\n <p class=\"text-primary font-medium\">\n {{ metadata.ownerOrganization.name }}\n </p>\n </div>\n <div *ngIf=\"metadata.uniqueIdentifier\">\n <p class=\"text-sm\" translate>record.metadata.uniqueId</p>\n <div class=\"flex flex-row content-align items-end gap-1\">\n <gn-ui-copy-text-button\n [text]=\"metadata.uniqueIdentifier\"\n [tooltipText]=\"'tooltip.id.copy' | translate\"\n [displayText]=\"false\"\n ></gn-ui-copy-text-button>\n <p class=\"text-primary font-medium\">\n {{ metadata.uniqueIdentifier }}\n </p>\n </div>\n </div>\n <div *ngIf=\"metadata.topics?.length\">\n <p class=\"text-sm mb-1\" translate>record.metadata.topics</p>\n <div class=\"sm:pb-4 sm:pr-16\">\n <gn-ui-badge\n [clickable]=\"false\"\n class=\"inline-block mr-2 mb-2 lowercase\"\n *ngFor=\"let topic of metadata.topics\"\n >{{ topic }}</gn-ui-badge\n >\n </div>\n </div>\n </div>\n</gn-ui-expandable-panel>\n", styles: [".md-description ::ng-deep a{@apply underline text-blue-600 hover:text-blue-800;}.info-grid>:nth-last-child(n+3){padding-bottom:10px;@apply border-b border-gray-300;}:host ::ng-deep gn-ui-copy-text-button button ng-icon{transform:scale(.8)}:host{--gn-ui-badge-background-color: var(--color-primary-white);--gn-ui-badge-text-color: var(--color-primary-darkest)}:host .metadata-info-keywords ::ng-deep gn-ui-badge:hover{--gn-ui-badge-text-color: white}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: TranslateDirective, selector: "[translate],[ngx-translate]", inputs: ["translate", "translateParams"] }, { kind: "pipe", type: TranslatePipe, name: "translate" }, { kind: "component", type: MarkdownParserComponent, selector: "gn-ui-markdown-parser", inputs: ["textContent", "whitoutStyles"] }, { kind: "component", type: ExpandablePanelComponent, selector: "gn-ui-expandable-panel", inputs: ["title", "iconColor", "collapsed"] }, { kind: "component", type: BadgeComponent, selector: "gn-ui-badge", inputs: ["clickable", "removable"], outputs: ["badgeRemoveClicked"] }, { kind: "component", type: ContentGhostComponent, selector: "gn-ui-content-ghost", inputs: ["showContent", "ghostClass"] }, { kind: "component", type: ThumbnailComponent, selector: "gn-ui-thumbnail", inputs: ["thumbnailUrl", "fit"], outputs: ["placeholderShown"] }, { kind: "component", type: MaxLinesComponent, selector: "gn-ui-max-lines", inputs: ["maxLines"] }, { kind: "component", type: CopyTextButtonComponent, selector: "gn-ui-copy-text-button", inputs: ["text", "tooltipText", "displayText", "rows"] }, { kind: "component", type: NgIcon, selector: "ng-icon", inputs: ["name", "svg", "size", "strokeWidth", "color"] }, { kind: "directive", type: GnUiLinkifyDirective, selector: "[gnUiLinkify]" }, { kind: "component", type: SpatialExtentComponent, selector: "gn-ui-spatial-extent", inputs: ["spatialExtents"] }], viewProviders: [
92
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: MetadataInfoComponent, isStandalone: true, selector: "gn-ui-metadata-info", inputs: { metadata: "metadata", incomplete: "incomplete" }, outputs: { keyword: "keyword" }, ngImport: i0, template: "<div class=\"mb-6 md-description sm:mb-4 sm:pr-16\">\n <gn-ui-content-ghost\n ghostClass=\"h-[178px]\"\n [showContent]=\"fieldReady('abstract')\"\n >\n <gn-ui-max-lines [maxLines]=\"6\" *ngIf=\"metadata.abstract\">\n <div class=\"mb-6\">\n <gn-ui-markdown-parser\n [textContent]=\"metadata.abstract\"\n ></gn-ui-markdown-parser>\n </div>\n </gn-ui-max-lines>\n </gn-ui-content-ghost>\n\n <p\n class=\"mt-6 mb-3 font-medium text-black text-sm\"\n translate\n *ngIf=\"!fieldReady('keywords') || metadata.keywords?.length\"\n >\n record.metadata.keywords\n </p>\n\n <gn-ui-content-ghost\n ghostClass=\"h-[31px] w-3/4\"\n [showContent]=\"fieldReady('keywords')\"\n >\n <gn-ui-max-lines [maxLines]=\"7\" *ngIf=\"metadata.keywords?.length\">\n <div class=\"metadata-info-keywords sm:pb-4 flex flex-wrap gap-2\">\n <gn-ui-badge\n class=\"inline-block lowercase\"\n (click)=\"onKeywordClick(keyword)\"\n [clickable]=\"true\"\n *ngFor=\"let keyword of metadata.keywords\"\n >{{ keyword.label }}</gn-ui-badge\n >\n </div>\n </gn-ui-max-lines>\n </gn-ui-content-ghost>\n</div>\n\n<gn-ui-expandable-panel\n *ngIf=\"\n metadata.licenses ||\n metadata.legalConstraints ||\n metadata.securityConstraints ||\n metadata.otherConstraints\n \"\n [title]=\"'record.metadata.usage' | translate\"\n data-test=\"usage-panel\"\n>\n <div class=\"flex flex-col gap-[10px] mr-4 py-[12px] rounded text-gray-900\">\n <ng-container *ngFor=\"let license of licenses\">\n <div *ngIf=\"license.url; else noUrl\" class=\"text-primary\">\n <a\n [href]=\"license.url\"\n target=\"_blank\"\n class=\"cursor-pointer hover:underline transition-all\"\n >\n {{ license.text }}\n <ng-icon\n class=\"!w-[12px] !h-[12px] !text-[12px] opacity-75 shrink-0\"\n name=\"matOpenInNew\"\n ></ng-icon>\n </a>\n </div>\n <ng-template #noUrl>\n <div class=\"text-primary\" gnUiLinkify>\n {{ license.text }}\n </div>\n </ng-template>\n </ng-container>\n <ng-container *ngIf=\"legalConstraints.length\">\n <div class=\"mb-6\">\n <gn-ui-markdown-parser\n *ngFor=\"let constraint of legalConstraints\"\n [textContent]=\"constraint\"\n >\n </gn-ui-markdown-parser>\n </div>\n </ng-container>\n <ng-container *ngIf=\"otherConstraints.length\">\n <div gnUiLinkify *ngFor=\"let constraint of otherConstraints\">\n <span\n translate\n class=\"font-medium text-black text-sm mb-[2px] mt-[16px]\"\n >\n record.metadata.otherConstraints\n </span>\n <div class=\"mb-6\">\n <gn-ui-markdown-parser [textContent]=\"constraint\">\n </gn-ui-markdown-parser>\n </div>\n </div>\n </ng-container>\n\n <span class=\"noUsage\" *ngIf=\"!hasUsage\">\n {{ 'record.metadata.noUsage' | translate }}\n </span>\n </div>\n</gn-ui-expandable-panel>\n<gn-ui-expandable-panel\n *ngIf=\"\n (metadata.kind === 'dataset' && metadata.lineage) ||\n metadata.resourceUpdated ||\n metadata.updateFrequency ||\n (metadata.kind === 'dataset' && metadata.status)\n \"\n [title]=\"'record.metadata.details' | translate\"\n data-test=\"details-panel\"\n>\n <div *ngIf=\"metadata.lineage\" class=\"text-gray-900 flex flex-col mt-4 gap-2\">\n <p class=\"whitespace-pre-line break-words text-gray-900\" gnUiLinkify>\n {{ metadata.lineage }}\n </p>\n </div>\n <div class=\"flex flex-row gap-6 mt-5 mb-8\" *ngIf=\"resourceContact\">\n <div\n *ngIf=\"resourceContact.organization?.logoUrl?.href\"\n class=\"flex items-center justify-center border-solid border border-gray-300 rounded-md bg-white h-32 overflow-hidden\"\n >\n <gn-ui-thumbnail\n class=\"relative h-full w-full\"\n [thumbnailUrl]=\"resourceContact.organization.logoUrl.href\"\n fit=\"contain\"\n ></gn-ui-thumbnail>\n </div>\n <div class=\"flex flex-col gap-1\">\n <p class=\"text-sm font-medium\" translate>record.metadata.producer</p>\n <div\n class=\"text-primary font-title text-21 mr-2 cursor-pointer hover:underline\"\n data-cy=\"organization-name\"\n >\n {{ resourceContact.organization?.name }}\n </div>\n <div *ngIf=\"resourceContact.organization?.website\">\n <a\n [href]=\"resourceContact.organization.website\"\n target=\"_blank\"\n class=\"contact-website text-primary text-sm cursor-pointer hover:underline transition-all\"\n >{{ resourceContact.organization.website }}\n <ng-icon\n class=\"!w-[12px] !h-[12px] !text-[12px] opacity-75 shrink-0\"\n name=\"matOpenInNew\"\n ></ng-icon>\n </a>\n </div>\n <div class=\"mt-4\" *ngIf=\"resourceContact.email\">\n <div class=\"flex\">\n <ng-icon\n class=\"!w-5 !h-5 !text-[20px] opacity-75 shrink-0\"\n name=\"matMailOutline\"\n ></ng-icon>\n <a\n *ngIf=\"resourceContact.email\"\n [href]=\"'mailto:' + resourceContact.email\"\n class=\"text-sm hover:underline ml-2\"\n target=\"_blank\"\n data-cy=\"contact-email\"\n >{{ resourceContact?.email }}</a\n >\n </div>\n </div>\n </div>\n </div>\n <div\n class=\"py-6 px-6 rounded bg-gray-100 grid grid-cols-2 gap-y-6 gap-x-[20px] text-gray-700\"\n >\n <div *ngIf=\"metadata.resourceCreated\">\n <p class=\"text-sm\" translate>record.metadata.creation</p>\n <p class=\"text-primary font-medium mt-1\">\n {{ formatDate(metadata.resourceCreated) }}\n </p>\n </div>\n <div *ngIf=\"metadata.resourcePublished\">\n <p class=\"text-sm\" translate>record.metadata.publication</p>\n <p class=\"text-primary font-medium mt-1\">\n {{ formatDate(metadata.resourcePublished) }}\n </p>\n </div>\n <div *ngIf=\"updateFrequency\">\n <p class=\"text-sm\" translate>record.metadata.updateFrequency</p>\n <p\n class=\"text-primary font-medium mt-1 updateFrequency\"\n translate\n [translateParams]=\"{ count: updatedTimes }\"\n >\n {{ updateFrequency }}\n </p>\n </div>\n <div *ngIf=\"metadata.otherLanguages?.length\">\n <p class=\"text-sm mb-1\" translate>record.metadata.languages</p>\n <div class=\"flex flex-row gap-1 flex-wrap\">\n <p\n class=\"text-primary font-medium\"\n translate\n *ngFor=\"let language of metadata.otherLanguages\"\n >\n language.{{ language }}\n </p>\n </div>\n </div>\n <div *ngIf=\"temporalExtent\">\n <p class=\"text-sm\" translate>record.metadata.temporalExtent</p>\n <div class=\"flex flex-row gap-1 mb-1 text-primary font-medium\">\n <p\n *ngIf=\"temporalExtent.start && temporalExtent.end\"\n translate\n [translateParams]=\"{\n start: temporalExtent.start,\n end: temporalExtent.end,\n }\"\n >\n record.metadata.temporalExtent.fromDateToDate\n </p>\n <p\n *ngIf=\"temporalExtent.start && !temporalExtent.end\"\n translate\n [translateParams]=\"{ start: temporalExtent.start }\"\n >\n record.metadata.temporalExtent.sinceDate\n </p>\n <p\n *ngIf=\"!temporalExtent.start && temporalExtent.end\"\n translate\n [translateParams]=\"{ end: temporalExtent.end }\"\n >\n record.metadata.temporalExtent.untilDate\n </p>\n </div>\n </div>\n </div>\n</gn-ui-expandable-panel>\n<gn-ui-expandable-panel\n *ngIf=\"\n metadata.kind !== 'dataset' &&\n metadata.spatialExtents &&\n metadata.spatialExtents.length\n \"\n [title]=\"'service.metadata.spatialExtent' | translate\"\n data-test=\"spatial-extent-panel\"\n>\n <gn-ui-spatial-extent\n class=\"flex h-[271px] w-full rounded-lg border border-gray-100 mt-3 mb-6\"\n [spatialExtents]=\"metadata.spatialExtents\"\n ></gn-ui-spatial-extent>\n</gn-ui-expandable-panel>\n<gn-ui-expandable-panel\n *ngIf=\"metadata.landingPage\"\n [title]=\"'service.metadata.other' | translate\"\n data-test=\"other-panel\"\n>\n <div class=\"flex flex-col gap-4 mr-4 py-5 rounded text-gray-700\">\n <div *ngIf=\"metadata.recordUpdated\">\n <p class=\"text-sm\" translate>record.metadata.updatedOn</p>\n <p class=\"text-primary font-medium\">\n {{ metadata.recordUpdated && formatDateTime(metadata.recordUpdated) }}\n </p>\n </div>\n <div *ngIf=\"metadata.landingPage\">\n <p class=\"text-sm\" translate>record.metadata.sheet</p>\n <p class=\"text-primary font-medium\" translate>\n <a [href]=\"metadata.landingPage\" target=\"_blank\">\n <span class=\"break-all\" gnUiLinkify>{{ metadata.landingPage }}</span>\n </a>\n </p>\n </div>\n <div *ngIf=\"metadata.ownerOrganization\">\n <p class=\"text-sm\" translate>record.metadata.owner</p>\n <p class=\"text-primary font-medium\">\n {{ metadata.ownerOrganization.name }}\n </p>\n </div>\n <div *ngIf=\"metadata.uniqueIdentifier\">\n <p class=\"text-sm\" translate>record.metadata.uniqueId</p>\n <div class=\"flex flex-row content-align items-end gap-1\">\n <gn-ui-copy-text-button\n [text]=\"metadata.uniqueIdentifier\"\n [tooltipText]=\"'tooltip.id.copy' | translate\"\n [displayText]=\"false\"\n ></gn-ui-copy-text-button>\n <p class=\"text-primary font-medium\">\n {{ metadata.uniqueIdentifier }}\n </p>\n </div>\n </div>\n <div *ngIf=\"metadata.topics?.length\">\n <p class=\"text-sm mb-1\" translate>record.metadata.topics</p>\n <div class=\"sm:pb-4 sm:pr-16\">\n <gn-ui-badge\n [clickable]=\"false\"\n class=\"inline-block mr-2 mb-2 lowercase\"\n *ngFor=\"let topic of metadata.topics\"\n >{{ topic }}</gn-ui-badge\n >\n </div>\n </div>\n </div>\n</gn-ui-expandable-panel>\n", styles: [".md-description ::ng-deep a{@apply underline text-blue-600 hover:text-blue-800;}.info-grid>:nth-last-child(n+3){padding-bottom:10px;@apply border-b border-gray-300;}:host ::ng-deep gn-ui-copy-text-button button ng-icon{transform:scale(.8)}:host{--gn-ui-badge-background-color: var(--color-primary-white);--gn-ui-badge-text-color: var(--color-primary-darkest)}:host .metadata-info-keywords ::ng-deep gn-ui-badge:hover{--gn-ui-badge-text-color: white}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: TranslateDirective, selector: "[translate],[ngx-translate]", inputs: ["translate", "translateParams"] }, { kind: "pipe", type: TranslatePipe, name: "translate" }, { kind: "component", type: MarkdownParserComponent, selector: "gn-ui-markdown-parser", inputs: ["textContent", "whitoutStyles"] }, { kind: "component", type: ExpandablePanelComponent, selector: "gn-ui-expandable-panel", inputs: ["title", "iconColor", "collapsed"] }, { kind: "component", type: BadgeComponent, selector: "gn-ui-badge", inputs: ["clickable", "removable"], outputs: ["badgeRemoveClicked"] }, { kind: "component", type: ContentGhostComponent, selector: "gn-ui-content-ghost", inputs: ["showContent", "ghostClass"] }, { kind: "component", type: ThumbnailComponent, selector: "gn-ui-thumbnail", inputs: ["thumbnailUrl", "fit"], outputs: ["placeholderShown"] }, { kind: "component", type: MaxLinesComponent, selector: "gn-ui-max-lines", inputs: ["maxLines"] }, { kind: "component", type: CopyTextButtonComponent, selector: "gn-ui-copy-text-button", inputs: ["text", "tooltipText", "displayText", "rows"] }, { kind: "component", type: NgIcon, selector: "ng-icon", inputs: ["name", "svg", "size", "strokeWidth", "color"] }, { kind: "directive", type: GnUiLinkifyDirective, selector: "[gnUiLinkify]" }, { kind: "component", type: SpatialExtentComponent, selector: "gn-ui-spatial-extent", inputs: ["spatialExtents"] }], viewProviders: [
93
93
  provideIcons({
94
94
  matOpenInNew,
95
95
  matMailOutline,
@@ -117,7 +117,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
117
117
  matOpenInNew,
118
118
  matMailOutline,
119
119
  }),
120
- ], template: "<div class=\"mb-6 md-description sm:mb-4 sm:pr-16\">\n <gn-ui-content-ghost\n ghostClass=\"h-[178px]\"\n [showContent]=\"fieldReady('abstract')\"\n >\n <gn-ui-max-lines [maxLines]=\"6\" *ngIf=\"metadata.abstract\">\n <div class=\"mb-6\">\n <gn-ui-markdown-parser\n [textContent]=\"metadata.abstract\"\n ></gn-ui-markdown-parser>\n </div>\n </gn-ui-max-lines>\n </gn-ui-content-ghost>\n\n <p\n class=\"mt-6 mb-3 font-medium text-black text-sm\"\n translate\n *ngIf=\"!fieldReady('keywords') || metadata.keywords?.length\"\n >\n record.metadata.keywords\n </p>\n\n <gn-ui-content-ghost\n ghostClass=\"h-[31px] w-3/4\"\n [showContent]=\"fieldReady('keywords')\"\n >\n <div *ngIf=\"metadata.keywords?.length\">\n <div class=\"metadata-info-keywords sm:pb-4 flex flex-wrap gap-2\">\n <gn-ui-badge\n class=\"inline-block lowercase\"\n (click)=\"onKeywordClick(keyword)\"\n [clickable]=\"true\"\n *ngFor=\"let keyword of metadata.keywords\"\n >{{ keyword.label }}</gn-ui-badge\n >\n </div>\n </div>\n </gn-ui-content-ghost>\n</div>\n\n<gn-ui-expandable-panel\n *ngIf=\"\n metadata.licenses ||\n metadata.legalConstraints ||\n metadata.securityConstraints ||\n metadata.otherConstraints\n \"\n [title]=\"'record.metadata.usage' | translate\"\n data-test=\"usage-panel\"\n>\n <div class=\"flex flex-col gap-[10px] mr-4 py-[12px] rounded text-gray-900\">\n <ng-container *ngFor=\"let license of licenses\">\n <div *ngIf=\"license.url; else noUrl\" class=\"text-primary\">\n <a\n [href]=\"license.url\"\n target=\"_blank\"\n class=\"cursor-pointer hover:underline transition-all\"\n >\n {{ license.text }}\n <ng-icon\n class=\"!w-[12px] !h-[12px] !text-[12px] opacity-75 shrink-0\"\n name=\"matOpenInNew\"\n ></ng-icon>\n </a>\n </div>\n <ng-template #noUrl>\n <div class=\"text-primary\" gnUiLinkify>\n {{ license.text }}\n </div>\n </ng-template>\n </ng-container>\n <ng-container *ngIf=\"legalConstraints.length\">\n <div class=\"mb-6\">\n <gn-ui-markdown-parser\n *ngFor=\"let constraint of legalConstraints\"\n [textContent]=\"constraint\"\n >\n </gn-ui-markdown-parser>\n </div>\n </ng-container>\n <ng-container *ngIf=\"otherConstraints.length\">\n <div gnUiLinkify *ngFor=\"let constraint of otherConstraints\">\n <span\n translate\n class=\"font-medium text-black text-sm mb-[2px] mt-[16px]\"\n >\n record.metadata.otherConstraints\n </span>\n <div class=\"mb-6\">\n <gn-ui-markdown-parser [textContent]=\"constraint\">\n </gn-ui-markdown-parser>\n </div>\n </div>\n </ng-container>\n\n <span class=\"noUsage\" *ngIf=\"!hasUsage\">\n {{ 'record.metadata.noUsage' | translate }}\n </span>\n </div>\n</gn-ui-expandable-panel>\n<gn-ui-expandable-panel\n *ngIf=\"\n (metadata.kind === 'dataset' && metadata.lineage) ||\n metadata.resourceUpdated ||\n metadata.updateFrequency ||\n (metadata.kind === 'dataset' && metadata.status)\n \"\n [title]=\"'record.metadata.details' | translate\"\n data-test=\"details-panel\"\n>\n <div *ngIf=\"metadata.lineage\" class=\"text-gray-900 flex flex-col mt-4 gap-2\">\n <p class=\"whitespace-pre-line break-words text-gray-900\" gnUiLinkify>\n {{ metadata.lineage }}\n </p>\n </div>\n <div class=\"flex flex-row gap-6 mt-5 mb-8\" *ngIf=\"resourceContact\">\n <div\n *ngIf=\"resourceContact.organization?.logoUrl?.href\"\n class=\"flex items-center justify-center border-solid border border-gray-300 rounded-md bg-white h-32 overflow-hidden\"\n >\n <gn-ui-thumbnail\n class=\"relative h-full w-full\"\n [thumbnailUrl]=\"resourceContact.organization.logoUrl.href\"\n fit=\"contain\"\n ></gn-ui-thumbnail>\n </div>\n <div class=\"flex flex-col gap-1\">\n <p class=\"text-sm font-medium\" translate>record.metadata.producer</p>\n <div\n class=\"text-primary font-title text-21 mr-2 cursor-pointer hover:underline\"\n data-cy=\"organization-name\"\n >\n {{ resourceContact.organization?.name }}\n </div>\n <div *ngIf=\"resourceContact.organization?.website\">\n <a\n [href]=\"resourceContact.organization.website\"\n target=\"_blank\"\n class=\"contact-website text-primary text-sm cursor-pointer hover:underline transition-all\"\n >{{ resourceContact.organization.website }}\n <ng-icon\n class=\"!w-[12px] !h-[12px] !text-[12px] opacity-75 shrink-0\"\n name=\"matOpenInNew\"\n ></ng-icon>\n </a>\n </div>\n <div class=\"mt-4\" *ngIf=\"resourceContact.email\">\n <div class=\"flex\">\n <ng-icon\n class=\"!w-5 !h-5 !text-[20px] opacity-75 shrink-0\"\n name=\"matMailOutline\"\n ></ng-icon>\n <a\n *ngIf=\"resourceContact.email\"\n [href]=\"'mailto:' + resourceContact.email\"\n class=\"text-sm hover:underline ml-2\"\n target=\"_blank\"\n data-cy=\"contact-email\"\n >{{ resourceContact?.email }}</a\n >\n </div>\n </div>\n </div>\n </div>\n <div\n class=\"py-6 px-6 rounded bg-gray-100 grid grid-cols-2 gap-y-6 gap-x-[20px] text-gray-700\"\n >\n <div *ngIf=\"metadata.resourceCreated\">\n <p class=\"text-sm\" translate>record.metadata.creation</p>\n <p class=\"text-primary font-medium mt-1\">\n {{ formatDate(metadata.resourceCreated) }}\n </p>\n </div>\n <div *ngIf=\"metadata.resourcePublished\">\n <p class=\"text-sm\" translate>record.metadata.publication</p>\n <p class=\"text-primary font-medium mt-1\">\n {{ formatDate(metadata.resourcePublished) }}\n </p>\n </div>\n <div *ngIf=\"updateFrequency\">\n <p class=\"text-sm\" translate>record.metadata.updateFrequency</p>\n <p\n class=\"text-primary font-medium mt-1 updateFrequency\"\n translate\n [translateParams]=\"{ count: updatedTimes }\"\n >\n {{ updateFrequency }}\n </p>\n </div>\n <div *ngIf=\"metadata.otherLanguages?.length\">\n <p class=\"text-sm mb-1\" translate>record.metadata.languages</p>\n <div class=\"flex flex-row gap-1 flex-wrap\">\n <p\n class=\"text-primary font-medium\"\n translate\n *ngFor=\"let language of metadata.otherLanguages\"\n >\n language.{{ language }}\n </p>\n </div>\n </div>\n <div *ngIf=\"temporalExtent\">\n <p class=\"text-sm\" translate>record.metadata.temporalExtent</p>\n <div class=\"flex flex-row gap-1 mb-1 text-primary font-medium\">\n <p\n *ngIf=\"temporalExtent.start && temporalExtent.end\"\n translate\n [translateParams]=\"{\n start: temporalExtent.start,\n end: temporalExtent.end,\n }\"\n >\n record.metadata.temporalExtent.fromDateToDate\n </p>\n <p\n *ngIf=\"temporalExtent.start && !temporalExtent.end\"\n translate\n [translateParams]=\"{ start: temporalExtent.start }\"\n >\n record.metadata.temporalExtent.sinceDate\n </p>\n <p\n *ngIf=\"!temporalExtent.start && temporalExtent.end\"\n translate\n [translateParams]=\"{ end: temporalExtent.end }\"\n >\n record.metadata.temporalExtent.untilDate\n </p>\n </div>\n </div>\n </div>\n</gn-ui-expandable-panel>\n<gn-ui-expandable-panel\n *ngIf=\"\n metadata.kind !== 'dataset' &&\n metadata.spatialExtents &&\n metadata.spatialExtents.length\n \"\n [title]=\"'service.metadata.spatialExtent' | translate\"\n data-test=\"spatial-extent-panel\"\n>\n <gn-ui-spatial-extent\n class=\"flex h-[271px] w-full rounded-lg border border-gray-100 mt-3 mb-6\"\n [spatialExtents]=\"metadata.spatialExtents\"\n ></gn-ui-spatial-extent>\n</gn-ui-expandable-panel>\n<gn-ui-expandable-panel\n *ngIf=\"metadata.landingPage\"\n [title]=\"'service.metadata.other' | translate\"\n data-test=\"other-panel\"\n>\n <div class=\"flex flex-col gap-4 mr-4 py-5 rounded text-gray-700\">\n <div *ngIf=\"metadata.recordUpdated\">\n <p class=\"text-sm\" translate>record.metadata.updatedOn</p>\n <p class=\"text-primary font-medium\">\n {{ metadata.recordUpdated && formatDateTime(metadata.recordUpdated) }}\n </p>\n </div>\n <div *ngIf=\"metadata.landingPage\">\n <p class=\"text-sm\" translate>record.metadata.sheet</p>\n <p class=\"text-primary font-medium\" translate>\n <a [href]=\"metadata.landingPage\" target=\"_blank\">\n <span class=\"break-all\" gnUiLinkify>{{ metadata.landingPage }}</span>\n </a>\n </p>\n </div>\n <div *ngIf=\"metadata.ownerOrganization\">\n <p class=\"text-sm\" translate>record.metadata.owner</p>\n <p class=\"text-primary font-medium\">\n {{ metadata.ownerOrganization.name }}\n </p>\n </div>\n <div *ngIf=\"metadata.uniqueIdentifier\">\n <p class=\"text-sm\" translate>record.metadata.uniqueId</p>\n <div class=\"flex flex-row content-align items-end gap-1\">\n <gn-ui-copy-text-button\n [text]=\"metadata.uniqueIdentifier\"\n [tooltipText]=\"'tooltip.id.copy' | translate\"\n [displayText]=\"false\"\n ></gn-ui-copy-text-button>\n <p class=\"text-primary font-medium\">\n {{ metadata.uniqueIdentifier }}\n </p>\n </div>\n </div>\n <div *ngIf=\"metadata.topics?.length\">\n <p class=\"text-sm mb-1\" translate>record.metadata.topics</p>\n <div class=\"sm:pb-4 sm:pr-16\">\n <gn-ui-badge\n [clickable]=\"false\"\n class=\"inline-block mr-2 mb-2 lowercase\"\n *ngFor=\"let topic of metadata.topics\"\n >{{ topic }}</gn-ui-badge\n >\n </div>\n </div>\n </div>\n</gn-ui-expandable-panel>\n", styles: [".md-description ::ng-deep a{@apply underline text-blue-600 hover:text-blue-800;}.info-grid>:nth-last-child(n+3){padding-bottom:10px;@apply border-b border-gray-300;}:host ::ng-deep gn-ui-copy-text-button button ng-icon{transform:scale(.8)}:host{--gn-ui-badge-background-color: var(--color-primary-white);--gn-ui-badge-text-color: var(--color-primary-darkest)}:host .metadata-info-keywords ::ng-deep gn-ui-badge:hover{--gn-ui-badge-text-color: white}\n"] }]
120
+ ], template: "<div class=\"mb-6 md-description sm:mb-4 sm:pr-16\">\n <gn-ui-content-ghost\n ghostClass=\"h-[178px]\"\n [showContent]=\"fieldReady('abstract')\"\n >\n <gn-ui-max-lines [maxLines]=\"6\" *ngIf=\"metadata.abstract\">\n <div class=\"mb-6\">\n <gn-ui-markdown-parser\n [textContent]=\"metadata.abstract\"\n ></gn-ui-markdown-parser>\n </div>\n </gn-ui-max-lines>\n </gn-ui-content-ghost>\n\n <p\n class=\"mt-6 mb-3 font-medium text-black text-sm\"\n translate\n *ngIf=\"!fieldReady('keywords') || metadata.keywords?.length\"\n >\n record.metadata.keywords\n </p>\n\n <gn-ui-content-ghost\n ghostClass=\"h-[31px] w-3/4\"\n [showContent]=\"fieldReady('keywords')\"\n >\n <gn-ui-max-lines [maxLines]=\"7\" *ngIf=\"metadata.keywords?.length\">\n <div class=\"metadata-info-keywords sm:pb-4 flex flex-wrap gap-2\">\n <gn-ui-badge\n class=\"inline-block lowercase\"\n (click)=\"onKeywordClick(keyword)\"\n [clickable]=\"true\"\n *ngFor=\"let keyword of metadata.keywords\"\n >{{ keyword.label }}</gn-ui-badge\n >\n </div>\n </gn-ui-max-lines>\n </gn-ui-content-ghost>\n</div>\n\n<gn-ui-expandable-panel\n *ngIf=\"\n metadata.licenses ||\n metadata.legalConstraints ||\n metadata.securityConstraints ||\n metadata.otherConstraints\n \"\n [title]=\"'record.metadata.usage' | translate\"\n data-test=\"usage-panel\"\n>\n <div class=\"flex flex-col gap-[10px] mr-4 py-[12px] rounded text-gray-900\">\n <ng-container *ngFor=\"let license of licenses\">\n <div *ngIf=\"license.url; else noUrl\" class=\"text-primary\">\n <a\n [href]=\"license.url\"\n target=\"_blank\"\n class=\"cursor-pointer hover:underline transition-all\"\n >\n {{ license.text }}\n <ng-icon\n class=\"!w-[12px] !h-[12px] !text-[12px] opacity-75 shrink-0\"\n name=\"matOpenInNew\"\n ></ng-icon>\n </a>\n </div>\n <ng-template #noUrl>\n <div class=\"text-primary\" gnUiLinkify>\n {{ license.text }}\n </div>\n </ng-template>\n </ng-container>\n <ng-container *ngIf=\"legalConstraints.length\">\n <div class=\"mb-6\">\n <gn-ui-markdown-parser\n *ngFor=\"let constraint of legalConstraints\"\n [textContent]=\"constraint\"\n >\n </gn-ui-markdown-parser>\n </div>\n </ng-container>\n <ng-container *ngIf=\"otherConstraints.length\">\n <div gnUiLinkify *ngFor=\"let constraint of otherConstraints\">\n <span\n translate\n class=\"font-medium text-black text-sm mb-[2px] mt-[16px]\"\n >\n record.metadata.otherConstraints\n </span>\n <div class=\"mb-6\">\n <gn-ui-markdown-parser [textContent]=\"constraint\">\n </gn-ui-markdown-parser>\n </div>\n </div>\n </ng-container>\n\n <span class=\"noUsage\" *ngIf=\"!hasUsage\">\n {{ 'record.metadata.noUsage' | translate }}\n </span>\n </div>\n</gn-ui-expandable-panel>\n<gn-ui-expandable-panel\n *ngIf=\"\n (metadata.kind === 'dataset' && metadata.lineage) ||\n metadata.resourceUpdated ||\n metadata.updateFrequency ||\n (metadata.kind === 'dataset' && metadata.status)\n \"\n [title]=\"'record.metadata.details' | translate\"\n data-test=\"details-panel\"\n>\n <div *ngIf=\"metadata.lineage\" class=\"text-gray-900 flex flex-col mt-4 gap-2\">\n <p class=\"whitespace-pre-line break-words text-gray-900\" gnUiLinkify>\n {{ metadata.lineage }}\n </p>\n </div>\n <div class=\"flex flex-row gap-6 mt-5 mb-8\" *ngIf=\"resourceContact\">\n <div\n *ngIf=\"resourceContact.organization?.logoUrl?.href\"\n class=\"flex items-center justify-center border-solid border border-gray-300 rounded-md bg-white h-32 overflow-hidden\"\n >\n <gn-ui-thumbnail\n class=\"relative h-full w-full\"\n [thumbnailUrl]=\"resourceContact.organization.logoUrl.href\"\n fit=\"contain\"\n ></gn-ui-thumbnail>\n </div>\n <div class=\"flex flex-col gap-1\">\n <p class=\"text-sm font-medium\" translate>record.metadata.producer</p>\n <div\n class=\"text-primary font-title text-21 mr-2 cursor-pointer hover:underline\"\n data-cy=\"organization-name\"\n >\n {{ resourceContact.organization?.name }}\n </div>\n <div *ngIf=\"resourceContact.organization?.website\">\n <a\n [href]=\"resourceContact.organization.website\"\n target=\"_blank\"\n class=\"contact-website text-primary text-sm cursor-pointer hover:underline transition-all\"\n >{{ resourceContact.organization.website }}\n <ng-icon\n class=\"!w-[12px] !h-[12px] !text-[12px] opacity-75 shrink-0\"\n name=\"matOpenInNew\"\n ></ng-icon>\n </a>\n </div>\n <div class=\"mt-4\" *ngIf=\"resourceContact.email\">\n <div class=\"flex\">\n <ng-icon\n class=\"!w-5 !h-5 !text-[20px] opacity-75 shrink-0\"\n name=\"matMailOutline\"\n ></ng-icon>\n <a\n *ngIf=\"resourceContact.email\"\n [href]=\"'mailto:' + resourceContact.email\"\n class=\"text-sm hover:underline ml-2\"\n target=\"_blank\"\n data-cy=\"contact-email\"\n >{{ resourceContact?.email }}</a\n >\n </div>\n </div>\n </div>\n </div>\n <div\n class=\"py-6 px-6 rounded bg-gray-100 grid grid-cols-2 gap-y-6 gap-x-[20px] text-gray-700\"\n >\n <div *ngIf=\"metadata.resourceCreated\">\n <p class=\"text-sm\" translate>record.metadata.creation</p>\n <p class=\"text-primary font-medium mt-1\">\n {{ formatDate(metadata.resourceCreated) }}\n </p>\n </div>\n <div *ngIf=\"metadata.resourcePublished\">\n <p class=\"text-sm\" translate>record.metadata.publication</p>\n <p class=\"text-primary font-medium mt-1\">\n {{ formatDate(metadata.resourcePublished) }}\n </p>\n </div>\n <div *ngIf=\"updateFrequency\">\n <p class=\"text-sm\" translate>record.metadata.updateFrequency</p>\n <p\n class=\"text-primary font-medium mt-1 updateFrequency\"\n translate\n [translateParams]=\"{ count: updatedTimes }\"\n >\n {{ updateFrequency }}\n </p>\n </div>\n <div *ngIf=\"metadata.otherLanguages?.length\">\n <p class=\"text-sm mb-1\" translate>record.metadata.languages</p>\n <div class=\"flex flex-row gap-1 flex-wrap\">\n <p\n class=\"text-primary font-medium\"\n translate\n *ngFor=\"let language of metadata.otherLanguages\"\n >\n language.{{ language }}\n </p>\n </div>\n </div>\n <div *ngIf=\"temporalExtent\">\n <p class=\"text-sm\" translate>record.metadata.temporalExtent</p>\n <div class=\"flex flex-row gap-1 mb-1 text-primary font-medium\">\n <p\n *ngIf=\"temporalExtent.start && temporalExtent.end\"\n translate\n [translateParams]=\"{\n start: temporalExtent.start,\n end: temporalExtent.end,\n }\"\n >\n record.metadata.temporalExtent.fromDateToDate\n </p>\n <p\n *ngIf=\"temporalExtent.start && !temporalExtent.end\"\n translate\n [translateParams]=\"{ start: temporalExtent.start }\"\n >\n record.metadata.temporalExtent.sinceDate\n </p>\n <p\n *ngIf=\"!temporalExtent.start && temporalExtent.end\"\n translate\n [translateParams]=\"{ end: temporalExtent.end }\"\n >\n record.metadata.temporalExtent.untilDate\n </p>\n </div>\n </div>\n </div>\n</gn-ui-expandable-panel>\n<gn-ui-expandable-panel\n *ngIf=\"\n metadata.kind !== 'dataset' &&\n metadata.spatialExtents &&\n metadata.spatialExtents.length\n \"\n [title]=\"'service.metadata.spatialExtent' | translate\"\n data-test=\"spatial-extent-panel\"\n>\n <gn-ui-spatial-extent\n class=\"flex h-[271px] w-full rounded-lg border border-gray-100 mt-3 mb-6\"\n [spatialExtents]=\"metadata.spatialExtents\"\n ></gn-ui-spatial-extent>\n</gn-ui-expandable-panel>\n<gn-ui-expandable-panel\n *ngIf=\"metadata.landingPage\"\n [title]=\"'service.metadata.other' | translate\"\n data-test=\"other-panel\"\n>\n <div class=\"flex flex-col gap-4 mr-4 py-5 rounded text-gray-700\">\n <div *ngIf=\"metadata.recordUpdated\">\n <p class=\"text-sm\" translate>record.metadata.updatedOn</p>\n <p class=\"text-primary font-medium\">\n {{ metadata.recordUpdated && formatDateTime(metadata.recordUpdated) }}\n </p>\n </div>\n <div *ngIf=\"metadata.landingPage\">\n <p class=\"text-sm\" translate>record.metadata.sheet</p>\n <p class=\"text-primary font-medium\" translate>\n <a [href]=\"metadata.landingPage\" target=\"_blank\">\n <span class=\"break-all\" gnUiLinkify>{{ metadata.landingPage }}</span>\n </a>\n </p>\n </div>\n <div *ngIf=\"metadata.ownerOrganization\">\n <p class=\"text-sm\" translate>record.metadata.owner</p>\n <p class=\"text-primary font-medium\">\n {{ metadata.ownerOrganization.name }}\n </p>\n </div>\n <div *ngIf=\"metadata.uniqueIdentifier\">\n <p class=\"text-sm\" translate>record.metadata.uniqueId</p>\n <div class=\"flex flex-row content-align items-end gap-1\">\n <gn-ui-copy-text-button\n [text]=\"metadata.uniqueIdentifier\"\n [tooltipText]=\"'tooltip.id.copy' | translate\"\n [displayText]=\"false\"\n ></gn-ui-copy-text-button>\n <p class=\"text-primary font-medium\">\n {{ metadata.uniqueIdentifier }}\n </p>\n </div>\n </div>\n <div *ngIf=\"metadata.topics?.length\">\n <p class=\"text-sm mb-1\" translate>record.metadata.topics</p>\n <div class=\"sm:pb-4 sm:pr-16\">\n <gn-ui-badge\n [clickable]=\"false\"\n class=\"inline-block mr-2 mb-2 lowercase\"\n *ngFor=\"let topic of metadata.topics\"\n >{{ topic }}</gn-ui-badge\n >\n </div>\n </div>\n </div>\n</gn-ui-expandable-panel>\n", styles: [".md-description ::ng-deep a{@apply underline text-blue-600 hover:text-blue-800;}.info-grid>:nth-last-child(n+3){padding-bottom:10px;@apply border-b border-gray-300;}:host ::ng-deep gn-ui-copy-text-button button ng-icon{transform:scale(.8)}:host{--gn-ui-badge-background-color: var(--color-primary-white);--gn-ui-badge-text-color: var(--color-primary-darkest)}:host .metadata-info-keywords ::ng-deep gn-ui-badge:hover{--gn-ui-badge-text-color: white}\n"] }]
121
121
  }], ctorParameters: () => [{ type: i1.DateService }], propDecorators: { metadata: [{
122
122
  type: Input
123
123
  }], incomplete: [{
@@ -125,4 +125,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
125
125
  }], keyword: [{
126
126
  type: Output
127
127
  }] } });
128
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWV0YWRhdGEtaW5mby5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL3VpL2VsZW1lbnRzL3NyYy9saWIvbWV0YWRhdGEtaW5mby9tZXRhZGF0YS1pbmZvLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvdWkvZWxlbWVudHMvc3JjL2xpYi9tZXRhZGF0YS1pbmZvL21ldGFkYXRhLWluZm8uY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLHVCQUF1QixFQUN2QixTQUFTLEVBQ1QsWUFBWSxFQUNaLEtBQUssRUFDTCxNQUFNLEdBQ1AsTUFBTSxlQUFlLENBQUE7QUFLdEIsT0FBTyxFQUFFLFdBQVcsRUFBRSxxQkFBcUIsRUFBRSxNQUFNLHdDQUF3QyxDQUFBO0FBQzNGLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLDhDQUE4QyxDQUFBO0FBQ3RGLE9BQU8sRUFDTCx3QkFBd0IsRUFDeEIsaUJBQWlCLEdBQ2xCLE1BQU0sc0NBQXNDLENBQUE7QUFDN0MsT0FBTyxFQUFFLGtCQUFrQixFQUFFLGFBQWEsRUFBRSxNQUFNLHFCQUFxQixDQUFBO0FBQ3ZFLE9BQU8sRUFDTCxjQUFjLEVBQ2QsdUJBQXVCLEdBQ3hCLE1BQU0sc0NBQXNDLENBQUE7QUFDN0MsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sMENBQTBDLENBQUE7QUFDaEYsT0FBTyxFQUFFLE1BQU0sRUFBRSxZQUFZLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQTtBQUNyRCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sbUNBQW1DLENBQUE7QUFDaEUsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGtDQUFrQyxDQUFBO0FBQ2pFLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLGtDQUFrQyxDQUFBO0FBQ3JFLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFN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QVU7c0JBQWxCLEtBQUs7Z0JBQ0ksT0FBTztzQkFBaEIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBDb21wb25lbnQsXG4gIEV2ZW50RW1pdHRlcixcbiAgSW5wdXQsXG4gIE91dHB1dCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSdcbmltcG9ydCB7XG4gIENhdGFsb2dSZWNvcmQsXG4gIEtleXdvcmQsXG59IGZyb20gJy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY29tbW9uL2RvbWFpbi9zcmMvbGliL21vZGVsL3JlY29yZCdcbmltcG9ydCB7IERhdGVTZXJ2aWNlLCBnZXRUZW1wb3JhbFJhbmdlVW5pb24gfSBmcm9tICcuLi8uLi8uLi8uLi8uLi8uLi9saWJzL3V0aWwvc2hhcmVkL3NyYydcbmltcG9ydCB7IE1hcmtkb3duUGFyc2VyQ29tcG9uZW50IH0gZnJvbSAnLi4vbWFya2Rvd24tcGFyc2VyL21hcmtkb3duLXBhcnNlci5jb21wb25lbnQnXG5pbXBvcnQge1xuICBFeHBhbmRhYmxlUGFuZWxDb21wb25lbnQsXG4gIE1heExpbmVzQ29tcG9uZW50LFxufSBmcm9tICcuLi8uLi8uLi8uLi8uLi8uLi9saWJzL3VpL2xheW91dC9zcmMnXG5pbXBvcnQgeyBUcmFuc2xhdGVEaXJlY3RpdmUsIFRyYW5zbGF0ZVBpcGUgfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJ1xuaW1wb3J0IHtcbiAgQmFkZ2VDb21wb25lbnQsXG4gIENvcHlUZXh0QnV0dG9uQ29tcG9uZW50LFxufSBmcm9tICcuLi8uLi8uLi8uLi8uLi8uLi9saWJzL3VpL2lucHV0cy9zcmMnXG5pbXBvcnQgeyBDb250ZW50R2hvc3RDb21wb25lbnQgfSBmcm9tICcuLi9jb250ZW50LWdob3N0L2NvbnRlbnQtZ2hvc3QuY29tcG9uZW50J1xuaW1wb3J0IHsgTmdJY29uLCBwcm92aWRlSWNvbnMgfSBmcm9tICdAbmctaWNvbnMvY29yZSdcbmltcG9ydCB7IG1hdE9wZW5Jbk5ldyB9IGZyb20gJ0BuZy1pY29ucy9tYXRlcmlhbC1pY29ucy9iYXNlbGluZSdcbmltcG9ydCB7IG1hdE1haWxPdXRsaW5lIH0gZnJvbSAnQG5nLWljb25zL21hdGVyaWFsLWljb25zL291dGxpbmUnXG5pbXBvcnQgeyBUaHVtYm5haWxDb21wb25lbnQgfSBmcm9tICcuLi90aHVtYm5haWwvdGh1bWJuYWlsLmNvbXBvbmVudCdcbmltcG9ydCB7IEduVWlMaW5raWZ5RGlyZWN0aXZlIH0gZnJvbSAnLi9saW5raWZ5LmRpcmVjdGl2ZSdcblxuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJ1xuaW1wb3J0IHsgU3BhdGlhbEV4dGVudENvbXBvbmVudCB9IGZyb20gJy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvdWkvbWFwL3NyYydcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnZ24tdWktbWV0YWRhdGEtaW5mbycsXG4gIHRlbXBsYXRlVXJsOiAnLi9tZXRhZGF0YS1pbmZvLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vbWV0YWRhdGEtaW5mby5jb21wb25lbnQuY3NzJ10sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbXG4gICAgQ29tbW9uTW9kdWxlLFxuICAgIFRyYW5zbGF0ZURpcmVjdGl2ZSxcbiAgICBUcmFuc2xhdGVQaXBlLFxuICAgIE1hcmtkb3duUGFyc2VyQ29tcG9uZW50LFxuICAgIEV4cGFuZGFibGVQYW5lbENvbXBvbmVudCxcbiAgICBCYWRnZUNvbXBvbmVudCxcbiAgICBDb250ZW50R2hvc3RDb21wb25lbnQsXG4gICAgVGh1bWJuYWlsQ29tcG9uZW50LFxuICAgIE1heExpbmVzQ29tcG9uZW50LFxuICAgIENvcHlUZXh0QnV0dG9uQ29tcG9uZW50LFxuICAgIE5nSWNvbixcbiAgICBHblVpTGlua2lmeURpcmVjdGl2ZSxcbiAgICBTcGF0aWFsRXh0ZW50Q29tcG9uZW50LFxuICBdLFxuICB2aWV3UHJvdmlkZXJzOiBbXG4gICAgcHJvdmlkZUljb25zKHtcbiAgICAgIG1hdE9wZW5Jbk5ldyxcbiAgICAgIG1hdE1haWxPdXRsaW5lLFxuICAgIH0pLFxuICBdLFxufSlcbmV4cG9ydCBjbGFzcyBNZXRhZGF0YUluZm9Db21wb25lbnQge1xuICBASW5wdXQoKSBtZXRhZGF0YTogUGFydGlhbDxDYXRhbG9nUmVjb3JkPlxuICBASW5wdXQoKSBpbmNvbXBsZXRlOiBib29sZWFuXG4gIEBPdXRwdXQoKSBrZXl3b3JkID0gbmV3IEV2ZW50RW1pdHRlcjxLZXl3b3JkPigpXG4gIHVwZGF0ZWRUaW1lczogbnVtYmVyXG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBkYXRlU2VydmljZTogRGF0ZVNlcnZpY2UpIHt9XG5cbiAgZ2V0IGhhc1VzYWdlKCkge1xuICAgIHJldHVybiAoXG4gICAgICB0aGlzLm1ldGFkYXRhLmV4dHJhcz8uaXNPcGVuRGF0YSA9PT0gdHJ1ZSB8fFxuICAgICAgKHRoaXMubWV0YWRhdGEubGVnYWxDb25zdHJhaW50cz8ubGVuZ3RoID4gMCAmJlxuICAgICAgICB0aGlzLmxlZ2FsQ29uc3RyYWludHMubGVuZ3RoID4gMCkgfHxcbiAgICAgICh0aGlzLm1ldGFkYXRhLm90aGVyQ29uc3RyYWludHM/Lmxlbmd0aCA+IDAgJiZcbiAgICAgICAgdGhpcy5vdGhlckNvbnN0cmFpbnRzLmxlbmd0aCA+IDApIHx8XG4gICAgICAodGhpcy5tZXRhZGF0YS5saWNlbnNlcz8ubGVuZ3RoID4gMCAmJiB0aGlzLmxpY2Vuc2VzLmxlbmd0aCA+IDApXG4gICAgKVxuICB9XG5cbiAgZ2V0IGxlZ2FsQ29uc3RyYWludHMoKSB7XG4gICAgbGV0IGFycmF5ID0gW11cbiAgICBpZiAodGhpcy5tZXRhZGF0YS5sZWdhbENvbnN0cmFpbnRzPy5sZW5ndGgpIHtcbiAgICAgIGNvbnN0IGxpY2Vuc2VzVGV4dHMgPSB0aGlzLm1ldGFkYXRhLmxpY2Vuc2VzLm1hcChcbiAgICAgICAgKGxpY2Vuc2UpID0+IGxpY2Vuc2UudGV4dFxuICAgICAgKVxuICAgICAgYXJyYXkgPSBhcnJheS5jb25jYXQoXG4gICAgICAgIHRoaXMubWV0YWRhdGEubGVnYWxDb25zdHJhaW50c1xuICAgICAgICAgIC5maWx0ZXIoKGMpID0+IGMudGV4dCAmJiAhbGljZW5zZXNUZXh0cy5pbmNsdWRlcyhjLnRleHQpKVxuICAgICAgICAgIC5tYXAoKGMpID0+IGMudGV4dClcbiAgICAgIClcbiAgICB9XG4gICAgcmV0dXJuIGFycmF5XG4gIH1cblxuICBnZXQgb3RoZXJDb25zdHJhaW50cygpIHtcbiAgICBsZXQgYXJyYXkgPSBbXVxuICAgIGlmICh0aGlzLm1ldGFkYXRhLm90aGVyQ29uc3RyYWludHM/Lmxlbmd0aCkge1xuICAgICAgYXJyYXkgPSBhcnJheS5jb25jYXQoXG4gICAgICAgIHRoaXMubWV0YWRhdGEub3RoZXJDb25zdHJhaW50cy5maWx0ZXIoKGMpID0+IGMudGV4dCkubWFwKChjKSA9PiBjLnRleHQpXG4gICAgICApXG4gICAgfVxuICAgIHJldHVybiBhcnJheVxuICB9XG5cbiAgZ2V0IGxpY2Vuc2VzKCk6IHsgdGV4dDogc3RyaW5nOyB1cmw6IHN0cmluZyB9W10ge1xuICAgIGxldCBhcnJheSA9IFtdXG4gICAgaWYgKHRoaXMubWV0YWRhdGEubGljZW5zZXM/Lmxlbmd0aCkge1xuICAgICAgYXJyYXkgPSBhcnJheS5jb25jYXQoXG4gICAgICAgIHRoaXMubWV0YWRhdGEubGljZW5zZXNcbiAgICAgICAgICAuZmlsdGVyKChjKSA9PiBjLnRleHQpXG4gICAgICAgICAgLm1hcCgoYykgPT4gKHsgdGV4dDogYy50ZXh0LCB1cmw6IGMudXJsIH0pKVxuICAgICAgKVxuICAgIH1cbiAgICByZXR1cm4gYXJyYXlcbiAgfVxuXG4gIGdldCB1cGRhdGVGcmVxdWVuY3koKTogc3RyaW5nIHtcbiAgICBpZiAodGhpcy5tZXRhZGF0YS51cGRhdGVGcmVxdWVuY3kgaW5zdGFuY2VvZiBPYmplY3QpIHtcbiAgICAgIHRoaXMudXBkYXRlZFRpbWVzID0gdGhpcy5tZXRhZGF0YS51cGRhdGVGcmVxdWVuY3kudXBkYXRlZFRpbWVzXG4gICAgICByZXR1cm4gYGRvbWFpbi5yZWNvcmQudXBkYXRlRnJlcXVlbmN5LiR7dGhpcy5tZXRhZGF0YS51cGRhdGVGcmVxdWVuY3kucGVyfWBcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiB0aGlzLm1ldGFkYXRhLnVwZGF0ZUZyZXF1ZW5jeSA9PT0gJ3N0cmluZycpIHtcbiAgICAgIHJldHVybiBgZG9tYWluLnJlY29yZC51cGRhdGVGcmVxdWVuY3kuJHt0aGlzLm1ldGFkYXRhLnVwZGF0ZUZyZXF1ZW5jeX1gXG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWRcbiAgICB9XG4gIH1cblxuICBnZXQgdGVtcG9yYWxFeHRlbnQoKTogeyBzdGFydDogc3RyaW5nOyBlbmQ6IHN0cmluZyB9IHtcbiAgICBjb25zdCB0ZW1wb3JhbEV4dGVudHMgPVxuICAgICAgdGhpcy5tZXRhZGF0YS5raW5kID09PSAnZGF0YXNldCcgPyB0aGlzLm1ldGFkYXRhLnRlbXBvcmFsRXh0ZW50cyA6IFtdXG4gICAgcmV0dXJuIGdldFRlbXBvcmFsUmFuZ2VVbmlvbih0ZW1wb3JhbEV4dGVudHMsIHRoaXMuZGF0ZVNlcnZpY2UpXG4gIH1cblxuICBnZXQgc2hvd25Pcmdhbml6YXRpb24oKSB7XG4gICAgcmV0dXJuIHRoaXMubWV0YWRhdGEub3duZXJPcmdhbml6YXRpb25cbiAgfVxuXG4gIGdldCByZXNvdXJjZUNvbnRhY3QoKSB7XG4gICAgcmV0dXJuIHRoaXMubWV0YWRhdGEuY29udGFjdHNGb3JSZXNvdXJjZT8uWzBdXG4gIH1cblxuICBmaWVsZFJlYWR5KHByb3BOYW1lOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gIXRoaXMuaW5jb21wbGV0ZSB8fCBwcm9wTmFtZSBpbiB0aGlzLm1ldGFkYXRhXG4gIH1cblxuICBvbktleXdvcmRDbGljayhrZXl3b3JkOiBLZXl3b3JkKSB7XG4gICAgdGhpcy5rZXl3b3JkLmVtaXQoa2V5d29yZClcbiAgfVxuXG4gIGZvcm1hdERhdGUoZGF0ZTogRGF0ZSk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZGF0ZVNlcnZpY2UuZm9ybWF0RGF0ZShkYXRlKVxuICB9XG5cbiAgZm9ybWF0RGF0ZVRpbWUoZGF0ZTogRGF0ZSk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZGF0ZVNlcnZpY2UuZm9ybWF0RGF0ZVRpbWUoZGF0ZSlcbiAgfVxufVxuIiwiPGRpdiBjbGFzcz1cIm1iLTYgbWQtZGVzY3JpcHRpb24gc206bWItNCBzbTpwci0xNlwiPlxuICA8Z24tdWktY29udGVudC1naG9zdFxuICAgIGdob3N0Q2xhc3M9XCJoLVsxNzhweF1cIlxuICAgIFtzaG93Q29udGVudF09XCJmaWVsZFJlYWR5KCdhYnN0cmFjdCcpXCJcbiAgPlxuICAgIDxnbi11aS1tYXgtbGluZXMgW21heExpbmVzXT1cIjZcIiAqbmdJZj1cIm1ldGFkYXRhLmFic3RyYWN0XCI+XG4gICAgICA8ZGl2IGNsYXNzPVwibWItNlwiPlxuICAgICAgICA8Z24tdWktbWFya2Rvd24tcGFyc2VyXG4gICAgICAgICAgW3RleHRDb250ZW50XT1cIm1ldGFkYXRhLmFic3RyYWN0XCJcbiAgICAgICAgPjwvZ24tdWktbWFya2Rvd24tcGFyc2VyPlxuICAgICAgPC9kaXY+XG4gICAgPC9nbi11aS1tYXgtbGluZXM+XG4gIDwvZ24tdWktY29udGVudC1naG9zdD5cblxuICA8cFxuICAgIGNsYXNzPVwibXQtNiBtYi0zIGZvbnQtbWVkaXVtIHRleHQtYmxhY2sgdGV4dC1zbVwiXG4gICAgdHJhbnNsYXRlXG4gICAgKm5nSWY9XCIhZmllbGRSZWFkeSgna2V5d29yZHMnKSB8fCBtZXRhZGF0YS5rZXl3b3Jkcz8ubGVuZ3RoXCJcbiAgPlxuICAgIHJlY29yZC5tZXRhZGF0YS5rZXl3b3Jkc1xuICA8L3A+XG5cbiAgPGduLXVpLWNvbnRlbnQtZ2hvc3RcbiAgICBnaG9zdENsYXNzPVwiaC1bMzFweF0gdy0zLzRcIlxuICAgIFtzaG93Q29udGVudF09XCJmaWVsZFJlYWR5KCdrZXl3b3JkcycpXCJcbiAgPlxuICAgIDxkaXYgKm5nSWY9XCJtZXRhZGF0YS5rZXl3b3Jkcz8ubGVuZ3RoXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwibWV0YWRhdGEtaW5mby1rZXl3b3JkcyBzbTpwYi00IGZsZXggZmxleC13cmFwIGdhcC0yXCI+XG4gICAgICAgIDxnbi11aS1iYWRnZVxuICAgICAgICAgIGNsYXNzPVwiaW5saW5lLWJsb2NrIGxvd2VyY2FzZVwiXG4gICAgICAgICAgKGNsaWNrKT1cIm9uS2V5d29yZENsaWNrKGtleXdvcmQpXCJcbiAgICAgICAgICBbY2xpY2thYmxlXT1cInRydWVcIlxuICAgICAgICAgICpuZ0Zvcj1cImxldCBrZXl3b3JkIG9mIG1ldGFkYXRhLmtleXdvcmRzXCJcbiAgICAgICAgICA+e3sga2V5d29yZC5sYWJlbCB9fTwvZ24tdWktYmFkZ2VcbiAgICAgICAgPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvZ24tdWktY29udGVudC1naG9zdD5cbjwvZGl2PlxuXG48Z24tdWktZXhwYW5kYWJsZS1wYW5lbFxuICAqbmdJZj1cIlxuICAgIG1ldGFkYXRhLmxpY2Vuc2VzIHx8XG4gICAgbWV0YWRhdGEubGVnYWxDb25zdHJhaW50cyB8fFxuICAgIG1ldGFkYXRhLnNlY3VyaXR5Q29uc3RyYWludHMgfHxcbiAgICBtZXRhZGF0YS5vdGhlckNvbnN0cmFpbnRzXG4gIFwiXG4gIFt0aXRsZV09XCIncmVjb3JkLm1ldGFkYXRhLnVzYWdlJyB8IHRyYW5zbGF0ZVwiXG4gIGRhdGEtdGVzdD1cInVzYWdlLXBhbmVsXCJcbj5cbiAgPGRpdiBjbGFzcz1cImZsZXggZmxleC1jb2wgZ2FwLVsxMHB4XSBtci00IHB5LVsxMnB4XSByb3VuZGVkIHRleHQtZ3JheS05MDBcIj5cbiAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBsaWNlbnNlIG9mIGxpY2Vuc2VzXCI+XG4gICAgICA8ZGl2ICpuZ0lmPVwibGljZW5zZS51cmw7IGVsc2Ugbm9VcmxcIiBjbGFzcz1cInRleHQtcHJpbWFyeVwiPlxuICAgICAgICA8YVxuICAgICAgICAgIFtocmVmXT1cImxpY2Vuc2UudXJsXCJcbiAgICAgICAgICB0YXJnZXQ9XCJfYmxhbmtcIlxuICAgICAgICAgIGNsYXNzPVwiY3Vyc29yLXBvaW50ZXIgaG92ZXI6dW5kZXJsaW5lIHRyYW5zaXRpb24tYWxsXCJcbiAgICAgICAgPlxuICAgICAgICAgIHt7IGxpY2Vuc2UudGV4dCB9fVxuICAgICAgICAgIDxuZy1pY29uXG4gICAgICAgICAgICBjbGFzcz1cIiF3LVsxMnB4XSAhaC1bMTJweF0gIXRleHQtWzEycHhdIG9wYWNpdHktNzUgc2hyaW5rLTBcIlxuICAgICAgICAgICAgbmFtZT1cIm1hdE9wZW5Jbk5ld1wiXG4gICAgICAgICAgPjwvbmctaWNvbj5cbiAgICAgICAgPC9hPlxuICAgICAgPC9kaXY+XG4gICAgICA8bmctdGVtcGxhdGUgI25vVXJsPlxuICAgICAgICA8ZGl2IGNsYXNzPVwidGV4dC1wcmltYXJ5XCIgZ25VaUxpbmtpZnk+XG4gICAgICAgICAge3sgbGljZW5zZS50ZXh0IH19XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwibGVnYWxDb25zdHJhaW50cy5sZW5ndGhcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJtYi02XCI+XG4gICAgICAgIDxnbi11aS1tYXJrZG93bi1wYXJzZXJcbiAgICAgICAgICAqbmdGb3I9XCJsZXQgY29uc3RyYWludCBvZiBsZWdhbENvbnN0cmFpbnRzXCJcbiAgICAgICAgICBbdGV4dENvbnRlbnRdPVwiY29uc3RyYWludFwiXG4gICAgICAgID5cbiAgICAgICAgPC9nbi11aS1tYXJrZG93bi1wYXJzZXI+XG4gICAgICA8L2Rpdj5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwib3RoZXJDb25zdHJhaW50cy5sZW5ndGhcIj5cbiAgICAgIDxkaXYgZ25VaUxpbmtpZnkgKm5nRm9yPVwibGV0IGNvbnN0cmFpbnQgb2Ygb3RoZXJDb25zdHJhaW50c1wiPlxuICAgICAgICA8c3BhblxuICAgICAgICAgIHRyYW5zbGF0ZVxuICAgICAgICAgIGNsYXNzPVwiZm9udC1tZWRpdW0gdGV4dC1ibGFjayB0ZXh0LXNtIG1iLVsycHhdIG10LVsxNnB4XVwiXG4gICAgICAgID5cbiAgICAgICAgICByZWNvcmQubWV0YWRhdGEub3RoZXJDb25zdHJhaW50c1xuICAgICAgICA8L3NwYW4+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJtYi02XCI+XG4gICAgICAgICAgPGduLXVpLW1hcmtkb3duLXBhcnNlciBbdGV4dENvbnRlbnRdPVwiY29uc3RyYWludFwiPlxuICAgICAgICAgIDwvZ24tdWktbWFya2Rvd24tcGFyc2VyPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgPHNwYW4gY2xhc3M9XCJub1VzYWdlXCIgKm5nSWY9XCIhaGFzVXNhZ2VcIj5cbiAgICAgIHt7ICdyZWNvcmQubWV0YWRhdGEubm9Vc2FnZScgfCB0cmFuc2xhdGUgfX1cbiAgICA8L3NwYW4+XG4gIDwvZGl2PlxuPC9nbi11aS1leHBhbmRhYmxlLXBhbmVsPlxuPGduLXVpLWV4cGFuZGFibGUtcGFuZWxcbiAgKm5nSWY9XCJcbiAgICAobWV0YWRhdGEua2luZCA9PT0gJ2RhdGFzZXQnICYmIG1ldGFkYXRhLmxpbmVhZ2UpIHx8XG4gICAgbWV0YWRhdGEucmVzb3VyY2VVcGRhdGVkIHx8XG4gICAgbWV0YWRhdGEudXBkYXRlRnJlcXVlbmN5IHx8XG4gICAgKG1ldGFkYXRhLmtpbmQgPT09ICdkYXRhc2V0JyAmJiBtZXRhZGF0YS5zdGF0dXMpXG4gIFwiXG4gIFt0aXRsZV09XCIncmVjb3JkLm1ldGFkYXRhLmRldGFpbHMnIHwgdHJhbnNsYXRlXCJcbiAgZGF0YS10ZXN0PVwiZGV0YWlscy1wYW5lbFwiXG4+XG4gIDxkaXYgKm5nSWY9XCJtZXRhZGF0YS5saW5lYWdlXCIgY2xhc3M9XCJ0ZXh0LWdyYXktOTAwIGZsZXggZmxleC1jb2wgbXQtNCBnYXAtMlwiPlxuICAgIDxwIGNsYXNzPVwid2hpdGVzcGFjZS1wcmUtbGluZSBicmVhay13b3JkcyB0ZXh0LWdyYXktOTAwXCIgZ25VaUxpbmtpZnk+XG4gICAgICB7eyBtZXRhZGF0YS5saW5lYWdlIH19XG4gICAgPC9wPlxuICA8L2Rpdj5cbiAgPGRpdiBjbGFzcz1cImZsZXggZmxleC1yb3cgZ2FwLTYgbXQtNSBtYi04XCIgKm5nSWY9XCJyZXNvdXJjZUNvbnRhY3RcIj5cbiAgICA8ZGl2XG4gICAgICAqbmdJZj1cInJlc291cmNlQ29udGFjdC5vcmdhbml6YXRpb24/LmxvZ29Vcmw/LmhyZWZcIlxuICAgICAgY2xhc3M9XCJmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciBib3JkZXItc29saWQgYm9yZGVyIGJvcmRlci1ncmF5LTMwMCByb3VuZGVkLW1kIGJnLXdoaXRlIGgtMzIgb3ZlcmZsb3ctaGlkZGVuXCJcbiAgICA+XG4gICAgICA8Z24tdWktdGh1bWJuYWlsXG4gICAgICAgIGNsYXNzPVwicmVsYXRpdmUgaC1mdWxsIHctZnVsbFwiXG4gICAgICAgIFt0aHVtYm5haWxVcmxdPVwicmVzb3VyY2VDb250YWN0Lm9yZ2FuaXphdGlvbi5sb2dvVXJsLmhyZWZcIlxuICAgICAgICBmaXQ9XCJjb250YWluXCJcbiAgICAgID48L2duLXVpLXRodW1ibmFpbD5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LWNvbCBnYXAtMVwiPlxuICAgICAgPHAgY2xhc3M9XCJ0ZXh0LXNtIGZvbnQtbWVkaXVtXCIgdHJhbnNsYXRlPnJlY29yZC5tZXRhZGF0YS5wcm9kdWNlcjwvcD5cbiAgICAgIDxkaXZcbiAgICAgICAgY2xhc3M9XCJ0ZXh0LXByaW1hcnkgZm9udC10aXRsZSB0ZXh0LTIxIG1yLTIgY3Vyc29yLXBvaW50ZXIgaG92ZXI6dW5kZXJsaW5lXCJcbiAgICAgICAgZGF0YS1jeT1cIm9yZ2FuaXphdGlvbi1uYW1lXCJcbiAgICAgID5cbiAgICAgICAge3sgcmVzb3VyY2VDb250YWN0Lm9yZ2FuaXphdGlvbj8ubmFtZSB9fVxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2ICpuZ0lmPVwicmVzb3VyY2VDb250YWN0Lm9yZ2FuaXphdGlvbj8ud2Vic2l0ZVwiPlxuICAgICAgICA8YVxuICAgICAgICAgIFtocmVmXT1cInJlc291cmNlQ29udGFjdC5vcmdhbml6YXRpb24ud2Vic2l0ZVwiXG4gICAgICAgICAgdGFyZ2V0PVwiX2JsYW5rXCJcbiAgICAgICAgICBjbGFzcz1cImNvbnRhY3Qtd2Vic2l0ZSB0ZXh0LXByaW1hcnkgdGV4dC1zbSBjdXJzb3ItcG9pbnRlciBob3Zlcjp1bmRlcmxpbmUgdHJhbnNpdGlvbi1hbGxcIlxuICAgICAgICAgID57eyByZXNvdXJjZUNvbnRhY3Qub3JnYW5pemF0aW9uLndlYnNpdGUgfX1cbiAgICAgICAgICA8bmctaWNvblxuICAgICAgICAgICAgY2xhc3M9XCIhdy1bMTJweF0gIWgtWzEycHhdICF0ZXh0LVsxMnB4XSBvcGFjaXR5LTc1IHNocmluay0wXCJcbiAgICAgICAgICAgIG5hbWU9XCJtYXRPcGVuSW5OZXdcIlxuICAgICAgICAgID48L25nLWljb24+XG4gICAgICAgIDwvYT5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz1cIm10LTRcIiAqbmdJZj1cInJlc291cmNlQ29udGFjdC5lbWFpbFwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleFwiPlxuICAgICAgICAgIDxuZy1pY29uXG4gICAgICAgICAgICBjbGFzcz1cIiF3LTUgIWgtNSAhdGV4dC1bMjBweF0gb3BhY2l0eS03NSBzaHJpbmstMFwiXG4gICAgICAgICAgICBuYW1lPVwibWF0TWFpbE91dGxpbmVcIlxuICAgICAgICAgID48L25nLWljb24+XG4gICAgICAgICAgPGFcbiAgICAgICAgICAgICpuZ0lmPVwicmVzb3VyY2VDb250YWN0LmVtYWlsXCJcbiAgICAgICAgICAgIFtocmVmXT1cIidtYWlsdG86JyArIHJlc291cmNlQ29udGFjdC5lbWFpbFwiXG4gICAgICAgICAgICBjbGFzcz1cInRleHQtc20gaG92ZXI6dW5kZXJsaW5lIG1sLTJcIlxuICAgICAgICAgICAgdGFyZ2V0PVwiX2JsYW5rXCJcbiAgICAgICAgICAgIGRhdGEtY3k9XCJjb250YWN0LWVtYWlsXCJcbiAgICAgICAgICAgID57eyByZXNvdXJjZUNvbnRhY3Q/LmVtYWlsIH19PC9hXG4gICAgICAgICAgPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbiAgPGRpdlxuICAgIGNsYXNzPVwicHktNiBweC02IHJvdW5kZWQgYmctZ3JheS0xMDAgZ3JpZCBncmlkLWNvbHMtMiBnYXAteS02IGdhcC14LVsyMHB4XSB0ZXh0LWdyYXktNzAwXCJcbiAgPlxuICAgIDxkaXYgKm5nSWY9XCJtZXRhZGF0YS5yZXNvdXJjZUNyZWF0ZWRcIj5cbiAgICAgIDxwIGNsYXNzPVwidGV4dC1zbVwiIHRyYW5zbGF0ZT5yZWNvcmQubWV0YWRhdGEuY3JlYXRpb248L3A+XG4gICAgICA8cCBjbGFzcz1cInRleHQtcHJpbWFyeSBmb250LW1lZGl1bSBtdC0xXCI+XG4gICAgICAgIHt7IGZvcm1hdERhdGUobWV0YWRhdGEucmVzb3VyY2VDcmVhdGVkKSB9fVxuICAgICAgPC9wPlxuICAgIDwvZGl2PlxuICAgIDxkaXYgKm5nSWY9XCJtZXRhZGF0YS5yZXNvdXJjZVB1Ymxpc2hlZFwiPlxuICAgICAgPHAgY2xhc3M9XCJ0ZXh0LXNtXCIgdHJhbnNsYXRlPnJlY29yZC5tZXRhZGF0YS5wdWJsaWNhdGlvbjwvcD5cbiAgICAgIDxwIGNsYXNzPVwidGV4dC1wcmltYXJ5IGZvbnQtbWVkaXVtIG10LTFcIj5cbiAgICAgICAge3sgZm9ybWF0RGF0ZShtZXRhZGF0YS5yZXNvdXJjZVB1Ymxpc2hlZCkgfX1cbiAgICAgIDwvcD5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2ICpuZ0lmPVwidXBkYXRlRnJlcXVlbmN5XCI+XG4gICAgICA8cCBjbGFzcz1cInRleHQtc21cIiB0cmFuc2xhdGU+cmVjb3JkLm1ldGFkYXRhLnVwZGF0ZUZyZXF1ZW5jeTwvcD5cbiAgICAgIDxwXG4gICAgICAgIGNsYXNzPVwidGV4dC1wcmltYXJ5IGZvbnQtbWVkaXVtIG10LTEgdXBkYXRlRnJlcXVlbmN5XCJcbiAgICAgICAgdHJhbnNsYXRlXG4gICAgICAgIFt0cmFuc2xhdGVQYXJhbXNdPVwieyBjb3VudDogdXBkYXRlZFRpbWVzIH1cIlxuICAgICAgPlxuICAgICAgICB7eyB1cGRhdGVGcmVxdWVuY3kgfX1cbiAgICAgIDwvcD5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2ICpuZ0lmPVwibWV0YWRhdGEub3RoZXJMYW5ndWFnZXM/Lmxlbmd0aFwiPlxuICAgICAgPHAgY2xhc3M9XCJ0ZXh0LXNtIG1iLTFcIiB0cmFuc2xhdGU+cmVjb3JkLm1ldGFkYXRhLmxhbmd1YWdlczwvcD5cbiAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtcm93IGdhcC0xIGZsZXgtd3JhcFwiPlxuICAgICAgICA8cFxuICAgICAgICAgIGNsYXNzPVwidGV4dC1wcmltYXJ5IGZvbnQtbWVkaXVtXCJcbiAgICAgICAgICB0cmFuc2xhdGVcbiAgICAgICAgICAqbmdGb3I9XCJsZXQgbGFuZ3VhZ2Ugb2YgbWV0YWRhdGEub3RoZXJMYW5ndWFnZXNcIlxuICAgICAgICA+XG4gICAgICAgICAgbGFuZ3VhZ2Uue3sgbGFuZ3VhZ2UgfX1cbiAgICAgICAgPC9wPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gICAgPGRpdiAqbmdJZj1cInRlbXBvcmFsRXh0ZW50XCI+XG4gICAgICA8cCBjbGFzcz1cInRleHQtc21cIiB0cmFuc2xhdGU+cmVjb3JkLm1ldGFkYXRhLnRlbXBvcmFsRXh0ZW50PC9wPlxuICAgICAgPGRpdiBjbGFzcz1cImZsZXggZmxleC1yb3cgZ2FwLTEgbWItMSB0ZXh0LXByaW1hcnkgZm9udC1tZWRpdW1cIj5cbiAgICAgICAgPHBcbiAgICAgICAgICAqbmdJZj1cInRlbXBvcmFsRXh0ZW50LnN0YXJ0ICYmIHRlbXBvcmFsRXh0ZW50LmVuZFwiXG4gICAgICAgICAgdHJhbnNsYXRlXG4gICAgICAgICAgW3RyYW5zbGF0ZVBhcmFtc109XCJ7XG4gICAgICAgICAgICBzdGFydDogdGVtcG9yYWxFeHRlbnQuc3RhcnQsXG4gICAgICAgICAgICBlbmQ6IHRlbXBvcmFsRXh0ZW50LmVuZCxcbiAgICAgICAgICB9XCJcbiAgICAgICAgPlxuICAgICAgICAgIHJlY29yZC5tZXRhZGF0YS50ZW1wb3JhbEV4dGVudC5mcm9tRGF0ZVRvRGF0ZVxuICAgICAgICA8L3A+XG4gICAgICAgIDxwXG4gICAgICAgICAgKm5nSWY9XCJ0ZW1wb3JhbEV4dGVudC5zdGFydCAmJiAhdGVtcG9yYWxFeHRlbnQuZW5kXCJcbiAgICAgICAgICB0cmFuc2xhdGVcbiAgICAgICAgICBbdHJhbnNsYXRlUGFyYW1zXT1cInsgc3RhcnQ6IHRlbXBvcmFsRXh0ZW50LnN0YXJ0IH1cIlxuICAgICAgICA+XG4gICAgICAgICAgcmVjb3JkLm1ldGFkYXRhLnRlbXBvcmFsRXh0ZW50LnNpbmNlRGF0ZVxuICAgICAgICA8L3A+XG4gICAgICAgIDxwXG4gICAgICAgICAgKm5nSWY9XCIhdGVtcG9yYWxFeHRlbnQuc3RhcnQgJiYgdGVtcG9yYWxFeHRlbnQuZW5kXCJcbiAgICAgICAgICB0cmFuc2xhdGVcbiAgICAgICAgICBbdHJhbnNsYXRlUGFyYW1zXT1cInsgZW5kOiB0ZW1wb3JhbEV4dGVudC5lbmQgfVwiXG4gICAgICAgID5cbiAgICAgICAgICByZWNvcmQubWV0YWRhdGEudGVtcG9yYWxFeHRlbnQudW50aWxEYXRlXG4gICAgICAgIDwvcD5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvZ24tdWktZXhwYW5kYWJsZS1wYW5lbD5cbjxnbi11aS1leHBhbmRhYmxlLXBhbmVsXG4gICpuZ0lmPVwiXG4gICAgbWV0YWRhdGEua2luZCAhPT0gJ2RhdGFzZXQnICYmXG4gICAgbWV0YWRhdGEuc3BhdGlhbEV4dGVudHMgJiZcbiAgICBtZXRhZGF0YS5zcGF0aWFsRXh0ZW50cy5sZW5ndGhcbiAgXCJcbiAgW3RpdGxlXT1cIidzZXJ2aWNlLm1ldGFkYXRhLnNwYXRpYWxFeHRlbnQnIHwgdHJhbnNsYXRlXCJcbiAgZGF0YS10ZXN0PVwic3BhdGlhbC1leHRlbnQtcGFuZWxcIlxuPlxuICA8Z24tdWktc3BhdGlhbC1leHRlbnRcbiAgICBjbGFzcz1cImZsZXggaC1bMjcxcHhdIHctZnVsbCByb3VuZGVkLWxnIGJvcmRlciBib3JkZXItZ3JheS0xMDAgbXQtMyBtYi02XCJcbiAgICBbc3BhdGlhbEV4dGVudHNdPVwibWV0YWRhdGEuc3BhdGlhbEV4dGVudHNcIlxuICA+PC9nbi11aS1zcGF0aWFsLWV4dGVudD5cbjwvZ24tdWktZXhwYW5kYWJsZS1wYW5lbD5cbjxnbi11aS1leHBhbmRhYmxlLXBhbmVsXG4gICpuZ0lmPVwibWV0YWRhdGEubGFuZGluZ1BhZ2VcIlxuICBbdGl0bGVdPVwiJ3NlcnZpY2UubWV0YWRhdGEub3RoZXInIHwgdHJhbnNsYXRlXCJcbiAgZGF0YS10ZXN0PVwib3RoZXItcGFuZWxcIlxuPlxuICA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LWNvbCBnYXAtNCBtci00IHB5LTUgcm91bmRlZCB0ZXh0LWdyYXktNzAwXCI+XG4gICAgPGRpdiAqbmdJZj1cIm1ldGFkYXRhLnJlY29yZFVwZGF0ZWRcIj5cbiAgICAgIDxwIGNsYXNzPVwidGV4dC1zbVwiIHRyYW5zbGF0ZT5yZWNvcmQubWV0YWRhdGEudXBkYXRlZE9uPC9wPlxuICAgICAgPHAgY2xhc3M9XCJ0ZXh0LXByaW1hcnkgZm9udC1tZWRpdW1cIj5cbiAgICAgICAge3sgbWV0YWRhdGEucmVjb3JkVXBkYXRlZCAmJiBmb3JtYXREYXRlVGltZShtZXRhZGF0YS5yZWNvcmRVcGRhdGVkKSB9fVxuICAgICAgPC9wPlxuICAgIDwvZGl2PlxuICAgIDxkaXYgKm5nSWY9XCJtZXRhZGF0YS5sYW5kaW5nUGFnZVwiPlxuICAgICAgPHAgY2xhc3M9XCJ0ZXh0LXNtXCIgdHJhbnNsYXRlPnJlY29yZC5tZXRhZGF0YS5zaGVldDwvcD5cbiAgICAgIDxwIGNsYXNzPVwidGV4dC1wcmltYXJ5IGZvbnQtbWVkaXVtXCIgdHJhbnNsYXRlPlxuICAgICAgICA8YSBbaHJlZl09XCJtZXRhZGF0YS5sYW5kaW5nUGFnZVwiIHRhcmdldD1cIl9ibGFua1wiPlxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwiYnJlYWstYWxsXCIgZ25VaUxpbmtpZnk+e3sgbWV0YWRhdGEubGFuZGluZ1BhZ2UgfX08L3NwYW4+XG4gICAgICAgIDwvYT5cbiAgICAgIDwvcD5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2ICpuZ0lmPVwibWV0YWRhdGEub3duZXJPcmdhbml6YXRpb25cIj5cbiAgICAgIDxwIGNsYXNzPVwidGV4dC1zbVwiIHRyYW5zbGF0ZT5yZWNvcmQubWV0YWRhdGEub3duZXI8L3A+XG4gICAgICA8cCBjbGFzcz1cInRleHQtcHJpbWFyeSBmb250LW1lZGl1bVwiPlxuICAgICAgICB7eyBtZXRhZGF0YS5vd25lck9yZ2FuaXphdGlvbi5uYW1lIH19XG4gICAgICA8L3A+XG4gICAgPC9kaXY+XG4gICAgPGRpdiAqbmdJZj1cIm1ldGFkYXRhLnVuaXF1ZUlkZW50aWZpZXJcIj5cbiAgICAgIDxwIGNsYXNzPVwidGV4dC1zbVwiIHRyYW5zbGF0ZT5yZWNvcmQubWV0YWRhdGEudW5pcXVlSWQ8L3A+XG4gICAgICA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LXJvdyBjb250ZW50LWFsaWduIGl0ZW1zLWVuZCBnYXAtMVwiPlxuICAgICAgICA8Z24tdWktY29weS10ZXh0LWJ1dHRvblxuICAgICAgICAgIFt0ZXh0XT1cIm1ldGFkYXRhLnVuaXF1ZUlkZW50aWZpZXJcIlxuICAgICAgICAgIFt0b29sdGlwVGV4dF09XCIndG9vbHRpcC5pZC5jb3B5JyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgW2Rpc3BsYXlUZXh0XT1cImZhbHNlXCJcbiAgICAgICAgPjwvZ24tdWktY29weS10ZXh0LWJ1dHRvbj5cbiAgICAgICAgPHAgY2xhc3M9XCJ0ZXh0LXByaW1hcnkgZm9udC1tZWRpdW1cIj5cbiAgICAgICAgICB7eyBtZXRhZGF0YS51bmlxdWVJZGVudGlmaWVyIH19XG4gICAgICAgIDwvcD5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICAgIDxkaXYgKm5nSWY9XCJtZXRhZGF0YS50b3BpY3M/Lmxlbmd0aFwiPlxuICAgICAgPHAgY2xhc3M9XCJ0ZXh0LXNtIG1iLTFcIiB0cmFuc2xhdGU+cmVjb3JkLm1ldGFkYXRhLnRvcGljczwvcD5cbiAgICAgIDxkaXYgY2xhc3M9XCJzbTpwYi00IHNtOnByLTE2XCI+XG4gICAgICAgIDxnbi11aS1iYWRnZVxuICAgICAgICAgIFtjbGlja2FibGVdPVwiZmFsc2VcIlxuICAgICAgICAgIGNsYXNzPVwiaW5saW5lLWJsb2NrIG1yLTIgbWItMiBsb3dlcmNhc2VcIlxuICAgICAgICAgICpuZ0Zvcj1cImxldCB0b3BpYyBvZiBtZXRhZGF0YS50b3BpY3NcIlxuICAgICAgICAgID57eyB0b3BpYyB9fTwvZ24tdWktYmFkZ2VcbiAgICAgICAgPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuPC9nbi11aS1leHBhbmRhYmxlLXBhbmVsPlxuIl19
128
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWV0YWRhdGEtaW5mby5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL3VpL2VsZW1lbnRzL3NyYy9saWIvbWV0YWRhdGEtaW5mby9tZXRhZGF0YS1pbmZvLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvdWkvZWxlbWVudHMvc3JjL2xpYi9tZXRhZGF0YS1pbmZvL21ldGFkYXRhLWluZm8uY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLHVCQUF1QixFQUN2QixTQUFTLEVBQ1QsWUFBWSxFQUNaLEtBQUssRUFDTCxNQUFNLEdBQ1AsTUFBTSxlQUFlLENBQUE7QUFLdEIsT0FBTyxFQUFFLFdBQVcsRUFBRSxxQkFBcUIsRUFBRSxNQUFNLHdDQUF3QyxDQUFBO0FBQzNGLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLDhDQUE4QyxDQUFBO0FBQ3RGLE9BQU8sRUFDTCx3QkFBd0IsRUFDeEIsaUJBQWlCLEdBQ2xCLE1BQU0sc0NBQXNDLENBQUE7QUFDN0MsT0FBTyxFQUFFLGtCQUFrQixFQUFFLGFBQWEsRUFBRSxNQUFNLHFCQUFxQixDQUFBO0FBQ3ZFLE9BQU8sRUFDTCxjQUFjLEVBQ2QsdUJBQXVCLEdBQ3hCLE1BQU0sc0NBQXNDLENBQUE7QUFDN0MsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sMENBQTBDLENBQUE7QUFDaEYsT0FBTyxFQUFFLE1BQU0sRUFBRSxZQUFZLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQTtBQUNyRCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sbUNBQW1DLENBQUE7QUFDaEUsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGtDQUFrQyxDQUFBO0FBQ2pFLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLGtDQUFrQyxDQUFBO0FBQ3JFLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLHFCQUFxQixDQUFBO0FBRTFELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQTtBQUM5QyxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQTs7OztBQThCMUUsTUFBTSxPQUFPLHFCQUFxQjtJQU1oQyxZQUFvQixXQUF3QjtRQUF4QixnQkFBVyxHQUFYLFdBQVcsQ0FBYTtRQUhsQyxZQUFPLEdBQUcsSUFBSSxZQUFZLEVBQVcsQ0FBQTtJQUdBLENBQUM7SUFFaEQsSUFBSSxRQUFRO1FBQ1YsT0FBTyxDQUNMLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxFQUFFLFVBQVUsS0FBSyxJQUFJO1lBQ3pDLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxnQkFBZ0IsRUFBRSxNQUFNLEdBQUcsQ0FBQztnQkFDekMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7WUFDbkMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLGdCQUFnQixFQUFFLE1BQU0sR0FBRyxDQUFDO2dCQUN6QyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztZQUNuQyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxFQUFFLE1BQU0sR0FBRyxDQUFDLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQ2pFLENBQUE7SUFDSCxDQUFDO0lBRUQsSUFBSSxnQkFBZ0I7UUFDbEIsSUFBSSxLQUFLLEdBQUcsRUFBRSxDQUFBO1FBQ2QsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLGdCQUFnQixFQUFFLE1BQU0sRUFBRSxDQUFDO1lBQzNDLE1BQU0sYUFBYSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FDOUMsQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQzFCLENBQUE7WUFDRCxLQUFLLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FDbEIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxnQkFBZ0I7aUJBQzNCLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLGFBQWEsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDO2lCQUN4RCxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FDdEIsQ0FBQTtRQUNILENBQUM7UUFDRCxPQUFPLEtBQUssQ0FBQTtJQUNkLENBQUM7SUFFRCxJQUFJLGdCQUFnQjtRQUNsQixJQUFJLEtBQUssR0FBRyxFQUFFLENBQUE7UUFDZCxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsZ0JBQWdCLEVBQUUsTUFBTSxFQUFFLENBQUM7WUFDM0MsS0FBSyxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQ2xCLElBQUksQ0FBQyxRQUFRLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQ3hFLENBQUE7UUFDSCxDQUFDO1FBQ0QsT0FBTyxLQUFLLENBQUE7SUFDZCxDQUFDO0lBRUQsSUFBSSxRQUFRO1FBQ1YsSUFBSSxLQUFLLEdBQUcsRUFBRSxDQUFBO1FBQ2QsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsRUFBRSxNQUFNLEVBQUUsQ0FBQztZQUNuQyxLQUFLLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FDbEIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRO2lCQUNuQixNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7aUJBQ3JCLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsSUFBSSxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUM5QyxDQUFBO1FBQ0gsQ0FBQztRQUNELE9BQU8sS0FBSyxDQUFBO0lBQ2QsQ0FBQztJQUVELElBQUksZUFBZTtRQUNqQixJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsZUFBZSxZQUFZLE1BQU0sRUFBRSxDQUFDO1lBQ3BELElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxlQUFlLENBQUMsWUFBWSxDQUFBO1lBQzlELE9BQU8saUNBQWlDLElBQUksQ0FBQyxRQUFRLENBQUMsZUFBZSxDQUFDLEdBQUcsRUFBRSxDQUFBO1FBQzdFLENBQUM7YUFBTSxJQUFJLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQyxlQUFlLEtBQUssUUFBUSxFQUFFLENBQUM7WUFDN0QsT0FBTyxpQ0FBaUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxlQUFlLEVBQUUsQ0FBQTtRQUN6RSxDQUFDO2FBQU0sQ0FBQztZQUNOLE9BQU8sU0FBUyxDQUFBO1FBQ2xCLENBQUM7SUFDSCxDQUFDO0lBRUQsSUFBSSxjQUFjO1FBQ2hCLE1BQU0sZUFBZSxHQUNuQixJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksS0FBSyxTQUFTLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUE7UUFDdkUsT0FBTyxxQkFBcUIsQ0FBQyxlQUFlLEVBQUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFBO0lBQ2pFLENBQUM7SUFFRCxJQUFJLGlCQUFpQjtRQUNuQixPQUFPLElBQUksQ0FBQyxRQUFRLENBQUMsaUJBQWlCLENBQUE7SUFDeEMsQ0FBQztJQUVELElBQUksZUFBZTtRQUNqQixPQUFPLElBQUksQ0FBQyxRQUFRLENBQUMsbUJBQW1CLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQTtJQUMvQyxDQUFDO0lBRUQsVUFBVSxDQUFDLFFBQWdCO1FBQ3pCLE9BQU8sQ0FBQyxJQUFJLENBQUMsVUFBVSxJQUFJLFFBQVEsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFBO0lBQ3RELENBQUM7SUFFRCxjQUFjLENBQUMsT0FBZ0I7UUFDN0IsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUE7SUFDNUIsQ0FBQztJQUVELFVBQVUsQ0FBQyxJQUFVO1FBQ25CLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUE7SUFDMUMsQ0FBQztJQUVELGNBQWMsQ0FBQyxJQUFVO1FBQ3ZCLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLENBQUE7SUFDOUMsQ0FBQzsrR0EvRlUscUJBQXFCO21HQUFyQixxQkFBcUIsNEtDNURsQyxvb1VBMFNBLDRmRG5RSSxZQUFZLGdRQUNaLGtCQUFrQiw2R0FDbEIsYUFBYSxrREFDYix1QkFBdUIsNEdBQ3ZCLHdCQUF3QixnSEFDeEIsY0FBYyw2SEFDZCxxQkFBcUIsdUdBQ3JCLGtCQUFrQiw0SEFDbEIsaUJBQWlCLGtGQUNqQix1QkFBdUIsMkhBQ3ZCLE1BQU0sNkdBQ04sb0JBQW9CLDBEQUNwQixzQkFBc0Isa0ZBRVQ7WUFDYixZQUFZLENBQUM7Z0JBQ1gsWUFBWTtnQkFDWixjQUFjO2FBQ2YsQ0FBQztTQUNIOzs0RkFFVSxxQkFBcUI7a0JBNUJqQyxTQUFTOytCQUNFLHFCQUFxQixtQkFHZCx1QkFBdUIsQ0FBQyxNQUFNLGNBQ25DLElBQUksV0FDUDt3QkFDUCxZQUFZO3dCQUNaLGtCQUFrQjt3QkFDbEIsYUFBYTt3QkFDYix1QkFBdUI7d0JBQ3ZCLHdCQUF3Qjt3QkFDeEIsY0FBYzt3QkFDZCxxQkFBcUI7d0JBQ3JCLGtCQUFrQjt3QkFDbEIsaUJBQWlCO3dCQUNqQix1QkFBdUI7d0JBQ3ZCLE1BQU07d0JBQ04sb0JBQW9CO3dCQUNwQixzQkFBc0I7cUJBQ3ZCLGlCQUNjO3dCQUNiLFlBQVksQ0FBQzs0QkFDWCxZQUFZOzRCQUNaLGNBQWM7eUJBQ2YsQ0FBQztxQkFDSDtnRkFHUSxRQUFRO3NCQUFoQixLQUFLO2dCQUNHLFVBQVU7c0JBQWxCLEtBQUs7Z0JBQ0ksT0FBTztzQkFBaEIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBDb21wb25lbnQsXG4gIEV2ZW50RW1pdHRlcixcbiAgSW5wdXQsXG4gIE91dHB1dCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSdcbmltcG9ydCB7XG4gIENhdGFsb2dSZWNvcmQsXG4gIEtleXdvcmQsXG59IGZyb20gJy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY29tbW9uL2RvbWFpbi9zcmMvbGliL21vZGVsL3JlY29yZCdcbmltcG9ydCB7IERhdGVTZXJ2aWNlLCBnZXRUZW1wb3JhbFJhbmdlVW5pb24gfSBmcm9tICcuLi8uLi8uLi8uLi8uLi8uLi9saWJzL3V0aWwvc2hhcmVkL3NyYydcbmltcG9ydCB7IE1hcmtkb3duUGFyc2VyQ29tcG9uZW50IH0gZnJvbSAnLi4vbWFya2Rvd24tcGFyc2VyL21hcmtkb3duLXBhcnNlci5jb21wb25lbnQnXG5pbXBvcnQge1xuICBFeHBhbmRhYmxlUGFuZWxDb21wb25lbnQsXG4gIE1heExpbmVzQ29tcG9uZW50LFxufSBmcm9tICcuLi8uLi8uLi8uLi8uLi8uLi9saWJzL3VpL2xheW91dC9zcmMnXG5pbXBvcnQgeyBUcmFuc2xhdGVEaXJlY3RpdmUsIFRyYW5zbGF0ZVBpcGUgfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJ1xuaW1wb3J0IHtcbiAgQmFkZ2VDb21wb25lbnQsXG4gIENvcHlUZXh0QnV0dG9uQ29tcG9uZW50LFxufSBmcm9tICcuLi8uLi8uLi8uLi8uLi8uLi9saWJzL3VpL2lucHV0cy9zcmMnXG5pbXBvcnQgeyBDb250ZW50R2hvc3RDb21wb25lbnQgfSBmcm9tICcuLi9jb250ZW50LWdob3N0L2NvbnRlbnQtZ2hvc3QuY29tcG9uZW50J1xuaW1wb3J0IHsgTmdJY29uLCBwcm92aWRlSWNvbnMgfSBmcm9tICdAbmctaWNvbnMvY29yZSdcbmltcG9ydCB7IG1hdE9wZW5Jbk5ldyB9IGZyb20gJ0BuZy1pY29ucy9tYXRlcmlhbC1pY29ucy9iYXNlbGluZSdcbmltcG9ydCB7IG1hdE1haWxPdXRsaW5lIH0gZnJvbSAnQG5nLWljb25zL21hdGVyaWFsLWljb25zL291dGxpbmUnXG5pbXBvcnQgeyBUaHVtYm5haWxDb21wb25lbnQgfSBmcm9tICcuLi90aHVtYm5haWwvdGh1bWJuYWlsLmNvbXBvbmVudCdcbmltcG9ydCB7IEduVWlMaW5raWZ5RGlyZWN0aXZlIH0gZnJvbSAnLi9saW5raWZ5LmRpcmVjdGl2ZSdcblxuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJ1xuaW1wb3J0IHsgU3BhdGlhbEV4dGVudENvbXBvbmVudCB9IGZyb20gJy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvdWkvbWFwL3NyYydcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnZ24tdWktbWV0YWRhdGEtaW5mbycsXG4gIHRlbXBsYXRlVXJsOiAnLi9tZXRhZGF0YS1pbmZvLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vbWV0YWRhdGEtaW5mby5jb21wb25lbnQuY3NzJ10sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbXG4gICAgQ29tbW9uTW9kdWxlLFxuICAgIFRyYW5zbGF0ZURpcmVjdGl2ZSxcbiAgICBUcmFuc2xhdGVQaXBlLFxuICAgIE1hcmtkb3duUGFyc2VyQ29tcG9uZW50LFxuICAgIEV4cGFuZGFibGVQYW5lbENvbXBvbmVudCxcbiAgICBCYWRnZUNvbXBvbmVudCxcbiAgICBDb250ZW50R2hvc3RDb21wb25lbnQsXG4gICAgVGh1bWJuYWlsQ29tcG9uZW50LFxuICAgIE1heExpbmVzQ29tcG9uZW50LFxuICAgIENvcHlUZXh0QnV0dG9uQ29tcG9uZW50LFxuICAgIE5nSWNvbixcbiAgICBHblVpTGlua2lmeURpcmVjdGl2ZSxcbiAgICBTcGF0aWFsRXh0ZW50Q29tcG9uZW50LFxuICBdLFxuICB2aWV3UHJvdmlkZXJzOiBbXG4gICAgcHJvdmlkZUljb25zKHtcbiAgICAgIG1hdE9wZW5Jbk5ldyxcbiAgICAgIG1hdE1haWxPdXRsaW5lLFxuICAgIH0pLFxuICBdLFxufSlcbmV4cG9ydCBjbGFzcyBNZXRhZGF0YUluZm9Db21wb25lbnQge1xuICBASW5wdXQoKSBtZXRhZGF0YTogUGFydGlhbDxDYXRhbG9nUmVjb3JkPlxuICBASW5wdXQoKSBpbmNvbXBsZXRlOiBib29sZWFuXG4gIEBPdXRwdXQoKSBrZXl3b3JkID0gbmV3IEV2ZW50RW1pdHRlcjxLZXl3b3JkPigpXG4gIHVwZGF0ZWRUaW1lczogbnVtYmVyXG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBkYXRlU2VydmljZTogRGF0ZVNlcnZpY2UpIHt9XG5cbiAgZ2V0IGhhc1VzYWdlKCkge1xuICAgIHJldHVybiAoXG4gICAgICB0aGlzLm1ldGFkYXRhLmV4dHJhcz8uaXNPcGVuRGF0YSA9PT0gdHJ1ZSB8fFxuICAgICAgKHRoaXMubWV0YWRhdGEubGVnYWxDb25zdHJhaW50cz8ubGVuZ3RoID4gMCAmJlxuICAgICAgICB0aGlzLmxlZ2FsQ29uc3RyYWludHMubGVuZ3RoID4gMCkgfHxcbiAgICAgICh0aGlzLm1ldGFkYXRhLm90aGVyQ29uc3RyYWludHM/Lmxlbmd0aCA+IDAgJiZcbiAgICAgICAgdGhpcy5vdGhlckNvbnN0cmFpbnRzLmxlbmd0aCA+IDApIHx8XG4gICAgICAodGhpcy5tZXRhZGF0YS5saWNlbnNlcz8ubGVuZ3RoID4gMCAmJiB0aGlzLmxpY2Vuc2VzLmxlbmd0aCA+IDApXG4gICAgKVxuICB9XG5cbiAgZ2V0IGxlZ2FsQ29uc3RyYWludHMoKSB7XG4gICAgbGV0IGFycmF5ID0gW11cbiAgICBpZiAodGhpcy5tZXRhZGF0YS5sZWdhbENvbnN0cmFpbnRzPy5sZW5ndGgpIHtcbiAgICAgIGNvbnN0IGxpY2Vuc2VzVGV4dHMgPSB0aGlzLm1ldGFkYXRhLmxpY2Vuc2VzLm1hcChcbiAgICAgICAgKGxpY2Vuc2UpID0+IGxpY2Vuc2UudGV4dFxuICAgICAgKVxuICAgICAgYXJyYXkgPSBhcnJheS5jb25jYXQoXG4gICAgICAgIHRoaXMubWV0YWRhdGEubGVnYWxDb25zdHJhaW50c1xuICAgICAgICAgIC5maWx0ZXIoKGMpID0+IGMudGV4dCAmJiAhbGljZW5zZXNUZXh0cy5pbmNsdWRlcyhjLnRleHQpKVxuICAgICAgICAgIC5tYXAoKGMpID0+IGMudGV4dClcbiAgICAgIClcbiAgICB9XG4gICAgcmV0dXJuIGFycmF5XG4gIH1cblxuICBnZXQgb3RoZXJDb25zdHJhaW50cygpIHtcbiAgICBsZXQgYXJyYXkgPSBbXVxuICAgIGlmICh0aGlzLm1ldGFkYXRhLm90aGVyQ29uc3RyYWludHM/Lmxlbmd0aCkge1xuICAgICAgYXJyYXkgPSBhcnJheS5jb25jYXQoXG4gICAgICAgIHRoaXMubWV0YWRhdGEub3RoZXJDb25zdHJhaW50cy5maWx0ZXIoKGMpID0+IGMudGV4dCkubWFwKChjKSA9PiBjLnRleHQpXG4gICAgICApXG4gICAgfVxuICAgIHJldHVybiBhcnJheVxuICB9XG5cbiAgZ2V0IGxpY2Vuc2VzKCk6IHsgdGV4dDogc3RyaW5nOyB1cmw6IHN0cmluZyB9W10ge1xuICAgIGxldCBhcnJheSA9IFtdXG4gICAgaWYgKHRoaXMubWV0YWRhdGEubGljZW5zZXM/Lmxlbmd0aCkge1xuICAgICAgYXJyYXkgPSBhcnJheS5jb25jYXQoXG4gICAgICAgIHRoaXMubWV0YWRhdGEubGljZW5zZXNcbiAgICAgICAgICAuZmlsdGVyKChjKSA9PiBjLnRleHQpXG4gICAgICAgICAgLm1hcCgoYykgPT4gKHsgdGV4dDogYy50ZXh0LCB1cmw6IGMudXJsIH0pKVxuICAgICAgKVxuICAgIH1cbiAgICByZXR1cm4gYXJyYXlcbiAgfVxuXG4gIGdldCB1cGRhdGVGcmVxdWVuY3koKTogc3RyaW5nIHtcbiAgICBpZiAodGhpcy5tZXRhZGF0YS51cGRhdGVGcmVxdWVuY3kgaW5zdGFuY2VvZiBPYmplY3QpIHtcbiAgICAgIHRoaXMudXBkYXRlZFRpbWVzID0gdGhpcy5tZXRhZGF0YS51cGRhdGVGcmVxdWVuY3kudXBkYXRlZFRpbWVzXG4gICAgICByZXR1cm4gYGRvbWFpbi5yZWNvcmQudXBkYXRlRnJlcXVlbmN5LiR7dGhpcy5tZXRhZGF0YS51cGRhdGVGcmVxdWVuY3kucGVyfWBcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiB0aGlzLm1ldGFkYXRhLnVwZGF0ZUZyZXF1ZW5jeSA9PT0gJ3N0cmluZycpIHtcbiAgICAgIHJldHVybiBgZG9tYWluLnJlY29yZC51cGRhdGVGcmVxdWVuY3kuJHt0aGlzLm1ldGFkYXRhLnVwZGF0ZUZyZXF1ZW5jeX1gXG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWRcbiAgICB9XG4gIH1cblxuICBnZXQgdGVtcG9yYWxFeHRlbnQoKTogeyBzdGFydDogc3RyaW5nOyBlbmQ6IHN0cmluZyB9IHtcbiAgICBjb25zdCB0ZW1wb3JhbEV4dGVudHMgPVxuICAgICAgdGhpcy5tZXRhZGF0YS5raW5kID09PSAnZGF0YXNldCcgPyB0aGlzLm1ldGFkYXRhLnRlbXBvcmFsRXh0ZW50cyA6IFtdXG4gICAgcmV0dXJuIGdldFRlbXBvcmFsUmFuZ2VVbmlvbih0ZW1wb3JhbEV4dGVudHMsIHRoaXMuZGF0ZVNlcnZpY2UpXG4gIH1cblxuICBnZXQgc2hvd25Pcmdhbml6YXRpb24oKSB7XG4gICAgcmV0dXJuIHRoaXMubWV0YWRhdGEub3duZXJPcmdhbml6YXRpb25cbiAgfVxuXG4gIGdldCByZXNvdXJjZUNvbnRhY3QoKSB7XG4gICAgcmV0dXJuIHRoaXMubWV0YWRhdGEuY29udGFjdHNGb3JSZXNvdXJjZT8uWzBdXG4gIH1cblxuICBmaWVsZFJlYWR5KHByb3BOYW1lOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gIXRoaXMuaW5jb21wbGV0ZSB8fCBwcm9wTmFtZSBpbiB0aGlzLm1ldGFkYXRhXG4gIH1cblxuICBvbktleXdvcmRDbGljayhrZXl3b3JkOiBLZXl3b3JkKSB7XG4gICAgdGhpcy5rZXl3b3JkLmVtaXQoa2V5d29yZClcbiAgfVxuXG4gIGZvcm1hdERhdGUoZGF0ZTogRGF0ZSk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZGF0ZVNlcnZpY2UuZm9ybWF0RGF0ZShkYXRlKVxuICB9XG5cbiAgZm9ybWF0RGF0ZVRpbWUoZGF0ZTogRGF0ZSk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZGF0ZVNlcnZpY2UuZm9ybWF0RGF0ZVRpbWUoZGF0ZSlcbiAgfVxufVxuIiwiPGRpdiBjbGFzcz1cIm1iLTYgbWQtZGVzY3JpcHRpb24gc206bWItNCBzbTpwci0xNlwiPlxuICA8Z24tdWktY29udGVudC1naG9zdFxuICAgIGdob3N0Q2xhc3M9XCJoLVsxNzhweF1cIlxuICAgIFtzaG93Q29udGVudF09XCJmaWVsZFJlYWR5KCdhYnN0cmFjdCcpXCJcbiAgPlxuICAgIDxnbi11aS1tYXgtbGluZXMgW21heExpbmVzXT1cIjZcIiAqbmdJZj1cIm1ldGFkYXRhLmFic3RyYWN0XCI+XG4gICAgICA8ZGl2IGNsYXNzPVwibWItNlwiPlxuICAgICAgICA8Z24tdWktbWFya2Rvd24tcGFyc2VyXG4gICAgICAgICAgW3RleHRDb250ZW50XT1cIm1ldGFkYXRhLmFic3RyYWN0XCJcbiAgICAgICAgPjwvZ24tdWktbWFya2Rvd24tcGFyc2VyPlxuICAgICAgPC9kaXY+XG4gICAgPC9nbi11aS1tYXgtbGluZXM+XG4gIDwvZ24tdWktY29udGVudC1naG9zdD5cblxuICA8cFxuICAgIGNsYXNzPVwibXQtNiBtYi0zIGZvbnQtbWVkaXVtIHRleHQtYmxhY2sgdGV4dC1zbVwiXG4gICAgdHJhbnNsYXRlXG4gICAgKm5nSWY9XCIhZmllbGRSZWFkeSgna2V5d29yZHMnKSB8fCBtZXRhZGF0YS5rZXl3b3Jkcz8ubGVuZ3RoXCJcbiAgPlxuICAgIHJlY29yZC5tZXRhZGF0YS5rZXl3b3Jkc1xuICA8L3A+XG5cbiAgPGduLXVpLWNvbnRlbnQtZ2hvc3RcbiAgICBnaG9zdENsYXNzPVwiaC1bMzFweF0gdy0zLzRcIlxuICAgIFtzaG93Q29udGVudF09XCJmaWVsZFJlYWR5KCdrZXl3b3JkcycpXCJcbiAgPlxuICAgIDxnbi11aS1tYXgtbGluZXMgW21heExpbmVzXT1cIjdcIiAqbmdJZj1cIm1ldGFkYXRhLmtleXdvcmRzPy5sZW5ndGhcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJtZXRhZGF0YS1pbmZvLWtleXdvcmRzIHNtOnBiLTQgZmxleCBmbGV4LXdyYXAgZ2FwLTJcIj5cbiAgICAgICAgPGduLXVpLWJhZGdlXG4gICAgICAgICAgY2xhc3M9XCJpbmxpbmUtYmxvY2sgbG93ZXJjYXNlXCJcbiAgICAgICAgICAoY2xpY2spPVwib25LZXl3b3JkQ2xpY2soa2V5d29yZClcIlxuICAgICAgICAgIFtjbGlja2FibGVdPVwidHJ1ZVwiXG4gICAgICAgICAgKm5nRm9yPVwibGV0IGtleXdvcmQgb2YgbWV0YWRhdGEua2V5d29yZHNcIlxuICAgICAgICAgID57eyBrZXl3b3JkLmxhYmVsIH19PC9nbi11aS1iYWRnZVxuICAgICAgICA+XG4gICAgICA8L2Rpdj5cbiAgICA8L2duLXVpLW1heC1saW5lcz5cbiAgPC9nbi11aS1jb250ZW50LWdob3N0PlxuPC9kaXY+XG5cbjxnbi11aS1leHBhbmRhYmxlLXBhbmVsXG4gICpuZ0lmPVwiXG4gICAgbWV0YWRhdGEubGljZW5zZXMgfHxcbiAgICBtZXRhZGF0YS5sZWdhbENvbnN0cmFpbnRzIHx8XG4gICAgbWV0YWRhdGEuc2VjdXJpdHlDb25zdHJhaW50cyB8fFxuICAgIG1ldGFkYXRhLm90aGVyQ29uc3RyYWludHNcbiAgXCJcbiAgW3RpdGxlXT1cIidyZWNvcmQubWV0YWRhdGEudXNhZ2UnIHwgdHJhbnNsYXRlXCJcbiAgZGF0YS10ZXN0PVwidXNhZ2UtcGFuZWxcIlxuPlxuICA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LWNvbCBnYXAtWzEwcHhdIG1yLTQgcHktWzEycHhdIHJvdW5kZWQgdGV4dC1ncmF5LTkwMFwiPlxuICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGxpY2Vuc2Ugb2YgbGljZW5zZXNcIj5cbiAgICAgIDxkaXYgKm5nSWY9XCJsaWNlbnNlLnVybDsgZWxzZSBub1VybFwiIGNsYXNzPVwidGV4dC1wcmltYXJ5XCI+XG4gICAgICAgIDxhXG4gICAgICAgICAgW2hyZWZdPVwibGljZW5zZS51cmxcIlxuICAgICAgICAgIHRhcmdldD1cIl9ibGFua1wiXG4gICAgICAgICAgY2xhc3M9XCJjdXJzb3ItcG9pbnRlciBob3Zlcjp1bmRlcmxpbmUgdHJhbnNpdGlvbi1hbGxcIlxuICAgICAgICA+XG4gICAgICAgICAge3sgbGljZW5zZS50ZXh0IH19XG4gICAgICAgICAgPG5nLWljb25cbiAgICAgICAgICAgIGNsYXNzPVwiIXctWzEycHhdICFoLVsxMnB4XSAhdGV4dC1bMTJweF0gb3BhY2l0eS03NSBzaHJpbmstMFwiXG4gICAgICAgICAgICBuYW1lPVwibWF0T3BlbkluTmV3XCJcbiAgICAgICAgICA+PC9uZy1pY29uPlxuICAgICAgICA8L2E+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxuZy10ZW1wbGF0ZSAjbm9Vcmw+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LXByaW1hcnlcIiBnblVpTGlua2lmeT5cbiAgICAgICAgICB7eyBsaWNlbnNlLnRleHQgfX1cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L25nLXRlbXBsYXRlPlxuICAgIDwvbmctY29udGFpbmVyPlxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJsZWdhbENvbnN0cmFpbnRzLmxlbmd0aFwiPlxuICAgICAgPGRpdiBjbGFzcz1cIm1iLTZcIj5cbiAgICAgICAgPGduLXVpLW1hcmtkb3duLXBhcnNlclxuICAgICAgICAgICpuZ0Zvcj1cImxldCBjb25zdHJhaW50IG9mIGxlZ2FsQ29uc3RyYWludHNcIlxuICAgICAgICAgIFt0ZXh0Q29udGVudF09XCJjb25zdHJhaW50XCJcbiAgICAgICAgPlxuICAgICAgICA8L2duLXVpLW1hcmtkb3duLXBhcnNlcj5cbiAgICAgIDwvZGl2PlxuICAgIDwvbmctY29udGFpbmVyPlxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJvdGhlckNvbnN0cmFpbnRzLmxlbmd0aFwiPlxuICAgICAgPGRpdiBnblVpTGlua2lmeSAqbmdGb3I9XCJsZXQgY29uc3RyYWludCBvZiBvdGhlckNvbnN0cmFpbnRzXCI+XG4gICAgICAgIDxzcGFuXG4gICAgICAgICAgdHJhbnNsYXRlXG4gICAgICAgICAgY2xhc3M9XCJmb250LW1lZGl1bSB0ZXh0LWJsYWNrIHRleHQtc20gbWItWzJweF0gbXQtWzE2cHhdXCJcbiAgICAgICAgPlxuICAgICAgICAgIHJlY29yZC5tZXRhZGF0YS5vdGhlckNvbnN0cmFpbnRzXG4gICAgICAgIDwvc3Bhbj5cbiAgICAgICAgPGRpdiBjbGFzcz1cIm1iLTZcIj5cbiAgICAgICAgICA8Z24tdWktbWFya2Rvd24tcGFyc2VyIFt0ZXh0Q29udGVudF09XCJjb25zdHJhaW50XCI+XG4gICAgICAgICAgPC9nbi11aS1tYXJrZG93bi1wYXJzZXI+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9uZy1jb250YWluZXI+XG5cbiAgICA8c3BhbiBjbGFzcz1cIm5vVXNhZ2VcIiAqbmdJZj1cIiFoYXNVc2FnZVwiPlxuICAgICAge3sgJ3JlY29yZC5tZXRhZGF0YS5ub1VzYWdlJyB8IHRyYW5zbGF0ZSB9fVxuICAgIDwvc3Bhbj5cbiAgPC9kaXY+XG48L2duLXVpLWV4cGFuZGFibGUtcGFuZWw+XG48Z24tdWktZXhwYW5kYWJsZS1wYW5lbFxuICAqbmdJZj1cIlxuICAgIChtZXRhZGF0YS5raW5kID09PSAnZGF0YXNldCcgJiYgbWV0YWRhdGEubGluZWFnZSkgfHxcbiAgICBtZXRhZGF0YS5yZXNvdXJjZVVwZGF0ZWQgfHxcbiAgICBtZXRhZGF0YS51cGRhdGVGcmVxdWVuY3kgfHxcbiAgICAobWV0YWRhdGEua2luZCA9PT0gJ2RhdGFzZXQnICYmIG1ldGFkYXRhLnN0YXR1cylcbiAgXCJcbiAgW3RpdGxlXT1cIidyZWNvcmQubWV0YWRhdGEuZGV0YWlscycgfCB0cmFuc2xhdGVcIlxuICBkYXRhLXRlc3Q9XCJkZXRhaWxzLXBhbmVsXCJcbj5cbiAgPGRpdiAqbmdJZj1cIm1ldGFkYXRhLmxpbmVhZ2VcIiBjbGFzcz1cInRleHQtZ3JheS05MDAgZmxleCBmbGV4LWNvbCBtdC00IGdhcC0yXCI+XG4gICAgPHAgY2xhc3M9XCJ3aGl0ZXNwYWNlLXByZS1saW5lIGJyZWFrLXdvcmRzIHRleHQtZ3JheS05MDBcIiBnblVpTGlua2lmeT5cbiAgICAgIHt7IG1ldGFkYXRhLmxpbmVhZ2UgfX1cbiAgICA8L3A+XG4gIDwvZGl2PlxuICA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LXJvdyBnYXAtNiBtdC01IG1iLThcIiAqbmdJZj1cInJlc291cmNlQ29udGFjdFwiPlxuICAgIDxkaXZcbiAgICAgICpuZ0lmPVwicmVzb3VyY2VDb250YWN0Lm9yZ2FuaXphdGlvbj8ubG9nb1VybD8uaHJlZlwiXG4gICAgICBjbGFzcz1cImZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIGJvcmRlci1zb2xpZCBib3JkZXIgYm9yZGVyLWdyYXktMzAwIHJvdW5kZWQtbWQgYmctd2hpdGUgaC0zMiBvdmVyZmxvdy1oaWRkZW5cIlxuICAgID5cbiAgICAgIDxnbi11aS10aHVtYm5haWxcbiAgICAgICAgY2xhc3M9XCJyZWxhdGl2ZSBoLWZ1bGwgdy1mdWxsXCJcbiAgICAgICAgW3RodW1ibmFpbFVybF09XCJyZXNvdXJjZUNvbnRhY3Qub3JnYW5pemF0aW9uLmxvZ29VcmwuaHJlZlwiXG4gICAgICAgIGZpdD1cImNvbnRhaW5cIlxuICAgICAgPjwvZ24tdWktdGh1bWJuYWlsPlxuICAgIDwvZGl2PlxuICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtY29sIGdhcC0xXCI+XG4gICAgICA8cCBjbGFzcz1cInRleHQtc20gZm9udC1tZWRpdW1cIiB0cmFuc2xhdGU+cmVjb3JkLm1ldGFkYXRhLnByb2R1Y2VyPC9wPlxuICAgICAgPGRpdlxuICAgICAgICBjbGFzcz1cInRleHQtcHJpbWFyeSBmb250LXRpdGxlIHRleHQtMjEgbXItMiBjdXJzb3ItcG9pbnRlciBob3Zlcjp1bmRlcmxpbmVcIlxuICAgICAgICBkYXRhLWN5PVwib3JnYW5pemF0aW9uLW5hbWVcIlxuICAgICAgPlxuICAgICAgICB7eyByZXNvdXJjZUNvbnRhY3Qub3JnYW5pemF0aW9uPy5uYW1lIH19XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgKm5nSWY9XCJyZXNvdXJjZUNvbnRhY3Qub3JnYW5pemF0aW9uPy53ZWJzaXRlXCI+XG4gICAgICAgIDxhXG4gICAgICAgICAgW2hyZWZdPVwicmVzb3VyY2VDb250YWN0Lm9yZ2FuaXphdGlvbi53ZWJzaXRlXCJcbiAgICAgICAgICB0YXJnZXQ9XCJfYmxhbmtcIlxuICAgICAgICAgIGNsYXNzPVwiY29udGFjdC13ZWJzaXRlIHRleHQtcHJpbWFyeSB0ZXh0LXNtIGN1cnNvci1wb2ludGVyIGhvdmVyOnVuZGVybGluZSB0cmFuc2l0aW9uLWFsbFwiXG4gICAgICAgICAgPnt7IHJlc291cmNlQ29udGFjdC5vcmdhbml6YXRpb24ud2Vic2l0ZSB9fVxuICAgICAgICAgIDxuZy1pY29uXG4gICAgICAgICAgICBjbGFzcz1cIiF3LVsxMnB4XSAhaC1bMTJweF0gIXRleHQtWzEycHhdIG9wYWNpdHktNzUgc2hyaW5rLTBcIlxuICAgICAgICAgICAgbmFtZT1cIm1hdE9wZW5Jbk5ld1wiXG4gICAgICAgICAgPjwvbmctaWNvbj5cbiAgICAgICAgPC9hPlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPVwibXQtNFwiICpuZ0lmPVwicmVzb3VyY2VDb250YWN0LmVtYWlsXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4XCI+XG4gICAgICAgICAgPG5nLWljb25cbiAgICAgICAgICAgIGNsYXNzPVwiIXctNSAhaC01ICF0ZXh0LVsyMHB4XSBvcGFjaXR5LTc1IHNocmluay0wXCJcbiAgICAgICAgICAgIG5hbWU9XCJtYXRNYWlsT3V0bGluZVwiXG4gICAgICAgICAgPjwvbmctaWNvbj5cbiAgICAgICAgICA8YVxuICAgICAgICAgICAgKm5nSWY9XCJyZXNvdXJjZUNvbnRhY3QuZW1haWxcIlxuICAgICAgICAgICAgW2hyZWZdPVwiJ21haWx0bzonICsgcmVzb3VyY2VDb250YWN0LmVtYWlsXCJcbiAgICAgICAgICAgIGNsYXNzPVwidGV4dC1zbSBob3Zlcjp1bmRlcmxpbmUgbWwtMlwiXG4gICAgICAgICAgICB0YXJnZXQ9XCJfYmxhbmtcIlxuICAgICAgICAgICAgZGF0YS1jeT1cImNvbnRhY3QtZW1haWxcIlxuICAgICAgICAgICAgPnt7IHJlc291cmNlQ29udGFjdD8uZW1haWwgfX08L2FcbiAgICAgICAgICA+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuICA8ZGl2XG4gICAgY2xhc3M9XCJweS02IHB4LTYgcm91bmRlZCBiZy1ncmF5LTEwMCBncmlkIGdyaWQtY29scy0yIGdhcC15LTYgZ2FwLXgtWzIwcHhdIHRleHQtZ3JheS03MDBcIlxuICA+XG4gICAgPGRpdiAqbmdJZj1cIm1ldGFkYXRhLnJlc291cmNlQ3JlYXRlZFwiPlxuICAgICAgPHAgY2xhc3M9XCJ0ZXh0LXNtXCIgdHJhbnNsYXRlPnJlY29yZC5tZXRhZGF0YS5jcmVhdGlvbjwvcD5cbiAgICAgIDxwIGNsYXNzPVwidGV4dC1wcmltYXJ5IGZvbnQtbWVkaXVtIG10LTFcIj5cbiAgICAgICAge3sgZm9ybWF0RGF0ZShtZXRhZGF0YS5yZXNvdXJjZUNyZWF0ZWQpIH19XG4gICAgICA8L3A+XG4gICAgPC9kaXY+XG4gICAgPGRpdiAqbmdJZj1cIm1ldGFkYXRhLnJlc291cmNlUHVibGlzaGVkXCI+XG4gICAgICA8cCBjbGFzcz1cInRleHQtc21cIiB0cmFuc2xhdGU+cmVjb3JkLm1ldGFkYXRhLnB1YmxpY2F0aW9uPC9wPlxuICAgICAgPHAgY2xhc3M9XCJ0ZXh0LXByaW1hcnkgZm9udC1tZWRpdW0gbXQtMVwiPlxuICAgICAgICB7eyBmb3JtYXREYXRlKG1ldGFkYXRhLnJlc291cmNlUHVibGlzaGVkKSB9fVxuICAgICAgPC9wPlxuICAgIDwvZGl2PlxuICAgIDxkaXYgKm5nSWY9XCJ1cGRhdGVGcmVxdWVuY3lcIj5cbiAgICAgIDxwIGNsYXNzPVwidGV4dC1zbVwiIHRyYW5zbGF0ZT5yZWNvcmQubWV0YWRhdGEudXBkYXRlRnJlcXVlbmN5PC9wPlxuICAgICAgPHBcbiAgICAgICAgY2xhc3M9XCJ0ZXh0LXByaW1hcnkgZm9udC1tZWRpdW0gbXQtMSB1cGRhdGVGcmVxdWVuY3lcIlxuICAgICAgICB0cmFuc2xhdGVcbiAgICAgICAgW3RyYW5zbGF0ZVBhcmFtc109XCJ7IGNvdW50OiB1cGRhdGVkVGltZXMgfVwiXG4gICAgICA+XG4gICAgICAgIHt7IHVwZGF0ZUZyZXF1ZW5jeSB9fVxuICAgICAgPC9wPlxuICAgIDwvZGl2PlxuICAgIDxkaXYgKm5nSWY9XCJtZXRhZGF0YS5vdGhlckxhbmd1YWdlcz8ubGVuZ3RoXCI+XG4gICAgICA8cCBjbGFzcz1cInRleHQtc20gbWItMVwiIHRyYW5zbGF0ZT5yZWNvcmQubWV0YWRhdGEubGFuZ3VhZ2VzPC9wPlxuICAgICAgPGRpdiBjbGFzcz1cImZsZXggZmxleC1yb3cgZ2FwLTEgZmxleC13cmFwXCI+XG4gICAgICAgIDxwXG4gICAgICAgICAgY2xhc3M9XCJ0ZXh0LXByaW1hcnkgZm9udC1tZWRpdW1cIlxuICAgICAgICAgIHRyYW5zbGF0ZVxuICAgICAgICAgICpuZ0Zvcj1cImxldCBsYW5ndWFnZSBvZiBtZXRhZGF0YS5vdGhlckxhbmd1YWdlc1wiXG4gICAgICAgID5cbiAgICAgICAgICBsYW5ndWFnZS57eyBsYW5ndWFnZSB9fVxuICAgICAgICA8L3A+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2ICpuZ0lmPVwidGVtcG9yYWxFeHRlbnRcIj5cbiAgICAgIDxwIGNsYXNzPVwidGV4dC1zbVwiIHRyYW5zbGF0ZT5yZWNvcmQubWV0YWRhdGEudGVtcG9yYWxFeHRlbnQ8L3A+XG4gICAgICA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LXJvdyBnYXAtMSBtYi0xIHRleHQtcHJpbWFyeSBmb250LW1lZGl1bVwiPlxuICAgICAgICA8cFxuICAgICAgICAgICpuZ0lmPVwidGVtcG9yYWxFeHRlbnQuc3RhcnQgJiYgdGVtcG9yYWxFeHRlbnQuZW5kXCJcbiAgICAgICAgICB0cmFuc2xhdGVcbiAgICAgICAgICBbdHJhbnNsYXRlUGFyYW1zXT1cIntcbiAgICAgICAgICAgIHN0YXJ0OiB0ZW1wb3JhbEV4dGVudC5zdGFydCxcbiAgICAgICAgICAgIGVuZDogdGVtcG9yYWxFeHRlbnQuZW5kLFxuICAgICAgICAgIH1cIlxuICAgICAgICA+XG4gICAgICAgICAgcmVjb3JkLm1ldGFkYXRhLnRlbXBvcmFsRXh0ZW50LmZyb21EYXRlVG9EYXRlXG4gICAgICAgIDwvcD5cbiAgICAgICAgPHBcbiAgICAgICAgICAqbmdJZj1cInRlbXBvcmFsRXh0ZW50LnN0YXJ0ICYmICF0ZW1wb3JhbEV4dGVudC5lbmRcIlxuICAgICAgICAgIHRyYW5zbGF0ZVxuICAgICAgICAgIFt0cmFuc2xhdGVQYXJhbXNdPVwieyBzdGFydDogdGVtcG9yYWxFeHRlbnQuc3RhcnQgfVwiXG4gICAgICAgID5cbiAgICAgICAgICByZWNvcmQubWV0YWRhdGEudGVtcG9yYWxFeHRlbnQuc2luY2VEYXRlXG4gICAgICAgIDwvcD5cbiAgICAgICAgPHBcbiAgICAgICAgICAqbmdJZj1cIiF0ZW1wb3JhbEV4dGVudC5zdGFydCAmJiB0ZW1wb3JhbEV4dGVudC5lbmRcIlxuICAgICAgICAgIHRyYW5zbGF0ZVxuICAgICAgICAgIFt0cmFuc2xhdGVQYXJhbXNdPVwieyBlbmQ6IHRlbXBvcmFsRXh0ZW50LmVuZCB9XCJcbiAgICAgICAgPlxuICAgICAgICAgIHJlY29yZC5tZXRhZGF0YS50ZW1wb3JhbEV4dGVudC51bnRpbERhdGVcbiAgICAgICAgPC9wPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuPC9nbi11aS1leHBhbmRhYmxlLXBhbmVsPlxuPGduLXVpLWV4cGFuZGFibGUtcGFuZWxcbiAgKm5nSWY9XCJcbiAgICBtZXRhZGF0YS5raW5kICE9PSAnZGF0YXNldCcgJiZcbiAgICBtZXRhZGF0YS5zcGF0aWFsRXh0ZW50cyAmJlxuICAgIG1ldGFkYXRhLnNwYXRpYWxFeHRlbnRzLmxlbmd0aFxuICBcIlxuICBbdGl0bGVdPVwiJ3NlcnZpY2UubWV0YWRhdGEuc3BhdGlhbEV4dGVudCcgfCB0cmFuc2xhdGVcIlxuICBkYXRhLXRlc3Q9XCJzcGF0aWFsLWV4dGVudC1wYW5lbFwiXG4+XG4gIDxnbi11aS1zcGF0aWFsLWV4dGVudFxuICAgIGNsYXNzPVwiZmxleCBoLVsyNzFweF0gdy1mdWxsIHJvdW5kZWQtbGcgYm9yZGVyIGJvcmRlci1ncmF5LTEwMCBtdC0zIG1iLTZcIlxuICAgIFtzcGF0aWFsRXh0ZW50c109XCJtZXRhZGF0YS5zcGF0aWFsRXh0ZW50c1wiXG4gID48L2duLXVpLXNwYXRpYWwtZXh0ZW50PlxuPC9nbi11aS1leHBhbmRhYmxlLXBhbmVsPlxuPGduLXVpLWV4cGFuZGFibGUtcGFuZWxcbiAgKm5nSWY9XCJtZXRhZGF0YS5sYW5kaW5nUGFnZVwiXG4gIFt0aXRsZV09XCInc2VydmljZS5tZXRhZGF0YS5vdGhlcicgfCB0cmFuc2xhdGVcIlxuICBkYXRhLXRlc3Q9XCJvdGhlci1wYW5lbFwiXG4+XG4gIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtY29sIGdhcC00IG1yLTQgcHktNSByb3VuZGVkIHRleHQtZ3JheS03MDBcIj5cbiAgICA8ZGl2ICpuZ0lmPVwibWV0YWRhdGEucmVjb3JkVXBkYXRlZFwiPlxuICAgICAgPHAgY2xhc3M9XCJ0ZXh0LXNtXCIgdHJhbnNsYXRlPnJlY29yZC5tZXRhZGF0YS51cGRhdGVkT248L3A+XG4gICAgICA8cCBjbGFzcz1cInRleHQtcHJpbWFyeSBmb250LW1lZGl1bVwiPlxuICAgICAgICB7eyBtZXRhZGF0YS5yZWNvcmRVcGRhdGVkICYmIGZvcm1hdERhdGVUaW1lKG1ldGFkYXRhLnJlY29yZFVwZGF0ZWQpIH19XG4gICAgICA8L3A+XG4gICAgPC9kaXY+XG4gICAgPGRpdiAqbmdJZj1cIm1ldGFkYXRhLmxhbmRpbmdQYWdlXCI+XG4gICAgICA8cCBjbGFzcz1cInRleHQtc21cIiB0cmFuc2xhdGU+cmVjb3JkLm1ldGFkYXRhLnNoZWV0PC9wPlxuICAgICAgPHAgY2xhc3M9XCJ0ZXh0LXByaW1hcnkgZm9udC1tZWRpdW1cIiB0cmFuc2xhdGU+XG4gICAgICAgIDxhIFtocmVmXT1cIm1ldGFkYXRhLmxhbmRpbmdQYWdlXCIgdGFyZ2V0PVwiX2JsYW5rXCI+XG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJicmVhay1hbGxcIiBnblVpTGlua2lmeT57eyBtZXRhZGF0YS5sYW5kaW5nUGFnZSB9fTwvc3Bhbj5cbiAgICAgICAgPC9hPlxuICAgICAgPC9wPlxuICAgIDwvZGl2PlxuICAgIDxkaXYgKm5nSWY9XCJtZXRhZGF0YS5vd25lck9yZ2FuaXphdGlvblwiPlxuICAgICAgPHAgY2xhc3M9XCJ0ZXh0LXNtXCIgdHJhbnNsYXRlPnJlY29yZC5tZXRhZGF0YS5vd25lcjwvcD5cbiAgICAgIDxwIGNsYXNzPVwidGV4dC1wcmltYXJ5IGZvbnQtbWVkaXVtXCI+XG4gICAgICAgIHt7IG1ldGFkYXRhLm93bmVyT3JnYW5pemF0aW9uLm5hbWUgfX1cbiAgICAgIDwvcD5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2ICpuZ0lmPVwibWV0YWRhdGEudW5pcXVlSWRlbnRpZmllclwiPlxuICAgICAgPHAgY2xhc3M9XCJ0ZXh0LXNtXCIgdHJhbnNsYXRlPnJlY29yZC5tZXRhZGF0YS51bmlxdWVJZDwvcD5cbiAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtcm93IGNvbnRlbnQtYWxpZ24gaXRlbXMtZW5kIGdhcC0xXCI+XG4gICAgICAgIDxnbi11aS1jb3B5LXRleHQtYnV0dG9uXG4gICAgICAgICAgW3RleHRdPVwibWV0YWRhdGEudW5pcXVlSWRlbnRpZmllclwiXG4gICAgICAgICAgW3Rvb2x0aXBUZXh0XT1cIid0b29sdGlwLmlkLmNvcHknIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICBbZGlzcGxheVRleHRdPVwiZmFsc2VcIlxuICAgICAgICA+PC9nbi11aS1jb3B5LXRleHQtYnV0dG9uPlxuICAgICAgICA8cCBjbGFzcz1cInRleHQtcHJpbWFyeSBmb250LW1lZGl1bVwiPlxuICAgICAgICAgIHt7IG1ldGFkYXRhLnVuaXF1ZUlkZW50aWZpZXIgfX1cbiAgICAgICAgPC9wPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gICAgPGRpdiAqbmdJZj1cIm1ldGFkYXRhLnRvcGljcz8ubGVuZ3RoXCI+XG4gICAgICA8cCBjbGFzcz1cInRleHQtc20gbWItMVwiIHRyYW5zbGF0ZT5yZWNvcmQubWV0YWRhdGEudG9waWNzPC9wPlxuICAgICAgPGRpdiBjbGFzcz1cInNtOnBiLTQgc206cHItMTZcIj5cbiAgICAgICAgPGduLXVpLWJhZGdlXG4gICAgICAgICAgW2NsaWNrYWJsZV09XCJmYWxzZVwiXG4gICAgICAgICAgY2xhc3M9XCJpbmxpbmUtYmxvY2sgbXItMiBtYi0yIGxvd2VyY2FzZVwiXG4gICAgICAgICAgKm5nRm9yPVwibGV0IHRvcGljIG9mIG1ldGFkYXRhLnRvcGljc1wiXG4gICAgICAgICAgPnt7IHRvcGljIH19PC9nbi11aS1iYWRnZVxuICAgICAgICA+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG48L2duLXVpLWV4cGFuZGFibGUtcGFuZWw+XG4iXX0=
@@ -37,8 +37,7 @@ export class DropdownSelectorComponent {
37
37
  ];
38
38
  }
39
39
  get selectedChoice() {
40
- return (this.choices.find((choice) => choice.value === this.selected) ??
41
- this.choices[0]);
40
+ return (this.choices.find((choice) => JSON.stringify(choice.value) === JSON.stringify(this.selected)) ?? this.choices[0]);
42
41
  }
43
42
  get id() {
44
43
  return this.title.toLowerCase().replace(/[^a-z]+/g, '-');
@@ -199,4 +198,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
199
198
  type: ViewChildren,
200
199
  args: ['choiceInputs', { read: ElementRef }]
201
200
  }] } });
202
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHJvcGRvd24tc2VsZWN0b3IuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy91aS9pbnB1dHMvc3JjL2xpYi9kcm9wZG93bi1zZWxlY3Rvci9kcm9wZG93bi1zZWxlY3Rvci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL3VpL2lucHV0cy9zcmMvbGliL2Ryb3Bkb3duLXNlbGVjdG9yL2Ryb3Bkb3duLXNlbGVjdG9yLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxtQkFBbUIsRUFDbkIsZ0JBQWdCLEVBRWhCLGFBQWEsR0FDZCxNQUFNLHNCQUFzQixDQUFBO0FBQzdCLE9BQU8sRUFDTCx1QkFBdUIsRUFDdkIsU0FBUyxFQUNULFVBQVUsRUFDVixZQUFZLEVBQ1osS0FBSyxFQUVMLE1BQU0sRUFDTixTQUFTLEVBQ1QsU0FBUyxFQUNULFlBQVksR0FDYixNQUFNLGVBQWUsQ0FBQTtBQUN0QixPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sTUFBTSxDQUFBO0FBRXJDLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQTtBQUM5QyxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0scUJBQXFCLENBQUE7QUFDbkQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDRCQUE0QixDQUFBO0FBQzVELE9BQU8sRUFDTCxlQUFlLEVBQ2YsWUFBWSxFQUNaLG9CQUFvQixHQUNyQixNQUFNLGdCQUFnQixDQUFBO0FBQ3ZCLE9BQU8sRUFBRSxhQUFhLEVBQUUsYUFBYSxFQUFFLE1BQU0sbUNBQW1DLENBQUE7Ozs7QUFFaEYsTUFBTSxtQkFBbUIsR0FBRyxDQUFDLENBQUE7QUF5QjdCLE1BQU0sT0FBTyx5QkFBeUI7SUF2QnRDO1FBeUJXLGNBQVMsR0FBRyxJQUFJLENBQUE7UUFLaEIsa0JBQWEsR0FBRyxFQUFFLENB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Q0ksV0FBVztzQkFBcEIsTUFBTTtnQkFDcUIsYUFBYTtzQkFBeEMsU0FBUzt1QkFBQyxlQUFlO2dCQUNNLE9BQU87c0JBQXRDLFNBQVM7dUJBQUMsbUJBQW1CO2dCQXFCOUIsWUFBWTtzQkFEWCxZQUFZO3VCQUFDLGNBQWMsRUFBRSxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBDZGtDb25uZWN0ZWRPdmVybGF5LFxuICBDZGtPdmVybGF5T3JpZ2luLFxuICBDb25uZWN0ZWRQb3NpdGlvbixcbiAgT3ZlcmxheU1vZHVsZSxcbn0gZnJvbSAnQGFuZ3VsYXIvY2RrL292ZXJsYXknXG5pbXBvcnQge1xuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQ29tcG9uZW50LFxuICBFbGVtZW50UmVmLFxuICBFdmVudEVtaXR0ZXIsXG4gIElucHV0LFxuICBPbkluaXQsXG4gIE91dHB1dCxcbiAgUXVlcnlMaXN0LFxuICBWaWV3Q2hpbGQsXG4gIFZpZXdDaGlsZHJlbixcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSdcbmltcG9ydCB7IGZpcnN0VmFsdWVGcm9tIH0gZnJvbSAncnhqcydcbmltcG9ydCB7IERyb3Bkb3duQ2hvaWNlIH0gZnJvbSAnLi9kcm9wZG93bi1zZWxlY3Rvci5tb2RlbCdcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbidcbmltcG9ydCB7IFRyYW5zbGF0ZVBpcGUgfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJ1xuaW1wb3J0IHsgQnV0dG9uQ29tcG9uZW50IH0gZnJvbSAnLi4vYnV0dG9uL2J1dHRvbi5jb21wb25lbnQnXG5pbXBvcnQge1xuICBOZ0ljb25Db21wb25lbnQsXG4gIHByb3ZpZGVJY29ucyxcbiAgcHJvdmlkZU5nSWNvbnNDb25maWcsXG59IGZyb20gJ0BuZy1pY29ucy9jb3JlJ1xuaW1wb3J0IHsgbWF0RXhwYW5kTGVzcywgbWF0RXhwYW5kTW9yZSB9IGZyb20gJ0BuZy1pY29ucy9tYXRlcmlhbC1pY29ucy9iYXNlbGluZSdcblxuY29uc3QgREVGQVVMVF9ST1dfTlVNQkVSUyA9IDZcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnZ24tdWktZHJvcGRvd24tc2VsZWN0b3InLFxuICB0ZW1wbGF0ZVVybDogJy4vZHJvcGRvd24tc2VsZWN0b3IuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9kcm9wZG93bi1zZWxlY3Rvci5jb21wb25lbnQuY3NzJ10sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbXG4gICAgQ29tbW9uTW9kdWxlLFxuICAgIEJ1dHRvbkNvbXBvbmVudCxcbiAgICBPdmVybGF5TW9kdWxlLFxuICAgIFRyYW5zbGF0ZVBpcGUsXG4gICAgTmdJY29uQ29tcG9uZW50LFxuICBdLFxuICBwcm92aWRlcnM6IFtcbiAgICBwcm92aWRlSWNvbnMoe1xuICAgICAgbWF0RXhwYW5kTGVzcyxcbiAgICAgIG1hdEV4cGFuZE1vcmUsXG4gICAgfSksXG4gICAgcHJvdmlkZU5nSWNvbnNDb25maWcoe1xuICAgICAgc2l6ZTogJzEuNWVtJyxcbiAgICB9KSxcbiAgXSxcbn0pXG5leHBvcnQgY2xhc3MgRHJvcGRvd25TZWxlY3RvckNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gIEBJbnB1dCgpIHRpdGxlOiBzdHJpbmdcbiAgQElucHV0KCkgc2hvd1RpdGxlID0gdHJ1ZVxuICBASW5wdXQoKSBhcmlhTmFtZTogc3RyaW5nXG4gIEBJbnB1dCgpIGNob2ljZXM6IEFycmF5PERyb3Bkb3duQ2hvaWNlPlxuICBASW5wdXQoKSBzZWxlY3RlZDogRHJvcGRvd25DaG9pY2VbJ3ZhbHVlJ11cbiAgQElucHV0KCkgbWF4Um93czogbnVtYmVyXG4gIEBJbnB1dCgpIGV4dHJhQnRuQ2xhc3MgPSAnJ1xuICBASW5wdXQoKSBtaW5XaWR0aCA9ICcnXG4gIEBJbnB1dCgpIGRpc2FibGVkOiBib29sZWFuXG4gIEBPdXRwdXQoKSBzZWxlY3RWYWx1ZSA9IG5ldyBFdmVudEVtaXR0ZXI8RHJvcGRvd25DaG9pY2VbJ3ZhbHVlJ10+KClcbiAgQFZpZXdDaGlsZCgnb3ZlcmxheU9yaWdpbicpIG92ZXJsYXlPcmlnaW46IENka092ZXJsYXlPcmlnaW5cbiAgQFZpZXdDaGlsZChDZGtDb25uZWN0ZWRPdmVybGF5KSBvdmVybGF5OiBDZGtDb25uZWN0ZWRPdmVybGF5XG4gIG92ZXJsYXlPcGVuID0gZmFsc2VcbiAgb3ZlcmxheVdpZHRoID0gJ2F1dG8nXG4gIG92ZXJsYXlNYXhIZWlnaHQgPSAnbm9uZSdcbiAgb3ZlcmxheVBvc2l0aW9uczogQ29ubmVjdGVkUG9zaXRpb25bXSA9IFtcbiAgICB7XG4gICAgICBvcmlnaW5YOiAnc3RhcnQnLFxuICAgICAgb3JpZ2luWTogJ2JvdHRvbScsXG4gICAgICBvdmVybGF5WDogJ3N0YXJ0JyxcbiAgICAgIG92ZXJsYXlZOiAndG9wJyxcbiAgICAgIG9mZnNldFk6IDgsXG4gICAgfSxcbiAgICB7XG4gICAgICBvcmlnaW5YOiAnc3RhcnQnLFxuICAgICAgb3JpZ2luWTogJ3RvcCcsXG4gICAgICBvdmVybGF5WDogJ3N0YXJ0JyxcbiAgICAgIG92ZXJsYXlZOiAnYm90dG9tJyxcbiAgICAgIG9mZnNldFk6IC04LFxuICAgIH0sXG4gIF1cbiAgQFZpZXdDaGlsZHJlbignY2hvaWNlSW5wdXRzJywgeyByZWFkOiBFbGVtZW50UmVmIH0pXG4gIGNob2ljZUlucHV0czogUXVlcnlMaXN0PEVsZW1lbnRSZWY+XG5cbiAgZ2V0IHNlbGVjdGVkQ2hvaWNlKCk6IERyb3Bkb3duQ2hvaWNlIHtcbiAgICByZXR1cm4gKFxuICAgICAgdGhpcy5jaG9pY2VzLmZpbmQoKGNob2ljZSkgPT4gY2hvaWNlLnZhbHVlID09PSB0aGlzLnNlbGVjdGVkKSA/P1xuICAgICAgdGhpcy5jaG9pY2VzWzBdXG4gICAgKVxuICB9XG5cbiAgZ2V0IGlkKCkge1xuICAgIHJldHVybiB0aGlzLnRpdGxlLnRvTG93ZXJDYXNlKCkucmVwbGFjZSgvW15hLXpdKy9nLCAnLScpXG4gIH1cblxuICBnZXRDaG9pY2VMYWJlbCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnNlbGVjdGVkQ2hvaWNlPy5sYWJlbFxuICB9XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLm1heFJvd3MpIHRoaXMubWF4Um93cyA9IERFRkFVTFRfUk9XX05VTUJFUlNcbiAgICBpZiAoIXRoaXMuY2hvaWNlcyB8fCB0aGlzLmNob2ljZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICB0aGlzLmNob2ljZXMgPSBbXVxuICAgIH1cbiAgfVxuXG4gIGlzU2VsZWN0ZWQoY2hvaWNlOiBEcm9wZG93bkNob2ljZSkge1xuICAgIHJldHVybiBjaG9pY2UgPT09IHRoaXMuc2VsZWN0ZWRDaG9pY2VcbiAgfVxuXG4gIG9uU2VsZWN0VmFsdWUoY2hvaWNlOiBEcm9wZG93bkNob2ljZSkge1xuICAgIHRoaXMuY2xvc2VPdmVybGF5KClcbiAgICB0aGlzLnNlbGVjdGVkID0gY2hvaWNlLnZhbHVlXG4gICAgdGhpcy5zZWxlY3RWYWx1ZS5lbWl0KHRoaXMuc2VsZWN0ZWQpXG4gIH1cblxuICBvcGVuT3ZlcmxheSgpIHtcbiAgICB0aGlzLm92ZXJsYXlXaWR0aCA9XG4gICAgICB0aGlzLm92ZXJsYXlPcmlnaW4uZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpXG4gICAgICAgIC53aWR0aCArICdweCdcbiAgICB0aGlzLm92ZXJsYXlNYXhIZWlnaHQgPSB0aGlzLm1heFJvd3NcbiAgICAgID8gYCR7dGhpcy5tYXhSb3dzICogMjkgKyA2MH1weGBcbiAgICAgIDogJ25vbmUnXG4gICAgdGhpcy5vdmVybGF5T3BlbiA9IHRydWVcbiAgICByZXR1cm4gUHJvbWlzZS5hbGwoW1xuICAgICAgZmlyc3RWYWx1ZUZyb20odGhpcy5vdmVybGF5LmF0dGFjaCksXG4gICAgICBmaXJzdFZhbHVlRnJvbSh0aGlzLmNob2ljZUlucHV0cy5jaGFuZ2VzKSxcbiAgICBdKVxuICB9XG5cbiAgY2xvc2VPdmVybGF5KCkge1xuICAgIHRoaXMub3ZlcmxheU9wZW4gPSBmYWxzZVxuICB9XG5cbiAgZm9jdXNGaXJzdEl0ZW0oKSB7XG4gICAgdGhpcy5jaG9pY2VJbnB1dHMuZ2V0KDApLm5hdGl2ZUVsZW1lbnQuZm9jdXMoKVxuICB9XG5cbiAgZm9jdXNMYXN0SXRlbSgpIHtcbiAgICB0aGlzLmNob2ljZUlucHV0cy5nZXQodGhpcy5jaG9pY2VJbnB1dHMubGVuZ3RoIC0gMSkubmF0aXZlRWxlbWVudC5mb2N1cygpXG4gIH1cblxuICBhc3luYyBoYW5kbGVUcmlnZ2VyS2V5ZG93bihldmVudDogS2V5Ym9hcmRFdmVudCkge1xuICAgIGNvbnN0IGtleUNvZGUgPSBldmVudC5jb2RlXG4gICAgY29uc3QgaXNPcGVuS2V5ID1cbiAgICAgIGtleUNvZGUgPT09ICdBcnJvd0Rvd24nIHx8XG4gICAgICBrZXlDb2RlID09PSAnQXJyb3dVcCcgfHxcbiAgICAgIGtleUNvZGUgPT09ICdBcnJvd0xlZnQnIHx8XG4gICAgICBrZXlDb2RlID09PSAnQXJyb3dSaWdodCcgfHxcbiAgICAgIGtleUNvZGUgPT09ICdFbnRlcicgfHxcbiAgICAgIGtleUNvZGUgPT09ICdTcGFjZSdcbiAgICBjb25zdCBpc0Nsb3NlS2V5ID0ga2V5Q29kZSA9PT0gJ0VzY2FwZSdcbiAgICBpZiAoaXNPcGVuS2V5KSB7XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpXG4gICAgICBpZiAoIXRoaXMub3ZlcmxheU9wZW4pIHtcbiAgICAgICAgYXdhaXQgdGhpcy5vcGVuT3ZlcmxheSgpXG4gICAgICB9XG4gICAgICBpZiAoa2V5Q29kZSA9PT0gJ0Fycm93TGVmdCcgfHwga2V5Q29kZSA9PT0gJ0Fycm93VXAnKSB0aGlzLmZvY3VzTGFzdEl0ZW0oKVxuICAgICAgZWxzZSB0aGlzLmZvY3VzRmlyc3RJdGVtKClcbiAgICB9IGVsc2UgaWYgKHRoaXMub3ZlcmxheU9wZW4gJiYgaXNDbG9zZUtleSkge1xuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKVxuICAgICAgdGhpcy5jbG9zZU92ZXJsYXkoKVxuICAgIH1cbiAgfVxuXG4gIGhhbmRsZU92ZXJsYXlLZXlkb3duKGV2ZW50OiBLZXlib2FyZEV2ZW50KSB7XG4gICAgaWYgKCF0aGlzLm92ZXJsYXlPcGVuKSByZXR1cm5cbiAgICBjb25zdCBrZXlDb2RlID0gZXZlbnQuY29kZVxuICAgIGlmIChrZXlDb2RlID09PSAnQXJyb3dEb3duJyB8fCBrZXlDb2RlID09PSAnQXJyb3dSaWdodCcpIHtcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KClcbiAgICAgIHRoaXMuc2hpZnRJdGVtRm9jdXMoMSlcbiAgICB9IGVsc2UgaWYgKGtleUNvZGUgPT09ICdBcnJvd0xlZnQnIHx8IGtleUNvZGUgPT09ICdBcnJvd1VwJykge1xuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKVxuICAgICAgdGhpcy5zaGlmdEl0ZW1Gb2N1cygtMSlcbiAgICB9IGVsc2UgaWYgKGtleUNvZGUgPT09ICdFc2NhcGUnKSB7XG4gICAgICB0aGlzLmNsb3NlT3ZlcmxheSgpXG4gICAgfVxuICB9XG5cbiAgc2hpZnRJdGVtRm9jdXMoc2hpZnQ6IG51bWJlcikge1xuICAgIGNvbnN0IGluZGV4ID0gdGhpcy5mb2N1c2VkSW5kZXhcbiAgICBpZiAoaW5kZXggPT09IC0xKSByZXR1cm5cbiAgICBjb25zdCBtYXggPSB0aGlzLmNob2ljZUlucHV0cy5sZW5ndGhcbiAgICAvLyBtb2R1bG8sIHNlZSBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9KYXZhU2NyaXB0L1JlZmVyZW5jZS9PcGVyYXRvcnMvUmVtYWluZGVyXG4gICAgY29uc3QgbmV3SW5kZXggPSAoKChpbmRleCArIHNoaWZ0KSAlIG1heCkgKyBtYXgpICUgbWF4XG4gICAgdGhpcy5jaG9pY2VJbnB1dHMuZ2V0KG5ld0luZGV4KS5uYXRpdmVFbGVtZW50LmZvY3VzKClcbiAgfVxuXG4gIGdldCBmb2N1c2VkSW5kZXgoKTogbnVtYmVyIHwgLTEge1xuICAgIHJldHVybiB0aGlzLmNob2ljZUlucHV0cy5yZWR1Y2UoXG4gICAgICAocHJldiwgY3VyciwgY3VySW5kZXgpID0+XG4gICAgICAgIGN1cnIubmF0aXZlRWxlbWVudCA9PT0gZG9jdW1lbnQuYWN0aXZlRWxlbWVudCA/IGN1ckluZGV4IDogcHJldixcbiAgICAgIC0xXG4gICAgKVxuICB9XG5cbiAgc2VsZWN0SWZFbnRlcihldmVudDogS2V5Ym9hcmRFdmVudCwgY2hvaWNlOiBEcm9wZG93bkNob2ljZSkge1xuICAgIGlmIChldmVudC5jb2RlID09PSAnRW50ZXInKSB7XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpXG4gICAgICB0aGlzLm9uU2VsZWN0VmFsdWUoY2hvaWNlKVxuICAgIH1cbiAgfVxufVxuIiwiPGRpdiBjbGFzcz1cImZsZXggZmxleC1jb2wgc206ZmxleC1yb3cgc206aXRlbXMtY2VudGVyIHJlbGF0aXZlIHctZnVsbFwiPlxuICA8c3BhblxuICAgICpuZ0lmPVwic2hvd1RpdGxlXCJcbiAgICBjbGFzcz1cInRyYWNraW5nLXdpZGUgdGV4dC1zbSBtYi0yIHNtOm1iLTAgc206bXItMiB3aGl0ZXNwYWNlLW5vd3JhcFwiXG4gICAgW2F0dHIuZm9yXT1cImlkXCJcbiAgPlxuICAgIHt7IHRpdGxlIH19XG4gIDwvc3Bhbj5cbiAgPGduLXVpLWJ1dHRvblxuICAgIHR5cGU9XCJvdXRsaW5lXCJcbiAgICBjbGFzcz1cImdyb3cgbWluLXctMFwiXG4gICAgW3N0eWxlLi0tZ24tdWktYnV0dG9uLXBhZGRpbmddPVwiJzhweCA4cHggOHB4IDE2cHgnXCJcbiAgICBleHRyYUNsYXNzPVwiYmctYmFja2dyb3VuZCBmbGV4IGZsZXgtcm93IHctZnVsbCB7eyBleHRyYUJ0bkNsYXNzIH19XCJcbiAgICBbdGl0bGVdPVwidGl0bGVcIlxuICAgIFthdHRyLmFyaWEtb3duc109XCJpZFwiXG4gICAgKGJ1dHRvbkNsaWNrKT1cIm9wZW5PdmVybGF5KClcIlxuICAgIGNka092ZXJsYXlPcmlnaW5cbiAgICAjb3ZlcmxheU9yaWdpbj1cImNka092ZXJsYXlPcmlnaW5cIlxuICAgIChrZXlkb3duKT1cImhhbmRsZVRyaWdnZXJLZXlkb3duKCRldmVudClcIlxuICAgIFtkaXNhYmxlZF09XCJkaXNhYmxlZFwiXG4gID5cbiAgICA8ZGl2IGNsYXNzPVwiZ3JvdyB0cnVuY2F0ZSBweS0xIG1yLTIgdGV4dC1sZWZ0XCI+XG4gICAgICB7eyBnZXRDaG9pY2VMYWJlbCgpIHwgdHJhbnNsYXRlIH19XG4gICAgPC9kaXY+XG4gICAgPG5nLWljb25cbiAgICAgIFtuYW1lXT1cIm92ZXJsYXlPcGVuID8gJ21hdEV4cGFuZExlc3MnIDogJ21hdEV4cGFuZE1vcmUnXCJcbiAgICAgIGNsYXNzPVwic2hyaW5rLTAgb3BhY2l0eS00MFwiXG4gICAgPlxuICAgIDwvbmctaWNvbj5cbiAgPC9nbi11aS1idXR0b24+XG48L2Rpdj5cblxuPG5nLXRlbXBsYXRlXG4gIGNka0Nvbm5lY3RlZE92ZXJsYXlcbiAgY2RrQ29ubmVjdGVkT3ZlcmxheUhhc0JhY2tkcm9wXG4gIGNka0Nvbm5lY3RlZE92ZXJsYXlCYWNrZHJvcENsYXNzPVwiY2RrLW92ZXJsYXktdHJhbnNwYXJlbnQtYmFja2Ryb3BcIlxuICBbY2RrQ29ubmVjdGVkT3ZlcmxheU9yaWdpbl09XCJvdmVybGF5T3JpZ2luXCJcbiAgW2Nka0Nvbm5lY3RlZE92ZXJsYXlPcGVuXT1cIm92ZXJsYXlPcGVuXCJcbiAgW2Nka0Nvbm5lY3RlZE92ZXJsYXlQb3NpdGlvbnNdPVwib3ZlcmxheVBvc2l0aW9uc1wiXG4gIFtjZGtDb25uZWN0ZWRPdmVybGF5RmxleGlibGVEaW1lbnNpb25zXT1cInRydWVcIlxuICAob3ZlcmxheU91dHNpZGVDbGljayk9XCJjbG9zZU92ZXJsYXkoKVwiXG4gIChkZXRhY2gpPVwiY2xvc2VPdmVybGF5KClcIlxuPlxuICA8ZGl2XG4gICAgY2xhc3M9XCJiZy13aGl0ZSBib3JkZXIgYm9yZGVyLWdyYXktMzAwIHJvdW5kZWQgc2hhZG93LWxnIHB5LTIgdy1mdWxsIG92ZXJmbG93LXgtaGlkZGVuIG92ZXJmbG93LXktYXV0byBvdmVybGF5LWNvbnRhaW5lclwiXG4gICAgW3N0eWxlLm1heC1oZWlnaHRdPVwib3ZlcmxheU1heEhlaWdodFwiXG4gICAgW3N0eWxlLm1pbi13aWR0aF09XCJvdmVybGF5V2lkdGhcIlxuICAgIHJvbGU9XCJsaXN0Ym94XCJcbiAgICB0YWJpbmRleD1cIi0xXCJcbiAgICBbYXR0ci5pZF09XCJpZFwiXG4gICAgW2F0dHIuYXJpYS1tdWx0aXNlbGVjdGFibGVdPVwidHJ1ZVwiXG4gICAgW2F0dHIuYXJpYS1sYWJlbF09XCJ0aXRsZVwiXG4gICAgKGtleWRvd24pPVwiaGFuZGxlT3ZlcmxheUtleWRvd24oJGV2ZW50KVwiXG4gID5cbiAgICA8YnV0dG9uXG4gICAgICAjY2hvaWNlSW5wdXRzXG4gICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICpuZ0Zvcj1cImxldCBjaG9pY2Ugb2YgY2hvaWNlc1wiXG4gICAgICBbdGl0bGVdPVwiY2hvaWNlLmxhYmVsIHwgdHJhbnNsYXRlXCJcbiAgICAgIGNsYXNzPVwiZmxleCBweC01IHB5LTEgdy1mdWxsIHRleHQtc3RhcnQgY3Vyc29yLXBvaW50ZXIgdHJhbnNpdGlvbi1jb2xvcnNcIlxuICAgICAgW25nQ2xhc3NdPVwiXG4gICAgICAgIGlzU2VsZWN0ZWQoY2hvaWNlKVxuICAgICAgICAgID8gJ3RleHQtd2hpdGUgYmctcHJpbWFyeSBob3Zlcjp0ZXh0LXdoaXRlIGhvdmVyOmJnLXByaW1hcnktZGFya2VyIGZvY3VzOnRleHQtd2hpdGUgZm9jdXM6YmctcHJpbWFyeS1kYXJrZXInXG4gICAgICAgICAgOiAndGV4dC1ncmF5LTkwMCBob3Zlcjp0ZXh0LXByaW1hcnktZGFya2VzdCBob3ZlcjpiZy1ncmF5LTUwIGZvY3VzOnRleHQtcHJpbWFyeS1kYXJrZXN0IGZvY3VzOmJnLWdyYXktNTAnXG4gICAgICBcIlxuICAgICAgKGNsaWNrKT1cIm9uU2VsZWN0VmFsdWUoY2hvaWNlKVwiXG4gICAgICAoa2V5ZG93bik9XCJzZWxlY3RJZkVudGVyKCRldmVudCwgY2hvaWNlKVwiXG4gICAgICBbYXR0ci5kYXRhLWN5LXZhbHVlXT1cImNob2ljZS52YWx1ZS50b1N0cmluZygpXCJcbiAgICAgIFthdHRyLmRhdGEtY3ktYWN0aXZlXT1cImlzU2VsZWN0ZWQoY2hvaWNlKSA/ICd0cnVlJyA6IHVuZGVmaW5lZFwiXG4gICAgPlxuICAgICAgPHNwYW4gY2xhc3M9XCJ0ZXh0LVsxNHB4XVwiPlxuICAgICAgICB7eyBjaG9pY2UubGFiZWwgfCB0cmFuc2xhdGUgfX1cbiAgICAgIDwvc3Bhbj5cbiAgICA8L2J1dHRvbj5cbiAgPC9kaXY+XG48L25nLXRlbXBsYXRlPlxuIl19
201
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHJvcGRvd24tc2VsZWN0b3IuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy91aS9pbnB1dHMvc3JjL2xpYi9kcm9wZG93bi1zZWxlY3Rvci9kcm9wZG93bi1zZWxlY3Rvci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL3VpL2lucHV0cy9zcmMvbGliL2Ryb3Bkb3duLXNlbGVjdG9yL2Ryb3Bkb3duLXNlbGVjdG9yLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxtQkFBbUIsRUFDbkIsZ0JBQWdCLEVBRWhCLGFBQWEsR0FDZCxNQUFNLHNCQUFzQixDQUFBO0FBQzdCLE9BQU8sRUFDTCx1QkFBdUIsRUFDdkIsU0FBUyxFQUNULFVBQVUsRUFDVixZQUFZLEVBQ1osS0FBSyxFQUVMLE1BQU0sRUFDTixTQUFTLEVBQ1QsU0FBUyxFQUNULFlBQVksR0FDYixNQUFNLGVBQWUsQ0FBQTtBQUN0QixPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sTUFBTSxDQUFBO0FBRXJDLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQTtBQUM5QyxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0scUJBQXFCLENBQUE7QUFDbkQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDRCQUE0QixDQUFBO0FBQzVELE9BQU8sRUFDTCxlQUFlLEVBQ2YsWUFBWSxFQUNaLG9CQUFvQixHQUNyQixNQUFNLGdCQUFnQixDQUFBO0FBQ3ZCLE9BQU8sRUFBRSxhQUFhLEVBQUUsYUFBYSxFQUFFLE1BQU0sbUNBQW1DLENBQUE7Ozs7QUFFaEYsTUFBTSxtQkFBbUIsR0FBRyxDQUFDLENBQUE7QUF5QjdCLE1BQU0sT0FBTyx5QkFBeUI7SUF2QnRDO1FBeUJXLGNBQVMsR0FBRyxJQUFJLENBQUE7UUFLaEIsa0JBQWEsR0FBRyxFQUFFLENB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O2dCQUNHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBQ0csUUFBUTtzQkFBaEIsS0FBSztnQkFDSSxXQUFXO3NCQUFwQixNQUFNO2dCQUNxQixhQUFhO3NCQUF4QyxTQUFTO3VCQUFDLGVBQWU7Z0JBQ00sT0FBTztzQkFBdEMsU0FBUzt1QkFBQyxtQkFBbUI7Z0JBcUI5QixZQUFZO3NCQURYLFlBQVk7dUJBQUMsY0FBYyxFQUFFLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENka0Nvbm5lY3RlZE92ZXJsYXksXG4gIENka092ZXJsYXlPcmlnaW4sXG4gIENvbm5lY3RlZFBvc2l0aW9uLFxuICBPdmVybGF5TW9kdWxlLFxufSBmcm9tICdAYW5ndWxhci9jZGsvb3ZlcmxheSdcbmltcG9ydCB7XG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBDb21wb25lbnQsXG4gIEVsZW1lbnRSZWYsXG4gIEV2ZW50RW1pdHRlcixcbiAgSW5wdXQsXG4gIE9uSW5pdCxcbiAgT3V0cHV0LFxuICBRdWVyeUxpc3QsXG4gIFZpZXdDaGlsZCxcbiAgVmlld0NoaWxkcmVuLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJ1xuaW1wb3J0IHsgZmlyc3RWYWx1ZUZyb20gfSBmcm9tICdyeGpzJ1xuaW1wb3J0IHsgRHJvcGRvd25DaG9pY2UgfSBmcm9tICcuL2Ryb3Bkb3duLXNlbGVjdG9yLm1vZGVsJ1xuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJ1xuaW1wb3J0IHsgVHJhbnNsYXRlUGlwZSB9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnXG5pbXBvcnQgeyBCdXR0b25Db21wb25lbnQgfSBmcm9tICcuLi9idXR0b24vYnV0dG9uLmNvbXBvbmVudCdcbmltcG9ydCB7XG4gIE5nSWNvbkNvbXBvbmVudCxcbiAgcHJvdmlkZUljb25zLFxuICBwcm92aWRlTmdJY29uc0NvbmZpZyxcbn0gZnJvbSAnQG5nLWljb25zL2NvcmUnXG5pbXBvcnQgeyBtYXRFeHBhbmRMZXNzLCBtYXRFeHBhbmRNb3JlIH0gZnJvbSAnQG5nLWljb25zL21hdGVyaWFsLWljb25zL2Jhc2VsaW5lJ1xuXG5jb25zdCBERUZBVUxUX1JPV19OVU1CRVJTID0gNlxuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdnbi11aS1kcm9wZG93bi1zZWxlY3RvcicsXG4gIHRlbXBsYXRlVXJsOiAnLi9kcm9wZG93bi1zZWxlY3Rvci5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2Ryb3Bkb3duLXNlbGVjdG9yLmNvbXBvbmVudC5jc3MnXSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtcbiAgICBDb21tb25Nb2R1bGUsXG4gICAgQnV0dG9uQ29tcG9uZW50LFxuICAgIE92ZXJsYXlNb2R1bGUsXG4gICAgVHJhbnNsYXRlUGlwZSxcbiAgICBOZ0ljb25Db21wb25lbnQsXG4gIF0sXG4gIHByb3ZpZGVyczogW1xuICAgIHByb3ZpZGVJY29ucyh7XG4gICAgICBtYXRFeHBhbmRMZXNzLFxuICAgICAgbWF0RXhwYW5kTW9yZSxcbiAgICB9KSxcbiAgICBwcm92aWRlTmdJY29uc0NvbmZpZyh7XG4gICAgICBzaXplOiAnMS41ZW0nLFxuICAgIH0pLFxuICBdLFxufSlcbmV4cG9ydCBjbGFzcyBEcm9wZG93blNlbGVjdG9yQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcbiAgQElucHV0KCkgdGl0bGU6IHN0cmluZ1xuICBASW5wdXQoKSBzaG93VGl0bGUgPSB0cnVlXG4gIEBJbnB1dCgpIGFyaWFOYW1lOiBzdHJpbmdcbiAgQElucHV0KCkgY2hvaWNlczogQXJyYXk8RHJvcGRvd25DaG9pY2U+XG4gIEBJbnB1dCgpIHNlbGVjdGVkOiBEcm9wZG93bkNob2ljZVsndmFsdWUnXVxuICBASW5wdXQoKSBtYXhSb3dzOiBudW1iZXJcbiAgQElucHV0KCkgZXh0cmFCdG5DbGFzcyA9ICcnXG4gIEBJbnB1dCgpIG1pbldpZHRoID0gJydcbiAgQElucHV0KCkgZGlzYWJsZWQ6IGJvb2xlYW5cbiAgQE91dHB1dCgpIHNlbGVjdFZhbHVlID0gbmV3IEV2ZW50RW1pdHRlcjxEcm9wZG93bkNob2ljZVsndmFsdWUnXT4oKVxuICBAVmlld0NoaWxkKCdvdmVybGF5T3JpZ2luJykgb3ZlcmxheU9yaWdpbjogQ2RrT3ZlcmxheU9yaWdpblxuICBAVmlld0NoaWxkKENka0Nvbm5lY3RlZE92ZXJsYXkpIG92ZXJsYXk6IENka0Nvbm5lY3RlZE92ZXJsYXlcbiAgb3ZlcmxheU9wZW4gPSBmYWxzZVxuICBvdmVybGF5V2lkdGggPSAnYXV0bydcbiAgb3ZlcmxheU1heEhlaWdodCA9ICdub25lJ1xuICBvdmVybGF5UG9zaXRpb25zOiBDb25uZWN0ZWRQb3NpdGlvbltdID0gW1xuICAgIHtcbiAgICAgIG9yaWdpblg6ICdzdGFydCcsXG4gICAgICBvcmlnaW5ZOiAnYm90dG9tJyxcbiAgICAgIG92ZXJsYXlYOiAnc3RhcnQnLFxuICAgICAgb3ZlcmxheVk6ICd0b3AnLFxuICAgICAgb2Zmc2V0WTogOCxcbiAgICB9LFxuICAgIHtcbiAgICAgIG9yaWdpblg6ICdzdGFydCcsXG4gICAgICBvcmlnaW5ZOiAndG9wJyxcbiAgICAgIG92ZXJsYXlYOiAnc3RhcnQnLFxuICAgICAgb3ZlcmxheVk6ICdib3R0b20nLFxuICAgICAgb2Zmc2V0WTogLTgsXG4gICAgfSxcbiAgXVxuICBAVmlld0NoaWxkcmVuKCdjaG9pY2VJbnB1dHMnLCB7IHJlYWQ6IEVsZW1lbnRSZWYgfSlcbiAgY2hvaWNlSW5wdXRzOiBRdWVyeUxpc3Q8RWxlbWVudFJlZj5cblxuICBnZXQgc2VsZWN0ZWRDaG9pY2UoKTogRHJvcGRvd25DaG9pY2Uge1xuICAgIHJldHVybiAoXG4gICAgICB0aGlzLmNob2ljZXMuZmluZChcbiAgICAgICAgKGNob2ljZSkgPT5cbiAgICAgICAgICBKU09OLnN0cmluZ2lmeShjaG9pY2UudmFsdWUpID09PSBKU09OLnN0cmluZ2lmeSh0aGlzLnNlbGVjdGVkKVxuICAgICAgKSA/PyB0aGlzLmNob2ljZXNbMF1cbiAgICApXG4gIH1cblxuICBnZXQgaWQoKSB7XG4gICAgcmV0dXJuIHRoaXMudGl0bGUudG9Mb3dlckNhc2UoKS5yZXBsYWNlKC9bXmEtel0rL2csICctJylcbiAgfVxuXG4gIGdldENob2ljZUxhYmVsKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuc2VsZWN0ZWRDaG9pY2U/LmxhYmVsXG4gIH1cblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMubWF4Um93cykgdGhpcy5tYXhSb3dzID0gREVGQVVMVF9ST1dfTlVNQkVSU1xuICAgIGlmICghdGhpcy5jaG9pY2VzIHx8IHRoaXMuY2hvaWNlcy5sZW5ndGggPT09IDApIHtcbiAgICAgIHRoaXMuY2hvaWNlcyA9IFtdXG4gICAgfVxuICB9XG5cbiAgaXNTZWxlY3RlZChjaG9pY2U6IERyb3Bkb3duQ2hvaWNlKSB7XG4gICAgcmV0dXJuIGNob2ljZSA9PT0gdGhpcy5zZWxlY3RlZENob2ljZVxuICB9XG5cbiAgb25TZWxlY3RWYWx1ZShjaG9pY2U6IERyb3Bkb3duQ2hvaWNlKSB7XG4gICAgdGhpcy5jbG9zZU92ZXJsYXkoKVxuICAgIHRoaXMuc2VsZWN0ZWQgPSBjaG9pY2UudmFsdWVcbiAgICB0aGlzLnNlbGVjdFZhbHVlLmVtaXQodGhpcy5zZWxlY3RlZClcbiAgfVxuXG4gIG9wZW5PdmVybGF5KCkge1xuICAgIHRoaXMub3ZlcmxheVdpZHRoID1cbiAgICAgIHRoaXMub3ZlcmxheU9yaWdpbi5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KClcbiAgICAgICAgLndpZHRoICsgJ3B4J1xuICAgIHRoaXMub3ZlcmxheU1heEhlaWdodCA9IHRoaXMubWF4Um93c1xuICAgICAgPyBgJHt0aGlzLm1heFJvd3MgKiAyOSArIDYwfXB4YFxuICAgICAgOiAnbm9uZSdcbiAgICB0aGlzLm92ZXJsYXlPcGVuID0gdHJ1ZVxuICAgIHJldHVybiBQcm9taXNlLmFsbChbXG4gICAgICBmaXJzdFZhbHVlRnJvbSh0aGlzLm92ZXJsYXkuYXR0YWNoKSxcbiAgICAgIGZpcnN0VmFsdWVGcm9tKHRoaXMuY2hvaWNlSW5wdXRzLmNoYW5nZXMpLFxuICAgIF0pXG4gIH1cblxuICBjbG9zZU92ZXJsYXkoKSB7XG4gICAgdGhpcy5vdmVybGF5T3BlbiA9IGZhbHNlXG4gIH1cblxuICBmb2N1c0ZpcnN0SXRlbSgpIHtcbiAgICB0aGlzLmNob2ljZUlucHV0cy5nZXQoMCkubmF0aXZlRWxlbWVudC5mb2N1cygpXG4gIH1cblxuICBmb2N1c0xhc3RJdGVtKCkge1xuICAgIHRoaXMuY2hvaWNlSW5wdXRzLmdldCh0aGlzLmNob2ljZUlucHV0cy5sZW5ndGggLSAxKS5uYXRpdmVFbGVtZW50LmZvY3VzKClcbiAgfVxuXG4gIGFzeW5jIGhhbmRsZVRyaWdnZXJLZXlkb3duKGV2ZW50OiBLZXlib2FyZEV2ZW50KSB7XG4gICAgY29uc3Qga2V5Q29kZSA9IGV2ZW50LmNvZGVcbiAgICBjb25zdCBpc09wZW5LZXkgPVxuICAgICAga2V5Q29kZSA9PT0gJ0Fycm93RG93bicgfHxcbiAgICAgIGtleUNvZGUgPT09ICdBcnJvd1VwJyB8fFxuICAgICAga2V5Q29kZSA9PT0gJ0Fycm93TGVmdCcgfHxcbiAgICAgIGtleUNvZGUgPT09ICdBcnJvd1JpZ2h0JyB8fFxuICAgICAga2V5Q29kZSA9PT0gJ0VudGVyJyB8fFxuICAgICAga2V5Q29kZSA9PT0gJ1NwYWNlJ1xuICAgIGNvbnN0IGlzQ2xvc2VLZXkgPSBrZXlDb2RlID09PSAnRXNjYXBlJ1xuICAgIGlmIChpc09wZW5LZXkpIHtcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KClcbiAgICAgIGlmICghdGhpcy5vdmVybGF5T3Blbikge1xuICAgICAgICBhd2FpdCB0aGlzLm9wZW5PdmVybGF5KClcbiAgICAgIH1cbiAgICAgIGlmIChrZXlDb2RlID09PSAnQXJyb3dMZWZ0JyB8fCBrZXlDb2RlID09PSAnQXJyb3dVcCcpIHRoaXMuZm9jdXNMYXN0SXRlbSgpXG4gICAgICBlbHNlIHRoaXMuZm9jdXNGaXJzdEl0ZW0oKVxuICAgIH0gZWxzZSBpZiAodGhpcy5vdmVybGF5T3BlbiAmJiBpc0Nsb3NlS2V5KSB7XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpXG4gICAgICB0aGlzLmNsb3NlT3ZlcmxheSgpXG4gICAgfVxuICB9XG5cbiAgaGFuZGxlT3ZlcmxheUtleWRvd24oZXZlbnQ6IEtleWJvYXJkRXZlbnQpIHtcbiAgICBpZiAoIXRoaXMub3ZlcmxheU9wZW4pIHJldHVyblxuICAgIGNvbnN0IGtleUNvZGUgPSBldmVudC5jb2RlXG4gICAgaWYgKGtleUNvZGUgPT09ICdBcnJvd0Rvd24nIHx8IGtleUNvZGUgPT09ICdBcnJvd1JpZ2h0Jykge1xuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKVxuICAgICAgdGhpcy5zaGlmdEl0ZW1Gb2N1cygxKVxuICAgIH0gZWxzZSBpZiAoa2V5Q29kZSA9PT0gJ0Fycm93TGVmdCcgfHwga2V5Q29kZSA9PT0gJ0Fycm93VXAnKSB7XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpXG4gICAgICB0aGlzLnNoaWZ0SXRlbUZvY3VzKC0xKVxuICAgIH0gZWxzZSBpZiAoa2V5Q29kZSA9PT0gJ0VzY2FwZScpIHtcbiAgICAgIHRoaXMuY2xvc2VPdmVybGF5KClcbiAgICB9XG4gIH1cblxuICBzaGlmdEl0ZW1Gb2N1cyhzaGlmdDogbnVtYmVyKSB7XG4gICAgY29uc3QgaW5kZXggPSB0aGlzLmZvY3VzZWRJbmRleFxuICAgIGlmIChpbmRleCA9PT0gLTEpIHJldHVyblxuICAgIGNvbnN0IG1heCA9IHRoaXMuY2hvaWNlSW5wdXRzLmxlbmd0aFxuICAgIC8vIG1vZHVsbywgc2VlIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0phdmFTY3JpcHQvUmVmZXJlbmNlL09wZXJhdG9ycy9SZW1haW5kZXJcbiAgICBjb25zdCBuZXdJbmRleCA9ICgoKGluZGV4ICsgc2hpZnQpICUgbWF4KSArIG1heCkgJSBtYXhcbiAgICB0aGlzLmNob2ljZUlucHV0cy5nZXQobmV3SW5kZXgpLm5hdGl2ZUVsZW1lbnQuZm9jdXMoKVxuICB9XG5cbiAgZ2V0IGZvY3VzZWRJbmRleCgpOiBudW1iZXIgfCAtMSB7XG4gICAgcmV0dXJuIHRoaXMuY2hvaWNlSW5wdXRzLnJlZHVjZShcbiAgICAgIChwcmV2LCBjdXJyLCBjdXJJbmRleCkgPT5cbiAgICAgICAgY3Vyci5uYXRpdmVFbGVtZW50ID09PSBkb2N1bWVudC5hY3RpdmVFbGVtZW50ID8gY3VySW5kZXggOiBwcmV2LFxuICAgICAgLTFcbiAgICApXG4gIH1cblxuICBzZWxlY3RJZkVudGVyKGV2ZW50OiBLZXlib2FyZEV2ZW50LCBjaG9pY2U6IERyb3Bkb3duQ2hvaWNlKSB7XG4gICAgaWYgKGV2ZW50LmNvZGUgPT09ICdFbnRlcicpIHtcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KClcbiAgICAgIHRoaXMub25TZWxlY3RWYWx1ZShjaG9pY2UpXG4gICAgfVxuICB9XG59XG4iLCI8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LWNvbCBzbTpmbGV4LXJvdyBzbTppdGVtcy1jZW50ZXIgcmVsYXRpdmUgdy1mdWxsXCI+XG4gIDxzcGFuXG4gICAgKm5nSWY9XCJzaG93VGl0bGVcIlxuICAgIGNsYXNzPVwidHJhY2tpbmctd2lkZSB0ZXh0LXNtIG1iLTIgc206bWItMCBzbTptci0yIHdoaXRlc3BhY2Utbm93cmFwXCJcbiAgICBbYXR0ci5mb3JdPVwiaWRcIlxuICA+XG4gICAge3sgdGl0bGUgfX1cbiAgPC9zcGFuPlxuICA8Z24tdWktYnV0dG9uXG4gICAgdHlwZT1cIm91dGxpbmVcIlxuICAgIGNsYXNzPVwiZ3JvdyBtaW4tdy0wXCJcbiAgICBbc3R5bGUuLS1nbi11aS1idXR0b24tcGFkZGluZ109XCInOHB4IDhweCA4cHggMTZweCdcIlxuICAgIGV4dHJhQ2xhc3M9XCJiZy1iYWNrZ3JvdW5kIGZsZXggZmxleC1yb3cgdy1mdWxsIHt7IGV4dHJhQnRuQ2xhc3MgfX1cIlxuICAgIFt0aXRsZV09XCJ0aXRsZVwiXG4gICAgW2F0dHIuYXJpYS1vd25zXT1cImlkXCJcbiAgICAoYnV0dG9uQ2xpY2spPVwib3Blbk92ZXJsYXkoKVwiXG4gICAgY2RrT3ZlcmxheU9yaWdpblxuICAgICNvdmVybGF5T3JpZ2luPVwiY2RrT3ZlcmxheU9yaWdpblwiXG4gICAgKGtleWRvd24pPVwiaGFuZGxlVHJpZ2dlcktleWRvd24oJGV2ZW50KVwiXG4gICAgW2Rpc2FibGVkXT1cImRpc2FibGVkXCJcbiAgPlxuICAgIDxkaXYgY2xhc3M9XCJncm93IHRydW5jYXRlIHB5LTEgbXItMiB0ZXh0LWxlZnRcIj5cbiAgICAgIHt7IGdldENob2ljZUxhYmVsKCkgfCB0cmFuc2xhdGUgfX1cbiAgICA8L2Rpdj5cbiAgICA8bmctaWNvblxuICAgICAgW25hbWVdPVwib3ZlcmxheU9wZW4gPyAnbWF0RXhwYW5kTGVzcycgOiAnbWF0RXhwYW5kTW9yZSdcIlxuICAgICAgY2xhc3M9XCJzaHJpbmstMCBvcGFjaXR5LTQwXCJcbiAgICA+XG4gICAgPC9uZy1pY29uPlxuICA8L2duLXVpLWJ1dHRvbj5cbjwvZGl2PlxuXG48bmctdGVtcGxhdGVcbiAgY2RrQ29ubmVjdGVkT3ZlcmxheVxuICBjZGtDb25uZWN0ZWRPdmVybGF5SGFzQmFja2Ryb3BcbiAgY2RrQ29ubmVjdGVkT3ZlcmxheUJhY2tkcm9wQ2xhc3M9XCJjZGstb3ZlcmxheS10cmFuc3BhcmVudC1iYWNrZHJvcFwiXG4gIFtjZGtDb25uZWN0ZWRPdmVybGF5T3JpZ2luXT1cIm92ZXJsYXlPcmlnaW5cIlxuICBbY2RrQ29ubmVjdGVkT3ZlcmxheU9wZW5dPVwib3ZlcmxheU9wZW5cIlxuICBbY2RrQ29ubmVjdGVkT3ZlcmxheVBvc2l0aW9uc109XCJvdmVybGF5UG9zaXRpb25zXCJcbiAgW2Nka0Nvbm5lY3RlZE92ZXJsYXlGbGV4aWJsZURpbWVuc2lvbnNdPVwidHJ1ZVwiXG4gIChvdmVybGF5T3V0c2lkZUNsaWNrKT1cImNsb3NlT3ZlcmxheSgpXCJcbiAgKGRldGFjaCk9XCJjbG9zZU92ZXJsYXkoKVwiXG4+XG4gIDxkaXZcbiAgICBjbGFzcz1cImJnLXdoaXRlIGJvcmRlciBib3JkZXItZ3JheS0zMDAgcm91bmRlZCBzaGFkb3ctbGcgcHktMiB3LWZ1bGwgb3ZlcmZsb3cteC1oaWRkZW4gb3ZlcmZsb3cteS1hdXRvIG92ZXJsYXktY29udGFpbmVyXCJcbiAgICBbc3R5bGUubWF4LWhlaWdodF09XCJvdmVybGF5TWF4SGVpZ2h0XCJcbiAgICBbc3R5bGUubWluLXdpZHRoXT1cIm92ZXJsYXlXaWR0aFwiXG4gICAgcm9sZT1cImxpc3Rib3hcIlxuICAgIHRhYmluZGV4PVwiLTFcIlxuICAgIFthdHRyLmlkXT1cImlkXCJcbiAgICBbYXR0ci5hcmlhLW11bHRpc2VsZWN0YWJsZV09XCJ0cnVlXCJcbiAgICBbYXR0ci5hcmlhLWxhYmVsXT1cInRpdGxlXCJcbiAgICAoa2V5ZG93bik9XCJoYW5kbGVPdmVybGF5S2V5ZG93bigkZXZlbnQpXCJcbiAgPlxuICAgIDxidXR0b25cbiAgICAgICNjaG9pY2VJbnB1dHNcbiAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgKm5nRm9yPVwibGV0IGNob2ljZSBvZiBjaG9pY2VzXCJcbiAgICAgIFt0aXRsZV09XCJjaG9pY2UubGFiZWwgfCB0cmFuc2xhdGVcIlxuICAgICAgY2xhc3M9XCJmbGV4IHB4LTUgcHktMSB3LWZ1bGwgdGV4dC1zdGFydCBjdXJzb3ItcG9pbnRlciB0cmFuc2l0aW9uLWNvbG9yc1wiXG4gICAgICBbbmdDbGFzc109XCJcbiAgICAgICAgaXNTZWxlY3RlZChjaG9pY2UpXG4gICAgICAgICAgPyAndGV4dC13aGl0ZSBiZy1wcmltYXJ5IGhvdmVyOnRleHQtd2hpdGUgaG92ZXI6YmctcHJpbWFyeS1kYXJrZXIgZm9jdXM6dGV4dC13aGl0ZSBmb2N1czpiZy1wcmltYXJ5LWRhcmtlcidcbiAgICAgICAgICA6ICd0ZXh0LWdyYXktOTAwIGhvdmVyOnRleHQtcHJpbWFyeS1kYXJrZXN0IGhvdmVyOmJnLWdyYXktNTAgZm9jdXM6dGV4dC1wcmltYXJ5LWRhcmtlc3QgZm9jdXM6YmctZ3JheS01MCdcbiAgICAgIFwiXG4gICAgICAoY2xpY2spPVwib25TZWxlY3RWYWx1ZShjaG9pY2UpXCJcbiAgICAgIChrZXlkb3duKT1cInNlbGVjdElmRW50ZXIoJGV2ZW50LCBjaG9pY2UpXCJcbiAgICAgIFthdHRyLmRhdGEtY3ktdmFsdWVdPVwiY2hvaWNlLnZhbHVlLnRvU3RyaW5nKClcIlxuICAgICAgW2F0dHIuZGF0YS1jeS1hY3RpdmVdPVwiaXNTZWxlY3RlZChjaG9pY2UpID8gJ3RydWUnIDogdW5kZWZpbmVkXCJcbiAgICA+XG4gICAgICA8c3BhbiBjbGFzcz1cInRleHQtWzE0cHhdXCI+XG4gICAgICAgIHt7IGNob2ljZS5sYWJlbCB8IHRyYW5zbGF0ZSB9fVxuICAgICAgPC9zcGFuPlxuICAgIDwvYnV0dG9uPlxuICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG4iXX0=