@guajiritos/image-picker 0.0.10 → 0.0.12

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,6 +1,7 @@
1
1
  import { ChangeDetectionStrategy, Component, ElementRef, EventEmitter, Input, Output, signal, ViewChild, } from '@angular/core';
2
2
  import { ResizeObserver } from 'resize-observer';
3
3
  import { Subject } from 'rxjs';
4
+ import { BrowserAnimationsModule } from '@angular/platform-browser/animations';
4
5
  import { MatIconModule } from '@angular/material/icon';
5
6
  import { FormsModule, ReactiveFormsModule, UntypedFormControl } from '@angular/forms';
6
7
  import { MatTooltipModule } from '@angular/material/tooltip';
@@ -10,21 +11,21 @@ import { MatButtonModule } from '@angular/material/button';
10
11
  import { MatFormFieldModule } from '@angular/material/form-field';
11
12
  import { MatInputModule } from '@angular/material/input';
12
13
  import { MatSelectModule } from '@angular/material/select';
13
- import { NgForOf, NgIf, NgStyle } from '@angular/common';
14
14
  import { PipesModule } from '../utils/pipes/pipes.module';
15
15
  import * as i0 from "@angular/core";
16
- import * as i1 from "@angular/material/tooltip";
17
- import * as i2 from "@angular/material/icon";
18
- import * as i3 from "@angular/material/button";
19
- import * as i4 from "@angular/material/checkbox";
20
- import * as i5 from "@angular/material/slider";
21
- import * as i6 from "@angular/material/form-field";
22
- import * as i7 from "@angular/material/input";
23
- import * as i8 from "@angular/forms";
24
- import * as i9 from "@angular/material/select";
25
- import * as i10 from "@angular/material/core";
26
- import * as i11 from "../utils/pipes/i18n/i18n.pipe";
27
- import * as i12 from "../utils/pipes/calculate-size/calculate-size.pipe";
16
+ import * as i1 from "@angular/common";
17
+ import * as i2 from "@angular/material/tooltip";
18
+ import * as i3 from "@angular/material/icon";
19
+ import * as i4 from "@angular/material/button";
20
+ import * as i5 from "@angular/material/checkbox";
21
+ import * as i6 from "@angular/material/slider";
22
+ import * as i7 from "@angular/material/form-field";
23
+ import * as i8 from "@angular/material/input";
24
+ import * as i9 from "@angular/forms";
25
+ import * as i10 from "@angular/material/select";
26
+ import * as i11 from "@angular/material/core";
27
+ import * as i12 from "../utils/pipes/i18n/i18n.pipe";
28
+ import * as i13 from "../utils/pipes/calculate-size/calculate-size.pipe";
28
29
  export class GuajiritosImagePicker {
29
30
  constructor() {
30
31
  }
@@ -476,14 +477,13 @@ export class GuajiritosImagePicker {
476
477
  this.unsubscribeAll$.next();
477
478
  this.unsubscribeAll$.complete();
478
479
  }
479
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.4", ngImport: i0, type: GuajiritosImagePicker, deps: [], target: i0.ɵɵFactoryTarget.Component });
480
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.4", type: GuajiritosImagePicker, isStandalone: true, selector: "guajiritos-image-picker", inputs: { appearance: "appearance", color: "color", imagesAllowed: "imagesAllowed", _imageSrc: "_imageSrc", _config: "_config" }, outputs: { $imageChanged: "$imageChanged", $imageOriginal: "$imageOriginal" }, viewQueries: [{ propertyName: "imagePicker", first: true, predicate: ["imagePicker"], descendants: true }], ngImport: i0, template: "<div *ngIf='!loadImage()' class='place-image'>\n <div class='image-holder'\n [ngStyle]='{ width: config()?.width,height: config()?.height,borderRadius: config()?.borderRadius}'>\n <button [matTooltip]=\"'UPLOAD_A_IMAGE' | i18n: config()?.language\" class='image-upload-btn' mat-icon-button\n (click)='onUpload($event)'>\n <mat-icon class='mat-18'>add_a_photo</mat-icon>\n </button>\n <input #imagePicker type='file' class='d-none' [id]=\"'filePicker-' + uuidFilePicker\"\n (change)='handleFileSelect($event)' [accept]='imagesAllowed'>\n </div>\n</div>\n\n<div *ngIf='loadImage()' class='place-image'>\n <div class='image-holder-loaded'\n [ngStyle]='{width: config()?.width,height: config()?.height,borderRadius: config()?.borderRadius}'>\n <img [src]='imageSrc()' alt='image-loaded' [ngStyle]='{ borderRadius: config()?.borderRadius }'>\n <input #imagePicker type='file' class='d-none' [id]=\"'filePicker-' + uuidFilePicker\"\n (change)='handleFileSelect($event)' [accept]='imagesAllowed'>\n </div>\n <p *ngIf='imageSrc()?.length' class='mat-caption image-caption' [class.warn]='(imageSrc()?.length | calculateSize) > 200'\n [class.fw-600]='(imageSrc()?.length | calculateSize) > 200'>\n {{\"SIZE\" | i18n: currentLanguage()}}: {{ (imageSrc()?.length | calculateSize) }}Kb &nbsp; {{ format.value }}\n </p>\n\n <div class='editing-bar-btn'>\n <button id='upload-img' *ngIf='!config()?.hideAddBtn' mat-icon-button (click)='onUpload($event)'\n [matTooltip]=\"'UPLOAD_A_IMAGE' | i18n: config()?.language\">\n <mat-icon class='mat-18'>add_a_photo</mat-icon>\n </button>\n <button id='edit-img' *ngIf='!config()?.hideEditBtn && !noEdit()' mat-icon-button (click)='showEditPanel.set(true)'\n [matTooltip]=\"'OPEN_EDITOR_PANEL' | i18n: config()?.language\">\n <mat-icon class='mat-18'>edit</mat-icon>\n </button>\n <a id='download-img' *ngIf='!config()?.hideDownloadBtn' [matTooltip]=\"'DOWNLOAD' | i18n: config()?.language\"\n [href]='imageSrc()' mat-icon-button [download]='imageName'>\n <mat-icon class='mat-18'>cloud_download</mat-icon>\n </a>\n <button id='delete-img' *ngIf='!config()?.hideDeleteBtn' mat-icon-button (click)='onRemove()'\n [matTooltip]=\"'REMOVE' | i18n: config()?.language\">\n <mat-icon class='mat-18'>delete</mat-icon>\n </button>\n </div>\n</div>\n\n<div *ngIf='showEditPanel()' id='popup' class='popup'>\n <div class='popup-clear'>\n <button mat-icon-button (click)='onCloseEditPanel()'>\n <mat-icon class='mat-18'>clear</mat-icon>\n </button>\n </div>\n\n <div class='image-container'>\n <div class='image-holder-full'>\n <img id='image-full' [src]='imageSrc()' alt=''>\n <div id='image-cropper' class='image-cropper'>\n <div id='image-cropper-header'>\n <mat-icon>drag_indicator</mat-icon>\n </div>\n </div>\n </div>\n\n <div class='control-panel'>\n <p class='item-panel fw-600'>{{ 'QUALITY' | i18n: config()?.language }}</p>\n <div class='quality-container'>\n <mat-slider ngDefaultControl [color]='color' class='w-100 mw-100' (change)='onChangeQuality()'\n [max]='100' [min]='0' [step]='1' [discrete]='true' [showTickMarks]='true'>\n <input matSliderThumb [formControl]='quality'>\n </mat-slider>\n </div>\n\n <div class='item-panel'>\n <span class='fw-600'>{{ 'MAX_DIMENSIONS' | i18n: config()?.language }}</span>\n <mat-checkbox class='float-right' [formControl]='maintainAspectRatio' [color]='color'>\n <span>{{ 'ASPECT_RATIO' | i18n: config()?.language }}</span>\n </mat-checkbox>\n </div>\n\n <div class='max-dimension-container'>\n <mat-form-field class='w-48' [appearance]='appearance' [color]='color'>\n <mat-label>{{ 'MAX_WIDTH_PX' | i18n: config()?.language }}</mat-label>\n <input (change)='onChangeSize(true, false)' matInput [placeholder]=\"'MAX_WIDTH_PX' | i18n: config()?.language\"\n [(ngModel)]='maxWidth' type='number' [min]='0' [max]='2000'>\n </mat-form-field>\n\n <mat-form-field class='w-48' [appearance]='appearance' [color]='color'>\n <mat-label>{{ 'MAX_HEIGHT_PX' | i18n: config()?.language }}</mat-label>\n <input (change)='onChangeSize(false, true)' matInput [placeholder]=\"'MAX_HEIGHT_PX' | i18n: config()?.language\"\n [(ngModel)]='maxHeight' type='number' [min]='0' [max]='2000'>\n </mat-form-field>\n </div>\n\n <p class='item-panel fw-600'>{{ 'FORMAT' | i18n: config()?.language }}</p>\n <div class='formats-selection'>\n <mat-form-field class='w-100 mw-100' [appearance]='appearance' [color]='color'>\n <mat-select [formControl]='format' (selectionChange)='onChangeFormat()'>\n <mat-option *ngFor='let format of allFormats' [value]='format'>\n {{ format }}\n </mat-option>\n </mat-select>\n </mat-form-field>\n </div>\n\n <div class='refresh-container'>\n <mat-checkbox (change)='onCropStateChange()' [formControl]='showCrop' [color]='color'>\n <p class='item-panel fw-600'>{{ 'CROP' | i18n: config()?.language }}</p>\n </mat-checkbox>\n <div class='d-flex '>\n <button class='float-right' mat-icon-button [color]='color' (click)='onRestore()'>\n <mat-icon>refresh</mat-icon>\n </button>\n <p *ngIf='showCrop.value'>\n <button mat-icon-button [color]='color' (click)='onCrop()'>\n <mat-icon>crop</mat-icon>\n </button>\n </p>\n </div>\n </div>\n\n <ng-container *ngIf='showCrop.value'>\n <div class='dimension-container'>\n <mat-form-field class='w-48 mw-48' [appearance]='appearance' [color]='color'>\n <mat-label>{{ 'WIDTH_PX' | i18n: config()?.language }}</mat-label>\n <input (change)='onChangeCrop()' matInput [placeholder]=\"'WIDTH_PX' | i18n: config()?.language\"\n [formControl]='cropWidth' type='number' [min]='0' [max]='2000'>\n </mat-form-field>\n <mat-form-field class='w-48 mw-48' [appearance]='appearance' [color]='color'>\n <mat-label>{{ 'HEIGHT_PX' | i18n: config()?.language }}</mat-label>\n <input (change)='onChangeCrop()' matInput [placeholder]=\"'HEIGHT_PX' | i18n: config()?.language\"\n [formControl]='cropHeight' type='number' [min]='0' [max]='2000'>\n </mat-form-field>\n </div>\n </ng-container>\n\n <div class='save-container'>\n <button mat-flat-button (click)='onCloseEditPanel()' [color]='color' class='save-button'>\n {{ 'SAVE' | i18n: config()?.language}}\n </button>\n\n <p *ngIf='imageSrc()?.length' class='mat-caption image-caption'\n [class.warn]='(imageSrc()?.length | calculateSize) > 200'\n [class.fw-600]='(imageSrc()?.length | calculateSize) > 200'>\n {{\"SIZE\" | i18n: currentLanguage()}}: {{ (imageSrc()?.length | calculateSize) }}Kb &nbsp; {{ format.value }}\n </p>\n </div>\n </div>\n </div>\n</div>\n", styles: [".d-none{display:none}.d-flex{display:flex}.fw-600{font-weight:600}.w-100{width:100%}.mw-100{max-width:100%}.w-48{width:48%}.mw-48{max-width:48%}.float-right{float:right}p{margin:0!important;padding:0!important}.place-image{flex-direction:column;box-sizing:border-box;display:flex;place-content:flex-start;align-items:center}.place-image .image-holder{flex-direction:column;box-sizing:border-box;display:flex;place-content:center;align-items:center;position:relative;width:320px;height:240px;border-radius:16px;max-width:100%!important;background-color:#fff}@media (max-width: 599px){.place-image .image-holder{max-width:100%!important;max-height:250px!important}}.place-image .image-holder .image-upload-btn{transition:all .5s ease;position:relative;opacity:.85;width:50px;height:50px;box-sizing:content-box}.place-image .image-holder .image-upload-btn mat-icon{font-size:50px;width:50px;height:50px;line-height:50px}@media (max-width: 599px){.place-image .image-holder .image-upload-btn{opacity:1;width:30px;height:30px}.place-image .image-holder .image-upload-btn mat-icon{font-size:30px;width:30px;height:30px;line-height:30px}}.place-image .image-holder:hover .image-upload-btn{opacity:1;transition:all .5s ease}.place-image .image-holder-loaded{flex-direction:column;box-sizing:border-box;display:flex;place-content:center;align-items:center;position:relative;max-width:100%!important;width:320px;height:240px;border-radius:4px;padding:2px}.place-image .image-holder-loaded .image-caption{position:absolute;right:0;bottom:-22px}.place-image .image-holder-loaded img{height:100%;max-height:100%;width:100%;max-width:100%;object-fit:contain;object-position:center}@media (max-width: 599px){.place-image .image-holder-loaded{max-height:195px!important}}.place-image .image-holder-loaded .image-upload-btn{transition:all .5s ease;position:relative;opacity:.85;width:50px;height:50px;box-sizing:content-box}.place-image .image-holder-loaded .image-upload-btn mat-icon{font-size:50px;width:50px;height:50px;line-height:50px}@media (max-width: 599px){.place-image .image-holder-loaded .image-upload-btn{opacity:1;width:30px;height:30px}.place-image .image-holder-loaded .image-upload-btn mat-icon{font-size:30px;width:30px;height:30px;line-height:30px}}.place-image .image-holder-loaded:hover .image-upload-btn{opacity:1;transition:all .5s ease}.place-image .editing-bar-btn{margin-top:2px;display:flex;flex-direction:row;box-sizing:border-box;place-content:flex-start;align-items:flex-start}.place-image .editing-bar-btn .mat-icon-button{height:20px;line-height:20px;width:24px}.place-image .editing-bar-btn mat-icon{line-height:20px!important;font-size:20px!important;width:20px!important;height:20px!important}.place-image .editing-bar-btn button{margin:4px;transition:all .5s ease}.place-image .editing-bar-btn button:hover{transform:scale(1.25);margin:4px 8px;transition:all .25s ease-in}.place-image .editing-bar-btn a{margin:4px;transition:all .5s ease}.place-image .editing-bar-btn a:hover{transform:scale(1.25);margin:4px 8px;transition:all .25s ease-in}.popup{width:100vw;max-height:100%;height:100%;overflow:auto;position:fixed;top:0;left:0;z-index:1000;padding:24px;color:#fff;box-sizing:border-box;animation-name:show;animation-duration:.4s}.popup .popup-clear{flex-direction:row;box-sizing:border-box;display:flex;place-content:center flex-end;align-items:center}.popup .image-container{margin-top:50px;margin-bottom:50px;height:calc(100vh - 188px);min-height:calc(100vh - 188px);min-width:100%;width:100%;flex-flow:row wrap;box-sizing:border-box;display:flex;place-content:flex-start center;align-items:flex-start}.popup .image-container .image-holder-full{height:auto;width:auto;position:relative;display:contents}.popup img{max-height:600px;max-width:100%;object-fit:contain;object-position:center;margin:8px;transition:all .5s ease}@media (max-width: 1024px){.popup{background-color:#000000d9;padding:8px}.popup img{max-height:100%;max-width:100%}}@media (max-width: 599px){.popup img{margin:0}}.popup .control-panel{color:#000;background-color:#fff;margin:8px;padding:16px;max-width:100%;width:18rem;border-radius:8px;flex-direction:column;box-sizing:border-box;display:flex;place-content:stretch flex-start;align-items:stretch}@media (max-width: 599px){.popup .control-panel{margin:8px 0;width:100%}}.popup .control-panel .title-panel{padding:0 4px;font-size:16px;margin-bottom:16px!important}.popup .control-panel .item-panel{padding:0 4px!important;font-size:12px;display:flex;justify-content:space-between;align-items:center;gap:4px}.popup .control-panel .formats-selection{margin-top:8px!important;flex-direction:row;box-sizing:border-box;display:flex;place-content:flex-start;align-items:flex-start}.popup .control-panel .max-dimension-container{margin-top:16px!important;flex-flow:row;box-sizing:border-box;display:flex;place-content:flex-start space-between;align-items:flex-start}.popup .control-panel .dimension-container{margin-top:8px!important;flex-flow:row wrap;box-sizing:border-box;display:flex;place-content:flex-start space-between;align-items:flex-start}.popup .control-panel .save-container{flex-direction:row;box-sizing:border-box;display:flex;place-content:center space-between;align-items:center}.popup .control-panel .save-container .save-button{padding:0 8px;height:34px;box-sizing:border-box;font-weight:600}.popup .control-panel .quality-container{flex-direction:row;box-sizing:border-box;display:flex;place-content:flex-start;align-items:flex-start}.popup .control-panel .refresh-container{display:flex;justify-content:space-between;align-items:center}.popup .control-panel .refresh-container div{display:flex;align-items:center}@keyframes show{0%{top:-100vh;opacity:0}to{top:0;opacity:1}}.mat-form-field-appearance-fill .mat-form-field-flex{background-color:#fff!important}.mat-select-panel{background:white!important}input.mat-input-element{color:#000000d9}.mat-checkbox-background{background-color:#fff}.image-cropper{position:absolute;width:150px;height:150px;border:2.5px solid white;box-sizing:border-box;resize:both;overflow:auto;opacity:0}.image-cropper #image-cropper-header{padding:10px;cursor:move;z-index:10;background-color:transparent;height:85%}.image-cropper #image-cropper-header mat-icon{color:#fff}.btn{padding:4px 8px;border-radius:4px;cursor:pointer}.btn mat-icon{color:#000000d1}\n"], dependencies: [{ kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "ngmodule", type: MatTooltipModule }, { kind: "directive", type: i1.MatTooltip, selector: "[matTooltip]", exportAs: ["matTooltip"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i3.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "component", type: i3.MatIconAnchor, selector: "a[mat-icon-button]", inputs: ["disabled", "disableRipple", "color", "tabIndex"], exportAs: ["matButton", "matAnchor"] }, { kind: "component", type: i3.MatIconButton, selector: "button[mat-icon-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "ngmodule", type: MatCheckboxModule }, { kind: "component", type: i4.MatCheckbox, selector: "mat-checkbox", inputs: ["disableRipple", "color", "tabIndex"], exportAs: ["matCheckbox"] }, { kind: "ngmodule", type: MatSliderModule }, { kind: "component", type: i5.MatSlider, selector: "mat-slider", inputs: ["color", "disableRipple", "disabled", "discrete", "showTickMarks", "min", "max", "step", "displayWith"], exportAs: ["matSlider"] }, { kind: "directive", type: i5.MatSliderThumb, selector: "input[matSliderThumb]", inputs: ["value"], outputs: ["valueChange", "dragStart", "dragEnd"], exportAs: ["matSliderThumb"] }, { kind: "ngmodule", type: MatFormFieldModule }, { kind: "component", type: i6.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i6.MatLabel, selector: "mat-label" }, { kind: "ngmodule", type: MatInputModule }, { kind: "directive", type: i7.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i8.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: i8.NumberValueAccessor, selector: "input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]" }, { kind: "directive", type: i8.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i8.MinValidator, selector: "input[type=number][min][formControlName],input[type=number][min][formControl],input[type=number][min][ngModel]", inputs: ["min"] }, { kind: "directive", type: i8.MaxValidator, selector: "input[type=number][max][formControlName],input[type=number][max][formControl],input[type=number][max][ngModel]", inputs: ["max"] }, { kind: "directive", type: i8.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: MatSelectModule }, { kind: "component", type: i9.MatSelect, selector: "mat-select", inputs: ["disabled", "disableRipple", "tabIndex", "panelWidth", "hideSingleSelectionIndicator"], exportAs: ["matSelect"] }, { kind: "component", type: i10.MatOption, selector: "mat-option", exportAs: ["matOption"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i8.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "ngmodule", type: PipesModule }, { kind: "pipe", type: i11.I18nPipe, name: "i18n" }, { kind: "pipe", type: i12.CalculateSizePipe, name: "calculateSize" }, { kind: "directive", type: NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
480
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.4", ngImport: i0, type: GuajiritosImagePicker, deps: [], target: i0.ɵɵFactoryTarget.Component });
481
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.4", type: GuajiritosImagePicker, isStandalone: true, selector: "guajiritos-image-picker", inputs: { appearance: "appearance", color: "color", imagesAllowed: "imagesAllowed", _imageSrc: "_imageSrc", _config: "_config" }, outputs: { $imageChanged: "$imageChanged", $imageOriginal: "$imageOriginal" }, viewQueries: [{ propertyName: "imagePicker", first: true, predicate: ["imagePicker"], descendants: true }], ngImport: i0, template: "<div *ngIf='!loadImage()' class='place-image'>\r\n <div class='image-holder'\r\n [ngStyle]='{ width: config()?.width,height: config()?.height,borderRadius: config()?.borderRadius}'>\r\n <button [matTooltip]=\"'UPLOAD_A_IMAGE' | i18n: config()?.language\" class='image-upload-btn' mat-icon-button\r\n (click)='onUpload($event)'>\r\n <mat-icon class='mat-18'>add_a_photo</mat-icon>\r\n </button>\r\n <input #imagePicker type='file' class='d-none' [id]=\"'filePicker-' + uuidFilePicker\"\r\n (change)='handleFileSelect($event)' [accept]='imagesAllowed'>\r\n </div>\r\n</div>\r\n\r\n<div *ngIf='loadImage()' class='place-image'>\r\n <div class='image-holder-loaded'\r\n [ngStyle]='{width: config()?.width,height: config()?.height,borderRadius: config()?.borderRadius}'>\r\n <img [src]='imageSrc()' alt='image-loaded' [ngStyle]='{ borderRadius: config()?.borderRadius }'>\r\n <input #imagePicker type='file' class='d-none' [id]=\"'filePicker-' + uuidFilePicker\"\r\n (change)='handleFileSelect($event)' [accept]='imagesAllowed'>\r\n </div>\r\n <p *ngIf='imageSrc()?.length' class='mat-caption image-caption' [class.warn]='(imageSrc()?.length | calculateSize) > 200'\r\n [class.fw-600]='(imageSrc()?.length | calculateSize) > 200'>\r\n {{\"SIZE\" | i18n: currentLanguage()}}: {{ (imageSrc()?.length | calculateSize) }}Kb &nbsp; {{ format.value }}\r\n </p>\r\n\r\n <div class='editing-bar-btn'>\r\n <button id='upload-img' *ngIf='!config()?.hideAddBtn' mat-icon-button (click)='onUpload($event)'\r\n [matTooltip]=\"'UPLOAD_A_IMAGE' | i18n: config()?.language\">\r\n <mat-icon class='mat-18'>add_a_photo</mat-icon>\r\n </button>\r\n <button id='edit-img' *ngIf='!config()?.hideEditBtn && !noEdit()' mat-icon-button (click)='showEditPanel.set(true)'\r\n [matTooltip]=\"'OPEN_EDITOR_PANEL' | i18n: config()?.language\">\r\n <mat-icon class='mat-18'>edit</mat-icon>\r\n </button>\r\n <a id='download-img' *ngIf='!config()?.hideDownloadBtn' [matTooltip]=\"'DOWNLOAD' | i18n: config()?.language\"\r\n [href]='imageSrc()' mat-icon-button [download]='imageName'>\r\n <mat-icon class='mat-18'>cloud_download</mat-icon>\r\n </a>\r\n <button id='delete-img' *ngIf='!config()?.hideDeleteBtn' mat-icon-button (click)='onRemove()'\r\n [matTooltip]=\"'REMOVE' | i18n: config()?.language\">\r\n <mat-icon class='mat-18'>delete</mat-icon>\r\n </button>\r\n </div>\r\n</div>\r\n\r\n<div *ngIf='showEditPanel()' id='popup' class='popup'>\r\n <div class='popup-clear'>\r\n <button mat-icon-button (click)='onCloseEditPanel()'>\r\n <mat-icon class='mat-18'>clear</mat-icon>\r\n </button>\r\n </div>\r\n\r\n <div class='image-container'>\r\n <div class='image-holder-full'>\r\n <img id='image-full' [src]='imageSrc()' alt=''>\r\n <div id='image-cropper' class='image-cropper'>\r\n <div id='image-cropper-header'>\r\n <mat-icon>drag_indicator</mat-icon>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class='control-panel'>\r\n <p class='item-panel fw-600'>{{ 'QUALITY' | i18n: config()?.language }}</p>\r\n <div class='quality-container'>\r\n <mat-slider ngDefaultControl [color]='color' class='w-100 mw-100' (change)='onChangeQuality()'\r\n [max]='100' [min]='0' [step]='1' [discrete]='true' [showTickMarks]='true'>\r\n <input matSliderThumb [formControl]='quality'>\r\n </mat-slider>\r\n </div>\r\n\r\n <div class='item-panel'>\r\n <span class='fw-600'>{{ 'MAX_DIMENSIONS' | i18n: config()?.language }}</span>\r\n <mat-checkbox class='float-right' [formControl]='maintainAspectRatio' [color]='color'>\r\n <span>{{ 'ASPECT_RATIO' | i18n: config()?.language }}</span>\r\n </mat-checkbox>\r\n </div>\r\n\r\n <div class='max-dimension-container'>\r\n <mat-form-field class='w-48' [appearance]='appearance' [color]='color'>\r\n <mat-label>{{ 'MAX_WIDTH_PX' | i18n: config()?.language }}</mat-label>\r\n <input (change)='onChangeSize(true, false)' matInput [placeholder]=\"'MAX_WIDTH_PX' | i18n: config()?.language\"\r\n [(ngModel)]='maxWidth' type='number' [min]='0' [max]='2000'>\r\n </mat-form-field>\r\n\r\n <mat-form-field class='w-48' [appearance]='appearance' [color]='color'>\r\n <mat-label>{{ 'MAX_HEIGHT_PX' | i18n: config()?.language }}</mat-label>\r\n <input (change)='onChangeSize(false, true)' matInput [placeholder]=\"'MAX_HEIGHT_PX' | i18n: config()?.language\"\r\n [(ngModel)]='maxHeight' type='number' [min]='0' [max]='2000'>\r\n </mat-form-field>\r\n </div>\r\n\r\n <p class='item-panel fw-600'>{{ 'FORMAT' | i18n: config()?.language }}</p>\r\n <div class='formats-selection'>\r\n <mat-form-field class='w-100 mw-100' [appearance]='appearance' [color]='color'>\r\n <mat-select [formControl]='format' (selectionChange)='onChangeFormat()'>\r\n <mat-option *ngFor='let format of allFormats' [value]='format'>\r\n {{ format }}\r\n </mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n </div>\r\n\r\n <div class='refresh-container'>\r\n <mat-checkbox (change)='onCropStateChange()' [formControl]='showCrop' [color]='color'>\r\n <p class='item-panel fw-600'>{{ 'CROP' | i18n: config()?.language }}</p>\r\n </mat-checkbox>\r\n <div class='d-flex '>\r\n <button class='float-right' mat-icon-button [color]='color' (click)='onRestore()'>\r\n <mat-icon>refresh</mat-icon>\r\n </button>\r\n <p *ngIf='showCrop.value'>\r\n <button mat-icon-button [color]='color' (click)='onCrop()'>\r\n <mat-icon>crop</mat-icon>\r\n </button>\r\n </p>\r\n </div>\r\n </div>\r\n\r\n <ng-container *ngIf='showCrop.value'>\r\n <div class='dimension-container'>\r\n <mat-form-field class='w-48 mw-48' [appearance]='appearance' [color]='color'>\r\n <mat-label>{{ 'WIDTH_PX' | i18n: config()?.language }}</mat-label>\r\n <input (change)='onChangeCrop()' matInput [placeholder]=\"'WIDTH_PX' | i18n: config()?.language\"\r\n [formControl]='cropWidth' type='number' [min]='0' [max]='2000'>\r\n </mat-form-field>\r\n <mat-form-field class='w-48 mw-48' [appearance]='appearance' [color]='color'>\r\n <mat-label>{{ 'HEIGHT_PX' | i18n: config()?.language }}</mat-label>\r\n <input (change)='onChangeCrop()' matInput [placeholder]=\"'HEIGHT_PX' | i18n: config()?.language\"\r\n [formControl]='cropHeight' type='number' [min]='0' [max]='2000'>\r\n </mat-form-field>\r\n </div>\r\n </ng-container>\r\n\r\n <div class='save-container'>\r\n <button mat-flat-button (click)='onCloseEditPanel()' [color]='color' class='save-button'>\r\n {{ 'SAVE' | i18n: config()?.language}}\r\n </button>\r\n\r\n <p *ngIf='imageSrc()?.length' class='mat-caption image-caption'\r\n [class.warn]='(imageSrc()?.length | calculateSize) > 200'\r\n [class.fw-600]='(imageSrc()?.length | calculateSize) > 200'>\r\n {{\"SIZE\" | i18n: currentLanguage()}}: {{ (imageSrc()?.length | calculateSize) }}Kb &nbsp; {{ format.value }}\r\n </p>\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n", styles: [".d-none{display:none}.d-flex{display:flex}.fw-600{font-weight:600}.w-100{width:100%}.mw-100{max-width:100%}.w-48{width:48%}.mw-48{max-width:48%}.float-right{float:right}p{margin:0!important;padding:0!important}.place-image{flex-direction:column;box-sizing:border-box;display:flex;place-content:flex-start;align-items:center}.place-image .image-holder{flex-direction:column;box-sizing:border-box;display:flex;place-content:center;align-items:center;position:relative;width:320px;height:240px;border-radius:16px;max-width:100%!important;background-color:#fff}@media (max-width: 599px){.place-image .image-holder{max-width:100%!important;max-height:250px!important}}.place-image .image-holder .image-upload-btn{transition:all .5s ease;position:relative;opacity:.85;width:50px;height:50px;box-sizing:content-box}.place-image .image-holder .image-upload-btn mat-icon{font-size:50px;width:50px;height:50px;line-height:50px}@media (max-width: 599px){.place-image .image-holder .image-upload-btn{opacity:1;width:30px;height:30px}.place-image .image-holder .image-upload-btn mat-icon{font-size:30px;width:30px;height:30px;line-height:30px}}.place-image .image-holder:hover .image-upload-btn{opacity:1;transition:all .5s ease}.place-image .image-holder-loaded{flex-direction:column;box-sizing:border-box;display:flex;place-content:center;align-items:center;position:relative;max-width:100%!important;width:320px;height:240px;border-radius:4px;padding:2px}.place-image .image-holder-loaded .image-caption{position:absolute;right:0;bottom:-22px}.place-image .image-holder-loaded img{height:100%;max-height:100%;width:100%;max-width:100%;object-fit:contain;object-position:center}@media (max-width: 599px){.place-image .image-holder-loaded{max-height:195px!important}}.place-image .image-holder-loaded .image-upload-btn{transition:all .5s ease;position:relative;opacity:.85;width:50px;height:50px;box-sizing:content-box}.place-image .image-holder-loaded .image-upload-btn mat-icon{font-size:50px;width:50px;height:50px;line-height:50px}@media (max-width: 599px){.place-image .image-holder-loaded .image-upload-btn{opacity:1;width:30px;height:30px}.place-image .image-holder-loaded .image-upload-btn mat-icon{font-size:30px;width:30px;height:30px;line-height:30px}}.place-image .image-holder-loaded:hover .image-upload-btn{opacity:1;transition:all .5s ease}.place-image .editing-bar-btn{margin-top:2px;display:flex;flex-direction:row;box-sizing:border-box;place-content:flex-start;align-items:flex-start}.place-image .editing-bar-btn .mat-icon-button{height:20px;line-height:20px;width:24px}.place-image .editing-bar-btn mat-icon{line-height:20px!important;font-size:20px!important;width:20px!important;height:20px!important}.place-image .editing-bar-btn button{margin:4px;transition:all .5s ease}.place-image .editing-bar-btn button:hover{transform:scale(1.25);margin:4px 8px;transition:all .25s ease-in}.place-image .editing-bar-btn a{margin:4px;transition:all .5s ease}.place-image .editing-bar-btn a:hover{transform:scale(1.25);margin:4px 8px;transition:all .25s ease-in}.popup{width:100vw;max-height:100%;height:100%;overflow:auto;position:fixed;top:0;left:0;z-index:1000;padding:24px;color:#fff;box-sizing:border-box;animation-name:show;animation-duration:.4s}.popup .popup-clear{flex-direction:row;box-sizing:border-box;display:flex;place-content:center flex-end;align-items:center}.popup .image-container{margin-top:50px;margin-bottom:50px;height:calc(100vh - 188px);min-height:calc(100vh - 188px);min-width:100%;width:100%;flex-flow:row wrap;box-sizing:border-box;display:flex;place-content:flex-start center;align-items:flex-start}.popup .image-container .image-holder-full{height:auto;width:auto;position:relative;display:contents}.popup img{max-height:600px;max-width:100%;object-fit:contain;object-position:center;margin:8px;transition:all .5s ease}@media (max-width: 1024px){.popup{background-color:#000000d9;padding:8px}.popup img{max-height:100%;max-width:100%}}@media (max-width: 599px){.popup img{margin:0}}.popup .control-panel{color:#000;background-color:#fff;margin:8px;padding:16px;max-width:100%;width:18rem;border-radius:8px;flex-direction:column;box-sizing:border-box;display:flex;place-content:stretch flex-start;align-items:stretch}@media (max-width: 599px){.popup .control-panel{margin:8px 0;width:100%}}.popup .control-panel .title-panel{padding:0 4px;font-size:16px;margin-bottom:16px!important}.popup .control-panel .item-panel{padding:0 4px!important;font-size:12px;display:flex;justify-content:space-between;align-items:center;gap:4px}.popup .control-panel .formats-selection{margin-top:8px!important;flex-direction:row;box-sizing:border-box;display:flex;place-content:flex-start;align-items:flex-start}.popup .control-panel .max-dimension-container{margin-top:16px!important;flex-flow:row;box-sizing:border-box;display:flex;place-content:flex-start space-between;align-items:flex-start}.popup .control-panel .dimension-container{margin-top:8px!important;flex-flow:row wrap;box-sizing:border-box;display:flex;place-content:flex-start space-between;align-items:flex-start}.popup .control-panel .save-container{flex-direction:row;box-sizing:border-box;display:flex;place-content:center space-between;align-items:center}.popup .control-panel .save-container .save-button{padding:0 8px;height:34px;box-sizing:border-box;font-weight:600}.popup .control-panel .quality-container{flex-direction:row;box-sizing:border-box;display:flex;place-content:flex-start;align-items:flex-start}.popup .control-panel .refresh-container{display:flex;justify-content:space-between;align-items:center}.popup .control-panel .refresh-container div{display:flex;align-items:center}@keyframes show{0%{top:-100vh;opacity:0}to{top:0;opacity:1}}.mat-form-field-appearance-fill .mat-form-field-flex{background-color:#fff!important}.mat-select-panel{background:white!important}input.mat-input-element{color:#000000d9}.mat-checkbox-background{background-color:#fff}.image-cropper{position:absolute;width:150px;height:150px;border:2.5px solid white;box-sizing:border-box;resize:both;overflow:auto;opacity:0}.image-cropper #image-cropper-header{padding:10px;cursor:move;z-index:10;background-color:transparent;height:85%}.image-cropper #image-cropper-header mat-icon{color:#fff}.btn{padding:4px 8px;border-radius:4px;cursor:pointer}.btn mat-icon{color:#000000d1}\n"], dependencies: [{ kind: "ngmodule", type: BrowserAnimationsModule }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "ngmodule", type: MatTooltipModule }, { kind: "directive", type: i2.MatTooltip, selector: "[matTooltip]", exportAs: ["matTooltip"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i3.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i4.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "component", type: i4.MatIconAnchor, selector: "a[mat-icon-button]", inputs: ["disabled", "disableRipple", "color", "tabIndex"], exportAs: ["matButton", "matAnchor"] }, { kind: "component", type: i4.MatIconButton, selector: "button[mat-icon-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "ngmodule", type: MatCheckboxModule }, { kind: "component", type: i5.MatCheckbox, selector: "mat-checkbox", inputs: ["disableRipple", "color", "tabIndex"], exportAs: ["matCheckbox"] }, { kind: "ngmodule", type: MatSliderModule }, { kind: "component", type: i6.MatSlider, selector: "mat-slider", inputs: ["color", "disableRipple", "disabled", "discrete", "showTickMarks", "min", "max", "step", "displayWith"], exportAs: ["matSlider"] }, { kind: "directive", type: i6.MatSliderThumb, selector: "input[matSliderThumb]", inputs: ["value"], outputs: ["valueChange", "dragStart", "dragEnd"], exportAs: ["matSliderThumb"] }, { kind: "ngmodule", type: MatFormFieldModule }, { kind: "component", type: i7.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i7.MatLabel, selector: "mat-label" }, { kind: "ngmodule", type: MatInputModule }, { kind: "directive", type: i8.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i9.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i9.NumberValueAccessor, selector: "input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]" }, { kind: "directive", type: i9.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i9.MinValidator, selector: "input[type=number][min][formControlName],input[type=number][min][formControl],input[type=number][min][ngModel]", inputs: ["min"] }, { kind: "directive", type: i9.MaxValidator, selector: "input[type=number][max][formControlName],input[type=number][max][formControl],input[type=number][max][ngModel]", inputs: ["max"] }, { kind: "directive", type: i9.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: MatSelectModule }, { kind: "component", type: i10.MatSelect, selector: "mat-select", inputs: ["disabled", "disableRipple", "tabIndex", "panelWidth", "hideSingleSelectionIndicator"], exportAs: ["matSelect"] }, { kind: "component", type: i11.MatOption, selector: "mat-option", exportAs: ["matOption"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i9.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "ngmodule", type: PipesModule }, { kind: "pipe", type: i12.I18nPipe, name: "i18n" }, { kind: "pipe", type: i13.CalculateSizePipe, name: "calculateSize" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
481
482
  }
482
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.4", ngImport: i0, type: GuajiritosImagePicker, decorators: [{
483
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.4", ngImport: i0, type: GuajiritosImagePicker, decorators: [{
483
484
  type: Component,
484
485
  args: [{ selector: 'guajiritos-image-picker', changeDetection: ChangeDetectionStrategy.OnPush, standalone: true, imports: [
485
- NgIf,
486
- NgStyle,
486
+ BrowserAnimationsModule,
487
487
  MatTooltipModule,
488
488
  MatIconModule,
489
489
  MatButtonModule,
@@ -494,10 +494,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.4", ngImpor
494
494
  FormsModule,
495
495
  MatSelectModule,
496
496
  ReactiveFormsModule,
497
- FormsModule,
498
- PipesModule,
499
- NgForOf,
500
- ], template: "<div *ngIf='!loadImage()' class='place-image'>\n <div class='image-holder'\n [ngStyle]='{ width: config()?.width,height: config()?.height,borderRadius: config()?.borderRadius}'>\n <button [matTooltip]=\"'UPLOAD_A_IMAGE' | i18n: config()?.language\" class='image-upload-btn' mat-icon-button\n (click)='onUpload($event)'>\n <mat-icon class='mat-18'>add_a_photo</mat-icon>\n </button>\n <input #imagePicker type='file' class='d-none' [id]=\"'filePicker-' + uuidFilePicker\"\n (change)='handleFileSelect($event)' [accept]='imagesAllowed'>\n </div>\n</div>\n\n<div *ngIf='loadImage()' class='place-image'>\n <div class='image-holder-loaded'\n [ngStyle]='{width: config()?.width,height: config()?.height,borderRadius: config()?.borderRadius}'>\n <img [src]='imageSrc()' alt='image-loaded' [ngStyle]='{ borderRadius: config()?.borderRadius }'>\n <input #imagePicker type='file' class='d-none' [id]=\"'filePicker-' + uuidFilePicker\"\n (change)='handleFileSelect($event)' [accept]='imagesAllowed'>\n </div>\n <p *ngIf='imageSrc()?.length' class='mat-caption image-caption' [class.warn]='(imageSrc()?.length | calculateSize) > 200'\n [class.fw-600]='(imageSrc()?.length | calculateSize) > 200'>\n {{\"SIZE\" | i18n: currentLanguage()}}: {{ (imageSrc()?.length | calculateSize) }}Kb &nbsp; {{ format.value }}\n </p>\n\n <div class='editing-bar-btn'>\n <button id='upload-img' *ngIf='!config()?.hideAddBtn' mat-icon-button (click)='onUpload($event)'\n [matTooltip]=\"'UPLOAD_A_IMAGE' | i18n: config()?.language\">\n <mat-icon class='mat-18'>add_a_photo</mat-icon>\n </button>\n <button id='edit-img' *ngIf='!config()?.hideEditBtn && !noEdit()' mat-icon-button (click)='showEditPanel.set(true)'\n [matTooltip]=\"'OPEN_EDITOR_PANEL' | i18n: config()?.language\">\n <mat-icon class='mat-18'>edit</mat-icon>\n </button>\n <a id='download-img' *ngIf='!config()?.hideDownloadBtn' [matTooltip]=\"'DOWNLOAD' | i18n: config()?.language\"\n [href]='imageSrc()' mat-icon-button [download]='imageName'>\n <mat-icon class='mat-18'>cloud_download</mat-icon>\n </a>\n <button id='delete-img' *ngIf='!config()?.hideDeleteBtn' mat-icon-button (click)='onRemove()'\n [matTooltip]=\"'REMOVE' | i18n: config()?.language\">\n <mat-icon class='mat-18'>delete</mat-icon>\n </button>\n </div>\n</div>\n\n<div *ngIf='showEditPanel()' id='popup' class='popup'>\n <div class='popup-clear'>\n <button mat-icon-button (click)='onCloseEditPanel()'>\n <mat-icon class='mat-18'>clear</mat-icon>\n </button>\n </div>\n\n <div class='image-container'>\n <div class='image-holder-full'>\n <img id='image-full' [src]='imageSrc()' alt=''>\n <div id='image-cropper' class='image-cropper'>\n <div id='image-cropper-header'>\n <mat-icon>drag_indicator</mat-icon>\n </div>\n </div>\n </div>\n\n <div class='control-panel'>\n <p class='item-panel fw-600'>{{ 'QUALITY' | i18n: config()?.language }}</p>\n <div class='quality-container'>\n <mat-slider ngDefaultControl [color]='color' class='w-100 mw-100' (change)='onChangeQuality()'\n [max]='100' [min]='0' [step]='1' [discrete]='true' [showTickMarks]='true'>\n <input matSliderThumb [formControl]='quality'>\n </mat-slider>\n </div>\n\n <div class='item-panel'>\n <span class='fw-600'>{{ 'MAX_DIMENSIONS' | i18n: config()?.language }}</span>\n <mat-checkbox class='float-right' [formControl]='maintainAspectRatio' [color]='color'>\n <span>{{ 'ASPECT_RATIO' | i18n: config()?.language }}</span>\n </mat-checkbox>\n </div>\n\n <div class='max-dimension-container'>\n <mat-form-field class='w-48' [appearance]='appearance' [color]='color'>\n <mat-label>{{ 'MAX_WIDTH_PX' | i18n: config()?.language }}</mat-label>\n <input (change)='onChangeSize(true, false)' matInput [placeholder]=\"'MAX_WIDTH_PX' | i18n: config()?.language\"\n [(ngModel)]='maxWidth' type='number' [min]='0' [max]='2000'>\n </mat-form-field>\n\n <mat-form-field class='w-48' [appearance]='appearance' [color]='color'>\n <mat-label>{{ 'MAX_HEIGHT_PX' | i18n: config()?.language }}</mat-label>\n <input (change)='onChangeSize(false, true)' matInput [placeholder]=\"'MAX_HEIGHT_PX' | i18n: config()?.language\"\n [(ngModel)]='maxHeight' type='number' [min]='0' [max]='2000'>\n </mat-form-field>\n </div>\n\n <p class='item-panel fw-600'>{{ 'FORMAT' | i18n: config()?.language }}</p>\n <div class='formats-selection'>\n <mat-form-field class='w-100 mw-100' [appearance]='appearance' [color]='color'>\n <mat-select [formControl]='format' (selectionChange)='onChangeFormat()'>\n <mat-option *ngFor='let format of allFormats' [value]='format'>\n {{ format }}\n </mat-option>\n </mat-select>\n </mat-form-field>\n </div>\n\n <div class='refresh-container'>\n <mat-checkbox (change)='onCropStateChange()' [formControl]='showCrop' [color]='color'>\n <p class='item-panel fw-600'>{{ 'CROP' | i18n: config()?.language }}</p>\n </mat-checkbox>\n <div class='d-flex '>\n <button class='float-right' mat-icon-button [color]='color' (click)='onRestore()'>\n <mat-icon>refresh</mat-icon>\n </button>\n <p *ngIf='showCrop.value'>\n <button mat-icon-button [color]='color' (click)='onCrop()'>\n <mat-icon>crop</mat-icon>\n </button>\n </p>\n </div>\n </div>\n\n <ng-container *ngIf='showCrop.value'>\n <div class='dimension-container'>\n <mat-form-field class='w-48 mw-48' [appearance]='appearance' [color]='color'>\n <mat-label>{{ 'WIDTH_PX' | i18n: config()?.language }}</mat-label>\n <input (change)='onChangeCrop()' matInput [placeholder]=\"'WIDTH_PX' | i18n: config()?.language\"\n [formControl]='cropWidth' type='number' [min]='0' [max]='2000'>\n </mat-form-field>\n <mat-form-field class='w-48 mw-48' [appearance]='appearance' [color]='color'>\n <mat-label>{{ 'HEIGHT_PX' | i18n: config()?.language }}</mat-label>\n <input (change)='onChangeCrop()' matInput [placeholder]=\"'HEIGHT_PX' | i18n: config()?.language\"\n [formControl]='cropHeight' type='number' [min]='0' [max]='2000'>\n </mat-form-field>\n </div>\n </ng-container>\n\n <div class='save-container'>\n <button mat-flat-button (click)='onCloseEditPanel()' [color]='color' class='save-button'>\n {{ 'SAVE' | i18n: config()?.language}}\n </button>\n\n <p *ngIf='imageSrc()?.length' class='mat-caption image-caption'\n [class.warn]='(imageSrc()?.length | calculateSize) > 200'\n [class.fw-600]='(imageSrc()?.length | calculateSize) > 200'>\n {{\"SIZE\" | i18n: currentLanguage()}}: {{ (imageSrc()?.length | calculateSize) }}Kb &nbsp; {{ format.value }}\n </p>\n </div>\n </div>\n </div>\n</div>\n", styles: [".d-none{display:none}.d-flex{display:flex}.fw-600{font-weight:600}.w-100{width:100%}.mw-100{max-width:100%}.w-48{width:48%}.mw-48{max-width:48%}.float-right{float:right}p{margin:0!important;padding:0!important}.place-image{flex-direction:column;box-sizing:border-box;display:flex;place-content:flex-start;align-items:center}.place-image .image-holder{flex-direction:column;box-sizing:border-box;display:flex;place-content:center;align-items:center;position:relative;width:320px;height:240px;border-radius:16px;max-width:100%!important;background-color:#fff}@media (max-width: 599px){.place-image .image-holder{max-width:100%!important;max-height:250px!important}}.place-image .image-holder .image-upload-btn{transition:all .5s ease;position:relative;opacity:.85;width:50px;height:50px;box-sizing:content-box}.place-image .image-holder .image-upload-btn mat-icon{font-size:50px;width:50px;height:50px;line-height:50px}@media (max-width: 599px){.place-image .image-holder .image-upload-btn{opacity:1;width:30px;height:30px}.place-image .image-holder .image-upload-btn mat-icon{font-size:30px;width:30px;height:30px;line-height:30px}}.place-image .image-holder:hover .image-upload-btn{opacity:1;transition:all .5s ease}.place-image .image-holder-loaded{flex-direction:column;box-sizing:border-box;display:flex;place-content:center;align-items:center;position:relative;max-width:100%!important;width:320px;height:240px;border-radius:4px;padding:2px}.place-image .image-holder-loaded .image-caption{position:absolute;right:0;bottom:-22px}.place-image .image-holder-loaded img{height:100%;max-height:100%;width:100%;max-width:100%;object-fit:contain;object-position:center}@media (max-width: 599px){.place-image .image-holder-loaded{max-height:195px!important}}.place-image .image-holder-loaded .image-upload-btn{transition:all .5s ease;position:relative;opacity:.85;width:50px;height:50px;box-sizing:content-box}.place-image .image-holder-loaded .image-upload-btn mat-icon{font-size:50px;width:50px;height:50px;line-height:50px}@media (max-width: 599px){.place-image .image-holder-loaded .image-upload-btn{opacity:1;width:30px;height:30px}.place-image .image-holder-loaded .image-upload-btn mat-icon{font-size:30px;width:30px;height:30px;line-height:30px}}.place-image .image-holder-loaded:hover .image-upload-btn{opacity:1;transition:all .5s ease}.place-image .editing-bar-btn{margin-top:2px;display:flex;flex-direction:row;box-sizing:border-box;place-content:flex-start;align-items:flex-start}.place-image .editing-bar-btn .mat-icon-button{height:20px;line-height:20px;width:24px}.place-image .editing-bar-btn mat-icon{line-height:20px!important;font-size:20px!important;width:20px!important;height:20px!important}.place-image .editing-bar-btn button{margin:4px;transition:all .5s ease}.place-image .editing-bar-btn button:hover{transform:scale(1.25);margin:4px 8px;transition:all .25s ease-in}.place-image .editing-bar-btn a{margin:4px;transition:all .5s ease}.place-image .editing-bar-btn a:hover{transform:scale(1.25);margin:4px 8px;transition:all .25s ease-in}.popup{width:100vw;max-height:100%;height:100%;overflow:auto;position:fixed;top:0;left:0;z-index:1000;padding:24px;color:#fff;box-sizing:border-box;animation-name:show;animation-duration:.4s}.popup .popup-clear{flex-direction:row;box-sizing:border-box;display:flex;place-content:center flex-end;align-items:center}.popup .image-container{margin-top:50px;margin-bottom:50px;height:calc(100vh - 188px);min-height:calc(100vh - 188px);min-width:100%;width:100%;flex-flow:row wrap;box-sizing:border-box;display:flex;place-content:flex-start center;align-items:flex-start}.popup .image-container .image-holder-full{height:auto;width:auto;position:relative;display:contents}.popup img{max-height:600px;max-width:100%;object-fit:contain;object-position:center;margin:8px;transition:all .5s ease}@media (max-width: 1024px){.popup{background-color:#000000d9;padding:8px}.popup img{max-height:100%;max-width:100%}}@media (max-width: 599px){.popup img{margin:0}}.popup .control-panel{color:#000;background-color:#fff;margin:8px;padding:16px;max-width:100%;width:18rem;border-radius:8px;flex-direction:column;box-sizing:border-box;display:flex;place-content:stretch flex-start;align-items:stretch}@media (max-width: 599px){.popup .control-panel{margin:8px 0;width:100%}}.popup .control-panel .title-panel{padding:0 4px;font-size:16px;margin-bottom:16px!important}.popup .control-panel .item-panel{padding:0 4px!important;font-size:12px;display:flex;justify-content:space-between;align-items:center;gap:4px}.popup .control-panel .formats-selection{margin-top:8px!important;flex-direction:row;box-sizing:border-box;display:flex;place-content:flex-start;align-items:flex-start}.popup .control-panel .max-dimension-container{margin-top:16px!important;flex-flow:row;box-sizing:border-box;display:flex;place-content:flex-start space-between;align-items:flex-start}.popup .control-panel .dimension-container{margin-top:8px!important;flex-flow:row wrap;box-sizing:border-box;display:flex;place-content:flex-start space-between;align-items:flex-start}.popup .control-panel .save-container{flex-direction:row;box-sizing:border-box;display:flex;place-content:center space-between;align-items:center}.popup .control-panel .save-container .save-button{padding:0 8px;height:34px;box-sizing:border-box;font-weight:600}.popup .control-panel .quality-container{flex-direction:row;box-sizing:border-box;display:flex;place-content:flex-start;align-items:flex-start}.popup .control-panel .refresh-container{display:flex;justify-content:space-between;align-items:center}.popup .control-panel .refresh-container div{display:flex;align-items:center}@keyframes show{0%{top:-100vh;opacity:0}to{top:0;opacity:1}}.mat-form-field-appearance-fill .mat-form-field-flex{background-color:#fff!important}.mat-select-panel{background:white!important}input.mat-input-element{color:#000000d9}.mat-checkbox-background{background-color:#fff}.image-cropper{position:absolute;width:150px;height:150px;border:2.5px solid white;box-sizing:border-box;resize:both;overflow:auto;opacity:0}.image-cropper #image-cropper-header{padding:10px;cursor:move;z-index:10;background-color:transparent;height:85%}.image-cropper #image-cropper-header mat-icon{color:#fff}.btn{padding:4px 8px;border-radius:4px;cursor:pointer}.btn mat-icon{color:#000000d1}\n"] }]
497
+ PipesModule
498
+ ], template: "<div *ngIf='!loadImage()' class='place-image'>\r\n <div class='image-holder'\r\n [ngStyle]='{ width: config()?.width,height: config()?.height,borderRadius: config()?.borderRadius}'>\r\n <button [matTooltip]=\"'UPLOAD_A_IMAGE' | i18n: config()?.language\" class='image-upload-btn' mat-icon-button\r\n (click)='onUpload($event)'>\r\n <mat-icon class='mat-18'>add_a_photo</mat-icon>\r\n </button>\r\n <input #imagePicker type='file' class='d-none' [id]=\"'filePicker-' + uuidFilePicker\"\r\n (change)='handleFileSelect($event)' [accept]='imagesAllowed'>\r\n </div>\r\n</div>\r\n\r\n<div *ngIf='loadImage()' class='place-image'>\r\n <div class='image-holder-loaded'\r\n [ngStyle]='{width: config()?.width,height: config()?.height,borderRadius: config()?.borderRadius}'>\r\n <img [src]='imageSrc()' alt='image-loaded' [ngStyle]='{ borderRadius: config()?.borderRadius }'>\r\n <input #imagePicker type='file' class='d-none' [id]=\"'filePicker-' + uuidFilePicker\"\r\n (change)='handleFileSelect($event)' [accept]='imagesAllowed'>\r\n </div>\r\n <p *ngIf='imageSrc()?.length' class='mat-caption image-caption' [class.warn]='(imageSrc()?.length | calculateSize) > 200'\r\n [class.fw-600]='(imageSrc()?.length | calculateSize) > 200'>\r\n {{\"SIZE\" | i18n: currentLanguage()}}: {{ (imageSrc()?.length | calculateSize) }}Kb &nbsp; {{ format.value }}\r\n </p>\r\n\r\n <div class='editing-bar-btn'>\r\n <button id='upload-img' *ngIf='!config()?.hideAddBtn' mat-icon-button (click)='onUpload($event)'\r\n [matTooltip]=\"'UPLOAD_A_IMAGE' | i18n: config()?.language\">\r\n <mat-icon class='mat-18'>add_a_photo</mat-icon>\r\n </button>\r\n <button id='edit-img' *ngIf='!config()?.hideEditBtn && !noEdit()' mat-icon-button (click)='showEditPanel.set(true)'\r\n [matTooltip]=\"'OPEN_EDITOR_PANEL' | i18n: config()?.language\">\r\n <mat-icon class='mat-18'>edit</mat-icon>\r\n </button>\r\n <a id='download-img' *ngIf='!config()?.hideDownloadBtn' [matTooltip]=\"'DOWNLOAD' | i18n: config()?.language\"\r\n [href]='imageSrc()' mat-icon-button [download]='imageName'>\r\n <mat-icon class='mat-18'>cloud_download</mat-icon>\r\n </a>\r\n <button id='delete-img' *ngIf='!config()?.hideDeleteBtn' mat-icon-button (click)='onRemove()'\r\n [matTooltip]=\"'REMOVE' | i18n: config()?.language\">\r\n <mat-icon class='mat-18'>delete</mat-icon>\r\n </button>\r\n </div>\r\n</div>\r\n\r\n<div *ngIf='showEditPanel()' id='popup' class='popup'>\r\n <div class='popup-clear'>\r\n <button mat-icon-button (click)='onCloseEditPanel()'>\r\n <mat-icon class='mat-18'>clear</mat-icon>\r\n </button>\r\n </div>\r\n\r\n <div class='image-container'>\r\n <div class='image-holder-full'>\r\n <img id='image-full' [src]='imageSrc()' alt=''>\r\n <div id='image-cropper' class='image-cropper'>\r\n <div id='image-cropper-header'>\r\n <mat-icon>drag_indicator</mat-icon>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class='control-panel'>\r\n <p class='item-panel fw-600'>{{ 'QUALITY' | i18n: config()?.language }}</p>\r\n <div class='quality-container'>\r\n <mat-slider ngDefaultControl [color]='color' class='w-100 mw-100' (change)='onChangeQuality()'\r\n [max]='100' [min]='0' [step]='1' [discrete]='true' [showTickMarks]='true'>\r\n <input matSliderThumb [formControl]='quality'>\r\n </mat-slider>\r\n </div>\r\n\r\n <div class='item-panel'>\r\n <span class='fw-600'>{{ 'MAX_DIMENSIONS' | i18n: config()?.language }}</span>\r\n <mat-checkbox class='float-right' [formControl]='maintainAspectRatio' [color]='color'>\r\n <span>{{ 'ASPECT_RATIO' | i18n: config()?.language }}</span>\r\n </mat-checkbox>\r\n </div>\r\n\r\n <div class='max-dimension-container'>\r\n <mat-form-field class='w-48' [appearance]='appearance' [color]='color'>\r\n <mat-label>{{ 'MAX_WIDTH_PX' | i18n: config()?.language }}</mat-label>\r\n <input (change)='onChangeSize(true, false)' matInput [placeholder]=\"'MAX_WIDTH_PX' | i18n: config()?.language\"\r\n [(ngModel)]='maxWidth' type='number' [min]='0' [max]='2000'>\r\n </mat-form-field>\r\n\r\n <mat-form-field class='w-48' [appearance]='appearance' [color]='color'>\r\n <mat-label>{{ 'MAX_HEIGHT_PX' | i18n: config()?.language }}</mat-label>\r\n <input (change)='onChangeSize(false, true)' matInput [placeholder]=\"'MAX_HEIGHT_PX' | i18n: config()?.language\"\r\n [(ngModel)]='maxHeight' type='number' [min]='0' [max]='2000'>\r\n </mat-form-field>\r\n </div>\r\n\r\n <p class='item-panel fw-600'>{{ 'FORMAT' | i18n: config()?.language }}</p>\r\n <div class='formats-selection'>\r\n <mat-form-field class='w-100 mw-100' [appearance]='appearance' [color]='color'>\r\n <mat-select [formControl]='format' (selectionChange)='onChangeFormat()'>\r\n <mat-option *ngFor='let format of allFormats' [value]='format'>\r\n {{ format }}\r\n </mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n </div>\r\n\r\n <div class='refresh-container'>\r\n <mat-checkbox (change)='onCropStateChange()' [formControl]='showCrop' [color]='color'>\r\n <p class='item-panel fw-600'>{{ 'CROP' | i18n: config()?.language }}</p>\r\n </mat-checkbox>\r\n <div class='d-flex '>\r\n <button class='float-right' mat-icon-button [color]='color' (click)='onRestore()'>\r\n <mat-icon>refresh</mat-icon>\r\n </button>\r\n <p *ngIf='showCrop.value'>\r\n <button mat-icon-button [color]='color' (click)='onCrop()'>\r\n <mat-icon>crop</mat-icon>\r\n </button>\r\n </p>\r\n </div>\r\n </div>\r\n\r\n <ng-container *ngIf='showCrop.value'>\r\n <div class='dimension-container'>\r\n <mat-form-field class='w-48 mw-48' [appearance]='appearance' [color]='color'>\r\n <mat-label>{{ 'WIDTH_PX' | i18n: config()?.language }}</mat-label>\r\n <input (change)='onChangeCrop()' matInput [placeholder]=\"'WIDTH_PX' | i18n: config()?.language\"\r\n [formControl]='cropWidth' type='number' [min]='0' [max]='2000'>\r\n </mat-form-field>\r\n <mat-form-field class='w-48 mw-48' [appearance]='appearance' [color]='color'>\r\n <mat-label>{{ 'HEIGHT_PX' | i18n: config()?.language }}</mat-label>\r\n <input (change)='onChangeCrop()' matInput [placeholder]=\"'HEIGHT_PX' | i18n: config()?.language\"\r\n [formControl]='cropHeight' type='number' [min]='0' [max]='2000'>\r\n </mat-form-field>\r\n </div>\r\n </ng-container>\r\n\r\n <div class='save-container'>\r\n <button mat-flat-button (click)='onCloseEditPanel()' [color]='color' class='save-button'>\r\n {{ 'SAVE' | i18n: config()?.language}}\r\n </button>\r\n\r\n <p *ngIf='imageSrc()?.length' class='mat-caption image-caption'\r\n [class.warn]='(imageSrc()?.length | calculateSize) > 200'\r\n [class.fw-600]='(imageSrc()?.length | calculateSize) > 200'>\r\n {{\"SIZE\" | i18n: currentLanguage()}}: {{ (imageSrc()?.length | calculateSize) }}Kb &nbsp; {{ format.value }}\r\n </p>\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n", styles: [".d-none{display:none}.d-flex{display:flex}.fw-600{font-weight:600}.w-100{width:100%}.mw-100{max-width:100%}.w-48{width:48%}.mw-48{max-width:48%}.float-right{float:right}p{margin:0!important;padding:0!important}.place-image{flex-direction:column;box-sizing:border-box;display:flex;place-content:flex-start;align-items:center}.place-image .image-holder{flex-direction:column;box-sizing:border-box;display:flex;place-content:center;align-items:center;position:relative;width:320px;height:240px;border-radius:16px;max-width:100%!important;background-color:#fff}@media (max-width: 599px){.place-image .image-holder{max-width:100%!important;max-height:250px!important}}.place-image .image-holder .image-upload-btn{transition:all .5s ease;position:relative;opacity:.85;width:50px;height:50px;box-sizing:content-box}.place-image .image-holder .image-upload-btn mat-icon{font-size:50px;width:50px;height:50px;line-height:50px}@media (max-width: 599px){.place-image .image-holder .image-upload-btn{opacity:1;width:30px;height:30px}.place-image .image-holder .image-upload-btn mat-icon{font-size:30px;width:30px;height:30px;line-height:30px}}.place-image .image-holder:hover .image-upload-btn{opacity:1;transition:all .5s ease}.place-image .image-holder-loaded{flex-direction:column;box-sizing:border-box;display:flex;place-content:center;align-items:center;position:relative;max-width:100%!important;width:320px;height:240px;border-radius:4px;padding:2px}.place-image .image-holder-loaded .image-caption{position:absolute;right:0;bottom:-22px}.place-image .image-holder-loaded img{height:100%;max-height:100%;width:100%;max-width:100%;object-fit:contain;object-position:center}@media (max-width: 599px){.place-image .image-holder-loaded{max-height:195px!important}}.place-image .image-holder-loaded .image-upload-btn{transition:all .5s ease;position:relative;opacity:.85;width:50px;height:50px;box-sizing:content-box}.place-image .image-holder-loaded .image-upload-btn mat-icon{font-size:50px;width:50px;height:50px;line-height:50px}@media (max-width: 599px){.place-image .image-holder-loaded .image-upload-btn{opacity:1;width:30px;height:30px}.place-image .image-holder-loaded .image-upload-btn mat-icon{font-size:30px;width:30px;height:30px;line-height:30px}}.place-image .image-holder-loaded:hover .image-upload-btn{opacity:1;transition:all .5s ease}.place-image .editing-bar-btn{margin-top:2px;display:flex;flex-direction:row;box-sizing:border-box;place-content:flex-start;align-items:flex-start}.place-image .editing-bar-btn .mat-icon-button{height:20px;line-height:20px;width:24px}.place-image .editing-bar-btn mat-icon{line-height:20px!important;font-size:20px!important;width:20px!important;height:20px!important}.place-image .editing-bar-btn button{margin:4px;transition:all .5s ease}.place-image .editing-bar-btn button:hover{transform:scale(1.25);margin:4px 8px;transition:all .25s ease-in}.place-image .editing-bar-btn a{margin:4px;transition:all .5s ease}.place-image .editing-bar-btn a:hover{transform:scale(1.25);margin:4px 8px;transition:all .25s ease-in}.popup{width:100vw;max-height:100%;height:100%;overflow:auto;position:fixed;top:0;left:0;z-index:1000;padding:24px;color:#fff;box-sizing:border-box;animation-name:show;animation-duration:.4s}.popup .popup-clear{flex-direction:row;box-sizing:border-box;display:flex;place-content:center flex-end;align-items:center}.popup .image-container{margin-top:50px;margin-bottom:50px;height:calc(100vh - 188px);min-height:calc(100vh - 188px);min-width:100%;width:100%;flex-flow:row wrap;box-sizing:border-box;display:flex;place-content:flex-start center;align-items:flex-start}.popup .image-container .image-holder-full{height:auto;width:auto;position:relative;display:contents}.popup img{max-height:600px;max-width:100%;object-fit:contain;object-position:center;margin:8px;transition:all .5s ease}@media (max-width: 1024px){.popup{background-color:#000000d9;padding:8px}.popup img{max-height:100%;max-width:100%}}@media (max-width: 599px){.popup img{margin:0}}.popup .control-panel{color:#000;background-color:#fff;margin:8px;padding:16px;max-width:100%;width:18rem;border-radius:8px;flex-direction:column;box-sizing:border-box;display:flex;place-content:stretch flex-start;align-items:stretch}@media (max-width: 599px){.popup .control-panel{margin:8px 0;width:100%}}.popup .control-panel .title-panel{padding:0 4px;font-size:16px;margin-bottom:16px!important}.popup .control-panel .item-panel{padding:0 4px!important;font-size:12px;display:flex;justify-content:space-between;align-items:center;gap:4px}.popup .control-panel .formats-selection{margin-top:8px!important;flex-direction:row;box-sizing:border-box;display:flex;place-content:flex-start;align-items:flex-start}.popup .control-panel .max-dimension-container{margin-top:16px!important;flex-flow:row;box-sizing:border-box;display:flex;place-content:flex-start space-between;align-items:flex-start}.popup .control-panel .dimension-container{margin-top:8px!important;flex-flow:row wrap;box-sizing:border-box;display:flex;place-content:flex-start space-between;align-items:flex-start}.popup .control-panel .save-container{flex-direction:row;box-sizing:border-box;display:flex;place-content:center space-between;align-items:center}.popup .control-panel .save-container .save-button{padding:0 8px;height:34px;box-sizing:border-box;font-weight:600}.popup .control-panel .quality-container{flex-direction:row;box-sizing:border-box;display:flex;place-content:flex-start;align-items:flex-start}.popup .control-panel .refresh-container{display:flex;justify-content:space-between;align-items:center}.popup .control-panel .refresh-container div{display:flex;align-items:center}@keyframes show{0%{top:-100vh;opacity:0}to{top:0;opacity:1}}.mat-form-field-appearance-fill .mat-form-field-flex{background-color:#fff!important}.mat-select-panel{background:white!important}input.mat-input-element{color:#000000d9}.mat-checkbox-background{background-color:#fff}.image-cropper{position:absolute;width:150px;height:150px;border:2.5px solid white;box-sizing:border-box;resize:both;overflow:auto;opacity:0}.image-cropper #image-cropper-header{padding:10px;cursor:move;z-index:10;background-color:transparent;height:85%}.image-cropper #image-cropper-header mat-icon{color:#fff}.btn{padding:4px 8px;border-radius:4px;cursor:pointer}.btn mat-icon{color:#000000d1}\n"] }]
501
499
  }], ctorParameters: function () { return []; }, propDecorators: { appearance: [{
502
500
  type: Input
503
501
  }], color: [{
@@ -516,4 +514,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.4", ngImpor
516
514
  }], _config: [{
517
515
  type: Input
518
516
  }] } });
