@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).
115 lines • 28.6 kB
JavaScript
import { Component, EventEmitter, Inject, Input, Output, ViewEncapsulation } from '@angular/core';
import { DSFR_CONFIG_TOKEN } from '../../shared/config/config-token';
import * as i0 from "@angular/core";
import * as i1 from "../../shared";
import * as i2 from "@angular/common";
import * as i3 from "../../components/button/button.component";
import * as i4 from "../../components/buttons-group/buttons-group.component";
export class DsfrResponseComponent {
/** @internal */
constructor(config, i18n) {
this.config = config;
this.i18n = i18n;
/**
* Titre de la page (par défaut : 'Erreur inattendue').
*/
this.heading = this.i18n.t('pageResponse.heading');
/**
* Type d'erreur (404, 500,...).
*/
this.error = 500;
/**
* Description de la page (par défaut: 'Essayez de rafraichir la page ou bien ressayez plus tard.').
*/
this.description = this.i18n.t('pageResponse.description');
/**
* Détail de la page (par défaut : 'Désolé, le service rencontre un problème, nous travaillons pour le résoudre le plus rapidement possible.').
*/
this.detail = this.i18n.t('pageResponse.detail');
/**
* Conditionne l'affichage du bouton contactez-nous.
*/
this.showContact = true;
/**
* Conditionne l'affichage du bouton page d'accueil'.
*/
this.showBackToHome = false;
/**
* Indique que le bouton contact est cliqué.
*/
this.contactSelect = new EventEmitter();
/**
* Indique que le bouton page d'accueil est cliqué.
*/
this.backToHomeSelect = new EventEmitter();
}
get pictoPath() {
return this.artworkDirPath;
}
/**
* Chemin des pictogrammes (du composant display) renseigné par le développeur.
*
* Note: ce chemin doit permettre de récupérer directement les fichiers SVG suivants : moon.svg, sun.svg, system.svg
*
* @deprecated Use `artworkDirPath` instead.
*/
set pictoPath(path) {
this.artworkDirPath = path;
}
ngOnInit() {
if (this.artworkDirPath === undefined) {
this.artworkDirPath = this.config.artworkDirPath;
}
}
/** @internal */
onContact() {
this.contactSelect.emit();
}
/** @internal */
onHome() {
this.backToHomeSelect.emit();
}
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: DsfrResponseComponent, deps: [{ token: DSFR_CONFIG_TOKEN }, { token: i1.I18nService }], target: i0.ɵɵFactoryTarget.Component }); }
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: DsfrResponseComponent, selector: "dsfr-response", inputs: { heading: "heading", headingLevel: "headingLevel", error: "error", description: "description", detail: "detail", showContact: "showContact", showBackToHome: "showBackToHome", artworkDirPath: "artworkDirPath", pictoPath: "pictoPath" }, outputs: { contactSelect: "contactSelect", backToHomeSelect: "backToHomeSelect" }, ngImport: i0, template: "<div class=\"fr-container\">\n <div\n class=\"fr-my-7w fr-mt-md-12w fr-mb-md-10w fr-grid-row fr-grid-row--gutters fr-grid-row--middle fr-grid-row--center\">\n <div class=\"fr-py-0 fr-col-12 fr-col-md-6\">\n <!-- Titre du contenu -->\n <ng-container>\n <ng-container *ngTemplateOutlet=\"dsfrPageResponseHeading\"></ng-container>\n </ng-container>\n <p class=\"fr-text--sm fr-mb-3w\">Erreur {{ error }}</p>\n <p class=\"fr-text--lead fr-mb-3w\">\n {{ description }}\n </p>\n <p class=\"fr-text--sm fr-mb-5w\">\n {{ detail }}\n </p>\n <dsfr-buttons-group *ngIf=\"showBackToHome || showContact\" inline=\"always\">\n <dsfr-button\n type=\"button\"\n *ngIf=\"showBackToHome\"\n label=\"Page d'accueil\"\n variant=\"primary\"\n (click)=\"onHome()\"></dsfr-button>\n <dsfr-button\n type=\"button\"\n *ngIf=\"showContact\"\n [label]=\"i18n.t('response.contactUs')\"\n variant=\"secondary\"\n (click)=\"onContact()\"></dsfr-button>\n </dsfr-buttons-group>\n </div>\n <div class=\"fr-col-12 fr-col-md-3 fr-col-offset-md-1 fr-px-6w fr-px-md-0 fr-py-0\">\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n class=\"fr-responsive-img fr-artwork\"\n aria-hidden=\"true\"\n width=\"160\"\n height=\"200\"\n viewBox=\"0 0 160 200\"\n data-fr-js-ratio=\"true\">\n <use class=\"fr-artwork-motif\" [attr.href]=\"pictoPath + '/background/ovoid.svg#artwork-motif'\"></use>\n <use class=\"fr-artwork-motif\" [attr.href]=\"pictoPath + '/background/ovoid.svg#artwork-background'\"></use>\n <g transform=\"translate(40, 60)\">\n <use\n class=\"fr-artwork-decorative\"\n [attr.href]=\"pictoPath + '/pictograms/system/technical-error.svg#artwork-decorative'\"></use>\n <use\n class=\"fr-artwork-minor\"\n [attr.href]=\"pictoPath + '/pictograms/system/technical-error.svg#artwork-minor'\"></use>\n <use\n class=\"fr-artwork-major\"\n [attr.href]=\"pictoPath + '/pictograms/system/technical-error.svg#artwork-major'\"></use>\n </g>\n </svg>\n </div>\n </div>\n</div>\n\n<ng-template #dsfrPageResponseHeading>\n <ng-container [ngSwitch]=\"headingLevel\">\n <h1 *ngSwitchDefault>{{ heading }}</h1>\n <h2 *ngSwitchCase=\"'H2'\">{{ heading }}</h2>\n <h3 *ngSwitchCase=\"'H3'\">{{ heading }}</h3>\n <h4 *ngSwitchCase=\"'H4'\">{{ heading }}</h4>\n <h5 *ngSwitchCase=\"'H5'\">{{ heading }}</h5>\n <h6 *ngSwitchCase=\"'H6'\">{{ heading }}</h6>\n </ng-container>\n</ng-template>\n", dependencies: [{ kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i2.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: i2.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "directive", type: i2.NgSwitchDefault, selector: "[ngSwitchDefault]" }, { kind: "component", type: i3.DsfrButtonComponent, selector: "dsfr-button", inputs: ["label", "type", "tooltipMessage", "variant", "size", "icon", "iconPosition", "disabled", "uppercase", "loader", "ariaLabel", "invertedOutlineContrast", "id", "ariaControls", "customClass"] }, { kind: "component", type: i4.DsfrButtonsGroupComponent, selector: "dsfr-buttons-group", inputs: ["inline", "alignment", "equisized", "size", "iconPosition"] }], encapsulation: i0.ViewEncapsulation.None }); }
}
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: DsfrResponseComponent, decorators: [{
type: Component,
args: [{ selector: 'dsfr-response', encapsulation: ViewEncapsulation.None, template: "<div class=\"fr-container\">\n <div\n class=\"fr-my-7w fr-mt-md-12w fr-mb-md-10w fr-grid-row fr-grid-row--gutters fr-grid-row--middle fr-grid-row--center\">\n <div class=\"fr-py-0 fr-col-12 fr-col-md-6\">\n <!-- Titre du contenu -->\n <ng-container>\n <ng-container *ngTemplateOutlet=\"dsfrPageResponseHeading\"></ng-container>\n </ng-container>\n <p class=\"fr-text--sm fr-mb-3w\">Erreur {{ error }}</p>\n <p class=\"fr-text--lead fr-mb-3w\">\n {{ description }}\n </p>\n <p class=\"fr-text--sm fr-mb-5w\">\n {{ detail }}\n </p>\n <dsfr-buttons-group *ngIf=\"showBackToHome || showContact\" inline=\"always\">\n <dsfr-button\n type=\"button\"\n *ngIf=\"showBackToHome\"\n label=\"Page d'accueil\"\n variant=\"primary\"\n (click)=\"onHome()\"></dsfr-button>\n <dsfr-button\n type=\"button\"\n *ngIf=\"showContact\"\n [label]=\"i18n.t('response.contactUs')\"\n variant=\"secondary\"\n (click)=\"onContact()\"></dsfr-button>\n </dsfr-buttons-group>\n </div>\n <div class=\"fr-col-12 fr-col-md-3 fr-col-offset-md-1 fr-px-6w fr-px-md-0 fr-py-0\">\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n class=\"fr-responsive-img fr-artwork\"\n aria-hidden=\"true\"\n width=\"160\"\n height=\"200\"\n viewBox=\"0 0 160 200\"\n data-fr-js-ratio=\"true\">\n <use class=\"fr-artwork-motif\" [attr.href]=\"pictoPath + '/background/ovoid.svg#artwork-motif'\"></use>\n <use class=\"fr-artwork-motif\" [attr.href]=\"pictoPath + '/background/ovoid.svg#artwork-background'\"></use>\n <g transform=\"translate(40, 60)\">\n <use\n class=\"fr-artwork-decorative\"\n [attr.href]=\"pictoPath + '/pictograms/system/technical-error.svg#artwork-decorative'\"></use>\n <use\n class=\"fr-artwork-minor\"\n [attr.href]=\"pictoPath + '/pictograms/system/technical-error.svg#artwork-minor'\"></use>\n <use\n class=\"fr-artwork-major\"\n [attr.href]=\"pictoPath + '/pictograms/system/technical-error.svg#artwork-major'\"></use>\n </g>\n </svg>\n </div>\n </div>\n</div>\n\n<ng-template #dsfrPageResponseHeading>\n <ng-container [ngSwitch]=\"headingLevel\">\n <h1 *ngSwitchDefault>{{ heading }}</h1>\n <h2 *ngSwitchCase=\"'H2'\">{{ heading }}</h2>\n <h3 *ngSwitchCase=\"'H3'\">{{ heading }}</h3>\n <h4 *ngSwitchCase=\"'H4'\">{{ heading }}</h4>\n <h5 *ngSwitchCase=\"'H5'\">{{ heading }}</h5>\n <h6 *ngSwitchCase=\"'H6'\">{{ heading }}</h6>\n </ng-container>\n</ng-template>\n" }]
}], ctorParameters: function () { return [{ type: undefined, decorators: [{
type: Inject,
args: [DSFR_CONFIG_TOKEN]
}] }, { type: i1.I18nService }]; }, propDecorators: { heading: [{
type: Input
}], headingLevel: [{
type: Input
}], error: [{
type: Input
}], description: [{
type: Input
}], detail: [{
type: Input
}], showContact: [{
type: Input
}], showBackToHome: [{
type: Input
}], artworkDirPath: [{
type: Input
}], contactSelect: [{
type: Output
}], backToHomeSelect: [{
type: Output
}], pictoPath: [{
type: Input
}] } });
/**
* @deprecated use DsfrResponseComponent instead
*/
export class DsfrPageResponseComponent extends DsfrResponseComponent {
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: DsfrPageResponseComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: DsfrPageResponseComponent, selector: "dsfr-page-response", usesInheritance: true, ngImport: i0, template: "<div class=\"fr-container\">\n <div\n class=\"fr-my-7w fr-mt-md-12w fr-mb-md-10w fr-grid-row fr-grid-row--gutters fr-grid-row--middle fr-grid-row--center\">\n <div class=\"fr-py-0 fr-col-12 fr-col-md-6\">\n <!-- Titre du contenu -->\n <ng-container>\n <ng-container *ngTemplateOutlet=\"dsfrPageResponseHeading\"></ng-container>\n </ng-container>\n <p class=\"fr-text--sm fr-mb-3w\">Erreur {{ error }}</p>\n <p class=\"fr-text--lead fr-mb-3w\">\n {{ description }}\n </p>\n <p class=\"fr-text--sm fr-mb-5w\">\n {{ detail }}\n </p>\n <dsfr-buttons-group *ngIf=\"showBackToHome || showContact\" inline=\"always\">\n <dsfr-button\n type=\"button\"\n *ngIf=\"showBackToHome\"\n label=\"Page d'accueil\"\n variant=\"primary\"\n (click)=\"onHome()\"></dsfr-button>\n <dsfr-button\n type=\"button\"\n *ngIf=\"showContact\"\n [label]=\"i18n.t('response.contactUs')\"\n variant=\"secondary\"\n (click)=\"onContact()\"></dsfr-button>\n </dsfr-buttons-group>\n </div>\n <div class=\"fr-col-12 fr-col-md-3 fr-col-offset-md-1 fr-px-6w fr-px-md-0 fr-py-0\">\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n class=\"fr-responsive-img fr-artwork\"\n aria-hidden=\"true\"\n width=\"160\"\n height=\"200\"\n viewBox=\"0 0 160 200\"\n data-fr-js-ratio=\"true\">\n <use class=\"fr-artwork-motif\" [attr.href]=\"pictoPath + '/background/ovoid.svg#artwork-motif'\"></use>\n <use class=\"fr-artwork-motif\" [attr.href]=\"pictoPath + '/background/ovoid.svg#artwork-background'\"></use>\n <g transform=\"translate(40, 60)\">\n <use\n class=\"fr-artwork-decorative\"\n [attr.href]=\"pictoPath + '/pictograms/system/technical-error.svg#artwork-decorative'\"></use>\n <use\n class=\"fr-artwork-minor\"\n [attr.href]=\"pictoPath + '/pictograms/system/technical-error.svg#artwork-minor'\"></use>\n <use\n class=\"fr-artwork-major\"\n [attr.href]=\"pictoPath + '/pictograms/system/technical-error.svg#artwork-major'\"></use>\n </g>\n </svg>\n </div>\n </div>\n</div>\n\n<ng-template #dsfrPageResponseHeading>\n <ng-container [ngSwitch]=\"headingLevel\">\n <h1 *ngSwitchDefault>{{ heading }}</h1>\n <h2 *ngSwitchCase=\"'H2'\">{{ heading }}</h2>\n <h3 *ngSwitchCase=\"'H3'\">{{ heading }}</h3>\n <h4 *ngSwitchCase=\"'H4'\">{{ heading }}</h4>\n <h5 *ngSwitchCase=\"'H5'\">{{ heading }}</h5>\n <h6 *ngSwitchCase=\"'H6'\">{{ heading }}</h6>\n </ng-container>\n</ng-template>\n", dependencies: [{ kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i2.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: i2.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "directive", type: i2.NgSwitchDefault, selector: "[ngSwitchDefault]" }, { kind: "component", type: i3.DsfrButtonComponent, selector: "dsfr-button", inputs: ["label", "type", "tooltipMessage", "variant", "size", "icon", "iconPosition", "disabled", "uppercase", "loader", "ariaLabel", "invertedOutlineContrast", "id", "ariaControls", "customClass"] }, { kind: "component", type: i4.DsfrButtonsGroupComponent, selector: "dsfr-buttons-group", inputs: ["inline", "alignment", "equisized", "size", "iconPosition"] }], encapsulation: i0.ViewEncapsulation.None }); }
}
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: DsfrPageResponseComponent, decorators: [{
type: Component,
args: [{ selector: 'dsfr-page-response', encapsulation: ViewEncapsulation.None, template: "<div class=\"fr-container\">\n <div\n class=\"fr-my-7w fr-mt-md-12w fr-mb-md-10w fr-grid-row fr-grid-row--gutters fr-grid-row--middle fr-grid-row--center\">\n <div class=\"fr-py-0 fr-col-12 fr-col-md-6\">\n <!-- Titre du contenu -->\n <ng-container>\n <ng-container *ngTemplateOutlet=\"dsfrPageResponseHeading\"></ng-container>\n </ng-container>\n <p class=\"fr-text--sm fr-mb-3w\">Erreur {{ error }}</p>\n <p class=\"fr-text--lead fr-mb-3w\">\n {{ description }}\n </p>\n <p class=\"fr-text--sm fr-mb-5w\">\n {{ detail }}\n </p>\n <dsfr-buttons-group *ngIf=\"showBackToHome || showContact\" inline=\"always\">\n <dsfr-button\n type=\"button\"\n *ngIf=\"showBackToHome\"\n label=\"Page d'accueil\"\n variant=\"primary\"\n (click)=\"onHome()\"></dsfr-button>\n <dsfr-button\n type=\"button\"\n *ngIf=\"showContact\"\n [label]=\"i18n.t('response.contactUs')\"\n variant=\"secondary\"\n (click)=\"onContact()\"></dsfr-button>\n </dsfr-buttons-group>\n </div>\n <div class=\"fr-col-12 fr-col-md-3 fr-col-offset-md-1 fr-px-6w fr-px-md-0 fr-py-0\">\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n class=\"fr-responsive-img fr-artwork\"\n aria-hidden=\"true\"\n width=\"160\"\n height=\"200\"\n viewBox=\"0 0 160 200\"\n data-fr-js-ratio=\"true\">\n <use class=\"fr-artwork-motif\" [attr.href]=\"pictoPath + '/background/ovoid.svg#artwork-motif'\"></use>\n <use class=\"fr-artwork-motif\" [attr.href]=\"pictoPath + '/background/ovoid.svg#artwork-background'\"></use>\n <g transform=\"translate(40, 60)\">\n <use\n class=\"fr-artwork-decorative\"\n [attr.href]=\"pictoPath + '/pictograms/system/technical-error.svg#artwork-decorative'\"></use>\n <use\n class=\"fr-artwork-minor\"\n [attr.href]=\"pictoPath + '/pictograms/system/technical-error.svg#artwork-minor'\"></use>\n <use\n class=\"fr-artwork-major\"\n [attr.href]=\"pictoPath + '/pictograms/system/technical-error.svg#artwork-major'\"></use>\n </g>\n </svg>\n </div>\n </div>\n</div>\n\n<ng-template #dsfrPageResponseHeading>\n <ng-container [ngSwitch]=\"headingLevel\">\n <h1 *ngSwitchDefault>{{ heading }}</h1>\n <h2 *ngSwitchCase=\"'H2'\">{{ heading }}</h2>\n <h3 *ngSwitchCase=\"'H3'\">{{ heading }}</h3>\n <h4 *ngSwitchCase=\"'H4'\">{{ heading }}</h4>\n <h5 *ngSwitchCase=\"'H5'\">{{ heading }}</h5>\n <h6 *ngSwitchCase=\"'H6'\">{{ heading }}</h6>\n </ng-container>\n</ng-template>\n" }]
}] });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVzcG9uc2UuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LWRzZnItY29tcG9uZW50cy9zcmMvbGliL3BhZ2VzL3Jlc3BvbnNlL3Jlc3BvbnNlLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1kc2ZyLWNvbXBvbmVudHMvc3JjL2xpYi9wYWdlcy9yZXNwb25zZS9yZXNwb25zZS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFVLE1BQU0sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUUxRyxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQzs7Ozs7O0FBUXJFLE1BQU0sT0FBTyxxQkFBcUI7SUFpRGhDLGdCQUFnQjtJQUNoQixZQUNxQyxNQUFrQixFQUM5QyxJQUFpQjtRQURXLFdBQU0sR0FBTixNQUFNLENBQVk7UUFDOUMsU0FBSSxHQUFKLElBQUksQ0FBYTtRQW5EMUI7O1dBRUc7UUFDTSxZQUFPLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsc0JBQXNCLENBQUMsQ0FBQztRQUt2RDs7V0FFRztRQUNNLFVBQUssR0FBRyxHQUFHLENBQUM7UUFFckI7O1dBRUc7UUFDTSxnQkFBVyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLDBCQUEwQixDQUFDLENBQUM7UUFFL0Q7O1dBRUc7UUFDTSxXQUFNLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMscUJBQXFCLENBQUMsQ0FBQztRQUVyRDs7V0FFRztRQUNNLGdCQUFXLEdBQUcsSUFBSSxDQUFDO1FBQzVCOztXQUVHO1FBQ00sbUJBQWMsR0FBRyxLQUFLLENBQUM7UUFPaEM7O1dBRUc7UUFDTyxrQkFBYSxHQUF5QixJQUFJLFlBQVksRUFBRSxDQUFDO1FBQ25FOztXQUVHO1FBQ08scUJBQWdCLEdBQXlCLElBQUksWUFBWSxFQUFFLENBQUM7SUFRbkUsQ0FBQztJQUVKLElBQUksU0FBUztRQUNYLE9BQU8sSUFBSSxDQUFDLGNBQWMsQ0FBQztJQUM3QixDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ0gsSUFBYSxTQUFTLENBQUMsSUFBWTtRQUNqQyxJQUFJLENBQUMsY0FBYyxHQUFHLElBQUksQ0FBQztJQUM3QixDQUFDO0lBRUQsUUFBUTtRQUNOLElBQUksSUFBSSxDQUFDLGNBQWMsS0FBSyxTQUFTLEVBQUU7WUFDckMsSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLGNBQWMsQ0FBQztTQUNsRDtJQUNILENBQUM7SUFFRCxnQkFBZ0I7SUFDaEIsU0FBUztRQUNQLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDNUIsQ0FBQztJQUVELGdCQUFnQjtJQUNoQixNQUFNO1FBQ0osSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksRUFBRSxDQUFDO0lBQy9CLENBQUM7K0dBcEZVLHFCQUFxQixrQkFtRHRCLGlCQUFpQjttR0FuRGhCLHFCQUFxQiw0WENWbEMsNHFGQW1FQTs7NEZEekRhLHFCQUFxQjtrQkFMakMsU0FBUzsrQkFDRSxlQUFlLGlCQUVWLGlCQUFpQixDQUFDLElBQUk7OzBCQXFEbEMsTUFBTTsyQkFBQyxpQkFBaUI7c0VBL0NsQixPQUFPO3NCQUFmLEtBQUs7Z0JBR0csWUFBWTtzQkFBcEIsS0FBSztnQkFLRyxLQUFLO3NCQUFiLEtBQUs7Z0JBS0csV0FBVztzQkFBbkIsS0FBSztnQkFLRyxNQUFNO3NCQUFkLEtBQUs7Z0JBS0csV0FBVztzQkFBbkIsS0FBSztnQkFJRyxjQUFjO3NCQUF0QixLQUFLO2dCQUtHLGNBQWM7c0JBQXRCLEtBQUs7Z0JBS0ksYUFBYTtzQkFBdEIsTUFBTTtnQkFJRyxnQkFBZ0I7c0JBQXpCLE1BQU07Z0JBcUJNLFNBQVM7c0JBQXJCLEtBQUs7O0FBcUJSOztHQUVHO0FBTUgsTUFBTSxPQUFPLHlCQUEwQixTQUFRLHFCQUFxQjsrR0FBdkQseUJBQXlCO21HQUF6Qix5QkFBeUIsaUZDekd0Qyw0cUZBbUVBOzs0RkRzQ2EseUJBQXlCO2tCQUxyQyxTQUFTOytCQUNFLG9CQUFvQixpQkFFZixpQkFBaUIsQ0FBQyxJQUFJIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBFdmVudEVtaXR0ZXIsIEluamVjdCwgSW5wdXQsIE9uSW5pdCwgT3V0cHV0LCBWaWV3RW5jYXBzdWxhdGlvbiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRHNmckhlYWRpbmdMZXZlbCwgSTE4blNlcnZpY2UgfSBmcm9tICcuLi8uLi9zaGFyZWQnO1xuaW1wb3J0IHsgRFNGUl9DT05GSUdfVE9LRU4gfSBmcm9tICcuLi8uLi9zaGFyZWQvY29uZmlnL2NvbmZpZy10b2tlbic7XG5pbXBvcnQgeyBEc2ZyQ29uZmlnIH0gZnJvbSAnLi4vLi4vc2hhcmVkL2NvbmZpZy9jb25maWcubW9kZWwnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdkc2ZyLXJlc3BvbnNlJyxcbiAgdGVtcGxhdGVVcmw6ICcuL3Jlc3BvbnNlLmNvbXBvbmVudC5odG1sJyxcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcbn0pXG5leHBvcnQgY2xhc3MgRHNmclJlc3BvbnNlQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcbiAgLyoqXG4gICAqIFRpdHJlIGRlIGxhIHBhZ2UgKHBhciBkw6lmYXV0IDogJ0VycmV1ciBpbmF0dGVuZHVlJykuXG4gICAqL1xuICBASW5wdXQoKSBoZWFkaW5nID0gdGhpcy5pMThuLnQoJ3BhZ2VSZXNwb25zZS5oZWFkaW5nJyk7XG5cbiAgLyoqIExlIG5pdmVhdSBkZSB0aXRyZSBkZXZhbnQgw6p0cmUgdXRpbGlzw6kuICovXG4gIEBJbnB1dCgpIGhlYWRpbmdMZXZlbDogRHNmckhlYWRpbmdMZXZlbDtcblxuICAvKipcbiAgICogVHlwZSBkJ2VycmV1ciAoNDA0LCA1MDAsLi4uKS5cbiAgICovXG4gIEBJbnB1dCgpIGVycm9yID0gNTAwO1xuXG4gIC8qKlxuICAgKiBEZXNjcmlwdGlvbiBkZSBsYSBwYWdlIChwYXIgZMOpZmF1dDogJ0Vzc2F5ZXogZGUgcmFmcmFpY2hpciBsYSBwYWdlIG91IGJpZW4gcmVzc2F5ZXogcGx1cyB0YXJkLicpLlxuICAgKi9cbiAgQElucHV0KCkgZGVzY3JpcHRpb24gPSB0aGlzLmkxOG4udCgncGFnZVJlc3BvbnNlLmRlc2NyaXB0aW9uJyk7XG5cbiAgLyoqXG4gICAqIETDqXRhaWwgZGUgbGEgcGFnZSAocGFyIGTDqWZhdXQgOiAnRMOpc29sw6ksIGxlIHNlcnZpY2UgcmVuY29udHJlIHVuIHByb2JsZcyAbWUsIG5vdXMgdHJhdmFpbGxvbnMgcG91ciBsZSByZcyBc291ZHJlIGxlIHBsdXMgcmFwaWRlbWVudCBwb3NzaWJsZS4nKS5cbiAgICovXG4gIEBJbnB1dCgpIGRldGFpbCA9IHRoaXMuaTE4bi50KCdwYWdlUmVzcG9uc2UuZGV0YWlsJyk7XG5cbiAgLyoqXG4gICAqIENvbmRpdGlvbm5lIGwnYWZmaWNoYWdlIGR1IGJvdXRvbiBjb250YWN0ZXotbm91cy5cbiAgICovXG4gIEBJbnB1dCgpIHNob3dDb250YWN0ID0gdHJ1ZTtcbiAgLyoqXG4gICAqIENvbmRpdGlvbm5lIGwnYWZmaWNoYWdlIGR1IGJvdXRvbiBwYWdlIGQnYWNjdWVpbCcuXG4gICAqL1xuICBASW5wdXQoKSBzaG93QmFja1RvSG9tZSA9IGZhbHNlO1xuXG4gIC8qKlxuICAgKiBDaGVtaW4gdmVycyBsZSByw6lwZXJ0b2lyZSBleHBvc2FudCBsZXMgcGljdG9ncmFtbWVzIGlsbHVzdHJhdGlmcyBEU0ZSLlxuICAgKi9cbiAgQElucHV0KCkgYXJ0d29ya0RpclBhdGg6IHN0cmluZztcblxuICAvKipcbiAgICogSW5kaXF1ZSBxdWUgbGUgYm91dG9uIGNvbnRhY3QgZXN0IGNsaXF1w6kuXG4gICAqL1xuICBAT3V0cHV0KCkgY29udGFjdFNlbGVjdDogRXZlbnRFbWl0dGVyPHN0cmluZz4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gIC8qKlxuICAgKiBJbmRpcXVlIHF1ZSBsZSBib3V0b24gcGFnZSBkJ2FjY3VlaWwgZXN0IGNsaXF1w6kuXG4gICAqL1xuICBAT3V0cHV0KCkgYmFja1RvSG9tZVNlbGVjdDogRXZlbnRFbWl0dGVyPHN0cmluZz4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgLyoqIEBpbnRlcm5hbCAqLyBub0ZpcnN0TmFtZU1vZGVsOiBib29sZWFuO1xuXG4gIC8qKiBAaW50ZXJuYWwgKi9cbiAgY29uc3RydWN0b3IoXG4gICAgQEluamVjdChEU0ZSX0NPTkZJR19UT0tFTikgcHJpdmF0ZSBjb25maWc6IERzZnJDb25maWcsXG4gICAgcHVibGljIGkxOG46IEkxOG5TZXJ2aWNlLFxuICApIHt9XG5cbiAgZ2V0IHBpY3RvUGF0aCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmFydHdvcmtEaXJQYXRoO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZW1pbiBkZXMgcGljdG9ncmFtbWVzIChkdSBjb21wb3NhbnQgZGlzcGxheSkgcmVuc2VpZ27DqSBwYXIgbGUgZMOpdmVsb3BwZXVyLlxuICAgKlxuICAgKiBOb3RlOiBjZSBjaGVtaW4gZG9pdCBwZXJtZXR0cmUgZGUgcsOpY3Vww6lyZXIgZGlyZWN0ZW1lbnQgbGVzIGZpY2hpZXJzIFNWRyBzdWl2YW50cyA6IG1vb24uc3ZnLCBzdW4uc3ZnLCBzeXN0ZW0uc3ZnXG4gICAqXG4gICAqIEBkZXByZWNhdGVkIFVzZSBgYXJ0d29ya0RpclBhdGhgIGluc3RlYWQuXG4gICAqL1xuICBASW5wdXQoKSBzZXQgcGljdG9QYXRoKHBhdGg6IHN0cmluZykge1xuICAgIHRoaXMuYXJ0d29ya0RpclBhdGggPSBwYXRoO1xuICB9XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuYXJ0d29ya0RpclBhdGggPT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5hcnR3b3JrRGlyUGF0aCA9IHRoaXMuY29uZmlnLmFydHdvcmtEaXJQYXRoO1xuICAgIH1cbiAgfVxuXG4gIC8qKiBAaW50ZXJuYWwgKi9cbiAgb25Db250YWN0KCk6IHZvaWQge1xuICAgIHRoaXMuY29udGFjdFNlbGVjdC5lbWl0KCk7XG4gIH1cblxuICAvKiogQGludGVybmFsICovXG4gIG9uSG9tZSgpOiB2b2lkIHtcbiAgICB0aGlzLmJhY2tUb0hvbWVTZWxlY3QuZW1pdCgpO1xuICB9XG59XG5cbi8qKlxuICogQGRlcHJlY2F0ZWQgdXNlIERzZnJSZXNwb25zZUNvbXBvbmVudCBpbnN0ZWFkXG4gKi9cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2RzZnItcGFnZS1yZXNwb25zZScsXG4gIHRlbXBsYXRlVXJsOiAnLi9yZXNwb25zZS5jb21wb25lbnQuaHRtbCcsXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXG59KVxuZXhwb3J0IGNsYXNzIERzZnJQYWdlUmVzcG9uc2VDb21wb25lbnQgZXh0ZW5kcyBEc2ZyUmVzcG9uc2VDb21wb25lbnQge31cbiIsIjxkaXYgY2xhc3M9XCJmci1jb250YWluZXJcIj5cbiAgPGRpdlxuICAgIGNsYXNzPVwiZnItbXktN3cgZnItbXQtbWQtMTJ3IGZyLW1iLW1kLTEwdyBmci1ncmlkLXJvdyBmci1ncmlkLXJvdy0tZ3V0dGVycyBmci1ncmlkLXJvdy0tbWlkZGxlIGZyLWdyaWQtcm93LS1jZW50ZXJcIj5cbiAgICA8ZGl2IGNsYXNzPVwiZnItcHktMCBmci1jb2wtMTIgZnItY29sLW1kLTZcIj5cbiAgICAgIDwhLS0gVGl0cmUgZHUgY29udGVudSAtLT5cbiAgICAgIDxuZy1jb250YWluZXI+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJkc2ZyUGFnZVJlc3BvbnNlSGVhZGluZ1wiPjwvbmctY29udGFpbmVyPlxuICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICA8cCBjbGFzcz1cImZyLXRleHQtLXNtIGZyLW1iLTN3XCI+RXJyZXVyIHt7IGVycm9yIH19PC9wPlxuICAgICAgPHAgY2xhc3M9XCJmci10ZXh0LS1sZWFkIGZyLW1iLTN3XCI+XG4gICAgICAgIHt7IGRlc2NyaXB0aW9uIH19XG4gICAgICA8L3A+XG4gICAgICA8cCBjbGFzcz1cImZyLXRleHQtLXNtIGZyLW1iLTV3XCI+XG4gICAgICAgIHt7IGRldGFpbCB9fVxuICAgICAgPC9wPlxuICAgICAgPGRzZnItYnV0dG9ucy1ncm91cCAqbmdJZj1cInNob3dCYWNrVG9Ib21lIHx8IHNob3dDb250YWN0XCIgaW5saW5lPVwiYWx3YXlzXCI+XG4gICAgICAgIDxkc2ZyLWJ1dHRvblxuICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICpuZ0lmPVwic2hvd0JhY2tUb0hvbWVcIlxuICAgICAgICAgIGxhYmVsPVwiUGFnZSBkJ2FjY3VlaWxcIlxuICAgICAgICAgIHZhcmlhbnQ9XCJwcmltYXJ5XCJcbiAgICAgICAgICAoY2xpY2spPVwib25Ib21lKClcIj48L2RzZnItYnV0dG9uPlxuICAgICAgICA8ZHNmci1idXR0b25cbiAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAqbmdJZj1cInNob3dDb250YWN0XCJcbiAgICAgICAgICBbbGFiZWxdPVwiaTE4bi50KCdyZXNwb25zZS5jb250YWN0VXMnKVwiXG4gICAgICAgICAgdmFyaWFudD1cInNlY29uZGFyeVwiXG4gICAgICAgICAgKGNsaWNrKT1cIm9uQ29udGFjdCgpXCI+PC9kc2ZyLWJ1dHRvbj5cbiAgICAgIDwvZHNmci1idXR0b25zLWdyb3VwPlxuICAgIDwvZGl2PlxuICAgIDxkaXYgY2xhc3M9XCJmci1jb2wtMTIgZnItY29sLW1kLTMgZnItY29sLW9mZnNldC1tZC0xIGZyLXB4LTZ3IGZyLXB4LW1kLTAgZnItcHktMFwiPlxuICAgICAgPHN2Z1xuICAgICAgICB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJcbiAgICAgICAgY2xhc3M9XCJmci1yZXNwb25zaXZlLWltZyBmci1hcnR3b3JrXCJcbiAgICAgICAgYXJpYS1oaWRkZW49XCJ0cnVlXCJcbiAgICAgICAgd2lkdGg9XCIxNjBcIlxuICAgICAgICBoZWlnaHQ9XCIyMDBcIlxuICAgICAgICB2aWV3Qm94PVwiMCAwIDE2MCAyMDBcIlxuICAgICAgICBkYXRhLWZyLWpzLXJhdGlvPVwidHJ1ZVwiPlxuICAgICAgICA8dXNlIGNsYXNzPVwiZnItYXJ0d29yay1tb3RpZlwiIFthdHRyLmhyZWZdPVwicGljdG9QYXRoICsgJy9iYWNrZ3JvdW5kL292b2lkLnN2ZyNhcnR3b3JrLW1vdGlmJ1wiPjwvdXNlPlxuICAgICAgICA8dXNlIGNsYXNzPVwiZnItYXJ0d29yay1tb3RpZlwiIFthdHRyLmhyZWZdPVwicGljdG9QYXRoICsgJy9iYWNrZ3JvdW5kL292b2lkLnN2ZyNhcnR3b3JrLWJhY2tncm91bmQnXCI+PC91c2U+XG4gICAgICAgIDxnIHRyYW5zZm9ybT1cInRyYW5zbGF0ZSg0MCwgNjApXCI+XG4gICAgICAgICAgPHVzZVxuICAgICAgICAgICAgY2xhc3M9XCJmci1hcnR3b3JrLWRlY29yYXRpdmVcIlxuICAgICAgICAgICAgW2F0dHIuaHJlZl09XCJwaWN0b1BhdGggKyAnL3BpY3RvZ3JhbXMvc3lzdGVtL3RlY2huaWNhbC1lcnJvci5zdmcjYXJ0d29yay1kZWNvcmF0aXZlJ1wiPjwvdXNlPlxuICAgICAgICAgIDx1c2VcbiAgICAgICAgICAgIGNsYXNzPVwiZnItYXJ0d29yay1taW5vclwiXG4gICAgICAgICAgICBbYXR0ci5ocmVmXT1cInBpY3RvUGF0aCArICcvcGljdG9ncmFtcy9zeXN0ZW0vdGVjaG5pY2FsLWVycm9yLnN2ZyNhcnR3b3JrLW1pbm9yJ1wiPjwvdXNlPlxuICAgICAgICAgIDx1c2VcbiAgICAgICAgICAgIGNsYXNzPVwiZnItYXJ0d29yay1tYWpvclwiXG4gICAgICAgICAgICBbYXR0ci5ocmVmXT1cInBpY3RvUGF0aCArICcvcGljdG9ncmFtcy9zeXN0ZW0vdGVjaG5pY2FsLWVycm9yLnN2ZyNhcnR3b3JrLW1ham9yJ1wiPjwvdXNlPlxuICAgICAgICA8L2c+XG4gICAgICA8L3N2Zz5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG48L2Rpdj5cblxuPG5nLXRlbXBsYXRlICNkc2ZyUGFnZVJlc3BvbnNlSGVhZGluZz5cbiAgPG5nLWNvbnRhaW5lciBbbmdTd2l0Y2hdPVwiaGVhZGluZ0xldmVsXCI+XG4gICAgPGgxICpuZ1N3aXRjaERlZmF1bHQ+e3sgaGVhZGluZyB9fTwvaDE+XG4gICAgPGgyICpuZ1N3aXRjaENhc2U9XCInSDInXCI+e3sgaGVhZGluZyB9fTwvaDI+XG4gICAgPGgzICpuZ1N3aXRjaENhc2U9XCInSDMnXCI+e3sgaGVhZGluZyB9fTwvaDM+XG4gICAgPGg0ICpuZ1N3aXRjaENhc2U9XCInSDQnXCI+e3sgaGVhZGluZyB9fTwvaDQ+XG4gICAgPGg1ICpuZ1N3aXRjaENhc2U9XCInSDUnXCI+e3sgaGVhZGluZyB9fTwvaDU+XG4gICAgPGg2ICpuZ1N3aXRjaENhc2U9XCInSDYnXCI+e3sgaGVhZGluZyB9fTwvaDY+XG4gIDwvbmctY29udGFpbmVyPlxuPC9uZy10ZW1wbGF0ZT5cbiJdfQ==