@visa/nova-angular
Version:
Visa Product Design System Nova Angular library
104 lines • 15.4 kB
JavaScript
/**
* Copyright (c) 2025 Visa, Inc.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*
**/
import { A11yModule } from '@angular/cdk/a11y';
import { CommonModule } from '@angular/common';
import { Component, HostBinding, Input } from '@angular/core';
import { UUIDService } from '../_utilities/services/uuid.service';
import { FlexDirective } from '../flex/flex.directive';
import { MessageType } from '../message/message.constants';
import * as i0 from "@angular/core";
import * as i1 from "../_utilities/services/uuid.service";
import * as i2 from "@angular/cdk/a11y";
export class DialogComponent {
get hostId() {
return this.id;
}
/**
* @ignore
*/
get messageType() {
return this._messageType;
}
set messageType(value) {
this._messageType = value;
}
get ariaModal() {
return 'true';
}
get ariaRole() {
return 'dialog';
}
get ariaLabelledBy() {
return `${this.label}`;
}
get ariaDescribedBy() {
return `${this.descriptionLabel}`;
}
get hostClass() {
return [
this.class,
'v-dialog',
this.messageType ? (this.messageType === MessageType.INFORMATION ? 'v-dialog-default' : '') : 'v-dialog-default'
].join(' ');
}
constructor(uuidService) {
this.uuidService = uuidService;
this.isOpen = false;
}
ngOnInit() {
this.id = this.id ? this.id : this.uuidService.getUUID('v-dialog-');
this.label = this.label ? this.label : `${this.id}-title`;
this.descriptionLabel = this.descriptionLabel ? this.descriptionLabel : `${this.id}-description`;
}
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: DialogComponent, deps: [{ token: i1.UUIDService }], target: i0.ɵɵFactoryTarget.Component }); }
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: DialogComponent, isStandalone: true, selector: "[v-dialog]", inputs: { id: "id", messageType: "messageType", label: ["aria-labelledby", "label"], descriptionLabel: ["aria-describedby", "descriptionLabel"], class: "class" }, host: { properties: { "attr.id": "this.hostId", "attr.aria-modal": "this.ariaModal", "attr.role": "this.ariaRole", "attr.aria-labelledby": "this.ariaLabelledBy", "attr.aria-describedby": "this.ariaDescribedBy", "class": "this.hostClass" } }, ngImport: i0, template: "<!--\n * Copyright (c) 2025 Visa, Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n -->\n<div cdkTrapFocus cdkTrapFocusAutoCapture vFlex vFlexRow>\n <ng-content></ng-content>\n</div>\n", dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: A11yModule }, { kind: "directive", type: i2.CdkTrapFocus, selector: "[cdkTrapFocus]", inputs: ["cdkTrapFocus", "cdkTrapFocusAutoCapture"], exportAs: ["cdkTrapFocus"] }, { kind: "directive", type: FlexDirective, selector: "[vFlex], [vFlexInline], [vGap], [vFlexGrow], [vFlexGrow0], \n [vFlexShrink], [vFlexShrink0], [vFlexBasis], [vAlignSelfStart], [vAlignSelfEnd], \n [vAlignSelfCenter], [vAlignSelfStretch], [vAlignSelfAuto], [vAlignSelfBaseline],", inputs: ["vFlex", "vFlexInline", "vFlexCol", "vFlexColReverse", "vFlexRow", "vFlexRowReverse", "vFlexWrap", "vFlexWrapReverse", "vFlexNoWrap", "vFlexBasis", "vFlexGrow", "vFlexGrow0", "vFlexShrink", "vFlexShrink0", "vAlignContentCenter", "vAlignContentStart", "vAlignContentEnd", "vAlignContentBetween", "vAlignContentAround", "vAlignContentEvenly", "vAlignItemsCenter", "vAlignItemsStart", "vAlignItemsEnd", "vAlignItemsBaseline", "vAlignItemsStretch", "vAlignSelfCenter", "vAlignSelfStart", "vAlignSelfEnd", "vAlignSelfBaseline", "vAlignSelfStretch", "vAlignSelfAuto", "vJustifyContentCenter", "vJustifyContentStart", "vJustifyContentEnd", "vJustifyContentBetween", "vJustifyContentAround", "vJustifyContentEvenly", "vGap", "vColGap", "vRowGap"] }] }); }
}
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: DialogComponent, decorators: [{
type: Component,
args: [{ standalone: true, imports: [CommonModule, A11yModule, FlexDirective], selector: '[v-dialog]', template: "<!--\n * Copyright (c) 2025 Visa, Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n -->\n<div cdkTrapFocus cdkTrapFocusAutoCapture vFlex vFlexRow>\n <ng-content></ng-content>\n</div>\n" }]
}], ctorParameters: () => [{ type: i1.UUIDService }], propDecorators: { id: [{
type: Input
}], hostId: [{
type: HostBinding,
args: ['attr.id']
}], messageType: [{
type: Input
}], ariaModal: [{
type: HostBinding,
args: ['attr.aria-modal']
}], ariaRole: [{
type: HostBinding,
args: ['attr.role']
}], label: [{
type: Input,
args: ['aria-labelledby']
}], ariaLabelledBy: [{
type: HostBinding,
args: ['attr.aria-labelledby']
}], descriptionLabel: [{
type: Input,
args: ['aria-describedby']
}], ariaDescribedBy: [{
type: HostBinding,
args: ['attr.aria-describedby']
}], class: [{
type: Input
}], hostClass: [{
type: HostBinding,
args: ['class']
}] } });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGlhbG9nLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvbm92YS1saWIvc3JjL2xpYi9kaWFsb2cvZGlhbG9nLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvbm92YS1saWIvc3JjL2xpYi9kaWFsb2cvZGlhbG9nLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7SUFlSTtBQUNKLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLFNBQVMsRUFBRSxXQUFXLEVBQUUsS0FBSyxFQUFVLE1BQU0sZUFBZSxDQUFDO0FBQ3RFLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUNsRSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDdkQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLDhCQUE4QixDQUFDOzs7O0FBUTNELE1BQU0sT0FBTyxlQUFlO0lBUzFCLElBQ0ksTUFBTTtRQUNSLE9BQU8sSUFBSSxDQUFDLEVBQUUsQ0FBQztJQUNqQixDQUFDO0lBRUQ7O09BRUc7SUFDSCxJQUNJLFdBQVc7UUFDYixPQUFPLElBQUksQ0FBQyxZQUFZLENBQUM7SUFDM0IsQ0FBQztJQUNELElBQUksV0FBVyxDQUFDLEtBQUs7UUFDbkIsSUFBSSxDQUFDLFlBQVksR0FBRyxLQUFLLENBQUM7SUFDNUIsQ0FBQztJQUtELElBQ0ksU0FBUztRQUNYLE9BQU8sTUFBTSxDQUFDO0lBQ2hCLENBQUM7SUFDRCxJQUNJLFFBQVE7UUFDVixPQUFPLFFBQVEsQ0FBQztJQUNsQixDQUFDO0lBUUQsSUFDSSxjQUFjO1FBQ2hCLE9BQU8sR0FBRyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7SUFDekIsQ0FBQztJQVFELElBQ0ksZUFBZTtRQUNqQixPQUFPLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7SUFDcEMsQ0FBQztJQVFELElBQ0ksU0FBUztRQUNYLE9BQU87WUFDTCxJQUFJLENBQUMsS0FBSztZQUNWLFVBQVU7WUFDVixJQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxXQUFXLEtBQUssV0FBVyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsa0JBQWtCLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxrQkFBa0I7U0FDakgsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDZCxDQUFDO0lBRUQsWUFBb0IsV0FBd0I7UUFBeEIsZ0JBQVcsR0FBWCxXQUFXLENBQWE7UUFoRHJDLFdBQU0sR0FBRyxLQUFLLENBQUM7SUFnRHlCLENBQUM7SUFFaEQsUUFBUTtRQUNOLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDcEUsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFFLFFBQVEsQ0FBQztRQUMxRCxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEVBQUUsY0FBYyxDQUFDO0lBQ25HLENBQUM7K0dBaEZVLGVBQWU7bUdBQWYsZUFBZSwyZEM3QjVCLG11QkFtQkEsMkNETVksWUFBWSw4QkFBRSxVQUFVLDBMQUFFLGFBQWE7OzRGQUl0QyxlQUFlO2tCQU4zQixTQUFTO2lDQUNJLElBQUksV0FDUCxDQUFDLFlBQVksRUFBRSxVQUFVLEVBQUUsYUFBYSxDQUFDLFlBQ3hDLFlBQVk7Z0ZBV2IsRUFBRTtzQkFBVixLQUFLO2dCQUVGLE1BQU07c0JBRFQsV0FBVzt1QkFBQyxTQUFTO2dCQVNsQixXQUFXO3NCQURkLEtBQUs7Z0JBWUYsU0FBUztzQkFEWixXQUFXO3VCQUFDLGlCQUFpQjtnQkFLMUIsUUFBUTtzQkFEWCxXQUFXO3VCQUFDLFdBQVc7Z0JBVUUsS0FBSztzQkFBOUIsS0FBSzt1QkFBQyxpQkFBaUI7Z0JBRXBCLGNBQWM7c0JBRGpCLFdBQVc7dUJBQUMsc0JBQXNCO2dCQVVSLGdCQUFnQjtzQkFBMUMsS0FBSzt1QkFBQyxrQkFBa0I7Z0JBRXJCLGVBQWU7c0JBRGxCLFdBQVc7dUJBQUMsdUJBQXVCO2dCQVUzQixLQUFLO3NCQUFiLEtBQUs7Z0JBRUYsU0FBUztzQkFEWixXQUFXO3VCQUFDLE9BQU8iLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqICAgICAgICAgICAgICBDb3B5cmlnaHQgKGMpIDIwMjUgVmlzYSwgSW5jLlxuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKlxuICoqL1xuaW1wb3J0IHsgQTExeU1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9hMTF5JztcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBDb21wb25lbnQsIEhvc3RCaW5kaW5nLCBJbnB1dCwgT25Jbml0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBVVUlEU2VydmljZSB9IGZyb20gJy4uL191dGlsaXRpZXMvc2VydmljZXMvdXVpZC5zZXJ2aWNlJztcbmltcG9ydCB7IEZsZXhEaXJlY3RpdmUgfSBmcm9tICcuLi9mbGV4L2ZsZXguZGlyZWN0aXZlJztcbmltcG9ydCB7IE1lc3NhZ2VUeXBlIH0gZnJvbSAnLi4vbWVzc2FnZS9tZXNzYWdlLmNvbnN0YW50cyc7XG5cbkBDb21wb25lbnQoe1xuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlLCBBMTF5TW9kdWxlLCBGbGV4RGlyZWN0aXZlXSxcbiAgc2VsZWN0b3I6ICdbdi1kaWFsb2ddJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2RpYWxvZy5jb21wb25lbnQuaHRtbCdcbn0pXG5leHBvcnQgY2xhc3MgRGlhbG9nQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcbiAgZGlhbG9nRWxlbWVudDogSFRNTERpYWxvZ0VsZW1lbnQ7XG5cbiAgLyoqXG4gICAqIFNldHMgY3VzdG9tIGlkLlxuICAgKiBAZGVmYXVsdCB1dWlkU2VydmljZS5nZXRVVUlEKCd2LWRpYWxvZy0nKVxuICAgKiBAYnVpbHRpbiB0cnVlXG4gICAqL1xuICBASW5wdXQoKSBpZDogc3RyaW5nO1xuICBASG9zdEJpbmRpbmcoJ2F0dHIuaWQnKVxuICBnZXQgaG9zdElkKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuaWQ7XG4gIH1cblxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgQElucHV0KClcbiAgZ2V0IG1lc3NhZ2VUeXBlKCkge1xuICAgIHJldHVybiB0aGlzLl9tZXNzYWdlVHlwZTtcbiAgfVxuICBzZXQgbWVzc2FnZVR5cGUodmFsdWUpIHtcbiAgICB0aGlzLl9tZXNzYWdlVHlwZSA9IHZhbHVlO1xuICB9XG4gIF9tZXNzYWdlVHlwZTogc3RyaW5nO1xuXG4gIHB1YmxpYyBpc09wZW4gPSBmYWxzZTtcblxuICBASG9zdEJpbmRpbmcoJ2F0dHIuYXJpYS1tb2RhbCcpXG4gIGdldCBhcmlhTW9kYWwoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gJ3RydWUnO1xuICB9XG4gIEBIb3N0QmluZGluZygnYXR0ci5yb2xlJylcbiAgZ2V0IGFyaWFSb2xlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuICdkaWFsb2cnO1xuICB9XG5cbiAgLyoqXG4gICAqIEFyaWEgYXR0cmlidXRlIHBvaW50aW5nIHRvIGlkIG9mIGxhYmVsbGluZyBlbGVtZW50LlxuICAgKiBAZGVmYXVsdCAnJmx0O3RoaXMuaWQmZ3Q7LXRpdGxlJ1xuICAgKiBAYnVpbHRpbiB0cnVlXG4gICAqL1xuICBASW5wdXQoJ2FyaWEtbGFiZWxsZWRieScpIGxhYmVsOiBzdHJpbmc7XG4gIEBIb3N0QmluZGluZygnYXR0ci5hcmlhLWxhYmVsbGVkYnknKVxuICBnZXQgYXJpYUxhYmVsbGVkQnkoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gYCR7dGhpcy5sYWJlbH1gO1xuICB9XG5cbiAgLyoqXG4gICAqIEFyaWEgYXR0cmlidXRlIHBvaW50aW5nIHRvIGlkIG9mIGRlc2NyaXB0aXZlIGVsZW1lbnQuXG4gICAqIEBkZWZhdWx0ICcmbHQ7dGhpcy5pZCZndDstZGVzY3JpcHRpb24nXG4gICAqIEBidWlsdGluIHRydWVcbiAgICovXG4gIEBJbnB1dCgnYXJpYS1kZXNjcmliZWRieScpIGRlc2NyaXB0aW9uTGFiZWw6IHN0cmluZztcbiAgQEhvc3RCaW5kaW5nKCdhdHRyLmFyaWEtZGVzY3JpYmVkYnknKVxuICBnZXQgYXJpYURlc2NyaWJlZEJ5KCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGAke3RoaXMuZGVzY3JpcHRpb25MYWJlbH1gO1xuICB9XG5cbiAgLyoqXG4gICAqIFByb3ZpZGVzIGN1c3RvbSBjbGFzcyYjNDA7ZXMmIzQxOyBmb3IgY3VzdG9tIHN0eWxpbmcuXG4gICAqIEBkZWZhdWx0IC52LWRpYWxvZ1xuICAgKiBAZGVmYXVsdCAudi1kaWFsb2ctZGVmYXVsdFxuICAgKi9cbiAgQElucHV0KCkgY2xhc3M6IHN0cmluZztcbiAgQEhvc3RCaW5kaW5nKCdjbGFzcycpXG4gIGdldCBob3N0Q2xhc3MoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gW1xuICAgICAgdGhpcy5jbGFzcyxcbiAgICAgICd2LWRpYWxvZycsXG4gICAgICB0aGlzLm1lc3NhZ2VUeXBlID8gKHRoaXMubWVzc2FnZVR5cGUgPT09IE1lc3NhZ2VUeXBlLklORk9STUFUSU9OID8gJ3YtZGlhbG9nLWRlZmF1bHQnIDogJycpIDogJ3YtZGlhbG9nLWRlZmF1bHQnXG4gICAgXS5qb2luKCcgJyk7XG4gIH1cblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHV1aWRTZXJ2aWNlOiBVVUlEU2VydmljZSkge31cblxuICBuZ09uSW5pdCgpIHtcbiAgICB0aGlzLmlkID0gdGhpcy5pZCA/IHRoaXMuaWQgOiB0aGlzLnV1aWRTZXJ2aWNlLmdldFVVSUQoJ3YtZGlhbG9nLScpO1xuICAgIHRoaXMubGFiZWwgPSB0aGlzLmxhYmVsID8gdGhpcy5sYWJlbCA6IGAke3RoaXMuaWR9LXRpdGxlYDtcbiAgICB0aGlzLmRlc2NyaXB0aW9uTGFiZWwgPSB0aGlzLmRlc2NyaXB0aW9uTGFiZWwgPyB0aGlzLmRlc2NyaXB0aW9uTGFiZWwgOiBgJHt0aGlzLmlkfS1kZXNjcmlwdGlvbmA7XG4gIH1cbn1cbiIsIjwhLS1cbiAqICAgICAgICAgICAgICBDb3B5cmlnaHQgKGMpIDIwMjUgVmlzYSwgSW5jLlxuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKlxuIC0tPlxuPGRpdiBjZGtUcmFwRm9jdXMgY2RrVHJhcEZvY3VzQXV0b0NhcHR1cmUgdkZsZXggdkZsZXhSb3c+XG4gIDxuZy1jb250ZW50PjwvbmctY29udGVudD5cbjwvZGl2PlxuIl19