@libs-ui/components-image-editor 0.2.161

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.
@@ -0,0 +1,5 @@
1
+ export * from './image-editor.component';
2
+ export * from './interfaces/image-editor.interface';
3
+ export * from './interfaces/function-control-event.interface';
4
+ export * from './resize/resize.component';
5
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWJzLXVpL2NvbXBvbmVudHMvaW1hZ2UtZWRpdG9yL3NyYy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLDBCQUEwQixDQUFDO0FBQ3pDLGNBQWMscUNBQXFDLENBQUM7QUFDcEQsY0FBYywrQ0FBK0MsQ0FBQztBQUM5RCxjQUFjLDJCQUEyQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSAnLi9pbWFnZS1lZGl0b3IuY29tcG9uZW50JztcbmV4cG9ydCAqIGZyb20gJy4vaW50ZXJmYWNlcy9pbWFnZS1lZGl0b3IuaW50ZXJmYWNlJztcbmV4cG9ydCAqIGZyb20gJy4vaW50ZXJmYWNlcy9mdW5jdGlvbi1jb250cm9sLWV2ZW50LmludGVyZmFjZSc7XG5leHBvcnQgKiBmcm9tICcuL3Jlc2l6ZS9yZXNpemUuY29tcG9uZW50JztcbiJdfQ==
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZnVuY3Rpb24tY29udHJvbC1ldmVudC5pbnRlcmZhY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzLXVpL2NvbXBvbmVudHMvaW1hZ2UtZWRpdG9yL3NyYy9pbnRlcmZhY2VzL2Z1bmN0aW9uLWNvbnRyb2wtZXZlbnQuaW50ZXJmYWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyJcbmV4cG9ydCBpbnRlcmZhY2UgSUltYWdlRWRpdG9yRnVuY3Rpb25Db250cm9sRXZlbnQge1xuICBjcm9wSW1hZ2U6ICgpID0+IFByb21pc2U8c3RyaW5nPjtcbiAgc2V0TG9hZGluZ1N0YXRlOiAobG9hZGluZzogYm9vbGVhbikgPT4gdm9pZDtcbn1cbiJdfQ==
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW1hZ2UtZWRpdG9yLmludGVyZmFjZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMtdWkvY29tcG9uZW50cy9pbWFnZS1lZGl0b3Ivc3JjL2ludGVyZmFjZXMvaW1hZ2UtZWRpdG9yLmludGVyZmFjZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGludGVyZmFjZSBJU2F2ZUZpbGUge1xuICBmaWxlOiBCbG9iO1xuICB1cmw6IHN0cmluZztcbiAgbW9kZTogVFlQRV9NT0RFX1NBVkU7XG59XG5cbmV4cG9ydCB0eXBlIFRZUEVfTU9ERV9TQVZFID0gJ3NhdmUtZmlsZScgfCAnc2F2ZS1hcGknIHwgJ3NhdmUtYXBpLWFzLW5ldy1maWxlJztcbmV4cG9ydCBpbnRlcmZhY2UgSUNyb3BSYXRpb0l0ZW0ge1xuICBrZXk6ICdmcmVlJyB8ICcxOjEnIHwgJzI6MycgfCAnMzoyJyB8ICczOjQnIHwgJzQ6MycgfCAnOToxNicgfCAnMTY6OSc7XG4gIGljb246IHN0cmluZztcbiAgdmFsdWU/OiBudW1iZXI7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSUFzcGVjdFJhdGlvIHtcbiAga2V5OiBzdHJpbmc7XG4gIHZhbHVlOiBudW1iZXI7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSUNyb3BTaXplIHtcbiAgd2lkdGg6IG51bWJlcjtcbiAgaGVpZ2h0OiBudW1iZXI7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSVJlY3RDbGlwIHtcbiAgdG9wOiBudW1iZXI7XG4gIGxlZnQ6IG51bWJlcjtcbiAgd2lkdGg6IG51bWJlcjtcbiAgaGVpZ2h0OiBudW1iZXI7XG4gIHJpZ2h0OiBudW1iZXI7XG4gIGJvdHRvbTogbnVtYmVyO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIElSZXNpemVEYXRhIHtcbiAgcmF0aW86IG51bWJlcjtcbiAgd2lkdGg6IG51bWJlcjtcbiAgaGVpZ2h0OiBudW1iZXI7XG59XG5cbmV4cG9ydCB0eXBlIFRZUEVfUkVTSVpFX1NUQVRFID0gJ1RMJyB8ICdCTCcgfCAnVFInIHwgJ0JSJyB8ICdWTCcgfCAnVlInIHwgJ0hUJyB8ICdIQicgfCAnbm9uZSc7XG5cblxuZXhwb3J0IGludGVyZmFjZSBJU3RhcnRNb3VzZURpbSB7XG4gIGNsaWVudFg6IG51bWJlcjtcbiAgY2xpZW50WTogbnVtYmVyO1xuICB3aWR0aDogbnVtYmVyO1xuICBoZWlnaHQ6IG51bWJlcjtcbiAgdG9wOiBudW1iZXI7XG4gIGxlZnQ6IG51bWJlcjtcbiAgaW1hZ2VUb3A6IG51bWJlcjtcbiAgaW1hZ2VMZWZ0OiBudW1iZXI7XG4gIGltYWdlV2lkdGg6IG51bWJlcjtcbiAgaW1hZ2VIZWlnaHQ6IG51bWJlcjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJU3R5bGVzIHtcbiAgd2lkdGg/OiBudW1iZXI7XG4gIGhlaWdodD86IG51bWJlcjtcbiAgdG9wPzogbnVtYmVyO1xuICBsZWZ0PzogbnVtYmVyO1xuICBkaXNwbGF5Pzogc3RyaW5nO1xuICBzcmM/OiBzdHJpbmc7XG4gIGNsaXA/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCB0eXBlIE1PREVfRURJVCA9ICdzYXZlLWZpbGUnIHwgJ3NhdmUtYXBpJztcblxuIl19
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Generated bundle index. Do not edit.
3
+ */
4
+ export * from './index';
5
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGlicy11aS1jb21wb25lbnRzLWltYWdlLWVkaXRvci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL2xpYnMtdWkvY29tcG9uZW50cy9pbWFnZS1lZGl0b3Ivc3JjL2xpYnMtdWktY29tcG9uZW50cy1pbWFnZS1lZGl0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7O0dBRUc7QUFFSCxjQUFjLFNBQVMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogR2VuZXJhdGVkIGJ1bmRsZSBpbmRleC4gRG8gbm90IGVkaXQuXG4gKi9cblxuZXhwb3J0ICogZnJvbSAnLi9pbmRleCc7XG4iXX0=
@@ -0,0 +1,125 @@
1
+ import { Component, EventEmitter, Input, Output } from "@angular/core";
2
+ import { getDataUrl } from "../defines/image-editor.define";
3
+ import { TranslateModule } from "@ngx-translate/core";
4
+ import { LibsUiComponentsModalComponent } from "@libs-ui/components-modal";
5
+ import { LibsUiComponentsInputsValidComponent } from "@libs-ui/components-inputs-valid";
6
+ import { convertBase64ToBlob, convertBlobToFile, getLabelBySizeFile } from "@libs-ui/utils";
7
+ import * as i0 from "@angular/core";
8
+ import * as i1 from "@ngx-translate/core";
9
+ export class LibsUiComponentsImageEditorResizeComponent {
10
+ buttonsFooter;
11
+ image = new Image();
12
+ originFileSize;
13
+ currentFileSize;
14
+ inputValidFunctionControl;
15
+ resizeData;
16
+ originWidth;
17
+ originHeight;
18
+ src;
19
+ zIndex;
20
+ mimetype;
21
+ outClose = new EventEmitter();
22
+ outSave = new EventEmitter();
23
+ constructor() {
24
+ this.buttonsFooter = [{
25
+ type: 'button-third',
26
+ label: 'i18n_cancel',
27
+ action: async () => this.outClose.emit()
28
+ }, {
29
+ label: 'i18n_save',
30
+ action: async () => {
31
+ this.outSave.emit(this.resizeData);
32
+ this.outClose.emit();
33
+ }
34
+ }];
35
+ this.inputValidFunctionControl = [];
36
+ }
37
+ async ngOnInit() {
38
+ const fileSize = await this.getFileSize();
39
+ this.currentFileSize = fileSize;
40
+ this.originFileSize = fileSize;
41
+ }
42
+ async handlerResizeRatio() {
43
+ let ratio = parseInt(`${this.resizeData.ratio}`);
44
+ if (!ratio || ratio < 0) {
45
+ return;
46
+ }
47
+ if (ratio > 100) {
48
+ ratio = 100;
49
+ this.resizeData.ratio = ratio;
50
+ }
51
+ this.resizeData.width = Math.max(parseInt(`${this.originWidth * ratio / 100}`), 1);
52
+ this.resizeData.height = Math.max(parseInt(`${this.originHeight * ratio / 100}`), 1);
53
+ // this.inputValidFunctionControl.forEach(item => item.detectChanges());
54
+ this.currentFileSize = await this.getFileSize();
55
+ }
56
+ getFileSize() {
57
+ return new Promise((resolve) => {
58
+ this.image.onload = () => {
59
+ const canvas = document.createElement('canvas');
60
+ canvas.width = this.resizeData.width;
61
+ canvas.height = this.resizeData.height;
62
+ const ctx = canvas.getContext('2d');
63
+ if (ctx) {
64
+ ctx.drawImage(this.image, 0, 0, canvas.width, canvas.height);
65
+ }
66
+ const src = getDataUrl(canvas, this.mimetype, this.src);
67
+ const file = convertBase64ToBlob(src);
68
+ resolve(getLabelBySizeFile(convertBlobToFile(file, Date.now().toLocaleString()).size));
69
+ };
70
+ this.image.src = this.src;
71
+ });
72
+ }
73
+ handlerResizeWidth() {
74
+ this.processResizeWidthOrHeight('width', 'height', this.originWidth, this.originHeight);
75
+ }
76
+ handlerResizeHeight() {
77
+ this.processResizeWidthOrHeight('height', 'width', this.originHeight, this.originWidth);
78
+ }
79
+ async processResizeWidthOrHeight(resizeBy, fieldResize, originByValue, originOtherValue) {
80
+ const value = parseInt(`${this.resizeData[resizeBy]}`);
81
+ if (!value || value > originByValue) {
82
+ return;
83
+ }
84
+ this.resizeData[fieldResize] = Math.max(parseInt(`${originOtherValue * value / originByValue}`), 1);
85
+ this.resizeData.ratio = Math.max(parseInt(`${100 * value / originByValue}`), 1);
86
+ this.currentFileSize = await this.getFileSize();
87
+ }
88
+ handlerInputValidFunctionControl(event) {
89
+ this.inputValidFunctionControl.push(event);
90
+ }
91
+ handlerEvent(event) {
92
+ if (event === 'close') {
93
+ this.outClose.emit();
94
+ }
95
+ }
96
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: LibsUiComponentsImageEditorResizeComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
97
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: LibsUiComponentsImageEditorResizeComponent, isStandalone: true, selector: "libs-ui-components-image_editor-resize", inputs: { resizeData: "resizeData", originWidth: "originWidth", originHeight: "originHeight", src: "src", zIndex: "zIndex", mimetype: "mimetype" }, outputs: { outClose: "outClose", outSave: "outSave" }, ngImport: i0, template: "<libs_ui-components-modal [headerConfig]=\"{ignoreHeaderTheme: true}\"\n [mode]=\"'center'\"\n [width]=\"'500px'\"\n [height]=\"'auto'\"\n [title]=\"'i18n_resize' | translate\"\n [zIndex]=\"zIndex\"\n [buttonsFooter]=\"buttonsFooter\"\n (outEvent)=\"handlerEvent($event)\">\n <div class=\"libs-ui-modal-body-custom w-full h-full\">\n <div class=\"flex items-center\">\n <div class=\"libs-ui-font-h7r mr-[4px] text-[#6a7383] w-[100px] shrink-0\">\n {{ 'i18n_ratio_size' | translate }} (%)\n </div>\n <libs_ui-components-inputs-valid [ignoreWidthInput100]=\"true\"\n [classIncludeInput]=\"'w-[132px]'\"\n [dataType]=\"'int'\"\n [fieldNameBind]=\"'ratio'\"\n [(item)]=\"resizeData\"\n [minValueNumber]=\"1\"\n [maxValueNumber]=\"100\"\n [valueUpDownNumber]=\"1\"\n [validRequired]=\"{isRequired: true}\"\n [ignoreShowError]=\"true\"\n (outValueChange)=\"handlerResizeRatio()\"\n (outFunctionsControl)=\"handlerInputValidFunctionControl($event)\" />\n </div>\n <div class=\"mt-[16px] relative\">\n <div class=\"flex items-center\">\n <div class=\"libs-ui-font-h7r mr-[4px] text-[#6a7383] w-[100px] shrink-0\">\n {{ 'i18n_width' | translate }}\n </div>\n <libs_ui-components-inputs-valid [ignoreWidthInput100]=\"true\"\n [classIncludeInput]=\"'w-[102px]'\"\n [dataType]=\"'int'\"\n [maxValueNumber]=\"originWidth\"\n [minValueNumber]=\"1\"\n [fieldNameBind]=\"'width'\"\n [(item)]=\"resizeData\"\n [unitsRight]=\"[{id: 'px', label: 'px'}]\"\n [keySelectedUnitRight]=\"'px'\"\n [valueUpDownNumber]=\"1\"\n (outValueChange)=\"handlerResizeWidth()\"\n (outFunctionsControl)=\"handlerInputValidFunctionControl($event)\" />\n </div>\n <div class=\"flex items-center mt-[8px]\">\n <div class=\"libs-ui-font-h7r mr-[4px] text-[#6a7383] w-[100px] shrink-0\">\n {{ 'i18n_length' | translate }}\n </div>\n <libs_ui-components-inputs-valid [ignoreWidthInput100]=\"true\"\n [classIncludeInput]=\"'w-[102px]'\"\n [dataType]=\"'int'\"\n [minValueNumber]=\"1\"\n [maxValueNumber]=\"originHeight\"\n [fieldNameBind]=\"'height'\"\n [(item)]=\"resizeData\"\n [unitsRight]=\"[{id: 'px', label: 'px'}]\"\n [keySelectedUnitRight]=\"'px'\"\n [valueUpDownNumber]=\"1\"\n (outValueChange)=\"handlerResizeHeight()\"\n (outFunctionsControl)=\"handlerInputValidFunctionControl($event)\" />\n </div>\n <div class=\"absolute flex items-center left-[236px] top-[14px]\">\n <div\n class=\"w-[20px] h-[44px] libs-ui-border-top-general libs-ui-border-right-general libs-ui-border-bottom-general\">\n </div>\n <div class=\"ml-[6px] text-[#9ca2ad] libs-ui-icon-lock\"></div>\n </div>\n </div>\n <div class=\"mt-[16px]\">\n <div class=\"libs-ui-font-h6m text-[#6a7383] mb-[8px]\">{{ 'i18n_size_photo' | translate }}</div>\n <div class=\"libs-ui-font-h5r rounded-[4px] py-[8px] px-[16px] bg-[#f8f9fa] text-[#9ca2ad]\">\n {{ 'i18n_file_size_compare_when_resize' | translate:{current_size: currentFileSize, original_size: originFileSize} }}\n </div>\n </div>\n </div>\n</libs_ui-components-modal>\n", dependencies: [{ kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i1.TranslatePipe, name: "translate" }, { kind: "component", type: LibsUiComponentsModalComponent, selector: "libs_ui-components-modal", inputs: ["show", "mode", "isBackdropTransparent", "isBackgroundTransparentModal", "isSizeBackdropByWidthHeightInput", "hasShadowBoxWhenHiddenBackDropTransparent", "classIncludeModalWrapper", "zIndex", "width", "height", "maxWidth", "maxHeight", "minWidth", "isFullScreen", "disable", "ignoreCommunicateMicroEvent", "headerConfig", "bodyConfig", "footerConfig", "buttonsFooter", "title", "titleUseXssFilter", "titleUseTooltip", "titleUseInnerText"], outputs: ["showChange", "widthChange", "heightChange", "maxWidthChange", "maxHeightChange", "minWidthChange", "disableChange", "buttonsFooterChange", "outScrollContent", "outEvent", "outFunctionControl"] }, { kind: "component", type: LibsUiComponentsInputsValidComponent, selector: "libs_ui-components-inputs-valid", inputs: ["item", "labelConfig", "emitEmptyInDataTypeNumber", "ignoreBlockInputMaxValue", "fieldNameBind", "showCount", "typeComponentSelectItem", "valueComponentSelectItem", "disableComponentSelectItem", "tagInput", "dataType", "typeInput", "modeInput", "resetAutoCompletePassword", "textAreaEnterNotNewLine", "fixedFloat", "acceptNegativeValue", "valueUpDownNumber", "ignoreWidthInput100", "classIncludeInput", "classContainerInput", "readonly", "disable", "noBorder", "backgroundNone", "useColorModeExist", "placeholder", "keepPlaceholderOnly", "classContainerBottomInput", "autoRemoveEmoji", "defaultHeight", "maxHeightTextArea", "minHeightTextArea", "ignoreShowError", "borderError", "iconLeftClass", "popoverContentIconLeft", "iconRightClass", "popoverContentIconRight", "zIndexPopoverContent", "unitsLeft", "configUnitLeft", "keySelectedUnitLeft", "unitsRight", "configUnitRight", "keySelectedUnitRight", "maxValueNumber", "minValueNumber", "ignoreContentLeft", "ignoreContentRight", "isBaselineStyle", "valuePatternShowError", "validPattern", "validRequired", "validMinLength", "validMinValue", "validMaxValue", "validMaxLength", "functionValid", "maxLength", "positionMessageErrorStartInput", "classInclude", "resize", "templateLeftBottomInput", "templateRightBottomInput", "onlyAcceptNegativeValue", "autoAddZeroLessThan10InTypeInt", "maxLengthNumberCount", "classMessageErrorInclude", "ignoreStopPropagationEvent", "ignoreUnitRightClassReadOnly", "paddingRightCustomSpecific", "focusTimeOut"], outputs: ["itemChange", "outValueChange", "outSelect", "outIconLeft", "outIconRight", "outClickButtonLabel", "outSwitchEventLabel", "outLabelRightClick", "outEnterInputEvent", "outHeightAreaChange", "outFunctionsControl", "outFocusAndBlur", "outChangeValueByButtonUpDown"] }] });
98
+ }
99
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: LibsUiComponentsImageEditorResizeComponent, decorators: [{
100
+ type: Component,
101
+ args: [{ selector: 'libs-ui-components-image_editor-resize', standalone: true, imports: [
102
+ TranslateModule, LibsUiComponentsModalComponent, LibsUiComponentsInputsValidComponent
103
+ ], template: "<libs_ui-components-modal [headerConfig]=\"{ignoreHeaderTheme: true}\"\n [mode]=\"'center'\"\n [width]=\"'500px'\"\n [height]=\"'auto'\"\n [title]=\"'i18n_resize' | translate\"\n [zIndex]=\"zIndex\"\n [buttonsFooter]=\"buttonsFooter\"\n (outEvent)=\"handlerEvent($event)\">\n <div class=\"libs-ui-modal-body-custom w-full h-full\">\n <div class=\"flex items-center\">\n <div class=\"libs-ui-font-h7r mr-[4px] text-[#6a7383] w-[100px] shrink-0\">\n {{ 'i18n_ratio_size' | translate }} (%)\n </div>\n <libs_ui-components-inputs-valid [ignoreWidthInput100]=\"true\"\n [classIncludeInput]=\"'w-[132px]'\"\n [dataType]=\"'int'\"\n [fieldNameBind]=\"'ratio'\"\n [(item)]=\"resizeData\"\n [minValueNumber]=\"1\"\n [maxValueNumber]=\"100\"\n [valueUpDownNumber]=\"1\"\n [validRequired]=\"{isRequired: true}\"\n [ignoreShowError]=\"true\"\n (outValueChange)=\"handlerResizeRatio()\"\n (outFunctionsControl)=\"handlerInputValidFunctionControl($event)\" />\n </div>\n <div class=\"mt-[16px] relative\">\n <div class=\"flex items-center\">\n <div class=\"libs-ui-font-h7r mr-[4px] text-[#6a7383] w-[100px] shrink-0\">\n {{ 'i18n_width' | translate }}\n </div>\n <libs_ui-components-inputs-valid [ignoreWidthInput100]=\"true\"\n [classIncludeInput]=\"'w-[102px]'\"\n [dataType]=\"'int'\"\n [maxValueNumber]=\"originWidth\"\n [minValueNumber]=\"1\"\n [fieldNameBind]=\"'width'\"\n [(item)]=\"resizeData\"\n [unitsRight]=\"[{id: 'px', label: 'px'}]\"\n [keySelectedUnitRight]=\"'px'\"\n [valueUpDownNumber]=\"1\"\n (outValueChange)=\"handlerResizeWidth()\"\n (outFunctionsControl)=\"handlerInputValidFunctionControl($event)\" />\n </div>\n <div class=\"flex items-center mt-[8px]\">\n <div class=\"libs-ui-font-h7r mr-[4px] text-[#6a7383] w-[100px] shrink-0\">\n {{ 'i18n_length' | translate }}\n </div>\n <libs_ui-components-inputs-valid [ignoreWidthInput100]=\"true\"\n [classIncludeInput]=\"'w-[102px]'\"\n [dataType]=\"'int'\"\n [minValueNumber]=\"1\"\n [maxValueNumber]=\"originHeight\"\n [fieldNameBind]=\"'height'\"\n [(item)]=\"resizeData\"\n [unitsRight]=\"[{id: 'px', label: 'px'}]\"\n [keySelectedUnitRight]=\"'px'\"\n [valueUpDownNumber]=\"1\"\n (outValueChange)=\"handlerResizeHeight()\"\n (outFunctionsControl)=\"handlerInputValidFunctionControl($event)\" />\n </div>\n <div class=\"absolute flex items-center left-[236px] top-[14px]\">\n <div\n class=\"w-[20px] h-[44px] libs-ui-border-top-general libs-ui-border-right-general libs-ui-border-bottom-general\">\n </div>\n <div class=\"ml-[6px] text-[#9ca2ad] libs-ui-icon-lock\"></div>\n </div>\n </div>\n <div class=\"mt-[16px]\">\n <div class=\"libs-ui-font-h6m text-[#6a7383] mb-[8px]\">{{ 'i18n_size_photo' | translate }}</div>\n <div class=\"libs-ui-font-h5r rounded-[4px] py-[8px] px-[16px] bg-[#f8f9fa] text-[#9ca2ad]\">\n {{ 'i18n_file_size_compare_when_resize' | translate:{current_size: currentFileSize, original_size: originFileSize} }}\n </div>\n </div>\n </div>\n</libs_ui-components-modal>\n" }]
104
+ }], ctorParameters: () => [], propDecorators: { resizeData: [{
105
+ type: Input,
106
+ args: [{ required: true }]
107
+ }], originWidth: [{
108
+ type: Input,
109
+ args: [{ required: true }]
110
+ }], originHeight: [{
111
+ type: Input,
112
+ args: [{ required: true }]
113
+ }], src: [{
114
+ type: Input,
115
+ args: [{ required: true }]
116
+ }], zIndex: [{
117
+ type: Input
118
+ }], mimetype: [{
119
+ type: Input
120
+ }], outClose: [{
121
+ type: Output
122
+ }], outSave: [{
123
+ type: Output
124
+ }] } });
125
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVzaXplLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMtdWkvY29tcG9uZW50cy9pbWFnZS1lZGl0b3Ivc3JjL3Jlc2l6ZS9yZXNpemUuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy11aS9jb21wb25lbnRzL2ltYWdlLWVkaXRvci9zcmMvcmVzaXplL3Jlc2l6ZS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQVUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQy9FLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUM1RCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFJdEQsT0FBTyxFQUFFLDhCQUE4QixFQUFvQixNQUFNLDJCQUEyQixDQUFDO0FBQzdGLE9BQU8sRUFBRSxvQ0FBb0MsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBQ3hGLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxpQkFBaUIsRUFBRSxrQkFBa0IsRUFBRSxNQUFNLGdCQUFnQixDQUFDOzs7QUFXNUYsTUFBTSxPQUFPLDBDQUEwQztJQUUzQyxhQUFhLENBQWlCO0lBQzlCLEtBQUssR0FBRyxJQUFJLEtBQUssRUFBRSxDQUFDO0lBQ3BCLGNBQWMsQ0FBVTtJQUN4QixlQUFlLENBQVU7SUFFM0IseUJBQXlCLENBQXlDO0lBRS9DLFVBQVUsQ0FBZTtJQUN6QixXQUFXLENBQVU7SUFDckIsWUFBWSxDQUFVO0lBQ3RCLEdBQUcsQ0FBVTtJQUMvQixNQUFNLENBQVU7SUFDaEIsUUFBUSxDQUFVO0lBRVIsUUFBUSxHQUFHLElBQUksWUFBWSxFQUFRLENBQUM7SUFDcEMsT0FBTyxHQUFHLElBQUksWUFBWSxFQUFlLENBQUM7SUFFN0Q7UUFDRSxJQUFJLENBQUMsYUFBYSxH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aEYsSUFBSSxDQUFDLGVBQWUsR0FBRyxNQUFNLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztJQUNsRCxDQUFDO0lBRVMsZ0NBQWdDLENBQUMsS0FBc0M7UUFDL0UsSUFBSSxDQUFDLHlCQUF5QixDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUM3QyxDQUFDO0lBRVMsWUFBWSxDQUFDLEtBQXVCO1FBQzVDLElBQUksS0FBSyxLQUFLLE9BQU8sRUFBRSxDQUFDO1lBQ3RCLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDdkIsQ0FBQztJQUNILENBQUM7d0dBeEdVLDBDQUEwQzs0RkFBMUMsMENBQTBDLDZTQ25CdkQsODFHQTRFQSwyQ0Q1REksZUFBZSw0RkFBRSw4QkFBOEIsbXRCQUFFLG9DQUFvQzs7NEZBRzVFLDBDQUEwQztrQkFUdEQsU0FBUzsrQkFFRSx3Q0FBd0MsY0FFdEMsSUFBSSxXQUNQO3dCQUNQLGVBQWUsRUFBRSw4QkFBOEIsRUFBRSxvQ0FBb0M7cUJBQ3RGO3dEQVcwQixVQUFVO3NCQUFwQyxLQUFLO3VCQUFDLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRTtnQkFDRSxXQUFXO3NCQUFyQyxLQUFLO3VCQUFDLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRTtnQkFDRSxZQUFZO3NCQUF0QyxLQUFLO3VCQUFDLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRTtnQkFDRSxHQUFHO3NCQUE3QixLQUFLO3VCQUFDLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRTtnQkFDaEIsTUFBTTtzQkFBZCxLQUFLO2dCQUNHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBRWEsUUFBUTtzQkFBMUIsTUFBTTtnQkFDWSxPQUFPO3NCQUF6QixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBFdmVudEVtaXR0ZXIsIElucHV0LCBPbkluaXQsIE91dHB1dCB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XG5pbXBvcnQgeyBnZXREYXRhVXJsIH0gZnJvbSBcIi4uL2RlZmluZXMvaW1hZ2UtZWRpdG9yLmRlZmluZVwiO1xuaW1wb3J0IHsgVHJhbnNsYXRlTW9kdWxlIH0gZnJvbSBcIkBuZ3gtdHJhbnNsYXRlL2NvcmVcIjtcbmltcG9ydCB7IElCdXR0b24gfSBmcm9tIFwiQGxpYnMtdWkvY29tcG9uZW50cy1idXR0b25zLWJ1dHRvblwiO1xuaW1wb3J0IHsgSUlucHV0VmFsaWRGdW5jdGlvbkNvbnRyb2xFdmVudCB9IGZyb20gXCJAbGlicy11aS9jb21wb25lbnRzLWlucHV0cy12YWxpZFwiO1xuaW1wb3J0IHsgSVJlc2l6ZURhdGEgfSBmcm9tIFwiLi4vaW50ZXJmYWNlcy9pbWFnZS1lZGl0b3IuaW50ZXJmYWNlXCI7XG5pbXBvcnQgeyBMaWJzVWlDb21wb25lbnRzTW9kYWxDb21wb25lbnQsIFRZUEVfTU9EQUxfRVZFTlQgfSBmcm9tIFwiQGxpYnMtdWkvY29tcG9uZW50cy1tb2RhbFwiO1xuaW1wb3J0IHsgTGlic1VpQ29tcG9uZW50c0lucHV0c1ZhbGlkQ29tcG9uZW50IH0gZnJvbSBcIkBsaWJzLXVpL2NvbXBvbmVudHMtaW5wdXRzLXZhbGlkXCI7XG5pbXBvcnQgeyBjb252ZXJ0QmFzZTY0VG9CbG9iLCBjb252ZXJ0QmxvYlRvRmlsZSwgZ2V0TGFiZWxCeVNpemVGaWxlIH0gZnJvbSBcIkBsaWJzLXVpL3V0aWxzXCI7XG5cbkBDb21wb25lbnQoe1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQGFuZ3VsYXItZXNsaW50L2NvbXBvbmVudC1zZWxlY3RvclxuICBzZWxlY3RvcjogJ2xpYnMtdWktY29tcG9uZW50cy1pbWFnZV9lZGl0b3ItcmVzaXplJyxcbiAgdGVtcGxhdGVVcmw6ICcuL3Jlc2l6ZS5jb21wb25lbnQuaHRtbCcsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtcbiAgICBUcmFuc2xhdGVNb2R1bGUsIExpYnNVaUNvbXBvbmVudHNNb2RhbENvbXBvbmVudCwgTGlic1VpQ29tcG9uZW50c0lucHV0c1ZhbGlkQ29tcG9uZW50XG4gIF1cbn0pXG5leHBvcnQgY2xhc3MgTGlic1VpQ29tcG9uZW50c0ltYWdlRWRpdG9yUmVzaXplQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcblxuICBwcm90ZWN0ZWQgYnV0dG9uc0Zvb3RlcjogQXJyYXk8SUJ1dHRvbj47XG4gIHByb3RlY3RlZCBpbWFnZSA9IG5ldyBJbWFnZSgpO1xuICBwcm90ZWN0ZWQgb3JpZ2luRmlsZVNpemUhOiBzdHJpbmc7XG4gIHByb3RlY3RlZCBjdXJyZW50RmlsZVNpemUhOiBzdHJpbmc7XG5cbiAgcHJpdmF0ZSBpbnB1dFZhbGlkRnVuY3Rpb25Db250cm9sOiBBcnJheTxJSW5wdXRWYWxpZEZ1bmN0aW9uQ29udHJvbEV2ZW50PjtcblxuICBASW5wdXQoeyByZXF1aXJlZDogdHJ1ZSB9KSByZXNpemVEYXRhITogSVJlc2l6ZURhdGE7XG4gIEBJbnB1dCh7IHJlcXVpcmVkOiB0cnVlIH0pIG9yaWdpbldpZHRoITogbnVtYmVyO1xuICBASW5wdXQoeyByZXF1aXJlZDogdHJ1ZSB9KSBvcmlnaW5IZWlnaHQhOiBudW1iZXI7XG4gIEBJbnB1dCh7IHJlcXVpcmVkOiB0cnVlIH0pIHNyYyE6IHN0cmluZztcbiAgQElucHV0KCkgekluZGV4PzogbnVtYmVyO1xuICBASW5wdXQoKSBtaW1ldHlwZT86IHN0cmluZztcblxuICBAT3V0cHV0KCkgcmVhZG9ubHkgb3V0Q2xvc2UgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG4gIEBPdXRwdXQoKSByZWFkb25seSBvdXRTYXZlID0gbmV3IEV2ZW50RW1pdHRlcjxJUmVzaXplRGF0YT4oKTtcblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aGlzLmJ1dHRvbnNGb290ZXIgPSBbe1xuICAgICAgdHlwZTogJ2J1dHRvbi10aGlyZCcsXG4gICAgICBsYWJlbDogJ2kxOG5fY2FuY2VsJyxcbiAgICAgIGFjdGlvbjogYXN5bmMgKCkgPT4gdGhpcy5vdXRDbG9zZS5lbWl0KClcbiAgICB9LCB7XG4gICAgICBsYWJlbDogJ2kxOG5fc2F2ZScsXG4gICAgICBhY3Rpb246IGFzeW5jICgpID0+IHtcbiAgICAgICAgdGhpcy5vdXRTYXZlLmVtaXQodGhpcy5yZXNpemVEYXRhKTtcbiAgICAgICAgdGhpcy5vdXRDbG9zZS5lbWl0KCk7XG4gICAgICB9XG4gICAgfV07XG4gICAgdGhpcy5pbnB1dFZhbGlkRnVuY3Rpb25Db250cm9sID0gW107XG4gIH1cblxuICBhc3luYyBuZ09uSW5pdCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBmaWxlU2l6ZSA9IGF3YWl0IHRoaXMuZ2V0RmlsZVNpemUoKTtcblxuICAgIHRoaXMuY3VycmVudEZpbGVTaXplID0gZmlsZVNpemU7XG4gICAgdGhpcy5vcmlnaW5GaWxlU2l6ZSA9IGZpbGVTaXplO1xuICB9XG5cbiAgcHJvdGVjdGVkIGFzeW5jIGhhbmRsZXJSZXNpemVSYXRpbygpIHtcbiAgICBsZXQgcmF0aW8gPSBwYXJzZUludChgJHt0aGlzLnJlc2l6ZURhdGEucmF0aW99YCk7XG5cbiAgICBpZiAoIXJhdGlvIHx8IHJhdGlvIDwgMCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAocmF0aW8gPiAxMDApIHtcbiAgICAgIHJhdGlvID0gMTAwO1xuICAgICAgdGhpcy5yZXNpemVEYXRhLnJhdGlvID0gcmF0aW87XG4gICAgfVxuICAgIHRoaXMucmVzaXplRGF0YS53aWR0aCA9IE1hdGgubWF4KHBhcnNlSW50KGAke3RoaXMub3JpZ2luV2lkdGggKiByYXRpbyAvIDEwMH1gKSwgMSk7XG4gICAgdGhpcy5yZXNpemVEYXRhLmhlaWdodCA9IE1hdGgubWF4KHBhcnNlSW50KGAke3RoaXMub3JpZ2luSGVpZ2h0ICogcmF0aW8gLyAxMDB9YCksIDEpO1xuICAgIC8vIHRoaXMuaW5wdXRWYWxpZEZ1bmN0aW9uQ29udHJvbC5mb3JFYWNoKGl0ZW0gPT4gaXRlbS5kZXRlY3RDaGFuZ2VzKCkpO1xuICAgIHRoaXMuY3VycmVudEZpbGVTaXplID0gYXdhaXQgdGhpcy5nZXRGaWxlU2l6ZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRGaWxlU2l6ZSgpIHtcbiAgICByZXR1cm4gbmV3IFByb21pc2U8c3RyaW5nPigocmVzb2x2ZSkgPT4ge1xuICAgICAgdGhpcy5pbWFnZS5vbmxvYWQgPSAoKSA9PiB7XG4gICAgICAgIGNvbnN0IGNhbnZhcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2NhbnZhcycpO1xuXG4gICAgICAgIGNhbnZhcy53aWR0aCA9IHRoaXMucmVzaXplRGF0YS53aWR0aDtcbiAgICAgICAgY2FudmFzLmhlaWdodCA9IHRoaXMucmVzaXplRGF0YS5oZWlnaHQ7XG4gICAgICAgIGNvbnN0IGN0eCA9IGNhbnZhcy5nZXRDb250ZXh0KCcyZCcpO1xuICAgICAgICBpZiAoY3R4KSB7XG4gICAgICAgICAgY3R4LmRyYXdJbWFnZSh0aGlzLmltYWdlLCAwLCAwLCBjYW52YXMud2lkdGgsIGNhbnZhcy5oZWlnaHQpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHNyYyA9IGdldERhdGFVcmwoY2FudmFzLCB0aGlzLm1pbWV0eXBlLCB0aGlzLnNyYyk7XG4gICAgICAgIGNvbnN0IGZpbGUgPSBjb252ZXJ0QmFzZTY0VG9CbG9iKHNyYyk7XG5cbiAgICAgICAgcmVzb2x2ZShnZXRMYWJlbEJ5U2l6ZUZpbGUoY29udmVydEJsb2JUb0ZpbGUoZmlsZSwgRGF0ZS5ub3coKS50b0xvY2FsZVN0cmluZygpKS5zaXplKSk7XG4gICAgICB9O1xuICAgICAgdGhpcy5pbWFnZS5zcmMgPSB0aGlzLnNyYztcbiAgICB9KTtcbiAgfVxuXG4gIHByb3RlY3RlZCBoYW5kbGVyUmVzaXplV2lkdGgoKSB7XG4gICAgdGhpcy5wcm9jZXNzUmVzaXplV2lkdGhPckhlaWdodCgnd2lkdGgnLCAnaGVpZ2h0JywgdGhpcy5vcmlnaW5XaWR0aCwgdGhpcy5vcmlnaW5IZWlnaHQpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGhhbmRsZXJSZXNpemVIZWlnaHQoKSB7XG4gICAgdGhpcy5wcm9jZXNzUmVzaXplV2lkdGhPckhlaWdodCgnaGVpZ2h0JywgJ3dpZHRoJywgdGhpcy5vcmlnaW5IZWlnaHQsIHRoaXMub3JpZ2luV2lkdGgpO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBwcm9jZXNzUmVzaXplV2lkdGhPckhlaWdodChyZXNpemVCeTogJ3dpZHRoJyB8ICdoZWlnaHQnLCBmaWVsZFJlc2l6ZTogJ3dpZHRoJyB8ICdoZWlnaHQnLCBvcmlnaW5CeVZhbHVlOiBudW1iZXIsIG9yaWdpbk90aGVyVmFsdWU6IG51bWJlcikge1xuICAgIGNvbnN0IHZhbHVlID0gcGFyc2VJbnQoYCR7dGhpcy5yZXNpemVEYXRhW3Jlc2l6ZUJ5XX1gKTtcblxuICAgIGlmICghdmFsdWUgfHwgdmFsdWUgPiBvcmlnaW5CeVZhbHVlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMucmVzaXplRGF0YVtmaWVsZFJlc2l6ZV0gPSBNYXRoLm1heChwYXJzZUludChgJHtvcmlnaW5PdGhlclZhbHVlICogdmFsdWUgLyBvcmlnaW5CeVZhbHVlfWApLCAxKTtcbiAgICB0aGlzLnJlc2l6ZURhdGEucmF0aW8gPSBNYXRoLm1heChwYXJzZUludChgJHsxMDAgKiB2YWx1ZSAvIG9yaWdpbkJ5VmFsdWV9YCksIDEpO1xuICAgIHRoaXMuY3VycmVudEZpbGVTaXplID0gYXdhaXQgdGhpcy5nZXRGaWxlU2l6ZSgpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGhhbmRsZXJJbnB1dFZhbGlkRnVuY3Rpb25Db250cm9sKGV2ZW50OiBJSW5wdXRWYWxpZEZ1bmN0aW9uQ29udHJvbEV2ZW50KSB7XG4gICAgdGhpcy5pbnB1dFZhbGlkRnVuY3Rpb25Db250cm9sLnB1c2goZXZlbnQpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGhhbmRsZXJFdmVudChldmVudDogVFlQRV9NT0RBTF9FVkVOVCkge1xuICAgIGlmIChldmVudCA9PT0gJ2Nsb3NlJykge1xuICAgICAgdGhpcy5vdXRDbG9zZS5lbWl0KCk7XG4gICAgfVxuICB9XG5cbn0iLCI8bGlic191aS1jb21wb25lbnRzLW1vZGFsIFtoZWFkZXJDb25maWddPVwie2lnbm9yZUhlYWRlclRoZW1lOiB0cnVlfVwiXG4gIFttb2RlXT1cIidjZW50ZXInXCJcbiAgW3dpZHRoXT1cIic1MDBweCdcIlxuICBbaGVpZ2h0XT1cIidhdXRvJ1wiXG4gIFt0aXRsZV09XCInaTE4bl9yZXNpemUnIHwgdHJhbnNsYXRlXCJcbiAgW3pJbmRleF09XCJ6SW5kZXhcIlxuICBbYnV0dG9uc0Zvb3Rlcl09XCJidXR0b25zRm9vdGVyXCJcbiAgKG91dEV2ZW50KT1cImhhbmRsZXJFdmVudCgkZXZlbnQpXCI+XG4gIDxkaXYgY2xhc3M9XCJsaWJzLXVpLW1vZGFsLWJvZHktY3VzdG9tIHctZnVsbCBoLWZ1bGxcIj5cbiAgICA8ZGl2IGNsYXNzPVwiZmxleCBpdGVtcy1jZW50ZXJcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJsaWJzLXVpLWZvbnQtaDdyIG1yLVs0cHhdIHRleHQtWyM2YTczODNdIHctWzEwMHB4XSBzaHJpbmstMFwiPlxuICAgICAgICB7eyAnaTE4bl9yYXRpb19zaXplJyB8IHRyYW5zbGF0ZSB9fSAoJSlcbiAgICAgIDwvZGl2PlxuICAgICAgPGxpYnNfdWktY29tcG9uZW50cy1pbnB1dHMtdmFsaWQgW2lnbm9yZVdpZHRoSW5wdXQxMDBdPVwidHJ1ZVwiXG4gICAgICAgIFtjbGFzc0luY2x1ZGVJbnB1dF09XCIndy1bMTMycHhdJ1wiXG4gICAgICAgIFtkYXRhVHlwZV09XCInaW50J1wiXG4gICAgICAgIFtmaWVsZE5hbWVCaW5kXT1cIidyYXRpbydcIlxuICAgICAgICBbKGl0ZW0pXT1cInJlc2l6ZURhdGFcIlxuICAgICAgICBbbWluVmFsdWVOdW1iZXJdPVwiMVwiXG4gICAgICAgIFttYXhWYWx1ZU51bWJlcl09XCIxMDBcIlxuICAgICAgICBbdmFsdWVVcERvd25OdW1iZXJdPVwiMVwiXG4gICAgICAgIFt2YWxpZFJlcXVpcmVkXT1cIntpc1JlcXVpcmVkOiB0cnVlfVwiXG4gICAgICAgIFtpZ25vcmVTaG93RXJyb3JdPVwidHJ1ZVwiXG4gICAgICAgIChvdXRWYWx1ZUNoYW5nZSk9XCJoYW5kbGVyUmVzaXplUmF0aW8oKVwiXG4gICAgICAgIChvdXRGdW5jdGlvbnNDb250cm9sKT1cImhhbmRsZXJJbnB1dFZhbGlkRnVuY3Rpb25Db250cm9sKCRldmVudClcIiAvPlxuICAgIDwvZGl2PlxuICAgIDxkaXYgY2xhc3M9XCJtdC1bMTZweF0gcmVsYXRpdmVcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGl0ZW1zLWNlbnRlclwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwibGlicy11aS1mb250LWg3ciBtci1bNHB4XSB0ZXh0LVsjNmE3MzgzXSB3LVsxMDBweF0gc2hyaW5rLTBcIj5cbiAgICAgICAgICB7eyAnaTE4bl93aWR0aCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxsaWJzX3VpLWNvbXBvbmVudHMtaW5wdXRzLXZhbGlkIFtpZ25vcmVXaWR0aElucHV0MTAwXT1cInRydWVcIlxuICAgICAgICAgIFtjbGFzc0luY2x1ZGVJbnB1dF09XCIndy1bMTAycHhdJ1wiXG4gICAgICAgICAgW2RhdGFUeXBlXT1cIidpbnQnXCJcbiAgICAgICAgICBbbWF4VmFsdWVOdW1iZXJdPVwib3JpZ2luV2lkdGhcIlxuICAgICAgICAgIFttaW5WYWx1ZU51bWJlcl09XCIxXCJcbiAgICAgICAgICBbZmllbGROYW1lQmluZF09XCInd2lkdGgnXCJcbiAgICAgICAgICBbKGl0ZW0pXT1cInJlc2l6ZURhdGFcIlxuICAgICAgICAgIFt1bml0c1JpZ2h0XT1cIlt7aWQ6ICdweCcsIGxhYmVsOiAncHgnfV1cIlxuICAgICAgICAgIFtrZXlTZWxlY3RlZFVuaXRSaWdodF09XCIncHgnXCJcbiAgICAgICAgICBbdmFsdWVVcERvd25OdW1iZXJdPVwiMVwiXG4gICAgICAgICAgKG91dFZhbHVlQ2hhbmdlKT1cImhhbmRsZXJSZXNpemVXaWR0aCgpXCJcbiAgICAgICAgICAob3V0RnVuY3Rpb25zQ29udHJvbCk9XCJoYW5kbGVySW5wdXRWYWxpZEZ1bmN0aW9uQ29udHJvbCgkZXZlbnQpXCIgLz5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz1cImZsZXggaXRlbXMtY2VudGVyIG10LVs4cHhdXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJsaWJzLXVpLWZvbnQtaDdyIG1yLVs0cHhdIHRleHQtWyM2YTczODNdIHctWzEwMHB4XSBzaHJpbmstMFwiPlxuICAgICAgICAgIHt7ICdpMThuX2xlbmd0aCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxsaWJzX3VpLWNvbXBvbmVudHMtaW5wdXRzLXZhbGlkIFtpZ25vcmVXaWR0aElucHV0MTAwXT1cInRydWVcIlxuICAgICAgICAgIFtjbGFzc0luY2x1ZGVJbnB1dF09XCIndy1bMTAycHhdJ1wiXG4gICAgICAgICAgW2RhdGFUeXBlXT1cIidpbnQnXCJcbiAgICAgICAgICBbbWluVmFsdWVOdW1iZXJdPVwiMVwiXG4gICAgICAgICAgW21heFZhbHVlTnVtYmVyXT1cIm9yaWdpbkhlaWdodFwiXG4gICAgICAgICAgW2ZpZWxkTmFtZUJpbmRdPVwiJ2hlaWdodCdcIlxuICAgICAgICAgIFsoaXRlbSldPVwicmVzaXplRGF0YVwiXG4gICAgICAgICAgW3VuaXRzUmlnaHRdPVwiW3tpZDogJ3B4JywgbGFiZWw6ICdweCd9XVwiXG4gICAgICAgICAgW2tleVNlbGVjdGVkVW5pdFJpZ2h0XT1cIidweCdcIlxuICAgICAgICAgIFt2YWx1ZVVwRG93bk51bWJlcl09XCIxXCJcbiAgICAgICAgICAob3V0VmFsdWVDaGFuZ2UpPVwiaGFuZGxlclJlc2l6ZUhlaWdodCgpXCJcbiAgICAgICAgICAob3V0RnVuY3Rpb25zQ29udHJvbCk9XCJoYW5kbGVySW5wdXRWYWxpZEZ1bmN0aW9uQ29udHJvbCgkZXZlbnQpXCIgLz5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz1cImFic29sdXRlIGZsZXggaXRlbXMtY2VudGVyIGxlZnQtWzIzNnB4XSB0b3AtWzE0cHhdXCI+XG4gICAgICAgIDxkaXZcbiAgICAgICAgICBjbGFzcz1cInctWzIwcHhdIGgtWzQ0cHhdIGxpYnMtdWktYm9yZGVyLXRvcC1nZW5lcmFsIGxpYnMtdWktYm9yZGVyLXJpZ2h0LWdlbmVyYWwgbGlicy11aS1ib3JkZXItYm90dG9tLWdlbmVyYWxcIj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJtbC1bNnB4XSB0ZXh0LVsjOWNhMmFkXSBsaWJzLXVpLWljb24tbG9ja1wiPjwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gICAgPGRpdiBjbGFzcz1cIm10LVsxNnB4XVwiPlxuICAgICAgPGRpdiBjbGFzcz1cImxpYnMtdWktZm9udC1oNm0gdGV4dC1bIzZhNzM4M10gbWItWzhweF1cIj57eyAnaTE4bl9zaXplX3Bob3RvJyB8IHRyYW5zbGF0ZSB9fTwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz1cImxpYnMtdWktZm9udC1oNXIgcm91bmRlZC1bNHB4XSBweS1bOHB4XSBweC1bMTZweF0gYmctWyNmOGY5ZmFdIHRleHQtWyM5Y2EyYWRdXCI+XG4gICAgICAgIHt7ICdpMThuX2ZpbGVfc2l6ZV9jb21wYXJlX3doZW5fcmVzaXplJyB8IHRyYW5zbGF0ZTp7Y3VycmVudF9zaXplOiBjdXJyZW50RmlsZVNpemUsIG9yaWdpbmFsX3NpemU6IG9yaWdpbkZpbGVTaXplfSB9fVxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuPC9saWJzX3VpLWNvbXBvbmVudHMtbW9kYWw+XG4iXX0=