@bitgo/sdk-core 8.6.0 → 8.7.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +20 -0
- package/dist/src/account-lib/mpc/tss/ecdsa/ecdsa.d.ts +33 -10
- package/dist/src/account-lib/mpc/tss/ecdsa/ecdsa.d.ts.map +1 -1
- package/dist/src/account-lib/mpc/tss/ecdsa/ecdsa.js +566 -141
- package/dist/src/account-lib/mpc/tss/ecdsa/rangeproof.d.ts +2 -2
- package/dist/src/account-lib/mpc/tss/ecdsa/rangeproof.d.ts.map +1 -1
- package/dist/src/account-lib/mpc/tss/ecdsa/rangeproof.js +3 -3
- package/dist/src/account-lib/mpc/tss/ecdsa/types.d.ts +70 -55
- package/dist/src/account-lib/mpc/tss/ecdsa/types.d.ts.map +1 -1
- package/dist/src/account-lib/mpc/tss/ecdsa/types.js +1 -1
- package/dist/src/bitgo/environments.d.ts +1 -0
- package/dist/src/bitgo/environments.d.ts.map +1 -1
- package/dist/src/bitgo/environments.js +5 -3
- package/dist/src/bitgo/pendingApproval/iPendingApproval.d.ts +1 -0
- package/dist/src/bitgo/pendingApproval/iPendingApproval.d.ts.map +1 -1
- package/dist/src/bitgo/pendingApproval/iPendingApproval.js +1 -1
- package/dist/src/bitgo/pendingApproval/pendingApproval.d.ts.map +1 -1
- package/dist/src/bitgo/pendingApproval/pendingApproval.js +9 -1
- package/dist/src/bitgo/tss/common.d.ts +3 -3
- package/dist/src/bitgo/tss/common.d.ts.map +1 -1
- package/dist/src/bitgo/tss/common.js +6 -10
- package/dist/src/bitgo/tss/ecdsa/ecdsa.d.ts +11 -8
- package/dist/src/bitgo/tss/ecdsa/ecdsa.d.ts.map +1 -1
- package/dist/src/bitgo/tss/ecdsa/ecdsa.js +46 -33
- package/dist/src/bitgo/tss/ecdsa/types.d.ts +2 -2
- package/dist/src/bitgo/tss/ecdsa/types.d.ts.map +1 -1
- package/dist/src/bitgo/tss/ecdsa/types.js +1 -1
- package/dist/src/bitgo/tss/types.d.ts +4 -0
- package/dist/src/bitgo/tss/types.d.ts.map +1 -1
- package/dist/src/bitgo/tss/types.js +1 -1
- package/dist/src/bitgo/utils/tss/ecdsa/ecdsa.d.ts +5 -3
- package/dist/src/bitgo/utils/tss/ecdsa/ecdsa.d.ts.map +1 -1
- package/dist/src/bitgo/utils/tss/ecdsa/ecdsa.js +54 -37
- package/dist/src/bitgo/wallet/wallet.d.ts.map +1 -1
- package/dist/src/bitgo/wallet/wallet.js +3 -1
- package/dist/tsconfig.tsbuildinfo +251 -175
- package/package.json +5 -5
|
@@ -33,6 +33,7 @@ const assert_1 = __importDefault(require("assert"));
|
|
|
33
33
|
const utxo_lib_1 = require("@bitgo/utxo-lib");
|
|
34
34
|
const pgp = __importStar(require("openpgp"));
|
|
35
35
|
const bs58_1 = __importDefault(require("bs58"));
|
|
36
|
+
const sdk_lib_mpc_1 = require("@bitgo/sdk-lib-mpc");
|
|
36
37
|
const MPC = new tss_1.Ecdsa();
|
|
37
38
|
/**
|
|
38
39
|
* Combines NShares to combine the final TSS key
|
|
@@ -104,7 +105,7 @@ exports.createUserSignShare = createUserSignShare;
|
|
|
104
105
|
* Creates the Gamma Share and MuShare with User WShare and AShare From BitGo
|
|
105
106
|
* @param {WShare} wShare User WShare
|
|
106
107
|
* @param {AShare} aShare AShare from Bitgo
|
|
107
|
-
* @returns {Promise<
|
|
108
|
+
* @returns {Promise<SignConvertStep2Response>}
|
|
108
109
|
*/
|
|
109
110
|
async function createUserGammaAndMuShare(wShare, aShare) {
|
|
110
111
|
if (wShare.i !== types_2.ShareKeyPosition.USER) {
|
|
@@ -113,7 +114,7 @@ async function createUserGammaAndMuShare(wShare, aShare) {
|
|
|
113
114
|
if (aShare.i !== types_2.ShareKeyPosition.USER || aShare.j !== types_2.ShareKeyPosition.BITGO) {
|
|
114
115
|
throw new Error('Invalid AShare, is not from Bitgo to User');
|
|
115
116
|
}
|
|
116
|
-
return MPC.
|
|
117
|
+
return MPC.signConvertStep2({ wShare, aShare });
|
|
117
118
|
}
|
|
118
119
|
exports.createUserGammaAndMuShare = createUserGammaAndMuShare;
|
|
119
120
|
/**
|
|
@@ -317,6 +318,7 @@ exports.buildNShareFromAPIKeyShare = buildNShareFromAPIKeyShare;
|
|
|
317
318
|
/**
|
|
318
319
|
* Decrypts encrypted n share
|
|
319
320
|
* @param encryptedNShare - decryptable n share with recipient private gpg key armor and sender public gpg key
|
|
321
|
+
* @param isbs58Encoded
|
|
320
322
|
* @returns N share
|
|
321
323
|
*/
|
|
322
324
|
async function decryptNShare(encryptedNShare, isbs58Encoded = true) {
|
|
@@ -333,7 +335,7 @@ async function decryptNShare(encryptedNShare, isbs58Encoded = true) {
|
|
|
333
335
|
else {
|
|
334
336
|
u = prv.slice(0, 64);
|
|
335
337
|
}
|
|
336
|
-
|
|
338
|
+
return {
|
|
337
339
|
i: encryptedNShare.nShare.i,
|
|
338
340
|
j: encryptedNShare.nShare.j,
|
|
339
341
|
n: encryptedNShare.nShare.n,
|
|
@@ -342,12 +344,11 @@ async function decryptNShare(encryptedNShare, isbs58Encoded = true) {
|
|
|
342
344
|
chaincode: encryptedNShare.nShare.publicShare.slice(66, 130),
|
|
343
345
|
v: encryptedNShare.nShare.vssProof,
|
|
344
346
|
};
|
|
345
|
-
return nShare;
|
|
346
347
|
}
|
|
347
348
|
exports.decryptNShare = decryptNShare;
|
|
348
349
|
/**
|
|
349
|
-
* Gets public key from common
|
|
350
|
-
* @param commonKeyChain - common
|
|
350
|
+
* Gets public key from common keychain
|
|
351
|
+
* @param commonKeyChain - common keychain of ecdsa tss
|
|
351
352
|
* @returns public key
|
|
352
353
|
*/
|
|
353
354
|
function getPublicKey(commonKeyChain) {
|
|
@@ -380,19 +381,24 @@ function validateOptionalValues(shares, start, end, shareName, valueName) {
|
|
|
380
381
|
*/
|
|
381
382
|
function parseKShare(share) {
|
|
382
383
|
const shares = share.share.split(exports.delimeter);
|
|
383
|
-
|
|
384
|
+
// TODO: once p and sigma are mandatory, make the exepcted length 11 + 2 * EcdsaPaillierProof.m
|
|
385
|
+
// and remove the validateOptionalValues check
|
|
386
|
+
validateSharesLength(shares, 11 + 2, 'K');
|
|
384
387
|
const hasProof = validateOptionalValues(shares, 5, 11, 'K', 'proof');
|
|
385
|
-
|
|
386
|
-
|
|
387
|
-
|
|
388
|
+
const hasP = validateOptionalValues(shares, 11, 11 + 1, 'K', 'p');
|
|
389
|
+
const hasSigma = hasP
|
|
390
|
+
? validateOptionalValues(shares, 11 + sdk_lib_mpc_1.EcdsaPaillierProof.m, 11 + 2 * sdk_lib_mpc_1.EcdsaPaillierProof.m, 'K', 'sigma')
|
|
391
|
+
: false;
|
|
392
|
+
const proof = hasProof
|
|
393
|
+
? {
|
|
388
394
|
z: shares[5],
|
|
389
395
|
u: shares[6],
|
|
390
396
|
w: shares[7],
|
|
391
397
|
s: shares[8],
|
|
392
398
|
s1: shares[9],
|
|
393
399
|
s2: shares[10],
|
|
394
|
-
}
|
|
395
|
-
|
|
400
|
+
}
|
|
401
|
+
: undefined;
|
|
396
402
|
return {
|
|
397
403
|
i: getParticipantIndex(share.to),
|
|
398
404
|
j: getParticipantIndex(share.from),
|
|
@@ -402,6 +408,8 @@ function parseKShare(share) {
|
|
|
402
408
|
h1: shares[3],
|
|
403
409
|
h2: shares[4],
|
|
404
410
|
proof,
|
|
411
|
+
p: hasP ? shares.slice(11, 11 + sdk_lib_mpc_1.EcdsaPaillierProof.m) : undefined,
|
|
412
|
+
sigma: hasSigma ? shares.slice(11 + sdk_lib_mpc_1.EcdsaPaillierProof.m, 11 + 2 * sdk_lib_mpc_1.EcdsaPaillierProof.m) : undefined,
|
|
405
413
|
};
|
|
406
414
|
}
|
|
407
415
|
exports.parseKShare = parseKShare;
|
|
@@ -415,7 +423,7 @@ function convertKShare(share) {
|
|
|
415
423
|
return {
|
|
416
424
|
to: getParticipantFromIndex(share.i),
|
|
417
425
|
from: getParticipantFromIndex(share.j),
|
|
418
|
-
share: `${share.k}${exports.delimeter}${share.n}${exports.delimeter}${share.ntilde}${exports.delimeter}${share.h1}${exports.delimeter}${share.h2}${exports.delimeter}${((_a = share.proof) === null || _a === void 0 ? void 0 : _a.z) || ''}${exports.delimeter}${((_b = share.proof) === null || _b === void 0 ? void 0 : _b.u) || ''}${exports.delimeter}${((_c = share.proof) === null || _c === void 0 ? void 0 : _c.w) || ''}${exports.delimeter}${((_d = share.proof) === null || _d === void 0 ? void 0 : _d.s) || ''}${exports.delimeter}${((_e = share.proof) === null || _e === void 0 ? void 0 : _e.s1) || ''}${exports.delimeter}${((_f = share.proof) === null || _f === void 0 ? void 0 : _f.s2) || ''}`,
|
|
426
|
+
share: `${share.k}${exports.delimeter}${share.n}${exports.delimeter}${share.ntilde}${exports.delimeter}${share.h1}${exports.delimeter}${share.h2}${exports.delimeter}${((_a = share.proof) === null || _a === void 0 ? void 0 : _a.z) || ''}${exports.delimeter}${((_b = share.proof) === null || _b === void 0 ? void 0 : _b.u) || ''}${exports.delimeter}${((_c = share.proof) === null || _c === void 0 ? void 0 : _c.w) || ''}${exports.delimeter}${((_d = share.proof) === null || _d === void 0 ? void 0 : _d.s) || ''}${exports.delimeter}${((_e = share.proof) === null || _e === void 0 ? void 0 : _e.s1) || ''}${exports.delimeter}${((_f = share.proof) === null || _f === void 0 ? void 0 : _f.s2) || ''}${exports.delimeter}${(share.p || []).join(exports.delimeter)}${exports.delimeter}${(share.sigma || []).join(exports.delimeter)}`,
|
|
419
427
|
};
|
|
420
428
|
}
|
|
421
429
|
exports.convertKShare = convertKShare;
|
|
@@ -426,24 +434,24 @@ exports.convertKShare = convertKShare;
|
|
|
426
434
|
*/
|
|
427
435
|
function parseAShare(share) {
|
|
428
436
|
const shares = share.share.split(exports.delimeter);
|
|
429
|
-
|
|
437
|
+
// TODO: once sigma is mandatory, make expected length 37 + EcdsaPaillierProof.m
|
|
438
|
+
validateSharesLength(shares, 37 + 1, 'A');
|
|
430
439
|
const hasProof = validateOptionalValues(shares, 7, 13, 'A', 'proof');
|
|
431
440
|
const hasGammaProof = validateOptionalValues(shares, 13, 25, 'A', 'gammaProof');
|
|
432
441
|
const hasWProof = validateOptionalValues(shares, 25, 37, 'A', 'wProof');
|
|
433
|
-
|
|
434
|
-
|
|
435
|
-
|
|
442
|
+
const hasSigma = validateOptionalValues(shares, 37, 37 + sdk_lib_mpc_1.EcdsaPaillierProof.m, 'A', 'sigma');
|
|
443
|
+
const proof = hasProof
|
|
444
|
+
? {
|
|
436
445
|
z: shares[7],
|
|
437
446
|
u: shares[8],
|
|
438
447
|
w: shares[9],
|
|
439
448
|
s: shares[10],
|
|
440
449
|
s1: shares[11],
|
|
441
450
|
s2: shares[12],
|
|
442
|
-
}
|
|
443
|
-
|
|
444
|
-
|
|
445
|
-
|
|
446
|
-
gammaProof = {
|
|
451
|
+
}
|
|
452
|
+
: undefined;
|
|
453
|
+
const gammaProof = hasGammaProof
|
|
454
|
+
? {
|
|
447
455
|
z: shares[13],
|
|
448
456
|
zprm: shares[14],
|
|
449
457
|
t: shares[15],
|
|
@@ -456,11 +464,10 @@ function parseAShare(share) {
|
|
|
456
464
|
t2: shares[22],
|
|
457
465
|
u: shares[23],
|
|
458
466
|
x: shares[24],
|
|
459
|
-
}
|
|
460
|
-
|
|
461
|
-
|
|
462
|
-
|
|
463
|
-
wProof = {
|
|
467
|
+
}
|
|
468
|
+
: undefined;
|
|
469
|
+
const wProof = hasWProof
|
|
470
|
+
? {
|
|
464
471
|
z: shares[25],
|
|
465
472
|
zprm: shares[26],
|
|
466
473
|
t: shares[27],
|
|
@@ -473,8 +480,8 @@ function parseAShare(share) {
|
|
|
473
480
|
t2: shares[34],
|
|
474
481
|
u: shares[35],
|
|
475
482
|
x: shares[36],
|
|
476
|
-
}
|
|
477
|
-
|
|
483
|
+
}
|
|
484
|
+
: undefined;
|
|
478
485
|
return {
|
|
479
486
|
i: getParticipantIndex(share.to),
|
|
480
487
|
j: getParticipantIndex(share.from),
|
|
@@ -488,6 +495,7 @@ function parseAShare(share) {
|
|
|
488
495
|
proof,
|
|
489
496
|
gammaProof,
|
|
490
497
|
wProof,
|
|
498
|
+
sigma: hasSigma ? shares.slice(37) : undefined,
|
|
491
499
|
};
|
|
492
500
|
}
|
|
493
501
|
exports.parseAShare = parseAShare;
|
|
@@ -501,7 +509,7 @@ function convertAShare(share) {
|
|
|
501
509
|
return {
|
|
502
510
|
to: getParticipantFromIndex(share.i),
|
|
503
511
|
from: getParticipantFromIndex(share.j),
|
|
504
|
-
share: `${share.k}${exports.delimeter}${share.alpha}${exports.delimeter}${share.mu}${exports.delimeter}${share.n}${exports.delimeter}${share.ntilde}${exports.delimeter}${share.h1}${exports.delimeter}${share.h2}${exports.delimeter}${((_a = share.proof) === null || _a === void 0 ? void 0 : _a.z) || ''}${exports.delimeter}${((_b = share.proof) === null || _b === void 0 ? void 0 : _b.u) || ''}${exports.delimeter}${((_c = share.proof) === null || _c === void 0 ? void 0 : _c.w) || ''}${exports.delimeter}${((_d = share.proof) === null || _d === void 0 ? void 0 : _d.s) || ''}${exports.delimeter}${((_e = share.proof) === null || _e === void 0 ? void 0 : _e.s1) || ''}${exports.delimeter}${((_f = share.proof) === null || _f === void 0 ? void 0 : _f.s2) || ''}${exports.delimeter}${((_g = share.gammaProof) === null || _g === void 0 ? void 0 : _g.z) || ''}${exports.delimeter}${((_h = share.gammaProof) === null || _h === void 0 ? void 0 : _h.zprm) || ''}${exports.delimeter}${((_j = share.gammaProof) === null || _j === void 0 ? void 0 : _j.t) || ''}${exports.delimeter}${((_k = share.gammaProof) === null || _k === void 0 ? void 0 : _k.v) || ''}${exports.delimeter}${((_l = share.gammaProof) === null || _l === void 0 ? void 0 : _l.w) || ''}${exports.delimeter}${((_m = share.gammaProof) === null || _m === void 0 ? void 0 : _m.s) || ''}${exports.delimeter}${((_o = share.gammaProof) === null || _o === void 0 ? void 0 : _o.s1) || ''}${exports.delimeter}${((_p = share.gammaProof) === null || _p === void 0 ? void 0 : _p.s2) || ''}${exports.delimeter}${((_q = share.gammaProof) === null || _q === void 0 ? void 0 : _q.t1) || ''}${exports.delimeter}${((_r = share.gammaProof) === null || _r === void 0 ? void 0 : _r.t2) || ''}${exports.delimeter}${((_s = share.gammaProof) === null || _s === void 0 ? void 0 : _s.u) || ''}${exports.delimeter}${((_t = share.gammaProof) === null || _t === void 0 ? void 0 : _t.x) || ''}${exports.delimeter}${((_u = share.wProof) === null || _u === void 0 ? void 0 : _u.z) || ''}${exports.delimeter}${((_v = share.wProof) === null || _v === void 0 ? void 0 : _v.zprm) || ''}${exports.delimeter}${((_w = share.wProof) === null || _w === void 0 ? void 0 : _w.t) || ''}${exports.delimeter}${((_x = share.wProof) === null || _x === void 0 ? void 0 : _x.v) || ''}${exports.delimeter}${((_y = share.wProof) === null || _y === void 0 ? void 0 : _y.w) || ''}${exports.delimeter}${((_z = share.wProof) === null || _z === void 0 ? void 0 : _z.s) || ''}${exports.delimeter}${((_0 = share.wProof) === null || _0 === void 0 ? void 0 : _0.s1) || ''}${exports.delimeter}${((_1 = share.wProof) === null || _1 === void 0 ? void 0 : _1.s2) || ''}${exports.delimeter}${((_2 = share.wProof) === null || _2 === void 0 ? void 0 : _2.t1) || ''}${exports.delimeter}${((_3 = share.wProof) === null || _3 === void 0 ? void 0 : _3.t2) || ''}${exports.delimeter}${((_4 = share.wProof) === null || _4 === void 0 ? void 0 : _4.u) || ''}${exports.delimeter}${((_5 = share.wProof) === null || _5 === void 0 ? void 0 : _5.x) || ''}`,
|
|
512
|
+
share: `${share.k}${exports.delimeter}${share.alpha}${exports.delimeter}${share.mu}${exports.delimeter}${share.n}${exports.delimeter}${share.ntilde}${exports.delimeter}${share.h1}${exports.delimeter}${share.h2}${exports.delimeter}${((_a = share.proof) === null || _a === void 0 ? void 0 : _a.z) || ''}${exports.delimeter}${((_b = share.proof) === null || _b === void 0 ? void 0 : _b.u) || ''}${exports.delimeter}${((_c = share.proof) === null || _c === void 0 ? void 0 : _c.w) || ''}${exports.delimeter}${((_d = share.proof) === null || _d === void 0 ? void 0 : _d.s) || ''}${exports.delimeter}${((_e = share.proof) === null || _e === void 0 ? void 0 : _e.s1) || ''}${exports.delimeter}${((_f = share.proof) === null || _f === void 0 ? void 0 : _f.s2) || ''}${exports.delimeter}${((_g = share.gammaProof) === null || _g === void 0 ? void 0 : _g.z) || ''}${exports.delimeter}${((_h = share.gammaProof) === null || _h === void 0 ? void 0 : _h.zprm) || ''}${exports.delimeter}${((_j = share.gammaProof) === null || _j === void 0 ? void 0 : _j.t) || ''}${exports.delimeter}${((_k = share.gammaProof) === null || _k === void 0 ? void 0 : _k.v) || ''}${exports.delimeter}${((_l = share.gammaProof) === null || _l === void 0 ? void 0 : _l.w) || ''}${exports.delimeter}${((_m = share.gammaProof) === null || _m === void 0 ? void 0 : _m.s) || ''}${exports.delimeter}${((_o = share.gammaProof) === null || _o === void 0 ? void 0 : _o.s1) || ''}${exports.delimeter}${((_p = share.gammaProof) === null || _p === void 0 ? void 0 : _p.s2) || ''}${exports.delimeter}${((_q = share.gammaProof) === null || _q === void 0 ? void 0 : _q.t1) || ''}${exports.delimeter}${((_r = share.gammaProof) === null || _r === void 0 ? void 0 : _r.t2) || ''}${exports.delimeter}${((_s = share.gammaProof) === null || _s === void 0 ? void 0 : _s.u) || ''}${exports.delimeter}${((_t = share.gammaProof) === null || _t === void 0 ? void 0 : _t.x) || ''}${exports.delimeter}${((_u = share.wProof) === null || _u === void 0 ? void 0 : _u.z) || ''}${exports.delimeter}${((_v = share.wProof) === null || _v === void 0 ? void 0 : _v.zprm) || ''}${exports.delimeter}${((_w = share.wProof) === null || _w === void 0 ? void 0 : _w.t) || ''}${exports.delimeter}${((_x = share.wProof) === null || _x === void 0 ? void 0 : _x.v) || ''}${exports.delimeter}${((_y = share.wProof) === null || _y === void 0 ? void 0 : _y.w) || ''}${exports.delimeter}${((_z = share.wProof) === null || _z === void 0 ? void 0 : _z.s) || ''}${exports.delimeter}${((_0 = share.wProof) === null || _0 === void 0 ? void 0 : _0.s1) || ''}${exports.delimeter}${((_1 = share.wProof) === null || _1 === void 0 ? void 0 : _1.s2) || ''}${exports.delimeter}${((_2 = share.wProof) === null || _2 === void 0 ? void 0 : _2.t1) || ''}${exports.delimeter}${((_3 = share.wProof) === null || _3 === void 0 ? void 0 : _3.t2) || ''}${exports.delimeter}${((_4 = share.wProof) === null || _4 === void 0 ? void 0 : _4.u) || ''}${exports.delimeter}${((_5 = share.wProof) === null || _5 === void 0 ? void 0 : _5.x) || ''}${exports.delimeter}${(share.sigma || []).join(exports.delimeter)}`,
|
|
505
513
|
};
|
|
506
514
|
}
|
|
507
515
|
exports.convertAShare = convertAShare;
|
|
@@ -673,6 +681,8 @@ exports.parseCombinedSignature = parseCombinedSignature;
|
|
|
673
681
|
/**
|
|
674
682
|
* convert signature share to signature share record
|
|
675
683
|
* @param share - Signature share
|
|
684
|
+
* @param senderIndex
|
|
685
|
+
* @param recipientIndex
|
|
676
686
|
* @returns signature share record
|
|
677
687
|
*/
|
|
678
688
|
function convertSignatureShare(share, senderIndex, recipientIndex) {
|
|
@@ -692,7 +702,7 @@ function convertBShare(share) {
|
|
|
692
702
|
return {
|
|
693
703
|
to: utils_1.SignatureShareType.BITGO,
|
|
694
704
|
from: getParticipantFromIndex(share.i),
|
|
695
|
-
share: `${share.beta}${exports.delimeter}${share.gamma}${exports.delimeter}${share.k}${exports.delimeter}${share.nu}${exports.delimeter}${share.w}${exports.delimeter}${share.y}${exports.delimeter}${share.l}${exports.delimeter}${share.m}${exports.delimeter}${share.n}${exports.delimeter}${share.ntilde}${exports.delimeter}${share.h1}${exports.delimeter}${share.h2}${exports.delimeter}${share.ck}`,
|
|
705
|
+
share: `${share.beta}${exports.delimeter}${share.gamma}${exports.delimeter}${share.k}${exports.delimeter}${share.nu}${exports.delimeter}${share.w}${exports.delimeter}${share.y}${exports.delimeter}${share.l}${exports.delimeter}${share.m}${exports.delimeter}${share.n}${exports.delimeter}${share.ntilde}${exports.delimeter}${share.h1}${exports.delimeter}${share.h2}${exports.delimeter}${share.ck}${exports.delimeter}${(share.p || []).join(exports.delimeter)}`,
|
|
696
706
|
};
|
|
697
707
|
}
|
|
698
708
|
exports.convertBShare = convertBShare;
|
|
@@ -703,7 +713,9 @@ exports.convertBShare = convertBShare;
|
|
|
703
713
|
*/
|
|
704
714
|
function parseBShare(share) {
|
|
705
715
|
const shares = share.share.split(exports.delimeter);
|
|
706
|
-
|
|
716
|
+
// TODO: once p is mandatory, make expectedLength 13 + EcdsaPaillierProof.m
|
|
717
|
+
validateSharesLength(shares, 13 + 1, 'B');
|
|
718
|
+
const hasP = validateOptionalValues(shares, 13, 13 + sdk_lib_mpc_1.EcdsaPaillierProof.m, 'K', 'p');
|
|
707
719
|
return {
|
|
708
720
|
i: getParticipantIndex(share.to),
|
|
709
721
|
beta: shares[0],
|
|
@@ -719,6 +731,7 @@ function parseBShare(share) {
|
|
|
719
731
|
h1: shares[10],
|
|
720
732
|
h2: shares[11],
|
|
721
733
|
ck: shares[12],
|
|
734
|
+
p: hasP ? shares.slice(13, 13 + sdk_lib_mpc_1.EcdsaPaillierProof.m) : undefined,
|
|
722
735
|
};
|
|
723
736
|
}
|
|
724
737
|
exports.parseBShare = parseBShare;
|
|
@@ -804,4 +817,4 @@ async function verifyWalletSignature(params) {
|
|
|
804
817
|
Buffer.from(rawNotations[publicUValueRawNotationIndex].value).toString(), 'bitgo share mismatch');
|
|
805
818
|
}
|
|
806
819
|
exports.verifyWalletSignature = verifyWalletSignature;
|
|
807
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWNkc2EuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvYml0Z28vdHNzL2VjZHNhL2VjZHNhLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSx3REFBdUQ7QUFDdkQsbUNBd0JpQjtBQUNqQix1Q0FBc0c7QUFDdEcsb0NBQTRDO0FBRzVDLHNDQUEwRjtBQUMxRixvREFBc0M7QUFDdEMsb0RBQTRCO0FBQzVCLDhDQUE2QztBQUM3Qyw2Q0FBK0I7QUFDL0IsZ0RBQXdCO0FBSXhCLE1BQU0sR0FBRyxHQUFHLElBQUksV0FBSyxFQUFFLENBQUM7QUFFeEI7Ozs7Ozs7O0dBUUc7QUFDSSxLQUFLLFVBQVUsaUJBQWlCLENBQ3JDLFFBQWtCLEVBQ2xCLGdCQUFxQyxFQUNyQyxjQUFzQjtJQUV0QixNQUFNLE9BQU8sR0FBYSxFQUFFLENBQUM7SUFFN0IsSUFBSSxXQUErQixDQUFDO0lBQ3BDLElBQUksVUFBOEIsQ0FBQztJQUNuQyxJQUFJLFlBQWdDLENBQUM7SUFFckMsS0FBSyxNQUFNLGVBQWUsSUFBSSxnQkFBZ0IsRUFBRTtRQUM5QyxNQUFNLE1BQU0sR0FBRyxNQUFNLGFBQWEsQ0FBQyxlQUFlLEVBQUUsZUFBZSxDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBRW5GLFFBQVEsZUFBZSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUU7WUFDaEMsS0FBSyxDQUFDO2dCQUNKLFVBQVUsR0FBRyxNQUFNLENBQUM7Z0JBQ3BCLE1BQU07WUFDUixLQUFLLENBQUM7Z0JBQ0osWUFBWSxHQUFHLE1BQU0sQ0FBQztnQkFDdEIsTUFBTTtZQUNSLEtBQUssQ0FBQztnQkFDSixXQUFXLEdBQUcsTUFBTSxDQUFDO2dCQUNyQixNQUFNO1lBQ1I7Z0JBQ0UsTUFBTSxJQUFJLEtBQUssQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDO1NBQzNDO1FBRUQsT0FBTyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FB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QUFFLE1BQU0sQ0FBQyxFQUFFLENBQUM7WUFDYixDQUFDLEVBQUUsTUFBTSxDQUFDLEVBQUUsQ0FBQztZQUNiLENBQUMsRUFBRSxNQUFNLENBQUMsRUFBRSxDQUFDO1lBQ2IsRUFBRSxFQUFFLE1BQU0sQ0FBQyxFQUFFLENBQUM7WUFDZCxFQUFFLEVBQUUsTUFBTSxDQUFDLEVBQUUsQ0FBQztZQUNkLEVBQUUsRUFBRSxNQUFNLENBQUMsRUFBRSxDQUFDO1lBQ2QsRUFBRSxFQUFFLE1BQU0sQ0FBQyxFQUFFLENBQUM7WUFDZCxDQUFDLEVBQUUsTUFBTSxDQUFDLEVBQUUsQ0FBQztZQUNiLENBQUMsRUFBRSxNQUFNLENBQUMsRUFBRSxDQUFDO1NBQ2QsQ0FBQztLQUNIO0lBRUQsSUFBSSxNQUFNLENBQUM7SUFDWCxJQUFJLFNBQVMsRUFBRTtRQUNiLE1BQU0sR0FBRztZQUNQLENBQUMsRUFBRSxNQUFNLENBQUMsRUFBRSxDQUFDO1lBQ2IsSUFBSSxFQUFFLE1BQU0sQ0FBQyxFQUFFLENBQUM7WUFDaEIsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxFQUFFLENBQUM7WUFDYixDQUFDLEVBQUUsTUFBTSxDQUFDLEVBQUUsQ0FBQztZQUNiLENBQUMsRUFBRSxNQUFNLENBQUMsRUFBRSxDQUFDO1lBQ2IsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxFQUFFLENBQUM7WUFDYixFQUFFLEVBQUUsTUFBTSxDQUFDLEVBQUUsQ0FBQztZQUNkLEVBQUUsRUFBRSxNQUFNLENBQUMsRUFBRSxDQUFDO1lBQ2QsRUFBRSxFQUFFLE1BQU0sQ0FBQyxFQUFFLENBQUM7WUFDZCxFQUFFLEVBQUUsTUFBTSxDQUFDLEVBQUUsQ0FBQztZQUNkLENBQUMsRUFBRSxNQUFNLENBQUMsRUFBRSxDQUFDO1lBQ2IsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxFQUFFLENBQUM7U0FDZCxDQUFDO0tBQ0g7SUFFRCxPQUFPO1FBQ0wsQ0FBQyxFQUFFLG1CQUFtQixDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7UUFDaEMsQ0FBQyxFQUFFLG1CQUFtQixDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUM7UUFDbEMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUM7UUFDWixLQUFLLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQztRQUNoQixFQUFFLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQztRQUNiLENBQUMsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDO1FBQ1osTUFBTSxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUM7UUFDakIsRUFBRSxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUM7UUFDYixFQUFFLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQztRQUNiLEtBQUs7UUFDTCxVQUFVO1FBQ1YsTUFBTTtLQUNQLENBQUM7QUFDSixDQUFDO0FBckVELGtDQXFFQztBQUVEOzs7O0dBSUc7QUFDSCxTQUFnQixhQUFhLENBQUMsS0FBYTs7SUFDekMsT0FBTztRQUNMLEVBQUUsRUFBRSx1QkFBdUIsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO1FBQ3BDLElBQUksRUFBRSx1QkFBdUIsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO1FBQ3RDLEtBQUssRUFBRSxHQUFHLEtBQUssQ0FBQyxDQUFDLEdBQUcsaUJBQVMsR0FBRyxLQUFLLENBQUMsS0FBSyxHQUFHLGlCQUFTLEdBQUcsS0FBSyxDQUFDLEVBQUUsR0FBRyxpQkFBUyxHQUFHLEtBQUssQ0FBQyxDQUFDLEdBQUcsaUJBQVMsR0FDbEcsS0FBSyxDQUFDLE1BQ1IsR0FBRyxpQkFBUyxHQUFHLEtBQUssQ0FBQyxFQUFFLEdBQUcsaUJBQVMsR0FBRyxLQUFLLENBQUMsRUFBRSxHQUFHLGlCQUFTLEdBQUcsQ0FBQSxNQUFBLEtBQUssQ0FBQyxLQUFLLDBDQUFFLENBQUMsS0FBSSxFQUFFLEdBQUcsaUJBQVMsR0FDM0YsQ0FBQSxNQUFBLEtBQUssQ0FBQyxLQUFLLDBDQUFFLENBQUMsS0FBSSxFQUNwQixHQUFHLGlCQUFTLEdBQUcsQ0FBQSxNQUFBLEtBQUssQ0FBQyxLQUFLLDBDQUFFLENBQUMsS0FBSSxFQUFFLEdBQUcsaUJBQVMsR0FBRyxDQUFBLE1BQUEsS0FBSyxDQUFDLEtBQUssMENBQUUsQ0FBQyxLQUFJLEVBQUUsR0FBRyxpQkFBUyxHQUNoRixDQUFBLE1BQUEsS0FBSyxDQUFDLEtBQUssMENBQUUsRUFBRSxLQUFJLEVBQ3JCLEdBQUcsaUJBQVMsR0FBRyxDQUFBLE1BQUEsS0FBSyxDQUFDLEtBQUssMENBQUUsRUFBRSxLQUFJLEVBQUUsR0FBRyxpQkFBUyxHQUFHLENBQUEsTUFBQSxLQUFLLENBQUMsVUFBVSwwQ0FBRSxDQUFDLEtBQUksRUFBRSxHQUFHLGlCQUFTLEdBQ3RGLENBQUEsTUFBQSxLQUFLLENBQUMsVUFBVSwwQ0FBRSxJQUFJLEtBQUksRUFDNUIsR0FBRyxpQkFBUyxHQUFHLENBQUEsTUFBQSxLQUFLLENBQUMsVUFBVSwwQ0FBRSxDQUFDLEtBQUksRUFBRSxHQUFHLGlCQUFTLEdBQUcsQ0FBQSxNQUFBLEtBQUssQ0FBQyxVQUFVLDBDQUFFLENBQUMsS0FBSSxFQUFFLEdBQUcsaUJBQVMsR0FDMUYsQ0FBQSxNQUFBLEtBQUssQ0FBQyxVQUFVLDBDQUFFLENBQUMsS0FBSSxFQUN6QixHQUFHLGlCQUFTLEdBQUcsQ0FBQSxNQUFBLEtBQUssQ0FBQyxVQUFVLDBDQUFFLENBQUMsS0FBSSxFQUFFLEdBQUcsaUJBQVMsR0FBRyxDQUFBLE1BQUEsS0FBSyxDQUFDLFVBQVUsMENBQUUsRUFBRSxLQUFJLEVBQUUsR0FBRyxpQkFBUyxHQUMzRixDQUFBLE1BQUEsS0FBSyxDQUFDLFVBQVUsMENBQUUsRUFBRSxLQUFJLEVBQzFCLEdBQUcsaUJBQVMsR0FBRyxDQUFBLE1BQUEsS0FBSyxDQUFDLFVBQVUsMENBQUUsRUFBRSxLQUFJLEVBQUUsR0FBRyxpQkFBUyxHQUFHLENBQUEsTUFBQSxLQUFLLENBQUMsVUFBVSwwQ0FBRSxFQUFFLEtBQUksRUFBRSxHQUFHLGlCQUFTLEdBQzVGLENBQUEsTUFBQSxLQUFLLENBQUMsVUFBVSwwQ0FBRSxDQUFDLEtBQUksRUFDekIsR0FBRyxpQkFBUyxHQUFHLENBQUEsTUFBQSxLQUFLLENBQUMsVUFB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QixHQUFHLGlCQUFTLEdBQUcsQ0FBQSxNQUFBLEtBQUssQ0FBQyxVQUFVLDBDQUFFLENBQUMsS0FBSSxFQUFFLEdBQUcsaUJBQVMsR0FBRyxDQUFBLE1BQUEsS0FBSyxDQUFDLFVBQVUsMENBQUUsQ0FBQyxLQUFJLEVBQUUsR0FBRyxpQkFBUyxHQUMxRixDQUFBLE1BQUEsS0FBSyxDQUFDLFVBQVUsMENBQUUsQ0FBQyxLQUFJLEVBQ3pCLEdBQUcsaUJBQVMsR0FBRyxDQUFBLE1BQUEsS0FBSyxDQUFDLFVBQVUsMENBQUUsQ0FBQyxLQUFJLEVBQUUsR0FBRyxpQkFBUyxHQUFHLENBQUEsTUFBQSxLQUFLLENBQUMsVUFBVSwwQ0FBRSxFQUFFLEtBQUksRUFBRSxHQUFHLGlCQUFTLEdBQzNGLENBQUEsTUFBQSxLQUFLLENBQUMsVUFBVSwwQ0FBRSxFQUFFLEtBQUksRUFDMUIsR0FBRyxpQkFBUyxHQUFHLENBQUEsTUFBQSxLQUFLLENBQUMsVUFBVSwwQ0FBRSxFQUFFLEtBQUksRUFBRSxHQUFHLGlCQUFTLEdBQUcsQ0FBQSxNQUFBLEtBQUssQ0FBQyxVQUFVLDBDQUFFLEVBQUUsS0FBSSxFQUFFLEdBQUcsaUJBQVMsR0FDNUYsQ0FBQSxNQUFBLEtBQUssQ0FBQyxVQUFVLDBDQUFFLENBQUMsS0FBSSxFQUN6QixHQUFHLGlCQUFTLEdBQUcsQ0FBQSxNQUFBLEtBQUssQ0FBQyxVQUFVLDBDQUFFLENBQUMsS0FBSSxFQUFFLEdBQUcsaUJBQVMsR0FBRyxDQUFBLE1BQUEsS0FBSyxDQUFDLE1BQU0sMENBQUUsQ0FBQyxLQUFJLEVBQUUsR0FBRyxpQkFBUyxHQUN0RixDQUFBLE1BQUEsS0FBSyxDQUFDLE1BQU0sMENBQUUsSUFBSSxLQUFJLEVBQ3hCLEdBQUcsaUJBQVMsR0FBRyxDQUFBLE1BQUEsS0FBSyxDQUFDLE1BQU0sMENBQUUsQ0FBQyxLQUFJLEVBQUUsR0FBRyxpQkFBUyxHQUFHLENBQUEsTUFBQSxLQUFLLENBQUMsTUFBTSwwQ0FBRSxDQUFDLEtBQUksRUFBRSxHQUFHLGlCQUFTLEdBQ2xGLENBQUEs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QyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsR0FBRyxNQUFNLENBQUMsY0FBYyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7UUFDekUsTUFBTSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsNEJBQTRCLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxRQUFRLEVBQUUsRUFDMUUsc0JBQXNCLENBQ3ZCLENBQUM7QUFDSixDQUFDO0FBckJELHNEQXFCQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEVjZHNhIH0gZnJvbSAnLi8uLi8uLi8uLi9hY2NvdW50LWxpYi9tcGMvdHNzJztcbmltcG9ydCB7XG4gIERlY3J5cHRhYmxlTlNoYXJlLFxuICBDb21iaW5lZEtleSxcbiAgU2lnbmluZ01hdGVyaWFsLFxuICBFbmNyeXB0ZWROU2hhcmUsXG4gIEFTaGFyZSxcbiAgQ3JlYXRlVXNlckdhbW1hQW5kTXVTaGFyZVJULFxuICBDcmVhdGVVc2VyT21pY3JvbkFuZERlbHRhU2hhcmVSVCxcbiAgRFNoYXJlLFxuICBHU2hhcmUsXG4gIEtleVNoYXJlLFxuICBOU2hhcmUsXG4gIE9TaGFyZSxcbiAgU2VuZFNoYXJlVHlwZSxcbiAgU2lnbmF0dXJlU2hhcmUsXG4gIFNpZ25TaGFyZSxcbiAgWFNoYXJlLFxuICBXU2hhcmUsXG4gIFhTaGFyZVdpdGhOdGlsZGUsXG4gIFlTaGFyZVdpdGhOdGlsZGUsXG4gIFNlbmRTaGFyZVRvQml0Z29SVCxcbiAgUmVjZWl2ZWRTaGFyZVR5cGUsXG4gIEJTaGFyZSxcbiAgU2lnbmF0dXJlLFxufSBmcm9tICcuL3R5cGVzJztcbmltcG9ydCB7IFNpZ25hdHVyZVNoYXJlUmVjb3JkLCBTaWduYXR1cmVTaGFyZVR5cGUsIFJlcXVlc3RUeXBlLCBjcmVhdGVTaGFyZVByb29mIH0gZnJvbSAnLi4vLi4vdXRpbHMnO1xuaW1wb3J0IHsgU2hhcmVLZXlQb3NpdGlvbiB9IGZyb20gJy4uL3R5cGVzJztcbmltcG9ydCB7IEJpdEdvQmFzZSB9IGZyb20gJy4uLy4uL2JpdGdvQmFzZSc7XG5pbXBvcnQgeyBLU2hhcmUsIE1VU2hhcmUsIFNTaGFyZSB9IGZyb20gJy4uLy4uLy4uL2FjY291bnQtbGliL21wYy90c3MvZWNkc2EvdHlwZXMnO1xuaW1wb3J0IHsgY29tbW9uVmVyaWZ5V2FsbGV0U2lnbmF0dXJlLCBnZXRUeFJlcXVlc3QsIHNlbmRTaWduYXR1cmVTaGFyZSB9IGZyb20gJy4uL2NvbW1vbic7XG5pbXBvcnQgY3JlYXRlS2VjY2FrSGFzaCBmcm9tICdrZWNjYWsnO1xuaW1wb3J0IGFzc2VydCBmcm9tICdhc3NlcnQnO1xuaW1wb3J0IHsgYmlwMzIsIGVjYyB9IGZyb20gJ0BiaXRnby91dHhvLWxpYic7XG5pbXBvcnQgKiBhcyBwZ3AgZnJvbSAnb3BlbnBncCc7XG5pbXBvcnQgYnM1OCBmcm9tICdiczU4JztcbmltcG9ydCB7IEFwaUtleVNoYXJlIH0gZnJvbSAnLi4vLi4va2V5Y2hhaW4nO1xuaW1wb3J0IHsgSGFzaCB9IGZyb20gJ2NyeXB0byc7XG5cbmNvbnN0IE1QQyA9IG5ldyBFY2RzYSgpO1xuXG4vKipcbiAqIENvbWJpbmVzIE5TaGFyZXMgdG8gY29tYmluZSB0aGUgZmluYWwgVFNTIGtleVxuICogVGhpcyBjYW4gb25seSBiZSB1c2VkIHRvIGNyZWF0ZSB0aGUgVXNlciBvciBCYWNrdXAga2V5IHNpbmNlIGl0IHJlcXVpcmVzIHRoZSBjb21tb24ga2V5Y2hhaW4gZnJvbSBCaXRHbyBmaXJzdFxuICpcbiAqIEBwYXJhbSBrZXlTaGFyZSAtIFRTUyBrZXkgc2hhcmVcbiAqIEBwYXJhbSBlbmNyeXB0ZWROU2hhcmVzIC0gZW5jcnlwdGVkIE5TaGFyZXMgd2l0aCBpbmZvcm1hdGlvbiBvbiBob3cgdG8gZGVjcnlwdFxuICogQHBhcmFtIGNvbW1vbktleWNoYWluIC0gZXhwZWN0ZWQgY29tbW9uIGtleWNoYWluIG9mIHRoZSBjb21iaW5lZCBrZXlcbiAqIEByZXR1cm5zIHtDb21iaW5lZEtleX0gY29tYmluZWQgVFNTIGtleVxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gY3JlYXRlQ29tYmluZWRLZXkoXG4gIGtleVNoYXJlOiBLZXlTaGFyZSxcbiAgZW5jcnlwdGVkTlNoYXJlczogRGVjcnlwdGFibGVOU2hhcmVbXSxcbiAgY29tbW9uS2V5Y2hhaW46IHN0cmluZ1xuKTogUHJvbWlzZTxDb21iaW5lZEtleT4ge1xuICBjb25zdCBuU2hhcmVzOiBOU2hhcmVbXSA9IFtdO1xuXG4gIGxldCBiaXRnb05TaGFyZTogTlNoYXJlIHwgdW5kZWZpbmVkO1xuICBsZXQgdXNlck5TaGFyZTogTlNoYXJlIHwgdW5kZWZpbmVkO1xuICBsZXQgYmFja3VwTlNoYXJlOiBOU2hhcmUgfCB1bmRlZmluZWQ7XG5cbiAgZm9yIChjb25zdCBlbmNyeXB0ZWROU2hhcmUgb2YgZW5jcnlwdGVkTlNoYXJlcykge1xuICAgIGNvbnN0IG5TaGFyZSA9IGF3YWl0IGRlY3J5cHROU2hhcmUoZW5jcnlwdGVkTlNoYXJlLCBlbmNyeXB0ZWROU2hhcmUuaXNiczU4RW5jb2RlZCk7XG5cbiAgICBzd2l0Y2ggKGVuY3J5cHRlZE5TaGFyZS5uU2hhcmUuaikge1xuICAgICAgY2FzZSAxOlxuICAgICAgICB1c2VyTlNoYXJlID0gblNoYXJlO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgMjpcbiAgICAgICAgYmFja3VwTlNoYXJlID0gblNoYXJlO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgMzpcbiAgICAgICAgYml0Z29OU2hhcmUgPSBuU2hhcmU7XG4gICAgICAgIGJyZWFrO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIE5TaGFyZSBpbmRleCcpO1xuICAgIH1cblxuICAgIG5TaGFyZXMucHVzaChuU2hhcmUpO1xuICB9XG5cbiAgaWYgKCFiaXRnb05TaGFyZSkge1xuICAgIHRocm93IG5ldyBFcnJvcignTWlzc2luZyBCaXRHbyBOIFNoYXJlJyk7XG4gIH1cblxuICBjb25zdCBjb21iaW5lZEtleSA9IE1QQy5rZXlDb21iaW5lKGtleVNoYXJlLnBTaGFyZSwgblNoYXJlcyk7XG4gIGlmIChjb21iaW5lZEtleS54U2hhcmUueSArIGNvbWJpbmVkS2V5LnhTaGFyZS5jaGFpbmNvZGUgIT09IGNvbW1vbktleWNoYWluKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdDb21tb24ga2V5Y2hhaW5zIGRvIG5vdCBtYXRjaCcpO1xuICB9XG5cbiAgY29uc3Qgc2lnbmluZ01hdGVyaWFsOiBTaWduaW5nTWF0ZXJpYWwgPSB7XG4gICAgcFNoYXJlOiBrZXlTaGFyZS5wU2hhcmUsXG4gICAgYml0Z29OU2hhcmUsXG4gICAgYmFja3VwTlNoYXJlLFxuICAgIHVzZXJOU2hhcmUsXG4gIH07XG5cbiAgcmV0dXJuIHtcbiAgICBzaWduaW5nTWF0ZXJpYWwsXG4gICAgY29tbW9uS2V5Y2hhaW4sXG4gIH07XG59XG5cbi8qKlxuICogQ3JlYXRlcyB0aGUgU2lnblNoYXJlIHdpdGggVXNlciBYU2hhcmUgYW5kIFlTaGFyZSBDb3JyZXNwb25kaW5nIHRvIEJpdEdvXG4gKiBAcGFyYW0ge1hTaGFyZX0geFNoYXJlIFVzZXIgc2VjcmV0IHhTaGFyZVxuICogQHBhcmFtIHtZU2hhcmV9IHlTaGFyZSBZU2hhcmUgZnJvbSBCaXRnb1xuICogQHJldHVybnMge1Byb21pc2U8U2lnblNoYXJlPn1cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGNyZWF0ZVVzZXJTaWduU2hhcmUoXG4gIHhTaGFyZTogWFNoYXJlIHwgWFNoYXJlV2l0aE50aWxkZSxcbiAgeVNoYXJlOiBZU2hhcmVXaXRoTnRpbGRlXG4pOiBQcm9taXNlPFNpZ25TaGFyZT4ge1xuICBpZiAoeFNoYXJlLmkgIT09IFNoYXJlS2V5UG9zaXRpb24uVVNFUikge1xuICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBYU2hhcmUsIFhTaGFyZSBkb2Vzbid0IGJlbG9uZyB0byB0aGUgVXNlcmApO1xuICB9XG5cbiAgaWYgKHlTaGFyZS5pICE9PSBTaGFyZUtleVBvc2l0aW9uLlVTRVIgfHwgeVNoYXJlLmogIT09IFNoYXJlS2V5UG9zaXRpb24uQklUR08pIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgWVNoYXJlIHByb3ZpZGVkIGZvciBzaWduJyk7XG4gIH1cbiAgcmV0dXJuIGF3YWl0IE1QQy5zaWduU2hhcmUoeFNoYXJlLCB5U2hhcmUpO1xufVxuXG4vKipcbiAqIENyZWF0ZXMgdGhlIEdhbW1hIFNoYXJlIGFuZCBNdVNoYXJlIHdpdGggVXNlciBXU2hhcmUgYW5kIEFTaGFyZSBGcm9tIEJpdEdvXG4gKiBAcGFyYW0ge1dTaGFyZX0gd1NoYXJlIFVzZXIgV1NoYXJlXG4gKiBAcGFyYW0ge0FTaGFyZX0gYVNoYXJlIEFTaGFyZSBmcm9tIEJpdGdvXG4gKiBAcmV0dXJucyB7UHJvbWlzZTxDcmVhdGVVc2VyR2FtbWFBbmRNdVNoYXJlUlQ+fVxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gY3JlYXRlVXNlckdhbW1hQW5kTXVTaGFyZSh3U2hhcmU6IFdTaGFyZSwgYVNoYXJlOiBBU2hhcmUpOiBQcm9taXNlPENyZWF0ZVVzZXJHYW1tYUFuZE11U2hhcmVSVD4ge1xuICBpZiAod1NoYXJlLmkgIT09IFNoYXJlS2V5UG9zaXRpb24uVVNFUikge1xuICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBXU2hhcmUsIGRvZXNuJ3QgYmVsb25nIHRvIHRoZSBVc2VyYCk7XG4gIH1cbiAgaWYgKGFTaGFyZS5pICE9PSBTaGFyZUtleVBvc2l0aW9uLlVTRVIgfHwgYVNoYXJlLmogIT09IFNoYXJlS2V5UG9zaXRpb24uQklUR08pIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgQVNoYXJlLCBpcyBub3QgZnJvbSBCaXRnbyB0byBVc2VyJyk7XG4gIH1cblxuICByZXR1cm4gTVBDLnNpZ25Db252ZXJ0KHsgd1NoYXJlLCBhU2hhcmUgfSk7XG59XG5cbi8qKlxuICogQ3JlYXRlcyB0aGUgT21pY3JvbiBTaGFyZSBhbmQgRGVsdGEgc2hhcmUgd2l0aCB1c2VyIEdTaGFyZVxuICogQHBhcmFtIHtHU2hhcmV9IGdTaGFyZSBVc2VyIEdTaGFyZVxuICogQHJldHVybnMge1Byb21pc2U8Q3JlYXRlVXNlck9taWNyb25BbmREZWx0YVNoYXJlUlQ+fVxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gY3JlYXRlVXNlck9taWNyb25BbmREZWx0YVNoYXJlKGdTaGFyZTogR1NoYXJlKTogUHJvbWlzZTxDcmVhdGVVc2VyT21pY3JvbkFuZERlbHRhU2hhcmVSVD4ge1xuICBpZiAoZ1NoYXJlLmkgIT09IFNoYXJlS2V5UG9zaXRpb24uVVNFUikge1xuICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBHU2hhcmUsIGRvZXNuJ3QgYmVsb25nIHRvIHRoZSBVc2VyYCk7XG4gIH1cbiAgcmV0dXJuIE1QQy5zaWduQ29tYmluZSh7XG4gICAgZ1NoYXJlOiBnU2hhcmUsXG4gICAgc2lnbkluZGV4OiB7XG4gICAgICBpOiBTaGFyZUtleVBvc2l0aW9uLkJJVEdPLFxuICAgICAgajogZ1NoYXJlLmksXG4gICAgfSxcbiAgfSk7XG59XG5cbi8qKlxuICogQ3JlYXRlcyB0aGUgU2lnbmF0dXJlIFNoYXJlIHdpdGggVXNlciBPU2hhcmUgYW5kIERTaGFyZSBGcm9tIEJpdEdvXG4gKiBAcGFyYW0ge09TaGFyZX0gb1NoYXJlIFVzZXIgT1NoYXJlXG4gKiBAcGFyYW0ge0RTaGFyZX0gZFNoYXJlIERTaGFyZSBmcm9tIGJpdGdvXG4gKiBAcGFyYW0ge0J1ZmZlcn0gbWVzc2FnZSBtZXNzYWdlIHRvIHBlcmZvcm0gc2lnblxuICogQHJldHVybnMge1Byb21pc2U8Y3JlYXRlVXNlclNpZ25TaGFyZVJUPn1cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGNyZWF0ZVVzZXJTaWduYXR1cmVTaGFyZShcbiAgb1NoYXJlOiBPU2hhcmUsXG4gIGRTaGFyZTogRFNoYXJlLFxuICBtZXNzYWdlOiBCdWZmZXIsXG4gIGhhc2g6IEhhc2ggPSBjcmVhdGVLZWNjYWtIYXNoKCdrZWNjYWsyNTYnKVxuKTogUHJvbWlzZTxTaWduYXR1cmVTaGFyZT4ge1xuICBpZiAob1NoYXJlLmkgIT09IFNoYXJlS2V5UG9zaXRpb24uVVNFUikge1xuICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBPU2hhcmUsIGRvZXNuJ3QgYmVsb25nIHRvIHRoZSBVc2VyYCk7XG4gIH1cblxuICBpZiAoZFNoYXJlLmkgIT09IFNoYXJlS2V5UG9zaXRpb24uVVNFUiB8fCBkU2hhcmUuaiAhPT0gU2hhcmVLZXlQb3NpdGlvbi5CSVRHTykge1xuICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBEU2hhcmUsIGRvZXNuJ3Qgc2VlbSB0byBiZSBmcm9tIEJpdEdvYCk7XG4gIH1cbiAgcmV0dXJuIE1QQy5zaWduKG1lc3NhZ2UsIG9TaGFyZSwgZFNoYXJlLCBoYXNoKTtcbn1cblxuZXhwb3J0IHR5cGUgTXVEU2hhcmUgPSB7IG11U2hhcmU6IE1VU2hhcmU7IGRTaGFyZTogRFNoYXJlOyBpOiBTaGFyZUtleVBvc2l0aW9uIH07XG5cbi8qKlxuICogU2VuZHMgU2hhcmUgVG8gQml0Z29cbiAqIEBwYXJhbSB7Qml0R29CYXNlfSBiaXRnbyAtIHRoZSBiaXRnbyBpbnN0YW5jZVxuICogQHBhcmFtIHtTdHJpbmd9IHdhbGxldElkIC0gdGhlIHdhbGxldCBpZCAgKlxuICogQHBhcmFtIHtTdHJpbmd9IHR4UmVxdWVzdElkIC0gdGhlIHR4UmVxdWVzdCBJZFxuICogQHBhcmFtIHJlcXVlc3RUeXBlIC0gdGhlIHR5cGUgb2YgcmVxdWVzdCBiZWluZyBzdWJtaXR0ZWQgKGVpdGhlciB0eCBvciBtZXNzYWdlIGZvciBzaWduaW5nKVxuICogQHBhcmFtIHNoYXJlVHlwZVxuICogQHBhcmFtIHNoYXJlXG4gKiBAcGFyYW0gc2lnbmVyU2hhcmVcbiAqIEBwYXJhbSB2c3NQcm9vZiAtIHRoZSB2IHZhbHVlIG9mIHRoZSBzaGFyZVxuICogQHBhcmFtIHByaXZhdGVTaGFyZVByb29mIC0gdGhlIHVTaWcgb2YgdGhlIHNoYXJlXG4gKiBAcGFyYW0gcHVibGljU2hhcmUgLSB0aGUgeSB2YWx1ZSBvZiB0aGUgc2hhcmVcbiAqIEBwYXJhbSB1c2VyUHVibGljR3BnS2V5IC0gdGhlIHB1YmxpYyBrZXkgb2YgdGhlIGdwZyBrZXkgdXNlZCBmb3IgY3JlYXRpbmcgdGhlIHByaXZhdGVTaGFyZVByb29mXG4gKiBAcmV0dXJucyB7UHJvbWlzZTxTaWduYXR1cmVTaGFyZVJlY29yZD59IC0gYSBTaWduYXR1cmUgU2hhcmVcbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHNlbmRTaGFyZVRvQml0Z28oXG4gIGJpdGdvOiBCaXRHb0Jhc2UsXG4gIHdhbGxldElkOiBzdHJpbmcsXG4gIHR4UmVxdWVzdElkOiBzdHJpbmcsXG4gIHJlcXVlc3RUeXBlOiBSZXF1ZXN0VHlwZSxcbiAgc2hhcmVUeXBlOiBTZW5kU2hhcmVUeXBlLFxuICBzaGFyZTogU1NoYXJlIHwgTXVEU2hhcmUgfCBLU2hhcmUsXG4gIHNpZ25lclNoYXJlPzogc3RyaW5nLFxuICB2c3NQcm9vZj86IHN0cmluZyxcbiAgcHJpdmF0ZVNoYXJlUHJvb2Y/OiBzdHJpbmcsXG4gIHB1YmxpY1NoYXJlPzogc3RyaW5nLFxuICB1c2VyUHVibGljR3BnS2V5Pzogc3RyaW5nXG4pOiBQcm9taXNlPFNlbmRTaGFyZVRvQml0Z29SVD4ge1xuICBpZiAoc2hhcmVUeXBlICE9PSBTZW5kU2hhcmVUeXBlLlNTaGFyZSAmJiBzaGFyZS5pICE9PSBTaGFyZUtleVBvc2l0aW9uLkJJVEdPKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIFNoYXJlLCBpcyBub3QgZnJvbSBVc2VyIHRvIEJpdGdvJyk7XG4gIH1cbiAgbGV0IHNpZ25hdHVyZVNoYXJlOiBTaWduYXR1cmVTaGFyZVJlY29yZDtcbiAgbGV0IHJlc3BvbnNlRnJvbUJpdGdvOiBTZW5kU2hhcmVUb0JpdGdvUlQ7XG5cbiAgc3dpdGNoIChzaGFyZVR5cGUpIHtcbiAgICBjYXNlIFNlbmRTaGFyZVR5cGUuS1NoYXJlOlxuICAgICAgYXNzZXJ0KHNpZ25lclNoYXJlLCBgc2lnbmVyIHNoYXJlIG11c3QgYmUgcHJlc2VudGApO1xuICAgICAgY29uc3Qga1NoYXJlID0gc2hhcmUgYXMgS1NoYXJlO1xuICAgICAgc2lnbmF0dXJlU2hhcmUgPSBjb252ZXJ0S1NoYXJlKGtTaGFyZSk7XG4gICAgICBzaWduYXR1cmVTaGFyZS52c3NQcm9vZiA9IHZzc1Byb29mO1xuICAgICAgc2lnbmF0dXJlU2hhcmUucHVibGljU2hhcmUgPSBwdWJsaWNTaGFyZTtcbiAgICAgIHNpZ25hdHVyZVNoYXJlLnByaXZhdGVTaGFyZVByb29mID0gcHJpdmF0ZVNoYXJlUHJvb2Y7XG4gICAgICBhd2FpdCBzZW5kU2lnbmF0dXJlU2hhcmUoXG4gICAgICAgIGJpdGdvLFxuICAgICAgICB3YWxsZXRJZCxcbiAgICAgICAgdHhSZXF1ZXN0SWQsXG4gICAgICAgIHNpZ25hdHVyZVNoYXJlLFxuICAgICAgICByZXF1ZXN0VHlwZSxcbiAgICAgICAgc2lnbmVyU2hhcmUsXG4gICAgICAgICdlY2RzYScsXG4gICAgICAgICdmdWxsJyxcbiAgICAgICAgdXNlclB1YmxpY0dwZ0tleVxuICAgICAgKTtcbiAgICAgIHJlc3BvbnNlRnJvbUJpdGdvID0gYXdhaXQgZ2V0Qml0Z29Ub1VzZXJMYXRlc3RTaGFyZShcbiAgICAgICAgYml0Z28sXG4gICAgICAgIHdhbGxldElkLFxuICAgICAgICB0eFJlcXVlc3RJZCxcbiAgICAgICAgUmVjZWl2ZWRTaGFyZVR5cGUuQVNoYXJlLFxuICAgICAgICByZXF1ZXN0VHlwZVxuICAgICAgKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgU2VuZFNoYXJlVHlwZS5NVVNoYXJlOlxuICAgICAgY29uc3Qgc2hhcmVUb1NlbmQgPSBzaGFyZSBhcyBNdURTaGFyZTtcbiAgICAgIGNvbnN0IG11U2hhcmVSZWNvcmQgPSBjb252ZXJ0TXVTaGFyZShzaGFyZVRvU2VuZC5tdVNoYXJlKTtcbiAgICAgIGNvbnN0IGRTaGFyZVJlY29yZCA9IGNvbnZlcnREU2hhcmUoc2hhcmVUb1NlbmQuZFNoYXJlKTtcbiAgICAgIHNpZ25hdHVyZVNoYXJlID0ge1xuICAgICAgICB0bzogU2lnbmF0dXJlU2hhcmVUeXBlLkJJVEdPLFxuICAgICAgICBmcm9tOiBnZXRQYXJ0aWNpcGFudEZyb21JbmRleChzaGFyZVRvU2VuZC5kU2hhcmUuaiksXG4gICAgICAgIHNoYXJlOiBgJHttdVNoYXJlUmVjb3JkLnNoYXJlfSR7c2Vjb25kYXJ5RGVsaW1ldGVyfSR7ZFNoYXJlUmVjb3JkLnNoYXJlfWAsXG4gICAgICB9O1xuICAgICAgYXdhaXQgc2VuZFNpZ25hdHVyZVNoYXJlKGJpdGdvLCB3YWxsZXRJZCwgdHhSZXF1ZXN0SWQsIHNpZ25hdHVyZVNoYXJlLCByZXF1ZXN0VHlwZSwgc2lnbmVyU2hhcmUsICdlY2RzYScpO1xuICAgICAgcmVzcG9uc2VGcm9tQml0Z28gPSBhd2FpdCBnZXRCaXRnb1RvVXNlckxhdGVzdFNoYXJlKFxuICAgICAgICBiaXRnbyxcbiAgICAgICAgd2FsbGV0SWQsXG4gICAgICAgIHR4UmVxdWVzdElkLFxuICAgICAgICBSZWNlaXZlZFNoYXJlVHlwZS5EU2hhcmUsXG4gICAgICAgIHJlcXVlc3RUeXBlXG4gICAgICApO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSBTZW5kU2hhcmVUeXBlLlNTaGFyZTpcbiAgICAgIGNvbnN0IHNTaGFyZSA9IHNoYXJlIGFzIFNTaGFyZTtcbiAgICAgIHNpZ25hdHVyZVNoYXJlID0gY29udmVydFNpZ25hdHVyZVNoYXJlKHNTaGFyZSwgMSwgMyk7XG4gICAgICBhd2FpdCBzZW5kU2lnbmF0dXJlU2hhcmUoYml0Z28sIHdhbGxldElkLCB0eFJlcXVlc3RJZCwgc2lnbmF0dXJlU2hhcmUsIHJlcXVlc3RUeXBlLCBzaWduZXJTaGFyZSwgJ2VjZHNhJyk7XG4gICAgICByZXNwb25zZUZyb21CaXRnbyA9IHNTaGFyZTtcbiAgICAgIGJyZWFrO1xuICAgIGRlZmF1bHQ6XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgU2hhcmUgZ2l2ZW4gdG8gc2VuZCcpO1xuICB9XG5cbiAgcmV0dXJuIHJlc3BvbnNlRnJvbUJpdGdvO1xufVxuXG4vKipcbiAqIEdldHMgdGhlIGxhdGVzdCB1c2VyJ3Mgc2hhcmUgZnJvbSBiaXRnbyBuZWVkZWQgdG8gY29udGludWUgc2lnbmluZyBmbG93XG4gKiBAcGFyYW0ge0JpdEdvQmFzZX0gYml0Z28gLSB0aGUgYml0Z28gaW5zdGFuY2VcbiAqIEBwYXJhbSB7U3RyaW5nfSB3YWxsZXRJZCAtIHRoZSB3YWxsZXQgaWQgICpcbiAqIEBwYXJhbSB7U3RyaW5nfSB0eFJlcXVlc3RJZCAtIHRoZSB0eFJlcXVlc3QgSWRcbiAqIEBwYXJhbSB7UmVjZWl2ZWRTaGFyZVR5cGV9IHNoYXJlVHlwZSAtIHRoZSBleGNwZWN0ZWQgc2hhcmUgdHlwZVxuICogQHJldHVybnMge1Byb21pc2U8U2VuZFNoYXJlVG9CaXRnb1JUPn0gLSBzaGFyZSBmcm9tIGJpdGdvIHRvIHVzZXJcbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGdldEJpdGdvVG9Vc2VyTGF0ZXN0U2hhcmUoXG4gIGJpdGdvOiBCaXRHb0Jhc2UsXG4gIHdhbGxldElkOiBzdHJpbmcsXG4gIHR4UmVxdWVzdElkOiBzdHJpbmcsXG4gIHNoYXJlVHlwZTogUmVjZWl2ZWRTaGFyZVR5cGUsXG4gIHJlcXVlc3RUeXBlOiBSZXF1ZXN0VHlwZVxuKTogUHJvbWlzZTxTZW5kU2hhcmVUb0JpdGdvUlQ+IHtcbiAgbGV0IHJlc3BvbnNlRnJvbUJpdGdvOiBTZW5kU2hhcmVUb0JpdGdvUlQ7XG4gIGNvbnN0IHR4UmVxdWVzdCA9IGF3YWl0IGdldFR4UmVxdWVzdChiaXRnbywgd2FsbGV0SWQsIHR4UmVxdWVzdElkKTtcbiAgbGV0IHVzZXJTaGFyZXM7XG4gIHN3aXRjaCAocmVxdWVzdFR5cGUpIHtcbiAgICBjYXNlIFJlcXVlc3RUeXBlLnR4OlxuICAgICAgYXNzZXJ0KHR4UmVxdWVzdC50cmFuc2FjdGlvbnMsICd0cmFuc2FjdGlvbnMgcmVxdWlyZWQgYXMgcGFydCBvZiB0eFJlcXVlc3QnKTtcbiAgICAgIHVzZXJTaGFyZXMgPSB0eFJlcXVlc3QudHJhbnNhY3Rpb25zWzBdLnNpZ25hdHVyZVNoYXJlcztcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgUmVxdWVzdFR5cGUubWVzc2FnZTpcbiAgICAgIGFzc2VydCh0eFJlcXVlc3QubWVzc2FnZXMsICdtZXNzYWdlcyByZXF1aXJlZCBhcyBwYXJ0IG9mIHR4UmVxdWVzdCcpO1xuICAgICAgdXNlclNoYXJlcyA9IHR4UmVxdWVzdC5tZXNzYWdlc1swXS5zaWduYXR1cmVTaGFyZXM7XG4gICAgICBicmVhaztcbiAgfVxuICBpZiAoIXVzZXJTaGFyZXMgfHwgIXVzZXJTaGFyZXMubGVuZ3RoKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCd1c2VyIHNoYXJlIGlzIG5vdCBwcmVzZW50Jyk7XG4gIH1cblxuICBjb25zdCBzaGFyZVJlY29yZCA9IHVzZXJTaGFyZXNbdXNlclNoYXJlcy5sZW5ndGggLSAxXTtcbiAgc3dpdGNoIChzaGFyZVR5cGUpIHtcbiAgICBjYXNlIFJlY2VpdmVkU2hhcmVUeXBlLkFTaGFyZTpcbiAgICAgIHJlc3BvbnNlRnJvbUJpdGdvID0gcGFyc2VBU2hhcmUoc2hhcmVSZWNvcmQpO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSBSZWNlaXZlZFNoYXJlVHlwZS5EU2hhcmU6XG4gICAgICByZXNwb25zZUZyb21CaXRnbyA9IHBhcnNlRFNoYXJlKHNoYXJlUmVjb3JkKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgUmVjZWl2ZWRTaGFyZVR5cGUuU2lnbmF0dXJlOlxuICAgICAgcmVzcG9uc2VGcm9tQml0Z28gPSBwYXJzZVNpZ25hdHVyZVNoYXJlKHNoYXJlUmVjb3JkKTtcbiAgICAgIGJyZWFrO1xuICAgIGRlZmF1bHQ6XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgc2hhcmUgcmVjZWl2ZWQnKTtcbiAgfVxuXG4gIHJldHVybiByZXNwb25zZUZyb21CaXRnbztcbn1cblxuLyoqXG4gKiBQcmVwYXJlcyBhIE5TaGFyZSB0byBiZSBleGNoYW5nZWQgd2l0aCBvdGhlciBrZXkgaG9sZGVycy5cbiAqIE91dHB1dCBpcyBpbiBhIGZvcm1hdCB0aGF0IGlzIHVzYWJsZSB3aXRoaW4gQml0R28ncyBlY29zeXN0ZW0uXG4gKlxuICogQHBhcmFtIGtleVNoYXJlIC0gVFNTIGtleSBzaGFyZSBvZiB0aGUgcGFydHkgcHJlcGFyaW5nIGV4Y2hhbmdlIG1hdGVyaWFsc1xuICogQHBhcmFtIHJlY2lwaWVudEluZGV4IC0gaW5kZXggb2YgdGhlIHJlY2lwaWVudCAoMSwgMiwgb3IgMylcbiAqIEBwYXJhbSByZWNpcGllbnRHcGdQdWJsaWNBcm1vciAtIHJlY2lwaWVudCdzIHB1YmxpYyBncGcga2V5IGluIGFybW9yIGZvcm1hdFxuICogQHBhcmFtIHNlbmRlckdwZ0tleSAtIGVwaGVtZXJhbCBHUEcga2V5IHRvIGVuY3J5cHQgLyBkZWNyeXB0IHNlbnNpdHZlIGRhdGEgZXhjaGFuZ2VkIGJldHdlZW4gdXNlciBhbmQgc2VydmVyXG4gKiBAcGFyYW0gaXNiczU4RW5jb2RlZCAtIGlzIGJzNTggZW5jb2RlZCBvciBub3RcbiAqIEByZXR1cm5zIGVuY3J5cHRlZCBOIFNoYXJlXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBlbmNyeXB0TlNoYXJlKFxuICBrZXlTaGFyZTogS2V5U2hhcmUsXG4gIHJlY2lwaWVudEluZGV4OiBudW1iZXIsXG4gIHJlY2lwaWVudEdwZ1B1YmxpY0FybW9yOiBzdHJpbmcsXG4gIHNlbmRlckdwZ0tleTogcGdwLlNlcmlhbGl6ZWRLZXlQYWlyPHN0cmluZz4sXG4gIGlzYnM1OEVuY29kZWQgPSB0cnVlXG4pOiBQcm9taXNlPEVuY3J5cHRlZE5TaGFyZT4ge1xuICBjb25zdCBuU2hhcmUgPSBrZXlTaGFyZS5uU2hhcmVzW3JlY2lwaWVudEluZGV4XTtcbiAgaWYgKCFuU2hhcmUpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgcmVjaXBpZW50Jyk7XG4gIH1cblxuICBjb25zdCBwdWJsaWNTaGFyZSA9IEJ1ZmZlci5jb25jYXQoW1xuICAgIEJ1ZmZlci5mcm9tKGtleVNoYXJlLnBTaGFyZS55LCAnaGV4JyksXG4gICAgQnVmZmVyLmZyb20oa2V5U2hhcmUucFNoYXJlLmNoYWluY29kZSwgJ2hleCcpLFxuICBdKS50b1N0cmluZygnaGV4Jyk7XG5cbiAgbGV0IHByaXZhdGVTaGFyZTtcbiAgaWYgKGlzYnM1OEVuY29kZWQpIHtcbiAgICBwcml2YXRlU2hhcmUgPSBiaXAzMi5mcm9tUHJpdmF0ZUtleShCdWZmZXIuZnJvbShuU2hhcmUudSwgJ2hleCcpLCBCdWZmZXIuZnJvbShuU2hhcmUuY2hhaW5jb2RlLCAnaGV4JykpLnRvQmFzZTU4KCk7XG4gIH0gZWxzZSB7XG4gICAgcHJpdmF0ZVNoYXJlID0gQnVmZmVyLmNvbmNhdChbQnVmZmVyLmZyb20oblNoYXJlLnUsICdoZXgnKSwgQnVmZmVyLmZyb20oblNoYXJlLmNoYWluY29kZSwgJ2hleCcpXSkudG9TdHJpbmcoJ2hleCcpO1xuICB9XG4gIGNvbnN0IHJlY2lwaWVudFB1YmxpY0tleSA9IGF3YWl0IHBncC5yZWFkS2V5KHsgYXJtb3JlZEtleTogcmVjaXBpZW50R3BnUHVibGljQXJtb3IgfSk7XG5cbiAgY29uc3QgZW5jcnlwdGVkUHJpdmF0ZVNoYXJlID0gKGF3YWl0IHBncC5lbmNyeXB0KHtcbiAgICBtZXNzYWdlOiBhd2FpdCBwZ3AuY3JlYXRlTWVzc2FnZSh7XG4gICAgICB0ZXh0OiBwcml2YXRlU2hhcmUsXG4gICAgfSksXG4gICAgZW5jcnlwdGlvbktleXM6IFtyZWNpcGllbnRQdWJsaWNLZXldLFxuICB9KSkgYXMgc3RyaW5nO1xuXG4gIHJldHVybiB7XG4gICAgaTogblNoYXJlLmksXG4gICAgajogblNoYXJlLmosXG4gICAgcHVibGljU2hhcmUsXG4gICAgZW5jcnlwdGVkUHJpdmF0ZVNoYXJlLFxuICAgIG46IG5TaGFyZS5uLFxuICAgIHZzc1Byb29mOiBuU2hhcmUudixcbiAgICBwcml2YXRlU2hhcmVQcm9vZjogYXdhaXQgY3JlYXRlU2hhcmVQcm9vZihzZW5kZXJHcGdLZXkucHJpdmF0ZUtleSwgblNoYXJlLnUsICdlY2RzYScpLFxuICB9O1xufVxuXG4vKipcbiAqIFByZXBhcmVzIGEgTlNoYXJlIHRvIGJlIGV4Y2hhbmdlZCB3aXRoIG90aGVyIGtleSBob2xkZXJzLlxuICogQW4gQVBJIGtleSBzaGFyZSByZWNlaXZlZCBmcm9tIGEgdGhpcmQgcGFydHkgc2hvdWxkIGFscmVhZHkgYmUgZW5jcnlwdGVkXG4gKlxuICogQHBhcmFtIGtleVNoYXJlIC0gVFNTIGtleSBzaGFyZSBvZiB0aGUgcGFydHkgcHJlcGFyaW5nIGV4Y2hhbmdlIG1hdGVyaWFsc1xuICogQHJldHVybnMgZW5jcnlwdGVkIE4gU2hhcmVcbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGJ1aWxkTlNoYXJlRnJvbUFQSUtleVNoYXJlKGtleVNoYXJlOiBBcGlLZXlTaGFyZSk6IFByb21pc2U8RW5jcnlwdGVkTlNoYXJlPiB7XG4gIHJldHVybiB7XG4gICAgaTogZ2V0UGFydGljaXBhbnRJbmRleChrZXlTaGFyZS50byksXG4gICAgajogZ2V0UGFydGljaXBhbnRJbmRleChrZXlTaGFyZS5mcm9tKSxcbiAgICBwdWJsaWNTaGFyZToga2V5U2hhcmUucHVibGljU2hhcmUsXG4gICAgZW5jcnlwdGVkUHJpdmF0ZVNoYXJlOiBrZXlTaGFyZS5wcml2YXRlU2hhcmUsXG4gICAgbjoga2V5U2hhcmUubiA/PyAnJywgLy8gdGhpcyBpcyBub3QgY3VycmVudGx5IG5lZWRlZCBmb3Iga2V5IGNyZWF0aW9uXG4gICAgcHJpdmF0ZVNoYXJlUHJvb2Y6IGtleVNoYXJlLnByaXZhdGVTaGFyZVByb29mLFxuICAgIHZzc1Byb29mOiBrZXlTaGFyZS52c3NQcm9vZixcbiAgfTtcbn1cblxuLyoqXG4gKiBEZWNyeXB0cyBlbmNyeXB0ZWQgbiBzaGFyZVxuICogQHBhcmFtIGVuY3J5cHRlZE5TaGFyZSAtIGRlY3J5cHRhYmxlIG4gc2hhcmUgd2l0aCByZWNpcGllbnQgcHJpdmF0ZSBncGcga2V5IGFybW9yIGFuZCBzZW5kZXIgcHVibGljIGdwZyBrZXlcbiAqIEByZXR1cm5zIE4gc2hhcmVcbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGRlY3J5cHROU2hhcmUoZW5jcnlwdGVkTlNoYXJlOiBEZWNyeXB0YWJsZU5TaGFyZSwgaXNiczU4RW5jb2RlZCA9IHRydWUpOiBQcm9taXNlPE5TaGFyZT4ge1xuICBjb25zdCByZWNpcGllbnRQcml2YXRlS2V5ID0gYXdhaXQgcGdwLnJlYWRLZXkoeyBhcm1vcmVkS2V5OiBlbmNyeXB0ZWROU2hhcmUucmVjaXBpZW50UHJpdmF0ZUFybW9yIH0pO1xuICBjb25zdCBwcnYgPSAoXG4gICAgYXdhaXQgcGdwLmRlY3J5cHQoe1xuICAgICAgbWVzc2FnZTogYXdhaXQgcGdwLnJlYWRNZXNzYWdlKHsgYXJtb3JlZE1lc3NhZ2U6IGVuY3J5cHRlZE5TaGFyZS5uU2hhcmUuZW5jcnlwdGVkUHJpdmF0ZVNoYXJlIH0pLFxuICAgICAgZGVjcnlwdGlvbktleXM6IFtyZWNpcGllbnRQcml2YXRlS2V5IGFzIHBncC5Qcml2YXRlS2V5XSxcbiAgICB9KVxuICApLmRhdGEgYXMgc3RyaW5nO1xuXG4gIGxldCB1OiBzdHJpbmc7XG4gIGlmIChpc2JzNThFbmNvZGVkKSB7XG4gICAgY29uc3QgcHJpdmF0ZVNoYXJlID0gYnM1OC5kZWNvZGUocHJ2KS50b1N0cmluZygnaGV4Jyk7XG4gICAgdSA9IHByaXZhdGVTaGFyZS5zbGljZSg5MiwgMTU2KTtcbiAgfSBlbHNlIHtcbiAgICB1ID0gcHJ2LnNsaWNlKDAsIDY0KTtcbiAgfVxuXG4gIGNvbnN0IG5TaGFyZTogTlNoYXJlID0ge1xuICAgIGk6IGVuY3J5cHRlZE5TaGFyZS5uU2hhcmUuaSxcbiAgICBqOiBlbmNyeXB0ZWROU2hhcmUublNoYXJlLmosXG4gICAgbjogZW5jcnlwdGVkTlNoYXJlLm5TaGFyZS5uLFxuICAgIHk6IGVuY3J5cHRlZE5TaGFyZS5uU2hhcmUucHVibGljU2hhcmUuc2xpY2UoMCwgNjYpLFxuICAgIHU6IHUsXG4gICAgY2hhaW5jb2RlOiBlbmNyeXB0ZWROU2hhcmUublNoYXJlLnB1YmxpY1NoYXJlLnNsaWNlKDY2LCAxMzApLFxuICAgIHY6IGVuY3J5cHRlZE5TaGFyZS5uU2hhcmUudnNzUHJvb2YsXG4gIH07XG5cbiAgcmV0dXJuIG5TaGFyZTtcbn1cblxuLyoqXG4gKiBHZXRzIHB1YmxpYyBrZXkgZnJvbSBjb21tb24ga2V5IGNoYWluXG4gKiBAcGFyYW0gY29tbW9uS2V5Q2hhaW4gLSBjb21tb24ga2V5IGNoYWluIG9mIGVjZHNhIHRzc1xuICogQHJldHVybnMgcHVibGljIGtleVxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0UHVibGljS2V5KGNvbW1vbktleUNoYWluOiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gY29tbW9uS2V5Q2hhaW4uc2xpY2UoMCwgNjYpO1xufVxuXG5leHBvcnQgY29uc3QgZGVsaW1ldGVyID0gJzonO1xuZXhwb3J0IGNvbnN0IHNlY29uZGFyeURlbGltZXRlciA9ICctJztcblxuZnVuY3Rpb24gdmFsaWRhdGVTaGFyZXNMZW5ndGgoc2hhcmVzOiBzdHJpbmdbXSwgZXhwZWN0ZWRMZW5ndGg6IG51bWJlciwgc2hhcmVOYW1lOiBzdHJpbmcpIHtcbiAgaWYgKHNoYXJlcy5sZW5ndGggPCBleHBlY3RlZExlbmd0aCkge1xuICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCAke3NoYXJlTmFtZX0gc2hhcmVgKTtcbiAgfVxufVxuXG5mdW5jdGlvbiB2YWxpZGF0ZU9wdGlvbmFsVmFsdWVzKHNoYXJlczogc3RyaW5nW10sIHN0YXJ0OiBudW1iZXIsIGVuZDogbnVtYmVyLCBzaGFyZU5hbWU6IHN0cmluZywgdmFsdWVOYW1lOiBzdHJpbmcpIHtcbiAgbGV0IGZvdW5kID0gZmFsc2U7XG4gIGZvciAobGV0IGkgPSBzdGFydDsgaSA8IGVuZDsgaSsrKSB7XG4gICAgaWYgKHNoYXJlc1tpXSkge1xuICAgICAgZm91bmQgPSB0cnVlO1xuICAgIH0gZWxzZSBpZiAoZm91bmQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgSW5jb25zaXN0ZW50IG9wdGlvbmFsICR7dmFsdWVOYW1lfSB2YWx1ZSBpbiAke3NoYXJlTmFtZX0gc2hhcmVgKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGZvdW5kO1xufVxuXG4vKipcbiAqIHBhcnNlcyBLIHNoYXJlIGZyb20gc2lnbmF0dXJlIHNoYXJlIHJlY29yZFxuICogQHBhcmFtIHNoYXJlIC0gc2lnbmF0dXJlIHNoYXJlIHJlY29yZFxuICogQHJldHVybnMgSyBTaGFyZVxuICovXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VLU2hhcmUoc2hhcmU6IFNpZ25hdHVyZVNoYXJlUmVjb3JkKTogS1NoYXJlIHtcbiAgY29uc3Qgc2hhcmVzID0gc2hhcmUuc2hhcmUuc3BsaXQoZGVsaW1ldGVyKTtcblxuICB2YWxpZGF0ZVNoYXJlc0xlbmd0aChzaGFyZXMsIDExLCAnSycpO1xuICBjb25zdCBoYXNQcm9vZiA9IHZhbGlkYXRlT3B0aW9uYWxWYWx1ZXMoc2hhcmVzLCA1LCAxMSwgJ0snLCAncHJvb2YnKTtcblxuICBsZXQgcHJvb2Y7XG4gIGlmIChoYXNQcm9vZikge1xuICAgIHByb29mID0ge1xuICAgICAgejogc2hhcmVzWzVdLFxuICAgICAgdTogc2hhcmVzWzZdLFxuICAgICAgdzogc2hhcmVzWzddLFxuICAgICAgczogc2hhcmVzWzhdLFxuICAgICAgczE6IHNoYXJlc1s5XSxcbiAgICAgIHMyOiBzaGFyZXNbMTBdLFxuICAgIH07XG4gIH1cblxuICByZXR1cm4ge1xuICAgIGk6IGdldFBhcnRpY2lwYW50SW5kZXgoc2hhcmUudG8pLFxuICAgIGo6IGdldFBhcnRpY2lwYW50SW5kZXgoc2hhcmUuZnJvbSksXG4gICAgazogc2hhcmVzWzBdLFxuICAgIG46IHNoYXJlc1sxXSxcbiAgICBudGlsZGU6IHNoYXJlc1syXSxcbiAgICBoMTogc2hhcmVzWzNdLFxuICAgIGgyOiBzaGFyZXNbNF0sXG4gICAgcHJvb2YsXG4gIH07XG59XG5cbi8qKlxuICogY29udmVydCBLIHNoYXJlIHRvIHNpZ25hdHVyZSBzaGFyZSByZWNvcmRcbiAqIEBwYXJhbSBzaGFyZSAtIEsgc2hhcmVcbiAqIEByZXR1cm5zIHNpZ25hdHVyZSBzaGFyZSByZWNvcmRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNvbnZlcnRLU2hhcmUoc2hhcmU6IEtTaGFyZSk6IFNpZ25hdHVyZVNoYXJlUmVjb3JkIHtcbiAgcmV0dXJuIHtcbiAgICB0bzogZ2V0UGFydGljaXBhbnRGcm9tSW5kZXgoc2hhcmUuaSksXG4gICAgZnJvbTogZ2V0UGFydGljaXBhbnRGcm9tSW5kZXgoc2hhcmUuaiksXG4gICAgc2hhcmU6IGAke3NoYXJlLmt9JHtkZWxpbWV0ZXJ9JHtzaGFyZS5ufSR7ZGVsaW1ldGVyfSR7c2hhcmUubnRpbGRlfSR7ZGVsaW1ldGVyfSR7c2hhcmUuaDF9JHtkZWxpbWV0ZXJ9JHtcbiAgICAgIHNoYXJlLmgyXG4gICAgfSR7ZGVsaW1ldGVyfSR7c2hhcmUucHJvb2Y/LnogfHwgJyd9JHtkZWxpbWV0ZXJ9JHtzaGFyZS5wcm9vZj8udSB8fCAnJ30ke2RlbGltZXRlcn0ke1xuICAgICAgc2hhcmUucHJvb2Y/LncgfHwgJydcbiAgICB9JHtkZWxpbWV0ZXJ9JHtzaGFyZS5wcm9vZj8ucyB8fCAnJ30ke2RlbGltZXRlcn0ke3NoYXJlLnByb29mPy5zMSB8fCAnJ30ke2RlbGltZXRlcn0ke3NoYXJlLnByb29mPy5zMiB8fCAnJ31gLFxuICB9O1xufVxuXG4vKipcbiAqIHBhcnNlcyBBIHNoYXJlIGZyb20gc2lnbmF0dXJlIHNoYXJlIHJlY29yZFxuICogQHBhcmFtIHNoYXJlIC0gc2lnbmF0dXJlIHNoYXJlIHJlY29yZFxuICogQHJldHVybnMgQSBTaGFyZVxuICovXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VBU2hhcmUoc2hhcmU6IFNpZ25hdHVyZVNoYXJlUmVjb3JkKTogQVNoYXJlIHtcbiAgY29uc3Qgc2hhcmVzID0gc2hhcmUuc2hhcmUuc3BsaXQoZGVsaW1ldGVyKTtcbiAgdmFsaWRhdGVTaGFyZXNMZW5ndGgoc2hhcmVzLCAzNywgJ0EnKTtcbiAgY29uc3QgaGFzUHJvb2YgPSB2YWxpZGF0ZU9wdGlvbmFsVmFsdWVzKHNoYXJlcywgNywgMTMsICdBJywgJ3Byb29mJyk7XG4gIGNvbnN0IGhhc0dhbW1hUHJvb2YgPSB2YWxpZGF0ZU9wdGlvbmFsVmFsdWVzKHNoYXJlcywgMTMsIDI1LCAnQScsICdnYW1tYVByb29mJyk7XG4gIGNvbnN0IGhhc1dQcm9vZiA9IHZhbGlkYXRlT3B0aW9uYWxWYWx1ZXMoc2hhcmVzLCAyNSwgMzcsICdBJywgJ3dQcm9vZicpO1xuXG4gIGxldCBwcm9vZjtcbiAgaWYgKGhhc1Byb29mKSB7XG4gICAgcHJvb2YgPSB7XG4gICAgICB6OiBzaGFyZXNbN10sXG4gICAgICB1OiBzaGFyZXNbOF0sXG4gICAgICB3OiBzaGFyZXNbOV0sXG4gICAgICBzOiBzaGFyZXNbMTBdLFxuICAgICAgczE6IHNoYXJlc1sxMV0sXG4gICAgICBzMjogc2hhcmVzWzEyXSxcbiAgICB9O1xuICB9XG5cbiAgbGV0IGdhbW1hUHJvb2Y7XG4gIGlmIChoYXNHYW1tYVByb29mKSB7XG4gICAgZ2FtbWFQcm9vZiA9IHtcbiAgICAgIHo6IHNoYXJlc1sxM10sXG4gICAgICB6cHJtOiBzaGFyZXNbMTRdLFxuICAgICAgdDogc2hhcmVzWzE1XSxcbiAgICAgIHY6IHNoYXJlc1sxNl0sXG4gICAgICB3OiBzaGFyZXNbMTddLFxuICAgICAgczogc2hhcmVzWzE4XSxcbiAgICAgIHMxOiBzaGFyZXNbMTldLFxuICAgICAgczI6IHNoYXJlc1syMF0sXG4gICAgICB0MTogc2hhcmVzWzIxXSxcbiAgICAgIHQyOiBzaGFyZXNbMjJdLFxuICAgICAgdTogc2hhcmVzWzIzXSxcbiAgICAgIHg6IHNoYXJlc1syNF0sXG4gICAgfTtcbiAgfVxuXG4gIGxldCB3UHJvb2Y7XG4gIGlmIChoYXNXUHJvb2YpIHtcbiAgICB3UHJvb2YgPSB7XG4gICAgICB6OiBzaGFyZXNbMjVdLFxuICAgICAgenBybTogc2hhcmVzWzI2XSxcbiAgICAgIHQ6IHNoYXJlc1syN10sXG4gICAgICB2OiBzaGFyZXNbMjhdLFxuICAgICAgdzogc2hhcmVzWzI5XSxcbiAgICAgIHM6IHNoYXJlc1szMF0sXG4gICAgICBzMTogc2hhcmVzWzMxXSxcbiAgICAgIHMyOiBzaGFyZXNbMzJdLFxuICAgICAgdDE6IHNoYXJlc1szM10sXG4gICAgICB0Mjogc2hhcmVzWzM0XSxcbiAgICAgIHU6IHNoYXJlc1szNV0sXG4gICAgICB4OiBzaGFyZXNbMzZdLFxuICAgIH07XG4gIH1cblxuICByZXR1cm4ge1xuICAgIGk6IGdldFBhcnRpY2lwYW50SW5kZXgoc2hhcmUudG8pLFxuICAgIGo6IGdldFBhcnRpY2lwYW50SW5kZXgoc2hhcmUuZnJvbSksXG4gICAgazogc2hhcmVzWzBdLFxuICAgIGFscGhhOiBzaGFyZXNbMV0sXG4gICAgbXU6IHNoYXJlc1syXSxcbiAgICBuOiBzaGFyZXNbM10sXG4gICAgbnRpbGRlOiBzaGFyZXNbNF0sXG4gICAgaDE6IHNoYXJlc1s1XSxcbiAgICBoMjogc2hhcmVzWzZdLFxuICAgIHByb29mLFxuICAgIGdhbW1hUHJvb2YsXG4gICAgd1Byb29mLFxuICB9O1xufVxuXG4vKipcbiAqIGNvbnZlcnQgQSBzaGFyZSB0byBzaWduYXR1cmUgc2hhcmUgcmVjb3JkXG4gKiBAcGFyYW0gc2hhcmUgLSBBIHNoYXJlXG4gKiBAcmV0dXJucyBzaWduYXR1cmUgc2hhcmUgcmVjb3JkXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjb252ZXJ0QVNoYXJlKHNoYXJlOiBBU2hhcmUpOiBTaWduYXR1cmVTaGFyZVJlY29yZCB7XG4gIHJldHVybiB7XG4gICAgdG86IGdldFBhcnRpY2lwYW50RnJvbUluZGV4KHNoYXJlLmkpLFxuICAgIGZyb206IGdldFBhcnRpY2lwYW50RnJvbUluZGV4KHNoYXJlLmopLFxuICAgIHNoYXJlOiBgJHtzaGFyZS5rfSR7ZGVsaW1ldGVyfSR7c2hhcmUuYWxwaGF9JHtkZWxpbWV0ZXJ9JHtzaGFyZS5tdX0ke2RlbGltZXRlcn0ke3NoYXJlLm59JHtkZWxpbWV0ZXJ9JHtcbiAgICAgIHNoYXJlLm50aWxkZVxuICAgIH0ke2RlbGltZXRlcn0ke3NoYXJlLmgxfSR7ZGVsaW1ldGVyfSR7c2hhcmUuaDJ9JHtkZWxpbWV0ZXJ9JHtzaGFyZS5wcm9vZj8ueiB8fCAnJ30ke2RlbGltZXRlcn0ke1xuICAgICAgc2hhcmUucHJvb2Y/LnUgfHwgJydcbiAgICB9JHtkZWxpbWV0ZXJ9JHtzaGFyZS5wcm9vZj8udyB8fCAnJ30ke2RlbGltZXRlcn0ke3NoYXJlLnByb29mPy5zIHx8ICcnfSR7ZGVsaW1ldGVyfSR7XG4gICAgICBzaGFyZS5wcm9vZj8uczEgfHwgJydcbiAgICB9JHtkZWxpbWV0ZXJ9JHtzaGFyZS5wcm9vZj8uczIgfHwgJyd9JHtkZWxpbWV0ZXJ9JHtzaGFyZS5nYW1tYVByb29mPy56IHx8ICcnfSR7ZGVsaW1ldGVyfSR7XG4gICAgICBzaGFyZS5nYW1tYVByb29mPy56cHJtIHx8ICcnXG4gICAgfSR7ZGVsaW1ldGVyfSR7c2hhcmUuZ2FtbWFQcm9vZj8udCB8fCAnJ30ke2RlbGltZXRlcn0ke3NoYXJlLmdhbW1hUHJvb2Y/LnYgfHwgJyd9JHtkZWxpbWV0ZXJ9JHtcbiAgICAgIHNoYXJlLmdhbW1hUHJvb2Y/LncgfHwgJydcbiAgICB9JHtkZWxpbWV0ZXJ9JHtzaGFyZS5nYW1tYVByb29mPy5zIHx8ICcnfSR7ZGVsaW1ldGVyfSR7c2hhcmUuZ2FtbWFQcm9vZj8uczEgfHwgJyd9JHtkZWxpbWV0ZXJ9JHtcbiAgICAgIHNoYXJlLmdhbW1hUHJvb2Y/LnMyIHx8ICcnXG4gICAgfSR7ZGVsaW1ldGVyfSR7c2hhcmUuZ2FtbWFQcm9vZj8udDEgfHwgJyd9JHtkZWxpbWV0ZXJ9JHtzaGFyZS5nYW1tYVByb29mPy50MiB8fCAnJ30ke2RlbGltZXRlcn0ke1xuICAgICAgc2hhcmUuZ2FtbWFQcm9vZj8udSB8fCAnJ1xuICAgIH0ke2RlbGltZXRlcn0ke3NoYXJlLmdhbW1hUHJvb2Y/LnggfHwgJyd9JHtkZWxpbWV0ZXJ9JHtzaGFyZS53UHJvb2Y/LnogfHwgJyd9JHtkZWxpbWV0ZXJ9JHtcbiAgICAgIHNoYXJlLndQcm9vZj8uenBybSB8fCAnJ1xuICAgIH0ke2RlbGltZXRlcn0ke3NoYXJlLndQcm9vZj8udCB8fCAnJ30ke2RlbGltZXRlcn0ke3NoYXJlLndQcm9vZj8udiB8fCAnJ30ke2RlbGltZXRlcn0ke1xuICAgICAgc2hhcmUud1Byb29mPy53IHx8ICcnXG4gICAgfSR7ZGVsaW1ldGVyfSR7c2hhcmUud1Byb29mPy5zIHx8ICcnfSR7ZGVsaW1ldGVyfSR7c2hhcmUud1Byb29mPy5zMSB8fCAnJ30ke2RlbGltZXRlcn0ke1xuICAgICAgc2hhcmUud1Byb29mPy5zMiB8fCAnJ1xuICAgIH0ke2RlbGltZXRlcn0ke3NoYXJlLndQcm9vZj8udDEgfHwgJyd9JHtkZWxpbWV0ZXJ9JHtzaGFyZS53UHJvb2Y/LnQyIHx8ICcnfSR7ZGVsaW1ldGVyfSR7XG4gICAgICBzaGFyZS53UHJvb2Y/LnUgfHwgJydcbiAgICB9JHtkZWxpbWV0ZXJ9JHtzaGFyZS53UHJvb2Y/LnggfHwgJyd9YCxcbiAgfTtcbn1cblxuLyoqXG4gKiBwYXJzZXMgTXUgc2hhcmUgZnJvbSBzaWduYXR1cmUgc2hhcmUgcmVjb3JkXG4gKiBAcGFyYW0gc2hhcmUgLSBzaWduYXR1cmUgc2hhcmUgcmVjb3JkXG4gKiBAcmV0dXJucyBNdSBTaGFyZVxuICovXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VNdVNoYXJlKHNoYXJlOiBTaWduYXR1cmVTaGFyZVJlY29yZCk6IE1VU2hhcmUge1xuICBjb25zdCBzaGFyZXMgPSBzaGFyZS5zaGFyZS5zcGxpdChkZWxpbWV0ZXIpO1xuICB2YWxpZGF0ZVNoYXJlc0xlbmd0aChzaGFyZXMsIDI2LCAnTXUnKTtcbiAgY29uc3QgaGFzR2FtbWFQcm9vZiA9IHZhbGlkYXRlT3B0aW9uYWxWYWx1ZXMoc2hhcmVzLCAyLCAxNCwgJ011JywgJ2dhbW1hUHJvb2YnKTtcbiAgY29uc3QgaGFzV1Byb29mID0gdmFsaWRhdGVPcHRpb25hbFZhbHVlcyhzaGFyZXMsIDE0LCAyNiwgJ011JywgJ3dQcm9vZicpO1xuXG4gIGxldCBnYW1tYVByb29mO1xuICBpZiAoaGFzR2FtbWFQcm9vZikge1xuICAgIGdhbW1hUHJvb2YgPSB7XG4gICAgICB6OiBzaGFyZXNbMl0sXG4gICAgICB6cHJtOiBzaGFyZXNbM10sXG4gICAgICB0OiBzaGFyZXNbNF0sXG4gICAgICB2OiBzaGFyZXNbNV0sXG4gICAgICB3OiBzaGFyZXNbNl0sXG4gICAgICBzOiBzaGFyZXNbN10sXG4gICAgICBzMTogc2hhcmVzWzhdLFxuICAgICAgczI6IHNoYXJlc1s5XSxcbiAgICAgIHQxOiBzaGFyZXNbMTBdLFxuICAgICAgdDI6IHNoYXJlc1sxMV0sXG4gICAgICB1OiBzaGFyZXNbMTJdLFxuICAgICAgeDogc2hhcmVzWzEzXSxcbiAgICB9O1xuICB9XG5cbiAgbGV0IHdQcm9vZjtcbiAgaWYgKGhhc1dQcm9vZikge1xuICAgIHdQcm9vZiA9IHtcbiAgICAgIHo6IHNoYXJlc1sxNF0sXG4gICAgICB6cHJtOiBzaGFyZXNbMTVdLFxuICAgICAgdDogc2hhcmVzWzE2XSxcbiAgICAgIHY6IHNoYXJlc1sxN10sXG4gICAgICB3OiBzaGFyZXNbMThdLFxuICAgICAgczogc2hhcmVzWzE5XSxcbiAgICAgIHMxOiBzaGFyZXNbMjBdLFxuICAgICAgczI6IHNoYXJlc1syMV0sXG4gICAgICB0MTogc2hhcmVzWzIyXSxcbiAgICAgIHQyOiBzaGFyZXNbMjNdLFxuICAgICAgdTogc2hhcmVzWzI0XSxcbiAgICAgIHg6IHNoYXJlc1syNV0sXG4gICAgfTtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgaTogZ2V0UGFydGljaXBhbnRJbmRleChzaGFyZS50byksXG4gICAgajogZ2V0UGFydGljaXBhbnRJbmRleChzaGFyZS5mcm9tKSxcbiAgICBhbHBoYTogc2hhcmVzWzBdLFxuICAgIG11OiBzaGFyZXNbMV0sXG4gICAgZ2FtbWFQcm9vZixcbiAgICB3UHJvb2YsXG4gIH07XG59XG5cbi8qKlxuICogY29udmVydCBNdSBzaGFyZSB0byBzaWduYXR1cmUgc2hhcmUgcmVjb3JkXG4gKiBAcGFyYW0gc2hhcmUgLSBNdSBzaGFyZVxuICogQHJldHVybnMgc2lnbmF0dXJlIHNoYXJlIHJlY29yZFxuICovXG5leHBvcnQgZnVuY3Rpb24gY29udmVydE11U2hhcmUoc2hhcmU6IE1VU2hhcmUpOiBTaWduYXR1cmVTaGFyZVJlY29yZCB7XG4gIHJldHVybiB7XG4gICAgdG86IGdldFBhcnRpY2lwYW50RnJvbUluZGV4KHNoYXJlLmkpLFxuICAgIGZyb206IGdldFBhcnRpY2lwYW50RnJvbUluZGV4KHNoYXJlLmopLFxuICAgIHNoYXJlOiBgJHtzaGFyZS5hbHBoYX0ke2RlbGltZXRlcn0ke3NoYXJlLm11fSR7ZGVsaW1ldGVyfSR7c2hhcmUuZ2FtbWFQcm9vZj8ueiB8fCAnJ30ke2RlbGltZXRlcn0ke1xuICAgICAgc2hhcmUuZ2FtbWFQcm9vZj8uenBybSB8fCAnJ1xuICAgIH0ke2RlbGltZXRlcn0ke3NoYXJlLmdhbW1hUHJvb2Y/LnQgfHwgJyd9JHtkZWxpbWV0ZXJ9JHtzaGFyZS5nYW1tYVByb29mPy52IHx8ICcnfSR7ZGVsaW1ldGVyfSR7XG4gICAgICBzaGFyZS5nYW1tYVByb29mPy53IHx8ICcnXG4gICAgfSR7ZGVsaW1ldGVyfSR7c2hhcmUuZ2FtbWFQcm9vZj8ucyB8fCAnJ30ke2RlbGltZXRlcn0ke3NoYXJlLmdhbW1hUHJvb2Y/LnMxIHx8ICcnfSR7ZGVsaW1ldGVyfSR7XG4gICAgICBzaGFyZS5nYW1tYVByb29mPy5zMiB8fCAnJ1xuICAgIH0ke2RlbGltZXRlcn0ke3NoYXJlLmdhbW1hUHJvb2Y/LnQxIHx8ICcnfSR7ZGVsaW1ldGVyfSR7c2hhcmUuZ2FtbWFQcm9vZj8udDIgfHwgJyd9JHtkZWxpbWV0ZXJ9JHtcbiAgICAgIHNoYXJlLmdhbW1hUHJvb2Y/LnUgfHwgJydcbiAgICB9JHtkZWxpbWV0ZXJ9JHtzaGFyZS5nYW1tYVByb29mPy54IHx8ICcnfSR7ZGVsaW1ldGVyfSR7c2hhcmUud1Byb29mPy56IHx8ICcnfSR7ZGVsaW1ldGVyfSR7XG4gICAgICBzaGFyZS53UHJvb2Y/Lnpwcm0gfHwgJydcbiAgICB9JHtkZWxpbWV0ZXJ9JHtzaGFyZS53UHJvb2Y/LnQgfHwgJyd9JHtkZWxpbWV0ZXJ9JHtzaGFyZS53UHJvb2Y/LnYgfHwgJyd9JHtkZWxpbWV0ZXJ9JHtcbiAgICAgIHNoYXJlLndQcm9vZj8udyB8fCAnJ1xuICAgIH0ke2RlbGltZXRlcn0ke3NoYXJlLndQcm9vZj8ucyB8fCAnJ30ke2RlbGltZXRlcn0ke3NoYXJlLndQcm9vZj8uczEgfHwgJyd9JHtkZWxpbWV0ZXJ9JHtcbiAgICAgIHNoYXJlLndQcm9vZj8uczIgfHwgJydcbiAgICB9JHtkZWxpbWV0ZXJ9JHtzaGFyZS53UHJvb2Y/LnQxIHx8ICcnfSR7ZGVsaW1ldGVyfSR7c2hhcmUud1Byb29mPy50MiB8fCAnJ30ke2RlbGltZXRlcn0ke1xuICAgICAgc2hhcmUud1Byb29mPy51IHx8ICcnXG4gICAgfSR7ZGVsaW1ldGVyfSR7c2hhcmUud1Byb29mPy54IHx8ICcnfWAsXG4gIH07XG59XG5cbi8qKlxuICogcGFyc2VzIEQgc2hhcmUgZnJvbSBzaWduYXR1cmUgc2hhcmUgcmVjb3JkXG4gKiBAcGFyYW0gc2hhcmUgLSBzaWduYXR1cmUgc2hhcmUgcmVjb3JkXG4gKiBAcmV0dXJucyBEIFNoYXJlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZURTaGFyZShzaGFyZTogU2lnbmF0dXJlU2hhcmVSZWNvcmQpOiBEU2hhcmUge1xuICBjb25zdCBzaGFyZXMgPSBzaGFyZS5zaGFyZS5zcGxpdChkZWxpbWV0ZXIpO1xuICB2YWxpZGF0ZVNoYXJlc0xlbmd0aChzaGFyZXMsIDIsICdEJyk7XG5cbiAgcmV0dXJuIHtcbiAgICBpOiBnZXRQYXJ0aWNpcGFudEluZGV4KHNoYXJlLnRvKSxcbiAgICBqOiBnZXRQYXJ0aWNpcGFudEluZGV4KHNoYXJlLmZyb20pLFxuICAgIGRlbHRhOiBzaGFyZXNbMF0sXG4gICAgR2FtbWE6IHNoYXJlc1sxXSxcbiAgfTtcbn1cblxuLyoqXG4gKiBjb252ZXJ0IEQgc2hhcmUgdG8gc2lnbmF0dXJlIHNoYXJlIHJlY29yZFxuICogQHBhcmFtIHNoYXJlIC0gRCBzaGFyZVxuICogQHJldHVybnMgc2lnbmF0dXJlIHNoYXJlIHJlY29yZFxuICovXG5leHBvcnQgZnVuY3Rpb24gY29udmVydERTaGFyZShzaGFyZTogRFNoYXJlKTogU2lnbmF0dXJlU2hhcmVSZWNvcmQge1xuICByZXR1cm4ge1xuICAgIHRvOiBnZXRQYXJ0aWNpcGFudEZyb21JbmRleChzaGFyZS5pKSxcbiAgICBmcm9tOiBnZXRQYXJ0aWNpcGFudEZyb21JbmRleChzaGFyZS5qKSxcbiAgICBzaGFyZTogYCR7c2hhcmUuZGVsdGF9JHtkZWxpbWV0ZXJ9JHtzaGFyZS5HYW1tYX1gLFxuICB9O1xufVxuXG4vKipcbiAqIHBhcnNlcyBTIGFuZCBEIHNoYXJlIGZyb20gc2lnbmF0dXJlIHNoYXJlIHJlY29yZFxuICogQHBhcmFtIHNoYXJlIC0gc2lnbmF0dXJlIHNoYXJlIHJlY29yZFxuICogQHJldHVybnMgT2JqZWN0IGNvbnRhaW5pbmcgUyBhbmQgRCBTaGFyZVxuICovXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VTRFNoYXJlKHNoYXJlOiBTaWduYXR1cmVTaGFyZVJlY29yZCk6IHsgc1NoYXJlOiBTaWduYXR1cmVTaGFyZTsgZFNoYXJlOiBEU2hhcmUgfSB7XG4gIGNvbnN0IHNoYXJlcyA9IHNoYXJlLnNoYXJlLnNwbGl0KHNlY29uZGFyeURlbGltZXRlcik7XG4gIHZhbGlkYXRlU2hhcmVzTGVuZ3RoKHNoYXJlcywgMiwgJ1NEJyk7XG5cbiAgcmV0dXJuIHtcbiAgICBzU2hhcmU6IHBhcnNlU2lnbmF0dXJlU2hhcmUoeyB0bzogc2hhcmUudG8sIGZyb206IHNoYXJlLmZyb20sIHNoYXJlOiBzaGFyZXNbMF0gfSksXG4gICAgZFNoYXJlOiBwYXJzZURTaGFyZSh7IHRvOiBzaGFyZS50bywgZnJvbTogc2hhcmUuZnJvbSwgc2hhcmU6IHNoYXJlc1sxXSB9KSxcbiAgfTtcbn1cblxuLyoqXG4gKiBjb252ZXJ0IFMgYW5kIEQgc2hhcmUgdG8gc2lnbmF0dXJlIHNoYXJlIHJlY29yZFxuICogQHBhcmFtIHNoYXJlIC0gUyBhbmQgRCBzaGFyZSBpbiBhIG9iamVjdFxuICogQHJldHVybnMgc2lnbmF0dXJlIHNoYXJlIHJlY29yZFxuICovXG5leHBvcnQgZnVuY3Rpb24gY29udmVydFNEU2hhcmUoc2hhcmU6IHsgc1NoYXJlOiBTU2hhcmU7IGRTaGFyZTogRFNoYXJlIH0pOiBTaWduYXR1cmVTaGFyZVJlY29yZCB7XG4gIHJldHVybiB7XG4gICAgdG86IGdldFBhcnRpY2lwYW50RnJvbUluZGV4KHNoYXJlLmRTaGFyZS5pKSxcbiAgICBmcm9tOiBnZXRQYXJ0aWNpcGFudEZyb21JbmRleChzaGFyZS5kU2hhcmUuaiksXG4gICAgc2hhcmU6IGAke3NoYXJlLnNTaGFyZS5SfSR7ZGVsaW1ldGVyfSR7c2hhcmUuc1NoYXJlLnN9JHtkZWxpbWV0ZXJ9JHtzaGFyZS5zU2hhcmUueX0ke3NlY29uZGFyeURlbGltZXRlcn0ke3NoYXJlLmRTaGFyZS5kZWx0YX0ke2RlbGltZXRlcn0ke3NoYXJlLmRTaGFyZS5HYW1tYX1gLFxuICB9O1xufVxuXG4vKipcbiAqIHBhcnNlcyBzaWduYXR1cmUgc2hhcmUgZnJvbSBzaWduYXR1cmUgc2hhcmUgcmVjb3JkXG4gKiBAcGFyYW0gc2hhcmUgLSBzaWduYXR1cmUgc2hhcmUgcmVjb3JkXG4gKiBAcmV0dXJucyBTaWduYXR1cmUgU2hhcmVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlU2lnbmF0dXJlU2hhcmUoc2hhcmU6IFNpZ25hdHVyZVNoYXJlUmVjb3JkKTogU2lnbmF0dXJlU2hhcmUge1xuICBjb25zdCBzaGFyZXMgPSBzaGFyZS5zaGFyZS5zcGxpdChkZWxpbWV0ZXIpO1xuICB2YWxpZGF0ZVNoYXJlc0xlbmd0aChzaGFyZXMsIDMsICdTaWduYXR1cmUnKTtcblxuICByZXR1cm4ge1xuICAgIGk6IGdldFBhcnRpY2lwYW50SW5kZXgoc2hhcmUudG8pLFxuICAgIFI6IHNoYXJlc1swXSxcbiAgICBzOiBzaGFyZXNbMV0sXG4gICAgeTogc2hhcmVzWzJdLFxuICB9O1xufVxuXG4vKipcbiAqIGNvbnZldHMgY29tYmluZWQgc2lnbmF0dXJlIHRvIHNpZ25hdHVyZSBzaGFyZSByZWNvcmRcbiAqIEBwYXJhbSBzaWduYXR1cmUgLSBjb21iaW5lZCBzaWduYXR1cmUgc2hhcmVcbiAqIEBwYXJhbSB1c2VySW5kZXggLSB1c2VyIGluZGV4LCBlaXRoZXIgMSAodXNlcikgb3IgMiAoYmFja3VwKVxuICogQHJldHVybnMgc2lnbmF0dXJlIHNoYXJlIHJlY29yZFxuICovXG5leHBvcnQgZnVuY3Rpb24gY29udmVydENvbWJpbmVkU2lnbmF0dXJlKHNpZ25hdHVyZTogU2lnbmF0dXJlLCB1c2VySW5kZXg6IG51bWJlcik6IFNpZ25hdHVyZVNoYXJlUmVjb3JkIHtcbiAgcmV0dXJuIHtcbiAgICB0bzogU2lnbmF0dXJlU2hhcmVUeXBlLkJJVEdPLFxuICAgIGZyb206IGdldFBhcnRpY2lwYW50RnJvbUluZGV4KHVzZXJJbmRleCksXG4gICAgc2hhcmU6IGAke3NpZ25hdHVyZS5yZWNpZH0ke2RlbGltZXRlcn0ke3NpZ25hdHVyZS5yfSR7ZGVsaW1ldGVyfSR7c2lnbmF0dXJlLnN9JHtkZWxpbWV0ZXJ9JHtzaWduYXR1cmUueX1gLFxuICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VDb21iaW5lZFNpZ25hdHVyZShzaGFyZTogU2lnbmF0dXJlU2hhcmVSZWNvcmQpOiBTaWduYXR1cmUge1xuICBjb25zdCBzaGFyZXMgPSBzaGFyZS5zaGFyZS5zcGxpdChkZWxpbWV0ZXIpO1xuICB2YWxpZGF0ZVNoYXJlc0xlbmd0aChzaGFyZXMsIDMsICdTaWduYXR1cmUnKTtcblxuICByZXR1cm4ge1xuICAgIHJlY2lkOiBOdW1iZXIoc2hhcmVzWzBdKSxcbiAgICByOiBzaGFyZXNbMV0sXG4gICAgczogc2hhcmVzWzJdLFxuICAgIHk6IHNoYXJlc1szXSxcbiAgfTtcbn1cblxuLyoqXG4gKiBjb252ZXJ0IHNpZ25hdHVyZSBzaGFyZSB0byBzaWduYXR1cmUgc2hhcmUgcmVjb3JkXG4gKiBAcGFyYW0gc2hhcmUgLSBTaWduYXR1cmUgc2hhcmVcbiAqIEByZXR1cm5zIHNpZ25hdHVyZSBzaGFyZSByZWNvcmRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNvbnZlcnRTaWduYXR1cmVTaGFyZShcbiAgc2hhcmU6IFNpZ25hdHVyZVNoYXJlLFxuICBzZW5kZXJJbmRleDogbnVtYmVyLFxuICByZWNpcGllbnRJbmRleDogbnVtYmVyXG4pOiBTaWduYXR1cmVTaGFyZVJlY29yZCB7XG4gIHJldHVybiB7XG4gICAgdG86IGdldFBhcnRpY2lwYW50RnJvbUluZGV4KHJlY2lwaWVudEluZGV4KSxcbiAgICBmcm9tOiBnZXRQYXJ0aWNpcGFudEZyb21JbmRleChzZW5kZXJJbmRleCksXG4gICAgc2hhcmU6IGAke3NoYXJlLlJ9JHtkZWxpbWV0ZXJ9JHtzaGFyZS5zfSR7ZGVsaW1ldGVyfSR7c2hhcmUueX1gLFxuICB9O1xufVxuXG4vKipcbiAqIGNvbnZlcnRzIEIgc2hhcmUgdG8gc2lnbmF0dXJlIHNoYXJlIHJlY29yZFxuICogQHBhcmFtIHNoYXJlIC0gQiBzaGFyZVxuICogQHJldHVybnMgc2lnbmF0dXJlIHNoYXJlIHJlY29yZFxuICovXG5leHBvcnQgZnVuY3Rpb24gY29udmVydEJTaGFyZShzaGFyZTogQlNoYXJlKTogU2lnbmF0dXJlU2hhcmVSZWNvcmQge1xuICByZXR1cm4ge1xuICAgIHRvOiBTaWduYXR1cmVTaGFyZVR5cGUuQklUR08sXG4gICAgZnJvbTogZ2V0UGFydGljaXBhbnRGcm9tSW5kZXgoc2hhcmUuaSksXG4gICAgc2hhcmU6IGAke3NoYXJlLmJldGF9JHtkZWxpbWV0ZXJ9JHtzaGFyZS5nYW1tYX0ke2RlbGltZXRlcn0ke3NoYXJlLmt9JHtkZWxpbWV0ZXJ9JHtzaGFyZS5udX0ke2RlbGltZXRlcn0ke3NoYXJlLnd9JHtkZWxpbWV0ZXJ9JHtzaGFyZS55fSR7ZGVsaW1ldGVyfSR7c2hhcmUubH0ke2RlbGltZXRlcn0ke3NoYXJlLm19JHtkZWxpbWV0ZXJ9JHtzaGFyZS5ufSR7ZGVsaW1ldGVyfSR7c2hhcmUubnRpbGRlfSR7ZGVsaW1ldGVyfSR7c2hhcmUuaDF9JHtkZWxpbWV0ZXJ9JHtzaGFyZS5oMn0ke2RlbGltZXRlcn0ke3NoYXJlLmNrfWAsXG4gIH07XG59XG5cbi8qKlxuICogcGFyc2VzIEIgc2hhcmUgZnJvbSBzaWduYXR1cmUgc2hhcmUgcmVjb3JkXG4gKiBAcGFyYW0gc2hhcmUgQiBzaGFyZSByZWNvcmRcbiAqIEByZXR1cm5zIEIgU2hhcmVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlQlNoYXJlKHNoYXJlOiBTaWduYXR1cmVTaGFyZVJlY29yZCk6IEJTaGFyZSB7XG4gIGNvbnN0IHNoYXJlcyA9IHNoYXJlLnNoYXJlLnNwbGl0KGRlbGltZXRlcik7XG4gIHZhbGlkYXRlU2hhcmVzTGVuZ3RoKHNoYXJlcywgMTMsICdCJyk7XG5cbiAgcmV0dXJuIHtcbiAgICBpOiBnZXRQYXJ0aWNpcGFudEluZGV4KHNoYXJlLnRvKSxcbiAgICBiZXRhOiBzaGFyZXNbMF0sXG4gICAgZ2FtbWE6IHNoYXJlc1sxXSxcbiAgICBrOiBzaGFyZXNbMl0sXG4gICAgbnU6IHNoYXJlc1szXSxcbiAgICB3OiBzaGFyZXNbNF0sXG4gICAgeTogc2hhcmVzWzVdLFxuICAgIGw6IHNoYXJlc1s2XSxcbiAgICBtOiBzaGFyZXNbN10sXG4gICAgbjogc2hhcmVzWzhdLFxuICAgIG50aWxkZTogc2hhcmVzWzldLFxuICAgIGgxOiBzaGFyZXNbMTBdLFxuICAgIGgyOiBzaGFyZXNbMTFdLFxuICAgIGNrOiBzaGFyZXNbMTJdLFxuICB9O1xufVxuXG4vKipcbiAqIGNvbnZlcnRzIE8gc2hhcmUgdG8gc2lnbmF0dXJlIHNoYXJlIHJlY29yZFxuICogQHBhcmFtIHNoYXJlIE8gc2hhcmVcbiAqIEByZXR1cm5zIHNpZ25hdHVyZSBzaGFyZSByZWNvcmRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNvbnZlcnRPU2hhcmUoc2hhcmU6IE9TaGFyZSk6IFNpZ25hdHVyZVNoYXJlUmVjb3JkIHtcbiAgcmV0dXJuIHtcbiAgICB0bzogU2lnbmF0dXJlU2hhcmVUeXBlLkJJVEdPLFxuICAgIGZyb206IGdldFBhcnRpY2lwYW50RnJvbUluZGV4KHNoYXJlLmkpLFxuICAgIHNoYXJlOiBgJHtzaGFyZS5HYW1tYX0ke2RlbGltZXRlcn0ke3NoYXJlLmRlbHRhfSR7ZGVsaW1ldGVyfSR7c2hhcmUua30ke2RlbGltZXRlcn0ke3NoYXJlLm9taWNyb259JHtkZWxpbWV0ZXJ9JHtzaGFyZS55fWAsXG4gIH07XG59XG5cbi8qKlxuICogcGFyc2VzIE8gc2hhcmUgZnJvbSBzaWduYXR1cmUgc2hhcmUgcmVjb3JkXG4gKiBAcGFyYW0gc2hhcmUgTyBzaGFyZSByZWNvcmRcbiAqIEByZXR1cm5zIE8gU2hhcmVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlT1NoYXJlKHNoYXJlOiBTaWduYXR1cmVTaGFyZVJlY29yZCk6IE9TaGFyZSB7XG4gIGNvbnN0IHNoYXJlcyA9IHNoYXJlLnNoYXJlLnNwbGl0KGRlbGltZXRlcik7XG4gIHZhbGlkYXRlU2hhcmVzTGVuZ3RoKHNoYXJlcywgNSwgJ08nKTtcblxuICByZXR1cm4ge1xuICAgIGk6IGdldFBhcnRpY2lwYW50SW5kZXgoc2hhcmUudG8pLFxuICAgIEdhbW1hOiBzaGFyZXNbMF0sXG4gICAgZGVsdGE6IHNoYXJlc1sxXSxcbiAgICBrOiBzaGFyZXNbMl0sXG4gICAgb21pY3Jvbjogc2hhcmVzWzNdLFxuICAgIHk6IHNoYXJlc1s0XSxcbiAgfTtcbn1cblxuLyoqXG4gKiBnZXRzIHBhcnRpY2lwYW50IGluZGV4XG4gKiBAcGFyYW0gcGFydGljaXBhbnQgLSBwYXJ0aWNpcGFudHMgKHVzZXIsIGJhY2t1cCwgb3IgYml0Z28pXG4gKiBAcmV0dXJucyBpbmRleCAoMSwgMiwgMHIgMylcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFBhcnRpY2lwYW50SW5kZXgocGFydGljaXBhbnQ6ICd1c2VyJyB8ICdiYWNrdXAnIHwgJ2JpdGdvJyk6IG51bWJlciB7XG4gIHN3aXRjaCAocGFydGljaXBhbnQpIHtcbiAgICBjYXNlICd1c2VyJzpcbiAgICAgIHJldHVybiAxO1xuICAgIGNhc2UgJ2JhY2t1cCc6XG4gICAgICByZXR1cm4gMjtcbiAgICBjYXNlICdiaXRnbyc6XG4gICAgICByZXR1cm4gMztcbiAgICBkZWZhdWx0OlxuICAgICAgdGhyb3cgRXJyb3IoJ1Vua293biBwYXJ0aWNpcGFudCcpO1xuICB9XG59XG5cbi8qKlxuICogZ2V0cyBwYXJ0aWNpcGFudCBuYW1lIGJ5IGluZGV4XG4gKiBAcGFyYW0gaW5kZXggcGFydGljaXBhbnQgaW5kZXhcbiAqIEByZXR1cm5zIHBhcnRpY2lwYW50IG5hbWVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFBhcnRpY2lwYW50RnJvbUluZGV4KGluZGV4OiBudW1iZXIpOiBTaWduYXR1cmVTaGFyZVR5cGUge1xuICBzd2l0Y2ggKGluZGV4KSB7XG4gICAgY2FzZSAxOlxuICAgICAgcmV0dXJuIFNpZ25hdHVyZVNoYXJlVHlwZS5VU0VSO1xuICAgIGNhc2UgMjpcbiAgICAgIHJldHVybiBTaWduYXR1cmVTaGFyZVR5cGUuQkFDS1VQO1xuICAgIGNhc2UgMzpcbiAgICAgIHJldHVybiBTaWduYXR1cmVTaGFyZVR5cGUuQklUR087XG4gICAgZGVmYXVsdDpcbiAgICAgIHRocm93IG5ldyBFcnJvcihgVW5rbm93biBwYXJ0aWNpcGFudCBpbmRleCAke2luZGV4fWApO1xuICB9XG59XG5cbi8qKlxuICogSGVscGVyIGZ1bmN0aW9uIHRvIHZlcmlmeSB1LXZhbHVlIHdhbGxldCBzaWduYXR1cmVzIGZvciB0aGUgYml0Z28tdXNlciBhbmQgYml0Z28tYmFja3VwIHNoYXJlcy5cbiAqIEBwYXJhbSBwYXJhbXNcbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHZlcmlmeVdhbGxldFNpZ25hdHVyZShwYXJhbXM6IHtcbiAgd2FsbGV0U2lnbmF0dXJlOiBwZ3AuS2V5O1xuICBiaXRnb1B1YjogcGdwLktleTtcbiAgY29tbW9uS2V5Y2hhaW46IHN0cmluZztcbiAgdXNlcktleUlkOiBzdHJpbmc7XG4gIGJhY2t1cEtleUlkOiBzdHJpbmc7XG4gIGRlY3J5cHRlZFNoYXJlOiBzdHJpbmc7XG4gIHZlcmlmaWVySW5kZXg6IDEgfCAyO1xufSk6IFByb21pc2U8dm9pZD4ge1xuICBjb25zdCByYXdOb3RhdGlvbnMgPSBhd2FpdCBjb21tb25WZXJpZnlXYWxsZXRTaWduYXR1cmUocGFyYW1zKTtcbiAgY29uc3QgcHVibGljVVZhbHVlUmF3Tm90YXRpb25JbmRleCA9IDIgKyBwYXJhbXMudmVyaWZpZXJJbmRleDtcblxuICAvLyBEZXJpdmUgcHVibGljIGZvcm0gb2YgdS12YWx1ZVxuICBjb25zdCBwdWJsaWNVVmFsdWUgPSBlY2MucG9pbnRGcm9tU2NhbGFyKEJ1ZmZlci5mcm9tKHBhcmFtcy5kZWNyeXB0ZWRTaGFyZS5zbGljZSgwLCA2NCksICdoZXgnKSwgdHJ1ZSk7XG4gIGFzc2VydChwdWJsaWNVVmFsdWUgIT09IG51bGwsICdudWxsIHB1YmxpYyB1LXZhbHVlJyk7XG4gIC8vIFZlcmlmeSB0aGF0IHRoZSB1IHZhbHVlICsgY2hhaW5jb2RlIGlzIGVxdWFsIHRvIHRoZSBwcm9vZiByZXRyaWV2ZWQgZnJvbSB0aGUgcmF3IG5vdGF0aW9uc1xuICBhc3NlcnQoXG4gICAgQnVmZmVyLmZyb20ocHVibGljVVZhbHVlKS50b1N0cmluZygnaGV4JykgKyBwYXJhbXMuZGVjcnlwdGVkU2hhcmUuc2xpY2UoNjQpID09PVxuICAgICAgQnVmZmVyLmZyb20ocmF3Tm90YXRpb25zW3B1YmxpY1VWYWx1ZVJhd05vdGF0aW9uSW5kZXhdLnZhbHVlKS50b1N0cmluZygpLFxuICAgICdiaXRnbyBzaGFyZSBtaXNtYXRjaCdcbiAgKTtcbn1cbiJdfQ==
|
|
820
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWNkc2EuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvYml0Z28vdHNzL2VjZHNhL2VjZHNhLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSx3REFBdUQ7QUFDdkQsbUNBc0JpQjtBQUNqQix1Q0FBc0c7QUFDdEcsb0NBQTRDO0FBVTVDLHNDQUEwRjtBQUMxRixvREFBc0M7QUFDdEMsb0RBQTRCO0FBQzVCLDhDQUE2QztBQUM3Qyw2Q0FBK0I7QUFDL0IsZ0RBQXdCO0FBR3hCLG9EQUF3RDtBQUV4RCxNQUFNLEdBQUcsR0FBRyxJQUFJLFdBQUssRUFBRSxDQUFDO0FBRXhCOzs7Ozs7OztHQVFHO0FBQ0ksS0FBSyxVQUFVLGlCQUFpQixDQUNyQyxRQUFrQixFQUNsQixnQkFBcUMsRUFDckMsY0FBc0I7SUFFdEIsTUFBTSxPQUFPLEdBQWEsRUFBRSxDQUFDO0lBRTdCLElBQUksV0FBK0IsQ0FBQztJQUNwQyxJQUFJLFVBQThCLENBQUM7SUFDbkMsSUFBSSxZQUFnQyxDQUFDO0lBRXJDLEtBQUssTUFBTSxlQUFlLElBQUksZ0JBQWdCLEVBQUU7UUFDOUMsTUFBTSxNQUFNLEdBQUcsTUFBTSxhQUFhLENBQUMsZUFBZSxFQUFFLGVBQWUsQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUVuRixRQUFRLGVBQWUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFO1lBQ2hDLEtBQUssQ0FBQztnQkFDSixVQUFVLEdBQUcsTUFBTSxDQUFDO2dCQUNwQixNQUFNO1lBQ1IsS0FBSyxDQUFDO2dCQUNKLFlBQVksR0FBRyxNQUFNLENBQUM7Z0JBQ3RCLE1BQU07WUFDUixLQUFLLENBQUM7Z0JBQ0osV0FBVyxHQUFHLE1BQU0sQ0FBQztnQkFDckIsTUFBTTtZQUNSO2dCQUNFLE1BQU0sSUFBSSxLQUFLLENBQUMsc0JBQXNCLENBQUMsQ0FBQztTQUMzQztRQUVELE9BQU8sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7S0FDdEI7SUFFRCxJQUFJLENBQUMsV0FBVyxFQUFFO1FBQ2hCLE1BQU0sSUFBSSxLQUFLLENBQUMsdUJBQXVCLENBQUMsQ0FBQztLQUMxQztJQUVELE1BQU0sV0FBVyxHQUFHLEdBQUcsQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLE1BQU0sRUFBRSxPQUFPLENBQUMsQ0FBQztJQUM3RCxJQUFJLFdBQVcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxHQUFHLFdBQVcsQ0FBQyxNQUFNLENBQUMsU0FBUyxLQUFLLGNBQWMsRUFBRTtRQUMxRSxNQUFNLElBQUksS0FBSyxDQUFDLCtCQUErQixDQUFDLENBQUM7S0FDbEQ7SUFFRCxNQUFNLGVBQWUsR0FBb0I7UUFDdkMsTUFBTSxFQUFFLFFBQVEsQ0FBQyxNQUFNO1FBQ3ZCLFdBQVc7UUFDWCxZQUFZO1FBQ1osVUFBVTtLQUNYLENBQUM7SUFFRixPQUFPO1FBQ0wsZUFBZTtRQUNmLGNBQWM7S0FDZixDQUFDO0FBQ0osQ0FBQztBQW5ERCw4Q0FtREM7QUFFRDs7Ozs7R0FLRztBQUNJLEtBQUssVUFBVSxtQkFBbUIsQ0FDdkMsTUFBNEIsRUFDNUIsTUFBNEI7SUFFNUIsSUFBSSxNQUFNLENBQUMsQ0FBQyxLQUFLLHdCQUFnQixDQUFDLElBQUksRUFBRTtRQUN0QyxNQUFNLElBQUksS0FBSyxDQUFDLG1EQUFtRCxDQUFDLENBQUM7S0FDdEU7SUFFRCxJQUFJLE1BQU0sQ0FBQyxDQUFDLEtBQUssd0JBQWdCLENBQUMsSUFBSSxJQUFJLE1BQU0sQ0FBQyxDQUFDLEtBQUssd0JBQWdCLENBQUMsS0FBSyxFQUFFO1FBQzdFLE1BQU0sSUFBSSxLQUFLLENBQUMsa0NBQWtDLENBQUMsQ0FBQztLQUNyRDtJQUNELE9BQU8sTUFBTSxHQUFHLENBQUMsU0FBUyxDQUFDLE1BQU0sRUFBRSxNQUFNLENBQUMsQ0FBQztBQUM3QyxDQUFDO0FBWkQsa0RBWUM7QUFFRDs7Ozs7R0FLRztBQUNJLEtBQUssVUFBVSx5QkFBeUIsQ0FBQyxNQUFjLEVBQUUsTUFBYztJQUM1RSxJQUFJLE1BQU0sQ0FBQyxDQUFDLEtBQUssd0JBQWdCLENBQUMsSUFBSSxFQUFFO1FBQ3RDLE1BQU0sSUFBSSxLQUFLLENBQUMsNENBQTRDLENBQUMsQ0FBQztLQUMvRDtJQUNELElBQUksTUFBTSxDQUFDLENBQUMsS0FBSyx3QkFBZ0IsQ0FBQyxJQUFJLElBQUksTUFBTSxDQUFDLENBQUMsS0FBSyx3QkFBZ0IsQ0FBQyxLQUFLLEVBQUU7UUFDN0UsTUFBTSxJQUFJLEtBQUssQ0FBQywyQ0FBMkMsQ0FBQyxDQUFDO0tBQzlEO0lBQ0QsT0FBTyxHQUFHLENBQUMsZ0JBQWdCLENBQUMsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLENBQUMsQ0FBQztBQUNsRCxDQUFDO0FBUkQsOERBUUM7QUFFRDs7OztHQUlHO0FBQ0ksS0FBSyxVQUFVLDhCQUE4QixDQUFDLE1BQWM7SUFDakUsSUFBSSxNQUFNLENBQUMsQ0FBQyxLQUFLLHdCQUFnQixDQUFDLElBQUksRUFBRTtRQUN0QyxNQUFNLElBQUksS0FBSyxDQUFDLDRDQUE0QyxDQUFDLENBQUM7S0FDL0Q7SUFDRCxPQUFPLEdBQUcsQ0FBQyxXQUFXLENBQUM7UUFDckIsTUFBTSxFQUFFLE1BQU07UUFDZCxTQUFTLEVBQUU7WUFDVCxDQUFDLEVBQUUsd0JBQWdCLENBQUMsS0FBSztZQUN6QixDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUM7U0FDWjtLQUNGLENBQUMsQ0FBQztBQUNMLENBQUM7QUFYRCx3RUFXQztBQUVEOzs7Ozs7R0FNRztBQUNJLEtBQUssVUFBVSx3QkFBd0IsQ0FDNUMsTUFBYyxFQUNkLE1BQWMsRUFDZCxPQUFlLEVBQ2YsT0FBYSxnQkFBZ0IsQ0FBQyxXQUFXLENBQUM7SUFFMUMsSUFBSSxNQUFNLENBQUMsQ0FBQyxLQUFLLHdCQUFnQixDQUFDLElBQUksRUFBRTtRQUN0QyxNQUFNLElBQUksS0FBSyxDQUFDLDRDQUE0QyxDQUFDLENBQUM7S0FDL0Q7SUFFRCxJQUFJLE1BQU0sQ0FBQyxDQUFDLEtBQUssd0JBQWdCLENBQUMsSUFBSSxJQUFJLE1BQU0sQ0FBQyxDQUFDLEtBQUssd0JBQWdCLENBQUMsS0FBSyxFQUFFO1FBQzdFLE1BQU0sSUFBSSxLQUFLLENBQUMsK0NBQStDLENBQUMsQ0FBQztLQUNsRTtJQUNELE9BQU8sR0FBRyxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQztBQUNqRCxDQUFDO0FBZEQsNERBY0M7QUFJRDs7Ozs7Ozs7Ozs7Ozs7R0FjRztBQUNJLEtBQUssVUFBVSxnQkFBZ0IsQ0FDcEMsS0FBZ0IsRUFDaEIsUUFBZ0IsRUFDaEIsV0FBbUIsRUFDbkIsV0FBd0IsRUFDeEIsU0FBd0IsRUFDeEIsS0FBaUMsRUFDakMsV0FBb0IsRUFDcEIsUUFBaUIsRUFDakIsaUJBQTBCLEVBQzFCLFdBQW9CLEVBQ3BCLGdCQUF5QjtJQUV6QixJQUFJLFNBQVMsS0FBSyxxQkFBYSxDQUFDLE1BQU0sSUFBSSxLQUFLLENBQUMsQ0FBQyxLQUFLLHdCQUFnQixDQUFDLEtBQUssRUFBRTtRQUM1RSxNQUFNLElBQUksS0FBSyxDQUFDLDBDQUEwQyxDQUFDLENBQUM7S0FDN0Q7SUFDRCxJQUFJLGNBQW9DLENBQUM7SUFDekMsSUFBSSxpQkFBcUMsQ0FBQztJQUUxQyxRQUFRLFNBQVMsRUFBRTtRQUNqQixLQUFLLHFCQUFhLENBQUMsTUFBTTtZQUN2QixnQkFBTSxDQUFDLFdBQVcsRUFBRSw4QkFBOEIsQ0FBQyxDQUFDO1lBQ3BELE1BQU0sTUFBTSxHQUFHLEtBQWUsQ0FBQztZQUMvQixjQUFjLEdBQUcsYUFBYSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQ3ZDLGNBQWMsQ0FBQyxRQUFRLEdBQUcsUUFBUSxDQUFDO1lBQ25DLGNBQWMsQ0FBQyxXQUFXLEdBQUcsV0FBVyxDQUFDO1lBQ3pDLGNBQWMsQ0FBQyxpQkFBaUIsR0FBRyxpQkFBaUIsQ0FBQztZQUNyRCxNQUFNLDJCQUFrQixDQUN0QixLQUFLLEVBQ0wsUUFBUSxFQUNSLFdBQVcsRUFDWCxjQUFjLEVBQ2QsV0FBVyxFQUNYLFdBQVcsRUFDWCxPQUFPLEVBQ1AsTUFBTSxFQUNOLGdCQUFnQixDQUNqQixDQUFDO1lBQ0YsaUJBQWlCLEdBQUcsTUFBTSx5QkFBeUIsQ0FDakQsS0FBSyxFQUNMLFFBQVEsRUFDUixXQUFXLEVBQ1gseUJBQWlCLENBQUMsTUFBTSxFQUN4QixXQUFXLENBQ1osQ0FBQztZQUNGLE1BQU07UUFDUixLQUFLLHFCQUFhLENBQUMsT0FBTztZQUN4QixNQUFNLFdBQVcsR0FBRyxLQUFpQixDQUFDO1lBQ3RDLE1BQU0sYUFBYSxHQUFHLGNBQWMsQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDLENBQUM7WUFDMUQsTUFBTSxZQUFZLEdBQUcsYUFBYSxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUN2RCxjQUFjLEdBQUc7Z0JBQ2YsRUFBRSxFQUFFLDBCQUFrQixDQUFDLEtBQUs7Z0JBQzVCLElBQUksRUFBRSx1QkFBdUIsQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztnQkFDbkQsS0FBSyxFQUFFLEdBQUcsYUFBYSxDQUFDLEtBQUssR0FBRywwQkFBa0IsR0FBRyxZQUFZLENBQUMsS0FBSyxFQUFFO2FBQzFFLENBQUM7WUFDRixNQUFNLDJCQUFrQixDQUFDLEtBQUssRUFBRSxRQUFRLEVBQUUsV0FBVyxFQUFFLGNBQWMsRUFBRSxXQUFXLEVBQUUsV0FBVyxFQUFFLE9BQU8sQ0FBQyxDQUFDO1lBQzFHLGlCQUFpQixHQUFHLE1BQU0seUJBQXlCLENBQ2pELEtBQUssRUFDTCxRQUFRLEVBQ1IsV0FBVyxFQUNYLHlCQUFpQixDQUFDLE1BQU0sRUFDeEIsV0FBVyxDQUNaLENBQUM7WUFDRixNQUFNO1FBQ1IsS0FBSyxxQkFBYSxDQUFDLE1BQU07WUFDdkIsTUFBTSxNQUFNLEdBQUcsS0FBZSxDQUFDO1lBQy9CLGNBQWMsR0FBRyxxQkFBcUIsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO1lBQ3JELE1BQU0sMkJBQWtCLENBQUMsS0FBSyxFQUFFLFFBQVEsRUFBRSxXQUFXLEVBQUUsY0FBYyxFQUFFLFdBQVcsRUFBRSxXQUFXLEVBQUUsT0FBTyxDQUFDLENBQUM7WUFDMUcsaUJBQWlCLEdBQUcsTUFBTSxDQUFDO1lBQzNCLE1BQU07UUFDUjtZQUNFLE1BQU0sSUFBSSxLQUFLLENBQUMsNkJBQTZCLENBQUMsQ0FBQztLQUNsRDtJQUVELE9BQU8saUJBQWlCLENBQUM7QUFDM0IsQ0FBQztBQTNFRCw0Q0EyRUM7QUFFRDs7Ozs7OztHQU9HO0FBQ0ksS0FBSyxVQUFVLHlCQUF5QixDQUM3QyxLQUFnQixFQUNoQixRQUFnQixFQUNoQixXQUFtQixFQUNuQixTQUE0QixFQUM1QixXQUF3QjtJQUV4QixJQUFJLGlCQUFxQyxDQUFDO0lBQzFDLE1BQU0sU0FBUyxHQUFHLE1BQU0scUJBQVksQ0FBQyxLQUFLLEVBQUUsUUFBUSxFQUFFLFdBQVcsQ0FBQyxDQUFDO0lBQ25FLElBQUksVUFBVSxDQUFDO0lBQ2YsUUFBUSxXQUFXLEVBQUU7UUFDbkIsS0FBSyxtQkFBVyxDQUFDLEVBQUU7WUFDakIsZ0JBQU0sQ0FBQyxTQUFTLENBQUMsWUFBWSxFQUFFLDRDQUE0QyxDQUFDLENBQUM7WUFDN0UsVUFBVSxHQUFHLFNBQVMsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsZUFBZSxDQUFDO1lBQ3ZELE1BQU07UUFDUixLQUFLLG1CQUFXLENBQUMsT0FBTztZQUN0QixnQkFBTSxDQUFDLFNBQVMsQ0FBQyxRQUFRLEVBQUUsd0NBQXdDLENBQUMsQ0FBQztZQUNyRSxVQUFVLEdBQUcsU0FBUyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxlQUFlLENBQUM7WUFDbkQsTUFBTTtLQUNUO0lBQ0QsSUFBSSxDQUFDLFVBQVUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxNQUFNLEVBQUU7UUFDckMsTUFBTSxJQUFJLEtBQUssQ0FBQywyQkFBMkIsQ0FBQyxDQUFDO0tBQzlDO0lBRUQsTUFBTSxXQUFXLEdBQUcsVUFBVSxDQUFDLFVBQVUsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDdEQsUUFBUSxTQUFTLEVBQUU7UUFDakIsS0FBSyx5QkFBaUIsQ0FBQyxNQUFNO1lBQzNCLGlCQUFpQixHQUFHLFdBQVcsQ0FBQyxXQUFXLENBQUMsQ0FBQztZQUM3QyxNQUFNO1FBQ1IsS0FBSyx5QkFBaUIsQ0FBQyxNQUFNO1lBQzNCLGlCQUFpQixHQUFHLFdBQVcsQ0FBQyxXQUFXLENBQUMsQ0FBQztZQUM3QyxNQUFNO1FBQ1IsS0FBSyx5QkFBaUIsQ0FBQyxTQUFTO1lBQzlCLGlCQUFpQixHQUFHLG1CQUFtQixDQUFDLFdBQVcsQ0FBQyxDQUFDO1lBQ3JELE1BQU07UUFDUjtZQUNFLE1BQU0sSUFBSSxLQUFLLENBQUMsd0JBQXdCLENBQUMsQ0FBQztLQUM3QztJQUVELE9BQU8saUJBQWlCLENBQUM7QUFDM0IsQ0FBQztBQXhDRCw4REF3Q0M7QUFFRDs7Ozs7Ozs7OztHQVVHO0FBQ0ksS0FBSyxVQUFVLGFBQWEsQ0FDakMsUUFBa0IsRUFDbEIsY0FBc0IsRUFDdEIsdUJBQStCLEVBQy9CLFlBQTJDLEVBQzNDLGFBQWEsR0FBRyxJQUFJO0lBRXBCLE1BQU0sTUFBTSxHQUFHLFFBQVEsQ0FBQyxPQUFPLENBQUMsY0FBYyxDQUFDLENBQUM7SUFDaEQsSUFBSSxDQUFDLE1BQU0sRUFBRTtRQUNYLE1BQU0sSUFBSSxLQUFLLENBQUMsbUJBQW1CLENBQUMsQ0FBQztLQUN0QztJQUVELE1BQU0sV0FBVyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUM7UUFDaEMsTUFBTSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUM7UUFDckMsTUFBTSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLFNBQVMsRUFBRSxLQUFLLENBQUM7S0FDOUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUVuQixJQUFJLFlBQVksQ0FBQztJQUNqQixJQUFJLGFBQWEsRUFBRTtRQUNqQixZQUFZLEdBQUcsZ0JBQUssQ0FBQyxjQUFjLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLFNBQVMsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLFFBQVEsRUFBRSxDQUFDO0tBQ3BIO1NBQU07UUFDTCxZQUFZLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxTQUFTLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQztLQUNwSDtJQUNELE1BQU0sa0JBQWtCLEdBQUcsTUFBTSxHQUFHLENBQUMsT0FBTyxDQUFDLEVBQUUsVUFBVSxFQUFFLHVCQUF1QixFQUFFLENBQUMsQ0FBQztJQUV0RixNQUFNLHFCQUFxQixHQUFHLENBQUMsTUFBTSxHQUFHLENBQUMsT0FBTyxDQUFDO1FBQy9DLE9BQU8sRUFBRSxNQUFNLEdBQUcsQ0FBQyxhQUFhLENBQUM7WUFDL0IsSUFBSSxFQUFFLFlBQVk7U0FDbkIsQ0FBQztRQUNGLGNBQWMsRUFBRSxDQUFDLGtCQUFrQixDQUFDO0tBQ3JDLENBQUMsQ0FBVyxDQUFDO0lBRWQsT0FBTztRQUNMLENBQUMsRUFBRSxNQUFNLENBQUMsQ0FBQztRQUNYLENBQUMsRUFBRSxNQUFNLENBQUMsQ0FBQztRQUNYLFdBQVc7UUFDWCxxQkFBcUI7UUFDckIsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBQ1gsUUFBUSxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBQ2xCLGlCQUFpQixFQUFFLE1BQU0sd0JBQWdCLENBQUMsWUFBWSxDQUFDLFVBQVUsRUFBRSxNQUFNLENBQUMsQ0FBQyxFQUFFLE9BQU8sQ0FBQztLQUN0RixDQUFDO0FBQ0osQ0FBQztBQXpDRCxzQ0F5Q0M7QUFFRDs7Ozs7O0dBTUc7QUFDSSxLQUFLLFVBQVUsMEJBQTBCLENBQUMsUUFBcUI7O0lBQ3BFLE9BQU87UUFDTCxDQUFDLEVBQUUsbUJBQW1CLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQztRQUNuQyxDQUFDLEVBQUUsbUJBQW1CLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQztRQUNyQyxXQUFXLEVBQUUsUUFBUSxDQUFDLFdBQVc7UUFDakMscUJBQXFCLEVBQUUsUUFBUSxDQUFDLFlBQVk7UUFDNUMsQ0FBQyxFQUFFLE1BQUEsUUFBUSxDQUFDLENBQUMsbUNBQUksRUFBRTtRQUNuQixpQkFBaUIsRUFBRSxRQUFRLENBQUMsaUJBQWlCO1FBQzdDLFFBQVEsRUFBRSxRQUFRLENBQUMsUUFBUTtLQUM1QixDQUFDO0FBQ0osQ0FBQztBQVZELGdFQVVDO0FBRUQ7Ozs7O0dBS0c7QUFDSSxLQUFLLFVBQVUsYUFBYSxDQUFDLGVBQWtDLEVBQUUsYUFBYSxHQUFHLElBQUk7SUFDMUYsTUFBTSxtQkFBbUIsR0FBRyxNQUFNLEdBQUcsQ0FBQyxPQUFPLENBQUMsRUFBRSxVQUFVLEVBQUUsZUFBZSxDQUFDLHFCQUFxQixFQUFFLENBQUMsQ0FBQztJQUNyRyxNQUFNLEdBQUcsR0FBRyxDQUNWLE1BQU0sR0FBRyxDQUFDLE9BQU8sQ0FBQztRQUNoQixPQUFPLEVBQUUsTUFBTSxHQUFHLENBQUMsV0FBVyxDQUFDLEVBQUUsY0FBYyxFQUFFLGVBQWUsQ0FBQyxNQUFNLENBQUMscUJBQXFCLEVBQUUsQ0FBQztRQUNoRyxjQUFjLEVBQUUsQ0FBQyxtQkFBcUMsQ0FBQztLQUN4RCxDQUFDLENBQ0gsQ0FBQyxJQUFjLENBQUM7SUFFakIsSUFBSSxDQUFTLENBQUM7SUFDZCxJQUFJLGFBQWEsRUFBRTtRQUNqQixNQUFNLFlBQVksR0FBRyxjQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUN0RCxDQUFDLEdBQUcsWUFBWSxDQUFDLEtBQUssQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUM7S0FDakM7U0FBTTtRQUNMLENBQUMsR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztLQUN0QjtJQUVELE9BQU87UUFDTCxDQUFDLEVBQUUsZUFBZSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQzNCLENBQUMsRUFBRSxlQUFlLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDM0IsQ0FBQyxFQUFFLGVBQWUsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUMzQixDQUFDLEVBQUUsZUFBZSxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUM7UUFDbEQsQ0FBQyxFQUFFLENBQUM7UUFDSixTQUFTLEVBQUUsZUFBZSxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUM7UUFDNUQsQ0FBQyxFQUFFLGVBQWUsQ0FBQyxNQUFNLENBQUMsUUFBUTtLQUNuQyxDQUFDO0FBQ0osQ0FBQztBQTFCRCxzQ0EwQkM7QUFFRDs7OztHQUlHO0FBQ0gsU0FBZ0IsWUFBWSxDQUFDLGNBQXNCO0lBQ2pELE9BQU8sY0FBYyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7QUFDckMsQ0FBQztBQUZELG9DQUVDO0FBRVksUUFBQSxTQUFTLEdBQUcsR0FBRyxDQUFDO0FBQ2hCLFFBQUEsa0JBQWtCLEdBQUcsR0FBRyxDQUFDO0FBRXRDLFNBQVMsb0JBQW9CLENBQUMsTUFBZ0IsRUFBRSxjQUFzQixFQUFFLFNBQWlCO0lBQ3ZGLElBQUksTUFBTSxDQUFDLE1BQU0sR0FBRyxjQUFjLEVBQUU7UUFDbEMsTUFBTSxJQUFJLEtBQUssQ0FBQyxXQUFXLFNBQVMsUUFBUSxDQUFDLENBQUM7S0FDL0M7QUFDSCxDQUFDO0FBRUQsU0FBUyxzQkFBc0IsQ0FBQyxNQUFnQixFQUFFLEtBQWEsRUFBRSxHQUFXLEVBQUUsU0FBaUIsRUFBRSxTQUFpQjtJQUNoSCxJQUFJLEtBQUssR0FBRyxLQUFLLENBQUM7SUFDbEIsS0FBSyxJQUFJLENBQUMsR0FBRyxLQUFLLEVBQUUsQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDLEVBQUUsRUFBRTtRQUNoQyxJQUFJLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRTtZQUNiLEtBQUssR0FBRyxJQUFJLENBQUM7U0FDZDthQUFNLElBQUksS0FBSyxFQUFFO1lBQ2hCLE1BQU0sSUFBSSxLQUFLLENBQUMseUJBQXlCLFNBQVMsYUFBYSxTQUFTLFFBQVEsQ0FBQyxDQUFDO1NBQ25GO0tBQ0Y7SUFDRCxPQUFPLEtBQUssQ0FBQztBQUNmLENBQUM7QUFFRDs7OztHQUlHO0FBQ0gsU0FBZ0IsV0FBVyxDQUFDLEtBQTJCO0lBQ3JELE1BQU0sTUFBTSxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLGlCQUFTLENBQUMsQ0FBQztJQUM1QywrRkFBK0Y7SUFDL0YsOENBQThDO0lBQzlDLG9CQUFvQixDQUFDLE1BQU0sRUFBRSxFQUFFLEdBQUcsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0lBQzFDLE1BQU0sUUFBUSxHQUFHLHNCQUFzQixDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxPQUFPLENBQUMsQ0FBQztJQUNyRSxNQUFNLElBQUksR0FBRyxzQkFBc0IsQ0FBQyxNQUFNLEVBQUUsRUFBRSxFQUFFLEVBQUUsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0lBQ2xFLE1BQU0sUUFBUSxHQUFHLElBQUk7UUFDbkIsQ0FBQyxDQUFDLHNCQUFzQixDQUFDLE1BQU0sRUFBRSxFQUFFLEdBQUcsZ0NBQWtCLENBQUMsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLEdBQUcsZ0NBQWtCLENBQUMsQ0FBQyxFQUFFLEdBQUcsRUFBRSxPQUFPLENBQUM7UUFDeEcsQ0FBQyxDQUFDLEtBQUssQ0FBQztJQUVWLE1BQU0sS0FBSyxHQUFnQyxRQUFRO1FBQ2pELENBQUMsQ0FBQztZQUNFLENBQUMsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDO1lBQ1osQ0FBQyxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUM7WUFDWixDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQztZQUNaLENBQUMsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDO1lBQ1osRUFBRSxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUM7WUFDYixFQUFFLEVBQUUsTUFBTSxDQUFDLEVBQUUsQ0FBQztTQUNmO1FBQ0gsQ0FBQyxDQUFDLFNBQVMsQ0FBQztJQUVkLE9BQU87UUFDTCxDQUFDLEVBQUUsbUJBQW1CLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztRQUNoQyxDQUFDLEVBQUUsbUJBQW1CLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQztRQUNsQyxDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQztRQUNaLENBQUMsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDO1FBQ1osTUFBTSxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUM7UUFDakIsRUFBRSxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUM7UUFDYixFQUFFLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQztRQUNiLEtBQUs7UUFDTCxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEVBQUUsRUFBRSxFQUFFLEdBQUcsZ0NBQWtCLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVM7UUFDakUsS0FBSyxFQUFFLFFBQVEsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxFQUFFLEdBQUcsZ0NBQWtCLENBQUMsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLEdBQUcsZ0NBQWtCLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVM7S0FDckcsQ0FBQztBQUNKLENBQUM7QUFsQ0Qsa0NBa0NDO0FBRUQ7Ozs7R0FJRztBQUNILFNBQWdCLGFBQWEsQ0FBQyxLQUFhOztJQUN6QyxPQUFPO1FBQ0wsRUFBRSxFQUFFLHVCQUF1QixDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7UUFDcEMsSUFBSSxFQUFFLHVCQUF1QixDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7UUFDdEMsS0FBSyxFQUFFLEdBQUcsS0FBSyxDQUFDLENBQUMsR0FBRyxpQkFBUyxHQUFHLEtBQUssQ0FBQyxDQUFDLEdBQUcsaUJBQVMsR0FBRyxLQUFLLENBQUMsTUFBTSxHQUFHLGlCQUFTLEdBQUcsS0FBSyxDQUFDLEVBQUUsR0FBRyxpQkFBUyxHQUNuRyxLQUFLLENBQUMsRUFDUixHQUFHLGlCQUFTLEdBQUcsQ0FBQSxNQUFBLEtBQUssQ0FBQyxLQUFLLDBDQUFFLENBQUMsS0FBSSxFQUFFLEdBQUcsaUJBQVMsR0FBRyxDQUFBLE1BQUEsS0FBSyxDQUFDLEtBQUssMENBQUUsQ0FBQyxLQUFJLEVBQUUsR0FBRyxpQkFBUyxHQUNoRixDQUFBLE1BQUEsS0FBSyxDQUFDLEtBQUssMENBQUUsQ0FBQyxLQUFJLEVBQ3BCLEdBQUcsaUJBQVMsR0FBRyxDQUFBLE1BQUEsS0FBSyxDQUFDLEtBQUssMENBQUUsQ0FBQyxLQUFJLEVBQUUsR0FBRyxpQkFBUyxHQUFHLENBQUEsTUFBQSxLQUFLLENBQUMsS0FBSywwQ0FBRSxFQUFFLEtBQUksRUFBRSxHQUFHLGlCQUFTLEdBQ2pGLENBQUEsTUFBQSxLQUFLLENBQUMsS0FBSywwQ0FBRSxFQUFFLEtBQUksRUFDckIsR0FBRyxpQkFBUyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsaUJBQVMsQ0FBQyxHQUFHLGlCQUFTLEdBQUcsQ0FBQyxLQUFLLENBQUMsS0FBSyxJQUFJLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxpQkFBUyxDQUFDLEVBQUU7S0FDbkcsQ0FBQztBQUNKLENBQUM7QUFaRCxzQ0FZQztBQUVEOzs7O0dBSUc7QUFDSCxTQUFnQixXQUFXLENBQUMsS0FBMkI7SUFDckQsTUFBTSxNQUFNLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsaUJBQVMsQ0FBQyxDQUFDO0lBQzVDLGdGQUFnRjtJQUNoRixvQkFBb0IsQ0FBQyxNQUFNLEVBQUUsRUFBRSxHQUFHLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztJQUMxQyxNQUFNLFFBQVEsR0FBRyxzQkFBc0IsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFDckUsTUFBTSxhQUFhLEdBQUcsc0JBQXNCLENBQUMsTUFBTSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLFlBQVksQ0FBQyxDQUFDO0lBQ2hGLE1BQU0sU0FBUyxHQUFHLHNCQUFzQixDQUFDLE1BQU0sRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxRQUFRLENBQUMsQ0FBQztJQUN4RSxNQUFNLFFBQVEsR0FBRyxzQkFBc0IsQ0FBQyxNQUFNLEVBQUUsRUFBRSxFQUFFLEVBQUUsR0FBRyxnQ0FBa0IsQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBRTdGLE1BQU0sS0FBSyxHQUFnQyxRQUFRO1FBQ2pELENBQUMsQ0FBQztZQUNFLENBQUMsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDO1lBQ1osQ0FBQyxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUM7WUFDWixDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQztZQUNaLENBQUMsRUFBRSxNQUFNLENBQUMsRUFBRSxDQUFDO1lBQ2IsRUFBRSxFQUFFLE1BQU0sQ0FBQyxFQUFFLENBQUM7WUFDZCxFQUFFLEVBQUUsTUFBTSxDQUFDLEVBQUUsQ0FBQztTQUNmO1FBQ0gsQ0FBQyxDQUFDLFNBQVMsQ0FBQztJQUVkLE1BQU0sVUFBVSxHQUF5QyxhQUFhO1FBQ3BFLENBQUMsQ0FBQztZQUNFLENBQUMsRUFBRSxNQUFNLENBQUMsRUFBRSxDQUFDO1lBQ2IsSUFBSSxFQUFFLE1BQU0sQ0FBQyxFQUFFLENBQUM7WUFDaEIsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxFQUFFLENBQUM7WUFDYixDQUFDLEVBQUUsTUFBTSxDQUFDLEVBQUUsQ0FBQztZQUNiLENBQUMsRUFBRSxNQUFNLENBQUMsRUFBRSxDQUFDO1lBQ2IsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxFQUFFLENBQUM7WUFDYixFQUFFLEVBQUUsTUFBTSxDQUFDLEVBQUUsQ0FBQztZQUNkLEVBQUUsRUFBRSxNQUFNLENBQUMsRUFBRSxDQUFDO1lBQ2QsRUFBRSxFQUFFLE1BQU0sQ0FBQyxFQUFFLENBQUM7WUFDZCxFQUFFLEVBQUUsTUFBTSxDQUFDLEVBQUUsQ0FBQztZQUNkLENBQUMsRUFBRSxNQUFNLENBQUMsRUFBRSxDQUFDO1lBQ2IsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxFQUFFLENBQUM7U0FDZDtRQUNILENBQUMsQ0FBQyxTQUFTLENBQUM7SUFFZCxNQUFNLE1BQU0sR0FBeUMsU0FBUztRQUM1RCxDQUFDLENBQUM7WUFDRSxDQUFDLEVBQUUsTUFBTSxDQUFDLEVBQUUsQ0FBQztZQUNiLElBQUksRUFBRSxNQUFNLENBQUMsRUFBRSxDQUFDO1lBQ2hCLENBQUMsRUFBRSxNQUFNLENBQUMsRUFBRSxDQUFDO1lBQ2IsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxFQUFFLENBQUM7WUFDYixDQUFDLEVBQUUsTUFBTSxDQUFDLEVBQUUsQ0FBQztZQUNiLENBQUMsRUFBRSxNQUFNLENBQUMsRUFBRSxDQUFDO1lBQ2IsRUFBRSxFQUFFLE1BQU0sQ0FBQyxFQUFFLENBQUM7WUFDZCxFQUFFLEVBQUUsTUFBTSxDQUFDLEVBQUUsQ0FBQztZQUNkLEVBQUUsRUFBRSxNQUFNLENBQUMsRUFBRSxDQUFDO1lBQ2QsRUFBRSxFQUFFLE1BQU0sQ0FBQyxFQUFFLENBQUM7WUFDZCxDQUFDLEVBQUUsTUFBTSxDQUFDLEVBQUUsQ0FBQztZQUNiLENBQUMsRUFBRSxNQUFNLENBQUMsRUFBRSxDQUFDO1NBQ2Q7UUFDSCxDQUFDLENBQUMsU0FBUyxDQUFDO0lBRWQsT0FBTztRQUNMLENBQUMsRUFBRSxtQkFBbUIsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO1FBQ2hDLENBQUMsRUFBRSxtQkFBbUIsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDO1FBQ2xDLENBQUMsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDO1FBQ1osS0FBSyxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUM7UUFDaEIsRUFBRSxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUM7UUFDYixDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQztRQUNaLE1BQU0sRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDO1FBQ2pCLEVBQUUsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDO1FBQ2IsRUFBRSxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUM7UUFDYixLQUFLO1FBQ0wsVUFBVTtRQUNWLE1BQU07UUFDTixLQUFLLEVBQUUsUUFBUSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTO0tBQy9DLENBQUM7QUFDSixDQUFDO0FBckVELGtDQXFFQztBQUVEOzs7O0dBSUc7QUFDSCxTQUFnQixhQUFhLENBQUMsS0FBYTs7SUFDekMsT0FBTztRQUNMLEVBQUUsRUFBRSx1QkFBdUIsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO1FBQ3BDLElBQUksRUFBRSx1QkFBdUIsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO1FBQ3RDLEtBQUssRUFBRSxHQUFHLEtBQUssQ0FBQyxDQUFDLEdBQUcsaUJBQVMsR0FBRyxLQUFLLENBQUMsS0FBSyxHQUFHLGlCQUFTLEdBQUcsS0FBSyxDQUFDLEVBQUUsR0FBRyxpQkFBUyxHQUFHLEtBQUssQ0FBQyxDQUFDLEdBQUcsaUJBQVMsR0FDbEcsS0FBSyxDQUFDLE1BQ1IsR0FBRyxpQkFBUyxHQUFHLEtBQUssQ0FBQyxFQUFFLEdBQUcsaUJBQVMsR0FBRyxLQUFLLENBQUMsRUFBRSxHQUFHLGlCQUFTLEdBQUcsQ0FBQSxNQUFBLEtBQUssQ0FBQyxLQUFLLDBDQUFFLENBQUMsS0FBSSxFQUFFLEdBQUcsaUJBQVMsR0FDM0YsQ0FBQSxNQUFBLEtBQUssQ0FBQyxLQUFLLDBDQUFFLENBQUMsS0FBSSxFQUNwQixHQUFHLGlCQUFTLEdBQUcsQ0FBQSxNQUFBLEtBQUssQ0FBQyxLQUFLLDBDQUFFLENBQUMsS0FBSSxFQUFFLEdBQUcsaUJBQVMsR0FBRyxDQUFBLE1BQUEsS0FBSyxDQUFDLEtBQUssMENBQUUsQ0FBQyxLQUFJLEVBQUUsR0FBRyxpQkFBUyxHQUNoRixDQUFBLE1BQUEsS0FBSyxDQUFDLEtBQUssMENBQUUsRUFBRSxLQUFJLEVBQ3JCLEdBQUcsaUJBQVMsR0FBRyxDQUFBLE1BQUEsS0FBSyxDQUFDLEtBQUssMENBQUUsRUFBRSxLQUFJLEVBQUUsR0FBRyxpQkFBUyxHQUFHLENBQUEsTUFBQSxLQUFLLENBQUMsVUFBVSwwQ0FBRSxDQUFDLEtBQUksRUFBRSxHQUFHLGlCQUFTLEdBQ3RGLENBQUEsTUFBQSxLQUFLLENBQUMsVUFBVSwwQ0FBRSxJQUFJLEtBQUksRUFDNUIsR0FBRyxpQkFBUyxHQUFHLENBQUEsTUFBQSxLQUFLLENBQUMsVUFBVSwwQ0FBRSxDQUFDLEtBQUksRUFBRSxHQUFHLGlCQUFTLEdBQUcsQ0FBQSxNQUFBLEtBQUssQ0FBQyxVQUFVLDBDQUFFLENBQUMsS0FBSSxFQUFFLEdBQUcsaUJBQVMsR0FDMUYsQ0FBQSxNQUFBLEtBQUssQ0FBQyxVQUFVLDBDQUFFLENBQUMsS0FBSSxFQUN6QixHQUFHLGlCQUFTLEdBQUcsQ0FBQSxNQUFBLEtBQUssQ0FBQyxVQUFVLDBDQUFFLENBQUMsS0FBSSxFQUFFLEdBQUcsaUJBQVMsR0FBRyxDQUFBLE1BQUEsS0FBSyxDQUFDLFVBQVUsMENBQUUsRUFBRSxLQUFJLEVBQUUsR0FBRyxpQkFBUyxHQUMzRixDQUFBLE1BQUEsS0FBSyxDQUFDLFVBQVUsMENBQUUsRUFBRSxLQUFJLEVBQzFCLEdBQUcsaUJBQVMsR0FBRyxDQUFBLE1BQUEsS0FBSyxDQUFDLFVBQVUsMENBQUUsRUFBRSxLQUFJLEVBQUUsR0FBRyxpQkFBUyxHQUFHLENBQUEsTUFBQSxLQUFLLENBQUMsVUFBVSwwQ0FBRSxFQUFFLEtBQUksRUFBRSxHQUFHLGlCQUFTLEdBQzVGLENBQUEsTUFBQSxLQUFLLENBQUMsVUFBVSwwQ0FBRSxDQUFDLEtBQUksRUFDekIsR0FBRyxpQkFBUyxHQUFHLENBQUEsTUFBQSxLQUFLLENBQUMsVUFBVSwwQ0FBRSxDQUFDLEtBQUksRUFBRSxHQUFHLGlCQUFTLEdBQUcsQ0FBQSxNQUFBLEtBQUssQ0FBQyxNQUFNLDBDQUFFLENBQUMsS0FBSSxFQUFFLEdBQUcsaUJBQVMsR0FDdEYsQ0FBQSxNQUFBLEtBQUssQ0FBQyxNQUFNLDBDQUFFLElBQUksS0FBSSxFQUN4QixHQUFHLGlCQUFTLEdBQUcsQ0FBQSxNQUFBLEtBQUssQ0FBQyxNQUFNLDBDQUFFLENBQUMsS0FBSSxFQUFFLEdBQUcsaUJBQVMsR0FBRyxDQUFBLE1BQUEsS0FBSyxDQUFDLE1BQU0sMENBQUUsQ0FBQyxLQUFJLEVBQUUsR0FBRyxpQkFBUyxHQUNsRixDQUFBLE1BQUEsS0FBSyxDQUFDLE1BQU0sMENBQUUsQ0FBQyxLQUFJLEVBQ3JCLEdBQUcsaUJBQVMsR0FBRyxDQUFBLE1BQUEsS0FBSyxDQUFDLE1BQU0sMENBQUUsQ0FBQyxLQUFJLEVBQUUsR0FBRyxpQkFBUyxHQUFHLENBQUEsTUFBQSxLQUFLLENBQUMsTUFBTSwwQ0FBRSxFQUFFLEtBQUksRUFBRSxHQUFHLGlCQUFTLEdBQ25GLENBQUEsTUFBQSxLQUFLLENBQUMsTUFBTSwwQ0FBRSxFQUFFLEtBQUksRUFDdEIsR0FBRyxpQkFBUyxHQUFHLENBQUEsTUFBQSxLQUFLLENBQUMsTUFBTSwwQ0FBRSxFQUFFLEtBQUksRUFBRSxHQUFHLGlCQUFTLEdBQUcsQ0FBQSxNQUFBLEtBQUssQ0FBQyxNQUFNLDBDQUFFLEVBQUUsS0FBSSxFQUFFLEdBQUcsaUJBQVMsR0FDcEYsQ0FBQSxNQUFBLEtBQUssQ0FBQyxNQUFNLDBDQUFFLENBQUMsS0FBSSxFQUNyQixHQUFHLGlCQUFTLEdBQUcsQ0FBQSxNQUFBLEtBQUssQ0FBQyxNQUFNLDBDQUFFLENBQUMsS0FBSSxFQUFFLEdBQUcsaUJBQVMsR0FBRyxDQUFDLEtBQUssQ0FBQyxLQUFLLElBQUksRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLGlCQUFTLENB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QUFFLEdBQUcsaUJBQVMsR0FBRyxDQUFBLE1BQUEsS0FBSyxDQUFDLFVBQVUsMENBQUUsQ0FBQyxLQUFJLEVBQUUsR0FBRyxpQkFBUyxHQUM5RixDQUFBLE1BQUEsS0FBSyxDQUFDLFVBQVUsMENBQUUsSUFBSSxLQUFJLEVBQzVCLEdBQUcsaUJBQVMsR0FBRyxDQUFBLE1BQUEsS0FBSyxDQUFDLFVBQVUsMENBQUUsQ0FBQyxLQUFJLEVBQUUsR0FBRyxpQkFBUyxHQUFHLENBQUEsTUFBQSxLQUFLLENBQUMsVUFBVSwwQ0FBRSxDQUFDLEtBQUksRUFBRSxHQUFHLGlCQUFTLEdBQzFGLENBQUEsTUFBQSxLQUFLLENBQUMsVUFBVSwwQ0FBRSxDQUFDLEtBQUksRUFDekIsR0FBRyxpQkFBUyxHQUFHLENBQUEsTUFBQSxLQUFLLENBQUMsVUFBVSwwQ0FBRSxDQUFDLEtBQUksRUFBRSxHQUFHLGlCQUFTLEdBQUcsQ0FBQSxNQUFBLEtBQUssQ0FBQyxVQUFVLDBDQUFFLEVBQUUsS0FBSSxFQUFFLEdBQUcsaUJBQVMsR0FDM0YsQ0FBQSxNQUFBLEtBQUssQ0FBQyxVQUFVLDBDQUFFLEVBQUUsS0FBSSxFQUMxQixHQUFHLGlCQUFTLEdBQUcsQ0FBQSxNQUFBLEtBQUssQ0FBQyxVQUFVLDBDQUFFLEVBQUUsS0FBSSxFQUFFLEdBQUcsaUJBQVMsR0FBRyxDQUFBLE1BQUEsS0FBSyxDQUFDLFVBQVUsMENBQUUsRUFBRSxLQUFJLEVBQUUsR0FBRyxpQkFBUyxHQUM1RixDQUFBLE1BQUEsS0FBSyxDQUFDLFVBQVUsMENBQUUsQ0FBQyxLQUFJLEVBQ3pCLEdBQUcsaUJBQVMsR0FBRyxDQUFBLE1BQUEsS0FBSyxDQUFDLFVBQVUsMENBQUUsQ0FBQyxLQUFJLEVBQUUsR0FBRyxpQkFBUyxHQUFHLENBQUEsTUFBQSxLQUFLLENBQUMsTUFBTSwwQ0FBRSxDQUFDLEtBQUksRUFBRSxHQUFHLGlCQUFTLEdBQ3RGLENBQUEsTUFBQSxLQUFLLENBQUMsTUFBTSwwQ0FBRSxJQUFJLEtBQUksRUFDeEIsR0FBRyxpQkFBUyxHQUFHLENB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RSxDQUFDLENBQUM7S0FDekQ7QUFDSCxDQUFDO0FBWEQsMERBV0M7QUFFRDs7O0dBR0c7QUFDSSxLQUFLLFVBQVUscUJBQXFCLENBQUMsTUFRM0M7SUFDQyxNQUFNLFlBQVksR0FBRyxNQUFNLG9DQUEyQixDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQy9ELE1BQU0sNEJBQTRCLEdBQUcsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxhQUFhLENBQUM7SUFFOUQsZ0NBQWdDO0lBQ2hDLE1BQU0sWUFBWSxHQUFHLGNBQUcsQ0FBQyxlQUFlLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsY0FBYyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsS0FBSyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDdkcsZ0JBQU0sQ0FBQyxZQUFZLEtBQUssSUFBSSxFQUFFLHFCQUFxQixDQUFDLENBQUM7SUFDckQsNkZBQTZGO0lBQzdGLGdCQUFNLENBQ0osTUFBTSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLEdBQUcsTUFBTSxDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO1FBQ3pFLE1BQU0sQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLDRCQUE0QixDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsUUFBUSxFQUFFLEVBQzFFLHNCQUFzQixDQUN2QixDQUFDO0FBQ0osQ0FBQztBQXJCRCxzREFxQkMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBFY2RzYSB9IGZyb20gJy4vLi4vLi4vLi4vYWNjb3VudC1saWIvbXBjL3Rzcyc7XG5pbXBvcnQge1xuICBBU2hhcmUsXG4gIEJTaGFyZSxcbiAgQ29tYmluZWRLZXksXG4gIENyZWF0ZVVzZXJPbWljcm9uQW5kRGVsdGFTaGFyZVJULFxuICBEZWNyeXB0YWJsZU5TaGFyZSxcbiAgRFNoYXJlLFxuICBFbmNyeXB0ZWROU2hhcmUsXG4gIEdTaGFyZSxcbiAgS2V5U2hhcmUsXG4gIE5TaGFyZSxcbiAgT1NoYXJlLFxuICBSZWNlaXZlZFNoYXJlVHlwZSxcbiAgU2VuZFNoYXJlVG9CaXRnb1JULFxuICBTZW5kU2hhcmVUeXBlLFxuICBTaWduYXR1cmUsXG4gIFNpZ25hdHVyZVNoYXJlLFxuICBTaWduaW5nTWF0ZXJpYWwsXG4gIFNpZ25TaGFyZSxcbiAgV1NoYXJlLFxuICBYU2hhcmVXaXRoQ2hhbGxlbmdlcyxcbiAgWVNoYXJlV2l0aENoYWxsZW5nZXMsXG59IGZyb20gJy4vdHlwZXMnO1xuaW1wb3J0IHsgY3JlYXRlU2hhcmVQcm9vZiwgUmVxdWVzdFR5cGUsIFNpZ25hdHVyZVNoYXJlUmVjb3JkLCBTaWduYXR1cmVTaGFyZVR5cGUgfSBmcm9tICcuLi8uLi91dGlscyc7XG5pbXBvcnQgeyBTaGFyZUtleVBvc2l0aW9uIH0gZnJvbSAnLi4vdHlwZXMnO1xuaW1wb3J0IHsgQml0R29CYXNlIH0gZnJvbSAnLi4vLi4vYml0Z29CYXNlJztcbmltcG9ydCB7XG4gIEtTaGFyZSxcbiAgTVVTaGFyZSxcbiAgUmFuZ2VQcm9vZlNoYXJlLFxuICBSYW5nZVByb29mV2l0aENoZWNrU2hhcmUsXG4gIFNpZ25Db252ZXJ0U3RlcDJSZXNwb25zZSxcbiAgU1NoYXJlLFxufSBmcm9tICcuLi8uLi8uLi9hY2NvdW50LWxpYi9tcGMvdHNzL2VjZHNhL3R5cGVzJztcbmltcG9ydCB7IGNvbW1vblZlcmlmeVdhbGxldFNpZ25hdHVyZSwgZ2V0VHhSZXF1ZXN0LCBzZW5kU2lnbmF0dXJlU2hhcmUgfSBmcm9tICcuLi9jb21tb24nO1xuaW1wb3J0IGNyZWF0ZUtlY2Nha0hhc2ggZnJvbSAna2VjY2FrJztcbmltcG9ydCBhc3NlcnQgZnJvbSAnYXNzZXJ0JztcbmltcG9ydCB7IGJpcDMyLCBlY2MgfSBmcm9tICdAYml0Z28vdXR4by1saWInO1xuaW1wb3J0ICogYXMgcGdwIGZyb20gJ29wZW5wZ3AnO1xuaW1wb3J0IGJzNTggZnJvbSAnYnM1OCc7XG5pbXBvcnQgeyBBcGlLZXlTaGFyZSB9IGZyb20gJy4uLy4uL2tleWNoYWluJztcbmltcG9ydCB7IEhhc2ggfSBmcm9tICdjcnlwdG8nO1xuaW1wb3J0IHsgRWNkc2FQYWlsbGllclByb29mIH0gZnJvbSAnQGJpdGdvL3Nkay1saWItbXBjJztcblxuY29uc3QgTVBDID0gbmV3IEVjZHNhKCk7XG5cbi8qKlxuICogQ29tYmluZXMgTlNoYXJlcyB0byBjb21iaW5lIHRoZSBmaW5hbCBUU1Mga2V5XG4gKiBUaGlzIGNhbiBvbmx5IGJlIHVzZWQgdG8gY3JlYXRlIHRoZSBVc2VyIG9yIEJhY2t1cCBrZXkgc2luY2UgaXQgcmVxdWlyZXMgdGhlIGNvbW1vbiBrZXljaGFpbiBmcm9tIEJpdEdvIGZpcnN0XG4gKlxuICogQHBhcmFtIGtleVNoYXJlIC0gVFNTIGtleSBzaGFyZVxuICogQHBhcmFtIGVuY3J5cHRlZE5TaGFyZXMgLSBlbmNyeXB0ZWQgTlNoYXJlcyB3aXRoIGluZm9ybWF0aW9uIG9uIGhvdyB0byBkZWNyeXB0XG4gKiBAcGFyYW0gY29tbW9uS2V5Y2hhaW4gLSBleHBlY3RlZCBjb21tb24ga2V5Y2hhaW4gb2YgdGhlIGNvbWJpbmVkIGtleVxuICogQHJldHVybnMge0NvbWJpbmVkS2V5fSBjb21iaW5lZCBUU1Mga2V5XG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBjcmVhdGVDb21iaW5lZEtleShcbiAga2V5U2hhcmU6IEtleVNoYXJlLFxuICBlbmNyeXB0ZWROU2hhcmVzOiBEZWNyeXB0YWJsZU5TaGFyZVtdLFxuICBjb21tb25LZXljaGFpbjogc3RyaW5nXG4pOiBQcm9taXNlPENvbWJpbmVkS2V5PiB7XG4gIGNvbnN0IG5TaGFyZXM6IE5TaGFyZVtdID0gW107XG5cbiAgbGV0IGJpdGdvTlNoYXJlOiBOU2hhcmUgfCB1bmRlZmluZWQ7XG4gIGxldCB1c2VyTlNoYXJlOiBOU2hhcmUgfCB1bmRlZmluZWQ7XG4gIGxldCBiYWNrdXBOU2hhcmU6IE5TaGFyZSB8IHVuZGVmaW5lZDtcblxuICBmb3IgKGNvbnN0IGVuY3J5cHRlZE5TaGFyZSBvZiBlbmNyeXB0ZWROU2hhcmVzKSB7XG4gICAgY29uc3QgblNoYXJlID0gYXdhaXQgZGVjcnlwdE5TaGFyZShlbmNyeXB0ZWROU2hhcmUsIGVuY3J5cHRlZE5TaGFyZS5pc2JzNThFbmNvZGVkKTtcblxuICAgIHN3aXRjaCAoZW5jcnlwdGVkTlNoYXJlLm5TaGFyZS5qKSB7XG4gICAgICBjYXNlIDE6XG4gICAgICAgIHVzZXJOU2hhcmUgPSBuU2hhcmU7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAyOlxuICAgICAgICBiYWNrdXBOU2hhcmUgPSBuU2hhcmU7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAzOlxuICAgICAgICBiaXRnb05TaGFyZSA9IG5TaGFyZTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgTlNoYXJlIGluZGV4Jyk7XG4gICAgfVxuXG4gICAgblNoYXJlcy5wdXNoKG5TaGFyZSk7XG4gIH1cblxuICBpZiAoIWJpdGdvTlNoYXJlKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdNaXNzaW5nIEJpdEdvIE4gU2hhcmUnKTtcbiAgfVxuXG4gIGNvbnN0IGNvbWJpbmVkS2V5ID0gTVBDLmtleUNvbWJpbmUoa2V5U2hhcmUucFNoYXJlLCBuU2hhcmVzKTtcbiAgaWYgKGNvbWJpbmVkS2V5LnhTaGFyZS55ICsgY29tYmluZWRLZXkueFNoYXJlLmNoYWluY29kZSAhPT0gY29tbW9uS2V5Y2hhaW4pIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0NvbW1vbiBrZXljaGFpbnMgZG8gbm90IG1hdGNoJyk7XG4gIH1cblxuICBjb25zdCBzaWduaW5nTWF0ZXJpYWw6IFNpZ25pbmdNYXRlcmlhbCA9IHtcbiAgICBwU2hhcmU6IGtleVNoYXJlLnBTaGFyZSxcbiAgICBiaXRnb05TaGFyZSxcbiAgICBiYWNrdXBOU2hhcmUsXG4gICAgdXNlck5TaGFyZSxcbiAgfTtcblxuICByZXR1cm4ge1xuICAgIHNpZ25pbmdNYXRlcmlhbCxcbiAgICBjb21tb25LZXljaGFpbixcbiAgfTtcbn1cblxuLyoqXG4gKiBDcmVhdGVzIHRoZSBTaWduU2hhcmUgd2l0aCBVc2VyIFhTaGFyZSBhbmQgWVNoYXJlIENvcnJlc3BvbmRpbmcgdG8gQml0R29cbiAqIEBwYXJhbSB7WFNoYXJlfSB4U2hhcmUgVXNlciBzZWNyZXQgeFNoYXJlXG4gKiBAcGFyYW0ge1lTaGFyZX0geVNoYXJlIFlTaGFyZSBmcm9tIEJpdGdvXG4gKiBAcmV0dXJucyB7UHJvbWlzZTxTaWduU2hhcmU+fVxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gY3JlYXRlVXNlclNpZ25TaGFyZShcbiAgeFNoYXJlOiBYU2hhcmVXaXRoQ2hhbGxlbmdlcyxcbiAgeVNoYXJlOiBZU2hhcmVXaXRoQ2hhbGxlbmdlc1xuKTogUHJvbWlzZTxTaWduU2hhcmU+IHtcbiAgaWYgKHhTaGFyZS5pICE9PSBTaGFyZUtleVBvc2l0aW9uLlVTRVIpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgWFNoYXJlLCBYU2hhcmUgZG9lc24ndCBiZWxvbmcgdG8gdGhlIFVzZXJgKTtcbiAgfVxuXG4gIGlmICh5U2hhcmUuaSAhPT0gU2hhcmVLZXlQb3NpdGlvbi5VU0VSIHx8IHlTaGFyZS5qICE9PSBTaGFyZUtleVBvc2l0aW9uLkJJVEdPKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIFlTaGFyZSBwcm92aWRlZCBmb3Igc2lnbicpO1xuICB9XG4gIHJldHVybiBhd2FpdCBNUEMuc2lnblNoYXJlKHhTaGFyZSwgeVNoYXJlKTtcbn1cblxuLyoqXG4gKiBDcmVhdGVzIHRoZSBHYW1tYSBTaGFyZSBhbmQgTXVTaGFyZSB3aXRoIFVzZXIgV1NoYXJlIGFuZCBBU2hhcmUgRnJvbSBCaXRHb1xuICogQHBhcmFtIHtXU2hhcmV9IHdTaGFyZSBVc2VyIFdTaGFyZVxuICogQHBhcmFtIHtBU2hhcmV9IGFTaGFyZSBBU2hhcmUgZnJvbSBCaXRnb1xuICogQHJldHVybnMge1Byb21pc2U8U2lnbkNvbnZlcnRTdGVwMlJlc3BvbnNlPn1cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGNyZWF0ZVVzZXJHYW1tYUFuZE11U2hhcmUod1NoYXJlOiBXU2hhcmUsIGFTaGFyZTogQVNoYXJlKTogUHJvbWlzZTxTaWduQ29udmVydFN0ZXAyUmVzcG9uc2U+IHtcbiAgaWYgKHdTaGFyZS5pICE9PSBTaGFyZUtleVBvc2l0aW9uLlVTRVIpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgV1NoYXJlLCBkb2Vzbid0IGJlbG9uZyB0byB0aGUgVXNlcmApO1xuICB9XG4gIGlmIChhU2hhcmUuaSAhPT0gU2hhcmVLZXlQb3NpdGlvbi5VU0VSIHx8IGFTaGFyZS5qICE9PSBTaGFyZUtleVBvc2l0aW9uLkJJVEdPKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIEFTaGFyZSwgaXMgbm90IGZyb20gQml0Z28gdG8gVXNlcicpO1xuICB9XG4gIHJldHVybiBNUEMuc2lnbkNvbnZlcnRTdGVwMih7IHdTaGFyZSwgYVNoYXJlIH0pO1xufVxuXG4vKipcbiAqIENyZWF0ZXMgdGhlIE9taWNyb24gU2hhcmUgYW5kIERlbHRhIHNoYXJlIHdpdGggdXNlciBHU2hhcmVcbiAqIEBwYXJhbSB7R1NoYXJlfSBnU2hhcmUgVXNlciBHU2hhcmVcbiAqIEByZXR1cm5zIHtQcm9taXNlPENyZWF0ZVVzZXJPbWljcm9uQW5kRGVsdGFTaGFyZVJUPn1cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGNyZWF0ZVVzZXJPbWljcm9uQW5kRGVsdGFTaGFyZShnU2hhcmU6IEdTaGFyZSk6IFByb21pc2U8Q3JlYXRlVXNlck9taWNyb25BbmREZWx0YVNoYXJlUlQ+IHtcbiAgaWYgKGdTaGFyZS5pICE9PSBTaGFyZUtleVBvc2l0aW9uLlVTRVIpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgR1NoYXJlLCBkb2Vzbid0IGJlbG9uZyB0byB0aGUgVXNlcmApO1xuICB9XG4gIHJldHVybiBNUEMuc2lnbkNvbWJpbmUoe1xuICAgIGdTaGFyZTogZ1NoYXJlLFxuICAgIHNpZ25JbmRleDoge1xuICAgICAgaTogU2hhcmVLZXlQb3NpdGlvbi5CSVRHTyxcbiAgICAgIGo6IGdTaGFyZS5pLFxuICAgIH0sXG4gIH0pO1xufVxuXG4vKipcbiAqIENyZWF0ZXMgdGhlIFNpZ25hdHVyZSBTaGFyZSB3aXRoIFVzZXIgT1NoYXJlIGFuZCBEU2hhcmUgRnJvbSBCaXRHb1xuICogQHBhcmFtIHtPU2hhcmV9IG9TaGFyZSBVc2VyIE9TaGFyZVxuICogQHBhcmFtIHtEU2hhcmV9IGRTaGFyZSBEU2hhcmUgZnJvbSBiaXRnb1xuICogQHBhcmFtIHtCdWZmZXJ9IG1lc3NhZ2UgbWVzc2FnZSB0byBwZXJmb3JtIHNpZ25cbiAqIEByZXR1cm5zIHtQcm9taXNlPGNyZWF0ZVVzZXJTaWduU2hhcmVSVD59XG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBjcmVhdGVVc2VyU2lnbmF0dXJlU2hhcmUoXG4gIG9TaGFyZTogT1NoYXJlLFxuICBkU2hhcmU6IERTaGFyZSxcbiAgbWVzc2FnZTogQnVmZmVyLFxuICBoYXNoOiBIYXNoID0gY3JlYXRlS2VjY2FrSGFzaCgna2VjY2FrMjU2Jylcbik6IFByb21pc2U8U2lnbmF0dXJlU2hhcmU+IHtcbiAgaWYgKG9TaGFyZS5pICE9PSBTaGFyZUtleVBvc2l0aW9uLlVTRVIpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgT1NoYXJlLCBkb2Vzbid0IGJlbG9uZyB0byB0aGUgVXNlcmApO1xuICB9XG5cbiAgaWYgKGRTaGFyZS5pICE9PSBTaGFyZUtleVBvc2l0aW9uLlVTRVIgfHwgZFNoYXJlLmogIT09IFNoYXJlS2V5UG9zaXRpb24uQklUR08pIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgRFNoYXJlLCBkb2Vzbid0IHNlZW0gdG8gYmUgZnJvbSBCaXRHb2ApO1xuICB9XG4gIHJldHVybiBNUEMuc2lnbihtZXNzYWdlLCBvU2hhcmUsIGRTaGFyZSwgaGFzaCk7XG59XG5cbmV4cG9ydCB0eXBlIE11RFNoYXJlID0geyBtdVNoYXJlOiBNVVNoYXJlOyBkU2hhcmU6IERTaGFyZTsgaTogU2hhcmVLZXlQb3NpdGlvbiB9O1xuXG4vKipcbiAqIFNlbmRzIFNoYXJlIFRvIEJpdGdvXG4gKiBAcGFyYW0ge0JpdEdvQmFzZX0gYml0Z28gLSB0aGUgYml0Z28gaW5zdGFuY2VcbiAqIEBwYXJhbSB7U3RyaW5nfSB3YWxsZXRJZCAtIHRoZSB3YWxsZXQgaWQgICpcbiAqIEBwYXJhbSB7U3RyaW5nfSB0eFJlcXVlc3RJZCAtIHRoZSB0eFJlcXVlc3QgSWRcbiAqIEBwYXJhbSByZXF1ZXN0VHlwZSAtIHRoZSB0eXBlIG9mIHJlcXVlc3QgYmVpbmcgc3VibWl0dGVkIChlaXRoZXIgdHggb3IgbWVzc2FnZSBmb3Igc2lnbmluZylcbiAqIEBwYXJhbSBzaGFyZVR5cGVcbiAqIEBwYXJhbSBzaGFyZVxuICogQHBhcmFtIHNpZ25lclNoYXJlXG4gKiBAcGFyYW0gdnNzUHJvb2YgLSB0aGUgdiB2YWx1ZSBvZiB0aGUgc2hhcmVcbiAqIEBwYXJhbSBwcml2YXRlU2hhcmVQcm9vZiAtIHRoZSB1U2lnIG9mIHRoZSBzaGFyZVxuICogQHBhcmFtIHB1YmxpY1NoYXJlIC0gdGhlIHkgdmFsdWUgb2YgdGhlIHNoYXJlXG4gKiBAcGFyYW0gdXNlclB1YmxpY0dwZ0tleSAtIHRoZSBwdWJsaWMga2V5IG9mIHRoZSBncGcga2V5IHVzZWQgZm9yIGNyZWF0aW5nIHRoZSBwcml2YXRlU2hhcmVQcm9vZlxuICogQHJldHVybnMge1Byb21pc2U8U2lnbmF0dXJlU2hhcmVSZWNvcmQ+fSAtIGEgU2lnbmF0dXJlIFNoYXJlXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBzZW5kU2hhcmVUb0JpdGdvKFxuICBiaXRnbzogQml0R29CYXNlLFxuICB3YWxsZXRJZDogc3RyaW5nLFxuICB0eFJlcXVlc3RJZDogc3RyaW5nLFxuICByZXF1ZXN0VHlwZTogUmVxdWVzdFR5cGUsXG4gIHNoYXJlVHlwZTogU2VuZFNoYXJlVHlwZSxcbiAgc2hhcmU6IFNTaGFyZSB8IE11RFNoYXJlIHwgS1NoYXJlLFxuICBzaWduZXJTaGFyZT86IHN0cmluZyxcbiAgdnNzUHJvb2Y/OiBzdHJpbmcsXG4gIHByaXZhdGVTaGFyZVByb29mPzogc3RyaW5nLFxuICBwdWJsaWNTaGFyZT86IHN0cmluZyxcbiAgdXNlclB1YmxpY0dwZ0tleT86IHN0cmluZ1xuKTogUHJvbWlzZTxTZW5kU2hhcmVUb0JpdGdvUlQ+IHtcbiAgaWYgKHNoYXJlVHlwZSAhPT0gU2VuZFNoYXJlVHlwZS5TU2hhcmUgJiYgc2hhcmUuaSAhPT0gU2hhcmVLZXlQb3NpdGlvbi5CSVRHTykge1xuICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBTaGFyZSwgaXMgbm90IGZyb20gVXNlciB0byBCaXRnbycpO1xuICB9XG4gIGxldCBzaWduYXR1cmVTaGFyZTogU2lnbmF0dXJlU2hhcmVSZWNvcmQ7XG4gIGxldCByZXNwb25zZUZyb21CaXRnbzogU2VuZFNoYXJlVG9CaXRnb1JUO1xuXG4gIHN3aXRjaCAoc2hhcmVUeXBlKSB7XG4gICAgY2FzZSBTZW5kU2hhcmVUeXBlLktTaGFyZTpcbiAgICAgIGFzc2VydChzaWduZXJTaGFyZSwgYHNpZ25lciBzaGFyZSBtdXN0IGJlIHByZXNlbnRgKTtcbiAgICAgIGNvbnN0IGtTaGFyZSA9IHNoYXJlIGFzIEtTaGFyZTtcbiAgICAgIHNpZ25hdHVyZVNoYXJlID0gY29udmVydEtTaGFyZShrU2hhcmUpO1xuICAgICAgc2lnbmF0dXJlU2hhcmUudnNzUHJvb2YgPSB2c3NQcm9vZjtcbiAgICAgIHNpZ25hdHVyZVNoYXJlLnB1YmxpY1NoYXJlID0gcHVibGljU2hhcmU7XG4gICAgICBzaWduYXR1cmVTaGFyZS5wcml2YXRlU2hhcmVQcm9vZiA9IHByaXZhdGVTaGFyZVByb29mO1xuICAgICAgYXdhaXQgc2VuZFNpZ25hdHVyZVNoYXJlKFxuICAgICAgICBiaXRnbyxcbiAgICAgICAgd2FsbGV0SWQsXG4gICAgICAgIHR4UmVxdWVzdElkLFxuICAgICAgICBzaWduYXR1cmVTaGFyZSxcbiAgICAgICAgcmVxdWVzdFR5cGUsXG4gICAgICAgIHNpZ25lclNoYXJlLFxuICAgICAgICAnZWNkc2EnLFxuICAgICAgICAnZnVsbCcsXG4gICAgICAgIHVzZXJQdWJsaWNHcGdLZXlcbiAgICAgICk7XG4gICAgICByZXNwb25zZUZyb21CaXRnbyA9IGF3YWl0IGdldEJpdGdvVG9Vc2VyTGF0ZXN0U2hhcmUoXG4gICAgICAgIGJpdGdvLFxuICAgICAgICB3YWxsZXRJZCxcbiAgICAgICAgdHhSZXF1ZXN0SWQsXG4gICAgICAgIFJlY2VpdmVkU2hhcmVUeXBlLkFTaGFyZSxcbiAgICAgICAgcmVxdWVzdFR5cGVcbiAgICAgICk7XG4gICAgICBicmVhaztcbiAgICBjYXNlIFNlbmRTaGFyZVR5cGUuTVVTaGFyZTpcbiAgICAgIGNvbnN0IHNoYXJlVG9TZW5kID0gc2hhcmUgYXMgTXVEU2hhcmU7XG4gICAgICBjb25zdCBtdVNoYXJlUmVjb3JkID0gY29udmVydE11U2hhcmUoc2hhcmVUb1NlbmQubXVTaGFyZSk7XG4gICAgICBjb25zdCBkU2hhcmVSZWNvcmQgPSBjb252ZXJ0RFNoYXJlKHNoYXJlVG9TZW5kLmRTaGFyZSk7XG4gICAgICBzaWduYXR1cmVTaGFyZSA9IHtcbiAgICAgICAgdG86IFNpZ25hdHVyZVNoYXJlVHlwZS5CSVRHTyxcbiAgICAgICAgZnJvbTogZ2V0UGFydGljaXBhbnRGcm9tSW5kZXgoc2hhcmVUb1NlbmQuZFNoYXJlLmopLFxuICAgICAgICBzaGFyZTogYCR7bXVTaGFyZVJlY29yZC5zaGFyZX0ke3NlY29uZGFyeURlbGltZXRlcn0ke2RTaGFyZVJlY29yZC5zaGFyZX1gLFxuICAgICAgfTtcbiAgICAgIGF3YWl0IHNlbmRTaWduYXR1cmVTaGFyZShiaXRnbywgd2FsbGV0SWQsIHR4UmVxdWVzdElkLCBzaWduYXR1cmVTaGFyZSwgcmVxdWVzdFR5cGUsIHNpZ25lclNoYXJlLCAnZWNkc2EnKTtcbiAgICAgIHJlc3BvbnNlRnJvbUJpdGdvID0gYXdhaXQgZ2V0Qml0Z29Ub1VzZXJMYXRlc3RTaGFyZShcbiAgICAgICAgYml0Z28sXG4gICAgICAgIHdhbGxldElkLFxuICAgICAgICB0eFJlcXVlc3RJZCxcbiAgICAgICAgUmVjZWl2ZWRTaGFyZVR5cGUuRFNoYXJlLFxuICAgICAgICByZXF1ZXN0VHlwZVxuICAgICAgKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgU2VuZFNoYXJlVHlwZS5TU2hhcmU6XG4gICAgICBjb25zdCBzU2hhcmUgPSBzaGFyZSBhcyBTU2hhcmU7XG4gICAgICBzaWduYXR1cmVTaGFyZSA9IGNvbnZlcnRTaWduYXR1cmVTaGFyZShzU2hhcmUsIDEsIDMpO1xuICAgICAgYXdhaXQgc2VuZFNpZ25hdHVyZVNoYXJlKGJpdGdvLCB3YWxsZXRJZCwgdHhSZXF1ZXN0SWQsIHNpZ25hdHVyZVNoYXJlLCByZXF1ZXN0VHlwZSwgc2lnbmVyU2hhcmUsICdlY2RzYScpO1xuICAgICAgcmVzcG9uc2VGcm9tQml0Z28gPSBzU2hhcmU7XG4gICAgICBicmVhaztcbiAgICBkZWZhdWx0OlxuICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIFNoYXJlIGdpdmVuIHRvIHNlbmQnKTtcbiAgfVxuXG4gIHJldHVybiByZXNwb25zZUZyb21CaXRnbztcbn1cblxuLyoqXG4gKiBHZXRzIHRoZSBsYXRlc3QgdXNlcidzIHNoYXJlIGZyb20gYml0Z28gbmVlZGVkIHRvIGNvbnRpbnVlIHNpZ25pbmcgZmxvd1xuICogQHBhcmFtIHtCaXRHb0Jhc2V9IGJpdGdvIC0gdGhlIGJpdGdvIGluc3RhbmNlXG4gKiBAcGFyYW0ge1N0cmluZ30gd2FsbGV0SWQgLSB0aGUgd2FsbGV0IGlkICAqXG4gKiBAcGFyYW0ge1N0cmluZ30gdHhSZXF1ZXN0SWQgLSB0aGUgdHhSZXF1ZXN0IElkXG4gKiBAcGFyYW0ge1JlY2VpdmVkU2hhcmVUeXBlfSBzaGFyZVR5cGUgLSB0aGUgZXhjcGVjdGVkIHNoYXJlIHR5cGVcbiAqIEByZXR1cm5zIHtQcm9taXNlPFNlbmRTaGFyZVRvQml0Z29SVD59IC0gc2hhcmUgZnJvbSBiaXRnbyB0byB1c2VyXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBnZXRCaXRnb1RvVXNlckxhdGVzdFNoYXJlKFxuICBiaXRnbzogQml0R29CYXNlLFxuICB3YWxsZXRJZDogc3RyaW5nLFxuICB0eFJlcXVlc3RJZDogc3RyaW5nLFxuICBzaGFyZVR5cGU6IFJlY2VpdmVkU2hhcmVUeXBlLFxuICByZXF1ZXN0VHlwZTogUmVxdWVzdFR5cGVcbik6IFByb21pc2U8U2VuZFNoYXJlVG9CaXRnb1JUPiB7XG4gIGxldCByZXNwb25zZUZyb21CaXRnbzogU2VuZFNoYXJlVG9CaXRnb1JUO1xuICBjb25zdCB0eFJlcXVlc3QgPSBhd2FpdCBnZXRUeFJlcXVlc3QoYml0Z28sIHdhbGxldElkLCB0eFJlcXVlc3RJZCk7XG4gIGxldCB1c2VyU2hhcmVzO1xuICBzd2l0Y2ggKHJlcXVlc3RUeXBlKSB7XG4gICAgY2FzZSBSZXF1ZXN0VHlwZS50eDpcbiAgICAgIGFzc2VydCh0eFJlcXVlc3QudHJhbnNhY3Rpb25zLCAndHJhbnNhY3Rpb25zIHJlcXVpcmVkIGFzIHBhcnQgb2YgdHhSZXF1ZXN0Jyk7XG4gICAgICB1c2VyU2hhcmVzID0gdHhSZXF1ZXN0LnRyYW5zYWN0aW9uc1swXS5zaWduYXR1cmVTaGFyZXM7XG4gICAgICBicmVhaztcbiAgICBjYXNlIFJlcXVlc3RUeXBlLm1lc3NhZ2U6XG4gICAgICBhc3NlcnQodHhSZXF1ZXN0Lm1lc3NhZ2VzLCAnbWVzc2FnZXMgcmVxdWlyZWQgYXMgcGFydCBvZiB0eFJlcXVlc3QnKTtcbiAgICAgIHVzZXJTaGFyZXMgPSB0eFJlcXVlc3QubWVzc2FnZXNbMF0uc2lnbmF0dXJlU2hhcmVzO1xuICAgICAgYnJlYWs7XG4gIH1cbiAgaWYgKCF1c2VyU2hhcmVzIHx8ICF1c2VyU2hhcmVzLmxlbmd0aCkge1xuICAgIHRocm93IG5ldyBFcnJvcigndXNlciBzaGFyZSBpcyBub3QgcHJlc2VudCcpO1xuICB9XG5cbiAgY29uc3Qgc2hhcmVSZWNvcmQgPSB1c2VyU2hhcmVzW3VzZXJTaGFyZXMubGVuZ3RoIC0gMV07XG4gIHN3aXRjaCAoc2hhcmVUeXBlKSB7XG4gICAgY2FzZSBSZWNlaXZlZFNoYXJlVHlwZS5BU2hhcmU6XG4gICAgICByZXNwb25zZUZyb21CaXRnbyA9IHBhcnNlQVNoYXJlKHNoYXJlUmVjb3JkKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgUmVjZWl2ZWRTaGFyZVR5cGUuRFNoYXJlOlxuICAgICAgcmVzcG9uc2VGcm9tQml0Z28gPSBwYXJzZURTaGFyZShzaGFyZVJlY29yZCk7XG4gICAgICBicmVhaztcbiAgICBjYXNlIFJlY2VpdmVkU2hhcmVUeXBlLlNpZ25hdHVyZTpcbiAgICAgIHJlc3BvbnNlRnJvbUJpdGdvID0gcGFyc2VTaWduYXR1cmVTaGFyZShzaGFyZVJlY29yZCk7XG4gICAgICBicmVhaztcbiAgICBkZWZhdWx0OlxuICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIHNoYXJlIHJlY2VpdmVkJyk7XG4gIH1cblxuICByZXR1cm4gcmVzcG9uc2VGcm9tQml0Z287XG59XG5cbi8qKlxuICogUHJlcGFyZXMgYSBOU2hhcmUgdG8gYmUgZXhjaGFuZ2VkIHdpdGggb3RoZXIga2V5IGhvbGRlcnMuXG4gKiBPdXRwdXQgaXMgaW4gYSBmb3JtYXQgdGhhdCBpcyB1c2FibGUgd2l0aGluIEJpdEdvJ3MgZWNvc3lzdGVtLlxuICpcbiAqIEBwYXJhbSBrZXlTaGFyZSAtIFRTUyBrZXkgc2hhcmUgb2YgdGhlIHBhcnR5IHByZXBhcmluZyBleGNoYW5nZSBtYXRlcmlhbHNcbiAqIEBwYXJhbSByZWNpcGllbnRJbmRleCAtIGluZGV4IG9mIHRoZSByZWNpcGllbnQgKDEsIDIsIG9yIDMpXG4gKiBAcGFyYW0gcmVjaXBpZW50R3BnUHVibGljQXJtb3IgLSByZWNpcGllbnQncyBwdWJsaWMgZ3BnIGtleSBpbiBhcm1vciBmb3JtYXRcbiAqIEBwYXJhbSBzZW5kZXJHcGdLZXkgLSBlcGhlbWVyYWwgR1BHIGtleSB0byBlbmNyeXB0IC8gZGVjcnlwdCBzZW5zaXR2ZSBkYXRhIGV4Y2hhbmdlZCBiZXR3ZWVuIHVzZXIgYW5kIHNlcnZlclxuICogQHBhcmFtIGlzYnM1OEVuY29kZWQgLSBpcyBiczU4IGVuY29kZWQgb3Igbm90XG4gKiBAcmV0dXJucyBlbmNyeXB0ZWQgTiBTaGFyZVxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZW5jcnlwdE5TaGFyZShcbiAga2V5U2hhcmU6IEtleVNoYXJlLFxuICByZWNpcGllbnRJbmRleDogbnVtYmVyLFxuICByZWNpcGllbnRHcGdQdWJsaWNBcm1vcjogc3RyaW5nLFxuICBzZW5kZXJHcGdLZXk6IHBncC5TZXJpYWxpemVkS2V5UGFpcjxzdHJpbmc+LFxuICBpc2JzNThFbmNvZGVkID0gdHJ1ZVxuKTogUHJvbWlzZTxFbmNyeXB0ZWROU2hhcmU+IHtcbiAgY29uc3QgblNoYXJlID0ga2V5U2hhcmUublNoYXJlc1tyZWNpcGllbnRJbmRleF07XG4gIGlmICghblNoYXJlKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIHJlY2lwaWVudCcpO1xuICB9XG5cbiAgY29uc3QgcHVibGljU2hhcmUgPSBCdWZmZXIuY29uY2F0KFtcbiAgICBCdWZmZXIuZnJvbShrZXlTaGFyZS5wU2hhcmUueSwgJ2hleCcpLFxuICAgIEJ1ZmZlci5mcm9tKGtleVNoYXJlLnBTaGFyZS5jaGFpbmNvZGUsICdoZXgnKSxcbiAgXSkudG9TdHJpbmcoJ2hleCcpO1xuXG4gIGxldCBwcml2YXRlU2hhcmU7XG4gIGlmIChpc2JzNThFbmNvZGVkKSB7XG4gICAgcHJpdmF0ZVNoYXJlID0gYmlwMzIuZnJvbVByaXZhdGVLZXkoQnVmZmVyLmZyb20oblNoYXJlLnUsICdoZXgnKSwgQnVmZmVyLmZyb20oblNoYXJlLmNoYWluY29kZSwgJ2hleCcpKS50b0Jhc2U1OCgpO1xuICB9IGVsc2Uge1xuICAgIHByaXZhdGVTaGFyZSA9IEJ1ZmZlci5jb25jYXQoW0J1ZmZlci5mcm9tKG5TaGFyZS51LCAnaGV4JyksIEJ1ZmZlci5mcm9tKG5TaGFyZS5jaGFpbmNvZGUsICdoZXgnKV0pLnRvU3RyaW5nKCdoZXgnKTtcbiAgfVxuICBjb25zdCByZWNpcGllbnRQdWJsaWNLZXkgPSBhd2FpdCBwZ3AucmVhZEtleSh7IGFybW9yZWRLZXk6IHJlY2lwaWVudEdwZ1B1YmxpY0FybW9yIH0pO1xuXG4gIGNvbnN0IGVuY3J5cHRlZFByaXZhdGVTaGFyZSA9IChhd2FpdCBwZ3AuZW5jcnlwdCh7XG4gICAgbWVzc2FnZTogYXdhaXQgcGdwLmNyZWF0ZU1lc3NhZ2Uoe1xuICAgICAgdGV4dDogcHJpdmF0ZVNoYXJlLFxuICAgIH0pLFxuICAgIGVuY3J5cHRpb25LZXlzOiBbcmVjaXBpZW50UHVibGljS2V5XSxcbiAgfSkpIGFzIHN0cmluZztcblxuICByZXR1cm4ge1xuICAgIGk6IG5TaGFyZS5pLFxuICAgIGo6IG5TaGFyZS5qLFxuICAgIHB1YmxpY1NoYXJlLFxuICAgIGVuY3J5cHRlZFByaXZhdGVTaGFyZSxcbiAgICBuOiBuU2hhcmUubixcbiAgICB2c3NQcm9vZjogblNoYXJlLnYsXG4gICAgcHJpdmF0ZVNoYXJlUHJvb2Y6IGF3YWl0IGNyZWF0ZVNoYXJlUHJvb2Yoc2VuZGVyR3BnS2V5LnByaXZhdGVLZXksIG5TaGFyZS51LCAnZWNkc2EnKSxcbiAgfTtcbn1cblxuLyoqXG4gKiBQcmVwYXJlcyBhIE5TaGFyZSB0byBiZSBleGNoYW5nZWQgd2l0aCBvdGhlciBrZXkgaG9sZGVycy5cbiAqIEFuIEFQSSBrZXkgc2hhcmUgcmVjZWl2ZWQgZnJvbSBhIHRoaXJkIHBhcnR5IHNob3VsZCBhbHJlYWR5IGJlIGVuY3J5cHRlZFxuICpcbiAqIEBwYXJhbSBrZXlTaGFyZSAtIFRTUyBrZXkgc2hhcmUgb2YgdGhlIHBhcnR5IHByZXBhcmluZyBleGNoYW5nZSBtYXRlcmlhbHNcbiAqIEByZXR1cm5zIGVuY3J5cHRlZCBOIFNoYXJlXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBidWlsZE5TaGFyZUZyb21BUElLZXlTaGFyZShrZXlTaGFyZTogQXBpS2V5U2hhcmUpOiBQcm9taXNlPEVuY3J5cHRlZE5TaGFyZT4ge1xuICByZXR1cm4ge1xuICAgIGk6IGdldFBhcnRpY2lwYW50SW5kZXgoa2V5U2hhcmUudG8pLFxuICAgIGo6IGdldFBhcnRpY2lwYW50SW5kZXgoa2V5U2hhcmUuZnJvbSksXG4gICAgcHVibGljU2hhcmU6IGtleVNoYXJlLnB1YmxpY1NoYXJlLFxuICAgIGVuY3J5cHRlZFByaXZhdGVTaGFyZToga2V5U2hhcmUucHJpdmF0ZVNoYXJlLFxuICAgIG46IGtleVNoYXJlLm4gPz8gJycsIC8vIHRoaXMgaXMgbm90IGN1cnJlbnRseSBuZWVkZWQgZm9yIGtleSBjcmVhdGlvblxuICAgIHByaXZhdGVTaGFyZVByb29mOiBrZXlTaGFyZS5wcml2YXRlU2hhcmVQcm9vZixcbiAgICB2c3NQcm9vZjoga2V5U2hhcmUudnNzUHJvb2YsXG4gIH07XG59XG5cbi8qKlxuICogRGVjcnlwdHMgZW5jcnlwdGVkIG4gc2hhcmVcbiAqIEBwYXJhbSBlbmNyeXB0ZWROU2hhcmUgLSBkZWNyeXB0YWJsZSBuIHNoYXJlIHdpdGggcmVjaXBpZW50IHByaXZhdGUgZ3BnIGtleSBhcm1vciBhbmQgc2VuZGVyIHB1YmxpYyBncGcga2V5XG4gKiBAcGFyYW0gaXNiczU4RW5jb2RlZFxuICogQHJldHVybnMgTiBzaGFyZVxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZGVjcnlwdE5TaGFyZShlbmNyeXB0ZWROU2hhcmU6IERlY3J5cHRhYmxlTlNoYXJlLCBpc2JzNThFbmNvZGVkID0gdHJ1ZSk6IFByb21pc2U8TlNoYXJlPiB7XG4gIGNvbnN0IHJlY2lwaWVudFByaXZhdGVLZXkgPSBhd2FpdCBwZ3AucmVhZEtleSh7IGFybW9yZWRLZXk6IGVuY3J5cHRlZE5TaGFyZS5yZWNpcGllbnRQcml2YXRlQXJtb3IgfSk7XG4gIGNvbnN0IHBydiA9IChcbiAgICBhd2FpdCBwZ3AuZGVjcnlwdCh7XG4gICAgICBtZXNzYWdlOiBhd2FpdCBwZ3AucmVhZE1lc3NhZ2UoeyBhcm1vcmVkTWVzc2FnZTogZW5jcnlwdGVkTlNoYXJlLm5TaGFyZS5lbmNyeXB0ZWRQcml2YXRlU2hhcmUgfSksXG4gICAgICBkZWNyeXB0aW9uS2V5czogW3JlY2lwaWVudFByaXZhdGVLZXkgYXMgcGdwLlByaXZhdGVLZXldLFxuICAgIH0pXG4gICkuZGF0YSBhcyBzdHJpbmc7XG5cbiAgbGV0IHU6IHN0cmluZztcbiAgaWYgKGlzYnM1OEVuY29kZWQpIHtcbiAgICBjb25zdCBwcml2YXRlU2hhcmUgPSBiczU4LmRlY29kZShwcnYpLnRvU3RyaW5nKCdoZXgnKTtcbiAgICB1ID0gcHJpdmF0ZVNoYXJlLnNsaWNlKDkyLCAxNTYpO1xuICB9IGVsc2Uge1xuICAgIHUgPSBwcnYuc2xpY2UoMCwgNjQpO1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBpOiBlbmNyeXB0ZWROU2hhcmUublNoYXJlLmksXG4gICAgajogZW5jcnlwdGVkTlNoYXJlLm5TaGFyZS5qLFxuICAgIG46IGVuY3J5cHRlZE5TaGFyZS5uU2hhcmUubixcbiAgICB5OiBlbmNyeXB0ZWROU2hhcmUublNoYXJlLnB1YmxpY1NoYXJlLnNsaWNlKDAsIDY2KSxcbiAgICB1OiB1LFxuICAgIGNoYWluY29kZTogZW5jcnlwdGVkTlNoYXJlLm5TaGFyZS5wdWJsaWNTaGFyZS5zbGljZSg2NiwgMTMwKSxcbiAgICB2OiBlbmNyeXB0ZWROU2hhcmUublNoYXJlLnZzc1Byb29mLFxuICB9O1xufVxuXG4vKipcbiAqIEdldHMgcHVibGljIGtleSBmcm9tIGNvbW1vbiBrZXljaGFpblxuICogQHBhcmFtIGNvbW1vbktleUNoYWluIC0gY29tbW9uIGtleWNoYWluIG9mIGVjZHNhIHRzc1xuICogQHJldHVybnMgcHVibGljIGtleVxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0UHVibGljS2V5KGNvbW1vbktleUNoYWluOiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gY29tbW9uS2V5Q2hhaW4uc2xpY2UoMCwgNjYpO1xufVxuXG5leHBvcnQgY29uc3QgZGVsaW1ldGVyID0gJzonO1xuZXhwb3J0IGNvbnN0IHNlY29uZGFyeURlbGltZXRlciA9ICctJztcblxuZnVuY3Rpb24gdmFsaWRhdGVTaGFyZXNMZW5ndGgoc2hhcmVzOiBzdHJpbmdbXSwgZXhwZWN0ZWRMZW5ndGg6IG51bWJlciwgc2hhcmVOYW1lOiBzdHJpbmcpIHtcbiAgaWYgKHNoYXJlcy5sZW5ndGggPCBleHBlY3RlZExlbmd0aCkge1xuICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCAke3NoYXJlTmFtZX0gc2hhcmVgKTtcbiAgfVxufVxuXG5mdW5jdGlvbiB2YWxpZGF0ZU9wdGlvbmFsVmFsdWVzKHNoYXJlczogc3RyaW5nW10sIHN0YXJ0OiBudW1iZXIsIGVuZDogbnVtYmVyLCBzaGFyZU5hbWU6IHN0cmluZywgdmFsdWVOYW1lOiBzdHJpbmcpIHtcbiAgbGV0IGZvdW5kID0gZmFsc2U7XG4gIGZvciAobGV0IGkgPSBzdGFydDsgaSA8IGVuZDsgaSsrKSB7XG4gICAgaWYgKHNoYXJlc1tpXSkge1xuICAgICAgZm91bmQgPSB0cnVlO1xuICAgIH0gZWxzZSBpZiAoZm91bmQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgSW5jb25zaXN0ZW50IG9wdGlvbmFsICR7dmFsdWVOYW1lfSB2YWx1ZSBpbiAke3NoYXJlTmFtZX0gc2hhcmVgKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGZvdW5kO1xufVxuXG4vKipcbiAqIHBhcnNlcyBLIHNoYXJlIGZyb20gc2lnbmF0dXJlIHNoYXJlIHJlY29yZFxuICogQHBhcmFtIHNoYXJlIC0gc2lnbmF0dXJlIHNoYXJlIHJlY29yZFxuICogQHJldHVybnMgSyBTaGFyZVxuICovXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VLU2hhcmUoc2hhcmU6IFNpZ25hdHVyZVNoYXJlUmVjb3JkKTogS1NoYXJlIHtcbiAgY29uc3Qgc2hhcmVzID0gc2hhcmUuc2hhcmUuc3BsaXQoZGVsaW1ldGVyKTtcbiAgLy8gVE9ETzogb25jZSBwIGFuZCBzaWdtYSBhcmUgbWFuZGF0b3J5LCBtYWtlIHRoZSBleGVwY3RlZCBsZW5ndGggMTEgKyAyICogRWNkc2FQYWlsbGllclByb29mLm1cbiAgLy8gYW5kIHJlbW92ZSB0aGUgdmFsaWRhdGVPcHRpb25hbFZhbHVlcyBjaGVja1xuICB2YWxpZGF0ZVNoYXJlc0xlbmd0aChzaGFyZXMsIDExICsgMiwgJ0snKTtcbiAgY29uc3QgaGFzUHJvb2YgPSB2YWxpZGF0ZU9wdGlvbmFsVmFsdWVzKHNoYXJlcywgNSwgMTEsICdLJywgJ3Byb29mJyk7XG4gIGNvbnN0IGhhc1AgPSB2YWxpZGF0ZU9wdGlvbmFsVmFsdWVzKHNoYXJlcywgMTEsIDExICsgMSwgJ0snLCAncCcpO1xuICBjb25zdCBoYXNTaWdtYSA9IGhhc1BcbiAgICA/IHZhbGlkYXRlT3B0aW9uYWxWYWx1ZXMoc2hhcmVzLCAxMSArIEVjZHNhUGFpbGxpZXJQcm9vZi5tLCAxMSArIDIgKiBFY2RzYVBhaWxsaWVyUHJvb2YubSwgJ0snLCAnc2lnbWEnKVxuICAgIDogZmFsc2U7XG5cbiAgY29uc3QgcHJvb2Y6IFJhbmdlUHJvb2ZTaGFyZSB8IHVuZGVmaW5lZCA9IGhhc1Byb29mXG4gICAgPyB7XG4gICAgICAgIHo6IHNoYXJlc1s1XSxcbiAgICAgICAgdTogc2hhcmVzWzZdLFxuICAgICAgICB3OiBzaGFyZXNbN10sXG4gICAgICAgIHM6IHNoYXJlc1s4XSxcbiAgICAgICAgczE6IHNoYXJlc1s5XSxcbiAgICAgICAgczI6IHNoYXJlc1sxMF0sXG4gICAgICB9XG4gICAgOiB1bmRlZmluZWQ7XG5cbiAgcmV0dXJuIHtcbiAgICBpOiBnZXRQYXJ0aWNpcGFudEluZGV4KHNoYXJlLnRvKSxcbiAgICBqOiBnZXRQYXJ0aWNpcGFudEluZGV4KHNoYXJlLmZyb20pLFxuICAgIGs6IHNoYXJlc1swXSxcbiAgICBuOiBzaGFyZXNbMV0sXG4gICAgbnRpbGRlOiBzaGFyZXNbMl0sXG4gICAgaDE6IHNoYXJlc1szXSxcbiAgICBoMjogc2hhcmVzWzRdLFxuICAgIHByb29mLFxuICAgIHA6IGhhc1AgPyBzaGFyZXMuc2xpY2UoMTEsIDExICsgRWNkc2FQYWlsbGllclByb29mLm0pIDogdW5kZWZpbmVkLFxuICAgIHNpZ21hOiBoYXNTaWdtYSA/IHNoYXJlcy5zbGljZSgxMSArIEVjZHNhUGFpbGxpZXJQcm9vZi5tLCAxMSArIDIgKiBFY2RzYVBhaWxsaWVyUHJvb2YubSkgOiB1bmRlZmluZWQsXG4gIH07XG59XG5cbi8qKlxuICogY29udmVydCBLIHNoYXJlIHRvIHNpZ25hdHVyZSBzaGFyZSByZWNvcmRcbiAqIEBwYXJhbSBzaGFyZSAtIEsgc2hhcmVcbiAqIEByZXR1cm5zIHNpZ25hdHVyZSBzaGFyZSByZWNvcmRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNvbnZlcnRLU2hhcmUoc2hhcmU6IEtTaGFyZSk6IFNpZ25hdHVyZVNoYXJlUmVjb3JkIHtcbiAgcmV0dXJuIHtcbiAgICB0bzogZ2V0UGFydGljaXBhbnRGcm9tSW5kZXgoc2hhcmUuaSksXG4gICAgZnJvbTogZ2V0UGFydGljaXBhbnRGcm9tSW5kZXgoc2hhcmUuaiksXG4gICAgc2hhcmU6IGAke3NoYXJlLmt9JHtkZWxpbWV0ZXJ9JHtzaGFyZS5ufSR7ZGVsaW1ldGVyfSR7c2hhcmUubnRpbGRlfSR7ZGVsaW1ldGVyfSR7c2hhcmUuaDF9JHtkZWxpbWV0ZXJ9JHtcbiAgICAgIHNoYXJlLmgyXG4gICAgfSR7ZGVsaW1ldGVyfSR7c2hhcmUucHJvb2Y/LnogfHwgJyd9JHtkZWxpbWV0ZXJ9JHtzaGFyZS5wcm9vZj8udSB8fCAnJ30ke2RlbGltZXRlcn0ke1xuICAgICAgc2hhcmUucHJvb2Y/LncgfHwgJydcbiAgICB9JHtkZWxpbWV0ZXJ9JHtzaGFyZS5wcm9vZj8ucyB8fCAnJ30ke2RlbGltZXRlcn0ke3NoYXJlLnByb29mPy5zMSB8fCAnJ30ke2RlbGltZXRlcn0ke1xuICAgICAgc2hhcmUucHJvb2Y/LnMyIHx8ICcnXG4gICAgfSR7ZGVsaW1ldGVyfSR7KHNoYXJlLnAgfHwgW10pLmpvaW4oZGVsaW1ldGVyKX0ke2RlbGltZXRlcn0keyhzaGFyZS5zaWdtYSB8fCBbXSkuam9pbihkZWxpbWV0ZXIpfWAsXG4gIH07XG59XG5cbi8qKlxuICogcGFyc2VzIEEgc2hhcmUgZnJvbSBzaWduYXR1cmUgc2hhcmUgcmVjb3JkXG4gKiBAcGFyYW0gc2hhcmUgLSBzaWduYXR1cmUgc2hhcmUgcmVjb3JkXG4gKiBAcmV0dXJucyBBIFNoYXJlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZUFTaGFyZShzaGFyZTogU2lnbmF0dXJlU2hhcmVSZWNvcmQpOiBBU2hhcmUge1xuICBjb25zdCBzaGFyZXMgPSBzaGFyZS5zaGFyZS5zcGxpdChkZWxpbWV0ZXIpO1xuICAvLyBUT0RPOiBvbmNlIHNpZ21hIGlzIG1hbmRhdG9yeSwgbWFrZSBleHBlY3RlZCBsZW5ndGggMzcgKyBFY2RzYVBhaWxsaWVyUHJvb2YubVxuICB2YWxpZGF0ZVNoYXJlc0xlbmd0aChzaGFyZXMsIDM3ICsgMSwgJ0EnKTtcbiAgY29uc3QgaGFzUHJvb2YgPSB2YWxpZGF0ZU9wdGlvbmFsVmFsdWVzKHNoYXJlcywgNywgMTMsICdBJywgJ3Byb29mJyk7XG4gIGNvbnN0IGhhc0dhbW1hUHJvb2YgPSB2YWxpZGF0ZU9wdGlvbmFsVmFsdWVzKHNoYXJlcywgMTMsIDI1LCAnQScsICdnYW1tYVByb29mJyk7XG4gIGNvbnN0IGhhc1dQcm9vZiA9IHZhbGlkYXRlT3B0aW9uYWxWYWx1ZXMoc2hhcmVzLCAyNSwgMzcsICdBJywgJ3dQcm9vZicpO1xuICBjb25zdCBoYXNTaWdtYSA9IHZhbGlkYXRlT3B0aW9uYWxWYWx1ZXMoc2hhcmVzLCAzNywgMzcgKyBFY2RzYVBhaWxsaWVyUHJvb2YubSwgJ0EnLCAnc2lnbWEnKTtcblxuICBjb25zdCBwcm9vZjogUmFuZ2VQcm9vZlNoYXJlIHwgdW5kZWZpbmVkID0gaGFzUHJvb2ZcbiAgICA/IHtcbiAgICAgICAgejogc2hhcmVzWzddLFxuICAgICAgICB1OiBzaGFyZXNbOF0sXG4gICAgICAgIHc6IHNoYXJlc1s5XSxcbiAgICAgICAgczogc2hhcmVzWzEwXSxcbiAgICAgICAgczE6IHNoYXJlc1sxMV0sXG4gICAgICAgIHMyOiBzaGFyZXNbMTJdLFxuICAgICAgfVxuICAgIDogdW5kZWZpbmVkO1xuXG4gIGNvbnN0IGdhbW1hUHJvb2Y6IFJhbmdlUHJvb2ZXaXRoQ2hlY2tTaGFyZSB8IHVuZGVmaW5lZCA9IGhhc0dhbW1hUHJvb2ZcbiAgICA/IHtcbiAgICAgICAgejogc2hhcmVzWzEzXSxcbiAgICAgICAgenBybTogc2hhcmVzWzE0XSxcbiAgICAgICAgdDogc2hhcmVzWzE1XSxcbiAgICAgICAgdjogc2hhcmVzWzE2XSxcbiAgICAgICAgdzogc2hhcmVzWzE3XSxcbiAgICAgICAgczogc2hhcmVzWzE4XSxcbiAgICAgICAgczE6IHNoYXJlc1sxOV0sXG4gICAgICAgIHMyOiBzaGFyZXNbMjBdLFxuICAgICAgICB0MTogc2hhcmVzWzIxXSxcbiAgICAgICAgdDI6IHNoYXJlc1syMl0sXG4gICAgICAgIHU6IHNoYXJlc1syM10sXG4gICAgICAgIHg6IHNoYXJlc1syNF0sXG4gICAgICB9XG4gICAgOiB1bmRlZmluZWQ7XG5cbiAgY29uc3Qgd1Byb29mOiBSYW5nZVByb29mV2l0aENoZWNrU2hhcmUgfCB1bmRlZmluZWQgPSBoYXNXUHJvb2ZcbiAgICA/IHtcbiAgICAgICAgejogc2hhcmVzWzI1XSxcbiAgICAgICAgenBybTogc2hhcmVzWzI2XSxcbiAgICAgICAgdDogc2hhcmVzWzI3XSxcbiAgICAgICAgdjogc2hhcmVzWzI4XSxcbiAgICAgICAgdzogc2hhcmVzWzI5XSxcbiAgICAgICAgczogc2hhcmVzWzMwXSxcbiAgICAgICAgczE6IHNoYXJlc1szMV0sXG4gICAgICAgIHMyOiBzaGFyZXNbMzJdLFxuICAgICAgICB0MTogc2hhcmVzWzMzXSxcbiAgICAgICAgdDI6IHNoYXJlc1szNF0sXG4gICAgICAgIHU6IHNoYXJlc1szNV0sXG4gICAgICAgIHg6IHNoYXJlc1szNl0sXG4gICAgICB9XG4gICAgOiB1bmRlZmluZWQ7XG5cbiAgcmV0dXJuIHtcbiAgICBpOiBnZXRQYXJ0aWNpcGFudEluZGV4KHNoYXJlLnRvKSxcbiAgICBqOiBnZXRQYXJ0aWNpcGFudEluZGV4KHNoYXJlLmZyb20pLFxuICAgIGs6IHNoYXJlc1swXSxcbiAgICBhbHBoYTogc2hhcmVzWzFdLFxuICAgIG11OiBzaGFyZXNbMl0sXG4gICAgbjogc2hhcmVzWzNdLFxuICAgIG50aWxkZTogc2hhcmVzWzRdLFxuICAgIGgxOiBzaGFyZXNbNV0sXG4gICAgaDI6IHNoYXJlc1s2XSxcbiAgICBwcm9vZixcbiAgICBnYW1tYVByb29mLFxuICAgIHdQcm9vZixcbiAgICBzaWdtYTogaGFzU2lnbWEgPyBzaGFyZXMuc2xpY2UoMzcpIDogdW5kZWZpbmVkLFxuICB9O1xufVxuXG4vKipcbiAqIGNvbnZlcnQgQSBzaGFyZSB0byBzaWduYXR1cmUgc2hhcmUgcmVjb3JkXG4gKiBAcGFyYW0gc2hhcmUgLSBBIHNoYXJlXG4gKiBAcmV0dXJucyBzaWduYXR1cmUgc2hhcmUgcmVjb3JkXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjb252ZXJ0QVNoYXJlKHNoYXJlOiBBU2hhcmUpOiBTaWduYXR1cmVTaGFyZVJlY29yZCB7XG4gIHJldHVybiB7XG4gICAgdG86IGdldFBhcnRpY2lwYW50RnJvbUluZGV4KHNoYXJlLmkpLFxuICAgIGZyb206IGdldFBhcnRpY2lwYW50RnJvbUluZGV4KHNoYXJlLmopLFxuICAgIHNoYXJlOiBgJHtzaGFyZS5rfSR7ZGVsaW1ldGVyfSR7c2hhcmUuYWxwaGF9JHtkZWxpbWV0ZXJ9JHtzaGFyZS5tdX0ke2RlbGltZXRlcn0ke3NoYXJlLm59JHtkZWxpbWV0ZXJ9JHtcbiAgICAgIHNoYXJlLm50aWxkZVxuICAgIH0ke2RlbGltZXRlcn0ke3NoYXJlLmgxfSR7ZGVsaW1ldGVyfSR7c2hhcmUuaDJ9JHtkZWxpbWV0ZXJ9JHtzaGFyZS5wcm9vZj8ueiB8fCAnJ30ke2RlbGltZXRlcn0ke1xuICAgICAgc2hhcmUucHJvb2Y/LnUgfHwgJydcbiAgICB9JHtkZWxpbWV0ZXJ9JHtzaGFyZS5wcm9vZj8udyB8fCAnJ30ke2RlbGltZXRlcn0ke3NoYXJlLnByb29mPy5zIHx8ICcnfSR7ZGVsaW1ldGVyfSR7XG4gICAgICBzaGFyZS5wcm9vZj8uczEgfHwgJydcbiAgICB9JHtkZWxpbWV0ZXJ9JHtzaGFyZS5wcm9vZj8uczIgfHwgJyd9JHtkZWxpbWV0ZXJ9JHtzaGFyZS5nYW1tYVByb29mPy56IHx8ICcnfSR7ZGVsaW1ldGVyfSR7XG4gICAgICBzaGFyZS5nYW1tYVByb29mPy56cHJtIHx8ICcnXG4gICAgfSR7ZGVsaW1ldGVyfSR7c2hhcmUuZ2FtbWFQcm9vZj8udCB8fCAnJ30ke2RlbGltZXRlcn0ke3NoYXJlLmdhbW1hUHJvb2Y/LnYgfHwgJyd9JHtkZWxpbWV0ZXJ9JHtcbiAgICAgIHNoYXJlLmdhbW1hUHJvb2Y/LncgfHwgJydcbiAgICB9JHtkZWxpbWV0ZXJ9JHtzaGFyZS5nYW1tYVByb29mPy5zIHx8ICcnfSR7ZGVsaW1ldGVyfSR7c2hhcmUuZ2FtbWFQcm9vZj8uczEgfHwgJyd9JHtkZWxpbWV0ZXJ9JHtcbiAgICAgIHNoYXJlLmdhbW1hUHJvb2Y/LnMyIHx8ICcnXG4gICAgfSR7ZGVsaW1ldGVyfSR7c2hhcmUuZ2FtbWFQcm9vZj8udDEgfHwgJyd9JHtkZWxpbWV0ZXJ9JHtzaGFyZS5nYW1tYVByb29mPy50MiB8fCAnJ30ke2RlbGltZXRlcn0ke1xuICAgICAgc2hhcmUuZ2FtbWFQcm9vZj8udSB8fCAnJ1xuICAgIH0ke2RlbGltZXRlcn0ke3NoYXJlLmdhbW1hUHJvb2Y/LnggfHwgJyd9JHtkZWxpbWV0ZXJ9JHtzaGFyZS53UHJvb2Y/LnogfHwgJyd9JHtkZWxpbWV0ZXJ9JHtcbiAgICAgIHNoYXJlLndQcm9vZj8uenBybSB8fCAnJ1xuICAgIH0ke2RlbGltZXRlcn0ke3NoYXJlLndQcm9vZj8udCB8fCAnJ30ke2RlbGltZXRlcn0ke3NoYXJlLndQcm9vZj8udiB8fCAnJ30ke2RlbGltZXRlcn0ke1xuICAgICAgc2hhcmUud1Byb29mPy53IHx8ICcnXG4gICAgfSR7ZGVsaW1ldGVyfSR7c2hhcmUud1Byb29mPy5zIHx8ICcnfSR7ZGVsaW1ldGVyfSR7c2hhcmUud1Byb29mPy5zMSB8fCAnJ30ke2RlbGltZXRlcn0ke1xuICAgICAgc2hhcmUud1Byb29mPy5zMiB8fCAnJ1xuICAgIH0ke2RlbGltZXRlcn0ke3NoYXJlLndQcm9vZj8udDEgfHwgJyd9JHtkZWxpbWV0ZXJ9JHtzaGFyZS53UHJvb2Y/LnQyIHx8ICcnfSR7ZGVsaW1ldGVyfSR7XG4gICAgICBzaGFyZS53UHJvb2Y/LnUgfHwgJydcbiAgICB9JHtkZWxpbWV0ZXJ9JHtzaGFyZS53UHJvb2Y/LnggfHwgJyd9JHtkZWxpbWV0ZXJ9JHsoc2hhcmUuc2lnbWEgfHwgW10pLmpvaW4oZGVsaW1ldGVyKX1gLFxuICB9O1xufVxuXG4vKipcbiAqIHBhcnNlcyBNdSBzaGFyZSBmcm9tIHNpZ25hdHVyZSBzaGFyZSByZWNvcmRcbiAqIEBwYXJhbSBzaGFyZSAtIHNpZ25hdHVyZSBzaGFyZSByZWNvcmRcbiAqIEByZXR1cm5zIE11IFNoYXJlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZU11U2hhcmUoc2hhcmU6IFNpZ25hdHVyZVNoYXJlUmVjb3JkKTogTVVTaGFyZSB7XG4gIGNvbnN0IHNoYXJlcyA9IHNoYXJlLnNoYXJlLnNwbGl0KGRlbGltZXRlcik7XG4gIHZhbGlkYXRlU2hhcmVzTGVuZ3RoKHNoYXJlcywgMjYsICdNdScpO1xuICBjb25zdCBoYXNHYW1tYVByb29mID0gdmFsaWRhdGVPcHRpb25hbFZhbHVlcyhzaGFyZXMsIDIsIDE0LCAnTXUnLCAnZ2FtbWFQcm9vZicpO1xuICBjb25zdCBoYXNXUHJvb2YgPSB2YWxpZGF0ZU9wdGlvbmFsVmFsdWVzKHNoYXJlcywgMTQsIDI2LCAnTXUnLCAnd1Byb29mJyk7XG5cbiAgbGV0IGdhbW1hUHJvb2Y7XG4gIGlmIChoYXNHYW1tYVByb29mKSB7XG4gICAgZ2FtbWFQcm9vZiA9IHtcbiAgICAgIHo6IHNoYXJlc1syXSxcbiAgICAgIHpwcm06IHNoYXJlc1szXSxcbiAgICAgIHQ6IHNoYXJlc1s0XSxcbiAgICAgIHY6IHNoYXJlc1s1XSxcbiAgICAgIHc6IHNoYXJlc1s2XSxcbiAgICAgIHM6IHNoYXJlc1s3XSxcbiAgICAgIHMxOiBzaGFyZXNbOF0sXG4gICAgICBzMjogc2hhcmVzWzldLFxuICAgICAgdDE6IHNoYXJlc1sxMF0sXG4gICAgICB0Mjogc2hhcmVzWzExXSxcbiAgICAgIHU6IHNoYXJlc1sxMl0sXG4gICAgICB4OiBzaGFyZXNbMTNdLFxuICAgIH07XG4gIH1cblxuICBsZXQgd1Byb29mO1xuICBpZiAoaGFzV1Byb29mKSB7XG4gICAgd1Byb29mID0ge1xuICAgICAgejogc2hhcmVzWzE0XSxcbiAgICAgIHpwcm06IHNoYXJlc1sxNV0sXG4gICAgICB0OiBzaGFyZXNbMTZdLFxuICAgICAgdjogc2hhcmVzWzE3XSxcbiAgICAgIHc6IHNoYXJlc1sxOF0sXG4gICAgICBzOiBzaGFyZXNbMTldLFxuICAgICAgczE6IHNoYXJlc1syMF0sXG4gICAgICBzMjogc2hhcmVzWzIxXSxcbiAgICAgIHQxOiBzaGFyZXNbMjJdLFxuICAgICAgdDI6IHNoYXJlc1syM10sXG4gICAgICB1OiBzaGFyZXNbMjRdLFxuICAgICAgeDogc2hhcmVzWzI1XSxcbiAgICB9O1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBpOiBnZXRQYXJ0aWNpcGFudEluZGV4KHNoYXJlLnRvKSxcbiAgICBqOiBnZXRQYXJ0aWNpcGFudEluZGV4KHNoYXJlLmZyb20pLFxuICAgIGFscGhhOiBzaGFyZXNbMF0sXG4gICAgbXU6IHNoYXJlc1sxXSxcbiAgICBnYW1tYVByb29mLFxuICAgIHdQcm9vZixcbiAgfTtcbn1cblxuLyoqXG4gKiBjb252ZXJ0IE11IHNoYXJlIHRvIHNpZ25hdHVyZSBzaGFyZSByZWNvcmRcbiAqIEBwYXJhbSBzaGFyZSAtIE11IHNoYXJlXG4gKiBAcmV0dXJucyBzaWduYXR1cmUgc2hhcmUgcmVjb3JkXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjb252ZXJ0TXVTaGFyZShzaGFyZTogTVVTaGFyZSk6IFNpZ25hdHVyZVNoYXJlUmVjb3JkIHtcbiAgcmV0dXJuIHtcbiAgICB0bzogZ2V0UGFydGljaXBhbnRGcm9tSW5kZXgoc2hhcmUuaSksXG4gICAgZnJvbTogZ2V0UGFydGljaXBhbnRGcm9tSW5kZXgoc2hhcmUuaiksXG4gICAgc2hhcmU6IGAke3NoYXJlLmFscGhhfSR7ZGVsaW1ldGVyfSR7c2hhcmUubXV9JHtkZWxpbWV0ZXJ9JHtzaGFyZS5nYW1tYVByb29mPy56IHx8ICcnfSR7ZGVsaW1ldGVyfSR7XG4gICAgICBzaGFyZS5nYW1tYVByb29mPy56cHJtIHx8ICcnXG4gICAgfSR7ZGVsaW1ldGVyfSR7c2hhcmUuZ2FtbWFQcm9vZj8udCB8fCAnJ30ke2RlbGltZXRlcn0ke3NoYXJlLmdhbW1hUHJvb2Y/LnYgfHwgJyd9JHtkZWxpbWV0ZXJ9JHtcbiAgICAgIHNoYXJlLmdhbW1hUHJvb2Y/LncgfHwgJydcbiAgICB9JHtkZWxpbWV0ZXJ9JHtzaGFyZS5nYW1tYVByb29mPy5zIHx8ICcnfSR7ZGVsaW1ldGVyfSR7c2hhcmUuZ2FtbWFQcm9vZj8uczEgfHwgJyd9JHtkZWxpbWV0ZXJ9JHtcbiAgICAgIHNoYXJlLmdhbW1hUHJvb2Y/LnMyIHx8ICcnXG4gICAgfSR7ZGVsaW1ldGVyfSR7c2hhcmUuZ2FtbWFQcm9vZj8udDEgfHwgJyd9JHtkZWxpbWV0ZXJ9JHtzaGFyZS5nYW1tYVByb29mPy50MiB8fCAnJ30ke2RlbGltZXRlcn0ke1xuICAgICAgc2hhcmUuZ2FtbWFQcm9vZj8udSB8fCAnJ1xuICAgIH0ke2RlbGltZXRlcn0ke3NoYXJlLmdhbW1hUHJvb2Y/LnggfHwgJyd9JHtkZWxpbWV0ZXJ9JHtzaGFyZS53UHJvb2Y/LnogfHwgJyd9JHtkZWxpbWV0ZXJ9JHtcbiAgICAgIHNoYXJlLndQcm9vZj8uenBybSB8fCAnJ1xuICAgIH0ke2RlbGltZXRlcn0ke3NoYXJlLndQcm9vZj8udCB8fCAnJ30ke2RlbGltZXRlcn0ke3NoYXJlLndQcm9vZj8udiB8fCAnJ30ke2RlbGltZXRlcn0ke1xuICAgICAgc2hhcmUud1Byb29mPy53IHx8ICcnXG4gICAgfSR7ZGVsaW1ldGVyfSR7c2hhcmUud1Byb29mPy5zIHx8ICcnfSR7ZGVsaW1ldGVyfSR7c2hhcmUud1Byb29mPy5zMSB8fCAnJ30ke2RlbGltZXRlcn0ke1xuICAgICAgc2hhcmUud1Byb29mPy5zMiB8fCAnJ1xuICAgIH0ke2RlbGltZXRlcn0ke3NoYXJlLndQcm9vZj8udDEgfHwgJyd9JHtkZWxpbWV0ZXJ9JHtzaGFyZS53UHJvb2Y/LnQyIHx8ICcnfSR7ZGVsaW1ldGVyfSR7XG4gICAgICBzaGFyZS53UHJvb2Y/LnUgfHwgJydcbiAgICB9JHtkZWxpbWV0ZXJ9JHtzaGFyZS53UHJvb2Y/LnggfHwgJyd9YCxcbiAgfTtcbn1cblxuLyoqXG4gKiBwYXJzZXMgRCBzaGFyZSBmcm9tIHNpZ25hdHVyZSBzaGFyZSByZWNvcmRcbiAqIEBwYXJhbSBzaGFyZSAtIHNpZ25hdHVyZSBzaGFyZSByZWNvcmRcbiAqIEByZXR1cm5zIEQgU2hhcmVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlRFNoYXJlKHNoYXJlOiBTaWduYXR1cmVTaGFyZVJlY29yZCk6IERTaGFyZSB7XG4gIGNvbnN0IHNoYXJlcyA9IHNoYXJlLnNoYXJlLnNwbGl0KGRlbGltZXRlcik7XG4gIHZhbGlkYXRlU2hhcmVzTGVuZ3RoKHNoYXJlcywgMiwgJ0QnKTtcblxuICByZXR1cm4ge1xuICAgIGk6IGdldFBhcnRpY2lwYW50SW5kZXgoc2hhcmUudG8pLFxuICAgIGo6IGdldFBhcnRpY2lwYW50SW5kZXgoc2hhcmUuZnJvbSksXG4gICAgZGVsdGE6IHNoYXJlc1swXSxcbiAgICBHYW1tYTogc2hhcmVzWzFdLFxuICB9O1xufVxuXG4vKipcbiAqIGNvbnZlcnQgRCBzaGFyZSB0byBzaWduYXR1cmUgc2hhcmUgcmVjb3JkXG4gKiBAcGFyYW0gc2hhcmUgLSBEIHNoYXJlXG4gKiBAcmV0dXJucyBzaWduYXR1cmUgc2hhcmUgcmVjb3JkXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjb252ZXJ0RFNoYXJlKHNoYXJlOiBEU2hhcmUpOiBTaWduYXR1cmVTaGFyZVJlY29yZCB7XG4gIHJldHVybiB7XG4gICAgdG86IGdldFBhcnRpY2lwYW50RnJvbUluZGV4KHNoYXJlLmkpLFxuICAgIGZyb206IGdldFBhcnRpY2lwYW50RnJvbUluZGV4KHNoYXJlLmopLFxuICAgIHNoYXJlOiBgJHtzaGFyZS5kZWx0YX0ke2RlbGltZXRlcn0ke3NoYXJlLkdhbW1hfWAsXG4gIH07XG59XG5cbi8qKlxuICogcGFyc2VzIFMgYW5kIEQgc2hhcmUgZnJvbSBzaWduYXR1cmUgc2hhcmUgcmVjb3JkXG4gKiBAcGFyYW0gc2hhcmUgLSBzaWduYXR1cmUgc2hhcmUgcmVjb3JkXG4gKiBAcmV0dXJucyBPYmplY3QgY29udGFpbmluZyBTIGFuZCBEIFNoYXJlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZVNEU2hhcmUoc2hhcmU6IFNpZ25hdHVyZVNoYXJlUmVjb3JkKTogeyBzU2hhcmU6IFNpZ25hdHVyZVNoYXJlOyBkU2hhcmU6IERTaGFyZSB9IHtcbiAgY29uc3Qgc2hhcmVzID0gc2hhcmUuc2hhcmUuc3BsaXQoc2Vjb25kYXJ5RGVsaW1ldGVyKTtcbiAgdmFsaWRhdGVTaGFyZXNMZW5ndGgoc2hhcmVzLCAyLCAnU0QnKTtcblxuICByZXR1cm4ge1xuICAgIHNTaGFyZTogcGFyc2VTaWduYXR1cmVTaGFyZSh7IHRvOiBzaGFyZS50bywgZnJvbTogc2hhcmUuZnJvbSwgc2hhcmU6IHNoYXJlc1swXSB9KSxcbiAgICBkU2hhcmU6IHBhcnNlRFNoYXJlKHsgdG86IHNoYXJlLnRvLCBmcm9tOiBzaGFyZS5mcm9tLCBzaGFyZTogc2hhcmVzWzFdIH0pLFxuICB9O1xufVxuXG4vKipcbiAqIGNvbnZlcnQgUyBhbmQgRCBzaGFyZSB0byBzaWduYXR1cmUgc2hhcmUgcmVjb3JkXG4gKiBAcGFyYW0gc2hhcmUgLSBTIGFuZCBEIHNoYXJlIGluIGEgb2JqZWN0XG4gKiBAcmV0dXJucyBzaWduYXR1cmUgc2hhcmUgcmVjb3JkXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjb252ZXJ0U0RTaGFyZShzaGFyZTogeyBzU2hhcmU6IFNTaGFyZTsgZFNoYXJlOiBEU2hhcmUgfSk6IFNpZ25hdHVyZVNoYXJlUmVjb3JkIHtcbiAgcmV0dXJuIHtcbiAgICB0bzogZ2V0UGFydGljaXBhbnRGcm9tSW5kZXgoc2hhcmUuZFNoYXJlLmkpLFxuICAgIGZyb206IGdldFBhcnRpY2lwYW50RnJvbUluZGV4KHNoYXJlLmRTaGFyZS5qKSxcbiAgICBzaGFyZTogYCR7c2hhcmUuc1NoYXJlLlJ9JHtkZWxpbWV0ZXJ9JHtzaGFyZS5zU2hhcmUuc30ke2RlbGltZXRlcn0ke3NoYXJlLnNTaGFyZS55fSR7c2Vjb25kYXJ5RGVsaW1ldGVyfSR7c2hhcmUuZFNoYXJlLmRlbHRhfSR7ZGVsaW1ldGVyfSR7c2hhcmUuZFNoYXJlLkdhbW1hfWAsXG4gIH07XG59XG5cbi8qKlxuICogcGFyc2VzIHNpZ25hdHVyZSBzaGFyZSBmcm9tIHNpZ25hdHVyZSBzaGFyZSByZWNvcmRcbiAqIEBwYXJhbSBzaGFyZSAtIHNpZ25hdHVyZSBzaGFyZSByZWNvcmRcbiAqIEByZXR1cm5zIFNpZ25hdHVyZSBTaGFyZVxuICovXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VTaWduYXR1cmVTaGFyZShzaGFyZTogU2lnbmF0dXJlU2hhcmVSZWNvcmQpOiBTaWduYXR1cmVTaGFyZSB7XG4gIGNvbnN0IHNoYXJlcyA9IHNoYXJlLnNoYXJlLnNwbGl0KGRlbGltZXRlcik7XG4gIHZhbGlkYXRlU2hhcmVzTGVuZ3RoKHNoYXJlcywgMywgJ1NpZ25hdHVyZScpO1xuXG4gIHJldHVybiB7XG4gICAgaTogZ2V0UGFydGljaXBhbnRJbmRleChzaGFyZS50byksXG4gICAgUjogc2hhcmVzWzBdLFxuICAgIHM6IHNoYXJlc1sxXSxcbiAgICB5OiBzaGFyZXNbMl0sXG4gIH07XG59XG5cbi8qKlxuICogY29udmV0cyBjb21iaW5lZCBzaWduYXR1cmUgdG8gc2lnbmF0dXJlIHNoYXJlIHJlY29yZFxuICogQHBhcmFtIHNpZ25hdHVyZSAtIGNvbWJpbmVkIHNpZ25hdHVyZSBzaGFyZVxuICogQHBhcmFtIHVzZXJJbmRleCAtIHVzZXIgaW5kZXgsIGVpdGhlciAxICh1c2VyKSBvciAyIChiYWNrdXApXG4gKiBAcmV0dXJucyBzaWduYXR1cmUgc2hhcmUgcmVjb3JkXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjb252ZXJ0Q29tYmluZWRTaWduYXR1cmUoc2lnbmF0dXJlOiBTaWduYXR1cmUsIHVzZXJJbmRleDogbnVtYmVyKTogU2lnbmF0dXJlU2hhcmVSZWNvcmQge1xuICByZXR1cm4ge1xuICAgIHRvOiBTaWduYXR1cmVTaGFyZVR5cGUuQklUR08sXG4gICAgZnJvbTogZ2V0UGFydGljaXBhbnRGcm9tSW5kZXgodXNlckluZGV4KSxcbiAgICBzaGFyZTogYCR7c2lnbmF0dXJlLnJlY2lkfSR7ZGVsaW1ldGVyfSR7c2lnbmF0dXJlLnJ9JHtkZWxpbWV0ZXJ9JHtzaWduYXR1cmUuc30ke2RlbGltZXRlcn0ke3NpZ25hdHVyZS55fWAsXG4gIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZUNvbWJpbmVkU2lnbmF0dXJlKHNoYXJlOiBTaWduYXR1cmVTaGFyZVJlY29yZCk6IFNpZ25hdHVyZSB7XG4gIGNvbnN0IHNoYXJlcyA9IHNoYXJlLnNoYXJlLnNwbGl0KGRlbGltZXRlcik7XG4gIHZhbGlkYXRlU2hhcmVzTGVuZ3RoKHNoYXJlcywgMywgJ1NpZ25hdHVyZScpO1xuXG4gIHJldHVybiB7XG4gICAgcmVjaWQ6IE51bWJlcihzaGFyZXNbMF0pLFxuICAgIHI6IHNoYXJlc1sxXSxcbiAgICBzOiBzaGFyZXNbMl0sXG4gICAgeTogc2hhcmVzWzNdLFxuICB9O1xufVxuXG4vKipcbiAqIGNvbnZlcnQgc2lnbmF0dXJlIHNoYXJlIHRvIHNpZ25hdHVyZSBzaGFyZSByZWNvcmRcbiAqIEBwYXJhbSBzaGFyZSAtIFNpZ25hdHVyZSBzaGFyZVxuICogQHBhcmFtIHNlbmRlckluZGV4XG4gKiBAcGFyYW0gcmVjaXBpZW50SW5kZXhcbiAqIEByZXR1cm5zIHNpZ25hdHVyZSBzaGFyZSByZWNvcmRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNvbnZlcnRTaWduYXR1cmVTaGFyZShcbiAgc2hhcmU6IFNpZ25hdHVyZVNoYXJlLFxuICBzZW5kZXJJbmRleDogbnVtYmVyLFxuICByZWNpcGllbnRJbmRleDogbnVtYmVyXG4pOiBTaWduYXR1cmVTaGFyZVJlY29yZCB7XG4gIHJldHVybiB7XG4gICAgdG86IGdldFBhcnRpY2lwYW50RnJvbUluZGV4KHJlY2lwaWVudEluZGV4KSxcbiAgICBmcm9tOiBnZXRQYXJ0aWNpcGFudEZyb21JbmRleChzZW5kZXJJbmRleCksXG4gICAgc2hhcmU6IGAke3NoYXJlLlJ9JHtkZWxpbWV0ZXJ9JHtzaGFyZS5zfSR7ZGVsaW1ldGVyfSR7c2hhcmUueX1gLFxuICB9O1xufVxuXG4vKipcbiAqIGNvbnZlcnRzIEIgc2hhcmUgdG8gc2lnbmF0dXJlIHNoYXJlIHJlY29yZFxuICogQHBhcmFtIHNoYXJlIC0gQiBzaGFyZVxuICogQHJldHVybnMgc2lnbmF0dXJlIHNoYXJlIHJlY29yZFxuICovXG5leHBvcnQgZnVuY3Rpb24gY29udmVydEJTaGFyZShzaGFyZTogQlNoYXJlKTogU2lnbmF0dXJlU2hhcmVSZWNvcmQge1xuICByZXR1cm4ge1xuICAgIHRvOiBTaWduYXR1cmVTaGFyZVR5cGUuQklUR08sXG4gICAgZnJvbTogZ2V0UGFydGljaXBhbnRGcm9tSW5kZXgoc2hhcmUuaSksXG4gICAgc2hhcmU6IGAke3NoYXJlLmJldGF9JHtkZWxpbWV0ZXJ9JHtzaGFyZS5nYW1tYX0ke2RlbGltZXRlcn0ke3NoYXJlLmt9JHtkZWxpbWV0ZXJ9JHtzaGFyZS5udX0ke2RlbGltZXRlcn0ke1xuICAgICAgc2hhcmUud1xuICAgIH0ke2RlbGltZXRlcn0ke3NoYXJlLnl9JHtkZWxpbWV0ZXJ9JHtzaGFyZS5sfSR7ZGVsaW1ldGVyfSR7c2hhcmUubX0ke2RlbGltZXRlcn0ke3NoYXJlLm59JHtkZWxpbWV0ZXJ9JHtcbiAgICAgIHNoYXJlLm50aWxkZVxuICAgIH0ke2RlbGltZXRlcn0ke3NoYXJlLmgxfSR7ZGVsaW1ldGVyfSR7c2hhcmUuaDJ9JHtkZWxpbWV0ZXJ9JHtzaGFyZS5ja30ke2RlbGltZXRlcn0keyhzaGFyZS5wIHx8IFtdKS5qb2luKFxuICAgICAgZGVsaW1ldGVyXG4gICAgKX1gLFxuICB9O1xufVxuXG4vKipcbiAqIHBhcnNlcyBCIHNoYXJlIGZyb20gc2lnbmF0dXJlIHNoYXJlIHJlY29yZFxuICogQHBhcmFtIHNoYXJlIEIgc2hhcmUgcmVjb3JkXG4gKiBAcmV0dXJucyBCIFNoYXJlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZUJTaGFyZShzaGFyZTogU2lnbmF0dXJlU2hhcmVSZWNvcmQpOiBCU2hhcmUge1xuICBjb25zdCBzaGFyZXMgPSBzaGFyZS5zaGFyZS5zcGxpdChkZWxpbWV0ZXIpO1xuICAvLyBUT0RPOiBvbmNlIHAgaXMgbWFuZGF0b3J5LCBtYWtlIGV4cGVjdGVkTGVuZ3RoIDEzICsgRWNkc2FQYWlsbGllclByb29mLm1cbiAgdmFsaWRhdGVTaGFyZXNMZW5ndGgoc2hhcmVzLCAxMyArIDEsICdCJyk7XG4gIGNvbnN0IGhhc1AgPSB2YWxpZGF0ZU9wdGlvbmFsVmFsdWVzKHNoYXJlcywgMTMsIDEzICsgRWNkc2FQYWlsbGllclByb29mLm0sICdLJywgJ3AnKTtcblxuICByZXR1cm4ge1xuICAgIGk6IGdldFBhcnRpY2lwYW50SW5kZXgoc2hhcmUudG8pLFxuICAgIGJldGE6IHNoYXJlc1swXSxcbiAgICBnYW1tYTogc2hhcmVzWzFdLFxuICAgIGs6IHNoYXJlc1syXSxcbiAgICBudTogc2hhcmVzWzNdLFxuICAgIHc6IHNoYXJlc1s0XSxcbiAgICB5OiBzaGFyZXNbNV0sXG4gICAgbDogc2hhcmVzWzZdLFxuICAgIG06IHNoYXJlc1s3XSxcbiAgICBuOiBzaGFyZXNbOF0sXG4gICAgbnRpbGRlOiBzaGFyZXNbOV0sXG4gICAgaDE6IHNoYXJlc1sxMF0sXG4gICAgaDI6IHNoYXJlc1sxMV0sXG4gICAgY2s6IHNoYXJlc1sxMl0sXG4gICAgcDogaGFzUCA/IHNoYXJlcy5zbGljZSgxMywgMTMgKyBFY2RzYVBhaWxsaWVyUHJvb2YubSkgOiB1bmRlZmluZWQsXG4gIH07XG59XG5cbi8qKlxuICogY29udmVydHMgTyBzaGFyZSB0byBzaWduYXR1cmUgc2hhcmUgcmVjb3JkXG4gKiBAcGFyYW0gc2hhcmUgTyBzaGFyZVxuICogQHJldHVybnMgc2lnbmF0dXJlIHNoYXJlIHJlY29yZFxuICovXG5leHBvcnQgZnVuY3Rpb24gY29udmVydE9TaGFyZShzaGFyZTogT1NoYXJlKTogU2lnbmF0dXJlU2hhcmVSZWNvcmQge1xuICByZXR1cm4ge1xuICAgIHRvOiBTaWduYXR1cmVTaGFyZVR5cGUuQklUR08sXG4gICAgZnJvbTogZ2V0UGFydGljaXBhbnRGcm9tSW5kZXgoc2hhcmUuaSksXG4gICAgc2hhcmU6IGAke3NoYXJlLkdhbW1hfSR7ZGVsaW1ldGVyfSR7c2hhcmUuZGVsdGF9JHtkZWxpbWV0ZXJ9JHtzaGFyZS5rfSR7ZGVsaW1ldGVyfSR7c2hhcmUub21pY3Jvbn0ke2RlbGltZXRlcn0ke3NoYXJlLnl9YCxcbiAgfTtcbn1cblxuLyoqXG4gKiBwYXJzZXMgTyBzaGFyZSBmcm9tIHNpZ25hdHVyZSBzaGFyZSByZWNvcmRcbiAqIEBwYXJhbSBzaGFyZSBPIHNoYXJlIHJlY29yZFxuICogQHJldHVybnMgTyBTaGFyZVxuICovXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VPU2hhcmUoc2hhcmU6IFNpZ25hdHVyZVNoYXJlUmVjb3JkKTogT1NoYXJlIHtcbiAgY29uc3Qgc2hhcmVzID0gc2hhcmUuc2hhcmUuc3BsaXQoZGVsaW1ldGVyKTtcbiAgdmFsaWRhdGVTaGFyZXNMZW5ndGgoc2hhcmVzLCA1LCAnTycpO1xuXG4gIHJldHVybiB7XG4gICAgaTogZ2V0UGFydGljaXBhbnRJbmRleChzaGFyZS50byksXG4gICAgR2FtbWE6IHNoYXJlc1swXSxcbiAgICBkZWx0YTogc2hhcmVzWzFdLFxuICAgIGs6IHNoYXJlc1syXSxcbiAgICBvbWljcm9uOiBzaGFyZXNbM10sXG4gICAgeTogc2hhcmVzWzRdLFxuICB9O1xufVxuXG4vKipcbiAqIGdldHMgcGFydGljaXBhbnQgaW5kZXhcbiAqIEBwYXJhbSBwYXJ0aWNpcGFudCAtIHBhcnRpY2lwYW50cyAodXNlciwgYmFja3VwLCBvciBiaXRnbylcbiAqIEByZXR1cm5zIGluZGV4ICgxLCAyLCAwciAzKVxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0UGFydGljaXBhbnRJbmRleChwYXJ0aWNpcGFudDogJ3VzZXInIHwgJ2JhY2t1cCcgfCAnYml0Z28nKTogbnVtYmVyIHtcbiAgc3dpdGNoIChwYXJ0aWNpcGFudCkge1xuICAgIGNhc2UgJ3VzZXInOlxuICAgICAgcmV0dXJuIDE7XG4gICAgY2FzZSAnYmFja3VwJzpcbiAgICAgIHJldHVybiAyO1xuICAgIGNhc2UgJ2JpdGdvJzpcbiAgICAgIHJldHVybiAzO1xuICAgIGRlZmF1bHQ6XG4gICAgICB0aHJvdyBFcnJvcignVW5rb3duIHBhcnRpY2lwYW50Jyk7XG4gIH1cbn1cblxuLyoqXG4gKiBnZXRzIHBhcnRpY2lwYW50IG5hbWUgYnkgaW5kZXhcbiAqIEBwYXJhbSBpbmRleCBwYXJ0aWNpcGFudCBpbmRleFxuICogQHJldHVybnMgcGFydGljaXBhbnQgbmFtZVxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0UGFydGljaXBhbnRGcm9tSW5kZXgoaW5kZXg6IG51bWJlcik6IFNpZ25hdHVyZVNoYXJlVHlwZSB7XG4gIHN3aXRjaCAoaW5kZXgpIHtcbiAgICBjYXNlIDE6XG4gICAgICByZXR1cm4gU2lnbmF0dXJlU2hhcmVUeXBlLlVTRVI7XG4gICAgY2FzZSAyOlxuICAgICAgcmV0dXJuIFNpZ25hdHVyZVNoYXJlVHlwZS5CQUNLVVA7XG4gICAgY2FzZSAzOlxuICAgICAgcmV0dXJuIFNpZ25hdHVyZVNoYXJlVHlwZS5CSVRHTztcbiAgICBkZWZhdWx0OlxuICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbmtub3duIHBhcnRpY2lwYW50IGluZGV4ICR7aW5kZXh9YCk7XG4gIH1cbn1cblxuLyoqXG4gKiBIZWxwZXIgZnVuY3Rpb24gdG8gdmVyaWZ5IHUtdmFsdWUgd2FsbGV0IHNpZ25hdHVyZXMgZm9yIHRoZSBiaXRnby11c2VyIGFuZCBiaXRnby1iYWNrdXAgc2hhcmVzLlxuICogQHBhcmFtIHBhcmFtc1xuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gdmVyaWZ5V2FsbGV0U2lnbmF0dXJlKHBhcmFtczoge1xuICB3YWxsZXRTaWduYXR1cmU6IHBncC5LZXk7XG4gIGJpdGdvUHViOiBwZ3AuS2V5O1xuICBjb21tb25LZXljaGFpbjogc3RyaW5nO1xuICB1c2VyS2V5SWQ6IHN0cmluZztcbiAgYmFja3VwS2V5SWQ6IHN0cmluZztcbiAgZGVjcnlwdGVkU2hhcmU6IHN0cmluZztcbiAgdmVyaWZpZXJJbmRleDogMSB8IDI7XG59KTogUHJvbWlzZTx2b2lkPiB7XG4gIGNvbnN0IHJhd05vdGF0aW9ucyA9IGF3YWl0IGNvbW1vblZlcmlmeVdhbGxldFNpZ25hdHVyZShwYXJhbXMpO1xuICBjb25zdCBwdWJsaWNVVmFsdWVSYXdOb3RhdGlvbkluZGV4ID0gMiArIHBhcmFtcy52ZXJpZmllckluZGV4O1xuXG4gIC8vIERlcml2ZSBwdWJsaWMgZm9ybSBvZiB1LXZhbHVlXG4gIGNvbnN0IHB1YmxpY1VWYWx1ZSA9IGVjYy5wb2ludEZyb21TY2FsYXIoQnVmZmVyLmZyb20ocGFyYW1zLmRlY3J5cHRlZFNoYXJlLnNsaWNlKDAsIDY0KSwgJ2hleCcpLCB0cnVlKTtcbiAgYXNzZXJ0KHB1YmxpY1VWYWx1ZSAhPT0gbnVsbCwgJ251bGwgcHVibGljIHUtdmFsdWUnKTtcbiAgLy8gVmVyaWZ5IHRoYXQgdGhlIHUgdmFsdWUgKyBjaGFpbmNvZGUgaXMgZXF1YWwgdG8gdGhlIHByb29mIHJldHJpZXZlZCBmcm9tIHRoZSByYXcgbm90YXRpb25zXG4gIGFzc2VydChcbiAgICBCdWZmZXIuZnJvbShwdWJsaWNVVmFsdWUpLnRvU3RyaW5nKCdoZXgnKSArIHBhcmFtcy5kZWNyeXB0ZWRTaGFyZS5zbGljZSg2NCkgPT09XG4gICAgICBCdWZmZXIuZnJvbShyYXdOb3RhdGlvbnNbcHVibGljVVZhbHVlUmF3Tm90YXRpb25JbmRleF0udmFsdWUpLnRvU3RyaW5nKCksXG4gICAgJ2JpdGdvIHNoYXJlIG1pc21hdGNoJ1xuICApO1xufVxuIl19
|
|
@@ -2,9 +2,9 @@ import { ECDSA } from './../../../account-lib/mpc/tss';
|
|
|
2
2
|
export declare type NShare = ECDSA.NShare;
|
|
3
3
|
export declare type KeyShare = ECDSA.KeyShare;
|
|
4
4
|
export declare type XShare = ECDSA.XShare;
|
|
5
|
-
export declare type
|
|
5
|
+
export declare type XShareWithChallenges = ECDSA.XShareWithChallenges;
|
|
6
6
|
export declare type YShare = ECDSA.YShare;
|
|
7
|
-
export declare type
|
|
7
|
+
export declare type YShareWithChallenges = ECDSA.YShareWithChallenges;
|
|
8
8
|
export declare type SignShare = ECDSA.SignShareRT;
|
|
9
9
|
export declare type KShare = ECDSA.KShare;
|
|
10
10
|
export declare type WShare = ECDSA.WShare;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../../src/bitgo/tss/ecdsa/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,gCAAgC,CAAC;AAEvD,oBAAY,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC;AAClC,oBAAY,QAAQ,GAAG,KAAK,CAAC,QAAQ,CAAC;AACtC,oBAAY,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC;AAClC,oBAAY,
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../../src/bitgo/tss/ecdsa/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,gCAAgC,CAAC;AAEvD,oBAAY,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC;AAClC,oBAAY,QAAQ,GAAG,KAAK,CAAC,QAAQ,CAAC;AACtC,oBAAY,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC;AAClC,oBAAY,oBAAoB,GAAG,KAAK,CAAC,oBAAoB,CAAC;AAC9D,oBAAY,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC;AAClC,oBAAY,oBAAoB,GAAG,KAAK,CAAC,oBAAoB,CAAC;AAC9D,oBAAY,SAAS,GAAG,KAAK,CAAC,WAAW,CAAC;AAC1C,oBAAY,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC;AAClC,oBAAY,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC;AAClC,oBAAY,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC;AAClC,oBAAY,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC;AAClC,oBAAY,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC;AAClC,oBAAY,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC;AAClC,oBAAY,2BAA2B,GAAG,KAAK,CAAC,aAAa,CAAC;AAC9D,oBAAY,gCAAgC,GAAG,KAAK,CAAC,aAAa,CAAC;AACnE,oBAAY,cAAc,GAAG,KAAK,CAAC,MAAM,CAAC;AAC1C,oBAAY,SAAS,GAAG,KAAK,CAAC,SAAS,CAAC;AACxC,oBAAY,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC;AAClC,oBAAY,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC;AAClC,oBAAY,WAAW,GAAG,KAAK,CAAC,WAAW,CAAC;AAE5C,oBAAY,aAAa;IACvB,MAAM,WAAW;IACjB,OAAO,YAAY;IACnB,MAAM,WAAW;CAClB;AAED,oBAAY,iBAAiB;IAC3B,MAAM,WAAW;IACjB,MAAM,WAAW;IACjB,SAAS,cAAc;CACxB;AAED,oBAAY,mBAAmB,GAAG,MAAM,GAAG,MAAM,CAAC;AAElD,oBAAY,eAAe,GAAG;IAC5B,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;IACV,WAAW,EAAE,MAAM,CAAC;IAEpB,qBAAqB,EAAE,MAAM,CAAC;IAC9B,CAAC,EAAE,MAAM,CAAC;IACV,QAAQ,CAAC,EAAE,MAAM,CAAC;IAElB,iBAAiB,CAAC,EAAE,MAAM,CAAC;CAC5B,CAAC;AAGF,oBAAY,iBAAiB,GAAG;IAC9B,MAAM,EAAE,eAAe,CAAC;IACxB,qBAAqB,EAAE,MAAM,CAAC;IAC9B,iBAAiB,EAAE,MAAM,CAAC;IAC1B,aAAa,CAAC,EAAE,OAAO,CAAC;CACzB,CAAC;AAGF,oBAAY,WAAW,GAAG;IACxB,cAAc,EAAE,MAAM,CAAC;IACvB,eAAe,EAAE,eAAe,CAAC;CAClC,CAAC;AAGF,oBAAY,eAAe,GAAG;IAC5B,MAAM,EAAE,KAAK,CAAC,MAAM,CAAC;IACrB,WAAW,EAAE,KAAK,CAAC,MAAM,CAAC;IAC1B,YAAY,CAAC,EAAE,KAAK,CAAC,MAAM,CAAC;IAC5B,UAAU,CAAC,EAAE,KAAK,CAAC,MAAM,CAAC;CAC3B,CAAC;AAEF,oBAAY,uBAAuB,GAAG;IACpC,QAAQ,EAAE,KAAK,CAAC,QAAQ,CAAC;IACzB,gBAAgB,EAAE,iBAAiB,EAAE,CAAC;IACtC,cAAc,EAAE,MAAM,CAAC;CACxB,CAAC;AAEF,oBAAY,kBAAkB,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM,GAAG,SAAS,CAAC"}
|