tango-app-ui-manage-settings 3.7.6 → 3.7.7

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.
@@ -1,4 +1,4 @@
1
- import { Component } from '@angular/core';
1
+ import { Component, ViewChild } from '@angular/core';
2
2
  import { Validators } from '@angular/forms';
3
3
  import { Subject, takeUntil } from 'rxjs';
4
4
  import * as i0 from "@angular/core";
@@ -21,6 +21,7 @@ export class CreateSingleZoneComponent {
21
21
  isEditMode = false;
22
22
  zoneData = null;
23
23
  destroy$ = new Subject();
24
+ groupDropdown;
24
25
  constructor(fb, activeModal, clientApiService, toastService, cdr) {
25
26
  this.fb = fb;
26
27
  this.activeModal = activeModal;
@@ -31,12 +32,12 @@ export class CreateSingleZoneComponent {
31
32
  zoneName: ['', [
32
33
  Validators.required,
33
34
  Validators.minLength(1),
34
- Validators.pattern(/^(?!\s*$)[a-zA-Z0-9\s\/]*$/)
35
+ // Validators.pattern(/^(?!\s*$)[a-zA-Z0-9_\s\/-]*$/)
35
36
  ]],
36
37
  selectedGroup: [''],
37
38
  groupName: ['', [
38
39
  Validators.minLength(1),
39
- Validators.pattern(/^(?!\s*$)[a-zA-Z0-9\s\/]*$/)
40
+ // Validators.pattern(/^(?!\s*$)[a-zA-Z0-9_\s\/-]*$/)
40
41
  ]]
41
42
  });
42
43
  }
@@ -64,7 +65,7 @@ export class CreateSingleZoneComponent {
64
65
  groupNameCtrl?.setValidators([
65
66
  Validators.required,
66
67
  Validators.minLength(1),
67
- Validators.pattern(/^(?!\s*$)[a-zA-Z0-9\s\/]*$/)
68
+ // Validators.pattern(/^(?!\s*$)[a-zA-Z0-9_\s\/-]*$/)
68
69
  ]);
69
70
  groupNameCtrl?.reset('', { emitEvent: false });
70
71
  }
@@ -138,12 +139,12 @@ export class CreateSingleZoneComponent {
138
139
  }
139
140
  const formValue = this.createZoneForm.value;
140
141
  // Validate zoneName & group pattern
141
- let pattern = /^[a-zA-Z0-9\s\/]*$/;
142
- if (!formValue.zoneName.match(pattern) ||
143
- (formValue.selectedGroup === 'addNew' && !formValue.groupName.match(pattern))) {
144
- this.toastService.getErrorToast('Special characters are not allowed');
145
- return;
146
- }
142
+ // let pattern = /^[a-zA-Z0-9_\s\/-]*$/;
143
+ // if (!formValue.zoneName.match(pattern) ||
144
+ // (formValue.selectedGroup === 'addNew' && !formValue.groupName.match(pattern))) {
145
+ // this.toastService.getErrorToast('Special characters are not allowed');
146
+ // return;
147
+ // }
147
148
  let payload = {
148
149
  clientId: this.clientId,
149
150
  productName: 'tangoZone'
@@ -235,11 +236,39 @@ export class CreateSingleZoneComponent {
235
236
  const rgbBorderColor = `rgb(${parseInt(red) + 10}, ${parseInt(green) + 10}, ${parseInt(blue) + 10})`;
236
237
  return { rgbColor, rgbBorderColor };
237
238
  }
239
+ // Method to get display text for selected group
240
+ getSelectedGroupDisplay() {
241
+ const selectedValue = this.createZoneForm.get('selectedGroup')?.value;
242
+ if (!selectedValue) {
243
+ return 'Select';
244
+ }
245
+ if (selectedValue === 'addNew') {
246
+ return '+ Add New';
247
+ }
248
+ const selectedGroup = this.groupList.find(g => g.groupName === selectedValue);
249
+ return selectedGroup ? selectedGroup.groupName : 'Select';
250
+ }
251
+ // Method to handle group selection
252
+ selectGroup(value, event) {
253
+ if (event) {
254
+ event.preventDefault();
255
+ event.stopPropagation();
256
+ }
257
+ this.createZoneForm.get('selectedGroup')?.setValue(value);
258
+ this.createZoneForm.get('selectedGroup')?.markAsTouched();
259
+ // Close dropdown after selection
260
+ if (this.groupDropdown) {
261
+ this.groupDropdown.close();
262
+ }
263
+ }
238
264
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: CreateSingleZoneComponent, deps: [{ token: i1.FormBuilder }, { token: i2.NgbActiveModal }, { token: i3.ClientApiService }, { token: i4.ToastService }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
239
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: CreateSingleZoneComponent, selector: "lib-create-single-zone", ngImport: i0, template: "<div class=\"create-zone-modal\">\r\n <form [formGroup]=\"createZoneForm\" autocomplete=\"off\">\r\n <!-- Header -->\r\n <div class=\"modal-header-custom mb-4\">\r\n <div class=\"d-flex align-items-center\">\r\n <div class=\"header-icon me-3\">\r\n <svg *ngIf=\"!isEditMode\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <circle cx=\"12\" cy=\"12\" r=\"10\" fill=\"#00A3FF\" />\r\n <path d=\"M12 8V16M8 12H16\" stroke=\"white\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n <svg *ngIf=\"isEditMode\" width=\"56\" height=\"56\" viewBox=\"0 0 56 56\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <rect x=\"4\" y=\"4\" width=\"48\" height=\"48\" rx=\"24\" fill=\"#DAF1FF\"/>\r\n <rect x=\"4\" y=\"4\" width=\"48\" height=\"48\" rx=\"24\" stroke=\"#EAF8FF\" stroke-width=\"8\"/>\r\n <path d=\"M27 20.0002H20C19.4696 20.0002 18.9609 20.2109 18.5858 20.586C18.2107 20.9611 18 21.4698 18 22.0002V36.0002C18 36.5307 18.2107 37.0394 18.5858 37.4144C18.9609 37.7895 19.4696 38.0002 20 38.0002H34C34.5304 38.0002 35.0391 37.7895 35.4142 37.4144C35.7893 37.0394 36 36.5307 36 36.0002V29.0002M34.5 18.5002C34.8978 18.1024 35.4374 17.8789 36 17.8789C36.5626 17.8789 37.1022 18.1024 37.5 18.5002C37.8978 18.8981 38.1213 19.4376 38.1213 20.0002C38.1213 20.5628 37.8978 21.1024 37.5 21.5002L28 31.0002L24 32.0002L25 28.0002L34.5 18.5002Z\" stroke=\"#00A3FF\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n </svg> \r\n </div>\r\n <h4 class=\"modal-title mb-0\">{{ isEditMode ? 'Edit' : 'Create' }}</h4>\r\n </div>\r\n </div>\r\n\r\n <!-- Zone Name Input -->\r\n <div class=\"form-group mb-4\">\r\n <!-- <span class=\"text-danger\">*</span> -->\r\n <label for=\"zoneName\" class=\"form-label\">Zone Name</label>\r\n <input \r\n type=\"text\" \r\n class=\"form-control\" \r\n id=\"zoneName\"\r\n formControlName=\"zoneName\"\r\n placeholder=\"Enter zone name\"\r\n autocomplete=\"off\"\r\n [class.is-invalid]=\"createZoneForm.get('zoneName')?.invalid && createZoneForm.get('zoneName')?.touched && !createZoneForm.get('zoneName')?.pristine\">\r\n <div class=\"invalid-feedback\" *ngIf=\"createZoneForm.get('zoneName')?.invalid && createZoneForm.get('zoneName')?.touched && !createZoneForm.get('zoneName')?.pristine\">\r\n <span *ngIf=\"createZoneForm.get('zoneName')?.errors?.['required']\">Zone name is required</span>\r\n <span *ngIf=\"createZoneForm.get('zoneName')?.errors?.['minlength']\">Zone name must be at least 1 character</span>\r\n <span *ngIf=\"createZoneForm.get('zoneName')?.errors?.['pattern']\">\r\n Special characters are not allowed\r\n </span>\r\n </div>\r\n </div>\r\n\r\n <!-- Add to Group Dropdown -->\r\n <div class=\"form-group mb-4\">\r\n <label for=\"selectedGroup\" class=\"form-label\">Add to Group (Optional)</label>\r\n <select \r\n class=\"form-select\" \r\n id=\"selectedGroup\"\r\n formControlName=\"selectedGroup\">\r\n <option value=\"\">Select</option>\r\n <option value=\"addNew\" *ngIf=\"!isEditMode\">+ Add New</option>\r\n <option *ngFor=\"let group of groupList\" [value]=\"group.groupName\">\r\n {{ group.groupName }}\r\n </option>\r\n </select>\r\n </div>\r\n\r\n <!-- Enter Group Name Input (shown when Add New is selected) -->\r\n <div class=\"form-group mb-4\" *ngIf=\"showGroupNameInput\">\r\n <!-- <span class=\"text-danger\">*</span> -->\r\n <label for=\"groupName\" class=\"form-label\">Enter Group Name</label>\r\n <input \r\n type=\"text\" \r\n class=\"form-control\" \r\n id=\"groupName\"\r\n formControlName=\"groupName\"\r\n placeholder=\"Enter group name\"\r\n autocomplete=\"off\"\r\n [class.is-invalid]=\"createZoneForm.get('groupName')?.invalid && createZoneForm.get('groupName')?.touched && !createZoneForm.get('groupName')?.pristine\">\r\n <div class=\"invalid-feedback\" *ngIf=\"createZoneForm.get('groupName')?.invalid && createZoneForm.get('groupName')?.touched && !createZoneForm.get('groupName')?.pristine\">\r\n <span *ngIf=\"createZoneForm.get('groupName')?.errors?.['required']\">Group name is required</span>\r\n <span *ngIf=\"createZoneForm.get('groupName')?.errors?.['minlength']\">Group name must be at least 3 characters</span>\r\n <span *ngIf=\"createZoneForm.get('groupName')?.errors?.['pattern']\">\r\n Special characters are not allowed\r\n </span>\r\n </div>\r\n </div>\r\n\r\n <!-- Action Buttons -->\r\n <div class=\"modal-footer-custom mt-4\">\r\n <div class=\"d-flex gap-3 justify-content-end\">\r\n <button type=\"button\" class=\"btn btn-outline\" (click)=\"onCancel()\">Cancel</button>\r\n <button \r\n type=\"button\" \r\n class=\"btn btn-primary\" \r\n (click)=\"onSave()\"\r\n [disabled]=\"createZoneForm.invalid\">\r\n {{ isEditMode ? 'Update' : 'Create' }}\r\n </button>\r\n </div>\r\n </div>\r\n </form>\r\n</div>\r\n\r\n", styles: [".create-zone-modal{padding:24px}.modal-header-custom .header-icon{width:40px;height:40px;border-radius:50%;background-color:#daf1ff;display:flex;align-items:center;justify-content:center;flex-shrink:0}.modal-header-custom .modal-title{font-size:18px;font-weight:600;color:#101828;line-height:28px}.form-group .form-label{font-size:14px;font-weight:500;color:#344054;margin-bottom:8px;display:block}.form-group .form-label .text-danger{color:#f04438;margin-left:2px}.form-group .form-control,.form-group .form-select{border:1px solid #D0D5DD;border-radius:8px;padding:10px 14px;font-size:14px;color:#344054;height:44px;transition:all .2s ease}.form-group .form-control:focus,.form-group .form-select:focus{border-color:#009bf3;box-shadow:0 0 0 3px #009bf31a;outline:none}.form-group .form-control.is-invalid,.form-group .form-select.is-invalid{border-color:#f04438}.form-group .form-control.is-invalid:focus,.form-group .form-select.is-invalid:focus{border-color:#f04438;box-shadow:0 0 0 3px #f044381a}.form-group .form-control::placeholder,.form-group .form-select::placeholder{color:#98a2b3}.form-group .form-select{background-image:url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%23343a40' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M2 5l6 6 6-6'/%3e%3c/svg%3e\");background-repeat:no-repeat;background-position:right 12px center;background-size:16px 12px;padding-right:40px;appearance:none;cursor:pointer}.form-group .invalid-feedback{display:block;width:100%;margin-top:6px;font-size:12px;color:#f04438}.modal-footer-custom{padding-top:16px;border-top:1px solid #EAECF0}.modal-footer-custom .btn{min-width:100px;height:44px;font-size:14px;font-weight:500;border-radius:8px;padding:10px 18px;transition:all .2s ease}.modal-footer-custom .btn.btn-outline{border:1px solid #D0D5DD;background-color:#fff;color:#344054}.modal-footer-custom .btn.btn-outline:hover{background-color:#f9fafb;border-color:#d0d5dd}.modal-footer-custom .btn.btn-primary{background-color:#009bf3;border-color:#009bf3;color:#fff}.modal-footer-custom .btn.btn-primary:hover:not(:disabled){background-color:#0085d1;border-color:#0085d1}.modal-footer-custom .btn.btn-primary:disabled{opacity:.6;cursor:not-allowed}\n"], dependencies: [{ kind: "directive", type: i5.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i1.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i1.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: i1.SelectControlValueAccessor, selector: "select:not([multiple])[formControlName],select:not([multiple])[formControl],select:not([multiple])[ngModel]", inputs: ["compareWith"] }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }] });
265
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: CreateSingleZoneComponent, selector: "lib-create-single-zone", viewQueries: [{ propertyName: "groupDropdown", first: true, predicate: ["groupDropdown"], descendants: true }], ngImport: i0, template: "<div class=\"create-zone-modal\">\r\n <form [formGroup]=\"createZoneForm\" autocomplete=\"off\">\r\n <!-- Header -->\r\n <div class=\"modal-header-custom mb-4\">\r\n <div class=\"d-flex align-items-center\">\r\n <div class=\"header-icon me-3\">\r\n <svg *ngIf=\"!isEditMode\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <circle cx=\"12\" cy=\"12\" r=\"10\" fill=\"#00A3FF\" />\r\n <path d=\"M12 8V16M8 12H16\" stroke=\"white\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n <svg *ngIf=\"isEditMode\" width=\"56\" height=\"56\" viewBox=\"0 0 56 56\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <rect x=\"4\" y=\"4\" width=\"48\" height=\"48\" rx=\"24\" fill=\"#DAF1FF\"/>\r\n <rect x=\"4\" y=\"4\" width=\"48\" height=\"48\" rx=\"24\" stroke=\"#EAF8FF\" stroke-width=\"8\"/>\r\n <path d=\"M27 20.0002H20C19.4696 20.0002 18.9609 20.2109 18.5858 20.586C18.2107 20.9611 18 21.4698 18 22.0002V36.0002C18 36.5307 18.2107 37.0394 18.5858 37.4144C18.9609 37.7895 19.4696 38.0002 20 38.0002H34C34.5304 38.0002 35.0391 37.7895 35.4142 37.4144C35.7893 37.0394 36 36.5307 36 36.0002V29.0002M34.5 18.5002C34.8978 18.1024 35.4374 17.8789 36 17.8789C36.5626 17.8789 37.1022 18.1024 37.5 18.5002C37.8978 18.8981 38.1213 19.4376 38.1213 20.0002C38.1213 20.5628 37.8978 21.1024 37.5 21.5002L28 31.0002L24 32.0002L25 28.0002L34.5 18.5002Z\" stroke=\"#00A3FF\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n </svg> \r\n </div>\r\n <h4 class=\"modal-title mb-0\">{{ isEditMode ? 'Edit' : 'Create' }}</h4>\r\n </div>\r\n </div>\r\n\r\n <!-- Zone Name Input -->\r\n <div class=\"form-group mb-4\">\r\n <!-- <span class=\"text-danger\">*</span> -->\r\n <label for=\"zoneName\" class=\"form-label\">Zone Name</label>\r\n <input \r\n type=\"text\" \r\n class=\"form-control\" \r\n id=\"zoneName\"\r\n formControlName=\"zoneName\"\r\n placeholder=\"Enter zone name\"\r\n autocomplete=\"off\"\r\n [class.is-invalid]=\"createZoneForm.get('zoneName')?.invalid && createZoneForm.get('zoneName')?.touched && !createZoneForm.get('zoneName')?.pristine\">\r\n <div class=\"invalid-feedback\" *ngIf=\"createZoneForm.get('zoneName')?.invalid && createZoneForm.get('zoneName')?.touched && !createZoneForm.get('zoneName')?.pristine\">\r\n <span *ngIf=\"createZoneForm.get('zoneName')?.errors?.['required']\">Zone name is required</span>\r\n <span *ngIf=\"createZoneForm.get('zoneName')?.errors?.['minlength']\">Zone name must be at least 1 character</span>\r\n <span *ngIf=\"createZoneForm.get('zoneName')?.errors?.['pattern']\">\r\n Special characters are not allowed\r\n </span>\r\n </div>\r\n </div>\r\n\r\n <!-- Add to Group Dropdown -->\r\n <div class=\"form-group mb-4\">\r\n <label for=\"selectedGroup\" class=\"form-label\">Add to Group (Optional)</label>\r\n <div class=\"custom-select-wrapper\" ngbDropdown #groupDropdown=\"ngbDropdown\">\r\n <button \r\n class=\"form-select custom-select-button\" \r\n type=\"button\"\r\n id=\"selectedGroup\"\r\n ngbDropdownToggle\r\n [class.is-invalid]=\"createZoneForm.get('selectedGroup')?.invalid && createZoneForm.get('selectedGroup')?.touched && !createZoneForm.get('selectedGroup')?.pristine\">\r\n {{ getSelectedGroupDisplay() }}\r\n </button>\r\n <ul class=\"dropdown-menu custom-dropdown-menu\" ngbDropdownMenu>\r\n <li>\r\n <a class=\"dropdown-item\" \r\n (click)=\"selectGroup('', $event)\"\r\n [class.active]=\"!createZoneForm.get('selectedGroup')?.value\">\r\n Select\r\n </a>\r\n </li>\r\n <li *ngIf=\"!isEditMode\">\r\n <a class=\"dropdown-item\" \r\n (click)=\"selectGroup('addNew', $event)\"\r\n [class.active]=\"createZoneForm.get('selectedGroup')?.value === 'addNew'\">\r\n + Add New\r\n </a>\r\n </li>\r\n <li *ngFor=\"let group of groupList\">\r\n <a class=\"dropdown-item\" \r\n (click)=\"selectGroup(group.groupName, $event)\"\r\n [class.active]=\"createZoneForm.get('selectedGroup')?.value === group.groupName\">\r\n {{ group.groupName }}\r\n </a>\r\n </li>\r\n </ul>\r\n </div>\r\n <input \r\n type=\"hidden\" \r\n formControlName=\"selectedGroup\"\r\n id=\"selectedGroupHidden\">\r\n </div>\r\n\r\n <!-- Enter Group Name Input (shown when Add New is selected) -->\r\n <div class=\"form-group mb-4\" *ngIf=\"showGroupNameInput\">\r\n <!-- <span class=\"text-danger\">*</span> -->\r\n <label for=\"groupName\" class=\"form-label\">Enter Group Name</label>\r\n <input \r\n type=\"text\" \r\n class=\"form-control\" \r\n id=\"groupName\"\r\n formControlName=\"groupName\"\r\n placeholder=\"Enter group name\"\r\n autocomplete=\"off\"\r\n [class.is-invalid]=\"createZoneForm.get('groupName')?.invalid && createZoneForm.get('groupName')?.touched && !createZoneForm.get('groupName')?.pristine\">\r\n <div class=\"invalid-feedback\" *ngIf=\"createZoneForm.get('groupName')?.invalid && createZoneForm.get('groupName')?.touched && !createZoneForm.get('groupName')?.pristine\">\r\n <span *ngIf=\"createZoneForm.get('groupName')?.errors?.['required']\">Group name is required</span>\r\n <span *ngIf=\"createZoneForm.get('groupName')?.errors?.['minlength']\">Group name must be at least 3 characters</span>\r\n <span *ngIf=\"createZoneForm.get('groupName')?.errors?.['pattern']\">\r\n Special characters are not allowed\r\n </span>\r\n </div>\r\n </div>\r\n\r\n <!-- Action Buttons -->\r\n <div class=\"modal-footer-custom mt-4\">\r\n <div class=\"d-flex gap-3 justify-content-end\">\r\n <button type=\"button\" class=\"btn btn-outline\" (click)=\"onCancel()\">Cancel</button>\r\n <button \r\n type=\"button\" \r\n class=\"btn btn-primary\" \r\n (click)=\"onSave()\"\r\n [disabled]=\"createZoneForm.invalid\">\r\n {{ isEditMode ? 'Update' : 'Create' }}\r\n </button>\r\n </div>\r\n </div>\r\n </form>\r\n</div>\r\n\r\n", styles: [".create-zone-modal{padding:24px}.modal-header-custom .header-icon{width:40px;height:40px;border-radius:50%;background-color:#daf1ff;display:flex;align-items:center;justify-content:center;flex-shrink:0}.modal-header-custom .modal-title{font-size:18px;font-weight:600;color:#101828;line-height:28px}.form-group .form-label{font-size:14px;font-weight:500;color:#344054;margin-bottom:8px;display:block}.form-group .form-label .text-danger{color:#f04438;margin-left:2px}.form-group .form-control,.form-group .form-select{border:1px solid #D0D5DD;border-radius:8px;padding:10px 14px;font-size:14px;color:#344054;height:44px;transition:all .2s ease}.form-group .form-control:focus,.form-group .form-select:focus{border-color:#009bf3;box-shadow:0 0 0 3px #009bf31a;outline:none}.form-group .form-control.is-invalid,.form-group .form-select.is-invalid{border-color:#f04438}.form-group .form-control.is-invalid:focus,.form-group .form-select.is-invalid:focus{border-color:#f04438;box-shadow:0 0 0 3px #f044381a}.form-group .form-control::placeholder,.form-group .form-select::placeholder{color:#98a2b3}.form-group .form-select{background-image:url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%23343a40' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M2 5l6 6 6-6'/%3e%3c/svg%3e\");background-repeat:no-repeat;background-position:right 12px center;background-size:16px 12px;padding-right:40px;appearance:none;cursor:pointer}.form-group .custom-select-wrapper{position:relative;width:100%}.form-group .custom-select-wrapper .custom-select-button{text-align:left;width:100%;background-image:url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%23343a40' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M2 5l6 6 6-6'/%3e%3c/svg%3e\");background-repeat:no-repeat;background-position:right 12px center;background-size:16px 12px;padding-right:40px;cursor:pointer}.form-group .custom-select-wrapper .custom-dropdown-menu{max-height:228px;overflow-y:auto;width:100%;min-width:100%;margin-top:4px;border:1px solid #D0D5DD;border-radius:8px;box-shadow:0 4px 6px -1px #0000001a,0 2px 4px -1px #0000000f;padding:4px 0}.form-group .custom-select-wrapper .custom-dropdown-menu .dropdown-item{padding:10px 14px;font-size:14px;font-weight:500;color:#344054;cursor:pointer;transition:all .2s ease;min-height:44px;display:flex;align-items:center}.form-group .custom-select-wrapper .custom-dropdown-menu .dropdown-item:hover{background-color:#f9fafb;color:#344054}.form-group .invalid-feedback{display:block;width:100%;margin-top:6px;font-size:12px;color:#f04438}.modal-footer-custom{padding-top:16px;border-top:1px solid #EAECF0}.modal-footer-custom .btn{min-width:100px;height:44px;font-size:14px;font-weight:500;border-radius:8px;padding:10px 18px;transition:all .2s ease}.modal-footer-custom .btn.btn-outline{border:1px solid #D0D5DD;background-color:#fff;color:#344054}.modal-footer-custom .btn.btn-outline:hover{background-color:#f9fafb;border-color:#d0d5dd}.modal-footer-custom .btn.btn-primary{background-color:#009bf3;border-color:#009bf3;color:#fff}.modal-footer-custom .btn.btn-primary:hover:not(:disabled){background-color:#0085d1;border-color:#0085d1}.modal-footer-custom .btn.btn-primary:disabled{opacity:.6;cursor:not-allowed}\n"], dependencies: [{ kind: "directive", type: i5.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.NgbDropdown, selector: "[ngbDropdown]", inputs: ["autoClose", "dropdownClass", "open", "placement", "popperOptions", "container", "display"], outputs: ["openChange"], exportAs: ["ngbDropdown"] }, { kind: "directive", type: i2.NgbDropdownToggle, selector: "[ngbDropdownToggle]" }, { kind: "directive", type: i2.NgbDropdownMenu, selector: "[ngbDropdownMenu]" }, { kind: "directive", type: i1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1.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: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }] });
240
266
  }
