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