nxt-color-picker 16.2.0 → 17.0.0

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.
@@ -631,13 +631,13 @@ export class ColorPickerComponent {
631
631
  formatAlpha(a) {
632
632
  return a?.toFixed(2).replace(/\.?0+$/, '');
633
633
  }
634
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.2", ngImport: i0, type: ColorPickerComponent, deps: [{ token: i0.ElementRef }, { token: i0.ChangeDetectorRef }, { token: i1.ColorPickerService }], target: i0.ɵɵFactoryTarget.Component }); }
635
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.2", type: ColorPickerComponent, selector: "nxt-color-picker", host: { listeners: { "document:keyup.esc": "onCancel($event)", "document:keyup.enter": "onAccept($event)", "document:mousedown": "onFocusChange($event)", "document:focusin": "onFocusChange($event)" } }, ngImport: i0, template: "<div class=\"color-picker\"\r\n (click)=\"$event.stopPropagation()\"\r\n [ngStyle]=\"{\r\n visibility: !show ? 'hidden' : 'visible',\r\n width: width || '',\r\n height: height || ''\r\n }\"\r\n *ngIf=\"show\">\r\n <div *ngIf=\"dialogDisplay == 'popup'\"\r\n class=\"color-picker__arrow\"></div>\r\n <div *ngIf=\"mode == colorModeInternal.color\"\r\n class=\"color-picker__sv\"\r\n nxtSlider\r\n [rgX]=\"1\"\r\n [rgY]=\"1\"\r\n (newValue)=\"onColorChange($event)\"\r\n (dragStart)=\"onDragStart('saturation-lightness')\"\r\n (dragEnd)=\"onDragEnd('saturation-lightness')\"\r\n [ngStyle]=\"{ \r\n backgroundColor: hueSliderColor || ''\r\n }\">\r\n <div class=\"color-picker__cursor color-picker__cursor--sv\"\r\n [ngClass]=\"{ 'color-picker__cursor--light': svSliderLight }\"\r\n [ngStyle]=\"{\r\n top: (slider?.v || 0) * 100 + '%',\r\n left: (slider?.s || 0) * 100 + '%'\r\n }\"></div>\r\n </div>\r\n <div class=\"color-picker__controls\">\r\n <div class=\"color-picker__selected\">\r\n <div class=\"color-picker__selected-color\">\r\n <div [ngStyle]=\"{ \r\n backgroundColor: selectedColor || ''\r\n }\"><button *ngIf=\"presetColorsEditable && !(maxPresetColors && (presetColors?.length || 0) >= maxPresetColors)\"\r\n type=\"button\"\r\n title=\"Add color to preset\"\r\n i18n-title=\"@@nxt-color-picker.button.add-color\"\r\n class=\"color-picker__add-selected\"\r\n [ngClass]=\"{ 'color-picker__add-selected--light': alphaSliderLight }\"\r\n (click)=\"onAddPresetColor(selectedColor)\"><svg xmlns=\"http://www.w3.org/2000/svg\"\r\n width=\"24\"\r\n height=\"24\"\r\n viewBox=\"0 0 24 24\">\r\n <path d=\"M19 13h-6v6h-2v-6H5v-2h6V5h2v6h6v2z\" />\r\n <path d=\"M0 0h24v24H0z\"\r\n fill=\"none\" />\r\n </svg></button></div>\r\n </div>\r\n </div>\r\n <div class=\"color-picker__hav\">\r\n <div *ngIf=\"mode == colorModeInternal.color\"\r\n class=\"color-picker__slider color-picker__slider--hue\"\r\n nxtSlider\r\n [rgX]=\"1\"\r\n (newValue)=\"onHueChange($event)\"\r\n (dragStart)=\"onDragStart('hue')\"\r\n (dragEnd)=\"onDragEnd('hue')\">\r\n <div class=\"color-picker__cursor\"\r\n [ngClass]=\"{ 'color-picker__cursor--light': hueSliderLight }\"\r\n [ngStyle]=\"{\r\n left: (slider?.h || 0) * 100 + '%'\r\n }\"></div>\r\n </div>\r\n <div *ngIf=\"mode == colorModeInternal.grayscale\"\r\n class=\"color-picker__slider color-picker__slider--value\"\r\n nxtSlider\r\n [rgX]=\"1\"\r\n (newValue)=\"onValueChange($event)\"\r\n (dragStart)=\"onDragStart('value')\"\r\n (dragEnd)=\"onDragEnd('value')\">\r\n <div class=\"color-picker__cursor\"\r\n [ngClass]=\"{ 'color-picker__cursor--light': valueSliderLight }\"\r\n [ngStyle]=\"{\r\n left: (1 - (slider?.v || 0)) * 100 + '%'\r\n }\"></div>\r\n </div>\r\n <div *ngIf=\"alphaChannel != 'disabled'\"\r\n class=\"color-picker__slider color-picker__slider--alpha\"\r\n nxtSlider\r\n [rgX]=\"1\"\r\n (newValue)=\"onAlphaChange($event)\"\r\n (dragStart)=\"onDragStart('alpha')\"\r\n (dragEnd)=\"onDragEnd('alpha')\">\r\n <div class=\"color-picker__slider--alpha-bg\"\r\n [ngStyle]=\"{\r\n backgroundImage: alphaSliderColor || ''\r\n }\">\r\n <div class=\"color-picker__cursor\"\r\n [ngClass]=\"{ 'color-picker__cursor--light': alphaSliderLight }\"\r\n [ngStyle]=\"{\r\n left: (slider?.a || 0) * 100 + '%'\r\n }\"></div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div *ngIf=\"!disableInput && (mode == colorModeInternal.color || mode == colorModeInternal.grayscale)\"\r\n class=\"color-picker__inputs\">\r\n <div class=\"color-picker__input-fields\">\r\n <ng-container *ngIf=\"mode == colorModeInternal.grayscale; else formatSwitch\">\r\n <div class=\"color-picker__input-field\">\r\n <input type=\"number\"\r\n pattern=\"[0-9]*\"\r\n min=\"0\"\r\n max=\"100\"\r\n nxtText\r\n [rg]=\"100\"\r\n [value]=\"hslaText?.l?.toFixed(0)\"\r\n (keyup.enter)=\"onAccept($event)\"\r\n (newValue)=\"onValueInput($event)\" />\r\n <span class=\"color-picker__input-field-label\">V</span>\r\n </div>\r\n <div *ngIf=\"alphaChannel != 'disabled'\"\r\n class=\"color-picker__input-field\">\r\n <input type=\"number\"\r\n pattern=\"[0-9]+([\\.,][0-9]{1,2})?\"\r\n min=\"0\"\r\n max=\"1\"\r\n step=\"0.01\"\r\n nxtText\r\n [rg]=\"1\"\r\n [value]=\"formatAlpha(hslaText?.a)\"\r\n (keyup.enter)=\"onAccept($event)\"\r\n (newValue)=\"onAlphaInput($event)\" />\r\n <span class=\"color-picker__input-field-label\">A</span>\r\n </div>\r\n </ng-container>\r\n <ng-template #formatSwitch>\r\n <ng-container [ngSwitch]=\"format\">\r\n <ng-container *ngSwitchCase=\"'hsla'\">\r\n <div class=\"color-picker__input-field\">\r\n <input type=\"number\"\r\n pattern=\"[0-9]*\"\r\n min=\"0\"\r\n max=\"360\"\r\n nxtText\r\n [rg]=\"360\"\r\n [value]=\"hslaText?.h?.toFixed(0)\"\r\n (keyup.enter)=\"onAccept($event)\"\r\n (newValue)=\"onHueInput($event)\" />\r\n <span class=\"color-picker__input-field-label\">H</span>\r\n </div>\r\n <div class=\"color-picker__input-field\">\r\n <input type=\"number\"\r\n pattern=\"[0-9]*\"\r\n min=\"0\"\r\n max=\"100\"\r\n nxtText\r\n [rg]=\"100\"\r\n [value]=\"hslaText?.s?.toFixed(0)\"\r\n (keyup.enter)=\"onAccept($event)\"\r\n (newValue)=\"onSaturationInput($event)\" />\r\n <span class=\"color-picker__input-field-label\">S</span>\r\n </div>\r\n <div class=\"color-picker__input-field\">\r\n <input type=\"number\"\r\n pattern=\"[0-9]*\"\r\n min=\"0\"\r\n max=\"100\"\r\n nxtText\r\n [rg]=\"100\"\r\n [value]=\"hslaText?.l?.toFixed(0)\"\r\n (keyup.enter)=\"onAccept($event)\"\r\n (newValue)=\"onLightnessInput($event)\" />\r\n <span class=\"color-picker__input-field-label\">L</span>\r\n </div>\r\n <div *ngIf=\"alphaChannel != 'disabled'\"\r\n class=\"color-picker__input-field\">\r\n <input type=\"number\"\r\n pattern=\"[0-9]+([\\.,][0-9]{1,2})?\"\r\n min=\"0\"\r\n max=\"1\"\r\n step=\"0.01\"\r\n nxtText\r\n [rg]=\"1\"\r\n [value]=\"formatAlpha(hslaText?.a)\"\r\n (keyup.enter)=\"onAccept($event)\"\r\n (newValue)=\"onAlphaInput($event)\" />\r\n <span class=\"color-picker__input-field-label\">A</span>\r\n </div>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"'rgba'\">\r\n <div class=\"color-picker__input-field\">\r\n <input type=\"number\"\r\n pattern=\"[0-9]*\"\r\n min=\"0\"\r\n max=\"255\"\r\n nxtText\r\n [rg]=\"255\"\r\n [value]=\"rgbaText?.r?.toFixed(0)\"\r\n (keyup.enter)=\"onAccept($event)\"\r\n (newValue)=\"onRedInput($event)\" />\r\n <span class=\"color-picker__input-field-label\">R</span>\r\n </div>\r\n <div class=\"color-picker__input-field\">\r\n <input type=\"number\"\r\n pattern=\"[0-9]*\"\r\n min=\"0\"\r\n max=\"255\"\r\n nxtText\r\n [rg]=\"255\"\r\n [value]=\"rgbaText?.g?.toFixed(0)\"\r\n (keyup.enter)=\"onAccept($event)\"\r\n (newValue)=\"onGreenInput($event)\" />\r\n <span class=\"color-picker__input-field-label\">G</span>\r\n </div>\r\n <div class=\"color-picker__input-field\">\r\n <input type=\"number\"\r\n pattern=\"[0-9]*\"\r\n min=\"0\"\r\n max=\"255\"\r\n nxtText\r\n [rg]=\"255\"\r\n [value]=\"rgbaText?.b?.toFixed(0)\"\r\n (keyup.enter)=\"onAccept($event)\"\r\n (newValue)=\"onBlueInput($event)\" />\r\n <span class=\"color-picker__input-field-label\">B</span>\r\n </div>\r\n <div *ngIf=\"alphaChannel != 'disabled'\"\r\n class=\"color-picker__input-field\">\r\n <input type=\"number\"\r\n pattern=\"[0-9]+([\\.,][0-9]{1,2})?\"\r\n min=\"0\"\r\n max=\"1\"\r\n step=\"0.01\"\r\n nxtText\r\n [rg]=\"1\"\r\n [value]=\"formatAlpha(hslaText?.a)\"\r\n (keyup.enter)=\"onAccept($event)\"\r\n (newValue)=\"onAlphaInput($event)\" />\r\n <span class=\"color-picker__input-field-label\">A</span>\r\n </div>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"'cmyk'\">\r\n <div class=\"color-picker__input-field\">\r\n <input type=\"number\"\r\n pattern=\"[0-9]*\"\r\n min=\"0\"\r\n max=\"100\"\r\n nxtText\r\n [rg]=\"100\"\r\n [value]=\"cmykText?.c?.toFixed(0)\"\r\n (keyup.enter)=\"onAccept($event)\"\r\n (newValue)=\"onCyanInput($event)\" />\r\n <span class=\"color-picker__input-field-label\">C</span>\r\n </div>\r\n <div class=\"color-picker__input-field\">\r\n <input type=\"number\"\r\n pattern=\"[0-9]*\"\r\n min=\"0\"\r\n max=\"100\"\r\n nxtText\r\n [rg]=\"100\"\r\n [value]=\"cmykText?.m?.toFixed(0)\"\r\n (keyup.enter)=\"onAccept($event)\"\r\n (newValue)=\"onMagentaInput($event)\" />\r\n <span class=\"color-picker__input-field-label\">M</span>\r\n </div>\r\n <div class=\"color-picker__input-field\">\r\n <input type=\"number\"\r\n pattern=\"[0-9]*\"\r\n min=\"0\"\r\n max=\"100\"\r\n nxtText\r\n [rg]=\"100\"\r\n [value]=\"cmykText?.y?.toFixed(0)\"\r\n (keyup.enter)=\"onAccept($event)\"\r\n (newValue)=\"onYellowInput($event)\" />\r\n <span class=\"color-picker__input-field-label\">Y</span>\r\n </div>\r\n <div class=\"color-picker__input-field\">\r\n <input type=\"number\"\r\n pattern=\"[0-9]*\"\r\n min=\"0\"\r\n max=\"100\"\r\n nxtText\r\n [rg]=\"100\"\r\n [value]=\"cmykText?.k?.toFixed(0)\"\r\n (keyup.enter)=\"onAccept($event)\"\r\n (newValue)=\"onBlackInput($event)\" />\r\n <span class=\"color-picker__input-field-label\">K</span>\r\n </div>\r\n <div *ngIf=\"alphaChannel != 'disabled'\"\r\n class=\"color-picker__input-field\">\r\n <input type=\"number\"\r\n pattern=\"[0-9]+([\\.,][0-9]{1,2})?\"\r\n min=\"0\"\r\n max=\"1\"\r\n step=\"0.01\"\r\n nxtText\r\n [rg]=\"1\"\r\n [value]=\"formatAlpha(cmykText?.a)\"\r\n (keyup.enter)=\"onAccept($event)\"\r\n (newValue)=\"onAlphaInput($event)\" />\r\n <span class=\"color-picker__input-field-label\">A</span>\r\n </div>\r\n </ng-container>\r\n <ng-container *ngSwitchDefault>\r\n <div class=\"color-picker__input-field\">\r\n <input nxtText\r\n [value]=\"hexText\"\r\n (blur)=\"onHexInput()\"\r\n (keyup.enter)=\"onAccept($event)\"\r\n (newValue)=\"onHexInput($event)\" />\r\n <span class=\"color-picker__input-field-label\">Hex</span>\r\n </div>\r\n <div *ngIf=\"alphaChannel == 'forced'\"\r\n class=\"color-picker__input-field\">\r\n <input type=\"number\"\r\n pattern=\"[0-9]+([\\.,][0-9]{1,2})?\"\r\n min=\"0\"\r\n max=\"1\"\r\n step=\"0.01\"\r\n nxtText\r\n [rg]=\"1\"\r\n [value]=\"formatAlpha(hexAlpha)\"\r\n (keyup.enter)=\"onAccept($event)\"\r\n (newValue)=\"onAlphaInput($event)\" />\r\n <span class=\"color-picker__input-field-label\">A</span>\r\n </div>\r\n </ng-container>\r\n </ng-container>\r\n </ng-template>\r\n </div>\r\n <div *ngIf=\"mode == colorModeInternal.color\"\r\n class=\"color-picker__input-type\">\r\n <span class=\"color-picker__input-type-arrow\"\r\n (click)=\"onFormatToggle(1)\"></span>\r\n <span class=\"color-picker__input-type-arrow\"\r\n (click)=\"onFormatToggle(-1)\"></span>\r\n </div>\r\n </div>\r\n <ng-container *ngIf=\"presetColors?.length\">\r\n <div class=\"color-picker__separator\"></div>\r\n <div class=\"color-picker__preset\">\r\n <div *ngIf=\"presetLabel\"\r\n class=\"color-picker__preset-label\">\r\n <ng-container *ngIf=\"presetLabel === true; else stringLabel\"\r\n i18n=\"@@nxt-color-picker.preset-colors\">Preset colors</ng-container>\r\n <ng-template #stringLabel>{{ presetLabel }}</ng-template>\r\n </div>\r\n <div *ngIf=\"presetColors?.length\"\r\n class=\"color-picker__preset-items\">\r\n <ng-container *ngFor=\"let color of presetColors\">\r\n <div *ngIf=\"stringToRgba(color) as rgba\"\r\n class=\"color-picker__preset-item\"\r\n [title]=\"color\"\r\n (click)=\"setColorFromString(color)\">\r\n <div class=\"color-picker__preset-item-fill\"\r\n [ngStyle]=\"{ \r\n backgroundColor: rgba || ''\r\n }\"><button *ngIf=\"presetColorsEditable\"\r\n type=\"button\"\r\n title=\"Remove Color\"\r\n i18n-title=\"@@nxt-color-picker.button.remove-color\"\r\n class=\"color-picker__remove-selected\"\r\n (click)=\"onRemovePresetColor(color)\"><svg xmlns=\"http://www.w3.org/2000/svg\"\r\n width=\"24\"\r\n height=\"24\"\r\n viewBox=\"0 0 24 24\">\r\n <path d=\"M19 6.41L17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12z\" />\r\n <path d=\"M0 0h24v24H0z\"\r\n fill=\"none\" />\r\n </svg></button></div>\r\n </div>\r\n </ng-container>\r\n <div *ngFor=\"let i of fill(50)\"\r\n class=\"color-picker__preset-item\"></div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n <div *ngIf=\"okButton || cancelButton\"\r\n class=\"color-picker__buttons\">\r\n <button *ngIf=\"cancelButton\"\r\n type=\"button\"\r\n (click)=\"onCancel($event)\"\r\n i18n=\"@@nxt-color-picker.button.cancel\">Cancel</button>\r\n <button *ngIf=\"okButton\"\r\n type=\"button\"\r\n (click)=\"onAccept($event)\"\r\n i18n=\"@@nxt-color-picker.button.ok\">OK</button>\r\n </div>\r\n</div>\r\n", styles: [".color-picker{position:relative;-webkit-user-select:none;user-select:none;background-color:#fff;box-shadow:0 8px 10px 1px #00000024,0 3px 14px 2px #0000001f,0 5px 5px -3px #0003;display:flex;flex-direction:column}.color-picker *{box-sizing:border-box;margin:0;font-size:12px}.color-picker .color-picker__arrow{height:0;width:0;border-style:solid;position:absolute;z-index:999999}.color-picker .color-picker__cursor{cursor:pointer;position:absolute;border-radius:50%;width:16px;height:16px;border:#222222 solid 2px;margin:0 -8px;transition:border .2s linear}.color-picker .color-picker__cursor.color-picker__cursor--sv{margin:-8px}.color-picker .color-picker__cursor.color-picker__cursor--light{border-color:#dadada}.color-picker .color-picker__sv{position:relative;direction:ltr;width:100%;height:130px;border:none;cursor:pointer;touch-action:manipulation;background-image:linear-gradient(to bottom,rgba(0,0,0,0) 0%,rgb(0,0,0) 100%),linear-gradient(to right,rgb(255,255,255) 0%,rgba(255,255,255,0) 100%);background-size:100% 100%}.color-picker .color-picker__controls{display:flex;margin:8px;align-items:center}.color-picker .color-picker__controls .color-picker__selected{margin:4px;flex:48px 0 0}.color-picker .color-picker__controls .color-picker__hav{margin:-4px -4px -4px 0;flex:auto 1 1}.color-picker .color-picker__selected-color{width:48px;height:48px;display:flex;align-items:stretch;justify-content:stretch;border-radius:50%;background-size:16px;background-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZlcnNpb249IjEuMSIgeD0iMCIgeT0iMCIgd2lkdGg9IjEwMCIgaGVpZ2h0PSIxMDAiIHZpZXdCb3g9IjAgMCAxMDAgMTAwIiBlbmFibGUtYmFja2dyb3VuZD0ibmV3IDAgMCAxMDAgMTAwIiB4bWw6c3BhY2U9InByZXNlcnZlIj48cmVjdCBmaWxsPSIjQ0NDQ0NDIiB3aWR0aD0iNTAiIGhlaWdodD0iNTAiLz48cmVjdCB4PSI1MCIgeT0iNTAiIGZpbGw9IiNDQ0NDQ0MiIHdpZHRoPSI1MCIgaGVpZ2h0PSI1MCIvPjxyZWN0IHk9IjUwIiBmaWxsPSIjRkZGRkZGIiB3aWR0aD0iNTAiIGhlaWdodD0iNTAiLz48cmVjdCB4PSI1MCIgZmlsbD0iI0ZGRkZGRiIgd2lkdGg9IjUwIiBoZWlnaHQ9IjUwIi8+PC9zdmc+);background-repeat:repeat;box-shadow:0 0 8px -2px #00000080}.color-picker .color-picker__selected-color div{width:100%;height:100%;border-radius:50%}.color-picker .color-picker__add-selected{background:none;border:none;padding:0;width:100%;margin:0;color:#222;transition:color .2s linear;display:flex;align-items:center;justify-content:center;height:100%}.color-picker .color-picker__add-selected svg{fill:currentcolor;width:24px;height:auto}.color-picker .color-picker__add-selected.color-picker__add-selected--light{color:#dadada}.color-picker .color-picker__hav{display:flex;flex-wrap:wrap}.color-picker .color-picker__slider{width:100%;flex:100% 1 1;height:16px;margin:8px;position:relative}.color-picker .color-picker__slider.color-picker__slider--hue{background-size:100% 100%;background-image:linear-gradient(to right,rgb(255,0,0) 0%,rgb(255,255,0) 16.6666666667%,rgb(0,255,0) 33.3333333333%,rgb(0,255,255) 50%,rgb(0,0,255) 66.6666666667%,rgb(255,0,255) 83.3333333333%,rgb(255,0,0) 100%)}.color-picker .color-picker__slider.color-picker__slider--value{background-size:100% 100%;background-image:linear-gradient(to right,rgb(0,0,0) 0%,rgb(255,255,255) 100%)}.color-picker .color-picker__slider.color-picker__slider--alpha{background-size:16px;background-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZlcnNpb249IjEuMSIgeD0iMCIgeT0iMCIgd2lkdGg9IjEwMCIgaGVpZ2h0PSIxMDAiIHZpZXdCb3g9IjAgMCAxMDAgMTAwIiBlbmFibGUtYmFja2dyb3VuZD0ibmV3IDAgMCAxMDAgMTAwIiB4bWw6c3BhY2U9InByZXNlcnZlIj48cmVjdCBmaWxsPSIjQ0NDQ0NDIiB3aWR0aD0iNTAiIGhlaWdodD0iNTAiLz48cmVjdCB4PSI1MCIgeT0iNTAiIGZpbGw9IiNDQ0NDQ0MiIHdpZHRoPSI1MCIgaGVpZ2h0PSI1MCIvPjxyZWN0IHk9IjUwIiBmaWxsPSIjRkZGRkZGIiB3aWR0aD0iNTAiIGhlaWdodD0iNTAiLz48cmVjdCB4PSI1MCIgZmlsbD0iI0ZGRkZGRiIgd2lkdGg9IjUwIiBoZWlnaHQ9IjUwIi8+PC9zdmc+);background-repeat:repeat}.color-picker .color-picker__slider.color-picker__slider--alpha .color-picker__slider--alpha-bg{position:absolute;inset:0}.color-picker .color-picker__inputs{display:flex;margin:8px;align-items:flex-start}.color-picker .color-picker__inputs .color-picker__input-fields{flex:auto 1 1}.color-picker .color-picker__inputs .color-picker__input-type{flex:24px 0 0}.color-picker .color-picker__input-fields{display:flex}.color-picker .color-picker__input-fields .color-picker__input-field{margin:4px;display:flex;flex-wrap:wrap;align-items:flex-start;justify-content:center;flex:20% 1 1}.color-picker .color-picker__input-fields .color-picker__input-field input{text-align:center;font-size:12px;height:24px;-webkit-appearance:none;appearance:none;flex:100% 1 1;padding:1px;border:#999 solid 1px;width:100%;background:none;min-width:0}.color-picker .color-picker__input-fields .color-picker__input-field input:invalid{box-shadow:none}.color-picker .color-picker__input-fields .color-picker__input-field input::-webkit-inner-spin-button,.color-picker .color-picker__input-fields .color-picker__input-field input::-webkit-outer-spin-button{-webkit-appearance:none;appearance:none;margin:0}.color-picker .color-picker__input-fields .color-picker__input-field .color-picker__input-field-label{flex:100% 1 1;display:block;text-align:center;margin-top:4px}.color-picker .color-picker__input-type{width:24px;height:24px;margin-top:4px;display:flex;flex-wrap:wrap;background-size:contain;background-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZlcnNpb249IjEuMSIgeD0iMCIgeT0iMCIgd2lkdGg9IjEwMCIgaGVpZ2h0PSIxMDAiIHZpZXdCb3g9IjAgMCAxMDAgMTAwIiBlbmFibGUtYmFja2dyb3VuZD0ibmV3IDAgMCAxMDAgMTAwIiB4bWw6c3BhY2U9InByZXNlcnZlIj48cG9seWdvbiBmaWxsPSIjMzMzMzMzIiBwb2ludHM9IjUwIDE2IDMwIDQ0IDcwIDQ0ICIvPjxwb2x5Z29uIGZpbGw9IiMzMzMzMzMiIHBvaW50cz0iNTAgODQgNzAgNTYgMzAgNTYgIi8+PC9zdmc+);background-repeat:no-repeat;background-position:center}.color-picker .color-picker__input-type .color-picker__input-type-arrow{display:block;cursor:pointer;flex:100% 1 1;width:100%;height:50%}.color-picker .color-picker__separator{border-top:1px solid #999;margin-left:8px;margin-right:8px;flex:100% 1 1}.color-picker .color-picker__preset{display:flex;margin:8px;align-items:center;flex-wrap:wrap}.color-picker .color-picker__preset-label{margin:4px;flex:100% 1 1}.color-picker .color-picker__preset-items{display:flex;flex:100% 1 1;flex-wrap:wrap;align-items:flex-start}.color-picker .color-picker__preset-items .color-picker__preset-item{position:relative;flex:20px 1 1;background-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZlcnNpb249IjEuMSIgeD0iMCIgeT0iMCIgd2lkdGg9IjEwMCIgaGVpZ2h0PSIxMDAiIHZpZXdCb3g9IjAgMCAxMDAgMTAwIiBlbmFibGUtYmFja2dyb3VuZD0ibmV3IDAgMCAxMDAgMTAwIiB4bWw6c3BhY2U9InByZXNlcnZlIj48cmVjdCBmaWxsPSIjQ0NDQ0NDIiB3aWR0aD0iNTAiIGhlaWdodD0iNTAiLz48cmVjdCB4PSI1MCIgeT0iNTAiIGZpbGw9IiNDQ0NDQ0MiIHdpZHRoPSI1MCIgaGVpZ2h0PSI1MCIvPjxyZWN0IHk9IjUwIiBmaWxsPSIjRkZGRkZGIiB3aWR0aD0iNTAiIGhlaWdodD0iNTAiLz48cmVjdCB4PSI1MCIgZmlsbD0iI0ZGRkZGRiIgd2lkdGg9IjUwIiBoZWlnaHQ9IjUwIi8+PC9zdmc+);background-size:100% 100%;margin:4px;border-radius:4px;border:1px solid #999;cursor:pointer}.color-picker .color-picker__preset-items .color-picker__preset-item .color-picker__preset-item-fill{position:relative;width:100%;padding-bottom:100%;border-radius:3px}.color-picker .color-picker__preset-items .color-picker__preset-item:empty{margin-top:0;margin-bottom:0;border-top:0;border-bottom:0}.color-picker .color-picker__remove-selected{border:none;padding:0;margin:0;color:#222;transition:color .2s linear;align-items:center;justify-content:center;box-shadow:0 0 8px -2px #00000080;position:absolute;width:12px;height:12px;right:-6px;top:-6px;background:#fff;border-radius:50%;display:flex}.color-picker .color-picker__remove-selected svg{fill:currentcolor;width:100%;height:auto}.color-picker .color-picker__buttons{display:flex;margin:0 8px 8px;align-items:center;flex-wrap:wrap;justify-content:flex-end}.color-picker .color-picker__buttons button{flex:auto 0 0;margin:4px;color:var(--nxt-color-picker-button-color, inherit);background:var(--nxt-color-picker-button-background, #dadada);padding:var(--nxt-color-picker-button-padding, 4px 8px);border:var(--nxt-color-picker-button-border, none);border-radius:var(--nxt-color-picker-button-border-radius, 4px);font-size:var(--nxt-color-picker-button-font-size, inherit);font-weight:var(--nxt-color-picker-button-font-weight, inherit)}:host-context(.color-picker__arrow--top) .color-picker{margin-bottom:16px}:host-context(.color-picker__arrow--top) .color-picker__arrow{border-width:12px 6px;border-color:#999 rgba(0,0,0,0) rgba(0,0,0,0) rgba(0,0,0,0);left:12px;bottom:-24px}:host-context(.color-picker__arrow--left) .color-picker{margin-right:16px}:host-context(.color-picker__arrow--left) .color-picker__arrow{border-width:6px 12px;border-color:rgba(0,0,0,0) rgba(0,0,0,0) rgba(0,0,0,0) #999;top:12px;left:230px}:host-context(.color-picker__arrow--right) .color-picker{margin-left:16px}:host-context(.color-picker__arrow--right) .color-picker__arrow{border-width:6px 12px;border-color:rgba(0,0,0,0) #999 rgba(0,0,0,0) rgba(0,0,0,0);top:12px;left:-24px}:host-context(.color-picker__arrow--bottom) .color-picker{margin-top:16px}:host-context(.color-picker__arrow--bottom) .color-picker__arrow{border-width:12px 6px;border-color:rgba(0,0,0,0) rgba(0,0,0,0) #999 rgba(0,0,0,0);top:-24px;left:12px}\n"], dependencies: [{ kind: "directive", type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "directive", type: i2.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: i2.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "directive", type: i2.NgSwitchDefault, selector: "[ngSwitchDefault]" }, { kind: "directive", type: i3.TextDirective, selector: "[nxtText]", inputs: ["rg", "nxtText"], outputs: ["newValue"] }, { kind: "directive", type: i4.SliderDirective, selector: "[nxtSlider]", inputs: ["rgX", "rgY", "nxtSlider"], outputs: ["dragEnd", "dragStart", "newValue"] }] }); }
634
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.1", ngImport: i0, type: ColorPickerComponent, deps: [{ token: i0.ElementRef }, { token: i0.ChangeDetectorRef }, { token: i1.ColorPickerService }], target: i0.ɵɵFactoryTarget.Component }); }
635
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.0.1", type: ColorPickerComponent, selector: "nxt-color-picker", host: { listeners: { "document:keyup.esc": "onCancel($event)", "document:keyup.enter": "onAccept($event)", "document:mousedown": "onFocusChange($event)", "document:focusin": "onFocusChange($event)" } }, ngImport: i0, template: "<div class=\"color-picker\"\r\n (click)=\"$event.stopPropagation()\"\r\n [ngStyle]=\"{\r\n visibility: !show ? 'hidden' : 'visible',\r\n width: width || '',\r\n height: height || ''\r\n }\"\r\n *ngIf=\"show\">\r\n <div *ngIf=\"dialogDisplay == 'popup'\"\r\n class=\"color-picker__arrow\"></div>\r\n <div *ngIf=\"mode == colorModeInternal.color\"\r\n class=\"color-picker__sv\"\r\n nxtSlider\r\n [rgX]=\"1\"\r\n [rgY]=\"1\"\r\n (newValue)=\"onColorChange($event)\"\r\n (dragStart)=\"onDragStart('saturation-lightness')\"\r\n (dragEnd)=\"onDragEnd('saturation-lightness')\"\r\n [ngStyle]=\"{ \r\n backgroundColor: hueSliderColor || ''\r\n }\">\r\n <div class=\"color-picker__cursor color-picker__cursor--sv\"\r\n [ngClass]=\"{ 'color-picker__cursor--light': svSliderLight }\"\r\n [ngStyle]=\"{\r\n top: (slider?.v || 0) * 100 + '%',\r\n left: (slider?.s || 0) * 100 + '%'\r\n }\"></div>\r\n </div>\r\n <div class=\"color-picker__controls\">\r\n <div class=\"color-picker__selected\">\r\n <div class=\"color-picker__selected-color\">\r\n <div [ngStyle]=\"{ \r\n backgroundColor: selectedColor || ''\r\n }\"><button *ngIf=\"presetColorsEditable && !(maxPresetColors && (presetColors?.length || 0) >= maxPresetColors)\"\r\n type=\"button\"\r\n title=\"Add color to preset\"\r\n i18n-title=\"@@nxt-color-picker.button.add-color\"\r\n class=\"color-picker__add-selected\"\r\n [ngClass]=\"{ 'color-picker__add-selected--light': alphaSliderLight }\"\r\n (click)=\"onAddPresetColor(selectedColor)\"><svg xmlns=\"http://www.w3.org/2000/svg\"\r\n width=\"24\"\r\n height=\"24\"\r\n viewBox=\"0 0 24 24\">\r\n <path d=\"M19 13h-6v6h-2v-6H5v-2h6V5h2v6h6v2z\" />\r\n <path d=\"M0 0h24v24H0z\"\r\n fill=\"none\" />\r\n </svg></button></div>\r\n </div>\r\n </div>\r\n <div class=\"color-picker__hav\">\r\n <div *ngIf=\"mode == colorModeInternal.color\"\r\n class=\"color-picker__slider color-picker__slider--hue\"\r\n nxtSlider\r\n [rgX]=\"1\"\r\n (newValue)=\"onHueChange($event)\"\r\n (dragStart)=\"onDragStart('hue')\"\r\n (dragEnd)=\"onDragEnd('hue')\">\r\n <div class=\"color-picker__cursor\"\r\n [ngClass]=\"{ 'color-picker__cursor--light': hueSliderLight }\"\r\n [ngStyle]=\"{\r\n left: (slider?.h || 0) * 100 + '%'\r\n }\"></div>\r\n </div>\r\n <div *ngIf=\"mode == colorModeInternal.grayscale\"\r\n class=\"color-picker__slider color-picker__slider--value\"\r\n nxtSlider\r\n [rgX]=\"1\"\r\n (newValue)=\"onValueChange($event)\"\r\n (dragStart)=\"onDragStart('value')\"\r\n (dragEnd)=\"onDragEnd('value')\">\r\n <div class=\"color-picker__cursor\"\r\n [ngClass]=\"{ 'color-picker__cursor--light': valueSliderLight }\"\r\n [ngStyle]=\"{\r\n left: (1 - (slider?.v || 0)) * 100 + '%'\r\n }\"></div>\r\n </div>\r\n <div *ngIf=\"alphaChannel != 'disabled'\"\r\n class=\"color-picker__slider color-picker__slider--alpha\"\r\n nxtSlider\r\n [rgX]=\"1\"\r\n (newValue)=\"onAlphaChange($event)\"\r\n (dragStart)=\"onDragStart('alpha')\"\r\n (dragEnd)=\"onDragEnd('alpha')\">\r\n <div class=\"color-picker__slider--alpha-bg\"\r\n [ngStyle]=\"{\r\n backgroundImage: alphaSliderColor || ''\r\n }\">\r\n <div class=\"color-picker__cursor\"\r\n [ngClass]=\"{ 'color-picker__cursor--light': alphaSliderLight }\"\r\n [ngStyle]=\"{\r\n left: (slider?.a || 0) * 100 + '%'\r\n }\"></div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div *ngIf=\"!disableInput && (mode == colorModeInternal.color || mode == colorModeInternal.grayscale)\"\r\n class=\"color-picker__inputs\">\r\n <div class=\"color-picker__input-fields\">\r\n <ng-container *ngIf=\"mode == colorModeInternal.grayscale; else formatSwitch\">\r\n <div class=\"color-picker__input-field\">\r\n <input type=\"number\"\r\n pattern=\"[0-9]*\"\r\n min=\"0\"\r\n max=\"100\"\r\n nxtText\r\n [rg]=\"100\"\r\n [value]=\"hslaText?.l?.toFixed(0)\"\r\n (keyup.enter)=\"onAccept($event)\"\r\n (newValue)=\"onValueInput($event)\" />\r\n <span class=\"color-picker__input-field-label\">V</span>\r\n </div>\r\n <div *ngIf=\"alphaChannel != 'disabled'\"\r\n class=\"color-picker__input-field\">\r\n <input type=\"number\"\r\n pattern=\"[0-9]+([\\.,][0-9]{1,2})?\"\r\n min=\"0\"\r\n max=\"1\"\r\n step=\"0.01\"\r\n nxtText\r\n [rg]=\"1\"\r\n [value]=\"formatAlpha(hslaText?.a)\"\r\n (keyup.enter)=\"onAccept($event)\"\r\n (newValue)=\"onAlphaInput($event)\" />\r\n <span class=\"color-picker__input-field-label\">A</span>\r\n </div>\r\n </ng-container>\r\n <ng-template #formatSwitch>\r\n <ng-container [ngSwitch]=\"format\">\r\n <ng-container *ngSwitchCase=\"'hsla'\">\r\n <div class=\"color-picker__input-field\">\r\n <input type=\"number\"\r\n pattern=\"[0-9]*\"\r\n min=\"0\"\r\n max=\"360\"\r\n nxtText\r\n [rg]=\"360\"\r\n [value]=\"hslaText?.h?.toFixed(0)\"\r\n (keyup.enter)=\"onAccept($event)\"\r\n (newValue)=\"onHueInput($event)\" />\r\n <span class=\"color-picker__input-field-label\">H</span>\r\n </div>\r\n <div class=\"color-picker__input-field\">\r\n <input type=\"number\"\r\n pattern=\"[0-9]*\"\r\n min=\"0\"\r\n max=\"100\"\r\n nxtText\r\n [rg]=\"100\"\r\n [value]=\"hslaText?.s?.toFixed(0)\"\r\n (keyup.enter)=\"onAccept($event)\"\r\n (newValue)=\"onSaturationInput($event)\" />\r\n <span class=\"color-picker__input-field-label\">S</span>\r\n </div>\r\n <div class=\"color-picker__input-field\">\r\n <input type=\"number\"\r\n pattern=\"[0-9]*\"\r\n min=\"0\"\r\n max=\"100\"\r\n nxtText\r\n [rg]=\"100\"\r\n [value]=\"hslaText?.l?.toFixed(0)\"\r\n (keyup.enter)=\"onAccept($event)\"\r\n (newValue)=\"onLightnessInput($event)\" />\r\n <span class=\"color-picker__input-field-label\">L</span>\r\n </div>\r\n <div *ngIf=\"alphaChannel != 'disabled'\"\r\n class=\"color-picker__input-field\">\r\n <input type=\"number\"\r\n pattern=\"[0-9]+([\\.,][0-9]{1,2})?\"\r\n min=\"0\"\r\n max=\"1\"\r\n step=\"0.01\"\r\n nxtText\r\n [rg]=\"1\"\r\n [value]=\"formatAlpha(hslaText?.a)\"\r\n (keyup.enter)=\"onAccept($event)\"\r\n (newValue)=\"onAlphaInput($event)\" />\r\n <span class=\"color-picker__input-field-label\">A</span>\r\n </div>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"'rgba'\">\r\n <div class=\"color-picker__input-field\">\r\n <input type=\"number\"\r\n pattern=\"[0-9]*\"\r\n min=\"0\"\r\n max=\"255\"\r\n nxtText\r\n [rg]=\"255\"\r\n [value]=\"rgbaText?.r?.toFixed(0)\"\r\n (keyup.enter)=\"onAccept($event)\"\r\n (newValue)=\"onRedInput($event)\" />\r\n <span class=\"color-picker__input-field-label\">R</span>\r\n </div>\r\n <div class=\"color-picker__input-field\">\r\n <input type=\"number\"\r\n pattern=\"[0-9]*\"\r\n min=\"0\"\r\n max=\"255\"\r\n nxtText\r\n [rg]=\"255\"\r\n [value]=\"rgbaText?.g?.toFixed(0)\"\r\n (keyup.enter)=\"onAccept($event)\"\r\n (newValue)=\"onGreenInput($event)\" />\r\n <span class=\"color-picker__input-field-label\">G</span>\r\n </div>\r\n <div class=\"color-picker__input-field\">\r\n <input type=\"number\"\r\n pattern=\"[0-9]*\"\r\n min=\"0\"\r\n max=\"255\"\r\n nxtText\r\n [rg]=\"255\"\r\n [value]=\"rgbaText?.b?.toFixed(0)\"\r\n (keyup.enter)=\"onAccept($event)\"\r\n (newValue)=\"onBlueInput($event)\" />\r\n <span class=\"color-picker__input-field-label\">B</span>\r\n </div>\r\n <div *ngIf=\"alphaChannel != 'disabled'\"\r\n class=\"color-picker__input-field\">\r\n <input type=\"number\"\r\n pattern=\"[0-9]+([\\.,][0-9]{1,2})?\"\r\n min=\"0\"\r\n max=\"1\"\r\n step=\"0.01\"\r\n nxtText\r\n [rg]=\"1\"\r\n [value]=\"formatAlpha(hslaText?.a)\"\r\n (keyup.enter)=\"onAccept($event)\"\r\n (newValue)=\"onAlphaInput($event)\" />\r\n <span class=\"color-picker__input-field-label\">A</span>\r\n </div>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"'cmyk'\">\r\n <div class=\"color-picker__input-field\">\r\n <input type=\"number\"\r\n pattern=\"[0-9]*\"\r\n min=\"0\"\r\n max=\"100\"\r\n nxtText\r\n [rg]=\"100\"\r\n [value]=\"cmykText?.c?.toFixed(0)\"\r\n (keyup.enter)=\"onAccept($event)\"\r\n (newValue)=\"onCyanInput($event)\" />\r\n <span class=\"color-picker__input-field-label\">C</span>\r\n </div>\r\n <div class=\"color-picker__input-field\">\r\n <input type=\"number\"\r\n pattern=\"[0-9]*\"\r\n min=\"0\"\r\n max=\"100\"\r\n nxtText\r\n [rg]=\"100\"\r\n [value]=\"cmykText?.m?.toFixed(0)\"\r\n (keyup.enter)=\"onAccept($event)\"\r\n (newValue)=\"onMagentaInput($event)\" />\r\n <span class=\"color-picker__input-field-label\">M</span>\r\n </div>\r\n <div class=\"color-picker__input-field\">\r\n <input type=\"number\"\r\n pattern=\"[0-9]*\"\r\n min=\"0\"\r\n max=\"100\"\r\n nxtText\r\n [rg]=\"100\"\r\n [value]=\"cmykText?.y?.toFixed(0)\"\r\n (keyup.enter)=\"onAccept($event)\"\r\n (newValue)=\"onYellowInput($event)\" />\r\n <span class=\"color-picker__input-field-label\">Y</span>\r\n </div>\r\n <div class=\"color-picker__input-field\">\r\n <input type=\"number\"\r\n pattern=\"[0-9]*\"\r\n min=\"0\"\r\n max=\"100\"\r\n nxtText\r\n [rg]=\"100\"\r\n [value]=\"cmykText?.k?.toFixed(0)\"\r\n (keyup.enter)=\"onAccept($event)\"\r\n (newValue)=\"onBlackInput($event)\" />\r\n <span class=\"color-picker__input-field-label\">K</span>\r\n </div>\r\n <div *ngIf=\"alphaChannel != 'disabled'\"\r\n class=\"color-picker__input-field\">\r\n <input type=\"number\"\r\n pattern=\"[0-9]+([\\.,][0-9]{1,2})?\"\r\n min=\"0\"\r\n max=\"1\"\r\n step=\"0.01\"\r\n nxtText\r\n [rg]=\"1\"\r\n [value]=\"formatAlpha(cmykText?.a)\"\r\n (keyup.enter)=\"onAccept($event)\"\r\n (newValue)=\"onAlphaInput($event)\" />\r\n <span class=\"color-picker__input-field-label\">A</span>\r\n </div>\r\n </ng-container>\r\n <ng-container *ngSwitchDefault>\r\n <div class=\"color-picker__input-field\">\r\n <input nxtText\r\n [value]=\"hexText\"\r\n (blur)=\"onHexInput()\"\r\n (keyup.enter)=\"onAccept($event)\"\r\n (newValue)=\"onHexInput($event)\" />\r\n <span class=\"color-picker__input-field-label\">Hex</span>\r\n </div>\r\n <div *ngIf=\"alphaChannel == 'forced'\"\r\n class=\"color-picker__input-field\">\r\n <input type=\"number\"\r\n pattern=\"[0-9]+([\\.,][0-9]{1,2})?\"\r\n min=\"0\"\r\n max=\"1\"\r\n step=\"0.01\"\r\n nxtText\r\n [rg]=\"1\"\r\n [value]=\"formatAlpha(hexAlpha)\"\r\n (keyup.enter)=\"onAccept($event)\"\r\n (newValue)=\"onAlphaInput($event)\" />\r\n <span class=\"color-picker__input-field-label\">A</span>\r\n </div>\r\n </ng-container>\r\n </ng-container>\r\n </ng-template>\r\n </div>\r\n <div *ngIf=\"mode == colorModeInternal.color\"\r\n class=\"color-picker__input-type\">\r\n <span class=\"color-picker__input-type-arrow\"\r\n (click)=\"onFormatToggle(1)\"></span>\r\n <span class=\"color-picker__input-type-arrow\"\r\n (click)=\"onFormatToggle(-1)\"></span>\r\n </div>\r\n </div>\r\n <ng-container *ngIf=\"presetColors?.length\">\r\n <div class=\"color-picker__separator\"></div>\r\n <div class=\"color-picker__preset\">\r\n <div *ngIf=\"presetLabel\"\r\n class=\"color-picker__preset-label\">\r\n <ng-container *ngIf=\"presetLabel === true; else stringLabel\"\r\n i18n=\"@@nxt-color-picker.preset-colors\">Preset colors</ng-container>\r\n <ng-template #stringLabel>{{ presetLabel }}</ng-template>\r\n </div>\r\n <div *ngIf=\"presetColors?.length\"\r\n class=\"color-picker__preset-items\">\r\n <ng-container *ngFor=\"let color of presetColors\">\r\n <div *ngIf=\"stringToRgba(color) as rgba\"\r\n class=\"color-picker__preset-item\"\r\n [title]=\"color\"\r\n (click)=\"setColorFromString(color)\">\r\n <div class=\"color-picker__preset-item-fill\"\r\n [ngStyle]=\"{ \r\n backgroundColor: rgba || ''\r\n }\"><button *ngIf=\"presetColorsEditable\"\r\n type=\"button\"\r\n title=\"Remove Color\"\r\n i18n-title=\"@@nxt-color-picker.button.remove-color\"\r\n class=\"color-picker__remove-selected\"\r\n (click)=\"onRemovePresetColor(color)\"><svg xmlns=\"http://www.w3.org/2000/svg\"\r\n width=\"24\"\r\n height=\"24\"\r\n viewBox=\"0 0 24 24\">\r\n <path d=\"M19 6.41L17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12z\" />\r\n <path d=\"M0 0h24v24H0z\"\r\n fill=\"none\" />\r\n </svg></button></div>\r\n </div>\r\n </ng-container>\r\n <div *ngFor=\"let i of fill(50)\"\r\n class=\"color-picker__preset-item\"></div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n <div *ngIf=\"okButton || cancelButton\"\r\n class=\"color-picker__buttons\">\r\n <button *ngIf=\"cancelButton\"\r\n type=\"button\"\r\n (click)=\"onCancel($event)\"\r\n i18n=\"@@nxt-color-picker.button.cancel\">Cancel</button>\r\n <button *ngIf=\"okButton\"\r\n type=\"button\"\r\n (click)=\"onAccept($event)\"\r\n i18n=\"@@nxt-color-picker.button.ok\">OK</button>\r\n </div>\r\n</div>\r\n", styles: [".color-picker{position:relative;-webkit-user-select:none;user-select:none;background-color:#fff;box-shadow:0 8px 10px 1px #00000024,0 3px 14px 2px #0000001f,0 5px 5px -3px #0003;display:flex;flex-direction:column}.color-picker *{box-sizing:border-box;margin:0;font-size:12px}.color-picker .color-picker__arrow{height:0;width:0;border-style:solid;position:absolute;z-index:999999}.color-picker .color-picker__cursor{cursor:pointer;position:absolute;border-radius:50%;width:16px;height:16px;border:#222222 solid 2px;margin:0 -8px;transition:border .2s linear}.color-picker .color-picker__cursor.color-picker__cursor--sv{margin:-8px}.color-picker .color-picker__cursor.color-picker__cursor--light{border-color:#dadada}.color-picker .color-picker__sv{position:relative;direction:ltr;width:100%;height:130px;border:none;cursor:pointer;touch-action:manipulation;background-image:linear-gradient(to bottom,rgba(0,0,0,0) 0%,rgb(0,0,0) 100%),linear-gradient(to right,rgb(255,255,255) 0%,rgba(255,255,255,0) 100%);background-size:100% 100%}.color-picker .color-picker__controls{display:flex;margin:8px;align-items:center}.color-picker .color-picker__controls .color-picker__selected{margin:4px;flex:48px 0 0}.color-picker .color-picker__controls .color-picker__hav{margin:-4px -4px -4px 0;flex:auto 1 1}.color-picker .color-picker__selected-color{width:48px;height:48px;display:flex;align-items:stretch;justify-content:stretch;border-radius:50%;background-size:16px;background-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZlcnNpb249IjEuMSIgeD0iMCIgeT0iMCIgd2lkdGg9IjEwMCIgaGVpZ2h0PSIxMDAiIHZpZXdCb3g9IjAgMCAxMDAgMTAwIiBlbmFibGUtYmFja2dyb3VuZD0ibmV3IDAgMCAxMDAgMTAwIiB4bWw6c3BhY2U9InByZXNlcnZlIj48cmVjdCBmaWxsPSIjQ0NDQ0NDIiB3aWR0aD0iNTAiIGhlaWdodD0iNTAiLz48cmVjdCB4PSI1MCIgeT0iNTAiIGZpbGw9IiNDQ0NDQ0MiIHdpZHRoPSI1MCIgaGVpZ2h0PSI1MCIvPjxyZWN0IHk9IjUwIiBmaWxsPSIjRkZGRkZGIiB3aWR0aD0iNTAiIGhlaWdodD0iNTAiLz48cmVjdCB4PSI1MCIgZmlsbD0iI0ZGRkZGRiIgd2lkdGg9IjUwIiBoZWlnaHQ9IjUwIi8+PC9zdmc+);background-repeat:repeat;box-shadow:0 0 8px -2px #00000080}.color-picker .color-picker__selected-color div{width:100%;height:100%;border-radius:50%}.color-picker .color-picker__add-selected{background:none;border:none;padding:0;width:100%;margin:0;color:#222;transition:color .2s linear;display:flex;align-items:center;justify-content:center;height:100%}.color-picker .color-picker__add-selected svg{fill:currentcolor;width:24px;height:auto}.color-picker .color-picker__add-selected.color-picker__add-selected--light{color:#dadada}.color-picker .color-picker__hav{display:flex;flex-wrap:wrap}.color-picker .color-picker__slider{width:100%;flex:100% 1 1;height:16px;margin:8px;position:relative}.color-picker .color-picker__slider.color-picker__slider--hue{background-size:100% 100%;background-image:linear-gradient(to right,rgb(255,0,0) 0%,rgb(255,255,0) 16.6666666667%,rgb(0,255,0) 33.3333333333%,rgb(0,255,255) 50%,rgb(0,0,255) 66.6666666667%,rgb(255,0,255) 83.3333333333%,rgb(255,0,0) 100%)}.color-picker .color-picker__slider.color-picker__slider--value{background-size:100% 100%;background-image:linear-gradient(to right,rgb(0,0,0) 0%,rgb(255,255,255) 100%)}.color-picker .color-picker__slider.color-picker__slider--alpha{background-size:16px;background-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZlcnNpb249IjEuMSIgeD0iMCIgeT0iMCIgd2lkdGg9IjEwMCIgaGVpZ2h0PSIxMDAiIHZpZXdCb3g9IjAgMCAxMDAgMTAwIiBlbmFibGUtYmFja2dyb3VuZD0ibmV3IDAgMCAxMDAgMTAwIiB4bWw6c3BhY2U9InByZXNlcnZlIj48cmVjdCBmaWxsPSIjQ0NDQ0NDIiB3aWR0aD0iNTAiIGhlaWdodD0iNTAiLz48cmVjdCB4PSI1MCIgeT0iNTAiIGZpbGw9IiNDQ0NDQ0MiIHdpZHRoPSI1MCIgaGVpZ2h0PSI1MCIvPjxyZWN0IHk9IjUwIiBmaWxsPSIjRkZGRkZGIiB3aWR0aD0iNTAiIGhlaWdodD0iNTAiLz48cmVjdCB4PSI1MCIgZmlsbD0iI0ZGRkZGRiIgd2lkdGg9IjUwIiBoZWlnaHQ9IjUwIi8+PC9zdmc+);background-repeat:repeat}.color-picker .color-picker__slider.color-picker__slider--alpha .color-picker__slider--alpha-bg{position:absolute;inset:0}.color-picker .color-picker__inputs{display:flex;margin:8px;align-items:flex-start}.color-picker .color-picker__inputs .color-picker__input-fields{flex:auto 1 1}.color-picker .color-picker__inputs .color-picker__input-type{flex:24px 0 0}.color-picker .color-picker__input-fields{display:flex}.color-picker .color-picker__input-fields .color-picker__input-field{margin:4px;display:flex;flex-wrap:wrap;align-items:flex-start;justify-content:center;flex:20% 1 1}.color-picker .color-picker__input-fields .color-picker__input-field input{text-align:center;font-size:12px;height:24px;appearance:none;flex:100% 1 1;padding:1px;border:#999 solid 1px;width:100%;background:none;min-width:0}.color-picker .color-picker__input-fields .color-picker__input-field input:invalid{box-shadow:none}.color-picker .color-picker__input-fields .color-picker__input-field input::-webkit-inner-spin-button,.color-picker .color-picker__input-fields .color-picker__input-field input::-webkit-outer-spin-button{appearance:none;margin:0}.color-picker .color-picker__input-fields .color-picker__input-field .color-picker__input-field-label{flex:100% 1 1;display:block;text-align:center;margin-top:4px}.color-picker .color-picker__input-type{width:24px;height:24px;margin-top:4px;display:flex;flex-wrap:wrap;background-size:contain;background-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZlcnNpb249IjEuMSIgeD0iMCIgeT0iMCIgd2lkdGg9IjEwMCIgaGVpZ2h0PSIxMDAiIHZpZXdCb3g9IjAgMCAxMDAgMTAwIiBlbmFibGUtYmFja2dyb3VuZD0ibmV3IDAgMCAxMDAgMTAwIiB4bWw6c3BhY2U9InByZXNlcnZlIj48cG9seWdvbiBmaWxsPSIjMzMzMzMzIiBwb2ludHM9IjUwIDE2IDMwIDQ0IDcwIDQ0ICIvPjxwb2x5Z29uIGZpbGw9IiMzMzMzMzMiIHBvaW50cz0iNTAgODQgNzAgNTYgMzAgNTYgIi8+PC9zdmc+);background-repeat:no-repeat;background-position:center}.color-picker .color-picker__input-type .color-picker__input-type-arrow{display:block;cursor:pointer;flex:100% 1 1;width:100%;height:50%}.color-picker .color-picker__separator{border-top:1px solid #999;margin-left:8px;margin-right:8px;flex:100% 1 1}.color-picker .color-picker__preset{display:flex;margin:8px;align-items:center;flex-wrap:wrap}.color-picker .color-picker__preset-label{margin:4px;flex:100% 1 1}.color-picker .color-picker__preset-items{display:flex;flex:100% 1 1;flex-wrap:wrap;align-items:flex-start}.color-picker .color-picker__preset-items .color-picker__preset-item{position:relative;flex:20px 1 1;background-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZlcnNpb249IjEuMSIgeD0iMCIgeT0iMCIgd2lkdGg9IjEwMCIgaGVpZ2h0PSIxMDAiIHZpZXdCb3g9IjAgMCAxMDAgMTAwIiBlbmFibGUtYmFja2dyb3VuZD0ibmV3IDAgMCAxMDAgMTAwIiB4bWw6c3BhY2U9InByZXNlcnZlIj48cmVjdCBmaWxsPSIjQ0NDQ0NDIiB3aWR0aD0iNTAiIGhlaWdodD0iNTAiLz48cmVjdCB4PSI1MCIgeT0iNTAiIGZpbGw9IiNDQ0NDQ0MiIHdpZHRoPSI1MCIgaGVpZ2h0PSI1MCIvPjxyZWN0IHk9IjUwIiBmaWxsPSIjRkZGRkZGIiB3aWR0aD0iNTAiIGhlaWdodD0iNTAiLz48cmVjdCB4PSI1MCIgZmlsbD0iI0ZGRkZGRiIgd2lkdGg9IjUwIiBoZWlnaHQ9IjUwIi8+PC9zdmc+);background-size:100% 100%;margin:4px;border-radius:4px;border:1px solid #999;cursor:pointer}.color-picker .color-picker__preset-items .color-picker__preset-item .color-picker__preset-item-fill{position:relative;width:100%;padding-bottom:100%;border-radius:3px}.color-picker .color-picker__preset-items .color-picker__preset-item:empty{margin-top:0;margin-bottom:0;border-top:0;border-bottom:0}.color-picker .color-picker__remove-selected{border:none;padding:0;margin:0;color:#222;transition:color .2s linear;align-items:center;justify-content:center;box-shadow:0 0 8px -2px #00000080;position:absolute;width:12px;height:12px;right:-6px;top:-6px;background:#fff;border-radius:50%;display:flex}.color-picker .color-picker__remove-selected svg{fill:currentcolor;width:100%;height:auto}.color-picker .color-picker__buttons{display:flex;margin:0 8px 8px;align-items:center;flex-wrap:wrap;justify-content:flex-end}.color-picker .color-picker__buttons button{flex:auto 0 0;margin:4px;color:var(--nxt-color-picker-button-color, inherit);background:var(--nxt-color-picker-button-background, #dadada);padding:var(--nxt-color-picker-button-padding, 4px 8px);border:var(--nxt-color-picker-button-border, none);border-radius:var(--nxt-color-picker-button-border-radius, 4px);font-size:var(--nxt-color-picker-button-font-size, inherit);font-weight:var(--nxt-color-picker-button-font-weight, inherit)}:host-context(.color-picker__arrow--top) .color-picker{margin-bottom:16px}:host-context(.color-picker__arrow--top) .color-picker__arrow{border-width:12px 6px;border-color:#999 rgba(0,0,0,0) rgba(0,0,0,0) rgba(0,0,0,0);left:12px;bottom:-24px}:host-context(.color-picker__arrow--left) .color-picker{margin-right:16px}:host-context(.color-picker__arrow--left) .color-picker__arrow{border-width:6px 12px;border-color:rgba(0,0,0,0) rgba(0,0,0,0) rgba(0,0,0,0) #999;top:12px;left:230px}:host-context(.color-picker__arrow--right) .color-picker{margin-left:16px}:host-context(.color-picker__arrow--right) .color-picker__arrow{border-width:6px 12px;border-color:rgba(0,0,0,0) #999 rgba(0,0,0,0) rgba(0,0,0,0);top:12px;left:-24px}:host-context(.color-picker__arrow--bottom) .color-picker{margin-top:16px}:host-context(.color-picker__arrow--bottom) .color-picker__arrow{border-width:12px 6px;border-color:rgba(0,0,0,0) rgba(0,0,0,0) #999 rgba(0,0,0,0);top:-24px;left:12px}\n"], dependencies: [{ kind: "directive", type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "directive", type: i2.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: i2.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "directive", type: i2.NgSwitchDefault, selector: "[ngSwitchDefault]" }, { kind: "directive", type: i3.TextDirective, selector: "[nxtText]", inputs: ["rg", "nxtText"], outputs: ["newValue"] }, { kind: "directive", type: i4.SliderDirective, selector: "[nxtSlider]", inputs: ["rgX", "rgY", "nxtSlider"], outputs: ["dragEnd", "dragStart", "newValue"] }] }); }
636
636
  }
