Sanakey
2021-04-30 8724a444c8a1d09dc8f9efd005e8443aad8df1ab
提交 | 用户 | age
f9ad6c 1 "use strict";
S 2 var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3     return new (P || (P = Promise))(function (resolve, reject) {
4         function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
5         function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
6         function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); }
7         step((generator = generator.apply(thisArg, _arguments || [])).next());
8     });
9 };
10 var __generator = (this && this.__generator) || function (thisArg, body) {
11     var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
12     return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
13     function verb(n) { return function (v) { return step([n, v]); }; }
14     function step(op) {
15         if (f) throw new TypeError("Generator is already executing.");
16         while (_) try {
17             if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
18             if (y = 0, t) op = [op[0] & 2, t.value];
19             switch (op[0]) {
20                 case 0: case 1: t = op; break;
21                 case 4: _.label++; return { value: op[1], done: false };
22                 case 5: _.label++; y = op[1]; op = [0]; continue;
23                 case 7: op = _.ops.pop(); _.trys.pop(); continue;
24                 default:
25                     if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
26                     if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
27                     if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
28                     if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
29                     if (t[2]) _.ops.pop();
30                     _.trys.pop(); continue;
31             }
32             op = body.call(thisArg, _);
33         } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
34         if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
35     }
36 };
37 Component({
38     options: {
39         addGlobalClass: true,
40         multipleSlots: true
41     },
42     properties: {
8724a4 43         liveRoom: {
S 44             type: Object,
45             value: {},
46             observer: function (newVal) {
47                 console.log('监听liveRoom的newVal', newVal);
48                 if (JSON.stringify(newVal) != '{}') {
49                     this.setData({
50                         isLive: true
51                     });
52                 }
53             }
54         },
f9ad6c 55         detail: {
S 56             type: Object,
57             value: {},
58             observer: function (newVal) {
59                 console.log('监听detail的newVal', newVal);
60                 if (JSON.stringify(newVal) != '{}') {
61                     this.getQrCode();
62                 }
63             }
64         },
65         sellerList: {
66             type: Array,
67             value: []
68         },
69     },
70     data: {
71         imgDraw: {},
72         sharePath: '',
73         visible: false,
8724a4 74         qrCodeUrl: '',
S 75         isLive: false
f9ad6c 76     },
S 77     lifetimes: {
78         ready: function () {
79             return __awaiter(this, void 0, void 0, function () {
80                 return __generator(this, function (_a) {
81                     return [2];
82                 });
83             });
84         }
85     },
86     pageLifetimes: {
87         show: function () {
88         },
89         hide: function () {
90         }
91     },
92     methods: {
8724a4 93         getLiveRoomQrCode: function () {
S 94             return __awaiter(this, void 0, void 0, function () {
95                 var roomid, _a, error, result;
96                 return __generator(this, function (_b) {
97                     switch (_b.label) {
98                         case 0:
99                             roomid = this.data.liveRoom.RoomId;
100                             console.log(roomid);
101                             return [4, wx.$utils.to(wx.$http.request({
102                                     url: "/shopping/live/getSharedCode.do",
103                                     data: {
104                                         roomid: roomid
105                                     }
106                                 }))];
107                         case 1:
108                             _a = _b.sent(), error = _a[0], result = _a[1];
109                             if (error) {
110                                 console.log(error);
111                                 wx.showToast({
112                                     title: '获取二维码失败,请稍后再试',
113                                     icon: 'none',
114                                 });
115                                 return [2, false];
116                             }
117                             console.log(result);
118                             this.setData({
119                                 qrCodeUrl: result.cdnUrl
120                             });
121                             return [2, true];
122                     }
123                 });
124             });
125         },
f9ad6c 126         getQrCode: function () {
S 127             return __awaiter(this, void 0, void 0, function () {
128                 var _a, error, result;
129                 return __generator(this, function (_b) {
130                     switch (_b.label) {
131                         case 0: return [4, wx.$utils.to(wx.$http.request({
132                                 url: "/shopping/poster/getQrCodeForPoster.do",
133                                 data: {
134                                     QrCodeType: 80,
135                                     doccode: this.data.detail.doccode,
136                                     RefOpenId: wx.globalData.FromOpenId
137                                 }
138                             }))];
139                         case 1:
140                             _a = _b.sent(), error = _a[0], result = _a[1];
141                             if (error) {
142                                 console.log(error);
143                                 return [2];
144                             }
145                             console.log(result);
146                             this.setData({
147                                 qrCodeUrl: result.QrCode
148                             });
149                             return [2];
150                     }
151                 });
152             });
153         },
154         handleClose: function () {
155             this.setData({
156                 visible: false
157             });
158             this.triggerEvent('close');
159         },
8724a4 160         clearPoster: function () {
f9ad6c 161             this.setData({
8724a4 162                 sharePath: ''
f9ad6c 163             });
8724a4 164         },
S 165         drawPic: function () {
166             return __awaiter(this, void 0, void 0, function () {
167                 return __generator(this, function (_a) {
168                     switch (_a.label) {
169                         case 0:
170                             if (this.data.sharePath) {
171                                 this.setData({
172                                     visible: true
173                                 });
174                                 this.triggerEvent('initData');
175                                 return [2];
176                             }
177                             if (!this.data.isLive) return [3, 2];
178                             return [4, this.getLiveRoomQrCode()];
179                         case 1:
180                             if (!(_a.sent()))
181                                 return [2];
182                             _a.label = 2;
183                         case 2:
184                             if (!this.data.qrCodeUrl) {
185                                 wx.showToast({
186                                     title: '获取二维码失败,请稍后再试',
187                                     icon: 'none',
188                                 });
189                                 return [2];
190                             }
191                             wx.showLoading({
192                                 title: '生成中'
193                             });
194                             this.setData({
195                                 imgDraw: this.getImgDraw()
196                             });
197                             return [2];
198                     }
199                 });
200             });
201         },
202         getImgDraw: function () {
203             var _a = this.data, detail = _a.detail, liveRoom = _a.liveRoom, sellerList = _a.sellerList, qrCodeUrl = _a.qrCodeUrl;
204             var isLive = this.data.isLive;
205             console.log(detail, liveRoom, sellerList, qrCodeUrl, isLive);
206             var imgDraw = {
207                 width: '750rpx',
208                 height: '1334rpx',
209                 background: '#f5f5f5',
210                 views: [
211                     {
212                         "type": "image",
213                         "url": "/assets/images/poster-bg.png",
214                         "css": {
215                             "width": "750rpx",
216                             "height": "1334rpx",
217                             "top": "0px",
218                             "left": "0px",
219                             "rotate": "0",
220                         }
221                     },
222                     {
223                         type: 'image',
224                         url: isLive ? liveRoom.ShareImgUnidUrl : detail.coverImageUrl[0],
225                         css: {
226                             top: '10rpx',
227                             left: '10rpx',
228                             right: '10rpx',
229                             width: '730rpx',
230                             height: '480rpx',
231                             borderRadius: '16rpx'
232                         },
233                     },
234                     {
235                         type: 'image',
236                         url: (isLive ? liveRoom.AnchorImgUnidUrl : sellerList[0].sellerHeadimgurl) || '/assets/images/default-avatar.png',
237                         css: {
238                             top: '444rpx',
239                             left: '328rpx',
240                             width: '96rpx',
241                             height: '96rpx',
242                             borderWidth: '6rpx',
243                             borderColor: '#FFF',
244                             borderRadius: '96rpx'
245                         }
246                     },
247                     {
248                         type: 'text',
249                         text: (isLive ? liveRoom.AnchorName : sellerList[0].sellerName) || '昵称',
250                         css: {
251                             top: '572rpx',
252                             fontSize: '28rpx',
253                             left: '375rpx',
254                             align: 'center',
255                             color: '#3c3c3c'
256                         }
257                     },
258                     {
259                         type: 'text',
260                         text: "\u9080\u8BF7\u60A8\u53C2\u4E0E" + (isLive ? '直播' : '活动'),
261                         css: {
262                             top: '616rpx',
263                             left: '375rpx',
264                             align: 'center',
265                             fontSize: '28rpx',
266                             color: '#3c3c3c'
267                         }
268                     },
269                     {
270                         type: 'text',
271                         text: ((isLive ? liveRoom.RoomName : detail.title) || '活动标题') + " ",
272                         css: {
273                             top: '684rpx',
274                             left: '375rpx',
275                             maxLines: 1,
276                             align: 'center',
277                             fontWeight: 'bold',
278                             fontSize: '44rpx',
279                             color: '#3c3c3c'
280                         }
281                     },
282                     {
283                         type: 'text',
284                         text: "" + ((isLive ? '' : '¥' + detail.salesPrice) || ''),
285                         css: {
286                             top: '765rpx',
287                             left: '375rpx',
288                             maxLines: 1,
289                             align: 'center',
290                             fontWeight: 'bold',
291                             fontSize: '44rpx',
292                             color: '#f23232'
293                         }
294                     },
295                     {
296                         type: 'image',
297                         url: qrCodeUrl,
298                         css: {
299                             top: '970rpx',
300                             left: '390rpx',
301                             width: '300rpx',
302                             height: '300rpx'
303                         }
304                     },
305                     {
306                         type: 'text',
307                         text: "\u957F\u6309\u4E8C\u7EF4\u7801\u8BC6\u522B\u53C2\u4E0E",
308                         css: {
309                             top: '1100rpx',
310                             left: '55rpx',
311                             fontSize: '32rpx',
312                             color: '#3c3c3c'
313                         }
314                     },
315                 ]
316             };
317             return imgDraw;
f9ad6c 318         },
S 319         onImgErr: function () {
320             wx.hideLoading();
321             wx.showToast({
322                 title: '生成分享图失败,请刷新页面重试'
323             });
324         },
325         onImgOK: function (e) {
326             wx.hideLoading();
327             this.setData({
328                 sharePath: e.detail.path,
329                 visible: true,
330             });
331             this.triggerEvent('initData');
332         },
333         preventDefault: function () { },
334         handleSavePhoto: function () {
335             var _this = this;
336             wx.showLoading({
337                 title: '正在保存...',
338                 mask: true
339             });
340             wx.saveImageToPhotosAlbum({
341                 filePath: this.data.sharePath,
342                 success: function () {
343                     wx.showToast({
344                         title: '保存成功'
345                     });
346                     setTimeout(function () {
347                         _this.setData({
348                             visible: false
349                         });
350                         _this.triggerEvent('close');
351                     }, 300);
352                 },
353                 fail: function () {
354                     wx.getSetting({
355                         success: function (res) {
356                             var authSetting = res.authSetting;
357                             if (!authSetting['scope.writePhotosAlbum']) {
358                                 wx.showModal({
359                                     title: '提示',
360                                     content: '您未开启保存图片到相册的权限,请点击确定去开启权限!',
361                                     success: function (res) {
362                                         if (res.confirm) {
363                                             wx.openSetting();
364                                         }
365                                     }
366                                 });
367                             }
368                         }
369                     });
370                     setTimeout(function () {
371                         wx.hideLoading();
372                         _this.setData({
373                             visible: false
374                         });
375                         _this.triggerEvent('close');
376                     }, 300);
377                 }
378             });
379         }
380     }
381 });
8724a4 382 //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJpbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxTQUFTLENBQUM7SUFDUixPQUFPLEVBQUU7UUFDUCxjQUFjLEVBQUMsSUFBSTtRQUNuQixhQUFhLEVBQUUsSUFBSTtLQUNwQjtJQUNELFVBQVUsRUFBRTtRQUVWLFFBQVEsRUFBRTtZQUNSLElBQUksRUFBRSxNQUFNO1lBQ1osS0FBSyxFQUFFLEVBQUU7WUFDVCxRQUFRLFlBQUMsTUFBTTtnQkFDYixPQUFPLENBQUMsR0FBRyxDQUFDLG1CQUFtQixFQUFDLE1BQU0sQ0FBQyxDQUFDO2dCQUN4QyxJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLElBQUksSUFBSSxFQUFDO29CQUNqQyxJQUFJLENBQUMsT0FBTyxDQUFDO3dCQUNYLE1BQU0sRUFBQyxJQUFJO3FCQUNaLENBQUMsQ0FBQTtpQkFDSDtZQUNILENBQUM7U0FDRjtRQUNELE1BQU0sRUFBQztZQUNMLElBQUksRUFBRSxNQUFNO1lBQ1osS0FBSyxFQUFFLEVBQUU7WUFDVCxRQUFRLFlBQUMsTUFBTTtnQkFDYixPQUFPLENBQUMsR0FBRyxDQUFDLGlCQUFpQixFQUFDLE1BQU0sQ0FBQyxDQUFDO2dCQUN0QyxJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLElBQUksSUFBSSxFQUFDO29CQUNqQyxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUE7aUJBQ2pCO1lBQ0gsQ0FBQztTQUNGO1FBQ0QsVUFBVSxFQUFDO1lBQ1QsSUFBSSxFQUFFLEtBQUs7WUFDWCxLQUFLLEVBQUUsRUFBRTtTQUNWO0tBTUY7SUFDRCxJQUFJLEVBQUU7UUFDSixPQUFPLEVBQUUsRUFBRTtRQUNYLFNBQVMsRUFBRSxFQUFFO1FBQ2IsT0FBTyxFQUFFLEtBQUs7UUFDZCxTQUFTLEVBQUMsRUFBRTtRQUNaLE1BQU0s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QkFDZixDQUFDLENBQUE7d0JBQ0YsS0FBSSxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUMsQ0FBQTtvQkFDNUIsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFBO2dCQUNULENBQUM7Z0JBQ0QsSUFBSSxFQUFFO29CQUNKLEVBQUUsQ0FBQyxVQUFVLENBQUM7d0JBQ1osT0FBTyxFQUFFLFVBQUEsR0FBRzs0QkFDVixJQUFJLFdBQVcsR0FBRyxHQUFHLENBQUMsV0FBVyxDQUFBOzRCQUNqQyxJQUFJLENBQUMsV0FBVyxDQUFDLHdCQUF3QixDQUFDLEVBQUU7Z0NBQzFDLEVBQUUsQ0FBQyxTQUFTLENBQUM7b0NBQ1gsS0FBSyxFQUFFLElBQUk7b0NBQ1gsT0FBTyxFQUFFLDRCQUE0QjtvQ0FDckMsT0FBTyxZQUFDLEdBQUc7d0NBQ1QsSUFBSSxHQUFHLENBQUMsT0FBTyxFQUFFOzRDQUNmLEVBQUUsQ0FBQyxXQUFXLEVBQUUsQ0FBQTt5Q0FDakI7b0NBQ0gsQ0FBQztpQ0FDRixDQUFDLENBQUE7NkJBQ0g7d0JBQ0gsQ0FBQztxQkFDRixDQUFDLENBQUE7b0JBQ0YsVUFBVSxDQUFDO3dCQUNULEVBQUUsQ0FBQyxXQUFXLEVBQUUsQ0FBQTt3QkFDaEIsS0FBSSxDQUFDLE9BQU8sQ0FBQzs0QkFDWCxPQUFPLEVBQUUsS0FBSzt5QkFDZixDQUFDLENBQUE7d0JBQ0YsS0FBSSxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUMsQ0FBQTtvQkFDNUIsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFBO2dCQUNULENBQUM7YUFDRixDQUFDLENBQUE7UUFDSixDQUFDO0tBQ0Y7Q0FDRixDQUFDLENBQUEiLCJzb3VyY2VzQ29udGVudCI6WyJDb21wb25lbnQoe1xyXG4gIG9wdGlvbnM6IHtcclxuICAgIGFkZEdsb2JhbENsYXNzOnRydWUsXHJcbiAgICBtdWx0aXBsZVNsb3RzOiB0cnVlIC8vIOWcqOe7hOS7tuWumuS5ieaXtueahOmAiemhueS4reWQr+eUqOWkmnNsb3TmlK/mjIFcclxuICB9LFxyXG4gIHByb3BlcnRpZXM6IHtcclxuICAgIC8v5bGe5oCn5YC85Y+v5Lul5Zyo57uE5Lu25L2/55So5pe25oyH5a6aXHJcbiAgICBsaXZlUm9vbToge1xyXG4gICAgICB0eXBlOiBPYmplY3QsXHJcbiAgICAgIHZhbHVlOiB7fSxcclxuICAgICAgb2JzZXJ2ZXIobmV3VmFsKSB7XHJcbiAgICAgICAgY29uc29sZS5sb2coJ+ebkeWQrGxpdmVSb29t55qEbmV3VmFsJyxuZXdWYWwpO1xyXG4gICAgICAgIGlmIChKU09OLnN0cmluZ2lmeShuZXdWYWwpICE9ICd7fScpe1xyXG4gICAgICAgICAgdGhpcy5zZXREYXRhKHtcclxuICAgICAgICAgICAgaXNMaXZlOnRydWVcclxuICAgICAgICAgIH0pXHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9LFxyXG4gICAgZGV0YWlsOntcclxuICAgICAgdHlwZTogT2JqZWN0LFxyXG4gICAgICB2YWx1ZToge30sXHJcbiAgICAgIG9ic2VydmVyKG5ld1ZhbCkge1xyXG4gICAgICAgIGNvbnNvbGUubG9nKCfnm5HlkKxkZXRhaWznmoRuZXdWYWwnLG5ld1ZhbCk7XHJcbiAgICAgICAgaWYgKEpTT04uc3RyaW5naWZ5KG5ld1ZhbCkgIT0gJ3t9Jyl7XHJcbiAgICAgICAgICB0aGlzLmdldFFyQ29kZSgpXHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9LFxyXG4gICAgc2VsbGVyTGlzdDp7XHJcbiAgICAgIHR5cGU6IEFycmF5LFxyXG4gICAgICB2YWx1ZTogW11cclxuICAgIH0sXHJcblxyXG4gICAgLy8gdmlzaWJsZToge1xyXG4gICAgLy8gICB0eXBlOiBCb29sZWFuLFxyXG4gICAgLy8gICB2YWx1ZTogZmFsc2UsXHJcbiAgICAvLyB9XHJcbiAgfSxcclxuICBkYXRhOiB7XHJcbiAgICBpbWdEcmF3OiB7fSwgLy/nu5jliLblm77niYfnmoTlpKflr7nosaFcclxuICAgIHNoYXJlUGF0aDogJycsIC8v55Sf5oiQ55qE5YiG5Lqr5Zu+XHJcbiAgICB2aXNpYmxlOiBmYWxzZSxcclxuICAgIHFyQ29kZVVybDonJyxcclxuICAgIGlzTGl2ZTpmYWxzZSAvL+aYr+WQpuebtOaSrVxyXG4gIH0sXHJcbiAgbGlmZXRpbWVzOntcclxuICAgIGFzeW5jIHJlYWR5KCl7XHJcblxyXG4gICAgfVxyXG4gIH0sXHJcbiAgcGFnZUxpZmV0aW1lczoge1xyXG4gICAgc2hvdzogZnVuY3Rpb24oKSB7XHJcbiAgICAgIC8vIOmhtemdouiiq+WxleekulxyXG5cclxuICAgIH0sXHJcbiAgICBoaWRlKCkge1xyXG5cclxuICAgIH1cclxuICB9LFxyXG4gIG1ldGhvZHM6IHtcclxuICAgIGFzeW5jIGdldExpdmVSb29tUXJDb2RlKCl7XHJcbiAgICAgIGxldCByb29taWQgPSB0aGlzLmRhdGEubGl2ZVJvb20uUm9vbUlkO1xyXG4gICAgICBjb25zb2xlLmxvZyhyb29taWQpO1xyXG4gICAgICBsZXQgW2Vycm9yLCByZXN1bHRdID0gYXdhaXQgd3guJHV0aWxzLnRvKFxyXG4gICAgICAgIHd4LiRodHRwLnJlcXVlc3Qoe1xyXG4gICAgICAgICAgdXJsOmAvc2hvcHBpbmcvbGl2ZS9nZXRTaGFyZWRDb2RlLmRvYCxcclxuICAgICAgICAgIGRhdGE6e1xyXG4gICAgICAgICAgICByb29taWRcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KVxyXG4gICAgICApXHJcbiAgICAgIGlmIChlcnJvcil7XHJcbiAgICAgICAgY29uc29sZS5sb2coZXJyb3IpO1xyXG4gICAgICAgIHd4LnNob3dUb2FzdCh7XHJcbiAgICAgICAgICB0aXRsZTogJ+iOt+WPluS6jOe7tOeggeWksei0pe+8jOivt+eojeWQjuWGjeivlScsXHJcbiAgICAgICAgICBpY29uOidub25lJyxcclxuICAgICAgICB9KVxyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgfVxyXG4gICAgICBjb25zb2xlLmxvZyhyZXN1bHQpO1xyXG4gICAgICB0aGlzLnNldERhdGEoe1xyXG4gICAgICAgIHFyQ29kZVVybDpyZXN1bHQuY2RuVXJsXHJcbiAgICAgIH0pXHJcbiAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfSxcclxuICAgIGFzeW5jIGdldFFyQ29kZSgpe1xyXG4gICAgICBsZXQgW2Vycm9yLCByZXN1bHRdID0gYXdhaXQgd3guJHV0aWxzLnRvKFxyXG4gICAgICAgIHd4LiRodHRwLnJlcXVlc3Qoe1xyXG4gICAgICAgICAgdXJsOmAvc2hvcHBpbmcvcG9zdGVyL2dldFFyQ29kZUZvclBvc3Rlci5kb2AsXHJcbiAgICAgICAgICBkYXRhOntcclxuICAgICAgICAgICAgUXJDb2RlVHlwZTo4MCxcclxuICAgICAgICAgICAgZG9jY29kZTp0aGlzLmRhdGEuZGV0YWlsLmRvY2NvZGUsXHJcbiAgICAgICAgICAgIFJlZk9wZW5JZDp3eC5nbG9iYWxEYXRhLkZyb21PcGVuSWRcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KVxyXG4gICAgICApXHJcbiAgICAgIGlmIChlcnJvcil7XHJcbiAgICAgICAgY29uc29sZS5sb2coZXJyb3IpO1xyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG4gICAgICBjb25zb2xlLmxvZyhyZXN1bHQpO1xyXG4gICAgICB0aGlzLnNldERhdGEoe1xyXG4gICAgICAgIHFyQ29kZVVybDpyZXN1bHQuUXJDb2RlXHJcbiAgICAgIH0pXHJcbiAgICB9LFxyXG4gICAgaGFuZGxlQ2xvc2UoKSB7XHJcbiAgICAgIHRoaXMuc2V0RGF0YSh7XHJcbiAgICAgICAgdmlzaWJsZTogZmFsc2VcclxuICAgICAgfSlcclxuICAgICAgdGhpcy50cmlnZ2VyRXZlbnQoJ2Nsb3NlJylcclxuICAgIH0sXHJcbiAgICBjbGVhclBvc3RlcigpIHtcclxuICAgICAgdGhpcy5zZXREYXRhKHtcclxuICAgICAgICBzaGFyZVBhdGg6JydcclxuICAgICAgfSlcclxuICAgIH0sXHJcbiAgICBhc3luYyBkcmF3UGljKCkge1xyXG4gICAgICBpZiAodGhpcy5kYXRhLnNoYXJlUGF0aCkgeyAvL+WmguaenOW3sue7j+e7mOWItui/h+S6huacrOWcsOS/neWtmOacieWbvueJh+S4jemcgOimgemHjeaWsOe7mOWItlxyXG4gICAgICAgIHRoaXMuc2V0RGF0YSh7XHJcbiAgICAgICAgICB2aXNpYmxlOiB0cnVlXHJcbiAgICAgICAgfSlcclxuICAgICAgICB0aGlzLnRyaWdnZXJFdmVudCgnaW5pdERhdGEnKVxyXG4gICAgICAgIHJldHVyblxyXG4gICAgICB9XHJcbiAgICAgIGlmICh0aGlzLmRhdGEuaXNMaXZlKXtcclxuICAgICAgICBpZiAoIWF3YWl0IHRoaXMuZ2V0TGl2ZVJvb21RckNvZGUoKSkgcmV0dXJuO1xyXG4gICAgICB9XHJcbiAgICAgIGlmICghdGhpcy5kYXRhLnFyQ29kZVVybCkge1xyXG4gICAgICAgIHd4LnNob3dUb2FzdCh7XHJcbiAgICAgICAgICB0aXRsZTogJ+iOt+WPluS6jOe7tOeggeWksei0pe+8jOivt+eojeWQjuWGjeivlScsXHJcbiAgICAgICAgICBpY29uOidub25lJyxcclxuICAgICAgICB9KVxyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG4gICAgICB3eC5zaG93TG9hZGluZyh7XHJcbiAgICAgICAgdGl0bGU6ICfnlJ/miJDkuK0nXHJcbiAgICAgIH0pXHJcblxyXG4gICAgICB0aGlzLnNldERhdGEoe1xyXG4gICAgICAgIGltZ0RyYXc6IHRoaXMuZ2V0SW1nRHJhdygpXHJcbiAgICAgIH0pXHJcbiAgICB9LFxyXG4gICAgIGdldEltZ0RyYXcoKSB7XHJcbiAgICAgIGxldCB7ZGV0YWlsLGxpdmVSb29tLHNlbGxlckxpc3QscXJDb2RlVXJsfSA9IHRoaXMuZGF0YTtcclxuICAgICAgbGV0IGlzTGl2ZSA9IHRoaXMuZGF0YS5pc0xpdmU7XHJcbiAgICAgIGNvbnNvbGUubG9nKGRldGFpbCxsaXZlUm9vbSxzZWxsZXJMaXN0LHFyQ29kZVVybCxpc0xpdmUpO1xyXG4gICAgICBsZXQgaW1nRHJhdyA9IHtcclxuICAgICAgICB3aWR0aDogJzc1MHJweCcsXHJcbiAgICAgICAgaGVpZ2h0OiAnMTMzNHJweCcsXHJcbiAgICAgICAgYmFja2dyb3VuZDogJyNmNWY1ZjUnLFxyXG4gICAgICAgIHZpZXdzOiBbXHJcbiAgICAgICAgICB7XHJcbiAgICAgICAgICAgIFwidHlwZVwiOiBcImltYWdlXCIsXHJcbiAgICAgICAgICAgIFwidXJsXCI6IFwiL2Fzc2V0cy9pbWFnZXMvcG9zdGVyLWJnLnBuZ1wiLFxyXG4gICAgICAgICAgICBcImNzc1wiOiB7XHJcbiAgICAgICAgICAgICAgXCJ3aWR0aFwiOiBcIjc1MHJweFwiLFxyXG4gICAgICAgICAgICAgIFwiaGVpZ2h0XCI6IFwiMTMzNHJweFwiLFxyXG4gICAgICAgICAgICAgIFwidG9wXCI6IFwiMHB4XCIsXHJcbiAgICAgICAgICAgICAgXCJsZWZ0XCI6IFwiMHB4XCIsXHJcbiAgICAgICAgICAgICAgXCJyb3RhdGVcIjogXCIwXCIsXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICB7XHJcbiAgICAgICAgICAgIHR5cGU6ICdpbWFnZScsXHJcbiAgICAgICAgICAgIHVybDogaXNMaXZlP2xpdmVSb29tLlNoYXJlSW1nVW5pZFVybDpkZXRhaWwuY292ZXJJbWFnZVVybFswXSxcclxuICAgICAgICAgICAgY3NzOiB7XHJcbiAgICAgICAgICAgICAgdG9wOiAnMTBycHgnLFxyXG4gICAgICAgICAgICAgIGxlZnQ6ICcxMHJweCcsXHJcbiAgICAgICAgICAgICAgcmlnaHQ6ICcxMHJweCcsXHJcbiAgICAgICAgICAgICAgd2lkdGg6ICc3MzBycHgnLFxyXG4gICAgICAgICAgICAgIGhlaWdodDogJzQ4MHJweCcsXHJcbiAgICAgICAgICAgICAgYm9yZGVyUmFkaXVzOiAnMTZycHgnXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAge1xyXG4gICAgICAgICAgICB0eXBlOiAnaW1hZ2UnLFxyXG4gICAgICAgICAgICB1cmw6IChpc0xpdmU/bGl2ZVJvb20uQW5jaG9ySW1nVW5pZFVybDpzZWxsZXJMaXN0WzBdLnNlbGxlckhlYWRpbWd1cmwpIHx8ICcvYXNzZXRzL2ltYWdlcy9kZWZhdWx0LWF2YXRhci5wbmcnLFxyXG4gICAgICAgICAgICBjc3M6IHtcclxuICAgICAgICAgICAgICB0b3A6ICc0NDRycHgnLFxyXG4gICAgICAgICAgICAgIGxlZnQ6ICczMjhycHgnLFxyXG4gICAgICAgICAgICAgIHdpZHRoOiAnOTZycHgnLFxyXG4gICAgICAgICAgICAgIGhlaWdodDogJzk2cnB4JyxcclxuICAgICAgICAgICAgICBib3JkZXJXaWR0aDogJzZycHgnLFxyXG4gICAgICAgICAgICAgIGJvcmRlckNvbG9yOiAnI0ZGRicsXHJcbiAgICAgICAgICAgICAgYm9yZGVyUmFkaXVzOiAnOTZycHgnXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICB7XHJcbiAgICAgICAgICAgIHR5cGU6ICd0ZXh0JyxcclxuICAgICAgICAgICAgdGV4dDogKGlzTGl2ZT9saXZlUm9vbS5BbmNob3JOYW1lOiBzZWxsZXJMaXN0WzBdLnNlbGxlck5hbWUpIHx8ICfmmLXnp7AnLFxyXG4gICAgICAgICAgICBjc3M6IHtcclxuICAgICAgICAgICAgICB0b3A6ICc1NzJycHgnLFxyXG4gICAgICAgICAgICAgIGZvbnRTaXplOiAnMjhycHgnLFxyXG4gICAgICAgICAgICAgIGxlZnQ6ICczNzVycHgnLFxyXG4gICAgICAgICAgICAgIGFsaWduOiAnY2VudGVyJyxcclxuICAgICAgICAgICAgICBjb2xvcjogJyMzYzNjM2MnXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICB7XHJcbiAgICAgICAgICAgIHR5cGU6ICd0ZXh0JyxcclxuICAgICAgICAgICAgdGV4dDogYOmCgOivt+aCqOWPguS4jiR7KGlzTGl2ZT8n55u05pKtJzon5rS75YqoJyl9YCxcclxuICAgICAgICAgICAgY3NzOiB7XHJcbiAgICAgICAgICAgICAgdG9wOiAnNjE2cnB4JyxcclxuICAgICAgICAgICAgICBsZWZ0OiAnMzc1cnB4JyxcclxuICAgICAgICAgICAgICBhbGlnbjogJ2NlbnRlcicsXHJcbiAgICAgICAgICAgICAgZm9udFNpemU6ICcyOHJweCcsXHJcbiAgICAgICAgICAgICAgY29sb3I6ICcjM2MzYzNjJ1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAge1xyXG4gICAgICAgICAgICB0eXBlOiAndGV4dCcsXHJcbiAgICAgICAgICAgIHRleHQ6IGAkeyhpc0xpdmU/bGl2ZVJvb20uUm9vbU5hbWU6ZGV0YWlsLnRpdGxlKSB8fCAn5rS75Yqo5qCH6aKYJ30gYCxcclxuICAgICAgICAgICAgY3NzOiB7XHJcbiAgICAgICAgICAgICAgdG9wOiAnNjg0cnB4JyxcclxuICAgICAgICAgICAgICBsZWZ0OiAnMzc1cnB4JyxcclxuICAgICAgICAgICAgICBtYXhMaW5lczogMSxcclxuICAgICAgICAgICAgICBhbGlnbjogJ2NlbnRlcicsXHJcbiAgICAgICAgICAgICAgZm9udFdlaWdodDogJ2JvbGQnLFxyXG4gICAgICAgICAgICAgIGZvbnRTaXplOiAnNDRycHgnLFxyXG4gICAgICAgICAgICAgIGNvbG9yOiAnIzNjM2MzYydcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIC8vIHtcclxuICAgICAgICAgIC8vICAgdHlwZTogJ3RleHQnLFxyXG4gICAgICAgICAgLy8gICB0ZXh0OiBg5rS75Yqo5Lu3IO+/pWAsXHJcbiAgICAgICAgICAvLyAgIGNzczoge1xyXG4gICAgICAgICAgLy8gICAgIHRvcDogJzc4MHJweCcsXHJcbiAgICAgICAgICAvLyAgICAgbGVmdDogJzI1MHJweCcsXHJcbiAgICAgICAgICAvLyAgICAgbWF4TGluZXM6IDEsXHJcbiAgICAgICAgICAvLyAgICAgYWxpZ246ICdjZW50ZXInLFxyXG4gICAgICAgICAgLy8gICAgIGZvbnRXZWlnaHQ6ICdib2xkJyxcclxuICAgICAgICAgIC8vICAgICBmb250U2l6ZTogJzI4cnB4JyxcclxuICAgICAgICAgIC8vICAgICBjb2xvcjogJyNmMjMyMzInXHJcbiAgICAgICAgICAvLyAgIH1cclxuICAgICAgICAgIC8vIH0sXHJcbiAgICAgICAgICB7XHJcbiAgICAgICAgICAgIHR5cGU6ICd0ZXh0JyxcclxuICAgICAgICAgICAgdGV4dDogYCR7KGlzTGl2ZT8nJzon77+lJytkZXRhaWwuc2FsZXNQcmljZSkgfHwgJyd9YCxcclxuICAgICAgICAgICAgY3NzOiB7XHJcbiAgICAgICAgICAgICAgdG9wOiAnNzY1cnB4JyxcclxuICAgICAgICAgICAgICBsZWZ0OiAnMzc1cnB4JyxcclxuICAgICAgICAgICAgICBtYXhMaW5lczogMSxcclxuICAgICAgICAgICAgICBhbGlnbjogJ2NlbnRlcicsXHJcbiAgICAgICAgICAgICAgZm9udFdlaWdodDogJ2JvbGQnLFxyXG4gICAgICAgICAgICAgIGZvbnRTaXplOiAnNDRycHgnLFxyXG4gICAgICAgICAgICAgIGNvbG9yOiAnI2YyMzIzMidcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIHtcclxuICAgICAgICAgICAgdHlwZTogJ2ltYWdlJyxcclxuICAgICAgICAgICAgdXJsOiBxckNvZGVVcmwsXHJcbiAgICAgICAgICAgIGNzczoge1xyXG4gICAgICAgICAgICAgIHRvcDogJzk3MHJweCcsXHJcbiAgICAgICAgICAgICAgbGVmdDogJzM5MHJweCcsXHJcbiAgICAgICAgICAgICAgd2lkdGg6ICczMDBycHgnLFxyXG4gICAgICAgICAgICAgIGhlaWdodDogJzMwMHJweCdcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIHtcclxuICAgICAgICAgICAgdHlwZTogJ3RleHQnLFxyXG4gICAgICAgICAgICB0ZXh0OiBg6ZW/5oyJ5LqM57u056CB6K+G5Yir5Y+C5LiOYCxcclxuICAgICAgICAgICAgY3NzOiB7XHJcbiAgICAgICAgICAgICAgdG9wOiAnMTEwMHJweCcsXHJcbiAgICAgICAgICAgICAgbGVmdDogJzU1cnB4JyxcclxuICAgICAgICAgICAgICBmb250U2l6ZTogJzMycnB4JyxcclxuICAgICAgICAgICAgICBjb2xvcjogJyMzYzNjM2MnXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgXVxyXG4gICAgICB9O1xyXG4gICAgICByZXR1cm4gaW1nRHJhdztcclxuICAgIH0sXHJcbiAgICBvbkltZ0VycigpIHtcclxuICAgICAgd3guaGlkZUxvYWRpbmcoKVxyXG4gICAgICB3eC5zaG93VG9hc3Qoe1xyXG4gICAgICAgIHRpdGxlOiAn55Sf5oiQ5YiG5Lqr5Zu+5aSx6LSl77yM6K+35Yi35paw6aG16Z2i6YeN6K+VJ1xyXG4gICAgICB9KVxyXG4gICAgfSxcclxuICAgIG9uSW1nT0soZSkge1xyXG4gICAgICB3eC5oaWRlTG9hZGluZygpXHJcbiAgICAgIHRoaXMuc2V0RGF0YSh7XHJcbiAgICAgICAgc2hhcmVQYXRoOiBlLmRldGFpbC5wYXRoLFxyXG4gICAgICAgIHZpc2libGU6IHRydWUsXHJcbiAgICAgIH0pXHJcbiAgICAgIC8v6YCa55+l5aSW6YOo57uY5Yi25a6M5oiQ77yM6YeN572uaXNDYW5EcmF35Li6ZmFsc2VcclxuICAgICAgdGhpcy50cmlnZ2VyRXZlbnQoJ2luaXREYXRhJylcclxuICAgIH0sXHJcbiAgICBwcmV2ZW50RGVmYXVsdCgpIHsgfSxcclxuICAgIC8vIOS/neWtmOWbvueJh1xyXG4gICAgaGFuZGxlU2F2ZVBob3RvKCkge1xyXG4gICAgICB3eC5zaG93TG9hZGluZyh7XHJcbiAgICAgICAgdGl0bGU6ICfmraPlnKjkv53lrZguLi4nLFxyXG4gICAgICAgIG1hc2s6IHRydWVcclxuICAgICAgfSlcclxuICAgICAgd3guc2F2ZUltYWdlVG9QaG90b3NBbGJ1bSh7XHJcbiAgICAgICAgZmlsZVBhdGg6IHRoaXMuZGF0YS5zaGFyZVBhdGgsXHJcbiAgICAgICAgc3VjY2VzczogKCkgPT4ge1xyXG4gICAgICAgICAgd3guc2hvd1RvYXN0KHtcclxuICAgICAgICAgICAgdGl0bGU6ICfkv53lrZjmiJDlip8nXHJcbiAgICAgICAgICB9KVxyXG4gICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0RGF0YSh7XHJcbiAgICAgICAgICAgICAgdmlzaWJsZTogZmFsc2VcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgdGhpcy50cmlnZ2VyRXZlbnQoJ2Nsb3NlJylcclxuICAgICAgICAgIH0sIDMwMClcclxuICAgICAgICB9LFxyXG4gICAgICAgIGZhaWw6ICgpID0+IHtcclxuICAgICAgICAgIHd4LmdldFNldHRpbmcoe1xyXG4gICAgICAgICAgICBzdWNjZXNzOiByZXMgPT4ge1xyXG4gICAgICAgICAgICAgIGxldCBhdXRoU2V0dGluZyA9IHJlcy5hdXRoU2V0dGluZ1xyXG4gICAgICAgICAgICAgIGlmICghYXV0aFNldHRpbmdbJ3Njb3BlLndyaXRlUGhvdG9zQWxidW0nXSkge1xyXG4gICAgICAgICAgICAgICAgd3guc2hvd01vZGFsKHtcclxuICAgICAgICAgICAgICAgICAgdGl0bGU6ICfmj5DnpLonLFxyXG4gICAgICAgICAgICAgICAgICBjb250ZW50OiAn5oKo5pyq5byA5ZCv5L+d5a2Y5Zu+54mH5Yiw55u45YaM55qE5p2D6ZmQ77yM6K+354K55Ye756Gu5a6a5Y675byA5ZCv5p2D6ZmQ77yBJyxcclxuICAgICAgICAgICAgICAgICAgc3VjY2VzcyhyZXMpIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAocmVzLmNvbmZpcm0pIHtcclxuICAgICAgICAgICAgICAgICAgICAgIHd4Lm9wZW5TZXR0aW5nKClcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9KVxyXG4gICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgIHd4LmhpZGVMb2FkaW5nKClcclxuICAgICAgICAgICAgdGhpcy5zZXREYXRhKHtcclxuICAgICAgICAgICAgICB2aXNpYmxlOiBmYWxzZVxyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICB0aGlzLnRyaWdnZXJFdmVudCgnY2xvc2UnKVxyXG4gICAgICAgICAgfSwgMzAwKVxyXG4gICAgICAgIH1cclxuICAgICAgfSlcclxuICAgIH1cclxuICB9XHJcbn0pXHJcbiJdfQ==