@bitgo-beta/sdk-core 8.2.1-beta.2116 → 8.2.1-beta.2118

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.
Files changed (30) hide show
  1. package/dist/src/bitgo/safe/derivableEd25519Pub.d.ts +20 -0
  2. package/dist/src/bitgo/safe/derivableEd25519Pub.d.ts.map +1 -1
  3. package/dist/src/bitgo/safe/derivableEd25519Pub.js +45 -1
  4. package/dist/src/bitgo/utils/tss/ecdsa/ecdsaMPCv2KeyGenSender.d.ts +3 -2
  5. package/dist/src/bitgo/utils/tss/ecdsa/ecdsaMPCv2KeyGenSender.d.ts.map +1 -1
  6. package/dist/src/bitgo/utils/tss/ecdsa/ecdsaMPCv2KeyGenSender.js +5 -3
  7. package/dist/src/bitgo/utils/tss/ecdsa/ecdsaVrfMPCv2.d.ts +3 -2
  8. package/dist/src/bitgo/utils/tss/ecdsa/ecdsaVrfMPCv2.d.ts.map +1 -1
  9. package/dist/src/bitgo/utils/tss/ecdsa/ecdsaVrfMPCv2.js +53 -51
  10. package/dist/src/bitgo/utils/tss/ecdsa/typesMPCv2.d.ts +49 -23
  11. package/dist/src/bitgo/utils/tss/ecdsa/typesMPCv2.d.ts.map +1 -1
  12. package/dist/src/bitgo/utils/tss/ecdsa/typesMPCv2.js +1 -1
  13. package/dist/src/bitgo/utils/tss/eddsa/eddsaMPCv2KeyGenSender.d.ts +5 -2
  14. package/dist/src/bitgo/utils/tss/eddsa/eddsaMPCv2KeyGenSender.d.ts.map +1 -1
  15. package/dist/src/bitgo/utils/tss/eddsa/eddsaMPCv2KeyGenSender.js +7 -4
  16. package/dist/src/bitgo/utils/tss/eddsa/eddsaVrfMPCv2.d.ts +1 -1
  17. package/dist/src/bitgo/utils/tss/eddsa/eddsaVrfMPCv2.d.ts.map +1 -1
  18. package/dist/src/bitgo/utils/tss/eddsa/eddsaVrfMPCv2.js +7 -9
  19. package/dist/src/bitgo/utils/tss/eddsa/typesEddsaMPCv2.d.ts.map +1 -1
  20. package/dist/src/bitgo/utils/tss/redpallas/redpallasMPCv2KeyGenSender.d.ts.map +1 -1
  21. package/dist/test/unit/bitgo/safe/derivableEd25519Pub.js +33 -1
  22. package/dist/test/unit/bitgo/safe/fixtures/derivableEd25519Pub.json +1 -1
  23. package/dist/test/unit/bitgo/safe/fixtures/safeBip44Vectors.json +319 -0
  24. package/dist/test/unit/bitgo/safe/recovery.js +11 -4
  25. package/dist/test/unit/bitgo/safe/safeBip44Vectors.d.ts +2 -0
  26. package/dist/test/unit/bitgo/safe/safeBip44Vectors.d.ts.map +1 -0
  27. package/dist/test/unit/bitgo/safe/safeBip44Vectors.js +189 -0
  28. package/dist/test/unit/bitgo/utils/tss/eddsa/eddsaVrfMPCv2.js +6 -4
  29. package/dist/tsconfig.tsbuildinfo +1 -1
  30. package/package.json +10 -10
@@ -34,6 +34,7 @@ var __importStar = (this && this.__importStar) || (function () {
34
34
  })();
35
35
  Object.defineProperty(exports, "__esModule", { value: true });
36
36
  require("should");
37
+ const crypto_1 = require("crypto");
37
38
  const nacl = __importStar(require("tweetnacl"));
38
39
  const src_1 = require("../../../../src");
39
40
  // Cross-repo fixture: byte-identical to wallet-platform
@@ -95,6 +96,8 @@ describe('derivableEd25519Pub', function () {
95
96
  // reproduce, permanently bricking the wallets minted with it.
96
97
  for (const vector of fixture.softDerivation) {
97
98
  it(`derives the pinned golden child: ${vector.name}`, async function () {
99
+ // The pub/chainCode fields must encode to the composite actually derived from.
100
+ (0, src_1.encodeDerivableEd25519Pub)(Buffer.from(vector.pub, 'hex'), Buffer.from(vector.chainCode, 'hex')).should.equal(vector.composite);
98
101
  const child = await (0, src_1.softDeriveChildPubEd25519)(vector.composite, vector.index);
99
102
  child.toString('hex').should.equal(vector.childPub);
100
103
  });
@@ -157,5 +160,34 @@ describe('derivableEd25519Pub', function () {
157
160
  (0, src_1.isValidEd25519StrKeyPublicKey)(STRKEY_PUBLIC.toLowerCase()).should.equal(false);
158
161
  });
159
162
  });
163
+ describe('extended-key signing', function () {
164
+ const seed = (0, src_1.decodeEd25519StrKeySecretSeed)(STRKEY_SEED);
165
+ const message = Buffer.from('extended-key signature');
166
+ const rootChainCode = Buffer.alloc(32, 0xab);
167
+ const chainCodeStr = (0, src_1.encodeEd25519ChainCode)(rootChainCode);
168
+ it('matches the seed-based signer for a seed-backed key', async function () {
169
+ const h = (0, crypto_1.createHash)('sha512').update(seed).digest();
170
+ const kL = (0, src_1.bigIntToBufferLE)((0, src_1.clamp)((0, src_1.bigIntFromBufferLE)(h.subarray(0, 32))), 32);
171
+ const kR = h.subarray(32);
172
+ const sig = await (0, src_1.signEd25519Extended)(message, kL, kR);
173
+ const expected = Buffer.from(nacl.sign.detached(message, nacl.sign.keyPair.fromSeed(seed).secretKey));
174
+ sig.equals(expected).should.equal(true);
175
+ });
176
+ it('signs a soft-derived key with no seed and verifies against its pub', async function () {
177
+ const prv = await (0, src_1.softDeriveChildPrvEd25519AtPath)({
178
+ seedStrKey: STRKEY_SEED,
179
+ chainCode: chainCodeStr,
180
+ path: 'm/0',
181
+ });
182
+ const sig = await (0, src_1.signEd25519Extended)(message, prv.kL, prv.kR);
183
+ nacl.sign.detached.verify(message, sig, prv.pub).should.equal(true);
184
+ // The soft-derived scalar has no seed: treating kL as a seed yields a different pub.
185
+ Buffer.from(nacl.sign.keyPair.fromSeed(prv.kL).publicKey).equals(prv.pub).should.equal(false);
186
+ });
187
+ it('rejects kL/kR that are not 32 bytes', async function () {
188
+ await (0, src_1.signEd25519Extended)(message, Buffer.alloc(31), Buffer.alloc(32)).should.be.rejectedWith(/kL length/);
189
+ await (0, src_1.signEd25519Extended)(message, Buffer.alloc(32), Buffer.alloc(33)).should.be.rejectedWith(/kR length/);
190
+ });
191
+ });
160
192
  });
