otimus-library 0.2.90 → 0.2.92

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,5 +1,5 @@
1
1
  import { CommonModule } from '@angular/common';
2
- import { ChangeDetectionStrategy, Component, ContentChild, EventEmitter, HostBinding, Input, Output, ViewChild, } from '@angular/core';
2
+ import { ChangeDetectionStrategy, Component, ContentChild, EventEmitter, HostBinding, Input, Output, ViewChild, ViewChildren, } from '@angular/core';
3
3
  import { FormsModule } from '@angular/forms';
4
4
  import { InternationalizationService } from '../../services/internationalization.service';
5
5
  import * as i0 from "@angular/core";
@@ -242,22 +242,36 @@ export class OcAutocompleteComponent {
242
242
  const hasMoreThanZero = this.ocData.filter((data) => !!data.counter);
243
243
  this.ocCounterSelectChange.emit(hasMoreThanZero);
244
244
  }
245
+ moveSelection(delta) {
246
+ this.selectedIndex = Math.max(0, Math.min(this.listOptionsElements.length - 1, this.selectedIndex + delta));
247
+ const element = this.listOptionsElements.get(this.selectedIndex)?.nativeElement;
248
+ if (element) {
249
+ element.scrollIntoView({ behavior: 'smooth', block: 'nearest' });
250
+ }
251
+ }
245
252
  onKeyDown(event) {
246
- if (this.ocEnableKeyboard && this.isOptionsShown) {
253
+ if (this.ocEnableKeyboard) {
247
254
  const e = event;
248
- if (e.key === 'ArrowUp') {
249
- this.selectedIndex = Math.max(this.selectedIndex - 1, 0);
250
- }
251
- else if (e.key === 'ArrowDown') {
252
- this.selectedIndex = Math.min(this.selectedIndex + 1, this.filteredData.length - 1);
253
- }
254
- else if (e.key === 'Enter') {
255
- this.selectValue(this.filteredData[this.selectedIndex].value);
255
+ if (this.isOptionsShown) {
256
+ if (e.key === 'ArrowUp') {
257
+ this.moveSelection(-1);
258
+ }
259
+ else if (e.key === 'ArrowDown') {
260
+ this.moveSelection(1);
261
+ }
262
+ else if (e.key === 'Enter') {
263
+ this.selectValue(this.filteredData[this.selectedIndex].value);
264
+ }
265
+ else {
266
+ return;
267
+ }
256
268
  }
269
+ e.preventDefault();
270
+ e.stopPropagation();
257
271
  }
258
272
  }
259
273
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: OcAutocompleteComponent, deps: [{ token: i0.Renderer2 }, { token: i0.ElementRef }, { token: i1.InternationalizationService }, { token: i2.StyleThemeService }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component }); }
260
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: OcAutocompleteComponent, isStandalone: true, selector: "oc-autocomplete", inputs: { ocData: "ocData", ocPlaceholder: "ocPlaceholder", ocError: "ocError", ocSize: "ocSize", ocValue: "ocValue", ocClearOnChange: "ocClearOnChange", ocWidth: "ocWidth", ocMinWidth: "ocMinWidth", ocMaxWidth: "ocMaxWidth", ocOptionsMaxHeight: "ocOptionsMaxHeight", ocOptionsWidth: "ocOptionsWidth", ocRequired: "ocRequired", ocMaxResults: "ocMaxResults", ocAllowNotListedValue: "ocAllowNotListedValue", ocNoAvailableOptionsText: "ocNoAvailableOptionsText", ocTypeForMoreResultsText: "ocTypeForMoreResultsText", ocLoading: "ocLoading", ocSemanticLike: "ocSemanticLike", ocStyle: "ocStyle", ocTabIndex: "ocTabIndex", iconSize: "iconSize", ocSelectByTyping: "ocSelectByTyping", ocDisabled: "ocDisabled", ocType: "ocType", ocHasDeleteButton: "ocHasDeleteButton", ocEnableKeyboard: "ocEnableKeyboard" }, outputs: { ocValueChange: "ocValueChange", ocChange: "ocChange", ocCounterSelectChange: "ocCounterSelectChange", ocOptionNotFound: "ocOptionNotFound", ocClick: "ocClick" }, host: { properties: { "style.width": "this.computedWidth", "style.min-width": "this.computedMinWidth", "style.max-width": "this.computedMaxWidth" } }, providers: [InternationalizationService], queries: [{ propertyName: "ocPrefix", first: true, predicate: ["ocPrefix"], descendants: true }, { propertyName: "ocSuffix", first: true, predicate: ["ocSuffix"], descendants: true }], viewQueries: [{ propertyName: "input", first: true, predicate: ["input"], descendants: true }, { propertyName: "options", first: true, predicate: ["options"], descendants: true }, { propertyName: "outerDiv", first: true, predicate: ["outerDiv"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<div\r\n [ngClass]=\"{\r\n 'oc-input-box': !ocSemanticLike && ocStyle === 'otimus',\r\n small: ocSize === 'small',\r\n large: ocSize === 'large',\r\n error: !!ocError,\r\n prefix: hasPrefix,\r\n suffix: hasSuffix || ocHasDeleteButton,\r\n shui: ocStyle === 'shui',\r\n 'shui-input-box': ocStyle === 'shui',\r\n }\"\r\n>\r\n <ng-content></ng-content>\r\n <input\r\n [placeholder]=\"ocPlaceholder\"\r\n #input\r\n (click)=\"toggleOptions(); ocClick.emit()\"\r\n type=\"text\"\r\n (input)=\"filterData(ocValue)\"\r\n [(ngModel)]=\"ocValue\"\r\n (ngModelChange)=\"ocValue = $event; ocValueChange.emit($event)\"\r\n [ngClass]=\"{\r\n 'semantic-input': ocSemanticLike || ocStyle === 'semantic',\r\n }\"\r\n [tabindex]=\"ocTabIndex\"\r\n [disabled]=\"ocDisabled\"\r\n (keydown)=\"onKeyDown($event)\"\r\n />\r\n @if (!ocSemanticLike && ocStyle !== 'semantic') {\r\n <label>\r\n <span [innerHTML]=\"ocPlaceholder\"></span>\r\n @if (ocRequired) {\r\n <span class=\"oc color error\">*</span>\r\n }\r\n </label>\r\n }\r\n <small\r\n *ngIf=\"ocError\"\r\n class=\"error-msg\"\r\n >{{ ocError }}</small\r\n >\r\n <ng-content select=\"ocPrefix\"></ng-content>\r\n @if (ocHasDeleteButton && !ocDisabled) {\r\n <button\r\n class=\"oc-has-close-button oc suffix\"\r\n (click)=\"clearValue()\"\r\n [disabled]=\"ocDisabled\"\r\n >\r\n <span class=\"material-symbols-outlined\">backspace</span>\r\n </button>\r\n }\r\n <ng-content select=\"ocSuffix\"></ng-content>\r\n\r\n <div class=\"oc-options-div\">\r\n @if (isOptionsShown && !ocLoading && !ocDisabled) {\r\n <ul\r\n #options\r\n class=\"oc-options\"\r\n [ngStyle]=\"{\r\n 'max-height': ocOptionsMaxHeight,\r\n width: ocOptionsWidth,\r\n }\"\r\n >\r\n @if (!filteredData.length) {\r\n <li class=\"no-options\">\r\n {{ ocNoAvailableOptionsText || 'Nenhum resultado dispon\u00EDvel' }}\r\n </li>\r\n } @else {\r\n @for (data of filteredData; track data.value; let i = $index) {\r\n @if (!ocMaxResults || i < ocMaxResults) {\r\n <li class=\"li-option\">\r\n <button\r\n type=\"button\"\r\n (click)=\"selectValue(data.value)\"\r\n [class.hover]=\"ocType !== 'counterSelect'\"\r\n [class.highlight]=\"selectedIndex === i\"\r\n >\r\n @if (data.icon) {\r\n <span\r\n class=\"material-symbols-outlined\"\r\n [ngStyle]=\"{\r\n 'font-size': data.iconSize || '1.2rem',\r\n }\"\r\n >\r\n {{ data.icon }}\r\n </span>\r\n }\r\n {{ data.name }}\r\n </button>\r\n @if (ocType === 'counterSelect') {\r\n <div class=\"oc-counter-select\">\r\n <button\r\n class=\"subtract\"\r\n (click)=\"decrementCounter(data)\"\r\n >\r\n <span class=\"material-symbols-outlined\">remove</span>\r\n </button>\r\n <p class=\"counter\">{{ data.counter || 0 }}</p>\r\n <button\r\n class=\"add\"\r\n (click)=\"incrementCounter(data)\"\r\n >\r\n <span class=\"material-symbols-outlined\">add</span>\r\n </button>\r\n </div>\r\n }\r\n </li>\r\n }\r\n }\r\n @if (ocMaxResults && filteredData.length > ocMaxResults) {\r\n <li class=\"no-options\">\r\n {{ ocTypeForMoreResultsText || 'Digite para ver mais resultados' }}\r\n </li>\r\n }\r\n }\r\n </ul>\r\n } @else if (isOptionsShown && ocLoading && !ocDisabled) {\r\n <div class=\"oc-options loader\">\r\n <span class=\"material-symbols-outlined loading\"> progress_activity </span>\r\n </div>\r\n }\r\n </div>\r\n</div>\r\n", styles: ["@charset \"UTF-8\";.oc-input-box.prefix .material-symbols-outlined{position:absolute;left:0;font-size:1.5rem;-webkit-user-select:none;user-select:none}.oc-input-box.suffix .material-symbols-outlined,.oc-input-box.suffix .oc.suffix{position:absolute;right:0;font-size:1.5rem;-webkit-user-select:none;user-select:none}.oc-input-box{position:relative;margin-top:.5rem}.oc-input-box select *{background-color:#f8f9ff}.oc-input-box label{position:absolute;left:0;top:0;padding:.5rem .7rem;font-size:.85rem;color:#8f9596;pointer-events:none;transition:.3s ease;border-radius:.5rem;white-space:nowrap}.oc-input-box label .oc.color.error{font-weight:700;margin-left:.2rem}.oc-input-box.prefix .material-symbols-outlined,.oc-input-box.prefix .oc.suffix{padding:.5rem .7rem}.oc-input-box.prefix input{padding-left:1.75rem}.oc-input-box.prefix label{padding:.7rem 2.5rem}.oc-input-box.suffix .material-symbols-outlined,.oc-input-box.suffix .oc.suffix{padding:.5rem .7rem}.oc-input-box.suffix input{padding-right:1.75rem}.oc-input-box.suffix label{padding:.7rem}.oc-input-box input,.oc-input-box textarea,.oc-input-box select{font-size:1rem;border-radius:.7rem;background-color:#f8f9ff;border:1px solid #d1d5db;outline:none;padding:.6rem .9rem;width:100%;transition:.3s ease;color:#7e8485;font-weight:500}.oc-input-box input:focus,.oc-input-box textarea:focus,.oc-input-box select:focus{border:1px solid #00dda3;box-shadow:0 4px 3.2px #00dda314}.oc-input-box input:not(:placeholder-shown)~label,.oc-input-box input:focus~label,.oc-input-box textarea:not(:placeholder-shown)~label,.oc-input-box textarea:focus~label,.oc-input-box select:valid~label,.oc-input-box select:focus~label{transform:translateY(-.855rem) translate(.6rem);color:#1e0832;background-color:#f8f9ff;padding:1px 7px;font-weight:500}.error input,.error textarea,.error select{border:1px solid #ed3a3a;box-shadow:0 4px 6.1px #a1000014}.oc-input-box.small input,.oc-input-box.small textarea,.oc-input-box.small select{padding:.3rem .7rem;border-radius:.5rem}.oc-input-box.small.prefix .material-symbols-outlined{padding:.35rem .7rem;font-size:1.25rem}.oc-input-box.small.prefix label{padding:.45rem 2.5rem}.oc-input-box.small.suffix .material-symbols-outlined{padding:.35rem .7rem}.oc-input-box.small.suffix label{padding:.45rem .7rem}.oc-input-box.small label{padding:.5rem .7rem}.oc-input-box.small input:focus~label,.oc-input-box.small input:not(:placeholder-shown)~label,.oc-input-box.small textarea:focus~label,.oc-input-box.small textarea:not(:placeholder-shown)~label,.oc-input-box.small select:focus~label,.oc-input-box.small select:valid~label{transform:translateY(-.99rem) translate(.6rem);color:#7e8485;background-color:#fff;padding:1px 7px;font-weight:500}.oc-input-box.large input,.oc-input-box.large textarea,.oc-input-box.large select{padding:1rem;border-radius:1rem}.oc-input-box.large label,.oc-input-box.large.prefix .material-symbols-outlined{padding:1rem .7rem}.oc-input-box.large.prefix input{padding-left:2.5rem}.oc-input-box.large.prefix label{padding:1.1rem 2.5rem}.oc-input-box.large.suffix .material-symbols-outlined{padding:.9rem .7rem}.oc-input-box.large.suffix input{padding-right:2.5rem}.oc-input-box.large.suffix label{padding:1.1rem .7rem}.oc-input-box.large input:focus~label,.oc-input-box.large input:not(:placeholder-shown)~label,.oc-input-box.large textarea:focus~label,.oc-input-box.large textarea:not(:placeholder-shown)~label,.oc-input-box.large select:focus~label,.oc-input-box.large select:valid~label{transform:translateY(-.77rem) translate(.6rem);color:#7e8485;background-color:#fff;padding:1px 7px;font-weight:500}.shui-input-box.prefix .material-symbols-outlined{position:absolute;left:0;font-size:1.5rem;-webkit-user-select:none;user-select:none}.shui-input-box.suffix .material-symbols-outlined,.shui-input-box.suffix .oc.suffix{position:absolute;right:0;font-size:1.5rem;-webkit-user-select:none;user-select:none}.shui-input-box{position:relative;margin-top:.5rem}.shui-input-box select *{background-color:#ebebeb}.shui-input-box label{position:absolute;left:0;top:0;padding:.5rem .7rem;font-size:.85rem;color:#000;pointer-events:none;transition:.3s ease;border-radius:.5rem;white-space:nowrap}.shui-input-box.prefix{z-index:5}.shui-input-box.prefix .material-symbols-outlined,.shui-input-box.prefix .oc.suffix{padding:.5rem .7rem}.shui-input-box.prefix input{padding-left:1.75rem}.shui-input-box.prefix label{padding:.7rem 2.5rem}.shui-input-box.suffix{z-index:5}.shui-input-box.suffix .material-symbols-outlined,.shui-input-box.suffix .oc.suffix{padding:.5rem .7rem}.shui-input-box.suffix input{padding-right:1.75rem}.shui-input-box.suffix label{padding:.7rem}.shui-input-box input,.shui-input-box textarea,.shui-input-box select{font-size:1rem;background-color:#ebebeb;border:none;outline:none;padding:1rem .9rem .2rem;width:100%;transition:.3s ease;color:#000;font-weight:400;height:41px;min-width:100%}.shui-input-box textarea{height:inherit;padding-top:20px}.shui-input-box input:not(:placeholder-shown)~label,.shui-input-box input:focus~label,.shui-input-box textarea:not(:placeholder-shown)~label,.shui-input-box textarea:focus~label,.shui-input-box select:valid~label,.shui-input-box select:focus~label{transform:translate(.45rem);background-color:#ebebeb;width:95%;padding:1px 7px 0;font-size:.7rem;font-weight:500}.shui-input-box input:focus~label,.shui-input-box textarea:focus~label,.shui-input-box select:valid~label,.shui-input-box select:focus~label{color:#0169b2}.shui-input-box:before{display:block;content:\"\";position:absolute;bottom:0;height:1px;width:100%;background-color:#7d7d7d;transition:.4s ease;width:0;background-color:#0169b2}.shui-input-box:focus-within:before{width:100%}.error input,.error textarea,.error select{border:1px solid #e7001d;box-shadow:0 4px 6.1px #a1000014}.error:before{width:0!important}.error small,.error label{color:#ed3a3a!important;font-weight:600}.shui-input-box.small input,.shui-input-box.small textarea,.shui-input-box.small select{max-height:36px;padding-top:1rem}.shui-input-box.small.prefix{z-index:5}.shui-input-box.small.prefix .material-symbols-outlined{padding:.35rem .7rem;font-size:1.25rem;color:#0169b2}.shui-input-box.small.prefix label{padding:.45rem 2.5rem}.shui-input-box.small.suffix{z-index:5}.shui-input-box.small.suffix .material-symbols-outlined{padding:.35rem .7rem;color:#0169b2}.shui-input-box.small.suffix label{padding:.45rem .7rem}.shui-input-box.large input,.shui-input-box.large textarea,.shui-input-box.large select{height:46px}.shui-input-box.large label{padding:1rem .7rem}.shui-input-box.large.prefix{z-index:5}.shui-input-box.large.prefix .material-symbols-outlined{padding:1rem .7rem}.shui-input-box.large.prefix input{padding-left:2.5rem}.shui-input-box.large.prefix label{padding:1.1rem 2.5rem}.shui-input-box.large.suffix{z-index:5}.shui-input-box.large.suffix .material-symbols-outlined{padding:.9rem .7rem}.shui-input-box.large.suffix input{padding-right:2.5rem}.shui-input-box.large.suffix label{padding:1.1rem .7rem}.oc.suffix,.oc.prefix,.material-symbols-outlined{z-index:5!important}.oc-input-box{position:relative}.oc-options-div{position:absolute;width:100%}.oc-has-close-button-input{padding-right:60px}.oc-has-close-button{display:flex;justify-content:center;align-items:center;position:absolute;right:.5rem!important;top:8%;height:84%;width:2.2rem;border:2px solid transparent;border-radius:.5rem;background-color:transparent;padding:0!important;transition:border-color .2s ease,box-shadow .2s ease}.oc-has-close-button:hover{border:2px solid #8f9596;box-shadow:0 4px 8.7px #00000021;cursor:pointer}.oc-has-close-button span{padding:0!important;margin:.3rem}.oc-counter-select{display:flex;gap:.2rem;align-items:center;float:right;max-height:30px}.oc-counter-select .counter{font-size:.9rem;color:#5505a2;font-weight:600;margin:0;padding:0}.oc-counter-select button{display:flex;justify-content:center;align-items:center;text-align:center;max-width:20px}.oc-counter-select .subtract span,.oc-counter-select .add span{font-size:1rem;font-weight:600;text-align:center}.oc-counter-select span{transition:.2s ease}.oc-counter-select .subtract:hover span{color:#ed3a3a!important}.oc-counter-select .add:hover span{color:#00dda3!important}.shui-option-box .oc-counter-select .counter{color:#0169b2}.oc-options{display:flex;flex-direction:column;list-style:none;max-height:40vh;background-color:#f8f9ff;border:2px solid #ffffff;box-shadow:0 4px 8.7px #00000021;padding:0;margin-block-start:0;border-radius:.5rem;overflow:hidden;width:100%;position:absolute;top:50%;overflow-y:auto;z-index:15}.oc-options>li{padding:0;margin:0;display:flex;justify-content:space-between}.oc-options>li button{width:100%;text-align:left;padding:.6rem;border:none;background-color:#f8f9ff;cursor:pointer;display:flex;align-items:center}.oc-options>li button span.material-symbols-outlined{line-height:0;color:#8f9596;margin:0 8px 0 0;padding:0}.oc-options>li button.hover:hover{filter:brightness(.9)}.oc-options>li button.highlight{filter:brightness(.9)}.no-options{padding:.6rem!important;color:#8f9596}.oc-options.loader{display:flex;align-items:center;justify-content:center}.oc-options.loader span{width:24px;margin:3rem;color:#5505a2}.loading{animation:spinLoad .5s linear infinite}.semantic-input{display:inline-block;width:100%;padding:10px 12px;font-size:14px;line-height:1.5;color:#333;background-color:#fff;border:1px solid #ccc;border-radius:4px;box-shadow:0 1px 2px #22242626;transition:border-color .2s ease,box-shadow .2s ease}.semantic-input:hover{border-color:#b3b3b3}.semantic-input:focus{border-color:#85b7d9;box-shadow:0 0 0 2px #22242626;outline:none}.semantic-input:disabled{background-color:#f9f9f9;color:#b3b3b3;border-color:#ddd;cursor:not-allowed}@keyframes spinLoad{0%{transform:rotate(0)}to{transform:rotate(360deg)}}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i4.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: i4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i4.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }], changeDetection: i0.ChangeDetectionStrategy.Default }); }
274
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: OcAutocompleteComponent, isStandalone: true, selector: "oc-autocomplete", inputs: { ocData: "ocData", ocPlaceholder: "ocPlaceholder", ocError: "ocError", ocSize: "ocSize", ocValue: "ocValue", ocClearOnChange: "ocClearOnChange", ocWidth: "ocWidth", ocMinWidth: "ocMinWidth", ocMaxWidth: "ocMaxWidth", ocOptionsMaxHeight: "ocOptionsMaxHeight", ocOptionsWidth: "ocOptionsWidth", ocRequired: "ocRequired", ocMaxResults: "ocMaxResults", ocAllowNotListedValue: "ocAllowNotListedValue", ocNoAvailableOptionsText: "ocNoAvailableOptionsText", ocTypeForMoreResultsText: "ocTypeForMoreResultsText", ocLoading: "ocLoading", ocSemanticLike: "ocSemanticLike", ocStyle: "ocStyle", ocTabIndex: "ocTabIndex", iconSize: "iconSize", ocSelectByTyping: "ocSelectByTyping", ocDisabled: "ocDisabled", ocType: "ocType", ocHasDeleteButton: "ocHasDeleteButton", ocEnableKeyboard: "ocEnableKeyboard" }, outputs: { ocValueChange: "ocValueChange", ocChange: "ocChange", ocCounterSelectChange: "ocCounterSelectChange", ocOptionNotFound: "ocOptionNotFound", ocClick: "ocClick" }, host: { properties: { "style.width": "this.computedWidth", "style.min-width": "this.computedMinWidth", "style.max-width": "this.computedMaxWidth" } }, providers: [InternationalizationService], queries: [{ propertyName: "ocPrefix", first: true, predicate: ["ocPrefix"], descendants: true }, { propertyName: "ocSuffix", first: true, predicate: ["ocSuffix"], descendants: true }], viewQueries: [{ propertyName: "input", first: true, predicate: ["input"], descendants: true }, { propertyName: "options", first: true, predicate: ["options"], descendants: true }, { propertyName: "outerDiv", first: true, predicate: ["outerDiv"], descendants: true }, { propertyName: "listOptionsElements", predicate: ["listOptionsRef"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<div\r\n [ngClass]=\"{\r\n 'oc-input-box': !ocSemanticLike && ocStyle === 'otimus',\r\n small: ocSize === 'small',\r\n large: ocSize === 'large',\r\n error: !!ocError,\r\n prefix: hasPrefix,\r\n suffix: hasSuffix || ocHasDeleteButton,\r\n shui: ocStyle === 'shui',\r\n 'shui-input-box': ocStyle === 'shui',\r\n }\"\r\n>\r\n <ng-content></ng-content>\r\n <input\r\n [placeholder]=\"ocPlaceholder\"\r\n #input\r\n (click)=\"toggleOptions(); ocClick.emit()\"\r\n type=\"text\"\r\n (input)=\"filterData(ocValue)\"\r\n [(ngModel)]=\"ocValue\"\r\n (ngModelChange)=\"ocValue = $event; ocValueChange.emit($event)\"\r\n [ngClass]=\"{\r\n 'semantic-input': ocSemanticLike || ocStyle === 'semantic',\r\n }\"\r\n [tabindex]=\"ocTabIndex\"\r\n [disabled]=\"ocDisabled\"\r\n (keydown)=\"onKeyDown($event)\"\r\n />\r\n @if (!ocSemanticLike && ocStyle !== 'semantic') {\r\n <label>\r\n <span [innerHTML]=\"ocPlaceholder\"></span>\r\n @if (ocRequired) {\r\n <span class=\"oc color error\">*</span>\r\n }\r\n </label>\r\n }\r\n <small\r\n *ngIf=\"ocError\"\r\n class=\"error-msg\"\r\n >{{ ocError }}</small\r\n >\r\n <ng-content select=\"ocPrefix\"></ng-content>\r\n @if (ocHasDeleteButton && !ocDisabled) {\r\n <button\r\n class=\"oc-has-close-button oc suffix\"\r\n (click)=\"clearValue()\"\r\n [disabled]=\"ocDisabled\"\r\n >\r\n <span class=\"material-symbols-outlined\">backspace</span>\r\n </button>\r\n }\r\n <ng-content select=\"ocSuffix\"></ng-content>\r\n\r\n <div class=\"oc-options-div\">\r\n @if (isOptionsShown && !ocLoading && !ocDisabled) {\r\n <ul\r\n #options\r\n class=\"oc-options\"\r\n [ngStyle]=\"{\r\n 'max-height': ocOptionsMaxHeight,\r\n width: ocOptionsWidth,\r\n }\"\r\n >\r\n @if (!filteredData.length) {\r\n <li class=\"no-options\">\r\n {{ ocNoAvailableOptionsText || 'Nenhum resultado dispon\u00EDvel' }}\r\n </li>\r\n } @else {\r\n @for (data of filteredData; track data.value; let i = $index) {\r\n @if (!ocMaxResults || i < ocMaxResults) {\r\n <li class=\"li-option\" #listOptionsRef>\r\n <button\r\n type=\"button\"\r\n (click)=\"selectValue(data.value)\"\r\n [class.hover]=\"ocType !== 'counterSelect'\"\r\n [class.highlight]=\"selectedIndex === i\"\r\n >\r\n @if (data.icon) {\r\n <span\r\n class=\"material-symbols-outlined\"\r\n [ngStyle]=\"{\r\n 'font-size': data.iconSize || '1.2rem',\r\n }\"\r\n >\r\n {{ data.icon }}\r\n </span>\r\n }\r\n {{ data.name }}\r\n </button>\r\n @if (ocType === 'counterSelect') {\r\n <div class=\"oc-counter-select\">\r\n <button\r\n class=\"subtract\"\r\n (click)=\"decrementCounter(data)\"\r\n >\r\n <span class=\"material-symbols-outlined\">remove</span>\r\n </button>\r\n <p class=\"counter\">{{ data.counter || 0 }}</p>\r\n <button\r\n class=\"add\"\r\n (click)=\"incrementCounter(data)\"\r\n >\r\n <span class=\"material-symbols-outlined\">add</span>\r\n </button>\r\n </div>\r\n }\r\n </li>\r\n }\r\n }\r\n @if (ocMaxResults && filteredData.length > ocMaxResults) {\r\n <li class=\"no-options\">\r\n {{ ocTypeForMoreResultsText || 'Digite para ver mais resultados' }}\r\n </li>\r\n }\r\n }\r\n </ul>\r\n } @else if (isOptionsShown && ocLoading && !ocDisabled) {\r\n <div class=\"oc-options loader\">\r\n <span class=\"material-symbols-outlined loading\"> progress_activity </span>\r\n </div>\r\n }\r\n </div>\r\n</div>\r\n", styles: ["@charset \"UTF-8\";.oc-input-box.prefix .material-symbols-outlined{position:absolute;left:0;font-size:1.5rem;-webkit-user-select:none;user-select:none}.oc-input-box.suffix .material-symbols-outlined,.oc-input-box.suffix .oc.suffix{position:absolute;right:0;font-size:1.5rem;-webkit-user-select:none;user-select:none}.oc-input-box{position:relative;margin-top:.5rem}.oc-input-box select *{background-color:#f8f9ff}.oc-input-box label{position:absolute;left:0;top:0;padding:.5rem .7rem;font-size:.85rem;color:#8f9596;pointer-events:none;transition:.3s ease;border-radius:.5rem;white-space:nowrap}.oc-input-box label .oc.color.error{font-weight:700;margin-left:.2rem}.oc-input-box.prefix .material-symbols-outlined,.oc-input-box.prefix .oc.suffix{padding:.5rem .7rem}.oc-input-box.prefix input{padding-left:1.75rem}.oc-input-box.prefix label{padding:.7rem 2.5rem}.oc-input-box.suffix .material-symbols-outlined,.oc-input-box.suffix .oc.suffix{padding:.5rem .7rem}.oc-input-box.suffix input{padding-right:1.75rem}.oc-input-box.suffix label{padding:.7rem}.oc-input-box input,.oc-input-box textarea,.oc-input-box select{font-size:1rem;border-radius:.7rem;background-color:#f8f9ff;border:1px solid #d1d5db;outline:none;padding:.6rem .9rem;width:100%;transition:.3s ease;color:#7e8485;font-weight:500}.oc-input-box input:focus,.oc-input-box textarea:focus,.oc-input-box select:focus{border:1px solid #00dda3;box-shadow:0 4px 3.2px #00dda314}.oc-input-box input:not(:placeholder-shown)~label,.oc-input-box input:focus~label,.oc-input-box textarea:not(:placeholder-shown)~label,.oc-input-box textarea:focus~label,.oc-input-box select:valid~label,.oc-input-box select:focus~label{transform:translateY(-.855rem) translate(.6rem);color:#1e0832;background-color:#f8f9ff;padding:1px 7px;font-weight:500}.error input,.error textarea,.error select{border:1px solid #ed3a3a;box-shadow:0 4px 6.1px #a1000014}.oc-input-box.small input,.oc-input-box.small textarea,.oc-input-box.small select{padding:.3rem .7rem;border-radius:.5rem}.oc-input-box.small.prefix .material-symbols-outlined{padding:.35rem .7rem;font-size:1.25rem}.oc-input-box.small.prefix label{padding:.45rem 2.5rem}.oc-input-box.small.suffix .material-symbols-outlined{padding:.35rem .7rem}.oc-input-box.small.suffix label{padding:.45rem .7rem}.oc-input-box.small label{padding:.5rem .7rem}.oc-input-box.small input:focus~label,.oc-input-box.small input:not(:placeholder-shown)~label,.oc-input-box.small textarea:focus~label,.oc-input-box.small textarea:not(:placeholder-shown)~label,.oc-input-box.small select:focus~label,.oc-input-box.small select:valid~label{transform:translateY(-.99rem) translate(.6rem);color:#7e8485;background-color:#fff;padding:1px 7px;font-weight:500}.oc-input-box.large input,.oc-input-box.large textarea,.oc-input-box.large select{padding:1rem;border-radius:1rem}.oc-input-box.large label,.oc-input-box.large.prefix .material-symbols-outlined{padding:1rem .7rem}.oc-input-box.large.prefix input{padding-left:2.5rem}.oc-input-box.large.prefix label{padding:1.1rem 2.5rem}.oc-input-box.large.suffix .material-symbols-outlined{padding:.9rem .7rem}.oc-input-box.large.suffix input{padding-right:2.5rem}.oc-input-box.large.suffix label{padding:1.1rem .7rem}.oc-input-box.large input:focus~label,.oc-input-box.large input:not(:placeholder-shown)~label,.oc-input-box.large textarea:focus~label,.oc-input-box.large textarea:not(:placeholder-shown)~label,.oc-input-box.large select:focus~label,.oc-input-box.large select:valid~label{transform:translateY(-.77rem) translate(.6rem);color:#7e8485;background-color:#fff;padding:1px 7px;font-weight:500}.shui-input-box.prefix .material-symbols-outlined{position:absolute;left:0;font-size:1.5rem;-webkit-user-select:none;user-select:none}.shui-input-box.suffix .material-symbols-outlined,.shui-input-box.suffix .oc.suffix{position:absolute;right:0;font-size:1.5rem;-webkit-user-select:none;user-select:none}.shui-input-box{position:relative;margin-top:.5rem}.shui-input-box select *{background-color:#ebebeb}.shui-input-box label{position:absolute;left:0;top:0;padding:.5rem .7rem;font-size:.85rem;color:#000;pointer-events:none;transition:.3s ease;border-radius:.5rem;white-space:nowrap}.shui-input-box.prefix{z-index:5}.shui-input-box.prefix .material-symbols-outlined,.shui-input-box.prefix .oc.suffix{padding:.5rem .7rem}.shui-input-box.prefix input{padding-left:1.75rem}.shui-input-box.prefix label{padding:.7rem 2.5rem}.shui-input-box.suffix{z-index:5}.shui-input-box.suffix .material-symbols-outlined,.shui-input-box.suffix .oc.suffix{padding:.5rem .7rem}.shui-input-box.suffix input{padding-right:1.75rem}.shui-input-box.suffix label{padding:.7rem}.shui-input-box input,.shui-input-box textarea,.shui-input-box select{font-size:1rem;background-color:#ebebeb;border:none;outline:none;padding:1rem .9rem .2rem;width:100%;transition:.3s ease;color:#000;font-weight:400;height:41px;min-width:100%}.shui-input-box textarea{height:inherit;padding-top:20px}.shui-input-box input:not(:placeholder-shown)~label,.shui-input-box input:focus~label,.shui-input-box textarea:not(:placeholder-shown)~label,.shui-input-box textarea:focus~label,.shui-input-box select:valid~label,.shui-input-box select:focus~label{transform:translate(.45rem);background-color:#ebebeb;width:95%;padding:1px 7px 0;font-size:.7rem;font-weight:500}.shui-input-box input:focus~label,.shui-input-box textarea:focus~label,.shui-input-box select:valid~label,.shui-input-box select:focus~label{color:#0169b2}.shui-input-box:before{display:block;content:\"\";position:absolute;bottom:0;height:1px;width:100%;background-color:#7d7d7d;transition:.4s ease;width:0;background-color:#0169b2}.shui-input-box:focus-within:before{width:100%}.error input,.error textarea,.error select{border:1px solid #e7001d;box-shadow:0 4px 6.1px #a1000014}.error:before{width:0!important}.error small,.error label{color:#ed3a3a!important;font-weight:600}.shui-input-box.small input,.shui-input-box.small textarea,.shui-input-box.small select{max-height:36px;padding-top:1rem}.shui-input-box.small.prefix{z-index:5}.shui-input-box.small.prefix .material-symbols-outlined{padding:.35rem .7rem;font-size:1.25rem;color:#0169b2}.shui-input-box.small.prefix label{padding:.45rem 2.5rem}.shui-input-box.small.suffix{z-index:5}.shui-input-box.small.suffix .material-symbols-outlined{padding:.35rem .7rem;color:#0169b2}.shui-input-box.small.suffix label{padding:.45rem .7rem}.shui-input-box.large input,.shui-input-box.large textarea,.shui-input-box.large select{height:46px}.shui-input-box.large label{padding:1rem .7rem}.shui-input-box.large.prefix{z-index:5}.shui-input-box.large.prefix .material-symbols-outlined{padding:1rem .7rem}.shui-input-box.large.prefix input{padding-left:2.5rem}.shui-input-box.large.prefix label{padding:1.1rem 2.5rem}.shui-input-box.large.suffix{z-index:5}.shui-input-box.large.suffix .material-symbols-outlined{padding:.9rem .7rem}.shui-input-box.large.suffix input{padding-right:2.5rem}.shui-input-box.large.suffix label{padding:1.1rem .7rem}.oc.suffix,.oc.prefix,.material-symbols-outlined{z-index:5!important}.oc-input-box{position:relative}.oc-options-div{position:absolute;width:100%}.oc-has-close-button-input{padding-right:60px}.oc-has-close-button{display:flex;justify-content:center;align-items:center;position:absolute;right:.5rem!important;top:8%;height:84%;width:2.2rem;border:2px solid transparent;border-radius:.5rem;background-color:transparent;padding:0!important;transition:border-color .2s ease,box-shadow .2s ease}.oc-has-close-button:hover{border:2px solid #8f9596;box-shadow:0 4px 8.7px #00000021;cursor:pointer}.oc-has-close-button span{padding:0!important;margin:.3rem}.oc-counter-select{display:flex;gap:.2rem;align-items:center;float:right;max-height:30px}.oc-counter-select .counter{font-size:.9rem;color:#5505a2;font-weight:600;margin:0;padding:0}.oc-counter-select button{display:flex;justify-content:center;align-items:center;text-align:center;max-width:20px}.oc-counter-select .subtract span,.oc-counter-select .add span{font-size:1rem;font-weight:600;text-align:center}.oc-counter-select span{transition:.2s ease}.oc-counter-select .subtract:hover span{color:#ed3a3a!important}.oc-counter-select .add:hover span{color:#00dda3!important}.shui-option-box .oc-counter-select .counter{color:#0169b2}.oc-options{display:flex;flex-direction:column;list-style:none;max-height:40vh;background-color:#f8f9ff;border:2px solid #ffffff;box-shadow:0 4px 8.7px #00000021;padding:0;margin-block-start:0;border-radius:.5rem;overflow:hidden;width:100%;position:absolute;top:50%;overflow-y:auto;z-index:15}.oc-options>li{padding:0;margin:0;display:flex;justify-content:space-between}.oc-options>li button{width:100%;text-align:left;padding:.6rem;border:none;background-color:#f8f9ff;cursor:pointer;display:flex;align-items:center}.oc-options>li button span.material-symbols-outlined{line-height:0;color:#8f9596;margin:0 8px 0 0;padding:0}.oc-options>li button.hover:hover{filter:brightness(.9)}.oc-options>li button.highlight{filter:brightness(.9)}.no-options{padding:.6rem!important;color:#8f9596}.oc-options.loader{display:flex;align-items:center;justify-content:center}.oc-options.loader span{width:24px;margin:3rem;color:#5505a2}.loading{animation:spinLoad .5s linear infinite}.semantic-input{display:inline-block;width:100%;padding:10px 12px;font-size:14px;line-height:1.5;color:#333;background-color:#fff;border:1px solid #ccc;border-radius:4px;box-shadow:0 1px 2px #22242626;transition:border-color .2s ease,box-shadow .2s ease}.semantic-input:hover{border-color:#b3b3b3}.semantic-input:focus{border-color:#85b7d9;box-shadow:0 0 0 2px #22242626;outline:none}.semantic-input:disabled{background-color:#f9f9f9;color:#b3b3b3;border-color:#ddd;cursor:not-allowed}@keyframes spinLoad{0%{transform:rotate(0)}to{transform:rotate(360deg)}}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i4.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: i4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i4.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }], changeDetection: i0.ChangeDetectionStrategy.Default }); }
261
275
  }
262
276
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: OcAutocompleteComponent, decorators: [{
263
277
  type: Component,
@@ -265,7 +279,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
265
279
  '[style.width]': 'computedWidth',
266
280
  '[style.min-width]': 'computedMinWidth',
267
281
  '[style.max-width]': 'computedMaxWidth',
268
- }, changeDetection: ChangeDetectionStrategy.Default, template: "<div\r\n [ngClass]=\"{\r\n 'oc-input-box': !ocSemanticLike && ocStyle === 'otimus',\r\n small: ocSize === 'small',\r\n large: ocSize === 'large',\r\n error: !!ocError,\r\n prefix: hasPrefix,\r\n suffix: hasSuffix || ocHasDeleteButton,\r\n shui: ocStyle === 'shui',\r\n 'shui-input-box': ocStyle === 'shui',\r\n }\"\r\n>\r\n <ng-content></ng-content>\r\n <input\r\n [placeholder]=\"ocPlaceholder\"\r\n #input\r\n (click)=\"toggleOptions(); ocClick.emit()\"\r\n type=\"text\"\r\n (input)=\"filterData(ocValue)\"\r\n [(ngModel)]=\"ocValue\"\r\n (ngModelChange)=\"ocValue = $event; ocValueChange.emit($event)\"\r\n [ngClass]=\"{\r\n 'semantic-input': ocSemanticLike || ocStyle === 'semantic',\r\n }\"\r\n [tabindex]=\"ocTabIndex\"\r\n [disabled]=\"ocDisabled\"\r\n (keydown)=\"onKeyDown($event)\"\r\n />\r\n @if (!ocSemanticLike && ocStyle !== 'semantic') {\r\n <label>\r\n <span [innerHTML]=\"ocPlaceholder\"></span>\r\n @if (ocRequired) {\r\n <span class=\"oc color error\">*</span>\r\n }\r\n </label>\r\n }\r\n <small\r\n *ngIf=\"ocError\"\r\n class=\"error-msg\"\r\n >{{ ocError }}</small\r\n >\r\n <ng-content select=\"ocPrefix\"></ng-content>\r\n @if (ocHasDeleteButton && !ocDisabled) {\r\n <button\r\n class=\"oc-has-close-button oc suffix\"\r\n (click)=\"clearValue()\"\r\n [disabled]=\"ocDisabled\"\r\n >\r\n <span class=\"material-symbols-outlined\">backspace</span>\r\n </button>\r\n }\r\n <ng-content select=\"ocSuffix\"></ng-content>\r\n\r\n <div class=\"oc-options-div\">\r\n @if (isOptionsShown && !ocLoading && !ocDisabled) {\r\n <ul\r\n #options\r\n class=\"oc-options\"\r\n [ngStyle]=\"{\r\n 'max-height': ocOptionsMaxHeight,\r\n width: ocOptionsWidth,\r\n }\"\r\n >\r\n @if (!filteredData.length) {\r\n <li class=\"no-options\">\r\n {{ ocNoAvailableOptionsText || 'Nenhum resultado dispon\u00EDvel' }}\r\n </li>\r\n } @else {\r\n @for (data of filteredData; track data.value; let i = $index) {\r\n @if (!ocMaxResults || i < ocMaxResults) {\r\n <li class=\"li-option\">\r\n <button\r\n type=\"button\"\r\n (click)=\"selectValue(data.value)\"\r\n [class.hover]=\"ocType !== 'counterSelect'\"\r\n [class.highlight]=\"selectedIndex === i\"\r\n >\r\n @if (data.icon) {\r\n <span\r\n class=\"material-symbols-outlined\"\r\n [ngStyle]=\"{\r\n 'font-size': data.iconSize || '1.2rem',\r\n }\"\r\n >\r\n {{ data.icon }}\r\n </span>\r\n }\r\n {{ data.name }}\r\n </button>\r\n @if (ocType === 'counterSelect') {\r\n <div class=\"oc-counter-select\">\r\n <button\r\n class=\"subtract\"\r\n (click)=\"decrementCounter(data)\"\r\n >\r\n <span class=\"material-symbols-outlined\">remove</span>\r\n </button>\r\n <p class=\"counter\">{{ data.counter || 0 }}</p>\r\n <button\r\n class=\"add\"\r\n (click)=\"incrementCounter(data)\"\r\n >\r\n <span class=\"material-symbols-outlined\">add</span>\r\n </button>\r\n </div>\r\n }\r\n </li>\r\n }\r\n }\r\n @if (ocMaxResults && filteredData.length > ocMaxResults) {\r\n <li class=\"no-options\">\r\n {{ ocTypeForMoreResultsText || 'Digite para ver mais resultados' }}\r\n </li>\r\n }\r\n }\r\n </ul>\r\n } @else if (isOptionsShown && ocLoading && !ocDisabled) {\r\n <div class=\"oc-options loader\">\r\n <span class=\"material-symbols-outlined loading\"> progress_activity </span>\r\n </div>\r\n }\r\n </div>\r\n</div>\r\n", styles: ["@charset \"UTF-8\";.oc-input-box.prefix .material-symbols-outlined{position:absolute;left:0;font-size:1.5rem;-webkit-user-select:none;user-select:none}.oc-input-box.suffix .material-symbols-outlined,.oc-input-box.suffix .oc.suffix{position:absolute;right:0;font-size:1.5rem;-webkit-user-select:none;user-select:none}.oc-input-box{position:relative;margin-top:.5rem}.oc-input-box select *{background-color:#f8f9ff}.oc-input-box label{position:absolute;left:0;top:0;padding:.5rem .7rem;font-size:.85rem;color:#8f9596;pointer-events:none;transition:.3s ease;border-radius:.5rem;white-space:nowrap}.oc-input-box label .oc.color.error{font-weight:700;margin-left:.2rem}.oc-input-box.prefix .material-symbols-outlined,.oc-input-box.prefix .oc.suffix{padding:.5rem .7rem}.oc-input-box.prefix input{padding-left:1.75rem}.oc-input-box.prefix label{padding:.7rem 2.5rem}.oc-input-box.suffix .material-symbols-outlined,.oc-input-box.suffix .oc.suffix{padding:.5rem .7rem}.oc-input-box.suffix input{padding-right:1.75rem}.oc-input-box.suffix label{padding:.7rem}.oc-input-box input,.oc-input-box textarea,.oc-input-box select{font-size:1rem;border-radius:.7rem;background-color:#f8f9ff;border:1px solid #d1d5db;outline:none;padding:.6rem .9rem;width:100%;transition:.3s ease;color:#7e8485;font-weight:500}.oc-input-box input:focus,.oc-input-box textarea:focus,.oc-input-box select:focus{border:1px solid #00dda3;box-shadow:0 4px 3.2px #00dda314}.oc-input-box input:not(:placeholder-shown)~label,.oc-input-box input:focus~label,.oc-input-box textarea:not(:placeholder-shown)~label,.oc-input-box textarea:focus~label,.oc-input-box select:valid~label,.oc-input-box select:focus~label{transform:translateY(-.855rem) translate(.6rem);color:#1e0832;background-color:#f8f9ff;padding:1px 7px;font-weight:500}.error input,.error textarea,.error select{border:1px solid #ed3a3a;box-shadow:0 4px 6.1px #a1000014}.oc-input-box.small input,.oc-input-box.small textarea,.oc-input-box.small select{padding:.3rem .7rem;border-radius:.5rem}.oc-input-box.small.prefix .material-symbols-outlined{padding:.35rem .7rem;font-size:1.25rem}.oc-input-box.small.prefix label{padding:.45rem 2.5rem}.oc-input-box.small.suffix .material-symbols-outlined{padding:.35rem .7rem}.oc-input-box.small.suffix label{padding:.45rem .7rem}.oc-input-box.small label{padding:.5rem .7rem}.oc-input-box.small input:focus~label,.oc-input-box.small input:not(:placeholder-shown)~label,.oc-input-box.small textarea:focus~label,.oc-input-box.small textarea:not(:placeholder-shown)~label,.oc-input-box.small select:focus~label,.oc-input-box.small select:valid~label{transform:translateY(-.99rem) translate(.6rem);color:#7e8485;background-color:#fff;padding:1px 7px;font-weight:500}.oc-input-box.large input,.oc-input-box.large textarea,.oc-input-box.large select{padding:1rem;border-radius:1rem}.oc-input-box.large label,.oc-input-box.large.prefix .material-symbols-outlined{padding:1rem .7rem}.oc-input-box.large.prefix input{padding-left:2.5rem}.oc-input-box.large.prefix label{padding:1.1rem 2.5rem}.oc-input-box.large.suffix .material-symbols-outlined{padding:.9rem .7rem}.oc-input-box.large.suffix input{padding-right:2.5rem}.oc-input-box.large.suffix label{padding:1.1rem .7rem}.oc-input-box.large input:focus~label,.oc-input-box.large input:not(:placeholder-shown)~label,.oc-input-box.large textarea:focus~label,.oc-input-box.large textarea:not(:placeholder-shown)~label,.oc-input-box.large select:focus~label,.oc-input-box.large select:valid~label{transform:translateY(-.77rem) translate(.6rem);color:#7e8485;background-color:#fff;padding:1px 7px;font-weight:500}.shui-input-box.prefix .material-symbols-outlined{position:absolute;left:0;font-size:1.5rem;-webkit-user-select:none;user-select:none}.shui-input-box.suffix .material-symbols-outlined,.shui-input-box.suffix .oc.suffix{position:absolute;right:0;font-size:1.5rem;-webkit-user-select:none;user-select:none}.shui-input-box{position:relative;margin-top:.5rem}.shui-input-box select *{background-color:#ebebeb}.shui-input-box label{position:absolute;left:0;top:0;padding:.5rem .7rem;font-size:.85rem;color:#000;pointer-events:none;transition:.3s ease;border-radius:.5rem;white-space:nowrap}.shui-input-box.prefix{z-index:5}.shui-input-box.prefix .material-symbols-outlined,.shui-input-box.prefix .oc.suffix{padding:.5rem .7rem}.shui-input-box.prefix input{padding-left:1.75rem}.shui-input-box.prefix label{padding:.7rem 2.5rem}.shui-input-box.suffix{z-index:5}.shui-input-box.suffix .material-symbols-outlined,.shui-input-box.suffix .oc.suffix{padding:.5rem .7rem}.shui-input-box.suffix input{padding-right:1.75rem}.shui-input-box.suffix label{padding:.7rem}.shui-input-box input,.shui-input-box textarea,.shui-input-box select{font-size:1rem;background-color:#ebebeb;border:none;outline:none;padding:1rem .9rem .2rem;width:100%;transition:.3s ease;color:#000;font-weight:400;height:41px;min-width:100%}.shui-input-box textarea{height:inherit;padding-top:20px}.shui-input-box input:not(:placeholder-shown)~label,.shui-input-box input:focus~label,.shui-input-box textarea:not(:placeholder-shown)~label,.shui-input-box textarea:focus~label,.shui-input-box select:valid~label,.shui-input-box select:focus~label{transform:translate(.45rem);background-color:#ebebeb;width:95%;padding:1px 7px 0;font-size:.7rem;font-weight:500}.shui-input-box input:focus~label,.shui-input-box textarea:focus~label,.shui-input-box select:valid~label,.shui-input-box select:focus~label{color:#0169b2}.shui-input-box:before{display:block;content:\"\";position:absolute;bottom:0;height:1px;width:100%;background-color:#7d7d7d;transition:.4s ease;width:0;background-color:#0169b2}.shui-input-box:focus-within:before{width:100%}.error input,.error textarea,.error select{border:1px solid #e7001d;box-shadow:0 4px 6.1px #a1000014}.error:before{width:0!important}.error small,.error label{color:#ed3a3a!important;font-weight:600}.shui-input-box.small input,.shui-input-box.small textarea,.shui-input-box.small select{max-height:36px;padding-top:1rem}.shui-input-box.small.prefix{z-index:5}.shui-input-box.small.prefix .material-symbols-outlined{padding:.35rem .7rem;font-size:1.25rem;color:#0169b2}.shui-input-box.small.prefix label{padding:.45rem 2.5rem}.shui-input-box.small.suffix{z-index:5}.shui-input-box.small.suffix .material-symbols-outlined{padding:.35rem .7rem;color:#0169b2}.shui-input-box.small.suffix label{padding:.45rem .7rem}.shui-input-box.large input,.shui-input-box.large textarea,.shui-input-box.large select{height:46px}.shui-input-box.large label{padding:1rem .7rem}.shui-input-box.large.prefix{z-index:5}.shui-input-box.large.prefix .material-symbols-outlined{padding:1rem .7rem}.shui-input-box.large.prefix input{padding-left:2.5rem}.shui-input-box.large.prefix label{padding:1.1rem 2.5rem}.shui-input-box.large.suffix{z-index:5}.shui-input-box.large.suffix .material-symbols-outlined{padding:.9rem .7rem}.shui-input-box.large.suffix input{padding-right:2.5rem}.shui-input-box.large.suffix label{padding:1.1rem .7rem}.oc.suffix,.oc.prefix,.material-symbols-outlined{z-index:5!important}.oc-input-box{position:relative}.oc-options-div{position:absolute;width:100%}.oc-has-close-button-input{padding-right:60px}.oc-has-close-button{display:flex;justify-content:center;align-items:center;position:absolute;right:.5rem!important;top:8%;height:84%;width:2.2rem;border:2px solid transparent;border-radius:.5rem;background-color:transparent;padding:0!important;transition:border-color .2s ease,box-shadow .2s ease}.oc-has-close-button:hover{border:2px solid #8f9596;box-shadow:0 4px 8.7px #00000021;cursor:pointer}.oc-has-close-button span{padding:0!important;margin:.3rem}.oc-counter-select{display:flex;gap:.2rem;align-items:center;float:right;max-height:30px}.oc-counter-select .counter{font-size:.9rem;color:#5505a2;font-weight:600;margin:0;padding:0}.oc-counter-select button{display:flex;justify-content:center;align-items:center;text-align:center;max-width:20px}.oc-counter-select .subtract span,.oc-counter-select .add span{font-size:1rem;font-weight:600;text-align:center}.oc-counter-select span{transition:.2s ease}.oc-counter-select .subtract:hover span{color:#ed3a3a!important}.oc-counter-select .add:hover span{color:#00dda3!important}.shui-option-box .oc-counter-select .counter{color:#0169b2}.oc-options{display:flex;flex-direction:column;list-style:none;max-height:40vh;background-color:#f8f9ff;border:2px solid #ffffff;box-shadow:0 4px 8.7px #00000021;padding:0;margin-block-start:0;border-radius:.5rem;overflow:hidden;width:100%;position:absolute;top:50%;overflow-y:auto;z-index:15}.oc-options>li{padding:0;margin:0;display:flex;justify-content:space-between}.oc-options>li button{width:100%;text-align:left;padding:.6rem;border:none;background-color:#f8f9ff;cursor:pointer;display:flex;align-items:center}.oc-options>li button span.material-symbols-outlined{line-height:0;color:#8f9596;margin:0 8px 0 0;padding:0}.oc-options>li button.hover:hover{filter:brightness(.9)}.oc-options>li button.highlight{filter:brightness(.9)}.no-options{padding:.6rem!important;color:#8f9596}.oc-options.loader{display:flex;align-items:center;justify-content:center}.oc-options.loader span{width:24px;margin:3rem;color:#5505a2}.loading{animation:spinLoad .5s linear infinite}.semantic-input{display:inline-block;width:100%;padding:10px 12px;font-size:14px;line-height:1.5;color:#333;background-color:#fff;border:1px solid #ccc;border-radius:4px;box-shadow:0 1px 2px #22242626;transition:border-color .2s ease,box-shadow .2s ease}.semantic-input:hover{border-color:#b3b3b3}.semantic-input:focus{border-color:#85b7d9;box-shadow:0 0 0 2px #22242626;outline:none}.semantic-input:disabled{background-color:#f9f9f9;color:#b3b3b3;border-color:#ddd;cursor:not-allowed}@keyframes spinLoad{0%{transform:rotate(0)}to{transform:rotate(360deg)}}\n"] }]
282
+ }, changeDetection: ChangeDetectionStrategy.Default, template: "<div\r\n [ngClass]=\"{\r\n 'oc-input-box': !ocSemanticLike && ocStyle === 'otimus',\r\n small: ocSize === 'small',\r\n large: ocSize === 'large',\r\n error: !!ocError,\r\n prefix: hasPrefix,\r\n suffix: hasSuffix || ocHasDeleteButton,\r\n shui: ocStyle === 'shui',\r\n 'shui-input-box': ocStyle === 'shui',\r\n }\"\r\n>\r\n <ng-content></ng-content>\r\n <input\r\n [placeholder]=\"ocPlaceholder\"\r\n #input\r\n (click)=\"toggleOptions(); ocClick.emit()\"\r\n type=\"text\"\r\n (input)=\"filterData(ocValue)\"\r\n [(ngModel)]=\"ocValue\"\r\n (ngModelChange)=\"ocValue = $event; ocValueChange.emit($event)\"\r\n [ngClass]=\"{\r\n 'semantic-input': ocSemanticLike || ocStyle === 'semantic',\r\n }\"\r\n [tabindex]=\"ocTabIndex\"\r\n [disabled]=\"ocDisabled\"\r\n (keydown)=\"onKeyDown($event)\"\r\n />\r\n @if (!ocSemanticLike && ocStyle !== 'semantic') {\r\n <label>\r\n <span [innerHTML]=\"ocPlaceholder\"></span>\r\n @if (ocRequired) {\r\n <span class=\"oc color error\">*</span>\r\n }\r\n </label>\r\n }\r\n <small\r\n *ngIf=\"ocError\"\r\n class=\"error-msg\"\r\n >{{ ocError }}</small\r\n >\r\n <ng-content select=\"ocPrefix\"></ng-content>\r\n @if (ocHasDeleteButton && !ocDisabled) {\r\n <button\r\n class=\"oc-has-close-button oc suffix\"\r\n (click)=\"clearValue()\"\r\n [disabled]=\"ocDisabled\"\r\n >\r\n <span class=\"material-symbols-outlined\">backspace</span>\r\n </button>\r\n }\r\n <ng-content select=\"ocSuffix\"></ng-content>\r\n\r\n <div class=\"oc-options-div\">\r\n @if (isOptionsShown && !ocLoading && !ocDisabled) {\r\n <ul\r\n #options\r\n class=\"oc-options\"\r\n [ngStyle]=\"{\r\n 'max-height': ocOptionsMaxHeight,\r\n width: ocOptionsWidth,\r\n }\"\r\n >\r\n @if (!filteredData.length) {\r\n <li class=\"no-options\">\r\n {{ ocNoAvailableOptionsText || 'Nenhum resultado dispon\u00EDvel' }}\r\n </li>\r\n } @else {\r\n @for (data of filteredData; track data.value; let i = $index) {\r\n @if (!ocMaxResults || i < ocMaxResults) {\r\n <li class=\"li-option\" #listOptionsRef>\r\n <button\r\n type=\"button\"\r\n (click)=\"selectValue(data.value)\"\r\n [class.hover]=\"ocType !== 'counterSelect'\"\r\n [class.highlight]=\"selectedIndex === i\"\r\n >\r\n @if (data.icon) {\r\n <span\r\n class=\"material-symbols-outlined\"\r\n [ngStyle]=\"{\r\n 'font-size': data.iconSize || '1.2rem',\r\n }\"\r\n >\r\n {{ data.icon }}\r\n </span>\r\n }\r\n {{ data.name }}\r\n </button>\r\n @if (ocType === 'counterSelect') {\r\n <div class=\"oc-counter-select\">\r\n <button\r\n class=\"subtract\"\r\n (click)=\"decrementCounter(data)\"\r\n >\r\n <span class=\"material-symbols-outlined\">remove</span>\r\n </button>\r\n <p class=\"counter\">{{ data.counter || 0 }}</p>\r\n <button\r\n class=\"add\"\r\n (click)=\"incrementCounter(data)\"\r\n >\r\n <span class=\"material-symbols-outlined\">add</span>\r\n </button>\r\n </div>\r\n }\r\n </li>\r\n }\r\n }\r\n @if (ocMaxResults && filteredData.length > ocMaxResults) {\r\n <li class=\"no-options\">\r\n {{ ocTypeForMoreResultsText || 'Digite para ver mais resultados' }}\r\n </li>\r\n }\r\n }\r\n </ul>\r\n } @else if (isOptionsShown && ocLoading && !ocDisabled) {\r\n <div class=\"oc-options loader\">\r\n <span class=\"material-symbols-outlined loading\"> progress_activity </span>\r\n </div>\r\n }\r\n </div>\r\n</div>\r\n", styles: ["@charset \"UTF-8\";.oc-input-box.prefix .material-symbols-outlined{position:absolute;left:0;font-size:1.5rem;-webkit-user-select:none;user-select:none}.oc-input-box.suffix .material-symbols-outlined,.oc-input-box.suffix .oc.suffix{position:absolute;right:0;font-size:1.5rem;-webkit-user-select:none;user-select:none}.oc-input-box{position:relative;margin-top:.5rem}.oc-input-box select *{background-color:#f8f9ff}.oc-input-box label{position:absolute;left:0;top:0;padding:.5rem .7rem;font-size:.85rem;color:#8f9596;pointer-events:none;transition:.3s ease;border-radius:.5rem;white-space:nowrap}.oc-input-box label .oc.color.error{font-weight:700;margin-left:.2rem}.oc-input-box.prefix .material-symbols-outlined,.oc-input-box.prefix .oc.suffix{padding:.5rem .7rem}.oc-input-box.prefix input{padding-left:1.75rem}.oc-input-box.prefix label{padding:.7rem 2.5rem}.oc-input-box.suffix .material-symbols-outlined,.oc-input-box.suffix .oc.suffix{padding:.5rem .7rem}.oc-input-box.suffix input{padding-right:1.75rem}.oc-input-box.suffix label{padding:.7rem}.oc-input-box input,.oc-input-box textarea,.oc-input-box select{font-size:1rem;border-radius:.7rem;background-color:#f8f9ff;border:1px solid #d1d5db;outline:none;padding:.6rem .9rem;width:100%;transition:.3s ease;color:#7e8485;font-weight:500}.oc-input-box input:focus,.oc-input-box textarea:focus,.oc-input-box select:focus{border:1px solid #00dda3;box-shadow:0 4px 3.2px #00dda314}.oc-input-box input:not(:placeholder-shown)~label,.oc-input-box input:focus~label,.oc-input-box textarea:not(:placeholder-shown)~label,.oc-input-box textarea:focus~label,.oc-input-box select:valid~label,.oc-input-box select:focus~label{transform:translateY(-.855rem) translate(.6rem);color:#1e0832;background-color:#f8f9ff;padding:1px 7px;font-weight:500}.error input,.error textarea,.error select{border:1px solid #ed3a3a;box-shadow:0 4px 6.1px #a1000014}.oc-input-box.small input,.oc-input-box.small textarea,.oc-input-box.small select{padding:.3rem .7rem;border-radius:.5rem}.oc-input-box.small.prefix .material-symbols-outlined{padding:.35rem .7rem;font-size:1.25rem}.oc-input-box.small.prefix label{padding:.45rem 2.5rem}.oc-input-box.small.suffix .material-symbols-outlined{padding:.35rem .7rem}.oc-input-box.small.suffix label{padding:.45rem .7rem}.oc-input-box.small label{padding:.5rem .7rem}.oc-input-box.small input:focus~label,.oc-input-box.small input:not(:placeholder-shown)~label,.oc-input-box.small textarea:focus~label,.oc-input-box.small textarea:not(:placeholder-shown)~label,.oc-input-box.small select:focus~label,.oc-input-box.small select:valid~label{transform:translateY(-.99rem) translate(.6rem);color:#7e8485;background-color:#fff;padding:1px 7px;font-weight:500}.oc-input-box.large input,.oc-input-box.large textarea,.oc-input-box.large select{padding:1rem;border-radius:1rem}.oc-input-box.large label,.oc-input-box.large.prefix .material-symbols-outlined{padding:1rem .7rem}.oc-input-box.large.prefix input{padding-left:2.5rem}.oc-input-box.large.prefix label{padding:1.1rem 2.5rem}.oc-input-box.large.suffix .material-symbols-outlined{padding:.9rem .7rem}.oc-input-box.large.suffix input{padding-right:2.5rem}.oc-input-box.large.suffix label{padding:1.1rem .7rem}.oc-input-box.large input:focus~label,.oc-input-box.large input:not(:placeholder-shown)~label,.oc-input-box.large textarea:focus~label,.oc-input-box.large textarea:not(:placeholder-shown)~label,.oc-input-box.large select:focus~label,.oc-input-box.large select:valid~label{transform:translateY(-.77rem) translate(.6rem);color:#7e8485;background-color:#fff;padding:1px 7px;font-weight:500}.shui-input-box.prefix .material-symbols-outlined{position:absolute;left:0;font-size:1.5rem;-webkit-user-select:none;user-select:none}.shui-input-box.suffix .material-symbols-outlined,.shui-input-box.suffix .oc.suffix{position:absolute;right:0;font-size:1.5rem;-webkit-user-select:none;user-select:none}.shui-input-box{position:relative;margin-top:.5rem}.shui-input-box select *{background-color:#ebebeb}.shui-input-box label{position:absolute;left:0;top:0;padding:.5rem .7rem;font-size:.85rem;color:#000;pointer-events:none;transition:.3s ease;border-radius:.5rem;white-space:nowrap}.shui-input-box.prefix{z-index:5}.shui-input-box.prefix .material-symbols-outlined,.shui-input-box.prefix .oc.suffix{padding:.5rem .7rem}.shui-input-box.prefix input{padding-left:1.75rem}.shui-input-box.prefix label{padding:.7rem 2.5rem}.shui-input-box.suffix{z-index:5}.shui-input-box.suffix .material-symbols-outlined,.shui-input-box.suffix .oc.suffix{padding:.5rem .7rem}.shui-input-box.suffix input{padding-right:1.75rem}.shui-input-box.suffix label{padding:.7rem}.shui-input-box input,.shui-input-box textarea,.shui-input-box select{font-size:1rem;background-color:#ebebeb;border:none;outline:none;padding:1rem .9rem .2rem;width:100%;transition:.3s ease;color:#000;font-weight:400;height:41px;min-width:100%}.shui-input-box textarea{height:inherit;padding-top:20px}.shui-input-box input:not(:placeholder-shown)~label,.shui-input-box input:focus~label,.shui-input-box textarea:not(:placeholder-shown)~label,.shui-input-box textarea:focus~label,.shui-input-box select:valid~label,.shui-input-box select:focus~label{transform:translate(.45rem);background-color:#ebebeb;width:95%;padding:1px 7px 0;font-size:.7rem;font-weight:500}.shui-input-box input:focus~label,.shui-input-box textarea:focus~label,.shui-input-box select:valid~label,.shui-input-box select:focus~label{color:#0169b2}.shui-input-box:before{display:block;content:\"\";position:absolute;bottom:0;height:1px;width:100%;background-color:#7d7d7d;transition:.4s ease;width:0;background-color:#0169b2}.shui-input-box:focus-within:before{width:100%}.error input,.error textarea,.error select{border:1px solid #e7001d;box-shadow:0 4px 6.1px #a1000014}.error:before{width:0!important}.error small,.error label{color:#ed3a3a!important;font-weight:600}.shui-input-box.small input,.shui-input-box.small textarea,.shui-input-box.small select{max-height:36px;padding-top:1rem}.shui-input-box.small.prefix{z-index:5}.shui-input-box.small.prefix .material-symbols-outlined{padding:.35rem .7rem;font-size:1.25rem;color:#0169b2}.shui-input-box.small.prefix label{padding:.45rem 2.5rem}.shui-input-box.small.suffix{z-index:5}.shui-input-box.small.suffix .material-symbols-outlined{padding:.35rem .7rem;color:#0169b2}.shui-input-box.small.suffix label{padding:.45rem .7rem}.shui-input-box.large input,.shui-input-box.large textarea,.shui-input-box.large select{height:46px}.shui-input-box.large label{padding:1rem .7rem}.shui-input-box.large.prefix{z-index:5}.shui-input-box.large.prefix .material-symbols-outlined{padding:1rem .7rem}.shui-input-box.large.prefix input{padding-left:2.5rem}.shui-input-box.large.prefix label{padding:1.1rem 2.5rem}.shui-input-box.large.suffix{z-index:5}.shui-input-box.large.suffix .material-symbols-outlined{padding:.9rem .7rem}.shui-input-box.large.suffix input{padding-right:2.5rem}.shui-input-box.large.suffix label{padding:1.1rem .7rem}.oc.suffix,.oc.prefix,.material-symbols-outlined{z-index:5!important}.oc-input-box{position:relative}.oc-options-div{position:absolute;width:100%}.oc-has-close-button-input{padding-right:60px}.oc-has-close-button{display:flex;justify-content:center;align-items:center;position:absolute;right:.5rem!important;top:8%;height:84%;width:2.2rem;border:2px solid transparent;border-radius:.5rem;background-color:transparent;padding:0!important;transition:border-color .2s ease,box-shadow .2s ease}.oc-has-close-button:hover{border:2px solid #8f9596;box-shadow:0 4px 8.7px #00000021;cursor:pointer}.oc-has-close-button span{padding:0!important;margin:.3rem}.oc-counter-select{display:flex;gap:.2rem;align-items:center;float:right;max-height:30px}.oc-counter-select .counter{font-size:.9rem;color:#5505a2;font-weight:600;margin:0;padding:0}.oc-counter-select button{display:flex;justify-content:center;align-items:center;text-align:center;max-width:20px}.oc-counter-select .subtract span,.oc-counter-select .add span{font-size:1rem;font-weight:600;text-align:center}.oc-counter-select span{transition:.2s ease}.oc-counter-select .subtract:hover span{color:#ed3a3a!important}.oc-counter-select .add:hover span{color:#00dda3!important}.shui-option-box .oc-counter-select .counter{color:#0169b2}.oc-options{display:flex;flex-direction:column;list-style:none;max-height:40vh;background-color:#f8f9ff;border:2px solid #ffffff;box-shadow:0 4px 8.7px #00000021;padding:0;margin-block-start:0;border-radius:.5rem;overflow:hidden;width:100%;position:absolute;top:50%;overflow-y:auto;z-index:15}.oc-options>li{padding:0;margin:0;display:flex;justify-content:space-between}.oc-options>li button{width:100%;text-align:left;padding:.6rem;border:none;background-color:#f8f9ff;cursor:pointer;display:flex;align-items:center}.oc-options>li button span.material-symbols-outlined{line-height:0;color:#8f9596;margin:0 8px 0 0;padding:0}.oc-options>li button.hover:hover{filter:brightness(.9)}.oc-options>li button.highlight{filter:brightness(.9)}.no-options{padding:.6rem!important;color:#8f9596}.oc-options.loader{display:flex;align-items:center;justify-content:center}.oc-options.loader span{width:24px;margin:3rem;color:#5505a2}.loading{animation:spinLoad .5s linear infinite}.semantic-input{display:inline-block;width:100%;padding:10px 12px;font-size:14px;line-height:1.5;color:#333;background-color:#fff;border:1px solid #ccc;border-radius:4px;box-shadow:0 1px 2px #22242626;transition:border-color .2s ease,box-shadow .2s ease}.semantic-input:hover{border-color:#b3b3b3}.semantic-input:focus{border-color:#85b7d9;box-shadow:0 0 0 2px #22242626;outline:none}.semantic-input:disabled{background-color:#f9f9f9;color:#b3b3b3;border-color:#ddd;cursor:not-allowed}@keyframes spinLoad{0%{transform:rotate(0)}to{transform:rotate(360deg)}}\n"] }]
269
283
  }], ctorParameters: () => [{ type: i0.Renderer2 }, { type: i0.ElementRef }, { type: i1.InternationalizationService }, { type: i2.StyleThemeService }, { type: i0.ChangeDetectorRef }], propDecorators: { input: [{
270
284
  type: ViewChild,
271
285
  args: ['input']
@@ -275,6 +289,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
275
289
  }], outerDiv: [{
276
290
  type: ViewChild,
277
291
  args: ['outerDiv']
292
+ }], listOptionsElements: [{
293
+ type: ViewChildren,
294
+ args: ['listOptionsRef']
278
295
  }], ocPrefix: [{
279
296
  type: ContentChild,
280
297
  args: ['ocPrefix']
@@ -353,4 +370,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
353
370
  type: HostBinding,
354
371
  args: ['style.max-width']
355
372
  }] } });
