UNPKG

ngx-antd-form-builder

Version:

Simple Drag&Drop form builder using ng-zorro-antd

84 lines 79.7 kB
import { Component, Input } from "@angular/core";
import { FormsModule, ReactiveFormsModule } from "@angular/forms";
import { NzInputNumberModule } from "ng-zorro-antd/input-number";
import { NzRateModule } from "ng-zorro-antd/rate";
import { DesignFormChangeOptionComponent } from "../design-form-change-option/design-form-change-option.component";
import { CommonModule } from "@angular/common";
import { NzEmptyModule } from "ng-zorro-antd/empty";
import { DesignFormItemCheckboxComponent } from "../design-form-item-checkbox/design-form-item-checkbox.component";
import { NzRadioModule } from "ng-zorro-antd/radio";
import { NzInputModule } from "ng-zorro-antd/input";
import { NzSelectModule } from "ng-zorro-antd/select";
import { NzCheckboxModule } from "ng-zorro-antd/checkbox";
import { NzDatePickerModule } from "ng-zorro-antd/date-picker";
import * as i0 from "@angular/core";
import * as i1 from "@angular/common";
import * as i2 from "@angular/forms";
import * as i3 from "ng-zorro-antd/rate";
import * as i4 from "ng-zorro-antd/input-number";
import * as i5 from "ng-zorro-antd/empty";
import * as i6 from "ng-zorro-antd/radio";
import * as i7 from "ng-zorro-antd/input";
import * as i8 from "ng-zorro-antd/select";
import * as i9 from "ng-zorro-antd/checkbox";
import * as i10 from "ng-zorro-antd/date-picker";
export class DesignFormItemPropertiesComponent {
    constructor() {
        this.showMetaDataModel = true;
        this.Infinity = Infinity;
    }
    ngOnChanges(changes) {
    }
    get options() {
        return 'options' in this.selectItem ? this.selectItem.options : {};
    }
    get showFreeModel() {
        return typeof this.selectItem.key !== 'undefined';
    }
    getType(input) {
        return typeof input;
    }
    getOperationProperty() {
        return typeof this.options.hidden !== 'undefined' ||
            typeof this.options.readonly !== 'undefined' ||
            typeof this.options.clearable !== 'undefined' ||
            typeof this.options.multiple !== 'undefined';
    }
    colOverrideChange($event) {
        this.options.overrideLayout = $event;
        if ($event) {
            this.options.labelCol = { ...this.config.labelCol };
            this.options.wrapperCol = { ...this.config.wrapperCol };
            this.options.labelWidth = this.config.labelWidth;
        }
    }
    handleChangeCol(e) {
        this.options.labelCol.xs = this.options.labelCol.sm = this.options.labelCol.md = this.options.labelCol.lg = this.options.labelCol.xl = this.options.labelCol.xxl = e;
        this.options.wrapperCol.xs = this.options.wrapperCol.sm = this.options.wrapperCol.md = this.options.wrapperCol.lg = this.options.wrapperCol.xl = this.options.wrapperCol.xxl =
            24 - e;
    }
    handleChangeLabelCol(e) {
        this.options.labelCol.xs = this.options.labelCol.sm = this.options.labelCol.md = this.options.labelCol.lg = this.options.labelCol.xl = this.options.labelCol.xxl = e;
    }
    handleChangeWrapperCol(e) {
        this.options.wrapperCol.xs = this.options.wrapperCol.sm = this.options.wrapperCol.md = this.options.wrapperCol.lg = this.options.wrapperCol.xl = this.options.wrapperCol.xxl = e;
    }
    static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.10", ngImport: i0, type: DesignFormItemPropertiesComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
    static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.10", type: DesignFormItemPropertiesComponent, isStandalone: true, selector: "app-design-form-item-properties", inputs: { selectItem: "selectItem", hideModel: "hideModel", config: "config" }, usesOnChanges: true, ngImport: i0, template: "<div class=\"properties-centent kk-checkbox\">\r\n  <div class=\"properties-body\">\r\n    <nz-empty\r\n      *ngIf=\"selectItem.key === ''\"\r\n      [nzNotFoundContent]=\"contentTpl\">\r\n      <ng-template #contentTpl>\r\n        <span>No Select Component</span>\r\n      </ng-template>\r\n    </nz-empty>\r\n    <div *ngIf=\"selectItem.key !== ''\">\r\n      <div *ngIf=\"getType(selectItem.label) !== 'undefined'\">\r\n        <label>\r\n          Label\r\n        </label>\r\n        <div>\r\n          <input nz-input [(ngModel)]=\"selectItem.label\"/>\r\n        </div>\r\n      </div>\r\n      <div *ngIf=\"showFreeModel\">\r\n        <label>\r\n          key\r\n        </label>\r\n        <div>\r\n          <input nz-input [(ngModel)]=\"selectItem.key\"  />\r\n        </div>\r\n      </div>\r\n\r\n      <hr>\r\n      <!-- input type start -->\r\n      <div *ngIf=\"selectItem.type === 'input'\">\r\n        <label>\r\n          Input Type\r\n        </label>\r\n        <div>\r\n          <input nz-input [(ngModel)]=\"options.type\"  />\r\n        </div>\r\n      </div>\r\n      <!-- input type end -->\r\n\r\n      <div *ngIf=\"getType(options.rangePlaceholder) !== 'undefined' && options.range; else placeHolderElse\">\r\n        <label>\r\n          placeholder\r\n        </label>\r\n        <div>\r\n          <input nz-input [(ngModel)]=\"options.rangePlaceholder[0]\"  />\r\n          <input nz-input [(ngModel)]=\"options.rangePlaceholder[1]\" />\r\n        </div>\r\n      </div>\r\n      <ng-template #placeHolderElse>\r\n        <div *ngIf=\"getType(options.placeholder) !== 'undefined'\">\r\n          <label>\r\n            Placeholder\r\n          </label>\r\n          <div>\r\n            <input nz-input [(ngModel)]=\"options.placeholder\" placeholder=\"Placeholder\" />\r\n          </div>\r\n        </div>\r\n      </ng-template>\r\n\r\n      <div *ngIf=\"selectItem.type === 'textarea'\">\r\n        <label>\r\n          Size\r\n        </label>\r\n        <div>\r\n          <nz-input-number nzPlaceHolder=\"Min Rows\" [(ngModel)]=\"options.minRows\"></nz-input-number>\r\n          <nz-input-number nzPlaceHolder=\"Max Rows\" [(ngModel)]=\"options.maxRows\"></nz-input-number>\r\n        </div>\r\n      </div>\r\n\r\n      <div *ngIf=\"getType(options.width) !== 'undefined'\">\r\n        <label>\r\n          Width\r\n        </label>\r\n        <div>\r\n          <input nz-input [(ngModel)]=\"options.width\"  />\r\n        </div>\r\n      </div>\r\n      <div *ngIf=\"getType(options.height) !== 'undefined'\">\r\n        <label>\r\n          Height\r\n        </label>\r\n        <div>\r\n          <nz-input-number [(ngModel)]=\"options.height\" ></nz-input-number>\r\n        </div>\r\n      </div>\r\n      <div *ngIf=\"getType(options.step) !== 'undefined'\">\r\n        <label>\r\n          step\r\n        </label>\r\n        <div>\r\n          <nz-input-number [(ngModel)]=\"options.step\" ></nz-input-number>\r\n        </div>\r\n      </div>\r\n      <div *ngIf=\"getType(options.min) !== 'undefined'\">\r\n        <label>\r\n          Min value\r\n        </label>\r\n        <div>\r\n          <nz-input-number [(ngModel)]=\"options.min\" ></nz-input-number>\r\n        </div>\r\n      </div>\r\n      <div *ngIf=\"getType(options.max) !== 'undefined'\">\r\n        <label>\r\n          Max value\r\n        </label>\r\n        <div>\r\n          <nz-input-number [(ngModel)]=\"options.max\" ></nz-input-number>\r\n        </div>\r\n      </div>\r\n      <div *ngIf=\"getType(options.maxLength) !== 'undefined'\">\r\n        <label>\r\n          MaxLength\r\n        </label>\r\n        <div>\r\n          <nz-input-number [(ngModel)]=\"options.maxLength\" ></nz-input-number>\r\n        </div>\r\n      </div>\r\n      <div *ngIf=\"getType(options.tabBarGutter) !== 'undefined'\">\r\n        <label>\r\n          TabBarGutter\r\n        </label>\r\n        <div>\r\n          <nz-input-number [(ngModel)]=\"options.tabBarGutter\" ></nz-input-number>\r\n        </div>\r\n      </div>\r\n      <div *ngIf=\"getType(options.precision) !== 'undefined'\">\r\n        <label>\r\n          Precision\r\n        </label>\r\n        <div>\r\n          <nz-input-number\r\n            [nzMin]=\"0\" [nzMax]=\"50\"\r\n           [(ngModel)]=\"options.precision\" ></nz-input-number>\r\n        </div>\r\n      </div>\r\n\r\n      <!-- \u9009\u9879\u914D\u7F6E\u53CA\u52A8\u6001\u6570\u636E\u914D\u7F6E start -->\r\n      <div *ngIf=\"getType(options.options) !== 'undefined'\">\r\n        <label>\r\n          Options\r\n        </label>\r\n        <div>\r\n          <app-design-form-change-option \r\n            [(ngModel)]=\"options.options\"\r\n          ></app-design-form-change-option>\r\n        </div>\r\n      </div>\r\n      <!-- \u9009\u9879\u914D\u7F6E\u53CA\u52A8\u6001\u6570\u636E\u914D\u7F6E end -->\r\n\r\n      <!-- tabs\u914D\u7F6E start -->\r\n      <div *ngIf=\"selectItem.type == 'tabs' || selectItem.type == 'selectInputList'\">\r\n        <label>\r\n          {{selectItem.type === 'tabs' ? 'Tabs Config' : 'Grid Config'}}\r\n        </label>\r\n        <div>\r\n          <app-design-form-change-option [type]=\"'tab'\" [(ngModel)]=\"selectItem.columns\"></app-design-form-change-option>\r\n        </div>\r\n      </div>\r\n      <!-- tabs\u914D\u7F6E end -->\r\n      <ng-container *ngIf=\"selectItem.type === 'tabs'\">\r\n        <!-- \u9875\u7B7E\u4F4D\u7F6E start -->\r\n        <div>\r\n          <label>\r\n            Tab position\r\n          </label>\r\n          <div>\r\n            <nz-radio-group nzButtonStyle=\"solid\" [(ngModel)]=\"options.tabPosition\">\r\n              <label nz-radio nzValue=\"top\">top</label>\r\n              <label nz-radio nzValue=\"right\">right</label>\r\n              <label nz-radio nzValue=\"bottom\">bottom</label>\r\n              <label nz-radio nzValue=\"left\">left</label>\r\n            </nz-radio-group>\r\n          </div>\r\n        </div>\r\n        <!-- \u9875\u7B7E\u4F4D\u7F6E end -->\r\n      \r\n        <!-- \u9875\u7B7E\u7C7B\u578B start -->\r\n        <div>\r\n          <label>\r\n            Tab Style\r\n          </label>\r\n          <div>\r\n            <nz-radio-group nzButtonStyle=\"solid\" [(ngModel)]=\"options.type\">\r\n              <label nz-radio nzValue=\"line\">line</label>\r\n              <label nz-radio nzValue=\"card\">card</label>\r\n            </nz-radio-group>\r\n          </div>\r\n        </div>\r\n        <!-- \u9875\u7B7E\u7C7B\u578B end -->\r\n      </ng-container>\r\n      <!-- \u9875\u7B7E\u5927\u5C0F start -->\r\n      <div *ngIf=\"getType(options.size) !== 'undefined'\">\r\n        <label>\r\n          Size\r\n        </label>\r\n        <div>\r\n          <nz-radio-group [(ngModel)]=\"options.size\">\r\n            <label nz-radio-button nzValue=\"large\">large</label>\r\n            <label nz-radio-button nzValue=\"default\">default</label>\r\n            <label nz-radio-button nzValue=\"small\">small</label>\r\n          </nz-radio-group>\r\n        </div>\r\n      </div>\r\n      <!-- \u9875\u7B7E\u5927\u5C0F end -->\r\n\r\n      <!-- grid type \u914D\u7F6E start -->\r\n      <ng-container *ngIf=\"selectItem.type === 'grid'\">\r\n        <div>\r\n          <label>\r\n            Grid Gutter\r\n          </label>\r\n          <div>\r\n            <nz-input-number [(ngModel)]=\"selectItem.options.gutter\"></nz-input-number>\r\n          </div>\r\n        </div>\r\n        <div>\r\n          <label>\r\n            Grid Config\r\n          </label>\r\n          <div>\r\n            <app-design-form-change-option [type]=\"'colspan'\" [(ngModel)]=\"selectItem.columns\"></app-design-form-change-option>\r\n          </div>\r\n        </div>\r\n      </ng-container>\r\n\r\n      <!-- grid type \u914D\u7F6E end-->\r\n\r\n      <!-- \u9ED8\u8BA4\u503C\u90E8\u5206 start -->\r\n      <div *ngIf=\"selectItem.type === 'switch'\">\r\n        <label>\r\n          Default\r\n        </label>\r\n        <div>\r\n          <nz-switch [(ngModel)]=\"options.defaultValue\"></nz-switch>\r\n        </div>\r\n      </div>\r\n      <div *ngIf=\"selectItem.type === 'number' || selectItem.type === 'slider'\">\r\n        <label>\r\n          Default\r\n        </label>\r\n        <div>\r\n          <nz-input-number\r\n            [nzStep]=\"options.step\"\r\n            [nzMin]=\"options.min || -Infinity\"\r\n            [nzMax]=\"options.max || Infinity\"\r\n            [(ngModel)]=\"options.defaultValue\"\r\n          ></nz-input-number>\r\n        </div>\r\n      </div>\r\n      <div *ngIf=\"selectItem.type === 'rate'\">\r\n        <label>\r\n          Default\r\n        </label>\r\n        <div>\r\n          <nz-rate\r\n            [nzAllowHalf]=\"options.allowHalf\"\r\n            [nzCount]=\"options.max\"\r\n            [(ngModel)]=\"options.defaultValue\"\r\n          ></nz-rate>\r\n        </div>\r\n      </div>\r\n\r\n      <!-- date -->\r\n      <ng-container *ngIf=\"selectItem.type === 'date'\">\r\n        <div>\r\n          <label>\r\n            Type\r\n          </label>\r\n          <div>\r\n            <nz-radio-group [(ngModel)]=\"options.mode\">\r\n              <label nz-radio nzValue=\"date\">Date</label>\r\n              <label nz-radio nzValue=\"week\">Week</label>\r\n              <label nz-radio nzValue=\"month\">Month</label>\r\n              <label nz-radio nzValue=\"year\">Year</label>\r\n            </nz-radio-group>\r\n          </div>\r\n        </div>\r\n        <div>\r\n          <label>\r\n            Default\r\n          </label>\r\n          <div>\r\n            <nz-date-picker [nzMode]=\"options.mode\" [(ngModel)]=\"options.defaultValue\"></nz-date-picker>\r\n          </div>\r\n        </div>\r\n      </ng-container>\r\n      <!-- date end-->\r\n\r\n\r\n      <div *ngIf=\"selectItem.type === 'select'\">\r\n        <label>\r\n          Default\r\n        </label>\r\n        <div>\r\n          <nz-select style=\"width: 100%;\"\r\n            [(ngModel)]=\"options.defaultValue\"\r\n          >\r\n          <nz-option *ngFor=\"let option of options.options\" \r\n            [nzValue]=\"option.value\" [nzLabel]=\"option.label\"></nz-option>\r\n        </nz-select>\r\n        </div>\r\n      </div>\r\n      <div *ngIf=\"selectItem.type === 'radio'\">\r\n        <label>\r\n          Default\r\n        </label>\r\n        <div>\r\n          <nz-radio-group [(ngModel)]=\"options.defaultValue\">\r\n            <label \r\n              *ngFor=\"let item of options.options\" nz-radio\r\n              [nzValue]=\"item.value\">{{item.label}}</label>\r\n          </nz-radio-group>\r\n        </div>\r\n      </div>\r\n      <div *ngIf=\"selectItem.type === 'checkbox'\">\r\n        <label>\r\n          Default\r\n        </label>\r\n        <div>\r\n          <app-design-form-item-checkbox \r\n            [options]=\"options.options\" [(ngModel)]=\"options.defaultValue\">\r\n          </app-design-form-item-checkbox>\r\n          <!-- <nz-checkbox-group></nz-checkbox-group>\r\n          <nz-radio-group [(ngModel)]=\"options.defaultValue\">\r\n            <label \r\n              *ngFor=\"let item of options.options\" nz-radio\r\n              [nzValue]=\"item.value\">{{item.label}}</label>\r\n          </nz-radio-group> -->\r\n        </div>\r\n      </div>\r\n      <div *ngIf=\"!(selectItem.type === 'number' || selectItem.type === 'radio' || selectItem.type === 'checkbox' \r\n        || selectItem.type === 'date' || selectItem.type === 'rate' || selectItem.type === 'select'\r\n        || selectItem.type === 'switch' || selectItem.type === 'slider'  || selectItem.type === 'html')\r\n          && getType(options.defaultValue) !== 'undefined'\">\r\n        <label>\r\n          Default\r\n        </label>\r\n        <div>\r\n          <input nz-input [(ngModel)]=\"options.defaultValue\"/>\r\n        </div>\r\n      </div>\r\n      <!-- \u9ED8\u8BA4\u503C\u90E8\u5206 end -->\r\n\r\n\r\n      <div *ngIf=\"getType(options.orientation) !== 'undefined'\">\r\n        <label>\r\n          Text Position\r\n        </label>\r\n        <div>\r\n          <nz-radio-group [(ngModel)]=\"options.orientation\">\r\n            <label nz-radio-button nzValue=\"left\">Left</label>\r\n            <label nz-radio-button nzValue=\"\">Center</label>\r\n            <label nz-radio-button nzValue=\"right\">Right</label>\r\n          </nz-radio-group>\r\n        </div>\r\n      </div>\r\n\r\n      <!-- button -->\r\n      <ng-container *ngIf=\"selectItem.type === 'button'\">\r\n        <div>\r\n          <label>\r\n            Button Type\r\n          </label>\r\n          <div>\r\n            <nz-radio-group [(ngModel)]=\"options.type\">\r\n              <label nz-radio nzValue=\"primary\">Primary</label>\r\n              <label nz-radio nzValue=\"default\">Default</label>\r\n              <label nz-radio nzValue=\"dashed\">Dashed</label>\r\n              <label nz-radio nzValue=\"text\">Text</label>\r\n              <label nz-radio nzValue=\"link\">Link</label>\r\n            </nz-radio-group>\r\n          </div>\r\n        </div>\r\n      </ng-container>\r\n\r\n      <!-- alert -->\r\n      <ng-container *ngIf=\"selectItem.type === 'alert'\">\r\n        <div>\r\n          <label>\r\n            Description\r\n          </label>\r\n          <div>\r\n            <input nz-input [(ngModel)]=\"options.description\">\r\n          </div>\r\n        </div>\r\n        <div>\r\n          <label>\r\n            Alert Type\r\n          </label>\r\n          <div>\r\n            <nz-radio-group nzButtonStyle=\"solid\" [(ngModel)]=\"options.type\">\r\n              <label nz-radio nzValue=\"success\">success</label>\r\n              <label nz-radio nzValue=\"info\">info</label>\r\n              <label nz-radio nzValue=\"warning\">warning</label>\r\n              <label nz-radio nzValue=\"error\">error</label>\r\n            </nz-radio-group>\r\n          </div>\r\n        </div>\r\n      </ng-container>\r\n\r\n      <!-- \u6298\u53E0\u9762\u677F start -->\r\n      <ng-container *ngIf=\"selectItem.type === 'collapse'\">\r\n        <!-- \u9875\u7B7E\u4F4D\u7F6E start -->\r\n        <div>\r\n          <label>\r\n            only one\r\n          </label>\r\n          <div>\r\n            <nz-radio-group [(ngModel)]=\"options.tabPosition\">\r\n              <label nz-radio [nzValue]=\"true\">True</label>\r\n              <label nz-radio [nzValue]=\"false\">False</label>\r\n            </nz-radio-group>\r\n          </div>\r\n        </div>\r\n        <!-- \u9875\u7B7E\u4F4D\u7F6E end -->\r\n      \r\n        <div>\r\n          <label>\r\n            Panel Config\r\n          </label>\r\n          <div>\r\n            <app-design-form-change-option [type]=\"'collapse'\" [(ngModel)]=\"selectItem.columns\"></app-design-form-change-option>\r\n          </div>\r\n        </div>\r\n        <!-- \u9875\u7B7E\u7C7B\u578B start -->\r\n      </ng-container>\r\n      <!-- \u6298\u53E0\u9762\u677F end -->\r\n\r\n      <ng-container *ngIf=\"selectItem.type === 'text'\">\r\n        <div>\r\n          <label>\r\n            Text align\r\n          </label>\r\n          <div>\r\n            <nz-radio-group nzButtonStyle=\"solid\" [(ngModel)]=\"options.textAlign\">\r\n              <label nz-radio-button nzValue=\"left\">Left</label>\r\n              <label nz-radio-button nzValue=\"center\">Center</label>\r\n              <label nz-radio-button nzValue=\"right\">Right</label>\r\n            </nz-radio-group>\r\n          </div>\r\n        </div>\r\n        <div>\r\n          <label>\r\n            Font family\r\n          </label>\r\n          <div>\r\n            <input nz-input [(ngModel)]=\"options.fontFamily\"/>\r\n          </div>\r\n        </div>\r\n        <div>\r\n          <label>\r\n            Font Size\r\n          </label>\r\n          <div>\r\n            <input nz-input [(ngModel)]=\"options.fontSize\"/>\r\n          </div>\r\n        </div>\r\n      </ng-container>\r\n      \r\n\r\n      <div *ngIf=\"getOperationProperty()\">\r\n        <label>\r\n          Operation\r\n        </label>\r\n        <div>\r\n          <label *ngIf=\"getType(options.hidden) !== 'undefined'\" nz-checkbox [(ngModel)]=\"options.hidden\">Hidden</label>\r\n          <!-- <label *ngIf=\"getType(options.disabled) !== 'undefined'\" nz-checkbox [(ngModel)]=\"options.disabled\">Disable</label> -->\r\n          <label *ngIf=\"getType(options.readonly) !== 'undefined'\" nz-checkbox [(ngModel)]=\"options.readonly\">ReadOnly</label>\r\n          <label *ngIf=\"getType(options.clearable) !== 'undefined'\" nz-checkbox [(ngModel)]=\"options.clearable\">Clearable</label>\r\n          <label *ngIf=\"getType(options.multiple) !== 'undefined'\" nz-checkbox [(ngModel)]=\"options.multiple\">Multiple</label>\r\n        </div>\r\n      </div>\r\n\r\n      <ng-container *ngIf=\"getType(selectItem.rules) !== 'undefined'\r\n      && selectItem.rules.length > 0\">\r\n        <div >\r\n          <label>\r\n            Validation\r\n          </label>\r\n          <div>\r\n            <label nz-checkbox [(ngModel)]=\"selectItem.rules[0].required\">Required</label>\r\n            <input nz-input [(ngModel)]=\"selectItem.rules[0].message\" placeholder=\"Error Tooltip\" />\r\n          </div>\r\n        </div>\r\n        <div >\r\n          <label>\r\n          </label>\r\n          <div>\r\n            <app-design-form-change-option [type]=\"'rules'\" [(ngModel)]=\"selectItem.rules\"></app-design-form-change-option>\r\n          </div>\r\n        </div>\r\n      </ng-container>\r\n      \r\n      <!-- <div *ngIf=\"getType(selectItem.help) !== 'undefined'\">\r\n        <label>\r\n          Help tooltip\r\n        </label>\r\n        <div>\r\n          <input nz-input [(ngModel)]=\"selectItem.help\" />\r\n        </div>\r\n      </div> -->\r\n    </div>\r\n  </div>\r\n</div>\r\n", styles: [":host{display:block;padding:0 10px 10px;width:100%;max-height:calc(100vh - 80px);overflow:auto}:host .properties-body>div>div{display:flex;width:100%;margin-bottom:10px}:host .properties-body>div>div>label{width:80px;line-height:32px;flex-shrink:0}:host .properties-body>div>div>div{width:calc(100% - 80px)}:host .properties-body>div>div>div input{width:100%}.option-change-container{width:calc(100% - 8px)}.option-change-box{height:38px;padding-bottom:6px}.option-change-box .option-delete-box{margin-top:3px;background:#ffe9e9;color:#f22;width:32px;height:32px;line-height:32px;text-align:center;border-radius:50%;overflow:hidden;transition:all .3s}.option-change-box .option-delete-box:hover{background:#f22;color:#fff}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i2.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "ngmodule", type: NzRateModule }, { kind: "component", type: i3.NzRateComponent, selector: "nz-rate", inputs: ["nzAllowClear", "nzAllowHalf", "nzDisabled", "nzAutoFocus", "nzCharacter", "nzCount", "nzTooltips"], outputs: ["nzOnBlur", "nzOnFocus", "nzOnHoverChange", "nzOnKeyDown"], exportAs: ["nzRate"] }, { kind: "ngmodule", type: NzInputNumberModule }, { kind: "component", type: i4.NzInputNumberComponent, selector: "nz-input-number", inputs: ["nzSize", "nzMin", "nzMax", "nzParser", "nzPrecision", "nzPrecisionMode", "nzPlaceHolder", "nzStatus", "nzStep", "nzInputMode", "nzId", "nzDisabled", "nzReadOnly", "nzAutoFocus", "nzBorderless", "nzFormatter"], outputs: ["nzBlur", "nzFocus"], exportAs: ["nzInputNumber"] }, { kind: "ngmodule", type: NzEmptyModule }, { kind: "component", type: i5.NzEmptyComponent, selector: "nz-empty", inputs: ["nzNotFoundImage", "nzNotFoundContent", "nzNotFoundFooter"], exportAs: ["nzEmpty"] }, { kind: "ngmodule", type: NzRadioModule }, { kind: "component", type: i6.NzRadioComponent, selector: "[nz-radio],[nz-radio-button]", inputs: ["nzValue", "nzDisabled", "nzAutoFocus", "nz-radio-button"], exportAs: ["nzRadio"] }, { kind: "component", type: i6.NzRadioGroupComponent, selector: "nz-radio-group", inputs: ["nzDisabled", "nzButtonStyle", "nzSize", "nzName"], exportAs: ["nzRadioGroup"] }, { kind: "ngmodule", type: NzInputModule }, { kind: "directive", type: i7.NzInputDirective, selector: "input[nz-input],textarea[nz-input]", inputs: ["nzBorderless", "nzSize", "nzStepperless", "nzStatus", "disabled"], exportAs: ["nzInput"] }, { kind: "ngmodule", type: NzSelectModule }, { kind: "component", type: i8.NzOptionComponent, selector: "nz-option", inputs: ["nzTitle", "nzLabel", "nzValue", "nzKey", "nzDisabled", "nzHide", "nzCustomContent"], exportAs: ["nzOption"] }, { kind: "component", type: i8.NzSelectComponent, selector: "nz-select", inputs: ["nzId", "nzSize", "nzStatus", "nzOptionHeightPx", "nzOptionOverflowSize", "nzDropdownClassName", "nzDropdownMatchSelectWidth", "nzDropdownStyle", "nzNotFoundContent", "nzPlaceHolder", "nzPlacement", "nzMaxTagCount", "nzDropdownRender", "nzCustomTemplate", "nzSuffixIcon", "nzClearIcon", "nzRemoveIcon", "nzMenuItemSelectedIcon", "nzTokenSeparators", "nzMaxTagPlaceholder", "nzMaxMultipleCount", "nzMode", "nzFilterOption", "compareWith", "nzAllowClear", "nzBorderless", "nzShowSearch", "nzLoading", "nzAutoFocus", "nzAutoClearSearchValue", "nzServerSearch", "nzDisabled", "nzOpen", "nzSelectOnTab", "nzBackdrop", "nzOptions", "nzShowArrow"], outputs: ["nzOnSearch", "nzScrollToBottom", "nzOpenChange", "nzBlur", "nzFocus"], exportAs: ["nzSelect"] }, { kind: "ngmodule", type: NzCheckboxModule }, { kind: "component", type: i9.NzCheckboxComponent, selector: "[nz-checkbox]", inputs: ["nzValue", "nzAutoFocus", "nzDisabled", "nzIndeterminate", "nzChecked", "nzId"], outputs: ["nzCheckedChange"], exportAs: ["nzCheckbox"] }, { kind: "ngmodule", type: NzDatePickerModule }, { kind: "component", type: i10.NzDatePickerComponent, selector: "nz-date-picker,nz-week-picker,nz-month-picker,nz-year-picker,nz-range-picker", inputs: ["nzAllowClear", "nzAutoFocus", "nzDisabled", "nzBorderless", "nzInputReadOnly", "nzInline", "nzOpen", "nzDisabledDate", "nzLocale", "nzPlaceHolder", "nzPopupStyle", "nzDropdownClassName", "nzSize", "nzStatus", "nzFormat", "nzDateRender", "nzDisabledTime", "nzRenderExtraFooter", "nzShowToday", "nzMode", "nzShowNow", "nzRanges", "nzDefaultPickerValue", "nzSeparator", "nzSuffixIcon", "nzBackdrop", "nzId", "nzPlacement", "nzShowWeekNumber", "nzShowTime"], outputs: ["nzOnPanelChange", "nzOnCalendarChange", "nzOnOk", "nzOnOpenChange"], exportAs: ["nzDatePicker"] }, { kind: "component", type: DesignFormChangeOptionComponent, selector: "app-design-form-change-option", inputs: ["type"] }, { kind: "component", type: DesignFormItemCheckboxComponent, selector: "app-design-form-item-checkbox", inputs: ["options"] }] }); }
}
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.10", ngImport: i0, type: DesignFormItemPropertiesComponent, decorators: [{
            type: Component,
            args: [{ standalone: true, selector: 'app-design-form-item-properties', imports: [
                        CommonModule, FormsModule, ReactiveFormsModule,
                        NzRateModule, NzInputNumberModule, NzEmptyModule, NzRadioModule, NzInputModule,
                        NzSelectModule, NzCheckboxModule, NzDatePickerModule,
                        DesignFormChangeOptionComponent, DesignFormItemCheckboxComponent
                    ], template: "<div class=\"properties-centent kk-checkbox\">\r\n  <div class=\"properties-body\">\r\n    <nz-empty\r\n      *ngIf=\"selectItem.key === ''\"\r\n      [nzNotFoundContent]=\"contentTpl\">\r\n      <ng-template #contentTpl>\r\n        <span>No Select Component</span>\r\n      </ng-template>\r\n    </nz-empty>\r\n    <div *ngIf=\"selectItem.key !== ''\">\r\n      <div *ngIf=\"getType(selectItem.label) !== 'undefined'\">\r\n        <label>\r\n          Label\r\n        </label>\r\n        <div>\r\n          <input nz-input [(ngModel)]=\"selectItem.label\"/>\r\n        </div>\r\n      </div>\r\n      <div *ngIf=\"showFreeModel\">\r\n        <label>\r\n          key\r\n        </label>\r\n        <div>\r\n          <input nz-input [(ngModel)]=\"selectItem.key\"  />\r\n        </div>\r\n      </div>\r\n\r\n      <hr>\r\n      <!-- input type start -->\r\n      <div *ngIf=\"selectItem.type === 'input'\">\r\n        <label>\r\n          Input Type\r\n        </label>\r\n        <div>\r\n          <input nz-input [(ngModel)]=\"options.type\"  />\r\n        </div>\r\n      </div>\r\n      <!-- input type end -->\r\n\r\n      <div *ngIf=\"getType(options.rangePlaceholder) !== 'undefined' && options.range; else placeHolderElse\">\r\n        <label>\r\n          placeholder\r\n        </label>\r\n        <div>\r\n          <input nz-input [(ngModel)]=\"options.rangePlaceholder[0]\"  />\r\n          <input nz-input [(ngModel)]=\"options.rangePlaceholder[1]\" />\r\n        </div>\r\n      </div>\r\n      <ng-template #placeHolderElse>\r\n        <div *ngIf=\"getType(options.placeholder) !== 'undefined'\">\r\n          <label>\r\n            Placeholder\r\n          </label>\r\n          <div>\r\n            <input nz-input [(ngModel)]=\"options.placeholder\" placeholder=\"Placeholder\" />\r\n          </div>\r\n        </div>\r\n      </ng-template>\r\n\r\n      <div *ngIf=\"selectItem.type === 'textarea'\">\r\n        <label>\r\n          Size\r\n        </label>\r\n        <div>\r\n          <nz-input-number nzPlaceHolder=\"Min Rows\" [(ngModel)]=\"options.minRows\"></nz-input-number>\r\n          <nz-input-number nzPlaceHolder=\"Max Rows\" [(ngModel)]=\"options.maxRows\"></nz-input-number>\r\n        </div>\r\n      </div>\r\n\r\n      <div *ngIf=\"getType(options.width) !== 'undefined'\">\r\n        <label>\r\n          Width\r\n        </label>\r\n        <div>\r\n          <input nz-input [(ngModel)]=\"options.width\"  />\r\n        </div>\r\n      </div>\r\n      <div *ngIf=\"getType(options.height) !== 'undefined'\">\r\n        <label>\r\n          Height\r\n        </label>\r\n        <div>\r\n          <nz-input-number [(ngModel)]=\"options.height\" ></nz-input-number>\r\n        </div>\r\n      </div>\r\n      <div *ngIf=\"getType(options.step) !== 'undefined'\">\r\n        <label>\r\n          step\r\n        </label>\r\n        <div>\r\n          <nz-input-number [(ngModel)]=\"options.step\" ></nz-input-number>\r\n        </div>\r\n      </div>\r\n      <div *ngIf=\"getType(options.min) !== 'undefined'\">\r\n        <label>\r\n          Min value\r\n        </label>\r\n        <div>\r\n          <nz-input-number [(ngModel)]=\"options.min\" ></nz-input-number>\r\n        </div>\r\n      </div>\r\n      <div *ngIf=\"getType(options.max) !== 'undefined'\">\r\n        <label>\r\n          Max value\r\n        </label>\r\n        <div>\r\n          <nz-input-number [(ngModel)]=\"options.max\" ></nz-input-number>\r\n        </div>\r\n      </div>\r\n      <div *ngIf=\"getType(options.maxLength) !== 'undefined'\">\r\n        <label>\r\n          MaxLength\r\n        </label>\r\n        <div>\r\n          <nz-input-number [(ngModel)]=\"options.maxLength\" ></nz-input-number>\r\n        </div>\r\n      </div>\r\n      <div *ngIf=\"getType(options.tabBarGutter) !== 'undefined'\">\r\n        <label>\r\n          TabBarGutter\r\n        </label>\r\n        <div>\r\n          <nz-input-number [(ngModel)]=\"options.tabBarGutter\" ></nz-input-number>\r\n        </div>\r\n      </div>\r\n      <div *ngIf=\"getType(options.precision) !== 'undefined'\">\r\n        <label>\r\n          Precision\r\n        </label>\r\n        <div>\r\n          <nz-input-number\r\n            [nzMin]=\"0\" [nzMax]=\"50\"\r\n           [(ngModel)]=\"options.precision\" ></nz-input-number>\r\n        </div>\r\n      </div>\r\n\r\n      <!-- \u9009\u9879\u914D\u7F6E\u53CA\u52A8\u6001\u6570\u636E\u914D\u7F6E start -->\r\n      <div *ngIf=\"getType(options.options) !== 'undefined'\">\r\n        <label>\r\n          Options\r\n        </label>\r\n        <div>\r\n          <app-design-form-change-option \r\n            [(ngModel)]=\"options.options\"\r\n          ></app-design-form-change-option>\r\n        </div>\r\n      </div>\r\n      <!-- \u9009\u9879\u914D\u7F6E\u53CA\u52A8\u6001\u6570\u636E\u914D\u7F6E end -->\r\n\r\n      <!-- tabs\u914D\u7F6E start -->\r\n      <div *ngIf=\"selectItem.type == 'tabs' || selectItem.type == 'selectInputList'\">\r\n        <label>\r\n          {{selectItem.type === 'tabs' ? 'Tabs Config' : 'Grid Config'}}\r\n        </label>\r\n        <div>\r\n          <app-design-form-change-option [type]=\"'tab'\" [(ngModel)]=\"selectItem.columns\"></app-design-form-change-option>\r\n        </div>\r\n      </div>\r\n      <!-- tabs\u914D\u7F6E end -->\r\n      <ng-container *ngIf=\"selectItem.type === 'tabs'\">\r\n        <!-- \u9875\u7B7E\u4F4D\u7F6E start -->\r\n        <div>\r\n          <label>\r\n            Tab position\r\n          </label>\r\n          <div>\r\n            <nz-radio-group nzButtonStyle=\"solid\" [(ngModel)]=\"options.tabPosition\">\r\n              <label nz-radio nzValue=\"top\">top</label>\r\n              <label nz-radio nzValue=\"right\">right</label>\r\n              <label nz-radio nzValue=\"bottom\">bottom</label>\r\n              <label nz-radio nzValue=\"left\">left</label>\r\n            </nz-radio-group>\r\n          </div>\r\n        </div>\r\n        <!-- \u9875\u7B7E\u4F4D\u7F6E end -->\r\n      \r\n        <!-- \u9875\u7B7E\u7C7B\u578B start -->\r\n        <div>\r\n          <label>\r\n            Tab Style\r\n          </label>\r\n          <div>\r\n            <nz-radio-group nzButtonStyle=\"solid\" [(ngModel)]=\"options.type\">\r\n              <label nz-radio nzValue=\"line\">line</label>\r\n              <label nz-radio nzValue=\"card\">card</label>\r\n            </nz-radio-group>\r\n          </div>\r\n        </div>\r\n        <!-- \u9875\u7B7E\u7C7B\u578B end -->\r\n      </ng-container>\r\n      <!-- \u9875\u7B7E\u5927\u5C0F start -->\r\n      <div *ngIf=\"getType(options.size) !== 'undefined'\">\r\n        <label>\r\n          Size\r\n        </label>\r\n        <div>\r\n          <nz-radio-group [(ngModel)]=\"options.size\">\r\n            <label nz-radio-button nzValue=\"large\">large</label>\r\n            <label nz-radio-button nzValue=\"default\">default</label>\r\n            <label nz-radio-button nzValue=\"small\">small</label>\r\n          </nz-radio-group>\r\n        </div>\r\n      </div>\r\n      <!-- \u9875\u7B7E\u5927\u5C0F end -->\r\n\r\n      <!-- grid type \u914D\u7F6E start -->\r\n      <ng-container *ngIf=\"selectItem.type === 'grid'\">\r\n        <div>\r\n          <label>\r\n            Grid Gutter\r\n          </label>\r\n          <div>\r\n            <nz-input-number [(ngModel)]=\"selectItem.options.gutter\"></nz-input-number>\r\n          </div>\r\n        </div>\r\n        <div>\r\n          <label>\r\n            Grid Config\r\n          </label>\r\n          <div>\r\n            <app-design-form-change-option [type]=\"'colspan'\" [(ngModel)]=\"selectItem.columns\"></app-design-form-change-option>\r\n          </div>\r\n        </div>\r\n      </ng-container>\r\n\r\n      <!-- grid type \u914D\u7F6E end-->\r\n\r\n      <!-- \u9ED8\u8BA4\u503C\u90E8\u5206 start -->\r\n      <div *ngIf=\"selectItem.type === 'switch'\">\r\n        <label>\r\n          Default\r\n        </label>\r\n        <div>\r\n          <nz-switch [(ngModel)]=\"options.defaultValue\"></nz-switch>\r\n        </div>\r\n      </div>\r\n      <div *ngIf=\"selectItem.type === 'number' || selectItem.type === 'slider'\">\r\n        <label>\r\n          Default\r\n        </label>\r\n        <div>\r\n          <nz-input-number\r\n            [nzStep]=\"options.step\"\r\n            [nzMin]=\"options.min || -Infinity\"\r\n            [nzMax]=\"options.max || Infinity\"\r\n            [(ngModel)]=\"options.defaultValue\"\r\n          ></nz-input-number>\r\n        </div>\r\n      </div>\r\n      <div *ngIf=\"selectItem.type === 'rate'\">\r\n        <label>\r\n          Default\r\n        </label>\r\n        <div>\r\n          <nz-rate\r\n            [nzAllowHalf]=\"options.allowHalf\"\r\n            [nzCount]=\"options.max\"\r\n            [(ngModel)]=\"options.defaultValue\"\r\n          ></nz-rate>\r\n        </div>\r\n      </div>\r\n\r\n      <!-- date -->\r\n      <ng-container *ngIf=\"selectItem.type === 'date'\">\r\n        <div>\r\n          <label>\r\n            Type\r\n          </label>\r\n          <div>\r\n            <nz-radio-group [(ngModel)]=\"options.mode\">\r\n              <label nz-radio nzValue=\"date\">Date</label>\r\n              <label nz-radio nzValue=\"week\">Week</label>\r\n              <label nz-radio nzValue=\"month\">Month</label>\r\n              <label nz-radio nzValue=\"year\">Year</label>\r\n            </nz-radio-group>\r\n          </div>\r\n        </div>\r\n        <div>\r\n          <label>\r\n            Default\r\n          </label>\r\n          <div>\r\n            <nz-date-picker [nzMode]=\"options.mode\" [(ngModel)]=\"options.defaultValue\"></nz-date-picker>\r\n          </div>\r\n        </div>\r\n      </ng-container>\r\n      <!-- date end-->\r\n\r\n\r\n      <div *ngIf=\"selectItem.type === 'select'\">\r\n        <label>\r\n          Default\r\n        </label>\r\n        <div>\r\n          <nz-select style=\"width: 100%;\"\r\n            [(ngModel)]=\"options.defaultValue\"\r\n          >\r\n          <nz-option *ngFor=\"let option of options.options\" \r\n            [nzValue]=\"option.value\" [nzLabel]=\"option.label\"></nz-option>\r\n        </nz-select>\r\n        </div>\r\n      </div>\r\n      <div *ngIf=\"selectItem.type === 'radio'\">\r\n        <label>\r\n          Default\r\n        </label>\r\n        <div>\r\n          <nz-radio-group [(ngModel)]=\"options.defaultValue\">\r\n            <label \r\n              *ngFor=\"let item of options.options\" nz-radio\r\n              [nzValue]=\"item.value\">{{item.label}}</label>\r\n          </nz-radio-group>\r\n        </div>\r\n      </div>\r\n      <div *ngIf=\"selectItem.type === 'checkbox'\">\r\n        <label>\r\n          Default\r\n        </label>\r\n        <div>\r\n          <app-design-form-item-checkbox \r\n            [options]=\"options.options\" [(ngModel)]=\"options.defaultValue\">\r\n          </app-design-form-item-checkbox>\r\n          <!-- <nz-checkbox-group></nz-checkbox-group>\r\n          <nz-radio-group [(ngModel)]=\"options.defaultValue\">\r\n            <label \r\n              *ngFor=\"let item of options.options\" nz-radio\r\n              [nzValue]=\"item.value\">{{item.label}}</label>\r\n          </nz-radio-group> -->\r\n        </div>\r\n      </div>\r\n      <div *ngIf=\"!(selectItem.type === 'number' || selectItem.type === 'radio' || selectItem.type === 'checkbox' \r\n        || selectItem.type === 'date' || selectItem.type === 'rate' || selectItem.type === 'select'\r\n        || selectItem.type === 'switch' || selectItem.type === 'slider'  || selectItem.type === 'html')\r\n          && getType(options.defaultValue) !== 'undefined'\">\r\n        <label>\r\n          Default\r\n        </label>\r\n        <div>\r\n          <input nz-input [(ngModel)]=\"options.defaultValue\"/>\r\n        </div>\r\n      </div>\r\n      <!-- \u9ED8\u8BA4\u503C\u90E8\u5206 end -->\r\n\r\n\r\n      <div *ngIf=\"getType(options.orientation) !== 'undefined'\">\r\n        <label>\r\n          Text Position\r\n        </label>\r\n        <div>\r\n          <nz-radio-group [(ngModel)]=\"options.orientation\">\r\n            <label nz-radio-button nzValue=\"left\">Left</label>\r\n            <label nz-radio-button nzValue=\"\">Center</label>\r\n            <label nz-radio-button nzValue=\"right\">Right</label>\r\n          </nz-radio-group>\r\n        </div>\r\n      </div>\r\n\r\n      <!-- button -->\r\n      <ng-container *ngIf=\"selectItem.type === 'button'\">\r\n        <div>\r\n          <label>\r\n            Button Type\r\n          </label>\r\n          <div>\r\n            <nz-radio-group [(ngModel)]=\"options.type\">\r\n              <label nz-radio nzValue=\"primary\">Primary</label>\r\n              <label nz-radio nzValue=\"default\">Default</label>\r\n              <label nz-radio nzValue=\"dashed\">Dashed</label>\r\n              <label nz-radio nzValue=\"text\">Text</label>\r\n              <label nz-radio nzValue=\"link\">Link</label>\r\n            </nz-radio-group>\r\n          </div>\r\n        </div>\r\n      </ng-container>\r\n\r\n      <!-- alert -->\r\n      <ng-container *ngIf=\"selectItem.type === 'alert'\">\r\n        <div>\r\n          <label>\r\n            Description\r\n          </label>\r\n          <div>\r\n            <input nz-input [(ngModel)]=\"options.description\">\r\n          </div>\r\n        </div>\r\n        <div>\r\n          <label>\r\n            Alert Type\r\n          </label>\r\n          <div>\r\n            <nz-radio-group nzButtonStyle=\"solid\" [(ngModel)]=\"options.type\">\r\n              <label nz-radio nzValue=\"success\">success</label>\r\n              <label nz-radio nzValue=\"info\">info</label>\r\n              <label nz-radio nzValue=\"warning\">warning</label>\r\n              <label nz-radio nzValue=\"error\">error</label>\r\n            </nz-radio-group>\r\n          </div>\r\n        </div>\r\n      </ng-container>\r\n\r\n      <!-- \u6298\u53E0\u9762\u677F start -->\r\n      <ng-container *ngIf=\"selectItem.type === 'collapse'\">\r\n        <!-- \u9875\u7B7E\u4F4D\u7F6E start -->\r\n        <div>\r\n          <label>\r\n            only one\r\n          </label>\r\n          <div>\r\n            <nz-radio-group [(ngModel)]=\"options.tabPosition\">\r\n              <label nz-radio [nzValue]=\"true\">True</label>\r\n              <label nz-radio [nzValue]=\"false\">False</label>\r\n            </nz-radio-group>\r\n          </div>\r\n        </div>\r\n        <!-- \u9875\u7B7E\u4F4D\u7F6E end -->\r\n      \r\n        <div>\r\n          <label>\r\n            Panel Config\r\n          </label>\r\n          <div>\r\n            <app-design-form-change-option [type]=\"'collapse'\" [(ngModel)]=\"selectItem.columns\"></app-design-form-change-option>\r\n          </div>\r\n        </div>\r\n        <!-- \u9875\u7B7E\u7C7B\u578B start -->\r\n      </ng-container>\r\n      <!-- \u6298\u53E0\u9762\u677F end -->\r\n\r\n      <ng-container *ngIf=\"selectItem.type === 'text'\">\r\n        <div>\r\n          <label>\r\n            Text align\r\n          </label>\r\n          <div>\r\n            <nz-radio-group nzButtonStyle=\"solid\" [(ngModel)]=\"options.textAlign\">\r\n              <label nz-radio-button nzValue=\"left\">Left</label>\r\n              <label nz-radio-button nzValue=\"center\">Center</label>\r\n              <label nz-radio-button nzValue=\"right\">Right</label>\r\n            </nz-radio-group>\r\n          </div>\r\n        </div>\r\n        <div>\r\n          <label>\r\n            Font family\r\n          </label>\r\n          <div>\r\n            <input nz-input [(ngModel)]=\"options.fontFamily\"/>\r\n          </div>\r\n        </div>\r\n        <div>\r\n          <label>\r\n            Font Size\r\n          </label>\r\n          <div>\r\n            <input nz-input [(ngModel)]=\"options.fontSize\"/>\r\n          </div>\r\n        </div>\r\n      </ng-container>\r\n      \r\n\r\n      <div *ngIf=\"getOperationProperty()\">\r\n        <label>\r\n          Operation\r\n        </label>\r\n        <div>\r\n          <label *ngIf=\"getType(options.hidden) !== 'undefined'\" nz-checkbox [(ngModel)]=\"options.hidden\">Hidden</label>\r\n          <!-- <label *ngIf=\"getType(options.disabled) !== 'undefined'\" nz-checkbox [(ngModel)]=\"options.disabled\">Disable</label> -->\r\n          <label *ngIf=\"getType(options.readonly) !== 'undefined'\" nz-checkbox [(ngModel)]=\"options.readonly\">ReadOnly</label>\r\n          <label *ngIf=\"getType(options.clearable) !== 'undefined'\" nz-checkbox [(ngModel)]=\"options.clearable\">Clearable</label>\r\n          <label *ngIf=\"getType(options.multiple) !== 'undefined'\" nz-checkbox [(ngModel)]=\"options.multiple\">Multiple</label>\r\n        </div>\r\n      </div>\r\n\r\n      <ng-container *ngIf=\"getType(selectItem.rules) !== 'undefined'\r\n      && selectItem.rules.length > 0\">\r\n        <div >\r\n          <label>\r\n            Validation\r\n          </label>\r\n          <div>\r\n            <label nz-checkbox [(ngModel)]=\"selectItem.rules[0].required\">Required</label>\r\n            <input nz-input [(ngModel)]=\"selectItem.rules[0].message\" placeholder=\"Error Tooltip\" />\r\n          </div>\r\n        </div>\r\n        <div >\r\n          <label>\r\n          </label>\r\n          <div>\r\n            <app-design-form-change-option [type]=\"'rules'\" [(ngModel)]=\"selectItem.rules\"></app-design-form-change-option>\r\n          </div>\r\n        </div>\r\n      </ng-container>\r\n      \r\n      <!-- <div *ngIf=\"getType(selectItem.help) !== 'undefined'\">\r\n        <label>\r\n          Help tooltip\r\n        </label>\r\n        <div>\r\n          <input nz-input [(ngModel)]=\"selectItem.help\" />\r\n        </div>\r\n      </div> -->\r\n    </div>\r\n  </div>\r\n</div>\r\n", styles: [":host{display:block;padding:0 10px 10px;width:100%;max-height:calc(100vh - 80px);overflow:auto}:host .properties-body>div>div{display:flex;width:100%;margin-bottom:10px}:host .properties-body>div>div>label{width:80px;line-height:32px;flex-shrink:0}:host .properties-body>div>div>div{width:calc(100% - 80px)}:host .properties-body>div>div>div input{width:100%}.option-change-container{width:calc(100% - 8px)}.option-change-box{height:38px;padding-bottom:6px}.option-change-box .option-delete-box{margin-top:3px;background:#ffe9e9;color:#f22;width:32px;height:32px;line-height:32px;text-align:center;border-radius:50%;overflow:hidden;transition:all .3s}.option-change-box .option-delete-box:hover{background:#f22;color:#fff}\n"] }]
        }], ctorParameters: () => [], propDecorators: { selectItem: [{
                type: Input
            }], hideModel: [{
                type: Input
            }], config: [{
                type: Input
            }] } });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVzaWduLWZvcm0taXRlbS1wcm9wZXJ0aWVzLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1hbnRkLWZvcm0tYnVpbGRlci9zcmMvbGliL2NvbXBvbmVudHMvZGVzaWduLWZvcm0taXRlbS1wcm9wZXJ0aWVzL2Rlc2lnbi1mb3JtLWl0ZW0tcHJvcGVydGllcy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtYW50ZC1mb3JtLWJ1aWxkZXIvc3JjL2xpYi9jb21wb25lbnRzL2Rlc2lnbi1mb3JtLWl0ZW0tcHJvcGVydGllcy9kZXNpZ24tZm9ybS1pdGVtLXByb3BlcnRpZXMuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBVSxLQUFLLEVBQXNDLE1BQU0sZUFBZSxDQUFDO0FBQzdGLE9BQU8sRUFBRSxXQUFXLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNsRSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUNqRSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDbEQsT0FBTyxFQUFFLCtCQUErQixFQUFFLE1BQU0sa0VBQWtFLENBQUM7QUFDbkgsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUNwRCxPQUFPLEVBQUUsK0JBQStCLEVBQUUsTUFBTSxrRUFBa0UsQ0FBQztBQUNuSCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDcEQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3BELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUN0RCxP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SW5qZWN0LCBJbnB1dCwgT25DaGFuZ2VzLCBPcHRpb25hbCwgU2ltcGxlQ2hhbmdlcyB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XHJcbmltcG9ydCB7IEZvcm1zTW9kdWxlLCBSZWFjdGl2ZUZvcm1zTW9kdWxlIH0gZnJvbSBcIkBhbmd1bGFyL2Zvcm1zXCI7XHJcbmltcG9ydCB7IE56SW5wdXROdW1iZXJNb2R1bGUgfSBmcm9tIFwibmctem9ycm8tYW50ZC9pbnB1dC1udW1iZXJcIjtcclxuaW1wb3J0IHsgTnpSYXRlTW9kdWxlIH0gZnJvbSBcIm5nLXpvcnJvLWFudGQvcmF0ZVwiO1xyXG5pbXBvcnQgeyBEZXNpZ25Gb3JtQ2hhbmdlT3B0aW9uQ29tcG9uZW50IH0gZnJvbSBcIi4uL2Rlc2lnbi1mb3JtLWNoYW5nZS1vcHRpb24vZGVzaWduLWZvcm0tY2hhbmdlLW9wdGlvbi5jb21wb25lbnRcIjtcclxuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSBcIkBhbmd1bGFyL2NvbW1vblwiO1xyXG5pbXBvcnQgeyBOekVtcHR5TW9kdWxlIH0gZnJvbSBcIm5nLXpvcnJvLWFudGQvZW1wdHlcIjtcclxuaW1wb3J0IHsgRGVzaWduRm9ybUl0ZW1DaGVja2JveENvbXBvbmVudCB9IGZyb20gXCIuLi9kZXNpZ24tZm9ybS1pdGVtLWNoZWNrYm94L2Rlc2lnbi1mb3JtLWl0ZW0tY2hlY2tib3guY29tcG9uZW50XCI7XHJcbmltcG9ydCB7IE56UmFkaW9Nb2R1bGUgfSBmcm9tIFwibmctem9ycm8tYW50ZC9yYWRpb1wiO1xyXG5pbXBvcnQgeyBOeklucHV0TW9kdWxlIH0gZnJvbSBcIm5nLXpvcnJvLWFudGQvaW5wdXRcIjtcclxuaW1wb3J0IHsgTnpTZWxlY3RNb2R1bGUgfSBmcm9tIFwibmctem9ycm8tYW50ZC9zZWxlY3RcIjtcclxuaW1wb3J0IHsgTnpDaGVja2JveE1vZHVsZSB9IGZyb20gXCJuZy16b3Jyby1hbnRkL2NoZWNrYm94XCI7XHJcbmltcG9ydCB7IE56RGF0ZVBpY2tlck1vZHVsZSB9IGZyb20gXCJuZy16b3Jyby1hbnRkL2RhdGUtcGlja2VyXCI7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzdGFuZGFsb25lOiB0cnVlLFxyXG4gIHNlbGVjdG9yOiAnYXBwLWRlc2lnbi1mb3JtLWl0ZW0tcHJvcGVydGllcycsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL2Rlc2lnbi1mb3JtLWl0ZW0tcHJvcGVydGllcy5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vZGVzaWduLWZvcm0taXRlbS1wcm9wZXJ0aWVzLmNvbXBvbmVudC5zY3NzJ10sXHJcbiAgaW1wb3J0czogW1xyXG4gICAgQ29tbW9uTW9kdWxlLCBGb3Jtc01vZHVsZSwgUmVhY3RpdmVGb3Jtc01vZHVsZSxcclxuICAgIE56UmF0ZU1vZHVsZSwgTnpJbnB1dE51bWJlck1vZHVsZSwgTnpFbXB0eU1vZHVsZSwgTnpSYWRpb01vZHVsZSwgTnpJbnB1dE1vZHVsZSxcclxuICAgIE56U2VsZWN0TW9kdWxlLE56Q2hlY2tib3hNb2R1bGUsTnpEYXRlUGlja2VyTW9kdWxlLFxyXG4gICAgRGVzaWduRm9ybUNoYW5nZU9wdGlvbkNvbXBvbmVudCwgRGVzaWduRm9ybUl0ZW1DaGVja2JveENvbXBvbmVudF1cclxufSlcclxuZXhwb3J0IGNsYXNzIERlc2lnbkZvcm1JdGVtUHJvcGVydGllc0NvbXBvbmVudCBpbXBsZW1lbnRzIE9uQ2hhbmdlcyB7XHJcbiAgQElucHV0KCkgc2VsZWN0SXRlbTtcclxuICBASW5wdXQoKSBoaWRlTW9kZWw7XHJcbiAgQElucHV0KCkgY29uZmlnO1xyXG4gIHNob3dNZXRhRGF0YU1vZGVsOiBib29sZWFuID0gdHJ1ZVxyXG5cclxuICBJbmZpbml0eSA9IEluZmluaXR5XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICkge1xyXG4gIH1cclxuXHJcbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xyXG4gIH1cclxuXHJcbiAgZ2V0IG9wdGlvbnMoKTogYW55IHtcclxuICAgIHJldHVybiAnb3B0aW9ucycgaW4gdGhpcy5zZWxlY3RJdGVtPyB0aGlzLnNlbGVjdEl0ZW0ub3B0aW9ucyA6IHt9O1xyXG4gIH1cclxuXHJcbiAgZ2V0IHNob3dGcmVlTW9kZWwoKSB7XHJcbiAgICByZXR1cm4gdHlwZW9mIHRoaXMuc2VsZWN0SXRlbS5rZXkgIT09ICd1bmRlZmluZWQnXHJcbiAgfVxyXG4gIGdldFR5cGUoaW5wdXQ6IHVua25vd24pIHtcclxuICAgIHJldHVybiB0eXBlb2YgaW5wdXRcclxuICB9XHJcblxyXG4gIGdldE9wZXJhdGlvblByb3BlcnR5KCkge1xyXG4gICAgcmV0dXJuIHR5cGVvZiB0aGlzLm9wdGlvbnMuaGlkZGVuICE9PSAndW5kZWZpbmVkJyB8fFxyXG4gICAgICB0eXBlb2YgdGhpcy5vcHRpb25zLnJlYWRvbmx5ICE9PSAndW5kZWZpbmVkJyB8fFxyXG4gICAgICB0eXBlb2YgdGhpcy5vcHRpb25zLmNsZWFyYWJsZSAhPT0gJ3VuZGVmaW5lZCcgfHxcclxuICAgICAgdHlwZW9mIHRoaXMub3B0aW9ucy5tdWx0aXBsZSAhPT0gJ3VuZGVmaW5lZCdcclxuICB9XHJcblxyXG4gIGNvbE92ZXJyaWRlQ2hhbmdlKCRldmVudCkge1xyXG4gICAgdGhpcy5vcHRpb25zLm92ZXJyaWRlTGF5b3V0ID0gJGV2ZW50XHJcbiAgICBpZiAoJGV2ZW50KSB7XHJcbiAgICAgIHRoaXMub3B0aW9ucy5sYWJlbENvbCA9IHsuLi50aGlzLmNvbmZpZy5sYWJlbENvbH07XHJcbiAgICAgIHRoaXMub3B0aW9ucy53cmFwcGVyQ29sID0gey4uLnRoaXMuY29uZmlnLndyYXBwZXJDb2x9O1xyXG4gICAgICB0aGlzLm9wdGlvbnMubGFiZWxXaWR0aCA9IHRoaXMuY29uZmlnLmxhYmVsV2lkdGg7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBoYW5kbGVDaGFuZ2VDb2woZSkge1xyXG4gICAgdGhpcy5vcHRpb25zLmxhYmVsQ29sLnhzID0gdGhpcy5vcHRpb25zLmxhYmVsQ29sLnNtID0gdGhpcy5vcHRpb25zLmxhYmVsQ29sLm1kID0gdGhpcy5vcHRpb25zLmxhYmVsQ29sLmxnID0gdGhpcy5vcHRpb25zLmxhYmVsQ29sLnhsID0gdGhpcy5vcHRpb25zLmxhYmVsQ29sLnh4bCA9IGU7XHJcblxyXG4gICAgdGhpcy5vcHRpb25zLndyYXBwZXJDb2wueHMgPSB0aGlzLm9wdGlvbnMud3JhcHBlckNvbC5zbSA9IHRoaXMub3B0aW9ucy53cmFwcGVyQ29sLm1kID0gdGhpcy5vcHRpb25zLndyYXBwZXJDb2wubGcgPSB0aGlzLm9wdGlvbnMud3JhcHBlckNvbC54bCA9IHRoaXMub3B0aW9ucy53cmFwcGVyQ29sLnh4bCA9XHJcbiAgICAgIDI0IC0gZTtcclxuICB9XHJcblxyXG4gIGhhbmRsZUNoYW5nZUxhYmVsQ29sKGUpIHtcclxuICAgIHRoaXMub3B0aW9ucy5sYWJlbENvbC54cyA9IHRoaXMub3B0aW9ucy5sYWJlbENvbC5zbSA9IHRoaXMub3B0aW9ucy5sYWJlbENvbC5tZCA9IHRoaXMub3B0aW9ucy5sYWJlbENvbC5sZyA9IHRoaXMub3B0aW9ucy5sYWJlbENvbC54bCA9IHRoaXMub3B0aW9ucy5sYWJlbENvbC54eGwgPSBlO1xyXG4gIH1cclxuICBoYW5kbGVDaGFuZ2VXcmFwcGVyQ29sKGUpIHtcclxuICAgIHRoaXMub3B0aW9ucy53cmFwcGVyQ29sLnhzID0gdGhpcy5vcHRpb25zLndyYXBwZXJDb2wuc20gPSB0aGlzLm9wdGlvbnMud3JhcHBlckNvbC5tZCA9IHRoaXMub3B0aW9ucy53cmFwcGVyQ29sLmxnID0gdGhpcy5vcHRpb25zLndyYXBwZXJDb2wueGwgPSB0aGlzLm9wdGlvbnMud3JhcHBlckNvbC54eGwgPSBlO1xyXG4gIH1cclxufSIsIjxkaXYgY2xhc3M9XCJwcm9wZXJ0aWVzLWNlbnRlbnQga2stY2hlY2tib3hcIj5cclxuICA8ZGl2IGNsYXNzPVwicHJvcGVydGllcy1ib2R5XCI+XHJcbiAgICA8bnotZW1wdHlcclxuICAgICAgKm5nSWY9XCJzZWxlY3RJdGVtLmtleSA9PT0gJydcIlxyXG4gICAgICBbbnpOb3RGb3VuZENvbnRlbnRdPVwiY29udGVudFRwbFwiPlxyXG4gICAgICA8bmctdGVtcGxhdGUgI2NvbnRlbnRUcGw+XHJcbiAgICAgICAgPHNwYW4+Tm8gU2VsZWN0IENvbXBvbmVudDwvc3Bhbj5cclxuICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgIDwvbnotZW1wdHk+XHJcbiAgICA8ZGl2ICpuZ0lmPVwic2VsZWN0SXRlbS5rZXkgIT09ICcnXCI+XHJcbiAgICAgIDxkaXYgKm5nSWY9XCJnZXRUeXBlKHNlbGVjdEl0ZW0ubGFiZWwpICE9PSAndW5kZWZpbmVkJ1wiPlxyXG4gICAgICAgIDxsYWJlbD5cclxuICAgICAgICAgIExhYmVsXHJcbiAgICAgICAgPC9sYWJlbD5cclxuICAgICAgICA8ZGl2PlxyXG4gICAgICAgICAgPGlucHV0IG56LWlucHV0IFsobmdNb2RlbCldPVwic2VsZWN0SXRlbS5sYWJlbFwiLz5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIDxkaXYgKm5nSWY9XCJzaG93RnJlZU1vZGVsXCI+XHJcbiAgICAgICAgPGxhYmVsPlxyXG4gICAgICAgICAga2V5XHJcbiAgICAgICAgPC9sYWJlbD5cclxuICAgICAgICA8ZGl2PlxyXG4gICAgICAgICAgPGlucHV0IG56LWlucHV0IFsobmdNb2RlbCldPVwic2VsZWN0SXRlbS5rZXlcIiAgLz5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcblxyXG4gICAgICA8aHI+XHJcbiAgICAgIDwhLS0gaW5wdXQgdHlwZSBzdGFydCAtLT5cclxuICAgICAgPGRpdiAqbmdJZj1cInNlbGVjdEl0ZW0udHlwZSA9PT0gJ2lucHV0J1wiPlxyXG4gICAgICAgIDxsYWJlbD5cclxuICAgICAgICAgIElucHV0IFR5cGVcclxuICAgICAgICA8L2xhYmVsPlxyXG4gICAgICAgIDxkaXY+XHJcbiAgICAgICAgICA8aW5wdXQgbnotaW5wdXQgWyhuZ01vZGVsKV09XCJvcHRpb25zLnR5cGVcIiAgLz5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIDwhLS0gaW5wdXQgdHlwZSBlbmQgLS0+XHJcblxyXG4gICAgICA8ZGl2ICpuZ0lmPVwiZ2V0VHlwZShvcHRpb25zLnJhbmdlUGxhY2Vob2xkZXIpICE9PSAndW5kZWZpbmVkJyAmJiBvcHRpb25zLnJhbmdlOyBlbHNlIHBsYWNlSG9sZGVyRWxzZVwiPlxyXG4gICAgICAgIDxsYWJlbD5cclxuICAgICAgICAgIHBsYWNlaG9sZGVyXHJcbiAgICAgICAgPC9sYWJlbD5cclxuICAgICAgICA8ZGl2PlxyXG4gICAgICAgICAgPGlucHV0IG56LWlucHV0IFsobmdNb2RlbCldPVwib3B0aW9ucy5yYW5nZVBsYWNlaG9sZGVyWzBdXCIgIC8+XHJcbiAgICAgICAgICA8aW5wdXQgbnotaW5wdXQgWyhuZ01vZGVsKV09XCJvcHRpb25zLnJhbmdlUGxhY2Vob2xkZXJbMV1cIiAvPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgPG5nLXRlbXBsYXRlICNwbGFjZUhvbGRlckVsc2U+XHJcbiAgICAgICAgPGRpdiAqbmdJZj1cImdldFR5cGUob3B0aW9ucy5wbGFjZWhvbGRlcikgIT09ICd1bmRlZmluZWQnXCI+XHJcbiAgICAgICAgICA8bGFiZWw+XHJcbiAgICAgICAgICAgIFBsYWNlaG9sZGVyXHJcbiAgICAgICAgICA8L2xhYmVsPlxyXG4gICAgICAgICAgPGRpdj5cclxuICAgICAgICAgICAgPGlucHV0IG56LWlucHV0IFsobmdNb2RlbCldPVwib3B0aW9ucy5wbGFjZWhvbGRlclwiIHBsYWNlaG9sZGVyPVwiUGxhY2Vob2xkZXJcIiAvPlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvbmctdGVtcGxhdGU+XHJcblxyXG4gICAgICA8ZGl2ICpuZ0lmPVwic2VsZWN0SXRlbS50eXBlID09PSAndGV4dGFyZWEnXCI+XHJcbiAgICAgICAgPGxhYmVsPlxyXG4gICAgICAgICAgU2l6ZVxyXG4gICAgICAgIDwvbGFiZWw+XHJcbiAgICAgICAgPGRpdj5cclxuICAgICAgICAgIDxuei1pbnB1dC1udW1iZXIgbnpQbGFjZUhvbGRlcj1cIk1pbiBSb3dzXCIgWyhuZ01vZGVsKV09XCJvcHRpb25zLm1pblJvd3NcIj48L256LWlucHV0LW51bWJlcj5cclxuICAgICAgICAgIDxuei1pbnB1dC1udW1iZXIgbnpQbGFjZUhvbGRlcj1cIk1heCBSb3dzXCIgWyhuZ01vZGVsKV09XCJvcHRpb25zLm1heFJvd3NcIj48L256LWlucHV0LW51bWJlcj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcblxyXG4gICAgICA8ZGl2ICpuZ0lmPVwiZ2V0VHlwZShvcHRpb25zLndpZHRoKSAhPT0gJ3VuZGVmaW5lZCdcIj5cclxuICAgICAgICA8bGFiZWw+XHJcbiAgICAgICAgICBXaWR0aFxyXG4gICAgICAgIDwvbGFiZWw+XHJcbiAgICAgICAgPGRpdj5cclxuICAgICAgICAgIDxpbnB1dCBuei1pbnB1dCBbKG5nTW9kZWwpXT1cIm9wdGlvbnMud2lkdGhcIiAgLz5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIDxkaXYgKm5nSWY9XCJnZXRUeXBlKG9wdGlvbnMuaGVpZ2h0KSAhPT0gJ3VuZGVmaW5lZCdcIj5cclxuICAgICAgICA8bGFiZWw+XHJcbiAgICAgICAgICBIZWlnaHRcclxuICAgICAgICA8L2xhYmVsPlxyXG4gICAgICAgIDxkaXY+XHJcbiAgICAgICAgICA8bnotaW5wdXQtbnVtYmVyIFsobmdNb2RlbCldPVwib3B0aW9ucy5oZWlnaHRcIiA+PC9uei1pbnB1dC1udW1iZXI+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICA8ZGl2ICpuZ0lmPVwiZ2V0VHlwZShvcHRpb25zLnN0ZXApICE9PSAndW5kZWZpbmVkJ1wiPlxyXG4gICAgICAgIDxsYWJlbD5cclxuICAgICAgICAgIHN0ZXBcclxuICAgICAgICA8L2xhYmVsPlxyXG4gICAgICAgIDxkaXY+XHJcbiAgICAgICAgICA8bnotaW5wdXQtbnVtYmVyIFsobmdNb2RlbCldPVwib3B0aW9ucy5zdGVwXCIgPjwvbnotaW5wdXQtbnVtYmVyPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgPGRpdiAqbmdJZj1cImdldFR5cGUob3B0aW9ucy5taW4pICE9PSAndW5kZWZpbmVkJ1wiPlxyXG4gICAgICAgIDxsYWJlbD5cclxuICAgICAgICAgIE1pbiB2YWx1ZVxyXG4gICAgICAgIDwvbGFiZWw+XHJcbiAgICAgICAgPGRpdj5cclxuICAgICAgICAgIDxuei1pbnB1dC1udW1iZXIgWyhuZ01vZGVsKV09XCJvcHRpb25zLm1pblwiID48L256LWlucHV0LW51bWJlcj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIDxkaXYgKm5nSWY9XCJnZXRUeXBlKG9wdGlvbnMubWF4KSAhPT0gJ3VuZGVmaW5lZCdcIj5cclxuICAgICAgICA8bGFiZWw+XHJcbiAgICAgICAgICBNYXggdmFsdWVcclxuICAgICAgICA8L2xhYmVsPlxyXG4gICAgICAgIDxkaXY+XHJcbiAgICAgICAgICA8bnotaW5wdXQtbnVtYmVyIFsobmdNb2RlbCldPVwib3B0aW9ucy5tYXhcIiA+PC9uei1pbnB1dC1udW1iZXI+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICA8ZGl2ICpuZ0lmPVwiZ2V0VHlwZShvcHRpb25zLm1heExlbmd0aCkgIT09ICd1bmRlZmluZWQnXCI+XHJcbiAgICAgICAgPGxhYmVsPlxyXG4gICAgICAgICAgTWF4TGVuZ3RoXHJcbiAgICAgICAgPC9sYWJlbD5cclxuICAgICAgICA8ZGl2PlxyXG4gICAgICAgICAgPG56LWlucHV0LW51bWJlciBbKG5nTW9kZWwpXT1cIm9wdGlvbnMubWF4TGVuZ3RoXCIgPjwvbnotaW5wdXQtbnVtYmVyPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgPGRpdiAqbmdJZj1cImdldFR5cGUob3B0aW9ucy50YWJCYXJHdXR0ZXIpICE9PSAndW5kZWZpbmVkJ1wiPlxyXG4gICAgICAgIDxsYWJlbD5cclxuICAgICAgICAgIFRhYkJhckd1dHRlclxyXG4gICAgICAgIDwvbGFiZWw+XHJcbiAgICAgICAgPGRpdj5cclxuICAgICAgICAgIDxuei1pbnB1dC1udW1iZXIgWyhuZ01vZGVsKV09XCJvcHRpb25zLnRhYkJhckd1dHRlclwiID48L256LWlucHV0LW51bWJlcj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIDxkaXYgKm5nSWY9XCJnZXRUeXBlKG9wdGlvbnMucHJlY2lzaW9uKSAhPT0gJ3VuZGVmaW5lZCdcIj5cclxuICAgICAgICA8bGFiZWw+XHJcbiAgICAgICAgICBQcmVjaXNpb25cclxuICAgICAgICA8L2xhYmVsPlxyXG4gICAgICAgIDxkaXY+XHJcbiAgICAgICAgICA8bnotaW5wdXQtbnVtYmVyXHJcbiAgICAgICAgICAgIFtuek1pbl09XCIwXCIgW256TWF4XT1cIjUwXCJcclxuICAgICAgICAgICBbKG5nTW9kZWwpXT1cIm9wdGlvbnMucHJlY2lzaW9uXCIgPjwvbnotaW5wdXQtbnVtYmVyPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuXHJcbiAgICAgIDwhLS0g6YCJ6aG56YWN572u5Y+K5Yqo5oCB5pWw5o2u6YWN572uIHN0YXJ0IC0tPlxyXG4gICAgICA8ZGl2ICpuZ0lmPVwiZ2V0VHlwZShvcHRpb25zLm9wdGlvbnMpICE9PSAndW5kZWZpbmVkJ1wiPlxyXG4gICAgICAgIDxsYWJlbD5cclxuICAgICAgICAgIE9wdGlvbnNcclxuICAgICAgICA8L2xhYmVsPlxyXG4gICAgICAgIDxkaXY+XHJcbiAgICAgICAgICA8YXBwLWRlc2lnbi1mb3JtLWNoYW5nZS1vcHRpb24gXHJcbiAgICAgICAgICAgIFsobmdNb2RlbCldPVwib3B0aW9ucy5vcHRpb25zXCJcclxuICAgICAgICAgID48L2FwcC1kZXNpZ24tZm9ybS1jaGFuZ2Utb3B0aW9uPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgPCEtLSDpgInpobnphY3nva7lj4rliqjmgIHmlbDmja7phY3nva4gZW5kIC0tPlxyXG5cclxuICAgICAgPCEtLSB0YWJz6YWN572uIHN0YXJ0IC0tPlxyXG4gICAgICA8ZGl2ICpuZ0lmPVwic2VsZWN0SXRlbS50eXBlID09ICd0YWJzJyB8fCBzZWxlY3RJdGVtLnR5cGUgPT0gJ3NlbGVjdElucHV0TGlzdCdcIj5cclxuICAgICAgICA8bGFiZWw+XHJcbiAgICAgICAgICB7e3NlbGVjdEl0ZW0udHlwZSA9PT0gJ3RhYnMnID8gJ1RhYnMgQ29uZmlnJyA6ICdHcmlkIENvbmZpZyd9fVxyXG4gICAgICAgIDwvbGFiZWw+XHJcbiAgICAgICAgPGRpdj5cclxuICAgICAgICAgIDxhcHAtZGVzaWduLWZvcm0tY2hhbmdlLW9wdGlvbiBbdHlwZV09XCIndGFiJ1wiIFsobmdNb2RlbCldPVwic2VsZWN0SXRlbS5jb2x1bW5zXCI+PC9hcHAtZGVzaWduLWZvcm0tY2hhbmdlLW9wdGlvbj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIDwhLS0gdGFic+mFjee9riBlbmQgLS0+XHJcbiAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJzZWxlY3RJdGVtLnR5cGUgPT09ICd0YWJzJ1wiPlxyXG4gICAgICAgIDwhLS0g6aG1562+5L2N572uIHN0YXJ0IC0tPlxyXG4gICAgICAgIDxkaXY+XHJcbiAgICAgICAgICA8bGFiZWw+XHJcbiAgICAgICAgICAgIFRhYiBwb3NpdGlvblxyXG4gICAgICAgICAgPC9sYWJlbD5cclxuICAgICAgICAgIDxkaXY+XHJcbiAgICAgICAgICAgIDxuei1yYWRpby1ncm91cCBuekJ1dHRvblN0eWxlPVwic29saWRcIiBbKG5nTW9kZWwpXT1cIm9wdGlvbnMudGFiUG9zaXRpb25cIj5cclxuICAgICAgICAgICAgICA8bGFiZWwgbnotcmFkaW8gbnpWYWx1ZT1cInRvcFwiPnRvcDwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgPGxhYmVsIG56LXJhZGlvIG56VmFsdWU9XCJyaWdodFwiPnJpZ2h0PC9sYWJlbD5cclxuICAgICAgICAgICAgICA8bGFiZWwgbnotcmFkaW8gbnpWYWx1ZT1cImJvdHRvbVwiPmJvdHRvbTwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgPGxhYmVsIG56LXJhZGlvIG56VmFsdWU9XCJsZWZ0XCI+bGVmdDwvbGFiZWw+XHJcbiAgICAgICAgICAgIDwvbnotcmFkaW8tZ3JvdXA+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8IS0tIOmhteetvuS9jee9riBlbmQgLS0+XHJcbiAgICAgIFxyXG4gICAgICAgIDwhLS0g6aG1562+57G75Z6LIHN0YXJ0IC0tPlxyXG4gICAgICAgIDxkaXY+XHJcbiAgICAgICAgICA8bGFiZWw+XHJcbiAgICAgICAgICAgIFRhYiBTdHlsZVxyXG4gICAgICAgICAgPC9sYWJlbD5cclxuICAgICAgICAgIDxkaXY+XHJcbiAgICAgICAgICAgIDxuei1yYWRpby1ncm91cCBuekJ1dHRvblN0eWxlPVwic29saWRcIiBbKG5nTW9kZWwpXT1cIm9wdGlvbnMudHlwZVwiPlxyXG4gICAgICAgICAgICAgIDxsYWJlbCBuei1yYWRpbyBuelZhbHVlPVwibGluZVwiPmxpbmU8L2xhYmVsPlxyXG4gICAgICAgICAgICAgIDxsYWJlbCBuei1yYWRpbyBuelZhbHVlPVwiY2FyZFwiPmNhcmQ8L2xhYmVsPlxyXG4gICAgICAgICAgICA8L256LXJhZGlvLWdyb3VwPlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPCEtLSDpobXnrb7nsbvlnosgZW5kIC0tPlxyXG4gICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgPCEtLSDpobXnrb7lpKflsI8gc3RhcnQgLS0+XHJcbiAgICAgIDxkaXYgKm5nSWY9XCJnZXRUeXBlKG9wdGlvbnMuc2l6ZSkgIT09ICd1bmRlZmluZWQnXCI+XHJcbiAgICAgICAgPGxhYmVsPlxyXG4gICAgICAgICAgU2l6ZVxyXG4gICAgICAgIDwvbGFiZWw+XHJcbiAgICAgICAgPGRpdj5cclxuICAgICAgICAgIDxuei1yYWRpby1ncm91cCBbKG5nTW9kZWwpXT1cIm9wdGlvbnMuc2l6ZVwiPlxyXG4gICAgICAgICAgICA8bGFiZWwgbnotcmFkaW8tYnV0dG9uIG56VmFsdWU9XCJsYXJnZVwiPmxhcmdlPC9sYWJlbD5cclxuICAgICAgICAgICAgPGxhYmVsIG56LXJhZGlvLWJ1dHRvbiBuelZhbHVlPVwiZGVmYXVsdFwiPmRlZmF1bHQ8L2xhYmVsPlxyXG4gICAgICAgICAgICA8bGFiZWwgbnotcmFkaW8tYnV0dG9uIG56VmFsdWU9XCJzbWFsbFwiPnNtYWxsPC9sYWJlbD5cclxuICAgICAgICAgIDwvbnotcmFkaW8tZ3JvdXA+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICA8IS0tIOmhteetvuWkp+WwjyBlbmQgLS0+XHJcblxyXG4gICAgICA8IS0tIGdyaWQgdHlwZSDphY3nva4gc3RhcnQgLS0+XHJcbiAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJzZWxlY3RJdGVtLnR5cGUgPT09ICdncmlkJ1wiPlxyXG4gICAgICAgIDxkaXY+XHJcbiAgICAgICAgICA8bGFiZWw+XHJcbiAgICAgICAgICAgIEdyaWQgR3V0dGVyXHJcbiAgICAgICAgICA8L2xhYmVsPlxyXG4gICAgICAgICAgPGRpdj5cclxuICAgICAgICAgICAgPG56LWlucHV0LW51bWJlciBbKG5nTW9kZWwpXT1cInNlbGVjdEl0ZW0ub3B0aW9ucy5ndXR0ZXJcIj48L256LWlucHV0LW51bWJlcj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXY+XHJcbiAgICAgICAgICA8bGFiZWw+XHJcbiAgICAgICAgICAgIEdyaWQgQ29uZmlnXHJcbiAgICAgICAgICA8L2xhYmVsPlxyXG4gICAgICAgICAgPGRpdj5cclxuICAgICAgICAgICAgPGFwcC1kZXNpZ24tZm9ybS1jaGFuZ2Utb3B0aW9uIFt0eXBlXT1cIidjb2xzcGFuJ1wiIFsobmdNb2RlbCldPVwic2VsZWN0SXRlbS5jb2x1bW5zXCI+PC9hcHAtZGVzaWduLWZvcm0tY2hhbmdlLW9wdGlvbj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgICAgIDwhLS0gZ3JpZCB0eXBlIOmFjee9riBlbmQtLT5cclxuXHJcbiAgICAgIDwhLS0g6buY6K6k5YC86YOo5YiGIHN0YXJ0IC0tPlxyXG4gICAgICA8ZGl2ICpuZ0lmPVwic2VsZWN0SXRlbS50eXBlID09PSAnc3dpdGNoJ1wiPlxyXG4gICAgICAgIDxsYWJlbD5cclxuICAgICAgICAgIERlZmF1bHRcclxuICAgICAgICA8L2xhYmVsPlxyXG4gICAgICAgIDxkaXY+XHJcbiAgICAgICAgICA8bnotc3dpdGNoIFsobmdNb2RlbCldPVwib3B0aW9ucy5kZWZhdWx0VmFsdWVcIj48L256LXN3aXRjaD5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIDxkaXYgKm5nSWY9XCJzZWxlY3RJdGVtLnR5cGUgPT09ICdudW1iZXInIHx8IHNlbGVjdEl0ZW0udHlwZSA9PT0gJ3NsaWRlcidcIj5cclxuICAgICAgICA8bGFiZWw+XHJcbiAgICAgICAgICBEZWZhdWx0XHJcbiAgICAgICAgPC9sYWJlbD5cclxuICAgICAgICA8ZGl2PlxyXG4gICAgICAgICAgPG56LWlucHV0LW51bWJlclxyXG4gICAgICAgICAgICBbbnpTdGVwXT1cIm9wdGlvbnMuc3RlcFwiXHJcbiAgICAgICAgICAgIFtuek1pbl09XCJvcHRpb25zLm1pbiB8fCAtSW5maW5pdHlcIlxyXG4gICAgICAgICAgICBbbnpNYXhdPVwib3B0aW9ucy5tYXggfHwgSW5maW5pdHlcIlxyXG4gICAgICAgICAgICBbKG5nTW9kZWwpXT1cIm9wdGlvbnMuZGVmYXVsdFZhbHVlXCJcclxuICAgICAgICAgID48L256LWlucHV0LW51bWJlcj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIDxkaXYgKm5nSWY9XCJzZWxlY3RJdGVtLnR5cGUgPT09ICdyYXRlJ1wiPlxyXG4gICAgICAgIDxsYWJlbD5cclxuICAgICAgICAgIERlZmF1bHRcclxuICAgICAgICA8L2xhYmVsPlxyXG4gICAgICAgIDxkaXY+XHJcbiAgICAgICAgICA8bnotcmF0ZVxyXG4gICAgICAgICAgICBbbnpBbGxvd0hhbGZdPVwib3B0aW9ucy5hbGxvd0hhbGZcIlxyXG4gICAgICAgICAgICBbbnpDb3VudF09XCJvcHRpb25zLm1heFwiXHJcbiAgICAgICAgICAgIFsobmdNb2RlbCldPVwib3B0aW9ucy5kZWZhdWx0VmFsdWVcIlxyXG4gICAgICAgICAgPjwvbnotcmF0ZT5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcblxyXG4gICAgICA8IS0tIGRhdGUgLS0+XHJcbiAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJzZWxlY3RJdGVtLnR5cGUgPT09ICdkYXRlJ1wiPlxyXG4gICAgICAgIDxkaXY+XHJcbiAgICAgICAgICA8bGFiZWw+XHJcbiAgICAgICAgICAgIFR5cGVcclxuICAgICAgICAgIDwvbGFiZWw+XHJcbiAgICAgICAgICA8ZGl2PlxyXG4gICAgICAgICAgICA8bnotcmFkaW8tZ3JvdXAgWyhuZ01vZGVsKV09XCJvcHRpb25zLm1vZGVcIj5cclxuICAgICAgICAgICAgICA8bGFiZWwgbnotcmFkaW8gbnpWYWx1ZT1cImRhdGVcIj5EYXRlPC9sYWJlbD5cclxuICAgICAgICAgICAgICA8bGFiZWwgbnotcmFkaW8gbnpWYWx1ZT1cIndlZWtcIj5XZWVrPC9sYWJlbD5cclxuICAgICAgICAgICAgICA8bGFiZWwgbnotcmFkaW8gbnpWYWx1ZT1cIm1vbnRoXCI+TW9udGg8L2xhYmVsPlxyXG4gICAgICAgICAgICAgIDxsYWJlbCBuei1yYWRpbyBuelZhbHVlPVwieWVhclwiPlllYXI8L2xhYmVsPlxyXG4gICAgICAgICAgICA8L256LXJhZGlvLWdyb3VwPlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGRpdj5cclxuICAgICAgICAgIDxsYWJlbD5cclxuICAgICAgICAgICAgRGVmYXVsdFxyXG4gICAgICAgICAgPC9sYWJlbD5cclxuICAgICAgICAgIDxkaXY+XHJcbiAgICAgICAgICAgIDxuei1kYXRlLXBpY2tlciBbbnpNb2RlXT1cIm9wdGlvbnMubW9kZVwiIFsobmdNb2RlbCldPVwib3B0aW9ucy5kZWZhdWx0VmFsdWVcIj48L256LWRhdGUtcGlja2VyPlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICA8IS0tIGRhdGUgZW5kLS0+XHJcblxyXG5cclxuICAgICAgPGRpdiAqbmdJZj1cInNlbGVjdEl0ZW0udHlwZSA9PT0gJ3NlbGVjdCdcIj5cclxuICAgICAgICA8bGFiZWw+XHJcbiAgICAgICAgICBEZWZhdWx0XHJcbiAgICAgICAgPC9sYWJlbD5cclxuICAgICAgICA8ZGl2PlxyXG4gICAgICAgICAgPG56LXNlbGVjdCBzdHlsZT1cIndpZHRoOiAxMDAlO1wiXHJcbiAgICAgICAgICAgIFsobmdNb2RlbCldPVwib3B0aW9ucy5kZWZhdWx0VmFsdWVcIlxyXG4gICAgICAgICAgPlxyXG4gICAgICAgICAgPG56LW9wdGlvbiAqbmdGb3I9XCJsZXQgb3B0aW9uIG9mIG9wdGlvbnMub3B0aW9uc1wiIFxyXG4gICAgICAgICAgICBbbnpWYWx1ZV09XCJvcHRpb24udmFsdWVcIiBbbnpMYWJlbF09XCJvcHRpb24ubGFiZWxcIj48L256LW9wdGlvbj5cclxuICAgICAgICA8L256LXNlbGVjdD5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIDxkaXYgKm5nSWY9XCJzZWxlY3RJdGVtLnR5cGUgPT09ICdyYWRpbydcIj5cclxuICAgICAgICA8bGFiZWw+XHJcbiAgICAgICAgICBEZWZhdWx0XHJcbiAgICAgICAgPC9sYWJlbD5cclxuICAgICAgICA8ZGl2PlxyXG4gICAgICAgICAgPG56LXJhZGlvLWdyb3VwIFsobmdNb2RlbCldPVwib3B0aW9ucy5kZWZhdWx0VmFsdWVcIj5cclxuICAgICAgICAgICAgPGxhYmVsIFxyXG4gICAgICAgICAgICAgICpuZ0Zvcj1cImxldCBpdGVtIG9mIG9wdGlvbnMub3B0aW9uc1wiIG56LXJhZGlvXHJcbiAgICAgICAgICAgICAgW256VmFsdWVdPVwiaXRlbS52YWx1ZVwiPnt7aXRlbS5sYWJlbH19PC9sYWJlbD5cclxuICAgICAgICAgIDwvbnotcmFkaW8tZ3JvdXA+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICA8ZGl2ICpuZ0lmPVwic2VsZWN0SXRlbS50eXBlID09PSAnY2hlY2tib3gnXCI+XHJcbiAgICAgICAgPGxhYmVsPlxyXG4gICAgICAgICAgRGVmYXVsdFxyXG4gICAgICAgIDwvbGFiZWw+XHJcbiAgICAgICAgPGRpdj5cclxuICAgICAgICAgIDxhcHAtZGVzaWduLWZvcm0taXRlbS1jaGVja2JveCBcclxuICAgICAgICAgICAgW29wdGlvbnNdPVwib3B0aW9ucy5vcHRpb25zXCIgWyhuZ01vZGVsKV09XCJvcHRpb25zLmRlZmF1bHRWYWx1ZVwiPlxyXG4gICAgICAgICAgPC9hcHAtZGVzaWduLWZvcm0taXRlbS1jaGVja2JveD5cclxuICAgICAgICAgIDwhLS0gPG56LWNoZWNrYm94LWdyb3VwPjwvbnotY2hlY2tib3gtZ3JvdXA+XHJcbiAgICAgICAgICA8bnotcmFkaW8tZ3JvdXAgWyhuZ01vZGVsKV09XCJvcHRpb25zLmRlZmF1bHRWYWx1ZVwiPlxyXG4gICAgICAgICAgICA8bGFiZWwgXHJcbiAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IGl0ZW0gb2Ygb3B0aW9ucy5vcHRpb25zXCIgbnotcmFkaW9cclxuICAgICAgICAgICAgICBbbnpWYWx1ZV09XCJpdGVtLnZhbHVlXCI+e3tpdGVtLmxhYmVsfX08L2xhYmVsPlxyXG4gICAgICAgICAgPC9uei1yYWRpby1ncm91cD4gLS0+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICA8ZGl2ICpuZ0lmPVwiIShzZWxlY3RJdGVtLnR5cGUgPT09ICdudW1iZXInIHx8IHNlbGVjdEl0ZW0udHlwZSA9PT0gJ3JhZGlvJyB8fCBzZWxlY3RJdGVtLnR5cGUgPT09ICdjaGVja2JveCcgXHJcbiAgICAgICAgfHwgc2VsZWN0SXRlbS50eXBlID09PSAnZGF0ZScgfHwgc2VsZWN0SXRlbS50eXBlID09PSAncmF0ZScgfHwgc2VsZWN0SXRlbS50eXBlID09PSAnc2VsZWN0J1xyXG4gICAgICAgIHx8IHNlbGVjdEl0ZW0udHlwZSA9PT0gJ3N3aXRjaCcgfHwgc2VsZWN0SXRlbS50eXBlID09PSAnc2xpZGVyJyAgfHwgc2VsZWN0SXRlbS50eXBlID09PSAnaHRtbCcpXHJcbiAgICAgICAgICAmJiBnZXRUeXBlKG9wdGlvbnMuZGVmYXVsdFZhbHVlKSAhPT0gJ3VuZGVmaW5lZCdcIj5cclxuICAgICAgICA8bGFiZWw+XHJcbiAgICAgICAgICBEZWZhdWx0XHJcbiAgICAgICAgPC9sYWJlbD5cclxuICAgICAgICA8ZGl2PlxyXG4gICAgICAgICAgPGlucHV0IG56LWlucHV0IFsobmdNb2RlbCldPVwib3B0aW9ucy5kZWZhdWx0VmFsdWVcIi8+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICA8IS0tIOm7mOiupOWAvOmDqOWIhiBlbmQgLS0+XHJcblxyXG5cclxuICAgICAgPGRpdiAqbmdJZj1cImdldFR5cGUob3B0aW9ucy5vcmllbnRhdGlvbikgIT09ICd1bmRlZmluZWQnXCI+XHJcbiAgICAgICAgPGxhYmVsPlxyXG4gICAgICAgICAgVGV4dCBQb3NpdGlvblxyXG4gICAgICAgIDwvbGFiZWw+XHJcbiAgICAgICAgPGRpdj5cclxuICAgICAgICAgIDxuei1yYWRpby1ncm91cCBbKG5nTW9kZWwpXT1cIm9wdGlvbnMub3JpZW50YXRpb25cIj5cclxuICAgICAgICAgICAgPGxhYmVsIG56LXJhZGlvLWJ1dHRvbiBuelZhbHVlPVwibGVmdFwiPkxlZnQ8L2xhYmVsPlxyXG4gICAgICAgICAgICA8bGFiZWwgbnotcmFkaW8tYnV0dG9uIG56VmFsdWU9XCJcIj5DZW50ZXI8L2xhYmVsPlxyXG4gICAgICAgICAgICA8bGFiZWwgbnotcmFkaW8tYnV0dG9uIG56VmFsdWU9XCJyaWdodFwiPlJpZ2h0PC9sYWJlbD5cclxuICAgICAgICAgIDwvbnotcmFkaW8tZ3JvdXA+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgPCEtLSBidXR0b24gLS0+XHJcbiAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJzZWxlY3RJdGVtLnR5cGUgPT09ICdidXR0b24nXCI+XHJcbiAgICAgICAgPGRpdj5cclxuICAgICAgICAgIDxsYWJlbD5cclxuICAgICAgICAgICAgQnV0dG9uIFR5cGVcclxuICAgICAgICAgIDwvbGFiZWw+XHJcbiAgICAgICAgICA8ZGl2PlxyXG4gICAgICAgICAgICA8bnotcmFkaW8tZ3JvdXAgWyhuZ01vZGVsKV09XCJvcHRpb25zLnR5cGVcIj5cclxuICAgICAgICAgICAgICA8bGFiZWwgbnotcmFkaW8gbnpWYWx1ZT1cInByaW1hcnlcIj5QcmltYXJ5PC9sYWJlbD5cclxuICAgICAgICAgICAgICA8bGFiZWwgbnotcmFkaW8gbnpWYWx1ZT1cImRlZmF1bHRcIj5EZWZhdWx0PC9sYWJlbD5cclxuICAgICAgICAgICAgICA8bGFiZWwgbnotcmFkaW8gbnpWYWx1ZT1cImRhc2hlZFwiPkRhc2hlZDwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgPGxhYmVsIG56LXJhZGlvIG56VmFsdWU9XCJ0ZXh0XCI+VGV4dDwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgPGxhYmVsIG56LXJhZGlvIG56VmFsdWU9XCJsaW5rXCI+TGluazwvbGFiZWw+XHJcbiAgICAgICAgICAgIDwvbnotcmFkaW8tZ3JvdXA+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgICA8IS0tIGFsZXJ0IC0tPlxyXG4gICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwic2VsZWN0SXRlbS50eXBlID09PSAnYWxlcnQnXCI+XHJcbiAgICAgICAgPGRpdj5cclxuICAgICAgICAgIDxsYWJlbD5cclxuICAgICAgICAgICAgRGVzY3JpcHRpb25cclxuICAgICAgICAgIDwvbGFiZWw+XHJcbiAgICAgICAgICA8ZGl2PlxyXG4gICAgICAgICAgICA8aW5wdXQgbnotaW5wdXQgWyhuZ01vZGVsKV09XCJvcHRpb25zLmRlc2NyaXB0aW9uXCI+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8ZGl2PlxyXG4gICAgICAgICAgPGxhYmVsPlxyXG4gICAgICAgICAgICBBbGVydCBUeXBlXHJcbiAgICAgICAgICA8L2xhYmVsPlxyXG4gICAgICAgICAgPGRpdj5cclxuICAgICAgICAgICAgPG56LXJhZGlvLWdyb3VwIG56QnV0dG9uU3R5bGU9XCJzb2xpZFwiIFsobmdNb2RlbCldPVwib3B0aW9ucy50eXBlXCI+XHJcbiAgICAgICAgICAgICAgPGxhYmVsIG56LXJhZGlvIG56VmFsdWU9XCJzdWNjZXNzXCI+c3VjY2VzczwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgPGxhYmVsIG56LXJhZGlvIG56VmFsdWU9XCJpbmZvXCI+aW5mbzwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgPGxhYmVsIG56LXJhZGlvIG56VmFsdWU9XCJ3YXJuaW5nXCI+d2FybmluZzwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgPGxhYmVsIG56LXJhZGlvIG56VmFsdWU9XCJlcnJvclwiPmVycm9yPC9sYWJlbD5cclxuICAgICAgICAgICAgPC9uei1yYWRpby1ncm91cD5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgICAgIDwhLS0g5oqY5Y+g6Z2i5p2/IHN0YXJ0IC0tPlxyXG4gICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwic2VsZWN0SXRlbS50eXBlID09PSAnY29sbGFwc2UnXCI+XHJcbiAgICAgICAgPCEtLSDpobXnrb7kvY3nva4gc3RhcnQgLS0+XHJcbiAgICAgICAgPGRpdj5cclxuICAgICAgICAgIDxsYWJlbD5cclxuICAgICAgICAgICAgb25seSBvbmVcclxuICAgICAgICAgIDwvbGFiZWw+XHJcbiAgICAgICAgICA8ZGl2PlxyXG4gICAgICAgICAgICA8bnotcmFkaW8tZ3JvdXAgWyhuZ01vZGVsKV09XCJvcHRpb25zLnRhYlBvc2l0aW9uXCI+XHJcbiAgICAgICAgICAgICAgPGxhYmVsIG56LXJhZGlvIFtuelZhbHVlXT1cInRydWVcIj5UcnVlPC9sYWJlbD5cclxuICAgICAgICAgICAgICA8bGFiZWwgbnotcmFkaW8gW256VmFsdWVdPVwiZmFsc2VcIj5GYWxzZTwvbGFiZWw+XHJcbiAgICAgICAgICAgIDwvbnotcmFkaW8tZ3JvdXA+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8IS0tIOmhteetvuS9jee9riBlbmQgLS0+XHJcbiAgICAgIFxyXG4gICAgICAgIDxkaXY+XHJcbiAgICAgICAgICA8bGFiZWw+XHJcbiAgICAgICAgICAgIFBhbmVsIENvbmZpZ1xyXG4gICAgICAgICAgPC9sYWJlbD5cclxuICAgICAgICAgIDxkaXY+XHJcbiAgICAgICAgICAgIDxhcHAtZGVzaWduLWZvcm0tY2hhbmdlLW9wdGlvbiBbdHlwZV09XCInY29sbGFwc2UnXCIgWyhuZ01vZGVsKV09XCJzZWxlY3RJdGVtLmNvbHVtbnNcIj48L2FwcC1kZXNpZ24tZm9ybS1jaGFuZ2Utb3B0aW9uPlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPCEtLSDpobXnrb7nsbvlnosgc3RhcnQgLS0+XHJcbiAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICA8IS0tIOaKmOWPoOmdouadvyBlbmQgLS0+XHJcblxyXG4gICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwic2VsZWN0SXRlbS50eXBlID09PSAndGV4dCdcIj5cclxuICAgICAgICA8ZGl2PlxyXG4gICAgICAgICAgPGxhYmVsPlxyXG4gICAgICAgICAgICBUZXh0IGFsaWduXHJcbiAgICAgICAgICA8L2xhYmVsPlxyXG4gICAgICAgICAgPGRpdj5cclxuICAgICAgICAgICAgPG56LXJhZGlvLWdyb3VwIG56QnV0dG9uU3R5bGU9XCJzb2xpZFwiIFsobmdNb2RlbCldPVwib3B0aW9ucy50ZXh0QWxpZ25cIj5cclxuICAgICAgICAgICAgICA8bGFiZWwgbnotcmFkaW8tYnV0dG9uIG56VmFsdWU9XCJsZWZ0XCI+TGVmdDwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgPGxhYmVsIG56LXJhZGlvLWJ1dHRvbiBuelZhbHVlPVwiY2VudGVyXCI+Q2VudGVyPC9sYWJlbD5cclxuICAgICAgICAgICAgICA8bGFiZWwgbnotcmFkaW8tYnV0dG9uIG56VmFsdWU9XCJyaWdodFwiPlJpZ2h0PC9sYWJlbD5cclxuICAgICAgICAgICAgPC9uei1yYWRpby1ncm91cD5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXY+XHJcbiAgICAgICAgICA8bGFiZWw+XHJcbiAgICAgICAgICAgIEZvbnQgZmFtaWx5XHJcbiAgICAgICAgICA8L2xhYmVsPlxyXG4gICAgICAgICAgPGRpdj5cclxuICAgICAgICAgICAgPGlucHV0IG56LWlucHV0IFsobmdNb2RlbCldPVwib3B0aW9ucy5mb250RmFtaWx5XCIvPlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGRpdj5cclxuICAgICAgICAgIDxsYWJlbD5cclxuICAgICAgICAgICAgRm9udCBTaXplXHJcbiAgICAgICAgICA8L2xhYmVsPlxyXG4gICAgICAgICAgPGRpdj5cclxuICAgICAgICAgICAgPGlucHV0IG56LWlucHV0IFsobmdNb2RlbCldPVwib3B0aW9ucy5mb250U2l6ZVwiLz5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgXHJcblxyXG4gICAgICA8ZGl2ICpuZ0lmPVwiZ2V0T3BlcmF0aW9uUHJvcGVydHkoKVwiPlxyXG4gICAgICAgIDxsYWJlbD5cclxuICAgICAgICAgIE9wZXJhdGlvblxyXG4gICAgICAgIDwvbGFiZWw+XHJcbiAgICAgICAgPGRpdj5cclxuICAgICAgICAgIDxsYWJlbCAqbmdJZj1cImdldFR5cGUob3B0aW9ucy5oaWRkZW4pICE9PSAndW5kZWZpbmVkJ1wiIG56LWNoZWNrYm94IFsobmdNb2RlbCldPVwib3B0aW9ucy5oaWRkZW5cIj5IaWRkZW48L2xhYmVsPlxyXG4gICAgICAgICAgPCEtLSA8bGFiZWwgKm5nSWY9XCJnZXRUeXBlKG9wdGlvbnMuZGlzYWJsZWQpICE9PSAndW5kZWZpbmVkJ1wiIG56LWNoZWNrYm94IFsobmdNb2RlbCldPVwib3B0aW9ucy5kaXNhYmxlZFwiPkRpc2FibGU8L2xhYmVsPiAtLT5cclxuICAgICAgICAgIDxsYWJlbCAqbmdJZj1cImdldFR5cGUob3B0aW9ucy5yZWFkb25seSkgIT09ICd1bmRlZmluZWQnXCIgbnotY2hlY2tib3ggWyhuZ01vZGVsKV09XCJvcHRpb25zLnJlYWRvbmx5XCI+UmVhZE9ubHk8L2xhYmVsPlxyXG4gICAgICAgICAgPGxhYmVsICpuZ0lmPVwiZ2V0VHlwZShvcHRpb25zLmNsZWFyYWJsZSkgIT09ICd1bmRlZmluZWQnXCIgbnotY2hlY2tib3ggWyhuZ01vZGVsKV09XCJvcHRpb25zLmNsZWFyYWJsZVwiPkNsZWFyYWJsZTwvbGFiZWw+XHJcbiAgICAgICAgICA8bGFiZWwgKm5nSWY9XCJnZXRUeXBlKG9wdGlvbnMubXVsdGlwbGUpICE9PSAndW5kZWZpbmVkJ1wiIG56LWNoZWNrYm94IFsobmdNb2RlbCldPVwib3B0aW9ucy5tdWx0aXBsZVwiPk11bHRpcGxlPC9sYWJlbD5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcblxyXG4gICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiZ2V0VHlwZShzZWxlY3RJdGVtLnJ1bGVzKSAhPT0gJ3VuZGVmaW5lZCdcclxuICAgICAgJiYgc2VsZWN0SXRlbS5ydWxlcy5sZW5ndGggPiAwXCI+XHJcbiAgICAgICAgPGRpdiA+XHJcbiAgICAgICAgICA8bGFiZWw+XHJcbiAgICAgICAgICAgIFZhbGlkYXRpb25cclxuICAgICAgICAgIDwvbGFiZWw+XHJcbiAgICAgICAgICA8ZGl2PlxyXG4gICAgICAgICAgICA8bGFiZWwgbnotY2hlY2tib3ggWyhuZ01vZGVsKV09XCJzZWxlY3RJdGVtLnJ1bGVzWzBdLnJlcXVpcmVkXCI+UmVxdWlyZWQ8L2xhYmVsPlxyXG4gICAgICAgICAgICA8aW5wdXQgbnotaW5wdXQgWyhuZ01vZGVsKV09XCJzZWxlY3RJdGVtLnJ1bGVzWzBdLm1lc3NhZ2VcIiBwbGFjZWhvbGRlcj1cIkVycm9yIFRvb2x0aXBcIiAvPlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGRpdiA+XHJcbiAgICAgICAgICA8bGFiZWw+XHJcbiAgICAgICAgICA8L2xhYmVsPlxyXG4gICAgICAgICAgPGRpdj5cclxuICAgICAgICAgICAgPGFwcC1kZXNpZ24tZm9ybS1jaGFuZ2Utb3B0aW9uIFt0eXBlXT1cIidydWxlcydcIiBbKG5nTW9kZWwpXT1cInNlbGVjdEl0ZW0ucnVsZXNcIj48L2FwcC1kZXNpZ24tZm9ybS1jaGFuZ2Utb3B0aW9uPlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICBcclxuICAgICAgPCEtLSA8ZGl2ICpuZ0lmPVwiZ2V0VHlwZShzZWxlY3RJdGVtLmhlbHApICE9PSAndW5kZWZpbmVkJ1wiPlxyXG4gICAgICAgIDxsYWJlbD5cclxuICAgICAgICAgIEhlbHAgdG9vbHRpcFxyXG4gICAgICAgIDwvbGFiZWw+XHJcbiAgICAgICAgPGRpdj5cclxuICAgICAgICAgIDxpbnB1dCBuei1pbnB1dCBbKG5nTW9kZWwpXT1cInNlbGVjdEl0ZW0uaGVscFwiIC8+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZGl2PiAtLT5cclxuICAgIDwvZGl2PlxyXG4gIDwvZGl2PlxyXG48L2Rpdj5cclxuIl19