@yoyoboot/l-52abp-ng-form-generator
Version:
This library was generated with [Angular CLI](https://github.com/angular/angular-cli) version 12.2.0.
142 lines • 21.1 kB
JavaScript
import { Component, EventEmitter, Input, Output, ViewChild } from '@angular/core';
import { RWidgetFormRenderBase } from '../common-component/r-widget-form-render-base';
import * as i0 from "@angular/core";
import * as i1 from "@angular/forms";
import * as i2 from "./r-widget-form.service";
import * as i3 from "../common-component/r-widget-form-render/r-widget-form-render.component";
import * as i4 from "../common-component/r-widget-button/r-widget-button.component";
import * as i5 from "ng-zorro-antd/grid";
import * as i6 from "ng-zorro-antd/form";
import * as i7 from "@angular/common";
export class RWidgetFormComponent extends RWidgetFormRenderBase {
constructor(cdr, fb, _rWidgetFormService, zone) {
super();
this.cdr = cdr;
this.fb = fb;
this._rWidgetFormService = _rWidgetFormService;
this.zone = zone;
this.inputs = [];
/** 表单提交 */
this.submitForm = new EventEmitter();
/** 表单重置 */
this.resetForm = new EventEmitter();
/** 是否显示默认按钮 */
this.showButton = true;
this.formId = 'formId' + Math.random().toString(36).substr(3, 16) + new Date().getTime();
this.inputsSubscribe = this._rWidgetFormService.inputsSubject.subscribe(res => {
let _this = this;
let input = res;
/**
* 注册formControl 以及 默认值赋值
*/
if (input && input.ngModel && this.validateForm) {
if (input.data.formId === this.formId) {
this.inputs.push(input.ngModel);
this.validateForm.addControl(input.ngModel);
}
}
/**
* disabled状态添加
*/
setTimeout(() => {
console.log(this.validateForm.form, this.formId, 'inputsSubscribe');
if (_this.validateForm && _this.validateForm.form) {
_this.validateForm.form.patchValue(_this.formData);
if (_this.disabled) {
input.config.disabled = true;
}
else {
input.config.disabled = false;
}
}
}, 100);
});
}
ngOnInit() { }
ngAfterViewInit() {
console.log(this.formData, 'formData');
this.importJsonFun();
}
ngOnChanges(changes) {
if (changes.previewJson) {
this.importJsonFun();
}
}
/** 导入原始json面板 */
importJsonFun() {
this.inputs.map(dir => {
this.validateForm.removeControl(dir);
});
this.rootComponent = null;
try {
const component = JSON.parse(this.previewJson);
if (component) {
this.setFormId([component]);
this.rootComponent = JSON.parse(JSON.stringify(component, null, '\t'));
}
}
catch (_a) { }
}
setFormId(list) {
if (list.length) {
list.map(item => {
item.formId = this.formId;
if (item.children.length) {
this.setFormId(item.children);
}
});
}
}
_submitForm() {
for (const key in this.validateForm.form.controls) {
this.validateForm.form.controls[key].markAsDirty();
this.validateForm.form.controls[key].updateValueAndValidity();
}
if (this.validateForm.valid) {
this.submitForm.emit(this.validateForm.form.value);
}
}
_resetForm() {
this.validateForm.resetForm();
this.resetForm.emit();
}
/**
* 组件销毁时解除订阅,重置form
*/
ngOnDestroy() {
this.rootComponent = null;
this.inputs.map(dir => {
this.validateForm.removeControl(dir);
});
this.inputs = [];
this.inputsSubscribe.unsubscribe();
}
}
RWidgetFormComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.13", ngImport: i0, type: RWidgetFormComponent, deps: [{ token: i0.ChangeDetectorRef }, { token: i1.FormBuilder }, { token: i2.RWidgetFormService }, { token: i0.NgZone }], target: i0.ɵɵFactoryTarget.Component });
RWidgetFormComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.13", type: RWidgetFormComponent, selector: "r-widget-form", inputs: { previewJson: "previewJson", formData: "formData", showButton: "showButton", disabled: "disabled" }, outputs: { submitForm: "submitForm", resetForm: "resetForm" }, host: { properties: { "class.r-widget-form": "true" } }, viewQueries: [{ propertyName: "validateForm", first: true, predicate: ["validateForm"], descendants: true }], usesInheritance: true, usesOnChanges: true, ngImport: i0, template: "<!-- \u6E32\u67D3 -->\n<form #validateForm=\"ngForm\" nz-row nz-form [ngClass]=\"{ formBordered: !!rootComponent && !!rootComponent.bordered }\">\n <div class=\"widget-form-list\" style=\"width: 100%\" *ngIf=\"rootComponent && rootComponent.children\">\n <ng-container *ngFor=\"let subComponent of rootComponent.children; let i = index\">\n <div\n nz-col\n [nzMd]=\"subComponent.span || 12\"\n [nzXs]=\"24\"\n [nzOffset]=\"subComponent.offset || 0\"\n class=\"widget-form-list-item\"\n [attr.data-id]=\"subComponent.id\"\n [attr.id]=\"'widget-' + subComponent.id\"\n style=\"display: inline-block; width: 100%; float: left\"\n >\n <div>\n <r-widget-form-render [parentComponent]=\"rootComponent\" [component]=\"subComponent\"> </r-widget-form-render>\n </div>\n </div>\n </ng-container>\n </div>\n <div *ngIf=\"showButton\">\n <r-widget-button (resetForm)=\"_resetForm()\" (submitForm)=\"_submitForm()\"></r-widget-button>\n </div>\n</form>\n", components: [{ type: i3.RWidgetFormRenderComponent, selector: "[r-widget-form-render],r-widget-form-render", inputs: ["parentComponent", "component", "disabled", "showButton"] }, { type: i4.RWidgetButtonComponent, selector: "r-widget-button,[r-widget-button]", outputs: ["submitForm", "resetForm"] }], directives: [{ type: i1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { type: i1.NgForm, selector: "form:not([ngNoForm]):not([formGroup]),ng-form,[ngForm]", inputs: ["ngFormOptions"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { type: i5.NzRowDirective, selector: "[nz-row],nz-row,nz-form-item", inputs: ["nzAlign", "nzJustify", "nzGutter"], exportAs: ["nzRow"] }, { type: i6.NzFormDirective, selector: "[nz-form]", inputs: ["nzLayout", "nzNoColon", "nzAutoTips", "nzDisableAutoTips", "nzTooltipIcon"], exportAs: ["nzForm"] }, { type: i7.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i7.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i7.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i5.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"] }] });
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.13", ngImport: i0, type: RWidgetFormComponent, decorators: [{
type: Component,
args: [{
selector: 'r-widget-form',
templateUrl: './r-widget-form.component.html',
host: {
'[class.r-widget-form]': 'true'
}
}]
}], ctorParameters: function () { return [{ type: i0.ChangeDetectorRef }, { type: i1.FormBuilder }, { type: i2.RWidgetFormService }, { type: i0.NgZone }]; }, propDecorators: { validateForm: [{
type: ViewChild,
args: ['validateForm', { static: false }]
}], previewJson: [{
type: Input
}], submitForm: [{
type: Output
}], resetForm: [{
type: Output
}], formData: [{
type: Input
}], showButton: [{
type: Input
}], disabled: [{
type: Input
}] } });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoici13aWRnZXQtZm9ybS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9sLTUyYWJwLW5nLWZvcm0tZ2VuZXJhdG9yL3NyYy9mb3JtLXJlbmRlci9yLXdpZGdldC1mb3JtL3Itd2lkZ2V0LWZvcm0uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbC01MmFicC1uZy1mb3JtLWdlbmVyYXRvci9zcmMvZm9ybS1yZW5kZXIvci13aWRnZXQtZm9ybS9yLXdpZGdldC1mb3JtLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFHTCxTQUFTLEVBRVQsWUFBWSxFQUNaLEtBQUssRUFLTCxNQUFNLEVBR04sU0FBUyxFQUVWLE1BQU0sZUFBZSxDQUFDO0FBSXZCLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLCtDQUErQyxDQUFDOzs7Ozs7Ozs7QUFZdEYsTUFBTSxPQUFPLG9CQUFxQixTQUFRLHFCQUFxQjtJQXlCN0QsWUFDVSxHQUFzQixFQUN0QixFQUFlLEVBQ2YsbUJBQXVDLEVBQ3ZDLElBQVk7UUFFcEIsS0FBSyxFQUFFLENBQUM7UUFMQSxRQUFHLEdBQUgsR0FBRyxDQUFtQjtRQUN0QixPQUFFLEdBQUYsRUFBRSxDQUFhO1FBQ2Ysd0JBQW1CLEdBQW5CLG1CQUFtQixDQUFvQjtRQUN2QyxTQUFJLEdBQUosSUFBSSxDQUFRO1FBNUJ0QixXQUFNLEdBQUcsRUFBRSxDQUFDO1FBU1osV0FBVztRQUNELGVBQVUsR0FBc0IsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUM3RCxXQUFXO1FBQ0QsY0FBUyxHQUFzQixJQUFJLFlBQVksRUFBRSxDQUFDO1FBRzVELGVBQWU7UUFDTixlQUFVLEdBQUcsSUFBSSxDQUFDO1FBSTNCLFdBQU0sR0FBRyxRQUFRLEdBQUcsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FB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QUFvQixxYkNoQ2pDLDJoQ0F3QkE7NEZEUWEsb0JBQW9CO2tCQVBoQyxTQUFTO21CQUFDO29CQUNULFFBQVEsRUFBRSxlQUFlO29CQUN6QixXQUFXLEVBQUUsZ0NBQWdDO29CQUM3QyxJQUFJLEVBQUU7d0JBQ0osdUJBQXVCLEVBQUUsTUFBTTtxQkFDaEM7aUJBQ0Y7d0xBSStDLFlBQVk7c0JBQXpELFNBQVM7dUJBQUMsY0FBYyxFQUFFLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRTtnQkFNbkMsV0FBVztzQkFBbkIsS0FBSztnQkFFSSxVQUFVO3NCQUFuQixNQUFNO2dCQUVHLFNBQVM7c0JBQWxCLE1BQU07Z0JBRUUsUUFBUTtzQkFBaEIsS0FBSztnQkFFRyxVQUFVO3NCQUFsQixLQUFLO2dCQUVHLFFBQVE7c0JBQWhCLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBBZnRlclZpZXdJbml0LFxuICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgQ29tcG9uZW50LFxuICBDb250ZW50Q2hpbGRyZW4sXG4gIEV2ZW50RW1pdHRlcixcbiAgSW5wdXQsXG4gIE5nWm9uZSxcbiAgT25DaGFuZ2VzLFxuICBPbkRlc3Ryb3ksXG4gIE9uSW5pdCxcbiAgT3V0cHV0LFxuICBRdWVyeUxpc3QsXG4gIFNpbXBsZUNoYW5nZXMsXG4gIFZpZXdDaGlsZCxcbiAgVmlld0NoaWxkcmVuXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRm9ybUJ1aWxkZXIsIEZvcm1Db250cm9sLCBGb3JtR3JvdXAsIE5nRm9ybSwgVmFsaWRhdG9ycywgTmdNb2RlbCwgTmdNb2RlbEdyb3VwIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgRXJyb3JEYXRhIH0gZnJvbSAnQGRlbG9uL2Zvcm0nO1xuaW1wb3J0IHsgSUNvbXBvbmVudERlZiB9IGZyb20gJy4uLy4uL3NoYXJlZCc7XG5pbXBvcnQgeyBSV2lkZ2V0Rm9ybVJlbmRlckJhc2UgfSBmcm9tICcuLi9jb21tb24tY29tcG9uZW50L3Itd2lkZ2V0LWZvcm0tcmVuZGVyLWJhc2UnO1xuaW1wb3J0IHsgUlN0cmluZ0NvbXBvbmVudCB9IGZyb20gJy4uL3dpZGdldC1yZW5kZXIvci1zdHJpbmcvci1zdHJpbmcuY29tcG9uZW50JztcbmltcG9ydCB7IFJXaWRnZXRGb3JtU2VydmljZSB9IGZyb20gJy4vci13aWRnZXQtZm9ybS5zZXJ2aWNlJztcbi8vIGltcG9ydCB7IEZvcm1Qcm9wZXJ0eSwgUHJvcGVydHlHcm91cCB9IGZyb20gJy4vbW9kZWwvZm9ybS5wcm9wZXJ0eSc7XG5pbXBvcnQgeyBEaXJlY3RpdmUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3Itd2lkZ2V0LWZvcm0nLFxuICB0ZW1wbGF0ZVVybDogJy4vci13aWRnZXQtZm9ybS5jb21wb25lbnQuaHRtbCcsXG4gIGhvc3Q6IHtcbiAgICAnW2NsYXNzLnItd2lkZ2V0LWZvcm1dJzogJ3RydWUnXG4gIH1cbn0pXG5leHBvcnQgY2xhc3MgUldpZGdldEZvcm1Db21wb25lbnQgZXh0ZW5kcyBSV2lkZ2V0Rm9ybVJlbmRlckJhc2UgaW1wbGVtZW50cyBPbkRlc3Ryb3kge1xuICBpbnB1dHMgPSBbXTtcblxuICBAVmlld0NoaWxkKCd2YWxpZGF0ZUZvcm0nLCB7IHN0YXRpYzogZmFsc2UgfSkgdmFsaWRhdGVGb3JtOiBOZ0Zvcm07XG5cbiAgLyoqIOmhtemdouihqOWNlSAqL1xuICByb290UHJvcGVydHk7XG4gIHJvb3RDb21wb25lbnQ6IElDb21wb25lbnREZWY7XG4gIC8qKiBKU09OICovXG4gIEBJbnB1dCgpIHByZXZpZXdKc29uOiBzdHJpbmc7XG4gIC8qKiDooajljZXmj5DkuqQgKi9cbiAgQE91dHB1dCgpIHN1Ym1pdEZvcm06IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICAvKiog6KGo5Y2V6YeN572uICovXG4gIEBPdXRwdXQoKSByZXNldEZvcm06IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICAvKiog6KGo5Y2V6buY6K6k5YC8ICovXG4gIEBJbnB1dCgpIGZvcm1EYXRhO1xuICAvKiog5piv5ZCm5pi+56S66buY6K6k5oyJ6ZKuICovXG4gIEBJbnB1dCgpIHNob3dCdXR0b24gPSB0cnVlO1xuICAvKiogZGlzYWJsZWQgKi9cbiAgQElucHV0KCkgZGlzYWJsZWQ7XG5cbiAgZm9ybUlkID0gJ2Zvcm1JZCcgKyBNYXRoLnJhbmRvbSgpLnRvU3RyaW5nKDM2KS5zdWJzdHIoMywgMTYpICsgbmV3IERhdGUoKS5nZXRUaW1lKCk7XG5cbiAgLyoqIOiuoumYhee7hOS7tuacjeWKoSAqL1xuICBpbnB1dHNTdWJzY3JpYmU7XG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgY2RyOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBwcml2YXRlIGZiOiBGb3JtQnVpbGRlcixcbiAgICBwcml2YXRlIF9yV2lkZ2V0Rm9ybVNlcnZpY2U6IFJXaWRnZXRGb3JtU2VydmljZSxcbiAgICBwcml2YXRlIHpvbmU6IE5nWm9uZVxuICApIHtcbiAgICBzdXBlcigpO1xuICAgIHRoaXMuaW5wdXRzU3Vic2NyaWJlID0gdGhpcy5fcldpZGdldEZvcm1TZXJ2aWNlLmlucHV0c1N1YmplY3Quc3Vic2NyaWJlKHJlcyA9PiB7XG4gICAgICBsZXQgX3RoaXMgPSB0aGlzO1xuICAgICAgbGV0IGlucHV0ID0gcmVzO1xuICAgICAgLyoqXG4gICAgICAgKiDms6jlhoxmb3JtQ29udHJvbCDku6Xlj4og6buY6K6k5YC86LWL5YC8XG4gICAgICAgKi9cbiAgICAgIGlmIChpbnB1dCAmJiBpbnB1dC5uZ01vZGVsICYmIHRoaXMudmFsaWRhdGVGb3JtKSB7XG4gICAgICAgIGlmIChpbnB1dC5kYXRhLmZvcm1JZCA9PT0gdGhpcy5mb3JtSWQpIHtcbiAgICAgICAgICB0aGlzLmlucHV0cy5wdXNoKGlucHV0Lm5nTW9kZWwpO1xuICAgICAgICAgIHRoaXMudmFsaWRhdGVGb3JtLmFkZENvbnRyb2woaW5wdXQubmdNb2RlbCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIC8qKlxuICAgICAgICogZGlzYWJsZWTnirbmgIHmt7vliqBcbiAgICAgICAqL1xuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIGNvbnNvbGUubG9nKHRoaXMudmFsaWRhdGVGb3JtLmZvcm0sIHRoaXMuZm9ybUlkLCAnaW5wdXRzU3Vic2NyaWJlJyk7XG5cbiAgICAgICAgaWYgKF90aGlzLnZhbGlkYXRlRm9ybSAmJiBfdGhpcy52YWxpZGF0ZUZvcm0uZm9ybSkge1xuICAgICAgICAgIF90aGlzLnZhbGlkYXRlRm9ybS5mb3JtLnBhdGNoVmFsdWUoX3RoaXMuZm9ybURhdGEpO1xuICAgICAgICAgIGlmIChfdGhpcy5kaXNhYmxlZCkge1xuICAgICAgICAgICAgaW5wdXQuY29uZmlnLmRpc2FibGVkID0gdHJ1ZTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaW5wdXQuY29uZmlnLmRpc2FibGVkID0gZmFsc2U7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9LCAxMDApO1xuICAgIH0pO1xuICB9XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7fVxuICBuZ0FmdGVyVmlld0luaXQoKSB7XG4gICAgY29uc29sZS5sb2codGhpcy5mb3JtRGF0YSwgJ2Zvcm1EYXRhJyk7XG4gICAgdGhpcy5pbXBvcnRKc29uRnVuKCk7XG4gIH1cblxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XG4gICAgaWYgKGNoYW5nZXMucHJldmlld0pzb24pIHtcbiAgICAgIHRoaXMuaW1wb3J0SnNvbkZ1bigpO1xuICAgIH1cbiAgfVxuXG4gIC8qKiDlr7zlhaXljp/lp4tqc29u6Z2i5p2/ICovXG4gIGltcG9ydEpzb25GdW4oKSB7XG4gICAgdGhpcy5pbnB1dHMubWFwKGRpciA9PiB7XG4gICAgICB0aGlzLnZhbGlkYXRlRm9ybS5yZW1vdmVDb250cm9sKGRpcik7XG4gICAgfSk7XG4gICAgdGhpcy5yb290Q29tcG9uZW50ID0gbnVsbDtcbiAgICB0cnkge1xuICAgICAgY29uc3QgY29tcG9uZW50ID0gSlNPTi5wYXJzZSh0aGlzLnByZXZpZXdKc29uKTtcbiAgICAgIGlmIChjb21wb25lbnQpIHtcbiAgICAgICAgdGhpcy5zZXRGb3JtSWQoW2NvbXBvbmVudF0pO1xuICAgICAgICB0aGlzLnJvb3RDb21wb25lbnQgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KGNvbXBvbmVudCwgbnVsbCwgJ1xcdCcpKTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIHt9XG4gIH1cbiAgc2V0Rm9ybUlkKGxpc3QpIHtcbiAgICBpZiAobGlzdC5sZW5ndGgpIHtcbiAgICAgIGxpc3QubWFwKGl0ZW0gPT4ge1xuICAgICAgICBpdGVtLmZvcm1JZCA9IHRoaXMuZm9ybUlkO1xuICAgICAgICBpZiAoaXRlbS5jaGlsZHJlbi5sZW5ndGgpIHtcbiAgICAgICAgICB0aGlzLnNldEZvcm1JZChpdGVtLmNoaWxkcmVuKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICB9XG4gIF9zdWJtaXRGb3JtKCkge1xuICAgIGZvciAoY29uc3Qga2V5IGluIHRoaXMudmFsaWRhdGVGb3JtLmZvcm0uY29udHJvbHMpIHtcbiAgICAgIHRoaXMudmFsaWRhdGVGb3JtLmZvcm0uY29udHJvbHNba2V5XS5tYXJrQXNEaXJ0eSgpO1xuICAgICAgdGhpcy52YWxpZGF0ZUZvcm0uZm9ybS5jb250cm9sc1trZXldLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKTtcbiAgICB9XG4gICAgaWYgKHRoaXMudmFsaWRhdGVGb3JtLnZhbGlkKSB7XG4gICAgICB0aGlzLnN1Ym1pdEZvcm0uZW1pdCh0aGlzLnZhbGlkYXRlRm9ybS5mb3JtLnZhbHVlKTtcbiAgICB9XG4gIH1cbiAgX3Jlc2V0Rm9ybSgpIHtcbiAgICB0aGlzLnZhbGlkYXRlRm9ybS5yZXNldEZvcm0oKTtcbiAgICB0aGlzLnJlc2V0Rm9ybS5lbWl0KCk7XG4gIH1cblxuICAvKipcbiAgICog57uE5Lu26ZSA5q+B5pe26Kej6Zmk6K6i6ZiF77yM6YeN572uZm9ybVxuICAgKi9cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy5yb290Q29tcG9uZW50ID0gbnVsbDtcbiAgICB0aGlzLmlucHV0cy5tYXAoZGlyID0+IHtcbiAgICAgIHRoaXMudmFsaWRhdGVGb3JtLnJlbW92ZUNvbnRyb2woZGlyKTtcbiAgICB9KTtcbiAgICB0aGlzLmlucHV0cyA9IFtdO1xuICAgIHRoaXMuaW5wdXRzU3Vic2NyaWJlLnVuc3Vic2NyaWJlKCk7XG4gIH1cbn1cbiIsIjwhLS0g5riy5p+TIC0tPlxuPGZvcm0gI3ZhbGlkYXRlRm9ybT1cIm5nRm9ybVwiIG56LXJvdyBuei1mb3JtIFtuZ0NsYXNzXT1cInsgZm9ybUJvcmRlcmVkOiAhIXJvb3RDb21wb25lbnQgJiYgISFyb290Q29tcG9uZW50LmJvcmRlcmVkIH1cIj5cbiAgPGRpdiBjbGFzcz1cIndpZGdldC1mb3JtLWxpc3RcIiBzdHlsZT1cIndpZHRoOiAxMDAlXCIgKm5nSWY9XCJyb290Q29tcG9uZW50ICYmIHJvb3RDb21wb25lbnQuY2hpbGRyZW5cIj5cbiAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBzdWJDb21wb25lbnQgb2Ygcm9vdENvbXBvbmVudC5jaGlsZHJlbjsgbGV0IGkgPSBpbmRleFwiPlxuICAgICAgPGRpdlxuICAgICAgICBuei1jb2xcbiAgICAgICAgW256TWRdPVwic3ViQ29tcG9uZW50LnNwYW4gfHwgMTJcIlxuICAgICAgICBbbnpYc109XCIyNFwiXG4gICAgICAgIFtuek9mZnNldF09XCJzdWJDb21wb25lbnQub2Zmc2V0IHx8IDBcIlxuICAgICAgICBjbGFzcz1cIndpZGdldC1mb3JtLWxpc3QtaXRlbVwiXG4gICAgICAgIFthdHRyLmRhdGEtaWRdPVwic3ViQ29tcG9uZW50LmlkXCJcbiAgICAgICAgW2F0dHIuaWRdPVwiJ3dpZGdldC0nICsgc3ViQ29tcG9uZW50LmlkXCJcbiAgICAgICAgc3R5bGU9XCJkaXNwbGF5OiBpbmxpbmUtYmxvY2s7IHdpZHRoOiAxMDAlOyBmbG9hdDogbGVmdFwiXG4gICAgICA+XG4gICAgICAgIDxkaXY+XG4gICAgICAgICAgPHItd2lkZ2V0LWZvcm0tcmVuZGVyIFtwYXJlbnRDb21wb25lbnRdPVwicm9vdENvbXBvbmVudFwiIFtjb21wb25lbnRdPVwic3ViQ29tcG9uZW50XCI+IDwvci13aWRnZXQtZm9ybS1yZW5kZXI+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9uZy1jb250YWluZXI+XG4gIDwvZGl2PlxuICA8ZGl2ICpuZ0lmPVwic2hvd0J1dHRvblwiPlxuICAgIDxyLXdpZGdldC1idXR0b24gKHJlc2V0Rm9ybSk9XCJfcmVzZXRGb3JtKClcIiAoc3VibWl0Rm9ybSk9XCJfc3VibWl0Rm9ybSgpXCI+PC9yLXdpZGdldC1idXR0b24+XG4gIDwvZGl2PlxuPC9mb3JtPlxuIl19