@spicainternational/ngx-sds-components 5.8.0 → 5.9.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.
Files changed (32) hide show
  1. package/esm2020/src/lib/color-picker/color-picker.component.mjs +42 -5
  2. package/esm2020/src/lib/date-picker/date-picker.component.mjs +17 -5
  3. package/esm2020/src/lib/duration-box/duration-box.component.mjs +46 -34
  4. package/esm2020/src/lib/duration-box/duration.service.mjs +6 -3
  5. package/esm2020/src/lib/modal/dialog/dialog.component.mjs +16 -4
  6. package/esm2020/src/lib/modal/modal.component.mjs +5 -4
  7. package/esm2020/src/lib/modal/modal.module.mjs +5 -1
  8. package/esm2020/src/lib/navigation/navigation-group/navigation-group.component.mjs +1 -1
  9. package/fesm2015/spicainternational-ngx-sds-components-src-lib-color-picker.mjs +41 -4
  10. package/fesm2015/spicainternational-ngx-sds-components-src-lib-color-picker.mjs.map +1 -1
  11. package/fesm2015/spicainternational-ngx-sds-components-src-lib-date-picker.mjs +17 -4
  12. package/fesm2015/spicainternational-ngx-sds-components-src-lib-date-picker.mjs.map +1 -1
  13. package/fesm2015/spicainternational-ngx-sds-components-src-lib-duration-box.mjs +51 -35
  14. package/fesm2015/spicainternational-ngx-sds-components-src-lib-duration-box.mjs.map +1 -1
  15. package/fesm2015/spicainternational-ngx-sds-components-src-lib-modal.mjs +22 -5
  16. package/fesm2015/spicainternational-ngx-sds-components-src-lib-modal.mjs.map +1 -1
  17. package/fesm2015/spicainternational-ngx-sds-components-src-lib-navigation.mjs.map +1 -1
  18. package/fesm2020/spicainternational-ngx-sds-components-src-lib-color-picker.mjs +41 -4
  19. package/fesm2020/spicainternational-ngx-sds-components-src-lib-color-picker.mjs.map +1 -1
  20. package/fesm2020/spicainternational-ngx-sds-components-src-lib-date-picker.mjs +16 -4
  21. package/fesm2020/spicainternational-ngx-sds-components-src-lib-date-picker.mjs.map +1 -1
  22. package/fesm2020/spicainternational-ngx-sds-components-src-lib-duration-box.mjs +50 -35
  23. package/fesm2020/spicainternational-ngx-sds-components-src-lib-duration-box.mjs.map +1 -1
  24. package/fesm2020/spicainternational-ngx-sds-components-src-lib-modal.mjs +22 -5
  25. package/fesm2020/spicainternational-ngx-sds-components-src-lib-modal.mjs.map +1 -1
  26. package/fesm2020/spicainternational-ngx-sds-components-src-lib-navigation.mjs.map +1 -1
  27. package/package.json +8 -7
  28. package/src/lib/color-picker/color-picker.component.d.ts +5 -1
  29. package/src/lib/date-picker/date-picker.component.d.ts +2 -1
  30. package/src/lib/duration-box/duration-box.component.d.ts +1 -0
  31. package/src/lib/modal/dialog/dialog.component.d.ts +6 -2
  32. package/src/lib/modal/modal.module.d.ts +3 -2
@@ -1,4 +1,5 @@
1
1
  import { Component, EventEmitter, Input, Output } from '@angular/core';
2
+ import { faCheck } from '@fortawesome/pro-solid-svg-icons';
2
3
  import * as i0 from "@angular/core";
3
4
  import * as i1 from "@fortawesome/angular-fontawesome";
4
5
  import * as i2 from "devextreme-angular/ui/popover";
@@ -11,14 +12,16 @@ export class SdsColorPickerComponent {
11
12
  this.disabled = false;
12
13
  this.style = 'inline';
13
14
  this.showDropdown = false;
15
+ this.checkIcon = faCheck;
16
+ this.gridSize = 1;
14
17
  this.selectedColorChange = new EventEmitter();
15
18
  this.elementUUID = `sds-cp-${Math.ceil(Math.random() * 1000000)}`;
16
19
  // library.add(faCheck);
17
20
  }
18
21
  ngOnChanges(changes) {
19
22
  if (changes['colors']) {
20
- const gridSize = Math.ceil(Math.sqrt(this.colors.length));
21
- this.dropdownGridTemplateColumns = `repeat(${gridSize}, 1fr)`;
23
+ this.gridSize = Math.ceil(Math.sqrt(this.colors.length));
24
+ this.dropdownGridTemplateColumns = `repeat(${this.gridSize}, 1fr)`;
22
25
  }
23
26
  }
24
27
  ngOnInit() { }
@@ -26,14 +29,48 @@ export class SdsColorPickerComponent {
26
29
  if (!this.disabled) {
27
30
  this.selectedColor = color;
28
31
  this.selectedColorChange.emit(color);
32
+ this.showDropdown = false;
29
33
  }
30
34
  }
35
+ onKeyDown($event) {
36
+ if ($event.key === 'ArrowUp' || $event.key === 'ArrowDown') {
37
+ $event.preventDefault();
38
+ // const modifier = $event.key === 'ArrowUp' ? -this.gridSize : this.gridSize;
39
+ // const color = this.selectedColor || this.defaultColor;
40
+ // if (color) {
41
+ // const colorIndex = this.colors.indexOf(color);
42
+ // let nextColorIndex = (colorIndex + modifier) % this.colors.length;
43
+ // if (nextColorIndex < 0) {
44
+ // nextColorIndex = this.colors.length + modifier;
45
+ // }
46
+ // this.selectedColor = this.colors[nextColorIndex];
47
+ // console.log(nextColorIndex);
48
+ // }
49
+ }
50
+ if ($event.key === 'ArrowLeft' || $event.key === 'ArrowRight') {
51
+ $event.preventDefault();
52
+ // const modifier = $event.key === 'ArrowLeft' ? -1 : 1;
53
+ // const color = this.selectedColor || this.defaultColor;
54
+ // if (color) {
55
+ // const colorIndex = this.colors.indexOf(color);
56
+ // let nextColorIndex = (colorIndex + modifier) % this.colors.length;
57
+ // if (nextColorIndex < 0) {
58
+ // nextColorIndex = this.colors.length + modifier;
59
+ // }
60
+ // this.selectedColor = this.colors[nextColorIndex];
61
+ // console.log(nextColorIndex);
62
+ // }
63
+ }
64
+ }
65
+ toggleDropdown() {
66
+ this.showDropdown = !this.showDropdown;
67
+ }
31
68
  }
32
69
  SdsColorPickerComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.1", ngImport: i0, type: SdsColorPickerComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