637
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.2", ngImport: i0, type: ColorPickerComponent, decorators: [{
637
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.1", ngImport: i0, type: ColorPickerComponent, decorators: [{
638
638
  type: Component,
639
- args: [{ selector: 'nxt-color-picker', encapsulation: ViewEncapsulation.Emulated, template: "<div class=\"color-picker\"\r\n (click)=\"$event.stopPropagation()\"\r\n [ngStyle]=\"{\r\n visibility: !show ? 'hidden' : 'visible',\r\n width: width || '',\r\n height: height || ''\r\n }\"\r\n *ngIf=\"show\">\r\n <div *ngIf=\"dialogDisplay == 'popup'\"\r\n class=\"color-picker__arrow\"></div>\r\n <div *ngIf=\"mode == colorModeInternal.color\"\r\n class=\"color-picker__sv\"\r\n nxtSlider\r\n [rgX]=\"1\"\r\n [rgY]=\"1\"\r\n (newValue)=\"onColorChange($event)\"\r\n (dragStart)=\"onDragStart('saturation-lightness')\"\r\n (dragEnd)=\"onDragEnd('saturation-lightness')\"\r\n [ngStyle]=\"{ \r\n backgroundColor: hueSliderColor || ''\r\n }\">\r\n <div class=\"color-picker__cursor color-picker__cursor--sv\"\r\n [ngClass]=\"{ 'color-picker__cursor--light': svSliderLight }\"\r\n [ngStyle]=\"{\r\n top: (slider?.v || 0) * 100 + '%',\r\n left: (slider?.s || 0) * 100 + '%'\r\n }\"></div>\r\n </div>\r\n <div class=\"color-picker__controls\">\r\n <div class=\"color-picker__selected\">\r\n <div class=\"color-picker__selected-color\">\r\n <div [ngStyle]=\"{ \r\n backgroundColor: selectedColor || ''\r\n }\"><button *ngIf=\"presetColorsEditable && !(maxPresetColors && (presetColors?.length || 0) >= maxPresetColors)\"\r\n type=\"button\"\r\n title=\"Add color to preset\"\r\n i18n-title=\"@@nxt-color-picker.button.add-color\"\r\n class=\"color-picker__add-selected\"\r\n [ngClass]=\"{ 'color-picker__add-selected--light': alphaSliderLight }\"\r\n (click)=\"onAddPresetColor(selectedColor)\"><svg xmlns=\"http://www.w3.org/2000/svg\"\r\n width=\"24\"\r\n height=\"24\"\r\n viewBox=\"0 0 24 24\">\r\n <path d=\"M19 13h-6v6h-2v-6H5v-2h6V5h2v6h6v2z\" />\r\n <path d=\"M0 0h24v24H0z\"\r\n fill=\"none\" />\r\n </svg></button></div>\r\n </div>\r\n </div>\r\n <div class=\"color-picker__hav\">\r\n <div *ngIf=\"mode == colorModeInternal.color\"\r\n class=\"color-picker__slider color-picker__slider--hue\"\r\n nxtSlider\r\n [rgX]=\"1\"\r\n (newValue)=\"onHueChange($event)\"\r\n (dragStart)=\"onDragStart('hue')\"\r\n (dragEnd)=\"onDragEnd('hue')\">\r\n <div class=\"color-picker__cursor\"\r\n [ngClass]=\"{ 'color-picker__cursor--light': hueSliderLight }\"\r\n [ngStyle]=\"{\r\n left: (slider?.h || 0) * 100 + '%'\r\n }\"></div>\r\n </div>\r\n <div *ngIf=\"mode == colorModeInternal.grayscale\"\r\n class=\"color-picker__slider color-picker__slider--value\"\r\n nxtSlider\r\n [rgX]=\"1\"\r\n (newValue)=\"onValueChange($event)\"\r\n (dragStart)=\"onDragStart('value')\"\r\n (dragEnd)=\"onDragEnd('value')\">\r\n <div class=\"color-picker__cursor\"\r\n [ngClass]=\"{ 'color-picker__cursor--light': valueSliderLight }\"\r\n [ngStyle]=\"{\r\n left: (1 - (slider?.v || 0)) * 100 + '%'\r\n }\"></div>\r\n </div>\r\n <div *ngIf=\"alphaChannel != 'disabled'\"\r\n class=\"color-picker__slider color-picker__slider--alpha\"\r\n nxtSlider\r\n [rgX]=\"1\"\r\n (newValue)=\"onAlphaChange($event)\"\r\n (dragStart)=\"onDragStart('alpha')\"\r\n (dragEnd)=\"onDragEnd('alpha')\">\r\n <div class=\"color-picker__slider--alpha-bg\"\r\n [ngStyle]=\"{\r\n backgroundImage: alphaSliderColor || ''\r\n }\">\r\n <div class=\"color-picker__cursor\"\r\n [ngClass]=\"{ 'color-picker__cursor--light': alphaSliderLight }\"\r\n [ngStyle]=\"{\r\n left: (slider?.a || 0) * 100 + '%'\r\n }\"></div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div *ngIf=\"!disableInput && (mode == colorModeInternal.color || mode == colorModeInternal.grayscale)\"\r\n class=\"color-picker__inputs\">\r\n <div class=\"color-picker__input-fields\">\r\n <ng-container *ngIf=\"mode == colorModeInternal.grayscale; else formatSwitch\">\r\n <div class=\"color-picker__input-field\">\r\n <input type=\"number\"\r\n pattern=\"[0-9]*\"\r\n min=\"0\"\r\n max=\"100\"\r\n nxtText\r\n [rg]=\"100\"\r\n [value]=\"hslaText?.l?.toFixed(0)\"\r\n (keyup.enter)=\"onAccept($event)\"\r\n (newValue)=\"onValueInput($event)\" />\r\n <span class=\"color-picker__input-field-label\">V</span>\r\n </div>\r\n <div *ngIf=\"alphaChannel != 'disabled'\"\r\n class=\"color-picker__input-field\">\r\n <input type=\"number\"\r\n pattern=\"[0-9]+([\\.,][0-9]{1,2})?\"\r\n min=\"0\"\r\n max=\"1\"\r\n step=\"0.01\"\r\n nxtText\r\n [rg]=\"1\"\r\n [value]=\"formatAlpha(hslaText?.a)\"\r\n (keyup.enter)=\"onAccept($event)\"\r\n (newValue)=\"onAlphaInput($event)\" />\r\n <span class=\"color-picker__input-field-label\">A</span>\r\n </div>\r\n </ng-container>\r\n <ng-template #formatSwitch>\r\n <ng-container [ngSwitch]=\"format\">\r\n <ng-container *ngSwitchCase=\"'hsla'\">\r\n <div class=\"color-picker__input-field\">\r\n <input type=\"number\"\r\n pattern=\"[0-9]*\"\r\n min=\"0\"\r\n max=\"360\"\r\n nxtText\r\n [rg]=\"360\"\r\n [value]=\"hslaText?.h?.toFixed(0)\"\r\n (keyup.enter)=\"onAccept($event)\"\r\n (newValue)=\"onHueInput($event)\" />\r\n <span class=\"color-picker__input-field-label\">H</span>\r\n </div>\r\n <div class=\"color-picker__input-field\">\r\n <input type=\"number\"\r\n pattern=\"[0-9]*\"\r\n min=\"0\"\r\n max=\"100\"\r\n nxtText\r\n [rg]=\"100\"\r\n [value]=\"hslaText?.s?.toFixed(0)\"\r\n (keyup.enter)=\"onAccept($event)\"\r\n (newValue)=\"onSaturationInput($event)\" />\r\n <span class=\"color-picker__input-field-label\">S</span>\r\n </div>\r\n <div class=\"color-picker__input-field\">\r\n <input type=\"number\"\r\n pattern=\"[0-9]*\"\r\n min=\"0\"\r\n max=\"100\"\r\n nxtText\r\n [rg]=\"100\"\r\n [value]=\"hslaText?.l?.toFixed(0)\"\r\n (keyup.enter)=\"onAccept($event)\"\r\n (newValue)=\"onLightnessInput($event)\" />\r\n <span class=\"color-picker__input-field-label\">L</span>\r\n </div>\r\n <div *ngIf=\"alphaChannel != 'disabled'\"\r\n class=\"color-picker__input-field\">\r\n <input type=\"number\"\r\n pattern=\"[0-9]+([\\.,][0-9]{1,2})?\"\r\n min=\"0\"\r\n max=\"1\"\r\n step=\"0.01\"\r\n nxtText\r\n [rg]=\"1\"\r\n [value]=\"formatAlpha(hslaText?.a)\"\r\n (keyup.enter)=\"onAccept($event)\"\r\n (newValue)=\"onAlphaInput($event)\" />\r\n <span class=\"color-picker__input-field-label\">A</span>\r\n </div>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"'rgba'\">\r\n <div class=\"color-picker__input-field\">\r\n <input type=\"number\"\r\n pattern=\"[0-9]*\"\r\n min=\"0\"\r\n max=\"255\"\r\n nxtText\r\n [rg]=\"255\"\r\n [value]=\"rgbaText?.r?.toFixed(0)\"\r\n (keyup.enter)=\"onAccept($event)\"\r\n (newValue)=\"onRedInput($event)\" />\r\n <span class=\"color-picker__input-field-label\">R</span>\r\n </div>\r\n <div class=\"color-picker__input-field\">\r\n <input type=\"number\"\r\n pattern=\"[0-9]*\"\r\n min=\"0\"\r\n max=\"255\"\r\n nxtText\r\n [rg]=\"255\"\r\n [value]=\"rgbaText?.g?.toFixed(0)\"\r\n (keyup.enter)=\"onAccept($event)\"\r\n (newValue)=\"onGreenInput($event)\" />\r\n <span class=\"color-picker__input-field-label\">G</span>\r\n </div>\r\n <div class=\"color-picker__input-field\">\r\n <input type=\"number\"\r\n pattern=\"[0-9]*\"\r\n min=\"0\"\r\n max=\"255\"\r\n nxtText\r\n [rg]=\"255\"\r\n [value]=\"rgbaText?.b?.toFixed(0)\"\r\n (keyup.enter)=\"onAccept($event)\"\r\n (newValue)=\"onBlueInput($event)\" />\r\n <span class=\"color-picker__input-field-label\">B</span>\r\n </div>\r\n <div *ngIf=\"alphaChannel != 'disabled'\"\r\n class=\"color-picker__input-field\">\r\n <input type=\"number\"\r\n pattern=\"[0-9]+([\\.,][0-9]{1,2})?\"\r\n min=\"0\"\r\n max=\"1\"\r\n step=\"0.01\"\r\n nxtText\r\n [rg]=\"1\"\r\n [value]=\"formatAlpha(hslaText?.a)\"\r\n (keyup.enter)=\"onAccept($event)\"\r\n (newValue)=\"onAlphaInput($event)\" />\r\n <span class=\"color-picker__input-field-label\">A</span>\r\n </div>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"'cmyk'\">\r\n <div class=\"color-picker__input-field\">\r\n <input type=\"number\"\r\n pattern=\"[0-9]*\"\r\n min=\"0\"\r\n max=\"100\"\r\n nxtText\r\n [rg]=\"100\"\r\n [value]=\"cmykText?.c?.toFixed(0)\"\r\n (keyup.enter)=\"onAccept($event)\"\r\n (newValue)=\"onCyanInput($event)\" />\r\n <span class=\"color-picker__input-field-label\">C</span>\r\n </div>\r\n <div class=\"color-picker__input-field\">\r\n <input type=\"number\"\r\n pattern=\"[0-9]*\"\r\n min=\"0\"\r\n max=\"100\"\r\n nxtText\r\n [rg]=\"100\"\r\n [value]=\"cmykText?.m?.toFixed(0)\"\r\n (keyup.enter)=\"onAccept($event)\"\r\n (newValue)=\"onMagentaInput($event)\" />\r\n <span class=\"color-picker__input-field-label\">M</span>\r\n </div>\r\n <div class=\"color-picker__input-field\">\r\n <input type=\"number\"\r\n pattern=\"[0-9]*\"\r\n min=\"0\"\r\n max=\"100\"\r\n nxtText\r\n [rg]=\"100\"\r\n [value]=\"cmykText?.y?.toFixed(0)\"\r\n (keyup.enter)=\"onAccept($event)\"\r\n (newValue)=\"onYellowInput($event)\" />\r\n <span class=\"color-picker__input-field-label\">Y</span>\r\n </div>\r\n <div class=\"color-picker__input-field\">\r\n <input type=\"number\"\r\n pattern=\"[0-9]*\"\r\n min=\"0\"\r\n max=\"100\"\r\n nxtText\r\n [rg]=\"100\"\r\n [value]=\"cmykText?.k?.toFixed(0)\"\r\n (keyup.enter)=\"onAccept($event)\"\r\n (newValue)=\"onBlackInput($event)\" />\r\n <span class=\"color-picker__input-field-label\">K</span>\r\n </div>\r\n <div *ngIf=\"alphaChannel != 'disabled'\"\r\n class=\"color-picker__input-field\">\r\n <input type=\"number\"\r\n pattern=\"[0-9]+([\\.,][0-9]{1,2})?\"\r\n min=\"0\"\r\n max=\"1\"\r\n step=\"0.01\"\r\n nxtText\r\n [rg]=\"1\"\r\n [value]=\"formatAlpha(cmykText?.a)\"\r\n (keyup.enter)=\"onAccept($event)\"\r\n (newValue)=\"onAlphaInput($event)\" />\r\n <span class=\"color-picker__input-field-label\">A</span>\r\n </div>\r\n </ng-container>\r\n <ng-container *ngSwitchDefault>\r\n <div class=\"color-picker__input-field\">\r\n <input nxtText\r\n [value]=\"hexText\"\r\n (blur)=\"onHexInput()\"\r\n (keyup.enter)=\"onAccept($event)\"\r\n (newValue)=\"onHexInput($event)\" />\r\n <span class=\"color-picker__input-field-label\">Hex</span>\r\n </div>\r\n <div *ngIf=\"alphaChannel == 'forced'\"\r\n class=\"color-picker__input-field\">\r\n <input type=\"number\"\r\n pattern=\"[0-9]+([\\.,][0-9]{1,2})?\"\r\n min=\"0\"\r\n max=\"1\"\r\n step=\"0.01\"\r\n nxtText\r\n [rg]=\"1\"\r\n [value]=\"formatAlpha(hexAlpha)\"\r\n (keyup.enter)=\"onAccept($event)\"\r\n (newValue)=\"onAlphaInput($event)\" />\r\n <span class=\"color-picker__input-field-label\">A</span>\r\n </div>\r\n </ng-container>\r\n </ng-container>\r\n </ng-template>\r\n </div>\r\n <div *ngIf=\"mode == colorModeInternal.color\"\r\n class=\"color-picker__input-type\">\r\n <span class=\"color-picker__input-type-arrow\"\r\n (click)=\"onFormatToggle(1)\"></span>\r\n <span class=\"color-picker__input-type-arrow\"\r\n (click)=\"onFormatToggle(-1)\"></span>\r\n </div>\r\n </div>\r\n <ng-container *ngIf=\"presetColors?.length\">\r\n <div class=\"color-picker__separator\"></div>\r\n <div class=\"color-picker__preset\">\r\n <div *ngIf=\"presetLabel\"\r\n class=\"color-picker__preset-label\">\r\n <ng-container *ngIf=\"presetLabel === true; else stringLabel\"\r\n i18n=\"@@nxt-color-picker.preset-colors\">Preset colors</ng-container>\r\n <ng-template #stringLabel>{{ presetLabel }}</ng-template>\r\n </div>\r\n <div *ngIf=\"presetColors?.length\"\r\n class=\"color-picker__preset-items\">\r\n <ng-container *ngFor=\"let color of presetColors\">\r\n <div *ngIf=\"stringToRgba(color) as rgba\"\r\n class=\"color-picker__preset-item\"\r\n [title]=\"color\"\r\n (click)=\"setColorFromString(color)\">\r\n <div class=\"color-picker__preset-item-fill\"\r\n [ngStyle]=\"{ \r\n backgroundColor: rgba || ''\r\n }\"><button *ngIf=\"presetColorsEditable\"\r\n type=\"button\"\r\n title=\"Remove Color\"\r\n i18n-title=\"@@nxt-color-picker.button.remove-color\"\r\n class=\"color-picker__remove-selected\"\r\n (click)=\"onRemovePresetColor(color)\"><svg xmlns=\"http://www.w3.org/2000/svg\"\r\n width=\"24\"\r\n height=\"24\"\r\n viewBox=\"0 0 24 24\">\r\n <path d=\"M19 6.41L17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12z\" />\r\n <path d=\"M0 0h24v24H0z\"\r\n fill=\"none\" />\r\n </svg></button></div>\r\n </div>\r\n </ng-container>\r\n <div *ngFor=\"let i of fill(50)\"\r\n class=\"color-picker__preset-item\"></div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n <div *ngIf=\"okButton || cancelButton\"\r\n class=\"color-picker__buttons\">\r\n <button *ngIf=\"cancelButton\"\r\n type=\"button\"\r\n (click)=\"onCancel($event)\"\r\n i18n=\"@@nxt-color-picker.button.cancel\">Cancel</button>\r\n <button *ngIf=\"okButton\"\r\n type=\"button\"\r\n (click)=\"onAccept($event)\"\r\n i18n=\"@@nxt-color-picker.button.ok\">OK</button>\r\n </div>\r\n</div>\r\n", styles: [".color-picker{position:relative;-webkit-user-select:none;user-select:none;background-color:#fff;box-shadow:0 8px 10px 1px #00000024,0 3px 14px 2px #0000001f,0 5px 5px -3px #0003;display:flex;flex-direction:column}.color-picker *{box-sizing:border-box;margin:0;font-size:12px}.color-picker .color-picker__arrow{height:0;width:0;border-style:solid;position:absolute;z-index:999999}.color-picker .color-picker__cursor{cursor:pointer;position:absolute;border-radius:50%;width:16px;height:16px;border:#222222 solid 2px;margin:0 -8px;transition:border .2s linear}.color-picker .color-picker__cursor.color-picker__cursor--sv{margin:-8px}.color-picker .color-picker__cursor.color-picker__cursor--light{border-color:#dadada}.color-picker .color-picker__sv{position:relative;direction:ltr;width:100%;height:130px;border:none;cursor:pointer;touch-action:manipulation;background-image:linear-gradient(to bottom,rgba(0,0,0,0) 0%,rgb(0,0,0) 100%),linear-gradient(to right,rgb(255,255,255) 0%,rgba(255,255,255,0) 100%);background-size:100% 100%}.color-picker .color-picker__controls{display:flex;margin:8px;align-items:center}.color-picker .color-picker__controls .color-picker__selected{margin:4px;flex:48px 0 0}.color-picker .color-picker__controls .color-picker__hav{margin:-4px -4px -4px 0;flex:auto 1 1}.color-picker .color-picker__selected-color{width:48px;height:48px;display:flex;align-items:stretch;justify-content:stretch;border-radius:50%;background-size:16px;background-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZlcnNpb249IjEuMSIgeD0iMCIgeT0iMCIgd2lkdGg9IjEwMCIgaGVpZ2h0PSIxMDAiIHZpZXdCb3g9IjAgMCAxMDAgMTAwIiBlbmFibGUtYmFja2dyb3VuZD0ibmV3IDAgMCAxMDAgMTAwIiB4bWw6c3BhY2U9InByZXNlcnZlIj48cmVjdCBmaWxsPSIjQ0NDQ0NDIiB3aWR0aD0iNTAiIGhlaWdodD0iNTAiLz48cmVjdCB4PSI1MCIgeT0iNTAiIGZpbGw9IiNDQ0NDQ0MiIHdpZHRoPSI1MCIgaGVpZ2h0PSI1MCIvPjxyZWN0IHk9IjUwIiBmaWxsPSIjRkZGRkZGIiB3aWR0aD0iNTAiIGhlaWdodD0iNTAiLz48cmVjdCB4PSI1MCIgZmlsbD0iI0ZGRkZGRiIgd2lkdGg9IjUwIiBoZWlnaHQ9IjUwIi8+PC9zdmc+);background-repeat:repeat;box-shadow:0 0 8px -2px #00000080}.color-picker .color-picker__selected-color div{width:100%;height:100%;border-radius:50%}.color-picker .color-picker__add-selected{background:none;border:none;padding:0;width:100%;margin:0;color:#222;transition:color .2s linear;display:flex;align-items:center;justify-content:center;height:100%}.color-picker .color-picker__add-selected svg{fill:currentcolor;width:24px;height:auto}.color-picker .color-picker__add-selected.color-picker__add-selected--light{color:#dadada}.color-picker .color-picker__hav{display:flex;flex-wrap:wrap}.color-picker .color-picker__slider{width:100%;flex:100% 1 1;height:16px;margin:8px;position:relative}.color-picker .color-picker__slider.color-picker__slider--hue{background-size:100% 100%;background-image:linear-gradient(to right,rgb(255,0,0) 0%,rgb(255,255,0) 16.6666666667%,rgb(0,255,0) 33.3333333333%,rgb(0,255,255) 50%,rgb(0,0,255) 66.6666666667%,rgb(255,0,255) 83.3333333333%,rgb(255,0,0) 100%)}.color-picker .color-picker__slider.color-picker__slider--value{background-size:100% 100%;background-image:linear-gradient(to right,rgb(0,0,0) 0%,rgb(255,255,255) 100%)}.color-picker .color-picker__slider.color-picker__slider--alpha{background-size:16px;background-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZlcnNpb249IjEuMSIgeD0iMCIgeT0iMCIgd2lkdGg9IjEwMCIgaGVpZ2h0PSIxMDAiIHZpZXdCb3g9IjAgMCAxMDAgMTAwIiBlbmFibGUtYmFja2dyb3VuZD0ibmV3IDAgMCAxMDAgMTAwIiB4bWw6c3BhY2U9InByZXNlcnZlIj48cmVjdCBmaWxsPSIjQ0NDQ0NDIiB3aWR0aD0iNTAiIGhlaWdodD0iNTAiLz48cmVjdCB4PSI1MCIgeT0iNTAiIGZpbGw9IiNDQ0NDQ0MiIHdpZHRoPSI1MCIgaGVpZ2h0PSI1MCIvPjxyZWN0IHk9IjUwIiBmaWxsPSIjRkZGRkZGIiB3aWR0aD0iNTAiIGhlaWdodD0iNTAiLz48cmVjdCB4PSI1MCIgZmlsbD0iI0ZGRkZGRiIgd2lkdGg9IjUwIiBoZWlnaHQ9IjUwIi8+PC9zdmc+);background-repeat:repeat}.color-picker .color-picker__slider.color-picker__slider--alpha .color-picker__slider--alpha-bg{position:absolute;inset:0}.color-picker .color-picker__inputs{display:flex;margin:8px;align-items:flex-start}.color-picker .color-picker__inputs .color-picker__input-fields{flex:auto 1 1}.color-picker .color-picker__inputs .color-picker__input-type{flex:24px 0 0}.color-picker .color-picker__input-fields{display:flex}.color-picker .color-picker__input-fields .color-picker__input-field{margin:4px;display:flex;flex-wrap:wrap;align-items:flex-start;justify-content:center;flex:20% 1 1}.color-picker .color-picker__input-fields .color-picker__input-field input{text-align:center;font-size:12px;height:24px;-webkit-appearance:none;appearance:none;flex:100% 1 1;padding:1px;border:#999 solid 1px;width:100%;background:none;min-width:0}.color-picker .color-picker__input-fields .color-picker__input-field input:invalid{box-shadow:none}.color-picker .color-picker__input-fields .color-picker__input-field input::-webkit-inner-spin-button,.color-picker .color-picker__input-fields .color-picker__input-field input::-webkit-outer-spin-button{-webkit-appearance:none;appearance:none;margin:0}.color-picker .color-picker__input-fields .color-picker__input-field .color-picker__input-field-label{flex:100% 1 1;display:block;text-align:center;margin-top:4px}.color-picker .color-picker__input-type{width:24px;height:24px;margin-top:4px;display:flex;flex-wrap:wrap;background-size:contain;background-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZlcnNpb249IjEuMSIgeD0iMCIgeT0iMCIgd2lkdGg9IjEwMCIgaGVpZ2h0PSIxMDAiIHZpZXdCb3g9IjAgMCAxMDAgMTAwIiBlbmFibGUtYmFja2dyb3VuZD0ibmV3IDAgMCAxMDAgMTAwIiB4bWw6c3BhY2U9InByZXNlcnZlIj48cG9seWdvbiBmaWxsPSIjMzMzMzMzIiBwb2ludHM9IjUwIDE2IDMwIDQ0IDcwIDQ0ICIvPjxwb2x5Z29uIGZpbGw9IiMzMzMzMzMiIHBvaW50cz0iNTAgODQgNzAgNTYgMzAgNTYgIi8+PC9zdmc+);background-repeat:no-repeat;background-position:center}.color-picker .color-picker__input-type .color-picker__input-type-arrow{display:block;cursor:pointer;flex:100% 1 1;width:100%;height:50%}.color-picker .color-picker__separator{border-top:1px solid #999;margin-left:8px;margin-right:8px;flex:100% 1 1}.color-picker .color-picker__preset{display:flex;margin:8px;align-items:center;flex-wrap:wrap}.color-picker .color-picker__preset-label{margin:4px;flex:100% 1 1}.color-picker .color-picker__preset-items{display:flex;flex:100% 1 1;flex-wrap:wrap;align-items:flex-start}.color-picker .color-picker__preset-items .color-picker__preset-item{position:relative;flex:20px 1 1;background-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZlcnNpb249IjEuMSIgeD0iMCIgeT0iMCIgd2lkdGg9IjEwMCIgaGVpZ2h0PSIxMDAiIHZpZXdCb3g9IjAgMCAxMDAgMTAwIiBlbmFibGUtYmFja2dyb3VuZD0ibmV3IDAgMCAxMDAgMTAwIiB4bWw6c3BhY2U9InByZXNlcnZlIj48cmVjdCBmaWxsPSIjQ0NDQ0NDIiB3aWR0aD0iNTAiIGhlaWdodD0iNTAiLz48cmVjdCB4PSI1MCIgeT0iNTAiIGZpbGw9IiNDQ0NDQ0MiIHdpZHRoPSI1MCIgaGVpZ2h0PSI1MCIvPjxyZWN0IHk9IjUwIiBmaWxsPSIjRkZGRkZGIiB3aWR0aD0iNTAiIGhlaWdodD0iNTAiLz48cmVjdCB4PSI1MCIgZmlsbD0iI0ZGRkZGRiIgd2lkdGg9IjUwIiBoZWlnaHQ9IjUwIi8+PC9zdmc+);background-size:100% 100%;margin:4px;border-radius:4px;border:1px solid #999;cursor:pointer}.color-picker .color-picker__preset-items .color-picker__preset-item .color-picker__preset-item-fill{position:relative;width:100%;padding-bottom:100%;border-radius:3px}.color-picker .color-picker__preset-items .color-picker__preset-item:empty{margin-top:0;margin-bottom:0;border-top:0;border-bottom:0}.color-picker .color-picker__remove-selected{border:none;padding:0;margin:0;color:#222;transition:color .2s linear;align-items:center;justify-content:center;box-shadow:0 0 8px -2px #00000080;position:absolute;width:12px;height:12px;right:-6px;top:-6px;background:#fff;border-radius:50%;display:flex}.color-picker .color-picker__remove-selected svg{fill:currentcolor;width:100%;height:auto}.color-picker .color-picker__buttons{display:flex;margin:0 8px 8px;align-items:center;flex-wrap:wrap;justify-content:flex-end}.color-picker .color-picker__buttons button{flex:auto 0 0;margin:4px;color:var(--nxt-color-picker-button-color, inherit);background:var(--nxt-color-picker-button-background, #dadada);padding:var(--nxt-color-picker-button-padding, 4px 8px);border:var(--nxt-color-picker-button-border, none);border-radius:var(--nxt-color-picker-button-border-radius, 4px);font-size:var(--nxt-color-picker-button-font-size, inherit);font-weight:var(--nxt-color-picker-button-font-weight, inherit)}:host-context(.color-picker__arrow--top) .color-picker{margin-bottom:16px}:host-context(.color-picker__arrow--top) .color-picker__arrow{border-width:12px 6px;border-color:#999 rgba(0,0,0,0) rgba(0,0,0,0) rgba(0,0,0,0);left:12px;bottom:-24px}:host-context(.color-picker__arrow--left) .color-picker{margin-right:16px}:host-context(.color-picker__arrow--left) .color-picker__arrow{border-width:6px 12px;border-color:rgba(0,0,0,0) rgba(0,0,0,0) rgba(0,0,0,0) #999;top:12px;left:230px}:host-context(.color-picker__arrow--right) .color-picker{margin-left:16px}:host-context(.color-picker__arrow--right) .color-picker__arrow{border-width:6px 12px;border-color:rgba(0,0,0,0) #999 rgba(0,0,0,0) rgba(0,0,0,0);top:12px;left:-24px}:host-context(.color-picker__arrow--bottom) .color-picker{margin-top:16px}:host-context(.color-picker__arrow--bottom) .color-picker__arrow{border-width:12px 6px;border-color:rgba(0,0,0,0) rgba(0,0,0,0) #999 rgba(0,0,0,0);top:-24px;left:12px}\n"] }]
640
- }], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i0.ChangeDetectorRef }, { type: i1.ColorPickerService }]; }, propDecorators: { onCancel: [{
639
+ args: [{ selector: 'nxt-color-picker', encapsulation: ViewEncapsulation.Emulated, template: "<div class=\"color-picker\"\r\n (click)=\"$event.stopPropagation()\"\r\n [ngStyle]=\"{\r\n visibility: !show ? 'hidden' : 'visible',\r\n width: width || '',\r\n height: height || ''\r\n }\"\r\n *ngIf=\"show\">\r\n <div *ngIf=\"dialogDisplay == 'popup'\"\r\n class=\"color-picker__arrow\"></div>\r\n <div *ngIf=\"mode == colorModeInternal.color\"\r\n class=\"color-picker__sv\"\r\n nxtSlider\r\n [rgX]=\"1\"\r\n [rgY]=\"1\"\r\n (newValue)=\"onColorChange($event)\"\r\n (dragStart)=\"onDragStart('saturation-lightness')\"\r\n (dragEnd)=\"onDragEnd('saturation-lightness')\"\r\n [ngStyle]=\"{ \r\n backgroundColor: hueSliderColor || ''\r\n }\">\r\n <div class=\"color-picker__cursor color-picker__cursor--sv\"\r\n [ngClass]=\"{ 'color-picker__cursor--light': svSliderLight }\"\r\n [ngStyle]=\"{\r\n top: (slider?.v || 0) * 100 + '%',\r\n left: (slider?.s || 0) * 100 + '%'\r\n }\"></div>\r\n </div>\r\n <div class=\"color-picker__controls\">\r\n <div class=\"color-picker__selected\">\r\n <div class=\"color-picker__selected-color\">\r\n <div [ngStyle]=\"{ \r\n backgroundColor: selectedColor || ''\r\n }\"><button *ngIf=\"presetColorsEditable && !(maxPresetColors && (presetColors?.length || 0) >= maxPresetColors)\"\r\n type=\"button\"\r\n title=\"Add color to preset\"\r\n i18n-title=\"@@nxt-color-picker.button.add-color\"\r\n class=\"color-picker__add-selected\"\r\n [ngClass]=\"{ 'color-picker__add-selected--light': alphaSliderLight }\"\r\n (click)=\"onAddPresetColor(selectedColor)\"><svg xmlns=\"http://www.w3.org/2000/svg\"\r\n width=\"24\"\r\n height=\"24\"\r\n viewBox=\"0 0 24 24\">\r\n <path d=\"M19 13h-6v6h-2v-6H5v-2h6V5h2v6h6v2z\" />\r\n <path d=\"M0 0h24v24H0z\"\r\n fill=\"none\" />\r\n </svg></button></div>\r\n </div>\r\n </div>\r\n <div class=\"color-picker__hav\">\r\n <div *ngIf=\"mode == colorModeInternal.color\"\r\n class=\"color-picker__slider color-picker__slider--hue\"\r\n nxtSlider\r\n [rgX]=\"1\"\r\n (newValue)=\"onHueChange($event)\"\r\n (dragStart)=\"onDragStart('hue')\"\r\n (dragEnd)=\"onDragEnd('hue')\">\r\n <div class=\"color-picker__cursor\"\r\n [ngClass]=\"{ 'color-picker__cursor--light': hueSliderLight }\"\r\n [ngStyle]=\"{\r\n left: (slider?.h || 0) * 100 + '%'\r\n }\"></div>\r\n </div>\r\n <div *ngIf=\"mode == colorModeInternal.grayscale\"\r\n class=\"color-picker__slider color-picker__slider--value\"\r\n nxtSlider\r\n [rgX]=\"1\"\r\n (newValue)=\"onValueChange($event)\"\r\n (dragStart)=\"onDragStart('value')\"\r\n (dragEnd)=\"onDragEnd('value')\">\r\n <div class=\"color-picker__cursor\"\r\n [ngClass]=\"{ 'color-picker__cursor--light': valueSliderLight }\"\r\n [ngStyle]=\"{\r\n left: (1 - (slider?.v || 0)) * 100 + '%'\r\n }\"></div>\r\n </div>\r\n <div *ngIf=\"alphaChannel != 'disabled'\"\r\n class=\"color-picker__slider color-picker__slider--alpha\"\r\n nxtSlider\r\n [rgX]=\"1\"\r\n (newValue)=\"onAlphaChange($event)\"\r\n (dragStart)=\"onDragStart('alpha')\"\r\n (dragEnd)=\"onDragEnd('alpha')\">\r\n <div class=\"color-picker__slider--alpha-bg\"\r\n [ngStyle]=\"{\r\n backgroundImage: alphaSliderColor || ''\r\n }\">\r\n <div class=\"color-picker__cursor\"\r\n [ngClass]=\"{ 'color-picker__cursor--light': alphaSliderLight }\"\r\n [ngStyle]=\"{\r\n left: (slider?.a || 0) * 100 + '%'\r\n }\"></div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div *ngIf=\"!disableInput && (mode == colorModeInternal.color || mode == colorModeInternal.grayscale)\"\r\n class=\"color-picker__inputs\">\r\n <div class=\"color-picker__input-fields\">\r\n <ng-container *ngIf=\"mode == colorModeInternal.grayscale; else formatSwitch\">\r\n <div class=\"color-picker__input-field\">\r\n <input type=\"number\"\r\n pattern=\"[0-9]*\"\r\n min=\"0\"\r\n max=\"100\"\r\n nxtText\r\n [rg]=\"100\"\r\n [value]=\"hslaText?.l?.toFixed(0)\"\r\n (keyup.enter)=\"onAccept($event)\"\r\n (newValue)=\"onValueInput($event)\" />\r\n <span class=\"color-picker__input-field-label\">V</span>\r\n </div>\r\n <div *ngIf=\"alphaChannel != 'disabled'\"\r\n class=\"color-picker__input-field\">\r\n <input type=\"number\"\r\n pattern=\"[0-9]+([\\.,][0-9]{1,2})?\"\r\n min=\"0\"\r\n max=\"1\"\r\n step=\"0.01\"\r\n nxtText\r\n [rg]=\"1\"\r\n [value]=\"formatAlpha(hslaText?.a)\"\r\n (keyup.enter)=\"onAccept($event)\"\r\n (newValue)=\"onAlphaInput($event)\" />\r\n <span class=\"color-picker__input-field-label\">A</span>\r\n </div>\r\n </ng-container>\r\n <ng-template #formatSwitch>\r\n <ng-container [ngSwitch]=\"format\">\r\n <ng-container *ngSwitchCase=\"'hsla'\">\r\n <div class=\"color-picker__input-field\">\r\n <input type=\"number\"\r\n pattern=\"[0-9]*\"\r\n min=\"0\"\r\n max=\"360\"\r\n nxtText\r\n [rg]=\"360\"\r\n [value]=\"hslaText?.h?.toFixed(0)\"\r\n (keyup.enter)=\"onAccept($event)\"\r\n (newValue)=\"onHueInput($event)\" />\r\n <span class=\"color-picker__input-field-label\">H</span>\r\n </div>\r\n <div class=\"color-picker__input-field\">\r\n <input type=\"number\"\r\n pattern=\"[0-9]*\"\r\n min=\"0\"\r\n max=\"100\"\r\n nxtText\r\n [rg]=\"100\"\r\n [value]=\"hslaText?.s?.toFixed(0)\"\r\n (keyup.enter)=\"onAccept($event)\"\r\n (newValue)=\"onSaturationInput($event)\" />\r\n <span class=\"color-picker__input-field-label\">S</span>\r\n </div>\r\n <div class=\"color-picker__input-field\">\r\n <input type=\"number\"\r\n pattern=\"[0-9]*\"\r\n min=\"0\"\r\n max=\"100\"\r\n nxtText\r\n [rg]=\"100\"\r\n [value]=\"hslaText?.l?.toFixed(0)\"\r\n (keyup.enter)=\"onAccept($event)\"\r\n (newValue)=\"onLightnessInput($event)\" />\r\n <span class=\"color-picker__input-field-label\">L</span>\r\n </div>\r\n <div *ngIf=\"alphaChannel != 'disabled'\"\r\n class=\"color-picker__input-field\">\r\n <input type=\"number\"\r\n pattern=\"[0-9]+([\\.,][0-9]{1,2})?\"\r\n min=\"0\"\r\n max=\"1\"\r\n step=\"0.01\"\r\n nxtText\r\n [rg]=\"1\"\r\n [value]=\"formatAlpha(hslaText?.a)\"\r\n (keyup.enter)=\"onAccept($event)\"\r\n (newValue)=\"onAlphaInput($event)\" />\r\n <span class=\"color-picker__input-field-label\">A</span>\r\n </div>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"'rgba'\">\r\n <div class=\"color-picker__input-field\">\r\n <input type=\"number\"\r\n pattern=\"[0-9]*\"\r\n min=\"0\"\r\n max=\"255\"\r\n nxtText\r\n [rg]=\"255\"\r\n [value]=\"rgbaText?.r?.toFixed(0)\"\r\n (keyup.enter)=\"onAccept($event)\"\r\n (newValue)=\"onRedInput($event)\" />\r\n <span class=\"color-picker__input-field-label\">R</span>\r\n </div>\r\n <div class=\"color-picker__input-field\">\r\n <input type=\"number\"\r\n pattern=\"[0-9]*\"\r\n min=\"0\"\r\n max=\"255\"\r\n nxtText\r\n [rg]=\"255\"\r\n [value]=\"rgbaText?.g?.toFixed(0)\"\r\n (keyup.enter)=\"onAccept($event)\"\r\n (newValue)=\"onGreenInput($event)\" />\r\n <span class=\"color-picker__input-field-label\">G</span>\r\n </div>\r\n <div class=\"color-picker__input-field\">\r\n <input type=\"number\"\r\n pattern=\"[0-9]*\"\r\n min=\"0\"\r\n max=\"255\"\r\n nxtText\r\n [rg]=\"255\"\r\n [value]=\"rgbaText?.b?.toFixed(0)\"\r\n (keyup.enter)=\"onAccept($event)\"\r\n (newValue)=\"onBlueInput($event)\" />\r\n <span class=\"color-picker__input-field-label\">B</span>\r\n </div>\r\n <div *ngIf=\"alphaChannel != 'disabled'\"\r\n class=\"color-picker__input-field\">\r\n <input type=\"number\"\r\n pattern=\"[0-9]+([\\.,][0-9]{1,2})?\"\r\n min=\"0\"\r\n max=\"1\"\r\n step=\"0.01\"\r\n nxtText\r\n [rg]=\"1\"\r\n [value]=\"formatAlpha(hslaText?.a)\"\r\n (keyup.enter)=\"onAccept($event)\"\r\n (newValue)=\"onAlphaInput($event)\" />\r\n <span class=\"color-picker__input-field-label\">A</span>\r\n </div>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"'cmyk'\">\r\n <div class=\"color-picker__input-field\">\r\n <input type=\"number\"\r\n pattern=\"[0-9]*\"\r\n min=\"0\"\r\n max=\"100\"\r\n nxtText\r\n [rg]=\"100\"\r\n [value]=\"cmykText?.c?.toFixed(0)\"\r\n (keyup.enter)=\"onAccept($event)\"\r\n (newValue)=\"onCyanInput($event)\" />\r\n <span class=\"color-picker__input-field-label\">C</span>\r\n </div>\r\n <div class=\"color-picker__input-field\">\r\n <input type=\"number\"\r\n pattern=\"[0-9]*\"\r\n min=\"0\"\r\n max=\"100\"\r\n nxtText\r\n [rg]=\"100\"\r\n [value]=\"cmykText?.m?.toFixed(0)\"\r\n (keyup.enter)=\"onAccept($event)\"\r\n (newValue)=\"onMagentaInput($event)\" />\r\n <span class=\"color-picker__input-field-label\">M</span>\r\n </div>\r\n <div class=\"color-picker__input-field\">\r\n <input type=\"number\"\r\n pattern=\"[0-9]*\"\r\n min=\"0\"\r\n max=\"100\"\r\n nxtText\r\n [rg]=\"100\"\r\n [value]=\"cmykText?.y?.toFixed(0)\"\r\n (keyup.enter)=\"onAccept($event)\"\r\n (newValue)=\"onYellowInput($event)\" />\r\n <span class=\"color-picker__input-field-label\">Y</span>\r\n </div>\r\n <div class=\"color-picker__input-field\">\r\n <input type=\"number\"\r\n pattern=\"[0-9]*\"\r\n min=\"0\"\r\n max=\"100\"\r\n nxtText\r\n [rg]=\"100\"\r\n [value]=\"cmykText?.k?.toFixed(0)\"\r\n (keyup.enter)=\"onAccept($event)\"\r\n (newValue)=\"onBlackInput($event)\" />\r\n <span class=\"color-picker__input-field-label\">K</span>\r\n </div>\r\n <div *ngIf=\"alphaChannel != 'disabled'\"\r\n class=\"color-picker__input-field\">\r\n <input type=\"number\"\r\n pattern=\"[0-9]+([\\.,][0-9]{1,2})?\"\r\n min=\"0\"\r\n max=\"1\"\r\n step=\"0.01\"\r\n nxtText\r\n [rg]=\"1\"\r\n [value]=\"formatAlpha(cmykText?.a)\"\r\n (keyup.enter)=\"onAccept($event)\"\r\n (newValue)=\"onAlphaInput($event)\" />\r\n <span class=\"color-picker__input-field-label\">A</span>\r\n </div>\r\n </ng-container>\r\n <ng-container *ngSwitchDefault>\r\n <div class=\"color-picker__input-field\">\r\n <input nxtText\r\n [value]=\"hexText\"\r\n (blur)=\"onHexInput()\"\r\n (keyup.enter)=\"onAccept($event)\"\r\n (newValue)=\"onHexInput($event)\" />\r\n <span class=\"color-picker__input-field-label\">Hex</span>\r\n </div>\r\n <div *ngIf=\"alphaChannel == 'forced'\"\r\n class=\"color-picker__input-field\">\r\n <input type=\"number\"\r\n pattern=\"[0-9]+([\\.,][0-9]{1,2})?\"\r\n min=\"0\"\r\n max=\"1\"\r\n step=\"0.01\"\r\n nxtText\r\n [rg]=\"1\"\r\n [value]=\"formatAlpha(hexAlpha)\"\r\n (keyup.enter)=\"onAccept($event)\"\r\n (newValue)=\"onAlphaInput($event)\" />\r\n <span class=\"color-picker__input-field-label\">A</span>\r\n </div>\r\n </ng-container>\r\n </ng-container>\r\n </ng-template>\r\n </div>\r\n <div *ngIf=\"mode == colorModeInternal.color\"\r\n class=\"color-picker__input-type\">\r\n <span class=\"color-picker__input-type-arrow\"\r\n (click)=\"onFormatToggle(1)\"></span>\r\n <span class=\"color-picker__input-type-arrow\"\r\n (click)=\"onFormatToggle(-1)\"></span>\r\n </div>\r\n </div>\r\n <ng-container *ngIf=\"presetColors?.length\">\r\n <div class=\"color-picker__separator\"></div>\r\n <div class=\"color-picker__preset\">\r\n <div *ngIf=\"presetLabel\"\r\n class=\"color-picker__preset-label\">\r\n <ng-container *ngIf=\"presetLabel === true; else stringLabel\"\r\n i18n=\"@@nxt-color-picker.preset-colors\">Preset colors</ng-container>\r\n <ng-template #stringLabel>{{ presetLabel }}</ng-template>\r\n </div>\r\n <div *ngIf=\"presetColors?.length\"\r\n class=\"color-picker__preset-items\">\r\n <ng-container *ngFor=\"let color of presetColors\">\r\n <div *ngIf=\"stringToRgba(color) as rgba\"\r\n class=\"color-picker__preset-item\"\r\n [title]=\"color\"\r\n (click)=\"setColorFromString(color)\">\r\n <div class=\"color-picker__preset-item-fill\"\r\n [ngStyle]=\"{ \r\n backgroundColor: rgba || ''\r\n }\"><button *ngIf=\"presetColorsEditable\"\r\n type=\"button\"\r\n title=\"Remove Color\"\r\n i18n-title=\"@@nxt-color-picker.button.remove-color\"\r\n class=\"color-picker__remove-selected\"\r\n (click)=\"onRemovePresetColor(color)\"><svg xmlns=\"http://www.w3.org/2000/svg\"\r\n width=\"24\"\r\n height=\"24\"\r\n viewBox=\"0 0 24 24\">\r\n <path d=\"M19 6.41L17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12z\" />\r\n <path d=\"M0 0h24v24H0z\"\r\n fill=\"none\" />\r\n </svg></button></div>\r\n </div>\r\n </ng-container>\r\n <div *ngFor=\"let i of fill(50)\"\r\n class=\"color-picker__preset-item\"></div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n <div *ngIf=\"okButton || cancelButton\"\r\n class=\"color-picker__buttons\">\r\n <button *ngIf=\"cancelButton\"\r\n type=\"button\"\r\n (click)=\"onCancel($event)\"\r\n i18n=\"@@nxt-color-picker.button.cancel\">Cancel</button>\r\n <button *ngIf=\"okButton\"\r\n type=\"button\"\r\n (click)=\"onAccept($event)\"\r\n i18n=\"@@nxt-color-picker.button.ok\">OK</button>\r\n </div>\r\n</div>\r\n", styles: [".color-picker{position:relative;-webkit-user-select:none;user-select:none;background-color:#fff;box-shadow:0 8px 10px 1px #00000024,0 3px 14px 2px #0000001f,0 5px 5px -3px #0003;display:flex;flex-direction:column}.color-picker *{box-sizing:border-box;margin:0;font-size:12px}.color-picker .color-picker__arrow{height:0;width:0;border-style:solid;position:absolute;z-index:999999}.color-picker .color-picker__cursor{cursor:pointer;position:absolute;border-radius:50%;width:16px;height:16px;border:#222222 solid 2px;margin:0 -8px;transition:border .2s linear}.color-picker .color-picker__cursor.color-picker__cursor--sv{margin:-8px}.color-picker .color-picker__cursor.color-picker__cursor--light{border-color:#dadada}.color-picker .color-picker__sv{position:relative;direction:ltr;width:100%;height:130px;border:none;cursor:pointer;touch-action:manipulation;background-image:linear-gradient(to bottom,rgba(0,0,0,0) 0%,rgb(0,0,0) 100%),linear-gradient(to right,rgb(255,255,255) 0%,rgba(255,255,255,0) 100%);background-size:100% 100%}.color-picker .color-picker__controls{display:flex;margin:8px;align-items:center}.color-picker .color-picker__controls .color-picker__selected{margin:4px;flex:48px 0 0}.color-picker .color-picker__controls .color-picker__hav{margin:-4px -4px -4px 0;flex:auto 1 1}.color-picker .color-picker__selected-color{width:48px;height:48px;display:flex;align-items:stretch;justify-content:stretch;border-radius:50%;background-size:16px;background-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZlcnNpb249IjEuMSIgeD0iMCIgeT0iMCIgd2lkdGg9IjEwMCIgaGVpZ2h0PSIxMDAiIHZpZXdCb3g9IjAgMCAxMDAgMTAwIiBlbmFibGUtYmFja2dyb3VuZD0ibmV3IDAgMCAxMDAgMTAwIiB4bWw6c3BhY2U9InByZXNlcnZlIj48cmVjdCBmaWxsPSIjQ0NDQ0NDIiB3aWR0aD0iNTAiIGhlaWdodD0iNTAiLz48cmVjdCB4PSI1MCIgeT0iNTAiIGZpbGw9IiNDQ0NDQ0MiIHdpZHRoPSI1MCIgaGVpZ2h0PSI1MCIvPjxyZWN0IHk9IjUwIiBmaWxsPSIjRkZGRkZGIiB3aWR0aD0iNTAiIGhlaWdodD0iNTAiLz48cmVjdCB4PSI1MCIgZmlsbD0iI0ZGRkZGRiIgd2lkdGg9IjUwIiBoZWlnaHQ9IjUwIi8+PC9zdmc+);background-repeat:repeat;box-shadow:0 0 8px -2px #00000080}.color-picker .color-picker__selected-color div{width:100%;height:100%;border-radius:50%}.color-picker .color-picker__add-selected{background:none;border:none;padding:0;width:100%;margin:0;color:#222;transition:color .2s linear;display:flex;align-items:center;justify-content:center;height:100%}.color-picker .color-picker__add-selected svg{fill:currentcolor;width:24px;height:auto}.color-picker .color-picker__add-selected.color-picker__add-selected--light{color:#dadada}.color-picker .color-picker__hav{display:flex;flex-wrap:wrap}.color-picker .color-picker__slider{width:100%;flex:100% 1 1;height:16px;margin:8px;position:relative}.color-picker .color-picker__slider.color-picker__slider--hue{background-size:100% 100%;background-image:linear-gradient(to right,rgb(255,0,0) 0%,rgb(255,255,0) 16.6666666667%,rgb(0,255,0) 33.3333333333%,rgb(0,255,255) 50%,rgb(0,0,255) 66.6666666667%,rgb(255,0,255) 83.3333333333%,rgb(255,0,0) 100%)}.color-picker .color-picker__slider.color-picker__slider--value{background-size:100% 100%;background-image:linear-gradient(to right,rgb(0,0,0) 0%,rgb(255,255,255) 100%)}.color-picker .color-picker__slider.color-picker__slider--alpha{background-size:16px;background-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZlcnNpb249IjEuMSIgeD0iMCIgeT0iMCIgd2lkdGg9IjEwMCIgaGVpZ2h0PSIxMDAiIHZpZXdCb3g9IjAgMCAxMDAgMTAwIiBlbmFibGUtYmFja2dyb3VuZD0ibmV3IDAgMCAxMDAgMTAwIiB4bWw6c3BhY2U9InByZXNlcnZlIj48cmVjdCBmaWxsPSIjQ0NDQ0NDIiB3aWR0aD0iNTAiIGhlaWdodD0iNTAiLz48cmVjdCB4PSI1MCIgeT0iNTAiIGZpbGw9IiNDQ0NDQ0MiIHdpZHRoPSI1MCIgaGVpZ2h0PSI1MCIvPjxyZWN0IHk9IjUwIiBmaWxsPSIjRkZGRkZGIiB3aWR0aD0iNTAiIGhlaWdodD0iNTAiLz48cmVjdCB4PSI1MCIgZmlsbD0iI0ZGRkZGRiIgd2lkdGg9IjUwIiBoZWlnaHQ9IjUwIi8+PC9zdmc+);background-repeat:repeat}.color-picker .color-picker__slider.color-picker__slider--alpha .color-picker__slider--alpha-bg{position:absolute;inset:0}.color-picker .color-picker__inputs{display:flex;margin:8px;align-items:flex-start}.color-picker .color-picker__inputs .color-picker__input-fields{flex:auto 1 1}.color-picker .color-picker__inputs .color-picker__input-type{flex:24px 0 0}.color-picker .color-picker__input-fields{display:flex}.color-picker .color-picker__input-fields .color-picker__input-field{margin:4px;display:flex;flex-wrap:wrap;align-items:flex-start;justify-content:center;flex:20% 1 1}.color-picker .color-picker__input-fields .color-picker__input-field input{text-align:center;font-size:12px;height:24px;appearance:none;flex:100% 1 1;padding:1px;border:#999 solid 1px;width:100%;background:none;min-width:0}.color-picker .color-picker__input-fields .color-picker__input-field input:invalid{box-shadow:none}.color-picker .color-picker__input-fields .color-picker__input-field input::-webkit-inner-spin-button,.color-picker .color-picker__input-fields .color-picker__input-field input::-webkit-outer-spin-button{appearance:none;margin:0}.color-picker .color-picker__input-fields .color-picker__input-field .color-picker__input-field-label{flex:100% 1 1;display:block;text-align:center;margin-top:4px}.color-picker .color-picker__input-type{width:24px;height:24px;margin-top:4px;display:flex;flex-wrap:wrap;background-size:contain;background-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZlcnNpb249IjEuMSIgeD0iMCIgeT0iMCIgd2lkdGg9IjEwMCIgaGVpZ2h0PSIxMDAiIHZpZXdCb3g9IjAgMCAxMDAgMTAwIiBlbmFibGUtYmFja2dyb3VuZD0ibmV3IDAgMCAxMDAgMTAwIiB4bWw6c3BhY2U9InByZXNlcnZlIj48cG9seWdvbiBmaWxsPSIjMzMzMzMzIiBwb2ludHM9IjUwIDE2IDMwIDQ0IDcwIDQ0ICIvPjxwb2x5Z29uIGZpbGw9IiMzMzMzMzMiIHBvaW50cz0iNTAgODQgNzAgNTYgMzAgNTYgIi8+PC9zdmc+);background-repeat:no-repeat;background-position:center}.color-picker .color-picker__input-type .color-picker__input-type-arrow{display:block;cursor:pointer;flex:100% 1 1;width:100%;height:50%}.color-picker .color-picker__separator{border-top:1px solid #999;margin-left:8px;margin-right:8px;flex:100% 1 1}.color-picker .color-picker__preset{display:flex;margin:8px;align-items:center;flex-wrap:wrap}.color-picker .color-picker__preset-label{margin:4px;flex:100% 1 1}.color-picker .color-picker__preset-items{display:flex;flex:100% 1 1;flex-wrap:wrap;align-items:flex-start}.color-picker .color-picker__preset-items .color-picker__preset-item{position:relative;flex:20px 1 1;background-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZlcnNpb249IjEuMSIgeD0iMCIgeT0iMCIgd2lkdGg9IjEwMCIgaGVpZ2h0PSIxMDAiIHZpZXdCb3g9IjAgMCAxMDAgMTAwIiBlbmFibGUtYmFja2dyb3VuZD0ibmV3IDAgMCAxMDAgMTAwIiB4bWw6c3BhY2U9InByZXNlcnZlIj48cmVjdCBmaWxsPSIjQ0NDQ0NDIiB3aWR0aD0iNTAiIGhlaWdodD0iNTAiLz48cmVjdCB4PSI1MCIgeT0iNTAiIGZpbGw9IiNDQ0NDQ0MiIHdpZHRoPSI1MCIgaGVpZ2h0PSI1MCIvPjxyZWN0IHk9IjUwIiBmaWxsPSIjRkZGRkZGIiB3aWR0aD0iNTAiIGhlaWdodD0iNTAiLz48cmVjdCB4PSI1MCIgZmlsbD0iI0ZGRkZGRiIgd2lkdGg9IjUwIiBoZWlnaHQ9IjUwIi8+PC9zdmc+);background-size:100% 100%;margin:4px;border-radius:4px;border:1px solid #999;cursor:pointer}.color-picker .color-picker__preset-items .color-picker__preset-item .color-picker__preset-item-fill{position:relative;width:100%;padding-bottom:100%;border-radius:3px}.color-picker .color-picker__preset-items .color-picker__preset-item:empty{margin-top:0;margin-bottom:0;border-top:0;border-bottom:0}.color-picker .color-picker__remove-selected{border:none;padding:0;margin:0;color:#222;transition:color .2s linear;align-items:center;justify-content:center;box-shadow:0 0 8px -2px #00000080;position:absolute;width:12px;height:12px;right:-6px;top:-6px;background:#fff;border-radius:50%;display:flex}.color-picker .color-picker__remove-selected svg{fill:currentcolor;width:100%;height:auto}.color-picker .color-picker__buttons{display:flex;margin:0 8px 8px;align-items:center;flex-wrap:wrap;justify-content:flex-end}.color-picker .color-picker__buttons button{flex:auto 0 0;margin:4px;color:var(--nxt-color-picker-button-color, inherit);background:var(--nxt-color-picker-button-background, #dadada);padding:var(--nxt-color-picker-button-padding, 4px 8px);border:var(--nxt-color-picker-button-border, none);border-radius:var(--nxt-color-picker-button-border-radius, 4px);font-size:var(--nxt-color-picker-button-font-size, inherit);font-weight:var(--nxt-color-picker-button-font-weight, inherit)}:host-context(.color-picker__arrow--top) .color-picker{margin-bottom:16px}:host-context(.color-picker__arrow--top) .color-picker__arrow{border-width:12px 6px;border-color:#999 rgba(0,0,0,0) rgba(0,0,0,0) rgba(0,0,0,0);left:12px;bottom:-24px}:host-context(.color-picker__arrow--left) .color-picker{margin-right:16px}:host-context(.color-picker__arrow--left) .color-picker__arrow{border-width:6px 12px;border-color:rgba(0,0,0,0) rgba(0,0,0,0) rgba(0,0,0,0) #999;top:12px;left:230px}:host-context(.color-picker__arrow--right) .color-picker{margin-left:16px}:host-context(.color-picker__arrow--right) .color-picker__arrow{border-width:6px 12px;border-color:rgba(0,0,0,0) #999 rgba(0,0,0,0) rgba(0,0,0,0);top:12px;left:-24px}:host-context(.color-picker__arrow--bottom) .color-picker{margin-top:16px}:host-context(.color-picker__arrow--bottom) .color-picker__arrow{border-width:12px 6px;border-color:rgba(0,0,0,0) rgba(0,0,0,0) #999 rgba(0,0,0,0);top:-24px;left:12px}\n"] }]
640
+ }], ctorParameters: () => [{ type: i0.ElementRef }, { type: i0.ChangeDetectorRef }, { type: i1.ColorPickerService }], propDecorators: { onCancel: [{
641
641
  type: HostListener,
642
642
  args: ['document:keyup.esc', ['$event']]
643
643
  }], onAccept: [{
@@ -650,4 +650,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.2", ngImpor
650
650
  type: HostListener,
651
651
  args: ['document:focusin', ['$event']]
652
652
  }] } });
