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

54 lines 18.9 kB
import { CommonModule } from '@angular/common'; import { Component, Input, ViewEncapsulation } from '@angular/core'; import { RouterModule } from '@angular/router'; import { DsfrPositionConst } from '../../shared'; import { DsfrLinkComponent } from './link.component'; import * as i0 from "@angular/core"; import * as i1 from "@angular/common"; import * as i2 from "@angular/router"; export class ItemLinkComponent extends DsfrLinkComponent { constructor() { super(...arguments); // DsfrPositionConst.RIGHT pour être, malheureusement, compatible avec l'existant. undefined dans l'idéal. this.defaultIconPosition = DsfrPositionConst.RIGHT; } /**@internal */ get item() { return this._item; } /** @since 1.7 Optionnel, utilisation avec un model DsfrLink (exclusif avec les autres propriétés) */ set item(value) { this._item = value; if (this._item) { this.ariaControls = this._item.ariaControls; this.ariaCurrent = this._item.active ? 'page' : undefined; this.ariaLabel = this._item.ariaLabel; this.routePath = this._item.routerLink; this.route = this._item.route; this.routerLinkActive = this._item.routerLinkActive; this.routerLinkActiveOptions = this._item?.routerLinkActiveOptions; this.routerLinkExtras = this._item.routerLinkExtras; this.customClass = this.customClass || this._item.customClass; this.disabled = this._item.disabled || false; this.mode = this._item.mode; this.icon = this._item.icon; this.iconPosition = this._item.iconPosition || this.defaultIconPosition; this.label = this._item.label; this.link = this._item.link; this.linkId = this._item.linkId; this.linkTarget = this._item.linkTarget || this._item.target; this.tooltipMessage = this._item.tooltipMessage; } } static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: ItemLinkComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); } static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: ItemLinkComponent, isStandalone: true, selector: "edu-item-link", inputs: { defaultIconPosition: "defaultIconPosition", item: "item" }, usesInheritance: true, ngImport: i0, template: "<!-- Lien externe ou g\u00E9r\u00E9 programmatiquement -->\n<a\n *ngIf=\"!hasRouterLink() && mode !== 'button'\"\n class=\"{{ customClass ? customClass : '' }}\"\n [className]=\"icon ? icon : ''\"\n [ngClass]=\"getClass()\"\n [attr.aria-current]=\"ariaCurrent || null\"\n [attr.aria-controls]=\"ariaControls || null\"\n [attr.aria-disabled]=\"disabled || null\"\n [attr.aria-label]=\"ariaLabel || null\"\n [attr.role]=\"disabled ? 'link' : null\"\n [attr.id]=\"linkId || null\"\n [attr.href]=\"getHref() || null\"\n [attr.target]=\"targetLink || null\"\n [attr.title]=\"tooltipMessage || null\"\n [attr.rel]=\"linkTarget === '_blank' ? 'noopener external' : null\"\n [attr.data-fr-opened]=\"ariaControls ? false : null\"\n (click)=\"onLink($event)\">\n <div *ngIf=\"label\" [outerHTML]=\"label\"></div>\n <ng-container *ngIf=\"!label\" [ngTemplateOutlet]=\"slot\"></ng-container>\n</a>\n\n<!-- Directive router link-->\n<a\n *ngIf=\"hasRouterLink() && mode !== 'button'\"\n [attr.id]=\"linkId || null\"\n class=\"{{ customClass ? customClass : '' }}\"\n [className]=\"icon ? icon : ''\"\n [ngClass]=\"getClass()\"\n [ariaCurrentWhenActive]=\"'page'\"\n [attr.aria-current]=\"ariaCurrent || null\"\n [attr.aria-controls]=\"ariaControls || null\"\n [attr.aria-disabled]=\"disabled || null\"\n [attr.aria-label]=\"ariaLabel || null\"\n [attr.role]=\"disabled ? 'link' : null\"\n [routerLink]=\"routePath\"\n [routerLinkActive]=\"routerLinkActive ?? ''\"\n [routerLinkActiveOptions]=\"routerLinkActiveOptions ? routerLinkActiveOptions : { exact: false }\"\n [queryParams]=\"routerLinkExtras?.queryParams\"\n [fragment]=\"routerLinkExtras?.fragment\"\n [queryParamsHandling]=\"routerLinkExtras?.queryParamsHandling\"\n [preserveFragment]=\"routerLinkExtras?.preserveFragment\"\n [skipLocationChange]=\"routerLinkExtras?.skipLocationChange\"\n [replaceUrl]=\"routerLinkExtras?.replaceUrl\"\n [state]=\"routerLinkExtras?.state\"\n [attr.target]=\"targetLink || null\"\n [attr.title]=\"tooltipMessage || null\"\n (click)=\"onLink($event)\">\n <div *ngIf=\"label\" [outerHTML]=\"label\"></div>\n <ng-container *ngIf=\"!label\" [ngTemplateOutlet]=\"slot\"> </ng-container>\n</a>\n\n<!-- Bouton en apparence de lien-->\n<button\n *ngIf=\"mode === 'button'\"\n type=\"button\"\n [ngClass]=\"getButtonClasses()\"\n [attr.aria-controls]=\"ariaControls || null\"\n [attr.aria-label]=\"ariaLabel || null\"\n [attr.data-fr-opened]=\"ariaControls ? false : null\"\n [attr.title]=\"tooltipMessage || null\"\n (click)=\"onLink($event)\">\n <div *ngIf=\"label\" [outerHTML]=\"label\"></div>\n <ng-container *ngIf=\"!label\" [ngTemplateOutlet]=\"slot\"> </ng-container>\n</button>\n\n<ng-template #slot>\n <ng-content></ng-content>\n</ng-template>\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: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "ngmodule", type: RouterModule }, { kind: "directive", type: i2.RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "directive", type: i2.RouterLinkActive, selector: "[routerLinkActive]", inputs: ["routerLinkActiveOptions", "ariaCurrentWhenActive", "routerLinkActive"], outputs: ["isActiveChange"], exportAs: ["routerLinkActive"] }], encapsulation: i0.ViewEncapsulation.None }); } } i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: ItemLinkComponent, decorators: [{ type: Component, args: [{ selector: 'edu-item-link', encapsulation: ViewEncapsulation.None, standalone: true, imports: [CommonModule, RouterModule], template: "<!-- Lien externe ou g\u00E9r\u00E9 programmatiquement -->\n<a\n *ngIf=\"!hasRouterLink() && mode !== 'button'\"\n class=\"{{ customClass ? customClass : '' }}\"\n [className]=\"icon ? icon : ''\"\n [ngClass]=\"getClass()\"\n [attr.aria-current]=\"ariaCurrent || null\"\n [attr.aria-controls]=\"ariaControls || null\"\n [attr.aria-disabled]=\"disabled || null\"\n [attr.aria-label]=\"ariaLabel || null\"\n [attr.role]=\"disabled ? 'link' : null\"\n [attr.id]=\"linkId || null\"\n [attr.href]=\"getHref() || null\"\n [attr.target]=\"targetLink || null\"\n [attr.title]=\"tooltipMessage || null\"\n [attr.rel]=\"linkTarget === '_blank' ? 'noopener external' : null\"\n [attr.data-fr-opened]=\"ariaControls ? false : null\"\n (click)=\"onLink($event)\">\n <div *ngIf=\"label\" [outerHTML]=\"label\"></div>\n <ng-container *ngIf=\"!label\" [ngTemplateOutlet]=\"slot\"></ng-container>\n</a>\n\n<!-- Directive router link-->\n<a\n *ngIf=\"hasRouterLink() && mode !== 'button'\"\n [attr.id]=\"linkId || null\"\n class=\"{{ customClass ? customClass : '' }}\"\n [className]=\"icon ? icon : ''\"\n [ngClass]=\"getClass()\"\n [ariaCurrentWhenActive]=\"'page'\"\n [attr.aria-current]=\"ariaCurrent || null\"\n [attr.aria-controls]=\"ariaControls || null\"\n [attr.aria-disabled]=\"disabled || null\"\n [attr.aria-label]=\"ariaLabel || null\"\n [attr.role]=\"disabled ? 'link' : null\"\n [routerLink]=\"routePath\"\n [routerLinkActive]=\"routerLinkActive ?? ''\"\n [routerLinkActiveOptions]=\"routerLinkActiveOptions ? routerLinkActiveOptions : { exact: false }\"\n [queryParams]=\"routerLinkExtras?.queryParams\"\n [fragment]=\"routerLinkExtras?.fragment\"\n [queryParamsHandling]=\"routerLinkExtras?.queryParamsHandling\"\n [preserveFragment]=\"routerLinkExtras?.preserveFragment\"\n [skipLocationChange]=\"routerLinkExtras?.skipLocationChange\"\n [replaceUrl]=\"routerLinkExtras?.replaceUrl\"\n [state]=\"routerLinkExtras?.state\"\n [attr.target]=\"targetLink || null\"\n [attr.title]=\"tooltipMessage || null\"\n (click)=\"onLink($event)\">\n <div *ngIf=\"label\" [outerHTML]=\"label\"></div>\n <ng-container *ngIf=\"!label\" [ngTemplateOutlet]=\"slot\"> </ng-container>\n</a>\n\n<!-- Bouton en apparence de lien-->\n<button\n *ngIf=\"mode === 'button'\"\n type=\"button\"\n [ngClass]=\"getButtonClasses()\"\n [attr.aria-controls]=\"ariaControls || null\"\n [attr.aria-label]=\"ariaLabel || null\"\n [attr.data-fr-opened]=\"ariaControls ? false : null\"\n [attr.title]=\"tooltipMessage || null\"\n (click)=\"onLink($event)\">\n <div *ngIf=\"label\" [outerHTML]=\"label\"></div>\n <ng-container *ngIf=\"!label\" [ngTemplateOutlet]=\"slot\"> </ng-container>\n</button>\n\n<ng-template #slot>\n <ng-content></ng-content>\n</ng-template>\n" }] }], propDecorators: { defaultIconPosition: [{ type: Input }], item: [{ type: Input }] } }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaXRlbS1saW5rLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1kc2ZyLWNvbXBvbmVudHMvc3JjL2xpYi9jb21wb25lbnRzL2xpbmsvaXRlbS1saW5rLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1kc2ZyLWNvbXBvbmVudHMvc3JjL2xpYi9jb21wb25lbnRzL2xpbmsvbGluay5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDcEUsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBMEIsaUJBQWlCLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDekUsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sa0JBQWtCLENBQUM7Ozs7QUFTckQsTUFBTSxPQUFPLGlCQUFrQixTQUFRLGlCQUFpQjtJQVB4RDs7UUFRRSwwR0FBMEc7UUFDakcsd0JBQW1CLEdBQTZCLGlCQUFpQixDQUFDLEtBQUssQ0FBQztLQWtDbEY7SUE3QkMsZUFBZTtJQUNmLElBQUksSUFBSTtRQUNOLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQztJQUNwQixDQUFDO0lBRUQscUdBQXFHO0lBQ3JHLElBQWEsSUFBSSxDQUFDLEtBQTJCO1FBQzNDLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO1FBQ25CLElBQUksSUFBSSxDQUFDLEtBQUssRUFBRTtZQUNkLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxZQUFZLENBQUM7WUFDNUMsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUM7WUFDMUQsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQztZQUN0QyxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDO1lBQ3ZDLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUM7WUFDOUIsSUFBSSxDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsZ0JBQWdCLENBQUM7WUFDcEQsSUFBSSxDQUFDLHVCQUF1QixHQUFHLElBQUksQ0FBQyxLQUFLLEVBQUUsdUJBQXVCLENBQUM7WUFDbkUsSUFBSSxDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsZ0JBQWdCLENBQUM7WUFDcEQsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsV0FBVyxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDO1lBQzlELElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLElBQUksS0FBSyxDQUFDO1lBQzdDLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUM7WUFDNUIsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQztZQUM1QixJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsWUFBWSxJQUFJLElBQUksQ0FBQyxtQkFBbUIsQ0FBQztZQUN4RSxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDO1lBQzlCLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUM7WUFDNUIsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQztZQUNoQyxJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsVUFBVSxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDO1lBQzdELElBQUksQ0FBQyxjQUFjLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxjQUFjLENBQUM7U0FDakQ7SUFDSCxDQUFDOytHQW5DVSxpQkFBaUI7bUdBQWpCLGlCQUFpQixzS0NiOUIsZ3VGQXFFQSwyQ0QxRFksWUFBWSx1WUFBRSxZQUFZOzs0RkFFekIsaUJBQWlCO2tCQVA3QixTQUFTOytCQUNFLGVBQWUsaUJBRVYsaUJBQWlCLENBQUMsSUFBSSxjQUN6QixJQUFJLFdBQ1AsQ0FBQyxZQUFZLEVBQUUsWUFBWSxDQUFDOzhCQUk1QixtQkFBbUI7c0JBQTNCLEtBQUs7Z0JBV08sSUFBSTtzQkFBaEIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBDb21wb25lbnQsIElucHV0LCBWaWV3RW5jYXBzdWxhdGlvbiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgUm91dGVyTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7IERzZnJMaW5rLCBEc2ZyUG9zaXRpb24sIERzZnJQb3NpdGlvbkNvbnN0IH0gZnJvbSAnLi4vLi4vc2hhcmVkJztcbmltcG9ydCB7IERzZnJMaW5rQ29tcG9uZW50IH0gZnJvbSAnLi9saW5rLmNvbXBvbmVudCc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2VkdS1pdGVtLWxpbmsnLFxuICB0ZW1wbGF0ZVVybDogJy4vbGluay5jb21wb25lbnQuaHRtbCcsXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtDb21tb25Nb2R1bGUsIFJvdXRlck1vZHVsZV0sXG59KVxuZXhwb3J0IGNsYXNzIEl0ZW1MaW5rQ29tcG9uZW50IGV4dGVuZHMgRHNmckxpbmtDb21wb25lbnQge1xuICAvLyBEc2ZyUG9zaXRpb25Db25zdC5SSUdIVCBwb3VyIMOqdHJlLCBtYWxoZXVyZXVzZW1lbnQsIGNvbXBhdGlibGUgYXZlYyBsJ2V4aXN0YW50LiB1bmRlZmluZWQgZGFucyBsJ2lkw6lhbC5cbiAgQElucHV0KCkgZGVmYXVsdEljb25Qb3NpdGlvbjogRHNmclBvc2l0aW9uIHwgdW5kZWZpbmVkID0gRHNmclBvc2l0aW9uQ29uc3QuUklHSFQ7XG5cbiAgLyoqQGludGVybmFsICovXG4gIHByaXZhdGUgX2l0ZW06IERzZnJMaW5rIHwgdW5kZWZpbmVkO1xuXG4gIC8qKkBpbnRlcm5hbCAqL1xuICBnZXQgaXRlbSgpOiBEc2ZyTGluayB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuX2l0ZW07XG4gIH1cblxuICAvKiogQHNpbmNlIDEuNyBPcHRpb25uZWwsIHV0aWxpc2F0aW9uIGF2ZWMgdW4gbW9kZWwgRHNmckxpbmsgKGV4Y2x1c2lmIGF2ZWMgbGVzIGF1dHJlcyBwcm9wcmnDqXTDqXMpICovXG4gIEBJbnB1dCgpIHNldCBpdGVtKHZhbHVlOiBEc2ZyTGluayB8IHVuZGVmaW5lZCkge1xuICAgIHRoaXMuX2l0ZW0gPSB2YWx1ZTtcbiAgICBpZiAodGhpcy5faXRlbSkge1xuICAgICAgdGhpcy5hcmlhQ29udHJvbHMgPSB0aGlzLl9pdGVtLmFyaWFDb250cm9scztcbiAgICAgIHRoaXMuYXJpYUN1cnJlbnQgPSB0aGlzLl9pdGVtLmFjdGl2ZSA/ICdwYWdlJyA6IHVuZGVmaW5lZDtcbiAgICAgIHRoaXMuYXJpYUxhYmVsID0gdGhpcy5faXRlbS5hcmlhTGFiZWw7XG4gICAgICB0aGlzLnJvdXRlUGF0aCA9IHRoaXMuX2l0ZW0ucm91dGVyTGluaztcbiAgICAgIHRoaXMucm91dGUgPSB0aGlzLl9pdGVtLnJvdXRlO1xuICAgICAgdGhpcy5yb3V0ZXJMaW5rQWN0aXZlID0gdGhpcy5faXRlbS5yb3V0ZXJMaW5rQWN0aXZlO1xuICAgICAgdGhpcy5yb3V0ZXJMaW5rQWN0aXZlT3B0aW9ucyA9IHRoaXMuX2l0ZW0/LnJvdXRlckxpbmtBY3RpdmVPcHRpb25zO1xuICAgICAgdGhpcy5yb3V0ZXJMaW5rRXh0cmFzID0gdGhpcy5faXRlbS5yb3V0ZXJMaW5rRXh0cmFzO1xuICAgICAgdGhpcy5jdXN0b21DbGFzcyA9IHRoaXMuY3VzdG9tQ2xhc3MgfHwgdGhpcy5faXRlbS5jdXN0b21DbGFzcztcbiAgICAgIHRoaXMuZGlzYWJsZWQgPSB0aGlzLl9pdGVtLmRpc2FibGVkIHx8IGZhbHNlO1xuICAgICAgdGhpcy5tb2RlID0gdGhpcy5faXRlbS5tb2RlO1xuICAgICAgdGhpcy5pY29uID0gdGhpcy5faXRlbS5pY29uO1xuICAgICAgdGhpcy5pY29uUG9zaXRpb24gPSB0aGlzLl9pdGVtLmljb25Qb3NpdGlvbiB8fCB0aGlzLmRlZmF1bHRJY29uUG9zaXRpb247XG4gICAgICB0aGlzLmxhYmVsID0gdGhpcy5faXRlbS5sYWJlbDtcbiAgICAgIHRoaXMubGluayA9IHRoaXMuX2l0ZW0ubGluaztcbiAgICAgIHRoaXMubGlua0lkID0gdGhpcy5faXRlbS5saW5rSWQ7XG4gICAgICB0aGlzLmxpbmtUYXJnZXQgPSB0aGlzLl9pdGVtLmxpbmtUYXJnZXQgfHwgdGhpcy5faXRlbS50YXJnZXQ7XG4gICAgICB0aGlzLnRvb2x0aXBNZXNzYWdlID0gdGhpcy5faXRlbS50b29sdGlwTWVzc2FnZTtcbiAgICB9XG4gIH1cbn1cbiIsIjwhLS0gTGllbiBleHRlcm5lIG91IGfDqXLDqSBwcm9ncmFtbWF0aXF1ZW1lbnQgLS0+XG48YVxuICAqbmdJZj1cIiFoYXNSb3V0ZXJMaW5rKCkgJiYgbW9kZSAhPT0gJ2J1dHRvbidcIlxuICBjbGFzcz1cInt7IGN1c3RvbUNsYXNzID8gY3VzdG9tQ2xhc3MgOiAnJyB9fVwiXG4gIFtjbGFzc05hbWVdPVwiaWNvbiA/IGljb24gOiAnJ1wiXG4gIFtuZ0NsYXNzXT1cImdldENsYXNzKClcIlxuICBbYXR0ci5hcmlhLWN1cnJlbnRdPVwiYXJpYUN1cnJlbnQgfHwgbnVsbFwiXG4gIFthdHRyLmFyaWEtY29udHJvbHNdPVwiYXJpYUNvbnRyb2xzIHx8IG51bGxcIlxuICBbYXR0ci5hcmlhLWRpc2FibGVkXT1cImRpc2FibGVkIHx8IG51bGxcIlxuICBbYXR0ci5hcmlhLWxhYmVsXT1cImFyaWFMYWJlbCB8fCBudWxsXCJcbiAgW2F0dHIucm9sZV09XCJkaXNhYmxlZCA/ICdsaW5rJyA6IG51bGxcIlxuICBbYXR0ci5pZF09XCJsaW5rSWQgfHwgbnVsbFwiXG4gIFthdHRyLmhyZWZdPVwiZ2V0SHJlZigpIHx8IG51bGxcIlxuICBbYXR0ci50YXJnZXRdPVwidGFyZ2V0TGluayB8fCBudWxsXCJcbiAgW2F0dHIudGl0bGVdPVwidG9vbHRpcE1lc3NhZ2UgfHwgbnVsbFwiXG4gIFthdHRyLnJlbF09XCJsaW5rVGFyZ2V0ID09PSAnX2JsYW5rJyA/ICdub29wZW5lciBleHRlcm5hbCcgOiBudWxsXCJcbiAgW2F0dHIuZGF0YS1mci1vcGVuZWRdPVwiYXJpYUNvbnRyb2xzID8gZmFsc2UgOiBudWxsXCJcbiAgKGNsaWNrKT1cIm9uTGluaygkZXZlbnQpXCI+XG4gIDxkaXYgKm5nSWY9XCJsYWJlbFwiIFtvdXRlckhUTUxdPVwibGFiZWxcIj48L2Rpdj5cbiAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFsYWJlbFwiIFtuZ1RlbXBsYXRlT3V0bGV0XT1cInNsb3RcIj48L25nLWNvbnRhaW5lcj5cbjwvYT5cblxuPCEtLSBEaXJlY3RpdmUgcm91dGVyIGxpbmstLT5cbjxhXG4gICpuZ0lmPVwiaGFzUm91dGVyTGluaygpICYmIG1vZGUgIT09ICdidXR0b24nXCJcbiAgW2F0dHIuaWRdPVwibGlua0lkIHx8IG51bGxcIlxuICBjbGFzcz1cInt7IGN1c3RvbUNsYXNzID8gY3VzdG9tQ2xhc3MgOiAnJyB9fVwiXG4gIFtjbGFzc05hbWVdPVwiaWNvbiA/IGljb24gOiAnJ1wiXG4gIFtuZ0NsYXNzXT1cImdldENsYXNzKClcIlxuICBbYXJpYUN1cnJlbnRXaGVuQWN0aXZlXT1cIidwYWdlJ1wiXG4gIFthdHRyLmFyaWEtY3VycmVudF09XCJhcmlhQ3VycmVudCB8fCBudWxsXCJcbiAgW2F0dHIuYXJpYS1jb250cm9sc109XCJhcmlhQ29udHJvbHMgfHwgbnVsbFwiXG4gIFthdHRyLmFyaWEtZGlzYWJsZWRdPVwiZGlzYWJsZWQgfHwgbnVsbFwiXG4gIFthdHRyLmFyaWEtbGFiZWxdPVwiYXJpYUxhYmVsIHx8IG51bGxcIlxuICBbYXR0ci5yb2xlXT1cImRpc2FibGVkID8gJ2xpbmsnIDogbnVsbFwiXG4gIFtyb3V0ZXJMaW5rXT1cInJvdXRlUGF0aFwiXG4gIFtyb3V0ZXJMaW5rQWN0aXZlXT1cInJvdXRlckxpbmtBY3RpdmUgPz8gJydcIlxuICBbcm91dGVyTGlua0FjdGl2ZU9wdGlvbnNdPVwicm91dGVyTGlua0FjdGl2ZU9wdGlvbnMgPyByb3V0ZXJMaW5rQWN0aXZlT3B0aW9ucyA6IHsgZXhhY3Q6IGZhbHNlIH1cIlxuICBbcXVlcnlQYXJhbXNdPVwicm91dGVyTGlua0V4dHJhcz8ucXVlcnlQYXJhbXNcIlxuICBbZnJhZ21lbnRdPVwicm91dGVyTGlua0V4dHJhcz8uZnJhZ21lbnRcIlxuICBbcXVlcnlQYXJhbXNIYW5kbGluZ109XCJyb3V0ZXJMaW5rRXh0cmFzPy5xdWVyeVBhcmFtc0hhbmRsaW5nXCJcbiAgW3ByZXNlcnZlRnJhZ21lbnRdPVwicm91dGVyTGlua0V4dHJhcz8ucHJlc2VydmVGcmFnbWVudFwiXG4gIFtza2lwTG9jYXRpb25DaGFuZ2VdPVwicm91dGVyTGlua0V4dHJhcz8uc2tpcExvY2F0aW9uQ2hhbmdlXCJcbiAgW3JlcGxhY2VVcmxdPVwicm91dGVyTGlua0V4dHJhcz8ucmVwbGFjZVVybFwiXG4gIFtzdGF0ZV09XCJyb3V0ZXJMaW5rRXh0cmFzPy5zdGF0ZVwiXG4gIFthdHRyLnRhcmdldF09XCJ0YXJnZXRMaW5rIHx8IG51bGxcIlxuICBbYXR0ci50aXRsZV09XCJ0b29sdGlwTWVzc2FnZSB8fCBudWxsXCJcbiAgKGNsaWNrKT1cIm9uTGluaygkZXZlbnQpXCI+XG4gIDxkaXYgKm5nSWY9XCJsYWJlbFwiIFtvdXRlckhUTUxdPVwibGFiZWxcIj48L2Rpdj5cbiAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFsYWJlbFwiIFtuZ1RlbXBsYXRlT3V0bGV0XT1cInNsb3RcIj4gPC9uZy1jb250YWluZXI+XG48L2E+XG5cbjwhLS0gQm91dG9uIGVuIGFwcGFyZW5jZSBkZSBsaWVuLS0+XG48YnV0dG9uXG4gICpuZ0lmPVwibW9kZSA9PT0gJ2J1dHRvbidcIlxuICB0eXBlPVwiYnV0dG9uXCJcbiAgW25nQ2xhc3NdPVwiZ2V0QnV0dG9uQ2xhc3NlcygpXCJcbiAgW2F0dHIuYXJpYS1jb250cm9sc109XCJhcmlhQ29udHJvbHMgfHwgbnVsbFwiXG4gIFthdHRyLmFyaWEtbGFiZWxdPVwiYXJpYUxhYmVsIHx8IG51bGxcIlxuICBbYXR0ci5kYXRhLWZyLW9wZW5lZF09XCJhcmlhQ29udHJvbHMgPyBmYWxzZSA6IG51bGxcIlxuICBbYXR0ci50aXRsZV09XCJ0b29sdGlwTWVzc2FnZSB8fCBudWxsXCJcbiAgKGNsaWNrKT1cIm9uTGluaygkZXZlbnQpXCI+XG4gIDxkaXYgKm5nSWY9XCJsYWJlbFwiIFtvdXRlckhUTUxdPVwibGFiZWxcIj48L2Rpdj5cbiAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFsYWJlbFwiIFtuZ1RlbXBsYXRlT3V0bGV0XT1cInNsb3RcIj4gPC9uZy1jb250YWluZXI+XG48L2J1dHRvbj5cblxuPG5nLXRlbXBsYXRlICNzbG90PlxuICA8bmctY29udGVudD48L25nLWNvbnRlbnQ+XG48L25nLXRlbXBsYXRlPlxuIl19