519
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3VhY2hvcy1pbWFnZS1waWNrZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvZ3VhY2hvcy1pbWFnZS1waWNrZXIvc3JjL2xpYi9ndWFjaG9zLWltYWdlLXBpY2tlci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi9wcm9qZWN0cy9ndWFjaG9zLWltYWdlLXBpY2tlci9zcmMvbGliL2d1YWNob3MtaW1hZ2UtcGlja2VyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCx1QkFBdUIsRUFDdkIsU0FBUyxFQUNULFVBQVUsRUFDVixZQUFZLEVBQ1osS0FBSyxFQUVMLE1BQU0sRUFDTixNQUFNLEVBQ04sU0FBUyxHQUVWLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUNqRCxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBRy9CLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUN2RCxPQUFPLEVBQUUsV0FBVyxFQUFFLG1CQUFtQixFQUFFLGtCQUFrQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDdEYsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDN0QsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDL0QsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQzNELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUMzRCxPQUFPLEVBQTBCLGtCQUFrQixFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDMUYsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ3pELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUMz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c291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENvbXBvbmVudCxcbiAgRWxlbWVudFJlZixcbiAgRXZlbnRFbWl0dGVyLFxuICBJbnB1dCxcbiAgT25EZXN0cm95LFxuICBPdXRwdXQsXG4gIHNpZ25hbCxcbiAgVmlld0NoaWxkLFxuICBXcml0YWJsZVNpZ25hbCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBSZXNpemVPYnNlcnZlciB9IGZyb20gJ3Jlc2l6ZS1vYnNlcnZlcic7XG5pbXBvcnQgeyBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBSZXNpemVPYnNlcnZlckVudHJ5IH0gZnJvbSAncmVzaXplLW9ic2VydmVyL2xpYi9SZXNpemVPYnNlcnZlckVudHJ5JztcbmltcG9ydCB7IFRoZW1lUGFsZXR0ZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2NvcmUnO1xuaW1wb3J0IHsgTWF0SWNvbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2ljb24nO1xuaW1wb3J0IHsgRm9ybXNNb2R1bGUsIFJlYWN0aXZlRm9ybXNNb2R1bGUsIFVudHlwZWRGb3JtQ29udHJvbCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IE1hdFRvb2x0aXBNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC90b29sdGlwJztcbmltcG9ydCB7IE1hdENoZWNrYm94TW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvY2hlY2tib3gnO1xuaW1wb3J0IHsgTWF0U2xpZGVyTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvc2xpZGVyJztcbmltcG9ydCB7IE1hdEJ1dHRvbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2J1dHRvbic7XG5pbXBvcnQgeyBNYXRGb3JtRmllbGRBcHBlYXJhbmNlLCBNYXRGb3JtRmllbGRNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9mb3JtLWZpZWxkJztcbmltcG9ydCB7IE1hdElucHV0TW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvaW5wdXQnO1xuaW1wb3J0IHsgTWF0U2VsZWN0TW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvc2VsZWN0JztcbmltcG9ydCB7IE5nRm9yT2YsIE5nSWYsIE5nU3R5bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuXG5pbXBvcnQgeyBQaXBlc01vZHVsZSB9IGZyb20gJy4uL3V0aWxzL3BpcGVzL3BpcGVzLm1vZHVsZSc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgSW1hZ2VQaWNrZXJDb25mIHtcbiAgd2lkdGg/OiBzdHJpbmc7XG4gIGhlaWdodD86IHN0cmluZztcbiAgYm9yZGVyUmFkaXVzPzogc3RyaW5nO1xuICBjb21wcmVzc0luaXRpYWw/OiBib29sZWFuO1xuICBsYW5ndWFnZT86IHN0cmluZztcbiAgaGlkZURlbGV0ZUJ0bj86IGJvb2xlYW47XG4gIGhpZGVEb3dubG9hZEJ0bj86IGJvb2xlYW47XG4gIGhpZGVFZGl0QnRuPzogYm9vbGVhbjtcbiAgaGlkZUFkZEJ0bj86IGJvb2xlYW47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSW1hZ2VDb252ZXJ0ZXJJbnB1dCB7XG4gIHdpZHRoPzogbnVtYmVyO1xuICBoZWlnaHQ/OiBudW1iZXI7XG4gIHF1YWxpdHk/OiBudW1iZXI7XG4gIGRhdGFUeXBlPzogc3RyaW5nO1xuICBtYWludGFpblJhdGlvPzogYm9vbGVhbjtcbiAgY2hhbmdlSGVpZ2h0PzogYm9vbGVhbjtcbiAgY2hhbmdlV2lkdGg/OiBib29sZWFuO1xufVxuXG5leHBvcnQgdHlwZSBJbWFnZUFsbG93ZWRUeXBlcyA9XG4gICdpbWFnZS8qJ1xuICB8ICcud2VicCdcbiAgfCAnLnBuZydcbiAgfCAnLndlYnAsIC5qcGcsIC5qcGVnJ1xuICB8ICcud2VicCwgLnBuZydcbiAgfCAnLmpwZywgLmpwZWcnXG4gIHwgJy5wbmcsIC5qcGcsIC5qcGVnJ1xuICB8ICcud2VicCwgLnBuZywgLmpwZywgLmpwZWcnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdndWFqaXJpdG9zLWltYWdlLXBpY2tlcicsXG4gIHRlbXBsYXRlVXJsOiAnLi9ndWFjaG9zLWltYWdlLXBpY2tlci5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2d1YWNob3MtaW1hZ2UtcGlja2VyLmNvbXBvbmVudC5zY3NzJ10sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbXG4gICAgTmdJZixcbiAgICBOZ1N0eWxlLFxuICAgIE1hdFRvb2x0aXBNb2R1bGUsXG4gICAgTWF0SWNvbk1vZHVsZSxcbiAgICBNYXRCdXR0b25Nb2R1bGUsXG4gICAgTWF0Q2hlY2tib3hNb2R1bGUsXG4gICAgTWF0U2xpZGVyTW9kdWxlLFxuICAgIE1hdEZvcm1GaWVsZE1vZHVsZSxcbiAgICBNYXRJbnB1dE1vZHVsZSxcbiAgICBGb3Jtc01vZHVsZSxcbiAgICBNYXRTZWxlY3RNb2R1bGUsXG4gICAgUmVhY3RpdmVGb3Jtc01vZHVsZSxcbiAgICBGb3Jtc01vZHVsZSxcbiAgICBQaXBlc01vZHVsZSxcbiAgICBOZ0Zvck9mLFxuICBdLFxufSlcbmV4cG9ydCBjbGFzcyBHdWFqaXJpdG9zSW1hZ2VQaWNrZXIgaW1wbGVtZW50cyBPbkRlc3Ryb3kge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgfVxuXG4gIHByaXZhdGUgdW5zdWJzY3JpYmVBbGwkOiBTdWJqZWN0PHZvaWQ+ID0gbmV3IFN1YmplY3QoKTtcbiAgcHJpdmF0ZSBvYnNlcnZlcjogYW55ID0gbnVsbDtcbiAgcHJpdmF0ZSBvcmlnaW5JbWFnZVNyYzogYW55O1xuICBwcml2YXRlIGZpbGVUeXBlOiBhbnk7XG4gIHByaXZhdGUgdXJsSW1hZ2U6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgcHJpdmF0ZSBsYXN0T3JpZ2luU3JjOiBhbnk7XG5cbiAgcHJpdmF0ZSBhcnJheUNvcGllZEltYWdlczogYW55W10gPSBbXTtcblxuICBwdWJsaWMgcmVhZG9ubHkgdXVpZEZpbGVQaWNrZXI6IHN0cmluZyA9IERhdGUubm93KCkudG9TdHJpbmcoMjApO1xuICBwdWJsaWMgcmVhZG9ubHkgYWxsRm9ybWF0czogc3RyaW5nW10gPSBbJ3dlYnAnLCAnanBlZycsICdwbmcnXTtcbiAgcHVibGljIGNvbmZpZzogV3JpdGFibGVTaWduYWw8SW1hZ2VQaWNrZXJDb25mPiA9IHNpZ25hbCh7XG4gICAgaGVpZ2h0OiAnMjQwcHgnLFxuICAgIHdpZHRoOiAnMzIwcHgnLFxuICAgIGJvcmRlclJhZGl1czogJzE2cHgnLFxuICAgIGNvbXByZXNzSW5pdGlhbDogdHJ1ZSxcbiAgICBsYW5ndWFnZTogJ2VzJyxcbiAgICBoaWRlRGVsZXRlQnRuOiBmYWxzZSxcbiAgICBoaWRlRG93bmxvYWRCdG46IGZhbHNlLFxuICAgIGhpZGVFZGl0QnRuOiBmYWxzZSxcbiAgICBoaWRlQWRkQnRuOiBmYWxzZSxcbiAgfSk7XG4gIHB1YmxpYyBpbWFnZVNyYzogV3JpdGFibGVTaWduYWw8c3RyaW5nPiA9IHNpZ25hbChudWxsKTtcbiAgcHVibGljIHNob3dDcm9wOiBVbnR5cGVkRm9ybUNvbnRyb2wgPSBuZXcgVW50eXBlZEZvcm1Db250cm9sKHsgdmFsdWU6IGZhbHNlLCBkaXNhYmxlZDogZmFsc2UgfSk7XG4gIHB1YmxpYyBsb2FkSW1hZ2U6IFdyaXRhYmxlU2lnbmFsPGJvb2xlYW4+ID0gc2lnbmFsKGZhbHNlKTtcbiAgcHVibGljIG5vRWRpdDogV3JpdGFibGVTaWduYWw8Ym9vbGVhbj4gPSBzaWduYWwoZmFsc2UpO1xuICBwdWJsaWMgc2hvd0VkaXRQYW5lbDogV3JpdGFibGVTaWduYWw8Ym9vbGVhbj4gPSBzaWduYWwoZmFsc2UpO1xuICBwdWJsaWMgbWFpbnRhaW5Bc3BlY3RSYXRpbzogVW50eXBlZEZvcm1Db250cm9sID0gbmV3IFVudHlwZWRGb3JtQ29udHJvbCh7IHZhbHVlOiB0cnVlLCBkaXNhYmxlZDogZmFsc2UgfSk7XG4gIHB1YmxpYyBxdWFsaXR5OiBVbnR5cGVkRm9ybUNvbnRyb2wgPSBuZXcgVW50eXBlZEZvcm1Db250cm9sKHsgdmFsdWU6IDcwLCBkaXNhYmxlZDogZmFsc2UgfSk7XG4gIHB1YmxpYyBmb3JtYXQ6IFVudHlwZWRGb3JtQ29udHJvbCA9IG5ldyBVbnR5cGVkRm9ybUNvbnRyb2woeyB2YWx1ZTogJ3dlYnAnLCBkaXNhYmxlZDogZmFsc2UgfSk7XG4gIHB1YmxpYyBtYXhIZWlnaHQ6IFdyaXRhYmxlU2lnbmFsPG51bWJlcj4gPSBzaWduYWwoMjAwMCk7XG4gIHB1YmxpYyBtYXhXaWR0aDogV3JpdGFibGVTaWduYWw8bnVtYmVyPiA9IHNpZ25hbCgyMDAwKTtcbiAgcHVibGljIGNyb3BIZWlnaHQ6IFVudHlwZWRGb3JtQ29udHJvbCA9IG5ldyBVbnR5cGVkRm9ybUNvbnRyb2woeyB2YWx1ZTogMTUwLCBkaXNhYmxlZDogZmFsc2UgfSk7XG4gIHB1YmxpYyBjcm9wV2lkdGg6IFVudHlwZWRGb3JtQ29udHJvbCA9IG5ldyBVbnR5cGVkRm9ybUNvbnRyb2woeyB2YWx1ZTogMTUwLCBkaXNhYmxlZDogZmFsc2UgfSk7XG4gIHB1YmxpYyBpbWFnZU5hbWU6IFdyaXRhYmxlU2lnbmFsPHN0cmluZz4gPSBzaWduYWwoJ2Rvd25sb2FkJyk7XG4gIHB1YmxpYyBjdXJyZW50TGFuZ3VhZ2U6IFdyaXRhYmxlU2lnbmFsPHN0cmluZz4gPSBzaWduYWwoJ2VzJyk7XG5cbiAgQElucHV0KCkgYXBwZWFyYW5jZTogTWF0Rm9ybUZpZWxkQXBwZWFyYW5jZSA9ICdvdXRsaW5lJztcbiAgQElucHV0KCkgY29sb3I6IFRoZW1lUGFsZXR0ZSA9ICdwcmltYXJ5JztcbiAgQElucHV0KCkgaW1hZ2VzQWxsb3dlZDogSW1hZ2VBbGxvd2VkVHlwZXMgPSAnaW1hZ2UvKic7XG5cbiAgQFZpZXdDaGlsZCgnaW1hZ2VQaWNrZXInLCB7IHN0YXRpYzogZmFsc2UgfSkgaW1hZ2VQaWNrZXI6IEVsZW1lbnRSZWYgfCB1bmRlZmluZWQ7XG5cbiAgQE91dHB1dCgpICRpbWFnZUNoYW5nZWQ6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gIEBPdXRwdXQoKSAkaW1hZ2VPcmlnaW5hbDogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcblxuICBASW5wdXQoKSBzZXQgX2ltYWdlU3JjKGltYWdlOiBzdHJpbmcpIHtcbiAgICBpZiAoaW1hZ2UpIHtcbiAgICAgIGxldCB0eXBlczogc3RyaW5nW10gPSBpbWFnZS5zcGxpdCgnLicpO1xuICAgICAgdGhpcy5mb3JtYXQuc2V0VmFsdWUodHlwZXNbdHlwZXMubGVuZ3RoIC0gMV0pO1xuXG4gICAgICBpZiAoIXRoaXMuZm9ybWF0LnZhbHVlIHx8ICh0aGlzLmZvcm1hdC52YWx1ZSAhPT0gJ3BuZycgJiYgdGhpcy5mb3JtYXQudmFsdWUgIT09ICdqcGVnJyAmJiB0aGlzLmZvcm1hdC52YWx1ZSAhPT0gJ3dlYnAnKSkge1xuICAgICAgICB0aGlzLmZvcm1hdC5zZXRWYWx1ZSgnanBlZycpO1xuICAgICAgfVxuXG4gICAgICB0aGlzLmltYWdlU3JjLnNldChpbWFnZSk7XG4gICAgICB0aGlzLmFycmF5Q29waWVkSW1hZ2VzID0gW107XG4gICAgICB0aGlzLmFycmF5Q29waWVkSW1hZ2VzLnB1c2godGhpcy5pbWFnZVNyYyk7XG4gICAgICB0aGlzLm9yaWdpbkltYWdlU3JjID0gaW1hZ2U7XG4gICAgICB0aGlzLmxhc3RPcmlnaW5TcmMgPSBpbWFnZTtcbiAgICAgIHRoaXMuJGltYWdlT3JpZ2luYWwubmV4dCh0aGlzLm9yaWdpbkltYWdlU3JjKTtcbiAgICAgIHRoaXMubG9hZEltYWdlLnNldCh0cnVlKTtcbiAgICAgIHRoaXMubm9FZGl0LnNldCh0cnVlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5pbWFnZVNyYy5zZXQobnVsbCk7XG4gICAgICB0aGlzLm9yaWdpbkltYWdlU3JjID0gbnVsbDtcbiAgICAgIHRoaXMubG9hZEltYWdlLnNldChmYWxzZSk7XG4gICAgICB0aGlzLm5vRWRpdC5zZXQoZmFsc2UpO1xuICAgICAgdGhpcy5hcnJheUNvcGllZEltYWdlcyA9IFtdO1xuICAgICAgdGhpcy5sYXN0T3JpZ2luU3JjID0gbnVsbDtcbiAgICAgIHRoaXMuJGltYWdlT3JpZ2luYWwubmV4dChudWxsKTtcbiAgICAgIHRoaXMuZm9ybWF0LnNldFZhbHVlKCdqcGVnJyk7XG4gICAgICB0aGlzLm1heEhlaWdodC5zZXQoMjAwMCk7XG4gICAgICB0aGlzLm1heFdpZHRoLnNldCgyMDAwKTtcbiAgICAgIHRoaXMuY3JvcEhlaWdodC5zZXRWYWx1ZSgxNTApO1xuICAgICAgdGhpcy5jcm9wV2lkdGguc2V0VmFsdWUoMTUwKTtcbiAgICAgIHRoaXMubWFpbnRhaW5Bc3BlY3RSYXRpby5zZXRWYWx1ZSh0cnVlKTtcbiAgICAgIHRoaXMuc2hvd0VkaXRQYW5lbC5zZXQoZmFsc2UpO1xuICAgIH1cbiAgfVxuXG4gIEBJbnB1dCgpIHNldCBfY29uZmlnKHZhbHVlOiBJbWFnZVBpY2tlckNvbmYpIHtcbiAgICBpZiAodmFsdWUgJiYgdmFsdWUuY29uc3RydWN0b3IgPT0gT2JqZWN0KSB7XG4gICAgICB0aGlzLmNvbmZpZy5zZXQoe1xuICAgICAgICAuLi50aGlzLmNvbmZpZygpLFxuICAgICAgICAuLi52YWx1ZSxcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgaGFuZGxlUmVhZGVyTG9hZGVkKHJlYWRlckV2dDogeyB0YXJnZXQ6IHsgcmVzdWx0OiBhbnk7IH07IH0pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBiaW5hcnlTdHJpbmc6IHN0cmluZyA9IHJlYWRlckV2dC50YXJnZXQucmVzdWx0O1xuICAgIGNvbnN0IGJhc2U2NHRleHRTdHJpbmc6IHN0cmluZyA9IGJ0b2EoYmluYXJ5U3RyaW5nKTtcbiAgICB0aGlzLm9yaWdpbkltYWdlU3JjID0gdGhpcy51cmxJbWFnZSArIGJhc2U2NHRleHRTdHJpbmc7XG4gICAgdGhpcy5sYXN0T3JpZ2luU3JjID0gdGhpcy51cmxJbWFnZSArIGJhc2U2NHRleHRTdHJpbmc7XG4gICAgaWYgKHRoaXMuY29uZmlnKCk/LmNvbXByZXNzSW5pdGlhbCkge1xuICAgICAgdGhpcy5xdWFsaXR5LnNldFZhbHVlKDcwKTtcbiAgICAgIGNvbnN0IGlucHV0OiBJbWFnZUNvbnZlcnRlcklucHV0ID0ge1xuICAgICAgICBkYXRhVHlwZTogdGhpcy5mb3JtYXQudmFsdWUsXG4gICAgICAgIHF1YWxpdHk6IDAuNzAsXG4gICAgICAgIG1haW50YWluUmF0aW86IHRydWUsXG4gICAgICB9O1xuICAgICAgdGhpcy5pbWFnZVNyYy5zZXQoYXdhaXQgdGhpcy5yZXNpemVEYXRhVVJMKHRoaXMudXJsSW1hZ2UgKyBiYXNlNjR0ZXh0U3RyaW5nLCBpbnB1dCkpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmltYWdlU3JjLnNldCh0aGlzLnVybEltYWdlICsgYmFzZTY0dGV4dFN0cmluZyk7XG4gICAgICB0aGlzLmFycmF5Q29waWVkSW1hZ2VzID0gW107XG4gICAgICB0aGlzLmFycmF5Q29waWVkSW1hZ2VzLnB1c2goe1xuICAgICAgICBsYXN0SW1hZ2U6IHRoaXMuaW1hZ2VTcmMoKSxcbiAgICAgICAgd2lkdGg6IHRoaXMubWF4V2lkdGgoKSxcbiAgICAgICAgaGVpZ2h0OiB0aGlzLm1heEhlaWdodCgpLFxuICAgICAgICBxdWFsaXR5OiB0aGlzLnF1YWxpdHkudmFsdWUsXG4gICAgICB9KTtcbiAgICAgIHRoaXMuJGltYWdlT3JpZ2luYWwubmV4dCh0aGlzLmltYWdlU3JjKCkpO1xuICAgIH1cbiAgICB0aGlzLiRpbWFnZUNoYW5nZWQubmV4dCh0aGlzLmltYWdlU3JjKCkpO1xuICAgIHRoaXMubG9hZEltYWdlLnNldCh0cnVlKTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgcmVzaXplRGF0YVVSTChkYXRhczogc3RyaW5nLCBpbnB1dDogSW1hZ2VDb252ZXJ0ZXJJbnB1dCk6IFByb21pc2U8YW55PiB7XG4gICAgcmV0dXJuIGF3YWl0IG5ldyBQcm9taXNlKGFzeW5jIGZ1bmN0aW9uKHJlc29sdmUpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgIGxldCBpbWc6IEhUTUxJbWFnZUVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdpbWcnKTtcbiAgICAgIGltZy5zcmMgPSBkYXRhcyArICcnO1xuICAgICAgaW1nLmNyb3NzT3JpZ2luID0gJ0Fub255bW91cyc7XG4gICAgICBsZXQgcXVhbGl0eTogbnVtYmVyID0gaW5wdXQ/LnF1YWxpdHkgPz8gMS4wO1xuICAgICAgbGV0IG1haW50YWluUmF0aW86IGJvb2xlYW4gPSBpbnB1dC5tYWludGFpblJhdGlvICE9PSB1bmRlZmluZWQgPyBpbnB1dC5tYWludGFpblJhdGlvIDogdHJ1ZTtcblxuICAgICAgaW1nLm9ubG9hZCA9IGZ1bmN0aW9uKCk6IHZvaWQge1xuICAgICAgICBjb25zdCBjYW52YXM6IEhUTUxDYW52YXNFbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnY2FudmFzJyk7XG4gICAgICAgIGNvbnN0IGN0eDogQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEID0gY2FudmFzLmdldENvbnRleHQoJzJkJyk7XG4gICAgICAgIGxldCByYXRpbzogbnVtYmVyID0gaW1nLndpZHRoIC8gaW1nLmhlaWdodDtcbiAgICAgICAgbGV0IHdpZHRoOiBudW1iZXIgPSBpbnB1dD8ud2lkdGggPz8gaW1nLndpZHRoO1xuICAgICAgICBsZXQgaGVpZ2h0OiBudW1iZXIgPSBpbnB1dD8uaGVpZ2h0ID8/IGltZy5oZWlnaHQ7XG5cbiAgICAgICAgaWYgKG1haW50YWluUmF0aW8pIHtcbiAgICAgICAgICBpZiAoaW5wdXQuY2hhbmdlSGVpZ2h0KSB7XG4gICAgICAgICAgICBjYW52YXMud2lkdGggPSBoZWlnaHQgKiByYXRpbztcbiAgICAgICAgICAgIGNhbnZhcy5oZWlnaHQgPSBoZWlnaHQ7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNhbnZhcy53aWR0aCA9IHdpZHRoO1xuICAgICAgICAgICAgY2FudmFzLmhlaWdodCA9IHdpZHRoIC8gcmF0aW87XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNhbnZhcy53aWR0aCA9IHdpZHRoO1xuICAgICAgICAgIGNhbnZhcy5oZWlnaHQgPSBoZWlnaHQ7XG4gICAgICAgIH1cblxuICAgICAgICBjdHg/LmRyYXdJbWFnZShpbWcsIDAsIDAsIGNhbnZhcy53aWR0aCwgY2FudmFzLmhlaWdodCk7XG4gICAgICAgIGxldCB0eXBlOiBzdHJpbmcgPSBpbnB1dD8uZGF0YVR5cGUgPz8gJ3dlYnAnO1xuICAgICAgICBjb25zdCBkYXRhVVJJOiBzdHJpbmcgPSBjYW52YXMudG9EYXRhVVJMKGBpbWFnZS8ke3R5cGV9YCwgcXVhbGl0eSk7XG4gICAgICAgIHJlc29sdmUoe1xuICAgICAgICAgIGRhdGFVcmk6IGRhdGFVUkksXG4gICAgICAgICAgd2lkdGg6IGNhbnZhcy53aWR0aCxcbiAgICAgICAgICBoZWlnaHQ6IGNhbnZhcy5oZWlnaHQsXG4gICAgICAgIH0pO1xuICAgICAgfTtcbiAgICB9KS50aGVuKChkYXRhOiBhbnkpID0+IHtcbiAgICAgIHRoaXMubWF4SGVpZ2h0ID0gZGF0YT8uaGVpZ2h0O1xuICAgICAgdGhpcy5tYXhXaWR0aCA9IGRhdGE/LndpZHRoO1xuICAgICAgaWYgKHRoaXMuYXJyYXlDb3BpZWRJbWFnZXM/Lmxlbmd0aCA8PSAyMCkge1xuICAgICAgICB0aGlzLmFycmF5Q29waWVkSW1hZ2VzLnB1c2goe1xuICAgICAgICAgIGxhc3RJbWFnZTogZGF0YT8uZGF0YVVyaSxcbiAgICAgICAgICB3aWR0aDogdGhpcy5tYXhXaWR0aCxcbiAgICAgICAgICBoZWlnaHQ6IHRoaXMubWF4SGVpZ2h0LFxuICAgICAgICAgIHF1YWxpdHk6IHRoaXMucXVhbGl0eS52YWx1ZSxcbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBkYXRhLmRhdGFVcmk7XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIHdhaXQobXM/OiBudW1iZXIgfCB1bmRlZmluZWQpOiBQcm9taXNlPGFueT4ge1xuICAgIG1zID0gbXMgPz8gMTAwMDtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpOiB2b2lkID0+IHtcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICByZXR1cm4gcmVzb2x2ZSh0cnVlKTtcbiAgICAgIH0sIG1zKTtcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgZHJhZ0VsZW1lbnQoZWxlbWVudDogSFRNTEVsZW1lbnQpOiB2b2lkIHtcbiAgICBsZXQgcG9zMTogbnVtYmVyID0gMCwgcG9zMjogbnVtYmVyID0gMCwgcG9zMzogbnVtYmVyID0gMCwgcG9zNDogbnVtYmVyID0gMDtcblxuICAgIGxldCBlbDogSFRNTEVsZW1lbnQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChlbGVtZW50LmlkICsgJy1oZWFkZXInKTtcbiAgICBpZiAoZWwpIHtcbiAgICAgIGVsLm9ubW91c2Vkb3duID0gZHJhZ01vdXNlRG93bjtcbiAgICAgIGVsLm9udG91Y2hzdGFydCA9IGRyYWdNb3VzZURvd247XG4gICAgfSBlbHNlIHtcbiAgICAgIGVsZW1lbnQub25tb3VzZWRvd24gPSBkcmFnTW91c2VEb3duO1xuICAgICAgZWxlbWVudC5vbnRvdWNoc3RhcnQgPSBkcmFnTW91c2VEb3duO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGRyYWdNb3VzZURvd24oZTogYW55KTogdm9pZCB7XG4gICAgICBlID0gZSB8fCB3aW5kb3cuZXZlbnQ7XG4gICAgICBlPy5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgcG9zMyA9IGU/LmNsaWVudFg7XG4gICAgICBwb3M0ID0gZT8uY2xpZW50WTtcbiAgICAgIGRvY3VtZW50Lm9ubW91c2V1cCA9IGNsb3NlRHJhZ0VsZW1lbnQ7XG4gICAgICBkb2N1bWVudC5vbnRvdWNoZW5kID0gY2xvc2VEcmFnRWxlbWVudDtcbiAgICAgIGRvY3VtZW50Lm9ubW91c2Vtb3ZlID0gZWxlbWVudERyYWc7XG4gICAgICBkb2N1bWVudC5vbnRvdWNobW92ZSA9IGVsZW1lbnREcmFnO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGVsZW1lbnREcmFnKGU6IGFueSk6IHZvaWQge1xuICAgICAgbGV0IGhvbGRlckltYWdlOiBhbnkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnaW1hZ2UtZnVsbCcpO1xuICAgICAgZSA9IGUgfHwgd2luZG93LmV2ZW50O1xuICAgICAgZT8ucHJldmVudERlZmF1bHQoKTtcbiAgICAgIHBvczEgPSBwb3MzIC0gZT8uY2xpZW50WDtcbiAgICAgIHBvczIgPSBwb3M0IC0gZT8uY2xpZW50WTtcbiAgICAgIHBvczMgPSBlPy5jbGllbnRYO1xuICAgICAgcG9zNCA9IGU/LmNsaWVudFk7XG5cbiAgICAgIGNvbnN0IG5ld1RvcDogbnVtYmVyID0gZWxlbWVudC5vZmZzZXRUb3AgLSBwb3MyO1xuICAgICAgY29uc3QgbmV3TGVmdDogbnVtYmVyID0gZWxlbWVudC5vZmZzZXRMZWZ0IC0gcG9zMTtcbiAgICAgIGNvbnN0IHJlY3RIb2xkZXIgPSBob2xkZXJJbWFnZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICAgIGNvbnN0IHJlY3RFbGVtZW50OiBET01SZWN0ID0gZWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICAgIGlmIChuZXdUb3AgPj0gcmVjdEhvbGRlci55ICsgOCkge1xuICAgICAgICBlbGVtZW50LnN0eWxlLnRvcCA9IE1hdGgubWluKG5ld1RvcCwgcmVjdEhvbGRlci55ICsgcmVjdEhvbGRlci5oZWlnaHQgLSByZWN0RWxlbWVudC5oZWlnaHQgLSA0KSArICdweCc7XG4gICAgICB9XG4gICAgICBpZiAobmV3TGVmdCA+IHJlY3RIb2xkZXIueCArIDQgJiYgcmVjdEhvbGRlci54ICsgcmVjdEhvbGRlci53aWR0aCA+IHJlY3RFbGVtZW50LnggKyByZWN0RWxlbWVudC53aWR0aCArIDIpIHtcbiAgICAgICAgZWxlbWVudC5zdHlsZS5sZWZ0ID0gTWF0aC5taW4obmV3TGVmdCwgcmVjdEhvbGRlci54ICsgcmVjdEhvbGRlci53aWR0aCAtIHJlY3RFbGVtZW50LndpZHRoIC0gNCkgKyAncHgnO1xuICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNsb3NlRHJhZ0VsZW1lbnQoKTogdm9pZCB7XG4gICAgICBkb2N1bWVudC5vbm1vdXNldXAgPSBudWxsO1xuICAgICAgZG9jdW1lbnQub25tb3VzZW1vdmUgPSBudWxsO1xuICAgICAgZG9jdW1lbnQub250b3VjaGVuZCA9IG51bGw7XG4gICAgICBkb2N1bWVudC5vbnRvdWNobW92ZSA9IG51bGw7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIG9uVXBsb2FkKGV2ZW50OiB7IHByZXZlbnREZWZhdWx0OiAoKSA9PiB2b2lkOyB9KTogdm9pZCB7XG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICB0aGlzLmltYWdlUGlja2VyPy5uYXRpdmVFbGVtZW50LmNsaWNrKCk7XG4gIH1cblxuICBwdWJsaWMgaGFuZGxlRmlsZVNlbGVjdChldnQ6IGFueSk6IHZvaWQge1xuICAgIGNvbnN0IGZpbGVzID0gZXZ0Py50YXJnZXQ/LmZpbGVzO1xuICAgIGlmIChmaWxlcykge1xuICAgICAgY29uc3QgZmlsZSA9IGZpbGVzWzBdO1xuICAgICAgdGhpcy5pbWFnZU5hbWUuc2V0KGZpbGU/Lm5hbWU/LnNwbGl0KCcuJylbMF0pO1xuICAgICAgdGhpcy5maWxlVHlwZSA9IGZpbGU/LnR5cGU7XG4gICAgICB0aGlzLnVybEltYWdlID0gYGRhdGE6JHtmaWxlPy50eXBlfTtiYXNlNjQsYDtcbiAgICAgIHRoaXMubm9FZGl0LnNldChmYWxzZSk7XG5cbiAgICAgIGlmIChmaWxlcyAmJiBmaWxlKSB7XG4gICAgICAgIGNvbnN0IHJlYWRlcjogYW55ID0gbmV3IEZpbGVSZWFkZXIoKTtcbiAgICAgICAgcmVhZGVyLm9ubG9hZCA9IHRoaXMuaGFuZGxlUmVhZGVyTG9hZGVkLmJpbmQodGhpcyk7XG4gICAgICAgIHJlYWRlci5yZWFkQXNCaW5hcnlTdHJpbmcoZmlsZSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHVibGljIG9uQ2xvc2VFZGl0UGFuZWwoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMub2JzZXJ2ZXIgaW5zdGFuY2VvZiBSZXNpemVPYnNlcnZlcikge1xuICAgICAgbGV0IGltYWdlQ3JvcHBlcjogYW55ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2ltYWdlLWNyb3BwZXInKTtcbiAgICAgIGxldCBpbWFnZUZ1bGw6IGFueSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdpbWFnZS1mdWxsJyk7XG4gICAgICB0aGlzLm9ic2VydmVyLnVub2JzZXJ2ZShpbWFnZUNyb3BwZXIpO1xuICAgICAgdGhpcy5vYnNlcnZlci51bm9ic2VydmUoaW1hZ2VGdWxsKTtcbiAgICB9XG4gICAgdGhpcy5zaG93Q3JvcC5zZXRWYWx1ZShmYWxzZSk7XG4gICAgdGhpcy5zaG93RWRpdFBhbmVsLnNldChmYWxzZSk7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgb25DaGFuZ2VRdWFsaXR5KCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IHF1YWxpdHlJdGVtOiBudW1iZXIgPSB0aGlzLnF1YWxpdHkudmFsdWUgLyAxMDA7XG4gICAgdGhpcy5tYXhIZWlnaHQuc2V0KHRoaXMubWF4SGVpZ2h0KCkgPz8gMjAwMCk7XG4gICAgdGhpcy5tYXhXaWR0aC5zZXQodGhpcy5tYXhXaWR0aCgpID8/IDIwMDApO1xuXG4gICAgYXdhaXQgdGhpcy53YWl0KDI1MCk7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGlucHV0OiBJbWFnZUNvbnZlcnRlcklucHV0ID0ge1xuICAgICAgICBoZWlnaHQ6IHRoaXMubWF4SGVpZ2h0KCksXG4gICAgICAgIHdpZHRoOiB0aGlzLm1heFdpZHRoKCksXG4gICAgICAgIGRhdGFUeXBlOiB0aGlzLmZvcm1hdC52YWx1ZSxcbiAgICAgICAgcXVhbGl0eTogcXVhbGl0eUl0ZW0sXG4gICAgICAgIG1haW50YWluUmF0aW86IHRoaXMubWFpbnRhaW5Bc3BlY3RSYXRpby52YWx1ZSxcbiAgICAgIH07XG5cbiAgICAgIHRoaXMuaW1hZ2VTcmMuc2V0KGF3YWl0IHRoaXMucmVzaXplRGF0YVVSTCh0aGlzLm9yaWdpbkltYWdlU3JjLCBpbnB1dCkpO1xuICAgICAgdGhpcy4kaW1hZ2VDaGFuZ2VkLm5leHQodGhpcy5pbWFnZVNyYygpKTtcbiAgICAgIHRoaXMubG9hZEltYWdlLnNldCh0cnVlKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgdGhpcy5sb2FkSW1hZ2Uuc2V0KHRydWUpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBvbkNoYW5nZUZvcm1hdCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBsZXQgcXVhbGl0eUl0ZW06IG51bWJlciA9IHRoaXMucXVhbGl0eS52YWx1ZSAvIDEwMDtcbiAgICB0aGlzLm1heEhlaWdodC5zZXQodGhpcy5tYXhIZWlnaHQoKSA/PyAyMDAwKTtcbiAgICB0aGlzLm1heFdpZHRoLnNldCh0aGlzLm1heFdpZHRoKCkgPz8gMjAwMCk7XG5cbiAgICBhd2FpdCB0aGlzLndhaXQoMjUwKTtcbiAgICB0cnkge1xuICAgICAgbGV0IGlucHV0OiBJbWFnZUNvbnZlcnRlcklucHV0ID0ge1xuICAgICAgICBoZWlnaHQ6IHRoaXMubWF4SGVpZ2h0KCksXG4gICAgICAgIHdpZHRoOiB0aGlzLm1heFdpZHRoKCksXG4gICAgICAgIGRhdGFUeXBlOiB0aGlzLmZvcm1hdC52YWx1ZSxcbiAgICAgICAgcXVhbGl0eTogcXVhbGl0eUl0ZW0sXG4gICAgICAgIG1haW50YWluUmF0aW86IHRoaXMubWFpbnRhaW5Bc3BlY3RSYXRpby52YWx1ZSxcbiAgICAgIH07XG4gICAgICB0aGlzLmltYWdlU3JjLnNldChhd2FpdCB0aGlzLnJlc2l6ZURhdGFVUkwodGhpcy5vcmlnaW5JbWFnZVNyYywgaW5wdXQpKTtcbiAgICAgIHRoaXMuJGltYWdlQ2hhbmdlZC5uZXh0KHRoaXMuaW1hZ2VTcmMoKSk7XG4gICAgICB0aGlzLmxvYWRJbWFnZS5zZXQodHJ1ZSk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIHRoaXMubG9hZEltYWdlLnNldCh0cnVlKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgb25DaGFuZ2VTaXplKGNoYW5nZVdpZHRoPzogYW55LCBjaGFuZ2VIZWlnaHQ/OiBhbnkpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBsZXQgcXVhbGl0eUl0ZW06IG51bWJlciA9IHRoaXMucXVhbGl0eS52YWx1ZSAvIDEwMDtcbiAgICB0aGlzLm1heEhlaWdodC5zZXQodGhpcy5tYXhIZWlnaHQoKSA/PyAyMDAwKTtcbiAgICB0aGlzLm1heFdpZHRoLnNldCh0aGlzLm1heFdpZHRoKCkgPz8gMjAwMCk7XG5cbiAgICBhd2FpdCB0aGlzLndhaXQoNTAwKTtcblxuICAgIHRyeSB7XG4gICAgICBsZXQgaW5wdXQ6IEltYWdlQ29udmVydGVySW5wdXQgPSB7XG4gICAgICAgIGhlaWdodDogdGhpcy5tYXhIZWlnaHQoKSxcbiAgICAgICAgd2lkdGg6IHRoaXMubWF4V2lkdGgoKSxcbiAgICAgICAgZGF0YVR5cGU6IHRoaXMuZm9ybWF0LnZhbHVlLFxuICAgICAgICBxdWFsaXR5OiBxdWFsaXR5SXRlbSxcbiAgICAgICAgbWFpbnRhaW5SYXRpbzogdGhpcy5tYWludGFpbkFzcGVjdFJhdGlvLnZhbHVlLFxuICAgICAgICBjaGFuZ2VIZWlnaHQ6IGNoYW5nZUhlaWdodCxcbiAgICAgICAgY2hhbmdlV2lkdGg6IGNoYW5nZVdpZHRoLFxuICAgICAgfTtcbiAgICAgIHRoaXMuaW1hZ2VTcmMuc2V0KGF3YWl0IHRoaXMucmVzaXplRGF0YVVSTCh0aGlzLm9yaWdpbkltYWdlU3JjLCBpbnB1dCkpO1xuICAgICAgdGhpcy4kaW1hZ2VDaGFuZ2VkLm5leHQodGhpcy5pbWFnZVNyYygpKTtcbiAgICAgIHRoaXMubG9hZEltYWdlLnNldCh0cnVlKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgdGhpcy5sb2FkSW1hZ2Uuc2V0KHRydWUpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBvbkNoYW5nZUNyb3AoKTogdm9pZCB7XG4gICAgY29uc3QgY3JvcHBlcjogYW55ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2ltYWdlLWNyb3BwZXInKTtcbiAgICBjcm9wcGVyLnN0eWxlLndpZHRoID0gdGhpcy5jcm9wV2lkdGgudmFsdWUgKyAncHgnO1xuICAgIGNyb3BwZXIuc3R5bGUuaGVpZ2h0ID0gdGhpcy5jcm9wSGVpZ2h0LnZhbHVlICsgJ3B4JztcbiAgfVxuXG4gIHB1YmxpYyBvbkNyb3BTdGF0ZUNoYW5nZSgpOiB2b2lkIHtcbiAgICBjb25zdCBjcm9wcGVyOiBIVE1MRWxlbWVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdpbWFnZS1jcm9wcGVyJyk7XG4gICAgY29uc3QgZnVsbEltYWdlOiBIVE1MRWxlbWVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdpbWFnZS1mdWxsJyk7XG4gICAgY29uc3QgYXNwZWN0UmF0aW86IG51bWJlciA9IGZ1bGxJbWFnZS5vZmZzZXRXaWR0aCAvIGZ1bGxJbWFnZS5vZmZzZXRIZWlnaHQ7XG5cbiAgICBpZiAodGhpcy5zaG93Q3JvcC52YWx1ZSkge1xuICAgICAgY3JvcHBlci5zdHlsZS5vcGFjaXR5ID0gJzEuMCc7XG4gICAgICB0aGlzLmRyYWdFbGVtZW50KGNyb3BwZXIpO1xuICAgICAgdGhpcy5vYnNlcnZlciA9IG5ldyBSZXNpemVPYnNlcnZlcigoZW50cmllczogUmVzaXplT2JzZXJ2ZXJFbnRyeVtdKTogdm9pZCA9PiB7XG4gICAgICAgIGVudHJpZXMuZm9yRWFjaCgoZW50cnk6IFJlc2l6ZU9ic2VydmVyRW50cnkpOiB2b2lkID0+IHtcbiAgICAgICAgICBpZiAodGhpcy5zaG93RWRpdFBhbmVsKCkpIHtcbiAgICAgICAgICAgIGNvbnN0IGVsZW1lbnRDcm9wcGVyOiBIVE1MRWxlbWVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdpbWFnZS1jcm9wcGVyJyk7XG4gICAgICAgICAgICBjb25zdCBlbGVtZW50RnVsbDogSFRNTEVsZW1lbnQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnaW1hZ2UtZnVsbCcpO1xuXG4gICAgICAgICAgICBjb25zdCByZWN0SG9sZGVyOiBET01SZWN0ID0gZWxlbWVudEZ1bGwuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgICAgICAgICBjb25zdCByZWN0RWxlbWVudDogRE9NUmVjdCA9IGVsZW1lbnRDcm9wcGVyLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuXG4gICAgICAgICAgICBjb25zdCBtYXhXaWR0aDogbnVtYmVyID0gcmVjdEhvbGRlci54ICsgcmVjdEhvbGRlci53aWR0aCAtIHJlY3RFbGVtZW50LnggLSA0O1xuICAgICAgICAgICAgY29uc3QgbWF4SGVpZ2h0OiBudW1iZXIgPSByZWN0SG9sZGVyLnkgKyByZWN0SG9sZGVyLmhlaWdodCAtIHJlY3RFbGVtZW50LnkgLSA0O1xuXG4gICAgICAgICAgICAvLyBPYnRlbmVyIGVsIHRhbWHDsW8gZGVsIMOhcmVhIGRlIHJlY29ydGUgc2VsZWNjaW9uYWRhIHBvciBlbCB1c3VhcmlvXG4gICAgICAgICAgICBjb25zdCBjcm9wV2lkdGg6IG51bWJlciA9IGVsZW1lbnRDcm9wcGVyLm9mZnNldFdpZHRoO1xuICAgICAgICAgICAgY29uc3QgY3JvcEhlaWdodDogbnVtYmVyID0gZWxlbWVudENyb3BwZXIub2Zmc2V0SGVpZ2h0O1xuXG4gICAgICAgICAgICAvLyBDYWxjdWxhciBlbCBhbmNobyB5IGVsIGFsdG8gZGVsIMOhcmVhIGRlIHJlY29ydGUgbWFudGVuaWVuZG8gbGEgcmVsYWNpw7NuIGRlIGFzcGVjdG8gZGUgbGEgaW1hZ2VuIG9yaWdpbmFsXG4gICAgICAgICAgICBsZXQgbmV3V2lkdGg6IG51bWJlciA9IGNyb3BXaWR0aDtcbiAgICAgICAgICAgIGxldCBuZXdIZWlnaHQ6IG51bWJlciA9IGNyb3BIZWlnaHQ7XG5cbiAgICAgICAgICAgIGlmICh0aGlzLm1haW50YWluQXNwZWN0UmF0aW8udmFsdWUpIHtcbiAgICAgICAgICAgICAgaWYgKGNyb3BXaWR0aCAvIGNyb3BIZWlnaHQgPiBhc3BlY3RSYXRpbykge1xuICAgICAgICAgICAgICAgIG5ld0hlaWdodCA9IGNyb3BXaWR0aCAvIGFzcGVjdFJhdGlvO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIG5ld1dpZHRoID0gY3JvcEhlaWdodCAqIGFzcGVjdFJhdGlvO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIEFqdXN0YXIgZWwgYW5jaG8geSBlbCBhbHRvIGRlbCDDoXJlYSBkZSByZWNvcnRlIHNpIHN1cGVyYSBsb3MgbMOtbWl0ZXNcbiAgICAgICAgICAgIG5ld1dpZHRoID0gTWF0aC5taW4obmV3V2lkdGgsIG1heFdpZHRoKTtcbiAgICAgICAgICAgIG5ld0hlaWdodCA9IE1hdGgubWluKG5ld0hlaWdodCwgbWF4SGVpZ2h0KTtcblxuICAgICAgICAgICAgLy8gRXN0YWJsZWNlciBlbCB0YW1hw7FvIHkgbGEgcG9zaWNpw7NuIGRlbCDDoXJlYSBkZSByZWNvcnRlXG4gICAgICAgICAgICBlbGVtZW50Q3JvcHBlci5zdHlsZS53aWR0aCA9IGAke25ld1dpZHRofXB4YDtcbiAgICAgICAgICAgIGVsZW1lbnRDcm9wcGVyLnN0eWxlLmhlaWdodCA9IGAke25ld0hlaWdodH1weGA7XG5cbiAgICAgICAgICAgIHRoaXMuY3JvcFdpZHRoLnNldFZhbHVlKHJlY3RFbGVtZW50LndpZHRoKTtcbiAgICAgICAgICAgIHRoaXMuY3JvcEhlaWdodC5zZXRWYWx1ZShyZWN0RWxlbWVudC5oZWlnaHQpO1xuXG4gICAgICAgICAgICBpZiAoZW50cnkudGFyZ2V0LmlkID09ICdpbWFnZS1mdWxsJykge1xuICAgICAgICAgICAgICBpZiAocmVjdEhvbGRlci50b3AgPiAwKSB7XG4gICAgICAgICAgICAgICAgZWxlbWVudENyb3BwZXIuc3R5bGUudG9wID0gcmVjdEhvbGRlci50b3AgKyA0ICsgJ3B4JztcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBlbGVtZW50Q3JvcHBlci5zdHlsZS5sZWZ0ID0gcmVjdEhvbGRlci5sZWZ0ICsgNCArICdweCc7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgICAgdGhpcy5vYnNlcnZlci5vYnNlcnZlKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdpbWFnZS1jcm9wcGVyJykpO1xuICAgICAgdGhpcy5vYnNlcnZlci5vYnNlcnZlKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdpbWFnZS1mdWxsJykpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjcm9wcGVyLnN0eWxlLm9wYWNpdHkgPSAnMC4wJztcbiAgICAgIGlmICh0aGlzLm9ic2VydmVyIGluc3RhbmNlb2YgUmVzaXplT2JzZXJ2ZXIpIHtcbiAgICAgICAgY29uc3QgZWxlbWVudENyb3BwZXI6IEhUTUxFbGVtZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2ltYWdlLWNyb3BwZXInKTtcbiAgICAgICAgY29uc3QgZWxlbWVudEZ1bGw6IEhUTUxFbGVtZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2ltYWdlLWZ1bGwnKTtcbiAgICAgICAgdGhpcy5vYnNlcnZlci51bm9ic2VydmUoZWxlbWVudENyb3BwZXIpO1xuICAgICAgICB0aGlzLm9ic2VydmVyLnVub2JzZXJ2ZShlbGVtZW50RnVsbCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHVibGljIG9uQ3JvcCh0eXBlPzogYW55KTogdm9pZCB7XG4gICAgdHlwZSA9IHR5cGUgPz8gdGhpcy5mb3JtYXQudmFsdWU7XG4gICAgY29uc3QgY3JvcHBlcjogSFRNTEVsZW1lbnQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnaW1hZ2UtY3JvcHBlcicpO1xuICAgIGNvbnN0IGVsZW1lbnRGdWxsOiBIVE1MRWxlbWVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdpbWFnZS1mdWxsJyk7XG4gICAgY29uc3QgcmVjdENyb3BwZXI6IERPTVJlY3QgPSBjcm9wcGVyLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgIGNvbnN0IGRhdGFIb2xkZXJSZWN0OiBET01SZWN0ID0gZWxlbWVudEZ1bGwuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgY29uc3QgY2FudmFzOiBIVE1MQ2FudmFzRWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2NhbnZhcycpO1xuICAgIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpOiB2b2lkID0+IHtcbiAgICAgIGxldCBjdHg6IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRCB8IG51bGwgPSBjYW52YXMuZ2V0Q29udGV4dCgnMmQnKTtcbiAgICAgIGxldCBpbWFnZTogSFRNTEltYWdlRWxlbWVudCA9IG5ldyBJbWFnZSgpO1xuICAgICAgaW1hZ2Uuc3JjID0gdGhpcy5pbWFnZVNyYygpO1xuICAgICAgaW1hZ2Uub25sb2FkID0gKCk6IHZvaWQgPT4ge1xuICAgICAgICBsZXQgcmF0aW86IG51bWJlciA9IGltYWdlLmhlaWdodCAvIGRhdGFIb2xkZXJSZWN0LmhlaWdodDtcbiAgICAgICAgbGV0IG5ld1dpZHRoOiBudW1iZXIgPSByZWN0Q3JvcHBlci53aWR0aCAqIHJhdGlvO1xuICAgICAgICBsZXQgbmV3SGVpZ2h0OiBudW1iZXIgPSByZWN0Q3JvcHBlci5oZWlnaHQgKiByYXRpbztcbiAgICAgICAgY2FudmFzLndpZHRoID0gbmV3V2lkdGg7XG4gICAgICAgIGNhbnZhcy5oZWlnaHQgPSBuZXdIZWlnaHQ7XG4gICAgICAgIGN0eD8uZHJhd0ltYWdlKFxuICAgICAgICAgIGltYWdlLFxuICAgICAgICAgIE1hdGguYWJzKHJlY3RDcm9wcGVyLnggKiByYXRpbykgLSBNYXRoLmFicyhkYXRhSG9sZGVyUmVjdC54ICogcmF0aW8pLFxuICAgICAgICAgIE1hdGguYWJzKHJlY3RDcm9wcGVyLnkgKiByYXRpbykgLSBNYXRoLmFicyhkYXRhSG9sZGVyUmVjdC55ICogcmF0aW8pLFxuICAgICAgICAgIG5ld1dpZHRoLFxuICAgICAgICAgIG5ld0hlaWdodCxcbiAgICAgICAgICAwLFxuICAgICAgICAgIDAsXG4gICAgICAgICAgbmV3V2lkdGgsXG4gICAgICAgICAgbmV3SGVpZ2h0LFxuICAgICAgICApO1xuXG4gICAgICAgIHJlc29sdmUoY2FudmFzLnRvRGF0YVVSTChgaW1hZ2UvJHt0eXBlfWAsIHRoaXMucXVhbGl0eS52YWx1ZSkpO1xuICAgICAgfTtcbiAgICAgIGltYWdlLm9uZXJyb3IgPSAoZTogc3RyaW5nIHwgRXZlbnQpOiB2b2lkID0+IHtcbiAgICAgICAgcmVqZWN0KGUpO1xuICAgICAgfTtcbiAgICB9KVxuICAgICAgLnRoZW4oKGRhdGFVcmk6IGFueSk6IHZvaWQgPT4ge1xuICAgICAgICB0aGlzLmltYWdlU3JjLnNldChkYXRhVXJpKTtcbiAgICAgICAgdGhpcy5zaG93Q3JvcC5zZXRWYWx1ZShmYWxzZSk7XG4gICAgICAgIHRoaXMub25Dcm9wU3RhdGVDaGFuZ2UoKTtcbiAgICAgICAgdGhpcy5tYXhXaWR0aC5zZXQoY2FudmFzPy53aWR0aCk7XG4gICAgICAgIHRoaXMubWF4SGVpZ2h0LnNldChjYW52YXM/LmhlaWdodCk7XG4gICAgICAgIHRoaXMubGFzdE9yaWdpblNyYyA9IHRoaXMub3JpZ2luSW1hZ2VTcmMgKyAnJztcbiAgICAgICAgdGhpcy5vcmlnaW5JbWFnZVNyYyA9IGRhdGFVcmk7XG4gICAgICAgIHRoaXMuJGltYWdlQ2hhbmdlZC5uZXh0KHRoaXMuaW1hZ2VTcmMoKSk7XG4gICAgICB9KVxuICAgICAgLmNhdGNoKChlKTogdm9pZCA9PiB7XG4gICAgICAgIGNvbnNvbGUubG9nKGUpO1xuICAgICAgfSk7XG4gIH1cblxuICBwdWJsaWMgb25SZXN0b3JlKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmFycmF5Q29waWVkSW1hZ2VzLmxlbmd0aCkge1xuICAgICAgbGV0IGxhc3RTdGF0ZSA9IHRoaXMuYXJyYXlDb3BpZWRJbWFnZXMucG9wKCk7XG4gICAgICB0aGlzLmltYWdlU3JjLnNldChsYXN0U3RhdGUubGFzdEltYWdlKTtcbiAgICAgIHRoaXMubWF4V2lkdGguc2V0KGxhc3RTdGF0ZS53aWR0aCk7XG4gICAgICB0aGlzLm1heEhlaWdodC5zZXQobGFzdFN0YXRlLmhlaWdodCk7XG4gICAgICB0aGlzLm9yaWdpbkltYWdlU3JjID0gdGhpcy5sYXN0T3JpZ2luU3JjICsgJyc7XG4gICAgICB0aGlzLm5vRWRpdC5zZXQoZmFsc2UpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmltYWdlU3JjLnNldCh0aGlzLmxhc3RPcmlnaW5TcmMpO1xuICAgICAgdGhpcy5vcmlnaW5JbWFnZVNyYyA9IHRoaXMubGFzdE9yaWdpblNyYyArICcnO1xuICAgICAgdGhpcy5ub0VkaXQuc2V0KGZhbHNlKTtcbiAgICB9XG5cbiAgICB0aGlzLiRpbWFnZUNoYW5nZWQubmV4dCh0aGlzLmltYWdlU3JjKCkpO1xuICB9XG5cbiAgcHVibGljIG9uUmVtb3ZlKCk6IHZvaWQge1xuICAgIHRoaXMuaW1hZ2VTcmMuc2V0KG51bGwpO1xuICAgIHRoaXMub3JpZ2luSW1hZ2VTcmMgPSBudWxsO1xuICAgIHRoaXMubG9hZEltYWdlLnNldChmYWxzZSk7XG4gICAgdGhpcy5hcnJheUNvcGllZEltYWdlcyA9IFtdO1xuICAgIHRoaXMubGFzdE9yaWdpblNyYyA9IG51bGw7XG4gICAgdGhpcy4kaW1hZ2VPcmlnaW5hbC5uZXh0KG51bGwpO1xuICAgIHRoaXMuJGltYWdlQ2hhbmdlZC5uZXh0KG51bGwpO1xuICAgIHRoaXMuZm9ybWF0LnNldFZhbHVlKCdqcGVnJyk7XG4gICAgdGhpcy5tYXhIZWlnaHQuc2V0KDIwMDApO1xuICAgIHRoaXMubWF4V2lkdGguc2V0KDIwMDApO1xuICAgIHRoaXMuY3JvcEhlaWdodC5zZXRWYWx1ZSgxNTApO1xuICAgIHRoaXMuY3JvcFdpZHRoLnNldFZhbHVlKDE1MCk7XG4gICAgdGhpcy5tYWludGFpbkFzcGVjdFJhdGlvLnNldFZhbHVlKHRydWUpO1xuICAgIHRoaXMuc2hvd0VkaXRQYW5lbC5zZXQoZmFsc2UpO1xuICAgIHRoaXMubm9FZGl0LnNldChmYWxzZSk7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLnVuc3Vic2NyaWJlQWxsJC5uZXh0KCk7XG4gICAgdGhpcy51bnN1YnNjcmliZUFsbCQuY29tcGxldGUoKTtcbiAgfVxufVxuIiwiPGRpdiAqbmdJZj0nIWxvYWRJbWFnZSgpJyBjbGFzcz0ncGxhY2UtaW1hZ2UnPlxuICA8ZGl2IGNsYXNzPSdpbWFnZS1ob2xkZXInXG4gICAgICAgW25nU3R5bGVdPSd7IHdpZHRoOiBjb25maWcoKT8ud2lkdGgsaGVpZ2h0OiBjb25maWcoKT8uaGVpZ2h0LGJvcmRlclJhZGl1czogY29uZmlnKCk/LmJvcmRlclJhZGl1c30nPlxuICAgIDxidXR0b24gW21hdFRvb2x0aXBdPVwiJ1VQTE9BRF9BX0lNQUdFJyB8IGkxOG46IGNvbmZpZygpPy5sYW5ndWFnZVwiIGNsYXNzPSdpbWFnZS11cGxvYWQtYnRuJyBtYXQtaWNvbi1idXR0b25cbiAgICAgICAgICAgIChjbGljayk9J29uVXBsb2FkKCRldmVudCknPlxuICAgICAgPG1hdC1pY29uIGNsYXNzPSdtYXQtMTgnPmFkZF9hX3Bob3RvPC9tYXQtaWNvbj5cbiAgICA8L2J1dHRvbj5cbiAgICA8aW5wdXQgI2ltYWdlUGlja2VyIHR5cGU9J2ZpbGUnIGNsYXNzPSdkLW5vbmUnIFtpZF09XCInZmlsZVBpY2tlci0nICsgdXVpZEZpbGVQaWNrZXJcIlxuICAgICAgICAgICAoY2hhbmdlKT0naGFuZGxlRmlsZVNlbGVjdCgkZXZlbnQpJyBbYWNjZXB0XT0naW1hZ2VzQWxsb3dlZCc+XG4gIDwvZGl2PlxuPC9kaXY+XG5cbjxkaXYgKm5nSWY9J2xvYWRJbWFnZSgpJyBjbGFzcz0ncGxhY2UtaW1hZ2UnPlxuICA8ZGl2IGNsYXNzPSdpbWFnZS1ob2xkZXItbG9hZGVkJ1xuICAgICAgIFtuZ1N0eWxlXT0ne3dpZHRoOiBjb25maWcoKT8ud2lkdGgsaGVpZ2h0OiBjb25maWcoKT8uaGVpZ2h0LGJvcmRlclJhZGl1czogY29uZmlnKCk/LmJvcmRlclJhZGl1c30nPlxuICAgIDxpbWcgW3NyY109J2ltYWdlU3JjKCknIGFsdD0naW1hZ2UtbG9hZGVkJyBbbmdTdHlsZV09J3sgYm9yZGVyUmFkaXVzOiBjb25maWcoKT8uYm9yZGVyUmFkaXVzIH0nPlxuICAgIDxpbnB1dCAjaW1hZ2VQaWNrZXIgdHlwZT0nZmlsZScgY2xhc3M9J2Qtbm9uZScgW2lkXT1cIidmaWxlUGlja2VyLScgKyB1dWlkRmlsZVBpY2tlclwiXG4gICAgICAgICAgIChjaGFuZ2UpPSdoYW5kbGVGaWxlU2VsZWN0KCRldmVudCknIFthY2NlcHRdPSdpbWFnZXNBbGxvd2VkJz5cbiAgPC9kaXY+XG4gIDxwICpuZ0lmPSdpbWFnZVNyYygpPy5sZW5ndGgnIGNsYXNzPSdtYXQtY2FwdGlvbiBpbWFnZS1jYXB0aW9uJyBbY2xhc3Mud2Fybl09JyhpbWFnZVNyYygpPy5sZW5ndGggfCBjYWxjdWxhdGVTaXplKSA+IDIwMCdcbiAgICAgW2NsYXNzLmZ3LTYwMF09JyhpbWFnZVNyYygpPy5sZW5ndGggfCBjYWxjdWxhdGVTaXplKSA+IDIwMCc+XG4gICAge3tcIlNJWkVcIiB8IGkxOG46IGN1cnJlbnRMYW5ndWFnZSgpfX06IHt7IChpbWFnZVNyYygpPy5sZW5ndGggfCBjYWxjdWxhdGVTaXplKSB9fUtiICZuYnNwOyB7eyBmb3JtYXQudmFsdWUgfX1cbiAgPC9wPlxuXG4gIDxkaXYgY2xhc3M9J2VkaXRpbmctYmFyLWJ0bic+XG4gICAgPGJ1dHRvbiBpZD0ndXBsb2FkLWltZycgKm5nSWY9JyFjb25maWcoKT8uaGlkZUFkZEJ0bicgbWF0LWljb24tYnV0dG9uIChjbGljayk9J29uVXBsb2FkKCRldmVudCknXG4gICAgICAgICAgICBbbWF0VG9vbHRpcF09XCInVVBMT0FEX0FfSU1BR0UnIHwgaTE4bjogY29uZmlnKCk/Lmxhbmd1YWdlXCI+XG4gICAgICA8bWF0LWljb24gY2xhc3M9J21hdC0xOCc+YWRkX2FfcGhvdG88L21hdC1pY29uPlxuICAgIDwvYnV0dG9uPlxuICAgIDxidXR0b24gaWQ9J2VkaXQtaW1nJyAqbmdJZj0nIWNvbmZpZygpPy5oaWRlRWRpdEJ0biAmJiAhbm9FZGl0KCknIG1hdC1pY29uLWJ1dHRvbiAoY2xpY2spPSdzaG93RWRpdFBhbmVsLnNldCh0cnVlKSdcbiAgICAgICAgICAgIFttYXRUb29sdGlwXT1cIidPUEVOX0VESVRPUl9QQU5FTCcgfCBpMThuOiBjb25maWcoKT8ubGFuZ3VhZ2VcIj5cbiAgICAgIDxtYXQtaWNvbiBjbGFzcz0nbWF0LTE4Jz5lZGl0PC9tYXQtaWNvbj5cbiAgICA8L2J1dHRvbj5cbiAgICA8YSBpZD0nZG93bmxvYWQtaW1nJyAqbmdJZj0nIWNvbmZpZygpPy5oaWRlRG93bmxvYWRCdG4nIFttYXRUb29sdGlwXT1cIidET1dOTE9BRCcgfCBpMThuOiBjb25maWcoKT8ubGFuZ3VhZ2VcIlxuICAgICAgIFtocmVmXT0naW1hZ2VTcmMoKScgbWF0LWljb24tYnV0dG9uIFtkb3dubG9hZF09J2ltYWdlTmFtZSc+XG4gICAgICA8bWF0LWljb24gY2xhc3M9J21hdC0xOCc+Y2xvdWRfZG93bmxvYWQ8L21hdC1pY29uPlxuICAgIDwvYT5cbiAgICA8YnV0dG9uIGlkPSdkZWxldGUtaW1nJyAqbmdJZj0nIWNvbmZpZygpPy5oaWRlRGVsZXRlQnRuJyBtYXQtaWNvbi1idXR0b24gKGNsaWNrKT0nb25SZW1vdmUoKSdcbiAgICAgICAgICAgIFttYXRUb29sdGlwXT1cIidSRU1PVkUnIHwgaTE4bjogY29uZmlnKCk/Lmxhbmd1YWdlXCI+XG4gICAgICA8bWF0LWljb24gY2xhc3M9J21hdC0xOCc+ZGVsZXRlPC9tYXQtaWNvbj5cbiAgICA8L2J1dHRvbj5cbiAgPC9kaXY+XG48L2Rpdj5cblxuPGRpdiAqbmdJZj0nc2hvd0VkaXRQYW5lbCgpJyBpZD0ncG9wdXAnIGNsYXNzPSdwb3B1cCc+XG4gIDxkaXYgY2xhc3M9J3BvcHVwLWNsZWFyJz5cbiAgICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvbiAoY2xpY2spPSdvbkNsb3NlRWRpdFBhbmVsKCknPlxuICAgICAgPG1hdC1pY29uIGNsYXNzPSdtYXQtMTgnPmNsZWFyPC9tYXQtaWNvbj5cbiAgICA8L2J1dHRvbj5cbiAgPC9kaXY+XG5cbiAgPGRpdiBjbGFzcz0naW1hZ2UtY29udGFpbmVyJz5cbiAgICA8ZGl2IGNsYXNzPSdpbWFnZS1ob2xkZXItZnVsbCc+XG4gICAgICA8aW1nIGlkPSdpbWFnZS1mdWxsJyBbc3JjXT0naW1hZ2VTcmMoKScgYWx0PScnPlxuICAgICAgPGRpdiBpZD0naW1hZ2UtY3JvcHBlcicgY2xhc3M9J2ltYWdlLWNyb3BwZXInPlxuICAgICAgICA8ZGl2IGlkPSdpbWFnZS1jcm9wcGVyLWhlYWRlcic+XG4gICAgICAgICAgPG1hdC1pY29uPmRyYWdfaW5kaWNhdG9yPC9tYXQtaWNvbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cblxuICAgIDxkaXYgY2xhc3M9J2NvbnRyb2wtcGFuZWwnPlxuICAgICAgPHAgY2xhc3M9J2l0ZW0tcGFuZWwgZnctNjAwJz57eyAnUVVBTElUWScgfCBpMThuOiBjb25maWcoKT8ubGFuZ3VhZ2UgfX08L3A+XG4gICAgICA8ZGl2IGNsYXNzPSdxdWFsaXR5LWNvbnRhaW5lcic+XG4gICAgICAgIDxtYXQtc2xpZGVyIG5nRGVmYXVsdENvbnRyb2wgW2NvbG9yXT0nY29sb3InIGNsYXNzPSd3LTEwMCBtdy0xMDAnIChjaGFuZ2UpPSdvbkNoYW5nZVF1YWxpdHkoKSdcbiAgICAgICAgICAgICAgICAgICAgW21heF09JzEwMCcgW21pbl09JzAnIFtzdGVwXT0nMScgW2Rpc2NyZXRlXT0ndHJ1ZScgW3Nob3dUaWNrTWFya3NdPSd0cnVlJz5cbiAgICAgICAgICA8aW5wdXQgbWF0U2xpZGVyVGh1bWIgW2Zvcm1Db250cm9sXT0ncXVhbGl0eSc+XG4gICAgICAgIDwvbWF0LXNsaWRlcj5cbiAgICAgIDwvZGl2PlxuXG4gICAgICA8ZGl2IGNsYXNzPSdpdGVtLXBhbmVsJz5cbiAgICAgICAgPHNwYW4gY2xhc3M9J2Z3LTYwMCc+e3sgJ01BWF9ESU1FTlNJT05TJyB8IGkxOG46IGNvbmZpZygpPy5sYW5ndWFnZSB9fTwvc3Bhbj5cbiAgICAgICAgPG1hdC1jaGVja2JveCBjbGFzcz0nZmxvYXQtcmlnaHQnIFtmb3JtQ29udHJvbF09J21haW50YWluQXNwZWN0UmF0aW8nIFtjb2xvcl09J2NvbG9yJz5cbiAgICAgICAgICA8c3Bhbj57eyAnQVNQRUNUX1JBVElPJyB8IGkxOG46IGNvbmZpZygpPy5sYW5ndWFnZSB9fTwvc3Bhbj5cbiAgICAgICAgPC9tYXQtY2hlY2tib3g+XG4gICAgICA8L2Rpdj5cblxuICAgICAgPGRpdiBjbGFzcz0nbWF4LWRpbWVuc2lvbi1jb250YWluZXInPlxuICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9J3ctNDgnIFthcHBlYXJhbmNlXT0nYXBwZWFyYW5jZScgW2NvbG9yXT0nY29sb3InPlxuICAgICAgICAgIDxtYXQtbGFiZWw+e3sgJ01BWF9XSURUSF9QWCcgfCBpMThuOiBjb25maWcoKT8ubGFuZ3VhZ2UgfX08L21hdC1sYWJlbD5cbiAgICAgICAgICA8aW5wdXQgKGNoYW5nZSk9J29uQ2hhbmdlU2l6ZSh0cnVlLCBmYWxzZSknIG1hdElucHV0IFtwbGFjZWhvbGRlcl09XCInTUFYX1dJRFRIX1BYJyB8IGkxOG46IGNvbmZpZygpPy5sYW5ndWFnZVwiXG4gICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPSdtYXhXaWR0aCcgdHlwZT0nbnVtYmVyJyBbbWluXT0nMCcgW21heF09JzIwMDAnPlxuICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuXG4gICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0ndy00OCcgW2FwcGVhcmFuY2VdPSdhcHBlYXJhbmNlJyBbY29sb3JdPSdjb2xvcic+XG4gICAgICAgICAgPG1hdC1sYWJlbD57eyAnTUFYX0hFSUdIVF9QWCcgfCBpMThuOiBjb25maWcoKT8ubGFuZ3VhZ2UgfX08L21hdC1sYWJlbD5cbiAgICAgICAgICA8aW5wdXQgKGNoYW5nZSk9J29uQ2hhbmdlU2l6ZShmYWxzZSwgdHJ1ZSknIG1hdElucHV0IFtwbGFjZWhvbGRlcl09XCInTUFYX0hFSUdIVF9QWCcgfCBpMThuOiBjb25maWcoKT8ubGFuZ3VhZ2VcIlxuICAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT0nbWF4SGVpZ2h0JyB0eXBlPSdudW1iZXInIFttaW5dPScwJyBbbWF4XT0nMjAwMCc+XG4gICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICA8L2Rpdj5cblxuICAgICAgPHAgY2xhc3M9J2l0ZW0tcGFuZWwgZnctNjAwJz57eyAnRk9STUFUJyB8IGkxOG46IGNvbmZpZygpPy5sYW5ndWFnZSB9fTwvcD5cbiAgICAgIDxkaXYgY2xhc3M9J2Zvcm1hdHMtc2VsZWN0aW9uJz5cbiAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSd3LTEwMCBtdy0xMDAnIFthcHBlYXJhbmNlXT0nYXBwZWFyYW5jZScgW2NvbG9yXT0nY29sb3InPlxuICAgICAgICAgIDxtYXQtc2VsZWN0IFtmb3JtQ29udHJvbF09J2Zvcm1hdCcgKHNlbGVjdGlvbkNoYW5nZSk9J29uQ2hhbmdlRm9ybWF0KCknPlxuICAgICAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPSdsZXQgZm9ybWF0IG9mIGFsbEZvcm1hdHMnIFt2YWx1ZV09J2Zvcm1hdCc+XG4gICAgICAgICAgICAgIHt7IGZvcm1hdCB9fVxuICAgICAgICAgICAgPC9tYXQtb3B0aW9uPlxuICAgICAgICAgIDwvbWF0LXNlbGVjdD5cbiAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgIDwvZGl2PlxuXG4gICAgICA8ZGl2IGNsYXNzPSdyZWZyZXNoLWNvbnRhaW5lcic+XG4gICAgICAgIDxtYXQtY2hlY2tib3ggKGNoYW5nZSk9J29uQ3JvcFN0YXRlQ2hhbmdlKCknIFtmb3JtQ29udHJvbF09J3Nob3dDcm9wJyBbY29sb3JdPSdjb2xvcic+XG4gICAgICAgICAgPHAgY2xhc3M9J2l0ZW0tcGFuZWwgZnctNjAwJz57eyAnQ1JPUCcgfCBpMThuOiBjb25maWcoKT8ubGFuZ3VhZ2UgfX08L3A+XG4gICAgICAgIDwvbWF0LWNoZWNrYm94PlxuICAgICAgICA8ZGl2IGNsYXNzPSdkLWZsZXggJz5cbiAgICAgICAgICA8YnV0dG9uIGNsYXNzPSdmbG9hdC1yaWdodCcgbWF0LWljb24tYnV0dG9uIFtjb2xvcl09J2NvbG9yJyAoY2xpY2spPSdvblJlc3RvcmUoKSc+XG4gICAgICAgICAgICA8bWF0LWljb24+cmVmcmVzaDwvbWF0LWljb24+XG4gICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgPHAgKm5nSWY9J3Nob3dDcm9wLnZhbHVlJz5cbiAgICAgICAgICAgIDxidXR0b24gbWF0LWljb24tYnV0dG9uIFtjb2xvcl09J2NvbG9yJyAoY2xpY2spPSdvbkNyb3AoKSc+XG4gICAgICAgICAgICAgIDxtYXQtaWNvbj5jcm9wPC9tYXQtaWNvbj5cbiAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgIDwvcD5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cblxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj0nc2hvd0Nyb3AudmFsdWUnPlxuICAgICAgICA8ZGl2IGNsYXNzPSdkaW1lbnNpb24tY29udGFpbmVyJz5cbiAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9J3ctNDggbXctNDgnIFthcHBlYXJhbmNlXT0nYXBwZWFyYW5jZScgW2NvbG9yXT0nY29sb3InPlxuICAgICAgICAgICAgPG1hdC1sYWJlbD57eyAnV0lEVEhfUFgnIHwgaTE4bjogY29uZmlnKCk/Lmxhbmd1YWdlIH19PC9tYXQtbGFiZWw+XG4gICAgICAgICAgICA8aW5wdXQgKGNoYW5nZSk9J29uQ2hhbmdlQ3JvcCgpJyBtYXRJbnB1dCBbcGxhY2Vob2xkZXJdPVwiJ1dJRFRIX1BYJyB8IGkxOG46IGNvbmZpZygpPy5sYW5ndWFnZVwiXG4gICAgICAgICAgICAgICAgICAgW2Zvcm1Db250cm9sXT0nY3JvcFdpZHRoJyB0eXBlPSdudW1iZXInIFttaW5dPScwJyBbbWF4XT0nMjAwMCc+XG4gICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9J3ctNDggbXctNDgnIFthcHBlYXJhbmNlXT0nYXBwZWFyYW5jZScgW2NvbG9yXT0nY29sb3InPlxuICAgICAgICAgICAgPG1hdC1sYWJlbD57eyAnSEVJR0hUX1BYJyB8IGkxOG46IGNvbmZpZygpPy5sYW5ndWFnZSB9fTwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgPGlucHV0IChjaGFuZ2UpPSdvbkNoYW5nZUNyb3AoKScgbWF0SW5wdXQgW3BsYWNlaG9sZGVyXT1cIidIRUlHSFRfUFgnIHwgaTE4bjogY29uZmlnKCk/Lmxhbmd1YWdlXCJcbiAgICAgICAgICAgICAgICAgICBbZm9ybUNvbnRyb2xdPSdjcm9wSGVpZ2h0JyB0eXBlPSdudW1iZXInIFttaW5dPScwJyBbbWF4XT0nMjAwMCc+XG4gICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgPGRpdiBjbGFzcz0nc2F2ZS1jb250YWluZXInPlxuICAgICAgICA8YnV0dG9uIG1hdC1mbGF0LWJ1dHRvbiAoY2xpY2spPSdvbkNsb3NlRWRpdFBhbmVsKCknIFtjb2xvcl09J2NvbG9yJyBjbGFzcz0nc2F2ZS1idXR0b24nPlxuICAgICAgICAgIHt7ICdTQVZFJyB8IGkxOG46IGNvbmZpZygpPy5sYW5ndWFnZX19XG4gICAgICAgIDwvYnV0dG9uPlxuXG4gICAgICAgIDxwICpuZ0lmPSdpbWFnZVNyYygpPy5sZW5ndGgnIGNsYXNzPSdtYXQtY2FwdGlvbiBpbWFnZS1jYXB0aW9uJ1xuICAgICAgICAgICBbY2xhc3Mud2Fybl09JyhpbWFnZVNyYygpPy5sZW5ndGggfCBjYWxjdWxhdGVTaXplKSA+IDIwMCdcbiAgICAgICAgICAgW2NsYXNzLmZ3LTYwMF09JyhpbWFnZVNyYygpPy5sZW5ndGggfCBjYWxjdWxhdGVTaXplKSA+IDIwMCc+XG4gICAgICAgICAge3tcIlNJWkVcIiB8IGkxOG46IGN1cnJlbnRMYW5ndWFnZSgpfX06IHt7IChpbWFnZVNyYygpPy5sZW5ndGggfCBjYWxjdWxhdGVTaXplKSB9fUtiICZuYnNwOyB7eyBmb3JtYXQudmFsdWUgfX1cbiAgICAgICAgPC9wPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuPC9kaXY+XG4iXX0=
517
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3VhY2hvcy1pbWFnZS1waWNrZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvZ3VhY2hvcy1pbWFnZS1waWNrZXIvc3JjL2xpYi9ndWFjaG9zLWltYWdlLXBpY2tlci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi9wcm9qZWN0cy9ndWFjaG9zLWltYWdlLXBpY2tlci9zcmMvbGliL2d1YWNob3MtaW1hZ2UtcGlja2VyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCx1QkFBdUIsRUFDdkIsU0FBUyxFQUNULFVBQVUsRUFDVixZQUFZLEVBQ1osS0FBSyxFQUVMLE1BQU0sRUFDTixNQUFNLEVBQ04sU0FBUyxHQUVWLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUNqRCxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBRy9CLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLHNDQUFzQyxDQUFDO0FBQy9FLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUN2RCxPQUFPLEVBQUUsV0FBVyxFQUFFLG1CQUFtQixFQUFFLGtCQUFrQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDdEYsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDN0QsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDL0QsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQzNELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUMzRCxPQUFPLEVBQTBCLGtCQUFrQixFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDMUYsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FB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b25lbnQsXHJcbiAgRWxlbWVudFJlZixcclxuICBFdmVudEVtaXR0ZXIsXHJcbiAgSW5wdXQsXHJcbiAgT25EZXN0cm95LFxyXG4gIE91dHB1dCxcclxuICBzaWduYWwsXHJcbiAgVmlld0NoaWxkLFxyXG4gIFdyaXRhYmxlU2lnbmFsLFxyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBSZXNpemVPYnNlcnZlciB9IGZyb20gJ3Jlc2l6ZS1vYnNlcnZlcic7XHJcbmltcG9ydCB7IFN1YmplY3QgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgUmVzaXplT2JzZXJ2ZXJFbnRyeSB9IGZyb20gJ3Jlc2l6ZS1vYnNlcnZlci9saWIvUmVzaXplT2JzZXJ2ZXJFbnRyeSc7XHJcbmltcG9ydCB7IFRoZW1lUGFsZXR0ZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2NvcmUnO1xyXG5pbXBvcnQgeyBCcm93c2VyQW5pbWF0aW9uc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL3BsYXRmb3JtLWJyb3dzZXIvYW5pbWF0aW9ucyc7XHJcbmltcG9ydCB7IE1hdEljb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9pY29uJztcclxuaW1wb3J0IHsgRm9ybXNNb2R1bGUsIFJlYWN0aXZlRm9ybXNNb2R1bGUsIFVudHlwZWRGb3JtQ29udHJvbCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHsgTWF0VG9vbHRpcE1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3Rvb2x0aXAnO1xyXG5pbXBvcnQgeyBNYXRDaGVja2JveE1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2NoZWNrYm94JztcclxuaW1wb3J0IHsgTWF0U2xpZGVyTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvc2xpZGVyJztcclxuaW1wb3J0IHsgTWF0QnV0dG9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvYnV0dG9uJztcclxuaW1wb3J0IHsgTWF0Rm9ybUZpZWxkQXBwZWFyYW5jZSwgTWF0Rm9ybUZpZWxkTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZm9ybS1maWVsZCc7XHJcbmltcG9ydCB7IE1hdElucHV0TW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvaW5wdXQnO1xyXG5pbXBvcnQgeyBNYXRTZWxlY3RNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9zZWxlY3QnO1xyXG5cclxuaW1wb3J0IHsgUGlwZXNNb2R1bGUgfSBmcm9tICcuLi91dGlscy9waXBlcy9waXBlcy5tb2R1bGUnO1xyXG5cclxuZXhwb3J0IGludGVyZmFjZSBJbWFnZVBpY2tlckNvbmYge1xyXG4gIHdpZHRoPzogc3RyaW5nO1xyXG4gIGhlaWdodD86IHN0cmluZztcclxuICBib3JkZXJSYWRpdXM/OiBzdHJpbmc7XHJcbiAgY29tcHJlc3NJbml0aWFsPzogYm9vbGVhbjtcclxuICBsYW5ndWFnZT86IHN0cmluZztcclxuICBoaWRlRGVsZXRlQnRuPzogYm9vbGVhbjtcclxuICBoaWRlRG93bmxvYWRCdG4/OiBib29sZWFuO1xyXG4gIGhpZGVFZGl0QnRuPzogYm9vbGVhbjtcclxuICBoaWRlQWRkQnRuPzogYm9vbGVhbjtcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBJbWFnZUNvbnZlcnRlcklucHV0IHtcclxuICB3aWR0aD86IG51bWJlcjtcclxuICBoZWlnaHQ/OiBudW1iZXI7XHJcbiAgcXVhbGl0eT86IG51bWJlcjtcclxuICBkYXRhVHlwZT86IHN0cmluZztcclxuICBtYWludGFpblJhdGlvPzogYm9vbGVhbjtcclxuICBjaGFuZ2VIZWlnaHQ/OiBib29sZWFuO1xyXG4gIGNoYW5nZVdpZHRoPzogYm9vbGVhbjtcclxufVxyXG5cclxuZXhwb3J0IHR5cGUgSW1hZ2VBbGxvd2VkVHlwZXMgPVxyXG4gICdpbWFnZS8qJ1xyXG4gIHwgJy53ZWJwJ1xyXG4gIHwgJy5wbmcnXHJcbiAgfCAnLndlYnAsIC5qcGcsIC5qcGVnJ1xyXG4gIHwgJy53ZWJwLCAucG5nJ1xyXG4gIHwgJy5qcGcsIC5qcGVnJ1xyXG4gIHwgJy5wbmcsIC5qcGcsIC5qcGVnJ1xyXG4gIHwgJy53ZWJwLCAucG5nLCAuanBnLCAuanBlZyc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2d1YWppcml0b3MtaW1hZ2UtcGlja2VyJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vZ3VhY2hvcy1pbWFnZS1waWNrZXIuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL2d1YWNob3MtaW1hZ2UtcGlja2VyLmNvbXBvbmVudC5zY3NzJ10sXHJcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXHJcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcclxuICBpbXBvcnRzOiBbXHJcbiAgICBCcm93c2VyQW5pbWF0aW9uc01vZHVsZSxcclxuICAgIE1hdFRvb2x0aXBNb2R1bGUsXHJcbiAgICBNYXRJY29uTW9kdWxlLFxyXG4gICAgTWF0QnV0dG9uTW9kdWxlLFxyXG4gICAgTWF0Q2hlY2tib3hNb2R1bGUsXHJcbiAgICBNYXRTbGlkZXJNb2R1bGUsXHJcbiAgICBNYXRGb3JtRmllbGRNb2R1bGUsXHJcbiAgICBNYXRJbnB1dE1vZHVsZSxcclxuICAgIEZvcm1zTW9kdWxlLFxyXG4gICAgTWF0U2VsZWN0TW9kdWxlLFxyXG4gICAgUmVhY3RpdmVGb3Jtc01vZHVsZSxcclxuICAgIFBpcGVzTW9kdWxlXHJcbiAgXSxcclxufSlcclxuZXhwb3J0IGNsYXNzIEd1YWppcml0b3NJbWFnZVBpY2tlciBpbXBsZW1lbnRzIE9uRGVzdHJveSB7XHJcbiAgY29uc3RydWN0b3IoKSB7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHVuc3Vic2NyaWJlQWxsJDogU3ViamVjdDx2b2lkPiA9IG5ldyBTdWJqZWN0KCk7XHJcbiAgcHJpdmF0ZSBvYnNlcnZlcjogYW55ID0gbnVsbDtcclxuICBwcml2YXRlIG9yaWdpbkltYWdlU3JjOiBhbnk7XHJcbiAgcHJpdmF0ZSBmaWxlVHlwZTogYW55O1xyXG4gIHByaXZhdGUgdXJsSW1hZ2U6IHN0cmluZyB8IHVuZGVmaW5lZDtcclxuICBwcml2YXRlIGxhc3RPcmlnaW5TcmM6IGFueTtcclxuXHJcbiAgcHJpdmF0ZSBhcnJheUNvcGllZEltYWdlczogYW55W10gPSBbXTtcclxuXHJcbiAgcHVibGljIHJlYWRvbmx5IHV1aWRGaWxlUGlja2VyOiBzdHJpbmcgPSBEYXRlLm5vdygpLnRvU3RyaW5nKDIwKTtcclxuICBwdWJsaWMgcmVhZG9ubHkgYWxsRm9ybWF0czogc3RyaW5nW10gPSBbJ3dlYnAnLCAnanBlZycsICdwbmcnXTtcclxuICBwdWJsaWMgY29uZmlnOiBXcml0YWJsZVNpZ25hbDxJbWFnZVBpY2tlckNvbmY+ID0gc2lnbmFsKHtcclxuICAgIGhlaWdodDogJzI0MHB4JyxcclxuICAgIHdpZHRoOiAnMzIwcHgnLFxyXG4gICAgYm9yZGVyUmFkaXVzOiAnMTZweCcsXHJcbiAgICBjb21wcmVzc0luaXRpYWw6IHRydWUsXHJcbiAgICBsYW5ndWFnZTogJ2VzJyxcclxuICAgIGhpZGVEZWxldGVCdG46IGZhbHNlLFxyXG4gICAgaGlkZURvd25sb2FkQnRuOiBmYWxzZSxcclxuICAgIGhpZGVFZGl0QnRuOiBmYWxzZSxcclxuICAgIGhpZGVBZGRCdG46IGZhbHNlLFxyXG4gIH0pO1xyXG4gIHB1YmxpYyBpbWFnZVNyYzogV3JpdGFibGVTaWduYWw8c3RyaW5nPiA9IHNpZ25hbChudWxsKTtcclxuICBwdWJsaWMgc2hvd0Nyb3A6IFVudHlwZWRGb3JtQ29udHJvbCA9IG5ldyBVbnR5cGVkRm9ybUNvbnRyb2woeyB2YWx1ZTogZmFsc2UsIGRpc2FibGVkOiBmYWxzZSB9KTtcclxuICBwdWJsaWMgbG9hZEltYWdlOiBXcml0YWJsZVNpZ25hbDxib29sZWFuPiA9IHNpZ25hbChmYWxzZSk7XHJcbiAgcHVibGljIG5vRWRpdDogV3JpdGFibGVTaWduYWw8Ym9vbGVhbj4gPSBzaWduYWwoZmFsc2UpO1xyXG4gIHB1YmxpYyBzaG93RWRpdFBhbmVsOiBXcml0YWJsZVNpZ25hbDxib29sZWFuPiA9IHNpZ25hbChmYWxzZSk7XHJcbiAgcHVibGljIG1haW50YWluQXNwZWN0UmF0aW86IFVudHlwZWRGb3JtQ29udHJvbCA9IG5ldyBVbnR5cGVkRm9ybUNvbnRyb2woeyB2YWx1ZTogdHJ1ZSwgZGlzYWJsZWQ6IGZhbHNlIH0pO1xyXG4gIHB1YmxpYyBxdWFsaXR5OiBVbnR5cGVkRm9ybUNvbnRyb2wgPSBuZXcgVW50eXBlZEZvcm1Db250cm9sKHsgdmFsdWU6IDcwLCBkaXNhYmxlZDogZmFsc2UgfSk7XHJcbiAgcHVibGljIGZvcm1hdDogVW50eXBlZEZvcm1Db250cm9sID0gbmV3IFVudHlwZWRGb3JtQ29udHJvbCh7IHZhbHVlOiAnd2VicCcsIGRpc2FibGVkOiBmYWxzZSB9KTtcclxuICBwdWJsaWMgbWF4SGVpZ2h0OiBXcml0YWJsZVNpZ25hbDxudW1iZXI+ID0gc2lnbmFsKDIwMDApO1xyXG4gIHB1YmxpYyBtYXhXaWR0aDogV3JpdGFibGVTaWduYWw8bnVtYmVyPiA9IHNpZ25hbCgyMDAwKTtcclxuICBwdWJsaWMgY3JvcEhlaWdodDogVW50eXBlZEZvcm1Db250cm9sID0gbmV3IFVudHlwZWRGb3JtQ29udHJvbCh7IHZhbHVlOiAxNTAsIGRpc2FibGVkOiBmYWxzZSB9KTtcclxuICBwdWJsaWMgY3JvcFdpZHRoOiBVbnR5cGVkRm9ybUNvbnRyb2wgPSBuZXcgVW50eXBlZEZvcm1Db250cm9sKHsgdmFsdWU6IDE1MCwgZGlzYWJsZWQ6IGZhbHNlIH0pO1xyXG4gIHB1YmxpYyBpbWFnZU5hbWU6IFdyaXRhYmxlU2lnbmFsPHN0cmluZz4gPSBzaWduYWwoJ2Rvd25sb2FkJyk7XHJcbiAgcHVibGljIGN1cnJlbnRMYW5ndWFnZTogV3JpdGFibGVTaWduYWw8c3RyaW5nPiA9IHNpZ25hbCgnZXMnKTtcclxuXHJcbiAgQElucHV0KCkgYXBwZWFyYW5jZTogTWF0Rm9ybUZpZWxkQXBwZWFyYW5jZSA9ICdvdXRsaW5lJztcclxuICBASW5wdXQoKSBjb2xvcjogVGhlbWVQYWxldHRlID0gJ3ByaW1hcnknO1xyXG4gIEBJbnB1dCgpIGltYWdlc0FsbG93ZWQ6IEltYWdlQWxsb3dlZFR5cGVzID0gJ2ltYWdlLyonO1xyXG5cclxuICBAVmlld0NoaWxkKCdpbWFnZVBpY2tlcicsIHsgc3RhdGljOiBmYWxzZSB9KSBpbWFnZVBpY2tlcjogRWxlbWVudFJlZiB8IHVuZGVmaW5lZDtcclxuXHJcbiAgQE91dHB1dCgpICRpbWFnZUNoYW5nZWQ6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XHJcbiAgQE91dHB1dCgpICRpbWFnZU9yaWdpbmFsOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xyXG5cclxuICBASW5wdXQoKSBzZXQgX2ltYWdlU3JjKGltYWdlOiBzdHJpbmcpIHtcclxuICAgIGlmIChpbWFnZSkge1xyXG4gICAgICBsZXQgdHlwZXM6IHN0cmluZ1tdID0gaW1hZ2Uuc3BsaXQoJy4nKTtcclxuICAgICAgdGhpcy5mb3JtYXQuc2V0VmFsdWUodHlwZXNbdHlwZXMubGVuZ3RoIC0gMV0pO1xyXG5cclxuICAgICAgaWYgKCF0aGlzLmZvcm1hdC52YWx1ZSB8fCAodGhpcy5mb3JtYXQudmFsdWUgIT09ICdwbmcnICYmIHRoaXMuZm9ybWF0LnZhbHVlICE9PSAnanBlZycgJiYgdGhpcy5mb3JtYXQudmFsdWUgIT09ICd3ZWJwJykpIHtcclxuICAgICAgICB0aGlzLmZvcm1hdC5zZXRWYWx1ZSgnanBlZycpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICB0aGlzLmltYWdlU3JjLnNldChpbWFnZSk7XHJcbiAgICAgIHRoaXMuYXJyYXlDb3BpZWRJbWFnZXMgPSBbXTtcclxuICAgICAgdGhpcy5hcnJheUNvcGllZEltYWdlcy5wdXNoKHRoaXMuaW1hZ2VTcmMpO1xyXG4gICAgICB0aGlzLm9yaWdpbkltYWdlU3JjID0gaW1hZ2U7XHJcbiAgICAgIHRoaXMubGFzdE9yaWdpblNyYyA9IGltYWdlO1xyXG4gICAgICB0aGlzLiRpbWFnZU9yaWdpbmFsLm5leHQodGhpcy5vcmlnaW5JbWFnZVNyYyk7XHJcbiAgICAgIHRoaXMubG9hZEltYWdlLnNldCh0cnVlKTtcclxuICAgICAgdGhpcy5ub0VkaXQuc2V0KHRydWUpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5pbWFnZVNyYy5zZXQobnVsbCk7XHJcbiAgICAgIHRoaXMub3JpZ2luSW1hZ2VTcmMgPSBudWxsO1xyXG4gICAgICB0aGlzLmxvYWRJbWFnZS5zZXQoZmFsc2UpO1xyXG4gICAgICB0aGlzLm5vRWRpdC5zZXQoZmFsc2UpO1xyXG4gICAgICB0aGlzLmFycmF5Q29waWVkSW1hZ2VzID0gW107XHJcbiAgICAgIHRoaXMubGFzdE9yaWdpblNyYyA9IG51bGw7XHJcbiAgICAgIHRoaXMuJGltYWdlT3JpZ2luYWwubmV4dChudWxsKTtcclxuICAgICAgdGhpcy5mb3JtYXQuc2V0VmFsdWUoJ2pwZWcnKTtcclxuICAgICAgdGhpcy5tYXhIZWlnaHQuc2V0KDIwMDApO1xyXG4gICAgICB0aGlzLm1heFdpZHRoLnNldCgyMDAwKTtcclxuICAgICAgdGhpcy5jcm9wSGVpZ2h0LnNldFZhbHVlKDE1MCk7XHJcbiAgICAgIHRoaXMuY3JvcFdpZHRoLnNldFZhbHVlKDE1MCk7XHJcbiAgICAgIHRoaXMubWFpbnRhaW5Bc3BlY3RSYXRpby5zZXRWYWx1ZSh0cnVlKTtcclxuICAgICAgdGhpcy5zaG93RWRpdFBhbmVsLnNldChmYWxzZSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBASW5wdXQoKSBzZXQgX2NvbmZpZyh2YWx1ZTogSW1hZ2VQaWNrZXJDb25mKSB7XHJcbiAgICBpZiAodmFsdWUgJiYgdmFsdWUuY29uc3RydWN0b3IgPT0gT2JqZWN0KSB7XHJcbiAgICAgIHRoaXMuY29uZmlnLnNldCh7XHJcbiAgICAgICAgLi4udGhpcy5jb25maWcoKSxcclxuICAgICAgICAuLi52YWx1ZSxcclxuICAgICAgfSlcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgYXN5bmMgaGFuZGxlUmVhZGVyTG9hZGVkKHJlYWRlckV2dDogeyB0YXJnZXQ6IHsgcmVzdWx0OiBhbnk7IH07IH0pOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIGNvbnN0IGJpbmFyeVN0cmluZzogc3RyaW5nID0gcmVhZGVyRXZ0LnRhcmdldC5yZXN1bHQ7XHJcbiAgICBjb25zdCBiYXNlNjR0ZXh0U3RyaW5nOiBzdHJpbmcgPSBidG9hKGJpbmFyeVN0cmluZyk7XHJcbiAgICB0aGlzLm9yaWdpbkltYWdlU3JjID0gdGhpcy51cmxJbWFnZSArIGJhc2U2NHRleHRTdHJpbmc7XHJcbiAgICB0aGlzLmxhc3RPcmlnaW5TcmMgPSB0aGlzLnVybEltYWdlICsgYmFzZTY0dGV4dFN0cmluZztcclxuICAgIGlmICh0aGlzLmNvbmZpZygpPy5jb21wcmVzc0luaXRpYWwpIHtcclxuICAgICAgdGhpcy5xdWFsaXR5LnNldFZhbHVlKDcwKTtcclxuICAgICAgY29uc3QgaW5wdXQ6IEltYWdlQ29udmVydGVySW5wdXQgPSB7XHJcbiAgICAgICAgZGF0YVR5cGU6IHRoaXMuZm9ybWF0LnZhbHVlLFxyXG4gICAgICAgIHF1YWxpdHk6IDAuNzAsXHJcbiAgICAgICAgbWFpbnRhaW5SYXRpbzogdHJ1ZSxcclxuICAgICAgfTtcclxuICAgICAgdGhpcy5pbWFnZVNyYy5zZXQoYXdhaXQgdGhpcy5yZXNpemVEYXRhVVJMKHRoaXMudXJsSW1hZ2UgKyBiYXNlNjR0ZXh0U3RyaW5nLCBpbnB1dCkpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5pbWFnZVNyYy5zZXQodGhpcy51cmxJbWFnZSArIGJhc2U2NHRleHRTdHJpbmcpO1xyXG4gICAgICB0aGlzLmFycmF5Q29waWVkSW1hZ2VzID0gW107XHJcbiAgICAgIHRoaXMuYXJyYXlDb3BpZWRJbWFnZXMucHVzaCh7XHJcbiAgICAgICAgbGFzdEltYWdlOiB0aGlzLmltYWdlU3JjKCksXHJcbiAgICAgICAgd2lkdGg6IHRoaXMubWF4V2lkdGgoKSxcclxuICAgICAgICBoZWlnaHQ6IHRoaXMubWF4SGVpZ2h0KCksXHJcbiAgICAgICAgcXVhbGl0eTogdGhpcy5xdWFsaXR5LnZhbHVlLFxyXG4gICAgICB9KTtcclxuICAgICAgdGhpcy4kaW1hZ2VPcmlnaW5hbC5uZXh0KHRoaXMuaW1hZ2VTcmMoKSk7XHJcbiAgICB9XHJcbiAgICB0aGlzLiRpbWFnZUNoYW5nZWQubmV4dCh0aGlzLmltYWdlU3JjKCkpO1xyXG4gICAgdGhpcy5sb2FkSW1hZ2Uuc2V0KHRydWUpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhc3luYyByZXNpemVEYXRhVVJMKGRhdGFzOiBzdHJpbmcsIGlucHV0OiBJbWFnZUNvbnZlcnRlcklucHV0KTogUHJvbWlzZTxhbnk+IHtcclxuICAgIHJldHVybiBhd2FpdCBuZXcgUHJvbWlzZShhc3luYyBmdW5jdGlvbihyZXNvbHZlKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICAgIGxldCBpbWc6IEhUTUxJbWFnZUVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdpbWcnKTtcclxuICAgICAgaW1nLnNyYyA9IGRhdGFzICsgJyc7XHJcbiAgICAgIGltZy5jcm9zc09yaWdpbiA9ICdBbm9ueW1vdXMnO1xyXG4gICAgICBsZXQgcXVhbGl0eTogbnVtYmVyID0gaW5wdXQ/LnF1YWxpdHkgPz8gMS4wO1xyXG4gICAgICBsZXQgbWFpbnRhaW5SYXRpbzogYm9vbGVhbiA9IGlucHV0Lm1haW50YWluUmF0aW8gIT09IHVuZGVmaW5lZCA/IGlucHV0Lm1haW50YWluUmF0aW8gOiB0cnVlO1xyXG5cclxuICAgICAgaW1nLm9ubG9hZCA9IGZ1bmN0aW9uKCk6IHZvaWQge1xyXG4gICAgICAgIGNvbnN0IGNhbnZhczogSFRNTENhbnZhc0VsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdjYW52YXMnKTtcclxuICAgICAgICBjb25zdCBjdHg6IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRCA9IGNhbnZhcy5nZXRDb250ZXh0KCcyZCcpO1xyXG4gICAgICAgIGxldCByYXRpbzogbnVtYmVyID0gaW1nLndpZHRoIC8gaW1nLmhlaWdodDtcclxuICAgICAgICBsZXQgd2lkdGg6IG51bWJlciA9IGlucHV0Py53aWR0aCA/PyBpbWcud2lkdGg7XHJcbiAgICAgICAgbGV0IGhlaWdodDogbnVtYmVyID0gaW5wdXQ/LmhlaWdodCA/PyBpbWcuaGVpZ2h0O1xyXG5cclxuICAgICAgICBpZiAobWFpbnRhaW5SYXRpbykge1xyXG4gICAgICAgICAgaWYgKGlucHV0LmNoYW5nZUhlaWdodCkge1xyXG4gICAgICAgICAgICBjYW52YXMud2lkdGggPSBoZWlnaHQgKiByYXRpbztcclxuICAgICAgICAgICAgY2FudmFzLmhlaWdodCA9IGhlaWdodDtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGNhbnZhcy53aWR0aCA9IHdpZHRoO1xyXG4gICAgICAgICAgICBjYW52YXMuaGVpZ2h0ID0gd2lkdGggLyByYXRpbztcclxuICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgY2FudmFzLndpZHRoID0gd2lkdGg7XHJcbiAgICAgICAgICBjYW52YXMuaGVpZ2h0ID0gaGVpZ2h0O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY3R4Py5kcmF3SW1hZ2UoaW1nLCAwLCAwLCBjYW52YXMud2lkdGgsIGNhbnZhcy5oZWlnaHQpO1xyXG4gICAgICAgIGxldCB0eXBlOiBzdHJpbmcgPSBpbnB1dD8uZGF0YVR5cGUgPz8gJ3dlYnAnO1xyXG4gICAgICAgIGNvbnN0IGRhdGFVUkk6IHN0cmluZyA9IGNhbnZhcy50b0RhdGFVUkwoYGltYWdlLyR7dHlwZX1gLCBxdWFsaXR5KTtcclxuICAgICAgICByZXNvbHZlKHtcclxuICAgICAgICAgIGRhdGFVcmk6IGRhdGFVUkksXHJcbiAgICAgICAgICB3aWR0aDogY2FudmFzLndpZHRoLFxyXG4gICAgICAgICAgaGVpZ2h0OiBjYW52YXMuaGVpZ2h0LFxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9O1xyXG4gICAgfSkudGhlbigoZGF0YTogYW55KSA9PiB7XHJcbiAgICAgIHRoaXMubWF4SGVpZ2h0ID0gZGF0YT8uaGVpZ2h0O1xyXG4gICAgICB0aGlzLm1heFdpZHRoID0gZGF0YT8ud2lkdGg7XHJcbiAgICAgIGlmICh0aGlzLmFycmF5Q29waWVkSW1hZ2VzPy5sZW5ndGggPD0gMjApIHtcclxuICAgICAgICB0aGlzLmFycmF5Q29waWVkSW1hZ2VzLnB1c2goe1xyXG4gICAgICAgICAgbGFzdEltYWdlOiBkYXRhPy5kYXRhVXJpLFxyXG4gICAgICAgICAgd2lkdGg6IHRoaXMubWF4V2lkdGgsXHJcbiAgICAgICAgICBoZWlnaHQ6IHRoaXMubWF4SGVpZ2h0LFxyXG4gICAgICAgICAgcXVhbGl0eTogdGhpcy5xdWFsaXR5LnZhbHVlLFxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcblxyXG4gICAgICByZXR1cm4gZGF0YS5kYXRhVXJpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHdhaXQobXM/OiBudW1iZXIgfCB1bmRlZmluZWQpOiBQcm9taXNlPGFueT4ge1xyXG4gICAgbXMgPSBtcyA/PyAxMDAwO1xyXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKTogdm9pZCA9PiB7XHJcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgIHJldHVybiByZXNvbHZlKHRydWUpO1xyXG4gICAgICB9LCBtcyk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZHJhZ0VsZW1lbnQoZWxlbWVudDogSFRNTEVsZW1lbnQpOiB2b2lkIHtcclxuICAgIGxldCBwb3MxOiBudW1iZXIgPSAwLCBwb3MyOiBudW1iZXIgPSAwLCBwb3MzOiBudW1iZXIgPSAwLCBwb3M0OiBudW1iZXIgPSAwO1xyXG5cclxuICAgIGxldCBlbDogSFRNTEVsZW1lbnQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChlbGVtZW50LmlkICsgJy1oZWFkZXInKTtcclxuICAgIGlmIChlbCkge1xyXG4gICAgICBlbC5vbm1vdXNlZG93biA9IGRyYWdNb3VzZURvd247XHJcbiAgICAgIGVsLm9udG91Y2hzdGFydCA9IGRyYWdNb3VzZURvd247XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBlbGVtZW50Lm9ubW91c2Vkb3duID0gZHJhZ01vdXNlRG93bjtcclxuICAgICAgZWxlbWVudC5vbnRvdWNoc3RhcnQgPSBkcmFnTW91c2VEb3duO1xyXG4gICAgfVxyXG5cclxuICAgIGZ1bmN0aW9uIGRyYWdNb3VzZURvd24oZTogYW55KTogdm9pZCB7XHJcbiAgICAgIGUgPSBlIHx8IHdpbmRvdy5ldmVudDtcclxuICAgICAgZT8ucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgcG9zMyA9IGU/LmNsaWVudFg7XHJcbiAgICAgIHBvczQgPSBlPy5jbGllbnRZO1xyXG4gICAgICBkb2N1bWVudC5vbm1vdXNldXAgPSBjbG9zZURyYWdFbGVtZW50O1xyXG4gICAgICBkb2N1bWVudC5vbnRvdWNoZW5kID0gY2xvc2VEcmFnRWxlbWVudDtcclxuICAgICAgZG9jdW1lbnQub25tb3VzZW1vdmUgPSBlbGVtZW50RHJhZztcclxuICAgICAgZG9jdW1lbnQub250b3VjaG1vdmUgPSBlbGVtZW50RHJhZztcclxuICAgIH1cclxuXHJcbiAgICBmdW5jdGlvbiBlbGVtZW50RHJhZyhlOiBhbnkpOiB2b2lkIHtcclxuICAgICAgbGV0IGhvbGRlckltYWdlOiBhbnkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnaW1hZ2UtZnVsbCcpO1xyXG4gICAgICBlID0gZSB8fCB3aW5kb3cuZXZlbnQ7XHJcbiAgICAgIGU/LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgIHBvczEgPSBwb3MzIC0gZT8uY2xpZW50WDtcclxuICAgICAgcG9zMiA9IHBvczQgLSBlPy5jbGllbnRZO1xyXG4gICAgICBwb3MzID0gZT8uY2xpZW50WDtcclxuICAgICAgcG9zNCA9IGU/LmNsaWVudFk7XHJcblxyXG4gICAgICBjb25zdCBuZXdUb3A6IG51bWJlciA9IGVsZW1lbnQub2Zmc2V0VG9wIC0gcG9zMjtcclxuICAgICAgY29uc3QgbmV3TGVmdDogbnVtYmVyID0gZWxlbWVudC5vZmZzZXRMZWZ0IC0gcG9zMTtcclxuICAgICAgY29uc3QgcmVjdEhvbGRlciA9IGhvbGRlckltYWdlLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xyXG4gICAgICBjb25zdCByZWN0RWxlbWVudDogRE9NUmVjdCA9IGVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XHJcbiAgICAgIGlmIChuZXdUb3AgPj0gcmVjdEhvbGRlci55ICsgOCkge1xyXG4gICAgICAgIGVsZW1lbnQuc3R5bGUudG9wID0gTWF0aC5taW4obmV3VG9wLCByZWN0SG9sZGVyLnkgKyByZWN0SG9sZGVyLmhlaWdodCAtIHJlY3RFbGVtZW50LmhlaWdodCAtIDQpICsgJ3B4JztcclxuICAgICAgfVxyXG4gICAgICBpZiAobmV3TGVmdCA+IHJlY3RIb2xkZXIueCArIDQgJiYgcmVjdEhvbGRlci54ICsgcmVjdEhvbGRlci53aWR0aCA+IHJlY3RFbGVtZW50LnggKyByZWN0RWxlbWVudC53aWR0aCArIDIpIHtcclxuICAgICAgICBlbGVtZW50LnN0eWxlLmxlZnQgPSBNYXRoLm1pbihuZXdMZWZ0LCByZWN0SG9sZGVyLnggKyByZWN0SG9sZGVyLndpZHRoIC0gcmVjdEVsZW1lbnQud2lkdGggLSA0KSArICdweCc7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBmdW5jdGlvbiBjbG9zZURyYWdFbGVtZW50KCk6IHZvaWQge1xyXG4gICAgICBkb2N1bWVudC5vbm1vdXNldXAgPSBudWxsO1xyXG4gICAgICBkb2N1bWVudC5vbm1vdXNlbW92ZSA9IG51bGw7XHJcbiAgICAgIGRvY3VtZW50Lm9udG91Y2hlbmQgPSBudWxsO1xyXG4gICAgICBkb2N1bWVudC5vbnRvdWNobW92ZSA9IG51bGw7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgb25VcGxvYWQoZXZlbnQ6IHsgcHJldmVudERlZmF1bHQ6ICgpID0+IHZvaWQ7IH0pOiB2b2lkIHtcclxuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICB0aGlzLmltYWdlUGlja2VyPy5uYXRpdmVFbGVtZW50LmNsaWNrKCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgaGFuZGxlRmlsZVNlbGVjdChldnQ6IGFueSk6IHZvaWQge1xyXG4gICAgY29uc3QgZmlsZXMgPSBldnQ/LnRhcmdldD8uZmlsZXM7XHJcbiAgICBpZiAoZmlsZXMpIHtcclxuICAgICAgY29uc3QgZmlsZSA9IGZpbGVzWzBdO1xyXG4gICAgICB0aGlzLmltYWdlTmFtZS5zZXQoZmlsZT8ubmFtZT8uc3BsaXQoJy4nKVswXSk7XHJcbiAgICAgIHRoaXMuZmlsZVR5cGUgPSBmaWxlPy50eXBlO1xyXG4gICAgICB0aGlzLnVybEltYWdlID0gYGRhdGE6JHtmaWxlPy50eXBlfTtiYXNlNjQsYDtcclxuICAgICAgdGhpcy5ub0VkaXQuc2V0KGZhbHNlKTtcclxuXHJcbiAgICAgIGlmIChmaWxlcyAmJiBmaWxlKSB7XHJcbiAgICAgICAgY29uc3QgcmVhZGVyOiBhbnkgPSBuZXcgRmlsZVJlYWRlcigpO1xyXG4gICAgICAgIHJlYWRlci5vbmxvYWQgPSB0aGlzLmhhbmRsZVJlYWRlckxvYWRlZC5iaW5kKHRoaXMpO1xyXG4gICAgICAgIHJlYWRlci5yZWFkQXNCaW5hcnlTdHJpbmcoZmlsZSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBvbkNsb3NlRWRpdFBhbmVsKCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMub2JzZXJ2ZXIgaW5zdGFuY2VvZiBSZXNpemVPYnNlcnZlcikge1xyXG4gICAgICBsZXQgaW1hZ2VDcm9wcGVyOiBhbnkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnaW1hZ2UtY3JvcHBlcicpO1xyXG4gICAgICBsZXQgaW1hZ2VGdWxsOiBhbnkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnaW1hZ2UtZnVsbCcpO1xyXG4gICAgICB0aGlzLm9ic2VydmVyLnVub2JzZXJ2ZShpbWFnZUNyb3BwZXIpO1xyXG4gICAgICB0aGlzLm9ic2VydmVyLnVub2JzZXJ2ZShpbWFnZUZ1bGwpO1xyXG4gICAgfVxyXG4gICAgdGhpcy5zaG93Q3JvcC5zZXRWYWx1ZShmYWxzZSk7XHJcbiAgICB0aGlzLnNob3dFZGl0UGFuZWwuc2V0KGZhbHNlKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBhc3luYyBvbkNoYW5nZVF1YWxpdHkoKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICBjb25zdCBxdWFsaXR5SXRlbTogbnVtYmVyID0gdGhpcy5xdWFsaXR5LnZhbHVlIC8gMTAwO1xyXG4gICAgdGhpcy5tYXhIZWlnaHQuc2V0KHRoaXMubWF4SGVpZ2h0KCkgPz8gMjAwMCk7XHJcbiAgICB0aGlzLm1heFdpZHRoLnNldCh0aGlzLm1heFdpZHRoKCkgPz8gMjAwMCk7XHJcblxyXG4gICAgYXdhaXQgdGhpcy53YWl0KDI1MCk7XHJcbiAgICB0cnkge1xyXG4gICAgICBjb25zdCBpbnB1dDogSW1hZ2VDb252ZXJ0ZXJJbnB1dCA9IHtcclxuICAgICAgICBoZWlnaHQ6IHRoaXMubWF4SGVpZ2h0KCksXHJcbiAgICAgICAgd2lkdGg6IHRoaXMubWF4V2lkdGgoKSxcclxuICAgICAgICBkYXRhVHlwZTogdGhpcy5mb3JtYXQudmFsdWUsXHJcbiAgICAgICAgcXVhbGl0eTogcXVhbGl0eUl0ZW0sXHJcbiAgICAgICAgbWFpbnRhaW5SYXRpbzogdGhpcy5tYWludGFpbkFzcGVjdFJhdGlvLnZhbHVlLFxyXG4gICAgICB9O1xyXG5cclxuICAgICAgdGhpcy5pbWFnZVNyYy5zZXQoYXdhaXQgdGhpcy5yZXNpemVEYXRhVVJMKHRoaXMub3JpZ2luSW1hZ2VTcmMsIGlucHV0KSk7XHJcbiAgICAgIHRoaXMuJGltYWdlQ2hhbmdlZC5uZXh0KHRoaXMuaW1hZ2VTcmMoKSk7XHJcbiAgICAgIHRoaXMubG9hZEltYWdlLnNldCh0cnVlKTtcclxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XHJcbiAgICAgIHRoaXMubG9hZEltYWdlLnNldCh0cnVlKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBhc3luYyBvbkNoYW5nZUZvcm1hdCgpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIGxldCBxdWFsaXR5SXRlbTogbnVtYmVyID0gdGhpcy5xdWFsaXR5LnZhbHVlIC8gMTAwO1xyXG4gICAgdGhpcy5tYXhIZWlnaHQuc2V0KHRoaXMubWF4SGVpZ2h0KCkgPz8gMjAwMCk7XHJcbiAgICB0aGlzLm1heFdpZHRoLnNldCh0aGlzLm1heFdpZHRoKCkgPz8gMjAwMCk7XHJcblxyXG4gICAgYXdhaXQgdGhpcy53YWl0KDI1MCk7XHJcbiAgICB0cnkge1xyXG4gICAgICBsZXQgaW5wdXQ6IEltYWdlQ29udmVydGVySW5wdXQgPSB7XHJcbiAgICAgICAgaGVpZ2h0OiB0aGlzLm1heEhlaWdodCgpLFxyXG4gICAgICAgIHdpZHRoOiB0aGlzLm1heFdpZHRoKCksXHJcbiAgICAgICAgZGF0YVR5cGU6IHRoaXMuZm9ybWF0LnZhbHVlLFxyXG4gICAgICAgIHF1YWxpdHk6IHF1YWxpdHlJdGVtLFxyXG4gICAgICAgIG1haW50YWluUmF0aW86IHRoaXMubWFpbnRhaW5Bc3BlY3RSYXRpby52YWx1ZSxcclxuICAgICAgfTtcclxuICAgICAgdGhpcy5pbWFnZVNyYy5zZXQoYXdhaXQgdGhpcy5yZXNpemVEYXRhVVJMKHRoaXMub3JpZ2luSW1hZ2VTcmMsIGlucHV0KSk7XHJcbiAgICAgIHRoaXMuJGltYWdlQ2hhbmdlZC5uZXh0KHRoaXMuaW1hZ2VTcmMoKSk7XHJcbiAgICAgIHRoaXMubG9hZEltYWdlLnNldCh0cnVlKTtcclxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XHJcbiAgICAgIHRoaXMubG9hZEltYWdlLnNldCh0cnVlKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBhc3luYyBvbkNoYW5nZVNpemUoY2hhbmdlV2lkdGg/OiBhbnksIGNoYW5nZUhlaWdodD86IGFueSk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgbGV0IHF1YWxpdHlJdGVtOiBudW1iZXIgPSB0aGlzLnF1YWxpdHkudmFsdWUgLyAxMDA7XHJcbiAgICB0aGlzLm1heEhlaWdodC5zZXQodGhpcy5tYXhIZWlnaHQoKSA/PyAyMDAwKTtcclxuICAgIHRoaXMubWF4V2lkdGguc2V0KHRoaXMubWF4V2lkdGgoKSA/PyAyMDAwKTtcclxuXHJcbiAgICBhd2FpdCB0aGlzLndhaXQoNTAwKTtcclxuXHJcbiAgICB0cnkge1xyXG4gICAgICBsZXQgaW5wdXQ6IEltYWdlQ29udmVydGVySW5wdXQgPSB7XHJcbiAgICAgICAgaGVpZ2h0OiB0aGlzLm1heEhlaWdodCgpLFxyXG4gICAgICAgIHdpZHRoOiB0aGlzLm1heFdpZHRoKCksXHJcbiAgICAgICAgZGF0YVR5cGU6IHRoaXMuZm9ybWF0LnZhbHVlLFxyXG4gICAgICAgIHF1YWxpdHk6IHF1YWxpdHlJdGVtLFxyXG4gICAgICAgIG1haW50YWluUmF0aW86IHRoaXMubWFpbnRhaW5Bc3BlY3RSYXRpby52YWx1ZSxcclxuICAgICAgICBjaGFuZ2VIZWlnaHQ6IGNoYW5nZUhlaWdodCxcclxuICAgICAgICBjaGFuZ2VXaWR0aDogY2hhbmdlV2lkdGgsXHJcbiAgICAgIH07XHJcbiAgICAgIHRoaXMuaW1hZ2VTcmMuc2V0KGF3YWl0IHRoaXMucmVzaXplRGF0YVVSTCh0aGlzLm9yaWdpbkltYWdlU3JjLCBpbnB1dCkpO1xyXG4gICAgICB0aGlzLiRpbWFnZUNoYW5nZWQubmV4dCh0aGlzLmltYWdlU3JjKCkpO1xyXG4gICAgICB0aGlzLmxvYWRJbWFnZS5zZXQodHJ1ZSk7XHJcbiAgICB9IGNhdGNoIChlcnJvcikge1xyXG4gICAgICB0aGlzLmxvYWRJbWFnZS5zZXQodHJ1ZSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgb25DaGFuZ2VDcm9wKCk6IHZvaWQge1xyXG4gICAgY29uc3QgY3JvcHBlcjogYW55ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2ltYWdlLWNyb3BwZXInKTtcclxuICAgIGNyb3BwZXIuc3R5bGUud2lkdGggPSB0aGlzLmNyb3BXaWR0aC52YWx1ZSArICdweCc7XHJcbiAgICBjcm9wcGVyLnN0eWxlLmhlaWdodCA9IHRoaXMuY3JvcEhlaWdodC52YWx1ZSArICdweCc7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgb25Dcm9wU3RhdGVDaGFuZ2UoKTogdm9pZCB7XHJcbiAgICBjb25zdCBjcm9wcGVyOiBIVE1MRWxlbWVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdpbWFnZS1jcm9wcGVyJyk7XHJcbiAgICBjb25zdCBmdWxsSW1hZ2U6IEhUTUxFbGVtZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2ltYWdlLWZ1bGwnKTtcclxuICAgIGNvbnN0IGFzcGVjdFJhdGlvOiBudW1iZXIgPSBmdWxsSW1hZ2Uub2Zmc2V0V2lkdGggLyBmdWxsSW1hZ2Uub2Zmc2V0SGVpZ2h0O1xyXG5cclxuICAgIGlmICh0aGlzLnNob3dDcm9wLnZhbHVlKSB7XHJcbiAgICAgIGNyb3BwZXIuc3R5bGUub3BhY2l0eSA9ICcxLjAnO1xyXG4gICAgICB0aGlzLmRyYWdFbGVtZW50KGNyb3BwZXIpO1xyXG4gICAgICB0aGlzLm9ic2VydmVyID0gbmV3IFJlc2l6ZU9ic2VydmVyKChlbnRyaWVzOiBSZXNpemVPYnNlcnZlckVudHJ5W10pOiB2b2lkID0+IHtcclxuICAgICAgICBlbnRyaWVzLmZvckVhY2goKGVudHJ5OiBSZXNpemVPYnNlcnZlckVudHJ5KTogdm9pZCA9PiB7XHJcbiAgICAgICAgICBpZiAodGhpcy5zaG93RWRpdFBhbmVsKCkpIHtcclxuICAgICAgICAgICAgY29uc3QgZWxlbWVudENyb3BwZXI6IEhUTUxFbGVtZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2ltYWdlLWNyb3BwZXInKTtcclxuICAgICAgICAgICAgY29uc3QgZWxlbWVudEZ1bGw6IEhUTUxFbGVtZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2ltYWdlLWZ1bGwnKTtcclxuXHJcbiAgICAgICAgICAgIGNvbnN0IHJlY3RIb2xkZXI6IERPTVJlY3QgPSBlbGVtZW50RnVsbC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcclxuICAgICAgICAgICAgY29uc3QgcmVjdEVsZW1lbnQ6IERPTVJlY3QgPSBlbGVtZW50Q3JvcHBlci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcclxuXHJcbiAgICAgICAgICAgIGNvbnN0IG1heFdpZHRoOiBudW1iZXIgPSByZWN0SG9sZGVyLnggKyByZWN0SG9sZGVyLndpZHRoIC0gcmVjdEVsZW1lbnQueCAtIDQ7XHJcbiAgICAgICAgICAgIGNvbnN0IG1heEhlaWdodDogbnVtYmVyID0gcmVjdEhvbGRlci55ICsgcmVjdEhvbGRlci5oZWlnaHQgLSByZWN0RWxlbWVudC55IC0gNDtcclxuXHJcbiAgICAgICAgICAgIC8vIE9idGVuZXIgZWwgdGFtYcOxbyBkZWwgw6FyZWEgZGUgcmVjb3J0ZSBzZWxlY2Npb25hZGEgcG9yIGVsIHVzdWFyaW9cclxuICAgICAgICAgICAgY29uc3QgY3JvcFdpZHRoOiBudW1iZXIgPSBlbGVtZW50Q3JvcHBlci5vZmZzZXRXaWR0aDtcclxuICAgICAgICAgICAgY29uc3QgY3JvcEhlaWdodDogbnVtYmVyID0gZWxlbWVudENyb3BwZXIub2Zmc2V0SGVpZ2h0O1xyXG5cclxuICAgICAgICAgICAgLy8gQ2FsY3VsYXIgZWwgYW5jaG8geSBlbCBhbHRvIGRlbCDDoXJlYSBkZSByZWNvcnRlIG1hbnRlbmllbmRvIGxhIHJlbGFjacOzbiBkZSBhc3BlY3RvIGRlIGxhIGltYWdlbiBvcmlnaW5hbFxyXG4gICAgICAgICAgICBsZXQgbmV3V2lkdGg6IG51bWJlciA9IGNyb3BXaWR0aDtcclxuICAgICAgICAgICAgbGV0IG5ld0hlaWdodDogbnVtYmVyID0gY3JvcEhlaWdodDtcclxuXHJcbiAgICAgICAgICAgIGlmICh0aGlzLm1haW50YWluQXNwZWN0UmF0aW8udmFsdWUpIHtcclxuICAgICAgICAgICAgICBpZiAoY3JvcFdpZHRoIC8gY3JvcEhlaWdodCA+IGFzcGVjdFJhdGlvKSB7XHJcbiAgICAgICAgICAgICAgICBuZXdIZWlnaHQgPSBjcm9wV2lkdGggLyBhc3BlY3RSYXRpbztcclxuICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgbmV3V2lkdGggPSBjcm9wSGVpZ2h0ICogYXNwZWN0UmF0aW87XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAvLyBBanVzdGFyIGVsIGFuY2hvIHkgZWwgYWx0byBkZWwgw6FyZWEgZGUgcmVjb3J0ZSBzaSBzdXBlcmEgbG9zIGzDrW1pdGVzXHJcbiAgICAgICAgICAgIG5ld1dpZHRoID0gTWF0aC5taW4obmV3V2lkdGgsIG1heFdpZHRoKTtcclxuICAgICAgICAgICAgbmV3SGVpZ2h0ID0gTWF0aC5taW4obmV3SGVpZ2h0LCBtYXhIZWlnaHQpO1xyXG5cclxuICAgICAgICAgICAgLy8gRXN0YWJsZWNlciBlbCB0YW1hw7FvIHkgbGEgcG9zaWNpw7NuIGRlbCDDoXJlYSBkZSByZWNvcnRlXHJcbiAgICAgICAgICAgIGVsZW1lbnRDcm9wcGVyLnN0eWxlLndpZHRoID0gYCR7bmV3V2lkdGh9cHhgO1xyXG4gICAgICAgICAgICBlbGVtZW50Q3JvcHBlci5zdHlsZS5oZWlnaHQgPSBgJHtuZXdIZWlnaHR9cHhgO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5jcm9wV2lkdGguc2V0VmFsdWUocmVjdEVsZW1lbnQud2lkdGgpO1xyXG4gICAgICAgICAgICB0aGlzLmNyb3BIZWlnaHQuc2V0VmFsdWUocmVjdEVsZW1lbnQuaGVpZ2h0KTtcclxuXHJcbiAgICAgICAgICAgIGlmIChlbnRyeS50YXJnZXQuaWQgPT0gJ2ltYWdlLWZ1bGwnKSB7XHJcbiAgICAgICAgICAgICAgaWYgKHJlY3RIb2xkZXIudG9wID4gMCkge1xyXG4gICAgICAgICAgICAgICAgZWxlbWVudENyb3BwZXIuc3R5bGUudG9wID0gcmVjdEhvbGRlci50b3AgKyA0ICsgJ3B4JztcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgZWxlbWVudENyb3BwZXIuc3R5bGUubGVmdCA9IHJlY3RIb2xkZXIubGVmdCArIDQgKyAncHgnO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH0pO1xyXG4gICAgICB0aGlzLm9ic2VydmVyLm9ic2VydmUoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2ltYWdlLWNyb3BwZXInKSk7XHJcbiAgICAgIHRoaXMub2JzZXJ2ZXIub2JzZXJ2ZShkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnaW1hZ2UtZnVsbCcpKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGNyb3BwZXIuc3R5bGUub3BhY2l0eSA9ICcwLjAnO1xyXG4gICAgICBpZiAodGhpcy5vYnNlcnZlciBpbnN0YW5jZW9mIFJlc2l6ZU9ic2VydmVyKSB7XHJcbiAgICAgICAgY29uc3QgZWxlbWVudENyb3BwZXI6IEhUTUxFbGVtZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2ltYWdlLWNyb3BwZXInKTtcclxuICAgICAgICBjb25zdCBlbGVtZW50RnVsbDogSFRNTEVsZW1lbnQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnaW1hZ2UtZnVsbCcpO1xyXG4gICAgICAgIHRoaXMub2JzZXJ2ZXIudW5vYnNlcnZlKGVsZW1lbnRDcm9wcGVyKTtcclxuICAgICAgICB0aGlzLm9ic2VydmVyLnVub2JzZXJ2ZShlbGVtZW50RnVsbCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBvbkNyb3AodHlwZT86IGFueSk6IHZvaWQge1xyXG4gICAgdHlwZSA9IHR5cGUgPz8gdGhpcy5mb3JtYXQudmFsdWU7XHJcbiAgICBjb25zdCBjcm9wcGVyOiBIVE1MRWxlbWVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdpbWFnZS1jcm9wcGVyJyk7XHJcbiAgICBjb25zdCBlbGVtZW50RnVsbDogSFRNTEVsZW1lbnQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnaW1hZ2UtZnVsbCcpO1xyXG4gICAgY29uc3QgcmVjdENyb3BwZXI6IERPTVJlY3QgPSBjcm9wcGVyLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xyXG4gICAgY29uc3QgZGF0YUhvbGRlclJlY3Q6IERPTVJlY3QgPSBlbGVtZW50RnVsbC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcclxuICAgIGNvbnN0IGNhbnZhczogSFRNTENhbnZhc0VsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdjYW52YXMnKTtcclxuICAgIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpOiB2b2lkID0+IHtcclxuICAgICAgbGV0IGN0eDogQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEIHwgbnVsbCA9IGNhbnZhcy5nZXRDb250ZXh0KCcyZCcpO1xyXG4gICAgICBsZXQgaW1hZ2U6IEhUTUxJbWFnZUVsZW1lbnQgPSBuZXcgSW1hZ2UoKTtcclxuICAgICAgaW1hZ2Uuc3JjID0gdGhpcy5pbWFnZVNyYygpO1xyXG4gICAgICBpbWFnZS5vbmxvYWQgPSAoKTogdm9pZCA9PiB7XHJcbiAgICAgICAgbGV0IHJhdGlvOiBudW1iZXIgPSBpbWFnZS5oZWlnaHQgLyBkYXRhSG9sZGVyUmVjdC5oZWlnaHQ7XHJcbiAgICAgICAgbGV0IG5ld1dpZHRoOiBudW1iZXIgPSByZWN0Q3JvcHBlci53aWR0aCAqIHJhdGlvO1xyXG4gICAgICAgIGxldCBuZXdIZWlnaHQ6IG51bWJlciA9IHJlY3RDcm9wcGVyLmhlaWdodCAqIHJhdGlvO1xyXG4gICAgICAgIGNhbnZhcy53aWR0aCA9IG5ld1dpZHRoO1xyXG4gICAgICAgIGNhbnZhcy5oZWlnaHQgPSBuZXdIZWlnaHQ7XHJcbiAgICAgICAgY3R4Py5kcmF3SW1hZ2UoXHJcbiAgICAgICAgICBpbWFnZSxcclxuICAgICAgICAgIE1hdGguYWJzKHJlY3RDcm9wcGVyLnggKiByYXRpbykgLSBNYXRoLmFicyhkYXRhSG9sZGVyUmVjdC54ICogcmF0aW8pLFxyXG4gICAgICAgICAgTWF0aC5hYnMocmVjdENyb3BwZXIueSAqIHJhdGlvKSAtIE1hdGguYWJzKGRhdGFIb2xkZXJSZWN0LnkgKiByYXRpbyksXHJcbiAgICAgICAgICBuZXdXaWR0aCxcclxuICAgICAgICAgIG5ld0hlaWdodCxcclxuICAgICAgICAgIDAsXHJcbiAgICAgICAgICAwLFxyXG4gICAgICAgICAgbmV3V2lkdGgsXHJcbiAgICAgICAgICBuZXdIZWlnaHQsXHJcbiAgICAgICAgKTtcclxuXHJcbiAgICAgICAgcmVzb2x2ZShjYW52YXMudG9EYXRhVVJMKGBpbWFnZS8ke3R5cGV9YCwgdGhpcy5xdWFsaXR5LnZhbHVlKSk7XHJcbiAgICAgIH07XHJcbiAgICAgIGltYWdlLm9uZXJyb3IgPSAoZTogc3RyaW5nIHwgRXZlbnQpOiB2b2lkID0+IHtcclxuICAgICAgICByZWplY3QoZSk7XHJcbiAgICAgIH07XHJcbiAgICB9KVxyXG4gICAgICAudGhlbigoZGF0YVVyaTogYW55KTogdm9pZCA9PiB7XHJcbiAgICAgICAgdGhpcy5pbWFnZVNyYy5zZXQoZGF0YVVyaSk7XHJcbiAgICAgICAgdGhpcy5zaG93Q3JvcC5zZXRWYWx1ZShmYWxzZSk7XHJcbiAgICAgICAgdGhpcy5vbkNyb3BTdGF0ZUNoYW5nZSgpO1xyXG4gICAgICAgIHRoaXMubWF4V2lkdGguc2V0KGNhbnZhcz8ud2lkdGgpO1xyXG4gICAgICAgIHRoaXMubWF4SGVpZ2h0LnNldChjYW52YXM/LmhlaWdodCk7XHJcbiAgICAgICAgdGhpcy5sYXN0T3JpZ2luU3JjID0gdGhpcy5vcmlnaW5JbWFnZVNyYyArICcnO1xyXG4gICAgICAgIHRoaXMub3JpZ2luSW1hZ2VTcmMgPSBkYXRhVXJpO1xyXG4gICAgICAgIHRoaXMuJGltYWdlQ2hhbmdlZC5uZXh0KHRoaXMuaW1hZ2VTcmMoKSk7XHJcbiAgICAgIH0pXHJcbiAgICAgIC5jYXRjaCgoZSk6IHZvaWQgPT4ge1xyXG4gICAgICAgIGNvbnNvbGUubG9nKGUpO1xyXG4gICAgICB9KTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBvblJlc3RvcmUoKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5hcnJheUNvcGllZEltYWdlcy5sZW5ndGgpIHtcclxuICAgICAgbGV0IGxhc3RTdGF0ZSA9IHRoaXMuYXJyYXlDb3BpZWRJbWFnZXMucG9wKCk7XHJcbiAgICAgIHRoaXMuaW1hZ2VTcmMuc2V0KGxhc3RTdGF0ZS5sYXN0SW1hZ2UpO1xyXG4gICAgICB0aGlzLm1heFdpZHRoLnNldChsYXN0U3RhdGUud2lkdGgpO1xyXG4gICAgICB0aGlzLm1heEhlaWdodC5zZXQobGFzdFN0YXRlLmhlaWdodCk7XHJcbiAgICAgIHRoaXMub3JpZ2luSW1hZ2VTcmMgPSB0aGlzLmxhc3RPcmlnaW5TcmMgKyAnJztcclxuICAgICAgdGhpcy5ub0VkaXQuc2V0KGZhbHNlKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuaW1hZ2VTcmMuc2V0KHRoaXMubGFzdE9yaWdpblNyYyk7XHJcbiAgICAgIHRoaXMub3JpZ2luSW1hZ2VTcmMgPSB0aGlzLmxhc3RPcmlnaW5TcmMgKyAnJztcclxuICAgICAgdGhpcy5ub0VkaXQuc2V0KGZhbHNlKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLiRpbWFnZUNoYW5nZWQubmV4dCh0aGlzLmltYWdlU3JjKCkpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIG9uUmVtb3ZlKCk6IHZvaWQge1xyXG4gICAgdGhpcy5pbWFnZVNyYy5zZXQobnVsbCk7XHJcbiAgICB0aGlzLm9yaWdpbkltYWdlU3JjID0gbnVsbDtcclxuICAgIHRoaXMubG9hZEltYWdlLnNldChmYWxzZSk7XHJcbiAgICB0aGlzLmFycmF5Q29waWVkSW1hZ2VzID0gW107XHJcbiAgICB0aGlzLmxhc3RPcmlnaW5TcmMgPSBudWxsO1xyXG4gICAgdGhpcy4kaW1hZ2VPcmlnaW5hbC5uZXh0KG51bGwpO1xyXG4gICAgdGhpcy4kaW1hZ2VDaGFuZ2VkLm5leHQobnVsbCk7XHJcbiAgICB0aGlzLmZvcm1hdC5zZXRWYWx1ZSgnanBlZycpO1xyXG4gICAgdGhpcy5tYXhIZWlnaHQuc2V0KDIwMDApO1xyXG4gICAgdGhpcy5tYXhXaWR0aC5zZXQoMjAwMCk7XHJcbiAgICB0aGlzLmNyb3BIZWlnaHQuc2V0VmFsdWUoMTUwKTtcclxuICAgIHRoaXMuY3JvcFdpZHRoLnNldFZhbHVlKDE1MCk7XHJcbiAgICB0aGlzLm1haW50YWluQXNwZWN0UmF0aW8uc2V0VmFsdWUodHJ1ZSk7XHJcbiAgICB0aGlzLnNob3dFZGl0UGFuZWwuc2V0KGZhbHNlKTtcclxuICAgIHRoaXMubm9FZGl0LnNldChmYWxzZSk7XHJcbiAgfVxyXG5cclxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcclxuICAgIHRoaXMudW5zdWJzY3JpYmVBbGwkLm5leHQoKTtcclxuICAgIHRoaXMudW5zdWJzY3JpYmVBbGwkLmNvbXBsZXRlKCk7XHJcbiAgfVxyXG59XHJcbiIsIjxkaXYgKm5nSWY9JyFsb2FkSW1hZ2UoKScgY2xhc3M9J3BsYWNlLWltYWdlJz5cclxuICA8ZGl2IGNsYXNzPSdpbWFnZS1ob2xkZXInXHJcbiAgICAgICBbbmdTdHlsZV09J3sgd2lkdGg6IGNvbmZpZygpPy53aWR0aCxoZWlnaHQ6IGNvbmZpZygpPy5oZWlnaHQsYm9yZGVyUmFkaXVzOiBjb25maWcoKT8uYm9yZGVyUmFkaXVzfSc+XHJcbiAgICA8YnV0dG9uIFttYXRUb29sdGlwXT1cIidVUExPQURfQV9JTUFHRScgfCBpMThuOiBjb25maWcoKT8ubGFuZ3VhZ2VcIiBjbGFzcz0naW1hZ2UtdXBsb2FkLWJ0bicgbWF0LWljb24tYnV0dG9uXHJcbiAgICAgICAgICAgIChjbGljayk9J29uVXBsb2FkKCRldmVudCknPlxyXG4gICAgICA8bWF0LWljb24gY2xhc3M9J21hdC0xOCc+YWRkX2FfcGhvdG88L21hdC1pY29uPlxyXG4gICAgPC9idXR0b24+XHJcbiAgICA8aW5wdXQgI2ltYWdlUGlja2VyIHR5cGU9J2ZpbGUnIGNsYXNzPSdkLW5vbmUnIFtpZF09XCInZmlsZVBpY2tlci0nICsgdXVpZEZpbGVQaWNrZXJcIlxyXG4gICAgICAgICAgIChjaGFuZ2UpPSdoYW5kbGVGaWxlU2VsZWN0KCRldmVudCknIFthY2NlcHRdPSdpbWFnZXNBbGxvd2VkJz5cclxuICA8L2Rpdj5cclxuPC9kaXY+XHJcblxyXG48ZGl2ICpuZ0lmPSdsb2FkSW1hZ2UoKScgY2xhc3M9J3BsYWNlLWltYWdlJz5cclxuICA8ZGl2IGNsYXNzPSdpbWFnZS1ob2xkZXItbG9hZGVkJ1xyXG4gICAgICAgW25nU3R5bGVdPSd7d2lkdGg6IGNvbmZpZygpPy53aWR0aCxoZWlnaHQ6IGNvbmZpZygpPy5oZWlnaHQsYm9yZGVyUmFkaXVzOiBjb25maWcoKT8uYm9yZGVyUmFkaXVzfSc+XHJcbiAgICA8aW1nIFtzcmNdPSdpbWFnZVNyYygpJyBhbHQ9J2ltYWdlLWxvYWRlZCcgW25nU3R5bGVdPSd7IGJvcmRlclJhZGl1czogY29uZmlnKCk/LmJvcmRlclJhZGl1cyB9Jz5cclxuICAgIDxpbnB1dCAjaW1hZ2VQaWNrZXIgdHlwZT0nZmlsZScgY2xhc3M9J2Qtbm9uZScgW2lkXT1cIidmaWxlUGlja2VyLScgKyB1dWlkRmlsZVBpY2tlclwiXHJcbiAgICAgICAgICAgKGNoYW5nZSk9J2hhbmRsZUZpbGVTZWxlY3QoJGV2ZW50KScgW2FjY2VwdF09J2ltYWdlc0FsbG93ZWQnPlxyXG4gIDwvZGl2PlxyXG4gIDxwICpuZ0lmPSdpbWFnZVNyYygpPy5sZW5ndGgnIGNsYXNzPSdtYXQtY2FwdGlvbiBpbWFnZS1jYXB0aW9uJyBbY2xhc3Mud2Fybl09JyhpbWFnZVNyYygpPy5sZW5ndGggfCBjYWxjdWxhdGVTaXplKSA+IDIwMCdcclxuICAgICBbY2xhc3MuZnctNjAwXT0nKGltYWdlU3JjKCk/Lmxlbmd0aCB8IGNhbGN1bGF0ZVNpemUpID4gMjAwJz5cclxuICAgIHt7XCJTSVpFXCIgfCBpMThuOiBjdXJyZW50TGFuZ3VhZ2UoKX19OiB7eyAoaW1hZ2VTcmMoKT8ubGVuZ3RoIHwgY2FsY3VsYXRlU2l6ZSkgfX1LYiAmbmJzcDsge3sgZm9ybWF0LnZhbHVlIH19XHJcbiAgPC9wPlxyXG5cclxuICA8ZGl2IGNsYXNzPSdlZGl0aW5nLWJhci1idG4nPlxyXG4gICAgPGJ1dHRvbiBpZD0ndXBsb2FkLWltZycgKm5nSWY9JyFjb25maWcoKT8uaGlkZUFkZEJ0bicgbWF0LWljb24tYnV0dG9uIChjbGljayk9J29uVXBsb2FkKCRldmVudCknXHJcbiAgICAgICAgICAgIFttYXRUb29sdGlwXT1cIidVUExPQURfQV9JTUFHRScgfCBpMThuOiBjb25maWcoKT8ubGFuZ3VhZ2VcIj5cclxuICAgICAgPG1hdC1pY29uIGNsYXNzPSdtYXQtMTgnPmFkZF9hX3Bob3RvPC9tYXQtaWNvbj5cclxuICAgIDwvYnV0dG9uPlxyXG4gICAgPGJ1dHRvbiBpZD0nZWRpdC1pbWcnICpuZ0lmPSchY29uZmlnKCk/LmhpZGVFZGl0QnRuICYmICFub0VkaXQoKScgbWF0LWljb24tYnV0dG9uIChjbGljayk9J3Nob3dFZGl0UGFuZWwuc2V0KHRydWUpJ1xyXG4gICAgICAgICAgICBbbWF0VG9vbHRpcF09XCInT1BFTl9FRElUT1JfUEFORUwnIHwgaTE4bjogY29uZmlnKCk/Lmxhbmd1YWdlXCI+XHJcbiAgICAgIDxtYXQtaWNvbiBjbGFzcz0nbWF0LTE4Jz5lZGl0PC9tYXQtaWNvbj5cclxuICAgIDwvYnV0dG9uPlxyXG4gICAgPGEgaWQ9J2Rvd25sb2FkLWltZycgKm5nSWY9JyFjb25maWcoKT8uaGlkZURvd25sb2FkQnRuJyBbbWF0VG9vbHRpcF09XCInRE9XTkxPQUQnIHwgaTE4bjogY29uZmlnKCk/Lmxhbmd1YWdlXCJcclxuICAgICAgIFtocmVmXT0naW1hZ2VTcmMoKScgbWF0LWljb24tYnV0dG9uIFtkb3dubG9hZF09J2ltYWdlTmFtZSc+XHJcbiAgICAgIDxtYXQtaWNvbiBjbGFzcz0nbWF0LTE4Jz5jbG91ZF9kb3dubG9hZDwvbWF0LWljb24+XHJcbiAgICA8L2E+XHJcbiAgICA8YnV0dG9uIGlkPSdkZWxldGUtaW1nJyAqbmdJZj0nIWNvbmZpZygpPy5oaWRlRGVsZXRlQnRuJyBtYXQtaWNvbi1idXR0b24gKGNsaWNrKT0nb25SZW1vdmUoKSdcclxuICAgICAgICAgICAgW21hdFRvb2x0aXBdPVwiJ1JFTU9WRScgfCBpMThuOiBjb25maWcoKT8ubGFuZ3VhZ2VcIj5cclxuICAgICAgPG1hdC1pY29uIGNsYXNzPSdtYXQtMTgnPmRlbGV0ZTwvbWF0LWljb24+XHJcbiAgICA8L2J1dHRvbj5cclxuICA8L2Rpdj5cclxuPC9kaXY+XHJcblxyXG48ZGl2ICpuZ0lmPSdzaG93RWRpdFBhbmVsKCknIGlkPSdwb3B1cCcgY2xhc3M9J3BvcHVwJz5cclxuICA8ZGl2IGNsYXNzPSdwb3B1cC1jbGVhcic+XHJcbiAgICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvbiAoY2xpY2spPSdvbkNsb3NlRWRpdFBhbmVsKCknPlxyXG4gICAgICA8bWF0LWljb24gY2xhc3M9J21hdC0xOCc+Y2xlYXI8L21hdC1pY29uPlxyXG4gICAgPC9idXR0b24+XHJcbiAgPC9kaXY+XHJcblxyXG4gIDxkaXYgY2xhc3M9J2ltYWdlLWNvbnRhaW5lcic+XHJcbiAgICA8ZGl2IGNsYXNzPSdpbWFnZS1ob2xkZXItZnVsbCc+XHJcbiAgICAgIDxpbWcgaWQ9J2ltYWdlLWZ1bGwnIFtzcmNdPSdpbWFnZVNyYygpJyBhbHQ9Jyc+XHJcbiAgICAgIDxkaXYgaWQ9J2ltYWdlLWNyb3BwZXInIGNsYXNzPSdpbWFnZS1jcm9wcGVyJz5cclxuICAgICAgICA8ZGl2IGlkPSdpbWFnZS1jcm9wcGVyLWhlYWRlcic+XHJcbiAgICAgICAgICA8bWF0LWljb24+ZHJhZ19pbmRpY2F0b3I8L21hdC1pY29uPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG5cclxuICAgIDxkaXYgY2xhc3M9J2NvbnRyb2wtcGFuZWwnPlxyXG4gICAgICA8cCBjbGFzcz0naXRlbS1wYW5lbCBmdy02MDAnPnt7ICdRVUFMSVRZJyB8IGkxOG46IGNvbmZpZygpPy5sYW5ndWFnZSB9fTwvcD5cclxuICAgICAgPGRpdiBjbGFzcz0ncXVhbGl0eS1jb250YWluZXInPlxyXG4gICAgICAgIDxtYXQtc2xpZGVyIG5nRGVmYXVsdENvbnRyb2wgW2NvbG9yXT0nY29sb3InIGNsYXNzPSd3LTEwMCBtdy0xMDAnIChjaGFuZ2UpPSdvbkNoYW5nZVF1YWxpdHkoKSdcclxuICAgICAgICAgICAgICAgICAgICBbbWF4XT0nMTAwJyBbbWluXT0nMCcgW3N0ZXBdPScxJyBbZGlzY3JldGVdPSd0cnVlJyBbc2hvd1RpY2tNYXJrc109J3RydWUnPlxyXG4gICAgICAgICAgPGlucHV0IG1hdFNsaWRlclRodW1iIFtmb3JtQ29udHJvbF09J3F1YWxpdHknPlxyXG4gICAgICAgIDwvbWF0LXNsaWRlcj5cclxuICAgICAgPC9kaXY+XHJcblxyXG4gICAgICA8ZGl2IGNsYXNzPSdpdGVtLXBhbmVsJz5cclxuICAgICAgICA8c3BhbiBjbGFzcz0nZnctNjAwJz57eyAnTUFYX0RJTUVOU0lPTlMnIHwgaTE4bjogY29uZmlnKCk/Lmxhbmd1YWdlIH19PC9zcGFuPlxyXG4gICAgICAgIDxtYXQtY2hlY2tib3ggY2xhc3M9J2Zsb2F0LXJpZ2h0JyBbZm9ybUNvbnRyb2xdPSdtYWludGFpbkFzcGVjdFJhdGlvJyBbY29sb3JdPSdjb2xvcic+XHJcbiAgICAgICAgICA8c3Bhbj57eyAnQVNQRUNUX1JBVElPJyB8IGkxOG46IGNvbmZpZygpPy5sYW5ndWFnZSB9fTwvc3Bhbj5cclxuICAgICAgICA8L21hdC1jaGVja2JveD5cclxuICAgICAgPC9kaXY+XHJcblxyXG4gICAgICA8ZGl2IGNsYXNzPSdtYXgtZGltZW5zaW9uLWNvbnRhaW5lcic+XHJcbiAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSd3LTQ4JyBbYXBwZWFyYW5jZV09J2FwcGVhcmFuY2UnIFtjb2xvcl09J2NvbG9yJz5cclxuICAgICAgICAgIDxtYXQtbGFiZWw+e3sgJ01BWF9XSURUSF9QWCcgfCBpMThuOiBjb25maWcoKT8ubGFuZ3VhZ2UgfX08L21hdC1sYWJlbD5cclxuICAgICAgICAgIDxpbnB1dCAoY2hhbmdlKT0nb25DaGFuZ2VTaXplKHRydWUsIGZhbHNlKScgbWF0SW5wdXQgW3BsYWNlaG9sZGVyXT1cIidNQVhfV0lEVEhfUFgnIHwgaTE4bjogY29uZmlnKCk/Lmxhbmd1YWdlXCJcclxuICAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT0nbWF4V2lkdGgnIHR5cGU9J251bWJlcicgW21pbl09JzAnIFttYXhdPScyMDAwJz5cclxuICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG5cclxuICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9J3ctNDgnIFthcHBlYXJhbmNlXT0nYXBwZWFyYW5jZScgW2NvbG9yXT0nY29sb3InPlxyXG4gICAgICAgICAgPG1hdC1sYWJlbD57eyAnTUFYX0hFSUdIVF9QWCcgfCBpMThuOiBjb25maWcoKT8ubGFuZ3VhZ2UgfX08L21hdC1sYWJlbD5cclxuICAgICAgICAgIDxpbnB1dCAoY2hhbmdlKT0nb25DaGFuZ2VTaXplKGZhbHNlLCB0cnVlKScgbWF0SW5wdXQgW3BsYWNlaG9sZGVyXT1cIidNQVhfSEVJR0hUX1BYJyB8IGkxOG46IGNvbmZpZygpPy5sYW5ndWFnZVwiXHJcbiAgICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09J21heEhlaWdodCcgdHlwZT0nbnVtYmVyJyBbbWluXT0nMCcgW21heF09JzIwMDAnPlxyXG4gICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgPHAgY2xhc3M9J2l0ZW0tcGFuZWwgZnctNjAwJz57eyAnRk9STUFUJyB8IGkxOG46IGNvbmZpZygpPy5sYW5ndWFnZSB9fTwvcD5cclxuICAgICAgPGRpdiBjbGFzcz0nZm9ybWF0cy1zZWxlY3Rpb24nPlxyXG4gICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0ndy0xMDAgbXctMTAwJyBbYXBwZWFyYW5jZV09J2FwcGVhcmFuY2UnIFtjb2xvcl09J2NvbG9yJz5cclxuICAgICAgICAgIDxtYXQtc2VsZWN0IFtmb3JtQ29udHJvbF09J2Zvcm1hdCcgKHNlbGVjdGlvbkNoYW5nZSk9J29uQ2hhbmdlRm9ybWF0KCknPlxyXG4gICAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9J2xldCBmb3JtYXQgb2YgYWxsRm9ybWF0cycgW3ZhbHVlXT0nZm9ybWF0Jz5cclxuICAgICAgICAgICAgICB7eyBmb3JtYXQgfX1cclxuICAgICAgICAgICAgPC9tYXQtb3B0aW9uPlxyXG4gICAgICAgICAgPC9tYXQtc2VsZWN0PlxyXG4gICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgPGRpdiBjbGFzcz0ncmVmcmVzaC1jb250YWluZXInPlxyXG4gICAgICAgIDxtYXQtY2hlY2tib3ggKGNoYW5nZSk9J29uQ3JvcFN0YXRlQ2hhbmdlKCknIFtmb3JtQ29udHJvbF09J3Nob3dDcm9wJyBbY29sb3JdPSdjb2xvcic+XHJcbiAgICAgICAgICA8cCBjbGFzcz0naXRlbS1wYW5lbCBmdy02MDAnPnt7ICdDUk9QJyB8IGkxOG46IGNvbmZpZygpPy5sYW5ndWFnZSB9fTwvcD5cclxuICAgICAgICA8L21hdC1jaGVja2JveD5cclxuICAgICAgICA8ZGl2IGNsYXNzPSdkLWZsZXggJz5cclxuICAgICAgICAgIDxidXR0b24gY2xhc3M9J2Zsb2F0LXJpZ2h0JyBtYXQtaWNvbi1idXR0b24gW2NvbG9yXT0nY29sb3InIChjbGljayk9J29uUmVzdG9yZSgpJz5cclxuICAgICAgICAgICAgPG1hdC1pY29uPnJlZnJlc2g8L21hdC1pY29uPlxyXG4gICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICA8cCAqbmdJZj0nc2hvd0Nyb3AudmFsdWUnPlxyXG4gICAgICAgICAgICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvbiBbY29sb3JdPSdjb2xvcicgKGNsaWNrKT0nb25Dcm9wKCknPlxyXG4gICAgICAgICAgICAgIDxtYXQtaWNvbj5jcm9wPC9tYXQtaWNvbj5cclxuICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICA8L3A+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj0nc2hvd0Nyb3AudmFsdWUnPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9J2RpbWVuc2lvbi1jb250YWluZXInPlxyXG4gICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSd3LTQ4IG13LTQ4JyBbYXBwZWFyYW5jZV09J2FwcGVhcmFuY2UnIFtjb2xvcl09J2NvbG9yJz5cclxuICAgICAgICAgICAgPG1hdC1sYWJlbD57eyAnV0lEVEhfUFgnIHwgaTE4bjogY29uZmlnKCk/Lmxhbmd1YWdlIH19PC9tYXQtbGFiZWw+XHJcbiAgICAgICAgICAgIDxpbnB1dCAoY2hhbmdlKT0nb25DaGFuZ2VDcm9wKCknIG1hdElucHV0IFtwbGFjZWhvbGRlcl09XCInV0lEVEhfUFgnIHwgaTE4bjogY29uZmlnKCk/Lmxhbmd1YWdlXCJcclxuICAgICAgICAgICAgICAgICAgIFtmb3JtQ29udHJvbF09J2Nyb3BXaWR0aCcgdHlwZT0nbnVtYmVyJyBbbWluXT0nMCcgW21heF09JzIwMDAnPlxyXG4gICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cclxuICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0ndy00OCBtdy00OCcgW2FwcGVhcmFuY2VdPSdhcHBlYXJhbmNlJyBbY29sb3JdPSdjb2xvcic+XHJcbiAgICAgICAgICAgIDxtYXQtbGFiZWw+e3sgJ0hFSUdIVF9QWCcgfCBpMThuOiBjb25maWcoKT8ubGFuZ3VhZ2UgfX08L21hdC1sYWJlbD5cclxuICAgICAgICAgICAgPGlucHV0IChjaGFuZ2UpPSdvbkNoYW5nZUNyb3AoKScgbWF0SW5wdXQgW3BsYWNlaG9sZGVyXT1cIidIRUlHSFRfUFgnIHwgaTE4bjogY29uZmlnKCk/Lmxhbmd1YWdlXCJcclxuICAgICAgICAgICAgICAgICAgIFtmb3JtQ29udHJvbF09J2Nyb3BIZWlnaHQnIHR5cGU9J251bWJlcicgW21pbl09JzAnIFttYXhdPScyMDAwJz5cclxuICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuICAgICAgPGRpdiBjbGFzcz0nc2F2ZS1jb250YWluZXInPlxyXG4gICAgICAgIDxidXR0b24gbWF0LWZsYXQtYnV0dG9uIChjbGljayk9J29uQ2xvc2VFZGl0UGFuZWwoKScgW2NvbG9yXT0nY29sb3InIGNsYXNzPSdzYXZlLWJ1dHRvbic+XHJcbiAgICAgICAgICB7eyAnU0FWRScgfCBpMThuOiBjb25maWcoKT8ubGFuZ3VhZ2V9fVxyXG4gICAgICAgIDwvYnV0dG9uPlxyXG5cclxuICAgICAgICA8cCAqbmdJZj0naW1hZ2VTcmMoKT8ubGVuZ3RoJyBjbGFzcz0nbWF0LWNhcHRpb24gaW1hZ2UtY2FwdGlvbidcclxuICAgICAgICAgICBbY2xhc3Mud2Fybl09JyhpbWFnZVNyYygpPy5sZW5ndGggfCBjYWxjdWxhdGVTaXplKSA+IDIwMCdcclxuICAgICAgICAgICBbY2xhc3MuZnctNjAwXT0nKGltYWdlU3JjKCk/Lmxlbmd0aCB8IGNhbGN1bGF0ZVNpemUpID4gMjAwJz5cclxuICAgICAgICAgIHt7XCJTSVpFXCIgfCBpMThuOiBjdXJyZW50TGFuZ3VhZ2UoKX19OiB7eyAoaW1hZ2VTcmMoKT8ubGVuZ3RoIHwgY2FsY3VsYXRlU2l6ZSkgfX1LYiAmbmJzcDsge3sgZm9ybWF0LnZhbHVlIH19XHJcbiAgICAgICAgPC9wPlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gIDwvZGl2PlxyXG48L2Rpdj5cclxuIl19
@@ -2,4 +2,4 @@
2
2
  * Public API Surface of guachos-image-picker