33
- SdsColorPickerComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.1", type: SdsColorPickerComponent, selector: "sds-color-picker", inputs: { colors: "colors", disabled: "disabled", selectedColor: "selectedColor", defaultColor: "defaultColor", style: "style" }, outputs: { selectedColorChange: "selectedColorChange" }, usesOnChanges: true, ngImport: i0, template: "<div\r\n *ngIf=\"style === 'inline'\"\r\n class=\"color-tiles-container-inline\"\r\n>\r\n <div\r\n *ngFor=\"let color of colors\"\r\n [style.background-color]=\"color\"\r\n [style.border-color]=\"color\"\r\n class=\"color-tile\"\r\n [class.selected]=\"selectedColor === color\"\r\n (click)=\"selectColor(color)\"\r\n >\r\n <fa-icon\r\n *ngIf=\"selectedColor === color\"\r\n [icon]=\"['fas', 'check']\"\r\n >\r\n </fa-icon>\r\n </div>\r\n</div>\r\n\r\n<!-- class=\"btn border-0 dropdown-toggle d-flex align-items-center\" -->\r\n<button\r\n *ngIf=\"style === 'dropdown'\"\r\n [id]=\"elementUUID\"\r\n type=\"button\"\r\n class=\"btn dropdown-toggle border d-flex align-items-center\"\r\n aria-controls=\"dropdown-basic\"\r\n (click)=\"showDropdown = true\"\r\n>\r\n <div\r\n class=\"color-tile color-tile-dropdown\"\r\n [style.background-color]=\"selectedColor || defaultColor\"\r\n [class.undefined-color]=\"!(selectedColor || defaultColor)\"\r\n >\r\n </div>\r\n <div class=\"caret ms-2\"></div>\r\n</button>\r\n\r\n<dx-popover\r\n target=\"#{{elementUUID}}\"\r\n position=\"bottom\"\r\n [(visible)]=\"showDropdown\"\r\n>\r\n <div\r\n class=\"color-tiles-container-square\"\r\n [ngStyle]=\"{ 'grid-template-columns': dropdownGridTemplateColumns}\"\r\n >\r\n <div\r\n *ngFor=\"let color of colors\"\r\n [style.background-color]=\"color\"\r\n class=\"color-tile color-tile-popover rounded-circle\"\r\n (click)=\"selectColor(color)\"\r\n >\r\n </div>\r\n </div>\r\n</dx-popover>", styles: [".color-tiles-container-inline{display:flex;gap:.25rem;color:#fff}.color-tiles-container-square{display:grid;grid-gap:.5rem;gap:.5rem;color:#fff}.color-tile{height:2rem;width:2rem;display:flex;align-items:center;justify-content:center;border-radius:100%;cursor:pointer}.color-tile.color-tile-dropdown{height:1.5rem;width:1.5rem}.color-tile.color-tile-popover:hover{filter:brightness(90%)}.color-tile fa-icon{line-height:1rem}.color-tile.undefined-color{border-color:gray;border-style:solid;border-width:1px}\n"], components: [{ type: i1.FaIconComponent, selector: "fa-icon", inputs: ["icon", "title", "spin", "pulse", "mask", "styles", "flip", "size", "pull", "border", "inverse", "symbol", "rotate", "fixedWidth", "classes", "transform", "a11yRole"] }, { type: i2.DxPopoverComponent, selector: "dx-popover", inputs: ["animation", "closeOnOutsideClick", "container", "contentTemplate", "copyRootClassesToWrapper", "deferRendering", "disabled", "elementAttr", "height", "hideEvent", "hideOnOutsideClick", "hideOnParentScroll", "hint", "hoverStateEnabled", "maxHeight", "maxWidth", "minHeight", "minWidth", "position", "rtlEnabled", "shading", "shadingColor", "showCloseButton", "showEvent", "showTitle", "target", "title", "titleTemplate", "toolbarItems", "visible", "width", "wrapperAttr"], outputs: ["onContentReady", "onDisposing", "onHidden", "onHiding", "onInitialized", "onOptionChanged", "onShowing", "onShown", "onTitleRendered", "animationChange", "closeOnOutsideClickChange", "containerChange", "contentTemplateChange", "copyRootClassesToWrapperChange", "deferRenderingChange", "disabledChange", "elementAttrChange", "heightChange", "hideEventChange", "hideOnOutsideClickChange", "hideOnParentScrollChange", "hintChange", "hoverStateEnabledChange", "maxHeightChange", "maxWidthChange", "minHeightChange", "minWidthChange", "positionChange", "rtlEnabledChange", "shadingChange", "shadingColorChange", "showCloseButtonChange", "showEventChange", "showTitleChange", "targetChange", "titleChange", "titleTemplateChange", "toolbarItemsChange", "visibleChange", "widthChange", "wrapperAttrChange"] }], directives: [{ type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i3.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }] });
70
+ SdsColorPickerComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.1", type: SdsColorPickerComponent, selector: "sds-color-picker", inputs: { colors: "colors", disabled: "disabled", selectedColor: "selectedColor", defaultColor: "defaultColor", style: "style" }, outputs: { selectedColorChange: "selectedColorChange" }, usesOnChanges: true, ngImport: i0, template: "<div\r\n *ngIf=\"style === 'inline'\"\r\n class=\"color-tiles-container-inline\"\r\n>\r\n <div\r\n *ngFor=\"let color of colors\"\r\n [style.background-color]=\"color\"\r\n [style.border-color]=\"color\"\r\n class=\"color-tile\"\r\n [class.selected]=\"selectedColor === color\"\r\n (click)=\"selectColor(color)\"\r\n >\r\n <fa-icon\r\n *ngIf=\"selectedColor === color\"\r\n [icon]=\"['fas', 'check']\"\r\n >\r\n </fa-icon>\r\n </div>\r\n</div>\r\n\r\n\r\n<button\r\n *ngIf=\"style !== 'inline'\"\r\n [id]=\"elementUUID\"\r\n type=\"button\"\r\n class=\"btn d-flex align-items-center\"\r\n \r\n [class.dropdown-toggle]=\"style === 'input'\"\r\n [class.border]=\"style === 'input'\"\r\n \r\n [class.p-1]=\"style == 'plain'\"\r\n [class.rounded-circle]=\"style == 'plain'\"\r\n \r\n aria-controls=\"dropdown-basic\"\r\n (click)=\"toggleDropdown()\"\r\n (keydown)=\"onKeyDown($event)\"\r\n>\r\n\r\n <div\r\n class=\"color-tile color-tile-dropdown\"\r\n [class.color-tile-dropdown]=\"style === 'input'\"\r\n [style.background-color]=\"selectedColor || defaultColor\"\r\n [class.undefined-color]=\"!(selectedColor || defaultColor)\"\r\n >\r\n </div>\r\n <div \r\n *ngIf=\"style === 'input'\"\r\n class=\"caret ms-1\">\r\n </div>\r\n</button>\r\n\r\n<dx-popover\r\n target=\"#{{elementUUID}}\"\r\n position=\"bottom\"\r\n [(visible)]=\"showDropdown\"\r\n>\r\n <div\r\n class=\"color-tiles-container-square\"\r\n [ngStyle]=\"{ 'grid-template-columns': dropdownGridTemplateColumns}\"\r\n >\r\n <div\r\n *ngFor=\"let color of colors\"\r\n [style.background-color]=\"color\"\r\n class=\"color-tile color-tile-popover rounded-circle\"\r\n (click)=\"selectColor(color)\"\r\n >\r\n <fa-icon\r\n *ngIf=\"selectedColor === color || !selectedColor && defaultColor === color\"\r\n [icon]=\"checkIcon\"\r\n >\r\n </fa-icon>\r\n\r\n </div>\r\n </div>\r\n</dx-popover>", styles: [".color-tiles-container-inline{display:flex;gap:.25rem;color:#fff}.color-tiles-container-square{display:grid;grid-gap:.5rem;gap:.5rem;color:#fff}.color-tile{height:2rem;width:2rem;display:flex;align-items:center;justify-content:center;border-radius:100%;cursor:pointer}.color-tile.color-tile-dropdown{height:1.5rem;width:1.5rem}.color-tile.color-tile-popover:hover{filter:brightness(90%)}.color-tile fa-icon{line-height:1rem}.color-tile.undefined-color{border-color:gray;border-style:solid;border-width:1px}.btn:focus-visible{outline:0;box-shadow:0 0 0 .2rem #3b8fc240}.btn:active{border-color:transparent}\n"], components: [{ type: i1.FaIconComponent, selector: "fa-icon", inputs: ["icon", "title", "spin", "pulse", "mask", "styles", "flip", "size", "pull", "border", "inverse", "symbol", "rotate", "fixedWidth", "classes", "transform", "a11yRole"] }, { type: i2.DxPopoverComponent, selector: "dx-popover", inputs: ["animation", "closeOnOutsideClick", "container", "contentTemplate", "copyRootClassesToWrapper", "deferRendering", "disabled", "elementAttr", "height", "hideEvent", "hideOnOutsideClick", "hideOnParentScroll", "hint", "hoverStateEnabled", "maxHeight", "maxWidth", "minHeight", "minWidth", "position", "rtlEnabled", "shading", "shadingColor", "showCloseButton", "showEvent", "showTitle", "target", "title", "titleTemplate", "toolbarItems", "visible", "width", "wrapperAttr"], outputs: ["onContentReady", "onDisposing", "onHidden", "onHiding", "onInitialized", "onOptionChanged", "onShowing", "onShown", "onTitleRendered", "animationChange", "closeOnOutsideClickChange", "containerChange", "contentTemplateChange", "copyRootClassesToWrapperChange", "deferRenderingChange", "disabledChange", "elementAttrChange", "heightChange", "hideEventChange", "hideOnOutsideClickChange", "hideOnParentScrollChange", "hintChange", "hoverStateEnabledChange", "maxHeightChange", "maxWidthChange", "minHeightChange", "minWidthChange", "positionChange", "rtlEnabledChange", "shadingChange", "shadingColorChange", "showCloseButtonChange", "showEventChange", "showTitleChange", "targetChange", "titleChange", "titleTemplateChange", "toolbarItemsChange", "visibleChange", "widthChange", "wrapperAttrChange"] }], directives: [{ type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i3.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }] });
34
71
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.1", ngImport: i0, type: SdsColorPickerComponent, decorators: [{
35
72
  type: Component,
