tango-app-ui-manage-settings 3.7.40 → 3.7.41

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.
@@ -121,8 +121,12 @@ export class StoreTimeConfigurationComponent {
121
121
  }
122
122
  inputFile;
123
123
  onFileUpload(event) {
124
- const target = event.target;
125
- const file = event.target.files[0];
124
+ const input = event.target;
125
+ const file = input.files?.[0];
126
+ // Clear the input so choosing the same (corrected) file again still fires (change)
127
+ input.value = "";
128
+ if (!file)
129
+ return;
126
130
  const allowedExtensions = /\.(xls|xlsx|csv)$/i;
127
131
  const allowedTypes = [
128
132
  "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet",
@@ -132,60 +136,129 @@ export class StoreTimeConfigurationComponent {
132
136
  ];
133
137
  if (!allowedExtensions.test(file.name) || !allowedTypes.includes(file.type)) {
134
138
  this.ts.getErrorToast("Only .xls, .xlsx, or .csv files are allowed.");
135
- this.inputFile.nativeElement.value = "";
136
139
  return;
137
140
  }
138
- let isExcelFile = !!target.files[0].name.match(/(.xls|.xlsx)/);
139
- let error = [];
140
- let ValidationError = false;
141
- if (isExcelFile) {
142
- const reader = new FileReader();
143
- reader.readAsBinaryString(target.files[0]);
144
- reader.onload = (e) => {
145
- const bstr = e.target.result;
146
- const wb = XLSX.read(bstr, { type: 'binary' });
147
- const wsname = wb.SheetNames[0];
148
- const ws = wb.Sheets[wsname];
149
- const data = XLSX.utils.sheet_to_json(ws);
150
- // Validate and update storeListData
151
- this.processUploadedData(data);
152
- };
141
+ const isCsv = /\.csv$/i.test(file.name);
142
+ const reader = new FileReader();
143
+ reader.onerror = () => this.ts.getErrorToast("Unable to read the file. Please try again.");
144
+ reader.onload = (e) => {
145
+ let headers = [];
146
+ let data = [];
147
+ try {
148
+ const wb = XLSX.read(e.target.result, { type: isCsv ? 'string' : 'binary' });
149
+ const ws = wb.Sheets[wb.SheetNames[0]];
150
+ headers = XLSX.utils.sheet_to_json(ws, { header: 1 })[0] || [];
151
+ data = XLSX.utils.sheet_to_json(ws);
152
+ }
153
+ catch (err) {
154
+ this.ts.getErrorToast("Unable to read the file. Please upload the downloaded template.");
155
+ return;
156
+ }
157
+ this.processUploadedData(headers, data);
158
+ };
159
+ if (isCsv) {
160
+ reader.readAsText(file);
161
+ }
162
+ else {
163
+ reader.readAsBinaryString(file);
164
+ }
165
+ }
166
+ // Validate every uploaded row; the API is called only when the whole file is valid
167
+ processUploadedData(headers, data) {
168
+ const missingColumns = ['storeName', 'openTime', 'closeTime'].filter((col) => !headers.includes(col));
169
+ if (missingColumns.length) {
170
+ this.showUploadErrors([`Missing column(s): ${missingColumns.join(', ')}. Please use the downloaded template.`]);
171
+ return;
172
+ }
173
+ if (!data.length) {
174
+ this.ts.getErrorToast("No store data found in the file.");
175
+ return;
176
+ }
177
+ const errors = [];
178
+ const stores = data.map((row, i) => {
179
+ // __rowNum__ is the 0-based sheet row set by sheet_to_json; +1 gives the row number shown in Excel
180
+ const rowNo = (row.__rowNum__ ?? i + 1) + 1;
181
+ const storeName = String(row.storeName ?? '').trim();
182
+ const label = storeName ? `Row ${rowNo} (${storeName})` : `Row ${rowNo}`;
183
+ const openTime = this.convertExcelTime(row.openTime);
184
+ const closeTime = this.convertExcelTime(row.closeTime);
185
+ if (!storeName) {
186
+ errors.push(`Row ${rowNo}: Store name is missing.`);
187
+ }
188
+ if (!openTime) {
189
+ errors.push(this.invalidTimeMessage(label, 'Open time', row.openTime));
190
+ }
191
+ if (!closeTime) {
192
+ errors.push(this.invalidTimeMessage(label, 'Close time', row.closeTime));
193
+ }
194
+ if (openTime && closeTime && closeTime < openTime) {
195
+ errors.push(`${label}: Close time ${closeTime} is before open time ${openTime}.`);
196
+ }
197
+ return { storeName, openTime, closeTime };
198
+ });
199
+ if (errors.length) {
200
+ this.showUploadErrors(errors);
201
+ return;
202
+ }
203
+ this.saveStoreTimes(stores, () => this.bulkUploadModalRef?.close());
204
+ }
205
+ invalidTimeMessage(label, field, value) {
206
+ return value === undefined || String(value).trim() === ''
207
+ ? `${label}: ${field} is missing.`
208
+ : `${label}: ${field} "${value}" is not a valid time (use HH:mm).`;
209
+ }
210
+ showUploadErrors(errors) {
211
+ const maxShown = 5;
212
+ const lines = errors.slice(0, maxShown).map((err) => this.escapeHtml(err));
213
+ if (errors.length > maxShown) {
214
+ lines.push(`...and ${errors.length - maxShown} more`);
153
215
  }
216
+ this.ts.getErrorToast(`Upload failed: ${errors.length} error${errors.length > 1 ? 's' : ''} found<br>${lines.join('<br>')}`);
154
217
  }
155
- // Process uploaded data and update storeListData
156
- processUploadedData(data) {
157
- this.storeListData = data.map((row) => ({
158
- storeName: row.storeName || "Unknown Store",
159
- openTime: this.convertExcelTime(row.openTime),
160
- closeTime: this.convertExcelTime(row.closeTime),
161
- isEditing: false,
162
- showError: false
163
- }));
164
- this.onSubmit();
218
+ escapeHtml(value) {
219
+ const entities = { '&': '&amp;', '<': '&lt;', '>': '&gt;', '"': '&quot;', "'": '&#39;' };
220
+ return value.replace(/[&<>"']/g, (ch) => entities[ch]);
165
221
  }
222
+ // Returns HH:mm:ss, or null when the cell is blank or not a valid time
166
223
  convertExcelTime(value) {
167
- if (!value)
168
- return "00:00:00"; // Default if empty
169
224
  if (typeof value === "number") {
170
- // Excel stores time as fraction of a 24-hour day, so multiply by 24 to get hours
171
- let totalSeconds = Math.round(value * 24 * 60 * 60);
225
+ // Excel stores time as a fraction of a day; a whole number (e.g. 9) is a date, not a time
226
+ if (value < 0 || (Number.isInteger(value) && value !== 0))
227
+ return null;
228
+ let totalSeconds = Math.round((value % 1) * 24 * 60 * 60) % 86400;
172
229
  let hours = Math.floor(totalSeconds / 3600);
173
230
  let minutes = Math.floor((totalSeconds % 3600) / 60);
174
231
  let seconds = totalSeconds % 60;
175
232
  return this.pad(hours) + ":" + this.pad(minutes) + ":" + this.pad(seconds);
176
233
  }
177
- else if (typeof value === "string" && value.includes(":")) {
178
- return value.length === 5 ? value + ":00" : value; // Convert HH:mm → HH:mm:ss
234
+ if (typeof value === "string") {
235
+ // Accepts H:mm, HH:mm, HH:mm:ss and 12-hour values like "9:30 PM"
236
+ const match = value.trim().match(/^(\d{1,2}):(\d{2})(?::(\d{2}))?\s*([ap]m)?$/i);
237
+ if (!match)
238
+ return null;
239
+ let hours = Number(match[1]);
240
+ const minutes = Number(match[2]);
241
+ const seconds = Number(match[3] || 0);
242
+ const meridiem = match[4]?.toLowerCase();
243
+ if (meridiem) {
244
+ if (hours < 1 || hours > 12)
245
+ return null;
246
+ hours = (hours % 12) + (meridiem === 'pm' ? 12 : 0);
247
+ }
248
+ if (hours > 23 || minutes > 59 || seconds > 59)
249
+ return null;
250
+ return this.pad(hours) + ":" + this.pad(minutes) + ":" + this.pad(seconds);
179
251
  }
180
- return "00:00:00"; // Default if invalid
252
+ return null;
181
253
  }
182
254
  pad(num) {
183
255
  return num < 10 ? "0" + num : num.toString();
184
256
  }
185
257
  fileInput1;
186
258
  bulkUploadPopup;
259
+ bulkUploadModalRef;
187
260
  downloadTemplate() {
188
- const modalRef = this.modalService.open(this.bulkUploadPopup, {
261
+ this.bulkUploadModalRef = this.modalService.open(this.bulkUploadPopup, {
189
262
  centered: true,
190
263
  // size: "lg",
191
264
  scrollable: true,
@@ -239,9 +312,12 @@ export class StoreTimeConfigurationComponent {
239
312
  console.warn("Validation failed. API call stopped.");
240
313
  return;
241
314
  }
315
+ this.saveStoreTimes(this.storeListData);
316
+ }
317
+ saveStoreTimes(stores, onSaved) {
242
318
  let obj = {
243
319
  "clientId": this.clientData.clientId,
244
- "stores": this.storeListData.map((store) => ({
320
+ "stores": stores.map((store) => ({
245
321
  "storeName": store.storeName,
246
322
  "openTime": this.formatTime(store.openTime),
247
323
  "closeTime": this.formatTime(store.closeTime)
@@ -253,6 +329,10 @@ export class StoreTimeConfigurationComponent {
253
329
  this.ts.getSuccessToast('Store open and close time updated successfully');
254
330
  this.getData();
255
331
  this.isEditing = '';
332
+ onSaved?.();
333
+ }
334
+ else {
335
+ this.ts.getErrorToast(res?.message || 'Unable to update store open and close time');
256
336
  }
257
337
  }, error: (err) => {
258
338
  this.ts.getErrorToast(err?.error?.error ? err?.error?.error : err?.error?.message);
@@ -358,4 +438,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
358
438
  type: ViewChild,
359
439
  args: ['bulkUploadPopup']
360
440
  }] } });
361
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RvcmUtdGltZS1jb25maWd1cmF0aW9uLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3RhbmdvLW1hbmFnZS1zZXR0aW5ncy9zcmMvbGliL2NvbXBvbmVudHMvY29uZmlndXJhdGlvbnMvc3RvcmUtdGltZS1jb25maWd1cmF0aW9uL3N0b3JlLXRpbWUtY29uZmlndXJhdGlvbi5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90YW5nby1tYW5hZ2Utc2V0dGluZ3Mvc3JjL2xpYi9jb21wb25lbnRzL2NvbmZpZ3VyYXRpb25zL3N0b3JlLXRpbWUtY29uZmlndXJhdGlvbi9zdG9yZS10aW1lLWNvbmZpZ3VyYXRpb24uY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFxQixTQUFTLEVBQWMsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBR3BGLE9BQU8sS0FBSyxJQUFJLE1BQU0sTUFBTSxDQUFDO0FBRTdCLE9BQU8sRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sTUFBTSxDQUFDOzs7Ozs7OztBQU8xQyxNQUFNLE9BQU8sK0JBQStCO0lBU3hCO0lBQW1DO0lBQW9DO0lBQThCO0lBQXdCO0lBUC9JLFdBQVcsQ0FBSztJQUNoQixnQkFBZ0IsR0FBRSxLQUFLLENBQUM7SUFDeEIsVUFBVSxDQUFLO0lBQ2YsV0FBVyxHQUFLLEVBQUUsQ0FBQztJQUNuQixLQUFLLEdBQUMsRUFBRSxDQUFDO0lBQ1QsTUFBTSxHQUFDLENBQUMsQ0FBQztJQUNVLFFBQVEsR0FBRyxJQUFJLE9BQU8sRUFBRSxDQUFDO0lBQzlDLFlBQW9CLFlBQXlCLEVBQVUsU0FBMkIsRUFBUyxZQUFxQixFQUFTLEVBQWUsRUFBUyxFQUFvQjtRQUFqSixpQkFBWSxHQUFaLFlBQVksQ0FBYTtRQUFVLGNBQVMsR0FBVCxTQUFTLENBQWtCO1FB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U0FBUztzQkFBaEMsU0FBUzt1QkFBQyxXQUFXO2dCQXdFSixVQUFVO3NCQUE3QixTQUFTO3VCQUFDLE9BQU87Z0JBQ1ksZUFBZTtzQkFBNUMsU0FBUzt1QkFBQyxpQkFBaUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDaGFuZ2VEZXRlY3RvclJlZiwgQ29tcG9uZW50LCBFbGVtZW50UmVmLCBWaWV3Q2hpbGQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgTmdiTW9kYWwgfSBmcm9tICdAbmctYm9vdHN0cmFwL25nLWJvb3RzdHJhcCc7XHJcbmltcG9ydCB7IFRvYXN0U2VydmljZSB9IGZyb20gJ3RhbmdvLWFwcC11aS1zaGFyZWQnO1xyXG5pbXBvcnQgKiBhcyBYTFNYIGZyb20gJ3hsc3gnO1xyXG5pbXBvcnQgeyBDbGllbnRBcGlTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvY2xpZW50LWFwaS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgU3ViamVjdCwgdGFrZVVudGlsIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IEV4Y2VsU2VydmljZSB9IGZyb20gXCIuLi8uLi8uLi9zZXJ2aWNlcy9leGNlbC5zZXJ2aWNlXCI7IFxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2xpYi1zdG9yZS10aW1lLWNvbmZpZ3VyYXRpb24nLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9zdG9yZS10aW1lLWNvbmZpZ3VyYXRpb24uY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsOiAnLi9zdG9yZS10aW1lLWNvbmZpZ3VyYXRpb24uY29tcG9uZW50LnNjc3MnXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBTdG9yZVRpbWVDb25maWd1cmF0aW9uQ29tcG9uZW50IHtcclxuXHJcbiAgc2VhcmNoVmFsdWU6YW55O1xyXG4gIGRvd25sb2FkRHJvcERvd24gPWZhbHNlO1xyXG4gIGNsaWVudERhdGE6YW55O1xyXG4gIHRhYmxlT2JqZWN0OmFueT17fTtcclxuICBsaW1pdD0xMDtcclxuICBvZmZzZXQ9MTtcclxuICAgIHByaXZhdGUgcmVhZG9ubHkgZGVzdHJveSQgPSBuZXcgU3ViamVjdCgpO1xyXG5jb25zdHJ1Y3Rvcihwcml2YXRlIGV4Y2VsU2VydmljZTpFeGNlbFNlcnZpY2UsIHByaXZhdGUgY2xpZW50QXBpOiBDbGllbnRBcGlTZXJ2aWNlLHByaXZhdGUgbW9kYWxTZXJ2aWNlOk5nYk1vZGFsLHByaXZhdGUgdHM6VG9hc3RTZXJ2aWNlLHByaXZhdGUgY2Q6Q2hhbmdlRGV0ZWN0b3JSZWYpe1xyXG4gICB0aGlzLmNsaWVudEFwaS5jbGllbnREYXRhLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKS5zdWJzY3JpYmUoKGUpID0+IHtcclxuICAgICAgaWYgKGUpIHtcclxuICAgICAgICB0aGlzLmNsaWVudERhdGEgPSBlO1xyXG4gICAgICAgIGxldCBvYmogPXtcclxuICAgICAgICAgIGNsaWVudElkOnRoaXMuY2xpZW50RGF0YT8uY2xpZW50SWQsXHJcbiAgICAgICAgICBsaW1pdDp0aGlzLmxpbWl0LFxyXG4gICAgICAgICAgb2Zmc2V0OnRoaXMub2Zmc2V0LFxyXG4gICAgICAgICAgc29ydE9yZGVyOnRoaXMuc29ydE9yZGVyLFxyXG4gICAgICAgICAgc29ydEJ5OnRoaXMuc29ydGVkQ29sdW1uLFxyXG4gICAgICAgICAgc2VhcmNoVmFsdWU6dGhpcy5zZWFyY2hWYWx1ZVxyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLnRhYmxlT2JqZWN0ID1vYmo7XHJcbiAgICAgdGhpcy5nZXREYXRhKCk7XHJcbiAgICAgIH1cclxuICAgIH0pXHJcbn1cclxuXHJcbnN0b3JlTGlzdERhdGE6YW55O1xyXG50b3RhbENvdW50OjA7XHJcbmxvYWRpbmcgPXRydWU7XHJcbm5vRGF0YSA9ZmFsc2U7XHJcbmdldERhdGEoKXtcclxuICB0aGlzLmxvYWRpbmcgPXRydWU7XHJcbiAgdGhpcy5ub0RhdGEgPWZhbHNlO1xyXG4gIHRoaXMuY2xpZW50QXBpLmdldE9wZW5DbG9zZUxpc3QodGhpcy50YWJsZU9iamVjdCkucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpLnN1YnNjcmliZSh7XHJcbiAgICBuZXh0OiAocmVzKSA9PiB7XHJcbiAgICAgIGlmKHJlcyAmJiByZXMuY29kZSA9PTIwMCl7XHJcbiAgICAgICAgdGhpcy5zdG9yZUxpc3REYXRhID0gcmVzPy5kYXRhPy5yZXN1bHQ7XHJcbiAgICAgIHRoaXMudG90YWxDb3VudCA9IHJlcz8uZGF0YT8uY291bnQ7XHJcbiAgICAgIHRoaXMubG9hZGluZyA9ZmFsc2U7XHJcbiAgICAgIHRoaXMubm9EYXRhID1mYWxzZTtcclxuICAgICAgdGhpcy5zZXRQYWdpbmF0aW9uU2l6ZXMoKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLnN0b3JlTGlzdERhdGEgPVtdO1xyXG4gICAgICAgIHRoaXMudG90YWxDb3VudCA9MDtcclxuICAgICAgICB0aGlzLmxvYWRpbmcgPWZhbHNlO1xyXG4gICAgICAgIHRoaXMubm9EYXRhID10cnVlO1xyXG4gICAgICB9XHJcbiAgICB9LFxyXG4gICAgZXJyb3I6IChlcnIpPT57XHJcbiAgICAgIHRoaXMuc3RvcmVMaXN0RGF0YSA9W107XHJcbiAgICAgIHRoaXMudG90YWxDb3VudCA9MDtcclxuICAgICAgdGhpcy5sb2FkaW5nID1mYWxzZTtcclxuICAgICAgdGhpcy5ub0RhdGEgPXRydWU7XHJcbiAgICB9XHJcbiAgfSlcclxuICBcclxufVxyXG5zb3J0ZWRDb2x1bW46IGFueTtcclxuc29ydE9yZGVyOiBhbnk7XHJcbm9uU29ydChjb2x1bW46IHN0cmluZykge1xyXG4gIGlmICh0aGlzLnNvcnRlZENvbHVtbiA9PT0gY29sdW1uKSB7XHJcbiAgICB0aGlzLnNvcnRPcmRlciA9IHRoaXMuc29ydE9yZGVyID09PSAxID8gLTEgOiAxO1xyXG4gIH0gZWxzZSB7XHJcbiAgICB0aGlzLnNvcnRlZENvbHVtbiA9IGNvbHVtbjtcclxuICAgIHRoaXMuc29ydE9yZGVyID0gMTtcclxuICB9XHJcbiAgdGhpcy50YWJsZU9iamVjdC5saW1pdCA9MTA7XHJcbnRoaXMudGFibGVPYmplY3Qub2Zmc2V0ID0xO1xyXG4gIHRoaXMudGFibGVPYmplY3Quc29ydEJ5ID0gdGhpcy5zb3J0ZWRDb2x1bW4sIFxyXG4gIHRoaXMudGFibGVPYmplY3Quc29ydE9yZGVyID0gdGhpcy5zb3J0T3JkZXIsIFxyXG4gIHRoaXMuZ2V0RGF0YSgpO1xyXG59XHJcbmlzRWRpdGluZyA9Jyc7XHJcbmVkaXRTdG9yZUxpc3QoZWRpdDphbnkpe1xyXG4gIHRoaXMuaXNFZGl0aW5nID1lZGl0O1xyXG4gIHRoaXMudmFsaWRhdGVJbml0aWFsQ2xvc2VUaW1lcygpO1xyXG4gXHJcbn1cclxudmFsaWRhdGVJbml0aWFsQ2xvc2VUaW1lcygpIHtcclxuICB0aGlzLnN0b3JlTGlzdERhdGEuZm9yRWFjaCgoc3RvcmU6YW55KSA9PiB7XHJcbiAgICBpZiAodGhpcy5jb252ZXJ0VGltZVRvSW5wdXRGb3JtYXQoc3RvcmUuY2xvc2VUaW1lKSA8IHRoaXMuY29udmVydFRpbWVUb0lucHV0Rm9ybWF0KHN0b3JlLm9wZW5UaW1lKSkge1xyXG4gICAgICAgIHN0b3JlLmNsb3NlVGltZSA9IHN0b3JlLm9wZW5UaW1lOyAvLyBSZXNldCBpbnZhbGlkIGNsb3NlVGltZVxyXG4gICAgfVxyXG59KTtcclxufVxyXG5jb252ZXJ0VGltZVRvSW5wdXRGb3JtYXQodGltZTogc3RyaW5nKTogc3RyaW5nIHtcclxuICBpZiAoIXRpbWUpIHJldHVybiBcIjAwOjAwXCI7IC8vIERlZmF1bHQgdmFsdWVcclxuICByZXR1cm4gdGltZS5zdWJzdHJpbmcoMCwgNSk7IC8vIEV4dHJhY3Qgb25seSBISDptbVxyXG59XHJcbiAgc2VhcmNoRGF0YSgpe1xyXG50aGlzLnRhYmxlT2JqZWN0LnNlYXJjaFZhbHVlID10aGlzLnNlYXJjaFZhbHVlIFxyXG50aGlzLnRhYmxlT2JqZWN0LmxpbWl0ID0xMDtcclxudGhpcy50YWJsZU9iamVjdC5vZmZzZXQgPTE7XHJcbnRoaXMudGFibGVPYmplY3Quc29ydEJ5ID0gdGhpcy5zb3J0ZWRDb2x1bW4sIFxyXG50aGlzLnRhYmxlT2JqZWN0LnNvcnRPcmRlciA9IHRoaXMuc29ydE9yZGVyLFxyXG50aGlzLmdldERhdGEoKTtcclxuICB9XHJcblxyXG4gIGRyb3BEb3duOiBib29sZWFuID0gZmFsc2U7XHJcbiAgb3BlbkRyb3Bkb3duKGV2ZW50OmFueSkge1xyXG4gICAgdGhpcy5kcm9wRG93biA9ICF0aGlzLmRyb3BEb3duO1xyXG4gIH1cclxuICAgIEBWaWV3Q2hpbGQoXCJpbnB1dEZpbGVcIikgaW5wdXRGaWxlOiBFbGVtZW50UmVmO1xyXG4gIG9uRmlsZVVwbG9hZChldmVudDogYW55KSB7XHJcbiAgICBjb25zdCB0YXJnZXQ6IERhdGFUcmFuc2ZlciA9IDxEYXRhVHJhbnNmZXI+ZXZlbnQudGFyZ2V0O1xyXG5cclxuICAgICAgY29uc3QgZmlsZTogRmlsZSA9IGV2ZW50LnRhcmdldC5maWxlc1swXTtcclxuICBjb25zdCBhbGxvd2VkRXh0ZW5zaW9ucyA9IC9cXC4oeGxzfHhsc3h8Y3N2KSQvaTtcclxuICBjb25zdCBhbGxvd2VkVHlwZXMgPSBbXHJcbiAgICBcImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5zcHJlYWRzaGVldG1sLnNoZWV0XCIsIFxyXG4gICAgXCJhcHBsaWNhdGlvbi92bmQubXMtZXhjZWxcIiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcclxuICAgIFwidGV4dC9jc3ZcIiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcclxuICAgIFwiYXBwbGljYXRpb24vY3N2XCIsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXHJcbiAgXTtcclxuXHJcbiAgaWYgKCFhbGxvd2VkRXh0ZW5zaW9ucy50ZXN0KGZpbGUubmFtZSkgfHwgIWFsbG93ZWRUeXBlcy5pbmNsdWRlcyhmaWxlLnR5cGUpKSB7XHJcbiAgICB0aGlzLnRzLmdldEVycm9yVG9hc3QoXCJPbmx5IC54bHMsIC54bHN4LCBvciAuY3N2IGZpbGVzIGFyZSBhbGxvd2VkLlwiKTtcclxuICAgIHRoaXMuaW5wdXRGaWxlLm5hdGl2ZUVsZW1lbnQudmFsdWUgPSBcIlwiO1xyXG4gICAgcmV0dXJuO1xyXG4gIH1cclxuICAgIGxldCBpc0V4Y2VsRmlsZSA9ICEhdGFyZ2V0LmZpbGVzWzBdLm5hbWUubWF0Y2goLygueGxzfC54bHN4KS8pO1xyXG4gICAgbGV0IGVycm9yOiBhbnkgPSBbXTtcclxuICAgIGxldCBWYWxpZGF0aW9uRXJyb3I6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgICBpZiAoaXNFeGNlbEZpbGUpIHtcclxuICAgICAgICBjb25zdCByZWFkZXI6IEZpbGVSZWFkZXIgPSBuZXcgRmlsZVJlYWRlcigpO1xyXG4gICAgICAgIHJlYWRlci5yZWFkQXNCaW5hcnlTdHJpbmcodGFyZ2V0LmZpbGVzWzBdKTtcclxuXHJcbiAgICAgICAgcmVhZGVyLm9ubG9hZCA9IChlOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgY29uc3QgYnN0cjogc3RyaW5nID0gZS50YXJnZXQucmVzdWx0O1xyXG4gICAgICAgICAgICBjb25zdCB3YjogWExTWC5Xb3JrQm9vayA9IFhMU1gucmVhZChic3RyLCB7IHR5cGU6ICdiaW5hcnknIH0pO1xyXG4gICAgICAgICAgICBjb25zdCB3c25hbWU6IHN0cmluZyA9IHdiLlNoZWV0TmFtZXNbMF07XHJcbiAgICAgICAgICAgIGNvbnN0IHdzOiBYTFNYLldvcmtTaGVldCA9IHdiLlNoZWV0c1t3c25hbWVdO1xyXG4gICAgICAgICAgICBjb25zdCBkYXRhID0gWExTWC51dGlscy5zaGVldF90b19qc29uKHdzKTtcclxuXHJcbiAgICAgICAgICAgIC8vIFZhbGlkYXRlIGFuZCB1cGRhdGUgc3RvcmVMaXN0RGF0YVxyXG4gICAgICAgICAgICB0aGlzLnByb2Nlc3NVcGxvYWRlZERhdGEoZGF0YSk7XHJcbiAgICAgICAgfTtcclxuICAgIH1cclxufVxyXG5cclxuLy8gUHJvY2VzcyB1cGxvYWRlZCBkYXRhIGFuZCB1cGRhdGUgc3RvcmVMaXN0RGF0YVxyXG5wcm9jZXNzVXBsb2FkZWREYXRhKGRhdGE6IGFueVtdKSB7XHJcbiAgICB0aGlzLnN0b3JlTGlzdERhdGEgPSBkYXRhLm1hcCgocm93OiBhbnkpID0+ICh7XHJcbiAgICAgICAgc3RvcmVOYW1lOiByb3cuc3RvcmVOYW1lIHx8IFwiVW5rbm93biBTdG9yZVwiLFxyXG4gICAgICAgIG9wZW5UaW1lOiB0aGlzLmNvbnZlcnRFeGNlbFRpbWUocm93Lm9wZW5UaW1lKSxcclxuICAgICAgICBjbG9zZVRpbWU6IHRoaXMuY29udmVydEV4Y2VsVGltZShyb3cuY2xvc2VUaW1lKSxcclxuICAgICAgICBpc0VkaXRpbmc6IGZhbHNlLCAvLyBEZWZhdWx0IGZvciBVSVxyXG4gICAgICAgIHNob3dFcnJvcjogZmFsc2VcclxuICAgIH0pKTtcclxuXHJcbiAgICB0aGlzLm9uU3VibWl0KCk7XHJcbn1cclxuY29udmVydEV4Y2VsVGltZSh2YWx1ZTogYW55KTogc3RyaW5nIHtcclxuICBpZiAoIXZhbHVlKSByZXR1cm4gXCIwMDowMDowMFwiOyAvLyBEZWZhdWx0IGlmIGVtcHR5XHJcblxyXG4gIGlmICh0eXBlb2YgdmFsdWUgPT09IFwibnVtYmVyXCIpIHtcclxuICAgICAgLy8gRXhjZWwgc3RvcmVzIHRpbWUgYXMgZnJhY3Rpb24gb2YgYSAyNC1ob3VyIGRheSwgc28gbXVsdGlwbHkgYnkgMjQgdG8gZ2V0IGhvdXJzXHJcbiAgICAgIGxldCB0b3RhbFNlY29uZHMgPSBNYXRoLnJvdW5kKHZhbHVlICogMjQgKiA2MCAqIDYwKTsgXHJcbiAgICAgIGxldCBob3VycyA9IE1hdGguZmxvb3IodG90YWxTZWNvbmRzIC8gMzYwMCk7XHJcbiAgICAgIGxldCBtaW51dGVzID0gTWF0aC5mbG9vcigodG90YWxTZWNvbmRzICUgMzYwMCkgLyA2MCk7XHJcbiAgICAgIGxldCBzZWNvbmRzID0gdG90YWxTZWNvbmRzICUgNjA7XHJcblxyXG4gICAgICByZXR1cm4gdGhpcy5wYWQoaG91cnMpICsgXCI6XCIgKyB0aGlzLnBhZChtaW51dGVzKSArIFwiOlwiICsgdGhpcy5wYWQoc2Vjb25kcyk7XHJcbiAgfSBlbHNlIGlmICh0eXBlb2YgdmFsdWUgPT09IFwic3RyaW5nXCIgJiYgdmFsdWUuaW5jbHVkZXMoXCI6XCIpKSB7XHJcbiAgICAgIHJldHVybiB2YWx1ZS5sZW5ndGggPT09IDUgPyB2YWx1ZSArIFwiOjAwXCIgOiB2YWx1ZTsgLy8gQ29udmVydCBISDptbSDihpIgSEg6bW06c3NcclxuICB9XHJcblxyXG4gIHJldHVybiBcIjAwOjAwOjAwXCI7IC8vIERlZmF1bHQgaWYgaW52YWxpZFxyXG59XHJcblxyXG5wYWQobnVtOiBudW1iZXIpOiBzdHJpbmcge1xyXG4gIHJldHVybiBudW0gPCAxMCA/IFwiMFwiICsgbnVtIDogbnVtLnRvU3RyaW5nKCk7XHJcbn1cclxuICBAVmlld0NoaWxkKCdmaWxlMScpIGZpbGVJbnB1dDEhOiBFbGVtZW50UmVmO1xyXG4gIEBWaWV3Q2hpbGQoJ2J1bGtVcGxvYWRQb3B1cCcpIGJ1bGtVcGxvYWRQb3B1cDogYW55O1xyXG4gIGRvd25sb2FkVGVtcGxhdGUoKXtcclxuICAgIGNvbnN0IG1vZGFsUmVmID0gdGhpcy5tb2RhbFNlcnZpY2Uub3Blbih0aGlzLmJ1bGtVcGxvYWRQb3B1cCwge1xyXG4gICAgICBjZW50ZXJlZDogdHJ1ZSxcclxuICAgICAgLy8gc2l6ZTogXCJsZ1wiLFxyXG4gICAgICBzY3JvbGxhYmxlOiB0cnVlLFxyXG4gICAgfSk7XHJcbiAgICB0aGlzLmRyb3BEb3duID1mYWxzZTtcclxuICB9XHJcblxyXG4gIGRvd25sb2FkVGVtcGxhdGVWMigpIHtcclxuICAgIHRoaXMudGFibGVPYmplY3QuZXhwb3J0ID0gdHJ1ZVxyXG4gICAgdGhpcy5jbGllbnRBcGkuZ2V0T3BlbkNsb3NlTGlzdGV4cG9ydCh0aGlzLnRhYmxlT2JqZWN0KS5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKHtcclxuICAgIG5leHQ6IChyZXMpID0+IHtcclxuICAgICAgaWYocmVzKXtcclxuICAgICAgICB0aGlzLnRhYmxlT2JqZWN0LmV4cG9ydCA9ZmFsc2VcclxuICAgICAgIHRoaXMuZXhjZWxTZXJ2aWNlLnNhdmVBc0V4Y2VsRmlsZShyZXMsICdzdG9yZSBvcGVuJmNsb3NlIHRpbWUnKVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICB9KVxyXG4gIH1cclxuICBvbkNhbmNlbCgpe1xyXG4gICAgdGhpcy5pc0VkaXRpbmcgPScnXHJcbiAgfVxyXG4gIHVwZGF0ZUNsb3NlVGltZShzdG9yZTogYW55KSB7XHJcbiAgICBpZiAodGhpcy5jb252ZXJ0VGltZVRvSW5wdXRGb3JtYXQoc3RvcmUuY2xvc2VUaW1lKSA8IHRoaXMuY29udmVydFRpbWVUb0lucHV0Rm9ybWF0KHN0b3JlLm9wZW5UaW1lKSkge1xyXG4gICAgICBzdG9yZS5jbG9zZVRpbWUgPSBzdG9yZS5vcGVuVGltZTsgXHJcbiAgfVxyXG59XHJcblxyXG52YWxpZGF0ZUNsb3NlVGltZSgpIHtcclxuICBsZXQgaXNWYWxpZCA9IHRydWU7XHJcbiAgdGhpcy5zdG9yZUxpc3REYXRhLmZvckVhY2goKHN0b3JlOiBhbnkpID0+IHtcclxuICBpZiAoKHN0b3JlLmNsb3NlVGltZSkgPCAoc3RvcmUub3BlblRpbWUpKSB7XHJcbiAgICAgIHN0b3JlLnNob3dFcnJvciA9IHRydWU7XHJcbiAgICAgIGlzVmFsaWQgPSBmYWxzZTtcclxuICB9IGVsc2Uge1xyXG4gICAgICBzdG9yZS5zaG93RXJyb3IgPSBmYWxzZTtcclxuICB9XHJcbiAgfSlcclxuXHJcbiAgcmV0dXJuIGlzVmFsaWQ7XHJcbn1cclxuZm9ybWF0VGltZSh0aW1lOiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gIGlmICghdGltZSkgcmV0dXJuIFwiMDA6MDA6MDBcIjsgLy8gRGVmYXVsdCBmYWxsYmFja1xyXG4gIGlmICh0aW1lLmxlbmd0aCA9PT0gOCkgcmV0dXJuIHRpbWU7XHJcbiAgaWYgKHRpbWUubGVuZ3RoID09PSA1KSByZXR1cm4gdGltZSArIFwiOjAwXCI7XHJcblxyXG4gIHJldHVybiB0aW1lOyBcclxufVxyXG4gIG9uU3VibWl0KCl7XHJcbiAgICBjb25zdCBpc1ZhbGlkID0gdGhpcy52YWxpZGF0ZUNsb3NlVGltZSgpO1xyXG5cclxuICAgIGlmICghaXNWYWxpZCkge1xyXG4gICAgICAgIGNvbnNvbGUud2FybihcIlZhbGlkYXRpb24gZmFpbGVkLiBBUEkgY2FsbCBzdG9wcGVkLlwiKTtcclxuICAgICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBsZXQgb2JqID0ge1xyXG4gICAgICBcImNsaWVudElkXCI6IHRoaXMuY2xpZW50RGF0YS5jbGllbnRJZCxcclxuICAgICAgXCJzdG9yZXNcIjogdGhpcy5zdG9yZUxpc3REYXRhLm1hcCgoc3RvcmU6IGFueSkgPT4gKHtcclxuICAgICAgICAgICAgXCJzdG9yZU5hbWVcIjogc3RvcmUuc3RvcmVOYW1lLFxyXG4gICAgICAgICAgICBcIm9wZW5UaW1lXCI6IHRoaXMuZm9ybWF0VGltZShzdG9yZS5vcGVuVGltZSksXHJcbiAgICAgICAgICAgIFwiY2xvc2VUaW1lXCI6IHRoaXMuZm9ybWF0VGltZShzdG9yZS5jbG9zZVRpbWUpXHJcbiAgICAgICAgfSkpXHJcbiAgfTtcclxuICB0aGlzLmNsaWVudEFwaS5nZXRVcGRhdGVPcGVuQ2xvc2VMaXN0KG9iaikucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpLnN1YnNjcmliZSh7XHJcbiAgICBuZXh0OiAocmVzKSA9PiB7XHJcbiAgICAgIGlmKHJlcyAmJiByZXMuY29kZSA9PTIwMCl7XHJcbiAgICAgICAgdGhpcy50cy5nZXRTdWNjZXNzVG9hc3QoJ1N0b3JlIG9wZW4gYW5kIGNsb3NlIHRpbWUgdXBkYXRlZCBzdWNjZXNzZnVsbHknKVxyXG4gICAgICAgIHRoaXMuZ2V0RGF0YSgpO1xyXG4gICAgICAgIHRoaXMuaXNFZGl0aW5nID0nJ1xyXG4gICAgICB9IFxyXG4gICAgfSxlcnJvcjooZXJyOmFueSk9PntcclxuICAgICAgdGhpcy50cy5nZXRFcnJvclRvYXN0KGVycj8uZXJyb3I/LmVycm9yID8gZXJyPy5lcnJvcj8uZXJyb3I6IGVycj8uZXJyb3I/Lm1lc3NhZ2UpXHJcbiAgICB9XHJcbiAgfSlcclxuICB9XHJcbiAgcGFnaW5hdGlvblNpemVzOmFueVtdID0gW107XHJcbiAgcGFnZVNpemUgPSAxMDtcclxuICBzZXRQYWdpbmF0aW9uU2l6ZXMoKSB7XHJcbiAgICBpZiAodGhpcy50b3RhbENvdW50ID4gMTApIHtcclxuICAgICAgdGhpcy5wYWdpbmF0aW9uU2l6ZXMgPSBbMTAsIDIwLCAzMF07XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLnBhZ2luYXRpb25TaXplcyA9IFt0aGlzLnRvdGFsQ291bnRdOyAvLyBKdXN0IG9uZSBvcHRpb24gaWYgbGVzcyB0aGFuIDEwXHJcbiAgICB9XHJcbiAgICB0aGlzLnBhZ2VTaXplID0gdGhpcy5wYWdpbmF0aW9uU2l6ZXNbMF07XHJcbiAgfVxyXG4gIG9uUGFnZUNoYW5nZShwYWdlT2Zmc2V0OiBudW1iZXIpIHtcclxuICAgIFxyXG4gICAgdGhpcy5sb2FkaW5nID0gdHJ1ZTtcclxuICAgIHRoaXMubm9EYXRhID0gZmFsc2U7XHJcbiAgICB0aGlzLm9mZnNldCA9IE51bWJlcihwYWdlT2Zmc2V0KTtcclxuICAgIGxldCBvYmogPXtcclxuICAgICAgY2xpZW50SWQ6dGhpcy5jbGllbnREYXRhPy5jbGllbnRJZCxcclxuICAgICAgbGltaXQ6dGhpcy5saW1pdCxcclxuICAgICAgb2Zmc2V0OnRoaXMub2Zmc2V0LFxyXG4gICAgICBzb3J0T3JkZXI6dGhpcy5zb3J0T3JkZXIsXHJcbiAgICAgIHNvcnRCeTp0aGlzLnNvcnRlZENvbHVtbixcclxuICAgICAgc2VhcmNoVmFsdWU6dGhpcy5zZWFyY2hWYWx1ZSBcclxuICAgIH1cclxuICAgIHRoaXMuY2xpZW50QXBpLmdldE9wZW5DbG9zZUxpc3Qob2JqKS5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKHtcclxuICAgICAgbmV4dDogKHJlcykgPT4ge1xyXG4gICAgICAgIGlmKHJlcyAmJiByZXMuY29kZSA9PTIwMCl7XHJcbiAgICAgICAgICB0aGlzLnN0b3JlTGlzdERhdGEgPSByZXM/LmRhdGE/LnJlc3VsdDtcclxuICAgICAgICB0aGlzLnRvdGFsQ291bnQgPSByZXM/LmRhdGE/LmNvdW50O1xyXG4gICAgICAgIHRoaXMubG9hZGluZyA9ZmFsc2U7XHJcbiAgICAgICAgdGhpcy5ub0RhdGEgPWZhbHNlO1xyXG4gICAgICAgXHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHRoaXMuc3RvcmVMaXN0RGF0YSA9W107XHJcbiAgICAgICAgICB0aGlzLnRvdGFsQ291bnQgPTA7XHJcbiAgICAgICAgICB0aGlzLmxvYWRpbmcgPWZhbHNlO1xyXG4gICAgICAgICAgdGhpcy5ub0RhdGEgPXRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgICB9LFxyXG4gICAgICBlcnJvcjogKGVycik9PntcclxuICAgICAgICB0aGlzLnN0b3JlTGlzdERhdGEgPVtdO1xyXG4gICAgICAgIHRoaXMudG90YWxDb3VudCA9MDtcclxuICAgICAgICB0aGlzLmxvYWRpbmcgPWZhbHNlO1xyXG4gICAgICAgIHRoaXMubm9EYXRhID10cnVlO1xyXG4gICAgICB9XHJcbiAgICB9KVxyXG4gIH1cclxuICBcclxuICBvblBhZ2VTaXplQ2hhbmdlKHBhZ2VTaXplOiBudW1iZXIpIHtcclxuICAgIHRoaXMub2Zmc2V0ID0xO1xyXG4gICAgdGhpcy5sb2FkaW5nID0gdHJ1ZTtcclxuICAgIHRoaXMubm9EYXRhID0gZmFsc2U7XHJcbiAgICB0aGlzLnBhZ2VTaXplID0gTnVtYmVyKHBhZ2VTaXplKTtcclxuICAgIHRoaXMubGltaXQgPSBOdW1iZXIocGFnZVNpemUpO1xyXG4gICAgbGV0IG9iaiA9e1xyXG4gICAgICBjbGllbnRJZDp0aGlzLmNsaWVudERhdGE/LmNsaWVudElkLFxyXG4gICAgICBsaW1pdDp0aGlzLmxpbWl0LFxyXG4gICAgICBvZmZzZXQ6dGhpcy5vZmZzZXQsXHJcbiAgICAgIHNvcnRPcmRlcjp0aGlzLnNvcnRPcmRlciAsXHJcbiAgICAgIHNvcnRCeTp0aGlzLnNvcnRlZENvbHVtbiAsXHJcbiAgICAgIHNlYXJjaFZhbHVlOnRoaXMuc2VhcmNoVmFsdWUgXHJcbiAgICB9XHJcbiAgICB0aGlzLmNsaWVudEFwaS5nZXRPcGVuQ2xvc2VMaXN0KG9iaikucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpLnN1YnNjcmliZSh7XHJcbiAgICAgIG5leHQ6IChyZXMpID0+IHtcclxuICAgICAgICBpZihyZXMgJiYgcmVzLmNvZGUgPT0yMDApe1xyXG4gICAgICAgICAgdGhpcy5zdG9yZUxpc3REYXRhID0gcmVzPy5kYXRhPy5yZXN1bHQ7XHJcbiAgICAgICAgdGhpcy50b3RhbENvdW50ID0gcmVzPy5kYXRhPy5jb3VudDtcclxuICAgICAgICB0aGlzLmxvYWRpbmcgPWZhbHNlO1xyXG4gICAgICAgIHRoaXMubm9EYXRhID1mYWxzZTtcclxuICAgICAgIFxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLnN0b3JlTGlzdERhdGEgPVtdO1xyXG4gICAgICAgICAgdGhpcy50b3RhbENvdW50ID0wO1xyXG4gICAgICAgICAgdGhpcy5sb2FkaW5nID1mYWxzZTtcclxuICAgICAgICAgIHRoaXMubm9EYXRhID10cnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgfSxcclxuICAgICAgZXJyb3I6IChlcnIpPT57XHJcbiAgICAgICAgdGhpcy5zdG9yZUxpc3REYXRhID1bXTtcclxuICAgICAgICB0aGlzLnRvdGFsQ291bnQgPTA7XHJcbiAgICAgICAgdGhpcy5sb2FkaW5nID1mYWxzZTtcclxuICAgICAgICB0aGlzLm5vRGF0YSA9dHJ1ZTtcclxuICAgICAgfVxyXG4gICAgfSlcclxuICB9XHJcbn1cclxuXHJcblxyXG5cclxuXHJcbiIsIjxkaXYgY2xhc3M9XCJyb3dcIj5cclxuICAgIDxuZy1jb250YWluZXI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImNvbC0xMiBtYi0yXCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXgganVzdGlmeS1jb250ZW50LWJldHdlZW4gYWxpZ24taXRlbXMtY2VudGVyXCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYmFkZ2UgYmFkZ2UtbGlnaHQtZGVmYXVsdFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibWUtMlwiPjxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHdpZHRoPVwiMTZcIiBoZWlnaHQ9XCIxNlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2aWV3Qm94PVwiMCAwIDE2IDE2XCIgZmlsbD1cIm5vbmVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxnIGNsaXAtcGF0aD1cInVybCgjY2xpcDBfOTUwM185NzU5MSlcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkPVwiTTcuOTk4NyAxMC42NjU0VjcuOTk4N003Ljk5ODcgNS4zMzIwM0g4LjAwNTM2TTE0LjY2NTQgNy45OTg3QzE0LjY2NTQgMTEuNjgwNiAxMS42ODA2IDE0LjY2NTQgNy45OTg3IDE0LjY2NTRDNC4zMTY4IDE0LjY2NTQgMS4zMzIwMyAxMS42ODA2IDEuMzMyMDMgNy45OTg3QzEuMzMyMDMgNC4zMTY4IDQuMzE2OCAxLjMzMjAzIDcuOTk4NyAxLjMzMjAzQzExLjY4MDYgMS4zMzIwMyAxNC42NjU0IDQuMzE2OCAxNC42NjU0IDcuOTk4N1pcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2U9XCIjNjY3MDg1XCIgc3Ryb2tlLXdpZHRoPVwiMS41XCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkZWZzPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxjbGlwUGF0aCBpZD1cImNsaXAwXzk1MDNfOTc1OTFcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHJlY3Qgd2lkdGg9XCIxNlwiIGhlaWdodD1cIjE2XCIgZmlsbD1cIndoaXRlXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2NsaXBQYXRoPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kZWZzPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJzdG9yZS1jb25mXCI+WW91IENhbiBFZGl0IG9ubHkgT3BlbiB0aW1lIGFuZCBDbG9zZSB0aW1lPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIWxvYWRpbmcgJiYgc3RvcmVMaXN0RGF0YT8ubGVuZ3RoICYmICFub0RhdGFcIj5cclxuICAgICAgICAgICAgICAgIDxidXR0b24gKm5nSWY9XCJpc0VkaXRpbmcgPT09JydcIiAoY2xpY2spPVwiZWRpdFN0b3JlTGlzdCgnZWRpdCcpXCIgdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGJ0bi1vdXRsaW5lIGFsaWduLWl0ZW1zLWVuZFwiPjxzcGFuIGNsYXNzPVwibWUtMlwiPjxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHdpZHRoPVwiMjBcIiBoZWlnaHQ9XCIyMFwiIHZpZXdCb3g9XCIwIDAgMjAgMjBcIiBmaWxsPVwibm9uZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxnIGNsaXAtcGF0aD1cInVybCgjY2xpcDBfOTk2NF80NDI2MilcIj5cclxuICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPVwiTTkuMTY3OTcgMy4zMzQxN0gzLjMzNDY0QzIuODkyNjEgMy4zMzQxNyAyLjQ2ODY4IDMuNTA5NzcgMi4xNTYxMiAzLjgyMjMzQzEuODQzNTYgNC4xMzQ4OSAxLjY2Nzk3IDQuNTU4ODEgMS42Njc5NyA1LjAwMDg0VjE2LjY2NzVDMS42Njc5NyAxNy4xMDk1IDEuODQzNTYgMTcuNTMzNSAyLjE1NjEyIDE3Ljg0NkMyLjQ2ODY4IDE4LjE1ODYgMi44OTI2MSAxOC4zMzQyIDMuMzM0NjQgMTguMzM0MkgxNS4wMDEzQzE1LjQ0MzMgMTguMzM0MiAxNS44NjczIDE4LjE1ODYgMTYuMTc5OCAxNy44NDZDMTYuNDkyNCAxNy41MzM1IDE2LjY2OCAxNy4xMDk1IDE2LjY2OCAxNi42Njc1VjEwLjgzNDJNMTUuNDE4IDIuMDg0MTdDMTUuNzQ5NSAxLjc1MjY1IDE2LjE5OTEgMS41NjY0MSAxNi42NjggMS41NjY0MUMxNy4xMzY4IDEuNTY2NDEgMTcuNTg2NCAxLjc1MjY1IDE3LjkxOCAyLjA4NDE3QzE4LjI0OTUgMi40MTU2OSAxOC40MzU3IDIuODY1MzMgMTguNDM1NyAzLjMzNDE3QzE4LjQzNTcgMy44MDMwMSAxOC4yNDk1IDQuMjUyNjUgMTcuOTE4IDQuNTg0MTdMMTAuMDAxMyAxMi41MDA4TDYuNjY3OTcgMTMuMzM0Mkw3LjUwMTMgMTAuMDAwOEwxNS40MTggMi4wODQxN1pcIiBzdHJva2U9XCIjMzQ0MDU0XCIgc3Ryb2tlLXdpZHRoPVwiMS42N1wiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiLz5cclxuICAgICAgICAgICAgICAgICAgICA8L2c+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRlZnM+XHJcbiAgICAgICAgICAgICAgICAgICAgPGNsaXBQYXRoIGlkPVwiY2xpcDBfOTk2NF80NDI2MlwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxyZWN0IHdpZHRoPVwiMjBcIiBoZWlnaHQ9XCIyMFwiIGZpbGw9XCJ3aGl0ZVwiLz5cclxuICAgICAgICAgICAgICAgICAgICA8L2NsaXBQYXRoPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGVmcz5cclxuICAgICAgICAgICAgICAgICAgICA8L3N2Zz48L3NwYW4+RWRpdCBTdG9yZSBUaW1lPC9idXR0b24+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJpc0VkaXRpbmcgPT09J2VkaXQnXCIgY2xhc3M9XCJkLWZsZXgganVzdGlmeS1jb250ZW50LWVuZFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8YSB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4gYnRuLW91dGxpbmUgbXQtMSBtZS00XCIgKGNsaWNrKT1cIm9uQ2FuY2VsKClcIj5DYW5jZWw8L2E+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxhIHR5cGU9XCJzdWJtaXRcIiBjbGFzcz1cImJ0biBidG4tcHJpbWFyeSBweC00IFwiIChjbGljayk9XCJvblN1Ym1pdCgpXCI+PHNwYW4+U2F2ZSBDaGFuZ2VzPC9zcGFuPjwvYT5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTkgbXQtM1wiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4XCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBwb3NpdGlvbi1yZWxhdGl2ZSBteS0xIHctNTBcIj5cclxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInN2Zy1pY29uIHN2Zy1pY29uLTEgcG9zaXRpb24tYWJzb2x1dGUgbXMtM1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB3aWR0aD1cIjI0XCIgaGVpZ2h0PVwiMjRcIiB2aWV3Qm94PVwiMCAwIDI0IDI0XCIgZmlsbD1cIm5vbmVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxyZWN0IG9wYWNpdHk9XCIwLjVcIiB4PVwiMTcuMDM2NVwiIHk9XCIxNS4xMjIzXCIgd2lkdGg9XCI4LjE1NTQ2XCIgaGVpZ2h0PVwiMlwiIHJ4PVwiMVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtPVwicm90YXRlKDQ1IDE3LjAzNjUgMTUuMTIyMylcIiBmaWxsPVwiY3VycmVudENvbG9yXCI+PC9yZWN0PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGhcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkPVwiTTExIDE5QzYuNTU1NTYgMTkgMyAxNS40NDQ0IDMgMTFDMyA2LjU1NTU2IDYuNTU1NTYgMyAxMSAzQzE1LjQ0NDQgMyAxOSA2LjU1NTU2IDE5IDExQzE5IDE1LjQ0NDQgMTUuNDQ0NCAxOSAxMSAxOVpNMTEgNUM3LjUzMzMzIDUgNSA3LjUzMzMzIDUgMTFDNSAxNC40NjY3IDcuNTMzMzMgMTcgMTEgMTdDMTQuNDY2NyAxNyAxNyAxNC40NjY3IDE3IDExQzE3IDcuNTMzMzMgMTQuNDY2NyA1IDExIDVaXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxsPVwiY3VycmVudENvbG9yXCI+PC9wYXRoPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cclxuICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgPGlucHV0IChjaGFuZ2UpPVwic2VhcmNoRGF0YSgpXCIgWyhuZ01vZGVsKV09XCJzZWFyY2hWYWx1ZVwiIHR5cGU9XCJ0ZXh0XCIgY2xhc3M9XCJmb3JtLWNvbnRyb2wgcHMtMTQgbWUtMlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGF1dG9jb21wbGV0ZT1cIm9mZlwiIHBsYWNlaG9sZGVyPVwiU2VhcmNoIHdpdGggU3RvcmUgTmFtZSwgU3RvcmUgSURcIiAvPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtMyBtdC0zIHRleHQtZW5kIHBzLTE1XCI+XHJcbiAgICAgICAgICAgIDxkaXYgIGNsYXNzPVwicG9zaXRpb24tcmVsYXRpdmUgdy0xMDAgbXQtNSBtYi01XCI+XHJcbiAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIlxyXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYnRuIHB5LTMgYnRuLWRlZmF1bHQgdy0xMDAgYnRuLW91dGxpbmUgYnRuLW91dGxpbmUtZGVmYXVsdCByb3VuZGVkLTMgdGV4dC1ub3dyYXAgYm9yZGVyLXZhbCBkLWZsZXgganVzdGlmeS1jb250ZW50LWJldHdlZW5cIj5cclxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1lLTMgY3Vyc29yLXBvaW50ZXJcIiAjdXBsb2FkIChjbGljayk9XCJpbnB1dEZpbGUuY2xpY2soKVwiPjxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHdpZHRoPVwiMjBcIiBoZWlnaHQ9XCIyMFwiIHZpZXdCb3g9XCIwIDAgMjAgMjBcIiBmaWxsPVwibm9uZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPVwiTTE3LjUgMTIuNVYxNS44MzMzQzE3LjUgMTYuMjc1NCAxNy4zMjQ0IDE2LjY5OTMgMTcuMDExOCAxNy4wMTE4QzE2LjY5OTMgMTcuMzI0NCAxNi4yNzU0IDE3LjUgMTUuODMzMyAxNy41SDQuMTY2NjdDMy43MjQ2NCAxNy41IDMuMzAwNzIgMTcuMzI0NCAyLjk4ODE2IDE3LjAxMThDMi42NzU1OSAxNi42OTkzIDIuNSAxNi4yNzU0IDIuNSAxNS44MzMzVjEyLjVNMTQuMTY2NyA2LjY2NjY3TDEwIDIuNU0xMCAyLjVMNS44MzMzMyA2LjY2NjY3TTEwIDIuNVYxMi41XCIgc3Ryb2tlPVwiIzM0NDA1NFwiIHN0cm9rZS13aWR0aD1cIjEuNjdcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIi8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPiA8c3BhbiBjbGFzcz1cInRlbXBsYXRlLWRyb3Bkb3duIGJnLXdoaXRlIG1zLTNcIj5CdWxrVXBsb2FkIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgPHNwYW4+PGlucHV0IHN0eWxlPVwiZGlzcGxheTogbm9uZTtcIiB0eXBlPVwiZmlsZVwiICNpbnB1dEZpbGUgYWNjZXB0ID0gXCIuY3N2LCBhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuc3ByZWFkc2hlZXRtbC5zaGVldCwgYXBwbGljYXRpb24vdm5kLm1zLWV4Y2VsXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWQ9XCJrdF9hY2NvdW50X3RlYW1fc2l6ZV9zZWxlY3RfMVwiIChjaGFuZ2UpPVwib25GaWxlVXBsb2FkKCRldmVudClcIiAvPjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInN1YnRpdGxlIG14LTMgbWUtMlwiPiB8IDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImN1cnNvci1wb2ludGVyXCIgKGNsaWNrKT1cIm9wZW5Ecm9wZG93bigkZXZlbnQpXCI+PHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgd2lkdGg9XCIyNFwiIGhlaWdodD1cIjI0XCIgdmlld0JveD1cIjAgMCAyNCAyNFwiIGZpbGw9XCJub25lXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNNiA5TDEyIDE1TDE4IDlcIiBzdHJva2U9XCIjMzQ0MDU0XCIgc3Ryb2tlLXdpZHRoPVwiMlwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiLz5cclxuICAgICAgICAgICAgICAgICAgICA8L3N2Zz48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuXHJcbiAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiZHJvcERvd25cIiBjbGFzcz1cImNhcmQgdGVtcGxhdGUtZHJvcGRvd24gaC00MHB4IHctMTAwIHBlLTUgcG9zaXRpb24tYWJzb2x1dGUgcm91bmRlZC0zIHotMSB0b3AtNTBweCBlbmQtMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDx1bCBjbGFzcz1cImxpc3QtdW5zdHlsZWQgbWItMCB3LWF1dG8gY3Vyc29yLXBvaW50ZXJcIiAoY2xpY2spPVwiZG93bmxvYWRUZW1wbGF0ZSgpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxsaSBjbGFzcz1cInBlLTUgZnctc2VtaWJvbGQgY3Vyc29yLXBvaW50ZXIgcHktMlwiPkRvd25sb2FkIFRlbXBsYXRlPC9saT5cclxuICAgICAgICAgICAgICAgICAgICA8L3VsPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGRpdiAqbmdJZj1cImRvd25sb2FkRHJvcERvd25cIlxyXG4gICAgICAgIGNsYXNzPVwiY2FyZCB3LWF1dG8gcHktMiBwb3NpdGlvbi1hYnNvbHV0ZSBwcm9kdWN0ZHJvcCB0b3AtMTBcIj5cclxuICAgICAgICA8dWwgY2xhc3M9XCJsaXN0LXVuc3R5bGVkIG1iLTJcIj5cclxuICAgICAgICAgICAgPGxpIGNsYXNzPVwicHJvZHVjdHRleHQgaXRlbXMgY3Vyc29yLXBvaW50ZXIgcC0yXCJcclxuICAgICAgICAgICAgICAgIChjbGljayk9XCJkb3dubG9hZFRlbXBsYXRlKClcIj5cclxuICAgICAgICAgICAgICAgIERvd25sb2FkIFRlbXBsYXRlPC9saT5cclxuICAgICAgICA8L3VsPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgPC9uZy1jb250YWluZXI+XHJcblxyXG48L2Rpdj5cclxuPG5nLWNvbnRhaW5lciAqbmdJZj1cIm5vRGF0YVwiID5cclxuICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIGp1c3RpZnktY29udGVudC1jZW50ZXJcIiA+XHJcbiAgICAgICAgPGltZyB3aWR0aD1cIjMwMHB4XCIgc3JjPVwiLi9hc3NldHMvdGFuZ28vSWNvbnMvTm9kYXRhLnN2Z1wiIGFsdD1cIlwiPiAgICBcclxuICAgICAgICA8L2Rpdj5cclxuPC9uZy1jb250YWluZXI+XHJcbiAgICBcclxuXHJcbjxuZy1jb250YWluZXIgKm5nSWY9XCJsb2FkaW5nXCIgID5cclxuPGRpdiBjbGFzcz1cInNoaW1tZXItY2FyZCB3LTEwMFwiPlxyXG4gICAgPGRpdiBjbGFzcz1cInJvdyBsb2FkZXIgIGQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIGFsaWduLWl0ZW1zLWNlbnRlclwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJzaGltbWVyXCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ3cmFwcGVyXCI+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInN0cm9rZSBhbmltYXRlIHRpdGxlXCI+PC9kaXY+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInN0cm9rZSBhbmltYXRlIGxpbmtcIj48L2Rpdj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic3Ryb2tlIGFuaW1hdGUgZGVzY3JpcHRpb25cIj48L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJzaGltbWVyXCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ3cmFwcGVyXCI+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInN0cm9rZSBhbmltYXRlIHRpdGxlXCI+PC9kaXY+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInN0cm9rZSBhbmltYXRlIGxpbmtcIj48L2Rpdj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic3Ryb2tlIGFuaW1hdGUgZGVzY3JpcHRpb25cIj48L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJzaGltbWVyXCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ3cmFwcGVyXCI+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInN0cm9rZSBhbmltYXRlIHRpdGxlXCI+PC9kaXY+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInN0cm9rZSBhbmltYXRlIGxpbmtcIj48L2Rpdj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic3Ryb2tlIGFuaW1hdGUgZGVzY3JpcHRpb25cIj48L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG48L2Rpdj5cclxuXHJcbjwvbmctY29udGFpbmVyPlxyXG48ZGl2ICAqbmdJZj1cIiFsb2FkaW5nICYmIHN0b3JlTGlzdERhdGE/Lmxlbmd0aCAmJiAhbm9EYXRhXCIgY2xhc3M9XCJjYXJkLWJvZHkgbXQtMlwiPlxyXG4gICAgPGRpdiBjbGFzcz1cInRhYmxlLXJlc3BvbnNpdmVcIj5cclxuICAgICAgICA8dGFibGUgY2xhc3M9XCJ3LTEwMCB0YWJsZSBib3R0b20tYm9yZGVyIHRleHQtbm93cmFwXCI+XHJcbiAgICAgICAgICAgIDx0aGVhZD5cclxuICAgICAgICAgICAgICAgIDx0cj5cclxuICAgICAgICAgICAgICAgICAgICA8dGg+PHNwYW4gY2xhc3M9XCJjdXJzb3ItcG9pbnRlclwiIChjbGljayk9XCJvblNvcnQoJ3N0b3JlTmFtZScpXCI+U3RvcmUgTmFtZSA8c3ZnIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJzb3J0ZWRDb2x1bW4gPT09ICdzdG9yZU5hbWUnICYmIHNvcnRPcmRlciA9PT0gMSA/ICdyb3RhdGUnIDogJydcIiB3aWR0aD1cIjE2XCIgaGVpZ2h0PVwiMTZcIiB2aWV3Qm94PVwiMCAwIDE2IDE2XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGw9XCJub25lXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQ9XCJNOC4wMDAxNiAzLjMzMzM3VjEyLjY2NjdNOC4wMDAxNiAxMi42NjY3TDEyLjY2NjggOC4wMDAwNE04LjAwMDE2IDEyLjY2NjdMMy4zMzM1IDguMDAwMDRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFthdHRyLnN0cm9rZV09XCJzb3J0ZWRDb2x1bW4gPT09ICdzdG9yZU5hbWUnID8gJyMwMEEzRkYnIDogJyM2NjcwODUnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2Utd2lkdGg9XCIxLjMzMzMzXCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+PC9zcGFuPjwvdGg+XHJcbiAgICAgICAgICAgICAgICAgICAgPHRoPjxzcGFuIGNsYXNzPVwiY3Vyc29yLXBvaW50ZXJcIiAoY2xpY2spPVwib25Tb3J0KCdvcGVuVGltZScpXCI+T3BlbiBUaW1lPHN2ZyBcclxuICAgICAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwic29ydGVkQ29sdW1uID09PSAnb3BlblRpbWUnICYmIHNvcnRPcmRlciA9PT0gMSA/ICdyb3RhdGUnIDogJydcIiB3aWR0aD1cIjE2XCIgaGVpZ2h0PVwiMTZcIiB2aWV3Qm94PVwiMCAwIDE2IDE2XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGw9XCJub25lXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQ9XCJNOC4wMDAxNiAzLjMzMzM3VjEyLjY2NjdNOC4wMDAxNiAxMi42NjY3TDEyLjY2NjggOC4wMDAwNE04LjAwMDE2IDEyLjY2NjdMMy4zMzM1IDguMDAwMDRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFthdHRyLnN0cm9rZV09XCJzb3J0ZWRDb2x1bW4gPT09ICdvcGVuVGltZScgPyAnIzAwQTNGRicgOiAnIzY2NzA4NSdcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZS13aWR0aD1cIjEuMzMzMzNcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPjwvdGg+XHJcbiAgICAgICAgICAgICAgICAgICAgPHRoPjxzcGFuIGNsYXNzPVwiY3Vyc29yLXBvaW50ZXJcIiAoY2xpY2spPVwib25Tb3J0KCdvcGVuVGltZScpXCI+Q2xvc2UgVGltZTxzdmcgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInNvcnRlZENvbHVtbiA9PT0gJ29wZW5UaW1lJyAmJiBzb3J0T3JkZXIgPT09IDEgPyAncm90YXRlJyA6ICcnXCIgd2lkdGg9XCIxNlwiIGhlaWdodD1cIjE2XCIgdmlld0JveD1cIjAgMCAxNiAxNlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxsPVwibm9uZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGhcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkPVwiTTguMDAwMTYgMy4zMzMzN1YxMi42NjY3TTguMDAwMTYgMTIuNjY2N0wxMi42NjY4IDguMDAwMDRNOC4wMDAxNiAxMi42NjY3TDMuMzMzNSA4LjAwMDA0XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYXR0ci5zdHJva2VdPVwic29ydGVkQ29sdW1uID09PSAnb3BlblRpbWUnID8gJyMwMEEzRkYnIDogJyM2NjcwODUnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2Utd2lkdGg9XCIxLjMzMzMzXCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+PC9zcGFuPjwvdGg+XHJcbiAgICAgICAgICAgICAgICA8L3RyPlxyXG4gICAgICAgICAgICA8L3RoZWFkPlxyXG4gICAgICAgICAgICA8dGJvZHk+XHJcbiAgICAgICAgICAgICAgICA8dHIgKm5nRm9yPVwibGV0IG9iaiBvZiBzdG9yZUxpc3REYXRhOyBsZXQgaT1pbmRleDtcIj5cclxuICAgICAgICAgICAgICAgICAgICA8dGQ+e3tvYmouc3RvcmVOYW1lfX08L3RkPlxyXG4gICAgICAgICAgICAgICAgICAgIDx0ZD48c3BhbiAqbmdJZj1cImlzRWRpdGluZz09PScnXCI+e3tmb3JtYXRUaW1lKG9iai5vcGVuVGltZSl9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0ICpuZ0lmPVwiaXNFZGl0aW5nPT09J2VkaXQnXCIgWyhuZ01vZGVsKV09XCJvYmoub3BlblRpbWVcIiAoY2hhbmdlKT1cInVwZGF0ZUNsb3NlVGltZShvYmopXCIgY2xhc3M9XCJmb3JtLWNvbnRyb2wgZm9ybS1jb250cm9sLXNtXCIgdHlwZT1cInRpbWVcIj5cclxuICAgICAgICAgICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgICAgICAgICAgIDx0ZD4gPHNwYW4gKm5nSWY9XCJpc0VkaXRpbmc9PT0nJ1wiPnt7IGZvcm1hdFRpbWUob2JqLmNsb3NlVGltZSkgfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCAqbmdJZj1cImlzRWRpdGluZz09PSdlZGl0J1wiIGNsYXNzPVwiZm9ybS1jb250cm9sIGZvcm0tY29udHJvbC1zbVwiIHR5cGU9XCJ0aW1lXCIgWyhuZ01vZGVsKV09XCJvYmouY2xvc2VUaW1lXCIgW21pbl09XCJvYmoub3BlblRpbWVcIiAoY2hhbmdlKT1cInZhbGlkYXRlQ2xvc2VUaW1lKClcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cIm9iai5zaG93RXJyb3JcIiBjbGFzcz1cInRleHQtZGFuZ2VyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBDbG9zZSB0aW1lIG11c3QgYmUgbGF0ZXIgdGhhbiBvcGVuIHRpbWUuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PiBcclxuICAgICAgICAgICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgICAgICAgPC90cj5cclxuICAgICAgICAgICAgPC90Ym9keT5cclxuICAgICAgICBcclxuICAgICAgICA8L3RhYmxlPlxyXG4gICAgPC9kaXY+XHJcbjwvZGl2PlxyXG48ZGl2ICpuZ0lmPVwiIWxvYWRpbmcgICYmIHN0b3JlTGlzdERhdGE/Lmxlbmd0aCAmJiAhbm9EYXRhXCIgY2xhc3M9XCJjYXJkLWZvb3RlclwiPlxyXG4gICAgPGxpYi1wYWdpbmF0aW9uIFtpdGVtc1BlclBhZ2VdPVwicGFnZVNpemVcIiBbY3VycmVudFBhZ2VdPVwib2Zmc2V0XCIgW3RvdGFsSXRlbXNdPVwidG90YWxDb3VudFwiXHJcbiAgICBbcGFnaW5hdGlvblNpemVzXT1cInBhZ2luYXRpb25TaXplc1wiIFtwYWdlU2l6ZV09XCJwYWdlU2l6ZVwiIChwYWdlQ2hhbmdlKT1cIm9uUGFnZUNoYW5nZSgkZXZlbnQpXCJcclxuICAgIChwYWdlU2l6ZUNoYW5nZSk9XCJvblBhZ2VTaXplQ2hhbmdlKCRldmVudClcIj48L2xpYi1wYWdpbmF0aW9uPlxyXG48L2Rpdj5cclxuXHJcbjxuZy10ZW1wbGF0ZSAjYnVsa1VwbG9hZFBvcHVwIGxldC1tb2RlbD5cclxuICAgIDxkaXYgY2xhc3M9XCJwLTVcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLWJvZHkgcHktMCBkLWZsZXggZmxleC1zdGFydCBmbGV4LWNvbHVtbiBwLTUgdGV4dC1ub3dyYXBcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibXktNSBkLWZsZXhcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJzeW1ib2wgc3ltYm9sLTc1cHggc3ltYm9sLWNpcmNsZVwiPjxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHdpZHRoPVwiNDBcIiBoZWlnaHQ9XCI0MFwiIHZpZXdCb3g9XCIwIDAgNDAgNDBcIiBmaWxsPVwibm9uZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxyZWN0IHdpZHRoPVwiNDBcIiBoZWlnaHQ9XCI0MFwiIHJ4PVwiMjBcIiBmaWxsPVwiI0RBRjFGRlwiLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPVwiTTI3LjUgMjIuNVYyNS44MzMzQzI3LjUgMjYuMjc1NCAyNy4zMjQ0IDI2LjY5OTMgMjcuMDExOCAyNy4wMTE4QzI2LjY5OTMgMjcuMzI0NCAyNi4yNzU0IDI3LjUgMjUuODMzMyAyNy41SDE0LjE2NjdDMTMuNzI0NiAyNy41IDEzLjMwMDcgMjcuMzI0NCAxMi45ODgyIDI3LjAxMThDMTIuNjc1NiAyNi42OTkzIDEyLjUgMjYuMjc1NCAxMi41IDI1LjgzMzNWMjIuNU0yNC4xNjY3IDE2LjY2NjdMMjAgMTIuNU0yMCAxMi41TDE1LjgzMzMgMTYuNjY2N00yMCAxMi41VjIyLjVcIiBzdHJva2U9XCIjMDBBM0ZGXCIgc3Ryb2tlLXdpZHRoPVwiMS42NjY2N1wiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtcy0zIHB0LTIgZnMtNCB0ZXh0LWdyYXktODAwIHRleHQtaG92ZXItcHJpbWFyeSBmdy1ib2xkIG1iLTAgdGl0bGUgY3Vyc29yLXBvaW50ZXJcIj5CdWxrIFVwbG9hZDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvdyB3LTEwMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTEyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ1cGxvYWQtdGV4dFwiPlN0ZXAxIC0gPHNwYW4gY2xhc3M9XCJ0ZXh0LWRlY29yYXRpb24tdW5kZXJsaW5lIHRleHQtcHJpbWFyeSBkb3dubG9hZC10ZXh0XCI+PHNwYW4gKGNsaWNrKT1cImRvd25sb2FkVGVtcGxhdGVWMigpXCIgY2xhc3M9XCJjdXJzb3ItcG9pbnRlclwiPkRvd25sb2FkIHRoZSB0ZW1wbGF0ZSBoZXJlPC9zcGFuPjwvc3Bhbj48L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInVwbG9hZC10ZXh0XCI+U3RlcDIgLSBBZGQgeW91ciBkYXRhIHRvIHRoZSBUZW1wbGF0ZSBGaWxlIHdpdGggZXhpc3Rpbmcgc3RvcmUgZGF0YTwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidXBsb2FkLXRleHRcIj5TdGVwMyAtIFVwbG9hZCBpdCBiZWxvdyBmb3IgcHJvY2Vzc2luZzwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibm90ZS10ZXh0XCI+KipOb3RlIDogT24gdXBsb2FkaW5nLCBhbGwgdGhlIGV4aXN0aW5nIGRhdGEgd2lsbCBiZSByZXBsYWNlZDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtZm9vdGVyIGJvcmRlci0wIHRleHQtZW5kIG10LTMgcHQtMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLW1kIGJ0bi1kZWZhdWx0IGJ0bi1vdXRsaW5lXCIgKGNsaWNrKT1cIm1vZGVsLmNsb3NlKClcIj5DYW5jZWw8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuICBweS0zIGJ0bi1kZWZhdWx0IG1zLTMgYnRuLXByaW1hcnlcIiAoY2xpY2spPVwiZmlsZTEuY2xpY2soKVwiPlVwbG9hZDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgIDxpbnB1dCBzdHlsZT1cInZpc2liaWxpdHk6IGhpZGRlbjtcIiAjZmlsZTEgdHlwZT1cImZpbGVcIiBpZD1cImt0X2FjY291bnRfdGVhbV9zaXplX3NlbGVjdF8yXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjaGFuZ2UpPVwib25GaWxlVXBsb2FkKCRldmVudClcIiAvPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuXHJcbjwvbmctdGVtcGxhdGU+Il19
441
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RvcmUtdGltZS1jb25maWd1cmF0aW9uLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3RhbmdvLW1hbmFnZS1zZXR0aW5ncy9zcmMvbGliL2NvbXBvbmVudHMvY29uZmlndXJhdGlvbnMvc3RvcmUtdGltZS1jb25maWd1cmF0aW9uL3N0b3JlLXRpbWUtY29uZmlndXJhdGlvbi5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90YW5nby1tYW5hZ2Utc2V0dGluZ3Mvc3JjL2xpYi9jb21wb25lbnRzL2NvbmZpZ3VyYXRpb25zL3N0b3JlLXRpbWUtY29uZmlndXJhdGlvbi9zdG9yZS10aW1lLWNvbmZpZ3VyYXRpb24uY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFxQixTQUFTLEVBQWMsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBR3BGLE9BQU8sS0FBSyxJQUFJLE1BQU0sTUFBTSxDQUFDO0FBRTdCLE9BQU8sRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sTUFBTSxDQUFDOzs7Ozs7OztBQU8xQyxNQUFNLE9BQU8sK0JBQStCO0lBU3hCO0lBQW1DO0lBQW9DO0lBQThCO0lBQXdCO0lBUC9JLFdBQVcsQ0FBSztJQUNoQixnQkFBZ0IsR0FBRSxLQUFLLENBQUM7SUFDeEIsVUFBVSxDQUFLO0lBQ2YsV0FBVyxHQUFLLEVBQUUsQ0FBQztJQUNuQixLQUFLLEdBQUMsRUFBRSxDQUFDO0lBQ1QsTUFBTSxHQUFDLENBQUMsQ0FBQztJQUNVLFFBQVEsR0FBRyxJQUFJLE9BQU8sRUFBRSxDQUFDO0lBQzlDLFlBQW9CLFlBQXlCLEVBQVUsU0FBMkIsRUFBUyxZQUFxQixFQUFTLEVBQWUsRUFBUyxFQUFvQjtRQUFqSixpQkFBWSxHQUFaLFlBQVksQ0FBYTtRQUFVLGNBQVMsR0FBVCxTQUFTLENBQWtCO1FB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SixVQUFVO3NCQUE3QixTQUFTO3VCQUFDLE9BQU87Z0JBQ1ksZUFBZTtzQkFBNUMsU0FBUzt1QkFBQyxpQkFBaUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDaGFuZ2VEZXRlY3RvclJlZiwgQ29tcG9uZW50LCBFbGVtZW50UmVmLCBWaWV3Q2hpbGQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgTmdiTW9kYWwsIE5nYk1vZGFsUmVmIH0gZnJvbSAnQG5nLWJvb3RzdHJhcC9uZy1ib290c3RyYXAnO1xyXG5pbXBvcnQgeyBUb2FzdFNlcnZpY2UgfSBmcm9tICd0YW5nby1hcHAtdWktc2hhcmVkJztcclxuaW1wb3J0ICogYXMgWExTWCBmcm9tICd4bHN4JztcclxuaW1wb3J0IHsgQ2xpZW50QXBpU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL2NsaWVudC1hcGkuc2VydmljZSc7XHJcbmltcG9ydCB7IFN1YmplY3QsIHRha2VVbnRpbCB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBFeGNlbFNlcnZpY2UgfSBmcm9tIFwiLi4vLi4vLi4vc2VydmljZXMvZXhjZWwuc2VydmljZVwiOyBcclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdsaWItc3RvcmUtdGltZS1jb25maWd1cmF0aW9uJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vc3RvcmUtdGltZS1jb25maWd1cmF0aW9uLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybDogJy4vc3RvcmUtdGltZS1jb25maWd1cmF0aW9uLmNvbXBvbmVudC5zY3NzJ1xyXG59KVxyXG5leHBvcnQgY2xhc3MgU3RvcmVUaW1lQ29uZmlndXJhdGlvbkNvbXBvbmVudCB7XHJcblxyXG4gIHNlYXJjaFZhbHVlOmFueTtcclxuICBkb3dubG9hZERyb3BEb3duID1mYWxzZTtcclxuICBjbGllbnREYXRhOmFueTtcclxuICB0YWJsZU9iamVjdDphbnk9e307XHJcbiAgbGltaXQ9MTA7XHJcbiAgb2Zmc2V0PTE7XHJcbiAgICBwcml2YXRlIHJlYWRvbmx5IGRlc3Ryb3kkID0gbmV3IFN1YmplY3QoKTtcclxuY29uc3RydWN0b3IocHJpdmF0ZSBleGNlbFNlcnZpY2U6RXhjZWxTZXJ2aWNlLCBwcml2YXRlIGNsaWVudEFwaTogQ2xpZW50QXBpU2VydmljZSxwcml2YXRlIG1vZGFsU2VydmljZTpOZ2JNb2RhbCxwcml2YXRlIHRzOlRvYXN0U2VydmljZSxwcml2YXRlIGNkOkNoYW5nZURldGVjdG9yUmVmKXtcclxuICAgdGhpcy5jbGllbnRBcGkuY2xpZW50RGF0YS5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKChlKSA9PiB7XHJcbiAgICAgIGlmIChlKSB7XHJcbiAgICAgICAgdGhpcy5jbGllbnREYXRhID0gZTtcclxuICAgICAgICBsZXQgb2JqID17XHJcbiAgICAgICAgICBjbGllbnRJZDp0aGlzLmNsaWVudERhdGE/LmNsaWVudElkLFxyXG4gICAgICAgICAgbGltaXQ6dGhpcy5saW1pdCxcclxuICAgICAgICAgIG9mZnNldDp0aGlzLm9mZnNldCxcclxuICAgICAgICAgIHNvcnRPcmRlcjp0aGlzLnNvcnRPcmRlcixcclxuICAgICAgICAgIHNvcnRCeTp0aGlzLnNvcnRlZENvbHVtbixcclxuICAgICAgICAgIHNlYXJjaFZhbHVlOnRoaXMuc2VhcmNoVmFsdWVcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy50YWJsZU9iamVjdCA9b2JqO1xyXG4gICAgIHRoaXMuZ2V0RGF0YSgpO1xyXG4gICAgICB9XHJcbiAgICB9KVxyXG59XHJcblxyXG5zdG9yZUxpc3REYXRhOmFueTtcclxudG90YWxDb3VudDowO1xyXG5sb2FkaW5nID10cnVlO1xyXG5ub0RhdGEgPWZhbHNlO1xyXG5nZXREYXRhKCl7XHJcbiAgdGhpcy5sb2FkaW5nID10cnVlO1xyXG4gIHRoaXMubm9EYXRhID1mYWxzZTtcclxuICB0aGlzLmNsaWVudEFwaS5nZXRPcGVuQ2xvc2VMaXN0KHRoaXMudGFibGVPYmplY3QpLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKS5zdWJzY3JpYmUoe1xyXG4gICAgbmV4dDogKHJlcykgPT4ge1xyXG4gICAgICBpZihyZXMgJiYgcmVzLmNvZGUgPT0yMDApe1xyXG4gICAgICAgIHRoaXMuc3RvcmVMaXN0RGF0YSA9IHJlcz8uZGF0YT8ucmVzdWx0O1xyXG4gICAgICB0aGlzLnRvdGFsQ291bnQgPSByZXM/LmRhdGE/LmNvdW50O1xyXG4gICAgICB0aGlzLmxvYWRpbmcgPWZhbHNlO1xyXG4gICAgICB0aGlzLm5vRGF0YSA9ZmFsc2U7XHJcbiAgICAgIHRoaXMuc2V0UGFnaW5hdGlvblNpemVzKCk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5zdG9yZUxpc3REYXRhID1bXTtcclxuICAgICAgICB0aGlzLnRvdGFsQ291bnQgPTA7XHJcbiAgICAgICAgdGhpcy5sb2FkaW5nID1mYWxzZTtcclxuICAgICAgICB0aGlzLm5vRGF0YSA9dHJ1ZTtcclxuICAgICAgfVxyXG4gICAgfSxcclxuICAgIGVycm9yOiAoZXJyKT0+e1xyXG4gICAgICB0aGlzLnN0b3JlTGlzdERhdGEgPVtdO1xyXG4gICAgICB0aGlzLnRvdGFsQ291bnQgPTA7XHJcbiAgICAgIHRoaXMubG9hZGluZyA9ZmFsc2U7XHJcbiAgICAgIHRoaXMubm9EYXRhID10cnVlO1xyXG4gICAgfVxyXG4gIH0pXHJcbiAgXHJcbn1cclxuc29ydGVkQ29sdW1uOiBhbnk7XHJcbnNvcnRPcmRlcjogYW55O1xyXG5vblNvcnQoY29sdW1uOiBzdHJpbmcpIHtcclxuICBpZiAodGhpcy5zb3J0ZWRDb2x1bW4gPT09IGNvbHVtbikge1xyXG4gICAgdGhpcy5zb3J0T3JkZXIgPSB0aGlzLnNvcnRPcmRlciA9PT0gMSA/IC0xIDogMTtcclxuICB9IGVsc2Uge1xyXG4gICAgdGhpcy5zb3J0ZWRDb2x1bW4gPSBjb2x1bW47XHJcbiAgICB0aGlzLnNvcnRPcmRlciA9IDE7XHJcbiAgfVxyXG4gIHRoaXMudGFibGVPYmplY3QubGltaXQgPTEwO1xyXG50aGlzLnRhYmxlT2JqZWN0Lm9mZnNldCA9MTtcclxuICB0aGlzLnRhYmxlT2JqZWN0LnNvcnRCeSA9IHRoaXMuc29ydGVkQ29sdW1uLCBcclxuICB0aGlzLnRhYmxlT2JqZWN0LnNvcnRPcmRlciA9IHRoaXMuc29ydE9yZGVyLCBcclxuICB0aGlzLmdldERhdGEoKTtcclxufVxyXG5pc0VkaXRpbmcgPScnO1xyXG5lZGl0U3RvcmVMaXN0KGVkaXQ6YW55KXtcclxuICB0aGlzLmlzRWRpdGluZyA9ZWRpdDtcclxuICB0aGlzLnZhbGlkYXRlSW5pdGlhbENsb3NlVGltZXMoKTtcclxuIFxyXG59XHJcbnZhbGlkYXRlSW5pdGlhbENsb3NlVGltZXMoKSB7XHJcbiAgdGhpcy5zdG9yZUxpc3REYXRhLmZvckVhY2goKHN0b3JlOmFueSkgPT4ge1xyXG4gICAgaWYgKHRoaXMuY29udmVydFRpbWVUb0lucHV0Rm9ybWF0KHN0b3JlLmNsb3NlVGltZSkgPCB0aGlzLmNvbnZlcnRUaW1lVG9JbnB1dEZvcm1hdChzdG9yZS5vcGVuVGltZSkpIHtcclxuICAgICAgICBzdG9yZS5jbG9zZVRpbWUgPSBzdG9yZS5vcGVuVGltZTsgLy8gUmVzZXQgaW52YWxpZCBjbG9zZVRpbWVcclxuICAgIH1cclxufSk7XHJcbn1cclxuY29udmVydFRpbWVUb0lucHV0Rm9ybWF0KHRpbWU6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgaWYgKCF0aW1lKSByZXR1cm4gXCIwMDowMFwiOyAvLyBEZWZhdWx0IHZhbHVlXHJcbiAgcmV0dXJuIHRpbWUuc3Vic3RyaW5nKDAsIDUpOyAvLyBFeHRyYWN0IG9ubHkgSEg6bW1cclxufVxyXG4gIHNlYXJjaERhdGEoKXtcclxudGhpcy50YWJsZU9iamVjdC5zZWFyY2hWYWx1ZSA9dGhpcy5zZWFyY2hWYWx1ZSBcclxudGhpcy50YWJsZU9iamVjdC5saW1pdCA9MTA7XHJcbnRoaXMudGFibGVPYmplY3Qub2Zmc2V0ID0xO1xyXG50aGlzLnRhYmxlT2JqZWN0LnNvcnRCeSA9IHRoaXMuc29ydGVkQ29sdW1uLCBcclxudGhpcy50YWJsZU9iamVjdC5zb3J0T3JkZXIgPSB0aGlzLnNvcnRPcmRlcixcclxudGhpcy5nZXREYXRhKCk7XHJcbiAgfVxyXG5cclxuICBkcm9wRG93bjogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIG9wZW5Ecm9wZG93bihldmVudDphbnkpIHtcclxuICAgIHRoaXMuZHJvcERvd24gPSAhdGhpcy5kcm9wRG93bjtcclxuICB9XHJcbiAgICBAVmlld0NoaWxkKFwiaW5wdXRGaWxlXCIpIGlucHV0RmlsZTogRWxlbWVudFJlZjtcclxuICBvbkZpbGVVcGxvYWQoZXZlbnQ6IGFueSkge1xyXG4gICAgY29uc3QgaW5wdXQ6IEhUTUxJbnB1dEVsZW1lbnQgPSBldmVudC50YXJnZXQ7XHJcbiAgICBjb25zdCBmaWxlOiBGaWxlIHwgdW5kZWZpbmVkID0gaW5wdXQuZmlsZXM/LlswXTtcclxuICAgIC8vIENsZWFyIHRoZSBpbnB1dCBzbyBjaG9vc2luZyB0aGUgc2FtZSAoY29ycmVjdGVkKSBmaWxlIGFnYWluIHN0aWxsIGZpcmVzIChjaGFuZ2UpXHJcbiAgICBpbnB1dC52YWx1ZSA9IFwiXCI7XHJcbiAgICBpZiAoIWZpbGUpIHJldHVybjtcclxuXHJcbiAgY29uc3QgYWxsb3dlZEV4dGVuc2lvbnMgPSAvXFwuKHhsc3x4bHN4fGNzdikkL2k7XHJcbiAgY29uc3QgYWxsb3dlZFR5cGVzID0gW1xyXG4gICAgXCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuc3ByZWFkc2hlZXRtbC5zaGVldFwiLFxyXG4gICAgXCJhcHBsaWNhdGlvbi92bmQubXMtZXhjZWxcIixcclxuICAgIFwidGV4dC9jc3ZcIixcclxuICAgIFwiYXBwbGljYXRpb24vY3N2XCIsXHJcbiAgXTtcclxuXHJcbiAgaWYgKCFhbGxvd2VkRXh0ZW5zaW9ucy50ZXN0KGZpbGUubmFtZSkgfHwgIWFsbG93ZWRUeXBlcy5pbmNsdWRlcyhmaWxlLnR5cGUpKSB7XHJcbiAgICB0aGlzLnRzLmdldEVycm9yVG9hc3QoXCJPbmx5IC54bHMsIC54bHN4LCBvciAuY3N2IGZpbGVzIGFyZSBhbGxvd2VkLlwiKTtcclxuICAgIHJldHVybjtcclxuICB9XHJcbiAgICBjb25zdCBpc0NzdiA9IC9cXC5jc3YkL2kudGVzdChmaWxlLm5hbWUpO1xyXG4gICAgY29uc3QgcmVhZGVyOiBGaWxlUmVhZGVyID0gbmV3IEZpbGVSZWFkZXIoKTtcclxuICAgIHJlYWRlci5vbmVycm9yID0gKCkgPT4gdGhpcy50cy5nZXRFcnJvclRvYXN0KFwiVW5hYmxlIHRvIHJlYWQgdGhlIGZpbGUuIFBsZWFzZSB0cnkgYWdhaW4uXCIpO1xyXG4gICAgcmVhZGVyLm9ubG9hZCA9IChlOiBhbnkpID0+IHtcclxuICAgICAgICBsZXQgaGVhZGVyczogYW55W10gPSBbXTtcclxuICAgICAgICBsZXQgZGF0YTogYW55W10gPSBbXTtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICBjb25zdCB3YjogWExTWC5Xb3JrQm9vayA9IFhMU1gucmVhZChlLnRhcmdldC5yZXN1bHQsIHsgdHlwZTogaXNDc3YgPyAnc3RyaW5nJyA6ICdiaW5hcnknIH0pO1xyXG4gICAgICAgICAgICBjb25zdCB3czogWExTWC5Xb3JrU2hlZXQgPSB3Yi5TaGVldHNbd2IuU2hlZXROYW1lc1swXV07XHJcbiAgICAgICAgICAgIGhlYWRlcnMgPSAoWExTWC51dGlscy5zaGVldF90b19qc29uKHdzLCB7IGhlYWRlcjogMSB9KVswXSBhcyBhbnlbXSkgfHwgW107XHJcbiAgICAgICAgICAgIGRhdGEgPSBYTFNYLnV0aWxzLnNoZWV0X3RvX2pzb24od3MpO1xyXG4gICAgICAgIH0gY2F0Y2ggKGVycikge1xyXG4gICAgICAgICAgICB0aGlzLnRzLmdldEVycm9yVG9hc3QoXCJVbmFibGUgdG8gcmVhZCB0aGUgZmlsZS4gUGxlYXNlIHVwbG9hZCB0aGUgZG93bmxvYWRlZCB0ZW1wbGF0ZS5cIik7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5wcm9jZXNzVXBsb2FkZWREYXRhKGhlYWRlcnMsIGRhdGEpO1xyXG4gICAgfTtcclxuICAgIGlmIChpc0Nzdikge1xyXG4gICAgICAgIHJlYWRlci5yZWFkQXNUZXh0KGZpbGUpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgICByZWFkZXIucmVhZEFzQmluYXJ5U3RyaW5nKGZpbGUpO1xyXG4gICAgfVxyXG59XHJcblxyXG4vLyBWYWxpZGF0ZSBldmVyeSB1cGxvYWRlZCByb3c7IHRoZSBBUEkgaXMgY2FsbGVkIG9ubHkgd2hlbiB0aGUgd2hvbGUgZmlsZSBpcyB2YWxpZFxyXG5wcm9jZXNzVXBsb2FkZWREYXRhKGhlYWRlcnM6IGFueVtdLCBkYXRhOiBhbnlbXSkge1xyXG4gICAgY29uc3QgbWlzc2luZ0NvbHVtbnMgPSBbJ3N0b3JlTmFtZScsICdvcGVuVGltZScsICdjbG9zZVRpbWUnXS5maWx0ZXIoKGNvbCkgPT4gIWhlYWRlcnMuaW5jbHVkZXMoY29sKSk7XHJcbiAgICBpZiAobWlzc2luZ0NvbHVtbnMubGVuZ3RoKSB7XHJcbiAgICAgICAgdGhpcy5zaG93VXBsb2FkRXJyb3JzKFtgTWlzc2luZyBjb2x1bW4ocyk6ICR7bWlzc2luZ0NvbHVtbnMuam9pbignLCAnKX0uIFBsZWFzZSB1c2UgdGhlIGRvd25sb2FkZWQgdGVtcGxhdGUuYF0pO1xyXG4gICAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGlmICghZGF0YS5sZW5ndGgpIHtcclxuICAgICAgICB0aGlzLnRzLmdldEVycm9yVG9hc3QoXCJObyBzdG9yZSBkYXRhIGZvdW5kIGluIHRoZSBmaWxlLlwiKTtcclxuICAgICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgZXJyb3JzOiBzdHJpbmdbXSA9IFtdO1xyXG4gICAgY29uc3Qgc3RvcmVzID0gZGF0YS5tYXAoKHJvdzogYW55LCBpOiBudW1iZXIpID0+IHtcclxuICAgICAgICAvLyBfX3Jvd051bV9fIGlzIHRoZSAwLWJhc2VkIHNoZWV0IHJvdyBzZXQgYnkgc2hlZXRfdG9fanNvbjsgKzEgZ2l2ZXMgdGhlIHJvdyBudW1iZXIgc2hvd24gaW4gRXhjZWxcclxuICAgICAgICBjb25zdCByb3dObyA9IChyb3cuX19yb3dOdW1fXyA/PyBpICsgMSkgKyAxO1xyXG4gICAgICAgIGNvbnN0IHN0b3JlTmFtZSA9IFN0cmluZyhyb3cuc3RvcmVOYW1lID8/ICcnKS50cmltKCk7XHJcbiAgICAgICAgY29uc3QgbGFiZWwgPSBzdG9yZU5hbWUgPyBgUm93ICR7cm93Tm99ICgke3N0b3JlTmFtZX0pYCA6IGBSb3cgJHtyb3dOb31gO1xyXG4gICAgICAgIGNvbnN0IG9wZW5UaW1lID0gdGhpcy5jb252ZXJ0RXhjZWxUaW1lKHJvdy5vcGVuVGltZSk7XHJcbiAgICAgICAgY29uc3QgY2xvc2VUaW1lID0gdGhpcy5jb252ZXJ0RXhjZWxUaW1lKHJvdy5jbG9zZVRpbWUpO1xyXG5cclxuICAgICAgICBpZiAoIXN0b3JlTmFtZSkge1xyXG4gICAgICAgICAgICBlcnJvcnMucHVzaChgUm93ICR7cm93Tm99OiBTdG9yZSBuYW1lIGlzIG1pc3NpbmcuYCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghb3BlblRpbWUpIHtcclxuICAgICAgICAgICAgZXJyb3JzLnB1c2godGhpcy5pbnZhbGlkVGltZU1lc3NhZ2UobGFiZWwsICdPcGVuIHRpbWUnLCByb3cub3BlblRpbWUpKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKCFjbG9zZVRpbWUpIHtcclxuICAgICAgICAgICAgZXJyb3JzLnB1c2godGhpcy5pbnZhbGlkVGltZU1lc3NhZ2UobGFiZWwsICdDbG9zZSB0aW1lJywgcm93LmNsb3NlVGltZSkpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAob3BlblRpbWUgJiYgY2xvc2VUaW1lICYmIGNsb3NlVGltZSA8IG9wZW5UaW1lKSB7XHJcbiAgICAgICAgICAgIGVycm9ycy5wdXNoKGAke2xhYmVsfTogQ2xvc2UgdGltZSAke2Nsb3NlVGltZX0gaXMgYmVmb3JlIG9wZW4gdGltZSAke29wZW5UaW1lfS5gKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHsgc3RvcmVOYW1lLCBvcGVuVGltZSwgY2xvc2VUaW1lIH07XHJcbiAgICB9KTtcclxuXHJcbiAgICBpZiAoZXJyb3JzLmxlbmd0aCkge1xyXG4gICAgICAgIHRoaXMuc2hvd1VwbG9hZEVycm9ycyhlcnJvcnMpO1xyXG4gICAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIHRoaXMuc2F2ZVN0b3JlVGltZXMoc3RvcmVzLCAoKSA9PiB0aGlzLmJ1bGtVcGxvYWRNb2RhbFJlZj8uY2xvc2UoKSk7XHJcbn1cclxuXHJcbmludmFsaWRUaW1lTWVzc2FnZShsYWJlbDogc3RyaW5nLCBmaWVsZDogc3RyaW5nLCB2YWx1ZTogYW55KTogc3RyaW5nIHtcclxuICAgIHJldHVybiB2YWx1ZSA9PT0gdW5kZWZpbmVkIHx8IFN0cmluZyh2YWx1ZSkudHJpbSgpID09PSAnJ1xyXG4gICAgICAgID8gYCR7bGFiZWx9OiAke2ZpZWxkfSBpcyBtaXNzaW5nLmBcclxuICAgICAgICA6IGAke2xhYmVsfTogJHtmaWVsZH0gXCIke3ZhbHVlfVwiIGlzIG5vdCBhIHZhbGlkIHRpbWUgKHVzZSBISDptbSkuYDtcclxufVxyXG5cclxuc2hvd1VwbG9hZEVycm9ycyhlcnJvcnM6IHN0cmluZ1tdKSB7XHJcbiAgICBjb25zdCBtYXhTaG93biA9IDU7XHJcbiAgICBjb25zdCBsaW5lcyA9IGVycm9ycy5zbGljZSgwLCBtYXhTaG93bikubWFwKChlcnIpID0+IHRoaXMuZXNjYXBlSHRtbChlcnIpKTtcclxuICAgIGlmIChlcnJvcnMubGVuZ3RoID4gbWF4U2hvd24pIHtcclxuICAgICAgICBsaW5lcy5wdXNoKGAuLi5hbmQgJHtlcnJvcnMubGVuZ3RoIC0gbWF4U2hvd259IG1vcmVgKTtcclxuICAgIH1cclxuICAgIHRoaXMudHMuZ2V0RXJyb3JUb2FzdChgVXBsb2FkIGZhaWxlZDogJHtlcnJvcnMubGVuZ3RofSBlcnJvciR7ZXJyb3JzLmxlbmd0aCA+IDEgPyAncycgOiAnJ30gZm91bmQ8YnI+JHtsaW5lcy5qb2luKCc8YnI+Jyl9YCk7XHJcbn1cclxuXHJcbmVzY2FwZUh0bWwodmFsdWU6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICBjb25zdCBlbnRpdGllczogYW55ID0geyAnJic6ICcmYW1wOycsICc8JzogJyZsdDsnLCAnPic6ICcmZ3Q7JywgJ1wiJzogJyZxdW90OycsIFwiJ1wiOiAnJiMzOTsnIH07XHJcbiAgICByZXR1cm4gdmFsdWUucmVwbGFjZSgvWyY8PlwiJ10vZywgKGNoKSA9PiBlbnRpdGllc1tjaF0pO1xyXG59XHJcblxyXG4vLyBSZXR1cm5zIEhIOm1tOnNzLCBvciBudWxsIHdoZW4gdGhlIGNlbGwgaXMgYmxhbmsgb3Igbm90IGEgdmFsaWQgdGltZVxyXG5jb252ZXJ0RXhjZWxUaW1lKHZhbHVlOiBhbnkpOiBzdHJpbmcgfCBudWxsIHtcclxuICBpZiAodHlwZW9mIHZhbHVlID09PSBcIm51bWJlclwiKSB7XHJcbiAgICAgIC8vIEV4Y2VsIHN0b3JlcyB0aW1lIGFzIGEgZnJhY3Rpb24gb2YgYSBkYXk7IGEgd2hvbGUgbnVtYmVyIChlLmcuIDkpIGlzIGEgZGF0ZSwgbm90IGEgdGltZVxyXG4gICAgICBpZiAodmFsdWUgPCAwIHx8IChOdW1iZXIuaXNJbnRlZ2VyKHZhbHVlKSAmJiB2YWx1ZSAhPT0gMCkpIHJldHVybiBudWxsO1xyXG4gICAgICBsZXQgdG90YWxTZWNvbmRzID0gTWF0aC5yb3VuZCgodmFsdWUgJSAxKSAqIDI0ICogNjAgKiA2MCkgJSA4NjQwMDtcclxuICAgICAgbGV0IGhvdXJzID0gTWF0aC5mbG9vcih0b3RhbFNlY29uZHMgLyAzNjAwKTtcclxuICAgICAgbGV0IG1pbnV0ZXMgPSBNYXRoLmZsb29yKCh0b3RhbFNlY29uZHMgJSAzNjAwKSAvIDYwKTtcclxuICAgICAgbGV0IHNlY29uZHMgPSB0b3RhbFNlY29uZHMgJSA2MDtcclxuXHJcbiAgICAgIHJldHVybiB0aGlzLnBhZChob3VycykgKyBcIjpcIiArIHRoaXMucGFkKG1pbnV0ZXMpICsgXCI6XCIgKyB0aGlzLnBhZChzZWNvbmRzKTtcclxuICB9XHJcbiAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gXCJzdHJpbmdcIikge1xyXG4gICAgICAvLyBBY2NlcHRzIEg6bW0sIEhIOm1tLCBISDptbTpzcyBhbmQgMTItaG91ciB2YWx1ZXMgbGlrZSBcIjk6MzAgUE1cIlxyXG4gICAgICBjb25zdCBtYXRjaCA9IHZhbHVlLnRyaW0oKS5tYXRjaCgvXihcXGR7MSwyfSk6KFxcZHsyfSkoPzo6KFxcZHsyfSkpP1xccyooW2FwXW0pPyQvaSk7XHJcbiAgICAgIGlmICghbWF0Y2gpIHJldHVybiBudWxsO1xyXG4gICAgICBsZXQgaG91cnMgPSBOdW1iZXIobWF0Y2hbMV0pO1xyXG4gICAgICBjb25zdCBtaW51dGVzID0gTnVtYmVyKG1hdGNoWzJdKTtcclxuICAgICAgY29uc3Qgc2Vjb25kcyA9IE51bWJlcihtYXRjaFszXSB8fCAwKTtcclxuICAgICAgY29uc3QgbWVyaWRpZW0gPSBtYXRjaFs0XT8udG9Mb3dlckNhc2UoKTtcclxuICAgICAgaWYgKG1lcmlkaWVtKSB7XHJcbiAgICAgICAgICBpZiAoaG91cnMgPCAxIHx8IGhvdXJzID4gMTIpIHJldHVybiBudWxsO1xyXG4gICAgICAgICAgaG91cnMgPSAoaG91cnMgJSAxMikgKyAobWVyaWRpZW0gPT09ICdwbScgPyAxMiA6IDApO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChob3VycyA+IDIzIHx8IG1pbnV0ZXMgPiA1OSB8fCBzZWNvbmRzID4gNTkpIHJldHVybiBudWxsO1xyXG4gICAgICByZXR1cm4gdGhpcy5wYWQoaG91cnMpICsgXCI6XCIgKyB0aGlzLnBhZChtaW51dGVzKSArIFwiOlwiICsgdGhpcy5wYWQoc2Vjb25kcyk7XHJcbiAgfVxyXG5cclxuICByZXR1cm4gbnVsbDtcclxufVxyXG5cclxucGFkKG51bTogbnVtYmVyKTogc3RyaW5nIHtcclxuICByZXR1cm4gbnVtIDwgMTAgPyBcIjBcIiArIG51bSA6IG51bS50b1N0cmluZygpO1xyXG59XHJcbiAgQFZpZXdDaGlsZCgnZmlsZTEnKSBmaWxlSW5wdXQxITogRWxlbWVudFJlZjtcclxuICBAVmlld0NoaWxkKCdidWxrVXBsb2FkUG9wdXAnKSBidWxrVXBsb2FkUG9wdXA6IGFueTtcclxuICBidWxrVXBsb2FkTW9kYWxSZWY6IE5nYk1vZGFsUmVmIHwgdW5kZWZpbmVkO1xyXG4gIGRvd25sb2FkVGVtcGxhdGUoKXtcclxuICAgIHRoaXMuYnVsa1VwbG9hZE1vZGFsUmVmID0gdGhpcy5tb2RhbFNlcnZpY2Uub3Blbih0aGlzLmJ1bGtVcGxvYWRQb3B1cCwge1xyXG4gICAgICBjZW50ZXJlZDogdHJ1ZSxcclxuICAgICAgLy8gc2l6ZTogXCJsZ1wiLFxyXG4gICAgICBzY3JvbGxhYmxlOiB0cnVlLFxyXG4gICAgfSk7XHJcbiAgICB0aGlzLmRyb3BEb3duID1mYWxzZTtcclxuICB9XHJcblxyXG4gIGRvd25sb2FkVGVtcGxhdGVWMigpIHtcclxuICAgIHRoaXMudGFibGVPYmplY3QuZXhwb3J0ID0gdHJ1ZVxyXG4gICAgdGhpcy5jbGllbnRBcGkuZ2V0T3BlbkNsb3NlTGlzdGV4cG9ydCh0aGlzLnRhYmxlT2JqZWN0KS5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKHtcclxuICAgIG5leHQ6IChyZXMpID0+IHtcclxuICAgICAgaWYocmVzKXtcclxuICAgICAgICB0aGlzLnRhYmxlT2JqZWN0LmV4cG9ydCA9ZmFsc2VcclxuICAgICAgIHRoaXMuZXhjZWxTZXJ2aWNlLnNhdmVBc0V4Y2VsRmlsZShyZXMsICdzdG9yZSBvcGVuJmNsb3NlIHRpbWUnKVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICB9KVxyXG4gIH1cclxuICBvbkNhbmNlbCgpe1xyXG4gICAgdGhpcy5pc0VkaXRpbmcgPScnXHJcbiAgfVxyXG4gIHVwZGF0ZUNsb3NlVGltZShzdG9yZTogYW55KSB7XHJcbiAgICBpZiAodGhpcy5jb252ZXJ0VGltZVRvSW5wdXRGb3JtYXQoc3RvcmUuY2xvc2VUaW1lKSA8IHRoaXMuY29udmVydFRpbWVUb0lucHV0Rm9ybWF0KHN0b3JlLm9wZW5UaW1lKSkge1xyXG4gICAgICBzdG9yZS5jbG9zZVRpbWUgPSBzdG9yZS5vcGVuVGltZTsgXHJcbiAgfVxyXG59XHJcblxyXG52YWxpZGF0ZUNsb3NlVGltZSgpIHtcclxuICBsZXQgaXNWYWxpZCA9IHRydWU7XHJcbiAgdGhpcy5zdG9yZUxpc3REYXRhLmZvckVhY2goKHN0b3JlOiBhbnkpID0+IHtcclxuICBpZiAoKHN0b3JlLmNsb3NlVGltZSkgPCAoc3RvcmUub3BlblRpbWUpKSB7XHJcbiAgICAgIHN0b3JlLnNob3dFcnJvciA9IHRydWU7XHJcbiAgICAgIGlzVmFsaWQgPSBmYWxzZTtcclxuICB9IGVsc2Uge1xyXG4gICAgICBzdG9yZS5zaG93RXJyb3IgPSBmYWxzZTtcclxuICB9XHJcbiAgfSlcclxuXHJcbiAgcmV0dXJuIGlzVmFsaWQ7XHJcbn1cclxuZm9ybWF0VGltZSh0aW1lOiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gIGlmICghdGltZSkgcmV0dXJuIFwiMDA6MDA6MDBcIjsgLy8gRGVmYXVsdCBmYWxsYmFja1xyXG4gIGlmICh0aW1lLmxlbmd0aCA9PT0gOCkgcmV0dXJuIHRpbWU7XHJcbiAgaWYgKHRpbWUubGVuZ3RoID09PSA1KSByZXR1cm4gdGltZSArIFwiOjAwXCI7XHJcblxyXG4gIHJldHVybiB0aW1lOyBcclxufVxyXG4gIG9uU3VibWl0KCl7XHJcbiAgICBjb25zdCBpc1ZhbGlkID0gdGhpcy52YWxpZGF0ZUNsb3NlVGltZSgpO1xyXG5cclxuICAgIGlmICghaXNWYWxpZCkge1xyXG4gICAgICAgIGNvbnNvbGUud2FybihcIlZhbGlkYXRpb24gZmFpbGVkLiBBUEkgY2FsbCBzdG9wcGVkLlwiKTtcclxuICAgICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICB0aGlzLnNhdmVTdG9yZVRpbWVzKHRoaXMuc3RvcmVMaXN0RGF0YSk7XHJcbiAgfVxyXG4gIHNhdmVTdG9yZVRpbWVzKHN0b3JlczogYW55W10sIG9uU2F2ZWQ/OiAoKSA9PiB2b2lkKXtcclxuICAgIGxldCBvYmogPSB7XHJcbiAgICAgIFwiY2xpZW50SWRcIjogdGhpcy5jbGllbnREYXRhLmNsaWVudElkLFxyXG4gICAgICBcInN0b3Jlc1wiOiBzdG9yZXMubWFwKChzdG9yZTogYW55KSA9PiAoe1xyXG4gICAgICAgICAgICBcInN0b3JlTmFtZVwiOiBzdG9yZS5zdG9yZU5hbWUsXHJcbiAgICAgICAgICAgIFwib3BlblRpbWVcIjogdGhpcy5mb3JtYXRUaW1lKHN0b3JlLm9wZW5UaW1lKSxcclxuICAgICAgICAgICAgXCJjbG9zZVRpbWVcIjogdGhpcy5mb3JtYXRUaW1lKHN0b3JlLmNsb3NlVGltZSlcclxuICAgICAgICB9KSlcclxuICB9O1xyXG4gIHRoaXMuY2xpZW50QXBpLmdldFVwZGF0ZU9wZW5DbG9zZUxpc3Qob2JqKS5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKHtcclxuICAgIG5leHQ6IChyZXMpID0+IHtcclxuICAgICAgaWYocmVzICYmIHJlcy5jb2RlID09MjAwKXtcclxuICAgICAgICB0aGlzLnRzLmdldFN1Y2Nlc3NUb2FzdCgnU3RvcmUgb3BlbiBhbmQgY2xvc2UgdGltZSB1cGRhdGVkIHN1Y2Nlc3NmdWxseScpXHJcbiAgICAgICAgdGhpcy5nZXREYXRhKCk7XHJcbiAgICAgICAgdGhpcy5pc0VkaXRpbmcgPScnXHJcbiAgICAgICAgb25TYXZlZD8uKCk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy50cy5nZXRFcnJvclRvYXN0KHJlcz8ubWVzc2FnZSB8fCAnVW5hYmxlIHRvIHVwZGF0ZSBzdG9yZSBvcGVuIGFuZCBjbG9zZSB0aW1lJylcclxuICAgICAgfVxyXG4gICAgfSxlcnJvcjooZXJyOmFueSk9PntcclxuICAgICAgdGhpcy50cy5nZXRFcnJvclRvYXN0KGVycj8uZXJyb3I/LmVycm9yID8gZXJyPy5lcnJvcj8uZXJyb3I6IGVycj8uZXJyb3I/Lm1lc3NhZ2UpXHJcbiAgICB9XHJcbiAgfSlcclxuICB9XHJcbiAgcGFnaW5hdGlvblNpemVzOmFueVtdID0gW107XHJcbiAgcGFnZVNpemUgPSAxMDtcclxuICBzZXRQYWdpbmF0aW9uU2l6ZXMoKSB7XHJcbiAgICBpZiAodGhpcy50b3RhbENvdW50ID4gMTApIHtcclxuICAgICAgdGhpcy5wYWdpbmF0aW9uU2l6ZXMgPSBbMTAsIDIwLCAzMF07XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLnBhZ2luYXRpb25TaXplcyA9IFt0aGlzLnRvdGFsQ291bnRdOyAvLyBKdXN0IG9uZSBvcHRpb24gaWYgbGVzcyB0aGFuIDEwXHJcbiAgICB9XHJcbiAgICB0aGlzLnBhZ2VTaXplID0gdGhpcy5wYWdpbmF0aW9uU2l6ZXNbMF07XHJcbiAgfVxyXG4gIG9uUGFnZUNoYW5nZShwYWdlT2Zmc2V0OiBudW1iZXIpIHtcclxuICAgIFxyXG4gICAgdGhpcy5sb2FkaW5nID0gdHJ1ZTtcclxuICAgIHRoaXMubm9EYXRhID0gZmFsc2U7XHJcbiAgICB0aGlzLm9mZnNldCA9IE51bWJlcihwYWdlT2Zmc2V0KTtcclxuICAgIGxldCBvYmogPXtcclxuICAgICAgY2xpZW50SWQ6dGhpcy5jbGllbnREYXRhPy5jbGllbnRJZCxcclxuICAgICAgbGltaXQ6dGhpcy5saW1pdCxcclxuICAgICAgb2Zmc2V0OnRoaXMub2Zmc2V0LFxyXG4gICAgICBzb3J0T3JkZXI6dGhpcy5zb3J0T3JkZXIsXHJcbiAgICAgIHNvcnRCeTp0aGlzLnNvcnRlZENvbHVtbixcclxuICAgICAgc2VhcmNoVmFsdWU6dGhpcy5zZWFyY2hWYWx1ZSBcclxuICAgIH1cclxuICAgIHRoaXMuY2xpZW50QXBpLmdldE9wZW5DbG9zZUxpc3Qob2JqKS5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKHtcclxuICAgICAgbmV4dDogKHJlcykgPT4ge1xyXG4gICAgICAgIGlmKHJlcyAmJiByZXMuY29kZSA9PTIwMCl7XHJcbiAgICAgICAgICB0aGlzLnN0b3JlTGlzdERhdGEgPSByZXM/LmRhdGE/LnJlc3VsdDtcclxuICAgICAgICB0aGlzLnRvdGFsQ291bnQgPSByZXM/LmRhdGE/LmNvdW50O1xyXG4gICAgICAgIHRoaXMubG9hZGluZyA9ZmFsc2U7XHJcbiAgICAgICAgdGhpcy5ub0RhdGEgPWZhbHNlO1xyXG4gICAgICAgXHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHRoaXMuc3RvcmVMaXN0RGF0YSA9W107XHJcbiAgICAgICAgICB0aGlzLnRvdGFsQ291bnQgPTA7XHJcbiAgICAgICAgICB0aGlzLmxvYWRpbmcgPWZhbHNlO1xyXG4gICAgICAgICAgdGhpcy5ub0RhdGEgPXRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgICB9LFxyXG4gICAgICBlcnJvcjogKGVycik9PntcclxuICAgICAgICB0aGlzLnN0b3JlTGlzdERhdGEgPVtdO1xyXG4gICAgICAgIHRoaXMudG90YWxDb3VudCA9MDtcclxuICAgICAgICB0aGlzLmxvYWRpbmcgPWZhbHNlO1xyXG4gICAgICAgIHRoaXMubm9EYXRhID10cnVlO1xyXG4gICAgICB9XHJcbiAgICB9KVxyXG4gIH1cclxuICBcclxuICBvblBhZ2VTaXplQ2hhbmdlKHBhZ2VTaXplOiBudW1iZXIpIHtcclxuICAgIHRoaXMub2Zmc2V0ID0xO1xyXG4gICAgdGhpcy5sb2FkaW5nID0gdHJ1ZTtcclxuICAgIHRoaXMubm9EYXRhID0gZmFsc2U7XHJcbiAgICB0aGlzLnBhZ2VTaXplID0gTnVtYmVyKHBhZ2VTaXplKTtcclxuICAgIHRoaXMubGltaXQgPSBOdW1iZXIocGFnZVNpemUpO1xyXG4gICAgbGV0IG9iaiA9e1xyXG4gICAgICBjbGllbnRJZDp0aGlzLmNsaWVudERhdGE/LmNsaWVudElkLFxyXG4gICAgICBsaW1pdDp0aGlzLmxpbWl0LFxyXG4gICAgICBvZmZzZXQ6dGhpcy5vZmZzZXQsXHJcbiAgICAgIHNvcnRPcmRlcjp0aGlzLnNvcnRPcmRlciAsXHJcbiAgICAgIHNvcnRCeTp0aGlzLnNvcnRlZENvbHVtbiAsXHJcbiAgICAgIHNlYXJjaFZhbHVlOnRoaXMuc2VhcmNoVmFsdWUgXHJcbiAgICB9XHJcbiAgICB0aGlzLmNsaWVudEFwaS5nZXRPcGVuQ2xvc2VMaXN0KG9iaikucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpLnN1YnNjcmliZSh7XHJcbiAgICAgIG5leHQ6IChyZXMpID0+IHtcclxuICAgICAgICBpZihyZXMgJiYgcmVzLmNvZGUgPT0yMDApe1xyXG4gICAgICAgICAgdGhpcy5zdG9yZUxpc3REYXRhID0gcmVzPy5kYXRhPy5yZXN1bHQ7XHJcbiAgICAgICAgdGhpcy50b3RhbENvdW50ID0gcmVzPy5kYXRhPy5jb3VudDtcclxuICAgICAgICB0aGlzLmxvYWRpbmcgPWZhbHNlO1xyXG4gICAgICAgIHRoaXMubm9EYXRhID1mYWxzZTtcclxuICAgICAgIFxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLnN0b3JlTGlzdERhdGEgPVtdO1xyXG4gICAgICAgICAgdGhpcy50b3RhbENvdW50ID0wO1xyXG4gICAgICAgICAgdGhpcy5sb2FkaW5nID1mYWxzZTtcclxuICAgICAgICAgIHRoaXMubm9EYXRhID10cnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgfSxcclxuICAgICAgZXJyb3I6IChlcnIpPT57XHJcbiAgICAgICAgdGhpcy5zdG9yZUxpc3REYXRhID1bXTtcclxuICAgICAgICB0aGlzLnRvdGFsQ291bnQgPTA7XHJcbiAgICAgICAgdGhpcy5sb2FkaW5nID1mYWxzZTtcclxuICAgICAgICB0aGlzLm5vRGF0YSA9dHJ1ZTtcclxuICAgICAgfVxyXG4gICAgfSlcclxuICB9XHJcbn1cclxuXHJcblxyXG5cclxuXHJcbiIsIjxkaXYgY2xhc3M9XCJyb3dcIj5cclxuICAgIDxuZy1jb250YWluZXI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImNvbC0xMiBtYi0yXCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXgganVzdGlmeS1jb250ZW50LWJldHdlZW4gYWxpZ24taXRlbXMtY2VudGVyXCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYmFkZ2UgYmFkZ2UtbGlnaHQtZGVmYXVsdFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibWUtMlwiPjxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHdpZHRoPVwiMTZcIiBoZWlnaHQ9XCIxNlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2aWV3Qm94PVwiMCAwIDE2IDE2XCIgZmlsbD1cIm5vbmVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxnIGNsaXAtcGF0aD1cInVybCgjY2xpcDBfOTUwM185NzU5MSlcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkPVwiTTcuOTk4NyAxMC42NjU0VjcuOTk4N003Ljk5ODcgNS4zMzIwM0g4LjAwNTM2TTE0LjY2NTQgNy45OTg3QzE0LjY2NTQgMTEuNjgwNiAxMS42ODA2IDE0LjY2NTQgNy45OTg3IDE0LjY2NTRDNC4zMTY4IDE0LjY2NTQgMS4zMzIwMyAxMS42ODA2IDEuMzMyMDMgNy45OTg3QzEuMzMyMDMgNC4zMTY4IDQuMzE2OCAxLjMzMjAzIDcuOTk4NyAxLjMzMjAzQzExLjY4MDYgMS4zMzIwMyAxNC42NjU0IDQuMzE2OCAxNC42NjU0IDcuOTk4N1pcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2U9XCIjNjY3MDg1XCIgc3Ryb2tlLXdpZHRoPVwiMS41XCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkZWZzPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxjbGlwUGF0aCBpZD1cImNsaXAwXzk1MDNfOTc1OTFcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHJlY3Qgd2lkdGg9XCIxNlwiIGhlaWdodD1cIjE2XCIgZmlsbD1cIndoaXRlXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2NsaXBQYXRoPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kZWZzPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJzdG9yZS1jb25mXCI+WW91IENhbiBFZGl0IG9ubHkgT3BlbiB0aW1lIGFuZCBDbG9zZSB0aW1lPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIWxvYWRpbmcgJiYgc3RvcmVMaXN0RGF0YT8ubGVuZ3RoICYmICFub0RhdGFcIj5cclxuICAgICAgICAgICAgICAgIDxidXR0b24gKm5nSWY9XCJpc0VkaXRpbmcgPT09JydcIiAoY2xpY2spPVwiZWRpdFN0b3JlTGlzdCgnZWRpdCcpXCIgdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGJ0bi1vdXRsaW5lIGFsaWduLWl0ZW1zLWVuZFwiPjxzcGFuIGNsYXNzPVwibWUtMlwiPjxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHdpZHRoPVwiMjBcIiBoZWlnaHQ9XCIyMFwiIHZpZXdCb3g9XCIwIDAgMjAgMjBcIiBmaWxsPVwibm9uZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxnIGNsaXAtcGF0aD1cInVybCgjY2xpcDBfOTk2NF80NDI2MilcIj5cclxuICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPVwiTTkuMTY3OTcgMy4zMzQxN0gzLjMzNDY0QzIuODkyNjEgMy4zMzQxNyAyLjQ2ODY4IDMuNTA5NzcgMi4xNTYxMiAzLjgyMjMzQzEuODQzNTYgNC4xMzQ4OSAxLjY2Nzk3IDQuNTU4ODEgMS42Njc5NyA1LjAwMDg0VjE2LjY2NzVDMS42Njc5NyAxNy4xMDk1IDEuODQzNTYgMTcuNTMzNSAyLjE1NjEyIDE3Ljg0NkMyLjQ2ODY4IDE4LjE1ODYgMi44OTI2MSAxOC4zMzQyIDMuMzM0NjQgMTguMzM0MkgxNS4wMDEzQzE1LjQ0MzMgMTguMzM0MiAxNS44NjczIDE4LjE1ODYgMTYuMTc5OCAxNy44NDZDMTYuNDkyNCAxNy41MzM1IDE2LjY2OCAxNy4xMDk1IDE2LjY2OCAxNi42Njc1VjEwLjgzNDJNMTUuNDE4IDIuMDg0MTdDMTUuNzQ5NSAxLjc1MjY1IDE2LjE5OTEgMS41NjY0MSAxNi42NjggMS41NjY0MUMxNy4xMzY4IDEuNTY2NDEgMTcuNTg2NCAxLjc1MjY1IDE3LjkxOCAyLjA4NDE3QzE4LjI0OTUgMi40MTU2OSAxOC40MzU3IDIuODY1MzMgMTguNDM1NyAzLjMzNDE3QzE4LjQzNTcgMy44MDMwMSAxOC4yNDk1IDQuMjUyNjUgMTcuOTE4IDQuNTg0MTdMMTAuMDAxMyAxMi41MDA4TDYuNjY3OTcgMTMuMzM0Mkw3LjUwMTMgMTAuMDAwOEwxNS40MTggMi4wODQxN1pcIiBzdHJva2U9XCIjMzQ0MDU0XCIgc3Ryb2tlLXdpZHRoPVwiMS42N1wiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiLz5cclxuICAgICAgICAgICAgICAgICAgICA8L2c+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRlZnM+XHJcbiAgICAgICAgICAgICAgICAgICAgPGNsaXBQYXRoIGlkPVwiY2xpcDBfOTk2NF80NDI2MlwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxyZWN0IHdpZHRoPVwiMjBcIiBoZWlnaHQ9XCIyMFwiIGZpbGw9XCJ3aGl0ZVwiLz5cclxuICAgICAgICAgICAgICAgICAgICA8L2NsaXBQYXRoPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGVmcz5cclxuICAgICAgICAgICAgICAgICAgICA8L3N2Zz48L3NwYW4+RWRpdCBTdG9yZSBUaW1lPC9idXR0b24+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJpc0VkaXRpbmcgPT09J2VkaXQnXCIgY2xhc3M9XCJkLWZsZXgganVzdGlmeS1jb250ZW50LWVuZFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8YSB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4gYnRuLW91dGxpbmUgbXQtMSBtZS00XCIgKGNsaWNrKT1cIm9uQ2FuY2VsKClcIj5DYW5jZWw8L2E+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxhIHR5cGU9XCJzdWJtaXRcIiBjbGFzcz1cImJ0biBidG4tcHJpbWFyeSBweC00IFwiIChjbGljayk9XCJvblN1Ym1pdCgpXCI+PHNwYW4+U2F2ZSBDaGFuZ2VzPC9zcGFuPjwvYT5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTkgbXQtM1wiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4XCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBwb3NpdGlvbi1yZWxhdGl2ZSBteS0xIHctNTBcIj5cclxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInN2Zy1pY29uIHN2Zy1pY29uLTEgcG9zaXRpb24tYWJzb2x1dGUgbXMtM1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB3aWR0aD1cIjI0XCIgaGVpZ2h0PVwiMjRcIiB2aWV3Qm94PVwiMCAwIDI0IDI0XCIgZmlsbD1cIm5vbmVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxyZWN0IG9wYWNpdHk9XCIwLjVcIiB4PVwiMTcuMDM2NVwiIHk9XCIxNS4xMjIzXCIgd2lkdGg9XCI4LjE1NTQ2XCIgaGVpZ2h0PVwiMlwiIHJ4PVwiMVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtPVwicm90YXRlKDQ1IDE3LjAzNjUgMTUuMTIyMylcIiBmaWxsPVwiY3VycmVudENvbG9yXCI+PC9yZWN0PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGhcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkPVwiTTExIDE5QzYuNTU1NTYgMTkgMyAxNS40NDQ0IDMgMTFDMyA2LjU1NTU2IDYuNTU1NTYgMyAxMSAzQzE1LjQ0NDQgMyAxOSA2LjU1NTU2IDE5IDExQzE5IDE1LjQ0NDQgMTUuNDQ0NCAxOSAxMSAxOVpNMTEgNUM3LjUzMzMzIDUgNSA3LjUzMzMzIDUgMTFDNSAxNC40NjY3IDcuNTMzMzMgMTcgMTEgMTdDMTQuNDY2NyAxNyAxNyAxNC40NjY3IDE3IDExQzE3IDcuNTMzMzMgMTQuNDY2NyA1IDExIDVaXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxsPVwiY3VycmVudENvbG9yXCI+PC9wYXRoPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cclxuICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgPGlucHV0IChjaGFuZ2UpPVwic2VhcmNoRGF0YSgpXCIgWyhuZ01vZGVsKV09XCJzZWFyY2hWYWx1ZVwiIHR5cGU9XCJ0ZXh0XCIgY2xhc3M9XCJmb3JtLWNvbnRyb2wgcHMtMTQgbWUtMlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGF1dG9jb21wbGV0ZT1cIm9mZlwiIHBsYWNlaG9sZGVyPVwiU2VhcmNoIHdpdGggU3RvcmUgTmFtZSwgU3RvcmUgSURcIiAvPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtMyBtdC0zIHRleHQtZW5kIHBzLTE1XCI+XHJcbiAgICAgICAgICAgIDxkaXYgIGNsYXNzPVwicG9zaXRpb24tcmVsYXRpdmUgdy0xMDAgbXQtNSBtYi01XCI+XHJcbiAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIlxyXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYnRuIHB5LTMgYnRuLWRlZmF1bHQgdy0xMDAgYnRuLW91dGxpbmUgYnRuLW91dGxpbmUtZGVmYXVsdCByb3VuZGVkLTMgdGV4dC1ub3dyYXAgYm9yZGVyLXZhbCBkLWZsZXgganVzdGlmeS1jb250ZW50LWJldHdlZW5cIj5cclxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1lLTMgY3Vyc29yLXBvaW50ZXJcIiAjdXBsb2FkIChjbGljayk9XCJpbnB1dEZpbGUuY2xpY2soKVwiPjxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHdpZHRoPVwiMjBcIiBoZWlnaHQ9XCIyMFwiIHZpZXdCb3g9XCIwIDAgMjAgMjBcIiBmaWxsPVwibm9uZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPVwiTTE3LjUgMTIuNVYxNS44MzMzQzE3LjUgMTYuMjc1NCAxNy4zMjQ0IDE2LjY5OTMgMTcuMDExOCAxNy4wMTE4QzE2LjY5OTMgMTcuMzI0NCAxNi4yNzU0IDE3LjUgMTUuODMzMyAxNy41SDQuMTY2NjdDMy43MjQ2NCAxNy41IDMuMzAwNzIgMTcuMzI0NCAyLjk4ODE2IDE3LjAxMThDMi42NzU1OSAxNi42OTkzIDIuNSAxNi4yNzU0IDIuNSAxNS44MzMzVjEyLjVNMTQuMTY2NyA2LjY2NjY3TDEwIDIuNU0xMCAyLjVMNS44MzMzMyA2LjY2NjY3TTEwIDIuNVYxMi41XCIgc3Ryb2tlPVwiIzM0NDA1NFwiIHN0cm9rZS13aWR0aD1cIjEuNjdcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIi8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPiA8c3BhbiBjbGFzcz1cInRlbXBsYXRlLWRyb3Bkb3duIGJnLXdoaXRlIG1zLTNcIj5CdWxrVXBsb2FkIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgPHNwYW4+PGlucHV0IHN0eWxlPVwiZGlzcGxheTogbm9uZTtcIiB0eXBlPVwiZmlsZVwiICNpbnB1dEZpbGUgYWNjZXB0ID0gXCIuY3N2LCBhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuc3ByZWFkc2hlZXRtbC5zaGVldCwgYXBwbGljYXRpb24vdm5kLm1zLWV4Y2VsXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWQ9XCJrdF9hY2NvdW50X3RlYW1fc2l6ZV9zZWxlY3RfMVwiIChjaGFuZ2UpPVwib25GaWxlVXBsb2FkKCRldmVudClcIiAvPjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInN1YnRpdGxlIG14LTMgbWUtMlwiPiB8IDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImN1cnNvci1wb2ludGVyXCIgKGNsaWNrKT1cIm9wZW5Ecm9wZG93bigkZXZlbnQpXCI+PHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgd2lkdGg9XCIyNFwiIGhlaWdodD1cIjI0XCIgdmlld0JveD1cIjAgMCAyNCAyNFwiIGZpbGw9XCJub25lXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNNiA5TDEyIDE1TDE4IDlcIiBzdHJva2U9XCIjMzQ0MDU0XCIgc3Ryb2tlLXdpZHRoPVwiMlwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiLz5cclxuICAgICAgICAgICAgICAgICAgICA8L3N2Zz48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuXHJcbiAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiZHJvcERvd25cIiBjbGFzcz1cImNhcmQgdGVtcGxhdGUtZHJvcGRvd24gaC00MHB4IHctMTAwIHBlLTUgcG9zaXRpb24tYWJzb2x1dGUgcm91bmRlZC0zIHotMSB0b3AtNTBweCBlbmQtMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDx1bCBjbGFzcz1cImxpc3QtdW5zdHlsZWQgbWItMCB3LWF1dG8gY3Vyc29yLXBvaW50ZXJcIiAoY2xpY2spPVwiZG93bmxvYWRUZW1wbGF0ZSgpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxsaSBjbGFzcz1cInBlLTUgZnctc2VtaWJvbGQgY3Vyc29yLXBvaW50ZXIgcHktMlwiPkRvd25sb2FkIFRlbXBsYXRlPC9saT5cclxuICAgICAgICAgICAgICAgICAgICA8L3VsPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGRpdiAqbmdJZj1cImRvd25sb2FkRHJvcERvd25cIlxyXG4gICAgICAgIGNsYXNzPVwiY2FyZCB3LWF1dG8gcHktMiBwb3NpdGlvbi1hYnNvbHV0ZSBwcm9kdWN0ZHJvcCB0b3AtMTBcIj5cclxuICAgICAgICA8dWwgY2xhc3M9XCJsaXN0LXVuc3R5bGVkIG1iLTJcIj5cclxuICAgICAgICAgICAgPGxpIGNsYXNzPVwicHJvZHVjdHRleHQgaXRlbXMgY3Vyc29yLXBvaW50ZXIgcC0yXCJcclxuICAgICAgICAgICAgICAgIChjbGljayk9XCJkb3dubG9hZFRlbXBsYXRlKClcIj5cclxuICAgICAgICAgICAgICAgIERvd25sb2FkIFRlbXBsYXRlPC9saT5cclxuICAgICAgICA8L3VsPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgPC9uZy1jb250YWluZXI+XHJcblxyXG48L2Rpdj5cclxuPG5nLWNvbnRhaW5lciAqbmdJZj1cIm5vRGF0YVwiID5cclxuICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIGp1c3RpZnktY29udGVudC1jZW50ZXJcIiA+XHJcbiAgICAgICAgPGltZyB3aWR0aD1cIjMwMHB4XCIgc3JjPVwiLi9hc3NldHMvdGFuZ28vSWNvbnMvTm9kYXRhLnN2Z1wiIGFsdD1cIlwiPiAgICBcclxuICAgICAgICA8L2Rpdj5cclxuPC9uZy1jb250YWluZXI+XHJcbiAgICBcclxuXHJcbjxuZy1jb250YWluZXIgKm5nSWY9XCJsb2FkaW5nXCIgID5cclxuPGRpdiBjbGFzcz1cInNoaW1tZXItY2FyZCB3LTEwMFwiPlxyXG4gICAgPGRpdiBjbGFzcz1cInJvdyBsb2FkZXIgIGQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIGFsaWduLWl0ZW1zLWNlbnRlclwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJzaGltbWVyXCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ3cmFwcGVyXCI+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInN0cm9rZSBhbmltYXRlIHRpdGxlXCI+PC9kaXY+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInN0cm9rZSBhbmltYXRlIGxpbmtcIj48L2Rpdj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic3Ryb2tlIGFuaW1hdGUgZGVzY3JpcHRpb25cIj48L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJzaGltbWVyXCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ3cmFwcGVyXCI+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInN0cm9rZSBhbmltYXRlIHRpdGxlXCI+PC9kaXY+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInN0cm9rZSBhbmltYXRlIGxpbmtcIj48L2Rpdj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic3Ryb2tlIGFuaW1hdGUgZGVzY3JpcHRpb25cIj48L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJzaGltbWVyXCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ3cmFwcGVyXCI+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInN0cm9rZSBhbmltYXRlIHRpdGxlXCI+PC9kaXY+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInN0cm9rZSBhbmltYXRlIGxpbmtcIj48L2Rpdj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic3Ryb2tlIGFuaW1hdGUgZGVzY3JpcHRpb25cIj48L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG48L2Rpdj5cclxuXHJcbjwvbmctY29udGFpbmVyPlxyXG48ZGl2ICAqbmdJZj1cIiFsb2FkaW5nICYmIHN0b3JlTGlzdERhdGE/Lmxlbmd0aCAmJiAhbm9EYXRhXCIgY2xhc3M9XCJjYXJkLWJvZHkgbXQtMlwiPlxyXG4gICAgPGRpdiBjbGFzcz1cInRhYmxlLXJlc3BvbnNpdmVcIj5cclxuICAgICAgICA8dGFibGUgY2xhc3M9XCJ3LTEwMCB0YWJsZSBib3R0b20tYm9yZGVyIHRleHQtbm93cmFwXCI+XHJcbiAgICAgICAgICAgIDx0aGVhZD5cclxuICAgICAgICAgICAgICAgIDx0cj5cclxuICAgICAgICAgICAgICAgICAgICA8dGg+PHNwYW4gY2xhc3M9XCJjdXJzb3ItcG9pbnRlclwiIChjbGljayk9XCJvblNvcnQoJ3N0b3JlTmFtZScpXCI+U3RvcmUgTmFtZSA8c3ZnIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJzb3J0ZWRDb2x1bW4gPT09ICdzdG9yZU5hbWUnICYmIHNvcnRPcmRlciA9PT0gMSA/ICdyb3RhdGUnIDogJydcIiB3aWR0aD1cIjE2XCIgaGVpZ2h0PVwiMTZcIiB2aWV3Qm94PVwiMCAwIDE2IDE2XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGw9XCJub25lXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQ9XCJNOC4wMDAxNiAzLjMzMzM3VjEyLjY2NjdNOC4wMDAxNiAxMi42NjY3TDEyLjY2NjggOC4wMDAwNE04LjAwMDE2IDEyLjY2NjdMMy4zMzM1IDguMDAwMDRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFthdHRyLnN0cm9rZV09XCJzb3J0ZWRDb2x1bW4gPT09ICdzdG9yZU5hbWUnID8gJyMwMEEzRkYnIDogJyM2NjcwODUnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2Utd2lkdGg9XCIxLjMzMzMzXCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+PC9zcGFuPjwvdGg+XHJcbiAgICAgICAgICAgICAgICAgICAgPHRoPjxzcGFuIGNsYXNzPVwiY3Vyc29yLXBvaW50ZXJcIiAoY2xpY2spPVwib25Tb3J0KCdvcGVuVGltZScpXCI+T3BlbiBUaW1lPHN2ZyBcclxuICAgICAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwic29ydGVkQ29sdW1uID09PSAnb3BlblRpbWUnICYmIHNvcnRPcmRlciA9PT0gMSA/ICdyb3RhdGUnIDogJydcIiB3aWR0aD1cIjE2XCIgaGVpZ2h0PVwiMTZcIiB2aWV3Qm94PVwiMCAwIDE2IDE2XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGw9XCJub25lXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQ9XCJNOC4wMDAxNiAzLjMzMzM3VjEyLjY2NjdNOC4wMDAxNiAxMi42NjY3TDEyLjY2NjggOC4wMDAwNE04LjAwMDE2IDEyLjY2NjdMMy4zMzM1IDguMDAwMDRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFthdHRyLnN0cm9rZV09XCJzb3J0ZWRDb2x1bW4gPT09ICdvcGVuVGltZScgPyAnIzAwQTNGRicgOiAnIzY2NzA4NSdcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZS13aWR0aD1cIjEuMzMzMzNcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPjwvdGg+XHJcbiAgICAgICAgICAgICAgICAgICAgPHRoPjxzcGFuIGNsYXNzPVwiY3Vyc29yLXBvaW50ZXJcIiAoY2xpY2spPVwib25Tb3J0KCdvcGVuVGltZScpXCI+Q2xvc2UgVGltZTxzdmcgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInNvcnRlZENvbHVtbiA9PT0gJ29wZW5UaW1lJyAmJiBzb3J0T3JkZXIgPT09IDEgPyAncm90YXRlJyA6ICcnXCIgd2lkdGg9XCIxNlwiIGhlaWdodD1cIjE2XCIgdmlld0JveD1cIjAgMCAxNiAxNlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxsPVwibm9uZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGhcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkPVwiTTguMDAwMTYgMy4zMzMzN1YxMi42NjY3TTguMDAwMTYgMTIuNjY2N0wxMi42NjY4IDguMDAwMDRNOC4wMDAxNiAxMi42NjY3TDMuMzMzNSA4LjAwMDA0XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYXR0ci5zdHJva2VdPVwic29ydGVkQ29sdW1uID09PSAnb3BlblRpbWUnID8gJyMwMEEzRkYnIDogJyM2NjcwODUnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2Utd2lkdGg9XCIxLjMzMzMzXCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+PC9zcGFuPjwvdGg+XHJcbiAgICAgICAgICAgICAgICA8L3RyPlxyXG4gICAgICAgICAgICA8L3RoZWFkPlxyXG4gICAgICAgICAgICA8dGJvZHk+XHJcbiAgICAgICAgICAgICAgICA8dHIgKm5nRm9yPVwibGV0IG9iaiBvZiBzdG9yZUxpc3REYXRhOyBsZXQgaT1pbmRleDtcIj5cclxuICAgICAgICAgICAgICAgICAgICA8dGQ+e3tvYmouc3RvcmVOYW1lfX08L3RkPlxyXG4gICAgICAgICAgICAgICAgICAgIDx0ZD48c3BhbiAqbmdJZj1cImlzRWRpdGluZz09PScnXCI+e3tmb3JtYXRUaW1lKG9iai5vcGVuVGltZSl9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0ICpuZ0lmPVwiaXNFZGl0aW5nPT09J2VkaXQnXCIgWyhuZ01vZGVsKV09XCJvYmoub3BlblRpbWVcIiAoY2hhbmdlKT1cInVwZGF0ZUNsb3NlVGltZShvYmopXCIgY2xhc3M9XCJmb3JtLWNvbnRyb2wgZm9ybS1jb250cm9sLXNtXCIgdHlwZT1cInRpbWVcIj5cclxuICAgICAgICAgICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgICAgICAgICAgIDx0ZD4gPHNwYW4gKm5nSWY9XCJpc0VkaXRpbmc9PT0nJ1wiPnt7IGZvcm1hdFRpbWUob2JqLmNsb3NlVGltZSkgfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCAqbmdJZj1cImlzRWRpdGluZz09PSdlZGl0J1wiIGNsYXNzPVwiZm9ybS1jb250cm9sIGZvcm0tY29udHJvbC1zbVwiIHR5cGU9XCJ0aW1lXCIgWyhuZ01vZGVsKV09XCJvYmouY2xvc2VUaW1lXCIgW21pbl09XCJvYmoub3BlblRpbWVcIiAoY2hhbmdlKT1cInZhbGlkYXRlQ2xvc2VUaW1lKClcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cIm9iai5zaG93RXJyb3JcIiBjbGFzcz1cInRleHQtZGFuZ2VyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBDbG9zZSB0aW1lIG11c3QgYmUgbGF0ZXIgdGhhbiBvcGVuIHRpbWUuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PiBcclxuICAgICAgICAgICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgICAgICAgPC90cj5cclxuICAgICAgICAgICAgPC90Ym9keT5cclxuICAgICAgICBcclxuICAgICAgICA8L3RhYmxlPlxyXG4gICAgPC9kaXY+XHJcbjwvZGl2PlxyXG48ZGl2ICpuZ0lmPVwiIWxvYWRpbmcgICYmIHN0b3JlTGlzdERhdGE/Lmxlbmd0aCAmJiAhbm9EYXRhXCIgY2xhc3M9XCJjYXJkLWZvb3RlclwiPlxyXG4gICAgPGxpYi1wYWdpbmF0aW9uIFtpdGVtc1BlclBhZ2VdPVwicGFnZVNpemVcIiBbY3VycmVudFBhZ2VdPVwib2Zmc2V0XCIgW3RvdGFsSXRlbXNdPVwidG90YWxDb3VudFwiXHJcbiAgICBbcGFnaW5hdGlvblNpemVzXT1cInBhZ2luYXRpb25TaXplc1wiIFtwYWdlU2l6ZV09XCJwYWdlU2l6ZVwiIChwYWdlQ2hhbmdlKT1cIm9uUGFnZUNoYW5nZSgkZXZlbnQpXCJcclxuICAgIChwYWdlU2l6ZUNoYW5nZSk9XCJvblBhZ2VTaXplQ2hhbmdlKCRldmVudClcIj48L2xpYi1wYWdpbmF0aW9uPlxyXG48L2Rpdj5cclxuXHJcbjxuZy10ZW1wbGF0ZSAjYnVsa1VwbG9hZFBvcHVwIGxldC1tb2RlbD5cclxuICAgIDxkaXYgY2xhc3M9XCJwLTVcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLWJvZHkgcHktMCBkLWZsZXggZmxleC1zdGFydCBmbGV4LWNvbHVtbiBwLTUgdGV4dC1ub3dyYXBcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibXktNSBkLWZsZXhcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJzeW1ib2wgc3ltYm9sLTc1cHggc3ltYm9sLWNpcmNsZVwiPjxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHdpZHRoPVwiNDBcIiBoZWlnaHQ9XCI0MFwiIHZpZXdCb3g9XCIwIDAgNDAgNDBcIiBmaWxsPVwibm9uZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxyZWN0IHdpZHRoPVwiNDBcIiBoZWlnaHQ9XCI0MFwiIHJ4PVwiMjBcIiBmaWxsPVwiI0RBRjFGRlwiLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPVwiTTI3LjUgMjIuNVYyNS44MzMzQzI3LjUgMjYuMjc1NCAyNy4zMjQ0IDI2LjY5OTMgMjcuMDExOCAyNy4wMTE4QzI2LjY5OTMgMjcuMzI0NCAyNi4yNzU0IDI3LjUgMjUuODMzMyAyNy41SDE0LjE2NjdDMTMuNzI0NiAyNy41IDEzLjMwMDcgMjcuMzI0NCAxMi45ODgyIDI3LjAxMThDMTIuNjc1NiAyNi42OTkzIDEyLjUgMjYuMjc1NCAxMi41IDI1LjgzMzNWMjIuNU0yNC4xNjY3IDE2LjY2NjdMMjAgMTIuNU0yMCAxMi41TDE1LjgzMzMgMTYuNjY2N00yMCAxMi41VjIyLjVcIiBzdHJva2U9XCIjMDBBM0ZGXCIgc3Ryb2tlLXdpZHRoPVwiMS42NjY2N1wiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtcy0zIHB0LTIgZnMtNCB0ZXh0LWdyYXktODAwIHRleHQtaG92ZXItcHJpbWFyeSBmdy1ib2xkIG1iLTAgdGl0bGUgY3Vyc29yLXBvaW50ZXJcIj5CdWxrIFVwbG9hZDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvdyB3LTEwMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTEyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ1cGxvYWQtdGV4dFwiPlN0ZXAxIC0gPHNwYW4gY2xhc3M9XCJ0ZXh0LWRlY29yYXRpb24tdW5kZXJsaW5lIHRleHQtcHJpbWFyeSBkb3dubG9hZC10ZXh0XCI+PHNwYW4gKGNsaWNrKT1cImRvd25sb2FkVGVtcGxhdGVWMigpXCIgY2xhc3M9XCJjdXJzb3ItcG9pbnRlclwiPkRvd25sb2FkIHRoZSB0ZW1wbGF0ZSBoZXJlPC9zcGFuPjwvc3Bhbj48L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInVwbG9hZC10ZXh0XCI+U3RlcDIgLSBBZGQgeW91ciBkYXRhIHRvIHRoZSBUZW1wbGF0ZSBGaWxlIHdpdGggZXhpc3Rpbmcgc3RvcmUgZGF0YTwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidXBsb2FkLXRleHRcIj5TdGVwMyAtIFVwbG9hZCBpdCBiZWxvdyBmb3IgcHJvY2Vzc2luZzwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibm90ZS10ZXh0XCI+KipOb3RlIDogT24gdXBsb2FkaW5nLCBhbGwgdGhlIGV4aXN0aW5nIGRhdGEgd2lsbCBiZSByZXBsYWNlZDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtZm9vdGVyIGJvcmRlci0wIHRleHQtZW5kIG10LTMgcHQtMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLW1kIGJ0bi1kZWZhdWx0IGJ0bi1vdXRsaW5lXCIgKGNsaWNrKT1cIm1vZGVsLmNsb3NlKClcIj5DYW5jZWw8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuICBweS0zIGJ0bi1kZWZhdWx0IG1zLTMgYnRuLXByaW1hcnlcIiAoY2xpY2spPVwiZmlsZTEuY2xpY2soKVwiPlVwbG9hZDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgIDxpbnB1dCBzdHlsZT1cInZpc2liaWxpdHk6IGhpZGRlbjtcIiAjZmlsZTEgdHlwZT1cImZpbGVcIiBpZD1cImt0X2FjY291bnRfdGVhbV9zaXplX3NlbGVjdF8yXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjaGFuZ2UpPVwib25GaWxlVXBsb2FkKCRldmVudClcIiAvPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuXHJcbjwvbmctdGVtcGxhdGU+Il19