653
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29sb3ItcGlja2VyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2NvbG9yLXBpY2tlci9zcmMvbGliL2NvbG9yLXBpY2tlci9jb2xvci1waWNrZXIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvY29sb3ItcGlja2VyL3NyYy9saWIvY29sb3ItcGlja2VyL2NvbG9yLXBpY2tlci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQXVDLFNBQVMsRUFBYyxZQUFZLEVBQXFCLGlCQUFpQixFQUFFLE1BQU0sZUFBZSxDQUFBO0FBQzlJLE9BQU8sRUFBRSxTQUFTLEVBQUUsZUFBZSxFQUFFLGVBQWUsRUFBRSxlQUFlLEVBQUUsVUFBVSxFQUFFLFlBQVksRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxZQUFZLEVBQUUsWUFBWSxFQUFFLE1BQU0sa0JBQWtCLENBQUE7QUFDNU4sT0FBTyxFQUFFLGlCQUFpQixFQUFFLHNCQUFzQixFQUFFLE1BQU0scUJBQXFCLENBQUE7QUFDL0UsT0FBTyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxNQUFNLG9CQUFvQixDQUFBO0FBQzNELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxZQUFZLEVBQWlELGNBQWMsRUFBRSxZQUFZLEVBQUUsY0FBYyxFQUFhLE1BQU0sb0JBQW9CLENBQUE7QUFDNUssT0FBTyxFQUFnQixnQkFBZ0IsRUFBRSxtQkFBbUIsRUFBZSxlQUFlLEVBQWlCLGlCQUFpQixFQUFnQixnQkFBZ0IsRUFBRSxNQUFNLGtCQUFrQixDQUFBOzs7Ozs7QUFHdEw7O0dBRUc7QUFPSCxNQUFNLE9BQU8sb0JBQW9CO0lBdUU3QixZQUNZLEtBQWlCLEVBQ2pCLEtBQXdCLEVBQ3hCLE9BQTJC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LFFBQVEsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFmdGVyVmlld0NoZWNrZWQsIENoYW5nZURldGVjdG9yUmVmLCBDb21wb25lbnQsIEVsZW1lbnRSZWYsIEhvc3RMaXN0ZW5lciwgT25EZXN0cm95LCBPbkluaXQsIFZpZXdFbmNhcHN1bGF0aW9uIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSdcclxuaW1wb3J0IHsgY215a1RvUmdiLCBkZW5vcm1hbGl6ZUNNWUssIGRlbm9ybWFsaXplSFNMQSwgZGVub3JtYWxpemVSR0JBLCBmb3JtYXRDbXlrLCBmb3JtYXRPdXRwdXQsIGhzbGFUb0hzdmEsIGhzdmFUb0hzbGEsIGhzdmFUb1JnYmEsIHJnYmFUb0NteWssIHJnYmFUb0hleCwgcmdiYVRvSHN2YSwgc3RyaW5nVG9DbXlrLCBzdHJpbmdUb0hzdmEgfSBmcm9tICcuLi8uLi91dGlsL2NvbG9yJ1xyXG5pbXBvcnQgeyBvcGFxdWVTbGlkZXJMaWdodCwgdHJhbnNwYXJlbnRTbGlkZXJMaWdodCB9IGZyb20gJy4uLy4uL3V0aWwvY29udHJhc3QnXHJcbmltcG9ydCB7IENteWssIEhzbGEsIEhzdmEsIFJnYmEgfSBmcm9tICcuLi8uLi91dGlsL2Zvcm1hdHMnXHJcbmltcG9ydCB7IENvbG9yTW9kZUludGVybmFsLCBjb21wb3NlZFBhdGgsIEN1cnNvckV2ZW50LCBEaWFsb2dDb25maWcsIERpcmVjdGl2ZUNhbGxiYWNrcywgcGFyc2VDb2xvck1vZGUsIHNpemVUb1N0cmluZywgU2xpZGVyUG9zaXRpb24sIFRleHRFdmVudCB9IGZyb20gJy4uLy4uL3V0aWwvaGVscGVycydcclxuaW1wb3J0IHsgQWxwaGFDaGFubmVsLCBBbHBoYUNoYW5uZWxFbnVtLCBBbHBoYUVuYWJsZWRGb3JtYXRzLCBDb2xvckZvcm1hdCwgQ29sb3JGb3JtYXRFbnVtLCBEaWFsb2dEaXNwbGF5LCBEaWFsb2dEaXNwbGF5RW51bSwgT3V0cHV0Rm9ybWF0LCBPdXRwdXRGb3JtYXRFbnVtIH0gZnJvbSAnLi4vLi4vdXRpbC90eXBlcydcclxuaW1wb3J0IHsgQ29sb3JQaWNrZXJTZXJ2aWNlIH0gZnJvbSAnLi4vY29sb3ItcGlja2VyLnNlcnZpY2UnXHJcblxyXG4vKipcclxuICogQGludGVybmFsXHJcbiAqL1xyXG5AQ29tcG9uZW50KHtcclxuICAgIHNlbGVjdG9yOiAnbnh0LWNvbG9yLXBpY2tlcicsXHJcbiAgICB0ZW1wbGF0ZVVybDogJy4vY29sb3ItcGlja2VyLmNvbXBvbmVudC5odG1sJyxcclxuICAgIHN0eWxlVXJsczogWycuL2NvbG9yLXBpY2tlci5jb21wb25lbnQuc2NzcyddLFxyXG4gICAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uRW11bGF0ZWRcclxufSlcclxuZXhwb3J0IGNsYXNzIENvbG9yUGlja2VyQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3ksIEFmdGVyVmlld0NoZWNrZWQge1xyXG5cclxuICAgIHJlYWRvbmx5IGNvbG9yTW9kZUludGVybmFsID0gQ29sb3JNb2RlSW50ZXJuYWxcclxuXHJcbiAgICBwcml2YXRlIGhzdmE/OiBIc3ZhXHJcbiAgICBwcml2YXRlIGNteWs/OiBDbXlrXHJcblxyXG4gICAgcHJpdmF0ZSBjbXlrQ29sb3IgPSAnJ1xyXG4gICAgcHJpdmF0ZSBvdXRwdXRDb2xvciA9ICcnXHJcbiAgICBwcml2YXRlIGluaXRpYWxDb2xvciA9ICcnXHJcbiAgICBwcml2YXRlIGZhbGxiYWNrQ29sb3I/OiBzdHJpbmdcclxuXHJcbiAgICBwcml2YXRlIHNsaWRlckg/OiBudW1iZXJcclxuXHJcbiAgICBwcml2YXRlIGRpYWxvZ0lucHV0RmllbGRzOiBDb2xvckZvcm1hdFtdID0gW1xyXG4gICAgICAgIENvbG9yRm9ybWF0RW51bS5oZXgsXHJcbiAgICAgICAgQ29sb3JGb3JtYXRFbnVtLnJnYmEsXHJcbiAgICAgICAgQ29sb3JGb3JtYXRFbnVtLmhzbGEsXHJcbiAgICAgICAgQ29sb3JGb3JtYXRFbnVtLmNteWtcclxuICAgIF1cclxuXHJcbiAgICBwcml2YXRlIGNhbGxiYWNrcz86IERpcmVjdGl2ZUNhbGxiYWNrc1xyXG5cclxuICAgIHNob3cgPSBmYWxzZVxyXG5cclxuICAgIGZvcm1hdDogQ29sb3JGb3JtYXQgPSBDb2xvckZvcm1hdEVudW0uaGV4XHJcbiAgICBzbGlkZXI/OiBTbGlkZXJQb3NpdGlvblxyXG5cclxuICAgIGhleFRleHQ/OiBzdHJpbmdcclxuICAgIGhleEFscGhhPzogbnVtYmVyXHJcblxyXG4gICAgY215a1RleHQ/OiBDbXlrXHJcbiAgICBoc2xhVGV4dD86IEhzbGFcclxuICAgIHJnYmFUZXh0PzogUmdiYVxyXG5cclxuICAgIHNlbGVjdGVkQ29sb3IgPSAnJ1xyXG4gICAgaHVlU2xpZGVyQ29sb3I/OiBzdHJpbmdcclxuICAgIGFscGhhU2xpZGVyQ29sb3I/OiBzdHJpbmdcclxuXHJcbiAgICBzdlNsaWRlckxpZ2h0ID0gZmFsc2VcclxuICAgIGh1ZVNsaWRlckxpZ2h0ID0gZmFsc2VcclxuICAgIHZhbHVlU2xpZGVyTGlnaHQgPSBmYWxzZVxyXG4gICAgYWxwaGFTbGlkZXJMaWdodCA9IGZhbHNlXHJcblxyXG4gICAgd2lkdGg/OiBzdHJpbmdcclxuICAgIGhlaWdodD86IHN0cmluZ1xyXG5cclxuICAgIG1vZGU6IENvbG9yTW9kZUludGVybmFsID0gQ29sb3JNb2RlSW50ZXJuYWwuY29sb3JcclxuXHJcbiAgICBjbXlrRW5hYmxlZCA9IGZhbHNlXHJcbiAgICBhbHBoYUNoYW5uZWw6IEFscGhhQ2hhbm5lbCA9IEFscGhhQ2hhbm5lbEVudW0uZW5hYmxlZFxyXG4gICAgb3V0cHV0Rm9ybWF0OiBPdXRwdXRGb3JtYXQgPSBPdXRwdXRGb3JtYXRFbnVtLmF1dG9cclxuXHJcbiAgICBkaXNhYmxlSW5wdXQgPSBmYWxzZVxyXG4gICAgZGlhbG9nRGlzcGxheT86IERpYWxvZ0Rpc3BsYXlcclxuXHJcbiAgICBpZ25vcmVkRWxlbWVudHM/OiBhbnlbXVxyXG5cclxuICAgIHNhdmVDbGlja091dHNpZGUgPSBmYWxzZVxyXG4gICAgY2xvc2VDbGlja091dHNpZGUgPSBmYWxzZVxyXG5cclxuICAgIG9rQnV0dG9uID0gZmFsc2VcclxuXHJcbiAgICBjYW5jZWxCdXR0b24gPSBmYWxzZVxyXG5cclxuICAgIHByZXNldExhYmVsOiBib29sZWFuIHwgc3RyaW5nID0gZmFsc2VcclxuICAgIHByZXNldENvbG9ycz86IHN0cmluZ1tdXHJcbiAgICBtYXhQcmVzZXRDb2xvcnM/OiBudW1iZXJcclxuXHJcbiAgICBwcmVzZXRDb2xvcnNFZGl0YWJsZTogYm9vbGVhbiA9IGZhbHNlXHJcblxyXG4gICAgY29uc3RydWN0b3IoXHJcbiAgICAgICAgcHJpdmF0ZSBlbFJlZjogRWxlbWVudFJlZixcclxuICAgICAgICBwcml2YXRlIGNkUmVmOiBDaGFuZ2VEZXRlY3RvclJlZixcclxuICAgICAgICBwcml2YXRlIHNlcnZpY2U6IENvbG9yUGlja2VyU2VydmljZVxyXG4gICAgKSB7IH1cclxuXHJcbiAgICBASG9zdExpc3RlbmVyKCdkb2N1bWVudDprZXl1cC5lc2MnLCBbJyRldmVudCddKVxyXG4gICAgb25DYW5jZWwoZXZlbnQ6IEV2ZW50KSB7XHJcbiAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcclxuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpXHJcblxyXG4gICAgICAgIGlmICh0aGlzLmluaXRpYWxDb2xvcikge1xyXG4gICAgICAgICAgICB0aGlzLnNldENvbG9yRnJvbVN0cmluZyh0aGlzLmluaXRpYWxDb2xvciwgdHJ1ZSlcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh0aGlzLmNhbGxiYWNrcykge1xyXG4gICAgICAgICAgICB0aGlzLmNhbGxiYWNrcy5jb2xvclNlbGVjdENhbmNlbGVkKClcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh0aGlzLnNob3cgJiYgdGhpcy5kaWFsb2dEaXNwbGF5ID09IERpYWxvZ0Rpc3BsYXlFbnVtLnBvcHVwKSB7XHJcbiAgICAgICAgICAgIHRoaXMuY2xvc2VDb2xvclBpY2tlcigpXHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIEBIb3N0TGlzdGVuZXIoJ2RvY3VtZW50OmtleXVwLmVudGVyJywgWyckZXZlbnQnXSlcclxuICAgIG9uQWNjZXB0KGV2ZW50OiBFdmVudCkge1xyXG4gICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXHJcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKVxyXG5cclxuICAgICAgICBpZiAodGhpcy5zaG93ICYmIHRoaXMuZGlhbG9nRGlzcGxheSA9PSBEaWFsb2dEaXNwbGF5RW51bS5wb3B1cCkge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5vdXRwdXRDb2xvciAmJiB0aGlzLmNhbGxiYWNrcykge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jYWxsYmFja3MuY29sb3JTZWxlY3RlZCh0aGlzLm91dHB1dENvbG9yKVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAodGhpcy5kaWFsb2dEaXNwbGF5ID09IERpYWxvZ0Rpc3BsYXlFbnVtLnBvcHVwKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNsb3NlQ29sb3JQaWNrZXIoKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIEBIb3N0TGlzdGVuZXIoJ2RvY3VtZW50Om1vdXNlZG93bicsIFsnJGV2ZW50J10pXHJcbiAgICBASG9zdExpc3RlbmVyKCdkb2N1bWVudDpmb2N1c2luJywgWyckZXZlbnQnXSlcclxuICAgIG9uRm9jdXNDaGFuZ2UoZXZlbnQ6IE1vdXNlRXZlbnQgfCBGb2N1c0V2ZW50KSB7XHJcbiAgICAgICAgY29uc3QgcGF0aCA9IG5ldyBTZXQoY29tcG9zZWRQYXRoKGV2ZW50KSlcclxuICAgICAgICBjb25zdCBpbnRlcnNlY3QgPSB0aGlzLmlnbm9yZWRFbGVtZW50cz8uZmluZChlbCA9PiBwYXRoLmhhcyhlbCkpXHJcblxyXG4gICAgICAgIGlmICghaW50ZXJzZWN0KSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLnNob3cgJiYgdGhpcy5kaWFsb2dEaXNwbGF5ID09IERpYWxvZ0Rpc3BsYXlFbnVtLnBvcHVwKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5zYXZlQ2xpY2tPdXRzaWRlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMub3V0cHV0Q29sb3IgJiYgdGhpcy5jYWxsYmFja3MpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jYWxsYmFja3MuY29sb3JTZWxlY3RlZCh0aGlzLm91dHB1dENvbG9yKVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRDb2xvckZyb21TdHJpbmcodGhpcy5pbml0aWFsQ29sb3IsIGZhbHNlKVxyXG5cclxuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5jYWxsYmFja3MpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuY215a0VuYWJsZWQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY2FsbGJhY2tzLmNteWtDaGFuZ2VkKHRoaXMuY215a0NvbG9yKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNhbGxiYWNrcy5jb2xvckNoYW5nZWQodGhpcy5pbml0aWFsQ29sb3IpXHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLmNsb3NlQ2xpY2tPdXRzaWRlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jbG9zZUNvbG9yUGlja2VyKClcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLnNhdmVDbGlja091dHNpZGUgJiYgdGhpcy5vdXRwdXRDb2xvciAmJiB0aGlzLmNhbGxiYWNrcykge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jYWxsYmFja3MuY29sb3JTZWxlY3RlZCh0aGlzLm91dHB1dENvbG9yKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIG5nT25Jbml0KCkge1xyXG4gICAgICAgIHRoaXMuc2xpZGVyID0gbmV3IFNsaWRlclBvc2l0aW9uKDAsIDAsIDAsIDApXHJcblxyXG4gICAgICAgIGlmICh0aGlzLmNteWtFbmFibGVkKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZm9ybWF0ID0gQ29sb3JGb3JtYXRFbnVtLmNteWtcclxuICAgICAgICB9IGVsc2UgaWYgKHRoaXMub3V0cHV0Rm9ybWF0ID09IE91dHB1dEZvcm1hdEVudW0ucmdiYSkge1xyXG4gICAgICAgICAgICB0aGlzLmZvcm1hdCA9IENvbG9yRm9ybWF0RW51bS5yZ2JhXHJcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLm91dHB1dEZvcm1hdCA9PSBPdXRwdXRGb3JtYXRFbnVtLmhzbGEpIHtcclxuICAgICAgICAgICAgdGhpcy5mb3JtYXQgPSBDb2xvckZvcm1hdEVudW0uaHNsYVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuZm9ybWF0ID0gQ29sb3JGb3JtYXRFbnVtLmhleFxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5vcGVuRGlhbG9nKHRoaXMuaW5pdGlhbENvbG9yLCBmYWxzZSlcclxuICAgIH1cclxuXHJcbiAgICBuZ09uRGVzdHJveSgpIHtcclxuICAgICAgICB0aGlzLmNsb3NlRGlhbG9nKClcclxuICAgIH1cclxuXHJcbiAgICBuZ0FmdGVyVmlld0NoZWNrZWQoKSB7IH1cclxuXHJcbiAgICBvcGVuRGlhbG9nKGNvbG9yOiBhbnksIGVtaXQ6IGJvb2xlYW4gPSB0cnVlKSB7XHJcbiAgICAgICAgdGhpcy5zZXJ2aWNlLnNldEFjdGl2ZSh0aGlzKVxyXG5cclxuICAgICAgICB0aGlzLnNldEluaXRpYWxDb2xvcihjb2xvcilcclxuXHJcbiAgICAgICAgdGhpcy5zZXRDb2xvckZyb21TdHJpbmcoY29sb3IsIGVtaXQpXHJcblxyXG4gICAgICAgIHRoaXMub3BlbkNvbG9yUGlja2VyKClcclxuICAgIH1cclxuXHJcbiAgICBjbG9zZURpYWxvZygpIHtcclxuICAgICAgICB0aGlzLmNsb3NlQ29sb3JQaWNrZXIoKVxyXG4gICAgfVxyXG5cclxuICAgIHNldHVwRGlhbG9nKGNvbmZpZzogRGlhbG9nQ29uZmlnKSB7XHJcbiAgICAgICAgdGhpcy5zZXRJbml0aWFsQ29sb3IoY29uZmlnLmNvbG9yKVxyXG5cclxuICAgICAgICB0aGlzLm1vZGUgPSBwYXJzZUNvbG9yTW9kZShjb25maWcubW9kZSlcclxuXHJcbiAgICAgICAgdGhpcy5jYWxsYmFja3MgPSBjb25maWcuY2FsbGJhY2tzXHJcblxyXG4gICAgICAgIHRoaXMuZGlzYWJsZUlucHV0ID0gY29uZmlnLmRpc2FibGVJbnB1dFxyXG5cclxuICAgICAgICB0aGlzLmNteWtFbmFibGVkID0gY29uZmlnLmNteWtFbmFibGVkXHJcbiAgICAgICAgdGhpcy5hbHBoYUNoYW5uZWwgPSBjb25maWcuYWxwaGFDaGFubmVsXHJcbiAgICAgICAgdGhpcy5vdXRwdXRGb3JtYXQgPSBjb25maWcub3V0cHV0Rm9ybWF0XHJcbiAgICAgICAgdGhpcy5kaWFsb2dEaXNwbGF5ID0gY29uZmlnLmRpYWxvZ0Rpc3BsYXlcclxuXHJcbiAgICAgICAgdGhpcy5pZ25vcmVkRWxlbWVudHMgPSBbXHJcbiAgICAgICAgICAgIC4uLmNvbmZpZy5pZ25vcmVkRWxlbWVudHMgPz8gW10sXHJcbiAgICAgICAgICAgIHRoaXMuZWxSZWYgJiYgdGhpcy5lbFJlZi5uYXRpdmVFbGVtZW50LFxyXG4gICAgICAgICAgICBjb25maWcuZWxlbWVudFJlZiAmJiBjb25maWcuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50XHJcbiAgICAgICAgXS5maWx0ZXIoZSA9PiAhIWUpXHJcblxyXG4gICAgICAgIHRoaXMuc2F2ZUNsaWNrT3V0c2lkZSA9IGNvbmZpZy5zYXZlQ2xpY2tPdXRzaWRlXHJcbiAgICAgICAgdGhpcy5jbG9zZUNsaWNrT3V0c2lkZSA9IGNvbmZpZy5jbG9zZUNsaWNrT3V0c2lkZVxyXG5cclxuICAgICAgICB0aGlzLndpZHRoID0gc2l6ZVRvU3RyaW5nKGNvbmZpZy53aWR0aClcclxuICAgICAgICB0aGlzLmhlaWdodCA9IHNpemVUb1N0cmluZyhjb25maWcuaGVpZ2h0KVxyXG5cclxuICAgICAgICB0aGlzLm9rQnV0dG9uID0gY29uZmlnLm9rQnV0dG9uXHJcblxyXG4gICAgICAgIHRoaXMuY2FuY2VsQnV0dG9uID0gY29uZmlnLmNhbmNlbEJ1dHRvblxyXG5cclxuICAgICAgICB0aGlzLmZhbGxiYWNrQ29sb3IgPSBjb25maWcuZmFsbGJhY2tDb2xvciB8fCAnI2ZmZidcclxuXHJcbiAgICAgICAgdGhpcy5zZXRQcmVzZXRDb25maWcoY29uZmlnLnByZXNldExhYmVsLCBjb25maWcucHJlc2V0Q29sb3JzKVxyXG5cclxuICAgICAgICB0aGlzLm1heFByZXNldENvbG9ycyA9IGNvbmZpZy5tYXhQcmVzZXRDb2xvcnNcclxuXHJcbiAgICAgICAgdGhpcy5wcmVzZXRDb2xvcnNFZGl0YWJsZSA9IGNvbmZpZy5wcmVzZXRDb2xvcnNFZGl0YWJsZVxyXG5cclxuICAgICAgICBpZiAoY29uZmlnLm91dHB1dEZvcm1hdCA9PSBPdXRwdXRGb3JtYXRFbnVtLmhleCAmJlxyXG4gICAgICAgICAgICBjb25maWcuYWxwaGFDaGFubmVsICE9IEFscGhhQ2hhbm5lbEVudW0uYWx3YXlzICYmIGNvbmZpZy5hbHBoYUNoYW5uZWwgIT0gQWxwaGFDaGFubmVsRW51bS5mb3JjZWQpIHtcclxuICAgICAgICAgICAgdGhpcy5hbHBoYUNoYW5uZWwgPSBBbHBoYUNoYW5uZWxFbnVtLmRpc2FibGVkXHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHNldEluaXRpYWxDb2xvcihjb2xvcjogc3RyaW5nKSB7XHJcbiAgICAgICAgdGhpcy5pbml0aWFsQ29sb3IgPSBjb2xvclxyXG4gICAgICAgIHRoaXMuc2V0Q29sb3JGcm9tU3RyaW5nKHRoaXMuaW5pdGlhbENvbG9yLCBmYWxzZSwgdHJ1ZSlcclxuICAgIH1cclxuXHJcbiAgICBzZXRQcmVzZXRDb25maWcocHJlc2V0TGFiZWw6IGJvb2xlYW4gfCBzdHJpbmcsIHByZXNldENvbG9ycz86IHN0cmluZ1tdKSB7XHJcbiAgICAgICAgdGhpcy5wcmVzZXRMYWJlbCA9IHByZXNldExhYmVsXHJcbiAgICAgICAgdGhpcy5wcmVzZXRDb2xvcnMgPSBwcmVzZXRDb2xvcnNcclxuICAgIH1cclxuXHJcbiAgICBzZXRDb2xvckZyb21TdHJpbmcodmFsdWU6IHN0cmluZywgZW1pdDogYm9vbGVhbiA9IHRydWUsIHVwZGF0ZTogYm9vbGVhbiA9IHRydWUpIHtcclxuICAgICAgICBsZXQgaHN2YSA9IHN0cmluZ1RvSHN2YSh2YWx1ZSwgdHJ1ZSlcclxuICAgICAgICBsZXQgY215ayA9IHN0cmluZ1RvQ215ayh2YWx1ZSwgdHJ1ZSlcclxuXHJcbiAgICAgICAgaWYgKCghaHN2YSAmJiAhdGhpcy5oc3ZhKSAmJiAoIWNteWsgJiYgIXRoaXMuY215aykpIHtcclxuICAgICAgICAgICAgaHN2YSA9IHN0cmluZ1RvSHN2YSh0aGlzLmZhbGxiYWNrQ29sb3IsIHRydWUpXHJcbiAgICAgICAgICAgIGNteWsgPSBzdHJpbmdUb0NteWsodGhpcy5mYWxsYmFja0NvbG9yLCB0cnVlKVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKGhzdmEgfHwgY215aykge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5hbHBoYUNoYW5uZWwgPT0gQWxwaGFDaGFubmVsRW51bS5kaXNhYmxlZCkge1xyXG4gICAgICAgICAgICAgICAgaWYgKGhzdmEpXHJcbiAgICAgICAgICAgICAgICAgICAgaHN2YS5hID0gMVxyXG4gICAgICAgICAgICAgICAgaWYgKGNteWspXHJcbiAgICAgICAgICAgICAgICAgICAgY215ay5hID0gMVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB0aGlzLmhzdmEgPSBoc3ZhXHJcbiAgICAgICAgICAgIHRoaXMuY215ayA9IGNteWtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuc2xpZGVySCA9IHRoaXMuaHN2YT8uaFxyXG5cclxuICAgICAgICAgICAgdGhpcy51cGRhdGVDb2xvclBpY2tlcihlbWl0LCB1cGRhdGUsIChjbXlrICYmIHRoaXMuY215a0VuYWJsZWQpKVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBzdHJpbmdUb1JnYmEodmFsdWU6IHN0cmluZykge1xyXG4gICAgICAgIGNvbnN0IGhzdmEgPSBzdHJpbmdUb0hzdmEodmFsdWUsIHRydWUpXHJcbiAgICAgICAgaWYgKGhzdmEpXHJcbiAgICAgICAgICAgIHJldHVybiBmb3JtYXRPdXRwdXQoaHN2YSwgT3V0cHV0Rm9ybWF0RW51bS5yZ2JhLCBBbHBoYUNoYW5uZWxFbnVtLmVuYWJsZWQpXHJcblxyXG4gICAgICAgIHJldHVybiB1bmRlZmluZWRcclxuICAgIH1cclxuXHJcbiAgICBvbkRyYWdFbmQoc2xpZGVyOiBzdHJpbmcpIHtcclxuICAgICAgICBpZiAodGhpcy5jYWxsYmFja3MpIHtcclxuICAgICAgICAgICAgdGhpcy5jYWxsYmFja3Muc2xpZGVyRHJhZ0VuZCh7IHNsaWRlciwgY29sb3I6IHRoaXMub3V0cHV0Q29sb3IgfSlcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgb25EcmFnU3RhcnQoc2xpZGVyOiBzdHJpbmcpIHtcclxuICAgICAgICBpZiAodGhpcy5jYWxsYmFja3MpIHtcclxuICAgICAgICAgICAgdGhpcy5jYWxsYmFja3Muc2xpZGVyRHJhZ1N0YXJ0KHsgc2xpZGVyLCBjb2xvcjogdGhpcy5vdXRwdXRDb2xvciB9KVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBvbkZvcm1hdFRvZ2dsZShjaGFuZ2U6IG51bWJlcikge1xyXG4gICAgICAgIGNvbnN0IGF2YWlsYWJsZUZvcm1hdHMgPSB0aGlzLmRpYWxvZ0lucHV0RmllbGRzLmxlbmd0aCAtICh0aGlzLmNteWtFbmFibGVkID8gMCA6IDEpXHJcblxyXG4gICAgICAgIGNvbnN0IG5leHRGb3JtYXQgPSAoKCh0aGlzLmRpYWxvZ0lucHV0RmllbGRzLmluZGV4T2YodGhpcy5mb3JtYXQpICsgY2hhbmdlKSAlXHJcbiAgICAgICAgICAgIGF2YWlsYWJsZUZvcm1hdHMpICsgYXZhaWxhYmxlRm9ybWF0cykgJSBhdmFpbGFibGVGb3JtYXRzXHJcblxyXG4gICAgICAgIHRoaXMuZm9ybWF0ID0gdGhpcy5kaWFsb2dJbnB1dEZpZWxkc1tuZXh0Rm9ybWF0XVxyXG4gICAgfVxyXG5cclxuICAgIG9uQ29sb3JDaGFuZ2UodmFsdWU6IEN1cnNvckV2ZW50KSB7XHJcbiAgICAgICAgaWYgKCdyZ1gnIGluIHZhbHVlICYmICdyZ1knIGluIHZhbHVlKSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmhzdmEpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuaHN2YS5zID0gdmFsdWUucyAvIHZhbHVlLnJnWFxyXG4gICAgICAgICAgICAgICAgdGhpcy5oc3ZhLnYgPSB2YWx1ZS52IC8gdmFsdWUucmdZXHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHRoaXMudXBkYXRlQ29sb3JQaWNrZXIoKVxyXG5cclxuICAgICAgICAgICAgaWYgKHRoaXMuY2FsbGJhY2tzKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNhbGxiYWNrcy5zbGlkZXJDaGFuZ2VkKHtcclxuICAgICAgICAgICAgICAgICAgICBzbGlkZXI6ICdsaWdodG5lc3MnLFxyXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOiB0aGlzLmhzdmE/LnYsXHJcbiAgICAgICAgICAgICAgICAgICAgY29sb3I6IHRoaXMub3V0cHV0Q29sb3JcclxuICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmICh0aGlzLmNhbGxiYWNrcykge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jYWxsYmFja3Muc2xpZGVyQ2hhbmdlZCh7XHJcbiAgICAgICAgICAgICAgICAgICAgc2xpZGVyOiAnc2F0dXJhdGlvbicsXHJcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHRoaXMuaHN2YT8ucyxcclxuICAgICAgICAgICAgICAgICAgICBjb2xvcjogdGhpcy5vdXRwdXRDb2xvclxyXG4gICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBvbkh1ZUNoYW5nZSh2YWx1ZTogQ3Vyc29yRXZlbnQpIHtcclxuICAgICAgICBpZiAoJ3YnIGluIHZhbHVlICYmICdyZ1gnIGluIHZhbHVlKSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmhzdmEpXHJcbiAgICAgICAgICAgICAgICB0aGlzLmhzdmEuaCA9IHZhbHVlLnYgLyB2YWx1ZS5yZ1hcclxuICAgICAgICAgICAgdGhpcy5zbGlkZXJIID0gdGhpcy5oc3ZhPy5oXHJcblxyXG4gICAgICAgICAgICB0aGlzLnVwZGF0ZUNvbG9yUGlja2VyKClcclxuXHJcbiAgICAgICAgICAgIGlmICh0aGlzLmNhbGxiYWNrcykge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jYWxsYmFja3Muc2xpZGVyQ2hhbmdlZCh7XHJcbiAgICAgICAgICAgICAgICAgICAgc2xpZGVyOiAnaHVlJyxcclxuICAgICAgICAgICAgICAgICAgICB2YWx1ZTogdGhpcy5oc3ZhPy5oLFxyXG4gICAgICAgICAgICAgICAgICAgIGNvbG9yOiB0aGlzLm91dHB1dENvbG9yXHJcbiAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIG9uVmFsdWVDaGFuZ2UodmFsdWU6IEN1cnNvckV2ZW50KSB7XHJcbiAgICAgICAgaWYgKCd2JyBpbiB2YWx1ZSAmJiAncmdYJyBpbiB2YWx1ZSkge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5oc3ZhKVxyXG4gICAgICAgICAgICAgICAgdGhpcy5oc3ZhLnYgPSB2YWx1ZS52IC8gdmFsdWUucmdYXHJcblxyXG4gICAgICAgICAgICB0aGlzLnVwZGF0ZUNvbG9yUGlja2VyKClcclxuXHJcbiAgICAgICAgICAgIGlmICh0aGlzLmNhbGxiYWNrcykge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jYWxsYmFja3Muc2xpZGVyQ2hhbmdlZCh7XHJcbiAgICAgICAgICAgICAgICAgICAgc2xpZGVyOiAndmFsdWUnLFxyXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOiB0aGlzLmhzdmE/LnYsXHJcbiAgICAgICAgICAgICAgICAgICAgY29sb3I6IHRoaXMub3V0cHV0Q29sb3JcclxuICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgb25BbHBoYUNoYW5nZSh2YWx1ZTogQ3Vyc29yRXZlbnQpIHtcclxuICAgICAgICBpZiAoJ3YnIGluIHZhbHVlICYmICdyZ1gnIGluIHZhbHVlKSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmhzdmEpXHJcbiAgICAgICAgICAgICAgICB0aGlzLmhzdmEuYSA9IHZhbHVlLnYgLyB2YWx1ZS5yZ1hcclxuXHJcbiAgICAgICAgICAgIHRoaXMudXBkYXRlQ29sb3JQaWNrZXIoKVxyXG5cclxuICAgICAgICAgICAgaWYgKHRoaXMuY2FsbGJhY2tzKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNhbGxiYWNrcy5zbGlkZXJDaGFuZ2VkKHtcclxuICAgICAgICAgICAgICAgICAgICBzbGlkZXI6ICdhbHBoYScsXHJcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHRoaXMuaHN2YT8uYSxcclxuICAgICAgICAgICAgICAgICAgICBjb2xvcjogdGhpcy5vdXRwdXRDb2xvclxyXG4gICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBvbkhleElucHV0KHZhbHVlPzogVGV4dEV2ZW50KSB7XHJcbiAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PSAnc3RyaW5nJykge1xyXG4gICAgICAgICAgICBpZiAodmFsdWUgJiYgdmFsdWVbMF0gIT0gJyMnKSB7XHJcbiAgICAgICAgICAgICAgICB2YWx1ZSA9ICcjJyArIHZhbHVlXHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGNvbnN0IHZhbGlkSGV4ID0gL14jKFthLWYwLTldezN9fFthLWYwLTldezZ9fFthLWYwLTldezh9KSQvZ2lcclxuXHJcbiAgICAgICAgICAgIGNvbnN0IHZhbGlkID0gdmFsaWRIZXgudGVzdCh2YWx1ZSlcclxuXHJcbiAgICAgICAgICAgIGlmICh2YWxpZCkge1xyXG4gICAgICAgICAgICAgICAgLy8gU2hvcnQgaGV4XHJcbiAgICAgICAgICAgICAgICBpZiAodmFsdWUubGVuZ3RoID09IDQpIHtcclxuICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9ICcjJyArIHZhbHVlLnN1YnN0cmluZygxKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAuc3BsaXQoJycpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC5tYXAoYyA9PiBjICsgYylcclxuICAgICAgICAgICAgICAgICAgICAgICAgLmpvaW4oJycpXHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgLy8gSGV4IHdpdGhvdXQgYWxwaGFcclxuICAgICAgICAgICAgICAgIGlmICh2YWx1ZS5sZW5ndGggPT0gNyAmJiB0aGlzLmFscGhhQ2hhbm5lbCA9PSBBbHBoYUNoYW5uZWxFbnVtLmZvcmNlZCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlICs9ICgodGhpcy5oc3ZhPy5hIHx8IDApICogMjU1KS50b1N0cmluZygxNilcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldENvbG9yRnJvbVN0cmluZyh2YWx1ZSwgdHJ1ZSwgZmFsc2UpXHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmICh0aGlzLmNhbGxiYWNrcykge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jYWxsYmFja3MuaW5wdXRDaGFuZ2VkKHtcclxuICAgICAgICAgICAgICAgICAgICBpbnB1dDogJ2hleCcsXHJcbiAgICAgICAgICAgICAgICAgICAgdmFsaWQsXHJcbiAgICAgICAgICAgICAgICAgICAgdmFsdWUsXHJcbiAgICAgICAgICAgICAgICAgICAgY29sb3I6IHRoaXMub3V0cHV0Q29sb3JcclxuICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLnVwZGF0ZUNvbG9yUGlja2VyKClcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgb25SZWRJbnB1dCh2YWx1ZTogVGV4dEV2ZW50KSB7XHJcbiAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSAhPSAnc3RyaW5nJykge1xyXG4gICAgICAgICAgICBjb25zdCByZ2JhID0gdGhpcy5oc3ZhID8gaHN2YVRvUmdiYSh0aGlzLmhzdmEpIDogbmV3IFJnYmEoMCwgMCwgMCwgMCwgdHJ1ZSlcclxuXHJcbiAgICAgICAgICAgIGNvbnN0IHZhbGlkID0gIWlzTmFOKHZhbHVlLnYpICYmIHZhbHVlLnYgPj0gMCAmJiB2YWx1ZS52IDw9IHZhbHVlLnJnXHJcblxyXG4gICAgICAgICAgICBpZiAodmFsaWQpIHtcclxuICAgICAgICAgICAgICAgIHJnYmEuciA9IHZhbHVlLnYgLyB2YWx1ZS5yZ1xyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMuaHN2YSA9IHJnYmFUb0hzdmEocmdiYSlcclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLnNsaWRlckggPSB0aGlzLmhzdmEuaFxyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlQ29sb3JQaWNrZXIoKVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAodGhpcy5jYWxsYmFja3MpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuY2FsbGJhY2tzLmlucHV0Q2hhbmdlZCh7XHJcbiAgICAgICAgICAgICAgICAgICAgaW5wdXQ6ICdyZWQnLFxyXG4gICAgICAgICAgICAgICAgICAgIHZhbGlkLFxyXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOiByZ2JhLnIsXHJcbiAgICAgICAgICAgICAgICAgICAgY29sb3I6IHRoaXMub3V0cHV0Q29sb3JcclxuICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgb25CbHVlSW5wdXQodmFsdWU6IFRleHRFdmVudCkge1xyXG4gICAgICAgIGlmICh0eXBlb2YgdmFsdWUgIT0gJ3N0cmluZycpIHtcclxuICAgICAgICAgICAgY29uc3QgcmdiYSA9IHRoaXMuaHN2YSA/IGhzdmFUb1JnYmEodGhpcy5oc3ZhKSA6IG5ldyBSZ2JhKDAsIDAsIDAsIDAsIHRydWUpXHJcblxyXG4gICAgICAgICAgICBjb25zdCB2YWxpZCA9ICFpc05hTih2YWx1ZS52KSAmJiB2YWx1ZS52ID49IDAgJiYgdmFsdWUudiA8PSB2YWx1ZS5yZ1xyXG5cclxuICAgICAgICAgICAgaWYgKHZhbGlkKSB7XHJcbiAgICAgICAgICAgICAgICByZ2JhLmIgPSB2YWx1ZS52IC8gdmFsdWUucmdcclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLmhzdmEgPSByZ2JhVG9Ic3ZhKHJnYmEpXHJcblxyXG4gICAgICAgICAgICAgICAgdGhpcy5zbGlkZXJIID0gdGhpcy5oc3ZhLmhcclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZUNvbG9yUGlja2VyKClcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKHRoaXMuY2FsbGJhY2tzKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNhbGxiYWNrcy5pbnB1dENoYW5nZWQoe1xyXG4gICAgICAgICAgICAgICAgICAgIGlucHV0OiAnYmx1ZScsXHJcbiAgICAgICAgICAgICAgICAgICAgdmFsaWQsXHJcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHJnYmEuYixcclxuICAgICAgICAgICAgICAgICAgICBjb2xvcjogdGhpcy5vdXRwdXRDb2xvclxyXG4gICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBvbkdyZWVuSW5wdXQodmFsdWU6IFRleHRFdmVudCkge1xyXG4gICAgICAgIGlmICh0eXBlb2YgdmFsdWUgIT0gJ3N0cmluZycpIHtcclxuICAgICAgICAgICAgY29uc3QgcmdiYSA9IHRoaXMuaHN2YSA/IGhzdmFUb1JnYmEodGhpcy5oc3ZhKSA6IG5ldyBSZ2JhKDAsIDAsIDAsIDAsIHRydWUpXHJcblxyXG4gICAgICAgICAgICBjb25zdCB2YWxpZCA9ICFpc05hTih2YWx1ZS52KSAmJiB2YWx1ZS52ID49IDAgJiYgdmFsdWUudiA8PSB2YWx1ZS5yZ1xyXG5cclxuICAgICAgICAgICAgaWYgKHZhbGlkKSB7XHJcbiAgICAgICAgICAgICAgICByZ2JhLmcgPSB2YWx1ZS52IC8gdmFsdWUucmdcclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLmhzdmEgPSByZ2JhVG9Ic3ZhKHJnYmEpXHJcblxyXG4gICAgICAgICAgICAgICAgdGhpcy5zbGlkZXJIID0gdGhpcy5oc3ZhLmhcclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZUNvbG9yUGlja2VyKClcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKHRoaXMuY2FsbGJhY2tzKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNhbGxiYWNrcy5pbnB1dENoYW5nZWQoe1xyXG4gICAgICAgICAgICAgICAgICAgIGlucHV0OiAnZ3JlZW4nLFxyXG4gICAgICAgICAgICAgICAgICAgIHZhbGlkLFxyXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOiByZ2JhLmcsXHJcbiAgICAgICAgICAgICAgICAgICAgY29sb3I6IHRoaXMub3V0cHV0Q29sb3JcclxuICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgb25IdWVJbnB1dCh2YWx1ZTogVGV4dEV2ZW50KSB7XHJcbiAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSAhPSAnc3RyaW5nJykge1xyXG4gICAgICAgICAgICBjb25zdCB2YWxpZCA9ICFpc05hTih2YWx1ZS52KSAmJiB2YWx1ZS52ID49IDAgJiYgdmFsdWUudiA8PSB2YWx1ZS5yZ1xyXG5cclxuICAgICAgICAgICAgdGhpcy5oc3ZhID0gdGhpcy5oc3ZhIHx8IG5ldyBIc3ZhKDAsIDAsIDAsIDAsIHRydWUpXHJcblxyXG4gICAgICAgICAgICBpZiAodmFsaWQpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuaHN2YS5oID0gdmFsdWUudiAvIHZhbHVlLnJnXHJcblxyXG4gICAgICAgICAgICAgICAgdGhpcy5zbGlkZXJIID0gdGhpcy5oc3ZhLmhcclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZUNvbG9yUGlja2VyKClcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKHRoaXMuY2FsbGJhY2tzKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNhbGxiYWNrcy5pbnB1dENoYW5nZWQoe1xyXG4gICAgICAgICAgICAgICAgICAgIGlucHV0OiAnaHVlJyxcclxuICAgICAgICAgICAgICAgICAgICB2YWxpZCxcclxuICAgICAgICAgICAgICAgICAgICB2YWx1ZTogdGhpcy5oc3ZhLmgsXHJcbiAgICAgICAgICAgICAgICAgICAgY29sb3I6IHRoaXMub3V0cHV0Q29sb3JcclxuICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgb25WYWx1ZUlucHV0KHZhbHVlOiBUZXh0RXZlbnQpIHtcclxuICAgICAgICBpZiAodHlwZW9mIHZhbHVlICE9ICdzdHJpbmcnKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHZhbGlkID0gIWlzTmFOKHZhbHVlLnYpICYmIHZhbHVlLnYgPj0gMCAmJiB2YWx1ZS52IDw9IHZhbHVlLnJnXHJcblxyXG4gICAgICAgICAgICB0aGlzLmhzdmEgPSB0aGlzLmhzdmEgfHwgbmV3IEhzdmEoMCwgMCwgMCwgMCwgdHJ1ZSlcclxuXHJcbiAgICAgICAgICAgIGlmICh2YWxpZCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5oc3ZhLnYgPSB2YWx1ZS52IC8gdmFsdWUucmdcclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZUNvbG9yUGlja2VyKClcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKHRoaXMuY2FsbGJhY2tzKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNhbGxiYWNrcy5pbnB1dENoYW5nZWQoe1xyXG4gICAgICAgICAgICAgICAgICAgIGlucHV0OiAndmFsdWUnLFxyXG4gICAgICAgICAgICAgICAgICAgIHZhbGlkLFxyXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOiB0aGlzLmhzdmEudixcclxuICAgICAgICAgICAgICAgICAgICBjb2xvcjogdGhpcy5vdXRwdXRDb2xvclxyXG4gICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBvbkFscGhhSW5wdXQodmFsdWU6IFRleHRFdmVudCkge1xyXG4gICAgICAgIGlmICh0eXBlb2YgdmFsdWUgIT0gJ3N0cmluZycpIHtcclxuICAgICAgICAgICAgY29uc3QgdmFsaWQgPSAhaXNOYU4odmFsdWUudikgJiYgdmFsdWUudiA+PSAwICYmIHZhbHVlLnYgPD0gdmFsdWUucmdcclxuXHJcbiAgICAgICAgICAgIHRoaXMuaHN2YSA9IHRoaXMuaHN2YSB8fCBuZXcgSHN2YSgwLCAwLCAwLCAwLCB0cnVlKVxyXG5cclxuICAgICAgICAgICAgaWYgKHZhbGlkKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmhzdmEuYSA9IHZhbHVlLnYgLyB2YWx1ZS5yZ1xyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlQ29sb3JQaWNrZXIoKVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAodGhpcy5jYWxsYmFja3MpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuY2FsbGJhY2tzLmlucHV0Q2hhbmdlZCh7XHJcbiAgICAgICAgICAgICAgICAgICAgaW5wdXQ6ICdhbHBoYScsXHJcbiAgICAgICAgICAgICAgICAgICAgdmFsaWQsXHJcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHRoaXMuaHN2YS5hLFxyXG4gICAgICAgICAgICAgICAgICAgIGNvbG9yOiB0aGlzLm91dHB1dENvbG9yXHJcbiAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIG9uTGlnaHRuZXNzSW5wdXQodmFsdWU6IFRleHRFdmVudCkge1xyXG4gICAgICAgIGlmICh0eXBlb2YgdmFsdWUgIT0gJ3N0cmluZycpIHtcclxuICAgICAgICAgICAgY29uc3QgaHNsYSA9IHRoaXMuaHN2YSA/IGhzdmFUb0hzbGEodGhpcy5oc3ZhKSA6IG5ldyBIc2xhKDAsIDAsIDAsIDAsIHRydWUpXHJcblxyXG4gICAgICAgICAgICBjb25zdCB2YWxpZCA9ICFpc05hTih2YWx1ZS52KSAmJiB2YWx1ZS52ID49IDAgJiYgdmFsdWUudiA8PSB2YWx1ZS5yZ1xyXG5cclxuICAgICAgICAgICAgaWYgKHZhbGlkKSB7XHJcbiAgICAgICAgICAgICAgICBoc2xhLmwgPSB2YWx1ZS52IC8gdmFsdWUucmdcclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLmhzdmEgPSBoc2xhVG9Ic3ZhKGhzbGEpXHJcblxyXG4gICAgICAgICAgICAgICAgdGhpcy5zbGlkZXJIID0gdGhpcy5oc3ZhLmhcclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZUNvbG9yUGlja2VyKClcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKHRoaXMuY2FsbGJhY2tzKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNhbGxiYWNrcy5pbnB1dENoYW5nZWQoe1xyXG4gICAgICAgICAgICAgICAgICAgIGlucHV0OiAnbGlnaHRuZXNzJyxcclxuICAgICAgICAgICAgICAgICAgICB2YWxpZCxcclxuICAgICAgICAgICAgICAgICAgICB2YWx1ZTogaHNsYS5sLFxyXG4gICAgICAgICAgICAgICAgICAgIGNvbG9yOiB0aGlzLm91dHB1dENvbG9yXHJcbiAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIG9uU2F0dXJhdGlvbklucHV0KHZhbHVlOiBUZXh0RXZlbnQpIHtcclxuICAgICAgICBpZiAodHlwZW9mIHZhbHVlICE9ICdzdHJpbmcnKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGhzbGEgPSB0aGlzLmhzdmEgPyBoc3ZhVG9Ic2xhKHRoaXMuaHN2YSkgOiBuZXcgSHNsYSgwLCAwLCAwLCAwLCB0cnVlKVxyXG5cclxuICAgICAgICAgICAgY29uc3QgdmFsaWQgPSAhaXNOYU4odmFsdWUudikgJiYgdmFsdWUudiA+PSAwICYmIHZhbHVlLnYgPD0gdmFsdWUucmdcclxuXHJcbiAgICAgICAgICAgIGlmICh2YWxpZCkge1xyXG4gICAgICAgICAgICAgICAgaHNsYS5zID0gdmFsdWUudiAvIHZhbHVlLnJnXHJcblxyXG4gICAgICAgICAgICAgICAgdGhpcy5oc3ZhID0gaHNsYVRvSHN2YShoc2xhKVxyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMuc2xpZGVySCA9IHRoaXMuaHN2YS5oXHJcblxyXG4gICAgICAgICAgICAgICAgdGhpcy51cGRhdGVDb2xvclBpY2tlcigpXHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmICh0aGlzLmNhbGxiYWNrcykge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jYWxsYmFja3MuaW5wdXRDaGFuZ2VkKHtcclxuICAgICAgICAgICAgICAgICAgICBpbnB1dDogJ3NhdHVyYXRpb24nLFxyXG4gICAgICAgICAgICAgICAgICAgIHZhbGlkLFxyXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOiBoc2xhLnMsXHJcbiAgICAgICAgICAgICAgICAgICAgY29sb3I6IHRoaXMub3V0cHV0Q29sb3JcclxuICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgb25DeWFuSW5wdXQodmFsdWU6IFRleHRFdmVudCkge1xyXG4gICAgICAgIGlmICh0eXBlb2YgdmFsdWUgIT0gJ3N0cmluZycpIHtcclxuICAgICAgICAgICAgY29uc3QgdmFsaWQgPSAhaXNOYU4odmFsdWUudikgJiYgdmFsdWUudiA+PSAwICYmIHZhbHVlLnYgPD0gdmFsdWUucmdcclxuXHJcbiAgICAgICAgICAgIHRoaXMuY215ayA9IHRoaXMuY215ayB8fCBuZXcgQ215aygwLCAwLCAwLCAwLCAwLCB0cnVlKVxyXG5cclxuICAgICAgICAgICAgaWYgKHZhbGlkKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNteWsuYyA9IHZhbHVlLnYgLyB2YWx1ZS5yZ1xyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlQ29sb3JQaWNrZXIodHJ1ZSwgdHJ1ZSwgdHJ1ZSlcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKHRoaXMuY2FsbGJhY2tzKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNhbGxiYWNrcy5pbnB1dENoYW5nZWQoe1xyXG4gICAgICAgICAgICAgICAgICAgIGlucHV0OiAnY3lhbicsXHJcbiAgICAgICAgICAgICAgICAgICAgdmFsaWQ6IHRydWUsXHJcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHRoaXMuY215ay5jLFxyXG4gICAgICAgICAgICAgICAgICAgIGNvbG9yOiB0aGlzLm91dHB1dENvbG9yXHJcbiAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIG9uTWFnZW50YUlucHV0KHZhbHVlOiBUZXh0RXZlbnQpIHtcclxuICAgICAgICBpZiAodHlwZW9mIHZhbHVlICE9ICdzdHJpbmcnKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHZhbGlkID0gIWlzTmFOKHZhbHVlLnYpICYmIHZhbHVlLnYgPj0gMCAmJiB2YWx1ZS52IDw9IHZhbHVlLnJnXHJcblxyXG4gICAgICAgICAgICB0aGlzLmNteWsgPSB0aGlzLmNteWsgfHwgbmV3IENteWsoMCwgMCwgMCwgMCwgMCwgdHJ1ZSlcclxuXHJcbiAgICAgICAgICAgIGlmICh2YWxpZCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jbXlrLm0gPSB2YWx1ZS52IC8gdmFsdWUucmdcclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZUNvbG9yUGlja2VyKHRydWUsIHRydWUsIHRydWUpXHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmICh0aGlzLmNhbGxiYWNrcykge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jYWxsYmFja3MuaW5wdXRDaGFuZ2VkKHtcclxuICAgICAgICAgICAgICAgICAgICBpbnB1dDogJ21hZ2VudGEnLFxyXG4gICAgICAgICAgICAgICAgICAgIHZhbGlkOiB0cnVlLFxyXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOiB0aGlzLmNteWsubSxcclxuICAgICAgICAgICAgICAgICAgICBjb2xvcjogdGhpcy5vdXRwdXRDb2xvclxyXG4gICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBvblllbGxvd0lucHV0KHZhbHVlOiBUZXh0RXZlbnQpIHtcclxuICAgICAgICBpZiAodHlwZW9mIHZhbHVlICE9ICdzdHJpbmcnKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHZhbGlkID0gIWlzTmFOKHZhbHVlLnYpICYmIHZhbHVlLnYgPj0gMCAmJiB2YWx1ZS52IDw9IHZhbHVlLnJnXHJcblxyXG4gICAgICAgICAgICB0aGlzLmNteWsgPSB0aGlzLmNteWsgfHwgbmV3IENteWsoMCwgMCwgMCwgMCwgMCwgdHJ1ZSlcclxuXHJcbiAgICAgICAgICAgIGlmICh2YWxpZCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jbXlrLnkgPSB2YWx1ZS52IC8gdmFsdWUucmdcclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZUNvbG9yUGlja2VyKHRydWUsIHRydWUsIHRydWUpXHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmICh0aGlzLmNhbGxiYWNrcykge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jYWxsYmFja3MuaW5wdXRDaGFuZ2VkKHtcclxuICAgICAgICAgICAgICAgICAgICBpbnB1dDogJ3llbGxvdycsXHJcbiAgICAgICAgICAgICAgICAgICAgdmFsaWQ6IHRydWUsXHJcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHRoaXMuY215ay55LFxyXG4gICAgICAgICAgICAgICAgICAgIGNvbG9yOiB0aGlzLm91dHB1dENvbG9yXHJcbiAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIG9uQmxhY2tJbnB1dCh2YWx1ZTogVGV4dEV2ZW50KSB7XHJcbiAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSAhPSAnc3RyaW5nJykge1xyXG4gICAgICAgICAgICBjb25zdCB2YWxpZCA9ICFpc05hTih2YWx1ZS52KSAmJiB2YWx1ZS52ID49IDAgJiYgdmFsdWUudiA8PSB2YWx1ZS5yZ1xyXG5cclxuICAgICAgICAgICAgdGhpcy5jbXlrID0gdGhpcy5jbXlrIHx8IG5ldyBDbXlrKDAsIDAsIDAsIDAsIDAsIHRydWUpXHJcblxyXG4gICAgICAgICAgICBpZiAodmFsaWQpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuY215ay5rID0gdmFsdWUudiAvIHZhbHVlLnJnXHJcblxyXG4gICAgICAgICAgICAgICAgdGhpcy51cGRhdGVDb2xvclBpY2tlcih0cnVlLCB0cnVlLCB0cnVlKVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAodGhpcy5jYWxsYmFja3MpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuY2FsbGJhY2tzLmlucHV0Q2hhbmdlZCh7XHJcbiAgICAgICAgICAgICAgICAgICAgaW5wdXQ6ICdibGFjaycsXHJcbiAgICAgICAgICAgICAgICAgICAgdmFsaWQ6IHRydWUsXHJcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHRoaXMuY215ay5rLFxyXG4gICAgICAgICAgICAgICAgICAgIGNvbG9yOiB0aGlzLm91dHB1dENvbG9yXHJcbiAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIG9uQWRkUHJlc2V0Q29sb3IodmFsdWU6IHN0cmluZykge1xyXG4gICAgICAgIGlmICghdGhpcy5wcmVzZXRDb2xvcnM/LmZpbHRlcigoY29sb3IpID0+IChjb2xvciA9PSB2YWx1ZSkpLmxlbmd0aCkge1xyXG4gICAgICAgICAgICB0aGlzLnByZXNldENvbG9ycyA9IHRoaXMucHJlc2V0Q29sb3JzPy5jb25jYXQodmFsdWUpXHJcblxyXG4gICAgICAgICAgICBpZiAodGhpcy5jYWxsYmFja3MpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuY2FsbGJhY2tzLnByZXNldENvbG9yc0NoYW5nZWQodGhpcy5wcmVzZXRDb2xvcnMpXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgb25SZW1vdmVQcmVzZXRDb2xvcih2YWx1ZTogc3RyaW5nKSB7XHJcbiAgICAgICAgdGhpcy5wcmVzZXRDb2xvcnMgPSB0aGlzLnByZXNldENvbG9ycz8uZmlsdGVyKChjb2xvcikgPT4gKGNvbG9yICE9IHZhbHVlKSlcclxuXHJcbiAgICAgICAgaWYgKHRoaXMuY2FsbGJhY2tzKSB7XHJcbiAgICAgICAgICAgIHRoaXMuY2FsbGJhY2tzLnByZXNldENvbG9yc0NoYW5nZWQodGhpcy5wcmVzZXRDb2xvcnMpXHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8vIFByaXZhdGUgaGVscGVyIGZ1bmN0aW9ucyBmb3IgdGhlIGNvbG9yIHBpY2tlciBkaWFsb2cgc3RhdHVzXHJcblxyXG4gICAgcHJpdmF0ZSBvcGVuQ29sb3JQaWNrZXIoKSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLnNob3cpIHtcclxuICAgICAgICAgICAgdGhpcy5zaG93ID0gdHJ1ZVxyXG5cclxuICAgICAgICAgICAgaWYgKHRoaXMuY2FsbGJhY2tzKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNhbGxiYWNrcy5zdGF0ZUNoYW5nZWQodHJ1ZSlcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGNsb3NlQ29sb3JQaWNrZXIoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuc2hvdykge1xyXG4gICAgICAgICAgICB0aGlzLnNob3cgPSBmYWxzZVxyXG5cclxuICAgICAgICAgICAgaWYgKHRoaXMuY2FsbGJhY2tzKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNhbGxiYWNrcy5zdGF0ZUNoYW5nZWQoZmFsc2UpXHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIC8vQHRzLWlnbm9yZVxyXG4gICAgICAgICAgICBpZiAoIXRoaXMuY2RSZWZbJ2Rlc3Ryb3llZCddKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNkUmVmLmRldGVjdENoYW5nZXMoKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgdXBkYXRlQ29sb3JQaWNrZXIoZW1pdDogYm9vbGVhbiA9IHRydWUsIHVwZGF0ZTogYm9vbGVhbiA9IHRydWUsIGNteWtJbnB1dDogYm9vbGVhbiA9IGZhbHNlKSB7XHJcbiAgICAgICAgdGhpcy5oc3ZhID0gdGhpcy5oc3ZhIHx8IG5ldyBIc3ZhKDAsIDAsIDAsIDAsIHRydWUpXHJcbiAgICAgICAgdGhpcy5jbXlrID0gdGhpcy5jbXlrIHx8IG5ldyBDbXlrKDAsIDAsIDAsIDAsIDAsIHRydWUpXHJcblxyXG4gICAgICAgIGlmICh0aGlzLm1vZGUgPT0gQ29sb3JNb2RlSW50ZXJuYWwuZ3JheXNjYWxlKSB7XHJcbiAgICAgICAgICAgIHRoaXMuaHN2YS5zID0gMFxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29uc3QgbGFzdE91dHB1dCA9IHRoaXMub3V0cHV0Q29sb3JcclxuXHJcbiAgICAgICAgY29uc3QgaHNsYSA9IGhzdmFUb0hzbGEodGhpcy5oc3ZhKVxyXG5cclxuICAgICAgICBpZiAodGhpcy5jbXlrRW5hYmxlZCkge1xyXG4gICAgICAgICAgICBpZiAoIWNteWtJbnB1dCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jbXlrID0gcmdiYVRvQ215ayhoc3ZhVG9SZ2JhKHRoaXMuaHN2YSkpXHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmhzdmEgPSByZ2JhVG9Ic3ZhKGNteWtUb1JnYih0aGlzLmNteWspKVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB0aGlzLnNsaWRlckggPSB0aGlzLmhzdmEuaFxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29uc3QgaHVlID0gbmV3IEhzdmEodGhpcy5zbGlkZXJIIHx8IHRoaXMuaHN2YS5oLCAxLCAxLCAxLCB0cnVlKVxyXG5cclxuICAgICAgICBjb25zdCByZ2JhID0gaHN2YVRvUmdiYSh0aGlzLmhzdmEpXHJcblxyXG4gICAgICAgIGlmICh1cGRhdGUpIHtcclxuICAgICAgICAgICAgdGhpcy5oc2xhVGV4dCA9IGRlbm9ybWFsaXplSFNMQShoc2xhKVxyXG4gICAgICAgICAgICB0aGlzLnJnYmFUZXh0ID0gZGVub3JtYWxpemVSR0JBKHJnYmEpXHJcblxyXG4gICAgICAgICAgICBpZiAodGhpcy5jbXlrRW5hYmxlZCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jbXlrVGV4dCA9IGRlbm9ybWFsaXplQ01ZSyh0aGlzLmNteWspXHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGNvbnN0IGFsbG93SGV4OCA9IHRoaXMuYWxwaGFDaGFubmVsID09PSBBbHBoYUNoYW5uZWxFbnVtLmFsd2F5c1xyXG5cclxuICAgICAgICAgICAgdGhpcy5oZXhUZXh0ID0gcmdiYVRvSGV4KHJnYmEsIGFsbG93SGV4OClcclxuICAgICAgICAgICAgdGhpcy5oZXhBbHBoYSA9IHRoaXMucmdiYVRleHQuYVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHRoaXMub3V0cHV0Rm9ybWF0ID09IE91dHB1dEZvcm1hdEVudW0uYXV0byAmJiB0aGlzLmhzdmEuYSA8IDEgJiYgIUFscGhhRW5hYmxlZEZvcm1hdHMuaGFzKHRoaXMuZm9ybWF0KSkge1xyXG4gICAgICAgICAgICB0aGlzLmZvcm1hdCA9IHRoaXMuaHN2YS5hIDwgMSA/IENvbG9yRm9ybWF0RW51bS5yZ2JhIDogQ29sb3JGb3JtYXRFbnVtLmhleFxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29uc3QgaHN2YVRyYW5zcGFyZW50ID0gbmV3IEhzdmEoXHJcbiAgICAgICAgICAgIHRoaXMuaHN2YS5oLFxyXG4gICAgICAgICAgICB0aGlzLmhzdmEucyxcclxuICAgICAgICAgICAgdGhpcy5oc3ZhLnYsXHJcbiAgICAgICAgICAgIDAsXHJcbiAgICAgICAgICAgIHRoaXMuaHN2YS5ub3JtYWxpemVkXHJcbiAgICAgICAgKVxyXG5cclxuICAgICAgICBjb25zdCBoc3ZhRnVsbCA9IG5ldyBIc3ZhKFxyXG4gICAgICAgICAgICB0aGlzLmhzdmEuaCxcclxuICAgICAgICAgICAgdGhpcy5oc3ZhLnMsXHJcbiAgICAgICAgICAgIHRoaXMuaHN2YS52LFxyXG4gICAgICAgICAgICAxLFxyXG4gICAgICAgICAgICB0aGlzLmhzdmEubm9ybWFsaXplZFxyXG4gICAgICAgIClcclxuXHJcbiAgICAgICAgdGhpcy5odWVTbGlkZXJDb2xvciA9IGZvcm1hdE91dHB1dChodWUsICdhdXRvJywgJ2Rpc2FibGVkJylcclxuICAgICAgICB0aGlzLmFscGhhU2xpZGVyQ29sb3IgPSAnbGluZWFyLWdyYWRpZW50KHRvIHJpZ2h0LCAnICsgZm9ybWF0T3V0cHV0KGhzdmFUcmFuc3BhcmVudCwgJ2F1dG8nLCAnZm9yY2VkJykgKyAnIDAlLCAnICsgZm9ybWF0T3V0cHV0KGhzdmFGdWxsLCAnYXV0bycsICdkaXNhYmxlZCcpICsgJyAxMDAlKSdcclxuXHJcbiAgICAgICAgdGhpcy5zdlNsaWRlckxpZ2h0ID0gb3BhcXVlU2xpZGVyTGlnaHQocmdiYSlcclxuICAgICAgICB0aGlzLmh1ZVNsaWRlckxpZ2h0ID0gb3BhcXVlU2xpZGVyTGlnaHQoaHN2YVRvUmdiYShodWUpKVxyXG4gICAgICAgIHRoaXMudmFsdWVTbGlkZXJMaWdodCA9IG9wYXF1ZVNsaWRlckxpZ2h0KHJnYmEpXHJcbiAgICAgICAgdGhpcy5hbHBoYVNsaWRlckxpZ2h0ID0gdHJhbnNwYXJlbnRTbGlkZXJMaWdodChyZ2JhKVxyXG5cclxuICAgICAgICB0aGlzLm91dHB1dENvbG9yID0gZm9ybWF0T3V0cHV0KHRoaXMuaHN2YSwgdGhpcy5vdXRwdXRGb3JtYXQsIHRoaXMuYWxwaGFDaGFubmVsKVxyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRDb2xvciA9IGZvcm1hdE91dHB1dCh0aGlzLmhzdmEsIE91dHB1dEZvcm1hdEVudW0ucmdiYSlcclxuXHJcbiAgICAgICAgaWYgKHRoaXMuZm9ybWF0ICE9PSBDb2xvckZvcm1hdEVudW0uY215aykge1xyXG4gICAgICAgICAgICB0aGlzLmNteWtDb2xvciA9ICcnXHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5jbXlrQ29sb3IgPSBmb3JtYXRDbXlrKHRoaXMuY215aywgdGhpcy5hbHBoYUNoYW5uZWwpXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnNsaWRlciA9IG5ldyBTbGlkZXJQb3NpdGlvbihcclxuICAgICAgICAgICAgKHRoaXMuc2xpZGVySCB8fCB0aGlzLmhzdmEuaCksXHJcbiAgICAgICAgICAgIHRoaXMuaHN2YS5zLFxyXG4gICAgICAgICAgICAoMSAtIHRoaXMuaHN2YS52KSxcclxuICAgICAgICAgICAgdGhpcy5oc3ZhLmFcclxuICAgICAgICApXHJcblxyXG4gICAgICAgIGlmIChlbWl0ICYmIGxhc3RPdXRwdXQgIT0gdGhpcy5vdXRwdXRDb2xvciAmJiB0aGlzLmNhbGxiYWNrcykge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5jbXlrRW5hYmxlZCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jYWxsYmFja3MuY215a0NoYW5nZWQodGhpcy5jbXlrQ29sb3IpXHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHRoaXMuY2FsbGJhY2tzLmNvbG9yQ2hhbmdlZCh0aGlzLm91dHB1dENvbG9yKVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBmaWxsKG46IG51bWJlcikge1xyXG4gICAgICAgIHJldHVybiBuZXcgQXJyYXkobikuZmlsbCgxKVxyXG4gICAgfVxyXG5cclxuICAgIGZvcm1hdEFscGhhKGE/OiBudW1iZXIpIHtcclxuICAgICAgICByZXR1cm4gYT8udG9GaXhlZCgyKS5yZXBsYWNlKC9cXC4/MCskLywgJycpXHJcbiAgICB9XHJcbn1cclxuIiwiPGRpdiBjbGFzcz1cImNvbG9yLXBpY2tlclwiXHJcbiAgICAoY2xpY2spPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCJcclxuICAgIFtuZ1N0eWxlXT1cIntcclxuICAgICAgICB2aXNpYmlsaXR5OiAhc2hvdyA/ICdoaWRkZW4nIDogJ3Zpc2libGUnLFxyXG4gICAgICAgIHdpZHRoOiB3aWR0aCB8fCAnJyxcclxuICAgICAgICBoZWlnaHQ6IGhlaWdodCB8fCAnJ1xyXG4gICAgfVwiXHJcbiAgICAqbmdJZj1cInNob3dcIj5cclxuICAgIDxkaXYgKm5nSWY9XCJkaWFsb2dEaXNwbGF5ID09ICdwb3B1cCdcIlxyXG4gICAgICAgIGNsYXNzPVwiY29sb3ItcGlja2VyX19hcnJvd1wiPjwvZGl2PlxyXG4gICAgPGRpdiAqbmdJZj1cIm1vZGUgPT0gY29sb3JNb2RlSW50ZXJuYWwuY29sb3JcIlxyXG4gICAgICAgIGNsYXNzPVwiY29sb3ItcGlja2VyX19zdlwiXHJcbiAgICAgICAgbnh0U2xpZGVyXHJcbiAgICAgICAgW3JnWF09XCIxXCJcclxuICAgICAgICBbcmdZXT1cIjFcIlxyXG4gICAgICAgIChuZXdWYWx1ZSk9XCJvbkNvbG9yQ2hhbmdlKCRldmVudClcIlxyXG4gICAgICAgIChkcmFnU3RhcnQpPVwib25EcmFnU3RhcnQoJ3NhdHVyYXRpb24tbGlnaHRuZXNzJylcIlxyXG4gICAgICAgIChkcmFnRW5kKT1cIm9uRHJhZ0VuZCgnc2F0dXJhdGlvbi1saWdodG5lc3MnKVwiXHJcbiAgICAgICAgW25nU3R5bGVdPVwieyBcclxuICAgICAgICAgICAgYmFja2dyb3VuZENvbG9yOiBodWVTbGlkZXJDb2xvciB8fCAnJ1xyXG4gICAgICAgIH1cIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29sb3ItcGlja2VyX19jdXJzb3IgY29sb3ItcGlja2VyX19jdXJzb3ItLXN2XCJcclxuICAgICAgICAgICAgW25nQ2xhc3NdPVwieyAnY29sb3ItcGlja2VyX19jdXJzb3ItLWxpZ2h0Jzogc3ZTbGlkZXJMaWdodCB9XCJcclxuICAgICAgICAgICAgW25nU3R5bGVdPVwie1xyXG4gICAgICAgICAgICAgICAgdG9wOiAoc2xpZGVyPy52IHx8IDApICogMTAwICsgJyUnLFxyXG4gICAgICAgICAgICAgICAgbGVmdDogKHNsaWRlcj8ucyB8fCAwKSAqIDEwMCArICclJ1xyXG4gICAgICAgICAgICB9XCI+PC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxkaXYgY2xhc3M9XCJjb2xvci1waWNrZXJfX2NvbnRyb2xzXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImNvbG9yLXBpY2tlcl9fc2VsZWN0ZWRcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbG9yLXBpY2tlcl9fc2VsZWN0ZWQtY29sb3JcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgW25nU3R5bGVdPVwieyBcclxuICAgICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kQ29sb3I6IHNlbGVjdGVkQ29sb3IgfHwgJydcclxuICAgICAgICAgICAgICAgIH1cIj48YnV0dG9uICpuZ0lmPVwicHJlc2V0Q29sb3JzRWRpdGFibGUgJiYgIShtYXhQcmVzZXRDb2xvcnMgJiYgKHByZXNldENvbG9ycz8ubGVuZ3RoIHx8IDApID49IG1heFByZXNldENvbG9ycylcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU9XCJBZGQgY29sb3IgdG8gcHJlc2V0XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgaTE4bi10aXRsZT1cIkBAbnh0LWNvbG9yLXBpY2tlci5idXR0b24uYWRkLWNvbG9yXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJjb2xvci1waWNrZXJfX2FkZC1zZWxlY3RlZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsgJ2NvbG9yLXBpY2tlcl9fYWRkLXNlbGVjdGVkLS1saWdodCc6IGFscGhhU2xpZGVyTGlnaHQgfVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJvbkFkZFByZXNldENvbG9yKHNlbGVjdGVkQ29sb3IpXCI+PHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoPVwiMjRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0PVwiMjRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmlld0JveD1cIjAgMCAyNCAyNFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGggZD1cIk0xOSAxM2gtNnY2aC0ydi02SDV2LTJoNlY1aDJ2Nmg2djJ6XCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNMCAwaDI0djI0SDB6XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxsPVwibm9uZVwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPjwvYnV0dG9uPjwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29sb3ItcGlja2VyX19oYXZcIj5cclxuICAgICAgICAgICAgPGRpdiAqbmdJZj1cIm1vZGUgPT0gY29sb3JNb2RlSW50ZXJuYWwuY29sb3JcIlxyXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJjb2xvci1waWNrZXJfX3NsaWRlciBjb2xvci1waWNrZXJfX3NsaWRlci0taHVlXCJcclxuICAgICAgICAgICAgICAgIG54dFNsaWRlclxyXG4gICAgICAgICAgICAgICAgW3JnWF09XCIxXCJcclxuICAgICAgICAgICAgICAgIChuZXdWYWx1ZSk9XCJvbkh1ZUNoYW5nZSgkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAgIChkcmFnU3RhcnQpPVwib25EcmFnU3RhcnQoJ2h1ZScpXCJcclxuICAgICAgICAgICAgICAgIChkcmFnRW5kKT1cIm9uRHJhZ0VuZCgnaHVlJylcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2xvci1waWNrZXJfX2N1cnNvclwiXHJcbiAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwieyAnY29sb3ItcGlja2VyX19jdXJzb3ItLWxpZ2h0JzogaHVlU2xpZGVyTGlnaHQgfVwiXHJcbiAgICAgICAgICAgICAgICAgICAgW25nU3R5bGVdPVwie1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBsZWZ0OiAoc2xpZGVyPy5oIHx8IDApICogMTAwICsgJyUnXHJcbiAgICAgICAgICAgICAgICAgICAgfVwiPjwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiAqbmdJZj1cIm1vZGUgPT0gY29sb3JNb2RlSW50ZXJuYWwuZ3JheXNjYWxlXCJcclxuICAgICAgICAgICAgICAgIGNsYXNzPVwiY29sb3ItcGlja2VyX19zbGlkZXIgY29sb3ItcGlja2VyX19zbGlkZXItLXZhbHVlXCJcclxuICAgICAgICAgICAgICAgIG54dFNsaWRlclxyXG4gICAgICAgICAgICAgICAgW3JnWF09XCIxXCJcclxuICAgICAgICAgICAgICAgIChuZXdWYWx1ZSk9XCJvblZhbHVlQ2hhbmdlKCRldmVudClcIlxyXG4gICAgICAgICAgICAgICAgKGRyYWdTdGFydCk9XCJvbkRyYWdTdGFydCgndmFsdWUnKVwiXHJcbiAgICAgICAgICAgICAgICAoZHJhZ0VuZCk9XCJvbkRyYWdFbmQoJ3ZhbHVlJylcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2xvci1waWNrZXJfX2N1cnNvclwiXHJcbiAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwieyAnY29sb3ItcGlja2VyX19jdXJzb3ItLWxpZ2h0JzogdmFsdWVTbGlkZXJMaWdodCB9XCJcclxuICAgICAgICAgICAgICAgICAgICBbbmdTdHlsZV09XCJ7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxlZnQ6ICgxIC0gKHNsaWRlcj8udiB8fCAwKSkgKiAxMDAgKyAnJSdcclxuICAgICAgICAgICAgICAgICAgICB9XCI+PC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiYWxwaGFDaGFubmVsICE9ICdkaXNhYmxlZCdcIlxyXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJjb2xvci1waWNrZXJfX3NsaWRlciBjb2xvci1waWNrZXJfX3NsaWRlci0tYWxwaGFcIlxyXG4gICAgICAgICAgICAgICAgbnh0U2xpZGVyXHJcbiAgICAgICAgICAgICAgICBbcmdYXT1cIjFcIlxyXG4gICAgICAgICAgICAgICAgKG5ld1ZhbHVlKT1cIm9uQWxwaGFDaGFuZ2UoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICAoZHJhZ1N0YXJ0KT1cIm9uRHJhZ1N0YXJ0KCdhbHBoYScpXCJcclxuICAgICAgICAgICAgICAgIChkcmFnRW5kKT1cIm9uRHJhZ0VuZCgnYWxwaGEnKVwiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbG9yLXBpY2tlcl9fc2xpZGVyLS1hbHBoYS1iZ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgW25nU3R5bGVdPVwie1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kSW1hZ2U6IGFscGhhU2xpZGVyQ29sb3IgfHwgJydcclxuICAgICAgICAgICAgICAgICAgICB9XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbG9yLXBpY2tlcl9fY3Vyc29yXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwieyAnY29sb3ItcGlja2VyX19jdXJzb3ItLWxpZ2h0JzogYWxwaGFTbGlkZXJMaWdodCB9XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW25nU3R5bGVdPVwie1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGVmdDogKHNsaWRlcj8uYSB8fCAwKSAqIDEwMCArICclJ1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XCI+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxkaXYgKm5nSWY9XCIhZGlzYWJsZUlucHV0ICYmIChtb2RlID09IGNvbG9yTW9kZUludGVybmFsLmNvbG9yIHx8IG1vZGUgPT0gY29sb3JNb2RlSW50ZXJuYWwuZ3JheXNjYWxlKVwiXHJcbiAgICAgICAgY2xhc3M9XCJjb2xvci1waWNrZXJfX2lucHV0c1wiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb2xvci1waWNrZXJfX2lucHV0LWZpZWxkc1wiPlxyXG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwibW9kZSA9PSBjb2xvck1vZGVJbnRlcm5hbC5ncmF5c2NhbGU7IGVsc2UgZm9ybWF0U3dpdGNoXCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sb3ItcGlja2VyX19pbnB1dC1maWVsZFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwibnVtYmVyXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgcGF0dGVybj1cIlswLTldKlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG1pbj1cIjBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBtYXg9XCIxMDBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBueHRUZXh0XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtyZ109XCIxMDBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbdmFsdWVdPVwiaHNsYVRleHQ/Lmw/LnRvRml4ZWQoMClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAoa2V5dXAuZW50ZXIpPVwib25BY2NlcHQoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIChuZXdWYWx1ZSk9XCJvblZhbHVlSW5wdXQoJGV2ZW50KVwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjb2xvci1waWNrZXJfX2lucHV0LWZpZWxkLWxhYmVsXCI+Vjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cImFscGhhQ2hhbm5lbCAhPSAnZGlzYWJsZWQnXCJcclxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImNvbG9yLXBpY2tlcl9faW5wdXQtZmllbGRcIj5cclxuICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cIm51bWJlclwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhdHRlcm49XCJbMC05XSsoW1xcLixdWzAtOV17MSwyfSk/XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgbWluPVwiMFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG1heD1cIjFcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBzdGVwPVwiMC4wMVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG54dFRleHRcclxuICAgICAgICAgICAgICAgICAgICAgICAgW3JnXT1cIjFcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbdmFsdWVdPVwiZm9ybWF0QWxwaGEoaHNsYVRleHQ/LmEpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgKGtleXVwLmVudGVyKT1cIm9uQWNjZXB0KCRldmVudClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAobmV3VmFsdWUpPVwib25BbHBoYUlucHV0KCRldmVudClcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY29sb3ItcGlja2VyX19pbnB1dC1maWVsZC1sYWJlbFwiPkE8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjZm9ybWF0U3dpdGNoPlxyXG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciBbbmdTd2l0Y2hdPVwiZm9ybWF0XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ2hzbGEnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2xvci1waWNrZXJfX2lucHV0LWZpZWxkXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cIm51bWJlclwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGF0dGVybj1cIlswLTldKlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWluPVwiMFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF4PVwiMzYwXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBueHRUZXh0XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3JnXT1cIjM2MFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3ZhbHVlXT1cImhzbGFUZXh0Py5oPy50b0ZpeGVkKDApXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoa2V5dXAuZW50ZXIpPVwib25BY2NlcHQoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG5ld1ZhbHVlKT1cIm9uSHVlSW5wdXQoJGV2ZW50KVwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNvbG9yLXBpY2tlcl9faW5wdXQtZmllbGQtbGFiZWxcIj5IPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbG9yLXBpY2tlcl9faW5wdXQtZmllbGRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwibnVtYmVyXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXR0ZXJuPVwiWzAtOV0qXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtaW49XCIwXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXg9XCIxMDBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG54dFRleHRcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcmddPVwiMTAwXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdmFsdWVdPVwiaHNsYVRleHQ/LnM/LnRvRml4ZWQoMClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChrZXl1cC5lbnRlcik9XCJvbkFjY2VwdCgkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobmV3VmFsdWUpPVwib25TYXR1cmF0aW9uSW5wdXQoJGV2ZW50KVwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNvbG9yLXBpY2tlcl9faW5wdXQtZmllbGQtbGFiZWxcIj5TPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbG9yLXBpY2tlcl9faW5wdXQtZmllbGRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwibnVtYmVyXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXR0ZXJuPVwiWzAtOV0qXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtaW49XCIwXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXg9XCIxMDBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG54dFRleHRcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcmddPVwiMTAwXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdmFsdWVdPVwiaHNsYVRleHQ/Lmw/LnRvRml4ZWQoMClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChrZXl1cC5lbnRlcik9XCJvbkFjY2VwdCgkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobmV3VmFsdWUpPVwib25MaWdodG5lc3NJbnB1dCgkZXZlbnQpXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY29sb3ItcGlja2VyX19pbnB1dC1maWVsZC1sYWJlbFwiPkw8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiYWxwaGFDaGFubmVsICE9ICdkaXNhYmxlZCdcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJjb2xvci1waWNrZXJfX2lucHV0LWZpZWxkXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cIm51bWJlclwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGF0dGVybj1cIlswLTldKyhbXFwuLF1bMC05XXsxLDJ9KT9cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1pbj1cIjBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1heD1cIjFcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZXA9XCIwLjAxXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBueHRUZXh0XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3JnXT1cIjFcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt2YWx1ZV09XCJmb3JtYXRBbHBoYShoc2xhVGV4dD8uYSlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChrZXl1cC5lbnRlcik9XCJvbkFjY2VwdCgkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobmV3VmFsdWUpPVwib25BbHBoYUlucHV0KCRldmVudClcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjb2xvci1waWNrZXJfX2lucHV0LWZpZWxkLWxhYmVsXCI+QTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ3JnYmEnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2xvci1waWNrZXJfX2lucHV0LWZpZWxkXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cIm51bWJlclwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGF0dGVybj1cIlswLTldKlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWluPVwiMFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF4PVwiMjU1XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBueHRUZXh0XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3JnXT1cIjI1NVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3ZhbHVlXT1cInJnYmFUZXh0Py5yPy50b0ZpeGVkKDApXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoa2V5dXAuZW50ZXIpPVwib25BY2NlcHQoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG5ld1ZhbHVlKT1cIm9uUmVkSW5wdXQoJGV2ZW50KVwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNvbG9yLXBpY2tlcl9faW5wdXQtZmllbGQtbGFiZWxcIj5SPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbG9yLXBpY2tlcl9faW5wdXQtZmllbGRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwibnVtYmVyXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXR0ZXJuPVwiWzAtOV0qXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtaW49XCIwXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXg9XCIyNTVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG54dFRleHRcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcmddPVwiMjU1XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdmFsdWVdPVwicmdiYVRleHQ/Lmc/LnRvRml4ZWQoMClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChrZXl1cC5lbnRlcik9XCJvbkFjY2VwdCgkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobmV3VmFsdWUpPVwib25HcmVlbklucHV0KCRldmVudClcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjb2xvci1waWNrZXJfX2lucHV0LWZpZWxkLWxhYmVsXCI+Rzwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2xvci1waWNrZXJfX2lucHV0LWZpZWxkXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cIm51bWJlclwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGF0dGVybj1cIlswLTldKlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWluPVwiMFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF4PVwiMjU1XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBueHRUZXh0XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3JnXT1cIjI1NVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3ZhbHVlXT1cInJnYmFUZXh0Py5iPy50b0ZpeGVkKDApXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoa2V5dXAuZW50ZXIpPVwib25BY2NlcHQoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG5ld1ZhbHVlKT1cIm9uQmx1ZUlucHV0KCRldmVudClcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjb2xvci1waWNrZXJfX2lucHV0LWZpZWxkLWxhYmVsXCI+Qjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJhbHBoYUNoYW5uZWwgIT0gJ2Rpc2FibGVkJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImNvbG9yLXBpY2tlcl9faW5wdXQtZmllbGRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwibnVtYmVyXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXR0ZXJuPVwiWzAtOV0rKFtcXC4sXVswLTldezEsMn0pP1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWluPVwiMFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF4PVwiMVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RlcD1cIjAuMDFcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG54dFRleHRcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcmddPVwiMVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3ZhbHVlXT1cImZvcm1hdEFscGhhKGhzbGFUZXh0Py5hKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGtleXVwLmVudGVyKT1cIm9uQWNjZXB0KCRldmVudClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChuZXdWYWx1ZSk9XCJvbkFscGhhSW5wdXQoJGV2ZW50KVwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNvbG9yLXBpY2tlcl9faW5wdXQtZmllbGQtbGFiZWxcIj5BPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCInY215aydcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbG9yLXBpY2tlcl9faW5wdXQtZmllbGRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwibnVtYmVyXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXR0ZXJuPVwiWzAtOV0qXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtaW49XCIwXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXg9XCIxMDBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG54dFRleHRcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcmddPVwiMTAwXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdmFsdWVdPVwiY215a1RleHQ/LmM/LnRvRml4ZWQoMClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChrZXl1cC5lbnRlcik9XCJvbkFjY2VwdCgkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobmV3VmFsdWUpPVwib25DeWFuSW5wdXQoJGV2ZW50KVwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNvbG9yLXBpY2tlcl9faW5wdXQtZmllbGQtbGFiZWxcIj5DPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbG9yLXBpY2tlcl9faW5wdXQtZmllbGRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwibnVtYmVyXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXR0ZXJuPVwiWzAtOV0qXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtaW49XCIwXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXg9XCIxMDBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG54dFRleHRcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcmddPVwiMTAwXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdmFsdWVdPVwiY215a1RleHQ/Lm0/LnRvRml4ZWQoMClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChrZXl1cC5lbnRlcik9XCJvbkFjY2VwdCgkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobmV3VmFsdWUpPVwib25NYWdlbnRhSW5wdXQoJGV2ZW50KVwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNvbG9yLXBpY2tlcl9faW5wdXQtZmllbGQtbGFiZWxcIj5NPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbG9yLXBpY2tlcl9faW5wdXQtZmllbGRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwibnVtYmVyXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXR0ZXJuPVwiWzAtOV0qXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtaW49XCIwXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXg9XCIxMDBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG54dFRleHRcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcmddPVwiMTAwXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdmFsdWVdPVwiY215a1RleHQ/Lnk/LnRvRml4ZWQoMClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChrZXl1cC5lbnRlcik9XCJvbkFjY2VwdCgkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobmV3VmFsdWUpPVwib25ZZWxsb3dJbnB1dCgkZXZlbnQpXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY29sb3ItcGlja2VyX19pbnB1dC1maWVsZC1sYWJlbFwiPlk8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sb3ItcGlja2VyX19pbnB1dC1maWVsZFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJudW1iZXJcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhdHRlcm49XCJbMC05XSpcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1pbj1cIjBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1heD1cIjEwMFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnh0VGV4dFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtyZ109XCIxMDBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt2YWx1ZV09XCJjbXlrVGV4dD8uaz8udG9GaXhlZCgwKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGtleXVwLmVudGVyKT1cIm9uQWNjZXB0KCRldmVudClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChuZXdWYWx1ZSk9XCJvbkJsYWNrSW5wdXQoJGV2ZW50KVwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNvbG9yLXBpY2tlcl9faW5wdXQtZmllbGQtbGFiZWxcIj5LPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cImFscGhhQ2hhbm5lbCAhPSAnZGlzYWJsZWQnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiY29sb3ItcGlja2VyX19pbnB1dC1maWVsZFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJudW1iZXJcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhdHRlcm49XCJbMC05XSsoW1xcLixdWzAtOV17MSwyfSk/XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtaW49XCIwXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXg9XCIxXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGVwPVwiMC4wMVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnh0VGV4dFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtyZ109XCIxXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdmFsdWVdPVwiZm9ybWF0QWxwaGEoY215a1RleHQ/LmEpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoa2V5dXAuZW50ZXIpPVwib25BY2NlcHQoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG5ld1ZhbHVlKT1cIm9uQWxwaGFJbnB1dCgkZXZlbnQpXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY29sb3ItcGlja2VyX19pbnB1dC1maWVsZC1sYWJlbFwiPkE8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoRGVmYXVsdD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbG9yLXBpY2tlcl9faW5wdXQtZmllbGRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBueHRUZXh0XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3ZhbHVlXT1cImhleFRleHRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChibHVyKT1cIm9uSGV4SW5wdXQoKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGtleXVwLmVudGVyKT1cIm9uQWNjZXB0KCRldmVudClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChuZXdWYWx1ZSk9XCJvbkhleElucHV0KCRldmVudClcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjb2xvci1waWNrZXJfX2lucHV0LWZpZWxkLWxhYmVsXCI+SGV4PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cImFscGhhQ2hhbm5lbCA9PSAnZm9yY2VkJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImNvbG9yLXBpY2tlcl9faW5wdXQtZmllbGRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwibnVtYmVyXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXR0ZXJuPVwiWzAtOV0rKFtcXC4sXVswLTldezEsMn0pP1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWluPVwiMFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF4PVwiMVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RlcD1cIjAuMDFcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG54dFRleHRcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcmddPVwiMVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3ZhbHVlXT1cImZvcm1hdEFscGhhKGhleEFscGhhKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGtleXVwLmVudGVyKT1cIm9uQWNjZXB0KCRldmVudClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChuZXdWYWx1ZSk9XCJvbkFscGhhSW5wdXQoJGV2ZW50KVwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNvbG9yLXBpY2tlcl9faW5wdXQtZmllbGQtbGFiZWxcIj5BPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXYgKm5nSWY9XCJtb2RlID09IGNvbG9yTW9kZUludGVybmFsLmNvbG9yXCJcclxuICAgICAgICAgICAgY2xhc3M9XCJjb2xvci1waWNrZXJfX2lucHV0LXR5cGVcIj5cclxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjb2xvci1waWNrZXJfX2lucHV0LXR5cGUtYXJyb3dcIlxyXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9uRm9ybWF0VG9nZ2xlKDEpXCI+PC9zcGFuPlxyXG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNvbG9yLXBpY2tlcl9faW5wdXQtdHlwZS1hcnJvd1wiXHJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwib25Gb3JtYXRUb2dnbGUoLTEpXCI+PC9zcGFuPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwicHJlc2V0Q29sb3JzPy5sZW5ndGhcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29sb3ItcGlja2VyX19zZXBhcmF0b3JcIj48L2Rpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29sb3ItcGlja2VyX19wcmVzZXRcIj5cclxuICAgICAgICAgICAgPGRpdiAqbmdJZj1cInByZXNldExhYmVsXCJcclxuICAgICAgICAgICAgICAgIGNsYXNzPVwiY29sb3ItcGlja2VyX19wcmVzZXQtbGFiZWxcIj5cclxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJwcmVzZXRMYWJlbCA9PT0gdHJ1ZTsgZWxzZSBzdHJpbmdMYWJlbFwiXHJcbiAgICAgICAgICAgICAgICAgICAgaTE4bj1cIkBAbnh0LWNvbG9yLXBpY2tlci5wcmVzZXQtY29sb3JzXCI+UHJlc2V0IGNvbG9yczwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNzdHJpbmdMYWJlbD57eyBwcmVzZXRMYWJlbCB9fTwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2ICpuZ0lmPVwicHJlc2V0Q29sb3JzPy5sZW5ndGhcIlxyXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJjb2xvci1waWNrZXJfX3ByZXNldC1pdGVtc1wiPlxyXG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgY29sb3Igb2YgcHJlc2V0Q29sb3JzXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cInN0cmluZ1RvUmdiYShjb2xvcikgYXMgcmdiYVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiY29sb3ItcGlja2VyX19wcmVzZXQtaXRlbVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFt0aXRsZV09XCJjb2xvclwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJzZXRDb2xvckZyb21TdHJpbmcoY29sb3IpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2xvci1waWNrZXJfX3ByZXNldC1pdGVtLWZpbGxcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nU3R5bGVdPVwieyBcclxuICAgICAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZENvbG9yOiByZ2JhIHx8ICcnXHJcbiAgICAgICAgICAgICAgICAgICAgfVwiPjxidXR0b24gKm5nSWY9XCJwcmVzZXRDb2xvcnNFZGl0YWJsZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU9XCJSZW1vdmUgQ29sb3JcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGkxOG4tdGl0bGU9XCJAQG54dC1jb2xvci1waWNrZXIuYnV0dG9uLnJlbW92ZS1jb2xvclwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJjb2xvci1waWNrZXJfX3JlbW92ZS1zZWxlY3RlZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9uUmVtb3ZlUHJlc2V0Q29sb3IoY29sb3IpXCI+PHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg9XCIyNFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlaWdodD1cIjI0XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmlld0JveD1cIjAgMCAyNCAyNFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPVwiTTE5IDYuNDFMMTcuNTkgNSAxMiAxMC41OSA2LjQxIDUgNSA2LjQxIDEwLjU5IDEyIDUgMTcuNTkgNi40MSAxOSAxMiAxMy40MSAxNy41OSAxOSAxOSAxNy41OSAxMy40MSAxMnpcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPVwiTTAgMGgyNHYyNEgwelwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxsPVwibm9uZVwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+PC9idXR0b24+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgIDxkaXYgKm5nRm9yPVwibGV0IGkgb2YgZmlsbCg1MClcIlxyXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiY29sb3ItcGlja2VyX19wcmVzZXQtaXRlbVwiPjwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgPGRpdiAqbmdJZj1cIm9rQnV0dG9uIHx8IGNhbmNlbEJ1dHRvblwiXHJcbiAgICAgICAgY2xhc3M9XCJjb2xvci1waWNrZXJfX2J1dHRvbnNcIj5cclxuICAgICAgICA8YnV0dG9uICpuZ0lmPVwiY2FuY2VsQnV0dG9uXCJcclxuICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXHJcbiAgICAgICAgICAgIChjbGljayk9XCJvbkNhbmNlbCgkZXZlbnQpXCJcclxuICAgICAgICAgICAgaTE4bj1cIkBAbnh0LWNvbG9yLXBpY2tlci5idXR0b24uY2FuY2VsXCI+Q2FuY2VsPC9idXR0b24+XHJcbiAgICAgICAgPGJ1dHRvbiAqbmdJZj1cIm9rQnV0dG9uXCJcclxuICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXHJcbiAgICAgICAgICAgIChjbGljayk9XCJvbkFjY2VwdCgkZXZlbnQpXCJcclxuICAgICAgICAgICAgaTE4bj1cIkBAbnh0LWNvbG9yLXBpY2tlci5idXR0b24ub2tcIj5PSzwvYnV0dG9uPlxyXG4gICAgPC9kaXY+XHJcbjwvZGl2PlxyXG4iXX0=
653
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29sb3ItcGlja2VyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2NvbG9yLXBpY2tlci9zcmMvbGliL2NvbG9yLXBpY2tlci9jb2xvci1waWNrZXIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvY29sb3ItcGlja2VyL3NyYy9saWIvY29sb3ItcGlja2VyL2NvbG9yLXBpY2tlci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQXVDLFNBQVMsRUFBYyxZQUFZLEVBQXFCLGlCQUFpQixFQUFFLE1BQU0sZUFBZSxDQUFBO0FBQzlJLE9BQU8sRUFBRSxTQUFTLEVBQUUsZUFBZSxFQUFFLGVBQWUsRUFBRSxlQUFlLEVBQUUsVUFBVSxFQUFFLFlBQVksRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxZQUFZLEVBQUUsWUFBWSxFQUFFLE1BQU0sa0JBQWtCLENBQUE7QUFDNU4sT0FBTyxFQUFFLGlCQUFpQixFQUFFLHNCQUFzQixFQUFFLE1BQU0scUJBQXFCLENBQUE7QUFDL0UsT0FBTyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxNQUFNLG9CQUFvQixDQUFBO0FBQzNELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxZQUFZLEVBQWlELGNBQWMsRUFBRSxZQUFZLEVBQUUsY0FBYyxFQUFhLE1BQU0sb0JBQW9CLENBQUE7QUFDNUssT0FBTyxFQUFnQixnQkFBZ0IsRUFBRSxtQkFBbUIsRUFBZSxlQUFlLEVBQWlCLGlCQUFpQixFQUFnQixnQkFBZ0IsRUFBRSxNQUFNLGtCQUFrQixDQUFBOzs7Ozs7QUFHdEw7O0dBRUc7QUFPSCxNQUFNLE9BQU8sb0JBQW9CO0lBdUU3QixZQUNZLEtBQWlCLEVBQ2pCLEtBQXdCLEVBQ3hCLE9BQTJC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LFFBQVEsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFmdGVyVmlld0NoZWNrZWQsIENoYW5nZURldGVjdG9yUmVmLCBDb21wb25lbnQsIEVsZW1lbnRSZWYsIEhvc3RMaXN0ZW5lciwgT25EZXN0cm95LCBPbkluaXQsIFZpZXdFbmNhcHN1bGF0aW9uIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSdcclxuaW1wb3J0IHsgY215a1RvUmdiLCBkZW5vcm1hbGl6ZUNNWUssIGRlbm9ybWFsaXplSFNMQSwgZGVub3JtYWxpemVSR0JBLCBmb3JtYXRDbXlrLCBmb3JtYXRPdXRwdXQsIGhzbGFUb0hzdmEsIGhzdmFUb0hzbGEsIGhzdmFUb1JnYmEsIHJnYmFUb0NteWssIHJnYmFUb0hleCwgcmdiYVRvSHN2YSwgc3RyaW5nVG9DbXlrLCBzdHJpbmdUb0hzdmEgfSBmcm9tICcuLi8uLi91dGlsL2NvbG9yJ1xyXG5pbXBvcnQgeyBvcGFxdWVTbGlkZXJMaWdodCwgdHJhbnNwYXJlbnRTbGlkZXJMaWdodCB9IGZyb20gJy4uLy4uL3V0aWwvY29udHJhc3QnXHJcbmltcG9ydCB7IENteWssIEhzbGEsIEhzdmEsIFJnYmEgfSBmcm9tICcuLi8uLi91dGlsL2Zvcm1hdHMnXHJcbmltcG9ydCB7IENvbG9yTW9kZUludGVybmFsLCBjb21wb3NlZFBhdGgsIEN1cnNvckV2ZW50LCBEaWFsb2dDb25maWcsIERpcmVjdGl2ZUNhbGxiYWNrcywgcGFyc2VDb2xvck1vZGUsIHNpemVUb1N0cmluZywgU2xpZGVyUG9zaXRpb24sIFRleHRFdmVudCB9IGZyb20gJy4uLy4uL3V0aWwvaGVscGVycydcclxuaW1wb3J0IHsgQWxwaGFDaGFubmVsLCBBbHBoYUNoYW5uZWxFbnVtLCBBbHBoYUVuYWJsZWRGb3JtYXRzLCBDb2xvckZvcm1hdCwgQ29sb3JGb3JtYXRFbnVtLCBEaWFsb2dEaXNwbGF5LCBEaWFsb2dEaXNwbGF5RW51bSwgT3V0cHV0Rm9ybWF0LCBPdXRwdXRGb3JtYXRFbnVtIH0gZnJvbSAnLi4vLi4vdXRpbC90eXBlcydcclxuaW1wb3J0IHsgQ29sb3JQaWNrZXJTZXJ2aWNlIH0gZnJvbSAnLi4vY29sb3ItcGlja2VyLnNlcnZpY2UnXHJcblxyXG4vKipcclxuICogQGludGVybmFsXHJcbiAqL1xyXG5AQ29tcG9uZW50KHtcclxuICAgIHNlbGVjdG9yOiAnbnh0LWNvbG9yLXBpY2tlcicsXHJcbiAgICB0ZW1wbGF0ZVVybDogJy4vY29sb3ItcGlja2VyLmNvbXBvbmVudC5odG1sJyxcclxuICAgIHN0eWxlVXJsczogWycuL2NvbG9yLXBpY2tlci5jb21wb25lbnQuc2NzcyddLFxyXG4gICAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uRW11bGF0ZWRcclxufSlcclxuZXhwb3J0IGNsYXNzIENvbG9yUGlja2VyQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3ksIEFmdGVyVmlld0NoZWNrZWQge1xyXG5cclxuICAgIHJlYWRvbmx5IGNvbG9yTW9kZUludGVybmFsID0gQ29sb3JNb2RlSW50ZXJuYWxcclxuXHJcbiAgICBwcml2YXRlIGhzdmE/OiBIc3ZhXHJcbiAgICBwcml2YXRlIGNteWs/OiBDbXlrXHJcblxyXG4gICAgcHJpdmF0ZSBjbXlrQ29sb3IgPSAnJ1xyXG4gICAgcHJpdmF0ZSBvdXRwdXRDb2xvciA9ICcnXHJcbiAgICBwcml2YXRlIGluaXRpYWxDb2xvciA9ICcnXHJcbiAgICBwcml2YXRlIGZhbGxiYWNrQ29sb3I/OiBzdHJpbmdcclxuXHJcbiAgICBwcml2YXRlIHNsaWRlckg/OiBudW1iZXJcclxuXHJcbiAgICBwcml2YXRlIGRpYWxvZ0lucHV0RmllbGRzOiBDb2xvckZvcm1hdFtdID0gW1xyXG4gICAgICAgIENvbG9yRm9ybWF0RW51bS5oZXgsXHJcbiAgICAgICAgQ29sb3JGb3JtYXRFbnVtLnJnYmEsXHJcbiAgICAgICAgQ29sb3JGb3JtYXRFbnVtLmhzbGEsXHJcbiAgICAgICAgQ29sb3JGb3JtYXRFbnVtLmNteWtcclxuICAgIF1cclxuXHJcbiAgICBwcml2YXRlIGNhbGxiYWNrcz86IERpcmVjdGl2ZUNhbGxiYWNrc1xyXG5cclxuICAgIHNob3cgPSBmYWxzZVxyXG5cclxuICAgIGZvcm1hdDogQ29sb3JGb3JtYXQgPSBDb2xvckZvcm1hdEVudW0uaGV4XHJcbiAgICBzbGlkZXI/OiBTbGlkZXJQb3NpdGlvblxyXG5cclxuICAgIGhleFRleHQ/OiBzdHJpbmdcclxuICAgIGhleEFscGhhPzogbnVtYmVyXHJcblxyXG4gICAgY215a1RleHQ/OiBDbXlrXHJcbiAgICBoc2xhVGV4dD86IEhzbGFcclxuICAgIHJnYmFUZXh0PzogUmdiYVxyXG5cclxuICAgIHNlbGVjdGVkQ29sb3IgPSAnJ1xyXG4gICAgaHVlU2xpZGVyQ29sb3I/OiBzdHJpbmdcclxuICAgIGFscGhhU2xpZGVyQ29sb3I/OiBzdHJpbmdcclxuXHJcbiAgICBzdlNsaWRlckxpZ2h0ID0gZmFsc2VcclxuICAgIGh1ZVNsaWRlckxpZ2h0ID0gZmFsc2VcclxuICAgIHZhbHVlU2xpZGVyTGlnaHQgPSBmYWxzZVxyXG4gICAgYWxwaGFTbGlkZXJMaWdodCA9IGZhbHNlXHJcblxyXG4gICAgd2lkdGg/OiBzdHJpbmdcclxuICAgIGhlaWdodD86IHN0cmluZ1xyXG5cclxuICAgIG1vZGU6IENvbG9yTW9kZUludGVybmFsID0gQ29sb3JNb2RlSW50ZXJuYWwuY29sb3JcclxuXHJcbiAgICBjbXlrRW5hYmxlZCA9IGZhbHNlXHJcbiAgICBhbHBoYUNoYW5uZWw6IEFscGhhQ2hhbm5lbCA9IEFscGhhQ2hhbm5lbEVudW0uZW5hYmxlZFxyXG4gICAgb3V0cHV0Rm9ybWF0OiBPdXRwdXRGb3JtYXQgPSBPdXRwdXRGb3JtYXRFbnVtLmF1dG9cclxuXHJcbiAgICBkaXNhYmxlSW5wdXQgPSBmYWxzZVxyXG4gICAgZGlhbG9nRGlzcGxheT86IERpYWxvZ0Rpc3BsYXlcclxuXHJcbiAgICBpZ25vcmVkRWxlbWVudHM/OiBhbnlbXVxyXG5cclxuICAgIHNhdmVDbGlja091dHNpZGUgPSBmYWxzZVxyXG4gICAgY2xvc2VDbGlja091dHNpZGUgPSBmYWxzZVxyXG5cclxuICAgIG9rQnV0dG9uID0gZmFsc2VcclxuXHJcbiAgICBjYW5jZWxCdXR0b24gPSBmYWxzZVxyXG5cclxuICAgIHByZXNldExhYmVsOiBib29sZWFuIHwgc3RyaW5nID0gZmFsc2VcclxuICAgIHByZXNldENvbG9ycz86IHN0cmluZ1tdXHJcbiAgICBtYXhQcmVzZXRDb2xvcnM/OiBudW1iZXJcclxuXHJcbiAgICBwcmVzZXRDb2xvcnNFZGl0YWJsZTogYm9vbGVhbiA9IGZhbHNlXHJcblxyXG4gICAgY29uc3RydWN0b3IoXHJcbiAgICAgICAgcHJpdmF0ZSBlbFJlZjogRWxlbWVudFJlZixcclxuICAgICAgICBwcml2YXRlIGNkUmVmOiBDaGFuZ2VEZXRlY3RvclJlZixcclxuICAgICAgICBwcml2YXRlIHNlcnZpY2U6IENvbG9yUGlja2VyU2VydmljZVxyXG4gICAgKSB7IH1cclxuXHJcbiAgICBASG9zdExpc3RlbmVyKCdkb2N1bWVudDprZXl1cC5lc2MnLCBbJyRldmVudCddKVxyXG4gICAgb25DYW5jZWwoZXZlbnQ6IEV2ZW50KSB7XHJcbiAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcclxuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpXHJcblxyXG4gICAgICAgIGlmICh0aGlzLmluaXRpYWxDb2xvcikge1xyXG4gICAgICAgICAgICB0aGlzLnNldENvbG9yRnJvbVN0cmluZyh0aGlzLmluaXRpYWxDb2xvciwgdHJ1ZSlcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh0aGlzLmNhbGxiYWNrcykge1xyXG4gICAgICAgICAgICB0aGlzLmNhbGxiYWNrcy5jb2xvclNlbGVjdENhbmNlbGVkKClcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh0aGlzLnNob3cgJiYgdGhpcy5kaWFsb2dEaXNwbGF5ID09IERpYWxvZ0Rpc3BsYXlFbnVtLnBvcHVwKSB7XHJcbiAgICAgICAgICAgIHRoaXMuY2xvc2VDb2xvclBpY2tlcigpXHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIEBIb3N0TGlzdGVuZXIoJ2RvY3VtZW50OmtleXVwLmVudGVyJywgWyckZXZlbnQnXSlcclxuICAgIG9uQWNjZXB0KGV2ZW50OiBFdmVudCkge1xyXG4gICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXHJcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKVxyXG5cclxuICAgICAgICBpZiAodGhpcy5zaG93ICYmIHRoaXMuZGlhbG9nRGlzcGxheSA9PSBEaWFsb2dEaXNwbGF5RW51bS5wb3B1cCkge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5vdXRwdXRDb2xvciAmJiB0aGlzLmNhbGxiYWNrcykge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jYWxsYmFja3MuY29sb3JTZWxlY3RlZCh0aGlzLm91dHB1dENvbG9yKVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAodGhpcy5kaWFsb2dEaXNwbGF5ID09IERpYWxvZ0Rpc3BsYXlFbnVtLnBvcHVwKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNsb3NlQ29sb3JQaWNrZXIoKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIEBIb3N0TGlzdGVuZXIoJ2RvY3VtZW50Om1vdXNlZG93bicsIFsnJGV2ZW50J10pXHJcbiAgICBASG9zdExpc3RlbmVyKCdkb2N1bWVudDpmb2N1c2luJywgWyckZXZlbnQnXSlcclxuICAgIG9uRm9jdXNDaGFuZ2UoZXZlbnQ6IE1vdXNlRXZlbnQgfCBGb2N1c0V2ZW50KSB7XHJcbiAgICAgICAgY29uc3QgcGF0aCA9IG5ldyBTZXQoY29tcG9zZWRQYXRoKGV2ZW50KSlcclxuICAgICAgICBjb25zdCBpbnRlcnNlY3QgPSB0aGlzLmlnbm9yZWRFbGVtZW50cz8uZmluZChlbCA9PiBwYXRoLmhhcyhlbCkpXHJcblxyXG4gICAgICAgIGlmICghaW50ZXJzZWN0KSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLnNob3cgJiYgdGhpcy5kaWFsb2dEaXNwbGF5ID09IERpYWxvZ0Rpc3BsYXlFbnVtLnBvcHVwKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5zYXZlQ2xpY2tPdXRzaWRlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMub3V0cHV0Q29sb3IgJiYgdGhpcy5jYWxsYmFja3MpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jYWxsYmFja3MuY29sb3JTZWxlY3RlZCh0aGlzLm91dHB1dENvbG9yKVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRDb2xvckZyb21TdHJpbmcodGhpcy5pbml0aWFsQ29sb3IsIGZhbHNlKVxyXG5cclxuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5jYWxsYmFja3MpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuY215a0VuYWJsZWQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY2FsbGJhY2tzLmNteWtDaGFuZ2VkKHRoaXMuY215a0NvbG9yKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNhbGxiYWNrcy5jb2xvckNoYW5nZWQodGhpcy5pbml0aWFsQ29sb3IpXHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLmNsb3NlQ2xpY2tPdXRzaWRlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jbG9zZUNvbG9yUGlja2VyKClcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLnNhdmVDbGlja091dHNpZGUgJiYgdGhpcy5vdXRwdXRDb2xvciAmJiB0aGlzLmNhbGxiYWNrcykge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jYWxsYmFja3MuY29sb3JTZWxlY3RlZCh0aGlzLm91dHB1dENvbG9yKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIG5nT25Jbml0KCkge1xyXG4gICAgICAgIHRoaXMuc2xpZGVyID0gbmV3IFNsaWRlclBvc2l0aW9uKDAsIDAsIDAsIDApXHJcblxyXG4gICAgICAgIGlmICh0aGlzLmNteWtFbmFibGVkKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZm9ybWF0ID0gQ29sb3JGb3JtYXRFbnVtLmNteWtcclxuICAgICAgICB9IGVsc2UgaWYgKHRoaXMub3V0cHV0Rm9ybWF0ID09IE91dHB1dEZvcm1hdEVudW0ucmdiYSkge1xyXG4gICAgICAgICAgICB0aGlzLmZvcm1hdCA9IENvbG9yRm9ybWF0RW51bS5yZ2JhXHJcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLm91dHB1dEZvcm1hdCA9PSBPdXRwdXRGb3JtYXRFbnVtLmhzbGEpIHtcclxuICAgICAgICAgICAgdGhpcy5mb3JtYXQgPSBDb2xvckZvcm1hdEVudW0uaHNsYVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuZm9ybWF0ID0gQ29sb3JGb3JtYXRFbnVtLmhleFxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5vcGVuRGlhbG9nKHRoaXMuaW5pdGlhbENvbG9yLCBmYWxzZSlcclxuICAgIH1cclxuXHJcbiAgICBuZ09uRGVzdHJveSgpIHtcclxuICAgICAgICB0aGlzLmNsb3NlRGlhbG9nKClcclxuICAgIH1cclxuXHJcbiAgICBuZ0FmdGVyVmlld0NoZWNrZWQoKSB7IH1cclxuXHJcbiAgICBvcGVuRGlhbG9nKGNvbG9yOiBhbnksIGVtaXQ6IGJvb2xlYW4gPSB0cnVlKSB7XHJcbiAgICAgICAgdGhpcy5zZXJ2aWNlLnNldEFjdGl2ZSh0aGlzKVxyXG5cclxuICAgICAgICB0aGlzLnNldEluaXRpYWxDb2xvcihjb2xvcilcclxuXHJcbiAgICAgICAgdGhpcy5zZXRDb2xvckZyb21TdHJpbmcoY29sb3IsIGVtaXQpXHJcblxyXG4gICAgICAgIHRoaXMub3BlbkNvbG9yUGlja2VyKClcclxuICAgIH1cclxuXHJcbiAgICBjbG9zZURpYWxvZygpIHtcclxuICAgICAgICB0aGlzLmNsb3NlQ29sb3JQaWNrZXIoKVxyXG4gICAgfVxyXG5cclxuICAgIHNldHVwRGlhbG9nKGNvbmZpZzogRGlhbG9nQ29uZmlnKSB7XHJcbiAgICAgICAgdGhpcy5zZXRJbml0aWFsQ29sb3IoY29uZmlnLmNvbG9yKVxyXG5cclxuICAgICAgICB0aGlzLm1vZGUgPSBwYXJzZUNvbG9yTW9kZShjb25maWcubW9kZSlcclxuXHJcbiAgICAgICAgdGhpcy5jYWxsYmFja3MgPSBjb25maWcuY2FsbGJhY2tzXHJcblxyXG4gICAgICAgIHRoaXMuZGlzYWJsZUlucHV0ID0gY29uZmlnLmRpc2FibGVJbnB1dFxyXG5cclxuICAgICAgICB0aGlzLmNteWtFbmFibGVkID0gY29uZmlnLmNteWtFbmFibGVkXHJcbiAgICAgICAgdGhpcy5hbHBoYUNoYW5uZWwgPSBjb25maWcuYWxwaGFDaGFubmVsXHJcbiAgICAgICAgdGhpcy5vdXRwdXRGb3JtYXQgPSBjb25maWcub3V0cHV0Rm9ybWF0XHJcbiAgICAgICAgdGhpcy5kaWFsb2dEaXNwbGF5ID0gY29uZmlnLmRpYWxvZ0Rpc3BsYXlcclxuXHJcbiAgICAgICAgdGhpcy5pZ25vcmVkRWxlbWVudHMgPSBbXHJcbiAgICAgICAgICAgIC4uLmNvbmZpZy5pZ25vcmVkRWxlbWVudHMgPz8gW10sXHJcbiAgICAgICAgICAgIHRoaXMuZWxSZWYgJiYgdGhpcy5lbFJlZi5uYXRpdmVFbGVtZW50LFxyXG4gICAgICAgICAgICBjb25maWcuZWxlbWVudFJlZiAmJiBjb25maWcuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50XHJcbiAgICAgICAgXS5maWx0ZXIoZSA9PiAhIWUpXHJcblxyXG4gICAgICAgIHRoaXMuc2F2ZUNsaWNrT3V0c2lkZSA9IGNvbmZpZy5zYXZlQ2xpY2tPdXRzaWRlXHJcbiAgICAgICAgdGhpcy5jbG9zZUNsaWNrT3V0c2lkZSA9IGNvbmZpZy5jbG9zZUNsaWNrT3V0c2lkZVxyXG5cclxuICAgICAgICB0aGlzLndpZHRoID0gc2l6ZVRvU3RyaW5nKGNvbmZpZy53aWR0aClcclxuICAgICAgICB0aGlzLmhlaWdodCA9IHNpemVUb1N0cmluZyhjb25maWcuaGVpZ2h0KVxyXG5cclxuICAgICAgICB0aGlzLm9rQnV0dG9uID0gY29uZmlnLm9rQnV0dG9uXHJcblxyXG4gICAgICAgIHRoaXMuY2FuY2VsQnV0dG9uID0gY29uZmlnLmNhbmNlbEJ1dHRvblxyXG5cclxuICAgICAgICB0aGlzLmZhbGxiYWNrQ29sb3IgPSBjb25maWcuZmFsbGJhY2tDb2xvciB8fCAnI2ZmZidcclxuXHJcbiAgICAgICAgdGhpcy5zZXRQcmVzZXRDb25maWcoY29uZmlnLnByZXNldExhYmVsLCBjb25maWcucHJlc2V0Q29sb3JzKVxyXG5cclxuICAgICAgICB0aGlzLm1heFByZXNldENvbG9ycyA9IGNvbmZpZy5tYXhQcmVzZXRDb2xvcnNcclxuXHJcbiAgICAgICAgdGhpcy5wcmVzZXRDb2xvcnNFZGl0YWJsZSA9IGNvbmZpZy5wcmVzZXRDb2xvcnNFZGl0YWJsZVxyXG5cclxuICAgICAgICBpZiAoY29uZmlnLm91dHB1dEZvcm1hdCA9PSBPdXRwdXRGb3JtYXRFbnVtLmhleCAmJlxyXG4gICAgICAgICAgICBjb25maWcuYWxwaGFDaGFubmVsICE9IEFscGhhQ2hhbm5lbEVudW0uYWx3YXlzICYmIGNvbmZpZy5hbHBoYUNoYW5uZWwgIT0gQWxwaGFDaGFubmVsRW51bS5mb3JjZWQpIHtcclxuICAgICAgICAgICAgdGhpcy5hbHBoYUNoYW5uZWwgPSBBbHBoYUNoYW5uZWxFbnVtLmRpc2FibGVkXHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHNldEluaXRpYWxDb2xvcihjb2xvcjogc3RyaW5nKSB7XHJcbiAgICAgICAgdGhpcy5pbml0aWFsQ29sb3IgPSBjb2xvclxyXG4gICAgICAgIHRoaXMuc2V0Q29sb3JGcm9tU3RyaW5nKHRoaXMuaW5pdGlhbENvbG9yLCBmYWxzZSwgdHJ1ZSlcclxuICAgIH1cclxuXHJcbiAgICBzZXRQcmVzZXRDb25maWcocHJlc2V0TGFiZWw6IGJvb2xlYW4gfCBzdHJpbmcsIHByZXNldENvbG9ycz86IHN0cmluZ1tdKSB7XHJcbiAgICAgICAgdGhpcy5wcmVzZXRMYWJlbCA9IHByZXNldExhYmVsXHJcbiAgICAgICAgdGhpcy5wcmVzZXRDb2xvcnMgPSBwcmVzZXRDb2xvcnNcclxuICAgIH1cclxuXHJcbiAgICBzZXRDb2xvckZyb21TdHJpbmcodmFsdWU6IHN0cmluZywgZW1pdDogYm9vbGVhbiA9IHRydWUsIHVwZGF0ZTogYm9vbGVhbiA9IHRydWUpIHtcclxuICAgICAgICBsZXQgaHN2YSA9IHN0cmluZ1RvSHN2YSh2YWx1ZSwgdHJ1ZSlcclxuICAgICAgICBsZXQgY215ayA9IHN0cmluZ1RvQ215ayh2YWx1ZSwgdHJ1ZSlcclxuXHJcbiAgICAgICAgaWYgKCghaHN2YSAmJiAhdGhpcy5oc3ZhKSAmJiAoIWNteWsgJiYgIXRoaXMuY215aykpIHtcclxuICAgICAgICAgICAgaHN2YSA9IHN0cmluZ1RvSHN2YSh0aGlzLmZhbGxiYWNrQ29sb3IsIHRydWUpXHJcbiAgICAgICAgICAgIGNteWsgPSBzdHJpbmdUb0NteWsodGhpcy5mYWxsYmFja0NvbG9yLCB0cnVlKVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKGhzdmEgfHwgY215aykge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5hbHBoYUNoYW5uZWwgPT0gQWxwaGFDaGFubmVsRW51bS5kaXNhYmxlZCkge1xyXG4gICAgICAgICAgICAgICAgaWYgKGhzdmEpXHJcbiAgICAgICAgICAgICAgICAgICAgaHN2YS5hID0gMVxyXG4gICAgICAgICAgICAgICAgaWYgKGNteWspXHJcbiAgICAgICAgICAgICAgICAgICAgY215ay5hID0gMVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB0aGlzLmhzdmEgPSBoc3ZhXHJcbiAgICAgICAgICAgIHRoaXMuY215ayA9IGNteWtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuc2xpZGVySCA9IHRoaXMuaHN2YT8uaFxyXG5cclxuICAgICAgICAgICAgdGhpcy51cGRhdGVDb2xvclBpY2tlcihlbWl0LCB1cGRhdGUsIChjbXlrICYmIHRoaXMuY215a0VuYWJsZWQpKVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBzdHJpbmdUb1JnYmEodmFsdWU6IHN0cmluZykge1xyXG4gICAgICAgIGNvbnN0IGhzdmEgPSBzdHJpbmdUb0hzdmEodmFsdWUsIHRydWUpXHJcbiAgICAgICAgaWYgKGhzdmEpXHJcbiAgICAgICAgICAgIHJldHVybiBmb3JtYXRPdXRwdXQoaHN2YSwgT3V0cHV0Rm9ybWF0RW51bS5yZ2JhLCBBbHBoYUNoYW5uZWxFbnVtLmVuYWJsZWQpXHJcblxyXG4gICAgICAgIHJldHVybiB1bmRlZmluZWRcclxuICAgIH1cclxuXHJcbiAgICBvbkRyYWdFbmQoc2xpZGVyOiBzdHJpbmcpIHtcclxuICAgICAgICBpZiAodGhpcy5jYWxsYmFja3MpIHtcclxuICAgICAgICAgICAgdGhpcy5jYWxsYmFja3Muc2xpZGVyRHJhZ0VuZCh7IHNsaWRlciwgY29sb3I6IHRoaXMub3V0cHV0Q29sb3IgfSlcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgb25EcmFnU3RhcnQoc2xpZGVyOiBzdHJpbmcpIHtcclxuICAgICAgICBpZiAodGhpcy5jYWxsYmFja3MpIHtcclxuICAgICAgICAgICAgdGhpcy5jYWxsYmFja3Muc2xpZGVyRHJhZ1N0YXJ0KHsgc2xpZGVyLCBjb2xvcjogdGhpcy5vdXRwdXRDb2xvciB9KVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBvbkZvcm1hdFRvZ2dsZShjaGFuZ2U6IG51bWJlcikge1xyXG4gICAgICAgIGNvbnN0IGF2YWlsYWJsZUZvcm1hdHMgPSB0aGlzLmRpYWxvZ0lucHV0RmllbGRzLmxlbmd0aCAtICh0aGlzLmNteWtFbmFibGVkID8gMCA6IDEpXHJcblxyXG4gICAgICAgIGNvbnN0IG5leHRGb3JtYXQgPSAoKCh0aGlzLmRpYWxvZ0lucHV0RmllbGRzLmluZGV4T2YodGhpcy5mb3JtYXQpICsgY2hhbmdlKSAlXHJcbiAgICAgICAgICAgIGF2YWlsYWJsZUZvcm1hdHMpICsgYXZhaWxhYmxlRm9ybWF0cykgJSBhdmFpbGFibGVGb3JtYXRzXHJcblxyXG4gICAgICAgIHRoaXMuZm9ybWF0ID0gdGhpcy5kaWFsb2dJbnB1dEZpZWxkc1tuZXh0Rm9ybWF0XVxyXG4gICAgfVxyXG5cclxuICAgIG9uQ29sb3JDaGFuZ2UodmFsdWU6IEN1cnNvckV2ZW50KSB7XHJcbiAgICAgICAgaWYgKCdyZ1gnIGluIHZhbHVlICYmICdyZ1knIGluIHZhbHVlKSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmhzdmEpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuaHN2YS5zID0gdmFsdWUucyAvIHZhbHVlLnJnWFxyXG4gICAgICAgICAgICAgICAgdGhpcy5oc3ZhLnYgPSB2YWx1ZS52IC8gdmFsdWUucmdZXHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHRoaXMudXBkYXRlQ29sb3JQaWNrZXIoKVxyXG5cclxuICAgICAgICAgICAgaWYgKHRoaXMuY2FsbGJhY2tzKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNhbGxiYWNrcy5zbGlkZXJDaGFuZ2VkKHtcclxuICAgICAgICAgICAgICAgICAgICBzbGlkZXI6ICdsaWdodG5lc3MnLFxyXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOiB0aGlzLmhzdmE/LnYsXHJcbiAgICAgICAgICAgICAgICAgICAgY29sb3I6IHRoaXMub3V0cHV0Q29sb3JcclxuICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmICh0aGlzLmNhbGxiYWNrcykge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jYWxsYmFja3Muc2xpZGVyQ2hhbmdlZCh7XHJcbiAgICAgICAgICAgICAgICAgICAgc2xpZGVyOiAnc2F0dXJhdGlvbicsXHJcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHRoaXMuaHN2YT8ucyxcclxuICAgICAgICAgICAgICAgICAgICBjb2xvcjogdGhpcy5vdXRwdXRDb2xvclxyXG4gICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBvbkh1ZUNoYW5nZSh2YWx1ZTogQ3Vyc29yRXZlbnQpIHtcclxuICAgICAgICBpZiAoJ3YnIGluIHZhbHVlICYmICdyZ1gnIGluIHZhbHVlKSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmhzdmEpXHJcbiAgICAgICAgICAgICAgICB0aGlzLmhzdmEuaCA9IHZhbHVlLnYgLyB2YWx1ZS5yZ1hcclxuICAgICAgICAgICAgdGhpcy5zbGlkZXJIID0gdGhpcy5oc3ZhPy5oXHJcblxyXG4gICAgICAgICAgICB0aGlzLnVwZGF0ZUNvbG9yUGlja2VyKClcclxuXHJcbiAgICAgICAgICAgIGlmICh0aGlzLmNhbGxiYWNrcykge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jYWxsYmFja3Muc2xpZGVyQ2hhbmdlZCh7XHJcbiAgICAgICAgICAgICAgICAgICAgc2xpZGVyOiAnaHVlJyxcclxuICAgICAgICAgICAgICAgICAgICB2YWx1ZTogdGhpcy5oc3ZhPy5oLFxyXG4gICAgICAgICAgICAgICAgICAgIGNvbG9yOiB0aGlzLm91dHB1dENvbG9yXHJcbiAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIG9uVmFsdWVDaGFuZ2UodmFsdWU6IEN1cnNvckV2ZW50KSB7XHJcbiAgICAgICAgaWYgKCd2JyBpbiB2YWx1ZSAmJiAncmdYJyBpbiB2YWx1ZSkge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5oc3ZhKVxyXG4gICAgICAgICAgICAgICAgdGhpcy5oc3ZhLnYgPSB2YWx1ZS52IC8gdmFsdWUucmdYXHJcblxyXG4gICAgICAgICAgICB0aGlzLnVwZGF0ZUNvbG9yUGlja2VyKClcclxuXHJcbiAgICAgICAgICAgIGlmICh0aGlzLmNhbGxiYWNrcykge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jYWxsYmFja3Muc2xpZGVyQ2hhbmdlZCh7XHJcbiAgICAgICAgICAgICAgICAgICAgc2xpZGVyOiAndmFsdWUnLFxyXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOiB0aGlzLmhzdmE/LnYsXHJcbiAgICAgICAgICAgICAgICAgICAgY29sb3I6IHRoaXMub3V0cHV0Q29sb3JcclxuICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgb25BbHBoYUNoYW5nZSh2YWx1ZTogQ3Vyc29yRXZlbnQpIHtcclxuICAgICAgICBpZiAoJ3YnIGluIHZhbHVlICYmICdyZ1gnIGluIHZhbHVlKSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmhzdmEpXHJcbiAgICAgICAgICAgICAgICB0aGlzLmhzdmEuYSA9IHZhbHVlLnYgLyB2YWx1ZS5yZ1hcclxuXHJcbiAgICAgICAgICAgIHRoaXMudXBkYXRlQ29sb3JQaWNrZXIoKVxyXG5cclxuICAgICAgICAgICAgaWYgKHRoaXMuY2FsbGJhY2tzKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNhbGxiYWNrcy5zbGlkZXJDaGFuZ2VkKHtcclxuICAgICAgICAgICAgICAgICAgICBzbGlkZXI6ICdhbHBoYScsXHJcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHRoaXMuaHN2YT8uYSxcclxuICAgICAgICAgICAgICAgICAgICBjb2xvcjogdGhpcy5vdXRwdXRDb2xvclxyXG4gICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBvbkhleElucHV0KHZhbHVlPzogVGV4dEV2ZW50KSB7XHJcbiAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PSAnc3RyaW5nJykge1xyXG4gICAgICAgICAgICBpZiAodmFsdWUgJiYgdmFsdWVbMF0gIT0gJyMnKSB7XHJcbiAgICAgICAgICAgICAgICB2YWx1ZSA9ICcjJyArIHZhbHVlXHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGNvbnN0IHZhbGlkSGV4ID0gL14jKFthLWYwLTldezN9fFthLWYwLTldezZ9fFthLWYwLTldezh9KSQvZ2lcclxuXHJcbiAgICAgICAgICAgIGNvbnN0IHZhbGlkID0gdmFsaWRIZXgudGVzdCh2YWx1ZSlcclxuXHJcbiAgICAgICAgICAgIGlmICh2YWxpZCkge1xyXG4gICAgICAgICAgICAgICAgLy8gU2hvcnQgaGV4XHJcbiAgICAgICAgICAgICAgICBpZiAodmFsdWUubGVuZ3RoID09IDQpIHtcclxuICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9ICcjJyArIHZhbHVlLnN1YnN0cmluZygxKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAuc3BsaXQoJycpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC5tYXAoYyA9PiBjICsgYylcclxuICAgICAgICAgICAgICAgICAgICAgICAgLmpvaW4oJycpXHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgLy8gSGV4IHdpdGhvdXQgYWxwaGFcclxuICAgICAgICAgICAgICAgIGlmICh2YWx1ZS5sZW5ndGggPT0gNyAmJiB0aGlzLmFscGhhQ2hhbm5lbCA9PSBBbHBoYUNoYW5uZWxFbnVtLmZvcmNlZCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlICs9ICgodGhpcy5oc3ZhPy5hIHx8IDApICogMjU1KS50b1N0cmluZygxNilcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldENvbG9yRnJvbVN0cmluZyh2YWx1ZSwgdHJ1ZSwgZmFsc2UpXHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmICh0aGlzLmNhbGxiYWNrcykge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jYWxsYmFja3MuaW5wdXRDaGFuZ2VkKHtcclxuICAgICAgICAgICAgICAgICAgICBpbnB1dDogJ2hleCcsXHJcbiAgICAgICAgICAgICAgICAgICAgdmFsaWQsXHJcbiAgICAgICAgICAgICAgICAgICAgdmFsdWUsXHJcbiAgICAgICAgICAgICAgICAgICAgY29sb3I6IHRoaXMub3V0cHV0Q29sb3JcclxuICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLnVwZGF0ZUNvbG9yUGlja2VyKClcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgb25SZWRJbnB1dCh2YWx1ZTogVGV4dEV2ZW50KSB7XHJcbiAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSAhPSAnc3RyaW5nJykge1xyXG4gICAgICAgICAgICBjb25zdCByZ2JhID0gdGhpcy5oc3ZhID8gaHN2YVRvUmdiYSh0aGlzLmhzdmEpIDogbmV3IFJnYmEoMCwgMCwgMCwgMCwgdHJ1ZSlcclxuXHJcbiAgICAgICAgICAgIGNvbnN0IHZhbGlkID0gIWlzTmFOKHZhbHVlLnYpICYmIHZhbHVlLnYgPj0gMCAmJiB2YWx1ZS52IDw9IHZhbHVlLnJnXHJcblxyXG4gICAgICAgICAgICBpZiAodmFsaWQpIHtcclxuICAgICAgICAgICAgICAgIHJnYmEuciA9IHZhbHVlLnYgLyB2YWx1ZS5yZ1xyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMuaHN2YSA9IHJnYmFUb0hzdmEocmdiYSlcclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLnNsaWRlckggPSB0aGlzLmhzdmEuaFxyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlQ29sb3JQaWNrZXIoKVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAodGhpcy5jYWxsYmFja3MpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuY2FsbGJhY2tzLmlucHV0Q2hhbmdlZCh7XHJcbiAgICAgICAgICAgICAgICAgICAgaW5wdXQ6ICdyZWQnLFxyXG4gICAgICAgICAgICAgICAgICAgIHZhbGlkLFxyXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOiByZ2JhLnIsXHJcbiAgICAgICAgICAgICAgICAgICAgY29sb3I6IHRoaXMub3V0cHV0Q29sb3JcclxuICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgb25CbHVlSW5wdXQodmFsdWU6IFRleHRFdmVudCkge1xyXG4gICAgICAgIGlmICh0eXBlb2YgdmFsdWUgIT0gJ3N0cmluZycpIHtcclxuICAgICAgICAgICAgY29uc3QgcmdiYSA9IHRoaXMuaHN2YSA/IGhzdmFUb1JnYmEodGhpcy5oc3ZhKSA6IG5ldyBSZ2JhKDAsIDAsIDAsIDAsIHRydWUpXHJcblxyXG4gICAgICAgICAgICBjb25zdCB2YWxpZCA9ICFpc05hTih2YWx1ZS52KSAmJiB2YWx1ZS52ID49IDAgJiYgdmFsdWUudiA8PSB2YWx1ZS5yZ1xyXG5cclxuICAgICAgICAgICAgaWYgKHZhbGlkKSB7XHJcbiAgICAgICAgICAgICAgICByZ2JhLmIgPSB2YWx1ZS52IC8gdmFsdWUucmdcclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLmhzdmEgPSByZ2JhVG9Ic3ZhKHJnYmEpXHJcblxyXG4gICAgICAgICAgICAgICAgdGhpcy5zbGlkZXJIID0gdGhpcy5oc3ZhLmhcclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZUNvbG9yUGlja2VyKClcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKHRoaXMuY2FsbGJhY2tzKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNhbGxiYWNrcy5pbnB1dENoYW5nZWQoe1xyXG4gICAgICAgICAgICAgICAgICAgIGlucHV0OiAnYmx1ZScsXHJcbiAgICAgICAgICAgICAgICAgICAgdmFsaWQsXHJcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHJnYmEuYixcclxuICAgICAgICAgICAgICAgICAgICBjb2xvcjogdGhpcy5vdXRwdXRDb2xvclxyXG4gICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBvbkdyZWVuSW5wdXQodmFsdWU6IFRleHRFdmVudCkge1xyXG4gICAgICAgIGlmICh0eXBlb2YgdmFsdWUgIT0gJ3N0cmluZycpIHtcclxuICAgICAgICAgICAgY29uc3QgcmdiYSA9IHRoaXMuaHN2YSA/IGhzdmFUb1JnYmEodGhpcy5oc3ZhKSA6IG5ldyBSZ2JhKDAsIDAsIDAsIDAsIHRydWUpXHJcblxyXG4gICAgICAgICAgICBjb25zdCB2YWxpZCA9ICFpc05hTih2YWx1ZS52KSAmJiB2YWx1ZS52ID49IDAgJiYgdmFsdWUudiA8PSB2YWx1ZS5yZ1xyXG5cclxuICAgICAgICAgICAgaWYgKHZhbGlkKSB7XHJcbiAgICAgICAgICAgICAgICByZ2JhLmcgPSB2YWx1ZS52IC8gdmFsdWUucmdcclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLmhzdmEgPSByZ2JhVG9Ic3ZhKHJnYmEpXHJcblxyXG4gICAgICAgICAgICAgICAgdGhpcy5zbGlkZXJIID0gdGhpcy5oc3ZhLmhcclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZUNvbG9yUGlja2VyKClcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKHRoaXMuY2FsbGJhY2tzKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNhbGxiYWNrcy5pbnB1dENoYW5nZWQoe1xyXG4gICAgICAgICAgICAgICAgICAgIGlucHV0OiAnZ3JlZW4nLFxyXG4gICAgICAgICAgICAgICAgICAgIHZhbGlkLFxyXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOiByZ2JhLmcsXHJcbiAgICAgICAgICAgICAgICAgICAgY29sb3I6IHRoaXMub3V0cHV0Q29sb3JcclxuICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgb25IdWVJbnB1dCh2YWx1ZTogVGV4dEV2ZW50KSB7XHJcbiAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSAhPSAnc3RyaW5nJykge1xyXG4gICAgICAgICAgICBjb25zdCB2YWxpZCA9ICFpc05hTih2YWx1ZS52KSAmJiB2YWx1ZS52ID49IDAgJiYgdmFsdWUudiA8PSB2YWx1ZS5yZ1xyXG5cclxuICAgICAgICAgICAgdGhpcy5oc3ZhID0gdGhpcy5oc3ZhIHx8IG5ldyBIc3ZhKDAsIDAsIDAsIDAsIHRydWUpXHJcblxyXG4gICAgICAgICAgICBpZiAodmFsaWQpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuaHN2YS5oID0gdmFsdWUudiAvIHZhbHVlLnJnXHJcblxyXG4gICAgICAgICAgICAgICAgdGhpcy5zbGlkZXJIID0gdGhpcy5oc3ZhLmhcclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZUNvbG9yUGlja2VyKClcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKHRoaXMuY2FsbGJhY2tzKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNhbGxiYWNrcy5pbnB1dENoYW5nZWQoe1xyXG4gICAgICAgICAgICAgICAgICAgIGlucHV0OiAnaHVlJyxcclxuICAgICAgICAgICAgICAgICAgICB2YWxpZCxcclxuICAgICAgICAgICAgICAgICAgICB2YWx1ZTogdGhpcy5oc3ZhLmgsXHJcbiAgICAgICAgICAgICAgICAgICAgY29sb3I6IHRoaXMub3V0cHV0Q29sb3JcclxuICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgb25WYWx1ZUlucHV0KHZhbHVlOiBUZXh0RXZlbnQpIHtcclxuICAgICAgICBpZiAodHlwZW9mIHZhbHVlICE9ICdzdHJpbmcnKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHZhbGlkID0gIWlzTmFOKHZhbHVlLnYpICYmIHZhbHVlLnYgPj0gMCAmJiB2YWx1ZS52IDw9IHZhbHVlLnJnXHJcblxyXG4gICAgICAgICAgICB0aGlzLmhzdmEgPSB0aGlzLmhzdmEgfHwgbmV3IEhzdmEoMCwgMCwgMCwgMCwgdHJ1ZSlcclxuXHJcbiAgICAgICAgICAgIGlmICh2YWxpZCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5oc3ZhLnYgPSB2YWx1ZS52IC8gdmFsdWUucmdcclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZUNvbG9yUGlja2VyKClcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKHRoaXMuY2FsbGJhY2tzKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNhbGxiYWNrcy5pbnB1dENoYW5nZWQoe1xyXG4gICAgICAgICAgICAgICAgICAgIGlucHV0OiAndmFsdWUnLFxyXG4gICAgICAgICAgICAgICAgICAgIHZhbGlkLFxyXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOiB0aGlzLmhzdmEudixcclxuICAgICAgICAgICAgICAgICAgICBjb2xvcjogdGhpcy5vdXRwdXRDb2xvclxyXG4gICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBvbkFscGhhSW5wdXQodmFsdWU6IFRleHRFdmVudCkge1xyXG4gICAgICAgIGlmICh0eXBlb2YgdmFsdWUgIT0gJ3N0cmluZycpIHtcclxuICAgICAgICAgICAgY29uc3QgdmFsaWQgPSAhaXNOYU4odmFsdWUudikgJiYgdmFsdWUudiA+PSAwICYmIHZhbHVlLnYgPD0gdmFsdWUucmdcclxuXHJcbiAgICAgICAgICAgIHRoaXMuaHN2YSA9IHRoaXMuaHN2YSB8fCBuZXcgSHN2YSgwLCAwLCAwLCAwLCB0cnVlKVxyXG5cclxuICAgICAgICAgICAgaWYgKHZhbGlkKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmhzdmEuYSA9IHZhbHVlLnYgLyB2YWx1ZS5yZ1xyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlQ29sb3JQaWNrZXIoKVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAodGhpcy5jYWxsYmFja3MpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuY2FsbGJhY2tzLmlucHV0Q2hhbmdlZCh7XHJcbiAgICAgICAgICAgICAgICAgICAgaW5wdXQ6ICdhbHBoYScsXHJcbiAgICAgICAgICAgICAgICAgICAgdmFsaWQsXHJcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHRoaXMuaHN2YS5hLFxyXG4gICAgICAgICAgICAgICAgICAgIGNvbG9yOiB0aGlzLm91dHB1dENvbG9yXHJcbiAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIG9uTGlnaHRuZXNzSW5wdXQodmFsdWU6IFRleHRFdmVudCkge1xyXG4gICAgICAgIGlmICh0eXBlb2YgdmFsdWUgIT0gJ3N0cmluZycpIHtcclxuICAgICAgICAgICAgY29uc3QgaHNsYSA9IHRoaXMuaHN2YSA/IGhzdmFUb0hzbGEodGhpcy5oc3ZhKSA6IG5ldyBIc2xhKDAsIDAsIDAsIDAsIHRydWUpXHJcblxyXG4gICAgICAgICAgICBjb25zdCB2YWxpZCA9ICFpc05hTih2YWx1ZS52KSAmJiB2YWx1ZS52ID49IDAgJiYgdmFsdWUudiA8PSB2YWx1ZS5yZ1xyXG5cclxuICAgICAgICAgICAgaWYgKHZhbGlkKSB7XHJcbiAgICAgICAgICAgICAgICBoc2xhLmwgPSB2YWx1ZS52IC8gdmFsdWUucmdcclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLmhzdmEgPSBoc2xhVG9Ic3ZhKGhzbGEpXHJcblxyXG4gICAgICAgICAgICAgICAgdGhpcy5zbGlkZXJIID0gdGhpcy5oc3ZhLmhcclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZUNvbG9yUGlja2VyKClcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKHRoaXMuY2FsbGJhY2tzKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNhbGxiYWNrcy5pbnB1dENoYW5nZWQoe1xyXG4gICAgICAgICAgICAgICAgICAgIGlucHV0OiAnbGlnaHRuZXNzJyxcclxuICAgICAgICAgICAgICAgICAgICB2YWxpZCxcclxuICAgICAgICAgICAgICAgICAgICB2YWx1ZTogaHNsYS5sLFxyXG4gICAgICAgICAgICAgICAgICAgIGNvbG9yOiB0aGlzLm91dHB1dENvbG9yXHJcbiAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIG9uU2F0dXJhdGlvbklucHV0KHZhbHVlOiBUZXh0RXZlbnQpIHtcclxuICAgICAgICBpZiAodHlwZW9mIHZhbHVlICE9ICdzdHJpbmcnKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGhzbGEgPSB0aGlzLmhzdmEgPyBoc3ZhVG9Ic2xhKHRoaXMuaHN2YSkgOiBuZXcgSHNsYSgwLCAwLCAwLCAwLCB0cnVlKVxyXG5cclxuICAgICAgICAgICAgY29uc3QgdmFsaWQgPSAhaXNOYU4odmFsdWUudikgJiYgdmFsdWUudiA+PSAwICYmIHZhbHVlLnYgPD0gdmFsdWUucmdcclxuXHJcbiAgICAgICAgICAgIGlmICh2YWxpZCkge1xyXG4gICAgICAgICAgICAgICAgaHNsYS5zID0gdmFsdWUudiAvIHZhbHVlLnJnXHJcblxyXG4gICAgICAgICAgICAgICAgdGhpcy5oc3ZhID0gaHNsYVRvSHN2YShoc2xhKVxyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMuc2xpZGVySCA9IHRoaXMuaHN2YS5oXHJcblxyXG4gICAgICAgICAgICAgICAgdGhpcy51cGRhdGVDb2xvclBpY2tlcigpXHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmICh0aGlzLmNhbGxiYWNrcykge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jYWxsYmFja3MuaW5wdXRDaGFuZ2VkKHtcclxuICAgICAgICAgICAgICAgICAgICBpbnB1dDogJ3NhdHVyYXRpb24nLFxyXG4gICAgICAgICAgICAgICAgICAgIHZhbGlkLFxyXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOiBoc2xhLnMsXHJcbiAgICAgICAgICAgICAgICAgICAgY29sb3I6IHRoaXMub3V0cHV0Q29sb3JcclxuICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgb25DeWFuSW5wdXQodmFsdWU6IFRleHRFdmVudCkge1xyXG4gICAgICAgIGlmICh0eXBlb2YgdmFsdWUgIT0gJ3N0cmluZycpIHtcclxuICAgICAgICAgICAgY29uc3QgdmFsaWQgPSAhaXNOYU4odmFsdWUudikgJiYgdmFsdWUudiA+PSAwICYmIHZhbHVlLnYgPD0gdmFsdWUucmdcclxuXHJcbiAgICAgICAgICAgIHRoaXMuY215ayA9IHRoaXMuY215ayB8fCBuZXcgQ215aygwLCAwLCAwLCAwLCAwLCB0cnVlKVxyXG5cclxuICAgICAgICAgICAgaWYgKHZhbGlkKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNteWsuYyA9IHZhbHVlLnYgLyB2YWx1ZS5yZ1xyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlQ29sb3JQaWNrZXIodHJ1ZSwgdHJ1ZSwgdHJ1ZSlcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKHRoaXMuY2FsbGJhY2tzKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNhbGxiYWNrcy5pbnB1dENoYW5nZWQoe1xyXG4gICAgICAgICAgICAgICAgICAgIGlucHV0OiAnY3lhbicsXHJcbiAgICAgICAgICAgICAgICAgICAgdmFsaWQ6IHRydWUsXHJcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHRoaXMuY215ay5jLFxyXG4gICAgICAgICAgICAgICAgICAgIGNvbG9yOiB0aGlzLm91dHB1dENvbG9yXHJcbiAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIG9uTWFnZW50YUlucHV0KHZhbHVlOiBUZXh0RXZlbnQpIHtcclxuICAgICAgICBpZiAodHlwZW9mIHZhbHVlICE9ICdzdHJpbmcnKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHZhbGlkID0gIWlzTmFOKHZhbHVlLnYpICYmIHZhbHVlLnYgPj0gMCAmJiB2YWx1ZS52IDw9IHZhbHVlLnJnXHJcblxyXG4gICAgICAgICAgICB0aGlzLmNteWsgPSB0aGlzLmNteWsgfHwgbmV3IENteWsoMCwgMCwgMCwgMCwgMCwgdHJ1ZSlcclxuXHJcbiAgICAgICAgICAgIGlmICh2YWxpZCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jbXlrLm0gPSB2YWx1ZS52IC8gdmFsdWUucmdcclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZUNvbG9yUGlja2VyKHRydWUsIHRydWUsIHRydWUpXHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmICh0aGlzLmNhbGxiYWNrcykge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jYWxsYmFja3MuaW5wdXRDaGFuZ2VkKHtcclxuICAgICAgICAgICAgICAgICAgICBpbnB1dDogJ21hZ2VudGEnLFxyXG4gICAgICAgICAgICAgICAgICAgIHZhbGlkOiB0cnVlLFxyXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOiB0aGlzLmNteWsubSxcclxuICAgICAgICAgICAgICAgICAgICBjb2xvcjogdGhpcy5vdXRwdXRDb2xvclxyXG4gICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBvblllbGxvd0lucHV0KHZhbHVlOiBUZXh0RXZlbnQpIHtcclxuICAgICAgICBpZiAodHlwZW9mIHZhbHVlICE9ICdzdHJpbmcnKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHZhbGlkID0gIWlzTmFOKHZhbHVlLnYpICYmIHZhbHVlLnYgPj0gMCAmJiB2YWx1ZS52IDw9IHZhbHVlLnJnXHJcblxyXG4gICAgICAgICAgICB0aGlzLmNteWsgPSB0aGlzLmNteWsgfHwgbmV3IENteWsoMCwgMCwgMCwgMCwgMCwgdHJ1ZSlcclxuXHJcbiAgICAgICAgICAgIGlmICh2YWxpZCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jbXlrLnkgPSB2YWx1ZS52IC8gdmFsdWUucmdcclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZUNvbG9yUGlja2VyKHRydWUsIHRydWUsIHRydWUpXHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmICh0aGlzLmNhbGxiYWNrcykge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jYWxsYmFja3MuaW5wdXRDaGFuZ2VkKHtcclxuICAgICAgICAgICAgICAgICAgICBpbnB1dDogJ3llbGxvdycsXHJcbiAgICAgICAgICAgICAgICAgICAgdmFsaWQ6IHRydWUsXHJcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHRoaXMuY215ay55LFxyXG4gICAgICAgICAgICAgICAgICAgIGNvbG9yOiB0aGlzLm91dHB1dENvbG9yXHJcbiAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIG9uQmxhY2tJbnB1dCh2YWx1ZTogVGV4dEV2ZW50KSB7XHJcbiAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSAhPSAnc3RyaW5nJykge1xyXG4gICAgICAgICAgICBjb25zdCB2YWxpZCA9ICFpc05hTih2YWx1ZS52KSAmJiB2YWx1ZS52ID49IDAgJiYgdmFsdWUudiA8PSB2YWx1ZS5yZ1xyXG5cclxuICAgICAgICAgICAgdGhpcy5jbXlrID0gdGhpcy5jbXlrIHx8IG5ldyBDbXlrKDAsIDAsIDAsIDAsIDAsIHRydWUpXHJcblxyXG4gICAgICAgICAgICBpZiAodmFsaWQpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuY215ay5rID0gdmFsdWUudiAvIHZhbHVlLnJnXHJcblxyXG4gICAgICAgICAgICAgICAgdGhpcy51cGRhdGVDb2xvclBpY2tlcih0cnVlLCB0cnVlLCB0cnVlKVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAodGhpcy5jYWxsYmFja3MpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuY2FsbGJhY2tzLmlucHV0Q2hhbmdlZCh7XHJcbiAgICAgICAgICAgICAgICAgICAgaW5wdXQ6ICdibGFjaycsXHJcbiAgICAgICAgICAgICAgICAgICAgdmFsaWQ6IHRydWUsXHJcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHRoaXMuY215ay5rLFxyXG4gICAgICAgICAgICAgICAgICAgIGNvbG9yOiB0aGlzLm91dHB1dENvbG9yXHJcbiAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIG9uQWRkUHJlc2V0Q29sb3IodmFsdWU6IHN0cmluZykge1xyXG4gICAgICAgIGlmICghdGhpcy5wcmVzZXRDb2xvcnM/LmZpbHRlcigoY29sb3IpID0+IChjb2xvciA9PSB2YWx1ZSkpLmxlbmd0aCkge1xyXG4gICAgICAgICAgICB0aGlzLnByZXNldENvbG9ycyA9IHRoaXMucHJlc2V0Q29sb3JzPy5jb25jYXQodmFsdWUpXHJcblxyXG4gICAgICAgICAgICBpZiAodGhpcy5jYWxsYmFja3MpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuY2FsbGJhY2tzLnByZXNldENvbG9yc0NoYW5nZWQodGhpcy5wcmVzZXRDb2xvcnMpXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgb25SZW1vdmVQcmVzZXRDb2xvcih2YWx1ZTogc3RyaW5nKSB7XHJcbiAgICAgICAgdGhpcy5wcmVzZXRDb2xvcnMgPSB0aGlzLnByZXNldENvbG9ycz8uZmlsdGVyKChjb2xvcikgPT4gKGNvbG9yICE9IHZhbHVlKSlcclxuXHJcbiAgICAgICAgaWYgKHRoaXMuY2FsbGJhY2tzKSB7XHJcbiAgICAgICAgICAgIHRoaXMuY2FsbGJhY2tzLnByZXNldENvbG9yc0NoYW5nZWQodGhpcy5wcmVzZXRDb2xvcnMpXHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8vIFByaXZhdGUgaGVscGVyIGZ1bmN0aW9ucyBmb3IgdGhlIGNvbG9yIHBpY2tlciBkaWFsb2cgc3RhdHVzXHJcblxyXG4gICAgcHJpdmF0ZSBvcGVuQ29sb3JQaWNrZXIoKSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLnNob3cpIHtcclxuICAgICAgICAgICAgdGhpcy5zaG93ID0gdHJ1ZVxyXG5cclxuICAgICAgICAgICAgaWYgKHRoaXMuY2FsbGJhY2tzKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNhbGxiYWNrcy5zdGF0ZUNoYW5nZWQodHJ1ZSlcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGNsb3NlQ29sb3JQaWNrZXIoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuc2hvdykge1xyXG4gICAgICAgICAgICB0aGlzLnNob3cgPSBmYWxzZVxyXG5cclxuICAgICAgICAgICAgaWYgKHRoaXMuY2FsbGJhY2tzKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNhbGxiYWNrcy5zdGF0ZUNoYW5nZWQoZmFsc2UpXHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIC8vQHRzLWlnbm9yZVxyXG4gICAgICAgICAgICBpZiAoIXRoaXMuY2RSZWZbJ2Rlc3Ryb3llZCddKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNkUmVmLmRldGVjdENoYW5nZXMoKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgdXBkYXRlQ29sb3JQaWNrZXIoZW1pdDogYm9vbGVhbiA9IHRydWUsIHVwZGF0ZTogYm9vbGVhbiA9IHRydWUsIGNteWtJbnB1dDogYm9vbGVhbiA9IGZhbHNlKSB7XHJcbiAgICAgICAgdGhpcy5oc3ZhID0gdGhpcy5oc3ZhIHx8IG5ldyBIc3ZhKDAsIDAsIDAsIDAsIHRydWUpXHJcbiAgICAgICAgdGhpcy5jbXlrID0gdGhpcy5jbXlrIHx8IG5ldyBDbXlrKDAsIDAsIDAsIDAsIDAsIHRydWUpXHJcblxyXG4gICAgICAgIGlmICh0aGlzLm1vZGUgPT0gQ29sb3JNb2RlSW50ZXJuYWwuZ3JheXNjYWxlKSB7XHJcbiAgICAgICAgICAgIHRoaXMuaHN2YS5zID0gMFxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29uc3QgbGFzdE91dHB1dCA9IHRoaXMub3V0cHV0Q29sb3JcclxuXHJcbiAgICAgICAgY29uc3QgaHNsYSA9IGhzdmFUb0hzbGEodGhpcy5oc3ZhKVxyXG5cclxuICAgICAgICBpZiAodGhpcy5jbXlrRW5hYmxlZCkge1xyXG4gICAgICAgICAgICBpZiAoIWNteWtJbnB1dCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jbXlrID0gcmdiYVRvQ215ayhoc3ZhVG9SZ2JhKHRoaXMuaHN2YSkpXHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmhzdmEgPSByZ2JhVG9Ic3ZhKGNteWtUb1JnYih0aGlzLmNteWspKVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB0aGlzLnNsaWRlckggPSB0aGlzLmhzdmEuaFxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29uc3QgaHVlID0gbmV3IEhzdmEodGhpcy5zbGlkZXJIIHx8IHRoaXMuaHN2YS5oLCAxLCAxLCAxLCB0cnVlKVxyXG5cclxuICAgICAgICBjb25zdCByZ2JhID0gaHN2YVRvUmdiYSh0aGlzLmhzdmEpXHJcblxyXG4gICAgICAgIGlmICh1cGRhdGUpIHtcclxuICAgICAgICAgICAgdGhpcy5oc2xhVGV4dCA9IGRlbm9ybWFsaXplSFNMQShoc2xhKVxyXG4gICAgICAgICAgICB0aGlzLnJnYmFUZXh0ID0gZGVub3JtYWxpemVSR0JBKHJnYmEpXHJcblxyXG4gICAgICAgICAgICBpZiAodGhpcy5jbXlrRW5hYmxlZCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jbXlrVGV4dCA9IGRlbm9ybWFsaXplQ01ZSyh0aGlzLmNteWspXHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGNvbnN0IGFsbG93SGV4OCA9IHRoaXMuYWxwaGFDaGFubmVsID09PSBBbHBoYUNoYW5uZWxFbnVtLmFsd2F5c1xyXG5cclxuICAgICAgICAgICAgdGhpcy5oZXhUZXh0ID0gcmdiYVRvSGV4KHJnYmEsIGFsbG93SGV4OClcclxuICAgICAgICAgICAgdGhpcy5oZXhBbHBoYSA9IHRoaXMucmdiYVRleHQuYVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHRoaXMub3V0cHV0Rm9ybWF0ID09IE91dHB1dEZvcm1hdEVudW0uYXV0byAmJiB0aGlzLmhzdmEuYSA8IDEgJiYgIUFscGhhRW5hYmxlZEZvcm1hdHMuaGFzKHRoaXMuZm9ybWF0KSkge1xyXG4gICAgICAgICAgICB0aGlzLmZvcm1hdCA9IHRoaXMuaHN2YS5hIDwgMSA/IENvbG9yRm9ybWF0RW51bS5yZ2JhIDogQ29sb3JGb3JtYXRFbnVtLmhleFxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29uc3QgaHN2YVRyYW5zcGFyZW50ID0gbmV3IEhzdmEoXHJcbiAgICAgICAgICAgIHRoaXMuaHN2YS5oLFxyXG4gICAgICAgICAgICB0aGlzLmhzdmEucyxcclxuICAgICAgICAgICAgdGhpcy5oc3ZhLnYsXHJcbiAgICAgICAgICAgIDAsXHJcbiAgICAgICAgICAgIHRoaXMuaHN2YS5ub3JtYWxpemVkXHJcbiAgICAgICAgKVxyXG5cclxuICAgICAgICBjb25zdCBoc3ZhRnVsbCA9IG5ldyBIc3ZhKFxyXG4gICAgICAgICAgICB0aGlzLmhzdmEuaCxcclxuICAgICAgICAgICAgdGhpcy5oc3ZhLnMsXHJcbiAgICAgICAgICAgIHRoaXMuaHN2YS52LFxyXG4gICAgICAgICAgICAxLFxyXG4gICAgICAgICAgICB0aGlzLmhzdmEubm9ybWFsaXplZFxyXG4gICAgICAgIClcclxuXHJcbiAgICAgICAgdGhpcy5odWVTbGlkZXJDb2xvciA9IGZvcm1hdE91dHB1dChodWUsICdhdXRvJywgJ2Rpc2FibGVkJylcclxuICAgICAgICB0aGlzLmFscGhhU2xpZGVyQ29sb3IgPSAnbGluZWFyLWdyYWRpZW50KHRvIHJpZ2h0LCAnICsgZm9ybWF0T3V0cHV0KGhzdmFUcmFuc3BhcmVudCwgJ2F1dG8nLCAnZm9yY2VkJykgKyAnIDAlLCAnICsgZm9ybWF0T3V0cHV0KGhzdmFGdWxsLCAnYXV0bycsICdkaXNhYmxlZCcpICsgJyAxMDAlKSdcclxuXHJcbiAgICAgICAgdGhpcy5zdlNsaWRlckxpZ2h0ID0gb3BhcXVlU2xpZGVyTGlnaHQocmdiYSlcclxuICAgICAgICB0aGlzLmh1ZVNsaWRlckxpZ2h0ID0gb3BhcXVlU2xpZGVyTGlnaHQoaHN2YVRvUmdiYShodWUpKVxyXG4gICAgICAgIHRoaXMudmFsdWVTbGlkZXJMaWdodCA9IG9wYXF1ZVNsaWRlckxpZ2h0KHJnYmEpXHJcbiAgICAgICAgdGhpcy5hbHBoYVNsaWRlckxpZ2h0ID0gdHJhbnNwYXJlbnRTbGlkZXJMaWdodChyZ2JhKVxyXG5cclxuICAgICAgICB0aGlzLm91dHB1dENvbG9yID0gZm9ybWF0T3V0cHV0KHRoaXMuaHN2YSwgdGhpcy5vdXRwdXRGb3JtYXQsIHRoaXMuYWxwaGFDaGFubmVsKVxyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRDb2xvciA9IGZvcm1hdE91dHB1dCh0aGlzLmhzdmEsIE91dHB1dEZvcm1hdEVudW0ucmdiYSlcclxuXHJcbiAgICAgICAgaWYgKHRoaXMuZm9ybWF0ICE9PSBDb2xvckZvcm1hdEVudW0uY215aykge1xyXG4gICAgICAgICAgICB0aGlzLmNteWtDb2xvciA9ICcnXHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5jbXlrQ29sb3IgPSBmb3JtYXRDbXlrKHRoaXMuY215aywgdGhpcy5hbHBoYUNoYW5uZWwpXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnNsaWRlciA9IG5ldyBTbGlkZXJQb3NpdGlvbihcclxuICAgICAgICAgICAgKHRoaXMuc2xpZGVySCB8fCB0aGlzLmhzdmEuaCksXHJcbiAgICAgICAgICAgIHRoaXMuaHN2YS5zLFxyXG4gICAgICAgICAgICAoMSAtIHRoaXMuaHN2YS52KSxcclxuICAgICAgICAgICAgdGhpcy5oc3ZhLmFcclxuICAgICAgICApXHJcblxyXG4gICAgICAgIGlmIChlbWl0ICYmIGxhc3RPdXRwdXQgIT0gdGhpcy5vdXRwdXRDb2xvciAmJiB0aGlzLmNhbGxiYWNrcykge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5jbXlrRW5hYmxlZCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jYWxsYmFja3MuY215a0NoYW5nZWQodGhpcy5jbXlrQ29sb3IpXHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHRoaXMuY2FsbGJhY2tzLmNvbG9yQ2hhbmdlZCh0aGlzLm91dHB1dENvbG9yKVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBmaWxsKG46IG51bWJlcikge1xyXG4gICAgICAgIHJldHVybiBuZXcgQXJyYXkobikuZmlsbCgxKVxyXG4gICAgfVxyXG5cclxuICAgIGZvcm1hdEFscGhhKGE/OiBudW1iZXIpIHtcclxuICAgICAgICByZXR1cm4gYT8udG9GaXhlZCgyKS5yZXBsYWNlKC9cXC4/MCskLywgJycpXHJcbiAgICB9XHJcbn1cclxuIiwiPGRpdiBjbGFzcz1cImNvbG9yLXBpY2tlclwiXHJcbiAgICAoY2xpY2spPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCJcclxuICAgIFtuZ1N0eWxlXT1cIntcclxuICAgICAgICB2aXNpYmlsaXR5OiAhc2hvdyA/ICdoaWRkZW4nIDogJ3Zpc2libGUnLFxyXG4gICAgICAgIHdpZHRoOiB3aWR0aCB8fCAnJyxcclxuICAgICAgICBoZWlnaHQ6IGhlaWdodCB8fCAnJ1xyXG4gICAgfVwiXHJcbiAgICAqbmdJZj1cInNob3dcIj5cclxuICAgIDxkaXYgKm5nSWY9XCJkaWFsb2dEaXNwbGF5ID09ICdwb3B1cCdcIlxyXG4gICAgICAgIGNsYXNzPVwiY29sb3ItcGlja2VyX19hcnJvd1wiPjwvZGl2PlxyXG4gICAgPGRpdiAqbmdJZj1cIm1vZGUgPT0gY29sb3JNb2RlSW50ZXJuYWwuY29sb3JcIlxyXG4gICAgICAgIGNsYXNzPVwiY29sb3ItcGlja2VyX19zdlwiXHJcbiAgICAgICAgbnh0U2xpZGVyXHJcbiAgICAgICAgW3JnWF09XCIxXCJcclxuICAgICAgICBbcmdZXT1cIjFcIlxyXG4gICAgICAgIChuZXdWYWx1ZSk9XCJvbkNvbG9yQ2hhbmdlKCRldmVudClcIlxyXG4gICAgICAgIChkcmFnU3RhcnQpPVwib25EcmFnU3RhcnQoJ3NhdHVyYXRpb24tbGlnaHRuZXNzJylcIlxyXG4gICAgICAgIChkcmFnRW5kKT1cIm9uRHJhZ0VuZCgnc2F0dXJhdGlvbi1saWdodG5lc3MnKVwiXHJcbiAgICAgICAgW25nU3R5bGVdPVwieyBcclxuICAgICAgICAgICAgYmFja2dyb3VuZENvbG9yOiBodWVTbGlkZXJDb2xvciB8fCAnJ1xyXG4gICAgICAgIH1cIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29sb3ItcGlja2VyX19jdXJzb3IgY29sb3ItcGlja2VyX19jdXJzb3ItLXN2XCJcclxuICAgICAgICAgICAgW25nQ2xhc3NdPVwieyAnY29sb3ItcGlja2VyX19jdXJzb3ItLWxpZ2h0Jzogc3ZTbGlkZXJMaWdodCB9XCJcclxuICAgICAgICAgICAgW25nU3R5bGVdPVwie1xyXG4gICAgICAgICAgICAgICAgdG9wOiAoc2xpZGVyPy52IHx8IDApICogMTAwICsgJyUnLFxyXG4gICAgICAgICAgICAgICAgbGVmdDogKHNsaWRlcj8ucyB8fCAwKSAqIDEwMCArICclJ1xyXG4gICAgICAgICAgICB9XCI+PC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxkaXYgY2xhc3M9XCJjb2xvci1waWNrZXJfX2NvbnRyb2xzXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImNvbG9yLXBpY2tlcl9fc2VsZWN0ZWRcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbG9yLXBpY2tlcl9fc2VsZWN0ZWQtY29sb3JcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgW25nU3R5bGVdPVwieyBcclxuICAgICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kQ29sb3I6IHNlbGVjdGVkQ29sb3IgfHwgJydcclxuICAgICAgICAgICAgICAgIH1cIj48YnV0dG9uICpuZ0lmPVwicHJlc2V0Q29sb3JzRWRpdGFibGUgJiYgIShtYXhQcmVzZXRDb2xvcnMgJiYgKHByZXNldENvbG9ycz8ubGVuZ3RoIHx8IDApID49IG1heFByZXNldENvbG9ycylcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU9XCJBZGQgY29sb3IgdG8gcHJlc2V0XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgaTE4bi10aXRsZT1cIkBAbnh0LWNvbG9yLXBpY2tlci5idXR0b24uYWRkLWNvbG9yXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJjb2xvci1waWNrZXJfX2FkZC1zZWxlY3RlZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsgJ2NvbG9yLXBpY2tlcl9fYWRkLXNlbGVjdGVkLS1saWdodCc6IGFscGhhU2xpZGVyTGlnaHQgfVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJvbkFkZFByZXNldENvbG9yKHNlbGVjdGVkQ29sb3IpXCI+PHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoPVwiMjRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0PVwiMjRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmlld0JveD1cIjAgMCAyNCAyNFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGggZD1cIk0xOSAxM2gtNnY2aC0ydi02SDV2LTJoNlY1aDJ2Nmg2djJ6XCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNMCAwaDI0djI0SDB6XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxsPVwibm9uZVwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPjwvYnV0dG9uPjwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29sb3ItcGlja2VyX19oYXZcIj5cclxuICAgICAgICAgICAgPGRpdiAqbmdJZj1cIm1vZGUgPT0gY29sb3JNb2RlSW50ZXJuYWwuY29sb3JcIlxyXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJjb2xvci1waWNrZXJfX3NsaWRlciBjb2xvci1waWNrZXJfX3NsaWRlci0taHVlXCJcclxuICAgICAgICAgICAgICAgIG54dFNsaWRlclxyXG4gICAgICAgICAgICAgICAgW3JnWF09XCIxXCJcclxuICAgICAgICAgICAgICAgIChuZXdWYWx1ZSk9XCJvbkh1ZUNoYW5nZSgkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAgIChkcmFnU3RhcnQpPVwib25EcmFnU3RhcnQoJ2h1ZScpXCJcclxuICAgICAgICAgICAgICAgIChkcmFnRW5kKT1cIm9uRHJhZ0VuZCgnaHVlJylcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2xvci1waWNrZXJfX2N1cnNvclwiXHJcbiAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwieyAnY29sb3ItcGlja2VyX19jdXJzb3ItLWxpZ2h0JzogaHVlU2xpZGVyTGlnaHQgfVwiXHJcbiAgICAgICAgICAgICAgICAgICAgW25nU3R5bGVdPVwie1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBsZWZ0OiAoc2xpZGVyPy5oIHx8IDApICogMTAwICsgJyUnXHJcbiAgICAgICAgICAgICAgICAgICAgfVwiPjwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiAqbmdJZj1cIm1vZGUgPT0gY29sb3JNb2RlSW50ZXJuYWwuZ3JheXNjYWxlXCJcclxuICAgICAgICAgICAgICAgIGNsYXNzPVwiY29sb3ItcGlja2VyX19zbGlkZXIgY29sb3ItcGlja2VyX19zbGlkZXItLXZhbHVlXCJcclxuICAgICAgICAgICAgICAgIG54dFNsaWRlclxyXG4gICAgICAgICAgICAgICAgW3JnWF09XCIxXCJcclxuICAgICAgICAgICAgICAgIChuZXdWYWx1ZSk9XCJvblZhbHVlQ2hhbmdlKCRldmVudClcIlxyXG4gICAgICAgICAgICAgICAgKGRyYWdTdGFydCk9XCJvbkRyYWdTdGFydCgndmFsdWUnKVwiXHJcbiAgICAgICAgICAgICAgICAoZHJhZ0VuZCk9XCJvbkRyYWdFbmQoJ3ZhbHVlJylcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2xvci1waWNrZXJfX2N1cnNvclwiXHJcbiAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwieyAnY29sb3ItcGlja2VyX19jdXJzb3ItLWxpZ2h0JzogdmFsdWVTbGlkZXJMaWdodCB9XCJcclxuICAgICAgICAgICAgICAgICAgICBbbmdTdHlsZV09XCJ7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxlZnQ6ICgxIC0gKHNsaWRlcj8udiB8fCAwKSkgKiAxMDAgKyAnJSdcclxuICAgICAgICAgICAgICAgICAgICB9XCI+PC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiYWxwaGFDaGFubmVsICE9ICdkaXNhYmxlZCdcIlxyXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJjb2xvci1waWNrZXJfX3NsaWRlciBjb2xvci1waWNrZXJfX3NsaWRlci0tYWxwaGFcIlxyXG4gICAgICAgICAgICAgICAgbnh0U2xpZGVyXHJcbiAgICAgICAgICAgICAgICBbcmdYXT1cIjFcIlxyXG4gICAgICAgICAgICAgICAgKG5ld1ZhbHVlKT1cIm9uQWxwaGFDaGFuZ2UoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICAoZHJhZ1N0YXJ0KT1cIm9uRHJhZ1N0YXJ0KCdhbHBoYScpXCJcclxuICAgICAgICAgICAgICAgIChkcmFnRW5kKT1cIm9uRHJhZ0VuZCgnYWxwaGEnKVwiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbG9yLXBpY2tlcl9fc2xpZGVyLS1hbHBoYS1iZ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgW25nU3R5bGVdPVwie1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kSW1hZ2U6IGFscGhhU2xpZGVyQ29sb3IgfHwgJydcclxuICAgICAgICAgICAgICAgICAgICB9XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbG9yLXBpY2tlcl9fY3Vyc29yXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwieyAnY29sb3ItcGlja2VyX19jdXJzb3ItLWxpZ2h0JzogYWxwaGFTbGlkZXJMaWdodCB9XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW25nU3R5bGVdPVwie1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGVmdDogKHNsaWRlcj8uYSB8fCAwKSAqIDEwMCArICclJ1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XCI+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxkaXYgKm5nSWY9XCIhZGlzYWJsZUlucHV0ICYmIChtb2RlID09IGNvbG9yTW9kZUludGVybmFsLmNvbG9yIHx8IG1vZGUgPT0gY29sb3JNb2RlSW50ZXJuYWwuZ3JheXNjYWxlKVwiXHJcbiAgICAgICAgY2xhc3M9XCJjb2xvci1waWNrZXJfX2lucHV0c1wiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb2xvci1waWNrZXJfX2lucHV0LWZpZWxkc1wiPlxyXG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwibW9kZSA9PSBjb2xvck1vZGVJbnRlcm5hbC5ncmF5c2NhbGU7IGVsc2UgZm9ybWF0U3dpdGNoXCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sb3ItcGlja2VyX19pbnB1dC1maWVsZFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwibnVtYmVyXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgcGF0dGVybj1cIlswLTldKlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG1pbj1cIjBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBtYXg9XCIxMDBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBueHRUZXh0XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtyZ109XCIxMDBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbdmFsdWVdPVwiaHNsYVRleHQ/Lmw/LnRvRml4ZWQoMClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAoa2V5dXAuZW50ZXIpPVwib25BY2NlcHQoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIChuZXdWYWx1ZSk9XCJvblZhbHVlSW5wdXQoJGV2ZW50KVwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjb2xvci1waWNrZXJfX2lucHV0LWZpZWxkLWxhYmVsXCI+Vjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cImFscGhhQ2hhbm5lbCAhPSAnZGlzYWJsZWQnXCJcclxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImNvbG9yLXBpY2tlcl9faW5wdXQtZmllbGRcIj5cclxuICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cIm51bWJlclwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhdHRlcm49XCJbMC05XSsoW1xcLixdWzAtOV17MSwyfSk/XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgbWluPVwiMFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG1heD1cIjFcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBzdGVwPVwiMC4wMVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG54dFRleHRcclxuICAgICAgICAgICAgICAgICAgICAgICAgW3JnXT1cIjFcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbdmFsdWVdPVwiZm9ybWF0QWxwaGEoaHNsYVRleHQ/LmEpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgKGtleXVwLmVudGVyKT1cIm9uQWNjZXB0KCRldmVudClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAobmV3VmFsdWUpPVwib25BbHBoYUlucHV0KCRldmVudClcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY29sb3ItcGlja2VyX19pbnB1dC1maWVsZC1sYWJlbFwiPkE8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjZm9ybWF0U3dpdGNoPlxyXG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciBbbmdTd2l0Y2hdPVwiZm9ybWF0XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ2hzbGEnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2xvci1waWNrZXJfX2lucHV0LWZpZWxkXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cIm51bWJlclwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGF0dGVybj1cIlswLTldKlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWluPVwiMFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF4PVwiMzYwXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBueHRUZXh0XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3JnXT1cIjM2MFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3ZhbHVlXT1cImhzbGFUZXh0Py5oPy50b0ZpeGVkKDApXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoa2V5dXAuZW50ZXIpPVwib25BY2NlcHQoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG5ld1ZhbHVlKT1cIm9uSHVlSW5wdXQoJGV2ZW50KVwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNvbG9yLXBpY2tlcl9faW5wdXQtZmllbGQtbGFiZWxcIj5IPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbG9yLXBpY2tlcl9faW5wdXQtZmllbGRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwibnVtYmVyXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXR0ZXJuPVwiWzAtOV0qXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtaW49XCIwXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXg9XCIxMDBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG54dFRleHRcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcmddPVwiMTAwXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdmFsdWVdPVwiaHNsYVRleHQ/LnM/LnRvRml4ZWQoMClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChrZXl1cC5lbnRlcik9XCJvbkFjY2VwdCgkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobmV3VmFsdWUpPVwib25TYXR1cmF0aW9uSW5wdXQoJGV2ZW50KVwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNvbG9yLXBpY2tlcl9faW5wdXQtZmllbGQtbGFiZWxcIj5TPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbG9yLXBpY2tlcl9faW5wdXQtZmllbGRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwibnVtYmVyXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXR0ZXJuPVwiWzAtOV0qXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtaW49XCIwXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXg9XCIxMDBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG54dFRleHRcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcmddPVwiMTAwXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdmFsdWVdPVwiaHNsYVRleHQ/Lmw/LnRvRml4ZWQoMClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChrZXl1cC5lbnRlcik9XCJvbkFjY2VwdCgkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobmV3VmFsdWUpPVwib25MaWdodG5lc3NJbnB1dCgkZXZlbnQpXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY29sb3ItcGlja2VyX19pbnB1dC1maWVsZC1sYWJlbFwiPkw8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiYWxwaGFDaGFubmVsICE9ICdkaXNhYmxlZCdcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJjb2xvci1waWNrZXJfX2lucHV0LWZpZWxkXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cIm51bWJlclwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGF0dGVybj1cIlswLTldKyhbXFwuLF1bMC05XXsxLDJ9KT9cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1pbj1cIjBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1heD1cIjFcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZXA9XCIwLjAxXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBueHRUZXh0XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3JnXT1cIjFcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt2YWx1ZV09XCJmb3JtYXRBbHBoYShoc2xhVGV4dD8uYSlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChrZXl1cC5lbnRlcik9XCJvbkFjY2VwdCgkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobmV3VmFsdWUpPVwib25BbHBoYUlucHV0KCRldmVudClcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjb2xvci1waWNrZXJfX2lucHV0LWZpZWxkLWxhYmVsXCI+QTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ3JnYmEnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2xvci1waWNrZXJfX2lucHV0LWZpZWxkXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cIm51bWJlclwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGF0dGVybj1cIlswLTldKlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWluPVwiMFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF4PVwiMjU1XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBueHRUZXh0XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3JnXT1cIjI1NVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3ZhbHVlXT1cInJnYmFUZXh0Py5yPy50b0ZpeGVkKDApXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoa2V5dXAuZW50ZXIpPVwib25BY2NlcHQoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG5ld1ZhbHVlKT1cIm9uUmVkSW5wdXQoJGV2ZW50KVwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNvbG9yLXBpY2tlcl9faW5wdXQtZmllbGQtbGFiZWxcIj5SPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbG9yLXBpY2tlcl9faW5wdXQtZmllbGRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwibnVtYmVyXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXR0ZXJuPVwiWzAtOV0qXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtaW49XCIwXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXg9XCIyNTVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG54dFRleHRcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcmddPVwiMjU1XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdmFsdWVdPVwicmdiYVRleHQ/Lmc/LnRvRml4ZWQoMClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChrZXl1cC5lbnRlcik9XCJvbkFjY2VwdCgkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobmV3VmFsdWUpPVwib25HcmVlbklucHV0KCRldmVudClcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjb2xvci1waWNrZXJfX2lucHV0LWZpZWxkLWxhYmVsXCI+Rzwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2xvci1waWNrZXJfX2lucHV0LWZpZWxkXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cIm51bWJlclwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGF0dGVybj1cIlswLTldKlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWluPVwiMFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF4PVwiMjU1XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBueHRUZXh0XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3JnXT1cIjI1NVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3ZhbHVlXT1cInJnYmFUZXh0Py5iPy50b0ZpeGVkKDApXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoa2V5dXAuZW50ZXIpPVwib25BY2NlcHQoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG5ld1ZhbHVlKT1cIm9uQmx1ZUlucHV0KCRldmVudClcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjb2xvci1waWNrZXJfX2lucHV0LWZpZWxkLWxhYmVsXCI+Qjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJhbHBoYUNoYW5uZWwgIT0gJ2Rpc2FibGVkJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImNvbG9yLXBpY2tlcl9faW5wdXQtZmllbGRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwibnVtYmVyXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXR0ZXJuPVwiWzAtOV0rKFtcXC4sXVswLTldezEsMn0pP1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWluPVwiMFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF4PVwiMVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RlcD1cIjAuMDFcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG54dFRleHRcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcmddPVwiMVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3ZhbHVlXT1cImZvcm1hdEFscGhhKGhzbGFUZXh0Py5hKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGtleXVwLmVudGVyKT1cIm9uQWNjZXB0KCRldmVudClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChuZXdWYWx1ZSk9XCJvbkFscGhhSW5wdXQoJGV2ZW50KVwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNvbG9yLXBpY2tlcl9faW5wdXQtZmllbGQtbGFiZWxcIj5BPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCInY215aydcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbG9yLXBpY2tlcl9faW5wdXQtZmllbGRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwibnVtYmVyXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXR0ZXJuPVwiWzAtOV0qXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtaW49XCIwXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXg9XCIxMDBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG54dFRleHRcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcmddPVwiMTAwXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdmFsdWVdPVwiY215a1RleHQ/LmM/LnRvRml4ZWQoMClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChrZXl1cC5lbnRlcik9XCJvbkFjY2VwdCgkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobmV3VmFsdWUpPVwib25DeWFuSW5wdXQoJGV2ZW50KVwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNvbG9yLXBpY2tlcl9faW5wdXQtZmllbGQtbGFiZWxcIj5DPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbG9yLXBpY2tlcl9faW5wdXQtZmllbGRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwibnVtYmVyXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXR0ZXJuPVwiWzAtOV0qXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtaW49XCIwXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXg9XCIxMDBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG54dFRleHRcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcmddPVwiMTAwXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdmFsdWVdPVwiY215a1RleHQ/Lm0/LnRvRml4ZWQoMClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChrZXl1cC5lbnRlcik9XCJvbkFjY2VwdCgkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobmV3VmFsdWUpPVwib25NYWdlbnRhSW5wdXQoJGV2ZW50KVwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNvbG9yLXBpY2tlcl9faW5wdXQtZmllbGQtbGFiZWxcIj5NPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbG9yLXBpY2tlcl9faW5wdXQtZmllbGRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwibnVtYmVyXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXR0ZXJuPVwiWzAtOV0qXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtaW49XCIwXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXg9XCIxMDBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG54dFRleHRcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcmddPVwiMTAwXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdmFsdWVdPVwiY215a1RleHQ/Lnk/LnRvRml4ZWQoMClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChrZXl1cC5lbnRlcik9XCJvbkFjY2VwdCgkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobmV3VmFsdWUpPVwib25ZZWxsb3dJbnB1dCgkZXZlbnQpXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY29sb3ItcGlja2VyX19pbnB1dC1maWVsZC1sYWJlbFwiPlk8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sb3ItcGlja2VyX19pbnB1dC1maWVsZFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJudW1iZXJcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhdHRlcm49XCJbMC05XSpcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1pbj1cIjBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1heD1cIjEwMFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnh0VGV4dFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtyZ109XCIxMDBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt2YWx1ZV09XCJjbXlrVGV4dD8uaz8udG9GaXhlZCgwKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGtleXVwLmVudGVyKT1cIm9uQWNjZXB0KCRldmVudClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChuZXdWYWx1ZSk9XCJvbkJsYWNrSW5wdXQoJGV2ZW50KVwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNvbG9yLXBpY2tlcl9faW5wdXQtZmllbGQtbGFiZWxcIj5LPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cImFscGhhQ2hhbm5lbCAhPSAnZGlzYWJsZWQnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiY29sb3ItcGlja2VyX19pbnB1dC1maWVsZFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJudW1iZXJcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhdHRlcm49XCJbMC05XSsoW1xcLixdWzAtOV17MSwyfSk/XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtaW49XCIwXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXg9XCIxXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGVwPVwiMC4wMVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnh0VGV4dFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtyZ109XCIxXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdmFsdWVdPVwiZm9ybWF0QWxwaGEoY215a1RleHQ/LmEpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoa2V5dXAuZW50ZXIpPVwib25BY2NlcHQoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG5ld1ZhbHVlKT1cIm9uQWxwaGFJbnB1dCgkZXZlbnQpXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY29sb3ItcGlja2VyX19pbnB1dC1maWVsZC1sYWJlbFwiPkE8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoRGVmYXVsdD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbG9yLXBpY2tlcl9faW5wdXQtZmllbGRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBueHRUZXh0XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3ZhbHVlXT1cImhleFRleHRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChibHVyKT1cIm9uSGV4SW5wdXQoKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGtleXVwLmVudGVyKT1cIm9uQWNjZXB0KCRldmVudClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChuZXdWYWx1ZSk9XCJvbkhleElucHV0KCRldmVudClcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjb2xvci1waWNrZXJfX2lucHV0LWZpZWxkLWxhYmVsXCI+SGV4PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cImFscGhhQ2hhbm5lbCA9PSAnZm9yY2VkJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImNvbG9yLXBpY2tlcl9faW5wdXQtZmllbGRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwibnVtYmVyXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXR0ZXJuPVwiWzAtOV0rKFtcXC4sXVswLTldezEsMn0pP1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWluPVwiMFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF4PVwiMVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RlcD1cIjAuMDFcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG54dFRleHRcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcmddPVwiMVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3ZhbHVlXT1cImZvcm1hdEFscGhhKGhleEFscGhhKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGtleXVwLmVudGVyKT1cIm9uQWNjZXB0KCRldmVudClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChuZXdWYWx1ZSk9XCJvbkFscGhhSW5wdXQoJGV2ZW50KVwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNvbG9yLXBpY2tlcl9faW5wdXQtZmllbGQtbGFiZWxcIj5BPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXYgKm5nSWY9XCJtb2RlID09IGNvbG9yTW9kZUludGVybmFsLmNvbG9yXCJcclxuICAgICAgICAgICAgY2xhc3M9XCJjb2xvci1waWNrZXJfX2lucHV0LXR5cGVcIj5cclxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjb2xvci1waWNrZXJfX2lucHV0LXR5cGUtYXJyb3dcIlxyXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9uRm9ybWF0VG9nZ2xlKDEpXCI+PC9zcGFuPlxyXG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNvbG9yLXBpY2tlcl9faW5wdXQtdHlwZS1hcnJvd1wiXHJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwib25Gb3JtYXRUb2dnbGUoLTEpXCI+PC9zcGFuPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwicHJlc2V0Q29sb3JzPy5sZW5ndGhcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29sb3ItcGlja2VyX19zZXBhcmF0b3JcIj48L2Rpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29sb3ItcGlja2VyX19wcmVzZXRcIj5cclxuICAgICAgICAgICAgPGRpdiAqbmdJZj1cInByZXNldExhYmVsXCJcclxuICAgICAgICAgICAgICAgIGNsYXNzPVwiY29sb3ItcGlja2VyX19wcmVzZXQtbGFiZWxcIj5cclxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJwcmVzZXRMYWJlbCA9PT0gdHJ1ZTsgZWxzZSBzdHJpbmdMYWJlbFwiXHJcbiAgICAgICAgICAgICAgICAgICAgaTE4bj1cIkBAbnh0LWNvbG9yLXBpY2tlci5wcmVzZXQtY29sb3JzXCI+UHJlc2V0IGNvbG9yczwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNzdHJpbmdMYWJlbD57eyBwcmVzZXRMYWJlbCB9fTwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2ICpuZ0lmPVwicHJlc2V0Q29sb3JzPy5sZW5ndGhcIlxyXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJjb2xvci1waWNrZXJfX3ByZXNldC1pdGVtc1wiPlxyXG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgY29sb3Igb2YgcHJlc2V0Q29sb3JzXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cInN0cmluZ1RvUmdiYShjb2xvcikgYXMgcmdiYVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiY29sb3ItcGlja2VyX19wcmVzZXQtaXRlbVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFt0aXRsZV09XCJjb2xvclwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJzZXRDb2xvckZyb21TdHJpbmcoY29sb3IpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2xvci1waWNrZXJfX3ByZXNldC1pdGVtLWZpbGxcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nU3R5bGVdPVwieyBcclxuICAgICAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZENvbG9yOiByZ2JhIHx8ICcnXHJcbiAgICAgICAgICAgICAgICAgICAgfVwiPjxidXR0b24gKm5nSWY9XCJwcmVzZXRDb2xvcnNFZGl0YWJsZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU9XCJSZW1vdmUgQ29sb3JcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGkxOG4tdGl0bGU9XCJAQG54dC1jb2xvci1waWNrZXIuYnV0dG9uLnJlbW92ZS1jb2xvclwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJjb2xvci1waWNrZXJfX3JlbW92ZS1zZWxlY3RlZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9uUmVtb3ZlUHJlc2V0Q29sb3IoY29sb3IpXCI+PHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg9XCIyNFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlaWdodD1cIjI0XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmlld0JveD1cIjAgMCAyNCAyNFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPVwiTTE5IDYuNDFMMTcuNTkgNSAxMiAxMC41OSA2LjQxIDUgNSA2LjQxIDEwLjU5IDEyIDUgMTcuNTkgNi40MSAxOSAxMiAxMy40MSAxNy41OSAxOSAxOSAxNy41OSAxMy40MSAxMnpcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPVwiTTAgMGgyNHYyNEgwelwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxsPVwibm9uZVwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+PC9idXR0b24+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgIDxkaXYgKm5nRm9yPVwibGV0IGkgb2YgZmlsbCg1MClcIlxyXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiY29sb3ItcGlja2VyX19wcmVzZXQtaXRlbVwiPjwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgPGRpdiAqbmdJZj1cIm9rQnV0dG9uIHx8IGNhbmNlbEJ1dHRvblwiXHJcbiAgICAgICAgY2xhc3M9XCJjb2xvci1waWNrZXJfX2J1dHRvbnNcIj5cclxuICAgICAgICA8YnV0dG9uICpuZ0lmPVwiY2FuY2VsQnV0dG9uXCJcclxuICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXHJcbiAgICAgICAgICAgIChjbGljayk9XCJvbkNhbmNlbCgkZXZlbnQpXCJcclxuICAgICAgICAgICAgaTE4bj1cIkBAbnh0LWNvbG9yLXBpY2tlci5idXR0b24uY2FuY2VsXCI+Q2FuY2VsPC9idXR0b24+XHJcbiAgICAgICAgPGJ1dHRvbiAqbmdJZj1cIm9rQnV0dG9uXCJcclxuICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXHJcbiAgICAgICAgICAgIChjbGljayk9XCJvbkFjY2VwdCgkZXZlbnQpXCJcclxuICAgICAgICAgICAgaTE4bj1cIkBAbnh0LWNvbG9yLXBpY2tlci5idXR0b24ub2tcIj5PSzwvYnV0dG9uPlxyXG4gICAgPC9kaXY+XHJcbjwvZGl2PlxyXG4iXX0=