@dignite-ng/expand.cms 3.0.0-rc.43 → 3.0.0-rc.47
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2022/lib/cms.module.mjs +6 -2
- package/esm2022/lib/components/admin/entries/create-or-edit-entries.component.mjs +33 -3
- package/esm2022/lib/components/admin/entries/create.component.mjs +39 -8
- package/esm2022/lib/components/admin/entries/edit.component.mjs +55 -50
- package/esm2022/lib/components/admin/entries/entries.component.mjs +4 -3
- package/esm2022/lib/components/admin/sections/entry-types/create-or-edit.-entry-type-input-base.mjs +7 -7
- package/esm2022/lib/components/admin/sections/entry-types/create-or-edit.component.mjs +40 -7
- package/esm2022/lib/components/dynamic-form/matrix/matrix-control.component.mjs +50 -10
- package/esm2022/lib/components/dynamic-form/table/table-control.component.mjs +44 -9
- package/esm2022/lib/pipes/get-localized-entries-by-slug.pipe.mjs +43 -0
- package/esm2022/lib/proxy/dignite/cms/admin/dynamic-forms/form-admin.service.mjs +1 -1
- package/esm2022/lib/proxy/dignite/cms/admin/entries/entry-admin.service.mjs +6 -1
- package/esm2022/lib/proxy/dignite/cms/admin/fields/models.mjs +1 -1
- package/esm2022/lib/proxy/dignite/cms/fields/models.mjs +1 -1
- package/esm2022/lib/proxy/dignite/cms/sections/models.mjs +1 -1
- package/esm2022/lib/resolvers/page-default-toolbar-actions.mjs +3 -3
- package/fesm2022/dignite-ng-expand.cms.mjs +311 -90
- package/fesm2022/dignite-ng-expand.cms.mjs.map +1 -1
- package/lib/cms.module.d.ts +2 -1
- package/lib/components/admin/entries/create-or-edit-entries.component.d.ts +5 -0
- package/lib/components/admin/entries/create.component.d.ts +3 -0
- package/lib/components/admin/entries/edit.component.d.ts +1 -0
- package/lib/components/admin/sections/entry-types/create-or-edit.-entry-type-input-base.d.ts +0 -6
- package/lib/components/admin/sections/entry-types/create-or-edit.component.d.ts +4 -0
- package/lib/components/dynamic-form/matrix/matrix-control.component.d.ts +4 -0
- package/lib/components/dynamic-form/table/table-control.component.d.ts +4 -0
- package/lib/pipes/get-localized-entries-by-slug.pipe.d.ts +10 -0
- package/lib/proxy/dignite/cms/admin/entries/entry-admin.service.d.ts +1 -0
- package/lib/proxy/dignite/cms/admin/fields/models.d.ts +2 -2
- package/lib/proxy/dignite/cms/fields/models.d.ts +1 -1
- package/lib/proxy/dignite/cms/sections/models.d.ts +2 -2
- package/package.json +1 -1
|
@@ -29,6 +29,7 @@ import * as i9 from "@angular/forms";
|
|
|
29
29
|
import * as i10 from "@ngx-validate/core";
|
|
30
30
|
import * as i11 from "@ng-bootstrap/ng-bootstrap";
|
|
31
31
|
import * as i12 from "@abp/ng.components/page";
|
|
32
|
+
import * as i13 from "@angular/cdk/drag-drop";
|
|
32
33
|
export class CreateOrEditComponent {
|
|
33
34
|
constructor(toaster, _location, route, _FieldGroupAdminService, _FieldAdminService, _EntryTypeAdminService, _LocalizationService, _CmsApiService, _FormControlsService) {
|
|
34
35
|
this.toaster = toaster;
|
|
@@ -417,6 +418,8 @@ export class CreateOrEditComponent {
|
|
|
417
418
|
}
|
|
418
419
|
/**删除某个tabs表单 */
|
|
419
420
|
deleteFieldTabs(index) {
|
|
421
|
+
this.deleteTabFieldGroupList(this.resultSource[index].fields);
|
|
422
|
+
// return
|
|
420
423
|
this.fieldTabs.removeAt(index);
|
|
421
424
|
this.resultSource.splice(index, 1);
|
|
422
425
|
if (this.navActive === index) {
|
|
@@ -426,6 +429,28 @@ export class CreateOrEditComponent {
|
|
|
426
429
|
this.navActive = this.navActive - 1;
|
|
427
430
|
}
|
|
428
431
|
}
|
|
432
|
+
/**删除tab标签后还原 fieldGroupList */
|
|
433
|
+
deleteTabFieldGroupList(deleteFields) {
|
|
434
|
+
//原数据
|
|
435
|
+
const fieldList = this.deepClone(this.fieldList);
|
|
436
|
+
//右侧手风琴数据
|
|
437
|
+
const formRightGroup = this.deepClone(this.formRightGroup);
|
|
438
|
+
// 获取要删除的原数据
|
|
439
|
+
const deleteFieldList = fieldList.filter(el => deleteFields.map(item => item.id).includes(el.id));
|
|
440
|
+
deleteFieldList.forEach(item => {
|
|
441
|
+
const index = formRightGroup.findIndex(el => el.id === item.id);
|
|
442
|
+
formRightGroup.splice(index, 1);
|
|
443
|
+
});
|
|
444
|
+
const deleteFieldListGroupIds = deleteFieldList.map(item => item.groupId);
|
|
445
|
+
this.fieldGroupList.forEach(el => {
|
|
446
|
+
if (deleteFieldListGroupIds.includes(el.id)) {
|
|
447
|
+
const elFieldsAll = fieldList.filter(els => els.groupId === el.id);
|
|
448
|
+
el.fields = elFieldsAll.filter(item => !formRightGroup.some(itemB => item.id === itemB.id));
|
|
449
|
+
}
|
|
450
|
+
});
|
|
451
|
+
this.formRightGroup = formRightGroup;
|
|
452
|
+
this.setfieldTabsFrom();
|
|
453
|
+
}
|
|
429
454
|
/**编辑字段模态框状态状态改变回调 */
|
|
430
455
|
VisibleEditFieldChange(event) {
|
|
431
456
|
if (!event) {
|
|
@@ -448,12 +473,20 @@ export class CreateOrEditComponent {
|
|
|
448
473
|
editFieldSave() {
|
|
449
474
|
const input = this.editFieldFrom.value;
|
|
450
475
|
this.resultSource[this.navActive].fields[this.EditFieldIndex].displayName = input.displayName;
|
|
451
|
-
this.resultSource[this.navActive].fields[this.EditFieldIndex].required = input.required;
|
|
452
|
-
this.resultSource[this.navActive].fields[this.EditFieldIndex].showInList = input.showInList;
|
|
453
|
-
this.resultSource[this.navActive].fields[this.EditFieldIndex].enableSearch = input.enableSearch;
|
|
476
|
+
// this.resultSource[this.navActive].fields[this.EditFieldIndex].required = input.required;
|
|
477
|
+
// this.resultSource[this.navActive].fields[this.EditFieldIndex].showInList = input.showInList;
|
|
478
|
+
// this.resultSource[this.navActive].fields[this.EditFieldIndex].enableSearch = input.enableSearch;
|
|
454
479
|
this.visibleEditFieldOpen = false;
|
|
455
480
|
this.setfieldTabsFrom();
|
|
456
481
|
}
|
|
482
|
+
/**点击“字段布局”复选框事件 */
|
|
483
|
+
checkboxChange(event, input) {
|
|
484
|
+
const { checked, name } = event.target;
|
|
485
|
+
const { row, index } = input;
|
|
486
|
+
this.resultSource[this.navActive].fields[index][name] = checked;
|
|
487
|
+
this.setfieldTabsFrom();
|
|
488
|
+
console.log(event.target, '点击“字段布局”复选框事件 ', event, input, 'resultSource', this.resultSource, 'newEntity', this.newEntity);
|
|
489
|
+
}
|
|
457
490
|
/**name表单控件 */
|
|
458
491
|
get nameInput() {
|
|
459
492
|
return this.newEntity.get('name');
|
|
@@ -468,12 +501,12 @@ export class CreateOrEditComponent {
|
|
|
468
501
|
nameInput.patchValue(pinyin);
|
|
469
502
|
}
|
|
470
503
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.5", ngImport: i0, type: CreateOrEditComponent, deps: [{ token: i1.ToasterService }, { token: i2.Location }, { token: i3.ActivatedRoute }, { token: i4.FieldGroupAdminService }, { token: i4.FieldAdminService }, { token: i5.EntryTypeAdminService }, { token: i6.LocalizationService }, { token: i7.CmsApiService }, { token: i8.FormControlsService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
471
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "
|
|
504
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.1.5", type: CreateOrEditComponent, selector: "cms-create-or-edit", providers: [
|
|
472
505
|
{
|
|
473
506
|
provide: EXTENSIONS_IDENTIFIER,
|
|
474
507
|
useValue: ECmsComponent.SectionsCreateOrEdit,
|
|
475
508
|
},
|
|
476
|
-
], viewQueries: [{ propertyName: "submitclick", first: true, predicate: ["submitclick"], descendants: true, static: true }, { propertyName: "editFieldTabsModalSubmitBtn", first: true, predicate: ["editFieldTabsModalSubmitBtn"], descendants: true }, { propertyName: "editFieldModalSubmitBtn", first: true, predicate: ["editFieldModalSubmitBtn"], descendants: true }], ngImport: i0, template: "<form class=\"row g-3 needs-validation\" [formGroup]=\"newEntity\" [class]=\"{'was-validated':formValidation}\"\n (submit)=\"save()\">\n <abp-page [title]=\"entryTypesId ? ('AbpUi::Edit' | abpLocalization):('Cms::New' | abpLocalization)\"\n [toolbar]=\"true\">\n <div class=\"create-or-edit-entry-type-page\">\n <div class=\"card\">\n <button type=\"submit\" style=\"display: none;\" #submitclick></button>\n <div class=\"card-body\">\n <div class=\"\">\n <div class=\"mb-3\">\n <label class=\"form-label\">{{'Cms::DisplayName' | abpLocalization}}</label>\n <input type=\"text\" class=\"form-control\" formControlName=\"displayName\"\n (blur)=\"disPlayNameInputBlur($event)\" placeholder=\"\" />\n </div>\n <div class=\"mb-3\">\n <label class=\"form-label\">{{'Cms::Name' | abpLocalization}}</label>\n <input type=\"text\" class=\"form-control\" formControlName=\"name\" placeholder=\"\" />\n </div>\n <div formArrayName=\"fieldTabs\">\n <div class=\"mb-3\">\n <label class=\"form-label\">{{'Cms::FieldLayout' | abpLocalization}}</label>\n <div class=\"container\">\n <div class=\"row\">\n <div class=\"col-sm-8 border rounded\">\n <ul ngbNav #nav=\"ngbNav\" [(activeId)]=\"navActive\" class=\"nav nav-tabs\">\n <ng-container *ngFor=\"let item of resultSource; let i = index\">\n <li [ngbNavItem]=\"i\" ngbDropdown class=\"nav-item\" role=\"presentation\"> \n <button type=\"button\" ngbNavLink class=\"nav-link\">\n {{ item.name }}\n <span class=\"ms-1\" (click.stop)=\"$event.stopPropagation()\"\n ngbDropdownToggle></span>\n </button>\n <div ngbDropdownMenu style=\"z-index: 999;\">\n <span ngbDropdownItem type=\"button\"\n (click.stop)=\"editFieldTabs(item,i)\">\n <i class=\"fas fa-edit\"></i>\n {{'AbpUi::Edit' | abpLocalization}}\n </span>\n <span ngbDropdownItem *ngIf=\"resultSource.length !== 1\"\n type=\"button\" (click.stop)=\"deleteFieldTabs(i)\">\n <i class=\"fas fa-trash\"></i>\n {{'AbpUi::Delete' | abpLocalization}}\n </span>\n </div>\n <ng-template ngbNavContent>\n <div class=\"p-2\" ondragover=\"event.preventDefault();\"\n (drop)=\"dragToResultSourceDropped(item,i)\"\n style=\"height: 100%;\">\n <p class=\"form-text text-muted\"\n *ngIf=\"item.fields.length === 0\">\n {{'Cms::DragAndDropFieldTips' | abpLocalization}}\n </p>\n <ul class=\"list-group\" style=\"height: 100%;\">\n <ng-container\n *ngFor=\"let el of item.fields; let iel = index\">\n <li draggable=\"true\"\n (dragstart)=\"fromResultSourceDragStart(el)\"\n (drop)=\"dragToResultSourceItemDropped(iel)\"\n class=\"list-group-item d-flex align-items-center justify-content-between py-1\"\n style=\"position: unset;\">\n {{ el.displayName }}\n <button class=\"p-0 btn btn-sm btn-light\"\n (click.stop)=\"EditFieldModalOpen(el,iel)\"\n type=\"button\"><i\n class=\"fas fa-wrench p-sm-1\"\n role=\"button\"></i></button>\n </li>\n </ng-container>\n </ul>\n\n </div>\n </ng-template>\n </li>\n </ng-container>\n <li class=\"nav-item\" role=\"presentation\">\n <button type=\"button\" class=\"nav-link\"\n (click.stop)=\"addFieldTabs()\">\n <i class=\"fas fa-plus-circle\"></i>\n {{'Cms::NewTab' | abpLocalization}}\n </button>\n </li>\n </ul>\n <div [ngbNavOutlet]=\"nav\" class=\"mt-2 bordernNavs p-0\"></div>\n </div>\n <div class=\"col-sm-4\">\n <div ngbAccordion #accordion=\"ngbAccordion\"\n ondragover=\"event.preventDefault();\" (drop)=\"dragToDataSourceDropped()\"\n style=\"min-height: 80px;\">\n <ng-container *ngFor=\"let item of fieldGroupList; let i = index\">\n <div [ngbAccordionItem]=\"item.name\" *ngIf=\"item.fields.length > 0\">\n <h2 ngbAccordionHeader>\n <button ngbAccordionButton>{{\n ('Cms::'+item.name) | abpLocalization }}</button>\n </h2>\n <div ngbAccordionCollapse>\n <div ngbAccordionBody>\n <ng-template>\n <ul class=\"list-group\">\n <ng-container\n *ngFor=\"let el of item.fields; let ii = index\">\n <li draggable=\"true\"\n (dragstart)=\"fromDataSourceDragStart(el,ii,i)\"\n class=\"list-group-item\">\n {{ el.displayName }}\n </li>\n </ng-container>\n </ul>\n </ng-template>\n </div>\n </div>\n </div>\n </ng-container>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n\n\n </div>\n </div>\n\n\n <!-- </div> -->\n </abp-page>\n\n</form>\n\n<abp-modal [(visible)]=\"visibleTabsOpen\" [busy]=\"modalBusy\" (visibleChange)=\"VisibleTabsChange($event)\">\n <ng-template #abpHeader>\n <h3>{{ editFieldTabsSelect ? ('AbpUi::Edit' | abpLocalization):('Cms::New' | abpLocalization)}}</h3>\n </ng-template>\n <ng-template #abpBody>\n <ng-template #loaderRef>\n <div class=\"text-center\"><i class=\"fa fa-pulse fa-spinner\" aria-hidden=\"true\"></i></div>\n </ng-template>\n <ng-container *ngIf=\"editFieldTabsFrom; else loaderRef\">\n <form class=\"sites-modal-form\" [formGroup]=\"editFieldTabsFrom\" [class]=\"{'was-validated':formValidation}\"\n (submit)=\"editFieldTabsSave()\">\n <button type=\"submit\" #editFieldTabsModalSubmitBtn style=\"display: none\"></button>\n <div class=\"mb-3\">\n <label class=\"form-label\">{{'Cms::Name' | abpLocalization}}</label>\n <input type=\"text\" class=\"form-control\" formControlName=\"name\" placeholder=\"\" />\n </div>\n </form>\n </ng-container>\n </ng-template>\n <ng-template #abpFooter>\n <button type=\"button\" class=\"btn btn-secondary\" abpClose>{{'AbpUi::Close' | abpLocalization}}</button>\n <abp-button iconClass=\"fa fa-check\" (click)=\"editFieldTabsModalSubmitBtn.nativeElement.click()\">{{'AbpUi::Save'\n | abpLocalization}}</abp-button>\n </ng-template>\n</abp-modal>\n\n\n<abp-modal [(visible)]=\"visibleEditFieldOpen\" [busy]=\"modalBusy\" (visibleChange)=\"VisibleEditFieldChange($event)\">\n <ng-template #abpHeader>\n <h3>{{'AbpUi::Edit' | abpLocalization}}</h3>\n </ng-template>\n <ng-template #abpBody>\n <ng-template #loaderRef>\n <div class=\"text-center\"><i class=\"fa fa-pulse fa-spinner\" aria-hidden=\"true\"></i></div>\n </ng-template>\n <ng-container *ngIf=\"editFieldFrom; else loaderRef\">\n <form class=\"sites-modal-form\" [formGroup]=\"editFieldFrom\" (submit)=\"editFieldSave()\">\n <button type=\"submit\" #editFieldModalSubmitBtn style=\"display: none\"></button>\n <div class=\"mb-3\">\n <label class=\"form-label\">{{'Cms::DisplayName' | abpLocalization}}</label>\n <input type=\"text\" class=\"form-control\" formControlName=\"displayName\" placeholder=\"\" />\n </div>\n <div class=\"mb-3\">\n <div class=\"form-check form-check-inline\">\n <input class=\"form-check-input\" type=\"checkbox\" value=\"true\" formControlName=\"required\"\n id=\"required\" />\n <label class=\"form-check-label\" for=\"required\"> {{'Cms::Required' | abpLocalization}} </label>\n </div>\n </div>\n @if(isShowInList){\n <div class=\"mb-3\">\n <div class=\"form-check form-check-inline\">\n <input class=\"form-check-input\" type=\"checkbox\" value=\"true\" formControlName=\"showInList\"\n id=\"showInList\" />\n <label class=\"form-check-label\" for=\"showInList\"> {{'Cms::ShowInList' | abpLocalization}}\n </label>\n </div>\n </div>\n }\n @if(isEnableSearch){\n <div class=\"mb-3\">\n <div class=\"form-check form-check-inline\">\n <input class=\"form-check-input\" type=\"checkbox\" value=\"true\" formControlName=\"enableSearch\"\n id=\"enableSearch\" />\n <label class=\"form-check-label\" for=\"enableSearch\"> {{'Cms::EnableSearch' | abpLocalization}}\n </label>\n </div>\n </div>\n }\n </form>\n </ng-container>\n </ng-template>\n <ng-template #abpFooter>\n <button type=\"button\" class=\"btn btn-secondary\" abpClose>{{'AbpUi::Close' | abpLocalization}}</button>\n <abp-button iconClass=\"fa fa-check\" [disabled]=\"!editFieldFrom.valid\"\n (click)=\"editFieldModalSubmitBtn.nativeElement.click()\">{{'AbpUi::Save' | abpLocalization}}</abp-button>\n </ng-template>\n</abp-modal>", styles: ["::ng-deep .create-or-edit-entry-type-page .dignite_page{height:calc(100vh - 125px);overflow:auto}::ng-deep .create-or-edit-entry-type-page .form-control,::ng-deep .create-or-edit-entry-type-page .form-select{padding:.475rem 1.25rem}::ng-deep .create-or-edit-entry-type-page .cursor-move{cursor:move}::ng-deep .create-or-edit-entry-type-page .bordernNavs{border:var(--bs-border-width) solid var(--lpx-border-color);padding-left:inherit;padding-right:inherit;height:calc(100% - 60px)}::ng-deep .create-or-edit-entry-type-page .tab-pane{height:100%}::ng-deep .create-or-edit-entry-type-page .nav-tabs .nav-link.active{border-color:var(--bs-nav-tabs-link-active-border-color)!important}\n"], dependencies: [{ kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i9.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i9.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: i9.CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]" }, { kind: "directive", type: i9.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i9.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i9.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i9.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "directive", type: i9.FormArrayName, selector: "[formArrayName]", inputs: ["formArrayName"] }, { kind: "directive", type: i6.StopPropagationDirective, selector: "[click.stop]", outputs: ["click.stop"] }, { kind: "directive", type: i10.ValidationGroupDirective, selector: "[formGroup],[formGroupName]", exportAs: ["validationGroup"] }, { kind: "directive", type: i10.ValidationDirective, selector: "[formControl],[formControlName]", exportAs: ["validationDirective"] }, { kind: "component", type: i1.ButtonComponent, selector: "abp-button", inputs: ["buttonId", "buttonClass", "buttonType", "formName", "iconClass", "loading", "disabled", "attributes"], outputs: ["click", "focus", "blur", "abpClick", "abpFocus", "abpBlur"] }, { kind: "component", type: i1.ModalComponent, selector: "abp-modal", inputs: ["visible", "busy", "options", "suppressUnsavedChangesWarning"], outputs: ["visibleChange", "init", "appear", "disappear"] }, { kind: "directive", type: i1.ModalCloseDirective, selector: "[abpClose]" }, { kind: "directive", type: i11.NgbNavContent, selector: "ng-template[ngbNavContent]" }, { kind: "directive", type: i11.NgbNav, selector: "[ngbNav]", inputs: ["activeId", "animation", "destroyOnHide", "orientation", "roles", "keyboard"], outputs: ["activeIdChange", "shown", "hidden", "navChange"], exportAs: ["ngbNav"] }, { kind: "directive", type: i11.NgbNavItem, selector: "[ngbNavItem]", inputs: ["destroyOnHide", "disabled", "domId", "ngbNavItem"], outputs: ["shown", "hidden"], exportAs: ["ngbNavItem"] }, { kind: "directive", type: i11.NgbNavItemRole, selector: "[ngbNavItem]:not(ng-container)" }, { kind: "directive", type: i11.NgbNavLinkButton, selector: "button[ngbNavLink]" }, { kind: "directive", type: i11.NgbNavLinkBase, selector: "[ngbNavLink]" }, { kind: "component", type: i11.NgbNavOutlet, selector: "[ngbNavOutlet]", inputs: ["paneRole", "ngbNavOutlet"] }, { kind: "directive", type: i11.NgbAccordionButton, selector: "button[ngbAccordionButton]" }, { kind: "directive", type: i11.NgbAccordionDirective, selector: "[ngbAccordion]", inputs: ["animation", "closeOthers", "destroyOnHide"], outputs: ["show", "shown", "hide", "hidden"], exportAs: ["ngbAccordion"] }, { kind: "directive", type: i11.NgbAccordionItem, selector: "[ngbAccordionItem]", inputs: ["ngbAccordionItem", "destroyOnHide", "disabled", "collapsed"], outputs: ["show", "shown", "hide", "hidden"], exportAs: ["ngbAccordionItem"] }, { kind: "directive", type: i11.NgbAccordionHeader, selector: "[ngbAccordionHeader]" }, { kind: "directive", type: i11.NgbAccordionBody, selector: "[ngbAccordionBody]" }, { kind: "directive", type: i11.NgbAccordionCollapse, selector: "[ngbAccordionCollapse]", exportAs: ["ngbAccordionCollapse"] }, { kind: "directive", type: i11.NgbDropdown, selector: "[ngbDropdown]", inputs: ["autoClose", "dropdownClass", "open", "placement", "popperOptions", "container", "display"], outputs: ["openChange"], exportAs: ["ngbDropdown"] }, { kind: "directive", type: i11.NgbDropdownToggle, selector: "[ngbDropdownToggle]" }, { kind: "directive", type: i11.NgbDropdownMenu, selector: "[ngbDropdownMenu]" }, { kind: "directive", type: i11.NgbDropdownItem, selector: "[ngbDropdownItem]", inputs: ["tabindex", "disabled"] }, { kind: "component", type: i12.PageComponent, selector: "abp-page", inputs: ["title", "toolbar", "breadcrumb"] }, { kind: "pipe", type: i6.LocalizationPipe, name: "abpLocalization" }] }); }
|
|
509
|
+
], viewQueries: [{ propertyName: "submitclick", first: true, predicate: ["submitclick"], descendants: true, static: true }, { propertyName: "editFieldTabsModalSubmitBtn", first: true, predicate: ["editFieldTabsModalSubmitBtn"], descendants: true }, { propertyName: "editFieldModalSubmitBtn", first: true, predicate: ["editFieldModalSubmitBtn"], descendants: true }], ngImport: i0, template: "<form class=\"row g-3 needs-validation\" [formGroup]=\"newEntity\" [class]=\"{'was-validated':formValidation}\"\n (submit)=\"save()\">\n <abp-page [title]=\"entryTypesId ? ('AbpUi::Edit' | abpLocalization):('Cms::New' | abpLocalization)\"\n [toolbar]=\"true\">\n <div class=\"create-or-edit-entry-type-page\">\n <div class=\"card\">\n <button type=\"submit\" style=\"display: none;\" #submitclick></button>\n <div class=\"card-body\">\n <div class=\"\">\n <div class=\"mb-3\">\n <label class=\"form-label\">{{'Cms::DisplayName' | abpLocalization}}</label>\n <input type=\"text\" class=\"form-control\" formControlName=\"displayName\"\n (blur)=\"disPlayNameInputBlur($event)\" placeholder=\"\" />\n </div>\n <div class=\"mb-3\">\n <label class=\"form-label\">{{'Cms::Name' | abpLocalization}}</label>\n <input type=\"text\" class=\"form-control\" formControlName=\"name\" placeholder=\"\" />\n </div>\n <div formArrayName=\"fieldTabs\">\n <div class=\"mb-3\">\n <label class=\"form-label\">{{'Cms::FieldLayout' | abpLocalization}}</label>\n <div class=\"container\">\n <div class=\"row\">\n <div class=\"col-sm-8 border rounded\">\n <ul ngbNav #nav=\"ngbNav\" [(activeId)]=\"navActive\" class=\"nav nav-tabs\">\n <ng-container *ngFor=\"let item of resultSource; let i = index\">\n <li [ngbNavItem]=\"i\" ngbDropdown class=\"nav-item\"\n role=\"presentation\">\n <button type=\"button\" ngbNavLink class=\"nav-link\">\n {{ item.name }}\n <span class=\"ms-1\" (click.stop)=\"$event.stopPropagation()\"\n ngbDropdownToggle></span>\n </button>\n <div ngbDropdownMenu style=\"z-index: 999;\">\n <span ngbDropdownItem type=\"button\"\n (click.stop)=\"editFieldTabs(item,i)\">\n <i class=\"fas fa-edit\"></i>\n {{'AbpUi::Edit' | abpLocalization}}\n </span>\n <span ngbDropdownItem *ngIf=\"resultSource.length !== 1\"\n type=\"button\" (click.stop)=\"deleteFieldTabs(i)\">\n <i class=\"fas fa-trash\"></i>\n {{'AbpUi::Delete' | abpLocalization}}\n </span>\n </div>\n <ng-template ngbNavContent>\n <div class=\"p-2\" ondragover=\"event.preventDefault();\"\n (drop)=\"dragToResultSourceDropped(item,i)\"\n style=\"height: 100%;\">\n <p class=\"form-text text-muted\"\n *ngIf=\"item.fields.length === 0\">\n {{'Cms::DragAndDropFieldTips' | abpLocalization}}\n </p>\n <table class=\"table\">\n <thead>\n <th></th>\n <th>{{'Cms::DisplayName' | abpLocalization}}\n </th>\n <th>{{'Cms::Required' | abpLocalization}}</th>\n <th>{{'Cms::ShowInList' | abpLocalization}}</th>\n <th>{{'Cms::EnableSearch' | abpLocalization}}\n </th>\n <th></th>\n </thead>\n <tbody>\n <ng-container\n *ngFor=\"let el of item.fields; let iel = index\">\n <tr draggable=\"true\"\n (dragstart)=\"fromResultSourceDragStart(el)\"\n (drop)=\"dragToResultSourceItemDropped(iel)\">\n <td >\n <div class=\"drag-handle d-inline\" \n cdkDragHandle>\n <span\n class=\"bi bi-arrows-move fs-5\"></span>\n </div>\n </td>\n \n <td>{{ el.displayName }}</td>\n <td>\n <input type=\"checkbox\" role=\"button\" class=\"form-check-input\" [checked]=\"el.required\" name=\"required\" (change)=\"checkboxChange($event,{row:el,index:iel})\" />\n </td>\n <td>\n <input type=\"checkbox\" role=\"button\" class=\"form-check-input\" [checked]=\"el.showInList\" name=\"showInList\" (change)=\"checkboxChange($event,{row:el,index:iel})\" />\n </td>\n <td>\n <input type=\"checkbox\" role=\"button\" class=\"form-check-input\" [checked]=\"el.enableSearch\" name=\"enableSearch\" (change)=\"checkboxChange($event,{row:el,index:iel})\" />\n </td>\n <td style=\"width: 1%;\"> \n <button\n class=\"p-0 btn btn-sm btn-light\"\n (click.stop)=\"EditFieldModalOpen(el,iel)\"\n type=\"button\"><i\n class=\"fas fa-wrench p-sm-1\"\n role=\"button\"></i></button>\n </td>\n </tr>\n </ng-container>\n </tbody>\n </table>\n\n\n <!-- <ul class=\"list-group\" style=\"height: 100%;\">\n <ng-container\n *ngFor=\"let el of item.fields; let iel = index\">\n <li draggable=\"true\"\n (dragstart)=\"fromResultSourceDragStart(el)\"\n (drop)=\"dragToResultSourceItemDropped(iel)\"\n class=\"list-group-item d-flex align-items-center justify-content-between py-1\"\n style=\"position: unset;\">\n {{ el.displayName }}\n <button class=\"p-0 btn btn-sm btn-light\"\n (click.stop)=\"EditFieldModalOpen(el,iel)\"\n type=\"button\"><i\n class=\"fas fa-wrench p-sm-1\"\n role=\"button\"></i></button>\n </li>\n </ng-container>\n </ul> -->\n\n </div>\n </ng-template>\n </li>\n </ng-container>\n <li class=\"nav-item\" role=\"presentation\">\n <button type=\"button\" class=\"nav-link\"\n (click.stop)=\"addFieldTabs()\">\n <i class=\"fas fa-plus-circle\"></i>\n {{'Cms::NewTab' | abpLocalization}}\n </button>\n </li>\n </ul>\n <div [ngbNavOutlet]=\"nav\" class=\"mt-2 bordernNavs p-0\"></div>\n </div>\n <div class=\"col-sm-4\">\n <div ngbAccordion #accordion=\"ngbAccordion\"\n ondragover=\"event.preventDefault();\" (drop)=\"dragToDataSourceDropped()\"\n style=\"min-height: 80px;\">\n <ng-container *ngFor=\"let item of fieldGroupList; let i = index\">\n <div [ngbAccordionItem]=\"item.name\" *ngIf=\"item.fields.length > 0\">\n <h2 ngbAccordionHeader>\n <button ngbAccordionButton>{{\n ('Cms::'+item.name) | abpLocalization }}</button>\n </h2>\n <div ngbAccordionCollapse>\n <div ngbAccordionBody>\n <ng-template>\n <ul class=\"list-group\">\n <ng-container\n *ngFor=\"let el of item.fields; let ii = index\">\n <li draggable=\"true\"\n (dragstart)=\"fromDataSourceDragStart(el,ii,i)\"\n class=\"list-group-item\">\n {{ el.displayName }}\n </li>\n </ng-container>\n </ul>\n </ng-template>\n </div>\n </div>\n </div>\n </ng-container>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n\n\n </div>\n </div>\n\n\n <!-- </div> -->\n </abp-page>\n\n</form>\n<!-- \u7528\u4E8E\u521B\u5EFA\u7F16\u8F91tab\u7684\u6A21\u6001\u6846 -->\n<abp-modal [(visible)]=\"visibleTabsOpen\" [busy]=\"modalBusy\" (visibleChange)=\"VisibleTabsChange($event)\">\n <ng-template #abpHeader>\n <h3>{{ editFieldTabsSelect ? ('AbpUi::Edit' | abpLocalization):('Cms::New' | abpLocalization)}}</h3>\n </ng-template>\n <ng-template #abpBody>\n <ng-template #loaderRef>\n <div class=\"text-center\"><i class=\"fa fa-pulse fa-spinner\" aria-hidden=\"true\"></i></div>\n </ng-template>\n <ng-container *ngIf=\"editFieldTabsFrom; else loaderRef\">\n <form class=\"sites-modal-form\" [formGroup]=\"editFieldTabsFrom\" [class]=\"{'was-validated':formValidation}\"\n (submit)=\"editFieldTabsSave()\">\n <button type=\"submit\" #editFieldTabsModalSubmitBtn style=\"display: none\"></button>\n <div class=\"mb-3\">\n <label class=\"form-label\">{{'Cms::Name' | abpLocalization}}</label>\n <input type=\"text\" class=\"form-control\" formControlName=\"name\" placeholder=\"\" />\n </div>\n </form>\n </ng-container>\n </ng-template>\n <ng-template #abpFooter>\n <button type=\"button\" class=\"btn btn-secondary\" abpClose>{{'AbpUi::Close' | abpLocalization}}</button>\n <abp-button iconClass=\"fa fa-check\" (click)=\"editFieldTabsModalSubmitBtn.nativeElement.click()\">{{'AbpUi::Save'\n | abpLocalization}}</abp-button>\n </ng-template>\n</abp-modal>\n\n<!-- \u7528\u4E8E\u4FEE\u6539\u5B57\u6BB5\u914D\u7F6E\u7684\u6A21\u6001\u6846 -->\n<abp-modal [(visible)]=\"visibleEditFieldOpen\" [busy]=\"modalBusy\" (visibleChange)=\"VisibleEditFieldChange($event)\">\n <ng-template #abpHeader>\n <h3>{{'AbpUi::Edit' | abpLocalization}}</h3>\n </ng-template>\n <ng-template #abpBody>\n <ng-template #loaderRef>\n <div class=\"text-center\"><i class=\"fa fa-pulse fa-spinner\" aria-hidden=\"true\"></i></div>\n </ng-template>\n <ng-container *ngIf=\"editFieldFrom; else loaderRef\">\n <form class=\"sites-modal-form\" [formGroup]=\"editFieldFrom\" (submit)=\"editFieldSave()\">\n <button type=\"submit\" #editFieldModalSubmitBtn style=\"display: none\"></button>\n <div class=\"mb-3\">\n <label class=\"form-label\">{{'Cms::DisplayName' | abpLocalization}}</label>\n <input type=\"text\" class=\"form-control\" formControlName=\"displayName\" placeholder=\"\" />\n </div>\n <!-- <div class=\"mb-3\">\n <div class=\"form-check form-check-inline\">\n <input class=\"form-check-input\" type=\"checkbox\" value=\"true\" formControlName=\"required\"\n id=\"required\" />\n <label class=\"form-check-label\" for=\"required\"> {{'Cms::Required' | abpLocalization}} </label>\n </div>\n </div> -->\n <!-- @if(isShowInList){\n <div class=\"mb-3\">\n <div class=\"form-check form-check-inline\">\n <input class=\"form-check-input\" type=\"checkbox\" value=\"true\" formControlName=\"showInList\"\n id=\"showInList\" />\n <label class=\"form-check-label\" for=\"showInList\"> {{'Cms::ShowInList' | abpLocalization}}\n </label>\n </div>\n </div>\n }\n @if(isEnableSearch){\n <div class=\"mb-3\">\n <div class=\"form-check form-check-inline\">\n <input class=\"form-check-input\" type=\"checkbox\" value=\"true\" formControlName=\"enableSearch\"\n id=\"enableSearch\" />\n <label class=\"form-check-label\" for=\"enableSearch\"> {{'Cms::EnableSearch' | abpLocalization}}\n </label>\n </div>\n </div>\n } -->\n </form>\n </ng-container>\n </ng-template>\n <ng-template #abpFooter>\n <button type=\"button\" class=\"btn btn-secondary\" abpClose>{{'AbpUi::Close' | abpLocalization}}</button>\n <abp-button iconClass=\"fa fa-check\" [disabled]=\"!editFieldFrom.valid\"\n (click)=\"editFieldModalSubmitBtn.nativeElement.click()\">{{'AbpUi::Save' | abpLocalization}}</abp-button>\n </ng-template>\n</abp-modal>", styles: ["::ng-deep .create-or-edit-entry-type-page .dignite_page{height:calc(100vh - 125px);overflow:auto}::ng-deep .create-or-edit-entry-type-page .form-control,::ng-deep .create-or-edit-entry-type-page .form-select{padding:.475rem 1.25rem}::ng-deep .create-or-edit-entry-type-page .cursor-move{cursor:move}::ng-deep .create-or-edit-entry-type-page .bordernNavs{border:var(--bs-border-width) solid var(--lpx-border-color);padding-left:inherit;padding-right:inherit;height:calc(100% - 60px)}::ng-deep .create-or-edit-entry-type-page .tab-pane{height:100%}::ng-deep .create-or-edit-entry-type-page .nav-tabs .nav-link.active{border-color:var(--bs-nav-tabs-link-active-border-color)!important}\n"], dependencies: [{ kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i9.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i9.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: i9.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i9.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i9.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i9.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "directive", type: i9.FormArrayName, selector: "[formArrayName]", inputs: ["formArrayName"] }, { kind: "directive", type: i6.StopPropagationDirective, selector: "[click.stop]", outputs: ["click.stop"] }, { kind: "directive", type: i10.ValidationGroupDirective, selector: "[formGroup],[formGroupName]", exportAs: ["validationGroup"] }, { kind: "directive", type: i10.ValidationDirective, selector: "[formControl],[formControlName]", exportAs: ["validationDirective"] }, { kind: "component", type: i1.ButtonComponent, selector: "abp-button", inputs: ["buttonId", "buttonClass", "buttonType", "formName", "iconClass", "loading", "disabled", "attributes"], outputs: ["click", "focus", "blur", "abpClick", "abpFocus", "abpBlur"] }, { kind: "component", type: i1.ModalComponent, selector: "abp-modal", inputs: ["visible", "busy", "options", "suppressUnsavedChangesWarning"], outputs: ["visibleChange", "init", "appear", "disappear"] }, { kind: "directive", type: i1.ModalCloseDirective, selector: "[abpClose]" }, { kind: "directive", type: i11.NgbNavContent, selector: "ng-template[ngbNavContent]" }, { kind: "directive", type: i11.NgbNav, selector: "[ngbNav]", inputs: ["activeId", "animation", "destroyOnHide", "orientation", "roles", "keyboard"], outputs: ["activeIdChange", "shown", "hidden", "navChange"], exportAs: ["ngbNav"] }, { kind: "directive", type: i11.NgbNavItem, selector: "[ngbNavItem]", inputs: ["destroyOnHide", "disabled", "domId", "ngbNavItem"], outputs: ["shown", "hidden"], exportAs: ["ngbNavItem"] }, { kind: "directive", type: i11.NgbNavItemRole, selector: "[ngbNavItem]:not(ng-container)" }, { kind: "directive", type: i11.NgbNavLinkButton, selector: "button[ngbNavLink]" }, { kind: "directive", type: i11.NgbNavLinkBase, selector: "[ngbNavLink]" }, { kind: "component", type: i11.NgbNavOutlet, selector: "[ngbNavOutlet]", inputs: ["paneRole", "ngbNavOutlet"] }, { kind: "directive", type: i11.NgbAccordionButton, selector: "button[ngbAccordionButton]" }, { kind: "directive", type: i11.NgbAccordionDirective, selector: "[ngbAccordion]", inputs: ["animation", "closeOthers", "destroyOnHide"], outputs: ["show", "shown", "hide", "hidden"], exportAs: ["ngbAccordion"] }, { kind: "directive", type: i11.NgbAccordionItem, selector: "[ngbAccordionItem]", inputs: ["ngbAccordionItem", "destroyOnHide", "disabled", "collapsed"], outputs: ["show", "shown", "hide", "hidden"], exportAs: ["ngbAccordionItem"] }, { kind: "directive", type: i11.NgbAccordionHeader, selector: "[ngbAccordionHeader]" }, { kind: "directive", type: i11.NgbAccordionBody, selector: "[ngbAccordionBody]" }, { kind: "directive", type: i11.NgbAccordionCollapse, selector: "[ngbAccordionCollapse]", exportAs: ["ngbAccordionCollapse"] }, { kind: "directive", type: i11.NgbDropdown, selector: "[ngbDropdown]", inputs: ["autoClose", "dropdownClass", "open", "placement", "popperOptions", "container", "display"], outputs: ["openChange"], exportAs: ["ngbDropdown"] }, { kind: "directive", type: i11.NgbDropdownToggle, selector: "[ngbDropdownToggle]" }, { kind: "directive", type: i11.NgbDropdownMenu, selector: "[ngbDropdownMenu]" }, { kind: "directive", type: i11.NgbDropdownItem, selector: "[ngbDropdownItem]", inputs: ["tabindex", "disabled"] }, { kind: "component", type: i12.PageComponent, selector: "abp-page", inputs: ["title", "toolbar", "breadcrumb"] }, { kind: "directive", type: i13.CdkDragHandle, selector: "[cdkDragHandle]", inputs: ["cdkDragHandleDisabled"] }, { kind: "pipe", type: i6.LocalizationPipe, name: "abpLocalization" }] }); }
|
|
477
510
|
}
|
|
478
511
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.5", ngImport: i0, type: CreateOrEditComponent, decorators: [{
|
|
479
512
|
type: Component,
|
|
@@ -482,7 +515,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.5", ngImpor
|
|
|
482
515
|
provide: EXTENSIONS_IDENTIFIER,
|
|
483
516
|
useValue: ECmsComponent.SectionsCreateOrEdit,
|
|
484
517
|
},
|
|
485
|
-
], template: "<form class=\"row g-3 needs-validation\" [formGroup]=\"newEntity\" [class]=\"{'was-validated':formValidation}\"\n (submit)=\"save()\">\n <abp-page [title]=\"entryTypesId ? ('AbpUi::Edit' | abpLocalization):('Cms::New' | abpLocalization)\"\n [toolbar]=\"true\">\n <div class=\"create-or-edit-entry-type-page\">\n <div class=\"card\">\n <button type=\"submit\" style=\"display: none;\" #submitclick></button>\n <div class=\"card-body\">\n <div class=\"\">\n <div class=\"mb-3\">\n <label class=\"form-label\">{{'Cms::DisplayName' | abpLocalization}}</label>\n <input type=\"text\" class=\"form-control\" formControlName=\"displayName\"\n (blur)=\"disPlayNameInputBlur($event)\" placeholder=\"\" />\n </div>\n <div class=\"mb-3\">\n <label class=\"form-label\">{{'Cms::Name' | abpLocalization}}</label>\n <input type=\"text\" class=\"form-control\" formControlName=\"name\" placeholder=\"\" />\n </div>\n <div formArrayName=\"fieldTabs\">\n <div class=\"mb-3\">\n <label class=\"form-label\">{{'Cms::FieldLayout' | abpLocalization}}</label>\n <div class=\"container\">\n <div class=\"row\">\n <div class=\"col-sm-8 border rounded\">\n <ul ngbNav #nav=\"ngbNav\" [(activeId)]=\"navActive\" class=\"nav nav-tabs\">\n <ng-container *ngFor=\"let item of resultSource; let i = index\">\n <li [ngbNavItem]=\"i\" ngbDropdown class=\"nav-item\" role=\"presentation\"> \n <button type=\"button\" ngbNavLink class=\"nav-link\">\n {{ item.name }}\n <span class=\"ms-1\" (click.stop)=\"$event.stopPropagation()\"\n ngbDropdownToggle></span>\n </button>\n <div ngbDropdownMenu style=\"z-index: 999;\">\n <span ngbDropdownItem type=\"button\"\n (click.stop)=\"editFieldTabs(item,i)\">\n <i class=\"fas fa-edit\"></i>\n {{'AbpUi::Edit' | abpLocalization}}\n </span>\n <span ngbDropdownItem *ngIf=\"resultSource.length !== 1\"\n type=\"button\" (click.stop)=\"deleteFieldTabs(i)\">\n <i class=\"fas fa-trash\"></i>\n {{'AbpUi::Delete' | abpLocalization}}\n </span>\n </div>\n <ng-template ngbNavContent>\n <div class=\"p-2\" ondragover=\"event.preventDefault();\"\n (drop)=\"dragToResultSourceDropped(item,i)\"\n style=\"height: 100%;\">\n <p class=\"form-text text-muted\"\n *ngIf=\"item.fields.length === 0\">\n {{'Cms::DragAndDropFieldTips' | abpLocalization}}\n </p>\n <ul class=\"list-group\" style=\"height: 100%;\">\n <ng-container\n *ngFor=\"let el of item.fields; let iel = index\">\n <li draggable=\"true\"\n (dragstart)=\"fromResultSourceDragStart(el)\"\n (drop)=\"dragToResultSourceItemDropped(iel)\"\n class=\"list-group-item d-flex align-items-center justify-content-between py-1\"\n style=\"position: unset;\">\n {{ el.displayName }}\n <button class=\"p-0 btn btn-sm btn-light\"\n (click.stop)=\"EditFieldModalOpen(el,iel)\"\n type=\"button\"><i\n class=\"fas fa-wrench p-sm-1\"\n role=\"button\"></i></button>\n </li>\n </ng-container>\n </ul>\n\n </div>\n </ng-template>\n </li>\n </ng-container>\n <li class=\"nav-item\" role=\"presentation\">\n <button type=\"button\" class=\"nav-link\"\n (click.stop)=\"addFieldTabs()\">\n <i class=\"fas fa-plus-circle\"></i>\n {{'Cms::NewTab' | abpLocalization}}\n </button>\n </li>\n </ul>\n <div [ngbNavOutlet]=\"nav\" class=\"mt-2 bordernNavs p-0\"></div>\n </div>\n <div class=\"col-sm-4\">\n <div ngbAccordion #accordion=\"ngbAccordion\"\n ondragover=\"event.preventDefault();\" (drop)=\"dragToDataSourceDropped()\"\n style=\"min-height: 80px;\">\n <ng-container *ngFor=\"let item of fieldGroupList; let i = index\">\n <div [ngbAccordionItem]=\"item.name\" *ngIf=\"item.fields.length > 0\">\n <h2 ngbAccordionHeader>\n <button ngbAccordionButton>{{\n ('Cms::'+item.name) | abpLocalization }}</button>\n </h2>\n <div ngbAccordionCollapse>\n <div ngbAccordionBody>\n <ng-template>\n <ul class=\"list-group\">\n <ng-container\n *ngFor=\"let el of item.fields; let ii = index\">\n <li draggable=\"true\"\n (dragstart)=\"fromDataSourceDragStart(el,ii,i)\"\n class=\"list-group-item\">\n {{ el.displayName }}\n </li>\n </ng-container>\n </ul>\n </ng-template>\n </div>\n </div>\n </div>\n </ng-container>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n\n\n </div>\n </div>\n\n\n <!-- </div> -->\n </abp-page>\n\n</form>\n\n<abp-modal [(visible)]=\"visibleTabsOpen\" [busy]=\"modalBusy\" (visibleChange)=\"VisibleTabsChange($event)\">\n <ng-template #abpHeader>\n <h3>{{ editFieldTabsSelect ? ('AbpUi::Edit' | abpLocalization):('Cms::New' | abpLocalization)}}</h3>\n </ng-template>\n <ng-template #abpBody>\n <ng-template #loaderRef>\n <div class=\"text-center\"><i class=\"fa fa-pulse fa-spinner\" aria-hidden=\"true\"></i></div>\n </ng-template>\n <ng-container *ngIf=\"editFieldTabsFrom; else loaderRef\">\n <form class=\"sites-modal-form\" [formGroup]=\"editFieldTabsFrom\" [class]=\"{'was-validated':formValidation}\"\n (submit)=\"editFieldTabsSave()\">\n <button type=\"submit\" #editFieldTabsModalSubmitBtn style=\"display: none\"></button>\n <div class=\"mb-3\">\n <label class=\"form-label\">{{'Cms::Name' | abpLocalization}}</label>\n <input type=\"text\" class=\"form-control\" formControlName=\"name\" placeholder=\"\" />\n </div>\n </form>\n </ng-container>\n </ng-template>\n <ng-template #abpFooter>\n <button type=\"button\" class=\"btn btn-secondary\" abpClose>{{'AbpUi::Close' | abpLocalization}}</button>\n <abp-button iconClass=\"fa fa-check\" (click)=\"editFieldTabsModalSubmitBtn.nativeElement.click()\">{{'AbpUi::Save'\n | abpLocalization}}</abp-button>\n </ng-template>\n</abp-modal>\n\n\n<abp-modal [(visible)]=\"visibleEditFieldOpen\" [busy]=\"modalBusy\" (visibleChange)=\"VisibleEditFieldChange($event)\">\n <ng-template #abpHeader>\n <h3>{{'AbpUi::Edit' | abpLocalization}}</h3>\n </ng-template>\n <ng-template #abpBody>\n <ng-template #loaderRef>\n <div class=\"text-center\"><i class=\"fa fa-pulse fa-spinner\" aria-hidden=\"true\"></i></div>\n </ng-template>\n <ng-container *ngIf=\"editFieldFrom; else loaderRef\">\n <form class=\"sites-modal-form\" [formGroup]=\"editFieldFrom\" (submit)=\"editFieldSave()\">\n <button type=\"submit\" #editFieldModalSubmitBtn style=\"display: none\"></button>\n <div class=\"mb-3\">\n <label class=\"form-label\">{{'Cms::DisplayName' | abpLocalization}}</label>\n <input type=\"text\" class=\"form-control\" formControlName=\"displayName\" placeholder=\"\" />\n </div>\n <div class=\"mb-3\">\n <div class=\"form-check form-check-inline\">\n <input class=\"form-check-input\" type=\"checkbox\" value=\"true\" formControlName=\"required\"\n id=\"required\" />\n <label class=\"form-check-label\" for=\"required\"> {{'Cms::Required' | abpLocalization}} </label>\n </div>\n </div>\n @if(isShowInList){\n <div class=\"mb-3\">\n <div class=\"form-check form-check-inline\">\n <input class=\"form-check-input\" type=\"checkbox\" value=\"true\" formControlName=\"showInList\"\n id=\"showInList\" />\n <label class=\"form-check-label\" for=\"showInList\"> {{'Cms::ShowInList' | abpLocalization}}\n </label>\n </div>\n </div>\n }\n @if(isEnableSearch){\n <div class=\"mb-3\">\n <div class=\"form-check form-check-inline\">\n <input class=\"form-check-input\" type=\"checkbox\" value=\"true\" formControlName=\"enableSearch\"\n id=\"enableSearch\" />\n <label class=\"form-check-label\" for=\"enableSearch\"> {{'Cms::EnableSearch' | abpLocalization}}\n </label>\n </div>\n </div>\n }\n </form>\n </ng-container>\n </ng-template>\n <ng-template #abpFooter>\n <button type=\"button\" class=\"btn btn-secondary\" abpClose>{{'AbpUi::Close' | abpLocalization}}</button>\n <abp-button iconClass=\"fa fa-check\" [disabled]=\"!editFieldFrom.valid\"\n (click)=\"editFieldModalSubmitBtn.nativeElement.click()\">{{'AbpUi::Save' | abpLocalization}}</abp-button>\n </ng-template>\n</abp-modal>", styles: ["::ng-deep .create-or-edit-entry-type-page .dignite_page{height:calc(100vh - 125px);overflow:auto}::ng-deep .create-or-edit-entry-type-page .form-control,::ng-deep .create-or-edit-entry-type-page .form-select{padding:.475rem 1.25rem}::ng-deep .create-or-edit-entry-type-page .cursor-move{cursor:move}::ng-deep .create-or-edit-entry-type-page .bordernNavs{border:var(--bs-border-width) solid var(--lpx-border-color);padding-left:inherit;padding-right:inherit;height:calc(100% - 60px)}::ng-deep .create-or-edit-entry-type-page .tab-pane{height:100%}::ng-deep .create-or-edit-entry-type-page .nav-tabs .nav-link.active{border-color:var(--bs-nav-tabs-link-active-border-color)!important}\n"] }]
|
|
518
|
+
], template: "<form class=\"row g-3 needs-validation\" [formGroup]=\"newEntity\" [class]=\"{'was-validated':formValidation}\"\n (submit)=\"save()\">\n <abp-page [title]=\"entryTypesId ? ('AbpUi::Edit' | abpLocalization):('Cms::New' | abpLocalization)\"\n [toolbar]=\"true\">\n <div class=\"create-or-edit-entry-type-page\">\n <div class=\"card\">\n <button type=\"submit\" style=\"display: none;\" #submitclick></button>\n <div class=\"card-body\">\n <div class=\"\">\n <div class=\"mb-3\">\n <label class=\"form-label\">{{'Cms::DisplayName' | abpLocalization}}</label>\n <input type=\"text\" class=\"form-control\" formControlName=\"displayName\"\n (blur)=\"disPlayNameInputBlur($event)\" placeholder=\"\" />\n </div>\n <div class=\"mb-3\">\n <label class=\"form-label\">{{'Cms::Name' | abpLocalization}}</label>\n <input type=\"text\" class=\"form-control\" formControlName=\"name\" placeholder=\"\" />\n </div>\n <div formArrayName=\"fieldTabs\">\n <div class=\"mb-3\">\n <label class=\"form-label\">{{'Cms::FieldLayout' | abpLocalization}}</label>\n <div class=\"container\">\n <div class=\"row\">\n <div class=\"col-sm-8 border rounded\">\n <ul ngbNav #nav=\"ngbNav\" [(activeId)]=\"navActive\" class=\"nav nav-tabs\">\n <ng-container *ngFor=\"let item of resultSource; let i = index\">\n <li [ngbNavItem]=\"i\" ngbDropdown class=\"nav-item\"\n role=\"presentation\">\n <button type=\"button\" ngbNavLink class=\"nav-link\">\n {{ item.name }}\n <span class=\"ms-1\" (click.stop)=\"$event.stopPropagation()\"\n ngbDropdownToggle></span>\n </button>\n <div ngbDropdownMenu style=\"z-index: 999;\">\n <span ngbDropdownItem type=\"button\"\n (click.stop)=\"editFieldTabs(item,i)\">\n <i class=\"fas fa-edit\"></i>\n {{'AbpUi::Edit' | abpLocalization}}\n </span>\n <span ngbDropdownItem *ngIf=\"resultSource.length !== 1\"\n type=\"button\" (click.stop)=\"deleteFieldTabs(i)\">\n <i class=\"fas fa-trash\"></i>\n {{'AbpUi::Delete' | abpLocalization}}\n </span>\n </div>\n <ng-template ngbNavContent>\n <div class=\"p-2\" ondragover=\"event.preventDefault();\"\n (drop)=\"dragToResultSourceDropped(item,i)\"\n style=\"height: 100%;\">\n <p class=\"form-text text-muted\"\n *ngIf=\"item.fields.length === 0\">\n {{'Cms::DragAndDropFieldTips' | abpLocalization}}\n </p>\n <table class=\"table\">\n <thead>\n <th></th>\n <th>{{'Cms::DisplayName' | abpLocalization}}\n </th>\n <th>{{'Cms::Required' | abpLocalization}}</th>\n <th>{{'Cms::ShowInList' | abpLocalization}}</th>\n <th>{{'Cms::EnableSearch' | abpLocalization}}\n </th>\n <th></th>\n </thead>\n <tbody>\n <ng-container\n *ngFor=\"let el of item.fields; let iel = index\">\n <tr draggable=\"true\"\n (dragstart)=\"fromResultSourceDragStart(el)\"\n (drop)=\"dragToResultSourceItemDropped(iel)\">\n <td >\n <div class=\"drag-handle d-inline\" \n cdkDragHandle>\n <span\n class=\"bi bi-arrows-move fs-5\"></span>\n </div>\n </td>\n \n <td>{{ el.displayName }}</td>\n <td>\n <input type=\"checkbox\" role=\"button\" class=\"form-check-input\" [checked]=\"el.required\" name=\"required\" (change)=\"checkboxChange($event,{row:el,index:iel})\" />\n </td>\n <td>\n <input type=\"checkbox\" role=\"button\" class=\"form-check-input\" [checked]=\"el.showInList\" name=\"showInList\" (change)=\"checkboxChange($event,{row:el,index:iel})\" />\n </td>\n <td>\n <input type=\"checkbox\" role=\"button\" class=\"form-check-input\" [checked]=\"el.enableSearch\" name=\"enableSearch\" (change)=\"checkboxChange($event,{row:el,index:iel})\" />\n </td>\n <td style=\"width: 1%;\"> \n <button\n class=\"p-0 btn btn-sm btn-light\"\n (click.stop)=\"EditFieldModalOpen(el,iel)\"\n type=\"button\"><i\n class=\"fas fa-wrench p-sm-1\"\n role=\"button\"></i></button>\n </td>\n </tr>\n </ng-container>\n </tbody>\n </table>\n\n\n <!-- <ul class=\"list-group\" style=\"height: 100%;\">\n <ng-container\n *ngFor=\"let el of item.fields; let iel = index\">\n <li draggable=\"true\"\n (dragstart)=\"fromResultSourceDragStart(el)\"\n (drop)=\"dragToResultSourceItemDropped(iel)\"\n class=\"list-group-item d-flex align-items-center justify-content-between py-1\"\n style=\"position: unset;\">\n {{ el.displayName }}\n <button class=\"p-0 btn btn-sm btn-light\"\n (click.stop)=\"EditFieldModalOpen(el,iel)\"\n type=\"button\"><i\n class=\"fas fa-wrench p-sm-1\"\n role=\"button\"></i></button>\n </li>\n </ng-container>\n </ul> -->\n\n </div>\n </ng-template>\n </li>\n </ng-container>\n <li class=\"nav-item\" role=\"presentation\">\n <button type=\"button\" class=\"nav-link\"\n (click.stop)=\"addFieldTabs()\">\n <i class=\"fas fa-plus-circle\"></i>\n {{'Cms::NewTab' | abpLocalization}}\n </button>\n </li>\n </ul>\n <div [ngbNavOutlet]=\"nav\" class=\"mt-2 bordernNavs p-0\"></div>\n </div>\n <div class=\"col-sm-4\">\n <div ngbAccordion #accordion=\"ngbAccordion\"\n ondragover=\"event.preventDefault();\" (drop)=\"dragToDataSourceDropped()\"\n style=\"min-height: 80px;\">\n <ng-container *ngFor=\"let item of fieldGroupList; let i = index\">\n <div [ngbAccordionItem]=\"item.name\" *ngIf=\"item.fields.length > 0\">\n <h2 ngbAccordionHeader>\n <button ngbAccordionButton>{{\n ('Cms::'+item.name) | abpLocalization }}</button>\n </h2>\n <div ngbAccordionCollapse>\n <div ngbAccordionBody>\n <ng-template>\n <ul class=\"list-group\">\n <ng-container\n *ngFor=\"let el of item.fields; let ii = index\">\n <li draggable=\"true\"\n (dragstart)=\"fromDataSourceDragStart(el,ii,i)\"\n class=\"list-group-item\">\n {{ el.displayName }}\n </li>\n </ng-container>\n </ul>\n </ng-template>\n </div>\n </div>\n </div>\n </ng-container>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n\n\n </div>\n </div>\n\n\n <!-- </div> -->\n </abp-page>\n\n</form>\n<!-- \u7528\u4E8E\u521B\u5EFA\u7F16\u8F91tab\u7684\u6A21\u6001\u6846 -->\n<abp-modal [(visible)]=\"visibleTabsOpen\" [busy]=\"modalBusy\" (visibleChange)=\"VisibleTabsChange($event)\">\n <ng-template #abpHeader>\n <h3>{{ editFieldTabsSelect ? ('AbpUi::Edit' | abpLocalization):('Cms::New' | abpLocalization)}}</h3>\n </ng-template>\n <ng-template #abpBody>\n <ng-template #loaderRef>\n <div class=\"text-center\"><i class=\"fa fa-pulse fa-spinner\" aria-hidden=\"true\"></i></div>\n </ng-template>\n <ng-container *ngIf=\"editFieldTabsFrom; else loaderRef\">\n <form class=\"sites-modal-form\" [formGroup]=\"editFieldTabsFrom\" [class]=\"{'was-validated':formValidation}\"\n (submit)=\"editFieldTabsSave()\">\n <button type=\"submit\" #editFieldTabsModalSubmitBtn style=\"display: none\"></button>\n <div class=\"mb-3\">\n <label class=\"form-label\">{{'Cms::Name' | abpLocalization}}</label>\n <input type=\"text\" class=\"form-control\" formControlName=\"name\" placeholder=\"\" />\n </div>\n </form>\n </ng-container>\n </ng-template>\n <ng-template #abpFooter>\n <button type=\"button\" class=\"btn btn-secondary\" abpClose>{{'AbpUi::Close' | abpLocalization}}</button>\n <abp-button iconClass=\"fa fa-check\" (click)=\"editFieldTabsModalSubmitBtn.nativeElement.click()\">{{'AbpUi::Save'\n | abpLocalization}}</abp-button>\n </ng-template>\n</abp-modal>\n\n<!-- \u7528\u4E8E\u4FEE\u6539\u5B57\u6BB5\u914D\u7F6E\u7684\u6A21\u6001\u6846 -->\n<abp-modal [(visible)]=\"visibleEditFieldOpen\" [busy]=\"modalBusy\" (visibleChange)=\"VisibleEditFieldChange($event)\">\n <ng-template #abpHeader>\n <h3>{{'AbpUi::Edit' | abpLocalization}}</h3>\n </ng-template>\n <ng-template #abpBody>\n <ng-template #loaderRef>\n <div class=\"text-center\"><i class=\"fa fa-pulse fa-spinner\" aria-hidden=\"true\"></i></div>\n </ng-template>\n <ng-container *ngIf=\"editFieldFrom; else loaderRef\">\n <form class=\"sites-modal-form\" [formGroup]=\"editFieldFrom\" (submit)=\"editFieldSave()\">\n <button type=\"submit\" #editFieldModalSubmitBtn style=\"display: none\"></button>\n <div class=\"mb-3\">\n <label class=\"form-label\">{{'Cms::DisplayName' | abpLocalization}}</label>\n <input type=\"text\" class=\"form-control\" formControlName=\"displayName\" placeholder=\"\" />\n </div>\n <!-- <div class=\"mb-3\">\n <div class=\"form-check form-check-inline\">\n <input class=\"form-check-input\" type=\"checkbox\" value=\"true\" formControlName=\"required\"\n id=\"required\" />\n <label class=\"form-check-label\" for=\"required\"> {{'Cms::Required' | abpLocalization}} </label>\n </div>\n </div> -->\n <!-- @if(isShowInList){\n <div class=\"mb-3\">\n <div class=\"form-check form-check-inline\">\n <input class=\"form-check-input\" type=\"checkbox\" value=\"true\" formControlName=\"showInList\"\n id=\"showInList\" />\n <label class=\"form-check-label\" for=\"showInList\"> {{'Cms::ShowInList' | abpLocalization}}\n </label>\n </div>\n </div>\n }\n @if(isEnableSearch){\n <div class=\"mb-3\">\n <div class=\"form-check form-check-inline\">\n <input class=\"form-check-input\" type=\"checkbox\" value=\"true\" formControlName=\"enableSearch\"\n id=\"enableSearch\" />\n <label class=\"form-check-label\" for=\"enableSearch\"> {{'Cms::EnableSearch' | abpLocalization}}\n </label>\n </div>\n </div>\n } -->\n </form>\n </ng-container>\n </ng-template>\n <ng-template #abpFooter>\n <button type=\"button\" class=\"btn btn-secondary\" abpClose>{{'AbpUi::Close' | abpLocalization}}</button>\n <abp-button iconClass=\"fa fa-check\" [disabled]=\"!editFieldFrom.valid\"\n (click)=\"editFieldModalSubmitBtn.nativeElement.click()\">{{'AbpUi::Save' | abpLocalization}}</abp-button>\n </ng-template>\n</abp-modal>", styles: ["::ng-deep .create-or-edit-entry-type-page .dignite_page{height:calc(100vh - 125px);overflow:auto}::ng-deep .create-or-edit-entry-type-page .form-control,::ng-deep .create-or-edit-entry-type-page .form-select{padding:.475rem 1.25rem}::ng-deep .create-or-edit-entry-type-page .cursor-move{cursor:move}::ng-deep .create-or-edit-entry-type-page .bordernNavs{border:var(--bs-border-width) solid var(--lpx-border-color);padding-left:inherit;padding-right:inherit;height:calc(100% - 60px)}::ng-deep .create-or-edit-entry-type-page .tab-pane{height:100%}::ng-deep .create-or-edit-entry-type-page .nav-tabs .nav-link.active{border-color:var(--bs-nav-tabs-link-active-border-color)!important}\n"] }]
|
|
486
519
|
}], ctorParameters: () => [{ type: i1.ToasterService }, { type: i2.Location }, { type: i3.ActivatedRoute }, { type: i4.FieldGroupAdminService }, { type: i4.FieldAdminService }, { type: i5.EntryTypeAdminService }, { type: i6.LocalizationService }, { type: i7.CmsApiService }, { type: i8.FormControlsService }], propDecorators: { submitclick: [{
|
|
487
520
|
type: ViewChild,
|
|
488
521
|
args: ['submitclick', { static: true }]
|
|
@@ -493,4 +526,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.5", ngImpor
|
|
|
493
526
|
type: ViewChild,
|
|
494
527
|
args: ['editFieldModalSubmitBtn', { static: false }]
|
|
495
528
|
}] } });
|
|
496
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3JlYXRlLW9yLWVkaXQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvY21zL3NyYy9saWIvY29tcG9uZW50cy9hZG1pbi9zZWN0aW9ucy9lbnRyeS10eXBlcy9jcmVhdGUtb3ItZWRpdC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9jbXMvc3JjL2xpYi9jb21wb25lbnRzL2FkbWluL3NlY3Rpb25zL2VudHJ5LXR5cGVzL2NyZWF0ZS1vci1lZGl0LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLDBDQUEwQztBQUMxQyx1REFBdUQ7QUFDdkQsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDdEUsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQ25ELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUN0RCxPQUFPLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQVUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ2pGLE9BQU8sRUFBRSxXQUFXLEVBQXdCLE1BQU0sZ0JBQWdCLENBQUM7QUFDbkUsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ2pELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUNyRCxPQUFPLEVBQ0wsOEJBQThCLEVBQzlCLGFBQWEsRUFDYixVQUFVLEdBQ1gsTUFBTSx5Q0FBeUMsQ0FBQztBQUNqRCxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDM0MsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ2xELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQzVELE9BQU8s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QjJDLFdBQVc7c0JBQXRELFNBQVM7dUJBQUMsYUFBYSxFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRTtnQkF1VzFDLDJCQUEyQjtzQkFEMUIsU0FBUzt1QkFBQyw2QkFBNkIsRUFBRSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUU7Z0JBZ0VGLHVCQUF1QjtzQkFBL0UsU0FBUzt1QkFBQyx5QkFBeUIsRUFBRSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSBuby1wcm90b3R5cGUtYnVpbHRpbnMgKi9cbi8qIGVzbGludC1kaXNhYmxlIEBhbmd1bGFyLWVzbGludC9jb21wb25lbnQtc2VsZWN0b3IgKi9cbmltcG9ydCB7IEVYVEVOU0lPTlNfSURFTlRJRklFUiB9IGZyb20gJ0BhYnAvbmcuY29tcG9uZW50cy9leHRlbnNpYmxlJztcbmltcG9ydCB7IExvY2FsaXphdGlvblNlcnZpY2UgfSBmcm9tICdAYWJwL25nLmNvcmUnO1xuaW1wb3J0IHsgVG9hc3RlclNlcnZpY2UgfSBmcm9tICdAYWJwL25nLnRoZW1lLnNoYXJlZCc7XG5pbXBvcnQgeyBDb21wb25lbnQsIEVsZW1lbnRSZWYsIGluamVjdCwgT25Jbml0LCBWaWV3Q2hpbGQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEZvcm1CdWlsZGVyLCBGb3JtR3JvdXAsIEZvcm1BcnJheSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IEFjdGl2YXRlZFJvdXRlIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7IENtc0FwaVNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi8uLi9zZXJ2aWNlcyc7XG5pbXBvcnQge1xuICBDcmVhdGVPckVkaXRFbnRyeVR5cGVJbnB1dEJhc2UsXG4gIGZpZWxkVGFic0Jhc2UsXG4gIGZpZWxkc0Jhc2UsXG59IGZyb20gJy4vY3JlYXRlLW9yLWVkaXQuLWVudHJ5LXR5cGUtaW5wdXQtYmFzZSc7XG5pbXBvcnQgeyBMb2NhdGlvbiB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBFQ21zQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vLi4vLi4vZW51bXMnO1xuaW1wb3J0IHsgVmFsaWRhdG9yc1NlcnZpY2UgfSBmcm9tICdAZGlnbml0ZS1uZy9leHBhbmQuY29yZSc7XG5pbXBvcnQgeyBVcGRhdGVMaXN0U2VydmljZSB9IGZyb20gJ0BkaWduaXRlLW5nL2V4cGFuZC5jb3JlJztcbmltcG9ydCB7IGZpbmFsaXplIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQge1xuICBGaWVsZEFkbWluU2VydmljZSxcbiAgRmllbGRHcm91cEFkbWluU2VydmljZSxcbn0gZnJvbSAnLi4vLi4vLi4vLi4vcHJveHkvZGlnbml0ZS9jbXMvYWRtaW4vZmllbGRzJztcbmltcG9ydCB7IEVudHJ5VHlwZUFkbWluU2VydmljZSB9IGZyb20gJy4uLy4uLy4uLy4uL3Byb3h5L2RpZ25pdGUvY21zL2FkbWluL3NlY3Rpb25zJztcbmltcG9ydCB7IEZvcm1Db250cm9sc1NlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi8uLi9zZXJ2aWNlcy9mb3JtLWNvbnRyb2xzLnNlcnZpY2UnO1xuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnY21zLWNyZWF0ZS1vci1lZGl0JyxcbiAgdGVtcGxhdGVVcmw6ICcuL2NyZWF0ZS1vci1lZGl0LmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vY3JlYXRlLW9yLWVkaXQuY29tcG9uZW50LnNjc3MnXSxcbiAgcHJvdmlkZXJzOiBbXG4gICAge1xuICAgICAgcHJvdmlkZTogRVhURU5TSU9OU19JREVOVElGSUVSLFxuICAgICAgdXNlVmFsdWU6IEVDbXNDb21wb25lbnQuU2VjdGlvbnNDcmVhdGVPckVkaXQsXG4gICAgfSxcbiAgXSxcbn0pXG5leHBvcnQgY2xhc3MgQ3JlYXRlT3JFZGl0Q29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSB0b2FzdGVyOiBUb2FzdGVyU2VydmljZSxcbiAgICBwdWJsaWMgX2xvY2F0aW9uOiBMb2NhdGlvbixcbiAgICBwcml2YXRlIHJvdXRlOiBBY3RpdmF0ZWRSb3V0ZSxcbiAgICBwdWJsaWMgX0ZpZWxkR3JvdXBBZG1pblNlcnZpY2U6IEZpZWxkR3JvdXBBZG1pblNlcnZpY2UsXG4gICAgcHVibGljIF9GaWVsZEFkbWluU2VydmljZTogRmllbGRBZG1pblNlcnZpY2UsXG4gICAgcHVibGljIF9FbnRyeVR5cGVBZG1pblNlcnZpY2U6IEVudHJ5VHlwZUFkbWluU2VydmljZSxcbiAgICBwdWJsaWMgX0xvY2FsaXphdGlvblNlcnZpY2U6IExvY2FsaXphdGlvblNlcnZpY2UsXG4gICAgcHVibGljIF9DbXNBcGlTZXJ2aWNlOiBDbXNBcGlTZXJ2aWNlLFxuICAgIHB1YmxpYyBfRm9ybUNvbnRyb2xzU2VydmljZTogRm9ybUNvbnRyb2xzU2VydmljZSxcbiAgKSB7fVxuICBwcml2YXRlIGZiID0gaW5qZWN0KEZvcm1CdWlsZGVyKTtcbiAgcHJpdmF0ZSBfVXBkYXRlTGlzdFNlcnZpY2UgPSBpbmplY3QoVXBkYXRlTGlzdFNlcnZpY2UpO1xuICAvKirooajljZXlrp7kvZMgKi9cbiAgbmV3RW50aXR5OiBGb3JtR3JvdXAgfCBhbnk7XG4gIC8qKueJiOWdl2lkICovXG4gIHNlY3Rpb25JZDogc3RyaW5nIHwgYW55ID0gJyc7XG4gIC8qKuadoeebruexu+Wei2lkICovXG4gIGVudHJ5VHlwZXNJZDogc3RyaW5nIHwgYW55ID0gJyc7XG4gIC8qKuadoeebruexu+Wei+ivpuaDhSAqL1xuICBlbnRyeVR5cGVzU2VsZWN0OiBhbnk7XG5cbiAgZ2V0IGZpZWxkVGFicygpIHtcbiAgICByZXR1cm4gdGhpcy5uZXdFbnRpdHk/LmdldCgnZmllbGRUYWJzJykgYXMgRm9ybUFycmF5O1xuICB9XG5cbiAgLyoq6I635Y+W5o+Q5Lqk5oyJ6ZKu5pu/6Lqr77yM55So5LqO55yf5a6e6Kem5Y+R6KGo5Y2V5o+Q5LqkICovXG4gIEBWaWV3Q2hpbGQoJ3N1Ym1pdGNsaWNrJywgeyBzdGF0aWM6IHRydWUgfSkgc3VibWl0Y2xpY2s6IEVsZW1lbnRSZWY7XG5cbiAgLyoq6Kem5Y+R5o+Q5Lqk5oyJ6ZKuICovXG4gIHN1Ym1pdGNsaWNrQnRuKCkge1xuICAgIHRoaXMuc3VibWl0Y2xpY2submF0aXZlRWxlbWVudC5jbGljaygpO1xuICB9XG5cbiAgLyoq6ZyA6KaB5p+l6K+i55qE5Yqo5oCB6KGo5Y2V57G75Z6LICovXG4gIGVuYWJsZVNlYXJjaFR5cGVMaXN0OiBhbnlbXSA9IFtdO1xuICAvKirkuI3pnIDopoHlsZXnpLrnmoTliqjmgIHooajljZXnsbvlnosgKi9cbiAgZGlzYWJsZXNob3dpblR5cGVMaXN0OiBhbnlbXSA9IFtdO1xuICBhc3luYyBuZ09uSW5pdCgpIHtcbiAgICBjb25zdCBzZWN0aW9uSWQgPSB0aGlzLnJvdXRlLnNuYXBzaG90LnBhcmFtcy5zZWN0aW9uc0lkO1xuICAgIC8v5p2h55uu57G75Z6LaWRcbiAgICB0aGlzLmVudHJ5VHlwZXNJZCA9IHRoaXMucm91dGUuc25hcHNob3QucGFyYW1zLmVudHJ5VHlwZXNJZCB8fCAnJztcbiAgICAvL+adv+Wdl2lkXG4gICAgdGhpcy5zZWN0aW9uSWQgPSBzZWN0aW9uSWQ7XG4gICAgdGhpcy5uZXdFbnRpdHkgPSB0aGlzLmZiLmdyb3VwKG5ldyBDcmVhdGVPckVkaXRFbnRyeVR5cGVJbnB1dEJhc2UoKSk7XG4gICAgLy9cbiAgICAvLyB0aGlzLmVuYWJsZVNlYXJjaFR5cGVMaXN0PWF3YWl0IHRoaXMuX0Zvcm1Db250cm9sc1NlcnZpY2UuZ2V0RW5hYmxlU2VhcmNoVHlwZUxpc3QoKTtcbiAgICAvLyB0aGlzLmRpc2FibGVzaG93aW5UeXBlTGlzdD0gdGhpcy5fRm9ybUNvbnRyb2xzU2VydmljZS5nZXRkaXNhYmxlc2hvd2luVHlwZUxpc3QoKTtcbiAgICAvLyBpZiAoc2VjdGlvbklkKSB7XG4gICAgLy8gICB0aGlzLnNlY3Rpb25JZCA9IHNlY3Rpb25JZDtcbiAgICAvLyAgIHRoaXMuYWRkQ29udHJvbFRvRmllbGRUYWJzKCk7XG4gICAgLy8gICB0aGlzLmdldEZpZWxkR3JvdXAoKTtcbiAgICAvLyB9XG4gICAgLy/ojrflj5bmnaHnm67nsbvlnovor6bmg4VcbiAgICBpZih0aGlzLmVudHJ5VHlwZXNJZCl7XG4gICAgICBhd2FpdCB0aGlzLmdldEVudHJ5VHlwZXMoKTtcbiAgICB9XG4gICAgLy/ojrflj5blrZfmrrXliIbnu4RcbiAgICBhd2FpdCB0aGlzLmdldEZpZWxkR3JvdXAoKTtcbiAgICAvL+WkhOeQhuaVsOaNrlxuICAgIHRoaXMucHJvY2Vzc0RhdGEoKTtcbiAgfVxuICAvKirlpITnkIbmlbDmja4gKi9cbiAgcHJvY2Vzc0RhdGEoKSB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3RzKSA9PiB7XG4gICAgICBjb25zdCBmaWVsZExpc3Q6IGFueSA9IHRoaXMuZGVlcENsb25lKHRoaXMuZmllbGRMaXN0KTtcbiAgICAgIGNvbnN0IHJlcyA9IHRoaXMuZW50cnlUeXBlc1NlbGVjdDtcbiAgICAgIGlmICghcmVzKSB7XG4gICAgICAgIHRoaXMuYWRkQ29udHJvbFRvRmllbGRUYWJzKCk7XG4gICAgICB9ZWxzZXtcbiAgICAgICAgcmVzLmZpZWxkVGFicy5mb3JFYWNoKGVsID0+IHtcbiAgICAgICAgICB0aGlzLmFkZENvbnRyb2xUb0ZpZWxkVGFicygpO1xuICAgICAgICAgIGVsLmZpZWxkcy5mb3JFYWNoKChlbGQ6IGFueSkgPT4ge1xuICAgICAgICAgICAgZWxkLmlkID0gZWxkLmZpZWxkSWQ7XG4gICAgICAgICAgICBlbGQuZ3JvdXBJZCA9IGZpZWxkTGlzdC5maW5kKGVsZmQgPT4gZWxmZC5pZCA9PSBlbGQuZmllbGRJZCkuZ3JvdXBJZDtcbiAgICAgICAgICAgIHRoaXMuZm9ybVJpZ2h0R3JvdXAucHVzaChlbGQpO1xuICAgICAgICAgICAgY29uc3QgZmllbGRpbmRleCA9IGZpZWxkTGlzdC5maW5kSW5kZXgoZWxmbCA9PiBlbGZsLmlkID09IGVsZC5maWVsZElkKTtcbiAgICAgICAgICAgIGZpZWxkTGlzdC5zcGxpY2UoZmllbGRpbmRleCwgMSk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLmZpZWxkR3JvdXBMaXN0LmZvckVhY2goKGVsOiBhbnksIGluZGV4KSA9PiB7XG4gICAgICAgICAgZWwuZmllbGRzID0gZmllbGRMaXN0LmZpbHRlcihlbHMgPT4gZWxzLmdyb3VwSWQgPT09IGVsLmlkKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMubmV3RW50aXR5Py5wYXRjaFZhbHVlKHJlcyk7XG4gICAgICAgIHRoaXMubmF2QWN0aXZlID0gMDtcbiAgICAgICAgdGhpcy5yZXN1bHRTb3VyY2UgPSByZXMuZmllbGRUYWJzO1xuICAgICAgfVxuICAgICAgcmVzb2x2ZSh0cnVlKTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKue7mWZpZWxkVGFic+a3u+WKoOaWsOaOp+S7tiAqL1xuICBhZGRDb250cm9sVG9GaWVsZFRhYnMobmFtZVZhbHVlID0gJycpIHtcbiAgICBjb25zdCBuZXdGb3JtR3JvdXAgPSB0aGlzLmZiLmdyb3VwKG5ldyBmaWVsZFRhYnNCYXNlKCkpO1xuICAgIG5ld0Zvcm1Hcm91cFxuICAgICAgLmdldCgnbmFtZScpXG4gICAgICA/LnBhdGNoVmFsdWUoXG4gICAgICAgIHRoaXMuZmllbGRUYWJzLmxlbmd0aCA9PT0gMFxuICAgICAgICAgID8gdGhpcy5fTG9jYWxpemF0aW9uU2VydmljZS5pbnN0YW50KGBDbXM6OkZpZWxkVGFiYClcbiAgICAgICAgICA6IG5hbWVWYWx1ZSxcbiAgICAgICk7XG4gICAgdGhpcy5maWVsZFRhYnMucHVzaChuZXdGb3JtR3JvdXApO1xuICAgIHRoaXMucmVzdWx0U291cmNlLnB1c2gobmV3Rm9ybUdyb3VwLnZhbHVlKTtcbiAgICB0aGlzLm5hdkFjdGl2ZSA9IHRoaXMucmVzdWx0U291cmNlLmxlbmd0aCAtIDE7XG4gIH1cblxuICAvKirojrflj5blrZfmrrXliIbnu4QgKi9cbiAgZ2V0RmllbGRHcm91cCgpIHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdHMpID0+IHtcbiAgICAgIHRoaXMuX0ZpZWxkR3JvdXBBZG1pblNlcnZpY2UuZ2V0TGlzdCh7fSkuc3Vic2NyaWJlKGFzeW5jIHJlcyA9PiB7XG4gICAgICAgIGNvbnN0IGZpZWxkTGlzdDogYW55ID0gYXdhaXQgdGhpcy5nZXRGaWVsZExpc3QoKTtcbiAgICAgICAgY29uc3QgZmllbGRHcm91cExpc3Q6IGFueSA9IHJlcy5pdGVtcztcbiAgICAgICAgZmllbGRHcm91cExpc3QudW5zaGlmdCh7XG4gICAgICAgICAgaWQ6IG51bGwsXG4gICAgICAgICAgbmFtZTogJ1VuZ3JvdXBlZEZpZWxkcycsXG4gICAgICAgIH0pO1xuICAgICAgICBmaWVsZEdyb3VwTGlzdC5mb3JFYWNoKChlbDogYW55LCBpbmRleCkgPT4ge1xuICAgICAgICAgIGVsLmZpZWxkcyA9IGZpZWxkTGlzdC5maWx0ZXIoZWxzID0+IGVscy5ncm91cElkID09PSBlbC5pZCk7XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLmZpZWxkR3JvdXBMaXN0ID0gZmllbGRHcm91cExpc3Q7XG4gICAgICAgIHRoaXMuZmllbGRMaXN0ID0gdGhpcy5kZWVwQ2xvbmUoZmllbGRMaXN0KTtcbiAgICAgICAgLy8gY29uc3QgZW50cnlUeXBlc0lkID0gdGhpcy5lbnRyeVR5cGVzSWQ7XG4gICAgICAgIC8vIGlmIChlbnRyeVR5cGVzSWQpIHtcbiAgICAgICAgLy8gICB0aGlzLmVudHJ5VHlwZXNJZCA9IGVudHJ5VHlwZXNJZDtcbiAgICAgICAgLy8gICB0aGlzLmdldEVudHJ5VHlwZXMoKTtcbiAgICAgICAgLy8gfVxuICAgICAgICByZXNvbHZlKHJlcyk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuICAvKirojrflj5bmnaHnm67nsbvlnovor6bmg4UgKi9cbiAgZ2V0RW50cnlUeXBlcygpIHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdHMpID0+IHtcbiAgICAgIHRoaXMuX0VudHJ5VHlwZUFkbWluU2VydmljZS5nZXQodGhpcy5lbnRyeVR5cGVzSWQpLnN1YnNjcmliZShyZXMgPT4ge1xuICAgICAgICB0aGlzLmVudHJ5VHlwZXNTZWxlY3QgPSByZXM7XG4gICAgICAgIHJlc29sdmUocmVzKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICAgIC8vIC8vIGNvbnN0IGZpZWxkTGlzdDogYW55ID0gdGhpcy5kZWVwQ2xvbmUodGhpcy5maWVsZExpc3QpO1xuICAgIC8vIHRoaXMuX0VudHJ5VHlwZUFkbWluU2VydmljZS5nZXQodGhpcy5lbnRyeVR5cGVzSWQpLnN1YnNjcmliZShyZXMgPT4ge1xuICAgIC8vICAgLy8gcmVzLmZpZWxkVGFicy5mb3JFYWNoKGVsID0+IHtcbiAgICAvLyAgIC8vICAgZWwuZmllbGRzLmZvckVhY2goKGVsZDogYW55KSA9PiB7XG4gICAgLy8gICAvLyAgICAgZWxkLmlkID0gZWxkLmZpZWxkSWQ7XG4gICAgLy8gICAvLyAgICAgZWxkLmdyb3VwSWQgPSBmaWVsZExpc3QuZmluZChlbGZkID0+IGVsZmQuaWQgPT0gZWxkLmZpZWxkSWQpLmdyb3VwSWQ7XG4gICAgLy8gICAvLyAgICAgdGhpcy5mb3JtUmlnaHRHcm91cC5wdXNoKGVsZCk7XG4gICAgLy8gICAvLyAgICAgY29uc3QgZmllbGRpbmRleCA9IGZpZWxkTGlzdC5maW5kSW5kZXgoZWxmbCA9PiBlbGZsLmlkID09IGVsZC5maWVsZElkKTtcbiAgICAvLyAgIC8vICAgICBmaWVsZExpc3Quc3BsaWNlKGZpZWxkaW5kZXgsIDEpO1xuICAgIC8vICAgLy8gICB9KTtcbiAgICAvLyAgIC8vIH0pO1xuICAgIC8vICAgLy8gdGhpcy5maWVsZEdyb3VwTGlzdC5mb3JFYWNoKChlbDogYW55LCBpbmRleCkgPT4ge1xuICAgIC8vICAgLy8gICBlbC5maWVsZHMgPSBmaWVsZExpc3QuZmlsdGVyKGVscyA9PiBlbHMuZ3JvdXBJZCA9PT0gZWwuaWQpO1xuICAgIC8vICAgLy8gfSk7XG4gICAgLy8gICAvLyB0aGlzLm5ld0VudGl0eT8ucGF0Y2hWYWx1ZShyZXMpO1xuICAgIC8vICAgdGhpcy5lbnRyeVR5cGVzU2VsZWN0ID0gcmVzO1xuICAgIC8vICAgLy8gdGhpcy5yZXN1bHRTb3VyY2UgPSByZXMuZmllbGRUYWJzO1xuICAgIC8vIH0pO1xuICB9XG4gIC8qKlxuICAgKiDmt7Hmi7fotJ0tLeaWueazlVxuICAgKiAkYXBpLmRlZXBDbG9uZSgpICAqL1xuICBkZWVwQ2xvbmUob2JqOiBhbnkpIHtcbiAgICBpZiAodHlwZW9mIG9iaiAhPT0gJ29iamVjdCcgfHwgb2JqID09PSBudWxsKSByZXR1cm4gb2JqO1xuICAgIGNvbnN0IHJlc3VsdCA9IEFycmF5LmlzQXJyYXkob2JqKSA/IFtdIDoge307XG4gICAgZm9yIChjb25zdCBrZXkgaW4gb2JqKSB7XG4gICAgICBpZiAob2JqLmhhc093blByb3BlcnR5KGtleSkpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBvYmpba2V5XSA9PT0gJ29iamVjdCcgJiYgb2JqW2tleV0gIT09IG51bGwpIHtcbiAgICAgICAgICBpZiAob2JqW2tleV0gaW5zdGFuY2VvZiBEYXRlKSB7XG4gICAgICAgICAgICByZXN1bHRba2V5XSA9IG5ldyBEYXRlKG9ialtrZXldLmdldFRpbWUoKSk7XG4gICAgICAgICAgfSBlbHNlIGlmIChvYmpba2V5XSBpbnN0YW5jZW9mIFJlZ0V4cCkge1xuICAgICAgICAgICAgcmVzdWx0W2tleV0gPSBuZXcgUmVnRXhwKG9ialtrZXldKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmVzdWx0W2tleV0gPSB0aGlzLmRlZXBDbG9uZShvYmpba2V5XSk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJlc3VsdFtrZXldID0gb2JqW2tleV07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIG5hbWVWYWx1ZSDojrflj5bmiYDmnInlrZfmrrVcbiAgICovXG4gIGdldEZpZWxkTGlzdCgpIHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdHMpID0+IHtcbiAgICAgIHRoaXMuX0ZpZWxkQWRtaW5TZXJ2aWNlXG4gICAgICAgIC5nZXRMaXN0KHtcbiAgICAgICAgICBtYXhSZXN1bHRDb3VudDogMTAwMCxcbiAgICAgICAgfSlcbiAgICAgICAgLnN1YnNjcmliZSgocmVzOiBhbnkpID0+IHtcbiAgICAgICAgICByZXMuaXRlbXMuZm9yRWFjaChlbCA9PiB7XG4gICAgICAgICAgICBlbC5yZXF1aXJlZCA9IGZhbHNlO1xuICAgICAgICAgICAgZWwuc2hvd0luTGlzdCA9IGZhbHNlO1xuICAgICAgICAgICAgZWwuZW5hYmxlU2VhcmNoID0gZmFsc2U7XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgcmVzb2x2ZShyZXMuaXRlbXMpO1xuICAgICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiDmi5bmi70g5Yqf6IO9Ki9cbiAgLyoq5pWw5o2u5rqQICovXG4gIC8qKuaVsOaNrua6kC3lrZfmrrXliIbnu4TmlbDmja4t5YyF5ZCr5a2X5q615pWw5o2uIGZpZWxkcyAqL1xuICBmaWVsZEdyb3VwTGlzdDogYW55W10gPSBbXTtcbiAgLyoq5pWw5o2u5rqQLeaJgOacieWtl+auteWIl+ihqCAqL1xuICBmaWVsZExpc3Q6IGFueVtdID0gW107XG4gIC8qKuaVsOaNrua6kOaLluaLveeahOWIhue7hOS4i+aghyAqL1xuICBEYXRhU291cmNlR3JvdXBJbmRleDogbnVtYmVyIHwgYW55O1xuICAvKirmlbDmja7mupDmi5bmi73nmoTlrZfmrrXkuIvmoIcgKi9cbiAgRGF0YVNvdXJjZUZpZWxkSW5kZXg6IG51bWJlciB8IGFueTtcbiAgLyoq55uu5qCH5rqQIOe7k+aenCovXG4gIHJlc3VsdFNvdXJjZTogYW55W10gPSBbXTtcblxuICAvKirku47mlbDmja7mupDmi5bmi73nmoTlhYPntKAgKi9cbiAgZnJvbURhdGFTb3VyY2VEcmFnRWw6IGFueTtcbiAgLyoq5LuO55uu5qCH5rqQ5ouW5ou955qE5YWD57SgICovXG4gIGZyb21SZXN1bHRTb3VyY2VEcmFnRWw6IGFueTtcblxuICAvKirmnaXoh6rmlbDmja7mupDnmoTpm4blkIjvvIznlKjkuo7ku47nm67moIfmupDmi5blm57mlbDmja7mupDml7bnmoTliKTmlq3vvIzkuI7lj5blgLwgKi9cbiAgZm9ybVJpZ2h0R3JvdXA6IGFueVtdID0gW107XG4gIC8qKuS7juaVsOaNrua6kOW8gOWni+aLluaLvSAqL1xuICBmcm9tRGF0YVNvdXJjZURyYWdTdGFydChlbGVtZW50LCBmaWVsZEluZGV4LCBncm91cEluZGV4KSB7XG4gICAgdGhpcy5mcm9tRGF0YVNvdXJjZURyYWdFbCA9IGVsZW1lbnQ7XG4gICAgdGhpcy5EYXRhU291cmNlRmllbGRJbmRleCA9IGZpZWxkSW5kZXg7XG4gICAgdGhpcy5EYXRhU291cmNlR3JvdXBJbmRleCA9IGdyb3VwSW5kZXg7XG4gICAgdGhpcy5mcm9tUmVzdWx0U291cmNlRHJhZ0VsID0gdW5kZWZpbmVkO1xuICB9XG4gIC8qKuS7juebruagh+a6kOW8gOWni+aLluaLvSAqL1xuICBmcm9tUmVzdWx0U291cmNlRHJhZ1N0YXJ0KGVsZW1lbnQpIHtcbiAgICB0aGlzLmZyb21SZXN1bHRTb3VyY2VEcmFnRWwgPSBlbGVtZW50O1xuICAgIHRoaXMuZnJvbURhdGFTb3VyY2VEcmFnRWwgPSB1bmRlZmluZWQ7XG4gICAgdGhpcy5EYXRhU291cmNlRmllbGRJbmRleCA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLkRhdGFTb3VyY2VHcm91cEluZGV4ID0gdW5kZWZpbmVkO1xuICB9XG4gIC8qKuaLluaLveWIsOaVsOaNrua6kOaXtuinpuWPkSAqL1xuICBkcmFnVG9EYXRhU291cmNlRHJvcHBlZCgpIHtcbiAgICAvL+S7juaVsOaNrua6kOaLluaLveWIsOaVsOaNrua6kC3mjpLluo9cbiAgICBpZiAodGhpcy5mcm9tRGF0YVNvdXJjZURyYWdFbCkge1xuICAgICAgLyogZW1wdHkgKi9cbiAgICB9XG4gICAgY29uc3QgX2Zyb21SZXN1bHRTb3VyY2VEcmFnRWwgPSB0aGlzLmZyb21SZXN1bHRTb3VyY2VEcmFnRWw7XG4gICAgY29uc3QgZm9ybVJpZ2h0R3JvdXAgPSB0aGlzLmRlZXBDbG9uZSh0aGlzLmZvcm1SaWdodEdyb3VwKTtcbiAgICBjb25zdCBmaWVsZExpc3QgPSB0aGlzLmRlZXBDbG9uZSh0aGlzLmZpZWxkTGlzdCk7XG5cbiAgICBpZiAoX2Zyb21SZXN1bHRTb3VyY2VEcmFnRWwpIHtcbiAgICAgIC8v56e75YqoXG4gICAgICAvL+S7juebruagh+a6kOaLluaLveWIsOaVsOaNrua6kFxuICAgICAgLy8g5ouW5ou955uu5qCH5rqQ55qE5LiL5qCHXG4gICAgICBjb25zdCBkcmFnUmVzdWx0U291cmNlSW5kZXggPSB0aGlzLnJlc3VsdFNvdXJjZVt0aGlzLm5hdkFjdGl2ZV0uZmllbGRzLmZpbmRJbmRleChcbiAgICAgICAgZWwgPT4gZWwuaWQgPT0gX2Zyb21SZXN1bHRTb3VyY2VEcmFnRWwuaWQsXG4gICAgICApO1xuICAgICAgLy/liKDpmaTnm67moIfmupDkuK3nmoTmlbDmja5cbiAgICAgIHRoaXMucmVzdWx0U291cmNlW3RoaXMubmF2QWN0aXZlXS5maWVsZHMuc3BsaWNlKGRyYWdSZXN1bHRTb3VyY2VJbmRleCwgMSk7XG4gICAgICBmb3JtUmlnaHRHcm91cC5zcGxpY2UoXG4gICAgICAgIGZvcm1SaWdodEdyb3VwLmZpbmRJbmRleChlbCA9PiBlbC5pZCA9PSBfZnJvbVJlc3VsdFNvdXJjZURyYWdFbC5pZCksXG4gICAgICAgIDEsXG4gICAgICApO1xuICAgICAgdGhpcy5maWVsZEdyb3VwTGlzdC5mb3JFYWNoKGVsID0+IHtcbiAgICAgICAgaWYgKGVsLmlkID09IF9mcm9tUmVzdWx0U291cmNlRHJhZ0VsLmdyb3VwSWQpIHtcbiAgICAgICAgICBjb25zdCBlbEZpZWxkc0FsbCA9IGZpZWxkTGlzdC5maWx0ZXIoZWxzID0+IGVscy5ncm91cElkID09PSBlbC5pZCk7XG4gICAgICAgICAgZWwuZmllbGRzID0gZWxGaWVsZHNBbGwuZmlsdGVyKFxuICAgICAgICAgICAgaXRlbSA9PiAhZm9ybVJpZ2h0R3JvdXAuc29tZShpdGVtQiA9PiBpdGVtLmlkID09PSBpdGVtQi5pZCksXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICB0aGlzLmZvcm1SaWdodEdyb3VwID0gZm9ybVJpZ2h0R3JvdXA7XG4gICAgfVxuXG4gICAgdGhpcy5zZXRmaWVsZFRhYnNGcm9tKCk7XG4gIH1cbiAgLyoq5ouW5ou95Yiw55uu5qCH5rqQ5pe26Kem5Y+RXG4gICAqXG4gICAqL1xuICBkcmFnVG9SZXN1bHRTb3VyY2VEcm9wcGVkKGZpZWxkVGFic3RlbTogYW55LCBmaWVsZFRhYnNJbmRleCkge1xuICAgIGNvbnN0IF9mcm9tRGF0YVNvdXJjZURyYWdFbCA9IHRoaXMuZnJvbURhdGFTb3VyY2VEcmFnRWw7XG4gICAgLy/ku47mlbDmja7mupDmi5bmi73liLDnm67moIfmupBcbiAgICBpZiAoX2Zyb21EYXRhU291cmNlRHJhZ0VsKSB7XG4gICAgICB0aGlzLmZpZWxkR3JvdXBMaXN0W3RoaXMuRGF0YVNvdXJjZUdyb3VwSW5kZXggfHwgMF0uZmllbGRzLnNwbGljZShcbiAgICAgICAgdGhpcy5EYXRhU291cmNlRmllbGRJbmRleCxcbiAgICAgICAgMSxcbiAgICAgICk7XG4gICAgICB0aGlzLnJlc3VsdFNvdXJjZVtmaWVsZFRhYnNJbmRleF0uZmllbGRzLnB1c2goX2Zyb21EYXRhU291cmNlRHJhZ0VsKTtcbiAgICAgIHRoaXMuZm9ybVJpZ2h0R3JvdXAucHVzaChfZnJvbURhdGFTb3VyY2VEcmFnRWwpO1xuICAgIH1cblxuICAgIHRoaXMuc2V0ZmllbGRUYWJzRnJvbSgpO1xuICB9XG4gIC8qKiDku47nm67moIfmupDmi5bmi73liLDnm67moIfmupAqL1xuICBkcmFnVG9SZXN1bHRTb3VyY2VJdGVtRHJvcHBlZChmaWVsZHNJbmRleCkge1xuICAgIGNvbnN0IF9mcm9tUmVzdWx0U291cmNlRHJhZ0VsID0gdGhpcy5mcm9tUmVzdWx0U291cmNlRHJhZ0VsO1xuICAgIGlmIChfZnJvbVJlc3VsdFNvdXJjZURyYWdFbCkge1xuICAgICAgLy8g5ouW5ou955uu5qCH5rqQ55qE5LiL5qCHXG4gICAgICBjb25zdCBkcmFnUmVzdWx0U291cmNlSW5kZXggPSB0aGlzLnJlc3VsdFNvdXJjZVt0aGlzLm5hdkFjdGl2ZV0uZmllbGRzLmZpbmRJbmRleChcbiAgICAgICAgZWwgPT4gZWwuaWQgPT0gX2Zyb21SZXN1bHRTb3VyY2VEcmFnRWwuaWQsXG4gICAgICApO1xuICAgICAgLy/liKDpmaTnm67moIfmupDkuK3nmoTmlbDmja5cbiAgICAgIHRoaXMucmVzdWx0U291cmNlW3RoaXMubmF2QWN0aXZlXS5maWVsZHMuc3BsaWNlKGRyYWdSZXN1bHRTb3VyY2VJbmRleCwgMSk7XG4gICAgICB0aGlzLnJlc3VsdFNvdXJjZVt0aGlzLm5hdkFjdGl2ZV0uZmllbGRzLnNwbGljZShmaWVsZHNJbmRleCwgMCwgX2Zyb21SZXN1bHRTb3VyY2VEcmFnRWwpO1xuICAgIH1cbiAgICB0aGlzLnNldGZpZWxkVGFic0Zyb20oKTtcbiAgfVxuICAvKirorr7nva5mb3JtQeihqOWNlSAqL1xuICBzZXRmaWVsZFRhYnNGcm9tKCkge1xuICAgIGNvbnN0IHNldEFycmF5OiBhbnlbXSA9IFtdO1xuICAgIHRoaXMucmVzdWx0U291cmNlLmZvckVhY2goZWwgPT4ge1xuICAgICAgY29uc3QgZmllbGRzQXJyYXk6IGFueVtdID0gW107XG4gICAgICBlbC5maWVsZHMuZm9yRWFjaChpdGVtID0+IHtcbiAgICAgICAgZmllbGRzQXJyYXkucHVzaCh7XG4gICAgICAgICAgZmllbGRJZDogaXRlbS5pZCB8fCBpdGVtLmZpZWxkSWQsXG4gICAgICAgICAgZGlzcGxheU5hbWU6IGl0ZW0uZGlzcGxheU5hbWUsXG4gICAgICAgICAgcmVxdWlyZWQ6IGl0ZW0/LnJlcXVpcmVkLFxuICAgICAgICAgIHNob3dJbkxpc3Q6IGl0ZW0/LnNob3dJbkxpc3QsXG4gICAgICAgICAgZW5hYmxlU2VhcmNoOiBpdGVtPy5lbmFibGVTZWFyY2gsXG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgICBzZXRBcnJheS5wdXNoKHtcbiAgICAgICAgbmFtZTogZWwubmFtZSxcbiAgICAgICAgZmllbGRzOiBmaWVsZHNBcnJheSxcbiAgICAgIH0pO1xuICAgIH0pO1xuICAgIHRoaXMubmV3RW50aXR5Py5wYXRjaFZhbHVlKHtcbiAgICAgIGZpZWxkVGFiczogc2V0QXJyYXksXG4gICAgfSk7XG4gIH1cbiAgcHJpdmF0ZSBfVmFsaWRhdG9yc1NlcnZpY2UgPSBpbmplY3QoVmFsaWRhdG9yc1NlcnZpY2UpO1xuICAvKirooajljZXpqozor4HnirbmgIFcbiAgICoge1xuICAgKiAgdGl0bGU6dHJ1ZSxcbiAgICogfVxuICAgKi9cbiAgZm9ybVZhbGlkYXRpb246IGFueSA9ICcnO1xuICBpc1N1Ym1pdDogYm9vbGVhbiB8IGFueSA9IGZhbHNlO1xuICAvKirkv53lrZjooajljZUgKi9cbiAgc2F2ZSgpIHtcbiAgICBpZiAodGhpcy5pc1N1Ym1pdCkgcmV0dXJuO1xuICAgIHRoaXMuaXNTdWJtaXQgPSB0cnVlO1xuICAgIGNvbnN0IGlucHV0ID0gdGhpcy5uZXdFbnRpdHk/LnZhbHVlO1xuXG4gICAgdGhpcy5mb3JtVmFsaWRhdGlvbiA9IHRoaXMuX1ZhbGlkYXRvcnNTZXJ2aWNlLmdldEZvcm1WYWxpZGF0aW9uU3RhdHVzKHRoaXMubmV3RW50aXR5KTtcbiAgICBpZiAodGhpcy5fVmFsaWRhdG9yc1NlcnZpY2UuaXNDaGVja0Zvcm0odGhpcy5mb3JtVmFsaWRhdGlvbiwgJ0NtcycpKVxuICAgICAgcmV0dXJuICh0aGlzLmlzU3VibWl0ID0gZmFsc2UpO1xuXG4gICAgaWYgKHRoaXMuZW50cnlUeXBlc1NlbGVjdCkge1xuICAgICAgdGhpcy5fRW50cnlUeXBlQWRtaW5TZXJ2aWNlXG4gICAgICAgIC51cGRhdGUodGhpcy5lbnRyeVR5cGVzU2VsZWN0LmlkLCBpbnB1dClcbiAgICAgICAgLnBpcGUoXG4gICAgICAgICAgZmluYWxpemUoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5pc1N1Ym1pdCA9IGZhbHNlO1xuICAgICAgICAgIH0pLFxuICAgICAgICApXG4gICAgICAgIC5zdWJzY3JpYmUocmVzID0+IHtcbiAgICAgICAgICB0aGlzLnRvYXN0ZXIuc3VjY2Vzcyh0aGlzLl9Mb2NhbGl6YXRpb25TZXJ2aWNlLmluc3RhbnQoYENtczo6U2F2ZWRTdWNjZXNzZnVsbHlgKSk7XG4gICAgICAgICAgdGhpcy5fbG9jYXRpb24uYmFjaygpO1xuICAgICAgICAgIHRoaXMuX1VwZGF0ZUxpc3RTZXJ2aWNlLnVwZGF0ZUxpc3QoKTtcbiAgICAgICAgfSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlucHV0LnNlY3Rpb25JZCA9IHRoaXMuc2VjdGlvbklkO1xuICAgIHRoaXMuX0VudHJ5VHlwZUFkbWluU2VydmljZVxuICAgICAgLmNyZWF0ZShpbnB1dClcbiAgICAgIC5waXBlKFxuICAgICAgICBmaW5hbGl6ZSgoKSA9PiB7XG4gICAgICAgICAgdGhpcy5pc1N1Ym1pdCA9IGZhbHNlO1xuICAgICAgICB9KSxcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUocmVzID0+IHtcbiAgICAgICAgdGhpcy50b2FzdGVyLnN1Y2Nlc3ModGhpcy5fTG9jYWxpemF0aW9uU2VydmljZS5pbnN0YW50KGBDbXM6OlNhdmVkU3VjY2Vzc2Z1bGx5YCkpO1xuICAgICAgICB0aGlzLl9sb2NhdGlvbi5iYWNrKCk7XG4gICAgICAgIHRoaXMuX1VwZGF0ZUxpc3RTZXJ2aWNlLnVwZGF0ZUxpc3QoKTtcbiAgICAgIH0pO1xuICB9XG4gIC8qKue8lui+kVRhYnPooajljZUgKi9cbiAgZWRpdEZpZWxkVGFic0Zyb206IEZvcm1Hcm91cDtcbiAgLyoq5qih5oCB5qGG54q25oCBICovXG4gIHZpc2libGVUYWJzT3BlbjogYm9vbGVhbiB8IGFueSA9IGZhbHNlO1xuICAvKirmmK/lkKbmmK/lv5nnooznirbmgIEgKi9cbiAgbW9kYWxCdXN5OiBib29sZWFuIHwgYW55ID0gZmFsc2U7XG4gIC8qKuato+WcqOe8lui+keeahHRhYnMgKi9cbiAgZWRpdEZpZWxkVGFic1NlbGVjdDogYW55O1xuICAvKirmraPlnKjpgInkuK3nmoRuYXYgKi9cbiAgbmF2QWN0aXZlOiBhbnkgPSAwO1xuXG4gIC8qKuihqOWNleaOp+S7tuaooeadvy3liqjmgIHotYvlgLzooajljZXmjqfku7YgKi9cbiAgQFZpZXdDaGlsZCgnZWRpdEZpZWxkVGFic01vZGFsU3VibWl0QnRuJywgeyBzdGF0aWM6IGZhbHNlIH0pXG4gIGVkaXRGaWVsZFRhYnNNb2RhbFN1Ym1pdEJ0bjogRWxlbWVudFJlZjtcblxuICAvKirmqKHmgIHmoYbnirbmgIHmlLnlj5jlm57osIMgKi9cbiAgVmlzaWJsZVRhYnNDaGFuZ2UoZXZlbnQpIHtcbiAgICBpZiAoIWV2ZW50KSB7XG4gICAgICB0aGlzLmVkaXRGaWVsZFRhYnNTZWxlY3QgPSAnJztcbiAgICAgIHRoaXMuZm9ybVZhbGlkYXRpb24gPSAnJztcbiAgICAgIHJldHVybjtcbiAgICB9XG4gIH1cbiAgLyoq5paw5bu65aKe5YqgRmllbGRUYWJzICovXG4gIGFkZEZpZWxkVGFicygpIHtcbiAgICB0aGlzLmVkaXRGaWVsZFRhYnNTZWxlY3QgPSAnJztcbiAgICB0aGlzLmVkaXRGaWVsZFRhYnNGcm9tID0gdGhpcy5mYi5ncm91cChuZXcgZmllbGRUYWJzQmFzZSgpKTtcbiAgICB0aGlzLnZpc2libGVUYWJzT3BlbiA9IHRydWU7XG4gIH1cbiAgLyoq5q2j5Zyo57yW6L6R55qEdGFi5LiL5qCHICovXG4gIG5ld0VkaXRGaWVsZFRhYnNJbmRleDogbnVtYmVyIHwgYW55O1xuICAvKirnvJbovpFGaWVsZFRhYnMgKi9cbiAgZWRpdEZpZWxkVGFicyhpdGVtLCBpKSB7XG4gICAgdGhpcy5lZGl0RmllbGRUYWJzRnJvbSA9IHRoaXMuZmIuZ3JvdXAobmV3IGZpZWxkVGFic0Jhc2UoKSk7XG4gICAgdGhpcy5lZGl0RmllbGRUYWJzRnJvbS5wYXRjaFZhbHVlKHtcbiAgICAgIG5hbWU6IGl0ZW0ubmFtZSxcbiAgICB9KTtcbiAgICB0aGlzLmVkaXRGaWVsZFRhYnNTZWxlY3QgPSBpdGVtO1xuICAgIHRoaXMudmlzaWJsZVRhYnNPcGVuID0gdHJ1ZTtcbiAgICB0aGlzLm5ld0VkaXRGaWVsZFRhYnNJbmRleCA9IGk7XG4gIH1cblxuICAvKirkv53lrZjnvJbovpF0YWJz6KGo5Y2VICovXG4gIGVkaXRGaWVsZFRhYnNTYXZlKCkge1xuICAgIGlmICghdGhpcy5lZGl0RmllbGRUYWJzRnJvbS52YWx1ZS5uYW1lKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIC8v57yW6L6RXG4gICAgaWYgKHRoaXMuZWRpdEZpZWxkVGFic1NlbGVjdCkge1xuICAgICAgdGhpcy5yZXN1bHRTb3VyY2VbdGhpcy5uZXdFZGl0RmllbGRUYWJzSW5kZXhdLm5hbWUgPSB0aGlzLmVkaXRGaWVsZFRhYnNGcm9tLnZhbHVlLm5hbWU7XG4gICAgICB0aGlzLm5hdkFjdGl2ZSA9IHRoaXMubmV3RWRpdEZpZWxkVGFic0luZGV4O1xuICAgIH0gZWxzZSB7XG4gICAgICAvL+aWsOW7ulxuICAgICAgdGhpcy5hZGRDb250cm9sVG9GaWVsZFRhYnModGhpcy5lZGl0RmllbGRUYWJzRnJvbS52YWx1ZS5uYW1lKTtcbiAgICB9XG4gICAgdGhpcy52aXNpYmxlVGFic09wZW4gPSBmYWxzZTtcbiAgICB0aGlzLlZpc2libGVUYWJzQ2hhbmdlKGZhbHNlKTtcbiAgICB0aGlzLnNldGZpZWxkVGFic0Zyb20oKTtcbiAgfVxuICAvKirliKDpmaTmn5DkuKp0YWJz6KGo5Y2VICovXG4gIGRlbGV0ZUZpZWxkVGFicyhpbmRleCkge1xuICAgIHRoaXMuZmllbGRUYWJzLnJlbW92ZUF0KGluZGV4KTtcbiAgICB0aGlzLnJlc3VsdFNvdXJjZS5zcGxpY2UoaW5kZXgsIDEpO1xuICAgIGlmKHRoaXMubmF2QWN0aXZlPT09aW5kZXgpe1xuICAgICAgdGhpcy5uYXZBY3RpdmUgPSAwO1xuICAgIH1cbiAgICBpZih0aGlzLm5hdkFjdGl2ZT5pbmRleCl7XG4gICAgICB0aGlzLm5hdkFjdGl2ZSA9IHRoaXMubmF2QWN0aXZlLTE7XG4gICAgfVxuICB9XG5cbiAgLyoq57yW6L6R5a2X5q615qih5oCB5qGG54q25oCBICovXG4gIHZpc2libGVFZGl0RmllbGRPcGVuOiBib29sZWFuIHwgYW55ID0gZmFsc2U7XG4gIC8qKue8lui+keWtl+auteaooeaAgeahhuihqOWNlSAqL1xuICBlZGl0RmllbGRGcm9tOiBGb3JtR3JvdXA7XG4gIC8qKuihqOWNleaOp+S7tuaooeadvy3liqjmgIHotYvlgLzooajljZXmjqfku7Yt57yW6L6R5a2X5q61ICovXG4gIEBWaWV3Q2hpbGQoJ2VkaXRGaWVsZE1vZGFsU3VibWl0QnRuJywgeyBzdGF0aWM6IGZhbHNlIH0pIGVkaXRGaWVsZE1vZGFsU3VibWl0QnRuOiBFbGVtZW50UmVmO1xuICAvKirmraPlnKjnvJbovpHnmoTlrZfmrrXkuIvmoIcgKi9cbiAgRWRpdEZpZWxkSW5kZXg6IG51bWJlciB8IGFueTtcbiAgLyoq57yW6L6R5a2X5q615qih5oCB5qGG54q25oCB54q25oCB5pS55Y+Y5Zue6LCDICovXG4gIFZpc2libGVFZGl0RmllbGRDaGFuZ2UoZXZlbnQpIHtcbiAgICBpZiAoIWV2ZW50KSB7XG4gICAgICB0aGlzLkVkaXRGaWVsZEluZGV4ID0gdW5kZWZpbmVkO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgfVxuICBpc1Nob3dJbkxpc3Q6IGJvb2xlYW4gfCBhbnkgPSB0cnVlO1xuICBpc0VuYWJsZVNlYXJjaDogYm9vbGVhbiB8IGFueSA9IHRydWU7XG4gIC8qKuaJk+W8gOe8lui+keWtl+auteaooeaAgeahhiAqL1xuICBFZGl0RmllbGRNb2RhbE9wZW4oaXRlbXMsIGVsSW5kZXgpIHtcbiAgICB0aGlzLnZpc2libGVFZGl0RmllbGRPcGVuID0gdHJ1ZTtcbiAgICB0aGlzLkVkaXRGaWVsZEluZGV4ID0gZWxJbmRleDtcbiAgICB0aGlzLmVkaXRGaWVsZEZyb20gPSB0aGlzLmZiLmdyb3VwKG5ldyBmaWVsZHNCYXNlKCkpO1xuICAgIGNvbnN0IGZpZWxkc09wdGlvbnMgPSB0aGlzLmZpZWxkVGFicy52YWx1ZVt0aGlzLm5hdkFjdGl2ZV0uZmllbGRzW2VsSW5kZXhdO1xuICAgIC8vIHRoaXMuaXNTaG93SW5MaXN0ID0gIXRoaXMuZGlzYWJsZXNob3dpblR5cGVMaXN0LmluY2x1ZGVzKGZpZWxkc09wdGlvbnMuZmllbGQuZm9ybUNvbnRyb2xOYW1lKTtcbiAgICAvLyB0aGlzLmlzRW5hYmxlU2VhcmNoID0gdGhpcy5lbmFibGVTZWFyY2hUeXBlTGlzdC5pbmNsdWRlcyhmaWVsZHNPcHRpb25zLmZpZWxkLmZvcm1Db250cm9sTmFtZSk7XG4gICAgdGhpcy5lZGl0RmllbGRGcm9tLnBhdGNoVmFsdWUoZmllbGRzT3B0aW9ucyk7XG4gICAgLy8gdGhpcy5kaXNhYmxlc2hvd2luVHlwZUxpc3RcbiAgfVxuICAvKirkv53lrZjnvJbovpHlrZfmrrUgKi9cbiAgZWRpdEZpZWxkU2F2ZSgpIHtcbiAgICBjb25zdCBpbnB1dCA9IHRoaXMuZWRpdEZpZWxkRnJvbS52YWx1ZTtcbiAgICB0aGlzLnJlc3VsdFNvdXJjZVt0aGlzLm5hdkFjdGl2ZV0uZmllbGRzW3RoaXMuRWRpdEZpZWxkSW5kZXhdLmRpc3BsYXlOYW1lID0gaW5wdXQuZGlzcGxheU5hbWU7XG4gICAgdGhpcy5yZXN1bHRTb3VyY2VbdGhpcy5uYXZBY3RpdmVdLmZpZWxkc1t0aGlzLkVkaXRGaWVsZEluZGV4XS5yZXF1aXJlZCA9IGlucHV0LnJlcXVpcmVkO1xuICAgIHRoaXMucmVzdWx0U291cmNlW3RoaXMubmF2QWN0aXZlXS5maWVsZHNbdGhpcy5FZGl0RmllbGRJbmRleF0uc2hvd0luTGlzdCA9IGlucHV0LnNob3dJbkxpc3Q7XG4gICAgdGhpcy5yZXN1bHRTb3VyY2VbdGhpcy5uYXZBY3RpdmVdLmZpZWxkc1t0aGlzLkVkaXRGaWVsZEluZGV4XS5lbmFibGVTZWFyY2ggPSBpbnB1dC5lbmFibGVTZWFyY2g7XG4gICAgdGhpcy52aXNpYmxlRWRpdEZpZWxkT3BlbiA9IGZhbHNlO1xuICAgIHRoaXMuc2V0ZmllbGRUYWJzRnJvbSgpO1xuICB9XG5cbiAgLyoqbmFtZeihqOWNleaOp+S7tiAqL1xuICBnZXQgbmFtZUlucHV0KCkge1xuICAgIHJldHVybiB0aGlzLm5ld0VudGl0eS5nZXQoJ25hbWUnKTtcbiAgfVxuICAvKirlrZfmrrXmoIfnrb5pbnB1dOWkseWOu+agh+eCueeUn+aIkOWtl+auteWQjeWtlyAqL1xuICBkaXNQbGF5TmFtZUlucHV0Qmx1cihldmVudCkge1xuICAgIGNvbnN0IHZhbHVlID0gZXZlbnQudGFyZ2V0LnZhbHVlO1xuICAgIGNvbnN0IHBpbnlpbiA9IHRoaXMuX0Ntc0FwaVNlcnZpY2UuY2hpbmVzZVRvUGlueWluKHZhbHVlKTtcbiAgICBjb25zdCBuYW1lSW5wdXQ6IGFueSA9IHRoaXMubmFtZUlucHV0O1xuICAgIGlmIChuYW1lSW5wdXQudmFsdWUpIHJldHVybjtcbiAgICBuYW1lSW5wdXQucGF0Y2hWYWx1ZShwaW55aW4pO1xuICB9XG59XG4iLCI8Zm9ybSBjbGFzcz1cInJvdyBnLTMgbmVlZHMtdmFsaWRhdGlvblwiIFtmb3JtR3JvdXBdPVwibmV3RW50aXR5XCIgW2NsYXNzXT1cInsnd2FzLXZhbGlkYXRlZCc6Zm9ybVZhbGlkYXRpb259XCJcbiAgICAoc3VibWl0KT1cInNhdmUoKVwiPlxuICAgIDxhYnAtcGFnZSBbdGl0bGVdPVwiZW50cnlUeXBlc0lkID8gKCdBYnBVaTo6RWRpdCcgfCBhYnBMb2NhbGl6YXRpb24pOignQ21zOjpOZXcnIHwgYWJwTG9jYWxpemF0aW9uKVwiXG4gICAgICAgIFt0b29sYmFyXT1cInRydWVcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImNyZWF0ZS1vci1lZGl0LWVudHJ5LXR5cGUtcGFnZVwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmRcIj5cbiAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJzdWJtaXRcIiBzdHlsZT1cImRpc3BsYXk6IG5vbmU7XCIgI3N1Ym1pdGNsaWNrPjwvYnV0dG9uPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLWJvZHlcIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1iLTNcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJmb3JtLWxhYmVsXCI+e3snQ21zOjpEaXNwbGF5TmFtZScgfCBhYnBMb2NhbGl6YXRpb259fTwvbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiBmb3JtQ29udHJvbE5hbWU9XCJkaXNwbGF5TmFtZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChibHVyKT1cImRpc1BsYXlOYW1lSW5wdXRCbHVyKCRldmVudClcIiBwbGFjZWhvbGRlcj1cIlwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtYi0zXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiZm9ybS1sYWJlbFwiPnt7J0Ntczo6TmFtZScgfCBhYnBMb2NhbGl6YXRpb259fTwvbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiBmb3JtQ29udHJvbE5hbWU9XCJuYW1lXCIgcGxhY2Vob2xkZXI9XCJcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGZvcm1BcnJheU5hbWU9XCJmaWVsZFRhYnNcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWItM1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJmb3JtLWxhYmVsXCI+e3snQ21zOjpGaWVsZExheW91dCcgfCBhYnBMb2NhbGl6YXRpb259fTwvbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb250YWluZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLXNtLTggYm9yZGVyIHJvdW5kZWRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHVsIG5nYk5hdiAjbmF2PVwibmdiTmF2XCIgWyhhY3RpdmVJZCldPVwibmF2QWN0aXZlXCIgY2xhc3M9XCJuYXYgbmF2LXRhYnNcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGl0ZW0gb2YgcmVzdWx0U291cmNlOyBsZXQgaSA9IGluZGV4XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpIFtuZ2JOYXZJdGVtXT1cImlcIiBuZ2JEcm9wZG93biBjbGFzcz1cIm5hdi1pdGVtXCIgcm9sZT1cInByZXNlbnRhdGlvblwiPiBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgbmdiTmF2TGluayBjbGFzcz1cIm5hdi1saW5rXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBpdGVtLm5hbWUgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibXMtMVwiIChjbGljay5zdG9wKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmdiRHJvcGRvd25Ub2dnbGU+PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBuZ2JEcm9wZG93bk1lbnUgc3R5bGU9XCJ6LWluZGV4OiA5OTk7XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBuZ2JEcm9wZG93bkl0ZW0gdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrLnN0b3ApPVwiZWRpdEZpZWxkVGFicyhpdGVtLGkpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYXMgZmEtZWRpdFwiPjwvaT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eydBYnBVaTo6RWRpdCcgfCBhYnBMb2NhbGl6YXRpb259fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gbmdiRHJvcGRvd25JdGVtICpuZ0lmPVwicmVzdWx0U291cmNlLmxlbmd0aCAhPT0gMVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiIChjbGljay5zdG9wKT1cImRlbGV0ZUZpZWxkVGFicyhpKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmFzIGZhLXRyYXNoXCI+PC9pPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7J0FicFVpOjpEZWxldGUnIHwgYWJwTG9jYWxpemF0aW9ufX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBuZ2JOYXZDb250ZW50PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInAtMlwiIG9uZHJhZ292ZXI9XCJldmVudC5wcmV2ZW50RGVmYXVsdCgpO1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGRyb3ApPVwiZHJhZ1RvUmVzdWx0U291cmNlRHJvcHBlZChpdGVtLGkpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHlsZT1cImhlaWdodDogMTAwJTtcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz1cImZvcm0tdGV4dCB0ZXh0LW11dGVkXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJpdGVtLmZpZWxkcy5sZW5ndGggPT09IDBcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3snQ21zOjpEcmFnQW5kRHJvcEZpZWxkVGlwcycgfCBhYnBMb2NhbGl6YXRpb259fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dWwgY2xhc3M9XCJsaXN0LWdyb3VwXCIgc3R5bGU9XCJoZWlnaHQ6IDEwMCU7XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0Zvcj1cImxldCBlbCBvZiBpdGVtLmZpZWxkczsgbGV0IGllbCA9IGluZGV4XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGkgZHJhZ2dhYmxlPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGRyYWdzdGFydCk9XCJmcm9tUmVzdWx0U291cmNlRHJhZ1N0YXJ0KGVsKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGRyb3ApPVwiZHJhZ1RvUmVzdWx0U291cmNlSXRlbURyb3BwZWQoaWVsKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJsaXN0LWdyb3VwLWl0ZW0gZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlbiBweS0xXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHlsZT1cInBvc2l0aW9uOiB1bnNldDtcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBlbC5kaXNwbGF5TmFtZSB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJwLTAgYnRuIGJ0bi1zbSBidG4tbGlnaHRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2suc3RvcCk9XCJFZGl0RmllbGRNb2RhbE9wZW4oZWwsaWVsKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIj48aVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJmYXMgZmEtd3JlbmNoIHAtc20tMVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb2xlPVwiYnV0dG9uXCI+PC9pPjwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9saT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC91bD5cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9saT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpIGNsYXNzPVwibmF2LWl0ZW1cIiByb2xlPVwicHJlc2VudGF0aW9uXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJuYXYtbGlua1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljay5zdG9wKT1cImFkZEZpZWxkVGFicygpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmFzIGZhLXBsdXMtY2lyY2xlXCI+PC9pPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eydDbXM6Ok5ld1RhYicgfCBhYnBMb2NhbGl6YXRpb259fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9saT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC91bD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBbbmdiTmF2T3V0bGV0XT1cIm5hdlwiIGNsYXNzPVwibXQtMiBib3JkZXJuTmF2cyBwLTBcIj48L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLXNtLTRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBuZ2JBY2NvcmRpb24gI2FjY29yZGlvbj1cIm5nYkFjY29yZGlvblwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbmRyYWdvdmVyPVwiZXZlbnQucHJldmVudERlZmF1bHQoKTtcIiAoZHJvcCk9XCJkcmFnVG9EYXRhU291cmNlRHJvcHBlZCgpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlPVwibWluLWhlaWdodDogODBweDtcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGl0ZW0gb2YgZmllbGRHcm91cExpc3Q7IGxldCBpID0gaW5kZXhcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IFtuZ2JBY2NvcmRpb25JdGVtXT1cIml0ZW0ubmFtZVwiICpuZ0lmPVwiaXRlbS5maWVsZHMubGVuZ3RoID4gMFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDIgbmdiQWNjb3JkaW9uSGVhZGVyPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBuZ2JBY2NvcmRpb25CdXR0b24+e3tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoJ0Ntczo6JytpdGVtLm5hbWUpIHwgYWJwTG9jYWxpemF0aW9uIH19PC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgbmdiQWNjb3JkaW9uQ29sbGFwc2U+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IG5nYkFjY29yZGlvbkJvZHk+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dWwgY2xhc3M9XCJsaXN0LWdyb3VwXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IGVsIG9mIGl0ZW0uZmllbGRzOyBsZXQgaWkgPSBpbmRleFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaSBkcmFnZ2FibGU9XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGRyYWdzdGFydCk9XCJmcm9tRGF0YVNvdXJjZURyYWdTdGFydChlbCxpaSxpKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwibGlzdC1ncm91cC1pdGVtXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IGVsLmRpc3BsYXlOYW1lIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9saT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3VsPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG5cblxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuXG5cbiAgICAgICAgPCEtLSA8L2Rpdj4gLS0+XG4gICAgPC9hYnAtcGFnZT5cblxuPC9mb3JtPlxuXG48YWJwLW1vZGFsIFsodmlzaWJsZSldPVwidmlzaWJsZVRhYnNPcGVuXCIgW2J1c3ldPVwibW9kYWxCdXN5XCIgKHZpc2libGVDaGFuZ2UpPVwiVmlzaWJsZVRhYnNDaGFuZ2UoJGV2ZW50KVwiPlxuICAgIDxuZy10ZW1wbGF0ZSAjYWJwSGVhZGVyPlxuICAgICAgICA8aDM+e3sgZWRpdEZpZWxkVGFic1NlbGVjdCA/ICgnQWJwVWk6OkVkaXQnIHwgYWJwTG9jYWxpemF0aW9uKTooJ0Ntczo6TmV3JyB8IGFicExvY2FsaXphdGlvbil9fTwvaDM+XG4gICAgPC9uZy10ZW1wbGF0ZT5cbiAgICA8bmctdGVtcGxhdGUgI2FicEJvZHk+XG4gICAgICAgIDxuZy10ZW1wbGF0ZSAjbG9hZGVyUmVmPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRleHQtY2VudGVyXCI+PGkgY2xhc3M9XCJmYSBmYS1wdWxzZSBmYS1zcGlubmVyXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PC9pPjwvZGl2PlxuICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiZWRpdEZpZWxkVGFic0Zyb207IGVsc2UgbG9hZGVyUmVmXCI+XG4gICAgICAgICAgICA8Zm9ybSBjbGFzcz1cInNpdGVzLW1vZGFsLWZvcm1cIiBbZm9ybUdyb3VwXT1cImVkaXRGaWVsZFRhYnNGcm9tXCIgW2NsYXNzXT1cInsnd2FzLXZhbGlkYXRlZCc6Zm9ybVZhbGlkYXRpb259XCJcbiAgICAgICAgICAgICAgICAoc3VibWl0KT1cImVkaXRGaWVsZFRhYnNTYXZlKClcIj5cbiAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJzdWJtaXRcIiAjZWRpdEZpZWxkVGFic01vZGFsU3VibWl0QnRuIHN0eWxlPVwiZGlzcGxheTogbm9uZVwiPjwvYnV0dG9uPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtYi0zXCI+XG4gICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImZvcm0tbGFiZWxcIj57eydDbXM6Ok5hbWUnIHwgYWJwTG9jYWxpemF0aW9ufX08L2xhYmVsPlxuICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBjbGFzcz1cImZvcm0tY29udHJvbFwiIGZvcm1Db250cm9sTmFtZT1cIm5hbWVcIiBwbGFjZWhvbGRlcj1cIlwiIC8+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Zvcm0+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgIDwvbmctdGVtcGxhdGU+XG4gICAgPG5nLXRlbXBsYXRlICNhYnBGb290ZXI+XG4gICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGJ0bi1zZWNvbmRhcnlcIiBhYnBDbG9zZT57eydBYnBVaTo6Q2xvc2UnIHwgYWJwTG9jYWxpemF0aW9ufX08L2J1dHRvbj5cbiAgICAgICAgPGFicC1idXR0b24gaWNvbkNsYXNzPVwiZmEgZmEtY2hlY2tcIiAoY2xpY2spPVwiZWRpdEZpZWxkVGFic01vZGFsU3VibWl0QnRuLm5hdGl2ZUVsZW1lbnQuY2xpY2soKVwiPnt7J0FicFVpOjpTYXZlJ1xuICAgICAgICAgICAgfCBhYnBMb2NhbGl6YXRpb259fTwvYWJwLWJ1dHRvbj5cbiAgICA8L25nLXRlbXBsYXRlPlxuPC9hYnAtbW9kYWw+XG5cblxuPGFicC1tb2RhbCBbKHZpc2libGUpXT1cInZpc2libGVFZGl0RmllbGRPcGVuXCIgW2J1c3ldPVwibW9kYWxCdXN5XCIgKHZpc2libGVDaGFuZ2UpPVwiVmlzaWJsZUVkaXRGaWVsZENoYW5nZSgkZXZlbnQpXCI+XG4gICAgPG5nLXRlbXBsYXRlICNhYnBIZWFkZXI+XG4gICAgICAgIDxoMz57eydBYnBVaTo6RWRpdCcgfCBhYnBMb2NhbGl6YXRpb259fTwvaDM+XG4gICAgPC9uZy10ZW1wbGF0ZT5cbiAgICA8bmctdGVtcGxhdGUgI2FicEJvZHk+XG4gICAgICAgIDxuZy10ZW1wbGF0ZSAjbG9hZGVyUmVmPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRleHQtY2VudGVyXCI+PGkgY2xhc3M9XCJmYSBmYS1wdWxzZSBmYS1zcGlubmVyXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PC9pPjwvZGl2PlxuICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiZWRpdEZpZWxkRnJvbTsgZWxzZSBsb2FkZXJSZWZcIj5cbiAgICAgICAgICAgIDxmb3JtIGNsYXNzPVwic2l0ZXMtbW9kYWwtZm9ybVwiIFtmb3JtR3JvdXBdPVwiZWRpdEZpZWxkRnJvbVwiIChzdWJtaXQpPVwiZWRpdEZpZWxkU2F2ZSgpXCI+XG4gICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwic3VibWl0XCIgI2VkaXRGaWVsZE1vZGFsU3VibWl0QnRuIHN0eWxlPVwiZGlzcGxheTogbm9uZVwiPjwvYnV0dG9uPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtYi0zXCI+XG4gICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImZvcm0tbGFiZWxcIj57eydDbXM6OkRpc3BsYXlOYW1lJyB8IGFicExvY2FsaXphdGlvbn19PC9sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiBmb3JtQ29udHJvbE5hbWU9XCJkaXNwbGF5TmFtZVwiIHBsYWNlaG9sZGVyPVwiXCIgLz5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWItM1wiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1jaGVjayBmb3JtLWNoZWNrLWlubGluZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IGNsYXNzPVwiZm9ybS1jaGVjay1pbnB1dFwiIHR5cGU9XCJjaGVja2JveFwiIHZhbHVlPVwidHJ1ZVwiIGZvcm1Db250cm9sTmFtZT1cInJlcXVpcmVkXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZD1cInJlcXVpcmVkXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImZvcm0tY2hlY2stbGFiZWxcIiBmb3I9XCJyZXF1aXJlZFwiPiB7eydDbXM6OlJlcXVpcmVkJyB8IGFicExvY2FsaXphdGlvbn19IDwvbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIEBpZihpc1Nob3dJbkxpc3Qpe1xuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtYi0zXCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWNoZWNrIGZvcm0tY2hlY2staW5saW5lXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJmb3JtLWNoZWNrLWlucHV0XCIgdHlwZT1cImNoZWNrYm94XCIgdmFsdWU9XCJ0cnVlXCIgZm9ybUNvbnRyb2xOYW1lPVwic2hvd0luTGlzdFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQ9XCJzaG93SW5MaXN0XCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImZvcm0tY2hlY2stbGFiZWxcIiBmb3I9XCJzaG93SW5MaXN0XCI+IHt7J0Ntczo6U2hvd0luTGlzdCcgfCBhYnBMb2NhbGl6YXRpb259fVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIEBpZihpc0VuYWJsZVNlYXJjaCl7XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1iLTNcIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tY2hlY2sgZm9ybS1jaGVjay1pbmxpbmVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBjbGFzcz1cImZvcm0tY2hlY2staW5wdXRcIiB0eXBlPVwiY2hlY2tib3hcIiB2YWx1ZT1cInRydWVcIiBmb3JtQ29udHJvbE5hbWU9XCJlbmFibGVTZWFyY2hcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkPVwiZW5hYmxlU2VhcmNoXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImZvcm0tY2hlY2stbGFiZWxcIiBmb3I9XCJlbmFibGVTZWFyY2hcIj4ge3snQ21zOjpFbmFibGVTZWFyY2gnIHwgYWJwTG9jYWxpemF0aW9ufX1cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDwvZm9ybT5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgPC9uZy10ZW1wbGF0ZT5cbiAgICA8bmctdGVtcGxhdGUgI2FicEZvb3Rlcj5cbiAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4gYnRuLXNlY29uZGFyeVwiIGFicENsb3NlPnt7J0FicFVpOjpDbG9zZScgfCBhYnBMb2NhbGl6YXRpb259fTwvYnV0dG9uPlxuICAgICAgICA8YWJwLWJ1dHRvbiBpY29uQ2xhc3M9XCJmYSBmYS1jaGVja1wiIFtkaXNhYmxlZF09XCIhZWRpdEZpZWxkRnJvbS52YWxpZFwiXG4gICAgICAgICAgICAoY2xpY2spPVwiZWRpdEZpZWxkTW9kYWxTdWJtaXRCdG4ubmF0aXZlRWxlbWVudC5jbGljaygpXCI+e3snQWJwVWk6OlNhdmUnIHwgYWJwTG9jYWxpemF0aW9ufX08L2FicC1idXR0b24+XG4gICAgPC9uZy10ZW1wbGF0ZT5cbjwvYWJwLW1vZGFsPiJdfQ==
|
|
529
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3JlYXRlLW9yLWVkaXQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvY21zL3NyYy9saWIvY29tcG9uZW50cy9hZG1pbi9zZWN0aW9ucy9lbnRyeS10eXBlcy9jcmVhdGUtb3ItZWRpdC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9jbXMvc3JjL2xpYi9jb21wb25lbnRzL2FkbWluL3NlY3Rpb25zL2VudHJ5LXR5cGVzL2NyZWF0ZS1vci1lZGl0LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLDBDQUEwQztBQUMxQyx1REFBdUQ7QUFDdkQsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDdEUsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQ25ELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUN0RCxPQUFPLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQVUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ2pGLE9BQU8sRUFBRSxXQUFXLEVBQXdCLE1BQU0sZ0JBQWdCLENBQUM7QUFDbkUsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ2pELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUNyRCxPQUFPLEVBQ0wsOEJBQThCLEVBQzlCLGFBQWEsRUFDYixVQUFVLEdBQ1gsTUFBTSx5Q0FBeUMsQ0FBQztBQUNqRCxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDM0MsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ2xELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQzVELE9BQU8s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TSxLQUFLLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUM7UUFDakMsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxlQUFlLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDMUQsTUFBTSxTQUFTLEdBQVEsSUFBSSxDQUFDLFNBQVMsQ0FBQztRQUN0QyxJQUFJLFNBQVMsQ0FBQyxLQUFLO1lBQUUsT0FBTztRQUM1QixTQUFTLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQy9CLENBQUM7OEdBN2hCVSxxQkFBcUI7a0dBQXJCLHFCQUFxQiw2Q0FQckI7WUFDVDtnQkFDRSxPQUFPLEVBQUUscUJBQXFCO2dCQUM5QixRQUFRLEVBQUUsYUFBYSxDQUFDLG9CQUFvQjthQUM3QztTQUNGLHNZQ2xDSCxpbW5CQWtRWTs7MkZEOU5DLHFCQUFxQjtrQkFYakMsU0FBUzsrQkFDRSxvQkFBb0IsYUFHbkI7d0JBQ1Q7NEJBQ0UsT0FBTyxFQUFFLHFCQUFxQjs0QkFDOUIsUUFBUSxFQUFFLGFBQWEsQ0FBQyxvQkFBb0I7eUJBQzdDO3FCQUNGO2dWQThCMkMsV0FBVztzQkFBdEQsU0FBUzt1QkFBQyxhQUFhLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFO2dCQXVXMUMsMkJBQTJCO3NCQUQxQixTQUFTO3VCQUFDLDZCQUE2QixFQUFFLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRTtnQkFpR0YsdUJBQXVCO3NCQUEvRSxTQUFTO3VCQUFDLHlCQUF5QixFQUFFLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSIsInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIG5vLXByb3RvdHlwZS1idWlsdGlucyAqL1xuLyogZXNsaW50LWRpc2FibGUgQGFuZ3VsYXItZXNsaW50L2NvbXBvbmVudC1zZWxlY3RvciAqL1xuaW1wb3J0IHsgRVhURU5TSU9OU19JREVOVElGSUVSIH0gZnJvbSAnQGFicC9uZy5jb21wb25lbnRzL2V4dGVuc2libGUnO1xuaW1wb3J0IHsgTG9jYWxpemF0aW9uU2VydmljZSB9IGZyb20gJ0BhYnAvbmcuY29yZSc7XG5pbXBvcnQgeyBUb2FzdGVyU2VydmljZSB9IGZyb20gJ0BhYnAvbmcudGhlbWUuc2hhcmVkJztcbmltcG9ydCB7IENvbXBvbmVudCwgRWxlbWVudFJlZiwgaW5qZWN0LCBPbkluaXQsIFZpZXdDaGlsZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRm9ybUJ1aWxkZXIsIEZvcm1Hcm91cCwgRm9ybUFycmF5IH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgQWN0aXZhdGVkUm91dGUgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHsgQ21zQXBpU2VydmljZSB9IGZyb20gJy4uLy4uLy4uLy4uL3NlcnZpY2VzJztcbmltcG9ydCB7XG4gIENyZWF0ZU9yRWRpdEVudHJ5VHlwZUlucHV0QmFzZSxcbiAgZmllbGRUYWJzQmFzZSxcbiAgZmllbGRzQmFzZSxcbn0gZnJvbSAnLi9jcmVhdGUtb3ItZWRpdC4tZW50cnktdHlwZS1pbnB1dC1iYXNlJztcbmltcG9ydCB7IExvY2F0aW9uIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IEVDbXNDb21wb25lbnQgfSBmcm9tICcuLi8uLi8uLi8uLi9lbnVtcyc7XG5pbXBvcnQgeyBWYWxpZGF0b3JzU2VydmljZSB9IGZyb20gJ0BkaWduaXRlLW5nL2V4cGFuZC5jb3JlJztcbmltcG9ydCB7IFVwZGF0ZUxpc3RTZXJ2aWNlIH0gZnJvbSAnQGRpZ25pdGUtbmcvZXhwYW5kLmNvcmUnO1xuaW1wb3J0IHsgZmluYWxpemUgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7XG4gIEZpZWxkQWRtaW5TZXJ2aWNlLFxuICBGaWVsZEdyb3VwQWRtaW5TZXJ2aWNlLFxufSBmcm9tICcuLi8uLi8uLi8uLi9wcm94eS9kaWduaXRlL2Ntcy9hZG1pbi9maWVsZHMnO1xuaW1wb3J0IHsgRW50cnlUeXBlQWRtaW5TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vLi4vcHJveHkvZGlnbml0ZS9jbXMvYWRtaW4vc2VjdGlvbnMnO1xuaW1wb3J0IHsgRm9ybUNvbnRyb2xzU2VydmljZSB9IGZyb20gJy4uLy4uLy4uLy4uL3NlcnZpY2VzL2Zvcm0tY29udHJvbHMuc2VydmljZSc7XG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdjbXMtY3JlYXRlLW9yLWVkaXQnLFxuICB0ZW1wbGF0ZVVybDogJy4vY3JlYXRlLW9yLWVkaXQuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9jcmVhdGUtb3ItZWRpdC5jb21wb25lbnQuc2NzcyddLFxuICBwcm92aWRlcnM6IFtcbiAgICB7XG4gICAgICBwcm92aWRlOiBFWFRFTlNJT05TX0lERU5USUZJRVIsXG4gICAgICB1c2VWYWx1ZTogRUNtc0NvbXBvbmVudC5TZWN0aW9uc0NyZWF0ZU9yRWRpdCxcbiAgICB9LFxuICBdLFxufSlcbmV4cG9ydCBjbGFzcyBDcmVhdGVPckVkaXRDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHRvYXN0ZXI6IFRvYXN0ZXJTZXJ2aWNlLFxuICAgIHB1YmxpYyBfbG9jYXRpb246IExvY2F0aW9uLFxuICAgIHByaXZhdGUgcm91dGU6IEFjdGl2YXRlZFJvdXRlLFxuICAgIHB1YmxpYyBfRmllbGRHcm91cEFkbWluU2VydmljZTogRmllbGRHcm91cEFkbWluU2VydmljZSxcbiAgICBwdWJsaWMgX0ZpZWxkQWRtaW5TZXJ2aWNlOiBGaWVsZEFkbWluU2VydmljZSxcbiAgICBwdWJsaWMgX0VudHJ5VHlwZUFkbWluU2VydmljZTogRW50cnlUeXBlQWRtaW5TZXJ2aWNlLFxuICAgIHB1YmxpYyBfTG9jYWxpemF0aW9uU2VydmljZTogTG9jYWxpemF0aW9uU2VydmljZSxcbiAgICBwdWJsaWMgX0Ntc0FwaVNlcnZpY2U6IENtc0FwaVNlcnZpY2UsXG4gICAgcHVibGljIF9Gb3JtQ29udHJvbHNTZXJ2aWNlOiBGb3JtQ29udHJvbHNTZXJ2aWNlLFxuICApIHt9XG4gIHByaXZhdGUgZmIgPSBpbmplY3QoRm9ybUJ1aWxkZXIpO1xuICBwcml2YXRlIF9VcGRhdGVMaXN0U2VydmljZSA9IGluamVjdChVcGRhdGVMaXN0U2VydmljZSk7XG4gIC8qKuihqOWNleWunuS9kyAqL1xuICBuZXdFbnRpdHk6IEZvcm1Hcm91cCB8IGFueTtcbiAgLyoq54mI5Z2XaWQgKi9cbiAgc2VjdGlvbklkOiBzdHJpbmcgfCBhbnkgPSAnJztcbiAgLyoq5p2h55uu57G75Z6LaWQgKi9cbiAgZW50cnlUeXBlc0lkOiBzdHJpbmcgfCBhbnkgPSAnJztcbiAgLyoq5p2h55uu57G75Z6L6K+m5oOFICovXG4gIGVudHJ5VHlwZXNTZWxlY3Q6IGFueTtcblxuICBnZXQgZmllbGRUYWJzKCkge1xuICAgIHJldHVybiB0aGlzLm5ld0VudGl0eT8uZ2V0KCdmaWVsZFRhYnMnKSBhcyBGb3JtQXJyYXk7XG4gIH1cblxuICAvKirojrflj5bmj5DkuqTmjInpkq7mm7/ouqvvvIznlKjkuo7nnJ/lrp7op6blj5HooajljZXmj5DkuqQgKi9cbiAgQFZpZXdDaGlsZCgnc3VibWl0Y2xpY2snLCB7IHN0YXRpYzogdHJ1ZSB9KSBzdWJtaXRjbGljazogRWxlbWVudFJlZjtcblxuICAvKirop6blj5Hmj5DkuqTmjInpkq4gKi9cbiAgc3VibWl0Y2xpY2tCdG4oKSB7XG4gICAgdGhpcy5zdWJtaXRjbGljay5uYXRpdmVFbGVtZW50LmNsaWNrKCk7XG4gIH1cblxuICAvKirpnIDopoHmn6Xor6LnmoTliqjmgIHooajljZXnsbvlnosgKi9cbiAgZW5hYmxlU2VhcmNoVHlwZUxpc3Q6IGFueVtdID0gW107XG4gIC8qKuS4jemcgOimgeWxleekuueahOWKqOaAgeihqOWNleexu+WeiyAqL1xuICBkaXNhYmxlc2hvd2luVHlwZUxpc3Q6IGFueVtdID0gW107XG4gIGFzeW5jIG5nT25Jbml0KCkge1xuICAgIGNvbnN0IHNlY3Rpb25JZCA9IHRoaXMucm91dGUuc25hcHNob3QucGFyYW1zLnNlY3Rpb25zSWQ7XG4gICAgLy/mnaHnm67nsbvlnotpZFxuICAgIHRoaXMuZW50cnlUeXBlc0lkID0gdGhpcy5yb3V0ZS5zbmFwc2hvdC5wYXJhbXMuZW50cnlUeXBlc0lkIHx8ICcnO1xuICAgIC8v5p2/5Z2XaWRcbiAgICB0aGlzLnNlY3Rpb25JZCA9IHNlY3Rpb25JZDtcbiAgICB0aGlzLm5ld0VudGl0eSA9IHRoaXMuZmIuZ3JvdXAobmV3IENyZWF0ZU9yRWRpdEVudHJ5VHlwZUlucHV0QmFzZSgpKTtcbiAgICAvL1xuICAgIC8vIHRoaXMuZW5hYmxlU2VhcmNoVHlwZUxpc3Q9YXdhaXQgdGhpcy5fRm9ybUNvbnRyb2xzU2VydmljZS5nZXRFbmFibGVTZWFyY2hUeXBlTGlzdCgpO1xuICAgIC8vIHRoaXMuZGlzYWJsZXNob3dpblR5cGVMaXN0PSB0aGlzLl9Gb3JtQ29udHJvbHNTZXJ2aWNlLmdldGRpc2FibGVzaG93aW5UeXBlTGlzdCgpO1xuICAgIC8vIGlmIChzZWN0aW9uSWQpIHtcbiAgICAvLyAgIHRoaXMuc2VjdGlvbklkID0gc2VjdGlvbklkO1xuICAgIC8vICAgdGhpcy5hZGRDb250cm9sVG9GaWVsZFRhYnMoKTtcbiAgICAvLyAgIHRoaXMuZ2V0RmllbGRHcm91cCgpO1xuICAgIC8vIH1cbiAgICAvL+iOt+WPluadoeebruexu+Wei+ivpuaDhVxuICAgIGlmKHRoaXMuZW50cnlUeXBlc0lkKXtcbiAgICAgIGF3YWl0IHRoaXMuZ2V0RW50cnlUeXBlcygpO1xuICAgIH1cbiAgICAvL+iOt+WPluWtl+auteWIhue7hFxuICAgIGF3YWl0IHRoaXMuZ2V0RmllbGRHcm91cCgpO1xuICAgIC8v5aSE55CG5pWw5o2uXG4gICAgdGhpcy5wcm9jZXNzRGF0YSgpO1xuICB9XG4gIC8qKuWkhOeQhuaVsOaNriAqL1xuICBwcm9jZXNzRGF0YSgpIHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdHMpID0+IHtcbiAgICAgIGNvbnN0IGZpZWxkTGlzdDogYW55ID0gdGhpcy5kZWVwQ2xvbmUodGhpcy5maWVsZExpc3QpO1xuICAgICAgY29uc3QgcmVzID0gdGhpcy5lbnRyeVR5cGVzU2VsZWN0O1xuICAgICAgaWYgKCFyZXMpIHtcbiAgICAgICAgdGhpcy5hZGRDb250cm9sVG9GaWVsZFRhYnMoKTtcbiAgICAgIH1lbHNle1xuICAgICAgICByZXMuZmllbGRUYWJzLmZvckVhY2goZWwgPT4ge1xuICAgICAgICAgIHRoaXMuYWRkQ29udHJvbFRvRmllbGRUYWJzKCk7XG4gICAgICAgICAgZWwuZmllbGRzLmZvckVhY2goKGVsZDogYW55KSA9PiB7XG4gICAgICAgICAgICBlbGQuaWQgPSBlbGQuZmllbGRJZDtcbiAgICAgICAgICAgIGVsZC5ncm91cElkID0gZmllbGRMaXN0LmZpbmQoZWxmZCA9PiBlbGZkLmlkID09IGVsZC5maWVsZElkKS5ncm91cElkO1xuICAgICAgICAgICAgdGhpcy5mb3JtUmlnaHRHcm91cC5wdXNoKGVsZCk7XG4gICAgICAgICAgICBjb25zdCBmaWVsZGluZGV4ID0gZmllbGRMaXN0LmZpbmRJbmRleChlbGZsID0+IGVsZmwuaWQgPT0gZWxkLmZpZWxkSWQpO1xuICAgICAgICAgICAgZmllbGRMaXN0LnNwbGljZShmaWVsZGluZGV4LCAxKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuZmllbGRHcm91cExpc3QuZm9yRWFjaCgoZWw6IGFueSwgaW5kZXgpID0+IHtcbiAgICAgICAgICBlbC5maWVsZHMgPSBmaWVsZExpc3QuZmlsdGVyKGVscyA9PiBlbHMuZ3JvdXBJZCA9PT0gZWwuaWQpO1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5uZXdFbnRpdHk/LnBhdGNoVmFsdWUocmVzKTtcbiAgICAgICAgdGhpcy5uYXZBY3RpdmUgPSAwO1xuICAgICAgICB0aGlzLnJlc3VsdFNvdXJjZSA9IHJlcy5maWVsZFRhYnM7XG4gICAgICB9XG4gICAgICByZXNvbHZlKHRydWUpO1xuICAgIH0pO1xuICB9XG5cbiAgLyoq57uZZmllbGRUYWJz5re75Yqg5paw5o6n5Lu2ICovXG4gIGFkZENvbnRyb2xUb0ZpZWxkVGFicyhuYW1lVmFsdWUgPSAnJykge1xuICAgIGNvbnN0IG5ld0Zvcm1Hcm91cCA9IHRoaXMuZmIuZ3JvdXAobmV3IGZpZWxkVGFic0Jhc2UoKSk7XG4gICAgbmV3Rm9ybUdyb3VwXG4gICAgICAuZ2V0KCduYW1lJylcbiAgICAgID8ucGF0Y2hWYWx1ZShcbiAgICAgICAgdGhpcy5maWVsZFRhYnMubGVuZ3RoID09PSAwXG4gICAgICAgICAgPyB0aGlzLl9Mb2NhbGl6YXRpb25TZXJ2aWNlLmluc3RhbnQoYENtczo6RmllbGRUYWJgKVxuICAgICAgICAgIDogbmFtZVZhbHVlLFxuICAgICAgKTtcbiAgICB0aGlzLmZpZWxkVGFicy5wdXNoKG5ld0Zvcm1Hcm91cCk7XG4gICAgdGhpcy5yZXN1bHRTb3VyY2UucHVzaChuZXdGb3JtR3JvdXAudmFsdWUpO1xuICAgIHRoaXMubmF2QWN0aXZlID0gdGhpcy5yZXN1bHRTb3VyY2UubGVuZ3RoIC0gMTtcbiAgfVxuXG4gIC8qKuiOt+WPluWtl+auteWIhue7hCAqL1xuICBnZXRGaWVsZEdyb3VwKCkge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0cykgPT4ge1xuICAgICAgdGhpcy5fRmllbGRHcm91cEFkbWluU2VydmljZS5nZXRMaXN0KHt9KS5zdWJzY3JpYmUoYXN5bmMgcmVzID0+IHtcbiAgICAgICAgY29uc3QgZmllbGRMaXN0OiBhbnkgPSBhd2FpdCB0aGlzLmdldEZpZWxkTGlzdCgpO1xuICAgICAgICBjb25zdCBmaWVsZEdyb3VwTGlzdDogYW55ID0gcmVzLml0ZW1zO1xuICAgICAgICBmaWVsZEdyb3VwTGlzdC51bnNoaWZ0KHtcbiAgICAgICAgICBpZDogbnVsbCxcbiAgICAgICAgICBuYW1lOiAnVW5ncm91cGVkRmllbGRzJyxcbiAgICAgICAgfSk7XG4gICAgICAgIGZpZWxkR3JvdXBMaXN0LmZvckVhY2goKGVsOiBhbnksIGluZGV4KSA9PiB7XG4gICAgICAgICAgZWwuZmllbGRzID0gZmllbGRMaXN0LmZpbHRlcihlbHMgPT4gZWxzLmdyb3VwSWQgPT09IGVsLmlkKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuZmllbGRHcm91cExpc3QgPSBmaWVsZEdyb3VwTGlzdDtcbiAgICAgICAgdGhpcy5maWVsZExpc3QgPSB0aGlzLmRlZXBDbG9uZShmaWVsZExpc3QpO1xuICAgICAgICAvLyBjb25zdCBlbnRyeVR5cGVzSWQgPSB0aGlzLmVudHJ5VHlwZXNJZDtcbiAgICAgICAgLy8gaWYgKGVudHJ5VHlwZXNJZCkge1xuICAgICAgICAvLyAgIHRoaXMuZW50cnlUeXBlc0lkID0gZW50cnlUeXBlc0lkO1xuICAgICAgICAvLyAgIHRoaXMuZ2V0RW50cnlUeXBlcygpO1xuICAgICAgICAvLyB9XG4gICAgICAgIHJlc29sdmUocmVzKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG4gIC8qKuiOt+WPluadoeebruexu+Wei+ivpuaDhSAqL1xuICBnZXRFbnRyeVR5cGVzKCkge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0cykgPT4ge1xuICAgICAgdGhpcy5fRW50cnlUeXBlQWRtaW5TZXJ2aWNlLmdldCh0aGlzLmVudHJ5VHlwZXNJZCkuc3Vic2NyaWJlKHJlcyA9PiB7XG4gICAgICAgIHRoaXMuZW50cnlUeXBlc1NlbGVjdCA9IHJlcztcbiAgICAgICAgcmVzb2x2ZShyZXMpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gICAgLy8gLy8gY29uc3QgZmllbGRMaXN0OiBhbnkgPSB0aGlzLmRlZXBDbG9uZSh0aGlzLmZpZWxkTGlzdCk7XG4gICAgLy8gdGhpcy5fRW50cnlUeXBlQWRtaW5TZXJ2aWNlLmdldCh0aGlzLmVudHJ5VHlwZXNJZCkuc3Vic2NyaWJlKHJlcyA9PiB7XG4gICAgLy8gICAvLyByZXMuZmllbGRUYWJzLmZvckVhY2goZWwgPT4ge1xuICAgIC8vICAgLy8gICBlbC5maWVsZHMuZm9yRWFjaCgoZWxkOiBhbnkpID0+IHtcbiAgICAvLyAgIC8vICAgICBlbGQuaWQgPSBlbGQuZmllbGRJZDtcbiAgICAvLyAgIC8vICAgICBlbGQuZ3JvdXBJZCA9IGZpZWxkTGlzdC5maW5kKGVsZmQgPT4gZWxmZC5pZCA9PSBlbGQuZmllbGRJZCkuZ3JvdXBJZDtcbiAgICAvLyAgIC8vICAgICB0aGlzLmZvcm1SaWdodEdyb3VwLnB1c2goZWxkKTtcbiAgICAvLyAgIC8vICAgICBjb25zdCBmaWVsZGluZGV4ID0gZmllbGRMaXN0LmZpbmRJbmRleChlbGZsID0+IGVsZmwuaWQgPT0gZWxkLmZpZWxkSWQpO1xuICAgIC8vICAgLy8gICAgIGZpZWxkTGlzdC5zcGxpY2UoZmllbGRpbmRleCwgMSk7XG4gICAgLy8gICAvLyAgIH0pO1xuICAgIC8vICAgLy8gfSk7XG4gICAgLy8gICAvLyB0aGlzLmZpZWxkR3JvdXBMaXN0LmZvckVhY2goKGVsOiBhbnksIGluZGV4KSA9PiB7XG4gICAgLy8gICAvLyAgIGVsLmZpZWxkcyA9IGZpZWxkTGlzdC5maWx0ZXIoZWxzID0+IGVscy5ncm91cElkID09PSBlbC5pZCk7XG4gICAgLy8gICAvLyB9KTtcbiAgICAvLyAgIC8vIHRoaXMubmV3RW50aXR5Py5wYXRjaFZhbHVlKHJlcyk7XG4gICAgLy8gICB0aGlzLmVudHJ5VHlwZXNTZWxlY3QgPSByZXM7XG4gICAgLy8gICAvLyB0aGlzLnJlc3VsdFNvdXJjZSA9IHJlcy5maWVsZFRhYnM7XG4gICAgLy8gfSk7XG4gIH1cbiAgLyoqXG4gICAqIOa3seaLt+i0nS0t5pa55rOVXG4gICAqICRhcGkuZGVlcENsb25lKCkgICovXG4gIGRlZXBDbG9uZShvYmo6IGFueSkge1xuICAgIGlmICh0eXBlb2Ygb2JqICE9PSAnb2JqZWN0JyB8fCBvYmogPT09IG51bGwpIHJldHVybiBvYmo7XG4gICAgY29uc3QgcmVzdWx0ID0gQXJyYXkuaXNBcnJheShvYmopID8gW10gOiB7fTtcbiAgICBmb3IgKGNvbnN0IGtleSBpbiBvYmopIHtcbiAgICAgIGlmIChvYmouaGFzT3duUHJvcGVydHkoa2V5KSkge1xuICAgICAgICBpZiAodHlwZW9mIG9ialtrZXldID09PSAnb2JqZWN0JyAmJiBvYmpba2V5XSAhPT0gbnVsbCkge1xuICAgICAgICAgIGlmIChvYmpba2V5XSBpbnN0YW5jZW9mIERhdGUpIHtcbiAgICAgICAgICAgIHJlc3VsdFtrZXldID0gbmV3IERhdGUob2JqW2tleV0uZ2V0VGltZSgpKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKG9ialtrZXldIGluc3RhbmNlb2YgUmVnRXhwKSB7XG4gICAgICAgICAgICByZXN1bHRba2V5XSA9IG5ldyBSZWdFeHAob2JqW2tleV0pO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXN1bHRba2V5XSA9IHRoaXMuZGVlcENsb25lKG9ialtrZXldKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmVzdWx0W2tleV0gPSBvYmpba2V5XTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0gbmFtZVZhbHVlIOiOt+WPluaJgOacieWtl+autVxuICAgKi9cbiAgZ2V0RmllbGRMaXN0KCkge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0cykgPT4ge1xuICAgICAgdGhpcy5fRmllbGRBZG1pblNlcnZpY2VcbiAgICAgICAgLmdldExpc3Qoe1xuICAgICAgICAgIG1heFJlc3VsdENvdW50OiAxMDAwLFxuICAgICAgICB9KVxuICAgICAgICAuc3Vic2NyaWJlKChyZXM6IGFueSkgPT4ge1xuICAgICAgICAgIHJlcy5pdGVtcy5mb3JFYWNoKGVsID0+IHtcbiAgICAgICAgICAgIGVsLnJlcXVpcmVkID0gZmFsc2U7XG4gICAgICAgICAgICBlbC5zaG93SW5MaXN0ID0gZmFsc2U7XG4gICAgICAgICAgICBlbC5lbmFibGVTZWFyY2ggPSBmYWxzZTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgICByZXNvbHZlKHJlcy5pdGVtcyk7XG4gICAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIOaLluaLvSDlip/og70qL1xuICAvKirmlbDmja7mupAgKi9cbiAgLyoq5pWw5o2u5rqQLeWtl+auteWIhue7hOaVsOaNri3ljIXlkKvlrZfmrrXmlbDmja4gZmllbGRzICovXG4gIGZpZWxkR3JvdXBMaXN0OiBhbnlbXSA9IFtdO1xuICAvKirmlbDmja7mupAt5omA5pyJ5a2X5q615YiX6KGoICovXG4gIGZpZWxkTGlzdDogYW55W10gPSBbXTtcbiAgLyoq5pWw5o2u5rqQ5ouW5ou955qE5YiG57uE5LiL5qCHICovXG4gIERhdGFTb3VyY2VHcm91cEluZGV4OiBudW1iZXIgfCBhbnk7XG4gIC8qKuaVsOaNrua6kOaLluaLveeahOWtl+auteS4i+aghyAqL1xuICBEYXRhU291cmNlRmllbGRJbmRleDogbnVtYmVyIHwgYW55O1xuICAvKirnm67moIfmupAg57uT5p6cKi9cbiAgcmVzdWx0U291cmNlOiBhbnlbXSA9IFtdO1xuXG4gIC8qKuS7juaVsOaNrua6kOaLluaLveeahOWFg+e0oCAqL1xuICBmcm9tRGF0YVNvdXJjZURyYWdFbDogYW55O1xuICAvKirku47nm67moIfmupDmi5bmi73nmoTlhYPntKAgKi9cbiAgZnJvbVJlc3VsdFNvdXJjZURyYWdFbDogYW55O1xuXG4gIC8qKuadpeiHquaVsOaNrua6kOeahOmbhuWQiO+8jOeUqOS6juS7juebruagh+a6kOaLluWbnuaVsOaNrua6kOaXtueahOWIpOaWre+8jOS4juWPluWAvCAqL1xuICBmb3JtUmlnaHRHcm91cDogYW55W10gPSBbXTtcbiAgLyoq5LuO5pWw5o2u5rqQ5byA5aeL5ouW5ou9ICovXG4gIGZyb21EYXRhU291cmNlRHJhZ1N0YXJ0KGVsZW1lbnQsIGZpZWxkSW5kZXgsIGdyb3VwSW5kZXgpIHtcbiAgICB0aGlzLmZyb21EYXRhU291cmNlRHJhZ0VsID0gZWxlbWVudDtcbiAgICB0aGlzLkRhdGFTb3VyY2VGaWVsZEluZGV4ID0gZmllbGRJbmRleDtcbiAgICB0aGlzLkRhdGFTb3VyY2VHcm91cEluZGV4ID0gZ3JvdXBJbmRleDtcbiAgICB0aGlzLmZyb21SZXN1bHRTb3VyY2VEcmFnRWwgPSB1bmRlZmluZWQ7XG4gIH1cbiAgLyoq5LuO55uu5qCH5rqQ5byA5aeL5ouW5ou9ICovXG4gIGZyb21SZXN1bHRTb3VyY2VEcmFnU3RhcnQoZWxlbWVudCkge1xuICAgIHRoaXMuZnJvbVJlc3VsdFNvdXJjZURyYWdFbCA9IGVsZW1lbnQ7XG4gICAgdGhpcy5mcm9tRGF0YVNvdXJjZURyYWdFbCA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLkRhdGFTb3VyY2VGaWVsZEluZGV4ID0gdW5kZWZpbmVkO1xuICAgIHRoaXMuRGF0YVNvdXJjZUdyb3VwSW5kZXggPSB1bmRlZmluZWQ7XG4gIH1cbiAgLyoq5ouW5ou95Yiw5pWw5o2u5rqQ5pe26Kem5Y+RICovXG4gIGRyYWdUb0RhdGFTb3VyY2VEcm9wcGVkKCkge1xuICAgIC8v5LuO5pWw5o2u5rqQ5ouW5ou95Yiw5pWw5o2u5rqQLeaOkuW6j1xuICAgIGlmICh0aGlzLmZyb21EYXRhU291cmNlRHJhZ0VsKSB7XG4gICAgICAvKiBlbXB0eSAqL1xuICAgIH1cbiAgICBjb25zdCBfZnJvbVJlc3VsdFNvdXJjZURyYWdFbCA9IHRoaXMuZnJvbVJlc3VsdFNvdXJjZURyYWdFbDtcbiAgICBjb25zdCBmb3JtUmlnaHRHcm91cCA9IHRoaXMuZGVlcENsb25lKHRoaXMuZm9ybVJpZ2h0R3JvdXApO1xuICAgIGNvbnN0IGZpZWxkTGlzdCA9IHRoaXMuZGVlcENsb25lKHRoaXMuZmllbGRMaXN0KTtcblxuICAgIGlmIChfZnJvbVJlc3VsdFNvdXJjZURyYWdFbCkge1xuICAgICAgLy/np7vliqhcbiAgICAgIC8v5LuO55uu5qCH5rqQ5ouW5ou95Yiw5pWw5o2u5rqQXG4gICAgICAvLyDmi5bmi73nm67moIfmupDnmoTkuIvmoIdcbiAgICAgIGNvbnN0IGRyYWdSZXN1bHRTb3VyY2VJbmRleCA9IHRoaXMucmVzdWx0U291cmNlW3RoaXMubmF2QWN0aXZlXS5maWVsZHMuZmluZEluZGV4KFxuICAgICAgICBlbCA9PiBlbC5pZCA9PSBfZnJvbVJlc3VsdFNvdXJjZURyYWdFbC5pZCxcbiAgICAgICk7XG4gICAgICAvL+WIoOmZpOebruagh+a6kOS4reeahOaVsOaNrlxuICAgICAgdGhpcy5yZXN1bHRTb3VyY2VbdGhpcy5uYXZBY3RpdmVdLmZpZWxkcy5zcGxpY2UoZHJhZ1Jlc3VsdFNvdXJjZUluZGV4LCAxKTtcbiAgICAgIGZvcm1SaWdodEdyb3VwLnNwbGljZShcbiAgICAgICAgZm9ybVJpZ2h0R3JvdXAuZmluZEluZGV4KGVsID0+IGVsLmlkID09IF9mcm9tUmVzdWx0U291cmNlRHJhZ0VsLmlkKSxcbiAgICAgICAgMSxcbiAgICAgICk7XG4gICAgICB0aGlzLmZpZWxkR3JvdXBMaXN0LmZvckVhY2goZWwgPT4ge1xuICAgICAgICBpZiAoZWwuaWQgPT0gX2Zyb21SZXN1bHRTb3VyY2VEcmFnRWwuZ3JvdXBJZCkge1xuICAgICAgICAgIGNvbnN0IGVsRmllbGRzQWxsID0gZmllbGRMaXN0LmZpbHRlcihlbHMgPT4gZWxzLmdyb3VwSWQgPT09IGVsLmlkKTtcbiAgICAgICAgICBlbC5maWVsZHMgPSBlbEZpZWxkc0FsbC5maWx0ZXIoXG4gICAgICAgICAgICBpdGVtID0+ICFmb3JtUmlnaHRHcm91cC5zb21lKGl0ZW1CID0+IGl0ZW0uaWQgPT09IGl0ZW1CLmlkKSxcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIHRoaXMuZm9ybVJpZ2h0R3JvdXAgPSBmb3JtUmlnaHRHcm91cDtcbiAgICB9XG5cbiAgICB0aGlzLnNldGZpZWxkVGFic0Zyb20oKTtcbiAgfVxuICAvKirmi5bmi73liLDnm67moIfmupDml7bop6blj5FcbiAgICpcbiAgICovXG4gIGRyYWdUb1Jlc3VsdFNvdXJjZURyb3BwZWQoZmllbGRUYWJzdGVtOiBhbnksIGZpZWxkVGFic0luZGV4KSB7XG4gICAgY29uc3QgX2Zyb21EYXRhU291cmNlRHJhZ0VsID0gdGhpcy5mcm9tRGF0YVNvdXJjZURyYWdFbDtcbiAgICAvL+S7juaVsOaNrua6kOaLluaLveWIsOebruagh+a6kFxuICAgIGlmIChfZnJvbURhdGFTb3VyY2VEcmFnRWwpIHtcbiAgICAgIHRoaXMuZmllbGRHcm91cExpc3RbdGhpcy5EYXRhU291cmNlR3JvdXBJbmRleCB8fCAwXS5maWVsZHMuc3BsaWNlKFxuICAgICAgICB0aGlzLkRhdGFTb3VyY2VGaWVsZEluZGV4LFxuICAgICAgICAxLFxuICAgICAgKTtcbiAgICAgIHRoaXMucmVzdWx0U291cmNlW2ZpZWxkVGFic0luZGV4XS5maWVsZHMucHVzaChfZnJvbURhdGFTb3VyY2VEcmFnRWwpO1xuICAgICAgdGhpcy5mb3JtUmlnaHRHcm91cC5wdXNoKF9mcm9tRGF0YVNvdXJjZURyYWdFbCk7XG4gICAgfVxuXG4gICAgdGhpcy5zZXRmaWVsZFRhYnNGcm9tKCk7XG4gIH1cbiAgLyoqIOS7juebruagh+a6kOaLluaLveWIsOebruagh+a6kCovXG4gIGRyYWdUb1Jlc3VsdFNvdXJjZUl0ZW1Ecm9wcGVkKGZpZWxkc0luZGV4KSB7XG4gICAgY29uc3QgX2Zyb21SZXN1bHRTb3VyY2VEcmFnRWwgPSB0aGlzLmZyb21SZXN1bHRTb3VyY2VEcmFnRWw7XG4gICAgaWYgKF9mcm9tUmVzdWx0U291cmNlRHJhZ0VsKSB7XG4gICAgICAvLyDmi5bmi73nm67moIfmupDnmoTkuIvmoIdcbiAgICAgIGNvbnN0IGRyYWdSZXN1bHRTb3VyY2VJbmRleCA9IHRoaXMucmVzdWx0U291cmNlW3RoaXMubmF2QWN0aXZlXS5maWVsZHMuZmluZEluZGV4KFxuICAgICAgICBlbCA9PiBlbC5pZCA9PSBfZnJvbVJlc3VsdFNvdXJjZURyYWdFbC5pZCxcbiAgICAgICk7XG4gICAgICAvL+WIoOmZpOebruagh+a6kOS4reeahOaVsOaNrlxuICAgICAgdGhpcy5yZXN1bHRTb3VyY2VbdGhpcy5uYXZBY3RpdmVdLmZpZWxkcy5zcGxpY2UoZHJhZ1Jlc3VsdFNvdXJjZUluZGV4LCAxKTtcbiAgICAgIHRoaXMucmVzdWx0U291cmNlW3RoaXMubmF2QWN0aXZlXS5maWVsZHMuc3BsaWNlKGZpZWxkc0luZGV4LCAwLCBfZnJvbVJlc3VsdFNvdXJjZURyYWdFbCk7XG4gICAgfVxuICAgIHRoaXMuc2V0ZmllbGRUYWJzRnJvbSgpO1xuICB9XG4gIC8qKuiuvue9rmZvcm1B6KGo5Y2VICovXG4gIHNldGZpZWxkVGFic0Zyb20oKSB7XG4gICAgY29uc3Qgc2V0QXJyYXk6IGFueVtdID0gW107XG4gICAgdGhpcy5yZXN1bHRTb3VyY2UuZm9yRWFjaChlbCA9PiB7XG4gICAgICBjb25zdCBmaWVsZHNBcnJheTogYW55W10gPSBbXTtcbiAgICAgIGVsLmZpZWxkcy5mb3JFYWNoKGl0ZW0gPT4ge1xuICAgICAgICBmaWVsZHNBcnJheS5wdXNoKHtcbiAgICAgICAgICBmaWVsZElkOiBpdGVtLmlkIHx8IGl0ZW0uZmllbGRJZCxcbiAgICAgICAgICBkaXNwbGF5TmFtZTogaXRlbS5kaXNwbGF5TmFtZSxcbiAgICAgICAgICByZXF1aXJlZDogaXRlbT8ucmVxdWlyZWQsXG4gICAgICAgICAgc2hvd0luTGlzdDogaXRlbT8uc2hvd0luTGlzdCxcbiAgICAgICAgICBlbmFibGVTZWFyY2g6IGl0ZW0/LmVuYWJsZVNlYXJjaCxcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICAgIHNldEFycmF5LnB1c2goe1xuICAgICAgICBuYW1lOiBlbC5uYW1lLFxuICAgICAgICBmaWVsZHM6IGZpZWxkc0FycmF5LFxuICAgICAgfSk7XG4gICAgfSk7XG4gICAgdGhpcy5uZXdFbnRpdHk/LnBhdGNoVmFsdWUoe1xuICAgICAgZmllbGRUYWJzOiBzZXRBcnJheSxcbiAgICB9KTtcbiAgfVxuICBwcml2YXRlIF9WYWxpZGF0b3JzU2VydmljZSA9IGluamVjdChWYWxpZGF0b3JzU2VydmljZSk7XG4gIC8qKuihqOWNlemqjOivgeeKtuaAgVxuICAgKiB7XG4gICAqICB0aXRsZTp0cnVlLFxuICAgKiB9XG4gICAqL1xuICBmb3JtVmFsaWRhdGlvbjogYW55ID0gJyc7XG4gIGlzU3VibWl0OiBib29sZWFuIHwgYW55ID0gZmFsc2U7XG4gIC8qKuS/neWtmOihqOWNlSAqL1xuICBzYXZlKCkge1xuICAgIGlmICh0aGlzLmlzU3VibWl0KSByZXR1cm47XG4gICAgdGhpcy5pc1N1Ym1pdCA9IHRydWU7XG4gICAgY29uc3QgaW5wdXQgPSB0aGlzLm5ld0VudGl0eT8udmFsdWU7XG5cbiAgICB0aGlzLmZvcm1WYWxpZGF0aW9uID0gdGhpcy5fVmFsaWRhdG9yc1NlcnZpY2UuZ2V0Rm9ybVZhbGlkYXRpb25TdGF0dXModGhpcy5uZXdFbnRpdHkpO1xuICAgIGlmICh0aGlzLl9WYWxpZGF0b3JzU2VydmljZS5pc0NoZWNrRm9ybSh0aGlzLmZvcm1WYWxpZGF0aW9uLCAnQ21zJykpXG4gICAgICByZXR1cm4gKHRoaXMuaXNTdWJtaXQgPSBmYWxzZSk7XG5cbiAgICBpZiAodGhpcy5lbnRyeVR5cGVzU2VsZWN0KSB7XG4gICAgICB0aGlzLl9FbnRyeVR5cGVBZG1pblNlcnZpY2VcbiAgICAgICAgLnVwZGF0ZSh0aGlzLmVudHJ5VHlwZXNTZWxlY3QuaWQsIGlucHV0KVxuICAgICAgICAucGlwZShcbiAgICAgICAgICBmaW5hbGl6ZSgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmlzU3VibWl0ID0gZmFsc2U7XG4gICAgICAgICAgfSksXG4gICAgICAgIClcbiAgICAgICAgLnN1YnNjcmliZShyZXMgPT4ge1xuICAgICAgICAgIHRoaXMudG9hc3Rlci5zdWNjZXNzKHRoaXMuX0xvY2FsaXphdGlvblNlcnZpY2UuaW5zdGFudChgQ21zOjpTYXZlZFN1Y2Nlc3NmdWxseWApKTtcbiAgICAgICAgICB0aGlzLl9sb2NhdGlvbi5iYWNrKCk7XG4gICAgICAgICAgdGhpcy5fVXBkYXRlTGlzdFNlcnZpY2UudXBkYXRlTGlzdCgpO1xuICAgICAgICB9KTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaW5wdXQuc2VjdGlvbklkID0gdGhpcy5zZWN0aW9uSWQ7XG4gICAgdGhpcy5fRW50cnlUeXBlQWRtaW5TZXJ2aWNlXG4gICAgICAuY3JlYXRlKGlucHV0KVxuICAgICAgLnBpcGUoXG4gICAgICAgIGZpbmFsaXplKCgpID0+IHtcbiAgICAgICAgICB0aGlzLmlzU3VibWl0ID0gZmFsc2U7XG4gICAgICAgIH0pLFxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZShyZXMgPT4ge1xuICAgICAgICB0aGlzLnRvYXN0ZXIuc3VjY2Vzcyh0aGlzLl9Mb2NhbGl6YXRpb25TZXJ2aWNlLmluc3RhbnQoYENtczo6U2F2ZWRTdWNjZXNzZnVsbHlgKSk7XG4gICAgICAgIHRoaXMuX2xvY2F0aW9uLmJhY2soKTtcbiAgICAgICAgdGhpcy5fVXBkYXRlTGlzdFNlcnZpY2UudXBkYXRlTGlzdCgpO1xuICAgICAgfSk7XG4gIH1cbiAgLyoq57yW6L6RVGFic+ihqOWNlSAqL1xuICBlZGl0RmllbGRUYWJzRnJvbTogRm9ybUdyb3VwO1xuICAvKirmqKHmgIHmoYbnirbmgIEgKi9cbiAgdmlzaWJsZVRhYnNPcGVuOiBib29sZWFuIHwgYW55ID0gZmFsc2U7XG4gIC8qKuaYr+WQpuaYr+W/meeijOeKtuaAgSAqL1xuICBtb2RhbEJ1c3k6IGJvb2xlYW4gfCBhbnkgPSBmYWxzZTtcbiAgLyoq5q2j5Zyo57yW6L6R55qEdGFicyAqL1xuICBlZGl0RmllbGRUYWJzU2VsZWN0OiBhbnk7XG4gIC8qKuato+WcqOmAieS4reeahG5hdiAqL1xuICBuYXZBY3RpdmU6IGFueSA9IDA7XG5cbiAgLyoq6KGo5Y2V5o6n5Lu25qih5p2/LeWKqOaAgei1i+WAvOihqOWNleaOp+S7tiAqL1xuICBAVmlld0NoaWxkKCdlZGl0RmllbGRUYWJzTW9kYWxTdWJtaXRCdG4nLCB7IHN0YXRpYzogZmFsc2UgfSlcbiAgZWRpdEZpZWxkVGFic01vZGFsU3VibWl0QnRuOiBFbGVtZW50UmVmO1xuXG4gIC8qKuaooeaAgeahhueKtuaAgeaUueWPmOWbnuiwgyAqL1xuICBWaXNpYmxlVGFic0NoYW5nZShldmVudCkge1xuICAgIGlmICghZXZlbnQpIHtcbiAgICAgIHRoaXMuZWRpdEZpZWxkVGFic1NlbGVjdCA9ICcnO1xuICAgICAgdGhpcy5mb3JtVmFsaWRhdGlvbiA9ICcnO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgfVxuICAvKirmlrDlu7rlop7liqBGaWVsZFRhYnMgKi9cbiAgYWRkRmllbGRUYWJzKCkge1xuICAgIHRoaXMuZWRpdEZpZWxkVGFic1NlbGVjdCA9ICcnO1xuICAgIHRoaXMuZWRpdEZpZWxkVGFic0Zyb20gPSB0aGlzLmZiLmdyb3VwKG5ldyBmaWVsZFRhYnNCYXNlKCkpO1xuICAgIHRoaXMudmlzaWJsZVRhYnNPcGVuID0gdHJ1ZTtcbiAgfVxuICAvKirmraPlnKjnvJbovpHnmoR0YWLkuIvmoIcgKi9cbiAgbmV3RWRpdEZpZWxkVGFic0luZGV4OiBudW1iZXIgfCBhbnk7XG4gIC8qKue8lui+kUZpZWxkVGFicyAqL1xuICBlZGl0RmllbGRUYWJzKGl0ZW0sIGkpIHtcbiAgICB0aGlzLmVkaXRGaWVsZFRhYnNGcm9tID0gdGhpcy5mYi5ncm91cChuZXcgZmllbGRUYWJzQmFzZSgpKTtcbiAgICB0aGlzLmVkaXRGaWVsZFRhYnNGcm9tLnBhdGNoVmFsdWUoe1xuICAgICAgbmFtZTogaXRlbS5uYW1lLFxuICAgIH0pO1xuICAgIHRoaXMuZWRpdEZpZWxkVGFic1NlbGVjdCA9IGl0ZW07XG4gICAgdGhpcy52aXNpYmxlVGFic09wZW4gPSB0cnVlO1xuICAgIHRoaXMubmV3RWRpdEZpZWxkVGFic0luZGV4ID0gaTtcbiAgfVxuXG4gIC8qKuS/neWtmOe8lui+kXRhYnPooajljZUgKi9cbiAgZWRpdEZpZWxkVGFic1NhdmUoKSB7XG4gICAgaWYgKCF0aGlzLmVkaXRGaWVsZFRhYnNGcm9tLnZhbHVlLm5hbWUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgLy/nvJbovpFcbiAgICBpZiAodGhpcy5lZGl0RmllbGRUYWJzU2VsZWN0KSB7XG4gICAgICB0aGlzLnJlc3VsdFNvdXJjZVt0aGlzLm5ld0VkaXRGaWVsZFRhYnNJbmRleF0ubmFtZSA9IHRoaXMuZWRpdEZpZWxkVGFic0Zyb20udmFsdWUubmFtZTtcbiAgICAgIHRoaXMubmF2QWN0aXZlID0gdGhpcy5uZXdFZGl0RmllbGRUYWJzSW5kZXg7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8v5paw5bu6XG4gICAgICB0aGlzLmFkZENvbnRyb2xUb0ZpZWxkVGFicyh0aGlzLmVkaXRGaWVsZFRhYnNGcm9tLnZhbHVlLm5hbWUpO1xuICAgIH1cbiAgICB0aGlzLnZpc2libGVUYWJzT3BlbiA9IGZhbHNlO1xuICAgIHRoaXMuVmlzaWJsZVRhYnNDaGFuZ2UoZmFsc2UpO1xuICAgIHRoaXMuc2V0ZmllbGRUYWJzRnJvbSgpO1xuICB9XG4gIC8qKuWIoOmZpOafkOS4qnRhYnPooajljZUgKi9cbiAgZGVsZXRlRmllbGRUYWJzKGluZGV4KSB7XG4gICAgdGhpcy5kZWxldGVUYWJGaWVsZEdyb3VwTGlzdCh0aGlzLnJlc3VsdFNvdXJjZVtpbmRleF0uZmllbGRzKTtcbiAgICAvLyByZXR1cm5cbiAgICB0aGlzLmZpZWxkVGFicy5yZW1vdmVBdChpbmRleCk7XG4gICAgdGhpcy5yZXN1bHRTb3VyY2Uuc3BsaWNlKGluZGV4LCAxKTtcbiAgICBpZih0aGlzLm5hdkFjdGl2ZT09PWluZGV4KXtcbiAgICAgIHRoaXMubmF2QWN0aXZlID0gMDtcbiAgICB9XG4gICAgaWYodGhpcy5uYXZBY3RpdmU+aW5kZXgpe1xuICAgICAgdGhpcy5uYXZBY3RpdmUgPSB0aGlzLm5hdkFjdGl2ZS0xO1xuICAgIH1cbiAgfVxuXG4gIC8qKuWIoOmZpHRhYuagh+etvuWQjui/mOWOnyBmaWVsZEdyb3VwTGlzdCAqL1xuICBkZWxldGVUYWJGaWVsZEdyb3VwTGlzdChkZWxldGVGaWVsZHMpIHtcbiAgICAvL+WOn+aVsOaNrlxuICAgIGNvbnN0IGZpZWxkTGlzdD10aGlzLmRlZXBDbG9uZSh0aGlzLmZpZWxkTGlzdCk7XG4gICAgLy/lj7PkvqfmiYvpo47nkLTmlbDmja5cbiAgICBjb25zdCBmb3JtUmlnaHRHcm91cD10aGlzLmRlZXBDbG9uZSh0aGlzLmZvcm1SaWdodEdyb3VwKTtcblxuICAgIC8vIOiOt+WPluimgeWIoOmZpOeahOWOn+aVsOaNrlxuICAgIGNvbnN0IGRlbGV0ZUZpZWxkTGlzdCA9IGZpZWxkTGlzdC5maWx0ZXIoZWw9PmRlbGV0ZUZpZWxkcy5tYXAoaXRlbSA9PiBpdGVtLmlkKS5pbmNsdWRlcyhlbC5pZCkpIDtcbiAgICBkZWxldGVGaWVsZExpc3QuZm9yRWFjaChpdGVtPT57XG4gICAgICBjb25zdCBpbmRleD1mb3JtUmlnaHRHcm91cC5maW5kSW5kZXgoZWw9PmVsLmlkPT09aXRlbS5pZCk7XG4gICAgICBmb3JtUmlnaHRHcm91cC5zcGxpY2UoXG4gICAgICAgIGluZGV4LFxuICAgICAgICAxLFxuICAgICAgKTtcbiAgICB9KVxuICAgIFxuICAgIGNvbnN0IGRlbGV0ZUZpZWxkTGlzdEdyb3VwSWRzPWRlbGV0ZUZpZWxkTGlzdC5tYXAoaXRlbT0+aXRlbS5ncm91cElkKTtcbiAgICB0aGlzLmZpZWxkR3JvdXBMaXN0LmZvckVhY2goZWwgPT4ge1xuICAgICAgaWYgKCBkZWxldGVGaWVsZExpc3RHcm91cElkcy5pbmNsdWRlcyhlbC5pZCkpIHtcbiAgICAgICAgY29uc3QgZWxGaWVsZHNBbGwgPSBmaWVsZExpc3QuZmlsdGVyKGVscyA9PiBlbHMuZ3JvdXBJZCA9PT0gZWwuaWQpO1xuICAgICAgICBlbC5maWVsZHMgPSBlbEZpZWxkc0FsbC5maWx0ZXIoXG4gICAgICAgICAgaXRlbSA9PiAhZm9ybVJpZ2h0R3JvdXAuc29tZShpdGVtQiA9PiBpdGVtLmlkID09PSBpdGVtQi5pZCksXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgdGhpcy5mb3JtUmlnaHRHcm91cD1mb3JtUmlnaHRHcm91cDtcblxuICAgIHRoaXMuc2V0ZmllbGRUYWJzRnJvbSgpO1xuICB9XG5cbiAgLyoq57yW6L6R5a2X5q615qih5oCB5qGG54q25oCBICovXG4gIHZpc2libGVFZGl0RmllbGRPcGVuOiBib29sZWFuIHwgYW55ID0gZmFsc2U7XG4gIC8qKue8lui+keWtl+auteaooeaAgeahhuihqOWNlSAqL1xuICBlZGl0RmllbGRGcm9tOiBGb3JtR3JvdXA7XG4gIC8qKuihqOWNleaOp+S7tuaooeadvy3liqjmgIHotYvlgLzooajljZXmjqfku7Yt57yW6L6R5a2X5q61ICovXG4gIEBWaWV3Q2hpbGQoJ2VkaXRGaWVsZE1vZGFsU3VibWl0QnRuJywgeyBzdGF0aWM6IGZhbHNlIH0pIGVkaXRGaWVsZE1vZGFsU3VibWl0QnRuOiBFbGVtZW50UmVmO1xuICAvKirmraPlnKjnvJbovpHnmoTlrZfmrrXkuIvmoIcgKi9cbiAgRWRpdEZpZWxkSW5kZXg6IG51bWJlciB8IGFueTtcbiAgLyoq57yW6L6R5a2X5q615qih5oCB5qGG54q25oCB54q25oCB5pS55Y+Y5Zue6LCDICovXG4gIFZpc2libGVFZGl0RmllbGRDaGFuZ2UoZXZlbnQpIHtcbiAgICBpZiAoIWV2ZW50KSB7XG4gICAgICB0aGlzLkVkaXRGaWVsZEluZGV4ID0gdW5kZWZpbmVkO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgfVxuICBpc1Nob3dJbkxpc3Q6IGJvb2xlYW4gfCBhbnkgPSB0cnVlO1xuICBpc0VuYWJsZVNlYXJjaDogYm9vbGVhbiB8IGFueSA9IHRydWU7XG4gIC8qKuaJk+W8gOe8lui+keWtl+auteaooeaAgeahhiAqL1xuICBFZGl0RmllbGRNb2RhbE9wZW4oaXRlbXMsIGVsSW5kZXgpIHtcbiAgICB0aGlzLnZpc2libGVFZGl0RmllbGRPcGVuID0gdHJ1ZTtcbiAgICB0aGlzLkVkaXRGaWVsZEluZGV4ID0gZWxJbmRleDtcbiAgICB0aGlzLmVkaXRGaWVsZEZyb20gPSB0aGlzLmZiLmdyb3VwKG5ldyBmaWVsZHNCYXNlKCkpO1xuICAgIGNvbnN0IGZpZWxkc09wdGlvbnMgPSB0aGlzLmZpZWxkVGFicy52YWx1ZVt0aGlzLm5hdkFjdGl2ZV0uZmllbGRzW2VsSW5kZXhdO1xuICAgIC8vIHRoaXMuaXNTaG93SW5MaXN0ID0gIXRoaXMuZGlzYWJsZXNob3dpblR5cGVMaXN0LmluY2x1ZGVzKGZpZWxkc09wdGlvbnMuZmllbGQuZm9ybUNvbnRyb2xOYW1lKTtcbiAgICAvLyB0aGlzLmlzRW5hYmxlU2VhcmNoID0gdGhpcy5lbmFibGVTZWFyY2hUeXBlTGlzdC5pbmNsdWRlcyhmaWVsZHNPcHRpb25zLmZpZWxkLmZvcm1Db250cm9sTmFtZSk7XG4gICAgdGhpcy5lZGl0RmllbGRGcm9tLnBhdGNoVmFsdWUoZmllbGRzT3B0aW9ucyk7XG4gICAgLy8gdGhpcy5kaXNhYmxlc2hvd2luVHlwZUxpc3RcbiAgfVxuICAvKirkv53lrZjnvJbovpHlrZfmrrUgKi9cbiAgZWRpdEZpZWxkU2F2ZSgpIHtcbiAgICBjb25zdCBpbnB1dCA9IHRoaXMuZWRpdEZpZWxkRnJvbS52YWx1ZTtcbiAgICB0aGlzLnJlc3VsdFNvdXJjZVt0aGlzLm5hdkFjdGl2ZV0uZmllbGRzW3RoaXMuRWRpdEZpZWxkSW5kZXhdLmRpc3BsYXlOYW1lID0gaW5wdXQuZGlzcGxheU5hbWU7XG4gICAgLy8gdGhpcy5yZXN1bHRTb3VyY2VbdGhpcy5uYXZBY3RpdmVdLmZpZWxkc1t0aGlzLkVkaXRGaWVsZEluZGV4XS5yZXF1aXJlZCA9IGlucHV0LnJlcXVpcmVkO1xuICAgIC8vIHRoaXMucmVzdWx0U291cmNlW3RoaXMubmF2QWN0aXZlXS5maWVsZHNbdGhpcy5FZGl0RmllbGRJbmRleF0uc2hvd0luTGlzdCA9IGlucHV0LnNob3dJbkxpc3Q7XG4gICAgLy8gdGhpcy5yZXN1bHRTb3VyY2VbdGhpcy5uYXZBY3RpdmVdLmZpZWxkc1t0aGlzLkVkaXRGaWVsZEluZGV4XS5lbmFibGVTZWFyY2ggPSBpbnB1dC5lbmFibGVTZWFyY2g7XG4gICAgdGhpcy52aXNpYmxlRWRpdEZpZWxkT3BlbiA9IGZhbHNlO1xuICAgIHRoaXMuc2V0ZmllbGRUYWJzRnJvbSgpO1xuICB9XG5cbiAgLyoq54K55Ye74oCc5a2X5q615biD5bGA4oCd5aSN6YCJ5qGG5LqL5Lu2ICovXG4gIGNoZWNrYm94Q2hhbmdlKGV2ZW50LGlucHV0KSB7XG4gICAgY29uc3Qge2NoZWNrZWQsbmFtZX09ZXZlbnQudGFyZ2V0O1xuICAgIGNvbnN0IHtyb3csaW5kZXh9PWlucHV0O1xuICAgIHRoaXMucmVzdWx0U291cmNlW3RoaXMubmF2QWN0aXZlXS5maWVsZHNbaW5kZXhdW25hbWVdPWNoZWNrZWQ7XG4gICAgdGhpcy5zZXRmaWVsZFRhYnNGcm9tKCk7XG4gICAgY29uc29sZS5sb2coZXZlbnQudGFyZ2V0LCfngrnlh7vigJzlrZfmrrXluIPlsYDigJ3lpI3pgInmoYbkuovku7YgJyxldmVudCxpbnB1dCwncmVzdWx0U291cmNlJyx0aGlzLnJlc3VsdFNvdXJjZSwnbmV3RW50aXR5Jyx0aGlzLm5ld0VudGl0eSk7XG4gIH1cblxuXG5cblxuXG4gIC8qKm5hbWXooajljZXmjqfku7YgKi9cbiAgZ2V0IG5hbWVJbnB1dCgpIHtcbiAgICByZXR1cm4gdGhpcy5uZXdFbnRpdHkuZ2V0KCduYW1lJyk7XG4gIH1cbiAgLyoq5a2X5q615qCH562+aW5wdXTlpLHljrvmoIfngrnnlJ/miJDlrZfmrrXlkI3lrZcgKi9cbiAgZGlzUGxheU5hbWVJbnB1dEJsdXIoZXZlbnQpIHtcbiAgICBjb25zdCB2YWx1ZSA9IGV2ZW50LnRhcmdldC52YWx1ZTtcbiAgICBjb25zdCBwaW55aW4gPSB0aGlzLl9DbXNBcGlTZXJ2aWNlLmNoaW5lc2VUb1Bpbnlpbih2YWx1ZSk7XG4gICAgY29uc3QgbmFtZUlucHV0OiBhbnkgPSB0aGlzLm5hbWVJbnB1dDtcbiAgICBpZiAobmFtZUlucHV0LnZhbHVlKSByZXR1cm47XG4gICAgbmFtZUlucHV0LnBhdGNoVmFsdWUocGlueWluKTtcbiAgfVxufVxuIiwiPGZvcm0gY2xhc3M9XCJyb3cgZy0zIG5lZWRzLXZhbGlkYXRpb25cIiBbZm9ybUdyb3VwXT1cIm5ld0VudGl0eVwiIFtjbGFzc109XCJ7J3dhcy12YWxpZGF0ZWQnOmZvcm1WYWxpZGF0aW9ufVwiXG4gICAgKHN1Ym1pdCk9XCJzYXZlKClcIj5cbiAgICA8YWJwLXBhZ2UgW3RpdGxlXT1cImVudHJ5VHlwZXNJZCA/ICgnQWJwVWk6OkVkaXQnIHwgYWJwTG9jYWxpemF0aW9uKTooJ0Ntczo6TmV3JyB8IGFicExvY2FsaXphdGlvbilcIlxuICAgICAgICBbdG9vbGJhcl09XCJ0cnVlXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJjcmVhdGUtb3ItZWRpdC1lbnRyeS10eXBlLXBhZ2VcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkXCI+XG4gICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwic3VibWl0XCIgc3R5bGU9XCJkaXNwbGF5OiBub25lO1wiICNzdWJtaXRjbGljaz48L2J1dHRvbj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZC1ib2R5XCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtYi0zXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiZm9ybS1sYWJlbFwiPnt7J0Ntczo6RGlzcGxheU5hbWUnIHwgYWJwTG9jYWxpemF0aW9ufX08L2xhYmVsPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIGNsYXNzPVwiZm9ybS1jb250cm9sXCIgZm9ybUNvbnRyb2xOYW1lPVwiZGlzcGxheU5hbWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoYmx1cik9XCJkaXNQbGF5TmFtZUlucHV0Qmx1cigkZXZlbnQpXCIgcGxhY2Vob2xkZXI9XCJcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWItM1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImZvcm0tbGFiZWxcIj57eydDbXM6Ok5hbWUnIHwgYWJwTG9jYWxpemF0aW9ufX08L2xhYmVsPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIGNsYXNzPVwiZm9ybS1jb250cm9sXCIgZm9ybUNvbnRyb2xOYW1lPVwibmFtZVwiIHBsYWNlaG9sZGVyPVwiXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBmb3JtQXJyYXlOYW1lPVwiZmllbGRUYWJzXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1iLTNcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiZm9ybS1sYWJlbFwiPnt7J0Ntczo6RmllbGRMYXlvdXQnIHwgYWJwTG9jYWxpemF0aW9ufX08L2xhYmVsPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29udGFpbmVyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1zbS04IGJvcmRlciByb3VuZGVkXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx1bCBuZ2JOYXYgI25hdj1cIm5nYk5hdlwiIFsoYWN0aXZlSWQpXT1cIm5hdkFjdGl2ZVwiIGNsYXNzPVwibmF2IG5hdi10YWJzXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBpdGVtIG9mIHJlc3VsdFNvdXJjZTsgbGV0IGkgPSBpbmRleFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaSBbbmdiTmF2SXRlbV09XCJpXCIgbmdiRHJvcGRvd24gY2xhc3M9XCJuYXYtaXRlbVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvbGU9XCJwcmVzZW50YXRpb25cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgbmdiTmF2TGluayBjbGFzcz1cIm5hdi1saW5rXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBpdGVtLm5hbWUgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibXMtMVwiIChjbGljay5zdG9wKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmdiRHJvcGRvd25Ub2dnbGU+PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBuZ2JEcm9wZG93bk1lbnUgc3R5bGU9XCJ6LWluZGV4OiA5OTk7XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBuZ2JEcm9wZG93bkl0ZW0gdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrLnN0b3ApPVwiZWRpdEZpZWxkVGFicyhpdGVtLGkpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYXMgZmEtZWRpdFwiPjwvaT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eydBYnBVaTo6RWRpdCcgfCBhYnBMb2NhbGl6YXRpb259fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gbmdiRHJvcGRvd25JdGVtICpuZ0lmPVwicmVzdWx0U291cmNlLmxlbmd0aCAhPT0gMVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiIChjbGljay5zdG9wKT1cImRlbGV0ZUZpZWxkVGFicyhpKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmFzIGZhLXRyYXNoXCI+PC9pPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7J0FicFVpOjpEZWxldGUnIHwgYWJwTG9jYWxpemF0aW9ufX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBuZ2JOYXZDb250ZW50PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInAtMlwiIG9uZHJhZ292ZXI9XCJldmVudC5wcmV2ZW50RGVmYXVsdCgpO1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGRyb3ApPVwiZHJhZ1RvUmVzdWx0U291cmNlRHJvcHBlZChpdGVtLGkpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHlsZT1cImhlaWdodDogMTAwJTtcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz1cImZvcm0tdGV4dCB0ZXh0LW11dGVkXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJpdGVtLmZpZWxkcy5sZW5ndGggPT09IDBcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3snQ21zOjpEcmFnQW5kRHJvcEZpZWxkVGlwcycgfCBhYnBMb2NhbGl6YXRpb259fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGFibGUgY2xhc3M9XCJ0YWJsZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGhlYWQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGg+PC90aD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aD57eydDbXM6OkRpc3BsYXlOYW1lJyB8IGFicExvY2FsaXphdGlvbn19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RoPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoPnt7J0Ntczo6UmVxdWlyZWQnIHwgYWJwTG9jYWxpemF0aW9ufX08L3RoPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoPnt7J0Ntczo6U2hvd0luTGlzdCcgfCBhYnBMb2NhbGl6YXRpb259fTwvdGg+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGg+e3snQ21zOjpFbmFibGVTZWFyY2gnIHwgYWJwTG9jYWxpemF0aW9ufX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGg+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGg+PC90aD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90aGVhZD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRib2R5PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0Zvcj1cImxldCBlbCBvZiBpdGVtLmZpZWxkczsgbGV0IGllbCA9IGluZGV4XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyIGRyYWdnYWJsZT1cInRydWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZHJhZ3N0YXJ0KT1cImZyb21SZXN1bHRTb3VyY2VEcmFnU3RhcnQoZWwpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGRyb3ApPVwiZHJhZ1RvUmVzdWx0U291cmNlSXRlbURyb3BwZWQoaWVsKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImRyYWctaGFuZGxlIGQtaW5saW5lXCIgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2RrRHJhZ0hhbmRsZT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImJpIGJpLWFycm93cy1tb3ZlIGZzLTVcIj48L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD57eyBlbC5kaXNwbGF5TmFtZSB9fTwvdGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwiY2hlY2tib3hcIiByb2xlPVwiYnV0dG9uXCIgY2xhc3M9XCJmb3JtLWNoZWNrLWlucHV0XCIgW2NoZWNrZWRdPVwiZWwucmVxdWlyZWRcIiAgbmFtZT1cInJlcXVpcmVkXCIgKGNoYW5nZSk9XCJjaGVja2JveENoYW5nZSgkZXZlbnQse3JvdzplbCxpbmRleDppZWx9KVwiICAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cImNoZWNrYm94XCIgIHJvbGU9XCJidXR0b25cIiBjbGFzcz1cImZvcm0tY2hlY2staW5wdXRcIiBbY2hlY2tlZF09XCJlbC5zaG93SW5MaXN0XCIgIG5hbWU9XCJzaG93SW5MaXN0XCIgKGNoYW5nZSk9XCJjaGVja2JveENoYW5nZSgkZXZlbnQse3JvdzplbCxpbmRleDppZWx9KVwiICAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cImNoZWNrYm94XCIgIHJvbGU9XCJidXR0b25cIiBjbGFzcz1cImZvcm0tY2hlY2staW5wdXRcIiBbY2hlY2tlZF09XCJlbC5lbmFibGVTZWFyY2hcIiAgICBuYW1lPVwiZW5hYmxlU2VhcmNoXCIgKGNoYW5nZSk9XCJjaGVja2JveENoYW5nZSgkZXZlbnQse3JvdzplbCxpbmRleDppZWx9KVwiICAgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIHN0eWxlPVwid2lkdGg6IDElO1wiPiBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInAtMCBidG4gYnRuLXNtIGJ0bi1saWdodFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrLnN0b3ApPVwiRWRpdEZpZWxkTW9kYWxPcGVuKGVsLGllbClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIj48aVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImZhcyBmYS13cmVuY2ggcC1zbS0xXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm9sZT1cImJ1dHRvblwiPjwvaT48L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGJvZHk+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90YWJsZT5cblxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSA8dWwgY2xhc3M9XCJsaXN0LWdyb3VwXCIgc3R5bGU9XCJoZWlnaHQ6IDEwMCU7XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0Zvcj1cImxldCBlbCBvZiBpdGVtLmZpZWxkczsgbGV0IGllbCA9IGluZGV4XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGkgZHJhZ2dhYmxlPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGRyYWdzdGFydCk9XCJmcm9tUmVzdWx0U291cmNlRHJhZ1N0YXJ0KGVsKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGRyb3ApPVwiZHJhZ1RvUmVzdWx0U291cmNlSXRlbURyb3BwZWQoaWVsKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJsaXN0LWdyb3VwLWl0ZW0gZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlbiBweS0xXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHlsZT1cInBvc2l0aW9uOiB1bnNldDtcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBlbC5kaXNwbGF5TmFtZSB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJwLTAgYnRuIGJ0bi1zbSBidG4tbGlnaHRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2suc3RvcCk9XCJFZGl0RmllbGRNb2RhbE9wZW4oZWwsaWVsKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIj48aVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJmYXMgZmEtd3JlbmNoIHAtc20tMVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb2xlPVwiYnV0dG9uXCI+PC9pPjwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9saT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC91bD4gLS0+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGk+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaSBjbGFzcz1cIm5hdi1pdGVtXCIgcm9sZT1cInByZXNlbnRhdGlvblwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwibmF2LWxpbmtcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2suc3RvcCk9XCJhZGRGaWVsZFRhYnMoKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhcyBmYS1wbHVzLWNpcmNsZVwiPjwvaT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3snQ21zOjpOZXdUYWInIHwgYWJwTG9jYWxpemF0aW9ufX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGk+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdWw+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgW25nYk5hdk91dGxldF09XCJuYXZcIiBjbGFzcz1cIm10LTIgYm9yZGVybk5hdnMgcC0wXCI+PC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1zbS00XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgbmdiQWNjb3JkaW9uICNhY2NvcmRpb249XCJuZ2JBY2NvcmRpb25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25kcmFnb3Zlcj1cImV2ZW50LnByZXZlbnREZWZhdWx0KCk7XCIgKGRyb3ApPVwiZHJhZ1RvRGF0YVNvdXJjZURyb3BwZWQoKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHlsZT1cIm1pbi1oZWlnaHQ6IDgwcHg7XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBpdGVtIG9mIGZpZWxkR3JvdXBMaXN0OyBsZXQgaSA9IGluZGV4XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBbbmdiQWNjb3JkaW9uSXRlbV09XCJpdGVtLm5hbWVcIiAqbmdJZj1cIml0ZW0uZmllbGRzLmxlbmd0aCA+IDBcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgyIG5nYkFjY29yZGlvbkhlYWRlcj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gbmdiQWNjb3JkaW9uQnV0dG9uPnt7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCdDbXM6OicraXRlbS5uYW1lKSB8IGFicExvY2FsaXphdGlvbiB9fTwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gyPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IG5nYkFjY29yZGlvbkNvbGxhcHNlPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBuZ2JBY2NvcmRpb25Cb2R5PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHVsIGNsYXNzPVwibGlzdC1ncm91cFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0Zvcj1cImxldCBlbCBvZiBpdGVtLmZpZWxkczsgbGV0IGlpID0gaW5kZXhcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGkgZHJhZ2dhYmxlPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChkcmFnc3RhcnQpPVwiZnJvbURhdGFTb3VyY2VEcmFnU3RhcnQoZWwsaWksaSlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImxpc3QtZ3JvdXAtaXRlbVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBlbC5kaXNwbGF5TmFtZSB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGk+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC91bD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuXG5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cblxuXG4gICAgICAgIDwhLS0gPC9kaXY+IC0tPlxuICAgIDwvYWJwLXBhZ2U+XG5cbjwvZm9ybT5cbjwhLS0g55So5LqO5Yib5bu657yW6L6RdGFi55qE5qih5oCB5qGGIC0tPlxuPGFicC1tb2RhbCBbKHZpc2libGUpXT1cInZpc2libGVUYWJzT3BlblwiIFtidXN5XT1cIm1vZGFsQnVzeVwiICh2aXNpYmxlQ2hhbmdlKT1cIlZpc2libGVUYWJzQ2hhbmdlKCRldmVudClcIj5cbiAgICA8bmctdGVtcGxhdGUgI2FicEhlYWRlcj5cbiAgICAgICAgPGgzPnt7IGVkaXRGaWVsZFRhYnNTZWxlY3QgPyAoJ0FicFVpOjpFZGl0JyB8IGFicExvY2FsaXphdGlvbik6KCdDbXM6Ok5ldycgfCBhYnBMb2NhbGl6YXRpb24pfX08L2gzPlxuICAgIDwvbmctdGVtcGxhdGU+XG4gICAgPG5nLXRlbXBsYXRlICNhYnBCb2R5PlxuICAgICAgICA8bmctdGVtcGxhdGUgI2xvYWRlclJlZj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LWNlbnRlclwiPjxpIGNsYXNzPVwiZmEgZmEtcHVsc2UgZmEtc3Bpbm5lclwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvaT48L2Rpdj5cbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImVkaXRGaWVsZFRhYnNGcm9tOyBlbHNlIGxvYWRlclJlZlwiPlxuICAgICAgICAgICAgPGZvcm0gY2xhc3M9XCJzaXRlcy1tb2RhbC1mb3JtXCIgW2Zvcm1Hcm91cF09XCJlZGl0RmllbGRUYWJzRnJvbVwiIFtjbGFzc109XCJ7J3dhcy12YWxpZGF0ZWQnOmZvcm1WYWxpZGF0aW9ufVwiXG4gICAgICAgICAgICAgICAgKHN1Ym1pdCk9XCJlZGl0RmllbGRUYWJzU2F2ZSgpXCI+XG4gICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwic3VibWl0XCIgI2VkaXRGaWVsZFRhYnNNb2RhbFN1Ym1pdEJ0biBzdHlsZT1cImRpc3BsYXk6IG5vbmVcIj48L2J1dHRvbj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWItM1wiPlxuICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJmb3JtLWxhYmVsXCI+e3snQ21zOjpOYW1lJyB8IGFicExvY2FsaXphdGlvbn19PC9sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiBmb3JtQ29udHJvbE5hbWU9XCJuYW1lXCIgcGxhY2Vob2xkZXI9XCJcIiAvPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9mb3JtPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8L25nLXRlbXBsYXRlPlxuICAgIDxuZy10ZW1wbGF0ZSAjYWJwRm9vdGVyPlxuICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4tc2Vjb25kYXJ5XCIgYWJwQ2xvc2U+e3snQWJwVWk6OkNsb3NlJyB8IGFicExvY2FsaXphdGlvbn19PC9idXR0b24+XG4gICAgICAgIDxhYnAtYnV0dG9uIGljb25DbGFzcz1cImZhIGZhLWNoZWNrXCIgKGNsaWNrKT1cImVkaXRGaWVsZFRhYnNNb2RhbFN1Ym1pdEJ0bi5uYXRpdmVFbGVtZW50LmNsaWNrKClcIj57eydBYnBVaTo6U2F2ZSdcbiAgICAgICAgICAgIHwgYWJwTG9jYWxpemF0aW9ufX08L2FicC1idXR0b24+XG4gICAgPC9uZy10ZW1wbGF0ZT5cbjwvYWJwLW1vZGFsPlxuXG48IS0tIOeUqOS6juS/ruaUueWtl+autemFjee9rueahOaooeaAgeahhiAtLT5cbjxhYnAtbW9kYWwgWyh2aXNpYmxlKV09XCJ2aXNpYmxlRWRpdEZpZWxkT3BlblwiIFtidXN5XT1cIm1vZGFsQnVzeVwiICh2aXNpYmxlQ2hhbmdlKT1cIlZpc2libGVFZGl0RmllbGRDaGFuZ2UoJGV2ZW50KVwiPlxuICAgIDxuZy10ZW1wbGF0ZSAjYWJwSGVhZGVyPlxuICAgICAgICA8aDM+e3snQWJwVWk6OkVkaXQnIHwgYWJwTG9jYWxpemF0aW9ufX08L2gzPlxuICAgIDwvbmctdGVtcGxhdGU+XG4gICAgPG5nLXRlbXBsYXRlICNhYnBCb2R5PlxuICAgICAgICA8bmctdGVtcGxhdGUgI2xvYWRlclJlZj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LWNlbnRlclwiPjxpIGNsYXNzPVwiZmEgZmEtcHVsc2UgZmEtc3Bpbm5lclwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvaT48L2Rpdj5cbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImVkaXRGaWVsZEZyb207IGVsc2UgbG9hZGVyUmVmXCI+XG4gICAgICAgICAgICA8Zm9ybSBjbGFzcz1cInNpdGVzLW1vZGFsLWZvcm1cIiBbZm9ybUdyb3VwXT1cImVkaXRGaWVsZEZyb21cIiAoc3VibWl0KT1cImVkaXRGaWVsZFNhdmUoKVwiPlxuICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cInN1Ym1pdFwiICNlZGl0RmllbGRNb2RhbFN1Ym1pdEJ0biBzdHlsZT1cImRpc3BsYXk6IG5vbmVcIj48L2J1dHRvbj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWItM1wiPlxuICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJmb3JtLWxhYmVsXCI+e3snQ21zOjpEaXNwbGF5TmFtZScgfCBhYnBMb2NhbGl6YXRpb259fTwvbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIGNsYXNzPVwiZm9ybS1jb250cm9sXCIgZm9ybUNvbnRyb2xOYW1lPVwiZGlzcGxheU5hbWVcIiBwbGFjZWhvbGRlcj1cIlwiIC8+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPCEtLSA8ZGl2IGNsYXNzPVwibWItM1wiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1jaGVjayBmb3JtLWNoZWNrLWlubGluZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IGNsYXNzPVwiZm9ybS1jaGVjay1pbnB1dFwiIHR5cGU9XCJjaGVja2JveFwiIHZhbHVlPVwidHJ1ZVwiIGZvcm1Db250cm9sTmFtZT1cInJlcXVpcmVkXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZD1cInJlcXVpcmVkXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImZvcm0tY2hlY2stbGFiZWxcIiBmb3I9XCJyZXF1aXJlZFwiPiB7eydDbXM6OlJlcXVpcmVkJyB8IGFicExvY2FsaXphdGlvbn19IDwvbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PiAtLT5cbiAgICAgICAgICAgICAgICA8IS0tIEBpZihpc1Nob3dJbkxpc3Qpe1xuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtYi0zXCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWNoZWNrIGZvcm0tY2hlY2staW5saW5lXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJmb3JtLWNoZWNrLWlucHV0XCIgdHlwZT1cImNoZWNrYm94XCIgdmFsdWU9XCJ0cnVlXCIgZm9ybUNvbnRyb2xOYW1lPVwic2hvd0luTGlzdFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQ9XCJzaG93SW5MaXN0XCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImZvcm0tY2hlY2stbGFiZWxcIiBmb3I9XCJzaG93SW5MaXN0XCI+IHt7J0Ntczo6U2hvd0luTGlzdCcgfCBhYnBMb2NhbGl6YXRpb259fVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIEBpZihpc0VuYWJsZVNlYXJjaCl7XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1iLTNcIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tY2hlY2sgZm9ybS1jaGVjay1pbmxpbmVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBjbGFzcz1cImZvcm0tY2hlY2staW5wdXRcIiB0eXBlPVwiY2hlY2tib3hcIiB2YWx1ZT1cInRydWVcIiBmb3JtQ29udHJvbE5hbWU9XCJlbmFibGVTZWFyY2hcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkPVwiZW5hYmxlU2VhcmNoXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImZvcm0tY2hlY2stbGFiZWxcIiBmb3I9XCJlbmFibGVTZWFyY2hcIj4ge3snQ21zOjpFbmFibGVTZWFyY2gnIHwgYWJwTG9jYWxpemF0aW9ufX1cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIH0gLS0+XG4gICAgICAgICAgICA8L2Zvcm0+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgIDwvbmctdGVtcGxhdGU+XG4gICAgPG5nLXRlbXBsYXRlICNhYnBGb290ZXI+XG4gICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGJ0bi1zZWNvbmRhcnlcIiBhYnBDbG9zZT57eydBYnBVaTo6Q2xvc2UnIHwgYWJwTG9jYWxpemF0aW9ufX08L2J1dHRvbj5cbiAgICAgICAgPGFicC1idXR0b24gaWNvbkNsYXNzPVwiZmEgZmEtY2hlY2tcIiBbZGlzYWJsZWRdPVwiIWVkaXRGaWVsZEZyb20udmFsaWRcIlxuICAgICAgICAgICAgKGNsaWNrKT1cImVkaXRGaWVsZE1vZGFsU3VibWl0QnRuLm5hdGl2ZUVsZW1lbnQuY2xpY2soKVwiPnt7J0FicFVpOjpTYXZlJyB8IGFicExvY2FsaXphdGlvbn19PC9hYnAtYnV0dG9uPlxuICAgIDwvbmctdGVtcGxhdGU+XG48L2FicC1tb2RhbD4iXX0=
|