356
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib2MtYXV0b2NvbXBsZXRlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL290aW11cy1saWJyYXJ5L3NyYy9saWIvY29tcG9uZW50cy9vYy1hdXRvY29tcGxldGUvb2MtYXV0b2NvbXBsZXRlLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL290aW11cy1saWJyYXJ5L3NyYy9saWIvY29tcG9uZW50cy9vYy1hdXRvY29tcGxldGUvb2MtYXV0b2NvbXBsZXRlLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQTtBQUM5QyxPQUFPLEVBR0wsdUJBQXVCLEVBRXZCLFNBQVMsRUFDVCxZQUFZLEVBRVosWUFBWSxFQUNaLFdBQVcsRUFDWCxLQUFLLEVBR0wsTUFBTSxFQUdOLFNBQVMsR0FDVixNQUFNLGVBQWUsQ0FBQTtBQUV0QixPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUE7QUFDNUMsT0FBTyxFQUFFLDJCQUEyQixFQUFFLE1BQU0sNkNBQTZDLENBQUE7Ozs7OztBQWtCekYsTUFBTSxPQUFPLHVCQUF1QjtJQUdsQyxZQUNVLFFBQW1CLEVBQ25CLEVBQWMsRUFDZCxnQkFBNkMsRUFDN0MsaUJBQW9DLEVBQ3BDLEdBQXNCO1FBSnRCLGFBQVEsR0FBUixRQUFRLENBQVc7UUFDbkIsT0FBRSxHQUFGLEVBQUUsQ0FBWTtRQUNkLHFCQUFnQixHQUFoQixnQkFBZ0IsQ0FBNkI7UUFDN0Msc0JBQWlCLEdBQWpCLGlCQUFpQixDQUFtQjtRQUNwQyxRQUFHLEdBQUgsR0FBRyxDQUFtQjtRQVV4QixZQUFPLEdBQXlCLEVBQUUsQ0FBQTtRQXVCakMsV0FBTSxHQUFpQyxRQUFRLENBQUE7UUFDL0MsWUFBTyxHQUFRLEVBQUUsQ0FBQTtRQUNqQixvQkFBZSxHQUFZLEtB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O3NCQUE5QixNQUFNO2dCQUNHLGdCQUFnQjtzQkFBekIsTUFBTTtnQkFDRyxPQUFPO3NCQUFoQixNQUFNO2dCQWVILGFBQWE7c0JBRGhCLFdBQVc7dUJBQUMsYUFBYTtnQkFNdEIsZ0JBQWdCO3NCQURuQixXQUFXO3VCQUFDLGlCQUFpQjtnQkFNMUIsZ0JBQWdCO3NCQURuQixXQUFXO3VCQUFDLGlCQUFpQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbidcclxuaW1wb3J0IHtcclxuICBBZnRlckNvbnRlbnRDaGVja2VkLFxyXG4gIEFmdGVyVmlld0luaXQsXHJcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXHJcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXHJcbiAgQ29tcG9uZW50LFxyXG4gIENvbnRlbnRDaGlsZCxcclxuICBFbGVtZW50UmVmLFxyXG4gIEV2ZW50RW1pdHRlcixcclxuICBIb3N0QmluZGluZyxcclxuICBJbnB1dCxcclxuICBPbkNoYW5nZXMsXHJcbiAgT25Jbml0LFxyXG4gIE91dHB1dCxcclxuICBSZW5kZXJlcjIsXHJcbiAgU2ltcGxlQ2hhbmdlcyxcclxuICBWaWV3Q2hpbGQsXHJcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSdcclxuaW1wb3J0IHsgT2NBdXRvQ29tcGxldGVUeXBlIH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcy9vYy1hdXRvY29tcGxldGUnXHJcbmltcG9ydCB7IEZvcm1zTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnXHJcbmltcG9ydCB7IEludGVybmF0aW9uYWxpemF0aW9uU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2ludGVybmF0aW9uYWxpemF0aW9uLnNlcnZpY2UnXHJcbmltcG9ydCB7IE9jU3R5bGVUaGVtZVR5cGUgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzL29jLXN0eWxlLXRoZW1lJ1xyXG5pbXBvcnQgeyBTdHlsZVRoZW1lU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3N0eWxlLXRoZW1lLnNlcnZpY2UnXHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ29jLWF1dG9jb21wbGV0ZScsXHJcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcclxuICBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlLCBGb3Jtc01vZHVsZV0sXHJcbiAgcHJvdmlkZXJzOiBbSW50ZXJuYXRpb25hbGl6YXRpb25TZXJ2aWNlXSxcclxuICBob3N0OiB7XHJcbiAgICAnW3N0eWxlLndpZHRoXSc6ICdjb21wdXRlZFdpZHRoJyxcclxuICAgICdbc3R5bGUubWluLXdpZHRoXSc6ICdjb21wdXRlZE1pbldpZHRoJyxcclxuICAgICdbc3R5bGUubWF4LXdpZHRoXSc6ICdjb21wdXRlZE1heFdpZHRoJyxcclxuICB9LFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9vYy1hdXRvY29tcGxldGUuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsOiAnLi9vYy1hdXRvY29tcGxldGUuY29tcG9uZW50LnNjc3MnLFxyXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuRGVmYXVsdCxcclxufSlcclxuZXhwb3J0IGNsYXNzIE9jQXV0b2NvbXBsZXRlQ29tcG9uZW50XHJcbiAgaW1wbGVtZW50cyBBZnRlclZpZXdJbml0LCBPbkNoYW5nZXMsIEFmdGVyQ29udGVudENoZWNrZWQsIE9uSW5pdFxyXG57XHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIHJlbmRlcmVyOiBSZW5kZXJlcjIsXHJcbiAgICBwcml2YXRlIGVsOiBFbGVtZW50UmVmLFxyXG4gICAgcHJpdmF0ZSB0cmFuc2xhdGVTZXJ2aWNlOiBJbnRlcm5hdGlvbmFsaXphdGlvblNlcnZpY2UsXHJcbiAgICBwcml2YXRlIHN0eWxlVGhlbWVTZXJ2aWNlOiBTdHlsZVRoZW1lU2VydmljZSxcclxuICAgIHByaXZhdGUgY2RyOiBDaGFuZ2VEZXRlY3RvclJlZlxyXG4gICkge31cclxuXHJcbiAgQFZpZXdDaGlsZCgnaW5wdXQnKSBpbnB1dCE6IEVsZW1lbnRSZWZcclxuICBAVmlld0NoaWxkKCdvcHRpb25zJykgb3B0aW9ucyE6IEVsZW1lbnRSZWZcclxuICBAVmlld0NoaWxkKCdvdXRlckRpdicpIG91dGVyRGl2ITogRWxlbWVudFJlZjxIVE1MRGl2RWxlbWVudD5cclxuXHJcbiAgQENvbnRlbnRDaGlsZCgnb2NQcmVmaXgnKSBvY1ByZWZpeDogYW55XHJcbiAgQENvbnRlbnRDaGlsZCgnb2NTdWZmaXgnKSBvY1N1ZmZpeDogYW55XHJcblxyXG4gIHByaXZhdGUgX29jRGF0YTogT2NBdXRvQ29tcGxldGVUeXBlW10gPSBbXVxyXG4gIEBJbnB1dCgpXHJcbiAgc2V0IG9jRGF0YSh2YWx1ZTogT2NBdXRvQ29tcGxldGVUeXBlW10pIHtcclxuICAgIHRoaXMuX29jRGF0YSA9IHZhbHVlXHJcblxyXG4gICAgdGhpcy5maWx0ZXJlZERhdGEgPSB2YWx1ZVxyXG5cclxuICAgIGlmICh0aGlzLm9jU2VsZWN0QnlUeXBpbmcgJiYgdGhpcy5vY1ZhbHVlKSB7XHJcbiAgICAgIGNvbnN0IGZvdW5kID0gdmFsdWUuZmluZCgoZWwpID0+IGVsLnZhbHVlID09IHRoaXMub2NWYWx1ZSlcclxuICAgICAgaWYgKGZvdW5kKSB7XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZFZhbHVlID0gZm91bmRcclxuICAgICAgICB0aGlzLm9jVmFsdWUgPSBmb3VuZC5uYW1lXHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCkgLy8gRm9yw6dhIGEgYXR1YWxpemHDp8Ojb1xyXG4gIH1cclxuXHJcbiAgZ2V0IG9jRGF0YSgpOiBPY0F1dG9Db21wbGV0ZVR5cGVbXSB7XHJcbiAgICByZXR1cm4gdGhpcy5fb2NEYXRhXHJcbiAgfVxyXG4gIEBJbnB1dCgpIG9jUGxhY2Vob2xkZXI/OiBzdHJpbmdcclxuICBASW5wdXQoKSBvY0Vycm9yPzogc3RyaW5nXHJcbiAgQElucHV0KCkgb2NTaXplOiAnc21hbGwnIHwgJ2xhcmdlJyB8ICdtZWRpdW0nID0gJ21lZGl1bSdcclxuICBASW5wdXQoKSBvY1ZhbHVlOiBhbnkgPSAnJ1xyXG4gIEBJbnB1dCgpIG9jQ2xlYXJPbkNoYW5nZTogYm9vbGVhbiA9IGZhbHNlXHJcbiAgQElucHV0KCkgb2NXaWR0aD86IHN0cmluZ1xyXG4gIEBJbnB1dCgpIG9jTWluV2lkdGg/OiBzdHJpbmdcclxuICBASW5wdXQoKSBvY01heFdpZHRoPzogc3RyaW5nXHJcbiAgQElucHV0KCkgb2NPcHRpb25zTWF4SGVpZ2h0Pzogc3RyaW5nXHJcbiAgQElucHV0KCkgb2NPcHRpb25zV2lkdGg/OiBzdHJpbmdcclxuICBASW5wdXQoKSBvY1JlcXVpcmVkOiBib29sZWFuID0gZmFsc2VcclxuICBASW5wdXQoKSBvY01heFJlc3VsdHM/OiBudW1iZXJcclxuICBASW5wdXQoKSBvY0FsbG93Tm90TGlzdGVkVmFsdWU6IGJvb2xlYW4gPSBmYWxzZVxyXG4gIEBJbnB1dCgpIG9jTm9BdmFpbGFibGVPcHRpb25zVGV4dD86IHN0cmluZ1xyXG4gIEBJbnB1dCgpIG9jVHlwZUZvck1vcmVSZXN1bHRzVGV4dD86IHN0cmluZ1xyXG4gIEBJbnB1dCgpIG9jTG9hZGluZzogYm9vbGVhbiA9IGZhbHNlXHJcbiAgQElucHV0KCkgb2NTZW1hbnRpY0xpa2U6IGJvb2xlYW4gPSBmYWxzZSAvLyBkZXByZWNhdGVkLiBQcmVmZXIgdXNpbmcgb2NTdHlsZVRoZW1lIGluc3RlYWRcclxuICBASW5wdXQoKSBvY1N0eWxlOiBPY1N0eWxlVGhlbWVUeXBlID0gJ290aW11cydcclxuICBASW5wdXQoKSBvY1RhYkluZGV4PzogbnVtYmVyXHJcbiAgQElucHV0KCkgaWNvblNpemU6ICdzbWFsbCcgfCAnbWVkaXVtJyB8ICdsYXJnZScgPSAnbWVkaXVtJ1xyXG4gIEBJbnB1dCgpIG9jU2VsZWN0QnlUeXBpbmc6IGJvb2xlYW4gPSB0cnVlXHJcbiAgQElucHV0KCkgb2NEaXNhYmxlZCA9IGZhbHNlXHJcbiAgQElucHV0KCkgb2NUeXBlOiAnY291bnRlclNlbGVjdCcgfCAnZGVmYXVsdCcgPSAnZGVmYXVsdCdcclxuXHJcbiAgQElucHV0KCkgb2NIYXNEZWxldGVCdXR0b24/OiBib29sZWFuID0gZmFsc2VcclxuICBASW5wdXQoKSBvY0VuYWJsZUtleWJvYXJkOiBib29sZWFuID0gZmFsc2VcclxuXHJcbiAgQE91dHB1dCgpIG9jVmFsdWVDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPHN0cmluZz4oKVxyXG4gIEBPdXRwdXQoKSBvY0NoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8c3RyaW5nIHwgbnVsbD4oKVxyXG4gIEBPdXRwdXQoKSBvY0NvdW50ZXJTZWxlY3RDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPE9jQXV0b0NvbXBsZXRlVHlwZVtdPigpXHJcbiAgQE91dHB1dCgpIG9jT3B0aW9uTm90Rm91bmQgPSBuZXcgRXZlbnRFbWl0dGVyKClcclxuICBAT3V0cHV0KCkgb2NDbGljayA9IG5ldyBFdmVudEVtaXR0ZXIoKVxyXG5cclxuICBoYXNTdWZmaXg6IGJvb2xlYW4gPSBmYWxzZVxyXG4gIGhhc1ByZWZpeDogYm9vbGVhbiA9IGZhbHNlXHJcblxyXG4gIGlzT3B0aW9uc1Nob3duOiBib29sZWFuID0gZmFsc2VcclxuICBmaWx0ZXJlZERhdGE6IE9jQXV0b0NvbXBsZXRlVHlwZVtdID0gW11cclxuICBzZWxlY3RlZFZhbHVlOiBPY0F1dG9Db21wbGV0ZVR5cGUgPSB7XHJcbiAgICBuYW1lOiAnJyxcclxuICAgIHZhbHVlOiBudWxsLFxyXG4gIH1cclxuXHJcbiAgc2VsZWN0ZWRJbmRleDogbnVtYmVyID0gLTFcclxuXHJcbiAgQEhvc3RCaW5kaW5nKCdzdHlsZS53aWR0aCcpXHJcbiAgZ2V0IGNvbXB1dGVkV2lkdGgoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5vY1dpZHRoID8gdGhpcy5vY1dpZHRoIDogbnVsbFxyXG4gIH1cclxuXHJcbiAgQEhvc3RCaW5kaW5nKCdzdHlsZS5taW4td2lkdGgnKVxyXG4gIGdldCBjb21wdXRlZE1pbldpZHRoKCkge1xyXG4gICAgcmV0dXJuIHRoaXMub2NNaW5XaWR0aCB8fCAnMCdcclxuICB9XHJcblxyXG4gIEBIb3N0QmluZGluZygnc3R5bGUubWF4LXdpZHRoJylcclxuICBnZXQgY29tcHV0ZWRNYXhXaWR0aCgpIHtcclxuICAgIHJldHVybiB0aGlzLm9jTWF4V2lkdGggfHwgJzEwMCUnXHJcbiAgfVxyXG5cclxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5vY1ByZWZpeCkge1xyXG4gICAgICB0aGlzLmhhc1ByZWZpeCA9IHRydWVcclxuICAgIH1cclxuICAgIGlmICh0aGlzLm9jU3VmZml4KSB7XHJcbiAgICAgIHRoaXMuaGFzU3VmZml4ID0gdHJ1ZVxyXG4gICAgfVxyXG4gICAgdGhpcy5mb3JtYXRPY1ZhbHVlVHlwZSgpXHJcbiAgICB0aGlzLmxvYWRPcHRpb25zKClcclxuXHJcbiAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKClcclxuICB9XHJcblxyXG4gIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMub2NWYWx1ZSA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIHRoaXMub2NWYWx1ZSA9IG51bGxcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcclxuICAgIHRoaXMub2NTdHlsZSA9IHRoaXMuc3R5bGVUaGVtZVNlcnZpY2UuZ2V0U3R5bGVUaGVtZSgpIHx8IHRoaXMub2NTdHlsZVxyXG4gICAgaWYgKHRoaXMub2NQcmVmaXgpIHtcclxuICAgICAgdGhpcy5oYXNQcmVmaXggPSB0cnVlXHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5vY1N1ZmZpeCkge1xyXG4gICAgICB0aGlzLmhhc1N1ZmZpeCA9IHRydWVcclxuICAgIH1cclxuICAgIHRoaXMuZm9ybWF0T2NWYWx1ZVR5cGUoKVxyXG4gICAgdGhpcy5sb2FkT3B0aW9ucygpXHJcbiAgICB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuZ2V0VHJhbnNsYXRpb25zQnlMYW5ndWFnZSgpXHJcbiAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKClcclxuICB9XHJcblxyXG4gIG5nQWZ0ZXJDb250ZW50Q2hlY2tlZCgpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLm9jUHJlZml4KSB7XHJcbiAgICAgIHRoaXMuaGFzUHJlZml4ID0gdHJ1ZVxyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMub2NTdWZmaXgpIHtcclxuICAgICAgdGhpcy5oYXNTdWZmaXggPSB0cnVlXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBmb3JtYXRPY1ZhbHVlVHlwZSgpIHtcclxuICAgIGlmICh0aGlzLm9jVmFsdWUpIHtcclxuICAgICAgcmV0dXJuIGAke3RoaXMub2NWYWx1ZX1gXHJcbiAgICB9XHJcbiAgICByZXR1cm4gbnVsbFxyXG4gIH1cclxuXHJcbiAgZ2V0VHJhbnNsYXRpb24oY29kZTogbnVtYmVyIHwgc3RyaW5nKSB7XHJcbiAgICByZXR1cm4gdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmdldFRyYW5zbGF0aW9uKGNvZGUpXHJcbiAgfVxyXG5cclxuICBsb2FkT3B0aW9ucygpIHtcclxuICAgIHRoaXMuZm9ybWF0T2NWYWx1ZVR5cGUoKVxyXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgIHRoaXMuZmlsdGVyZWREYXRhID0gdGhpcy5vY0RhdGFcclxuXHJcbiAgICAgIGNvbnN0IGlucHV0Qm94ID0gdGhpcy5lbC5uYXRpdmVFbGVtZW50XHJcblxyXG4gICAgICBpZiAodGhpcy5vY1NlbGVjdEJ5VHlwaW5nICYmIHRoaXMub2NWYWx1ZSkge1xyXG4gICAgICAgIGNvbnN0IGZvdW5kID0gdGhpcy5vY0RhdGEuZmluZCgoZWwpID0+IGVsLnZhbHVlID09IHRoaXMub2NWYWx1ZSlcclxuXHJcbiAgICAgICAgaWYgKGZvdW5kKSB7XHJcbiAgICAgICAgICB0aGlzLnNlbGVjdGVkVmFsdWUgPSBmb3VuZFxyXG4gICAgICAgICAgdGhpcy5vY1ZhbHVlID0gZm91bmQubmFtZVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKGlucHV0Qm94KSB7XHJcbiAgICAgICAgY29uc3QgaW5wdXRFbGVtZW50ID0gaW5wdXRCb3gucXVlcnlTZWxlY3RvcignaW5wdXQnKVxyXG5cclxuICAgICAgICBpZiAoaW5wdXRFbGVtZW50ICYmICF0aGlzLm9jU2VtYW50aWNMaWtlICYmIFsnb3RpbXVzJywgJ3NodWknXS5pbmNsdWRlcyh0aGlzLm9jU3R5bGUpKSB7XHJcbiAgICAgICAgICB0aGlzLnJlbmRlcmVyLnNldEF0dHJpYnV0ZShpbnB1dEVsZW1lbnQsICdwbGFjZWhvbGRlcicsICcnKVxyXG4gICAgICAgICAgdGhpcy5yZW5kZXJlci5zZXRBdHRyaWJ1dGUoaW5wdXRFbGVtZW50LCAncmVxdWlyZWQnLCB0aGlzLm9jUmVxdWlyZWQudG9TdHJpbmcoKSlcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH0sIDUwKVxyXG4gIH1cclxuXHJcbiAgY2xvc2VPbkNsaWNrT3V0KCk6IHZvaWQge1xyXG4gICAgdGhpcy5yZW5kZXJlci5saXN0ZW4oJ3dpbmRvdycsICdjbGljaycsIChlOiBFdmVudCkgPT4ge1xyXG4gICAgICBjb25zdCB0YXJnZXQgPSBlLnRhcmdldCBhcyBIVE1MRWxlbWVudFxyXG5cclxuICAgICAgY29uc3QgaW5zaWRlQ291bnRlclNlbGVjdCA9XHJcbiAgICAgICAgdGhpcy5vY1R5cGUgPT09ICdjb3VudGVyU2VsZWN0JyAmJiB0YXJnZXQuY2xvc2VzdCgnLm9jLWNvdW50ZXItc2VsZWN0JylcclxuXHJcbiAgICAgIGlmICh0aGlzLmlucHV0ICYmIHRoaXMub3B0aW9ucyAmJiAhaW5zaWRlQ291bnRlclNlbGVjdCkge1xyXG4gICAgICAgIGlmICh0YXJnZXQgIT09IHRoaXMuaW5wdXQubmF0aXZlRWxlbWVudCAmJiB0YXJnZXQgIT09IHRoaXMub3B0aW9ucy5uYXRpdmVFbGVtZW50KSB7XHJcbiAgICAgICAgICB0aGlzLmlzT3B0aW9uc1Nob3duID0gZmFsc2VcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHRoaXMuZmluZEJ5VHlwaW5nKClcclxuICAgIH0pXHJcbiAgfVxyXG5cclxuICBmaW5kQnlUeXBpbmcoKTogdm9pZCB7XHJcbiAgICBpZiAoIXRoaXMub2NWYWx1ZSB8fCAhdGhpcy5vY1ZhbHVlPy50b1N0cmluZygpLnRyaW0oKS5sZW5ndGgpIHtcclxuICAgICAgdGhpcy5vY0NoYW5nZS5lbWl0KG51bGwpXHJcbiAgICAgIHRoaXMub2NPcHRpb25Ob3RGb3VuZC5lbWl0KClcclxuICAgIH1cclxuICAgIGlmICghdGhpcy5vY1NlbGVjdEJ5VHlwaW5nKSB7XHJcbiAgICAgIHJldHVyblxyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IGZvdW5kVmFsdWUgPSB0aGlzLm9jRGF0YS5maW5kKFxyXG4gICAgICAoZGF0YSkgPT5cclxuICAgICAgICBkYXRhLm5hbWUudG9TdHJpbmcoKS50b0xvd2VyQ2FzZSgpID09PSB0aGlzLm9jVmFsdWU/LnRvU3RyaW5nKCkudG9Mb3dlckNhc2UoKSB8fFxyXG4gICAgICAgIGRhdGEudmFsdWUudG9TdHJpbmcoKS50b0xvd2VyQ2FzZSgpID09PSB0aGlzLm9jVmFsdWU/LnRvU3RyaW5nKCkudG9Mb3dlckNhc2UoKVxyXG4gICAgKVxyXG5cclxuICAgIGlmICghZm91bmRWYWx1ZSkge1xyXG4gICAgICB0aGlzLnNlbGVjdGVkVmFsdWUgPSB7XHJcbiAgICAgICAgbmFtZTogJycsXHJcbiAgICAgICAgdmFsdWU6IG51bGwsXHJcbiAgICAgIH1cclxuICAgICAgaWYgKCF0aGlzLm9jQWxsb3dOb3RMaXN0ZWRWYWx1ZSkge1xyXG4gICAgICAgIHRoaXMub2NWYWx1ZSA9ICcnXHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5maWx0ZXJlZERhdGEgPSB0aGlzLm9jRGF0YVxyXG4gICAgICByZXR1cm5cclxuICAgIH1cclxuICAgIHRoaXMuc2VsZWN0ZWRWYWx1ZSA9IGZvdW5kVmFsdWVcclxuICB9XHJcblxyXG4gIGZpbHRlckRhdGEobmFtZTogc3RyaW5nKTogdm9pZCB7XHJcbiAgICB0aGlzLmlzT3B0aW9uc1Nob3duID0gdHJ1ZVxyXG4gICAgdGhpcy5maWx0ZXJlZERhdGEgPSB0aGlzLm9jRGF0YS5maWx0ZXIoKGRhdGEpID0+IHtcclxuICAgICAgcmV0dXJuIHRoaXMuZ2V0Rm9ybWF0dGVkTmFtZShkYXRhLm5hbWUpPy5pbmNsdWRlcyh0aGlzLmdldEZvcm1hdHRlZE5hbWUobmFtZSkpXHJcbiAgICB9KVxyXG4gIH1cclxuXHJcbiAgZ2V0Rm9ybWF0dGVkTmFtZShzdHI6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gc3RyXHJcbiAgICAgID8udG9Mb3dlckNhc2UoKVxyXG4gICAgICAubm9ybWFsaXplKCdORkQnKVxyXG4gICAgICAucmVwbGFjZSgvW1xcdTAzMDAtXFx1MDM2Zl0vZywgJycpIC8vIFJlbW92ZSBtYXJjYXMgZGlhY3LDrXRpY2FzXHJcbiAgfVxyXG5cclxuICB0b2dnbGVPcHRpb25zKCkge1xyXG4gICAgdGhpcy5jbG9zZU9uQ2xpY2tPdXQoKVxyXG4gICAgdGhpcy5pc09wdGlvbnNTaG93biA9ICF0aGlzLmlzT3B0aW9uc1Nob3duXHJcbiAgfVxyXG5cclxuICBzZWxlY3RWYWx1ZSh2YWx1ZTogYW55KSB7XHJcbiAgICBjb25zdCBmb3VuZFZhbHVlID0gdGhpcy5vY0RhdGEuZmluZCgoZGF0YSkgPT4gZGF0YS52YWx1ZSA9PSB2YWx1ZSlcclxuXHJcbiAgICBpZiAoIWZvdW5kVmFsdWUpIHtcclxuICAgICAgdGhpcy5zZWxlY3RlZFZhbHVlID0ge1xyXG4gICAgICAgIG5hbWU6ICcnLFxyXG4gICAgICAgIHZhbHVlOiBudWxsLFxyXG4gICAgICB9XHJcblxyXG4gICAgICB0aGlzLnNlbGVjdGVkSW5kZXggPSAtMVxyXG4gICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKClcclxuICAgICAgcmV0dXJuXHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMub2NUeXBlID09PSAnY291bnRlclNlbGVjdCcpIHtcclxuICAgICAgZm91bmRWYWx1ZS5jb3VudGVyID0gKGZvdW5kVmFsdWUuY291bnRlciB8fCAwKSArIDFcclxuICAgICAgdGhpcy5lbWl0Q291bnRlclNlbGVjdENoYW5nZSgpXHJcbiAgICAgIHJldHVyblxyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuc2VsZWN0ZWRWYWx1ZSA9IGZvdW5kVmFsdWVcclxuICAgIGlmICh0aGlzLm9jQ2xlYXJPbkNoYW5nZSkge1xyXG4gICAgICB0aGlzLm9jVmFsdWUgPSAnJ1xyXG4gICAgICB0aGlzLmZpbHRlcmVkRGF0YSA9IHRoaXMub2NEYXRhXHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLm9jVmFsdWUgPSBmb3VuZFZhbHVlLm5hbWVcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmlzT3B0aW9uc1Nob3duID0gZmFsc2VcclxuICAgIHRoaXMuc2VsZWN0ZWRJbmRleCA9IHRoaXMuZmlsdGVyZWREYXRhLmluZGV4T2YoZm91bmRWYWx1ZSlcclxuXHJcbiAgICB0aGlzLm9jQ2hhbmdlLmVtaXQodGhpcy5zZWxlY3RlZFZhbHVlLnZhbHVlKVxyXG5cclxuICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKVxyXG4gIH1cclxuXHJcbiAgY2xlYXJWYWx1ZSgpIHtcclxuICAgIHRoaXMuc2VsZWN0ZWRWYWx1ZSA9IHtcclxuICAgICAgbmFtZTogJycsXHJcbiAgICAgIHZhbHVlOiBudWxsLFxyXG4gICAgfVxyXG4gICAgdGhpcy5vY1ZhbHVlID0gJydcclxuICAgIHRoaXMuZmlsdGVyZWREYXRhID0gdGhpcy5vY0RhdGFcclxuICB9XHJcblxyXG4gIHByb3RlY3RlZCBpbmNyZW1lbnRDb3VudGVyKG9wdGlvbjogT2NBdXRvQ29tcGxldGVUeXBlKTogdm9pZCB7XHJcbiAgICBpZiAoIW9wdGlvbi5jb3VudGVyKSB7XHJcbiAgICAgIG9wdGlvbi5jb3VudGVyID0gMVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgb3B0aW9uLmNvdW50ZXIrK1xyXG4gICAgfVxyXG4gICAgdGhpcy5lbWl0Q291bnRlclNlbGVjdENoYW5nZSgpXHJcbiAgfVxyXG5cclxuICBwcm90ZWN0ZWQgZGVjcmVtZW50Q291bnRlcihvcHRpb246IE9jQXV0b0NvbXBsZXRlVHlwZSk6IHZvaWQge1xyXG4gICAgaWYgKG9wdGlvbi5jb3VudGVyICYmIG9wdGlvbi5jb3VudGVyID4gMCkge1xyXG4gICAgICBvcHRpb24uY291bnRlci0tXHJcbiAgICAgIHRoaXMuZW1pdENvdW50ZXJTZWxlY3RDaGFuZ2UoKVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZW1pdENvdW50ZXJTZWxlY3RDaGFuZ2UoKTogdm9pZCB7XHJcbiAgICBjb25zdCBoYXNNb3JlVGhhblplcm8gPSB0aGlzLm9jRGF0YS5maWx0ZXIoKGRhdGEpID0+ICEhZGF0YS5jb3VudGVyKVxyXG4gICAgdGhpcy5vY0NvdW50ZXJTZWxlY3RDaGFuZ2UuZW1pdChoYXNNb3JlVGhhblplcm8pXHJcbiAgfVxyXG5cclxuICBwcm90ZWN0ZWQgb25LZXlEb3duKGV2ZW50OiBFdmVudCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMub2NFbmFibGVLZXlib2FyZCAmJiB0aGlzLmlzT3B0aW9uc1Nob3duKSB7XHJcbiAgICAgIGNvbnN0IGUgPSBldmVudCBhcyBLZXlib2FyZEV2ZW50XHJcbiAgICAgIGlmIChlLmtleSA9PT0gJ0Fycm93VXAnKSB7XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZEluZGV4ID0gTWF0aC5tYXgodGhpcy5zZWxlY3RlZEluZGV4IC0gMSwgMClcclxuICAgICAgfSBlbHNlIGlmIChlLmtleSA9PT0gJ0Fycm93RG93bicpIHtcclxuICAgICAgICB0aGlzLnNlbGVjdGVkSW5kZXggPSBNYXRoLm1pbih0aGlzLnNlbGVjdGVkSW5kZXggKyAxLCB0aGlzLmZpbHRlcmVkRGF0YS5sZW5ndGggLSAxKVxyXG4gICAgICB9IGVsc2UgaWYgKGUua2V5ID09PSAnRW50ZXInKSB7XHJcbiAgICAgICAgdGhpcy5zZWxlY3RWYWx1ZSh0aGlzLmZpbHRlcmVkRGF0YVt0aGlzLnNlbGVjdGVkSW5kZXhdLnZhbHVlKVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcbiIsIjxkaXZcclxuICBbbmdDbGFzc109XCJ7XHJcbiAgICAnb2MtaW5wdXQtYm94JzogIW9jU2VtYW50aWNMaWtlICYmIG9jU3R5bGUgPT09ICdvdGltdXMnLFxyXG4gICAgc21hbGw6IG9jU2l6ZSA9PT0gJ3NtYWxsJyxcclxuICAgIGxhcmdlOiBvY1NpemUgPT09ICdsYXJnZScsXHJcbiAgICBlcnJvcjogISFvY0Vycm9yLFxyXG4gICAgcHJlZml4OiBoYXNQcmVmaXgsXHJcbiAgICBzdWZmaXg6IGhhc1N1ZmZpeCB8fCBvY0hhc0RlbGV0ZUJ1dHRvbixcclxuICAgIHNodWk6IG9jU3R5bGUgPT09ICdzaHVpJyxcclxuICAgICdzaHVpLWlucHV0LWJveCc6IG9jU3R5bGUgPT09ICdzaHVpJyxcclxuICB9XCJcclxuPlxyXG4gIDxuZy1jb250ZW50PjwvbmctY29udGVudD5cclxuICA8aW5wdXRcclxuICAgIFtwbGFjZWhvbGRlcl09XCJvY1BsYWNlaG9sZGVyXCJcclxuICAgICNpbnB1dFxyXG4gICAgKGNsaWNrKT1cInRvZ2dsZU9wdGlvbnMoKTsgb2NDbGljay5lbWl0KClcIlxyXG4gICAgdHlwZT1cInRleHRcIlxyXG4gICAgKGlucHV0KT1cImZpbHRlckRhdGEob2NWYWx1ZSlcIlxyXG4gICAgWyhuZ01vZGVsKV09XCJvY1ZhbHVlXCJcclxuICAgIChuZ01vZGVsQ2hhbmdlKT1cIm9jVmFsdWUgPSAkZXZlbnQ7IG9jVmFsdWVDaGFuZ2UuZW1pdCgkZXZlbnQpXCJcclxuICAgIFtuZ0NsYXNzXT1cIntcclxuICAgICAgJ3NlbWFudGljLWlucHV0Jzogb2NTZW1hbnRpY0xpa2UgfHwgb2NTdHlsZSA9PT0gJ3NlbWFudGljJyxcclxuICAgIH1cIlxyXG4gICAgW3RhYmluZGV4XT1cIm9jVGFiSW5kZXhcIlxyXG4gICAgW2Rpc2FibGVkXT1cIm9jRGlzYWJsZWRcIlxyXG4gICAgKGtleWRvd24pPVwib25LZXlEb3duKCRldmVudClcIlxyXG4gIC8+XHJcbiAgQGlmICghb2NTZW1hbnRpY0xpa2UgJiYgb2NTdHlsZSAhPT0gJ3NlbWFudGljJykge1xyXG4gICAgPGxhYmVsPlxyXG4gICAgICA8c3BhbiBbaW5uZXJIVE1MXT1cIm9jUGxhY2Vob2xkZXJcIj48L3NwYW4+XHJcbiAgICAgIEBpZiAob2NSZXF1aXJlZCkge1xyXG4gICAgICAgIDxzcGFuIGNsYXNzPVwib2MgY29sb3IgZXJyb3JcIj4qPC9zcGFuPlxyXG4gICAgICB9XHJcbiAgICA8L2xhYmVsPlxyXG4gIH1cclxuICA8c21hbGxcclxuICAgICpuZ0lmPVwib2NFcnJvclwiXHJcbiAgICBjbGFzcz1cImVycm9yLW1zZ1wiXHJcbiAgICA+e3sgb2NFcnJvciB9fTwvc21hbGxcclxuICA+XHJcbiAgPG5nLWNvbnRlbnQgc2VsZWN0PVwib2NQcmVmaXhcIj48L25nLWNvbnRlbnQ+XHJcbiAgQGlmIChvY0hhc0RlbGV0ZUJ1dHRvbiAmJiAhb2NEaXNhYmxlZCkge1xyXG4gICAgPGJ1dHRvblxyXG4gICAgICBjbGFzcz1cIm9jLWhhcy1jbG9zZS1idXR0b24gb2Mgc3VmZml4XCJcclxuICAgICAgKGNsaWNrKT1cImNsZWFyVmFsdWUoKVwiXHJcbiAgICAgIFtkaXNhYmxlZF09XCJvY0Rpc2FibGVkXCJcclxuICAgID5cclxuICAgICAgPHNwYW4gY2xhc3M9XCJtYXRlcmlhbC1zeW1ib2xzLW91dGxpbmVkXCI+YmFja3NwYWNlPC9zcGFuPlxyXG4gICAgPC9idXR0b24+XHJcbiAgfVxyXG4gIDxuZy1jb250ZW50IHNlbGVjdD1cIm9jU3VmZml4XCI+PC9uZy1jb250ZW50PlxyXG5cclxuICA8ZGl2IGNsYXNzPVwib2Mtb3B0aW9ucy1kaXZcIj5cclxuICAgIEBpZiAoaXNPcHRpb25zU2hvd24gJiYgIW9jTG9hZGluZyAmJiAhb2NEaXNhYmxlZCkge1xyXG4gICAgICA8dWxcclxuICAgICAgICAjb3B0aW9uc1xyXG4gICAgICAgIGNsYXNzPVwib2Mtb3B0aW9uc1wiXHJcbiAgICAgICAgW25nU3R5bGVdPVwie1xyXG4gICAgICAgICAgJ21heC1oZWlnaHQnOiBvY09wdGlvbnNNYXhIZWlnaHQsXHJcbiAgICAgICAgICB3aWR0aDogb2NPcHRpb25zV2lkdGgsXHJcbiAgICAgICAgfVwiXHJcbiAgICAgID5cclxuICAgICAgICBAaWYgKCFmaWx0ZXJlZERhdGEubGVuZ3RoKSB7XHJcbiAgICAgICAgICA8bGkgY2xhc3M9XCJuby1vcHRpb25zXCI+XHJcbiAgICAgICAgICAgIHt7IG9jTm9BdmFpbGFibGVPcHRpb25zVGV4dCB8fCAnTmVuaHVtIHJlc3VsdGFkbyBkaXNwb27DrXZlbCcgfX1cclxuICAgICAgICAgIDwvbGk+XHJcbiAgICAgICAgfSBAZWxzZSB7XHJcbiAgICAgICAgICBAZm9yIChkYXRhIG9mIGZpbHRlcmVkRGF0YTsgdHJhY2sgZGF0YS52YWx1ZTsgbGV0IGkgPSAkaW5kZXgpIHtcclxuICAgICAgICAgICAgQGlmICghb2NNYXhSZXN1bHRzIHx8IGkgPCBvY01heFJlc3VsdHMpIHtcclxuICAgICAgICAgICAgICA8bGkgY2xhc3M9XCJsaS1vcHRpb25cIj5cclxuICAgICAgICAgICAgICAgIDxidXR0b25cclxuICAgICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXHJcbiAgICAgICAgICAgICAgICAgIChjbGljayk9XCJzZWxlY3RWYWx1ZShkYXRhLnZhbHVlKVwiXHJcbiAgICAgICAgICAgICAgICAgIFtjbGFzcy5ob3Zlcl09XCJvY1R5cGUgIT09ICdjb3VudGVyU2VsZWN0J1wiXHJcbiAgICAgICAgICAgICAgICAgIFtjbGFzcy5oaWdobGlnaHRdPVwic2VsZWN0ZWRJbmRleCA9PT0gaVwiXHJcbiAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgIEBpZiAoZGF0YS5pY29uKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgPHNwYW5cclxuICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwibWF0ZXJpYWwtc3ltYm9scy1vdXRsaW5lZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICBbbmdTdHlsZV09XCJ7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICdmb250LXNpemUnOiBkYXRhLmljb25TaXplIHx8ICcxLjJyZW0nLFxyXG4gICAgICAgICAgICAgICAgICAgICAgfVwiXHJcbiAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgICAge3sgZGF0YS5pY29uIH19XHJcbiAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgIHt7IGRhdGEubmFtZSB9fVxyXG4gICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICBAaWYgKG9jVHlwZSA9PT0gJ2NvdW50ZXJTZWxlY3QnKSB7XHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJvYy1jb3VudGVyLXNlbGVjdFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxidXR0b25cclxuICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwic3VidHJhY3RcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImRlY3JlbWVudENvdW50ZXIoZGF0YSlcIlxyXG4gICAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibWF0ZXJpYWwtc3ltYm9scy1vdXRsaW5lZFwiPnJlbW92ZTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz1cImNvdW50ZXJcIj57eyBkYXRhLmNvdW50ZXIgfHwgMCB9fTwvcD5cclxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uXHJcbiAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImFkZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiaW5jcmVtZW50Q291bnRlcihkYXRhKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtYXRlcmlhbC1zeW1ib2xzLW91dGxpbmVkXCI+YWRkPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICA8L2xpPlxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBAaWYgKG9jTWF4UmVzdWx0cyAmJiBmaWx0ZXJlZERhdGEubGVuZ3RoID4gb2NNYXhSZXN1bHRzKSB7XHJcbiAgICAgICAgICAgIDxsaSBjbGFzcz1cIm5vLW9wdGlvbnNcIj5cclxuICAgICAgICAgICAgICB7eyBvY1R5cGVGb3JNb3JlUmVzdWx0c1RleHQgfHwgJ0RpZ2l0ZSBwYXJhIHZlciBtYWlzIHJlc3VsdGFkb3MnIH19XHJcbiAgICAgICAgICAgIDwvbGk+XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICA8L3VsPlxyXG4gICAgfSBAZWxzZSBpZiAoaXNPcHRpb25zU2hvd24gJiYgb2NMb2FkaW5nICYmICFvY0Rpc2FibGVkKSB7XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJvYy1vcHRpb25zIGxvYWRlclwiPlxyXG4gICAgICAgIDxzcGFuIGNsYXNzPVwibWF0ZXJpYWwtc3ltYm9scy1vdXRsaW5lZCBsb2FkaW5nXCI+IHByb2dyZXNzX2FjdGl2aXR5IDwvc3Bhbj5cclxuICAgICAgPC9kaXY+XHJcbiAgICB9XHJcbiAgPC9kaXY+XHJcbjwvZGl2PlxyXG4iXX0=
373
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib2MtYXV0b2NvbXBsZXRlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL290aW11cy1saWJyYXJ5L3NyYy9saWIvY29tcG9uZW50cy9vYy1hdXRvY29tcGxldGUvb2MtYXV0b2NvbXBsZXRlLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL290aW11cy1saWJyYXJ5L3NyYy9saWIvY29tcG9uZW50cy9vYy1hdXRvY29tcGxldGUvb2MtYXV0b2NvbXBsZXRlLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQTtBQUM5QyxPQUFPLEVBR0wsdUJBQXVCLEVBRXZCLFNBQVMsRUFDVCxZQUFZLEVBRVosWUFBWSxFQUNaLFdBQVcsRUFDWCxLQUFLLEVBR0wsTUFBTSxFQUlOLFNBQVMsRUFDVCxZQUFZLEdBQ2IsTUFBTSxlQUFlLENBQUE7QUFFdEIsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFBO0FBQzVDLE9BQU8sRUFBRSwyQkFBMkIsRUFBRSxNQUFNLDZDQUE2QyxDQUFBOzs7Ozs7QUFrQnpGLE1BQU0sT0FBTyx1QkFBdUI7SUFHbEMsWUFDVSxRQUFtQixFQUNuQixFQUFjLEVBQ2QsZ0JBQTZDLEVBQzdDLGlCQUFvQyxFQUNwQyxHQUFzQjtRQUp0QixhQUFRLEdBQVIsUUFBUSxDQUFXO1FBQ25CLE9BQUUsR0FBRixFQUFFLENBQVk7UUFDZCxxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQTZCO1FBQzdDLHNCQUFpQixHQUFqQixpQkFBaUIsQ0FBbUI7UUFDcEMsUUFBRyxHQUFILEdBQUcsQ0FBbUI7UUFXeEIsWUFBTyxHQUF5QixFQUFFLENBQUE7UUF1QmpDLFdBQU0sR0FBaUMsUUFBUSxDQUFBO1FBQy9DLFlBQU8sR0FBUSxFQUFFLENBQUE7UUFDakIsb0JB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QixLQUFLO2dCQUNHLGNBQWM7c0JBQXRCLEtBQUs7Z0JBQ0csVUFBVTtzQkFBbEIsS0FBSztnQkFDRyxZQUFZO3NCQUFwQixLQUFLO2dCQUNHLHFCQUFxQjtzQkFBN0IsS0FBSztnQkFDRyx3QkFBd0I7c0JBQWhDLEtBQUs7Z0JBQ0csd0JBQXdCO3NCQUFoQyxLQUFLO2dCQUNHLFNBQVM7c0JBQWpCLEtBQUs7Z0JBQ0csY0FBYztzQkFBdEIsS0FBSztnQkFDRyxPQUFPO3NCQUFmLEtBQUs7Z0JBQ0csVUFBVTtzQkFBbEIsS0FBSztnQkFDRyxRQUFRO3NCQUFoQixLQUFLO2dCQUNHLGdCQUFnQjtzQkFBeEIsS0FBSztnQkFDRyxVQUFVO3NCQUFsQixLQUFLO2dCQUNHLE1BQU07c0JBQWQsS0FBSztnQkFFRyxpQkFBaUI7c0JBQXpCLEtBQUs7Z0JBQ0csZ0JBQWdCO3NCQUF4QixLQUFLO2dCQUVJLGFBQWE7c0JBQXRCLE1BQU07Z0JBQ0csUUFBUTtzQkFBakIsTUFBTTtnQkFDRyxxQkFBcUI7c0JBQTlCLE1BQU07Z0JBQ0csZ0JBQWdCO3NCQUF6QixNQUFNO2dCQUNHLE9BQU87c0JBQWhCLE1BQU07Z0JBZUgsYUFBYTtzQkFEaEIsV0FBVzt1QkFBQyxhQUFhO2dCQU10QixnQkFBZ0I7c0JBRG5CLFdBQVc7dUJBQUMsaUJBQWlCO2dCQU0xQixnQkFBZ0I7c0JBRG5CLFdBQVc7dUJBQUMsaUJBQWlCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJ1xyXG5pbXBvcnQge1xyXG4gIEFmdGVyQ29udGVudENoZWNrZWQsXHJcbiAgQWZ0ZXJWaWV3SW5pdCxcclxuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcclxuICBDaGFuZ2VEZXRlY3RvclJlZixcclxuICBDb21wb25lbnQsXHJcbiAgQ29udGVudENoaWxkLFxyXG4gIEVsZW1lbnRSZWYsXHJcbiAgRXZlbnRFbWl0dGVyLFxyXG4gIEhvc3RCaW5kaW5nLFxyXG4gIElucHV0LFxyXG4gIE9uQ2hhbmdlcyxcclxuICBPbkluaXQsXHJcbiAgT3V0cHV0LFxyXG4gIFF1ZXJ5TGlzdCxcclxuICBSZW5kZXJlcjIsXHJcbiAgU2ltcGxlQ2hhbmdlcyxcclxuICBWaWV3Q2hpbGQsXHJcbiAgVmlld0NoaWxkcmVuLFxyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnXHJcbmltcG9ydCB7IE9jQXV0b0NvbXBsZXRlVHlwZSB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMvb2MtYXV0b2NvbXBsZXRlJ1xyXG5pbXBvcnQgeyBGb3Jtc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJ1xyXG5pbXBvcnQgeyBJbnRlcm5hdGlvbmFsaXphdGlvblNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9pbnRlcm5hdGlvbmFsaXphdGlvbi5zZXJ2aWNlJ1xyXG5pbXBvcnQgeyBPY1N0eWxlVGhlbWVUeXBlIH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcy9vYy1zdHlsZS10aGVtZSdcclxuaW1wb3J0IHsgU3R5bGVUaGVtZVNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9zdHlsZS10aGVtZS5zZXJ2aWNlJ1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdvYy1hdXRvY29tcGxldGUnLFxyXG4gIHN0YW5kYWxvbmU6IHRydWUsXHJcbiAgaW1wb3J0czogW0NvbW1vbk1vZHVsZSwgRm9ybXNNb2R1bGVdLFxyXG4gIHByb3ZpZGVyczogW0ludGVybmF0aW9uYWxpemF0aW9uU2VydmljZV0sXHJcbiAgaG9zdDoge1xyXG4gICAgJ1tzdHlsZS53aWR0aF0nOiAnY29tcHV0ZWRXaWR0aCcsXHJcbiAgICAnW3N0eWxlLm1pbi13aWR0aF0nOiAnY29tcHV0ZWRNaW5XaWR0aCcsXHJcbiAgICAnW3N0eWxlLm1heC13aWR0aF0nOiAnY29tcHV0ZWRNYXhXaWR0aCcsXHJcbiAgfSxcclxuICB0ZW1wbGF0ZVVybDogJy4vb2MtYXV0b2NvbXBsZXRlLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybDogJy4vb2MtYXV0b2NvbXBsZXRlLmNvbXBvbmVudC5zY3NzJyxcclxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5LkRlZmF1bHQsXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBPY0F1dG9jb21wbGV0ZUNvbXBvbmVudFxyXG4gIGltcGxlbWVudHMgQWZ0ZXJWaWV3SW5pdCwgT25DaGFuZ2VzLCBBZnRlckNvbnRlbnRDaGVja2VkLCBPbkluaXRcclxue1xyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSByZW5kZXJlcjogUmVuZGVyZXIyLFxyXG4gICAgcHJpdmF0ZSBlbDogRWxlbWVudFJlZixcclxuICAgIHByaXZhdGUgdHJhbnNsYXRlU2VydmljZTogSW50ZXJuYXRpb25hbGl6YXRpb25TZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBzdHlsZVRoZW1lU2VydmljZTogU3R5bGVUaGVtZVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIGNkcjogQ2hhbmdlRGV0ZWN0b3JSZWZcclxuICApIHt9XHJcblxyXG4gIEBWaWV3Q2hpbGQoJ2lucHV0JykgaW5wdXQhOiBFbGVtZW50UmVmXHJcbiAgQFZpZXdDaGlsZCgnb3B0aW9ucycpIG9wdGlvbnMhOiBFbGVtZW50UmVmXHJcbiAgQFZpZXdDaGlsZCgnb3V0ZXJEaXYnKSBvdXRlckRpdiE6IEVsZW1lbnRSZWY8SFRNTERpdkVsZW1lbnQ+XHJcbiAgQFZpZXdDaGlsZHJlbignbGlzdE9wdGlvbnNSZWYnKSBsaXN0T3B0aW9uc0VsZW1lbnRzITogUXVlcnlMaXN0PEVsZW1lbnRSZWY8SFRNTExJRWxlbWVudD4+XHJcbiAgXHJcbiAgQENvbnRlbnRDaGlsZCgnb2NQcmVmaXgnKSBvY1ByZWZpeDogYW55XHJcbiAgQENvbnRlbnRDaGlsZCgnb2NTdWZmaXgnKSBvY1N1ZmZpeDogYW55XHJcblxyXG4gIHByaXZhdGUgX29jRGF0YTogT2NBdXRvQ29tcGxldGVUeXBlW10gPSBbXVxyXG4gIEBJbnB1dCgpXHJcbiAgc2V0IG9jRGF0YSh2YWx1ZTogT2NBdXRvQ29tcGxldGVUeXBlW10pIHtcclxuICAgIHRoaXMuX29jRGF0YSA9IHZhbHVlXHJcblxyXG4gICAgdGhpcy5maWx0ZXJlZERhdGEgPSB2YWx1ZVxyXG5cclxuICAgIGlmICh0aGlzLm9jU2VsZWN0QnlUeXBpbmcgJiYgdGhpcy5vY1ZhbHVlKSB7XHJcbiAgICAgIGNvbnN0IGZvdW5kID0gdmFsdWUuZmluZCgoZWwpID0+IGVsLnZhbHVlID09IHRoaXMub2NWYWx1ZSlcclxuICAgICAgaWYgKGZvdW5kKSB7XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZFZhbHVlID0gZm91bmRcclxuICAgICAgICB0aGlzLm9jVmFsdWUgPSBmb3VuZC5uYW1lXHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCkgLy8gRm9yw6dhIGEgYXR1YWxpemHDp8Ojb1xyXG4gIH1cclxuXHJcbiAgZ2V0IG9jRGF0YSgpOiBPY0F1dG9Db21wbGV0ZVR5cGVbXSB7XHJcbiAgICByZXR1cm4gdGhpcy5fb2NEYXRhXHJcbiAgfVxyXG4gIEBJbnB1dCgpIG9jUGxhY2Vob2xkZXI/OiBzdHJpbmdcclxuICBASW5wdXQoKSBvY0Vycm9yPzogc3RyaW5nXHJcbiAgQElucHV0KCkgb2NTaXplOiAnc21hbGwnIHwgJ2xhcmdlJyB8ICdtZWRpdW0nID0gJ21lZGl1bSdcclxuICBASW5wdXQoKSBvY1ZhbHVlOiBhbnkgPSAnJ1xyXG4gIEBJbnB1dCgpIG9jQ2xlYXJPbkNoYW5nZTogYm9vbGVhbiA9IGZhbHNlXHJcbiAgQElucHV0KCkgb2NXaWR0aD86IHN0cmluZ1xyXG4gIEBJbnB1dCgpIG9jTWluV2lkdGg/OiBzdHJpbmdcclxuICBASW5wdXQoKSBvY01heFdpZHRoPzogc3RyaW5nXHJcbiAgQElucHV0KCkgb2NPcHRpb25zTWF4SGVpZ2h0Pzogc3RyaW5nXHJcbiAgQElucHV0KCkgb2NPcHRpb25zV2lkdGg/OiBzdHJpbmdcclxuICBASW5wdXQoKSBvY1JlcXVpcmVkOiBib29sZWFuID0gZmFsc2VcclxuICBASW5wdXQoKSBvY01heFJlc3VsdHM/OiBudW1iZXJcclxuICBASW5wdXQoKSBvY0FsbG93Tm90TGlzdGVkVmFsdWU6IGJvb2xlYW4gPSBmYWxzZVxyXG4gIEBJbnB1dCgpIG9jTm9BdmFpbGFibGVPcHRpb25zVGV4dD86IHN0cmluZ1xyXG4gIEBJbnB1dCgpIG9jVHlwZUZvck1vcmVSZXN1bHRzVGV4dD86IHN0cmluZ1xyXG4gIEBJbnB1dCgpIG9jTG9hZGluZzogYm9vbGVhbiA9IGZhbHNlXHJcbiAgQElucHV0KCkgb2NTZW1hbnRpY0xpa2U6IGJvb2xlYW4gPSBmYWxzZSAvLyBkZXByZWNhdGVkLiBQcmVmZXIgdXNpbmcgb2NTdHlsZVRoZW1lIGluc3RlYWRcclxuICBASW5wdXQoKSBvY1N0eWxlOiBPY1N0eWxlVGhlbWVUeXBlID0gJ290aW11cydcclxuICBASW5wdXQoKSBvY1RhYkluZGV4PzogbnVtYmVyXHJcbiAgQElucHV0KCkgaWNvblNpemU6ICdzbWFsbCcgfCAnbWVkaXVtJyB8ICdsYXJnZScgPSAnbWVkaXVtJ1xyXG4gIEBJbnB1dCgpIG9jU2VsZWN0QnlUeXBpbmc6IGJvb2xlYW4gPSB0cnVlXHJcbiAgQElucHV0KCkgb2NEaXNhYmxlZCA9IGZhbHNlXHJcbiAgQElucHV0KCkgb2NUeXBlOiAnY291bnRlclNlbGVjdCcgfCAnZGVmYXVsdCcgPSAnZGVmYXVsdCdcclxuXHJcbiAgQElucHV0KCkgb2NIYXNEZWxldGVCdXR0b24/OiBib29sZWFuID0gZmFsc2VcclxuICBASW5wdXQoKSBvY0VuYWJsZUtleWJvYXJkOiBib29sZWFuID0gZmFsc2VcclxuXHJcbiAgQE91dHB1dCgpIG9jVmFsdWVDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPHN0cmluZz4oKVxyXG4gIEBPdXRwdXQoKSBvY0NoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8c3RyaW5nIHwgbnVsbD4oKVxyXG4gIEBPdXRwdXQoKSBvY0NvdW50ZXJTZWxlY3RDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPE9jQXV0b0NvbXBsZXRlVHlwZVtdPigpXHJcbiAgQE91dHB1dCgpIG9jT3B0aW9uTm90Rm91bmQgPSBuZXcgRXZlbnRFbWl0dGVyKClcclxuICBAT3V0cHV0KCkgb2NDbGljayA9IG5ldyBFdmVudEVtaXR0ZXIoKVxyXG5cclxuICBoYXNTdWZmaXg6IGJvb2xlYW4gPSBmYWxzZVxyXG4gIGhhc1ByZWZpeDogYm9vbGVhbiA9IGZhbHNlXHJcblxyXG4gIGlzT3B0aW9uc1Nob3duOiBib29sZWFuID0gZmFsc2VcclxuICBmaWx0ZXJlZERhdGE6IE9jQXV0b0NvbXBsZXRlVHlwZVtdID0gW11cclxuICBzZWxlY3RlZFZhbHVlOiBPY0F1dG9Db21wbGV0ZVR5cGUgPSB7XHJcbiAgICBuYW1lOiAnJyxcclxuICAgIHZhbHVlOiBudWxsLFxyXG4gIH1cclxuXHJcbiAgc2VsZWN0ZWRJbmRleDogbnVtYmVyID0gLTFcclxuXHJcbiAgQEhvc3RCaW5kaW5nKCdzdHlsZS53aWR0aCcpXHJcbiAgZ2V0IGNvbXB1dGVkV2lkdGgoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5vY1dpZHRoID8gdGhpcy5vY1dpZHRoIDogbnVsbFxyXG4gIH1cclxuXHJcbiAgQEhvc3RCaW5kaW5nKCdzdHlsZS5taW4td2lkdGgnKVxyXG4gIGdldCBjb21wdXRlZE1pbldpZHRoKCkge1xyXG4gICAgcmV0dXJuIHRoaXMub2NNaW5XaWR0aCB8fCAnMCdcclxuICB9XHJcblxyXG4gIEBIb3N0QmluZGluZygnc3R5bGUubWF4LXdpZHRoJylcclxuICBnZXQgY29tcHV0ZWRNYXhXaWR0aCgpIHtcclxuICAgIHJldHVybiB0aGlzLm9jTWF4V2lkdGggfHwgJzEwMCUnXHJcbiAgfVxyXG5cclxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5vY1ByZWZpeCkge1xyXG4gICAgICB0aGlzLmhhc1ByZWZpeCA9IHRydWVcclxuICAgIH1cclxuICAgIGlmICh0aGlzLm9jU3VmZml4KSB7XHJcbiAgICAgIHRoaXMuaGFzU3VmZml4ID0gdHJ1ZVxyXG4gICAgfVxyXG4gICAgdGhpcy5mb3JtYXRPY1ZhbHVlVHlwZSgpXHJcbiAgICB0aGlzLmxvYWRPcHRpb25zKClcclxuXHJcbiAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKClcclxuICB9XHJcblxyXG4gIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMub2NWYWx1ZSA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIHRoaXMub2NWYWx1ZSA9IG51bGxcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcclxuICAgIHRoaXMub2NTdHlsZSA9IHRoaXMuc3R5bGVUaGVtZVNlcnZpY2UuZ2V0U3R5bGVUaGVtZSgpIHx8IHRoaXMub2NTdHlsZVxyXG4gICAgaWYgKHRoaXMub2NQcmVmaXgpIHtcclxuICAgICAgdGhpcy5oYXNQcmVmaXggPSB0cnVlXHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5vY1N1ZmZpeCkge1xyXG4gICAgICB0aGlzLmhhc1N1ZmZpeCA9IHRydWVcclxuICAgIH1cclxuICAgIHRoaXMuZm9ybWF0T2NWYWx1ZVR5cGUoKVxyXG4gICAgdGhpcy5sb2FkT3B0aW9ucygpXHJcbiAgICB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuZ2V0VHJhbnNsYXRpb25zQnlMYW5ndWFnZSgpXHJcbiAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKClcclxuICB9XHJcblxyXG4gIG5nQWZ0ZXJDb250ZW50Q2hlY2tlZCgpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLm9jUHJlZml4KSB7XHJcbiAgICAgIHRoaXMuaGFzUHJlZml4ID0gdHJ1ZVxyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMub2NTdWZmaXgpIHtcclxuICAgICAgdGhpcy5oYXNTdWZmaXggPSB0cnVlXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBmb3JtYXRPY1ZhbHVlVHlwZSgpIHtcclxuICAgIGlmICh0aGlzLm9jVmFsdWUpIHtcclxuICAgICAgcmV0dXJuIGAke3RoaXMub2NWYWx1ZX1gXHJcbiAgICB9XHJcbiAgICByZXR1cm4gbnVsbFxyXG4gIH1cclxuXHJcbiAgZ2V0VHJhbnNsYXRpb24oY29kZTogbnVtYmVyIHwgc3RyaW5nKSB7XHJcbiAgICByZXR1cm4gdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmdldFRyYW5zbGF0aW9uKGNvZGUpXHJcbiAgfVxyXG5cclxuICBsb2FkT3B0aW9ucygpIHtcclxuICAgIHRoaXMuZm9ybWF0T2NWYWx1ZVR5cGUoKVxyXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgIHRoaXMuZmlsdGVyZWREYXRhID0gdGhpcy5vY0RhdGFcclxuXHJcbiAgICAgIGNvbnN0IGlucHV0Qm94ID0gdGhpcy5lbC5uYXRpdmVFbGVtZW50XHJcblxyXG4gICAgICBpZiAodGhpcy5vY1NlbGVjdEJ5VHlwaW5nICYmIHRoaXMub2NWYWx1ZSkge1xyXG4gICAgICAgIGNvbnN0IGZvdW5kID0gdGhpcy5vY0RhdGEuZmluZCgoZWwpID0+IGVsLnZhbHVlID09IHRoaXMub2NWYWx1ZSlcclxuXHJcbiAgICAgICAgaWYgKGZvdW5kKSB7XHJcbiAgICAgICAgICB0aGlzLnNlbGVjdGVkVmFsdWUgPSBmb3VuZFxyXG4gICAgICAgICAgdGhpcy5vY1ZhbHVlID0gZm91bmQubmFtZVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKGlucHV0Qm94KSB7XHJcbiAgICAgICAgY29uc3QgaW5wdXRFbGVtZW50ID0gaW5wdXRCb3gucXVlcnlTZWxlY3RvcignaW5wdXQnKVxyXG5cclxuICAgICAgICBpZiAoaW5wdXRFbGVtZW50ICYmICF0aGlzLm9jU2VtYW50aWNMaWtlICYmIFsnb3RpbXVzJywgJ3NodWknXS5pbmNsdWRlcyh0aGlzLm9jU3R5bGUpKSB7XHJcbiAgICAgICAgICB0aGlzLnJlbmRlcmVyLnNldEF0dHJpYnV0ZShpbnB1dEVsZW1lbnQsICdwbGFjZWhvbGRlcicsICcnKVxyXG4gICAgICAgICAgdGhpcy5yZW5kZXJlci5zZXRBdHRyaWJ1dGUoaW5wdXRFbGVtZW50LCAncmVxdWlyZWQnLCB0aGlzLm9jUmVxdWlyZWQudG9TdHJpbmcoKSlcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH0sIDUwKVxyXG4gIH1cclxuXHJcbiAgY2xvc2VPbkNsaWNrT3V0KCk6IHZvaWQge1xyXG4gICAgdGhpcy5yZW5kZXJlci5saXN0ZW4oJ3dpbmRvdycsICdjbGljaycsIChlOiBFdmVudCkgPT4ge1xyXG4gICAgICBjb25zdCB0YXJnZXQgPSBlLnRhcmdldCBhcyBIVE1MRWxlbWVudFxyXG5cclxuICAgICAgY29uc3QgaW5zaWRlQ291bnRlclNlbGVjdCA9XHJcbiAgICAgICAgdGhpcy5vY1R5cGUgPT09ICdjb3VudGVyU2VsZWN0JyAmJiB0YXJnZXQuY2xvc2VzdCgnLm9jLWNvdW50ZXItc2VsZWN0JylcclxuXHJcbiAgICAgIGlmICh0aGlzLmlucHV0ICYmIHRoaXMub3B0aW9ucyAmJiAhaW5zaWRlQ291bnRlclNlbGVjdCkge1xyXG4gICAgICAgIGlmICh0YXJnZXQgIT09IHRoaXMuaW5wdXQubmF0aXZlRWxlbWVudCAmJiB0YXJnZXQgIT09IHRoaXMub3B0aW9ucy5uYXRpdmVFbGVtZW50KSB7XHJcbiAgICAgICAgICB0aGlzLmlzT3B0aW9uc1Nob3duID0gZmFsc2VcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHRoaXMuZmluZEJ5VHlwaW5nKClcclxuICAgIH0pXHJcbiAgfVxyXG5cclxuICBmaW5kQnlUeXBpbmcoKTogdm9pZCB7XHJcbiAgICBpZiAoIXRoaXMub2NWYWx1ZSB8fCAhdGhpcy5vY1ZhbHVlPy50b1N0cmluZygpLnRyaW0oKS5sZW5ndGgpIHtcclxuICAgICAgdGhpcy5vY0NoYW5nZS5lbWl0KG51bGwpXHJcbiAgICAgIHRoaXMub2NPcHRpb25Ob3RGb3VuZC5lbWl0KClcclxuICAgIH1cclxuICAgIGlmICghdGhpcy5vY1NlbGVjdEJ5VHlwaW5nKSB7XHJcbiAgICAgIHJldHVyblxyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IGZvdW5kVmFsdWUgPSB0aGlzLm9jRGF0YS5maW5kKFxyXG4gICAgICAoZGF0YSkgPT5cclxuICAgICAgICBkYXRhLm5hbWUudG9TdHJpbmcoKS50b0xvd2VyQ2FzZSgpID09PSB0aGlzLm9jVmFsdWU/LnRvU3RyaW5nKCkudG9Mb3dlckNhc2UoKSB8fFxyXG4gICAgICAgIGRhdGEudmFsdWUudG9TdHJpbmcoKS50b0xvd2VyQ2FzZSgpID09PSB0aGlzLm9jVmFsdWU/LnRvU3RyaW5nKCkudG9Mb3dlckNhc2UoKVxyXG4gICAgKVxyXG5cclxuICAgIGlmICghZm91bmRWYWx1ZSkge1xyXG4gICAgICB0aGlzLnNlbGVjdGVkVmFsdWUgPSB7XHJcbiAgICAgICAgbmFtZTogJycsXHJcbiAgICAgICAgdmFsdWU6IG51bGwsXHJcbiAgICAgIH1cclxuICAgICAgaWYgKCF0aGlzLm9jQWxsb3dOb3RMaXN0ZWRWYWx1ZSkge1xyXG4gICAgICAgIHRoaXMub2NWYWx1ZSA9ICcnXHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5maWx0ZXJlZERhdGEgPSB0aGlzLm9jRGF0YVxyXG4gICAgICByZXR1cm5cclxuICAgIH1cclxuICAgIHRoaXMuc2VsZWN0ZWRWYWx1ZSA9IGZvdW5kVmFsdWVcclxuICB9XHJcblxyXG4gIGZpbHRlckRhdGEobmFtZTogc3RyaW5nKTogdm9pZCB7XHJcbiAgICB0aGlzLmlzT3B0aW9uc1Nob3duID0gdHJ1ZVxyXG4gICAgdGhpcy5maWx0ZXJlZERhdGEgPSB0aGlzLm9jRGF0YS5maWx0ZXIoKGRhdGEpID0+IHtcclxuICAgICAgcmV0dXJuIHRoaXMuZ2V0Rm9ybWF0dGVkTmFtZShkYXRhLm5hbWUpPy5pbmNsdWRlcyh0aGlzLmdldEZvcm1hdHRlZE5hbWUobmFtZSkpXHJcbiAgICB9KVxyXG4gIH1cclxuXHJcbiAgZ2V0Rm9ybWF0dGVkTmFtZShzdHI6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gc3RyXHJcbiAgICAgID8udG9Mb3dlckNhc2UoKVxyXG4gICAgICAubm9ybWFsaXplKCdORkQnKVxyXG4gICAgICAucmVwbGFjZSgvW1xcdTAzMDAtXFx1MDM2Zl0vZywgJycpIC8vIFJlbW92ZSBtYXJjYXMgZGlhY3LDrXRpY2FzXHJcbiAgfVxyXG5cclxuICB0b2dnbGVPcHRpb25zKCkge1xyXG4gICAgdGhpcy5jbG9zZU9uQ2xpY2tPdXQoKVxyXG4gICAgdGhpcy5pc09wdGlvbnNTaG93biA9ICF0aGlzLmlzT3B0aW9uc1Nob3duXHJcbiAgfVxyXG5cclxuICBzZWxlY3RWYWx1ZSh2YWx1ZTogYW55KSB7XHJcbiAgICBjb25zdCBmb3VuZFZhbHVlID0gdGhpcy5vY0RhdGEuZmluZCgoZGF0YSkgPT4gZGF0YS52YWx1ZSA9PSB2YWx1ZSlcclxuXHJcbiAgICBpZiAoIWZvdW5kVmFsdWUpIHtcclxuICAgICAgdGhpcy5zZWxlY3RlZFZhbHVlID0ge1xyXG4gICAgICAgIG5hbWU6ICcnLFxyXG4gICAgICAgIHZhbHVlOiBudWxsLFxyXG4gICAgICB9XHJcblxyXG4gICAgICB0aGlzLnNlbGVjdGVkSW5kZXggPSAtMVxyXG4gICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKClcclxuICAgICAgcmV0dXJuXHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMub2NUeXBlID09PSAnY291bnRlclNlbGVjdCcpIHtcclxuICAgICAgZm91bmRWYWx1ZS5jb3VudGVyID0gKGZvdW5kVmFsdWUuY291bnRlciB8fCAwKSArIDFcclxuICAgICAgdGhpcy5lbWl0Q291bnRlclNlbGVjdENoYW5nZSgpXHJcbiAgICAgIHJldHVyblxyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuc2VsZWN0ZWRWYWx1ZSA9IGZvdW5kVmFsdWVcclxuICAgIGlmICh0aGlzLm9jQ2xlYXJPbkNoYW5nZSkge1xyXG4gICAgICB0aGlzLm9jVmFsdWUgPSAnJ1xyXG4gICAgICB0aGlzLmZpbHRlcmVkRGF0YSA9IHRoaXMub2NEYXRhXHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLm9jVmFsdWUgPSBmb3VuZFZhbHVlLm5hbWVcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmlzT3B0aW9uc1Nob3duID0gZmFsc2VcclxuICAgIHRoaXMuc2VsZWN0ZWRJbmRleCA9IHRoaXMuZmlsdGVyZWREYXRhLmluZGV4T2YoZm91bmRWYWx1ZSlcclxuXHJcbiAgICB0aGlzLm9jQ2hhbmdlLmVtaXQodGhpcy5zZWxlY3RlZFZhbHVlLnZhbHVlKVxyXG5cclxuICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKVxyXG4gIH1cclxuXHJcbiAgY2xlYXJWYWx1ZSgpIHtcclxuICAgIHRoaXMuc2VsZWN0ZWRWYWx1ZSA9IHtcclxuICAgICAgbmFtZTogJycsXHJcbiAgICAgIHZhbHVlOiBudWxsLFxyXG4gICAgfVxyXG4gICAgdGhpcy5vY1ZhbHVlID0gJydcclxuICAgIHRoaXMuZmlsdGVyZWREYXRhID0gdGhpcy5vY0RhdGFcclxuICB9XHJcblxyXG4gIHByb3RlY3RlZCBpbmNyZW1lbnRDb3VudGVyKG9wdGlvbjogT2NBdXRvQ29tcGxldGVUeXBlKTogdm9pZCB7XHJcbiAgICBpZiAoIW9wdGlvbi5jb3VudGVyKSB7XHJcbiAgICAgIG9wdGlvbi5jb3VudGVyID0gMVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgb3B0aW9uLmNvdW50ZXIrK1xyXG4gICAgfVxyXG4gICAgdGhpcy5lbWl0Q291bnRlclNlbGVjdENoYW5nZSgpXHJcbiAgfVxyXG5cclxuICBwcm90ZWN0ZWQgZGVjcmVtZW50Q291bnRlcihvcHRpb246IE9jQXV0b0NvbXBsZXRlVHlwZSk6IHZvaWQge1xyXG4gICAgaWYgKG9wdGlvbi5jb3VudGVyICYmIG9wdGlvbi5jb3VudGVyID4gMCkge1xyXG4gICAgICBvcHRpb24uY291bnRlci0tXHJcbiAgICAgIHRoaXMuZW1pdENvdW50ZXJTZWxlY3RDaGFuZ2UoKVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZW1pdENvdW50ZXJTZWxlY3RDaGFuZ2UoKTogdm9pZCB7XHJcbiAgICBjb25zdCBoYXNNb3JlVGhhblplcm8gPSB0aGlzLm9jRGF0YS5maWx0ZXIoKGRhdGEpID0+ICEhZGF0YS5jb3VudGVyKVxyXG4gICAgdGhpcy5vY0NvdW50ZXJTZWxlY3RDaGFuZ2UuZW1pdChoYXNNb3JlVGhhblplcm8pXHJcbiAgfVxyXG5cclxuICBtb3ZlU2VsZWN0aW9uKGRlbHRhOiBudW1iZXIpOiB2b2lkIHtcclxuICAgIHRoaXMuc2VsZWN0ZWRJbmRleCA9IE1hdGgubWF4KFxyXG4gICAgICAwLFxyXG4gICAgICBNYXRoLm1pbih0aGlzLmxpc3RPcHRpb25zRWxlbWVudHMubGVuZ3RoIC0gMSwgdGhpcy5zZWxlY3RlZEluZGV4ICsgZGVsdGEpXHJcbiAgICApXHJcblxyXG4gICAgY29uc3QgZWxlbWVudCA9IHRoaXMubGlzdE9wdGlvbnNFbGVtZW50cy5nZXQodGhpcy5zZWxlY3RlZEluZGV4KT8ubmF0aXZlRWxlbWVudFxyXG4gICAgaWYgKGVsZW1lbnQpIHtcclxuICAgICAgZWxlbWVudC5zY3JvbGxJbnRvVmlldyh7IGJlaGF2aW9yOiAnc21vb3RoJywgYmxvY2s6ICduZWFyZXN0JyB9KVxyXG4gICAgfVxyXG4gIH1cclxuICBcclxuICBwcm90ZWN0ZWQgb25LZXlEb3duKGV2ZW50OiBFdmVudCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMub2NFbmFibGVLZXlib2FyZCkge1xyXG4gICAgICBjb25zdCBlID0gZXZlbnQgYXMgS2V5Ym9hcmRFdmVudFxyXG5cclxuICAgICAgaWYgKHRoaXMuaXNPcHRpb25zU2hvd24pIHtcclxuICAgICAgICBpZiAoZS5rZXkgPT09ICdBcnJvd1VwJykge1xyXG4gICAgICAgICAgdGhpcy5tb3ZlU2VsZWN0aW9uKC0xKVxyXG4gICAgICAgIH0gZWxzZSBpZiAoZS5rZXkgPT09ICdBcnJvd0Rvd24nKSB7XHJcbiAgICAgICAgICB0aGlzLm1vdmVTZWxlY3Rpb24oMSlcclxuICAgICAgICB9IGVsc2UgaWYgKGUua2V5ID09PSAnRW50ZXInKSB7XHJcbiAgICAgICAgICB0aGlzLnNlbGVjdFZhbHVlKHRoaXMuZmlsdGVyZWREYXRhW3RoaXMuc2VsZWN0ZWRJbmRleF0udmFsdWUpXHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHJldHVyblxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICBcclxuICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpXHJcbiAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKClcclxuICAgIH1cclxuICB9XHJcbn1cclxuIiwiPGRpdlxyXG4gIFtuZ0NsYXNzXT1cIntcclxuICAgICdvYy1pbnB1dC1ib3gnOiAhb2NTZW1hbnRpY0xpa2UgJiYgb2NTdHlsZSA9PT0gJ290aW11cycsXHJcbiAgICBzbWFsbDogb2NTaXplID09PSAnc21hbGwnLFxyXG4gICAgbGFyZ2U6IG9jU2l6ZSA9PT0gJ2xhcmdlJyxcclxuICAgIGVycm9yOiAhIW9jRXJyb3IsXHJcbiAgICBwcmVmaXg6IGhhc1ByZWZpeCxcclxuICAgIHN1ZmZpeDogaGFzU3VmZml4IHx8IG9jSGFzRGVsZXRlQnV0dG9uLFxyXG4gICAgc2h1aTogb2NTdHlsZSA9PT0gJ3NodWknLFxyXG4gICAgJ3NodWktaW5wdXQtYm94Jzogb2NTdHlsZSA9PT0gJ3NodWknLFxyXG4gIH1cIlxyXG4+XHJcbiAgPG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PlxyXG4gIDxpbnB1dFxyXG4gICAgW3BsYWNlaG9sZGVyXT1cIm9jUGxhY2Vob2xkZXJcIlxyXG4gICAgI2lucHV0XHJcbiAgICAoY2xpY2spPVwidG9nZ2xlT3B0aW9ucygpOyBvY0NsaWNrLmVtaXQoKVwiXHJcbiAgICB0eXBlPVwidGV4dFwiXHJcbiAgICAoaW5wdXQpPVwiZmlsdGVyRGF0YShvY1ZhbHVlKVwiXHJcbiAgICBbKG5nTW9kZWwpXT1cIm9jVmFsdWVcIlxyXG4gICAgKG5nTW9kZWxDaGFuZ2UpPVwib2NWYWx1ZSA9ICRldmVudDsgb2NWYWx1ZUNoYW5nZS5lbWl0KCRldmVudClcIlxyXG4gICAgW25nQ2xhc3NdPVwie1xyXG4gICAgICAnc2VtYW50aWMtaW5wdXQnOiBvY1NlbWFudGljTGlrZSB8fCBvY1N0eWxlID09PSAnc2VtYW50aWMnLFxyXG4gICAgfVwiXHJcbiAgICBbdGFiaW5kZXhdPVwib2NUYWJJbmRleFwiXHJcbiAgICBbZGlzYWJsZWRdPVwib2NEaXNhYmxlZFwiXHJcbiAgICAoa2V5ZG93bik9XCJvbktleURvd24oJGV2ZW50KVwiXHJcbiAgLz5cclxuICBAaWYgKCFvY1NlbWFudGljTGlrZSAmJiBvY1N0eWxlICE9PSAnc2VtYW50aWMnKSB7XHJcbiAgICA8bGFiZWw+XHJcbiAgICAgIDxzcGFuIFtpbm5lckhUTUxdPVwib2NQbGFjZWhvbGRlclwiPjwvc3Bhbj5cclxuICAgICAgQGlmIChvY1JlcXVpcmVkKSB7XHJcbiAgICAgICAgPHNwYW4gY2xhc3M9XCJvYyBjb2xvciBlcnJvclwiPio8L3NwYW4+XHJcbiAgICAgIH1cclxuICAgIDwvbGFiZWw+XHJcbiAgfVxyXG4gIDxzbWFsbFxyXG4gICAgKm5nSWY9XCJvY0Vycm9yXCJcclxuICAgIGNsYXNzPVwiZXJyb3ItbXNnXCJcclxuICAgID57eyBvY0Vycm9yIH19PC9zbWFsbFxyXG4gID5cclxuICA8bmctY29udGVudCBzZWxlY3Q9XCJvY1ByZWZpeFwiPjwvbmctY29udGVudD5cclxuICBAaWYgKG9jSGFzRGVsZXRlQnV0dG9uICYmICFvY0Rpc2FibGVkKSB7XHJcbiAgICA8YnV0dG9uXHJcbiAgICAgIGNsYXNzPVwib2MtaGFzLWNsb3NlLWJ1dHRvbiBvYyBzdWZmaXhcIlxyXG4gICAgICAoY2xpY2spPVwiY2xlYXJWYWx1ZSgpXCJcclxuICAgICAgW2Rpc2FibGVkXT1cIm9jRGlzYWJsZWRcIlxyXG4gICAgPlxyXG4gICAgICA8c3BhbiBjbGFzcz1cIm1hdGVyaWFsLXN5bWJvbHMtb3V0bGluZWRcIj5iYWNrc3BhY2U8L3NwYW4+XHJcbiAgICA8L2J1dHRvbj5cclxuICB9XHJcbiAgPG5nLWNvbnRlbnQgc2VsZWN0PVwib2NTdWZmaXhcIj48L25nLWNvbnRlbnQ+XHJcblxyXG4gIDxkaXYgY2xhc3M9XCJvYy1vcHRpb25zLWRpdlwiPlxyXG4gICAgQGlmIChpc09wdGlvbnNTaG93biAmJiAhb2NMb2FkaW5nICYmICFvY0Rpc2FibGVkKSB7XHJcbiAgICAgIDx1bFxyXG4gICAgICAgICNvcHRpb25zXHJcbiAgICAgICAgY2xhc3M9XCJvYy1vcHRpb25zXCJcclxuICAgICAgICBbbmdTdHlsZV09XCJ7XHJcbiAgICAgICAgICAnbWF4LWhlaWdodCc6IG9jT3B0aW9uc01heEhlaWdodCxcclxuICAgICAgICAgIHdpZHRoOiBvY09wdGlvbnNXaWR0aCxcclxuICAgICAgICB9XCJcclxuICAgICAgPlxyXG4gICAgICAgIEBpZiAoIWZpbHRlcmVkRGF0YS5sZW5ndGgpIHtcclxuICAgICAgICAgIDxsaSBjbGFzcz1cIm5vLW9wdGlvbnNcIj5cclxuICAgICAgICAgICAge3sgb2NOb0F2YWlsYWJsZU9wdGlvbnNUZXh0IHx8ICdOZW5odW0gcmVzdWx0YWRvIGRpc3BvbsOtdmVsJyB9fVxyXG4gICAgICAgICAgPC9saT5cclxuICAgICAgICB9IEBlbHNlIHtcclxuICAgICAgICAgIEBmb3IgKGRhdGEgb2YgZmlsdGVyZWREYXRhOyB0cmFjayBkYXRhLnZhbHVlOyBsZXQgaSA9ICRpbmRleCkge1xyXG4gICAgICAgICAgICBAaWYgKCFvY01heFJlc3VsdHMgfHwgaSA8IG9jTWF4UmVzdWx0cykge1xyXG4gICAgICAgICAgICAgIDxsaSBjbGFzcz1cImxpLW9wdGlvblwiICNsaXN0T3B0aW9uc1JlZj5cclxuICAgICAgICAgICAgICAgIDxidXR0b25cclxuICAgICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXHJcbiAgICAgICAgICAgICAgICAgIChjbGljayk9XCJzZWxlY3RWYWx1ZShkYXRhLnZhbHVlKVwiXHJcbiAgICAgICAgICAgICAgICAgIFtjbGFzcy5ob3Zlcl09XCJvY1R5cGUgIT09ICdjb3VudGVyU2VsZWN0J1wiXHJcbiAgICAgICAgICAgICAgICAgIFtjbGFzcy5oaWdobGlnaHRdPVwic2VsZWN0ZWRJbmRleCA9PT0gaVwiXHJcbiAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgIEBpZiAoZGF0YS5pY29uKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgPHNwYW5cclxuICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwibWF0ZXJpYWwtc3ltYm9scy1vdXRsaW5lZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICBbbmdTdHlsZV09XCJ7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICdmb250LXNpemUnOiBkYXRhLmljb25TaXplIHx8ICcxLjJyZW0nLFxyXG4gICAgICAgICAgICAgICAgICAgICAgfVwiXHJcbiAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgICAge3sgZGF0YS5pY29uIH19XHJcbiAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgIHt7IGRhdGEubmFtZSB9fVxyXG4gICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICBAaWYgKG9jVHlwZSA9PT0gJ2NvdW50ZXJTZWxlY3QnKSB7XHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJvYy1jb3VudGVyLXNlbGVjdFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxidXR0b25cclxuICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwic3VidHJhY3RcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImRlY3JlbWVudENvdW50ZXIoZGF0YSlcIlxyXG4gICAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibWF0ZXJpYWwtc3ltYm9scy1vdXRsaW5lZFwiPnJlbW92ZTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz1cImNvdW50ZXJcIj57eyBkYXRhLmNvdW50ZXIgfHwgMCB9fTwvcD5cclxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uXHJcbiAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImFkZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiaW5jcmVtZW50Q291bnRlcihkYXRhKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtYXRlcmlhbC1zeW1ib2xzLW91dGxpbmVkXCI+YWRkPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICA8L2xpPlxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBAaWYgKG9jTWF4UmVzdWx0cyAmJiBmaWx0ZXJlZERhdGEubGVuZ3RoID4gb2NNYXhSZXN1bHRzKSB7XHJcbiAgICAgICAgICAgIDxsaSBjbGFzcz1cIm5vLW9wdGlvbnNcIj5cclxuICAgICAgICAgICAgICB7eyBvY1R5cGVGb3JNb3JlUmVzdWx0c1RleHQgfHwgJ0RpZ2l0ZSBwYXJhIHZlciBtYWlzIHJlc3VsdGFkb3MnIH19XHJcbiAgICAgICAgICAgIDwvbGk+XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICA8L3VsPlxyXG4gICAgfSBAZWxzZSBpZiAoaXNPcHRpb25zU2hvd24gJiYgb2NMb2FkaW5nICYmICFvY0Rpc2FibGVkKSB7XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJvYy1vcHRpb25zIGxvYWRlclwiPlxyXG4gICAgICAgIDxzcGFuIGNsYXNzPVwibWF0ZXJpYWwtc3ltYm9scy1vdXRsaW5lZCBsb2FkaW5nXCI+IHByb2dyZXNzX2FjdGl2aXR5IDwvc3Bhbj5cclxuICAgICAgPC9kaXY+XHJcbiAgICB9XHJcbiAgPC9kaXY+XHJcbjwvZGl2PlxyXG4iXX0=