161
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVyaXZhYmxlRWQyNTUxOVB1Yi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Rlc3QvdW5pdC9iaXRnby9zYWZlL2Rlcml2YWJsZUVkMjU1MTlQdWIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxrQkFBZ0I7QUFDaEIsZ0RBQWtDO0FBQ2xDLHlDQW9CeUI7QUFFekIsd0RBQXdEO0FBQ3hELG1HQUFtRztBQUNuRyw4RUFBOEU7QUFDOUUsNkVBQStEO0FBRS9ELE1BQU0sVUFBVSxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDcEMsTUFBTSxVQUFVLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLENBQUM7QUFDMUMsTUFBTSxRQUFRLEdBQUcsSUFBQSwrQkFBeUIsRUFBQyxVQUFVLEVBQUUsVUFBVSxDQUFDLENBQUM7QUFDbkUsTUFBTSxhQUFhLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLFVBQVUsRUFBRSxVQUFVLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUM5RSxNQUFNLGFBQWEsR0FBRywwREFBMEQsQ0FBQztBQUNqRixNQUFNLFdBQVcsR0FBRywwREFBMEQsQ0FBQztBQUUvRSxRQUFRLENBQUMscUJBQXFCLEVBQUU7SUFDOUIsUUFBUSxDQUFDLG9CQUFvQixFQUFFO1FBQzdCLEVBQUUsQ0FBQyxvREFBb0QsRUFBRTtZQUN2RCx3Q0FBa0MsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQ3BELGtDQUE0QixDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDL0MsUUFBUSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsaUJBQWlCLENBQUMsQ0FBQztZQUN6QyxJQUFBLCtCQUF5QixFQUFD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bUIsQ0FDcEIsQ0FBQztRQUNKLENBQUMsQ0FBQyxDQUFDO1FBRUgsRUFBRSxDQUFDLGlFQUFpRSxFQUFFO1lBQ3BFLElBQUEsbUNBQTZCLEVBQUMsMERBQTBELENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQzlHLElBQUEsbUNBQTZCLEVBQUMsRUFBRSxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUN0RCxJQUFBLG1DQUE2QixFQUFDLGFBQWEsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDakYsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQztBQUNMLENBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICdzaG91bGQnO1xuaW1wb3J0ICogYXMgbmFjbCBmcm9tICd0d2VldG5hY2wnO1xuaW1wb3J0IHtcbiAgREVSSVZBQkxFX0VEMjU1MTlfQ0hBSU5fQ09ERV9CWVRFUyxcbiAgREVSSVZBQkxFX0VEMjU1MTlfUFVCX0xFTkdUSCxcbiAgRWQyNTUxOUJJUDMyLFxuICBFZGRzYSxcbiAgYmlnSW50RnJvbUJ1ZmZlckxFLFxuICBiaWdJbnRUb0J1ZmZlckxFLFxuICBkZWNvZGVEZXJpdmFibGVFZDI1NTE5UHViLFxuICBkZWNvZGVFZDI1NTE5U3RyS2V5UHVibGljS2V5LFxuICBkZWNvZGVFZDI1NTE5U3RyS2V5U2VjcmV0U2VlZCxcbiAgZW5jb2RlRGVyaXZhYmxlRWQyNTUxOVB1YixcbiAgZW5jb2RlRWQyNTUxOUNoYWluQ29kZSxcbiAgZW5jb2RlRWQyNTUxOVN0cktleVB1YmxpY0tleSxcbiAgZ2VuZXJhdGVFZDI1NTE5Q2hhaW5Db2RlLFxuICBpc0NoZWNrc3VtVmFsaWRTdHJLZXlFZDI1NTE5UHViLFxuICBpc0Rlcml2YWJsZUVkMjU1MTlQdWIsXG4gIGlzVmFsaWRFZDI1NTE5U3RyS2V5UHVibGljS2V5LFxuICBzb2Z0RGVyaXZlQ2hpbGRQdWJFZDI1NTE5LFxuICBzb2Z0RGVyaXZlQ2hpbGRQdWJFZDI1NTE5QXRQYXRoLFxuICBzb2Z0RGVyaXZlQ2hpbGRQcnZFZDI1NTE5QXRQYXRoLFxufSBmcm9tICcuLi8uLi8uLi8uLi9zcmMnO1xuXG4vLyBDcm9zcy1yZXBvIGZpeHR1cmU6IGJ5dGUtaWRlbnRpY2FsIHRvIHdhbGxldC1wbGF0Zm9ybVxuLy8gdGVzdC91bml0L2Jhc2Uvc2FmZXMvZml4dHVyZXMvZGVyaXZhYmxlRWQyNTUxOVB1Yi5qc29uLiBGb3VyIGluZGVwZW5kZW50IGltcGxlbWVudGF0aW9ucyBvZiB0aGlzXG4vLyBmb3JtYXQgd2lsbCBvdGhlcndpc2UgZHJpZnQsIGFuZCB0aGUgZmFpbHVyZSBtb2RlIGlzIHVucmVjb3ZlcmFibGUgd2FsbGV0cy5cbmltcG9ydCAqIGFzIGZpeHR1cmUgZnJvbSAnLi9maXh0dXJlcy9kZXJpdmFibGVFZDI1NTE5UHViLmpzb24nO1xuXG5jb25zdCBQVUJMSUNfS0VZID0gQnVmZmVyLmFsbG9jKDMyKTtcbmNvbnN0IENIQUlOX0NPREUgPSBCdWZmZXIuYWxsb2MoMzIsIDB4YWIpO1xuY29uc3QgUk9PVF9QVUIgPSBlbmNvZGVEZXJpdmFibGVFZDI1NTE5UHViKFBVQkxJQ19LRVksIENIQUlOX0NPREUpO1xuY29uc3QgUk9PVF9LRVlDSEFJTiA9IEJ1ZmZlci5jb25jYXQoW1BVQkxJQ19LRVksIENIQUlOX0NPREVdKS50b1N0cmluZygnaGV4Jyk7XG5jb25zdCBTVFJLRVlfUFVCTElDID0gJ0dBNVdVSjU0WjIzS0lMTENVT1VOQUtUUEJWWldLTVFWTzRPNkVRNUdITEFFUklNTExITkNTS1lIJztcbmNvbnN0IFNUUktFWV9TRUVEID0gJ1NBQUFDQVFEQVFDUU1CWUlCRUZBV0RBTkJZSFJBRUlTQ01LQktGUVhEQU1SVUdZNERVUEI2TktJJztcblxuZGVzY3JpYmUoJ2Rlcml2YWJsZUVkMjU1MTlQdWInLCBmdW5jdGlvbiAoKSB7XG4gIGRlc2NyaWJlKCdiYXNlMzIgcm9vdCBmb3JtYXQnLCBmdW5jdGlvbiAoKSB7XG4gICAgaXQoJ2VuY29kZXMgMzItYnl0ZSBwdWJsaWMga2V5IHBsdXMgMzItYnl0ZSBjaGFpbiBjb2RlJywgZnVuY3Rpb24gKCkge1xuICAgICAgREVSSVZBQkxFX0VEMjU1MTlfQ0hBSU5fQ09ERV9CWVRFUy5zaG91bGQuZXF1YWwoMzIpO1xuICAgICAgREVSSVZBQkxFX0VEMjU1MTlfUFVCX0xFTkdUSC5zaG91bGQuZXF1YWwoMTAzKTtcbiAgICAgIFJPT1RfUFVCLnNob3VsZC5tYXRjaCgvXltBLVoyLTddezEwM30kLyk7XG4gICAgICBkZWNvZGVEZXJpdmFibGVFZDI1NTE5UHViKFJPT1RfUFVCKS5wdWIuZXF1YWxzKFBVQkxJQ19LRVkpLnNob3VsZC5lcXVhbCh0cnVlKTtcbiAgICAgIGRlY29kZURlcml2YWJsZUVkMjU1MTlQdWIoUk9PVF9QVUIpLmNoYWluQ29kZS5lcXVhbHMoQ0hBSU5fQ09ERSkuc2hvdWxkLmVxdWFsKHRydWUpO1xuICAgIH0pO1xuXG4gICAgaXQoJ21hdGNoZXMgdGhlIGNvbnN0YW50cyBwaW5uZWQgaW4gdGhlIHNoYXJlZCBmaXh0dXJlJywgZnVuY3Rpb24gKCkge1xuICAgICAgREVSSVZBQkxFX0VEMjU1MTlfUFVCX0xFTkdUSC5zaG91bGQuZXF1YWwoZml4dHVyZS5yb290UHViQmFzZTMyTGVuZ3RoKTtcbiAgICAgIERFUklWQUJMRV9FRDI1NTE5X0NIQUlOX0NPREVfQllURVMuc2hvdWxkLmVxdWFsKGZpeHR1cmUuY2hhaW5Db2RlQnl0ZXMpO1xuICAgIH0pO1xuXG4gICAgaXQoJ2dlbmVyYXRlcyByYXcgY2hhaW4gY29kZSBmb3Igcm9vdCBjb21wb3NpdGlvbicsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGdlbmVyYXRlRWQyNTUxOUNoYWluQ29kZSgpLmxlbmd0aC5zaG91bGQuZXF1YWwoMzIpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnZml4dHVyZSB2ZWN0b3JzJywgZnVuY3Rpb24gKCkge1xuICAgIGZvciAoY29uc3QgdmVjdG9yIG9mIGZpeHR1cmUudmFsaWQpIHtcbiAgICAgIGl0KGByb3VuZC10cmlwcyAke3ZlY3Rvci5uYW1lfWAsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgY29uc3QgY29tcG9zaXRlID0gZW5jb2RlRGVyaXZhYmxlRWQyNTUxOVB1YihcbiAgICAgICAgICBCdWZmZXIuZnJvbSh2ZWN0b3IucHViLCAnaGV4JyksXG4gICAgICAgICAgQnVmZmVyLmZyb20odmVjdG9yLmNoYWluQ29kZSwgJ2hleCcpXG4gICAgICAgICk7XG4gICAgICAgIGNvbXBvc2l0ZS5zaG91bGQuZXF1YWwodmVjdG9yLmNvbXBvc2l0ZSk7XG4gICAgICAgIGNvbnN0IGRlY29kZWQgPSBkZWNvZGVEZXJpdmFibGVFZDI1NTE5UHViKHZlY3Rvci5jb21wb3NpdGUpO1xuICAgICAgICBkZWNvZGVkLnB1Yi50b1N0cmluZygnaGV4Jykuc2hvdWxkLmVxdWFsKHZlY3Rvci5wdWIpO1xuICAgICAgICBkZWNvZGVkLmNoYWluQ29kZS50b1N0cmluZygnaGV4Jykuc2hvdWxkLmVxdWFsKHZlY3Rvci5jaGFpbkNvZGUpO1xuICAgICAgICBpc0Rlcml2YWJsZUVkMjU1MTlQdWIodmVjdG9yLmNvbXBvc2l0ZSkuc2hvdWxkLmVxdWFsKHRydWUpO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgZm9yIChjb25zdCB2ZWN0b3Igb2YgZml4dHVyZS5pbnZhbGlkQ29tcG9zaXRlKSB7XG4gICAgICBpdChgcmVqZWN0cyAke3ZlY3Rvci5uYW1lfWAsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaXNEZXJpdmFibGVFZDI1NTE5UHViKHZlY3Rvci5jb21wb3NpdGUpLnNob3VsZC5lcXVhbChmYWxzZSk7XG4gICAgICAgICgoKSA9PiBkZWNvZGVEZXJpdmFibGVFZDI1NTE5UHViKHZlY3Rvci5jb21wb3NpdGUpKS5zaG91bGQudGhyb3coL0ludmFsaWQgZGVyaXZhYmxlIGVkMjU1MTkgcHViLyk7XG4gICAgICB9KTtcbiAgICB9XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdyYXcgcHVibGljIHNvZnQgZGVyaXZhdGlvbicsIGZ1bmN0aW9uICgpIHtcbiAgICBpdCgnZGVyaXZlcyBhIGRldGVybWluaXN0aWMgcHVibGljIGtleSBhbmQgZGlzY2FyZHMgdGhlIGNoaWxkIGNoYWluIGNvZGUnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBlZGRzYSA9IGF3YWl0IEVkZHNhLmluaXRpYWxpemUoYXdhaXQgRWQyNTUxOUJJUDMyLmluaXRpYWxpemUoKSk7XG4gICAgICBjb25zdCBkZXJpdmVkID0gZWRkc2EuZGVyaXZlVW5oYXJkZW5lZChST09UX0tFWUNIQUlOLCAnbS83Jyk7XG4gICAgICBkZXJpdmVkLmxlbmd0aC5zaG91bGQuZXF1YWwoMTI4KTtcbiAgICAgIGRlcml2ZWQuc2xpY2UoMCwgNjQpLnNob3VsZC5tYXRjaCgvXlswLTlhLWZdezY0fSQvKTtcbiAgICAgIGRlcml2ZWQuc2xpY2UoNjQpLnNob3VsZC5tYXRjaCgvXlswLTlhLWZdezY0fSQvKTtcbiAgICAgIChhd2FpdCBzb2Z0RGVyaXZlQ2hpbGRQdWJFZDI1NTE5KFJPT1RfUFVCLCA3KSkudG9TdHJpbmcoJ2hleCcpLnNob3VsZC5lcXVhbChkZXJpdmVkLnNsaWNlKDAsIDY0KSk7XG4gICAgfSk7XG5cbiAgICAvLyBUaGUgZ29sZGVuIHZlY3RvcnMgYmVsb3cgcGluIHRoZSB1bmhhcmRlbmVkIGRlcml2YXRpb24gb3V0cHV0IHNoYXJlZCBjcm9zcy1yZXBvIHdpdGhcbiAgICAvLyB3YWxsZXQtcGxhdGZvcm06IGEgZGl2ZXJnZW50IGltcGxlbWVudGF0aW9uIGRlcml2ZXMgY28tc2lnbmVyIGtleXMgbm9ib2R5IGVsc2UgY2FuXG4gICAgLy8gcmVwcm9kdWNlLCBwZXJtYW5lbnRseSBicmlja2luZyB0aGUgd2FsbGV0cyBtaW50ZWQgd2l0aCBpdC5cbiAgICBmb3IgKGNvbnN0IHZlY3RvciBvZiBmaXh0dXJlLnNvZnREZXJpdmF0aW9uKSB7XG4gICAgICBpdChgZGVyaXZlcyB0aGUgcGlubmVkIGdvbGRlbiBjaGlsZDogJHt2ZWN0b3IubmFtZX1gLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGNvbnN0IGNoaWxkID0gYXdhaXQgc29mdERlcml2ZUNoaWxkUHViRWQyNTUxOSh2ZWN0b3IuY29tcG9zaXRlLCB2ZWN0b3IuaW5kZXgpO1xuICAgICAgICBjaGlsZC50b1N0cmluZygnaGV4Jykuc2hvdWxkLmVxdWFsKHZlY3Rvci5jaGlsZFB1Yik7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBpdCgncmVqZWN0cyBhIGhhcmRlbmVkIG9yIG91dC1vZi1yYW5nZSBpbmRleCcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGF3YWl0IHNvZnREZXJpdmVDaGlsZFB1YkVkMjU1MTkoUk9PVF9QVUIsIC0xKS5zaG91bGQuYmUucmVqZWN0ZWRXaXRoKC9ub24taGFyZGVuZWQvKTtcbiAgICAgIGF3YWl0IHNvZnREZXJpdmVDaGlsZFB1YkVkMjU1MTkoUk9PVF9QVUIsIDB4ODAwMDAwMDApLnNob3VsZC5iZS5yZWplY3RlZFdpdGgoL25vbi1oYXJkZW5lZC8pO1xuICAgICAgYXdhaXQgc29mdERlcml2ZUNoaWxkUHViRWQyNTUxOShST09UX1BVQiwgMS41KS5zaG91bGQuYmUucmVqZWN0ZWRXaXRoKC9ub24taGFyZGVuZWQvKTtcbiAgICB9KTtcblxuICAgIGl0KCdyZWplY3RzIGEgbWFsZm9ybWVkIHJvb3QnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBhd2FpdCBzb2Z0RGVyaXZlQ2hpbGRQdWJFZDI1NTE5KGZpeHR1cmUuaW52YWxpZENvbXBvc2l0ZVsxXS5jb21wb3NpdGUsIDApLnNob3VsZC5iZS5yZWplY3RlZFdpdGgoXG4gICAgICAgIC9JbnZhbGlkIGRlcml2YWJsZSBlZDI1NTE5IHB1Yi9cbiAgICAgICk7XG4gICAgICBhd2FpdCBzb2Z0RGVyaXZlQ2hpbGRQdWJFZDI1NTE5KFNUUktFWV9QVUJMSUMsIDApLnNob3VsZC5iZS5yZWplY3RlZFdpdGgoL0ludmFsaWQgZGVyaXZhYmxlIGVkMjU1MTkgcHViLyk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdtdWx0aS1zZWdtZW50IHNvZnQgZGVyaXZhdGlvbicsIGZ1bmN0aW9uICgpIHtcbiAgICBjb25zdCBzZWVkID0gZGVjb2RlRWQyNTUxOVN0cktleVNlY3JldFNlZWQoU1RSS0VZX1NFRUQpO1xuICAgIGNvbnN0IHJvb3RQdWIgPSBCdWZmZXIuZnJvbShuYWNsLnNpZ24ua2V5UGFpci5mcm9tU2VlZChzZWVkKS5wdWJsaWNLZXkpO1xuICAgIGNvbnN0IHJvb3RDaGFpbkNvZGUgPSBCdWZmZXIuYWxsb2MoMzIsIDB4YWIpO1xuICAgIGNvbnN0IGNvbXBvc2l0ZSA9IGVuY29kZURlcml2YWJsZUVkMjU1MTlQdWIocm9vdFB1Yiwgcm9vdENoYWluQ29kZSk7XG4gICAgY29uc3QgY2hhaW5Db2RlU3RyID0gZW5jb2RlRWQyNTUxOUNoYWluQ29kZShyb290Q2hhaW5Db2RlKTtcblxuICAgIGl0KCdwcml2YXRlIGRlcml2ZSBwdWJsaWMgaGFsZiBtYXRjaGVzIHB1YmxpYyBkZXJpdmUgYXQgbS8wIGFuZCBtLzQ0LzI4My8yLzAnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBmb3IgKGNvbnN0IHBhdGggb2YgWydtLzAnLCAnbS80NC8yODMvMi8wJ10pIHtcbiAgICAgICAgY29uc3QgcHViID0gYXdhaXQgc29mdERlcml2ZUNoaWxkUHViRWQyNTUxOUF0UGF0aChjb21wb3NpdGUsIHBhdGgpO1xuICAgICAgICBjb25zdCBwcnYgPSBhd2FpdCBzb2Z0RGVyaXZlQ2hpbGRQcnZFZDI1NTE5QXRQYXRoKHsgc2VlZFN0cktleTogU1RSS0VZX1NFRUQsIGNoYWluQ29kZTogY2hhaW5Db2RlU3RyLCBwYXRoIH0pO1xuICAgICAgICBwcnYucHViLmVxdWFscyhwdWIpLnNob3VsZC5lcXVhbCh0cnVlKTtcbiAgICAgICAgLy8gUmVjb21wdXRlIHRoZSBwdWJsaWMgcG9pbnQgZGlyZWN0bHkgZnJvbSBrTCB0byBwcm92ZSB0aGUgcHJpdmF0ZSBzY2FsYXIgbWFwcyB0byBwdWIuXG4gICAgICAgIGJpZ0ludFRvQnVmZmVyTEUoRWRkc2EuY3VydmUuYmFzZVBvaW50TXVsdChiaWdJbnRGcm9tQnVmZmVyTEUocHJ2LmtMKSksIDMyKVxuICAgICAgICAgIC5lcXVhbHMocHJ2LnB1YilcbiAgICAgICAgICAuc2hvdWxkLmVxdWFsKHRydWUpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgaXQoJ3JlamVjdHMgaGFyZGVuZWQgYW5kIG91dC1vZi1yYW5nZSBwYXRocycsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGF3YWl0IHNvZnREZXJpdmVDaGlsZFB1YkVkMjU1MTlBdFBhdGgoY29tcG9zaXRlLCBcIm0vMCdcIikuc2hvdWxkLmJlLnJlamVjdGVkV2l0aCgvSW52YWxpZCBzb2Z0IGRlcml2YXRpb24gcGF0aC8pO1xuICAgICAgYXdhaXQgc29mdERlcml2ZUNoaWxkUHJ2RWQyNTUxOUF0UGF0aCh7XG4gICAgICAgIHNlZWRTdHJLZXk6IFNUUktFWV9TRUVELFxuICAgICAgICBjaGFpbkNvZGU6IGNoYWluQ29kZVN0cixcbiAgICAgICAgcGF0aDogXCJtLzAnXCIsXG4gICAgICB9KS5zaG91bGQuYmUucmVqZWN0ZWRXaXRoKC9JbnZhbGlkIHNvZnQgZGVyaXZhdGlvbiBwYXRoLyk7XG4gICAgICBhd2FpdCBzb2Z0RGVyaXZlQ2hpbGRQdWJFZDI1NTE5QXRQYXRoKGNvbXBvc2l0ZSwgJ20vMjE0NzQ4MzY0OCcpLnNob3VsZC5iZS5yZWplY3RlZFdpdGgoL291dCBvZiByYW5nZS8pO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnU3RlbGxhciB1c2VyLWtleSBjb2RlY3MnLCBmdW5jdGlvbiAoKSB7XG4gICAgaXQoJ2tlZXBzIFN0ZWxsYXIgZW5jb2Rpbmcgc2VwYXJhdGUgZnJvbSB0aGUgbmV1dHJhbCByb290IGZvcm1hdCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGlzVmFsaWRFZDI1NTE5U3RyS2V5UHVibGljS2V5KFNUUktFWV9QVUJMSUMpLnNob3VsZC5lcXVhbCh0cnVlKTtcbiAgICAgIGVuY29kZUVkMjU1MTlTdHJLZXlQdWJsaWNLZXkoZGVjb2RlRWQyNTUxOVN0cktleVB1YmxpY0tleShTVFJLRVlfUFVCTElDKSkuc2hvdWxkLmVxdWFsKFNUUktFWV9QVUJMSUMpO1xuICAgICAgZGVjb2RlRWQyNTUxOVN0cktleVNlY3JldFNlZWQoU1RSS0VZX1NFRUQpLmxlbmd0aC5zaG91bGQuZXF1YWwoMzIpO1xuICAgICAgaXNEZXJpdmFibGVFZDI1NTE5UHViKFNUUktFWV9QVUJMSUMpLnNob3VsZC5lcXVhbChmYWxzZSk7XG4gICAgICBpc0NoZWNrc3VtVmFsaWRTdHJLZXlFZDI1NTE5UHViKFNUUktFWV9QVUJMSUMpLnNob3VsZC5lcXVhbCh0cnVlKTtcbiAgICB9KTtcblxuICAgIGl0KCdyZWplY3RzIGEgcHVibGljIGtleSB3aXRoIGEgY29ycnVwdGVkIGNoZWNrc3VtJywgZnVuY3Rpb24gKCkge1xuICAgICAgaXNWYWxpZEVkMjU1MTlTdHJLZXlQdWJsaWNLZXkoJ0dBNVdVSjU0WjIzS0lMTENVT1VOQUtUUEJWWldLTVFWTzRPNkVRNUdITEFFUklNTExITkNTS1lBJykuc2hvdWxkLmVxdWFsKGZhbHNlKTtcbiAgICB9KTtcblxuICAgIGl0KCdyZWplY3RzIGEgc2VjcmV0IHNlZWQgd2hlcmUgYSBwdWJsaWMga2V5IGlzIHJlcXVpcmVkJywgZnVuY3Rpb24gKCkge1xuICAgICAgaXNWYWxpZEVkMjU1MTlTdHJLZXlQdWJsaWNLZXkoJ1NBNVdVSjU0WjIzS0lMTENVT1VOQUtUUEJWWldLTVFWTzRPNkVRNUdITEFFUklNTExITkNTS1lIJykuc2hvdWxkLmVxdWFsKGZhbHNlKTtcbiAgICAgICgoKSA9PiBkZWNvZGVFZDI1NTE5U3RyS2V5UHVibGljS2V5KCdTQTVXVUo1NFoyM0tJTExDVU9VTkFLVFBCVlpXS01RVk80TzZFUTVHSExBRVJJTUxMSE5DU0tZSCcpKS5zaG91bGQudGhyb3coXG4gICAgICAgIC9TdHJLZXkgcHVibGljIGtleS9cbiAgICAgICk7XG4gICAgfSk7XG5cbiAgICBpdCgncmVqZWN0cyBhIG5vbi1iYXNlMzIgY2hhcmFjdGVyLCB0aGUgZW1wdHkgc3RyaW5nLCBhbmQgbG93ZXJjYXNlJywgZnVuY3Rpb24gKCkge1xuICAgICAgaXNWYWxpZEVkMjU1MTlTdHJLZXlQdWJsaWNLZXkoJ0dBNVdVSjU0WjIzS0lMTENVT1VOQUtUUEJWWldLTVFWTzRPNkVRNUdITEFFUklNTExITkNTS1kxJykuc2hvdWxkLmVxdWFsKGZhbHNlKTtcbiAgICAgIGlzVmFsaWRFZDI1NTE5U3RyS2V5UHVibGljS2V5KCcnKS5zaG91bGQuZXF1YWwoZmFsc2UpO1xuICAgICAgaXNWYWxpZEVkMjU1MTlTdHJLZXlQdWJsaWNLZXkoU1RSS0VZX1BVQkxJQy50b0xvd2VyQ2FzZSgpKS5zaG91bGQuZXF1YWwoZmFsc2UpO1xuICAgIH0pO1xuICB9KTtcbn0pO1xuIl19
193
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVyaXZhYmxlRWQyNTUxOVB1Yi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Rlc3QvdW5pdC9iaXRnby9zYWZlL2Rlcml2YWJsZUVkMjU1MTlQdWIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxrQkFBZ0I7QUFDaEIsbUNBQW9DO0FBQ3BDLGdEQUFrQztBQUNsQyx5Q0FzQnlCO0FBRXpCLHdEQUF3RDtBQUN4RCxtR0FBbUc7QUFDbkcsOEVBQThFO0FBQzlFLDZFQUErRDtBQUUvRCxNQUFNLFVBQVUsR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3BDLE1BQU0sVUFBVSxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsRUFBRSxFQUFFLElBQUksQ0FBQyxDQUFDO0FBQzFDLE1BQU0sUUFBUSxHQUFHLElBQUEsK0JBQXlCLEVBQUMsVUFBVSxFQUFFLFVBQVUsQ0FBQyxDQUFDO0FBQ25FLE1BQU0sYUFBYSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxVQUFVLEVBQUUsVUFBVSxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDOUUsTUFBTSxhQUFhLEdBQUcsMERBQTBELENBQUM7QUFDakYsTUFBTSxXQUFXLEdBQUcsMERBQTBELENBQUM7QUFFL0UsUUFBUSxDQUFDLHFCQUFxQixFQUFFO0lBQzlCLFFBQVEsQ0FBQyxvQkFBb0IsRUFBRTtRQUM3QixFQUFFLENBQUMsb0RBQW9ELEVBQUU7WUFDdkQsd0NBQWtDLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUNwRCxrQ0FBNEIsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQy9DLFFBQVEsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLGlCQUFpQixDQUFDLENBQUM7WUFDekMsSUFB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QUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUNwRSxxRkFBcUY7WUFDckYsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNoRyxDQUFDLENBQUMsQ0FBQztRQUVILEVBQUUsQ0FBQyxxQ0FBcUMsRUFBRSxLQUFLO1lBQzdDLE1BQU0sSUFBQSx5QkFBbUIsRUFBQyxPQUFPLEVBQUUsTUFBTSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsRUFBRSxNQUFNLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxZQUFZLENBQUMsV0FBVyxDQUFDLENBQUM7WUFDM0csTUFBTSxJQUFBLHlCQUFtQixFQUFDLE9BQU8sRUFBRSxNQUFNLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLFlBQVksQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUM3RyxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgJ3Nob3VsZCc7XG5pbXBvcnQgeyBjcmVhdGVIYXNoIH0gZnJvbSAnY3J5cHRvJztcbmltcG9ydCAqIGFzIG5hY2wgZnJvbSAndHdlZXRuYWNsJztcbmltcG9ydCB7XG4gIERFUklWQUJMRV9FRDI1NTE5X0NIQUlOX0NPREVfQllURVMsXG4gIERFUklWQUJMRV9FRDI1NTE5X1BVQl9MRU5HVEgsXG4gIEVkMjU1MTlCSVAzMixcbiAgRWRkc2EsXG4gIGJpZ0ludEZyb21CdWZmZXJMRSxcbiAgYmlnSW50VG9CdWZmZXJMRSxcbiAgY2xhbXAsXG4gIGRlY29kZURlcml2YWJsZUVkMjU1MTlQdWIsXG4gIGRlY29kZUVkMjU1MTlTdHJLZXlQdWJsaWNLZXksXG4gIGRlY29kZUVkMjU1MTlTdHJLZXlTZWNyZXRTZWVkLFxuICBlbmNvZGVEZXJpdmFibGVFZDI1NTE5UHViLFxuICBlbmNvZGVFZDI1NTE5Q2hhaW5Db2RlLFxuICBlbmNvZGVFZDI1NTE5U3RyS2V5UHVibGljS2V5LFxuICBnZW5lcmF0ZUVkMjU1MTlDaGFpbkNvZGUsXG4gIGlzQ2hlY2tzdW1WYWxpZFN0cktleUVkMjU1MTlQdWIsXG4gIGlzRGVyaXZhYmxlRWQyNTUxOVB1YixcbiAgaXNWYWxpZEVkMjU1MTlTdHJLZXlQdWJsaWNLZXksXG4gIHNpZ25FZDI1NTE5RXh0ZW5kZWQsXG4gIHNvZnREZXJpdmVDaGlsZFB1YkVkMjU1MTksXG4gIHNvZnREZXJpdmVDaGlsZFB1YkVkMjU1MTlBdFBhdGgsXG4gIHNvZnREZXJpdmVDaGlsZFBydkVkMjU1MTlBdFBhdGgsXG59IGZyb20gJy4uLy4uLy4uLy4uL3NyYyc7XG5cbi8vIENyb3NzLXJlcG8gZml4dHVyZTogYnl0ZS1pZGVudGljYWwgdG8gd2FsbGV0LXBsYXRmb3JtXG4vLyB0ZXN0L3VuaXQvYmFzZS9zYWZlcy9maXh0dXJlcy9kZXJpdmFibGVFZDI1NTE5UHViLmpzb24uIEZvdXIgaW5kZXBlbmRlbnQgaW1wbGVtZW50YXRpb25zIG9mIHRoaXNcbi8vIGZvcm1hdCB3aWxsIG90aGVyd2lzZSBkcmlmdCwgYW5kIHRoZSBmYWlsdXJlIG1vZGUgaXMgdW5yZWNvdmVyYWJsZSB3YWxsZXRzLlxuaW1wb3J0ICogYXMgZml4dHVyZSBmcm9tICcuL2ZpeHR1cmVzL2Rlcml2YWJsZUVkMjU1MTlQdWIuanNvbic7XG5cbmNvbnN0IFBVQkxJQ19LRVkgPSBCdWZmZXIuYWxsb2MoMzIpO1xuY29uc3QgQ0hBSU5fQ09ERSA9IEJ1ZmZlci5hbGxvYygzMiwgMHhhYik7XG5jb25zdCBST09UX1BVQiA9IGVuY29kZURlcml2YWJsZUVkMjU1MTlQdWIoUFVCTElDX0tFWSwgQ0hBSU5fQ09ERSk7XG5jb25zdCBST09UX0tFWUNIQUlOID0gQnVmZmVyLmNvbmNhdChbUFVCTElDX0tFWSwgQ0hBSU5fQ09ERV0pLnRvU3RyaW5nKCdoZXgnKTtcbmNvbnN0IFNUUktFWV9QVUJMSUMgPSAnR0E1V1VKNTRaMjNLSUxMQ1VPVU5BS1RQQlZaV0tNUVZPNE82RVE1R0hMQUVSSU1MTEhOQ1NLWUgnO1xuY29uc3QgU1RSS0VZX1NFRUQgPSAnU0FBQUNBUURBUUNRTUJZSUJFRkFXREFOQllIUkFFSVNDTUtCS0ZRWERBTVJVR1k0RFVQQjZOS0knO1xuXG5kZXNjcmliZSgnZGVyaXZhYmxlRWQyNTUxOVB1YicsIGZ1bmN0aW9uICgpIHtcbiAgZGVzY3JpYmUoJ2Jhc2UzMiByb290IGZvcm1hdCcsIGZ1bmN0aW9uICgpIHtcbiAgICBpdCgnZW5jb2RlcyAzMi1ieXRlIHB1YmxpYyBrZXkgcGx1cyAzMi1ieXRlIGNoYWluIGNvZGUnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBERVJJVkFCTEVfRUQyNTUxOV9DSEFJTl9DT0RFX0JZVEVTLnNob3VsZC5lcXVhbCgzMik7XG4gICAgICBERVJJVkFCTEVfRUQyNTUxOV9QVUJfTEVOR1RILnNob3VsZC5lcXVhbCgxMDMpO1xuICAgICAgUk9PVF9QVUIuc2hvdWxkLm1hdGNoKC9eW0EtWjItN117MTAzfSQvKTtcbiAgICAgIGRlY29kZURlcml2YWJsZUVkMjU1MTlQdWIoUk9PVF9QVUIpLnB1Yi5lcXVhbHMoUFVCTElDX0tFWSkuc2hvdWxkLmVxdWFsKHRydWUpO1xuICAgICAgZGVjb2RlRGVyaXZhYmxlRWQyNTUxOVB1YihST09UX1BVQikuY2hhaW5Db2RlLmVxdWFscyhDSEFJTl9DT0RFKS5zaG91bGQuZXF1YWwodHJ1ZSk7XG4gICAgfSk7XG5cbiAgICBpdCgnbWF0Y2hlcyB0aGUgY29uc3RhbnRzIHBpbm5lZCBpbiB0aGUgc2hhcmVkIGZpeHR1cmUnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBERVJJVkFCTEVfRUQyNTUxOV9QVUJfTEVOR1RILnNob3VsZC5lcXVhbChmaXh0dXJlLnJvb3RQdWJCYXNlMzJMZW5ndGgpO1xuICAgICAgREVSSVZBQkxFX0VEMjU1MTlfQ0hBSU5fQ09ERV9CWVRFUy5zaG91bGQuZXF1YWwoZml4dHVyZS5jaGFpbkNvZGVCeXRlcyk7XG4gICAgfSk7XG5cbiAgICBpdCgnZ2VuZXJhdGVzIHJhdyBjaGFpbiBjb2RlIGZvciByb290IGNvbXBvc2l0aW9uJywgZnVuY3Rpb24gKCkge1xuICAgICAgZ2VuZXJhdGVFZDI1NTE5Q2hhaW5Db2RlKCkubGVuZ3RoLnNob3VsZC5lcXVhbCgzMik7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdmaXh0dXJlIHZlY3RvcnMnLCBmdW5jdGlvbiAoKSB7XG4gICAgZm9yIChjb25zdCB2ZWN0b3Igb2YgZml4dHVyZS52YWxpZCkge1xuICAgICAgaXQoYHJvdW5kLXRyaXBzICR7dmVjdG9yLm5hbWV9YCwgZnVuY3Rpb24gKCkge1xuICAgICAgICBjb25zdCBjb21wb3NpdGUgPSBlbmNvZGVEZXJpdmFibGVFZDI1NTE5UHViKFxuICAgICAgICAgIEJ1ZmZlci5mcm9tKHZlY3Rvci5wdWIsICdoZXgnKSxcbiAgICAgICAgICBCdWZmZXIuZnJvbSh2ZWN0b3IuY2hhaW5Db2RlLCAnaGV4JylcbiAgICAgICAgKTtcbiAgICAgICAgY29tcG9zaXRlLnNob3VsZC5lcXVhbCh2ZWN0b3IuY29tcG9zaXRlKTtcbiAgICAgICAgY29uc3QgZGVjb2RlZCA9IGRlY29kZURlcml2YWJsZUVkMjU1MTlQdWIodmVjdG9yLmNvbXBvc2l0ZSk7XG4gICAgICAgIGRlY29kZWQucHViLnRvU3RyaW5nKCdoZXgnKS5zaG91bGQuZXF1YWwodmVjdG9yLnB1Yik7XG4gICAgICAgIGRlY29kZWQuY2hhaW5Db2RlLnRvU3RyaW5nKCdoZXgnKS5zaG91bGQuZXF1YWwodmVjdG9yLmNoYWluQ29kZSk7XG4gICAgICAgIGlzRGVyaXZhYmxlRWQyNTUxOVB1Yih2ZWN0b3IuY29tcG9zaXRlKS5zaG91bGQuZXF1YWwodHJ1ZSk7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBmb3IgKGNvbnN0IHZlY3RvciBvZiBmaXh0dXJlLmludmFsaWRDb21wb3NpdGUpIHtcbiAgICAgIGl0KGByZWplY3RzICR7dmVjdG9yLm5hbWV9YCwgZnVuY3Rpb24gKCkge1xuICAgICAgICBpc0Rlcml2YWJsZUVkMjU1MTlQdWIodmVjdG9yLmNvbXBvc2l0ZSkuc2hvdWxkLmVxdWFsKGZhbHNlKTtcbiAgICAgICAgKCgpID0+IGRlY29kZURlcml2YWJsZUVkMjU1MTlQdWIodmVjdG9yLmNvbXBvc2l0ZSkpLnNob3VsZC50aHJvdygvSW52YWxpZCBkZXJpdmFibGUgZWQyNTUxOSBwdWIvKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ3JhdyBwdWJsaWMgc29mdCBkZXJpdmF0aW9uJywgZnVuY3Rpb24gKCkge1xuICAgIGl0KCdkZXJpdmVzIGEgZGV0ZXJtaW5pc3RpYyBwdWJsaWMga2V5IGFuZCBkaXNjYXJkcyB0aGUgY2hpbGQgY2hhaW4gY29kZScsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IGVkZHNhID0gYXdhaXQgRWRkc2EuaW5pdGlhbGl6ZShhd2FpdCBFZDI1NTE5QklQMzIuaW5pdGlhbGl6ZSgpKTtcbiAgICAgIGNvbnN0IGRlcml2ZWQgPSBlZGRzYS5kZXJpdmVVbmhhcmRlbmVkKFJPT1RfS0VZQ0hBSU4sICdtLzcnKTtcbiAgICAgIGRlcml2ZWQubGVuZ3RoLnNob3VsZC5lcXVhbCgxMjgpO1xuICAgICAgZGVyaXZlZC5zbGljZSgwLCA2NCkuc2hvdWxkLm1hdGNoKC9eWzAtOWEtZl17NjR9JC8pO1xuICAgICAgZGVyaXZlZC5zbGljZSg2NCkuc2hvdWxkLm1hdGNoKC9eWzAtOWEtZl17NjR9JC8pO1xuICAgICAgKGF3YWl0IHNvZnREZXJpdmVDaGlsZFB1YkVkMjU1MTkoUk9PVF9QVUIsIDcpKS50b1N0cmluZygnaGV4Jykuc2hvdWxkLmVxdWFsKGRlcml2ZWQuc2xpY2UoMCwgNjQpKTtcbiAgICB9KTtcblxuICAgIC8vIFRoZSBnb2xkZW4gdmVjdG9ycyBiZWxvdyBwaW4gdGhlIHVuaGFyZGVuZWQgZGVyaXZhdGlvbiBvdXRwdXQgc2hhcmVkIGNyb3NzLXJlcG8gd2l0aFxuICAgIC8vIHdhbGxldC1wbGF0Zm9ybTogYSBkaXZlcmdlbnQgaW1wbGVtZW50YXRpb24gZGVyaXZlcyBjby1zaWduZXIga2V5cyBub2JvZHkgZWxzZSBjYW5cbiAgICAvLyByZXByb2R1Y2UsIHBlcm1hbmVudGx5IGJyaWNraW5nIHRoZSB3YWxsZXRzIG1pbnRlZCB3aXRoIGl0LlxuICAgIGZvciAoY29uc3QgdmVjdG9yIG9mIGZpeHR1cmUuc29mdERlcml2YXRpb24pIHtcbiAgICAgIGl0KGBkZXJpdmVzIHRoZSBwaW5uZWQgZ29sZGVuIGNoaWxkOiAke3ZlY3Rvci5uYW1lfWAsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgLy8gVGhlIHB1Yi9jaGFpbkNvZGUgZmllbGRzIG11c3QgZW5jb2RlIHRvIHRoZSBjb21wb3NpdGUgYWN0dWFsbHkgZGVyaXZlZCBmcm9tLlxuICAgICAgICBlbmNvZGVEZXJpdmFibGVFZDI1NTE5UHViKEJ1ZmZlci5mcm9tKHZlY3Rvci5wdWIsICdoZXgnKSwgQnVmZmVyLmZyb20odmVjdG9yLmNoYWluQ29kZSwgJ2hleCcpKS5zaG91bGQuZXF1YWwoXG4gICAgICAgICAgdmVjdG9yLmNvbXBvc2l0ZVxuICAgICAgICApO1xuICAgICAgICBjb25zdCBjaGlsZCA9IGF3YWl0IHNvZnREZXJpdmVDaGlsZFB1YkVkMjU1MTkodmVjdG9yLmNvbXBvc2l0ZSwgdmVjdG9yLmluZGV4KTtcbiAgICAgICAgY2hpbGQudG9TdHJpbmcoJ2hleCcpLnNob3VsZC5lcXVhbCh2ZWN0b3IuY2hpbGRQdWIpO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgaXQoJ3JlamVjdHMgYSBoYXJkZW5lZCBvciBvdXQtb2YtcmFuZ2UgaW5kZXgnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBhd2FpdCBzb2Z0RGVyaXZlQ2hpbGRQdWJFZDI1NTE5KFJPT1RfUFVCLCAtMSkuc2hvdWxkLmJlLnJlamVjdGVkV2l0aCgvbm9uLWhhcmRlbmVkLyk7XG4gICAgICBhd2FpdCBzb2Z0RGVyaXZlQ2hpbGRQdWJFZDI1NTE5KFJPT1RfUFVCLCAweDgwMDAwMDAwKS5zaG91bGQuYmUucmVqZWN0ZWRXaXRoKC9ub24taGFyZGVuZWQvKTtcbiAgICAgIGF3YWl0IHNvZnREZXJpdmVDaGlsZFB1YkVkMjU1MTkoUk9PVF9QVUIsIDEuNSkuc2hvdWxkLmJlLnJlamVjdGVkV2l0aCgvbm9uLWhhcmRlbmVkLyk7XG4gICAgfSk7XG5cbiAgICBpdCgncmVqZWN0cyBhIG1hbGZvcm1lZCByb290JywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgYXdhaXQgc29mdERlcml2ZUNoaWxkUHViRWQyNTUxOShmaXh0dXJlLmludmFsaWRDb21wb3NpdGVbMV0uY29tcG9zaXRlLCAwKS5zaG91bGQuYmUucmVqZWN0ZWRXaXRoKFxuICAgICAgICAvSW52YWxpZCBkZXJpdmFibGUgZWQyNTUxOSBwdWIvXG4gICAgICApO1xuICAgICAgYXdhaXQgc29mdERlcml2ZUNoaWxkUHViRWQyNTUxOShTVFJLRVlfUFVCTElDLCAwKS5zaG91bGQuYmUucmVqZWN0ZWRXaXRoKC9JbnZhbGlkIGRlcml2YWJsZSBlZDI1NTE5IHB1Yi8pO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnbXVsdGktc2VnbWVudCBzb2Z0IGRlcml2YXRpb24nLCBmdW5jdGlvbiAoKSB7XG4gICAgY29uc3Qgc2VlZCA9IGRlY29kZUVkMjU1MTlTdHJLZXlTZWNyZXRTZWVkKFNUUktFWV9TRUVEKTtcbiAgICBjb25zdCByb290UHViID0gQnVmZmVyLmZyb20obmFjbC5zaWduLmtleVBhaXIuZnJvbVNlZWQoc2VlZCkucHVibGljS2V5KTtcbiAgICBjb25zdCByb290Q2hhaW5Db2RlID0gQnVmZmVyLmFsbG9jKDMyLCAweGFiKTtcbiAgICBjb25zdCBjb21wb3NpdGUgPSBlbmNvZGVEZXJpdmFibGVFZDI1NTE5UHViKHJvb3RQdWIsIHJvb3RDaGFpbkNvZGUpO1xuICAgIGNvbnN0IGNoYWluQ29kZVN0ciA9IGVuY29kZUVkMjU1MTlDaGFpbkNvZGUocm9vdENoYWluQ29kZSk7XG5cbiAgICBpdCgncHJpdmF0ZSBkZXJpdmUgcHVibGljIGhhbGYgbWF0Y2hlcyBwdWJsaWMgZGVyaXZlIGF0IG0vMCBhbmQgbS80NC8yODMvMi8wJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgZm9yIChjb25zdCBwYXRoIG9mIFsnbS8wJywgJ20vNDQvMjgzLzIvMCddKSB7XG4gICAgICAgIGNvbnN0IHB1YiA9IGF3YWl0IHNvZnREZXJpdmVDaGlsZFB1YkVkMjU1MTlBdFBhdGgoY29tcG9zaXRlLCBwYXRoKTtcbiAgICAgICAgY29uc3QgcHJ2ID0gYXdhaXQgc29mdERlcml2ZUNoaWxkUHJ2RWQyNTUxOUF0UGF0aCh7IHNlZWRTdHJLZXk6IFNUUktFWV9TRUVELCBjaGFpbkNvZGU6IGNoYWluQ29kZVN0ciwgcGF0aCB9KTtcbiAgICAgICAgcHJ2LnB1Yi5lcXVhbHMocHViKS5zaG91bGQuZXF1YWwodHJ1ZSk7XG4gICAgICAgIC8vIFJlY29tcHV0ZSB0aGUgcHVibGljIHBvaW50IGRpcmVjdGx5IGZyb20ga0wgdG8gcHJvdmUgdGhlIHByaXZhdGUgc2NhbGFyIG1hcHMgdG8gcHViLlxuICAgICAgICBiaWdJbnRUb0J1ZmZlckxFKEVkZHNhLmN1cnZlLmJhc2VQb2ludE11bHQoYmlnSW50RnJvbUJ1ZmZlckxFKHBydi5rTCkpLCAzMilcbiAgICAgICAgICAuZXF1YWxzKHBydi5wdWIpXG4gICAgICAgICAgLnNob3VsZC5lcXVhbCh0cnVlKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGl0KCdyZWplY3RzIGhhcmRlbmVkIGFuZCBvdXQtb2YtcmFuZ2UgcGF0aHMnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBhd2FpdCBzb2Z0RGVyaXZlQ2hpbGRQdWJFZDI1NTE5QXRQYXRoKGNvbXBvc2l0ZSwgXCJtLzAnXCIpLnNob3VsZC5iZS5yZWplY3RlZFdpdGgoL0ludmFsaWQgc29mdCBkZXJpdmF0aW9uIHBhdGgvKTtcbiAgICAgIGF3YWl0IHNvZnREZXJpdmVDaGlsZFBydkVkMjU1MTlBdFBhdGgoe1xuICAgICAgICBzZWVkU3RyS2V5OiBTVFJLRVlfU0VFRCxcbiAgICAgICAgY2hhaW5Db2RlOiBjaGFpbkNvZGVTdHIsXG4gICAgICAgIHBhdGg6IFwibS8wJ1wiLFxuICAgICAgfSkuc2hvdWxkLmJlLnJlamVjdGVkV2l0aCgvSW52YWxpZCBzb2Z0IGRlcml2YXRpb24gcGF0aC8pO1xuICAgICAgYXdhaXQgc29mdERlcml2ZUNoaWxkUHViRWQyNTUxOUF0UGF0aChjb21wb3NpdGUsICdtLzIxNDc0ODM2NDgnKS5zaG91bGQuYmUucmVqZWN0ZWRXaXRoKC9vdXQgb2YgcmFuZ2UvKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ1N0ZWxsYXIgdXNlci1rZXkgY29kZWNzJywgZnVuY3Rpb24gKCkge1xuICAgIGl0KCdrZWVwcyBTdGVsbGFyIGVuY29kaW5nIHNlcGFyYXRlIGZyb20gdGhlIG5ldXRyYWwgcm9vdCBmb3JtYXQnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBpc1ZhbGlkRWQyNTUxOVN0cktleVB1YmxpY0tleShTVFJLRVlfUFVCTElDKS5zaG91bGQuZXF1YWwodHJ1ZSk7XG4gICAgICBlbmNvZGVFZDI1NTE5U3RyS2V5UHVibGljS2V5KGRlY29kZUVkMjU1MTlTdHJLZXlQdWJsaWNLZXkoU1RSS0VZX1BVQkxJQykpLnNob3VsZC5lcXVhbChTVFJLRVlfUFVCTElDKTtcbiAgICAgIGRlY29kZUVkMjU1MTlTdHJLZXlTZWNyZXRTZWVkKFNUUktFWV9TRUVEKS5sZW5ndGguc2hvdWxkLmVxdWFsKDMyKTtcbiAgICAgIGlzRGVyaXZhYmxlRWQyNTUxOVB1YihTVFJLRVlfUFVCTElDKS5zaG91bGQuZXF1YWwoZmFsc2UpO1xuICAgICAgaXNDaGVja3N1bVZhbGlkU3RyS2V5RWQyNTUxOVB1YihTVFJLRVlfUFVCTElDKS5zaG91bGQuZXF1YWwodHJ1ZSk7XG4gICAgfSk7XG5cbiAgICBpdCgncmVqZWN0cyBhIHB1YmxpYyBrZXkgd2l0aCBhIGNvcnJ1cHRlZCBjaGVja3N1bScsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGlzVmFsaWRFZDI1NTE5U3RyS2V5UHVibGljS2V5KCdHQTVXVUo1NFoyM0tJTExDVU9VTkFLVFBCVlpXS01RVk80TzZFUTVHSExBRVJJTUxMSE5DU0tZQScpLnNob3VsZC5lcXVhbChmYWxzZSk7XG4gICAgfSk7XG5cbiAgICBpdCgncmVqZWN0cyBhIHNlY3JldCBzZWVkIHdoZXJlIGEgcHVibGljIGtleSBpcyByZXF1aXJlZCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGlzVmFsaWRFZDI1NTE5U3RyS2V5UHVibGljS2V5KCdTQTVXVUo1NFoyM0tJTExDVU9VTkFLVFBCVlpXS01RVk80TzZFUTVHSExBRVJJTUxMSE5DU0tZSCcpLnNob3VsZC5lcXVhbChmYWxzZSk7XG4gICAgICAoKCkgPT4gZGVjb2RlRWQyNTUxOVN0cktleVB1YmxpY0tleSgnU0E1V1VKNTRaMjNLSUxMQ1VPVU5BS1RQQlZaV0tNUVZPNE82RVE1R0hMQUVSSU1MTEhOQ1NLWUgnKSkuc2hvdWxkLnRocm93KFxuICAgICAgICAvU3RyS2V5IHB1YmxpYyBrZXkvXG4gICAgICApO1xuICAgIH0pO1xuXG4gICAgaXQoJ3JlamVjdHMgYSBub24tYmFzZTMyIGNoYXJhY3RlciwgdGhlIGVtcHR5IHN0cmluZywgYW5kIGxvd2VyY2FzZScsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGlzVmFsaWRFZDI1NTE5U3RyS2V5UHVibGljS2V5KCdHQTVXVUo1NFoyM0tJTExDVU9VTkFLVFBCVlpXS01RVk80TzZFUTVHSExBRVJJTUxMSE5DU0tZMScpLnNob3VsZC5lcXVhbChmYWxzZSk7XG4gICAgICBpc1ZhbGlkRWQyNTUxOVN0cktleVB1YmxpY0tleSgnJykuc2hvdWxkLmVxdWFsKGZhbHNlKTtcbiAgICAgIGlzVmFsaWRFZDI1NTE5U3RyS2V5UHVibGljS2V5KFNUUktFWV9QVUJMSUMudG9Mb3dlckNhc2UoKSkuc2hvdWxkLmVxdWFsKGZhbHNlKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ2V4dGVuZGVkLWtleSBzaWduaW5nJywgZnVuY3Rpb24gKCkge1xuICAgIGNvbnN0IHNlZWQgPSBkZWNvZGVFZDI1NTE5U3RyS2V5U2VjcmV0U2VlZChTVFJLRVlfU0VFRCk7XG4gICAgY29uc3QgbWVzc2FnZSA9IEJ1ZmZlci5mcm9tKCdleHRlbmRlZC1rZXkgc2lnbmF0dXJlJyk7XG4gICAgY29uc3Qgcm9vdENoYWluQ29kZSA9IEJ1ZmZlci5hbGxvYygzMiwgMHhhYik7XG4gICAgY29uc3QgY2hhaW5Db2RlU3RyID0gZW5jb2RlRWQyNTUxOUNoYWluQ29kZShyb290Q2hhaW5Db2RlKTtcblxuICAgIGl0KCdtYXRjaGVzIHRoZSBzZWVkLWJhc2VkIHNpZ25lciBmb3IgYSBzZWVkLWJhY2tlZCBrZXknLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBoID0gY3JlYXRlSGFzaCgnc2hhNTEyJykudXBkYXRlKHNlZWQpLmRpZ2VzdCgpO1xuICAgICAgY29uc3Qga0wgPSBiaWdJbnRUb0J1ZmZlckxFKGNsYW1wKGJpZ0ludEZyb21CdWZmZXJMRShoLnN1YmFycmF5KDAsIDMyKSkpLCAzMik7XG4gICAgICBjb25zdCBrUiA9IGguc3ViYXJyYXkoMzIpO1xuICAgICAgY29uc3Qgc2lnID0gYXdhaXQgc2lnbkVkMjU1MTlFeHRlbmRlZChtZXNzYWdlLCBrTCwga1IpO1xuICAgICAgY29uc3QgZXhwZWN0ZWQgPSBCdWZmZXIuZnJvbShuYWNsLnNpZ24uZGV0YWNoZWQobWVzc2FnZSwgbmFjbC5zaWduLmtleVBhaXIuZnJvbVNlZWQoc2VlZCkuc2VjcmV0S2V5KSk7XG4gICAgICBzaWcuZXF1YWxzKGV4cGVjdGVkKS5zaG91bGQuZXF1YWwodHJ1ZSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2lnbnMgYSBzb2Z0LWRlcml2ZWQga2V5IHdpdGggbm8gc2VlZCBhbmQgdmVyaWZpZXMgYWdhaW5zdCBpdHMgcHViJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgcHJ2ID0gYXdhaXQgc29mdERlcml2ZUNoaWxkUHJ2RWQyNTUxOUF0UGF0aCh7XG4gICAgICAgIHNlZWRTdHJLZXk6IFNUUktFWV9TRUVELFxuICAgICAgICBjaGFpbkNvZGU6IGNoYWluQ29kZVN0cixcbiAgICAgICAgcGF0aDogJ20vMCcsXG4gICAgICB9KTtcbiAgICAgIGNvbnN0IHNpZyA9IGF3YWl0IHNpZ25FZDI1NTE5RXh0ZW5kZWQobWVzc2FnZSwgcHJ2LmtMLCBwcnYua1IpO1xuICAgICAgbmFjbC5zaWduLmRldGFjaGVkLnZlcmlmeShtZXNzYWdlLCBzaWcsIHBydi5wdWIpLnNob3VsZC5lcXVhbCh0cnVlKTtcbiAgICAgIC8vIFRoZSBzb2Z0LWRlcml2ZWQgc2NhbGFyIGhhcyBubyBzZWVkOiB0cmVhdGluZyBrTCBhcyBhIHNlZWQgeWllbGRzIGEgZGlmZmVyZW50IHB1Yi5cbiAgICAgIEJ1ZmZlci5mcm9tKG5hY2wuc2lnbi5rZXlQYWlyLmZyb21TZWVkKHBydi5rTCkucHVibGljS2V5KS5lcXVhbHMocHJ2LnB1Yikuc2hvdWxkLmVxdWFsKGZhbHNlKTtcbiAgICB9KTtcblxuICAgIGl0KCdyZWplY3RzIGtML2tSIHRoYXQgYXJlIG5vdCAzMiBieXRlcycsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGF3YWl0IHNpZ25FZDI1NTE5RXh0ZW5kZWQobWVzc2FnZSwgQnVmZmVyLmFsbG9jKDMxKSwgQnVmZmVyLmFsbG9jKDMyKSkuc2hvdWxkLmJlLnJlamVjdGVkV2l0aCgva0wgbGVuZ3RoLyk7XG4gICAgICBhd2FpdCBzaWduRWQyNTUxOUV4dGVuZGVkKG1lc3NhZ2UsIEJ1ZmZlci5hbGxvYygzMiksIEJ1ZmZlci5hbGxvYygzMykpLnNob3VsZC5iZS5yZWplY3RlZFdpdGgoL2tSIGxlbmd0aC8pO1xuICAgIH0pO1xuICB9KTtcbn0pO1xuIl19
@@ -64,7 +64,7 @@
64
64
  "name": "root B at max non-hardened m/2147483647",