3
3
  */
4
4
  export * from './lib/guachos-image-picker.component';
5
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljLWFwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3Byb2plY3RzL2d1YWNob3MtaW1hZ2UtcGlja2VyL3NyYy9wdWJsaWMtYXBpLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBRUgsY0FBYyxzQ0FBc0MsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qXG4gKiBQdWJsaWMgQVBJIFN1cmZhY2Ugb2YgZ3VhY2hvcy1pbWFnZS1waWNrZXJcbiAqL1xuXG5leHBvcnQgKiBmcm9tICcuL2xpYi9ndWFjaG9zLWltYWdlLXBpY2tlci5jb21wb25lbnQnO1xuIl19
5
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljLWFwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3Byb2plY3RzL2d1YWNob3MtaW1hZ2UtcGlja2VyL3NyYy9wdWJsaWMtYXBpLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBRUgsY0FBYyxzQ0FBc0MsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qXHJcbiAqIFB1YmxpYyBBUEkgU3VyZmFjZSBvZiBndWFjaG9zLWltYWdlLXBpY2tlclxyXG4gKi9cclxuXHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL2d1YWNob3MtaW1hZ2UtcGlja2VyLmNvbXBvbmVudCc7XHJcbiJdfQ==
@@ -12,13 +12,13 @@ export class CalculateSizePipe {
12
12
  return 0;
13
13
  }
