UNPKG

@edugouvfr/ngx-dsfr

Version:

NgxDsfr est un portage Angular des éléments d'interface du Système de Design de l'État Français (DSFR).

144 lines 24.5 kB
import { CommonModule } from '@angular/common'; import { Component, EventEmitter, Input, Output, ViewEncapsulation } from '@angular/core'; import { FormsModule } from '@angular/forms'; import { DsfrI18nPipe } from '../../shared'; import { DsfrLinkComponent } from '../link'; import { CONSENT_MODAL_ID, ConsentManagerComponent } from './consent-manager/consent-manager.component'; import * as i0 from "@angular/core"; export class DsfrConsentBannerComponent { constructor() { /** * URL de présentation des données personnelles. Utilisé si welcome n'est pas renseigné * RGPD : Règlement Général sur la Protection des Données */ this.rgpdLink = 'https://www.transformation.gouv.fr/donnees-personnelles-et-cookies'; /** * Sélection bouton Tout accepter. */ this.acceptAllSelect = new EventEmitter(); /** * Sélection bouton Tout refuser. */ this.refuseAllSelect = new EventEmitter(); /** Sélection bouton Personnaliser */ this.customizeSelect = new EventEmitter(); /** Validation de la personnalisation */ this.confirmCustomizeSelect = new EventEmitter(); /** Sélection de Accepter ou Refuser pour une finalité */ this.finalityChange = new EventEmitter(); /** * Signale quand la route rgdp est sélectionnée. * * @since 1.7 */ this.rgpdRouteSelect = new EventEmitter(); /** Identifiant de la modale ('consent-modal' par défaut) */ this.modalId = CONSENT_MODAL_ID; } /** @deprecated (since 1.7) utiliser `rgdpLink` à la place. */ get rgpdUrl() { return this.rgpdLink; } /** @deprecated (since 1.7) utiliser 'heading' à la place. */ get title() { return this.heading; } /** @deprecated (since 1.7) utiliser `rgdpLink` à la place. */ set rgpdUrl(value) { this.rgpdLink = value; } /** @deprecated (since 1.7) utiliser `heading` à la place. */ set title(value) { this.heading = value; } /** * Accepter tout * @internal */ onAcceptAll() { this.acceptAllSelect.emit(); } /** * Refuser tout * @internal */ onRefuseAll() { this.refuseAllSelect.emit(); } /** * Changement de sélection accept/refuse d'une finalité ou sous-finalité. * @internal */ onFinalityChange(finality) { this.finalityChange.emit(finality); } /** * Ouverture du panneau de personnalisation des finalités. * @internal */ onCustomizeSelect() { this.customizeSelect.emit(); } /** * Confirmation de la personnalisation des finalités. * @param finalities liste des finalités * @internal */ onConfirmCustomize(finalities) { this.confirmCustomizeSelect.emit(finalities); } /** * Emet un événement lors de la sélection du lien RGPD si l'accès aux RGPD est fait via la propriété 'route'. * * @since 1.7 * @internal */ onRgpdSelect() { // Relais. Signale quand la route rgdp est sélectionnée if (this.rgpdRoute) this.rgpdRouteSelect.emit(this.rgpdRoute); } static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DsfrConsentBannerComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); } static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: DsfrConsentBannerComponent, isStandalone: true, selector: "dsfr-consent-banner", inputs: { rgpdLink: "rgpdLink", rgpdLinkTarget: "rgpdLinkTarget", rgpdRoute: "rgpdRoute", rgpdRouterLink: "rgpdRouterLink", rgpdRouterLinkActive: "rgpdRouterLinkActive", rgpdRouterLinkExtras: "rgpdRouterLinkExtras", heading: "heading", finalities: "finalities", welcome: "welcome", modalId: "modalId", rgpdUrl: "rgpdUrl", title: "title" }, outputs: { acceptAllSelect: "acceptAllSelect", refuseAllSelect: "refuseAllSelect", customizeSelect: "customizeSelect", confirmCustomizeSelect: "confirmCustomizeSelect", finalityChange: "finalityChange", rgpdRouteSelect: "rgpdRouteSelect" }, ngImport: i0, template: "<div class=\"fr-consent-banner\">\n @if (title) {\n <h2 class=\"fr-h6\">{{ title }}</h2>\n }\n <!-- BUG: Classe 'fr-consent-banner__content' inconnue en DSFR 1.9.3 -->\n <div class=\"fr-consent-banner__content\">\n @if (welcome) {\n <p class=\"fr-text--sm\" [innerHtml]=\"welcome\"></p>\n } @else {\n <p class=\"fr-text--sm\">\n {{ 'consent.welcome[0]' | dsfrI18n }}\n <dsfr-link\n [customClass]=\"'edu-link'\"\n [link]=\"rgpdLink\"\n [linkTarget]=\"rgpdLinkTarget\"\n [route]=\"rgpdRoute ?? ''\"\n [routePath]=\"rgpdRouterLink ?? ''\"\n [routerLinkActive]=\"rgpdRouterLinkActive ?? ''\"\n [routerLinkExtras]=\"rgpdRouterLinkExtras\"\n [tooltipMessage]=\"'consent.welcome[1]' | dsfrI18n\"\n (linkSelect)=\"onRgpdSelect()\"\n >{{ 'consent.welcome[1]' | dsfrI18n }}</dsfr-link\n >{{ 'consent.welcome[2]' | dsfrI18n }}\n </p>\n }\n </div>\n <ul\n class=\"fr-consent-banner__buttons fr-btns-group fr-btns-group--right fr-btns-group--inline-reverse fr-btns-group--inline-sm\">\n <li>\n <button type=\"button\" (click)=\"onAcceptAll()\" class=\"fr-btn\" title=\"{{ 'consent.allowAllCookies' | dsfrI18n }}\">\n {{ 'consent.acceptAll' | dsfrI18n }}\n </button>\n </li>\n <li>\n <button type=\"button\" (click)=\"onRefuseAll()\" class=\"fr-btn\" title=\"{{ 'consent.refuseAllCookies' | dsfrI18n }}\">\n {{ 'consent.refuseAll' | dsfrI18n }}\n </button>\n </li>\n <li>\n <button\n type=\"button\"\n class=\"fr-btn fr-btn--secondary\"\n (click)=\"onCustomizeSelect()\"\n data-fr-opened=\"false\"\n [attr.aria-controls]=\"modalId\"\n title=\"{{ 'consent.customizeCookies' | dsfrI18n }}\">\n {{ 'consent.customize' | dsfrI18n }}\n </button>\n </li>\n </ul>\n</div>\n\n<edu-consent-manager\n [rgpdNavigation]=\"{\n link: rgpdLink,\n linkTarget: rgpdLinkTarget,\n route: rgpdRoute,\n routerLink: rgpdRouterLink,\n routerLinkActive: rgpdRouterLinkActive,\n routerLinkExtras: rgpdRouterLinkExtras\n }\"\n [finalities]=\"finalities\"\n (finalityChange)=\"onFinalityChange($event)\"\n [modalId]=\"modalId\"\n (confirmSelect)=\"onConfirmCustomize(finalities)\"\n (rgpdRouteSelect)=\"onRgpdSelect()\"></edu-consent-manager>\n", dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: FormsModule }, { kind: "component", type: ConsentManagerComponent, selector: "edu-consent-manager", inputs: ["rgpdNavigation", "finalities", "modalId"], outputs: ["confirmSelect", "finalityChange", "rgpdRouteSelect"] }, { kind: "component", type: DsfrLinkComponent, selector: "dsfr-link", inputs: ["ariaCurrent", "ariaLabel", "ariaControls", "customClass", "disabled", "icon", "iconPosition", "linkId", "label", "link", "linkTarget", "route", "routePath", "routerLinkActive", "routerLinkActiveOptions", "routerLinkExtras", "linkSize", "tooltipMessage", "mode", "ariaCurrentWhenActive", "size", "targetLink", "routerLink"], outputs: ["linkSelect"] }, { kind: "pipe", type: DsfrI18nPipe, name: "dsfrI18n" }], encapsulation: i0.ViewEncapsulation.None }); } } i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DsfrConsentBannerComponent, decorators: [{ type: Component, args: [{ selector: 'dsfr-consent-banner', encapsulation: ViewEncapsulation.None, standalone: true, imports: [CommonModule, FormsModule, ConsentManagerComponent, DsfrLinkComponent, DsfrI18nPipe], template: "<div class=\"fr-consent-banner\">\n @if (title) {\n <h2 class=\"fr-h6\">{{ title }}</h2>\n }\n <!-- BUG: Classe 'fr-consent-banner__content' inconnue en DSFR 1.9.3 -->\n <div class=\"fr-consent-banner__content\">\n @if (welcome) {\n <p class=\"fr-text--sm\" [innerHtml]=\"welcome\"></p>\n } @else {\n <p class=\"fr-text--sm\">\n {{ 'consent.welcome[0]' | dsfrI18n }}\n <dsfr-link\n [customClass]=\"'edu-link'\"\n [link]=\"rgpdLink\"\n [linkTarget]=\"rgpdLinkTarget\"\n [route]=\"rgpdRoute ?? ''\"\n [routePath]=\"rgpdRouterLink ?? ''\"\n [routerLinkActive]=\"rgpdRouterLinkActive ?? ''\"\n [routerLinkExtras]=\"rgpdRouterLinkExtras\"\n [tooltipMessage]=\"'consent.welcome[1]' | dsfrI18n\"\n (linkSelect)=\"onRgpdSelect()\"\n >{{ 'consent.welcome[1]' | dsfrI18n }}</dsfr-link\n >{{ 'consent.welcome[2]' | dsfrI18n }}\n </p>\n }\n </div>\n <ul\n class=\"fr-consent-banner__buttons fr-btns-group fr-btns-group--right fr-btns-group--inline-reverse fr-btns-group--inline-sm\">\n <li>\n <button type=\"button\" (click)=\"onAcceptAll()\" class=\"fr-btn\" title=\"{{ 'consent.allowAllCookies' | dsfrI18n }}\">\n {{ 'consent.acceptAll' | dsfrI18n }}\n </button>\n </li>\n <li>\n <button type=\"button\" (click)=\"onRefuseAll()\" class=\"fr-btn\" title=\"{{ 'consent.refuseAllCookies' | dsfrI18n }}\">\n {{ 'consent.refuseAll' | dsfrI18n }}\n </button>\n </li>\n <li>\n <button\n type=\"button\"\n class=\"fr-btn fr-btn--secondary\"\n (click)=\"onCustomizeSelect()\"\n data-fr-opened=\"false\"\n [attr.aria-controls]=\"modalId\"\n title=\"{{ 'consent.customizeCookies' | dsfrI18n }}\">\n {{ 'consent.customize' | dsfrI18n }}\n </button>\n </li>\n </ul>\n</div>\n\n<edu-consent-manager\n [rgpdNavigation]=\"{\n link: rgpdLink,\n linkTarget: rgpdLinkTarget,\n route: rgpdRoute,\n routerLink: rgpdRouterLink,\n routerLinkActive: rgpdRouterLinkActive,\n routerLinkExtras: rgpdRouterLinkExtras\n }\"\n [finalities]=\"finalities\"\n (finalityChange)=\"onFinalityChange($event)\"\n [modalId]=\"modalId\"\n (confirmSelect)=\"onConfirmCustomize(finalities)\"\n (rgpdRouteSelect)=\"onRgpdSelect()\"></edu-consent-manager>\n" }] }], propDecorators: { rgpdLink: [{ type: Input }], rgpdLinkTarget: [{ type: Input }], rgpdRoute: [{ type: Input }], rgpdRouterLink: [{ type: Input }], rgpdRouterLinkActive: [{ type: Input }], rgpdRouterLinkExtras: [{ type: Input }], heading: [{ type: Input }], finalities: [{ type: Input }], acceptAllSelect: [{ type: Output }], refuseAllSelect: [{ type: Output }], customizeSelect: [{ type: Output }], confirmCustomizeSelect: [{ type: Output }], finalityChange: [{ type: Output }], rgpdRouteSelect: [{ type: Output }], welcome: [{ type: Input }], modalId: [{ type: Input }], rgpdUrl: [{ type: Input }], title: [{ type: Input }] } }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uc2VudC1iYW5uZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LWRzZnItY29tcG9uZW50cy9zcmMvbGliL2NvbXBvbmVudHMvY29uc2VudC1iYW5uZXIvY29uc2VudC1iYW5uZXIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LWRzZnItY29tcG9uZW50cy9zcmMvbGliL2NvbXBvbmVudHMvY29uc2VudC1iYW5uZXIvY29uc2VudC1iYW5uZXIuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDMUYsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRTdDLE9BQU8sRUFBRSxZQUFZLEVBQWtCLE1BQU0sY0FBYyxDQUFDO0FBQzVELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLFNBQVMsQ0FBQztBQUU1QyxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSw2Q0FBNkMsQ0FBQzs7QUFTeEcsTUFBTSxPQUFPLDBCQUEwQjtJQVB2QztRQVFFOzs7V0FHRztRQUNNLGFBQVEsR0FBRyxvRUFBb0UsQ0FBQztRQThDekY7O1dBRUc7UUFDTyxvQkFBZSxHQUFHLElBQUksWUFBWSxFQUFRLENBQUM7UUFFckQ7O1dBRUc7UUFDTyxvQkFBZSxHQUFHLElBQUksWUFBWSxFQUFRLENBQUM7UUFFckQscUNBQXFDO1FBQzNCLG9CQUFlLEdBQUcsSUFBSSxZQUFZLEVBQVEsQ0FBQztRQUVyRCx3Q0FBd0M7UUFDOUIsMkJBQXNCLEdBQUcsSUFBSSxZQUFZLEVBQWtCLENBQUM7UUFFdEUseURBQXlEO1FBQy9DLG1CQUFjLEdBQUcsSUFBSSxZQUFZLEVBQWdCLENBQUM7UUFFNUQ7Ozs7V0FJRztRQUNPLG9CQUFlLEdBQUcsSUFBSSxZQUFZLEVBQVUsQ0FBQztRQUt2RCw0REFBNEQ7UUFDbkQsWUFBTyxHQUFXLGdCQUFnQixDQUFDO0tBeUU3QztJQXZFQyw4REFBOEQ7SUFDOUQsSUFBSSxPQUFPO1FBQ1QsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDO0lBQ3ZCLENBQUM7SUFFRCw2REFBNkQ7SUFDN0QsSUFBSSxLQUFLO1FBQ1AsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDO0lBQ3RCLENBQUM7SUFFRCw4REFBOEQ7SUFDOUQsSUFBYSxPQUFPLENBQUMsS0FBYTtRQUNoQyxJQUFJLENBQUMsUUFBUSxHQUFHLEtBQUssQ0FBQztJQUN4QixDQUFDO0lBRUQsNkRBQTZEO0lBQzdELElBQWEsS0FBSyxDQUFDLEtBQWE7UUFDOUIsSUFBSSxDQUFDLE9BQU8sR0FBRyxLQUFLLENBQUM7SUFDdkIsQ0FBQztJQUVEOzs7T0FHRztJQUNILFdBQVc7UUFDVCxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksRUFBRSxDQUFDO0lBQzlCLENBQUM7SUFFRDs7O09BR0c7SUFDSCxXQUFXO1FBQ1QsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUM5QixDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsZ0JBQWdCLENBQUMsUUFBc0I7UUFDckMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDckMsQ0FBQztJQUVEOzs7T0FHRztJQUNILGlCQUFpQjtRQUNmLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDOUIsQ0FBQztJQUVEOzs7O09BSUc7SUFDSCxrQkFBa0IsQ0FBQyxVQUEwQjtRQUMzQyxJQUFJLENBQUMsc0JBQXNCLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBQy9DLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNILFlBQVk7UUFDVix1REFBdUQ7UUFDdkQsSUFBSSxJQUFJLENBQUMsU0FBUztZQUFFLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUNoRSxDQUFDOytHQXpKVSwwQkFBMEI7bUdBQTFCLDBCQUEwQixvcEJDaEJ2QyxxMUVBa0VBLDJDRHBEWSxZQUFZLDhCQUFFLFdBQVcsK0JBQUUsdUJBQXVCLHNMQUFFLGlCQUFpQix3WkFBRSxZQUFZOzs0RkFFbEYsMEJBQTBCO2tCQVB0QyxTQUFTOytCQUNFLHFCQUFxQixpQkFFaEIsaUJBQWlCLENBQUMsSUFBSSxjQUN6QixJQUFJLFdBQ1AsQ0FBQyxZQUFZLEVBQUUsV0FBVyxFQUFFLHVCQUF1QixFQUFFLGlCQUFpQixFQUFFLFlBQVksQ0FBQzs4QkFPckYsUUFBUTtzQkFBaEIsS0FBSztnQkFPRyxjQUFjO3NCQUF0QixLQUFLO2dCQU1HLFNBQVM7c0JBQWpCLEtBQUs7Z0JBT0csY0FBYztzQkFBdEIsS0FBSztnQkFPRyxvQkFBb0I7c0JBQTVCLEtBQUs7Z0JBT0csb0JBQW9CO3NCQUE1QixLQUFLO2dCQUtHLE9BQU87c0JBQWYsS0FBSztnQkFLRyxVQUFVO3NCQUFsQixLQUFLO2dCQUtJLGVBQWU7c0JBQXhCLE1BQU07Z0JBS0csZUFBZTtzQkFBeEIsTUFBTTtnQkFHRyxlQUFlO3NCQUF4QixNQUFNO2dCQUdHLHNCQUFzQjtzQkFBL0IsTUFBTTtnQkFHRyxjQUFjO3NCQUF2QixNQUFNO2dCQU9HLGVBQWU7c0JBQXhCLE1BQU07Z0JBR0UsT0FBTztzQkFBZixLQUFLO2dCQUdHLE9BQU87c0JBQWYsS0FBSztnQkFhTyxPQUFPO3NCQUFuQixLQUFLO2dCQUtPLEtBQUs7c0JBQWpCLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgQ29tcG9uZW50LCBFdmVudEVtaXR0ZXIsIElucHV0LCBPdXRwdXQsIFZpZXdFbmNhcHN1bGF0aW9uIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBGb3Jtc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IE5hdmlnYXRpb25FeHRyYXMgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHsgRHNmckkxOG5QaXBlLCBEc2ZyTGlua1RhcmdldCB9IGZyb20gJy4uLy4uL3NoYXJlZCc7XG5pbXBvcnQgeyBEc2ZyTGlua0NvbXBvbmVudCB9IGZyb20gJy4uL2xpbmsnO1xuaW1wb3J0IHsgRHNmckZpbmFsaXR5IH0gZnJvbSAnLi9jb25zZW50LWJhbm5lci5tb2RlbCc7XG5pbXBvcnQgeyBDT05TRU5UX01PREFMX0lELCBDb25zZW50TWFuYWdlckNvbXBvbmVudCB9IGZyb20gJy4vY29uc2VudC1tYW5hZ2VyL2NvbnNlbnQtbWFuYWdlci5jb21wb25lbnQnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdkc2ZyLWNvbnNlbnQtYmFubmVyJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2NvbnNlbnQtYmFubmVyLmNvbXBvbmVudC5odG1sJyxcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW0NvbW1vbk1vZHVsZSwgRm9ybXNNb2R1bGUsIENvbnNlbnRNYW5hZ2VyQ29tcG9uZW50LCBEc2ZyTGlua0NvbXBvbmVudCwgRHNmckkxOG5QaXBlXSxcbn0pXG5leHBvcnQgY2xhc3MgRHNmckNvbnNlbnRCYW5uZXJDb21wb25lbnQge1xuICAvKipcbiAgICogVVJMIGRlIHByw6lzZW50YXRpb24gZGVzIGRvbm7DqWVzIHBlcnNvbm5lbGxlcy4gVXRpbGlzw6kgc2kgd2VsY29tZSBuJ2VzdCBwYXMgcmVuc2VpZ27DqVxuICAgKiBSR1BEIDogUsOoZ2xlbWVudCBHw6luw6lyYWwgc3VyIGxhIFByb3RlY3Rpb24gZGVzIERvbm7DqWVzXG4gICAqL1xuICBASW5wdXQoKSByZ3BkTGluayA9ICdodHRwczovL3d3dy50cmFuc2Zvcm1hdGlvbi5nb3V2LmZyL2Rvbm5lZXMtcGVyc29ubmVsbGVzLWV0LWNvb2tpZXMnO1xuXG4gIC8qKlxuICAgKiBUYXJnZXQgZHUgbGllbi4gVGFyZ2V0IHBhciBkw6lmYXV0IGRlIGwnYXBwbGljYXRpb24gc2kgbGEgcHJvcHJpw6l0w6kgZXN0IG5vbiByZW5zZWlnbsOpZS5cbiAgICpcbiAgICogQHNpbmNlIDEuN1xuICAgKi9cbiAgQElucHV0KCkgcmdwZExpbmtUYXJnZXQ/OiBEc2ZyTGlua1RhcmdldCB8IHVuZGVmaW5lZDtcblxuICAvKiogUGF0aCBpbnRlcm5lLiBFeGNsdXNpZiBhdmVjIGxpbmsgZXQgcm91dGVyTGluay5cbiAgICpcbiAgICogQHNpbmNlIDEuN1xuICAgKi9cbiAgQElucHV0KCkgcmdwZFJvdXRlPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBQYXRoIGFuZ3VsYXIgZ8OpcsOpIGVuIHRhbnQgcXVlIGRpcmVjdGl2ZSByb3V0ZXJMaW5rLiBFeGNsdXNpZiBhdmVjIGxpbmsgZXQgcm91dGUuXG4gICAqXG4gICAqIEBzaW5jZSAxLjdcbiAgICovXG4gIEBJbnB1dCgpIHJncGRSb3V0ZXJMaW5rPzogc3RyaW5nIHwgc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIFJvdXRlckxpbmsgOiBjbGFzc2UgdXRpbGlzw6llIHBvdXIgbGEgZGlyZWN0aXZlIHJvdXRlckxpbmsgYWN0aXZlLlxuICAgKlxuICAgKiBAc2luY2UgMS43XG4gICAqL1xuICBASW5wdXQoKSByZ3BkUm91dGVyTGlua0FjdGl2ZT86IHN0cmluZyB8IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBSb3V0ZXJMaW5rIDogdmFsZXVycyBhZGRpdGlvbm5lbGxlcyBkZSBuYXZpZ2F0aW9uIHBvdXIgbGUgcm91dGVyTGluayAocXVlcnlQYXJhbXMsIHN0YXRlIGV0Yy4pXG4gICAqXG4gICAqIEBzaW5jZSAxLjdcbiAgICovXG4gIEBJbnB1dCgpIHJncGRSb3V0ZXJMaW5rRXh0cmFzPzogTmF2aWdhdGlvbkV4dHJhcztcblxuICAvKipcbiAgICogVGl0cmUgZGUgbGEgYmFubmnDqHJlLlxuICAgKi9cbiAgQElucHV0KCkgaGVhZGluZzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBNb2TDqGxlIGRlIHByw6lzZW50YXRpb24gZGVzIGZpbmFsaXTDqXMuXG4gICAqL1xuICBASW5wdXQoKSBmaW5hbGl0aWVzOiBEc2ZyRmluYWxpdHlbXTtcblxuICAvKipcbiAgICogU8OpbGVjdGlvbiBib3V0b24gVG91dCBhY2NlcHRlci5cbiAgICovXG4gIEBPdXRwdXQoKSBhY2NlcHRBbGxTZWxlY3QgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG5cbiAgLyoqXG4gICAqIFPDqWxlY3Rpb24gYm91dG9uIFRvdXQgcmVmdXNlci5cbiAgICovXG4gIEBPdXRwdXQoKSByZWZ1c2VBbGxTZWxlY3QgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG5cbiAgLyoqIFPDqWxlY3Rpb24gYm91dG9uIFBlcnNvbm5hbGlzZXIgKi9cbiAgQE91dHB1dCgpIGN1c3RvbWl6ZVNlbGVjdCA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcblxuICAvKiogVmFsaWRhdGlvbiBkZSBsYSBwZXJzb25uYWxpc2F0aW9uICovXG4gIEBPdXRwdXQoKSBjb25maXJtQ3VzdG9taXplU2VsZWN0ID0gbmV3IEV2ZW50RW1pdHRlcjxEc2ZyRmluYWxpdHlbXT4oKTtcblxuICAvKiogU8OpbGVjdGlvbiBkZSBBY2NlcHRlciBvdSBSZWZ1c2VyIHBvdXIgdW5lIGZpbmFsaXTDqSAqL1xuICBAT3V0cHV0KCkgZmluYWxpdHlDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPERzZnJGaW5hbGl0eT4oKTtcblxuICAvKipcbiAgICogU2lnbmFsZSBxdWFuZCBsYSByb3V0ZSByZ2RwIGVzdCBzw6lsZWN0aW9ubsOpZS5cbiAgICpcbiAgICogQHNpbmNlIDEuN1xuICAgKi9cbiAgQE91dHB1dCgpIHJncGRSb3V0ZVNlbGVjdCA9IG5ldyBFdmVudEVtaXR0ZXI8c3RyaW5nPigpO1xuXG4gIC8qKiBEZXNjcmlwdGlvbiBkZSBiaWVudmVudWUuIFV0aWxpc2F0aW9uIGR1IHRleHRlIHBhciBkw6lmYXV0IHNpIG5vbiByZW5zZWlnbsOpICovXG4gIEBJbnB1dCgpIHdlbGNvbWU6IHN0cmluZztcblxuICAvKiogSWRlbnRpZmlhbnQgZGUgbGEgbW9kYWxlICgnY29uc2VudC1tb2RhbCcgcGFyIGTDqWZhdXQpICovXG4gIEBJbnB1dCgpIG1vZGFsSWQ6IHN0cmluZyA9IENPTlNFTlRfTU9EQUxfSUQ7XG5cbiAgLyoqIEBkZXByZWNhdGVkIChzaW5jZSAxLjcpIHV0aWxpc2VyIGByZ2RwTGlua2Agw6AgbGEgcGxhY2UuICovXG4gIGdldCByZ3BkVXJsKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMucmdwZExpbms7XG4gIH1cblxuICAvKiogQGRlcHJlY2F0ZWQgKHNpbmNlIDEuNykgdXRpbGlzZXIgJ2hlYWRpbmcnIMOgIGxhIHBsYWNlLiAqL1xuICBnZXQgdGl0bGUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5oZWFkaW5nO1xuICB9XG5cbiAgLyoqIEBkZXByZWNhdGVkIChzaW5jZSAxLjcpIHV0aWxpc2VyIGByZ2RwTGlua2Agw6AgbGEgcGxhY2UuICovXG4gIEBJbnB1dCgpIHNldCByZ3BkVXJsKHZhbHVlOiBzdHJpbmcpIHtcbiAgICB0aGlzLnJncGRMaW5rID0gdmFsdWU7XG4gIH1cblxuICAvKiogQGRlcHJlY2F0ZWQgKHNpbmNlIDEuNykgdXRpbGlzZXIgYGhlYWRpbmdgIMOgIGxhIHBsYWNlLiAqL1xuICBASW5wdXQoKSBzZXQgdGl0bGUodmFsdWU6IHN0cmluZykge1xuICAgIHRoaXMuaGVhZGluZyA9IHZhbHVlO1xuICB9XG5cbiAgLyoqXG4gICAqIEFjY2VwdGVyIHRvdXRcbiAgICogQGludGVybmFsXG4gICAqL1xuICBvbkFjY2VwdEFsbCgpOiB2b2lkIHtcbiAgICB0aGlzLmFjY2VwdEFsbFNlbGVjdC5lbWl0KCk7XG4gIH1cblxuICAvKipcbiAgICogUmVmdXNlciB0b3V0XG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgb25SZWZ1c2VBbGwoKTogdm9pZCB7XG4gICAgdGhpcy5yZWZ1c2VBbGxTZWxlY3QuZW1pdCgpO1xuICB9XG5cbiAgLyoqXG4gICAqIENoYW5nZW1lbnQgZGUgc8OpbGVjdGlvbiBhY2NlcHQvcmVmdXNlIGQndW5lIGZpbmFsaXTDqSBvdSBzb3VzLWZpbmFsaXTDqS5cbiAgICogQGludGVybmFsXG4gICAqL1xuICBvbkZpbmFsaXR5Q2hhbmdlKGZpbmFsaXR5OiBEc2ZyRmluYWxpdHkpOiB2b2lkIHtcbiAgICB0aGlzLmZpbmFsaXR5Q2hhbmdlLmVtaXQoZmluYWxpdHkpO1xuICB9XG5cbiAgLyoqXG4gICAqIE91dmVydHVyZSBkdSBwYW5uZWF1IGRlIHBlcnNvbm5hbGlzYXRpb24gZGVzIGZpbmFsaXTDqXMuXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgb25DdXN0b21pemVTZWxlY3QoKTogdm9pZCB7XG4gICAgdGhpcy5jdXN0b21pemVTZWxlY3QuZW1pdCgpO1xuICB9XG5cbiAgLyoqXG4gICAqIENvbmZpcm1hdGlvbiBkZSBsYSBwZXJzb25uYWxpc2F0aW9uIGRlcyBmaW5hbGl0w6lzLlxuICAgKiBAcGFyYW0gZmluYWxpdGllcyBsaXN0ZSBkZXMgZmluYWxpdMOpc1xuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIG9uQ29uZmlybUN1c3RvbWl6ZShmaW5hbGl0aWVzOiBEc2ZyRmluYWxpdHlbXSk6IHZvaWQge1xuICAgIHRoaXMuY29uZmlybUN1c3RvbWl6ZVNlbGVjdC5lbWl0KGZpbmFsaXRpZXMpO1xuICB9XG5cbiAgLyoqXG4gICAqIEVtZXQgdW4gw6l2w6luZW1lbnQgbG9ycyBkZSBsYSBzw6lsZWN0aW9uIGR1IGxpZW4gUkdQRCBzaSBsJ2FjY8OocyBhdXggUkdQRCBlc3QgZmFpdCB2aWEgbGEgcHJvcHJpw6l0w6kgJ3JvdXRlJy5cbiAgICpcbiAgICogQHNpbmNlIDEuN1xuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIG9uUmdwZFNlbGVjdCgpOiB2b2lkIHtcbiAgICAvLyBSZWxhaXMuIFNpZ25hbGUgcXVhbmQgbGEgcm91dGUgcmdkcCBlc3Qgc8OpbGVjdGlvbm7DqWVcbiAgICBpZiAodGhpcy5yZ3BkUm91dGUpIHRoaXMucmdwZFJvdXRlU2VsZWN0LmVtaXQodGhpcy5yZ3BkUm91dGUpO1xuICB9XG59XG4iLCI8ZGl2IGNsYXNzPVwiZnItY29uc2VudC1iYW5uZXJcIj5cbiAgQGlmICh0aXRsZSkge1xuICAgIDxoMiBjbGFzcz1cImZyLWg2XCI+e3sgdGl0bGUgfX08L2gyPlxuICB9XG4gIDwhLS0gQlVHOiBDbGFzc2UgJ2ZyLWNvbnNlbnQtYmFubmVyX19jb250ZW50JyBpbmNvbm51ZSBlbiBEU0ZSIDEuOS4zIC0tPlxuICA8ZGl2IGNsYXNzPVwiZnItY29uc2VudC1iYW5uZXJfX2NvbnRlbnRcIj5cbiAgICBAaWYgKHdlbGNvbWUpIHtcbiAgICAgIDxwIGNsYXNzPVwiZnItdGV4dC0tc21cIiBbaW5uZXJIdG1sXT1cIndlbGNvbWVcIj48L3A+XG4gICAgfSBAZWxzZSB7XG4gICAgICA8cCBjbGFzcz1cImZyLXRleHQtLXNtXCI+XG4gICAgICAgIHt7ICdjb25zZW50LndlbGNvbWVbMF0nIHwgZHNmckkxOG4gfX1cbiAgICAgICAgPGRzZnItbGlua1xuICAgICAgICAgIFtjdXN0b21DbGFzc109XCInZWR1LWxpbmsnXCJcbiAgICAgICAgICBbbGlua109XCJyZ3BkTGlua1wiXG4gICAgICAgICAgW2xpbmtUYXJnZXRdPVwicmdwZExpbmtUYXJnZXRcIlxuICAgICAgICAgIFtyb3V0ZV09XCJyZ3BkUm91dGUgPz8gJydcIlxuICAgICAgICAgIFtyb3V0ZVBhdGhdPVwicmdwZFJvdXRlckxpbmsgPz8gJydcIlxuICAgICAgICAgIFtyb3V0ZXJMaW5rQWN0aXZlXT1cInJncGRSb3V0ZXJMaW5rQWN0aXZlID8/ICcnXCJcbiAgICAgICAgICBbcm91dGVyTGlua0V4dHJhc109XCJyZ3BkUm91dGVyTGlua0V4dHJhc1wiXG4gICAgICAgICAgW3Rvb2x0aXBNZXNzYWdlXT1cIidjb25zZW50LndlbGNvbWVbMV0nIHwgZHNmckkxOG5cIlxuICAgICAgICAgIChsaW5rU2VsZWN0KT1cIm9uUmdwZFNlbGVjdCgpXCJcbiAgICAgICAgICA+e3sgJ2NvbnNlbnQud2VsY29tZVsxXScgfCBkc2ZySTE4biB9fTwvZHNmci1saW5rXG4gICAgICAgID57eyAnY29uc2VudC53ZWxjb21lWzJdJyB8IGRzZnJJMThuIH19XG4gICAgICA8L3A+XG4gICAgfVxuICA8L2Rpdj5cbiAgPHVsXG4gICAgY2xhc3M9XCJmci1jb25zZW50LWJhbm5lcl9fYnV0dG9ucyBmci1idG5zLWdyb3VwIGZyLWJ0bnMtZ3JvdXAtLXJpZ2h0IGZyLWJ0bnMtZ3JvdXAtLWlubGluZS1yZXZlcnNlIGZyLWJ0bnMtZ3JvdXAtLWlubGluZS1zbVwiPlxuICAgIDxsaT5cbiAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIChjbGljayk9XCJvbkFjY2VwdEFsbCgpXCIgY2xhc3M9XCJmci1idG5cIiB0aXRsZT1cInt7ICdjb25zZW50LmFsbG93QWxsQ29va2llcycgfCBkc2ZySTE4biB9fVwiPlxuICAgICAgICB7eyAnY29uc2VudC5hY2NlcHRBbGwnIHwgZHNmckkxOG4gfX1cbiAgICAgIDwvYnV0dG9uPlxuICAgIDwvbGk+XG4gICAgPGxpPlxuICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgKGNsaWNrKT1cIm9uUmVmdXNlQWxsKClcIiBjbGFzcz1cImZyLWJ0blwiIHRpdGxlPVwie3sgJ2NvbnNlbnQucmVmdXNlQWxsQ29va2llcycgfCBkc2ZySTE4biB9fVwiPlxuICAgICAgICB7eyAnY29uc2VudC5yZWZ1c2VBbGwnIHwgZHNmckkxOG4gfX1cbiAgICAgIDwvYnV0dG9uPlxuICAgIDwvbGk+XG4gICAgPGxpPlxuICAgICAgPGJ1dHRvblxuICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgY2xhc3M9XCJmci1idG4gZnItYnRuLS1zZWNvbmRhcnlcIlxuICAgICAgICAoY2xpY2spPVwib25DdXN0b21pemVTZWxlY3QoKVwiXG4gICAgICAgIGRhdGEtZnItb3BlbmVkPVwiZmFsc2VcIlxuICAgICAgICBbYXR0ci5hcmlhLWNvbnRyb2xzXT1cIm1vZGFsSWRcIlxuICAgICAgICB0aXRsZT1cInt7ICdjb25zZW50LmN1c3RvbWl6ZUNvb2tpZXMnIHwgZHNmckkxOG4gfX1cIj5cbiAgICAgICAge3sgJ2NvbnNlbnQuY3VzdG9taXplJyB8IGRzZnJJMThuIH19XG4gICAgICA8L2J1dHRvbj5cbiAgICA8L2xpPlxuICA8L3VsPlxuPC9kaXY+XG5cbjxlZHUtY29uc2VudC1tYW5hZ2VyXG4gIFtyZ3BkTmF2aWdhdGlvbl09XCJ7XG4gICAgbGluazogcmdwZExpbmssXG4gICAgbGlua1RhcmdldDogcmdwZExpbmtUYXJnZXQsXG4gICAgcm91dGU6IHJncGRSb3V0ZSxcbiAgICByb3V0ZXJMaW5rOiByZ3BkUm91dGVyTGluayxcbiAgICByb3V0ZXJMaW5rQWN0aXZlOiByZ3BkUm91dGVyTGlua0FjdGl2ZSxcbiAgICByb3V0ZXJMaW5rRXh0cmFzOiByZ3BkUm91dGVyTGlua0V4dHJhc1xuICB9XCJcbiAgW2ZpbmFsaXRpZXNdPVwiZmluYWxpdGllc1wiXG4gIChmaW5hbGl0eUNoYW5nZSk9XCJvbkZpbmFsaXR5Q2hhbmdlKCRldmVudClcIlxuICBbbW9kYWxJZF09XCJtb2RhbElkXCJcbiAgKGNvbmZpcm1TZWxlY3QpPVwib25Db25maXJtQ3VzdG9taXplKGZpbmFsaXRpZXMpXCJcbiAgKHJncGRSb3V0ZVNlbGVjdCk9XCJvblJncGRTZWxlY3QoKVwiPjwvZWR1LWNvbnNlbnQtbWFuYWdlcj5cbiJdfQ==