@bitgo/sdk-core 26.8.2 → 26.10.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 +22 -0
- package/dist/src/bitgo/baseCoin/baseCoin.d.ts +7 -0
- package/dist/src/bitgo/baseCoin/baseCoin.d.ts.map +1 -1
- package/dist/src/bitgo/baseCoin/baseCoin.js +8 -1
- package/dist/src/bitgo/baseCoin/iBaseCoin.d.ts +4 -3
- package/dist/src/bitgo/baseCoin/iBaseCoin.d.ts.map +1 -1
- package/dist/src/bitgo/baseCoin/iBaseCoin.js +1 -1
- package/dist/src/bitgo/keychain/iKeychains.d.ts +2 -0
- package/dist/src/bitgo/keychain/iKeychains.d.ts.map +1 -1
- package/dist/src/bitgo/keychain/iKeychains.js +1 -1
- package/dist/src/bitgo/keychain/keychains.d.ts +6 -0
- package/dist/src/bitgo/keychain/keychains.d.ts.map +1 -1
- package/dist/src/bitgo/keychain/keychains.js +27 -2
- package/dist/src/bitgo/staking/iStakingWallet.d.ts +10 -0
- package/dist/src/bitgo/staking/iStakingWallet.d.ts.map +1 -1
- package/dist/src/bitgo/staking/iStakingWallet.js +1 -1
- package/dist/src/bitgo/tss/ecdsa/ecdsaMPCv2.d.ts +15 -0
- package/dist/src/bitgo/tss/ecdsa/ecdsaMPCv2.d.ts.map +1 -0
- package/dist/src/bitgo/tss/ecdsa/ecdsaMPCv2.js +153 -0
- package/dist/src/bitgo/tss/ecdsa/index.d.ts +1 -0
- package/dist/src/bitgo/tss/ecdsa/index.d.ts.map +1 -1
- package/dist/src/bitgo/tss/ecdsa/index.js +3 -2
- package/dist/src/bitgo/tss/index.d.ts +2 -2
- package/dist/src/bitgo/tss/index.d.ts.map +1 -1
- package/dist/src/bitgo/tss/index.js +3 -2
- package/dist/src/bitgo/utils/index.d.ts +1 -0
- package/dist/src/bitgo/utils/index.d.ts.map +1 -1
- package/dist/src/bitgo/utils/index.js +2 -1
- package/dist/src/bitgo/utils/mpcUtils.js +2 -2
- package/dist/src/bitgo/utils/opengpgUtils.d.ts +4 -1
- package/dist/src/bitgo/utils/opengpgUtils.d.ts.map +1 -1
- package/dist/src/bitgo/utils/opengpgUtils.js +5 -2
- package/dist/src/bitgo/utils/tss/baseTSSUtils.d.ts +2 -1
- package/dist/src/bitgo/utils/tss/baseTSSUtils.d.ts.map +1 -1
- package/dist/src/bitgo/utils/tss/baseTSSUtils.js +4 -3
- package/dist/src/bitgo/utils/tss/baseTypes.d.ts +1 -0
- package/dist/src/bitgo/utils/tss/baseTypes.d.ts.map +1 -1
- package/dist/src/bitgo/utils/tss/baseTypes.js +1 -1
- package/dist/src/bitgo/utils/tss/ecdsa/base.d.ts +35 -0
- package/dist/src/bitgo/utils/tss/ecdsa/base.d.ts.map +1 -0
- package/dist/src/bitgo/utils/tss/ecdsa/base.js +65 -0
- package/dist/src/bitgo/utils/tss/ecdsa/ecdsa.d.ts +6 -29
- package/dist/src/bitgo/utils/tss/ecdsa/ecdsa.d.ts.map +1 -1
- package/dist/src/bitgo/utils/tss/ecdsa/ecdsa.js +5 -57
- package/dist/src/bitgo/utils/tss/ecdsa/ecdsaMPCv2.d.ts +35 -0
- package/dist/src/bitgo/utils/tss/ecdsa/ecdsaMPCv2.d.ts.map +1 -0
- package/dist/src/bitgo/utils/tss/ecdsa/ecdsaMPCv2.js +388 -0
- package/dist/src/bitgo/utils/tss/ecdsa/index.d.ts +2 -0
- package/dist/src/bitgo/utils/tss/ecdsa/index.d.ts.map +1 -1
- package/dist/src/bitgo/utils/tss/ecdsa/index.js +3 -1
- package/dist/src/bitgo/utils/tss/ecdsa/typesMPCv2.d.ts +106 -0
- package/dist/src/bitgo/utils/tss/ecdsa/typesMPCv2.d.ts.map +1 -0
- package/dist/src/bitgo/utils/tss/ecdsa/typesMPCv2.js +45 -0
- package/dist/src/bitgo/utils/tss/eddsa/eddsa.js +4 -4
- package/dist/src/bitgo/utils/wallet.d.ts +7 -0
- package/dist/src/bitgo/utils/wallet.d.ts.map +1 -0
- package/dist/src/bitgo/utils/wallet.js +39 -0
- package/dist/src/bitgo/wallet/iWallet.d.ts +4 -0
- package/dist/src/bitgo/wallet/iWallet.d.ts.map +1 -1
- package/dist/src/bitgo/wallet/iWallet.js +1 -1
- package/dist/src/bitgo/wallet/iWallets.d.ts +3 -0
- package/dist/src/bitgo/wallet/iWallets.d.ts.map +1 -1
- package/dist/src/bitgo/wallet/iWallets.js +1 -1
- package/dist/src/bitgo/wallet/wallet.d.ts +1 -0
- package/dist/src/bitgo/wallet/wallet.d.ts.map +1 -1
- package/dist/src/bitgo/wallet/wallet.js +15 -3
- package/dist/src/bitgo/wallet/wallets.d.ts +6 -0
- package/dist/src/bitgo/wallet/wallets.d.ts.map +1 -1
- package/dist/src/bitgo/wallet/wallets.js +90 -5
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +8 -6
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
import * as t from 'io-ts';
|
|
2
|
+
export declare enum MPCv2PartiesEnum {
|
|
3
|
+
USER = 0,
|
|
4
|
+
BACKUP = 1,
|
|
5
|
+
BITGO = 2
|
|
6
|
+
}
|
|
7
|
+
export declare const generateMPCv2KeyRequestBody: t.UnionC<[t.TypeC<{
|
|
8
|
+
userGpgPublicKey: import("io-ts-types").NonEmptyStringC;
|
|
9
|
+
backupGpgPublicKey: import("io-ts-types").NonEmptyStringC;
|
|
10
|
+
userMsg1: t.TypeC<{
|
|
11
|
+
from: import("@bitgo/public-types").MPCv2PartyFromStringOrNumberC;
|
|
12
|
+
message: t.StringC;
|
|
13
|
+
signature: t.StringC;
|
|
14
|
+
}>;
|
|
15
|
+
backupMsg1: t.TypeC<{
|
|
16
|
+
from: import("@bitgo/public-types").MPCv2PartyFromStringOrNumberC;
|
|
17
|
+
message: t.StringC;
|
|
18
|
+
signature: t.StringC;
|
|
19
|
+
}>;
|
|
20
|
+
}>, t.TypeC<{
|
|
21
|
+
sessionId: import("io-ts-types").NonEmptyStringC;
|
|
22
|
+
userMsg2: t.TypeC<{
|
|
23
|
+
from: import("@bitgo/public-types").MPCv2PartyFromStringOrNumberC;
|
|
24
|
+
to: import("@bitgo/public-types").MPCv2PartyFromStringOrNumberC;
|
|
25
|
+
encryptedMessage: t.StringC;
|
|
26
|
+
signature: t.StringC;
|
|
27
|
+
}>;
|
|
28
|
+
userCommitment2: import("io-ts-types").NonEmptyStringC;
|
|
29
|
+
backupMsg2: t.TypeC<{
|
|
30
|
+
from: import("@bitgo/public-types").MPCv2PartyFromStringOrNumberC;
|
|
31
|
+
to: import("@bitgo/public-types").MPCv2PartyFromStringOrNumberC;
|
|
32
|
+
encryptedMessage: t.StringC;
|
|
33
|
+
signature: t.StringC;
|
|
34
|
+
}>;
|
|
35
|
+
backupCommitment2: import("io-ts-types").NonEmptyStringC;
|
|
36
|
+
}>, t.TypeC<{
|
|
37
|
+
sessionId: import("io-ts-types").NonEmptyStringC;
|
|
38
|
+
userMsg3: t.TypeC<{
|
|
39
|
+
from: import("@bitgo/public-types").MPCv2PartyFromStringOrNumberC;
|
|
40
|
+
to: import("@bitgo/public-types").MPCv2PartyFromStringOrNumberC;
|
|
41
|
+
encryptedMessage: t.StringC;
|
|
42
|
+
signature: t.StringC;
|
|
43
|
+
}>;
|
|
44
|
+
backupMsg3: t.TypeC<{
|
|
45
|
+
from: import("@bitgo/public-types").MPCv2PartyFromStringOrNumberC;
|
|
46
|
+
to: import("@bitgo/public-types").MPCv2PartyFromStringOrNumberC;
|
|
47
|
+
encryptedMessage: t.StringC;
|
|
48
|
+
signature: t.StringC;
|
|
49
|
+
}>;
|
|
50
|
+
userMsg4: t.TypeC<{
|
|
51
|
+
from: import("@bitgo/public-types").MPCv2PartyFromStringOrNumberC;
|
|
52
|
+
message: t.StringC;
|
|
53
|
+
signature: t.StringC;
|
|
54
|
+
}>;
|
|
55
|
+
backupMsg4: t.TypeC<{
|
|
56
|
+
from: import("@bitgo/public-types").MPCv2PartyFromStringOrNumberC;
|
|
57
|
+
message: t.StringC;
|
|
58
|
+
signature: t.StringC;
|
|
59
|
+
}>;
|
|
60
|
+
}>]>;
|
|
61
|
+
export declare type GenerateMPCv2KeyRequestBody = t.TypeOf<typeof generateMPCv2KeyRequestBody>;
|
|
62
|
+
export declare const generateMPCv2KeyRequestResponse: t.UnionC<[t.TypeC<{
|
|
63
|
+
sessionId: import("io-ts-types").NonEmptyStringC;
|
|
64
|
+
bitgoMsg1: t.TypeC<{
|
|
65
|
+
from: import("@bitgo/public-types").MPCv2PartyFromStringOrNumberC;
|
|
66
|
+
message: t.StringC;
|
|
67
|
+
signature: t.StringC;
|
|
68
|
+
}>;
|
|
69
|
+
bitgoToUserMsg2: t.TypeC<{
|
|
70
|
+
from: import("@bitgo/public-types").MPCv2PartyFromStringOrNumberC;
|
|
71
|
+
to: import("@bitgo/public-types").MPCv2PartyFromStringOrNumberC;
|
|
72
|
+
encryptedMessage: t.StringC;
|
|
73
|
+
signature: t.StringC;
|
|
74
|
+
}>;
|
|
75
|
+
bitgoToBackupMsg2: t.TypeC<{
|
|
76
|
+
from: import("@bitgo/public-types").MPCv2PartyFromStringOrNumberC;
|
|
77
|
+
to: import("@bitgo/public-types").MPCv2PartyFromStringOrNumberC;
|
|
78
|
+
encryptedMessage: t.StringC;
|
|
79
|
+
signature: t.StringC;
|
|
80
|
+
}>;
|
|
81
|
+
}>, t.TypeC<{
|
|
82
|
+
sessionId: import("io-ts-types").NonEmptyStringC;
|
|
83
|
+
bitgoCommitment2: import("io-ts-types").NonEmptyStringC;
|
|
84
|
+
bitgoToUserMsg3: t.TypeC<{
|
|
85
|
+
from: import("@bitgo/public-types").MPCv2PartyFromStringOrNumberC;
|
|
86
|
+
to: import("@bitgo/public-types").MPCv2PartyFromStringOrNumberC;
|
|
87
|
+
encryptedMessage: t.StringC;
|
|
88
|
+
signature: t.StringC;
|
|
89
|
+
}>;
|
|
90
|
+
bitgoToBackupMsg3: t.TypeC<{
|
|
91
|
+
from: import("@bitgo/public-types").MPCv2PartyFromStringOrNumberC;
|
|
92
|
+
to: import("@bitgo/public-types").MPCv2PartyFromStringOrNumberC;
|
|
93
|
+
encryptedMessage: t.StringC;
|
|
94
|
+
signature: t.StringC;
|
|
95
|
+
}>;
|
|
96
|
+
}>, t.TypeC<{
|
|
97
|
+
sessionId: import("io-ts-types").NonEmptyStringC;
|
|
98
|
+
commonKeychain: import("io-ts-types").NonEmptyStringC;
|
|
99
|
+
bitgoMsg4: t.TypeC<{
|
|
100
|
+
from: import("@bitgo/public-types").MPCv2PartyFromStringOrNumberC;
|
|
101
|
+
message: t.StringC;
|
|
102
|
+
signature: t.StringC;
|
|
103
|
+
}>;
|
|
104
|
+
}>]>;
|
|
105
|
+
export declare type GenerateMPCv2KeyRequestResponse = t.TypeOf<typeof generateMPCv2KeyRequestResponse>;
|
|
106
|
+
//# sourceMappingURL=typesMPCv2.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"typesMPCv2.d.ts","sourceRoot":"","sources":["../../../../../../src/bitgo/utils/tss/ecdsa/typesMPCv2.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,OAAO,CAAC;AAU3B,oBAAY,gBAAgB;IAC1B,IAAI,IAAI;IACR,MAAM,IAAI;IACV,KAAK,IAAI;CACV;AAED,eAAO,MAAM,2BAA2B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IAItC,CAAC;AAEH,oBAAY,2BAA2B,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,2BAA2B,CAAC,CAAC;AAEvF,eAAO,MAAM,+BAA+B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IAI1C,CAAC;AAEH,oBAAY,+BAA+B,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,+BAA+B,CAAC,CAAC"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || function (mod) {
|
|
19
|
+
if (mod && mod.__esModule) return mod;
|
|
20
|
+
var result = {};
|
|
21
|
+
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
22
|
+
__setModuleDefault(result, mod);
|
|
23
|
+
return result;
|
|
24
|
+
};
|
|
25
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
26
|
+
exports.generateMPCv2KeyRequestResponse = exports.generateMPCv2KeyRequestBody = exports.MPCv2PartiesEnum = void 0;
|
|
27
|
+
const t = __importStar(require("io-ts"));
|
|
28
|
+
const public_types_1 = require("@bitgo/public-types");
|
|
29
|
+
var MPCv2PartiesEnum;
|
|
30
|
+
(function (MPCv2PartiesEnum) {
|
|
31
|
+
MPCv2PartiesEnum[MPCv2PartiesEnum["USER"] = 0] = "USER";
|
|
32
|
+
MPCv2PartiesEnum[MPCv2PartiesEnum["BACKUP"] = 1] = "BACKUP";
|
|
33
|
+
MPCv2PartiesEnum[MPCv2PartiesEnum["BITGO"] = 2] = "BITGO";
|
|
34
|
+
})(MPCv2PartiesEnum = exports.MPCv2PartiesEnum || (exports.MPCv2PartiesEnum = {}));
|
|
35
|
+
exports.generateMPCv2KeyRequestBody = t.union([
|
|
36
|
+
public_types_1.MPCv2KeyGenRound1Request,
|
|
37
|
+
public_types_1.MPCv2KeyGenRound2Request,
|
|
38
|
+
public_types_1.MPCv2KeyGenRound3Request,
|
|
39
|
+
]);
|
|
40
|
+
exports.generateMPCv2KeyRequestResponse = t.union([
|
|
41
|
+
public_types_1.MPCv2KeyGenRound1Response,
|
|
42
|
+
public_types_1.MPCv2KeyGenRound2Response,
|
|
43
|
+
public_types_1.MPCv2KeyGenRound3Response,
|
|
44
|
+
]);
|
|
45
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXNNUEN2Mi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9iaXRnby91dGlscy90c3MvZWNkc2EvdHlwZXNNUEN2Mi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLHlDQUEyQjtBQUMzQixzREFPNkI7QUFFN0IsSUFBWSxnQkFJWDtBQUpELFdBQVksZ0JBQWdCO0lBQzFCLHVEQUFRLENBQUE7SUFDUiwyREFBVSxDQUFBO0lBQ1YseURBQVMsQ0FBQTtBQUNYLENBQUMsRUFKVyxnQkFBZ0IsR0FBaEIsd0JBQWdCLEtBQWhCLHdCQUFnQixRQUkzQjtBQUVZLFFBQUEsMkJBQTJCLEdBQUcsQ0FBQyxDQUFDLEtBQUssQ0FBQztJQUNqRCx1Q0FBd0I7SUFDeEIsdUNBQXdCO0lBQ3hCLHVDQUF3QjtDQUN6QixDQUFDLENBQUM7QUFJVSxRQUFBLCtCQUErQixHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUM7SUFDckQsd0NBQXlCO0lBQ3pCLHdDQUF5QjtJQUN6Qix3Q0FBeUI7Q0FDMUIsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgdCBmcm9tICdpby10cyc7XG5pbXBvcnQge1xuICBNUEN2MktleUdlblJvdW5kMVJlcXVlc3QsXG4gIE1QQ3YyS2V5R2VuUm91bmQxUmVzcG9uc2UsXG4gIE1QQ3YyS2V5R2VuUm91bmQyUmVxdWVzdCxcbiAgTVBDdjJLZXlHZW5Sb3VuZDJSZXNwb25zZSxcbiAgTVBDdjJLZXlHZW5Sb3VuZDNSZXF1ZXN0LFxuICBNUEN2MktleUdlblJvdW5kM1Jlc3BvbnNlLFxufSBmcm9tICdAYml0Z28vcHVibGljLXR5cGVzJztcblxuZXhwb3J0IGVudW0gTVBDdjJQYXJ0aWVzRW51bSB7XG4gIFVTRVIgPSAwLFxuICBCQUNLVVAgPSAxLFxuICBCSVRHTyA9IDIsXG59XG5cbmV4cG9ydCBjb25zdCBnZW5lcmF0ZU1QQ3YyS2V5UmVxdWVzdEJvZHkgPSB0LnVuaW9uKFtcbiAgTVBDdjJLZXlHZW5Sb3VuZDFSZXF1ZXN0LFxuICBNUEN2MktleUdlblJvdW5kMlJlcXVlc3QsXG4gIE1QQ3YyS2V5R2VuUm91bmQzUmVxdWVzdCxcbl0pO1xuXG5leHBvcnQgdHlwZSBHZW5lcmF0ZU1QQ3YyS2V5UmVxdWVzdEJvZHkgPSB0LlR5cGVPZjx0eXBlb2YgZ2VuZXJhdGVNUEN2MktleVJlcXVlc3RCb2R5PjtcblxuZXhwb3J0IGNvbnN0IGdlbmVyYXRlTVBDdjJLZXlSZXF1ZXN0UmVzcG9uc2UgPSB0LnVuaW9uKFtcbiAgTVBDdjJLZXlHZW5Sb3VuZDFSZXNwb25zZSxcbiAgTVBDdjJLZXlHZW5Sb3VuZDJSZXNwb25zZSxcbiAgTVBDdjJLZXlHZW5Sb3VuZDNSZXNwb25zZSxcbl0pO1xuXG5leHBvcnQgdHlwZSBHZW5lcmF0ZU1QQ3YyS2V5UmVxdWVzdFJlc3BvbnNlID0gdC5UeXBlT2Y8dHlwZW9mIGdlbmVyYXRlTVBDdjJLZXlSZXF1ZXN0UmVzcG9uc2U+O1xuIl19
|
|
@@ -48,7 +48,7 @@ class EddsaUtils extends baseTSSUtils_1.default {
|
|
|
48
48
|
async verifyWalletSignatures(userGpgPub, backupGpgPub, bitgoKeychain, decryptedShare, verifierIndex) {
|
|
49
49
|
(0, assert_1.default)(bitgoKeychain.commonKeychain);
|
|
50
50
|
(0, assert_1.default)(bitgoKeychain.walletHSMGPGPublicKeySigs);
|
|
51
|
-
const bitgoGpgKey = await (0, opengpgUtils_1.getBitgoGpgPubKey)(this.bitgo);
|
|
51
|
+
const bitgoGpgKey = (await (0, opengpgUtils_1.getBitgoGpgPubKey)(this.bitgo)).mpcV1;
|
|
52
52
|
const userKeyPub = await openpgp.readKey({ armoredKey: userGpgPub });
|
|
53
53
|
const userKeyId = userKeyPub.keyPacket.getFingerprint();
|
|
54
54
|
const backupKeyPub = await openpgp.readKey({ armoredKey: backupGpgPub });
|
|
@@ -300,7 +300,7 @@ class EddsaUtils extends baseTSSUtils_1.default {
|
|
|
300
300
|
(0, assert_1.default)(commitment, 'Unable to find commitment in userSignShare');
|
|
301
301
|
const userToBitgoCommitment = this.createUserToBitgoCommitmentShare(commitment);
|
|
302
302
|
const signerShare = signingKey.yShares[bitgoIndex].u + signingKey.yShares[bitgoIndex].chaincode;
|
|
303
|
-
const bitgoGpgKey = await (0, opengpgUtils_1.getBitgoGpgPubKey)(this.bitgo);
|
|
303
|
+
const bitgoGpgKey = (await (0, opengpgUtils_1.getBitgoGpgPubKey)(this.bitgo)).mpcV1;
|
|
304
304
|
const userToBitgoEncryptedSignerShare = await (0, opengpgUtils_1.encryptText)(signerShare, bitgoGpgKey);
|
|
305
305
|
const encryptedSignerShare = this.createUserToBitgoEncryptedSignerShare(userToBitgoEncryptedSignerShare);
|
|
306
306
|
const stringifiedRShare = JSON.stringify(userSignShare);
|
|
@@ -405,7 +405,7 @@ class EddsaUtils extends baseTSSUtils_1.default {
|
|
|
405
405
|
const userSignShare = await (0, tss_2.createUserSignShare)(signablePayload, signingKey.pShare);
|
|
406
406
|
const bitgoIndex = tss_2.ShareKeyPosition.BITGO;
|
|
407
407
|
const signerShare = signingKey.yShares[bitgoIndex].u + signingKey.yShares[bitgoIndex].chaincode;
|
|
408
|
-
const bitgoGpgKey = await (0, opengpgUtils_1.getBitgoGpgPubKey)(this.bitgo);
|
|
408
|
+
const bitgoGpgKey = (await (0, opengpgUtils_1.getBitgoGpgPubKey)(this.bitgo)).mpcV1;
|
|
409
409
|
const userToBitgoEncryptedSignerShare = await (0, opengpgUtils_1.encryptText)(signerShare, bitgoGpgKey);
|
|
410
410
|
const userGpgKey = await (0, opengpgUtils_1.generateGPGKeyPair)('secp256k1');
|
|
411
411
|
const privateShareProof = await (0, opengpgUtils_1.createShareProof)(userGpgKey.privateKey, signingKey.yShares[bitgoIndex].u, 'eddsa');
|
|
@@ -466,4 +466,4 @@ exports.EddsaUtils = EddsaUtils;
|
|
|
466
466
|
* @deprecated - use EddsaUtils
|
|
467
467
|
*/
|
|
468
468
|
exports.TssUtils = EddsaUtils;
|
|
469
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWRkc2EuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvYml0Z28vdXRpbHMvdHNzL2VkZHNhL2VkZHNhLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7O0dBRUc7QUFDSCxvREFBNEI7QUFDNUIsMkNBQTZCO0FBQzdCLGlEQUFtQztBQUNuQywwRUFBMkU7QUFFM0Usb0RBQWlFO0FBQ2pFLHFEQUEwRztBQUMxRyxzQ0FTc0I7QUFDdEIsNENBWXNCO0FBRXRCLG1FQUEyQztBQUUzQyxnREFBK0Q7QUFDL0Qsb0RBQXdEO0FBRXhEOztHQUVHO0FBRUgsTUFBYSxVQUFXLFNBQVEsc0JBQXNCO0lBQ3BELEtBQUssQ0FBQyxzQkFBc0IsQ0FDMUIsVUFBa0IsRUFDbEIsWUFBb0IsRUFDcEIsYUFBdUIsRUFDdkIsY0FBc0IsRUFDdEIsYUFBb0I7UUFFcEIsSUFBQSxnQkFBTSxFQUFDLGFBQWEsQ0FBQyxjQUFjLENBQUMsQ0FBQztRQUNyQyxJQUFBLGdCQUFNLEVBQUMsYUFBYSxDQUFDLHlCQUF5QixDQUFDLENBQUM7UUFFaEQsTUFBTSxXQUFXLEdBQUcsTUFBTSxJQUFBLGdDQUFpQixFQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUV4RCxNQUFNLFVBQVUsR0FBRyxNQUFNLE9BQU8sQ0FBQyxPQUFPLENBQUMsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLENBQUMsQ0FBQztRQUNyRSxNQUFNLFNBQVMsR0FBRyxVQUFVLENBQUMsU0FBUyxDQUFDLGNBQWMsRUFBRSxDQUFDO1FBRXhELE1BQU0sWUFBWSxHQUFHLE1BQU0sT0FBTyxDQUFDLE9BQU8sQ0FBQyxFQUFFLFVBQVUsRUFBRSxZQUFZLEVBQUUsQ0FBQyxDQUFDO1FBQ3pFLE1BQU0sV0FBVyxHQUFHLFlBQVksQ0FBQyxTQUFTLENBQUMsY0FBYyxFQUFFLENBQUM7UUFFNUQsTUFBTSxnQkFBZ0IsR0FBRyxNQUFNLE9BQU8sQ0FBQyxRQUFRLENBQUMsRUFBRSxXQUFXLEVBQUUsYUFBYSxDQUFDLHlCQUF5QixFQUFFLENBQUMsQ0FBQztRQUMxRyxJQUFJLGdCQUFnQixDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUU7WUFDakMsTUFBTSxJQUFJLEtBQUssQ0FBQywyQkFBMkIsQ0FBQyxDQUFDO1NBQzlDO1FBRUQsSUFBSSxTQUFTLEtBQUssZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLGNBQWMsRUFBRSxFQUFFO1lBQ2hFLE1BQU0sSUFBSSxLQUFLLENBQUMsdUZBQXVGLENBQUMsQ0FBQztTQUMxRztRQUVELElBQUksV0FBVyxLQUFLLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxjQUFjLEVBQUUsRUFBRTtZQUNsRSxNQUFNLElBQUksS0FBSyxDQUFDLDBGQUEwRixDQUFDLENBQUM7U0FDN0c7UUFFRCxNQUFNLElBQUEsNkJBQXFCLEVBQUM7WUFDMUIsZUFBZSxFQUFFLGdCQUFnQixDQUFDLENBQUMsQ0FBQztZQUNwQyxjQUFjLEVBQUUsYUFBYSxDQUFDLGNBQWM7WUFDNUMsU0FBUztZQUNULFdBQVc7WUFDWCxRQUFRLEVBQUUsV0FBVztZQUNyQixjQUFjO1lBQ2QsYUFBYTtTQUNkLENBQUMsQ0FBQztRQUVILE1BQU0sSUFBQSw2QkFBcUIsRUFBQztZQUMxQixlQUFlLEVBQUUsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDO1lBQ3BDLGNBQWMsRUFBRSxhQUFhLENBQUMsY0FBYztZQUM1QyxTQUFTO1lBQ1QsV0FBVztZQUNYLFFBQVEsRUFBRSxXQUFXO1lBQ3JCLGNBQWM7WUFDZCxhQUFhO1NBQ2QsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVEOzs7Ozs7Ozs7O09BVUc7SUFDSCxLQUFLLENBQUMsa0JBQWtCLENBQUMsRUFDdkIsVUFBVSxFQUNWLFlBQVksRUFDWixZQUFZLEVBQ1osY0FBYyxFQUNkLGFBQWEsRUFDYixVQUFVLEVBQ1YsOEJBQThCLEdBQ0o7UUFDMUIsTUFBTSxHQUFHLEdBQUcsTUFBTSxhQUFLLENBQUMsVUFBVSxFQUFFLENBQUM7UUFDckMsTUFBTSxjQUFjLEdBQUcsYUFBYSxDQUFDLFNBQVMsQ0FBQztRQUMvQyxJQUFJLENBQUMsY0FBYyxFQUFFO1lBQ25CLE1BQU0sSUFBSSxLQUFLLENBQUMsMEJBQTBCLENBQUMsQ0FBQztTQUM3QztRQUVELE1BQU0sZ0JBQWdCLEdBQUcsY0FBYyxDQUFDLElBQUksQ0FBQyxDQUFDLFFBQVEsRUFBRSxFQUFFLENBQUMsUUFBUSxDQUFDLElBQUksS0FBSyxPQUFPLElBQUksUUFBUSxDQUFDLEVBQUUsS0FBSyxNQUFNLENBQUMsQ0FBQztRQUNoSCxJQUFJLENBQUMsZ0JBQWdCLEVBQUU7WUFDckIsTUFBTSxJQUFJLEtBQUssQ0FBQyxpQ0FBaUMsQ0FBQyxDQUFDO1NBQ3BEO1FBRUQsTUFBTSx1QkFBdUIsR0FBRyxNQUFNLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxnQkFBZ0IsQ0FBQyxZQUFZLEVBQUUsVUFBVSxDQUFDLENBQUM7UUFFMUcsTUFBTSxJQUFJLENBQUMsc0JBQXNCLENBQy9CLFVBQVUsQ0FBQyxTQUFTLEVBQ3BCLFlBQVksQ0FBQyxTQUFTLEVBQ3RCLGFBQWEsRUFDYix1QkFBdUIsRUFDdkIsQ0FBQyxDQUNGLENBQUM7UUFFRixNQUFNLFdBQVcsR0FBVztZQUMxQixDQUFDLEVBQUUsQ0FBQztZQUNKLENBQUMsRUFBRSxDQUFDO1lBQ0osQ0FBQyxFQUFFLGdCQUFnQixDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQztZQUM1QyxDQUFDLEVBQUUsZ0JBQWdCLENBQUMsUUFBUTtZQUM1QixDQUFDLEVBQUUsdUJBQXVCLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUM7WUFDdkMsU0FBUyxFQUFFLHVCQUF1QixDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7U0FDN0MsQ0FBQztRQUVGLGlGQUFpRjtRQUNqRixNQUFNLFlBQVksR0FBRyxHQUFHLENBQUMsVUFBVSxDQUFDLFlBQVksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxjQUFjLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLFdBQVcsQ0FBQyxDQUFDLENBQUM7UUFDbkcsTUFBTSxjQUFjLEdBQUcsWUFBWSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQUcsWUFBWSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUM7UUFDN0UsSUFBSSxjQUFjLEtBQUssYUFBYSxDQUFDLGNBQWMsRUFBRTtZQUNuRCxNQUFNLElBQUksS0FBSyxDQUFDLGdFQUFnRSxDQUFDLENBQUM7U0FDbkY7UUFFRCxNQUFNLG1CQUFtQixHQUFvQjtZQUMzQyxNQUFNLEVBQUUsWUFBWSxDQUFDLE1BQU07WUFDM0IsV0FBVyxFQUFFLFdBQVc7WUFDeEIsWUFBWSxFQUFFLGNBQWMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO1NBQ3hDLENBQUM7UUFFRixNQUFNLGtCQUFrQixHQUF1QjtZQUM3QyxNQUFNLEVBQUUsTUFBTTtZQUNkLE9BQU8sRUFBRSxLQUFLO1lBQ2QsY0FBYyxFQUFFLGFBQWEsQ0FBQyxjQUFjO1lBQzVDLDhCQUE4QjtTQUMvQixDQUFDO1FBQ0YsSUFBSSxVQUFVLEtBQUssU0FBUyxFQUFFO1lBQzVCLGtCQUFrQixDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQztnQkFDbkQsS0FBSyxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsbUJBQW1CLENBQUM7Z0JBQzFDLFFBQVEsRUFBRSxVQUFVO2FBQ3JCLENBQUMsQ0FBQztTQUNKO1FBRUQsT0FBTyxNQUFNLElBQUksQ0FBQyxRQUFRLENBQUMsU0FBUyxFQUFFLENBQUMsR0FBRyxDQUFDLGtCQUFrQixDQUFDLENBQUM7SUFDakUsQ0FBQztJQUVEOzs7Ozs7Ozs7O09BVUc7SUFDSCxLQUFLLENBQUMsb0JBQW9CLENBQUMsRUFDekIsVUFBVSxFQUNWLFlBQVksRUFDWixZQUFZLEVBQ1osY0FBYyxFQUNkLGFBQWEsRUFDYixVQUFVLEdBQ2dCO1FBQzFCLE1BQU0sR0FBRyxHQUFHLE1BQU0sYUFBSyxDQUFDLFVBQVUsRUFBRSxDQUFDO1FBQ3JDLE1BQU0sY0FBYyxHQUFHLGFBQWEsQ0FBQyxTQUFTLENBQUM7UUFDL0MsSUFBSSxDQUFDLGNBQWMsRUFBRTtZQUNuQixNQUFNLElBQUksS0FBSyxDQUFDLHlCQUF5QixDQUFDLENBQUM7U0FDNUM7UUFFRCxNQUFNLGtCQUFrQixHQUFHLGNBQWMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxRQUFRLEVBQUUsRUFBRSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEtBQUssT0FBTyxJQUFJLFFBQVEsQ0FBQyxFQUFFLEtBQUssUUFBUSxDQUFDLENBQUM7UUFDcEgsSUFBSSxDQUFDLGtCQUFrQixFQUFFO1lBQ3ZCLE1BQU0sSUFBSSxLQUFLLENBQUMsaUNBQWlDLENBQUMsQ0FBQztTQUNwRDtRQUVELE1BQU0seUJBQXlCLEdBQUcsTUFBTSxJQUFJLENBQUMsbUJBQW1CLENBQUMsa0JBQWtCLENBQUMsWUFBWSxFQUFFLFlBQVksQ0FBQyxDQUFDO1FBRWhILE1BQU0sSUFBSSxDQUFDLHNCQUFzQixDQUMvQixVQUFVLENBQUMsU0FBUyxFQUNwQixZQUFZLENBQUMsU0FBUyxFQUN0QixhQUFhLEVBQ2IseUJBQXlCLEVBQ3pCLENBQUMsQ0FDRixDQUFDO1FBRUYsTUFBTSxhQUFhLEdBQVc7WUFDNUIsQ0FBQyxFQUFFLENBQUM7WUFDSixDQUFDLEVBQUUsQ0FBQztZQUNKLENBQUMsRUFBRSxrQkFBa0IsQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUM7WUFDOUMsQ0FBQyxFQUFFLGtCQUFrQixDQUFDLFFBQVE7WUFDOUIsQ0FBQyxFQUFFLHlCQUF5QixDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDO1lBQ3pDLFNBQVMsRUFBRSx5QkFBeUIsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO1NBQy9DLENBQUM7UUFFRixpRkFBaUY7UUFDakYsTUFBTSxjQUFjLEdBQUcsR0FBRyxDQUFDLFVBQVUsQ0FBQyxjQUFjLENBQUMsTUFBTSxFQUFFLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxhQUFhLENBQUMsQ0FBQyxDQUFDO1FBQ3ZHLE1BQU0sY0FBYyxHQUFHLGNBQWMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxHQUFHLGNBQWMsQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDO1FBQ2pGLElBQUksY0FBYyxLQUFLLGFBQWEsQ0FBQyxjQUFjLEVBQUU7WUFDbkQsTUFBTSxJQUFJLEtBQUssQ0FBQyxrRUFBa0UsQ0FBQyxDQUFDO1NBQ3JGO1FBRUQsTUFBTSxxQkFBcUIsR0FBb0I7WUFDN0MsTUFBTSxFQUFFLGNBQWMsQ0FBQyxNQUFNO1lBQzdCLFdBQVcsRUFBRSxhQUFhO1lBQzFCLFVBQVUsRUFBRSxZQUFZLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztTQUNwQyxDQUFDO1FBQ0YsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDO1FBRWxELE1BQU0sTUFBTSxHQUF3QjtZQUNsQyxNQUFNLEVBQUUsUUFBUTtZQUNoQixPQUFPLEVBQUUsS0FBSztZQUNkLGNBQWMsRUFBRSxhQUFhLENBQUMsY0FBYztZQUM1QyxHQUFHLEVBQUUsR0FBRztTQUNULENBQUM7UUFFRixJQUFJLFVBQVUsS0FBSyxTQUFTLEVBQUU7WUFDNUIsTUFBTSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsUUFBUSxFQUFFLFVBQVUsRUFBRSxDQUFDLENBQUM7U0FDaEY7UUFFRCxPQUFPLE1BQU0sSUFBSSxDQUFDLFFBQVEsQ0FBQyxTQUFTLEVBQUUsQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDOUQsQ0FBQztJQUVEOzs7Ozs7O09BT0c7SUFDSCxLQUFLLENBQUMsbUJBQW1CLENBQUMsRUFDeEIsVUFBVSxFQUNWLFlBQVksRUFDWixZQUFZLEVBQ1osY0FBYyxFQUNkLFVBQVUsR0FDcUI7UUFDL0IsNkVBQTZFO1FBQzdFLE1BQU0sc0JBQXNCLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQztZQUMzQyxNQUFNLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQztZQUN6QyxNQUFNLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMsU0FBUyxFQUFFLEtBQUssQ0FBQztTQUNsRCxDQUFDLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ25CLE1BQU0sdUJBQXVCLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQztZQUM1QyxNQUFNLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQztZQUM3QyxNQUFNLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxFQUFFLEtBQUssQ0FBQztTQUN0RCxDQUFDLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ25CLE1BQU0sbUJBQW1CLEdBQUc7WUFDMUIsV0FBVyxFQUFFLHNCQUFzQjtZQUNuQyxZQUFZLEVBQUUsdUJBQXVCO1lBQ3JDLGlCQUFpQixFQUFFLE1BQU0sSUFBQSwrQkFBZ0IsRUFBQyxVQUFVLENBQUMsVUFBVSxFQUFFLHVCQUF1QixDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsT0FBTyxDQUFDO1lBQy9HLFFBQVEsRUFBRSxZQUFZLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7U0FDcEMsQ0FBQztRQUVGLE1BQU0sd0JBQXdCLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQztZQUM3QyxNQUFNLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQztZQUMzQyxNQUFNLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxNQUFNLENBQUMsU0FBUyxFQUFFLEtBQUssQ0FBQztTQUNwRCxDQUFDLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ25CLE1BQU0seUJBQXlCLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQztZQUM5QyxNQUFNLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQztZQUMvQyxNQUFNLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxFQUFFLEtBQUssQ0FBQztTQUN4RCxDQUFDLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ25CLE1BQU0scUJBQXFCLEdBQUc7WUFDNUIsV0FBVyxFQUFFLHdCQUF3QjtZQUNyQyxZQUFZLEVBQUUseUJBQXlCO1lBQ3ZDLGlCQUFpQixFQUFFLE1BQU0sSUFBQSwrQkFBZ0IsRUFDdkMsWUFBWSxDQUFDLFVBQVUsRUFDdkIseUJBQXlCLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFDdEMsT0FBTyxDQUNSO1lBQ0QsUUFBUSxFQUFFLGNBQWMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUN0QyxDQUFDO1FBRUYsT0FBTyxNQUFNLElBQUksQ0FBQyx1QkFBdUIsQ0FDdkMsVUFBVSxFQUNWLFlBQVksRUFDWixtQkFBbUIsRUFDbkIscUJBQXFCLEVBQ3JCLEtBQUssRUFDTCxVQUFVLENBQ1gsQ0FBQztJQUNKLENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsS0FBSyxDQUFDLGVBQWUsQ0FBQyxNQUlyQjtRQUNDLE1BQU0sR0FBRyxHQUFHLE1BQU0sYUFBSyxDQUFDLFVBQVUsRUFBRSxDQUFDO1FBQ3JDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNaLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUVaLE1BQU0sWUFBWSxHQUFHLEdBQUcsQ0FBQyxRQUFRLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUMzQyxNQUFNLGNBQWMsR0FBRyxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFFN0MsTUFBTSxVQUFVLEdBQUcsTUFBTSxJQUFBLGlDQUFrQixFQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQ3pELE1BQU0sWUFBWSxHQUFHLE1BQU0sSUFBQSxpQ0FBa0IsRUFBQyxXQUFXLENBQUMsQ0FBQztRQUUzRCxNQUFNLGFBQWEsR0FBRyxNQUFNLElBQUksQ0FBQyxtQkFBbUIsQ0FBQztZQUNuRCxVQUFVO1lBQ1YsWUFBWTtZQUNaLFlBQVk7WUFDWixjQUFjO1lBQ2QsVUFBVSxFQUFFLE1BQU0sQ0FBQyxVQUFVO1NBQzlCLENBQUMsQ0FBQztRQUNILE1BQU0sbUJBQW1CLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixDQUFDO1lBQ2xELFVBQVU7WUFDVixZQUFZO1lBQ1osWUFBWTtZQUNaLGNBQWM7WUFDZCxhQUFhO1lBQ2IsVUFBVSxFQUFFLE1BQU0sQ0FBQyxVQUFVO1lBQzdCLDhCQUE4QixFQUFFLE1BQU0sQ0FBQyw4QkFBOEI7U0FDdEUsQ0FBQyxDQUFDO1FBQ0gsTUFBTSxxQkFBcUIsR0FBRyxJQUFJLENBQUMsb0JBQW9CLENBQUM7WUFDdEQsVUFBVTtZQUNWLFlBQVk7WUFDWixZQUFZO1lBQ1osY0FBYztZQUNkLGFBQWE7WUFDYixVQUFVLEVBQUUsTUFBTSxDQUFDLFVBQVU7U0FDOUIsQ0FBQyxDQUFDO1FBQ0gsTUFBTSxDQUFDLFlBQVksRUFBRSxjQUFjLENBQUMsR0FBRyxNQUFNLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxtQkFBbUIsRUFBRSxxQkFBcUIsQ0FBQyxDQUFDLENBQUM7UUFFdkcsZ0JBQWdCO1FBQ2hCLE1BQU0sU0FBUyxHQUFHO1lBQ2hCLFlBQVk7WUFDWixjQUFjO1lBQ2QsYUFBYTtTQUNkLENBQUM7UUFFRixPQUFPLFNBQVMsQ0FBQztJQUNuQixDQUFDO0lBRUQsS0FBSyxDQUFDLGtDQUFrQyxDQUFDLE1BSXhDOztRQUtDLE1BQU0sVUFBVSxHQUFHLHNCQUFnQixDQUFDLEtBQUssQ0FBQztRQUMxQyxNQUFNLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBRSxHQUFHLE1BQU0sQ0FBQztRQUNsQyxNQUFNLGlCQUFpQixHQUFjLFNBQVMsQ0FBQztRQUUvQyxNQUFNLE1BQU0sR0FBRyxNQUFNLGdDQUFrQixDQUFDLFVBQVUsRUFBRSxDQUFDO1FBQ3JELE1BQU0sR0FBRyxHQUFHLE1BQU0sYUFBSyxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUUzQyxNQUFNLG1CQUFtQixHQUFvQixJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQzdELElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxZQUFZLEVBQUU7WUFDckMsTUFBTSxJQUFJLEtBQUssQ0FBQyx5Q0FBeUMsQ0FBQyxDQUFDO1NBQzVEO1FBRUQsSUFBQSxnQkFBTSxFQUFDLGlCQUFpQixDQUFDLFlBQVksSUFBSSxpQkFBaUIsQ0FBQyxXQUFXLEVBQUUsMENBQTBDLENBQUMsQ0FBQztRQUNwSCxNQUFNLFVBQVUsR0FDZCxpQkFBaUIsQ0FBQyxVQUFVLEtBQUssTUFBTTtZQUNyQyxDQUFDLENBQUMsaUJBQWlCLENBQUMsWUFBYSxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVU7WUFDL0MsQ0FBQyxDQUFDLGlCQUFpQixDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUV2QyxNQUFNLFVBQVUsR0FBRyxHQUFHLENBQUMsU0FBUyxDQUM5QixtQkFBbUIsQ0FBQyxNQUFNLEVBQzFCLENBQUMsbUJBQW1CLENBQUMsV0FBVyxFQUFFLG1CQUFtQixDQUFDLFlBQVksQ0FBQyxFQUNuRSxVQUFVLENBQUMsY0FBYyxDQUMxQixDQUFDO1FBRUYsTUFBTSxlQUFlLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsV0FBVyxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBRW5FLE1BQU0sYUFBYSxHQUFHLE1BQU0sSUFBQSx5QkFBbUIsRUFBQyxlQUFlLEVBQUUsVUFBVSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ3BGLE1BQU0sVUFBVSxHQUFHLE1BQUEsYUFBYSxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsMENBQUUsVUFBVSxDQUFDO1FBQ2pFLElBQUEsZ0JBQU0sRUFBQyxVQUFVLEVBQUUsNENBQTRDLENBQUMsQ0FBQztRQUNqRSxNQUFNLHFCQUFxQixHQUFHLElBQUksQ0FBQyxnQ0FBZ0MsQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUVoRixNQUFNLFdBQVcsR0FBRyxVQUFVLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsR0FBRyxVQUFVLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxDQUFDLFNBQVMsQ0FBQztRQUNoRyxNQUFNLFdBQVcsR0FBRyxNQUFNLElBQUEsZ0NBQWlCLEVBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3hELE1BQU0sK0JBQStCLEdBQUcsTUFBTSxJQUFBLDBCQUFXLEVBQUMsV0FBVyxFQUFFLFdBQVcsQ0FBQyxDQUFDO1FBRXBGLE1BQU0sb0JBQW9CLEdBQUcsSUFBSSxDQUFDLHFDQUFxQyxDQUFDLCtCQUErQixDQUFDLENBQUM7UUFDekcsTUFBTSxpQkFBaUIsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBQ3hELE1BQU0sZUFBZSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLEVBQUUsS0FBSyxFQUFFLGlCQUFpQixFQUFFLFFBQVEsRUFBRSxNQUFNLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQyxDQUFDO1FBQzVHLE1BQU0sMEJBQTBCLEdBQUcsSUFBSSxDQUFDLGdDQUFnQyxDQUFDLGVBQWUsQ0FBQyxDQUFDO1FBRTFGLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxvQkFBb0IsRUFBRSwwQkFBMEIsRUFBRSxDQUFDO0lBQ3JGLENBQUM7SUFFRCxLQUFLLENBQUMseUJBQXlCLENBQUMsTUFJL0I7UUFDQyxNQUFNLEVBQUUsZ0JBQWdCLEVBQUUsMEJBQTBCLEVBQUUsR0FBRyxNQUFNLENBQUM7UUFFaEUsTUFBTSxlQUFlLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUM7WUFDekMsS0FBSyxFQUFFLDBCQUEwQixDQUFDLEtBQUs7WUFDdkMsUUFBUSxFQUFFLGdCQUFnQjtTQUMzQixDQUFDLENBQUM7UUFDSCxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLGVBQWUsQ0FBQyxDQUFDO1FBQzNDLElBQUEsZ0JBQU0sRUFBQyxNQUFNLENBQUMsTUFBTSxFQUFFLDBDQUEwQyxDQUFDLENBQUM7UUFDbEUsSUFBQSxnQkFBTSxFQUFDLE1BQU0sQ0FBQyxPQUFPLEVBQUUsMkNBQTJDLENBQUMsQ0FBQztRQUVwRSxPQUFPLEVBQUUsTUFBTSxFQUFFLENBQUM7SUFDcEIsQ0FBQztJQUVELEtBQUssQ0FBQyx5QkFBeUIsQ0FBQyxNQU0vQjtRQUNDLElBQUksaUJBQTRCLENBQUM7UUFFakMsTUFBTSxFQUFFLFNBQVMsRUFBRSxHQUFHLEVBQUUscUJBQXFCLEVBQUUsaUJBQWlCLEVBQUUsaUJBQWlCLEVBQUUsR0FBRyxNQUFNLENBQUM7UUFFL0YsSUFBSSxPQUFPLFNBQVMsS0FBSyxRQUFRLEVBQUU7WUFDakMsaUJBQWlCLEdBQUcsTUFBTSxJQUFBLGtCQUFZLEVBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLEVBQUUsRUFBRSxFQUFFLFNBQVMsQ0FBQyxDQUFDO1NBQ2pGO2FBQU07WUFDTCxpQkFBaUIsR0FBRyxTQUFTLENBQUM7U0FDL0I7UUFFRCxNQUFNLG1CQUFtQixHQUFvQixJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQzdELElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxZQUFZLEVBQUU7WUFDckMsTUFBTSxJQUFJLEtBQUssQ0FBQyx5Q0FBeUMsQ0FBQyxDQUFDO1NBQzVEO1FBRUQsSUFBQSxnQkFBTSxFQUFDLGlCQUFpQixDQUFDLFlBQVksSUFBSSxpQkFBaUIsQ0FBQyxXQUFXLEVBQUUsMENBQTBDLENBQUMsQ0FBQztRQUNwSCxNQUFNLFVBQVUsR0FDZCxpQkFBaUIsQ0FBQyxVQUFVLEtBQUssTUFBTTtZQUNyQyxDQUFDLENBQUMsaUJBQWlCLENBQUMsWUFBYSxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVU7WUFDL0MsQ0FBQyxDQUFDLGlCQUFpQixDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUV2QyxNQUFNLGVBQWUsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxXQUFXLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFFbkUsTUFBTSxpQkFBaUIsR0FBRyxNQUFNLElBQUEsNkJBQXVCLEVBQ3JELGlCQUFpQixFQUNqQixpQkFBaUIsRUFDakIsbUJBQW1CLENBQUMsWUFBWSxFQUNoQyxtQkFBbUIsQ0FBQyxXQUFXLEVBQy9CLGVBQWUsRUFDZixxQkFBcUIsQ0FDdEIsQ0FBQztRQUNGLE9BQU8saUJBQWlCLENBQUM7SUFDM0IsQ0FBQztJQUVELEtBQUssQ0FBQywrQkFBK0IsQ0FDbkMsU0FBNkIsRUFDN0IsaUNBQXFFLEVBQ3JFLDZCQUE2RCxFQUM3RCw2QkFBNkQ7UUFFN0QsSUFBSSxpQkFBNEIsQ0FBQztRQUNqQyxJQUFJLFdBQW1CLENBQUM7UUFDeEIsSUFBSSxPQUFPLFNBQVMsS0FBSyxRQUFRLEVBQUU7WUFDakMsaUJBQWlCLEdBQUcsTUFBTSxJQUFBLGtCQUFZLEVBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLEVBQUUsRUFBRSxFQUFFLFNBQVMsQ0FBQyxDQUFDO1lBQ2hGLFdBQVcsR0FBRyxpQkFBaUIsQ0FBQyxXQUFXLENBQUM7U0FDN0M7YUFBTTtZQUNMLGlCQUFpQixHQUFHLFNBQVMsQ0FBQztZQUM5QixXQUFXLEdBQUcsU0FBUyxDQUFDLFdBQVcsQ0FBQztTQUNyQztRQUVELE1BQU0sRUFBRSxVQUFVLEVBQUUsR0FBRyxpQkFBaUIsQ0FBQztRQUV6QyxNQUFNLEVBQUUscUJBQXFCLEVBQUUsb0JBQW9CLEVBQUUsMEJBQTBCLEVBQUUsR0FDL0UsTUFBTSxpQ0FBaUMsQ0FBQyxFQUFFLFNBQVMsRUFBRSxpQkFBaUIsRUFBRSxDQUFDLENBQUM7UUFFNUUsTUFBTSxFQUFFLGVBQWUsRUFBRSxxQkFBcUIsRUFBRSxHQUFHLE1BQU0sSUFBQSxpQ0FBd0IsRUFDL0UsSUFBSSxDQUFDLEtBQUssRUFDVixJQUFJLENBQUMsTUFBTSxDQUFDLEVBQUUsRUFBRSxFQUNoQixXQUFXLEVBQ1gscUJBQXFCLEVBQ3JCLG9CQUFvQixFQUNwQixVQUFVLENBQ1gsQ0FBQztRQUVGLE1BQU0sRUFBRSxNQUFNLEVBQUUsR0FBRyxNQUFNLDZCQUE2QixDQUFDO1lBQ3JELFNBQVMsRUFBRSxpQkFBaUI7WUFDNUIsMEJBQTBCO1NBQzNCLENBQUMsQ0FBQztRQUVILE1BQU0sSUFBQSw0QkFBc0IsRUFDMUIsSUFBSSxDQUFDLEtBQUssRUFDVixJQUFJLENBQUMsTUFBTSxDQUFDLEVBQUUsRUFBRSxFQUNoQixXQUFXLEVBQ1gsTUFBTSxFQUNOLG9CQUFvQixDQUFDLEtBQUssRUFDMUIsVUFBVSxDQUNYLENBQUM7UUFDRixNQUFNLGlCQUFpQixHQUFHLE1BQU0sSUFBQSwwQkFBb0IsRUFBQyxJQUFJLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsRUFBRSxFQUFFLEVBQUUsV0FBVyxDQUFDLENBQUM7UUFDaEcsTUFBTSwyQkFBMkIsR0FBRztZQUNsQyxTQUFTLEVBQUUsaUJBQWlCO1lBQzVCLGlCQUFpQixFQUFFLGlCQUFpQjtZQUNwQyxpQkFBaUIsRUFBRSxNQUFNO1lBQ3pCLHFCQUFxQjtTQUN0QixDQUFDO1FBQ0YsTUFBTSxNQUFNLEdBQUcsTUFBTSw2QkFBNkIsQ0FBQywyQkFBMkIsQ0FBQyxDQUFDO1FBQ2hGLE1BQU0sSUFBQSwyQkFBcUIsRUFBQyxJQUFJLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsRUFBRSxFQUFFLEVBQUUsV0FBVyxFQUFFLE1BQU0sRUFBRSxVQUFVLENBQUMsQ0FBQztRQUMzRixPQUFPLE1BQU0sSUFBQSxrQkFBWSxFQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxFQUFFLEVBQUUsRUFBRSxXQUFXLENBQUMsQ0FBQztJQUN2RSxDQUFDO0lBRUQ7Ozs7Ozs7T0FPRztJQUNILEtBQUssQ0FBQyxhQUFhLENBQUMsTUFBaUI7UUFDbkMsSUFBSSxDQUFDLEtBQUssQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDMUMsSUFBSSxpQkFBNEIsQ0FBQztRQUNqQyxJQUFJLFdBQW1CLENBQUM7UUFFeEIsTUFBTSxFQUFFLFNBQVMsRUFBRSxHQUFHLEVBQUUsR0FBRyxNQUFNLENBQUM7UUFFbEMsSUFBSSxPQUFPLFNBQVMsS0FBSyxRQUFRLEVBQUU7WUFDakMsaUJBQWlCLEdBQUcsTUFBTSxJQUFBLGtCQUFZLEVBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLEVBQUUsRUFBRSxFQUFFLFNBQVMsQ0FBQyxDQUFDO1lBQ2hGLFdBQVcsR0FBRyxpQkFBaUIsQ0FBQyxXQUFXLENBQUM7U0FDN0M7YUFBTTtZQUNMLGlCQUFpQixHQUFHLFNBQVMsQ0FBQztZQUM5QixXQUFXLEdBQUcsU0FBUyxDQUFDLFdBQVcsQ0FBQztTQUNyQztRQUVELE1BQU0sTUFBTSxHQUFHLE1BQU0sZ0NBQWtCLENBQUMsVUFBVSxFQUFFLENBQUM7UUFDckQsTUFBTSxHQUFHLEdBQUcsTUFBTSxhQUFLLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBRTNDLE1BQU0sbUJBQW1CLEdBQW9CLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDN0QsSUFBSSxDQUFDLG1CQUFtQixDQUFDLFlBQVksRUFBRTtZQUNyQyxNQUFNLElBQUksS0FBSyxDQUFDLHlDQUF5QyxDQUFDLENBQUM7U0FDNUQ7UUFFRCxNQUFNLEVBQUUsVUFBVSxFQUFFLEdBQUcsaUJBQWlCLENBQUM7UUFDekMsSUFBQSxnQkFBTSxFQUFDLGlCQUFpQixDQUFDLFlBQVksSUFBSSxpQkFBaUIsQ0FBQyxXQUFXLEVBQUUsMENBQTBDLENBQUMsQ0FBQztRQUNwSCxNQUFNLFVBQVUsR0FDZCxVQUFVLEtBQUssTUFBTSxDQUFDLENBQUMsQ0FBQyxpQkFBaUIsQ0FBQyxZQUFhLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxpQkFBaUIsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFFM0csTUFBTSxVQUFVLEdBQUcsR0FBRyxDQUFDLFNBQVMsQ0FDOUIsbUJBQW1CLENBQUMsTUFBTSxFQUMxQixDQUFDLG1CQUFtQixDQUFDLFdBQVcsRUFBRSxtQkFBbUIsQ0FBQyxZQUFZLENBQUMsRUFDbkUsVUFBVSxDQUFDLGNBQWMsQ0FDMUIsQ0FBQztRQUVGLE1BQU0sZUFBZSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLFdBQVcsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUVuRSxNQUFNLGFBQWEsR0FBRyxNQUFNLElBQUEseUJBQW1CLEVBQUMsZUFBZSxFQUFFLFVBQVUsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUVwRixNQUFNLFVBQVUsR0FBRyxzQkFBZ0IsQ0FBQyxLQUFLLENBQUM7UUFDMUMsTUFBTSxXQUFXLEdBQUcsVUFBVSxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLEdBQUcsVUFBVSxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsQ0FBQyxTQUFTLENBQUM7UUFDaEcsTUFBTSxXQUFXLEdBQUcsTUFBTSxJQUFBLGdDQUFpQixFQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUN4RCxNQUFNLCtCQUErQixHQUFHLE1BQU0sSUFBQSwwQkFBVyxFQUFDLFdBQVcsRUFBRSxXQUFXLENBQUMsQ0FBQztRQUVwRixNQUFNLFVBQVUsR0FBRyxNQUFNLElBQUEsaUNBQWtCLEVBQUMsV0FBVyxDQUFDLENBQUM7UUFDekQsTUFBTSxpQkFBaUIsR0FBRyxNQUFNLElBQUEsK0JBQWdCLEVBQUMsVUFBVSxDQUFDLFVBQVUsRUFBRSxVQUFVLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsRUFBRSxPQUFPLENBQUMsQ0FBQztRQUNuSCxNQUFNLFFBQVEsR0FBRyxVQUFVLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNsRCxNQUFNLGdCQUFnQixHQUFHLFVBQVUsQ0FBQyxTQUFTLENBQUM7UUFDOUMsTUFBTSxXQUFXLEdBQUcsVUFBVSxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLEdBQUcsVUFBVSxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsQ0FBQyxTQUFTLENBQUM7UUFFaEcsTUFBTSxxQkFBcUIsR0FBRyxhQUFhLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxDQUFDLFVBQVUsQ0FBQztRQUMzRSxJQUFBLGdCQUFNLEVBQUMscUJBQXFCLEVBQUUsMENBQTBDLENBQUMsQ0FBQztRQUUxRSxNQUFNLGVBQWUsR0FBRyxJQUFJLENBQUMsZ0NBQWdDLENBQUMscUJBQXFCLENBQUMsQ0FBQztRQUNyRixNQUFNLG9CQUFvQixHQUFHLElBQUksQ0FBQyxxQ0FBcUMsQ0FBQywrQkFBK0IsQ0FBQyxDQUFDO1FBRXpHLE1BQU0sRUFBRSxlQUFlLEVBQUUscUJBQXFCLEVBQUUsR0FBRyxNQUFNLElBQUEsaUNBQXdCLEVBQy9FLElBQUksQ0FBQyxLQUFLLEVBQ1YsSUFBSSxDQUFDLE1BQU0sQ0FBQyxFQUFFLEVBQUUsRUFDaEIsV0FBVyxFQUNYLGVBQWUsRUFDZixvQkFBb0IsRUFDcEIsVUFBVSxDQUNYLENBQUM7UUFFRixNQUFNLElBQUEsNEJBQXNCLEVBQzFCLElBQUksQ0FBQyxLQUFLLEVBQ1YsSUFBSSxDQUFDLE1BQU0sQ0FBQyxFQUFFLEVBQUUsRUFDaEIsV0FBVyxFQUNYLGFBQWEsRUFDYiwrQkFBK0IsRUFDL0IsVUFBVSxFQUNWLFFBQVEsRUFDUixpQkFBaUIsRUFDakIsZ0JBQWdCLEVBQ2hCLFdBQVcsQ0FDWixDQUFDO1FBRUYsTUFBTSxpQkFBaUIsR0FBRyxNQUFNLElBQUEsMEJBQW9CLEVBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLEVBQUUsRUFBRSxFQUFFLFdBQVcsQ0FBQyxDQUFDO1FBRWhHLE1BQU0saUJBQWlCLEdBQUcsTUFBTSxJQUFBLDZCQUF1QixFQUNyRCxhQUFhLEVBQ2IsaUJBQWlCLEVBQ2pCLG1CQUFtQixDQUFDLFlBQVksRUFDaEMsbUJBQW1CLENBQUMsV0FBVyxFQUMvQixlQUFlLEVBQ2YscUJBQXFCLENBQ3RCLENBQUM7UUFFRixNQUFNLElBQUEsMkJBQXFCLEVBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLEVBQUUsRUFBRSxFQUFFLFdBQVcsRUFBRSxpQkFBaUIsRUFBRSxVQUFVLENBQUMsQ0FBQztRQUV0RyxPQUFPLE1BQU0sSUFBQSxrQkFBWSxFQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxFQUFFLEVBQUUsRUFBRSxXQUFXLENBQUMsQ0FBQztJQUN2RSxDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSCxNQUFNLENBQUMsOEJBQThCLENBQUMsY0FBc0I7UUFDMUQsSUFBSSxjQUFjLENBQUMsTUFBTSxLQUFLLEdBQUcsRUFBRTtZQUNqQyxNQUFNLElBQUksS0FBSyxDQUFDLG9EQUFvRCxjQUFjLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQztTQUM5RjtRQUNELE1BQU0sZUFBZSxHQUFHLGNBQWMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQ3BELE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLGVBQWUsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDO0lBQzFELENBQUM7SUFFRCxnQ0FBZ0MsQ0FBQyxVQUFrQjtRQUNqRCxPQUFPO1lBQ0wsSUFBSSxFQUFFLDhCQUFrQixDQUFDLElBQUk7WUFDN0IsRUFBRSxFQUFFLDhCQUFrQixDQUFDLEtBQUs7WUFDNUIsS0FBSyxFQUFFLFVBQVU7WUFDakIsSUFBSSxFQUFFLDBCQUFjLENBQUMsVUFBVTtTQUNoQyxDQUFDO0lBQ0osQ0FBQztJQUVELHFDQUFxQyxDQUFDLG9CQUE0QjtRQUNoRSxPQUFPO1lBQ0wsSUFBSSxFQUFFLDhCQUFrQixDQUFDLElBQUk7WUFDN0IsRUFBRSxFQUFFLDhCQUFrQixDQUFDLEtBQUs7WUFDNUIsS0FBSyxFQUFFLG9CQUFvQjtZQUMzQixJQUFJLEVBQUUsb0NBQXdCLENBQUMsc0JBQXNCO1NBQ3RELENBQUM7SUFDSixDQUFDO0lBRUQsZ0NBQWdDLENBQUMsZUFBdUI7UUFDdEQsT0FBTztZQUNMLElBQUksRUFBRSw4QkFBa0IsQ0FBQyxJQUFJO1lBQzdCLEVBQUUsRUFBRSw4QkFBa0IsQ0FBQyxLQUFLO1lBQzVCLEtBQUssRUFBRSxlQUFlO1lBQ3RCLElBQUksRUFBRSxvQ0FBd0IsQ0FBQyxpQkFBaUI7U0FDakQsQ0FBQztJQUNKLENBQUM7Q0FDRjtBQXhuQkQsZ0NBd25CQztBQUNEOztHQUVHO0FBQ1UsUUFBQSxRQUFRLEdBQUcsVUFBVSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAcHJldHRpZXJcbiAqL1xuaW1wb3J0IGFzc2VydCBmcm9tICdhc3NlcnQnO1xuaW1wb3J0ICogYXMgYnM1OCBmcm9tICdiczU4JztcbmltcG9ydCAqIGFzIG9wZW5wZ3AgZnJvbSAnb3BlbnBncCc7XG5pbXBvcnQgRWRkc2EsIHsgU2lnblNoYXJlLCBHU2hhcmUgfSBmcm9tICcuLi8uLi8uLi8uLi9hY2NvdW50LWxpYi9tcGMvdHNzJztcbmltcG9ydCB7IEFkZEtleWNoYWluT3B0aW9ucywgS2V5Y2hhaW4sIENyZWF0ZUJhY2t1cE9wdGlvbnMgfSBmcm9tICcuLi8uLi8uLi9rZXljaGFpbic7XG5pbXBvcnQgeyB2ZXJpZnlXYWxsZXRTaWduYXR1cmUgfSBmcm9tICcuLi8uLi8uLi90c3MvZWRkc2EvZWRkc2EnO1xuaW1wb3J0IHsgZW5jcnlwdFRleHQsIGdldEJpdGdvR3BnUHViS2V5LCBjcmVhdGVTaGFyZVByb29mLCBnZW5lcmF0ZUdQR0tleVBhaXIgfSBmcm9tICcuLi8uLi9vcGVuZ3BnVXRpbHMnO1xuaW1wb3J0IHtcbiAgY3JlYXRlVXNlclNpZ25TaGFyZSxcbiAgY3JlYXRlVXNlclRvQml0R29HU2hhcmUsXG4gIGdldEJpdGdvVG9Vc2VyUlNoYXJlLFxuICBnZXRUeFJlcXVlc3QsXG4gIG9mZmVyVXNlclRvQml0Z29SU2hhcmUsXG4gIHNlbmRVc2VyVG9CaXRnb0dTaGFyZSxcbiAgU2hhcmVLZXlQb3NpdGlvbixcbiAgU2lnbmluZ01hdGVyaWFsLFxufSBmcm9tICcuLi8uLi8uLi90c3MnO1xuaW1wb3J0IHtcbiAgQ29tbWl0bWVudFNoYXJlUmVjb3JkLFxuICBDb21taXRtZW50VHlwZSxcbiAgQ3VzdG9tQ29tbWl0bWVudEdlbmVyYXRpbmdGdW5jdGlvbixcbiAgQ3VzdG9tR1NoYXJlR2VuZXJhdGluZ0Z1bmN0aW9uLFxuICBDdXN0b21SU2hhcmVHZW5lcmF0aW5nRnVuY3Rpb24sXG4gIEVuY3J5cHRlZFNpZ25lclNoYXJlUmVjb3JkLFxuICBFbmNyeXB0ZWRTaWduZXJTaGFyZVR5cGUsXG4gIFNpZ25hdHVyZVNoYXJlUmVjb3JkLFxuICBTaWduYXR1cmVTaGFyZVR5cGUsXG4gIFRTU1BhcmFtcyxcbiAgVHhSZXF1ZXN0LFxufSBmcm9tICcuLi9iYXNlVHlwZXMnO1xuaW1wb3J0IHsgQ3JlYXRlRWRkc2FCaXRHb0tleWNoYWluUGFyYW1zLCBDcmVhdGVFZGRzYUtleWNoYWluUGFyYW1zLCBLZXlTaGFyZSwgWVNoYXJlIH0gZnJvbSAnLi90eXBlcyc7XG5pbXBvcnQgYmFzZVRTU1V0aWxzIGZyb20gJy4uL2Jhc2VUU1NVdGlscyc7XG5pbXBvcnQgeyBLZXljaGFpbnNUcmlwbGV0IH0gZnJvbSAnLi4vLi4vLi4vYmFzZUNvaW4nO1xuaW1wb3J0IHsgZXhjaGFuZ2VFZGRzYUNvbW1pdG1lbnRzIH0gZnJvbSAnLi4vLi4vLi4vdHNzL2NvbW1vbic7XG5pbXBvcnQgeyBFZDI1NTE5QmlwMzJIZFRyZWUgfSBmcm9tICdAYml0Z28vc2RrLWxpYi1tcGMnO1xuXG4vKipcbiAqIFV0aWxpdHkgZnVuY3Rpb25zIGZvciBUU1Mgd29yayBmbG93cy5cbiAqL1xuXG5leHBvcnQgY2xhc3MgRWRkc2FVdGlscyBleHRlbmRzIGJhc2VUU1NVdGlsczxLZXlTaGFyZT4ge1xuICBhc3luYyB2ZXJpZnlXYWxsZXRTaWduYXR1cmVzKFxuICAgIHVzZXJHcGdQdWI6IHN0cmluZyxcbiAgICBiYWNrdXBHcGdQdWI6IHN0cmluZyxcbiAgICBiaXRnb0tleWNoYWluOiBLZXljaGFpbixcbiAgICBkZWNyeXB0ZWRTaGFyZTogc3RyaW5nLFxuICAgIHZlcmlmaWVySW5kZXg6IDEgfCAyXG4gICk6IFByb21pc2U8dm9pZD4ge1xuICAgIGFzc2VydChiaXRnb0tleWNoYWluLmNvbW1vbktleWNoYWluKTtcbiAgICBhc3NlcnQoYml0Z29LZXljaGFpbi53YWxsZXRIU01HUEdQdWJsaWNLZXlTaWdzKTtcblxuICAgIGNvbnN0IGJpdGdvR3BnS2V5ID0gYXdhaXQgZ2V0Qml0Z29HcGdQdWJLZXkodGhpcy5iaXRnbyk7XG5cbiAgICBjb25zdCB1c2VyS2V5UHViID0gYXdhaXQgb3BlbnBncC5yZWFkS2V5KHsgYXJtb3JlZEtleTogdXNlckdwZ1B1YiB9KTtcbiAgICBjb25zdCB1c2VyS2V5SWQgPSB1c2VyS2V5UHViLmtleVBhY2tldC5nZXRGaW5nZXJwcmludCgpO1xuXG4gICAgY29uc3QgYmFja3VwS2V5UHViID0gYXdhaXQgb3BlbnBncC5yZWFkS2V5KHsgYXJtb3JlZEtleTogYmFja3VwR3BnUHViIH0pO1xuICAgIGNvbnN0IGJhY2t1cEtleUlkID0gYmFja3VwS2V5UHViLmtleVBhY2tldC5nZXRGaW5nZXJwcmludCgpO1xuXG4gICAgY29uc3Qgd2FsbGV0U2lnbmF0dXJlcyA9IGF3YWl0IG9wZW5wZ3AucmVhZEtleXMoeyBhcm1vcmVkS2V5czogYml0Z29LZXljaGFpbi53YWxsZXRIU01HUEdQdWJsaWNLZXlTaWdzIH0pO1xuICAgIGlmICh3YWxsZXRTaWduYXR1cmVzLmxlbmd0aCAhPT0gMikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIHdhbGxldCBzaWduYXR1cmVzJyk7XG4gICAgfVxuXG4gICAgaWYgKHVzZXJLZXlJZCAhPT0gd2FsbGV0U2lnbmF0dXJlc1swXS5rZXlQYWNrZXQuZ2V0RmluZ2VycHJpbnQoKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBmaXJzdCB3YWxsZXQgc2lnbmF0dXJlJ3MgZmluZ2VycHJpbnQgZG9lcyBub3QgbWF0Y2ggcGFzc2VkIHVzZXIgZ3BnIGtleSdzIGZpbmdlcnByaW50YCk7XG4gICAgfVxuXG4gICAgaWYgKGJhY2t1cEtleUlkICE9PSB3YWxsZXRTaWduYXR1cmVzWzFdLmtleVBhY2tldC5nZXRGaW5nZXJwcmludCgpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYHNlY29uZCB3YWxsZXQgc2lnbmF0dXJlJ3MgZmluZ2VycHJpbnQgZG9lcyBub3QgbWF0Y2ggcGFzc2VkIGJhY2t1cCBncGcga2V5J3MgZmluZ2VycHJpbnRgKTtcbiAgICB9XG5cbiAgICBhd2FpdCB2ZXJpZnlXYWxsZXRTaWduYXR1cmUoe1xuICAgICAgd2FsbGV0U2lnbmF0dXJlOiB3YWxsZXRTaWduYXR1cmVzWzBdLFxuICAgICAgY29tbW9uS2V5Y2hhaW46IGJpdGdvS2V5Y2hhaW4uY29tbW9uS2V5Y2hhaW4sXG4gICAgICB1c2VyS2V5SWQsXG4gICAgICBiYWNrdXBLZXlJZCxcbiAgICAgIGJpdGdvUHViOiBiaXRnb0dwZ0tleSxcbiAgICAgIGRlY3J5cHRlZFNoYXJlLFxuICAgICAgdmVyaWZpZXJJbmRleCxcbiAgICB9KTtcblxuICAgIGF3YWl0IHZlcmlmeVdhbGxldFNpZ25hdHVyZSh7XG4gICAgICB3YWxsZXRTaWduYXR1cmU6IHdhbGxldFNpZ25hdHVyZXNbMV0sXG4gICAgICBjb21tb25LZXljaGFpbjogYml0Z29LZXljaGFpbi5jb21tb25LZXljaGFpbixcbiAgICAgIHVzZXJLZXlJZCxcbiAgICAgIGJhY2t1cEtleUlkLFxuICAgICAgYml0Z29QdWI6IGJpdGdvR3BnS2V5LFxuICAgICAgZGVjcnlwdGVkU2hhcmUsXG4gICAgICB2ZXJpZmllckluZGV4LFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBLZXljaGFpbiBjb250YWluaW5nIHRoZSBVc2VyJ3MgVFNTIHNpZ25pbmcgbWF0ZXJpYWxzLlxuICAgKiBXZSBuZWVkIHRvIGhhdmUgdGhlIHBhc3NwaHJhc2UgYmUgb3B0aW9uYWwgdG8gYWxsb3cgZm9yIHRoZSBjbGllbnQgdG8gc3RvcmUgdGhlaXIgYmFja3VwIGtleSBvbiB0aGVpciBwcmVtaXNlc1xuICAgKlxuICAgKiBAcGFyYW0gdXNlckdwZ0tleSAtIGVwaGVtZXJhbCBHUEcga2V5IHRvIGVuY3J5cHQgLyBkZWNyeXB0IHNlbnNpdHZlIGRhdGEgZXhjaGFuZ2VkIGJldHdlZW4gdXNlciBhbmQgc2VydmVyXG4gICAqIEBwYXJhbSB1c2VyS2V5U2hhcmUgLSB1c2VyJ3MgVFNTIGtleSBzaGFyZVxuICAgKiBAcGFyYW0gYmFja3VwS2V5U2hhcmUgLSBiYWNrdXAncyBUU1Mga2V5IHNoYXJlXG4gICAqIEBwYXJhbSBiaXRnb0tleWNoYWluIC0gcHJldmlvdXNseSBjcmVhdGVkIEJpdEdvIGtleWNoYWluOyBtdXN0IGJlIGNvbXBhdGlibGUgd2l0aCB1c2VyIGFuZCBiYWNrdXAga2V5IHNoYXJlc1xuICAgKiBAcGFyYW0gW3Bhc3NwaHJhc2VdIC0gb3B0aW9uYWwgd2FsbGV0IHBhc3NwaHJhc2UgdXNlZCB0byBlbmNyeXB0IHVzZXIncyBzaWduaW5nIG1hdGVyaWFsc1xuICAgKiBAcGFyYW0gW29yaWdpbmFsUGFzc2NvZGVFbmNyeXB0aW9uQ29kZV0gLSBvcHRpb25hbCBlbmNyeXB0aW9uIGNvZGUgbmVlZGVkIGZvciB3YWxsZXQgcGFzc3dvcmQgcmVzZXQgZm9yIGhvdCB3YWxsZXRzXG4gICAqL1xuICBhc3luYyBjcmVhdGVVc2VyS2V5Y2hhaW4oe1xuICAgIHVzZXJHcGdLZXksXG4gICAgYmFja3VwR3BnS2V5LFxuICAgIHVzZXJLZXlTaGFyZSxcbiAgICBiYWNrdXBLZXlTaGFyZSxcbiAgICBiaXRnb0tleWNoYWluLFxuICAgIHBhc3NwaHJhc2UsXG4gICAgb3JpZ2luYWxQYXNzY29kZUVuY3J5cHRpb25Db2RlLFxuICB9OiBDcmVhdGVFZGRzYUtleWNoYWluUGFyYW1zKTogUHJvbWlzZTxLZXljaGFpbj4ge1xuICAgIGNvbnN0IE1QQyA9IGF3YWl0IEVkZHNhLmluaXRpYWxpemUoKTtcbiAgICBjb25zdCBiaXRnb0tleVNoYXJlcyA9IGJpdGdvS2V5Y2hhaW4ua2V5U2hhcmVzO1xuICAgIGlmICghYml0Z29LZXlTaGFyZXMpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignTWlzc2luZyBCaXRHbyBrZXkgc2hhcmVzJyk7XG4gICAgfVxuXG4gICAgY29uc3QgYml0R29Ub1VzZXJTaGFyZSA9IGJpdGdvS2V5U2hhcmVzLmZpbmQoKGtleVNoYXJlKSA9PiBrZXlTaGFyZS5mcm9tID09PSAnYml0Z28nICYmIGtleVNoYXJlLnRvID09PSAndXNlcicpO1xuICAgIGlmICghYml0R29Ub1VzZXJTaGFyZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdNaXNzaW5nIEJpdEdvIHRvIFVzZXIga2V5IHNoYXJlJyk7XG4gICAgfVxuXG4gICAgY29uc3QgYml0R29Ub1VzZXJQcml2YXRlU2hhcmUgPSBhd2FpdCB0aGlzLmRlY3J5cHRQcml2YXRlU2hhcmUoYml0R29Ub1VzZXJTaGFyZS5wcml2YXRlU2hhcmUsIHVzZXJHcGdLZXkpO1xuXG4gICAgYXdhaXQgdGhpcy52ZXJpZnlXYWxsZXRTaWduYXR1cmVzKFxuICAgICAgdXNlckdwZ0tleS5wdWJsaWNLZXksXG4gICAgICBiYWNrdXBHcGdLZXkucHVibGljS2V5LFxuICAgICAgYml0Z29LZXljaGFpbixcbiAgICAgIGJpdEdvVG9Vc2VyUHJpdmF0ZVNoYXJlLFxuICAgICAgMVxuICAgICk7XG5cbiAgICBjb25zdCBiaXRnb1RvVXNlcjogWVNoYXJlID0ge1xuICAgICAgaTogMSxcbiAgICAgIGo6IDMsXG4gICAgICB5OiBiaXRHb1RvVXNlclNoYXJlLnB1YmxpY1NoYXJlLnNsaWNlKDAsIDY0KSxcbiAgICAgIHY6IGJpdEdvVG9Vc2VyU2hhcmUudnNzUHJvb2YsXG4gICAgICB1OiBiaXRHb1RvVXNlclByaXZhdGVTaGFyZS5zbGljZSgwLCA2NCksXG4gICAgICBjaGFpbmNvZGU6IGJpdEdvVG9Vc2VyUHJpdmF0ZVNoYXJlLnNsaWNlKDY0KSxcbiAgICB9O1xuXG4gICAgLy8gVE9ETyhCRy00NzE3MCk6IHVzZSB0c3MuY3JlYXRlQ29tYmluZWRLZXkgaGVscGVyIHdoZW4gc2lnbmF0dXJlcyBhcmUgc3VwcG9ydGVkXG4gICAgY29uc3QgdXNlckNvbWJpbmVkID0gTVBDLmtleUNvbWJpbmUodXNlcktleVNoYXJlLnVTaGFyZSwgW2JhY2t1cEtleVNoYXJlLnlTaGFyZXNbMV0sIGJpdGdvVG9Vc2VyXSk7XG4gICAgY29uc3QgY29tbW9uS2V5Y2hhaW4gPSB1c2VyQ29tYmluZWQucFNoYXJlLnkgKyB1c2VyQ29tYmluZWQucFNoYXJlLmNoYWluY29kZTtcbiAgICBpZiAoY29tbW9uS2V5Y2hhaW4gIT09IGJpdGdvS2V5Y2hhaW4uY29tbW9uS2V5Y2hhaW4pIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignRmFpbGVkIHRvIGNyZWF0ZSB1c2VyIGtleWNoYWluIC0gY29tbW9uS2V5Y2hhaW5zIGRvIG5vdCBtYXRjaC4nKTtcbiAgICB9XG5cbiAgICBjb25zdCB1c2VyU2lnbmluZ01hdGVyaWFsOiBTaWduaW5nTWF0ZXJpYWwgPSB7XG4gICAgICB1U2hhcmU6IHVzZXJLZXlTaGFyZS51U2hhcmUsXG4gICAgICBiaXRnb1lTaGFyZTogYml0Z29Ub1VzZXIsXG4gICAgICBiYWNrdXBZU2hhcmU6IGJhY2t1cEtleVNoYXJlLnlTaGFyZXNbMV0sXG4gICAgfTtcblxuICAgIGNvbnN0IHVzZXJLZXljaGFpblBhcmFtczogQWRkS2V5Y2hhaW5PcHRpb25zID0ge1xuICAgICAgc291cmNlOiAndXNlcicsXG4gICAgICBrZXlUeXBlOiAndHNzJyxcbiAgICAgIGNvbW1vbktleWNoYWluOiBiaXRnb0tleWNoYWluLmNvbW1vbktleWNoYWluLFxuICAgICAgb3JpZ2luYWxQYXNzY29kZUVuY3J5cHRpb25Db2RlLFxuICAgIH07XG4gICAgaWYgKHBhc3NwaHJhc2UgIT09IHVuZGVmaW5lZCkge1xuICAgICAgdXNlcktleWNoYWluUGFyYW1zLmVuY3J5cHRlZFBydiA9IHRoaXMuYml0Z28uZW5jcnlwdCh7XG4gICAgICAgIGlucHV0OiBKU09OLnN0cmluZ2lmeSh1c2VyU2lnbmluZ01hdGVyaWFsKSxcbiAgICAgICAgcGFzc3dvcmQ6IHBhc3NwaHJhc2UsXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gYXdhaXQgdGhpcy5iYXNlQ29pbi5rZXljaGFpbnMoKS5hZGQodXNlcktleWNoYWluUGFyYW1zKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgS2V5Y2hhaW4gY29udGFpbmluZyB0aGUgQmFja3VwIHBhcnR5J3MgVFNTIHNpZ25pbmcgbWF0ZXJpYWxzLlxuICAgKiBXZSBuZWVkIHRvIGhhdmUgdGhlIHBhc3NwaHJhc2UgYmUgb3B0aW9uYWwgdG8gYWxsb3cgZm9yIHRoZSBjbGllbnQgdG8gc3RvcmUgdGhlaXIgYmFja3VwIGtleSBvbiB0aGVpciBwcmVtaXNlc1xuICAgKlxuICAgKiBAcGFyYW0gdXNlckdwZ0tleSAtIGVwaGVtZXJhbCBHUEcga2V5IHRvIGVuY3J5cHQgLyBkZWNyeXB0IHNlbnNpdHZlIGRhdGEgZXhjaGFuZ2VkIGJldHdlZW4gdXNlciBhbmQgc2VydmVyXG4gICAqIEBwYXJhbSB1c2VyS2V5U2hhcmUgLSBVc2VyJ3MgVFNTIEtleXNoYXJlXG4gICAqIEBwYXJhbSBiYWNrdXBHcGdLZXkgLSBlcGhlbWVyYWwgR1BHIGtleSB0byBlbmNyeXB0IC8gZGVjcnlwdCBzZW5zaXR2ZSBkYXRhIGV4Y2hhbmdlZCBiZXR3ZWVuIGJhY2t1cCBhbmQgc2VydmVyXG4gICAqIEBwYXJhbSBiYWNrdXBLZXlTaGFyZSAtIEJhY2t1cCdzIFRTUyBLZXlzaGFyZVxuICAgKiBAcGFyYW0gYml0Z29LZXljaGFpbiAtIHByZXZpb3VzbHkgY3JlYXRlZCBCaXRHbyBrZXljaGFpbjsgbXVzdCBiZSBjb21wYXRpYmxlIHdpdGggdXNlciBhbmQgYmFja3VwIGtleSBzaGFyZXNcbiAgICogQHBhcmFtIFtwYXNzcGhyYXNlXSAtIG9wdGlvbmFsIHdhbGxldCBwYXNzcGhyYXNlIHVzZWQgdG8gZW5jcnlwdCB1c2VyJ3Mgc2lnbmluZyBtYXRlcmlhbHNcbiAgICovXG4gIGFzeW5jIGNyZWF0ZUJhY2t1cEtleWNoYWluKHtcbiAgICB1c2VyR3BnS2V5LFxuICAgIGJhY2t1cEdwZ0tleSxcbiAgICB1c2VyS2V5U2hhcmUsXG4gICAgYmFja3VwS2V5U2hhcmUsXG4gICAgYml0Z29LZXljaGFpbixcbiAgICBwYXNzcGhyYXNlLFxuICB9OiBDcmVhdGVFZGRzYUtleWNoYWluUGFyYW1zKTogUHJvbWlzZTxLZXljaGFpbj4ge1xuICAgIGNvbnN0IE1QQyA9IGF3YWl0IEVkZHNhLmluaXRpYWxpemUoKTtcbiAgICBjb25zdCBiaXRnb0tleVNoYXJlcyA9IGJpdGdvS2V5Y2hhaW4ua2V5U2hhcmVzO1xuICAgIGlmICghYml0Z29LZXlTaGFyZXMpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBiaXRnbyBrZXlzaGFyZXMnKTtcbiAgICB9XG5cbiAgICBjb25zdCBiaXRHb1RvQmFja3VwU2hhcmUgPSBiaXRnb0tleVNoYXJlcy5maW5kKChrZXlTaGFyZSkgPT4ga2V5U2hhcmUuZnJvbSA9PT0gJ2JpdGdvJyAmJiBrZXlTaGFyZS50byA9PT0gJ2JhY2t1cCcpO1xuICAgIGlmICghYml0R29Ub0JhY2t1cFNoYXJlKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ01pc3NpbmcgQml0R28gdG8gVXNlciBrZXkgc2hhcmUnKTtcbiAgICB9XG5cbiAgICBjb25zdCBiaXRHb1RvQmFja3VwUHJpdmF0ZVNoYXJlID0gYXdhaXQgdGhpcy5kZWNyeXB0UHJpdmF0ZVNoYXJlKGJpdEdvVG9CYWNrdXBTaGFyZS5wcml2YXRlU2hhcmUsIGJhY2t1cEdwZ0tleSk7XG5cbiAgICBhd2FpdCB0aGlzLnZlcmlmeVdhbGxldFNpZ25hdHVyZXMoXG4gICAgICB1c2VyR3BnS2V5LnB1YmxpY0tleSxcbiAgICAgIGJhY2t1cEdwZ0tleS5wdWJsaWNLZXksXG4gICAgICBiaXRnb0tleWNoYWluLFxuICAgICAgYml0R29Ub0JhY2t1cFByaXZhdGVTaGFyZSxcbiAgICAgIDJcbiAgICApO1xuXG4gICAgY29uc3QgYml0Z29Ub0JhY2t1cDogWVNoYXJlID0ge1xuICAgICAgaTogMixcbiAgICAgIGo6IDMsXG4gICAgICB5OiBiaXRHb1RvQmFja3VwU2hhcmUucHVibGljU2hhcmUuc2xpY2UoMCwgNjQpLFxuICAgICAgdjogYml0R29Ub0JhY2t1cFNoYXJlLnZzc1Byb29mLFxuICAgICAgdTogYml0R29Ub0JhY2t1cFByaXZhdGVTaGFyZS5zbGljZSgwLCA2NCksXG4gICAgICBjaGFpbmNvZGU6IGJpdEdvVG9CYWNrdXBQcml2YXRlU2hhcmUuc2xpY2UoNjQpLFxuICAgIH07XG5cbiAgICAvLyBUT0RPKEJHLTQ3MTcwKTogdXNlIHRzcy5jcmVhdGVDb21iaW5lZEtleSBoZWxwZXIgd2hlbiBzaWduYXR1cmVzIGFyZSBzdXBwb3J0ZWRcbiAgICBjb25zdCBiYWNrdXBDb21iaW5lZCA9IE1QQy5rZXlDb21iaW5lKGJhY2t1cEtleVNoYXJlLnVTaGFyZSwgW3VzZXJLZXlTaGFyZS55U2hhcmVzWzJdLCBiaXRnb1RvQmFja3VwXSk7XG4gICAgY29uc3QgY29tbW9uS2V5Y2hhaW4gPSBiYWNrdXBDb21iaW5lZC5wU2hhcmUueSArIGJhY2t1cENvbWJpbmVkLnBTaGFyZS5jaGFpbmNvZGU7XG4gICAgaWYgKGNvbW1vbktleWNoYWluICE9PSBiaXRnb0tleWNoYWluLmNvbW1vbktleWNoYWluKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ZhaWxlZCB0byBjcmVhdGUgYmFja3VwIGtleWNoYWluIC0gY29tbW9uS2V5Y2hhaW5zIGRvIG5vdCBtYXRjaC4nKTtcbiAgICB9XG5cbiAgICBjb25zdCBiYWNrdXBTaWduaW5nTWF0ZXJpYWw6IFNpZ25pbmdNYXRlcmlhbCA9IHtcbiAgICAgIHVTaGFyZTogYmFja3VwS2V5U2hhcmUudVNoYXJlLFxuICAgICAgYml0Z29ZU2hhcmU6IGJpdGdvVG9CYWNrdXAsXG4gICAgICB1c2VyWVNoYXJlOiB1c2VyS2V5U2hhcmUueVNoYXJlc1syXSxcbiAgICB9O1xuICAgIGNvbnN0IHBydiA9IEpTT04uc3RyaW5naWZ5KGJhY2t1cFNpZ25pbmdNYXRlcmlhbCk7XG5cbiAgICBjb25zdCBwYXJhbXM6IENyZWF0ZUJhY2t1cE9wdGlvbnMgPSB7XG4gICAgICBzb3VyY2U6ICdiYWNrdXAnLFxuICAgICAga2V5VHlwZTogJ3RzcycsXG4gICAgICBjb21tb25LZXljaGFpbjogYml0Z29LZXljaGFpbi5jb21tb25LZXljaGFpbixcbiAgICAgIHBydjogcHJ2LFxuICAgIH07XG5cbiAgICBpZiAocGFzc3BocmFzZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBwYXJhbXMuZW5jcnlwdGVkUHJ2ID0gdGhpcy5iaXRnby5lbmNyeXB0KHsgaW5wdXQ6IHBydiwgcGFzc3dvcmQ6IHBhc3NwaHJhc2UgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGF3YWl0IHRoaXMuYmFzZUNvaW4ua2V5Y2hhaW5zKCkuY3JlYXRlQmFja3VwKHBhcmFtcyk7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlcyBhIEtleWNoYWluIGNvbnRhaW5pbmcgQml0R28ncyBUU1Mgc2lnbmluZyBtYXRlcmlhbHMuXG4gICAqXG4gICAqIEBwYXJhbSB1c2VyR3BnS2V5IC0gZXBoZW1lcmFsIEdQRyBrZXkgdG8gZW5jcnlwdCAvIGRlY3J5cHQgc2Vuc2l0dmUgZGF0YSBleGNoYW5nZWQgYmV0d2VlbiB1c2VyIGFuZCBzZXJ2ZXJcbiAgICogQHBhcmFtIHVzZXJLZXlTaGFyZSAtIHVzZXIncyBUU1Mga2V5IHNoYXJlXG4gICAqIEBwYXJhbSBiYWNrdXBLZXlTaGFyZSAtIGJhY2t1cCdzIFRTUyBrZXkgc2hhcmVcbiAgICogQHBhcmFtIGVudGVycHJpc2UgLSBlbnRlcnByaXNlIGFzc29jaWF0ZWQgdG8gdGhlIHdhbGxldFxuICAgKi9cbiAgYXN5bmMgY3JlYXRlQml0Z29LZXljaGFpbih7XG4gICAgdXNlckdwZ0tleSxcbiAgICBiYWNrdXBHcGdLZXksXG4gICAgdXNlcktleVNoYXJlLFxuICAgIGJhY2t1cEtleVNoYXJlLFxuICAgIGVudGVycHJpc2UsXG4gIH06IENyZWF0ZUVkZHNhQml0R29LZXljaGFpblBhcmFtcyk6IFByb21pc2U8S2V5Y2hhaW4+IHtcbiAgICAvLyBUT0RPKEJHLTQ3MTcwKTogdXNlIHRzcy5lbmNyeXB0WVNoYXJlIGhlbHBlciB3aGVuIHNpZ25hdHVyZXMgYXJlIHN1cHBvcnRlZFxuICAgIGNvbnN0IHVzZXJUb0JpdGdvUHVibGljU2hhcmUgPSBCdWZmZXIuY29uY2F0KFtcbiAgICAgIEJ1ZmZlci5mcm9tKHVzZXJLZXlTaGFyZS51U2hhcmUueSwgJ2hleCcpLFxuICAgICAgQnVmZmVyLmZyb20odXNlcktleVNoYXJlLnVTaGFyZS5jaGFpbmNvZGUsICdoZXgnKSxcbiAgICBdKS50b1N0cmluZygnaGV4Jyk7XG4gICAgY29uc3QgdXNlclRvQml0Z29Qcml2YXRlU2hhcmUgPSBCdWZmZXIuY29uY2F0KFtcbiAgICAgIEJ1ZmZlci5mcm9tKHVzZXJLZXlTaGFyZS55U2hhcmVzWzNdLnUsICdoZXgnKSxcbiAgICAgIEJ1ZmZlci5mcm9tKHVzZXJLZXlTaGFyZS55U2hhcmVzWzNdLmNoYWluY29kZSwgJ2hleCcpLFxuICAgIF0pLnRvU3RyaW5nKCdoZXgnKTtcbiAgICBjb25zdCB1c2VyVG9CaXRnb0tleVNoYXJlID0ge1xuICAgICAgcHVibGljU2hhcmU6IHVzZXJUb0JpdGdvUHVibGljU2hhcmUsXG4gICAgICBwcml2YXRlU2hhcmU6IHVzZXJUb0JpdGdvUHJpdmF0ZVNoYXJlLFxuICAgICAgcHJpdmF0ZVNoYXJlUHJvb2Y6IGF3YWl0IGNyZWF0ZVNoYXJlUHJvb2YodXNlckdwZ0tleS5wcml2YXRlS2V5LCB1c2VyVG9CaXRnb1ByaXZhdGVTaGFyZS5zbGljZSgwLCA2NCksICdlZGRzYScpLFxuICAgICAgdnNzUHJvb2Y6IHVzZXJLZXlTaGFyZS55U2hhcmVzWzNdLnYsXG4gICAgfTtcblxuICAgIGNvbnN0IGJhY2t1cFRvQml0Z29QdWJsaWNTaGFyZSA9IEJ1ZmZlci5jb25jYXQoW1xuICAgICAgQnVmZmVyLmZyb20oYmFja3VwS2V5U2hhcmUudVNoYXJlLnksICdoZXgnKSxcbiAgICAgIEJ1ZmZlci5mcm9tKGJhY2t1cEtleVNoYXJlLnVTaGFyZS5jaGFpbmNvZGUsICdoZXgnKSxcbiAgICBdKS50b1N0cmluZygnaGV4Jyk7XG4gICAgY29uc3QgYmFja3VwVG9CaXRnb1ByaXZhdGVTaGFyZSA9IEJ1ZmZlci5jb25jYXQoW1xuICAgICAgQnVmZmVyLmZyb20oYmFja3VwS2V5U2hhcmUueVNoYXJlc1szXS51LCAnaGV4JyksXG4gICAgICBCdWZmZXIuZnJvbShiYWNrdXBLZXlTaGFyZS55U2hhcmVzWzNdLmNoYWluY29kZSwgJ2hleCcpLFxuICAgIF0pLnRvU3RyaW5nKCdoZXgnKTtcbiAgICBjb25zdCBiYWNrdXBUb0JpdGdvS2V5U2hhcmUgPSB7XG4gICAgICBwdWJsaWNTaGFyZTogYmFja3VwVG9CaXRnb1B1YmxpY1NoYXJlLFxuICAgICAgcHJpdmF0ZVNoYXJlOiBiYWNrdXBUb0JpdGdvUHJpdmF0ZVNoYXJlLFxuICAgICAgcHJpdmF0ZVNoYXJlUHJvb2Y6IGF3YWl0IGNyZWF0ZVNoYXJlUHJvb2YoXG4gICAgICAgIGJhY2t1cEdwZ0tleS5wcml2YXRlS2V5LFxuICAgICAgICBiYWNrdXBUb0JpdGdvUHJpdmF0ZVNoYXJlLnNsaWNlKDAsIDY0KSxcbiAgICAgICAgJ2VkZHNhJ1xuICAgICAgKSxcbiAgICAgIHZzc1Byb29mOiBiYWNrdXBLZXlTaGFyZS55U2hhcmVzWzNdLnYsXG4gICAgfTtcblxuICAgIHJldHVybiBhd2FpdCB0aGlzLmNyZWF0ZUJpdGdvS2V5Y2hhaW5JbldQKFxuICAgICAgdXNlckdwZ0tleSxcbiAgICAgIGJhY2t1cEdwZ0tleSxcbiAgICAgIHVzZXJUb0JpdGdvS2V5U2hhcmUsXG4gICAgICBiYWNrdXBUb0JpdGdvS2V5U2hhcmUsXG4gICAgICAndHNzJyxcbiAgICAgIGVudGVycHJpc2VcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgVXNlciwgQmFja3VwLCBhbmQgQml0R28gVFNTIEtleWNoYWlucy5cbiAgICpcbiAgICogQHBhcmFtIHBhcmFtcy5wYXNzcGhyYXNlIC0gcGFzc3BocmFzZSB1c2VkIHRvIGVuY3J5cHQgc2lnbmluZyBtYXRlcmlhbHMgY3JlYXRlZCBmb3IgVXNlciBhbmQgQmFja3VwXG4gICAqL1xuICBhc3luYyBjcmVhdGVLZXljaGFpbnMocGFyYW1zOiB7XG4gICAgcGFzc3BocmFzZT86IHN0cmluZztcbiAgICBlbnRlcnByaXNlPzogc3RyaW5nO1xuICAgIG9yaWdpbmFsUGFzc2NvZGVFbmNyeXB0aW9uQ29kZT86IHN0cmluZztcbiAgfSk6IFByb21pc2U8S2V5Y2hhaW5zVHJpcGxldD4ge1xuICAgIGNvbnN0IE1QQyA9IGF3YWl0IEVkZHNhLmluaXRpYWxpemUoKTtcbiAgICBjb25zdCBtID0gMjtcbiAgICBjb25zdCBuID0gMztcblxuICAgIGNvbnN0IHVzZXJLZXlTaGFyZSA9IE1QQy5rZXlTaGFyZSgxLCBtLCBuKTtcbiAgICBjb25zdCBiYWNrdXBLZXlTaGFyZSA9IE1QQy5rZXlTaGFyZSgyLCBtLCBuKTtcblxuICAgIGNvbnN0IHVzZXJHcGdLZXkgPSBhd2FpdCBnZW5lcmF0ZUdQR0tleVBhaXIoJ3NlY3AyNTZrMScpO1xuICAgIGNvbnN0IGJhY2t1cEdwZ0tleSA9IGF3YWl0IGdlbmVyYXRlR1BHS2V5UGFpcignc2VjcDI1NmsxJyk7XG5cbiAgICBjb25zdCBiaXRnb0tleWNoYWluID0gYXdhaXQgdGhpcy5jcmVhdGVCaXRnb0tleWNoYWluKHtcbiAgICAgIHVzZXJHcGdLZXksXG4gICAgICB1c2VyS2V5U2hhcmUsXG4gICAgICBiYWNrdXBHcGdLZXksXG4gICAgICBiYWNrdXBLZXlTaGFyZSxcbiAgICAgIGVudGVycHJpc2U6IHBhcmFtcy5lbnRlcnByaXNlLFxuICAgIH0pO1xuICAgIGNvbnN0IHVzZXJLZXljaGFpblByb21pc2UgPSB0aGlzLmNyZWF0ZVVzZXJLZXljaGFpbih7XG4gICAgICB1c2VyR3BnS2V5LFxuICAgICAgdXNlcktleVNoYXJlLFxuICAgICAgYmFja3VwR3BnS2V5LFxuICAgICAgYmFja3VwS2V5U2hhcmUsXG4gICAgICBiaXRnb0tleWNoYWluLFxuICAgICAgcGFzc3BocmFzZTogcGFyYW1zLnBhc3NwaHJhc2UsXG4gICAgICBvcmlnaW5hbFBhc3Njb2RlRW5jcnlwdGlvbkNvZGU6IHBhcmFtcy5vcmlnaW5hbFBhc3Njb2RlRW5jcnlwdGlvbkNvZGUsXG4gICAgfSk7XG4gICAgY29uc3QgYmFja3VwS2V5Y2hhaW5Qcm9taXNlID0gdGhpcy5jcmVhdGVCYWNrdXBLZXljaGFpbih7XG4gICAgICB1c2VyR3BnS2V5LFxuICAgICAgdXNlcktleVNoYXJlLFxuICAgICAgYmFja3VwR3BnS2V5LFxuICAgICAgYmFja3VwS2V5U2hhcmUsXG4gICAgICBiaXRnb0tleWNoYWluLFxuICAgICAgcGFzc3BocmFzZTogcGFyYW1zLnBhc3NwaHJhc2UsXG4gICAgfSk7XG4gICAgY29uc3QgW3VzZXJLZXljaGFpbiwgYmFja3VwS2V5Y2hhaW5dID0gYXdhaXQgUHJvbWlzZS5hbGwoW3VzZXJLZXljaGFpblByb21pc2UsIGJhY2t1cEtleWNoYWluUHJvbWlzZV0pO1xuXG4gICAgLy8gY3JlYXRlIHdhbGxldFxuICAgIGNvbnN0IGtleWNoYWlucyA9IHtcbiAgICAgIHVzZXJLZXljaGFpbixcbiAgICAgIGJhY2t1cEtleWNoYWluLFxuICAgICAgYml0Z29LZXljaGFpbixcbiAgICB9O1xuXG4gICAgcmV0dXJuIGtleWNoYWlucztcbiAgfVxuXG4gIGFzeW5jIGNyZWF0ZUNvbW1pdG1lbnRTaGFyZUZyb21UeFJlcXVlc3QocGFyYW1zOiB7XG4gICAgdHhSZXF1ZXN0OiBUeFJlcXVlc3Q7XG4gICAgcHJ2OiBzdHJpbmc7XG4gICAgd2FsbGV0UGFzc3BocmFzZTogc3RyaW5nO1xuICB9KTogUHJvbWlzZTx7XG4gICAgdXNlclRvQml0Z29Db21taXRtZW50OiBDb21taXRtZW50U2hhcmVSZWNvcmQ7XG4gICAgZW5jcnlwdGVkU2lnbmVyU2hhcmU6IEVuY3J5cHRlZFNpZ25lclNoYXJlUmVjb3JkO1xuICAgIGVuY3J5cHRlZFVzZXJUb0JpdGdvUlNoYXJlOiBFbmNyeXB0ZWRTaWduZXJTaGFyZVJlY29yZDtcbiAgfT4ge1xuICAgIGNvbnN0IGJpdGdvSW5kZXggPSBTaGFyZUtleVBvc2l0aW9uLkJJVEdPO1xuICAgIGNvbnN0IHsgdHhSZXF1ZXN0LCBwcnYgfSA9IHBhcmFtcztcbiAgICBjb25zdCB0eFJlcXVlc3RSZXNvbHZlZDogVHhSZXF1ZXN0ID0gdHhSZXF1ZXN0O1xuXG4gICAgY29uc3QgaGRUcmVlID0gYXdhaXQgRWQyNTUxOUJpcDMySGRUcmVlLmluaXRpYWxpemUoKTtcbiAgICBjb25zdCBNUEMgPSBhd2FpdCBFZGRzYS5pbml0aWFsaXplKGhkVHJlZSk7XG5cbiAgICBjb25zdCB1c2VyU2lnbmluZ01hdGVyaWFsOiBTaWduaW5nTWF0ZXJpYWwgPSBKU09OLnBhcnNlKHBydik7XG4gICAgaWYgKCF1c2VyU2lnbmluZ01hdGVyaWFsLmJhY2t1cFlTaGFyZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIHVzZXIga2V5IC0gbWlzc2luZyBiYWNrdXBZU2hhcmUnKTtcbiAgICB9XG5cbiAgICBhc3NlcnQodHhSZXF1ZXN0UmVzb2x2ZWQudHJhbnNhY3Rpb25zIHx8IHR4UmVxdWVzdFJlc29sdmVkLnVuc2lnbmVkVHhzLCAnVW5hYmxlIHRvIGZpbmQgdHJhbnNhY3Rpb25zIGluIHR4UmVxdWVzdCcpO1xuICAgIGNvbnN0IHVuc2lnbmVkVHggPVxuICAgICAgdHhSZXF1ZXN0UmVzb2x2ZWQuYXBpVmVyc2lvbiA9PT0gJ2Z1bGwnXG4gICAgICAgID8gdHhSZXF1ZXN0UmVzb2x2ZWQudHJhbnNhY3Rpb25zIVswXS51bnNpZ25lZFR4XG4gICAgICAgIDogdHhSZXF1ZXN0UmVzb2x2ZWQudW5zaWduZWRUeHNbMF07XG5cbiAgICBjb25zdCBzaWduaW5nS2V5ID0gTVBDLmtleURlcml2ZShcbiAgICAgIHVzZXJTaWduaW5nTWF0ZXJpYWwudVNoYXJlLFxuICAgICAgW3VzZXJTaWduaW5nTWF0ZXJpYWwuYml0Z29ZU2hhcmUsIHVzZXJTaWduaW5nTWF0ZXJpYWwuYmFja3VwWVNoYXJlXSxcbiAgICAgIHVuc2lnbmVkVHguZGVyaXZhdGlvblBhdGhcbiAgICApO1xuXG4gICAgY29uc3Qgc2lnbmFibGVQYXlsb2FkID0gQnVmZmVyLmZyb20odW5zaWduZWRUeC5zaWduYWJsZUhleCwgJ2hleCcpO1xuXG4gICAgY29uc3QgdXNlclNpZ25TaGFyZSA9IGF3YWl0IGNyZWF0ZVVzZXJTaWduU2hhcmUoc2lnbmFibGVQYXlsb2FkLCBzaWduaW5nS2V5LnBTaGFyZSk7XG4gICAgY29uc3QgY29tbWl0bWVudCA9IHVzZXJTaWduU2hhcmUuclNoYXJlc1tiaXRnb0luZGV4XT8uY29tbWl0bWVudDtcbiAgICBhc3NlcnQoY29tbWl0bWVudCwgJ1VuYWJsZSB0byBmaW5kIGNvbW1pdG1lbnQgaW4gdXNlclNpZ25TaGFyZScpO1xuICAgIGNvbnN0IHVzZXJUb0JpdGdvQ29tbWl0bWVudCA9IHRoaXMuY3JlYXRlVXNlclRvQml0Z29Db21taXRtZW50U2hhcmUoY29tbWl0bWVudCk7XG5cbiAgICBjb25zdCBzaWduZXJTaGFyZSA9IHNpZ25pbmdLZXkueVNoYXJlc1tiaXRnb0luZGV4XS51ICsgc2lnbmluZ0tleS55U2hhcmVzW2JpdGdvSW5kZXhdLmNoYWluY29kZTtcbiAgICBjb25zdCBiaXRnb0dwZ0tleSA9IGF3YWl0IGdldEJpdGdvR3BnUHViS2V5KHRoaXMuYml0Z28pO1xuICAgIGNvbnN0IHVzZXJUb0JpdGdvRW5jcnlwdGVkU2lnbmVyU2hhcmUgPSBhd2FpdCBlbmNyeXB0VGV4dChzaWduZXJTaGFyZSwgYml0Z29HcGdLZXkpO1xuXG4gICAgY29uc3QgZW5jcnlwdGVkU2lnbmVyU2hhcmUgPSB0aGlzLmNyZWF0ZVVzZXJUb0JpdGdvRW5jcnlwdGVkU2lnbmVyU2hhcmUodXNlclRvQml0Z29FbmNyeXB0ZWRTaWduZXJTaGFyZSk7XG4gICAgY29uc3Qgc3RyaW5naWZpZWRSU2hhcmUgPSBKU09OLnN0cmluZ2lmeSh1c2VyU2lnblNoYXJlKTtcbiAgICBjb25zdCBlbmNyeXB0ZWRSU2hhcmUgPSB0aGlzLmJpdGdvLmVuY3J5cHQoeyBpbnB1dDogc3RyaW5naWZpZWRSU2hhcmUsIHBhc3N3b3JkOiBwYXJhbXMud2FsbGV0UGFzc3BocmFzZSB9KTtcbiAgICBjb25zdCBlbmNyeXB0ZWRVc2VyVG9CaXRnb1JTaGFyZSA9IHRoaXMuY3JlYXRlVXNlclRvQml0Z29FbmNyeXB0ZWRSU2hhcmUoZW5jcnlwdGVkUlNoYXJlKTtcblxuICAgIHJldHVybiB7IHVzZXJUb0JpdGdvQ29tbWl0bWVudCwgZW5jcnlwdGVkU2lnbmVyU2hhcmUsIGVuY3J5cHRlZFVzZXJUb0JpdGdvUlNoYXJlIH07XG4gIH1cblxuICBhc3luYyBjcmVhdGVSU2hhcmVGcm9tVHhSZXF1ZXN0KHBhcmFtczoge1xuICAgIHR4UmVxdWVzdDogVHhSZXF1ZXN0O1xuICAgIHdhbGxldFBhc3NwaHJhc2U6IHN0cmluZztcbiAgICBlbmNyeXB0ZWRVc2VyVG9CaXRnb1JTaGFyZTogRW5jcnlwdGVkU2lnbmVyU2hhcmVSZWNvcmQ7XG4gIH0pOiBQcm9taXNlPHsgclNoYXJlOiBTaWduU2hhcmUgfT4ge1xuICAgIGNvbnN0IHsgd2FsbGV0UGFzc3BocmFzZSwgZW5jcnlwdGVkVXNlclRvQml0Z29SU2hhcmUgfSA9IHBhcmFtcztcblxuICAgIGNvbnN0IGRlY3J5cHRlZFJTaGFyZSA9IHRoaXMuYml0Z28uZGVjcnlwdCh7XG4gICAgICBpbnB1dDogZW5jcnlwdGVkVXNlclRvQml0Z29SU2hhcmUuc2hhcmUsXG4gICAgICBwYXNzd29yZDogd2FsbGV0UGFzc3BocmFzZSxcbiAgICB9KTtcbiAgICBjb25zdCByU2hhcmUgPSBKU09OLnBhcnNlKGRlY3J5cHRlZFJTaGFyZSk7XG4gICAgYXNzZXJ0KHJTaGFyZS54U2hhcmUsICdVbmFibGUgdG8gZmluZCB4U2hhcmUgaW4gZGVjcnlwdGVkUlNoYXJlJyk7XG4gICAgYXNzZXJ0KHJTaGFyZS5yU2hhcmVzLCAnVW5hYmxlIHRvIGZpbmQgclNoYXJlcyBpbiBkZWNyeXB0ZWRSU2hhcmUnKTtcblxuICAgIHJldHVybiB7IHJTaGFyZSB9O1xuICB9XG5cbiAgYXN5bmMgY3JlYXRlR1NoYXJlRnJvbVR4UmVxdWVzdChwYXJhbXM6IHtcbiAgICB0eFJlcXVlc3Q6IHN0cmluZyB8IFR4UmVxdWVzdDtcbiAgICBwcnY6IHN0cmluZztcbiAgICBiaXRnb1RvVXNlclJTaGFyZTogU2lnbmF0dXJlU2hhcmVSZWNvcmQ7XG4gICAgdXNlclRvQml0Z29SU2hhcmU6IFNpZ25TaGFyZTtcbiAgICBiaXRnb1RvVXNlckNvbW1pdG1lbnQ6IENvbW1pdG1lbnRTaGFyZVJlY29yZDtcbiAgfSk6IFByb21pc2U8R1NoYXJlPiB7XG4gICAgbGV0IHR4UmVxdWVzdFJlc29sdmVkOiBUeFJlcXVlc3Q7XG5cbiAgICBjb25zdCB7IHR4UmVxdWVzdCwgcHJ2LCBiaXRnb1RvVXNlckNvbW1pdG1lbnQsIGJpdGdvVG9Vc2VyUlNoYXJlLCB1c2VyVG9CaXRnb1JTaGFyZSB9ID0gcGFyYW1zO1xuXG4gICAgaWYgKHR5cGVvZiB0eFJlcXVlc3QgPT09ICdzdHJpbmcnKSB7XG4gICAgICB0eFJlcXVlc3RSZXNvbHZlZCA9IGF3YWl0IGdldFR4UmVxdWVzdCh0aGlzLmJpdGdvLCB0aGlzLndhbGxldC5pZCgpLCB0eFJlcXVlc3QpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0eFJlcXVlc3RSZXNvbHZlZCA9IHR4UmVxdWVzdDtcbiAgICB9XG5cbiAgICBjb25zdCB1c2VyU2lnbmluZ01hdGVyaWFsOiBTaWduaW5nTWF0ZXJpYWwgPSBKU09OLnBhcnNlKHBydik7XG4gICAgaWYgKCF1c2VyU2lnbmluZ01hdGVyaWFsLmJhY2t1cFlTaGFyZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIHVzZXIga2V5IC0gbWlzc2luZyBiYWNrdXBZU2hhcmUnKTtcbiAgICB9XG5cbiAgICBhc3NlcnQodHhSZXF1ZXN0UmVzb2x2ZWQudHJhbnNhY3Rpb25zIHx8IHR4UmVxdWVzdFJlc29sdmVkLnVuc2lnbmVkVHhzLCAnVW5hYmxlIHRvIGZpbmQgdHJhbnNhY3Rpb25zIGluIHR4UmVxdWVzdCcpO1xuICAgIGNvbnN0IHVuc2lnbmVkVHggPVxuICAgICAgdHhSZXF1ZXN0UmVzb2x2ZWQuYXBpVmVyc2lvbiA9PT0gJ2Z1bGwnXG4gICAgICAgID8gdHhSZXF1ZXN0UmVzb2x2ZWQudHJhbnNhY3Rpb25zIVswXS51bnNpZ25lZFR4XG4gICAgICAgIDogdHhSZXF1ZXN0UmVzb2x2ZWQudW5zaWduZWRUeHNbMF07XG5cbiAgICBjb25zdCBzaWduYWJsZVBheWxvYWQgPSBCdWZmZXIuZnJvbSh1bnNpZ25lZFR4LnNpZ25hYmxlSGV4LCAnaGV4Jyk7XG5cbiAgICBjb25zdCB1c2VyVG9CaXRHb0dTaGFyZSA9IGF3YWl0IGNyZWF0ZVVzZXJUb0JpdEdvR1NoYXJlKFxuICAgICAgdXNlclRvQml0Z29SU2hhcmUsXG4gICAgICBiaXRnb1RvVXNlclJTaGFyZSxcbiAgICAgIHVzZXJTaWduaW5nTWF0ZXJpYWwuYmFja3VwWVNoYXJlLFxuICAgICAgdXNlclNpZ25pbmdNYXRlcmlhbC5iaXRnb1lTaGFyZSxcbiAgICAgIHNpZ25hYmxlUGF5bG9hZCxcbiAgICAgIGJpdGdvVG9Vc2VyQ29tbWl0bWVudFxuICAgICk7XG4gICAgcmV0dXJuIHVzZXJUb0JpdEdvR1NoYXJlO1xuICB9XG5cbiAgYXN5bmMgc2lnbkVkZHNhVHNzVXNpbmdFeHRlcm5hbFNpZ25lcihcbiAgICB0eFJlcXVlc3Q6IHN0cmluZyB8IFR4UmVxdWVzdCxcbiAgICBleHRlcm5hbFNpZ25lckNvbW1pdG1lbnRHZW5lcmF0b3I6IEN1c3RvbUNvbW1pdG1lbnRHZW5lcmF0aW5nRnVuY3Rpb24sXG4gICAgZXh0ZXJuYWxTaWduZXJSU2hhcmVHZW5lcmF0b3I6IEN1c3RvbVJTaGFyZUdlbmVyYXRpbmdGdW5jdGlvbixcbiAgICBleHRlcm5hbFNpZ25lckdTaGFyZUdlbmVyYXRvcjogQ3VzdG9tR1NoYXJlR2VuZXJhdGluZ0Z1bmN0aW9uXG4gICk6IFByb21pc2U8VHhSZXF1ZXN0PiB7XG4gICAgbGV0IHR4UmVxdWVzdFJlc29sdmVkOiBUeFJlcXVlc3Q7XG4gICAgbGV0IHR4UmVxdWVzdElkOiBzdHJpbmc7XG4gICAgaWYgKHR5cGVvZiB0eFJlcXVlc3QgPT09ICdzdHJpbmcnKSB7XG4gICAgICB0eFJlcXVlc3RSZXNvbHZlZCA9IGF3YWl0IGdldFR4UmVxdWVzdCh0aGlzLmJpdGdvLCB0aGlzLndhbGxldC5pZCgpLCB0eFJlcXVlc3QpO1xuICAgICAgdHhSZXF1ZXN0SWQgPSB0eFJlcXVlc3RSZXNvbHZlZC50eFJlcXVlc3RJZDtcbiAgICB9IGVsc2Uge1xuICAgICAgdHhSZXF1ZXN0UmVzb2x2ZWQgPSB0eFJlcXVlc3Q7XG4gICAgICB0eFJlcXVlc3RJZCA9IHR4UmVxdWVzdC50eFJlcXVlc3RJZDtcbiAgICB9XG5cbiAgICBjb25zdCB7IGFwaVZlcnNpb24gfSA9IHR4UmVxdWVzdFJlc29sdmVkO1xuXG4gICAgY29uc3QgeyB1c2VyVG9CaXRnb0NvbW1pdG1lbnQsIGVuY3J5cHRlZFNpZ25lclNoYXJlLCBlbmNyeXB0ZWRVc2VyVG9CaXRnb1JTaGFyZSB9ID1cbiAgICAgIGF3YWl0IGV4dGVybmFsU2lnbmVyQ29tbWl0bWVudEdlbmVyYXRvcih7IHR4UmVxdWVzdDogdHhSZXF1ZXN0UmVzb2x2ZWQgfSk7XG5cbiAgICBjb25zdCB7IGNvbW1pdG1lbnRTaGFyZTogYml0Z29Ub1VzZXJDb21taXRtZW50IH0gPSBhd2FpdCBleGNoYW5nZUVkZHNhQ29tbWl0bWVudHMoXG4gICAgICB0aGlzLmJpdGdvLFxuICAgICAgdGhpcy53YWxsZXQuaWQoKSxcbiAgICAgIHR4UmVxdWVzdElkLFxuICAgICAgdXNlclRvQml0Z29Db21taXRtZW50LFxuICAgICAgZW5jcnlwdGVkU2lnbmVyU2hhcmUsXG4gICAgICBhcGlWZXJzaW9uXG4gICAgKTtcblxuICAgIGNvbnN0IHsgclNoYXJlIH0gPSBhd2FpdCBleHRlcm5hbFNpZ25lclJTaGFyZUdlbmVyYXRvcih7XG4gICAgICB0eFJlcXVlc3Q6IHR4UmVxdWVzdFJlc29sdmVkLFxuICAgICAgZW5jcnlwdGVkVXNlclRvQml0Z29SU2hhcmUsXG4gICAgfSk7XG5cbiAgICBhd2FpdCBvZmZlclVzZXJUb0JpdGdvUlNoYXJlKFxuICAgICAgdGhpcy5iaXRnbyxcbiAgICAgIHRoaXMud2FsbGV0LmlkKCksXG4gICAgICB0eFJlcXVlc3RJZCxcbiAgICAgIHJTaGFyZSxcbiAgICAgIGVuY3J5cHRlZFNpZ25lclNoYXJlLnNoYXJlLFxuICAgICAgYXBpVmVyc2lvblxuICAgICk7XG4gICAgY29uc3QgYml0Z29Ub1VzZXJSU2hhcmUgPSBhd2FpdCBnZXRCaXRnb1RvVXNlclJTaGFyZSh0aGlzLmJpdGdvLCB0aGlzLndhbGxldC5pZCgpLCB0eFJlcXVlc3RJZCk7XG4gICAgY29uc3QgZ1NpZ25TaGFyZVRyYW5zYWN0aW9uUGFyYW1zID0ge1xuICAgICAgdHhSZXF1ZXN0OiB0eFJlcXVlc3RSZXNvbHZlZCxcbiAgICAgIGJpdGdvVG9Vc2VyUlNoYXJlOiBiaXRnb1RvVXNlclJTaGFyZSxcbiAgICAgIHVzZXJUb0JpdGdvUlNoYXJlOiByU2hhcmUsXG4gICAgICBiaXRnb1RvVXNlckNvbW1pdG1lbnQsXG4gICAgfTtcbiAgICBjb25zdCBnU2hhcmUgPSBhd2FpdCBleHRlcm5hbFNpZ25lckdTaGFyZUdlbmVyYXRvcihnU2lnblNoYXJlVHJhbnNhY3Rpb25QYXJhbXMpO1xuICAgIGF3YWl0IHNlbmRVc2VyVG9CaXRnb0dTaGFyZSh0aGlzLmJpdGdvLCB0aGlzLndhbGxldC5pZCgpLCB0eFJlcXVlc3RJZCwgZ1NoYXJlLCBhcGlWZXJzaW9uKTtcbiAgICByZXR1cm4gYXdhaXQgZ2V0VHhSZXF1ZXN0KHRoaXMuYml0Z28sIHRoaXMud2FsbGV0LmlkKCksIHR4UmVxdWVzdElkKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTaWducyB0aGUgdHJhbnNhY3Rpb24gYXNzb2NpYXRlZCB0byB0aGUgdHJhbnNhY3Rpb24gcmVxdWVzdC5cbiAgICpcbiAgICogQHBhcmFtIHR4UmVxdWVzdCAtIHRyYW5zYWN0aW9uIHJlcXVlc3Qgb2JqZWN0IG9yIGlkXG4gICAqIEBwYXJhbSBwcnYgLSBkZWNyeXB0ZWQgcHJpdmF0ZSBrZXlcbiAgICogQHBhcmFtIHJlcUlkIC0gcmVxdWVzdCBpZFxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxUeFJlcXVlc3Q+fSBmdWxseSBzaWduZWQgVHhSZXF1ZXN0IG9iamVjdFxuICAgKi9cbiAgYXN5bmMgc2lnblR4UmVxdWVzdChwYXJhbXM6IFRTU1BhcmFtcyk6IFByb21pc2U8VHhSZXF1ZXN0PiB7XG4gICAgdGhpcy5iaXRnby5zZXRSZXF1ZXN0VHJhY2VyKHBhcmFtcy5yZXFJZCk7XG4gICAgbGV0IHR4UmVxdWVzdFJlc29sdmVkOiBUeFJlcXVlc3Q7XG4gICAgbGV0IHR4UmVxdWVzdElkOiBzdHJpbmc7XG5cbiAgICBjb25zdCB7IHR4UmVxdWVzdCwgcHJ2IH0gPSBwYXJhbXM7XG5cbiAgICBpZiAodHlwZW9mIHR4UmVxdWVzdCA9PT0gJ3N0cmluZycpIHtcbiAgICAgIHR4UmVxdWVzdFJlc29sdmVkID0gYXdhaXQgZ2V0VHhSZXF1ZXN0KHRoaXMuYml0Z28sIHRoaXMud2FsbGV0LmlkKCksIHR4UmVxdWVzdCk7XG4gICAgICB0eFJlcXVlc3RJZCA9IHR4UmVxdWVzdFJlc29sdmVkLnR4UmVxdWVzdElkO1xuICAgIH0gZWxzZSB7XG4gICAgICB0eFJlcXVlc3RSZXNvbHZlZCA9IHR4UmVxdWVzdDtcbiAgICAgIHR4UmVxdWVzdElkID0gdHhSZXF1ZXN0LnR4UmVxdWVzdElkO1xuICAgIH1cblxuICAgIGNvbnN0IGhkVHJlZSA9IGF3YWl0IEVkMjU1MTlCaXAzMkhkVHJlZS5pbml0aWFsaXplKCk7XG4gICAgY29uc3QgTVBDID0gYXdhaXQgRWRkc2EuaW5pdGlhbGl6ZShoZFRyZWUpO1xuXG4gICAgY29uc3QgdXNlclNpZ25pbmdNYXRlcmlhbDogU2lnbmluZ01hdGVyaWFsID0gSlNPTi5wYXJzZShwcnYpO1xuICAgIGlmICghdXNlclNpZ25pbmdNYXRlcmlhbC5iYWNrdXBZU2hhcmUpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCB1c2VyIGtleSAtIG1pc3NpbmcgYmFja3VwWVNoYXJlJyk7XG4gICAgfVxuXG4gICAgY29uc3QgeyBhcGlWZXJzaW9uIH0gPSB0eFJlcXVlc3RSZXNvbHZlZDtcbiAgICBhc3NlcnQodHhSZXF1ZXN0UmVzb2x2ZWQudHJhbnNhY3Rpb25zIHx8IHR4UmVxdWVzdFJlc29sdmVkLnVuc2lnbmVkVHhzLCAnVW5hYmxlIHRvIGZpbmQgdHJhbnNhY3Rpb25zIGluIHR4UmVxdWVzdCcpO1xuICAgIGNvbnN0IHVuc2lnbmVkVHggPVxuICAgICAgYXBpVmVyc2lvbiA9PT0gJ2Z1bGwnID8gdHhSZXF1ZXN0UmVzb2x2ZWQudHJhbnNhY3Rpb25zIVswXS51bnNpZ25lZFR4IDogdHhSZXF1ZXN0UmVzb2x2ZWQudW5zaWduZWRUeHNbMF07XG5cbiAgICBjb25zdCBzaWduaW5nS2V5ID0gTVBDLmtleURlcml2ZShcbiAgICAgIHVzZXJTaWduaW5nTWF0ZXJpYWwudVNoYXJlLFxuICAgICAgW3VzZXJTaWduaW5nTWF0ZXJpYWwuYml0Z29ZU2hhcmUsIHVzZXJTaWduaW5nTWF0ZXJpYWwuYmFja3VwWVNoYXJlXSxcbiAgICAgIHVuc2lnbmVkVHguZGVyaXZhdGlvblBhdGhcbiAgICApO1xuXG4gICAgY29uc3Qgc2lnbmFibGVQYXlsb2FkID0gQnVmZmVyLmZyb20odW5zaWduZWRUeC5zaWduYWJsZUhleCwgJ2hleCcpO1xuXG4gICAgY29uc3QgdXNlclNpZ25TaGFyZSA9IGF3YWl0IGNyZWF0ZVVzZXJTaWduU2hhcmUoc2lnbmFibGVQYXlsb2FkLCBzaWduaW5nS2V5LnBTaGFyZSk7XG5cbiAgICBjb25zdCBiaXRnb0luZGV4ID0gU2hhcmVLZXlQb3NpdGlvbi5CSVRHTztcbiAgICBjb25zdCBzaWduZXJTaGFyZSA9IHNpZ25pbmdLZXkueVNoYXJlc1tiaXRnb0luZGV4XS51ICsgc2lnbmluZ0tleS55U2hhcmVzW2JpdGdvSW5kZXhdLmNoYWluY29kZTtcbiAgICBjb25zdCBiaXRnb0dwZ0tleSA9IGF3YWl0IGdldEJpdGdvR3BnUHViS2V5KHRoaXMuYml0Z28pO1xuICAgIGNvbnN0IHVzZXJUb0JpdGdvRW5jcnlwdGVkU2lnbmVyU2hhcmUgPSBhd2FpdCBlbmNyeXB0VGV4dChzaWduZXJTaGFyZSwgYml0Z29HcGdLZXkpO1xuXG4gICAgY29uc3QgdXNlckdwZ0tleSA9IGF3YWl0IGdlbmVyYXRlR1BHS2V5UGFpcignc2VjcDI1NmsxJyk7XG4gICAgY29uc3QgcHJpdmF0ZVNoYXJlUHJvb2YgPSBhd2FpdCBjcmVhdGVTaGFyZVByb29mKHVzZXJHcGdLZXkucHJpdmF0ZUtleSwgc2lnbmluZ0tleS55U2hhcmVzW2JpdGdvSW5kZXhdLnUsICdlZGRzYScpO1xuICAgIGNvbnN0IHZzc1Byb29mID0gc2lnbmluZ0tleS55U2hhcmVzW2JpdGdvSW5kZXhdLnY7XG4gICAgY29uc3QgdXNlclB1YmxpY0dwZ0tleSA9IHVzZXJHcGdLZXkucHVibGljS2V5O1xuICAgIGNvbnN0IHB1YmxpY1NoYXJlID0gc2lnbmluZ0tleS55U2hhcmVzW2JpdGdvSW5kZXhdLnkgKyBzaWduaW5nS2V5LnlTaGFyZXNbYml0Z29JbmRleF0uY2hhaW5jb2RlO1xuXG4gICAgY29uc3QgdXNlclRvQml0Z29Db21taXRtZW50ID0gdXNlclNpZ25TaGFyZS5yU2hhcmVzW2JpdGdvSW5kZXhdLmNvbW1pdG1lbnQ7XG4gICAgYXNzZXJ0KHVzZXJUb0JpdGdvQ29tbWl0bWVudCwgJ01pc3NpbmcgdXNlclRvQml0Z29Db21taXRtZW50IGNvbW1pdG1lbnQnKTtcblxuICAgIGNvbnN0IGNvbW1pdG1lbnRTaGFyZSA9IHRoaXMuY3JlYXRlVXNlclRvQml0Z29Db21taXRtZW50U2hhcmUodXNlclRvQml0Z29Db21taXRtZW50KTtcbiAgICBjb25zdCBlbmNyeXB0ZWRTaWduZXJTaGFyZSA9IHRoaXMuY3JlYXRlVXNlclRvQml0Z29FbmNyeXB0ZWRTaWduZXJTaGFyZSh1c2VyVG9CaXRnb0VuY3J5cHRlZFNpZ25lclNoYXJlKTtcblxuICAgIGNvbnN0IHsgY29tbWl0bWVudFNoYXJlOiBiaXRnb1RvVXNlckNvbW1pdG1lbnQgfSA9IGF3YWl0IGV4Y2hhbmdlRWRkc2FDb21taXRtZW50cyhcbiAgICAgIHRoaXMuYml0Z28sXG4gICAgICB0aGlzLndhbGxldC5pZCgpLFxuICAgICAgdHhSZXF1ZXN0SWQsXG4gICAgICBjb21taXRtZW50U2hhcmUsXG4gICAgICBlbmNyeXB0ZWRTaWduZXJTaGFyZSxcbiAgICAgIGFwaVZlcnNpb25cbiAgICApO1xuXG4gICAgYXdhaXQgb2ZmZXJVc2VyVG9CaXRnb1JTaGFyZShcbiAgICAgIHRoaXMuYml0Z28sXG4gICAgICB0aGlzLndhbGxldC5pZCgpLFxuICAgICAgdHhSZXF1ZXN0SWQsXG4gICAgICB1c2VyU2lnblNoYXJlLFxuICAgICAgdXNlclRvQml0Z29FbmNyeXB0ZWRTaWduZXJTaGFyZSxcbiAgICAgIGFwaVZlcnNpb24sXG4gICAgICB2c3NQcm9vZixcbiAgICAgIHByaXZhdGVTaGFyZVByb29mLFxuICAgICAgdXNlclB1YmxpY0dwZ0tleSxcbiAgICAgIHB1YmxpY1NoYXJlXG4gICAgKTtcblxuICAgIGNvbnN0IGJpdGdvVG9Vc2VyUlNoYXJlID0gYXdhaXQgZ2V0Qml0Z29Ub1VzZXJSU2hhcmUodGhpcy5iaXRnbywgdGhpcy53YWxsZXQuaWQoKSwgdHhSZXF1ZXN0SWQpO1xuXG4gICAgY29uc3QgdXNlclRvQml0R29HU2hhcmUgPSBhd2FpdCBjcmVhdGVVc2VyVG9CaXRHb0dTaGFyZShcbiAgICAgIHVzZXJTaWduU2hhcmUsXG4gICAgICBiaXRnb1RvVXNlclJTaGFyZSxcbiAgICAgIHVzZXJTaWduaW5nTWF0ZXJpYWwuYmFja3VwWVNoYXJlLFxuICAgICAgdXNlclNpZ25pbmdNYXRlcmlhbC5iaXRnb1lTaGFyZSxcbiAgICAgIHNpZ25hYmxlUGF5bG9hZCxcbiAgICAgIGJpdGdvVG9Vc2VyQ29tbWl0bWVudFxuICAgICk7XG5cbiAgICBhd2FpdCBzZW5kVXNlclRvQml0Z29HU2hhcmUodGhpcy5iaXRnbywgdGhpcy53YWxsZXQuaWQoKSwgdHhSZXF1ZXN0SWQsIHVzZXJUb0JpdEdvR1NoYXJlLCBhcGlWZXJzaW9uKTtcblxuICAgIHJldHVybiBhd2FpdCBnZXRUeFJlcXVlc3QodGhpcy5iaXRnbywgdGhpcy53YWxsZXQuaWQoKSwgdHhSZXF1ZXN0SWQpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgY29tbW9uUHViIHBvcnRpb24gb2YgdGhlIGNvbW1vbktleWNoYWluLlxuICAgKlxuICAgKiBAcGFyYW0ge1N0cmluZ30gY29tbW9uS2V5Y2hhaW5cbiAgICogQHJldHVybnMge3N0cmluZ31cbiAgICovXG4gIHN0YXRpYyBnZXRQdWJsaWNLZXlGcm9tQ29tbW9uS2V5Y2hhaW4oY29tbW9uS2V5Y2hhaW46IHN0cmluZyk6IHN0cmluZyB7XG4gICAgaWYgKGNvbW1vbktleWNoYWluLmxlbmd0aCAhPT0gMTI4KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgY29tbW9uS2V5Y2hhaW4gbGVuZ3RoLCBleHBlY3RlZCAxMjgsIGdvdCAke2NvbW1vbktleWNoYWluLmxlbmd0aH1gKTtcbiAgICB9XG4gICAgY29uc3QgY29tbW9uUHViSGV4U3RyID0gY29tbW9uS2V5Y2hhaW4uc2xpY2UoMCwgNjQpO1xuICAgIHJldHVybiBiczU4LmVuY29kZShCdWZmZXIuZnJvbShjb21tb25QdWJIZXhTdHIsICdoZXgnKSk7XG4gIH1cblxuICBjcmVhdGVVc2VyVG9CaXRnb0NvbW1pdG1lbnRTaGFyZShjb21taXRtZW50OiBzdHJpbmcpOiBDb21taXRtZW50U2hhcmVSZWNvcmQge1xuICAgIHJldHVybiB7XG4gICAgICBmcm9tOiBTaWduYXR1cmVTaGFyZVR5cGUuVVNFUixcbiAgICAgIHRvOiBTaWduYXR1cmVTaGFyZVR5cGUuQklUR08sXG4gICAgICBzaGFyZTogY29tbWl0bWVudCxcbiAgICAgIHR5cGU6IENvbW1pdG1lbnRUeXBlLkNPTU1JVE1FTlQsXG4gICAgfTtcbiAgfVxuXG4gIGNyZWF0ZVVzZXJUb0JpdGdvRW5jcnlwdGVkU2lnbmVyU2hhcmUoZW5jcnlwdGVkU2lnbmVyU2hhcmU6IHN0cmluZyk6IEVuY3J5cHRlZFNpZ25lclNoYXJlUmVjb3JkIHtcbiAgICByZXR1cm4ge1xuICAgICAgZnJvbTogU2lnbmF0dXJlU2hhcmVUeXBlLlVTRVIsXG4gICAgICB0bzogU2lnbmF0dXJlU2hhcmVUeXBlLkJJVEdPLFxuICAgICAgc2hhcmU6IGVuY3J5cHRlZFNpZ25lclNoYXJlLFxuICAgICAgdHlwZTogRW5jcnlwdGVkU2lnbmVyU2hhcmVUeXBlLkVOQ1JZUFRFRF9TSUdORVJfU0hBUkUsXG4gICAgfTtcbiAgfVxuXG4gIGNyZWF0ZVVzZXJUb0JpdGdvRW5jcnlwdGVkUlNoYXJlKGVuY3J5cHRlZFJTaGFyZTogc3RyaW5nKTogRW5jcnlwdGVkU2lnbmVyU2hhcmVSZWNvcmQge1xuICAgIHJldHVybiB7XG4gICAgICBmcm9tOiBTaWduYXR1cmVTaGFyZVR5cGUuVVNFUixcbiAgICAgIHRvOiBTaWduYXR1cmVTaGFyZVR5cGUuQklUR08sXG4gICAgICBzaGFyZTogZW5jcnlwdGVkUlNoYXJlLFxuICAgICAgdHlwZTogRW5jcnlwdGVkU2lnbmVyU2hhcmVUeXBlLkVOQ1JZUFRFRF9SX1NIQVJFLFxuICAgIH07XG4gIH1cbn1cbi8qKlxuICogQGRlcHJlY2F0ZWQgLSB1c2UgRWRkc2FVdGlsc1xuICovXG5leHBvcnQgY29uc3QgVHNzVXRpbHMgPSBFZGRzYVV0aWxzO1xuIl19
|
|
469
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWRkc2EuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvYml0Z28vdXRpbHMvdHNzL2VkZHNhL2VkZHNhLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7O0dBRUc7QUFDSCxvREFBNEI7QUFDNUIsMkNBQTZCO0FBQzdCLGlEQUFtQztBQUNuQywwRUFBMkU7QUFFM0Usb0RBQWlFO0FBQ2pFLHFEQUEwRztBQUMxRyxzQ0FTc0I7QUFDdEIsNENBWXNCO0FBRXRCLG1FQUEyQztBQUUzQyxnREFBK0Q7QUFDL0Qsb0RBQXdEO0FBRXhEOztHQUVHO0FBRUgsTUFBYSxVQUFXLFNBQVEsc0JBQXNCO0lBQ3BELEtBQUssQ0FBQyxzQkFBc0IsQ0FDMUIsVUFBa0IsRUFDbEIsWUFBb0IsRUFDcEIsYUFBdUIsRUFDdkIsY0FBc0IsRUFDdEIsYUFBb0I7UUFFcEIsSUFBQSxnQkFBTSxFQUFDLGFBQWEsQ0FBQyxjQUFjLENBQUMsQ0FBQztRQUNyQyxJQUFBLGdCQUFNLEVBQUMsYUFBYSxDQUFDLHlCQUF5QixDQUFDLENBQUM7UUFFaEQsTUFBTSxXQUFXLEdBQUcsQ0FBQyxNQUFNLElBQUEsZ0NBQWlCLEVBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDO1FBRWhFLE1BQU0sVUFBVSxHQUFHLE1BQU0sT0FBTyxDQUFDLE9BQU8sQ0FBQyxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsQ0FBQyxDQUFDO1FBQ3JFLE1BQU0sU0FBUyxHQUFHLFVBQVUsQ0FBQyxTQUFTLENBQUMsY0FBYyxFQUFFLENBQUM7UUFFeEQsTUFBTSxZQUFZLEdBQUcsTUFBTSxPQUFPLENBQUMsT0FBTyxDQUFDLEVBQUUsVUFBVSxFQUFFLFlBQVksRUFBRSxDQUFDLENBQUM7UUFDekUsTUFBTSxXQUFXLEdBQUcsWUFBWSxDQUFDLFNBQVMsQ0FBQyxjQUFjLEVBQUUsQ0FBQztR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SyxFQUFFLFVBQVU7WUFDakIsSUFBSSxFQUFFLDBCQUFjLENBQUMsVUFBVTtTQUNoQyxDQUFDO0lBQ0osQ0FBQztJQUVELHFDQUFxQyxDQUFDLG9CQUE0QjtRQUNoRSxPQUFPO1lBQ0wsSUFBSSxFQUFFLDhCQUFrQixDQUFDLElBQUk7WUFDN0IsRUFBRSxFQUFFLDhCQUFrQixDQUFDLEtBQUs7WUFDNUIsS0FBSyxFQUFFLG9CQUFvQjtZQUMzQixJQUFJLEVBQUUsb0NBQXdCLENBQUMsc0JBQXNCO1NBQ3RELENBQUM7SUFDSixDQUFDO0lBRUQsZ0NBQWdDLENBQUMsZUFBdUI7UUFDdEQsT0FBTztZQUNMLElBQUksRUFBRSw4QkFBa0IsQ0FBQyxJQUFJO1lBQzdCLEVBQUUsRUFBRSw4QkFBa0IsQ0FBQyxLQUFLO1lBQzVCLEtBQUssRUFBRSxlQUFlO1lBQ3RCLElBQUksRUFBRSxvQ0FBd0IsQ0FBQyxpQkFBaUI7U0FDakQsQ0FBQztJQUNKLENBQUM7Q0FDRjtBQXhuQkQsZ0NBd25CQztBQUNEOztHQUVHO0FBQ1UsUUFBQSxRQUFRLEdBQUcsVUFBVSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAcHJldHRpZXJcbiAqL1xuaW1wb3J0IGFzc2VydCBmcm9tICdhc3NlcnQnO1xuaW1wb3J0ICogYXMgYnM1OCBmcm9tICdiczU4JztcbmltcG9ydCAqIGFzIG9wZW5wZ3AgZnJvbSAnb3BlbnBncCc7XG5pbXBvcnQgRWRkc2EsIHsgU2lnblNoYXJlLCBHU2hhcmUgfSBmcm9tICcuLi8uLi8uLi8uLi9hY2NvdW50LWxpYi9tcGMvdHNzJztcbmltcG9ydCB7IEFkZEtleWNoYWluT3B0aW9ucywgS2V5Y2hhaW4sIENyZWF0ZUJhY2t1cE9wdGlvbnMgfSBmcm9tICcuLi8uLi8uLi9rZXljaGFpbic7XG5pbXBvcnQgeyB2ZXJpZnlXYWxsZXRTaWduYXR1cmUgfSBmcm9tICcuLi8uLi8uLi90c3MvZWRkc2EvZWRkc2EnO1xuaW1wb3J0IHsgZW5jcnlwdFRleHQsIGdldEJpdGdvR3BnUHViS2V5LCBjcmVhdGVTaGFyZVByb29mLCBnZW5lcmF0ZUdQR0tleVBhaXIgfSBmcm9tICcuLi8uLi9vcGVuZ3BnVXRpbHMnO1xuaW1wb3J0IHtcbiAgY3JlYXRlVXNlclNpZ25TaGFyZSxcbiAgY3JlYXRlVXNlclRvQml0R29HU2hhcmUsXG4gIGdldEJpdGdvVG9Vc2VyUlNoYXJlLFxuICBnZXRUeFJlcXVlc3QsXG4gIG9mZmVyVXNlclRvQml0Z29SU2hhcmUsXG4gIHNlbmRVc2VyVG9CaXRnb0dTaGFyZSxcbiAgU2hhcmVLZXlQb3NpdGlvbixcbiAgU2lnbmluZ01hdGVyaWFsLFxufSBmcm9tICcuLi8uLi8uLi90c3MnO1xuaW1wb3J0IHtcbiAgQ29tbWl0bWVudFNoYXJlUmVjb3JkLFxuICBDb21taXRtZW50VHlwZSxcbiAgQ3VzdG9tQ29tbWl0bWVudEdlbmVyYXRpbmdGdW5jdGlvbixcbiAgQ3VzdG9tR1NoYXJlR2VuZXJhdGluZ0Z1bmN0aW9uLFxuICBDdXN0b21SU2hhcmVHZW5lcmF0aW5nRnVuY3Rpb24sXG4gIEVuY3J5cHRlZFNpZ25lclNoYXJlUmVjb3JkLFxuICBFbmNyeXB0ZWRTaWduZXJTaGFyZVR5cGUsXG4gIFNpZ25hdHVyZVNoYXJlUmVjb3JkLFxuICBTaWduYXR1cmVTaGFyZVR5cGUsXG4gIFRTU1BhcmFtcyxcbiAgVHhSZXF1ZXN0LFxufSBmcm9tICcuLi9iYXNlVHlwZXMnO1xuaW1wb3J0IHsgQ3JlYXRlRWRkc2FCaXRHb0tleWNoYWluUGFyYW1zLCBDcmVhdGVFZGRzYUtleWNoYWluUGFyYW1zLCBLZXlTaGFyZSwgWVNoYXJlIH0gZnJvbSAnLi90eXBlcyc7XG5pbXBvcnQgYmFzZVRTU1V0aWxzIGZyb20gJy4uL2Jhc2VUU1NVdGlscyc7XG5pbXBvcnQgeyBLZXljaGFpbnNUcmlwbGV0IH0gZnJvbSAnLi4vLi4vLi4vYmFzZUNvaW4nO1xuaW1wb3J0IHsgZXhjaGFuZ2VFZGRzYUNvbW1pdG1lbnRzIH0gZnJvbSAnLi4vLi4vLi4vdHNzL2NvbW1vbic7XG5pbXBvcnQgeyBFZDI1NTE5QmlwMzJIZFRyZWUgfSBmcm9tICdAYml0Z28vc2RrLWxpYi1tcGMnO1xuXG4vKipcbiAqIFV0aWxpdHkgZnVuY3Rpb25zIGZvciBUU1Mgd29yayBmbG93cy5cbiAqL1xuXG5leHBvcnQgY2xhc3MgRWRkc2FVdGlscyBleHRlbmRzIGJhc2VUU1NVdGlsczxLZXlTaGFyZT4ge1xuICBhc3luYyB2ZXJpZnlXYWxsZXRTaWduYXR1cmVzKFxuICAgIHVzZXJHcGdQdWI6IHN0cmluZyxcbiAgICBiYWNrdXBHcGdQdWI6IHN0cmluZyxcbiAgICBiaXRnb0tleWNoYWluOiBLZXljaGFpbixcbiAgICBkZWNyeXB0ZWRTaGFyZTogc3RyaW5nLFxuICAgIHZlcmlmaWVySW5kZXg6IDEgfCAyXG4gICk6IFByb21pc2U8dm9pZD4ge1xuICAgIGFzc2VydChiaXRnb0tleWNoYWluLmNvbW1vbktleWNoYWluKTtcbiAgICBhc3NlcnQoYml0Z29LZXljaGFpbi53YWxsZXRIU01HUEdQdWJsaWNLZXlTaWdzKTtcblxuICAgIGNvbnN0IGJpdGdvR3BnS2V5ID0gKGF3YWl0IGdldEJpdGdvR3BnUHViS2V5KHRoaXMuYml0Z28pKS5tcGNWMTtcblxuICAgIGNvbnN0IHVzZXJLZXlQdWIgPSBhd2FpdCBvcGVucGdwLnJlYWRLZXkoeyBhcm1vcmVkS2V5OiB1c2VyR3BnUHViIH0pO1xuICAgIGNvbnN0IHVzZXJLZXlJZCA9IHVzZXJLZXlQdWIua2V5UGFja2V0LmdldEZpbmdlcnByaW50KCk7XG5cbiAgICBjb25zdCBiYWNrdXBLZXlQdWIgPSBhd2FpdCBvcGVucGdwLnJlYWRLZXkoeyBhcm1vcmVkS2V5OiBiYWNrdXBHcGdQdWIgfSk7XG4gICAgY29uc3QgYmFja3VwS2V5SWQgPSBiYWNrdXBLZXlQdWIua2V5UGFja2V0LmdldEZpbmdlcnByaW50KCk7XG5cbiAgICBjb25zdCB3YWxsZXRTaWduYXR1cmVzID0gYXdhaXQgb3BlbnBncC5yZWFkS2V5cyh7IGFybW9yZWRLZXlzOiBiaXRnb0tleWNoYWluLndhbGxldEhTTUdQR1B1YmxpY0tleVNpZ3MgfSk7XG4gICAgaWYgKHdhbGxldFNpZ25hdHVyZXMubGVuZ3RoICE9PSAyKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgd2FsbGV0IHNpZ25hdHVyZXMnKTtcbiAgICB9XG5cbiAgICBpZiAodXNlcktleUlkICE9PSB3YWxsZXRTaWduYXR1cmVzWzBdLmtleVBhY2tldC5nZXRGaW5nZXJwcmludCgpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYGZpcnN0IHdhbGxldCBzaWduYXR1cmUncyBmaW5nZXJwcmludCBkb2VzIG5vdCBtYXRjaCBwYXNzZWQgdXNlciBncGcga2V5J3MgZmluZ2VycHJpbnRgKTtcbiAgICB9XG5cbiAgICBpZiAoYmFja3VwS2V5SWQgIT09IHdhbGxldFNpZ25hdHVyZXNbMV0ua2V5UGFja2V0LmdldEZpbmdlcnByaW50KCkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgc2Vjb25kIHdhbGxldCBzaWduYXR1cmUncyBmaW5nZXJwcmludCBkb2VzIG5vdCBtYXRjaCBwYXNzZWQgYmFja3VwIGdwZyBrZXkncyBmaW5nZXJwcmludGApO1xuICAgIH1cblxuICAgIGF3YWl0IHZlcmlmeVdhbGxldFNpZ25hdHVyZSh7XG4gICAgICB3YWxsZXRTaWduYXR1cmU6IHdhbGxldFNpZ25hdHVyZXNbMF0sXG4gICAgICBjb21tb25LZXljaGFpbjogYml0Z29LZXljaGFpbi5jb21tb25LZXljaGFpbixcbiAgICAgIHVzZXJLZXlJZCxcbiAgICAgIGJhY2t1cEtleUlkLFxuICAgICAgYml0Z29QdWI6IGJpdGdvR3BnS2V5LFxuICAgICAgZGVjcnlwdGVkU2hhcmUsXG4gICAgICB2ZXJpZmllckluZGV4LFxuICAgIH0pO1xuXG4gICAgYXdhaXQgdmVyaWZ5V2FsbGV0U2lnbmF0dXJlKHtcbiAgICAgIHdhbGxldFNpZ25hdHVyZTogd2FsbGV0U2lnbmF0dXJlc1sxXSxcbiAgICAgIGNvbW1vbktleWNoYWluOiBiaXRnb0tleWNoYWluLmNvbW1vbktleWNoYWluLFxuICAgICAgdXNlcktleUlkLFxuICAgICAgYmFja3VwS2V5SWQsXG4gICAgICBiaXRnb1B1YjogYml0Z29HcGdLZXksXG4gICAgICBkZWNyeXB0ZWRTaGFyZSxcbiAgICAgIHZlcmlmaWVySW5kZXgsXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlcyBhIEtleWNoYWluIGNvbnRhaW5pbmcgdGhlIFVzZXIncyBUU1Mgc2lnbmluZyBtYXRlcmlhbHMuXG4gICAqIFdlIG5lZWQgdG8gaGF2ZSB0aGUgcGFzc3BocmFzZSBiZSBvcHRpb25hbCB0byBhbGxvdyBmb3IgdGhlIGNsaWVudCB0byBzdG9yZSB0aGVpciBiYWNrdXAga2V5IG9uIHRoZWlyIHByZW1pc2VzXG4gICAqXG4gICAqIEBwYXJhbSB1c2VyR3BnS2V5IC0gZXBoZW1lcmFsIEdQRyBrZXkgdG8gZW5jcnlwdCAvIGRlY3J5cHQgc2Vuc2l0dmUgZGF0YSBleGNoYW5nZWQgYmV0d2VlbiB1c2VyIGFuZCBzZXJ2ZXJcbiAgICogQHBhcmFtIHVzZXJLZXlTaGFyZSAtIHVzZXIncyBUU1Mga2V5IHNoYXJlXG4gICAqIEBwYXJhbSBiYWNrdXBLZXlTaGFyZSAtIGJhY2t1cCdzIFRTUyBrZXkgc2hhcmVcbiAgICogQHBhcmFtIGJpdGdvS2V5Y2hhaW4gLSBwcmV2aW91c2x5IGNyZWF0ZWQgQml0R28ga2V5Y2hhaW47IG11c3QgYmUgY29tcGF0aWJsZSB3aXRoIHVzZXIgYW5kIGJhY2t1cCBrZXkgc2hhcmVzXG4gICAqIEBwYXJhbSBbcGFzc3BocmFzZV0gLSBvcHRpb25hbCB3YWxsZXQgcGFzc3BocmFzZSB1c2VkIHRvIGVuY3J5cHQgdXNlcidzIHNpZ25pbmcgbWF0ZXJpYWxzXG4gICAqIEBwYXJhbSBbb3JpZ2luYWxQYXNzY29kZUVuY3J5cHRpb25Db2RlXSAtIG9wdGlvbmFsIGVuY3J5cHRpb24gY29kZSBuZWVkZWQgZm9yIHdhbGxldCBwYXNzd29yZCByZXNldCBmb3IgaG90IHdhbGxldHNcbiAgICovXG4gIGFzeW5jIGNyZWF0ZVVzZXJLZXljaGFpbih7XG4gICAgdXNlckdwZ0tleSxcbiAgICBiYWNrdXBHcGdLZXksXG4gICAgdXNlcktleVNoYXJlLFxuICAgIGJhY2t1cEtleVNoYXJlLFxuICAgIGJpdGdvS2V5Y2hhaW4sXG4gICAgcGFzc3BocmFzZSxcbiAgICBvcmlnaW5hbFBhc3Njb2RlRW5jcnlwdGlvbkNvZGUsXG4gIH06IENyZWF0ZUVkZHNhS2V5Y2hhaW5QYXJhbXMpOiBQcm9taXNlPEtleWNoYWluPiB7XG4gICAgY29uc3QgTVBDID0gYXdhaXQgRWRkc2EuaW5pdGlhbGl6ZSgpO1xuICAgIGNvbnN0IGJpdGdvS2V5U2hhcmVzID0gYml0Z29LZXljaGFpbi5rZXlTaGFyZXM7XG4gICAgaWYgKCFiaXRnb0tleVNoYXJlcykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdNaXNzaW5nIEJpdEdvIGtleSBzaGFyZXMnKTtcbiAgICB9XG5cbiAgICBjb25zdCBiaXRHb1RvVXNlclNoYXJlID0gYml0Z29LZXlTaGFyZXMuZmluZCgoa2V5U2hhcmUpID0+IGtleVNoYXJlLmZyb20gPT09ICdiaXRnbycgJiYga2V5U2hhcmUudG8gPT09ICd1c2VyJyk7XG4gICAgaWYgKCFiaXRHb1RvVXNlclNoYXJlKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ01pc3NpbmcgQml0R28gdG8gVXNlciBrZXkgc2hhcmUnKTtcbiAgICB9XG5cbiAgICBjb25zdCBiaXRHb1RvVXNlclByaXZhdGVTaGFyZSA9IGF3YWl0IHRoaXMuZGVjcnlwdFByaXZhdGVTaGFyZShiaXRHb1RvVXNlclNoYXJlLnByaXZhdGVTaGFyZSwgdXNlckdwZ0tleSk7XG5cbiAgICBhd2FpdCB0aGlzLnZlcmlmeVdhbGxldFNpZ25hdHVyZXMoXG4gICAgICB1c2VyR3BnS2V5LnB1YmxpY0tleSxcbiAgICAgIGJhY2t1cEdwZ0tleS5wdWJsaWNLZXksXG4gICAgICBiaXRnb0tleWNoYWluLFxuICAgICAgYml0R29Ub1VzZXJQcml2YXRlU2hhcmUsXG4gICAgICAxXG4gICAgKTtcblxuICAgIGNvbnN0IGJpdGdvVG9Vc2VyOiBZU2hhcmUgPSB7XG4gICAgICBpOiAxLFxuICAgICAgajogMyxcbiAgICAgIHk6IGJpdEdvVG9Vc2VyU2hhcmUucHVibGljU2hhcmUuc2xpY2UoMCwgNjQpLFxuICAgICAgdjogYml0R29Ub1VzZXJTaGFyZS52c3NQcm9vZixcbiAgICAgIHU6IGJpdEdvVG9Vc2VyUHJpdmF0ZVNoYXJlLnNsaWNlKDAsIDY0KSxcbiAgICAgIGNoYWluY29kZTogYml0R29Ub1VzZXJQcml2YXRlU2hhcmUuc2xpY2UoNjQpLFxuICAgIH07XG5cbiAgICAvLyBUT0RPKEJHLTQ3MTcwKTogdXNlIHRzcy5jcmVhdGVDb21iaW5lZEtleSBoZWxwZXIgd2hlbiBzaWduYXR1cmVzIGFyZSBzdXBwb3J0ZWRcbiAgICBjb25zdCB1c2VyQ29tYmluZWQgPSBNUEMua2V5Q29tYmluZSh1c2VyS2V5U2hhcmUudVNoYXJlLCBbYmFja3VwS2V5U2hhcmUueVNoYXJlc1sxXSwgYml0Z29Ub1VzZXJdKTtcbiAgICBjb25zdCBjb21tb25LZXljaGFpbiA9IHVzZXJDb21iaW5lZC5wU2hhcmUueSArIHVzZXJDb21iaW5lZC5wU2hhcmUuY2hhaW5jb2RlO1xuICAgIGlmIChjb21tb25LZXljaGFpbiAhPT0gYml0Z29LZXljaGFpbi5jb21tb25LZXljaGFpbikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdGYWlsZWQgdG8gY3JlYXRlIHVzZXIga2V5Y2hhaW4gLSBjb21tb25LZXljaGFpbnMgZG8gbm90IG1hdGNoLicpO1xuICAgIH1cblxuICAgIGNvbnN0IHVzZXJTaWduaW5nTWF0ZXJpYWw6IFNpZ25pbmdNYXRlcmlhbCA9IHtcbiAgICAgIHVTaGFyZTogdXNlcktleVNoYXJlLnVTaGFyZSxcbiAgICAgIGJpdGdvWVNoYXJlOiBiaXRnb1RvVXNlcixcbiAgICAgIGJhY2t1cFlTaGFyZTogYmFja3VwS2V5U2hhcmUueVNoYXJlc1sxXSxcbiAgICB9O1xuXG4gICAgY29uc3QgdXNlcktleWNoYWluUGFyYW1zOiBBZGRLZXljaGFpbk9wdGlvbnMgPSB7XG4gICAgICBzb3VyY2U6ICd1c2VyJyxcbiAgICAgIGtleVR5cGU6ICd0c3MnLFxuICAgICAgY29tbW9uS2V5Y2hhaW46IGJpdGdvS2V5Y2hhaW4uY29tbW9uS2V5Y2hhaW4sXG4gICAgICBvcmlnaW5hbFBhc3Njb2RlRW5jcnlwdGlvbkNvZGUsXG4gICAgfTtcbiAgICBpZiAocGFzc3BocmFzZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB1c2VyS2V5Y2hhaW5QYXJhbXMuZW5jcnlwdGVkUHJ2ID0gdGhpcy5iaXRnby5lbmNyeXB0KHtcbiAgICAgICAgaW5wdXQ6IEpTT04uc3RyaW5naWZ5KHVzZXJTaWduaW5nTWF0ZXJpYWwpLFxuICAgICAgICBwYXNzd29yZDogcGFzc3BocmFzZSxcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHJldHVybiBhd2FpdCB0aGlzLmJhc2VDb2luLmtleWNoYWlucygpLmFkZCh1c2VyS2V5Y2hhaW5QYXJhbXMpO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBLZXljaGFpbiBjb250YWluaW5nIHRoZSBCYWNrdXAgcGFydHkncyBUU1Mgc2lnbmluZyBtYXRlcmlhbHMuXG4gICAqIFdlIG5lZWQgdG8gaGF2ZSB0aGUgcGFzc3BocmFzZSBiZSBvcHRpb25hbCB0byBhbGxvdyBmb3IgdGhlIGNsaWVudCB0byBzdG9yZSB0aGVpciBiYWNrdXAga2V5IG9uIHRoZWlyIHByZW1pc2VzXG4gICAqXG4gICAqIEBwYXJhbSB1c2VyR3BnS2V5IC0gZXBoZW1lcmFsIEdQRyBrZXkgdG8gZW5jcnlwdCAvIGRlY3J5cHQgc2Vuc2l0dmUgZGF0YSBleGNoYW5nZWQgYmV0d2VlbiB1c2VyIGFuZCBzZXJ2ZXJcbiAgICogQHBhcmFtIHVzZXJLZXlTaGFyZSAtIFVzZXIncyBUU1MgS2V5c2hhcmVcbiAgICogQHBhcmFtIGJhY2t1cEdwZ0tleSAtIGVwaGVtZXJhbCBHUEcga2V5IHRvIGVuY3J5cHQgLyBkZWNyeXB0IHNlbnNpdHZlIGRhdGEgZXhjaGFuZ2VkIGJldHdlZW4gYmFja3VwIGFuZCBzZXJ2ZXJcbiAgICogQHBhcmFtIGJhY2t1cEtleVNoYXJlIC0gQmFja3VwJ3MgVFNTIEtleXNoYXJlXG4gICAqIEBwYXJhbSBiaXRnb0tleWNoYWluIC0gcHJldmlvdXNseSBjcmVhdGVkIEJpdEdvIGtleWNoYWluOyBtdXN0IGJlIGNvbXBhdGlibGUgd2l0aCB1c2VyIGFuZCBiYWNrdXAga2V5IHNoYXJlc1xuICAgKiBAcGFyYW0gW3Bhc3NwaHJhc2VdIC0gb3B0aW9uYWwgd2FsbGV0IHBhc3NwaHJhc2UgdXNlZCB0byBlbmNyeXB0IHVzZXIncyBzaWduaW5nIG1hdGVyaWFsc1xuICAgKi9cbiAgYXN5bmMgY3JlYXRlQmFja3VwS2V5Y2hhaW4oe1xuICAgIHVzZXJHcGdLZXksXG4gICAgYmFja3VwR3BnS2V5LFxuICAgIHVzZXJLZXlTaGFyZSxcbiAgICBiYWNrdXBLZXlTaGFyZSxcbiAgICBiaXRnb0tleWNoYWluLFxuICAgIHBhc3NwaHJhc2UsXG4gIH06IENyZWF0ZUVkZHNhS2V5Y2hhaW5QYXJhbXMpOiBQcm9taXNlPEtleWNoYWluPiB7XG4gICAgY29uc3QgTVBDID0gYXdhaXQgRWRkc2EuaW5pdGlhbGl6ZSgpO1xuICAgIGNvbnN0IGJpdGdvS2V5U2hhcmVzID0gYml0Z29LZXljaGFpbi5rZXlTaGFyZXM7XG4gICAgaWYgKCFiaXRnb0tleVNoYXJlcykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIGJpdGdvIGtleXNoYXJlcycpO1xuICAgIH1cblxuICAgIGNvbnN0IGJpdEdvVG9CYWNrdXBTaGFyZSA9IGJpdGdvS2V5U2hhcmVzLmZpbmQoKGtleVNoYXJlKSA9PiBrZXlTaGFyZS5mcm9tID09PSAnYml0Z28nICYmIGtleVNoYXJlLnRvID09PSAnYmFja3VwJyk7XG4gICAgaWYgKCFiaXRHb1RvQmFja3VwU2hhcmUpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignTWlzc2luZyBCaXRHbyB0byBVc2VyIGtleSBzaGFyZScpO1xuICAgIH1cblxuICAgIGNvbnN0IGJpdEdvVG9CYWNrdXBQcml2YXRlU2hhcmUgPSBhd2FpdCB0aGlzLmRlY3J5cHRQcml2YXRlU2hhcmUoYml0R29Ub0JhY2t1cFNoYXJlLnByaXZhdGVTaGFyZSwgYmFja3VwR3BnS2V5KTtcblxuICAgIGF3YWl0IHRoaXMudmVyaWZ5V2FsbGV0U2lnbmF0dXJlcyhcbiAgICAgIHVzZXJHcGdLZXkucHVibGljS2V5LFxuICAgICAgYmFja3VwR3BnS2V5LnB1YmxpY0tleSxcbiAgICAgIGJpdGdvS2V5Y2hhaW4sXG4gICAgICBiaXRHb1RvQmFja3VwUHJpdmF0ZVNoYXJlLFxuICAgICAgMlxuICAgICk7XG5cbiAgICBjb25zdCBiaXRnb1RvQmFja3VwOiBZU2hhcmUgPSB7XG4gICAgICBpOiAyLFxuICAgICAgajogMyxcbiAgICAgIHk6IGJpdEdvVG9CYWNrdXBTaGFyZS5wdWJsaWNTaGFyZS5zbGljZSgwLCA2NCksXG4gICAgICB2OiBiaXRHb1RvQmFja3VwU2hhcmUudnNzUHJvb2YsXG4gICAgICB1OiBiaXRHb1RvQmFja3VwUHJpdmF0ZVNoYXJlLnNsaWNlKDAsIDY0KSxcbiAgICAgIGNoYWluY29kZTogYml0R29Ub0JhY2t1cFByaXZhdGVTaGFyZS5zbGljZSg2NCksXG4gICAgfTtcblxuICAgIC8vIFRPRE8oQkctNDcxNzApOiB1c2UgdHNzLmNyZWF0ZUNvbWJpbmVkS2V5IGhlbHBlciB3aGVuIHNpZ25hdHVyZXMgYXJlIHN1cHBvcnRlZFxuICAgIGNvbnN0IGJhY2t1cENvbWJpbmVkID0gTVBDLmtleUNvbWJpbmUoYmFja3VwS2V5U2hhcmUudVNoYXJlLCBbdXNlcktleVNoYXJlLnlTaGFyZXNbMl0sIGJpdGdvVG9CYWNrdXBdKTtcbiAgICBjb25zdCBjb21tb25LZXljaGFpbiA9IGJhY2t1cENvbWJpbmVkLnBTaGFyZS55ICsgYmFja3VwQ29tYmluZWQucFNoYXJlLmNoYWluY29kZTtcbiAgICBpZiAoY29tbW9uS2V5Y2hhaW4gIT09IGJpdGdvS2V5Y2hhaW4uY29tbW9uS2V5Y2hhaW4pIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignRmFpbGVkIHRvIGNyZWF0ZSBiYWNrdXAga2V5Y2hhaW4gLSBjb21tb25LZXljaGFpbnMgZG8gbm90IG1hdGNoLicpO1xuICAgIH1cblxuICAgIGNvbnN0IGJhY2t1cFNpZ25pbmdNYXRlcmlhbDogU2lnbmluZ01hdGVyaWFsID0ge1xuICAgICAgdVNoYXJlOiBiYWNrdXBLZXlTaGFyZS51U2hhcmUsXG4gICAgICBiaXRnb1lTaGFyZTogYml0Z29Ub0JhY2t1cCxcbiAgICAgIHVzZXJZU2hhcmU6IHVzZXJLZXlTaGFyZS55U2hhcmVzWzJdLFxuICAgIH07XG4gICAgY29uc3QgcHJ2ID0gSlNPTi5zdHJpbmdpZnkoYmFja3VwU2lnbmluZ01hdGVyaWFsKTtcblxuICAgIGNvbnN0IHBhcmFtczogQ3JlYXRlQmFja3VwT3B0aW9ucyA9IHtcbiAgICAgIHNvdXJjZTogJ2JhY2t1cCcsXG4gICAgICBrZXlUeXBlOiAndHNzJyxcbiAgICAgIGNvbW1vbktleWNoYWluOiBiaXRnb0tleWNoYWluLmNvbW1vbktleWNoYWluLFxuICAgICAgcHJ2OiBwcnYsXG4gICAgfTtcblxuICAgIGlmIChwYXNzcGhyYXNlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHBhcmFtcy5lbmNyeXB0ZWRQcnYgPSB0aGlzLmJpdGdvLmVuY3J5cHQoeyBpbnB1dDogcHJ2LCBwYXNzd29yZDogcGFzc3BocmFzZSB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gYXdhaXQgdGhpcy5iYXNlQ29pbi5rZXljaGFpbnMoKS5jcmVhdGVCYWNrdXAocGFyYW1zKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgS2V5Y2hhaW4gY29udGFpbmluZyBCaXRHbydzIFRTUyBzaWduaW5nIG1hdGVyaWFscy5cbiAgICpcbiAgICogQHBhcmFtIHVzZXJHcGdLZXkgLSBlcGhlbWVyYWwgR1BHIGtleSB0byBlbmNyeXB0IC8gZGVjcnlwdCBzZW5zaXR2ZSBkYXRhIGV4Y2hhbmdlZCBiZXR3ZWVuIHVzZXIgYW5kIHNlcnZlclxuICAgKiBAcGFyYW0gdXNlcktleVNoYXJlIC0gdXNlcidzIFRTUyBrZXkgc2hhcmVcbiAgICogQHBhcmFtIGJhY2t1cEtleVNoYXJlIC0gYmFja3VwJ3MgVFNTIGtleSBzaGFyZVxuICAgKiBAcGFyYW0gZW50ZXJwcmlzZSAtIGVudGVycHJpc2UgYXNzb2NpYXRlZCB0byB0aGUgd2FsbGV0XG4gICAqL1xuICBhc3luYyBjcmVhdGVCaXRnb0tleWNoYWluKHtcbiAgICB1c2VyR3BnS2V5LFxuICAgIGJhY2t1cEdwZ0tleSxcbiAgICB1c2VyS2V5U2hhcmUsXG4gICAgYmFja3VwS2V5U2hhcmUsXG4gICAgZW50ZXJwcmlzZSxcbiAgfTogQ3JlYXRlRWRkc2FCaXRHb0tleWNoYWluUGFyYW1zKTogUHJvbWlzZTxLZXljaGFpbj4ge1xuICAgIC8vIFRPRE8oQkctNDcxNzApOiB1c2UgdHNzLmVuY3J5cHRZU2hhcmUgaGVscGVyIHdoZW4gc2lnbmF0dXJlcyBhcmUgc3VwcG9ydGVkXG4gICAgY29uc3QgdXNlclRvQml0Z29QdWJsaWNTaGFyZSA9IEJ1ZmZlci5jb25jYXQoW1xuICAgICAgQnVmZmVyLmZyb20odXNlcktleVNoYXJlLnVTaGFyZS55LCAnaGV4JyksXG4gICAgICBCdWZmZXIuZnJvbSh1c2VyS2V5U2hhcmUudVNoYXJlLmNoYWluY29kZSwgJ2hleCcpLFxuICAgIF0pLnRvU3RyaW5nKCdoZXgnKTtcbiAgICBjb25zdCB1c2VyVG9CaXRnb1ByaXZhdGVTaGFyZSA9IEJ1ZmZlci5jb25jYXQoW1xuICAgICAgQnVmZmVyLmZyb20odXNlcktleVNoYXJlLnlTaGFyZXNbM10udSwgJ2hleCcpLFxuICAgICAgQnVmZmVyLmZyb20odXNlcktleVNoYXJlLnlTaGFyZXNbM10uY2hhaW5jb2RlLCAnaGV4JyksXG4gICAgXSkudG9TdHJpbmcoJ2hleCcpO1xuICAgIGNvbnN0IHVzZXJUb0JpdGdvS2V5U2hhcmUgPSB7XG4gICAgICBwdWJsaWNTaGFyZTogdXNlclRvQml0Z29QdWJsaWNTaGFyZSxcbiAgICAgIHByaXZhdGVTaGFyZTogdXNlclRvQml0Z29Qcml2YXRlU2hhcmUsXG4gICAgICBwcml2YXRlU2hhcmVQcm9vZjogYXdhaXQgY3JlYXRlU2hhcmVQcm9vZih1c2VyR3BnS2V5LnByaXZhdGVLZXksIHVzZXJUb0JpdGdvUHJpdmF0ZVNoYXJlLnNsaWNlKDAsIDY0KSwgJ2VkZHNhJyksXG4gICAgICB2c3NQcm9vZjogdXNlcktleVNoYXJlLnlTaGFyZXNbM10udixcbiAgICB9O1xuXG4gICAgY29uc3QgYmFja3VwVG9CaXRnb1B1YmxpY1NoYXJlID0gQnVmZmVyLmNvbmNhdChbXG4gICAgICBCdWZmZXIuZnJvbShiYWNrdXBLZXlTaGFyZS51U2hhcmUueSwgJ2hleCcpLFxuICAgICAgQnVmZmVyLmZyb20oYmFja3VwS2V5U2hhcmUudVNoYXJlLmNoYWluY29kZSwgJ2hleCcpLFxuICAgIF0pLnRvU3RyaW5nKCdoZXgnKTtcbiAgICBjb25zdCBiYWNrdXBUb0JpdGdvUHJpdmF0ZVNoYXJlID0gQnVmZmVyLmNvbmNhdChbXG4gICAgICBCdWZmZXIuZnJvbShiYWNrdXBLZXlTaGFyZS55U2hhcmVzWzNdLnUsICdoZXgnKSxcbiAgICAgIEJ1ZmZlci5mcm9tKGJhY2t1cEtleVNoYXJlLnlTaGFyZXNbM10uY2hhaW5jb2RlLCAnaGV4JyksXG4gICAgXSkudG9TdHJpbmcoJ2hleCcpO1xuICAgIGNvbnN0IGJhY2t1cFRvQml0Z29LZXlTaGFyZSA9IHtcbiAgICAgIHB1YmxpY1NoYXJlOiBiYWNrdXBUb0JpdGdvUHVibGljU2hhcmUsXG4gICAgICBwcml2YXRlU2hhcmU6IGJhY2t1cFRvQml0Z29Qcml2YXRlU2hhcmUsXG4gICAgICBwcml2YXRlU2hhcmVQcm9vZjogYXdhaXQgY3JlYXRlU2hhcmVQcm9vZihcbiAgICAgICAgYmFja3VwR3BnS2V5LnByaXZhdGVLZXksXG4gICAgICAgIGJhY2t1cFRvQml0Z29Qcml2YXRlU2hhcmUuc2xpY2UoMCwgNjQpLFxuICAgICAgICAnZWRkc2EnXG4gICAgICApLFxuICAgICAgdnNzUHJvb2Y6IGJhY2t1cEtleVNoYXJlLnlTaGFyZXNbM10udixcbiAgICB9O1xuXG4gICAgcmV0dXJuIGF3YWl0IHRoaXMuY3JlYXRlQml0Z29LZXljaGFpbkluV1AoXG4gICAgICB1c2VyR3BnS2V5LFxuICAgICAgYmFja3VwR3BnS2V5LFxuICAgICAgdXNlclRvQml0Z29LZXlTaGFyZSxcbiAgICAgIGJhY2t1cFRvQml0Z29LZXlTaGFyZSxcbiAgICAgICd0c3MnLFxuICAgICAgZW50ZXJwcmlzZVxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlcyBVc2VyLCBCYWNrdXAsIGFuZCBCaXRHbyBUU1MgS2V5Y2hhaW5zLlxuICAgKlxuICAgKiBAcGFyYW0gcGFyYW1zLnBhc3NwaHJhc2UgLSBwYXNzcGhyYXNlIHVzZWQgdG8gZW5jcnlwdCBzaWduaW5nIG1hdGVyaWFscyBjcmVhdGVkIGZvciBVc2VyIGFuZCBCYWNrdXBcbiAgICovXG4gIGFzeW5jIGNyZWF0ZUtleWNoYWlucyhwYXJhbXM6IHtcbiAgICBwYXNzcGhyYXNlPzogc3RyaW5nO1xuICAgIGVudGVycHJpc2U/OiBzdHJpbmc7XG4gICAgb3JpZ2luYWxQYXNzY29kZUVuY3J5cHRpb25Db2RlPzogc3RyaW5nO1xuICB9KTogUHJvbWlzZTxLZXljaGFpbnNUcmlwbGV0PiB7XG4gICAgY29uc3QgTVBDID0gYXdhaXQgRWRkc2EuaW5pdGlhbGl6ZSgpO1xuICAgIGNvbnN0IG0gPSAyO1xuICAgIGNvbnN0IG4gPSAzO1xuXG4gICAgY29uc3QgdXNlcktleVNoYXJlID0gTVBDLmtleVNoYXJlKDEsIG0sIG4pO1xuICAgIGNvbnN0IGJhY2t1cEtleVNoYXJlID0gTVBDLmtleVNoYXJlKDIsIG0sIG4pO1xuXG4gICAgY29uc3QgdXNlckdwZ0tleSA9IGF3YWl0IGdlbmVyYXRlR1BHS2V5UGFpcignc2VjcDI1NmsxJyk7XG4gICAgY29uc3QgYmFja3VwR3BnS2V5ID0gYXdhaXQgZ2VuZXJhdGVHUEdLZXlQYWlyKCdzZWNwMjU2azEnKTtcblxuICAgIGNvbnN0IGJpdGdvS2V5Y2hhaW4gPSBhd2FpdCB0aGlzLmNyZWF0ZUJpdGdvS2V5Y2hhaW4oe1xuICAgICAgdXNlckdwZ0tleSxcbiAgICAgIHVzZXJLZXlTaGFyZSxcbiAgICAgIGJhY2t1cEdwZ0tleSxcbiAgICAgIGJhY2t1cEtleVNoYXJlLFxuICAgICAgZW50ZXJwcmlzZTogcGFyYW1zLmVudGVycHJpc2UsXG4gICAgfSk7XG4gICAgY29uc3QgdXNlcktleWNoYWluUHJvbWlzZSA9IHRoaXMuY3JlYXRlVXNlcktleWNoYWluKHtcbiAgICAgIHVzZXJHcGdLZXksXG4gICAgICB1c2VyS2V5U2hhcmUsXG4gICAgICBiYWNrdXBHcGdLZXksXG4gICAgICBiYWNrdXBLZXlTaGFyZSxcbiAgICAgIGJpdGdvS2V5Y2hhaW4sXG4gICAgICBwYXNzcGhyYXNlOiBwYXJhbXMucGFzc3BocmFzZSxcbiAgICAgIG9yaWdpbmFsUGFzc2NvZGVFbmNyeXB0aW9uQ29kZTogcGFyYW1zLm9yaWdpbmFsUGFzc2NvZGVFbmNyeXB0aW9uQ29kZSxcbiAgICB9KTtcbiAgICBjb25zdCBiYWNrdXBLZXljaGFpblByb21pc2UgPSB0aGlzLmNyZWF0ZUJhY2t1cEtleWNoYWluKHtcbiAgICAgIHVzZXJHcGdLZXksXG4gICAgICB1c2VyS2V5U2hhcmUsXG4gICAgICBiYWNrdXBHcGdLZXksXG4gICAgICBiYWNrdXBLZXlTaGFyZSxcbiAgICAgIGJpdGdvS2V5Y2hhaW4sXG4gICAgICBwYXNzcGhyYXNlOiBwYXJhbXMucGFzc3BocmFzZSxcbiAgICB9KTtcbiAgICBjb25zdCBbdXNlcktleWNoYWluLCBiYWNrdXBLZXljaGFpbl0gPSBhd2FpdCBQcm9taXNlLmFsbChbdXNlcktleWNoYWluUHJvbWlzZSwgYmFja3VwS2V5Y2hhaW5Qcm9taXNlXSk7XG5cbiAgICAvLyBjcmVhdGUgd2FsbGV0XG4gICAgY29uc3Qga2V5Y2hhaW5zID0ge1xuICAgICAgdXNlcktleWNoYWluLFxuICAgICAgYmFja3VwS2V5Y2hhaW4sXG4gICAgICBiaXRnb0tleWNoYWluLFxuICAgIH07XG5cbiAgICByZXR1cm4ga2V5Y2hhaW5zO1xuICB9XG5cbiAgYXN5bmMgY3JlYXRlQ29tbWl0bWVudFNoYXJlRnJvbVR4UmVxdWVzdChwYXJhbXM6IHtcbiAgICB0eFJlcXVlc3Q6IFR4UmVxdWVzdDtcbiAgICBwcnY6IHN0cmluZztcbiAgICB3YWxsZXRQYXNzcGhyYXNlOiBzdHJpbmc7XG4gIH0pOiBQcm9taXNlPHtcbiAgICB1c2VyVG9CaXRnb0NvbW1pdG1lbnQ6IENvbW1pdG1lbnRTaGFyZVJlY29yZDtcbiAgICBlbmNyeXB0ZWRTaWduZXJTaGFyZTogRW5jcnlwdGVkU2lnbmVyU2hhcmVSZWNvcmQ7XG4gICAgZW5jcnlwdGVkVXNlclRvQml0Z29SU2hhcmU6IEVuY3J5cHRlZFNpZ25lclNoYXJlUmVjb3JkO1xuICB9PiB7XG4gICAgY29uc3QgYml0Z29JbmRleCA9IFNoYXJlS2V5UG9zaXRpb24uQklUR087XG4gICAgY29uc3QgeyB0eFJlcXVlc3QsIHBydiB9ID0gcGFyYW1zO1xuICAgIGNvbnN0IHR4UmVxdWVzdFJlc29sdmVkOiBUeFJlcXVlc3QgPSB0eFJlcXVlc3Q7XG5cbiAgICBjb25zdCBoZFRyZWUgPSBhd2FpdCBFZDI1NTE5QmlwMzJIZFRyZWUuaW5pdGlhbGl6ZSgpO1xuICAgIGNvbnN0IE1QQyA9IGF3YWl0IEVkZHNhLmluaXRpYWxpemUoaGRUcmVlKTtcblxuICAgIGNvbnN0IHVzZXJTaWduaW5nTWF0ZXJpYWw6IFNpZ25pbmdNYXRlcmlhbCA9IEpTT04ucGFyc2UocHJ2KTtcbiAgICBpZiAoIXVzZXJTaWduaW5nTWF0ZXJpYWwuYmFja3VwWVNoYXJlKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgdXNlciBrZXkgLSBtaXNzaW5nIGJhY2t1cFlTaGFyZScpO1xuICAgIH1cblxuICAgIGFzc2VydCh0eFJlcXVlc3RSZXNvbHZlZC50cmFuc2FjdGlvbnMgfHwgdHhSZXF1ZXN0UmVzb2x2ZWQudW5zaWduZWRUeHMsICdVbmFibGUgdG8gZmluZCB0cmFuc2FjdGlvbnMgaW4gdHhSZXF1ZXN0Jyk7XG4gICAgY29uc3QgdW5zaWduZWRUeCA9XG4gICAgICB0eFJlcXVlc3RSZXNvbHZlZC5hcGlWZXJzaW9uID09PSAnZnVsbCdcbiAgICAgICAgPyB0eFJlcXVlc3RSZXNvbHZlZC50cmFuc2FjdGlvbnMhWzBdLnVuc2lnbmVkVHhcbiAgICAgICAgOiB0eFJlcXVlc3RSZXNvbHZlZC51bnNpZ25lZFR4c1swXTtcblxuICAgIGNvbnN0IHNpZ25pbmdLZXkgPSBNUEMua2V5RGVyaXZlKFxuICAgICAgdXNlclNpZ25pbmdNYXRlcmlhbC51U2hhcmUsXG4gICAgICBbdXNlclNpZ25pbmdNYXRlcmlhbC5iaXRnb1lTaGFyZSwgdXNlclNpZ25pbmdNYXRlcmlhbC5iYWNrdXBZU2hhcmVdLFxuICAgICAgdW5zaWduZWRUeC5kZXJpdmF0aW9uUGF0aFxuICAgICk7XG5cbiAgICBjb25zdCBzaWduYWJsZVBheWxvYWQgPSBCdWZmZXIuZnJvbSh1bnNpZ25lZFR4LnNpZ25hYmxlSGV4LCAnaGV4Jyk7XG5cbiAgICBjb25zdCB1c2VyU2lnblNoYXJlID0gYXdhaXQgY3JlYXRlVXNlclNpZ25TaGFyZShzaWduYWJsZVBheWxvYWQsIHNpZ25pbmdLZXkucFNoYXJlKTtcbiAgICBjb25zdCBjb21taXRtZW50ID0gdXNlclNpZ25TaGFyZS5yU2hhcmVzW2JpdGdvSW5kZXhdPy5jb21taXRtZW50O1xuICAgIGFzc2VydChjb21taXRtZW50LCAnVW5hYmxlIHRvIGZpbmQgY29tbWl0bWVudCBpbiB1c2VyU2lnblNoYXJlJyk7XG4gICAgY29uc3QgdXNlclRvQml0Z29Db21taXRtZW50ID0gdGhpcy5jcmVhdGVVc2VyVG9CaXRnb0NvbW1pdG1lbnRTaGFyZShjb21taXRtZW50KTtcblxuICAgIGNvbnN0IHNpZ25lclNoYXJlID0gc2lnbmluZ0tleS55U2hhcmVzW2JpdGdvSW5kZXhdLnUgKyBzaWduaW5nS2V5LnlTaGFyZXNbYml0Z29JbmRleF0uY2hhaW5jb2RlO1xuICAgIGNvbnN0IGJpdGdvR3BnS2V5ID0gKGF3YWl0IGdldEJpdGdvR3BnUHViS2V5KHRoaXMuYml0Z28pKS5tcGNWMTtcbiAgICBjb25zdCB1c2VyVG9CaXRnb0VuY3J5cHRlZFNpZ25lclNoYXJlID0gYXdhaXQgZW5jcnlwdFRleHQoc2lnbmVyU2hhcmUsIGJpdGdvR3BnS2V5KTtcblxuICAgIGNvbnN0IGVuY3J5cHRlZFNpZ25lclNoYXJlID0gdGhpcy5jcmVhdGVVc2VyVG9CaXRnb0VuY3J5cHRlZFNpZ25lclNoYXJlKHVzZXJUb0JpdGdvRW5jcnlwdGVkU2lnbmVyU2hhcmUpO1xuICAgIGNvbnN0IHN0cmluZ2lmaWVkUlNoYXJlID0gSlNPTi5zdHJpbmdpZnkodXNlclNpZ25TaGFyZSk7XG4gICAgY29uc3QgZW5jcnlwdGVkUlNoYXJlID0gdGhpcy5iaXRnby5lbmNyeXB0KHsgaW5wdXQ6IHN0cmluZ2lmaWVkUlNoYXJlLCBwYXNzd29yZDogcGFyYW1zLndhbGxldFBhc3NwaHJhc2UgfSk7XG4gICAgY29uc3QgZW5jcnlwdGVkVXNlclRvQml0Z29SU2hhcmUgPSB0aGlzLmNyZWF0ZVVzZXJUb0JpdGdvRW5jcnlwdGVkUlNoYXJlKGVuY3J5cHRlZFJTaGFyZSk7XG5cbiAgICByZXR1cm4geyB1c2VyVG9CaXRnb0NvbW1pdG1lbnQsIGVuY3J5cHRlZFNpZ25lclNoYXJlLCBlbmNyeXB0ZWRVc2VyVG9CaXRnb1JTaGFyZSB9O1xuICB9XG5cbiAgYXN5bmMgY3JlYXRlUlNoYXJlRnJvbVR4UmVxdWVzdChwYXJhbXM6IHtcbiAgICB0eFJlcXVlc3Q6IFR4UmVxdWVzdDtcbiAgICB3YWxsZXRQYXNzcGhyYXNlOiBzdHJpbmc7XG4gICAgZW5jcnlwdGVkVXNlclRvQml0Z29SU2hhcmU6IEVuY3J5cHRlZFNpZ25lclNoYXJlUmVjb3JkO1xuICB9KTogUHJvbWlzZTx7IHJTaGFyZTogU2lnblNoYXJlIH0+IHtcbiAgICBjb25zdCB7IHdhbGxldFBhc3NwaHJhc2UsIGVuY3J5cHRlZFVzZXJUb0JpdGdvUlNoYXJlIH0gPSBwYXJhbXM7XG5cbiAgICBjb25zdCBkZWNyeXB0ZWRSU2hhcmUgPSB0aGlzLmJpdGdvLmRlY3J5cHQoe1xuICAgICAgaW5wdXQ6IGVuY3J5cHRlZFVzZXJUb0JpdGdvUlNoYXJlLnNoYXJlLFxuICAgICAgcGFzc3dvcmQ6IHdhbGxldFBhc3NwaHJhc2UsXG4gICAgfSk7XG4gICAgY29uc3QgclNoYXJlID0gSlNPTi5wYXJzZShkZWNyeXB0ZWRSU2hhcmUpO1xuICAgIGFzc2VydChyU2hhcmUueFNoYXJlLCAnVW5hYmxlIHRvIGZpbmQgeFNoYXJlIGluIGRlY3J5cHRlZFJTaGFyZScpO1xuICAgIGFzc2VydChyU2hhcmUuclNoYXJlcywgJ1VuYWJsZSB0byBmaW5kIHJTaGFyZXMgaW4gZGVjcnlwdGVkUlNoYXJlJyk7XG5cbiAgICByZXR1cm4geyByU2hhcmUgfTtcbiAgfVxuXG4gIGFzeW5jIGNyZWF0ZUdTaGFyZUZyb21UeFJlcXVlc3QocGFyYW1zOiB7XG4gICAgdHhSZXF1ZXN0OiBzdHJpbmcgfCBUeFJlcXVlc3Q7XG4gICAgcHJ2OiBzdHJpbmc7XG4gICAgYml0Z29Ub1VzZXJSU2hhcmU6IFNpZ25hdHVyZVNoYXJlUmVjb3JkO1xuICAgIHVzZXJUb0JpdGdvUlNoYXJlOiBTaWduU2hhcmU7XG4gICAgYml0Z29Ub1VzZXJDb21taXRtZW50OiBDb21taXRtZW50U2hhcmVSZWNvcmQ7XG4gIH0pOiBQcm9taXNlPEdTaGFyZT4ge1xuICAgIGxldCB0eFJlcXVlc3RSZXNvbHZlZDogVHhSZXF1ZXN0O1xuXG4gICAgY29uc3QgeyB0eFJlcXVlc3QsIHBydiwgYml0Z29Ub1VzZXJDb21taXRtZW50LCBiaXRnb1RvVXNlclJTaGFyZSwgdXNlclRvQml0Z29SU2hhcmUgfSA9IHBhcmFtcztcblxuICAgIGlmICh0eXBlb2YgdHhSZXF1ZXN0ID09PSAnc3RyaW5nJykge1xuICAgICAgdHhSZXF1ZXN0UmVzb2x2ZWQgPSBhd2FpdCBnZXRUeFJlcXVlc3QodGhpcy5iaXRnbywgdGhpcy53YWxsZXQuaWQoKSwgdHhSZXF1ZXN0KTtcbiAgICB9IGVsc2Uge1xuICAgICAgdHhSZXF1ZXN0UmVzb2x2ZWQgPSB0eFJlcXVlc3Q7XG4gICAgfVxuXG4gICAgY29uc3QgdXNlclNpZ25pbmdNYXRlcmlhbDogU2lnbmluZ01hdGVyaWFsID0gSlNPTi5wYXJzZShwcnYpO1xuICAgIGlmICghdXNlclNpZ25pbmdNYXRlcmlhbC5iYWNrdXBZU2hhcmUpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCB1c2VyIGtleSAtIG1pc3NpbmcgYmFja3VwWVNoYXJlJyk7XG4gICAgfVxuXG4gICAgYXNzZXJ0KHR4UmVxdWVzdFJlc29sdmVkLnRyYW5zYWN0aW9ucyB8fCB0eFJlcXVlc3RSZXNvbHZlZC51bnNpZ25lZFR4cywgJ1VuYWJsZSB0byBmaW5kIHRyYW5zYWN0aW9ucyBpbiB0eFJlcXVlc3QnKTtcbiAgICBjb25zdCB1bnNpZ25lZFR4ID1cbiAgICAgIHR4UmVxdWVzdFJlc29sdmVkLmFwaVZlcnNpb24gPT09ICdmdWxsJ1xuICAgICAgICA/IHR4UmVxdWVzdFJlc29sdmVkLnRyYW5zYWN0aW9ucyFbMF0udW5zaWduZWRUeFxuICAgICAgICA6IHR4UmVxdWVzdFJlc29sdmVkLnVuc2lnbmVkVHhzWzBdO1xuXG4gICAgY29uc3Qgc2lnbmFibGVQYXlsb2FkID0gQnVmZmVyLmZyb20odW5zaWduZWRUeC5zaWduYWJsZUhleCwgJ2hleCcpO1xuXG4gICAgY29uc3QgdXNlclRvQml0R29HU2hhcmUgPSBhd2FpdCBjcmVhdGVVc2VyVG9CaXRHb0dTaGFyZShcbiAgICAgIHVzZXJUb0JpdGdvUlNoYXJlLFxuICAgICAgYml0Z29Ub1VzZXJSU2hhcmUsXG4gICAgICB1c2VyU2lnbmluZ01hdGVyaWFsLmJhY2t1cFlTaGFyZSxcbiAgICAgIHVzZXJTaWduaW5nTWF0ZXJpYWwuYml0Z29ZU2hhcmUsXG4gICAgICBzaWduYWJsZVBheWxvYWQsXG4gICAgICBiaXRnb1RvVXNlckNvbW1pdG1lbnRcbiAgICApO1xuICAgIHJldHVybiB1c2VyVG9CaXRHb0dTaGFyZTtcbiAgfVxuXG4gIGFzeW5jIHNpZ25FZGRzYVRzc1VzaW5nRXh0ZXJuYWxTaWduZXIoXG4gICAgdHhSZXF1ZXN0OiBzdHJpbmcgfCBUeFJlcXVlc3QsXG4gICAgZXh0ZXJuYWxTaWduZXJDb21taXRtZW50R2VuZXJhdG9yOiBDdXN0b21Db21taXRtZW50R2VuZXJhdGluZ0Z1bmN0aW9uLFxuICAgIGV4dGVybmFsU2lnbmVyUlNoYXJlR2VuZXJhdG9yOiBDdXN0b21SU2hhcmVHZW5lcmF0aW5nRnVuY3Rpb24sXG4gICAgZXh0ZXJuYWxTaWduZXJHU2hhcmVHZW5lcmF0b3I6IEN1c3RvbUdTaGFyZUdlbmVyYXRpbmdGdW5jdGlvblxuICApOiBQcm9taXNlPFR4UmVxdWVzdD4ge1xuICAgIGxldCB0eFJlcXVlc3RSZXNvbHZlZDogVHhSZXF1ZXN0O1xuICAgIGxldCB0eFJlcXVlc3RJZDogc3RyaW5nO1xuICAgIGlmICh0eXBlb2YgdHhSZXF1ZXN0ID09PSAnc3RyaW5nJykge1xuICAgICAgdHhSZXF1ZXN0UmVzb2x2ZWQgPSBhd2FpdCBnZXRUeFJlcXVlc3QodGhpcy5iaXRnbywgdGhpcy53YWxsZXQuaWQoKSwgdHhSZXF1ZXN0KTtcbiAgICAgIHR4UmVxdWVzdElkID0gdHhSZXF1ZXN0UmVzb2x2ZWQudHhSZXF1ZXN0SWQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIHR4UmVxdWVzdFJlc29sdmVkID0gdHhSZXF1ZXN0O1xuICAgICAgdHhSZXF1ZXN0SWQgPSB0eFJlcXVlc3QudHhSZXF1ZXN0SWQ7XG4gICAgfVxuXG4gICAgY29uc3QgeyBhcGlWZXJzaW9uIH0gPSB0eFJlcXVlc3RSZXNvbHZlZDtcblxuICAgIGNvbnN0IHsgdXNlclRvQml0Z29Db21taXRtZW50LCBlbmNyeXB0ZWRTaWduZXJTaGFyZSwgZW5jcnlwdGVkVXNlclRvQml0Z29SU2hhcmUgfSA9XG4gICAgICBhd2FpdCBleHRlcm5hbFNpZ25lckNvbW1pdG1lbnRHZW5lcmF0b3IoeyB0eFJlcXVlc3Q6IHR4UmVxdWVzdFJlc29sdmVkIH0pO1xuXG4gICAgY29uc3QgeyBjb21taXRtZW50U2hhcmU6IGJpdGdvVG9Vc2VyQ29tbWl0bWVudCB9ID0gYXdhaXQgZXhjaGFuZ2VFZGRzYUNvbW1pdG1lbnRzKFxuICAgICAgdGhpcy5iaXRnbyxcbiAgICAgIHRoaXMud2FsbGV0LmlkKCksXG4gICAgICB0eFJlcXVlc3RJZCxcbiAgICAgIHVzZXJUb0JpdGdvQ29tbWl0bWVudCxcbiAgICAgIGVuY3J5cHRlZFNpZ25lclNoYXJlLFxuICAgICAgYXBpVmVyc2lvblxuICAgICk7XG5cbiAgICBjb25zdCB7IHJTaGFyZSB9ID0gYXdhaXQgZXh0ZXJuYWxTaWduZXJSU2hhcmVHZW5lcmF0b3Ioe1xuICAgICAgdHhSZXF1ZXN0OiB0eFJlcXVlc3RSZXNvbHZlZCxcbiAgICAgIGVuY3J5cHRlZFVzZXJUb0JpdGdvUlNoYXJlLFxuICAgIH0pO1xuXG4gICAgYXdhaXQgb2ZmZXJVc2VyVG9CaXRnb1JTaGFyZShcbiAgICAgIHRoaXMuYml0Z28sXG4gICAgICB0aGlzLndhbGxldC5pZCgpLFxuICAgICAgdHhSZXF1ZXN0SWQsXG4gICAgICByU2hhcmUsXG4gICAgICBlbmNyeXB0ZWRTaWduZXJTaGFyZS5zaGFyZSxcbiAgICAgIGFwaVZlcnNpb25cbiAgICApO1xuICAgIGNvbnN0IGJpdGdvVG9Vc2VyUlNoYXJlID0gYXdhaXQgZ2V0Qml0Z29Ub1VzZXJSU2hhcmUodGhpcy5iaXRnbywgdGhpcy53YWxsZXQuaWQoKSwgdHhSZXF1ZXN0SWQpO1xuICAgIGNvbnN0IGdTaWduU2hhcmVUcmFuc2FjdGlvblBhcmFtcyA9IHtcbiAgICAgIHR4UmVxdWVzdDogdHhSZXF1ZXN0UmVzb2x2ZWQsXG4gICAgICBiaXRnb1RvVXNlclJTaGFyZTogYml0Z29Ub1VzZXJSU2hhcmUsXG4gICAgICB1c2VyVG9CaXRnb1JTaGFyZTogclNoYXJlLFxuICAgICAgYml0Z29Ub1VzZXJDb21taXRtZW50LFxuICAgIH07XG4gICAgY29uc3QgZ1NoYXJlID0gYXdhaXQgZXh0ZXJuYWxTaWduZXJHU2hhcmVHZW5lcmF0b3IoZ1NpZ25TaGFyZVRyYW5zYWN0aW9uUGFyYW1zKTtcbiAgICBhd2FpdCBzZW5kVXNlclRvQml0Z29HU2hhcmUodGhpcy5iaXRnbywgdGhpcy53YWxsZXQuaWQoKSwgdHhSZXF1ZXN0SWQsIGdTaGFyZSwgYXBpVmVyc2lvbik7XG4gICAgcmV0dXJuIGF3YWl0IGdldFR4UmVxdWVzdCh0aGlzLmJpdGdvLCB0aGlzLndhbGxldC5pZCgpLCB0eFJlcXVlc3RJZCk7XG4gIH1cblxuICAvKipcbiAgICogU2lnbnMgdGhlIHRyYW5zYWN0aW9uIGFzc29jaWF0ZWQgdG8gdGhlIHRyYW5zYWN0aW9uIHJlcXVlc3QuXG4gICAqXG4gICAqIEBwYXJhbSB0eFJlcXVlc3QgLSB0cmFuc2FjdGlvbiByZXF1ZXN0IG9iamVjdCBvciBpZFxuICAgKiBAcGFyYW0gcHJ2IC0gZGVjcnlwdGVkIHByaXZhdGUga2V5XG4gICAqIEBwYXJhbSByZXFJZCAtIHJlcXVlc3QgaWRcbiAgICogQHJldHVybnMge1Byb21pc2U8VHhSZXF1ZXN0Pn0gZnVsbHkgc2lnbmVkIFR4UmVxdWVzdCBvYmplY3RcbiAgICovXG4gIGFzeW5jIHNpZ25UeFJlcXVlc3QocGFyYW1zOiBUU1NQYXJhbXMpOiBQcm9taXNlPFR4UmVxdWVzdD4ge1xuICAgIHRoaXMuYml0Z28uc2V0UmVxdWVzdFRyYWNlcihwYXJhbXMucmVxSWQpO1xuICAgIGxldCB0eFJlcXVlc3RSZXNvbHZlZDogVHhSZXF1ZXN0O1xuICAgIGxldCB0eFJlcXVlc3RJZDogc3RyaW5nO1xuXG4gICAgY29uc3QgeyB0eFJlcXVlc3QsIHBydiB9ID0gcGFyYW1zO1xuXG4gICAgaWYgKHR5cGVvZiB0eFJlcXVlc3QgPT09ICdzdHJpbmcnKSB7XG4gICAgICB0eFJlcXVlc3RSZXNvbHZlZCA9IGF3YWl0IGdldFR4UmVxdWVzdCh0aGlzLmJpdGdvLCB0aGlzLndhbGxldC5pZCgpLCB0eFJlcXVlc3QpO1xuICAgICAgdHhSZXF1ZXN0SWQgPSB0eFJlcXVlc3RSZXNvbHZlZC50eFJlcXVlc3RJZDtcbiAgICB9IGVsc2Uge1xuICAgICAgdHhSZXF1ZXN0UmVzb2x2ZWQgPSB0eFJlcXVlc3Q7XG4gICAgICB0eFJlcXVlc3RJZCA9IHR4UmVxdWVzdC50eFJlcXVlc3RJZDtcbiAgICB9XG5cbiAgICBjb25zdCBoZFRyZWUgPSBhd2FpdCBFZDI1NTE5QmlwMzJIZFRyZWUuaW5pdGlhbGl6ZSgpO1xuICAgIGNvbnN0IE1QQyA9IGF3YWl0IEVkZHNhLmluaXRpYWxpemUoaGRUcmVlKTtcblxuICAgIGNvbnN0IHVzZXJTaWduaW5nTWF0ZXJpYWw6IFNpZ25pbmdNYXRlcmlhbCA9IEpTT04ucGFyc2UocHJ2KTtcbiAgICBpZiAoIXVzZXJTaWduaW5nTWF0ZXJpYWwuYmFja3VwWVNoYXJlKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgdXNlciBrZXkgLSBtaXNzaW5nIGJhY2t1cFlTaGFyZScpO1xuICAgIH1cblxuICAgIGNvbnN0IHsgYXBpVmVyc2lvbiB9ID0gdHhSZXF1ZXN0UmVzb2x2ZWQ7XG4gICAgYXNzZXJ0KHR4UmVxdWVzdFJlc29sdmVkLnRyYW5zYWN0aW9ucyB8fCB0eFJlcXVlc3RSZXNvbHZlZC51bnNpZ25lZFR4cywgJ1VuYWJsZSB0byBmaW5kIHRyYW5zYWN0aW9ucyBpbiB0eFJlcXVlc3QnKTtcbiAgICBjb25zdCB1bnNpZ25lZFR4ID1cbiAgICAgIGFwaVZlcnNpb24gPT09ICdmdWxsJyA/IHR4UmVxdWVzdFJlc29sdmVkLnRyYW5zYWN0aW9ucyFbMF0udW5zaWduZWRUeCA6IHR4UmVxdWVzdFJlc29sdmVkLnVuc2lnbmVkVHhzWzBdO1xuXG4gICAgY29uc3Qgc2lnbmluZ0tleSA9IE1QQy5rZXlEZXJpdmUoXG4gICAgICB1c2VyU2lnbmluZ01hdGVyaWFsLnVTaGFyZSxcbiAgICAgIFt1c2VyU2lnbmluZ01hdGVyaWFsLmJpdGdvWVNoYXJlLCB1c2VyU2lnbmluZ01hdGVyaWFsLmJhY2t1cFlTaGFyZV0sXG4gICAgICB1bnNpZ25lZFR4LmRlcml2YXRpb25QYXRoXG4gICAgKTtcblxuICAgIGNvbnN0IHNpZ25hYmxlUGF5bG9hZCA9IEJ1ZmZlci5mcm9tKHVuc2lnbmVkVHguc2lnbmFibGVIZXgsICdoZXgnKTtcblxuICAgIGNvbnN0IHVzZXJTaWduU2hhcmUgPSBhd2FpdCBjcmVhdGVVc2VyU2lnblNoYXJlKHNpZ25hYmxlUGF5bG9hZCwgc2lnbmluZ0tleS5wU2hhcmUpO1xuXG4gICAgY29uc3QgYml0Z29JbmRleCA9IFNoYXJlS2V5UG9zaXRpb24uQklUR087XG4gICAgY29uc3Qgc2lnbmVyU2hhcmUgPSBzaWduaW5nS2V5LnlTaGFyZXNbYml0Z29JbmRleF0udSArIHNpZ25pbmdLZXkueVNoYXJlc1tiaXRnb0luZGV4XS5jaGFpbmNvZGU7XG4gICAgY29uc3QgYml0Z29HcGdLZXkgPSAoYXdhaXQgZ2V0Qml0Z29HcGdQdWJLZXkodGhpcy5iaXRnbykpLm1wY1YxO1xuICAgIGNvbnN0IHVzZXJUb0JpdGdvRW5jcnlwdGVkU2lnbmVyU2hhcmUgPSBhd2FpdCBlbmNyeXB0VGV4dChzaWduZXJTaGFyZSwgYml0Z29HcGdLZXkpO1xuXG4gICAgY29uc3QgdXNlckdwZ0tleSA9IGF3YWl0IGdlbmVyYXRlR1BHS2V5UGFpcignc2VjcDI1NmsxJyk7XG4gICAgY29uc3QgcHJpdmF0ZVNoYXJlUHJvb2YgPSBhd2FpdCBjcmVhdGVTaGFyZVByb29mKHVzZXJHcGdLZXkucHJpdmF0ZUtleSwgc2lnbmluZ0tleS55U2hhcmVzW2JpdGdvSW5kZXhdLnUsICdlZGRzYScpO1xuICAgIGNvbnN0IHZzc1Byb29mID0gc2lnbmluZ0tleS55U2hhcmVzW2JpdGdvSW5kZXhdLnY7XG4gICAgY29uc3QgdXNlclB1YmxpY0dwZ0tleSA9IHVzZXJHcGdLZXkucHVibGljS2V5O1xuICAgIGNvbnN0IHB1YmxpY1NoYXJlID0gc2lnbmluZ0tleS55U2hhcmVzW2JpdGdvSW5kZXhdLnkgKyBzaWduaW5nS2V5LnlTaGFyZXNbYml0Z29JbmRleF0uY2hhaW5jb2RlO1xuXG4gICAgY29uc3QgdXNlclRvQml0Z29Db21taXRtZW50ID0gdXNlclNpZ25TaGFyZS5yU2hhcmVzW2JpdGdvSW5kZXhdLmNvbW1pdG1lbnQ7XG4gICAgYXNzZXJ0KHVzZXJUb0JpdGdvQ29tbWl0bWVudCwgJ01pc3NpbmcgdXNlclRvQml0Z29Db21taXRtZW50IGNvbW1pdG1lbnQnKTtcblxuICAgIGNvbnN0IGNvbW1pdG1lbnRTaGFyZSA9IHRoaXMuY3JlYXRlVXNlclRvQml0Z29Db21taXRtZW50U2hhcmUodXNlclRvQml0Z29Db21taXRtZW50KTtcbiAgICBjb25zdCBlbmNyeXB0ZWRTaWduZXJTaGFyZSA9IHRoaXMuY3JlYXRlVXNlclRvQml0Z29FbmNyeXB0ZWRTaWduZXJTaGFyZSh1c2VyVG9CaXRnb0VuY3J5cHRlZFNpZ25lclNoYXJlKTtcblxuICAgIGNvbnN0IHsgY29tbWl0bWVudFNoYXJlOiBiaXRnb1RvVXNlckNvbW1pdG1lbnQgfSA9IGF3YWl0IGV4Y2hhbmdlRWRkc2FDb21taXRtZW50cyhcbiAgICAgIHRoaXMuYml0Z28sXG4gICAgICB0aGlzLndhbGxldC5pZCgpLFxuICAgICAgdHhSZXF1ZXN0SWQsXG4gICAgICBjb21taXRtZW50U2hhcmUsXG4gICAgICBlbmNyeXB0ZWRTaWduZXJTaGFyZSxcbiAgICAgIGFwaVZlcnNpb25cbiAgICApO1xuXG4gICAgYXdhaXQgb2ZmZXJVc2VyVG9CaXRnb1JTaGFyZShcbiAgICAgIHRoaXMuYml0Z28sXG4gICAgICB0aGlzLndhbGxldC5pZCgpLFxuICAgICAgdHhSZXF1ZXN0SWQsXG4gICAgICB1c2VyU2lnblNoYXJlLFxuICAgICAgdXNlclRvQml0Z29FbmNyeXB0ZWRTaWduZXJTaGFyZSxcbiAgICAgIGFwaVZlcnNpb24sXG4gICAgICB2c3NQcm9vZixcbiAgICAgIHByaXZhdGVTaGFyZVByb29mLFxuICAgICAgdXNlclB1YmxpY0dwZ0tleSxcbiAgICAgIHB1YmxpY1NoYXJlXG4gICAgKTtcblxuICAgIGNvbnN0IGJpdGdvVG9Vc2VyUlNoYXJlID0gYXdhaXQgZ2V0Qml0Z29Ub1VzZXJSU2hhcmUodGhpcy5iaXRnbywgdGhpcy53YWxsZXQuaWQoKSwgdHhSZXF1ZXN0SWQpO1xuXG4gICAgY29uc3QgdXNlclRvQml0R29HU2hhcmUgPSBhd2FpdCBjcmVhdGVVc2VyVG9CaXRHb0dTaGFyZShcbiAgICAgIHVzZXJTaWduU2hhcmUsXG4gICAgICBiaXRnb1RvVXNlclJTaGFyZSxcbiAgICAgIHVzZXJTaWduaW5nTWF0ZXJpYWwuYmFja3VwWVNoYXJlLFxuICAgICAgdXNlclNpZ25pbmdNYXRlcmlhbC5iaXRnb1lTaGFyZSxcbiAgICAgIHNpZ25hYmxlUGF5bG9hZCxcbiAgICAgIGJpdGdvVG9Vc2VyQ29tbWl0bWVudFxuICAgICk7XG5cbiAgICBhd2FpdCBzZW5kVXNlclRvQml0Z29HU2hhcmUodGhpcy5iaXRnbywgdGhpcy53YWxsZXQuaWQoKSwgdHhSZXF1ZXN0SWQsIHVzZXJUb0JpdEdvR1NoYXJlLCBhcGlWZXJzaW9uKTtcblxuICAgIHJldHVybiBhd2FpdCBnZXRUeFJlcXVlc3QodGhpcy5iaXRnbywgdGhpcy53YWxsZXQuaWQoKSwgdHhSZXF1ZXN0SWQpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgY29tbW9uUHViIHBvcnRpb24gb2YgdGhlIGNvbW1vbktleWNoYWluLlxuICAgKlxuICAgKiBAcGFyYW0ge1N0cmluZ30gY29tbW9uS2V5Y2hhaW5cbiAgICogQHJldHVybnMge3N0cmluZ31cbiAgICovXG4gIHN0YXRpYyBnZXRQdWJsaWNLZXlGcm9tQ29tbW9uS2V5Y2hhaW4oY29tbW9uS2V5Y2hhaW46IHN0cmluZyk6IHN0cmluZyB7XG4gICAgaWYgKGNvbW1vbktleWNoYWluLmxlbmd0aCAhPT0gMTI4KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgY29tbW9uS2V5Y2hhaW4gbGVuZ3RoLCBleHBlY3RlZCAxMjgsIGdvdCAke2NvbW1vbktleWNoYWluLmxlbmd0aH1gKTtcbiAgICB9XG4gICAgY29uc3QgY29tbW9uUHViSGV4U3RyID0gY29tbW9uS2V5Y2hhaW4uc2xpY2UoMCwgNjQpO1xuICAgIHJldHVybiBiczU4LmVuY29kZShCdWZmZXIuZnJvbShjb21tb25QdWJIZXhTdHIsICdoZXgnKSk7XG4gIH1cblxuICBjcmVhdGVVc2VyVG9CaXRnb0NvbW1pdG1lbnRTaGFyZShjb21taXRtZW50OiBzdHJpbmcpOiBDb21taXRtZW50U2hhcmVSZWNvcmQge1xuICAgIHJldHVybiB7XG4gICAgICBmcm9tOiBTaWduYXR1cmVTaGFyZVR5cGUuVVNFUixcbiAgICAgIHRvOiBTaWduYXR1cmVTaGFyZVR5cGUuQklUR08sXG4gICAgICBzaGFyZTogY29tbWl0bWVudCxcbiAgICAgIHR5cGU6IENvbW1pdG1lbnRUeXBlLkNPTU1JVE1FTlQsXG4gICAgfTtcbiAgfVxuXG4gIGNyZWF0ZVVzZXJUb0JpdGdvRW5jcnlwdGVkU2lnbmVyU2hhcmUoZW5jcnlwdGVkU2lnbmVyU2hhcmU6IHN0cmluZyk6IEVuY3J5cHRlZFNpZ25lclNoYXJlUmVjb3JkIHtcbiAgICByZXR1cm4ge1xuICAgICAgZnJvbTogU2lnbmF0dXJlU2hhcmVUeXBlLlVTRVIsXG4gICAgICB0bzogU2lnbmF0dXJlU2hhcmVUeXBlLkJJVEdPLFxuICAgICAgc2hhcmU6IGVuY3J5cHRlZFNpZ25lclNoYXJlLFxuICAgICAgdHlwZTogRW5jcnlwdGVkU2lnbmVyU2hhcmVUeXBlLkVOQ1JZUFRFRF9TSUdORVJfU0hBUkUsXG4gICAgfTtcbiAgfVxuXG4gIGNyZWF0ZVVzZXJUb0JpdGdvRW5jcnlwdGVkUlNoYXJlKGVuY3J5cHRlZFJTaGFyZTogc3RyaW5nKTogRW5jcnlwdGVkU2lnbmVyU2hhcmVSZWNvcmQge1xuICAgIHJldHVybiB7XG4gICAgICBmcm9tOiBTaWduYXR1cmVTaGFyZVR5cGUuVVNFUixcbiAgICAgIHRvOiBTaWduYXR1cmVTaGFyZVR5cGUuQklUR08sXG4gICAgICBzaGFyZTogZW5jcnlwdGVkUlNoYXJlLFxuICAgICAgdHlwZTogRW5jcnlwdGVkU2lnbmVyU2hhcmVUeXBlLkVOQ1JZUFRFRF9SX1NIQVJFLFxuICAgIH07XG4gIH1cbn1cbi8qKlxuICogQGRlcHJlY2F0ZWQgLSB1c2UgRWRkc2FVdGlsc1xuICovXG5leHBvcnQgY29uc3QgVHNzVXRpbHMgPSBFZGRzYVV0aWxzO1xuIl19
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"wallet.d.ts","sourceRoot":"","sources":["../../../../src/bitgo/utils/wallet.ts"],"names":[],"mappings":"AAGA;;;;GAIG;AACH,wBAAgB,sBAAsB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAG/D"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || function (mod) {
|
|
19
|
+
if (mod && mod.__esModule) return mod;
|
|
20
|
+
var result = {};
|
|
21
|
+
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
22
|
+
__setModuleDefault(result, mod);
|
|
23
|
+
return result;
|
|
24
|
+
};
|
|
25
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
26
|
+
exports.generateRandomPassword = void 0;
|
|
27
|
+
const sjcl = __importStar(require("@bitgo/sjcl"));
|
|
28
|
+
const bs58 = __importStar(require("bs58"));
|
|
29
|
+
/**
|
|
30
|
+
* Generate a random password
|
|
31
|
+
* @param {Number} numWords Number of 32-bit words
|
|
32
|
+
* @returns {String} base58 random password
|
|
33
|
+
*/
|
|
34
|
+
function generateRandomPassword(numWords) {
|
|
35
|
+
const bytes = sjcl.codec.bytes.fromBits(sjcl.random.randomWords(numWords));
|
|
36
|
+
return bs58.encode(bytes);
|
|
37
|
+
}
|
|
38
|
+
exports.generateRandomPassword = generateRandomPassword;
|
|
39
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2FsbGV0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2JpdGdvL3V0aWxzL3dhbGxldC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLGtEQUFvQztBQUNwQywyQ0FBNkI7QUFFN0I7Ozs7R0FJRztBQUNILFNBQWdCLHNCQUFzQixDQUFDLFFBQWdCO0lBQ3JELE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDO0lBQzNFLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUM1QixDQUFDO0FBSEQsd0RBR0MiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBzamNsIGZyb20gJ0BiaXRnby9zamNsJztcbmltcG9ydCAqIGFzIGJzNTggZnJvbSAnYnM1OCc7XG5cbi8qKlxuICogR2VuZXJhdGUgYSByYW5kb20gcGFzc3dvcmRcbiAqIEBwYXJhbSAgIHtOdW1iZXJ9IG51bVdvcmRzICAgICBOdW1iZXIgb2YgMzItYml0IHdvcmRzXG4gKiBAcmV0dXJucyB7U3RyaW5nfSAgICAgICAgICBiYXNlNTggcmFuZG9tIHBhc3N3b3JkXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZW5lcmF0ZVJhbmRvbVBhc3N3b3JkKG51bVdvcmRzOiBudW1iZXIpOiBzdHJpbmcge1xuICBjb25zdCBieXRlcyA9IHNqY2wuY29kZWMuYnl0ZXMuZnJvbUJpdHMoc2pjbC5yYW5kb20ucmFuZG9tV29yZHMobnVtV29yZHMpKTtcbiAgcmV0dXJuIGJzNTguZW5jb2RlKGJ5dGVzKTtcbn1cbiJdfQ==
|
|
@@ -9,6 +9,7 @@ import { CustomCommitmentGeneratingFunction, CustomGShareGeneratingFunction, Cus
|
|
|
9
9
|
import { ILightning } from '../lightning';
|
|
10
10
|
import { SerializedNtilde } from '../../account-lib/mpc/tss/ecdsa/types';
|
|
11
11
|
import { IAddressBook } from '../address-book';
|
|
12
|
+
import { WalletUser } from '@bitgo/public-types';
|
|
12
13
|
export interface MaximumSpendableOptions {
|
|
13
14
|
minValue?: number | string;
|
|
14
15
|
maxValue?: number | string;
|
|
@@ -161,6 +162,7 @@ export interface WalletSignTransactionOptions extends WalletSignBaseOptions {
|
|
|
161
162
|
customMuDeltaShareGeneratingFunction?: CustomMuDeltaShareGeneratingFunction;
|
|
162
163
|
customSShareGeneratingFunction?: CustomSShareGeneratingFunction;
|
|
163
164
|
apiVersion?: ApiVersion;
|
|
165
|
+
multisigTypeVersion?: 'MPCv2';
|
|
164
166
|
[index: string]: unknown;
|
|
165
167
|
}
|
|
166
168
|
interface WalletSignMessageBase extends WalletSignBaseOptions {
|
|
@@ -525,6 +527,7 @@ export interface WalletData {
|
|
|
525
527
|
bitgo?: string;
|
|
526
528
|
};
|
|
527
529
|
multisigType: 'onchain' | 'tss';
|
|
530
|
+
multisigTypeVersion?: 'MPCv2';
|
|
528
531
|
type?: WalletType;
|
|
529
532
|
subType?: SubWalletType;
|
|
530
533
|
tokens?: Record<string, any>[];
|
|
@@ -534,6 +537,7 @@ export interface WalletData {
|
|
|
534
537
|
unsupportedNfts?: {
|
|
535
538
|
[contractAddress: string]: NftBalance;
|
|
536
539
|
};
|
|
540
|
+
users?: WalletUser[];
|
|
537
541
|
}
|
|
538
542
|
export interface RecoverTokenOptions {
|
|
539
543
|
tokenContractAddress?: string;
|