65
65
  "index": 2147483647,
66
66
  "pub": "6af98980a20d1d090d729aee97e8cab65df61eeec9dc7b6070baa6b0e02f860d",
67
- "chainCode": "cdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcd",
67
+ "chainCode": "cdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcd",
68
68
  "composite": "NL4YTAFCBUOQSDLSTLXJP2GKWZO7MHXOZHOHWYDQXKTLBYBPQYG43TONZXG43TONZXG43TONZXG43TONZXG43TONZXG43TONZXG43TI",
69
69
  "childPub": "acda5ebd6543ed99141eb9da0cf1101e3ce11a637ee83743786b67a3b319439e"
70
70
  }
@@ -0,0 +1,319 @@
1
+ {
2
+ "$comment": "Shared BIP44 safe child-derivation golden vectors: byte-identical to packages/wallet-platform/test/unit/base/safes/fixtures/safeBip44Vectors.json. Scheme: the safe user child derives at the hardened path m/44'/<coinType>'/<slot>'/<account>' and the multisig co-signers at its soft twin m/44/<coinType>/<slot>/<account>, where <coinType> is the statics bip44CoinType of the coin family and <slot> is the statics SAFE_ROOT_SLOT_ORDINALS value of the root slot. Every root is a published public test vector (the BIP32 test vectors 1/2/3 seeds and the SLIP-0010-style StrKey seed SAAACAQDAQCQMBYIBEFAWDANBYHRAEISCMKBKFQXDAMRUGY4DUPB6NKI, raw seed 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f), so both repos reproduce every value without sharing secrets. A divergent implementation mints co-signer keys nobody else can reproduce, permanently bricking the wallets minted with it.",
3
+ "slotOrdinals": {
4
+ "secp256k1Multisig": 1,
5
+ "ed25519Multisig": 2,
6
+ "ecdsaMpc": 3,
7
+ "eddsaMpc": 4
8
+ },
9
+ "coinTypes": [
10
+ {
11
+ "name": "L1 bitcoin",
12
+ "coin": "btc",
13
+ "family": "btc",
14
+ "coinType": 0,
15
+ "derivable": true
16
+ },
17
+ {
18
+ "name": "testnet mirrors its mainnet coin type",
19
+ "coin": "tbtc",
20
+ "family": "btc",
21
+ "coinType": 0,
22
+ "derivable": true
23
+ },
24
+ {
25
+ "name": "ed25519 L1",
26
+ "coin": "xlm",
27
+ "family": "xlm",
28
+ "coinType": 148,
29
+ "derivable": true
30
+ },
31
+ {
32
+ "name": "ed25519 MPC L1",
33
+ "coin": "sol",
34
+ "family": "sol",
35
+ "coinType": 501,
36
+ "derivable": true
37
+ },
38
+ {
39
+ "name": "EVM L1",
40
+ "coin": "eth",
41
+ "family": "eth",
42
+ "coinType": 60,
43
+ "derivable": true
44
+ },
45
+ {
46
+ "name": "EVM L2 in the BitGo-assigned band",
47
+ "coin": "arbeth",
48
+ "family": "arbeth",
49
+ "coinType": 1879048194,
50
+ "derivable": true
51
+ },
52
+ {
53
+ "name": "second EVM L2 in the BitGo-assigned band",
54
+ "coin": "baseeth",
55
+ "family": "baseeth",
56
+ "coinType": 1879048198,
57
+ "derivable": true
58
+ },
59
+ {
60
+ "name": "token inherits its parent chain",
61
+ "coin": "usdc",
62
+ "family": "eth",
63
+ "coinType": 60,
64
+ "derivable": true
65
+ },
66
+ {
67
+ "name": "token inherits a BitGo-assigned parent",
68
+ "coin": "baseeth:usdc",
69
+ "family": "baseeth",
70
+ "coinType": 1879048198,
71
+ "derivable": true
72
+ }
73
+ ],
74
+ "notDerivable": [
75
+ {
76
+ "name": "OFC coin",
77
+ "coin": "ofcbtc"
78
+ },
79
+ {
80
+ "name": "fiat coin",
81
+ "coin": "fiatusd"
82
+ }
83
+ ],
84
+ "paths": [
85
+ {
86
+ "name": "btc slot 1 account 0",
87
+ "coin": "btc",
88
+ "coinType": 0,
89
+ "slot": "secp256k1Multisig",
90
+ "slotOrdinal": 1,
91
+ "account": 0,
92
+ "userPath": "m/44'/0'/1'/0'",
93
+ "cosignerPath": "m/44/0/1/0"
94
+ },
95
+ {
96
+ "name": "tbtc slot 1 account 1",
97
+ "coin": "tbtc",
98
+ "coinType": 0,
99
+ "slot": "secp256k1Multisig",
100
+ "slotOrdinal": 1,
101
+ "account": 1,
102
+ "userPath": "m/44'/0'/1'/1'",
103
+ "cosignerPath": "m/44/0/1/1"
104
+ },
105
+ {
106
+ "name": "xlm slot 2 account 0",
107
+ "coin": "xlm",
108
+ "coinType": 148,
109
+ "slot": "ed25519Multisig",
110
+ "slotOrdinal": 2,
111
+ "account": 0,
112
+ "userPath": "m/44'/148'/2'/0'",
113
+ "cosignerPath": "m/44/148/2/0"
114
+ },
115
+ {
116
+ "name": "xlm slot 2 account 7",
117
+ "coin": "xlm",
118
+ "coinType": 148,
119
+ "slot": "ed25519Multisig",
120
+ "slotOrdinal": 2,
121
+ "account": 7,
122
+ "userPath": "m/44'/148'/2'/7'",
123
+ "cosignerPath": "m/44/148/2/7"
124
+ },
125
+ {
126
+ "name": "arbeth slot 1 account 0",
127
+ "coin": "arbeth",
128
+ "coinType": 1879048194,
129
+ "slot": "secp256k1Multisig",
130
+ "slotOrdinal": 1,
131
+ "account": 0,
132
+ "userPath": "m/44'/1879048194'/1'/0'",
133
+ "cosignerPath": "m/44/1879048194/1/0"
134
+ },
135
+ {
136
+ "name": "arbeth slot 3 account 0",
137
+ "coin": "arbeth",
138
+ "coinType": 1879048194,
139
+ "slot": "ecdsaMpc",
140
+ "slotOrdinal": 3,
141
+ "account": 0,
142
+ "userPath": "m/44'/1879048194'/3'/0'",
143
+ "cosignerPath": "m/44/1879048194/3/0"
144
+ },
145
+ {
146
+ "name": "baseeth slot 3 account 0",
147
+ "coin": "baseeth",
148
+ "coinType": 1879048198,
149
+ "slot": "ecdsaMpc",
150
+ "slotOrdinal": 3,
151
+ "account": 0,
152
+ "userPath": "m/44'/1879048198'/3'/0'",
153
+ "cosignerPath": "m/44/1879048198/3/0"
154
+ },
155
+ {
156
+ "name": "sol slot 4 account 0",
157
+ "coin": "sol",
158
+ "coinType": 501,
159
+ "slot": "eddsaMpc",
160
+ "slotOrdinal": 4,
161
+ "account": 0,
162
+ "userPath": "m/44'/501'/4'/0'",
163
+ "cosignerPath": "m/44/501/4/0"
164
+ },
165
+ {
166
+ "name": "sol slot 4 max account",
167
+ "coin": "sol",
168
+ "coinType": 501,
169
+ "slot": "eddsaMpc",
170
+ "slotOrdinal": 4,
171
+ "account": 2147483647,
172
+ "userPath": "m/44'/501'/4'/2147483647'",
173
+ "cosignerPath": "m/44/501/4/2147483647"
174
+ }
175
+ ],
176
+ "secp256k1": {
177
+ "roots": {
178
+ "user": {
179
+ "seedHex": "000102030405060708090a0b0c0d0e0f",
180
+ "rootXpub": "xpub661MyMwAqRbcFtXgS5sYJABqqG9YLmC4Q1Rdap9gSE8NqtwybGhePY2gZ29ESFjqJoCu1Rupje8YtGqsefD265TMg7usUDFdp6W1EGMcet8"
181
+ },
182
+ "backup": {
183
+ "seedHex": "fffcf9f6f3f0edeae7e4e1dedbd8d5d2cfccc9c6c3c0bdbab7b4b1aeaba8a5a29f9c999693908d8a8784817e7b7875726f6c696663605d5a5754514e4b484542",
184
+ "rootXpub": "xpub661MyMwAqRbcFW31YEwpkMuc5THy2PSt5bDMsktWQcFF8syAmRUapSCGu8ED9W6oDMSgv6Zz8idoc4a6mr8BDzTJY47LJhkJ8UB7WEGuduB"
185
+ },
186
+ "bitgo": {
187
+ "seedHex": "4b381541583be4423346c643850da4b320e46a87ae3d2a4e6da11eba819cd4acba45d239319ac14f863b8d5ab5a0d0c64d2e8a1e7d1457df2e5a3c51c73235be",
188
+ "rootXpub": "xpub661MyMwAqRbcEZVB4dScxMAdx6d4nFc9nvyvH3v4gJL378CSRZiYmhRoP7mBy6gSPSCYk6SzXPTf3ND1cZAceL7SfJ1Z3GC8vBgp2epUt13"
189
+ }
190
+ },
191
+ "vectors": [
192
+ {
193
+ "name": "btc slot 1 account 0",
194
+ "coin": "btc",
195
+ "slot": "secp256k1Multisig",
196
+ "account": 0,
197
+ "userPath": "m/44'/0'/1'/0'",
198
+ "cosignerPath": "m/44/0/1/0",
199
+ "userChildPub": "xpub6FAmCnN5quzdacVrq9uYbn68tEPZkScW6G2iDYRYsT6fGWqLKt5S1CfZdyppz139P8DJxpoRZMjTRZZfqD3FutJTd538WYrSxs77srFyGnJ",
200
+ "backupChildPub": "xpub6EDabqKhEeBuQY9aPL6dik9Cm5GwHzfs5vRrLaK2NTgDTDYMo5NxHqBU11JvWqrjMxZxi15LtR5inMopdXyEatxoFEgLRkmNMtMwMVErtY7",
201
+ "bitgoChildPub": "xpub6FKz5cr84TYXR9LgsfbMAG1RerknmpAJpA6ySF19t391LRBDqFcPHszX3TAJL1UDpgBS59brz5t3D27fcFXC8RBdJXTFjJxGNiadaozuBRU"
202
+ },
203
+ {
204
+ "name": "tbtc slot 1 account 1",
205
+ "coin": "tbtc",
206
+ "slot": "secp256k1Multisig",
207
+ "account": 1,
208
+ "userPath": "m/44'/0'/1'/1'",
209
+ "cosignerPath": "m/44/0/1/1",
210
+ "userChildPub": "xpub6FAmCnN5quzddSNtpAHDGVZFZL29QrxRmaWRgtyxZ2JwnTVfKuUJkmfWPXJun1GdnuwW3te9qZKK76EfpTHgvtwAU5C67Mko7bJj9SxwMhU",
211
+ "backupChildPub": "xpub6EDabqKhEeBuSwJunyRJ94mRp94x44i4Sv1VxKwZjWWauyAzECPvex7hqpz1MQPD8t4edCRZixFLywcWC1ZBHyuBDcuGzJPFxrYc8sRXEaH",
212
+ "bitgoChildPub": "xpub6FKz5cr84TYXUG5Yx9dwMLn8et5eVpwfLD4av27C7CUW9fpPckPHZFmgAhgVcbHuhgrsnFri1S93woqX9Zj3Tugca3nvcqoZ2ZjK3DAHuhf"
213
+ },
214
+ {
215
+ "name": "arbeth slot 1 account 0",
216
+ "coin": "arbeth",
217
+ "slot": "secp256k1Multisig",
218
+ "account": 0,
219
+ "userPath": "m/44'/1879048194'/1'/0'",
220
+ "cosignerPath": "m/44/1879048194/1/0",
221
+ "userChildPub": "xpub6FQoo8YVRvA2wY7Ztf3g3DFGonK3uHP79dsi6qh7uDXksG3DaCr4MtttrjqkaYwpzKJZCdGjv4WfsmP61HA9uRTZorDw9G8EjnaXTKjxgQU",
222
+ "backupChildPub": "xpub6E84BCSDnxBp3EyQyGKPVQ3R9asrS4QXw9qLsDTeTc7v1ftq3ta7Z4XqFnipDWoqAbKnrxv2QtMzuQoo1ykUoAqiEfGTPdfGFehM95rdgZ8",
223
+ "bitgoChildPub": "xpub6Dm6mEHtLMUJkZ4tkSnyvpX8iFTDbD2KfATKW33BAD4tFmLk7Dx2R7f335GNXCyJftGrR7fdcGxx5Wxygjg8UwYNnfTQBiE16z6s5YhaCgT"
224
+ }
225
+ ]
226
+ },
227
+ "ed25519Hardened": {
228
+ "rootSeedStrKey": "SAAACAQDAQCQMBYIBEFAWDANBYHRAEISCMKBKFQXDAMRUGY4DUPB6NKI",
229
+ "rootRawSeedHex": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
230
+ "vectors": [
231
+ {
232
+ "name": "xlm slot 2 account 0",
233
+ "coin": "xlm",
234
+ "coinType": 148,
235
+ "account": 0,
236
+ "path": "m/44'/148'/2'/0'",
237
+ "childSeedHex": "855e8d991b48037b3e0161fd57f1643044878d6afe0db0243719b5201e2e4f69",
238
+ "childPubHex": "c7bad4aa67b948acde7bb542da1749fdf6f683757a7ceb6ce95299f4dc5d1df8",
239
+ "childPubStrKey": "GDD3VVFKM64URLG6PO2UFWQXJH67N5UDOV5HZ23M5FJJT5G4LUO7RJWG"
240
+ },
241
+ {
242
+ "name": "xlm slot 2 account 7",
243
+ "coin": "xlm",
244
+ "coinType": 148,
245
+ "account": 7,
246
+ "path": "m/44'/148'/2'/7'",
247
+ "childSeedHex": "3790123d377fec4805f52cbd0aa6e4f5277ed2ef75dbdbc0bf723370d10c4a82",
248
+ "childPubHex": "61dd24abcec24017775ec595613c3fbee5b2f9eb1b66b228efcf1fe5eae3d5fa",
249
+ "childPubStrKey": "GBQ52JFLZ3BEAF3XL3CZKYJ4H67OLMXZ5MNWNMRI57HR7ZPK4PK7UEEY"
250
+ },
251
+ {
252
+ "name": "algo slot 2 account 0",
253
+ "coin": "algo",
254
+ "coinType": 283,
255
+ "account": 0,
256
+ "path": "m/44'/283'/2'/0'",
257
+ "childSeedHex": "be69531ebbab851b69aa41bb9c905afed52d26ff4278e6418609d4d60570510c",
258
+ "childPubHex": "86d6803908e51c8bfc889fc9d788dbcaf656836f7ac4f169ebc90a1e60eeab25",
259
+ "childPubStrKey": "GCDNNABZBDSRZC74RCP4TV4I3PFPMVUDN55MJ4LJ5PEQUHTA52VSKJKD"
260
+ }
261
+ ]
262
+ },
263
+ "ed25519Soft": {
264
+ "rootSeedStrKey": "SAAACAQDAQCQMBYIBEFAWDANBYHRAEISCMKBKFQXDAMRUGY4DUPB6NKI",
265
+ "rootPubHex": "03a107bff3ce10be1d70dd18e74bc09967e4d6309ba50d5f1ddc8664125531b8",
266
+ "rootChainCodeHex": "abababababababababababababababababababababababababababababababab",
267
+ "rootComposite": "AOQQPP7TZYIL4HLQ3UMOOS6ATFT6JVRQTOSQ2XY53SDGIESVGG4KXK5LVOV2XK5LVOV2XK5LVOV2XK5LVOV2XK5LVOV2XK5LVOV2XKY",
268
+ "vectors": [
269
+ {
270
+ "name": "xlm slot 2 account 0",
271
+ "coin": "xlm",
272
+ "coinType": 148,
273
+ "slotOrdinal": 2,
274
+ "account": 0,
275
+ "path": "m/44/148/2/0",
276
+ "childPubHex": "ad5b0684a3655ac1a7e4a26ee6a5f178589c7461008887b0caebeca260b9a9db",
277
+ "childKLHex": "3add06eb83b03b2d1097137be6f1af8857693fcb2f74b7b15c729fe92dff8e0f",
278
+ "childKRHex": "c9277bf19fc922ec169bb1fe077e76b399a267de520796c8123831a2c9348af3"
279
+ },
280
+ {
281
+ "name": "algo slot 2 account 0",
282
+ "coin": "algo",
283
+ "coinType": 283,
284
+ "slotOrdinal": 2,
285
+ "account": 0,
286
+ "path": "m/44/283/2/0",
287
+ "childPubHex": "f46ca81de93e63b34378958e3a5edf8c932feac6e37fb05f178be60041db77ef",
288
+ "childKLHex": "9ad60bb591fec65df3a72fb041ee53a3263c43e6056512bc49de6b342cff8e0f",
289
+ "childKRHex": "1262f2d5439c03d11f2a295d691b4ea629f14e9e25c614d4a8aff8edd1865cdf"
290
+ }
291
+ ]
292
+ },
293
+ "mpcPathBytes": [
294
+ {
295
+ "name": "btc slot 1 account 0",
296
+ "coin": "btc",
297
+ "coinType": 0,
298
+ "slotOrdinal": 1,
299
+ "account": 0,
300
+ "pathBytesHex": "8000002c800000008000000180000000"
301
+ },
302
+ {
303
+ "name": "sol slot 4 account 0",
304
+ "coin": "sol",
305
+ "coinType": 501,
306
+ "slotOrdinal": 4,
307
+ "account": 0,
308
+ "pathBytesHex": "8000002c800001f58000000480000000"
309
+ },
310
+ {
311
+ "name": "arbeth slot 3 account 0",
312
+ "coin": "arbeth",
313
+ "coinType": 1879048194,
314
+ "slotOrdinal": 3,
315
+ "account": 0,
316
+ "pathBytesHex": "8000002cf00000028000000380000000"
317
+ }
318
+ ]
319
+ }