@bitgo/abstract-utxo 11.6.0 → 11.7.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/src/abstractUtxoCoin.d.ts +20 -39
- package/dist/cjs/src/abstractUtxoCoin.d.ts.map +1 -1
- package/dist/cjs/src/abstractUtxoCoin.js +67 -140
- package/dist/cjs/src/impl/doge/doge.d.ts +0 -2
- package/dist/cjs/src/impl/doge/doge.d.ts.map +1 -1
- package/dist/cjs/src/impl/doge/doge.js +1 -4
- package/dist/cjs/src/index.d.ts +0 -1
- package/dist/cjs/src/index.d.ts.map +1 -1
- package/dist/cjs/src/index.js +1 -2
- package/dist/cjs/src/keychains.d.ts +1 -2
- package/dist/cjs/src/keychains.d.ts.map +1 -1
- package/dist/cjs/src/keychains.js +3 -4
- package/dist/cjs/src/names.d.ts +0 -23
- package/dist/cjs/src/names.d.ts.map +1 -1
- package/dist/cjs/src/names.js +2 -140
- package/dist/cjs/src/recovery/backupKeyRecovery.d.ts.map +1 -1
- package/dist/cjs/src/recovery/backupKeyRecovery.js +3 -3
- package/dist/cjs/src/transaction/decode.d.ts +2 -6
- package/dist/cjs/src/transaction/decode.d.ts.map +1 -1
- package/dist/cjs/src/transaction/decode.js +4 -65
- package/dist/cjs/src/transaction/explainTransaction.d.ts +3 -6
- package/dist/cjs/src/transaction/explainTransaction.d.ts.map +1 -1
- package/dist/cjs/src/transaction/explainTransaction.js +4 -12
- package/dist/cjs/src/transaction/fixedScript/explainTransaction.d.ts +1 -37
- package/dist/cjs/src/transaction/fixedScript/explainTransaction.d.ts.map +1 -1
- package/dist/cjs/src/transaction/fixedScript/explainTransaction.js +1 -344
- package/dist/cjs/src/transaction/fixedScript/index.d.ts +0 -2
- package/dist/cjs/src/transaction/fixedScript/index.d.ts.map +1 -1
- package/dist/cjs/src/transaction/fixedScript/index.js +2 -6
- package/dist/cjs/src/transaction/fixedScript/parseTransaction.d.ts.map +1 -1
- package/dist/cjs/src/transaction/fixedScript/parseTransaction.js +1 -2
- package/dist/cjs/src/transaction/fixedScript/signTransaction.d.ts +2 -14
- package/dist/cjs/src/transaction/fixedScript/signTransaction.d.ts.map +1 -1
- package/dist/cjs/src/transaction/fixedScript/signTransaction.js +17 -49
- package/dist/cjs/src/transaction/fixedScript/verifyTransaction.d.ts.map +1 -1
- package/dist/cjs/src/transaction/fixedScript/verifyTransaction.js +4 -51
- package/dist/cjs/src/transaction/index.d.ts +1 -2
- package/dist/cjs/src/transaction/index.d.ts.map +1 -1
- package/dist/cjs/src/transaction/index.js +2 -4
- package/dist/cjs/src/transaction/signTransaction.d.ts.map +1 -1
- package/dist/cjs/src/transaction/signTransaction.js +2 -9
- package/dist/cjs/src/transaction/types.d.ts +1 -4
- package/dist/cjs/src/transaction/types.d.ts.map +1 -1
- package/dist/cjs/src/transaction/types.js +1 -5
- package/dist/cjs/test/unit/address.js +24 -1
- package/dist/cjs/test/unit/buildSignSendLegacyFormat.js +3 -3
- package/dist/cjs/test/unit/customSigner.js +3 -3
- package/dist/cjs/test/unit/prebuildAndSign.js +5 -5
- package/dist/cjs/test/unit/signTransaction.js +9 -9
- package/dist/cjs/test/unit/transaction/fixedScript/explainPsbt.js +25 -47
- package/dist/cjs/test/unit/transaction/fixedScript/parsePsbt.js +19 -84
- package/dist/cjs/test/unit/transaction.js +9 -9
- package/dist/cjs/test/unit/verifyTransaction.js +1 -21
- package/dist/cjs/test/unit/wallet.js +3 -3
- package/dist/cjs/tsconfig.tsbuildinfo +1 -1
- package/dist/esm/abstractUtxoCoin.d.ts +20 -39
- package/dist/esm/abstractUtxoCoin.d.ts.map +1 -1
- package/dist/esm/abstractUtxoCoin.js +71 -111
- package/dist/esm/impl/doge/doge.d.ts +0 -2
- package/dist/esm/impl/doge/doge.d.ts.map +1 -1
- package/dist/esm/impl/doge/doge.js +1 -4
- package/dist/esm/index.d.ts +0 -1
- package/dist/esm/index.d.ts.map +1 -1
- package/dist/esm/index.js +1 -2
- package/dist/esm/keychains.d.ts +1 -2
- package/dist/esm/keychains.d.ts.map +1 -1
- package/dist/esm/keychains.js +3 -4
- package/dist/esm/names.d.ts +0 -23
- package/dist/esm/names.d.ts.map +1 -1
- package/dist/esm/names.js +1 -102
- package/dist/esm/recovery/backupKeyRecovery.d.ts.map +1 -1
- package/dist/esm/recovery/backupKeyRecovery.js +4 -4
- package/dist/esm/transaction/decode.d.ts +2 -6
- package/dist/esm/transaction/decode.d.ts.map +1 -1
- package/dist/esm/transaction/decode.js +4 -31
- package/dist/esm/transaction/explainTransaction.d.ts +3 -6
- package/dist/esm/transaction/explainTransaction.d.ts.map +1 -1
- package/dist/esm/transaction/explainTransaction.js +4 -12
- package/dist/esm/transaction/fixedScript/explainTransaction.d.ts +1 -37
- package/dist/esm/transaction/fixedScript/explainTransaction.d.ts.map +1 -1
- package/dist/esm/transaction/fixedScript/explainTransaction.js +2 -309
- package/dist/esm/transaction/fixedScript/index.d.ts +0 -2
- package/dist/esm/transaction/fixedScript/index.d.ts.map +1 -1
- package/dist/esm/transaction/fixedScript/index.js +1 -3
- package/dist/esm/transaction/fixedScript/parseTransaction.d.ts.map +1 -1
- package/dist/esm/transaction/fixedScript/parseTransaction.js +1 -2
- package/dist/esm/transaction/fixedScript/signTransaction.d.ts +2 -14
- package/dist/esm/transaction/fixedScript/signTransaction.d.ts.map +1 -1
- package/dist/esm/transaction/fixedScript/signTransaction.js +17 -49
- package/dist/esm/transaction/fixedScript/verifyTransaction.d.ts.map +1 -1
- package/dist/esm/transaction/fixedScript/verifyTransaction.js +4 -18
- package/dist/esm/transaction/index.d.ts +1 -2
- package/dist/esm/transaction/index.d.ts.map +1 -1
- package/dist/esm/transaction/index.js +2 -3
- package/dist/esm/transaction/signTransaction.d.ts.map +1 -1
- package/dist/esm/transaction/signTransaction.js +3 -10
- package/dist/esm/transaction/types.d.ts +1 -4
- package/dist/esm/transaction/types.d.ts.map +1 -1
- package/dist/esm/transaction/types.js +2 -4
- package/package.json +6 -5
- package/dist/cjs/src/transaction/fetchInputs.d.ts +0 -27
- package/dist/cjs/src/transaction/fetchInputs.d.ts.map +0 -1
- package/dist/cjs/src/transaction/fetchInputs.js +0 -111
- package/dist/cjs/src/transaction/fixedScript/signLegacyTransaction.d.ts +0 -32
- package/dist/cjs/src/transaction/fixedScript/signLegacyTransaction.d.ts.map +0 -1
- package/dist/cjs/src/transaction/fixedScript/signLegacyTransaction.js +0 -163
- package/dist/cjs/src/transaction/fixedScript/signPsbtUtxolib.d.ts +0 -20
- package/dist/cjs/src/transaction/fixedScript/signPsbtUtxolib.d.ts.map +0 -1
- package/dist/cjs/src/transaction/fixedScript/signPsbtUtxolib.js +0 -157
- package/dist/cjs/src/wasmUtil.d.ts +0 -34
- package/dist/cjs/src/wasmUtil.d.ts.map +0 -1
- package/dist/cjs/src/wasmUtil.js +0 -95
- package/dist/esm/transaction/fetchInputs.d.ts +0 -27
- package/dist/esm/transaction/fetchInputs.d.ts.map +0 -1
- package/dist/esm/transaction/fetchInputs.js +0 -74
- package/dist/esm/transaction/fixedScript/signLegacyTransaction.d.ts +0 -32
- package/dist/esm/transaction/fixedScript/signLegacyTransaction.d.ts.map +0 -1
- package/dist/esm/transaction/fixedScript/signLegacyTransaction.js +0 -123
- package/dist/esm/transaction/fixedScript/signPsbtUtxolib.d.ts +0 -20
- package/dist/esm/transaction/fixedScript/signPsbtUtxolib.d.ts.map +0 -1
- package/dist/esm/transaction/fixedScript/signPsbtUtxolib.js +0 -117
- package/dist/esm/wasmUtil.d.ts +0 -34
- package/dist/esm/wasmUtil.d.ts.map +0 -1
- package/dist/esm/wasmUtil.js +0 -54
|
@@ -1,309 +1,2 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
import { bitgo } from '@bitgo/utxo-lib';
|
|
4
|
-
import { BIP32 } from '@bitgo/wasm-utxo';
|
|
5
|
-
import * as utxocore from '@bitgo/utxo-core';
|
|
6
|
-
import { toExtendedAddressFormat } from '../recipient';
|
|
7
|
-
import { getPayGoVerificationPubkey } from '../getPayGoVerificationPubkey';
|
|
8
|
-
import { toBip32Triple } from '../../keychains';
|
|
9
|
-
import { toUtxolibBIP32 } from '../../wasmUtil';
|
|
10
|
-
import { getNetworkFromCoinName } from '../../names';
|
|
11
|
-
function toChangeOutput(txOutput, coinName, changeInfo) {
|
|
12
|
-
if (!changeInfo) {
|
|
13
|
-
return undefined;
|
|
14
|
-
}
|
|
15
|
-
const address = toExtendedAddressFormat(txOutput.script, coinName);
|
|
16
|
-
const change = changeInfo.find((change) => change.address === address);
|
|
17
|
-
if (!change) {
|
|
18
|
-
return undefined;
|
|
19
|
-
}
|
|
20
|
-
return {
|
|
21
|
-
address,
|
|
22
|
-
amount: txOutput.value.toString(),
|
|
23
|
-
chain: change.chain,
|
|
24
|
-
index: change.index,
|
|
25
|
-
external: false,
|
|
26
|
-
};
|
|
27
|
-
}
|
|
28
|
-
function outputSum(outputs) {
|
|
29
|
-
return outputs.reduce((sum, output) => sum + BigInt(output.amount), BigInt(0));
|
|
30
|
-
}
|
|
31
|
-
function explainCommon(tx, params, coinName) {
|
|
32
|
-
const displayOrder = ['id', 'outputAmount', 'changeAmount', 'outputs', 'changeOutputs'];
|
|
33
|
-
const changeOutputs = [];
|
|
34
|
-
const customChangeOutputs = [];
|
|
35
|
-
const externalOutputs = [];
|
|
36
|
-
const { changeInfo, customChangeInfo } = params;
|
|
37
|
-
tx.outs.forEach((currentOutput) => {
|
|
38
|
-
// Try to encode the script pubkey with an address. If it fails, try to parse it as an OP_RETURN output with the prefix.
|
|
39
|
-
// If that fails, then it is an unrecognized scriptPubkey and should fail
|
|
40
|
-
const currentAddress = toExtendedAddressFormat(currentOutput.script, coinName);
|
|
41
|
-
const currentAmount = BigInt(currentOutput.value);
|
|
42
|
-
const changeOutput = toChangeOutput(currentOutput, coinName, changeInfo);
|
|
43
|
-
if (changeOutput) {
|
|
44
|
-
changeOutputs.push(changeOutput);
|
|
45
|
-
return;
|
|
46
|
-
}
|
|
47
|
-
const customChangeOutput = toChangeOutput(currentOutput, coinName, customChangeInfo);
|
|
48
|
-
if (customChangeOutput) {
|
|
49
|
-
customChangeOutputs.push(customChangeOutput);
|
|
50
|
-
return;
|
|
51
|
-
}
|
|
52
|
-
externalOutputs.push({
|
|
53
|
-
address: currentAddress,
|
|
54
|
-
amount: currentAmount.toString(),
|
|
55
|
-
// If changeInfo has a length greater than or equal to zero, it means that the change information
|
|
56
|
-
// was provided to the function but the output was not identified as change. In this case,
|
|
57
|
-
// the output is external, and we can set it as so. If changeInfo is undefined, it means we were
|
|
58
|
-
// given no information about change outputs, so we can't determine anything about the output,
|
|
59
|
-
// so we leave it undefined.
|
|
60
|
-
external: changeInfo ? true : undefined,
|
|
61
|
-
});
|
|
62
|
-
});
|
|
63
|
-
const outputDetails = {
|
|
64
|
-
outputs: externalOutputs,
|
|
65
|
-
outputAmount: outputSum(externalOutputs).toString(),
|
|
66
|
-
changeOutputs,
|
|
67
|
-
changeAmount: outputSum(changeOutputs).toString(),
|
|
68
|
-
customChangeAmount: outputSum(customChangeOutputs).toString(),
|
|
69
|
-
customChangeOutputs,
|
|
70
|
-
};
|
|
71
|
-
let fee;
|
|
72
|
-
let locktime;
|
|
73
|
-
if (params.feeInfo) {
|
|
74
|
-
displayOrder.push('fee');
|
|
75
|
-
fee = params.feeInfo;
|
|
76
|
-
}
|
|
77
|
-
if (Number.isInteger(tx.locktime) && tx.locktime > 0) {
|
|
78
|
-
displayOrder.push('locktime');
|
|
79
|
-
locktime = tx.locktime;
|
|
80
|
-
}
|
|
81
|
-
return { displayOrder, id: tx.getId(), ...outputDetails, fee, locktime };
|
|
82
|
-
}
|
|
83
|
-
function getRootWalletKeys(params) {
|
|
84
|
-
if (params.pubs instanceof bitgo.RootWalletKeys) {
|
|
85
|
-
return params.pubs;
|
|
86
|
-
}
|
|
87
|
-
const keys = params.pubs?.map((xpub) => toUtxolibBIP32(BIP32.fromBase58(xpub)));
|
|
88
|
-
return keys && keys.length === 3 ? new bitgo.RootWalletKeys(keys) : undefined;
|
|
89
|
-
}
|
|
90
|
-
function getPsbtInputSignaturesCount(psbt, params) {
|
|
91
|
-
const rootWalletKeys = getRootWalletKeys(params);
|
|
92
|
-
return rootWalletKeys
|
|
93
|
-
? bitgo.getSignatureValidationArrayPsbt(psbt, rootWalletKeys).map((sv) => sv[1].filter((v) => v).length)
|
|
94
|
-
: Array(psbt.data.inputs.length).fill(0);
|
|
95
|
-
}
|
|
96
|
-
function getTxInputSignaturesCount(tx, params, coinName) {
|
|
97
|
-
const network = getNetworkFromCoinName(coinName);
|
|
98
|
-
const prevOutputs = params.txInfo?.unspents?.map((u) => bitgo.toOutput(u, network));
|
|
99
|
-
const rootWalletKeys = getRootWalletKeys(params);
|
|
100
|
-
const { unspents = [] } = params.txInfo ?? {};
|
|
101
|
-
// get the number of signatures per input
|
|
102
|
-
return tx.ins.map((input, idx) => {
|
|
103
|
-
if (unspents.length !== tx.ins.length) {
|
|
104
|
-
return 0;
|
|
105
|
-
}
|
|
106
|
-
if (!prevOutputs) {
|
|
107
|
-
throw new Error(`invalid state`);
|
|
108
|
-
}
|
|
109
|
-
if (!rootWalletKeys) {
|
|
110
|
-
// no pub keys or incorrect number of pub keys
|
|
111
|
-
return 0;
|
|
112
|
-
}
|
|
113
|
-
try {
|
|
114
|
-
return bitgo.verifySignatureWithUnspent(tx, idx, unspents, rootWalletKeys).filter((v) => v).length;
|
|
115
|
-
}
|
|
116
|
-
catch (e) {
|
|
117
|
-
// some other error occurred and we can't validate the signatures
|
|
118
|
-
return 0;
|
|
119
|
-
}
|
|
120
|
-
});
|
|
121
|
-
}
|
|
122
|
-
function getChainAndIndexFromBip32Derivations(output) {
|
|
123
|
-
const derivations = output.bip32Derivation ?? output.tapBip32Derivation ?? undefined;
|
|
124
|
-
if (!derivations) {
|
|
125
|
-
return undefined;
|
|
126
|
-
}
|
|
127
|
-
const paths = derivations.map((d) => d.path);
|
|
128
|
-
if (!paths || paths.length !== 3) {
|
|
129
|
-
throw new Error('expected 3 paths in bip32Derivation or tapBip32Derivation');
|
|
130
|
-
}
|
|
131
|
-
if (!paths.every((p) => paths[0] === p)) {
|
|
132
|
-
throw new Error('expected all paths to be the same');
|
|
133
|
-
}
|
|
134
|
-
paths.forEach((path) => {
|
|
135
|
-
if (paths[0] !== path) {
|
|
136
|
-
throw new Error('Unable to get a single chain and index on the output because there are different paths for different keys');
|
|
137
|
-
}
|
|
138
|
-
});
|
|
139
|
-
return utxolib.bitgo.getChainAndIndexFromPath(paths[0]);
|
|
140
|
-
}
|
|
141
|
-
function getChangeInfo(psbt, walletKeys) {
|
|
142
|
-
let utxolibKeys;
|
|
143
|
-
try {
|
|
144
|
-
utxolibKeys = walletKeys
|
|
145
|
-
? walletKeys.map((k) => toUtxolibBIP32(k))
|
|
146
|
-
: utxolib.bitgo.getSortedRootNodes(psbt);
|
|
147
|
-
}
|
|
148
|
-
catch (e) {
|
|
149
|
-
if (e instanceof utxolib.bitgo.ErrorNoMultiSigInputFound) {
|
|
150
|
-
return undefined;
|
|
151
|
-
}
|
|
152
|
-
throw e;
|
|
153
|
-
}
|
|
154
|
-
return utxolib.bitgo.findWalletOutputIndices(psbt, utxolibKeys).map((i) => {
|
|
155
|
-
const derivationInformation = getChainAndIndexFromBip32Derivations(psbt.data.outputs[i]);
|
|
156
|
-
if (!derivationInformation) {
|
|
157
|
-
throw new Error('could not find derivation information on bip32Derivation or tapBip32Derivation');
|
|
158
|
-
}
|
|
159
|
-
return {
|
|
160
|
-
address: utxolib.address.fromOutputScript(psbt.txOutputs[i].script, psbt.network),
|
|
161
|
-
external: false,
|
|
162
|
-
...derivationInformation,
|
|
163
|
-
};
|
|
164
|
-
});
|
|
165
|
-
}
|
|
166
|
-
/**
|
|
167
|
-
* Extract PayGo address proof information from the PSBT if present
|
|
168
|
-
* @returns Information about the PayGo proof, including the output index and address
|
|
169
|
-
*/
|
|
170
|
-
function getPayGoVerificationInfo(psbt, coinName) {
|
|
171
|
-
let outputIndex = undefined;
|
|
172
|
-
let address = undefined;
|
|
173
|
-
// Check if this PSBT has any PayGo address proofs
|
|
174
|
-
if (!utxocore.paygo.psbtOutputIncludesPaygoAddressProof(psbt)) {
|
|
175
|
-
return undefined;
|
|
176
|
-
}
|
|
177
|
-
// This pulls the pubkey depending on given network
|
|
178
|
-
const verificationPubkey = getPayGoVerificationPubkey(coinName);
|
|
179
|
-
// find which output index that contains the PayGo proof
|
|
180
|
-
outputIndex = utxocore.paygo.getPayGoAddressProofOutputIndex(psbt);
|
|
181
|
-
if (outputIndex === undefined || !verificationPubkey) {
|
|
182
|
-
return undefined;
|
|
183
|
-
}
|
|
184
|
-
const network = getNetworkFromCoinName(coinName);
|
|
185
|
-
const output = psbt.txOutputs[outputIndex];
|
|
186
|
-
address = utxolib.address.fromOutputScript(output.script, network);
|
|
187
|
-
if (!address) {
|
|
188
|
-
throw new Error(`Can not derive address ${address} Pay Go Attestation.`);
|
|
189
|
-
}
|
|
190
|
-
return { outputIndex, verificationPubkey };
|
|
191
|
-
}
|
|
192
|
-
/**
|
|
193
|
-
* Extract the BIP322 messages and addresses from the PSBT inputs and perform
|
|
194
|
-
* verification on the transaction to ensure that it meets the BIP322 requirements.
|
|
195
|
-
* @returns An array of objects containing the message and address for each input,
|
|
196
|
-
* or undefined if no BIP322 messages are found.
|
|
197
|
-
*/
|
|
198
|
-
function getBip322MessageInfoAndVerify(psbt, coinName) {
|
|
199
|
-
const network = getNetworkFromCoinName(coinName);
|
|
200
|
-
const bip322Messages = [];
|
|
201
|
-
for (let i = 0; i < psbt.data.inputs.length; i++) {
|
|
202
|
-
const message = bip322.getBip322ProofMessageAtIndex(psbt, i);
|
|
203
|
-
if (message) {
|
|
204
|
-
const input = psbt.data.inputs[i];
|
|
205
|
-
if (!input.witnessUtxo) {
|
|
206
|
-
throw new Error(`Missing witnessUtxo for input index ${i}`);
|
|
207
|
-
}
|
|
208
|
-
const scriptPubKey = input.witnessUtxo.script;
|
|
209
|
-
// Verify that the toSpend transaction can be recreated in the PSBT and is encoded correctly in the nonWitnessUtxo
|
|
210
|
-
const toSpend = bip322.buildToSpendTransaction(scriptPubKey, message);
|
|
211
|
-
// Verify that the toSpend transaction ID matches the input's referenced transaction ID
|
|
212
|
-
if (toSpend.getId() !== utxolib.bitgo.getOutputIdForInput(psbt.txInputs[i]).txid) {
|
|
213
|
-
throw new Error(`ToSpend transaction ID does not match the input at index ${i}`);
|
|
214
|
-
}
|
|
215
|
-
// Verify the input specifics
|
|
216
|
-
if (psbt.txInputs[i].sequence !== 0) {
|
|
217
|
-
throw new Error(`Unexpected sequence number at input index ${i}: ${psbt.txInputs[i].sequence}. Expected 0.`);
|
|
218
|
-
}
|
|
219
|
-
if (psbt.txInputs[i].index !== 0) {
|
|
220
|
-
throw new Error(`Unexpected input index at position ${i}: ${psbt.txInputs[i].index}. Expected 0.`);
|
|
221
|
-
}
|
|
222
|
-
bip322Messages.push({
|
|
223
|
-
message: message.toString('utf8'),
|
|
224
|
-
address: utxolib.address.fromOutputScript(scriptPubKey, network),
|
|
225
|
-
});
|
|
226
|
-
}
|
|
227
|
-
}
|
|
228
|
-
if (bip322Messages.length > 0) {
|
|
229
|
-
// If there is a BIP322 message in any input, all inputs must have one.
|
|
230
|
-
if (bip322Messages.length !== psbt.data.inputs.length) {
|
|
231
|
-
throw new Error('Inconsistent BIP322 messages across inputs.');
|
|
232
|
-
}
|
|
233
|
-
// Verify the transaction specifics for BIP322
|
|
234
|
-
if (psbt.version !== 0 && psbt.version !== 2) {
|
|
235
|
-
throw new Error(`Unsupported PSBT version for BIP322: ${psbt.version}. Expected 0 `);
|
|
236
|
-
}
|
|
237
|
-
if (psbt.data.outputs.length !== 1 ||
|
|
238
|
-
psbt.txOutputs[0].script.toString('hex') !== '6a' ||
|
|
239
|
-
psbt.txOutputs[0].value !== 0n) {
|
|
240
|
-
throw new Error(`Invalid PSBT outputs for BIP322. Expected exactly one OP_RETURN output with zero value.`);
|
|
241
|
-
}
|
|
242
|
-
return bip322Messages;
|
|
243
|
-
}
|
|
244
|
-
return undefined;
|
|
245
|
-
}
|
|
246
|
-
/**
|
|
247
|
-
* Decompose a raw psbt into useful information, such as the total amounts,
|
|
248
|
-
* change amounts, and transaction outputs.
|
|
249
|
-
*
|
|
250
|
-
* @param psbt {bitgo.UtxoPsbt} The PSBT to explain
|
|
251
|
-
* @param pubs {bitgo.RootWalletKeys | string[]} The public keys to use for the explanation
|
|
252
|
-
* @param coinName {UtxoCoinName} The coin name to use for the explanation
|
|
253
|
-
* @param strict {boolean} Whether to throw an error if the PayGo address proof is invalid
|
|
254
|
-
*/
|
|
255
|
-
export function explainPsbt(psbt, params, coinName, { strict = true } = {}) {
|
|
256
|
-
const network = getNetworkFromCoinName(coinName);
|
|
257
|
-
const payGoVerificationInfo = getPayGoVerificationInfo(psbt, coinName);
|
|
258
|
-
if (payGoVerificationInfo) {
|
|
259
|
-
try {
|
|
260
|
-
utxocore.paygo.verifyPayGoAddressProof(psbt, payGoVerificationInfo.outputIndex, Buffer.from(BIP32.fromBase58(payGoVerificationInfo.verificationPubkey).publicKey));
|
|
261
|
-
}
|
|
262
|
-
catch (e) {
|
|
263
|
-
if (strict) {
|
|
264
|
-
throw e;
|
|
265
|
-
}
|
|
266
|
-
console.error(e);
|
|
267
|
-
}
|
|
268
|
-
}
|
|
269
|
-
const messages = getBip322MessageInfoAndVerify(psbt, coinName);
|
|
270
|
-
const changeInfo = getChangeInfo(psbt);
|
|
271
|
-
const customChangeInfo = params.customChangePubs
|
|
272
|
-
? getChangeInfo(psbt, toBip32Triple(params.customChangePubs))
|
|
273
|
-
: undefined;
|
|
274
|
-
const tx = psbt.getUnsignedTx();
|
|
275
|
-
const common = explainCommon(tx, { ...params, changeInfo, customChangeInfo }, coinName);
|
|
276
|
-
const inputSignaturesCount = getPsbtInputSignaturesCount(psbt, params);
|
|
277
|
-
// Set fee from subtracting inputs from outputs
|
|
278
|
-
const outputAmount = psbt.txOutputs.reduce((cumulative, curr) => cumulative + BigInt(curr.value), BigInt(0));
|
|
279
|
-
const inputAmount = psbt.txInputs.reduce((cumulative, txInput, i) => {
|
|
280
|
-
const data = psbt.data.inputs[i];
|
|
281
|
-
if (data.witnessUtxo) {
|
|
282
|
-
return cumulative + BigInt(data.witnessUtxo.value);
|
|
283
|
-
}
|
|
284
|
-
else if (data.nonWitnessUtxo) {
|
|
285
|
-
const tx = bitgo.createTransactionFromBuffer(data.nonWitnessUtxo, network, { amountType: 'bigint' });
|
|
286
|
-
return cumulative + BigInt(tx.outs[txInput.index].value);
|
|
287
|
-
}
|
|
288
|
-
else {
|
|
289
|
-
throw new Error('could not find value on input');
|
|
290
|
-
}
|
|
291
|
-
}, BigInt(0));
|
|
292
|
-
return {
|
|
293
|
-
...common,
|
|
294
|
-
fee: (inputAmount - outputAmount).toString(),
|
|
295
|
-
inputSignatures: inputSignaturesCount,
|
|
296
|
-
signatures: inputSignaturesCount.reduce((prev, curr) => (curr > prev ? curr : prev), 0),
|
|
297
|
-
messages,
|
|
298
|
-
};
|
|
299
|
-
}
|
|
300
|
-
export function explainLegacyTx(tx, params, coinName) {
|
|
301
|
-
const common = explainCommon(tx, params, coinName);
|
|
302
|
-
const inputSignaturesCount = getTxInputSignaturesCount(tx, params, coinName);
|
|
303
|
-
return {
|
|
304
|
-
...common,
|
|
305
|
-
inputSignatures: inputSignaturesCount,
|
|
306
|
-
signatures: inputSignaturesCount.reduce((prev, curr) => (curr > prev ? curr : prev), 0),
|
|
307
|
-
};
|
|
308
|
-
}
|
|
309
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXhwbGFpblRyYW5zYWN0aW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL3RyYW5zYWN0aW9uL2ZpeGVkU2NyaXB0L2V4cGxhaW5UcmFuc2FjdGlvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssT0FBTyxNQUFNLGlCQUFpQixDQUFDO0FBQzNDLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUMxQyxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFFeEMsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQ3pDLE9BQU8sS0FBSyxRQUFRLE1BQU0sa0JBQWtCLENBQUM7QUFLN0MsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQ3ZELE9BQU8sRUFBRSwwQkFBMEIsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBQzNFLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUNoRCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDaEQsT0FBTyxFQUFFLHNCQUFzQixFQUFnQixNQUFNLGFBQWEsQ0FBQztBQStEbkUsU0FBUyxjQUFjLENBQ3JCLFFBQTJDLEVBQzNDLFFBQXNCLEVBQ3RCLFVBQTJDO0lBRTNDLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztRQUNoQixPQUFPLFNBQVMsQ0FBQztJQUNuQixDQUFDO0lBQ0QsTUFBTSxPQUFPLEdBQUcsdUJBQXVCLENBQUMsUUFBUSxDQUFDLE1BQU0sRUFBRSxRQUFRLENBQUMsQ0FBQztJQUNuRSxNQUFNLE1BQU0sR0FBRyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxNQUFNLENBQUMsT0FBTyxLQUFLLE9BQU8sQ0FBQyxDQUFDO0lBQ3ZFLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztRQUNa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LENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7S0FDeEYsQ0FBQztBQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyB1dHhvbGliIGZyb20gJ0BiaXRnby91dHhvLWxpYic7XG5pbXBvcnQgeyBiaXAzMjIgfSBmcm9tICdAYml0Z28vdXR4by1jb3JlJztcbmltcG9ydCB7IGJpdGdvIH0gZnJvbSAnQGJpdGdvL3V0eG8tbGliJztcbmltcG9ydCB7IElUcmFuc2FjdGlvbkV4cGxhbmF0aW9uIGFzIEJhc2VUcmFuc2FjdGlvbkV4cGxhbmF0aW9uLCBUcmlwbGUgfSBmcm9tICdAYml0Z28vc2RrLWNvcmUnO1xuaW1wb3J0IHsgQklQMzIgfSBmcm9tICdAYml0Z28vd2FzbS11dHhvJztcbmltcG9ydCAqIGFzIHV0eG9jb3JlIGZyb20gJ0BiaXRnby91dHhvLWNvcmUnO1xuXG5pbXBvcnQgdHlwZSB7IEJpcDMyMk1lc3NhZ2UgfSBmcm9tICcuLi8uLi9hYnN0cmFjdFV0eG9Db2luJztcbmltcG9ydCB0eXBlIHsgT3V0cHV0LCBGaXhlZFNjcmlwdFdhbGxldE91dHB1dCB9IGZyb20gJy4uL3R5cGVzJztcbmltcG9ydCB0eXBlIHsgVW5zcGVudCB9IGZyb20gJy4uLy4uL3Vuc3BlbnQnO1xuaW1wb3J0IHsgdG9FeHRlbmRlZEFkZHJlc3NGb3JtYXQgfSBmcm9tICcuLi9yZWNpcGllbnQnO1xuaW1wb3J0IHsgZ2V0UGF5R29WZXJpZmljYXRpb25QdWJrZXkgfSBmcm9tICcuLi9nZXRQYXlHb1ZlcmlmaWNhdGlvblB1YmtleSc7XG5pbXBvcnQgeyB0b0JpcDMyVHJpcGxlIH0gZnJvbSAnLi4vLi4va2V5Y2hhaW5zJztcbmltcG9ydCB7IHRvVXR4b2xpYkJJUDMyIH0gZnJvbSAnLi4vLi4vd2FzbVV0aWwnO1xuaW1wb3J0IHsgZ2V0TmV0d29ya0Zyb21Db2luTmFtZSwgVXR4b0NvaW5OYW1lIH0gZnJvbSAnLi4vLi4vbmFtZXMnO1xuXG4vLyA9PT09PSBUcmFuc2FjdGlvbiBFeHBsYW5hdGlvbiBUeXBlIERlZmluaXRpb25zID09PT09XG5cbmV4cG9ydCBpbnRlcmZhY2UgQWJzdHJhY3RVdHhvVHJhbnNhY3Rpb25FeHBsYW5hdGlvbjxURmVlID0gc3RyaW5nLCBUQ2hhbmdlT3V0cHV0IGV4dGVuZHMgT3V0cHV0ID0gT3V0cHV0PlxuICBleHRlbmRzIEJhc2VUcmFuc2FjdGlvbkV4cGxhbmF0aW9uPFRGZWUsIHN0cmluZz4ge1xuICAvKiogTk9URTogdGhpcyBhY3R1YWxseSBvbmx5IGNhcHR1cmVzIGV4dGVybmFsIG91dHB1dHMgKi9cbiAgb3V0cHV0czogT3V0cHV0W107XG4gIGNoYW5nZU91dHB1dHM6IFRDaGFuZ2VPdXRwdXRbXTtcbiAgY3VzdG9tQ2hhbmdlT3V0cHV0cz86IFRDaGFuZ2VPdXRwdXRbXTtcbiAgY3VzdG9tQ2hhbmdlQW1vdW50Pzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBCSVAzMjIgbWVzc2FnZXMgZXh0cmFjdGVkIGZyb20gdGhlIHRyYW5zYWN0aW9uIGlucHV0cy5cbiAgICogVGhlc2UgbWVzc2FnZXMgYXJlIHVzZWQgZm9yIHZlcmlmeWluZyB0aGUgdHJhbnNhY3Rpb24gYWdhaW5zdCB0aGUgQklQMzIyIHN0YW5kYXJkLlxuICAgKi9cbiAgbWVzc2FnZXM/OiBCaXAzMjJNZXNzYWdlW107XG59XG5cbi8qKiBAZGVwcmVjYXRlZCAtIHRoZSBzaWduYXR1cmUgZmllbGRzIGFyZSBub3QgdmVyeSB1c2VmdWwgKi9cbmludGVyZmFjZSBUcmFuc2FjdGlvbkV4cGxhbmF0aW9uV2l0aFNpZ25hdHVyZXM8VEZlZSA9IHN0cmluZywgVENoYW5nZU91dHB1dCBleHRlbmRzIE91dHB1dCA9IE91dHB1dD5cbiAgZXh0ZW5kcyBBYnN0cmFjdFV0eG9UcmFuc2FjdGlvbkV4cGxhbmF0aW9uPFRGZWUsIFRDaGFuZ2VPdXRwdXQ+IHtcbiAgLyoqIEBkZXByZWNhdGVkIC0gdW51c2VkIG91dHNpZGUgb2YgdGVzdHMgKi9cbiAgbG9ja3RpbWU/OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIE51bWJlciBvZiBpbnB1dCBzaWduYXR1cmVzIHBlciBpbnB1dC5cbiAgICogQGRlcHJlY2F0ZWQgLSB0aGlzIGlzIG5vdCB2ZXJ5IHVzZWZ1bCB3aXRob3V0IGtub3dpbmcgd2hvIHNpZ25lZCBlYWNoIGlucHV0LlxuICAgKi9cbiAgaW5wdXRTaWduYXR1cmVzOiBudW1iZXJbXTtcblxuICAvKipcbiAgICogSGlnaGVzdCBpbnB1dCBzaWduYXR1cmUgY291bnQgZm9yIHRoZSB0cmFuc2FjdGlvblxuICAgKiBAZGVwcmVjYXRlZCAtIHRoaXMgaXMgbm90IHZlcnkgdXNlZnVsIHdpdGhvdXQga25vd2luZyB3aG8gc2lnbmVkIGVhY2ggaW5wdXQuXG4gICAqL1xuICBzaWduYXR1cmVzOiBudW1iZXI7XG59XG5cbi8qKiBGb3Igb3VyIHdhc20gYmFja2VuZCwgd2UgZG8gbm90IHJldHVybiB0aGUgZGVwcmVjYXRlZCBmaWVsZHMuIFdlIHNldCBURmVlIHRvIHN0cmluZyBmb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkuICovXG5leHBvcnQgdHlwZSBUcmFuc2FjdGlvbkV4cGxhbmF0aW9uV2FzbSA9IEFic3RyYWN0VXR4b1RyYW5zYWN0aW9uRXhwbGFuYXRpb248c3RyaW5nLCBGaXhlZFNjcmlwdFdhbGxldE91dHB1dD4gJiB7XG4gIGlucHV0czogQXJyYXk8eyBhZGRyZXNzOiBzdHJpbmc7IHZhbHVlOiBzdHJpbmc7IHNpZ25lZEJ5OiB7IFtrZXk6IHN0cmluZ106IGJvb2xlYW4gfSB9PjtcbiAgaW5wdXRBbW91bnQ6IHN0cmluZztcbn07XG5cbi8qKiBXaGVuIHBhcnNpbmcgdGhlIGxlZ2FjeSB0cmFuc2FjdGlvbiBmb3JtYXQsIHdlIGNhbm5vdCBhbHdheXMgaW5mZXIgdGhlIGZlZSBzbyB3ZSBzZXQgaXQgdG8gc3RyaW5nIHwgdW5kZWZpbmVkICovXG5leHBvcnQgdHlwZSBUcmFuc2FjdGlvbkV4cGxhbmF0aW9uVXR4b2xpYkxlZ2FjeSA9IFRyYW5zYWN0aW9uRXhwbGFuYXRpb25XaXRoU2lnbmF0dXJlczxzdHJpbmcgfCB1bmRlZmluZWQ+O1xuXG4vKiogV2hlbiBwYXJzaW5nIGEgUFNCVCwgd2UgY2FuIGluZmVyIHRoZSBmZWUgc28gd2Ugc2V0IFRGZWUgdG8gc3RyaW5nLiAqL1xuZXhwb3J0IHR5cGUgVHJhbnNhY3Rpb25FeHBsYW5hdGlvblV0eG9saWJQc2J0ID0gVHJhbnNhY3Rpb25FeHBsYW5hdGlvbldpdGhTaWduYXR1cmVzPHN0cmluZz47XG5cbmV4cG9ydCB0eXBlIFRyYW5zYWN0aW9uRXhwbGFuYXRpb25EZXNjcmlwdG9yID0gVHJhbnNhY3Rpb25FeHBsYW5hdGlvbldpdGhTaWduYXR1cmVzPHN0cmluZywgT3V0cHV0PjtcblxuZXhwb3J0IHR5cGUgVHJhbnNhY3Rpb25FeHBsYW5hdGlvbiA9XG4gIHwgVHJhbnNhY3Rpb25FeHBsYW5hdGlvblV0eG9saWJMZWdhY3lcbiAgfCBUcmFuc2FjdGlvbkV4cGxhbmF0aW9uVXR4b2xpYlBzYnRcbiAgfCBUcmFuc2FjdGlvbkV4cGxhbmF0aW9uV2FzbTtcblxuZXhwb3J0IHR5cGUgQ2hhbmdlQWRkcmVzc0luZm8gPSB7XG4gIGFkZHJlc3M6IHN0cmluZztcbiAgY2hhaW46IG51bWJlcjtcbiAgaW5kZXg6IG51bWJlcjtcbn07XG5cbmZ1bmN0aW9uIHRvQ2hhbmdlT3V0cHV0KFxuICB0eE91dHB1dDogdXR4b2xpYi5UeE91dHB1dDxudW1iZXIgfCBiaWdpbnQ+LFxuICBjb2luTmFtZTogVXR4b0NvaW5OYW1lLFxuICBjaGFuZ2VJbmZvOiBDaGFuZ2VBZGRyZXNzSW5mb1tdIHwgdW5kZWZpbmVkXG4pOiBGaXhlZFNjcmlwdFdhbGxldE91dHB1dCB8IHVuZGVmaW5lZCB7XG4gIGlmICghY2hhbmdlSW5mbykge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbiAgY29uc3QgYWRkcmVzcyA9IHRvRXh0ZW5kZWRBZGRyZXNzRm9ybWF0KHR4T3V0cHV0LnNjcmlwdCwgY29pbk5hbWUpO1xuICBjb25zdCBjaGFuZ2UgPSBjaGFuZ2VJbmZvLmZpbmQoKGNoYW5nZSkgPT4gY2hhbmdlLmFkZHJlc3MgPT09IGFkZHJlc3MpO1xuICBpZiAoIWNoYW5nZSkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbiAgcmV0dXJuIHtcbiAgICBhZGRyZXNzLFxuICAgIGFtb3VudDogdHhPdXRwdXQudmFsdWUudG9TdHJpbmcoKSxcbiAgICBjaGFpbjogY2hhbmdlLmNoYWluLFxuICAgIGluZGV4OiBjaGFuZ2UuaW5kZXgsXG4gICAgZXh0ZXJuYWw6IGZhbHNlLFxuICB9O1xufVxuXG5mdW5jdGlvbiBvdXRwdXRTdW0ob3V0cHV0czogeyBhbW91bnQ6IHN0cmluZyB8IG51bWJlciB9W10pOiBiaWdpbnQge1xuICByZXR1cm4gb3V0cHV0cy5yZWR1Y2UoKHN1bSwgb3V0cHV0KSA9PiBzdW0gKyBCaWdJbnQob3V0cHV0LmFtb3VudCksIEJpZ0ludCgwKSk7XG59XG5cbmZ1bmN0aW9uIGV4cGxhaW5Db21tb248VE51bWJlciBleHRlbmRzIG51bWJlciB8IGJpZ2ludD4oXG4gIHR4OiBiaXRnby5VdHhvVHJhbnNhY3Rpb248VE51bWJlcj4sXG4gIHBhcmFtczoge1xuICAgIGNoYW5nZUluZm8/OiBDaGFuZ2VBZGRyZXNzSW5mb1tdO1xuICAgIGN1c3RvbUNoYW5nZUluZm8/OiBDaGFuZ2VBZGRyZXNzSW5mb1tdO1xuICAgIGZlZUluZm8/OiBzdHJpbmc7XG4gIH0sXG4gIGNvaW5OYW1lOiBVdHhvQ29pbk5hbWVcbikge1xuICBjb25zdCBkaXNwbGF5T3JkZXIgPSBbJ2lkJywgJ291dHB1dEFtb3VudCcsICdjaGFuZ2VBbW91bnQnLCAnb3V0cHV0cycsICdjaGFuZ2VPdXRwdXRzJ107XG4gIGNvbnN0IGNoYW5nZU91dHB1dHM6IEZpeGVkU2NyaXB0V2FsbGV0T3V0cHV0W10gPSBbXTtcbiAgY29uc3QgY3VzdG9tQ2hhbmdlT3V0cHV0czogRml4ZWRTY3JpcHRXYWxsZXRPdXRwdXRbXSA9IFtdO1xuICBjb25zdCBleHRlcm5hbE91dHB1dHM6IE91dHB1dFtdID0gW107XG5cbiAgY29uc3QgeyBjaGFuZ2VJbmZvLCBjdXN0b21DaGFuZ2VJbmZvIH0gPSBwYXJhbXM7XG5cbiAgdHgub3V0cy5mb3JFYWNoKChjdXJyZW50T3V0cHV0KSA9PiB7XG4gICAgLy8gVHJ5IHRvIGVuY29kZSB0aGUgc2NyaXB0IHB1YmtleSB3aXRoIGFuIGFkZHJlc3MuIElmIGl0IGZhaWxzLCB0cnkgdG8gcGFyc2UgaXQgYXMgYW4gT1BfUkVUVVJOIG91dHB1dCB3aXRoIHRoZSBwcmVmaXguXG4gICAgLy8gSWYgdGhhdCBmYWlscywgdGhlbiBpdCBpcyBhbiB1bnJlY29nbml6ZWQgc2NyaXB0UHVia2V5IGFuZCBzaG91bGQgZmFpbFxuICAgIGNvbnN0IGN1cnJlbnRBZGRyZXNzID0gdG9FeHRlbmRlZEFkZHJlc3NGb3JtYXQoY3VycmVudE91dHB1dC5zY3JpcHQsIGNvaW5OYW1lKTtcbiAgICBjb25zdCBjdXJyZW50QW1vdW50ID0gQmlnSW50KGN1cnJlbnRPdXRwdXQudmFsdWUpO1xuXG4gICAgY29uc3QgY2hhbmdlT3V0cHV0ID0gdG9DaGFuZ2VPdXRwdXQoY3VycmVudE91dHB1dCwgY29pbk5hbWUsIGNoYW5nZUluZm8pO1xuICAgIGlmIChjaGFuZ2VPdXRwdXQpIHtcbiAgICAgIGNoYW5nZU91dHB1dHMucHVzaChjaGFuZ2VPdXRwdXQpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGN1c3RvbUNoYW5nZU91dHB1dCA9IHRvQ2hhbmdlT3V0cHV0KGN1cnJlbnRPdXRwdXQsIGNvaW5OYW1lLCBjdXN0b21DaGFuZ2VJbmZvKTtcbiAgICBpZiAoY3VzdG9tQ2hhbmdlT3V0cHV0KSB7XG4gICAgICBjdXN0b21DaGFuZ2VPdXRwdXRzLnB1c2goY3VzdG9tQ2hhbmdlT3V0cHV0KTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBleHRlcm5hbE91dHB1dHMucHVzaCh7XG4gICAgICBhZGRyZXNzOiBjdXJyZW50QWRkcmVzcyxcbiAgICAgIGFtb3VudDogY3VycmVudEFtb3VudC50b1N0cmluZygpLFxuICAgICAgLy8gSWYgY2hhbmdlSW5mbyBoYXMgYSBsZW5ndGggZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIHplcm8sIGl0IG1lYW5zIHRoYXQgdGhlIGNoYW5nZSBpbmZvcm1hdGlvblxuICAgICAgLy8gd2FzIHByb3ZpZGVkIHRvIHRoZSBmdW5jdGlvbiBidXQgdGhlIG91dHB1dCB3YXMgbm90IGlkZW50aWZpZWQgYXMgY2hhbmdlLiBJbiB0aGlzIGNhc2UsXG4gICAgICAvLyB0aGUgb3V0cHV0IGlzIGV4dGVybmFsLCBhbmQgd2UgY2FuIHNldCBpdCBhcyBzby4gSWYgY2hhbmdlSW5mbyBpcyB1bmRlZmluZWQsIGl0IG1lYW5zIHdlIHdlcmVcbiAgICAgIC8vIGdpdmVuIG5vIGluZm9ybWF0aW9uIGFib3V0IGNoYW5nZSBvdXRwdXRzLCBzbyB3ZSBjYW4ndCBkZXRlcm1pbmUgYW55dGhpbmcgYWJvdXQgdGhlIG91dHB1dCxcbiAgICAgIC8vIHNvIHdlIGxlYXZlIGl0IHVuZGVmaW5lZC5cbiAgICAgIGV4dGVybmFsOiBjaGFuZ2VJbmZvID8gdHJ1ZSA6IHVuZGVmaW5lZCxcbiAgICB9KTtcbiAgfSk7XG5cbiAgY29uc3Qgb3V0cHV0RGV0YWlscyA9IHtcbiAgICBvdXRwdXRzOiBleHRlcm5hbE91dHB1dHMsXG4gICAgb3V0cHV0QW1vdW50OiBvdXRwdXRTdW0oZXh0ZXJuYWxPdXRwdXRzKS50b1N0cmluZygpLFxuXG4gICAgY2hhbmdlT3V0cHV0cyxcbiAgICBjaGFuZ2VBbW91bnQ6IG91dHB1dFN1bShjaGFuZ2VPdXRwdXRzKS50b1N0cmluZygpLFxuXG4gICAgY3VzdG9tQ2hhbmdlQW1vdW50OiBvdXRwdXRTdW0oY3VzdG9tQ2hhbmdlT3V0cHV0cykudG9TdHJpbmcoKSxcbiAgICBjdXN0b21DaGFuZ2VPdXRwdXRzLFxuICB9O1xuXG4gIGxldCBmZWU6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgbGV0IGxvY2t0aW1lOiBudW1iZXIgfCB1bmRlZmluZWQ7XG5cbiAgaWYgKHBhcmFtcy5mZWVJbmZvKSB7XG4gICAgZGlzcGxheU9yZGVyLnB1c2goJ2ZlZScpO1xuICAgIGZlZSA9IHBhcmFtcy5mZWVJbmZvO1xuICB9XG5cbiAgaWYgKE51bWJlci5pc0ludGVnZXIodHgubG9ja3RpbWUpICYmIHR4LmxvY2t0aW1lID4gMCkge1xuICAgIGRpc3BsYXlPcmRlci5wdXNoKCdsb2NrdGltZScpO1xuICAgIGxvY2t0aW1lID0gdHgubG9ja3RpbWU7XG4gIH1cblxuICByZXR1cm4geyBkaXNwbGF5T3JkZXIsIGlkOiB0eC5nZXRJZCgpLCAuLi5vdXRwdXREZXRhaWxzLCBmZWUsIGxvY2t0aW1lIH07XG59XG5cbmZ1bmN0aW9uIGdldFJvb3RXYWxsZXRLZXlzKHBhcmFtczogeyBwdWJzPzogYml0Z28uUm9vdFdhbGxldEtleXMgfCBzdHJpbmdbXSB9KTogYml0Z28uUm9vdFdhbGxldEtleXMgfCB1bmRlZmluZWQge1xuICBpZiAocGFyYW1zLnB1YnMgaW5zdGFuY2VvZiBiaXRnby5Sb290V2FsbGV0S2V5cykge1xuICAgIHJldHVybiBwYXJhbXMucHVicztcbiAgfVxuICBjb25zdCBrZXlzID0gcGFyYW1zLnB1YnM/Lm1hcCgoeHB1YikgPT4gdG9VdHhvbGliQklQMzIoQklQMzIuZnJvbUJhc2U1OCh4cHViKSkpO1xuICByZXR1cm4ga2V5cyAmJiBrZXlzLmxlbmd0aCA9PT0gMyA/IG5ldyBiaXRnby5Sb290V2FsbGV0S2V5cyhrZXlzIGFzIFRyaXBsZTx1dHhvbGliLkJJUDMySW50ZXJmYWNlPikgOiB1bmRlZmluZWQ7XG59XG5cbmZ1bmN0aW9uIGdldFBzYnRJbnB1dFNpZ25hdHVyZXNDb3VudChcbiAgcHNidDogYml0Z28uVXR4b1BzYnQsXG4gIHBhcmFtczoge1xuICAgIHB1YnM/OiBiaXRnby5Sb290V2FsbGV0S2V5cyB8IHN0cmluZ1tdO1xuICB9XG4pIHtcbiAgY29uc3Qgcm9vdFdhbGxldEtleXMgPSBnZXRSb290V2FsbGV0S2V5cyhwYXJhbXMpO1xuICByZXR1cm4gcm9vdFdhbGxldEtleXNcbiAgICA/IGJpdGdvLmdldFNpZ25hdHVyZVZhbGlkYXRpb25BcnJheVBzYnQocHNidCwgcm9vdFdhbGxldEtleXMpLm1hcCgoc3YpID0+IHN2WzFdLmZpbHRlcigodikgPT4gdikubGVuZ3RoKVxuICAgIDogKEFycmF5KHBzYnQuZGF0YS5pbnB1dHMubGVuZ3RoKSBhcyBudW1iZXJbXSkuZmlsbCgwKTtcbn1cblxuZnVuY3Rpb24gZ2V0VHhJbnB1dFNpZ25hdHVyZXNDb3VudDxUTnVtYmVyIGV4dGVuZHMgbnVtYmVyIHwgYmlnaW50PihcbiAgdHg6IGJpdGdvLlV0eG9UcmFuc2FjdGlvbjxUTnVtYmVyPixcbiAgcGFyYW1zOiB7XG4gICAgdHhJbmZvPzogeyB1bnNwZW50cz86IFVuc3BlbnQ8VE51bWJlcj5bXSB9O1xuICAgIHB1YnM/OiBiaXRnby5Sb290V2FsbGV0S2V5cyB8IHN0cmluZ1tdO1xuICB9LFxuICBjb2luTmFtZTogVXR4b0NvaW5OYW1lXG4pIHtcbiAgY29uc3QgbmV0d29yayA9IGdldE5ldHdvcmtGcm9tQ29pbk5hbWUoY29pbk5hbWUpO1xuICBjb25zdCBwcmV2T3V0cHV0cyA9IHBhcmFtcy50eEluZm8/LnVuc3BlbnRzPy5tYXAoKHUpID0+IGJpdGdvLnRvT3V0cHV0PFROdW1iZXI+KHUsIG5ldHdvcmspKTtcbiAgY29uc3Qgcm9vdFdhbGxldEtleXMgPSBnZXRSb290V2FsbGV0S2V5cyhwYXJhbXMpO1xuICBjb25zdCB7IHVuc3BlbnRzID0gW10gfSA9IHBhcmFtcy50eEluZm8gPz8ge307XG5cbiAgLy8gZ2V0IHRoZSBudW1iZXIgb2Ygc2lnbmF0dXJlcyBwZXIgaW5wdXRcbiAgcmV0dXJuIHR4Lmlucy5tYXAoKGlucHV0LCBpZHgpOiBudW1iZXIgPT4ge1xuICAgIGlmICh1bnNwZW50cy5sZW5ndGggIT09IHR4Lmlucy5sZW5ndGgpIHtcbiAgICAgIHJldHVybiAwO1xuICAgIH1cbiAgICBpZiAoIXByZXZPdXRwdXRzKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYGludmFsaWQgc3RhdGVgKTtcbiAgICB9XG4gICAgaWYgKCFyb290V2FsbGV0S2V5cykge1xuICAgICAgLy8gbm8gcHViIGtleXMgb3IgaW5jb3JyZWN0IG51bWJlciBvZiBwdWIga2V5c1xuICAgICAgcmV0dXJuIDA7XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICByZXR1cm4gYml0Z28udmVyaWZ5U2lnbmF0dXJlV2l0aFVuc3BlbnQ8VE51bWJlcj4odHgsIGlkeCwgdW5zcGVudHMsIHJvb3RXYWxsZXRLZXlzKS5maWx0ZXIoKHYpID0+IHYpLmxlbmd0aDtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICAvLyBzb21lIG90aGVyIGVycm9yIG9jY3VycmVkIGFuZCB3ZSBjYW4ndCB2YWxpZGF0ZSB0aGUgc2lnbmF0dXJlc1xuICAgICAgcmV0dXJuIDA7XG4gICAgfVxuICB9KTtcbn1cblxuZnVuY3Rpb24gZ2V0Q2hhaW5BbmRJbmRleEZyb21CaXAzMkRlcml2YXRpb25zKG91dHB1dDogYml0Z28uUHNidE91dHB1dCkge1xuICBjb25zdCBkZXJpdmF0aW9ucyA9IG91dHB1dC5iaXAzMkRlcml2YXRpb24gPz8gb3V0cHV0LnRhcEJpcDMyRGVyaXZhdGlvbiA/PyB1bmRlZmluZWQ7XG4gIGlmICghZGVyaXZhdGlvbnMpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG4gIGNvbnN0IHBhdGhzID0gZGVyaXZhdGlvbnMubWFwKChkKSA9PiBkLnBhdGgpO1xuICBpZiAoIXBhdGhzIHx8IHBhdGhzLmxlbmd0aCAhPT0gMykge1xuICAgIHRocm93IG5ldyBFcnJvcignZXhwZWN0ZWQgMyBwYXRocyBpbiBiaXAzMkRlcml2YXRpb24gb3IgdGFwQmlwMzJEZXJpdmF0aW9uJyk7XG4gIH1cbiAgaWYgKCFwYXRocy5ldmVyeSgocCkgPT4gcGF0aHNbMF0gPT09IHApKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdleHBlY3RlZCBhbGwgcGF0aHMgdG8gYmUgdGhlIHNhbWUnKTtcbiAgfVxuXG4gIHBhdGhzLmZvckVhY2goKHBhdGgpID0+IHtcbiAgICBpZiAocGF0aHNbMF0gIT09IHBhdGgpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgJ1VuYWJsZSB0byBnZXQgYSBzaW5nbGUgY2hhaW4gYW5kIGluZGV4IG9uIHRoZSBvdXRwdXQgYmVjYXVzZSB0aGVyZSBhcmUgZGlmZmVyZW50IHBhdGhzIGZvciBkaWZmZXJlbnQga2V5cydcbiAgICAgICk7XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIHV0eG9saWIuYml0Z28uZ2V0Q2hhaW5BbmRJbmRleEZyb21QYXRoKHBhdGhzWzBdKTtcbn1cblxuZnVuY3Rpb24gZ2V0Q2hhbmdlSW5mbyhcbiAgcHNidDogYml0Z28uVXR4b1BzYnQsXG4gIHdhbGxldEtleXM/OiBUcmlwbGU8QklQMzI+IHwgVHJpcGxlPHV0eG9saWIuQklQMzJJbnRlcmZhY2U+XG4pOiBDaGFuZ2VBZGRyZXNzSW5mb1tdIHwgdW5kZWZpbmVkIHtcbiAgbGV0IHV0eG9saWJLZXlzOiBUcmlwbGU8dXR4b2xpYi5CSVAzMkludGVyZmFjZT47XG4gIHRyeSB7XG4gICAgdXR4b2xpYktleXMgPSB3YWxsZXRLZXlzXG4gICAgICA/ICh3YWxsZXRLZXlzLm1hcCgoaykgPT4gdG9VdHhvbGliQklQMzIoaykpIGFzIFRyaXBsZTx1dHhvbGliLkJJUDMySW50ZXJmYWNlPilcbiAgICAgIDogdXR4b2xpYi5iaXRnby5nZXRTb3J0ZWRSb290Tm9kZXMocHNidCk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBpZiAoZSBpbnN0YW5jZW9mIHV0eG9saWIuYml0Z28uRXJyb3JOb011bHRpU2lnSW5wdXRGb3VuZCkge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gICAgdGhyb3cgZTtcbiAgfVxuXG4gIHJldHVybiB1dHhvbGliLmJpdGdvLmZpbmRXYWxsZXRPdXRwdXRJbmRpY2VzKHBzYnQsIHV0eG9saWJLZXlzKS5tYXAoKGkpID0+IHtcbiAgICBjb25zdCBkZXJpdmF0aW9uSW5mb3JtYXRpb24gPSBnZXRDaGFpbkFuZEluZGV4RnJvbUJpcDMyRGVyaXZhdGlvbnMocHNidC5kYXRhLm91dHB1dHNbaV0pO1xuICAgIGlmICghZGVyaXZhdGlvbkluZm9ybWF0aW9uKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ2NvdWxkIG5vdCBmaW5kIGRlcml2YXRpb24gaW5mb3JtYXRpb24gb24gYmlwMzJEZXJpdmF0aW9uIG9yIHRhcEJpcDMyRGVyaXZhdGlvbicpO1xuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgYWRkcmVzczogdXR4b2xpYi5hZGRyZXNzLmZyb21PdXRwdXRTY3JpcHQocHNidC50eE91dHB1dHNbaV0uc2NyaXB0LCBwc2J0Lm5ldHdvcmspLFxuICAgICAgZXh0ZXJuYWw6IGZhbHNlLFxuICAgICAgLi4uZGVyaXZhdGlvbkluZm9ybWF0aW9uLFxuICAgIH07XG4gIH0pO1xufVxuXG4vKipcbiAqIEV4dHJhY3QgUGF5R28gYWRkcmVzcyBwcm9vZiBpbmZvcm1hdGlvbiBmcm9tIHRoZSBQU0JUIGlmIHByZXNlbnRcbiAqIEByZXR1cm5zIEluZm9ybWF0aW9uIGFib3V0IHRoZSBQYXlHbyBwcm9vZiwgaW5jbHVkaW5nIHRoZSBvdXRwdXQgaW5kZXggYW5kIGFkZHJlc3NcbiAqL1xuZnVuY3Rpb24gZ2V0UGF5R29WZXJpZmljYXRpb25JbmZvKFxuICBwc2J0OiBiaXRnby5VdHhvUHNidCxcbiAgY29pbk5hbWU6IFV0eG9Db2luTmFtZVxuKTogeyBvdXRwdXRJbmRleDogbnVtYmVyOyB2ZXJpZmljYXRpb25QdWJrZXk6IHN0cmluZyB9IHwgdW5kZWZpbmVkIHtcbiAgbGV0IG91dHB1dEluZGV4OiBudW1iZXIgfCB1bmRlZmluZWQgPSB1bmRlZmluZWQ7XG4gIGxldCBhZGRyZXNzOiBzdHJpbmcgfCB1bmRlZmluZWQgPSB1bmRlZmluZWQ7XG4gIC8vIENoZWNrIGlmIHRoaXMgUFNCVCBoYXMgYW55IFBheUdvIGFkZHJlc3MgcHJvb2ZzXG4gIGlmICghdXR4b2NvcmUucGF5Z28ucHNidE91dHB1dEluY2x1ZGVzUGF5Z29BZGRyZXNzUHJvb2YocHNidCkpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgLy8gVGhpcyBwdWxscyB0aGUgcHVia2V5IGRlcGVuZGluZyBvbiBnaXZlbiBuZXR3b3JrXG4gIGNvbnN0IHZlcmlmaWNhdGlvblB1YmtleSA9IGdldFBheUdvVmVyaWZpY2F0aW9uUHVia2V5KGNvaW5OYW1lKTtcbiAgLy8gZmluZCB3aGljaCBvdXRwdXQgaW5kZXggdGhhdCBjb250YWlucyB0aGUgUGF5R28gcHJvb2ZcbiAgb3V0cHV0SW5kZXggPSB1dHhvY29yZS5wYXlnby5nZXRQYXlHb0FkZHJlc3NQcm9vZk91dHB1dEluZGV4KHBzYnQpO1xuICBpZiAob3V0cHV0SW5kZXggPT09IHVuZGVmaW5lZCB8fCAhdmVyaWZpY2F0aW9uUHVia2V5KSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuICBjb25zdCBuZXR3b3JrID0gZ2V0TmV0d29ya0Zyb21Db2luTmFtZShjb2luTmFtZSk7XG4gIGNvbnN0IG91dHB1dCA9IHBzYnQudHhPdXRwdXRzW291dHB1dEluZGV4XTtcbiAgYWRkcmVzcyA9IHV0eG9saWIuYWRkcmVzcy5mcm9tT3V0cHV0U2NyaXB0KG91dHB1dC5zY3JpcHQsIG5ldHdvcmspO1xuICBpZiAoIWFkZHJlc3MpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYENhbiBub3QgZGVyaXZlIGFkZHJlc3MgJHthZGRyZXNzfSBQYXkgR28gQXR0ZXN0YXRpb24uYCk7XG4gIH1cblxuICByZXR1cm4geyBvdXRwdXRJbmRleCwgdmVyaWZpY2F0aW9uUHVia2V5IH07XG59XG5cbi8qKlxuICogRXh0cmFjdCB0aGUgQklQMzIyIG1lc3NhZ2VzIGFuZCBhZGRyZXNzZXMgZnJvbSB0aGUgUFNCVCBpbnB1dHMgYW5kIHBlcmZvcm1cbiAqIHZlcmlmaWNhdGlvbiBvbiB0aGUgdHJhbnNhY3Rpb24gdG8gZW5zdXJlIHRoYXQgaXQgbWVldHMgdGhlIEJJUDMyMiByZXF1aXJlbWVudHMuXG4gKiBAcmV0dXJucyBBbiBhcnJheSBvZiBvYmplY3RzIGNvbnRhaW5pbmcgdGhlIG1lc3NhZ2UgYW5kIGFkZHJlc3MgZm9yIGVhY2ggaW5wdXQsXG4gKiAgICAgICAgICBvciB1bmRlZmluZWQgaWYgbm8gQklQMzIyIG1lc3NhZ2VzIGFyZSBmb3VuZC5cbiAqL1xuZnVuY3Rpb24gZ2V0QmlwMzIyTWVzc2FnZUluZm9BbmRWZXJpZnkocHNidDogYml0Z28uVXR4b1BzYnQsIGNvaW5OYW1lOiBVdHhvQ29pbk5hbWUpOiBCaXAzMjJNZXNzYWdlW10gfCB1bmRlZmluZWQge1xuICBjb25zdCBuZXR3b3JrID0gZ2V0TmV0d29ya0Zyb21Db2luTmFtZShjb2luTmFtZSk7XG4gIGNvbnN0IGJpcDMyMk1lc3NhZ2VzOiB7IG1lc3NhZ2U6IHN0cmluZzsgYWRkcmVzczogc3RyaW5nIH1bXSA9IFtdO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IHBzYnQuZGF0YS5pbnB1dHMubGVuZ3RoOyBpKyspIHtcbiAgICBjb25zdCBtZXNzYWdlID0gYmlwMzIyLmdldEJpcDMyMlByb29mTWVzc2FnZUF0SW5kZXgocHNidCwgaSk7XG4gICAgaWYgKG1lc3NhZ2UpIHtcbiAgICAgIGNvbnN0IGlucHV0ID0gcHNidC5kYXRhLmlucHV0c1tpXTtcbiAgICAgIGlmICghaW5wdXQud2l0bmVzc1V0eG8pIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBNaXNzaW5nIHdpdG5lc3NVdHhvIGZvciBpbnB1dCBpbmRleCAke2l9YCk7XG4gICAgICB9XG4gICAgICBjb25zdCBzY3JpcHRQdWJLZXkgPSBpbnB1dC53aXRuZXNzVXR4by5zY3JpcHQ7XG5cbiAgICAgIC8vIFZlcmlmeSB0aGF0IHRoZSB0b1NwZW5kIHRyYW5zYWN0aW9uIGNhbiBiZSByZWNyZWF0ZWQgaW4gdGhlIFBTQlQgYW5kIGlzIGVuY29kZWQgY29ycmVjdGx5IGluIHRoZSBub25XaXRuZXNzVXR4b1xuICAgICAgY29uc3QgdG9TcGVuZCA9IGJpcDMyMi5idWlsZFRvU3BlbmRUcmFuc2FjdGlvbihzY3JpcHRQdWJLZXksIG1lc3NhZ2UpO1xuXG4gICAgICAvLyBWZXJpZnkgdGhhdCB0aGUgdG9TcGVuZCB0cmFuc2FjdGlvbiBJRCBtYXRjaGVzIHRoZSBpbnB1dCdzIHJlZmVyZW5jZWQgdHJhbnNhY3Rpb24gSURcbiAgICAgIGlmICh0b1NwZW5kLmdldElkKCkgIT09IHV0eG9saWIuYml0Z28uZ2V0T3V0cHV0SWRGb3JJbnB1dChwc2J0LnR4SW5wdXRzW2ldKS50eGlkKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgVG9TcGVuZCB0cmFuc2FjdGlvbiBJRCBkb2VzIG5vdCBtYXRjaCB0aGUgaW5wdXQgYXQgaW5kZXggJHtpfWApO1xuICAgICAgfVxuXG4gICAgICAvLyBWZXJpZnkgdGhlIGlucHV0IHNwZWNpZmljc1xuICAgICAgaWYgKHBzYnQudHhJbnB1dHNbaV0uc2VxdWVuY2UgIT09IDApIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbmV4cGVjdGVkIHNlcXVlbmNlIG51bWJlciBhdCBpbnB1dCBpbmRleCAke2l9OiAke3BzYnQudHhJbnB1dHNbaV0uc2VxdWVuY2V9LiBFeHBlY3RlZCAwLmApO1xuICAgICAgfVxuICAgICAgaWYgKHBzYnQudHhJbnB1dHNbaV0uaW5kZXggIT09IDApIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbmV4cGVjdGVkIGlucHV0IGluZGV4IGF0IHBvc2l0aW9uICR7aX06ICR7cHNidC50eElucHV0c1tpXS5pbmRleH0uIEV4cGVjdGVkIDAuYCk7XG4gICAgICB9XG5cbiAgICAgIGJpcDMyMk1lc3NhZ2VzLnB1c2goe1xuICAgICAgICBtZXNzYWdlOiBtZXNzYWdlLnRvU3RyaW5nKCd1dGY4JyksXG4gICAgICAgIGFkZHJlc3M6IHV0eG9saWIuYWRkcmVzcy5mcm9tT3V0cHV0U2NyaXB0KHNjcmlwdFB1YktleSwgbmV0d29yayksXG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBpZiAoYmlwMzIyTWVzc2FnZXMubGVuZ3RoID4gMCkge1xuICAgIC8vIElmIHRoZXJlIGlzIGEgQklQMzIyIG1lc3NhZ2UgaW4gYW55IGlucHV0LCBhbGwgaW5wdXRzIG11c3QgaGF2ZSBvbmUuXG4gICAgaWYgKGJpcDMyMk1lc3NhZ2VzLmxlbmd0aCAhPT0gcHNidC5kYXRhLmlucHV0cy5sZW5ndGgpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignSW5jb25zaXN0ZW50IEJJUDMyMiBtZXNzYWdlcyBhY3Jvc3MgaW5wdXRzLicpO1xuICAgIH1cblxuICAgIC8vIFZlcmlmeSB0aGUgdHJhbnNhY3Rpb24gc3BlY2lmaWNzIGZvciBCSVAzMjJcbiAgICBpZiAocHNidC52ZXJzaW9uICE9PSAwICYmIHBzYnQudmVyc2lvbiAhPT0gMikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbnN1cHBvcnRlZCBQU0JUIHZlcnNpb24gZm9yIEJJUDMyMjogJHtwc2J0LnZlcnNpb259LiBFeHBlY3RlZCAwIGApO1xuICAgIH1cbiAgICBpZiAoXG4gICAgICBwc2J0LmRhdGEub3V0cHV0cy5sZW5ndGggIT09IDEgfHxcbiAgICAgIHBzYnQudHhPdXRwdXRzWzBdLnNjcmlwdC50b1N0cmluZygnaGV4JykgIT09ICc2YScgfHxcbiAgICAgIHBzYnQudHhPdXRwdXRzWzBdLnZhbHVlICE9PSAwblxuICAgICkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIFBTQlQgb3V0cHV0cyBmb3IgQklQMzIyLiBFeHBlY3RlZCBleGFjdGx5IG9uZSBPUF9SRVRVUk4gb3V0cHV0IHdpdGggemVybyB2YWx1ZS5gKTtcbiAgICB9XG5cbiAgICByZXR1cm4gYmlwMzIyTWVzc2FnZXM7XG4gIH1cblxuICByZXR1cm4gdW5kZWZpbmVkO1xufVxuXG4vKipcbiAqIERlY29tcG9zZSBhIHJhdyBwc2J0IGludG8gdXNlZnVsIGluZm9ybWF0aW9uLCBzdWNoIGFzIHRoZSB0b3RhbCBhbW91bnRzLFxuICogY2hhbmdlIGFtb3VudHMsIGFuZCB0cmFuc2FjdGlvbiBvdXRwdXRzLlxuICpcbiAqIEBwYXJhbSBwc2J0IHtiaXRnby5VdHhvUHNidH0gVGhlIFBTQlQgdG8gZXhwbGFpblxuICogQHBhcmFtIHB1YnMge2JpdGdvLlJvb3RXYWxsZXRLZXlzIHwgc3RyaW5nW119IFRoZSBwdWJsaWMga2V5cyB0byB1c2UgZm9yIHRoZSBleHBsYW5hdGlvblxuICogQHBhcmFtIGNvaW5OYW1lIHtVdHhvQ29pbk5hbWV9IFRoZSBjb2luIG5hbWUgdG8gdXNlIGZvciB0aGUgZXhwbGFuYXRpb25cbiAqIEBwYXJhbSBzdHJpY3Qge2Jvb2xlYW59IFdoZXRoZXIgdG8gdGhyb3cgYW4gZXJyb3IgaWYgdGhlIFBheUdvIGFkZHJlc3MgcHJvb2YgaXMgaW52YWxpZFxuICovXG5leHBvcnQgZnVuY3Rpb24gZXhwbGFpblBzYnQoXG4gIHBzYnQ6IGJpdGdvLlV0eG9Qc2J0LFxuICBwYXJhbXM6IHtcbiAgICBwdWJzPzogYml0Z28uUm9vdFdhbGxldEtleXMgfCBzdHJpbmdbXTtcbiAgICBjdXN0b21DaGFuZ2VQdWJzPzogYml0Z28uUm9vdFdhbGxldEtleXMgfCBzdHJpbmdbXTtcbiAgfSxcbiAgY29pbk5hbWU6IFV0eG9Db2luTmFtZSxcbiAgeyBzdHJpY3QgPSB0cnVlIH06IHsgc3RyaWN0PzogYm9vbGVhbiB9ID0ge31cbik6IFRyYW5zYWN0aW9uRXhwbGFuYXRpb25VdHhvbGliUHNidCB7XG4gIGNvbnN0IG5ldHdvcmsgPSBnZXROZXR3b3JrRnJvbUNvaW5OYW1lKGNvaW5OYW1lKTtcbiAgY29uc3QgcGF5R29WZXJpZmljYXRpb25JbmZvID0gZ2V0UGF5R29WZXJpZmljYXRpb25JbmZvKHBzYnQsIGNvaW5OYW1lKTtcbiAgaWYgKHBheUdvVmVyaWZpY2F0aW9uSW5mbykge1xuICAgIHRyeSB7XG4gICAgICB1dHhvY29yZS5wYXlnby52ZXJpZnlQYXlHb0FkZHJlc3NQcm9vZihcbiAgICAgICAgcHNidCxcbiAgICAgICAgcGF5R29WZXJpZmljYXRpb25JbmZvLm91dHB1dEluZGV4LFxuICAgICAgICBCdWZmZXIuZnJvbShCSVAzMi5mcm9tQmFzZTU4KHBheUdvVmVyaWZpY2F0aW9uSW5mby52ZXJpZmljYXRpb25QdWJrZXkpLnB1YmxpY0tleSlcbiAgICAgICk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgaWYgKHN0cmljdCkge1xuICAgICAgICB0aHJvdyBlO1xuICAgICAgfVxuICAgICAgY29uc29sZS5lcnJvcihlKTtcbiAgICB9XG4gIH1cblxuICBjb25zdCBtZXNzYWdlcyA9IGdldEJpcDMyMk1lc3NhZ2VJbmZvQW5kVmVyaWZ5KHBzYnQsIGNvaW5OYW1lKTtcbiAgY29uc3QgY2hhbmdlSW5mbyA9IGdldENoYW5nZUluZm8ocHNidCk7XG4gIGNvbnN0IGN1c3RvbUNoYW5nZUluZm8gPSBwYXJhbXMuY3VzdG9tQ2hhbmdlUHVic1xuICAgID8gZ2V0Q2hhbmdlSW5mbyhwc2J0LCB0b0JpcDMyVHJpcGxlKHBhcmFtcy5jdXN0b21DaGFuZ2VQdWJzKSlcbiAgICA6IHVuZGVmaW5lZDtcbiAgY29uc3QgdHggPSBwc2J0LmdldFVuc2lnbmVkVHgoKTtcbiAgY29uc3QgY29tbW9uID0gZXhwbGFpbkNvbW1vbih0eCwgeyAuLi5wYXJhbXMsIGNoYW5nZUluZm8sIGN1c3RvbUNoYW5nZUluZm8gfSwgY29pbk5hbWUpO1xuICBjb25zdCBpbnB1dFNpZ25hdHVyZXNDb3VudCA9IGdldFBzYnRJbnB1dFNpZ25hdHVyZXNDb3VudChwc2J0LCBwYXJhbXMpO1xuXG4gIC8vIFNldCBmZWUgZnJvbSBzdWJ0cmFjdGluZyBpbnB1dHMgZnJvbSBvdXRwdXRzXG4gIGNvbnN0IG91dHB1dEFtb3VudCA9IHBzYnQudHhPdXRwdXRzLnJlZHVjZSgoY3VtdWxhdGl2ZSwgY3VycikgPT4gY3VtdWxhdGl2ZSArIEJpZ0ludChjdXJyLnZhbHVlKSwgQmlnSW50KDApKTtcbiAgY29uc3QgaW5wdXRBbW91bnQgPSBwc2J0LnR4SW5wdXRzLnJlZHVjZSgoY3VtdWxhdGl2ZSwgdHhJbnB1dCwgaSkgPT4ge1xuICAgIGNvbnN0IGRhdGEgPSBwc2J0LmRhdGEuaW5wdXRzW2ldO1xuICAgIGlmIChkYXRhLndpdG5lc3NVdHhvKSB7XG4gICAgICByZXR1cm4gY3VtdWxhdGl2ZSArIEJpZ0ludChkYXRhLndpdG5lc3NVdHhvLnZhbHVlKTtcbiAgICB9IGVsc2UgaWYgKGRhdGEubm9uV2l0bmVzc1V0eG8pIHtcbiAgICAgIGNvbnN0IHR4ID0gYml0Z28uY3JlYXRlVHJhbnNhY3Rpb25Gcm9tQnVmZmVyPGJpZ2ludD4oZGF0YS5ub25XaXRuZXNzVXR4bywgbmV0d29yaywgeyBhbW91bnRUeXBlOiAnYmlnaW50JyB9KTtcbiAgICAgIHJldHVybiBjdW11bGF0aXZlICsgQmlnSW50KHR4Lm91dHNbdHhJbnB1dC5pbmRleF0udmFsdWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ2NvdWxkIG5vdCBmaW5kIHZhbHVlIG9uIGlucHV0Jyk7XG4gICAgfVxuICB9LCBCaWdJbnQoMCkpO1xuXG4gIHJldHVybiB7XG4gICAgLi4uY29tbW9uLFxuICAgIGZlZTogKGlucHV0QW1vdW50IC0gb3V0cHV0QW1vdW50KS50b1N0cmluZygpLFxuICAgIGlucHV0U2lnbmF0dXJlczogaW5wdXRTaWduYXR1cmVzQ291bnQsXG4gICAgc2lnbmF0dXJlczogaW5wdXRTaWduYXR1cmVzQ291bnQucmVkdWNlKChwcmV2LCBjdXJyKSA9PiAoY3VyciA+IHByZXYgPyBjdXJyIDogcHJldiksIDApLFxuICAgIG1lc3NhZ2VzLFxuICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZXhwbGFpbkxlZ2FjeVR4PFROdW1iZXIgZXh0ZW5kcyBudW1iZXIgfCBiaWdpbnQ+KFxuICB0eDogYml0Z28uVXR4b1RyYW5zYWN0aW9uPFROdW1iZXI+LFxuICBwYXJhbXM6IHtcbiAgICBwdWJzPzogc3RyaW5nW107XG4gICAgdHhJbmZvPzogeyB1bnNwZW50cz86IFVuc3BlbnQ8VE51bWJlcj5bXSB9O1xuICAgIGNoYW5nZUluZm8/OiB7IGFkZHJlc3M6IHN0cmluZzsgY2hhaW46IG51bWJlcjsgaW5kZXg6IG51bWJlciB9W107XG4gIH0sXG4gIGNvaW5OYW1lOiBVdHhvQ29pbk5hbWVcbik6IFRyYW5zYWN0aW9uRXhwbGFuYXRpb25VdHhvbGliTGVnYWN5IHtcbiAgY29uc3QgY29tbW9uID0gZXhwbGFpbkNvbW1vbih0eCwgcGFyYW1zLCBjb2luTmFtZSk7XG4gIGNvbnN0IGlucHV0U2lnbmF0dXJlc0NvdW50ID0gZ2V0VHhJbnB1dFNpZ25hdHVyZXNDb3VudCh0eCwgcGFyYW1zLCBjb2luTmFtZSk7XG4gIHJldHVybiB7XG4gICAgLi4uY29tbW9uLFxuICAgIGlucHV0U2lnbmF0dXJlczogaW5wdXRTaWduYXR1cmVzQ291bnQsXG4gICAgc2lnbmF0dXJlczogaW5wdXRTaWduYXR1cmVzQ291bnQucmVkdWNlKChwcmV2LCBjdXJyKSA9PiAoY3VyciA+IHByZXYgPyBjdXJyIDogcHJldiksIDApLFxuICB9O1xufVxuIl19
|
|
1
|
+
export {};
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXhwbGFpblRyYW5zYWN0aW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL3RyYW5zYWN0aW9uL2ZpeGVkU2NyaXB0L2V4cGxhaW5UcmFuc2FjdGlvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSVRyYW5zYWN0aW9uRXhwbGFuYXRpb24gYXMgQmFzZVRyYW5zYWN0aW9uRXhwbGFuYXRpb24gfSBmcm9tICdAYml0Z28vc2RrLWNvcmUnO1xuXG5pbXBvcnQgdHlwZSB7IEJpcDMyMk1lc3NhZ2UgfSBmcm9tICcuLi8uLi9hYnN0cmFjdFV0eG9Db2luJztcbmltcG9ydCB0eXBlIHsgT3V0cHV0LCBGaXhlZFNjcmlwdFdhbGxldE91dHB1dCB9IGZyb20gJy4uL3R5cGVzJztcblxuLy8gPT09PT0gVHJhbnNhY3Rpb24gRXhwbGFuYXRpb24gVHlwZSBEZWZpbml0aW9ucyA9PT09PVxuXG5leHBvcnQgaW50ZXJmYWNlIEFic3RyYWN0VXR4b1RyYW5zYWN0aW9uRXhwbGFuYXRpb248VEZlZSA9IHN0cmluZywgVENoYW5nZU91dHB1dCBleHRlbmRzIE91dHB1dCA9IE91dHB1dD5cbiAgZXh0ZW5kcyBCYXNlVHJhbnNhY3Rpb25FeHBsYW5hdGlvbjxURmVlLCBzdHJpbmc+IHtcbiAgLyoqIE5PVEU6IHRoaXMgYWN0dWFsbHkgb25seSBjYXB0dXJlcyBleHRlcm5hbCBvdXRwdXRzICovXG4gIG91dHB1dHM6IE91dHB1dFtdO1xuICBjaGFuZ2VPdXRwdXRzOiBUQ2hhbmdlT3V0cHV0W107XG4gIGN1c3RvbUNoYW5nZU91dHB1dHM/OiBUQ2hhbmdlT3V0cHV0W107XG4gIGN1c3RvbUNoYW5nZUFtb3VudD86IHN0cmluZztcblxuICAvKipcbiAgICogQklQMzIyIG1lc3NhZ2VzIGV4dHJhY3RlZCBmcm9tIHRoZSB0cmFuc2FjdGlvbiBpbnB1dHMuXG4gICAqIFRoZXNlIG1lc3NhZ2VzIGFyZSB1c2VkIGZvciB2ZXJpZnlpbmcgdGhlIHRyYW5zYWN0aW9uIGFnYWluc3QgdGhlIEJJUDMyMiBzdGFuZGFyZC5cbiAgICovXG4gIG1lc3NhZ2VzPzogQmlwMzIyTWVzc2FnZVtdO1xufVxuXG4vKiogQGRlcHJlY2F0ZWQgLSB0aGUgc2lnbmF0dXJlIGZpZWxkcyBhcmUgbm90IHZlcnkgdXNlZnVsICovXG5pbnRlcmZhY2UgVHJhbnNhY3Rpb25FeHBsYW5hdGlvbldpdGhTaWduYXR1cmVzPFRGZWUgPSBzdHJpbmcsIFRDaGFuZ2VPdXRwdXQgZXh0ZW5kcyBPdXRwdXQgPSBPdXRwdXQ+XG4gIGV4dGVuZHMgQWJzdHJhY3RVdHhvVHJhbnNhY3Rpb25FeHBsYW5hdGlvbjxURmVlLCBUQ2hhbmdlT3V0cHV0PiB7XG4gIC8qKiBAZGVwcmVjYXRlZCAtIHVudXNlZCBvdXRzaWRlIG9mIHRlc3RzICovXG4gIGxvY2t0aW1lPzogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBOdW1iZXIgb2YgaW5wdXQgc2lnbmF0dXJlcyBwZXIgaW5wdXQuXG4gICAqIEBkZXByZWNhdGVkIC0gdGhpcyBpcyBub3QgdmVyeSB1c2VmdWwgd2l0aG91dCBrbm93aW5nIHdobyBzaWduZWQgZWFjaCBpbnB1dC5cbiAgICovXG4gIGlucHV0U2lnbmF0dXJlczogbnVtYmVyW107XG5cbiAgLyoqXG4gICAqIEhpZ2hlc3QgaW5wdXQgc2lnbmF0dXJlIGNvdW50IGZvciB0aGUgdHJhbnNhY3Rpb25cbiAgICogQGRlcHJlY2F0ZWQgLSB0aGlzIGlzIG5vdCB2ZXJ5IHVzZWZ1bCB3aXRob3V0IGtub3dpbmcgd2hvIHNpZ25lZCBlYWNoIGlucHV0LlxuICAgKi9cbiAgc2lnbmF0dXJlczogbnVtYmVyO1xufVxuXG4vKiogRm9yIG91ciB3YXNtIGJhY2tlbmQsIHdlIGRvIG5vdCByZXR1cm4gdGhlIGRlcHJlY2F0ZWQgZmllbGRzLiBXZSBzZXQgVEZlZSB0byBzdHJpbmcgZm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5LiAqL1xuZXhwb3J0IHR5cGUgVHJhbnNhY3Rpb25FeHBsYW5hdGlvbldhc20gPSBBYnN0cmFjdFV0eG9UcmFuc2FjdGlvbkV4cGxhbmF0aW9uPHN0cmluZywgRml4ZWRTY3JpcHRXYWxsZXRPdXRwdXQ+ICYge1xuICBpbnB1dHM6IEFycmF5PHsgYWRkcmVzczogc3RyaW5nOyB2YWx1ZTogc3RyaW5nOyBzaWduZWRCeTogeyBba2V5OiBzdHJpbmddOiBib29sZWFuIH0gfT47XG4gIGlucHV0QW1vdW50OiBzdHJpbmc7XG59O1xuXG4vKiogV2hlbiBwYXJzaW5nIGEgUFNCVCwgd2UgY2FuIGluZmVyIHRoZSBmZWUgc28gd2Ugc2V0IFRGZWUgdG8gc3RyaW5nLiAqL1xuZXhwb3J0IHR5cGUgVHJhbnNhY3Rpb25FeHBsYW5hdGlvblV0eG9saWJQc2J0ID0gVHJhbnNhY3Rpb25FeHBsYW5hdGlvbldpdGhTaWduYXR1cmVzPHN0cmluZz47XG5cbmV4cG9ydCB0eXBlIFRyYW5zYWN0aW9uRXhwbGFuYXRpb25EZXNjcmlwdG9yID0gVHJhbnNhY3Rpb25FeHBsYW5hdGlvbldpdGhTaWduYXR1cmVzPHN0cmluZywgT3V0cHV0PjtcblxuZXhwb3J0IHR5cGUgVHJhbnNhY3Rpb25FeHBsYW5hdGlvbiA9IFRyYW5zYWN0aW9uRXhwbGFuYXRpb25VdHhvbGliUHNidCB8IFRyYW5zYWN0aW9uRXhwbGFuYXRpb25XYXNtO1xuIl19
|
|
@@ -1,10 +1,8 @@
|
|
|
1
|
-
export { explainPsbt, explainLegacyTx, ChangeAddressInfo } from './explainTransaction';
|
|
2
1
|
export { explainPsbtWasm, explainPsbtWasmBigInt, aggregateTransactionExplanations, type ExplainedInput, type TransactionExplanationBigInt, type AggregatedTransactionExplanation, } from './explainPsbtWasm';
|
|
3
2
|
export { parseTransaction } from './parseTransaction';
|
|
4
3
|
export { CustomChangeOptions } from './parseOutput';
|
|
5
4
|
export { verifyTransaction } from './verifyTransaction';
|
|
6
5
|
export { signTransaction } from './signTransaction';
|
|
7
|
-
export * from './signLegacyTransaction';
|
|
8
6
|
export * from './SigningError';
|
|
9
7
|
export * from './replayProtection';
|
|
10
8
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/transaction/fixedScript/index.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/transaction/fixedScript/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,eAAe,EACf,qBAAqB,EACrB,gCAAgC,EAChC,KAAK,cAAc,EACnB,KAAK,4BAA4B,EACjC,KAAK,gCAAgC,GACtC,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,EAAE,mBAAmB,EAAE,MAAM,eAAe,CAAC;AACpD,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,cAAc,gBAAgB,CAAC;AAC/B,cAAc,oBAAoB,CAAC"}
|
|
@@ -1,9 +1,7 @@
|
|
|
1
|
-
export { explainPsbt, explainLegacyTx } from './explainTransaction';
|
|
2
1
|
export { explainPsbtWasm, explainPsbtWasmBigInt, aggregateTransactionExplanations, } from './explainPsbtWasm';
|
|
3
2
|
export { parseTransaction } from './parseTransaction';
|
|
4
3
|
export { verifyTransaction } from './verifyTransaction';
|
|
5
4
|
export { signTransaction } from './signTransaction';
|
|
6
|
-
export * from './signLegacyTransaction';
|
|
7
5
|
export * from './SigningError';
|
|
8
6
|
export * from './replayProtection';
|
|
9
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
7
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvdHJhbnNhY3Rpb24vZml4ZWRTY3JpcHQvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLGVBQWUsRUFDZixxQkFBcUIsRUFDckIsZ0NBQWdDLEdBSWpDLE1BQU0sbUJBQW1CLENBQUM7QUFDM0IsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFFdEQsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDeEQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ3BELGNBQWMsZ0JBQWdCLENBQUM7QUFDL0IsY0FBYyxvQkFBb0IsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCB7XG4gIGV4cGxhaW5Qc2J0V2FzbSxcbiAgZXhwbGFpblBzYnRXYXNtQmlnSW50LFxuICBhZ2dyZWdhdGVUcmFuc2FjdGlvbkV4cGxhbmF0aW9ucyxcbiAgdHlwZSBFeHBsYWluZWRJbnB1dCxcbiAgdHlwZSBUcmFuc2FjdGlvbkV4cGxhbmF0aW9uQmlnSW50LFxuICB0eXBlIEFnZ3JlZ2F0ZWRUcmFuc2FjdGlvbkV4cGxhbmF0aW9uLFxufSBmcm9tICcuL2V4cGxhaW5Qc2J0V2FzbSc7XG5leHBvcnQgeyBwYXJzZVRyYW5zYWN0aW9uIH0gZnJvbSAnLi9wYXJzZVRyYW5zYWN0aW9uJztcbmV4cG9ydCB7IEN1c3RvbUNoYW5nZU9wdGlvbnMgfSBmcm9tICcuL3BhcnNlT3V0cHV0JztcbmV4cG9ydCB7IHZlcmlmeVRyYW5zYWN0aW9uIH0gZnJvbSAnLi92ZXJpZnlUcmFuc2FjdGlvbic7XG5leHBvcnQgeyBzaWduVHJhbnNhY3Rpb24gfSBmcm9tICcuL3NpZ25UcmFuc2FjdGlvbic7XG5leHBvcnQgKiBmcm9tICcuL1NpZ25pbmdFcnJvcic7XG5leHBvcnQgKiBmcm9tICcuL3JlcGxheVByb3RlY3Rpb24nO1xuIl19
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"parseTransaction.d.ts","sourceRoot":"","sources":["../../../../src/transaction/fixedScript/parseTransaction.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,gBAAgB,EAAE,uBAAuB,EAAE,MAAM,wBAAwB,CAAC;AACxF,OAAO,KAAK,EAAmC,iBAAiB,EAAE,MAAM,UAAU,CAAC;AAiBnF,OAAO,EAAE,gBAAgB,EAAE,cAAc,EAAoB,MAAM,qBAAqB,CAAC;AAMzF,MAAM,MAAM,4BAA4B,CAAC,MAAM,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,GAAG,cAAc,CAAC,GAAG;IAC/F,QAAQ,EAAE,OAAO,GAAG,SAAS,CAAC;CAC/B,CAAC;AAyGF,wBAAsB,gBAAgB,CAAC,OAAO,SAAS,MAAM,GAAG,MAAM,EACpE,IAAI,EAAE,gBAAgB,EACtB,MAAM,EAAE,uBAAuB,CAAC,OAAO,CAAC,GACvC,OAAO,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAC,
|
|
1
|
+
{"version":3,"file":"parseTransaction.d.ts","sourceRoot":"","sources":["../../../../src/transaction/fixedScript/parseTransaction.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,gBAAgB,EAAE,uBAAuB,EAAE,MAAM,wBAAwB,CAAC;AACxF,OAAO,KAAK,EAAmC,iBAAiB,EAAE,MAAM,UAAU,CAAC;AAiBnF,OAAO,EAAE,gBAAgB,EAAE,cAAc,EAAoB,MAAM,qBAAqB,CAAC;AAMzF,MAAM,MAAM,4BAA4B,CAAC,MAAM,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,GAAG,cAAc,CAAC,GAAG;IAC/F,QAAQ,EAAE,OAAO,GAAG,SAAS,CAAC;CAC/B,CAAC;AAyGF,wBAAsB,gBAAgB,CAAC,OAAO,SAAS,MAAM,GAAG,MAAM,EACpE,IAAI,EAAE,gBAAgB,EACtB,MAAM,EAAE,uBAAuB,CAAC,OAAO,CAAC,GACvC,OAAO,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAC,CAyKrC"}
|
|
@@ -143,7 +143,6 @@ export async function parseTransaction(coin, params) {
|
|
|
143
143
|
const explanation = await coin.explainTransaction({
|
|
144
144
|
txHex: effectiveTxHex,
|
|
145
145
|
txInfo: txPrebuild.txInfo,
|
|
146
|
-
decodeWith: txPrebuild.decodeWith,
|
|
147
146
|
pubs: keychainArray.map((k) => k.pub),
|
|
148
147
|
customChangeXpubs,
|
|
149
148
|
});
|
|
@@ -219,4 +218,4 @@ export async function parseTransaction(coin, params) {
|
|
|
219
218
|
customChange,
|
|
220
219
|
};
|
|
221
220
|
}
|
|
222
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFyc2VUcmFuc2FjdGlvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy90cmFuc2FjdGlvbi9maXhlZFNjcmlwdC9wYXJzZVRyYW5zYWN0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sTUFBTSxNQUFNLFFBQVEsQ0FBQztBQUU1QixPQUFPLENBQUMsTUFBTSxRQUFRLENBQUM7QUFDdkIsT0FBTyxFQUF5QixVQUFVLEVBQXVDLE1BQU0saUJBQWlCLENBQUM7QUFJekcsT0FBTyxFQUNMLGNBQWMsRUFDZCxnQkFBZ0IsRUFDaEIsZ0JBQWdCLEVBQ2hCLFlBQVksRUFFWixrQkFBa0IsR0FDbkIsTUFBTSxpQkFBaUIsQ0FBQztBQUN6QixPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUNyRCxPQUFPLEVBQ0wsK0JBQStCLEVBQy9CLGlDQUFpQyxFQUNqQyxpQkFBaUIsRUFDakIsdUJBQXVCLEVBQ3ZCLGNBQWMsR0FDZixNQUFNLGNBQWMsQ0FBQztBQUN0QixPQUFPLEVBQW9DLGdCQUFnQixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDekYsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUcxQyxPQUFPLEVBQXVCLFdBQVcsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQU1qRSxTQUFTLCtCQUErQixDQUN0QyxJQUFzQixFQUN0QixNQUFpRDtJQUtqRCxNQUFNLE1BQU0sR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxDQUFDO0lBQzFDLCtCQUErQixDQUFDLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxNQUFNLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQztJQUNyRSxNQUFNLENBQUMsTUFBTSxDQUFDLE9BQU8sRUFBRSxxQkFBcUIsQ0FBQyxDQUFDO0lBQzlDLElBQUksaUJBQWlCLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7UUFD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XyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHsgSVRyYW5zYWN0aW9uUmVjaXBpZW50LCBLZXlJbmRpY2VzLCBUcmlwbGUsIFZlcmlmaWNhdGlvbk9wdGlvbnMsIFdhbGxldCB9IGZyb20gJ0BiaXRnby9zZGstY29yZSc7XG5cbmltcG9ydCB0eXBlIHsgQWJzdHJhY3RVdHhvQ29pbiwgUGFyc2VUcmFuc2FjdGlvbk9wdGlvbnMgfSBmcm9tICcuLi8uLi9hYnN0cmFjdFV0eG9Db2luJztcbmltcG9ydCB0eXBlIHsgRml4ZWRTY3JpcHRXYWxsZXRPdXRwdXQsIE91dHB1dCwgUGFyc2VkVHJhbnNhY3Rpb24gfSBmcm9tICcuLi90eXBlcyc7XG5pbXBvcnQge1xuICBmZXRjaEtleWNoYWlucyxcbiAgZ2V0S2V5U2lnbmF0dXJlcyxcbiAgdG9LZXljaGFpblRyaXBsZSxcbiAgdG9YcHViVHJpcGxlLFxuICBVdHhvS2V5Y2hhaW4sXG4gIFV0eG9OYW1lZEtleWNoYWlucyxcbn0gZnJvbSAnLi4vLi4va2V5Y2hhaW5zJztcbmltcG9ydCB7IHZlcmlmeUtleVNpZ25hdHVyZSB9IGZyb20gJy4uLy4uL3ZlcmlmeUtleSc7XG5pbXBvcnQge1xuICBhc3NlcnRWYWxpZFRyYW5zYWN0aW9uUmVjaXBpZW50LFxuICBmcm9tRXh0ZW5kZWRBZGRyZXNzRm9ybWF0VG9TY3JpcHQsXG4gIGlzU2NyaXB0UmVjaXBpZW50LFxuICB0b0V4dGVuZGVkQWRkcmVzc0Zvcm1hdCxcbiAgdG9PdXRwdXRTY3JpcHQsXG59IGZyb20gJy4uL3JlY2lwaWVudCc7XG5pbXBvcnQgeyBDb21wYXJhYmxlT3V0cHV0LCBFeHBlY3RlZE91dHB1dCwgb3V0cHV0RGlmZmVyZW5jZSB9IGZyb20gJy4uL291dHB1dERpZmZlcmVuY2UnO1xuaW1wb3J0IHsgdG9UTnVtYmVyIH0gZnJvbSAnLi4vLi4vdG51bWJlcic7XG5cbmltcG9ydCB0eXBlIHsgVHJhbnNhY3Rpb25FeHBsYW5hdGlvbiB9IGZyb20gJy4vZXhwbGFpblRyYW5zYWN0aW9uJztcbmltcG9ydCB7IEN1c3RvbUNoYW5nZU9wdGlvbnMsIHBhcnNlT3V0cHV0IH0gZnJvbSAnLi9wYXJzZU91dHB1dCc7XG5cbmV4cG9ydCB0eXBlIENvbXBhcmFibGVPdXRwdXRXaXRoRXh0ZXJuYWw8VFZhbHVlPiA9IChDb21wYXJhYmxlT3V0cHV0PFRWYWx1ZT4gfCBFeHBlY3RlZE91dHB1dCkgJiB7XG4gIGV4dGVybmFsOiBib29sZWFuIHwgdW5kZWZpbmVkO1xufTtcblxuZnVuY3Rpb24gdG9DYW5vbmljYWxUcmFuc2FjdGlvblJlY2lwaWVudChcbiAgY29pbjogQWJzdHJhY3RVdHhvQ29pbixcbiAgb3V0cHV0OiB7IHZhbHVlU3RyaW5nOiBzdHJpbmc7IGFkZHJlc3M/OiBzdHJpbmcgfVxuKToge1xuICBhbW91bnQ6IGJpZ2ludDtcbiAgYWRkcmVzczogc3RyaW5nO1xufSB7XG4gIGNvbnN0IGFtb3VudCA9IEJpZ0ludChvdXRwdXQudmFsdWVTdHJpbmcpO1xuICBhc3NlcnRWYWxpZFRyYW5zYWN0aW9uUmVjaXBpZW50KHsgYW1vdW50LCBhZGRyZXNzOiBvdXRwdXQuYWRkcmVzcyB9KTtcbiAgYXNzZXJ0KG91dHB1dC5hZGRyZXNzLCAnYWRkcmVzcyBpcyByZXF1aXJlZCcpO1xuICBpZiAoaXNTY3JpcHRSZWNpcGllbnQob3V0cHV0LmFkZHJlc3MpKSB7XG4gICAgcmV0dXJuIHsgYW1vdW50LCBhZGRyZXNzOiBvdXRwdXQuYWRkcmVzcyB9O1xuICB9XG4gIHJldHVybiB7IGFtb3VudCwgYWRkcmVzczogY29pbi5jYW5vbmljYWxBZGRyZXNzKG91dHB1dC5hZGRyZXNzKSB9O1xufVxuXG5hc3luYyBmdW5jdGlvbiBwYXJzZVJiZlRyYW5zYWN0aW9uPFROdW1iZXIgZXh0ZW5kcyBiaWdpbnQgfCBudW1iZXI+KFxuICBjb2luOiBBYnN0cmFjdFV0eG9Db2luLFxuICBwYXJhbXM6IFBhcnNlVHJhbnNhY3Rpb25PcHRpb25zPFROdW1iZXI+XG4pOiBQcm9taXNlPFBhcnNlZFRyYW5zYWN0aW9uPFROdW1iZXI+PiB7XG4gIGNvbnN0IHsgdHhQYXJhbXMsIHdhbGxldCB9ID0gcGFyYW1zO1xuXG4gIGFzc2VydCh0eFBhcmFtcy5yYmZUeElkcyk7XG4gIGFzc2VydCh0eFBhcmFtcy5yYmZUeElkcy5sZW5ndGggPT09IDEpO1xuXG4gIGNvbnN0IHR4VG9CZVJlcGxhY2VkID0gYXdhaXQgd2FsbGV0LmdldFRyYW5zYWN0aW9uKHsgdHhIYXNoOiB0eFBhcmFtcy5yYmZUeElkc1swXSwgaW5jbHVkZVJiZjogdHJ1ZSB9KTtcbiAgY29uc3QgcmVjaXBpZW50cyA9IHR4VG9CZVJlcGxhY2VkLm91dHB1dHMuZmxhdE1hcChcbiAgICAob3V0cHV0OiB7IHZhbHVlU3RyaW5nOiBzdHJpbmc7IGFkZHJlc3M/OiBzdHJpbmc7IHdhbGxldD86IHN0cmluZyB9KSA9PiB7XG4gICAgICAvLyBGb3Igc2VsZi1zZW5kcywgdGhlIHdhbGxldElkIHdpbGwgYmUgdGhlIHNhbWUgYXMgdGhlIHdhbGxldCdzIGlkXG4gICAgICBpZiAob3V0cHV0LndhbGxldCA9PT0gd2FsbGV0LmlkKCkpIHtcbiAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgfVxuICAgICAgcmV0dXJuIFt0b0Nhbm9uaWNhbFRyYW5zYWN0aW9uUmVjaXBpZW50KGNvaW4sIG91dHB1dCldO1xuICAgIH1cbiAgKTtcblxuICAvLyBSZWN1cnNlIGludG8gcGFyc2VUcmFuc2FjdGlvbiB3aXRoIHRoZSBkZXJpdmVkIHJlY2lwaWVudHMgYW5kIHdpdGhvdXQgcmJmVHhJZHNcbiAgcmV0dXJuIHBhcnNlVHJhbnNhY3Rpb24oY29pbiwge1xuICAgIC4uLnBhcmFtcyxcbiAgICB0eFBhcmFtczoge1xuICAgICAgLi4udHhQYXJhbXMsXG4gICAgICByZWNpcGllbnRzLFxuICAgICAgcmJmVHhJZHM6IHVuZGVmaW5lZCxcbiAgICB9LFxuICB9KTtcbn1cblxuZnVuY3Rpb24gdG9FeHBlY3RlZE91dHB1dHMoXG4gIGNvaW46IEFic3RyYWN0VXR4b0NvaW4sXG4gIHR4UGFyYW1zOiB7XG4gICAgcmVjaXBpZW50cz86IElUcmFuc2FjdGlvblJlY2lwaWVudFtdO1xuICAgIGFsbG93RXh0ZXJuYWxDaGFuZ2VBZGRyZXNzPzogYm9vbGVhbjtcbiAgICBjaGFuZ2VBZGRyZXNzPzogc3RyaW5nO1xuICB9XG4pOiBFeHBlY3RlZE91dHB1dFtdIHtcbiAgLy8gdmVyaWZ5IHRoYXQgZWFjaCByZWNpcGllbnQgZnJvbSB0eFBhcmFtcyBoYXMgdGhlaXIgb3duIG91dHB1dFxuICBjb25zdCBleHBlY3RlZE91dHB1dHM6IEV4cGVjdGVkT3V0cHV0W10gPSAodHhQYXJhbXMucmVjaXBpZW50cyA/PyBbXSkuZmxhdE1hcCgob3V0cHV0KSA9PiB7XG4gICAgaWYgKG91dHB1dC5hZGRyZXNzID09PSB1bmRlZmluZWQpIHtcbiAgICAgIGFzc2VydCgnc2NyaXB0JyBpbiBvdXRwdXQsICdzY3JpcHQgaXMgcmVxdWlyZWQgZm9yIG5vbi1lbmNvZGVhYmxlIHNjcmlwdFB1YmtleXMnKTtcbiAgICAgIGlmIChvdXRwdXQuYW1vdW50LnRvU3RyaW5nKCkgIT09ICcwJykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYE9ubHkgemVybyBhbW91bnRzIGFsbG93ZWQgZm9yIG5vbi1lbmNvZGVhYmxlIHNjcmlwdFB1YmtleXM6ICR7b3V0cHV0fWApO1xuICAgICAgfVxuICAgICAgcmV0dXJuIFtcbiAgICAgICAge1xuICAgICAgICAgIHNjcmlwdDogdG9PdXRwdXRTY3JpcHQob3V0cHV0LCBjb2luLm5hbWUpLFxuICAgICAgICAgIHZhbHVlOiBvdXRwdXQuYW1vdW50ID09PSAnbWF4JyA/ICdtYXgnIDogQmlnSW50KG91dHB1dC5hbW91bnQpLFxuICAgICAgICB9LFxuICAgICAgXTtcbiAgICB9XG4gICAgcmV0dXJuIFtcbiAgICAgIHtcbiAgICAgICAgc2NyaXB0OiBmcm9tRXh0ZW5kZWRBZGRyZXNzRm9ybWF0VG9TY3JpcHQob3V0cHV0LmFkZHJlc3MsIGNvaW4ubmFtZSksXG4gICAgICAgIHZhbHVlOiBvdXRwdXQuYW1vdW50ID09PSAnbWF4JyA/ICdtYXgnIDogQmlnSW50KG91dHB1dC5hbW91bnQpLFxuICAgICAgfSxcbiAgICBdO1xuICB9KTtcbiAgaWYgKHR4UGFyYW1zLmFsbG93RXh0ZXJuYWxDaGFuZ2VBZGRyZXNzICYmIHR4UGFyYW1zLmNoYW5nZUFkZHJlc3MpIHtcbiAgICBleHBlY3RlZE91dHB1dHMucHVzaCh7XG4gICAgICBzY3JpcHQ6IHRvT3V0cHV0U2NyaXB0KHR4UGFyYW1zLmNoYW5nZUFkZHJlc3MsIGNvaW4ubmFtZSksXG4gICAgICAvLyBXaGVuIGFuIGV4dGVybmFsIGNoYW5nZSBhZGRyZXNzIGlzIGV4cGxpY2l0bHkgc3BlY2lmaWVkLCBjb3VudCBhbGwgb3V0cHV0cyBnb2luZyB0b3dhcmRzIHRoYXRcbiAgICAgIC8vIGFkZHJlc3MgaW4gdGhlIGV4cGVjdGVkIG91dHB1dHMgKHJlZ2FyZGxlc3Mgb2YgdGhlIG91dHB1dCBhbW91bnQpXG4gICAgICB2YWx1ZTogJ21heCcsXG4gICAgICAvLyBOb3RlIHRoYXQgdGhlIGNoYW5nZSBvdXRwdXQgaXMgbm90IHJlcXVpcmVkIHRvIGV4aXN0LCBzbyB3ZSBtYXJrIGl0IGFzIG9wdGlvbmFsLlxuICAgICAgb3B0aW9uYWw6IHRydWUsXG4gICAgfSk7XG4gIH1cbiAgcmV0dXJuIGV4cGVjdGVkT3V0cHV0cztcbn1cblxuZnVuY3Rpb24gdmVyaWZ5Q3VzdG9tQ2hhbmdlS2V5cyh1c2VyS2V5Y2hhaW46IFV0eG9LZXljaGFpbiwgY3VzdG9tQ2hhbmdlOiBDdXN0b21DaGFuZ2VPcHRpb25zKTogdm9pZCB7XG4gIGZvciAoY29uc3Qga2V5SW5kZXggb2YgW0tleUluZGljZXMuVVNFUiwgS2V5SW5kaWNlcy5CQUNLVVAsIEtleUluZGljZXMuQklUR09dKSB7XG4gICAgaWYgKFxuICAgICAgIXZlcmlmeUtleVNpZ25hdHVyZSh7XG4gICAgICAgIHVzZXJLZXljaGFpbixcbiAgICAgICAga2V5Y2hhaW5Ub1ZlcmlmeTogY3VzdG9tQ2hhbmdlLmtleXNba2V5SW5kZXhdLFxuICAgICAgICBrZXlTaWduYXR1cmU6IGN1c3RvbUNoYW5nZS5zaWduYXR1cmVzW2tleUluZGV4XSxcbiAgICAgIH0pXG4gICAgKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYGZhaWxlZCB0byB2ZXJpZnkgY3VzdG9tIGNoYW5nZSAke0tleUluZGljZXNba2V5SW5kZXhdLnRvTG93ZXJDYXNlKCl9IGtleSBzaWduYXR1cmVgKTtcbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHBhcnNlVHJhbnNhY3Rpb248VE51bWJlciBleHRlbmRzIGJpZ2ludCB8IG51bWJlcj4oXG4gIGNvaW46IEFic3RyYWN0VXR4b0NvaW4sXG4gIHBhcmFtczogUGFyc2VUcmFuc2FjdGlvbk9wdGlvbnM8VE51bWJlcj5cbik6IFByb21pc2U8UGFyc2VkVHJhbnNhY3Rpb248VE51bWJlcj4+IHtcbiAgY29uc3QgeyB0eFBhcmFtcywgdHhQcmVidWlsZCwgd2FsbGV0LCB2ZXJpZmljYXRpb24gPSB7fSwgcmVxSWQgfSA9IHBhcmFtcztcblxuICAvLyBCcmFuY2ggb2ZmIGVhcmx5IGZvciBSQkYgdHJhbnNhY3Rpb25zXG4gIGlmICh0eFBhcmFtcy5yYmZUeElkcykge1xuICAgIHJldHVybiBwYXJzZVJiZlRyYW5zYWN0aW9uKGNvaW4sIHBhcmFtcyk7XG4gIH1cblxuICBpZiAoIV8uaXNVbmRlZmluZWQodmVyaWZpY2F0aW9uLmRpc2FibGVOZXR3b3JraW5nKSAmJiAhXy5pc0Jvb2xlYW4odmVyaWZpY2F0aW9uLmRpc2FibGVOZXR3b3JraW5nKSkge1xuICAgIHRocm93IG5ldyBFcnJvcigndmVyaWZpY2F0aW9uLmRpc2FibGVOZXR3b3JraW5nIG11c3QgYmUgYSBib29sZWFuJyk7XG4gIH1cbiAgY29uc3QgZGlzYWJsZU5ldHdvcmtpbmcgPSB2ZXJpZmljYXRpb24uZGlzYWJsZU5ldHdvcmtpbmc7XG5cbiAgLy8gb2J0YWluIHRoZSBrZXljaGFpbnMgYW5kIGtleSBzaWduYXR1cmVzXG4gIGxldCBrZXljaGFpbnM6IFV0eG9OYW1lZEtleWNoYWlucyB8IFZlcmlmaWNhdGlvbk9wdGlvbnNbJ2tleWNoYWlucyddIHwgdW5kZWZpbmVkID0gdmVyaWZpY2F0aW9uLmtleWNoYWlucztcbiAgaWYgKCFrZXljaGFpbnMpIHtcbiAgICBpZiAoZGlzYWJsZU5ldHdvcmtpbmcpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignY2Fubm90IGZldGNoIGtleWNoYWlucyB3aXRob3V0IG5ldHdvcmtpbmcnKTtcbiAgICB9XG4gICAga2V5Y2hhaW5zID0gYXdhaXQgZmV0Y2hLZXljaGFpbnMoY29pbiwgd2FsbGV0LCByZXFJZCk7XG4gIH1cblxuICBpZiAoIVV0eG9OYW1lZEtleWNoYWlucy5pcyhrZXljaGFpbnMpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdpbnZhbGlkIGtleWNoYWlucycpO1xuICB9XG5cbiAgY29uc3Qga2V5Y2hhaW5BcnJheTogVHJpcGxlPFV0eG9LZXljaGFpbj4gPSB0b0tleWNoYWluVHJpcGxlKGtleWNoYWlucyk7XG5cbiAgY29uc3QgZWZmZWN0aXZlVHhIZXggPSB0eFByZWJ1aWxkLnR4SGV4UHNidCA/PyB0eFByZWJ1aWxkLnR4SGV4O1xuICBpZiAoXy5pc1VuZGVmaW5lZChlZmZlY3RpdmVUeEhleCkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ21pc3NpbmcgcmVxdWlyZWQgdHhQcmVidWlsZCBwcm9wZXJ0eSB0eEhleCcpO1xuICB9XG5cbiAgY29uc3QgZXhwZWN0ZWRPdXRwdXRzID0gdG9FeHBlY3RlZE91dHB1dHMoY29pbiwgdHhQYXJhbXMpO1xuXG4gIC8vIGdldCB0aGUga2V5Y2hhaW5zIGZyb20gdGhlIGN1c3RvbSBjaGFuZ2Ugd2FsbGV0IGlmIG5lZWRlZFxuICBsZXQgY3VzdG9tQ2hhbmdlOiBDdXN0b21DaGFuZ2VPcHRpb25zIHwgdW5kZWZpbmVkO1xuICBjb25zdCB7IGN1c3RvbUNoYW5nZVdhbGxldElkID0gdW5kZWZpbmVkIH0gPSB3YWxsZXQuY29pblNwZWNpZmljKCkgfHwge307XG4gIGlmIChjdXN0b21DaGFuZ2VXYWxsZXRJZCkge1xuICAgIC8vIGZldGNoIGtleWNoYWlucyBmcm9tIGN1c3RvbSBjaGFuZ2Ugd2FsbGV0IGZvciBkZXJpdmluZyBhZGRyZXNzZXMuXG4gICAgLy8gVGhlc2Uga2V5Y2hhaW5zIHNob3VsZCBiZSBzaWduZWQgYW5kIHRoaXMgc2hvdWxkIGJlIHZlcmlmaWVkIGluIHZlcmlmeVRyYW5zYWN0aW9uXG4gICAgY29uc3QgY3VzdG9tQ2hhbmdlS2V5U2lnbmF0dXJlcyA9IHdhbGxldC5fd2FsbGV0LmN1c3RvbUNoYW5nZUtleVNpZ25hdHVyZXM7XG4gICAgY29uc3QgY3VzdG9tQ2hhbmdlV2FsbGV0OiBXYWxsZXQgPSBhd2FpdCBjb2luLndhbGxldHMoKS5nZXQoeyBpZDogY3VzdG9tQ2hhbmdlV2FsbGV0SWQgfSk7XG4gICAgY29uc3QgY3VzdG9tQ2hhbmdlS2V5cyA9IGF3YWl0IGZldGNoS2V5Y2hhaW5zKGNvaW4sIGN1c3RvbUNoYW5nZVdhbGxldCwgcmVxSWQpO1xuXG4gICAgaWYgKCFjdXN0b21DaGFuZ2VLZXlzKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ2ZhaWxlZCB0byBmZXRjaCBrZXljaGFpbnMgZm9yIGN1c3RvbSBjaGFuZ2Ugd2FsbGV0Jyk7XG4gICAgfVxuXG4gICAgaWYgKGN1c3RvbUNoYW5nZUtleXMudXNlciAmJiBjdXN0b21DaGFuZ2VLZXlzLmJhY2t1cCAmJiBjdXN0b21DaGFuZ2VLZXlzLmJpdGdvICYmIGN1c3RvbUNoYW5nZVdhbGxldCkge1xuICAgICAgY29uc3QgY3VzdG9tQ2hhbmdlS2V5Y2hhaW5zOiBUcmlwbGU8VXR4b0tleWNoYWluPiA9IFtcbiAgICAgICAgY3VzdG9tQ2hhbmdlS2V5cy51c2VyLFxuICAgICAgICBjdXN0b21DaGFuZ2VLZXlzLmJhY2t1cCxcbiAgICAgICAgY3VzdG9tQ2hhbmdlS2V5cy5iaXRnbyxcbiAgICAgIF07XG5cbiAgICAgIGN1c3RvbUNoYW5nZSA9IHtcbiAgICAgICAga2V5czogY3VzdG9tQ2hhbmdlS2V5Y2hhaW5zLFxuICAgICAgICBzaWduYXR1cmVzOiBbY3VzdG9tQ2hhbmdlS2V5U2lnbmF0dXJlcy51c2VyLCBjdXN0b21DaGFuZ2VLZXlTaWduYXR1cmVzLmJhY2t1cCwgY3VzdG9tQ2hhbmdlS2V5U2lnbmF0dXJlcy5iaXRnb10sXG4gICAgICB9O1xuICAgIH1cbiAgfVxuXG4gIGxldCBjdXN0b21DaGFuZ2VYcHViczogVHJpcGxlPHN0cmluZz4gfCB1bmRlZmluZWQ7XG4gIGlmIChjdXN0b21DaGFuZ2UpIHtcbiAgICB2ZXJpZnlDdXN0b21DaGFuZ2VLZXlzKGtleWNoYWluQXJyYXlbS2V5SW5kaWNlcy5VU0VSXSwgY3VzdG9tQ2hhbmdlKTtcbiAgICBjdXN0b21DaGFuZ2VYcHVicyA9IHRvWHB1YlRyaXBsZShjdXN0b21DaGFuZ2Uua2V5cyk7XG4gIH1cblxuICAvLyBvYnRhaW4gYWxsIG91dHB1dHNcbiAgY29uc3QgZXhwbGFuYXRpb246IFRyYW5zYWN0aW9uRXhwbGFuYXRpb24gPSBhd2FpdCBjb2luLmV4cGxhaW5UcmFuc2FjdGlvbjxUTnVtYmVyPih7XG4gICAgdHhIZXg6IGVmZmVjdGl2ZVR4SGV4LFxuICAgIHR4SW5mbzogdHhQcmVidWlsZC50eEluZm8sXG4gICAgZGVjb2RlV2l0aDogdHhQcmVidWlsZC5kZWNvZGVXaXRoLFxuICAgIHB1YnM6IGtleWNoYWluQXJyYXkubWFwKChrKSA9PiBrLnB1YikgYXMgVHJpcGxlPHN0cmluZz4sXG4gICAgY3VzdG9tQ2hhbmdlWHB1YnMsXG4gIH0pO1xuXG4gIGNvbnN0IGFsbE91dHB1dHMgPSBbLi4uZXhwbGFuYXRpb24ub3V0cHV0cywgLi4uZXhwbGFuYXRpb24uY2hhbmdlT3V0cHV0c107XG5cbiAgLyoqXG4gICAqIExvb3AgdGhyb3VnaCBhbGwgdGhlIG91dHB1dHMgYW5kIGNsYXNzaWZ5IGVhY2ggb2YgdGhlbSBhcyBlaXRoZXIgaW50ZXJuYWwgc3BlbmRzXG4gICAqIG9yIGV4dGVybmFsIHNwZW5kcyBieSBzZXR0aW5nIHRoZSBcImV4dGVybmFsXCIgcHJvcGVydHkgdG8gdHJ1ZSBvciBmYWxzZSBvbiB0aGUgb3V0cHV0IG9iamVjdC5cbiAgICovXG4gIGNvbnN0IGFsbE91dHB1dERldGFpbHM6IE91dHB1dFtdID0gYXdhaXQgUHJvbWlzZS5hbGwoXG4gICAgYWxsT3V0cHV0cy5tYXAoKGN1cnJlbnRPdXRwdXQpID0+IHtcbiAgICAgIHJldHVybiBwYXJzZU91dHB1dCh7XG4gICAgICAgIGN1cnJlbnRPdXRwdXQsXG4gICAgICAgIGNvaW4sXG4gICAgICAgIHR4UHJlYnVpbGQsXG4gICAgICAgIHZlcmlmaWNhdGlvbixcbiAgICAgICAga2V5Y2hhaW5BcnJheTogdG9LZXljaGFpblRyaXBsZShrZXljaGFpbnMpLFxuICAgICAgICB3YWxsZXQsXG4gICAgICAgIHR4UGFyYW1zOiB7XG4gICAgICAgICAgcmVjaXBpZW50czogdHhQYXJhbXMucmVjaXBpZW50cyA/PyBbXSxcbiAgICAgICAgICBjaGFuZ2VBZGRyZXNzOiB0eFBhcmFtcy5jaGFuZ2VBZGRyZXNzLFxuICAgICAgICB9LFxuICAgICAgICBjdXN0b21DaGFuZ2UsXG4gICAgICAgIHJlcUlkLFxuICAgICAgfSk7XG4gICAgfSlcbiAgKTtcblxuICBjb25zdCBuZWVkc0N1c3RvbUNoYW5nZUtleVNpZ25hdHVyZVZlcmlmaWNhdGlvbiA9IGFsbE91dHB1dERldGFpbHMuc29tZShcbiAgICAob3V0cHV0KSA9PiAob3V0cHV0IGFzIEZpeGVkU2NyaXB0V2FsbGV0T3V0cHV0KT8ubmVlZHNDdXN0b21DaGFuZ2VLZXlTaWduYXR1cmVWZXJpZmljYXRpb25cbiAgKTtcblxuICBjb25zdCBjaGFuZ2VPdXRwdXRzID0gXy5maWx0ZXIoYWxsT3V0cHV0RGV0YWlscywgeyBleHRlcm5hbDogZmFsc2UgfSk7XG5cbiAgZnVuY3Rpb24gdG9Db21wYXJhYmxlT3V0cHV0c1dpdGhFeHRlcm5hbChvdXRwdXRzOiBPdXRwdXRbXSk6IENvbXBhcmFibGVPdXRwdXRXaXRoRXh0ZXJuYWw8YmlnaW50IHwgJ21heCc+W10ge1xuICAgIHJldHVybiBvdXRwdXRzLm1hcCgob3V0cHV0KSA9PiAoe1xuICAgICAgc2NyaXB0OiBmcm9tRXh0ZW5kZWRBZGRyZXNzRm9ybWF0VG9TY3JpcHQob3V0cHV0LmFkZHJlc3MsIGNvaW4ubmFtZSksXG4gICAgICB2YWx1ZTogb3V0cHV0LmFtb3VudCA9PT0gJ21heCcgPyAnbWF4JyA6IChCaWdJbnQob3V0cHV0LmFtb3VudCkgYXMgYmlnaW50IHwgJ21heCcpLFxuICAgICAgZXh0ZXJuYWw6IG91dHB1dC5leHRlcm5hbCxcbiAgICB9KSk7XG4gIH1cblxuICBjb25zdCBtaXNzaW5nT3V0cHV0cyA9IG91dHB1dERpZmZlcmVuY2UoZXhwZWN0ZWRPdXRwdXRzLCB0b0NvbXBhcmFibGVPdXRwdXRzV2l0aEV4dGVybmFsKGFsbE91dHB1dHMpKTtcblxuICBjb25zdCBpbXBsaWNpdE91dHB1dHMgPSBvdXRwdXREaWZmZXJlbmNlKHRvQ29tcGFyYWJsZU91dHB1dHNXaXRoRXh0ZXJuYWwoYWxsT3V0cHV0RGV0YWlscyksIGV4cGVjdGVkT3V0cHV0cyk7XG4gIGNvbnN0IGV4cGxpY2l0T3V0cHV0cyA9IG91dHB1dERpZmZlcmVuY2UodG9Db21wYXJhYmxlT3V0cHV0c1dpdGhFeHRlcm5hbChhbGxPdXRwdXREZXRhaWxzKSwgaW1wbGljaXRPdXRwdXRzKTtcblxuICAvLyB0aGVzZSBhcmUgYWxsIHRoZSBub24td2FsbGV0IG91dHB1dHMgdGhhdCBoYWQgYmVlbiBvcmlnaW5hbGx5IGV4cGxpY2l0bHkgc3BlY2lmaWVkIGluIHJlY2lwaWVudHNcbiAgY29uc3QgZXhwbGljaXRFeHRlcm5hbE91dHB1dHMgPSBleHBsaWNpdE91dHB1dHMuZmlsdGVyKChvdXRwdXQpID0+IG91dHB1dC5leHRlcm5hbCk7XG4gIC8vIHRoaXMgaXMgdGhlIHN1bSBvZiBhbGwgdGhlIG9yaWdpbmFsbHkgZXhwbGljaXRseSBzcGVjaWZpZWQgbm9uLXdhbGxldCBvdXRwdXQgdmFsdWVzXG4gIGNvbnN0IGV4cGxpY2l0RXh0ZXJuYWxTcGVuZEFtb3VudCA9IHRvVE51bWJlcihcbiAgICBleHBsaWNpdEV4dGVybmFsT3V0cHV0cy5yZWR1Y2UoKHN1bTogYmlnaW50LCBvKSA9PiBzdW0gKyBCaWdJbnQoby52YWx1ZSksIEJpZ0ludCgwKSksXG4gICAgY29pbi5hbW91bnRUeXBlXG4gICkgYXMgVE51bWJlcjtcblxuICAvKipcbiAgICogVGhlIGNhbGN1bGF0aW9uIG9mIHRoZSBpbXBsaWNpdCBleHRlcm5hbCBzcGVuZCBhbW91bnQgcGVydGFpbnMgdG8gdmVyaWZ5aW5nIHRoZSBwYXktYXMteW91LWdvLWZlZSBCaXRHb1xuICAgKiBhdXRvbWF0aWNhbGx5IGFwcGxpZWQgdG8gdHJhbnNhY3Rpb25zIHNlbmRpbmcgbW9uZXkgb3V0IG9mIHRoZSB3YWxsZXQuIFRoZSBsb2dpYyBpcyBmYWlybHkgc3RyYWlnaHRmb3J3YXJkXG4gICAqIGluIHRoYXQgd2UgY29tcGFyZSB0aGUgZXh0ZXJuYWwgc3BlbmQgYW1vdW50IHRoYXQgd2FzIHNwZWNpZmllZCBleHBsaWNpdGx5IGJ5IHRoZSB1c2VyIHRvIHRoZSBwb3J0aW9uXG4gICAqIHRoYXQgd2FzIHNwZWNpZmllZCBpbXBsaWNpdGx5LiBUbyBwcm90ZWN0IGN1c3RvbWVycyBmcm9tIHBlb3BsZSB0YW1wZXJpbmcgd2l0aCB0aGUgdHJhbnNhY3Rpb24gb3V0cHV0cywgd2VcbiAgICogZGVmaW5lIGEgdGhyZXNob2xkIGZvciB0aGUgbWF4aW11bSBwZXJjZW50YWdlIG9mIHRoZSBpbXBsaWNpdCBleHRlcm5hbCBzcGVuZCBpbiByZWxhdGlvbiB0byB0aGUgZXhwbGljaXRcbiAgICogZXh0ZXJuYWwgc3BlbmQuXG4gICAqXG4gICAqIFRoaXMgaGFzIGJlY29tZSBvYnNvbGV0ZSB3aXRoIHRoZSBpbnRvZHVjdGlvbiBvZiBgdXR4b2NvcmUucGF5Z28udmVyaWZ5UGF5R29BZGRyZXNzUHJvb2YoKWAuXG4gICAqL1xuXG4gIC8vIG1ha2Ugc3VyZSB0aGF0IGFsbCB0aGUgZXh0cmEgYWRkcmVzc2VzIGFyZSBjaGFuZ2UgYWRkcmVzc2VzXG4gIC8vIGdldCBhbGwgdGhlIGFkZGl0aW9uYWwgZXh0ZXJuYWwgb3V0cHV0cyB0aGUgc2VydmVyIGFkZGVkIGFuZCBjYWxjdWxhdGUgdGhlaXIgdmFsdWVzXG4gIGNvbnN0IGltcGxpY2l0RXh0ZXJuYWxPdXRwdXRzID0gaW1wbGljaXRPdXRwdXRzLmZpbHRlcigob3V0cHV0KSA9PiBvdXRwdXQuZXh0ZXJuYWwpO1xuICBjb25zdCBpbXBsaWNpdEV4dGVybmFsU3BlbmRBbW91bnQgPSB0b1ROdW1iZXIoXG4gICAgaW1wbGljaXRFeHRlcm5hbE91dHB1dHMucmVkdWNlKChzdW06IGJpZ2ludCwgbykgPT4gc3VtICsgQmlnSW50KG8udmFsdWUpLCBCaWdJbnQoMCkpLFxuICAgIGNvaW4uYW1vdW50VHlwZVxuICApIGFzIFROdW1iZXI7XG5cbiAgZnVuY3Rpb24gdG9PdXRwdXRzKG91dHB1dHM6IEV4cGVjdGVkT3V0cHV0W10gfCBDb21wYXJhYmxlT3V0cHV0V2l0aEV4dGVybmFsPGJpZ2ludCB8ICdtYXgnPltdKTogT3V0cHV0W10ge1xuICAgIHJldHVybiBvdXRwdXRzLm1hcCgob3V0cHV0KSA9PiAoe1xuICAgICAgYWRkcmVzczogdG9FeHRlbmRlZEFkZHJlc3NGb3JtYXQob3V0cHV0LnNjcmlwdCwgY29pbi5uYW1lKSxcbiAgICAgIGFtb3VudDogb3V0cHV0LnZhbHVlLnRvU3RyaW5nKCksXG4gICAgICBleHRlcm5hbDogb3V0cHV0LmV4dGVybmFsLFxuICAgIH0pKTtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAga2V5Y2hhaW5zLFxuICAgIGtleVNpZ25hdHVyZXM6IGdldEtleVNpZ25hdHVyZXMod2FsbGV0KSA/PyB7fSxcbiAgICBvdXRwdXRzOiBhbGxPdXRwdXREZXRhaWxzLFxuICAgIG1pc3NpbmdPdXRwdXRzOiB0b091dHB1dHMobWlzc2luZ091dHB1dHMpLFxuICAgIGV4cGxpY2l0RXh0ZXJuYWxPdXRwdXRzOiB0b091dHB1dHMoZXhwbGljaXRFeHRlcm5hbE91dHB1dHMpLFxuICAgIGltcGxpY2l0RXh0ZXJuYWxPdXRwdXRzOiB0b091dHB1dHMoaW1wbGljaXRFeHRlcm5hbE91dHB1dHMpLFxuICAgIGNoYW5nZU91dHB1dHMsXG4gICAgZXhwbGljaXRFeHRlcm5hbFNwZW5kQW1vdW50LFxuICAgIGltcGxpY2l0RXh0ZXJuYWxTcGVuZEFtb3VudCxcbiAgICBuZWVkc0N1c3RvbUNoYW5nZUtleVNpZ25hdHVyZVZlcmlmaWNhdGlvbixcbiAgICBjdXN0b21DaGFuZ2UsXG4gIH07XG59XG4iXX0=
|
|
221
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFyc2VUcmFuc2FjdGlvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy90cmFuc2FjdGlvbi9maXhlZFNjcmlwdC9wYXJzZVRyYW5zYWN0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sTUFBTSxNQUFNLFFBQVEsQ0FBQztBQUU1QixPQUFPLENBQUMsTUFBTSxRQUFRLENBQUM7QUFDdkIsT0FBTyxFQUF5QixVQUFVLEVBQXVDLE1BQU0saUJBQWlCLENBQUM7QUFJekcsT0FBTyxFQUNMLGNBQWMsRUFDZCxnQkFBZ0IsRUFDaEIsZ0JBQWdCLEVBQ2hCLFlBQVksRUFFWixrQkFBa0IsR0FDbkIsTUFBTSxpQkFBaUIsQ0FBQztBQUN6QixPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUNyRCxPQUFPLEVBQ0wsK0JBQStCLEVBQy9CLGlDQUFpQyxFQUNqQyxpQkFBaUIsRUFDakIsdUJBQXVCLEVBQ3ZCLGNBQWMsR0FDZixNQUFNLGNBQWMsQ0FBQztBQUN0QixPQUFPLEVBQW9DLGdCQUFnQixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDekYsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUcxQyxPQUFPLEVBQXVCLFdBQVcsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQU1qRSxTQUFTLCtCQUErQixDQUN0QyxJQUFzQixFQUN0QixNQUFpRDtJQUtqRCxNQUFNLE1BQU0sR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxDQUFDO0lBQzFDLCtCQUErQixDQUFDLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxNQUFNLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQztJQUNyRSxNQUFNLENBQUMsTUFBTSxDQUFDLE9BQU8sRUFBRSxxQkFBcUIsQ0FBQyxDQUFDO0lBQzlDLElBQUksaUJBQWlCLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7UUFDdEMsT0FBTyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsTUFBTSxDQUFDLE9BQU8sRUFBRSxDQUFDO0lBQzdDLENBQUM7SUFDRCxPQUFPLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7QUFDcEUsQ0FBQztBQUVELEtBQUssVUFBVSxtQkFBbUIsQ0FDaEMsSUFBc0IsRUFDdEIsTUFBd0M7SUFFeEMsTUFBTSxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsR0FBRyxNQUFNLENBQUM7SUFFcEMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUMxQixNQUFNLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxNQUFNLEtBQUssQ0FBQyxDQUFDLENBQUM7SUFFdkMsTUFBTSxjQUFjLEdBQUcsTUFBTSxNQUFNLENBQUMsY0FBYyxDQUFDLEVBQUUsTUFBTSxFQUFFLFFBQVEsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLEVBQUUsVUFBVSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7SUFDdkcsTUFBTSxVQUFVLEdBQUcsY0FBYyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQy9DLENBQUMsTUFBa0UsRUFBRSxFQUFFO1FBQ3JFLG1FQUFtRTtRQUNuRSxJQUFJLE1BQU0sQ0FBQyxNQUFNLEtBQUssTUFBTSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUM7WUFDbEMsT0FBTyxFQUFFLENBQUM7UUFDWixDQUFDO1FBQ0QsT0FBTyxDQUFDLCtCQUErQixDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDO0lBQ3pELENBQUMsQ0FDRixDQUFDO0lBRUYsaUZBQWlGO0lBQ2pGLE9BQU8sZ0JBQWdCLENBQUMsSUFBSSxFQUFFO1FBQzVCLEdBQUcsTUFBTTtRQUNULFFBQVEsRUFBRTtZQUNSLEdBQUcsUUFBUTtZQUNYLFVBQVU7WUFDVixRQUFRLEVBQUUsU0FBUztTQUNwQjtLQUNGLENBQUMsQ0FBQztBQUNMLENBQUM7QUFFRCxTQUFTLGlCQUFpQixDQUN4QixJQUFzQixFQUN0QixRQUlDO0lBRUQsZ0VBQWdFO0lBQ2hFLE1BQU0sZUFBZSxHQUFxQixDQUFDLFFBQVEsQ0FBQyxVQUFVLElBQUksRUFBRSxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUU7UUFDdkYsSUFBSSxNQUFNLENBQUMsT0FBTyxLQUFLLFNBQVMsRUFBRSxDQUFDO1lBQ2pDLE1BQU0sQ0FBQyxRQUFRLElBQUksTUFBTSxFQUFFLHFEQUFxRCxDQUFDLENBQUM7WUFDbEYsSUFBSSxNQUFNLENBQUMsTUFBTSxDQUFDLFFBQVEsRUFBRSxLQUFLLEdBQUcsRUFBRSxDQUFDO2dCQUNyQyxNQUFNLElBQUksS0FBSyxDQUFDLCtEQUErRCxNQUFNLEVBQUUsQ0FBQyxDQUFDO1lBQzNGLENBQUM7WUFDRCxPQUFPO2dCQUNMO29CQUNFLE1BQU0sRUFBRSxjQUFjLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUM7b0JBQ3pDLEtBQUssRUFBRSxNQUFNLENBQUMsTUFBTSxLQUFLLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQztpQkFDL0Q7YUFDRixDQUFDO1FBQ0osQ0FBQztRQUNELE9BQU87WUFDTDtnQkFDRSxNQUFNLEVBQUUsaUNBQWlDLENBQUMsTUFBTSxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDO2dCQUNwRSxLQUFLLEVBQUUsTUFBTSxDQUFDLE1BQU0sS0FBSyxLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUM7YUFDL0Q7U0FDRixDQUFDO0lBQ0osQ0FBQyxDQUFDLENBQUM7SUFDSCxJQUFJLFFBQVEsQ0FBQywwQkFBMEIsSUFBSSxRQUFRLENBQUMsYUFBYSxFQUFFLENBQUM7UUFDbEUsZUFBZSxDQUFDLElBQUksQ0FBQztZQUNuQixNQUFNLEVBQUUsY0FBYyxDQUFDLFFBQVEsQ0FBQyxhQUFhLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQztZQUN6RCxnR0FBZ0c7WUFDaEcsb0VBQW9FO1lBQ3BFLEtBQUssRUFBRSxLQUFLO1lBQ1osbUZBQW1GO1lBQ25GLFFBQVEsRUFBRSxJQUFJO1NBQ2YsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUNELE9BQU8sZUFBZSxDQUFDO0FBQ3pCLENBQUM7QUFFRCxTQUFTLHNCQUFzQixDQUFDLFlBQTBCLEVBQUUsWUFBaUM7SUFDM0YsS0FBSyxNQUFNLFFBQVEsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLEVBQUUsVUFBVSxDQUFDLE1BQU0sRUFBRSxVQUFVLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztRQUM5RSxJQUNFLENBQUMsa0JBQWtCLENBQUM7WUFDbEIsWUFBWTtZQUNaLGdCQUFnQixFQUFFLFlBQVksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDO1lBQzdDLFlBQVksRUFBRSxZQUFZLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQztTQUNoRCxDQUFDLEVBQ0YsQ0FBQztZQUNELE1BQU0sSUFBSSxLQUFLLENBQUMsa0NBQWtDLFVBQVUsQ0FBQyxRQUFRLENBQUMsQ0FBQyxXQUFXLEVBQUUsZ0JBQWdCLENBQUMsQ0FBQztRQUN4RyxDQUFDO0lBQ0gsQ0FBQztBQUNILENBQUM7QUFFRCxNQUFNLENBQUMsS0FBSyxVQUFVLGdCQUFnQixDQUNwQyxJQUFzQixFQUN0QixNQUF3QztJQUV4QyxNQUFNLEVBQUUsUUFBUSxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsWUFBWSxHQUFHLEVBQUUsRUFBRSxLQUFLLEVBQUUsR0FBRyxNQUFNLENBQUM7SUFFMUUsd0NBQXdDO0lBQ3hDLElBQUksUUFBUSxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQ3RCLE9BQU8sbUJBQW1CLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBQzNDLENBQUM7SUFFRCxJQUFJLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxZQUFZLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsWUFBWSxDQUFDLGlCQUFpQixDQUFDLEVBQUUsQ0FBQztRQUNuRyxNQUFNLElBQUksS0FBSyxDQUFDLGtEQUFrRCxDQUFDLENBQUM7SUFDdEUsQ0FBQztJQUNELE1BQU0saUJBQWlCLEdBQUcsWUFBWSxDQUFDLGlCQUFpQixDQUFDO0lBRXpELDBDQUEwQztJQUMxQyxJQUFJLFNBQVMsR0FBc0UsWUFBWSxDQUFDLFNBQVMsQ0FBQztJQUMxRyxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7UUFDZixJQUFJLGlCQUFpQixFQUFFLENBQUM7WUFDdEIsTUFBTSxJQUFJLEtBQUssQ0FBQywyQ0FBMkMsQ0FBQyxDQUFDO1FBQy9ELENBQUM7UUFDRCxTQUFTLEdBQUcsTUFBTSxjQUFjLENBQUMsSUFBSSxFQUFFLE1BQU0sRUFBRSxLQUFLLENBQUMsQ0FBQztJQUN4RCxDQUFDO0lBRUQsSUFBSSxDQUFDLGtCQUFrQixDQUFDLEVBQUUsQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDO1FBQ3RDLE1BQU0sSUFBSSxLQUFLLENBQUMsbUJBQW1CLENBQUMsQ0FBQztJQUN2QyxDQUFDO0lBRUQsTUFBTSxhQUFhLEdBQXlCLGdCQUFnQixDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBRXhFLE1BQU0sY0FBYyxHQUFHLFVBQVUsQ0FBQyxTQUFTLElBQUksVUFBVSxDQUFDLEtBQUssQ0FBQztJQUNoRSxJQUFJLENBQUMsQ0FBQyxXQUFXLENBQUMsY0FBYyxDQUFDLEVBQUUsQ0FBQztRQUNsQyxNQUFNLElBQUksS0FBSyxDQUFDLDRDQUE0QyxDQUFDLENBQUM7SUFDaEUsQ0FBQztJQUVELE1BQU0sZUFBZSxHQUFHLGlCQUFpQixDQUFDLElBQUksRUFBRSxRQUFRLENBQUMsQ0FBQztJQUUxRCw0REFBNEQ7SUFDNUQsSUFBSSxZQUE2QyxDQUFDO0lBQ2xELE1BQU0sRUFBRSxvQkFBb0IsR0FBRyxTQUFTLEVBQUUsR0FBRyxNQUFNLENBQUMsWUFBWSxFQUFFLElBQUksRUFBRSxDQUFDO0lBQ3pFLElBQUksb0JBQW9CLEVBQUUsQ0FBQztRQUN6QixvRUFBb0U7UUFDcEUsb0ZBQW9GO1FBQ3BGLE1BQU0seUJBQXlCLEdBQUcsTUFBTSxDQUFDLE9BQU8sQ0FBQyx5QkFBeUIsQ0FBQztRQUMzRSxNQUFNLGtCQUFrQixHQUFXLE1BQU0sSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsRUFBRSxvQkFBb0IsRUFBRSxDQUFDLENBQUM7UUFDMUYsTUFBTSxnQkFBZ0IsR0FBRyxNQUFNLGNBQWMsQ0FBQyxJQUFJLEVBQUUsa0JBQWtCLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFFL0UsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7WUFDdEIsTUFBTSxJQUFJLEtBQUssQ0FBQyxvREFBb0QsQ0FBQyxDQUFDO1FBQ3hFLENBQUM7UUFFRCxJQUFJLGdCQUFnQixDQUFDLElBQUksSUFBSSxnQkFBZ0IsQ0FBQyxNQUFNLElBQUksZ0JBQWdCLENBQUMsS0FBSyxJQUFJLGtCQUFrQixFQUFFLENBQUM7WUFDckcsTUFBTSxxQkFBcUIsR0FBeUI7Z0JBQ2xELGdCQUFnQixDQUFDLElBQUk7Z0JBQ3JCLGdCQUFnQixDQUFDLE1BQU07Z0JBQ3ZCLGdCQUFnQixDQUFDLEtBQUs7YUFDdkIsQ0FBQztZQUVGLFlBQVksR0FBRztnQkFDYixJQUFJLEVBQUUscUJBQXFCO2dCQUMzQixVQUFVLEVBQUUsQ0FBQyx5QkFBeUIsQ0FBQyxJQUFJLEVBQUUseUJBQXlCLENBQUMsTUFBTSxFQUFFLHlCQUF5QixDQUFDLEtBQUssQ0FBQzthQUNoSCxDQUFDO1FBQ0osQ0FBQztJQUNILENBQUM7SUFFRCxJQUFJLGlCQUE2QyxDQUFDO0lBQ2xELElBQUksWUFBWSxFQUFFLENBQUM7UUFDakIsc0JBQXNCLENBQUMsYUFBYSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsRUFBRSxZQUFZLENBQUMsQ0FBQztRQUNyRSxpQkFBaUIsR0FBRyxZQUFZLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3RELENBQUM7SUFFRCxxQkFBcUI7SUFDckIsTUFBTSxXQUFXLEdBQTJCLE1BQU0sSUFBSSxDQUFDLGtCQUFrQixDQUFVO1FBQ2pGLEtBQUssRUFBRSxjQUFjO1FBQ3JCLE1BQU0sRUFBRSxVQUFVLENBQUMsTUFBTTtRQUN6QixJQUFJLEVBQUUsYUFBYSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBbUI7UUFDdkQsaUJBQWlCO0tBQ2xCLENBQUMsQ0FBQztJQUVILE1BQU0sVUFBVSxHQUFHLENBQUMsR0FBRyxXQUFXLENBQUMsT0FBTyxFQUFFLEdBQUcsV0FBVyxDQUFDLGFBQWEsQ0FBQyxDQUFDO0lBRTFFOzs7T0FHRztJQUNILE1BQU0sZ0JBQWdCLEdBQWEsTUFBTSxPQUFPLENBQUMsR0FBRyxDQUNsRCxVQUFVLENBQUMsR0FBRyxDQUFDLENBQUMsYUFBYSxFQUFFLEVBQUU7UUFDL0IsT0FBTyxXQUFXLENBQUM7WUFDakIsYUFBYTtZQUNiLElBQUk7WUFDSixVQUFVO1lBQ1YsWUFBWTtZQUNaLGFBQWEsRUFBRSxnQkFBZ0IsQ0FBQyxTQUFTLENBQUM7WUFDMUMsTUFBTTtZQUNOLFFBQVEsRUFBRTtnQkFDUixVQUFVLEVBQUUsUUFBUSxDQUFDLFVBQVUsSUFBSSxFQUFFO2dCQUNyQyxhQUFhLEVBQUUsUUFBUSxDQUFDLGFBQWE7YUFDdEM7WUFDRCxZQUFZO1lBQ1osS0FBSztTQUNOLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQyxDQUNILENBQUM7SUFFRixNQUFNLHlDQUF5QyxHQUFHLGdCQUFnQixDQUFDLElBQUksQ0FDckUsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFFLE1BQWtDLEVBQUUseUNBQXlDLENBQzNGLENBQUM7SUFFRixNQUFNLGFBQWEsR0FBRyxDQUFDLENBQUMsTUFBTSxDQUFDLGdCQUFnQixFQUFFLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUM7SUFFdEUsU0FBUywrQkFBK0IsQ0FBQyxPQUFpQjtRQUN4RCxPQUFPLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLENBQUM7WUFDOUIsTUFBTSxFQUFFLGlDQUFpQyxDQUFDLE1BQU0sQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQztZQUNwRSxLQUFLLEVBQUUsTUFBTSxDQUFDLE1BQU0sS0FBSyxLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUUsTUFBTSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQW9CO1lBQ2xGLFFBQVEsRUFBRSxNQUFNLENBQUMsUUFBUTtTQUMxQixDQUFDLENBQUMsQ0FBQztJQUNOLENBQUM7SUFFRCxNQUFNLGNBQWMsR0FBRyxnQkFBZ0IsQ0FBQyxlQUFlLEVBQUUsK0JBQStCLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQztJQUV0RyxNQUFNLGVBQWUsR0FBRyxnQkFBZ0IsQ0FBQywrQkFBK0IsQ0FBQyxnQkFBZ0IsQ0FBQyxFQUFFLGVBQWUsQ0FBQyxDQUFDO0lBQzdHLE1BQU0sZUFBZSxHQUFHLGdCQUFnQixDQUFDLCtCQUErQixDQUFDLGdCQUFnQixDQUFDLEVBQUUsZUFBZSxDQUFDLENBQUM7SUFFN0csbUdBQW1HO0lBQ25HLE1BQU0sdUJBQXVCLEdBQUcsZUFBZSxDQUFDLE1BQU0sQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQ3BGLHNGQUFzRjtJQUN0RixNQUFNLDJCQUEyQixHQUFHLFNBQVMsQ0FDM0MsdUJBQXVCLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBVyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsR0FBRyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQ3BGLElBQUksQ0FBQyxVQUFVLENBQ0wsQ0FBQztJQUViOzs7Ozs7Ozs7T0FTRztJQUVILDhEQUE4RDtJQUM5RCxzRkFBc0Y7SUFDdEYsTUFBTSx1QkFBdUIsR0FBRyxlQUFlLENBQUMsTUFBTSxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDcEYsTUFBTSwyQkFBMkIsR0FBRyxTQUFTLENBQzNDLHVCQUF1QixDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQVcsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLEdBQUcsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUNwRixJQUFJLENBQUMsVUFBVSxDQUNMLENBQUM7SUFFYixTQUFTLFNBQVMsQ0FBQyxPQUEwRTtRQUMzRixPQUFPLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLENBQUM7WUFDOUIsT0FBTyxFQUFFLHVCQUF1QixDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQztZQUMxRCxNQUFNLEVBQUUsTUFBTSxDQUFDLEtBQUssQ0FBQyxRQUFRLEVBQUU7WUFDL0IsUUFBUSxFQUFFLE1BQU0sQ0FBQyxRQUFRO1NBQzFCLENBQUMsQ0FBQyxDQUFDO0lBQ04sQ0FBQztJQUVELE9BQU87UUFDTCxTQUFTO1FBQ1QsYUFBYSxFQUFFLGdCQUFnQixDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUU7UUFDN0MsT0FBTyxFQUFFLGdCQUFnQjtRQUN6QixjQUFjLEVBQUUsU0FBUyxDQUFDLGNBQWMsQ0FBQztRQUN6Qyx1QkFBdUIsRUFBRSxTQUFTLENBQUMsdUJBQXVCLENBQUM7UUFDM0QsdUJBQXVCLEVBQUUsU0FBUyxDQUFDLHVCQUF1QixDQUFDO1FBQzNELGFBQWE7UUFDYiwyQkFBMkI7UUFDM0IsMkJBQTJCO1FBQzNCLHlDQUF5QztRQUN6QyxZQUFZO0tBQ2IsQ0FBQztBQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgYXNzZXJ0IGZyb20gJ2Fzc2VydCc7XG5cbmltcG9ydCBfIGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgeyBJVHJhbnNhY3Rpb25SZWNpcGllbnQsIEtleUluZGljZXMsIFRyaXBsZSwgVmVyaWZpY2F0aW9uT3B0aW9ucywgV2FsbGV0IH0gZnJvbSAnQGJpdGdvL3Nkay1jb3JlJztcblxuaW1wb3J0IHR5cGUgeyBBYnN0cmFjdFV0eG9Db2luLCBQYXJzZVRyYW5zYWN0aW9uT3B0aW9ucyB9IGZyb20gJy4uLy4uL2Fic3RyYWN0VXR4b0NvaW4nO1xuaW1wb3J0IHR5cGUgeyBGaXhlZFNjcmlwdFdhbGxldE91dHB1dCwgT3V0cHV0LCBQYXJzZWRUcmFuc2FjdGlvbiB9IGZyb20gJy4uL3R5cGVzJztcbmltcG9ydCB7XG4gIGZldGNoS2V5Y2hhaW5zLFxuICBnZXRLZXlTaWduYXR1cmVzLFxuICB0b0tleWNoYWluVHJpcGxlLFxuICB0b1hwdWJUcmlwbGUsXG4gIFV0eG9LZXljaGFpbixcbiAgVXR4b05hbWVkS2V5Y2hhaW5zLFxufSBmcm9tICcuLi8uLi9rZXljaGFpbnMnO1xuaW1wb3J0IHsgdmVyaWZ5S2V5U2lnbmF0dXJlIH0gZnJvbSAnLi4vLi4vdmVyaWZ5S2V5JztcbmltcG9ydCB7XG4gIGFzc2VydFZhbGlkVHJhbnNhY3Rpb25SZWNpcGllbnQsXG4gIGZyb21FeHRlbmRlZEFkZHJlc3NGb3JtYXRUb1NjcmlwdCxcbiAgaXNTY3JpcHRSZWNpcGllbnQsXG4gIHRvRXh0ZW5kZWRBZGRyZXNzRm9ybWF0LFxuICB0b091dHB1dFNjcmlwdCxcbn0gZnJvbSAnLi4vcmVjaXBpZW50JztcbmltcG9ydCB7IENvbXBhcmFibGVPdXRwdXQsIEV4cGVjdGVkT3V0cHV0LCBvdXRwdXREaWZmZXJlbmNlIH0gZnJvbSAnLi4vb3V0cHV0RGlmZmVyZW5jZSc7XG5pbXBvcnQgeyB0b1ROdW1iZXIgfSBmcm9tICcuLi8uLi90bnVtYmVyJztcblxuaW1wb3J0IHR5cGUgeyBUcmFuc2FjdGlvbkV4cGxhbmF0aW9uIH0gZnJvbSAnLi9leHBsYWluVHJhbnNhY3Rpb24nO1xuaW1wb3J0IHsgQ3VzdG9tQ2hhbmdlT3B0aW9ucywgcGFyc2VPdXRwdXQgfSBmcm9tICcuL3BhcnNlT3V0cHV0JztcblxuZXhwb3J0IHR5cGUgQ29tcGFyYWJsZU91dHB1dFdpdGhFeHRlcm5hbDxUVmFsdWU+ID0gKENvbXBhcmFibGVPdXRwdXQ8VFZhbHVlPiB8IEV4cGVjdGVkT3V0cHV0KSAmIHtcbiAgZXh0ZXJuYWw6IGJvb2xlYW4gfCB1bmRlZmluZWQ7XG59O1xuXG5mdW5jdGlvbiB0b0Nhbm9uaWNhbFRyYW5zYWN0aW9uUmVjaXBpZW50KFxuICBjb2luOiBBYnN0cmFjdFV0eG9Db2luLFxuICBvdXRwdXQ6IHsgdmFsdWVTdHJpbmc6IHN0cmluZzsgYWRkcmVzcz86IHN0cmluZyB9XG4pOiB7XG4gIGFtb3VudDogYmlnaW50O1xuICBhZGRyZXNzOiBzdHJpbmc7XG59IHtcbiAgY29uc3QgYW1vdW50ID0gQmlnSW50KG91dHB1dC52YWx1ZVN0cmluZyk7XG4gIGFzc2VydFZhbGlkVHJhbnNhY3Rpb25SZWNpcGllbnQoeyBhbW91bnQsIGFkZHJlc3M6IG91dHB1dC5hZGRyZXNzIH0pO1xuICBhc3NlcnQob3V0cHV0LmFkZHJlc3MsICdhZGRyZXNzIGlzIHJlcXVpcmVkJyk7XG4gIGlmIChpc1NjcmlwdFJlY2lwaWVudChvdXRwdXQuYWRkcmVzcykpIHtcbiAgICByZXR1cm4geyBhbW91bnQsIGFkZHJlc3M6IG91dHB1dC5hZGRyZXNzIH07XG4gIH1cbiAgcmV0dXJuIHsgYW1vdW50LCBhZGRyZXNzOiBjb2luLmNhbm9uaWNhbEFkZHJlc3Mob3V0cHV0LmFkZHJlc3MpIH07XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHBhcnNlUmJmVHJhbnNhY3Rpb248VE51bWJlciBleHRlbmRzIGJpZ2ludCB8IG51bWJlcj4oXG4gIGNvaW46IEFic3RyYWN0VXR4b0NvaW4sXG4gIHBhcmFtczogUGFyc2VUcmFuc2FjdGlvbk9wdGlvbnM8VE51bWJlcj5cbik6IFByb21pc2U8UGFyc2VkVHJhbnNhY3Rpb248VE51bWJlcj4+IHtcbiAgY29uc3QgeyB0eFBhcmFtcywgd2FsbGV0IH0gPSBwYXJhbXM7XG5cbiAgYXNzZXJ0KHR4UGFyYW1zLnJiZlR4SWRzKTtcbiAgYXNzZXJ0KHR4UGFyYW1zLnJiZlR4SWRzLmxlbmd0aCA9PT0gMSk7XG5cbiAgY29uc3QgdHhUb0JlUmVwbGFjZWQgPSBhd2FpdCB3YWxsZXQuZ2V0VHJhbnNhY3Rpb24oeyB0eEhhc2g6IHR4UGFyYW1zLnJiZlR4SWRzWzBdLCBpbmNsdWRlUmJmOiB0cnVlIH0pO1xuICBjb25zdCByZWNpcGllbnRzID0gdHhUb0JlUmVwbGFjZWQub3V0cHV0cy5mbGF0TWFwKFxuICAgIChvdXRwdXQ6IHsgdmFsdWVTdHJpbmc6IHN0cmluZzsgYWRkcmVzcz86IHN0cmluZzsgd2FsbGV0Pzogc3RyaW5nIH0pID0+IHtcbiAgICAgIC8vIEZvciBzZWxmLXNlbmRzLCB0aGUgd2FsbGV0SWQgd2lsbCBiZSB0aGUgc2FtZSBhcyB0aGUgd2FsbGV0J3MgaWRcbiAgICAgIGlmIChvdXRwdXQud2FsbGV0ID09PSB3YWxsZXQuaWQoKSkge1xuICAgICAgICByZXR1cm4gW107XG4gICAgICB9XG4gICAgICByZXR1cm4gW3RvQ2Fub25pY2FsVHJhbnNhY3Rpb25SZWNpcGllbnQoY29pbiwgb3V0cHV0KV07XG4gICAgfVxuICApO1xuXG4gIC8vIFJlY3Vyc2UgaW50byBwYXJzZVRyYW5zYWN0aW9uIHdpdGggdGhlIGRlcml2ZWQgcmVjaXBpZW50cyBhbmQgd2l0aG91dCByYmZUeElkc1xuICByZXR1cm4gcGFyc2VUcmFuc2FjdGlvbihjb2luLCB7XG4gICAgLi4ucGFyYW1zLFxuICAgIHR4UGFyYW1zOiB7XG4gICAgICAuLi50eFBhcmFtcyxcbiAgICAgIHJlY2lwaWVudHMsXG4gICAgICByYmZUeElkczogdW5kZWZpbmVkLFxuICAgIH0sXG4gIH0pO1xufVxuXG5mdW5jdGlvbiB0b0V4cGVjdGVkT3V0cHV0cyhcbiAgY29pbjogQWJzdHJhY3RVdHhvQ29pbixcbiAgdHhQYXJhbXM6IHtcbiAgICByZWNpcGllbnRzPzogSVRyYW5zYWN0aW9uUmVjaXBpZW50W107XG4gICAgYWxsb3dFeHRlcm5hbENoYW5nZUFkZHJlc3M/OiBib29sZWFuO1xuICAgIGNoYW5nZUFkZHJlc3M/OiBzdHJpbmc7XG4gIH1cbik6IEV4cGVjdGVkT3V0cHV0W10ge1xuICAvLyB2ZXJpZnkgdGhhdCBlYWNoIHJlY2lwaWVudCBmcm9tIHR4UGFyYW1zIGhhcyB0aGVpciBvd24gb3V0cHV0XG4gIGNvbnN0IGV4cGVjdGVkT3V0cHV0czogRXhwZWN0ZWRPdXRwdXRbXSA9ICh0eFBhcmFtcy5yZWNpcGllbnRzID8/IFtdKS5mbGF0TWFwKChvdXRwdXQpID0+IHtcbiAgICBpZiAob3V0cHV0LmFkZHJlc3MgPT09IHVuZGVmaW5lZCkge1xuICAgICAgYXNzZXJ0KCdzY3JpcHQnIGluIG91dHB1dCwgJ3NjcmlwdCBpcyByZXF1aXJlZCBmb3Igbm9uLWVuY29kZWFibGUgc2NyaXB0UHVia2V5cycpO1xuICAgICAgaWYgKG91dHB1dC5hbW91bnQudG9TdHJpbmcoKSAhPT0gJzAnKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgT25seSB6ZXJvIGFtb3VudHMgYWxsb3dlZCBmb3Igbm9uLWVuY29kZWFibGUgc2NyaXB0UHVia2V5czogJHtvdXRwdXR9YCk7XG4gICAgICB9XG4gICAgICByZXR1cm4gW1xuICAgICAgICB7XG4gICAgICAgICAgc2NyaXB0OiB0b091dHB1dFNjcmlwdChvdXRwdXQsIGNvaW4ubmFtZSksXG4gICAgICAgICAgdmFsdWU6IG91dHB1dC5hbW91bnQgPT09ICdtYXgnID8gJ21heCcgOiBCaWdJbnQob3V0cHV0LmFtb3VudCksXG4gICAgICAgIH0sXG4gICAgICBdO1xuICAgIH1cbiAgICByZXR1cm4gW1xuICAgICAge1xuICAgICAgICBzY3JpcHQ6IGZyb21FeHRlbmRlZEFkZHJlc3NGb3JtYXRUb1NjcmlwdChvdXRwdXQuYWRkcmVzcywgY29pbi5uYW1lKSxcbiAgICAgICAgdmFsdWU6IG91dHB1dC5hbW91bnQgPT09ICdtYXgnID8gJ21heCcgOiBCaWdJbnQob3V0cHV0LmFtb3VudCksXG4gICAgICB9LFxuICAgIF07XG4gIH0pO1xuICBpZiAodHhQYXJhbXMuYWxsb3dFeHRlcm5hbENoYW5nZUFkZHJlc3MgJiYgdHhQYXJhbXMuY2hhbmdlQWRkcmVzcykge1xuICAgIGV4cGVjdGVkT3V0cHV0cy5wdXNoKHtcbiAgICAgIHNjcmlwdDogdG9PdXRwdXRTY3JpcHQodHhQYXJhbXMuY2hhbmdlQWRkcmVzcywgY29pbi5uYW1lKSxcbiAgICAgIC8vIFdoZW4gYW4gZXh0ZXJuYWwgY2hhbmdlIGFkZHJlc3MgaXMgZXhwbGljaXRseSBzcGVjaWZpZWQsIGNvdW50IGFsbCBvdXRwdXRzIGdvaW5nIHRvd2FyZHMgdGhhdFxuICAgICAgLy8gYWRkcmVzcyBpbiB0aGUgZXhwZWN0ZWQgb3V0cHV0cyAocmVnYXJkbGVzcyBvZiB0aGUgb3V0cHV0IGFtb3VudClcbiAgICAgIHZhbHVlOiAnbWF4JyxcbiAgICAgIC8vIE5vdGUgdGhhdCB0aGUgY2hhbmdlIG91dHB1dCBpcyBub3QgcmVxdWlyZWQgdG8gZXhpc3QsIHNvIHdlIG1hcmsgaXQgYXMgb3B0aW9uYWwuXG4gICAgICBvcHRpb25hbDogdHJ1ZSxcbiAgICB9KTtcbiAgfVxuICByZXR1cm4gZXhwZWN0ZWRPdXRwdXRzO1xufVxuXG5mdW5jdGlvbiB2ZXJpZnlDdXN0b21DaGFuZ2VLZXlzKHVzZXJLZXljaGFpbjogVXR4b0tleWNoYWluLCBjdXN0b21DaGFuZ2U6IEN1c3RvbUNoYW5nZU9wdGlvbnMpOiB2b2lkIHtcbiAgZm9yIChjb25zdCBrZXlJbmRleCBvZiBbS2V5SW5kaWNlcy5VU0VSLCBLZXlJbmRpY2VzLkJBQ0tVUCwgS2V5SW5kaWNlcy5CSVRHT10pIHtcbiAgICBpZiAoXG4gICAgICAhdmVyaWZ5S2V5U2lnbmF0dXJlKHtcbiAgICAgICAgdXNlcktleWNoYWluLFxuICAgICAgICBrZXljaGFpblRvVmVyaWZ5OiBjdXN0b21DaGFuZ2Uua2V5c1trZXlJbmRleF0sXG4gICAgICAgIGtleVNpZ25hdHVyZTogY3VzdG9tQ2hhbmdlLnNpZ25hdHVyZXNba2V5SW5kZXhdLFxuICAgICAgfSlcbiAgICApIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgZmFpbGVkIHRvIHZlcmlmeSBjdXN0b20gY2hhbmdlICR7S2V5SW5kaWNlc1trZXlJbmRleF0udG9Mb3dlckNhc2UoKX0ga2V5IHNpZ25hdHVyZWApO1xuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcGFyc2VUcmFuc2FjdGlvbjxUTnVtYmVyIGV4dGVuZHMgYmlnaW50IHwgbnVtYmVyPihcbiAgY29pbjogQWJzdHJhY3RVdHhvQ29pbixcbiAgcGFyYW1zOiBQYXJzZVRyYW5zYWN0aW9uT3B0aW9uczxUTnVtYmVyPlxuKTogUHJvbWlzZTxQYXJzZWRUcmFuc2FjdGlvbjxUTnVtYmVyPj4ge1xuICBjb25zdCB7IHR4UGFyYW1zLCB0eFByZWJ1aWxkLCB3YWxsZXQsIHZlcmlmaWNhdGlvbiA9IHt9LCByZXFJZCB9ID0gcGFyYW1zO1xuXG4gIC8vIEJyYW5jaCBvZmYgZWFybHkgZm9yIFJCRiB0cmFuc2FjdGlvbnNcbiAgaWYgKHR4UGFyYW1zLnJiZlR4SWRzKSB7XG4gICAgcmV0dXJuIHBhcnNlUmJmVHJhbnNhY3Rpb24oY29pbiwgcGFyYW1zKTtcbiAgfVxuXG4gIGlmICghXy5pc1VuZGVmaW5lZCh2ZXJpZmljYXRpb24uZGlzYWJsZU5ldHdvcmtpbmcpICYmICFfLmlzQm9vbGVhbih2ZXJpZmljYXRpb24uZGlzYWJsZU5ldHdvcmtpbmcpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCd2ZXJpZmljYXRpb24uZGlzYWJsZU5ldHdvcmtpbmcgbXVzdCBiZSBhIGJvb2xlYW4nKTtcbiAgfVxuICBjb25zdCBkaXNhYmxlTmV0d29ya2luZyA9IHZlcmlmaWNhdGlvbi5kaXNhYmxlTmV0d29ya2luZztcblxuICAvLyBvYnRhaW4gdGhlIGtleWNoYWlucyBhbmQga2V5IHNpZ25hdHVyZXNcbiAgbGV0IGtleWNoYWluczogVXR4b05hbWVkS2V5Y2hhaW5zIHwgVmVyaWZpY2F0aW9uT3B0aW9uc1sna2V5Y2hhaW5zJ10gfCB1bmRlZmluZWQgPSB2ZXJpZmljYXRpb24ua2V5Y2hhaW5zO1xuICBpZiAoIWtleWNoYWlucykge1xuICAgIGlmIChkaXNhYmxlTmV0d29ya2luZykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdjYW5ub3QgZmV0Y2gga2V5Y2hhaW5zIHdpdGhvdXQgbmV0d29ya2luZycpO1xuICAgIH1cbiAgICBrZXljaGFpbnMgPSBhd2FpdCBmZXRjaEtleWNoYWlucyhjb2luLCB3YWxsZXQsIHJlcUlkKTtcbiAgfVxuXG4gIGlmICghVXR4b05hbWVkS2V5Y2hhaW5zLmlzKGtleWNoYWlucykpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ2ludmFsaWQga2V5Y2hhaW5zJyk7XG4gIH1cblxuICBjb25zdCBrZXljaGFpbkFycmF5OiBUcmlwbGU8VXR4b0tleWNoYWluPiA9IHRvS2V5Y2hhaW5UcmlwbGUoa2V5Y2hhaW5zKTtcblxuICBjb25zdCBlZmZlY3RpdmVUeEhleCA9IHR4UHJlYnVpbGQudHhIZXhQc2J0ID8/IHR4UHJlYnVpbGQudHhIZXg7XG4gIGlmIChfLmlzVW5kZWZpbmVkKGVmZmVjdGl2ZVR4SGV4KSkge1xuICAgIHRocm93IG5ldyBFcnJvcignbWlzc2luZyByZXF1aXJlZCB0eFByZWJ1aWxkIHByb3BlcnR5IHR4SGV4Jyk7XG4gIH1cblxuICBjb25zdCBleHBlY3RlZE91dHB1dHMgPSB0b0V4cGVjdGVkT3V0cHV0cyhjb2luLCB0eFBhcmFtcyk7XG5cbiAgLy8gZ2V0IHRoZSBrZXljaGFpbnMgZnJvbSB0aGUgY3VzdG9tIGNoYW5nZSB3YWxsZXQgaWYgbmVlZGVkXG4gIGxldCBjdXN0b21DaGFuZ2U6IEN1c3RvbUNoYW5nZU9wdGlvbnMgfCB1bmRlZmluZWQ7XG4gIGNvbnN0IHsgY3VzdG9tQ2hhbmdlV2FsbGV0SWQgPSB1bmRlZmluZWQgfSA9IHdhbGxldC5jb2luU3BlY2lmaWMoKSB8fCB7fTtcbiAgaWYgKGN1c3RvbUNoYW5nZVdhbGxldElkKSB7XG4gICAgLy8gZmV0Y2gga2V5Y2hhaW5zIGZyb20gY3VzdG9tIGNoYW5nZSB3YWxsZXQgZm9yIGRlcml2aW5nIGFkZHJlc3Nlcy5cbiAgICAvLyBUaGVzZSBrZXljaGFpbnMgc2hvdWxkIGJlIHNpZ25lZCBhbmQgdGhpcyBzaG91bGQgYmUgdmVyaWZpZWQgaW4gdmVyaWZ5VHJhbnNhY3Rpb25cbiAgICBjb25zdCBjdXN0b21DaGFuZ2VLZXlTaWduYXR1cmVzID0gd2FsbGV0Ll93YWxsZXQuY3VzdG9tQ2hhbmdlS2V5U2lnbmF0dXJlcztcbiAgICBjb25zdCBjdXN0b21DaGFuZ2VXYWxsZXQ6IFdhbGxldCA9IGF3YWl0IGNvaW4ud2FsbGV0cygpLmdldCh7IGlkOiBjdXN0b21DaGFuZ2VXYWxsZXRJZCB9KTtcbiAgICBjb25zdCBjdXN0b21DaGFuZ2VLZXlzID0gYXdhaXQgZmV0Y2hLZXljaGFpbnMoY29pbiwgY3VzdG9tQ2hhbmdlV2FsbGV0LCByZXFJZCk7XG5cbiAgICBpZiAoIWN1c3RvbUNoYW5nZUtleXMpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignZmFpbGVkIHRvIGZldGNoIGtleWNoYWlucyBmb3IgY3VzdG9tIGNoYW5nZSB3YWxsZXQnKTtcbiAgICB9XG5cbiAgICBpZiAoY3VzdG9tQ2hhbmdlS2V5cy51c2VyICYmIGN1c3RvbUNoYW5nZUtleXMuYmFja3VwICYmIGN1c3RvbUNoYW5nZUtleXMuYml0Z28gJiYgY3VzdG9tQ2hhbmdlV2FsbGV0KSB7XG4gICAgICBjb25zdCBjdXN0b21DaGFuZ2VLZXljaGFpbnM6IFRyaXBsZTxVdHhvS2V5Y2hhaW4+ID0gW1xuICAgICAgICBjdXN0b21DaGFuZ2VLZXlzLnVzZXIsXG4gICAgICAgIGN1c3RvbUNoYW5nZUtleXMuYmFja3VwLFxuICAgICAgICBjdXN0b21DaGFuZ2VLZXlzLmJpdGdvLFxuICAgICAgXTtcblxuICAgICAgY3VzdG9tQ2hhbmdlID0ge1xuICAgICAgICBrZXlzOiBjdXN0b21DaGFuZ2VLZXljaGFpbnMsXG4gICAgICAgIHNpZ25hdHVyZXM6IFtjdXN0b21DaGFuZ2VLZXlTaWduYXR1cmVzLnVzZXIsIGN1c3RvbUNoYW5nZUtleVNpZ25hdHVyZXMuYmFja3VwLCBjdXN0b21DaGFuZ2VLZXlTaWduYXR1cmVzLmJpdGdvXSxcbiAgICAgIH07XG4gICAgfVxuICB9XG5cbiAgbGV0IGN1c3RvbUNoYW5nZVhwdWJzOiBUcmlwbGU8c3RyaW5nPiB8IHVuZGVmaW5lZDtcbiAgaWYgKGN1c3RvbUNoYW5nZSkge1xuICAgIHZlcmlmeUN1c3RvbUNoYW5nZUtleXMoa2V5Y2hhaW5BcnJheVtLZXlJbmRpY2VzLlVTRVJdLCBjdXN0b21DaGFuZ2UpO1xuICAgIGN1c3RvbUNoYW5nZVhwdWJzID0gdG9YcHViVHJpcGxlKGN1c3RvbUNoYW5nZS5rZXlzKTtcbiAgfVxuXG4gIC8vIG9idGFpbiBhbGwgb3V0cHV0c1xuICBjb25zdCBleHBsYW5hdGlvbjogVHJhbnNhY3Rpb25FeHBsYW5hdGlvbiA9IGF3YWl0IGNvaW4uZXhwbGFpblRyYW5zYWN0aW9uPFROdW1iZXI+KHtcbiAgICB0eEhleDogZWZmZWN0aXZlVHhIZXgsXG4gICAgdHhJbmZvOiB0eFByZWJ1aWxkLnR4SW5mbyxcbiAgICBwdWJzOiBrZXljaGFpbkFycmF5Lm1hcCgoaykgPT4gay5wdWIpIGFzIFRyaXBsZTxzdHJpbmc+LFxuICAgIGN1c3RvbUNoYW5nZVhwdWJzLFxuICB9KTtcblxuICBjb25zdCBhbGxPdXRwdXRzID0gWy4uLmV4cGxhbmF0aW9uLm91dHB1dHMsIC4uLmV4cGxhbmF0aW9uLmNoYW5nZU91dHB1dHNdO1xuXG4gIC8qKlxuICAgKiBMb29wIHRocm91Z2ggYWxsIHRoZSBvdXRwdXRzIGFuZCBjbGFzc2lmeSBlYWNoIG9mIHRoZW0gYXMgZWl0aGVyIGludGVybmFsIHNwZW5kc1xuICAgKiBvciBleHRlcm5hbCBzcGVuZHMgYnkgc2V0dGluZyB0aGUgXCJleHRlcm5hbFwiIHByb3BlcnR5IHRvIHRydWUgb3IgZmFsc2Ugb24gdGhlIG91dHB1dCBvYmplY3QuXG4gICAqL1xuICBjb25zdCBhbGxPdXRwdXREZXRhaWxzOiBPdXRwdXRbXSA9IGF3YWl0IFByb21pc2UuYWxsKFxuICAgIGFsbE91dHB1dHMubWFwKChjdXJyZW50T3V0cHV0KSA9PiB7XG4gICAgICByZXR1cm4gcGFyc2VPdXRwdXQoe1xuICAgICAgICBjdXJyZW50T3V0cHV0LFxuICAgICAgICBjb2luLFxuICAgICAgICB0eFByZWJ1aWxkLFxuICAgICAgICB2ZXJpZmljYXRpb24sXG4gICAgICAgIGtleWNoYWluQXJyYXk6IHRvS2V5Y2hhaW5UcmlwbGUoa2V5Y2hhaW5zKSxcbiAgICAgICAgd2FsbGV0LFxuICAgICAgICB0eFBhcmFtczoge1xuICAgICAgICAgIHJlY2lwaWVudHM6IHR4UGFyYW1zLnJlY2lwaWVudHMgPz8gW10sXG4gICAgICAgICAgY2hhbmdlQWRkcmVzczogdHhQYXJhbXMuY2hhbmdlQWRkcmVzcyxcbiAgICAgICAgfSxcbiAgICAgICAgY3VzdG9tQ2hhbmdlLFxuICAgICAgICByZXFJZCxcbiAgICAgIH0pO1xuICAgIH0pXG4gICk7XG5cbiAgY29uc3QgbmVlZHNDdXN0b21DaGFuZ2VLZXlTaWduYXR1cmVWZXJpZmljYXRpb24gPSBhbGxPdXRwdXREZXRhaWxzLnNvbWUoXG4gICAgKG91dHB1dCkgPT4gKG91dHB1dCBhcyBGaXhlZFNjcmlwdFdhbGxldE91dHB1dCk/Lm5lZWRzQ3VzdG9tQ2hhbmdlS2V5U2lnbmF0dXJlVmVyaWZpY2F0aW9uXG4gICk7XG5cbiAgY29uc3QgY2hhbmdlT3V0cHV0cyA9IF8uZmlsdGVyKGFsbE91dHB1dERldGFpbHMsIHsgZXh0ZXJuYWw6IGZhbHNlIH0pO1xuXG4gIGZ1bmN0aW9uIHRvQ29tcGFyYWJsZU91dHB1dHNXaXRoRXh0ZXJuYWwob3V0cHV0czogT3V0cHV0W10pOiBDb21wYXJhYmxlT3V0cHV0V2l0aEV4dGVybmFsPGJpZ2ludCB8ICdtYXgnPltdIHtcbiAgICByZXR1cm4gb3V0cHV0cy5tYXAoKG91dHB1dCkgPT4gKHtcbiAgICAgIHNjcmlwdDogZnJvbUV4dGVuZGVkQWRkcmVzc0Zvcm1hdFRvU2NyaXB0KG91dHB1dC5hZGRyZXNzLCBjb2luLm5hbWUpLFxuICAgICAgdmFsdWU6IG91dHB1dC5hbW91bnQgPT09ICdtYXgnID8gJ21heCcgOiAoQmlnSW50KG91dHB1dC5hbW91bnQpIGFzIGJpZ2ludCB8ICdtYXgnKSxcbiAgICAgIGV4dGVybmFsOiBvdXRwdXQuZXh0ZXJuYWwsXG4gICAgfSkpO1xuICB9XG5cbiAgY29uc3QgbWlzc2luZ091dHB1dHMgPSBvdXRwdXREaWZmZXJlbmNlKGV4cGVjdGVkT3V0cHV0cywgdG9Db21wYXJhYmxlT3V0cHV0c1dpdGhFeHRlcm5hbChhbGxPdXRwdXRzKSk7XG5cbiAgY29uc3QgaW1wbGljaXRPdXRwdXRzID0gb3V0cHV0RGlmZmVyZW5jZSh0b0NvbXBhcmFibGVPdXRwdXRzV2l0aEV4dGVybmFsKGFsbE91dHB1dERldGFpbHMpLCBleHBlY3RlZE91dHB1dHMpO1xuICBjb25zdCBleHBsaWNpdE91dHB1dHMgPSBvdXRwdXREaWZmZXJlbmNlKHRvQ29tcGFyYWJsZU91dHB1dHNXaXRoRXh0ZXJuYWwoYWxsT3V0cHV0RGV0YWlscyksIGltcGxpY2l0T3V0cHV0cyk7XG5cbiAgLy8gdGhlc2UgYXJlIGFsbCB0aGUgbm9uLXdhbGxldCBvdXRwdXRzIHRoYXQgaGFkIGJlZW4gb3JpZ2luYWxseSBleHBsaWNpdGx5IHNwZWNpZmllZCBpbiByZWNpcGllbnRzXG4gIGNvbnN0IGV4cGxpY2l0RXh0ZXJuYWxPdXRwdXRzID0gZXhwbGljaXRPdXRwdXRzLmZpbHRlcigob3V0cHV0KSA9PiBvdXRwdXQuZXh0ZXJuYWwpO1xuICAvLyB0aGlzIGlzIHRoZSBzdW0gb2YgYWxsIHRoZSBvcmlnaW5hbGx5IGV4cGxpY2l0bHkgc3BlY2lmaWVkIG5vbi13YWxsZXQgb3V0cHV0IHZhbHVlc1xuICBjb25zdCBleHBsaWNpdEV4dGVybmFsU3BlbmRBbW91bnQgPSB0b1ROdW1iZXIoXG4gICAgZXhwbGljaXRFeHRlcm5hbE91dHB1dHMucmVkdWNlKChzdW06IGJpZ2ludCwgbykgPT4gc3VtICsgQmlnSW50KG8udmFsdWUpLCBCaWdJbnQoMCkpLFxuICAgIGNvaW4uYW1vdW50VHlwZVxuICApIGFzIFROdW1iZXI7XG5cbiAgLyoqXG4gICAqIFRoZSBjYWxjdWxhdGlvbiBvZiB0aGUgaW1wbGljaXQgZXh0ZXJuYWwgc3BlbmQgYW1vdW50IHBlcnRhaW5zIHRvIHZlcmlmeWluZyB0aGUgcGF5LWFzLXlvdS1nby1mZWUgQml0R29cbiAgICogYXV0b21hdGljYWxseSBhcHBsaWVkIHRvIHRyYW5zYWN0aW9ucyBzZW5kaW5nIG1vbmV5IG91dCBvZiB0aGUgd2FsbGV0LiBUaGUgbG9naWMgaXMgZmFpcmx5IHN0cmFpZ2h0Zm9yd2FyZFxuICAgKiBpbiB0aGF0IHdlIGNvbXBhcmUgdGhlIGV4dGVybmFsIHNwZW5kIGFtb3VudCB0aGF0IHdhcyBzcGVjaWZpZWQgZXhwbGljaXRseSBieSB0aGUgdXNlciB0byB0aGUgcG9ydGlvblxuICAgKiB0aGF0IHdhcyBzcGVjaWZpZWQgaW1wbGljaXRseS4gVG8gcHJvdGVjdCBjdXN0b21lcnMgZnJvbSBwZW9wbGUgdGFtcGVyaW5nIHdpdGggdGhlIHRyYW5zYWN0aW9uIG91dHB1dHMsIHdlXG4gICAqIGRlZmluZSBhIHRocmVzaG9sZCBmb3IgdGhlIG1heGltdW0gcGVyY2VudGFnZSBvZiB0aGUgaW1wbGljaXQgZXh0ZXJuYWwgc3BlbmQgaW4gcmVsYXRpb24gdG8gdGhlIGV4cGxpY2l0XG4gICAqIGV4dGVybmFsIHNwZW5kLlxuICAgKlxuICAgKiBUaGlzIGhhcyBiZWNvbWUgb2Jzb2xldGUgd2l0aCB0aGUgaW50b2R1Y3Rpb24gb2YgYHV0eG9jb3JlLnBheWdvLnZlcmlmeVBheUdvQWRkcmVzc1Byb29mKClgLlxuICAgKi9cblxuICAvLyBtYWtlIHN1cmUgdGhhdCBhbGwgdGhlIGV4dHJhIGFkZHJlc3NlcyBhcmUgY2hhbmdlIGFkZHJlc3Nlc1xuICAvLyBnZXQgYWxsIHRoZSBhZGRpdGlvbmFsIGV4dGVybmFsIG91dHB1dHMgdGhlIHNlcnZlciBhZGRlZCBhbmQgY2FsY3VsYXRlIHRoZWlyIHZhbHVlc1xuICBjb25zdCBpbXBsaWNpdEV4dGVybmFsT3V0cHV0cyA9IGltcGxpY2l0T3V0cHV0cy5maWx0ZXIoKG91dHB1dCkgPT4gb3V0cHV0LmV4dGVybmFsKTtcbiAgY29uc3QgaW1wbGljaXRFeHRlcm5hbFNwZW5kQW1vdW50ID0gdG9UTnVtYmVyKFxuICAgIGltcGxpY2l0RXh0ZXJuYWxPdXRwdXRzLnJlZHVjZSgoc3VtOiBiaWdpbnQsIG8pID0+IHN1bSArIEJpZ0ludChvLnZhbHVlKSwgQmlnSW50KDApKSxcbiAgICBjb2luLmFtb3VudFR5cGVcbiAgKSBhcyBUTnVtYmVyO1xuXG4gIGZ1bmN0aW9uIHRvT3V0cHV0cyhvdXRwdXRzOiBFeHBlY3RlZE91dHB1dFtdIHwgQ29tcGFyYWJsZU91dHB1dFdpdGhFeHRlcm5hbDxiaWdpbnQgfCAnbWF4Jz5bXSk6IE91dHB1dFtdIHtcbiAgICByZXR1cm4gb3V0cHV0cy5tYXAoKG91dHB1dCkgPT4gKHtcbiAgICAgIGFkZHJlc3M6IHRvRXh0ZW5kZWRBZGRyZXNzRm9ybWF0KG91dHB1dC5zY3JpcHQsIGNvaW4ubmFtZSksXG4gICAgICBhbW91bnQ6IG91dHB1dC52YWx1ZS50b1N0cmluZygpLFxuICAgICAgZXh0ZXJuYWw6IG91dHB1dC5leHRlcm5hbCxcbiAgICB9KSk7XG4gIH1cblxuICByZXR1cm4ge1xuICAgIGtleWNoYWlucyxcbiAgICBrZXlTaWduYXR1cmVzOiBnZXRLZXlTaWduYXR1cmVzKHdhbGxldCkgPz8ge30sXG4gICAgb3V0cHV0czogYWxsT3V0cHV0RGV0YWlscyxcbiAgICBtaXNzaW5nT3V0cHV0czogdG9PdXRwdXRzKG1pc3NpbmdPdXRwdXRzKSxcbiAgICBleHBsaWNpdEV4dGVybmFsT3V0cHV0czogdG9PdXRwdXRzKGV4cGxpY2l0RXh0ZXJuYWxPdXRwdXRzKSxcbiAgICBpbXBsaWNpdEV4dGVybmFsT3V0cHV0czogdG9PdXRwdXRzKGltcGxpY2l0RXh0ZXJuYWxPdXRwdXRzKSxcbiAgICBjaGFuZ2VPdXRwdXRzLFxuICAgIGV4cGxpY2l0RXh0ZXJuYWxTcGVuZEFtb3VudCxcbiAgICBpbXBsaWNpdEV4dGVybmFsU3BlbmRBbW91bnQsXG4gICAgbmVlZHNDdXN0b21DaGFuZ2VLZXlTaWduYXR1cmVWZXJpZmljYXRpb24sXG4gICAgY3VzdG9tQ2hhbmdlLFxuICB9O1xufVxuIl19
|
|
@@ -1,34 +1,22 @@
|
|
|
1
|
-
import * as utxolib from '@bitgo/utxo-lib';
|
|
2
1
|
import { BIP32, bip32, fixedScriptWallet } from '@bitgo/wasm-utxo';
|
|
3
2
|
import { UtxoCoinName } from '../../names';
|
|
4
3
|
import type { Unspent } from '../../unspent';
|
|
5
4
|
import { Musig2Participant } from './musig2';
|
|
6
5
|
import { ReplayProtectionKeys } from './signPsbtWasm';
|
|
7
|
-
/**
|
|
8
|
-
* Sign and verify a PSBT using either utxolib or wasm-utxo depending on the PSBT type.
|
|
9
|
-
*/
|
|
10
|
-
export declare function signAndVerifyPsbt(psbt: utxolib.bitgo.UtxoPsbt, signerKeychain: bip32.BIP32Interface | BIP32, rootWalletKeys: fixedScriptWallet.RootWalletKeys | undefined, replayProtection: ReplayProtectionKeys | undefined, options?: {
|
|
11
|
-
writeSignedWith?: boolean;
|
|
12
|
-
}): utxolib.bitgo.UtxoPsbt;
|
|
13
6
|
export declare function signAndVerifyPsbt(psbt: fixedScriptWallet.BitGoPsbt, signerKeychain: bip32.BIP32Interface | BIP32, rootWalletKeys: fixedScriptWallet.RootWalletKeys, replayProtection: ReplayProtectionKeys, options?: {
|
|
14
7
|
writeSignedWith?: boolean;
|
|
15
8
|
}): fixedScriptWallet.BitGoPsbt;
|
|
16
|
-
export declare function
|
|
17
|
-
writeSignedWith?: boolean;
|
|
18
|
-
}): utxolib.bitgo.UtxoPsbt | fixedScriptWallet.BitGoPsbt;
|
|
19
|
-
export declare function signTransaction<T extends utxolib.bitgo.UtxoPsbt | utxolib.bitgo.UtxoTransaction<bigint | number> | fixedScriptWallet.BitGoPsbt>(coin: Musig2Participant<utxolib.bitgo.UtxoPsbt> | Musig2Participant<fixedScriptWallet.BitGoPsbt>, tx: T, signerKeychain: bip32.BIP32Interface | undefined, coinName: UtxoCoinName, params: {
|
|
9
|
+
export declare function signTransaction(coin: Musig2Participant<fixedScriptWallet.BitGoPsbt>, tx: fixedScriptWallet.BitGoPsbt, signerKeychain: bip32.BIP32Interface | undefined, coinName: UtxoCoinName, params: {
|
|
20
10
|
walletId: string | undefined;
|
|
21
11
|
txInfo: {
|
|
22
12
|
unspents?: Unspent<bigint | number>[];
|
|
23
13
|
} | undefined;
|
|
24
14
|
isLastSignature: boolean;
|
|
25
15
|
signingStep: 'signerNonce' | 'cosignerNonce' | 'signerSignature' | undefined;
|
|
26
|
-
/** deprecated */
|
|
27
|
-
allowNonSegwitSigningWithoutPrevTx: boolean;
|
|
28
16
|
pubs: string[] | undefined;
|
|
29
17
|
cosignerPub: string | undefined;
|
|
30
18
|
/** When true (default), extract finalized PSBT to legacy transaction format. When false, return finalized PSBT. */
|
|
31
19
|
extractTransaction?: boolean;
|
|
32
20
|
writeSignedWith?: boolean;
|
|
33
|
-
}): Promise<
|
|
21
|
+
}): Promise<fixedScriptWallet.BitGoPsbt | Buffer>;
|
|
34
22
|
//# sourceMappingURL=signTransaction.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"signTransaction.d.ts","sourceRoot":"","sources":["../../../../src/transaction/fixedScript/signTransaction.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"signTransaction.d.ts","sourceRoot":"","sources":["../../../../src/transaction/fixedScript/signTransaction.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAEnE,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAE7C,OAAO,EAAE,iBAAiB,EAAE,MAAM,UAAU,CAAC;AAC7C,OAAO,EAA4D,oBAAoB,EAAE,MAAM,gBAAgB,CAAC;AAGhH,wBAAgB,iBAAiB,CAC/B,IAAI,EAAE,iBAAiB,CAAC,SAAS,EACjC,cAAc,EAAE,KAAK,CAAC,cAAc,GAAG,KAAK,EAC5C,cAAc,EAAE,iBAAiB,CAAC,cAAc,EAChD,gBAAgB,EAAE,oBAAoB,EACtC,OAAO,GAAE;IAAE,eAAe,CAAC,EAAE,OAAO,CAAA;CAAO,GAC1C,iBAAiB,CAAC,SAAS,CAI7B;AAED,wBAAsB,eAAe,CACnC,IAAI,EAAE,iBAAiB,CAAC,iBAAiB,CAAC,SAAS,CAAC,EACpD,EAAE,EAAE,iBAAiB,CAAC,SAAS,EAC/B,cAAc,EAAE,KAAK,CAAC,cAAc,GAAG,SAAS,EAChD,QAAQ,EAAE,YAAY,EACtB,MAAM,EAAE;IACN,QAAQ,EAAE,MAAM,GAAG,SAAS,CAAC;IAC7B,MAAM,EAAE;QAAE,QAAQ,CAAC,EAAE,OAAO,CAAC,MAAM,GAAG,MAAM,CAAC,EAAE,CAAA;KAAE,GAAG,SAAS,CAAC;IAC9D,eAAe,EAAE,OAAO,CAAC;IACzB,WAAW,EAAE,aAAa,GAAG,eAAe,GAAG,iBAAiB,GAAG,SAAS,CAAC;IAC7E,IAAI,EAAE,MAAM,EAAE,GAAG,SAAS,CAAC;IAC3B,WAAW,EAAE,MAAM,GAAG,SAAS,CAAC;IAChC,mHAAmH;IACnH,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,eAAe,CAAC,EAAE,OAAO,CAAC;CAC3B,GACA,OAAO,CAAC,iBAAiB,CAAC,SAAS,GAAG,MAAM,CAAC,CA4B/C"}
|