241
267
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: CreateSingleZoneComponent, decorators: [{
242
268
  type: Component,
243
- args: [{ selector: 'lib-create-single-zone', template: "<div class=\"create-zone-modal\">\r\n <form [formGroup]=\"createZoneForm\" autocomplete=\"off\">\r\n <!-- Header -->\r\n <div class=\"modal-header-custom mb-4\">\r\n <div class=\"d-flex align-items-center\">\r\n <div class=\"header-icon me-3\">\r\n <svg *ngIf=\"!isEditMode\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <circle cx=\"12\" cy=\"12\" r=\"10\" fill=\"#00A3FF\" />\r\n <path d=\"M12 8V16M8 12H16\" stroke=\"white\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n <svg *ngIf=\"isEditMode\" width=\"56\" height=\"56\" viewBox=\"0 0 56 56\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <rect x=\"4\" y=\"4\" width=\"48\" height=\"48\" rx=\"24\" fill=\"#DAF1FF\"/>\r\n <rect x=\"4\" y=\"4\" width=\"48\" height=\"48\" rx=\"24\" stroke=\"#EAF8FF\" stroke-width=\"8\"/>\r\n <path d=\"M27 20.0002H20C19.4696 20.0002 18.9609 20.2109 18.5858 20.586C18.2107 20.9611 18 21.4698 18 22.0002V36.0002C18 36.5307 18.2107 37.0394 18.5858 37.4144C18.9609 37.7895 19.4696 38.0002 20 38.0002H34C34.5304 38.0002 35.0391 37.7895 35.4142 37.4144C35.7893 37.0394 36 36.5307 36 36.0002V29.0002M34.5 18.5002C34.8978 18.1024 35.4374 17.8789 36 17.8789C36.5626 17.8789 37.1022 18.1024 37.5 18.5002C37.8978 18.8981 38.1213 19.4376 38.1213 20.0002C38.1213 20.5628 37.8978 21.1024 37.5 21.5002L28 31.0002L24 32.0002L25 28.0002L34.5 18.5002Z\" stroke=\"#00A3FF\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n </svg> \r\n </div>\r\n <h4 class=\"modal-title mb-0\">{{ isEditMode ? 'Edit' : 'Create' }}</h4>\r\n </div>\r\n </div>\r\n\r\n <!-- Zone Name Input -->\r\n <div class=\"form-group mb-4\">\r\n <!-- <span class=\"text-danger\">*</span> -->\r\n <label for=\"zoneName\" class=\"form-label\">Zone Name</label>\r\n <input \r\n type=\"text\" \r\n class=\"form-control\" \r\n id=\"zoneName\"\r\n formControlName=\"zoneName\"\r\n placeholder=\"Enter zone name\"\r\n autocomplete=\"off\"\r\n [class.is-invalid]=\"createZoneForm.get('zoneName')?.invalid && createZoneForm.get('zoneName')?.touched && !createZoneForm.get('zoneName')?.pristine\">\r\n <div class=\"invalid-feedback\" *ngIf=\"createZoneForm.get('zoneName')?.invalid && createZoneForm.get('zoneName')?.touched && !createZoneForm.get('zoneName')?.pristine\">\r\n <span *ngIf=\"createZoneForm.get('zoneName')?.errors?.['required']\">Zone name is required</span>\r\n <span *ngIf=\"createZoneForm.get('zoneName')?.errors?.['minlength']\">Zone name must be at least 1 character</span>\r\n <span *ngIf=\"createZoneForm.get('zoneName')?.errors?.['pattern']\">\r\n Special characters are not allowed\r\n </span>\r\n </div>\r\n </div>\r\n\r\n <!-- Add to Group Dropdown -->\r\n <div class=\"form-group mb-4\">\r\n <label for=\"selectedGroup\" class=\"form-label\">Add to Group (Optional)</label>\r\n <select \r\n class=\"form-select\" \r\n id=\"selectedGroup\"\r\n formControlName=\"selectedGroup\">\r\n <option value=\"\">Select</option>\r\n <option value=\"addNew\" *ngIf=\"!isEditMode\">+ Add New</option>\r\n <option *ngFor=\"let group of groupList\" [value]=\"group.groupName\">\r\n {{ group.groupName }}\r\n </option>\r\n </select>\r\n </div>\r\n\r\n <!-- Enter Group Name Input (shown when Add New is selected) -->\r\n <div class=\"form-group mb-4\" *ngIf=\"showGroupNameInput\">\r\n <!-- <span class=\"text-danger\">*</span> -->\r\n <label for=\"groupName\" class=\"form-label\">Enter Group Name</label>\r\n <input \r\n type=\"text\" \r\n class=\"form-control\" \r\n id=\"groupName\"\r\n formControlName=\"groupName\"\r\n placeholder=\"Enter group name\"\r\n autocomplete=\"off\"\r\n [class.is-invalid]=\"createZoneForm.get('groupName')?.invalid && createZoneForm.get('groupName')?.touched && !createZoneForm.get('groupName')?.pristine\">\r\n <div class=\"invalid-feedback\" *ngIf=\"createZoneForm.get('groupName')?.invalid && createZoneForm.get('groupName')?.touched && !createZoneForm.get('groupName')?.pristine\">\r\n <span *ngIf=\"createZoneForm.get('groupName')?.errors?.['required']\">Group name is required</span>\r\n <span *ngIf=\"createZoneForm.get('groupName')?.errors?.['minlength']\">Group name must be at least 3 characters</span>\r\n <span *ngIf=\"createZoneForm.get('groupName')?.errors?.['pattern']\">\r\n Special characters are not allowed\r\n </span>\r\n </div>\r\n </div>\r\n\r\n <!-- Action Buttons -->\r\n <div class=\"modal-footer-custom mt-4\">\r\n <div class=\"d-flex gap-3 justify-content-end\">\r\n <button type=\"button\" class=\"btn btn-outline\" (click)=\"onCancel()\">Cancel</button>\r\n <button \r\n type=\"button\" \r\n class=\"btn btn-primary\" \r\n (click)=\"onSave()\"\r\n [disabled]=\"createZoneForm.invalid\">\r\n {{ isEditMode ? 'Update' : 'Create' }}\r\n </button>\r\n </div>\r\n </div>\r\n </form>\r\n</div>\r\n\r\n", styles: [".create-zone-modal{padding:24px}.modal-header-custom .header-icon{width:40px;height:40px;border-radius:50%;background-color:#daf1ff;display:flex;align-items:center;justify-content:center;flex-shrink:0}.modal-header-custom .modal-title{font-size:18px;font-weight:600;color:#101828;line-height:28px}.form-group .form-label{font-size:14px;font-weight:500;color:#344054;margin-bottom:8px;display:block}.form-group .form-label .text-danger{color:#f04438;margin-left:2px}.form-group .form-control,.form-group .form-select{border:1px solid #D0D5DD;border-radius:8px;padding:10px 14px;font-size:14px;color:#344054;height:44px;transition:all .2s ease}.form-group .form-control:focus,.form-group .form-select:focus{border-color:#009bf3;box-shadow:0 0 0 3px #009bf31a;outline:none}.form-group .form-control.is-invalid,.form-group .form-select.is-invalid{border-color:#f04438}.form-group .form-control.is-invalid:focus,.form-group .form-select.is-invalid:focus{border-color:#f04438;box-shadow:0 0 0 3px #f044381a}.form-group .form-control::placeholder,.form-group .form-select::placeholder{color:#98a2b3}.form-group .form-select{background-image:url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%23343a40' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M2 5l6 6 6-6'/%3e%3c/svg%3e\");background-repeat:no-repeat;background-position:right 12px center;background-size:16px 12px;padding-right:40px;appearance:none;cursor:pointer}.form-group .invalid-feedback{display:block;width:100%;margin-top:6px;font-size:12px;color:#f04438}.modal-footer-custom{padding-top:16px;border-top:1px solid #EAECF0}.modal-footer-custom .btn{min-width:100px;height:44px;font-size:14px;font-weight:500;border-radius:8px;padding:10px 18px;transition:all .2s ease}.modal-footer-custom .btn.btn-outline{border:1px solid #D0D5DD;background-color:#fff;color:#344054}.modal-footer-custom .btn.btn-outline:hover{background-color:#f9fafb;border-color:#d0d5dd}.modal-footer-custom .btn.btn-primary{background-color:#009bf3;border-color:#009bf3;color:#fff}.modal-footer-custom .btn.btn-primary:hover:not(:disabled){background-color:#0085d1;border-color:#0085d1}.modal-footer-custom .btn.btn-primary:disabled{opacity:.6;cursor:not-allowed}\n"] }]
244
- }], ctorParameters: () => [{ type: i1.FormBuilder }, { type: i2.NgbActiveModal }, { type: i3.ClientApiService }, { type: i4.ToastService }, { type: i0.ChangeDetectorRef }] });
245
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3JlYXRlLXNpbmdsZS16b25lLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3RhbmdvLW1hbmFnZS1zZXR0aW5ncy9zcmMvbGliL2NvbXBvbmVudHMvY29uZmlndXJhdGlvbnMvem9uZS1jb25maWd1cmF0aW9uL2NyZWF0ZS1zaW5nbGUtem9uZS9jcmVhdGUtc2luZ2xlLXpvbmUuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdGFuZ28tbWFuYWdlLXNldHRpbmdzL3NyYy9saWIvY29tcG9uZW50cy9jb25maWd1cmF0aW9ucy96b25lLWNvbmZpZ3VyYXRpb24vY3JlYXRlLXNpbmdsZS16b25lL2NyZWF0ZS1zaW5nbGUtem9uZS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQXFCLFNBQVMsRUFBcUIsTUFBTSxlQUFlLENBQUM7QUFDaEYsT0FBTyxFQUEwQixVQUFVLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUdwRSxPQUFPLEVBQUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLE1BQU0sQ0FBQzs7Ozs7OztBQVExQyxNQUFNLE9BQU8seUJBQXlCO0lBVzFCO0lBQ0Q7SUFDQztJQUNBO0lBQ0E7SUFkVixjQUFjLENBQVk7SUFDMUIsZUFBZSxHQUFVLEVBQUUsQ0FBQztJQUM1QixTQUFTLEdBQVUsRUFBRSxDQUFDO0lBQ3RCLGtCQUFrQixHQUFZLEtBQUssQ0FBQztJQUNwQyxRQUFRLEdBQVcsRUFBRSxDQUFDO0lBQ3RCLFVBQVUsR0FBWSxLQUFLLENBQUM7SUFDNUIsUUFBUSxHQUFRLElBQUksQ0FBQztJQUNKLFFBQVEsR0FBRyxJQUFJLE9BQU8sRUFBRSxDQUFDO0lBRTFDLFlBQ1UsRUFBZSxFQUNoQixXQUEyQixFQUMxQixnQkFBa0MsRUFDbEMsWUFBMEIsRUFDMUIsR0FBc0I7UUFKdEIs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R0FBRyxRQUFRLEdBQUcsS0FBSyxLQUFLLEtBQUssSUFBSSxRQUFRLENBQUM7UUFDeEQsTUFBTSxjQUFjLEdBQUcsT0FBTyxRQUFRLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxLQUFLLFFBQVEsQ0FBQyxLQUFLLENBQUMsR0FBRyxFQUFFLEtBQUssUUFBUSxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDO1FBQ3JHLE9BQU8sRUFBRSxRQUFRLEVBQUUsY0FBYyxFQUFFLENBQUE7SUFDckMsQ0FBQzt3R0FyUFUseUJBQXlCOzRGQUF6Qix5QkFBeUIsOERDWnRDLG13S0E2RkE7OzRGRGpGYSx5QkFBeUI7a0JBTHJDLFNBQVM7K0JBQ0Usd0JBQXdCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0b3JSZWYsIENvbXBvbmVudCwgT25EZXN0cm95LCBPbkluaXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgRm9ybUJ1aWxkZXIsIEZvcm1Hcm91cCwgVmFsaWRhdG9ycyB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHsgTmdiQWN0aXZlTW9kYWwgfSBmcm9tICdAbmctYm9vdHN0cmFwL25nLWJvb3RzdHJhcCc7XHJcbmltcG9ydCB7IENsaWVudEFwaVNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi8uLi9zZXJ2aWNlcy9jbGllbnQtYXBpLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBTdWJqZWN0LCB0YWtlVW50aWwgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgVG9hc3RTZXJ2aWNlIH0gZnJvbSAndGFuZ28tYXBwLXVpLXNoYXJlZCc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2xpYi1jcmVhdGUtc2luZ2xlLXpvbmUnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9jcmVhdGUtc2luZ2xlLXpvbmUuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsOiAnLi9jcmVhdGUtc2luZ2xlLXpvbmUuY29tcG9uZW50LnNjc3MnXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBDcmVhdGVTaW5nbGVab25lQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xyXG4gIGNyZWF0ZVpvbmVGb3JtOiBGb3JtR3JvdXA7XHJcbiAgem9uZVRhZ2dpbmdMaXN0OiBhbnlbXSA9IFtdO1xyXG4gIGdyb3VwTGlzdDogYW55W10gPSBbXTtcclxuICBzaG93R3JvdXBOYW1lSW5wdXQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBjbGllbnRJZDogc3RyaW5nID0gJyc7XHJcbiAgaXNFZGl0TW9kZTogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHpvbmVEYXRhOiBhbnkgPSBudWxsO1xyXG4gIHByaXZhdGUgcmVhZG9ubHkgZGVzdHJveSQgPSBuZXcgU3ViamVjdCgpO1xyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgZmI6IEZvcm1CdWlsZGVyLFxyXG4gICAgcHVibGljIGFjdGl2ZU1vZGFsOiBOZ2JBY3RpdmVNb2RhbCxcclxuICAgIHByaXZhdGUgY2xpZW50QXBpU2VydmljZTogQ2xpZW50QXBpU2VydmljZSxcclxuICAgIHByaXZhdGUgdG9hc3RTZXJ2aWNlOiBUb2FzdFNlcnZpY2UsXHJcbiAgICBwcml2YXRlIGNkcjogQ2hhbmdlRGV0ZWN0b3JSZWZcclxuICApIHtcclxuICAgIHRoaXMuY3JlYXRlWm9uZUZvcm0gPSB0aGlzLmZiLmdyb3VwKHtcclxuICAgICAgem9uZU5hbWU6IFsnJywgW1xyXG4gICAgICAgIFZhbGlkYXRvcnMucmVxdWlyZWQsXHJcbiAgICAgICAgVmFsaWRhdG9ycy5taW5MZW5ndGgoMSksXHJcbiAgICAgICAgVmFsaWRhdG9ycy5wYXR0ZXJuKC9eKD8hXFxzKiQpW2EtekEtWjAtOVxcc1xcL10qJC8pXHJcbiAgICAgIF1dLFxyXG4gICAgICBzZWxlY3RlZEdyb3VwOiBbJyddLFxyXG4gICAgICBncm91cE5hbWU6IFsnJywgW1xyXG4gICAgICAgIFZhbGlkYXRvcnMubWluTGVuZ3RoKDEpLFxyXG4gICAgICAgIFZhbGlkYXRvcnMucGF0dGVybigvXig/IVxccyokKVthLXpBLVowLTlcXHNcXC9dKiQvKVxyXG4gICAgICBdXVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgIC8vIEluaXRpYWxpemUgLSBncm91cCBuYW1lIGZpZWxkIHNob3VsZCBiZSBoaWRkZW4gaW5pdGlhbGx5XHJcbiAgICB0aGlzLnNob3dHcm91cE5hbWVJbnB1dCA9IGZhbHNlO1xyXG4gICAgLy8gRW5zdXJlIGZvcm0gY29udHJvbHMgYXJlIG1hcmtlZCBhcyB1bnRvdWNoZWQgd2hlbiBtb2RhbCBvcGVuc1xyXG4gICAgdGhpcy5jcmVhdGVab25lRm9ybS5tYXJrQXNVbnRvdWNoZWQoKTtcclxuICAgIHRoaXMuY3JlYXRlWm9uZUZvcm0uZ2V0KCd6b25lTmFtZScpPy5tYXJrQXNVbnRvdWNoZWQoKTtcclxuICAgIHRoaXMuY3JlYXRlWm9uZUZvcm0uZ2V0KCdzZWxlY3RlZEdyb3VwJyk/Lm1hcmtBc1VudG91Y2hlZCgpO1xyXG4gICAgdGhpcy5jcmVhdGVab25lRm9ybS5nZXQoJ2dyb3VwTmFtZScpPy5tYXJrQXNVbnRvdWNoZWQoKTtcclxuICAgIC8vIEdldCBjbGllbnQgSURcclxuICAgIHRoaXMuY2xpZW50QXBpU2VydmljZS5jbGllbnREYXRhLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKS5zdWJzY3JpYmUoKGUpID0+IHtcclxuICAgICAgaWYgKGUpIHtcclxuICAgICAgICB0aGlzLmNsaWVudElkID0gZS5jbGllbnRJZDtcclxuICAgICAgICB0aGlzLmxvYWRHcm91cHMoKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gICAgLy8gV2F0Y2ggZm9yIGdyb3VwIHNlbGVjdGlvbiBjaGFuZ2VzXHJcbiAgICB0aGlzLmNyZWF0ZVpvbmVGb3JtLmdldCgnc2VsZWN0ZWRHcm91cCcpPy52YWx1ZUNoYW5nZXMucGlwZShcclxuICAgICAgdGFrZVVudGlsKHRoaXMuZGVzdHJveSQpXHJcbiAgICApLnN1YnNjcmliZSgodmFsdWUpID0+IHtcclxuICAgICAgLy8gXCJhZGROZXdcIiBpcyBhIGRlZmF1bHQgb3B0aW9uLCBub3QgZnJvbSBncm91cExpc3RcclxuICAgICAgY29uc3QgZ3JvdXBOYW1lQ3RybCA9IHRoaXMuY3JlYXRlWm9uZUZvcm0uZ2V0KCdncm91cE5hbWUnKTtcclxuXHJcbiAgICAgIGlmICh2YWx1ZSA9PT0gJ2FkZE5ldycpIHtcclxuICAgICAgICB0aGlzLnNob3dHcm91cE5hbWVJbnB1dCA9IHRydWU7XHJcbiAgICAgICAgZ3JvdXBOYW1lQ3RybD8uc2V0VmFsaWRhdG9ycyhbXHJcbiAgICAgICAgICBWYWxpZGF0b3JzLnJlcXVpcmVkLFxyXG4gICAgICAgICAgVmFsaWRhdG9ycy5taW5MZW5ndGgoMSksXHJcbiAgICAgICAgICBWYWxpZGF0b3JzLnBhdHRlcm4oL14oPyFcXHMqJClbYS16QS1aMC05XFxzXFwvXSokLylcclxuICAgICAgICBdKTtcclxuICAgICAgICBncm91cE5hbWVDdHJsPy5yZXNldCgnJywgeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMuc2hvd0dyb3VwTmFtZUlucHV0ID0gZmFsc2U7XHJcbiAgICAgICAgZ3JvdXBOYW1lQ3RybD8uY2xlYXJWYWxpZGF0b3JzKCk7XHJcbiAgICAgICAgZ3JvdXBOYW1lQ3RybD8ucmVzZXQoJycsIHsgZW1pdEV2ZW50OiBmYWxzZSB9KTtcclxuICAgICAgfVxyXG4gICAgICBncm91cE5hbWVDdHJsPy51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KHsgZW1pdEV2ZW50OiBmYWxzZSB9KTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XHJcbiAgICB0aGlzLmRlc3Ryb3kkLm5leHQodHJ1ZSk7XHJcbiAgICB0aGlzLmRlc3Ryb3kkLmNvbXBsZXRlKCk7XHJcbiAgfVxyXG5cclxuICAvLyBNZXRob2QgdG8gaW5pdGlhbGl6ZSBjb21wb25lbnQgaW4gZWRpdCBtb2RlXHJcbiAgc2V0Wm9uZURhdGFGb3JFZGl0KHpvbmU6IGFueSk6IHZvaWQge1xyXG4gICAgY29uc29sZS5sb2coJ3NldFpvbmVEYXRhRm9yRWRpdCA6Jywgem9uZSk7XHJcbiAgICB0aGlzLmlzRWRpdE1vZGUgPSB0cnVlO1xyXG4gICAgdGhpcy56b25lRGF0YSA9IHpvbmU7XHJcbiAgICAvLyBFbnN1cmUgZm9ybSBjb250cm9scyBhcmUgbWFya2VkIGFzIHVudG91Y2hlZCBiZWZvcmUgc2V0dGluZyB2YWx1ZXNcclxuICAgIHRoaXMuY3JlYXRlWm9uZUZvcm0ubWFya0FzVW50b3VjaGVkKCk7XHJcbiAgICB0aGlzLmNyZWF0ZVpvbmVGb3JtLmdldCgnem9uZU5hbWUnKT8ubWFya0FzVW50b3VjaGVkKCk7XHJcbiAgICB0aGlzLmNyZWF0ZVpvbmVGb3JtLmdldCgnc2VsZWN0ZWRHcm91cCcpPy5tYXJrQXNVbnRvdWNoZWQoKTtcclxuICAgIHRoaXMuY3JlYXRlWm9uZUZvcm0uZ2V0KCdncm91cE5hbWUnKT8ubWFya0FzVW50b3VjaGVkKCk7XHJcbiAgICBjb25zdCBncm91cE5hbWVDdHJsID0gdGhpcy5jcmVhdGVab25lRm9ybS5nZXQoJ2dyb3VwTmFtZScpO1xyXG5cclxuICAgIC8vIFJlc2V0IGZvcm0gY2xlYW5seVxyXG4gICAgdGhpcy5jcmVhdGVab25lRm9ybS5yZXNldCh7XHJcbiAgICAgIHpvbmVOYW1lOiB6b25lLnRhZ05hbWUgfHwgJycsXHJcbiAgICAgIHNlbGVjdGVkR3JvdXA6IHpvbmUuZ3JvdXBOYW1lIHx8ICcnLFxyXG4gICAgICBncm91cE5hbWU6ICcnXHJcbiAgICB9LCB7IGVtaXRFdmVudDogZmFsc2UgfSk7XHJcblxyXG4gICAgLy8gRWRpdCBtb2RlIOKGkiBoaWRlIGdyb3VwIG5hbWUgaW5wdXQgaW5pdGlhbGx5XHJcbiAgICB0aGlzLnNob3dHcm91cE5hbWVJbnB1dCA9IGZhbHNlO1xyXG5cclxuICAgIC8vIFJlbW92ZSB2YWxpZGF0aW9uIGluaXRpYWxseVxyXG4gICAgZ3JvdXBOYW1lQ3RybD8uY2xlYXJWYWxpZGF0b3JzKCk7XHJcbiAgICBncm91cE5hbWVDdHJsPy51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KHsgZW1pdEV2ZW50OiBmYWxzZSB9KTtcclxuXHJcbiAgICAvLyBPcHRpb25hbDogbWFyayB1bnRvdWNoZWQgKGdvb2QgVVgpXHJcbiAgICB0aGlzLmNyZWF0ZVpvbmVGb3JtLm1hcmtBc1VudG91Y2hlZCgpO1xyXG5cclxuICAgIC8vIEZvcmNlIFVJIHVwZGF0ZVxyXG4gICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gIH1cclxuXHJcbiAgLy8gdG8gbG9hZCBncm91cHMgZm9yIGRyb3Bkb3duXHJcbiAgbG9hZEdyb3VwcygpOiB2b2lkIHtcclxuICAgIGlmICghdGhpcy5jbGllbnRJZCkgcmV0dXJuO1xyXG4gICAgY29uc3QgcGF5bG9hZDogYW55ID0geyBjbGllbnRJZDogdGhpcy5jbGllbnRJZCB9O1xyXG4gICAgdGhpcy5jbGllbnRBcGlTZXJ2aWNlLmdldFpvbmVHcm91cERldGFpbHMocGF5bG9hZCkucGlwZShcclxuICAgICAgdGFrZVVudGlsKHRoaXMuZGVzdHJveSQpXHJcbiAgICApLnN1YnNjcmliZSh7XHJcbiAgICAgIG5leHQ6IChyZXM6IGFueSkgPT4ge1xyXG4gICAgICAgIGlmIChyZXMgJiYgcmVzLmNvZGUgPT09IDIwMCkge1xyXG4gICAgICAgICAgdGhpcy5ncm91cExpc3QgPSByZXM/LmRhdGE/LnJlc3VsdC5maWx0ZXIoKGdycDogYW55KSA9PiBncnAuZ3JvdXBOYW1lICE9PSBudWxsICYmIGdycC5ncm91cE5hbWUgIT09IHVuZGVmaW5lZCkgfHwgW107XHJcbiAgICAgICAgfVxyXG4gICAgICB9LFxyXG4gICAgICBlcnJvcjogKGVycjogYW55KSA9PiB7XHJcbiAgICAgICAgY29uc29sZS5lcnJvcignRXJyb3Igd2hpbGUgbG9hZEdyb3Vwczo6JywgZXJyKTtcclxuICAgICAgICAvLyBTZXQgZW1wdHkgYXJyYXkgb24gZXJyb3Igc28gZHJvcGRvd24gc3RpbGwgd29ya3NcclxuICAgICAgICB0aGlzLmdyb3VwTGlzdCA9IFtdO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIG9uQ2FuY2VsKCk6IHZvaWQge1xyXG4gICAgLy8gUmVzZXQgZm9ybSBzdGF0ZSB3aGVuIGNhbmNlbGluZ1xyXG4gICAgdGhpcy5jcmVhdGVab25lRm9ybS5yZXNldCgpO1xyXG4gICAgdGhpcy5jcmVhdGVab25lRm9ybS5tYXJrQXNVbnRvdWNoZWQoKTtcclxuICAgIHRoaXMuYWN0aXZlTW9kYWwuY2xvc2UoKTtcclxuICB9XHJcblxyXG4gIG9uU2F2ZSgpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLmNyZWF0ZVpvbmVGb3JtLmludmFsaWQpIHtcclxuICAgICAgdGhpcy5jcmVhdGVab25lRm9ybS5tYXJrQWxsQXNUb3VjaGVkKCk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBmb3JtVmFsdWUgPSB0aGlzLmNyZWF0ZVpvbmVGb3JtLnZhbHVlO1xyXG4gICAgXHJcbiAgICAvLyBWYWxpZGF0ZSB6b25lTmFtZSAmIGdyb3VwIHBhdHRlcm5cclxuICAgIGxldCBwYXR0ZXJuID0gL15bYS16QS1aMC05XFxzXFwvXSokLztcclxuICAgIGlmICghZm9ybVZhbHVlLnpvbmVOYW1lLm1hdGNoKHBhdHRlcm4pIHx8IFxyXG4gICAgKGZvcm1WYWx1ZS5zZWxlY3RlZEdyb3VwID09PSAnYWRkTmV3JyAmJiAhZm9ybVZhbHVlLmdyb3VwTmFtZS5tYXRjaChwYXR0ZXJuKSkpIHtcclxuICAgICAgdGhpcy50b2FzdFNlcnZpY2UuZ2V0RXJyb3JUb2FzdCgnU3BlY2lhbCBjaGFyYWN0ZXJzIGFyZSBub3QgYWxsb3dlZCcpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBsZXQgcGF5bG9hZDogYW55ID0ge1xyXG4gICAgICBjbGllbnRJZDogdGhpcy5jbGllbnRJZCxcclxuICAgICAgcHJvZHVjdE5hbWU6ICd0YW5nb1pvbmUnXHJcbiAgICB9O1xyXG4gICAgY29uc29sZS5sb2coJ3BheWxvYWQgYmVmb3JlIGVkaXQgY2hlY2sgOicsIHBheWxvYWQpO1xyXG4gICAgaWYgKHRoaXMuaXNFZGl0TW9kZSAmJiB0aGlzLnpvbmVEYXRhPy50YWdOYW1lKSB7XHJcbiAgICAgIGlmICh0aGlzLnpvbmVEYXRhLnRhZ05hbWUgIT09IGZvcm1WYWx1ZS56b25lTmFtZSkge1xyXG4gICAgICAgIHBheWxvYWQub2xkVGFnID0gdGhpcy56b25lRGF0YS50YWdOYW1lO1xyXG4gICAgICAgIHBheWxvYWQudGFnTmFtZSA9IGZvcm1WYWx1ZS56b25lTmFtZS50cmltKCk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgLy8gVGFnIG5hbWUgdW5jaGFuZ2VkXHJcbiAgICAgICAgcGF5bG9hZC50YWdOYW1lID0gdGhpcy56b25lRGF0YS50YWdOYW1lO1xyXG4gICAgICB9XHJcbiAgICAgIHBheWxvYWQuX2lkID0gdGhpcy56b25lRGF0YT8uX2lkXHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBjb25zdCBjb2xvcnMgPSB0aGlzLmdlbmVyYXRlUmFuZG9tQ29sb3IoKTtcclxuICAgICAgcGF5bG9hZC50YWdOYW1lID0gZm9ybVZhbHVlLnpvbmVOYW1lLnRyaW0oKTsgXHJcbiAgICAgIHBheWxvYWQucmdiQ29sb3IgPSBjb2xvcnMucmdiQ29sb3I7XHJcbiAgICAgIHBheWxvYWQucmdiQm9yZGVyQ29sb3IgPSBjb2xvcnMucmdiQm9yZGVyQ29sb3I7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gSWYgYSBncm91cCBpcyBzZWxlY3RlZCAobm90IFwiQWRkIE5ld1wiKVxyXG4gICAgaWYgKGZvcm1WYWx1ZS5zZWxlY3RlZEdyb3VwICYmIGZvcm1WYWx1ZS5zZWxlY3RlZEdyb3VwICE9PSAnYWRkTmV3Jykge1xyXG4gICAgICBwYXlsb2FkLmdyb3VwTmFtZSA9IGZvcm1WYWx1ZS5zZWxlY3RlZEdyb3VwO1xyXG4gICAgICBwYXlsb2FkLmlzRXhpc3RpbmdHcm91cCA9IHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gSWYgXCJBZGQgTmV3XCIgaXMgc2VsZWN0ZWQsIGluY2x1ZGUgdGhlIG5ldyBncm91cCBuYW1lXHJcbiAgICBpZiAoZm9ybVZhbHVlLnNlbGVjdGVkR3JvdXAgPT09ICdhZGROZXcnICYmIGZvcm1WYWx1ZS5ncm91cE5hbWUpIHtcclxuICAgICAgcGF5bG9hZC5ncm91cE5hbWUgPSBmb3JtVmFsdWUuZ3JvdXBOYW1lLnRyaW0oKTtcclxuICAgICAgcGF5bG9hZC5pc0V4aXN0aW5nR3JvdXAgPSBmYWxzZTtcclxuICAgIH1cclxuICAgIGNvbnNvbGUubG9nKCdvblNhdmUgcGF5bG9hZCA6JywgcGF5bG9hZCk7XHJcbiAgICBpZiAoIXRoaXMuaXNFZGl0TW9kZSkge1xyXG4gICAgICB0aGlzLmNsaWVudEFwaVNlcnZpY2UuYWRkWm9uZUNvbmZpZ0N1c3RvbVRhZyhwYXlsb2FkKS5waXBlKFxyXG4gICAgICAgIHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKVxyXG4gICAgICApLnN1YnNjcmliZSh7XHJcbiAgICAgICAgbmV4dDogKHJlczogYW55KSA9PiB7XHJcbiAgICAgICAgICBpZiAocmVzICYmIHJlcy5jb2RlID09PSAyMDApIHtcclxuICAgICAgICAgICAgY29uc3QgbWVzc2FnZSA9ICdab25lIGNyZWF0ZWQgc3VjY2Vzc2Z1bGx5JztcclxuICAgICAgICAgICAgdGhpcy50b2FzdFNlcnZpY2UuZ2V0U3VjY2Vzc1RvYXN0KG1lc3NhZ2UpO1xyXG4gICAgICAgICAgICB0aGlzLmFjdGl2ZU1vZGFsLmNsb3NlKHtcclxuICAgICAgICAgICAgICB0eXBlOiAnY3JlYXRlZCcsXHJcbiAgICAgICAgICAgICAgZGF0YTogcmVzLmRhdGFcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBjb25zdCBlcnJvck1zZyA9ICdGYWlsZWQgdG8gY3JlYXRlIHpvbmUnO1xyXG4gICAgICAgICAgICB0aGlzLnRvYXN0U2VydmljZS5nZXRFcnJvclRvYXN0KHJlcy5tZXNzYWdlIHx8IGVycm9yTXNnKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG4gICAgICAgIGVycm9yOiAoZXJyOiBhbnkpID0+IHtcclxuICAgICAgICAgIGNvbnN0IGVycm9yTXNnID0gJ0ZhaWxlZCB0byBjcmVhdGUgem9uZSc7XHJcbiAgICAgICAgICB0aGlzLnRvYXN0U2VydmljZS5nZXRFcnJvclRvYXN0KGVyci5lcnJvcj8uZXJyb3IgfHwgZXJyb3JNc2cpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICB9IGVsc2UgaWYgKHRoaXMuaXNFZGl0TW9kZSAmJiB0aGlzLnpvbmVEYXRhKSB7XHJcbiAgICAgIHRoaXMuY2xpZW50QXBpU2VydmljZS51cGRhdGVab25lQ29uZmlnQ3VzdG9tVGFnKHBheWxvYWQpLnBpcGUoXHJcbiAgICAgICAgdGFrZVVudGlsKHRoaXMuZGVzdHJveSQpXHJcbiAgICAgICkuc3Vic2NyaWJlKHtcclxuICAgICAgICBuZXh0OiAocmVzOiBhbnkpID0+IHtcclxuICAgICAgICAgIGlmIChyZXMgJiYgcmVzLmNvZGUgPT09IDIwMCkge1xyXG4gICAgICAgICAgICBjb25zdCBtZXNzYWdlID0gJ1pvbmUgdXBkYXRlZCBzdWNjZXNzZnVsbHknO1xyXG4gICAgICAgICAgICB0aGlzLnRvYXN0U2VydmljZS5nZXRTdWNjZXNzVG9hc3QobWVzc2FnZSk7XHJcbiAgICAgICAgICAgIHRoaXMuYWN0aXZlTW9kYWwuY2xvc2Uoe1xyXG4gICAgICAgICAgICAgIHR5cGU6ICd1cGRhdGVkJyxcclxuICAgICAgICAgICAgICBkYXRhOiByZXMuZGF0YVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgdGhpcy5pc0VkaXRNb2RlID0gZmFsc2U7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBjb25zdCBlcnJvck1zZyA9ICdGYWlsZWQgdG8gdXBkYXRlIHpvbmUnO1xyXG4gICAgICAgICAgICB0aGlzLnRvYXN0U2VydmljZS5nZXRFcnJvclRvYXN0KHJlcy5tZXNzYWdlIHx8IGVycm9yTXNnKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG4gICAgICAgIGVycm9yOiAoZXJyOiBhbnkpID0+IHtcclxuICAgICAgICAgIGNvbnN0IGVycm9yTXNnID0gJ0ZhaWxlZCB0byB1cGRhdGUgem9uZSc7XHJcbiAgICAgICAgICB0aGlzLnRvYXN0U2VydmljZS5nZXRFcnJvclRvYXN0KGVyci5lcnJvcj8uZXJyb3IgfHwgZXJyb3JNc2cpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gIH1cclxuXHJcbiAgLy8gQWxpYXMgZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHlcclxuICBvbkNyZWF0ZSgpOiB2b2lkIHtcclxuICAgIHRoaXMub25TYXZlKCk7XHJcbiAgfVxyXG5cclxuICBnZW5lcmF0ZVJhbmRvbUNvbG9yKCkge1xyXG4gICAgY29uc3QgcmVkOiBhbnkgPSBNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiAyNTYpO1xyXG4gICAgY29uc3QgZ3JlZW46IGFueSA9IE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIDI1Nik7XHJcbiAgICBjb25zdCBibHVlOiBhbnkgPSBNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiAyNTYpO1xyXG4gICAgY29uc3QgcmdiQ29sb3IgPSBgcmdiYSgke3JlZH0sICR7Z3JlZW59LCAke2JsdWV9LCAwLjUpYDtcclxuICAgIGNvbnN0IHJnYkJvcmRlckNvbG9yID0gYHJnYigke3BhcnNlSW50KHJlZCkgKyAxMH0sICR7cGFyc2VJbnQoZ3JlZW4pICsgMTB9LCAke3BhcnNlSW50KGJsdWUpICsgMTB9KWA7XHJcbiAgICByZXR1cm4geyByZ2JDb2xvciwgcmdiQm9yZGVyQ29sb3IgfVxyXG4gIH1cclxufVxyXG5cclxuIiwiPGRpdiBjbGFzcz1cImNyZWF0ZS16b25lLW1vZGFsXCI+XHJcbiAgPGZvcm0gW2Zvcm1Hcm91cF09XCJjcmVhdGVab25lRm9ybVwiIGF1dG9jb21wbGV0ZT1cIm9mZlwiPlxyXG4gICAgPCEtLSBIZWFkZXIgLS0+XHJcbiAgICA8ZGl2IGNsYXNzPVwibW9kYWwtaGVhZGVyLWN1c3RvbSBtYi00XCI+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImhlYWRlci1pY29uIG1lLTNcIj5cclxuICAgICAgICAgIDxzdmcgKm5nSWY9XCIhaXNFZGl0TW9kZVwiIHdpZHRoPVwiMjRcIiBoZWlnaHQ9XCIyNFwiIHZpZXdCb3g9XCIwIDAgMjQgMjRcIiBmaWxsPVwibm9uZVwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj5cclxuICAgICAgICAgICAgPGNpcmNsZSBjeD1cIjEyXCIgY3k9XCIxMlwiIHI9XCIxMFwiIGZpbGw9XCIjMDBBM0ZGXCIgLz5cclxuICAgICAgICAgICAgPHBhdGggZD1cIk0xMiA4VjE2TTggMTJIMTZcIiBzdHJva2U9XCJ3aGl0ZVwiIHN0cm9rZS13aWR0aD1cIjJcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiAvPlxyXG4gICAgICAgICAgPC9zdmc+XHJcbiAgICAgICAgICA8c3ZnICpuZ0lmPVwiaXNFZGl0TW9kZVwiIHdpZHRoPVwiNTZcIiBoZWlnaHQ9XCI1NlwiIHZpZXdCb3g9XCIwIDAgNTYgNTZcIiBmaWxsPVwibm9uZVwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj5cclxuICAgICAgICAgICAgPHJlY3QgeD1cIjRcIiB5PVwiNFwiIHdpZHRoPVwiNDhcIiBoZWlnaHQ9XCI0OFwiIHJ4PVwiMjRcIiBmaWxsPVwiI0RBRjFGRlwiLz5cclxuICAgICAgICAgICAgPHJlY3QgeD1cIjRcIiB5PVwiNFwiIHdpZHRoPVwiNDhcIiBoZWlnaHQ9XCI0OFwiIHJ4PVwiMjRcIiBzdHJva2U9XCIjRUFGOEZGXCIgc3Ryb2tlLXdpZHRoPVwiOFwiLz5cclxuICAgICAgICAgICAgPHBhdGggZD1cIk0yNyAyMC4wMDAySDIwQzE5LjQ2OTYgMjAuMDAwMiAxOC45NjA5IDIwLjIxMDkgMTguNTg1OCAyMC41ODZDMTguMjEwNyAyMC45NjExIDE4IDIxLjQ2OTggMTggMjIuMDAwMlYzNi4wMDAyQzE4IDM2LjUzMDcgMTguMjEwNyAzNy4wMzk0IDE4LjU4NTggMzcuNDE0NEMxOC45NjA5IDM3Ljc4OTUgMTkuNDY5NiAzOC4wMDAyIDIwIDM4LjAwMDJIMzRDMzQuNTMwNCAzOC4wMDAyIDM1LjAzOTEgMzcuNzg5NSAzNS40MTQyIDM3LjQxNDRDMzUuNzg5MyAzNy4wMzk0IDM2IDM2LjUzMDcgMzYgMzYuMDAwMlYyOS4wMDAyTTM0LjUgMTguNTAwMkMzNC44OTc4IDE4LjEwMjQgMzUuNDM3NCAxNy44Nzg5IDM2IDE3Ljg3ODlDMzYuNTYyNiAxNy44Nzg5IDM3LjEwMjIgMTguMTAyNCAzNy41IDE4LjUwMDJDMzcuODk3OCAxOC44OTgxIDM4LjEyMTMgMTkuNDM3NiAzOC4xMjEzIDIwLjAwMDJDMzguMTIxMyAyMC41NjI4IDM3Ljg5NzggMjEuMTAyNCAzNy41IDIxLjUwMDJMMjggMzEuMDAwMkwyNCAzMi4wMDAyTDI1IDI4LjAwMDJMMzQuNSAxOC41MDAyWlwiIHN0cm9rZT1cIiMwMEEzRkZcIiBzdHJva2Utd2lkdGg9XCIyXCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIvPlxyXG4gICAgICAgICAgICA8L3N2Zz4gXHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGg0IGNsYXNzPVwibW9kYWwtdGl0bGUgbWItMFwiPnt7IGlzRWRpdE1vZGUgPyAnRWRpdCcgOiAnQ3JlYXRlJyB9fTwvaDQ+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcblxyXG4gICAgPCEtLSBab25lIE5hbWUgSW5wdXQgLS0+XHJcbiAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cCBtYi00XCI+XHJcbiAgICAgIDwhLS0gPHNwYW4gY2xhc3M9XCJ0ZXh0LWRhbmdlclwiPio8L3NwYW4+IC0tPlxyXG4gICAgICA8bGFiZWwgZm9yPVwiem9uZU5hbWVcIiBjbGFzcz1cImZvcm0tbGFiZWxcIj5ab25lIE5hbWU8L2xhYmVsPlxyXG4gICAgICA8aW5wdXQgXHJcbiAgICAgICAgdHlwZT1cInRleHRcIiBcclxuICAgICAgICBjbGFzcz1cImZvcm0tY29udHJvbFwiIFxyXG4gICAgICAgIGlkPVwiem9uZU5hbWVcIlxyXG4gICAgICAgIGZvcm1Db250cm9sTmFtZT1cInpvbmVOYW1lXCJcclxuICAgICAgICBwbGFjZWhvbGRlcj1cIkVudGVyIHpvbmUgbmFtZVwiXHJcbiAgICAgICAgYXV0b2NvbXBsZXRlPVwib2ZmXCJcclxuICAgICAgICBbY2xhc3MuaXMtaW52YWxpZF09XCJjcmVhdGVab25lRm9ybS5nZXQoJ3pvbmVOYW1lJyk/LmludmFsaWQgJiYgY3JlYXRlWm9uZUZvcm0uZ2V0KCd6b25lTmFtZScpPy50b3VjaGVkICYmICFjcmVhdGVab25lRm9ybS5nZXQoJ3pvbmVOYW1lJyk/LnByaXN0aW5lXCI+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJpbnZhbGlkLWZlZWRiYWNrXCIgKm5nSWY9XCJjcmVhdGVab25lRm9ybS5nZXQoJ3pvbmVOYW1lJyk/LmludmFsaWQgJiYgY3JlYXRlWm9uZUZvcm0uZ2V0KCd6b25lTmFtZScpPy50b3VjaGVkICYmICFjcmVhdGVab25lRm9ybS5nZXQoJ3pvbmVOYW1lJyk/LnByaXN0aW5lXCI+XHJcbiAgICAgICAgPHNwYW4gKm5nSWY9XCJjcmVhdGVab25lRm9ybS5nZXQoJ3pvbmVOYW1lJyk/LmVycm9ycz8uWydyZXF1aXJlZCddXCI+Wm9uZSBuYW1lIGlzIHJlcXVpcmVkPC9zcGFuPlxyXG4gICAgICAgIDxzcGFuICpuZ0lmPVwiY3JlYXRlWm9uZUZvcm0uZ2V0KCd6b25lTmFtZScpPy5lcnJvcnM/LlsnbWlubGVuZ3RoJ11cIj5ab25lIG5hbWUgbXVzdCBiZSBhdCBsZWFzdCAxIGNoYXJhY3Rlcjwvc3Bhbj5cclxuICAgICAgICA8c3BhbiAqbmdJZj1cImNyZWF0ZVpvbmVGb3JtLmdldCgnem9uZU5hbWUnKT8uZXJyb3JzPy5bJ3BhdHRlcm4nXVwiPlxyXG4gICAgICAgICAgU3BlY2lhbCBjaGFyYWN0ZXJzIGFyZSBub3QgYWxsb3dlZFxyXG4gICAgICAgIDwvc3Bhbj5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuXHJcbiAgICA8IS0tIEFkZCB0byBHcm91cCBEcm9wZG93biAtLT5cclxuICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwIG1iLTRcIj5cclxuICAgICAgPGxhYmVsIGZvcj1cInNlbGVjdGVkR3JvdXBcIiBjbGFzcz1cImZvcm0tbGFiZWxcIj5BZGQgdG8gR3JvdXAgKE9wdGlvbmFsKTwvbGFiZWw+XHJcbiAgICAgIDxzZWxlY3QgXHJcbiAgICAgICAgY2xhc3M9XCJmb3JtLXNlbGVjdFwiIFxyXG4gICAgICAgIGlkPVwic2VsZWN0ZWRHcm91cFwiXHJcbiAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwic2VsZWN0ZWRHcm91cFwiPlxyXG4gICAgICAgIDxvcHRpb24gdmFsdWU9XCJcIj5TZWxlY3Q8L29wdGlvbj5cclxuICAgICAgICA8b3B0aW9uIHZhbHVlPVwiYWRkTmV3XCIgKm5nSWY9XCIhaXNFZGl0TW9kZVwiPisgQWRkIE5ldzwvb3B0aW9uPlxyXG4gICAgICAgIDxvcHRpb24gKm5nRm9yPVwibGV0IGdyb3VwIG9mIGdyb3VwTGlzdFwiIFt2YWx1ZV09XCJncm91cC5ncm91cE5hbWVcIj5cclxuICAgICAgICAgIHt7IGdyb3VwLmdyb3VwTmFtZSB9fVxyXG4gICAgICAgIDwvb3B0aW9uPlxyXG4gICAgICA8L3NlbGVjdD5cclxuICAgIDwvZGl2PlxyXG5cclxuICAgIDwhLS0gRW50ZXIgR3JvdXAgTmFtZSBJbnB1dCAoc2hvd24gd2hlbiBBZGQgTmV3IGlzIHNlbGVjdGVkKSAtLT5cclxuICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwIG1iLTRcIiAqbmdJZj1cInNob3dHcm91cE5hbWVJbnB1dFwiPlxyXG4gICAgICA8IS0tIDxzcGFuIGNsYXNzPVwidGV4dC1kYW5nZXJcIj4qPC9zcGFuPiAtLT5cclxuICAgICAgPGxhYmVsIGZvcj1cImdyb3VwTmFtZVwiIGNsYXNzPVwiZm9ybS1sYWJlbFwiPkVudGVyIEdyb3VwIE5hbWU8L2xhYmVsPlxyXG4gICAgICA8aW5wdXQgXHJcbiAgICAgICAgdHlwZT1cInRleHRcIiBcclxuICAgICAgICBjbGFzcz1cImZvcm0tY29udHJvbFwiIFxyXG4gICAgICAgIGlkPVwiZ3JvdXBOYW1lXCJcclxuICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJncm91cE5hbWVcIlxyXG4gICAgICAgIHBsYWNlaG9sZGVyPVwiRW50ZXIgZ3JvdXAgbmFtZVwiXHJcbiAgICAgICAgYXV0b2NvbXBsZXRlPVwib2ZmXCJcclxuICAgICAgICBbY2xhc3MuaXMtaW52YWxpZF09XCJjcmVhdGVab25lRm9ybS5nZXQoJ2dyb3VwTmFtZScpPy5pbnZhbGlkICYmIGNyZWF0ZVpvbmVGb3JtLmdldCgnZ3JvdXBOYW1lJyk/LnRvdWNoZWQgJiYgIWNyZWF0ZVpvbmVGb3JtLmdldCgnZ3JvdXBOYW1lJyk/LnByaXN0aW5lXCI+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJpbnZhbGlkLWZlZWRiYWNrXCIgKm5nSWY9XCJjcmVhdGVab25lRm9ybS5nZXQoJ2dyb3VwTmFtZScpPy5pbnZhbGlkICYmIGNyZWF0ZVpvbmVGb3JtLmdldCgnZ3JvdXBOYW1lJyk/LnRvdWNoZWQgJiYgIWNyZWF0ZVpvbmVGb3JtLmdldCgnZ3JvdXBOYW1lJyk/LnByaXN0aW5lXCI+XHJcbiAgICAgICAgPHNwYW4gKm5nSWY9XCJjcmVhdGVab25lRm9ybS5nZXQoJ2dyb3VwTmFtZScpPy5lcnJvcnM/LlsncmVxdWlyZWQnXVwiPkdyb3VwIG5hbWUgaXMgcmVxdWlyZWQ8L3NwYW4+XHJcbiAgICAgICAgPHNwYW4gKm5nSWY9XCJjcmVhdGVab25lRm9ybS5nZXQoJ2dyb3VwTmFtZScpPy5lcnJvcnM/LlsnbWlubGVuZ3RoJ11cIj5Hcm91cCBuYW1lIG11c3QgYmUgYXQgbGVhc3QgMyBjaGFyYWN0ZXJzPC9zcGFuPlxyXG4gICAgICAgIDxzcGFuICpuZ0lmPVwiY3JlYXRlWm9uZUZvcm0uZ2V0KCdncm91cE5hbWUnKT8uZXJyb3JzPy5bJ3BhdHRlcm4nXVwiPlxyXG4gICAgICAgICAgU3BlY2lhbCBjaGFyYWN0ZXJzIGFyZSBub3QgYWxsb3dlZFxyXG4gICAgICAgIDwvc3Bhbj5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuXHJcbiAgICA8IS0tIEFjdGlvbiBCdXR0b25zIC0tPlxyXG4gICAgPGRpdiBjbGFzcz1cIm1vZGFsLWZvb3Rlci1jdXN0b20gbXQtNFwiPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGdhcC0zIGp1c3RpZnktY29udGVudC1lbmRcIj5cclxuICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4tb3V0bGluZVwiIChjbGljayk9XCJvbkNhbmNlbCgpXCI+Q2FuY2VsPC9idXR0b24+XHJcbiAgICAgICAgPGJ1dHRvbiBcclxuICAgICAgICAgIHR5cGU9XCJidXR0b25cIiBcclxuICAgICAgICAgIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5XCIgXHJcbiAgICAgICAgICAoY2xpY2spPVwib25TYXZlKClcIlxyXG4gICAgICAgICAgW2Rpc2FibGVkXT1cImNyZWF0ZVpvbmVGb3JtLmludmFsaWRcIj5cclxuICAgICAgICAgIHt7IGlzRWRpdE1vZGUgPyAnVXBkYXRlJyA6ICdDcmVhdGUnIH19XHJcbiAgICAgICAgPC9idXR0b24+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgPC9mb3JtPlxyXG48L2Rpdj5cclxuXHJcbiJdfQ==
269
+ args: [{ selector: 'lib-create-single-zone', template: "<div class=\"create-zone-modal\">\r\n <form [formGroup]=\"createZoneForm\" autocomplete=\"off\">\r\n <!-- Header -->\r\n <div class=\"modal-header-custom mb-4\">\r\n <div class=\"d-flex align-items-center\">\r\n <div class=\"header-icon me-3\">\r\n <svg *ngIf=\"!isEditMode\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <circle cx=\"12\" cy=\"12\" r=\"10\" fill=\"#00A3FF\" />\r\n <path d=\"M12 8V16M8 12H16\" stroke=\"white\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n <svg *ngIf=\"isEditMode\" width=\"56\" height=\"56\" viewBox=\"0 0 56 56\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <rect x=\"4\" y=\"4\" width=\"48\" height=\"48\" rx=\"24\" fill=\"#DAF1FF\"/>\r\n <rect x=\"4\" y=\"4\" width=\"48\" height=\"48\" rx=\"24\" stroke=\"#EAF8FF\" stroke-width=\"8\"/>\r\n <path d=\"M27 20.0002H20C19.4696 20.0002 18.9609 20.2109 18.5858 20.586C18.2107 20.9611 18 21.4698 18 22.0002V36.0002C18 36.5307 18.2107 37.0394 18.5858 37.4144C18.9609 37.7895 19.4696 38.0002 20 38.0002H34C34.5304 38.0002 35.0391 37.7895 35.4142 37.4144C35.7893 37.0394 36 36.5307 36 36.0002V29.0002M34.5 18.5002C34.8978 18.1024 35.4374 17.8789 36 17.8789C36.5626 17.8789 37.1022 18.1024 37.5 18.5002C37.8978 18.8981 38.1213 19.4376 38.1213 20.0002C38.1213 20.5628 37.8978 21.1024 37.5 21.5002L28 31.0002L24 32.0002L25 28.0002L34.5 18.5002Z\" stroke=\"#00A3FF\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n </svg> \r\n </div>\r\n <h4 class=\"modal-title mb-0\">{{ isEditMode ? 'Edit' : 'Create' }}</h4>\r\n </div>\r\n </div>\r\n\r\n <!-- Zone Name Input -->\r\n <div class=\"form-group mb-4\">\r\n <!-- <span class=\"text-danger\">*</span> -->\r\n <label for=\"zoneName\" class=\"form-label\">Zone Name</label>\r\n <input \r\n type=\"text\" \r\n class=\"form-control\" \r\n id=\"zoneName\"\r\n formControlName=\"zoneName\"\r\n placeholder=\"Enter zone name\"\r\n autocomplete=\"off\"\r\n [class.is-invalid]=\"createZoneForm.get('zoneName')?.invalid && createZoneForm.get('zoneName')?.touched && !createZoneForm.get('zoneName')?.pristine\">\r\n <div class=\"invalid-feedback\" *ngIf=\"createZoneForm.get('zoneName')?.invalid && createZoneForm.get('zoneName')?.touched && !createZoneForm.get('zoneName')?.pristine\">\r\n <span *ngIf=\"createZoneForm.get('zoneName')?.errors?.['required']\">Zone name is required</span>\r\n <span *ngIf=\"createZoneForm.get('zoneName')?.errors?.['minlength']\">Zone name must be at least 1 character</span>\r\n <span *ngIf=\"createZoneForm.get('zoneName')?.errors?.['pattern']\">\r\n Special characters are not allowed\r\n </span>\r\n </div>\r\n </div>\r\n\r\n <!-- Add to Group Dropdown -->\r\n <div class=\"form-group mb-4\">\r\n <label for=\"selectedGroup\" class=\"form-label\">Add to Group (Optional)</label>\r\n <div class=\"custom-select-wrapper\" ngbDropdown #groupDropdown=\"ngbDropdown\">\r\n <button \r\n class=\"form-select custom-select-button\" \r\n type=\"button\"\r\n id=\"selectedGroup\"\r\n ngbDropdownToggle\r\n [class.is-invalid]=\"createZoneForm.get('selectedGroup')?.invalid && createZoneForm.get('selectedGroup')?.touched && !createZoneForm.get('selectedGroup')?.pristine\">\r\n {{ getSelectedGroupDisplay() }}\r\n </button>\r\n <ul class=\"dropdown-menu custom-dropdown-menu\" ngbDropdownMenu>\r\n <li>\r\n <a class=\"dropdown-item\" \r\n (click)=\"selectGroup('', $event)\"\r\n [class.active]=\"!createZoneForm.get('selectedGroup')?.value\">\r\n Select\r\n </a>\r\n </li>\r\n <li *ngIf=\"!isEditMode\">\r\n <a class=\"dropdown-item\" \r\n (click)=\"selectGroup('addNew', $event)\"\r\n [class.active]=\"createZoneForm.get('selectedGroup')?.value === 'addNew'\">\r\n + Add New\r\n </a>\r\n </li>\r\n <li *ngFor=\"let group of groupList\">\r\n <a class=\"dropdown-item\" \r\n (click)=\"selectGroup(group.groupName, $event)\"\r\n [class.active]=\"createZoneForm.get('selectedGroup')?.value === group.groupName\">\r\n {{ group.groupName }}\r\n </a>\r\n </li>\r\n </ul>\r\n </div>\r\n <input \r\n type=\"hidden\" \r\n formControlName=\"selectedGroup\"\r\n id=\"selectedGroupHidden\">\r\n </div>\r\n\r\n <!-- Enter Group Name Input (shown when Add New is selected) -->\r\n <div class=\"form-group mb-4\" *ngIf=\"showGroupNameInput\">\r\n <!-- <span class=\"text-danger\">*</span> -->\r\n <label for=\"groupName\" class=\"form-label\">Enter Group Name</label>\r\n <input \r\n type=\"text\" \r\n class=\"form-control\" \r\n id=\"groupName\"\r\n formControlName=\"groupName\"\r\n placeholder=\"Enter group name\"\r\n autocomplete=\"off\"\r\n [class.is-invalid]=\"createZoneForm.get('groupName')?.invalid && createZoneForm.get('groupName')?.touched && !createZoneForm.get('groupName')?.pristine\">\r\n <div class=\"invalid-feedback\" *ngIf=\"createZoneForm.get('groupName')?.invalid && createZoneForm.get('groupName')?.touched && !createZoneForm.get('groupName')?.pristine\">\r\n <span *ngIf=\"createZoneForm.get('groupName')?.errors?.['required']\">Group name is required</span>\r\n <span *ngIf=\"createZoneForm.get('groupName')?.errors?.['minlength']\">Group name must be at least 3 characters</span>\r\n <span *ngIf=\"createZoneForm.get('groupName')?.errors?.['pattern']\">\r\n Special characters are not allowed\r\n </span>\r\n </div>\r\n </div>\r\n\r\n <!-- Action Buttons -->\r\n <div class=\"modal-footer-custom mt-4\">\r\n <div class=\"d-flex gap-3 justify-content-end\">\r\n <button type=\"button\" class=\"btn btn-outline\" (click)=\"onCancel()\">Cancel</button>\r\n <button \r\n type=\"button\" \r\n class=\"btn btn-primary\" \r\n (click)=\"onSave()\"\r\n [disabled]=\"createZoneForm.invalid\">\r\n {{ isEditMode ? 'Update' : 'Create' }}\r\n </button>\r\n </div>\r\n </div>\r\n </form>\r\n</div>\r\n\r\n", styles: [".create-zone-modal{padding:24px}.modal-header-custom .header-icon{width:40px;height:40px;border-radius:50%;background-color:#daf1ff;display:flex;align-items:center;justify-content:center;flex-shrink:0}.modal-header-custom .modal-title{font-size:18px;font-weight:600;color:#101828;line-height:28px}.form-group .form-label{font-size:14px;font-weight:500;color:#344054;margin-bottom:8px;display:block}.form-group .form-label .text-danger{color:#f04438;margin-left:2px}.form-group .form-control,.form-group .form-select{border:1px solid #D0D5DD;border-radius:8px;padding:10px 14px;font-size:14px;color:#344054;height:44px;transition:all .2s ease}.form-group .form-control:focus,.form-group .form-select:focus{border-color:#009bf3;box-shadow:0 0 0 3px #009bf31a;outline:none}.form-group .form-control.is-invalid,.form-group .form-select.is-invalid{border-color:#f04438}.form-group .form-control.is-invalid:focus,.form-group .form-select.is-invalid:focus{border-color:#f04438;box-shadow:0 0 0 3px #f044381a}.form-group .form-control::placeholder,.form-group .form-select::placeholder{color:#98a2b3}.form-group .form-select{background-image:url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%23343a40' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M2 5l6 6 6-6'/%3e%3c/svg%3e\");background-repeat:no-repeat;background-position:right 12px center;background-size:16px 12px;padding-right:40px;appearance:none;cursor:pointer}.form-group .custom-select-wrapper{position:relative;width:100%}.form-group .custom-select-wrapper .custom-select-button{text-align:left;width:100%;background-image:url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%23343a40' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M2 5l6 6 6-6'/%3e%3c/svg%3e\");background-repeat:no-repeat;background-position:right 12px center;background-size:16px 12px;padding-right:40px;cursor:pointer}.form-group .custom-select-wrapper .custom-dropdown-menu{max-height:228px;overflow-y:auto;width:100%;min-width:100%;margin-top:4px;border:1px solid #D0D5DD;border-radius:8px;box-shadow:0 4px 6px -1px #0000001a,0 2px 4px -1px #0000000f;padding:4px 0}.form-group .custom-select-wrapper .custom-dropdown-menu .dropdown-item{padding:10px 14px;font-size:14px;font-weight:500;color:#344054;cursor:pointer;transition:all .2s ease;min-height:44px;display:flex;align-items:center}.form-group .custom-select-wrapper .custom-dropdown-menu .dropdown-item:hover{background-color:#f9fafb;color:#344054}.form-group .invalid-feedback{display:block;width:100%;margin-top:6px;font-size:12px;color:#f04438}.modal-footer-custom{padding-top:16px;border-top:1px solid #EAECF0}.modal-footer-custom .btn{min-width:100px;height:44px;font-size:14px;font-weight:500;border-radius:8px;padding:10px 18px;transition:all .2s ease}.modal-footer-custom .btn.btn-outline{border:1px solid #D0D5DD;background-color:#fff;color:#344054}.modal-footer-custom .btn.btn-outline:hover{background-color:#f9fafb;border-color:#d0d5dd}.modal-footer-custom .btn.btn-primary{background-color:#009bf3;border-color:#009bf3;color:#fff}.modal-footer-custom .btn.btn-primary:hover:not(:disabled){background-color:#0085d1;border-color:#0085d1}.modal-footer-custom .btn.btn-primary:disabled{opacity:.6;cursor:not-allowed}\n"] }]
270
+ }], ctorParameters: () => [{ type: i1.FormBuilder }, { type: i2.NgbActiveModal }, { type: i3.ClientApiService }, { type: i4.ToastService }, { type: i0.ChangeDetectorRef }], propDecorators: { groupDropdown: [{
271
+ type: ViewChild,
272
+ args: ['groupDropdown', { static: false }]
273
+ }] } });
274
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3JlYXRlLXNpbmdsZS16b25lLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3RhbmdvLW1hbmFnZS1zZXR0aW5ncy9zcmMvbGliL2NvbXBvbmVudHMvY29uZmlndXJhdGlvbnMvem9uZS1jb25maWd1cmF0aW9uL2NyZWF0ZS1zaW5nbGUtem9uZS9jcmVhdGUtc2luZ2xlLXpvbmUuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdGFuZ28tbWFuYWdlLXNldHRpbmdzL3NyYy9saWIvY29tcG9uZW50cy9jb25maWd1cmF0aW9ucy96b25lLWNvbmZpZ3VyYXRpb24vY3JlYXRlLXNpbmdsZS16b25lL2NyZWF0ZS1zaW5nbGUtem9uZS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQXFCLFNBQVMsRUFBcUIsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNGLE9BQU8sRUFBMEIsVUFBVSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFHcEUsT0FBTyxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxNQUFNLENBQUM7Ozs7Ozs7QUFRMUMsTUFBTSxPQUFPLHlCQUF5QjtJQVkxQjtJQUNEO0lBQ0M7SUFDQTtJQUNBO0lBZlYsY0FBYyxDQUFZO0lBQzFCLGVBQWUsR0FBVSxFQUFFLENBQUM7SUFDNUIsU0FBUyxHQUFVLEVBQUUsQ0FBQztJQUN0QixrQkFBa0IsR0FBWSxLQUFLLENBQUM7SUFDcEMsUUFBUSxHQUFXLEVBQUUsQ0FBQztJQUN0QixVQUFVLEdBQVksS0FBSyxDQUFDO0lBQzVCLFFBQVEsR0FBUSxJQUFJLENBQUM7SUFDSixRQUFRLEdBQUcsSUFBSSxPQUFPLEVBQUUsQ0FBQztJQUNLLGFBQWEsQ0FBZTtJQUUzRSxZQUNVLEVBQWUsRUFDaEIsV0FBMkIsRUFDMUIsZ0JBQWtDLEVBQ2xD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TUFBTSxFQUFFLEtBQUssRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENoYW5nZURldGVjdG9yUmVmLCBDb21wb25lbnQsIE9uRGVzdHJveSwgT25Jbml0LCBWaWV3Q2hpbGQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgRm9ybUJ1aWxkZXIsIEZvcm1Hcm91cCwgVmFsaWRhdG9ycyB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHsgTmdiQWN0aXZlTW9kYWwsIE5nYkRyb3Bkb3duIH0gZnJvbSAnQG5nLWJvb3RzdHJhcC9uZy1ib290c3RyYXAnO1xyXG5pbXBvcnQgeyBDbGllbnRBcGlTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vLi4vc2VydmljZXMvY2xpZW50LWFwaS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgU3ViamVjdCwgdGFrZVVudGlsIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IFRvYXN0U2VydmljZSB9IGZyb20gJ3RhbmdvLWFwcC11aS1zaGFyZWQnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdsaWItY3JlYXRlLXNpbmdsZS16b25lJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vY3JlYXRlLXNpbmdsZS16b25lLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybDogJy4vY3JlYXRlLXNpbmdsZS16b25lLmNvbXBvbmVudC5zY3NzJ1xyXG59KVxyXG5leHBvcnQgY2xhc3MgQ3JlYXRlU2luZ2xlWm9uZUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcclxuICBjcmVhdGVab25lRm9ybTogRm9ybUdyb3VwO1xyXG4gIHpvbmVUYWdnaW5nTGlzdDogYW55W10gPSBbXTtcclxuICBncm91cExpc3Q6IGFueVtdID0gW107XHJcbiAgc2hvd0dyb3VwTmFtZUlucHV0OiBib29sZWFuID0gZmFsc2U7XHJcbiAgY2xpZW50SWQ6IHN0cmluZyA9ICcnO1xyXG4gIGlzRWRpdE1vZGU6IGJvb2xlYW4gPSBmYWxzZTtcclxuICB6b25lRGF0YTogYW55ID0gbnVsbDtcclxuICBwcml2YXRlIHJlYWRvbmx5IGRlc3Ryb3kkID0gbmV3IFN1YmplY3QoKTtcclxuICBAVmlld0NoaWxkKCdncm91cERyb3Bkb3duJywgeyBzdGF0aWM6IGZhbHNlIH0pIGdyb3VwRHJvcGRvd24hOiBOZ2JEcm9wZG93bjtcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIGZiOiBGb3JtQnVpbGRlcixcclxuICAgIHB1YmxpYyBhY3RpdmVNb2RhbDogTmdiQWN0aXZlTW9kYWwsXHJcbiAgICBwcml2YXRlIGNsaWVudEFwaVNlcnZpY2U6IENsaWVudEFwaVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIHRvYXN0U2VydmljZTogVG9hc3RTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBjZHI6IENoYW5nZURldGVjdG9yUmVmXHJcbiAgKSB7XHJcbiAgICB0aGlzLmNyZWF0ZVpvbmVGb3JtID0gdGhpcy5mYi5ncm91cCh7XHJcbiAgICAgIHpvbmVOYW1lOiBbJycsIFtcclxuICAgICAgICBWYWxpZGF0b3JzLnJlcXVpcmVkLFxyXG4gICAgICAgIFZhbGlkYXRvcnMubWluTGVuZ3RoKDEpLFxyXG4gICAgICAgIC8vIFZhbGlkYXRvcnMucGF0dGVybigvXig/IVxccyokKVthLXpBLVowLTlfXFxzXFwvLV0qJC8pXHJcbiAgICAgIF1dLFxyXG4gICAgICBzZWxlY3RlZEdyb3VwOiBbJyddLFxyXG4gICAgICBncm91cE5hbWU6IFsnJywgW1xyXG4gICAgICAgIFZhbGlkYXRvcnMubWluTGVuZ3RoKDEpLFxyXG4gICAgICAgIC8vIFZhbGlkYXRvcnMucGF0dGVybigvXig/IVxccyokKVthLXpBLVowLTlfXFxzXFwvLV0qJC8pXHJcbiAgICAgIF1dXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgLy8gSW5pdGlhbGl6ZSAtIGdyb3VwIG5hbWUgZmllbGQgc2hvdWxkIGJlIGhpZGRlbiBpbml0aWFsbHlcclxuICAgIHRoaXMuc2hvd0dyb3VwTmFtZUlucHV0ID0gZmFsc2U7XHJcbiAgICAvLyBFbnN1cmUgZm9ybSBjb250cm9scyBhcmUgbWFya2VkIGFzIHVudG91Y2hlZCB3aGVuIG1vZGFsIG9wZW5zXHJcbiAgICB0aGlzLmNyZWF0ZVpvbmVGb3JtLm1hcmtBc1VudG91Y2hlZCgpO1xyXG4gICAgdGhpcy5jcmVhdGVab25lRm9ybS5nZXQoJ3pvbmVOYW1lJyk/Lm1hcmtBc1VudG91Y2hlZCgpO1xyXG4gICAgdGhpcy5jcmVhdGVab25lRm9ybS5nZXQoJ3NlbGVjdGVkR3JvdXAnKT8ubWFya0FzVW50b3VjaGVkKCk7XHJcbiAgICB0aGlzLmNyZWF0ZVpvbmVGb3JtLmdldCgnZ3JvdXBOYW1lJyk/Lm1hcmtBc1VudG91Y2hlZCgpO1xyXG4gICAgLy8gR2V0IGNsaWVudCBJRFxyXG4gICAgdGhpcy5jbGllbnRBcGlTZXJ2aWNlLmNsaWVudERhdGEucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpLnN1YnNjcmliZSgoZSkgPT4ge1xyXG4gICAgICBpZiAoZSkge1xyXG4gICAgICAgIHRoaXMuY2xpZW50SWQgPSBlLmNsaWVudElkO1xyXG4gICAgICAgIHRoaXMubG9hZEdyb3VwcygpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgICAvLyBXYXRjaCBmb3IgZ3JvdXAgc2VsZWN0aW9uIGNoYW5nZXNcclxuICAgIHRoaXMuY3JlYXRlWm9uZUZvcm0uZ2V0KCdzZWxlY3RlZEdyb3VwJyk/LnZhbHVlQ2hhbmdlcy5waXBlKFxyXG4gICAgICB0YWtlVW50aWwodGhpcy5kZXN0cm95JClcclxuICAgICkuc3Vic2NyaWJlKCh2YWx1ZSkgPT4ge1xyXG4gICAgICAvLyBcImFkZE5ld1wiIGlzIGEgZGVmYXVsdCBvcHRpb24sIG5vdCBmcm9tIGdyb3VwTGlzdFxyXG4gICAgICBjb25zdCBncm91cE5hbWVDdHJsID0gdGhpcy5jcmVhdGVab25lRm9ybS5nZXQoJ2dyb3VwTmFtZScpO1xyXG5cclxuICAgICAgaWYgKHZhbHVlID09PSAnYWRkTmV3Jykge1xyXG4gICAgICAgIHRoaXMuc2hvd0dyb3VwTmFtZUlucHV0ID0gdHJ1ZTtcclxuICAgICAgICBncm91cE5hbWVDdHJsPy5zZXRWYWxpZGF0b3JzKFtcclxuICAgICAgICAgIFZhbGlkYXRvcnMucmVxdWlyZWQsXHJcbiAgICAgICAgICBWYWxpZGF0b3JzLm1pbkxlbmd0aCgxKSxcclxuICAgICAgICAgIC8vIFZhbGlkYXRvcnMucGF0dGVybigvXig/IVxccyokKVthLXpBLVowLTlfXFxzXFwvLV0qJC8pXHJcbiAgICAgICAgXSk7XHJcbiAgICAgICAgZ3JvdXBOYW1lQ3RybD8ucmVzZXQoJycsIHsgZW1pdEV2ZW50OiBmYWxzZSB9KTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLnNob3dHcm91cE5hbWVJbnB1dCA9IGZhbHNlO1xyXG4gICAgICAgIGdyb3VwTmFtZUN0cmw/LmNsZWFyVmFsaWRhdG9ycygpO1xyXG4gICAgICAgIGdyb3VwTmFtZUN0cmw/LnJlc2V0KCcnLCB7IGVtaXRFdmVudDogZmFsc2UgfSk7XHJcbiAgICAgIH1cclxuICAgICAgZ3JvdXBOYW1lQ3RybD8udXBkYXRlVmFsdWVBbmRWYWxpZGl0eSh7IGVtaXRFdmVudDogZmFsc2UgfSk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xyXG4gICAgdGhpcy5kZXN0cm95JC5uZXh0KHRydWUpO1xyXG4gICAgdGhpcy5kZXN0cm95JC5jb21wbGV0ZSgpO1xyXG4gIH1cclxuXHJcbiAgLy8gTWV0aG9kIHRvIGluaXRpYWxpemUgY29tcG9uZW50IGluIGVkaXQgbW9kZVxyXG4gIHNldFpvbmVEYXRhRm9yRWRpdCh6b25lOiBhbnkpOiB2b2lkIHtcclxuICAgIGNvbnNvbGUubG9nKCdzZXRab25lRGF0YUZvckVkaXQgOicsIHpvbmUpO1xyXG4gICAgdGhpcy5pc0VkaXRNb2RlID0gdHJ1ZTtcclxuICAgIHRoaXMuem9uZURhdGEgPSB6b25lO1xyXG4gICAgLy8gRW5zdXJlIGZvcm0gY29udHJvbHMgYXJlIG1hcmtlZCBhcyB1bnRvdWNoZWQgYmVmb3JlIHNldHRpbmcgdmFsdWVzXHJcbiAgICB0aGlzLmNyZWF0ZVpvbmVGb3JtLm1hcmtBc1VudG91Y2hlZCgpO1xyXG4gICAgdGhpcy5jcmVhdGVab25lRm9ybS5nZXQoJ3pvbmVOYW1lJyk/Lm1hcmtBc1VudG91Y2hlZCgpO1xyXG4gICAgdGhpcy5jcmVhdGVab25lRm9ybS5nZXQoJ3NlbGVjdGVkR3JvdXAnKT8ubWFya0FzVW50b3VjaGVkKCk7XHJcbiAgICB0aGlzLmNyZWF0ZVpvbmVGb3JtLmdldCgnZ3JvdXBOYW1lJyk/Lm1hcmtBc1VudG91Y2hlZCgpO1xyXG4gICAgY29uc3QgZ3JvdXBOYW1lQ3RybCA9IHRoaXMuY3JlYXRlWm9uZUZvcm0uZ2V0KCdncm91cE5hbWUnKTtcclxuXHJcbiAgICAvLyBSZXNldCBmb3JtIGNsZWFubHlcclxuICAgIHRoaXMuY3JlYXRlWm9uZUZvcm0ucmVzZXQoe1xyXG4gICAgICB6b25lTmFtZTogem9uZS50YWdOYW1lIHx8ICcnLFxyXG4gICAgICBzZWxlY3RlZEdyb3VwOiB6b25lLmdyb3VwTmFtZSB8fCAnJyxcclxuICAgICAgZ3JvdXBOYW1lOiAnJ1xyXG4gICAgfSwgeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xyXG5cclxuICAgIC8vIEVkaXQgbW9kZSDihpIgaGlkZSBncm91cCBuYW1lIGlucHV0IGluaXRpYWxseVxyXG4gICAgdGhpcy5zaG93R3JvdXBOYW1lSW5wdXQgPSBmYWxzZTtcclxuXHJcbiAgICAvLyBSZW1vdmUgdmFsaWRhdGlvbiBpbml0aWFsbHlcclxuICAgIGdyb3VwTmFtZUN0cmw/LmNsZWFyVmFsaWRhdG9ycygpO1xyXG4gICAgZ3JvdXBOYW1lQ3RybD8udXBkYXRlVmFsdWVBbmRWYWxpZGl0eSh7IGVtaXRFdmVudDogZmFsc2UgfSk7XHJcblxyXG4gICAgLy8gT3B0aW9uYWw6IG1hcmsgdW50b3VjaGVkIChnb29kIFVYKVxyXG4gICAgdGhpcy5jcmVhdGVab25lRm9ybS5tYXJrQXNVbnRvdWNoZWQoKTtcclxuXHJcbiAgICAvLyBGb3JjZSBVSSB1cGRhdGVcclxuICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcclxuICB9XHJcblxyXG4gIC8vIHRvIGxvYWQgZ3JvdXBzIGZvciBkcm9wZG93blxyXG4gIGxvYWRHcm91cHMoKTogdm9pZCB7XHJcbiAgICBpZiAoIXRoaXMuY2xpZW50SWQpIHJldHVybjtcclxuICAgIGNvbnN0IHBheWxvYWQ6IGFueSA9IHsgY2xpZW50SWQ6IHRoaXMuY2xpZW50SWQgfTtcclxuICAgIHRoaXMuY2xpZW50QXBpU2VydmljZS5nZXRab25lR3JvdXBEZXRhaWxzKHBheWxvYWQpLnBpcGUoXHJcbiAgICAgIHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKVxyXG4gICAgKS5zdWJzY3JpYmUoe1xyXG4gICAgICBuZXh0OiAocmVzOiBhbnkpID0+IHtcclxuICAgICAgICBpZiAocmVzICYmIHJlcy5jb2RlID09PSAyMDApIHtcclxuICAgICAgICAgIHRoaXMuZ3JvdXBMaXN0ID0gcmVzPy5kYXRhPy5yZXN1bHQuZmlsdGVyKChncnA6IGFueSkgPT4gZ3JwLmdyb3VwTmFtZSAhPT0gbnVsbCAmJiBncnAuZ3JvdXBOYW1lICE9PSB1bmRlZmluZWQpIHx8IFtdO1xyXG4gICAgICAgIH1cclxuICAgICAgfSxcclxuICAgICAgZXJyb3I6IChlcnI6IGFueSkgPT4ge1xyXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIHdoaWxlIGxvYWRHcm91cHM6OicsIGVycik7XHJcbiAgICAgICAgLy8gU2V0IGVtcHR5IGFycmF5IG9uIGVycm9yIHNvIGRyb3Bkb3duIHN0aWxsIHdvcmtzXHJcbiAgICAgICAgdGhpcy5ncm91cExpc3QgPSBbXTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBvbkNhbmNlbCgpOiB2b2lkIHtcclxuICAgIC8vIFJlc2V0IGZvcm0gc3RhdGUgd2hlbiBjYW5jZWxpbmdcclxuICAgIHRoaXMuY3JlYXRlWm9uZUZvcm0ucmVzZXQoKTtcclxuICAgIHRoaXMuY3JlYXRlWm9uZUZvcm0ubWFya0FzVW50b3VjaGVkKCk7XHJcbiAgICB0aGlzLmFjdGl2ZU1vZGFsLmNsb3NlKCk7XHJcbiAgfVxyXG5cclxuICBvblNhdmUoKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5jcmVhdGVab25lRm9ybS5pbnZhbGlkKSB7XHJcbiAgICAgIHRoaXMuY3JlYXRlWm9uZUZvcm0ubWFya0FsbEFzVG91Y2hlZCgpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgZm9ybVZhbHVlID0gdGhpcy5jcmVhdGVab25lRm9ybS52YWx1ZTtcclxuICAgIFxyXG4gICAgLy8gVmFsaWRhdGUgem9uZU5hbWUgJiBncm91cCBwYXR0ZXJuXHJcbiAgICAvLyBsZXQgcGF0dGVybiA9IC9eW2EtekEtWjAtOV9cXHNcXC8tXSokLztcclxuICAgIC8vIGlmICghZm9ybVZhbHVlLnpvbmVOYW1lLm1hdGNoKHBhdHRlcm4pIHx8IFxyXG4gICAgLy8gKGZvcm1WYWx1ZS5zZWxlY3RlZEdyb3VwID09PSAnYWRkTmV3JyAmJiAhZm9ybVZhbHVlLmdyb3VwTmFtZS5tYXRjaChwYXR0ZXJuKSkpIHtcclxuICAgIC8vICAgdGhpcy50b2FzdFNlcnZpY2UuZ2V0RXJyb3JUb2FzdCgnU3BlY2lhbCBjaGFyYWN0ZXJzIGFyZSBub3QgYWxsb3dlZCcpO1xyXG4gICAgLy8gICByZXR1cm47XHJcbiAgICAvLyB9XHJcbiAgICBsZXQgcGF5bG9hZDogYW55ID0ge1xyXG4gICAgICBjbGllbnRJZDogdGhpcy5jbGllbnRJZCxcclxuICAgICAgcHJvZHVjdE5hbWU6ICd0YW5nb1pvbmUnXHJcbiAgICB9O1xyXG4gICAgY29uc29sZS5sb2coJ3BheWxvYWQgYmVmb3JlIGVkaXQgY2hlY2sgOicsIHBheWxvYWQpO1xyXG4gICAgaWYgKHRoaXMuaXNFZGl0TW9kZSAmJiB0aGlzLnpvbmVEYXRhPy50YWdOYW1lKSB7XHJcbiAgICAgIGlmICh0aGlzLnpvbmVEYXRhLnRhZ05hbWUgIT09IGZvcm1WYWx1ZS56b25lTmFtZSkge1xyXG4gICAgICAgIHBheWxvYWQub2xkVGFnID0gdGhpcy56b25lRGF0YS50YWdOYW1lO1xyXG4gICAgICAgIHBheWxvYWQudGFnTmFtZSA9IGZvcm1WYWx1ZS56b25lTmFtZS50cmltKCk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgLy8gVGFnIG5hbWUgdW5jaGFuZ2VkXHJcbiAgICAgICAgcGF5bG9hZC50YWdOYW1lID0gdGhpcy56b25lRGF0YS50YWdOYW1lO1xyXG4gICAgICB9XHJcbiAgICAgIHBheWxvYWQuX2lkID0gdGhpcy56b25lRGF0YT8uX2lkXHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBjb25zdCBjb2xvcnMgPSB0aGlzLmdlbmVyYXRlUmFuZG9tQ29sb3IoKTtcclxuICAgICAgcGF5bG9hZC50YWdOYW1lID0gZm9ybVZhbHVlLnpvbmVOYW1lLnRyaW0oKTsgXHJcbiAgICAgIHBheWxvYWQucmdiQ29sb3IgPSBjb2xvcnMucmdiQ29sb3I7XHJcbiAgICAgIHBheWxvYWQucmdiQm9yZGVyQ29sb3IgPSBjb2xvcnMucmdiQm9yZGVyQ29sb3I7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gSWYgYSBncm91cCBpcyBzZWxlY3RlZCAobm90IFwiQWRkIE5ld1wiKVxyXG4gICAgaWYgKGZvcm1WYWx1ZS5zZWxlY3RlZEdyb3VwICYmIGZvcm1WYWx1ZS5zZWxlY3RlZEdyb3VwICE9PSAnYWRkTmV3Jykge1xyXG4gICAgICBwYXlsb2FkLmdyb3VwTmFtZSA9IGZvcm1WYWx1ZS5zZWxlY3RlZEdyb3VwO1xyXG4gICAgICBwYXlsb2FkLmlzRXhpc3RpbmdHcm91cCA9IHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gSWYgXCJBZGQgTmV3XCIgaXMgc2VsZWN0ZWQsIGluY2x1ZGUgdGhlIG5ldyBncm91cCBuYW1lXHJcbiAgICBpZiAoZm9ybVZhbHVlLnNlbGVjdGVkR3JvdXAgPT09ICdhZGROZXcnICYmIGZvcm1WYWx1ZS5ncm91cE5hbWUpIHtcclxuICAgICAgcGF5bG9hZC5ncm91cE5hbWUgPSBmb3JtVmFsdWUuZ3JvdXBOYW1lLnRyaW0oKTtcclxuICAgICAgcGF5bG9hZC5pc0V4aXN0aW5nR3JvdXAgPSBmYWxzZTtcclxuICAgIH1cclxuICAgIGNvbnNvbGUubG9nKCdvblNhdmUgcGF5bG9hZCA6JywgcGF5bG9hZCk7XHJcbiAgICBpZiAoIXRoaXMuaXNFZGl0TW9kZSkge1xyXG4gICAgICB0aGlzLmNsaWVudEFwaVNlcnZpY2UuYWRkWm9uZUNvbmZpZ0N1c3RvbVRhZyhwYXlsb2FkKS5waXBlKFxyXG4gICAgICAgIHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKVxyXG4gICAgICApLnN1YnNjcmliZSh7XHJcbiAgICAgICAgbmV4dDogKHJlczogYW55KSA9PiB7XHJcbiAgICAgICAgICBpZiAocmVzICYmIHJlcy5jb2RlID09PSAyMDApIHtcclxuICAgICAgICAgICAgY29uc3QgbWVzc2FnZSA9ICdab25lIGNyZWF0ZWQgc3VjY2Vzc2Z1bGx5JztcclxuICAgICAgICAgICAgdGhpcy50b2FzdFNlcnZpY2UuZ2V0U3VjY2Vzc1RvYXN0KG1lc3NhZ2UpO1xyXG4gICAgICAgICAgICB0aGlzLmFjdGl2ZU1vZGFsLmNsb3NlKHtcclxuICAgICAgICAgICAgICB0eXBlOiAnY3JlYXRlZCcsXHJcbiAgICAgICAgICAgICAgZGF0YTogcmVzLmRhdGFcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBjb25zdCBlcnJvck1zZyA9ICdGYWlsZWQgdG8gY3JlYXRlIHpvbmUnO1xyXG4gICAgICAgICAgICB0aGlzLnRvYXN0U2VydmljZS5nZXRFcnJvclRvYXN0KHJlcy5tZXNzYWdlIHx8IGVycm9yTXNnKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG4gICAgICAgIGVycm9yOiAoZXJyOiBhbnkpID0+IHtcclxuICAgICAgICAgIGNvbnN0IGVycm9yTXNnID0gJ0ZhaWxlZCB0byBjcmVhdGUgem9uZSc7XHJcbiAgICAgICAgICB0aGlzLnRvYXN0U2VydmljZS5nZXRFcnJvclRvYXN0KGVyci5lcnJvcj8uZXJyb3IgfHwgZXJyb3JNc2cpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICB9IGVsc2UgaWYgKHRoaXMuaXNFZGl0TW9kZSAmJiB0aGlzLnpvbmVEYXRhKSB7XHJcbiAgICAgIHRoaXMuY2xpZW50QXBpU2VydmljZS51cGRhdGVab25lQ29uZmlnQ3VzdG9tVGFnKHBheWxvYWQpLnBpcGUoXHJcbiAgICAgICAgdGFrZVVudGlsKHRoaXMuZGVzdHJveSQpXHJcbiAgICAgICkuc3Vic2NyaWJlKHtcclxuICAgICAgICBuZXh0OiAocmVzOiBhbnkpID0+IHtcclxuICAgICAgICAgIGlmIChyZXMgJiYgcmVzLmNvZGUgPT09IDIwMCkge1xyXG4gICAgICAgICAgICBjb25zdCBtZXNzYWdlID0gJ1pvbmUgdXBkYXRlZCBzdWNjZXNzZnVsbHknO1xyXG4gICAgICAgICAgICB0aGlzLnRvYXN0U2VydmljZS5nZXRTdWNjZXNzVG9hc3QobWVzc2FnZSk7XHJcbiAgICAgICAgICAgIHRoaXMuYWN0aXZlTW9kYWwuY2xvc2Uoe1xyXG4gICAgICAgICAgICAgIHR5cGU6ICd1cGRhdGVkJyxcclxuICAgICAgICAgICAgICBkYXRhOiByZXMuZGF0YVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgdGhpcy5pc0VkaXRNb2RlID0gZmFsc2U7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBjb25zdCBlcnJvck1zZyA9ICdGYWlsZWQgdG8gdXBkYXRlIHpvbmUnO1xyXG4gICAgICAgICAgICB0aGlzLnRvYXN0U2VydmljZS5nZXRFcnJvclRvYXN0KHJlcy5tZXNzYWdlIHx8IGVycm9yTXNnKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG4gICAgICAgIGVycm9yOiAoZXJyOiBhbnkpID0+IHtcclxuICAgICAgICAgIGNvbnN0IGVycm9yTXNnID0gJ0ZhaWxlZCB0byB1cGRhdGUgem9uZSc7XHJcbiAgICAgICAgICB0aGlzLnRvYXN0U2VydmljZS5nZXRFcnJvclRvYXN0KGVyci5lcnJvcj8uZXJyb3IgfHwgZXJyb3JNc2cpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gIH1cclxuXHJcbiAgLy8gQWxpYXMgZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHlcclxuICBvbkNyZWF0ZSgpOiB2b2lkIHtcclxuICAgIHRoaXMub25TYXZlKCk7XHJcbiAgfVxyXG5cclxuICBnZW5lcmF0ZVJhbmRvbUNvbG9yKCkge1xyXG4gICAgY29uc3QgcmVkOiBhbnkgPSBNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiAyNTYpO1xyXG4gICAgY29uc3QgZ3JlZW46IGFueSA9IE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIDI1Nik7XHJcbiAgICBjb25zdCBibHVlOiBhbnkgPSBNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiAyNTYpO1xyXG4gICAgY29uc3QgcmdiQ29sb3IgPSBgcmdiYSgke3JlZH0sICR7Z3JlZW59LCAke2JsdWV9LCAwLjUpYDtcclxuICAgIGNvbnN0IHJnYkJvcmRlckNvbG9yID0gYHJnYigke3BhcnNlSW50KHJlZCkgKyAxMH0sICR7cGFyc2VJbnQoZ3JlZW4pICsgMTB9LCAke3BhcnNlSW50KGJsdWUpICsgMTB9KWA7XHJcbiAgICByZXR1cm4geyByZ2JDb2xvciwgcmdiQm9yZGVyQ29sb3IgfVxyXG4gIH1cclxuXHJcbiAgLy8gTWV0aG9kIHRvIGdldCBkaXNwbGF5IHRleHQgZm9yIHNlbGVjdGVkIGdyb3VwXHJcbiAgZ2V0U2VsZWN0ZWRHcm91cERpc3BsYXkoKTogc3RyaW5nIHtcclxuICAgIGNvbnN0IHNlbGVjdGVkVmFsdWUgPSB0aGlzLmNyZWF0ZVpvbmVGb3JtLmdldCgnc2VsZWN0ZWRHcm91cCcpPy52YWx1ZTtcclxuICAgIGlmICghc2VsZWN0ZWRWYWx1ZSkge1xyXG4gICAgICByZXR1cm4gJ1NlbGVjdCc7XHJcbiAgICB9XHJcbiAgICBpZiAoc2VsZWN0ZWRWYWx1ZSA9PT0gJ2FkZE5ldycpIHtcclxuICAgICAgcmV0dXJuICcrIEFkZCBOZXcnO1xyXG4gICAgfVxyXG4gICAgY29uc3Qgc2VsZWN0ZWRHcm91cCA9IHRoaXMuZ3JvdXBMaXN0LmZpbmQoZyA9PiBnLmdyb3VwTmFtZSA9PT0gc2VsZWN0ZWRWYWx1ZSk7XHJcbiAgICByZXR1cm4gc2VsZWN0ZWRHcm91cCA/IHNlbGVjdGVkR3JvdXAuZ3JvdXBOYW1lIDogJ1NlbGVjdCc7XHJcbiAgfVxyXG5cclxuICAvLyBNZXRob2QgdG8gaGFuZGxlIGdyb3VwIHNlbGVjdGlvblxyXG4gIHNlbGVjdEdyb3VwKHZhbHVlOiBzdHJpbmcsIGV2ZW50PzogRXZlbnQpOiB2b2lkIHtcclxuICAgIGlmIChldmVudCkge1xyXG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcclxuICAgIH1cclxuICAgIHRoaXMuY3JlYXRlWm9uZUZvcm0uZ2V0KCdzZWxlY3RlZEdyb3VwJyk/LnNldFZhbHVlKHZhbHVlKTtcclxuICAgIHRoaXMuY3JlYXRlWm9uZUZvcm0uZ2V0KCdzZWxlY3RlZEdyb3VwJyk/Lm1hcmtBc1RvdWNoZWQoKTtcclxuICAgIC8vIENsb3NlIGRyb3Bkb3duIGFmdGVyIHNlbGVjdGlvblxyXG4gICAgaWYgKHRoaXMuZ3JvdXBEcm9wZG93bikge1xyXG4gICAgICB0aGlzLmdyb3VwRHJvcGRvd24uY2xvc2UoKTtcclxuICAgIH1cclxuICB9XHJcbn1cclxuXHJcbiIsIjxkaXYgY2xhc3M9XCJjcmVhdGUtem9uZS1tb2RhbFwiPlxyXG4gIDxmb3JtIFtmb3JtR3JvdXBdPVwiY3JlYXRlWm9uZUZvcm1cIiBhdXRvY29tcGxldGU9XCJvZmZcIj5cclxuICAgIDwhLS0gSGVhZGVyIC0tPlxyXG4gICAgPGRpdiBjbGFzcz1cIm1vZGFsLWhlYWRlci1jdXN0b20gbWItNFwiPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlclwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJoZWFkZXItaWNvbiBtZS0zXCI+XHJcbiAgICAgICAgICA8c3ZnICpuZ0lmPVwiIWlzRWRpdE1vZGVcIiB3aWR0aD1cIjI0XCIgaGVpZ2h0PVwiMjRcIiB2aWV3Qm94PVwiMCAwIDI0IDI0XCIgZmlsbD1cIm5vbmVcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+XHJcbiAgICAgICAgICAgIDxjaXJjbGUgY3g9XCIxMlwiIGN5PVwiMTJcIiByPVwiMTBcIiBmaWxsPVwiIzAwQTNGRlwiIC8+XHJcbiAgICAgICAgICAgIDxwYXRoIGQ9XCJNMTIgOFYxNk04IDEySDE2XCIgc3Ryb2tlPVwid2hpdGVcIiBzdHJva2Utd2lkdGg9XCIyXCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgLz5cclxuICAgICAgICAgIDwvc3ZnPlxyXG4gICAgICAgICAgPHN2ZyAqbmdJZj1cImlzRWRpdE1vZGVcIiB3aWR0aD1cIjU2XCIgaGVpZ2h0PVwiNTZcIiB2aWV3Qm94PVwiMCAwIDU2IDU2XCIgZmlsbD1cIm5vbmVcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+XHJcbiAgICAgICAgICAgIDxyZWN0IHg9XCI0XCIgeT1cIjRcIiB3aWR0aD1cIjQ4XCIgaGVpZ2h0PVwiNDhcIiByeD1cIjI0XCIgZmlsbD1cIiNEQUYxRkZcIi8+XHJcbiAgICAgICAgICAgIDxyZWN0IHg9XCI0XCIgeT1cIjRcIiB3aWR0aD1cIjQ4XCIgaGVpZ2h0PVwiNDhcIiByeD1cIjI0XCIgc3Ryb2tlPVwiI0VBRjhGRlwiIHN0cm9rZS13aWR0aD1cIjhcIi8+XHJcbiAgICAgICAgICAgIDxwYXRoIGQ9XCJNMjcgMjAuMDAwMkgyMEMxOS40Njk2IDIwLjAwMDIgMTguOTYwOSAyMC4yMTA5IDE4LjU4NTggMjAuNTg2QzE4LjIxMDcgMjAuOTYxMSAxOCAyMS40Njk4IDE4IDIyLjAwMDJWMzYuMDAwMkMxOCAzNi41MzA3IDE4LjIxMDcgMzcuMDM5NCAxOC41ODU4IDM3LjQxNDRDMTguOTYwOSAzNy43ODk1IDE5LjQ2OTYgMzguMDAwMiAyMCAzOC4wMDAySDM0QzM0LjUzMDQgMzguMDAwMiAzNS4wMzkxIDM3Ljc4OTUgMzUuNDE0MiAzNy40MTQ0QzM1Ljc4OTMgMzcuMDM5NCAzNiAzNi41MzA3IDM2IDM2LjAwMDJWMjkuMDAwMk0zNC41IDE4LjUwMDJDMzQuODk3OCAxOC4xMDI0IDM1LjQzNzQgMTcuODc4OSAzNiAxNy44Nzg5QzM2LjU2MjYgMTcuODc4OSAzNy4xMDIyIDE4LjEwMjQgMzcuNSAxOC41MDAyQzM3Ljg5NzggMTguODk4MSAzOC4xMjEzIDE5LjQzNzYgMzguMTIxMyAyMC4wMDAyQzM4LjEyMTMgMjAuNTYyOCAzNy44OTc4IDIxLjEwMjQgMzcuNSAyMS41MDAyTDI4IDMxLjAwMDJMMjQgMzIuMDAwMkwyNSAyOC4wMDAyTDM0LjUgMTguNTAwMlpcIiBzdHJva2U9XCIjMDBBM0ZGXCIgc3Ryb2tlLXdpZHRoPVwiMlwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiLz5cclxuICAgICAgICAgICAgPC9zdmc+IFxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxoNCBjbGFzcz1cIm1vZGFsLXRpdGxlIG1iLTBcIj57eyBpc0VkaXRNb2RlID8gJ0VkaXQnIDogJ0NyZWF0ZScgfX08L2g0PlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG5cclxuICAgIDwhLS0gWm9uZSBOYW1lIElucHV0IC0tPlxyXG4gICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXAgbWItNFwiPlxyXG4gICAgICA8IS0tIDxzcGFuIGNsYXNzPVwidGV4dC1kYW5nZXJcIj4qPC9zcGFuPiAtLT5cclxuICAgICAgPGxhYmVsIGZvcj1cInpvbmVOYW1lXCIgY2xhc3M9XCJmb3JtLWxhYmVsXCI+Wm9uZSBOYW1lPC9sYWJlbD5cclxuICAgICAgPGlucHV0IFxyXG4gICAgICAgIHR5cGU9XCJ0ZXh0XCIgXHJcbiAgICAgICAgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiBcclxuICAgICAgICBpZD1cInpvbmVOYW1lXCJcclxuICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJ6b25lTmFtZVwiXHJcbiAgICAgICAgcGxhY2Vob2xkZXI9XCJFbnRlciB6b25lIG5hbWVcIlxyXG4gICAgICAgIGF1dG9jb21wbGV0ZT1cIm9mZlwiXHJcbiAgICAgICAgW2NsYXNzLmlzLWludmFsaWRdPVwiY3JlYXRlWm9uZUZvcm0uZ2V0KCd6b25lTmFtZScpPy5pbnZhbGlkICYmIGNyZWF0ZVpvbmVGb3JtLmdldCgnem9uZU5hbWUnKT8udG91Y2hlZCAmJiAhY3JlYXRlWm9uZUZvcm0uZ2V0KCd6b25lTmFtZScpPy5wcmlzdGluZVwiPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwiaW52YWxpZC1mZWVkYmFja1wiICpuZ0lmPVwiY3JlYXRlWm9uZUZvcm0uZ2V0KCd6b25lTmFtZScpPy5pbnZhbGlkICYmIGNyZWF0ZVpvbmVGb3JtLmdldCgnem9uZU5hbWUnKT8udG91Y2hlZCAmJiAhY3JlYXRlWm9uZUZvcm0uZ2V0KCd6b25lTmFtZScpPy5wcmlzdGluZVwiPlxyXG4gICAgICAgIDxzcGFuICpuZ0lmPVwiY3JlYXRlWm9uZUZvcm0uZ2V0KCd6b25lTmFtZScpPy5lcnJvcnM/LlsncmVxdWlyZWQnXVwiPlpvbmUgbmFtZSBpcyByZXF1aXJlZDwvc3Bhbj5cclxuICAgICAgICA8c3BhbiAqbmdJZj1cImNyZWF0ZVpvbmVGb3JtLmdldCgnem9uZU5hbWUnKT8uZXJyb3JzPy5bJ21pbmxlbmd0aCddXCI+Wm9uZSBuYW1lIG11c3QgYmUgYXQgbGVhc3QgMSBjaGFyYWN0ZXI8L3NwYW4+XHJcbiAgICAgICAgPHNwYW4gKm5nSWY9XCJjcmVhdGVab25lRm9ybS5nZXQoJ3pvbmVOYW1lJyk/LmVycm9ycz8uWydwYXR0ZXJuJ11cIj5cclxuICAgICAgICAgIFNwZWNpYWwgY2hhcmFjdGVycyBhcmUgbm90IGFsbG93ZWRcclxuICAgICAgICA8L3NwYW4+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcblxyXG4gICAgPCEtLSBBZGQgdG8gR3JvdXAgRHJvcGRvd24gLS0+XHJcbiAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cCBtYi00XCI+XHJcbiAgICAgIDxsYWJlbCBmb3I9XCJzZWxlY3RlZEdyb3VwXCIgY2xhc3M9XCJmb3JtLWxhYmVsXCI+QWRkIHRvIEdyb3VwIChPcHRpb25hbCk8L2xhYmVsPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwiY3VzdG9tLXNlbGVjdC13cmFwcGVyXCIgbmdiRHJvcGRvd24gI2dyb3VwRHJvcGRvd249XCJuZ2JEcm9wZG93blwiPlxyXG4gICAgICAgIDxidXR0b24gXHJcbiAgICAgICAgICBjbGFzcz1cImZvcm0tc2VsZWN0IGN1c3RvbS1zZWxlY3QtYnV0dG9uXCIgXHJcbiAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcclxuICAgICAgICAgIGlkPVwic2VsZWN0ZWRHcm91cFwiXHJcbiAgICAgICAgICBuZ2JEcm9wZG93blRvZ2dsZVxyXG4gICAgICAgICAgW2NsYXNzLmlzLWludmFsaWRdPVwiY3JlYXRlWm9uZUZvcm0uZ2V0KCdzZWxlY3RlZEdyb3VwJyk/LmludmFsaWQgJiYgY3JlYXRlWm9uZUZvcm0uZ2V0KCdzZWxlY3RlZEdyb3VwJyk/LnRvdWNoZWQgJiYgIWNyZWF0ZVpvbmVGb3JtLmdldCgnc2VsZWN0ZWRHcm91cCcpPy5wcmlzdGluZVwiPlxyXG4gICAgICAgICAge3sgZ2V0U2VsZWN0ZWRHcm91cERpc3BsYXkoKSB9fVxyXG4gICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgIDx1bCBjbGFzcz1cImRyb3Bkb3duLW1lbnUgY3VzdG9tLWRyb3Bkb3duLW1lbnVcIiBuZ2JEcm9wZG93bk1lbnU+XHJcbiAgICAgICAgICA8bGk+XHJcbiAgICAgICAgICAgIDxhIGNsYXNzPVwiZHJvcGRvd24taXRlbVwiIFxyXG4gICAgICAgICAgICAgICAoY2xpY2spPVwic2VsZWN0R3JvdXAoJycsICRldmVudClcIlxyXG4gICAgICAgICAgICAgICBbY2xhc3MuYWN0aXZlXT1cIiFjcmVhdGVab25lRm9ybS5nZXQoJ3NlbGVjdGVkR3JvdXAnKT8udmFsdWVcIj5cclxuICAgICAgICAgICAgICBTZWxlY3RcclxuICAgICAgICAgICAgPC9hPlxyXG4gICAgICAgICAgPC9saT5cclxuICAgICAgICAgIDxsaSAqbmdJZj1cIiFpc0VkaXRNb2RlXCI+XHJcbiAgICAgICAgICAgIDxhIGNsYXNzPVwiZHJvcGRvd24taXRlbVwiIFxyXG4gICAgICAgICAgICAgICAoY2xpY2spPVwic2VsZWN0R3JvdXAoJ2FkZE5ldycsICRldmVudClcIlxyXG4gICAgICAgICAgICAgICBbY2xhc3MuYWN0aXZlXT1cImNyZWF0ZVpvbmVGb3JtLmdldCgnc2VsZWN0ZWRHcm91cCcpPy52YWx1ZSA9PT0gJ2FkZE5ldydcIj5cclxuICAgICAgICAgICAgICArIEFkZCBOZXdcclxuICAgICAgICAgICAgPC9hPlxyXG4gICAgICAgICAgPC9saT5cclxuICAgICAgICAgIDxsaSAqbmdGb3I9XCJsZXQgZ3JvdXAgb2YgZ3JvdXBMaXN0XCI+XHJcbiAgICAgICAgICAgIDxhIGNsYXNzPVwiZHJvcGRvd24taXRlbVwiIFxyXG4gICAgICAgICAgICAgICAoY2xpY2spPVwic2VsZWN0R3JvdXAoZ3JvdXAuZ3JvdXBOYW1lLCAkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAgW2NsYXNzLmFjdGl2ZV09XCJjcmVhdGVab25lRm9ybS5nZXQoJ3NlbGVjdGVkR3JvdXAnKT8udmFsdWUgPT09IGdyb3VwLmdyb3VwTmFtZVwiPlxyXG4gICAgICAgICAgICAgIHt7IGdyb3VwLmdyb3VwTmFtZSB9fVxyXG4gICAgICAgICAgICA8L2E+XHJcbiAgICAgICAgICA8L2xpPlxyXG4gICAgICAgIDwvdWw+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICA8aW5wdXQgXHJcbiAgICAgICAgdHlwZT1cImhpZGRlblwiIFxyXG4gICAgICAgIGZvcm1Db250cm9sTmFtZT1cInNlbGVjdGVkR3JvdXBcIlxyXG4gICAgICAgIGlkPVwic2VsZWN0ZWRHcm91cEhpZGRlblwiPlxyXG4gICAgPC9kaXY+XHJcblxyXG4gICAgPCEtLSBFbnRlciBHcm91cCBOYW1lIElucHV0IChzaG93biB3aGVuIEFkZCBOZXcgaXMgc2VsZWN0ZWQpIC0tPlxyXG4gICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXAgbWItNFwiICpuZ0lmPVwic2hvd0dyb3VwTmFtZUlucHV0XCI+XHJcbiAgICAgIDwhLS0gPHNwYW4gY2xhc3M9XCJ0ZXh0LWRhbmdlclwiPio8L3NwYW4+IC0tPlxyXG4gICAgICA8bGFiZWwgZm9yPVwiZ3JvdXBOYW1lXCIgY2xhc3M9XCJmb3JtLWxhYmVsXCI+RW50ZXIgR3JvdXAgTmFtZTwvbGFiZWw+XHJcbiAgICAgIDxpbnB1dCBcclxuICAgICAgICB0eXBlPVwidGV4dFwiIFxyXG4gICAgICAgIGNsYXNzPVwiZm9ybS1jb250cm9sXCIgXHJcbiAgICAgICAgaWQ9XCJncm91cE5hbWVcIlxyXG4gICAgICAgIGZvcm1Db250cm9sTmFtZT1cImdyb3VwTmFtZVwiXHJcbiAgICAgICAgcGxhY2Vob2xkZXI9XCJFbnRlciBncm91cCBuYW1lXCJcclxuICAgICAgICBhdXRvY29tcGxldGU9XCJvZmZcIlxyXG4gICAgICAgIFtjbGFzcy5pcy1pbnZhbGlkXT1cImNyZWF0ZVpvbmVGb3JtLmdldCgnZ3JvdXBOYW1lJyk/LmludmFsaWQgJiYgY3JlYXRlWm9uZUZvcm0uZ2V0KCdncm91cE5hbWUnKT8udG91Y2hlZCAmJiAhY3JlYXRlWm9uZUZvcm0uZ2V0KCdncm91cE5hbWUnKT8ucHJpc3RpbmVcIj5cclxuICAgICAgPGRpdiBjbGFzcz1cImludmFsaWQtZmVlZGJhY2tcIiAqbmdJZj1cImNyZWF0ZVpvbmVGb3JtLmdldCgnZ3JvdXBOYW1lJyk/LmludmFsaWQgJiYgY3JlYXRlWm9uZUZvcm0uZ2V0KCdncm91cE5hbWUnKT8udG91Y2hlZCAmJiAhY3JlYXRlWm9uZUZvcm0uZ2V0KCdncm91cE5hbWUnKT8ucHJpc3RpbmVcIj5cclxuICAgICAgICA8c3BhbiAqbmdJZj1cImNyZWF0ZVpvbmVGb3JtLmdldCgnZ3JvdXBOYW1lJyk/LmVycm9ycz8uWydyZXF1aXJlZCddXCI+R3JvdXAgbmFtZSBpcyByZXF1aXJlZDwvc3Bhbj5cclxuICAgICAgICA8c3BhbiAqbmdJZj1cImNyZWF0ZVpvbmVGb3JtLmdldCgnZ3JvdXBOYW1lJyk/LmVycm9ycz8uWydtaW5sZW5ndGgnXVwiPkdyb3VwIG5hbWUgbXVzdCBiZSBhdCBsZWFzdCAzIGNoYXJhY3RlcnM8L3NwYW4+XHJcbiAgICAgICAgPHNwYW4gKm5nSWY9XCJjcmVhdGVab25lRm9ybS5nZXQoJ2dyb3VwTmFtZScpPy5lcnJvcnM/LlsncGF0dGVybiddXCI+XHJcbiAgICAgICAgICBTcGVjaWFsIGNoYXJhY3RlcnMgYXJlIG5vdCBhbGxvd2VkXHJcbiAgICAgICAgPC9zcGFuPlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG5cclxuICAgIDwhLS0gQWN0aW9uIEJ1dHRvbnMgLS0+XHJcbiAgICA8ZGl2IGNsYXNzPVwibW9kYWwtZm9vdGVyLWN1c3RvbSBtdC00XCI+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggZ2FwLTMganVzdGlmeS1jb250ZW50LWVuZFwiPlxyXG4gICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGJ0bi1vdXRsaW5lXCIgKGNsaWNrKT1cIm9uQ2FuY2VsKClcIj5DYW5jZWw8L2J1dHRvbj5cclxuICAgICAgICA8YnV0dG9uIFxyXG4gICAgICAgICAgdHlwZT1cImJ1dHRvblwiIFxyXG4gICAgICAgICAgY2xhc3M9XCJidG4gYnRuLXByaW1hcnlcIiBcclxuICAgICAgICAgIChjbGljayk9XCJvblNhdmUoKVwiXHJcbiAgICAgICAgICBbZGlzYWJsZWRdPVwiY3JlYXRlWm9uZUZvcm0uaW52YWxpZFwiPlxyXG4gICAgICAgICAge3sgaXNFZGl0TW9kZSA/ICdVcGRhdGUnIDogJ0NyZWF0ZScgfX1cclxuICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICA8L2Zvcm0+XHJcbjwvZGl2PlxyXG5cclxuIl19