libey-ng-component-library 0.0.18 → 0.0.19
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bundles/libey-ng-component-library.umd.js +1668 -21
- package/bundles/libey-ng-component-library.umd.js.map +1 -1
- package/esm2015/lib/libey-ng-component-library.module.js +22 -6
- package/esm2015/lib/signature/libey-ng-signature/libey-ng-signature.component.js +128 -0
- package/esm2015/lib/signature/libey-ng-signature.module.js +53 -0
- package/esm2015/public-api.js +9 -1
- package/esm2015/utils/SigWeb/SigWeb.js +1423 -0
- package/fesm2015/libey-ng-component-library.js +1619 -7
- package/fesm2015/libey-ng-component-library.js.map +1 -1
- package/lib/libey-ng-component-library.module.d.ts +3 -1
- package/lib/signature/libey-ng-signature/libey-ng-signature.component.d.ts +36 -0
- package/lib/signature/libey-ng-signature.module.d.ts +12 -0
- package/package.json +5 -1
- package/public-api.d.ts +8 -0
- package/utils/SigWeb/SigWeb.d.ts +218 -0
|
@@ -0,0 +1,1423 @@
|
|
|
1
|
+
// SigWebTablet.ts
|
|
2
|
+
export class SigWebTablet {
|
|
3
|
+
static revokeBlobURL(url) {
|
|
4
|
+
if (window.URL) {
|
|
5
|
+
URL.revokeObjectURL(url);
|
|
6
|
+
}
|
|
7
|
+
else if (window.webkitURL) {
|
|
8
|
+
webkitURL.revokeObjectURL(url);
|
|
9
|
+
}
|
|
10
|
+
}
|
|
11
|
+
static getBlobURL(blob) {
|
|
12
|
+
if (window.URL) {
|
|
13
|
+
return URL.createObjectURL(blob);
|
|
14
|
+
}
|
|
15
|
+
else if (window.webkitURL) {
|
|
16
|
+
return webkitURL.createObjectURL(blob);
|
|
17
|
+
}
|
|
18
|
+
return ''; // Retornar un string vacío en caso de error
|
|
19
|
+
}
|
|
20
|
+
static makeUri() {
|
|
21
|
+
var prot = location.protocol;
|
|
22
|
+
if (prot == 'file:') {
|
|
23
|
+
prot = 'http:';
|
|
24
|
+
}
|
|
25
|
+
if (this.isIE()) {
|
|
26
|
+
if (prot == 'https:') {
|
|
27
|
+
return prot + '//tablet.sigwebtablet.com:47290/SigWeb/';
|
|
28
|
+
}
|
|
29
|
+
else {
|
|
30
|
+
return prot + '//tablet.sigwebtablet.com:47289/SigWeb/';
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
if (this.isChrome()) {
|
|
34
|
+
if (prot == 'https:') {
|
|
35
|
+
return prot + '//tablet.sigwebtablet.com:47290/SigWeb/';
|
|
36
|
+
}
|
|
37
|
+
else {
|
|
38
|
+
return prot + '//tablet.sigwebtablet.com:47289/SigWeb/';
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
else {
|
|
42
|
+
//FIREFOX
|
|
43
|
+
if (prot == 'https:') {
|
|
44
|
+
return prot + '//tablet.sigwebtablet.com:47290/SigWeb/';
|
|
45
|
+
}
|
|
46
|
+
else {
|
|
47
|
+
return prot + '//tablet.sigwebtablet.com:47289/SigWeb/';
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
static generateUUID() {
|
|
52
|
+
return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function (c) {
|
|
53
|
+
const r = (Math.random() * 16) | 0;
|
|
54
|
+
const v = c === 'x' ? r : (r & 0x3) | 0x8;
|
|
55
|
+
return v.toString(16);
|
|
56
|
+
});
|
|
57
|
+
}
|
|
58
|
+
static isSigWebInstalled() {
|
|
59
|
+
const xhr = new XMLHttpRequest();
|
|
60
|
+
try {
|
|
61
|
+
xhr.open('GET', `${this.baseUri}TabletState?noCache=${this.generateUUID()}`, false);
|
|
62
|
+
xhr.send();
|
|
63
|
+
return xhr.status !== 404 && xhr.status !== 0;
|
|
64
|
+
}
|
|
65
|
+
catch (e) {
|
|
66
|
+
console.log('Error checking SigWeb installation', e);
|
|
67
|
+
return false;
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
static isIE() {
|
|
71
|
+
return (navigator.appName === 'Microsoft Internet Explorer' ||
|
|
72
|
+
(navigator.appName === 'Netscape' &&
|
|
73
|
+
new RegExp('Trident/.*rv:([0-9]{1,}[.0-9]{0,})').exec(navigator.userAgent) != null));
|
|
74
|
+
}
|
|
75
|
+
static isChrome() {
|
|
76
|
+
return navigator.userAgent.lastIndexOf('Chrome/') > 0;
|
|
77
|
+
}
|
|
78
|
+
static SigWebcreateXHR() {
|
|
79
|
+
const xhr = new XMLHttpRequest();
|
|
80
|
+
if (!xhr) {
|
|
81
|
+
throw new Error('No se pudo crear XMLHttpRequest');
|
|
82
|
+
}
|
|
83
|
+
return xhr;
|
|
84
|
+
}
|
|
85
|
+
static SigWebSetProperty(prop) {
|
|
86
|
+
const xhr = this.SigWebcreateXHR();
|
|
87
|
+
if (xhr) {
|
|
88
|
+
xhr.open('POST', this.baseUri + prop, true);
|
|
89
|
+
xhr.send(null);
|
|
90
|
+
if (xhr.readyState === 4 && xhr.status === 200) {
|
|
91
|
+
return xhr.responseText;
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
return '';
|
|
95
|
+
}
|
|
96
|
+
static SigWebSetPropertySync(prop) {
|
|
97
|
+
const xhr = this.SigWebcreateXHR();
|
|
98
|
+
if (xhr) {
|
|
99
|
+
xhr.open('POST', this.baseUri + prop, false);
|
|
100
|
+
xhr.send();
|
|
101
|
+
if (xhr.readyState === 4 && xhr.status === 200) {
|
|
102
|
+
return xhr.responseText;
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
return '';
|
|
106
|
+
}
|
|
107
|
+
static SigWebSetStreamProperty(prop, strm) {
|
|
108
|
+
const xhr = this.SigWebcreateXHR();
|
|
109
|
+
if (xhr) {
|
|
110
|
+
xhr.open('POST', this.baseUri + prop);
|
|
111
|
+
xhr.setRequestHeader('Content-Type', 'text/plain');
|
|
112
|
+
xhr.send(strm);
|
|
113
|
+
}
|
|
114
|
+
return '';
|
|
115
|
+
}
|
|
116
|
+
static SigWebSyncSetStreamProperty(prop, strm) {
|
|
117
|
+
const xhr = this.SigWebcreateXHR();
|
|
118
|
+
if (xhr) {
|
|
119
|
+
xhr.open('POST', this.baseUri + prop, false);
|
|
120
|
+
xhr.setRequestHeader('Content-Type', 'text/plain');
|
|
121
|
+
xhr.send(strm);
|
|
122
|
+
if (xhr.readyState === 4 && xhr.status === 200) {
|
|
123
|
+
return xhr.responseText;
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
return '';
|
|
127
|
+
}
|
|
128
|
+
static SigWebSetImageStreamProperty(prop, strm) {
|
|
129
|
+
const xhr = this.SigWebcreateXHR();
|
|
130
|
+
if (xhr) {
|
|
131
|
+
xhr.open('POST', this.baseUri + prop, false);
|
|
132
|
+
xhr.setRequestHeader('Content-Type', 'image/png');
|
|
133
|
+
xhr.send(strm);
|
|
134
|
+
if (xhr.readyState === 4 && xhr.status === 200) {
|
|
135
|
+
return xhr.responseText;
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
return '';
|
|
139
|
+
}
|
|
140
|
+
static SigWebSetImageBlobProperty(prop, strm) {
|
|
141
|
+
var xhr = this.SigWebcreateXHR();
|
|
142
|
+
if (xhr) {
|
|
143
|
+
xhr.open('POST', this.baseUri + prop, false);
|
|
144
|
+
xhr.setRequestHeader('Content-Type', 'blob');
|
|
145
|
+
xhr.send(strm);
|
|
146
|
+
if (xhr.readyState == 4 && xhr.status == 200) {
|
|
147
|
+
return xhr.responseText;
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
return '';
|
|
151
|
+
}
|
|
152
|
+
static SigWebGetProperty(prop) {
|
|
153
|
+
var xhr = this.SigWebcreateXHR();
|
|
154
|
+
if (xhr) {
|
|
155
|
+
xhr.open('GET', this.baseUri + prop + '?noCache=' + this.generateUUID(), false);
|
|
156
|
+
xhr.send(null);
|
|
157
|
+
if (xhr.readyState == 4 && xhr.status == 200) {
|
|
158
|
+
return xhr.responseText;
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
return '';
|
|
162
|
+
}
|
|
163
|
+
static GetSigImageB64(callback) {
|
|
164
|
+
var cvs = document.createElement('canvas');
|
|
165
|
+
var width = this.GetImageXSize();
|
|
166
|
+
var height = this.GetImageYSize();
|
|
167
|
+
cvs.width = width == '' || width == null ? 0 : Number(width);
|
|
168
|
+
cvs.height = height == '' || height == null ? 0 : Number(height);
|
|
169
|
+
var xhr2 = new XMLHttpRequest();
|
|
170
|
+
xhr2.open('GET', this.baseUri + 'SigImage/1' + '?noCache=' + this.generateUUID(), true);
|
|
171
|
+
xhr2.responseType = 'blob';
|
|
172
|
+
xhr2.send(null);
|
|
173
|
+
xhr2.onload = () => {
|
|
174
|
+
var cntx = cvs.getContext('2d');
|
|
175
|
+
var img = new Image();
|
|
176
|
+
img.src = this.getBlobURL(xhr2.response);
|
|
177
|
+
img.onload = () => {
|
|
178
|
+
cntx.drawImage(img, 0, 0);
|
|
179
|
+
var b64String = cvs.toDataURL('image/png');
|
|
180
|
+
var loc = b64String.search('base64,');
|
|
181
|
+
var retstring = b64String.slice(loc + 7, b64String.length);
|
|
182
|
+
if (callback) {
|
|
183
|
+
callback(retstring);
|
|
184
|
+
}
|
|
185
|
+
};
|
|
186
|
+
};
|
|
187
|
+
}
|
|
188
|
+
static SigWebWaitForPenDown(callback) {
|
|
189
|
+
var xhr = this.SigWebcreateXHR();
|
|
190
|
+
if (xhr) {
|
|
191
|
+
xhr.open('GET', this.baseUri + 'WaitForPenDown' + '?noCache=' + this.generateUUID());
|
|
192
|
+
xhr.timeout = 10000;
|
|
193
|
+
xhr.onreadystatechange = () => {
|
|
194
|
+
if (xhr.readyState != 4)
|
|
195
|
+
return;
|
|
196
|
+
if (xhr.status == 200)
|
|
197
|
+
callback();
|
|
198
|
+
};
|
|
199
|
+
xhr.send(null);
|
|
200
|
+
}
|
|
201
|
+
}
|
|
202
|
+
static GetSigImage(ctx) {
|
|
203
|
+
var xhr2 = new XMLHttpRequest();
|
|
204
|
+
xhr2.open('GET', this.baseUri + 'SigImage/1' + '?noCache=' + this.generateUUID(), true);
|
|
205
|
+
xhr2.responseType = 'blob';
|
|
206
|
+
xhr2.send(null);
|
|
207
|
+
xhr2.onload = () => {
|
|
208
|
+
var img = new Image();
|
|
209
|
+
img.src = this.getBlobURL(xhr2.response);
|
|
210
|
+
img.onload = () => {
|
|
211
|
+
ctx.drawImage(img, 0, 0);
|
|
212
|
+
this.revokeBlobURL(img.src);
|
|
213
|
+
img = null;
|
|
214
|
+
};
|
|
215
|
+
};
|
|
216
|
+
}
|
|
217
|
+
static SigWebSetDisplayTarget(obj) {
|
|
218
|
+
this.ctx = obj;
|
|
219
|
+
}
|
|
220
|
+
static SigWebRefresh() {
|
|
221
|
+
var NumPoints = Number(this.NumberOfTabletPoints());
|
|
222
|
+
if (NumPoints == this.NumPointsLastTime) {
|
|
223
|
+
return;
|
|
224
|
+
}
|
|
225
|
+
this.NumPointsLastTime = NumPoints;
|
|
226
|
+
var xhr2 = new XMLHttpRequest();
|
|
227
|
+
xhr2.open('GET', this.baseUri + 'SigImage/0' + '?noCache=' + this.generateUUID(), true);
|
|
228
|
+
xhr2.responseType = 'blob';
|
|
229
|
+
xhr2.onload = () => {
|
|
230
|
+
var img = new Image();
|
|
231
|
+
img.src = this.getBlobURL(xhr2.response);
|
|
232
|
+
// img.src = window.URL.createObjectURL(xhr2.response);
|
|
233
|
+
img.onload = () => {
|
|
234
|
+
this.ctx.drawImage(img, 0, 0);
|
|
235
|
+
this.revokeBlobURL(img.src);
|
|
236
|
+
img = null;
|
|
237
|
+
};
|
|
238
|
+
};
|
|
239
|
+
xhr2.send(null);
|
|
240
|
+
}
|
|
241
|
+
static SigWebEvent() {
|
|
242
|
+
var OldEvStatus = this.EvStatus;
|
|
243
|
+
var xhr = this.SigWebcreateXHR();
|
|
244
|
+
if (xhr) {
|
|
245
|
+
xhr.open('GET', this.baseUri + 'EventStatus' + '?noCache=' + this.generateUUID(), true);
|
|
246
|
+
xhr.onload = () => {
|
|
247
|
+
this.EvStatus = xhr.responseText;
|
|
248
|
+
if (OldEvStatus & 0x01 && this.EvStatus & 0x02) {
|
|
249
|
+
if (this.onSigPenDown) {
|
|
250
|
+
this.onSigPenDown();
|
|
251
|
+
}
|
|
252
|
+
}
|
|
253
|
+
if (OldEvStatus & 0x02 && this.EvStatus & 0x01) {
|
|
254
|
+
if (this.onSigPenUp) {
|
|
255
|
+
this.onSigPenUp();
|
|
256
|
+
}
|
|
257
|
+
}
|
|
258
|
+
};
|
|
259
|
+
xhr.send(null);
|
|
260
|
+
}
|
|
261
|
+
}
|
|
262
|
+
static setSigWebFontThreshold(v) {
|
|
263
|
+
this.SigWebFontThreshold = v;
|
|
264
|
+
}
|
|
265
|
+
static createLcdBitmapFromCanvas(ourCanvas, xp, yp, width, height) {
|
|
266
|
+
var canvasCtx = ourCanvas.getContext('2d');
|
|
267
|
+
var imgData = canvasCtx.getImageData(0, 0, width, height);
|
|
268
|
+
var j = 0;
|
|
269
|
+
var sVal = 0;
|
|
270
|
+
var outData = '';
|
|
271
|
+
var outIdx = 0;
|
|
272
|
+
var data = imgData.data;
|
|
273
|
+
for (var y = 0; y < height; y++)
|
|
274
|
+
for (var x = 0; x < width; x++) {
|
|
275
|
+
var tmp1 = data[j];
|
|
276
|
+
var tmp2 = data[j + 1];
|
|
277
|
+
var tmp3 = data[j + 2];
|
|
278
|
+
var tmp4 = data[j + 3];
|
|
279
|
+
// sVal = tmp1 + (tmp2 << 8 ) + ( tmp3 << 16 ) + (tmp4 << 24 );
|
|
280
|
+
j = j + 4;
|
|
281
|
+
if (tmp1 < this.SigWebFontThreshold) {
|
|
282
|
+
outData += 'B';
|
|
283
|
+
}
|
|
284
|
+
else {
|
|
285
|
+
outData += 'W';
|
|
286
|
+
}
|
|
287
|
+
}
|
|
288
|
+
return outData;
|
|
289
|
+
}
|
|
290
|
+
static toHex(NibVal) {
|
|
291
|
+
switch (NibVal) {
|
|
292
|
+
case 0:
|
|
293
|
+
return '0';
|
|
294
|
+
case 1:
|
|
295
|
+
return '1';
|
|
296
|
+
case 2:
|
|
297
|
+
return '2';
|
|
298
|
+
case 3:
|
|
299
|
+
return '3';
|
|
300
|
+
case 4:
|
|
301
|
+
return '4';
|
|
302
|
+
case 5:
|
|
303
|
+
return '5';
|
|
304
|
+
case 6:
|
|
305
|
+
return '6';
|
|
306
|
+
case 7:
|
|
307
|
+
return '7';
|
|
308
|
+
case 8:
|
|
309
|
+
return '8';
|
|
310
|
+
case 9:
|
|
311
|
+
return '9';
|
|
312
|
+
case 10:
|
|
313
|
+
return 'A';
|
|
314
|
+
case 11:
|
|
315
|
+
return 'B';
|
|
316
|
+
case 12:
|
|
317
|
+
return 'C';
|
|
318
|
+
case 13:
|
|
319
|
+
return 'D';
|
|
320
|
+
case 14:
|
|
321
|
+
return 'E';
|
|
322
|
+
case 15:
|
|
323
|
+
return 'F';
|
|
324
|
+
default:
|
|
325
|
+
return '';
|
|
326
|
+
}
|
|
327
|
+
}
|
|
328
|
+
static ToHexString(ByteVal) {
|
|
329
|
+
var Str = '';
|
|
330
|
+
Str += this.toHex((ByteVal >> 4) & 0x0f);
|
|
331
|
+
Str += this.toHex(ByteVal & 0x0f);
|
|
332
|
+
return Str;
|
|
333
|
+
}
|
|
334
|
+
static textToTablet(x, y, height, str, fnt) {
|
|
335
|
+
var c = document.createElement('canvas');
|
|
336
|
+
var cntx = c.getContext('2d');
|
|
337
|
+
cntx.font = fnt;
|
|
338
|
+
var txt = str;
|
|
339
|
+
var xs = Math.round(cntx.measureText(txt).width);
|
|
340
|
+
var ys = height;
|
|
341
|
+
c.width = xs;
|
|
342
|
+
c.height = ys;
|
|
343
|
+
cntx.font = fnt;
|
|
344
|
+
cntx.fillStyle = '#FFFFFF';
|
|
345
|
+
cntx.rect(0, 0, xs, ys);
|
|
346
|
+
cntx.fill();
|
|
347
|
+
cntx.fillStyle = '#000000';
|
|
348
|
+
cntx.textBaseline = 'top';
|
|
349
|
+
cntx.fillText(txt, 0, 0);
|
|
350
|
+
cntx.drawImage(cntx.canvas, 0, 0, xs, ys);
|
|
351
|
+
var Gstr = this.createLcdBitmapFromCanvas(c, 0, 0, xs, ys);
|
|
352
|
+
this.LcdWriteImageStream(0, 2, x, y, xs, ys, Gstr);
|
|
353
|
+
}
|
|
354
|
+
static LcdWriteImage(Dst, Mode, Xp, Yp, Url) {
|
|
355
|
+
var Prop = 'LcdWriteImage/';
|
|
356
|
+
var NewUrl = Url.replace(/\//g, '_');
|
|
357
|
+
Prop = Prop + Dst + ',' + Mode + ',' + Xp + ',' + Yp + ',' + NewUrl;
|
|
358
|
+
this.SigWebSetPropertySync(Prop);
|
|
359
|
+
}
|
|
360
|
+
static LcdWriteLocalImage(Dst, Mode, Xp, Yp, Url) {
|
|
361
|
+
var Prop = 'LcdWriteImage/';
|
|
362
|
+
Prop = Prop + Dst + ',' + Mode + ',' + Xp + ',' + Yp + ',' + Url;
|
|
363
|
+
this.SigWebSetProperty(Prop);
|
|
364
|
+
}
|
|
365
|
+
static LcdWriteImageStream(Dst, Mode, Xp, Yp, Xs, Ys, Url) {
|
|
366
|
+
var Prop1 = 'LcdWriteImageStreamParams/' +
|
|
367
|
+
Dst +
|
|
368
|
+
',' +
|
|
369
|
+
Mode +
|
|
370
|
+
',' +
|
|
371
|
+
Xp +
|
|
372
|
+
',' +
|
|
373
|
+
Yp +
|
|
374
|
+
',' +
|
|
375
|
+
Xs +
|
|
376
|
+
',' +
|
|
377
|
+
Ys;
|
|
378
|
+
var Prop2 = 'LcdWriteImageStream/';
|
|
379
|
+
this.SigWebSetPropertySync(Prop1);
|
|
380
|
+
this.SigWebSetImageStreamProperty(Prop2, Url);
|
|
381
|
+
}
|
|
382
|
+
static LcdWriteImageBlob(Dst, Mode, Xp, Yp, Xs, Ys, Url) {
|
|
383
|
+
var Prop = 'LcdWriteImageStream/';
|
|
384
|
+
Prop = Prop + Dst + ',' + Mode + ',' + Xp + ',' + Yp + ',' + Xs + ',' + Ys;
|
|
385
|
+
this.SigWebSetImageBlobProperty(Prop, Url);
|
|
386
|
+
}
|
|
387
|
+
static measureText(pText, pFontSize, pStyle) {
|
|
388
|
+
var lDiv = document.createElement('lDiv');
|
|
389
|
+
document.body.appendChild(lDiv);
|
|
390
|
+
if (pStyle != null) {
|
|
391
|
+
lDiv.setAttribute('style', pStyle);
|
|
392
|
+
}
|
|
393
|
+
lDiv.style.fontSize = '' + pFontSize + 'px';
|
|
394
|
+
lDiv.style.position = 'absolute';
|
|
395
|
+
lDiv.style.left = '-1000';
|
|
396
|
+
lDiv.style.top = '-1000';
|
|
397
|
+
lDiv.innerHTML = pText;
|
|
398
|
+
var lResult = {
|
|
399
|
+
width: lDiv.clientWidth,
|
|
400
|
+
height: lDiv.clientHeight,
|
|
401
|
+
};
|
|
402
|
+
document.body.removeChild(lDiv);
|
|
403
|
+
lDiv = null;
|
|
404
|
+
return lResult;
|
|
405
|
+
}
|
|
406
|
+
static GetVersionString() {
|
|
407
|
+
var Prop = 'Version';
|
|
408
|
+
Prop = Prop;
|
|
409
|
+
var Str = this.SigWebGetProperty(Prop);
|
|
410
|
+
var trimStr = Str.slice(1, Str.length - 2);
|
|
411
|
+
return trimStr;
|
|
412
|
+
}
|
|
413
|
+
static IsPenDown() {
|
|
414
|
+
return this.EvStatus & 0x01;
|
|
415
|
+
}
|
|
416
|
+
//
|
|
417
|
+
// SigPlusNETSig.cs
|
|
418
|
+
//
|
|
419
|
+
static ClearTablet() {
|
|
420
|
+
var Prop = 'ClearSignature';
|
|
421
|
+
Prop = Prop;
|
|
422
|
+
return this.SigWebGetProperty(Prop);
|
|
423
|
+
}
|
|
424
|
+
static NumberOfTabletPoints() {
|
|
425
|
+
var Prop = 'TotalPoints';
|
|
426
|
+
Prop = Prop;
|
|
427
|
+
return this.SigWebGetProperty(Prop);
|
|
428
|
+
}
|
|
429
|
+
static SetSigString(sigStr, ctx) {
|
|
430
|
+
var Prop = 'SigString';
|
|
431
|
+
Prop = Prop;
|
|
432
|
+
var xhr = this.SigWebcreateXHR();
|
|
433
|
+
if (xhr) {
|
|
434
|
+
xhr.open('POST', this.baseUri + Prop);
|
|
435
|
+
xhr.setRequestHeader('Content-Type', 'text/plain');
|
|
436
|
+
xhr.send(sigStr);
|
|
437
|
+
xhr.onload = () => {
|
|
438
|
+
if (ctx) {
|
|
439
|
+
var can = ctx.canvas;
|
|
440
|
+
this.SetImageXSize(can.width);
|
|
441
|
+
this.SetImageYSize(can.height);
|
|
442
|
+
this.GetSigImage(ctx);
|
|
443
|
+
}
|
|
444
|
+
};
|
|
445
|
+
}
|
|
446
|
+
return '';
|
|
447
|
+
}
|
|
448
|
+
static GetSigString() {
|
|
449
|
+
var Prop = 'SigString';
|
|
450
|
+
Prop = Prop;
|
|
451
|
+
var Str = this.SigWebGetProperty(Prop);
|
|
452
|
+
return Str.slice(1, Str.length - 1);
|
|
453
|
+
}
|
|
454
|
+
static SetSigCompressionMode(v) {
|
|
455
|
+
var Prop = 'CompressionMode/';
|
|
456
|
+
Prop = Prop + v;
|
|
457
|
+
this.SigWebSetPropertySync(Prop);
|
|
458
|
+
}
|
|
459
|
+
static GetSigCompressionMode() {
|
|
460
|
+
var Prop = 'CompressionMode';
|
|
461
|
+
Prop = Prop;
|
|
462
|
+
return this.SigWebGetProperty(Prop);
|
|
463
|
+
}
|
|
464
|
+
static SetEncryptionMode(v) {
|
|
465
|
+
var Prop = 'EncryptionMode/';
|
|
466
|
+
Prop = Prop + v;
|
|
467
|
+
this.SigWebSetPropertySync(Prop);
|
|
468
|
+
}
|
|
469
|
+
static GetEncryptionMode() {
|
|
470
|
+
var Prop = 'EncryptionMode';
|
|
471
|
+
Prop = Prop;
|
|
472
|
+
return this.SigWebGetProperty(Prop);
|
|
473
|
+
}
|
|
474
|
+
static SetKeyString(keyString) {
|
|
475
|
+
var Prop = 'KeyString';
|
|
476
|
+
Prop = Prop;
|
|
477
|
+
this.SigWebSetStreamProperty(Prop, keyString);
|
|
478
|
+
}
|
|
479
|
+
static GetKeyString() {
|
|
480
|
+
var Prop = 'KeyString';
|
|
481
|
+
Prop = Prop;
|
|
482
|
+
var Str = this.SigWebGetProperty(Prop);
|
|
483
|
+
return Str.slice(1, Str.length - 1);
|
|
484
|
+
}
|
|
485
|
+
static AutoKeyStart() {
|
|
486
|
+
var Prop = 'AutoKeyStart';
|
|
487
|
+
Prop = Prop;
|
|
488
|
+
this.SigWebSetPropertySync(Prop);
|
|
489
|
+
}
|
|
490
|
+
static AutoKeyFinish() {
|
|
491
|
+
var Prop = 'AutoKeyFinish';
|
|
492
|
+
Prop = Prop;
|
|
493
|
+
this.SigWebSetPropertySync(Prop);
|
|
494
|
+
}
|
|
495
|
+
static SetAutoKeyData(keyData) {
|
|
496
|
+
var Prop = 'SetAutoKeyData';
|
|
497
|
+
Prop = Prop;
|
|
498
|
+
this.SigWebSetStreamProperty(Prop, keyData);
|
|
499
|
+
}
|
|
500
|
+
static AutoKeyAddData(keyData) {
|
|
501
|
+
var Prop = 'AutoKeyAddData';
|
|
502
|
+
Prop = Prop;
|
|
503
|
+
this.SigWebSetStreamProperty(Prop, keyData);
|
|
504
|
+
return this.GetKeyString();
|
|
505
|
+
}
|
|
506
|
+
// function GetKeyReceipt( ) {}
|
|
507
|
+
static GetKeyReceiptAscii() {
|
|
508
|
+
var Prop = 'KeyReceiptAscii';
|
|
509
|
+
Prop = Prop;
|
|
510
|
+
var Str = this.SigWebGetProperty(Prop);
|
|
511
|
+
return Str.slice(1, Str.length - 1);
|
|
512
|
+
}
|
|
513
|
+
// function GetSigReceipt( ) {}
|
|
514
|
+
static GetSigReceiptAscii() {
|
|
515
|
+
var Prop = 'SigReceiptAscii';
|
|
516
|
+
Prop = Prop;
|
|
517
|
+
var Str = this.SigWebGetProperty(Prop);
|
|
518
|
+
return Str.slice(1, Str.length - 1);
|
|
519
|
+
}
|
|
520
|
+
static SetTimeStamp(timeStamp) {
|
|
521
|
+
var Prop = 'TimeStamp';
|
|
522
|
+
Prop = Prop;
|
|
523
|
+
this.SigWebSetStreamProperty(Prop, timeStamp);
|
|
524
|
+
}
|
|
525
|
+
static GetTimeStamp() {
|
|
526
|
+
var Prop = 'TimeStamp';
|
|
527
|
+
Prop = Prop;
|
|
528
|
+
var Str = this.SigWebGetProperty(Prop);
|
|
529
|
+
return Str.slice(1, Str.length - 1);
|
|
530
|
+
}
|
|
531
|
+
static SetAnnotate(annotate) {
|
|
532
|
+
var Prop = 'Annotate';
|
|
533
|
+
Prop = Prop;
|
|
534
|
+
this.SigWebSetStreamProperty(Prop, annotate);
|
|
535
|
+
}
|
|
536
|
+
static GetAnnotate() {
|
|
537
|
+
var Prop = 'Annotate';
|
|
538
|
+
Prop = Prop;
|
|
539
|
+
var Str = this.SigWebGetProperty(Prop);
|
|
540
|
+
return Str.slice(1, Str.length - 1);
|
|
541
|
+
}
|
|
542
|
+
static SetSaveSigInfo(v) {
|
|
543
|
+
var Prop = 'SaveSigInfo/';
|
|
544
|
+
Prop = Prop + v;
|
|
545
|
+
this.SigWebSetPropertySync(Prop);
|
|
546
|
+
}
|
|
547
|
+
static GetSaveSigInfo() {
|
|
548
|
+
var Prop = 'SaveSigInfo';
|
|
549
|
+
Prop = Prop;
|
|
550
|
+
return this.SigWebGetProperty(Prop);
|
|
551
|
+
}
|
|
552
|
+
static SetSavePressureData(v) {
|
|
553
|
+
var Prop = 'SavePressureData/';
|
|
554
|
+
Prop = Prop + v;
|
|
555
|
+
this.SigWebSetPropertySync(Prop);
|
|
556
|
+
}
|
|
557
|
+
static GetSavePressureData() {
|
|
558
|
+
var Prop = 'SavePressureData';
|
|
559
|
+
Prop = Prop;
|
|
560
|
+
return this.SigWebGetProperty(Prop);
|
|
561
|
+
}
|
|
562
|
+
static SetSaveTimeData(v) {
|
|
563
|
+
var Prop = 'SaveTimeData/';
|
|
564
|
+
Prop = Prop + v;
|
|
565
|
+
this.SigWebSetPropertySync(Prop);
|
|
566
|
+
}
|
|
567
|
+
static GetSaveTimeData() {
|
|
568
|
+
var Prop = 'SaveTimeData';
|
|
569
|
+
Prop = Prop;
|
|
570
|
+
return this.SigWebGetProperty(Prop);
|
|
571
|
+
}
|
|
572
|
+
static SetAntiAliasSpotSize(v) {
|
|
573
|
+
var Prop = 'AntiAliasSpotSize/';
|
|
574
|
+
Prop = Prop + v;
|
|
575
|
+
this.SigWebSetPropertySync(Prop);
|
|
576
|
+
}
|
|
577
|
+
static GetAntiAliasSpotSize() {
|
|
578
|
+
var Prop = 'AntiAliasSpotSize';
|
|
579
|
+
Prop = Prop;
|
|
580
|
+
return this.SigWebGetProperty(Prop);
|
|
581
|
+
}
|
|
582
|
+
static SetAntiAliasLineScale(v) {
|
|
583
|
+
var Prop = 'AntiAliasLineScale/';
|
|
584
|
+
Prop = Prop + v;
|
|
585
|
+
this.SigWebSetPropertySync(Prop);
|
|
586
|
+
}
|
|
587
|
+
static GetAntiAliasLineScale() {
|
|
588
|
+
var Prop = 'AntiAliasLineScale';
|
|
589
|
+
Prop = Prop;
|
|
590
|
+
return this.SigWebGetProperty(Prop);
|
|
591
|
+
}
|
|
592
|
+
static GetNumberOfStrokes() {
|
|
593
|
+
var Prop = 'NumberOfStrokes';
|
|
594
|
+
Prop = Prop;
|
|
595
|
+
return this.SigWebGetProperty(Prop);
|
|
596
|
+
}
|
|
597
|
+
static GetNumPointsForStroke(v) {
|
|
598
|
+
var Prop = 'NumberOfPointsInStroke/';
|
|
599
|
+
Prop = Prop + v;
|
|
600
|
+
return this.SigWebGetProperty(Prop);
|
|
601
|
+
}
|
|
602
|
+
static GetPointXValue(v1, v2) {
|
|
603
|
+
var Prop = 'PointXValue/';
|
|
604
|
+
Prop = Prop + v1 + '/' + v2;
|
|
605
|
+
return this.SigWebGetProperty(Prop);
|
|
606
|
+
}
|
|
607
|
+
static GetPointYValue(v1, v2) {
|
|
608
|
+
var Prop = 'PointYValue/';
|
|
609
|
+
Prop = Prop + v1 + '/' + v2;
|
|
610
|
+
return this.SigWebGetProperty(Prop);
|
|
611
|
+
}
|
|
612
|
+
static SetAntiAliasEnable(v) {
|
|
613
|
+
var Prop = 'AntiAliasEnable/';
|
|
614
|
+
Prop = Prop + v;
|
|
615
|
+
this.SigWebSetPropertySync(Prop);
|
|
616
|
+
}
|
|
617
|
+
static GetAntiAliasEnable() {
|
|
618
|
+
var Prop = 'AntiAliasEnable';
|
|
619
|
+
Prop = Prop;
|
|
620
|
+
return this.SigWebGetProperty(Prop);
|
|
621
|
+
}
|
|
622
|
+
static SetUseAmbientColors(v) {
|
|
623
|
+
var Prop = 'UseAmbientColors/';
|
|
624
|
+
Prop = Prop + v;
|
|
625
|
+
this.SigWebSetPropertySync(Prop);
|
|
626
|
+
}
|
|
627
|
+
//
|
|
628
|
+
// SigPlusNETDisplay.cs
|
|
629
|
+
//
|
|
630
|
+
static SetDisplayXSize(v) {
|
|
631
|
+
var Prop = 'DisplayXSize/';
|
|
632
|
+
Prop = Prop + v;
|
|
633
|
+
this.SigWebSetPropertySync(Prop);
|
|
634
|
+
}
|
|
635
|
+
static GetDisplayXSize() {
|
|
636
|
+
var Prop = 'DisplayXSize';
|
|
637
|
+
Prop = Prop;
|
|
638
|
+
return this.SigWebGetProperty(Prop);
|
|
639
|
+
}
|
|
640
|
+
static SetDisplayYSize(v) {
|
|
641
|
+
var Prop = 'DisplayYSize/';
|
|
642
|
+
Prop = Prop + v;
|
|
643
|
+
this.SigWebSetPropertySync(Prop);
|
|
644
|
+
}
|
|
645
|
+
static GetDisplayYSize() {
|
|
646
|
+
var Prop = 'DisplayYSize';
|
|
647
|
+
Prop = Prop;
|
|
648
|
+
return this.SigWebGetProperty(Prop);
|
|
649
|
+
}
|
|
650
|
+
static SetDisplayPenWidth(v) {
|
|
651
|
+
var Prop = 'DisplayPenWidth/';
|
|
652
|
+
Prop = Prop + v;
|
|
653
|
+
this.SigWebSetPropertySync(Prop);
|
|
654
|
+
}
|
|
655
|
+
static GetDisplayPenWidth() {
|
|
656
|
+
var Prop = 'DisplayPenWidth';
|
|
657
|
+
Prop = Prop;
|
|
658
|
+
return this.SigWebGetProperty(Prop);
|
|
659
|
+
}
|
|
660
|
+
static SetDisplayTimeStamp(v) {
|
|
661
|
+
var Prop = 'DisplayTimeStamp/';
|
|
662
|
+
Prop = Prop + v;
|
|
663
|
+
this.SigWebSetPropertySync(Prop);
|
|
664
|
+
}
|
|
665
|
+
static GetDisplayTimeStamp() {
|
|
666
|
+
var Prop = 'DisplayTimeStamp';
|
|
667
|
+
Prop = Prop;
|
|
668
|
+
return this.SigWebGetProperty(Prop);
|
|
669
|
+
}
|
|
670
|
+
static SetDisplayTimeStampPosX(v) {
|
|
671
|
+
var Prop = 'DisplayTimeStampPosX/';
|
|
672
|
+
Prop = Prop + v;
|
|
673
|
+
this.SigWebSetPropertySync(Prop);
|
|
674
|
+
}
|
|
675
|
+
static GetDisplayTimeStampPosX() {
|
|
676
|
+
var Prop = 'DisplayTimeStampPosX';
|
|
677
|
+
Prop = Prop;
|
|
678
|
+
return this.SigWebGetProperty(Prop);
|
|
679
|
+
}
|
|
680
|
+
static SetDisplayTimeStampPosY(v) {
|
|
681
|
+
var Prop = 'DisplayTimeStampPosY/';
|
|
682
|
+
Prop = Prop + v;
|
|
683
|
+
this.SigWebSetPropertySync(Prop);
|
|
684
|
+
}
|
|
685
|
+
static GetDisplayTimeStampPosY() {
|
|
686
|
+
var Prop = 'DisplayTimeStampPosY';
|
|
687
|
+
Prop = Prop;
|
|
688
|
+
return this.SigWebGetProperty(Prop);
|
|
689
|
+
}
|
|
690
|
+
static SetDisplayTimeStampSize(v) {
|
|
691
|
+
var Prop = 'DisplayTimeStampSize/';
|
|
692
|
+
Prop = Prop + v;
|
|
693
|
+
this.SigWebSetPropertySync(Prop);
|
|
694
|
+
}
|
|
695
|
+
static GetDisplayTimeStampSize() {
|
|
696
|
+
var Prop = 'DisplayTimeStampSize';
|
|
697
|
+
Prop = Prop;
|
|
698
|
+
return this.SigWebGetProperty(Prop);
|
|
699
|
+
}
|
|
700
|
+
static SetDisplayAnnotate(v) {
|
|
701
|
+
var Prop = 'DisplayAnnotate/';
|
|
702
|
+
Prop = Prop + v;
|
|
703
|
+
this.SigWebSetPropertySync(Prop);
|
|
704
|
+
}
|
|
705
|
+
static GetDisplayAnnotate() {
|
|
706
|
+
var Prop = 'DisplayAnnotate';
|
|
707
|
+
Prop = Prop;
|
|
708
|
+
return this.SigWebGetProperty(Prop);
|
|
709
|
+
}
|
|
710
|
+
static SetDisplayAnnotatePosX(v) {
|
|
711
|
+
var Prop = 'DisplayAnnotatePosX/';
|
|
712
|
+
Prop = Prop + v;
|
|
713
|
+
this.SigWebSetPropertySync(Prop);
|
|
714
|
+
}
|
|
715
|
+
static GetDisplayAnnotatePosX() {
|
|
716
|
+
var Prop = 'DisplayAnnotatePosX';
|
|
717
|
+
Prop = Prop;
|
|
718
|
+
return this.SigWebGetProperty(Prop);
|
|
719
|
+
}
|
|
720
|
+
static SetDisplayAnnotatePosY(v) {
|
|
721
|
+
var Prop = 'DisplayAnnotatePosY/';
|
|
722
|
+
Prop = Prop + v;
|
|
723
|
+
this.SigWebSetPropertySync(Prop);
|
|
724
|
+
}
|
|
725
|
+
static GetDisplayAnnotatePosY() {
|
|
726
|
+
var Prop = 'DisplayAnnotatePosY';
|
|
727
|
+
Prop = Prop;
|
|
728
|
+
return this.SigWebGetProperty(Prop);
|
|
729
|
+
}
|
|
730
|
+
static SetDisplayAnnotateSize(v) {
|
|
731
|
+
var Prop = 'DisplayAnnotateSize/';
|
|
732
|
+
Prop = Prop + v;
|
|
733
|
+
this.SigWebSetPropertySync(Prop);
|
|
734
|
+
}
|
|
735
|
+
static GetDisplayAnnotateSize() {
|
|
736
|
+
var Prop = 'DisplayAnnotateSize';
|
|
737
|
+
Prop = Prop;
|
|
738
|
+
return this.SigWebGetProperty(Prop);
|
|
739
|
+
}
|
|
740
|
+
//
|
|
741
|
+
// SigPlusNETImage.cs
|
|
742
|
+
//
|
|
743
|
+
// function GetSigImageB64( )
|
|
744
|
+
// {
|
|
745
|
+
// var xhr2 = new XMLHttpRequest();
|
|
746
|
+
// xhr2.open("GET", baseUri + "SigImage/1", false );
|
|
747
|
+
// xhr2.responseType = "blob"
|
|
748
|
+
// xhr2.send(null);
|
|
749
|
+
// if (xhr2.readyState == 4 && xhr.status == 200)
|
|
750
|
+
// {
|
|
751
|
+
// return window.URL.createObjectURL(xhr2.response);
|
|
752
|
+
// }
|
|
753
|
+
// return null;
|
|
754
|
+
// }
|
|
755
|
+
static SetImageXSize(v) {
|
|
756
|
+
var Prop = 'ImageXSize/';
|
|
757
|
+
Prop = Prop + v;
|
|
758
|
+
this.SigWebSetPropertySync(Prop);
|
|
759
|
+
}
|
|
760
|
+
static GetImageXSize() {
|
|
761
|
+
var Prop = 'ImageXSize';
|
|
762
|
+
Prop = Prop;
|
|
763
|
+
return this.SigWebGetProperty(Prop);
|
|
764
|
+
}
|
|
765
|
+
static SetImageYSize(v) {
|
|
766
|
+
var Prop = 'ImageYSize/';
|
|
767
|
+
Prop = Prop + v;
|
|
768
|
+
this.SigWebSetPropertySync(Prop);
|
|
769
|
+
}
|
|
770
|
+
static GetImageYSize() {
|
|
771
|
+
var Prop = 'ImageYSize';
|
|
772
|
+
Prop = Prop;
|
|
773
|
+
return this.SigWebGetProperty(Prop);
|
|
774
|
+
}
|
|
775
|
+
static SetImagePenWidth(v) {
|
|
776
|
+
var Prop = 'ImagePenWidth/';
|
|
777
|
+
Prop = Prop + v;
|
|
778
|
+
this.SigWebSetPropertySync(Prop);
|
|
779
|
+
}
|
|
780
|
+
static GetImagePenWidth() {
|
|
781
|
+
var Prop = 'ImagePenWidth';
|
|
782
|
+
Prop = Prop;
|
|
783
|
+
return this.SigWebGetProperty(Prop);
|
|
784
|
+
}
|
|
785
|
+
static SetImageTimeStamp(v) {
|
|
786
|
+
var Prop = 'ImageTimeStamp/';
|
|
787
|
+
Prop = Prop + v;
|
|
788
|
+
this.SigWebSetPropertySync(Prop);
|
|
789
|
+
}
|
|
790
|
+
static GetImageTimeStamp() {
|
|
791
|
+
var Prop = 'ImageTimeStamp';
|
|
792
|
+
Prop = Prop;
|
|
793
|
+
return this.SigWebGetProperty(Prop);
|
|
794
|
+
}
|
|
795
|
+
static SetImageTimeStampPosX(v) {
|
|
796
|
+
var Prop = 'ImageTimeStampPosX/';
|
|
797
|
+
Prop = Prop + v;
|
|
798
|
+
this.SigWebSetPropertySync(Prop);
|
|
799
|
+
}
|
|
800
|
+
static GetImageTimeStampPosX() {
|
|
801
|
+
var Prop = 'ImageTimeStampPosX';
|
|
802
|
+
Prop = Prop;
|
|
803
|
+
return this.SigWebGetProperty(Prop);
|
|
804
|
+
}
|
|
805
|
+
static SetImageTimeStampPosY(v) {
|
|
806
|
+
var Prop = 'ImageTimeStampPosY/';
|
|
807
|
+
Prop = Prop + v;
|
|
808
|
+
this.SigWebSetPropertySync(Prop);
|
|
809
|
+
}
|
|
810
|
+
static GetImageTimeStampPosY() {
|
|
811
|
+
var Prop = 'ImageTimeStampPosY';
|
|
812
|
+
Prop = Prop;
|
|
813
|
+
return this.SigWebGetProperty(Prop);
|
|
814
|
+
}
|
|
815
|
+
static SetImageTimeStampSize(v) {
|
|
816
|
+
var Prop = 'ImageTimeStampSize/';
|
|
817
|
+
Prop = Prop + v;
|
|
818
|
+
this.SigWebSetPropertySync(Prop);
|
|
819
|
+
}
|
|
820
|
+
static GetImageTimeStampSize() {
|
|
821
|
+
var Prop = 'ImageTimeStampSize';
|
|
822
|
+
Prop = Prop;
|
|
823
|
+
return this.SigWebGetProperty(Prop);
|
|
824
|
+
}
|
|
825
|
+
static SetImageAnnotate(v) {
|
|
826
|
+
var Prop = 'ImageAnnotate/';
|
|
827
|
+
Prop = Prop + v;
|
|
828
|
+
this.SigWebSetPropertySync(Prop);
|
|
829
|
+
}
|
|
830
|
+
static GetImageAnnotate() {
|
|
831
|
+
var Prop = 'ImageAnnotate';
|
|
832
|
+
Prop = Prop;
|
|
833
|
+
return this.SigWebGetProperty(Prop);
|
|
834
|
+
}
|
|
835
|
+
static SetImageAnnotatePosX(v) {
|
|
836
|
+
var Prop = 'ImageAnnotatePosX/';
|
|
837
|
+
Prop = Prop + v;
|
|
838
|
+
this.SigWebSetPropertySync(Prop);
|
|
839
|
+
}
|
|
840
|
+
static GetImageAnnotatePosX() {
|
|
841
|
+
var Prop = 'ImageAnnotatePosX';
|
|
842
|
+
Prop = Prop;
|
|
843
|
+
return this.SigWebGetProperty(Prop);
|
|
844
|
+
}
|
|
845
|
+
static SetImageAnnotatePosY(v) {
|
|
846
|
+
var Prop = 'ImageAnnotatePosY/';
|
|
847
|
+
Prop = Prop + v;
|
|
848
|
+
this.SigWebSetPropertySync(Prop);
|
|
849
|
+
}
|
|
850
|
+
static GetImageAnnotatePosY() {
|
|
851
|
+
var Prop = 'ImageAnnotatePosY';
|
|
852
|
+
Prop = Prop;
|
|
853
|
+
return this.SigWebGetProperty(Prop);
|
|
854
|
+
}
|
|
855
|
+
static SetImageAnnotateSize(v) {
|
|
856
|
+
var Prop = 'ImageAnnotateSize/';
|
|
857
|
+
Prop = Prop + v;
|
|
858
|
+
this.SigWebSetPropertySync(Prop);
|
|
859
|
+
}
|
|
860
|
+
static GetImageAnnotateSize() {
|
|
861
|
+
var Prop = 'ImageAnnotateSize';
|
|
862
|
+
Prop = Prop;
|
|
863
|
+
return this.SigWebGetProperty(Prop);
|
|
864
|
+
}
|
|
865
|
+
static SetJustifyX(v) {
|
|
866
|
+
var Prop = 'JustifyX/';
|
|
867
|
+
Prop = Prop + v;
|
|
868
|
+
this.SigWebSetPropertySync(Prop);
|
|
869
|
+
}
|
|
870
|
+
static GetJustifyX() {
|
|
871
|
+
var Prop = 'JustifyX';
|
|
872
|
+
Prop = Prop;
|
|
873
|
+
return this.SigWebGetProperty(Prop);
|
|
874
|
+
}
|
|
875
|
+
static SetJustifyY(v) {
|
|
876
|
+
var Prop = 'JustifyY/';
|
|
877
|
+
Prop = Prop + v;
|
|
878
|
+
this.SigWebSetPropertySync(Prop);
|
|
879
|
+
}
|
|
880
|
+
static GetJustifyY() {
|
|
881
|
+
var Prop = 'JustifyY';
|
|
882
|
+
Prop = Prop;
|
|
883
|
+
return this.SigWebGetProperty(Prop);
|
|
884
|
+
}
|
|
885
|
+
static SetJustifyMode(v) {
|
|
886
|
+
var Prop = 'JustifyMode/';
|
|
887
|
+
Prop = Prop + v;
|
|
888
|
+
this.SigWebSetPropertySync(Prop);
|
|
889
|
+
}
|
|
890
|
+
static GetJustifyMode() {
|
|
891
|
+
var Prop = 'JustifyMode';
|
|
892
|
+
Prop = Prop;
|
|
893
|
+
return this.SigWebGetProperty(Prop);
|
|
894
|
+
}
|
|
895
|
+
//
|
|
896
|
+
// SigPlusNETKeyPad.cs
|
|
897
|
+
//
|
|
898
|
+
static KeyPadAddHotSpot(key, coord, xp, yp, xs, ys) {
|
|
899
|
+
var Prop = 'KeyPadAddHotSpot/';
|
|
900
|
+
Prop = Prop + key + ',' + coord + ',' + xp + ',' + yp + ',' + xs + ',' + ys;
|
|
901
|
+
this.SigWebSetPropertySync(Prop);
|
|
902
|
+
}
|
|
903
|
+
static KeyPadMarkHotSpot(key, coord, xp, yp, xs, ys) {
|
|
904
|
+
this.LCDWriteString(0, 2, xp, yp, '16pt sans-serif', 32, '+');
|
|
905
|
+
this.LCDWriteString(0, 2, xp + xs, yp, '16pt sans-serif', 32, '+');
|
|
906
|
+
this.LCDWriteString(0, 2, xp, yp + ys, '16pt sans-serif', 32, '+');
|
|
907
|
+
this.LCDWriteString(0, 2, xp + xs, yp + ys, '16pt sans-serif', 32, '+');
|
|
908
|
+
}
|
|
909
|
+
static KeyPadQueryHotSpot(key) {
|
|
910
|
+
var Prop = 'KeyPadQueryHotSpot/';
|
|
911
|
+
Prop = Prop + key;
|
|
912
|
+
return this.SigWebGetProperty(Prop);
|
|
913
|
+
}
|
|
914
|
+
static KeyPadClearHotSpotList() {
|
|
915
|
+
var Prop = 'KeyPadClearHotSpotList';
|
|
916
|
+
this.SigWebSetPropertySync(Prop);
|
|
917
|
+
}
|
|
918
|
+
static SetSigWindow(coords, xp, yp, xs, ys) {
|
|
919
|
+
var Prop = 'SigWindow/';
|
|
920
|
+
Prop = Prop + coords + ',' + xp + ',' + yp + ',' + xs + ',' + ys;
|
|
921
|
+
this.SigWebSetPropertySync(Prop);
|
|
922
|
+
}
|
|
923
|
+
static ClearSigWindow(inside) {
|
|
924
|
+
var Prop = 'ClearSigWindow/';
|
|
925
|
+
Prop = Prop + inside;
|
|
926
|
+
this.SigWebSetPropertySync(Prop);
|
|
927
|
+
}
|
|
928
|
+
//
|
|
929
|
+
// SigPlusNETLCD.cs
|
|
930
|
+
//
|
|
931
|
+
static SetLCDCaptureMode(v) {
|
|
932
|
+
var Prop = 'CaptureMode/';
|
|
933
|
+
Prop = Prop + v;
|
|
934
|
+
this.SigWebSetPropertySync(Prop);
|
|
935
|
+
}
|
|
936
|
+
static GetLCDCaptureMode() {
|
|
937
|
+
var Prop = 'CaptureMode';
|
|
938
|
+
Prop = Prop;
|
|
939
|
+
return this.SigWebGetProperty(Prop);
|
|
940
|
+
}
|
|
941
|
+
static LCDSetWindow(xP, yP, xS, yS) {
|
|
942
|
+
var Prop = 'LCDSetWindow/';
|
|
943
|
+
Prop = Prop + xP + ',' + yP + ',' + xS + ',' + yS;
|
|
944
|
+
this.SigWebSetPropertySync(Prop);
|
|
945
|
+
}
|
|
946
|
+
static LCDWriteString(dest, mode, x, y, fnt, size, str) {
|
|
947
|
+
var c = document.createElement('canvas');
|
|
948
|
+
var cntx = c.getContext('2d');
|
|
949
|
+
cntx.font = fnt;
|
|
950
|
+
var txt = str;
|
|
951
|
+
var xs = Math.round(cntx.measureText(txt).width);
|
|
952
|
+
var ys = size;
|
|
953
|
+
c.width = xs;
|
|
954
|
+
c.height = ys;
|
|
955
|
+
if (xs == 0) {
|
|
956
|
+
return;
|
|
957
|
+
}
|
|
958
|
+
cntx.font = fnt;
|
|
959
|
+
cntx.fillStyle = '#FFFFFF';
|
|
960
|
+
cntx.rect(0, 0, xs, ys);
|
|
961
|
+
cntx.fill();
|
|
962
|
+
cntx.fillStyle = '#000000';
|
|
963
|
+
cntx.textBaseline = 'top';
|
|
964
|
+
cntx.fillText(txt, 0, 0);
|
|
965
|
+
cntx.drawImage(cntx.canvas, 0, 0, xs, ys);
|
|
966
|
+
var Gstr = this.createLcdBitmapFromCanvas(c, x, y, xs, ys);
|
|
967
|
+
this.LcdWriteImageStream(dest, mode, x, y, xs, ys, Gstr);
|
|
968
|
+
}
|
|
969
|
+
static LCDDrawRectangle(dest, mode, x, y, xs, ys, fill) {
|
|
970
|
+
var c = document.createElement('canvas');
|
|
971
|
+
var cntx = c.getContext('2d');
|
|
972
|
+
c.width = xs;
|
|
973
|
+
c.height = ys;
|
|
974
|
+
cntx.fillStyle = fill;
|
|
975
|
+
cntx.rect(0, 0, xs, ys);
|
|
976
|
+
cntx.fill();
|
|
977
|
+
cntx.drawImage(cntx.canvas, 0, 0, xs, ys);
|
|
978
|
+
var Gstr = this.createLcdBitmapFromCanvas(c, x, y, xs, ys);
|
|
979
|
+
this.LcdWriteImageBlob(dest, mode, x, y, xs, ys, Gstr);
|
|
980
|
+
}
|
|
981
|
+
static LCDDrawButton(dest, mode, x, y, xs, ys, strys, fill, fnt, str) {
|
|
982
|
+
var c = document.createElement('canvas');
|
|
983
|
+
var cntx = c.getContext('2d');
|
|
984
|
+
cntx.font = fnt;
|
|
985
|
+
var txt = str;
|
|
986
|
+
var sxs = Math.round(cntx.measureText(txt).width);
|
|
987
|
+
var sys = strys;
|
|
988
|
+
c.width = xs;
|
|
989
|
+
c.height = ys;
|
|
990
|
+
cntx.font = fnt;
|
|
991
|
+
cntx.fillStyle = fill;
|
|
992
|
+
cntx.rect(0, 0, xs, ys);
|
|
993
|
+
cntx.fill();
|
|
994
|
+
cntx.fillStyle = '#FFFFFF';
|
|
995
|
+
cntx.textBaseline = 'top';
|
|
996
|
+
cntx.fillText(txt, (xs - sxs) / 2, (ys - sys) / 2);
|
|
997
|
+
cntx.drawImage(cntx.canvas, 0, 0, xs, ys);
|
|
998
|
+
var Gstr = this.createLcdBitmapFromCanvas(c, x, y, xs, ys);
|
|
999
|
+
this.LcdWriteImageBlob(dest, mode, x, y, xs, ys, Gstr);
|
|
1000
|
+
}
|
|
1001
|
+
static LCDWriteStringWindow(dest, mode, x, y, fnt, xsize, ysize, str) {
|
|
1002
|
+
var c = document.createElement('canvas');
|
|
1003
|
+
var cntx = c.getContext('2d');
|
|
1004
|
+
cntx.font = fnt;
|
|
1005
|
+
var txt = str;
|
|
1006
|
+
var xs = xsize;
|
|
1007
|
+
var ys = ysize;
|
|
1008
|
+
c.width = xs;
|
|
1009
|
+
c.height = ys;
|
|
1010
|
+
cntx.font = fnt;
|
|
1011
|
+
cntx.fillStyle = '#FFFFFF';
|
|
1012
|
+
cntx.rect(0, 0, xs, ys);
|
|
1013
|
+
cntx.fill();
|
|
1014
|
+
cntx.fillStyle = '#000000';
|
|
1015
|
+
cntx.textBaseline = 'top';
|
|
1016
|
+
cntx.fillText(txt, 0, 0);
|
|
1017
|
+
cntx.drawImage(cntx.canvas, 0, 0, xs, ys);
|
|
1018
|
+
var Gstr = this.createLcdBitmapFromCanvas(c, x, y, xs, ys);
|
|
1019
|
+
this.LcdWriteImageBlob(dest, mode, x, y, xs, ys, Gstr);
|
|
1020
|
+
}
|
|
1021
|
+
static LCDStringWidth(fnt, str) {
|
|
1022
|
+
var c = document.createElement('canvas');
|
|
1023
|
+
var cntx = c.getContext('2d');
|
|
1024
|
+
cntx.font = fnt;
|
|
1025
|
+
var txt = str;
|
|
1026
|
+
var xs = Math.round(cntx.measureText(txt).width);
|
|
1027
|
+
return xs;
|
|
1028
|
+
}
|
|
1029
|
+
static LCDStringHeight(fnt, str) {
|
|
1030
|
+
return 16;
|
|
1031
|
+
}
|
|
1032
|
+
static LcdRefresh(Mode, Xp, Yp, Xs, Ys) {
|
|
1033
|
+
var Prop = 'LcdRefresh/';
|
|
1034
|
+
Prop = Prop + Mode + ',' + Xp + ',' + Yp + ',' + Xs + ',' + Ys;
|
|
1035
|
+
this.SigWebSetPropertySync(Prop);
|
|
1036
|
+
}
|
|
1037
|
+
static LCDSendCmdString(CmdStr, ReturnCount, Result, TimeOut) {
|
|
1038
|
+
var Prop = 'LcdSendCmdString/';
|
|
1039
|
+
Prop = Prop + ReturnCount + ',' + TimeOut;
|
|
1040
|
+
Result = this.SigWebSetStreamProperty(Prop, CmdStr);
|
|
1041
|
+
}
|
|
1042
|
+
static LCDSendCmdData(CmdStr, ReturnCount, Result, TimeOut) {
|
|
1043
|
+
var Prop = 'LcdSendCmdData/';
|
|
1044
|
+
Prop = Prop + ReturnCount + ',' + TimeOut;
|
|
1045
|
+
Result = this.SigWebSetStreamProperty(Prop, CmdStr);
|
|
1046
|
+
}
|
|
1047
|
+
// function LCDSendWindowedGraphicCanvas( dest, mode, x, y, canvas )
|
|
1048
|
+
// {
|
|
1049
|
+
// }
|
|
1050
|
+
// function LCDSendWindowedGraphicCanvas( dest, mode, x, y, xs, ys, canvas )
|
|
1051
|
+
// {
|
|
1052
|
+
// var Gstr = this.createLcdBitmapFromCanvas( canvas, 0, 0, xs, ys)
|
|
1053
|
+
// LcdWriteImageStream( dest, mode, x, y, xs, ys, Gstr );
|
|
1054
|
+
// }
|
|
1055
|
+
static LCDSendWindowedGraphicCanvas(dest, mode, x, y, xs, ys, c, xps, yps) {
|
|
1056
|
+
var canvas = document.createElement('canvas');
|
|
1057
|
+
var Gstr = this.createLcdBitmapFromCanvas(canvas, xps, yps, xs, ys);
|
|
1058
|
+
this.LcdWriteImageStream(dest, mode, x, y, xs, ys, Gstr);
|
|
1059
|
+
}
|
|
1060
|
+
static LCDSendGraphicUrl(dest, mode, x, y, url) {
|
|
1061
|
+
this.LcdWriteImage(dest, mode, x, y, url);
|
|
1062
|
+
}
|
|
1063
|
+
// function LCDSendGraphic( Dest, Mode, XPos, YPos, ImageFileName ) {}
|
|
1064
|
+
// function LCDSendGraphicURL( Dest, Mode, XPos, YPos, URL ) {}
|
|
1065
|
+
static LCDClear() {
|
|
1066
|
+
var Prop = 'LcdClear';
|
|
1067
|
+
Prop = Prop;
|
|
1068
|
+
return this.SigWebGetProperty(Prop);
|
|
1069
|
+
}
|
|
1070
|
+
static LCDSetTabletMap(LCDType, LCDXSize, LCDYSize, LCDXStart, LCDYStart, LCDXStop, LCDYStop) { }
|
|
1071
|
+
static LCDSetPixelDepth(v) {
|
|
1072
|
+
var Prop = 'LcdSetPixelDepth/';
|
|
1073
|
+
Prop = Prop + v;
|
|
1074
|
+
this.SigWebSetPropertySync(Prop);
|
|
1075
|
+
}
|
|
1076
|
+
static LCDGetLCDSize() {
|
|
1077
|
+
var Prop = 'LcdGetLcdSize';
|
|
1078
|
+
Prop = Prop;
|
|
1079
|
+
return this.SigWebGetProperty(Prop);
|
|
1080
|
+
}
|
|
1081
|
+
static LCDGetCompressionMode() {
|
|
1082
|
+
var Prop = 'LcdCompressionMode';
|
|
1083
|
+
Prop = Prop;
|
|
1084
|
+
return this.SigWebGetProperty(Prop);
|
|
1085
|
+
}
|
|
1086
|
+
static LCDGetZCompressionMode() {
|
|
1087
|
+
var Prop = 'LcdZCompressionMode';
|
|
1088
|
+
Prop = Prop;
|
|
1089
|
+
return this.SigWebGetProperty(Prop);
|
|
1090
|
+
}
|
|
1091
|
+
//
|
|
1092
|
+
// SigPlusNETLCD.cs
|
|
1093
|
+
//
|
|
1094
|
+
static SetRealTabletState(v) {
|
|
1095
|
+
var Prop = 'TabletState/';
|
|
1096
|
+
Prop = Prop + v;
|
|
1097
|
+
this.SigWebSetPropertySync(Prop);
|
|
1098
|
+
}
|
|
1099
|
+
static GetTabletState() {
|
|
1100
|
+
var Prop = 'TabletState';
|
|
1101
|
+
Prop = Prop;
|
|
1102
|
+
return this.SigWebGetProperty(Prop);
|
|
1103
|
+
}
|
|
1104
|
+
static SetTabletLogicalXSize(v) {
|
|
1105
|
+
var Prop = 'TabletLogicalXSize/';
|
|
1106
|
+
Prop = Prop + v;
|
|
1107
|
+
this.SigWebSetPropertySync(Prop);
|
|
1108
|
+
}
|
|
1109
|
+
static GetTabletLogicalXSize() {
|
|
1110
|
+
var Prop = 'TabletLogicalXSize';
|
|
1111
|
+
Prop = Prop;
|
|
1112
|
+
return this.SigWebGetProperty(Prop);
|
|
1113
|
+
}
|
|
1114
|
+
static GetTabletLogicalYSize() {
|
|
1115
|
+
var Prop = 'TabletLogicalYSize';
|
|
1116
|
+
Prop = Prop;
|
|
1117
|
+
return this.SigWebGetProperty(Prop);
|
|
1118
|
+
}
|
|
1119
|
+
static SetTabletLogicalYSize(v) {
|
|
1120
|
+
var Prop = 'TabletLogicalYSize/';
|
|
1121
|
+
Prop = Prop + v;
|
|
1122
|
+
this.SigWebSetPropertySync(Prop);
|
|
1123
|
+
}
|
|
1124
|
+
static SetTabletXStart(v) {
|
|
1125
|
+
var Prop = 'TabletXStart/';
|
|
1126
|
+
Prop = Prop + v;
|
|
1127
|
+
this.SigWebSetPropertySync(Prop);
|
|
1128
|
+
}
|
|
1129
|
+
static GetTabletXStart() {
|
|
1130
|
+
var Prop = 'TabletXStart';
|
|
1131
|
+
Prop = Prop;
|
|
1132
|
+
return this.SigWebGetProperty(Prop);
|
|
1133
|
+
}
|
|
1134
|
+
static SetTabletYStart(v) {
|
|
1135
|
+
var Prop = 'TabletYStart/';
|
|
1136
|
+
Prop = Prop + v;
|
|
1137
|
+
this.SigWebSetPropertySync(Prop);
|
|
1138
|
+
}
|
|
1139
|
+
static GetTabletYStart() {
|
|
1140
|
+
var Prop = 'TabletYStart';
|
|
1141
|
+
Prop = Prop;
|
|
1142
|
+
return this.SigWebGetProperty(Prop);
|
|
1143
|
+
}
|
|
1144
|
+
static SetTabletXStop(v) {
|
|
1145
|
+
var Prop = 'TabletXStop/';
|
|
1146
|
+
Prop = Prop + v;
|
|
1147
|
+
this.SigWebSetPropertySync(Prop);
|
|
1148
|
+
}
|
|
1149
|
+
static GetTabletXStop() {
|
|
1150
|
+
var Prop = 'TabletXStop';
|
|
1151
|
+
Prop = Prop;
|
|
1152
|
+
return this.SigWebGetProperty(Prop);
|
|
1153
|
+
}
|
|
1154
|
+
static SetTabletYStop(v) {
|
|
1155
|
+
var Prop = 'TabletYStop/';
|
|
1156
|
+
Prop = Prop + v;
|
|
1157
|
+
this.SigWebSetPropertySync(Prop);
|
|
1158
|
+
}
|
|
1159
|
+
static GetTabletYStop() {
|
|
1160
|
+
var Prop = 'TabletYStop';
|
|
1161
|
+
Prop = Prop;
|
|
1162
|
+
return this.SigWebGetProperty(Prop);
|
|
1163
|
+
}
|
|
1164
|
+
static SetTabletFilterPoints(v) {
|
|
1165
|
+
var Prop = 'TabletFilterPoints/';
|
|
1166
|
+
Prop = Prop + v;
|
|
1167
|
+
this.SigWebSetPropertySync(Prop);
|
|
1168
|
+
}
|
|
1169
|
+
static GetTabletFilterPoints() {
|
|
1170
|
+
var Prop = 'TabletFilterPoints';
|
|
1171
|
+
Prop = Prop;
|
|
1172
|
+
return this.SigWebGetProperty(Prop);
|
|
1173
|
+
}
|
|
1174
|
+
static SetTabletTimingAdvance(v) {
|
|
1175
|
+
var Prop = 'TabletTimingAdvance/';
|
|
1176
|
+
Prop = Prop + v;
|
|
1177
|
+
this.SigWebSetPropertySync(Prop);
|
|
1178
|
+
}
|
|
1179
|
+
static GetTabletTimingAdvance() {
|
|
1180
|
+
var Prop = 'TabletTimingAdvance';
|
|
1181
|
+
Prop = Prop;
|
|
1182
|
+
return this.SigWebGetProperty(Prop);
|
|
1183
|
+
}
|
|
1184
|
+
static SetTabletComPort(v) {
|
|
1185
|
+
var Prop = 'TabletComPort/';
|
|
1186
|
+
Prop = Prop + v;
|
|
1187
|
+
this.SigWebSetPropertySync(Prop);
|
|
1188
|
+
}
|
|
1189
|
+
static GetTabletComPort() {
|
|
1190
|
+
var Prop = 'TabletComPort';
|
|
1191
|
+
Prop = Prop;
|
|
1192
|
+
return this.SigWebGetProperty(Prop);
|
|
1193
|
+
}
|
|
1194
|
+
static SetTabletBaudRate(v) {
|
|
1195
|
+
var Prop = 'TabletBaudRate/';
|
|
1196
|
+
Prop = Prop + v;
|
|
1197
|
+
this.SigWebSetPropertySync(Prop);
|
|
1198
|
+
}
|
|
1199
|
+
static GetTabletBaudRate() {
|
|
1200
|
+
var Prop = 'TabletBaudRate';
|
|
1201
|
+
Prop = Prop;
|
|
1202
|
+
return this.SigWebGetProperty(Prop);
|
|
1203
|
+
}
|
|
1204
|
+
static SetTabletRotation(v) {
|
|
1205
|
+
var Prop = 'TabletRotation/';
|
|
1206
|
+
Prop = Prop + v;
|
|
1207
|
+
this.SigWebSetPropertySync(Prop);
|
|
1208
|
+
}
|
|
1209
|
+
static GetTabletRotation() {
|
|
1210
|
+
var Prop = 'TabletRotation';
|
|
1211
|
+
Prop = Prop;
|
|
1212
|
+
return this.SigWebGetProperty(Prop);
|
|
1213
|
+
}
|
|
1214
|
+
static SetTabletType(v) {
|
|
1215
|
+
var Prop = 'TabletType/';
|
|
1216
|
+
Prop = Prop + v;
|
|
1217
|
+
this.SigWebSetPropertySync(Prop);
|
|
1218
|
+
}
|
|
1219
|
+
static GetTabletType() {
|
|
1220
|
+
var Prop = 'TabletType';
|
|
1221
|
+
Prop = Prop;
|
|
1222
|
+
return this.SigWebGetProperty(Prop);
|
|
1223
|
+
}
|
|
1224
|
+
static SetServerTabletType(v) {
|
|
1225
|
+
var Prop = 'ServerTabletType/';
|
|
1226
|
+
Prop = Prop + v;
|
|
1227
|
+
this.SigWebSetPropertySync(Prop);
|
|
1228
|
+
}
|
|
1229
|
+
static GetServerTabletType() {
|
|
1230
|
+
var Prop = 'ServerTabletType';
|
|
1231
|
+
Prop = Prop;
|
|
1232
|
+
return this.SigWebGetProperty(Prop);
|
|
1233
|
+
}
|
|
1234
|
+
static SetTabletComTest(v) {
|
|
1235
|
+
var Prop = 'TabletComTest/';
|
|
1236
|
+
Prop = Prop + v;
|
|
1237
|
+
this.SigWebSetPropertySync(Prop);
|
|
1238
|
+
}
|
|
1239
|
+
static GetTabletComTest() {
|
|
1240
|
+
var Prop = 'TabletComTest';
|
|
1241
|
+
Prop = Prop;
|
|
1242
|
+
return this.SigWebGetProperty(Prop);
|
|
1243
|
+
}
|
|
1244
|
+
static SetTabletResolution(v) {
|
|
1245
|
+
var Prop = 'TabletResolution/';
|
|
1246
|
+
Prop = Prop + v;
|
|
1247
|
+
this.SigWebSetPropertySync(Prop);
|
|
1248
|
+
}
|
|
1249
|
+
static GetTabletResolution() {
|
|
1250
|
+
var Prop = 'TabletResolution';
|
|
1251
|
+
Prop = Prop;
|
|
1252
|
+
return this.SigWebGetProperty(Prop);
|
|
1253
|
+
}
|
|
1254
|
+
static TabletConnectQuery() {
|
|
1255
|
+
var Prop = 'TabletConnectQuery';
|
|
1256
|
+
Prop = Prop;
|
|
1257
|
+
return this.SigWebGetProperty(Prop);
|
|
1258
|
+
}
|
|
1259
|
+
static TabletModelNumber() {
|
|
1260
|
+
var Prop = 'TabletModelNumber';
|
|
1261
|
+
Prop = Prop;
|
|
1262
|
+
return this.SigWebGetProperty(Prop);
|
|
1263
|
+
}
|
|
1264
|
+
static TabletSerialNumber() {
|
|
1265
|
+
var Prop = 'TabletSerialNumber';
|
|
1266
|
+
Prop = Prop;
|
|
1267
|
+
return this.SigWebGetProperty(Prop);
|
|
1268
|
+
}
|
|
1269
|
+
static SetTabletPortPath(v) {
|
|
1270
|
+
var Prop = 'TabletPortPath/';
|
|
1271
|
+
Prop = Prop + v;
|
|
1272
|
+
this.SigWebSetPropertySync(Prop);
|
|
1273
|
+
}
|
|
1274
|
+
static SetTabletLocalIniFilePath(v) {
|
|
1275
|
+
var Prop = 'TabletLocalIniFilePath/';
|
|
1276
|
+
Prop = Prop + v;
|
|
1277
|
+
this.SigWebSetPropertySync(Prop);
|
|
1278
|
+
}
|
|
1279
|
+
static SetTabletModel(v) {
|
|
1280
|
+
var Prop = 'TabletModel/';
|
|
1281
|
+
Prop = Prop + v;
|
|
1282
|
+
this.SigWebSetPropertySync(Prop);
|
|
1283
|
+
}
|
|
1284
|
+
static SetSerialPortCloseDelay(v) {
|
|
1285
|
+
var Prop = 'SerialPortCloseDelay/';
|
|
1286
|
+
Prop = Prop + v;
|
|
1287
|
+
this.SigWebSetPropertySync(Prop);
|
|
1288
|
+
}
|
|
1289
|
+
static GetSerialPortCloseDelay() {
|
|
1290
|
+
var Prop = 'SerialPortCloseDelay';
|
|
1291
|
+
Prop = Prop;
|
|
1292
|
+
return this.SigWebGetProperty(Prop);
|
|
1293
|
+
}
|
|
1294
|
+
static EnableTabletEncryption() {
|
|
1295
|
+
var Prop = 'EnableTabletEncryption';
|
|
1296
|
+
Prop = Prop;
|
|
1297
|
+
this.SigWebSetPropertySync(Prop);
|
|
1298
|
+
}
|
|
1299
|
+
static SetTabletEncryptionMode(hmode, tmode) {
|
|
1300
|
+
var Prop = 'TabletEncryptionMode/';
|
|
1301
|
+
Prop = Prop + hmode + ',' + tmode;
|
|
1302
|
+
this.SigWebSetPropertySync(Prop);
|
|
1303
|
+
}
|
|
1304
|
+
static SetMaxLogFileSize(v) {
|
|
1305
|
+
var Prop = 'MaxLogFileSize/';
|
|
1306
|
+
Prop = Prop + v;
|
|
1307
|
+
this.SigWebSetPropertySync(Prop);
|
|
1308
|
+
}
|
|
1309
|
+
static GetSigSockServerPath() {
|
|
1310
|
+
var Prop = 'SigSockServerPath';
|
|
1311
|
+
Prop = Prop;
|
|
1312
|
+
return this.SigWebGetProperty(Prop);
|
|
1313
|
+
}
|
|
1314
|
+
static GetSigSockClientName() {
|
|
1315
|
+
var Prop = 'SigSockClientName';
|
|
1316
|
+
Prop = Prop;
|
|
1317
|
+
return this.SigWebGetProperty(Prop);
|
|
1318
|
+
}
|
|
1319
|
+
static GetSigSockPortNumber() {
|
|
1320
|
+
var Prop = 'SigSockPortNumber';
|
|
1321
|
+
Prop = Prop;
|
|
1322
|
+
return this.SigWebGetProperty(Prop);
|
|
1323
|
+
}
|
|
1324
|
+
static SetSigSockServerPath(v) {
|
|
1325
|
+
var Prop = 'SigSockServerPath/';
|
|
1326
|
+
Prop = Prop + v;
|
|
1327
|
+
this.SigWebSetPropertySync(Prop);
|
|
1328
|
+
}
|
|
1329
|
+
static SetSigSockClientName(v) {
|
|
1330
|
+
var Prop = 'SigSockClientName/';
|
|
1331
|
+
Prop = Prop + v;
|
|
1332
|
+
this.SigWebSetPropertySync(Prop);
|
|
1333
|
+
}
|
|
1334
|
+
static SetPortNumber(v) {
|
|
1335
|
+
var Prop = 'PortNumber/';
|
|
1336
|
+
Prop = Prop + v;
|
|
1337
|
+
this.SigWebSetPropertySync(Prop);
|
|
1338
|
+
}
|
|
1339
|
+
static SetSigSockPortNumber(v) {
|
|
1340
|
+
var Prop = 'SigSockPortNumber/';
|
|
1341
|
+
Prop = Prop + v;
|
|
1342
|
+
this.SigWebSetPropertySync(Prop);
|
|
1343
|
+
}
|
|
1344
|
+
static GetFirmwareRevision() {
|
|
1345
|
+
var Prop = 'FirmwareRevision';
|
|
1346
|
+
Prop = Prop;
|
|
1347
|
+
return this.SigWebGetProperty(Prop);
|
|
1348
|
+
}
|
|
1349
|
+
static SetTabletData(sigStr) {
|
|
1350
|
+
var Prop = 'TabletData';
|
|
1351
|
+
Prop = Prop;
|
|
1352
|
+
this.SigWebSetStreamProperty(Prop, sigStr);
|
|
1353
|
+
}
|
|
1354
|
+
static GetTabletData() {
|
|
1355
|
+
var Prop = 'TabletData';
|
|
1356
|
+
Prop = Prop;
|
|
1357
|
+
var Str = this.SigWebGetProperty(Prop);
|
|
1358
|
+
return Str.slice(1, Str.length - 1);
|
|
1359
|
+
}
|
|
1360
|
+
static OpenTablet(v) {
|
|
1361
|
+
var Prop = 'OpenTablet/';
|
|
1362
|
+
Prop = Prop + v;
|
|
1363
|
+
this.SigWebSetPropertySync(Prop);
|
|
1364
|
+
}
|
|
1365
|
+
static CloseTablet() {
|
|
1366
|
+
var Prop = 'CloseTablet';
|
|
1367
|
+
Prop = Prop;
|
|
1368
|
+
this.SigWebSetProperty(Prop);
|
|
1369
|
+
}
|
|
1370
|
+
static ResetParameters() {
|
|
1371
|
+
var Prop = 'ResetParameters';
|
|
1372
|
+
Prop = Prop;
|
|
1373
|
+
this.SigWebSetPropertySync(Prop);
|
|
1374
|
+
}
|
|
1375
|
+
static testRawData() {
|
|
1376
|
+
this.OpenTablet(1);
|
|
1377
|
+
var Str1 = this.GetTabletData();
|
|
1378
|
+
this.CloseTablet();
|
|
1379
|
+
}
|
|
1380
|
+
static SetTabletState(v, ctx, tv) {
|
|
1381
|
+
var delay;
|
|
1382
|
+
if (tv) {
|
|
1383
|
+
delay = tv;
|
|
1384
|
+
}
|
|
1385
|
+
else {
|
|
1386
|
+
delay = 100;
|
|
1387
|
+
}
|
|
1388
|
+
if (this.GetTabletState() != v) {
|
|
1389
|
+
if (v == 1) {
|
|
1390
|
+
if (ctx) {
|
|
1391
|
+
var can = ctx.canvas;
|
|
1392
|
+
this.SetDisplayXSize(can.width);
|
|
1393
|
+
this.SetDisplayYSize(can.height);
|
|
1394
|
+
this.SigWebSetDisplayTarget(ctx);
|
|
1395
|
+
}
|
|
1396
|
+
this.SetRealTabletState(v);
|
|
1397
|
+
var data = this.GetTabletState();
|
|
1398
|
+
var dataResult = data == '' || data == null ? 0 : Number(data);
|
|
1399
|
+
var tmr = null;
|
|
1400
|
+
if (ctx && dataResult != 0) {
|
|
1401
|
+
tmr = setInterval(() => this.SigWebRefresh(), delay);
|
|
1402
|
+
}
|
|
1403
|
+
else {
|
|
1404
|
+
tmr = null;
|
|
1405
|
+
}
|
|
1406
|
+
return tmr;
|
|
1407
|
+
}
|
|
1408
|
+
else {
|
|
1409
|
+
if (ctx) {
|
|
1410
|
+
clearInterval(ctx);
|
|
1411
|
+
}
|
|
1412
|
+
this.SigWebSetDisplayTarget(null);
|
|
1413
|
+
this.SetRealTabletState(v);
|
|
1414
|
+
}
|
|
1415
|
+
}
|
|
1416
|
+
return null;
|
|
1417
|
+
}
|
|
1418
|
+
}
|
|
1419
|
+
SigWebTablet.baseUri = SigWebTablet.makeUri();
|
|
1420
|
+
SigWebTablet.Count = false;
|
|
1421
|
+
SigWebTablet.SigWebFontThreshold = 155;
|
|
1422
|
+
SigWebTablet.NumPointsLastTime = 0;
|
|
1423
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU2lnV2ViLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbGliZXktbmctY29tcG9uZW50LWxpYnJhcnkvc3JjL3V0aWxzL1NpZ1dlYi9TaWdXZWIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsa0JBQWtCO0FBQ2xCLE1BQU0sT0FBTyxZQUFZO0lBQ2YsTUFBTSxDQUFDLGFBQWEsQ0FBQyxHQUFXO1FBQ3RDLElBQUksTUFBTSxDQUFDLEdBQUcsRUFBRTtZQUNkLEdBQUcsQ0FBQyxlQUFlLENBQUMsR0FBRyxDQUFDLENBQUM7U0FDMUI7YUFBTSxJQUFJLE1BQU0sQ0FBQyxTQUFTLEVBQUU7WUFDM0IsU0FBUyxDQUFDLGVBQWUsQ0FBQyxHQUFHLENBQUMsQ0FBQztTQUNoQztJQUNILENBQUM7SUFDTyxNQUFNLENBQUMsVUFBVSxDQUFDLElBQVU7UUFDbEMsSUFBSSxNQUFNLENBQUMsR0FBRyxFQUFFO1lBQ2QsT0FBTyxHQUFHLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxDQUFDO1NBQ2xDO2FBQU0sSUFBSSxNQUFNLENBQUMsU0FBUyxFQUFFO1lBQzNCLE9BQU8sU0FBUyxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsQ0FBQztTQUN4QztRQUNELE9BQU8sRUFBRSxDQUFDLENBQUMsNENBQTRDO0lBQ3pELENBQUM7SUFZTyxNQUFNLENBQUMsT0FBTztRQUNwQixJQUFJLElBQUksR0FBRyxRQUFRLENBQUMsUUFBUSxDQUFDO1FBQzdCLElBQUksSUFBSSxJQUFJLE9BQU8sRUFBRTtZQUNuQixJQUFJLEdBQUcsT0FBTyxDQUFDO1NBQ2hCO1FBRUQsSUFBSSxJQUFJLENBQUMsSUFBSSxFQUFFLEVBQUU7WUFDZixJQUFJLElBQUksSUFBSSxRQUFRLEVBQUU7Z0JBQ3BCLE9BQU8sSUFBSSxHQUFHLHlDQUF5QyxDQUFDO2FBQ3pEO2lCQUFNO2dCQUNMLE9BQU8sSUFBSSxHQUFHLHlDQUF5QyxDQUFDO2FBQ3pE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QUFzQixDQUFDLEdBQUcsQ0FBQyxDQUFDO2lCQUNsQztnQkFDRCxJQUFJLENBQUMsa0JBQWtCLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQzNCLElBQUksSUFBSSxHQUFHLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztnQkFDakMsSUFBSSxVQUFVLEdBQUcsSUFBSSxJQUFJLEVBQUUsSUFBSSxJQUFJLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztnQkFDL0QsSUFBSSxHQUFHLEdBQUcsSUFBSSxDQUFDO2dCQUNmLElBQUksR0FBRyxJQUFJLFVBQVUsSUFBSSxDQUFDLEVBQUU7b0JBQzFCLEdBQUcsR0FBRyxXQUFXLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLGFBQWEsRUFBRSxFQUFFLEtBQUssQ0FBQyxDQUFDO2lCQUN0RDtxQkFBTTtvQkFDTCxHQUFHLEdBQUcsSUFBSSxDQUFDO2lCQUNaO2dCQUVELE9BQU8sR0FBRyxDQUFDO2FBQ1o7aUJBQU07Z0JBQ0wsSUFBSSxHQUFHLEVBQUU7b0JBQ1AsYUFBYSxDQUFDLEdBQUcsQ0FBQyxDQUFDO2lCQUNwQjtnQkFDRCxJQUFJLENBQUMsc0JBQXNCLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQ2xDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDLENBQUMsQ0FBQzthQUM1QjtTQUNGO1FBQ0QsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDOztBQXQwRGMsb0JBQU8sR0FBVyxZQUFZLENBQUMsT0FBTyxFQUFFLENBQUM7QUFFekMsa0JBQUssR0FBWSxLQUFLLENBQUM7QUFJdkIsZ0NBQW1CLEdBQUcsR0FBRyxDQUFDO0FBQzFCLDhCQUFpQixHQUFHLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIFNpZ1dlYlRhYmxldC50c1xyXG5leHBvcnQgY2xhc3MgU2lnV2ViVGFibGV0IHtcclxuICBwcml2YXRlIHN0YXRpYyByZXZva2VCbG9iVVJMKHVybDogc3RyaW5nKTogdm9pZCB7XHJcbiAgICBpZiAod2luZG93LlVSTCkge1xyXG4gICAgICBVUkwucmV2b2tlT2JqZWN0VVJMKHVybCk7XHJcbiAgICB9IGVsc2UgaWYgKHdpbmRvdy53ZWJraXRVUkwpIHtcclxuICAgICAgd2Via2l0VVJMLnJldm9rZU9iamVjdFVSTCh1cmwpO1xyXG4gICAgfVxyXG4gIH1cclxuICBwcml2YXRlIHN0YXRpYyBnZXRCbG9iVVJMKGJsb2I6IEJsb2IpOiBzdHJpbmcge1xyXG4gICAgaWYgKHdpbmRvdy5VUkwpIHtcclxuICAgICAgcmV0dXJuIFVSTC5jcmVhdGVPYmplY3RVUkwoYmxvYik7XHJcbiAgICB9IGVsc2UgaWYgKHdpbmRvdy53ZWJraXRVUkwpIHtcclxuICAgICAgcmV0dXJuIHdlYmtpdFVSTC5jcmVhdGVPYmplY3RVUkwoYmxvYik7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gJyc7IC8vIFJldG9ybmFyIHVuIHN0cmluZyB2YWPDrW8gZW4gY2FzbyBkZSBlcnJvclxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzdGF0aWMgYmFzZVVyaTogc3RyaW5nID0gU2lnV2ViVGFibGV0Lm1ha2VVcmkoKTtcclxuICBwcml2YXRlIHN0YXRpYyBjdHg7XHJcbiAgcHJpdmF0ZSBzdGF0aWMgQ291bnQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBwcml2YXRlIHN0YXRpYyBFdlN0YXR1cztcclxuICBwcml2YXRlIHN0YXRpYyBvblNpZ1BlbkRvd247XHJcbiAgcHJpdmF0ZSBzdGF0aWMgb25TaWdQZW5VcDtcclxuICBwcml2YXRlIHN0YXRpYyBTaWdXZWJGb250VGhyZXNob2xkID0gMTU1O1xyXG4gIHByaXZhdGUgc3RhdGljIE51bVBvaW50c0xhc3RUaW1lID0gMDtcclxuICBwcml2YXRlIHN0YXRpYyBTaWdJbWFnZUI2NDtcclxuXHJcbiAgcHJpdmF0ZSBzdGF0aWMgbWFrZVVyaSgpOiBzdHJpbmcge1xyXG4gICAgdmFyIHByb3QgPSBsb2NhdGlvbi5wcm90b2NvbDtcclxuICAgIGlmIChwcm90ID09ICdmaWxlOicpIHtcclxuICAgICAgcHJvdCA9ICdodHRwOic7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuaXNJRSgpKSB7XHJcbiAgICAgIGlmIChwcm90ID09ICdodHRwczonKSB7XHJcbiAgICAgICAgcmV0dXJuIHByb3QgKyAnLy90YWJsZXQuc2lnd2VidGFibGV0LmNvbTo0NzI5MC9TaWdXZWIvJztcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICByZXR1cm4gcHJvdCArICcvL3RhYmxldC5zaWd3ZWJ0YWJsZXQuY29tOjQ3Mjg5L1NpZ1dlYi8nO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuaXNDaHJvbWUoKSkge1xyXG4gICAgICBpZiAocHJvdCA9PSAnaHR0cHM6Jykge1xyXG4gICAgICAgIHJldHVybiBwcm90ICsgJy8vdGFibGV0LnNpZ3dlYnRhYmxldC5jb206NDcyOTAvU2lnV2ViLyc7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgcmV0dXJuIHByb3QgKyAnLy90YWJsZXQuc2lnd2VidGFibGV0LmNvbTo0NzI4OS9TaWdXZWIvJztcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgLy9GSVJFRk9YXHJcbiAgICAgIGlmIChwcm90ID09ICdodHRwczonKSB7XHJcbiAgICAgICAgcmV0dXJuIHByb3QgKyAnLy90YWJsZXQuc2lnd2VidGFibGV0LmNvbTo0NzI5MC9TaWdXZWIvJztcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICByZXR1cm4gcHJvdCArICcvL3RhYmxldC5zaWd3ZWJ0YWJsZXQuY29tOjQ3Mjg5L1NpZ1dlYi8nO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHN0YXRpYyBnZW5lcmF0ZVVVSUQoKTogc3RyaW5nIHtcclxuICAgIHJldHVybiAneHh4eHh4eHgteHh4eC00eHh4LXl4eHgteHh4eHh4eHh4eHh4Jy5yZXBsYWNlKFxyXG4gICAgICAvW3h5XS9nLFxyXG4gICAgICBmdW5jdGlvbiAoYykge1xyXG4gICAgICAgIGNvbnN0IHIgPSAoTWF0aC5yYW5kb20oKSAqIDE2KSB8IDA7XHJcbiAgICAgICAgY29uc3QgdiA9IGMgPT09ICd4JyA/IHIgOiAociAmIDB4MykgfCAweDg7XHJcbiAgICAgICAgcmV0dXJuIHYudG9TdHJpbmcoMTYpO1xyXG4gICAgICB9XHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIGlzU2lnV2ViSW5zdGFsbGVkKCk6IGJvb2xlYW4ge1xyXG4gICAgY29uc3QgeGhyID0gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7XHJcbiAgICB0cnkge1xyXG4gICAgICB4aHIub3BlbihcclxuICAgICAgICAnR0VUJyxcclxuICAgICAgICBgJHt0aGlzLmJhc2VVcml9VGFibGV0U3RhdGU/bm9DYWNoZT0ke3RoaXMuZ2VuZXJhdGVVVUlEKCl9YCxcclxuICAgICAgICBmYWxzZVxyXG4gICAgICApO1xyXG4gICAgICB4aHIuc2VuZCgpO1xyXG4gICAgICByZXR1cm4geGhyLnN0YXR1cyAhPT0gNDA0ICYmIHhoci5zdGF0dXMgIT09IDA7XHJcbiAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgIGNvbnNvbGUubG9nKCdFcnJvciBjaGVja2luZyBTaWdXZWIgaW5zdGFsbGF0aW9uJywgZSk7XHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHN0YXRpYyBpc0lFKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIChcclxuICAgICAgbmF2aWdhdG9yLmFwcE5hbWUgPT09ICdNaWNyb3NvZnQgSW50ZXJuZXQgRXhwbG9yZXInIHx8XHJcbiAgICAgIChuYXZpZ2F0b3IuYXBwTmFtZSA9PT0gJ05ldHNjYXBlJyAmJlxyXG4gICAgICAgIG5ldyBSZWdFeHAoJ1RyaWRlbnQvLipydjooWzAtOV17MSx9Wy4wLTldezAsfSknKS5leGVjKFxyXG4gICAgICAgICAgbmF2aWdhdG9yLnVzZXJBZ2VudFxyXG4gICAgICAgICkgIT0gbnVsbClcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgaXNDaHJvbWUoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gbmF2aWdhdG9yLnVzZXJBZ2VudC5sYXN0SW5kZXhPZignQ2hyb21lLycpID4gMDtcclxuICB9XHJcblxyXG4gIHN0YXRpYyBTaWdXZWJjcmVhdGVYSFIoKTogWE1MSHR0cFJlcXVlc3QgfCBudWxsIHtcclxuICAgIGNvbnN0IHhociA9IG5ldyBYTUxIdHRwUmVxdWVzdCgpO1xyXG4gICAgaWYgKCF4aHIpIHtcclxuICAgICAgdGhyb3cgbmV3IEVycm9yKCdObyBzZSBwdWRvIGNyZWFyIFhNTEh0dHBSZXF1ZXN0Jyk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHhocjtcclxuICB9XHJcblxyXG4gIHN0YXRpYyBTaWdXZWJTZXRQcm9wZXJ0eShwcm9wOiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgY29uc3QgeGhyOiBYTUxIdHRwUmVxdWVzdCB8IG51bGwgPSB0aGlzLlNpZ1dlYmNyZWF0ZVhIUigpO1xyXG5cclxuICAgIGlmICh4aHIpIHtcclxuICAgICAgeGhyLm9wZW4oJ1BPU1QnLCB0aGlzLmJhc2VVcmkgKyBwcm9wLCB0cnVlKTtcclxuICAgICAgeGhyLnNlbmQobnVsbCk7XHJcbiAgICAgIGlmICh4aHIucmVhZHlTdGF0ZSA9PT0gNCAmJiB4aHIuc3RhdHVzID09PSAyMDApIHtcclxuICAgICAgICByZXR1cm4geGhyLnJlc3BvbnNlVGV4dDtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuICcnO1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIFNpZ1dlYlNldFByb3BlcnR5U3luYyhwcm9wOiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgY29uc3QgeGhyOiBYTUxIdHRwUmVxdWVzdCB8IG51bGwgPSB0aGlzLlNpZ1dlYmNyZWF0ZVhIUigpO1xyXG5cclxuICAgIGlmICh4aHIpIHtcclxuICAgICAgeGhyLm9wZW4oJ1BPU1QnLCB0aGlzLmJhc2VVcmkgKyBwcm9wLCBmYWxzZSk7XHJcbiAgICAgIHhoci5zZW5kKCk7XHJcbiAgICAgIGlmICh4aHIucmVhZHlTdGF0ZSA9PT0gNCAmJiB4aHIuc3RhdHVzID09PSAyMDApIHtcclxuICAgICAgICByZXR1cm4geGhyLnJlc3BvbnNlVGV4dDtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuICcnO1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIFNpZ1dlYlNldFN0cmVhbVByb3BlcnR5KHByb3A6IHN0cmluZywgc3RybTogYW55KTogc3RyaW5nIHtcclxuICAgIGNvbnN0IHhocjogWE1MSHR0cFJlcXVlc3QgfCBudWxsID0gdGhpcy5TaWdXZWJjcmVhdGVYSFIoKTtcclxuXHJcbiAgICBpZiAoeGhyKSB7XHJcbiAgICAgIHhoci5vcGVuKCdQT1NUJywgdGhpcy5iYXNlVXJpICsgcHJvcCk7XHJcbiAgICAgIHhoci5zZXRSZXF1ZXN0SGVhZGVyKCdDb250ZW50LVR5cGUnLCAndGV4dC9wbGFpbicpO1xyXG4gICAgICB4aHIuc2VuZChzdHJtKTtcclxuICAgIH1cclxuICAgIHJldHVybiAnJztcclxuICB9XHJcblxyXG4gIHN0YXRpYyBTaWdXZWJTeW5jU2V0U3RyZWFtUHJvcGVydHkocHJvcDogc3RyaW5nLCBzdHJtOiBhbnkpOiBzdHJpbmcge1xyXG4gICAgY29uc3QgeGhyOiBYTUxIdHRwUmVxdWVzdCB8IG51bGwgPSB0aGlzLlNpZ1dlYmNyZWF0ZVhIUigpO1xyXG5cclxuICAgIGlmICh4aHIpIHtcclxuICAgICAgeGhyLm9wZW4oJ1BPU1QnLCB0aGlzLmJhc2VVcmkgKyBwcm9wLCBmYWxzZSk7XHJcbiAgICAgIHhoci5zZXRSZXF1ZXN0SGVhZGVyKCdDb250ZW50LVR5cGUnLCAndGV4dC9wbGFpbicpO1xyXG4gICAgICB4aHIuc2VuZChzdHJtKTtcclxuICAgICAgaWYgKHhoci5yZWFkeVN0YXRlID09PSA0ICYmIHhoci5zdGF0dXMgPT09IDIwMCkge1xyXG4gICAgICAgIHJldHVybiB4aHIucmVzcG9uc2VUZXh0O1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gJyc7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgU2lnV2ViU2V0SW1hZ2VTdHJlYW1Qcm9wZXJ0eShwcm9wOiBzdHJpbmcsIHN0cm06IGFueSk6IHN0cmluZyB7XHJcbiAgICBjb25zdCB4aHI6IFhNTEh0dHBSZXF1ZXN0IHwgbnVsbCA9IHRoaXMuU2lnV2ViY3JlYXRlWEhSKCk7XHJcblxyXG4gICAgaWYgKHhocikge1xyXG4gICAgICB4aHIub3BlbignUE9TVCcsIHRoaXMuYmFzZVVyaSArIHByb3AsIGZhbHNlKTtcclxuICAgICAgeGhyLnNldFJlcXVlc3RIZWFkZXIoJ0NvbnRlbnQtVHlwZScsICdpbWFnZS9wbmcnKTtcclxuICAgICAgeGhyLnNlbmQoc3RybSk7XHJcbiAgICAgIGlmICh4aHIucmVhZHlTdGF0ZSA9PT0gNCAmJiB4aHIuc3RhdHVzID09PSAyMDApIHtcclxuICAgICAgICByZXR1cm4geGhyLnJlc3BvbnNlVGV4dDtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuICcnO1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIFNpZ1dlYlNldEltYWdlQmxvYlByb3BlcnR5KHByb3AsIHN0cm0pIHtcclxuICAgIHZhciB4aHIgPSB0aGlzLlNpZ1dlYmNyZWF0ZVhIUigpO1xyXG4gICAgaWYgKHhocikge1xyXG4gICAgICB4aHIub3BlbignUE9TVCcsIHRoaXMuYmFzZVVyaSArIHByb3AsIGZhbHNlKTtcclxuICAgICAgeGhyLnNldFJlcXVlc3RIZWFkZXIoJ0NvbnRlbnQtVHlwZScsICdibG9iJyk7XHJcbiAgICAgIHhoci5zZW5kKHN0cm0pO1xyXG4gICAgICBpZiAoeGhyLnJlYWR5U3RhdGUgPT0gNCAmJiB4aHIuc3RhdHVzID09IDIwMCkge1xyXG4gICAgICAgIHJldHVybiB4aHIucmVzcG9uc2VUZXh0O1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gJyc7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgU2lnV2ViR2V0UHJvcGVydHkocHJvcCkge1xyXG4gICAgdmFyIHhociA9IHRoaXMuU2lnV2ViY3JlYXRlWEhSKCk7XHJcblxyXG4gICAgaWYgKHhocikge1xyXG4gICAgICB4aHIub3BlbihcclxuICAgICAgICAnR0VUJyxcclxuICAgICAgICB0aGlzLmJhc2VVcmkgKyBwcm9wICsgJz9ub0NhY2hlPScgKyB0aGlzLmdlbmVyYXRlVVVJRCgpLFxyXG4gICAgICAgIGZhbHNlXHJcbiAgICAgICk7XHJcbiAgICAgIHhoci5zZW5kKG51bGwpO1xyXG4gICAgICBpZiAoeGhyLnJlYWR5U3RhdGUgPT0gNCAmJiB4aHIuc3RhdHVzID09IDIwMCkge1xyXG4gICAgICAgIHJldHVybiB4aHIucmVzcG9uc2VUZXh0O1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gJyc7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgR2V0U2lnSW1hZ2VCNjQoY2FsbGJhY2spIHtcclxuICAgIHZhciBjdnMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdjYW52YXMnKTtcclxuICAgIHZhciB3aWR0aCA9IHRoaXMuR2V0SW1hZ2VYU2l6ZSgpO1xyXG4gICAgdmFyIGhlaWdodCA9IHRoaXMuR2V0SW1hZ2VZU2l6ZSgpO1xyXG4gICAgY3ZzLndpZHRoID0gd2lkdGggPT0gJycgfHwgd2lkdGggPT0gbnVsbCA/IDAgOiBOdW1iZXIod2lkdGgpO1xyXG4gICAgY3ZzLmhlaWdodCA9IGhlaWdodCA9PSAnJyB8fCBoZWlnaHQgPT0gbnVsbCA/IDAgOiBOdW1iZXIoaGVpZ2h0KTtcclxuXHJcbiAgICB2YXIgeGhyMiA9IG5ldyBYTUxIdHRwUmVxdWVzdCgpO1xyXG4gICAgeGhyMi5vcGVuKFxyXG4gICAgICAnR0VUJyxcclxuICAgICAgdGhpcy5iYXNlVXJpICsgJ1NpZ0ltYWdlLzEnICsgJz9ub0NhY2hlPScgKyB0aGlzLmdlbmVyYXRlVVVJRCgpLFxyXG4gICAgICB0cnVlXHJcbiAgICApO1xyXG4gICAgeGhyMi5yZXNwb25zZVR5cGUgPSAnYmxvYic7XHJcbiAgICB4aHIyLnNlbmQobnVsbCk7XHJcbiAgICB4aHIyLm9ubG9hZCA9ICgpID0+IHtcclxuICAgICAgdmFyIGNudHggPSBjdnMuZ2V0Q29udGV4dCgnMmQnKTtcclxuICAgICAgdmFyIGltZyA9IG5ldyBJbWFnZSgpO1xyXG4gICAgICBpbWcuc3JjID0gdGhpcy5nZXRCbG9iVVJMKHhocjIucmVzcG9uc2UpO1xyXG4gICAgICBpbWcub25sb2FkID0gKCkgPT4ge1xyXG4gICAgICAgIGNudHguZHJhd0ltYWdlKGltZywgMCwgMCk7XHJcbiAgICAgICAgdmFyIGI2NFN0cmluZyA9IGN2cy50b0RhdGFVUkwoJ2ltYWdlL3BuZycpO1xyXG4gICAgICAgIHZhciBsb2MgPSBiNjRTdHJpbmcuc2VhcmNoKCdiYXNlNjQsJyk7XHJcbiAgICAgICAgdmFyIHJldHN0cmluZyA9IGI2NFN0cmluZy5zbGljZShsb2MgKyA3LCBiNjRTdHJpbmcubGVuZ3RoKTtcclxuICAgICAgICBpZiAoY2FsbGJhY2spIHtcclxuICAgICAgICAgIGNhbGxiYWNrKHJldHN0cmluZyk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9O1xyXG4gICAgfTtcclxuICB9XHJcblxyXG4gIHN0YXRpYyBTaWdXZWJXYWl0Rm9yUGVuRG93bihjYWxsYmFjaykge1xyXG4gICAgdmFyIHhociA9IHRoaXMuU2lnV2ViY3JlYXRlWEhSKCk7XHJcblxyXG4gICAgaWYgKHhocikge1xyXG4gICAgICB4aHIub3BlbihcclxuICAgICAgICAnR0VUJyxcclxuICAgICAgICB0aGlzLmJhc2VVcmkgKyAnV2FpdEZvclBlbkRvd24nICsgJz9ub0NhY2hlPScgKyB0aGlzLmdlbmVyYXRlVVVJRCgpXHJcbiAgICAgICk7XHJcbiAgICAgIHhoci50aW1lb3V0ID0gMTAwMDA7XHJcbiAgICAgIHhoci5vbnJlYWR5c3RhdGVjaGFuZ2UgPSAoKSA9PiB7XHJcbiAgICAgICAgaWYgKHhoci5yZWFkeVN0YXRlICE9IDQpIHJldHVybjtcclxuICAgICAgICBpZiAoeGhyLnN0YXR1cyA9PSAyMDApIGNhbGxiYWNrKCk7XHJcbiAgICAgIH07XHJcbiAgICAgIHhoci5zZW5kKG51bGwpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgc3RhdGljIEdldFNpZ0ltYWdlKGN0eCkge1xyXG4gICAgdmFyIHhocjIgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTtcclxuICAgIHhocjIub3BlbihcclxuICAgICAgJ0dFVCcsXHJcbiAgICAgIHRoaXMuYmFzZVVyaSArICdTaWdJbWFnZS8xJyArICc/bm9DYWNoZT0nICsgdGhpcy5nZW5lcmF0ZVVVSUQoKSxcclxuICAgICAgdHJ1ZVxyXG4gICAgKTtcclxuICAgIHhocjIucmVzcG9uc2VUeXBlID0gJ2Jsb2InO1xyXG4gICAgeGhyMi5zZW5kKG51bGwpO1xyXG4gICAgeGhyMi5vbmxvYWQgPSAoKSA9PiB7XHJcbiAgICAgIHZhciBpbWcgPSBuZXcgSW1hZ2UoKTtcclxuICAgICAgaW1nLnNyYyA9IHRoaXMuZ2V0QmxvYlVSTCh4aHIyLnJlc3BvbnNlKTtcclxuICAgICAgaW1nLm9ubG9hZCA9ICgpID0+IHtcclxuICAgICAgICBjdHguZHJhd0ltYWdlKGltZywgMCwgMCk7XHJcbiAgICAgICAgdGhpcy5yZXZva2VCbG9iVVJMKGltZy5zcmMpO1xyXG4gICAgICAgIGltZyA9IG51bGw7XHJcbiAgICAgIH07XHJcbiAgICB9O1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIFNpZ1dlYlNldERpc3BsYXlUYXJnZXQob2JqKSB7XHJcbiAgICB0aGlzLmN0eCA9IG9iajtcclxuICB9XHJcblxyXG4gIHN0YXRpYyBTaWdXZWJSZWZyZXNoKCkge1xyXG4gICAgdmFyIE51bVBvaW50cyA9IE51bWJlcih0aGlzLk51bWJlck9mVGFibGV0UG9pbnRzKCkpO1xyXG4gICAgaWYgKE51bVBvaW50cyA9PSB0aGlzLk51bVBvaW50c0xhc3RUaW1lKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIHRoaXMuTnVtUG9pbnRzTGFzdFRpbWUgPSBOdW1Qb2ludHM7XHJcblxyXG4gICAgdmFyIHhocjIgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTtcclxuICAgIHhocjIub3BlbihcclxuICAgICAgJ0dFVCcsXHJcbiAgICAgIHRoaXMuYmFzZVVyaSArICdTaWdJbWFnZS8wJyArICc/bm9DYWNoZT0nICsgdGhpcy5nZW5lcmF0ZVVVSUQoKSxcclxuICAgICAgdHJ1ZVxyXG4gICAgKTtcclxuICAgIHhocjIucmVzcG9uc2VUeXBlID0gJ2Jsb2InO1xyXG4gICAgeGhyMi5vbmxvYWQgPSAoKSA9PiB7XHJcbiAgICAgIHZhciBpbWcgPSBuZXcgSW1hZ2UoKTtcclxuICAgICAgaW1nLnNyYyA9IHRoaXMuZ2V0QmxvYlVSTCh4aHIyLnJlc3BvbnNlKTtcclxuICAgICAgLy9cdFx0XHRcdGltZy5zcmMgPSB3aW5kb3cuVVJMLmNyZWF0ZU9iamVjdFVSTCh4aHIyLnJlc3BvbnNlKTtcclxuICAgICAgaW1nLm9ubG9hZCA9ICgpID0+IHtcclxuICAgICAgICB0aGlzLmN0eC5kcmF3SW1hZ2UoaW1nLCAwLCAwKTtcclxuICAgICAgICB0aGlzLnJldm9rZUJsb2JVUkwoaW1nLnNyYyk7XHJcbiAgICAgICAgaW1nID0gbnVsbDtcclxuICAgICAgfTtcclxuICAgIH07XHJcbiAgICB4aHIyLnNlbmQobnVsbCk7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgU2lnV2ViRXZlbnQoKSB7XHJcbiAgICB2YXIgT2xkRXZTdGF0dXMgPSB0aGlzLkV2U3RhdHVzO1xyXG5cclxuICAgIHZhciB4aHIgPSB0aGlzLlNpZ1dlYmNyZWF0ZVhIUigpO1xyXG5cclxuICAgIGlmICh4aHIpIHtcclxuICAgICAgeGhyLm9wZW4oXHJcbiAgICAgICAgJ0dFVCcsXHJcbiAgICAgICAgdGhpcy5iYXNlVXJpICsgJ0V2ZW50U3RhdHVzJyArICc/bm9DYWNoZT0nICsgdGhpcy5nZW5lcmF0ZVVVSUQoKSxcclxuICAgICAgICB0cnVlXHJcbiAgICAgICk7XHJcbiAgICAgIHhoci5vbmxvYWQgPSAoKSA9PiB7XHJcbiAgICAgICAgdGhpcy5FdlN0YXR1cyA9IHhoci5yZXNwb25zZVRleHQ7XHJcbiAgICAgICAgaWYgKE9sZEV2U3RhdHVzICYgMHgwMSAmJiB0aGlzLkV2U3RhdHVzICYgMHgwMikge1xyXG4gICAgICAgICAgaWYgKHRoaXMub25TaWdQZW5Eb3duKSB7XHJcbiAgICAgICAgICAgIHRoaXMub25TaWdQZW5Eb3duKCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoT2xkRXZTdGF0dXMgJiAweDAyICYmIHRoaXMuRXZTdGF0dXMgJiAweDAxKSB7XHJcbiAgICAgICAgICBpZiAodGhpcy5vblNpZ1BlblVwKSB7XHJcbiAgICAgICAgICAgIHRoaXMub25TaWdQZW5VcCgpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfTtcclxuICAgICAgeGhyLnNlbmQobnVsbCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgc2V0U2lnV2ViRm9udFRocmVzaG9sZCh2KSB7XHJcbiAgICB0aGlzLlNpZ1dlYkZvbnRUaHJlc2hvbGQgPSB2O1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIGNyZWF0ZUxjZEJpdG1hcEZyb21DYW52YXMob3VyQ2FudmFzLCB4cCwgeXAsIHdpZHRoLCBoZWlnaHQpIHtcclxuICAgIHZhciBjYW52YXNDdHggPSBvdXJDYW52YXMuZ2V0Q29udGV4dCgnMmQnKTtcclxuICAgIHZhciBpbWdEYXRhID0gY2FudmFzQ3R4LmdldEltYWdlRGF0YSgwLCAwLCB3aWR0aCwgaGVpZ2h0KTtcclxuICAgIHZhciBqID0gMDtcclxuICAgIHZhciBzVmFsID0gMDtcclxuICAgIHZhciBvdXREYXRhID0gJyc7XHJcbiAgICB2YXIgb3V0SWR4ID0gMDtcclxuICAgIHZhciBkYXRhID0gaW1nRGF0YS5kYXRhO1xyXG5cclxuICAgIGZvciAodmFyIHkgPSAwOyB5IDwgaGVpZ2h0OyB5KyspXHJcbiAgICAgIGZvciAodmFyIHggPSAwOyB4IDwgd2lkdGg7IHgrKykge1xyXG4gICAgICAgIHZhciB0bXAxID0gZGF0YVtqXTtcclxuICAgICAgICB2YXIgdG1wMiA9IGRhdGFbaiArIDFdO1xyXG4gICAgICAgIHZhciB0bXAzID0gZGF0YVtqICsgMl07XHJcbiAgICAgICAgdmFyIHRtcDQgPSBkYXRhW2ogKyAzXTtcclxuXHJcbiAgICAgICAgLy9cdFx0XHRcdFx0c1ZhbCA9IHRtcDEgKyAodG1wMiA8PCA4ICkgKyAoIHRtcDMgPDwgMTYgKSArICh0bXA0IDw8IDI0ICk7XHJcbiAgICAgICAgaiA9IGogKyA0O1xyXG4gICAgICAgIGlmICh0bXAxIDwgdGhpcy5TaWdXZWJGb250VGhyZXNob2xkKSB7XHJcbiAgICAgICAgICBvdXREYXRhICs9ICdCJztcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgb3V0RGF0YSArPSAnVyc7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgcmV0dXJuIG91dERhdGE7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgdG9IZXgoTmliVmFsKSB7XHJcbiAgICBzd2l0Y2ggKE5pYlZhbCkge1xyXG4gICAgICBjYXNlIDA6XHJcbiAgICAgICAgcmV0dXJuICcwJztcclxuICAgICAgY2FzZSAxOlxyXG4gICAgICAgIHJldHVybiAnMSc7XHJcbiAgICAgIGNhc2UgMjpcclxuICAgICAgICByZXR1cm4gJzInO1xyXG4gICAgICBjYXNlIDM6XHJcbiAgICAgICAgcmV0dXJuICczJztcclxuICAgICAgY2FzZSA0OlxyXG4gICAgICAgIHJldHVybiAnNCc7XHJcbiAgICAgIGNhc2UgNTpcclxuICAgICAgICByZXR1cm4gJzUnO1xyXG4gICAgICBjYXNlIDY6XHJcbiAgICAgICAgcmV0dXJuICc2JztcclxuICAgICAgY2FzZSA3OlxyXG4gICAgICAgIHJldHVybiAnNyc7XHJcbiAgICAgIGNhc2UgODpcclxuICAgICAgICByZXR1cm4gJzgnO1xyXG4gICAgICBjYXNlIDk6XHJcbiAgICAgICAgcmV0dXJuICc5JztcclxuICAgICAgY2FzZSAxMDpcclxuICAgICAgICByZXR1cm4gJ0EnO1xyXG4gICAgICBjYXNlIDExOlxyXG4gICAgICAgIHJldHVybiAnQic7XHJcbiAgICAgIGNhc2UgMTI6XHJcbiAgICAgICAgcmV0dXJuICdDJztcclxuICAgICAgY2FzZSAxMzpcclxuICAgICAgICByZXR1cm4gJ0QnO1xyXG4gICAgICBjYXNlIDE0OlxyXG4gICAgICAgIHJldHVybiAnRSc7XHJcbiAgICAgIGNhc2UgMTU6XHJcbiAgICAgICAgcmV0dXJuICdGJztcclxuICAgICAgZGVmYXVsdDpcclxuICAgICAgICByZXR1cm4gJyc7XHJcbiAgICB9XHJcbiAgfVxyXG4gIHN0YXRpYyBUb0hleFN0cmluZyhCeXRlVmFsKSB7XHJcbiAgICB2YXIgU3RyID0gJyc7XHJcbiAgICBTdHIgKz0gdGhpcy50b0hleCgoQnl0ZVZhbCA+PiA0KSAmIDB4MGYpO1xyXG4gICAgU3RyICs9IHRoaXMudG9IZXgoQnl0ZVZhbCAmIDB4MGYpO1xyXG4gICAgcmV0dXJuIFN0cjtcclxuICB9XHJcblxyXG4gIHN0YXRpYyB0ZXh0VG9UYWJsZXQoeCwgeSwgaGVpZ2h0LCBzdHIsIGZudCkge1xyXG4gICAgdmFyIGMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdjYW52YXMnKTtcclxuICAgIHZhciBjbnR4ID0gYy5nZXRDb250ZXh0KCcyZCcpO1xyXG4gICAgY250eC5mb250ID0gZm50O1xyXG4gICAgdmFyIHR4dCA9IHN0cjtcclxuICAgIHZhciB4cyA9IE1hdGgucm91bmQoY250eC5tZWFzdXJlVGV4dCh0eHQpLndpZHRoKTtcclxuICAgIHZhciB5cyA9IGhlaWdodDtcclxuICAgIGMud2lkdGggPSB4cztcclxuICAgIGMuaGVpZ2h0ID0geXM7XHJcblxyXG4gICAgY250eC5mb250ID0gZm50O1xyXG4gICAgY250eC5maWxsU3R5bGUgPSAnI0ZGRkZGRic7XHJcbiAgICBjbnR4LnJlY3QoMCwgMCwgeHMsIHlzKTtcclxuICAgIGNudHguZmlsbCgpO1xyXG5cclxuICAgIGNudHguZmlsbFN0eWxlID0gJyMwMDAwMDAnO1xyXG4gICAgY250eC50ZXh0QmFzZWxpbmUgPSAndG9wJztcclxuICAgIGNudHguZmlsbFRleHQodHh0LCAwLCAwKTtcclxuXHJcbiAgICBjbnR4LmRyYXdJbWFnZShjbnR4LmNhbnZhcywgMCwgMCwgeHMsIHlzKTtcclxuXHJcbiAgICB2YXIgR3N0ciA9IHRoaXMuY3JlYXRlTGNkQml0bWFwRnJvbUNhbnZhcyhjLCAwLCAwLCB4cywgeXMpO1xyXG5cclxuICAgIHRoaXMuTGNkV3JpdGVJbWFnZVN0cmVhbSgwLCAyLCB4LCB5LCB4cywgeXMsIEdzdHIpO1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIExjZFdyaXRlSW1hZ2UoRHN0LCBNb2RlLCBYcCwgWXAsIFVybCkge1xyXG4gICAgdmFyIFByb3AgPSAnTGNkV3JpdGVJbWFnZS8nO1xyXG4gICAgdmFyIE5ld1VybCA9IFVybC5yZXBsYWNlKC9cXC8vZywgJ18nKTtcclxuXHJcbiAgICBQcm9wID0gUHJvcCArIERzdCArICcsJyArIE1vZGUgKyAnLCcgKyBYcCArICcsJyArIFlwICsgJywnICsgTmV3VXJsO1xyXG4gICAgdGhpcy5TaWdXZWJTZXRQcm9wZXJ0eVN5bmMoUHJvcCk7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgTGNkV3JpdGVMb2NhbEltYWdlKERzdCwgTW9kZSwgWHAsIFlwLCBVcmwpIHtcclxuICAgIHZhciBQcm9wID0gJ0xjZFdyaXRlSW1hZ2UvJztcclxuXHJcbiAgICBQcm9wID0gUHJvcCArIERzdCArICcsJyArIE1vZGUgKyAnLCcgKyBYcCArICcsJyArIFlwICsgJywnICsgVXJsO1xyXG4gICAgdGhpcy5TaWdXZWJTZXRQcm9wZXJ0eShQcm9wKTtcclxuICB9XHJcblxyXG4gIHN0YXRpYyBMY2RXcml0ZUltYWdlU3RyZWFtKERzdCwgTW9kZSwgWHAsIFlwLCBYcywgWXMsIFVybCkge1xyXG4gICAgdmFyIFByb3AxID1cclxuICAgICAgJ0xjZFdyaXRlSW1hZ2VTdHJlYW1QYXJhbXMvJyArXHJcbiAgICAgIERzdCArXHJcbiAgICAgICcsJyArXHJcbiAgICAgIE1vZGUgK1xyXG4gICAgICAnLCcgK1xyXG4gICAgICBYcCArXHJcbiAgICAgICcsJyArXHJcbiAgICAgIFlwICtcclxuICAgICAgJywnICtcclxuICAgICAgWHMgK1xyXG4gICAgICAnLCcgK1xyXG4gICAgICBZcztcclxuICAgIHZhciBQcm9wMiA9ICdMY2RXcml0ZUltYWdlU3RyZWFtLyc7XHJcblxyXG4gICAgdGhpcy5TaWdXZWJTZXRQcm9wZXJ0eVN5bmMoUHJvcDEpO1xyXG4gICAgdGhpcy5TaWdXZWJTZXRJbWFnZVN0cmVhbVByb3BlcnR5KFByb3AyLCBVcmwpO1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIExjZFdyaXRlSW1hZ2VCbG9iKERzdCwgTW9kZSwgWHAsIFlwLCBYcywgWXMsIFVybCkge1xyXG4gICAgdmFyIFByb3AgPSAnTGNkV3JpdGVJbWFnZVN0cmVhbS8nO1xyXG5cclxuICAgIFByb3AgPSBQcm9wICsgRHN0ICsgJywnICsgTW9kZSArICcsJyArIFhwICsgJywnICsgWXAgKyAnLCcgKyBYcyArICcsJyArIFlzO1xyXG4gICAgdGhpcy5TaWdXZWJTZXRJbWFnZUJsb2JQcm9wZXJ0eShQcm9wLCBVcmwpO1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIG1lYXN1cmVUZXh0KHBUZXh0LCBwRm9udFNpemUsIHBTdHlsZSkge1xyXG4gICAgdmFyIGxEaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdsRGl2Jyk7XHJcblxyXG4gICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChsRGl2KTtcclxuXHJcbiAgICBpZiAocFN0eWxlICE9IG51bGwpIHtcclxuICAgICAgbERpdi5zZXRBdHRyaWJ1dGUoJ3N0eWxlJywgcFN0eWxlKTtcclxuICAgIH1cclxuICAgIGxEaXYuc3R5bGUuZm9udFNpemUgPSAnJyArIHBGb250U2l6ZSArICdweCc7XHJcbiAgICBsRGl2LnN0eWxlLnBvc2l0aW9uID0gJ2Fic29sdXRlJztcclxuICAgIGxEaXYuc3R5bGUubGVmdCA9ICctMTAwMCc7XHJcbiAgICBsRGl2LnN0eWxlLnRvcCA9ICctMTAwMCc7XHJcblxyXG4gICAgbERpdi5pbm5lckhUTUwgPSBwVGV4dDtcclxuXHJcbiAgICB2YXIgbFJlc3VsdCA9IHtcclxuICAgICAgd2lkdGg6IGxEaXYuY2xpZW50V2lkdGgsXHJcbiAgICAgIGhlaWdodDogbERpdi5jbGllbnRIZWlnaHQsXHJcbiAgICB9O1xyXG5cclxuICAgIGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQobERpdik7XHJcbiAgICBsRGl2ID0gbnVsbDtcclxuXHJcbiAgICByZXR1cm4gbFJlc3VsdDtcclxuICB9XHJcbiAgc3RhdGljIEdldFZlcnNpb25TdHJpbmcoKSB7XHJcbiAgICB2YXIgUHJvcCA9ICdWZXJzaW9uJztcclxuXHJcbiAgICBQcm9wID0gUHJvcDtcclxuICAgIHZhciBTdHIgPSB0aGlzLlNpZ1dlYkdldFByb3BlcnR5KFByb3ApO1xyXG4gICAgdmFyIHRyaW1TdHIgPSBTdHIuc2xpY2UoMSwgU3RyLmxlbmd0aCAtIDIpO1xyXG4gICAgcmV0dXJuIHRyaW1TdHI7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgSXNQZW5Eb3duKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuRXZTdGF0dXMgJiAweDAxO1xyXG4gIH1cclxuXHJcbiAgLy9cclxuICAvL1x0XHRcdFNpZ1BsdXNORVRTaWcuY3NcclxuICAvL1xyXG4gIHN0YXRpYyBDbGVhclRhYmxldCgpIHtcclxuICAgIHZhciBQcm9wID0gJ0NsZWFyU2lnbmF0dXJlJztcclxuXHJcbiAgICBQcm9wID0gUHJvcDtcclxuICAgIHJldHVybiB0aGlzLlNpZ1dlYkdldFByb3BlcnR5KFByb3ApO1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIE51bWJlck9mVGFibGV0UG9pbnRzKCkge1xyXG4gICAgdmFyIFByb3AgPSAnVG90YWxQb2ludHMnO1xyXG5cclxuICAgIFByb3AgPSBQcm9wO1xyXG4gICAgcmV0dXJuIHRoaXMuU2lnV2ViR2V0UHJvcGVydHkoUHJvcCk7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgU2V0U2lnU3RyaW5nKHNpZ1N0ciwgY3R4KSB7XHJcbiAgICB2YXIgUHJvcCA9ICdTaWdTdHJpbmcnO1xyXG5cclxuICAgIFByb3AgPSBQcm9wO1xyXG4gICAgdmFyIHhociA9IHRoaXMuU2lnV2ViY3JlYXRlWEhSKCk7XHJcblxyXG4gICAgaWYgKHhocikge1xyXG4gICAgICB4aHIub3BlbignUE9TVCcsIHRoaXMuYmFzZVVyaSArIFByb3ApO1xyXG4gICAgICB4aHIuc2V0UmVxdWVzdEhlYWRlcignQ29udGVudC1UeXBlJywgJ3RleHQvcGxhaW4nKTtcclxuICAgICAgeGhyLnNlbmQoc2lnU3RyKTtcclxuICAgICAgeGhyLm9ubG9hZCA9ICgpID0+IHtcclxuICAgICAgICBpZiAoY3R4KSB7XHJcbiAgICAgICAgICB2YXIgY2FuID0gY3R4LmNhbnZhcztcclxuICAgICAgICAgIHRoaXMuU2V0SW1hZ2VYU2l6ZShjYW4ud2lkdGgpO1xyXG4gICAgICAgICAgdGhpcy5TZXRJbWFnZVlTaXplKGNhbi5oZWlnaHQpO1xyXG4gICAgICAgICAgdGhpcy5HZXRTaWdJbWFnZShjdHgpO1xyXG4gICAgICAgIH1cclxuICAgICAgfTtcclxuICAgIH1cclxuICAgIHJldHVybiAnJztcclxuICB9XHJcblxyXG4gIHN0YXRpYyBHZXRTaWdTdHJpbmcoKSB7XHJcbiAgICB2YXIgUHJvcCA9ICdTaWdTdHJpbmcnO1xyXG5cclxuICAgIFByb3AgPSBQcm9wO1xyXG4gICAgdmFyIFN0ciA9IHRoaXMuU2lnV2ViR2V0UHJvcGVydHkoUHJvcCk7XHJcblxyXG4gICAgcmV0dXJuIFN0ci5zbGljZSgxLCBTdHIubGVuZ3RoIC0gMSk7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgU2V0U2lnQ29tcHJlc3Npb25Nb2RlKHYpIHtcclxuICAgIHZhciBQcm9wID0gJ0NvbXByZXNzaW9uTW9kZS8nO1xyXG5cclxuICAgIFByb3AgPSBQcm9wICsgdjtcclxuICAgIHRoaXMuU2lnV2ViU2V0UHJvcGVydHlTeW5jKFByb3ApO1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIEdldFNpZ0NvbXByZXNzaW9uTW9kZSgpIHtcclxuICAgIHZhciBQcm9wID0gJ0NvbXByZXNzaW9uTW9kZSc7XHJcblxyXG4gICAgUHJvcCA9IFByb3A7XHJcbiAgICByZXR1cm4gdGhpcy5TaWdXZWJHZXRQcm9wZXJ0eShQcm9wKTtcclxuICB9XHJcblxyXG4gIHN0YXRpYyBTZXRFbmNyeXB0aW9uTW9kZSh2KSB7XHJcbiAgICB2YXIgUHJvcCA9ICdFbmNyeXB0aW9uTW9kZS8nO1xyXG5cclxuICAgIFByb3AgPSBQcm9wICsgdjtcclxuICAgIHRoaXMuU2lnV2ViU2V0UHJvcGVydHlTeW5jKFByb3ApO1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIEdldEVuY3J5cHRpb25Nb2RlKCkge1xyXG4gICAgdmFyIFByb3AgPSAnRW5jcnlwdGlvbk1vZGUnO1xyXG5cclxuICAgIFByb3AgPSBQcm9wO1xyXG4gICAgcmV0dXJuIHRoaXMuU2lnV2ViR2V0UHJvcGVydHkoUHJvcCk7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgU2V0S2V5U3RyaW5nKGtleVN0cmluZykge1xyXG4gICAgdmFyIFByb3AgPSAnS2V5U3RyaW5nJztcclxuXHJcbiAgICBQcm9wID0gUHJvcDtcclxuICAgIHRoaXMuU2lnV2ViU2V0U3RyZWFtUHJvcGVydHkoUHJvcCwga2V5U3RyaW5nKTtcclxuICB9XHJcblxyXG4gIHN0YXRpYyBHZXRLZXlTdHJpbmcoKSB7XHJcbiAgICB2YXIgUHJvcCA9ICdLZXlTdHJpbmcnO1xyXG5cclxuICAgIFByb3AgPSBQcm9wO1xyXG4gICAgdmFyIFN0ciA9IHRoaXMuU2lnV2ViR2V0UHJvcGVydHkoUHJvcCk7XHJcblxyXG4gICAgcmV0dXJuIFN0ci5zbGljZSgxLCBTdHIubGVuZ3RoIC0gMSk7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgQXV0b0tleVN0YXJ0KCkge1xyXG4gICAgdmFyIFByb3AgPSAnQXV0b0tleVN0YXJ0JztcclxuXHJcbiAgICBQcm9wID0gUHJvcDtcclxuICAgIHRoaXMuU2lnV2ViU2V0UHJvcGVydHlTeW5jKFByb3ApO1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIEF1dG9LZXlGaW5pc2goKSB7XHJcbiAgICB2YXIgUHJvcCA9ICdBdXRvS2V5RmluaXNoJztcclxuXHJcbiAgICBQcm9wID0gUHJvcDtcclxuICAgIHRoaXMuU2lnV2ViU2V0UHJvcGVydHlTeW5jKFByb3ApO1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIFNldEF1dG9LZXlEYXRhKGtleURhdGEpIHtcclxuICAgIHZhciBQcm9wID0gJ1NldEF1dG9LZXlEYXRhJztcclxuXHJcbiAgICBQcm9wID0gUHJvcDtcclxuICAgIHRoaXMuU2lnV2ViU2V0U3RyZWFtUHJvcGVydHkoUHJvcCwga2V5RGF0YSk7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgQXV0b0tleUFkZERhdGEoa2V5RGF0YSkge1xyXG4gICAgdmFyIFByb3AgPSAnQXV0b0tleUFkZERhdGEnO1xyXG5cclxuICAgIFByb3AgPSBQcm9wO1xyXG4gICAgdGhpcy5TaWdXZWJTZXRTdHJlYW1Qcm9wZXJ0eShQcm9wLCBrZXlEYXRhKTtcclxuICAgIHJldHVybiB0aGlzLkdldEtleVN0cmluZygpO1xyXG4gIH1cclxuXHJcbiAgLy9cdFx0ZnVuY3Rpb24gIEdldEtleVJlY2VpcHQoICkge31cclxuXHJcbiAgc3RhdGljIEdldEtleVJlY2VpcHRBc2NpaSgpIHtcclxuICAgIHZhciBQcm9wID0gJ0tleVJlY2VpcHRBc2NpaSc7XHJcblxyXG4gICAgUHJvcCA9IFByb3A7XHJcbiAgICB2YXIgU3RyID0gdGhpcy5TaWdXZWJHZXRQcm9wZXJ0eShQcm9wKTtcclxuXHJcbiAgICByZXR1cm4gU3RyLnNsaWNlKDEsIFN0ci5sZW5ndGggLSAxKTtcclxuICB9XHJcblxyXG4gIC8vXHRcdGZ1bmN0aW9uICBHZXRTaWdSZWNlaXB0KCApIHt9XHJcblxyXG4gIHN0YXRpYyBHZXRTaWdSZWNlaXB0QXNjaWkoKSB7XHJcbiAgICB2YXIgUHJvcCA9ICdTaWdSZWNlaXB0QXNjaWknO1xyXG5cclxuICAgIFByb3AgPSBQcm9wO1xyXG4gICAgdmFyIFN0ciA9IHRoaXMuU2lnV2ViR2V0UHJvcGVydHkoUHJvcCk7XHJcblxyXG4gICAgcmV0dXJuIFN0ci5zbGljZSgxLCBTdHIubGVuZ3RoIC0gMSk7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgU2V0VGltZVN0YW1wKHRpbWVTdGFtcCkge1xyXG4gICAgdmFyIFByb3AgPSAnVGltZVN0YW1wJztcclxuXHJcbiAgICBQcm9wID0gUHJvcDtcclxuICAgIHRoaXMuU2lnV2ViU2V0U3RyZWFtUHJvcGVydHkoUHJvcCwgdGltZVN0YW1wKTtcclxuICB9XHJcblxyXG4gIHN0YXRpYyBHZXRUaW1lU3RhbXAoKSB7XHJcbiAgICB2YXIgUHJvcCA9ICdUaW1lU3RhbXAnO1xyXG5cclxuICAgIFByb3AgPSBQcm9wO1xyXG4gICAgdmFyIFN0ciA9IHRoaXMuU2lnV2ViR2V0UHJvcGVydHkoUHJvcCk7XHJcblxyXG4gICAgcmV0dXJuIFN0ci5zbGljZSgxLCBTdHIubGVuZ3RoIC0gMSk7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgU2V0QW5ub3RhdGUoYW5ub3RhdGUpIHtcclxuICAgIHZhciBQcm9wID0gJ0Fubm90YXRlJztcclxuXHJcbiAgICBQcm9wID0gUHJvcDtcclxuICAgIHRoaXMuU2lnV2ViU2V0U3RyZWFtUHJvcGVydHkoUHJvcCwgYW5ub3RhdGUpO1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIEdldEFubm90YXRlKCkge1xyXG4gICAgdmFyIFByb3AgPSAnQW5ub3RhdGUnO1xyXG5cclxuICAgIFByb3AgPSBQcm9wO1xyXG4gICAgdmFyIFN0ciA9IHRoaXMuU2lnV2ViR2V0UHJvcGVydHkoUHJvcCk7XHJcblxyXG4gICAgcmV0dXJuIFN0ci5zbGljZSgxLCBTdHIubGVuZ3RoIC0gMSk7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgU2V0U2F2ZVNpZ0luZm8odikge1xyXG4gICAgdmFyIFByb3AgPSAnU2F2ZVNpZ0luZm8vJztcclxuXHJcbiAgICBQcm9wID0gUHJvcCArIHY7XHJcbiAgICB0aGlzLlNpZ1dlYlNldFByb3BlcnR5U3luYyhQcm9wKTtcclxuICB9XHJcblxyXG4gIHN0YXRpYyBHZXRTYXZlU2lnSW5mbygpIHtcclxuICAgIHZhciBQcm9wID0gJ1NhdmVTaWdJbmZvJztcclxuXHJcbiAgICBQcm9wID0gUHJvcDtcclxuICAgIHJldHVybiB0aGlzLlNpZ1dlYkdldFByb3BlcnR5KFByb3ApO1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIFNldFNhdmVQcmVzc3VyZURhdGEodikge1xyXG4gICAgdmFyIFByb3AgPSAnU2F2ZVByZXNzdXJlRGF0YS8nO1xyXG5cclxuICAgIFByb3AgPSBQcm9wICsgdjtcclxuICAgIHRoaXMuU2lnV2ViU2V0UHJvcGVydHlTeW5jKFByb3ApO1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIEdldFNhdmVQcmVzc3VyZURhdGEoKSB7XHJcbiAgICB2YXIgUHJvcCA9ICdTYXZlUHJlc3N1cmVEYXRhJztcclxuXHJcbiAgICBQcm9wID0gUHJvcDtcclxuICAgIHJldHVybiB0aGlzLlNpZ1dlYkdldFByb3BlcnR5KFByb3ApO1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIFNldFNhdmVUaW1lRGF0YSh2KSB7XHJcbiAgICB2YXIgUHJvcCA9ICdTYXZlVGltZURhdGEvJztcclxuXHJcbiAgICBQcm9wID0gUHJvcCArIHY7XHJcbiAgICB0aGlzLlNpZ1dlYlNldFByb3BlcnR5U3luYyhQcm9wKTtcclxuICB9XHJcblxyXG4gIHN0YXRpYyBHZXRTYXZlVGltZURhdGEoKSB7XHJcbiAgICB2YXIgUHJvcCA9ICdTYXZlVGltZURhdGEnO1xyXG5cclxuICAgIFByb3AgPSBQcm9wO1xyXG4gICAgcmV0dXJuIHRoaXMuU2lnV2ViR2V0UHJvcGVydHkoUHJvcCk7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgU2V0QW50aUFsaWFzU3BvdFNpemUodikge1xyXG4gICAgdmFyIFByb3AgPSAnQW50aUFsaWFzU3BvdFNpemUvJztcclxuXHJcbiAgICBQcm9wID0gUHJvcCArIHY7XHJcbiAgICB0aGlzLlNpZ1dlYlNldFByb3BlcnR5U3luYyhQcm9wKTtcclxuICB9XHJcblxyXG4gIHN0YXRpYyBHZXRBbnRpQWxpYXNTcG90U2l6ZSgpIHtcclxuICAgIHZhciBQcm9wID0gJ0FudGlBbGlhc1Nwb3RTaXplJztcclxuXHJcbiAgICBQcm9wID0gUHJvcDtcclxuICAgIHJldHVybiB0aGlzLlNpZ1dlYkdldFByb3BlcnR5KFByb3ApO1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIFNldEFudGlBbGlhc0xpbmVTY2FsZSh2KSB7XHJcbiAgICB2YXIgUHJvcCA9ICdBbnRpQWxpYXNMaW5lU2NhbGUvJztcclxuXHJcbiAgICBQcm9wID0gUHJvcCArIHY7XHJcbiAgICB0aGlzLlNpZ1dlYlNldFByb3BlcnR5U3luYyhQcm9wKTtcclxuICB9XHJcblxyXG4gIHN0YXRpYyBHZXRBbnRpQWxpYXNMaW5lU2NhbGUoKSB7XHJcbiAgICB2YXIgUHJvcCA9ICdBbnRpQWxpYXNMaW5lU2NhbGUnO1xyXG5cclxuICAgIFByb3AgPSBQcm9wO1xyXG4gICAgcmV0dXJuIHRoaXMuU2lnV2ViR2V0UHJvcGVydHkoUHJvcCk7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgR2V0TnVtYmVyT2ZTdHJva2VzKCkge1xyXG4gICAgdmFyIFByb3AgPSAnTnVtYmVyT2ZTdHJva2VzJztcclxuXHJcbiAgICBQcm9wID0gUHJvcDtcclxuICAgIHJldHVybiB0aGlzLlNpZ1dlYkdldFByb3BlcnR5KFByb3ApO1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIEdldE51bVBvaW50c0ZvclN0cm9rZSh2KSB7XHJcbiAgICB2YXIgUHJvcCA9ICdOdW1iZXJPZlBvaW50c0luU3Ryb2tlLyc7XHJcblxyXG4gICAgUHJvcCA9IFByb3AgKyB2O1xyXG4gICAgcmV0dXJuIHRoaXMuU2lnV2ViR2V0UHJvcGVydHkoUHJvcCk7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgR2V0UG9pbnRYVmFsdWUodjEsIHYyKSB7XHJcbiAgICB2YXIgUHJvcCA9ICdQb2ludFhWYWx1ZS8nO1xyXG5cclxuICAgIFByb3AgPSBQcm9wICsgdjEgKyAnLycgKyB2MjtcclxuICAgIHJldHVybiB0aGlzLlNpZ1dlYkdldFByb3BlcnR5KFByb3ApO1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIEdldFBvaW50WVZhbHVlKHYxLCB2Mikge1xyXG4gICAgdmFyIFByb3AgPSAnUG9pbnRZVmFsdWUvJztcclxuXHJcbiAgICBQcm9wID0gUHJvcCArIHYxICsgJy8nICsgdjI7XHJcbiAgICByZXR1cm4gdGhpcy5TaWdXZWJHZXRQcm9wZXJ0eShQcm9wKTtcclxuICB9XHJcblxyXG4gIHN0YXRpYyBTZXRBbnRpQWxpYXNFbmFibGUodikge1xyXG4gICAgdmFyIFByb3AgPSAnQW50aUFsaWFzRW5hYmxlLyc7XHJcblxyXG4gICAgUHJvcCA9IFByb3AgKyB2O1xyXG4gICAgdGhpcy5TaWdXZWJTZXRQcm9wZXJ0eVN5bmMoUHJvcCk7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgR2V0QW50aUFsaWFzRW5hYmxlKCkge1xyXG4gICAgdmFyIFByb3AgPSAnQW50aUFsaWFzRW5hYmxlJztcclxuXHJcbiAgICBQcm9wID0gUHJvcDtcclxuICAgIHJldHVybiB0aGlzLlNpZ1dlYkdldFByb3BlcnR5KFByb3ApO1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIFNldFVzZUFtYmllbnRDb2xvcnModikge1xyXG4gICAgdmFyIFByb3AgPSAnVXNlQW1iaWVudENvbG9ycy8nO1xyXG5cclxuICAgIFByb3AgPSBQcm9wICsgdjtcclxuICAgIHRoaXMuU2lnV2ViU2V0UHJvcGVydHlTeW5jKFByb3ApO1xyXG4gIH1cclxuXHJcbiAgLy9cclxuICAvL1x0XHRTaWdQbHVzTkVURGlzcGxheS5jc1xyXG4gIC8vXHJcbiAgc3RhdGljIFNldERpc3BsYXlYU2l6ZSh2KSB7XHJcbiAgICB2YXIgUHJvcCA9ICdEaXNwbGF5WFNpemUvJztcclxuXHJcbiAgICBQcm9wID0gUHJvcCArIHY7XHJcbiAgICB0aGlzLlNpZ1dlYlNldFByb3BlcnR5U3luYyhQcm9wKTtcclxuICB9XHJcblxyXG4gIHN0YXRpYyBHZXREaXNwbGF5WFNpemUoKSB7XHJcbiAgICB2YXIgUHJvcCA9ICdEaXNwbGF5WFNpemUnO1xyXG5cclxuICAgIFByb3AgPSBQcm9wO1xyXG4gICAgcmV0dXJuIHRoaXMuU2lnV2ViR2V0UHJvcGVydHkoUHJvcCk7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgU2V0RGlzcGxheVlTaXplKHYpIHtcclxuICAgIHZhciBQcm9wID0gJ0Rpc3BsYXlZU2l6ZS8nO1xyXG5cclxuICAgIFByb3AgPSBQcm9wICsgdjtcclxuICAgIHRoaXMuU2lnV2ViU2V0UHJvcGVydHlTeW5jKFByb3ApO1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIEdldERpc3BsYXlZU2l6ZSgpIHtcclxuICAgIHZhciBQcm9wID0gJ0Rpc3BsYXlZU2l6ZSc7XHJcblxyXG4gICAgUHJvcCA9IFByb3A7XHJcbiAgICByZXR1cm4gdGhpcy5TaWdXZWJHZXRQcm9wZXJ0eShQcm9wKTtcclxuICB9XHJcblxyXG4gIHN0YXRpYyBTZXREaXNwbGF5UGVuV2lkdGgodikge1xyXG4gICAgdmFyIFByb3AgPSAnRGlzcGxheVBlbldpZHRoLyc7XHJcblxyXG4gICAgUHJvcCA9IFByb3AgKyB2O1xyXG4gICAgdGhpcy5TaWdXZWJTZXRQcm9wZXJ0eVN5bmMoUHJvcCk7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgR2V0RGlzcGxheVBlbldpZHRoKCkge1xyXG4gICAgdmFyIFByb3AgPSAnRGlzcGxheVBlbldpZHRoJztcclxuXHJcbiAgICBQcm9wID0gUHJvcDtcclxuICAgIHJldHVybiB0aGlzLlNpZ1dlYkdldFByb3BlcnR5KFByb3ApO1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIFNldERpc3BsYXlUaW1lU3RhbXAodikge1xyXG4gICAgdmFyIFByb3AgPSAnRGlzcGxheVRpbWVTdGFtcC8nO1xyXG5cclxuICAgIFByb3AgPSBQcm9wICsgdjtcclxuICAgIHRoaXMuU2lnV2ViU2V0UHJvcGVydHlTeW5jKFByb3ApO1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIEdldERpc3BsYXlUaW1lU3RhbXAoKSB7XHJcbiAgICB2YXIgUHJvcCA9ICdEaXNwbGF5VGltZVN0YW1wJztcclxuXHJcbiAgICBQcm9wID0gUHJvcDtcclxuICAgIHJldHVybiB0aGlzLlNpZ1dlYkdldFByb3BlcnR5KFByb3ApO1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIFNldERpc3BsYXlUaW1lU3RhbXBQb3NYKHYpIHtcclxuICAgIHZhciBQcm9wID0gJ0Rpc3BsYXlUaW1lU3RhbXBQb3NYLyc7XHJcblxyXG4gICAgUHJvcCA9IFByb3AgKyB2O1xyXG4gICAgdGhpcy5TaWdXZWJTZXRQcm9wZXJ0eVN5bmMoUHJvcCk7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgR2V0RGlzcGxheVRpbWVTdGFtcFBvc1goKSB7XHJcbiAgICB2YXIgUHJvcCA9ICdEaXNwbGF5VGltZVN0YW1wUG9zWCc7XHJcblxyXG4gICAgUHJvcCA9IFByb3A7XHJcbiAgICByZXR1cm4gdGhpcy5TaWdXZWJHZXRQcm9wZXJ0eShQcm9wKTtcclxuICB9XHJcblxyXG4gIHN0YXRpYyBTZXREaXNwbGF5VGltZVN0YW1wUG9zWSh2KSB7XHJcbiAgICB2YXIgUHJvcCA9ICdEaXNwbGF5VGltZVN0YW1wUG9zWS8nO1xyXG5cclxuICAgIFByb3AgPSBQcm9wICsgdjtcclxuICAgIHRoaXMuU2lnV2ViU2V0UHJvcGVydHlTeW5jKFByb3ApO1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIEdldERpc3BsYXlUaW1lU3RhbXBQb3NZKCkge1xyXG4gICAgdmFyIFByb3AgPSAnRGlzcGxheVRpbWVTdGFtcFBvc1knO1xyXG5cclxuICAgIFByb3AgPSBQcm9wO1xyXG4gICAgcmV0dXJuIHRoaXMuU2lnV2ViR2V0UHJvcGVydHkoUHJvcCk7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgU2V0RGlzcGxheVRpbWVTdGFtcFNpemUodikge1xyXG4gICAgdmFyIFByb3AgPSAnRGlzcGxheVRpbWVTdGFtcFNpemUvJztcclxuXHJcbiAgICBQcm9wID0gUHJvcCArIHY7XHJcbiAgICB0aGlzLlNpZ1dlYlNldFByb3BlcnR5U3luYyhQcm9wKTtcclxuICB9XHJcblxyXG4gIHN0YXRpYyBHZXREaXNwbGF5VGltZVN0YW1wU2l6ZSgpIHtcclxuICAgIHZhciBQcm9wID0gJ0Rpc3BsYXlUaW1lU3RhbXBTaXplJztcclxuXHJcbiAgICBQcm9wID0gUHJvcDtcclxuICAgIHJldHVybiB0aGlzLlNpZ1dlYkdldFByb3BlcnR5KFByb3ApO1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIFNldERpc3BsYXlBbm5vdGF0ZSh2KSB7XHJcbiAgICB2YXIgUHJvcCA9ICdEaXNwbGF5QW5ub3RhdGUvJztcclxuXHJcbiAgICBQcm9wID0gUHJvcCArIHY7XHJcbiAgICB0aGlzLlNpZ1dlYlNldFByb3BlcnR5U3luYyhQcm9wKTtcclxuICB9XHJcblxyXG4gIHN0YXRpYyBHZXREaXNwbGF5QW5ub3RhdGUoKSB7XHJcbiAgICB2YXIgUHJvcCA9ICdEaXNwbGF5QW5ub3RhdGUnO1xyXG5cclxuICAgIFByb3AgPSBQcm9wO1xyXG4gICAgcmV0dXJuIHRoaXMuU2lnV2ViR2V0UHJvcGVydHkoUHJvcCk7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgU2V0RGlzcGxheUFubm90YXRlUG9zWCh2KSB7XHJcbiAgICB2YXIgUHJvcCA9ICdEaXNwbGF5QW5ub3RhdGVQb3NYLyc7XHJcblxyXG4gICAgUHJvcCA9IFByb3AgKyB2O1xyXG4gICAgdGhpcy5TaWdXZWJTZXRQcm9wZXJ0eVN5bmMoUHJvcCk7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgR2V0RGlzcGxheUFubm90YXRlUG9zWCgpIHtcclxuICAgIHZhciBQcm9wID0gJ0Rpc3BsYXlBbm5vdGF0ZVBvc1gnO1xyXG5cclxuICAgIFByb3AgPSBQcm9wO1xyXG4gICAgcmV0dXJuIHRoaXMuU2lnV2ViR2V0UHJvcGVydHkoUHJvcCk7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgU2V0RGlzcGxheUFubm90YXRlUG9zWSh2KSB7XHJcbiAgICB2YXIgUHJvcCA9ICdEaXNwbGF5QW5ub3RhdGVQb3NZLyc7XHJcblxyXG4gICAgUHJvcCA9IFByb3AgKyB2O1xyXG4gICAgdGhpcy5TaWdXZWJTZXRQcm9wZXJ0eVN5bmMoUHJvcCk7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgR2V0RGlzcGxheUFubm90YXRlUG9zWSgpIHtcclxuICAgIHZhciBQcm9wID0gJ0Rpc3BsYXlBbm5vdGF0ZVBvc1knO1xyXG5cclxuICAgIFByb3AgPSBQcm9wO1xyXG4gICAgcmV0dXJuIHRoaXMuU2lnV2ViR2V0UHJvcGVydHkoUHJvcCk7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgU2V0RGlzcGxheUFubm90YXRlU2l6ZSh2KSB7XHJcbiAgICB2YXIgUHJvcCA9ICdEaXNwbGF5QW5ub3RhdGVTaXplLyc7XHJcblxyXG4gICAgUHJvcCA9IFByb3AgKyB2O1xyXG4gICAgdGhpcy5TaWdXZWJTZXRQcm9wZXJ0eVN5bmMoUHJvcCk7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgR2V0RGlzcGxheUFubm90YXRlU2l6ZSgpIHtcclxuICAgIHZhciBQcm9wID0gJ0Rpc3BsYXlBbm5vdGF0ZVNpemUnO1xyXG5cclxuICAgIFByb3AgPSBQcm9wO1xyXG4gICAgcmV0dXJuIHRoaXMuU2lnV2ViR2V0UHJvcGVydHkoUHJvcCk7XHJcbiAgfVxyXG5cclxuICAvL1xyXG4gIC8vXHRcdFNpZ1BsdXNORVRJbWFnZS5jc1xyXG4gIC8vXHJcbiAgLy9cdFx0ZnVuY3Rpb24gIEdldFNpZ0ltYWdlQjY0KCApXHJcbiAgLy9cdFx0XHR7XHJcbiAgLy9cdFx0XHR2YXIgeGhyMiA9IG5ldyBYTUxIdHRwUmVxdWVzdCgpO1xyXG4gIC8vXHRcdFx0eGhyMi5vcGVuKFwiR0VUXCIsIGJhc2VVcmkgKyBcIlNpZ0ltYWdlLzFcIiwgZmFsc2UgKTtcclxuICAvL1x0XHRcdHhocjIucmVzcG9uc2VUeXBlID0gXCJibG9iXCJcclxuICAvL1x0XHRcdHhocjIuc2VuZChudWxsKTtcclxuICAvL1x0XHRcdGlmICh4aHIyLnJlYWR5U3RhdGUgPT0gNCAmJiB4aHIuc3RhdHVzID09IDIwMClcclxuICAvL1x0XHRcdFx0e1xyXG4gIC8vXHRcdFx0XHRyZXR1cm4gd2luZG93LlVSTC5jcmVhdGVPYmplY3RVUkwoeGhyMi5yZXNwb25zZSk7XHJcbiAgLy9cdFx0XHRcdH1cclxuICAvL1x0XHRcdHJldHVybiBudWxsO1xyXG4gIC8vXHRcdFx0fVxyXG5cclxuICBzdGF0aWMgU2V0SW1hZ2VYU2l6ZSh2KSB7XHJcbiAgICB2YXIgUHJvcCA9ICdJbWFnZVhTaXplLyc7XHJcblxyXG4gICAgUHJvcCA9IFByb3AgKyB2O1xyXG4gICAgdGhpcy5TaWdXZWJTZXRQcm9wZXJ0eVN5bmMoUHJvcCk7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgR2V0SW1hZ2VYU2l6ZSgpIHtcclxuICAgIHZhciBQcm9wID0gJ0ltYWdlWFNpemUnO1xyXG5cclxuICAgIFByb3AgPSBQcm9wO1xyXG4gICAgcmV0dXJuIHRoaXMuU2lnV2ViR2V0UHJvcGVydHkoUHJvcCk7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgU2V0SW1hZ2VZU2l6ZSh2KSB7XHJcbiAgICB2YXIgUHJvcCA9ICdJbWFnZVlTaXplLyc7XHJcblxyXG4gICAgUHJvcCA9IFByb3AgKyB2O1xyXG4gICAgdGhpcy5TaWdXZWJTZXRQcm9wZXJ0eVN5bmMoUHJvcCk7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgR2V0SW1hZ2VZU2l6ZSgpIHtcclxuICAgIHZhciBQcm9wID0gJ0ltYWdlWVNpemUnO1xyXG5cclxuICAgIFByb3AgPSBQcm9wO1xyXG4gICAgcmV0dXJuIHRoaXMuU2lnV2ViR2V0UHJvcGVydHkoUHJvcCk7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgU2V0SW1hZ2VQZW5XaWR0aCh2KSB7XHJcbiAgICB2YXIgUHJvcCA9ICdJbWFnZVBlbldpZHRoLyc7XHJcblxyXG4gICAgUHJvcCA9IFByb3AgKyB2O1xyXG4gICAgdGhpcy5TaWdXZWJTZXRQcm9wZXJ0eVN5bmMoUHJvcCk7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgR2V0SW1hZ2VQZW5XaWR0aCgpIHtcclxuICAgIHZhciBQcm9wID0gJ0ltYWdlUGVuV2lkdGgnO1xyXG5cclxuICAgIFByb3AgPSBQcm9wO1xyXG4gICAgcmV0dXJuIHRoaXMuU2lnV2ViR2V0UHJvcGVydHkoUHJvcCk7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgU2V0SW1hZ2VUaW1lU3RhbXAodikge1xyXG4gICAgdmFyIFByb3AgPSAnSW1hZ2VUaW1lU3RhbXAvJztcclxuXHJcbiAgICBQcm9wID0gUHJvcCArIHY7XHJcbiAgICB0aGlzLlNpZ1dlYlNldFByb3BlcnR5U3luYyhQcm9wKTtcclxuICB9XHJcblxyXG4gIHN0YXRpYyBHZXRJbWFnZVRpbWVTdGFtcCgpIHtcclxuICAgIHZhciBQcm9wID0gJ0ltYWdlVGltZVN0YW1wJztcclxuXHJcbiAgICBQcm9wID0gUHJvcDtcclxuICAgIHJldHVybiB0aGlzLlNpZ1dlYkdldFByb3BlcnR5KFByb3ApO1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIFNldEltYWdlVGltZVN0YW1wUG9zWCh2KSB7XHJcbiAgICB2YXIgUHJvcCA9ICdJbWFnZVRpbWVTdGFtcFBvc1gvJztcclxuXHJcbiAgICBQcm9wID0gUHJvcCArIHY7XHJcbiAgICB0aGlzLlNpZ1dlYlNldFByb3BlcnR5U3luYyhQcm9wKTtcclxuICB9XHJcblxyXG4gIHN0YXRpYyBHZXRJbWFnZVRpbWVTdGFtcFBvc1goKSB7XHJcbiAgICB2YXIgUHJvcCA9ICdJbWFnZVRpbWVTdGFtcFBvc1gnO1xyXG5cclxuICAgIFByb3AgPSBQcm9wO1xyXG4gICAgcmV0dXJuIHRoaXMuU2lnV2ViR2V0UHJvcGVydHkoUHJvcCk7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgU2V0SW1hZ2VUaW1lU3RhbXBQb3NZKHYpIHtcclxuICAgIHZhciBQcm9wID0gJ0ltYWdlVGltZVN0YW1wUG9zWS8nO1xyXG5cclxuICAgIFByb3AgPSBQcm9wICsgdjtcclxuICAgIHRoaXMuU2lnV2ViU2V0UHJvcGVydHlTeW5jKFByb3ApO1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIEdldEltYWdlVGltZVN0YW1wUG9zWSgpIHtcclxuICAgIHZhciBQcm9wID0gJ0ltYWdlVGltZVN0YW1wUG9zWSc7XHJcblxyXG4gICAgUHJvcCA9IFByb3A7XHJcbiAgICByZXR1cm4gdGhpcy5TaWdXZWJHZXRQcm9wZXJ0eShQcm9wKTtcclxuICB9XHJcblxyXG4gIHN0YXRpYyBTZXRJbWFnZVRpbWVTdGFtcFNpemUodikge1xyXG4gICAgdmFyIFByb3AgPSAnSW1hZ2VUaW1lU3RhbXBTaXplLyc7XHJcblxyXG4gICAgUHJvcCA9IFByb3AgKyB2O1xyXG4gICAgdGhpcy5TaWdXZWJTZXRQcm9wZXJ0eVN5bmMoUHJvcCk7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgR2V0SW1hZ2VUaW1lU3RhbXBTaXplKCkge1xyXG4gICAgdmFyIFByb3AgPSAnSW1hZ2VUaW1lU3RhbXBTaXplJztcclxuXHJcbiAgICBQcm9wID0gUHJvcDtcclxuICAgIHJldHVybiB0aGlzLlNpZ1dlYkdldFByb3BlcnR5KFByb3ApO1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIFNldEltYWdlQW5ub3RhdGUodikge1xyXG4gICAgdmFyIFByb3AgPSAnSW1hZ2VBbm5vdGF0ZS8nO1xyXG5cclxuICAgIFByb3AgPSBQcm9wICsgdjtcclxuICAgIHRoaXMuU2lnV2ViU2V0UHJvcGVydHlTeW5jKFByb3ApO1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIEdldEltYWdlQW5ub3RhdGUoKSB7XHJcbiAgICB2YXIgUHJvcCA9ICdJbWFnZUFubm90YXRlJztcclxuXHJcbiAgICBQcm9wID0gUHJvcDtcclxuICAgIHJldHVybiB0aGlzLlNpZ1dlYkdldFByb3BlcnR5KFByb3ApO1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIFNldEltYWdlQW5ub3RhdGVQb3NYKHYpIHtcclxuICAgIHZhciBQcm9wID0gJ0ltYWdlQW5ub3RhdGVQb3NYLyc7XHJcblxyXG4gICAgUHJvcCA9IFByb3AgKyB2O1xyXG4gICAgdGhpcy5TaWdXZWJTZXRQcm9wZXJ0eVN5bmMoUHJvcCk7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgR2V0SW1hZ2VBbm5vdGF0ZVBvc1goKSB7XHJcbiAgICB2YXIgUHJvcCA9ICdJbWFnZUFubm90YXRlUG9zWCc7XHJcblxyXG4gICAgUHJvcCA9IFByb3A7XHJcbiAgICByZXR1cm4gdGhpcy5TaWdXZWJHZXRQcm9wZXJ0eShQcm9wKTtcclxuICB9XHJcblxyXG4gIHN0YXRpYyBTZXRJbWFnZUFubm90YXRlUG9zWSh2KSB7XHJcbiAgICB2YXIgUHJvcCA9ICdJbWFnZUFubm90YXRlUG9zWS8nO1xyXG5cclxuICAgIFByb3AgPSBQcm9wICsgdjtcclxuICAgIHRoaXMuU2lnV2ViU2V0UHJvcGVydHlTeW5jKFByb3ApO1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIEdldEltYWdlQW5ub3RhdGVQb3NZKCkge1xyXG4gICAgdmFyIFByb3AgPSAnSW1hZ2VBbm5vdGF0ZVBvc1knO1xyXG5cclxuICAgIFByb3AgPSBQcm9wO1xyXG4gICAgcmV0dXJuIHRoaXMuU2lnV2ViR2V0UHJvcGVydHkoUHJvcCk7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgU2V0SW1hZ2VBbm5vdGF0ZVNpemUodikge1xyXG4gICAgdmFyIFByb3AgPSAnSW1hZ2VBbm5vdGF0ZVNpemUvJztcclxuXHJcbiAgICBQcm9wID0gUHJvcCArIHY7XHJcbiAgICB0aGlzLlNpZ1dlYlNldFByb3BlcnR5U3luYyhQcm9wKTtcclxuICB9XHJcblxyXG4gIHN0YXRpYyBHZXRJbWFnZUFubm90YXRlU2l6ZSgpIHtcclxuICAgIHZhciBQcm9wID0gJ0ltYWdlQW5ub3RhdGVTaXplJztcclxuXHJcbiAgICBQcm9wID0gUHJvcDtcclxuICAgIHJldHVybiB0aGlzLlNpZ1dlYkdldFByb3BlcnR5KFByb3ApO1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIFNldEp1c3RpZnlYKHYpIHtcclxuICAgIHZhciBQcm9wID0gJ0p1c3RpZnlYLyc7XHJcblxyXG4gICAgUHJvcCA9IFByb3AgKyB2O1xyXG4gICAgdGhpcy5TaWdXZWJTZXRQcm9wZXJ0eVN5bmMoUHJvcCk7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgR2V0SnVzdGlmeVgoKSB7XHJcbiAgICB2YXIgUHJvcCA9ICdKdXN0aWZ5WCc7XHJcblxyXG4gICAgUHJvcCA9IFByb3A7XHJcbiAgICByZXR1cm4gdGhpcy5TaWdXZWJHZXRQcm9wZXJ0eShQcm9wKTtcclxuICB9XHJcblxyXG4gIHN0YXRpYyBTZXRKdXN0aWZ5WSh2KSB7XHJcbiAgICB2YXIgUHJvcCA9ICdKdXN0aWZ5WS8nO1xyXG5cclxuICAgIFByb3AgPSBQcm9wICsgdjtcclxuICAgIHRoaXMuU2lnV2ViU2V0UHJvcGVydHlTeW5jKFByb3ApO1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIEdldEp1c3RpZnlZKCkge1xyXG4gICAgdmFyIFByb3AgPSAnSnVzdGlmeVknO1xyXG5cclxuICAgIFByb3AgPSBQcm9wO1xyXG4gICAgcmV0dXJuIHRoaXMuU2lnV2ViR2V0UHJvcGVydHkoUHJvcCk7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgU2V0SnVzdGlmeU1vZGUodikge1xyXG4gICAgdmFyIFByb3AgPSAnSnVzdGlmeU1vZGUvJztcclxuXHJcbiAgICBQcm9wID0gUHJvcCArIHY7XHJcbiAgICB0aGlzLlNpZ1dlYlNldFByb3BlcnR5U3luYyhQcm9wKTtcclxuICB9XHJcblxyXG4gIHN0YXRpYyBHZXRKdXN0aWZ5TW9kZSgpIHtcclxuICAgIHZhciBQcm9wID0gJ0p1c3RpZnlNb2RlJztcclxuXHJcbiAgICBQcm9wID0gUHJvcDtcclxuICAgIHJldHVybiB0aGlzLlNpZ1dlYkdldFByb3BlcnR5KFByb3ApO1xyXG4gIH1cclxuXHJcbiAgLy9cclxuICAvL1x0XHRTaWdQbHVzTkVUS2V5UGFkLmNzXHJcbiAgLy9cclxuICBzdGF0aWMgS2V5UGFkQWRkSG90U3BvdChrZXksIGNvb3JkLCB4cCwgeXAsIHhzLCB5cykge1xyXG4gICAgdmFyIFByb3AgPSAnS2V5UGFkQWRkSG90U3BvdC8nO1xyXG4gICAgUHJvcCA9IFByb3AgKyBrZXkgKyAnLCcgKyBjb29yZCArICcsJyArIHhwICsgJywnICsgeXAgKyAnLCcgKyB4cyArICcsJyArIHlzO1xyXG4gICAgdGhpcy5TaWdXZWJTZXRQcm9wZXJ0eVN5bmMoUHJvcCk7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgS2V5UGFkTWFya0hvdFNwb3Qoa2V5LCBjb29yZCwgeHAsIHlwLCB4cywgeXMpIHtcclxuICAgIHRoaXMuTENEV3JpdGVTdHJpbmcoMCwgMiwgeHAsIHlwLCAnMTZwdCBzYW5zLXNlcmlmJywgMzIsICcrJyk7XHJcbiAgICB0aGlzLkxDRFdyaXRlU3RyaW5nKDAsIDIsIHhwICsgeHMsIHlwLCAnMTZwdCBzYW5zLXNlcmlmJywgMzIsICcrJyk7XHJcbiAgICB0aGlzLkxDRFdyaXRlU3RyaW5nKDAsIDIsIHhwLCB5cCArIHlzLCAnMTZwdCBzYW5zLXNlcmlmJywgMzIsICcrJyk7XHJcbiAgICB0aGlzLkxDRFdyaXRlU3RyaW5nKDAsIDIsIHhwICsgeHMsIHlwICsgeXMsICcxNnB0IHNhbnMtc2VyaWYnLCAzMiwgJysnKTtcclxuICB9XHJcblxyXG4gIHN0YXRpYyBLZXlQYWRRdWVyeUhvdFNwb3Qoa2V5KSB7XHJcbiAgICB2YXIgUHJvcCA9ICdLZXlQYWRRdWVyeUhvdFNwb3QvJztcclxuICAgIFByb3AgPSBQcm9wICsga2V5O1xyXG4gICAgcmV0dXJuIHRoaXMuU2lnV2ViR2V0UHJvcGVydHkoUHJvcCk7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgS2V5UGFkQ2xlYXJIb3RTcG90TGlzdCgpIHtcclxuICAgIHZhciBQcm9wID0gJ0tleVBhZENsZWFySG90U3BvdExpc3QnO1xyXG4gICAgdGhpcy5TaWdXZWJTZXRQcm9wZXJ0eVN5bmMoUHJvcCk7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgU2V0U2lnV2luZG93KGNvb3JkcywgeHAsIHlwLCB4cywgeXMpIHtcclxuICAgIHZhciBQcm9wID0gJ1NpZ1dpbmRvdy8nO1xyXG4gICAgUHJvcCA9IFByb3AgKyBjb29yZHMgKyAnLCcgKyB4cCArICcsJyArIHlwICsgJywnICsgeHMgKyAnLCcgKyB5cztcclxuICAgIHRoaXMuU2lnV2ViU2V0UHJvcGVydHlTeW5jKFByb3ApO1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIENsZWFyU2lnV2luZG93KGluc2lkZSkge1xyXG4gICAgdmFyIFByb3AgPSAnQ2xlYXJTaWdXaW5kb3cvJztcclxuICAgIFByb3AgPSBQcm9wICsgaW5zaWRlO1xyXG4gICAgdGhpcy5TaWdXZWJTZXRQcm9wZXJ0eVN5bmMoUHJvcCk7XHJcbiAgfVxyXG5cclxuICAvL1xyXG4gIC8vXHRcdFNpZ1BsdXNORVRMQ0QuY3NcclxuICAvL1xyXG4gIHN0YXRpYyBTZXRMQ0RDYXB0dXJlTW9kZSh2KSB7XHJcbiAgICB2YXIgUHJvcCA9ICdDYXB0dXJlTW9kZS8nO1xyXG5cclxuICAgIFByb3AgPSBQcm9wICsgdjtcclxuICAgIHRoaXMuU2lnV2ViU2V0UHJvcGVydHlTeW5jKFByb3ApO1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIEdldExDRENhcHR1cmVNb2RlKCkge1xyXG4gICAgdmFyIFByb3AgPSAnQ2FwdHVyZU1vZGUnO1xyXG5cclxuICAgIFByb3AgPSBQcm9wO1xyXG4gICAgcmV0dXJuIHRoaXMuU2lnV2ViR2V0UHJvcGVydHkoUHJvcCk7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgTENEU2V0V2luZG93KHhQLCB5UCwgeFMsIHlTKSB7XHJcbiAgICB2YXIgUHJvcCA9ICdMQ0RTZXRXaW5kb3cvJztcclxuICAgIFByb3AgPSBQcm9wICsgeFAgKyAnLCcgKyB5UCArICcsJyArIHhTICsgJywnICsgeVM7XHJcbiAgICB0aGlzLlNpZ1dlYlNldFByb3BlcnR5U3luYyhQcm9wKTtcclxuICB9XHJcblxyXG4gIHN0YXRpYyBMQ0RXcml0ZVN0cmluZyhkZXN0LCBtb2RlLCB4LCB5LCBmbnQsIHNpemUsIHN0cikge1xyXG4gICAgdmFyIGMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdjYW52YXMnKTtcclxuICAgIHZhciBjbnR4ID0gYy5nZXRDb250ZXh0KCcyZCcpO1xyXG4gICAgY250eC5mb250ID0gZm50O1xyXG4gICAgdmFyIHR4dCA9IHN0cjtcclxuICAgIHZhciB4cyA9IE1hdGgucm91bmQoY250eC5tZWFzdXJlVGV4dCh0eHQpLndpZHRoKTtcclxuICAgIHZhciB5cyA9IHNpemU7XHJcbiAgICBjLndpZHRoID0geHM7XHJcbiAgICBjLmhlaWdodCA9IHlzO1xyXG5cclxuICAgIGlmICh4cyA9PSAwKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBjbnR4LmZvbnQgPSBmbnQ7XHJcbiAgICBjbnR4LmZpbGxTdHlsZSA9ICcjRkZGRkZGJztcclxuICAgIGNudHgucmVjdCgwLCAwLCB4cywgeXMpO1xyXG4gICAgY250eC5maWxsKCk7XHJcblxyXG4gICAgY250eC5maWxsU3R5bGUgPSAnIzAwMDAwMCc7XHJcbiAgICBjbnR4LnRleHRCYXNlbGluZSA9ICd0b3AnO1xyXG4gICAgY250eC5maWxsVGV4dCh0eHQsIDAsIDApO1xyXG5cclxuICAgIGNudHguZHJhd0ltYWdlKGNudHguY2FudmFzLCAwLCAwLCB4cywgeXMpO1xyXG5cclxuICAgIHZhciBHc3RyID0gdGhpcy5jcmVhdGVMY2RCaXRtYXBGcm9tQ2FudmFzKGMsIHgsIHksIHhzLCB5cyk7XHJcblxyXG4gICAgdGhpcy5MY2RXcml0ZUltYWdlU3RyZWFtKGRlc3QsIG1vZGUsIHgsIHksIHhzLCB5cywgR3N0cik7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgTENERHJhd1JlY3RhbmdsZShkZXN0LCBtb2RlLCB4LCB5LCB4cywgeXMsIGZpbGwpIHtcclxuICAgIHZhciBjID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnY2FudmFzJyk7XHJcbiAgICB2YXIgY250eCA9IGMuZ2V0Q29udGV4dCgnMmQnKTtcclxuXHJcbiAgICBjLndpZHRoID0geHM7XHJcbiAgICBjLmhlaWdodCA9IHlzO1xyXG5cclxuICAgIGNudHguZmlsbFN0eWxlID0gZmlsbDtcclxuICAgIGNudHgucmVjdCgwLCAwLCB4cywgeXMpO1xyXG4gICAgY250eC5maWxsKCk7XHJcblxyXG4gICAgY250eC5kcmF3SW1hZ2UoY250eC5jYW52YXMsIDAsIDAsIHhzLCB5cyk7XHJcbiAgICB2YXIgR3N0ciA9IHRoaXMuY3JlYXRlTGNkQml0bWFwRnJvbUNhbnZhcyhjLCB4LCB5LCB4cywgeXMpO1xyXG4gICAgdGhpcy5MY2RXcml0ZUltYWdlQmxvYihkZXN0LCBtb2RlLCB4LCB5LCB4cywgeXMsIEdzdHIpO1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIExDRERyYXdCdXR0b24oZGVzdCwgbW9kZSwgeCwgeSwgeHMsIHlzLCBzdHJ5cywgZmlsbCwgZm50LCBzdHIpIHtcclxuICAgIHZhciBjID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnY2FudmFzJyk7XHJcbiAgICB2YXIgY250eCA9IGMuZ2V0Q29udGV4dCgnMmQnKTtcclxuICAgIGNudHguZm9udCA9IGZudDtcclxuICAgIHZhciB0eHQgPSBzdHI7XHJcbiAgICB2YXIgc3hzID0gTWF0aC5yb3VuZChjbnR4Lm1lYXN1cmVUZXh0KHR4dCkud2lkdGgpO1xyXG4gICAgdmFyIHN5cyA9IHN0cnlzO1xyXG4gICAgYy53aWR0aCA9IHhzO1xyXG4gICAgYy5oZWlnaHQgPSB5cztcclxuXHJcbiAgICBjbnR4LmZvbnQgPSBmbnQ7XHJcbiAgICBjbnR4LmZpbGxTdHlsZSA9IGZpbGw7XHJcbiAgICBjbnR4LnJlY3QoMCwgMCwgeHMsIHlzKTtcclxuICAgIGNudHguZmlsbCgpO1xyXG5cclxuICAgIGNudHguZmlsbFN0eWxlID0gJyNGRkZGRkYnO1xyXG4gICAgY250eC50ZXh0QmFzZWxpbmUgPSAndG9wJztcclxuICAgIGNudHguZmlsbFRleHQodHh0LCAoeHMgLSBzeHMpIC8gMiwgKHlzIC0gc3lzKSAvIDIpO1xyXG5cclxuICAgIGNudHguZHJhd0ltYWdlKGNudHguY2FudmFzLCAwLCAwLCB4cywgeXMpO1xyXG5cclxuICAgIHZhciBHc3RyID0gdGhpcy5jcmVhdGVMY2RCaXRtYXBGcm9tQ2FudmFzKGMsIHgsIHksIHhzLCB5cyk7XHJcblxyXG4gICAgdGhpcy5MY2RXcml0ZUltYWdlQmxvYihkZXN0LCBtb2RlLCB4LCB5LCB4cywgeXMsIEdzdHIpO1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIExDRFdyaXRlU3RyaW5nV2luZG93KGRlc3QsIG1vZGUsIHgsIHksIGZudCwgeHNpemUsIHlzaXplLCBzdHIpIHtcclxuICAgIHZhciBjID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnY2FudmFzJyk7XHJcbiAgICB2YXIgY250eCA9IGMuZ2V0Q29udGV4dCgnMmQnKTtcclxuICAgIGNudHguZm9udCA9IGZudDtcclxuICAgIHZhciB0eHQgPSBzdHI7XHJcbiAgICB2YXIgeHMgPSB4c2l6ZTtcclxuICAgIHZhciB5cyA9IHlzaXplO1xyXG4gICAgYy53aWR0aCA9IHhzO1xyXG4gICAgYy5oZWlnaHQgPSB5cztcclxuXHJcbiAgICBjbnR4LmZvbnQgPSBmbnQ7XHJcbiAgICBjbnR4LmZpbGxTdHlsZSA9ICcjRkZGRkZGJztcclxuICAgIGNudHgucmVjdCgwLCAwLCB4cywgeXMpO1xyXG4gICAgY250eC5maWxsKCk7XHJcblxyXG4gICAgY250eC5maWxsU3R5bGUgPSAnIzAwMDAwMCc7XHJcbiAgICBjbnR4LnRleHRCYXNlbGluZSA9ICd0b3AnO1xyXG4gICAgY250eC5maWxsVGV4dCh0eHQsIDAsIDApO1xyXG5cclxuICAgIGNudHguZHJhd0ltYWdlKGNudHguY2FudmFzLCAwLCAwLCB4cywgeXMpO1xyXG5cclxuICAgIHZhciBHc3RyID0gdGhpcy5jcmVhdGVMY2RCaXRtYXBGcm9tQ2FudmFzKGMsIHgsIHksIHhzLCB5cyk7XHJcblxyXG4gICAgdGhpcy5MY2RXcml0ZUltYWdlQmxvYihkZXN0LCBtb2RlLCB4LCB5LCB4cywgeXMsIEdzdHIpO1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIExDRFN0cmluZ1dpZHRoKGZudCwgc3RyKSB7XHJcbiAgICB2YXIgYyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2NhbnZhcycpO1xyXG4gICAgdmFyIGNudHggPSBjLmdldENvbnRleHQoJzJkJyk7XHJcbiAgICBjbnR4LmZvbnQgPSBmbnQ7XHJcbiAgICB2YXIgdHh0ID0gc3RyO1xyXG4gICAgdmFyIHhzID0gTWF0aC5yb3VuZChjbnR4Lm1lYXN1cmVUZXh0KHR4dCkud2lkdGgpO1xyXG5cclxuICAgIHJldHVybiB4cztcclxuICB9XHJcblxyXG4gIHN0YXRpYyBMQ0RTdHJpbmdIZWlnaHQoZm50LCBzdHIpIHtcclxuICAgIHJldHVybiAxNjtcclxuICB9XHJcblxyXG4gIHN0YXRpYyBMY2RSZWZyZXNoKE1vZGUsIFhwLCBZcCwgWHMsIFlzKSB7XHJcbiAgICB2YXIgUHJvcCA9ICdMY2RSZWZyZXNoLyc7XHJcblxyXG4gICAgUHJvcCA9IFByb3AgKyBNb2RlICsgJywnICsgWHAgKyAnLCcgKyBZcCArICcsJyArIFhzICsgJywnICsgWXM7XHJcbiAgICB0aGlzLlNpZ1dlYlNldFByb3BlcnR5U3luYyhQcm9wKTtcclxuICB9XHJcblxyXG4gIHN0YXRpYyBMQ0RTZW5kQ21kU3RyaW5nKENtZFN0ciwgUmV0dXJuQ291bnQsIFJlc3VsdCwgVGltZU91dCkge1xyXG4gICAgdmFyIFByb3AgPSAnTGNkU2VuZENtZFN0cmluZy8nO1xyXG5cclxuICAgIFByb3AgPSBQcm9wICsgUmV0dXJuQ291bnQgKyAnLCcgKyBUaW1lT3V0O1xyXG4gICAgUmVzdWx0ID0gdGhpcy5TaWdXZWJTZXRTdHJlYW1Qcm9wZXJ0eShQcm9wLCBDbWRTdHIpO1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIExDRFNlbmRDbWREYXRhKENtZFN0ciwgUmV0dXJuQ291bnQsIFJlc3VsdCwgVGltZU91dCkge1xyXG4gICAgdmFyIFByb3AgPSAnTGNkU2VuZENtZERhdGEvJztcclxuXHJcbiAgICBQcm9wID0gUHJvcCArIFJldHVybkNvdW50ICsgJywnICsgVGltZU91dDtcclxuICAgIFJlc3VsdCA9IHRoaXMuU2lnV2ViU2V0U3RyZWFtUHJvcGVydHkoUHJvcCwgQ21kU3RyKTtcclxuICB9XHJcblxyXG4gIC8vXHRcdGZ1bmN0aW9uICBMQ0RTZW5kV2luZG93ZWRHcmFwaGljQ2FudmFzKCAgZGVzdCwgbW9kZSwgIHgsICB5LCBjYW52YXMgKVxyXG4gIC8vXHRcdFx0IHtcclxuICAvL1x0XHRcdCB9XHJcblxyXG4gIC8vXHRcdGZ1bmN0aW9uICBMQ0RTZW5kV2luZG93ZWRHcmFwaGljQ2FudmFzKCAgZGVzdCwgbW9kZSwgIHgsICB5LCAgeHMsICB5cywgY2FudmFzIClcclxuICAvL1x0XHRcdHtcclxuICAvL1x0XHRcdHZhciBHc3RyID0gdGhpcy5jcmVhdGVMY2RCaXRtYXBGcm9tQ2FudmFzKCBjYW52YXMsIDAsIDAsIHhzLCB5cylcclxuICAvL1x0XHRcdExjZFdyaXRlSW1hZ2VTdHJlYW0oIGRlc3QsIG1vZGUsIHgsIHksIHhzLCB5cywgR3N0ciApO1xyXG4gIC8vXHRcdFx0fVxyXG5cclxuICBzdGF0aWMgTENEU2VuZFdpbmRvd2VkR3JhcGhpY0NhbnZhcyhkZXN0LCBtb2RlLCB4LCB5LCB4cywgeXMsIGMsIHhwcywgeXBzKSB7XHJcbiAgICB2YXIgY2FudmFzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnY2FudmFzJyk7XHJcbiAgICB2YXIgR3N0ciA9IHRoaXMuY3JlYXRlTGNkQml0bWFwRnJvbUNhbnZhcyhjYW52YXMsIHhwcywgeXBzLCB4cywgeXMpO1xyXG4gICAgdGhpcy5MY2RXcml0ZUltYWdlU3RyZWFtKGRlc3QsIG1vZGUsIHgsIHksIHhzLCB5cywgR3N0cik7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgTENEU2VuZEdyYXBoaWNVcmwoZGVzdCwgbW9kZSwgeCwgeSwgdXJsKSB7XHJcbiAgICB0aGlzLkxjZFdyaXRlSW1hZ2UoZGVzdCwgbW9kZSwgeCwgeSwgdXJsKTtcclxuICB9XHJcblxyXG4gIC8vXHRcdGZ1bmN0aW9uICBMQ0RTZW5kR3JhcGhpYyggIERlc3QsICBNb2RlLCAgWFBvcywgIFlQb3MsICBJbWFnZUZpbGVOYW1lICkge31cclxuICAvL1x0XHRmdW5jdGlvbiAgTENEU2VuZEdyYXBoaWNVUkwoICBEZXN0LCAgTW9kZSwgIFhQb3MsICBZUG9zLCAgVVJMICkge31cclxuXHJcbiAgc3RhdGljIExDRENsZWFyKCkge1xyXG4gICAgdmFyIFByb3AgPSAnTGNkQ2xlYXInO1xyXG5cclxuICAgIFByb3AgPSBQcm9wO1xyXG4gICAgcmV0dXJuIHRoaXMuU2lnV2ViR2V0UHJvcGVydHkoUHJvcCk7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgTENEU2V0VGFibGV0TWFwKFxyXG4gICAgTENEVHlwZSxcclxuICAgIExDRFhTaXplLFxyXG4gICAgTENEWVNpemUsXHJcbiAgICBMQ0RYU3RhcnQsXHJcbiAgICBMQ0RZU3RhcnQsXHJcbiAgICBMQ0RYU3RvcCxcclxuICAgIExDRFlTdG9wXHJcbiAgKSB7fVxyXG5cclxuICBzdGF0aWMgTENEU2V0UGl4ZWxEZXB0aCh2KSB7XHJcbiAgICB2YXIgUHJvcCA9ICdMY2RTZXRQaXhlbERlcHRoLyc7XHJcblxyXG4gICAgUHJvcCA9IFByb3AgKyB2O1xyXG4gICAgdGhpcy5TaWdXZWJTZXRQcm9wZXJ0eVN5bmMoUHJvcCk7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgTENER2V0TENEU2l6ZSgpIHtcclxuICAgIHZhciBQcm9wID0gJ0xjZEdldExjZFNpemUnO1xyXG5cclxuICAgIFByb3AgPSBQcm9wO1xyXG4gICAgcmV0dXJuIHRoaXMuU2lnV2ViR2V0UHJvcGVydHkoUHJvcCk7XHJcbiAgfVxyXG4gIHN0YXRpYyBMQ0RHZXRDb21wcmVzc2lvbk1vZGUoKSB7XHJcbiAgICB2YXIgUHJvcCA9ICdMY2RDb21wcmVzc2lvbk1vZGUnO1xyXG5cclxuICAgIFByb3AgPSBQcm9wO1xyXG4gICAgcmV0dXJuIHRoaXMuU2lnV2ViR2V0UHJvcGVydHkoUHJvcCk7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgTENER2V0WkNvbXByZXNzaW9uTW9kZSgpIHtcclxuICAgIHZhciBQcm9wID0gJ0xjZFpDb21wcmVzc2lvbk1vZGUnO1xyXG5cclxuICAgIFByb3AgPSBQcm9wO1xyXG4gICAgcmV0dXJuIHRoaXMuU2lnV2ViR2V0UHJvcGVydHkoUHJvcCk7XHJcbiAgfVxyXG5cclxuICAvL1xyXG4gIC8vXHRcdFNpZ1BsdXNORVRMQ0QuY3NcclxuICAvL1xyXG5cclxuICBzdGF0aWMgU2V0UmVhbFRhYmxldFN0YXRlKHYpIHtcclxuICAgIHZhciBQcm9wID0gJ1RhYmxldFN0YXRlLyc7XHJcblxyXG4gICAgUHJvcCA9IFByb3AgKyB2O1xyXG4gICAgdGhpcy5TaWdXZWJTZXRQcm9wZXJ0eVN5bmMoUHJvcCk7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgR2V0VGFibGV0U3RhdGUoKSB7XHJcbiAgICB2YXIgUHJvcCA9ICdUYWJsZXRTdGF0ZSc7XHJcblxyXG4gICAgUHJvcCA9IFByb3A7XHJcbiAgICByZXR1cm4gdGhpcy5TaWdXZWJHZXRQcm9wZXJ0eShQcm9wKTtcclxuICB9XHJcblxyXG4gIHN0YXRpYyBTZXRUYWJsZXRMb2dpY2FsWFNpemUodikge1xyXG4gICAgdmFyIFByb3AgPSAnVGFibGV0TG9naWNhbFhTaXplLyc7XHJcblxyXG4gICAgUHJvcCA9IFByb3AgKyB2O1xyXG4gICAgdGhpcy5TaWdXZWJTZXRQcm9wZXJ0eVN5bmMoUHJvcCk7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgR2V0VGFibGV0TG9naWNhbFhTaXplKCkge1xyXG4gICAgdmFyIFByb3AgPSAnVGFibGV0TG9naWNhbFhTaXplJztcclxuXHJcbiAgICBQcm9wID0gUHJvcDtcclxuICAgIHJldHVybiB0aGlzLlNpZ1dlYkdldFByb3BlcnR5KFByb3ApO1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIEdldFRhYmxldExvZ2ljYWxZU2l6ZSgpIHtcclxuICAgIHZhciBQcm9wID0gJ1RhYmxldExvZ2ljYWxZU2l6ZSc7XHJcblxyXG4gICAgUHJvcCA9IFByb3A7XHJcbiAgICByZXR1cm4gdGhpcy5TaWdXZWJHZXRQcm9wZXJ0eShQcm9wKTtcclxuICB9XHJcblxyXG4gIHN0YXRpYyBTZXRUYWJsZXRMb2dpY2FsWVNpemUodikge1xyXG4gICAgdmFyIFByb3AgPSAnVGFibGV0TG9naWNhbFlTaXplLyc7XHJcblxyXG4gICAgUHJvcCA9IFByb3AgKyB2O1xyXG4gICAgdGhpcy5TaWdXZWJTZXRQcm9wZXJ0eVN5bmMoUHJvcCk7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgU2V0VGFibGV0WFN0YXJ0KHYpIHtcclxuICAgIHZhciBQcm9wID0gJ1RhYmxldFhTdGFydC8nO1xyXG5cclxuICAgIFByb3AgPSBQcm9wICsgdjtcclxuICAgIHRoaXMuU2lnV2ViU2V0UHJvcGVydHlTeW5jKFByb3ApO1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIEdldFRhYmxldFhTdGFydCgpIHtcclxuICAgIHZhciBQcm9wID0gJ1RhYmxldFhTdGFydCc7XHJcblxyXG4gICAgUHJvcCA9IFByb3A7XHJcbiAgICByZXR1cm4gdGhpcy5TaWdXZWJHZXRQcm9wZXJ0eShQcm9wKTtcclxuICB9XHJcblxyXG4gIHN0YXRpYyBTZXRUYWJsZXRZU3RhcnQodikge1xyXG4gICAgdmFyIFByb3AgPSAnVGFibGV0WVN0YXJ0Lyc7XHJcblxyXG4gICAgUHJvcCA9IFByb3AgKyB2O1xyXG4gICAgdGhpcy5TaWdXZWJTZXRQcm9wZXJ0eVN5bmMoUHJvcCk7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgR2V0VGFibGV0WVN0YXJ0KCkge1xyXG4gICAgdmFyIFByb3AgPSAnVGFibGV0WVN0YXJ0JztcclxuXHJcbiAgICBQcm9wID0gUHJvcDtcclxuICAgIHJldHVybiB0aGlzLlNpZ1dlYkdldFByb3BlcnR5KFByb3ApO1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIFNldFRhYmxldFhTdG9wKHYpIHtcclxuICAgIHZhciBQcm9wID0gJ1RhYmxldFhTdG9wLyc7XHJcblxyXG4gICAgUHJvcCA9IFByb3AgKyB2O1xyXG4gICAgdGhpcy5TaWdXZWJTZXRQcm9wZXJ0eVN5bmMoUHJvcCk7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgR2V0VGFibGV0WFN0b3AoKSB7XHJcbiAgICB2YXIgUHJvcCA9ICdUYWJsZXRYU3RvcCc7XHJcblxyXG4gICAgUHJvcCA9IFByb3A7XHJcbiAgICByZXR1cm4gdGhpcy5TaWdXZWJHZXRQcm9wZXJ0eShQcm9wKTtcclxuICB9XHJcblxyXG4gIHN0YXRpYyBTZXRUYWJsZXRZU3RvcCh2KSB7XHJcbiAgICB2YXIgUHJvcCA9ICdUYWJsZXRZU3RvcC8nO1xyXG5cclxuICAgIFByb3AgPSBQcm9wICsgdjtcclxuICAgIHRoaXMuU2lnV2ViU2V0UHJvcGVydHlTeW5jKFByb3ApO1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIEdldFRhYmxldFlTdG9wKCkge1xyXG4gICAgdmFyIFByb3AgPSAnVGFibGV0WVN0b3AnO1xyXG5cclxuICAgIFByb3AgPSBQcm9wO1xyXG4gICAgcmV0dXJuIHRoaXMuU2lnV2ViR2V0UHJvcGVydHkoUHJvcCk7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgU2V0VGFibGV0RmlsdGVyUG9pbnRzKHYpIHtcclxuICAgIHZhciBQcm9wID0gJ1RhYmxldEZpbHRlclBvaW50cy8nO1xyXG5cclxuICAgIFByb3AgPSBQcm9wICsgdjtcclxuICAgIHRoaXMuU2lnV2ViU2V0UHJvcGVydHlTeW5jKFByb3ApO1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIEdldFRhYmxldEZpbHRlclBvaW50cygpIHtcclxuICAgIHZhciBQcm9wID0gJ1RhYmxldEZpbHRlclBvaW50cyc7XHJcblxyXG4gICAgUHJvcCA9IFByb3A7XHJcbiAgICByZXR1cm4gdGhpcy5TaWdXZWJHZXRQcm9wZXJ0eShQcm9wKTtcclxuICB9XHJcblxyXG4gIHN0YXRpYyBTZXRUYWJsZXRUaW1pbmdBZHZhbmNlKHYpIHtcclxuICAgIHZhciBQcm9wID0gJ1RhYmxldFRpbWluZ0FkdmFuY2UvJztcclxuXHJcbiAgICBQcm9wID0gUHJvcCArIHY7XHJcbiAgICB0aGlzLlNpZ1dlYlNldFByb3BlcnR5U3luYyhQcm9wKTtcclxuICB9XHJcblxyXG4gIHN0YXRpYyBHZXRUYWJsZXRUaW1pbmdBZHZhbmNlKCkge1xyXG4gICAgdmFyIFByb3AgPSAnVGFibGV0VGltaW5nQWR2YW5jZSc7XHJcblxyXG4gICAgUHJvcCA9IFByb3A7XHJcbiAgICByZXR1cm4gdGhpcy5TaWdXZWJHZXRQcm9wZXJ0eShQcm9wKTtcclxuICB9XHJcblxyXG4gIHN0YXRpYyBTZXRUYWJsZXRDb21Qb3J0KHYpIHtcclxuICAgIHZhciBQcm9wID0gJ1RhYmxldENvbVBvcnQvJztcclxuXHJcbiAgICBQcm9wID0gUHJvcCArIHY7XHJcbiAgICB0aGlzLlNpZ1dlYlNldFByb3BlcnR5U3luYyhQcm9wKTtcclxuICB9XHJcblxyXG4gIHN0YXRpYyBHZXRUYWJsZXRDb21Qb3J0KCkge1xyXG4gICAgdmFyIFByb3AgPSAnVGFibGV0Q29tUG9ydCc7XHJcblxyXG4gICAgUHJvcCA9IFByb3A7XHJcbiAgICByZXR1cm4gdGhpcy5TaWdXZWJHZXRQcm9wZXJ0eShQcm9wKTtcclxuICB9XHJcblxyXG4gIHN0YXRpYyBTZXRUYWJsZXRCYXVkUmF0ZSh2KSB7XHJcbiAgICB2YXIgUHJvcCA9ICdUYWJsZXRCYXVkUmF0ZS8nO1xyXG5cclxuICAgIFByb3AgPSBQcm9wICsgdjtcclxuICAgIHRoaXMuU2lnV2ViU2V0UHJvcGVydHlTeW5jKFByb3ApO1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIEdldFRhYmxldEJhdWRSYXRlKCkge1xyXG4gICAgdmFyIFByb3AgPSAnVGFibGV0QmF1ZFJhdGUnO1xyXG5cclxuICAgIFByb3AgPSBQcm9wO1xyXG4gICAgcmV0dXJuIHRoaXMuU2lnV2ViR2V0UHJvcGVydHkoUHJvcCk7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgU2V0VGFibGV0Um90YXRpb24odikge1xyXG4gICAgdmFyIFByb3AgPSAnVGFibGV0Um90YXRpb24vJztcclxuXHJcbiAgICBQcm9wID0gUHJvcCArIHY7XHJcbiAgICB0aGlzLlNpZ1dlYlNldFByb3BlcnR5U3luYyhQcm9wKTtcclxuICB9XHJcblxyXG4gIHN0YXRpYyBHZXRUYWJsZXRSb3RhdGlvbigpIHtcclxuICAgIHZhciBQcm9wID0gJ1RhYmxldFJvdGF0aW9uJztcclxuXHJcbiAgICBQcm9wID0gUHJvcDtcclxuICAgIHJldHVybiB0aGlzLlNpZ1dlYkdldFByb3BlcnR5KFByb3ApO1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIFNldFRhYmxldFR5cGUodikge1xyXG4gICAgdmFyIFByb3AgPSAnVGFibGV0VHlwZS8nO1xyXG5cclxuICAgIFByb3AgPSBQcm9wICsgdjtcclxuICAgIHRoaXMuU2lnV2ViU2V0UHJvcGVydHlTeW5jKFByb3ApO1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIEdldFRhYmxldFR5cGUoKSB7XHJcbiAgICB2YXIgUHJvcCA9ICdUYWJsZXRUeXBlJztcclxuXHJcbiAgICBQcm9wID0gUHJvcDtcclxuICAgIHJldHVybiB0aGlzLlNpZ1dlYkdldFByb3BlcnR5KFByb3ApO1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIFNldFNlcnZlclRhYmxldFR5cGUodikge1xyXG4gICAgdmFyIFByb3AgPSAnU2VydmVyVGFibGV0VHlwZS8nO1xyXG5cclxuICAgIFByb3AgPSBQcm9wICsgdjtcclxuICAgIHRoaXMuU2lnV2ViU2V0UHJvcGVydHlTeW5jKFByb3ApO1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIEdldFNlcnZlclRhYmxldFR5cGUoKSB7XHJcbiAgICB2YXIgUHJvcCA9ICdTZXJ2ZXJUYWJsZXRUeXBlJztcclxuXHJcbiAgICBQcm9wID0gUHJvcDtcclxuICAgIHJldHVybiB0aGlzLlNpZ1dlYkdldFByb3BlcnR5KFByb3ApO1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIFNldFRhYmxldENvbVRlc3Qodikge1xyXG4gICAgdmFyIFByb3AgPSAnVGFibGV0Q29tVGVzdC8nO1xyXG5cclxuICAgIFByb3AgPSBQcm9wICsgdjtcclxuICAgIHRoaXMuU2lnV2ViU2V0UHJvcGVydHlTeW5jKFByb3ApO1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIEdldFRhYmxldENvbVRlc3QoKSB7XHJcbiAgICB2YXIgUHJvcCA9ICdUYWJsZXRDb21UZXN0JztcclxuXHJcbiAgICBQcm9wID0gUHJvcDtcclxuICAgIHJldHVybiB0aGlzLlNpZ1dlYkdldFByb3BlcnR5KFByb3ApO1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIFNldFRhYmxldFJlc29sdXRpb24odikge1xyXG4gICAgdmFyIFByb3AgPSAnVGFibGV0UmVzb2x1dGlvbi8nO1xyXG5cclxuICAgIFByb3AgPSBQcm9wICsgdjtcclxuICAgIHRoaXMuU2lnV2ViU2V0UHJvcGVydHlTeW5jKFByb3ApO1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIEdldFRhYmxldFJlc29sdXRpb24oKSB7XHJcbiAgICB2YXIgUHJvcCA9ICdUYWJsZXRSZXNvbHV0aW9uJztcclxuXHJcbiAgICBQcm9wID0gUHJvcDtcclxuICAgIHJldHVybiB0aGlzLlNpZ1dlYkdldFByb3BlcnR5KFByb3ApO1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIFRhYmxldENvbm5lY3RRdWVyeSgpIHtcclxuICAgIHZhciBQcm9wID0gJ1RhYmxldENvbm5lY3RRdWVyeSc7XHJcblxyXG4gICAgUHJvcCA9IFByb3A7XHJcbiAgICByZXR1cm4gdGhpcy5TaWdXZWJHZXRQcm9wZXJ0eShQcm9wKTtcclxuICB9XHJcblxyXG4gIHN0YXRpYyBUYWJsZXRNb2RlbE51bWJlcigpIHtcclxuICAgIHZhciBQcm9wID0gJ1RhYmxldE1vZGVsTnVtYmVyJztcclxuXHJcbiAgICBQcm9wID0gUHJvcDtcclxuICAgIHJldHVybiB0aGlzLlNpZ1dlYkdldFByb3BlcnR5KFByb3ApO1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIFRhYmxldFNlcmlhbE51bWJlcigpIHtcclxuICAgIHZhciBQcm9wID0gJ1RhYmxldFNlcmlhbE51bWJlcic7XHJcblxyXG4gICAgUHJvcCA9IFByb3A7XHJcbiAgICByZXR1cm4gdGhpcy5TaWdXZWJHZXRQcm9wZXJ0eShQcm9wKTtcclxuICB9XHJcblxyXG4gIHN0YXRpYyBTZXRUYWJsZXRQb3J0UGF0aCh2KSB7XHJcbiAgICB2YXIgUHJvcCA9ICdUYWJsZXRQb3J0UGF0aC8nO1xyXG5cclxuICAgIFByb3AgPSBQcm9wICsgdjtcclxuICAgIHRoaXMuU2lnV2ViU2V0UHJvcGVydHlTeW5jKFByb3ApO1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIFNldFRhYmxldExvY2FsSW5pRmlsZVBhdGgodikge1xyXG4gICAgdmFyIFByb3AgPSAnVGFibGV0TG9jYWxJbmlGaWxlUGF0aC8nO1xyXG5cclxuICAgIFByb3AgPSBQcm9wICsgdjtcclxuICAgIHRoaXMuU2lnV2ViU2V0UHJvcGVydHlTeW5jKFByb3ApO1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIFNldFRhYmxldE1vZGVsKHYpIHtcclxuICAgIHZhciBQcm9wID0gJ1RhYmxldE1vZGVsLyc7XHJcblxyXG4gICAgUHJvcCA9IFByb3AgKyB2O1xyXG4gICAgdGhpcy5TaWdXZWJTZXRQcm9wZXJ0eVN5bmMoUHJvcCk7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgU2V0U2VyaWFsUG9ydENsb3NlRGVsYXkodikge1xyXG4gICAgdmFyIFByb3AgPSAnU2VyaWFsUG9ydENsb3NlRGVsYXkvJztcclxuXHJcbiAgICBQcm9wID0gUHJvcCArIHY7XHJcbiAgICB0aGlzLlNpZ1dlYlNldFByb3BlcnR5U3luYyhQcm9wKTtcclxuICB9XHJcblxyXG4gIHN0YXRpYyBHZXRTZXJpYWxQb3J0Q2xvc2VEZWxheSgpIHtcclxuICAgIHZhciBQcm9wID0gJ1NlcmlhbFBvcnRDbG9zZURlbGF5JztcclxuXHJcbiAgICBQcm9wID0gUHJvcDtcclxuICAgIHJldHVybiB0aGlzLlNpZ1dlYkdldFByb3BlcnR5KFByb3ApO1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIEVuYWJsZVRhYmxldEVuY3J5cHRpb24oKSB7XHJcbiAgICB2YXIgUHJvcCA9ICdFbmFibGVUYWJsZXRFbmNyeXB0aW9uJztcclxuXHJcbiAgICBQcm9wID0gUHJvcDtcclxuICAgIHRoaXMuU2lnV2ViU2V0UHJvcGVydHlTeW5jKFByb3ApO1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIFNldFRhYmxldEVuY3J5cHRpb25Nb2RlKGhtb2RlLCB0bW9kZSkge1xyXG4gICAgdmFyIFByb3AgPSAnVGFibGV0RW5jcnlwdGlvbk1vZGUvJztcclxuXHJcbiAgICBQcm9wID0gUHJvcCArIGhtb2RlICsgJywnICsgdG1vZGU7XHJcbiAgICB0aGlzLlNpZ1dlYlNldFByb3BlcnR5U3luYyhQcm9wKTtcclxuICB9XHJcblxyXG4gIHN0YXRpYyBTZXRNYXhMb2dGaWxlU2l6ZSh2KSB7XHJcbiAgICB2YXIgUHJvcCA9ICdNYXhMb2dGaWxlU2l6ZS8nO1xyXG5cclxuICAgIFByb3AgPSBQcm9wICsgdjtcclxuICAgIHRoaXMuU2lnV2ViU2V0UHJvcGVydHlTeW5jKFByb3ApO1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIEdldFNpZ1NvY2tTZXJ2ZXJQYXRoKCkge1xyXG4gICAgdmFyIFByb3AgPSAnU2lnU29ja1NlcnZlclBhdGgnO1xyXG5cclxuICAgIFByb3AgPSBQcm9wO1xyXG4gICAgcmV0dXJuIHRoaXMuU2lnV2ViR2V0UHJvcGVydHkoUHJvcCk7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgR2V0U2lnU29ja0NsaWVudE5hbWUoKSB7XHJcbiAgICB2YXIgUHJvcCA9ICdTaWdTb2NrQ2xpZW50TmFtZSc7XHJcblxyXG4gICAgUHJvcCA9IFByb3A7XHJcbiAgICByZXR1cm4gdGhpcy5TaWdXZWJHZXRQcm9wZXJ0eShQcm9wKTtcclxuICB9XHJcblxyXG4gIHN0YXRpYyBHZXRTaWdTb2NrUG9ydE51bWJlcigpIHtcclxuICAgIHZhciBQcm9wID0gJ1NpZ1NvY2tQb3J0TnVtYmVyJztcclxuXHJcbiAgICBQcm9wID0gUHJvcDtcclxuICAgIHJldHVybiB0aGlzLlNpZ1dlYkdldFByb3BlcnR5KFByb3ApO1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIFNldFNpZ1NvY2tTZXJ2ZXJQYXRoKHYpIHtcclxuICAgIHZhciBQcm9wID0gJ1NpZ1NvY2tTZXJ2ZXJQYXRoLyc7XHJcblxyXG4gICAgUHJvcCA9IFByb3AgKyB2O1xyXG4gICAgdGhpcy5TaWdXZWJTZXRQcm9wZXJ0eVN5bmMoUHJvcCk7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgU2V0U2lnU29ja0NsaWVudE5hbWUodikge1xyXG4gICAgdmFyIFByb3AgPSAnU2lnU29ja0NsaWVudE5hbWUvJztcclxuXHJcbiAgICBQcm9wID0gUHJvcCArIHY7XHJcbiAgICB0aGlzLlNpZ1dlYlNldFByb3BlcnR5U3luYyhQcm9wKTtcclxuICB9XHJcblxyXG4gIHN0YXRpYyBTZXRQb3J0TnVtYmVyKHYpIHtcclxuICAgIHZhciBQcm9wID0gJ1BvcnROdW1iZXIvJztcclxuXHJcbiAgICBQcm9wID0gUHJvcCArIHY7XHJcbiAgICB0aGlzLlNpZ1dlYlNldFByb3BlcnR5U3luYyhQcm9wKTtcclxuICB9XHJcblxyXG4gIHN0YXRpYyBTZXRTaWdTb2NrUG9ydE51bWJlcih2KSB7XHJcbiAgICB2YXIgUHJvcCA9ICdTaWdTb2NrUG9ydE51bWJlci8nO1xyXG5cclxuICAgIFByb3AgPSBQcm9wICsgdjtcclxuICAgIHRoaXMuU2lnV2ViU2V0UHJvcGVydHlTeW5jKFByb3ApO1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIEdldEZpcm13YXJlUmV2aXNpb24oKSB7XHJcbiAgICB2YXIgUHJvcCA9ICdGaXJtd2FyZVJldmlzaW9uJztcclxuXHJcbiAgICBQcm9wID0gUHJvcDtcclxuICAgIHJldHVybiB0aGlzLlNpZ1dlYkdldFByb3BlcnR5KFByb3ApO1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIFNldFRhYmxldERhdGEoc2lnU3RyKSB7XHJcbiAgICB2YXIgUHJvcCA9ICdUYWJsZXREYXRhJztcclxuXHJcbiAgICBQcm9wID0gUHJvcDtcclxuICAgIHRoaXMuU2lnV2ViU2V0U3RyZWFtUHJvcGVydHkoUHJvcCwgc2lnU3RyKTtcclxuICB9XHJcblxyXG4gIHN0YXRpYyBHZXRUYWJsZXREYXRhKCkge1xyXG4gICAgdmFyIFByb3AgPSAnVGFibGV0RGF0YSc7XHJcblxyXG4gICAgUHJvcCA9IFByb3A7XHJcbiAgICB2YXIgU3RyID0gdGhpcy5TaWdXZWJHZXRQcm9wZXJ0eShQcm9wKTtcclxuXHJcbiAgICByZXR1cm4gU3RyLnNsaWNlKDEsIFN0ci5sZW5ndGggLSAxKTtcclxuICB9XHJcblxyXG4gIHN0YXRpYyBPcGVuVGFibGV0KHYpIHtcclxuICAgIHZhciBQcm9wID0gJ09wZW5UYWJsZXQvJztcclxuXHJcbiAgICBQcm9wID0gUHJvcCArIHY7XHJcbiAgICB0aGlzLlNpZ1dlYlNldFByb3BlcnR5U3luYyhQcm9wKTtcclxuICB9XHJcblxyXG4gIHN0YXRpYyBDbG9zZVRhYmxldCgpIHtcclxuICAgIHZhciBQcm9wID0gJ0Nsb3NlVGFibGV0JztcclxuXHJcbiAgICBQcm9wID0gUHJvcDtcclxuICAgIHRoaXMuU2lnV2ViU2V0UHJvcGVydHkoUHJvcCk7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgUmVzZXRQYXJhbWV0ZXJzKCkge1xyXG4gICAgdmFyIFByb3AgPSAnUmVzZXRQYXJhbWV0ZXJzJztcclxuXHJcbiAgICBQcm9wID0gUHJvcDtcclxuICAgIHRoaXMuU2lnV2ViU2V0UHJvcGVydHlTeW5jKFByb3ApO1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIHRlc3RSYXdEYXRhKCkge1xyXG4gICAgdGhpcy5PcGVuVGFibGV0KDEpO1xyXG4gICAgdmFyIFN0cjEgPSB0aGlzLkdldFRhYmxldERhdGEoKTtcclxuICAgIHRoaXMuQ2xvc2VUYWJsZXQoKTtcclxuICB9XHJcblxyXG4gIHN0YXRpYyBTZXRUYWJsZXRTdGF0ZSh2LCBjdHgsIHR2KSB7XHJcbiAgICB2YXIgZGVsYXk7XHJcblxyXG4gICAgaWYgKHR2KSB7XHJcbiAgICAgIGRlbGF5ID0gdHY7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBkZWxheSA9IDEwMDtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5HZXRUYWJsZXRTdGF0ZSgpICE9IHYpIHtcclxuICAgICAgaWYgKHYgPT0gMSkge1xyXG4gICAgICAgIGlmIChjdHgpIHtcclxuICAgICAgICAgIHZhciBjYW4gPSBjdHguY2FudmFzO1xyXG4gICAgICAgICAgdGhpcy5TZXREaXNwbGF5WFNpemUoY2FuLndpZHRoKTtcclxuICAgICAgICAgIHRoaXMuU2V0RGlzcGxheVlTaXplKGNhbi5oZWlnaHQpO1xyXG4gICAgICAgICAgdGhpcy5TaWdXZWJTZXREaXNwbGF5VGFyZ2V0KGN0eCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuU2V0UmVhbFRhYmxldFN0YXRlKHYpO1xyXG4gICAgICAgIHZhciBkYXRhID0gdGhpcy5HZXRUYWJsZXRTdGF0ZSgpO1xyXG4gICAgICAgIHZhciBkYXRhUmVzdWx0ID0gZGF0YSA9PSAnJyB8fCBkYXRhID09IG51bGwgPyAwIDogTnVtYmVyKGRhdGEpO1xyXG4gICAgICAgIHZhciB0bXIgPSBudWxsO1xyXG4gICAgICAgIGlmIChjdHggJiYgZGF0YVJlc3VsdCAhPSAwKSB7XHJcbiAgICAgICAgICB0bXIgPSBzZXRJbnRlcnZhbCgoKSA9PiB0aGlzLlNpZ1dlYlJlZnJlc2goKSwgZGVsYXkpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB0bXIgPSBudWxsO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHRtcjtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBpZiAoY3R4KSB7XHJcbiAgICAgICAgICBjbGVhckludGVydmFsKGN0eCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuU2lnV2ViU2V0RGlzcGxheVRhcmdldChudWxsKTtcclxuICAgICAgICB0aGlzLlNldFJlYWxUYWJsZXRTdGF0ZSh2KTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIG51bGw7XHJcbiAgfVxyXG59XHJcbiJdfQ==
|