36
- args: [{ selector: 'sds-color-picker', template: "<div\r\n *ngIf=\"style === 'inline'\"\r\n class=\"color-tiles-container-inline\"\r\n>\r\n <div\r\n *ngFor=\"let color of colors\"\r\n [style.background-color]=\"color\"\r\n [style.border-color]=\"color\"\r\n class=\"color-tile\"\r\n [class.selected]=\"selectedColor === color\"\r\n (click)=\"selectColor(color)\"\r\n >\r\n <fa-icon\r\n *ngIf=\"selectedColor === color\"\r\n [icon]=\"['fas', 'check']\"\r\n >\r\n </fa-icon>\r\n </div>\r\n</div>\r\n\r\n<!-- class=\"btn border-0 dropdown-toggle d-flex align-items-center\" -->\r\n<button\r\n *ngIf=\"style === 'dropdown'\"\r\n [id]=\"elementUUID\"\r\n type=\"button\"\r\n class=\"btn dropdown-toggle border d-flex align-items-center\"\r\n aria-controls=\"dropdown-basic\"\r\n (click)=\"showDropdown = true\"\r\n>\r\n <div\r\n class=\"color-tile color-tile-dropdown\"\r\n [style.background-color]=\"selectedColor || defaultColor\"\r\n [class.undefined-color]=\"!(selectedColor || defaultColor)\"\r\n >\r\n </div>\r\n <div class=\"caret ms-2\"></div>\r\n</button>\r\n\r\n<dx-popover\r\n target=\"#{{elementUUID}}\"\r\n position=\"bottom\"\r\n [(visible)]=\"showDropdown\"\r\n>\r\n <div\r\n class=\"color-tiles-container-square\"\r\n [ngStyle]=\"{ 'grid-template-columns': dropdownGridTemplateColumns}\"\r\n >\r\n <div\r\n *ngFor=\"let color of colors\"\r\n [style.background-color]=\"color\"\r\n class=\"color-tile color-tile-popover rounded-circle\"\r\n (click)=\"selectColor(color)\"\r\n >\r\n </div>\r\n </div>\r\n</dx-popover>", styles: [".color-tiles-container-inline{display:flex;gap:.25rem;color:#fff}.color-tiles-container-square{display:grid;grid-gap:.5rem;gap:.5rem;color:#fff}.color-tile{height:2rem;width:2rem;display:flex;align-items:center;justify-content:center;border-radius:100%;cursor:pointer}.color-tile.color-tile-dropdown{height:1.5rem;width:1.5rem}.color-tile.color-tile-popover:hover{filter:brightness(90%)}.color-tile fa-icon{line-height:1rem}.color-tile.undefined-color{border-color:gray;border-style:solid;border-width:1px}\n"] }]
73
+ args: [{ selector: 'sds-color-picker', template: "<div\r\n *ngIf=\"style === 'inline'\"\r\n class=\"color-tiles-container-inline\"\r\n>\r\n <div\r\n *ngFor=\"let color of colors\"\r\n [style.background-color]=\"color\"\r\n [style.border-color]=\"color\"\r\n class=\"color-tile\"\r\n [class.selected]=\"selectedColor === color\"\r\n (click)=\"selectColor(color)\"\r\n >\r\n <fa-icon\r\n *ngIf=\"selectedColor === color\"\r\n [icon]=\"['fas', 'check']\"\r\n >\r\n </fa-icon>\r\n </div>\r\n</div>\r\n\r\n\r\n<button\r\n *ngIf=\"style !== 'inline'\"\r\n [id]=\"elementUUID\"\r\n type=\"button\"\r\n class=\"btn d-flex align-items-center\"\r\n \r\n [class.dropdown-toggle]=\"style === 'input'\"\r\n [class.border]=\"style === 'input'\"\r\n \r\n [class.p-1]=\"style == 'plain'\"\r\n [class.rounded-circle]=\"style == 'plain'\"\r\n \r\n aria-controls=\"dropdown-basic\"\r\n (click)=\"toggleDropdown()\"\r\n (keydown)=\"onKeyDown($event)\"\r\n>\r\n\r\n <div\r\n class=\"color-tile color-tile-dropdown\"\r\n [class.color-tile-dropdown]=\"style === 'input'\"\r\n [style.background-color]=\"selectedColor || defaultColor\"\r\n [class.undefined-color]=\"!(selectedColor || defaultColor)\"\r\n >\r\n </div>\r\n <div \r\n *ngIf=\"style === 'input'\"\r\n class=\"caret ms-1\">\r\n </div>\r\n</button>\r\n\r\n<dx-popover\r\n target=\"#{{elementUUID}}\"\r\n position=\"bottom\"\r\n [(visible)]=\"showDropdown\"\r\n>\r\n <div\r\n class=\"color-tiles-container-square\"\r\n [ngStyle]=\"{ 'grid-template-columns': dropdownGridTemplateColumns}\"\r\n >\r\n <div\r\n *ngFor=\"let color of colors\"\r\n [style.background-color]=\"color\"\r\n class=\"color-tile color-tile-popover rounded-circle\"\r\n (click)=\"selectColor(color)\"\r\n >\r\n <fa-icon\r\n *ngIf=\"selectedColor === color || !selectedColor && defaultColor === color\"\r\n [icon]=\"checkIcon\"\r\n >\r\n </fa-icon>\r\n\r\n </div>\r\n </div>\r\n</dx-popover>", styles: [".color-tiles-container-inline{display:flex;gap:.25rem;color:#fff}.color-tiles-container-square{display:grid;grid-gap:.5rem;gap:.5rem;color:#fff}.color-tile{height:2rem;width:2rem;display:flex;align-items:center;justify-content:center;border-radius:100%;cursor:pointer}.color-tile.color-tile-dropdown{height:1.5rem;width:1.5rem}.color-tile.color-tile-popover:hover{filter:brightness(90%)}.color-tile fa-icon{line-height:1rem}.color-tile.undefined-color{border-color:gray;border-style:solid;border-width:1px}.btn:focus-visible{outline:0;box-shadow:0 0 0 .2rem #3b8fc240}.btn:active{border-color:transparent}\n"] }]
37
74
  }], ctorParameters: function () { return []; }, propDecorators: { colors: [{
38
75
  type: Input
39
76
  }], disabled: [{
@@ -47,4 +84,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.1", ngImpor
47
84
  }], style: [{
48
85
  type: Input
49
86
  }] } });
