@bitgo-beta/key-card 0.0.1-beta.2012 → 0.0.1-beta.2013
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/src/drawKeycard.d.ts.map +1 -1
- package/dist/src/drawKeycard.js +31 -15
- package/dist/src/generateQrData.d.ts +4 -4
- package/dist/src/generateQrData.d.ts.map +1 -1
- package/dist/src/generateQrData.js +24 -23
- package/dist/src/index.d.ts +5 -5
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +7 -7
- package/dist/src/parseKeycard.d.ts +3 -3
- package/dist/src/parseKeycard.d.ts.map +1 -1
- package/dist/src/parseKeycard.js +11 -9
- package/dist/src/types.d.ts +11 -9
- package/dist/src/types.d.ts.map +1 -1
- package/dist/src/types.js +4 -4
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +5 -5
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"drawKeycard.d.ts","sourceRoot":"","sources":["../../src/drawKeycard.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,OAAO,CAAC;AAEnC,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AA2BvC,eAAO,MAAM,iBAAiB,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"drawKeycard.d.ts","sourceRoot":"","sources":["../../src/drawKeycard.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,OAAO,CAAC;AAEnC,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AA2BvC,eAAO,MAAM,iBAAiB,OAAO,CAAC;AAmFtC,wBAAsB,WAAW,CAAC,EAChC,cAAc,EACd,SAAS,EACT,YAAY,EACZ,MAAM,EACN,WAAW,EACX,KAAK,EACL,sBAAmD,GACpD,EAAE,YAAY,GAAG,OAAO,CAAC,KAAK,CAAC,CA2M/B"}
|
package/dist/src/drawKeycard.js
CHANGED
|
@@ -61,7 +61,7 @@ var KeyCurveName;
|
|
|
61
61
|
// this limitation was chosen by trial and error
|
|
62
62
|
exports.QRBinaryMaxLength = 1500;
|
|
63
63
|
// Default page-break layout: start a new page before the 3rd box (index 2), matching the
|
|
64
|
-
// historical wallet keycard. Callers (e.g. the
|
|
64
|
+
// historical wallet keycard. Callers (e.g. the safe keycard) may override with their own indices.
|
|
65
65
|
const DEFAULT_PAGE_BREAK_INDICES = [2];
|
|
66
66
|
const font = {
|
|
67
67
|
header: 24,
|
|
@@ -82,6 +82,9 @@ function left(x) {
|
|
|
82
82
|
function moveDown(y, ydelta) {
|
|
83
83
|
return y + ydelta;
|
|
84
84
|
}
|
|
85
|
+
// Draws QR codes down the left column, returning the index of the next QR still to draw (for
|
|
86
|
+
// continuation on a later page) and the y-offset just below the drawn QR column (so callers
|
|
87
|
+
// can place content, e.g. a note, under the QR codes).
|
|
85
88
|
function drawOnePageOfQrCodes(qrImages, doc, y, qrSize, startIndex) {
|
|
86
89
|
doc.setFont('helvetica');
|
|
87
90
|
let qrIndex = startIndex;
|
|
@@ -89,18 +92,18 @@ function drawOnePageOfQrCodes(qrImages, doc, y, qrSize, startIndex) {
|
|
|
89
92
|
const image = qrImages[qrIndex];
|
|
90
93
|
const textBuffer = 15;
|
|
91
94
|
if (y + qrSize + textBuffer >= doc.internal.pageSize.getHeight()) {
|
|
92
|
-
return qrIndex;
|
|
95
|
+
return { nextIndex: qrIndex, endY: y };
|
|
93
96
|
}
|
|
94
97
|
doc.addImage(image, left(0), y, qrSize, qrSize);
|
|
95
98
|
if (qrImages.length === 1) {
|
|
96
|
-
return qrIndex + 1;
|
|
99
|
+
return { nextIndex: qrIndex + 1, endY: y + qrSize };
|
|
97
100
|
}
|
|
98
101
|
y = moveDown(y, qrSize + textBuffer);
|
|
99
102
|
doc.setFontSize(font.body).setTextColor(color.black);
|
|
100
103
|
doc.text('Part ' + (qrIndex + 1).toString(), left(0), y);
|
|
101
104
|
y = moveDown(y, 20);
|
|
102
105
|
}
|
|
103
|
-
return qrIndex
|
|
106
|
+
return { nextIndex: qrIndex, endY: y };
|
|
104
107
|
}
|
|
105
108
|
function computeKeyCardImageDimensions(keyCardImage) {
|
|
106
109
|
// Max dimensions stablished by fixed available PDF space
|
|
@@ -197,7 +200,20 @@ async function drawKeycard({ activationCode, questions, keyCardImage, qrData, wa
|
|
|
197
200
|
for (const key of keys) {
|
|
198
201
|
qrImages.push(await QRCode.toCanvas(key, { errorCorrectionLevel: 'L' }));
|
|
199
202
|
}
|
|
200
|
-
|
|
203
|
+
const isMultiPart = qr?.data?.length > exports.QRBinaryMaxLength;
|
|
204
|
+
const { nextIndex, endY: qrColumnEndY } = drawOnePageOfQrCodes(qrImages, doc, y, qrSize, 0);
|
|
205
|
+
let nextQrIndex = nextIndex;
|
|
206
|
+
// For a split key, place the "put all Parts together" note directly under the QR codes,
|
|
207
|
+
// wrapped to the QR column width so it stays in the left column and never overlaps the
|
|
208
|
+
// Data payload rendered on the right.
|
|
209
|
+
let qrColumnBottom = qrColumnEndY;
|
|
210
|
+
if (isMultiPart) {
|
|
211
|
+
doc.setFontSize(font.body - 2).setTextColor(color.darkgray);
|
|
212
|
+
const noteLines = doc.splitTextToSize('Note: you will need to put all Parts together for the full key', qrSize);
|
|
213
|
+
const noteY = moveDown(qrColumnEndY, 15);
|
|
214
|
+
doc.text(noteLines, left(0), noteY);
|
|
215
|
+
qrColumnBottom = noteY + noteLines.length * doc.getLineHeight();
|
|
216
|
+
}
|
|
201
217
|
doc.setFontSize(font.subheader).setTextColor(color.black);
|
|
202
218
|
y = moveDown(y, 10);
|
|
203
219
|
textHeight += 10;
|
|
@@ -209,11 +225,6 @@ async function drawKeycard({ activationCode, questions, keyCardImage, qrData, wa
|
|
|
209
225
|
doc.text(qr.description, textLeft, y);
|
|
210
226
|
textHeight += doc.getLineHeight();
|
|
211
227
|
doc.setFontSize(font.body - 2);
|
|
212
|
-
if (qr?.data?.length > exports.QRBinaryMaxLength) {
|
|
213
|
-
y = moveDown(y, 30);
|
|
214
|
-
textHeight += 30;
|
|
215
|
-
doc.text('Note: you will need to put all Parts together for the full key', textLeft, y);
|
|
216
|
-
}
|
|
217
228
|
y = moveDown(y, 30);
|
|
218
229
|
textHeight += 30;
|
|
219
230
|
doc.text('Data:', textLeft, y);
|
|
@@ -231,7 +242,11 @@ async function drawKeycard({ activationCode, questions, keyCardImage, qrData, wa
|
|
|
231
242
|
textHeight = 0;
|
|
232
243
|
y = 30;
|
|
233
244
|
topY = y;
|
|
234
|
-
|
|
245
|
+
// Redraw remaining QRs on the new page and update the column bottom to THIS page, so
|
|
246
|
+
// the rowHeight math below stays same-page (avoids a stale page-1 coordinate).
|
|
247
|
+
const continued = drawOnePageOfQrCodes(qrImages, doc, y, qrSize, nextQrIndex);
|
|
248
|
+
nextQrIndex = continued.nextIndex;
|
|
249
|
+
qrColumnBottom = continued.endY;
|
|
235
250
|
doc.setFont('courier').setFontSize(9).setTextColor(color.black);
|
|
236
251
|
}
|
|
237
252
|
doc.text(lines[line], textLeft, y);
|
|
@@ -257,9 +272,10 @@ async function drawKeycard({ activationCode, questions, keyCardImage, qrData, wa
|
|
|
257
272
|
doc.text(splitKeyId, textLeft + 5, y + 10);
|
|
258
273
|
}
|
|
259
274
|
doc.setFont('helvetica');
|
|
260
|
-
// Move down the
|
|
261
|
-
//
|
|
262
|
-
const
|
|
275
|
+
// Move down past the taller of the two columns: the right-side text (textHeight) or the
|
|
276
|
+
// left-side QR column (plus the note printed under it for split keys), then add a margin.
|
|
277
|
+
const qrColumnHeight = isMultiPart ? qrColumnBottom - topY : qrSize;
|
|
278
|
+
const rowHeight = Math.max(qrColumnHeight, textHeight);
|
|
263
279
|
const marginBottom = 15;
|
|
264
280
|
y = moveDown(y, rowHeight - (y - topY) + marginBottom);
|
|
265
281
|
}
|
|
@@ -285,4 +301,4 @@ async function drawKeycard({ activationCode, questions, keyCardImage, qrData, wa
|
|
|
285
301
|
});
|
|
286
302
|
return doc;
|
|
287
303
|
}
|
|
288
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHJhd0tleWNhcmQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvZHJhd0tleWNhcmQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBNkdBLGtDQXFNQztBQWpURCwrQ0FBaUM7QUFFakMsbUNBQW9DO0FBR3BDLEtBQUssVUFBVSxTQUFTO0lBQ3RCLElBQUksS0FBa0IsQ0FBQztJQUV2QixJQUFJLE9BQU8sTUFBTSxLQUFLLFdBQVcsSUFBSSxPQUFPLE1BQU0sQ0FBQyxRQUFRLEtBQUssV0FBVyxFQUFFLENBQUM7UUFDNUUsd0JBQXdCO1FBQ3hCLEtBQUssR0FBRyx3REFBYSxPQUFPLEdBQUMsQ0FBQztJQUNoQyxDQUFDO1NBQU0sQ0FBQztRQUNOLG9CQUFvQjtRQUNwQixLQUFLLEdBQUcsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQzNCLENBQUM7SUFDRCxPQUFPLEtBQUssQ0FBQztBQUNmLENBQUM7QUFFRCxJQUFLLFlBSUo7QUFKRCxXQUFLLFlBQVk7SUFDZixpQ0FBaUIsQ0FBQTtJQUNqQixtQ0FBbUIsQ0FBQTtJQUNuQiwyQkFBVyxDQUFBO0FBQ2IsQ0FBQyxFQUpJLFlBQVksS0FBWixZQUFZLFFBSWhCO0FBRUQsbUZBQW1GO0FBQ25GLG9IQUFvSDtBQUNwSCxxREFBcUQ7QUFDckQsZ0RBQWdEO0FBQ25DLFFBQUEsaUJBQWlCLEdBQUcsSUFBSSxDQUFDO0FBRXRDLHlGQUF5RjtBQUN6RixtR0FBbUc7QUFDbkcsTUFBTSwwQkFBMEIsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBRXZDLE1BQU0sSUFBSSxHQUFHO0lBQ1gsTUFBTSxFQUFFLEVBQUU7SUFDVixTQUFTLEVBQUUsRUFBRTtJQUNiLElBQUksRUFBRSxFQUFFO0NBQ1QsQ0FBQztBQUVGLE1BQU0sS0FBSyxHQUFHO0lBQ1osS0FBSyxFQUFFLFNBQVM7SUFDaEIsUUFBUSxFQUFFLFNBQVM7SUFD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O0lBQ3JELENBQUMsR0FBRyxRQUFRLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQ3BCLFNBQVMsQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDO1FBQzNCLEdBQUcsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDMUQsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUNqQyxDQUFDLEdBQUcsUUFBUSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztRQUNwQixHQUFHLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ3hELENBQUMsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLFVBQVUsSUFBSTtZQUM3QixHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7WUFDM0IsQ0FBQyxHQUFHLFFBQVEsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQztRQUNqQyxDQUFDLENBQUMsQ0FBQztRQUNILENBQUMsR0FBRyxRQUFRLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQ3RCLENBQUMsQ0FBQyxDQUFDO0lBRUgsT0FBTyxHQUFHLENBQUM7QUFDYixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBqc1BERiB9IGZyb20gJ2pzcGRmJztcbmltcG9ydCAqIGFzIFFSQ29kZSBmcm9tICdxcmNvZGUnO1xuaW1wb3J0IHsgSURyYXdLZXlDYXJkIH0gZnJvbSAnLi90eXBlcyc7XG5pbXBvcnQgeyBzcGxpdEtleXMgfSBmcm9tICcuL3V0aWxzJztcbnR5cGUganNQREZNb2R1bGUgPSB0eXBlb2YgaW1wb3J0KCdqc3BkZicpO1xuXG5hc3luYyBmdW5jdGlvbiBsb2FkSlNQREYoKTogUHJvbWlzZTxqc1BERk1vZHVsZT4ge1xuICBsZXQganNQREY6IGpzUERGTW9kdWxlO1xuXG4gIGlmICh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyAmJiB0eXBlb2Ygd2luZG93LmRvY3VtZW50ICE9PSAndW5kZWZpbmVkJykge1xuICAgIC8vIFdlIGFyZSBpbiB0aGUgYnJvd3NlclxuICAgIGpzUERGID0gYXdhaXQgaW1wb3J0KCdqc3BkZicpO1xuICB9IGVsc2Uge1xuICAgIC8vIFdlIGFyZSBpbiBOb2RlLmpzXG4gICAganNQREYgPSByZXF1aXJlKCdqc3BkZicpO1xuICB9XG4gIHJldHVybiBqc1BERjtcbn1cblxuZW51bSBLZXlDdXJ2ZU5hbWUge1xuICBlZDI1NTE5ID0gJ0VERFNBJyxcbiAgc2VjcDI1NmsxID0gJ0VDRFNBJyxcbiAgYmxzID0gJ0JMUycsXG59XG5cbi8vIE1heCBmb3IgQmluYXJ5L0J5dGUgRGF0YSBodHRwczovL2dpdGh1Yi5jb20vc29sZGFpci9ub2RlLXFyY29kZSNxci1jb2RlLWNhcGFjaXR5XG4vLyB0aGUgbGFyZ2VzdCB0aGVvcmV0aWNhbGx5IHBvc3NpYmxlIHZhbHVlIGlzIGFjdHVhbGx5IDI5NTMgYnV0IHRoZSBRUiBjb2RlcyBnZXQgc28gZGVuc2UgdGhhdCBzY2FubmluZyB0aGVtIHdpdGggYVxuLy8gcGhvbmUgKG9mZiBvZiBhIHByaW50ZWQgcGFnZSkgZG9lc24ndCB3b3JrIGFueW1vcmVcbi8vIHRoaXMgbGltaXRhdGlvbiB3YXMgY2hvc2VuIGJ5IHRyaWFsIGFuZCBlcnJvclxuZXhwb3J0IGNvbnN0IFFSQmluYXJ5TWF4TGVuZ3RoID0gMTUwMDtcblxuLy8gRGVmYXVsdCBwYWdlLWJyZWFrIGxheW91dDogc3RhcnQgYSBuZXcgcGFnZSBiZWZvcmUgdGhlIDNyZCBib3ggKGluZGV4IDIpLCBtYXRjaGluZyB0aGVcbi8vIGhpc3RvcmljYWwgd2FsbGV0IGtleWNhcmQuIENhbGxlcnMgKGUuZy4gdGhlIHZhdWx0IGtleWNhcmQpIG1heSBvdmVycmlkZSB3aXRoIHRoZWlyIG93biBpbmRpY2VzLlxuY29uc3QgREVGQVVMVF9QQUdFX0JSRUFLX0lORElDRVMgPSBbMl07XG5cbmNvbnN0IGZvbnQgPSB7XG4gIGhlYWRlcjogMjQsXG4gIHN1YmhlYWRlcjogMTUsXG4gIGJvZHk6IDEyLFxufTtcblxuY29uc3QgY29sb3IgPSB7XG4gIGJsYWNrOiAnIzAwMDAwMCcsXG4gIGRhcmtncmF5OiAnIzRjNGM0YycsXG4gIGdyYXk6ICcjOWI5YjliJyxcbiAgcmVkOiAnI2UyMWUxZScsXG59O1xuXG5jb25zdCBtYXJnaW4gPSAzMDtcblxuLy8gSGVscGVycyBmb3IgZGF0YSBmb3JtYXR0aW5nIC8gcG9zaXRpb25pbmcgb24gdGhlIHBhcGVyXG5mdW5jdGlvbiBsZWZ0KHg6IG51bWJlcik6IG51bWJlciB7XG4gIHJldHVybiBtYXJnaW4gKyB4O1xufVxuZnVuY3Rpb24gbW92ZURvd24oeTogbnVtYmVyLCB5ZGVsdGE6IG51bWJlcik6IG51bWJlciB7XG4gIHJldHVybiB5ICsgeWRlbHRhO1xufVxuXG5mdW5jdGlvbiBkcmF3T25lUGFnZU9mUXJDb2RlcyhcbiAgcXJJbWFnZXM6IEhUTUxDYW52YXNFbGVtZW50W10sXG4gIGRvYzoganNQREYsXG4gIHk6IG51bWJlcixcbiAgcXJTaXplOiBudW1iZXIsXG4gIHN0YXJ0SW5kZXhcbik6IG51bWJlciB7XG4gIGRvYy5zZXRGb250KCdoZWx2ZXRpY2EnKTtcbiAgbGV0IHFySW5kZXg6IG51bWJlciA9IHN0YXJ0SW5kZXg7XG4gIGZvciAoOyBxckluZGV4IDwgcXJJbWFnZXMubGVuZ3RoOyBxckluZGV4KyspIHtcbiAgICBjb25zdCBpbWFnZSA9IHFySW1hZ2VzW3FySW5kZXhdO1xuICAgIGNvbnN0IHRleHRCdWZmZXIgPSAxNTtcbiAgICBpZiAoeSArIHFyU2l6ZSArIHRleHRCdWZmZXIgPj0gZG9jLmludGVybmFsLnBhZ2VTaXplLmdldEhlaWdodCgpKSB7XG4gICAgICByZXR1cm4gcXJJbmRleDtcbiAgICB9XG5cbiAgICBkb2MuYWRkSW1hZ2UoaW1hZ2UsIGxlZnQoMCksIHksIHFyU2l6ZSwgcXJTaXplKTtcblxuICAgIGlmIChxckltYWdlcy5sZW5ndGggPT09IDEpIHtcbiAgICAgIHJldHVybiBxckluZGV4ICsgMTtcbiAgICB9XG5cbiAgICB5ID0gbW92ZURvd24oeSwgcXJTaXplICsgdGV4dEJ1ZmZlcik7XG4gICAgZG9jLnNldEZvbnRTaXplKGZvbnQuYm9keSkuc2V0VGV4dENvbG9yKGNvbG9yLmJsYWNrKTtcbiAgICBkb2MudGV4dCgnUGFydCAnICsgKHFySW5kZXggKyAxKS50b1N0cmluZygpLCBsZWZ0KDApLCB5KTtcbiAgICB5ID0gbW92ZURvd24oeSwgMjApO1xuICB9XG4gIHJldHVybiBxckluZGV4ICsgMTtcbn1cblxuZnVuY3Rpb24gY29tcHV0ZUtleUNhcmRJbWFnZURpbWVuc2lvbnMoa2V5Q2FyZEltYWdlOiBIVE1MSW1hZ2VFbGVtZW50KSB7XG4gIC8vIE1heCBkaW1lbnNpb25zIHN0YWJsaXNoZWQgYnkgZml4ZWQgYXZhaWxhYmxlIFBERiBzcGFjZVxuICBjb25zdCBLRVlfQ0FSRF9JTUFHRV9NQVhfRElNRU5TSU9OUyA9IHtcbiAgICB3aWR0aDogMzAzLFxuICAgIGhlaWdodDogNDAsXG4gIH07XG5cbiAgY29uc3QgeyB3aWR0aDogaW1nV2lkdGgsIGhlaWdodDogaW1nSGVpZ2h0IH0gPSBrZXlDYXJkSW1hZ2U7XG4gIGNvbnN0IHsgd2lkdGg6IG1heFdpZHRoLCBoZWlnaHQ6IG1heEhlaWdodCB9ID0gS0VZX0NBUkRfSU1BR0VfTUFYX0RJTUVOU0lPTlM7XG5cbiAgLy8gVHJ5IHNjYWxpbmcgcmF0aW8gYmFzZWQgb24gd2lkdGhcbiAgY29uc3Qgd1JhdGlvID0gaW1nV2lkdGggLyBtYXhXaWR0aDtcbiAgbGV0IGZpbmFsUmF0aW8gPSB3UmF0aW87XG5cbiAgLy8gSWYgcmVzaXplZCBoZWlnaHQgZXhjZWVkcyB0aGUgYXZhaWxhYmxlIGhlaWdodCBzcGFjZSwgYmFzZSByYXRpbyBhbHNvIG9uIGhlaWdodFxuICBpZiAoaW1nSGVpZ2h0IC8gZmluYWxSYXRpbyA+IG1heEhlaWdodCkge1xuICAgIGZpbmFsUmF0aW8gPSBpbWdIZWlnaHQgLyBtYXhIZWlnaHQ7XG4gIH1cbiAgcmV0dXJuIFtpbWdXaWR0aCAvIGZpbmFsUmF0aW8sIGltZ0hlaWdodCAvIGZpbmFsUmF0aW9dO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZHJhd0tleWNhcmQoe1xuICBhY3RpdmF0aW9uQ29kZSxcbiAgcXVlc3Rpb25zLFxuICBrZXlDYXJkSW1hZ2UsXG4gIHFyRGF0YSxcbiAgd2FsbGV0TGFiZWwsXG4gIGN1cnZlLFxuICBwYWdlQnJlYWtCZWZvcmVJbmRpY2VzID0gREVGQVVMVF9QQUdFX0JSRUFLX0lORElDRVMsXG59OiBJRHJhd0tleUNhcmQpOiBQcm9taXNlPGpzUERGPiB7XG4gIGNvbnN0IGpzUERGTW9kdWxlID0gYXdhaXQgbG9hZEpTUERGKCk7XG5cbiAgLy8gZG9jdW1lbnQgZGV0YWlsc1xuICBjb25zdCB3aWR0aCA9IDguNSAqIDcyO1xuICBsZXQgeSA9IDA7XG5cbiAgLy8gQ3JlYXRlIHRoZSBQREYgaW5zdGFuY2VcbiAgY29uc3QgZG9jID0gbmV3IGpzUERGTW9kdWxlLmpzUERGKCdwb3J0cmFpdCcsICdwdCcsICdsZXR0ZXInKTsgLy8ganNoaW50IGlnbm9yZTpsaW5lXG4gIGRvYy5zZXRGb250KCdoZWx2ZXRpY2EnKTtcblxuICAvLyBQREYgSGVhZGVyIEFyZWEgLSBpbmNsdWRlcyB0aGUgbG9nbyBhbmQgY29tcGFueSBuYW1lXG4gIC8vIFRoaXMgaXMgZGF0YSBmb3IgdGhlIEJpdEdvIGxvZ28gaW4gdGhlIHRvcCBsZWZ0IG9mIHRoZSBQREZcbiAgeSA9IG1vdmVEb3duKHksIDMwKTtcblxuICBpZiAoa2V5Q2FyZEltYWdlKSB7XG4gICAgY29uc3QgW2ltZ1dpZHRoLCBpbWdIZWlnaHRdID0gY29tcHV0ZUtleUNhcmRJbWFnZURpbWVuc2lvbnMoa2V5Q2FyZEltYWdlKTtcbiAgICBkb2MuYWRkSW1hZ2Uoa2V5Q2FyZEltYWdlLCBsZWZ0KDApLCB5LCBpbWdXaWR0aCwgaW1nSGVpZ2h0KTtcbiAgfVxuXG4gIC8vIEFjdGl2YXRpb24gQ29kZVxuICBpZiAoYWN0aXZhdGlvbkNvZGUpIHtcbiAgICB5ID0gbW92ZURvd24oeSwgOCk7XG4gICAgZG9jLnNldEZvbnRTaXplKGZvbnQuYm9keSkuc2V0VGV4dENvbG9yKGNvbG9yLmdyYXkpO1xuICAgIGRvYy50ZXh0KCdBY3RpdmF0aW9uIENvZGUnLCBsZWZ0KDQ2MCksIHkpO1xuICB9XG4gIGRvYy5zZXRGb250U2l6ZShmb250LmhlYWRlcikuc2V0VGV4dENvbG9yKGNvbG9yLmJsYWNrKTtcbiAgeSA9IG1vdmVEb3duKHksIDI1KTtcbiAgZG9jLnRleHQoJ0tleUNhcmQnLCBsZWZ0KGN1cnZlICYmICFhY3RpdmF0aW9uQ29kZSA/IDQ2MCA6IDMyNSksIHkgLSAxKTtcbiAgaWYgKGFjdGl2YXRpb25Db2RlKSB7XG4gICAgZG9jLnNldEZvbnRTaXplKGZvbnQuaGVhZGVyKS5zZXRUZXh0Q29sb3IoY29sb3IuZ3JheSk7XG4gICAgZG9jLnRleHQoYWN0aXZhdGlvbkNvZGUsIGxlZnQoNDYwKSwgeSk7XG4gIH1cblxuICAvLyBTdWJoZWFkZXJcbiAgLy8gdGl0bGVzXG4gIGNvbnN0IGRhdGUgPSBuZXcgRGF0ZSgpLnRvRGF0ZVN0cmluZygpO1xuICB5ID0gbW92ZURvd24oeSwgbWFyZ2luKTtcbiAgZG9jLnNldEZvbnRTaXplKGZvbnQuYm9keSkuc2V0VGV4dENvbG9yKGNvbG9yLmdyYXkpO1xuXG4gIGlmIChjdXJ2ZSB8fCB3YWxsZXRMYWJlbCkge1xuICAgIGNvbnN0IHRpdGxlID0gY3VydmUgPyBLZXlDdXJ2ZU5hbWVbY3VydmVdICsgJyBrZXk6JyA6ICd3YWxsZXQgbmFtZWQ6JztcbiAgICBkb2MudGV4dCgnQ3JlYXRlZCBvbiAnICsgZGF0ZSArICcgZm9yICcgKyB0aXRsZSwgbGVmdCgwKSwgeSk7XG4gICAgLy8gY29weVxuICAgIHkgPSBtb3ZlRG93bih5LCAyNSk7XG4gICAgaWYgKHdhbGxldExhYmVsKSB7XG4gICAgICBkb2Muc2V0Rm9udFNpemUoZm9udC5zdWJoZWFkZXIpLnNldFRleHRDb2xvcihjb2xvci5ibGFjayk7XG4gICAgICBkb2MudGV4dCh3YWxsZXRMYWJlbCwgbGVmdCgwKSwgeSk7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGRvYy50ZXh0KCdDcmVhdGVkIG9uICcgKyBkYXRlLCBsZWZ0KDApLCB5KTtcbiAgICB5ID0gbW92ZURvd24oeSwgMjUpO1xuICB9XG4gIGlmICghY3VydmUpIHtcbiAgICAvLyBSZWQgQmFyXG4gICAgeSA9IG1vdmVEb3duKHksIDIwKTtcbiAgICBkb2Muc2V0RmlsbENvbG9yKDI1NSwgMjMwLCAyMzApO1xuICAgIGRvYy5yZWN0KGxlZnQoMCksIHksIHdpZHRoIC0gMiAqIG1hcmdpbiwgMzIsICdGJyk7XG5cbiAgICAvLyB3YXJuaW5nIG1lc3NhZ2VcbiAgICB5ID0gbW92ZURvd24oeSwgMjApO1xuICAgIGRvYy5zZXRGb250U2l6ZShmb250LmJvZHkpLnNldFRleHRDb2xvcihjb2xvci5yZWQpO1xuICAgIGRvYy50ZXh0KCdQcmludCB0aGlzIGRvY3VtZW50LCBvciBrZWVwIGl0IHNlY3VyZWx5IG9mZmxpbmUuIFNlZSBiZWxvdyBmb3IgRkFRLicsIGxlZnQoNzUpLCB5KTtcbiAgfVxuICAvLyBHZW5lcmF0ZSB0aGUgZmlyc3QgcGFnZSdzIGRhdGEgZm9yIHRoZSBiYWNrdXAgUERGXG4gIHkgPSBtb3ZlRG93bih5LCAzNSk7XG4gIGNvbnN0IHFyU2l6ZSA9IDEzMDtcbiAgY29uc3QgcXJLZXlzID0gWyd1c2VyJywgJ3VzZXJNYXN0ZXJQdWJsaWNLZXknLCAnYmFja3VwJywgJ2JhY2t1cE1hc3RlclB1YmxpY0tleScsICdiaXRnbycsICdwYXNzY29kZSddLmZpbHRlcihcbiAgICAoa2V5KSA9PiAhIXFyRGF0YVtrZXldXG4gICk7XG4gIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCBxcktleXMubGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgY29uc3QgbmFtZSA9IHFyS2V5c1tpbmRleF07XG5cbiAgICBpZiAocGFnZUJyZWFrQmVmb3JlSW5kaWNlcy5pbmNsdWRlcyhpbmRleCkpIHtcbiAgICAgIC8vIFN0YXJ0IGEgbmV3IHBhZ2UgZm9yIHRoaXMgYm94XG4gICAgICBkb2MuYWRkUGFnZSgpO1xuXG4gICAgICAvLyAybmQgcGFnZSB0aXRsZVxuICAgICAgeSA9IDMwO1xuICAgIH1cblxuICAgIGNvbnN0IHFyID0gcXJEYXRhW25hbWVdO1xuICAgIGxldCB0b3BZID0geTtcbiAgICBjb25zdCB0ZXh0TGVmdCA9IGxlZnQocXJTaXplICsgMTUpO1xuICAgIGxldCB0ZXh0SGVpZ2h0ID0gMDtcblxuICAgIGNvbnN0IHFySW1hZ2VzOiBIVE1MQ2FudmFzRWxlbWVudFtdID0gW107XG4gICAgY29uc3Qga2V5cyA9IHNwbGl0S2V5cyhxci5kYXRhLCBRUkJpbmFyeU1heExlbmd0aCk7XG4gICAgZm9yIChjb25zdCBrZXkgb2Yga2V5cykge1xuICAgICAgcXJJbWFnZXMucHVzaChhd2FpdCBRUkNvZGUudG9DYW52YXMoa2V5LCB7IGVycm9yQ29ycmVjdGlvbkxldmVsOiAnTCcgfSkpO1xuICAgIH1cblxuICAgIGxldCBuZXh0UXJJbmRleCA9IGRyYXdPbmVQYWdlT2ZRckNvZGVzKHFySW1hZ2VzLCBkb2MsIHksIHFyU2l6ZSwgMCk7XG5cbiAgICBkb2Muc2V0Rm9udFNpemUoZm9udC5zdWJoZWFkZXIpLnNldFRleHRDb2xvcihjb2xvci5ibGFjayk7XG4gICAgeSA9IG1vdmVEb3duKHksIDEwKTtcbiAgICB0ZXh0SGVpZ2h0ICs9IDEwO1xuICAgIGRvYy50ZXh0KHFyLnRpdGxlLCB0ZXh0TGVmdCwgeSk7XG4gICAgdGV4dEhlaWdodCArPSBkb2MuZ2V0TGluZUhlaWdodCgpO1xuICAgIHkgPSBtb3ZlRG93bih5LCAxNSk7XG4gICAgdGV4dEhlaWdodCArPSAxNTtcbiAgICBkb2Muc2V0Rm9udFNpemUoZm9udC5ib2R5KS5zZXRUZXh0Q29sb3IoY29sb3IuZGFya2dyYXkpO1xuICAgIGRvYy50ZXh0KHFyLmRlc2NyaXB0aW9uLCB0ZXh0TGVmdCwgeSk7XG4gICAgdGV4dEhlaWdodCArPSBkb2MuZ2V0TGluZUhlaWdodCgpO1xuICAgIGRvYy5zZXRGb250U2l6ZShmb250LmJvZHkgLSAyKTtcbiAgICBpZiAocXI/LmRhdGE/Lmxlbmd0aCA+IFFSQmluYXJ5TWF4TGVuZ3RoKSB7XG4gICAgICB5ID0gbW92ZURvd24oeSwgMzApO1xuICAgICAgdGV4dEhlaWdodCArPSAzMDtcbiAgICAgIGRvYy50ZXh0KCdOb3RlOiB5b3Ugd2lsbCBuZWVkIHRvIHB1dCBhbGwgUGFydHMgdG9nZXRoZXIgZm9yIHRoZSBmdWxsIGtleScsIHRleHRMZWZ0LCB5KTtcbiAgICB9XG4gICAgeSA9IG1vdmVEb3duKHksIDMwKTtcbiAgICB0ZXh0SGVpZ2h0ICs9IDMwO1xuICAgIGRvYy50ZXh0KCdEYXRhOicsIHRleHRMZWZ0LCB5KTtcbiAgICB0ZXh0SGVpZ2h0ICs9IGRvYy5nZXRMaW5lSGVpZ2h0KCk7XG4gICAgeSA9IG1vdmVEb3duKHksIDE1KTtcbiAgICB0ZXh0SGVpZ2h0ICs9IDE1O1xuICAgIGNvbnN0IHdpZHRoID0gNzIgKiA4LjUgLSB0ZXh0TGVmdCAtIDMwO1xuICAgIGRvYy5zZXRGb250KCdjb3VyaWVyJykuc2V0Rm9udFNpemUoOSkuc2V0VGV4dENvbG9yKGNvbG9yLmJsYWNrKTtcbiAgICBjb25zdCBsaW5lcyA9IGRvYy5zcGxpdFRleHRUb1NpemUocXIuZGF0YSwgd2lkdGgpO1xuICAgIGNvbnN0IGJ1ZmZlciA9IDEwO1xuICAgIGZvciAobGV0IGxpbmUgPSAwOyBsaW5lIDwgbGluZXMubGVuZ3RoOyBsaW5lKyspIHtcbiAgICAgIC8vIGFkZCBuZXcgcGFnZSBpZiBkYXRhIGRvZXMgbm90IGZpdCBvbiBvbmUgcGFnZVxuICAgICAgaWYgKHkgKyBidWZmZXIgPj0gZG9jLmludGVybmFsLnBhZ2VTaXplLmdldEhlaWdodCgpKSB7XG4gICAgICAgIGRvYy5hZGRQYWdlKCk7XG4gICAgICAgIHRleHRIZWlnaHQgPSAwO1xuICAgICAgICB5ID0gMzA7XG4gICAgICAgIHRvcFkgPSB5O1xuICAgICAgICBuZXh0UXJJbmRleCA9IGRyYXdPbmVQYWdlT2ZRckNvZGVzKHFySW1hZ2VzLCBkb2MsIHksIHFyU2l6ZSwgbmV4dFFySW5kZXgpO1xuICAgICAgICBkb2Muc2V0Rm9udCgnY291cmllcicpLnNldEZvbnRTaXplKDkpLnNldFRleHRDb2xvcihjb2xvci5ibGFjayk7XG4gICAgICB9XG4gICAgICBkb2MudGV4dChsaW5lc1tsaW5lXSwgdGV4dExlZnQsIHkpO1xuICAgICAgaWYgKGxpbmUgIT09IGxpbmVzLmxlbmd0aCAtIDEpIHtcbiAgICAgICAgeSA9IG1vdmVEb3duKHksIGJ1ZmZlcik7XG4gICAgICAgIHRleHRIZWlnaHQgKz0gYnVmZmVyO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIEFkZCBwdWJsaWMga2V5IGlmIGV4aXN0c1xuICAgIGlmIChxci5wdWJsaWNNYXN0ZXJLZXkpIHtcbiAgICAgIGNvbnN0IHRleHQgPSAnS2V5IElkOiAnICsgcXIucHVibGljTWFzdGVyS2V5O1xuXG4gICAgICAvLyBHcmF5IGJhclxuICAgICAgeSA9IG1vdmVEb3duKHksIDIwKTtcbiAgICAgIHRleHRIZWlnaHQgKz0gMjA7XG4gICAgICBkb2Muc2V0RmlsbENvbG9yKDI0NywgMjQ5LCAyNDkpOyAvLyBHcmF5IGJhY2tncm91bmRcbiAgICAgIGRvYy5zZXREcmF3Q29sb3IoMCwgMCwgMCk7IC8vIEJvcmRlclxuXG4gICAgICAvLyBMZWF2ZSBhIGJpdCBvZiBzcGFjZSBmb3IgdGhlIHNpZGUgb2YgdGhlIHJlY3RhbmdsZS5cbiAgICAgIGNvbnN0IHNwbGl0S2V5SWQgPSBkb2Muc3BsaXRUZXh0VG9TaXplKHRleHQsIHdpZHRoIC0gMTApO1xuXG4gICAgICAvLyBUaGUgaGVpZ2h0IG9mIHRoZSBib3ggbXVzdCBiZSBhdCBsZWFzdCAxNSBweCAoZm9yIHNpbmdsZSBsaW5lIGNhc2UpLCBvclxuICAgICAgLy8gYSBtdWx0aXBsZSBvZiAxMyBmb3IgZWFjaCBsaW5lLiAgVGhpcyBhbGxvd3MgZm9yIHByb3BlciBwYWRkaW5nLlxuICAgICAgZG9jLnJlY3QodGV4dExlZnQsIHksIHdpZHRoLCBNYXRoLm1heCgxMiAqIHNwbGl0S2V5SWQubGVuZ3RoLCAxNSksICdGRCcpO1xuICAgICAgdGV4dEhlaWdodCArPSBzcGxpdEtleUlkLmxlbmd0aCAqIGRvYy5nZXRMaW5lSGVpZ2h0KCk7XG4gICAgICBkb2MudGV4dChzcGxpdEtleUlkLCB0ZXh0TGVmdCArIDUsIHkgKyAxMCk7XG4gICAgfVxuXG4gICAgZG9jLnNldEZvbnQoJ2hlbHZldGljYScpO1xuICAgIC8vIE1vdmUgZG93biB0aGUgc2l6ZSBvZiB0aGUgUVIgY29kZSBtaW51cyBhY2N1bXVsYXRlZCBoZWlnaHQgb24gdGhlIHJpZ2h0IHNpZGUsIHBsdXMgbWFyZ2luXG4gICAgLy8gaWYgd2UgaGF2ZSBhIGtleSB0aGF0IHNwYW5zIG11bHRpcGxlIHBhZ2VzLCB0aGVuIGV4Y2x1ZGUgUVIgY29kZSBzaXplXG4gICAgY29uc3Qgcm93SGVpZ2h0ID0gTWF0aC5tYXgocXIuZGF0YS5sZW5ndGggPiBRUkJpbmFyeU1heExlbmd0aCA/IHFyU2l6ZSArIDIwIDogcXJTaXplLCB0ZXh0SGVpZ2h0KTtcbiAgICBjb25zdCBtYXJnaW5Cb3R0b20gPSAxNTtcbiAgICB5ID0gbW92ZURvd24oeSwgcm93SGVpZ2h0IC0gKHkgLSB0b3BZKSArIG1hcmdpbkJvdHRvbSk7XG4gIH1cblxuICAvLyBBZGQgbmV4dCBQYWdlXG4gIGRvYy5hZGRQYWdlKCk7XG5cbiAgLy8gbmV4dCBwYWdlcyB0aXRsZVxuICB5ID0gMDtcbiAgeSA9IG1vdmVEb3duKHksIDU1KTtcbiAgZG9jLnNldEZvbnRTaXplKGZvbnQuaGVhZGVyKS5zZXRUZXh0Q29sb3IoY29sb3IuYmxhY2spO1xuICBkb2MudGV4dCgnQml0R28gS2V5Q2FyZCBGQVEnLCBsZWZ0KDApLCB5KTtcblxuICAvLyBHZW5lcmF0ZSB0aGUgc2Vjb25kIHBhZ2UncyBkYXRhIGZvciB0aGUgYmFja3VwIFBERlxuICB5ID0gbW92ZURvd24oeSwgMzApO1xuICBxdWVzdGlvbnMuZm9yRWFjaChmdW5jdGlvbiAocSkge1xuICAgIGRvYy5zZXRGb250U2l6ZShmb250LnN1YmhlYWRlcikuc2V0VGV4dENvbG9yKGNvbG9yLmJsYWNrKTtcbiAgICBkb2MudGV4dChxLnF1ZXN0aW9uLCBsZWZ0KDApLCB5KTtcbiAgICB5ID0gbW92ZURvd24oeSwgMjApO1xuICAgIGRvYy5zZXRGb250U2l6ZShmb250LmJvZHkpLnNldFRleHRDb2xvcihjb2xvci5kYXJrZ3JheSk7XG4gICAgcS5hbnN3ZXIuZm9yRWFjaChmdW5jdGlvbiAobGluZSkge1xuICAgICAgZG9jLnRleHQobGluZSwgbGVmdCgwKSwgeSk7XG4gICAgICB5ID0gbW92ZURvd24oeSwgZm9udC5ib2R5ICsgMyk7XG4gICAgfSk7XG4gICAgeSA9IG1vdmVEb3duKHksIDIyKTtcbiAgfSk7XG5cbiAgcmV0dXJuIGRvYztcbn1cbiJdfQ==
|
|
304
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHJhd0tleWNhcmQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvZHJhd0tleWNhcmQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBZ0hBLGtDQW1OQztBQWxVRCwrQ0FBaUM7QUFFakMsbUNBQW9DO0FBR3BDLEtBQUssVUFBVSxTQUFTO0lBQ3RCLElBQUksS0FBa0IsQ0FBQztJQUV2QixJQUFJLE9BQU8sTUFBTSxLQUFLLFdBQVcsSUFBSSxPQUFPLE1BQU0sQ0FBQyxRQUFRLEtBQUssV0FBVyxFQUFFLENBQUM7UUFDNUUsd0JBQXdCO1FBQ3hCLEtBQUssR0FBRyx3REFBYSxPQUFPLEdBQUMsQ0FBQztJQUNoQyxDQUFDO1NBQU0sQ0FBQztRQUNOLG9CQUFvQjtRQUNwQixLQUFLLEdBQUcsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQzNCLENBQUM7SUFDRCxPQUFPLEtBQUssQ0FBQztBQUNmLENBQUM7QUFFRCxJQUFLLFlBSUo7QUFKRCxXQUFLLFlBQVk7SUFDZixpQ0FBaUIsQ0FBQTtJQUNqQixtQ0FBbUIsQ0FBQTtJQUNuQiwyQkFBVyxDQUFBO0FBQ2IsQ0FBQyxFQUpJLFlBQVksS0FBWixZQUFZLFFBSWhCO0FBRUQsbUZBQW1GO0FBQ25GLG9IQUFvSDtBQUNwSCxxREFBcUQ7QUFDckQsZ0RBQWdEO0FBQ25DLFFBQUEsaUJBQWlCLEdBQUcsSUFBSSxDQUFDO0FBRXRDLHlGQUF5RjtBQUN6RixrR0FBa0c7QUFDbEcsTUFBTSwwQkFBMEIsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBRXZDLE1BQU0sSUFBSSxHQUFHO0lBQ1gsTUFBTSxFQUFFLEVBQUU7SUFDVixTQUFTLEVBQUUsRUFBRTtJQUNiLElBQUksRUFBRSxFQUFFO0NBQ1QsQ0FBQztBQUVGLE1BQU0sS0FBSyxHQUFHO0lBQ1osS0FBSyxFQUFFLFNBQVM7SUFDaEIsUUFBUSxFQUFFLFNBQVM7SUFD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LENBQUMsQ0FBQyxDQUFDO1FBQ2pDLENBQUMsR0FBRyxRQUFRLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQ3BCLEdBQUcsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDeEQsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsVUFBVSxJQUFJO1lBQzdCLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztZQUMzQixDQUFDLEdBQUcsUUFBUSxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBQ2pDLENBQUMsQ0FBQyxDQUFDO1FBQ0gsQ0FBQyxHQUFHLFFBQVEsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFDdEIsQ0FBQyxDQUFDLENBQUM7SUFFSCxPQUFPLEdBQUcsQ0FBQztBQUNiLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IGpzUERGIH0gZnJvbSAnanNwZGYnO1xuaW1wb3J0ICogYXMgUVJDb2RlIGZyb20gJ3FyY29kZSc7XG5pbXBvcnQgeyBJRHJhd0tleUNhcmQgfSBmcm9tICcuL3R5cGVzJztcbmltcG9ydCB7IHNwbGl0S2V5cyB9IGZyb20gJy4vdXRpbHMnO1xudHlwZSBqc1BERk1vZHVsZSA9IHR5cGVvZiBpbXBvcnQoJ2pzcGRmJyk7XG5cbmFzeW5jIGZ1bmN0aW9uIGxvYWRKU1BERigpOiBQcm9taXNlPGpzUERGTW9kdWxlPiB7XG4gIGxldCBqc1BERjoganNQREZNb2R1bGU7XG5cbiAgaWYgKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnICYmIHR5cGVvZiB3aW5kb3cuZG9jdW1lbnQgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgLy8gV2UgYXJlIGluIHRoZSBicm93c2VyXG4gICAganNQREYgPSBhd2FpdCBpbXBvcnQoJ2pzcGRmJyk7XG4gIH0gZWxzZSB7XG4gICAgLy8gV2UgYXJlIGluIE5vZGUuanNcbiAgICBqc1BERiA9IHJlcXVpcmUoJ2pzcGRmJyk7XG4gIH1cbiAgcmV0dXJuIGpzUERGO1xufVxuXG5lbnVtIEtleUN1cnZlTmFtZSB7XG4gIGVkMjU1MTkgPSAnRUREU0EnLFxuICBzZWNwMjU2azEgPSAnRUNEU0EnLFxuICBibHMgPSAnQkxTJyxcbn1cblxuLy8gTWF4IGZvciBCaW5hcnkvQnl0ZSBEYXRhIGh0dHBzOi8vZ2l0aHViLmNvbS9zb2xkYWlyL25vZGUtcXJjb2RlI3FyLWNvZGUtY2FwYWNpdHlcbi8vIHRoZSBsYXJnZXN0IHRoZW9yZXRpY2FsbHkgcG9zc2libGUgdmFsdWUgaXMgYWN0dWFsbHkgMjk1MyBidXQgdGhlIFFSIGNvZGVzIGdldCBzbyBkZW5zZSB0aGF0IHNjYW5uaW5nIHRoZW0gd2l0aCBhXG4vLyBwaG9uZSAob2ZmIG9mIGEgcHJpbnRlZCBwYWdlKSBkb2Vzbid0IHdvcmsgYW55bW9yZVxuLy8gdGhpcyBsaW1pdGF0aW9uIHdhcyBjaG9zZW4gYnkgdHJpYWwgYW5kIGVycm9yXG5leHBvcnQgY29uc3QgUVJCaW5hcnlNYXhMZW5ndGggPSAxNTAwO1xuXG4vLyBEZWZhdWx0IHBhZ2UtYnJlYWsgbGF5b3V0OiBzdGFydCBhIG5ldyBwYWdlIGJlZm9yZSB0aGUgM3JkIGJveCAoaW5kZXggMiksIG1hdGNoaW5nIHRoZVxuLy8gaGlzdG9yaWNhbCB3YWxsZXQga2V5Y2FyZC4gQ2FsbGVycyAoZS5nLiB0aGUgc2FmZSBrZXljYXJkKSBtYXkgb3ZlcnJpZGUgd2l0aCB0aGVpciBvd24gaW5kaWNlcy5cbmNvbnN0IERFRkFVTFRfUEFHRV9CUkVBS19JTkRJQ0VTID0gWzJdO1xuXG5jb25zdCBmb250ID0ge1xuICBoZWFkZXI6IDI0LFxuICBzdWJoZWFkZXI6IDE1LFxuICBib2R5OiAxMixcbn07XG5cbmNvbnN0IGNvbG9yID0ge1xuICBibGFjazogJyMwMDAwMDAnLFxuICBkYXJrZ3JheTogJyM0YzRjNGMnLFxuICBncmF5OiAnIzliOWI5YicsXG4gIHJlZDogJyNlMjFlMWUnLFxufTtcblxuY29uc3QgbWFyZ2luID0gMzA7XG5cbi8vIEhlbHBlcnMgZm9yIGRhdGEgZm9ybWF0dGluZyAvIHBvc2l0aW9uaW5nIG9uIHRoZSBwYXBlclxuZnVuY3Rpb24gbGVmdCh4OiBudW1iZXIpOiBudW1iZXIge1xuICByZXR1cm4gbWFyZ2luICsgeDtcbn1cbmZ1bmN0aW9uIG1vdmVEb3duKHk6IG51bWJlciwgeWRlbHRhOiBudW1iZXIpOiBudW1iZXIge1xuICByZXR1cm4geSArIHlkZWx0YTtcbn1cblxuLy8gRHJhd3MgUVIgY29kZXMgZG93biB0aGUgbGVmdCBjb2x1bW4sIHJldHVybmluZyB0aGUgaW5kZXggb2YgdGhlIG5leHQgUVIgc3RpbGwgdG8gZHJhdyAoZm9yXG4vLyBjb250aW51YXRpb24gb24gYSBsYXRlciBwYWdlKSBhbmQgdGhlIHktb2Zmc2V0IGp1c3QgYmVsb3cgdGhlIGRyYXduIFFSIGNvbHVtbiAoc28gY2FsbGVyc1xuLy8gY2FuIHBsYWNlIGNvbnRlbnQsIGUuZy4gYSBub3RlLCB1bmRlciB0aGUgUVIgY29kZXMpLlxuZnVuY3Rpb24gZHJhd09uZVBhZ2VPZlFyQ29kZXMoXG4gIHFySW1hZ2VzOiBIVE1MQ2FudmFzRWxlbWVudFtdLFxuICBkb2M6IGpzUERGLFxuICB5OiBudW1iZXIsXG4gIHFyU2l6ZTogbnVtYmVyLFxuICBzdGFydEluZGV4OiBudW1iZXJcbik6IHsgbmV4dEluZGV4OiBudW1iZXI7IGVuZFk6IG51bWJlciB9IHtcbiAgZG9jLnNldEZvbnQoJ2hlbHZldGljYScpO1xuICBsZXQgcXJJbmRleDogbnVtYmVyID0gc3RhcnRJbmRleDtcbiAgZm9yICg7IHFySW5kZXggPCBxckltYWdlcy5sZW5ndGg7IHFySW5kZXgrKykge1xuICAgIGNvbnN0IGltYWdlID0gcXJJbWFnZXNbcXJJbmRleF07XG4gICAgY29uc3QgdGV4dEJ1ZmZlciA9IDE1O1xuICAgIGlmICh5ICsgcXJTaXplICsgdGV4dEJ1ZmZlciA+PSBkb2MuaW50ZXJuYWwucGFnZVNpemUuZ2V0SGVpZ2h0KCkpIHtcbiAgICAgIHJldHVybiB7IG5leHRJbmRleDogcXJJbmRleCwgZW5kWTogeSB9O1xuICAgIH1cblxuICAgIGRvYy5hZGRJbWFnZShpbWFnZSwgbGVmdCgwKSwgeSwgcXJTaXplLCBxclNpemUpO1xuXG4gICAgaWYgKHFySW1hZ2VzLmxlbmd0aCA9PT0gMSkge1xuICAgICAgcmV0dXJuIHsgbmV4dEluZGV4OiBxckluZGV4ICsgMSwgZW5kWTogeSArIHFyU2l6ZSB9O1xuICAgIH1cblxuICAgIHkgPSBtb3ZlRG93bih5LCBxclNpemUgKyB0ZXh0QnVmZmVyKTtcbiAgICBkb2Muc2V0Rm9udFNpemUoZm9udC5ib2R5KS5zZXRUZXh0Q29sb3IoY29sb3IuYmxhY2spO1xuICAgIGRvYy50ZXh0KCdQYXJ0ICcgKyAocXJJbmRleCArIDEpLnRvU3RyaW5nKCksIGxlZnQoMCksIHkpO1xuICAgIHkgPSBtb3ZlRG93bih5LCAyMCk7XG4gIH1cbiAgcmV0dXJuIHsgbmV4dEluZGV4OiBxckluZGV4LCBlbmRZOiB5IH07XG59XG5cbmZ1bmN0aW9uIGNvbXB1dGVLZXlDYXJkSW1hZ2VEaW1lbnNpb25zKGtleUNhcmRJbWFnZTogSFRNTEltYWdlRWxlbWVudCkge1xuICAvLyBNYXggZGltZW5zaW9ucyBzdGFibGlzaGVkIGJ5IGZpeGVkIGF2YWlsYWJsZSBQREYgc3BhY2VcbiAgY29uc3QgS0VZX0NBUkRfSU1BR0VfTUFYX0RJTUVOU0lPTlMgPSB7XG4gICAgd2lkdGg6IDMwMyxcbiAgICBoZWlnaHQ6IDQwLFxuICB9O1xuXG4gIGNvbnN0IHsgd2lkdGg6IGltZ1dpZHRoLCBoZWlnaHQ6IGltZ0hlaWdodCB9ID0ga2V5Q2FyZEltYWdlO1xuICBjb25zdCB7IHdpZHRoOiBtYXhXaWR0aCwgaGVpZ2h0OiBtYXhIZWlnaHQgfSA9IEtFWV9DQVJEX0lNQUdFX01BWF9ESU1FTlNJT05TO1xuXG4gIC8vIFRyeSBzY2FsaW5nIHJhdGlvIGJhc2VkIG9uIHdpZHRoXG4gIGNvbnN0IHdSYXRpbyA9IGltZ1dpZHRoIC8gbWF4V2lkdGg7XG4gIGxldCBmaW5hbFJhdGlvID0gd1JhdGlvO1xuXG4gIC8vIElmIHJlc2l6ZWQgaGVpZ2h0IGV4Y2VlZHMgdGhlIGF2YWlsYWJsZSBoZWlnaHQgc3BhY2UsIGJhc2UgcmF0aW8gYWxzbyBvbiBoZWlnaHRcbiAgaWYgKGltZ0hlaWdodCAvIGZpbmFsUmF0aW8gPiBtYXhIZWlnaHQpIHtcbiAgICBmaW5hbFJhdGlvID0gaW1nSGVpZ2h0IC8gbWF4SGVpZ2h0O1xuICB9XG4gIHJldHVybiBbaW1nV2lkdGggLyBmaW5hbFJhdGlvLCBpbWdIZWlnaHQgLyBmaW5hbFJhdGlvXTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGRyYXdLZXljYXJkKHtcbiAgYWN0aXZhdGlvbkNvZGUsXG4gIHF1ZXN0aW9ucyxcbiAga2V5Q2FyZEltYWdlLFxuICBxckRhdGEsXG4gIHdhbGxldExhYmVsLFxuICBjdXJ2ZSxcbiAgcGFnZUJyZWFrQmVmb3JlSW5kaWNlcyA9IERFRkFVTFRfUEFHRV9CUkVBS19JTkRJQ0VTLFxufTogSURyYXdLZXlDYXJkKTogUHJvbWlzZTxqc1BERj4ge1xuICBjb25zdCBqc1BERk1vZHVsZSA9IGF3YWl0IGxvYWRKU1BERigpO1xuXG4gIC8vIGRvY3VtZW50IGRldGFpbHNcbiAgY29uc3Qgd2lkdGggPSA4LjUgKiA3MjtcbiAgbGV0IHkgPSAwO1xuXG4gIC8vIENyZWF0ZSB0aGUgUERGIGluc3RhbmNlXG4gIGNvbnN0IGRvYyA9IG5ldyBqc1BERk1vZHVsZS5qc1BERigncG9ydHJhaXQnLCAncHQnLCAnbGV0dGVyJyk7IC8vIGpzaGludCBpZ25vcmU6bGluZVxuICBkb2Muc2V0Rm9udCgnaGVsdmV0aWNhJyk7XG5cbiAgLy8gUERGIEhlYWRlciBBcmVhIC0gaW5jbHVkZXMgdGhlIGxvZ28gYW5kIGNvbXBhbnkgbmFtZVxuICAvLyBUaGlzIGlzIGRhdGEgZm9yIHRoZSBCaXRHbyBsb2dvIGluIHRoZSB0b3AgbGVmdCBvZiB0aGUgUERGXG4gIHkgPSBtb3ZlRG93bih5LCAzMCk7XG5cbiAgaWYgKGtleUNhcmRJbWFnZSkge1xuICAgIGNvbnN0IFtpbWdXaWR0aCwgaW1nSGVpZ2h0XSA9IGNvbXB1dGVLZXlDYXJkSW1hZ2VEaW1lbnNpb25zKGtleUNhcmRJbWFnZSk7XG4gICAgZG9jLmFkZEltYWdlKGtleUNhcmRJbWFnZSwgbGVmdCgwKSwgeSwgaW1nV2lkdGgsIGltZ0hlaWdodCk7XG4gIH1cblxuICAvLyBBY3RpdmF0aW9uIENvZGVcbiAgaWYgKGFjdGl2YXRpb25Db2RlKSB7XG4gICAgeSA9IG1vdmVEb3duKHksIDgpO1xuICAgIGRvYy5zZXRGb250U2l6ZShmb250LmJvZHkpLnNldFRleHRDb2xvcihjb2xvci5ncmF5KTtcbiAgICBkb2MudGV4dCgnQWN0aXZhdGlvbiBDb2RlJywgbGVmdCg0NjApLCB5KTtcbiAgfVxuICBkb2Muc2V0Rm9udFNpemUoZm9udC5oZWFkZXIpLnNldFRleHRDb2xvcihjb2xvci5ibGFjayk7XG4gIHkgPSBtb3ZlRG93bih5LCAyNSk7XG4gIGRvYy50ZXh0KCdLZXlDYXJkJywgbGVmdChjdXJ2ZSAmJiAhYWN0aXZhdGlvbkNvZGUgPyA0NjAgOiAzMjUpLCB5IC0gMSk7XG4gIGlmIChhY3RpdmF0aW9uQ29kZSkge1xuICAgIGRvYy5zZXRGb250U2l6ZShmb250LmhlYWRlcikuc2V0VGV4dENvbG9yKGNvbG9yLmdyYXkpO1xuICAgIGRvYy50ZXh0KGFjdGl2YXRpb25Db2RlLCBsZWZ0KDQ2MCksIHkpO1xuICB9XG5cbiAgLy8gU3ViaGVhZGVyXG4gIC8vIHRpdGxlc1xuICBjb25zdCBkYXRlID0gbmV3IERhdGUoKS50b0RhdGVTdHJpbmcoKTtcbiAgeSA9IG1vdmVEb3duKHksIG1hcmdpbik7XG4gIGRvYy5zZXRGb250U2l6ZShmb250LmJvZHkpLnNldFRleHRDb2xvcihjb2xvci5ncmF5KTtcblxuICBpZiAoY3VydmUgfHwgd2FsbGV0TGFiZWwpIHtcbiAgICBjb25zdCB0aXRsZSA9IGN1cnZlID8gS2V5Q3VydmVOYW1lW2N1cnZlXSArICcga2V5OicgOiAnd2FsbGV0IG5hbWVkOic7XG4gICAgZG9jLnRleHQoJ0NyZWF0ZWQgb24gJyArIGRhdGUgKyAnIGZvciAnICsgdGl0bGUsIGxlZnQoMCksIHkpO1xuICAgIC8vIGNvcHlcbiAgICB5ID0gbW92ZURvd24oeSwgMjUpO1xuICAgIGlmICh3YWxsZXRMYWJlbCkge1xuICAgICAgZG9jLnNldEZvbnRTaXplKGZvbnQuc3ViaGVhZGVyKS5zZXRUZXh0Q29sb3IoY29sb3IuYmxhY2spO1xuICAgICAgZG9jLnRleHQod2FsbGV0TGFiZWwsIGxlZnQoMCksIHkpO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBkb2MudGV4dCgnQ3JlYXRlZCBvbiAnICsgZGF0ZSwgbGVmdCgwKSwgeSk7XG4gICAgeSA9IG1vdmVEb3duKHksIDI1KTtcbiAgfVxuICBpZiAoIWN1cnZlKSB7XG4gICAgLy8gUmVkIEJhclxuICAgIHkgPSBtb3ZlRG93bih5LCAyMCk7XG4gICAgZG9jLnNldEZpbGxDb2xvcigyNTUsIDIzMCwgMjMwKTtcbiAgICBkb2MucmVjdChsZWZ0KDApLCB5LCB3aWR0aCAtIDIgKiBtYXJnaW4sIDMyLCAnRicpO1xuXG4gICAgLy8gd2FybmluZyBtZXNzYWdlXG4gICAgeSA9IG1vdmVEb3duKHksIDIwKTtcbiAgICBkb2Muc2V0Rm9udFNpemUoZm9udC5ib2R5KS5zZXRUZXh0Q29sb3IoY29sb3IucmVkKTtcbiAgICBkb2MudGV4dCgnUHJpbnQgdGhpcyBkb2N1bWVudCwgb3Iga2VlcCBpdCBzZWN1cmVseSBvZmZsaW5lLiBTZWUgYmVsb3cgZm9yIEZBUS4nLCBsZWZ0KDc1KSwgeSk7XG4gIH1cbiAgLy8gR2VuZXJhdGUgdGhlIGZpcnN0IHBhZ2UncyBkYXRhIGZvciB0aGUgYmFja3VwIFBERlxuICB5ID0gbW92ZURvd24oeSwgMzUpO1xuICBjb25zdCBxclNpemUgPSAxMzA7XG4gIGNvbnN0IHFyS2V5cyA9IFsndXNlcicsICd1c2VyTWFzdGVyUHVibGljS2V5JywgJ2JhY2t1cCcsICdiYWNrdXBNYXN0ZXJQdWJsaWNLZXknLCAnYml0Z28nLCAncGFzc2NvZGUnXS5maWx0ZXIoXG4gICAgKGtleSkgPT4gISFxckRhdGFba2V5XVxuICApO1xuICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgcXJLZXlzLmxlbmd0aDsgaW5kZXgrKykge1xuICAgIGNvbnN0IG5hbWUgPSBxcktleXNbaW5kZXhdO1xuXG4gICAgaWYgKHBhZ2VCcmVha0JlZm9yZUluZGljZXMuaW5jbHVkZXMoaW5kZXgpKSB7XG4gICAgICAvLyBTdGFydCBhIG5ldyBwYWdlIGZvciB0aGlzIGJveFxuICAgICAgZG9jLmFkZFBhZ2UoKTtcblxuICAgICAgLy8gMm5kIHBhZ2UgdGl0bGVcbiAgICAgIHkgPSAzMDtcbiAgICB9XG5cbiAgICBjb25zdCBxciA9IHFyRGF0YVtuYW1lXTtcbiAgICBsZXQgdG9wWSA9IHk7XG4gICAgY29uc3QgdGV4dExlZnQgPSBsZWZ0KHFyU2l6ZSArIDE1KTtcbiAgICBsZXQgdGV4dEhlaWdodCA9IDA7XG5cbiAgICBjb25zdCBxckltYWdlczogSFRNTENhbnZhc0VsZW1lbnRbXSA9IFtdO1xuICAgIGNvbnN0IGtleXMgPSBzcGxpdEtleXMocXIuZGF0YSwgUVJCaW5hcnlNYXhMZW5ndGgpO1xuICAgIGZvciAoY29uc3Qga2V5IG9mIGtleXMpIHtcbiAgICAgIHFySW1hZ2VzLnB1c2goYXdhaXQgUVJDb2RlLnRvQ2FudmFzKGtleSwgeyBlcnJvckNvcnJlY3Rpb25MZXZlbDogJ0wnIH0pKTtcbiAgICB9XG5cbiAgICBjb25zdCBpc011bHRpUGFydCA9IHFyPy5kYXRhPy5sZW5ndGggPiBRUkJpbmFyeU1heExlbmd0aDtcbiAgICBjb25zdCB7IG5leHRJbmRleCwgZW5kWTogcXJDb2x1bW5FbmRZIH0gPSBkcmF3T25lUGFnZU9mUXJDb2RlcyhxckltYWdlcywgZG9jLCB5LCBxclNpemUsIDApO1xuICAgIGxldCBuZXh0UXJJbmRleCA9IG5leHRJbmRleDtcblxuICAgIC8vIEZvciBhIHNwbGl0IGtleSwgcGxhY2UgdGhlIFwicHV0IGFsbCBQYXJ0cyB0b2dldGhlclwiIG5vdGUgZGlyZWN0bHkgdW5kZXIgdGhlIFFSIGNvZGVzLFxuICAgIC8vIHdyYXBwZWQgdG8gdGhlIFFSIGNvbHVtbiB3aWR0aCBzbyBpdCBzdGF5cyBpbiB0aGUgbGVmdCBjb2x1bW4gYW5kIG5ldmVyIG92ZXJsYXBzIHRoZVxuICAgIC8vIERhdGEgcGF5bG9hZCByZW5kZXJlZCBvbiB0aGUgcmlnaHQuXG4gICAgbGV0IHFyQ29sdW1uQm90dG9tID0gcXJDb2x1bW5FbmRZO1xuICAgIGlmIChpc011bHRpUGFydCkge1xuICAgICAgZG9jLnNldEZvbnRTaXplKGZvbnQuYm9keSAtIDIpLnNldFRleHRDb2xvcihjb2xvci5kYXJrZ3JheSk7XG4gICAgICBjb25zdCBub3RlTGluZXMgPSBkb2Muc3BsaXRUZXh0VG9TaXplKCdOb3RlOiB5b3Ugd2lsbCBuZWVkIHRvIHB1dCBhbGwgUGFydHMgdG9nZXRoZXIgZm9yIHRoZSBmdWxsIGtleScsIHFyU2l6ZSk7XG4gICAgICBjb25zdCBub3RlWSA9IG1vdmVEb3duKHFyQ29sdW1uRW5kWSwgMTUpO1xuICAgICAgZG9jLnRleHQobm90ZUxpbmVzLCBsZWZ0KDApLCBub3RlWSk7XG4gICAgICBxckNvbHVtbkJvdHRvbSA9IG5vdGVZICsgbm90ZUxpbmVzLmxlbmd0aCAqIGRvYy5nZXRMaW5lSGVpZ2h0KCk7XG4gICAgfVxuXG4gICAgZG9jLnNldEZvbnRTaXplKGZvbnQuc3ViaGVhZGVyKS5zZXRUZXh0Q29sb3IoY29sb3IuYmxhY2spO1xuICAgIHkgPSBtb3ZlRG93bih5LCAxMCk7XG4gICAgdGV4dEhlaWdodCArPSAxMDtcbiAgICBkb2MudGV4dChxci50aXRsZSwgdGV4dExlZnQsIHkpO1xuICAgIHRleHRIZWlnaHQgKz0gZG9jLmdldExpbmVIZWlnaHQoKTtcbiAgICB5ID0gbW92ZURvd24oeSwgMTUpO1xuICAgIHRleHRIZWlnaHQgKz0gMTU7XG4gICAgZG9jLnNldEZvbnRTaXplKGZvbnQuYm9keSkuc2V0VGV4dENvbG9yKGNvbG9yLmRhcmtncmF5KTtcbiAgICBkb2MudGV4dChxci5kZXNjcmlwdGlvbiwgdGV4dExlZnQsIHkpO1xuICAgIHRleHRIZWlnaHQgKz0gZG9jLmdldExpbmVIZWlnaHQoKTtcbiAgICBkb2Muc2V0Rm9udFNpemUoZm9udC5ib2R5IC0gMik7XG4gICAgeSA9IG1vdmVEb3duKHksIDMwKTtcbiAgICB0ZXh0SGVpZ2h0ICs9IDMwO1xuICAgIGRvYy50ZXh0KCdEYXRhOicsIHRleHRMZWZ0LCB5KTtcbiAgICB0ZXh0SGVpZ2h0ICs9IGRvYy5nZXRMaW5lSGVpZ2h0KCk7XG4gICAgeSA9IG1vdmVEb3duKHksIDE1KTtcbiAgICB0ZXh0SGVpZ2h0ICs9IDE1O1xuICAgIGNvbnN0IHdpZHRoID0gNzIgKiA4LjUgLSB0ZXh0TGVmdCAtIDMwO1xuICAgIGRvYy5zZXRGb250KCdjb3VyaWVyJykuc2V0Rm9udFNpemUoOSkuc2V0VGV4dENvbG9yKGNvbG9yLmJsYWNrKTtcbiAgICBjb25zdCBsaW5lcyA9IGRvYy5zcGxpdFRleHRUb1NpemUocXIuZGF0YSwgd2lkdGgpO1xuICAgIGNvbnN0IGJ1ZmZlciA9IDEwO1xuICAgIGZvciAobGV0IGxpbmUgPSAwOyBsaW5lIDwgbGluZXMubGVuZ3RoOyBsaW5lKyspIHtcbiAgICAgIC8vIGFkZCBuZXcgcGFnZSBpZiBkYXRhIGRvZXMgbm90IGZpdCBvbiBvbmUgcGFnZVxuICAgICAgaWYgKHkgKyBidWZmZXIgPj0gZG9jLmludGVybmFsLnBhZ2VTaXplLmdldEhlaWdodCgpKSB7XG4gICAgICAgIGRvYy5hZGRQYWdlKCk7XG4gICAgICAgIHRleHRIZWlnaHQgPSAwO1xuICAgICAgICB5ID0gMzA7XG4gICAgICAgIHRvcFkgPSB5O1xuICAgICAgICAvLyBSZWRyYXcgcmVtYWluaW5nIFFScyBvbiB0aGUgbmV3IHBhZ2UgYW5kIHVwZGF0ZSB0aGUgY29sdW1uIGJvdHRvbSB0byBUSElTIHBhZ2UsIHNvXG4gICAgICAgIC8vIHRoZSByb3dIZWlnaHQgbWF0aCBiZWxvdyBzdGF5cyBzYW1lLXBhZ2UgKGF2b2lkcyBhIHN0YWxlIHBhZ2UtMSBjb29yZGluYXRlKS5cbiAgICAgICAgY29uc3QgY29udGludWVkID0gZHJhd09uZVBhZ2VPZlFyQ29kZXMocXJJbWFnZXMsIGRvYywgeSwgcXJTaXplLCBuZXh0UXJJbmRleCk7XG4gICAgICAgIG5leHRRckluZGV4ID0gY29udGludWVkLm5leHRJbmRleDtcbiAgICAgICAgcXJDb2x1bW5Cb3R0b20gPSBjb250aW51ZWQuZW5kWTtcbiAgICAgICAgZG9jLnNldEZvbnQoJ2NvdXJpZXInKS5zZXRGb250U2l6ZSg5KS5zZXRUZXh0Q29sb3IoY29sb3IuYmxhY2spO1xuICAgICAgfVxuICAgICAgZG9jLnRleHQobGluZXNbbGluZV0sIHRleHRMZWZ0LCB5KTtcbiAgICAgIGlmIChsaW5lICE9PSBsaW5lcy5sZW5ndGggLSAxKSB7XG4gICAgICAgIHkgPSBtb3ZlRG93bih5LCBidWZmZXIpO1xuICAgICAgICB0ZXh0SGVpZ2h0ICs9IGJ1ZmZlcjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBBZGQgcHVibGljIGtleSBpZiBleGlzdHNcbiAgICBpZiAocXIucHVibGljTWFzdGVyS2V5KSB7XG4gICAgICBjb25zdCB0ZXh0ID0gJ0tleSBJZDogJyArIHFyLnB1YmxpY01hc3RlcktleTtcblxuICAgICAgLy8gR3JheSBiYXJcbiAgICAgIHkgPSBtb3ZlRG93bih5LCAyMCk7XG4gICAgICB0ZXh0SGVpZ2h0ICs9IDIwO1xuICAgICAgZG9jLnNldEZpbGxDb2xvcigyNDcsIDI0OSwgMjQ5KTsgLy8gR3JheSBiYWNrZ3JvdW5kXG4gICAgICBkb2Muc2V0RHJhd0NvbG9yKDAsIDAsIDApOyAvLyBCb3JkZXJcblxuICAgICAgLy8gTGVhdmUgYSBiaXQgb2Ygc3BhY2UgZm9yIHRoZSBzaWRlIG9mIHRoZSByZWN0YW5nbGUuXG4gICAgICBjb25zdCBzcGxpdEtleUlkID0gZG9jLnNwbGl0VGV4dFRvU2l6ZSh0ZXh0LCB3aWR0aCAtIDEwKTtcblxuICAgICAgLy8gVGhlIGhlaWdodCBvZiB0aGUgYm94IG11c3QgYmUgYXQgbGVhc3QgMTUgcHggKGZvciBzaW5nbGUgbGluZSBjYXNlKSwgb3JcbiAgICAgIC8vIGEgbXVsdGlwbGUgb2YgMTMgZm9yIGVhY2ggbGluZS4gIFRoaXMgYWxsb3dzIGZvciBwcm9wZXIgcGFkZGluZy5cbiAgICAgIGRvYy5yZWN0KHRleHRMZWZ0LCB5LCB3aWR0aCwgTWF0aC5tYXgoMTIgKiBzcGxpdEtleUlkLmxlbmd0aCwgMTUpLCAnRkQnKTtcbiAgICAgIHRleHRIZWlnaHQgKz0gc3BsaXRLZXlJZC5sZW5ndGggKiBkb2MuZ2V0TGluZUhlaWdodCgpO1xuICAgICAgZG9jLnRleHQoc3BsaXRLZXlJZCwgdGV4dExlZnQgKyA1LCB5ICsgMTApO1xuICAgIH1cblxuICAgIGRvYy5zZXRGb250KCdoZWx2ZXRpY2EnKTtcbiAgICAvLyBNb3ZlIGRvd24gcGFzdCB0aGUgdGFsbGVyIG9mIHRoZSB0d28gY29sdW1uczogdGhlIHJpZ2h0LXNpZGUgdGV4dCAodGV4dEhlaWdodCkgb3IgdGhlXG4gICAgLy8gbGVmdC1zaWRlIFFSIGNvbHVtbiAocGx1cyB0aGUgbm90ZSBwcmludGVkIHVuZGVyIGl0IGZvciBzcGxpdCBrZXlzKSwgdGhlbiBhZGQgYSBtYXJnaW4uXG4gICAgY29uc3QgcXJDb2x1bW5IZWlnaHQgPSBpc011bHRpUGFydCA/IHFyQ29sdW1uQm90dG9tIC0gdG9wWSA6IHFyU2l6ZTtcbiAgICBjb25zdCByb3dIZWlnaHQgPSBNYXRoLm1heChxckNvbHVtbkhlaWdodCwgdGV4dEhlaWdodCk7XG4gICAgY29uc3QgbWFyZ2luQm90dG9tID0gMTU7XG4gICAgeSA9IG1vdmVEb3duKHksIHJvd0hlaWdodCAtICh5IC0gdG9wWSkgKyBtYXJnaW5Cb3R0b20pO1xuICB9XG5cbiAgLy8gQWRkIG5leHQgUGFnZVxuICBkb2MuYWRkUGFnZSgpO1xuXG4gIC8vIG5leHQgcGFnZXMgdGl0bGVcbiAgeSA9IDA7XG4gIHkgPSBtb3ZlRG93bih5LCA1NSk7XG4gIGRvYy5zZXRGb250U2l6ZShmb250LmhlYWRlcikuc2V0VGV4dENvbG9yKGNvbG9yLmJsYWNrKTtcbiAgZG9jLnRleHQoJ0JpdEdvIEtleUNhcmQgRkFRJywgbGVmdCgwKSwgeSk7XG5cbiAgLy8gR2VuZXJhdGUgdGhlIHNlY29uZCBwYWdlJ3MgZGF0YSBmb3IgdGhlIGJhY2t1cCBQREZcbiAgeSA9IG1vdmVEb3duKHksIDMwKTtcbiAgcXVlc3Rpb25zLmZvckVhY2goZnVuY3Rpb24gKHEpIHtcbiAgICBkb2Muc2V0Rm9udFNpemUoZm9udC5zdWJoZWFkZXIpLnNldFRleHRDb2xvcihjb2xvci5ibGFjayk7XG4gICAgZG9jLnRleHQocS5xdWVzdGlvbiwgbGVmdCgwKSwgeSk7XG4gICAgeSA9IG1vdmVEb3duKHksIDIwKTtcbiAgICBkb2Muc2V0Rm9udFNpemUoZm9udC5ib2R5KS5zZXRUZXh0Q29sb3IoY29sb3IuZGFya2dyYXkpO1xuICAgIHEuYW5zd2VyLmZvckVhY2goZnVuY3Rpb24gKGxpbmUpIHtcbiAgICAgIGRvYy50ZXh0KGxpbmUsIGxlZnQoMCksIHkpO1xuICAgICAgeSA9IG1vdmVEb3duKHksIGZvbnQuYm9keSArIDMpO1xuICAgIH0pO1xuICAgIHkgPSBtb3ZlRG93bih5LCAyMik7XG4gIH0pO1xuXG4gIHJldHVybiBkb2M7XG59XG4iXX0=
|
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
import { GenerateLightningQrDataParams, GenerateQrDataParams,
|
|
1
|
+
import { GenerateLightningQrDataParams, GenerateQrDataParams, GenerateSafeQrDataParams, QrData } from './types';
|
|
2
2
|
export declare function generateQrData(params: GenerateQrDataParams): Promise<QrData>;
|
|
3
3
|
export declare function generateLightningQrData(params: GenerateLightningQrDataParams): Promise<QrData>;
|
|
4
4
|
/**
|
|
5
|
-
* Builds
|
|
5
|
+
* Builds safe keycard QR data in the existing wallet {@link QrData} shape: boxes A (user),
|
|
6
6
|
* B (backup), C (BitGo), D (passcode). Each of A/B/C carries a JSON object of the four roots,
|
|
7
|
-
* so the
|
|
7
|
+
* so the safe renders and parses through the same {@link drawKeycard} path as a wallet.
|
|
8
8
|
*/
|
|
9
|
-
export declare function
|
|
9
|
+
export declare function generateSafeQrData(params: GenerateSafeQrDataParams): Promise<QrData>;
|
|
10
10
|
//# sourceMappingURL=generateQrData.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"generateQrData.d.ts","sourceRoot":"","sources":["../../src/generateQrData.ts"],"names":[],"mappings":"AAIA,OAAO,EACL,6BAA6B,EAC7B,oBAAoB,EACpB,
|
|
1
|
+
{"version":3,"file":"generateQrData.d.ts","sourceRoot":"","sources":["../../src/generateQrData.ts"],"names":[],"mappings":"AAIA,OAAO,EACL,6BAA6B,EAC7B,oBAAoB,EACpB,wBAAwB,EAGxB,MAAM,EAKP,MAAM,SAAS,CAAC;AAsLjB,wBAAsB,cAAc,CAAC,MAAM,EAAE,oBAAoB,GAAG,OAAO,CAAC,MAAM,CAAC,CAYlF;AAED,wBAAsB,uBAAuB,CAAC,MAAM,EAAE,6BAA6B,GAAG,OAAO,CAAC,MAAM,CAAC,CAYpG;AAmCD;;;;GAIG;AACH,wBAAsB,kBAAkB,CAAC,MAAM,EAAE,wBAAwB,GAAG,OAAO,CAAC,MAAM,CAAC,CA8B1F"}
|
|
@@ -35,7 +35,7 @@ var __importStar = (this && this.__importStar) || (function () {
|
|
|
35
35
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
36
|
exports.generateQrData = generateQrData;
|
|
37
37
|
exports.generateLightningQrData = generateLightningQrData;
|
|
38
|
-
exports.
|
|
38
|
+
exports.generateSafeQrData = generateSafeQrData;
|
|
39
39
|
const sdk_api_1 = require("@bitgo-beta/sdk-api");
|
|
40
40
|
const assert = __importStar(require("assert"));
|
|
41
41
|
const types_1 = require("./types");
|
|
@@ -132,12 +132,13 @@ function generateUserMasterPublicKeyQRData(publicKey) {
|
|
|
132
132
|
data: publicKey,
|
|
133
133
|
};
|
|
134
134
|
}
|
|
135
|
-
async function generatePasscodeQrData(passphrase, passcodeEncryptionCode, encryptionVersion) {
|
|
136
|
-
const
|
|
135
|
+
async function generatePasscodeQrData(passphrase, passcodeEncryptionCode, encryptionVersion, entityNoun = 'wallet') {
|
|
136
|
+
const encryptedPasscode = await (0, sdk_api_1.encrypt)(passcodeEncryptionCode, passphrase, { encryptionVersion });
|
|
137
|
+
const titleNoun = entityNoun === 'safe' ? 'Safe' : 'Wallet';
|
|
137
138
|
return {
|
|
138
|
-
title:
|
|
139
|
-
description:
|
|
140
|
-
data:
|
|
139
|
+
title: `D: Encrypted ${titleNoun} Password`,
|
|
140
|
+
description: `This is the ${entityNoun} password, encrypted client-side with a key held by BitGo.`,
|
|
141
|
+
data: encryptedPasscode,
|
|
141
142
|
};
|
|
142
143
|
}
|
|
143
144
|
function generateBackupMasterPublicKeyQRData(publicKey) {
|
|
@@ -188,57 +189,57 @@ async function generateLightningQrData(params) {
|
|
|
188
189
|
function selectRootPrivateKey(keychain, slot, role) {
|
|
189
190
|
// Prefer the compact MPCv2 reduced share; fall back to encryptedPrv (e.g. multisig roots).
|
|
190
191
|
const data = keychain.reducedEncryptedPrv ?? keychain.encryptedPrv;
|
|
191
|
-
assert.ok(data, `
|
|
192
|
+
assert.ok(data, `Safe ${role} root ${slot} is missing encrypted private key material`);
|
|
192
193
|
return data;
|
|
193
194
|
}
|
|
194
195
|
function selectRootPublicKey(keychain, slot) {
|
|
195
196
|
const pub = getPubFromKey(keychain);
|
|
196
|
-
assert.ok(pub, `
|
|
197
|
+
assert.ok(pub, `Safe BitGo root ${slot} is missing a public key`);
|
|
197
198
|
return pub;
|
|
198
199
|
}
|
|
199
200
|
/**
|
|
200
201
|
* Serializes one box's four roots into a single JSON object keyed by rootKeyType, e.g.
|
|
201
|
-
* `{"secp256k1Multisig":"<encPrv>","ecdsaMpc":"<reducedEncPrv>",...}`. This keeps the
|
|
202
|
+
* `{"secp256k1Multisig":"<encPrv>","ecdsaMpc":"<reducedEncPrv>",...}`. This keeps the safe
|
|
202
203
|
* keycard on the existing 4-box layout — one box (= one QR/data block) per role — with the
|
|
203
204
|
* four roots packed into each box's data. `splitKeys` fragments the box if it exceeds the QR
|
|
204
|
-
* threshold, exactly as for a normal wallet keycard. Reversed by {@link
|
|
205
|
+
* threshold, exactly as for a normal wallet keycard. Reversed by {@link parseSafeKeycardBox}.
|
|
205
206
|
*/
|
|
206
|
-
function
|
|
207
|
+
function buildSafeBoxData(roots, select) {
|
|
207
208
|
const box = {};
|
|
208
|
-
for (const slot of types_1.
|
|
209
|
+
for (const slot of types_1.SAFE_ROOT_ORDER) {
|
|
209
210
|
const root = roots[slot];
|
|
210
|
-
assert.ok(root, `
|
|
211
|
+
assert.ok(root, `Safe is missing the ${slot} root`);
|
|
211
212
|
box[slot] = select(root, slot);
|
|
212
213
|
}
|
|
213
214
|
return JSON.stringify(box);
|
|
214
215
|
}
|
|
215
216
|
/**
|
|
216
|
-
* Builds
|
|
217
|
+
* Builds safe keycard QR data in the existing wallet {@link QrData} shape: boxes A (user),
|
|
217
218
|
* B (backup), C (BitGo), D (passcode). Each of A/B/C carries a JSON object of the four roots,
|
|
218
|
-
* so the
|
|
219
|
+
* so the safe renders and parses through the same {@link drawKeycard} path as a wallet.
|
|
219
220
|
*/
|
|
220
|
-
async function
|
|
221
|
+
async function generateSafeQrData(params) {
|
|
221
222
|
const { roots } = params;
|
|
222
223
|
const qrData = {
|
|
223
224
|
user: {
|
|
224
225
|
title: 'A: User Key',
|
|
225
|
-
description: 'Your 4 root private keys, encrypted with your
|
|
226
|
-
data:
|
|
226
|
+
description: 'Your 4 root private keys, encrypted with your safe password.',
|
|
227
|
+
data: buildSafeBoxData(roots, (root, slot) => selectRootPrivateKey(root.userKeychain, slot, 'user')),
|
|
227
228
|
},
|
|
228
229
|
backup: {
|
|
229
230
|
title: 'B: Backup Key',
|
|
230
|
-
description: 'Your 4 root backup keys, encrypted with your
|
|
231
|
-
data:
|
|
231
|
+
description: 'Your 4 root backup keys, encrypted with your safe password.',
|
|
232
|
+
data: buildSafeBoxData(roots, (root, slot) => selectRootPrivateKey(root.backupKeychain, slot, 'backup')),
|
|
232
233
|
},
|
|
233
234
|
bitgo: {
|
|
234
235
|
title: 'C: BitGo Key',
|
|
235
236
|
description: 'The public parts of the 4 root keys held by BitGo.',
|
|
236
|
-
data:
|
|
237
|
+
data: buildSafeBoxData(roots, (root, slot) => selectRootPublicKey(root.bitgoKeychain, slot)),
|
|
237
238
|
},
|
|
238
239
|
};
|
|
239
240
|
if (params.passphrase && params.passcodeEncryptionCode) {
|
|
240
|
-
qrData.passcode = await generatePasscodeQrData(params.passphrase, params.passcodeEncryptionCode, params.encryptionVersion);
|
|
241
|
+
qrData.passcode = await generatePasscodeQrData(params.passphrase, params.passcodeEncryptionCode, params.encryptionVersion, 'safe');
|
|
241
242
|
}
|
|
242
243
|
return qrData;
|
|
243
244
|
}
|
|
244
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2VuZXJhdGVRckRhdGEuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvZ2VuZXJhdGVRckRhdGEudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFrTUEsd0NBWUM7QUFFRCwwREFZQztBQXdDRCxrREE2QkM7QUEvUkQsaURBQThDO0FBQzlDLCtDQUFpQztBQUNqQyxtQ0FVaUI7QUFFakIsU0FBUyxhQUFhLENBQUMsR0FBYTtJQUNsQyxRQUFRLEdBQUcsQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUNqQixLQUFLLFFBQVE7WUFDWCxPQUFPLEdBQUcsQ0FBQyxTQUFTLENBQUM7UUFDdkIsS0FBSyxLQUFLO1lBQ1IsT0FBTyxHQUFHLENBQUMsY0FBYyxDQUFDO1FBQzVCLEtBQUssYUFBYTtZQUNoQixPQUFPLEdBQUcsQ0FBQyxHQUFHLENBQUM7SUFDbkIsQ0FBQztBQUNILENBQUM7QUFFRCxTQUFTLGtCQUFrQixDQUFDLFlBQXNCLEVBQUUsYUFBc0I7SUFDeEUsSUFBSSxZQUFZLENBQUMsbUJBQW1CLEVBQUUsQ0FBQztRQUNyQyxPQUFPO1lBQ0wsS0FBSyxFQUFFLGFBQWE7WUFDcEIsV0FBVyxFQUFFLGdFQUFnRTtZQUM3RSxJQUFJLEVBQUUsWUFBWSxDQUFDLG1CQUFtQjtTQUN2QyxDQUFDO0lBQ0osQ0FBQztJQUNELElBQUksWUFBWSxDQUFDLFlBQVksRUFBRSxDQUFDO1FBQzlCLE9BQU87WUFDTCxLQUFLLEVBQUUsYUFBYTtZQUNwQixXQUFXLEVBQUUsZ0VBQWdFO1lBQzdFLElBQUksRUFBRSxZQUFZLENBQUMsWUFBWTtTQUNoQyxDQUFDO0lBQ0osQ0FBQztJQUVELE1BQU0sR0FBRyxHQUFHLGFBQWEsQ0FBQyxZQUFZLENBQUMsQ0FBQztJQUN4QyxNQUFNLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBRWYsT0FBTztRQUNMLEtBQUssRUFBRSxzQkFBc0I7UUFD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b0JBQW9CLENBQUMsSUFBSSxDQUFDLGNBQWMsRUFBRSxJQUFJLEVBQUUsUUFBUSxDQUFDLENBQUM7U0FDMUc7UUFDRCxLQUFLLEVBQUU7WUFDTCxLQUFLLEVBQUUsY0FBYztZQUNyQixXQUFXLEVBQUUsb0RBQW9EO1lBQ2pFLElBQUksRUFBRSxpQkFBaUIsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLEVBQUUsQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsYUFBYSxFQUFFLElBQUksQ0FBQyxDQUFDO1NBQzlGO0tBQ0YsQ0FBQztJQUVGLElBQUksTUFBTSxDQUFDLFVBQVUsSUFBSSxNQUFNLENBQUMsc0JBQXNCLEVBQUUsQ0FBQztRQUN2RCxNQUFNLENBQUMsUUFBUSxHQUFHLE1BQU0sc0JBQXNCLENBQzVDLE1BQU0sQ0FBQyxVQUFVLEVBQ2pCLE1BQU0sQ0FBQyxzQkFBc0IsRUFDN0IsTUFBTSxDQUFDLGlCQUFpQixDQUN6QixDQUFDO0lBQ0osQ0FBQztJQUVELE9BQU8sTUFBTSxDQUFDO0FBQ2hCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBCYXNlQ29pbiB9IGZyb20gJ0BiaXRnby1iZXRhL3N0YXRpY3MnO1xuaW1wb3J0IHsgS2V5Y2hhaW4sIEtleWNoYWluc1RyaXBsZXQgfSBmcm9tICdAYml0Z28tYmV0YS9zZGstY29yZSc7XG5pbXBvcnQgeyBlbmNyeXB0IH0gZnJvbSAnQGJpdGdvLWJldGEvc2RrLWFwaSc7XG5pbXBvcnQgKiBhcyBhc3NlcnQgZnJvbSAnYXNzZXJ0JztcbmltcG9ydCB7XG4gIEdlbmVyYXRlTGlnaHRuaW5nUXJEYXRhUGFyYW1zLFxuICBHZW5lcmF0ZVFyRGF0YVBhcmFtcyxcbiAgR2VuZXJhdGVWYXVsdFFyRGF0YVBhcmFtcyxcbiAgTWFzdGVyUHVibGljS2V5UXJEYXRhRW50cnksXG4gIFFyRGF0YSxcbiAgUXJEYXRhRW50cnksXG4gIFZhdWx0S2V5Y2FyZFJvb3RzLFxuICBWYXVsdFJvb3RLZXlUeXBlLFxuICBWQVVMVF9ST09UX09SREVSLFxufSBmcm9tICcuL3R5cGVzJztcblxuZnVuY3Rpb24gZ2V0UHViRnJvbUtleShrZXk6IEtleWNoYWluKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgc3dpdGNoIChrZXkudHlwZSkge1xuICAgIGNhc2UgJ2Jsc2RrZyc6XG4gICAgICByZXR1cm4ga2V5LmNvbW1vblB1YjtcbiAgICBjYXNlICd0c3MnOlxuICAgICAgcmV0dXJuIGtleS5jb21tb25LZXljaGFpbjtcbiAgICBjYXNlICdpbmRlcGVuZGVudCc6XG4gICAgICByZXR1cm4ga2V5LnB1YjtcbiAgfVxufVxuXG5mdW5jdGlvbiBnZW5lcmF0ZVVzZXJRckRhdGEodXNlcktleWNoYWluOiBLZXljaGFpbiwgdXNlck1hc3RlcktleT86IHN0cmluZyk6IFFyRGF0YUVudHJ5IHtcbiAgaWYgKHVzZXJLZXljaGFpbi5yZWR1Y2VkRW5jcnlwdGVkUHJ2KSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHRpdGxlOiAnQTogVXNlciBLZXknLFxuICAgICAgZGVzY3JpcHRpb246ICdUaGlzIGlzIHlvdXIgcHJpdmF0ZSBrZXksIGVuY3J5cHRlZCB3aXRoIHlvdXIgd2FsbGV0IHBhc3N3b3JkLicsXG4gICAgICBkYXRhOiB1c2VyS2V5Y2hhaW4ucmVkdWNlZEVuY3J5cHRlZFBydixcbiAgICB9O1xuICB9XG4gIGlmICh1c2VyS2V5Y2hhaW4uZW5jcnlwdGVkUHJ2KSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHRpdGxlOiAnQTogVXNlciBLZXknLFxuICAgICAgZGVzY3JpcHRpb246ICdUaGlzIGlzIHlvdXIgcHJpdmF0ZSBrZXksIGVuY3J5cHRlZCB3aXRoIHlvdXIgd2FsbGV0IHBhc3N3b3JkLicsXG4gICAgICBkYXRhOiB1c2VyS2V5Y2hhaW4uZW5jcnlwdGVkUHJ2LFxuICAgIH07XG4gIH1cblxuICBjb25zdCBwdWIgPSBnZXRQdWJGcm9tS2V5KHVzZXJLZXljaGFpbik7XG4gIGFzc2VydC5vayhwdWIpO1xuXG4gIHJldHVybiB7XG4gICAgdGl0bGU6ICdBOiBQcm92aWRlZCBVc2VyIEtleScsXG4gICAgZGVzY3JpcHRpb246ICdUaGlzIGlzIHRoZSBwdWJsaWMga2V5IHlvdSBwcm92aWRlZCBmb3IgeW91ciB3YWxsZXQuJyxcbiAgICBkYXRhOiBwdWIsXG4gICAgcHVibGljTWFzdGVyS2V5OiB1c2VyTWFzdGVyS2V5LFxuICB9O1xufVxuXG5mdW5jdGlvbiBnZW5lcmF0ZUJhY2t1cFFyRGF0YShcbiAgY29pbjogUmVhZG9ubHk8QmFzZUNvaW4+LFxuICBiYWNrdXBLZXljaGFpbjogS2V5Y2hhaW4sXG4gIHtcbiAgICBiYWNrdXBLZXlQcm92aWRlcixcbiAgICBiYWNrdXBNYXN0ZXJLZXksXG4gIH06IHtcbiAgICBiYWNrdXBLZXlQcm92aWRlcj86IHN0cmluZztcbiAgICBiYWNrdXBNYXN0ZXJLZXk/OiBzdHJpbmc7XG4gIH0gPSB7fVxuKTogUXJEYXRhRW50cnkge1xuICBjb25zdCB0aXRsZSA9ICdCOiBCYWNrdXAgS2V5JztcbiAgaWYgKGJhY2t1cEtleWNoYWluLnJlZHVjZWRFbmNyeXB0ZWRQcnYpIHtcbiAgICByZXR1cm4ge1xuICAgICAgdGl0bGUsXG4gICAgICBkZXNjcmlwdGlvbjogJ1RoaXMgaXMgeW91ciBiYWNrdXAgcHJpdmF0ZSBrZXksIGVuY3J5cHRlZCB3aXRoIHlvdXIgd2FsbGV0IHBhc3N3b3JkLicsXG4gICAgICBkYXRhOiBiYWNrdXBLZXljaGFpbi5yZWR1Y2VkRW5jcnlwdGVkUHJ2LFxuICAgIH07XG4gIH1cbiAgaWYgKGJhY2t1cEtleWNoYWluLmVuY3J5cHRlZFBydikge1xuICAgIHJldHVybiB7XG4gICAgICB0aXRsZSxcbiAgICAgIGRlc2NyaXB0aW9uOiAnVGhpcyBpcyB5b3VyIGJhY2t1cCBwcml2YXRlIGtleSwgZW5jcnlwdGVkIHdpdGggeW91ciB3YWxsZXQgcGFzc3dvcmQuJyxcbiAgICAgIGRhdGE6IGJhY2t1cEtleWNoYWluLmVuY3J5cHRlZFBydixcbiAgICB9O1xuICB9XG5cbiAgaWYgKGJhY2t1cEtleVByb3ZpZGVyID09PSAnQml0R28gVHJ1c3QnICYmIGJhY2t1cEtleWNoYWluLnR5cGUgPT09ICd0c3MnKSB7XG4gICAgY29uc3Qga2V5U2hhcmVzID0gYmFja3VwS2V5Y2hhaW4ua2V5U2hhcmVzPy5maWx0ZXIoKGtleVNoYXJlKSA9PiBrZXlTaGFyZS50byA9PT0gJ2JhY2t1cCcpO1xuICAgIGFzc2VydC5vayhrZXlTaGFyZXM/Lmxlbmd0aCA9PT0gMik7XG4gICAgcmV0dXJuIHtcbiAgICAgIHRpdGxlOiAnQjogQmFja3VwIEtleSBTaGFyZXMnLFxuICAgICAgZGVzY3JpcHRpb246XG4gICAgICAgIGBUaGVzZSBhcmUgdGhlIGtleSBzaGFyZXMgZm9yICR7YmFja3VwS2V5UHJvdmlkZXJ9LiBJZiBCaXRHbyBJbmMuIGdvZXMgb3V0IG9mIGJ1c2luZXNzLFxcclxcbmAgK1xuICAgICAgICBgY29udGFjdCAke2JhY2t1cEtleVByb3ZpZGVyfSBhbmQgdGhleSB3aWxsIGhlbHAgeW91IHJlY292ZXIgeW91ciBmdW5kcy5gLFxuICAgICAgZGF0YTogSlNPTi5zdHJpbmdpZnkoa2V5U2hhcmVzKSxcbiAgICB9O1xuICB9XG5cbiAgY29uc3QgcHViID0gZ2V0UHViRnJvbUtleShiYWNrdXBLZXljaGFpbik7XG4gIGFzc2VydC5vayhwdWIpO1xuXG4gIGlmIChiYWNrdXBLZXlQcm92aWRlcikge1xuICAgIHJldHVybiB7XG4gICAgICB0aXRsZTogJ0I6IEJhY2t1cCBLZXknLFxuICAgICAgZGVzY3JpcHRpb246XG4gICAgICAgIGBUaGlzIGlzIHRoZSBwdWJsaWMga2V5IGhlbGQgYXQgJHtiYWNrdXBLZXlQcm92aWRlcn0sIGFuICR7Y29pbi5uYW1lfSByZWNvdmVyeSBzZXJ2aWNlLiBgICtcbiAgICAgICAgYElmIHlvdSBsb3NlXFxyXFxueW91ciBrZXksICR7YmFja3VwS2V5UHJvdmlkZXJ9IHdpbGwgYmUgYWJsZSB0byBzaWduIHRyYW5zYWN0aW9ucyB0byByZWNvdmVyIGZ1bmRzLmAsXG4gICAgICBkYXRhOiBwdWIsXG4gICAgfTtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgdGl0bGU6ICdCOiBQcm92aWRlZCBCYWNrdXAgS2V5JyxcbiAgICBkZXNjcmlwdGlvbjogJ1RoaXMgaXMgdGhlIHB1YmxpYyBrZXkgeW91IHByb3ZpZGVkIGZvciB5b3VyIHdhbGxldC4nLFxuICAgIGRhdGE6IHB1YixcbiAgICBwdWJsaWNNYXN0ZXJLZXk6IGJhY2t1cE1hc3RlcktleSxcbiAgfTtcbn1cblxuZnVuY3Rpb24gZ2VuZXJhdGVCaXRHb1FyRGF0YShiaXRnb0tleWNoYWluOiBLZXljaGFpbik6IFFyRGF0YUVudHJ5IHtcbiAgY29uc3QgYml0Z29EYXRhID0gZ2V0UHViRnJvbUtleShiaXRnb0tleWNoYWluKTtcbiAgYXNzZXJ0Lm9rKGJpdGdvRGF0YSk7XG5cbiAgcmV0dXJuIHtcbiAgICB0aXRsZTogJ0M6IEJpdEdvIEtleScsXG4gICAgZGVzY3JpcHRpb246ICdUaGlzIGlzIHRoZSBwdWJsaWMgcGFydCBvZiB0aGUga2V5IGhlbGQgYnkgQml0R28uJyxcbiAgICBkYXRhOiBiaXRnb0RhdGEsXG4gIH07XG59XG5cbmZ1bmN0aW9uIGdlbmVyYXRlVXNlck1hc3RlclB1YmxpY0tleVFSRGF0YShwdWJsaWNLZXk6IHN0cmluZyk6IE1hc3RlclB1YmxpY0tleVFyRGF0YUVudHJ5IHtcbiAgcmV0dXJuIHtcbiAgICB0aXRsZTogJ0U6IE1hc3RlciBVc2VyIFB1YmxpYyBLZXknLFxuICAgIGRlc2NyaXB0aW9uOlxuICAgICAgJ1RoaXMgaXMgdGhlIHB1YmxpYyBrZXkgdXNlZCB0byBkZXJpdmUgdGhlIHVzZXIga2V5IGZvciB0aGUgd2FsbGV0LiBUaGlzIGlzIG5vdCBzdG9yZWQgYnkgQml0R28sIGFuZCBtYXkgYmUgcmVxdWlyZWQgZm9yIHVzZSBpbiByZWNvdmVyeSBzY2VuYXJpb3MuJyxcbiAgICBkYXRhOiBwdWJsaWNLZXksXG4gIH07XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGdlbmVyYXRlUGFzc2NvZGVRckRhdGEoXG4gIHBhc3NwaHJhc2U6IHN0cmluZyxcbiAgcGFzc2NvZGVFbmNyeXB0aW9uQ29kZTogc3RyaW5nLFxuICBlbmNyeXB0aW9uVmVyc2lvbj86IDEgfCAyXG4pOiBQcm9taXNlPFFyRGF0YUVudHJ5PiB7XG4gIGNvbnN0IGVuY3J5cHRlZFdhbGxldFBhc3Njb2RlID0gYXdhaXQgZW5jcnlwdChwYXNzY29kZUVuY3J5cHRpb25Db2RlLCBwYXNzcGhyYXNlLCB7IGVuY3J5cHRpb25WZXJzaW9uIH0pO1xuICByZXR1cm4ge1xuICAgIHRpdGxlOiAnRDogRW5jcnlwdGVkIFdhbGxldCBQYXNzd29yZCcsXG4gICAgZGVzY3JpcHRpb246ICdUaGlzIGlzIHRoZSB3YWxsZXQgcGFzc3dvcmQsIGVuY3J5cHRlZCBjbGllbnQtc2lkZSB3aXRoIGEga2V5IGhlbGQgYnkgQml0R28uJyxcbiAgICBkYXRhOiBlbmNyeXB0ZWRXYWxsZXRQYXNzY29kZSxcbiAgfTtcbn1cblxuZnVuY3Rpb24gZ2VuZXJhdGVCYWNrdXBNYXN0ZXJQdWJsaWNLZXlRUkRhdGEocHVibGljS2V5OiBzdHJpbmcpOiBNYXN0ZXJQdWJsaWNLZXlRckRhdGFFbnRyeSB7XG4gIHJldHVybiB7XG4gICAgdGl0bGU6ICdGOiBNYXN0ZXIgQmFja3VwIFB1YmxpYyBLZXknLFxuICAgIGRlc2NyaXB0aW9uOlxuICAgICAgJ1RoaXMgaXMgdGhlIHB1YmxpYyBrZXkgdXNlZCB0byBkZXJpdmUgdGhlIGJhY2t1cCBrZXkgZm9yIHRoZSB3YWxsZXQuIFRoaXMgaXMgbm90IHN0b3JlZCBieSBCaXRHbywgYW5kIG1heSBiZSByZXF1aXJlZCBmb3IgdXNlIGluIHJlY292ZXJ5IHNjZW5hcmlvcy4nLFxuICAgIGRhdGE6IHB1YmxpY0tleSxcbiAgfTtcbn1cblxuZnVuY3Rpb24gYnVpbGRXYWxsZXRRckRhdGEoe1xuICBiYWNrdXBLZXljaGFpbixcbiAgYmFja3VwS2V5UHJvdmlkZXIsXG4gIGJhY2t1cE1hc3RlcktleSxcbiAgYml0Z29LZXljaGFpbixcbiAgY29pbixcbiAgdXNlcktleWNoYWluLFxuICB1c2VyTWFzdGVyS2V5LFxuICB1c2VyTWFzdGVyUHVibGljS2V5LFxuICBiYWNrdXBNYXN0ZXJQdWJsaWNLZXksXG59OiBHZW5lcmF0ZVFyRGF0YVBhcmFtcyk6IFFyRGF0YSB7XG4gIHJldHVybiB7XG4gICAgdXNlcjogZ2VuZXJhdGVVc2VyUXJEYXRhKHVzZXJLZXljaGFpbiwgdXNlck1hc3RlcktleSksXG4gICAgdXNlck1hc3RlclB1YmxpY0tleTogdXNlck1hc3RlclB1YmxpY0tleSA/IGdlbmVyYXRlVXNlck1hc3RlclB1YmxpY0tleVFSRGF0YSh1c2VyTWFzdGVyUHVibGljS2V5KSA6IHVuZGVmaW5lZCxcbiAgICBiYWNrdXA6IGdlbmVyYXRlQmFja3VwUXJEYXRhKGNvaW4sIGJhY2t1cEtleWNoYWluLCB7XG4gICAgICBiYWNrdXBLZXlQcm92aWRlcixcbiAgICAgIGJhY2t1cE1hc3RlcktleSxcbiAgICB9KSxcbiAgICBiYWNrdXBNYXN0ZXJQdWJsaWNLZXk6IGJhY2t1cE1hc3RlclB1YmxpY0tleVxuICAgICAgPyBnZW5lcmF0ZUJhY2t1cE1hc3RlclB1YmxpY0tleVFSRGF0YShiYWNrdXBNYXN0ZXJQdWJsaWNLZXkpXG4gICAgICA6IHVuZGVmaW5lZCxcbiAgICBiaXRnbzogZ2VuZXJhdGVCaXRHb1FyRGF0YShiaXRnb0tleWNoYWluKSxcbiAgfTtcbn1cblxuZnVuY3Rpb24gYnVpbGRMaWdodG5pbmdRckRhdGEoeyB1c2VyQXV0aEtleWNoYWluIH06IEdlbmVyYXRlTGlnaHRuaW5nUXJEYXRhUGFyYW1zKTogUXJEYXRhIHtcbiAgYXNzZXJ0Lm9rKHVzZXJBdXRoS2V5Y2hhaW4uZW5jcnlwdGVkUHJ2LCAndXNlckF1dGhLZXljaGFpbiBtdXN0IGhhdmUgYW4gZW5jcnlwdGVkUHJ2Jyk7XG5cbiAgcmV0dXJuIHtcbiAgICB1c2VyOiB7XG4gICAgICB0aXRsZTogJ0E6IFVzZXIgQXV0aCBLZXknLFxuICAgICAgZGVzY3JpcHRpb246XG4gICAgICAgICdUaGlzIGlzIHlvdXIgdXNlciBhdXRoZW50aWNhdGlvbiBwcml2YXRlIGtleSwgZW5jcnlwdGVkIHdpdGggeW91ciB3YWxsZXQgcGFzc3dvcmQuXFxyXFxuSXQgaXMgdXNlZCB0byBhdXRoZW50aWNhdGUgcGF5bWVudCBhbmQgd2FsbGV0IG9wZXJhdGlvbnMuJyxcbiAgICAgIGRhdGE6IHVzZXJBdXRoS2V5Y2hhaW4uZW5jcnlwdGVkUHJ2LFxuICAgIH0sXG4gIH07XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBnZW5lcmF0ZVFyRGF0YShwYXJhbXM6IEdlbmVyYXRlUXJEYXRhUGFyYW1zKTogUHJvbWlzZTxRckRhdGE+IHtcbiAgY29uc3QgcXJEYXRhID0gYnVpbGRXYWxsZXRRckRhdGEocGFyYW1zKTtcblxuICBpZiAocGFyYW1zLnBhc3NwaHJhc2UgJiYgcGFyYW1zLnBhc3Njb2RlRW5jcnlwdGlvbkNvZGUpIHtcbiAgICBxckRhdGEucGFzc2NvZGUgPSBhd2FpdCBnZW5lcmF0ZVBhc3Njb2RlUXJEYXRhKFxuICAgICAgcGFyYW1zLnBhc3NwaHJhc2UsXG4gICAgICBwYXJhbXMucGFzc2NvZGVFbmNyeXB0aW9uQ29kZSxcbiAgICAgIHBhcmFtcy5lbmNyeXB0aW9uVmVyc2lvblxuICAgICk7XG4gIH1cblxuICByZXR1cm4gcXJEYXRhO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZ2VuZXJhdGVMaWdodG5pbmdRckRhdGEocGFyYW1zOiBHZW5lcmF0ZUxpZ2h0bmluZ1FyRGF0YVBhcmFtcyk6IFByb21pc2U8UXJEYXRhPiB7XG4gIGNvbnN0IHFyRGF0YSA9IGJ1aWxkTGlnaHRuaW5nUXJEYXRhKHBhcmFtcyk7XG5cbiAgaWYgKHBhcmFtcy5wYXNzcGhyYXNlICYmIHBhcmFtcy5wYXNzY29kZUVuY3J5cHRpb25Db2RlKSB7XG4gICAgcXJEYXRhLnBhc3Njb2RlID0gYXdhaXQgZ2VuZXJhdGVQYXNzY29kZVFyRGF0YShcbiAgICAgIHBhcmFtcy5wYXNzcGhyYXNlLFxuICAgICAgcGFyYW1zLnBhc3Njb2RlRW5jcnlwdGlvbkNvZGUsXG4gICAgICBwYXJhbXMuZW5jcnlwdGlvblZlcnNpb25cbiAgICApO1xuICB9XG5cbiAgcmV0dXJuIHFyRGF0YTtcbn1cblxuZnVuY3Rpb24gc2VsZWN0Um9vdFByaXZhdGVLZXkoa2V5Y2hhaW46IEtleWNoYWluLCBzbG90OiBWYXVsdFJvb3RLZXlUeXBlLCByb2xlOiAndXNlcicgfCAnYmFja3VwJyk6IHN0cmluZyB7XG4gIC8vIFByZWZlciB0aGUgY29tcGFjdCBNUEN2MiByZWR1Y2VkIHNoYXJlOyBmYWxsIGJhY2sgdG8gZW5jcnlwdGVkUHJ2IChlLmcuIG11bHRpc2lnIHJvb3RzKS5cbiAgY29uc3QgZGF0YSA9IGtleWNoYWluLnJlZHVjZWRFbmNyeXB0ZWRQcnYgPz8ga2V5Y2hhaW4uZW5jcnlwdGVkUHJ2O1xuICBhc3NlcnQub2soZGF0YSwgYFZhdWx0ICR7cm9sZX0gcm9vdCAke3Nsb3R9IGlzIG1pc3NpbmcgZW5jcnlwdGVkIHByaXZhdGUga2V5IG1hdGVyaWFsYCk7XG4gIHJldHVybiBkYXRhO1xufVxuXG5mdW5jdGlvbiBzZWxlY3RSb290UHVibGljS2V5KGtleWNoYWluOiBLZXljaGFpbiwgc2xvdDogVmF1bHRSb290S2V5VHlwZSk6IHN0cmluZyB7XG4gIGNvbnN0IHB1YiA9IGdldFB1YkZyb21LZXkoa2V5Y2hhaW4pO1xuICBhc3NlcnQub2socHViLCBgVmF1bHQgQml0R28gcm9vdCAke3Nsb3R9IGlzIG1pc3NpbmcgYSBwdWJsaWMga2V5YCk7XG4gIHJldHVybiBwdWI7XG59XG5cbi8qKlxuICogU2VyaWFsaXplcyBvbmUgYm94J3MgZm91ciByb290cyBpbnRvIGEgc2luZ2xlIEpTT04gb2JqZWN0IGtleWVkIGJ5IHJvb3RLZXlUeXBlLCBlLmcuXG4gKiBge1wic2VjcDI1NmsxTXVsdGlzaWdcIjpcIjxlbmNQcnY+XCIsXCJlY2RzYU1wY1wiOlwiPHJlZHVjZWRFbmNQcnY+XCIsLi4ufWAuIFRoaXMga2VlcHMgdGhlIHZhdWx0XG4gKiBrZXljYXJkIG9uIHRoZSBleGlzdGluZyA0LWJveCBsYXlvdXQg4oCUIG9uZSBib3ggKD0gb25lIFFSL2RhdGEgYmxvY2spIHBlciByb2xlIOKAlCB3aXRoIHRoZVxuICogZm91ciByb290cyBwYWNrZWQgaW50byBlYWNoIGJveCdzIGRhdGEuIGBzcGxpdEtleXNgIGZyYWdtZW50cyB0aGUgYm94IGlmIGl0IGV4Y2VlZHMgdGhlIFFSXG4gKiB0aHJlc2hvbGQsIGV4YWN0bHkgYXMgZm9yIGEgbm9ybWFsIHdhbGxldCBrZXljYXJkLiBSZXZlcnNlZCBieSB7QGxpbmsgcGFyc2VWYXVsdEtleWNhcmRCb3h9LlxuICovXG5mdW5jdGlvbiBidWlsZFZhdWx0Qm94RGF0YShcbiAgcm9vdHM6IFJlY29yZDxWYXVsdFJvb3RLZXlUeXBlLCBLZXljaGFpbnNUcmlwbGV0PixcbiAgc2VsZWN0OiAocm9vdDogS2V5Y2hhaW5zVHJpcGxldCwgc2xvdDogVmF1bHRSb290S2V5VHlwZSkgPT4gc3RyaW5nXG4pOiBzdHJpbmcge1xuICBjb25zdCBib3g6IFZhdWx0S2V5Y2FyZFJvb3RzID0ge30gYXMgVmF1bHRLZXljYXJkUm9vdHM7XG4gIGZvciAoY29uc3Qgc2xvdCBvZiBWQVVMVF9ST09UX09SREVSKSB7XG4gICAgY29uc3Qgcm9vdCA9IHJvb3RzW3Nsb3RdO1xuICAgIGFzc2VydC5vayhyb290LCBgVmF1bHQgaXMgbWlzc2luZyB0aGUgJHtzbG90fSByb290YCk7XG4gICAgYm94W3Nsb3RdID0gc2VsZWN0KHJvb3QsIHNsb3QpO1xuICB9XG4gIHJldHVybiBKU09OLnN0cmluZ2lmeShib3gpO1xufVxuXG4vKipcbiAqIEJ1aWxkcyB2YXVsdCBrZXljYXJkIFFSIGRhdGEgaW4gdGhlIGV4aXN0aW5nIHdhbGxldCB7QGxpbmsgUXJEYXRhfSBzaGFwZTogYm94ZXMgQSAodXNlciksXG4gKiBCIChiYWNrdXApLCBDIChCaXRHbyksIEQgKHBhc3Njb2RlKS4gRWFjaCBvZiBBL0IvQyBjYXJyaWVzIGEgSlNPTiBvYmplY3Qgb2YgdGhlIGZvdXIgcm9vdHMsXG4gKiBzbyB0aGUgdmF1bHQgcmVuZGVycyBhbmQgcGFyc2VzIHRocm91Z2ggdGhlIHNhbWUge0BsaW5rIGRyYXdLZXljYXJkfSBwYXRoIGFzIGEgd2FsbGV0LlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZ2VuZXJhdGVWYXVsdFFyRGF0YShwYXJhbXM6IEdlbmVyYXRlVmF1bHRRckRhdGFQYXJhbXMpOiBQcm9taXNlPFFyRGF0YT4ge1xuICBjb25zdCB7IHJvb3RzIH0gPSBwYXJhbXM7XG4gIGNvbnN0IHFyRGF0YTogUXJEYXRhID0ge1xuICAgIHVzZXI6IHtcbiAgICAgIHRpdGxlOiAnQTogVXNlciBLZXknLFxuICAgICAgZGVzY3JpcHRpb246ICdZb3VyIDQgcm9vdCBwcml2YXRlIGtleXMsIGVuY3J5cHRlZCB3aXRoIHlvdXIgd2FsbGV0IHBhc3N3b3JkLicsXG4gICAgICBkYXRhOiBidWlsZFZhdWx0Qm94RGF0YShyb290cywgKHJvb3QsIHNsb3QpID0+IHNlbGVjdFJvb3RQcml2YXRlS2V5KHJvb3QudXNlcktleWNoYWluLCBzbG90LCAndXNlcicpKSxcbiAgICB9LFxuICAgIGJhY2t1cDoge1xuICAgICAgdGl0bGU6ICdCOiBCYWNrdXAgS2V5JyxcbiAgICAgIGRlc2NyaXB0aW9uOiAnWW91ciA0IHJvb3QgYmFja3VwIGtleXMsIGVuY3J5cHRlZCB3aXRoIHlvdXIgd2FsbGV0IHBhc3N3b3JkLicsXG4gICAgICBkYXRhOiBidWlsZFZhdWx0Qm94RGF0YShyb290cywgKHJvb3QsIHNsb3QpID0+IHNlbGVjdFJvb3RQcml2YXRlS2V5KHJvb3QuYmFja3VwS2V5Y2hhaW4sIHNsb3QsICdiYWNrdXAnKSksXG4gICAgfSxcbiAgICBiaXRnbzoge1xuICAgICAgdGl0bGU6ICdDOiBCaXRHbyBLZXknLFxuICAgICAgZGVzY3JpcHRpb246ICdUaGUgcHVibGljIHBhcnRzIG9mIHRoZSA0IHJvb3Qga2V5cyBoZWxkIGJ5IEJpdEdvLicsXG4gICAgICBkYXRhOiBidWlsZFZhdWx0Qm94RGF0YShyb290cywgKHJvb3QsIHNsb3QpID0+IHNlbGVjdFJvb3RQdWJsaWNLZXkocm9vdC5iaXRnb0tleWNoYWluLCBzbG90KSksXG4gICAgfSxcbiAgfTtcblxuICBpZiAocGFyYW1zLnBhc3NwaHJhc2UgJiYgcGFyYW1zLnBhc3Njb2RlRW5jcnlwdGlvbkNvZGUpIHtcbiAgICBxckRhdGEucGFzc2NvZGUgPSBhd2FpdCBnZW5lcmF0ZVBhc3Njb2RlUXJEYXRhKFxuICAgICAgcGFyYW1zLnBhc3NwaHJhc2UsXG4gICAgICBwYXJhbXMucGFzc2NvZGVFbmNyeXB0aW9uQ29kZSxcbiAgICAgIHBhcmFtcy5lbmNyeXB0aW9uVmVyc2lvblxuICAgICk7XG4gIH1cblxuICByZXR1cm4gcXJEYXRhO1xufVxuIl19
|
|
245
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2VuZXJhdGVRckRhdGEuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvZ2VuZXJhdGVRckRhdGEudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFxTUEsd0NBWUM7QUFFRCwwREFZQztBQXdDRCxnREE4QkM7QUFuU0QsaURBQThDO0FBQzlDLCtDQUFpQztBQUNqQyxtQ0FXaUI7QUFFakIsU0FBUyxhQUFhLENBQUMsR0FBYTtJQUNsQyxRQUFRLEdBQUcsQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUNqQixLQUFLLFFBQVE7WUFDWCxPQUFPLEdBQUcsQ0FBQyxTQUFTLENBQUM7UUFDdkIsS0FBSyxLQUFLO1lBQ1IsT0FBTyxHQUFHLENBQUMsY0FBYyxDQUFDO1FBQzVCLEtBQUssYUFBYTtZQUNoQixPQUFPLEdBQUcsQ0FBQyxHQUFHLENBQUM7SUFDbkIsQ0FBQztBQUNILENBQUM7QUFFRCxTQUFTLGtCQUFrQixDQUFDLFlBQXNCLEVBQUUsYUFBc0I7SUFDeEUsSUFBSSxZQUFZLENBQUMsbUJBQW1CLEVBQUUsQ0FBQztRQUNyQyxPQUFPO1lBQ0wsS0FBSyxFQUFFLGFBQWE7WUFDcEIsV0FBVyxFQUFFLGdFQUFnRTtZQUM3RSxJQUFJLEVBQUUsWUFBWSxDQUFDLG1CQUFtQjtTQUN2QyxDQUFDO0lBQ0osQ0FBQztJQUNELElBQUksWUFBWSxDQUFDLFlBQVksRUFBRSxDQUFDO1FBQzlCLE9BQU87WUFDTCxLQUFLLEVBQUUsYUFBYTtZQUNwQixXQUFXLEVBQUUsZ0VBQWdFO1lBQzdFLElBQUksRUFBRSxZQUFZLENBQUMsWUFBWTtTQUNoQyxDQUFDO0lBQ0osQ0FBQztJQUVELE1BQU0sR0FBRyxHQUFHLGFBQWEsQ0FBQyxZQUFZLENBQUMsQ0FBQztJQUN4QyxNQUFNLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBRWYsT0FBTztRQUNMLEtBQUssRUFBRSxzQkFBc0I7UUFDN0IsV0FBVyxFQUFFLHNEQUFzRDtRQUNuRSxJQUFJLEVBQUUsR0FBRztRQUNULGVBQWUsRUFBRSxhQUFhO0tBQy9CLENBQUM7QUFDSixDQUFDO0FBRUQsU0FBUyxvQkFBb0IsQ0FDM0IsSUFBd0IsRUFDeEIsY0FBd0IsRUFDeEIsRUFDRSxpQkFBaUIsRUFDakIsZUFBZSxNQUliLEVBQUU7SUFFTixNQUFNLEtBQUssR0FBRyxlQUFlLENBQUM7SUFDOUIsSUFBSSxjQUFjLENBQUMsbUJBQW1CLEVBQUUsQ0FBQztRQUN2QyxPQUFPO1lBQ0wsS0FBSztZQUNMLFdBQVcsRUFBRSx1RUFBdUU7WUFDcEYsSUFBSSxFQUFFLGNBQWMsQ0FBQyxtQkFBbUI7U0FDekMsQ0FBQztJQUNKLENBQUM7SUFDRCxJQUFJLGNBQWMsQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUNoQyxPQUFPO1lBQ0wsS0FBSztZQUNMLFdBQVcsRUFBRSx1RUFBdUU7WUFDcEYsSUFBSSxFQUFFLGNBQWMsQ0FBQyxZQUFZO1NBQ2xDLENBQUM7SUFDSixDQUFDO0lBRUQsSUFBSSxpQkFBaUIsS0FBSyxhQUFhLElBQUksY0FBYyxDQUFDLElBQUksS0FBSyxLQUFLLEVBQUUsQ0FBQztRQUN6RSxNQUFNLFNBQVMsR0FBRyxjQUFjLENBQUMsU0FBUyxFQUFFLE1BQU0sQ0FBQyxDQUFDLFFBQVEsRUFBRSxFQUFFLENBQUMsUUFBUSxDQUFDLEVBQUUsS0FBSyxRQUFRLENBQUMsQ0FBQztRQUMzRixNQUFNLENBQUMsRUFBRSxDQUFDLFNBQVMsRUFBRSxNQUFNLEtBQUssQ0FBQyxDQUFDLENBQUM7UUFDbkMsT0FBTztZQUNMLEtBQUssRUFBRSxzQkFBc0I7WUFDN0IsV0FBVyxFQUNULGdDQUFnQyxpQkFBaUIsMkNBQTJDO2dCQUM1RixXQUFXLGlCQUFpQiw2Q0FBNkM7WUFDM0UsSUFBSSxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsU0FBUyxDQUFDO1NBQ2hDLENBQUM7SUFDSixDQUFDO0lBRUQsTUFBTSxHQUFHLEdBQUcsYUFBYSxDQUFDLGNBQWMsQ0FBQyxDQUFDO0lBQzFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUM7SUFFZixJQUFJLGlCQUFpQixFQUFFLENBQUM7UUFDdEIsT0FBTztZQUNMLEtBQUssRUFBRSxlQUFlO1lBQ3RCLFdBQVcsRUFDVCxrQ0FBa0MsaUJBQWlCLFFBQVEsSUFBSSxDQUFDLElBQUkscUJBQXFCO2dCQUN6Riw0QkFBNEIsaUJBQWlCLHNEQUFzRDtZQUNyRyxJQUFJLEVBQUUsR0FBRztTQUNWLENBQUM7SUFDSixDQUFDO0lBRUQsT0FBTztRQUNMLEtBQUssRUFBRSx3QkFBd0I7UUFDL0IsV0FBVyxFQUFFLHNEQUFzRDtRQUNuRSxJQUFJLEVBQUUsR0FBRztRQUNULGVBQWUsRUFBRSxlQUFlO0tBQ2pDLENBQUM7QUFDSixDQUFDO0FBRUQsU0FBUyxtQkFBbUIsQ0FBQyxhQUF1QjtJQUNsRCxNQUFNLFNBQVMsR0FBRyxhQUFhLENBQUMsYUFBYSxDQUFDLENBQUM7SUFDL0MsTUFBTSxDQUFDLEVBQUUsQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUVyQixPQUFPO1FBQ0wsS0FBSyxFQUFFLGNBQWM7UUFDckIsV0FBVyxFQUFFLG1EQUFtRDtRQUNoRSxJQUFJLEVBQUUsU0FBUztLQUNoQixDQUFDO0FBQ0osQ0FBQztBQUVELFNBQVMsaUNBQWlDLENBQUMsU0FBaUI7SUFDMUQsT0FBTztRQUNMLEtBQUssRUFBRSwyQkFBMkI7UUFDbEMsV0FBVyxFQUNULG9KQUFvSjtRQUN0SixJQUFJLEVBQUUsU0FBUztLQUNoQixDQUFDO0FBQ0osQ0FBQztBQUVELEtBQUssVUFBVSxzQkFBc0IsQ0FDbkMsVUFBa0IsRUFDbEIsc0JBQThCLEVBQzlCLGlCQUF5QixFQUN6QixhQUE0QixRQUFRO0lBRXBDLE1BQU0saUJBQWlCLEdBQUcsTUFBTSxJQUFBLGlCQUFPLEVBQUMsc0JBQXNCLEVBQUUsVUFBVSxFQUFFLEVBQUUsaUJBQWlCLEVBQUUsQ0FBQyxDQUFDO0lBQ25HLE1BQU0sU0FBUyxHQUFHLFVBQVUsS0FBSyxNQUFNLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDO0lBQzVELE9BQU87UUFDTCxLQUFLLEVBQUUsZ0JBQWdCLFNBQVMsV0FBVztRQUMzQyxXQUFXLEVBQUUsZUFBZSxVQUFVLDREQUE0RDtRQUNsRyxJQUFJLEVBQUUsaUJBQWlCO0tBQ3hCLENBQUM7QUFDSixDQUFDO0FBRUQsU0FBUyxtQ0FBbUMsQ0FBQyxTQUFpQjtJQUM1RCxPQUFPO1FBQ0wsS0FBSyxFQUFFLDZCQUE2QjtRQUNwQyxXQUFXLEVBQ1Qsc0pBQXNKO1FBQ3hKLElBQUksRUFBRSxTQUFTO0tBQ2hCLENBQUM7QUFDSixDQUFDO0FBRUQsU0FBUyxpQkFBaUIsQ0FBQyxFQUN6QixjQUFjLEVBQ2QsaUJBQWlCLEVBQ2pCLGVBQWUsRUFDZixhQUFhLEVBQ2IsSUFBSSxFQUNKLFlBQVksRUFDWixhQUFhLEVBQ2IsbUJBQW1CLEVBQ25CLHFCQUFxQixHQUNBO0lBQ3JCLE9BQU87UUFDTCxJQUFJLEVBQUUsa0JBQWtCLENBQUMsWUFBWSxFQUFFLGFBQWEsQ0FBQztRQUNyRCxtQkFBbUIsRUFBRSxtQkFBbUIsQ0FBQyxDQUFDLENBQUMsaUNBQWlDLENBQUMsbUJBQW1CLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUztRQUM3RyxNQUFNLEVBQUUsb0JBQW9CLENBQUMsSUFBSSxFQUFFLGNBQWMsRUFBRTtZQUNqRCxpQkFBaUI7WUFDakIsZUFBZTtTQUNoQixDQUFDO1FBQ0YscUJBQXFCLEVBQUUscUJBQXFCO1lBQzFDLENBQUMsQ0FBQyxtQ0FBbUMsQ0FBQyxxQkFBcUIsQ0FBQztZQUM1RCxDQUFDLENBQUMsU0FBUztRQUNiLEtBQUssRUFBRSxtQkFBbUIsQ0FBQyxhQUFhLENBQUM7S0FDMUMsQ0FBQztBQUNKLENBQUM7QUFFRCxTQUFTLG9CQUFvQixDQUFDLEVBQUUsZ0JBQWdCLEVBQWlDO0lBQy9FLE1BQU0sQ0FBQyxFQUFFLENBQUMsZ0JBQWdCLENBQUMsWUFBWSxFQUFFLDRDQUE0QyxDQUFDLENBQUM7SUFFdkYsT0FBTztRQUNMLElBQUksRUFBRTtZQUNKLEtBQUssRUFBRSxrQkFBa0I7WUFDekIsV0FBVyxFQUNULGlKQUFpSjtZQUNuSixJQUFJLEVBQUUsZ0JBQWdCLENBQUMsWUFBWTtTQUNwQztLQUNGLENBQUM7QUFDSixDQUFDO0FBRU0sS0FBSyxVQUFVLGNBQWMsQ0FBQyxNQUE0QjtJQUMvRCxNQUFNLE1BQU0sR0FBRyxpQkFBaUIsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUV6QyxJQUFJLE1BQU0sQ0FBQyxVQUFVLElBQUksTUFBTSxDQUFDLHNCQUFzQixFQUFFLENBQUM7UUFDdkQsTUFBTSxDQUFDLFFBQVEsR0FBRyxNQUFNLHNCQUFzQixDQUM1QyxNQUFNLENBQUMsVUFBVSxFQUNqQixNQUFNLENBQUMsc0JBQXNCLEVBQzdCLE1BQU0sQ0FBQyxpQkFBaUIsQ0FDekIsQ0FBQztJQUNKLENBQUM7SUFFRCxPQUFPLE1BQU0sQ0FBQztBQUNoQixDQUFDO0FBRU0sS0FBSyxVQUFVLHVCQUF1QixDQUFDLE1BQXFDO0lBQ2pGLE1BQU0sTUFBTSxHQUFHLG9CQUFvQixDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBRTVDLElBQUksTUFBTSxDQUFDLFVBQVUsSUFBSSxNQUFNLENBQUMsc0JBQXNCLEVBQUUsQ0FBQztRQUN2RCxNQUFNLENBQUMsUUFBUSxHQUFHLE1BQU0sc0JBQXNCLENBQzVDLE1BQU0sQ0FBQyxVQUFVLEVBQ2pCLE1BQU0sQ0FBQyxzQkFBc0IsRUFDN0IsTUFBTSxDQUFDLGlCQUFpQixDQUN6QixDQUFDO0lBQ0osQ0FBQztJQUVELE9BQU8sTUFBTSxDQUFDO0FBQ2hCLENBQUM7QUFFRCxTQUFTLG9CQUFvQixDQUFDLFFBQWtCLEVBQUUsSUFBcUIsRUFBRSxJQUF1QjtJQUM5RiwyRkFBMkY7SUFDM0YsTUFBTSxJQUFJLEdBQUcsUUFBUSxDQUFDLG1CQUFtQixJQUFJLFFBQVEsQ0FBQyxZQUFZLENBQUM7SUFDbkUsTUFBTSxDQUFDLEVBQUUsQ0FBQyxJQUFJLEVBQUUsUUFBUSxJQUFJLFNBQVMsSUFBSSw0Q0FBNEMsQ0FBQyxDQUFDO0lBQ3ZGLE9BQU8sSUFBSSxDQUFDO0FBQ2QsQ0FBQztBQUVELFNBQVMsbUJBQW1CLENBQUMsUUFBa0IsRUFBRSxJQUFxQjtJQUNwRSxNQUFNLEdBQUcsR0FBRyxhQUFhLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDcEMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsbUJBQW1CLElBQUksMEJBQTBCLENBQUMsQ0FBQztJQUNsRSxPQUFPLEdBQUcsQ0FBQztBQUNiLENBQUM7QUFFRDs7Ozs7O0dBTUc7QUFDSCxTQUFTLGdCQUFnQixDQUN2QixLQUFnRCxFQUNoRCxNQUFpRTtJQUVqRSxNQUFNLEdBQUcsR0FBcUIsRUFBc0IsQ0FBQztJQUNyRCxLQUFLLE1BQU0sSUFBSSxJQUFJLHVCQUFlLEVBQUUsQ0FBQztRQUNuQyxNQUFNLElBQUksR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDekIsTUFBTSxDQUFDLEVBQUUsQ0FBQyxJQUFJLEVBQUUsdUJBQXVCLElBQUksT0FBTyxDQUFDLENBQUM7UUFDcEQsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLE1BQU0sQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDakMsQ0FBQztJQUNELE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUM3QixDQUFDO0FBRUQ7Ozs7R0FJRztBQUNJLEtBQUssVUFBVSxrQkFBa0IsQ0FBQyxNQUFnQztJQUN2RSxNQUFNLEVBQUUsS0FBSyxFQUFFLEdBQUcsTUFBTSxDQUFDO0lBQ3pCLE1BQU0sTUFBTSxHQUFXO1FBQ3JCLElBQUksRUFBRTtZQUNKLEtBQUssRUFBRSxhQUFhO1lBQ3BCLFdBQVcsRUFBRSw4REFBOEQ7WUFDM0UsSUFBSSxFQUFFLGdCQUFnQixDQUFDLEtBQUssRUFBRSxDQUFDLElBQUksRUFBRSxJQUFJLEVBQUUsRUFBRSxDQUFDLG9CQUFvQixDQUFDLElBQUksQ0FBQyxZQUFZLEVBQUUsSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFDO1NBQ3JHO1FBQ0QsTUFBTSxFQUFFO1lBQ04sS0FBSyxFQUFFLGVBQWU7WUFDdEIsV0FBVyxFQUFFLDZEQUE2RDtZQUMxRSxJQUFJLEVBQUUsZ0JBQWdCLENBQUMsS0FBSyxFQUFFLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxFQUFFLENBQUMsb0JBQW9CLENBQUMsSUFBSSxDQUFDLGNBQWMsRUFBRSxJQUFJLEVBQUUsUUFBUSxDQUFDLENBQUM7U0FDekc7UUFDRCxLQUFLLEVBQUU7WUFDTCxLQUFLLEVBQUUsY0FBYztZQUNyQixXQUFXLEVBQUUsb0RBQW9EO1lBQ2pFLElBQUksRUFBRSxnQkFBZ0IsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLEVBQUUsQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsYUFBYSxFQUFFLElBQUksQ0FBQyxDQUFDO1NBQzdGO0tBQ0YsQ0FBQztJQUVGLElBQUksTUFBTSxDQUFDLFVBQVUsSUFBSSxNQUFNLENBQUMsc0JBQXNCLEVBQUUsQ0FBQztRQUN2RCxNQUFNLENBQUMsUUFBUSxHQUFHLE1BQU0sc0JBQXNCLENBQzVDLE1BQU0sQ0FBQyxVQUFVLEVBQ2pCLE1BQU0sQ0FBQyxzQkFBc0IsRUFDN0IsTUFBTSxDQUFDLGlCQUFpQixFQUN4QixNQUFNLENBQ1AsQ0FBQztJQUNKLENBQUM7SUFFRCxPQUFPLE1BQU0sQ0FBQztBQUNoQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQmFzZUNvaW4gfSBmcm9tICdAYml0Z28tYmV0YS9zdGF0aWNzJztcbmltcG9ydCB7IEtleWNoYWluLCBLZXljaGFpbnNUcmlwbGV0IH0gZnJvbSAnQGJpdGdvLWJldGEvc2RrLWNvcmUnO1xuaW1wb3J0IHsgZW5jcnlwdCB9IGZyb20gJ0BiaXRnby1iZXRhL3Nkay1hcGknO1xuaW1wb3J0ICogYXMgYXNzZXJ0IGZyb20gJ2Fzc2VydCc7XG5pbXBvcnQge1xuICBHZW5lcmF0ZUxpZ2h0bmluZ1FyRGF0YVBhcmFtcyxcbiAgR2VuZXJhdGVRckRhdGFQYXJhbXMsXG4gIEdlbmVyYXRlU2FmZVFyRGF0YVBhcmFtcyxcbiAgS2V5Y2FyZEVudGl0eSxcbiAgTWFzdGVyUHVibGljS2V5UXJEYXRhRW50cnksXG4gIFFyRGF0YSxcbiAgUXJEYXRhRW50cnksXG4gIFNhZmVLZXljYXJkUm9vdHMsXG4gIFNhZmVSb290S2V5VHlwZSxcbiAgU0FGRV9ST09UX09SREVSLFxufSBmcm9tICcuL3R5cGVzJztcblxuZnVuY3Rpb24gZ2V0UHViRnJvbUtleShrZXk6IEtleWNoYWluKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgc3dpdGNoIChrZXkudHlwZSkge1xuICAgIGNhc2UgJ2Jsc2RrZyc6XG4gICAgICByZXR1cm4ga2V5LmNvbW1vblB1YjtcbiAgICBjYXNlICd0c3MnOlxuICAgICAgcmV0dXJuIGtleS5jb21tb25LZXljaGFpbjtcbiAgICBjYXNlICdpbmRlcGVuZGVudCc6XG4gICAgICByZXR1cm4ga2V5LnB1YjtcbiAgfVxufVxuXG5mdW5jdGlvbiBnZW5lcmF0ZVVzZXJRckRhdGEodXNlcktleWNoYWluOiBLZXljaGFpbiwgdXNlck1hc3RlcktleT86IHN0cmluZyk6IFFyRGF0YUVudHJ5IHtcbiAgaWYgKHVzZXJLZXljaGFpbi5yZWR1Y2VkRW5jcnlwdGVkUHJ2KSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHRpdGxlOiAnQTogVXNlciBLZXknLFxuICAgICAgZGVzY3JpcHRpb246ICdUaGlzIGlzIHlvdXIgcHJpdmF0ZSBrZXksIGVuY3J5cHRlZCB3aXRoIHlvdXIgd2FsbGV0IHBhc3N3b3JkLicsXG4gICAgICBkYXRhOiB1c2VyS2V5Y2hhaW4ucmVkdWNlZEVuY3J5cHRlZFBydixcbiAgICB9O1xuICB9XG4gIGlmICh1c2VyS2V5Y2hhaW4uZW5jcnlwdGVkUHJ2KSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHRpdGxlOiAnQTogVXNlciBLZXknLFxuICAgICAgZGVzY3JpcHRpb246ICdUaGlzIGlzIHlvdXIgcHJpdmF0ZSBrZXksIGVuY3J5cHRlZCB3aXRoIHlvdXIgd2FsbGV0IHBhc3N3b3JkLicsXG4gICAgICBkYXRhOiB1c2VyS2V5Y2hhaW4uZW5jcnlwdGVkUHJ2LFxuICAgIH07XG4gIH1cblxuICBjb25zdCBwdWIgPSBnZXRQdWJGcm9tS2V5KHVzZXJLZXljaGFpbik7XG4gIGFzc2VydC5vayhwdWIpO1xuXG4gIHJldHVybiB7XG4gICAgdGl0bGU6ICdBOiBQcm92aWRlZCBVc2VyIEtleScsXG4gICAgZGVzY3JpcHRpb246ICdUaGlzIGlzIHRoZSBwdWJsaWMga2V5IHlvdSBwcm92aWRlZCBmb3IgeW91ciB3YWxsZXQuJyxcbiAgICBkYXRhOiBwdWIsXG4gICAgcHVibGljTWFzdGVyS2V5OiB1c2VyTWFzdGVyS2V5LFxuICB9O1xufVxuXG5mdW5jdGlvbiBnZW5lcmF0ZUJhY2t1cFFyRGF0YShcbiAgY29pbjogUmVhZG9ubHk8QmFzZUNvaW4+LFxuICBiYWNrdXBLZXljaGFpbjogS2V5Y2hhaW4sXG4gIHtcbiAgICBiYWNrdXBLZXlQcm92aWRlcixcbiAgICBiYWNrdXBNYXN0ZXJLZXksXG4gIH06IHtcbiAgICBiYWNrdXBLZXlQcm92aWRlcj86IHN0cmluZztcbiAgICBiYWNrdXBNYXN0ZXJLZXk/OiBzdHJpbmc7XG4gIH0gPSB7fVxuKTogUXJEYXRhRW50cnkge1xuICBjb25zdCB0aXRsZSA9ICdCOiBCYWNrdXAgS2V5JztcbiAgaWYgKGJhY2t1cEtleWNoYWluLnJlZHVjZWRFbmNyeXB0ZWRQcnYpIHtcbiAgICByZXR1cm4ge1xuICAgICAgdGl0bGUsXG4gICAgICBkZXNjcmlwdGlvbjogJ1RoaXMgaXMgeW91ciBiYWNrdXAgcHJpdmF0ZSBrZXksIGVuY3J5cHRlZCB3aXRoIHlvdXIgd2FsbGV0IHBhc3N3b3JkLicsXG4gICAgICBkYXRhOiBiYWNrdXBLZXljaGFpbi5yZWR1Y2VkRW5jcnlwdGVkUHJ2LFxuICAgIH07XG4gIH1cbiAgaWYgKGJhY2t1cEtleWNoYWluLmVuY3J5cHRlZFBydikge1xuICAgIHJldHVybiB7XG4gICAgICB0aXRsZSxcbiAgICAgIGRlc2NyaXB0aW9uOiAnVGhpcyBpcyB5b3VyIGJhY2t1cCBwcml2YXRlIGtleSwgZW5jcnlwdGVkIHdpdGggeW91ciB3YWxsZXQgcGFzc3dvcmQuJyxcbiAgICAgIGRhdGE6IGJhY2t1cEtleWNoYWluLmVuY3J5cHRlZFBydixcbiAgICB9O1xuICB9XG5cbiAgaWYgKGJhY2t1cEtleVByb3ZpZGVyID09PSAnQml0R28gVHJ1c3QnICYmIGJhY2t1cEtleWNoYWluLnR5cGUgPT09ICd0c3MnKSB7XG4gICAgY29uc3Qga2V5U2hhcmVzID0gYmFja3VwS2V5Y2hhaW4ua2V5U2hhcmVzPy5maWx0ZXIoKGtleVNoYXJlKSA9PiBrZXlTaGFyZS50byA9PT0gJ2JhY2t1cCcpO1xuICAgIGFzc2VydC5vayhrZXlTaGFyZXM/Lmxlbmd0aCA9PT0gMik7XG4gICAgcmV0dXJuIHtcbiAgICAgIHRpdGxlOiAnQjogQmFja3VwIEtleSBTaGFyZXMnLFxuICAgICAgZGVzY3JpcHRpb246XG4gICAgICAgIGBUaGVzZSBhcmUgdGhlIGtleSBzaGFyZXMgZm9yICR7YmFja3VwS2V5UHJvdmlkZXJ9LiBJZiBCaXRHbyBJbmMuIGdvZXMgb3V0IG9mIGJ1c2luZXNzLFxcclxcbmAgK1xuICAgICAgICBgY29udGFjdCAke2JhY2t1cEtleVByb3ZpZGVyfSBhbmQgdGhleSB3aWxsIGhlbHAgeW91IHJlY292ZXIgeW91ciBmdW5kcy5gLFxuICAgICAgZGF0YTogSlNPTi5zdHJpbmdpZnkoa2V5U2hhcmVzKSxcbiAgICB9O1xuICB9XG5cbiAgY29uc3QgcHViID0gZ2V0UHViRnJvbUtleShiYWNrdXBLZXljaGFpbik7XG4gIGFzc2VydC5vayhwdWIpO1xuXG4gIGlmIChiYWNrdXBLZXlQcm92aWRlcikge1xuICAgIHJldHVybiB7XG4gICAgICB0aXRsZTogJ0I6IEJhY2t1cCBLZXknLFxuICAgICAgZGVzY3JpcHRpb246XG4gICAgICAgIGBUaGlzIGlzIHRoZSBwdWJsaWMga2V5IGhlbGQgYXQgJHtiYWNrdXBLZXlQcm92aWRlcn0sIGFuICR7Y29pbi5uYW1lfSByZWNvdmVyeSBzZXJ2aWNlLiBgICtcbiAgICAgICAgYElmIHlvdSBsb3NlXFxyXFxueW91ciBrZXksICR7YmFja3VwS2V5UHJvdmlkZXJ9IHdpbGwgYmUgYWJsZSB0byBzaWduIHRyYW5zYWN0aW9ucyB0byByZWNvdmVyIGZ1bmRzLmAsXG4gICAgICBkYXRhOiBwdWIsXG4gICAgfTtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgdGl0bGU6ICdCOiBQcm92aWRlZCBCYWNrdXAgS2V5JyxcbiAgICBkZXNjcmlwdGlvbjogJ1RoaXMgaXMgdGhlIHB1YmxpYyBrZXkgeW91IHByb3ZpZGVkIGZvciB5b3VyIHdhbGxldC4nLFxuICAgIGRhdGE6IHB1YixcbiAgICBwdWJsaWNNYXN0ZXJLZXk6IGJhY2t1cE1hc3RlcktleSxcbiAgfTtcbn1cblxuZnVuY3Rpb24gZ2VuZXJhdGVCaXRHb1FyRGF0YShiaXRnb0tleWNoYWluOiBLZXljaGFpbik6IFFyRGF0YUVudHJ5IHtcbiAgY29uc3QgYml0Z29EYXRhID0gZ2V0UHViRnJvbUtleShiaXRnb0tleWNoYWluKTtcbiAgYXNzZXJ0Lm9rKGJpdGdvRGF0YSk7XG5cbiAgcmV0dXJuIHtcbiAgICB0aXRsZTogJ0M6IEJpdEdvIEtleScsXG4gICAgZGVzY3JpcHRpb246ICdUaGlzIGlzIHRoZSBwdWJsaWMgcGFydCBvZiB0aGUga2V5IGhlbGQgYnkgQml0R28uJyxcbiAgICBkYXRhOiBiaXRnb0RhdGEsXG4gIH07XG59XG5cbmZ1bmN0aW9uIGdlbmVyYXRlVXNlck1hc3RlclB1YmxpY0tleVFSRGF0YShwdWJsaWNLZXk6IHN0cmluZyk6IE1hc3RlclB1YmxpY0tleVFyRGF0YUVudHJ5IHtcbiAgcmV0dXJuIHtcbiAgICB0aXRsZTogJ0U6IE1hc3RlciBVc2VyIFB1YmxpYyBLZXknLFxuICAgIGRlc2NyaXB0aW9uOlxuICAgICAgJ1RoaXMgaXMgdGhlIHB1YmxpYyBrZXkgdXNlZCB0byBkZXJpdmUgdGhlIHVzZXIga2V5IGZvciB0aGUgd2FsbGV0LiBUaGlzIGlzIG5vdCBzdG9yZWQgYnkgQml0R28sIGFuZCBtYXkgYmUgcmVxdWlyZWQgZm9yIHVzZSBpbiByZWNvdmVyeSBzY2VuYXJpb3MuJyxcbiAgICBkYXRhOiBwdWJsaWNLZXksXG4gIH07XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGdlbmVyYXRlUGFzc2NvZGVRckRhdGEoXG4gIHBhc3NwaHJhc2U6IHN0cmluZyxcbiAgcGFzc2NvZGVFbmNyeXB0aW9uQ29kZTogc3RyaW5nLFxuICBlbmNyeXB0aW9uVmVyc2lvbj86IDEgfCAyLFxuICBlbnRpdHlOb3VuOiBLZXljYXJkRW50aXR5ID0gJ3dhbGxldCdcbik6IFByb21pc2U8UXJEYXRhRW50cnk+IHtcbiAgY29uc3QgZW5jcnlwdGVkUGFzc2NvZGUgPSBhd2FpdCBlbmNyeXB0KHBhc3Njb2RlRW5jcnlwdGlvbkNvZGUsIHBhc3NwaHJhc2UsIHsgZW5jcnlwdGlvblZlcnNpb24gfSk7XG4gIGNvbnN0IHRpdGxlTm91biA9IGVudGl0eU5vdW4gPT09ICdzYWZlJyA/ICdTYWZlJyA6ICdXYWxsZXQnO1xuICByZXR1cm4ge1xuICAgIHRpdGxlOiBgRDogRW5jcnlwdGVkICR7dGl0bGVOb3VufSBQYXNzd29yZGAsXG4gICAgZGVzY3JpcHRpb246IGBUaGlzIGlzIHRoZSAke2VudGl0eU5vdW59IHBhc3N3b3JkLCBlbmNyeXB0ZWQgY2xpZW50LXNpZGUgd2l0aCBhIGtleSBoZWxkIGJ5IEJpdEdvLmAsXG4gICAgZGF0YTogZW5jcnlwdGVkUGFzc2NvZGUsXG4gIH07XG59XG5cbmZ1bmN0aW9uIGdlbmVyYXRlQmFja3VwTWFzdGVyUHVibGljS2V5UVJEYXRhKHB1YmxpY0tleTogc3RyaW5nKTogTWFzdGVyUHVibGljS2V5UXJEYXRhRW50cnkge1xuICByZXR1cm4ge1xuICAgIHRpdGxlOiAnRjogTWFzdGVyIEJhY2t1cCBQdWJsaWMgS2V5JyxcbiAgICBkZXNjcmlwdGlvbjpcbiAgICAgICdUaGlzIGlzIHRoZSBwdWJsaWMga2V5IHVzZWQgdG8gZGVyaXZlIHRoZSBiYWNrdXAga2V5IGZvciB0aGUgd2FsbGV0LiBUaGlzIGlzIG5vdCBzdG9yZWQgYnkgQml0R28sIGFuZCBtYXkgYmUgcmVxdWlyZWQgZm9yIHVzZSBpbiByZWNvdmVyeSBzY2VuYXJpb3MuJyxcbiAgICBkYXRhOiBwdWJsaWNLZXksXG4gIH07XG59XG5cbmZ1bmN0aW9uIGJ1aWxkV2FsbGV0UXJEYXRhKHtcbiAgYmFja3VwS2V5Y2hhaW4sXG4gIGJhY2t1cEtleVByb3ZpZGVyLFxuICBiYWNrdXBNYXN0ZXJLZXksXG4gIGJpdGdvS2V5Y2hhaW4sXG4gIGNvaW4sXG4gIHVzZXJLZXljaGFpbixcbiAgdXNlck1hc3RlcktleSxcbiAgdXNlck1hc3RlclB1YmxpY0tleSxcbiAgYmFja3VwTWFzdGVyUHVibGljS2V5LFxufTogR2VuZXJhdGVRckRhdGFQYXJhbXMpOiBRckRhdGEge1xuICByZXR1cm4ge1xuICAgIHVzZXI6IGdlbmVyYXRlVXNlclFyRGF0YSh1c2VyS2V5Y2hhaW4sIHVzZXJNYXN0ZXJLZXkpLFxuICAgIHVzZXJNYXN0ZXJQdWJsaWNLZXk6IHVzZXJNYXN0ZXJQdWJsaWNLZXkgPyBnZW5lcmF0ZVVzZXJNYXN0ZXJQdWJsaWNLZXlRUkRhdGEodXNlck1hc3RlclB1YmxpY0tleSkgOiB1bmRlZmluZWQsXG4gICAgYmFja3VwOiBnZW5lcmF0ZUJhY2t1cFFyRGF0YShjb2luLCBiYWNrdXBLZXljaGFpbiwge1xuICAgICAgYmFja3VwS2V5UHJvdmlkZXIsXG4gICAgICBiYWNrdXBNYXN0ZXJLZXksXG4gICAgfSksXG4gICAgYmFja3VwTWFzdGVyUHVibGljS2V5OiBiYWNrdXBNYXN0ZXJQdWJsaWNLZXlcbiAgICAgID8gZ2VuZXJhdGVCYWNrdXBNYXN0ZXJQdWJsaWNLZXlRUkRhdGEoYmFja3VwTWFzdGVyUHVibGljS2V5KVxuICAgICAgOiB1bmRlZmluZWQsXG4gICAgYml0Z286IGdlbmVyYXRlQml0R29RckRhdGEoYml0Z29LZXljaGFpbiksXG4gIH07XG59XG5cbmZ1bmN0aW9uIGJ1aWxkTGlnaHRuaW5nUXJEYXRhKHsgdXNlckF1dGhLZXljaGFpbiB9OiBHZW5lcmF0ZUxpZ2h0bmluZ1FyRGF0YVBhcmFtcyk6IFFyRGF0YSB7XG4gIGFzc2VydC5vayh1c2VyQXV0aEtleWNoYWluLmVuY3J5cHRlZFBydiwgJ3VzZXJBdXRoS2V5Y2hhaW4gbXVzdCBoYXZlIGFuIGVuY3J5cHRlZFBydicpO1xuXG4gIHJldHVybiB7XG4gICAgdXNlcjoge1xuICAgICAgdGl0bGU6ICdBOiBVc2VyIEF1dGggS2V5JyxcbiAgICAgIGRlc2NyaXB0aW9uOlxuICAgICAgICAnVGhpcyBpcyB5b3VyIHVzZXIgYXV0aGVudGljYXRpb24gcHJpdmF0ZSBrZXksIGVuY3J5cHRlZCB3aXRoIHlvdXIgd2FsbGV0IHBhc3N3b3JkLlxcclxcbkl0IGlzIHVzZWQgdG8gYXV0aGVudGljYXRlIHBheW1lbnQgYW5kIHdhbGxldCBvcGVyYXRpb25zLicsXG4gICAgICBkYXRhOiB1c2VyQXV0aEtleWNoYWluLmVuY3J5cHRlZFBydixcbiAgICB9LFxuICB9O1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZ2VuZXJhdGVRckRhdGEocGFyYW1zOiBHZW5lcmF0ZVFyRGF0YVBhcmFtcyk6IFByb21pc2U8UXJEYXRhPiB7XG4gIGNvbnN0IHFyRGF0YSA9IGJ1aWxkV2FsbGV0UXJEYXRhKHBhcmFtcyk7XG5cbiAgaWYgKHBhcmFtcy5wYXNzcGhyYXNlICYmIHBhcmFtcy5wYXNzY29kZUVuY3J5cHRpb25Db2RlKSB7XG4gICAgcXJEYXRhLnBhc3Njb2RlID0gYXdhaXQgZ2VuZXJhdGVQYXNzY29kZVFyRGF0YShcbiAgICAgIHBhcmFtcy5wYXNzcGhyYXNlLFxuICAgICAgcGFyYW1zLnBhc3Njb2RlRW5jcnlwdGlvbkNvZGUsXG4gICAgICBwYXJhbXMuZW5jcnlwdGlvblZlcnNpb25cbiAgICApO1xuICB9XG5cbiAgcmV0dXJuIHFyRGF0YTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGdlbmVyYXRlTGlnaHRuaW5nUXJEYXRhKHBhcmFtczogR2VuZXJhdGVMaWdodG5pbmdRckRhdGFQYXJhbXMpOiBQcm9taXNlPFFyRGF0YT4ge1xuICBjb25zdCBxckRhdGEgPSBidWlsZExpZ2h0bmluZ1FyRGF0YShwYXJhbXMpO1xuXG4gIGlmIChwYXJhbXMucGFzc3BocmFzZSAmJiBwYXJhbXMucGFzc2NvZGVFbmNyeXB0aW9uQ29kZSkge1xuICAgIHFyRGF0YS5wYXNzY29kZSA9IGF3YWl0IGdlbmVyYXRlUGFzc2NvZGVRckRhdGEoXG4gICAgICBwYXJhbXMucGFzc3BocmFzZSxcbiAgICAgIHBhcmFtcy5wYXNzY29kZUVuY3J5cHRpb25Db2RlLFxuICAgICAgcGFyYW1zLmVuY3J5cHRpb25WZXJzaW9uXG4gICAgKTtcbiAgfVxuXG4gIHJldHVybiBxckRhdGE7XG59XG5cbmZ1bmN0aW9uIHNlbGVjdFJvb3RQcml2YXRlS2V5KGtleWNoYWluOiBLZXljaGFpbiwgc2xvdDogU2FmZVJvb3RLZXlUeXBlLCByb2xlOiAndXNlcicgfCAnYmFja3VwJyk6IHN0cmluZyB7XG4gIC8vIFByZWZlciB0aGUgY29tcGFjdCBNUEN2MiByZWR1Y2VkIHNoYXJlOyBmYWxsIGJhY2sgdG8gZW5jcnlwdGVkUHJ2IChlLmcuIG11bHRpc2lnIHJvb3RzKS5cbiAgY29uc3QgZGF0YSA9IGtleWNoYWluLnJlZHVjZWRFbmNyeXB0ZWRQcnYgPz8ga2V5Y2hhaW4uZW5jcnlwdGVkUHJ2O1xuICBhc3NlcnQub2soZGF0YSwgYFNhZmUgJHtyb2xlfSByb290ICR7c2xvdH0gaXMgbWlzc2luZyBlbmNyeXB0ZWQgcHJpdmF0ZSBrZXkgbWF0ZXJpYWxgKTtcbiAgcmV0dXJuIGRhdGE7XG59XG5cbmZ1bmN0aW9uIHNlbGVjdFJvb3RQdWJsaWNLZXkoa2V5Y2hhaW46IEtleWNoYWluLCBzbG90OiBTYWZlUm9vdEtleVR5cGUpOiBzdHJpbmcge1xuICBjb25zdCBwdWIgPSBnZXRQdWJGcm9tS2V5KGtleWNoYWluKTtcbiAgYXNzZXJ0Lm9rKHB1YiwgYFNhZmUgQml0R28gcm9vdCAke3Nsb3R9IGlzIG1pc3NpbmcgYSBwdWJsaWMga2V5YCk7XG4gIHJldHVybiBwdWI7XG59XG5cbi8qKlxuICogU2VyaWFsaXplcyBvbmUgYm94J3MgZm91ciByb290cyBpbnRvIGEgc2luZ2xlIEpTT04gb2JqZWN0IGtleWVkIGJ5IHJvb3RLZXlUeXBlLCBlLmcuXG4gKiBge1wic2VjcDI1NmsxTXVsdGlzaWdcIjpcIjxlbmNQcnY+XCIsXCJlY2RzYU1wY1wiOlwiPHJlZHVjZWRFbmNQcnY+XCIsLi4ufWAuIFRoaXMga2VlcHMgdGhlIHNhZmVcbiAqIGtleWNhcmQgb24gdGhlIGV4aXN0aW5nIDQtYm94IGxheW91dCDigJQgb25lIGJveCAoPSBvbmUgUVIvZGF0YSBibG9jaykgcGVyIHJvbGUg4oCUIHdpdGggdGhlXG4gKiBmb3VyIHJvb3RzIHBhY2tlZCBpbnRvIGVhY2ggYm94J3MgZGF0YS4gYHNwbGl0S2V5c2AgZnJhZ21lbnRzIHRoZSBib3ggaWYgaXQgZXhjZWVkcyB0aGUgUVJcbiAqIHRocmVzaG9sZCwgZXhhY3RseSBhcyBmb3IgYSBub3JtYWwgd2FsbGV0IGtleWNhcmQuIFJldmVyc2VkIGJ5IHtAbGluayBwYXJzZVNhZmVLZXljYXJkQm94fS5cbiAqL1xuZnVuY3Rpb24gYnVpbGRTYWZlQm94RGF0YShcbiAgcm9vdHM6IFJlY29yZDxTYWZlUm9vdEtleVR5cGUsIEtleWNoYWluc1RyaXBsZXQ+LFxuICBzZWxlY3Q6IChyb290OiBLZXljaGFpbnNUcmlwbGV0LCBzbG90OiBTYWZlUm9vdEtleVR5cGUpID0+IHN0cmluZ1xuKTogc3RyaW5nIHtcbiAgY29uc3QgYm94OiBTYWZlS2V5Y2FyZFJvb3RzID0ge30gYXMgU2FmZUtleWNhcmRSb290cztcbiAgZm9yIChjb25zdCBzbG90IG9mIFNBRkVfUk9PVF9PUkRFUikge1xuICAgIGNvbnN0IHJvb3QgPSByb290c1tzbG90XTtcbiAgICBhc3NlcnQub2socm9vdCwgYFNhZmUgaXMgbWlzc2luZyB0aGUgJHtzbG90fSByb290YCk7XG4gICAgYm94W3Nsb3RdID0gc2VsZWN0KHJvb3QsIHNsb3QpO1xuICB9XG4gIHJldHVybiBKU09OLnN0cmluZ2lmeShib3gpO1xufVxuXG4vKipcbiAqIEJ1aWxkcyBzYWZlIGtleWNhcmQgUVIgZGF0YSBpbiB0aGUgZXhpc3Rpbmcgd2FsbGV0IHtAbGluayBRckRhdGF9IHNoYXBlOiBib3hlcyBBICh1c2VyKSxcbiAqIEIgKGJhY2t1cCksIEMgKEJpdEdvKSwgRCAocGFzc2NvZGUpLiBFYWNoIG9mIEEvQi9DIGNhcnJpZXMgYSBKU09OIG9iamVjdCBvZiB0aGUgZm91ciByb290cyxcbiAqIHNvIHRoZSBzYWZlIHJlbmRlcnMgYW5kIHBhcnNlcyB0aHJvdWdoIHRoZSBzYW1lIHtAbGluayBkcmF3S2V5Y2FyZH0gcGF0aCBhcyBhIHdhbGxldC5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGdlbmVyYXRlU2FmZVFyRGF0YShwYXJhbXM6IEdlbmVyYXRlU2FmZVFyRGF0YVBhcmFtcyk6IFByb21pc2U8UXJEYXRhPiB7XG4gIGNvbnN0IHsgcm9vdHMgfSA9IHBhcmFtcztcbiAgY29uc3QgcXJEYXRhOiBRckRhdGEgPSB7XG4gICAgdXNlcjoge1xuICAgICAgdGl0bGU6ICdBOiBVc2VyIEtleScsXG4gICAgICBkZXNjcmlwdGlvbjogJ1lvdXIgNCByb290IHByaXZhdGUga2V5cywgZW5jcnlwdGVkIHdpdGggeW91ciBzYWZlIHBhc3N3b3JkLicsXG4gICAgICBkYXRhOiBidWlsZFNhZmVCb3hEYXRhKHJvb3RzLCAocm9vdCwgc2xvdCkgPT4gc2VsZWN0Um9vdFByaXZhdGVLZXkocm9vdC51c2VyS2V5Y2hhaW4sIHNsb3QsICd1c2VyJykpLFxuICAgIH0sXG4gICAgYmFja3VwOiB7XG4gICAgICB0aXRsZTogJ0I6IEJhY2t1cCBLZXknLFxuICAgICAgZGVzY3JpcHRpb246ICdZb3VyIDQgcm9vdCBiYWNrdXAga2V5cywgZW5jcnlwdGVkIHdpdGggeW91ciBzYWZlIHBhc3N3b3JkLicsXG4gICAgICBkYXRhOiBidWlsZFNhZmVCb3hEYXRhKHJvb3RzLCAocm9vdCwgc2xvdCkgPT4gc2VsZWN0Um9vdFByaXZhdGVLZXkocm9vdC5iYWNrdXBLZXljaGFpbiwgc2xvdCwgJ2JhY2t1cCcpKSxcbiAgICB9LFxuICAgIGJpdGdvOiB7XG4gICAgICB0aXRsZTogJ0M6IEJpdEdvIEtleScsXG4gICAgICBkZXNjcmlwdGlvbjogJ1RoZSBwdWJsaWMgcGFydHMgb2YgdGhlIDQgcm9vdCBrZXlzIGhlbGQgYnkgQml0R28uJyxcbiAgICAgIGRhdGE6IGJ1aWxkU2FmZUJveERhdGEocm9vdHMsIChyb290LCBzbG90KSA9PiBzZWxlY3RSb290UHVibGljS2V5KHJvb3QuYml0Z29LZXljaGFpbiwgc2xvdCkpLFxuICAgIH0sXG4gIH07XG5cbiAgaWYgKHBhcmFtcy5wYXNzcGhyYXNlICYmIHBhcmFtcy5wYXNzY29kZUVuY3J5cHRpb25Db2RlKSB7XG4gICAgcXJEYXRhLnBhc3Njb2RlID0gYXdhaXQgZ2VuZXJhdGVQYXNzY29kZVFyRGF0YShcbiAgICAgIHBhcmFtcy5wYXNzcGhyYXNlLFxuICAgICAgcGFyYW1zLnBhc3Njb2RlRW5jcnlwdGlvbkNvZGUsXG4gICAgICBwYXJhbXMuZW5jcnlwdGlvblZlcnNpb24sXG4gICAgICAnc2FmZSdcbiAgICApO1xuICB9XG5cbiAgcmV0dXJuIHFyRGF0YTtcbn1cbiJdfQ==
|
package/dist/src/index.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { GenerateKeycardParams, GenerateLightningQrDataParams, GenerateQrDataBaseParams,
|
|
1
|
+
import { GenerateKeycardParams, GenerateLightningQrDataParams, GenerateQrDataBaseParams, GenerateSafeQrDataParams } from './types';
|
|
2
2
|
export * from './drawKeycard';
|
|
3
3
|
export * from './extractKeycardFromPDF';
|
|
4
4
|
export * from './faq';
|
|
@@ -9,10 +9,10 @@ export * from './types';
|
|
|
9
9
|
export declare function generateKeycard(params: GenerateKeycardParams): Promise<void>;
|
|
10
10
|
export declare function generateLightningKeycard(params: GenerateQrDataBaseParams & GenerateLightningQrDataParams): Promise<void>;
|
|
11
11
|
/**
|
|
12
|
-
* Generates a
|
|
13
|
-
* object of the four roots (see {@link
|
|
14
|
-
* {@link drawKeycard} path as a wallet. Generated as part of
|
|
12
|
+
* Generates a safe keycard using the existing 4-box layout: boxes A/B/C each carry a JSON
|
|
13
|
+
* object of the four roots (see {@link generateSafeQrData}), rendered through the same
|
|
14
|
+
* {@link drawKeycard} path as a wallet. Generated as part of safe creation, once all four
|
|
15
15
|
* root triplets exist.
|
|
16
16
|
*/
|
|
17
|
-
export declare function
|
|
17
|
+
export declare function generateSafeKeycard(params: GenerateQrDataBaseParams & GenerateSafeQrDataParams): Promise<void>;
|
|
18
18
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/src/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAIA,OAAO,EACL,qBAAqB,EACrB,6BAA6B,EAC7B,wBAAwB,EACxB,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAIA,OAAO,EACL,qBAAqB,EACrB,6BAA6B,EAC7B,wBAAwB,EACxB,wBAAwB,EACzB,MAAM,SAAS,CAAC;AAEjB,cAAc,eAAe,CAAC;AAC9B,cAAc,yBAAyB,CAAC;AACxC,cAAc,OAAO,CAAC;AACtB,cAAc,kBAAkB,CAAC;AACjC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,SAAS,CAAC;AACxB,cAAc,SAAS,CAAC;AAExB,wBAAsB,eAAe,CAAC,MAAM,EAAE,qBAAqB,GAAG,OAAO,CAAC,IAAI,CAAC,CAqBlF;AAED,wBAAsB,wBAAwB,CAC5C,MAAM,EAAE,wBAAwB,GAAG,6BAA6B,GAC/D,OAAO,CAAC,IAAI,CAAC,CAMf;AAED;;;;;GAKG;AACH,wBAAsB,mBAAmB,CAAC,MAAM,EAAE,wBAAwB,GAAG,wBAAwB,GAAG,OAAO,CAAC,IAAI,CAAC,CAMpH"}
|
package/dist/src/index.js
CHANGED
|
@@ -16,7 +16,7 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
|
16
16
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
17
|
exports.generateKeycard = generateKeycard;
|
|
18
18
|
exports.generateLightningKeycard = generateLightningKeycard;
|
|
19
|
-
exports.
|
|
19
|
+
exports.generateSafeKeycard = generateSafeKeycard;
|
|
20
20
|
const generateQrData_1 = require("./generateQrData");
|
|
21
21
|
const faq_1 = require("./faq");
|
|
22
22
|
const drawKeycard_1 = require("./drawKeycard");
|
|
@@ -61,16 +61,16 @@ async function generateLightningKeycard(params) {
|
|
|
61
61
|
keycard.save(`BitGo Keycard for ${label}.pdf`);
|
|
62
62
|
}
|
|
63
63
|
/**
|
|
64
|
-
* Generates a
|
|
65
|
-
* object of the four roots (see {@link
|
|
66
|
-
* {@link drawKeycard} path as a wallet. Generated as part of
|
|
64
|
+
* Generates a safe keycard using the existing 4-box layout: boxes A/B/C each carry a JSON
|
|
65
|
+
* object of the four roots (see {@link generateSafeQrData}), rendered through the same
|
|
66
|
+
* {@link drawKeycard} path as a wallet. Generated as part of safe creation, once all four
|
|
67
67
|
* root triplets exist.
|
|
68
68
|
*/
|
|
69
|
-
async function
|
|
69
|
+
async function generateSafeKeycard(params) {
|
|
70
70
|
const questions = (0, faq_1.generateFaq)(params.coin.fullName);
|
|
71
|
-
const qrData = await (0, generateQrData_1.
|
|
71
|
+
const qrData = await (0, generateQrData_1.generateSafeQrData)(params);
|
|
72
72
|
const keycard = await (0, drawKeycard_1.drawKeycard)({ ...params, questions, qrData, pageBreakBeforeIndices: [1, 2] });
|
|
73
73
|
const label = params.walletLabel || params.coin.fullName;
|
|
74
74
|
keycard.save(`BitGo Keycard for ${label}.pdf`);
|
|
75
75
|
}
|
|
76
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
76
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7OztBQW1CQSwwQ0FxQkM7QUFFRCw0REFRQztBQVFELGtEQU1DO0FBaEVELHFEQUErRjtBQUMvRiwrQkFBMEQ7QUFDMUQsK0NBQTRDO0FBQzVDLGlGQUE4RTtBQVE5RSxnREFBOEI7QUFDOUIsMERBQXdDO0FBQ3hDLHdDQUFzQjtBQUN0QixtREFBaUM7QUFDakMsaURBQStCO0FBQy9CLDBDQUF3QjtBQUN4QiwwQ0FBd0I7QUFFakIsS0FBSyxVQUFVLGVBQWUsQ0FBQyxNQUE2QjtJQUNqRSxJQUFJLGtCQUFrQixJQUFJLE1BQU0sRUFBRSxDQUFDO1FBQ2pDLE1BQU0sU0FBUyxHQUFHLElBQUEsMEJBQW9CLEVBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUM3RCxNQUFNLE1BQU0sR0FBRyxNQUFNLElBQUEsd0NBQXVCLEVBQUMsTUFBTSxDQUFDLENBQUM7UUFDckQsTUFBTSxPQUFPLEdBQUcsTUFBTSxJQUFBLHlCQUFXLEVBQUMsRUFBRSxHQUFHLE1BQU0sRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLENBQUMsQ0FBQztRQUNwRSxNQUFNLEtBQUssR0FBRyxNQUFNLENBQUMsV0FBVyxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDO1FBQ3pELE9BQU8sQ0FBQyxJQUFJLENBQUMscUJBQXFCLEtBQUssTUFBTSxDQUFDLENBQUM7SUFDakQsQ0FBQztTQUFNLElBQUksTUFBTSxJQUFJLE1BQU0sRUFBRSxDQUFDO1FBQzVCLE1BQU0sU0FBUyxHQUFHLElBQUEsaUJBQVcsRUFBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ3BELE1BQU0sTUFBTSxHQUFHLE1BQU0sSUFBQSwrQkFBYyxFQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQzVDLE1BQU0sT0FBTyxHQUFHLE1BQU0sSUFBQSx5QkFBVyxFQUFDLEVBQUUsR0FBRyxNQUFNLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxDQUFDLENBQUM7UUFDcEUsTUFBTSxLQUFLLEdBQUcsTUFBTSxDQUFDLFdBQVcsSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQztRQUN6RCxPQUFPLENBQUMsSUFBSSxDQUFDLHFCQUFxQixLQUFLLE1BQU0sQ0FBQyxDQUFDO0lBQ2pELENBQUM7U0FBTSxJQUFJLE9BQU8sSUFBSSxNQUFNLEVBQUUsQ0FBQztRQUM3QixNQUFNLElBQUksR0FBRyxJQUFBLDJEQUE0QixFQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ2xELE1BQU0sT0FBTyxHQUFHLE1BQU0sSUFBQSx5QkFBVyxFQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3hDLE1BQU0sS0FBSyxHQUFHLE1BQU0sQ0FBQyxXQUFXLElBQUksTUFBTSxDQUFDLEtBQUssQ0FBQztRQUNqRCxPQUFPLENBQUMsSUFBSSxDQUFDLHFCQUFxQixLQUFLLE1BQU0sQ0FBQyxDQUFDO0lBQ2pELENBQUM7U0FBTSxDQUFDO1FBQ04sTUFBTSxJQUFJLEtBQUssQ0FBQyx1Q0FBdUMsQ0FBQyxDQUFDO0lBQzNELENBQUM7QUFDSCxDQUFDO0FBRU0sS0FBSyxVQUFVLHdCQUF3QixDQUM1QyxNQUFnRTtJQUVoRSxNQUFNLFNBQVMsR0FBRyxJQUFBLDBCQUFvQixFQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDN0QsTUFBTSxNQUFNLEdBQUcsTUFBTSxJQUFBLHdDQUF1QixFQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ3JELE1BQU0sT0FBTyxHQUFHLE1BQU0sSUFBQSx5QkFBVyxFQUFDLEVBQUUsR0FBRyxNQUFNLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxDQUFDLENBQUM7SUFDcEUsTUFBTSxLQUFLLEdBQUcsTUFBTSxDQUFDLFdBQVcsSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQztJQUN6RCxPQUFPLENBQUMsSUFBSSxDQUFDLHFCQUFxQixLQUFLLE1BQU0sQ0FBQyxDQUFDO0FBQ2pELENBQUM7QUFFRDs7Ozs7R0FLRztBQUNJLEtBQUssVUFBVSxtQkFBbUIsQ0FBQyxNQUEyRDtJQUNuRyxNQUFNLFNBQVMsR0FBRyxJQUFBLGlCQUFXLEVBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUNwRCxNQUFNLE1BQU0sR0FBRyxNQUFNLElBQUEsbUNBQWtCLEVBQUMsTUFBTSxDQUFDLENBQUM7SUFDaEQsTUFBTSxPQUFPLEdBQUcsTUFBTSxJQUFBLHlCQUFXLEVBQUMsRUFBRSxHQUFHLE1BQU0sRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLHNCQUFzQixFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUNwRyxNQUFNLEtBQUssR0FBRyxNQUFNLENBQUMsV0FBVyxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDO0lBQ3pELE9BQU8sQ0FBQyxJQUFJLENBQUMscUJBQXFCLEtBQUssTUFBTSxDQUFDLENBQUM7QUFDakQsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGdlbmVyYXRlTGlnaHRuaW5nUXJEYXRhLCBnZW5lcmF0ZVFyRGF0YSwgZ2VuZXJhdGVTYWZlUXJEYXRhIH0gZnJvbSAnLi9nZW5lcmF0ZVFyRGF0YSc7XG5pbXBvcnQgeyBnZW5lcmF0ZUZhcSwgZ2VuZXJhdGVMaWdodG5pbmdGYXEgfSBmcm9tICcuL2ZhcSc7XG5pbXBvcnQgeyBkcmF3S2V5Y2FyZCB9IGZyb20gJy4vZHJhd0tleWNhcmQnO1xuaW1wb3J0IHsgZ2VuZXJhdGVQYXJhbXNGb3JLZXlDcmVhdGlvbiB9IGZyb20gJy4vZ2VuZXJhdGVQYXJhbXNGb3JLZXlDcmVhdGlvbic7XG5pbXBvcnQge1xuICBHZW5lcmF0ZUtleWNhcmRQYXJhbXMsXG4gIEdlbmVyYXRlTGlnaHRuaW5nUXJEYXRhUGFyYW1zLFxuICBHZW5lcmF0ZVFyRGF0YUJhc2VQYXJhbXMsXG4gIEdlbmVyYXRlU2FmZVFyRGF0YVBhcmFtcyxcbn0gZnJvbSAnLi90eXBlcyc7XG5cbmV4cG9ydCAqIGZyb20gJy4vZHJhd0tleWNhcmQnO1xuZXhwb3J0ICogZnJvbSAnLi9leHRyYWN0S2V5Y2FyZEZyb21QREYnO1xuZXhwb3J0ICogZnJvbSAnLi9mYXEnO1xuZXhwb3J0ICogZnJvbSAnLi9nZW5lcmF0ZVFyRGF0YSc7XG5leHBvcnQgKiBmcm9tICcuL3BhcnNlS2V5Y2FyZCc7XG5leHBvcnQgKiBmcm9tICcuL3V0aWxzJztcbmV4cG9ydCAqIGZyb20gJy4vdHlwZXMnO1xuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZ2VuZXJhdGVLZXljYXJkKHBhcmFtczogR2VuZXJhdGVLZXljYXJkUGFyYW1zKTogUHJvbWlzZTx2b2lkPiB7XG4gIGlmICgndXNlckF1dGhLZXljaGFpbicgaW4gcGFyYW1zKSB7XG4gICAgY29uc3QgcXVlc3Rpb25zID0gZ2VuZXJhdGVMaWdodG5pbmdGYXEocGFyYW1zLmNvaW4uZnVsbE5hbWUpO1xuICAgIGNvbnN0IHFyRGF0YSA9IGF3YWl0IGdlbmVyYXRlTGlnaHRuaW5nUXJEYXRhKHBhcmFtcyk7XG4gICAgY29uc3Qga2V5Y2FyZCA9IGF3YWl0IGRyYXdLZXljYXJkKHsgLi4ucGFyYW1zLCBxdWVzdGlvbnMsIHFyRGF0YSB9KTtcbiAgICBjb25zdCBsYWJlbCA9IHBhcmFtcy53YWxsZXRMYWJlbCB8fCBwYXJhbXMuY29pbi5mdWxsTmFtZTtcbiAgICBrZXljYXJkLnNhdmUoYEJpdEdvIEtleWNhcmQgZm9yICR7bGFiZWx9LnBkZmApO1xuICB9IGVsc2UgaWYgKCdjb2luJyBpbiBwYXJhbXMpIHtcbiAgICBjb25zdCBxdWVzdGlvbnMgPSBnZW5lcmF0ZUZhcShwYXJhbXMuY29pbi5mdWxsTmFtZSk7XG4gICAgY29uc3QgcXJEYXRhID0gYXdhaXQgZ2VuZXJhdGVRckRhdGEocGFyYW1zKTtcbiAgICBjb25zdCBrZXljYXJkID0gYXdhaXQgZHJhd0tleWNhcmQoeyAuLi5wYXJhbXMsIHF1ZXN0aW9ucywgcXJEYXRhIH0pO1xuICAgIGNvbnN0IGxhYmVsID0gcGFyYW1zLndhbGxldExhYmVsIHx8IHBhcmFtcy5jb2luLmZ1bGxOYW1lO1xuICAgIGtleWNhcmQuc2F2ZShgQml0R28gS2V5Y2FyZCBmb3IgJHtsYWJlbH0ucGRmYCk7XG4gIH0gZWxzZSBpZiAoJ2N1cnZlJyBpbiBwYXJhbXMpIHtcbiAgICBjb25zdCBkYXRhID0gZ2VuZXJhdGVQYXJhbXNGb3JLZXlDcmVhdGlvbihwYXJhbXMpO1xuICAgIGNvbnN0IGtleWNhcmQgPSBhd2FpdCBkcmF3S2V5Y2FyZChkYXRhKTtcbiAgICBjb25zdCBsYWJlbCA9IHBhcmFtcy53YWxsZXRMYWJlbCB8fCBwYXJhbXMuY3VydmU7XG4gICAga2V5Y2FyZC5zYXZlKGBCaXRHbyBLZXljYXJkIGZvciAke2xhYmVsfS5wZGZgKTtcbiAgfSBlbHNlIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0VpdGhlciBjdXJ2ZSBvciBjb2luIG11c3QgYmUgcHJvdmlkZWQnKTtcbiAgfVxufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZ2VuZXJhdGVMaWdodG5pbmdLZXljYXJkKFxuICBwYXJhbXM6IEdlbmVyYXRlUXJEYXRhQmFzZVBhcmFtcyAmIEdlbmVyYXRlTGlnaHRuaW5nUXJEYXRhUGFyYW1zXG4pOiBQcm9taXNlPHZvaWQ+IHtcbiAgY29uc3QgcXVlc3Rpb25zID0gZ2VuZXJhdGVMaWdodG5pbmdGYXEocGFyYW1zLmNvaW4uZnVsbE5hbWUpO1xuICBjb25zdCBxckRhdGEgPSBhd2FpdCBnZW5lcmF0ZUxpZ2h0bmluZ1FyRGF0YShwYXJhbXMpO1xuICBjb25zdCBrZXljYXJkID0gYXdhaXQgZHJhd0tleWNhcmQoeyAuLi5wYXJhbXMsIHF1ZXN0aW9ucywgcXJEYXRhIH0pO1xuICBjb25zdCBsYWJlbCA9IHBhcmFtcy53YWxsZXRMYWJlbCB8fCBwYXJhbXMuY29pbi5mdWxsTmFtZTtcbiAga2V5Y2FyZC5zYXZlKGBCaXRHbyBLZXljYXJkIGZvciAke2xhYmVsfS5wZGZgKTtcbn1cblxuLyoqXG4gKiBHZW5lcmF0ZXMgYSBzYWZlIGtleWNhcmQgdXNpbmcgdGhlIGV4aXN0aW5nIDQtYm94IGxheW91dDogYm94ZXMgQS9CL0MgZWFjaCBjYXJyeSBhIEpTT05cbiAqIG9iamVjdCBvZiB0aGUgZm91ciByb290cyAoc2VlIHtAbGluayBnZW5lcmF0ZVNhZmVRckRhdGF9KSwgcmVuZGVyZWQgdGhyb3VnaCB0aGUgc2FtZVxuICoge0BsaW5rIGRyYXdLZXljYXJkfSBwYXRoIGFzIGEgd2FsbGV0LiBHZW5lcmF0ZWQgYXMgcGFydCBvZiBzYWZlIGNyZWF0aW9uLCBvbmNlIGFsbCBmb3VyXG4gKiByb290IHRyaXBsZXRzIGV4aXN0LlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZ2VuZXJhdGVTYWZlS2V5Y2FyZChwYXJhbXM6IEdlbmVyYXRlUXJEYXRhQmFzZVBhcmFtcyAmIEdlbmVyYXRlU2FmZVFyRGF0YVBhcmFtcyk6IFByb21pc2U8dm9pZD4ge1xuICBjb25zdCBxdWVzdGlvbnMgPSBnZW5lcmF0ZUZhcShwYXJhbXMuY29pbi5mdWxsTmFtZSk7XG4gIGNvbnN0IHFyRGF0YSA9IGF3YWl0IGdlbmVyYXRlU2FmZVFyRGF0YShwYXJhbXMpO1xuICBjb25zdCBrZXljYXJkID0gYXdhaXQgZHJhd0tleWNhcmQoeyAuLi5wYXJhbXMsIHF1ZXN0aW9ucywgcXJEYXRhLCBwYWdlQnJlYWtCZWZvcmVJbmRpY2VzOiBbMSwgMl0gfSk7XG4gIGNvbnN0IGxhYmVsID0gcGFyYW1zLndhbGxldExhYmVsIHx8IHBhcmFtcy5jb2luLmZ1bGxOYW1lO1xuICBrZXljYXJkLnNhdmUoYEJpdEdvIEtleWNhcmQgZm9yICR7bGFiZWx9LnBkZmApO1xufVxuIl19
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { SafeKeycardRoots } from './types';
|
|
2
2
|
export type PDFTextNode = {
|
|
3
3
|
text: string;
|
|
4
4
|
x: number;
|
|
@@ -11,12 +11,12 @@ export type KeycardEntry = {
|
|
|
11
11
|
value: string;
|
|
12
12
|
};
|
|
13
13
|
/**
|
|
14
|
-
* Parses a
|
|
14
|
+
* Parses a safe keycard box value — the JSON packed by `generateSafeQrData`, e.g.
|
|
15
15
|
* `{"secp256k1Multisig":"…","ecdsaMpc":"…",…}` — into its four roots. Validates that all four
|
|
16
16
|
* roots are present. Recovery tooling calls this on the A/B/C box value returned by
|
|
17
17
|
* {@link parseKeycardFromLines}, then decrypts each root value with the wallet password.
|
|
18
18
|
*/
|
|
19
|
-
export declare function
|
|
19
|
+
export declare function parseSafeKeycardBox(data: string): SafeKeycardRoots;
|
|
20
20
|
/**
|
|
21
21
|
* Reconstructs logical text lines from an unordered set of PDF text nodes.
|
|
22
22
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"parseKeycard.d.ts","sourceRoot":"","sources":["../../src/parseKeycard.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"parseKeycard.d.ts","sourceRoot":"","sources":["../../src/parseKeycard.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAmB,MAAM,SAAS,CAAC;AAE5D,MAAM,MAAM,WAAW,GAAG;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;IACV,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;CACf,CAAC;AAEF,MAAM,MAAM,YAAY,GAAG;IACzB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;CACf,CAAC;AAEF;;;;;GAKG;AACH,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,GAAG,gBAAgB,CAiBlE;AA0CD;;;;;;;;GAQG;AACH,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,WAAW,EAAE,GAAG,MAAM,EAAE,CA4DrE;AAED,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,YAAY,EAAE,CAyErE"}
|