@bitgo-beta/sdk-coin-ada 2.3.14-beta.71 → 2.3.14-beta.711

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.
@@ -1,10 +1,18 @@
1
1
  "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
2
5
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.Utils = void 0;
6
+ exports.Utils = exports.VOTE_ALWAYS_NO_CONFIDENCE = exports.VOTE_ALWAYS_ABSTAIN = exports.MIN_ADA_FOR_ONE_ASSET = void 0;
4
7
  const sdk_core_1 = require("@bitgo-beta/sdk-core");
5
8
  const cardano_serialization_lib_nodejs_1 = require("@emurgo/cardano-serialization-lib-nodejs");
6
9
  const keyPair_1 = require("./keyPair");
7
10
  const bech32_1 = require("bech32");
11
+ const bs58_1 = __importDefault(require("bs58"));
12
+ const cbor_1 = __importDefault(require("cbor"));
13
+ exports.MIN_ADA_FOR_ONE_ASSET = '1500000';
14
+ exports.VOTE_ALWAYS_ABSTAIN = 'always-abstain';
15
+ exports.VOTE_ALWAYS_NO_CONFIDENCE = 'always-no-confidence';
8
16
  class Utils {
9
17
  createBaseAddressWithStakeAndPaymentKey(stakeKeyPair, paymentKeyPair, network) {
10
18
  let baseAddr;
@@ -15,7 +23,7 @@ class Utils {
15
23
  // 2. create payment pubKey
16
24
  const paymentPub = cardano_serialization_lib_nodejs_1.PublicKey.from_bytes(Buffer.from(paymentKeyPair.getKeys().pub, 'hex'));
17
25
  // 3. create full base address for staking
18
- baseAddr = cardano_serialization_lib_nodejs_1.BaseAddress.new(cardano_serialization_lib_nodejs_1.NetworkInfo.mainnet().network_id(), cardano_serialization_lib_nodejs_1.StakeCredential.from_keyhash(paymentPub.hash()), cardano_serialization_lib_nodejs_1.StakeCredential.from_keyhash(stakePub.hash()));
26
+ baseAddr = cardano_serialization_lib_nodejs_1.BaseAddress.new(cardano_serialization_lib_nodejs_1.NetworkInfo.mainnet().network_id(), cardano_serialization_lib_nodejs_1.Credential.from_keyhash(paymentPub.hash()), cardano_serialization_lib_nodejs_1.Credential.from_keyhash(stakePub.hash()));
19
27
  return baseAddr.to_address().to_bech32();
20
28
  }
21
29
  else if (network === sdk_core_1.AddressFormat.testnet) {
@@ -24,7 +32,7 @@ class Utils {
24
32
  // 2. create payment pubKey
25
33
  const paymentPub = cardano_serialization_lib_nodejs_1.PublicKey.from_bytes(Buffer.from(paymentKeyPair.getKeys().pub, 'hex'));
26
34
  // 3. create full base address for staking
27
- const baseAddr = cardano_serialization_lib_nodejs_1.BaseAddress.new(cardano_serialization_lib_nodejs_1.NetworkInfo.testnet().network_id(), cardano_serialization_lib_nodejs_1.StakeCredential.from_keyhash(paymentPub.hash()), cardano_serialization_lib_nodejs_1.StakeCredential.from_keyhash(stakePub.hash()));
35
+ const baseAddr = cardano_serialization_lib_nodejs_1.BaseAddress.new(cardano_serialization_lib_nodejs_1.NetworkInfo.testnet_preprod().network_id(), cardano_serialization_lib_nodejs_1.Credential.from_keyhash(paymentPub.hash()), cardano_serialization_lib_nodejs_1.Credential.from_keyhash(stakePub.hash()));
28
36
  return baseAddr.to_address().to_bech32();
29
37
  }
30
38
  else {
@@ -44,13 +52,68 @@ class Utils {
44
52
  const stakePub = cardano_serialization_lib_nodejs_1.PublicKey.from_bytes(Buffer.from(stakingPubKey, 'hex'));
45
53
  let rewardAddress;
46
54
  if (coinName === 'ada') {
47
- rewardAddress = cardano_serialization_lib_nodejs_1.RewardAddress.new(cardano_serialization_lib_nodejs_1.NetworkInfo.mainnet().network_id(), cardano_serialization_lib_nodejs_1.StakeCredential.from_keyhash(stakePub.hash()));
55
+ rewardAddress = cardano_serialization_lib_nodejs_1.RewardAddress.new(cardano_serialization_lib_nodejs_1.NetworkInfo.mainnet().network_id(), cardano_serialization_lib_nodejs_1.Credential.from_keyhash(stakePub.hash()));
48
56
  }
49
57
  else {
50
- rewardAddress = cardano_serialization_lib_nodejs_1.RewardAddress.new(cardano_serialization_lib_nodejs_1.NetworkInfo.testnet().network_id(), cardano_serialization_lib_nodejs_1.StakeCredential.from_keyhash(stakePub.hash()));
58
+ rewardAddress = cardano_serialization_lib_nodejs_1.RewardAddress.new(cardano_serialization_lib_nodejs_1.NetworkInfo.testnet_preprod().network_id(), cardano_serialization_lib_nodejs_1.Credential.from_keyhash(stakePub.hash()));
51
59
  }
52
60
  return rewardAddress.to_address().to_bech32();
53
61
  }
62
+ isValidDRepId(dRepId) {
63
+ try {
64
+ this.getDRepFromDRepId(dRepId);
65
+ return true;
66
+ }
67
+ catch (err) {
68
+ return false;
69
+ }
70
+ }
71
+ getDRepFromDRepId(dRepId) {
72
+ switch (dRepId) {
73
+ case 'always-abstain':
74
+ return cardano_serialization_lib_nodejs_1.DRep.new_always_abstain();
75
+ case 'always-no-confidence':
76
+ return cardano_serialization_lib_nodejs_1.DRep.new_always_no_confidence();
77
+ default:
78
+ try {
79
+ // for parsing CIP-105 standard DRep ID
80
+ return cardano_serialization_lib_nodejs_1.DRep.from_bech32(dRepId);
81
+ }
82
+ catch (err) {
83
+ // for parsing CIP-129 standard DRep ID
84
+ // https://cips.cardano.org/cip/CIP-0129
85
+ const decodedBech32 = bech32_1.bech32.decode(dRepId);
86
+ const decodedBytes = Buffer.from(bech32_1.bech32.fromWords(decodedBech32.words));
87
+ const header = decodedBytes[0];
88
+ const keyBytes = decodedBytes.subarray(1);
89
+ const keyType = (header & 0xf0) >> 4;
90
+ const credentialType = header & 0x0f;
91
+ if (keyType !== 0x02) {
92
+ throw new Error('Invalid key type for DRep');
93
+ }
94
+ switch (credentialType) {
95
+ case 0x02:
96
+ const ed25519KeyHash = cardano_serialization_lib_nodejs_1.Ed25519KeyHash.from_bytes(keyBytes);
97
+ return cardano_serialization_lib_nodejs_1.DRep.new_key_hash(ed25519KeyHash);
98
+ case 0x03:
99
+ const scriptHash = cardano_serialization_lib_nodejs_1.ScriptHash.from_bytes(keyBytes);
100
+ return cardano_serialization_lib_nodejs_1.DRep.new_script_hash(scriptHash);
101
+ default:
102
+ throw new Error('Invalid credential type for DRep');
103
+ }
104
+ }
105
+ }
106
+ }
107
+ getDRepIdFromDRep(dRep) {
108
+ switch (dRep.kind()) {
109
+ case cardano_serialization_lib_nodejs_1.DRepKind.AlwaysAbstain:
110
+ return exports.VOTE_ALWAYS_ABSTAIN;
111
+ case cardano_serialization_lib_nodejs_1.DRepKind.AlwaysNoConfidence:
112
+ return exports.VOTE_ALWAYS_NO_CONFIDENCE;
113
+ default:
114
+ return dRep.to_bech32();
115
+ }
116
+ }
54
117
  /** @inheritdoc */
55
118
  // this will validate both stake and payment addresses
56
119
  isValidAddress(address) {
@@ -59,26 +122,37 @@ class Utils {
59
122
  const REWARD_AND_ENTERPRISE_ADDR_LEN = 47;
60
123
  const POINTER_ADDR_LEN = 52;
61
124
  const VALIDATOR_ADDR_LEN = 56;
62
- // test if this is a bech32 address first
63
- if (new RegExp(bech32PrefixList.join('|')).test(address)) {
125
+ //Check for Shelley-era (Bech32) addresses
126
+ if (new RegExp(`^(${bech32PrefixList.join('|')})`).test(address)) {
64
127
  try {
65
128
  const decodedBech = bech32_1.bech32.decode(address, 108);
66
129
  const wordLength = decodedBech.words.length;
67
- if (!bech32PrefixList.includes(decodedBech.prefix)) {
68
- return false;
130
+ if (bech32PrefixList.includes(decodedBech.prefix) &&
131
+ (wordLength === BASE_ADDR_LEN ||
132
+ wordLength === REWARD_AND_ENTERPRISE_ADDR_LEN ||
133
+ wordLength === POINTER_ADDR_LEN)) {
134
+ return true;
69
135
  }
70
- return (wordLength === BASE_ADDR_LEN ||
71
- wordLength === REWARD_AND_ENTERPRISE_ADDR_LEN ||
72
- wordLength === POINTER_ADDR_LEN);
73
136
  }
74
- catch (err) {
75
- return false;
137
+ catch (e) {
138
+ console.log(`Address: ${address} failed Bech32 test with error: ${e}`);
76
139
  }
77
140
  }
78
- else {
79
- // maybe this is a validator address
80
- return new RegExp(`^(?!pool)[a-z0-9]\{${VALIDATOR_ADDR_LEN}\}$`).test(address);
141
+ //Check for Validator addresses
142
+ if (new RegExp(`^(?!pool)[a-z0-9]{${VALIDATOR_ADDR_LEN}}$`).test(address)) {
143
+ return true;
144
+ }
145
+ //Check for Byron-era address
146
+ try {
147
+ const decoded = bs58_1.default.decode(address);
148
+ const cborData = cbor_1.default.decodeFirstSync(decoded);
149
+ return Array.isArray(cborData) && cborData.length >= 2;
81
150
  }
151
+ catch (e) {
152
+ console.log(`Address: ${address} failed Byron test with error: ${e}`);
153
+ console.log(e.stack);
154
+ }
155
+ return false;
82
156
  }
83
157
  /** @inheritdoc */
84
158
  isValidBlockId(hash) {
@@ -134,8 +208,58 @@ class Utils {
134
208
  : Buffer.from(serializedTx, 'base64');
135
209
  return Buffer.from(cardano_serialization_lib_nodejs_1.Transaction.from_bytes(bufferRawTransaction).body().to_bytes()).toString('hex');
136
210
  }
211
+ /**
212
+ * Decode wallet address from string.
213
+ * Attempts to decode as Shelley (bech32) first, then Byron (base58).
214
+ * @param {string} address - Valid Byron or Shelley-era address.
215
+ * @returns {Address} - Valid address object.
216
+ * @throws {InvalidAddressError} If the address is neither valid Shelley nor Byron.
217
+ */
218
+ getWalletAddress(address) {
219
+ if (!address || typeof address !== 'string') {
220
+ throw new sdk_core_1.InvalidAddressError('Provided address is not a valid string');
221
+ }
222
+ // Try decoding as a Shelley (bech32) address first
223
+ try {
224
+ return cardano_serialization_lib_nodejs_1.Address.from_bech32(address);
225
+ }
226
+ catch (e) {
227
+ console.error(`Could not decode shelly address from string '${address}'`);
228
+ }
229
+ // Try decoding as a Byron (base58) address later
230
+ try {
231
+ return cardano_serialization_lib_nodejs_1.ByronAddress.from_base58(address).to_address();
232
+ }
233
+ catch (e) {
234
+ console.error(`Could not decode byron address from string '${address}'`);
235
+ }
236
+ throw new sdk_core_1.InvalidAddressError('Provided string is not a valid Shelley or Byron address');
237
+ }
238
+ /**
239
+ * Decode address string from Address object.
240
+ * Attempts to decode as Shelley (bech32) first, then Byron (base58).
241
+ * @param {Address} address - Valid Address object
242
+ * @returns {string} - Valid Byron or Shelley-era address string.
243
+ * @throws {InvalidAddressError} If the Address object is neither valid Shelley nor Byron.
244
+ */
245
+ getAddressString(address) {
246
+ // Check all Shelley address types
247
+ if (cardano_serialization_lib_nodejs_1.BaseAddress.from_address(address) ||
248
+ cardano_serialization_lib_nodejs_1.EnterpriseAddress.from_address(address) ||
249
+ cardano_serialization_lib_nodejs_1.RewardAddress.from_address(address) ||
250
+ cardano_serialization_lib_nodejs_1.PointerAddress.from_address(address)) {
251
+ return address.to_bech32();
252
+ }
253
+ // If not Shelley, try Byron
254
+ const byronAddress = cardano_serialization_lib_nodejs_1.ByronAddress.from_address(address);
255
+ if (byronAddress) {
256
+ return byronAddress.to_base58();
257
+ }
258
+ // If neither, it's invalid
259
+ throw new sdk_core_1.InvalidAddressError('Provided Address is not a valid Shelley or Byron address');
260
+ }
137
261
  }
138
262
  exports.Utils = Utils;
139
263
  const utils = new Utils();
140
264
  exports.default = utils;
141
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGliL3V0aWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLG1EQUFnRTtBQUNoRSwrRkFRa0Q7QUFDbEQsdUNBQW9DO0FBQ3BDLG1DQUFnQztBQUVoQyxNQUFhLEtBQUs7SUFDaEIsdUNBQXVDLENBQ3JDLFlBQXFCLEVBQ3JCLGNBQXVCLEVBQ3ZCLE9BQXNCO1FBRXRCLElBQUksUUFBUSxDQUFDO1FBQ2IsSUFBSSxPQUFPLEtBQUssd0JBQWEsQ0FBQyxPQUFPLEVBQUU7WUFDckMseUJBQXlCO1lBQ3pCLE1BQU0sR0FBRyxHQUFHLFlBQVksQ0FBQyxPQUFPLEVBQUUsQ0FBQyxHQUFHLENBQUM7WUFFdkMsTUFBTSxRQUFRLEdBQUcsNENBQVMsQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQztZQUMvRCwyQkFBMkI7WUFDM0IsTUFBTSxVQUFVLEdBQUcsNENBQVMsQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsT0FBTyxFQUFFLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUM7WUFDMUYsMENBQTBDO1lBQzFDLFFBQVEsR0FBRyw4Q0FBVyxDQUFDLEdBQUcsQ0FDeEIsOENBQVcsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxVQUFVLEVBQUUsRUFDbEMsa0RBQWUsQ0FBQyxZQUFZLENBQUMsVUFBVSxDQUFDLElBQUksRUFBRSxDQUFDLEVBQy9DLGtEQUFlLENBQUMsWUFBWSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUM5QyxDQUFDO1lBQ0YsT0FBTyxRQUFRLENBQUMsVUFBVSxFQUFFLENBQUMsU0FBUyxFQUFFLENBQUM7U0FDMUM7YUFBTSxJQUFJLE9BQU8sS0FBSyx3QkFBYSxDQUFDLE9BQU8sRUFBRTtZQUM1Qyx5QkFBeUI7WUFDekIs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QyxJQUFJO1lBQ0YsbURBQWdCLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1lBQ3JDLE9BQU8sSUFBSSxDQUFDO1NBQ2I7UUFBQyxPQUFPLEdBQUcsRUFBRTtZQUNaLE9BQU8sS0FBSyxDQUFDO1NBQ2Q7SUFDSCxDQUFDO0lBRUQsa0JBQWtCO0lBQ2xCLG9CQUFvQixDQUFDLElBQVk7UUFDL0IsT0FBTyxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3BDLENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsa0JBQWtCLENBQUMsWUFBb0I7UUFDckMsTUFBTSxTQUFTLEdBQUcsZ0JBQWdCLENBQUM7UUFDbkMsTUFBTSxvQkFBb0IsR0FBRyxTQUFTLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQztZQUN2RCxDQUFDLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxZQUFZLEVBQUUsS0FBSyxDQUFDO1lBQ2xDLENBQUMsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFlBQVksRUFBRSxRQUFRLENBQUMsQ0FBQztRQUN4QyxPQUFPLE1BQU0sQ0FBQyxJQUFJLENBQUMsOENBQWtCLENBQUMsVUFBVSxDQUFDLG9CQUFvQixDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDNUcsQ0FBQztDQUNGO0FBekpELHNCQXlKQztBQUVELE1BQU0sS0FBSyxHQUFHLElBQUksS0FBSyxFQUFFLENBQUM7QUFFMUIsa0JBQWUsS0FBSyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQWRkcmVzc0Zvcm1hdCwgQmFzZVV0aWxzIH0gZnJvbSAnQGJpdGdvLWJldGEvc2RrLWNvcmUnO1xuaW1wb3J0IHtcbiAgQmFzZUFkZHJlc3MsXG4gIFB1YmxpY0tleSxcbiAgRWQyNTUxOVNpZ25hdHVyZSxcbiAgTmV0d29ya0luZm8sXG4gIFN0YWtlQ3JlZGVudGlhbCxcbiAgUmV3YXJkQWRkcmVzcyxcbiAgVHJhbnNhY3Rpb24gYXMgQ2FyZGFub1RyYW5zYWN0aW9uLFxufSBmcm9tICdAZW11cmdvL2NhcmRhbm8tc2VyaWFsaXphdGlvbi1saWItbm9kZWpzJztcbmltcG9ydCB7IEtleVBhaXIgfSBmcm9tICcuL2tleVBhaXInO1xuaW1wb3J0IHsgYmVjaDMyIH0gZnJvbSAnYmVjaDMyJztcblxuZXhwb3J0IGNsYXNzIFV0aWxzIGltcGxlbWVudHMgQmFzZVV0aWxzIHtcbiAgY3JlYXRlQmFzZUFkZHJlc3NXaXRoU3Rha2VBbmRQYXltZW50S2V5KFxuICAgIHN0YWtlS2V5UGFpcjogS2V5UGFpcixcbiAgICBwYXltZW50S2V5UGFpcjogS2V5UGFpcixcbiAgICBuZXR3b3JrOiBBZGRyZXNzRm9ybWF0XG4gICk6IHN0cmluZyB7XG4gICAgbGV0IGJhc2VBZGRyO1xuICAgIGlmIChuZXR3b3JrID09PSBBZGRyZXNzRm9ybWF0Lm1haW5uZXQpIHtcbiAgICAgIC8vIDEuIGNyZWF0ZSBzdGFrZSBwdWJLZXlcbiAgICAgIGNvbnN0IGtleSA9IHN0YWtlS2V5UGFpci5nZXRLZXlzKCkucHViO1xuXG4gICAgICBjb25zdCBzdGFrZVB1YiA9IFB1YmxpY0tleS5mcm9tX2J5dGVzKEJ1ZmZlci5mcm9tKGtleSwgJ2hleCcpKTtcbiAgICAgIC8vIDIuIGNyZWF0ZSBwYXltZW50IHB1YktleVxuICAgICAgY29uc3QgcGF5bWVudFB1YiA9IFB1YmxpY0tleS5mcm9tX2J5dGVzKEJ1ZmZlci5mcm9tKHBheW1lbnRLZXlQYWlyLmdldEtleXMoKS5wdWIsICdoZXgnKSk7XG4gICAgICAvLyAzLiBjcmVhdGUgZnVsbCBiYXNlIGFkZHJlc3MgZm9yIHN0YWtpbmdcbiAgICAgIGJhc2VBZGRyID0gQmFzZUFkZHJlc3MubmV3KFxuICAgICAgICBOZXR3b3JrSW5mby5tYWlubmV0KCkubmV0d29ya19pZCgpLFxuICAgICAgICBTdGFrZUNyZWRlbnRpYWwuZnJvbV9rZXloYXNoKHBheW1lbnRQdWIuaGFzaCgpKSxcbiAgICAgICAgU3Rha2VDcmVkZW50aWFsLmZyb21fa2V5aGFzaChzdGFrZVB1Yi5oYXNoKCkpXG4gICAgICApO1xuICAgICAgcmV0dXJuIGJhc2VBZGRyLnRvX2FkZHJlc3MoKS50b19iZWNoMzIoKTtcbiAgICB9IGVsc2UgaWYgKG5ldHdvcmsgPT09IEFkZHJlc3NGb3JtYXQudGVzdG5ldCkge1xuICAgICAgLy8gMS4gY3JlYXRlIHN0YWtlIHB1YktleVxuICAgICAgY29uc3Qgc3Rha2VQdWIgPSBQdWJsaWNLZXkuZnJvbV9ieXRlcyhCdWZmZXIuZnJvbShzdGFrZUtleVBhaXIuZ2V0S2V5cygpLnB1YiwgJ2hleCcpKTtcbiAgICAgIC8vIDIuIGNyZWF0ZSBwYXltZW50IHB1YktleVxuICAgICAgY29uc3QgcGF5bWVudFB1YiA9IFB1YmxpY0tleS5mcm9tX2J5dGVzKEJ1ZmZlci5mcm9tKHBheW1lbnRLZXlQYWlyLmdldEtleXMoKS5wdWIsICdoZXgnKSk7XG4gICAgICAvLyAzLiBjcmVhdGUgZnVsbCBiYXNlIGFkZHJlc3MgZm9yIHN0YWtpbmdcbiAgICAgIGNvbnN0IGJhc2VBZGRyID0gQmFzZUFkZHJlc3MubmV3KFxuICAgICAgICBOZXR3b3JrSW5mby50ZXN0bmV0KCkubmV0d29ya19pZCgpLFxuICAgICAgICBTdGFrZUNyZWRlbnRpYWwuZnJvbV9rZXloYXNoKHBheW1lbnRQdWIuaGFzaCgpKSxcbiAgICAgICAgU3Rha2VDcmVkZW50aWFsLmZyb21fa2V5aGFzaChzdGFrZVB1Yi5oYXNoKCkpXG4gICAgICApO1xuICAgICAgcmV0dXJuIGJhc2VBZGRyLnRvX2FkZHJlc3MoKS50b19iZWNoMzIoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbXByb3BlciBOZXR3b3JrIFR5cGUhJyk7XG4gICAgfVxuICB9XG5cbiAgdmFsaWRhdGVCbGFrZTJiKGhhc2g6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIGlmICghaGFzaCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBpZiAoaGFzaC5sZW5ndGggIT09IDY0KSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiBoYXNoLm1hdGNoKC9eW2EtekEtWjAtOV0rJC8pICE9PSBudWxsO1xuICB9XG5cbiAgZ2V0UmV3YXJkQWRkcmVzcyhzdGFraW5nUHViS2V5OiBzdHJpbmcsIGNvaW5OYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGNvbnN0IHN0YWtlUHViID0gUHVibGljS2V5LmZyb21fYnl0ZXMoQnVmZmVyLmZyb20oc3Rha2luZ1B1YktleSwgJ2hleCcpKTtcbiAgICBsZXQgcmV3YXJkQWRkcmVzcztcbiAgICBpZiAoY29pbk5hbWUgPT09ICdhZGEnKSB7XG4gICAgICByZXdhcmRBZGRyZXNzID0gUmV3YXJkQWRkcmVzcy5uZXcoXG4gICAgICAgIE5ldHdvcmtJbmZvLm1haW5uZXQoKS5uZXR3b3JrX2lkKCksXG4gICAgICAgIFN0YWtlQ3JlZGVudGlhbC5mcm9tX2tleWhhc2goc3Rha2VQdWIuaGFzaCgpKVxuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV3YXJkQWRkcmVzcyA9IFJld2FyZEFkZHJlc3MubmV3KFxuICAgICAgICBOZXR3b3JrSW5mby50ZXN0bmV0KCkubmV0d29ya19pZCgpLFxuICAgICAgICBTdGFrZUNyZWRlbnRpYWwuZnJvbV9rZXloYXNoKHN0YWtlUHViLmhhc2goKSlcbiAgICAgICk7XG4gICAgfVxuICAgIHJldHVybiByZXdhcmRBZGRyZXNzLnRvX2FkZHJlc3MoKS50b19iZWNoMzIoKTtcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdGRvYyAqL1xuICAvLyB0aGlzIHdpbGwgdmFsaWRhdGUgYm90aCBzdGFrZSBhbmQgcGF5bWVudCBhZGRyZXNzZXNcbiAgaXNWYWxpZEFkZHJlc3MoYWRkcmVzczogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgY29uc3QgYmVjaDMyUHJlZml4TGlzdCA9IFsnYWRkcicsICdhZGRyX3Rlc3QnLCAnc3Rha2UnLCAnc3Rha2VfdGVzdCddO1xuICAgIGNvbnN0IEJBU0VfQUREUl9MRU4gPSA5MjtcbiAgICBjb25zdCBSRVdBUkRfQU5EX0VOVEVSUFJJU0VfQUREUl9MRU4gPSA0NztcbiAgICBjb25zdCBQT0lOVEVSX0FERFJfTEVOID0gNTI7XG4gICAgY29uc3QgVkFMSURBVE9SX0FERFJfTEVOID0gNTY7XG5cbiAgICAvLyB0ZXN0IGlmIHRoaXMgaXMgYSBiZWNoMzIgYWRkcmVzcyBmaXJzdFxuICAgIGlmIChuZXcgUmVnRXhwKGJlY2gzMlByZWZpeExpc3Quam9pbignfCcpKS50ZXN0KGFkZHJlc3MpKSB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCBkZWNvZGVkQmVjaCA9IGJlY2gzMi5kZWNvZGUoYWRkcmVzcywgMTA4KTtcbiAgICAgICAgY29uc3Qgd29yZExlbmd0aCA9IGRlY29kZWRCZWNoLndvcmRzLmxlbmd0aDtcbiAgICAgICAgaWYgKCFiZWNoMzJQcmVmaXhMaXN0LmluY2x1ZGVzKGRlY29kZWRCZWNoLnByZWZpeCkpIHtcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICB3b3JkTGVuZ3RoID09PSBCQVNFX0FERFJfTEVOIHx8XG4gICAgICAgICAgd29yZExlbmd0aCA9PT0gUkVXQVJEX0FORF9FTlRFUlBSSVNFX0FERFJfTEVOIHx8XG4gICAgICAgICAgd29yZExlbmd0aCA9PT0gUE9JTlRFUl9BRERSX0xFTlxuICAgICAgICApO1xuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgLy8gbWF5YmUgdGhpcyBpcyBhIHZhbGlkYXRvciBhZGRyZXNzXG4gICAgICByZXR1cm4gbmV3IFJlZ0V4cChgXig/IXBvb2wpW2EtejAtOV1cXHske1ZBTElEQVRPUl9BRERSX0xFTn1cXH0kYCkudGVzdChhZGRyZXNzKTtcbiAgICB9XG4gIH1cblxuICAvKiogQGluaGVyaXRkb2MgKi9cbiAgaXNWYWxpZEJsb2NrSWQoaGFzaDogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMudmFsaWRhdGVCbGFrZTJiKGhhc2gpO1xuICB9XG5cbiAgLyoqIEBpbmhlcml0ZG9jICovXG4gIGlzVmFsaWRQcml2YXRlS2V5KGtleTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgLy8gdGhpcyB3aWxsIHJldHVybiB0cnVlIGZvciBib3RoIGV4dGVuZGVkIGFuZCBub24tZXh0ZW5kZWQgRUQyNTUxOSBrZXlzXG4gICAgcmV0dXJuIHRoaXMuaXNWYWxpZEtleShrZXkpO1xuICB9XG5cbiAgaXNWYWxpZEtleShrZXk6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHRyeSB7XG4gICAgICBuZXcgS2V5UGFpcih7IHBydjoga2V5IH0pO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSBjYXRjaCB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgLyoqIEBpbmhlcml0ZG9jICovXG4gIGlzVmFsaWRQdWJsaWNLZXkocHViS2V5OiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICB0cnkge1xuICAgICAgbmV3IEtleVBhaXIoeyBwdWI6IHB1YktleSB9KTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0gY2F0Y2gge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIC8qKiBAaW5oZXJpdGRvYyAqL1xuICBpc1ZhbGlkU2lnbmF0dXJlKHNpZ25hdHVyZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgdHJ5IHtcbiAgICAgIEVkMjU1MTlTaWduYXR1cmUuZnJvbV9oZXgoc2lnbmF0dXJlKTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIC8qKiBAaW5oZXJpdGRvYyAqL1xuICBpc1ZhbGlkVHJhbnNhY3Rpb25JZCh0eElkOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy52YWxpZGF0ZUJsYWtlMmIodHhJZCk7XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSB0cmFuc2FjdGlvbiBib2R5IGZyb20gYSBzZXJpYWxpemVkIHRyYW5zYWN0aW9uXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBzZXJpYWxpemVkVHggLSBzZXJpYWxpemVkIHRyYW5zYWN0aW9uIGluIGhleCBvciBiYXNlNjQgZm9ybWF0XG4gICAqIEByZXR1cm5zIHtzdHJpbmd9IHRyYW5zYWN0aW9uIGJvZHkgaW4gaGV4IGZvcm1hdFxuICAgKi9cbiAgZ2V0VHJhbnNhY3Rpb25Cb2R5KHNlcmlhbGl6ZWRUeDogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBjb25zdCBIRVhfUkVHRVggPSAvXlswLTlhLWZBLUZdKyQvO1xuICAgIGNvbnN0IGJ1ZmZlclJhd1RyYW5zYWN0aW9uID0gSEVYX1JFR0VYLnRlc3Qoc2VyaWFsaXplZFR4KVxuICAgICAgPyBCdWZmZXIuZnJvbShzZXJpYWxpemVkVHgsICdoZXgnKVxuICAgICAgOiBCdWZmZXIuZnJvbShzZXJpYWxpemVkVHgsICdiYXNlNjQnKTtcbiAgICByZXR1cm4gQnVmZmVyLmZyb20oQ2FyZGFub1RyYW5zYWN0aW9uLmZyb21fYnl0ZXMoYnVmZmVyUmF3VHJhbnNhY3Rpb24pLmJvZHkoKS50b19ieXRlcygpKS50b1N0cmluZygnaGV4Jyk7XG4gIH1cbn1cblxuY29uc3QgdXRpbHMgPSBuZXcgVXRpbHMoKTtcblxuZXhwb3J0IGRlZmF1bHQgdXRpbHM7XG4iXX0=
265
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGliL3V0aWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBLG1EQUFxRjtBQUNyRiwrRkFnQmtEO0FBQ2xELHVDQUFvQztBQUNwQyxtQ0FBZ0M7QUFDaEMsZ0RBQXdCO0FBQ3hCLGdEQUF3QjtBQUVYLFFBQUEscUJBQXFCLEdBQUcsU0FBUyxDQUFDO0FBQ2xDLFFBQUEsbUJBQW1CLEdBQUcsZ0JBQWdCLENBQUM7QUFDdkMsUUFBQSx5QkFBeUIsR0FBRyxzQkFBc0IsQ0FBQztBQUVoRSxNQUFhLEtBQUs7SUFDaEIsdUNBQXVDLENBQ3JDLFlBQXFCLEVBQ3JCLGNBQXVCLEVBQ3ZCLE9BQXNCO1FBRXRCLElBQUksUUFBUSxDQUFDO1FBQ2IsSUFBSSxPQUFPLEtBQUssd0JBQWEsQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUN0Qyx5QkFBeUI7WUFDekIsTUFBTSxHQUFHLEdBQUcsWUFBWSxDQUFDLE9BQU8sRUFBRSxDQUFDLEdBQUcsQ0FBQztZQUV2QyxNQUFNLFFBQVEsR0FBRyw0Q0FBUyxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDO1lBQy9ELDJCQUEyQjtZQUMzQixNQUFNLFVBQVUsR0FBRyw0Q0FBUyxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQztZQUMxRiwwQ0FBMEM7WUFDMUMsUUFBUSxHQUFHLDhDQUFXLENBQUMsR0FBRyxDQUN4Qiw4Q0FBVyxDQUFDLE9BQU8sRUFBRSxDQUFDLFVBQVUsRUFBRSxFQUNsQyw2Q0FBVSxDQUFDLFlBQVksQ0FBQyxVQUFVLENBQUMsSUFBSSxFQUFFLENBQUMsRUFDMUMsNkNBQVUsQ0FBQyxZQUFZLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxDQUFDLENBQ3pDLENBQUM7WUFDRixPQUFPLFFBQVEsQ0FBQyxVQUFVLEVBQUUsQ0FBQyxTQUFTLEVBQUUsQ0FBQztRQUMzQyxDQUFDO2FBQU0sSUFBSSxPQUFPLEtBQUssd0JBQWEsQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUM3Qyx5QkFBeUI7WUFDekIsTUFBTSxRQUFRLEdBQUcsNENBQVMsQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsT0FBTyxFQUFFLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUM7WUFDdEYsMkJBQTJCO1lBQzNCLE1BQU0sVUFBVSxHQUFHLDRDQUFTLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLE9BQU8sRUFBRSxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDO1lBQzFGLDBDQUEwQztZQUMxQyxNQUFNLFFBQVEsR0FBRyw4Q0FBVyxDQUFDLEdBQUcsQ0FDOUIsOENBQVcsQ0FBQyxlQUFlLEVBQUUsQ0FBQyxVQUFVLEVBQUUsRUFDMUMsNkNBQVUsQ0FBQyxZQUFZLENBQUMsVUFBVSxDQUFDLElBQUksRUFBRSxDQUFDLEVBQzFDLDZDQUFVLENBQUMsWUFBWSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUN6QyxDQUFDO1lBQ0YsT0FBTyxRQUFRLENBQUMsVUFBVSxFQUFFLENBQUMsU0FBUyxFQUFFLENBQUM7UUFDM0MsQ0FBQzthQUFNLENBQUM7WUFDTixNQUFNLElBQUksS0FBSyxDQUFDLHdCQUF3QixDQUFDLENBQUM7UUFDNUMsQ0FBQztJQUNILENBQUM7SUFFRCxlQUFlLENBQUMsSUFBWTtRQUMxQixJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDVixPQUFPLEtBQUssQ0FBQztRQUNmLENBQUM7UUFDRCxJQUFJLElBQUksQ0FBQyxNQUFNLEtBQUssRUFBRSxFQUFFLENBQUM7WUFDdkIsT0FBTyxLQUFLLENBQUM7UUFDZixDQUFDO1FBQ0QsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLGdCQUFnQixDQUFDLEtBQUssSUFBSSxDQUFDO0lBQy9DLENBQUM7SUFFRCxnQkFBZ0IsQ0FBQyxhQUFxQixFQUFFLFFBQWdCO1FBQ3RELE1BQU0sUUFBUSxHQUFHLDRDQUFTLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsYUFBYSxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUM7UUFDekUsSUFBSSxhQUFhLENBQUM7UUFDbEIsSUFBSSxRQUFRLEtBQUssS0FBSyxFQUFFLENBQUM7WUFDdkIsYUFBYSxHQUFHLGdEQUFhLENBQUMsR0FBRyxDQUFDLDhDQUFXLENBQUMsT0FBTyxFQUFFLENBQUMsVUFBVSxFQUFFLEVBQUUsNkNBQVUsQ0FBQyxZQUFZLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQztRQUNsSCxDQUFDO2FBQU0sQ0FBQztZQUNOLGFBQWEsR0FBRyxnREFBYSxDQUFDLEdBQUcsQ0FDL0IsOENBQVcsQ0FBQyxlQUFlLEVBQUUsQ0FBQyxVQUFVLEVBQUUsRUFDMUMsNkNBQVUsQ0FBQyxZQUFZLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxDQUFDLENBQ3pDLENBQUM7UUFDSixDQUFDO1FBQ0QsT0FBTyxhQUFhLENBQUMsVUFBVSxFQUFFLENBQUMsU0FBUyxFQUFFLENBQUM7SUFDaEQsQ0FBQztJQUVELGFBQWEsQ0FBQyxNQUFjO1FBQzFCLElBQUksQ0FBQztZQUNILElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUMvQixPQUFPLElBQUksQ0FBQztRQUNkLENBQUM7UUFBQyxPQUFPLEdBQUcsRUFBRSxDQUFDO1lBQ2IsT0FBTyxLQUFLLENBQUM7UUFDZixDQUFDO0lBQ0gsQ0FBQztJQUVELGlCQUFpQixDQUFDLE1BQWM7UUFDOUIsUUFBUSxNQUFNLEVBQUUsQ0FBQztZQUNmLEtBQUssZ0JBQWdCO2dCQUNuQixPQUFPLHVDQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztZQUNuQyxLQUFLLHNCQUFzQjtnQkFDekIsT0FBTyx1Q0FBSSxDQUFDLHdCQUF3QixFQUFFLENBQUM7WUFDekM7Z0JBQ0UsSUFBSSxDQUFDO29CQUNILHVDQUF1QztvQkFDdkMsT0FBTyx1Q0FBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsQ0FBQztnQkFDbEMsQ0FBQztnQkFBQyxPQUFPLEdBQUcsRUFBRSxDQUFDO29CQUNiLHVDQUF1QztvQkFDdkMsd0NBQXdDO29CQUN4QyxNQUFNLGFBQWEsR0FBRyxlQUFNLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDO29CQUM1QyxNQUFNLFlBQVksR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLGVBQU0sQ0FBQyxTQUFTLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7b0JBQ3hFLE1BQU0sTUFBTSxHQUFHLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQztvQkFDL0IsTUFBTSxRQUFRLEdBQUcsWUFBWSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQztvQkFFMUMsTUFBTSxPQUFPLEdBQUcsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO29CQUNyQyxNQUFNLGNBQWMsR0FBRyxNQUFNLEdBQUcsSUFBSSxDQUFDO29CQUVyQyxJQUFJLE9BQU8sS0FBSyxJQUFJLEVBQUUsQ0FBQzt3QkFDckIsTUFBTSxJQUFJLEtBQUssQ0FBQywyQkFBMkIsQ0FBQyxDQUFDO29CQUMvQyxDQUFDO29CQUVELFFBQVEsY0FBYyxFQUFFLENBQUM7d0JBQ3ZCLEtBQUssSUFBSTs0QkFDUCxNQUFNLGNBQWMsR0FBRyxpREFBYyxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUMsQ0FBQzs0QkFDM0QsT0FBTyx1Q0FBSSxDQUFDLFlBQVksQ0FBQyxjQUFjLENBQUMsQ0FBQzt3QkFDM0MsS0FBSyxJQUFJOzRCQUNQLE1BQU0sVUFBVSxHQUFHLDZDQUFVLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxDQUFDOzRCQUNuRCxPQUFPLHVDQUFJLENBQUMsZUFBZSxDQUFDLFVBQVUsQ0FBQyxDQUFDO3dCQUMxQzs0QkFDRSxNQUFNLElBQUksS0FBSyxDQUFDLGtDQUFrQyxDQUFDLENBQUM7b0JBQ3hELENBQUM7Z0JBQ0gsQ0FBQztRQUNMLENBQUM7SUFDSCxDQUFDO0lBRUQsaUJBQWlCLENBQUMsSUFBVTtRQUMxQixRQUFRLElBQUksQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDO1lBQ3BCLEtBQUssMkNBQVEsQ0FBQyxhQUFhO2dCQUN6QixPQUFPLDJCQUFtQixDQUFDO1lBQzdCLEtBQUssMkNBQVEsQ0FBQyxrQkFBa0I7Z0JBQzlCLE9BQU8saUNBQXlCLENBQUM7WUFDbkM7Z0JBQ0UsT0FBTyxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7UUFDNUIsQ0FBQztJQUNILENBQUM7SUFFRCxrQkFBa0I7SUFDbEIsc0RBQXNEO0lBQ3RELGNBQWMsQ0FBQyxPQUFlO1FBQzVCLE1BQU0sZ0JBQWdCLEdBQUcsQ0FBQyxNQUFNLEVBQUUsV0FBVyxFQUFFLE9BQU8sRUFBRSxZQUFZLENBQUMsQ0FBQztRQUN0RSxNQUFNLGFBQWEsR0FBRyxFQUFFLENBQUM7UUFDekIsTUFBTSw4QkFBOEIsR0FBRyxFQUFFLENBQUM7UUFDMUMsTUFBTSxnQkFBZ0IsR0FBRyxFQUFFLENBQUM7UUFDNUIsTUFBTSxrQkFBa0IsR0FBRyxFQUFFLENBQUM7UUFFOUIsMENBQTBDO1FBQzFDLElBQUksSUFBSSxNQUFNLENBQUMsS0FBSyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDO1lBQ2pFLElBQUksQ0FBQztnQkFDSCxNQUFNLFdBQVcsR0FBRyxlQUFNLENBQUMsTUFBTSxDQUFDLE9BQU8sRUFBRSxHQUFHLENBQUMsQ0FBQztnQkFDaEQsTUFBTSxVQUFVLEdBQUcsV0FBVyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUM7Z0JBQzVDLElBQ0UsZ0JBQWdCLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUM7b0JBQzdDLENBQUMsVUFBVSxLQUFLLGFBQWE7d0JBQzNCLFVBQVUsS0FBSyw4QkFBOEI7d0JBQzdDLFVBQVUsS0FBSyxnQkFBZ0IsQ0FBQyxFQUNsQyxDQUFDO29CQUNELE9BQU8sSUFBSSxDQUFDO2dCQUNkLENBQUM7WUFDSCxDQUFDO1lBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztnQkFDWCxPQUFPLENBQUMsR0FBRyxDQUFDLFlBQVksT0FBTyxtQ0FBbUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUN6RSxDQUFDO1FBQ0gsQ0FBQztRQUVELCtCQUErQjtRQUMvQixJQUFJLElBQUksTUFBTSxDQUFDLHFCQUFxQixrQkFBa0IsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7WUFDMUUsT0FBTyxJQUFJLENBQUM7UUFDZCxDQUFDO1FBRUQsNkJBQTZCO1FBQzdCLElBQUksQ0FBQztZQUNILE1BQU0sT0FBTyxHQUFHLGNBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUM7WUFDckMsTUFBTSxRQUFRLEdBQUcsY0FBSSxDQUFDLGVBQWUsQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUMvQyxPQUFPLEtBQUssQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLElBQUksUUFBUSxDQUFDLE1BQU0sSUFBSSxDQUFDLENBQUM7UUFDekQsQ0FBQztRQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7WUFDWCxPQUFPLENBQUMsR0FBRyxDQUFDLFlBQVksT0FBTyxrQ0FBa0MsQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUN0RSxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUN2QixDQUFDO1FBRUQsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0lBRUQsa0JBQWtCO0lBQ2xCLGNBQWMsQ0FBQyxJQUFZO1FBQ3pCLE9BQU8sSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNwQyxDQUFDO0lBRUQsa0JBQWtCO0lBQ2xCLGlCQUFpQixDQUFDLEdBQVc7UUFDM0Isd0VBQXdFO1FBQ3hFLE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUM5QixDQUFDO0lBRUQsVUFBVSxDQUFDLEdBQVc7UUFDcEIsSUFBSSxDQUFDO1lBQ0gsSUFBSSxpQkFBTyxDQUFDLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUM7WUFDMUIsT0FBTyxJQUFJLENBQUM7UUFDZCxDQUFDO1FBQUMsTUFBTSxDQUFDO1lBQ1AsT0FBTyxLQUFLLENBQUM7UUFDZixDQUFDO0lBQ0gsQ0FBQztJQUVELGtCQUFrQjtJQUNsQixnQkFBZ0IsQ0FBQyxNQUFjO1FBQzdCLElBQUksQ0FBQztZQUNILElBQUksaUJBQU8sQ0FBQyxFQUFFLEdBQUcsRUFBRSxNQUFNLEVBQUUsQ0FBQyxDQUFDO1lBQzdCLE9BQU8sSUFBSSxDQUFDO1FBQ2QsQ0FBQztRQUFDLE1BQU0sQ0FBQztZQUNQLE9BQU8sS0FBSyxDQUFDO1FBQ2YsQ0FBQztJQUNILENBQUM7SUFFRCxrQkFBa0I7SUFDbEIsZ0JBQWdCLENBQUMsU0FBaUI7UUFDaEMsSUFBSSxDQUFDO1lBQ0gsbURBQWdCLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1lBQ3JDLE9BQU8sSUFBSSxDQUFDO1FBQ2QsQ0FBQztRQUFDLE9BQU8sR0FBRyxFQUFFLENBQUM7WUFDYixPQUFPLEtBQUssQ0FBQztRQUNmLENBQUM7SUFDSCxDQUFDO0lBRUQsa0JBQWtCO0lBQ2xCLG9CQUFvQixDQUFDLElBQVk7UUFDL0IsT0FBTyxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3BDLENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsa0JBQWtCLENBQUMsWUFBb0I7UUFDckMsTUFBTSxTQUFTLEdBQUcsZ0JBQWdCLENBQUM7UUFDbkMsTUFBTSxvQkFBb0IsR0FBRyxTQUFTLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQztZQUN2RCxDQUFDLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxZQUFZLEVBQUUsS0FBSyxDQUFDO1lBQ2xDLENBQUMsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFlBQVksRUFBRSxRQUFRLENBQUMsQ0FBQztRQUN4QyxPQUFPLE1BQU0sQ0FBQyxJQUFJLENBQUMsOENBQWtCLENBQUMsVUFBVSxDQUFDLG9CQUFvQixDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDNUcsQ0FBQztJQUVEOzs7Ozs7T0FNRztJQUNILGdCQUFnQixDQUFDLE9BQWU7UUFDOUIsSUFBSSxDQUFDLE9BQU8sSUFBSSxPQUFPLE9BQU8sS0FBSyxRQUFRLEVBQUUsQ0FBQztZQUM1QyxNQUFNLElBQUksOEJBQW1CLENBQUMsd0NBQXdDLENBQUMsQ0FBQztRQUMxRSxDQUFDO1FBRUQsbURBQW1EO1FBQ25ELElBQUksQ0FBQztZQUNILE9BQU8sMENBQU8sQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDdEMsQ0FBQztRQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7WUFDWCxPQUFPLENBQUMsS0FBSyxDQUFDLGdEQUFnRCxPQUFPLEdBQUcsQ0FBQyxDQUFDO1FBQzVFLENBQUM7UUFFRCxpREFBaUQ7UUFDakQsSUFBSSxDQUFDO1lBQ0gsT0FBTywrQ0FBWSxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsQ0FBQyxVQUFVLEVBQUUsQ0FBQztRQUN4RCxDQUFDO1FBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztZQUNYLE9BQU8sQ0FBQyxLQUFLLENBQUMsK0NBQStDLE9BQU8sR0FBRyxDQUFDLENBQUM7UUFDM0UsQ0FBQztRQUNELE1BQU0sSUFBSSw4QkFBbUIsQ0FBQyx5REFBeUQsQ0FBQyxDQUFDO0lBQzNGLENBQUM7SUFFRDs7Ozs7O09BTUc7SUFDSCxnQkFBZ0IsQ0FBQyxPQUFnQjtRQUMvQixrQ0FBa0M7UUFDbEMsSUFDRSw4Q0FBVyxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUM7WUFDakMsb0RBQWlCLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQztZQUN2QyxnREFBYSxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUM7WUFDbkMsaURBQWMsQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLEVBQ3BDLENBQUM7WUFDRCxPQUFPLE9BQU8sQ0FBQyxTQUFTLEVBQUUsQ0FBQztRQUM3QixDQUFDO1FBRUQsNEJBQTRCO1FBQzVCLE1BQU0sWUFBWSxHQUFHLCtDQUFZLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ3hELElBQUksWUFBWSxFQUFFLENBQUM7WUFDakIsT0FBTyxZQUFZLENBQUMsU0FBUyxFQUFFLENBQUM7UUFDbEMsQ0FBQztRQUVELDJCQUEyQjtRQUMzQixNQUFNLElBQUksOEJBQW1CLENBQUMsMERBQTBELENBQUMsQ0FBQztJQUM1RixDQUFDO0NBQ0Y7QUF2UkQsc0JBdVJDO0FBRUQsTUFBTSxLQUFLLEdBQUcsSUFBSSxLQUFLLEVBQUUsQ0FBQztBQUUxQixrQkFBZSxLQUFLLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBZGRyZXNzRm9ybWF0LCBCYXNlVXRpbHMsIEludmFsaWRBZGRyZXNzRXJyb3IgfSBmcm9tICdAYml0Z28tYmV0YS9zZGstY29yZSc7XG5pbXBvcnQge1xuICBCYXNlQWRkcmVzcyxcbiAgUHVibGljS2V5LFxuICBFZDI1NTE5U2lnbmF0dXJlLFxuICBOZXR3b3JrSW5mbyxcbiAgQ3JlZGVudGlhbCxcbiAgUmV3YXJkQWRkcmVzcyxcbiAgVHJhbnNhY3Rpb24gYXMgQ2FyZGFub1RyYW5zYWN0aW9uLFxuICBEUmVwLFxuICBFZDI1NTE5S2V5SGFzaCxcbiAgU2NyaXB0SGFzaCxcbiAgRFJlcEtpbmQsXG4gIEFkZHJlc3MsXG4gIEVudGVycHJpc2VBZGRyZXNzLFxuICBQb2ludGVyQWRkcmVzcyxcbiAgQnlyb25BZGRyZXNzLFxufSBmcm9tICdAZW11cmdvL2NhcmRhbm8tc2VyaWFsaXphdGlvbi1saWItbm9kZWpzJztcbmltcG9ydCB7IEtleVBhaXIgfSBmcm9tICcuL2tleVBhaXInO1xuaW1wb3J0IHsgYmVjaDMyIH0gZnJvbSAnYmVjaDMyJztcbmltcG9ydCBiczU4IGZyb20gJ2JzNTgnO1xuaW1wb3J0IGNib3IgZnJvbSAnY2Jvcic7XG5cbmV4cG9ydCBjb25zdCBNSU5fQURBX0ZPUl9PTkVfQVNTRVQgPSAnMTUwMDAwMCc7XG5leHBvcnQgY29uc3QgVk9URV9BTFdBWVNfQUJTVEFJTiA9ICdhbHdheXMtYWJzdGFpbic7XG5leHBvcnQgY29uc3QgVk9URV9BTFdBWVNfTk9fQ09ORklERU5DRSA9ICdhbHdheXMtbm8tY29uZmlkZW5jZSc7XG5cbmV4cG9ydCBjbGFzcyBVdGlscyBpbXBsZW1lbnRzIEJhc2VVdGlscyB7XG4gIGNyZWF0ZUJhc2VBZGRyZXNzV2l0aFN0YWtlQW5kUGF5bWVudEtleShcbiAgICBzdGFrZUtleVBhaXI6IEtleVBhaXIsXG4gICAgcGF5bWVudEtleVBhaXI6IEtleVBhaXIsXG4gICAgbmV0d29yazogQWRkcmVzc0Zvcm1hdFxuICApOiBzdHJpbmcge1xuICAgIGxldCBiYXNlQWRkcjtcbiAgICBpZiAobmV0d29yayA9PT0gQWRkcmVzc0Zvcm1hdC5tYWlubmV0KSB7XG4gICAgICAvLyAxLiBjcmVhdGUgc3Rha2UgcHViS2V5XG4gICAgICBjb25zdCBrZXkgPSBzdGFrZUtleVBhaXIuZ2V0S2V5cygpLnB1YjtcblxuICAgICAgY29uc3Qgc3Rha2VQdWIgPSBQdWJsaWNLZXkuZnJvbV9ieXRlcyhCdWZmZXIuZnJvbShrZXksICdoZXgnKSk7XG4gICAgICAvLyAyLiBjcmVhdGUgcGF5bWVudCBwdWJLZXlcbiAgICAgIGNvbnN0IHBheW1lbnRQdWIgPSBQdWJsaWNLZXkuZnJvbV9ieXRlcyhCdWZmZXIuZnJvbShwYXltZW50S2V5UGFpci5nZXRLZXlzKCkucHViLCAnaGV4JykpO1xuICAgICAgLy8gMy4gY3JlYXRlIGZ1bGwgYmFzZSBhZGRyZXNzIGZvciBzdGFraW5nXG4gICAgICBiYXNlQWRkciA9IEJhc2VBZGRyZXNzLm5ldyhcbiAgICAgICAgTmV0d29ya0luZm8ubWFpbm5ldCgpLm5ldHdvcmtfaWQoKSxcbiAgICAgICAgQ3JlZGVudGlhbC5mcm9tX2tleWhhc2gocGF5bWVudFB1Yi5oYXNoKCkpLFxuICAgICAgICBDcmVkZW50aWFsLmZyb21fa2V5aGFzaChzdGFrZVB1Yi5oYXNoKCkpXG4gICAgICApO1xuICAgICAgcmV0dXJuIGJhc2VBZGRyLnRvX2FkZHJlc3MoKS50b19iZWNoMzIoKTtcbiAgICB9IGVsc2UgaWYgKG5ldHdvcmsgPT09IEFkZHJlc3NGb3JtYXQudGVzdG5ldCkge1xuICAgICAgLy8gMS4gY3JlYXRlIHN0YWtlIHB1YktleVxuICAgICAgY29uc3Qgc3Rha2VQdWIgPSBQdWJsaWNLZXkuZnJvbV9ieXRlcyhCdWZmZXIuZnJvbShzdGFrZUtleVBhaXIuZ2V0S2V5cygpLnB1YiwgJ2hleCcpKTtcbiAgICAgIC8vIDIuIGNyZWF0ZSBwYXltZW50IHB1YktleVxuICAgICAgY29uc3QgcGF5bWVudFB1YiA9IFB1YmxpY0tleS5mcm9tX2J5dGVzKEJ1ZmZlci5mcm9tKHBheW1lbnRLZXlQYWlyLmdldEtleXMoKS5wdWIsICdoZXgnKSk7XG4gICAgICAvLyAzLiBjcmVhdGUgZnVsbCBiYXNlIGFkZHJlc3MgZm9yIHN0YWtpbmdcbiAgICAgIGNvbnN0IGJhc2VBZGRyID0gQmFzZUFkZHJlc3MubmV3KFxuICAgICAgICBOZXR3b3JrSW5mby50ZXN0bmV0X3ByZXByb2QoKS5uZXR3b3JrX2lkKCksXG4gICAgICAgIENyZWRlbnRpYWwuZnJvbV9rZXloYXNoKHBheW1lbnRQdWIuaGFzaCgpKSxcbiAgICAgICAgQ3JlZGVudGlhbC5mcm9tX2tleWhhc2goc3Rha2VQdWIuaGFzaCgpKVxuICAgICAgKTtcbiAgICAgIHJldHVybiBiYXNlQWRkci50b19hZGRyZXNzKCkudG9fYmVjaDMyKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignSW1wcm9wZXIgTmV0d29yayBUeXBlIScpO1xuICAgIH1cbiAgfVxuXG4gIHZhbGlkYXRlQmxha2UyYihoYXNoOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICBpZiAoIWhhc2gpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgaWYgKGhhc2gubGVuZ3RoICE9PSA2NCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICByZXR1cm4gaGFzaC5tYXRjaCgvXlthLXpBLVowLTldKyQvKSAhPT0gbnVsbDtcbiAgfVxuXG4gIGdldFJld2FyZEFkZHJlc3Moc3Rha2luZ1B1YktleTogc3RyaW5nLCBjb2luTmFtZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBjb25zdCBzdGFrZVB1YiA9IFB1YmxpY0tleS5mcm9tX2J5dGVzKEJ1ZmZlci5mcm9tKHN0YWtpbmdQdWJLZXksICdoZXgnKSk7XG4gICAgbGV0IHJld2FyZEFkZHJlc3M7XG4gICAgaWYgKGNvaW5OYW1lID09PSAnYWRhJykge1xuICAgICAgcmV3YXJkQWRkcmVzcyA9IFJld2FyZEFkZHJlc3MubmV3KE5ldHdvcmtJbmZvLm1haW5uZXQoKS5uZXR3b3JrX2lkKCksIENyZWRlbnRpYWwuZnJvbV9rZXloYXNoKHN0YWtlUHViLmhhc2goKSkpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXdhcmRBZGRyZXNzID0gUmV3YXJkQWRkcmVzcy5uZXcoXG4gICAgICAgIE5ldHdvcmtJbmZvLnRlc3RuZXRfcHJlcHJvZCgpLm5ldHdvcmtfaWQoKSxcbiAgICAgICAgQ3JlZGVudGlhbC5mcm9tX2tleWhhc2goc3Rha2VQdWIuaGFzaCgpKVxuICAgICAgKTtcbiAgICB9XG4gICAgcmV0dXJuIHJld2FyZEFkZHJlc3MudG9fYWRkcmVzcygpLnRvX2JlY2gzMigpO1xuICB9XG5cbiAgaXNWYWxpZERSZXBJZChkUmVwSWQ6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHRyeSB7XG4gICAgICB0aGlzLmdldERSZXBGcm9tRFJlcElkKGRSZXBJZCk7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cblxuICBnZXREUmVwRnJvbURSZXBJZChkUmVwSWQ6IHN0cmluZyk6IERSZXAge1xuICAgIHN3aXRjaCAoZFJlcElkKSB7XG4gICAgICBjYXNlICdhbHdheXMtYWJzdGFpbic6XG4gICAgICAgIHJldHVybiBEUmVwLm5ld19hbHdheXNfYWJzdGFpbigpO1xuICAgICAgY2FzZSAnYWx3YXlzLW5vLWNvbmZpZGVuY2UnOlxuICAgICAgICByZXR1cm4gRFJlcC5uZXdfYWx3YXlzX25vX2NvbmZpZGVuY2UoKTtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgLy8gZm9yIHBhcnNpbmcgQ0lQLTEwNSBzdGFuZGFyZCBEUmVwIElEXG4gICAgICAgICAgcmV0dXJuIERSZXAuZnJvbV9iZWNoMzIoZFJlcElkKTtcbiAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgLy8gZm9yIHBhcnNpbmcgQ0lQLTEyOSBzdGFuZGFyZCBEUmVwIElEXG4gICAgICAgICAgLy8gaHR0cHM6Ly9jaXBzLmNhcmRhbm8ub3JnL2NpcC9DSVAtMDEyOVxuICAgICAgICAgIGNvbnN0IGRlY29kZWRCZWNoMzIgPSBiZWNoMzIuZGVjb2RlKGRSZXBJZCk7XG4gICAgICAgICAgY29uc3QgZGVjb2RlZEJ5dGVzID0gQnVmZmVyLmZyb20oYmVjaDMyLmZyb21Xb3JkcyhkZWNvZGVkQmVjaDMyLndvcmRzKSk7XG4gICAgICAgICAgY29uc3QgaGVhZGVyID0gZGVjb2RlZEJ5dGVzWzBdO1xuICAgICAgICAgIGNvbnN0IGtleUJ5dGVzID0gZGVjb2RlZEJ5dGVzLnN1YmFycmF5KDEpO1xuXG4gICAgICAgICAgY29uc3Qga2V5VHlwZSA9IChoZWFkZXIgJiAweGYwKSA+PiA0O1xuICAgICAgICAgIGNvbnN0IGNyZWRlbnRpYWxUeXBlID0gaGVhZGVyICYgMHgwZjtcblxuICAgICAgICAgIGlmIChrZXlUeXBlICE9PSAweDAyKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQga2V5IHR5cGUgZm9yIERSZXAnKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBzd2l0Y2ggKGNyZWRlbnRpYWxUeXBlKSB7XG4gICAgICAgICAgICBjYXNlIDB4MDI6XG4gICAgICAgICAgICAgIGNvbnN0IGVkMjU1MTlLZXlIYXNoID0gRWQyNTUxOUtleUhhc2guZnJvbV9ieXRlcyhrZXlCeXRlcyk7XG4gICAgICAgICAgICAgIHJldHVybiBEUmVwLm5ld19rZXlfaGFzaChlZDI1NTE5S2V5SGFzaCk7XG4gICAgICAgICAgICBjYXNlIDB4MDM6XG4gICAgICAgICAgICAgIGNvbnN0IHNjcmlwdEhhc2ggPSBTY3JpcHRIYXNoLmZyb21fYnl0ZXMoa2V5Qnl0ZXMpO1xuICAgICAgICAgICAgICByZXR1cm4gRFJlcC5uZXdfc2NyaXB0X2hhc2goc2NyaXB0SGFzaCk7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgY3JlZGVudGlhbCB0eXBlIGZvciBEUmVwJyk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICB9XG5cbiAgZ2V0RFJlcElkRnJvbURSZXAoZFJlcDogRFJlcCk6IHN0cmluZyB7XG4gICAgc3dpdGNoIChkUmVwLmtpbmQoKSkge1xuICAgICAgY2FzZSBEUmVwS2luZC5BbHdheXNBYnN0YWluOlxuICAgICAgICByZXR1cm4gVk9URV9BTFdBWVNfQUJTVEFJTjtcbiAgICAgIGNhc2UgRFJlcEtpbmQuQWx3YXlzTm9Db25maWRlbmNlOlxuICAgICAgICByZXR1cm4gVk9URV9BTFdBWVNfTk9fQ09ORklERU5DRTtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiBkUmVwLnRvX2JlY2gzMigpO1xuICAgIH1cbiAgfVxuXG4gIC8qKiBAaW5oZXJpdGRvYyAqL1xuICAvLyB0aGlzIHdpbGwgdmFsaWRhdGUgYm90aCBzdGFrZSBhbmQgcGF5bWVudCBhZGRyZXNzZXNcbiAgaXNWYWxpZEFkZHJlc3MoYWRkcmVzczogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgY29uc3QgYmVjaDMyUHJlZml4TGlzdCA9IFsnYWRkcicsICdhZGRyX3Rlc3QnLCAnc3Rha2UnLCAnc3Rha2VfdGVzdCddO1xuICAgIGNvbnN0IEJBU0VfQUREUl9MRU4gPSA5MjtcbiAgICBjb25zdCBSRVdBUkRfQU5EX0VOVEVSUFJJU0VfQUREUl9MRU4gPSA0NztcbiAgICBjb25zdCBQT0lOVEVSX0FERFJfTEVOID0gNTI7XG4gICAgY29uc3QgVkFMSURBVE9SX0FERFJfTEVOID0gNTY7XG5cbiAgICAvL0NoZWNrIGZvciBTaGVsbGV5LWVyYSAoQmVjaDMyKSBhZGRyZXNzZXNcbiAgICBpZiAobmV3IFJlZ0V4cChgXigke2JlY2gzMlByZWZpeExpc3Quam9pbignfCcpfSlgKS50ZXN0KGFkZHJlc3MpKSB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCBkZWNvZGVkQmVjaCA9IGJlY2gzMi5kZWNvZGUoYWRkcmVzcywgMTA4KTtcbiAgICAgICAgY29uc3Qgd29yZExlbmd0aCA9IGRlY29kZWRCZWNoLndvcmRzLmxlbmd0aDtcbiAgICAgICAgaWYgKFxuICAgICAgICAgIGJlY2gzMlByZWZpeExpc3QuaW5jbHVkZXMoZGVjb2RlZEJlY2gucHJlZml4KSAmJlxuICAgICAgICAgICh3b3JkTGVuZ3RoID09PSBCQVNFX0FERFJfTEVOIHx8XG4gICAgICAgICAgICB3b3JkTGVuZ3RoID09PSBSRVdBUkRfQU5EX0VOVEVSUFJJU0VfQUREUl9MRU4gfHxcbiAgICAgICAgICAgIHdvcmRMZW5ndGggPT09IFBPSU5URVJfQUREUl9MRU4pXG4gICAgICAgICkge1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKGBBZGRyZXNzOiAke2FkZHJlc3N9IGZhaWxlZCBCZWNoMzIgdGVzdCB3aXRoIGVycm9yOiAke2V9YCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy9DaGVjayBmb3IgVmFsaWRhdG9yIGFkZHJlc3Nlc1xuICAgIGlmIChuZXcgUmVnRXhwKGBeKD8hcG9vbClbYS16MC05XXske1ZBTElEQVRPUl9BRERSX0xFTn19JGApLnRlc3QoYWRkcmVzcykpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIC8vQ2hlY2sgZm9yIEJ5cm9uLWVyYSBhZGRyZXNzXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGRlY29kZWQgPSBiczU4LmRlY29kZShhZGRyZXNzKTtcbiAgICAgIGNvbnN0IGNib3JEYXRhID0gY2Jvci5kZWNvZGVGaXJzdFN5bmMoZGVjb2RlZCk7XG4gICAgICByZXR1cm4gQXJyYXkuaXNBcnJheShjYm9yRGF0YSkgJiYgY2JvckRhdGEubGVuZ3RoID49IDI7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgY29uc29sZS5sb2coYEFkZHJlc3M6ICR7YWRkcmVzc30gZmFpbGVkIEJ5cm9uIHRlc3Qgd2l0aCBlcnJvcjogJHtlfWApO1xuICAgICAgY29uc29sZS5sb2coZS5zdGFjayk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgLyoqIEBpbmhlcml0ZG9jICovXG4gIGlzVmFsaWRCbG9ja0lkKGhhc2g6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnZhbGlkYXRlQmxha2UyYihoYXNoKTtcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdGRvYyAqL1xuICBpc1ZhbGlkUHJpdmF0ZUtleShrZXk6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIC8vIHRoaXMgd2lsbCByZXR1cm4gdHJ1ZSBmb3IgYm90aCBleHRlbmRlZCBhbmQgbm9uLWV4dGVuZGVkIEVEMjU1MTkga2V5c1xuICAgIHJldHVybiB0aGlzLmlzVmFsaWRLZXkoa2V5KTtcbiAgfVxuXG4gIGlzVmFsaWRLZXkoa2V5OiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICB0cnkge1xuICAgICAgbmV3IEtleVBhaXIoeyBwcnY6IGtleSB9KTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0gY2F0Y2gge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIC8qKiBAaW5oZXJpdGRvYyAqL1xuICBpc1ZhbGlkUHVibGljS2V5KHB1YktleTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgdHJ5IHtcbiAgICAgIG5ldyBLZXlQYWlyKHsgcHViOiBwdWJLZXkgfSk7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IGNhdGNoIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cblxuICAvKiogQGluaGVyaXRkb2MgKi9cbiAgaXNWYWxpZFNpZ25hdHVyZShzaWduYXR1cmU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHRyeSB7XG4gICAgICBFZDI1NTE5U2lnbmF0dXJlLmZyb21faGV4KHNpZ25hdHVyZSk7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cblxuICAvKiogQGluaGVyaXRkb2MgKi9cbiAgaXNWYWxpZFRyYW5zYWN0aW9uSWQodHhJZDogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMudmFsaWRhdGVCbGFrZTJiKHR4SWQpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgdHJhbnNhY3Rpb24gYm9keSBmcm9tIGEgc2VyaWFsaXplZCB0cmFuc2FjdGlvblxuICAgKiBAcGFyYW0ge3N0cmluZ30gc2VyaWFsaXplZFR4IC0gc2VyaWFsaXplZCB0cmFuc2FjdGlvbiBpbiBoZXggb3IgYmFzZTY0IGZvcm1hdFxuICAgKiBAcmV0dXJucyB7c3RyaW5nfSB0cmFuc2FjdGlvbiBib2R5IGluIGhleCBmb3JtYXRcbiAgICovXG4gIGdldFRyYW5zYWN0aW9uQm9keShzZXJpYWxpemVkVHg6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgY29uc3QgSEVYX1JFR0VYID0gL15bMC05YS1mQS1GXSskLztcbiAgICBjb25zdCBidWZmZXJSYXdUcmFuc2FjdGlvbiA9IEhFWF9SRUdFWC50ZXN0KHNlcmlhbGl6ZWRUeClcbiAgICAgID8gQnVmZmVyLmZyb20oc2VyaWFsaXplZFR4LCAnaGV4JylcbiAgICAgIDogQnVmZmVyLmZyb20oc2VyaWFsaXplZFR4LCAnYmFzZTY0Jyk7XG4gICAgcmV0dXJuIEJ1ZmZlci5mcm9tKENhcmRhbm9UcmFuc2FjdGlvbi5mcm9tX2J5dGVzKGJ1ZmZlclJhd1RyYW5zYWN0aW9uKS5ib2R5KCkudG9fYnl0ZXMoKSkudG9TdHJpbmcoJ2hleCcpO1xuICB9XG5cbiAgLyoqXG4gICAqIERlY29kZSB3YWxsZXQgYWRkcmVzcyBmcm9tIHN0cmluZy5cbiAgICogQXR0ZW1wdHMgdG8gZGVjb2RlIGFzIFNoZWxsZXkgKGJlY2gzMikgZmlyc3QsIHRoZW4gQnlyb24gKGJhc2U1OCkuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBhZGRyZXNzIC0gVmFsaWQgQnlyb24gb3IgU2hlbGxleS1lcmEgYWRkcmVzcy5cbiAgICogQHJldHVybnMge0FkZHJlc3N9IC0gVmFsaWQgYWRkcmVzcyBvYmplY3QuXG4gICAqIEB0aHJvd3Mge0ludmFsaWRBZGRyZXNzRXJyb3J9IElmIHRoZSBhZGRyZXNzIGlzIG5laXRoZXIgdmFsaWQgU2hlbGxleSBub3IgQnlyb24uXG4gICAqL1xuICBnZXRXYWxsZXRBZGRyZXNzKGFkZHJlc3M6IHN0cmluZyk6IEFkZHJlc3Mge1xuICAgIGlmICghYWRkcmVzcyB8fCB0eXBlb2YgYWRkcmVzcyAhPT0gJ3N0cmluZycpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQWRkcmVzc0Vycm9yKCdQcm92aWRlZCBhZGRyZXNzIGlzIG5vdCBhIHZhbGlkIHN0cmluZycpO1xuICAgIH1cblxuICAgIC8vIFRyeSBkZWNvZGluZyBhcyBhIFNoZWxsZXkgKGJlY2gzMikgYWRkcmVzcyBmaXJzdFxuICAgIHRyeSB7XG4gICAgICByZXR1cm4gQWRkcmVzcy5mcm9tX2JlY2gzMihhZGRyZXNzKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBjb25zb2xlLmVycm9yKGBDb3VsZCBub3QgZGVjb2RlIHNoZWxseSBhZGRyZXNzIGZyb20gc3RyaW5nICcke2FkZHJlc3N9J2ApO1xuICAgIH1cblxuICAgIC8vIFRyeSBkZWNvZGluZyBhcyBhIEJ5cm9uIChiYXNlNTgpIGFkZHJlc3MgbGF0ZXJcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIEJ5cm9uQWRkcmVzcy5mcm9tX2Jhc2U1OChhZGRyZXNzKS50b19hZGRyZXNzKCk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgY29uc29sZS5lcnJvcihgQ291bGQgbm90IGRlY29kZSBieXJvbiBhZGRyZXNzIGZyb20gc3RyaW5nICcke2FkZHJlc3N9J2ApO1xuICAgIH1cbiAgICB0aHJvdyBuZXcgSW52YWxpZEFkZHJlc3NFcnJvcignUHJvdmlkZWQgc3RyaW5nIGlzIG5vdCBhIHZhbGlkIFNoZWxsZXkgb3IgQnlyb24gYWRkcmVzcycpO1xuICB9XG5cbiAgLyoqXG4gICAqIERlY29kZSBhZGRyZXNzIHN0cmluZyBmcm9tIEFkZHJlc3Mgb2JqZWN0LlxuICAgKiBBdHRlbXB0cyB0byBkZWNvZGUgYXMgU2hlbGxleSAoYmVjaDMyKSBmaXJzdCwgdGhlbiBCeXJvbiAoYmFzZTU4KS5cbiAgICogQHBhcmFtIHtBZGRyZXNzfSBhZGRyZXNzIC0gVmFsaWQgQWRkcmVzcyBvYmplY3RcbiAgICogQHJldHVybnMge3N0cmluZ30gLSBWYWxpZCBCeXJvbiBvciBTaGVsbGV5LWVyYSBhZGRyZXNzIHN0cmluZy5cbiAgICogQHRocm93cyB7SW52YWxpZEFkZHJlc3NFcnJvcn0gSWYgdGhlIEFkZHJlc3Mgb2JqZWN0IGlzIG5laXRoZXIgdmFsaWQgU2hlbGxleSBub3IgQnlyb24uXG4gICAqL1xuICBnZXRBZGRyZXNzU3RyaW5nKGFkZHJlc3M6IEFkZHJlc3MpOiBzdHJpbmcge1xuICAgIC8vIENoZWNrIGFsbCBTaGVsbGV5IGFkZHJlc3MgdHlwZXNcbiAgICBpZiAoXG4gICAgICBCYXNlQWRkcmVzcy5mcm9tX2FkZHJlc3MoYWRkcmVzcykgfHxcbiAgICAgIEVudGVycHJpc2VBZGRyZXNzLmZyb21fYWRkcmVzcyhhZGRyZXNzKSB8fFxuICAgICAgUmV3YXJkQWRkcmVzcy5mcm9tX2FkZHJlc3MoYWRkcmVzcykgfHxcbiAgICAgIFBvaW50ZXJBZGRyZXNzLmZyb21fYWRkcmVzcyhhZGRyZXNzKVxuICAgICkge1xuICAgICAgcmV0dXJuIGFkZHJlc3MudG9fYmVjaDMyKCk7XG4gICAgfVxuXG4gICAgLy8gSWYgbm90IFNoZWxsZXksIHRyeSBCeXJvblxuICAgIGNvbnN0IGJ5cm9uQWRkcmVzcyA9IEJ5cm9uQWRkcmVzcy5mcm9tX2FkZHJlc3MoYWRkcmVzcyk7XG4gICAgaWYgKGJ5cm9uQWRkcmVzcykge1xuICAgICAgcmV0dXJuIGJ5cm9uQWRkcmVzcy50b19iYXNlNTgoKTtcbiAgICB9XG5cbiAgICAvLyBJZiBuZWl0aGVyLCBpdCdzIGludmFsaWRcbiAgICB0aHJvdyBuZXcgSW52YWxpZEFkZHJlc3NFcnJvcignUHJvdmlkZWQgQWRkcmVzcyBpcyBub3QgYSB2YWxpZCBTaGVsbGV5IG9yIEJ5cm9uIGFkZHJlc3MnKTtcbiAgfVxufVxuXG5jb25zdCB1dGlscyA9IG5ldyBVdGlscygpO1xuXG5leHBvcnQgZGVmYXVsdCB1dGlscztcbiJdfQ==
@@ -0,0 +1,24 @@
1
+ import { BaseKey, TransactionType } from '@bitgo-beta/sdk-core';
2
+ import { BaseCoin as CoinConfig } from '@bitgo-beta/statics';
3
+ import { TransactionBuilder } from './transactionBuilder';
4
+ import { Transaction } from './transaction';
5
+ export declare class VoteDelegationBuilder extends TransactionBuilder {
6
+ constructor(_coinConfig: Readonly<CoinConfig>);
7
+ protected get transactionType(): TransactionType;
8
+ /** @inheritdoc */
9
+ initBuilder(tx: Transaction): void;
10
+ /**
11
+ * Creates the proper certificates needed to delegate a user's vote to a given DRep
12
+ *
13
+ * @param stakingPublicKey The user's public stake key
14
+ * @param dRepId The DRep ID of the DRep we will delegate vote to
15
+ */
16
+ addVoteDelegationCertificate(stakingPublicKey: string, dRepId: string): this;
17
+ /** @inheritdoc */
18
+ protected buildImplementation(): Promise<Transaction>;
19
+ /** @inheritdoc */
20
+ protected fromImplementation(rawTransaction: string): Transaction;
21
+ /** @inheritdoc */
22
+ protected signImplementation(key: BaseKey): Transaction;
23
+ }
24
+ //# sourceMappingURL=voteDelegationBuilder.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"voteDelegationBuilder.d.ts","sourceRoot":"","sources":["../../../src/lib/voteDelegationBuilder.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAChE,OAAO,EAAE,QAAQ,IAAI,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAC7D,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAI5C,qBAAa,qBAAsB,SAAQ,kBAAkB;gBAC/C,WAAW,EAAE,QAAQ,CAAC,UAAU,CAAC;IAK7C,SAAS,KAAK,eAAe,IAAI,eAAe,CAE/C;IAED,kBAAkB;IAClB,WAAW,CAAC,EAAE,EAAE,WAAW,GAAG,IAAI;IAIlC;;;;;OAKG;IACH,4BAA4B,CAAC,gBAAgB,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI;IAW5E,kBAAkB;cACF,mBAAmB,IAAI,OAAO,CAAC,WAAW,CAAC;IAM3D,kBAAkB;IAClB,SAAS,CAAC,kBAAkB,CAAC,cAAc,EAAE,MAAM,GAAG,WAAW;IAIjE,kBAAkB;IAClB,SAAS,CAAC,kBAAkB,CAAC,GAAG,EAAE,OAAO,GAAG,WAAW;CAGxD"}
@@ -0,0 +1,84 @@
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 () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ var __importDefault = (this && this.__importDefault) || function (mod) {
36
+ return (mod && mod.__esModule) ? mod : { "default": mod };
37
+ };
38
+ Object.defineProperty(exports, "__esModule", { value: true });
39
+ exports.VoteDelegationBuilder = void 0;
40
+ const sdk_core_1 = require("@bitgo-beta/sdk-core");
41
+ const transactionBuilder_1 = require("./transactionBuilder");
42
+ const CardanoWasm = __importStar(require("@emurgo/cardano-serialization-lib-nodejs"));
43
+ const utils_1 = __importDefault(require("./utils"));
44
+ class VoteDelegationBuilder extends transactionBuilder_1.TransactionBuilder {
45
+ constructor(_coinConfig) {
46
+ super(_coinConfig);
47
+ this._type = sdk_core_1.TransactionType.VoteDelegation;
48
+ }
49
+ get transactionType() {
50
+ return sdk_core_1.TransactionType.VoteDelegation;
51
+ }
52
+ /** @inheritdoc */
53
+ initBuilder(tx) {
54
+ super.initBuilder(tx);
55
+ }
56
+ /**
57
+ * Creates the proper certificates needed to delegate a user's vote to a given DRep
58
+ *
59
+ * @param stakingPublicKey The user's public stake key
60
+ * @param dRepId The DRep ID of the DRep we will delegate vote to
61
+ */
62
+ addVoteDelegationCertificate(stakingPublicKey, dRepId) {
63
+ const stakeCredential = CardanoWasm.Credential.from_keyhash(CardanoWasm.PublicKey.from_bytes(Buffer.from(stakingPublicKey, 'hex')).hash());
64
+ const voteDelegationCert = CardanoWasm.Certificate.new_vote_delegation(CardanoWasm.VoteDelegation.new(stakeCredential, utils_1.default.getDRepFromDRepId(dRepId)));
65
+ this._certs.push(voteDelegationCert);
66
+ return this;
67
+ }
68
+ /** @inheritdoc */
69
+ async buildImplementation() {
70
+ const tx = await super.buildImplementation();
71
+ tx.setTransactionType(sdk_core_1.TransactionType.VoteDelegation);
72
+ return tx;
73
+ }
74
+ /** @inheritdoc */
75
+ fromImplementation(rawTransaction) {
76
+ return super.fromImplementation(rawTransaction);
77
+ }
78
+ /** @inheritdoc */
79
+ signImplementation(key) {
80
+ return super.signImplementation(key);
81
+ }
82
+ }
83
+ exports.VoteDelegationBuilder = VoteDelegationBuilder;
84
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidm90ZURlbGVnYXRpb25CdWlsZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2xpYi92b3RlRGVsZWdhdGlvbkJ1aWxkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsbURBQWdFO0FBRWhFLDZEQUEwRDtBQUUxRCxzRkFBd0U7QUFDeEUsb0RBQStCO0FBRS9CLE1BQWEscUJBQXNCLFNBQVEsdUNBQWtCO0lBQzNELFlBQVksV0FBaUM7UUFDM0MsS0FBSyxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQ25CLElBQUksQ0FBQyxLQUFLLEdBQUcsMEJBQWUsQ0FBQyxjQUFjLENBQUM7SUFDOUMsQ0FBQztJQUVELElBQWMsZUFBZTtRQUMzQixPQUFPLDBCQUFlLENBQUMsY0FBYyxDQUFDO0lBQ3hDLENBQUM7SUFFRCxrQkFBa0I7SUFDbEIsV0FBVyxDQUFDLEVBQWU7UUFDekIsS0FBSyxDQUFDLFdBQVcsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUN4QixDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSCw0QkFBNEIsQ0FBQyxnQkFBd0IsRUFBRSxNQUFjO1FBQ25FLE1BQU0sZUFBZSxHQUFHLFdBQVcsQ0FBQyxVQUFVLENBQUMsWUFBWSxDQUN6RCxXQUFXLENBQUMsU0FBUyxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLGdCQUFnQixFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQzlFLENBQUM7UUFDRixNQUFNLGtCQUFrQixHQUFHLFdBQVcsQ0FBQyxXQUFXLENBQUMsbUJBQW1CLENBQ3BFLFdBQVcsQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUFDLGVBQWUsRUFBRSxlQUFRLENBQUMsaUJBQWlCLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FDcEYsQ0FBQztRQUNGLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLENBQUM7UUFDckMsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRUQsa0JBQWtCO0lBQ1IsS0FBSyxDQUFDLG1CQUFtQjtRQUNqQyxNQUFNLEVBQUUsR0FBRyxNQUFNLEtBQUssQ0FBQyxtQkFBbUIsRUFBRSxDQUFDO1FBQzdDLEVBQUUsQ0FBQyxrQkFBa0IsQ0FBQywwQkFBZSxDQUFDLGNBQWMsQ0FBQyxDQUFDO1FBQ3RELE9BQU8sRUFBRSxDQUFDO0lBQ1osQ0FBQztJQUVELGtCQUFrQjtJQUNSLGtCQUFrQixDQUFDLGNBQXNCO1FBQ2pELE9BQU8sS0FBSyxDQUFDLGtCQUFrQixDQUFDLGNBQWMsQ0FBQyxDQUFDO0lBQ2xELENBQUM7SUFFRCxrQkFBa0I7SUFDUixrQkFBa0IsQ0FBQyxHQUFZO1FBQ3ZDLE9BQU8sS0FBSyxDQUFDLGtCQUFrQixDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ3ZDLENBQUM7Q0FDRjtBQWhERCxzREFnREMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBCYXNlS2V5LCBUcmFuc2FjdGlvblR5cGUgfSBmcm9tICdAYml0Z28tYmV0YS9zZGstY29yZSc7XG5pbXBvcnQgeyBCYXNlQ29pbiBhcyBDb2luQ29uZmlnIH0gZnJvbSAnQGJpdGdvLWJldGEvc3RhdGljcyc7XG5pbXBvcnQgeyBUcmFuc2FjdGlvbkJ1aWxkZXIgfSBmcm9tICcuL3RyYW5zYWN0aW9uQnVpbGRlcic7XG5pbXBvcnQgeyBUcmFuc2FjdGlvbiB9IGZyb20gJy4vdHJhbnNhY3Rpb24nO1xuaW1wb3J0ICogYXMgQ2FyZGFub1dhc20gZnJvbSAnQGVtdXJnby9jYXJkYW5vLXNlcmlhbGl6YXRpb24tbGliLW5vZGVqcyc7XG5pbXBvcnQgYWRhVXRpbHMgZnJvbSAnLi91dGlscyc7XG5cbmV4cG9ydCBjbGFzcyBWb3RlRGVsZWdhdGlvbkJ1aWxkZXIgZXh0ZW5kcyBUcmFuc2FjdGlvbkJ1aWxkZXIge1xuICBjb25zdHJ1Y3RvcihfY29pbkNvbmZpZzogUmVhZG9ubHk8Q29pbkNvbmZpZz4pIHtcbiAgICBzdXBlcihfY29pbkNvbmZpZyk7XG4gICAgdGhpcy5fdHlwZSA9IFRyYW5zYWN0aW9uVHlwZS5Wb3RlRGVsZWdhdGlvbjtcbiAgfVxuXG4gIHByb3RlY3RlZCBnZXQgdHJhbnNhY3Rpb25UeXBlKCk6IFRyYW5zYWN0aW9uVHlwZSB7XG4gICAgcmV0dXJuIFRyYW5zYWN0aW9uVHlwZS5Wb3RlRGVsZWdhdGlvbjtcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdGRvYyAqL1xuICBpbml0QnVpbGRlcih0eDogVHJhbnNhY3Rpb24pOiB2b2lkIHtcbiAgICBzdXBlci5pbml0QnVpbGRlcih0eCk7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlcyB0aGUgcHJvcGVyIGNlcnRpZmljYXRlcyBuZWVkZWQgdG8gZGVsZWdhdGUgYSB1c2VyJ3Mgdm90ZSB0byBhIGdpdmVuIERSZXBcbiAgICpcbiAgICogQHBhcmFtIHN0YWtpbmdQdWJsaWNLZXkgVGhlIHVzZXIncyBwdWJsaWMgc3Rha2Uga2V5XG4gICAqIEBwYXJhbSBkUmVwSWQgVGhlIERSZXAgSUQgb2YgdGhlIERSZXAgd2Ugd2lsbCBkZWxlZ2F0ZSB2b3RlIHRvXG4gICAqL1xuICBhZGRWb3RlRGVsZWdhdGlvbkNlcnRpZmljYXRlKHN0YWtpbmdQdWJsaWNLZXk6IHN0cmluZywgZFJlcElkOiBzdHJpbmcpOiB0aGlzIHtcbiAgICBjb25zdCBzdGFrZUNyZWRlbnRpYWwgPSBDYXJkYW5vV2FzbS5DcmVkZW50aWFsLmZyb21fa2V5aGFzaChcbiAgICAgIENhcmRhbm9XYXNtLlB1YmxpY0tleS5mcm9tX2J5dGVzKEJ1ZmZlci5mcm9tKHN0YWtpbmdQdWJsaWNLZXksICdoZXgnKSkuaGFzaCgpXG4gICAgKTtcbiAgICBjb25zdCB2b3RlRGVsZWdhdGlvbkNlcnQgPSBDYXJkYW5vV2FzbS5DZXJ0aWZpY2F0ZS5uZXdfdm90ZV9kZWxlZ2F0aW9uKFxuICAgICAgQ2FyZGFub1dhc20uVm90ZURlbGVnYXRpb24ubmV3KHN0YWtlQ3JlZGVudGlhbCwgYWRhVXRpbHMuZ2V0RFJlcEZyb21EUmVwSWQoZFJlcElkKSlcbiAgICApO1xuICAgIHRoaXMuX2NlcnRzLnB1c2godm90ZURlbGVnYXRpb25DZXJ0KTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdGRvYyAqL1xuICBwcm90ZWN0ZWQgYXN5bmMgYnVpbGRJbXBsZW1lbnRhdGlvbigpOiBQcm9taXNlPFRyYW5zYWN0aW9uPiB7XG4gICAgY29uc3QgdHggPSBhd2FpdCBzdXBlci5idWlsZEltcGxlbWVudGF0aW9uKCk7XG4gICAgdHguc2V0VHJhbnNhY3Rpb25UeXBlKFRyYW5zYWN0aW9uVHlwZS5Wb3RlRGVsZWdhdGlvbik7XG4gICAgcmV0dXJuIHR4O1xuICB9XG5cbiAgLyoqIEBpbmhlcml0ZG9jICovXG4gIHByb3RlY3RlZCBmcm9tSW1wbGVtZW50YXRpb24ocmF3VHJhbnNhY3Rpb246IHN0cmluZyk6IFRyYW5zYWN0aW9uIHtcbiAgICByZXR1cm4gc3VwZXIuZnJvbUltcGxlbWVudGF0aW9uKHJhd1RyYW5zYWN0aW9uKTtcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdGRvYyAqL1xuICBwcm90ZWN0ZWQgc2lnbkltcGxlbWVudGF0aW9uKGtleTogQmFzZUtleSk6IFRyYW5zYWN0aW9uIHtcbiAgICByZXR1cm4gc3VwZXIuc2lnbkltcGxlbWVudGF0aW9uKGtleSk7XG4gIH1cbn1cbiJdfQ==
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@bitgo-beta/sdk-coin-ada",
3
- "version": "2.3.14-beta.71",
3
+ "version": "2.3.14-beta.711",
4
4
  "description": "BitGo SDK coin library for Ada",
5
5
  "main": "./dist/src/index.js",
6
6
  "types": "./dist/src/index.d.ts",
@@ -18,7 +18,7 @@
18
18
  "author": "BitGo SDK Team <sdkteam@bitgo.com>",
19
19
  "license": "MIT",
20
20
  "engines": {
21
- "node": ">=14 <17"
21
+ "node": ">=18 <21"
22
22
  },
23
23
  "repository": {
24
24
  "type": "git",
@@ -40,19 +40,22 @@
40
40
  ]
41
41
  },
42
42
  "dependencies": {
43
- "@bitgo-beta/sdk-core": "8.2.1-beta.71",
44
- "@bitgo-beta/statics": "15.1.1-beta.73",
45
- "@emurgo/cardano-serialization-lib-browser": "^11.4.0",
46
- "@emurgo/cardano-serialization-lib-nodejs": "^11.4.0",
43
+ "@bitgo-beta/sdk-core": "8.2.1-beta.713",
44
+ "@bitgo-beta/sdk-lib-mpc": "8.2.0-beta.705",
45
+ "@bitgo-beta/statics": "15.1.1-beta.716",
46
+ "@emurgo/cardano-serialization-lib-browser": "^12.0.1",
47
+ "@emurgo/cardano-serialization-lib-nodejs": "^12.0.1",
47
48
  "bech32": "^2.0.0",
48
49
  "bignumber.js": "^9.0.2",
50
+ "bs58": "^6.0.0",
51
+ "cbor": "^10.0.3",
49
52
  "lodash": "^4.17.21",
50
- "superagent": "^3.8.3",
53
+ "superagent": "^9.0.1",
51
54
  "tweetnacl": "^1.0.3"
52
55
  },
53
56
  "devDependencies": {
54
- "@bitgo-beta/sdk-api": "1.10.1-beta.71",
55
- "@bitgo-beta/sdk-test": "^1.2.27"
57
+ "@bitgo-beta/sdk-api": "1.10.1-beta.712",
58
+ "@bitgo-beta/sdk-test": "^8.0.70"
56
59
  },
57
- "gitHead": "9df196af2e2a36ea42ef9307d78fcb962a7ec8cd"
60
+ "gitHead": "8597d429252f85758ea72546a828b5713675cf5d"
58
61
  }