atr-components 0.2.418 → 0.2.419

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 (72) hide show
  1. package/README.md +24 -24
  2. package/esm2020/atr-components.module.mjs +1 -1
  3. package/esm2020/atr-public-api.mjs +1 -1
  4. package/esm2020/lib/hello/hello.component.mjs +3 -3
  5. package/esm2020/lib/hello/hello.module.mjs +1 -1
  6. package/esm2020/lib/shared/img-canvas/img-canvas.component.mjs +3 -3
  7. package/esm2020/lib/shared/select-icons/select-icons.component.mjs +3 -3
  8. package/esm2020/lib/shared/table/table.component.mjs +3 -3
  9. package/esm2022/atr-components.mjs +5 -0
  10. package/esm2022/atr-components.module.mjs +36 -0
  11. package/esm2022/atr-public-api.mjs +55 -0
  12. package/esm2022/core/animations/animations.mjs +10 -0
  13. package/esm2022/core/animations/fly-in.mjs +19 -0
  14. package/esm2022/core/animations/scroll-screen.mjs +23 -0
  15. package/esm2022/core/auth/auth.guard.mjs +37 -0
  16. package/esm2022/core/base/atr-common.mjs +48 -0
  17. package/esm2022/core/directive/error-img.directive.mjs +31 -0
  18. package/esm2022/core/directive/hq-spin.directive.mjs +48 -0
  19. package/esm2022/core/directive/role.directive.mjs +69 -0
  20. package/esm2022/core/interceptor/base.interceptor.mjs +165 -0
  21. package/esm2022/core/ngz-module/cus-zorro-antd.module.mjs +292 -0
  22. package/esm2022/core/pipe/china-num.pipe.mjs +36 -0
  23. package/esm2022/core/pipe/count.pipe.mjs +34 -0
  24. package/esm2022/core/pipe/day.pipe.mjs +24 -0
  25. package/esm2022/core/pipe/defaultVal.pipe.mjs +23 -0
  26. package/esm2022/core/pipe/dicts.pipe.mjs +28 -0
  27. package/esm2022/core/pipe/image-pipe.pipe.mjs +17 -0
  28. package/esm2022/core/pipe/is-empty.pipe.mjs +20 -0
  29. package/esm2022/core/pipe/is-not-empty.pipe.mjs +17 -0
  30. package/esm2022/core/pipe/oss.pipe.mjs +17 -0
  31. package/esm2022/core/pipe/ossStatic.pipe.mjs +17 -0
  32. package/esm2022/core/pipe/pipe-module.module.mjs +38 -0
  33. package/esm2022/core/pipe/remove-html.pipe.mjs +21 -0
  34. package/esm2022/core/pipe/safe-compute.pipe.mjs +23 -0
  35. package/esm2022/core/pipe/safe-html.pipe.mjs +20 -0
  36. package/esm2022/core/pipe/safe-url.pipe.mjs +20 -0
  37. package/esm2022/core/routereuse/atr-reuse-strategy.mjs +79 -0
  38. package/esm2022/core/services/dict/dict.service.mjs +152 -0
  39. package/esm2022/core/services/http.service.mjs +306 -0
  40. package/esm2022/core/services/menu.service.mjs +130 -0
  41. package/esm2022/core/services/upload-oss.service.mjs +74 -0
  42. package/esm2022/core/utils/ToolsUtil.mjs +622 -0
  43. package/esm2022/core/utils/localstorage.util.mjs +94 -0
  44. package/esm2022/core/utils/sessionstorage.util.mjs +73 -0
  45. package/esm2022/lib/hello/hello.component.mjs +15 -0
  46. package/esm2022/lib/hello/hello.module.mjs +20 -0
  47. package/esm2022/lib/shared/atr-shared.module.mjs +239 -0
  48. package/esm2022/lib/shared/echarts/echarts.component.mjs +77 -0
  49. package/esm2022/lib/shared/form/form.component.mjs +592 -0
  50. package/esm2022/lib/shared/img-canvas/img-canvas.component.mjs +132 -0
  51. package/esm2022/lib/shared/local-upload/local-upload.component.mjs +68 -0
  52. package/esm2022/lib/shared/quill-editor/quill-editor.component.mjs +254 -0
  53. package/esm2022/lib/shared/select-icons/select-icons.component.mjs +90 -0
  54. package/esm2022/lib/shared/select-tree/select-tree.component.mjs +55 -0
  55. package/esm2022/lib/shared/service/busi.service.mjs +69 -0
  56. package/esm2022/lib/shared/share.service.mjs +107 -0
  57. package/esm2022/lib/shared/table/table-form-item/table-form-item.component.mjs +96 -0
  58. package/esm2022/lib/shared/table/table-td/table-td.component.mjs +165 -0
  59. package/esm2022/lib/shared/table/table.component.mjs +749 -0
  60. package/esm2022/lib/shared/upload/upload.component.mjs +274 -0
  61. package/esm2022/lib/shared/validators/atr-validtors.mjs +9 -0
  62. package/esm2022/lib/shared/video/video.component.mjs +16 -0
  63. package/esm2022/lib/shared/view-form/view-form.component.mjs +186 -0
  64. package/fesm2015/atr-components.mjs +8 -8
  65. package/fesm2015/atr-components.mjs.map +1 -1
  66. package/fesm2020/atr-components.mjs +8 -8
  67. package/fesm2020/atr-components.mjs.map +1 -1
  68. package/fesm2022/atr-components.mjs +5564 -0
  69. package/fesm2022/atr-components.mjs.map +1 -0
  70. package/index.d.ts +5 -0
  71. package/lib/shared/table/table.component.d.ts +1 -1
  72. package/package.json +1 -1
