atr-components 2.2.4 → 3.0.2

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 (113) hide show
  1. package/fesm2022/atr-components.mjs +218 -583
  2. package/fesm2022/atr-components.mjs.map +1 -1
  3. package/index.d.ts +1380 -5
  4. package/package.json +2 -4
  5. package/atr-components.module.d.ts +0 -9
  6. package/atr-public-api.d.ts +0 -53
  7. package/core/animations/animations.d.ts +0 -1
  8. package/core/animations/fly-in.d.ts +0 -1
  9. package/core/animations/scroll-screen.d.ts +0 -1
  10. package/core/auth/auth.guard.d.ts +0 -11
  11. package/core/base/atr-common.d.ts +0 -362
  12. package/core/directive/Infinite-scroll.directive.d.ts +0 -12
  13. package/core/directive/debounce-click.directive.d.ts +0 -14
  14. package/core/directive/error-img.directive.d.ts +0 -10
  15. package/core/directive/hq-spin.directive.d.ts +0 -13
  16. package/core/directive/role.directive.d.ts +0 -16
  17. package/core/interceptor/base.interceptor.d.ts +0 -17
  18. package/core/ngz-module/cus-zorro-antd.module.d.ts +0 -75
  19. package/core/pipe/china-num.pipe.d.ts +0 -7
  20. package/core/pipe/count.pipe.d.ts +0 -7
  21. package/core/pipe/day.pipe.d.ts +0 -8
  22. package/core/pipe/defaultVal.pipe.d.ts +0 -7
  23. package/core/pipe/dicts.pipe.d.ts +0 -10
  24. package/core/pipe/image-pipe.pipe.d.ts +0 -8
  25. package/core/pipe/is-empty.pipe.d.ts +0 -7
  26. package/core/pipe/is-not-empty.pipe.d.ts +0 -7
  27. package/core/pipe/oss.pipe.d.ts +0 -7
  28. package/core/pipe/ossStatic.pipe.d.ts +0 -7
  29. package/core/pipe/pipe-module.module.d.ts +0 -21
  30. package/core/pipe/remove-html.pipe.d.ts +0 -10
  31. package/core/pipe/safe-compute.pipe.d.ts +0 -7
  32. package/core/pipe/safe-html.pipe.d.ts +0 -10
  33. package/core/pipe/safe-url.pipe.d.ts +0 -10
  34. package/core/routereuse/atr-reuse-strategy.d.ts +0 -19
  35. package/core/services/dict/dict.service.d.ts +0 -20
  36. package/core/services/http.service.d.ts +0 -31
  37. package/core/services/menu.service.d.ts +0 -30
  38. package/core/services/upload-oss.service.d.ts +0 -14
  39. package/core/utils/ToolsUtil.d.ts +0 -180
  40. package/core/utils/localstorage.util.d.ts +0 -15
  41. package/core/utils/sessionstorage.util.d.ts +0 -15
  42. package/esm2022/atr-components.mjs +0 -5
  43. package/esm2022/atr-components.module.mjs +0 -36
  44. package/esm2022/atr-public-api.mjs +0 -55
  45. package/esm2022/core/animations/animations.mjs +0 -10
  46. package/esm2022/core/animations/fly-in.mjs +0 -19
  47. package/esm2022/core/animations/scroll-screen.mjs +0 -23
  48. package/esm2022/core/auth/auth.guard.mjs +0 -37
  49. package/esm2022/core/base/atr-common.mjs +0 -48
  50. package/esm2022/core/directive/Infinite-scroll.directive.mjs +0 -36
  51. package/esm2022/core/directive/debounce-click.directive.mjs +0 -41
  52. package/esm2022/core/directive/error-img.directive.mjs +0 -31
  53. package/esm2022/core/directive/hq-spin.directive.mjs +0 -48
  54. package/esm2022/core/directive/role.directive.mjs +0 -69
  55. package/esm2022/core/interceptor/base.interceptor.mjs +0 -165
  56. package/esm2022/core/ngz-module/cus-zorro-antd.module.mjs +0 -292
  57. package/esm2022/core/pipe/china-num.pipe.mjs +0 -36
  58. package/esm2022/core/pipe/count.pipe.mjs +0 -34
  59. package/esm2022/core/pipe/day.pipe.mjs +0 -24
  60. package/esm2022/core/pipe/defaultVal.pipe.mjs +0 -23
  61. package/esm2022/core/pipe/dicts.pipe.mjs +0 -28
  62. package/esm2022/core/pipe/image-pipe.pipe.mjs +0 -17
  63. package/esm2022/core/pipe/is-empty.pipe.mjs +0 -20
  64. package/esm2022/core/pipe/is-not-empty.pipe.mjs +0 -17
  65. package/esm2022/core/pipe/oss.pipe.mjs +0 -17
  66. package/esm2022/core/pipe/ossStatic.pipe.mjs +0 -17
  67. package/esm2022/core/pipe/pipe-module.module.mjs +0 -78
  68. package/esm2022/core/pipe/remove-html.pipe.mjs +0 -21
  69. package/esm2022/core/pipe/safe-compute.pipe.mjs +0 -23
  70. package/esm2022/core/pipe/safe-html.pipe.mjs +0 -20
  71. package/esm2022/core/pipe/safe-url.pipe.mjs +0 -20
  72. package/esm2022/core/routereuse/atr-reuse-strategy.mjs +0 -79
  73. package/esm2022/core/services/dict/dict.service.mjs +0 -152
  74. package/esm2022/core/services/http.service.mjs +0 -316
  75. package/esm2022/core/services/menu.service.mjs +0 -130
  76. package/esm2022/core/services/upload-oss.service.mjs +0 -74
  77. package/esm2022/core/utils/ToolsUtil.mjs +0 -622
  78. package/esm2022/core/utils/localstorage.util.mjs +0 -94
  79. package/esm2022/core/utils/sessionstorage.util.mjs +0 -73
  80. package/esm2022/lib/shared/atr-shared.module.mjs +0 -248
  81. package/esm2022/lib/shared/echarts/echarts.component.mjs +0 -77
  82. package/esm2022/lib/shared/form/form.component.mjs +0 -624
  83. package/esm2022/lib/shared/img-canvas/img-canvas.component.mjs +0 -132
  84. package/esm2022/lib/shared/local-upload/local-upload.component.mjs +0 -68
  85. package/esm2022/lib/shared/quill-editor/quill-editor.component.mjs +0 -254
  86. package/esm2022/lib/shared/select-icons/select-icons.component.mjs +0 -90
  87. package/esm2022/lib/shared/select-tree/select-tree.component.mjs +0 -55
  88. package/esm2022/lib/shared/service/busi.service.mjs +0 -69
  89. package/esm2022/lib/shared/share.service.mjs +0 -107
  90. package/esm2022/lib/shared/table/table-form-item/table-form-item.component.mjs +0 -96
  91. package/esm2022/lib/shared/table/table-td/table-td.component.mjs +0 -165
  92. package/esm2022/lib/shared/table/table.component.mjs +0 -766
  93. package/esm2022/lib/shared/upload/upload.component.mjs +0 -273
  94. package/esm2022/lib/shared/validators/atr-validtors.mjs +0 -9
  95. package/esm2022/lib/shared/video/video.component.mjs +0 -16
  96. package/esm2022/lib/shared/view-form/view-form.component.mjs +0 -186
  97. package/lib/shared/atr-shared.module.d.ts +0 -39
  98. package/lib/shared/echarts/echarts.component.d.ts +0 -34
  99. package/lib/shared/form/form.component.d.ts +0 -49
  100. package/lib/shared/img-canvas/img-canvas.component.d.ts +0 -28
  101. package/lib/shared/local-upload/local-upload.component.d.ts +0 -22
  102. package/lib/shared/quill-editor/quill-editor.component.d.ts +0 -45
  103. package/lib/shared/select-icons/select-icons.component.d.ts +0 -24
  104. package/lib/shared/select-tree/select-tree.component.d.ts +0 -23
  105. package/lib/shared/service/busi.service.d.ts +0 -20
  106. package/lib/shared/share.service.d.ts +0 -14
  107. package/lib/shared/table/table-form-item/table-form-item.component.d.ts +0 -25
  108. package/lib/shared/table/table-td/table-td.component.d.ts +0 -26
  109. package/lib/shared/table/table.component.d.ts +0 -94
  110. package/lib/shared/upload/upload.component.d.ts +0 -53
  111. package/lib/shared/validators/atr-validtors.d.ts +0 -2
  112. package/lib/shared/video/video.component.d.ts +0 -7
  113. package/lib/shared/view-form/view-form.component.d.ts +0 -27