50
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29sb3ItcGlja2VyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1zZHMtY29tcG9uZW50cy9zcmMvbGliL2NvbG9yLXBpY2tlci9jb2xvci1waWNrZXIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LXNkcy1jb21wb25lbnRzL3NyYy9saWIvY29sb3ItcGlja2VyL2NvbG9yLXBpY2tlci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQXFCLE1BQU0sRUFBaUIsTUFBTSxlQUFlLENBQUM7Ozs7O0FBQ3pHLCtEQUErRDtBQUMvRCw4REFBOEQ7QUFPOUQsTUFBTSxPQUFPLHVCQUF1QjtJQWFoQztRQVpTLFdBQU0sR0FBa0IsRUFBRSxDQUFDO1FBQzNCLGFBQVEsR0FBWSxLQUFLLENBQUM7UUFJMUIsVUFBSyxHQUEwQixRQUFRLENBQUE7UUFJekMsaUJBQVksR0FBRyxLQUFLLENBQUM7UUFJeEIsSUFBSSxDQUFDLG1CQUFtQixHQUFHLElBQUksWUFBWSxFQUFVLENBQUM7UUFDdEQsSUFBSSxDQUFDLFdBQVcsR0FBRyxVQUFVLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxHQUFHLE9BQU8sQ0FBQyxFQUFFLENBQUM7UUFFbEUsd0JBQXdCO0lBQzVCLENBQUM7SUFFRCxXQUFXLENBQUMsT0FBc0I7UUFDOUIsSUFBSSxPQUFPLENBQUMsUUFBUSxDQUFDLEVBQUU7WUFDbkIsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztZQUMxRCxJQUFJLENBQUMsMkJBQTJCLEdBQUcsVUFBVSxRQUFRLFFBQVEsQ0FBQztTQUNqRTtJQUNMLENBQUM7SUFFRCxRQUFRLEtBQVUsQ0FBQztJQUVaLFdBQVcsQ0FBQyxLQUFhO1FBQzVCLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFO1lBQ2hCLElBQUksQ0FBQyxhQUFhLEdBQUcsS0FBSyxDQUFDO1lBQzNCLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7U0FDeEM7SUFDTCxDQUFDOztvSEFsQ1EsdUJBQXVCO3dHQUF2Qix1QkFBdUIsd1FDVHBDLDhyREF1RGE7MkZEOUNBLHVCQUF1QjtrQkFMbkMsU0FBUzsrQkFDSSxrQkFBa0I7MEVBS25CLE1BQU07c0JBQWQsS0FBSztnQkFDRyxRQUFRO3NCQUFoQixLQUFLO2dCQUNHLGFBQWE7c0JBQXJCLEtBQUs7Z0JBQ0csWUFBWTtzQkFBcEIsS0FBSztnQkFDSSxtQkFBbUI7c0JBQTVCLE1BQU07Z0JBQ0UsS0FBSztzQkFBYixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBFdmVudEVtaXR0ZXIsIElucHV0LCBPbkNoYW5nZXMsIE9uSW5pdCwgT3V0cHV0LCBTaW1wbGVDaGFuZ2VzIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbi8vIGltcG9ydCB7IGxpYnJhcnkgfSBmcm9tICdAZm9ydGF3ZXNvbWUvZm9udGF3ZXNvbWUtc3ZnLWNvcmUnO1xyXG4vLyBpbXBvcnQgeyBmYUNoZWNrIH0gZnJvbSAnQGZvcnRhd2Vzb21lL3Byby1zb2xpZC1zdmctaWNvbnMnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgICBzZWxlY3RvcjogJ3Nkcy1jb2xvci1waWNrZXInLFxyXG4gICAgdGVtcGxhdGVVcmw6ICcuL2NvbG9yLXBpY2tlci5jb21wb25lbnQuaHRtbCcsXHJcbiAgICBzdHlsZVVybHM6IFsnLi9jb2xvci1waWNrZXIuY29tcG9uZW50LnNjc3MnXSxcclxufSlcclxuZXhwb3J0IGNsYXNzIFNkc0NvbG9yUGlja2VyQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkNoYW5nZXMge1xyXG4gICAgQElucHV0KCkgY29sb3JzOiBBcnJheTxzdHJpbmc+ID0gW107XHJcbiAgICBASW5wdXQoKSBkaXNhYmxlZDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gICAgQElucHV0KCkgc2VsZWN0ZWRDb2xvcj86IHN0cmluZztcclxuICAgIEBJbnB1dCgpIGRlZmF1bHRDb2xvcj86IHN0cmluZztcclxuICAgIEBPdXRwdXQoKSBzZWxlY3RlZENvbG9yQ2hhbmdlOiBFdmVudEVtaXR0ZXI8c3RyaW5nPjtcclxuICAgIEBJbnB1dCgpIHN0eWxlOiAnaW5saW5lJyB8ICdkcm9wZG93bicgPSAnaW5saW5lJ1xyXG5cclxuICAgIC8vIHB1YmxpYyBjaGVja0ljb24gPSBmYUNoZWNrO1xyXG4gICAgcHVibGljIGRyb3Bkb3duR3JpZFRlbXBsYXRlQ29sdW1ucz86IHN0cmluZztcclxuICAgIHB1YmxpYyBzaG93RHJvcGRvd24gPSBmYWxzZTtcclxuICAgIHB1YmxpYyBlbGVtZW50VVVJRDsgLy8gPSAnc2RzLWNwLScgKyBjcnlwdG8ucmFuZG9tVVVJRCgpO1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCkge1xyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRDb2xvckNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8c3RyaW5nPigpO1xyXG4gICAgICAgIHRoaXMuZWxlbWVudFVVSUQgPSBgc2RzLWNwLSR7TWF0aC5jZWlsKE1hdGgucmFuZG9tKCkgKiAxMDAwMDAwKX1gOyAgXHJcblxyXG4gICAgICAgIC8vIGxpYnJhcnkuYWRkKGZhQ2hlY2spO1xyXG4gICAgfVxyXG5cclxuICAgIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcclxuICAgICAgICBpZiAoY2hhbmdlc1snY29sb3JzJ10pIHtcclxuICAgICAgICAgICAgY29uc3QgZ3JpZFNpemUgPSBNYXRoLmNlaWwoTWF0aC5zcXJ0KHRoaXMuY29sb3JzLmxlbmd0aCkpO1xyXG4gICAgICAgICAgICB0aGlzLmRyb3Bkb3duR3JpZFRlbXBsYXRlQ29sdW1ucyA9IGByZXBlYXQoJHtncmlkU2l6ZX0sIDFmcilgO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBuZ09uSW5pdCgpOiB2b2lkIHt9XHJcblxyXG4gICAgcHVibGljIHNlbGVjdENvbG9yKGNvbG9yOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgICAgICBpZiAoIXRoaXMuZGlzYWJsZWQpIHtcclxuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZENvbG9yID0gY29sb3I7XHJcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRDb2xvckNoYW5nZS5lbWl0KGNvbG9yKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbn1cclxuIiwiPGRpdlxyXG4gICAgKm5nSWY9XCJzdHlsZSA9PT0gJ2lubGluZSdcIlxyXG4gICAgY2xhc3M9XCJjb2xvci10aWxlcy1jb250YWluZXItaW5saW5lXCJcclxuPlxyXG4gICAgPGRpdlxyXG4gICAgICAgICpuZ0Zvcj1cImxldCBjb2xvciBvZiBjb2xvcnNcIlxyXG4gICAgICAgIFtzdHlsZS5iYWNrZ3JvdW5kLWNvbG9yXT1cImNvbG9yXCJcclxuICAgICAgICBbc3R5bGUuYm9yZGVyLWNvbG9yXT1cImNvbG9yXCJcclxuICAgICAgICBjbGFzcz1cImNvbG9yLXRpbGVcIlxyXG4gICAgICAgIFtjbGFzcy5zZWxlY3RlZF09XCJzZWxlY3RlZENvbG9yID09PSBjb2xvclwiXHJcbiAgICAgICAgKGNsaWNrKT1cInNlbGVjdENvbG9yKGNvbG9yKVwiXHJcbiAgICA+XHJcbiAgICAgICAgPGZhLWljb25cclxuICAgICAgICAgICAgKm5nSWY9XCJzZWxlY3RlZENvbG9yID09PSBjb2xvclwiXHJcbiAgICAgICAgICAgIFtpY29uXT1cIlsnZmFzJywgJ2NoZWNrJ11cIlxyXG4gICAgICAgID5cclxuICAgICAgICA8L2ZhLWljb24+XHJcbiAgICA8L2Rpdj5cclxuPC9kaXY+XHJcblxyXG48IS0tIGNsYXNzPVwiYnRuIGJvcmRlci0wIGRyb3Bkb3duLXRvZ2dsZSBkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyXCIgLS0+XHJcbjxidXR0b25cclxuICAgICpuZ0lmPVwic3R5bGUgPT09ICdkcm9wZG93bidcIlxyXG4gICAgW2lkXT1cImVsZW1lbnRVVUlEXCJcclxuICAgIHR5cGU9XCJidXR0b25cIlxyXG4gICAgY2xhc3M9XCJidG4gZHJvcGRvd24tdG9nZ2xlIGJvcmRlciBkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyXCJcclxuICAgIGFyaWEtY29udHJvbHM9XCJkcm9wZG93bi1iYXNpY1wiXHJcbiAgICAoY2xpY2spPVwic2hvd0Ryb3Bkb3duID0gdHJ1ZVwiXHJcbj5cclxuICAgIDxkaXZcclxuICAgICAgICBjbGFzcz1cImNvbG9yLXRpbGUgY29sb3ItdGlsZS1kcm9wZG93blwiXHJcbiAgICAgICAgW3N0eWxlLmJhY2tncm91bmQtY29sb3JdPVwic2VsZWN0ZWRDb2xvciB8fCBkZWZhdWx0Q29sb3JcIlxyXG4gICAgICAgIFtjbGFzcy51bmRlZmluZWQtY29sb3JdPVwiIShzZWxlY3RlZENvbG9yIHx8IGRlZmF1bHRDb2xvcilcIlxyXG4gICAgPlxyXG4gICAgPC9kaXY+XHJcbiAgICA8ZGl2IGNsYXNzPVwiY2FyZXQgbXMtMlwiPjwvZGl2PlxyXG48L2J1dHRvbj5cclxuXHJcbjxkeC1wb3BvdmVyXHJcbiAgICB0YXJnZXQ9XCIje3tlbGVtZW50VVVJRH19XCJcclxuICAgIHBvc2l0aW9uPVwiYm90dG9tXCJcclxuICAgIFsodmlzaWJsZSldPVwic2hvd0Ryb3Bkb3duXCJcclxuPlxyXG4gICAgPGRpdlxyXG4gICAgICAgIGNsYXNzPVwiY29sb3ItdGlsZXMtY29udGFpbmVyLXNxdWFyZVwiXHJcbiAgICAgICAgW25nU3R5bGVdPVwieyAnZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zJzogZHJvcGRvd25HcmlkVGVtcGxhdGVDb2x1bW5zfVwiXHJcbiAgICA+XHJcbiAgICAgICAgPGRpdlxyXG4gICAgICAgICAgICAqbmdGb3I9XCJsZXQgY29sb3Igb2YgY29sb3JzXCJcclxuICAgICAgICAgICAgW3N0eWxlLmJhY2tncm91bmQtY29sb3JdPVwiY29sb3JcIlxyXG4gICAgICAgICAgICBjbGFzcz1cImNvbG9yLXRpbGUgY29sb3ItdGlsZS1wb3BvdmVyIHJvdW5kZWQtY2lyY2xlXCJcclxuICAgICAgICAgICAgKGNsaWNrKT1cInNlbGVjdENvbG9yKGNvbG9yKVwiXHJcbiAgICAgICAgPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbjwvZHgtcG9wb3Zlcj4iXX0=
87
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29sb3ItcGlja2VyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1zZHMtY29tcG9uZW50cy9zcmMvbGliL2NvbG9yLXBpY2tlci9jb2xvci1waWNrZXIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LXNkcy1jb21wb25lbnRzL3NyYy9saWIvY29sb3ItcGlja2VyL2NvbG9yLXBpY2tlci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQXFCLE1BQU0sRUFBaUIsTUFBTSxlQUFlLENBQUM7QUFDekcsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLGtDQUFrQyxDQUFDOzs7OztBQUMzRCwrREFBK0Q7QUFDL0QsOERBQThEO0FBTzlELE1BQU0sT0FBTyx1QkFBdUI7SUFpQmhDO1FBaEJTLFdBQU0sR0FBa0IsRUFBRSxDQUFDO1FBQzNCLGFBQVEsR0FBWSxLQUFLLENBQUM7UUFJMUIsVUFBSyxHQUFpQyxRQUFRLENBQUE7UUFJaEQsaUJBQVksR0FBRyxLQUFLLENBQUM7UUFHckIsY0FBUyxHQUFHLE9BQU8sQ0FBQztRQUVuQixhQUFRLEdBQUcsQ0FBQyxDQUFDO1FBR2pCLElBQUksQ0FBQyxtQkFBbUIsR0FBRyxJQUFJLFlBQVksRUFBVSxDQUFDO1FBQ3RELElBQUksQ0FBQyxXQUFXLEdBQUcsVUFBVSxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsR0FBRyxPQUFPLENBQUMsRUFBRSxDQUFDO1FBRWxFLHdCQUF3QjtJQUM1QixDQUFDO0lBRUQsV0FBVyxDQUFDLE9BQXNCO1FBQzlCLElBQUksT0FBTyxDQUFDLFFBQVEsQ0FBQyxFQUFFO1lBQ25CLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztZQUN6RCxJQUFJLENBQUMsMkJBQTJCLEdBQUcsVUFBVSxJQUFJLENBQUMsUUFBUSxRQUFRLENBQUM7U0FDdEU7SUFDTCxDQUFDO0lBRUQsUUFBUSxLQUFVLENBQUM7SUFFWixXQUFXLENBQUMsS0FBYTtRQUM1QixJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRTtZQUNoQixJQUFJLENBQUMsYUFBYSxHQUFHLEtBQUssQ0FBQztZQUMzQixJQUFJLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ3JDLElBQUksQ0FBQyxZQUFZLEdBQUcsS0FBSyxDQUFDO1NBQzdCO0lBQ0wsQ0FBQztJQUVNLFNBQVMsQ0FBQyxNQUFxQjtRQUVsQyxJQUFJLE1BQU0sQ0FBQyxHQUFHLEtBQUssU0FBUyxJQUFJLE1BQU0sQ0FBQyxHQUFHLEtBQUssV0FBVyxFQUFFO1lBQ3hELE1BQU0sQ0FBQyxjQUFjLEVBQUUsQ0FBQztZQUN4Qiw4RUFBOEU7WUFDOUUseURBQXlEO1lBQ3pELGVBQWU7WUFDZixxREFBcUQ7WUFDckQseUVBQXlFO1lBQ3pFLGdDQUFnQztZQUNoQywwREFBMEQ7WUFDMUQsUUFBUTtZQUNSLHdEQUF3RDtZQUV4RCxtQ0FBbUM7WUFDbkMsZ0JBQWdCO1NBQ25CO1FBRUQsSUFBSSxNQUFNLENBQUMsR0FBRyxLQUFLLFdBQVcsSUFBSSxNQUFNLENBQUMsR0FBRyxLQUFLLFlBQVksRUFBRTtZQUMzRCxNQUFNLENBQUMsY0FBYyxFQUFFLENBQUM7WUFDeEIsd0RBQXdEO1lBQ3hELHlEQUF5RDtZQUN6RCxlQUFlO1lBQ2YscURBQXFEO1lBQ3JELHlFQUF5RTtZQUN6RSxnQ0FBZ0M7WUFDaEMsMERBQTBEO1lBQzFELFFBQVE7WUFDUix3REFBd0Q7WUFFeEQsbUNBQW1DO1lBQ25DLGdCQUFnQjtTQUNuQjtJQUNMLENBQUM7SUFHTSxjQUFjO1FBQ2pCLElBQUksQ0FBQyxZQUFZLEdBQUcsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDO0lBRTNDLENBQUM7O29IQWhGUSx1QkFBdUI7d0dBQXZCLHVCQUF1Qix3UUNWcEMsNG9FQTBFYTsyRkRoRUEsdUJBQXVCO2tCQUxuQyxTQUFTOytCQUNJLGtCQUFrQjswRUFLbkIsTUFBTTtzQkFBZCxLQUFLO2dCQUNHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBQ0csYUFBYTtzQkFBckIsS0FBSztnQkFDRyxZQUFZO3NCQUFwQixLQUFLO2dCQUNJLG1CQUFtQjtzQkFBNUIsTUFBTTtnQkFDRSxLQUFLO3NCQUFiLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE9uQ2hhbmdlcywgT25Jbml0LCBPdXRwdXQsIFNpbXBsZUNoYW5nZXMgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgZmFDaGVjayB9IGZyb20gJ0Bmb3J0YXdlc29tZS9wcm8tc29saWQtc3ZnLWljb25zJztcclxuLy8gaW1wb3J0IHsgbGlicmFyeSB9IGZyb20gJ0Bmb3J0YXdlc29tZS9mb250YXdlc29tZS1zdmctY29yZSc7XHJcbi8vIGltcG9ydCB7IGZhQ2hlY2sgfSBmcm9tICdAZm9ydGF3ZXNvbWUvcHJvLXNvbGlkLXN2Zy1pY29ucyc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICAgIHNlbGVjdG9yOiAnc2RzLWNvbG9yLXBpY2tlcicsXHJcbiAgICB0ZW1wbGF0ZVVybDogJy4vY29sb3ItcGlja2VyLmNvbXBvbmVudC5odG1sJyxcclxuICAgIHN0eWxlVXJsczogWycuL2NvbG9yLXBpY2tlci5jb21wb25lbnQuc2NzcyddLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgU2RzQ29sb3JQaWNrZXJDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uQ2hhbmdlcyB7XHJcbiAgICBASW5wdXQoKSBjb2xvcnM6IEFycmF5PHN0cmluZz4gPSBbXTtcclxuICAgIEBJbnB1dCgpIGRpc2FibGVkOiBib29sZWFuID0gZmFsc2U7XHJcbiAgICBASW5wdXQoKSBzZWxlY3RlZENvbG9yPzogc3RyaW5nO1xyXG4gICAgQElucHV0KCkgZGVmYXVsdENvbG9yPzogc3RyaW5nO1xyXG4gICAgQE91dHB1dCgpIHNlbGVjdGVkQ29sb3JDaGFuZ2U6IEV2ZW50RW1pdHRlcjxzdHJpbmc+O1xyXG4gICAgQElucHV0KCkgc3R5bGU6ICdpbmxpbmUnIHwgJ3BsYWluJyB8ICdpbnB1dCcgPSAnaW5saW5lJ1xyXG5cclxuICAgIC8vIHB1YmxpYyBjaGVja0ljb24gPSBmYUNoZWNrO1xyXG4gICAgcHVibGljIGRyb3Bkb3duR3JpZFRlbXBsYXRlQ29sdW1ucz86IHN0cmluZztcclxuICAgIHB1YmxpYyBzaG93RHJvcGRvd24gPSBmYWxzZTtcclxuICAgIHB1YmxpYyBlbGVtZW50VVVJRDsgLy8gPSAnc2RzLWNwLScgKyBjcnlwdG8ucmFuZG9tVVVJRCgpO1xyXG5cclxuICAgIHB1YmxpYyBjaGVja0ljb24gPSBmYUNoZWNrO1xyXG5cclxuICAgIHByaXZhdGUgZ3JpZFNpemUgPSAxO1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCkge1xyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRDb2xvckNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8c3RyaW5nPigpO1xyXG4gICAgICAgIHRoaXMuZWxlbWVudFVVSUQgPSBgc2RzLWNwLSR7TWF0aC5jZWlsKE1hdGgucmFuZG9tKCkgKiAxMDAwMDAwKX1gOyAgXHJcblxyXG4gICAgICAgIC8vIGxpYnJhcnkuYWRkKGZhQ2hlY2spO1xyXG4gICAgfVxyXG5cclxuICAgIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcclxuICAgICAgICBpZiAoY2hhbmdlc1snY29sb3JzJ10pIHtcclxuICAgICAgICAgICAgdGhpcy5ncmlkU2l6ZSA9IE1hdGguY2VpbChNYXRoLnNxcnQodGhpcy5jb2xvcnMubGVuZ3RoKSk7XHJcbiAgICAgICAgICAgIHRoaXMuZHJvcGRvd25HcmlkVGVtcGxhdGVDb2x1bW5zID0gYHJlcGVhdCgke3RoaXMuZ3JpZFNpemV9LCAxZnIpYDtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgbmdPbkluaXQoKTogdm9pZCB7fVxyXG5cclxuICAgIHB1YmxpYyBzZWxlY3RDb2xvcihjb2xvcjogc3RyaW5nKTogdm9pZCB7XHJcbiAgICAgICAgaWYgKCF0aGlzLmRpc2FibGVkKSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRDb2xvciA9IGNvbG9yO1xyXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkQ29sb3JDaGFuZ2UuZW1pdChjb2xvcik7XHJcbiAgICAgICAgICAgIHRoaXMuc2hvd0Ryb3Bkb3duID0gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBvbktleURvd24oJGV2ZW50OiBLZXlib2FyZEV2ZW50KSB7XHJcblxyXG4gICAgICAgIGlmICgkZXZlbnQua2V5ID09PSAnQXJyb3dVcCcgfHwgJGV2ZW50LmtleSA9PT0gJ0Fycm93RG93bicpIHtcclxuICAgICAgICAgICAgJGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgICAgIC8vIGNvbnN0IG1vZGlmaWVyID0gJGV2ZW50LmtleSA9PT0gJ0Fycm93VXAnID8gLXRoaXMuZ3JpZFNpemUgOiB0aGlzLmdyaWRTaXplO1xyXG4gICAgICAgICAgICAvLyBjb25zdCBjb2xvciA9IHRoaXMuc2VsZWN0ZWRDb2xvciB8fCB0aGlzLmRlZmF1bHRDb2xvcjtcclxuICAgICAgICAgICAgLy8gaWYgKGNvbG9yKSB7XHJcbiAgICAgICAgICAgIC8vICAgICBjb25zdCBjb2xvckluZGV4ID0gdGhpcy5jb2xvcnMuaW5kZXhPZihjb2xvcik7XHJcbiAgICAgICAgICAgIC8vICAgICBsZXQgbmV4dENvbG9ySW5kZXggPSAoY29sb3JJbmRleCArIG1vZGlmaWVyKSAlIHRoaXMuY29sb3JzLmxlbmd0aDtcclxuICAgICAgICAgICAgLy8gICAgIGlmIChuZXh0Q29sb3JJbmRleCA8IDApIHtcclxuICAgICAgICAgICAgLy8gICAgICAgICBuZXh0Q29sb3JJbmRleCA9IHRoaXMuY29sb3JzLmxlbmd0aCArIG1vZGlmaWVyO1xyXG4gICAgICAgICAgICAvLyAgICAgfVxyXG4gICAgICAgICAgICAvLyAgICAgdGhpcy5zZWxlY3RlZENvbG9yID0gdGhpcy5jb2xvcnNbbmV4dENvbG9ySW5kZXhdO1xyXG5cclxuICAgICAgICAgICAgLy8gICAgIGNvbnNvbGUubG9nKG5leHRDb2xvckluZGV4KTtcclxuICAgICAgICAgICAgLy8gfSAgICAgICAgICAgIFxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKCRldmVudC5rZXkgPT09ICdBcnJvd0xlZnQnIHx8ICRldmVudC5rZXkgPT09ICdBcnJvd1JpZ2h0Jykge1xyXG4gICAgICAgICAgICAkZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICAgICAgLy8gY29uc3QgbW9kaWZpZXIgPSAkZXZlbnQua2V5ID09PSAnQXJyb3dMZWZ0JyA/IC0xIDogMTtcclxuICAgICAgICAgICAgLy8gY29uc3QgY29sb3IgPSB0aGlzLnNlbGVjdGVkQ29sb3IgfHwgdGhpcy5kZWZhdWx0Q29sb3I7XHJcbiAgICAgICAgICAgIC8vIGlmIChjb2xvcikge1xyXG4gICAgICAgICAgICAvLyAgICAgY29uc3QgY29sb3JJbmRleCA9IHRoaXMuY29sb3JzLmluZGV4T2YoY29sb3IpO1xyXG4gICAgICAgICAgICAvLyAgICAgbGV0IG5leHRDb2xvckluZGV4ID0gKGNvbG9ySW5kZXggKyBtb2RpZmllcikgJSB0aGlzLmNvbG9ycy5sZW5ndGg7XHJcbiAgICAgICAgICAgIC8vICAgICBpZiAobmV4dENvbG9ySW5kZXggPCAwKSB7XHJcbiAgICAgICAgICAgIC8vICAgICAgICAgbmV4dENvbG9ySW5kZXggPSB0aGlzLmNvbG9ycy5sZW5ndGggKyBtb2RpZmllcjtcclxuICAgICAgICAgICAgLy8gICAgIH1cclxuICAgICAgICAgICAgLy8gICAgIHRoaXMuc2VsZWN0ZWRDb2xvciA9IHRoaXMuY29sb3JzW25leHRDb2xvckluZGV4XTtcclxuXHJcbiAgICAgICAgICAgIC8vICAgICBjb25zb2xlLmxvZyhuZXh0Q29sb3JJbmRleCk7XHJcbiAgICAgICAgICAgIC8vIH0gICAgICAgICAgICBcclxuICAgICAgICB9ICAgICAgICBcclxuICAgIH1cclxuXHJcbiAgICBcclxuICAgIHB1YmxpYyB0b2dnbGVEcm9wZG93bigpe1xyXG4gICAgICAgIHRoaXMuc2hvd0Ryb3Bkb3duID0gIXRoaXMuc2hvd0Ryb3Bkb3duO1xyXG5cclxuICAgIH1cclxufVxyXG4iLCI8ZGl2XHJcbiAgICAqbmdJZj1cInN0eWxlID09PSAnaW5saW5lJ1wiXHJcbiAgICBjbGFzcz1cImNvbG9yLXRpbGVzLWNvbnRhaW5lci1pbmxpbmVcIlxyXG4+XHJcbiAgICA8ZGl2XHJcbiAgICAgICAgKm5nRm9yPVwibGV0IGNvbG9yIG9mIGNvbG9yc1wiXHJcbiAgICAgICAgW3N0eWxlLmJhY2tncm91bmQtY29sb3JdPVwiY29sb3JcIlxyXG4gICAgICAgIFtzdHlsZS5ib3JkZXItY29sb3JdPVwiY29sb3JcIlxyXG4gICAgICAgIGNsYXNzPVwiY29sb3ItdGlsZVwiXHJcbiAgICAgICAgW2NsYXNzLnNlbGVjdGVkXT1cInNlbGVjdGVkQ29sb3IgPT09IGNvbG9yXCJcclxuICAgICAgICAoY2xpY2spPVwic2VsZWN0Q29sb3IoY29sb3IpXCJcclxuICAgID5cclxuICAgICAgICA8ZmEtaWNvblxyXG4gICAgICAgICAgICAqbmdJZj1cInNlbGVjdGVkQ29sb3IgPT09IGNvbG9yXCJcclxuICAgICAgICAgICAgW2ljb25dPVwiWydmYXMnLCAnY2hlY2snXVwiXHJcbiAgICAgICAgPlxyXG4gICAgICAgIDwvZmEtaWNvbj5cclxuICAgIDwvZGl2PlxyXG48L2Rpdj5cclxuXHJcblxyXG48YnV0dG9uXHJcbiAgICAqbmdJZj1cInN0eWxlICE9PSAnaW5saW5lJ1wiXHJcbiAgICBbaWRdPVwiZWxlbWVudFVVSURcIlxyXG4gICAgdHlwZT1cImJ1dHRvblwiXHJcbiAgICBjbGFzcz1cImJ0biBkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyXCJcclxuICAgIFxyXG4gICAgW2NsYXNzLmRyb3Bkb3duLXRvZ2dsZV09XCJzdHlsZSA9PT0gJ2lucHV0J1wiXHJcbiAgICBbY2xhc3MuYm9yZGVyXT1cInN0eWxlID09PSAnaW5wdXQnXCJcclxuICAgIFxyXG4gICAgW2NsYXNzLnAtMV09XCJzdHlsZSA9PSAncGxhaW4nXCJcclxuICAgIFtjbGFzcy5yb3VuZGVkLWNpcmNsZV09XCJzdHlsZSA9PSAncGxhaW4nXCJcclxuICAgIFxyXG4gICAgYXJpYS1jb250cm9scz1cImRyb3Bkb3duLWJhc2ljXCJcclxuICAgIChjbGljayk9XCJ0b2dnbGVEcm9wZG93bigpXCJcclxuICAgIChrZXlkb3duKT1cIm9uS2V5RG93bigkZXZlbnQpXCJcclxuPlxyXG5cclxuICAgIDxkaXZcclxuICAgICAgICBjbGFzcz1cImNvbG9yLXRpbGUgY29sb3ItdGlsZS1kcm9wZG93blwiXHJcbiAgICAgICAgW2NsYXNzLmNvbG9yLXRpbGUtZHJvcGRvd25dPVwic3R5bGUgPT09ICdpbnB1dCdcIlxyXG4gICAgICAgIFtzdHlsZS5iYWNrZ3JvdW5kLWNvbG9yXT1cInNlbGVjdGVkQ29sb3IgfHwgZGVmYXVsdENvbG9yXCJcclxuICAgICAgICBbY2xhc3MudW5kZWZpbmVkLWNvbG9yXT1cIiEoc2VsZWN0ZWRDb2xvciB8fCBkZWZhdWx0Q29sb3IpXCJcclxuICAgID5cclxuICAgIDwvZGl2PlxyXG4gICAgPGRpdiBcclxuICAgICAgICAqbmdJZj1cInN0eWxlID09PSAnaW5wdXQnXCJcclxuICAgICAgICBjbGFzcz1cImNhcmV0IG1zLTFcIj5cclxuICAgIDwvZGl2PlxyXG48L2J1dHRvbj5cclxuXHJcbjxkeC1wb3BvdmVyXHJcbiAgICB0YXJnZXQ9XCIje3tlbGVtZW50VVVJRH19XCJcclxuICAgIHBvc2l0aW9uPVwiYm90dG9tXCJcclxuICAgIFsodmlzaWJsZSldPVwic2hvd0Ryb3Bkb3duXCJcclxuPlxyXG4gICAgPGRpdlxyXG4gICAgICAgIGNsYXNzPVwiY29sb3ItdGlsZXMtY29udGFpbmVyLXNxdWFyZVwiXHJcbiAgICAgICAgW25nU3R5bGVdPVwieyAnZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zJzogZHJvcGRvd25HcmlkVGVtcGxhdGVDb2x1bW5zfVwiXHJcbiAgICA+XHJcbiAgICAgICAgPGRpdlxyXG4gICAgICAgICAgICAqbmdGb3I9XCJsZXQgY29sb3Igb2YgY29sb3JzXCJcclxuICAgICAgICAgICAgW3N0eWxlLmJhY2tncm91bmQtY29sb3JdPVwiY29sb3JcIlxyXG4gICAgICAgICAgICBjbGFzcz1cImNvbG9yLXRpbGUgY29sb3ItdGlsZS1wb3BvdmVyIHJvdW5kZWQtY2lyY2xlXCJcclxuICAgICAgICAgICAgKGNsaWNrKT1cInNlbGVjdENvbG9yKGNvbG9yKVwiXHJcbiAgICAgICAgPlxyXG4gICAgICAgIDxmYS1pY29uXHJcbiAgICAgICAgICAgICpuZ0lmPVwic2VsZWN0ZWRDb2xvciA9PT0gY29sb3IgfHwgIXNlbGVjdGVkQ29sb3IgJiYgZGVmYXVsdENvbG9yID09PSBjb2xvclwiXHJcbiAgICAgICAgICAgIFtpY29uXT1cImNoZWNrSWNvblwiXHJcbiAgICAgICAgPlxyXG4gICAgICAgIDwvZmEtaWNvbj5cclxuXHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuPC9keC1wb3BvdmVyPiJdfQ==