@@ -0,0 +1,132 @@
1
+ import { Component, EventEmitter, Input, Output, ViewChild } from '@angular/core';
2
+ import * as i0 from "@angular/core";
3
+ export class ImgCanvasComponent {
4
+ set url(url) {
5
+ // if (url && url.indexOf('?v=') < 0) {
6
+ // if (url.indexOf("?") < 0) {
7
+ // url += "?";
8
+ //
9
+ // }
10
+ // url += "v=" + new Date().getTime()
11
+ // }
12
+ this.imgUrl = url;
13
+ }
14
+ constructor(elementRef) {
15
+ this.elementRef = elementRef;
16
+ this.needTime = false;
17
+ this.width = 800;
18
+ this.height = 800;
19
+ this.clipArr = [];
20
+ this.rotateNum = 0;
21
+ this.loadOver = new EventEmitter();
22
+ this.needContextmenu = false;
23
+ }
24
+ ngOnInit() {
25
+ }
26
+ getCanvasFull() {
27
+ let imgW = this.img.width; //图片的宽
28
+ let imgH = this.img.height; //图片的高
29
+ let cW = this.width;
30
+ let cH = this.height;
31
+ let rateW = imgH / imgW; //比例
32
+ let rateH = imgW / imgH; //比例
33
+ if (imgW > imgH) {
34
+ imgW = this.width;
35
+ imgH = imgW * rateW;
36
+ if (imgH > cH) {
37
+ imgH = cH;
38
+ imgW = imgH * rateH;
39
+ }
40
+ }
41
+ else {
42
+ imgH = this.height;
43
+ imgW = imgH * rateH;
44
+ if (imgW > cW) {
45
+ imgW = cW;
46
+ imgH = imgW * rateW;
47
+ }
48
+ }
49
+ // imgH = this.canvasDom.offsetHeight
50
+ // imgW = this.canvasDom.offsetWidth
51
+ // let canvasH = imgH * rate
52
+ // if (canvasH > this.height) {
53
+ // canvasH = this.height
54
+ // rate = canvasH / imgH
55
+ // canvasW = imgW * rate
56
+ // }
57
+ console.log("图片宽高", imgW + ";" + imgH);
58
+ return {
59
+ imgW: imgW,
60
+ imgH: imgH
61
+ };
62
+ }
63
+ initImg(needSession = true) {
64
+ this.canvasDom = this.canvas1.nativeElement;
65
+ // this.canvasDom = document.getElementById(this.canvasId);
66
+ //检测支持性
67
+ if (!this.canvasDom.getContext('2d'))
68
+ return;
69
+ //获得 2d 上下文对象
70
+ let context1 = this.canvasDom.getContext('2d');
71
+ let img = new Image();
72
+ img.setAttribute('crossOrigin', 'anonymous');
73
+ if (this.needTime) {
74
+ if (this.imgUrl.indexOf("?") < 0) {
75
+ this.imgUrl += "?";
76
+ }
77
+ this.imgUrl += "v=" + new Date().getTime();
78
+ }
79
+ img.src = this.imgUrl;
80
+ img.onload = () => {
81
+ this.img = img;
82
+ const { imgW, imgH } = this.getCanvasFull();
83
+ this.canvasDom.width = this.width;
84
+ this.canvasDom.height = this.height;
85
+ if (this.clipArr && this.clipArr.length > 0) {
86
+ this.goClip(context1);
87
+ }
88
+ // 参数 1:要绘制的 img 参数 2、3:绘制的 img 在 canvas 中的坐标 参数4,5是width,height
89
+ context1.drawImage(this.img, 0, 0, this.width, this.height);
90
+ this.loadOver.emit({ code: 'loadOver' });
91
+ };
92
+ }
93
+ goClip(context) {
94
+ context.beginPath();
95
+ context.moveTo(this.clipArr[0].x1, this.clipArr[0].y1);
96
+ this.clipArr.forEach((item, index) => {
97
+ if (index > 0) {
98
+ context.lineTo(item.x1, item.y1);
99
+ }
100
+ });
101
+ context.lineTo(this.clipArr[0].x1, this.clipArr[0].y1);
102
+ context.clip();
103
+ }
104
+ ngAfterViewInit() {
105
+ setTimeout(() => {
106
+ console.log('当前组件宽高', this.elementRef.nativeElement.offsetHeight);
107
+ this.initImg();
108
+ }, 300);
109
+ }
110
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.2.4", ngImport: i0, type: ImgCanvasComponent, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component }); }
111
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.2.4", type: ImgCanvasComponent, selector: "app-img", inputs: { needTime: "needTime", url: "url", clipArr: "clipArr", rotateNum: "rotateNum", needContextmenu: "needContextmenu" }, outputs: { loadOver: "loadOver" }, viewQueries: [{ propertyName: "canvas1", first: true, predicate: ["canvas1"], descendants: true }], ngImport: i0, template: "<canvas #canvas1 style=\"width: 100%;height: 100%;\" oncontextmenu=\"return needContextmenu\">\n \u60A8\u7684\u6D4F\u89C8\u5668\u4E0D\u652F\u6301\u753B\u5E03\uFF01\n</canvas>\n<ng-content></ng-content>\n", styles: [""] }); }
112
+ }
113
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.4", ngImport: i0, type: ImgCanvasComponent, decorators: [{
114
+ type: Component,
115
+ args: [{ selector: 'app-img', template: "<canvas #canvas1 style=\"width: 100%;height: 100%;\" oncontextmenu=\"return needContextmenu\">\n \u60A8\u7684\u6D4F\u89C8\u5668\u4E0D\u652F\u6301\u753B\u5E03\uFF01\n</canvas>\n<ng-content></ng-content>\n" }]
116
+ }], ctorParameters: () => [{ type: i0.ElementRef }], propDecorators: { needTime: [{
117
+ type: Input
118
+ }], url: [{
119
+ type: Input
120
+ }], canvas1: [{
121
+ type: ViewChild,
122
+ args: ['canvas1', { static: false }]
123
+ }], clipArr: [{
124
+ type: Input
125
+ }], rotateNum: [{
126
+ type: Input
127
+ }], loadOver: [{
128
+ type: Output
129
+ }], needContextmenu: [{
130
+ type: Input
131
+ }] } });
132
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW1nLWNhbnZhcy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb21wb25lbnRzL3NyYy9saWIvc2hhcmVkL2ltZy1jYW52YXMvaW1nLWNhbnZhcy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb21wb25lbnRzL3NyYy9saWIvc2hhcmVkL2ltZy1jYW52YXMvaW1nLWNhbnZhcy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQWdCLFNBQVMsRUFBYyxZQUFZLEVBQUUsS0FBSyxFQUFVLE1BQU0sRUFBRSxTQUFTLEVBQUMsTUFBTSxlQUFlLENBQUM7O0FBU25ILE1BQU0sT0FBTyxrQkFBa0I7SUFJN0IsSUFBYSxHQUFHLENBQUMsR0FBVztRQUMxQix1Q0FBdUM7UUFDdkMsZ0NBQWdDO1FBQ2hDLGtCQUFrQjtRQUNsQixFQUFFO1FBQ0YsTUFBTTtRQUNOLHVDQUF1QztRQUN2QyxJQUFJO1FBQ0osSUFBSSxDQUFDLE1BQU0sR0FBRyxHQUFHLENBQUM7SUFDcEIsQ0FBQztJQWFELFlBQW9CLFVBQXNCO1FBQXRCLGVBQVUsR0FBVixVQUFVLENBQVk7UUF4QmpDLGFBQVEsR0FBRyxLQUFLLENBQUM7UUFlMUIsVUFBSyxHQUFHLEdBQUcsQ0FBQztRQUNaLFdBQU0sR0FBRyxHQUFHLENBQUM7UUFHSixZQUFPLEdBQVUsRUFBRSxDQUFDO1FBQ3BCLGNBQVMsR0FBUSxDQUFDLENBQUM7UUFDbEIsYUFBUSxHQUFzQixJQUFJLFlBQVksRUFBRSxDQUFDO1FBQ2xELG9CQUFlLEdBQUcsS0FBSyxDQUFBO0lBR2hDLENBQUM7SUFFRCxRQUFRO0lBRVIsQ0FBQztJQUVELGFBQWE7UUFDWCxJQUFJLElBQUksR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQSxDQUFBLE1BQU07UUFDL0IsSUFBSSxJQUFJLEdBQUcsSUFB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T0FBTyxFQUFFLENBQUE7UUFDaEIsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFBO0lBQ1QsQ0FBQzs4R0F2SFUsa0JBQWtCO2tHQUFsQixrQkFBa0Isb1RDVC9CLDhNQUlBOzsyRkRLYSxrQkFBa0I7a0JBTDlCLFNBQVM7K0JBQ0UsU0FBUzsrRUFNVixRQUFRO3NCQUFoQixLQUFLO2dCQUVPLEdBQUc7c0JBQWYsS0FBSztnQkFXaUMsT0FBTztzQkFBN0MsU0FBUzt1QkFBQyxTQUFTLEVBQUUsRUFBQyxNQUFNLEVBQUUsS0FBSyxFQUFDO2dCQU01QixPQUFPO3NCQUFmLEtBQUs7Z0JBQ0csU0FBUztzQkFBakIsS0FBSztnQkFDSSxRQUFRO3NCQUFqQixNQUFNO2dCQUNFLGVBQWU7c0JBQXZCLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0FmdGVyVmlld0luaXQsIENvbXBvbmVudCwgRWxlbWVudFJlZiwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT25Jbml0LCBPdXRwdXQsIFZpZXdDaGlsZH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1Nlc3Npb25TdG9yYWdlVXRpbH0gZnJvbSBcIi4uLy4uLy4uL2NvcmUvdXRpbHMvc2Vzc2lvbnN0b3JhZ2UudXRpbFwiO1xuaW1wb3J0IHtUb29sc1V0aWx9IGZyb20gXCIuLi8uLi8uLi9jb3JlL3V0aWxzL1Rvb2xzVXRpbFwiO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdhcHAtaW1nJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2ltZy1jYW52YXMuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9pbWctY2FudmFzLmNvbXBvbmVudC5sZXNzJ11cbn0pXG5leHBvcnQgY2xhc3MgSW1nQ2FudmFzQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBBZnRlclZpZXdJbml0IHtcblxuICBASW5wdXQoKSBuZWVkVGltZSA9IGZhbHNlO1xuXG4gIEBJbnB1dCgpIHNldCB1cmwodXJsOiBzdHJpbmcpIHtcbiAgICAvLyBpZiAodXJsICYmIHVybC5pbmRleE9mKCc/dj0nKSA8IDApIHtcbiAgICAvLyAgIGlmICh1cmwuaW5kZXhPZihcIj9cIikgPCAwKSB7XG4gICAgLy8gICAgIHVybCArPSBcIj9cIjtcbiAgICAvL1xuICAgIC8vICAgfVxuICAgIC8vICAgdXJsICs9IFwidj1cIiArIG5ldyBEYXRlKCkuZ2V0VGltZSgpXG4gICAgLy8gfVxuICAgIHRoaXMuaW1nVXJsID0gdXJsO1xuICB9XG5cbiAgQFZpZXdDaGlsZCgnY2FudmFzMScsIHtzdGF0aWM6IGZhbHNlfSkgY2FudmFzMTogYW55O1xuICBjYW52YXNEb206IGFueVxuICB3aWR0aCA9IDgwMDtcbiAgaGVpZ2h0ID0gODAwO1xuICBpbWdVcmw6IGFueTtcbiAgaW1nOiBhbnk7XG4gIEBJbnB1dCgpIGNsaXBBcnI6IGFueVtdID0gW107XG4gIEBJbnB1dCgpIHJvdGF0ZU51bTogYW55ID0gMDtcbiAgQE91dHB1dCgpIGxvYWRPdmVyOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgQElucHV0KCkgbmVlZENvbnRleHRtZW51ID0gZmFsc2VcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGVsZW1lbnRSZWY6IEVsZW1lbnRSZWYpIHtcbiAgfVxuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuXG4gIH1cblxuICBnZXRDYW52YXNGdWxsKCkge1xuICAgIGxldCBpbWdXID0gdGhpcy5pbWcud2lkdGgvL+WbvueJh+eahOWuvVxuICAgIGxldCBpbWdIID0gdGhpcy5pbWcuaGVpZ2h0Ly/lm77niYfnmoTpq5hcbiAgICBsZXQgY1cgPSB0aGlzLndpZHRoO1xuICAgIGxldCBjSCA9IHRoaXMuaGVpZ2h0O1xuICAgIGxldCByYXRlVyA9IGltZ0ggLyBpbWdXLy/mr5TkvotcbiAgICBsZXQgcmF0ZUggPSBpbWdXIC8gaW1nSC8v5q+U5L6LXG4gICAgaWYgKGltZ1cgPiBpbWdIKSB7XG4gICAgICBpbWdXID0gdGhpcy53aWR0aFxuICAgICAgaW1nSCA9IGltZ1cgKiByYXRlVztcbiAgICAgIGlmIChpbWdIID4gY0gpIHtcbiAgICAgICAgaW1nSCA9IGNIXG4gICAgICAgIGltZ1cgPSBpbWdIICogcmF0ZUhcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgaW1nSCA9IHRoaXMuaGVpZ2h0XG4gICAgICBpbWdXID0gaW1nSCAqIHJhdGVIO1xuICAgICAgaWYgKGltZ1cgPiBjVykge1xuICAgICAgICBpbWdXID0gY1dcbiAgICAgICAgaW1nSCA9IGltZ1cgKiByYXRlV1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIGltZ0ggPSB0aGlzLmNhbnZhc0RvbS5vZmZzZXRIZWlnaHRcbiAgICAvLyBpbWdXID0gdGhpcy5jYW52YXNEb20ub2Zmc2V0V2lkdGhcbiAgICAvLyBsZXQgY2FudmFzSCA9IGltZ0ggKiByYXRlXG4gICAgLy8gaWYgKGNhbnZhc0ggPiB0aGlzLmhlaWdodCkge1xuICAgIC8vICAgY2FudmFzSCA9IHRoaXMuaGVpZ2h0XG4gICAgLy8gICByYXRlID0gY2FudmFzSCAvIGltZ0hcbiAgICAvLyAgIGNhbnZhc1cgPSBpbWdXICogcmF0ZVxuICAgIC8vIH1cbiAgICBjb25zb2xlLmxvZyhcIuWbvueJh+WuvemrmFwiLCBpbWdXICsgXCI7XCIgKyBpbWdIKVxuICAgIHJldHVybiB7XG4gICAgICBpbWdXOiBpbWdXLFxuICAgICAgaW1nSDogaW1nSFxuICAgIH1cbiAgfVxuXG4gIGluaXRJbWcobmVlZFNlc3Npb24gPSB0cnVlKSB7XG4gICAgdGhpcy5jYW52YXNEb20gPSB0aGlzLmNhbnZhczEubmF0aXZlRWxlbWVudDtcbiAgICAvLyB0aGlzLmNhbnZhc0RvbSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHRoaXMuY2FudmFzSWQpO1xuICAgIC8v5qOA5rWL5pSv5oyB5oCnXG4gICAgaWYgKCF0aGlzLmNhbnZhc0RvbS5nZXRDb250ZXh0KCcyZCcpKSByZXR1cm47XG4gICAgLy/ojrflvpcgMmQg5LiK5LiL5paH5a+56LGhXG4gICAgbGV0IGNvbnRleHQxID0gdGhpcy5jYW52YXNEb20uZ2V0Q29udGV4dCgnMmQnKTtcbiAgICBsZXQgaW1nID0gbmV3IEltYWdlKClcbiAgICBpbWcuc2V0QXR0cmlidXRlKCdjcm9zc09yaWdpbicsICdhbm9ueW1vdXMnKVxuICAgIGlmICh0aGlzLm5lZWRUaW1lKSB7XG4gICAgICBpZiAodGhpcy5pbWdVcmwuaW5kZXhPZihcIj9cIikgPCAwKSB7XG4gICAgICAgIHRoaXMuaW1nVXJsICs9IFwiP1wiO1xuICAgICAgfVxuICAgICAgdGhpcy5pbWdVcmwgKz0gXCJ2PVwiICsgbmV3IERhdGUoKS5nZXRUaW1lKClcbiAgICB9XG4gICAgaW1nLnNyYyA9IHRoaXMuaW1nVXJsXG4gICAgaW1nLm9ubG9hZCA9ICgpID0+IHtcbiAgICAgIHRoaXMuaW1nID0gaW1nXG4gICAgICBjb25zdCB7aW1nVywgaW1nSH0gPSB0aGlzLmdldENhbnZhc0Z1bGwoKTtcbiAgICAgIHRoaXMuY2FudmFzRG9tLndpZHRoID0gdGhpcy53aWR0aDtcbiAgICAgIHRoaXMuY2FudmFzRG9tLmhlaWdodCA9IHRoaXMuaGVpZ2h0O1xuICAgICAgaWYgKHRoaXMuY2xpcEFyciAmJiB0aGlzLmNsaXBBcnIubGVuZ3RoID4gMCkge1xuICAgICAgICB0aGlzLmdvQ2xpcChjb250ZXh0MSlcbiAgICAgIH1cbiAgICAgIC8vIOWPguaVsCAx77ya6KaB57uY5Yi255qEIGltZyAgIOWPguaVsCAy44CBM++8mue7mOWItueahCBpbWcg5ZyoIGNhbnZhcyDkuK3nmoTlnZDmoIcg5Y+C5pWwNCw15pivd2lkdGjvvIxoZWlnaHRcbiAgICAgIGNvbnRleHQxLmRyYXdJbWFnZSh0aGlzLmltZywgMCwgMCwgdGhpcy53aWR0aCwgdGhpcy5oZWlnaHQsKTtcbiAgICAgIHRoaXMubG9hZE92ZXIuZW1pdCh7Y29kZTogJ2xvYWRPdmVyJ30pXG4gICAgfVxuICB9XG5cblxuICBnb0NsaXAoY29udGV4dDogYW55KSB7XG4gICAgY29udGV4dC5iZWdpblBhdGgoKVxuICAgIGNvbnRleHQubW92ZVRvKHRoaXMuY2xpcEFyclswXS54MSwgdGhpcy5jbGlwQXJyWzBdLnkxKTtcbiAgICB0aGlzLmNsaXBBcnIuZm9yRWFjaCgoaXRlbSwgaW5kZXgpID0+IHtcbiAgICAgIGlmIChpbmRleCA+IDApIHtcbiAgICAgICAgY29udGV4dC5saW5lVG8oaXRlbS54MSwgaXRlbS55MSlcbiAgICAgIH1cbiAgICB9KVxuICAgIGNvbnRleHQubGluZVRvKHRoaXMuY2xpcEFyclswXS54MSwgdGhpcy5jbGlwQXJyWzBdLnkxKTtcbiAgICBjb250ZXh0LmNsaXAoKTtcbiAgfVxuXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIGNvbnNvbGUubG9nKCflvZPliY3nu4Tku7blrr3pq5gnLCB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5vZmZzZXRIZWlnaHQpXG4gICAgICB0aGlzLmluaXRJbWcoKVxuICAgIH0sIDMwMClcbiAgfVxuXG59XG4iLCI8Y2FudmFzICNjYW52YXMxIHN0eWxlPVwid2lkdGg6IDEwMCU7aGVpZ2h0OiAxMDAlO1wiIG9uY29udGV4dG1lbnU9XCJyZXR1cm4gbmVlZENvbnRleHRtZW51XCI+XG4gIOaCqOeahOa1j+iniOWZqOS4jeaUr+aMgeeUu+W4g++8gVxuPC9jYW52YXM+XG48bmctY29udGVudD48L25nLWNvbnRlbnQ+XG4iXX0=
@@ -0,0 +1,68 @@
1
+ import { Component, Input, Output, EventEmitter } from '@angular/core';
2
+ import { LocalStorageUtil } from "../../../core/utils/localstorage.util";
3
+ import * as i0 from "@angular/core";
4
+ import * as i1 from "@angular/common";
5
+ import * as i2 from "ng-zorro-antd/button";
6
+ import * as i3 from "ng-zorro-antd/core/transition-patch";
7
+ import * as i4 from "ng-zorro-antd/core/wave";
8
+ import * as i5 from "ng-zorro-antd/icon";
9
+ import * as i6 from "ng-zorro-antd/upload";
10
+ import * as i7 from "../../../core/directive/role.directive";
11
+ export class LocalUploadComponent {
12
+ constructor() {
13
+ this.nzAccept = 'application/vnd.ms-excel';
14
+ this.afterChange = new EventEmitter();
15
+ this.showList = false;
16
+ this.header = (file) => {
17
+ let obj = {
18
+ "x-header-atr": "web",
19
+ "token": LocalStorageUtil.getUserToken(),
20
+ // "orgCode" : ToolsUtil.getOrgCode()
21
+ };
22
+ return obj;
23
+ };
24
+ }
25
+ ngOnInit() {
26
+ // this.header = this.getDefaultHeader(new HttpHeaders());
27
+ }
28
+ onChange(params) {
29
+ console.log(params);
30
+ if (params.type == "success" || params.type == "removed") {
31
+ let fileUrls = [];
32
+ for (let file of params.fileList) {
33
+ if (file["key"] != undefined) {
34
+ fileUrls.push(file["key"]);
35
+ continue;
36
+ }
37
+ if (file.originFileObj) {
38
+ let originFileObj = file.originFileObj;
39
+ if (originFileObj["key"] != undefined) {
40
+ fileUrls.push(originFileObj["key"]);
41
+ }
42
+ }
43
+ }
44
+ this.afterChange.emit(params);
45
+ }
46
+ }
47
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.2.4", ngImport: i0, type: LocalUploadComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
48
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.2.4", type: LocalUploadComponent, selector: "atr-local-upload", inputs: { beforeUpload: "beforeUpload", url: "url", nzAccept: "nzAccept", name: "name", code: "code", withoutRole: "withoutRole" }, outputs: { afterChange: "afterChange" }, ngImport: i0, template: "<ng-container *ngIf=\"!withoutRole\">\r\n <nz-upload [nzAction]=\"url\" [nzAccept]=\"nzAccept\" [nzHeaders]=\"header\" [nzShowUploadList]=\"showList\"\r\n [nzBeforeUpload]=\"beforeUpload\"\r\n (nzChange)=\"onChange($event)\"\r\n *atrRole=\"code\" [nzLimit]='1'>\r\n <button nz-button nzSize=\"small\"><i nz-icon nzType=\"upload\"></i><span> {{name}}</span></button>\r\n </nz-upload>\r\n</ng-container>\r\n<ng-container *ngIf=\"withoutRole\">\r\n <nz-upload [nzAction]=\"url\" [nzAccept]=\"nzAccept\" [nzHeaders]=\"header\" [nzShowUploadList]=\"showList\"\r\n [nzBeforeUpload]=\"beforeUpload\"\r\n (nzChange)=\"onChange($event)\"\r\n [nzLimit]='1'>\r\n <button nz-button nzSize=\"small\"><i nz-icon nzType=\"upload\"></i><span> {{name}}</span></button>\r\n </nz-upload>\r\n</ng-container>\r\n", styles: [""], dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i2.NzButtonComponent, selector: "button[nz-button], a[nz-button]", inputs: ["nzBlock", "nzGhost", "nzSearch", "nzLoading", "nzDanger", "disabled", "tabIndex", "nzType", "nzShape", "nzSize"], exportAs: ["nzButton"] }, { kind: "directive", type: i3.ɵNzTransitionPatchDirective, selector: "[nz-button], nz-button-group, [nz-icon], [nz-menu-item], [nz-submenu], nz-select-top-control, nz-select-placeholder, nz-input-group", inputs: ["hidden"] }, { kind: "directive", type: i4.NzWaveDirective, selector: "[nz-wave],button[nz-button]:not([nzType=\"link\"]):not([nzType=\"text\"])", inputs: ["nzWaveExtraNode"], exportAs: ["nzWave"] }, { kind: "directive", type: i5.NzIconDirective, selector: "[nz-icon]", inputs: ["nzSpin", "nzRotate", "nzType", "nzTheme", "nzTwotoneColor", "nzIconfont"], exportAs: ["nzIcon"] }, { kind: "component", type: i6.NzUploadComponent, selector: "nz-upload", inputs: ["nzType", "nzLimit", "nzSize", "nzFileType", "nzAccept", "nzAction", "nzDirectory", "nzOpenFileDialogOnClick", "nzBeforeUpload", "nzCustomRequest", "nzData", "nzFilter", "nzFileList", "nzDisabled", "nzHeaders", "nzListType", "nzMultiple", "nzName", "nzShowUploadList", "nzShowButton", "nzWithCredentials", "nzRemove", "nzPreview", "nzPreviewFile", "nzPreviewIsImage", "nzTransformFile", "nzDownload", "nzIconRender", "nzFileListRender"], outputs: ["nzChange", "nzFileListChange"], exportAs: ["nzUpload"] }, { kind: "directive", type: i7.AtrRoleDirective, selector: "[atrRole]", inputs: ["atrRole"] }] }); }
49
+ }
50
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.4", ngImport: i0, type: LocalUploadComponent, decorators: [{
51
+ type: Component,
52
+ args: [{ selector: 'atr-local-upload', template: "<ng-container *ngIf=\"!withoutRole\">\r\n <nz-upload [nzAction]=\"url\" [nzAccept]=\"nzAccept\" [nzHeaders]=\"header\" [nzShowUploadList]=\"showList\"\r\n [nzBeforeUpload]=\"beforeUpload\"\r\n (nzChange)=\"onChange($event)\"\r\n *atrRole=\"code\" [nzLimit]='1'>\r\n <button nz-button nzSize=\"small\"><i nz-icon nzType=\"upload\"></i><span> {{name}}</span></button>\r\n </nz-upload>\r\n</ng-container>\r\n<ng-container *ngIf=\"withoutRole\">\r\n <nz-upload [nzAction]=\"url\" [nzAccept]=\"nzAccept\" [nzHeaders]=\"header\" [nzShowUploadList]=\"showList\"\r\n [nzBeforeUpload]=\"beforeUpload\"\r\n (nzChange)=\"onChange($event)\"\r\n [nzLimit]='1'>\r\n <button nz-button nzSize=\"small\"><i nz-icon nzType=\"upload\"></i><span> {{name}}</span></button>\r\n </nz-upload>\r\n</ng-container>\r\n" }]
53
+ }], ctorParameters: () => [], propDecorators: { beforeUpload: [{
54
+ type: Input
55
+ }], url: [{
56
+ type: Input
57
+ }], nzAccept: [{
58
+ type: Input
59
+ }], name: [{
60
+ type: Input
61
+ }], code: [{
62
+ type: Input
63
+ }], withoutRole: [{
64
+ type: Input
65
+ }], afterChange: [{
66
+ type: Output
67
+ }] } });
68
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9jYWwtdXBsb2FkLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NvbXBvbmVudHMvc3JjL2xpYi9zaGFyZWQvbG9jYWwtdXBsb2FkL2xvY2FsLXVwbG9hZC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb21wb25lbnRzL3NyYy9saWIvc2hhcmVkL2xvY2FsLXVwbG9hZC9sb2NhbC11cGxvYWQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLFNBQVMsRUFBVSxLQUFLLEVBQUUsTUFBTSxFQUFFLFlBQVksRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUM3RSxPQUFPLEVBQUMsZ0JBQWdCLEVBQUMsTUFBTSx1Q0FBdUMsQ0FBQzs7Ozs7Ozs7O0FBUXZFLE1BQU0sT0FBTyxvQkFBb0I7SUFXL0I7UUFSUyxhQUFRLEdBQUcsMEJBQTBCLENBQUM7UUFLL0MsZ0JBQVcsR0FBc0IsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUVwRCxhQUFRLEdBQVEsS0FBSyxDQUFDO1FBTXRCLFdBQU0sR0FBSSxDQUFDLElBQWtCLEVBQUUsRUFBRTtZQUMvQixJQUFJLEdBQUcsR0FBRztnQkFDUixjQUFjLEVBQUMsS0FBSztnQkFDcEIsT0FBTyxFQUFHLGdCQUFnQixDQUFDLFlBQVksRUFBRTtnQkFDekMscUNBQXFDO2FBQ3RDLENBQUE7WUFFRCxPQUFPLEdBQUcsQ0FBQztRQUNiLENBQUMsQ0FBQztJQWJjLENBQUM7SUFFakIsUUFBUTtRQUNOLDBEQUEwRDtJQUM1RCxDQUFDO0lBVUQsUUFBUSxDQUFDLE1BQTJCO1FBQ2xDLE9BQU8sQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDcEIsSUFBSSxNQUFNLENBQUMsSUFBSSxJQUFJLFNBQVMsSUFBSSxNQUFNLENBQUMsSUFBSSxJQUFJLFNBQVMsRUFBRTtZQUN4RCxJQUFJLFFBQVEsR0FBVSxFQUFFLENBQUM7WUFDekIsS0FBSyxJQUFJLElBQUksSUFBSSxNQUFNLENBQUMsUUFBUSxFQUFFO2dCQUNoQyxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxTQUFTLEVBQUU7b0JBQzVCLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7b0JBQzNCLFNBQVM7aUJBQ1Y7Z0JBQ0QsSUFBSSxJQUFJLENBQUMsYUFBYSxFQUFFO29CQUN0QixJQUFJLGFBQWEsR0FBUSxJQUFJLENBQUMsYUFBYSxDQUFBO29CQUMzQyxJQUFJLGFBQWEsQ0FBQyxLQUFLLENBQUMsSUFBSSxTQUFTLEVBQUU7d0JBQ3JDLFFBQVEsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUE7cUJBQ3BDO2lCQUNGO2FBQ0Y7WUFFRCxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztTQUMvQjtJQUNILENBQUM7OEdBNUNVLG9CQUFvQjtrR0FBcEIsb0JBQW9CLHFPQ1RqQywyMkJBZ0JBOzsyRkRQYSxvQkFBb0I7a0JBTGhDLFNBQVM7K0JBQ0Usa0JBQWtCO3dEQUtuQixZQUFZO3NCQUFwQixLQUFLO2dCQUNHLEdBQUc7c0JBQVgsS0FBSztnQkFDRyxRQUFRO3NCQUFoQixLQUFLO2dCQUNHLElBQUk7c0JBQVosS0FBSztnQkFDRyxJQUFJO3NCQUFaLEtBQUs7Z0JBQ0csV0FBVztzQkFBbkIsS0FBSztnQkFFTixXQUFXO3NCQURWLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0NvbXBvbmVudCwgT25Jbml0LCBJbnB1dCwgT3V0cHV0LCBFdmVudEVtaXR0ZXJ9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQge0xvY2FsU3RvcmFnZVV0aWx9IGZyb20gXCIuLi8uLi8uLi9jb3JlL3V0aWxzL2xvY2Fsc3RvcmFnZS51dGlsXCI7XHJcbmltcG9ydCB7TnpVcGxvYWRDaGFuZ2VQYXJhbSwgTnpVcGxvYWRGaWxlfSBmcm9tICduZy16b3Jyby1hbnRkL3VwbG9hZCc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2F0ci1sb2NhbC11cGxvYWQnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9sb2NhbC11cGxvYWQuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL2xvY2FsLXVwbG9hZC5jb21wb25lbnQubGVzcyddXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBMb2NhbFVwbG9hZENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XHJcbiAgQElucHV0KCkgYmVmb3JlVXBsb2FkOiBhbnk7XHJcbiAgQElucHV0KCkgdXJsOmFueTtcclxuICBASW5wdXQoKSBuekFjY2VwdCA9ICdhcHBsaWNhdGlvbi92bmQubXMtZXhjZWwnO1xyXG4gIEBJbnB1dCgpIG5hbWU6YW55O1xyXG4gIEBJbnB1dCgpIGNvZGU6YW55O1xyXG4gIEBJbnB1dCgpIHdpdGhvdXRSb2xlOmFueTtcclxuICBAT3V0cHV0KClcclxuICBhZnRlckNoYW5nZTogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcblxyXG4gIHNob3dMaXN0IDphbnkgPSBmYWxzZTtcclxuICBjb25zdHJ1Y3RvcigpIHsgfVxyXG5cclxuICBuZ09uSW5pdCgpIHtcclxuICAgIC8vIHRoaXMuaGVhZGVyID0gdGhpcy5nZXREZWZhdWx0SGVhZGVyKG5ldyBIdHRwSGVhZGVycygpKTtcclxuICB9XHJcbiAgaGVhZGVyICA9IChmaWxlOiBOelVwbG9hZEZpbGUpID0+IHtcclxuICAgIGxldCBvYmogPSB7XHJcbiAgICAgIFwieC1oZWFkZXItYXRyXCI6XCJ3ZWJcIixcclxuICAgICAgXCJ0b2tlblwiIDogTG9jYWxTdG9yYWdlVXRpbC5nZXRVc2VyVG9rZW4oKSxcclxuICAgICAgLy8gXCJvcmdDb2RlXCIgOiBUb29sc1V0aWwuZ2V0T3JnQ29kZSgpXHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIG9iajtcclxuICB9O1xyXG4gIG9uQ2hhbmdlKHBhcmFtczogTnpVcGxvYWRDaGFuZ2VQYXJhbSkge1xyXG4gICAgY29uc29sZS5sb2cocGFyYW1zKTtcclxuICAgIGlmIChwYXJhbXMudHlwZSA9PSBcInN1Y2Nlc3NcIiB8fCBwYXJhbXMudHlwZSA9PSBcInJlbW92ZWRcIikge1xyXG4gICAgICBsZXQgZmlsZVVybHM6IGFueVtdID0gW107XHJcbiAgICAgIGZvciAobGV0IGZpbGUgb2YgcGFyYW1zLmZpbGVMaXN0KSB7XHJcbiAgICAgICAgaWYgKGZpbGVbXCJrZXlcIl0gIT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICBmaWxlVXJscy5wdXNoKGZpbGVbXCJrZXlcIl0pO1xyXG4gICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChmaWxlLm9yaWdpbkZpbGVPYmopIHtcclxuICAgICAgICAgIGxldCBvcmlnaW5GaWxlT2JqOiBhbnkgPSBmaWxlLm9yaWdpbkZpbGVPYmpcclxuICAgICAgICAgIGlmIChvcmlnaW5GaWxlT2JqW1wia2V5XCJdICE9IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICBmaWxlVXJscy5wdXNoKG9yaWdpbkZpbGVPYmpbXCJrZXlcIl0pXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgICB0aGlzLmFmdGVyQ2hhbmdlLmVtaXQocGFyYW1zKTtcclxuICAgIH1cclxuICB9XHJcbiAgLy8gZ2V0RGVmYXVsdEhlYWRlcihfaGVhZGVyczpIdHRwSGVhZGVycyk6SHR0cEhlYWRlcnN7XHJcbiAgLy8gICBfaGVhZGVycyA9IF9oZWFkZXJzLnNldChcIngtaGVhZGVyLWF0clwiLFwibWFuYWdlXCIpO1xyXG4gIC8vICAgX2hlYWRlcnMgPSBfaGVhZGVycy5zZXQoXCJ0b2tlblwiLExvY2FsU3RvcmFnZVV0aWwuZ2V0VXNlclRva2VuKCkpO1xyXG4gIC8vICAgX2hlYWRlcnMgPSBfaGVhZGVycy5zZXQoXCJ1c2VySWRcIixMb2NhbFN0b3JhZ2VVdGlsLmdldFVzZXJJZCgpKTtcclxuICAvLyAgIF9oZWFkZXJzID0gX2hlYWRlcnMuc2V0KFwib3JnQ29kZVwiLFRvb2xzVXRpbC5nZXRPcmdDb2RlKCkpO1xyXG4gIC8vICAgcmV0dXJuIF9oZWFkZXJzO1xyXG4gIC8vIH1cclxufVxyXG4iLCI8bmctY29udGFpbmVyICpuZ0lmPVwiIXdpdGhvdXRSb2xlXCI+XHJcbiAgPG56LXVwbG9hZCBbbnpBY3Rpb25dPVwidXJsXCIgW256QWNjZXB0XT1cIm56QWNjZXB0XCIgW256SGVhZGVyc109XCJoZWFkZXJcIiBbbnpTaG93VXBsb2FkTGlzdF09XCJzaG93TGlzdFwiXHJcbiAgICAgICAgICAgICBbbnpCZWZvcmVVcGxvYWRdPVwiYmVmb3JlVXBsb2FkXCJcclxuICAgICAgICAgICAgIChuekNoYW5nZSk9XCJvbkNoYW5nZSgkZXZlbnQpXCJcclxuICAgICAgICAgICAgICphdHJSb2xlPVwiY29kZVwiIFtuekxpbWl0XT0nMSc+XHJcbiAgICA8YnV0dG9uIG56LWJ1dHRvbiBuelNpemU9XCJzbWFsbFwiPjxpIG56LWljb24gbnpUeXBlPVwidXBsb2FkXCI+PC9pPjxzcGFuPiB7e25hbWV9fTwvc3Bhbj48L2J1dHRvbj5cclxuICA8L256LXVwbG9hZD5cclxuPC9uZy1jb250YWluZXI+XHJcbjxuZy1jb250YWluZXIgKm5nSWY9XCJ3aXRob3V0Um9sZVwiPlxyXG4gIDxuei11cGxvYWQgW256QWN0aW9uXT1cInVybFwiIFtuekFjY2VwdF09XCJuekFjY2VwdFwiIFtuekhlYWRlcnNdPVwiaGVhZGVyXCIgW256U2hvd1VwbG9hZExpc3RdPVwic2hvd0xpc3RcIlxyXG4gICAgICAgICAgICAgW256QmVmb3JlVXBsb2FkXT1cImJlZm9yZVVwbG9hZFwiXHJcbiAgICAgICAgICAgICAobnpDaGFuZ2UpPVwib25DaGFuZ2UoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICBbbnpMaW1pdF09JzEnPlxyXG4gICAgPGJ1dHRvbiBuei1idXR0b24gbnpTaXplPVwic21hbGxcIj48aSBuei1pY29uIG56VHlwZT1cInVwbG9hZFwiPjwvaT48c3Bhbj4ge3tuYW1lfX08L3NwYW4+PC9idXR0b24+XHJcbiAgPC9uei11cGxvYWQ+XHJcbjwvbmctY29udGFpbmVyPlxyXG4iXX0=
@@ -0,0 +1,254 @@
1
+ import { Component, Input, forwardRef } from '@angular/core';
2
+ import { Subject } from 'rxjs';
3
+ import { debounceTime } from 'rxjs/operators';
4
+ import { NG_VALUE_ACCESSOR } from '@angular/forms';
5
+ import { UploadOssService } from "../../../core/services/upload-oss.service";
6
+ import { ToolsUtil } from "../../../core/utils/ToolsUtil";
7
+ import * as i0 from "@angular/core";
8
+ import * as i1 from "../../../core/services/upload-oss.service";
9
+ import * as i2 from "ng-zorro-antd/message";
10
+ import * as i3 from "@angular/common";
11
+ import * as i4 from "@angular/forms";
12
+ import * as i5 from "ng-zorro-antd/core/transition-patch";
13
+ import * as i6 from "ng-zorro-antd/icon";
14
+ import * as i7 from "ng-zorro-antd/modal";
15
+ import * as i8 from "ngx-quill";
16
+ // const icons:any = Quill.import('ui/icons');
17
+ // icons.undo = `<svg viewbox="0 0 18 18">
18
+ // <polygon class="ql-fill ql-stroke" points="6 10 4 12 2 10 6 10"></polygon>
19
+ // <path class="ql-stroke" d="M8.09,13.91A4.6,4.6,0,0,0,9,14,5,5,0,1,0,4,9"></path>
20
+ // </svg>`;
21
+ // icons.redo = `<svg viewbox="0 0 18 18">
22
+ // <polygon class="ql-fill ql-stroke" points="12 10 14 12 16 10 12 10"></polygon>
23
+ // <path class="ql-stroke" d="M9.91,13.91A4.6,4.6,0,0,1,9,14a5,5,0,1,1,5-5"></path>
24
+ // </svg>`;
25
+ export class QuillEditorComponent {
26
+ constructor(uploadOssService, message) {
27
+ this.uploadOssService = uploadOssService;
28
+ this.message = message;
29
+ this.placeholder = '请输入';
30
+ this.styles = { height: '350px' };
31
+ this.readOnly = false;
32
+ this.needImgSeq = false;
33
+ this.imgUrls = [];
34
+ this.editor$ = new Subject();
35
+ this.imgVis = false;
36
+ // const icons: any = Quill.import('ui/icons');
37
+ // icons["undo"] = `<svg viewbox="0 0 18 18">
38
+ // <polygon class="ql-fill ql-stroke" points="6 10 4 12 2 10 6 10"></polygon>
39
+ // <path class="ql-stroke" d="M8.09,13.91A4.6,4.6,0,0,0,9,14,5,5,0,1,0,4,9"></path>
40
+ // </svg>`;
41
+ // icons["redo"] = `<svg viewbox="0 0 18 18">
42
+ // <polygon class="ql-fill ql-stroke" points="12 10 14 12 16 10 12 10"></polygon>
43
+ // <path class="ql-stroke" d="M9.91,13.91A4.6,4.6,0,0,1,9,14a5,5,0,1,1,5-5"></path>
44
+ // </svg>`;
45
+ }
46
+ ngOnInit() {
47
+ this.editor$.pipe(debounceTime(700)).subscribe((editorContent) => {
48
+ if (typeof (this.onChangeListener) === 'function' && typeof (this.onTouchedListener)) {
49
+ this.onChangeListener(editorContent); // 告诉form,你的表单值改变成了payload
50
+ this.onTouchedListener(); // 告诉form,你的表单有交互发生
51
+ }
52
+ });
53
+ }
54
+ writeValue(value) {
55
+ this.value = value;
56
+ }
57
+ registerOnChange(fn) {
58
+ this.onChangeListener = fn;
59
+ }
60
+ registerOnTouched(fn) {
61
+ this.onTouchedListener = fn;
62
+ }
63
+ setDisabledState(isDisabled) {
64
+ }
65
+ onChange(quill) {
66
+ this.editor$.next(quill.html);
67
+ }
68
+ EditorCreated(quill) {
69
+ const toolbar = quill.getModule('toolbar');
70
+ toolbar.addHandler('image', this.imageHandler.bind(this));
71
+ this.editor = quill;
72
+ let that = this;
73
+ quill.on('text-change', function (delta, oldDelta, source) {
74
+ if (source == 'api') {
75
+ }
76
+ else if (source == 'user') {
77
+ console.log('user');
78
+ that.uploadImgs([], 0);
79
+ }
80
+ });
81
+ }
82
+ getBlobByBase64(url, oldUrl) {
83
+ const c = document.createElement('canvas');
84
+ console.log(c);
85
+ const ctx = c.getContext('2d');
86
+ ctx.stroke();
87
+ let blob = ToolsUtil.dataURItoBlob(url);
88
+ blob.name = '.png';
89
+ let delta = this.editor.getContents();
90
+ console.log('delta', delta);
91
+ for (let i = 0; i < delta.ops.length; i++) {
92
+ if (delta.ops[i].insert.image == oldUrl) {
93
+ return {
94
+ index: i,
95
+ blob: blob,
96
+ oldUrl: oldUrl
97
+ };
98
+ }
99
+ }
100
+ return;
101
+ }
102
+ uploadImgs(blods, index) {
103
+ let details = this.editor.getContents();
104
+ let opt = details.ops[index];
105
+ if (opt && opt.insert && opt.insert.image) {
106
+ if (ToolsUtil.isBase64(opt.insert.image)) {
107
+ blods.push(this.getBlobByBase64(opt.insert.image, opt.insert.image));
108
+ this.isEndContents(blods, index);
109
+ }
110
+ else {
111
+ let c = document.createElement('canvas');
112
+ let ctx = c.getContext('2d');
113
+ let img = new Image();
114
+ img.src = opt.insert.image;
115
+ img.setAttribute('crossOrigin', '*');
116
+ let that = this;
117
+ img.onload = function () {
118
+ c.width = img.width;
119
+ c.height = img.height;
120
+ ctx.drawImage(img, 0, 0, img.width, img.height);
121
+ let url = c.toDataURL();
122
+ blods.push(that.getBlobByBase64(url, img.src));
123
+ that.isEndContents(blods, index);
124
+ };
125
+ }
126
+ }
127
+ else {
128
+ this.isEndContents(blods, index);
129
+ }
130
+ }
131
+ uploadImg(blods) {
132
+ if (!blods || blods.length <= 0) {
133
+ return;
134
+ }
135
+ for (let i = 0; i < blods.length; i++) {
136
+ let blob = blods[i];
137
+ this.uploadOssService.uploadOss(blob).subscribe((url) => {
138
+ let delta = this.editor.getContents();
139
+ delta.filter((opt) => opt && opt.insert && opt.insert.image == blods[i].oldUrl).forEach((opt, index) => {
140
+ opt.insert.image = url;
141
+ });
142
+ this.editor.setContents(delta, 'api');
143
+ });
144
+ }
145
+ }
146
+ isEndContents(blods, index) {
147
+ let details = this.editor.getContents();
148
+ if (++index != details.ops.length) {
149
+ this.uploadImgs(blods, index);
150
+ }
151
+ else {
152
+ this.uploadImg(blods);
153
+ }
154
+ }
155
+ imageHandler() {
156
+ const Imageinput = document.createElement('input');
157
+ Imageinput.setAttribute('type', 'file');
158
+ Imageinput.setAttribute('multiple', 'multiple');
159
+ Imageinput.setAttribute('accept', 'image/png, image/gif, image/jpeg, image/bmp');
160
+ Imageinput.classList.add('ql-image');
161
+ Imageinput.addEventListener('change', () => {
162
+ if (this.needImgSeq) {
163
+ this.imgVis = true;
164
+ }
165
+ console.log(Imageinput);
166
+ let files = Imageinput.files;
167
+ if (files === null || files.length == 0) {
168
+ return;
169
+ }
170
+ this.imgUrls = [];
171
+ for (let i = 0; i < files.length; i++) {
172
+ const file = files[i];
173
+ if (file === null) {
174
+ continue;
175
+ }
176
+ const error = (res) => {
177
+ this.message.warning('上传失败');
178
+ };
179
+ this.uploadOssService.uploadOss(file).subscribe((url) => {
180
+ console.log(file);
181
+ if (url) {
182
+ this.imgUrls.push({ url: url, file: file, index: i });
183
+ if (!this.needImgSeq) {
184
+ this.editor.insertEmbed(this.editor.getSelection(true).index, 'image', url);
185
+ }
186
+ }
187
+ else {
188
+ this.message.warning('上传失败');
189
+ }
190
+ if (this.needImgSeq && this.imgUrls.length == files.length) {
191
+ this.imgVis = true;
192
+ this.imgUrls.sort((a, b) => a.index - b.index);
193
+ document.getElementById("te")?.click();
194
+ }
195
+ }, error);
196
+ }
197
+ });
198
+ Imageinput.click();
199
+ }
200
+ saveSeq() {
201
+ console.log(123);
202
+ for (let i = this.imgUrls.length - 1; i >= 0; i--) {
203
+ this.editor.insertEmbed(this.editor.getSelection(true).index, 'image', this.imgUrls[i].url);
204
+ }
205
+ this.imgVis = false;
206
+ }
207
+ arrowUp(index) {
208
+ let img = this.imgUrls[index];
209
+ this.imgUrls[index] = this.imgUrls[index - 1];
210
+ this.imgUrls[index - 1] = img;
211
+ }
212
+ arrowDown(index) {
213
+ let img = this.imgUrls[index];
214
+ this.imgUrls[index] = this.imgUrls[index + 1];
215
+ this.imgUrls[index + 1] = img;
216
+ }
217
+ cancle() {
218
+ this.imgVis = false;
219
+ }
220
+ te() {
221
+ console.log('上传完毕');
222
+ }
223
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.2.4", ngImport: i0, type: QuillEditorComponent, deps: [{ token: i1.UploadOssService }, { token: i2.NzMessageService }], target: i0.ɵɵFactoryTarget.Component }); }
224
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.2.4", type: QuillEditorComponent, selector: "app-quill-editor", inputs: { placeholder: "placeholder", styles: "styles", value: "value", readOnly: "readOnly", needImgSeq: "needImgSeq" }, providers: [
225
+ UploadOssService,
226
+ {
227
+ provide: NG_VALUE_ACCESSOR,
228
+ useExisting: forwardRef(() => QuillEditorComponent),
229
+ multi: true
230
+ }
231
+ ], ngImport: i0, template: "<quill-editor\r\n [styles]=\"styles\"\r\n [placeholder]=\"placeholder\"\r\n (onEditorCreated)=\"EditorCreated($event)\"\r\n [(ngModel)]=\"value\"\r\n (onContentChanged)=\"onChange($event)\"\r\n [readOnly]=\"readOnly\"\r\n></quill-editor>\r\n<!--\u8FD9\u4E2Adiv,\u662F\u56E0\u4E3A\u4E0A\u4F20\u5B8C\u6BD5\u7126\u70B9\u8FD8\u5728\u5BCC\u6587\u672C\u91CC,\u5F39\u51FA\u65E0\u6CD5\u663E\u793A.....-->\r\n<div id=\"te\" (click)=\"te()\"></div>\r\n<nz-modal [(nzVisible)]=\"imgVis\" (nzOnOk)=\"saveSeq()\" (nzOnCancel)=\"cancle()\" nzMaskClosable=\"false\"\r\n [nzStyle]=\"{padding:0}\">\r\n <ng-container *nzModalContent>\r\n <div style=\"max-height:600px;overflow:auto;margin-top: 10px;\">\r\n <ng-container *ngTemplateOutlet=\"imgsContent\"></ng-container>\r\n </div>\r\n </ng-container>\r\n</nz-modal>\r\n<ng-template #imgsContent>\r\n <ng-container *ngFor=\"let imgOpt of imgUrls;let i = index\">\r\n <div class=\"img-div\">\r\n <img [src]=\"imgOpt.url\" [ngStyle]=\"{ width: '100px',display: 'inline-block', margin:'5px' }\"/>\r\n <div style=\"margin-left: 20px; color: grey;\">{{imgOpt.file.name}}</div>\r\n <div style=\"margin-right: 20px; flex: 1;text-align: right;\">\r\n <a title=\"\u4E0A\u79FB\" *ngIf=\" i > 0\" style=\"display: block;\" (click)=\"arrowUp(i)\">\r\n <i nz-icon nzType=\"arrow-up\" nzTheme=\"outline\" style=\"color: #1890ff; font-size: 15px;\"></i>\r\n \u4E0A\u79FB</a>\r\n <a title=\"\u4E0B\u79FB\" *ngIf=\" i < imgUrls.length - 1\" (click)=\"arrowDown(i)\">\r\n <i nz-icon nzType=\"arrow-down\" nzTheme=\"outline\" style=\"color: #1890ff; font-size: 15px\"></i>\r\n \u4E0B\u79FB</a>\r\n </div>\r\n </div>\r\n </ng-container>\r\n</ng-template>\r\n\r\n", styles: [":host{width:100%;height:100%;display:block}.img-div{border:1px solid #d9d9d9;border-radius:4px;margin-top:5px;display:flex;align-items:center;padding:0 5px}\n"], dependencies: [{ kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i3.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "directive", type: i4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i4.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i5.ɵNzTransitionPatchDirective, selector: "[nz-button], nz-button-group, [nz-icon], [nz-menu-item], [nz-submenu], nz-select-top-control, nz-select-placeholder, nz-input-group", inputs: ["hidden"] }, { kind: "directive", type: i6.NzIconDirective, selector: "[nz-icon]", inputs: ["nzSpin", "nzRotate", "nzType", "nzTheme", "nzTwotoneColor", "nzIconfont"], exportAs: ["nzIcon"] }, { kind: "component", type: i7.NzModalComponent, selector: "nz-modal", inputs: ["nzMask", "nzMaskClosable", "nzCloseOnNavigation", "nzVisible", "nzClosable", "nzOkLoading", "nzOkDisabled", "nzCancelDisabled", "nzCancelLoading", "nzKeyboard", "nzNoAnimation", "nzCentered", "nzDraggable", "nzContent", "nzFooter", "nzZIndex", "nzWidth", "nzWrapClassName", "nzClassName", "nzStyle", "nzTitle", "nzCloseIcon", "nzMaskStyle", "nzBodyStyle", "nzOkText", "nzCancelText", "nzOkType", "nzOkDanger", "nzIconType", "nzModalType", "nzAutofocus", "nzOnOk", "nzOnCancel"], outputs: ["nzOnOk", "nzOnCancel", "nzAfterOpen", "nzAfterClose", "nzVisibleChange"], exportAs: ["nzModal"] }, { kind: "directive", type: i7.NzModalContentDirective, selector: "[nzModalContent]", exportAs: ["nzModalContent"] }, { kind: "component", type: i8.QuillEditorComponent, selector: "quill-editor" }] }); }
232
+ }
233
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.4", ngImport: i0, type: QuillEditorComponent, decorators: [{
234
+ type: Component,
235
+ args: [{ selector: 'app-quill-editor', providers: [
236
+ UploadOssService,
237
+ {
238
+ provide: NG_VALUE_ACCESSOR,
239
+ useExisting: forwardRef(() => QuillEditorComponent),
240
+ multi: true
241
+ }
242
+ ], template: "<quill-editor\r\n [styles]=\"styles\"\r\n [placeholder]=\"placeholder\"\r\n (onEditorCreated)=\"EditorCreated($event)\"\r\n [(ngModel)]=\"value\"\r\n (onContentChanged)=\"onChange($event)\"\r\n [readOnly]=\"readOnly\"\r\n></quill-editor>\r\n<!--\u8FD9\u4E2Adiv,\u662F\u56E0\u4E3A\u4E0A\u4F20\u5B8C\u6BD5\u7126\u70B9\u8FD8\u5728\u5BCC\u6587\u672C\u91CC,\u5F39\u51FA\u65E0\u6CD5\u663E\u793A.....-->\r\n<div id=\"te\" (click)=\"te()\"></div>\r\n<nz-modal [(nzVisible)]=\"imgVis\" (nzOnOk)=\"saveSeq()\" (nzOnCancel)=\"cancle()\" nzMaskClosable=\"false\"\r\n [nzStyle]=\"{padding:0}\">\r\n <ng-container *nzModalContent>\r\n <div style=\"max-height:600px;overflow:auto;margin-top: 10px;\">\r\n <ng-container *ngTemplateOutlet=\"imgsContent\"></ng-container>\r\n </div>\r\n </ng-container>\r\n</nz-modal>\r\n<ng-template #imgsContent>\r\n <ng-container *ngFor=\"let imgOpt of imgUrls;let i = index\">\r\n <div class=\"img-div\">\r\n <img [src]=\"imgOpt.url\" [ngStyle]=\"{ width: '100px',display: 'inline-block', margin:'5px' }\"/>\r\n <div style=\"margin-left: 20px; color: grey;\">{{imgOpt.file.name}}</div>\r\n <div style=\"margin-right: 20px; flex: 1;text-align: right;\">\r\n <a title=\"\u4E0A\u79FB\" *ngIf=\" i > 0\" style=\"display: block;\" (click)=\"arrowUp(i)\">\r\n <i nz-icon nzType=\"arrow-up\" nzTheme=\"outline\" style=\"color: #1890ff; font-size: 15px;\"></i>\r\n \u4E0A\u79FB</a>\r\n <a title=\"\u4E0B\u79FB\" *ngIf=\" i < imgUrls.length - 1\" (click)=\"arrowDown(i)\">\r\n <i nz-icon nzType=\"arrow-down\" nzTheme=\"outline\" style=\"color: #1890ff; font-size: 15px\"></i>\r\n \u4E0B\u79FB</a>\r\n </div>\r\n </div>\r\n </ng-container>\r\n</ng-template>\r\n\r\n", styles: [":host{width:100%;height:100%;display:block}.img-div{border:1px solid #d9d9d9;border-radius:4px;margin-top:5px;display:flex;align-items:center;padding:0 5px}\n"] }]
243
+ }], ctorParameters: () => [{ type: i1.UploadOssService }, { type: i2.NzMessageService }], propDecorators: { placeholder: [{
244
+ type: Input
245
+ }], styles: [{
246
+ type: Input
247
+ }], value: [{
248
+ type: Input
249
+ }], readOnly: [{
250
+ type: Input
251
+ }], needImgSeq: [{
252
+ type: Input
253
+ }] } });
254
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXVpbGwtZWRpdG9yLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NvbXBvbmVudHMvc3JjL2xpYi9zaGFyZWQvcXVpbGwtZWRpdG9yL3F1aWxsLWVkaXRvci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb21wb25lbnRzL3NyYy9saWIvc2hhcmVkL3F1aWxsLWVkaXRvci9xdWlsbC1lZGl0b3IuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLFNBQVMsRUFBVSxLQUFLLEVBQUUsVUFBVSxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBQ25FLE9BQU8sRUFBQyxPQUFPLEVBQUMsTUFBTSxNQUFNLENBQUM7QUFDN0IsT0FBTyxFQUFDLFlBQVksRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBQzVDLE9BQU8sRUFBdUIsaUJBQWlCLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUV2RSxPQUFPLEVBQUMsZ0JBQWdCLEVBQUMsTUFBTSwyQ0FBMkMsQ0FBQztBQUMzRSxPQUFPLEVBQUMsU0FBUyxFQUFDLE1BQU0sK0JBQStCLENBQUM7Ozs7Ozs7Ozs7QUFDeEQsOENBQThDO0FBQzlDLDBDQUEwQztBQUMxQywrRUFBK0U7QUFDL0UscUZBQXFGO0FBQ3JGLFdBQVc7QUFDWCwwQ0FBMEM7QUFDMUMsbUZBQW1GO0FBQ25GLHFGQUFxRjtBQUNyRixXQUFXO0FBZVgsTUFBTSxPQUFPLG9CQUFvQjtJQWMvQixZQUFvQixnQkFBa0MsRUFBVSxPQUF5QjtRQUFyRSxxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQWtCO1FBQVUsWUFBTyxHQUFQLE9BQU8sQ0FBa0I7UUFaaEYsZ0JBQVcsR0FBRyxLQUFLLENBQUM7UUFDcEIsV0FBTSxHQUFRLEVBQUMsTUFBTSxFQUFFLE9BQU8sRUFBQyxDQUFDO1FBRWhDLGFBQVEsR0FBWSxLQUFLLENBQUM7UUFD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LGl2REFtQ0E7OzJGRExhLG9CQUFvQjtrQkFiaEMsU0FBUzsrQkFDRSxrQkFBa0IsYUFHakI7d0JBQ1QsZ0JBQWdCO3dCQUNoQjs0QkFDRSxPQUFPLEVBQUUsaUJBQWlCOzRCQUMxQixXQUFXLEVBQUUsVUFBVSxDQUFDLEdBQUcsRUFBRSxxQkFBcUIsQ0FBQzs0QkFDbkQsS0FBSyxFQUFFLElBQUk7eUJBQ1o7cUJBQ0Y7b0hBSVEsV0FBVztzQkFBbkIsS0FBSztnQkFDRyxNQUFNO3NCQUFkLEtBQUs7Z0JBQ0csS0FBSztzQkFBYixLQUFLO2dCQUNHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBQ0csVUFBVTtzQkFBbEIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7Q29tcG9uZW50LCBPbkluaXQsIElucHV0LCBmb3J3YXJkUmVmfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHtTdWJqZWN0fSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHtkZWJvdW5jZVRpbWV9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcclxuaW1wb3J0IHtDb250cm9sVmFsdWVBY2Nlc3NvciwgTkdfVkFMVUVfQUNDRVNTT1J9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHtOek1lc3NhZ2VTZXJ2aWNlfSBmcm9tICduZy16b3Jyby1hbnRkL21lc3NhZ2UnO1xyXG5pbXBvcnQge1VwbG9hZE9zc1NlcnZpY2V9IGZyb20gXCIuLi8uLi8uLi9jb3JlL3NlcnZpY2VzL3VwbG9hZC1vc3Muc2VydmljZVwiO1xyXG5pbXBvcnQge1Rvb2xzVXRpbH0gZnJvbSBcIi4uLy4uLy4uL2NvcmUvdXRpbHMvVG9vbHNVdGlsXCI7XHJcbi8vIGNvbnN0IGljb25zOmFueSA9IFF1aWxsLmltcG9ydCgndWkvaWNvbnMnKTtcclxuLy8gaWNvbnMudW5kbyA9IGA8c3ZnIHZpZXdib3g9XCIwIDAgMTggMThcIj5cclxuLy8gICA8cG9seWdvbiBjbGFzcz1cInFsLWZpbGwgcWwtc3Ryb2tlXCIgcG9pbnRzPVwiNiAxMCA0IDEyIDIgMTAgNiAxMFwiPjwvcG9seWdvbj5cclxuLy8gICA8cGF0aCBjbGFzcz1cInFsLXN0cm9rZVwiIGQ9XCJNOC4wOSwxMy45MUE0LjYsNC42LDAsMCwwLDksMTQsNSw1LDAsMSwwLDQsOVwiPjwvcGF0aD5cclxuLy8gPC9zdmc+YDtcclxuLy8gaWNvbnMucmVkbyA9IGA8c3ZnIHZpZXdib3g9XCIwIDAgMTggMThcIj5cclxuLy8gICA8cG9seWdvbiBjbGFzcz1cInFsLWZpbGwgcWwtc3Ryb2tlXCIgcG9pbnRzPVwiMTIgMTAgMTQgMTIgMTYgMTAgMTIgMTBcIj48L3BvbHlnb24+XHJcbi8vICAgPHBhdGggY2xhc3M9XCJxbC1zdHJva2VcIiBkPVwiTTkuOTEsMTMuOTFBNC42LDQuNiwwLDAsMSw5LDE0YTUsNSwwLDEsMSw1LTVcIj48L3BhdGg+XHJcbi8vIDwvc3ZnPmA7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2FwcC1xdWlsbC1lZGl0b3InLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9xdWlsbC1lZGl0b3IuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL3F1aWxsLWVkaXRvci5jb21wb25lbnQubGVzcyddLFxyXG4gIHByb3ZpZGVyczogW1xyXG4gICAgVXBsb2FkT3NzU2VydmljZSxcclxuICAgIHtcclxuICAgICAgcHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsXHJcbiAgICAgIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IFF1aWxsRWRpdG9yQ29tcG9uZW50KSxcclxuICAgICAgbXVsdGk6IHRydWVcclxuICAgIH1cclxuICBdXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBRdWlsbEVkaXRvckNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgQ29udHJvbFZhbHVlQWNjZXNzb3Ige1xyXG5cclxuICBASW5wdXQoKSBwbGFjZWhvbGRlciA9ICfor7fovpPlhaUnO1xyXG4gIEBJbnB1dCgpIHN0eWxlczogYW55ID0ge2hlaWdodDogJzM1MHB4J307XHJcbiAgQElucHV0KCkgdmFsdWU6IHN0cmluZyB8IGFueTsgLy8g57uE5Lu25a+55bqU55qEIOKAnCBuZ01vZGVsIOKAnVxyXG4gIEBJbnB1dCgpIHJlYWRPbmx5OiBib29sZWFuID0gZmFsc2U7XHJcbiAgQElucHV0KCkgbmVlZEltZ1NlcTogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIGVkaXRvcjogYW55O1xyXG4gIG9uQ2hhbmdlTGlzdGVuZXI6IGFueTsgLy8g5pS55Y+Y5YC85Zue6LCDXHJcbiAgb25Ub3VjaGVkTGlzdGVuZXI6IGFueTsgLy8g5Lqk5LqS5Zue6LCDXHJcbiAgaW1nVXJsczogYW55ID0gW107XHJcbiAgZWRpdG9yJCA9IG5ldyBTdWJqZWN0PHN0cmluZz4oKTtcclxuICBpbWdWaXMgPSBmYWxzZTtcclxuXHJcbiAgY29uc3RydWN0b3IocHJpdmF0ZSB1cGxvYWRPc3NTZXJ2aWNlOiBVcGxvYWRPc3NTZXJ2aWNlLCBwcml2YXRlIG1lc3NhZ2U6IE56TWVzc2FnZVNlcnZpY2UpIHtcclxuICAgIC8vIGNvbnN0IGljb25zOiBhbnkgID0gUXVpbGwuaW1wb3J0KCd1aS9pY29ucycpO1xyXG4gICAgLy8gaWNvbnNbXCJ1bmRvXCJdID0gYDxzdmcgdmlld2JveD1cIjAgMCAxOCAxOFwiPlxyXG4gICAgLy8gICA8cG9seWdvbiBjbGFzcz1cInFsLWZpbGwgcWwtc3Ryb2tlXCIgcG9pbnRzPVwiNiAxMCA0IDEyIDIgMTAgNiAxMFwiPjwvcG9seWdvbj5cclxuICAgIC8vICAgPHBhdGggY2xhc3M9XCJxbC1zdHJva2VcIiBkPVwiTTguMDksMTMuOTFBNC42LDQuNiwwLDAsMCw5LDE0LDUsNSwwLDEsMCw0LDlcIj48L3BhdGg+XHJcbiAgICAvLyA8L3N2Zz5gO1xyXG4gICAgLy8gaWNvbnNbXCJyZWRvXCJdID0gYDxzdmcgdmlld2JveD1cIjAgMCAxOCAxOFwiPlxyXG4gICAgLy8gICA8cG9seWdvbiBjbGFzcz1cInFsLWZpbGwgcWwtc3Ryb2tlXCIgcG9pbnRzPVwiMTIgMTAgMTQgMTIgMTYgMTAgMTIgMTBcIj48L3BvbHlnb24+XHJcbiAgICAvLyAgIDxwYXRoIGNsYXNzPVwicWwtc3Ryb2tlXCIgZD1cIk05LjkxLDEzLjkxQTQuNiw0LjYsMCwwLDEsOSwxNGE1LDUsMCwxLDEsNS01XCI+PC9wYXRoPlxyXG4gICAgLy8gPC9zdmc+YDtcclxuICB9XHJcblxyXG4gIG5nT25Jbml0KCkge1xyXG4gICAgdGhpcy5lZGl0b3IkLnBpcGUoXHJcbiAgICAgIGRlYm91bmNlVGltZSg3MDApXHJcbiAgICApLnN1YnNjcmliZSgoZWRpdG9yQ29udGVudDogc3RyaW5nKSA9PiB7XHJcbiAgICAgIGlmICh0eXBlb2YgKHRoaXMub25DaGFuZ2VMaXN0ZW5lcikgPT09ICdmdW5jdGlvbicgJiYgdHlwZW9mICh0aGlzLm9uVG91Y2hlZExpc3RlbmVyKSkge1xyXG4gICAgICAgIHRoaXMub25DaGFuZ2VMaXN0ZW5lcihlZGl0b3JDb250ZW50KTsgLy8g5ZGK6K+JZm9ybe+8jOS9oOeahOihqOWNleWAvOaUueWPmOaIkOS6hnBheWxvYWRcclxuICAgICAgICB0aGlzLm9uVG91Y2hlZExpc3RlbmVyKCk7IC8vIOWRiuiviWZvcm3vvIzkvaDnmoTooajljZXmnInkuqTkupLlj5HnlJ9cclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICB3cml0ZVZhbHVlKHZhbHVlOiBzdHJpbmcgfCBhbnlbXSk6IHZvaWQge1xyXG4gICAgdGhpcy52YWx1ZSA9IHZhbHVlO1xyXG4gIH1cclxuXHJcbiAgcmVnaXN0ZXJPbkNoYW5nZShmbjogYW55KTogdm9pZCB7XHJcbiAgICB0aGlzLm9uQ2hhbmdlTGlzdGVuZXIgPSBmbjtcclxuICB9XHJcblxyXG4gIHJlZ2lzdGVyT25Ub3VjaGVkKGZuOiBhbnkpOiB2b2lkIHtcclxuICAgIHRoaXMub25Ub3VjaGVkTGlzdGVuZXIgPSBmbjtcclxuICB9XHJcblxyXG4gIHNldERpc2FibGVkU3RhdGU/KGlzRGlzYWJsZWQ6IGJvb2xlYW4pOiB2b2lkIHtcclxuXHJcbiAgfVxyXG5cclxuICBvbkNoYW5nZShxdWlsbDogYW55KSB7XHJcbiAgICB0aGlzLmVkaXRvciQubmV4dChxdWlsbC5odG1sKTtcclxuICB9XHJcblxyXG4gIEVkaXRvckNyZWF0ZWQocXVpbGw6IGFueSkge1xyXG4gICAgY29uc3QgdG9vbGJhciA9IHF1aWxsLmdldE1vZHVsZSgndG9vbGJhcicpO1xyXG4gICAgdG9vbGJhci5hZGRIYW5kbGVyKCdpbWFnZScsIHRoaXMuaW1hZ2VIYW5kbGVyLmJpbmQodGhpcykpO1xyXG4gICAgdGhpcy5lZGl0b3IgPSBxdWlsbDtcclxuICAgIGxldCB0aGF0ID0gdGhpcztcclxuICAgIHF1aWxsLm9uKCd0ZXh0LWNoYW5nZScsIGZ1bmN0aW9uIChkZWx0YTogYW55LCBvbGREZWx0YTogYW55LCBzb3VyY2U6IGFueSkge1xyXG4gICAgICBpZiAoc291cmNlID09ICdhcGknKSB7XHJcbiAgICAgIH0gZWxzZSBpZiAoc291cmNlID09ICd1c2VyJykge1xyXG4gICAgICAgIGNvbnNvbGUubG9nKCd1c2VyJyk7XHJcbiAgICAgICAgdGhhdC51cGxvYWRJbWdzKFtdLCAwKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBnZXRCbG9iQnlCYXNlNjQodXJsOiBhbnksIG9sZFVybDogYW55KSB7XHJcbiAgICBjb25zdCBjOiBhbnkgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdjYW52YXMnKTtcclxuICAgIGNvbnNvbGUubG9nKGMpO1xyXG4gICAgY29uc3QgY3R4ID0gYy5nZXRDb250ZXh0KCcyZCcpO1xyXG4gICAgY3R4LnN0cm9rZSgpO1xyXG4gICAgbGV0IGJsb2I6IGFueSA9IFRvb2xzVXRpbC5kYXRhVVJJdG9CbG9iKHVybCk7XHJcbiAgICBibG9iLm5hbWUgPSAnLnBuZyc7XHJcbiAgICBsZXQgZGVsdGEgPSB0aGlzLmVkaXRvci5nZXRDb250ZW50cygpO1xyXG4gICAgY29uc29sZS5sb2coJ2RlbHRhJywgZGVsdGEpXHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGRlbHRhLm9wcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICBpZiAoZGVsdGEub3BzW2ldLmluc2VydC5pbWFnZSA9PSBvbGRVcmwpIHtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgaW5kZXg6IGksXHJcbiAgICAgICAgICBibG9iOiBibG9iLFxyXG4gICAgICAgICAgb2xkVXJsOiBvbGRVcmxcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybjtcclxuICB9XHJcblxyXG4gIHVwbG9hZEltZ3MoYmxvZHM6IGFueSwgaW5kZXg6IGFueSkge1xyXG4gICAgbGV0IGRldGFpbHMgPSB0aGlzLmVkaXRvci5nZXRDb250ZW50cygpO1xyXG4gICAgbGV0IG9wdCA9IGRldGFpbHMub3BzW2luZGV4XTtcclxuICAgIGlmIChvcHQgJiYgb3B0Lmluc2VydCAmJiBvcHQuaW5zZXJ0LmltYWdlKSB7XHJcbiAgICAgIGlmIChUb29sc1V0aWwuaXNCYXNlNjQob3B0Lmluc2VydC5pbWFnZSkpIHtcclxuICAgICAgICBibG9kcy5wdXNoKHRoaXMuZ2V0QmxvYkJ5QmFzZTY0KG9wdC5pbnNlcnQuaW1hZ2UsIG9wdC5pbnNlcnQuaW1hZ2UpKTtcclxuICAgICAgICB0aGlzLmlzRW5kQ29udGVudHMoYmxvZHMsIGluZGV4KVxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGxldCBjID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnY2FudmFzJyk7XHJcbiAgICAgICAgbGV0IGN0eDogYW55ID0gYy5nZXRDb250ZXh0KCcyZCcpO1xyXG4gICAgICAgIGxldCBpbWcgPSBuZXcgSW1hZ2UoKTtcclxuICAgICAgICBpbWcuc3JjID0gb3B0Lmluc2VydC5pbWFnZTtcclxuICAgICAgICBpbWcuc2V0QXR0cmlidXRlKCdjcm9zc09yaWdpbicsICcqJyk7XHJcbiAgICAgICAgbGV0IHRoYXQgPSB0aGlzO1xyXG4gICAgICAgIGltZy5vbmxvYWQgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICBjLndpZHRoID0gaW1nLndpZHRoO1xyXG4gICAgICAgICAgYy5oZWlnaHQgPSBpbWcuaGVpZ2h0O1xyXG4gICAgICAgICAgY3R4LmRyYXdJbWFnZShpbWcsIDAsIDAsIGltZy53aWR0aCwgaW1nLmhlaWdodCk7XHJcbiAgICAgICAgICBsZXQgdXJsID0gYy50b0RhdGFVUkwoKTtcclxuICAgICAgICAgIGJsb2RzLnB1c2godGhhdC5nZXRCbG9iQnlCYXNlNjQodXJsLCBpbWcuc3JjKSlcclxuICAgICAgICAgIHRoYXQuaXNFbmRDb250ZW50cyhibG9kcywgaW5kZXgpXHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmlzRW5kQ29udGVudHMoYmxvZHMsIGluZGV4KVxyXG4gICAgfVxyXG5cclxuICB9XHJcbiAgdXBsb2FkSW1nKGJsb2RzOmFueSkge1xyXG4gICAgaWYgKCFibG9kcyB8fCBibG9kcy5sZW5ndGggPD0gMCkge1xyXG4gICAgICByZXR1cm5cclxuICAgIH1cclxuXHJcbiAgICBmb3IobGV0IGkgPSAwO2k8IGJsb2RzLmxlbmd0aDtpKyspe1xyXG4gICAgICBsZXQgYmxvYiA9IGJsb2RzW2ldO1xyXG4gICAgICB0aGlzLnVwbG9hZE9zc1NlcnZpY2UudXBsb2FkT3NzKGJsb2IpLnN1YnNjcmliZSgodXJsKSA9PiB7XHJcbiAgICAgICAgbGV0IGRlbHRhID0gdGhpcy5lZGl0b3IuZ2V0Q29udGVudHMoKTtcclxuICAgICAgICBkZWx0YS5maWx0ZXIoKG9wdDphbnkpID0+IG9wdCAmJiBvcHQuaW5zZXJ0ICYmIG9wdC5pbnNlcnQuaW1hZ2UgPT0gYmxvZHNbaV0ub2xkVXJsKS5mb3JFYWNoKChvcHQ6YW55LCBpbmRleDphbnkpID0+IHtcclxuICAgICAgICAgIG9wdC5pbnNlcnQuaW1hZ2UgPSB1cmxcclxuICAgICAgICB9KTtcclxuICAgICAgICB0aGlzLmVkaXRvci5zZXRDb250ZW50cyhkZWx0YSwgJ2FwaScpO1xyXG4gICAgICB9KVxyXG4gICAgfVxyXG4gIH1cclxuICBpc0VuZENvbnRlbnRzKGJsb2RzOmFueSwgaW5kZXg6YW55KSB7XHJcbiAgICBsZXQgZGV0YWlscyA9IHRoaXMuZWRpdG9yLmdldENvbnRlbnRzKCk7XHJcbiAgICBpZiAoKytpbmRleCAhPSBkZXRhaWxzLm9wcy5sZW5ndGgpIHtcclxuICAgICAgdGhpcy51cGxvYWRJbWdzKGJsb2RzLCBpbmRleCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLnVwbG9hZEltZyhibG9kcyk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBpbWFnZUhhbmRsZXIoKSB7XHJcbiAgICBjb25zdCBJbWFnZWlucHV0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnaW5wdXQnKTtcclxuICAgIEltYWdlaW5wdXQuc2V0QXR0cmlidXRlKCd0eXBlJywgJ2ZpbGUnKTtcclxuICAgIEltYWdlaW5wdXQuc2V0QXR0cmlidXRlKCdtdWx0aXBsZScsICdtdWx0aXBsZScpO1xyXG4gICAgSW1hZ2VpbnB1dC5zZXRBdHRyaWJ1dGUoJ2FjY2VwdCcsICdpbWFnZS9wbmcsIGltYWdlL2dpZiwgaW1hZ2UvanBlZywgaW1hZ2UvYm1wJyk7XHJcbiAgICBJbWFnZWlucHV0LmNsYXNzTGlzdC5hZGQoJ3FsLWltYWdlJyk7XHJcbiAgICBJbWFnZWlucHV0LmFkZEV2ZW50TGlzdGVuZXIoJ2NoYW5nZScsICgpID0+IHtcclxuICAgICAgaWYgKHRoaXMubmVlZEltZ1NlcSkge1xyXG4gICAgICAgIHRoaXMuaW1nVmlzID0gdHJ1ZTtcclxuICAgICAgfVxyXG4gICAgICBjb25zb2xlLmxvZyhJbWFnZWlucHV0KTtcclxuICAgICAgbGV0IGZpbGVzOiBhbnkgPSBJbWFnZWlucHV0LmZpbGVzO1xyXG4gICAgICBpZiAoZmlsZXMgPT09IG51bGwgfHwgZmlsZXMubGVuZ3RoID09IDApIHtcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5pbWdVcmxzID0gW107XHJcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZmlsZXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICBjb25zdCBmaWxlID0gZmlsZXNbaV07XHJcbiAgICAgICAgaWYgKGZpbGUgPT09IG51bGwpIHtcclxuICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgIH1cclxuXHJcblxyXG4gICAgICAgIGNvbnN0IGVycm9yID0gKHJlczogYW55KSA9PiB7XHJcbiAgICAgICAgICB0aGlzLm1lc3NhZ2Uud2FybmluZygn5LiK5Lyg5aSx6LSlJyk7XHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgdGhpcy51cGxvYWRPc3NTZXJ2aWNlLnVwbG9hZE9zcyhmaWxlKS5zdWJzY3JpYmUoKHVybCkgPT4ge1xyXG4gICAgICAgICAgY29uc29sZS5sb2coZmlsZSk7XHJcbiAgICAgICAgICBpZiAodXJsKSB7XHJcbiAgICAgICAgICAgIHRoaXMuaW1nVXJscy5wdXNoKHt1cmw6IHVybCwgZmlsZTogZmlsZSwgaW5kZXg6IGl9KTtcclxuICAgICAgICAgICAgaWYgKCF0aGlzLm5lZWRJbWdTZXEpIHtcclxuICAgICAgICAgICAgICB0aGlzLmVkaXRvci5pbnNlcnRFbWJlZCh0aGlzLmVkaXRvci5nZXRTZWxlY3Rpb24odHJ1ZSkuaW5kZXgsICdpbWFnZScsIHVybCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMubWVzc2FnZS53YXJuaW5nKCfkuIrkvKDlpLHotKUnKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGlmICh0aGlzLm5lZWRJbWdTZXEgJiYgdGhpcy5pbWdVcmxzLmxlbmd0aCA9PSBmaWxlcy5sZW5ndGgpIHtcclxuICAgICAgICAgICAgdGhpcy5pbWdWaXMgPSB0cnVlO1xyXG4gICAgICAgICAgICB0aGlzLmltZ1VybHMuc29ydCgoYTogYW55LCBiOiBhbnkpID0+IGEuaW5kZXggLSBiLmluZGV4KTtcclxuICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJ0ZVwiKT8uY2xpY2soKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9LCBlcnJvcik7XHJcbiAgICAgIH1cclxuXHJcbiAgICB9KTtcclxuXHJcbiAgICBJbWFnZWlucHV0LmNsaWNrKCk7XHJcbiAgfVxyXG5cclxuICBzYXZlU2VxKCkge1xyXG4gICAgY29uc29sZS5sb2coMTIzKTtcclxuICAgIGZvciAobGV0IGkgPSB0aGlzLmltZ1VybHMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcclxuICAgICAgdGhpcy5lZGl0b3IuaW5zZXJ0RW1iZWQodGhpcy5lZGl0b3IuZ2V0U2VsZWN0aW9uKHRydWUpLmluZGV4LCAnaW1hZ2UnLCB0aGlzLmltZ1VybHNbaV0udXJsKTtcclxuICAgIH1cclxuICAgIHRoaXMuaW1nVmlzID0gZmFsc2U7XHJcbiAgfVxyXG5cclxuICBhcnJvd1VwKGluZGV4OiBhbnkpIHtcclxuICAgIGxldCBpbWcgPSB0aGlzLmltZ1VybHNbaW5kZXhdO1xyXG4gICAgdGhpcy5pbWdVcmxzW2luZGV4XSA9IHRoaXMuaW1nVXJsc1tpbmRleCAtIDFdO1xyXG4gICAgdGhpcy5pbWdVcmxzW2luZGV4IC0gMV0gPSBpbWc7XHJcbiAgfVxyXG5cclxuICBhcnJvd0Rvd24oaW5kZXg6IGFueSkge1xyXG4gICAgbGV0IGltZyA9IHRoaXMuaW1nVXJsc1tpbmRleF07XHJcbiAgICB0aGlzLmltZ1VybHNbaW5kZXhdID0gdGhpcy5pbWdVcmxzW2luZGV4ICsgMV07XHJcbiAgICB0aGlzLmltZ1VybHNbaW5kZXggKyAxXSA9IGltZztcclxuICB9XHJcblxyXG4gIGNhbmNsZSgpIHtcclxuICAgIHRoaXMuaW1nVmlzID0gZmFsc2U7XHJcbiAgfVxyXG5cclxuICB0ZSgpIHtcclxuICAgIGNvbnNvbGUubG9nKCfkuIrkvKDlrozmr5UnKVxyXG4gIH1cclxufVxyXG4iLCI8cXVpbGwtZWRpdG9yXHJcbiAgW3N0eWxlc109XCJzdHlsZXNcIlxyXG4gIFtwbGFjZWhvbGRlcl09XCJwbGFjZWhvbGRlclwiXHJcbiAgKG9uRWRpdG9yQ3JlYXRlZCk9XCJFZGl0b3JDcmVhdGVkKCRldmVudClcIlxyXG4gIFsobmdNb2RlbCldPVwidmFsdWVcIlxyXG4gIChvbkNvbnRlbnRDaGFuZ2VkKT1cIm9uQ2hhbmdlKCRldmVudClcIlxyXG4gIFtyZWFkT25seV09XCJyZWFkT25seVwiXHJcbj48L3F1aWxsLWVkaXRvcj5cclxuPCEtLei/meS4qmRpdizmmK/lm6DkuLrkuIrkvKDlrozmr5XnhKbngrnov5jlnKjlr4zmlofmnKzph4ws5by55Ye65peg5rOV5pi+56S6Li4uLi4tLT5cclxuPGRpdiBpZD1cInRlXCIgKGNsaWNrKT1cInRlKClcIj48L2Rpdj5cclxuPG56LW1vZGFsIFsobnpWaXNpYmxlKV09XCJpbWdWaXNcIiAobnpPbk9rKT1cInNhdmVTZXEoKVwiIChuek9uQ2FuY2VsKT1cImNhbmNsZSgpXCIgbnpNYXNrQ2xvc2FibGU9XCJmYWxzZVwiXHJcbiAgICAgICAgICBbbnpTdHlsZV09XCJ7cGFkZGluZzowfVwiPlxyXG4gIDxuZy1jb250YWluZXIgKm56TW9kYWxDb250ZW50PlxyXG4gIDxkaXYgc3R5bGU9XCJtYXgtaGVpZ2h0OjYwMHB4O292ZXJmbG93OmF1dG87bWFyZ2luLXRvcDogMTBweDtcIj5cclxuICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJpbWdzQ29udGVudFwiPjwvbmctY29udGFpbmVyPlxyXG4gIDwvZGl2PlxyXG4gIDwvbmctY29udGFpbmVyPlxyXG48L256LW1vZGFsPlxyXG48bmctdGVtcGxhdGUgI2ltZ3NDb250ZW50PlxyXG4gIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGltZ09wdCBvZiBpbWdVcmxzO2xldCBpID0gaW5kZXhcIj5cclxuICAgIDxkaXYgY2xhc3M9XCJpbWctZGl2XCI+XHJcbiAgICAgIDxpbWcgW3NyY109XCJpbWdPcHQudXJsXCIgW25nU3R5bGVdPVwieyB3aWR0aDogJzEwMHB4JyxkaXNwbGF5OiAnaW5saW5lLWJsb2NrJywgbWFyZ2luOic1cHgnIH1cIi8+XHJcbiAgICAgIDxkaXYgc3R5bGU9XCJtYXJnaW4tbGVmdDogMjBweDsgY29sb3I6IGdyZXk7XCI+e3tpbWdPcHQuZmlsZS5uYW1lfX08L2Rpdj5cclxuICAgICAgPGRpdiBzdHlsZT1cIm1hcmdpbi1yaWdodDogMjBweDsgZmxleDogMTt0ZXh0LWFsaWduOiByaWdodDtcIj5cclxuICAgICAgICA8YSB0aXRsZT1cIuS4iuenu1wiICpuZ0lmPVwiIGkgPiAwXCIgc3R5bGU9XCJkaXNwbGF5OiBibG9jaztcIiAoY2xpY2spPVwiYXJyb3dVcChpKVwiPlxyXG4gICAgICAgICAgPGkgbnotaWNvbiBuelR5cGU9XCJhcnJvdy11cFwiIG56VGhlbWU9XCJvdXRsaW5lXCIgc3R5bGU9XCJjb2xvcjogIzE4OTBmZjsgZm9udC1zaXplOiAxNXB4O1wiPjwvaT5cclxuICAgICAgICAgIOS4iuenuzwvYT5cclxuICAgICAgICA8YSB0aXRsZT1cIuS4i+enu1wiICpuZ0lmPVwiIGkgPCBpbWdVcmxzLmxlbmd0aCAtIDFcIiAoY2xpY2spPVwiYXJyb3dEb3duKGkpXCI+XHJcbiAgICAgICAgICA8aSBuei1pY29uIG56VHlwZT1cImFycm93LWRvd25cIiBuelRoZW1lPVwib3V0bGluZVwiIHN0eWxlPVwiY29sb3I6ICMxODkwZmY7IGZvbnQtc2l6ZTogMTVweFwiPjwvaT5cclxuICAgICAgICAgIOS4i+enuzwvYT5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICA8L25nLWNvbnRhaW5lcj5cclxuPC9uZy10ZW1wbGF0ZT5cclxuXHJcbiJdfQ==