@@ -1,273 +0,0 @@
1
- import { Component, Input, Output, EventEmitter } from '@angular/core';
2
- import { Observable } from 'rxjs';
3
- import { HttpRequest, HttpEventType, HttpResponse } from '@angular/common/http';
4
- import { atr_static_datas } from "../../../core/base/atr-common";
5
- import { HttpService } from "../../../core/services/http.service";
6
- import { ToolsUtil } from "../../../core/utils/ToolsUtil";
7
- import * as i0 from "@angular/core";
8
- import * as i1 from "ng-zorro-antd/image";
9
- import * as i2 from "@angular/common/http";
10
- import * as i3 from "ng-zorro-antd/modal";
11
- import * as i4 from "@angular/common";
12
- import * as i5 from "ng-zorro-antd/button";
13
- import * as i6 from "ng-zorro-antd/core/transition-patch";
14
- import * as i7 from "ng-zorro-antd/core/wave";
15
- import * as i8 from "ng-zorro-antd/icon";
16
- import * as i9 from "ng-zorro-antd/upload";
17
- import * as i10 from "ng2-dragula";
18
- import * as i11 from "../video/video.component";
19
- import * as i12 from "../../../core/pipe/image-pipe.pipe";
20
- export class UploadComponent {
21
- constructor(injector, nzImageService, httpClient, modalService) {
22
- this.injector = injector;
23
- this.nzImageService = nzImageService;
24
- this.httpClient = httpClient;
25
- this.modalService = modalService;
26
- this.isEdit = true;
27
- this.allowChangSeq = false;
28
- this.uploadUrl = "";
29
- this.uploadData = {};
30
- this.showUploadList = {
31
- showPreviewIcon: true,
32
- showRemoveIcon: true,
33
- hidePreviewIconInNonImage: true
34
- };
35
- this.afterChange = new EventEmitter();
36
- this.optsChange = new EventEmitter();
37
- this.onBeforeUpload = new EventEmitter();
38
- this.previewImage = '';
39
- this.previewVisible = false;
40
- this.changeVisible = false;
41
- this.handlePreview = (file) => {
42
- this.previewImage = file.url || file.thumbUrl;
43
- this.previewVisible = true;
44
- };
45
- this.remove = (file) => {
46
- if (!this.isEdit) {
47
- return false;
48
- }
49
- console.log(file);
50
- if (this.opts && this.opts.removeAction) {
51
- return false;
52
- }
53
- return true;
54
- };
55
- this.beforeUpload = (file, fileList) => {
56
- return new Observable(observe => {
57
- let fileName;
58
- if (this.opts.keepName) {
59
- fileName = file.name;
60
- }
61
- else {
62
- fileName = ToolsUtil.getRandomFileName() + "." + ToolsUtil.getFileExt(file.name);
63
- }
64
- this.onBeforeUpload.emit({ code: 'getFile', data: { file: file, fileList: fileList } });
65
- this.httpService.post(atr_static_datas.OSS_POLICY, {
66
- dir: this.opts.uploadDir,
67
- fileName: fileName,
68
- 'success_action_status': '200'
69
- }, ToolsUtil.getHttpOptions()).subscribe(result => {
70
- if (result.status == 200) {
71
- this.uploadData[file.uid] = result.data;
72
- observe.next(true);
73
- }
74
- else
75
- observe.next(false);
76
- observe.unsubscribe();
77
- }, error => {
78
- observe.next(false);
79
- observe.unsubscribe();
80
- });
81
- });
82
- };
83
- this.customReq = (item) => {
84
- const formData = new FormData();
85
- let uploadData = this.uploadData[item.file.uid];
86
- for (let key in uploadData) {
87
- if (key != 'host')
88
- formData.append(key, uploadData[key]);
89
- }
90
- formData.append('file', item.file);
91
- const req = new HttpRequest('POST', uploadData.host, formData, {
92
- reportProgress: true
93
- });
94
- return this.httpClient.request(req).subscribe((event) => {
95
- if (event.type === HttpEventType.UploadProgress) {
96
- if (event.total > 0) {
97
- event.percent = (event.loaded / event.total) * 100;
98
- }
99
- item.onProgress(event, item.file);
100
- }
101
- else if (event instanceof HttpResponse) {
102
- item.file["key"] = uploadData.key;
103
- item.onSuccess(event.body, item.file, event);
104
- }
105
- }, err => {
106
- item.onError(err, item.file);
107
- });
108
- };
109
- }
110
- ngOnInit() {
111
- }
112
- getFileTyeIcon(fileType, fileName) {
113
- let thumbUrl = this.getFileThumbUrl(fileType);
114
- if (thumbUrl === '') {
115
- thumbUrl = this.getThumbUrl(fileName);
116
- }
117
- return thumbUrl;
118
- }
119
- getThumbUrl(path) {
120
- if (!path) {
121
- return '';
122
- }
123
- // 后缀获取
124
- if (path.endsWith('.mp4')) {
125
- return '../../../assets/video.jpg';
126
- }
127
- else {
128
- return '';
129
- }
130
- }
131
- getFileThumbUrl(type) {
132
- let thumbUrl = '';
133
- if (type === 'video/mp4' || type === 'mp4') {
134
- thumbUrl = '../../../assets/video.jpg';
135
- }
136
- return thumbUrl;
137
- }
138
- onChange(params) {
139
- console.log(params);
140
- if (params.type == "success" || params.type == "removed") {
141
- this.opts.imageList = [];
142
- setTimeout(() => {
143
- this.opts.imageList = params.fileList.map((file) => {
144
- if (file.type == 'video/mp4' && file.uid === params.file.uid) {
145
- let thumbUrl = this.getFileTyeIcon(file.type, file.name);
146
- file.thumbUrl = thumbUrl ? thumbUrl : file.thumbUrl;
147
- file.url = file.originFileObj ? atr_static_datas.OSS_URL + file.originFileObj['key'] : file['path'];
148
- }
149
- return file;
150
- });
151
- }, 50);
152
- let fileUrls = [];
153
- for (let file of params.fileList) {
154
- if (file["key"] != undefined) {
155
- fileUrls.push(file["key"]);
156
- continue;
157
- }
158
- if (file.originFileObj) {
159
- let originFileObj = file.originFileObj;
160
- if (originFileObj["key"] != undefined) {
161
- fileUrls.push(originFileObj["key"]);
162
- }
163
- }
164
- }
165
- this.afterChange.emit({ key: this.opts.key, values: fileUrls.join(",") });
166
- this.optsChange.emit(this.opts);
167
- }
168
- }
169
- get httpService() {
170
- return this.injector.get(HttpService);
171
- }
172
- openBannerSeq(tplContent, tplFooter) {
173
- this.tplModal = this.modalService.create({
174
- nzTitle: "修改图片顺序",
175
- nzContent: tplContent,
176
- nzFooter: tplFooter,
177
- nzMaskClosable: false,
178
- nzClosable: false,
179
- nzOnOk: () => console.log('Click ok')
180
- });
181
- console.log(this.opts.imageList);
182
- this.changeVisible = true;
183
- }
184
- destroyTplModal() {
185
- if (this.tplModal)
186
- this.tplModal.destroy();
187
- }
188
- arrowUp(index) {
189
- let img = this.opts.imageList[index];
190
- this.opts.imageList[index] = this.opts.imageList[index - 1];
191
- this.opts.imageList[index - 1] = img;
192
- }
193
- arrowDown(index) {
194
- let img = this.opts.imageList[index];
195
- this.opts.imageList[index] = this.opts.imageList[index + 1];
196
- this.opts.imageList[index + 1] = img;
197
- }
198
- saveSeq() {
199
- this.destroyTplModal();
200
- let imgs = this.opts.imageList;
201
- this.opts.imageList = [];
202
- setTimeout(() => {
203
- this.opts.imageList = imgs;
204
- console.log(this.opts.imageList);
205
- let fileUrls = [];
206
- for (let file of this.opts.imageList) {
207
- if (file["key"] != undefined) {
208
- fileUrls.push(file["key"]);
209
- continue;
210
- }
211
- if (file.originFileObj && file.originFileObj["key"] != undefined)
212
- fileUrls.push(file.originFileObj["key"]);
213
- }
214
- this.afterChange.emit({ key: this.opts.key, values: fileUrls.join(",") });
215
- }, 50);
216
- }
217
- dragnumber(numer) {
218
- console.log(numer);
219
- console.log('or', this.opts.imageList);
220
- console.log('new', numer);
221
- this.saveSeq();
222
- // this.opts.imageList = numer
223
- }
224
- delImg(numer) {
225
- console.log(numer);
226
- this.opts.imageList = this.opts.imageList.filter((v, i) => i != numer);
227
- let fileUrls = [];
228
- for (let file of this.opts.imageList) {
229
- if (file["key"] != undefined) {
230
- fileUrls.push(file["key"]);
231
- continue;
232
- }
233
- if (file.originFileObj && file.originFileObj["key"] != undefined)
234
- fileUrls.push(file.originFileObj["key"]);
235
- }
236
- this.afterChange.emit({ key: this.opts.key, values: fileUrls.join(",") });
237
- }
238
- priviewImg(img) {
239
- let url = ToolsUtil.getOssUrl(this.getImgUrl(img));
240
- console.log(url);
241
- this.nzImageService.preview([{
242
- src: url,
243
- alt: 'ng-zorro'
244
- }], { nzZoom: 1.5, nzRotate: 0 });
245
- }
246
- getImgUrl(img) {
247
- if (img.originFileObj && img.originFileObj.key) {
248
- return img.originFileObj.key;
249
- }
250
- return (img.url || img.thumbUrl);
251
- }
252
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: UploadComponent, deps: [{ token: i0.Injector }, { token: i1.NzImageService }, { token: i2.HttpClient }, { token: i3.NzModalService }], target: i0.ɵɵFactoryTarget.Component }); }
253
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: UploadComponent, selector: "atr-img-upload", inputs: { opts: "opts", isEdit: "isEdit", allowChangSeq: "allowChangSeq", showUploadList: "showUploadList" }, outputs: { afterChange: "afterChange", optsChange: "optsChange", onBeforeUpload: "onBeforeUpload" }, ngImport: i0, template: "<div class=\"clearfix\">\r\n <nz-upload\r\n *ngIf=\"opts && opts?.uploadType == 'drag'\"\r\n nzType=\"drag\"\r\n [nzAction]=\"\"\r\n [nzBeforeUpload]=\"opts.beforeUpload || beforeUpload\"\r\n [nzRemove]=\"remove\"\r\n [nzSize]=\"opts.nzSize || 0\"\r\n [nzCustomRequest]=\"opts.customReq || customReq\"\r\n (nzChange)=\"onChange($event)\"\r\n [nzType]=\"opts?.uploadType\"\r\n [nzAccept]=\"opts.nzFileType\"\r\n [nzLimit]=\"'1'\"\r\n >\r\n <p class=\"ant-upload-drag-icon\">\r\n <i nz-icon nzType=\"inbox\"></i>\r\n </p>\r\n <p class=\"ant-upload-text\">\u5355\u51FB\u6216\u62D6\u52A8\u6587\u4EF6\u5230\u6B64\u533A\u57DF\u4E0A\u4F20</p>\r\n </nz-upload>\r\n <nz-upload\r\n *ngIf=\"opts && opts?.uploadType == 'button'\"\r\n nzType=\"drag\"\r\n nzAction=\"\"\r\n [nzSize]=\"opts.nzSize || 0\"\r\n [nzShowUploadList]=\"showUploadList\"\r\n [nzBeforeUpload]=\"opts.beforeUpload || beforeUpload\"\r\n [nzRemove]=\"remove\"\r\n [nzCustomRequest]=\"opts.customReq || customReq\"\r\n (nzChange)=\"onChange($event)\"\r\n [nzType]=\"opts?.uploadType\"\r\n [nzAccept]=\"opts.nzFileType\"\r\n [nzLimit]=\"'1'\"\r\n >\r\n <button nz-button nzSize=\"small\"><i nz-icon nzType=\"upload\" style=\"font-size: 16px\"></i><span> {{opts.btnName}}</span></button>\r\n </nz-upload>\r\n <nz-upload\r\n *ngIf=\"opts && !opts?.uploadType \"\r\n nzAction=\"\"\r\n nzListType=\"picture-card\"\r\n [nzSize]=\"opts.nzSize || 0\"\r\n [(nzFileList)]=\"opts.imageList\"\r\n [nzShowButton]=\"opts.imageList.length < opts.limit\"\r\n [nzShowUploadList]=\"showUploadList\"\r\n [nzPreview]=\"handlePreview\"\r\n [nzRemove]=\"remove\"\r\n [nzBeforeUpload]=\"opts.beforeUpload || beforeUpload\"\r\n [nzCustomRequest]=\"opts.customReq || customReq\"\r\n (nzChange)=\"onChange($event)\"\r\n [nzType]=\"opts?.uploadType\"\r\n [nzAccept]=\"opts.nzFileType\"\r\n [nzDisabled]=\"!isEdit\"\r\n [nzLimit]=\"'1'\"\r\n [nzFileListRender]=\"opts && isEdit && allowChangSeq && opts.imageList.length > 0 ? fileListTmp : null\"\r\n >\r\n <i nz-icon nzType=\"plus\"></i>\r\n <div class=\"ant-upload-text\">{{opts.btnName?opts.btnName:'\u4E0A\u4F20\u56FE\u7247'}}</div>\r\n </nz-upload>\r\n <!-- <a *ngIf=\"allowChangSeq && isEdit && opts.imageList.length > 1\" (click)=\"openBannerSeq(imgsContent, tplFooter)\"\r\n style=\"margin-left: 10px; \"\r\n ><i nz-icon nzType=\"plus\" nzTheme=\"outline\" style=\"color: #1890ff; font-size: 15px\"></i>\u8C03\u6574\u56FE\u7247\u987A\u5E8F</a>-->\r\n <nz-modal\r\n [nzVisible]=\"previewVisible\"\r\n [nzContent]=\"modalContent\"\r\n [nzFooter]=\"null\"\r\n (nzOnCancel)=\"previewVisible = false\"\r\n >\r\n <ng-template #modalContent>\r\n <img *ngIf=\"!previewImage.endsWith('.mp4')\" [src]=\"previewImage\" [ngStyle]=\"{ width: '100%' }\"/>\r\n <div style=\"width: 100%;margin-top: 15px\">\r\n <app-video *ngIf=\"previewImage.endsWith('.mp4')\" [url]=\"previewImage\"></app-video>\r\n </div>\r\n </ng-template>\r\n </nz-modal>\r\n <ng-template #imgsContent>\r\n <ng-container *ngIf=\"opts && opts.imageList\">\r\n <ng-container *ngFor=\"let imgs of opts.imageList;let i = index\">\r\n <div class=\"img-div\">\r\n <img [src]=\"imgs.url || imgs.thumbUrl\" [ngStyle]=\"{ width: '100px',display: 'inline-block', margin:'10px' }\"/>\r\n <div style=\"margin-right: 20px\">\r\n <a title=\"\u4E0A\u79FB\" *ngIf=\" i > 0\" style=\"display: block;\" (click)=\"arrowUp(i)\"><i nz-icon nzType=\"arrow-up\"\r\n nzTheme=\"outline\"\r\n style=\"color: #1890ff; font-size: 15px;\"></i>\r\n \u4E0A\u79FB</a>\r\n <a title=\"\u4E0B\u79FB\" *ngIf=\" i < opts.imageList.length - 1\" (click)=\"arrowDown(i)\"><i nz-icon nzType=\"arrow-down\"\r\n nzTheme=\"outline\"\r\n 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-container>\r\n\r\n </ng-template>\r\n <!-- </nz-modal>-->\r\n</div>\r\n<ng-template #fileListTmp>\r\n <div dragula=\"dragulaBag\" [(dragulaModel)]=\"opts.imageList\" (dragulaModelChange)=\"dragnumber($event)\">\r\n <ng-container *ngFor=\"let imgs of opts.imageList;let i = index\">\r\n <div class=\"img-div img-pre\" style=\"\">\r\n <img [src]=\"getImgUrl(imgs) |ossImg\" [ngStyle]=\"{ width: '100px',display: 'inline-block', margin:'10px' }\"/>\r\n <div>\r\n <span (click)=\"priviewImg(imgs)\" nz-icon nzType=\"eye\" nzTheme=\"outline\"></span>\r\n <span (click)=\"delImg(i)\" nz-icon nzType=\"delete\" nzTheme=\"outline\"></span>\r\n </div>\r\n </div>\r\n </ng-container>\r\n </div>\r\n\r\n</ng-template>\r\n<ng-template #tplFooter>\r\n <button nz-button nzType=\"default\" (click)=\"destroyTplModal()\">\r\n \u53D6\u6D88\r\n </button>\r\n <button nz-button nzType=\"primary\" (click)=\"saveSeq()\">\r\n \u4FDD\u5B58\u987A\u5E8F\r\n </button>\r\n</ng-template>\r\n\r\n\r\n", styles: ["i[nz-icon]{font-size:32px;color:#999}.ant-upload-text{margin-top:8px;color:#666}.img-div{padding:8px;border:1px solid #d9d9d9;border-radius:4px;margin-top:20px;display:flex;align-items:center;justify-content:space-between}:host .img-pre{display:inline-block;position:relative;margin-left:10px}:host .img-pre div{display:none;position:absolute;width:100%;height:100%;top:0;left:0;background:#0000006b;z-index:200;color:#fff;align-items:center;justify-content:center;font-size:16px}:host .img-pre div span{margin:10px;cursor:pointer}:host .img-pre:hover div{display:flex}\n"], dependencies: [{ kind: "directive", type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i4.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "component", type: i5.NzButtonComponent, selector: "button[nz-button], a[nz-button]", inputs: ["nzBlock", "nzGhost", "nzSearch", "nzLoading", "nzDanger", "disabled", "tabIndex", "nzType", "nzShape", "nzSize"], exportAs: ["nzButton"] }, { kind: "directive", type: i6.ɵ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: i7.NzWaveDirective, selector: "[nz-wave],button[nz-button]:not([nzType=\"link\"]):not([nzType=\"text\"])", inputs: ["nzWaveExtraNode"], exportAs: ["nzWave"] }, { kind: "directive", type: i8.NzIconDirective, selector: "[nz-icon]", inputs: ["nzSpin", "nzRotate", "nzType", "nzTheme", "nzTwotoneColor", "nzIconfont"], exportAs: ["nzIcon"] }, { kind: "component", type: i3.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: "component", type: i9.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: i10.DragulaDirective, selector: "[dragula]", inputs: ["dragula", "dragulaModel"], outputs: ["dragulaModelChange"] }, { kind: "component", type: i11.VideoComponent, selector: "app-video", inputs: ["url"] }, { kind: "pipe", type: i12.OssImgPipe, name: "ossImg" }] }); }
254
- }
255
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: UploadComponent, decorators: [{
256
- type: Component,
257
- args: [{ selector: 'atr-img-upload', template: "<div class=\"clearfix\">\r\n <nz-upload\r\n *ngIf=\"opts && opts?.uploadType == 'drag'\"\r\n nzType=\"drag\"\r\n [nzAction]=\"\"\r\n [nzBeforeUpload]=\"opts.beforeUpload || beforeUpload\"\r\n [nzRemove]=\"remove\"\r\n [nzSize]=\"opts.nzSize || 0\"\r\n [nzCustomRequest]=\"opts.customReq || customReq\"\r\n (nzChange)=\"onChange($event)\"\r\n [nzType]=\"opts?.uploadType\"\r\n [nzAccept]=\"opts.nzFileType\"\r\n [nzLimit]=\"'1'\"\r\n >\r\n <p class=\"ant-upload-drag-icon\">\r\n <i nz-icon nzType=\"inbox\"></i>\r\n </p>\r\n <p class=\"ant-upload-text\">\u5355\u51FB\u6216\u62D6\u52A8\u6587\u4EF6\u5230\u6B64\u533A\u57DF\u4E0A\u4F20</p>\r\n </nz-upload>\r\n <nz-upload\r\n *ngIf=\"opts && opts?.uploadType == 'button'\"\r\n nzType=\"drag\"\r\n nzAction=\"\"\r\n [nzSize]=\"opts.nzSize || 0\"\r\n [nzShowUploadList]=\"showUploadList\"\r\n [nzBeforeUpload]=\"opts.beforeUpload || beforeUpload\"\r\n [nzRemove]=\"remove\"\r\n [nzCustomRequest]=\"opts.customReq || customReq\"\r\n (nzChange)=\"onChange($event)\"\r\n [nzType]=\"opts?.uploadType\"\r\n [nzAccept]=\"opts.nzFileType\"\r\n [nzLimit]=\"'1'\"\r\n >\r\n <button nz-button nzSize=\"small\"><i nz-icon nzType=\"upload\" style=\"font-size: 16px\"></i><span> {{opts.btnName}}</span></button>\r\n </nz-upload>\r\n <nz-upload\r\n *ngIf=\"opts && !opts?.uploadType \"\r\n nzAction=\"\"\r\n nzListType=\"picture-card\"\r\n [nzSize]=\"opts.nzSize || 0\"\r\n [(nzFileList)]=\"opts.imageList\"\r\n [nzShowButton]=\"opts.imageList.length < opts.limit\"\r\n [nzShowUploadList]=\"showUploadList\"\r\n [nzPreview]=\"handlePreview\"\r\n [nzRemove]=\"remove\"\r\n [nzBeforeUpload]=\"opts.beforeUpload || beforeUpload\"\r\n [nzCustomRequest]=\"opts.customReq || customReq\"\r\n (nzChange)=\"onChange($event)\"\r\n [nzType]=\"opts?.uploadType\"\r\n [nzAccept]=\"opts.nzFileType\"\r\n [nzDisabled]=\"!isEdit\"\r\n [nzLimit]=\"'1'\"\r\n [nzFileListRender]=\"opts && isEdit && allowChangSeq && opts.imageList.length > 0 ? fileListTmp : null\"\r\n >\r\n <i nz-icon nzType=\"plus\"></i>\r\n <div class=\"ant-upload-text\">{{opts.btnName?opts.btnName:'\u4E0A\u4F20\u56FE\u7247'}}</div>\r\n </nz-upload>\r\n <!-- <a *ngIf=\"allowChangSeq && isEdit && opts.imageList.length > 1\" (click)=\"openBannerSeq(imgsContent, tplFooter)\"\r\n style=\"margin-left: 10px; \"\r\n ><i nz-icon nzType=\"plus\" nzTheme=\"outline\" style=\"color: #1890ff; font-size: 15px\"></i>\u8C03\u6574\u56FE\u7247\u987A\u5E8F</a>-->\r\n <nz-modal\r\n [nzVisible]=\"previewVisible\"\r\n [nzContent]=\"modalContent\"\r\n [nzFooter]=\"null\"\r\n (nzOnCancel)=\"previewVisible = false\"\r\n >\r\n <ng-template #modalContent>\r\n <img *ngIf=\"!previewImage.endsWith('.mp4')\" [src]=\"previewImage\" [ngStyle]=\"{ width: '100%' }\"/>\r\n <div style=\"width: 100%;margin-top: 15px\">\r\n <app-video *ngIf=\"previewImage.endsWith('.mp4')\" [url]=\"previewImage\"></app-video>\r\n </div>\r\n </ng-template>\r\n </nz-modal>\r\n <ng-template #imgsContent>\r\n <ng-container *ngIf=\"opts && opts.imageList\">\r\n <ng-container *ngFor=\"let imgs of opts.imageList;let i = index\">\r\n <div class=\"img-div\">\r\n <img [src]=\"imgs.url || imgs.thumbUrl\" [ngStyle]=\"{ width: '100px',display: 'inline-block', margin:'10px' }\"/>\r\n <div style=\"margin-right: 20px\">\r\n <a title=\"\u4E0A\u79FB\" *ngIf=\" i > 0\" style=\"display: block;\" (click)=\"arrowUp(i)\"><i nz-icon nzType=\"arrow-up\"\r\n nzTheme=\"outline\"\r\n style=\"color: #1890ff; font-size: 15px;\"></i>\r\n \u4E0A\u79FB</a>\r\n <a title=\"\u4E0B\u79FB\" *ngIf=\" i < opts.imageList.length - 1\" (click)=\"arrowDown(i)\"><i nz-icon nzType=\"arrow-down\"\r\n nzTheme=\"outline\"\r\n 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-container>\r\n\r\n </ng-template>\r\n <!-- </nz-modal>-->\r\n</div>\r\n<ng-template #fileListTmp>\r\n <div dragula=\"dragulaBag\" [(dragulaModel)]=\"opts.imageList\" (dragulaModelChange)=\"dragnumber($event)\">\r\n <ng-container *ngFor=\"let imgs of opts.imageList;let i = index\">\r\n <div class=\"img-div img-pre\" style=\"\">\r\n <img [src]=\"getImgUrl(imgs) |ossImg\" [ngStyle]=\"{ width: '100px',display: 'inline-block', margin:'10px' }\"/>\r\n <div>\r\n <span (click)=\"priviewImg(imgs)\" nz-icon nzType=\"eye\" nzTheme=\"outline\"></span>\r\n <span (click)=\"delImg(i)\" nz-icon nzType=\"delete\" nzTheme=\"outline\"></span>\r\n </div>\r\n </div>\r\n </ng-container>\r\n </div>\r\n\r\n</ng-template>\r\n<ng-template #tplFooter>\r\n <button nz-button nzType=\"default\" (click)=\"destroyTplModal()\">\r\n \u53D6\u6D88\r\n </button>\r\n <button nz-button nzType=\"primary\" (click)=\"saveSeq()\">\r\n \u4FDD\u5B58\u987A\u5E8F\r\n </button>\r\n</ng-template>\r\n\r\n\r\n", styles: ["i[nz-icon]{font-size:32px;color:#999}.ant-upload-text{margin-top:8px;color:#666}.img-div{padding:8px;border:1px solid #d9d9d9;border-radius:4px;margin-top:20px;display:flex;align-items:center;justify-content:space-between}:host .img-pre{display:inline-block;position:relative;margin-left:10px}:host .img-pre div{display:none;position:absolute;width:100%;height:100%;top:0;left:0;background:#0000006b;z-index:200;color:#fff;align-items:center;justify-content:center;font-size:16px}:host .img-pre div span{margin:10px;cursor:pointer}:host .img-pre:hover div{display:flex}\n"] }]
258
- }], ctorParameters: () => [{ type: i0.Injector }, { type: i1.NzImageService }, { type: i2.HttpClient }, { type: i3.NzModalService }], propDecorators: { opts: [{
259
- type: Input
260
- }], isEdit: [{
261
- type: Input
262
- }], allowChangSeq: [{
263
- type: Input
264
- }], showUploadList: [{
265
- type: Input
266
- }], afterChange: [{
267
- type: Output
268
- }], optsChange: [{
269
- type: Output
270
- }], onBeforeUpload: [{
271
- type: Output
272
- }] } });
273
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXBsb2FkLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NvbXBvbmVudHMvc3JjL2xpYi9zaGFyZWQvdXBsb2FkL3VwbG9hZC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb21wb25lbnRzL3NyYy9saWIvc2hhcmVkL3VwbG9hZC91cGxvYWQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLFNBQVMsRUFBVSxLQUFLLEVBQUUsTUFBTSxFQUFFLFlBQVksRUFBc0IsTUFBTSxlQUFlLENBQUM7QUFDbEcsT0FBTyxFQUFDLFVBQVUsRUFBQyxNQUFNLE1BQU0sQ0FBQztBQUNoQyxPQUFPLEVBQUMsV0FBVyxFQUFhLGFBQWEsRUFBRSxZQUFZLEVBQTBCLE1BQU0sc0JBQXNCLENBQUM7QUFJbEgsT0FBTyxFQUFDLGdCQUFnQixFQUFZLE1BQU0sK0JBQStCLENBQUM7QUFDMUUsT0FBTyxFQUFDLFdBQVcsRUFBQyxNQUFNLHFDQUFxQyxDQUFDO0FBQ2hFLE9BQU8sRUFBQyxTQUFTLEVBQUMsTUFBTSwrQkFBK0IsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7QUFReEQsTUFBTSxPQUFPLGVBQWU7SUE2QjFCLFlBQW9CLFFBQWtCLEVBQVUsY0FBOEIsRUFDMUQsVUFBc0IsRUFBVSxZQUE0QjtRQUQ1RCxhQUFRLEdBQVIsUUFBUSxDQUFVO1FBQVUsbUJBQWMsR0FBZCxjQUFjLENBQWdCO1FBQzFELGVBQVUsR0FBVixVQUFVLENBQVk7UUFBVSxpQkFBWSxHQUFaLFlBQVksQ0FBZ0I7UUEzQnZFLFdBQU0sR0FBRyxJQUFJLENBQUM7UUFDZCxrQkFBYSxHQUFHLEtBQUssQ0FBQztRQUUvQixjQUFTLEdBQVEsRUFBRSxDQUFDO1FBRXBCLGVBQVUsR0FBUSxFQUFFLENBQUE7UUFFWCxtQkFBYyxHQUF1STtZQUM1SixlQUFlLEVBQUUsSUFB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R0FBRyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3JDLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQztRQUM1RCxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0lBQ3ZDLENBQUM7SUFFRCxTQUFTLENBQUMsS0FBVTtRQUNsQixJQUFJLEdBQUcsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNyQyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFDNUQsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztJQUN2QyxDQUFDO0lBRUQsT0FBTztRQUNMLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQztRQUN2QixJQUFJLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQztRQUMvQixJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxFQUFFLENBQUM7UUFDekIsVUFBVSxDQUFDLEdBQUcsRUFBRTtZQUNkLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQztZQUMzQixPQUFPLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7WUFDakMsSUFBSSxRQUFRLEdBQVEsRUFBRSxDQUFDO1lBQ3ZCLEtBQUssSUFBSSxJQUFJLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUU7Z0JBQ3BDLElBQUksSUFBSSxDQUFDLEtBQUss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Q0FBQyxHQUFHLElBQUksR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFBO0lBQ2xDLENBQUM7K0dBOVFVLGVBQWU7bUdBQWYsZUFBZSx5UUNoQjVCLDAxS0F1SEE7OzRGRHZHYSxlQUFlO2tCQUwzQixTQUFTOytCQUNFLGdCQUFnQjtnS0FNakIsSUFBSTtzQkFBWixLQUFLO2dCQUNHLE1BQU07c0JBQWQsS0FBSztnQkFDRyxhQUFhO3NCQUFyQixLQUFLO2dCQU1HLGNBQWM7c0JBQXRCLEtBQUs7Z0JBT04sV0FBVztzQkFEVixNQUFNO2dCQUlQLFVBQVU7c0JBRFQsTUFBTTtnQkFHUCxjQUFjO3NCQURiLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0NvbXBvbmVudCwgT25Jbml0LCBJbnB1dCwgT3V0cHV0LCBFdmVudEVtaXR0ZXIsIEluamVjdG9yLCBWaWV3Q2hpbGR9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQge09ic2VydmFibGV9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQge0h0dHBSZXF1ZXN0LCBIdHRwRXZlbnQsIEh0dHBFdmVudFR5cGUsIEh0dHBSZXNwb25zZSwgSHR0cENsaWVudCwgSHR0cEhlYWRlcnN9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcclxuaW1wb3J0IHtOek1vZGFsUmVmLCBOek1vZGFsU2VydmljZX0gZnJvbSAnbmctem9ycm8tYW50ZC9tb2RhbCc7XHJcbmltcG9ydCB7TnpVcGxvYWRDaGFuZ2VQYXJhbSwgTnpVcGxvYWRGaWxlLCBOelVwbG9hZFhIUkFyZ3N9IGZyb20gJ25nLXpvcnJvLWFudGQvdXBsb2FkJztcclxuaW1wb3J0IHtlbnZpcm9ubWVudH0gZnJvbSBcIm5nLXpvcnJvLWFudGQvY29yZS9lbnZpcm9ubWVudHNcIjtcclxuaW1wb3J0IHthdHJfc3RhdGljX2RhdGFzLCBJbWFnZU9wdHN9IGZyb20gXCIuLi8uLi8uLi9jb3JlL2Jhc2UvYXRyLWNvbW1vblwiO1xyXG5pbXBvcnQge0h0dHBTZXJ2aWNlfSBmcm9tIFwiLi4vLi4vLi4vY29yZS9zZXJ2aWNlcy9odHRwLnNlcnZpY2VcIjtcclxuaW1wb3J0IHtUb29sc1V0aWx9IGZyb20gXCIuLi8uLi8uLi9jb3JlL3V0aWxzL1Rvb2xzVXRpbFwiO1xyXG5pbXBvcnQge056SW1hZ2VTZXJ2aWNlfSBmcm9tICduZy16b3Jyby1hbnRkL2ltYWdlJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnYXRyLWltZy11cGxvYWQnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi91cGxvYWQuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL3VwbG9hZC5jb21wb25lbnQubGVzcyddXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBVcGxvYWRDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xyXG5cclxuICBASW5wdXQoKSBvcHRzOiBJbWFnZU9wdHMgfCBhbnk7XHJcbiAgQElucHV0KCkgaXNFZGl0ID0gdHJ1ZTtcclxuICBASW5wdXQoKSBhbGxvd0NoYW5nU2VxID0gZmFsc2U7XHJcbiAgdHBsTW9kYWw6IE56TW9kYWxSZWYgfCBhbnk7XHJcbiAgdXBsb2FkVXJsOiBhbnkgPSBcIlwiO1xyXG5cclxuICB1cGxvYWREYXRhOiBhbnkgPSB7fVxyXG5cclxuICBASW5wdXQoKSBzaG93VXBsb2FkTGlzdDogYm9vbGVhbiB8IHsgc2hvd1ByZXZpZXdJY29uPzogYm9vbGVhbiwgc2hvd1JlbW92ZUljb24/OiBib29sZWFuLCBzaG93RG93bmxvYWRJY29uPzogYm9vbGVhbiwgaGlkZVByZXZpZXdJY29uSW5Ob25JbWFnZT86IGJvb2xlYW4gfSA9IHtcclxuICAgIHNob3dQcmV2aWV3SWNvbjogdHJ1ZSxcclxuICAgIHNob3dSZW1vdmVJY29uOiB0cnVlLFxyXG4gICAgaGlkZVByZXZpZXdJY29uSW5Ob25JbWFnZTogdHJ1ZVxyXG4gIH07XHJcblxyXG4gIEBPdXRwdXQoKVxyXG4gIGFmdGVyQ2hhbmdlOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuXHJcbiAgQE91dHB1dCgpXHJcbiAgb3B0c0NoYW5nZTogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcbiAgQE91dHB1dCgpXHJcbiAgb25CZWZvcmVVcGxvYWQ6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG5cclxuXHJcbiAgcHJldmlld0ltYWdlOiBzdHJpbmcgfCBhbnkgPSAnJztcclxuICBwcmV2aWV3VmlzaWJsZSA9IGZhbHNlO1xyXG4gIGNoYW5nZVZpc2libGUgPSBmYWxzZTtcclxuXHJcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBpbmplY3RvcjogSW5qZWN0b3IsIHByaXZhdGUgbnpJbWFnZVNlcnZpY2U6IE56SW1hZ2VTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgIHByaXZhdGUgaHR0cENsaWVudDogSHR0cENsaWVudCwgcHJpdmF0ZSBtb2RhbFNlcnZpY2U6IE56TW9kYWxTZXJ2aWNlKSB7XHJcbiAgfVxyXG5cclxuICBuZ09uSW5pdCgpIHtcclxuICB9XHJcblxyXG4gIGdldEZpbGVUeWVJY29uKGZpbGVUeXBlOiBzdHJpbmcsIGZpbGVOYW1lOiBzdHJpbmcpIHtcclxuICAgIGxldCB0aHVtYlVybCA9IHRoaXMuZ2V0RmlsZVRodW1iVXJsKGZpbGVUeXBlKTtcclxuICAgIGlmICh0aHVtYlVybCA9PT0gJycpIHtcclxuICAgICAgdGh1bWJVcmwgPSB0aGlzLmdldFRodW1iVXJsKGZpbGVOYW1lKTtcclxuICAgIH1cclxuICAgIHJldHVybiB0aHVtYlVybDtcclxuICB9XHJcblxyXG4gIGdldFRodW1iVXJsKHBhdGg6IHN0cmluZyk6IHN0cmluZyB7XHJcblxyXG4gICAgaWYgKCFwYXRoKSB7XHJcbiAgICAgIHJldHVybiAnJztcclxuICAgIH1cclxuICAgIC8vIOWQjue8gOiOt+WPllxyXG4gICAgaWYgKHBhdGguZW5kc1dpdGgoJy5tcDQnKSkge1xyXG4gICAgICByZXR1cm4gJy4uLy4uLy4uL2Fzc2V0cy92aWRlby5qcGcnO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuICcnO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZ2V0RmlsZVRodW1iVXJsKHR5cGU6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICBsZXQgdGh1bWJVcmwgPSAnJztcclxuICAgIGlmICh0eXBlID09PSAndmlkZW8vbXA0JyB8fCB0eXBlID09PSAnbXA0Jykge1xyXG4gICAgICB0aHVtYlVybCA9ICcuLi8uLi8uLi9hc3NldHMvdmlkZW8uanBnJztcclxuICAgIH1cclxuICAgIHJldHVybiB0aHVtYlVybDtcclxuICB9XHJcblxyXG4gIG9uQ2hhbmdlKHBhcmFtczogTnpVcGxvYWRDaGFuZ2VQYXJhbSkge1xyXG4gICAgY29uc29sZS5sb2cocGFyYW1zKTtcclxuICAgIGlmIChwYXJhbXMudHlwZSA9PSBcInN1Y2Nlc3NcIiB8fCBwYXJhbXMudHlwZSA9PSBcInJlbW92ZWRcIikge1xyXG5cclxuICAgICAgdGhpcy5vcHRzLmltYWdlTGlzdCA9IFtdO1xyXG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICB0aGlzLm9wdHMuaW1hZ2VMaXN0ID0gcGFyYW1zLmZpbGVMaXN0Lm1hcCgoZmlsZTogYW55KSA9PiB7XHJcblxyXG4gICAgICAgICAgaWYgKGZpbGUudHlwZSA9PSAndmlkZW8vbXA0JyAmJiBmaWxlLnVpZCA9PT0gcGFyYW1zLmZpbGUudWlkKSB7XHJcbiAgICAgICAgICAgIGxldCB0aHVtYlVybCA9IHRoaXMuZ2V0RmlsZVR5ZUljb24oZmlsZS50eXBlLCBmaWxlLm5hbWUpO1xyXG4gICAgICAgICAgICBmaWxlLnRodW1iVXJsID0gdGh1bWJVcmwgPyB0aHVtYlVybCA6IGZpbGUudGh1bWJVcmw7XHJcbiAgICAgICAgICAgIGZpbGUudXJsID0gZmlsZS5vcmlnaW5GaWxlT2JqID8gYXRyX3N0YXRpY19kYXRhcy5PU1NfVVJMICsgZmlsZS5vcmlnaW5GaWxlT2JqWydrZXknXSA6IGZpbGVbJ3BhdGgnXTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHJldHVybiBmaWxlO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICB9LCA1MCk7XHJcbiAgICAgIGxldCBmaWxlVXJsczogYW55W10gPSBbXTtcclxuICAgICAgZm9yIChsZXQgZmlsZSBvZiBwYXJhbXMuZmlsZUxpc3QpIHtcclxuICAgICAgICBpZiAoZmlsZVtcImtleVwiXSAhPSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgIGZpbGVVcmxzLnB1c2goZmlsZVtcImtleVwiXSk7XHJcbiAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGZpbGUub3JpZ2luRmlsZU9iaikge1xyXG4gICAgICAgICAgbGV0IG9yaWdpbkZpbGVPYmo6IGFueSA9IGZpbGUub3JpZ2luRmlsZU9ialxyXG4gICAgICAgICAgaWYgKG9yaWdpbkZpbGVPYmpbXCJrZXlcIl0gIT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgIGZpbGVVcmxzLnB1c2gob3JpZ2luRmlsZU9ialtcImtleVwiXSlcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHRoaXMuYWZ0ZXJDaGFuZ2UuZW1pdCh7a2V5OiB0aGlzLm9wdHMua2V5LCB2YWx1ZXM6IGZpbGVVcmxzLmpvaW4oXCIsXCIpfSk7XHJcbiAgICAgIHRoaXMub3B0c0NoYW5nZS5lbWl0KHRoaXMub3B0cylcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2V0IGh0dHBTZXJ2aWNlKCk6IEh0dHBTZXJ2aWNlIHtcclxuICAgIHJldHVybiB0aGlzLmluamVjdG9yLmdldChIdHRwU2VydmljZSk7XHJcbiAgfVxyXG5cclxuICBoYW5kbGVQcmV2aWV3ID0gKGZpbGU6IE56VXBsb2FkRmlsZSkgPT4ge1xyXG4gICAgdGhpcy5wcmV2aWV3SW1hZ2UgPSBmaWxlLnVybCB8fCBmaWxlLnRodW1iVXJsO1xyXG4gICAgdGhpcy5wcmV2aWV3VmlzaWJsZSA9IHRydWU7XHJcbiAgfTtcclxuXHJcbiAgcmVtb3ZlID0gKGZpbGU6IE56VXBsb2FkRmlsZSkgPT4ge1xyXG4gICAgaWYgKCF0aGlzLmlzRWRpdCkge1xyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgICBjb25zb2xlLmxvZyhmaWxlKTtcclxuICAgIGlmICh0aGlzLm9wdHMgJiYgdGhpcy5vcHRzLnJlbW92ZUFjdGlvbikge1xyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdHJ1ZTtcclxuICB9XHJcblxyXG4gIGJlZm9yZVVwbG9hZCA9IChmaWxlOiBOelVwbG9hZEZpbGUsIGZpbGVMaXN0OiBOelVwbG9hZEZpbGVbXSk6YW55ID0+IHtcclxuICAgIHJldHVybiBuZXcgT2JzZXJ2YWJsZTxib29sZWFuPihvYnNlcnZlID0+IHtcclxuICAgICAgbGV0IGZpbGVOYW1lO1xyXG4gICAgICBpZiAodGhpcy5vcHRzLmtlZXBOYW1lKSB7XHJcbiAgICAgICAgZmlsZU5hbWUgPSBmaWxlLm5hbWU7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgZmlsZU5hbWUgPSBUb29sc1V0aWwuZ2V0UmFuZG9tRmlsZU5hbWUoKSArIFwiLlwiICsgVG9vbHNVdGlsLmdldEZpbGVFeHQoZmlsZS5uYW1lKTtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLm9uQmVmb3JlVXBsb2FkLmVtaXQoe2NvZGU6ICdnZXRGaWxlJywgZGF0YToge2ZpbGU6IGZpbGUsIGZpbGVMaXN0OiBmaWxlTGlzdH19KVxyXG4gICAgICB0aGlzLmh0dHBTZXJ2aWNlLnBvc3QoYXRyX3N0YXRpY19kYXRhcy5PU1NfUE9MSUNZLCB7XHJcbiAgICAgICAgZGlyOiB0aGlzLm9wdHMudXBsb2FkRGlyLFxyXG4gICAgICAgIGZpbGVOYW1lOiBmaWxlTmFtZSxcclxuICAgICAgICAnc3VjY2Vzc19hY3Rpb25fc3RhdHVzJzogJzIwMCdcclxuICAgICAgfSwgVG9vbHNVdGlsLmdldEh0dHBPcHRpb25zKCkpLnN1YnNjcmliZShcclxuICAgICAgICByZXN1bHQgPT4ge1xyXG5cclxuICAgICAgICAgIGlmIChyZXN1bHQuc3RhdHVzID09IDIwMCkge1xyXG4gICAgICAgICAgICB0aGlzLnVwbG9hZERhdGFbZmlsZS51aWRdID0gcmVzdWx0LmRhdGE7XHJcbiAgICAgICAgICAgIG9ic2VydmUubmV4dCh0cnVlKTtcclxuICAgICAgICAgIH0gZWxzZVxyXG4gICAgICAgICAgICBvYnNlcnZlLm5leHQoZmFsc2UpO1xyXG4gICAgICAgICAgb2JzZXJ2ZS51bnN1YnNjcmliZSgpXHJcbiAgICAgICAgfSxcclxuICAgICAgICBlcnJvciA9PiB7XHJcbiAgICAgICAgICBvYnNlcnZlLm5leHQoZmFsc2UpO1xyXG4gICAgICAgICAgb2JzZXJ2ZS51bnN1YnNjcmliZSgpXHJcbiAgICAgICAgfVxyXG4gICAgICApXHJcbiAgICB9KVxyXG5cclxuICB9XHJcbiAgY3VzdG9tUmVxID0gKGl0ZW06IE56VXBsb2FkWEhSQXJncyk6YW55ID0+IHtcclxuICAgIGNvbnN0IGZvcm1EYXRhID0gbmV3IEZvcm1EYXRhKCk7XHJcbiAgICBsZXQgdXBsb2FkRGF0YSA9IHRoaXMudXBsb2FkRGF0YVtpdGVtLmZpbGUudWlkXTtcclxuICAgIGZvciAobGV0IGtleSBpbiB1cGxvYWREYXRhKSB7XHJcbiAgICAgIGlmIChrZXkgIT0gJ2hvc3QnKVxyXG4gICAgICAgIGZvcm1EYXRhLmFwcGVuZChrZXksIHVwbG9hZERhdGFba2V5XSlcclxuICAgIH1cclxuICAgIGZvcm1EYXRhLmFwcGVuZCgnZmlsZScsIGl0ZW0uZmlsZSBhcyBhbnkpO1xyXG4gICAgY29uc3QgcmVxID0gbmV3IEh0dHBSZXF1ZXN0KCdQT1NUJywgdXBsb2FkRGF0YS5ob3N0ISwgZm9ybURhdGEsIHtcclxuICAgICAgcmVwb3J0UHJvZ3Jlc3M6IHRydWVcclxuICAgIH0pO1xyXG5cclxuICAgIHJldHVybiB0aGlzLmh0dHBDbGllbnQucmVxdWVzdChyZXEpLnN1YnNjcmliZShcclxuICAgICAgKGV2ZW50OiBIdHRwRXZlbnQ8YW55PikgPT4ge1xyXG4gICAgICAgIGlmIChldmVudC50eXBlID09PSBIdHRwRXZlbnRUeXBlLlVwbG9hZFByb2dyZXNzKSB7XHJcbiAgICAgICAgICBpZiAoZXZlbnQudG90YWwhID4gMCkge1xyXG4gICAgICAgICAgICAoZXZlbnQgYXMgYW55KS5wZXJjZW50ID0gKGV2ZW50LmxvYWRlZCAvIGV2ZW50LnRvdGFsISkgKiAxMDA7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBpdGVtLm9uUHJvZ3Jlc3MhKGV2ZW50LCBpdGVtLmZpbGUhKTtcclxuICAgICAgICB9IGVsc2UgaWYgKGV2ZW50IGluc3RhbmNlb2YgSHR0cFJlc3BvbnNlKSB7XHJcbiAgICAgICAgICBpdGVtLmZpbGVbXCJrZXlcIl0gPSB1cGxvYWREYXRhLmtleTtcclxuICAgICAgICAgIGl0ZW0ub25TdWNjZXNzIShldmVudC5ib2R5LCBpdGVtLmZpbGUhLCBldmVudCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9LFxyXG4gICAgICBlcnIgPT4ge1xyXG4gICAgICAgIGl0ZW0ub25FcnJvciEoZXJyLCBpdGVtLmZpbGUhKTtcclxuICAgICAgfVxyXG4gICAgKTtcclxuICB9O1xyXG5cclxuICBvcGVuQmFubmVyU2VxKHRwbENvbnRlbnQ6IGFueSwgdHBsRm9vdGVyOiBhbnkpIHtcclxuICAgIHRoaXMudHBsTW9kYWwgPSB0aGlzLm1vZGFsU2VydmljZS5jcmVhdGUoe1xyXG4gICAgICBuelRpdGxlOiBcIuS/ruaUueWbvueJh+mhuuW6j1wiLFxyXG4gICAgICBuekNvbnRlbnQ6IHRwbENvbnRlbnQsXHJcbiAgICAgIG56Rm9vdGVyOiB0cGxGb290ZXIsXHJcbiAgICAgIG56TWFza0Nsb3NhYmxlOiBmYWxzZSxcclxuICAgICAgbnpDbG9zYWJsZTogZmFsc2UsXHJcbiAgICAgIG56T25PazogKCkgPT4gY29uc29sZS5sb2coJ0NsaWNrIG9rJylcclxuICAgIH0pO1xyXG4gICAgY29uc29sZS5sb2codGhpcy5vcHRzLmltYWdlTGlzdCk7XHJcbiAgICB0aGlzLmNoYW5nZVZpc2libGUgPSB0cnVlO1xyXG4gIH1cclxuXHJcbiAgZGVzdHJveVRwbE1vZGFsKCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMudHBsTW9kYWwpXHJcbiAgICAgIHRoaXMudHBsTW9kYWwuZGVzdHJveSgpO1xyXG4gIH1cclxuXHJcbiAgYXJyb3dVcChpbmRleDogYW55KSB7XHJcbiAgICBsZXQgaW1nID0gdGhpcy5vcHRzLmltYWdlTGlzdFtpbmRleF07XHJcbiAgICB0aGlzLm9wdHMuaW1hZ2VMaXN0W2luZGV4XSA9IHRoaXMub3B0cy5pbWFnZUxpc3RbaW5kZXggLSAxXTtcclxuICAgIHRoaXMub3B0cy5pbWFnZUxpc3RbaW5kZXggLSAxXSA9IGltZztcclxuICB9XHJcblxyXG4gIGFycm93RG93bihpbmRleDogYW55KSB7XHJcbiAgICBsZXQgaW1nID0gdGhpcy5vcHRzLmltYWdlTGlzdFtpbmRleF07XHJcbiAgICB0aGlzLm9wdHMuaW1hZ2VMaXN0W2luZGV4XSA9IHRoaXMub3B0cy5pbWFnZUxpc3RbaW5kZXggKyAxXTtcclxuICAgIHRoaXMub3B0cy5pbWFnZUxpc3RbaW5kZXggKyAxXSA9IGltZztcclxuICB9XHJcblxyXG4gIHNhdmVTZXEoKSB7XHJcbiAgICB0aGlzLmRlc3Ryb3lUcGxNb2RhbCgpO1xyXG4gICAgbGV0IGltZ3MgPSB0aGlzLm9wdHMuaW1hZ2VMaXN0O1xyXG4gICAgdGhpcy5vcHRzLmltYWdlTGlzdCA9IFtdO1xyXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgIHRoaXMub3B0cy5pbWFnZUxpc3QgPSBpbWdzO1xyXG4gICAgICBjb25zb2xlLmxvZyh0aGlzLm9wdHMuaW1hZ2VMaXN0KTtcclxuICAgICAgbGV0IGZpbGVVcmxzOiBhbnkgPSBbXTtcclxuICAgICAgZm9yIChsZXQgZmlsZSBvZiB0aGlzLm9wdHMuaW1hZ2VMaXN0KSB7XHJcbiAgICAgICAgaWYgKGZpbGVbXCJrZXlcIl0gIT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICBmaWxlVXJscy5wdXNoKGZpbGVbXCJrZXlcIl0pO1xyXG4gICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChmaWxlLm9yaWdpbkZpbGVPYmogJiYgZmlsZS5vcmlnaW5GaWxlT2JqW1wia2V5XCJdICE9IHVuZGVmaW5lZClcclxuICAgICAgICAgIGZpbGVVcmxzLnB1c2goZmlsZS5vcmlnaW5GaWxlT2JqW1wia2V5XCJdKVxyXG4gICAgICB9XHJcblxyXG4gICAgICB0aGlzLmFmdGVyQ2hhbmdlLmVtaXQoe2tleTogdGhpcy5vcHRzLmtleSwgdmFsdWVzOiBmaWxlVXJscy5qb2luKFwiLFwiKX0pO1xyXG4gICAgfSwgNTApXHJcblxyXG4gIH1cclxuXHJcbiAgZHJhZ251bWJlcihudW1lcjogYW55KSB7XHJcbiAgICBjb25zb2xlLmxvZyhudW1lcik7XHJcbiAgICBjb25zb2xlLmxvZygnb3InLCB0aGlzLm9wdHMuaW1hZ2VMaXN0KVxyXG4gICAgY29uc29sZS5sb2coJ25ldycsIG51bWVyKVxyXG4gICAgdGhpcy5zYXZlU2VxKCk7XHJcbiAgICAvLyB0aGlzLm9wdHMuaW1hZ2VMaXN0ID0gbnVtZXJcclxuICB9XHJcblxyXG4gIGRlbEltZyhudW1lcjogYW55KSB7XHJcbiAgICBjb25zb2xlLmxvZyhudW1lcik7XHJcbiAgICB0aGlzLm9wdHMuaW1hZ2VMaXN0ID0gdGhpcy5vcHRzLmltYWdlTGlzdC5maWx0ZXIoKHY6IGFueSwgaTogYW55KSA9PiBpICE9IG51bWVyKVxyXG4gICAgbGV0IGZpbGVVcmxzOiBhbnkgPSBbXTtcclxuICAgIGZvciAobGV0IGZpbGUgb2YgdGhpcy5vcHRzLmltYWdlTGlzdCkge1xyXG4gICAgICBpZiAoZmlsZVtcImtleVwiXSAhPSB1bmRlZmluZWQpIHtcclxuICAgICAgICBmaWxlVXJscy5wdXNoKGZpbGVbXCJrZXlcIl0pO1xyXG4gICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChmaWxlLm9yaWdpbkZpbGVPYmogJiYgZmlsZS5vcmlnaW5GaWxlT2JqW1wia2V5XCJdICE9IHVuZGVmaW5lZClcclxuICAgICAgICBmaWxlVXJscy5wdXNoKGZpbGUub3JpZ2luRmlsZU9ialtcImtleVwiXSlcclxuICAgIH1cclxuICAgIHRoaXMuYWZ0ZXJDaGFuZ2UuZW1pdCh7a2V5OiB0aGlzLm9wdHMua2V5LCB2YWx1ZXM6IGZpbGVVcmxzLmpvaW4oXCIsXCIpfSk7XHJcbiAgfVxyXG5cclxuICBwcml2aWV3SW1nKGltZzogYW55KSB7XHJcbiAgICBsZXQgdXJsID0gVG9vbHNVdGlsLmdldE9zc1VybCh0aGlzLmdldEltZ1VybChpbWcpKVxyXG4gICAgY29uc29sZS5sb2codXJsKVxyXG4gICAgdGhpcy5uekltYWdlU2VydmljZS5wcmV2aWV3KFt7XHJcbiAgICAgIHNyYzogdXJsLFxyXG4gICAgICBhbHQ6ICduZy16b3JybydcclxuICAgIH1dLCB7bnpab29tOiAxLjUsIG56Um90YXRlOiAwfSk7XHJcbiAgfVxyXG5cclxuICBnZXRJbWdVcmwoaW1nOiBhbnkpIHtcclxuICAgIGlmIChpbWcub3JpZ2luRmlsZU9iaiAmJiBpbWcub3JpZ2luRmlsZU9iai5rZXkpIHtcclxuICAgICAgcmV0dXJuIGltZy5vcmlnaW5GaWxlT2JqLmtleVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIChpbWcudXJsIHx8IGltZy50aHVtYlVybClcclxuICB9XHJcbn1cclxuIiwiPGRpdiBjbGFzcz1cImNsZWFyZml4XCI+XHJcbiAgPG56LXVwbG9hZFxyXG4gICAgKm5nSWY9XCJvcHRzICYmIG9wdHM/LnVwbG9hZFR5cGUgPT0gJ2RyYWcnXCJcclxuICAgIG56VHlwZT1cImRyYWdcIlxyXG4gICAgW256QWN0aW9uXT1cIlwiXHJcbiAgICBbbnpCZWZvcmVVcGxvYWRdPVwib3B0cy5iZWZvcmVVcGxvYWQgfHwgYmVmb3JlVXBsb2FkXCJcclxuICAgIFtuelJlbW92ZV09XCJyZW1vdmVcIlxyXG4gICAgW256U2l6ZV09XCJvcHRzLm56U2l6ZSB8fCAwXCJcclxuICAgIFtuekN1c3RvbVJlcXVlc3RdPVwib3B0cy5jdXN0b21SZXEgfHwgY3VzdG9tUmVxXCJcclxuICAgIChuekNoYW5nZSk9XCJvbkNoYW5nZSgkZXZlbnQpXCJcclxuICAgIFtuelR5cGVdPVwib3B0cz8udXBsb2FkVHlwZVwiXHJcbiAgICBbbnpBY2NlcHRdPVwib3B0cy5uekZpbGVUeXBlXCJcclxuICAgIFtuekxpbWl0XT1cIicxJ1wiXHJcbiAgPlxyXG4gICAgPHAgY2xhc3M9XCJhbnQtdXBsb2FkLWRyYWctaWNvblwiPlxyXG4gICAgICA8aSBuei1pY29uIG56VHlwZT1cImluYm94XCI+PC9pPlxyXG4gICAgPC9wPlxyXG4gICAgPHAgY2xhc3M9XCJhbnQtdXBsb2FkLXRleHRcIj7ljZXlh7vmiJbmi5bliqjmlofku7bliLDmraTljLrln5/kuIrkvKA8L3A+XHJcbiAgPC9uei11cGxvYWQ+XHJcbiAgPG56LXVwbG9hZFxyXG4gICAgKm5nSWY9XCJvcHRzICYmIG9wdHM/LnVwbG9hZFR5cGUgPT0gJ2J1dHRvbidcIlxyXG4gICAgbnpUeXBlPVwiZHJhZ1wiXHJcbiAgICBuekFjdGlvbj1cIlwiXHJcbiAgICBbbnpTaXplXT1cIm9wdHMubnpTaXplIHx8IDBcIlxyXG4gICAgW256U2hvd1VwbG9hZExpc3RdPVwic2hvd1VwbG9hZExpc3RcIlxyXG4gICAgW256QmVmb3JlVXBsb2FkXT1cIm9wdHMuYmVmb3JlVXBsb2FkIHx8IGJlZm9yZVVwbG9hZFwiXHJcbiAgICBbbnpSZW1vdmVdPVwicmVtb3ZlXCJcclxuICAgIFtuekN1c3RvbVJlcXVlc3RdPVwib3B0cy5jdXN0b21SZXEgfHwgY3VzdG9tUmVxXCJcclxuICAgIChuekNoYW5nZSk9XCJvbkNoYW5nZSgkZXZlbnQpXCJcclxuICAgIFtuelR5cGVdPVwib3B0cz8udXBsb2FkVHlwZVwiXHJcbiAgICBbbnpBY2NlcHRdPVwib3B0cy5uekZpbGVUeXBlXCJcclxuICAgIFtuekxpbWl0XT1cIicxJ1wiXHJcbiAgPlxyXG4gICAgPGJ1dHRvbiBuei1idXR0b24gbnpTaXplPVwic21hbGxcIj48aSBuei1pY29uIG56VHlwZT1cInVwbG9hZFwiIHN0eWxlPVwiZm9udC1zaXplOiAxNnB4XCI+PC9pPjxzcGFuPiB7e29wdHMuYnRuTmFtZX19PC9zcGFuPjwvYnV0dG9uPlxyXG4gIDwvbnotdXBsb2FkPlxyXG4gIDxuei11cGxvYWRcclxuICAgICpuZ0lmPVwib3B0cyAmJiAhb3B0cz8udXBsb2FkVHlwZSBcIlxyXG4gICAgbnpBY3Rpb249XCJcIlxyXG4gICAgbnpMaXN0VHlwZT1cInBpY3R1cmUtY2FyZFwiXHJcbiAgICBbbnpTaXplXT1cIm9wdHMubnpTaXplIHx8IDBcIlxyXG4gICAgWyhuekZpbGVMaXN0KV09XCJvcHRzLmltYWdlTGlzdFwiXHJcbiAgICBbbnpTaG93QnV0dG9uXT1cIm9wdHMuaW1hZ2VMaXN0Lmxlbmd0aCA8IG9wdHMubGltaXRcIlxyXG4gICAgW256U2hvd1VwbG9hZExpc3RdPVwic2hvd1VwbG9hZExpc3RcIlxyXG4gICAgW256UHJldmlld109XCJoYW5kbGVQcmV2aWV3XCJcclxuICAgIFtuelJlbW92ZV09XCJyZW1vdmVcIlxyXG4gICAgW256QmVmb3JlVXBsb2FkXT1cIm9wdHMuYmVmb3JlVXBsb2FkIHx8IGJlZm9yZVVwbG9hZFwiXHJcbiAgICBbbnpDdXN0b21SZXF1ZXN0XT1cIm9wdHMuY3VzdG9tUmVxIHx8IGN1c3RvbVJlcVwiXHJcbiAgICAobnpDaGFuZ2UpPVwib25DaGFuZ2UoJGV2ZW50KVwiXHJcbiAgICBbbnpUeXBlXT1cIm9wdHM/LnVwbG9hZFR5cGVcIlxyXG4gICAgW256QWNjZXB0XT1cIm9wdHMubnpGaWxlVHlwZVwiXHJcbiAgICBbbnpEaXNhYmxlZF09XCIhaXNFZGl0XCJcclxuICAgIFtuekxpbWl0XT1cIicxJ1wiXHJcbiAgICBbbnpGaWxlTGlzdFJlbmRlcl09XCJvcHRzICYmIGlzRWRpdCAmJiBhbGxvd0NoYW5nU2VxICYmIG9wdHMuaW1hZ2VMaXN0Lmxlbmd0aCA+IDAgPyBmaWxlTGlzdFRtcCA6IG51bGxcIlxyXG4gID5cclxuICAgIDxpIG56LWljb24gbnpUeXBlPVwicGx1c1wiPjwvaT5cclxuICAgIDxkaXYgY2xhc3M9XCJhbnQtdXBsb2FkLXRleHRcIj57e29wdHMuYnRuTmFtZT9vcHRzLmJ0bk5hbWU6J+S4iuS8oOWbvueJhyd9fTwvZGl2PlxyXG4gIDwvbnotdXBsb2FkPlxyXG4gIDwhLS0gPGEgKm5nSWY9XCJhbGxvd0NoYW5nU2VxICYmIGlzRWRpdCAmJiBvcHRzLmltYWdlTGlzdC5sZW5ndGggPiAxXCIgKGNsaWNrKT1cIm9wZW5CYW5uZXJTZXEoaW1nc0NvbnRlbnQsIHRwbEZvb3RlcilcIlxyXG4gICAgICBzdHlsZT1cIm1hcmdpbi1sZWZ0OiAxMHB4OyBcIlxyXG4gICA+PGkgbnotaWNvbiBuelR5cGU9XCJwbHVzXCIgbnpUaGVtZT1cIm91dGxpbmVcIiBzdHlsZT1cImNvbG9yOiAjMTg5MGZmOyBmb250LXNpemU6IDE1cHhcIj48L2k+6LCD5pW05Zu+54mH6aG65bqPPC9hPi0tPlxyXG4gIDxuei1tb2RhbFxyXG4gICAgW256VmlzaWJsZV09XCJwcmV2aWV3VmlzaWJsZVwiXHJcbiAgICBbbnpDb250ZW50XT1cIm1vZGFsQ29udGVudFwiXHJcbiAgICBbbnpGb290ZXJdPVwibnVsbFwiXHJcbiAgICAobnpPbkNhbmNlbCk9XCJwcmV2aWV3VmlzaWJsZSA9IGZhbHNlXCJcclxuICA+XHJcbiAgICA8bmctdGVtcGxhdGUgI21vZGFsQ29udGVudD5cclxuICAgICAgPGltZyAqbmdJZj1cIiFwcmV2aWV3SW1hZ2UuZW5kc1dpdGgoJy5tcDQnKVwiIFtzcmNdPVwicHJldmlld0ltYWdlXCIgW25nU3R5bGVdPVwieyB3aWR0aDogJzEwMCUnIH1cIi8+XHJcbiAgICAgIDxkaXYgc3R5bGU9XCJ3aWR0aDogMTAwJTttYXJnaW4tdG9wOiAxNXB4XCI+XHJcbiAgICAgICAgPGFwcC12aWRlbyAqbmdJZj1cInByZXZpZXdJbWFnZS5lbmRzV2l0aCgnLm1wNCcpXCIgW3VybF09XCJwcmV2aWV3SW1hZ2VcIj48L2FwcC12aWRlbz5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L25nLXRlbXBsYXRlPlxyXG4gIDwvbnotbW9kYWw+XHJcbiAgPG5nLXRlbXBsYXRlICNpbWdzQ29udGVudD5cclxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJvcHRzICYmIG9wdHMuaW1hZ2VMaXN0XCI+XHJcbiAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGltZ3Mgb2Ygb3B0cy5pbWFnZUxpc3Q7bGV0IGkgPSBpbmRleFwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJpbWctZGl2XCI+XHJcbiAgICAgICAgICA8aW1nIFtzcmNdPVwiaW1ncy51cmwgfHwgaW1ncy50aHVtYlVybFwiIFtuZ1N0eWxlXT1cInsgd2lkdGg6ICcxMDBweCcsZGlzcGxheTogJ2lubGluZS1ibG9jaycsIG1hcmdpbjonMTBweCcgfVwiLz5cclxuICAgICAgICAgIDxkaXYgc3R5bGU9XCJtYXJnaW4tcmlnaHQ6IDIwcHhcIj5cclxuICAgICAgICAgICAgPGEgdGl0bGU9XCLkuIrnp7tcIiAqbmdJZj1cIiBpID4gMFwiIHN0eWxlPVwiZGlzcGxheTogYmxvY2s7XCIgKGNsaWNrKT1cImFycm93VXAoaSlcIj48aSBuei1pY29uIG56VHlwZT1cImFycm93LXVwXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuelRoZW1lPVwib3V0bGluZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGU9XCJjb2xvcjogIzE4OTBmZjsgZm9udC1zaXplOiAxNXB4O1wiPjwvaT5cclxuICAgICAgICAgICAgICDkuIrnp7s8L2E+XHJcbiAgICAgICAgICAgIDxhIHRpdGxlPVwi5LiL56e7XCIgKm5nSWY9XCIgaSA8IG9wdHMuaW1hZ2VMaXN0Lmxlbmd0aCAtIDFcIiAoY2xpY2spPVwiYXJyb3dEb3duKGkpXCI+PGkgbnotaWNvbiBuelR5cGU9XCJhcnJvdy1kb3duXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG56VGhlbWU9XCJvdXRsaW5lXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlPVwiY29sb3I6ICMxODkwZmY7IGZvbnQtc2l6ZTogMTVweFwiPjwvaT5cclxuICAgICAgICAgICAgICDkuIvnp7s8L2E+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgPC9uZy10ZW1wbGF0ZT5cclxuICA8IS0tICA8L256LW1vZGFsPi0tPlxyXG48L2Rpdj5cclxuPG5nLXRlbXBsYXRlICNmaWxlTGlzdFRtcD5cclxuICA8ZGl2IGRyYWd1bGE9XCJkcmFndWxhQmFnXCIgWyhkcmFndWxhTW9kZWwpXT1cIm9wdHMuaW1hZ2VMaXN0XCIgKGRyYWd1bGFNb2RlbENoYW5nZSk9XCJkcmFnbnVtYmVyKCRldmVudClcIj5cclxuICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGltZ3Mgb2Ygb3B0cy5pbWFnZUxpc3Q7bGV0IGkgPSBpbmRleFwiPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwiaW1nLWRpdiBpbWctcHJlXCIgc3R5bGU9XCJcIj5cclxuICAgICAgICA8aW1nIFtzcmNdPVwiZ2V0SW1nVXJsKGltZ3MpIHxvc3NJbWdcIiBbbmdTdHlsZV09XCJ7IHdpZHRoOiAnMTAwcHgnLGRpc3BsYXk6ICdpbmxpbmUtYmxvY2snLCBtYXJnaW46JzEwcHgnIH1cIi8+XHJcbiAgICAgICAgPGRpdj5cclxuICAgICAgICAgIDxzcGFuIChjbGljayk9XCJwcml2aWV3SW1nKGltZ3MpXCIgbnotaWNvbiBuelR5cGU9XCJleWVcIiBuelRoZW1lPVwib3V0bGluZVwiPjwvc3Bhbj5cclxuICAgICAgICAgIDxzcGFuIChjbGljayk9XCJkZWxJbWcoaSlcIiBuei1pY29uIG56VHlwZT1cImRlbGV0ZVwiIG56VGhlbWU9XCJvdXRsaW5lXCI+PC9zcGFuPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvbmctY29udGFpbmVyPlxyXG4gIDwvZGl2PlxyXG5cclxuPC9uZy10ZW1wbGF0ZT5cclxuPG5nLXRlbXBsYXRlICN0cGxGb290ZXI+XHJcbiAgPGJ1dHRvbiBuei1idXR0b24gbnpUeXBlPVwiZGVmYXVsdFwiIChjbGljayk9XCJkZXN0cm95VHBsTW9kYWwoKVwiPlxyXG4gICAg5Y+W5raIXHJcbiAgPC9idXR0b24+XHJcbiAgPGJ1dHRvbiBuei1idXR0b24gbnpUeXBlPVwicHJpbWFyeVwiIChjbGljayk9XCJzYXZlU2VxKClcIj5cclxuICAgIOS/neWtmOmhuuW6j1xyXG4gIDwvYnV0dG9uPlxyXG48L25nLXRlbXBsYXRlPlxyXG5cclxuXHJcbiJdfQ==
@@ -1,9 +0,0 @@
1
- //响应式表单自定义模板验证器
2
- export function telphoneValidator() {
3
- return (contrl) => {
4
- let nameExp = new RegExp('^1[3456789]\\d{9}$');
5
- const forbidden = nameExp.test(contrl.value);
6
- return !forbidden ? { 'telphone': { value: contrl.value } } : null;
7
- };
8
- }
9
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXRyLXZhbGlkdG9ycy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NvbXBvbmVudHMvc3JjL2xpYi9zaGFyZWQvdmFsaWRhdG9ycy9hdHItdmFsaWR0b3JzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBLGVBQWU7QUFDZixNQUFNLFVBQVUsaUJBQWlCO0lBQzdCLE9BQU8sQ0FBQyxNQUFzQixFQUErQixFQUFFO1FBQzNELElBQUksT0FBTyxHQUFHLElBQUksTUFBTSxDQUFDLG9CQUFvQixDQUFDLENBQUM7UUFDL0MsTUFBTSxTQUFTLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDN0MsT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBQyxVQUFVLEVBQUUsRUFBQyxLQUFLLEVBQUUsTUFBTSxDQUFDLEtBQUssRUFBQyxFQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztJQUNuRSxDQUFDLENBQUE7QUFDTCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtWYWxpZGF0b3JGbiwgQWJzdHJhY3RDb250cm9sfSBmcm9tIFwiQGFuZ3VsYXIvZm9ybXNcIlxyXG5cclxuLy/lk43lupTlvI/ooajljZXoh6rlrprkuYnmqKHmnb/pqozor4HlmahcclxuZXhwb3J0IGZ1bmN0aW9uIHRlbHBob25lVmFsaWRhdG9yKCk6VmFsaWRhdG9yRm57XHJcbiAgICByZXR1cm4gKGNvbnRybDpBYnN0cmFjdENvbnRyb2wpOiB7W2tleTogc3RyaW5nXTogYW55fSB8IG51bGwgPT57XHJcbiAgICAgICAgbGV0IG5hbWVFeHAgPSBuZXcgUmVnRXhwKCdeMVszNDU2Nzg5XVxcXFxkezl9JCcpO1xyXG4gICAgICAgIGNvbnN0IGZvcmJpZGRlbiA9IG5hbWVFeHAudGVzdChjb250cmwudmFsdWUpO1xyXG4gICAgICAgIHJldHVybiAhZm9yYmlkZGVuID8geyd0ZWxwaG9uZSc6IHt2YWx1ZTogY29udHJsLnZhbHVlfX0gOiBudWxsO1xyXG4gICAgfVxyXG59Il19
@@ -1,16 +0,0 @@
1
- import { Component, Input } from '@angular/core';
2
- import * as i0 from "@angular/core";
3
- import * as i1 from "@videogular/ngx-videogular/core";
4
- import * as i2 from "@videogular/ngx-videogular/controls";
5
- export class VideoComponent {
6
- constructor() { }
7
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: VideoComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
8
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: VideoComponent, selector: "app-video", inputs: { url: "url" }, ngImport: i0, template: "<vg-player>\r\n <vg-controls vgFor=\"__VG__VIDEO__\" >\r\n <vg-play-pause></vg-play-pause>\r\n <vg-scrub-bar>\r\n <vg-scrub-bar-current-time></vg-scrub-bar-current-time>\r\n <vg-scrub-bar-buffering-time></vg-scrub-bar-buffering-time>\r\n </vg-scrub-bar>\r\n <vg-time-display vgProperty=\"left\" vgFormat=\"mm:ss\"></vg-time-display>\r\n\r\n <!-- <vg-volume></vg-volume> -->\r\n <vg-mute></vg-mute>\r\n\r\n <vg-fullscreen></vg-fullscreen>\r\n </vg-controls>\r\n\r\n <video\r\n id=\"__VG__VIDEO__\"\r\n #media\r\n [vgMedia]=\"$any(media)\"\r\n preload=\"auto\"\r\n style=\"width: 100%;\"\r\n >\r\n <source [src]=\"url\" type=\"video/mp4\">\r\n </video>\r\n</vg-player>\r\n", styles: [":host{width:100%}\n"], dependencies: [{ kind: "directive", type: i1.VgMediaDirective, selector: "[vgMedia]", inputs: ["vgMedia", "vgMaster"] }, { kind: "component", type: i1.VgPlayerComponent, selector: "vg-player", outputs: ["onPlayerReady", "onMediaReady"] }, { kind: "component", type: i2.VgControlsComponent, selector: "vg-controls", inputs: ["vgFor", "vgAutohide", "vgAutohideTime"] }, { kind: "component", type: i2.VgTimeDisplayComponent, selector: "vg-time-display", inputs: ["vgFor", "vgProperty", "vgFormat"] }, { kind: "component", type: i2.VgScrubBarComponent, selector: "vg-scrub-bar", inputs: ["vgFor", "vgSlider"] }, { kind: "component", type: i2.VgPlayPauseComponent, selector: "vg-play-pause", inputs: ["vgFor"] }, { kind: "component", type: i2.VgMuteComponent, selector: "vg-mute", inputs: ["vgFor"] }, { kind: "component", type: i2.VgFullscreenComponent, selector: "vg-fullscreen" }, { kind: "component", type: i2.VgScrubBarBufferingTimeComponent, selector: "vg-scrub-bar-buffering-time", inputs: ["vgFor"] }, { kind: "component", type: i2.VgScrubBarCurrentTimeComponent, selector: "vg-scrub-bar-current-time", inputs: ["vgFor", "vgSlider"] }] }); }
9
- }
10
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: VideoComponent, decorators: [{
11
- type: Component,
12
- args: [{ selector: 'app-video', template: "<vg-player>\r\n <vg-controls vgFor=\"__VG__VIDEO__\" >\r\n <vg-play-pause></vg-play-pause>\r\n <vg-scrub-bar>\r\n <vg-scrub-bar-current-time></vg-scrub-bar-current-time>\r\n <vg-scrub-bar-buffering-time></vg-scrub-bar-buffering-time>\r\n </vg-scrub-bar>\r\n <vg-time-display vgProperty=\"left\" vgFormat=\"mm:ss\"></vg-time-display>\r\n\r\n <!-- <vg-volume></vg-volume> -->\r\n <vg-mute></vg-mute>\r\n\r\n <vg-fullscreen></vg-fullscreen>\r\n </vg-controls>\r\n\r\n <video\r\n id=\"__VG__VIDEO__\"\r\n #media\r\n [vgMedia]=\"$any(media)\"\r\n preload=\"auto\"\r\n style=\"width: 100%;\"\r\n >\r\n <source [src]=\"url\" type=\"video/mp4\">\r\n </video>\r\n</vg-player>\r\n", styles: [":host{width:100%}\n"] }]
13
- }], ctorParameters: () => [], propDecorators: { url: [{
14
- type: Input
15
- }] } });
16
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmlkZW8uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY29tcG9uZW50cy9zcmMvbGliL3NoYXJlZC92aWRlby92aWRlby5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb21wb25lbnRzL3NyYy9saWIvc2hhcmVkL3ZpZGVvL3ZpZGVvLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLE1BQU0sZUFBZSxDQUFDOzs7O0FBT2pELE1BQU0sT0FBTyxjQUFjO0lBSXpCLGdCQUFnQixDQUFDOytHQUpOLGNBQWM7bUdBQWQsY0FBYyx5RUNQM0Isd3RCQXlCQTs7NEZEbEJhLGNBQWM7a0JBTDFCLFNBQVM7K0JBQ0UsV0FBVzt3REFNWixHQUFHO3NCQUFYLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIElucHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2FwcC12aWRlbycsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL3ZpZGVvLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi92aWRlby5jb21wb25lbnQubGVzcyddXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBWaWRlb0NvbXBvbmVudCB7XHJcblxyXG4gIEBJbnB1dCgpIHVybDogYW55O1xyXG5cclxuICBjb25zdHJ1Y3RvcigpIHsgfVxyXG5cclxuICBcclxufSIsIjx2Zy1wbGF5ZXI+XHJcbiAgPHZnLWNvbnRyb2xzIHZnRm9yPVwiX19WR19fVklERU9fX1wiID5cclxuICAgIDx2Zy1wbGF5LXBhdXNlPjwvdmctcGxheS1wYXVzZT5cclxuICAgIDx2Zy1zY3J1Yi1iYXI+XHJcbiAgICAgIDx2Zy1zY3J1Yi1iYXItY3VycmVudC10aW1lPjwvdmctc2NydWItYmFyLWN1cnJlbnQtdGltZT5cclxuICAgICAgPHZnLXNjcnViLWJhci1idWZmZXJpbmctdGltZT48L3ZnLXNjcnViLWJhci1idWZmZXJpbmctdGltZT5cclxuICAgIDwvdmctc2NydWItYmFyPlxyXG4gICAgPHZnLXRpbWUtZGlzcGxheSB2Z1Byb3BlcnR5PVwibGVmdFwiIHZnRm9ybWF0PVwibW06c3NcIj48L3ZnLXRpbWUtZGlzcGxheT5cclxuXHJcbiAgICA8IS0tIDx2Zy12b2x1bWU+PC92Zy12b2x1bWU+IC0tPlxyXG4gICAgPHZnLW11dGU+PC92Zy1tdXRlPlxyXG5cclxuICAgIDx2Zy1mdWxsc2NyZWVuPjwvdmctZnVsbHNjcmVlbj5cclxuICA8L3ZnLWNvbnRyb2xzPlxyXG5cclxuICA8dmlkZW9cclxuICAgIGlkPVwiX19WR19fVklERU9fX1wiXHJcbiAgICAjbWVkaWFcclxuICAgIFt2Z01lZGlhXT1cIiRhbnkobWVkaWEpXCJcclxuICAgIHByZWxvYWQ9XCJhdXRvXCJcclxuICAgIHN0eWxlPVwid2lkdGg6IDEwMCU7XCJcclxuICAgID5cclxuICAgIDxzb3VyY2UgW3NyY109XCJ1cmxcIiB0eXBlPVwidmlkZW8vbXA0XCI+XHJcbiAgPC92aWRlbz5cclxuPC92Zy1wbGF5ZXI+XHJcbiJdfQ==