@xmagic/nz-formly
Version:
基于ng-zorro-antd UI 扩展的ngx-formly组件库
177 lines (175 loc) • 19.4 kB
JavaScript
import { ChangeDetectionStrategy, Component, Optional } from '@angular/core';
import { FieldWrapper } from '@ngx-formly/core';
import { hasTplNameValue, resolveTplName } from '@xmagic/nz-formly/common';
import * as i0 from "@angular/core";
import * as i1 from "@xmagic/nz-formly/common";
import * as i2 from "@angular/common";
import * as i3 from "ng-zorro-antd/grid";
import * as i4 from "ng-zorro-antd/form";
import * as i5 from "ng-zorro-antd/core/outlet";
import * as i6 from "@ngx-formly/core";
export class FieldWrapperComponent extends FieldWrapper {
fieldTemplates;
constructor(fieldTemplates) {
super();
this.fieldTemplates = fieldTemplates;
}
get nzTooltipTitle() {
return resolveTplName(this.props, this.fieldTemplates, 'nzTooltipTitle');
}
get nzExtra() {
return resolveTplName(this.props, this.fieldTemplates, 'nzExtra');
}
get hasLabel() {
return hasTplNameValue(this.props, 'label');
}
get label() {
return resolveTplName(this.props, this.fieldTemplates, 'label');
}
get nzSuccessTip() {
return resolveTplName(this.props, this.fieldTemplates, 'nzSuccessTip');
}
get nzValidatingTip() {
return resolveTplName(this.props, this.fieldTemplates, 'nzValidatingTip');
}
get nzWarningTip() {
return resolveTplName(this.props, this.fieldTemplates, 'nzWarningTip');
}
get hasError() {
return (this.formControl?.dirty || this.formControl?.touched) && this.formControl.errors;
}
get validateStatus() {
return this.hasError ? 'error' : this.props.nzValidateStatus;
}
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: FieldWrapperComponent, deps: [{ token: i1.FormlyBoxTemplates, optional: true }], target: i0.ɵɵFactoryTarget.Component });
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: FieldWrapperComponent, selector: "formly-field-wrapper", usesInheritance: true, ngImport: i0, template: `
<nz-form-item [class]="field.className">
<ng-container *ngIf="hasLabel && props.hideLabel !== true">
<nz-form-label
*ngIf="hasLabel"
[ngClass]="props.labelClass || formState.labelClass"
[nzRequired]="props.required && props.hideRequiredMarker !== true"
[nzFor]="id"
[nzTooltipTitle]="nzTooltipTitle"
[nzTooltipIcon]="props.nzTooltipIcon"
[nzSpan]="props.labelNzSpan || formState.labelNzSpan"
[nzNoColon]="props.nzNoColon || formState.nzNoColon"
[nzFlex]="props.labelNzFlex || formState.labelNzFlex"
[nzLg]="props.labelNzLg || formState.labelNzLg"
[nzMd]="props.labelNzMd || formState.labelNzMd"
[nzOffset]="props.labelNzOffset || formState.labelNzOffset"
[nzOrder]="props.labelNzOrder || formState.labelNzOrder"
[nzPull]="props.labelNzPull || formState.labelNzPull"
[nzPush]="props.labelNzPush || formState.labelNzPush"
[nzSm]="props.labelNzSm || formState.labelNzSm"
[nzXl]="props.labelNzXl || formState.labelNzXl"
[nzXs]="props.labelNzXs || formState.labelNzXs"
[nzXXl]="props.labelNzXXl || formState.labelNzXXl"
>
<ng-container *nzStringTemplateOutlet="label; context: { $implicit: field, options: props }">
<div [innerHTML]="label"></div>
</ng-container>
</nz-form-label>
</ng-container>
<nz-form-control
[ngClass]="props.controlClass || formState.controlClass"
[nzValidateStatus]="validateStatus"
[nzErrorTip]="errorTip"
[nzAutoTips]="props.nzAutoTips || formState.nzAutoTips"
[nzHasFeedback]="props.nzHasFeedback || formState.nzHasFeedback"
[nzSuccessTip]="nzSuccessTip || formState.nzSuccessTip"
[nzValidatingTip]="nzValidatingTip || formState.nzValidatingTip"
[nzWarningTip]="nzWarningTip || formState.nzWarningTip"
[nzDisableAutoTips]="props.nzDisableAutoTips || formState.nzDisableAutoTips"
[nzExtra]="props.description || nzExtra"
[nzSpan]="props.controlNzSpan || formState.controlNzSpan"
[nzFlex]="props.controlNzFlex || formState.controlNzFlex"
[nzLg]="props.controlNzLg || formState.controlNzLg"
[nzMd]="props.controlNzMd || formState.controlNzMd"
[nzOffset]="props.controlNzOffset || formState.controlNzOffset"
[nzOrder]="props.controlNzOrder || formState.controlNzOrder"
[nzPull]="props.controlNzPull || formState.controlNzPull"
[nzPush]="props.controlNzPush || formState.controlNzPush"
[nzSm]="props.controlNzSm || formState.controlNzSm"
[nzXl]="props.controlNzXl || formState.controlNzXl"
[nzXs]="props.controlNzXs || formState.controlNzXs"
[nzXXl]="props.controlNzXXl || formState.controlNzXXl"
>
<ng-container #fieldComponent></ng-container>
<ng-template #errorTip>
<formly-validation-message *ngIf="hasError" [field]="field"></formly-validation-message>
</ng-template>
</nz-form-control>
</nz-form-item>
`, isInline: true, dependencies: [{ kind: "directive", type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.NzColDirective, selector: "[nz-col],nz-col,nz-form-control,nz-form-label", inputs: ["nzFlex", "nzSpan", "nzOrder", "nzOffset", "nzPush", "nzPull", "nzXs", "nzSm", "nzMd", "nzLg", "nzXl", "nzXXl"], exportAs: ["nzCol"] }, { kind: "directive", type: i3.NzRowDirective, selector: "[nz-row],nz-row,nz-form-item", inputs: ["nzAlign", "nzJustify", "nzGutter"], exportAs: ["nzRow"] }, { kind: "component", type: i4.NzFormItemComponent, selector: "nz-form-item", exportAs: ["nzFormItem"] }, { kind: "component", type: i4.NzFormLabelComponent, selector: "nz-form-label", inputs: ["nzFor", "nzRequired", "nzNoColon", "nzTooltipTitle", "nzTooltipIcon", "nzLabelAlign", "nzLabelWrap"], exportAs: ["nzFormLabel"] }, { kind: "component", type: i4.NzFormControlComponent, selector: "nz-form-control", inputs: ["nzSuccessTip", "nzWarningTip", "nzErrorTip", "nzValidatingTip", "nzExtra", "nzAutoTips", "nzDisableAutoTips", "nzHasFeedback", "nzValidateStatus"], exportAs: ["nzFormControl"] }, { kind: "directive", type: i5.NzStringTemplateOutletDirective, selector: "[nzStringTemplateOutlet]", inputs: ["nzStringTemplateOutletContext", "nzStringTemplateOutlet"], exportAs: ["nzStringTemplateOutlet"] }, { kind: "component", type: i6.ɵFormlyValidationMessage, selector: "formly-validation-message", inputs: ["field"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
}
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: FieldWrapperComponent, decorators: [{
type: Component,
args: [{
selector: 'formly-field-wrapper',
template: `
<nz-form-item [class]="field.className">
<ng-container *ngIf="hasLabel && props.hideLabel !== true">
<nz-form-label
*ngIf="hasLabel"
[ngClass]="props.labelClass || formState.labelClass"
[nzRequired]="props.required && props.hideRequiredMarker !== true"
[nzFor]="id"
[nzTooltipTitle]="nzTooltipTitle"
[nzTooltipIcon]="props.nzTooltipIcon"
[nzSpan]="props.labelNzSpan || formState.labelNzSpan"
[nzNoColon]="props.nzNoColon || formState.nzNoColon"
[nzFlex]="props.labelNzFlex || formState.labelNzFlex"
[nzLg]="props.labelNzLg || formState.labelNzLg"
[nzMd]="props.labelNzMd || formState.labelNzMd"
[nzOffset]="props.labelNzOffset || formState.labelNzOffset"
[nzOrder]="props.labelNzOrder || formState.labelNzOrder"
[nzPull]="props.labelNzPull || formState.labelNzPull"
[nzPush]="props.labelNzPush || formState.labelNzPush"
[nzSm]="props.labelNzSm || formState.labelNzSm"
[nzXl]="props.labelNzXl || formState.labelNzXl"
[nzXs]="props.labelNzXs || formState.labelNzXs"
[nzXXl]="props.labelNzXXl || formState.labelNzXXl"
>
<ng-container *nzStringTemplateOutlet="label; context: { $implicit: field, options: props }">
<div [innerHTML]="label"></div>
</ng-container>
</nz-form-label>
</ng-container>
<nz-form-control
[ngClass]="props.controlClass || formState.controlClass"
[nzValidateStatus]="validateStatus"
[nzErrorTip]="errorTip"
[nzAutoTips]="props.nzAutoTips || formState.nzAutoTips"
[nzHasFeedback]="props.nzHasFeedback || formState.nzHasFeedback"
[nzSuccessTip]="nzSuccessTip || formState.nzSuccessTip"
[nzValidatingTip]="nzValidatingTip || formState.nzValidatingTip"
[nzWarningTip]="nzWarningTip || formState.nzWarningTip"
[nzDisableAutoTips]="props.nzDisableAutoTips || formState.nzDisableAutoTips"
[nzExtra]="props.description || nzExtra"
[nzSpan]="props.controlNzSpan || formState.controlNzSpan"
[nzFlex]="props.controlNzFlex || formState.controlNzFlex"
[nzLg]="props.controlNzLg || formState.controlNzLg"
[nzMd]="props.controlNzMd || formState.controlNzMd"
[nzOffset]="props.controlNzOffset || formState.controlNzOffset"
[nzOrder]="props.controlNzOrder || formState.controlNzOrder"
[nzPull]="props.controlNzPull || formState.controlNzPull"
[nzPush]="props.controlNzPush || formState.controlNzPush"
[nzSm]="props.controlNzSm || formState.controlNzSm"
[nzXl]="props.controlNzXl || formState.controlNzXl"
[nzXs]="props.controlNzXs || formState.controlNzXs"
[nzXXl]="props.controlNzXXl || formState.controlNzXXl"
>
<ng-container #fieldComponent></ng-container>
<ng-template #errorTip>
<formly-validation-message *ngIf="hasError" [field]="field"></formly-validation-message>
</ng-template>
</nz-form-control>
</nz-form-item>
`,
changeDetection: ChangeDetectionStrategy.OnPush
}]
}], ctorParameters: () => [{ type: i1.FormlyBoxTemplates, decorators: [{
type: Optional
}] }] });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmllbGQtd3JhcHBlci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9saWIvZmllbGQtd3JhcHBlci9maWVsZC13cmFwcGVyLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUM3RSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDaEQsT0FBTyxFQUFzQixlQUFlLEVBQUUsY0FBYyxFQUFFLE1BQU0sMEJBQTBCLENBQUM7Ozs7Ozs7O0FBbUUvRixNQUFNLE9BQU8scUJBQXNCLFNBQVEsWUFBWTtJQUN0QjtJQUEvQixZQUErQixjQUFrQztRQUMvRCxLQUFLLEVBQUUsQ0FBQztRQURxQixtQkFBYyxHQUFkLGNBQWMsQ0FBb0I7SUFFakUsQ0FBQztJQUNELElBQUksY0FBYztRQUNoQixPQUFPLGNBQWMsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxjQUFjLEVBQUUsZ0JBQWdCLENBQUMsQ0FBQztJQUMzRSxDQUFDO0lBQ0QsSUFBSSxPQUFPO1FBQ1QsT0FBTyxjQUFjLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsY0FBYyxFQUFFLFNBQVMsQ0FBQyxDQUFDO0lBQ3BFLENBQUM7SUFFRCxJQUFJLFFBQVE7UUFDVixPQUFPLGVBQWUsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBQzlDLENBQUM7SUFFRCxJQUFJLEtBQUs7UUFDUCxPQUFPLGNBQWMsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxjQUFjLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFDbEUsQ0FBQztJQUNELElBQUksWUFBWTtRQUNkLE9BQU8sY0FBYyxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLGNBQWMsRUFBRSxjQUFjLENBQUMsQ0FBQztJQUN6RSxDQUFDO0lBQ0QsSUFBSSxlQUFlO1FBQ2pCLE9BQU8sY0FBYyxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLGNBQWMsRUFBRSxpQkFBaUIsQ0FBQyxDQUFDO0lBQzVFLENBQUM7SUFDRCxJQUFJLFlBQVk7UUFDZCxPQUFPLGNBQWMsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxjQUFjLEVBQUUsY0FBYyxDQUFDLENBQUM7SUFDekUsQ0FBQztJQUVELElBQUksUUFBUTtRQUNWLE9BQU8sQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLEtBQUssSUFBSSxJQUFJLENBQUMsV0FBVyxFQUFFLE9BQU8sQ0FBQyxJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDO0lBQzNGLENBQUM7SUFFRCxJQUFJLGNBQWM7UUFDaEIsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsZ0JBQWdCLENBQUM7SUFDL0QsQ0FBQzt3R0FsQ1UscUJBQXFCOzRGQUFyQixxQkFBcUIsbUZBL0R0Qjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBNERUOzs0RkFHVSxxQkFBcUI7a0JBakVqQyxTQUFTO21CQUFDO29CQUNULFFBQVEsRUFBRSxzQkFBc0I7b0JBQ2hDLFFBQVEsRUFBRTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBNERUO29CQUNELGVBQWUsRUFBRSx1QkFBdUIsQ0FBQyxNQUFNO2lCQUNoRDs7MEJBRWMsUUFBUSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDb21wb25lbnQsIE9wdGlvbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEZpZWxkV3JhcHBlciB9IGZyb20gJ0BuZ3gtZm9ybWx5L2NvcmUnO1xyXG5pbXBvcnQgeyBGb3JtbHlCb3hUZW1wbGF0ZXMsIGhhc1RwbE5hbWVWYWx1ZSwgcmVzb2x2ZVRwbE5hbWUgfSBmcm9tICdAeG1hZ2ljL256LWZvcm1seS9jb21tb24nO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdmb3JtbHktZmllbGQtd3JhcHBlcicsXHJcbiAgdGVtcGxhdGU6IGBcclxuICAgIDxuei1mb3JtLWl0ZW0gW2NsYXNzXT1cImZpZWxkLmNsYXNzTmFtZVwiPlxyXG4gICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiaGFzTGFiZWwgJiYgcHJvcHMuaGlkZUxhYmVsICE9PSB0cnVlXCI+XHJcbiAgICAgICAgPG56LWZvcm0tbGFiZWxcclxuICAgICAgICAgICpuZ0lmPVwiaGFzTGFiZWxcIlxyXG4gICAgICAgICAgW25nQ2xhc3NdPVwicHJvcHMubGFiZWxDbGFzcyB8fCBmb3JtU3RhdGUubGFiZWxDbGFzc1wiXHJcbiAgICAgICAgICBbbnpSZXF1aXJlZF09XCJwcm9wcy5yZXF1aXJlZCAmJiBwcm9wcy5oaWRlUmVxdWlyZWRNYXJrZXIgIT09IHRydWVcIlxyXG4gICAgICAgICAgW256Rm9yXT1cImlkXCJcclxuICAgICAgICAgIFtuelRvb2x0aXBUaXRsZV09XCJuelRvb2x0aXBUaXRsZVwiXHJcbiAgICAgICAgICBbbnpUb29sdGlwSWNvbl09XCJwcm9wcy5uelRvb2x0aXBJY29uXCJcclxuICAgICAgICAgIFtuelNwYW5dPVwicHJvcHMubGFiZWxOelNwYW4gfHwgZm9ybVN0YXRlLmxhYmVsTnpTcGFuXCJcclxuICAgICAgICAgIFtuek5vQ29sb25dPVwicHJvcHMubnpOb0NvbG9uIHx8IGZvcm1TdGF0ZS5uek5vQ29sb25cIlxyXG4gICAgICAgICAgW256RmxleF09XCJwcm9wcy5sYWJlbE56RmxleCB8fCBmb3JtU3RhdGUubGFiZWxOekZsZXhcIlxyXG4gICAgICAgICAgW256TGddPVwicHJvcHMubGFiZWxOekxnIHx8IGZvcm1TdGF0ZS5sYWJlbE56TGdcIlxyXG4gICAgICAgICAgW256TWRdPVwicHJvcHMubGFiZWxOek1kIHx8IGZvcm1TdGF0ZS5sYWJlbE56TWRcIlxyXG4gICAgICAgICAgW256T2Zmc2V0XT1cInByb3BzLmxhYmVsTnpPZmZzZXQgfHwgZm9ybVN0YXRlLmxhYmVsTnpPZmZzZXRcIlxyXG4gICAgICAgICAgW256T3JkZXJdPVwicHJvcHMubGFiZWxOek9yZGVyIHx8IGZvcm1TdGF0ZS5sYWJlbE56T3JkZXJcIlxyXG4gICAgICAgICAgW256UHVsbF09XCJwcm9wcy5sYWJlbE56UHVsbCB8fCBmb3JtU3RhdGUubGFiZWxOelB1bGxcIlxyXG4gICAgICAgICAgW256UHVzaF09XCJwcm9wcy5sYWJlbE56UHVzaCB8fCBmb3JtU3RhdGUubGFiZWxOelB1c2hcIlxyXG4gICAgICAgICAgW256U21dPVwicHJvcHMubGFiZWxOelNtIHx8IGZvcm1TdGF0ZS5sYWJlbE56U21cIlxyXG4gICAgICAgICAgW256WGxdPVwicHJvcHMubGFiZWxOelhsIHx8IGZvcm1TdGF0ZS5sYWJlbE56WGxcIlxyXG4gICAgICAgICAgW256WHNdPVwicHJvcHMubGFiZWxOelhzIHx8IGZvcm1TdGF0ZS5sYWJlbE56WHNcIlxyXG4gICAgICAgICAgW256WFhsXT1cInByb3BzLmxhYmVsTnpYWGwgfHwgZm9ybVN0YXRlLmxhYmVsTnpYWGxcIlxyXG4gICAgICAgID5cclxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm56U3RyaW5nVGVtcGxhdGVPdXRsZXQ9XCJsYWJlbDsgY29udGV4dDogeyAkaW1wbGljaXQ6IGZpZWxkLCBvcHRpb25zOiBwcm9wcyB9XCI+XHJcbiAgICAgICAgICAgIDxkaXYgW2lubmVySFRNTF09XCJsYWJlbFwiPjwvZGl2PlxyXG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgPC9uei1mb3JtLWxhYmVsPlxyXG4gICAgICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgICAgIDxuei1mb3JtLWNvbnRyb2xcclxuICAgICAgICBbbmdDbGFzc109XCJwcm9wcy5jb250cm9sQ2xhc3MgfHwgZm9ybVN0YXRlLmNvbnRyb2xDbGFzc1wiXHJcbiAgICAgICAgW256VmFsaWRhdGVTdGF0dXNdPVwidmFsaWRhdGVTdGF0dXNcIlxyXG4gICAgICAgIFtuekVycm9yVGlwXT1cImVycm9yVGlwXCJcclxuICAgICAgICBbbnpBdXRvVGlwc109XCJwcm9wcy5uekF1dG9UaXBzIHx8IGZvcm1TdGF0ZS5uekF1dG9UaXBzXCJcclxuICAgICAgICBbbnpIYXNGZWVkYmFja109XCJwcm9wcy5uekhhc0ZlZWRiYWNrIHx8IGZvcm1TdGF0ZS5uekhhc0ZlZWRiYWNrXCJcclxuICAgICAgICBbbnpTdWNjZXNzVGlwXT1cIm56U3VjY2Vzc1RpcCB8fCBmb3JtU3RhdGUubnpTdWNjZXNzVGlwXCJcclxuICAgICAgICBbbnpWYWxpZGF0aW5nVGlwXT1cIm56VmFsaWRhdGluZ1RpcCB8fCBmb3JtU3RhdGUubnpWYWxpZGF0aW5nVGlwXCJcclxuICAgICAgICBbbnpXYXJuaW5nVGlwXT1cIm56V2FybmluZ1RpcCB8fCBmb3JtU3RhdGUubnpXYXJuaW5nVGlwXCJcclxuICAgICAgICBbbnpEaXNhYmxlQXV0b1RpcHNdPVwicHJvcHMubnpEaXNhYmxlQXV0b1RpcHMgfHwgZm9ybVN0YXRlLm56RGlzYWJsZUF1dG9UaXBzXCJcclxuICAgICAgICBbbnpFeHRyYV09XCJwcm9wcy5kZXNjcmlwdGlvbiB8fCBuekV4dHJhXCJcclxuICAgICAgICBbbnpTcGFuXT1cInByb3BzLmNvbnRyb2xOelNwYW4gfHwgZm9ybVN0YXRlLmNvbnRyb2xOelNwYW5cIlxyXG4gICAgICAgIFtuekZsZXhdPVwicHJvcHMuY29udHJvbE56RmxleCB8fCBmb3JtU3RhdGUuY29udHJvbE56RmxleFwiXHJcbiAgICAgICAgW256TGddPVwicHJvcHMuY29udHJvbE56TGcgfHwgZm9ybVN0YXRlLmNvbnRyb2xOekxnXCJcclxuICAgICAgICBbbnpNZF09XCJwcm9wcy5jb250cm9sTnpNZCB8fCBmb3JtU3RhdGUuY29udHJvbE56TWRcIlxyXG4gICAgICAgIFtuek9mZnNldF09XCJwcm9wcy5jb250cm9sTnpPZmZzZXQgfHwgZm9ybVN0YXRlLmNvbnRyb2xOek9mZnNldFwiXHJcbiAgICAgICAgW256T3JkZXJdPVwicHJvcHMuY29udHJvbE56T3JkZXIgfHwgZm9ybVN0YXRlLmNvbnRyb2xOek9yZGVyXCJcclxuICAgICAgICBbbnpQdWxsXT1cInByb3BzLmNvbnRyb2xOelB1bGwgfHwgZm9ybVN0YXRlLmNvbnRyb2xOelB1bGxcIlxyXG4gICAgICAgIFtuelB1c2hdPVwicHJvcHMuY29udHJvbE56UHVzaCB8fCBmb3JtU3RhdGUuY29udHJvbE56UHVzaFwiXHJcbiAgICAgICAgW256U21dPVwicHJvcHMuY29udHJvbE56U20gfHwgZm9ybVN0YXRlLmNvbnRyb2xOelNtXCJcclxuICAgICAgICBbbnpYbF09XCJwcm9wcy5jb250cm9sTnpYbCB8fCBmb3JtU3RhdGUuY29udHJvbE56WGxcIlxyXG4gICAgICAgIFtuelhzXT1cInByb3BzLmNvbnRyb2xOelhzIHx8IGZvcm1TdGF0ZS5jb250cm9sTnpYc1wiXHJcbiAgICAgICAgW256WFhsXT1cInByb3BzLmNvbnRyb2xOelhYbCB8fCBmb3JtU3RhdGUuY29udHJvbE56WFhsXCJcclxuICAgICAgPlxyXG4gICAgICAgIDxuZy1jb250YWluZXIgI2ZpZWxkQ29tcG9uZW50PjwvbmctY29udGFpbmVyPlxyXG4gICAgICAgIDxuZy10ZW1wbGF0ZSAjZXJyb3JUaXA+XHJcbiAgICAgICAgICA8Zm9ybWx5LXZhbGlkYXRpb24tbWVzc2FnZSAqbmdJZj1cImhhc0Vycm9yXCIgW2ZpZWxkXT1cImZpZWxkXCI+PC9mb3JtbHktdmFsaWRhdGlvbi1tZXNzYWdlPlxyXG4gICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgIDwvbnotZm9ybS1jb250cm9sPlxyXG4gICAgPC9uei1mb3JtLWl0ZW0+XHJcbiAgYCxcclxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaFxyXG59KVxyXG5leHBvcnQgY2xhc3MgRmllbGRXcmFwcGVyQ29tcG9uZW50IGV4dGVuZHMgRmllbGRXcmFwcGVyIHtcclxuICBjb25zdHJ1Y3RvcihAT3B0aW9uYWwoKSBwdWJsaWMgZmllbGRUZW1wbGF0ZXM6IEZvcm1seUJveFRlbXBsYXRlcykge1xyXG4gICAgc3VwZXIoKTtcclxuICB9XHJcbiAgZ2V0IG56VG9vbHRpcFRpdGxlKCkge1xyXG4gICAgcmV0dXJuIHJlc29sdmVUcGxOYW1lKHRoaXMucHJvcHMsIHRoaXMuZmllbGRUZW1wbGF0ZXMsICduelRvb2x0aXBUaXRsZScpO1xyXG4gIH1cclxuICBnZXQgbnpFeHRyYSgpIHtcclxuICAgIHJldHVybiByZXNvbHZlVHBsTmFtZSh0aGlzLnByb3BzLCB0aGlzLmZpZWxkVGVtcGxhdGVzLCAnbnpFeHRyYScpO1xyXG4gIH1cclxuXHJcbiAgZ2V0IGhhc0xhYmVsKCkge1xyXG4gICAgcmV0dXJuIGhhc1RwbE5hbWVWYWx1ZSh0aGlzLnByb3BzLCAnbGFiZWwnKTtcclxuICB9XHJcblxyXG4gIGdldCBsYWJlbCgpIHtcclxuICAgIHJldHVybiByZXNvbHZlVHBsTmFtZSh0aGlzLnByb3BzLCB0aGlzLmZpZWxkVGVtcGxhdGVzLCAnbGFiZWwnKTtcclxuICB9XHJcbiAgZ2V0IG56U3VjY2Vzc1RpcCgpIHtcclxuICAgIHJldHVybiByZXNvbHZlVHBsTmFtZSh0aGlzLnByb3BzLCB0aGlzLmZpZWxkVGVtcGxhdGVzLCAnbnpTdWNjZXNzVGlwJyk7XHJcbiAgfVxyXG4gIGdldCBuelZhbGlkYXRpbmdUaXAoKSB7XHJcbiAgICByZXR1cm4gcmVzb2x2ZVRwbE5hbWUodGhpcy5wcm9wcywgdGhpcy5maWVsZFRlbXBsYXRlcywgJ256VmFsaWRhdGluZ1RpcCcpO1xyXG4gIH1cclxuICBnZXQgbnpXYXJuaW5nVGlwKCkge1xyXG4gICAgcmV0dXJuIHJlc29sdmVUcGxOYW1lKHRoaXMucHJvcHMsIHRoaXMuZmllbGRUZW1wbGF0ZXMsICdueldhcm5pbmdUaXAnKTtcclxuICB9XHJcblxyXG4gIGdldCBoYXNFcnJvcigpIHtcclxuICAgIHJldHVybiAodGhpcy5mb3JtQ29udHJvbD8uZGlydHkgfHwgdGhpcy5mb3JtQ29udHJvbD8udG91Y2hlZCkgJiYgdGhpcy5mb3JtQ29udHJvbC5lcnJvcnM7XHJcbiAgfVxyXG5cclxuICBnZXQgdmFsaWRhdGVTdGF0dXMoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5oYXNFcnJvciA/ICdlcnJvcicgOiB0aGlzLnByb3BzLm56VmFsaWRhdGVTdGF0dXM7XHJcbiAgfVxyXG59XHJcbiJdfQ==