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).

131 lines 22.6 kB
import { Component, EventEmitter, Input, Output, ViewEncapsulation } from '@angular/core'; import { CONSENT_MODAL_ID } from './consent-manager/consent-manager.component'; import * as i0 from "@angular/core"; import * as i1 from "../../shared"; import * as i2 from "@angular/common"; import * as i3 from "./consent-manager/consent-manager.component"; import * as i4 from "../link/link.component"; export class DsfrConsentBannerComponent { /** @internal */ constructor(i18n) { this.i18n = i18n; /** * 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(); /** @since 1.7 Signale quand la route rgdp est sélectionnée. */ this.rgpdRouteSelect = new EventEmitter(); /** @internal */ 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); } /** @since 1.7 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'. */ /** @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: "16.2.12", ngImport: i0, type: DsfrConsentBannerComponent, deps: [{ token: i1.I18nService }], target: i0.ɵɵFactoryTarget.Component }); } static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: DsfrConsentBannerComponent, selector: "dsfr-consent-banner", inputs: { rgpdLink: "rgpdLink", rgpdLinkTarget: "rgpdLinkTarget", rgpdRoute: "rgpdRoute", rgpdRouterLink: "rgpdRouterLink", rgpdRouterLinkActive: "rgpdRouterLinkActive", rgpdRouterLinkExtras: "rgpdRouterLinkExtras", heading: "heading", finalities: "finalities", welcome: "welcome", 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 <h2 class=\"fr-h6\" *ngIf=\"title\">{{ title }}</h2>\n <!-- BUG: Classe 'fr-consent-banner__content' inconnue en DSFR 1.9.3 -->\n <div class=\"fr-consent-banner__content\">\n <p *ngIf=\"welcome\" class=\"fr-text--sm\" [innerHtml]=\"welcome\"></p>\n <p *ngIf=\"!welcome\" class=\"fr-text--sm\">\n {{ i18n.t('consent.welcome[0]') }}\n <dsfr-link\n [link]=\"rgpdLink\"\n [linkTarget]=\"rgpdLinkTarget\"\n [route]=\"rgpdRoute ?? ''\"\n [routePath]=\"rgpdRouterLink ?? ''\"\n [routerLinkActive]=\"rgpdRouterLinkActive ?? ''\"\n [routerLinkExtras]=\"rgpdRouterLinkExtras\"\n [label]=\"i18n.t('consent.welcome[1]')\"\n (linkSelect)=\"onRgpdSelect()\"></dsfr-link\n >{{ i18n.t('consent.welcome[2]') }}\n </p>\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=\"{{ i18n.t('consent.allowAllCookies') }}\">\n {{ i18n.t('consent.acceptAll') }}\n </button>\n </li>\n <li>\n <button type=\"button\" (click)=\"onRefuseAll()\" class=\"fr-btn\" title=\"{{ i18n.t('consent.refuseAllCookies') }}\">\n {{ i18n.t('consent.refuseAll') }}\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=\"{{ i18n.t('consent.customizeCookies') }}\">\n {{ i18n.t('consent.customize') }}\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 (confirmSelect)=\"onConfirmCustomize(finalities)\"\n (rgpdRouteSelect)=\"onRgpdSelect()\"></edu-consent-manager>\n", dependencies: [{ kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i3.ConsentManagerComponent, selector: "edu-consent-manager", inputs: ["rgpdNavigation", "finalities"], outputs: ["confirmSelect", "finalityChange", "rgpdRouteSelect"] }, { kind: "component", type: i4.DsfrLinkComponent, selector: "dsfr-link", inputs: ["ariaCurrent", "ariaLabel", "ariaControls", "customClass", "disabled", "icon", "iconPosition", "linkId", "label", "link", "linkTarget", "route", "routePath", "routerLinkActive", "routerLinkActiveOptions", "routerLinkExtras", "size", "tooltipMessage", "mode", "targetLink", "routerLink"], outputs: ["linkSelect"] }], encapsulation: i0.ViewEncapsulation.None }); } } i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: DsfrConsentBannerComponent, decorators: [{ type: Component, args: [{ selector: 'dsfr-consent-banner', encapsulation: ViewEncapsulation.None, template: "<div class=\"fr-consent-banner\">\n <h2 class=\"fr-h6\" *ngIf=\"title\">{{ title }}</h2>\n <!-- BUG: Classe 'fr-consent-banner__content' inconnue en DSFR 1.9.3 -->\n <div class=\"fr-consent-banner__content\">\n <p *ngIf=\"welcome\" class=\"fr-text--sm\" [innerHtml]=\"welcome\"></p>\n <p *ngIf=\"!welcome\" class=\"fr-text--sm\">\n {{ i18n.t('consent.welcome[0]') }}\n <dsfr-link\n [link]=\"rgpdLink\"\n [linkTarget]=\"rgpdLinkTarget\"\n [route]=\"rgpdRoute ?? ''\"\n [routePath]=\"rgpdRouterLink ?? ''\"\n [routerLinkActive]=\"rgpdRouterLinkActive ?? ''\"\n [routerLinkExtras]=\"rgpdRouterLinkExtras\"\n [label]=\"i18n.t('consent.welcome[1]')\"\n (linkSelect)=\"onRgpdSelect()\"></dsfr-link\n >{{ i18n.t('consent.welcome[2]') }}\n </p>\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=\"{{ i18n.t('consent.allowAllCookies') }}\">\n {{ i18n.t('consent.acceptAll') }}\n </button>\n </li>\n <li>\n <button type=\"button\" (click)=\"onRefuseAll()\" class=\"fr-btn\" title=\"{{ i18n.t('consent.refuseAllCookies') }}\">\n {{ i18n.t('consent.refuseAll') }}\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=\"{{ i18n.t('consent.customizeCookies') }}\">\n {{ i18n.t('consent.customize') }}\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 (confirmSelect)=\"onConfirmCustomize(finalities)\"\n (rgpdRouteSelect)=\"onRgpdSelect()\"></edu-consent-manager>\n" }] }], ctorParameters: function () { return [{ type: i1.I18nService }]; }, 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 }], rgpdUrl: [{ type: Input }], title: [{ type: Input }] } }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uc2VudC1iYW5uZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LWRzZnItY29tcG9uZW50cy9zcmMvbGliL2NvbXBvbmVudHMvY29uc2VudC1iYW5uZXIvY29uc2VudC1iYW5uZXIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LWRzZnItY29tcG9uZW50cy9zcmMvbGliL2NvbXBvbmVudHMvY29uc2VudC1iYW5uZXIvY29uc2VudC1iYW5uZXIuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUkxRixPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSw2Q0FBNkMsQ0FBQzs7Ozs7O0FBTy9FLE1BQU0sT0FBTywwQkFBMEI7SUFxRHJDLGdCQUFnQjtJQUNoQixZQUFtQixJQUFpQjtRQUFqQixTQUFJLEdBQUosSUFBSSxDQUFhO1FBckRwQzs7O1dBR0c7UUFDTSxhQUFRLEdBQUcsb0VBQW9FLENBQUM7UUF5QnpGLG9DQUFvQztRQUMxQixvQkFBZSxHQUFHLElBQUksWUFBWSxFQUFRLENBQUM7UUFFckQsb0NBQW9DO1FBQzFCLG9CQUFlLEdBQUcsSUFBSSxZQUFZLEVBQVEsQ0FBQztRQUVyRCxxQ0FBcUM7UUFDM0Isb0JBQWUsR0FBRyxJQUFJLFlBQVksRUFBUSxDQUFDO1FBRXJELHdDQUF3QztRQUM5QiwyQkFBc0IsR0FBRyxJQUFJLFlBQVksRUFBa0IsQ0FBQztRQUV0RSx5REFBeUQ7UUFDL0MsbUJBQWMsR0FBRyxJQUFJLFlBQVksRUFBZ0IsQ0FBQztRQUU1RCwrREFBK0Q7UUFDckQsb0JBQWUsR0FBRyxJQUFJLFlBQVksRUFBVSxDQUFDO1FBS3ZELGdCQUFnQixDQUFDLFlBQU8sR0FBRyxnQkFBZ0IsQ0FBQztJQUdMLENBQUM7SUFFeEMsK0RBQStEO0lBQy9ELElBQUksT0FBTztRQUNULE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQztJQUN2QixDQUFDO0lBRUQsOERBQThEO0lBQzlELElBQUksS0FBSztRQUNQLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQztJQUN0QixDQUFDO0lBRUQsK0RBQStEO0lBQy9ELElBQWEsT0FBTyxDQUFDLEtBQWE7UUFDaEMsSUFBSSxDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUM7SUFDeEIsQ0FBQztJQUVELDhEQUE4RDtJQUM5RCxJQUFhLEtBQUssQ0FBQyxLQUFhO1FBQzlCLElBQUksQ0FBQyxPQUFPLEdBQUcsS0FBSyxDQUFDO0lBQ3ZCLENBQUM7SUFFRDs7O09BR0c7SUFDSCxXQUFXO1FBQ1QsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUM5QixDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsV0FBVztRQUNULElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDOUIsQ0FBQztJQUVEOzs7T0FHRztJQUNILGdCQUFnQixDQUFDLFFBQXNCO1FBQ3JDLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQ3JDLENBQUM7SUFFRDs7O09BR0c7SUFDSCxpQkFBaUI7UUFDZixJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksRUFBRSxDQUFDO0lBQzlCLENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsa0JBQWtCLENBQUMsVUFBMEI7UUFDM0MsSUFBSSxDQUFDLHNCQUFzQixDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUMvQyxDQUFDO0lBRUQsNEhBQTRIO0lBQzVILGdCQUFnQjtJQUNoQixZQUFZO1FBQ1YsdURBQXVEO1FBQ3ZELElBQUksSUFBSSxDQUFDLFNBQVM7WUFBRSxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDaEUsQ0FBQzsrR0ExSFUsMEJBQTBCO21HQUExQiwwQkFBMEIsNG1CQ1h2QyxxcEVBMERBOzs0RkQvQ2EsMEJBQTBCO2tCQUx0QyxTQUFTOytCQUNFLHFCQUFxQixpQkFFaEIsaUJBQWlCLENBQUMsSUFBSTtrR0FPNUIsUUFBUTtzQkFBaEIsS0FBSztnQkFHRyxjQUFjO3NCQUF0QixLQUFLO2dCQUdHLFNBQVM7c0JBQWpCLEtBQUs7Z0JBR0csY0FBYztzQkFBdEIsS0FBSztnQkFHRyxvQkFBb0I7c0JBQTVCLEtBQUs7Z0JBR0csb0JBQW9CO3NCQUE1QixLQUFLO2dCQUdHLE9BQU87c0JBQWYsS0FBSztnQkFLRyxVQUFVO3NCQUFsQixLQUFLO2dCQUdJLGVBQWU7c0JBQXhCLE1BQU07Z0JBR0csZUFBZTtzQkFBeEIsTUFBTTtnQkFHRyxlQUFlO3NCQUF4QixNQUFNO2dCQUdHLHNCQUFzQjtzQkFBL0IsTUFBTTtnQkFHRyxjQUFjO3NCQUF2QixNQUFNO2dCQUdHLGVBQWU7c0JBQXhCLE1BQU07Z0JBR0UsT0FBTztzQkFBZixLQUFLO2dCQWtCTyxPQUFPO3NCQUFuQixLQUFLO2dCQUtPLEtBQUs7c0JBQWpCLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE91dHB1dCwgVmlld0VuY2Fwc3VsYXRpb24gfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE5hdmlnYXRpb25FeHRyYXMgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHsgRHNmckxpbmtUYXJnZXQsIEkxOG5TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2hhcmVkJztcbmltcG9ydCB7IERzZnJGaW5hbGl0eSB9IGZyb20gJy4vY29uc2VudC1iYW5uZXIubW9kZWwnO1xuaW1wb3J0IHsgQ09OU0VOVF9NT0RBTF9JRCB9IGZyb20gJy4vY29uc2VudC1tYW5hZ2VyL2NvbnNlbnQtbWFuYWdlci5jb21wb25lbnQnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdkc2ZyLWNvbnNlbnQtYmFubmVyJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2NvbnNlbnQtYmFubmVyLmNvbXBvbmVudC5odG1sJyxcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcbn0pXG5leHBvcnQgY2xhc3MgRHNmckNvbnNlbnRCYW5uZXJDb21wb25lbnQge1xuICAvKipcbiAgICogVVJMIGRlIHByw6lzZW50YXRpb24gZGVzIGRvbm7DqWVzIHBlcnNvbm5lbGxlcy4gVXRpbGlzw6kgc2kgd2VsY29tZSBuJ2VzdCBwYXMgcmVuc2VpZ27DqVxuICAgKiBSR1BEIDogUsOoZ2xlbWVudCBHw6luw6lyYWwgc3VyIGxhIFByb3RlY3Rpb24gZGVzIERvbm7DqWVzXG4gICAqL1xuICBASW5wdXQoKSByZ3BkTGluayA9ICdodHRwczovL3d3dy50cmFuc2Zvcm1hdGlvbi5nb3V2LmZyL2Rvbm5lZXMtcGVyc29ubmVsbGVzLWV0LWNvb2tpZXMnO1xuXG4gIC8qKiBAc2luY2UgMS43IFRhcmdldCBkdSBsaWVuLiBUYXJnZXQgcGFyIGTDqWZhdXQgZGUgbCdhcHBsaWNhdGlvbiBzaSBsYSBwcm9wcmnDqXTDqSBlc3Qgbm9uIHJlbnNlaWduw6llLiAqL1xuICBASW5wdXQoKSByZ3BkTGlua1RhcmdldD86IERzZnJMaW5rVGFyZ2V0IHwgdW5kZWZpbmVkO1xuXG4gIC8qKiBAc2luY2UgMS43IFBhdGggaW50ZXJuZS4gRXhjbHVzaWYgYXZlYyBsaW5rIGV0IHJvdXRlckxpbmsgKi9cbiAgQElucHV0KCkgcmdwZFJvdXRlPzogc3RyaW5nO1xuXG4gIC8qKiBAc2luY2UgMS43IFBhdGggYW5ndWxhciBnw6lyw6kgZW4gdGFudCBxdWUgZGlyZWN0aXZlIHJvdXRlckxpbmsuIEV4Y2x1c2lmIGF2ZWMgbGluayBldCByb3V0ZS4gKi9cbiAgQElucHV0KCkgcmdwZFJvdXRlckxpbms/OiBzdHJpbmcgfCBzdHJpbmdbXTtcblxuICAvKiogQHNpbmNlIDEuNyBSb3V0ZXJMaW5rIDogY2xhc3NlIHV0aWxpc8OpZSBwb3VyIGxhIGRpcmVjdGl2ZSByb3V0ZXJMaW5rIGFjdGl2ZS4gKi9cbiAgQElucHV0KCkgcmdwZFJvdXRlckxpbmtBY3RpdmU/OiBzdHJpbmcgfCBzdHJpbmdbXTtcblxuICAvKiogQHNpbmNlIDEuNyBSb3V0ZXJMaW5rIDogdmFsZXVycyBhZGRpdGlvbm5lbGxlcyBkZSBuYXZpZ2F0aW9uIHBvdXIgbGUgcm91dGVyTGluayAocXVlcnlQYXJhbXMsIHN0YXRlIGV0Yy4pICovXG4gIEBJbnB1dCgpIHJncGRSb3V0ZXJMaW5rRXh0cmFzPzogTmF2aWdhdGlvbkV4dHJhcztcblxuICAvKiogVGl0cmUgZGUgbGEgYmFubmnDqHJlICovXG4gIEBJbnB1dCgpIGhlYWRpbmc6IHN0cmluZztcblxuICAvKipcbiAgICogTW9kw6hsZSBkZSBwcsOpc2VudGF0aW9uIGRlcyBmaW5hbGl0w6lzLlxuICAgKi9cbiAgQElucHV0KCkgZmluYWxpdGllczogRHNmckZpbmFsaXR5W107XG5cbiAgLyoqIFPDqWxlY3Rpb24gYm91dG9uIFRvdXQgYWNjZXB0ZXIqL1xuICBAT3V0cHV0KCkgYWNjZXB0QWxsU2VsZWN0ID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuXG4gIC8qKiBTw6lsZWN0aW9uIGJvdXRvbiBUb3V0IHJlZnVzZXIgKi9cbiAgQE91dHB1dCgpIHJlZnVzZUFsbFNlbGVjdCA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcblxuICAvKiogU8OpbGVjdGlvbiBib3V0b24gUGVyc29ubmFsaXNlciAqL1xuICBAT3V0cHV0KCkgY3VzdG9taXplU2VsZWN0ID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuXG4gIC8qKiBWYWxpZGF0aW9uIGRlIGxhIHBlcnNvbm5hbGlzYXRpb24gKi9cbiAgQE91dHB1dCgpIGNvbmZpcm1DdXN0b21pemVTZWxlY3QgPSBuZXcgRXZlbnRFbWl0dGVyPERzZnJGaW5hbGl0eVtdPigpO1xuXG4gIC8qKiBTw6lsZWN0aW9uIGRlIEFjY2VwdGVyIG91IFJlZnVzZXIgcG91ciB1bmUgZmluYWxpdMOpICovXG4gIEBPdXRwdXQoKSBmaW5hbGl0eUNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8RHNmckZpbmFsaXR5PigpO1xuXG4gIC8qKiBAc2luY2UgMS43IFNpZ25hbGUgcXVhbmQgbGEgcm91dGUgcmdkcCBlc3Qgc8OpbGVjdGlvbm7DqWUuICovXG4gIEBPdXRwdXQoKSByZ3BkUm91dGVTZWxlY3QgPSBuZXcgRXZlbnRFbWl0dGVyPHN0cmluZz4oKTtcblxuICAvKiogRGVzY3JpcHRpb24gZGUgYmllbnZlbnVlLiBVdGlsaXNhdGlvbiBkdSB0ZXh0ZSBwYXIgZMOpZmF1dCBzaSBub24gcmVuc2VpZ27DqSAqL1xuICBASW5wdXQoKSB3ZWxjb21lOiBzdHJpbmc7XG5cbiAgLyoqIEBpbnRlcm5hbCAqLyBtb2RhbElkID0gQ09OU0VOVF9NT0RBTF9JRDtcblxuICAvKiogQGludGVybmFsICovXG4gIGNvbnN0cnVjdG9yKHB1YmxpYyBpMThuOiBJMThuU2VydmljZSkge31cblxuICAvKiogQGRlcHJlY2F0ZWQgKEBzaW5jZSAxLjcpIHV0aWxpc2VyIGByZ2RwTGlua2Agw6AgbGEgcGxhY2UuICovXG4gIGdldCByZ3BkVXJsKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMucmdwZExpbms7XG4gIH1cblxuICAvKiogQGRlcHJlY2F0ZWQgKEBzaW5jZSAxLjcpIHV0aWxpc2VyICdoZWFkaW5nJyDDoCBsYSBwbGFjZS4gKi9cbiAgZ2V0IHRpdGxlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuaGVhZGluZztcbiAgfVxuXG4gIC8qKiBAZGVwcmVjYXRlZCAoQHNpbmNlIDEuNykgdXRpbGlzZXIgYHJnZHBMaW5rYCDDoCBsYSBwbGFjZS4gKi9cbiAgQElucHV0KCkgc2V0IHJncGRVcmwodmFsdWU6IHN0cmluZykge1xuICAgIHRoaXMucmdwZExpbmsgPSB2YWx1ZTtcbiAgfVxuXG4gIC8qKiBAZGVwcmVjYXRlZCAoQHNpbmNlIDEuNykgdXRpbGlzZXIgYGhlYWRpbmdgIMOgIGxhIHBsYWNlLiAqL1xuICBASW5wdXQoKSBzZXQgdGl0bGUodmFsdWU6IHN0cmluZykge1xuICAgIHRoaXMuaGVhZGluZyA9IHZhbHVlO1xuICB9XG5cbiAgLyoqXG4gICAqIEFjY2VwdGVyIHRvdXRcbiAgICogQGludGVybmFsXG4gICAqL1xuICBvbkFjY2VwdEFsbCgpOiB2b2lkIHtcbiAgICB0aGlzLmFjY2VwdEFsbFNlbGVjdC5lbWl0KCk7XG4gIH1cblxuICAvKipcbiAgICogUmVmdXNlciB0b3V0XG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgb25SZWZ1c2VBbGwoKTogdm9pZCB7XG4gICAgdGhpcy5yZWZ1c2VBbGxTZWxlY3QuZW1pdCgpO1xuICB9XG5cbiAgLyoqXG4gICAqIENoYW5nZW1lbnQgZGUgc8OpbGVjdGlvbiBhY2NlcHQvcmVmdXNlIGQndW5lIGZpbmFsaXTDqSBvdSBzb3VzLWZpbmFsaXTDqS5cbiAgICogQGludGVybmFsXG4gICAqL1xuICBvbkZpbmFsaXR5Q2hhbmdlKGZpbmFsaXR5OiBEc2ZyRmluYWxpdHkpOiB2b2lkIHtcbiAgICB0aGlzLmZpbmFsaXR5Q2hhbmdlLmVtaXQoZmluYWxpdHkpO1xuICB9XG5cbiAgLyoqXG4gICAqIE91dmVydHVyZSBkdSBwYW5uZWF1IGRlIHBlcnNvbm5hbGlzYXRpb24gZGVzIGZpbmFsaXTDqXMuXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgb25DdXN0b21pemVTZWxlY3QoKTogdm9pZCB7XG4gICAgdGhpcy5jdXN0b21pemVTZWxlY3QuZW1pdCgpO1xuICB9XG5cbiAgLyoqXG4gICAqIENvbmZpcm1hdGlvbiBkZSBsYSBwZXJzb25uYWxpc2F0aW9uIGRlcyBmaW5hbGl0w6lzLlxuICAgKiBAcGFyYW0gZmluYWxpdGllcyBsaXN0ZSBkZXMgZmluYWxpdMOpc1xuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIG9uQ29uZmlybUN1c3RvbWl6ZShmaW5hbGl0aWVzOiBEc2ZyRmluYWxpdHlbXSk6IHZvaWQge1xuICAgIHRoaXMuY29uZmlybUN1c3RvbWl6ZVNlbGVjdC5lbWl0KGZpbmFsaXRpZXMpO1xuICB9XG5cbiAgLyoqIEBzaW5jZSAxLjcgRW1ldCB1biDDqXbDqW5lbWVudCBsb3JzIGRlIGxhIHPDqWxlY3Rpb24gZHUgbGllbiBSR1BEIHNpIGwnYWNjw6hzIGF1eCBSR1BEIGVzdCBmYWl0IHZpYSBsYSBwcm9wcmnDqXTDqSAncm91dGUnLiAqL1xuICAvKiogQGludGVybmFsICovXG4gIG9uUmdwZFNlbGVjdCgpOiB2b2lkIHtcbiAgICAvLyBSZWxhaXMuIFNpZ25hbGUgcXVhbmQgbGEgcm91dGUgcmdkcCBlc3Qgc8OpbGVjdGlvbm7DqWVcbiAgICBpZiAodGhpcy5yZ3BkUm91dGUpIHRoaXMucmdwZFJvdXRlU2VsZWN0LmVtaXQodGhpcy5yZ3BkUm91dGUpO1xuICB9XG59XG4iLCI8ZGl2IGNsYXNzPVwiZnItY29uc2VudC1iYW5uZXJcIj5cbiAgPGgyIGNsYXNzPVwiZnItaDZcIiAqbmdJZj1cInRpdGxlXCI+e3sgdGl0bGUgfX08L2gyPlxuICA8IS0tIEJVRzogQ2xhc3NlICdmci1jb25zZW50LWJhbm5lcl9fY29udGVudCcgaW5jb25udWUgZW4gRFNGUiAxLjkuMyAtLT5cbiAgPGRpdiBjbGFzcz1cImZyLWNvbnNlbnQtYmFubmVyX19jb250ZW50XCI+XG4gICAgPHAgKm5nSWY9XCJ3ZWxjb21lXCIgY2xhc3M9XCJmci10ZXh0LS1zbVwiIFtpbm5lckh0bWxdPVwid2VsY29tZVwiPjwvcD5cbiAgICA8cCAqbmdJZj1cIiF3ZWxjb21lXCIgY2xhc3M9XCJmci10ZXh0LS1zbVwiPlxuICAgICAge3sgaTE4bi50KCdjb25zZW50LndlbGNvbWVbMF0nKSB9fVxuICAgICAgPGRzZnItbGlua1xuICAgICAgICBbbGlua109XCJyZ3BkTGlua1wiXG4gICAgICAgIFtsaW5rVGFyZ2V0XT1cInJncGRMaW5rVGFyZ2V0XCJcbiAgICAgICAgW3JvdXRlXT1cInJncGRSb3V0ZSA/PyAnJ1wiXG4gICAgICAgIFtyb3V0ZVBhdGhdPVwicmdwZFJvdXRlckxpbmsgPz8gJydcIlxuICAgICAgICBbcm91dGVyTGlua0FjdGl2ZV09XCJyZ3BkUm91dGVyTGlua0FjdGl2ZSA/PyAnJ1wiXG4gICAgICAgIFtyb3V0ZXJMaW5rRXh0cmFzXT1cInJncGRSb3V0ZXJMaW5rRXh0cmFzXCJcbiAgICAgICAgW2xhYmVsXT1cImkxOG4udCgnY29uc2VudC53ZWxjb21lWzFdJylcIlxuICAgICAgICAobGlua1NlbGVjdCk9XCJvblJncGRTZWxlY3QoKVwiPjwvZHNmci1saW5rXG4gICAgICA+e3sgaTE4bi50KCdjb25zZW50LndlbGNvbWVbMl0nKSB9fVxuICAgIDwvcD5cbiAgPC9kaXY+XG4gIDx1bFxuICAgIGNsYXNzPVwiZnItY29uc2VudC1iYW5uZXJfX2J1dHRvbnMgZnItYnRucy1ncm91cCBmci1idG5zLWdyb3VwLS1yaWdodCBmci1idG5zLWdyb3VwLS1pbmxpbmUtcmV2ZXJzZSBmci1idG5zLWdyb3VwLS1pbmxpbmUtc21cIj5cbiAgICA8bGk+XG4gICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiAoY2xpY2spPVwib25BY2NlcHRBbGwoKVwiIGNsYXNzPVwiZnItYnRuXCIgdGl0bGU9XCJ7eyBpMThuLnQoJ2NvbnNlbnQuYWxsb3dBbGxDb29raWVzJykgfX1cIj5cbiAgICAgICAge3sgaTE4bi50KCdjb25zZW50LmFjY2VwdEFsbCcpIH19XG4gICAgICA8L2J1dHRvbj5cbiAgICA8L2xpPlxuICAgIDxsaT5cbiAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIChjbGljayk9XCJvblJlZnVzZUFsbCgpXCIgY2xhc3M9XCJmci1idG5cIiB0aXRsZT1cInt7IGkxOG4udCgnY29uc2VudC5yZWZ1c2VBbGxDb29raWVzJykgfX1cIj5cbiAgICAgICAge3sgaTE4bi50KCdjb25zZW50LnJlZnVzZUFsbCcpIH19XG4gICAgICA8L2J1dHRvbj5cbiAgICA8L2xpPlxuICAgIDxsaT5cbiAgICAgIDxidXR0b25cbiAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgIGNsYXNzPVwiZnItYnRuIGZyLWJ0bi0tc2Vjb25kYXJ5XCJcbiAgICAgICAgKGNsaWNrKT1cIm9uQ3VzdG9taXplU2VsZWN0KClcIlxuICAgICAgICBkYXRhLWZyLW9wZW5lZD1cImZhbHNlXCJcbiAgICAgICAgW2F0dHIuYXJpYS1jb250cm9sc109XCJtb2RhbElkXCJcbiAgICAgICAgdGl0bGU9XCJ7eyBpMThuLnQoJ2NvbnNlbnQuY3VzdG9taXplQ29va2llcycpIH19XCI+XG4gICAgICAgIHt7IGkxOG4udCgnY29uc2VudC5jdXN0b21pemUnKSB9fVxuICAgICAgPC9idXR0b24+XG4gICAgPC9saT5cbiAgPC91bD5cbjwvZGl2PlxuXG48ZWR1LWNvbnNlbnQtbWFuYWdlclxuICBbcmdwZE5hdmlnYXRpb25dPVwie1xuICAgIGxpbms6IHJncGRMaW5rLFxuICAgIGxpbmtUYXJnZXQ6IHJncGRMaW5rVGFyZ2V0LFxuICAgIHJvdXRlOiByZ3BkUm91dGUsXG4gICAgcm91dGVyTGluazogcmdwZFJvdXRlckxpbmssXG4gICAgcm91dGVyTGlua0FjdGl2ZTogcmdwZFJvdXRlckxpbmtBY3RpdmUsXG4gICAgcm91dGVyTGlua0V4dHJhczogcmdwZFJvdXRlckxpbmtFeHRyYXNcbiAgfVwiXG4gIFtmaW5hbGl0aWVzXT1cImZpbmFsaXRpZXNcIlxuICAoZmluYWxpdHlDaGFuZ2UpPVwib25GaW5hbGl0eUNoYW5nZSgkZXZlbnQpXCJcbiAgKGNvbmZpcm1TZWxlY3QpPVwib25Db25maXJtQ3VzdG9taXplKGZpbmFsaXRpZXMpXCJcbiAgKHJncGRSb3V0ZVNlbGVjdCk9XCJvblJncGRTZWxlY3QoKVwiPjwvZWR1LWNvbnNlbnQtbWFuYWdlcj5cbiJdfQ==