nsc-react-component 2.13.1 → 2.14.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/base/upload/Upload.d.ts +7 -3
- package/lib/base/upload/Upload.js +87 -49
- package/lib/base/upload/Upload.js.map +1 -1
- package/lib/base/upload/index.d.ts +2 -45
- package/lib/base/upload/index.js +379 -362
- package/lib/base/upload/index.js.map +1 -1
- package/lib/page/BasePage/index.d.ts +1 -1
- package/lib/page/BasePage/index.js +7 -7
- package/lib/page/BasePage/index.js.map +1 -1
- package/lib/page/BasePage/index.module.less +6 -0
- package/package.json +1 -1
- package/lib/base/upload/index copy.d.ts +0 -18
- package/lib/base/upload/index copy.js +0 -351
- package/lib/base/upload/index copy.js.map +0 -1
package/lib/base/upload/index.js
CHANGED
|
@@ -15,397 +15,414 @@ import styles from "./index.less";
|
|
|
15
15
|
import cls from "classnames";
|
|
16
16
|
import FileIcon from "../common/FileIcon";
|
|
17
17
|
import { DeleteOutlined, DownloadOutlined, EyeOutlined } from "@ant-design/icons";
|
|
18
|
-
import NscUploadDragger from "./Dragger";
|
|
19
18
|
const {
|
|
20
19
|
upload,
|
|
21
20
|
download,
|
|
22
21
|
previewDocument,
|
|
23
22
|
previewImage
|
|
24
23
|
} = file;
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
24
|
+
const withCustomUpload = Component => {
|
|
25
|
+
// 返回一个类组件
|
|
26
|
+
return class extends React.PureComponent {
|
|
27
|
+
constructor() {
|
|
28
|
+
super(...arguments);
|
|
29
|
+
_defineProperty(this, "state", {
|
|
30
|
+
fileList: [],
|
|
31
|
+
viewId: "",
|
|
32
|
+
fileListStore: [],
|
|
33
|
+
fileNames: []
|
|
34
|
+
});
|
|
35
|
+
_defineProperty(this, "uploadIngSize", 0);
|
|
36
|
+
_defineProperty(this, "uploadSize", 0);
|
|
37
|
+
_defineProperty(this, "uploadIngList", []);
|
|
38
|
+
_defineProperty(this, "previewUrl", {});
|
|
39
|
+
_defineProperty(this, "customRequest", async options => {
|
|
40
|
+
const file = options.file;
|
|
41
|
+
const {
|
|
42
|
+
onComplete,
|
|
43
|
+
onProcess,
|
|
44
|
+
sliceSize,
|
|
45
|
+
newVersion = true
|
|
46
|
+
} = this.props;
|
|
47
|
+
const onProgress = totalProgress => {
|
|
48
|
+
options.onProgress({
|
|
49
|
+
percent: totalProgress
|
|
50
|
+
}, file);
|
|
51
|
+
this.onProcess({
|
|
52
|
+
percent: totalProgress,
|
|
53
|
+
file: file
|
|
54
|
+
});
|
|
55
|
+
onProcess && onProcess({
|
|
56
|
+
percent: totalProgress,
|
|
57
|
+
file: file
|
|
58
|
+
});
|
|
59
|
+
};
|
|
60
|
+
try {
|
|
61
|
+
const res = await upload({
|
|
62
|
+
file: file,
|
|
63
|
+
onProgress: onProgress,
|
|
64
|
+
partSize: sliceSize
|
|
65
|
+
}, this.props.requestConfig);
|
|
66
|
+
this.uploadIngSize = this.uploadIngSize + 1;
|
|
67
|
+
let fileId = null;
|
|
68
|
+
let ImgRes = null;
|
|
69
|
+
if (res.code == 200) {
|
|
70
|
+
fileId = res.data.attachId;
|
|
71
|
+
options.onSuccess();
|
|
72
|
+
if (this.props.listType == "picture-card" && newVersion) {
|
|
73
|
+
ImgRes = await previewImage(fileId, this.props.requestConfig);
|
|
74
|
+
}
|
|
75
|
+
} else {
|
|
76
|
+
options.onError();
|
|
77
|
+
}
|
|
78
|
+
this.uploadIngList.push({
|
|
79
|
+
file: options.file,
|
|
80
|
+
fileId: fileId,
|
|
81
|
+
status: res.code == 200 ? "success" : "error",
|
|
82
|
+
url: ImgRes ? ImgRes.data : null
|
|
83
|
+
});
|
|
84
|
+
if (this.uploadSize == this.uploadIngSize) {
|
|
85
|
+
this.onComplete(this.uploadIngList);
|
|
86
|
+
}
|
|
87
|
+
onComplete && onComplete({
|
|
88
|
+
file: options.file,
|
|
89
|
+
fileId: fileId,
|
|
90
|
+
status: res.code == 200 ? "success" : "error"
|
|
91
|
+
});
|
|
92
|
+
} catch (e) {
|
|
93
|
+
if (this.uploadSize == this.uploadIngSize) {
|
|
94
|
+
this.onComplete(this.uploadIngList);
|
|
95
|
+
options.onError();
|
|
96
|
+
}
|
|
97
|
+
onComplete && onComplete({
|
|
98
|
+
file: options.file,
|
|
99
|
+
fileId: "",
|
|
100
|
+
status: "error"
|
|
101
|
+
});
|
|
102
|
+
}
|
|
103
|
+
});
|
|
104
|
+
}
|
|
105
|
+
componentDidMount() {
|
|
106
|
+
if (this.props.fileList) {
|
|
107
|
+
this.convertFileList(this.props.fileList);
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
convertFileList(list) {
|
|
39
111
|
const {
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
sliceSize,
|
|
43
|
-
newVersion = true
|
|
112
|
+
fileList,
|
|
113
|
+
listType
|
|
44
114
|
} = this.props;
|
|
45
|
-
const
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
this.uploadIngSize = this.uploadIngSize + 1;
|
|
65
|
-
let fileId = null;
|
|
66
|
-
let ImgRes = null;
|
|
67
|
-
if (res.code == 200) {
|
|
68
|
-
fileId = res.data.attachId;
|
|
69
|
-
options.onSuccess();
|
|
70
|
-
if (this.props.listType == "picture-card" && newVersion) {
|
|
71
|
-
ImgRes = await previewImage(fileId, this.props.requestConfig);
|
|
115
|
+
const newFileList = [];
|
|
116
|
+
let oldList = list ? list : fileList;
|
|
117
|
+
this.setState({
|
|
118
|
+
fileListStore: [...fileList]
|
|
119
|
+
}, async () => {
|
|
120
|
+
for (let i = 0; i < oldList.length; i++) {
|
|
121
|
+
let item = oldList[i];
|
|
122
|
+
let temp = _objectSpread(_objectSpread({}, item), {}, {
|
|
123
|
+
status: item.status,
|
|
124
|
+
name: item.name || item.fileName,
|
|
125
|
+
type: item.type,
|
|
126
|
+
size: item.size,
|
|
127
|
+
url: item.url
|
|
128
|
+
});
|
|
129
|
+
if (listType == "picture-card" && !item.url && item.fileId) {
|
|
130
|
+
let res = await previewImage(item.fileId, this.props.requestConfig);
|
|
131
|
+
if (res.code == 200) {
|
|
132
|
+
temp.url = res.data;
|
|
133
|
+
}
|
|
72
134
|
}
|
|
73
|
-
|
|
74
|
-
options.onError();
|
|
75
|
-
}
|
|
76
|
-
this.uploadIngList.push({
|
|
77
|
-
file: options.file,
|
|
78
|
-
fileId: fileId,
|
|
79
|
-
status: res.code == 200 ? "success" : "error",
|
|
80
|
-
url: ImgRes ? ImgRes.data : null
|
|
81
|
-
});
|
|
82
|
-
if (this.uploadSize == this.uploadIngSize) {
|
|
83
|
-
this.onComplete(this.uploadIngList);
|
|
135
|
+
newFileList.push(temp);
|
|
84
136
|
}
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
fileId: fileId,
|
|
88
|
-
status: res.code == 200 ? "success" : "error"
|
|
137
|
+
this.setState({
|
|
138
|
+
fileList: [...newFileList]
|
|
89
139
|
});
|
|
90
|
-
}
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
140
|
+
});
|
|
141
|
+
}
|
|
142
|
+
componentDidUpdate(preProps, preState) {
|
|
143
|
+
if (this.props.fileList) {
|
|
144
|
+
if (JSON.stringify(this.props.fileList) !== JSON.stringify(this.state.fileListStore)) {
|
|
145
|
+
this.convertFileList(this.props.fileList);
|
|
94
146
|
}
|
|
95
|
-
onComplete && onComplete({
|
|
96
|
-
file: options.file,
|
|
97
|
-
fileId: "",
|
|
98
|
-
status: "error"
|
|
99
|
-
});
|
|
100
147
|
}
|
|
101
|
-
});
|
|
102
|
-
}
|
|
103
|
-
componentDidMount() {
|
|
104
|
-
if (this.props.fileList) {
|
|
105
|
-
this.convertFileList();
|
|
106
148
|
}
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
const {
|
|
110
|
-
fileList,
|
|
111
|
-
listType
|
|
112
|
-
} = this.props;
|
|
113
|
-
const newFileList = [];
|
|
114
|
-
let oldList = list ? list : fileList;
|
|
115
|
-
oldList.map(async (item, index) => {
|
|
116
|
-
let temp = _objectSpread(_objectSpread({}, item), {}, {
|
|
117
|
-
status: item.status,
|
|
118
|
-
name: item.name || item.fileName,
|
|
119
|
-
type: item.type,
|
|
120
|
-
size: item.size,
|
|
121
|
-
url: item.url
|
|
122
|
-
});
|
|
123
|
-
newFileList.push(temp);
|
|
124
|
-
});
|
|
125
|
-
this.setState({
|
|
126
|
-
fileList: [...newFileList],
|
|
127
|
-
fileListStore: [...fileList]
|
|
128
|
-
});
|
|
129
|
-
}
|
|
130
|
-
componentDidUpdate(preProps, preState) {
|
|
131
|
-
if (this.props.fileList) {
|
|
132
|
-
if (JSON.stringify(this.props.fileList) !== JSON.stringify(this.state.fileListStore)) {
|
|
133
|
-
this.convertFileList(this.props.fileList);
|
|
134
|
-
}
|
|
149
|
+
getFileList() {
|
|
150
|
+
return this.state.fileList;
|
|
135
151
|
}
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
return this.state.fileList;
|
|
139
|
-
}
|
|
140
|
-
setFileList(fileList) {
|
|
141
|
-
this.convertFileList(fileList);
|
|
142
|
-
}
|
|
143
|
-
async beforeUpload(file, ofileList) {
|
|
144
|
-
let {
|
|
145
|
-
maxSize = 100,
|
|
146
|
-
allowFileSuffix,
|
|
147
|
-
checkSameFile = true,
|
|
148
|
-
maxCount,
|
|
149
|
-
showUploadList,
|
|
150
|
-
fileList: propsList,
|
|
151
|
-
onListChange
|
|
152
|
-
} = this.props;
|
|
153
|
-
let {
|
|
154
|
-
fileList,
|
|
155
|
-
fileListStore
|
|
156
|
-
} = this.state;
|
|
157
|
-
let size;
|
|
158
|
-
if (allowFileSuffix && !this.checkFileType(file)) {
|
|
159
|
-
message.error("".concat(file.name, "\u6587\u4EF6\u7C7B\u578B\u4E0D\u5141\u8BB8\u4E0A\u4F20\uFF0C\u8BF7\u4E0A\u4F20\u540E\u7F00\u4E3A").concat(allowFileSuffix, "\u7684\u7C7B\u578B\u6587\u4EF6\uFF01"));
|
|
160
|
-
return false;
|
|
152
|
+
setFileList(fileList) {
|
|
153
|
+
this.convertFileList(fileList);
|
|
161
154
|
}
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
maxSize = 100
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
155
|
+
async beforeUpload(file, ofileList) {
|
|
156
|
+
let {
|
|
157
|
+
maxSize = 100,
|
|
158
|
+
allowFileSuffix,
|
|
159
|
+
checkSameFile = true,
|
|
160
|
+
maxCount,
|
|
161
|
+
showUploadList,
|
|
162
|
+
fileList: propsList,
|
|
163
|
+
onListChange
|
|
164
|
+
} = this.props;
|
|
165
|
+
let {
|
|
166
|
+
fileList,
|
|
167
|
+
fileListStore
|
|
168
|
+
} = this.state;
|
|
169
|
+
let size;
|
|
170
|
+
if (allowFileSuffix && !this.checkFileType(file)) {
|
|
171
|
+
message.error("".concat(file.name, "\u6587\u4EF6\u7C7B\u578B\u4E0D\u5141\u8BB8\u4E0A\u4F20\uFF0C\u8BF7\u4E0A\u4F20\u540E\u7F00\u4E3A").concat(allowFileSuffix, "\u7684\u7C7B\u578B\u6587\u4EF6\uFF01"));
|
|
169
172
|
return false;
|
|
170
173
|
}
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
return false;
|
|
174
|
+
if (maxSize !== false) {
|
|
175
|
+
if (maxSize === true) {
|
|
176
|
+
maxSize = 100;
|
|
177
|
+
}
|
|
178
|
+
size = maxSize * 1024 * 1024;
|
|
179
|
+
if (size < file.size) {
|
|
180
|
+
message.error("".concat(file.name, "\u6587\u4EF6\u5927\u5C0F\u8D85\u8FC7").concat(maxSize, "M\uFF0C\u8BF7\u91CD\u65B0\u4E0A\u4F20\uFF01"));
|
|
181
|
+
return false;
|
|
182
|
+
}
|
|
181
183
|
}
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
184
|
+
let fileNames = [];
|
|
185
|
+
if (checkSameFile) {
|
|
186
|
+
const checkList = this.props.fileList ? fileListStore : fileList;
|
|
187
|
+
checkList.map(item => {
|
|
188
|
+
fileNames.push(item.name || item.fileName);
|
|
189
|
+
});
|
|
190
|
+
if (fileNames.indexOf(file.name) > -1 && showUploadList !== false) {
|
|
191
|
+
message.error("\u6587\u4EF6".concat(file.name, "\u5DF2\u5728\u4E0A\u4F20\u5217\u8868\u4E2D\uFF0C\u8BF7\u91CD\u65B0\u9009\u62E9\u6587\u4EF6\uFF01"));
|
|
192
|
+
return false;
|
|
193
|
+
}
|
|
187
194
|
}
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
fileName: item.name,
|
|
194
|
-
percent: 0,
|
|
195
|
-
status: "uploading",
|
|
196
|
-
uid: item.uid,
|
|
197
|
-
name: item.name,
|
|
198
|
-
type: item.type,
|
|
199
|
-
size: item.size
|
|
200
|
-
};
|
|
201
|
-
newList.push(temp);
|
|
195
|
+
if (this.props.beforeUpload) {
|
|
196
|
+
const res = await this.props.beforeUpload(file, ofileList);
|
|
197
|
+
if (res === false) {
|
|
198
|
+
return false;
|
|
199
|
+
}
|
|
202
200
|
}
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
201
|
+
const newList = [...fileList];
|
|
202
|
+
ofileList.map(async item => {
|
|
203
|
+
if (!(allowFileSuffix && !this.checkFileType(item) || size < item.size || checkSameFile && fileNames.indexOf(item.name) > -1)) {
|
|
204
|
+
const temp = {
|
|
205
|
+
fileName: item.name,
|
|
206
|
+
percent: 0,
|
|
207
|
+
status: "uploading",
|
|
208
|
+
uid: item.uid,
|
|
209
|
+
name: item.name,
|
|
210
|
+
type: item.type,
|
|
211
|
+
size: item.size
|
|
212
|
+
};
|
|
213
|
+
newList.push(temp);
|
|
214
|
+
}
|
|
215
|
+
});
|
|
216
|
+
if (maxCount && newList.length > maxCount) {
|
|
217
|
+
let length = newList.length - maxCount;
|
|
218
|
+
for (let i = 0; i < length; i++) {
|
|
219
|
+
newList.splice(0, 1);
|
|
220
|
+
}
|
|
208
221
|
}
|
|
222
|
+
onListChange && onListChange(newList);
|
|
223
|
+
this.setState({
|
|
224
|
+
fileList: newList
|
|
225
|
+
});
|
|
226
|
+
this.uploadSize = ofileList.length;
|
|
209
227
|
}
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
allowFileSuffix
|
|
219
|
-
} = this.props;
|
|
220
|
-
const names = file.name.split(".");
|
|
221
|
-
const suffix = names[names.length - 1];
|
|
222
|
-
if (allowFileSuffix.indexOf(suffix) > -1) {
|
|
223
|
-
return true;
|
|
224
|
-
}
|
|
225
|
-
return false;
|
|
226
|
-
}
|
|
227
|
-
onProcess(_ref) {
|
|
228
|
-
let {
|
|
229
|
-
percent,
|
|
230
|
-
file
|
|
231
|
-
} = _ref;
|
|
232
|
-
const {
|
|
233
|
-
fileList
|
|
234
|
-
} = this.state;
|
|
235
|
-
const {
|
|
236
|
-
onListChange
|
|
237
|
-
} = this.props;
|
|
238
|
-
const newList = [];
|
|
239
|
-
fileList.map(item => {
|
|
240
|
-
const newFile = _objectSpread({}, item);
|
|
241
|
-
if (file.uid == item.uid) {
|
|
242
|
-
newFile.percent = percent;
|
|
228
|
+
checkFileType(file) {
|
|
229
|
+
const {
|
|
230
|
+
allowFileSuffix
|
|
231
|
+
} = this.props;
|
|
232
|
+
const names = file.name.split(".");
|
|
233
|
+
const suffix = names[names.length - 1];
|
|
234
|
+
if (allowFileSuffix.indexOf(suffix) > -1) {
|
|
235
|
+
return true;
|
|
243
236
|
}
|
|
244
|
-
|
|
245
|
-
}
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
const newList = [];
|
|
263
|
-
fileList.map(async (item, index) => {
|
|
264
|
-
const newFile = _objectSpread({}, item);
|
|
265
|
-
files.map(async file => {
|
|
266
|
-
if (file.file.uid == item.uid) {
|
|
267
|
-
newFile.status = file.status == "success" ? "done" : file.status;
|
|
268
|
-
newFile.fileId = file.fileId;
|
|
269
|
-
newFile.url = file.url;
|
|
270
|
-
if (!newVersion) {
|
|
271
|
-
let url = "/jquick-resource/oss/endpoint/download-files?attachId=".concat(file.fileId, "&_tpk=").concat(window.localStorage.getItem("token"));
|
|
272
|
-
newFile.url = requestConfig.prefix ? requestConfig.prefix + url : "/api" + url;
|
|
273
|
-
}
|
|
237
|
+
return false;
|
|
238
|
+
}
|
|
239
|
+
onProcess(_ref) {
|
|
240
|
+
let {
|
|
241
|
+
percent,
|
|
242
|
+
file
|
|
243
|
+
} = _ref;
|
|
244
|
+
const {
|
|
245
|
+
fileList
|
|
246
|
+
} = this.state;
|
|
247
|
+
const {
|
|
248
|
+
onListChange
|
|
249
|
+
} = this.props;
|
|
250
|
+
const newList = [];
|
|
251
|
+
fileList.map(item => {
|
|
252
|
+
const newFile = _objectSpread({}, item);
|
|
253
|
+
if (file.uid == item.uid) {
|
|
254
|
+
newFile.percent = percent;
|
|
274
255
|
}
|
|
256
|
+
newList.push(newFile);
|
|
275
257
|
});
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
fileList
|
|
280
|
-
}
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
onListChange && onListChange(newList);
|
|
304
|
-
}
|
|
305
|
-
render() {
|
|
306
|
-
let {
|
|
307
|
-
fileList,
|
|
308
|
-
fileCard,
|
|
309
|
-
showUploadList = {
|
|
310
|
-
showDownloadIcon: true,
|
|
311
|
-
showPreviewIcon: false,
|
|
312
|
-
showRemoveIcon: true,
|
|
313
|
-
downloadIcon: null,
|
|
314
|
-
removeIcon: null,
|
|
315
|
-
previewIcon: null
|
|
316
|
-
},
|
|
317
|
-
requestConfig = {}
|
|
318
|
-
} = this.props;
|
|
319
|
-
const newprops = omit(this.props, ["sliceSize", "maxSize", "onComplete", "onProcess", "allowFileSuffix", "useDefaultList", "fileCard", "onListChange", "newVersion", "requestConfig"]);
|
|
320
|
-
let defaultProps = {
|
|
321
|
-
customRequest: this.customRequest.bind(this),
|
|
322
|
-
multiple: true
|
|
323
|
-
};
|
|
324
|
-
if (fileCard) {
|
|
325
|
-
defaultProps = _objectSpread(_objectSpread({}, defaultProps), {}, {
|
|
326
|
-
itemRender: (originNode, file, currFileList) => {
|
|
327
|
-
const name = file.name || file.fileName;
|
|
328
|
-
const names = name === null || name === void 0 ? void 0 : name.split(".");
|
|
329
|
-
const suffix = names ? names[names.length - 1] : "";
|
|
330
|
-
return /*#__PURE__*/React.createElement("div", {
|
|
331
|
-
className: getLess(styles, "file-item")
|
|
332
|
-
}, /*#__PURE__*/React.createElement("div", {
|
|
333
|
-
className: cls(getLess(styles, "content"), {
|
|
334
|
-
[getLess(styles, "content_error")]: file.status == "error"
|
|
335
|
-
})
|
|
336
|
-
}, /*#__PURE__*/React.createElement("div", {
|
|
337
|
-
className: getLess(styles, "mark-picture")
|
|
338
|
-
}, /*#__PURE__*/React.createElement(FileIcon, {
|
|
339
|
-
suffix: suffix,
|
|
340
|
-
fileId: file.fileId
|
|
341
|
-
})), /*#__PURE__*/React.createElement("div", {
|
|
342
|
-
className: getLess(styles, "name")
|
|
343
|
-
}, file.name || file.fileName), /*#__PURE__*/React.createElement("div", {
|
|
344
|
-
className: getLess(styles, "icon")
|
|
345
|
-
}, showUploadList.showPreviewIcon && file.status == "done" && /*#__PURE__*/React.createElement("div", {
|
|
346
|
-
onClick: () => {
|
|
347
|
-
if (this.props.onPreview) {
|
|
348
|
-
this.props.onPreview(file);
|
|
349
|
-
} else {
|
|
350
|
-
previewDocument(file.fileId, requestConfig);
|
|
351
|
-
}
|
|
352
|
-
},
|
|
353
|
-
style: {
|
|
354
|
-
cursor: "pointer"
|
|
355
|
-
}
|
|
356
|
-
}, showUploadList.downloadIcon ? showUploadList.downloadIcon : /*#__PURE__*/React.createElement(EyeOutlined, null)), showUploadList.showDownloadIcon && file.status == "done" && /*#__PURE__*/React.createElement("div", {
|
|
357
|
-
onClick: () => {
|
|
358
|
-
if (this.props.onDownload) {
|
|
359
|
-
this.props.onDownload(file);
|
|
360
|
-
} else {
|
|
361
|
-
download(file.fileId, true, requestConfig);
|
|
362
|
-
}
|
|
363
|
-
},
|
|
364
|
-
style: {
|
|
365
|
-
cursor: "pointer"
|
|
366
|
-
}
|
|
367
|
-
}, showUploadList.downloadIcon ? showUploadList.downloadIcon : /*#__PURE__*/React.createElement(DownloadOutlined, null)), showUploadList.showRemoveIcon && /*#__PURE__*/React.createElement("div", {
|
|
368
|
-
onClick: () => {
|
|
369
|
-
if (this.props.onRemove) {
|
|
370
|
-
this.props.onRemove(file);
|
|
371
|
-
} else {
|
|
372
|
-
this.onDelete(file);
|
|
373
|
-
}
|
|
374
|
-
},
|
|
375
|
-
style: {
|
|
376
|
-
cursor: "pointer"
|
|
377
|
-
}
|
|
378
|
-
}, showUploadList.downloadIcon ? showUploadList.downloadIcon : /*#__PURE__*/React.createElement(DeleteOutlined, null)))), file.status == "uploading" && /*#__PURE__*/React.createElement("div", {
|
|
379
|
-
className: getLess(styles, "process")
|
|
380
|
-
}, /*#__PURE__*/React.createElement("div", {
|
|
381
|
-
className: getLess(styles, "percent"),
|
|
382
|
-
style: {
|
|
383
|
-
width: file.percent + "%"
|
|
258
|
+
this.setState({
|
|
259
|
+
fileList: newList
|
|
260
|
+
});
|
|
261
|
+
onListChange && onListChange(fileList);
|
|
262
|
+
}
|
|
263
|
+
async onComplete(files) {
|
|
264
|
+
this.uploadIngSize = 0;
|
|
265
|
+
this.uploadSize = 0;
|
|
266
|
+
this.uploadIngList = [];
|
|
267
|
+
const {
|
|
268
|
+
fileList
|
|
269
|
+
} = this.state;
|
|
270
|
+
const {
|
|
271
|
+
newVersion = true,
|
|
272
|
+
requestConfig = {}
|
|
273
|
+
} = this.props;
|
|
274
|
+
const newList = [];
|
|
275
|
+
fileList.map(async (item, index) => {
|
|
276
|
+
const newFile = _objectSpread({}, item);
|
|
277
|
+
files.map(async file => {
|
|
278
|
+
if (file.file.uid == item.uid) {
|
|
279
|
+
newFile.status = file.status == "success" ? "done" : file.status;
|
|
280
|
+
newFile.fileId = file.fileId;
|
|
281
|
+
newFile.url = file.url;
|
|
282
|
+
if (!newVersion) {
|
|
283
|
+
let url = "/jquick-resource/oss/endpoint/download-files?attachId=".concat(file.fileId, "&_tpk=").concat(window.localStorage.getItem("token"));
|
|
284
|
+
newFile.url = requestConfig.prefix ? requestConfig.prefix + url : "/api" + url;
|
|
384
285
|
}
|
|
385
|
-
}
|
|
286
|
+
}
|
|
287
|
+
});
|
|
288
|
+
newList.push(newFile);
|
|
289
|
+
});
|
|
290
|
+
this.setState({
|
|
291
|
+
fileList: [...newList]
|
|
292
|
+
});
|
|
293
|
+
const {
|
|
294
|
+
onListChange
|
|
295
|
+
} = this.props;
|
|
296
|
+
onListChange && onListChange(newList);
|
|
297
|
+
}
|
|
298
|
+
onDelete(file) {
|
|
299
|
+
const {
|
|
300
|
+
fileList
|
|
301
|
+
} = this.state;
|
|
302
|
+
const {
|
|
303
|
+
onListChange
|
|
304
|
+
} = this.props;
|
|
305
|
+
const newList = [];
|
|
306
|
+
fileList.map(item => {
|
|
307
|
+
//通过文件名判断,上传是文件名是唯一的
|
|
308
|
+
if (item.name !== file.name || item.fileId !== file.fileId || item.uid !== file.uid) {
|
|
309
|
+
newList.push(item);
|
|
386
310
|
}
|
|
387
311
|
});
|
|
388
|
-
|
|
389
|
-
|
|
390
|
-
|
|
391
|
-
|
|
392
|
-
|
|
393
|
-
|
|
394
|
-
|
|
312
|
+
this.setState({
|
|
313
|
+
fileList: newList
|
|
314
|
+
});
|
|
315
|
+
onListChange && onListChange(newList);
|
|
316
|
+
}
|
|
317
|
+
render() {
|
|
318
|
+
let {
|
|
319
|
+
fileList,
|
|
320
|
+
fileCard,
|
|
321
|
+
showUploadList = {
|
|
322
|
+
showDownloadIcon: true,
|
|
323
|
+
showPreviewIcon: false,
|
|
324
|
+
showRemoveIcon: true,
|
|
325
|
+
downloadIcon: null,
|
|
326
|
+
removeIcon: null,
|
|
327
|
+
previewIcon: null
|
|
395
328
|
},
|
|
396
|
-
|
|
397
|
-
|
|
398
|
-
|
|
329
|
+
requestConfig = {}
|
|
330
|
+
} = this.props;
|
|
331
|
+
const newprops = omit(this.props, ["sliceSize", "maxSize", "onComplete", "onProcess", "allowFileSuffix", "useDefaultList", "fileCard", "onListChange", "newVersion", "requestConfig"]);
|
|
332
|
+
let defaultProps = {
|
|
333
|
+
customRequest: this.customRequest.bind(this),
|
|
334
|
+
multiple: true
|
|
335
|
+
};
|
|
336
|
+
if (fileCard) {
|
|
337
|
+
defaultProps = _objectSpread(_objectSpread({}, defaultProps), {}, {
|
|
338
|
+
itemRender: (originNode, file, currFileList) => {
|
|
339
|
+
const name = file.name || file.fileName;
|
|
340
|
+
const names = name === null || name === void 0 ? void 0 : name.split(".");
|
|
341
|
+
const suffix = names ? names[names.length - 1] : "";
|
|
342
|
+
return /*#__PURE__*/React.createElement("div", {
|
|
343
|
+
className: getLess(styles, "file-item")
|
|
344
|
+
}, /*#__PURE__*/React.createElement("div", {
|
|
345
|
+
className: cls(getLess(styles, "content"), {
|
|
346
|
+
[getLess(styles, "content_error")]: file.status == "error"
|
|
347
|
+
})
|
|
348
|
+
}, /*#__PURE__*/React.createElement("div", {
|
|
349
|
+
className: getLess(styles, "mark-picture")
|
|
350
|
+
}, /*#__PURE__*/React.createElement(FileIcon, {
|
|
351
|
+
suffix: suffix,
|
|
352
|
+
fileId: file.fileId
|
|
353
|
+
})), /*#__PURE__*/React.createElement("div", {
|
|
354
|
+
className: getLess(styles, "name")
|
|
355
|
+
}, file.name || file.fileName), /*#__PURE__*/React.createElement("div", {
|
|
356
|
+
className: getLess(styles, "icon")
|
|
357
|
+
}, showUploadList.showPreviewIcon && file.status == "done" && /*#__PURE__*/React.createElement("div", {
|
|
358
|
+
onClick: () => {
|
|
359
|
+
if (this.props.onPreview) {
|
|
360
|
+
this.props.onPreview(file);
|
|
361
|
+
} else {
|
|
362
|
+
previewDocument(file.fileId, requestConfig);
|
|
363
|
+
}
|
|
364
|
+
},
|
|
365
|
+
style: {
|
|
366
|
+
cursor: "pointer"
|
|
367
|
+
}
|
|
368
|
+
}, showUploadList.downloadIcon ? showUploadList.downloadIcon : /*#__PURE__*/React.createElement(EyeOutlined, null)), showUploadList.showDownloadIcon && file.status == "done" && /*#__PURE__*/React.createElement("div", {
|
|
369
|
+
onClick: () => {
|
|
370
|
+
if (this.props.onDownload) {
|
|
371
|
+
this.props.onDownload(file);
|
|
372
|
+
} else {
|
|
373
|
+
download(file.fileId, true, requestConfig);
|
|
374
|
+
}
|
|
375
|
+
},
|
|
376
|
+
style: {
|
|
377
|
+
cursor: "pointer"
|
|
378
|
+
}
|
|
379
|
+
}, showUploadList.downloadIcon ? showUploadList.downloadIcon : /*#__PURE__*/React.createElement(DownloadOutlined, null)), showUploadList.showRemoveIcon && /*#__PURE__*/React.createElement("div", {
|
|
380
|
+
onClick: () => {
|
|
381
|
+
if (this.props.onRemove) {
|
|
382
|
+
this.props.onRemove(file);
|
|
383
|
+
} else {
|
|
384
|
+
this.onDelete(file);
|
|
385
|
+
}
|
|
386
|
+
},
|
|
387
|
+
style: {
|
|
388
|
+
cursor: "pointer"
|
|
389
|
+
}
|
|
390
|
+
}, showUploadList.downloadIcon ? showUploadList.downloadIcon : /*#__PURE__*/React.createElement(DeleteOutlined, null)))), file.status == "uploading" && /*#__PURE__*/React.createElement("div", {
|
|
391
|
+
className: getLess(styles, "process")
|
|
392
|
+
}, /*#__PURE__*/React.createElement("div", {
|
|
393
|
+
className: getLess(styles, "percent"),
|
|
394
|
+
style: {
|
|
395
|
+
width: file.percent + "%"
|
|
396
|
+
}
|
|
397
|
+
})));
|
|
399
398
|
}
|
|
400
|
-
}
|
|
401
|
-
|
|
402
|
-
|
|
399
|
+
});
|
|
400
|
+
} else {
|
|
401
|
+
defaultProps = _objectSpread(_objectSpread({}, defaultProps), {}, {
|
|
402
|
+
onDownload: file => {
|
|
403
|
+
download(file.fileId, true, requestConfig);
|
|
404
|
+
},
|
|
405
|
+
onRemove: file => {
|
|
406
|
+
this.onDelete(file);
|
|
407
|
+
},
|
|
408
|
+
onPreview: file => {
|
|
409
|
+
if (file !== null && file !== void 0 && file.fileId) {
|
|
410
|
+
previewDocument(file.fileId, requestConfig);
|
|
411
|
+
}
|
|
412
|
+
},
|
|
413
|
+
showUploadList: _objectSpread({}, showUploadList)
|
|
414
|
+
});
|
|
415
|
+
}
|
|
416
|
+
return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(Component, _extends({}, defaultProps, newprops, {
|
|
417
|
+
beforeUpload: this.beforeUpload.bind(this),
|
|
418
|
+
fileList: this.state.fileList
|
|
419
|
+
})));
|
|
403
420
|
}
|
|
404
|
-
|
|
405
|
-
|
|
406
|
-
|
|
407
|
-
|
|
408
|
-
|
|
409
|
-
|
|
410
|
-
|
|
411
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJSZWFjdCIsImZpbGUiLCJtZXNzYWdlIiwib21pdCIsImdldExlc3MiLCJzdHlsZXMiLCJjbHMiLCJGaWxlSWNvbiIsIkRlbGV0ZU91dGxpbmVkIiwiRG93bmxvYWRPdXRsaW5lZCIsIkV5ZU91dGxpbmVkIiwiTnNjVXBsb2FkRHJhZ2dlciIsInVwbG9hZCIsImRvd25sb2FkIiwicHJldmlld0RvY3VtZW50IiwicHJldmlld0ltYWdlIiwiTnNjVXBsb2FkIiwiUHVyZUNvbXBvbmVudCIsImNvbnN0cnVjdG9yIiwiYXJndW1lbnRzIiwiX2RlZmluZVByb3BlcnR5IiwiZmlsZUxpc3QiLCJ2aWV3SWQiLCJmaWxlTGlzdFN0b3JlIiwiZmlsZU5hbWVzIiwib3B0aW9ucyIsIm9uQ29tcGxldGUiLCJvblByb2Nlc3MiLCJzbGljZVNpemUiLCJuZXdWZXJzaW9uIiwicHJvcHMiLCJvblByb2dyZXNzIiwidG90YWxQcm9ncmVzcyIsInBlcmNlbnQiLCJyZXMiLCJwYXJ0U2l6ZSIsInJlcXVlc3RDb25maWciLCJ1cGxvYWRJbmdTaXplIiwiZmlsZUlkIiwiSW1nUmVzIiwiY29kZSIsImRhdGEiLCJhdHRhY2hJZCIsIm9uU3VjY2VzcyIsImxpc3RUeXBlIiwib25FcnJvciIsInVwbG9hZEluZ0xpc3QiLCJwdXNoIiwic3RhdHVzIiwidXJsIiwidXBsb2FkU2l6ZSIsImUiLCJjb21wb25lbnREaWRNb3VudCIsImNvbnZlcnRGaWxlTGlzdCIsImxpc3QiLCJuZXdGaWxlTGlzdCIsIm9sZExpc3QiLCJtYXAiLCJpdGVtIiwiaW5kZXgiLCJ0ZW1wIiwiX29iamVjdFNwcmVhZCIsIm5hbWUiLCJmaWxlTmFtZSIsInR5cGUiLCJzaXplIiwic2V0U3RhdGUiLCJjb21wb25lbnREaWRVcGRhdGUiLCJwcmVQcm9wcyIsInByZVN0YXRlIiwiSlNPTiIsInN0cmluZ2lmeSIsInN0YXRlIiwiZ2V0RmlsZUxpc3QiLCJzZXRGaWxlTGlzdCIsImJlZm9yZVVwbG9hZCIsIm9maWxlTGlzdCIsIm1heFNpemUiLCJhbGxvd0ZpbGVTdWZmaXgiLCJjaGVja1NhbWVGaWxlIiwibWF4Q291bnQiLCJzaG93VXBsb2FkTGlzdCIsInByb3BzTGlzdCIsIm9uTGlzdENoYW5nZSIsImNoZWNrRmlsZVR5cGUiLCJlcnJvciIsImNvbmNhdCIsImNoZWNrTGlzdCIsImluZGV4T2YiLCJuZXdMaXN0IiwidWlkIiwibGVuZ3RoIiwiaSIsInNwbGljZSIsIm5hbWVzIiwic3BsaXQiLCJzdWZmaXgiLCJfcmVmIiwibmV3RmlsZSIsImZpbGVzIiwid2luZG93IiwibG9jYWxTdG9yYWdlIiwiZ2V0SXRlbSIsInByZWZpeCIsIm9uRGVsZXRlIiwicmVuZGVyIiwiZmlsZUNhcmQiLCJzaG93RG93bmxvYWRJY29uIiwic2hvd1ByZXZpZXdJY29uIiwic2hvd1JlbW92ZUljb24iLCJkb3dubG9hZEljb24iLCJyZW1vdmVJY29uIiwicHJldmlld0ljb24iLCJuZXdwcm9wcyIsImRlZmF1bHRQcm9wcyIsImN1c3RvbVJlcXVlc3QiLCJiaW5kIiwibXVsdGlwbGUiLCJpdGVtUmVuZGVyIiwib3JpZ2luTm9kZSIsImN1cnJGaWxlTGlzdCIsImNyZWF0ZUVsZW1lbnQiLCJjbGFzc05hbWUiLCJvbkNsaWNrIiwib25QcmV2aWV3Iiwic3R5bGUiLCJjdXJzb3IiLCJvbkRvd25sb2FkIiwib25SZW1vdmUiLCJ3aWR0aCIsIkZyYWdtZW50IiwiX1VwbG9hZCIsIl9leHRlbmRzIl0sInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2NvbXBvbmVudHMvYmFzZS91cGxvYWQvaW5kZXgudHN4Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIFJlYWN0IGZyb20gXCJyZWFjdFwiO1xyXG5pbXBvcnQgeyBVcGxvYWQsIFVwbG9hZFByb3BzIH0gZnJvbSBcImFudGRcIjtcclxuaW1wb3J0IGZpbGUgZnJvbSBcIm5zYy1maWxlXCI7XHJcbmltcG9ydCBtZXNzYWdlIGZyb20gXCIuLi9tZXNzYWdlXCI7XHJcbmltcG9ydCB3aXRoWmhMb2NhbGUgZnJvbSBcIi4uL2NvbW1vbi93aXRoWmhMb2NhbGVcIjtcclxuaW1wb3J0IG9taXQgZnJvbSBcIm9taXQuanNcIjtcclxuaW1wb3J0IHsgZ2V0TGVzcyB9IGZyb20gXCIuLi8uLi91dGlsc1wiO1xyXG5pbXBvcnQgc3R5bGVzIGZyb20gXCIuL2luZGV4Lmxlc3NcIjtcclxuaW1wb3J0IGNscyBmcm9tIFwiY2xhc3NuYW1lc1wiO1xyXG5pbXBvcnQgRmlsZUljb24gZnJvbSBcIi4uL2NvbW1vbi9GaWxlSWNvblwiO1xyXG5pbXBvcnQge1xyXG4gIERlbGV0ZU91dGxpbmVkLFxyXG4gIERvd25sb2FkT3V0bGluZWQsXHJcbiAgRXllT3V0bGluZWQsXHJcbn0gZnJvbSBcIkBhbnQtZGVzaWduL2ljb25zXCI7XHJcbmltcG9ydCBQZGZWaWV3ZXIgZnJvbSBcIi4uL3BkZnZpd2VyXCI7XHJcbmltcG9ydCBOc2NVcGxvYWREcmFnZ2VyIGZyb20gXCIuL0RyYWdnZXJcIjtcclxuaW1wb3J0IHsgcGFyc2UgfSBmcm9tIFwiQGJhYmVsL2NvcmVcIjtcclxuY29uc3QgeyB1cGxvYWQsIGRvd25sb2FkLCBwcmV2aWV3RG9jdW1lbnQsIHByZXZpZXdJbWFnZSB9ID0gZmlsZTtcclxuXHJcbmludGVyZmFjZSBJVXBsb2FkUHJvcHMgZXh0ZW5kcyBVcGxvYWRQcm9wcyB7XHJcbiAgc2xpY2VTaXplPzogbnVtYmVyO1xyXG4gIG1heFNpemU/OiBudW1iZXIgfCBib29sZWFuO1xyXG4gIG9uUHJvY2Vzcz86IChwcm9jZXNzKSA9PiB2b2lkO1xyXG4gIG9uQ29tcGxldGU/OiAoeyBmaWxlLCBmaWxlSWQsIHN0YXR1cyB9KSA9PiB2b2lkO1xyXG4gIGFsbG93RmlsZVN1ZmZpeD86IEFycmF5PFN0cmluZz47IC8v5YWB6K645LiK5Lyg5omp5bGV5ZCNLOS4jeW4pi5cclxuICB1c2VEZWZhdWx0TGlzdD86IGJvb2xlYW47IC8v5piv5ZCm5L2/55So6buY6K6k55qEZmlsZUxpc3RcclxuICBmaWxlQ2FyZD86IGJvb2xlYW47XHJcbiAgb25MaXN0Q2hhbmdlPzogYW55O1xyXG4gIGNoZWNrU2FtZUZpbGU/OiBib29sZWFuO1xyXG4gIHJlcXVlc3RDb25maWc/OiBhbnk7XHJcbiAgbmV3VmVyc2lvbj86IGJvb2xlYW47XHJcbn1cclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTnNjVXBsb2FkIGV4dGVuZHMgUmVhY3QuUHVyZUNvbXBvbmVudDxJVXBsb2FkUHJvcHMsIGFueT4ge1xyXG4gIHN0YXRpYyBEcmFnZ2VyID0gTnNjVXBsb2FkRHJhZ2dlcjtcclxuICBzdGF0ZSA9IHtcclxuICAgIGZpbGVMaXN0OiBbXSxcclxuICAgIHZpZXdJZDogXCJcIixcclxuICAgIGZpbGVMaXN0U3RvcmU6IFtdLFxyXG4gICAgZmlsZU5hbWVzOiBbXSxcclxuICB9O1xyXG4gIHVwbG9hZEluZ1NpemUgPSAwO1xyXG4gIHVwbG9hZFNpemUgPSAwO1xyXG4gIHVwbG9hZEluZ0xpc3QgPSBbXTtcclxuICBjb21wb25lbnREaWRNb3VudCgpIHtcclxuICAgIGlmICh0aGlzLnByb3BzLmZpbGVMaXN0KSB7XHJcbiAgICAgIHRoaXMuY29udmVydEZpbGVMaXN0KCk7XHJcbiAgICB9XHJcbiAgfVxyXG4gIGNvbnZlcnRGaWxlTGlzdChsaXN0PzogQXJyYXk8T2JqZWN0Pikge1xyXG4gICAgY29uc3QgeyBmaWxlTGlzdCwgbGlzdFR5cGUgfSA9IHRoaXMucHJvcHM7XHJcblxyXG4gICAgY29uc3QgbmV3RmlsZUxpc3QgPSBbXTtcclxuICAgIGxldCBvbGRMaXN0ID0gbGlzdCA/IGxpc3QgOiBmaWxlTGlzdDtcclxuICAgIG9sZExpc3QubWFwKGFzeW5jIChpdGVtOiBhbnksIGluZGV4KSA9PiB7XHJcbiAgICAgIGxldCB0ZW1wID0ge1xyXG4gICAgICAgIC4uLml0ZW0sXHJcbiAgICAgICAgc3RhdHVzOiBpdGVtLnN0YXR1cyxcclxuICAgICAgICBuYW1lOiBpdGVtLm5hbWUgfHwgaXRlbS5maWxlTmFtZSxcclxuICAgICAgICB0eXBlOiBpdGVtLnR5cGUsXHJcbiAgICAgICAgc2l6ZTogaXRlbS5zaXplLFxyXG4gICAgICAgIHVybDogaXRlbS51cmwsXHJcbiAgICAgIH0gYXMgYW55O1xyXG4gICAgICBuZXdGaWxlTGlzdC5wdXNoKHRlbXApO1xyXG4gICAgfSk7XHJcbiAgICB0aGlzLnNldFN0YXRlKHtcclxuICAgICAgZmlsZUxpc3Q6IFsuLi5uZXdGaWxlTGlzdF0sXHJcbiAgICAgIGZpbGVMaXN0U3RvcmU6IFsuLi5maWxlTGlzdF0sXHJcbiAgICB9KTtcclxuICB9XHJcbiAgY29tcG9uZW50RGlkVXBkYXRlKHByZVByb3BzLCBwcmVTdGF0ZSkge1xyXG4gICAgaWYgKHRoaXMucHJvcHMuZmlsZUxpc3QpIHtcclxuICAgICAgaWYgKFxyXG4gICAgICAgIEpTT04uc3RyaW5naWZ5KHRoaXMucHJvcHMuZmlsZUxpc3QpICE9PVxyXG4gICAgICAgIEpTT04uc3RyaW5naWZ5KHRoaXMuc3RhdGUuZmlsZUxpc3RTdG9yZSlcclxuICAgICAgKSB7XHJcbiAgICAgICAgdGhpcy5jb252ZXJ0RmlsZUxpc3QodGhpcy5wcm9wcy5maWxlTGlzdCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcbiAgZ2V0RmlsZUxpc3QoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5zdGF0ZS5maWxlTGlzdDtcclxuICB9XHJcbiAgc2V0RmlsZUxpc3QoZmlsZUxpc3Q6IEFycmF5PE9iamVjdD4pIHtcclxuICAgIHRoaXMuY29udmVydEZpbGVMaXN0KGZpbGVMaXN0KTtcclxuICB9XHJcbiAgYXN5bmMgYmVmb3JlVXBsb2FkKGZpbGUsIG9maWxlTGlzdCkge1xyXG4gICAgbGV0IHtcclxuICAgICAgbWF4U2l6ZSA9IDEwMCxcclxuICAgICAgYWxsb3dGaWxlU3VmZml4LFxyXG4gICAgICBjaGVja1NhbWVGaWxlID0gdHJ1ZSxcclxuICAgICAgbWF4Q291bnQsXHJcbiAgICAgIHNob3dVcGxvYWRMaXN0LFxyXG4gICAgICBmaWxlTGlzdDogcHJvcHNMaXN0LFxyXG4gICAgICBvbkxpc3RDaGFuZ2UsXHJcbiAgICB9ID0gdGhpcy5wcm9wcztcclxuICAgIGxldCB7IGZpbGVMaXN0LCBmaWxlTGlzdFN0b3JlIH0gPSB0aGlzLnN0YXRlO1xyXG4gICAgbGV0IHNpemU6IG51bWJlcjtcclxuICAgIGlmIChhbGxvd0ZpbGVTdWZmaXggJiYgIXRoaXMuY2hlY2tGaWxlVHlwZShmaWxlKSkge1xyXG4gICAgICBtZXNzYWdlLmVycm9yKFxyXG4gICAgICAgIGAke2ZpbGUubmFtZX3mlofku7bnsbvlnovkuI3lhYHorrjkuIrkvKDvvIzor7fkuIrkvKDlkI7nvIDkuLoke2FsbG93RmlsZVN1ZmZpeH3nmoTnsbvlnovmlofku7bvvIFgXHJcbiAgICAgICk7XHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICAgIGlmIChtYXhTaXplICE9PSBmYWxzZSkge1xyXG4gICAgICBpZiAobWF4U2l6ZSA9PT0gdHJ1ZSkge1xyXG4gICAgICAgIG1heFNpemUgPSAxMDA7XHJcbiAgICAgIH1cclxuICAgICAgc2l6ZSA9IG1heFNpemUgKiAxMDI0ICogMTAyNDtcclxuICAgICAgaWYgKHNpemUgPCBmaWxlLnNpemUpIHtcclxuICAgICAgICBtZXNzYWdlLmVycm9yKGAke2ZpbGUubmFtZX3mlofku7blpKflsI/otoXov4cke21heFNpemV9Te+8jOivt+mHjeaWsOS4iuS8oO+8gWApO1xyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgbGV0IGZpbGVOYW1lcyA9IFtdO1xyXG4gICAgaWYgKGNoZWNrU2FtZUZpbGUpIHtcclxuICAgICAgY29uc3QgY2hlY2tMaXN0ID0gdGhpcy5wcm9wcy5maWxlTGlzdCA/IGZpbGVMaXN0U3RvcmUgOiBmaWxlTGlzdDtcclxuICAgICAgY2hlY2tMaXN0Lm1hcCgoaXRlbSkgPT4ge1xyXG4gICAgICAgIGZpbGVOYW1lcy5wdXNoKGl0ZW0ubmFtZSB8fCBpdGVtLmZpbGVOYW1lKTtcclxuICAgICAgfSk7XHJcblxyXG4gICAgICBpZiAoZmlsZU5hbWVzLmluZGV4T2YoZmlsZS5uYW1lKSA+IC0xICYmIHNob3dVcGxvYWRMaXN0ICE9PSBmYWxzZSkge1xyXG4gICAgICAgIG1lc3NhZ2UuZXJyb3IoYOaWh+S7tiR7ZmlsZS5uYW1lfeW3suWcqOS4iuS8oOWIl+ihqOS4re+8jOivt+mHjeaWsOmAieaLqeaWh+S7tu+8gWApO1xyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLnByb3BzLmJlZm9yZVVwbG9hZCkge1xyXG4gICAgICBjb25zdCByZXMgPSBhd2FpdCB0aGlzLnByb3BzLmJlZm9yZVVwbG9hZChmaWxlLCBvZmlsZUxpc3QpO1xyXG4gICAgICBpZiAocmVzID09PSBmYWxzZSkge1xyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgY29uc3QgbmV3TGlzdCA9IFsuLi5maWxlTGlzdF07XHJcbiAgICBvZmlsZUxpc3QubWFwKGFzeW5jIChpdGVtKSA9PiB7XHJcbiAgICAgIGlmIChcclxuICAgICAgICAhKFxyXG4gICAgICAgICAgKGFsbG93RmlsZVN1ZmZpeCAmJiAhdGhpcy5jaGVja0ZpbGVUeXBlKGl0ZW0pKSB8fFxyXG4gICAgICAgICAgc2l6ZSA8IGl0ZW0uc2l6ZSB8fFxyXG4gICAgICAgICAgKGNoZWNrU2FtZUZpbGUgJiYgZmlsZU5hbWVzLmluZGV4T2YoaXRlbS5uYW1lKSA+IC0xKVxyXG4gICAgICAgIClcclxuICAgICAgKSB7XHJcbiAgICAgICAgY29uc3QgdGVtcCA9IHtcclxuICAgICAgICAgIGZpbGVOYW1lOiBpdGVtLm5hbWUsXHJcbiAgICAgICAgICBwZXJjZW50OiAwLFxyXG4gICAgICAgICAgc3RhdHVzOiBcInVwbG9hZGluZ1wiLFxyXG4gICAgICAgICAgdWlkOiBpdGVtLnVpZCxcclxuICAgICAgICAgIG5hbWU6IGl0ZW0ubmFtZSxcclxuICAgICAgICAgIHR5cGU6IGl0ZW0udHlwZSxcclxuICAgICAgICAgIHNpemU6IGl0ZW0uc2l6ZSxcclxuICAgICAgICB9O1xyXG4gICAgICAgIG5ld0xpc3QucHVzaCh0ZW1wKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gICAgaWYgKG1heENvdW50ICYmIG5ld0xpc3QubGVuZ3RoID4gbWF4Q291bnQpIHtcclxuICAgICAgbGV0IGxlbmd0aCA9IG5ld0xpc3QubGVuZ3RoIC0gbWF4Q291bnQ7XHJcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHtcclxuICAgICAgICBuZXdMaXN0LnNwbGljZSgwLCAxKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgb25MaXN0Q2hhbmdlICYmIG9uTGlzdENoYW5nZShuZXdMaXN0KTtcclxuICAgIHRoaXMuc2V0U3RhdGUoeyBmaWxlTGlzdDogbmV3TGlzdCB9KTtcclxuICAgIHRoaXMudXBsb2FkU2l6ZSA9IG9maWxlTGlzdC5sZW5ndGg7XHJcbiAgfVxyXG4gIGNoZWNrRmlsZVR5cGUoZmlsZSkge1xyXG4gICAgY29uc3QgeyBhbGxvd0ZpbGVTdWZmaXggfSA9IHRoaXMucHJvcHM7XHJcbiAgICBjb25zdCBuYW1lcyA9IGZpbGUubmFtZS5zcGxpdChcIi5cIik7XHJcbiAgICBjb25zdCBzdWZmaXggPSBuYW1lc1tuYW1lcy5sZW5ndGggLSAxXTtcclxuICAgIGlmIChhbGxvd0ZpbGVTdWZmaXguaW5kZXhPZihzdWZmaXgpID4gLTEpIHtcclxuICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG4gIG9uUHJvY2Vzcyh7IHBlcmNlbnQsIGZpbGUgfTogYW55KSB7XHJcbiAgICBjb25zdCB7IGZpbGVMaXN0IH0gPSB0aGlzLnN0YXRlO1xyXG4gICAgY29uc3QgeyBvbkxpc3RDaGFuZ2UgfSA9IHRoaXMucHJvcHM7XHJcbiAgICBjb25zdCBuZXdMaXN0OiBhbnkgPSBbXTtcclxuICAgIGZpbGVMaXN0Lm1hcCgoaXRlbTogYW55KSA9PiB7XHJcbiAgICAgIGNvbnN0IG5ld0ZpbGUgPSB7IC4uLml0ZW0gfTtcclxuICAgICAgaWYgKGZpbGUudWlkID09IGl0ZW0udWlkKSB7XHJcbiAgICAgICAgbmV3RmlsZS5wZXJjZW50ID0gcGVyY2VudDtcclxuICAgICAgfVxyXG4gICAgICBuZXdMaXN0LnB1c2gobmV3RmlsZSk7XHJcbiAgICB9KTtcclxuICAgIHRoaXMuc2V0U3RhdGUoe1xyXG4gICAgICBmaWxlTGlzdDogbmV3TGlzdCxcclxuICAgIH0pO1xyXG4gICAgb25MaXN0Q2hhbmdlICYmIG9uTGlzdENoYW5nZShmaWxlTGlzdCk7XHJcbiAgfVxyXG4gIGFzeW5jIG9uQ29tcGxldGUoZmlsZXMpIHtcclxuICAgIHRoaXMudXBsb2FkSW5nU2l6ZSA9IDA7XHJcbiAgICB0aGlzLnVwbG9hZFNpemUgPSAwO1xyXG4gICAgdGhpcy51cGxvYWRJbmdMaXN0ID0gW107XHJcbiAgICBjb25zdCB7IGZpbGVMaXN0IH0gPSB0aGlzLnN0YXRlO1xyXG4gICAgY29uc3QgeyBuZXdWZXJzaW9uID0gdHJ1ZSwgcmVxdWVzdENvbmZpZyA9IHt9IH0gPSB0aGlzLnByb3BzO1xyXG4gICAgY29uc3QgbmV3TGlzdDogYW55ID0gW107XHJcblxyXG4gICAgZmlsZUxpc3QubWFwKGFzeW5jIChpdGVtOiBhbnksIGluZGV4KSA9PiB7XHJcbiAgICAgIGNvbnN0IG5ld0ZpbGUgPSB7IC4uLml0ZW0gfTtcclxuICAgICAgZmlsZXMubWFwKGFzeW5jIChmaWxlKSA9PiB7XHJcbiAgICAgICAgaWYgKGZpbGUuZmlsZS51aWQgPT0gaXRlbS51aWQpIHtcclxuICAgICAgICAgIG5ld0ZpbGUuc3RhdHVzID0gZmlsZS5zdGF0dXMgPT0gXCJzdWNjZXNzXCIgPyBcImRvbmVcIiA6IGZpbGUuc3RhdHVzO1xyXG4gICAgICAgICAgbmV3RmlsZS5maWxlSWQgPSBmaWxlLmZpbGVJZDtcclxuICAgICAgICAgIG5ld0ZpbGUudXJsID0gZmlsZS51cmw7XHJcbiAgICAgICAgICBpZiAoIW5ld1ZlcnNpb24pIHtcclxuICAgICAgICAgICAgbGV0IHVybCA9IGAvanF1aWNrLXJlc291cmNlL29zcy9lbmRwb2ludC9kb3dubG9hZC1maWxlcz9hdHRhY2hJZD0ke1xyXG4gICAgICAgICAgICAgIGZpbGUuZmlsZUlkXHJcbiAgICAgICAgICAgIH0mX3Rwaz0ke3dpbmRvdy5sb2NhbFN0b3JhZ2UuZ2V0SXRlbShcInRva2VuXCIpfWA7XHJcbiAgICAgICAgICAgIG5ld0ZpbGUudXJsID0gcmVxdWVzdENvbmZpZy5wcmVmaXhcclxuICAgICAgICAgICAgICA/IHJlcXVlc3RDb25maWcucHJlZml4ICsgdXJsXHJcbiAgICAgICAgICAgICAgOiBcIi9hcGlcIiArIHVybDtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgICBuZXdMaXN0LnB1c2gobmV3RmlsZSk7XHJcbiAgICB9KTtcclxuICAgIHRoaXMuc2V0U3RhdGUoe1xyXG4gICAgICBmaWxlTGlzdDogWy4uLm5ld0xpc3RdLFxyXG4gICAgfSk7XHJcblxyXG4gICAgY29uc3QgeyBvbkxpc3RDaGFuZ2UgfSA9IHRoaXMucHJvcHM7XHJcbiAgICBvbkxpc3RDaGFuZ2UgJiYgb25MaXN0Q2hhbmdlKG5ld0xpc3QpO1xyXG4gIH1cclxuICBjdXN0b21SZXF1ZXN0ID0gYXN5bmMgKG9wdGlvbnMpID0+IHtcclxuICAgIGNvbnN0IGZpbGUgPSBvcHRpb25zLmZpbGU7XHJcbiAgICBjb25zdCB7IG9uQ29tcGxldGUsIG9uUHJvY2Vzcywgc2xpY2VTaXplLCBuZXdWZXJzaW9uID0gdHJ1ZSB9ID0gdGhpcy5wcm9wcztcclxuICAgIGNvbnN0IG9uUHJvZ3Jlc3MgPSAodG90YWxQcm9ncmVzczogYW55KSA9PiB7XHJcbiAgICAgIG9wdGlvbnMub25Qcm9ncmVzcyh7IHBlcmNlbnQ6IHRvdGFsUHJvZ3Jlc3MgfSwgZmlsZSk7XHJcbiAgICAgIHRoaXMub25Qcm9jZXNzKHsgcGVyY2VudDogdG90YWxQcm9ncmVzcywgZmlsZTogZmlsZSB9KTtcclxuICAgICAgb25Qcm9jZXNzICYmIG9uUHJvY2Vzcyh7IHBlcmNlbnQ6IHRvdGFsUHJvZ3Jlc3MsIGZpbGU6IGZpbGUgfSk7XHJcbiAgICB9O1xyXG4gICAgdHJ5IHtcclxuICAgICAgY29uc3QgcmVzOiBhbnkgPSBhd2FpdCB1cGxvYWQoXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgZmlsZTogZmlsZSxcclxuICAgICAgICAgIG9uUHJvZ3Jlc3M6IG9uUHJvZ3Jlc3MsXHJcbiAgICAgICAgICBwYXJ0U2l6ZTogc2xpY2VTaXplLFxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgdGhpcy5wcm9wcy5yZXF1ZXN0Q29uZmlnXHJcbiAgICAgICk7XHJcbiAgICAgIHRoaXMudXBsb2FkSW5nU2l6ZSA9IHRoaXMudXBsb2FkSW5nU2l6ZSArIDE7XHJcbiAgICAgIGxldCBmaWxlSWQgPSBudWxsO1xyXG4gICAgICBsZXQgSW1nUmVzID0gbnVsbDtcclxuICAgICAgaWYgKHJlcy5jb2RlID09IDIwMCkge1xyXG4gICAgICAgIGZpbGVJZCA9IHJlcy5kYXRhLmF0dGFjaElkO1xyXG4gICAgICAgIG9wdGlvbnMub25TdWNjZXNzKCk7XHJcbiAgICAgICAgaWYgKHRoaXMucHJvcHMubGlzdFR5cGUgPT0gXCJwaWN0dXJlLWNhcmRcIiAmJiBuZXdWZXJzaW9uKSB7XHJcbiAgICAgICAgICBJbWdSZXMgPSBhd2FpdCBwcmV2aWV3SW1hZ2UoZmlsZUlkLCB0aGlzLnByb3BzLnJlcXVlc3RDb25maWcpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBvcHRpb25zLm9uRXJyb3IoKTtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLnVwbG9hZEluZ0xpc3QucHVzaCh7XHJcbiAgICAgICAgZmlsZTogb3B0aW9ucy5maWxlLFxyXG4gICAgICAgIGZpbGVJZDogZmlsZUlkLFxyXG4gICAgICAgIHN0YXR1czogcmVzLmNvZGUgPT0gMjAwID8gXCJzdWNjZXNzXCIgOiBcImVycm9yXCIsXHJcbiAgICAgICAgdXJsOiBJbWdSZXMgPyBJbWdSZXMuZGF0YSA6IG51bGwsXHJcbiAgICAgIH0pO1xyXG4gICAgICBpZiAodGhpcy51cGxvYWRTaXplID09IHRoaXMudXBsb2FkSW5nU2l6ZSkge1xyXG4gICAgICAgIHRoaXMub25Db21wbGV0ZSh0aGlzLnVwbG9hZEluZ0xpc3QpO1xyXG4gICAgICB9XHJcbiAgICAgIG9uQ29tcGxldGUgJiZcclxuICAgICAgICBvbkNvbXBsZXRlKHtcclxuICAgICAgICAgIGZpbGU6IG9wdGlvbnMuZmlsZSxcclxuICAgICAgICAgIGZpbGVJZDogZmlsZUlkLFxyXG4gICAgICAgICAgc3RhdHVzOiByZXMuY29kZSA9PSAyMDAgPyBcInN1Y2Nlc3NcIiA6IFwiZXJyb3JcIixcclxuICAgICAgICB9KTtcclxuICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgaWYgKHRoaXMudXBsb2FkU2l6ZSA9PSB0aGlzLnVwbG9hZEluZ1NpemUpIHtcclxuICAgICAgICB0aGlzLm9uQ29tcGxldGUodGhpcy51cGxvYWRJbmdMaXN0KTtcclxuICAgICAgICBvcHRpb25zLm9uRXJyb3IoKTtcclxuICAgICAgfVxyXG4gICAgICBvbkNvbXBsZXRlICYmXHJcbiAgICAgICAgb25Db21wbGV0ZSh7IGZpbGU6IG9wdGlvbnMuZmlsZSwgZmlsZUlkOiBcIlwiLCBzdGF0dXM6IFwiZXJyb3JcIiB9KTtcclxuICAgIH1cclxuICB9O1xyXG4gIG9uRGVsZXRlKGZpbGUpIHtcclxuICAgIGNvbnN0IHsgZmlsZUxpc3QgfSA9IHRoaXMuc3RhdGU7XHJcbiAgICBjb25zdCB7IG9uTGlzdENoYW5nZSB9ID0gdGhpcy5wcm9wcztcclxuICAgIGNvbnN0IG5ld0xpc3Q6IGFueSA9IFtdO1xyXG4gICAgZmlsZUxpc3QubWFwKChpdGVtOiBhbnkpID0+IHtcclxuICAgICAgLy/pgJrov4fmlofku7blkI3liKTmlq3vvIzkuIrkvKDmmK/mlofku7blkI3mmK/llK/kuIDnmoRcclxuICAgICAgaWYgKFxyXG4gICAgICAgIGl0ZW0ubmFtZSAhPT0gZmlsZS5uYW1lIHx8XHJcbiAgICAgICAgaXRlbS5maWxlSWQgIT09IGZpbGUuZmlsZUlkIHx8XHJcbiAgICAgICAgaXRlbS51aWQgIT09IGZpbGUudWlkXHJcbiAgICAgICkge1xyXG4gICAgICAgIG5ld0xpc3QucHVzaChpdGVtKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgICB0aGlzLnNldFN0YXRlKHtcclxuICAgICAgZmlsZUxpc3Q6IG5ld0xpc3QsXHJcbiAgICB9KTtcclxuICAgIG9uTGlzdENoYW5nZSAmJiBvbkxpc3RDaGFuZ2UobmV3TGlzdCk7XHJcbiAgfVxyXG4gIHJlbmRlcigpOiBSZWFjdC5SZWFjdE5vZGUge1xyXG4gICAgbGV0IHtcclxuICAgICAgZmlsZUxpc3QsXHJcbiAgICAgIGZpbGVDYXJkLFxyXG4gICAgICBzaG93VXBsb2FkTGlzdCA9IHtcclxuICAgICAgICBzaG93RG93bmxvYWRJY29uOiB0cnVlLFxyXG4gICAgICAgIHNob3dQcmV2aWV3SWNvbjogZmFsc2UsXHJcbiAgICAgICAgc2hvd1JlbW92ZUljb246IHRydWUsXHJcbiAgICAgICAgZG93bmxvYWRJY29uOiBudWxsLFxyXG4gICAgICAgIHJlbW92ZUljb246IG51bGwsXHJcbiAgICAgICAgcHJldmlld0ljb246IG51bGwsXHJcbiAgICAgIH0gYXMgYW55LFxyXG4gICAgICByZXF1ZXN0Q29uZmlnID0ge30sXHJcbiAgICB9ID0gdGhpcy5wcm9wcztcclxuICAgIGNvbnN0IG5ld3Byb3BzID0gb21pdCh0aGlzLnByb3BzLCBbXHJcbiAgICAgIFwic2xpY2VTaXplXCIsXHJcbiAgICAgIFwibWF4U2l6ZVwiLFxyXG4gICAgICBcIm9uQ29tcGxldGVcIixcclxuICAgICAgXCJvblByb2Nlc3NcIixcclxuICAgICAgXCJhbGxvd0ZpbGVTdWZmaXhcIixcclxuICAgICAgXCJ1c2VEZWZhdWx0TGlzdFwiLFxyXG4gICAgICBcImZpbGVDYXJkXCIsXHJcbiAgICAgIFwib25MaXN0Q2hhbmdlXCIsXHJcbiAgICAgIFwibmV3VmVyc2lvblwiLFxyXG4gICAgICBcInJlcXVlc3RDb25maWdcIixcclxuICAgIF0pO1xyXG4gICAgbGV0IGRlZmF1bHRQcm9wcyA9IHtcclxuICAgICAgY3VzdG9tUmVxdWVzdDogdGhpcy5jdXN0b21SZXF1ZXN0LmJpbmQodGhpcyksXHJcbiAgICAgIG11bHRpcGxlOiB0cnVlLFxyXG4gICAgfSBhcyBJVXBsb2FkUHJvcHM7XHJcbiAgICBpZiAoZmlsZUNhcmQpIHtcclxuICAgICAgZGVmYXVsdFByb3BzID0ge1xyXG4gICAgICAgIC4uLmRlZmF1bHRQcm9wcyxcclxuICAgICAgICBpdGVtUmVuZGVyOiAob3JpZ2luTm9kZSwgZmlsZTogYW55LCBjdXJyRmlsZUxpc3QpID0+IHtcclxuICAgICAgICAgIGNvbnN0IG5hbWUgPSBmaWxlLm5hbWUgfHwgZmlsZS5maWxlTmFtZTtcclxuICAgICAgICAgIGNvbnN0IG5hbWVzID0gbmFtZT8uc3BsaXQoXCIuXCIpO1xyXG4gICAgICAgICAgY29uc3Qgc3VmZml4ID0gbmFtZXMgPyBuYW1lc1tuYW1lcy5sZW5ndGggLSAxXSA6IFwiXCI7XHJcbiAgICAgICAgICByZXR1cm4gKFxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17Z2V0TGVzcyhzdHlsZXMsIFwiZmlsZS1pdGVtXCIpfT5cclxuICAgICAgICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgICAgICBjbGFzc05hbWU9e2NscyhnZXRMZXNzKHN0eWxlcywgXCJjb250ZW50XCIpLCB7XHJcbiAgICAgICAgICAgICAgICAgIFtnZXRMZXNzKHN0eWxlcywgXCJjb250ZW50X2Vycm9yXCIpXTogZmlsZS5zdGF0dXMgPT0gXCJlcnJvclwiLFxyXG4gICAgICAgICAgICAgICAgfSl9XHJcbiAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9e2dldExlc3Moc3R5bGVzLCBcIm1hcmstcGljdHVyZVwiKX0+XHJcbiAgICAgICAgICAgICAgICAgIDxGaWxlSWNvbiBzdWZmaXg9e3N1ZmZpeH0gZmlsZUlkPXtmaWxlLmZpbGVJZH0gLz5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9e2dldExlc3Moc3R5bGVzLCBcIm5hbWVcIil9PlxyXG4gICAgICAgICAgICAgICAgICB7ZmlsZS5uYW1lIHx8IGZpbGUuZmlsZU5hbWV9XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtnZXRMZXNzKHN0eWxlcywgXCJpY29uXCIpfT5cclxuICAgICAgICAgICAgICAgICAge3Nob3dVcGxvYWRMaXN0LnNob3dQcmV2aWV3SWNvbiAmJiBmaWxlLnN0YXR1cyA9PSBcImRvbmVcIiAmJiAoXHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdlxyXG4gICAgICAgICAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5wcm9wcy5vblByZXZpZXcpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnByb3BzLm9uUHJldmlldyhmaWxlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICBwcmV2aWV3RG9jdW1lbnQoZmlsZS5maWxlSWQsIHJlcXVlc3RDb25maWcpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICB9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgc3R5bGU9e3sgY3Vyc29yOiBcInBvaW50ZXJcIiB9fVxyXG4gICAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICAgIHtzaG93VXBsb2FkTGlzdC5kb3dubG9hZEljb24gPyAoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNob3dVcGxvYWRMaXN0LmRvd25sb2FkSWNvblxyXG4gICAgICAgICAgICAgICAgICAgICAgKSA6IChcclxuICAgICAgICAgICAgICAgICAgICAgICAgPEV5ZU91dGxpbmVkIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICApfVxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICApfVxyXG4gICAgICAgICAgICAgICAgICB7c2hvd1VwbG9hZExpc3Quc2hvd0Rvd25sb2FkSWNvbiAmJiBmaWxlLnN0YXR1cyA9PSBcImRvbmVcIiAmJiAoXHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdlxyXG4gICAgICAgICAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5wcm9wcy5vbkRvd25sb2FkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5wcm9wcy5vbkRvd25sb2FkKGZpbGUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGRvd25sb2FkKGZpbGUuZmlsZUlkLCB0cnVlLCByZXF1ZXN0Q29uZmlnKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgfX1cclxuICAgICAgICAgICAgICAgICAgICAgIHN0eWxlPXt7IGN1cnNvcjogXCJwb2ludGVyXCIgfX1cclxuICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgICB7c2hvd1VwbG9hZExpc3QuZG93bmxvYWRJY29uID8gKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBzaG93VXBsb2FkTGlzdC5kb3dubG9hZEljb25cclxuICAgICAgICAgICAgICAgICAgICAgICkgOiAoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxEb3dubG9hZE91dGxpbmVkIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICApfVxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICApfVxyXG4gICAgICAgICAgICAgICAgICB7c2hvd1VwbG9hZExpc3Quc2hvd1JlbW92ZUljb24gJiYgKFxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXZcclxuICAgICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMucHJvcHMub25SZW1vdmUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnByb3BzLm9uUmVtb3ZlKGZpbGUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMub25EZWxldGUoZmlsZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgIH19XHJcbiAgICAgICAgICAgICAgICAgICAgICBzdHlsZT17eyBjdXJzb3I6IFwicG9pbnRlclwiIH19XHJcbiAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgICAge3Nob3dVcGxvYWRMaXN0LmRvd25sb2FkSWNvbiA/IChcclxuICAgICAgICAgICAgICAgICAgICAgICAgc2hvd1VwbG9hZExpc3QuZG93bmxvYWRJY29uXHJcbiAgICAgICAgICAgICAgICAgICAgICApIDogKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8RGVsZXRlT3V0bGluZWQgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICl9XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICl9XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICB7ZmlsZS5zdGF0dXMgPT0gXCJ1cGxvYWRpbmdcIiAmJiAoXHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17Z2V0TGVzcyhzdHlsZXMsIFwicHJvY2Vzc1wiKX0+XHJcbiAgICAgICAgICAgICAgICAgIDxkaXZcclxuICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9e2dldExlc3Moc3R5bGVzLCBcInBlcmNlbnRcIil9XHJcbiAgICAgICAgICAgICAgICAgICAgc3R5bGU9e3sgd2lkdGg6IGZpbGUucGVyY2VudCArIFwiJVwiIH19XHJcbiAgICAgICAgICAgICAgICAgID48L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICl9XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgKTtcclxuICAgICAgICB9LFxyXG4gICAgICB9O1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgZGVmYXVsdFByb3BzID0ge1xyXG4gICAgICAgIC4uLmRlZmF1bHRQcm9wcyxcclxuICAgICAgICBvbkRvd25sb2FkOiAoZmlsZTogYW55KSA9PiB7XHJcbiAgICAgICAgICBkb3dubG9hZChmaWxlLmZpbGVJZCwgdHJ1ZSwgcmVxdWVzdENvbmZpZyk7XHJcbiAgICAgICAgfSxcclxuICAgICAgICBvblJlbW92ZTogKGZpbGUpID0+IHtcclxuICAgICAgICAgIHRoaXMub25EZWxldGUoZmlsZSk7XHJcbiAgICAgICAgfSxcclxuICAgICAgICBvblByZXZpZXc6IChmaWxlOiBhbnkpID0+IHtcclxuICAgICAgICAgIGlmIChmaWxlPy5maWxlSWQpIHtcclxuICAgICAgICAgICAgcHJldmlld0RvY3VtZW50KGZpbGUuZmlsZUlkLCByZXF1ZXN0Q29uZmlnKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG4gICAgICAgIHNob3dVcGxvYWRMaXN0OiB7IC4uLnNob3dVcGxvYWRMaXN0IH0sXHJcbiAgICAgIH07XHJcbiAgICB9XHJcbiAgICByZXR1cm4gKFxyXG4gICAgICA8PlxyXG4gICAgICAgIDxVcGxvYWRcclxuICAgICAgICAgIHsuLi5kZWZhdWx0UHJvcHN9XHJcbiAgICAgICAgICB7Li4ubmV3cHJvcHN9XHJcbiAgICAgICAgICBiZWZvcmVVcGxvYWQ9e3RoaXMuYmVmb3JlVXBsb2FkLmJpbmQodGhpcyl9XHJcbiAgICAgICAgICBmaWxlTGlzdD17dGhpcy5zdGF0ZS5maWxlTGlzdH1cclxuICAgICAgICAvPlxyXG4gICAgICA8Lz5cclxuICAgICk7XHJcbiAgfVxyXG59XHJcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7QUFBQSxPQUFPLEtBQUtBLEtBQUssTUFBTSxPQUFPO0FBRTlCLE9BQU9DLElBQUksTUFBTSxVQUFVO0FBQzNCLE9BQU9DLE9BQU8sTUFBTSxZQUFZO0FBRWhDLE9BQU9DLElBQUksTUFBTSxTQUFTO0FBQzFCLFNBQVNDLE9BQU8sUUFBUSxhQUFhO0FBQ3JDLE9BQU9DLE1BQU0sTUFBTSxjQUFjO0FBQ2pDLE9BQU9DLEdBQUcsTUFBTSxZQUFZO0FBQzVCLE9BQU9DLFFBQVEsTUFBTSxvQkFBb0I7QUFDekMsU0FDRUMsY0FBYyxFQUNkQyxnQkFBZ0IsRUFDaEJDLFdBQVcsUUFDTixtQkFBbUI7QUFFMUIsT0FBT0MsZ0JBQWdCLE1BQU0sV0FBVztBQUV4QyxNQUFNO0VBQUVDLE1BQU07RUFBRUMsUUFBUTtFQUFFQyxlQUFlO0VBQUVDO0FBQWEsQ0FBQyxHQUFHZCxJQUFJO0FBZWhFLGVBQWUsTUFBTWUsU0FBUyxTQUFTaEIsS0FBSyxDQUFDaUIsYUFBYSxDQUFvQjtFQUFBQyxZQUFBO0lBQUEsU0FBQUMsU0FBQTtJQUFBQyxlQUFBLGdCQUVwRTtNQUNOQyxRQUFRLEVBQUUsRUFBRTtNQUNaQyxNQUFNLEVBQUUsRUFBRTtNQUNWQyxhQUFhLEVBQUUsRUFBRTtNQUNqQkMsU0FBUyxFQUFFO0lBQ2IsQ0FBQztJQUFBSixlQUFBLHdCQUNlLENBQUM7SUFBQUEsZUFBQSxxQkFDSixDQUFDO0lBQUFBLGVBQUEsd0JBQ0UsRUFBRTtJQUFB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QkFFM0I5RyxLQUFBLENBQUF5SCxhQUFBLENBQUNqSCxjQUFjLE1BQUUsQ0FFaEIsQ0FFSixDQUNGLENBQUMsRUFDTFAsSUFBSSxDQUFDK0MsTUFBTSxJQUFJLFdBQVcsaUJBQ3pCaEQsS0FBQSxDQUFBeUgsYUFBQTtZQUFLQyxTQUFTLEVBQUV0SCxPQUFPLENBQUNDLE1BQU0sRUFBRSxTQUFTO1VBQUUsZ0JBQ3pDTCxLQUFBLENBQUF5SCxhQUFBO1lBQ0VDLFNBQVMsRUFBRXRILE9BQU8sQ0FBQ0MsTUFBTSxFQUFFLFNBQVMsQ0FBRTtZQUN0Q3dILEtBQUssRUFBRTtjQUFFSSxLQUFLLEVBQUVoSSxJQUFJLENBQUNnQyxPQUFPLEdBQUc7WUFBSTtVQUFFLENBQ2pDLENBQ0gsQ0FFSixDQUFDO1FBRVY7TUFBQyxFQUNGO0lBQ0gsQ0FBQyxNQUFNO01BQ0xpRixZQUFZLEdBQUFyRCxhQUFBLENBQUFBLGFBQUEsS0FDUHFELFlBQVk7UUFDZmEsVUFBVSxFQUFHOUgsSUFBUyxJQUFLO1VBQ3pCWSxRQUFRLENBQUNaLElBQUksQ0FBQ3FDLE1BQU0sRUFBRSxJQUFJLEVBQUVGLGFBQWEsQ0FBQztRQUM1QyxDQUFDO1FBQ0Q0RixRQUFRLEVBQUcvSCxJQUFJLElBQUs7VUFDbEIsSUFBSSxDQUFDdUcsUUFBUSxDQUFDdkcsSUFBSSxDQUFDO1FBQ3JCLENBQUM7UUFDRDJILFNBQVMsRUFBRzNILElBQVMsSUFBSztVQUN4QixJQUFJQSxJQUFJLGFBQUpBLElBQUksZUFBSkEsSUFBSSxDQUFFcUMsTUFBTSxFQUFFO1lBQ2hCeEIsZUFBZSxDQUFDYixJQUFJLENBQUNxQyxNQUFNLEVBQUVGLGFBQWEsQ0FBQztVQUM3QztRQUNGLENBQUM7UUFDRDZDLGNBQWMsRUFBQXBCLGFBQUEsS0FBT29CLGNBQWM7TUFBRSxFQUN0QztJQUNIO0lBQ0Esb0JBQ0VqRixLQUFBLENBQUF5SCxhQUFBLENBQUF6SCxLQUFBLENBQUFrSSxRQUFBLHFCQUNFbEksS0FBQSxDQUFBeUgsYUFBQSxDQUFBVSxPQUFBLEVBQUFDLFFBQUEsS0FDTWxCLFlBQVksRUFDWkQsUUFBUTtNQUNadEMsWUFBWSxFQUFFLElBQUksQ0FBQ0EsWUFBWSxDQUFDeUMsSUFBSSxDQUFDLElBQUksQ0FBRTtNQUMzQy9GLFFBQVEsRUFBRSxJQUFJLENBQUNtRCxLQUFLLENBQUNuRDtJQUFTLEVBQy9CLENBQ0QsQ0FBQztFQUVQO0FBQ0Y7QUFBQ0QsZUFBQSxDQTFab0JKLFNBQVMsYUFDWEwsZ0JBQWdCIiwiaWdub3JlTGlzdCI6W119
|
|
421
|
+
};
|
|
422
|
+
};
|
|
423
|
+
const NscUpload = withCustomUpload(_Upload);
|
|
424
|
+
// // 使用 withCustomUpload 封装 Upload.Dragger 组件
|
|
425
|
+
const NscUploadDragger = withCustomUpload(_Upload.Dragger);
|
|
426
|
+
NscUpload.Dragger = NscUploadDragger;
|
|
427
|
+
export default NscUpload;
|
|
428
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJSZWFjdCIsImZpbGUiLCJtZXNzYWdlIiwib21pdCIsImdldExlc3MiLCJzdHlsZXMiLCJjbHMiLCJGaWxlSWNvbiIsIkRlbGV0ZU91dGxpbmVkIiwiRG93bmxvYWRPdXRsaW5lZCIsIkV5ZU91dGxpbmVkIiwidXBsb2FkIiwiZG93bmxvYWQiLCJwcmV2aWV3RG9jdW1lbnQiLCJwcmV2aWV3SW1hZ2UiLCJ3aXRoQ3VzdG9tVXBsb2FkIiwiQ29tcG9uZW50IiwiUHVyZUNvbXBvbmVudCIsImNvbnN0cnVjdG9yIiwiYXJndW1lbnRzIiwiX2RlZmluZVByb3BlcnR5IiwiZmlsZUxpc3QiLCJ2aWV3SWQiLCJmaWxlTGlzdFN0b3JlIiwiZmlsZU5hbWVzIiwib3B0aW9ucyIsIm9uQ29tcGxldGUiLCJvblByb2Nlc3MiLCJzbGljZVNpemUiLCJuZXdWZXJzaW9uIiwicHJvcHMiLCJvblByb2dyZXNzIiwidG90YWxQcm9ncmVzcyIsInBlcmNlbnQiLCJyZXMiLCJwYXJ0U2l6ZSIsInJlcXVlc3RDb25maWciLCJ1cGxvYWRJbmdTaXplIiwiZmlsZUlkIiwiSW1nUmVzIiwiY29kZSIsImRhdGEiLCJhdHRhY2hJZCIsIm9uU3VjY2VzcyIsImxpc3RUeXBlIiwib25FcnJvciIsInVwbG9hZEluZ0xpc3QiLCJwdXNoIiwic3RhdHVzIiwidXJsIiwidXBsb2FkU2l6ZSIsImUiLCJjb21wb25lbnREaWRNb3VudCIsImNvbnZlcnRGaWxlTGlzdCIsImxpc3QiLCJuZXdGaWxlTGlzdCIsIm9sZExpc3QiLCJzZXRTdGF0ZSIsImkiLCJsZW5ndGgiLCJpdGVtIiwidGVtcCIsIl9vYmplY3RTcHJlYWQiLCJuYW1lIiwiZmlsZU5hbWUiLCJ0eXBlIiwic2l6ZSIsImNvbXBvbmVudERpZFVwZGF0ZSIsInByZVByb3BzIiwicHJlU3RhdGUiLCJKU09OIiwic3RyaW5naWZ5Iiwic3RhdGUiLCJnZXRGaWxlTGlzdCIsInNldEZpbGVMaXN0IiwiYmVmb3JlVXBsb2FkIiwib2ZpbGVMaXN0IiwibWF4U2l6ZSIsImFsbG93RmlsZVN1ZmZpeCIsImNoZWNrU2FtZUZpbGUiLCJtYXhDb3VudCIsInNob3dVcGxvYWRMaXN0IiwicHJvcHNMaXN0Iiwib25MaXN0Q2hhbmdlIiwiY2hlY2tGaWxlVHlwZSIsImVycm9yIiwiY29uY2F0IiwiY2hlY2tMaXN0IiwibWFwIiwiaW5kZXhPZiIsIm5ld0xpc3QiLCJ1aWQiLCJzcGxpY2UiLCJuYW1lcyIsInNwbGl0Iiwic3VmZml4IiwiX3JlZiIsIm5ld0ZpbGUiLCJmaWxlcyIsImluZGV4Iiwid2luZG93IiwibG9jYWxTdG9yYWdlIiwiZ2V0SXRlbSIsInByZWZpeCIsIm9uRGVsZXRlIiwicmVuZGVyIiwiZmlsZUNhcmQiLCJzaG93RG93bmxvYWRJY29uIiwic2hvd1ByZXZpZXdJY29uIiwic2hvd1JlbW92ZUljb24iLCJkb3dubG9hZEljb24iLCJyZW1vdmVJY29uIiwicHJldmlld0ljb24iLCJuZXdwcm9wcyIsImRlZmF1bHRQcm9wcyIsImN1c3RvbVJlcXVlc3QiLCJiaW5kIiwibXVsdGlwbGUiLCJpdGVtUmVuZGVyIiwib3JpZ2luTm9kZSIsImN1cnJGaWxlTGlzdCIsImNyZWF0ZUVsZW1lbnQiLCJjbGFzc05hbWUiLCJvbkNsaWNrIiwib25QcmV2aWV3Iiwic3R5bGUiLCJjdXJzb3IiLCJvbkRvd25sb2FkIiwib25SZW1vdmUiLCJ3aWR0aCIsIkZyYWdtZW50IiwiX2V4dGVuZHMiLCJOc2NVcGxvYWQiLCJfVXBsb2FkIiwiTnNjVXBsb2FkRHJhZ2dlciIsIkRyYWdnZXIiXSwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvY29tcG9uZW50cy9iYXNlL3VwbG9hZC9pbmRleC50c3giXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgUmVhY3QgZnJvbSBcInJlYWN0XCI7XHJcbmltcG9ydCB7IFVwbG9hZCwgVXBsb2FkUHJvcHMgfSBmcm9tIFwiYW50ZFwiO1xyXG5pbXBvcnQgZmlsZSBmcm9tIFwibnNjLWZpbGVcIjtcclxuaW1wb3J0IG1lc3NhZ2UgZnJvbSBcIi4uL21lc3NhZ2VcIjtcclxuaW1wb3J0IG9taXQgZnJvbSBcIm9taXQuanNcIjtcclxuaW1wb3J0IHsgZ2V0TGVzcyB9IGZyb20gXCIuLi8uLi91dGlsc1wiO1xyXG5pbXBvcnQgc3R5bGVzIGZyb20gXCIuL2luZGV4Lmxlc3NcIjtcclxuaW1wb3J0IGNscyBmcm9tIFwiY2xhc3NuYW1lc1wiO1xyXG5pbXBvcnQgRmlsZUljb24gZnJvbSBcIi4uL2NvbW1vbi9GaWxlSWNvblwiO1xyXG5pbXBvcnQge1xyXG4gIERlbGV0ZU91dGxpbmVkLFxyXG4gIERvd25sb2FkT3V0bGluZWQsXHJcbiAgRXllT3V0bGluZWQsXHJcbn0gZnJvbSBcIkBhbnQtZGVzaWduL2ljb25zXCI7XHJcbmNvbnN0IHsgdXBsb2FkLCBkb3dubG9hZCwgcHJldmlld0RvY3VtZW50LCBwcmV2aWV3SW1hZ2UgfSA9IGZpbGU7XHJcblxyXG5pbnRlcmZhY2UgSVVwbG9hZFByb3BzIGV4dGVuZHMgVXBsb2FkUHJvcHMge1xyXG4gIHNsaWNlU2l6ZT86IG51bWJlcjtcclxuICBtYXhTaXplPzogbnVtYmVyIHwgYm9vbGVhbjtcclxuICBvblByb2Nlc3M/OiAocHJvY2VzcykgPT4gdm9pZDtcclxuICBvbkNvbXBsZXRlPzogKHsgZmlsZSwgZmlsZUlkLCBzdGF0dXMgfSkgPT4gdm9pZDtcclxuICBhbGxvd0ZpbGVTdWZmaXg/OiBBcnJheTxTdHJpbmc+OyAvL+WFgeiuuOS4iuS8oOaJqeWxleWQjSzkuI3luKYuXHJcbiAgdXNlRGVmYXVsdExpc3Q/OiBib29sZWFuOyAvL+aYr+WQpuS9v+eUqOm7mOiupOeahGZpbGVMaXN0XHJcbiAgZmlsZUNhcmQ/OiBib29sZWFuO1xyXG4gIG9uTGlzdENoYW5nZT86IGFueTtcclxuICBjaGVja1NhbWVGaWxlPzogYm9vbGVhbjtcclxuICByZXF1ZXN0Q29uZmlnPzogYW55O1xyXG4gIG5ld1ZlcnNpb24/OiBib29sZWFuO1xyXG59XHJcbmNvbnN0IHdpdGhDdXN0b21VcGxvYWQgPSAoQ29tcG9uZW50KSA9PiB7XHJcbiAgLy8g6L+U5Zue5LiA5Liq57G757uE5Lu2XHJcbiAgcmV0dXJuIGNsYXNzIGV4dGVuZHMgUmVhY3QuUHVyZUNvbXBvbmVudDxJVXBsb2FkUHJvcHMsIGFueT4ge1xyXG4gICAgc3RhdGUgPSB7XHJcbiAgICAgIGZpbGVMaXN0OiBbXSxcclxuICAgICAgdmlld0lkOiBcIlwiLFxyXG4gICAgICBmaWxlTGlzdFN0b3JlOiBbXSxcclxuICAgICAgZmlsZU5hbWVzOiBbXSxcclxuICAgIH07XHJcbiAgICB1cGxvYWRJbmdTaXplID0gMDtcclxuICAgIHVwbG9hZFNpemUgPSAwO1xyXG4gICAgdXBsb2FkSW5nTGlzdCA9IFtdO1xyXG4gICAgcHJldmlld1VybCA9IHt9O1xyXG4gICAgY29tcG9uZW50RGlkTW91bnQoKSB7XHJcbiAgICAgIGlmICh0aGlzLnByb3BzLmZpbGVMaXN0KSB7XHJcbiAgICAgICAgdGhpcy5jb252ZXJ0RmlsZUxpc3QodGhpcy5wcm9wcy5maWxlTGlzdCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGNvbnZlcnRGaWxlTGlzdChsaXN0PzogQXJyYXk8T2JqZWN0Pikge1xyXG4gICAgICBjb25zdCB7IGZpbGVMaXN0LCBsaXN0VHlwZSB9ID0gdGhpcy5wcm9wcztcclxuICAgICAgY29uc3QgbmV3RmlsZUxpc3QgPSBbXTtcclxuICAgICAgbGV0IG9sZExpc3QgPSBsaXN0ID8gbGlzdCA6IGZpbGVMaXN0O1xyXG4gICAgICB0aGlzLnNldFN0YXRlKFxyXG4gICAgICAgIHtcclxuICAgICAgICAgIGZpbGVMaXN0U3RvcmU6IFsuLi5maWxlTGlzdF0sXHJcbiAgICAgICAgfSxcclxuICAgICAgICBhc3luYyAoKSA9PiB7XHJcbiAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG9sZExpc3QubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgbGV0IGl0ZW06IGFueSA9IG9sZExpc3RbaV07XHJcbiAgICAgICAgICAgIGxldCB0ZW1wID0ge1xyXG4gICAgICAgICAgICAgIC4uLml0ZW0sXHJcbiAgICAgICAgICAgICAgc3RhdHVzOiBpdGVtLnN0YXR1cyxcclxuICAgICAgICAgICAgICBuYW1lOiBpdGVtLm5hbWUgfHwgaXRlbS5maWxlTmFtZSxcclxuICAgICAgICAgICAgICB0eXBlOiBpdGVtLnR5cGUsXHJcbiAgICAgICAgICAgICAgc2l6ZTogaXRlbS5zaXplLFxyXG4gICAgICAgICAgICAgIHVybDogaXRlbS51cmwsXHJcbiAgICAgICAgICAgIH0gYXMgYW55O1xyXG4gICAgICAgICAgICBpZiAobGlzdFR5cGUgPT0gXCJwaWN0dXJlLWNhcmRcIiAmJiAhaXRlbS51cmwgJiYgaXRlbS5maWxlSWQpIHtcclxuICAgICAgICAgICAgICBsZXQgcmVzOiBhbnkgPSBhd2FpdCBwcmV2aWV3SW1hZ2UoXHJcbiAgICAgICAgICAgICAgICBpdGVtLmZpbGVJZCxcclxuICAgICAgICAgICAgICAgIHRoaXMucHJvcHMucmVxdWVzdENvbmZpZ1xyXG4gICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgaWYgKHJlcy5jb2RlID09IDIwMCkge1xyXG4gICAgICAgICAgICAgICAgdGVtcC51cmwgPSByZXMuZGF0YTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgbmV3RmlsZUxpc3QucHVzaCh0ZW1wKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHRoaXMuc2V0U3RhdGUoe1xyXG4gICAgICAgICAgICBmaWxlTGlzdDogWy4uLm5ld0ZpbGVMaXN0XSxcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgKTtcclxuICAgIH1cclxuICAgIGNvbXBvbmVudERpZFVwZGF0ZShwcmVQcm9wcywgcHJlU3RhdGUpIHtcclxuICAgICAgaWYgKHRoaXMucHJvcHMuZmlsZUxpc3QpIHtcclxuICAgICAgICBpZiAoXHJcbiAgICAgICAgICBKU09OLnN0cmluZ2lmeSh0aGlzLnByb3BzLmZpbGVMaXN0KSAhPT1cclxuICAgICAgICAgIEpTT04uc3RyaW5naWZ5KHRoaXMuc3RhdGUuZmlsZUxpc3RTdG9yZSlcclxuICAgICAgICApIHtcclxuICAgICAgICAgIHRoaXMuY29udmVydEZpbGVMaXN0KHRoaXMucHJvcHMuZmlsZUxpc3QpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgZ2V0RmlsZUxpc3QoKSB7XHJcbiAgICAgIHJldHVybiB0aGlzLnN0YXRlLmZpbGVMaXN0O1xyXG4gICAgfVxyXG4gICAgc2V0RmlsZUxpc3QoZmlsZUxpc3Q6IEFycmF5PE9iamVjdD4pIHtcclxuICAgICAgdGhpcy5jb252ZXJ0RmlsZUxpc3QoZmlsZUxpc3QpO1xyXG4gICAgfVxyXG4gICAgYXN5bmMgYmVmb3JlVXBsb2FkKGZpbGUsIG9maWxlTGlzdCkge1xyXG4gICAgICBsZXQge1xyXG4gICAgICAgIG1heFNpemUgPSAxMDAsXHJcbiAgICAgICAgYWxsb3dGaWxlU3VmZml4LFxyXG4gICAgICAgIGNoZWNrU2FtZUZpbGUgPSB0cnVlLFxyXG4gICAgICAgIG1heENvdW50LFxyXG4gICAgICAgIHNob3dVcGxvYWRMaXN0LFxyXG4gICAgICAgIGZpbGVMaXN0OiBwcm9wc0xpc3QsXHJcbiAgICAgICAgb25MaXN0Q2hhbmdlLFxyXG4gICAgICB9ID0gdGhpcy5wcm9wcztcclxuICAgICAgbGV0IHsgZmlsZUxpc3QsIGZpbGVMaXN0U3RvcmUgfSA9IHRoaXMuc3RhdGU7XHJcbiAgICAgIGxldCBzaXplOiBudW1iZXI7XHJcbiAgICAgIGlmIChhbGxvd0ZpbGVTdWZmaXggJiYgIXRoaXMuY2hlY2tGaWxlVHlwZShmaWxlKSkge1xyXG4gICAgICAgIG1lc3NhZ2UuZXJyb3IoXHJcbiAgICAgICAgICBgJHtmaWxlLm5hbWV95paH5Lu257G75Z6L5LiN5YWB6K645LiK5Lyg77yM6K+35LiK5Lyg5ZCO57yA5Li6JHthbGxvd0ZpbGVTdWZmaXh955qE57G75Z6L5paH5Lu277yBYFxyXG4gICAgICAgICk7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChtYXhTaXplICE9PSBmYWxzZSkge1xyXG4gICAgICAgIGlmIChtYXhTaXplID09PSB0cnVlKSB7XHJcbiAgICAgICAgICBtYXhTaXplID0gMTAwO1xyXG4gICAgICAgIH1cclxuICAgICAgICBzaXplID0gbWF4U2l6ZSAqIDEwMjQgKiAxMDI0O1xyXG4gICAgICAgIGlmIChzaXplIDwgZmlsZS5zaXplKSB7XHJcbiAgICAgICAgICBtZXNzYWdlLmVycm9yKGAke2ZpbGUubmFtZX3mlofku7blpKflsI/otoXov4cke21heFNpemV9Te+8jOivt+mHjeaWsOS4iuS8oO+8gWApO1xyXG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICBsZXQgZmlsZU5hbWVzID0gW107XHJcbiAgICAgIGlmIChjaGVja1NhbWVGaWxlKSB7XHJcbiAgICAgICAgY29uc3QgY2hlY2tMaXN0ID0gdGhpcy5wcm9wcy5maWxlTGlzdCA/IGZpbGVMaXN0U3RvcmUgOiBmaWxlTGlzdDtcclxuICAgICAgICBjaGVja0xpc3QubWFwKChpdGVtKSA9PiB7XHJcbiAgICAgICAgICBmaWxlTmFtZXMucHVzaChpdGVtLm5hbWUgfHwgaXRlbS5maWxlTmFtZSk7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIGlmIChmaWxlTmFtZXMuaW5kZXhPZihmaWxlLm5hbWUpID4gLTEgJiYgc2hvd1VwbG9hZExpc3QgIT09IGZhbHNlKSB7XHJcbiAgICAgICAgICBtZXNzYWdlLmVycm9yKGDmlofku7Yke2ZpbGUubmFtZX3lt7LlnKjkuIrkvKDliJfooajkuK3vvIzor7fph43mlrDpgInmi6nmlofku7bvvIFgKTtcclxuICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmICh0aGlzLnByb3BzLmJlZm9yZVVwbG9hZCkge1xyXG4gICAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IHRoaXMucHJvcHMuYmVmb3JlVXBsb2FkKGZpbGUsIG9maWxlTGlzdCk7XHJcbiAgICAgICAgaWYgKHJlcyA9PT0gZmFsc2UpIHtcclxuICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgY29uc3QgbmV3TGlzdCA9IFsuLi5maWxlTGlzdF07XHJcbiAgICAgIG9maWxlTGlzdC5tYXAoYXN5bmMgKGl0ZW0pID0+IHtcclxuICAgICAgICBpZiAoXHJcbiAgICAgICAgICAhKFxyXG4gICAgICAgICAgICAoYWxsb3dGaWxlU3VmZml4ICYmICF0aGlzLmNoZWNrRmlsZVR5cGUoaXRlbSkpIHx8XHJcbiAgICAgICAgICAgIHNpemUgPCBpdGVtLnNpemUgfHxcclxuICAgICAgICAgICAgKGNoZWNrU2FtZUZpbGUgJiYgZmlsZU5hbWVzLmluZGV4T2YoaXRlbS5uYW1lKSA+IC0xKVxyXG4gICAgICAgICAgKVxyXG4gICAgICAgICkge1xyXG4gICAgICAgICAgY29uc3QgdGVtcCA9IHtcclxuICAgICAgICAgICAgZmlsZU5hbWU6IGl0ZW0ubmFtZSxcclxuICAgICAgICAgICAgcGVyY2VudDogMCxcclxuICAgICAgICAgICAgc3RhdHVzOiBcInVwbG9hZGluZ1wiLFxyXG4gICAgICAgICAgICB1aWQ6IGl0ZW0udWlkLFxyXG4gICAgICAgICAgICBuYW1lOiBpdGVtLm5hbWUsXHJcbiAgICAgICAgICAgIHR5cGU6IGl0ZW0udHlwZSxcclxuICAgICAgICAgICAgc2l6ZTogaXRlbS5zaXplLFxyXG4gICAgICAgICAgfTtcclxuICAgICAgICAgIG5ld0xpc3QucHVzaCh0ZW1wKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG5cclxuICAgICAgaWYgKG1heENvdW50ICYmIG5ld0xpc3QubGVuZ3RoID4gbWF4Q291bnQpIHtcclxuICAgICAgICBsZXQgbGVuZ3RoID0gbmV3TGlzdC5sZW5ndGggLSBtYXhDb3VudDtcclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICBuZXdMaXN0LnNwbGljZSgwLCAxKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgb25MaXN0Q2hhbmdlICYmIG9uTGlzdENoYW5nZShuZXdMaXN0KTtcclxuICAgICAgdGhpcy5zZXRTdGF0ZSh7IGZpbGVMaXN0OiBuZXdMaXN0IH0pO1xyXG4gICAgICB0aGlzLnVwbG9hZFNpemUgPSBvZmlsZUxpc3QubGVuZ3RoO1xyXG4gICAgfVxyXG4gICAgY2hlY2tGaWxlVHlwZShmaWxlKSB7XHJcbiAgICAgIGNvbnN0IHsgYWxsb3dGaWxlU3VmZml4IH0gPSB0aGlzLnByb3BzO1xyXG4gICAgICBjb25zdCBuYW1lcyA9IGZpbGUubmFtZS5zcGxpdChcIi5cIik7XHJcbiAgICAgIGNvbnN0IHN1ZmZpeCA9IG5hbWVzW25hbWVzLmxlbmd0aCAtIDFdO1xyXG4gICAgICBpZiAoYWxsb3dGaWxlU3VmZml4LmluZGV4T2Yoc3VmZml4KSA+IC0xKSB7XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gICAgb25Qcm9jZXNzKHsgcGVyY2VudCwgZmlsZSB9OiBhbnkpIHtcclxuICAgICAgY29uc3QgeyBmaWxlTGlzdCB9ID0gdGhpcy5zdGF0ZTtcclxuICAgICAgY29uc3QgeyBvbkxpc3RDaGFuZ2UgfSA9IHRoaXMucHJvcHM7XHJcbiAgICAgIGNvbnN0IG5ld0xpc3Q6IGFueSA9IFtdO1xyXG4gICAgICBmaWxlTGlzdC5tYXAoKGl0ZW06IGFueSkgPT4ge1xyXG4gICAgICAgIGNvbnN0IG5ld0ZpbGUgPSB7IC4uLml0ZW0gfTtcclxuICAgICAgICBpZiAoZmlsZS51aWQgPT0gaXRlbS51aWQpIHtcclxuICAgICAgICAgIG5ld0ZpbGUucGVyY2VudCA9IHBlcmNlbnQ7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIG5ld0xpc3QucHVzaChuZXdGaWxlKTtcclxuICAgICAgfSk7XHJcbiAgICAgIHRoaXMuc2V0U3RhdGUoe1xyXG4gICAgICAgIGZpbGVMaXN0OiBuZXdMaXN0LFxyXG4gICAgICB9KTtcclxuICAgICAgb25MaXN0Q2hhbmdlICYmIG9uTGlzdENoYW5nZShmaWxlTGlzdCk7XHJcbiAgICB9XHJcbiAgICBhc3luYyBvbkNvbXBsZXRlKGZpbGVzKSB7XHJcbiAgICAgIHRoaXMudXBsb2FkSW5nU2l6ZSA9IDA7XHJcbiAgICAgIHRoaXMudXBsb2FkU2l6ZSA9IDA7XHJcbiAgICAgIHRoaXMudXBsb2FkSW5nTGlzdCA9IFtdO1xyXG4gICAgICBjb25zdCB7IGZpbGVMaXN0IH0gPSB0aGlzLnN0YXRlO1xyXG4gICAgICBjb25zdCB7IG5ld1ZlcnNpb24gPSB0cnVlLCByZXF1ZXN0Q29uZmlnID0ge30gfSA9IHRoaXMucHJvcHM7XHJcbiAgICAgIGNvbnN0IG5ld0xpc3Q6IGFueSA9IFtdO1xyXG4gICAgICBmaWxlTGlzdC5tYXAoYXN5bmMgKGl0ZW06IGFueSwgaW5kZXgpID0+IHtcclxuICAgICAgICBjb25zdCBuZXdGaWxlID0geyAuLi5pdGVtIH07XHJcbiAgICAgICAgZmlsZXMubWFwKGFzeW5jIChmaWxlKSA9PiB7XHJcbiAgICAgICAgICBpZiAoZmlsZS5maWxlLnVpZCA9PSBpdGVtLnVpZCkge1xyXG4gICAgICAgICAgICBuZXdGaWxlLnN0YXR1cyA9IGZpbGUuc3RhdHVzID09IFwic3VjY2Vzc1wiID8gXCJkb25lXCIgOiBmaWxlLnN0YXR1cztcclxuICAgICAgICAgICAgbmV3RmlsZS5maWxlSWQgPSBmaWxlLmZpbGVJZDtcclxuICAgICAgICAgICAgbmV3RmlsZS51cmwgPSBmaWxlLnVybDtcclxuICAgICAgICAgICAgaWYgKCFuZXdWZXJzaW9uKSB7XHJcbiAgICAgICAgICAgICAgbGV0IHVybCA9IGAvanF1aWNrLXJlc291cmNlL29zcy9lbmRwb2ludC9kb3dubG9hZC1maWxlcz9hdHRhY2hJZD0ke1xyXG4gICAgICAgICAgICAgICAgZmlsZS5maWxlSWRcclxuICAgICAgICAgICAgICB9Jl90cGs9JHt3aW5kb3cubG9jYWxTdG9yYWdlLmdldEl0ZW0oXCJ0b2tlblwiKX1gO1xyXG4gICAgICAgICAgICAgIG5ld0ZpbGUudXJsID0gcmVxdWVzdENvbmZpZy5wcmVmaXhcclxuICAgICAgICAgICAgICAgID8gcmVxdWVzdENvbmZpZy5wcmVmaXggKyB1cmxcclxuICAgICAgICAgICAgICAgIDogXCIvYXBpXCIgKyB1cmw7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgICBuZXdMaXN0LnB1c2gobmV3RmlsZSk7XHJcbiAgICAgIH0pO1xyXG4gICAgICB0aGlzLnNldFN0YXRlKHtcclxuICAgICAgICBmaWxlTGlzdDogWy4uLm5ld0xpc3RdLFxyXG4gICAgICB9KTtcclxuXHJcbiAgICAgIGNvbnN0IHsgb25MaXN0Q2hhbmdlIH0gPSB0aGlzLnByb3BzO1xyXG4gICAgICBvbkxpc3RDaGFuZ2UgJiYgb25MaXN0Q2hhbmdlKG5ld0xpc3QpO1xyXG4gICAgfVxyXG4gICAgY3VzdG9tUmVxdWVzdCA9IGFzeW5jIChvcHRpb25zKSA9PiB7XHJcbiAgICAgIGNvbnN0IGZpbGUgPSBvcHRpb25zLmZpbGU7XHJcbiAgICAgIGNvbnN0IHtcclxuICAgICAgICBvbkNvbXBsZXRlLFxyXG4gICAgICAgIG9uUHJvY2VzcyxcclxuICAgICAgICBzbGljZVNpemUsXHJcbiAgICAgICAgbmV3VmVyc2lvbiA9IHRydWUsXHJcbiAgICAgIH0gPSB0aGlzLnByb3BzO1xyXG4gICAgICBjb25zdCBvblByb2dyZXNzID0gKHRvdGFsUHJvZ3Jlc3M6IGFueSkgPT4ge1xyXG4gICAgICAgIG9wdGlvbnMub25Qcm9ncmVzcyh7IHBlcmNlbnQ6IHRvdGFsUHJvZ3Jlc3MgfSwgZmlsZSk7XHJcbiAgICAgICAgdGhpcy5vblByb2Nlc3MoeyBwZXJjZW50OiB0b3RhbFByb2dyZXNzLCBmaWxlOiBmaWxlIH0pO1xyXG4gICAgICAgIG9uUHJvY2VzcyAmJiBvblByb2Nlc3MoeyBwZXJjZW50OiB0b3RhbFByb2dyZXNzLCBmaWxlOiBmaWxlIH0pO1xyXG4gICAgICB9O1xyXG4gICAgICB0cnkge1xyXG4gICAgICAgIGNvbnN0IHJlczogYW55ID0gYXdhaXQgdXBsb2FkKFxyXG4gICAgICAgICAge1xyXG4gICAgICAgICAgICBmaWxlOiBmaWxlLFxyXG4gICAgICAgICAgICBvblByb2dyZXNzOiBvblByb2dyZXNzLFxyXG4gICAgICAgICAgICBwYXJ0U2l6ZTogc2xpY2VTaXplLFxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIHRoaXMucHJvcHMucmVxdWVzdENvbmZpZ1xyXG4gICAgICAgICk7XHJcbiAgICAgICAgdGhpcy51cGxvYWRJbmdTaXplID0gdGhpcy51cGxvYWRJbmdTaXplICsgMTtcclxuICAgICAgICBsZXQgZmlsZUlkID0gbnVsbDtcclxuICAgICAgICBsZXQgSW1nUmVzID0gbnVsbDtcclxuICAgICAgICBpZiAocmVzLmNvZGUgPT0gMjAwKSB7XHJcbiAgICAgICAgICBmaWxlSWQgPSByZXMuZGF0YS5hdHRhY2hJZDtcclxuICAgICAgICAgIG9wdGlvbnMub25TdWNjZXNzKCk7XHJcbiAgICAgICAgICBpZiAodGhpcy5wcm9wcy5saXN0VHlwZSA9PSBcInBpY3R1cmUtY2FyZFwiICYmIG5ld1ZlcnNpb24pIHtcclxuICAgICAgICAgICAgSW1nUmVzID0gYXdhaXQgcHJldmlld0ltYWdlKGZpbGVJZCwgdGhpcy5wcm9wcy5yZXF1ZXN0Q29uZmlnKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgb3B0aW9ucy5vbkVycm9yKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMudXBsb2FkSW5nTGlzdC5wdXNoKHtcclxuICAgICAgICAgIGZpbGU6IG9wdGlvbnMuZmlsZSxcclxuICAgICAgICAgIGZpbGVJZDogZmlsZUlkLFxyXG4gICAgICAgICAgc3RhdHVzOiByZXMuY29kZSA9PSAyMDAgPyBcInN1Y2Nlc3NcIiA6IFwiZXJyb3JcIixcclxuICAgICAgICAgIHVybDogSW1nUmVzID8gSW1nUmVzLmRhdGEgOiBudWxsLFxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGlmICh0aGlzLnVwbG9hZFNpemUgPT0gdGhpcy51cGxvYWRJbmdTaXplKSB7XHJcbiAgICAgICAgICB0aGlzLm9uQ29tcGxldGUodGhpcy51cGxvYWRJbmdMaXN0KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgb25Db21wbGV0ZSAmJlxyXG4gICAgICAgICAgb25Db21wbGV0ZSh7XHJcbiAgICAgICAgICAgIGZpbGU6IG9wdGlvbnMuZmlsZSxcclxuICAgICAgICAgICAgZmlsZUlkOiBmaWxlSWQsXHJcbiAgICAgICAgICAgIHN0YXR1czogcmVzLmNvZGUgPT0gMjAwID8gXCJzdWNjZXNzXCIgOiBcImVycm9yXCIsXHJcbiAgICAgICAgICB9KTtcclxuICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgIGlmICh0aGlzLnVwbG9hZFNpemUgPT0gdGhpcy51cGxvYWRJbmdTaXplKSB7XHJcbiAgICAgICAgICB0aGlzLm9uQ29tcGxldGUodGhpcy51cGxvYWRJbmdMaXN0KTtcclxuICAgICAgICAgIG9wdGlvbnMub25FcnJvcigpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBvbkNvbXBsZXRlICYmXHJcbiAgICAgICAgICBvbkNvbXBsZXRlKHsgZmlsZTogb3B0aW9ucy5maWxlLCBmaWxlSWQ6IFwiXCIsIHN0YXR1czogXCJlcnJvclwiIH0pO1xyXG4gICAgICB9XHJcbiAgICB9O1xyXG4gICAgb25EZWxldGUoZmlsZSkge1xyXG4gICAgICBjb25zdCB7IGZpbGVMaXN0IH0gPSB0aGlzLnN0YXRlO1xyXG4gICAgICBjb25zdCB7IG9uTGlzdENoYW5nZSB9ID0gdGhpcy5wcm9wcztcclxuICAgICAgY29uc3QgbmV3TGlzdDogYW55ID0gW107XHJcbiAgICAgIGZpbGVMaXN0Lm1hcCgoaXRlbTogYW55KSA9PiB7XHJcbiAgICAgICAgLy/pgJrov4fmlofku7blkI3liKTmlq3vvIzkuIrkvKDmmK/mlofku7blkI3mmK/llK/kuIDnmoRcclxuICAgICAgICBpZiAoXHJcbiAgICAgICAgICBpdGVtLm5hbWUgIT09IGZpbGUubmFtZSB8fFxyXG4gICAgICAgICAgaXRlbS5maWxlSWQgIT09IGZpbGUuZmlsZUlkIHx8XHJcbiAgICAgICAgICBpdGVtLnVpZCAhPT0gZmlsZS51aWRcclxuICAgICAgICApIHtcclxuICAgICAgICAgIG5ld0xpc3QucHVzaChpdGVtKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgICB0aGlzLnNldFN0YXRlKHtcclxuICAgICAgICBmaWxlTGlzdDogbmV3TGlzdCxcclxuICAgICAgfSk7XHJcbiAgICAgIG9uTGlzdENoYW5nZSAmJiBvbkxpc3RDaGFuZ2UobmV3TGlzdCk7XHJcbiAgICB9XHJcbiAgICByZW5kZXIoKTogUmVhY3QuUmVhY3ROb2RlIHtcclxuICAgICAgbGV0IHtcclxuICAgICAgICBmaWxlTGlzdCxcclxuICAgICAgICBmaWxlQ2FyZCxcclxuICAgICAgICBzaG93VXBsb2FkTGlzdCA9IHtcclxuICAgICAgICAgIHNob3dEb3dubG9hZEljb246IHRydWUsXHJcbiAgICAgICAgICBzaG93UHJldmlld0ljb246IGZhbHNlLFxyXG4gICAgICAgICAgc2hvd1JlbW92ZUljb246IHRydWUsXHJcbiAgICAgICAgICBkb3dubG9hZEljb246IG51bGwsXHJcbiAgICAgICAgICByZW1vdmVJY29uOiBudWxsLFxyXG4gICAgICAgICAgcHJldmlld0ljb246IG51bGwsXHJcbiAgICAgICAgfSBhcyBhbnksXHJcbiAgICAgICAgcmVxdWVzdENvbmZpZyA9IHt9LFxyXG4gICAgICB9ID0gdGhpcy5wcm9wcztcclxuICAgICAgY29uc3QgbmV3cHJvcHMgPSBvbWl0KHRoaXMucHJvcHMsIFtcclxuICAgICAgICBcInNsaWNlU2l6ZVwiLFxyXG4gICAgICAgIFwibWF4U2l6ZVwiLFxyXG4gICAgICAgIFwib25Db21wbGV0ZVwiLFxyXG4gICAgICAgIFwib25Qcm9jZXNzXCIsXHJcbiAgICAgICAgXCJhbGxvd0ZpbGVTdWZmaXhcIixcclxuICAgICAgICBcInVzZURlZmF1bHRMaXN0XCIsXHJcbiAgICAgICAgXCJmaWxlQ2FyZFwiLFxyXG4gICAgICAgIFwib25MaXN0Q2hhbmdlXCIsXHJcbiAgICAgICAgXCJuZXdWZXJzaW9uXCIsXHJcbiAgICAgICAgXCJyZXF1ZXN0Q29uZmlnXCIsXHJcbiAgICAgIF0pO1xyXG4gICAgICBsZXQgZGVmYXVsdFByb3BzID0ge1xyXG4gICAgICAgIGN1c3RvbVJlcXVlc3Q6IHRoaXMuY3VzdG9tUmVxdWVzdC5iaW5kKHRoaXMpLFxyXG4gICAgICAgIG11bHRpcGxlOiB0cnVlLFxyXG4gICAgICB9IGFzIElVcGxvYWRQcm9wcztcclxuICAgICAgaWYgKGZpbGVDYXJkKSB7XHJcbiAgICAgICAgZGVmYXVsdFByb3BzID0ge1xyXG4gICAgICAgICAgLi4uZGVmYXVsdFByb3BzLFxyXG4gICAgICAgICAgaXRlbVJlbmRlcjogKG9yaWdpbk5vZGUsIGZpbGU6IGFueSwgY3VyckZpbGVMaXN0KSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IG5hbWUgPSBmaWxlLm5hbWUgfHwgZmlsZS5maWxlTmFtZTtcclxuICAgICAgICAgICAgY29uc3QgbmFtZXMgPSBuYW1lPy5zcGxpdChcIi5cIik7XHJcbiAgICAgICAgICAgIGNvbnN0IHN1ZmZpeCA9IG5hbWVzID8gbmFtZXNbbmFtZXMubGVuZ3RoIC0gMV0gOiBcIlwiO1xyXG4gICAgICAgICAgICByZXR1cm4gKFxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtnZXRMZXNzKHN0eWxlcywgXCJmaWxlLWl0ZW1cIil9PlxyXG4gICAgICAgICAgICAgICAgPGRpdlxyXG4gICAgICAgICAgICAgICAgICBjbGFzc05hbWU9e2NscyhnZXRMZXNzKHN0eWxlcywgXCJjb250ZW50XCIpLCB7XHJcbiAgICAgICAgICAgICAgICAgICAgW2dldExlc3Moc3R5bGVzLCBcImNvbnRlbnRfZXJyb3JcIildOiBmaWxlLnN0YXR1cyA9PSBcImVycm9yXCIsXHJcbiAgICAgICAgICAgICAgICAgIH0pfVxyXG4gICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17Z2V0TGVzcyhzdHlsZXMsIFwibWFyay1waWN0dXJlXCIpfT5cclxuICAgICAgICAgICAgICAgICAgICA8RmlsZUljb24gc3VmZml4PXtzdWZmaXh9IGZpbGVJZD17ZmlsZS5maWxlSWR9IC8+XHJcbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17Z2V0TGVzcyhzdHlsZXMsIFwibmFtZVwiKX0+XHJcbiAgICAgICAgICAgICAgICAgICAge2ZpbGUubmFtZSB8fCBmaWxlLmZpbGVOYW1lfVxyXG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9e2dldExlc3Moc3R5bGVzLCBcImljb25cIil9PlxyXG4gICAgICAgICAgICAgICAgICAgIHtzaG93VXBsb2FkTGlzdC5zaG93UHJldmlld0ljb24gJiZcclxuICAgICAgICAgICAgICAgICAgICAgIGZpbGUuc3RhdHVzID09IFwiZG9uZVwiICYmIChcclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLnByb3BzLm9uUHJldmlldykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnByb3BzLm9uUHJldmlldyhmaWxlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZXZpZXdEb2N1bWVudChmaWxlLmZpbGVJZCwgcmVxdWVzdENvbmZpZyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICBzdHlsZT17eyBjdXJzb3I6IFwicG9pbnRlclwiIH19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICB7c2hvd1VwbG9hZExpc3QuZG93bmxvYWRJY29uID8gKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2hvd1VwbG9hZExpc3QuZG93bmxvYWRJY29uXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKSA6IChcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxFeWVPdXRsaW5lZCAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICl9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgKX1cclxuICAgICAgICAgICAgICAgICAgICB7c2hvd1VwbG9hZExpc3Quc2hvd0Rvd25sb2FkSWNvbiAmJlxyXG4gICAgICAgICAgICAgICAgICAgICAgZmlsZS5zdGF0dXMgPT0gXCJkb25lXCIgJiYgKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMucHJvcHMub25Eb3dubG9hZCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnByb3BzLm9uRG93bmxvYWQoZmlsZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb3dubG9hZChmaWxlLmZpbGVJZCwgdHJ1ZSwgcmVxdWVzdENvbmZpZyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICBzdHlsZT17eyBjdXJzb3I6IFwicG9pbnRlclwiIH19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICB7c2hvd1VwbG9hZExpc3QuZG93bmxvYWRJY29uID8gKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2hvd1VwbG9hZExpc3QuZG93bmxvYWRJY29uXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKSA6IChcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxEb3dubG9hZE91dGxpbmVkIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICApfVxyXG4gICAgICAgICAgICAgICAgICAgIHtzaG93VXBsb2FkTGlzdC5zaG93UmVtb3ZlSWNvbiAmJiAoXHJcbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5wcm9wcy5vblJlbW92ZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5wcm9wcy5vblJlbW92ZShmaWxlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5vbkRlbGV0ZShmaWxlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlPXt7IGN1cnNvcjogXCJwb2ludGVyXCIgfX1cclxuICAgICAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICAgICAge3Nob3dVcGxvYWRMaXN0LmRvd25sb2FkSWNvbiA/IChcclxuICAgICAgICAgICAgICAgICAgICAgICAgICBzaG93VXBsb2FkTGlzdC5kb3dubG9hZEljb25cclxuICAgICAgICAgICAgICAgICAgICAgICAgKSA6IChcclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8RGVsZXRlT3V0bGluZWQgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgKX1cclxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICl9XHJcbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICB7ZmlsZS5zdGF0dXMgPT0gXCJ1cGxvYWRpbmdcIiAmJiAoXHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtnZXRMZXNzKHN0eWxlcywgXCJwcm9jZXNzXCIpfT5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9e2dldExlc3Moc3R5bGVzLCBcInBlcmNlbnRcIil9XHJcbiAgICAgICAgICAgICAgICAgICAgICBzdHlsZT17eyB3aWR0aDogZmlsZS5wZXJjZW50ICsgXCIlXCIgfX1cclxuICAgICAgICAgICAgICAgICAgICA+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgKX1cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgfTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBkZWZhdWx0UHJvcHMgPSB7XHJcbiAgICAgICAgICAuLi5kZWZhdWx0UHJvcHMsXHJcbiAgICAgICAgICBvbkRvd25sb2FkOiAoZmlsZTogYW55KSA9PiB7XHJcbiAgICAgICAgICAgIGRvd25sb2FkKGZpbGUuZmlsZUlkLCB0cnVlLCByZXF1ZXN0Q29uZmlnKTtcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBvblJlbW92ZTogKGZpbGUpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5vbkRlbGV0ZShmaWxlKTtcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBvblByZXZpZXc6IChmaWxlOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgaWYgKGZpbGU/LmZpbGVJZCkge1xyXG4gICAgICAgICAgICAgIHByZXZpZXdEb2N1bWVudChmaWxlLmZpbGVJZCwgcmVxdWVzdENvbmZpZyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBzaG93VXBsb2FkTGlzdDogeyAuLi5zaG93VXBsb2FkTGlzdCB9LFxyXG4gICAgICAgIH07XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIChcclxuICAgICAgICA8PlxyXG4gICAgICAgICAgPENvbXBvbmVudFxyXG4gICAgICAgICAgICB7Li4uZGVmYXVsdFByb3BzfVxyXG4gICAgICAgICAgICB7Li4ubmV3cHJvcHN9XHJcbiAgICAgICAgICAgIGJlZm9yZVVwbG9hZD17dGhpcy5iZWZvcmVVcGxvYWQuYmluZCh0aGlzKX1cclxuICAgICAgICAgICAgZmlsZUxpc3Q9e3RoaXMuc3RhdGUuZmlsZUxpc3R9XHJcbiAgICAgICAgICAvPlxyXG4gICAgICAgIDwvPlxyXG4gICAgICApO1xyXG4gICAgfVxyXG4gIH07XHJcbn07XHJcblxyXG5jb25zdCBOc2NVcGxvYWQ6IGFueSA9IHdpdGhDdXN0b21VcGxvYWQoVXBsb2FkKTtcclxuLy8gLy8g5L2/55SoIHdpdGhDdXN0b21VcGxvYWQg5bCB6KOFIFVwbG9hZC5EcmFnZ2VyIOe7hOS7tlxyXG5jb25zdCBOc2NVcGxvYWREcmFnZ2VyID0gd2l0aEN1c3RvbVVwbG9hZChVcGxvYWQuRHJhZ2dlcik7XHJcbk5zY1VwbG9hZC5EcmFnZ2VyID0gTnNjVXBsb2FkRHJhZ2dlcjtcclxuZXhwb3J0IGRlZmF1bHQgTnNjVXBsb2FkO1xyXG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7O0FBQUEsT0FBTyxLQUFLQSxLQUFLLE1BQU0sT0FBTztBQUU5QixPQUFPQyxJQUFJLE1BQU0sVUFBVTtBQUMzQixPQUFPQyxPQUFPLE1BQU0sWUFBWTtBQUNoQyxPQUFPQyxJQUFJLE1BQU0sU0FBUztBQUMxQixTQUFTQyxPQUFPLFFBQVEsYUFBYTtBQUNyQyxPQUFPQyxNQUFNLE1BQU0sY0FBYztBQUNqQyxPQUFPQyxHQUFHLE1BQU0sWUFBWTtBQUM1QixPQUFPQyxRQUFRLE1BQU0sb0JBQW9CO0FBQ3pDLFNBQ0VDLGNBQWMsRUFDZEMsZ0JBQWdCLEVBQ2hCQyxXQUFXLFFBQ04sbUJBQW1CO0FBQzFCLE1BQU07RUFBRUMsTUFBTTtFQUFFQyxRQUFRO0VBQUVDLGVBQWU7RUFBRUM7QUFBYSxDQUFDLEdBQUdiLElBQUk7QUFlaEUsTUFBTWMsZ0JBQWdCLEdBQUlDLFNBQVMsSUFBSztFQUN0QztFQUNBLE9BQU8sY0FBY2hCLEtBQUssQ0FBQ2lCLGFBQWEsQ0FBb0I7SUFBQUMsWUFBQTtNQUFBLFNBQUFDLFNBQUE7TUFBQUMsZUFBQSxnQkFDbEQ7UUFDTkMsUUFBUSxFQUFFLEVBQUU7UUFDWkMsTUFBTSxFQUFFLEVBQUU7UUFDVkMsYUFBYSxFQUFFLEVBQUU7UUFDakJDLFNBQVMsRUFBRTtNQUNiLENBQUM7TUFBQUosZUFBQSx3QkFDZSxDQUFDO01BQUFBLGVBQUEscUJBQ0osQ0FBQztNQUFBQSxlQUFBLHdCQUNFLEVBQUU7TUFBQUEsZUFBQSxxQkFDTCxDQUFDLENBQUM7TUFBQUEsZUFBQSx3QkFtTUMsTUFBT0ssT0FBTyxJQUFLO1FBQ2pDLE1BQU14QixJQUFJLEdBQUd3QixPQUFPLENBQUN4QixJQUFJO1FBQ3pCLE1BQU07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
|