14
14
  }
15
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.4", ngImport: i0, type: CalculateSizePipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe });
16
- static ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "16.1.4", ngImport: i0, type: CalculateSizePipe, name: "calculateSize" });
15
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.4", ngImport: i0, type: CalculateSizePipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe });
16
+ static ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "16.2.4", ngImport: i0, type: CalculateSizePipe, name: "calculateSize" });
17
17
  }
18
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.4", ngImport: i0, type: CalculateSizePipe, decorators: [{
18
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.4", ngImport: i0, type: CalculateSizePipe, decorators: [{
19
19
  type: Pipe,
20
20
  args: [{
21
21
  name: 'calculateSize'
22
22
  }]
23
23
  }] });
24
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FsY3VsYXRlLXNpemUucGlwZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2d1YWNob3MtaW1hZ2UtcGlja2VyL3NyYy91dGlscy9waXBlcy9jYWxjdWxhdGUtc2l6ZS9jYWxjdWxhdGUtc2l6ZS5waXBlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxJQUFJLEVBQWlCLE1BQU0sZUFBZSxDQUFDOztBQUtwRCxNQUFNLE9BQU8saUJBQWlCO0lBRTVCLFNBQVMsQ0FBQyxXQUFtQjtRQUMzQixJQUFJLENBQUMsV0FBVyxFQUFFO1lBQ2hCLE9BQU8sQ0FBQyxDQUFDO1NBQ1Y7UUFFRCxJQUFJLFdBQVcsRUFBRTtZQUNmLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLFdBQVcsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDO1NBQ2xEO2FBQU07WUFDTCxPQUFPLENBQUMsQ0FBQztTQUNWO0lBQ0gsQ0FBQzt1R0FaVSxpQkFBaUI7cUdBQWpCLGlCQUFpQjs7MkZBQWpCLGlCQUFpQjtrQkFIN0IsSUFBSTttQkFBQztvQkFDSixJQUFJLEVBQUUsZUFBZTtpQkFDdEIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBQaXBlLCBQaXBlVHJhbnNmb3JtIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbkBQaXBlKHtcbiAgbmFtZTogJ2NhbGN1bGF0ZVNpemUnXG59KVxuZXhwb3J0IGNsYXNzIENhbGN1bGF0ZVNpemVQaXBlIGltcGxlbWVudHMgUGlwZVRyYW5zZm9ybSB7XG5cbiAgdHJhbnNmb3JtKGltYWdlTGVuZ3RoOiBudW1iZXIpOiBudW1iZXIge1xuICAgIGlmICghaW1hZ2VMZW5ndGgpIHtcbiAgICAgIHJldHVybiAwO1xuICAgIH1cblxuICAgIGlmIChpbWFnZUxlbmd0aCkge1xuICAgICAgcmV0dXJuIE1hdGguY2VpbCgoKDMgLyA0KSAqIGltYWdlTGVuZ3RoKSAvIDEwMjQpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gMDtcbiAgICB9XG4gIH1cbn1cbiJdfQ==
24
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FsY3VsYXRlLXNpemUucGlwZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2d1YWNob3MtaW1hZ2UtcGlja2VyL3NyYy91dGlscy9waXBlcy9jYWxjdWxhdGUtc2l6ZS9jYWxjdWxhdGUtc2l6ZS5waXBlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxJQUFJLEVBQWlCLE1BQU0sZUFBZSxDQUFDOztBQUtwRCxNQUFNLE9BQU8saUJBQWlCO0lBRTVCLFNBQVMsQ0FBQyxXQUFtQjtRQUMzQixJQUFJLENBQUMsV0FBVyxFQUFFO1lBQ2hCLE9BQU8sQ0FBQyxDQUFDO1NBQ1Y7UUFFRCxJQUFJLFdBQVcsRUFBRTtZQUNmLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLFdBQVcsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDO1NBQ2xEO2FBQU07WUFDTCxPQUFPLENBQUMsQ0FBQztTQUNWO0lBQ0gsQ0FBQzt1R0FaVSxpQkFBaUI7cUdBQWpCLGlCQUFpQjs7MkZBQWpCLGlCQUFpQjtrQkFIN0IsSUFBSTttQkFBQztvQkFDSixJQUFJLEVBQUUsZUFBZTtpQkFDdEIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBQaXBlLCBQaXBlVHJhbnNmb3JtIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcblxyXG5AUGlwZSh7XHJcbiAgbmFtZTogJ2NhbGN1bGF0ZVNpemUnXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBDYWxjdWxhdGVTaXplUGlwZSBpbXBsZW1lbnRzIFBpcGVUcmFuc2Zvcm0ge1xyXG5cclxuICB0cmFuc2Zvcm0oaW1hZ2VMZW5ndGg6IG51bWJlcik6IG51bWJlciB7XHJcbiAgICBpZiAoIWltYWdlTGVuZ3RoKSB7XHJcbiAgICAgIHJldHVybiAwO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChpbWFnZUxlbmd0aCkge1xyXG4gICAgICByZXR1cm4gTWF0aC5jZWlsKCgoMyAvIDQpICogaW1hZ2VMZW5ndGgpIC8gMTAyNCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4gMDtcclxuICAgIH1cclxuICB9XHJcbn1cclxuIl19