@bitgo-beta/sdk-core 8.2.1-beta.2130 → 8.2.1-beta.2132

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"derivableEd25519Pub.d.ts","sourceRoot":"","sources":["../../../../src/bitgo/safe/derivableEd25519Pub.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAoBH,sGAAsG;AACtG,MAAM,MAAM,uBAAuB,CAAC,CAAC,IAAI;IACvC,QAAQ,CAAC,EAAE,EAAE,CAAC,CAAC;IACf,QAAQ,CAAC,EAAE,EAAE,CAAC,CAAC;IACf,QAAQ,CAAC,GAAG,EAAE,CAAC,CAAC;CACjB,CAAC;AAaF,oFAAoF;AACpF,wBAAsB,+BAA+B,CAAC,YAAY,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAKzG;AAED,6EAA6E;AAC7E,wBAAsB,yBAAyB,CAAC,YAAY,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAKpG;AAED;;;;GAIG;AACH,wBAAsB,+BAA+B,CAAC,MAAM,EAAE;IAC5D,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;CACd,GAAG,OAAO,CAAC,uBAAuB,CAAC,MAAM,CAAC,CAAC,CAsB3C;AAED;;;;;;;;;;;GAWG;AACH,wBAAsB,mBAAmB,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CA4BlG;AAED,qFAAqF;AACrF,MAAM,MAAM,wBAAwB,GAAG;IACrC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;CAC5B,CAAC;AAEF,4EAA4E;AAC5E,wBAAgB,mCAAmC,CAAC,GAAG,EAAE,wBAAwB,GAAG,IAAI,CAOvF;AAED;;;;;GAKG;AACH,MAAM,MAAM,qBAAqB,GAAG;IAClC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,IAAI,EAAE,CAAC,OAAO,EAAE,UAAU,KAAK,OAAO,CAAC;QAAE,SAAS,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CACxE,CAAC;AAEF,yEAAyE;AACzE,wBAAgB,gCAAgC,CAAC,MAAM,EAAE,qBAAqB,GAAG,IAAI,CAOpF;AAED;;;;;GAKG;AACH,wBAAsB,6BAA6B,CACjD,MAAM,EAAE,qBAAqB,EAC7B,OAAO,EAAE,UAAU,GAClB,OAAO,CAAC,MAAM,CAAC,CAejB"}
1
+ {"version":3,"file":"derivableEd25519Pub.d.ts","sourceRoot":"","sources":["../../../../src/bitgo/safe/derivableEd25519Pub.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAoBH,sGAAsG;AACtG,MAAM,MAAM,uBAAuB,CAAC,CAAC,IAAI;IACvC,QAAQ,CAAC,EAAE,EAAE,CAAC,CAAC;IACf,QAAQ,CAAC,EAAE,EAAE,CAAC,CAAC;IACf,QAAQ,CAAC,GAAG,EAAE,CAAC,CAAC;CACjB,CAAC;AAaF,oFAAoF;AACpF,wBAAsB,+BAA+B,CAAC,YAAY,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAKzG;AAED,6EAA6E;AAC7E,wBAAsB,yBAAyB,CAAC,YAAY,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAKpG;AAED;;;;GAIG;AACH,wBAAsB,+BAA+B,CAAC,MAAM,EAAE;IAC5D,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;CACd,GAAG,OAAO,CAAC,uBAAuB,CAAC,MAAM,CAAC,CAAC,CAsB3C;AAED;;;;;;;;;;;GAWG;AACH,wBAAsB,mBAAmB,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CA4BlG;AAED,qFAAqF;AACrF,MAAM,MAAM,wBAAwB,GAAG;IACrC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;CAC5B,CAAC;AAEF,4EAA4E;AAC5E,wBAAgB,mCAAmC,CAAC,GAAG,EAAE,wBAAwB,GAAG,IAAI,CAOvF;AAED;;;;;GAKG;AACH,MAAM,MAAM,qBAAqB,GAAG;IAClC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,IAAI,EAAE,CAAC,OAAO,EAAE,UAAU,KAAK,OAAO,CAAC;QAAE,SAAS,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CACxE,CAAC;AAEF,yEAAyE;AACzE,wBAAgB,gCAAgC,CAAC,MAAM,EAAE,qBAAqB,GAAG,IAAI,CAOpF;AAED;;;;;GAKG;AACH,wBAAsB,6BAA6B,CACjD,MAAM,EAAE,qBAAqB,EAC7B,OAAO,EAAE,UAAU,GAClB,OAAO,CAAC,MAAM,CAAC,CAmBjB"}
@@ -165,7 +165,11 @@ function assertValidExternalEd25519Signer(signer) {
165
165
  */
166
166
  async function signWithExternalEd25519Signer(signer, message) {
167
167
  assertValidExternalEd25519Signer(signer);
168
- const result = await signer.sign(message);
168
+ // The signer gets a defensive copy: it must not be able to mutate the authoritative transaction
169
+ // bytes, and the signature is verified against the original message, not whatever the signer
170
+ // received or modified.
171
+ const messageForSigner = Uint8Array.from(message);
172
+ const result = await signer.sign(messageForSigner);
169
173
  if (!result || typeof result.signature !== 'string') {
170
174
  throw new Error('Invalid external Ed25519 signer: sign must resolve to { signature: string }');
171
175
  }
@@ -179,4 +183,4 @@ async function signWithExternalEd25519Signer(signer, message) {
179
183
  }
180
184
  return result.signature;
181
185
  }
182
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVyaXZhYmxlRWQyNTUxOVB1Yi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9iaXRnby9zYWZlL2Rlcml2YWJsZUVkMjU1MTlQdWIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBOzs7Ozs7Ozs7R0FTRzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUF1Q0gsMEVBS0M7QUFHRCw4REFLQztBQU9ELDBFQTBCQztBQWNELGtEQTRCQztBQVNELGtGQU9DO0FBY0QsNEVBT0M7QUFRRCxzRUFrQkM7QUE1TEQsbUNBQW9DO0FBQ3BDLGdEQUFrQztBQUNsQyxtREFRMkI7QUFDM0IsNkRBS21DO0FBU25DLElBQUksWUFBd0MsQ0FBQztBQUM3QyxTQUFTLFFBQVE7SUFDZixJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7UUFDbEIsWUFBWSxHQUFHLENBQUMsS0FBSyxJQUFJLEVBQUUsQ0FBQyxtQkFBSyxDQUFDLFVBQVUsQ0FBQyxNQUFNLDBCQUFZLENBQUMsVUFBVSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUM7UUFDakYsWUFBWSxDQUFDLEtBQUssQ0FBQyxHQUFHLEVBQUU7WUFDdEIsWUFBWSxHQUFHLFNBQVMsQ0FBQztRQUMzQixDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFDRCxPQUFPLFlBQVksQ0FBQztBQUN0QixDQUFDO0FBRUQsb0ZBQW9GO0FBQzdFLEtBQUssVUFBVSwrQkFBK0IsQ0FBQyxZQUFvQixFQUFFLElBQVk7SUFDdEYsSUFBQSwrQkFBZSxFQUFDLElBQUksRUFBRSxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDO0lBQzNDLE1BQU0sRUFBRSxHQUFHLEVBQUUsU0FBUyxFQUFFLEdBQUcsSUFBQSx5Q0FBeUIsRUFBQyxZQUFZLENBQUMsQ0FBQztJQUNuRSxNQUFNLEtBQUssR0FBRyxNQUFNLFFBQVEsRUFBRSxDQUFDO0lBQy9CLE9BQU8sTUFBTSxDQUFDLElBQUksQ0FB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LE1BQU0sR0FBRyxNQUFNLE1BQU0sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDMUMsSUFBSSxDQUFDLE1BQU0sSUFBSSxPQUFPLE1BQU0sQ0FBQyxTQUFTLEtBQUssUUFBUSxFQUFFLENBQUM7UUFDcEQsTUFBTSxJQUFJLEtBQUssQ0FBQyw2RUFBNkUsQ0FBQyxDQUFDO0lBQ2pHLENBQUM7SUFDRCxJQUFJLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDO1FBQy9DLE1BQU0sSUFBSSxLQUFLLENBQUMsNEVBQTRFLENBQUMsQ0FBQztJQUNoRyxDQUFDO0lBQ0QsTUFBTSxTQUFTLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQ3ZELE1BQU0sU0FBUyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLFNBQVMsRUFBRSxLQUFLLENBQUMsQ0FBQztJQUN2RCxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLE9BQU8sRUFBRSxTQUFTLEVBQUUsU0FBUyxDQUFDLEVBQUUsQ0FBQztRQUM5RCxNQUFNLElBQUksS0FBSyxDQUFDLG1GQUFtRixDQUFDLENBQUM7SUFDdkcsQ0FBQztJQUNELE9BQU8sTUFBTSxDQUFDLFNBQVMsQ0FBQztBQUMxQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBFZDI1NTE5IHNhZmUtcm9vdCBwdWJsaWMgZGVyaXZhdGlvbiBtYXRlcmlhbCBhbmQgU3RlbGxhciB1c2VyLWtleSBjb2RlY3MuXG4gKlxuICogU2FmZSBiYWNrdXAgYW5kIEJpdEdvIHJvb3RzIHN0b3JlIHJhdyBwdWJsaWMga2V5ICgzMiBieXRlcykgfHwgcmF3IGNoYWluIGNvZGUgKDMyIGJ5dGVzKSxcbiAqIGVuY29kZWQgdG9nZXRoZXIgYXMgY2Fub25pY2FsIHVucGFkZGVkIFJGQyA0NjQ4IGJhc2UzMi4gQ29pbi1zcGVjaWZpYyBwdWJsaWMta2V5IGVuY29kaW5ncyBhcmVcbiAqIGFwcGxpZWQgb25seSB0byBkZXJpdmVkIHdhbGxldCBjaGlsZHJlbi5cbiAqXG4gKiBUaGUgcHVyZSBjb2RlY3MgKyBjb21wb3NpdGUtcHViIGVuY29kaW5nIG1vdmVkIHRvIEBiaXRnby1iZXRhL3Nkay1saWItc2FmZXMuIE9ubHkgdGhlIFdBU01cbiAqIHNvZnQtZGVyaXZhdGlvbiByZW1haW5zIGhlcmUgKGl0IG5lZWRzIEVkMjU1MTlCSVAzMi9FZGRzYSwgd2hpY2ggbGl2ZSBpbiBzZGstY29yZSkuXG4gKi9cblxuaW1wb3J0IHsgY3JlYXRlSGFzaCB9IGZyb20gJ2NyeXB0byc7XG5pbXBvcnQgKiBhcyBuYWNsIGZyb20gJ3R3ZWV0bmFjbCc7XG5pbXBvcnQge1xuICBFZDI1NTE5QklQMzIsXG4gIEVkZHNhLFxuICBiaWdJbnRGcm9tQnVmZmVyQkUsXG4gIGJpZ0ludEZyb21CdWZmZXJMRSxcbiAgYmlnSW50VG9CdWZmZXJCRSxcbiAgYmlnSW50VG9CdWZmZXJMRSxcbiAgY2xhbXAsXG59IGZyb20gJy4uLy4uL2FjY291bnQtbGliJztcbmltcG9ydCB7XG4gIGFzc2VydEJpcDMyUGF0aCxcbiAgZGVjb2RlRGVyaXZhYmxlRWQyNTUxOVB1YixcbiAgZGVjb2RlRWQyNTUxOUNoYWluQ29kZSxcbiAgZGVjb2RlRWQyNTUxOVN0cktleVNlY3JldFNlZWQsXG59IGZyb20gJ0BiaXRnby1iZXRhL3Nkay1saWItc2FmZXMnO1xuXG4vKiogRWQyNTUxOSBleHRlbmRlZC1rZXkgaGFsdmVzICsgcHVibGljIHBvaW50LCBwYXJhbWV0ZXJpc2VkIGJ5IGVuY29kaW5nIChCdWZmZXIgcmF3LCBzdHJpbmcgaGV4KS4gKi9cbmV4cG9ydCB0eXBlIEVkMjU1MTlFeHRlbmRlZEtleVBhcnRzPFQ+ID0ge1xuICByZWFkb25seSBrTDogVDsgLy8gc2lnbmluZyBzY2FsYXIsIHJlZHVjZWQgbW9kIExcbiAgcmVhZG9ubHkga1I6IFQ7IC8vIG5vbmNlIHByZWZpeFxuICByZWFkb25seSBwdWI6IFQ7IC8vIDMyLWJ5dGUgcHVibGljIGtleVxufTtcblxubGV0IGVkZHNhUHJvbWlzZTogUHJvbWlzZTxFZGRzYT4gfCB1bmRlZmluZWQ7XG5mdW5jdGlvbiBnZXRFZGRzYSgpOiBQcm9taXNlPEVkZHNhPiB7XG4gIGlmICghZWRkc2FQcm9taXNlKSB7XG4gICAgZWRkc2FQcm9taXNlID0gKGFzeW5jICgpID0+IEVkZHNhLmluaXRpYWxpemUoYXdhaXQgRWQyNTUxOUJJUDMyLmluaXRpYWxpemUoKSkpKCk7XG4gICAgZWRkc2FQcm9taXNlLmNhdGNoKCgpID0+IHtcbiAgICAgIGVkZHNhUHJvbWlzZSA9IHVuZGVmaW5lZDtcbiAgICB9KTtcbiAgfVxuICByZXR1cm4gZWRkc2FQcm9taXNlO1xufVxuXG4vKiogU29mdC1kZXJpdmUgYW4gdW5oYXJkZW5lZCBwYXRoIGFuZCByZXR1cm4gdGhlIGRlcml2ZWQgcmF3IDMyLWJ5dGUgcHVibGljIGtleS4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBzb2Z0RGVyaXZlQ2hpbGRQdWJFZDI1NTE5QXRQYXRoKGNvbXBvc2l0ZVB1Yjogc3RyaW5nLCBwYXRoOiBzdHJpbmcpOiBQcm9taXNlPEJ1ZmZlcj4ge1xuICBhc3NlcnRCaXAzMlBhdGgocGF0aCwgeyBoYXJkZW5lZDogZmFsc2UgfSk7XG4gIGNvbnN0IHsgcHViLCBjaGFpbkNvZGUgfSA9IGRlY29kZURlcml2YWJsZUVkMjU1MTlQdWIoY29tcG9zaXRlUHViKTtcbiAgY29uc3QgZWRkc2EgPSBhd2FpdCBnZXRFZGRzYSgpO1xuICByZXR1cm4gQnVmZmVyLmZyb20oZWRkc2EuZGVyaXZlVW5oYXJkZW5lZChCdWZmZXIuY29uY2F0KFtwdWIsIGNoYWluQ29kZV0pLnRvU3RyaW5nKCdoZXgnKSwgcGF0aCkuc2xpY2UoMCwgNjQpLCAnaGV4Jyk7XG59XG5cbi8qKiBTb2Z0LWRlcml2ZSBgbS88aW5kZXg+YCBhbmQgcmV0dXJuIHRoZSBkZXJpdmVkIHJhdyAzMi1ieXRlIHB1YmxpYyBrZXkuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gc29mdERlcml2ZUNoaWxkUHViRWQyNTUxOShjb21wb3NpdGVQdWI6IHN0cmluZywgaW5kZXg6IG51bWJlcik6IFByb21pc2U8QnVmZmVyPiB7XG4gIGlmICghTnVtYmVyLmlzSW50ZWdlcihpbmRleCkgfHwgaW5kZXggPCAwIHx8IGluZGV4ID4gMHg3ZmZmZmZmZikge1xuICAgIHRocm93IG5ldyBFcnJvcihgZWQyNTUxOSBzYWZlIGNvLXNpZ25lciBkZXJpdmF0aW9uIGluZGV4IG11c3QgYmUgbm9uLWhhcmRlbmVkLCBnb3QgJHtpbmRleH1gKTtcbiAgfVxuICByZXR1cm4gc29mdERlcml2ZUNoaWxkUHViRWQyNTUxOUF0UGF0aChjb21wb3NpdGVQdWIsIGBtLyR7aW5kZXh9YCk7XG59XG5cbi8qKlxuICogU29mdC1kZXJpdmUgYW4gZWQyNTUxOSBjby1zaWduZXIgY2hpbGQgYXQgYW4gdW5oYXJkZW5lZCBwYXRoLCByZXR1cm5pbmcgdGhlIHByaXZhdGVcbiAqIGV4dGVuZGVkLWtleSBtYXRlcmlhbCDigJQgdGhlIHJlZHVjZWQtbW9kLUwgc2NhbGFyIGBrTGAsIHRoZSBub25jZSBwcmVmaXggYGtSYCwgYW5kIHRoZSBtYXRjaGluZ1xuICogcHVibGljIHBvaW50IOKAlCBmcm9tIGEgcm9vdCBzZWNyZXQgc2VlZCBwbHVzIHRoZSByb290IGNoYWluIGNvZGUgY2FycmllZCBvbiB0aGUga2V5Y2FyZC5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHNvZnREZXJpdmVDaGlsZFBydkVkMjU1MTlBdFBhdGgocGFyYW1zOiB7XG4gIHNlZWRTdHJLZXk6IHN0cmluZztcbiAgY2hhaW5Db2RlOiBzdHJpbmc7XG4gIHBhdGg6IHN0cmluZztcbn0pOiBQcm9taXNlPEVkMjU1MTlFeHRlbmRlZEtleVBhcnRzPEJ1ZmZlcj4+IHtcbiAgY29uc3QgeyBzZWVkU3RyS2V5LCBjaGFpbkNvZGUsIHBhdGggfSA9IHBhcmFtcztcbiAgYXNzZXJ0QmlwMzJQYXRoKHBhdGgsIHsgaGFyZGVuZWQ6IGZhbHNlIH0pO1xuICBjb25zdCBzZWVkID0gZGVjb2RlRWQyNTUxOVN0cktleVNlY3JldFNlZWQoc2VlZFN0cktleSk7XG4gIGNvbnN0IGNoYWluQ29kZUJ1ZiA9IGRlY29kZUVkMjU1MTlDaGFpbkNvZGUoY2hhaW5Db2RlKTtcbiAgY29uc3QgZWRkc2EgPSBhd2FpdCBnZXRFZGRzYSgpO1xuICBjb25zdCBoID0gY3JlYXRlSGFzaCgnc2hhNTEyJykudXBkYXRlKHNlZWQpLmRpZ2VzdCgpO1xuICBjb25zdCBzayA9IGNsYW1wKGJpZ0ludEZyb21CdWZmZXJMRShoLnN1YmFycmF5KDAsIDMyKSkpO1xuICBjb25zdCBwcmVmaXggPSBiaWdJbnRGcm9tQnVmZmVyQkUoaC5zdWJhcnJheSgzMikpO1xuICBjb25zdCBwayA9IEVkZHNhLmN1cnZlLmJhc2VQb2ludE11bHQoc2spO1xuICBpZiAoIWVkZHNhLmhkVHJlZSkge1xuICAgIHRocm93IG5ldyBFcnJvcignRWRkc2EgSEQgdHJlZSBpcyBub3QgaW5pdGlhbGl6ZWQnKTtcbiAgfVxuICBjb25zdCBkZXJpdmVkID0gZWRkc2EuaGRUcmVlLnByaXZhdGVEZXJpdmUoeyBwaywgc2ssIHByZWZpeCwgY2hhaW5jb2RlOiBiaWdJbnRGcm9tQnVmZmVyQkUoY2hhaW5Db2RlQnVmKSB9LCBwYXRoKTtcbiAgaWYgKGRlcml2ZWQucHJlZml4ID09PSB1bmRlZmluZWQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3NvZnQgZGVyaXZhdGlvbiBkaWQgbm90IHByb2R1Y2UgYSBub25jZSBwcmVmaXgnKTtcbiAgfVxuICByZXR1cm4ge1xuICAgIGtMOiBiaWdJbnRUb0J1ZmZlckxFKGRlcml2ZWQuc2ssIDMyKSxcbiAgICBrUjogYmlnSW50VG9CdWZmZXJCRShkZXJpdmVkLnByZWZpeCwgMzIpLFxuICAgIHB1YjogYmlnSW50VG9CdWZmZXJMRShkZXJpdmVkLnBrLCAzMiksXG4gIH07XG59XG5cbi8qKlxuICogU2lnbiBgbWVzc2FnZWAgd2l0aCBhIEJJUDMyLUVkMjU1MTkgZXh0ZW5kZWQga2V5IGRpcmVjdGx5LCB3aXRob3V0IGEgc2VlZC5cbiAqXG4gKiBBIHNvZnQtZGVyaXZlZCBjaGlsZCBoYXMgbm8gMzItYnl0ZSBzZWVkIHdob3NlIFNIQS01MTIgeWllbGRzIGAoa0wsIGtSKWAsIHNvIHRoZVxuICogc2VlZC1iYXNlZCBgbmFjbC5zaWduLmtleVBhaXIuZnJvbVNlZWRgIGNhbm5vdCBzaWduIGZvciBpdC4gVGhpcyBwZXJmb3JtcyBSRkMgODAzMlxuICogc2NhbGFyIHNpZ25pbmcgc3RyYWlnaHQgZnJvbSB0aGUgcmVkdWNlZC1tb2QtTCBzY2FsYXIgYGtMYCBhbmQgdGhlIG5vbmNlIHByZWZpeCBga1JgLlxuICpcbiAqIEBwYXJhbSBtZXNzYWdlIGJ5dGVzIHRvIHNpZ25cbiAqIEBwYXJhbSBrTCAzMi1ieXRlIHNpZ25pbmcgc2NhbGFyLCByZWR1Y2VkIG1vZCBMIChsaXR0bGUtZW5kaWFuKVxuICogQHBhcmFtIGtSIDMyLWJ5dGUgbm9uY2UgcHJlZml4IChiaWctZW5kaWFuKVxuICogQHJldHVybnMgNjQtYnl0ZSBFZDI1NTE5IHNpZ25hdHVyZSBgUiDigJYgU2BcbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHNpZ25FZDI1NTE5RXh0ZW5kZWQobWVzc2FnZTogQnVmZmVyLCBrTDogQnVmZmVyLCBrUjogQnVmZmVyKTogUHJvbWlzZTxCdWZmZXI+IHtcbiAgaWYgKGtMLmxlbmd0aCAhPT0gMzIpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgRWQyNTUxOSBleHRlbmRlZCBrZXkga0wgbGVuZ3RoOiBleHBlY3RlZCAzMiBieXRlcywgZ290ICR7a0wubGVuZ3RofWApO1xuICB9XG4gIGlmIChrUi5sZW5ndGggIT09IDMyKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIEVkMjU1MTkgZXh0ZW5kZWQga2V5IGtSIGxlbmd0aDogZXhwZWN0ZWQgMzIgYnl0ZXMsIGdvdCAke2tSLmxlbmd0aH1gKTtcbiAgfVxuICBhd2FpdCBnZXRFZGRzYSgpO1xuICBjb25zdCBjdXJ2ZSA9IEVkZHNhLmN1cnZlO1xuICBjb25zdCBrTEludCA9IGJpZ0ludEZyb21CdWZmZXJMRShrTCk7XG4gIGNvbnN0IHIgPSBjdXJ2ZS5zY2FsYXJSZWR1Y2UoXG4gICAgYmlnSW50RnJvbUJ1ZmZlckxFKFxuICAgICAgY3JlYXRlSGFzaCgnc2hhNTEyJylcbiAgICAgICAgLnVwZGF0ZShCdWZmZXIuY29uY2F0KFtrUiwgbWVzc2FnZV0pKVxuICAgICAgICAuZGlnZXN0KClcbiAgICApXG4gICk7XG4gIGNvbnN0IFIgPSBjdXJ2ZS5iYXNlUG9pbnRNdWx0KHIpO1xuICBjb25zdCBBID0gY3VydmUuYmFzZVBvaW50TXVsdChrTEludCk7XG4gIGNvbnN0IGggPSBjdXJ2ZS5zY2FsYXJSZWR1Y2UoXG4gICAgYmlnSW50RnJvbUJ1ZmZlckxFKFxuICAgICAgY3JlYXRlSGFzaCgnc2hhNTEyJylcbiAgICAgICAgLnVwZGF0ZShCdWZmZXIuY29uY2F0KFtiaWdJbnRUb0J1ZmZlckxFKFIsIDMyKSwgYmlnSW50VG9CdWZmZXJMRShBLCAzMiksIG1lc3NhZ2VdKSlcbiAgICAgICAgLmRpZ2VzdCgpXG4gICAgKVxuICApO1xuICBjb25zdCBTID0gY3VydmUuc2NhbGFyQWRkKHIsIGN1cnZlLnNjYWxhck11bHQoaCwga0xJbnQpKTtcbiAgcmV0dXJuIEJ1ZmZlci5jb25jYXQoW2JpZ0ludFRvQnVmZmVyTEUoUiwgMzIpLCBiaWdJbnRUb0J1ZmZlckxFKFMsIDMyKV0pO1xufVxuXG4vKiogQW4gZXh0ZXJuYWxseS1wcm9kdWNlZCBFZDI1NTE5IHNpZ25hdHVyZSBvdmVyIGEgdHJhbnNhY3Rpb24ncyBzaWduaW5nIG1lc3NhZ2UuICovXG5leHBvcnQgdHlwZSBFeHRlcm5hbEVkMjU1MTlTaWduYXR1cmUgPSB7XG4gIHJlYWRvbmx5IHB1YmxpY0tleTogc3RyaW5nOyAvLyByYXcgMzItYnl0ZSBwdWJsaWMga2V5IChoZXgpXG4gIHJlYWRvbmx5IHNpZ25hdHVyZTogc3RyaW5nOyAvLyByYXcgNjQtYnl0ZSBzaWduYXR1cmUgKGhleClcbn07XG5cbi8qKiBGYWlscyBmYXN0IGlmIGEgYEV4dGVybmFsRWQyNTUxOVNpZ25hdHVyZWAgaGFzIG1hbGZvcm1lZCBoZXgvbGVuZ3Rocy4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhc3NlcnRWYWxpZEV4dGVybmFsRWQyNTUxOVNpZ25hdHVyZShzaWc6IEV4dGVybmFsRWQyNTUxOVNpZ25hdHVyZSk6IHZvaWQge1xuICBpZiAoIS9eWzAtOWEtZl17NjR9JC9pLnRlc3Qoc2lnLnB1YmxpY0tleSkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgZXh0ZXJuYWwgRWQyNTUxOSBwdWJsaWMga2V5OiBleHBlY3RlZCAzMiBieXRlcyAoNjQgaGV4IGNoYXJhY3RlcnMpJyk7XG4gIH1cbiAgaWYgKCEvXlswLTlhLWZdezEyOH0kL2kudGVzdChzaWcuc2lnbmF0dXJlKSkge1xuICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBleHRlcm5hbCBFZDI1NTE5IHNpZ25hdHVyZTogZXhwZWN0ZWQgNjQgYnl0ZXMgKDEyOCBoZXggY2hhcmFjdGVycyknKTtcbiAgfVxufVxuXG4vKipcbiAqIEEgbGF6aWx5LWludm9rZWQgZXh0ZXJuYWwgRWQyNTUxOSBzaWduZXIuIENhcnJpZXMgdGhlIHB1YmxpYyBrZXkgdXAgZnJvbnQgYW5kIHByb2R1Y2VzIHRoZVxuICogc2lnbmF0dXJlIG9uIGRlbWFuZCwgb25jZSB0aGUgbWVzc2FnZSBpdCBtdXN0IGNvdmVyIGV4aXN0cyDigJQgdW5saWtlIGBFeHRlcm5hbEVkMjU1MTlTaWduYXR1cmVgLFxuICogd2hpY2ggaXMgYSBwcmUtbWFkZSBzaWduYXR1cmUuIFVzZWQgZm9yIHNlZWRsZXNzIHNvZnQtZGVyaXZlZCBiYWNrdXAgY2hpbGRyZW4gd2hvc2Ugc2lnbmF0dXJlXG4gKiBtdXN0IGNvdmVyIHRyYW5zYWN0aW9uIGJ5dGVzIHRoYXQgb25seSBleGlzdCBhdCBgcmVjb3ZlcigpYCB0aW1lLlxuICovXG5leHBvcnQgdHlwZSBFeHRlcm5hbEVkMjU1MTlTaWduZXIgPSB7XG4gIHJlYWRvbmx5IHB1YmxpY0tleTogc3RyaW5nOyAvLyByYXcgMzItYnl0ZSBwdWJsaWMga2V5IChoZXgpXG4gIHJlYWRvbmx5IHNpZ246IChtZXNzYWdlOiBVaW50OEFycmF5KSA9PiBQcm9taXNlPHsgc2lnbmF0dXJlOiBzdHJpbmcgfT47IC8vIHJhdyA2NC1ieXRlIHNpZ25hdHVyZSAoaGV4KVxufTtcblxuLyoqIEZhaWxzIGZhc3QgaWYgYW4gYEV4dGVybmFsRWQyNTUxOVNpZ25lcmAgaXMgbWlzc2luZyBvciBtaXMtc2hhcGVkLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFzc2VydFZhbGlkRXh0ZXJuYWxFZDI1NTE5U2lnbmVyKHNpZ25lcjogRXh0ZXJuYWxFZDI1NTE5U2lnbmVyKTogdm9pZCB7XG4gIGlmICghL15bMC05YS1mXXs2NH0kL2kudGVzdChzaWduZXIucHVibGljS2V5KSkge1xuICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBleHRlcm5hbCBFZDI1NTE5IHB1YmxpYyBrZXk6IGV4cGVjdGVkIDMyIGJ5dGVzICg2NCBoZXggY2hhcmFjdGVycyknKTtcbiAgfVxuICBpZiAodHlwZW9mIHNpZ25lci5zaWduICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIGV4dGVybmFsIEVkMjU1MTkgc2lnbmVyOiBzaWduIG11c3QgYmUgYSBmdW5jdGlvbicpO1xuICB9XG59XG5cbi8qKlxuICogQ2FsbHMgYW4gYEV4dGVybmFsRWQyNTUxOVNpZ25lcmAgb3ZlciBgbWVzc2FnZWAsIGZhaWxzIGZhc3QgdW5sZXNzIHRoZSBzaWduYXR1cmUgaXMgYSB2YWxpZFxuICogNjQtYnl0ZSAoMTI4LWhleCkgc2lnbmF0dXJlIHRoYXQgdmVyaWZpZXMgYWdhaW5zdCB0aGUgc2lnbmVyJ3MgYWR2ZXJ0aXNlZCBwdWJsaWMga2V5LCBhbmRcbiAqIHJldHVybnMgdGhlIGhleCBzaWduYXR1cmUuIFRoZSBjcnlwdG9ncmFwaGljIGNoZWNrIGxpdmVzIGhlcmUg4oCUIG9uY2UsIHNoYXJlZCBieSBldmVyeSBjb2luIOKAlFxuICogc28gbm8gY2FsbGVyIGNhbiBpbmplY3QgYSB3ZWxsLWZvcm1lZC1idXQtd3Jvbmcgc2lnbmF0dXJlIGludG8gYSB0cmFuc2FjdGlvbi5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHNpZ25XaXRoRXh0ZXJuYWxFZDI1NTE5U2lnbmVyKFxuICBzaWduZXI6IEV4dGVybmFsRWQyNTUxOVNpZ25lcixcbiAgbWVzc2FnZTogVWludDhBcnJheVxuKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgYXNzZXJ0VmFsaWRFeHRlcm5hbEVkMjU1MTlTaWduZXIoc2lnbmVyKTtcbiAgY29uc3QgcmVzdWx0ID0gYXdhaXQgc2lnbmVyLnNpZ24obWVzc2FnZSk7XG4gIGlmICghcmVzdWx0IHx8IHR5cGVvZiByZXN1bHQuc2lnbmF0dXJlICE9PSAnc3RyaW5nJykge1xuICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBleHRlcm5hbCBFZDI1NTE5IHNpZ25lcjogc2lnbiBtdXN0IHJlc29sdmUgdG8geyBzaWduYXR1cmU6IHN0cmluZyB9Jyk7XG4gIH1cbiAgaWYgKCEvXlswLTlhLWZdezEyOH0kL2kudGVzdChyZXN1bHQuc2lnbmF0dXJlKSkge1xuICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBleHRlcm5hbCBFZDI1NTE5IHNpZ25hdHVyZTogZXhwZWN0ZWQgNjQgYnl0ZXMgKDEyOCBoZXggY2hhcmFjdGVycyknKTtcbiAgfVxuICBjb25zdCBzaWduYXR1cmUgPSBCdWZmZXIuZnJvbShyZXN1bHQuc2lnbmF0dXJlLCAnaGV4Jyk7XG4gIGNvbnN0IHB1YmxpY0tleSA9IEJ1ZmZlci5mcm9tKHNpZ25lci5wdWJsaWNLZXksICdoZXgnKTtcbiAgaWYgKCFuYWNsLnNpZ24uZGV0YWNoZWQudmVyaWZ5KG1lc3NhZ2UsIHNpZ25hdHVyZSwgcHVibGljS2V5KSkge1xuICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBleHRlcm5hbCBFZDI1NTE5IHNpZ25lcjogc2lnbmF0dXJlIGRvZXMgbm90IHZlcmlmeSBhZ2FpbnN0IGl0cyBwdWJsaWMga2V5Jyk7XG4gIH1cbiAgcmV0dXJuIHJlc3VsdC5zaWduYXR1cmU7XG59XG4iXX0=
186
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVyaXZhYmxlRWQyNTUxOVB1Yi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9iaXRnby9zYWZlL2Rlcml2YWJsZUVkMjU1MTlQdWIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBOzs7Ozs7Ozs7R0FTRzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUF1Q0gsMEVBS0M7QUFHRCw4REFLQztBQU9ELDBFQTBCQztBQWNELGtEQTRCQztBQVNELGtGQU9DO0FBY0QsNEVBT0M7QUFRRCxzRUFzQkM7QUFoTUQsbUNBQW9DO0FBQ3BDLGdEQUFrQztBQUNsQyxtREFRMkI7QUFDM0IsNkRBS21DO0FBU25DLElBQUksWUFBd0MsQ0FBQztBQUM3QyxTQUFTLFFBQVE7SUFDZixJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7UUFDbEIsWUFBWSxHQUFHLENBQUMsS0FBSyxJQUFJLEVBQUUsQ0FBQyxtQkFBSyxDQUFDLFVBQVUsQ0FBQyxNQUFNLDBCQUFZLENBQUMsVUFBVSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUM7UUFDakYsWUFBWSxDQUFDLEtBQUssQ0FBQyxHQUFHLEVBQUU7WUFDdEIsWUFBWSxHQUFHLFNBQVMsQ0FBQztRQUMzQixDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFDRCxPQUFPLFlBQVksQ0FBQztBQUN0QixDQUFDO0FBRUQsb0ZBQW9GO0FBQzdFLEtBQUssVUFBVSwrQkFBK0IsQ0FBQyxZQUFvQixFQUFFLElBQVk7SUFDdEYsSUFBQSwrQkFBZSxFQUFDLElBQUksRUFBRSxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDO0lBQzNDLE1BQU0sRUFBRSxHQUFHLEVBQUUsU0FBUyxFQUFFLEdBQUcsSUFBQSx5Q0FBeUIsRUFBQyxZQUFZLENBQUMsQ0FBQztJQUNuRSxNQUFNLEtBQUssR0FBRyxNQUFNLFFBQVEsRUFBRSxDQUFDO0lBQy9CLE9BQU8sTUFBTSxDQUFDLElBQUksQ0FB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Z0c7SUFDaEcsNkZBQTZGO0lBQzdGLHdCQUF3QjtJQUN4QixNQUFNLGdCQUFnQixHQUFHLFVBQVUsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDbEQsTUFBTSxNQUFNLEdBQUcsTUFBTSxNQUFNLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLENBQUM7SUFDbkQsSUFBSSxDQUFDLE1BQU0sSUFBSSxPQUFPLE1BQU0sQ0FBQyxTQUFTLEtBQUssUUFBUSxFQUFFLENBQUM7UUFDcEQsTUFBTSxJQUFJLEtBQUssQ0FBQyw2RUFBNkUsQ0FBQyxDQUFDO0lBQ2pHLENBQUM7SUFDRCxJQUFJLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDO1FBQy9DLE1BQU0sSUFBSSxLQUFLLENBQUMsNEVBQTRFLENBQUMsQ0FBQztJQUNoRyxDQUFDO0lBQ0QsTUFBTSxTQUFTLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQ3ZELE1BQU0sU0FBUyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLFNBQVMsRUFBRSxLQUFLLENBQUMsQ0FBQztJQUN2RCxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLE9BQU8sRUFBRSxTQUFTLEVBQUUsU0FBUyxDQUFDLEVBQUUsQ0FBQztRQUM5RCxNQUFNLElBQUksS0FBSyxDQUFDLG1GQUFtRixDQUFDLENBQUM7SUFDdkcsQ0FBQztJQUNELE9BQU8sTUFBTSxDQUFDLFNBQVMsQ0FBQztBQUMxQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBFZDI1NTE5IHNhZmUtcm9vdCBwdWJsaWMgZGVyaXZhdGlvbiBtYXRlcmlhbCBhbmQgU3RlbGxhciB1c2VyLWtleSBjb2RlY3MuXG4gKlxuICogU2FmZSBiYWNrdXAgYW5kIEJpdEdvIHJvb3RzIHN0b3JlIHJhdyBwdWJsaWMga2V5ICgzMiBieXRlcykgfHwgcmF3IGNoYWluIGNvZGUgKDMyIGJ5dGVzKSxcbiAqIGVuY29kZWQgdG9nZXRoZXIgYXMgY2Fub25pY2FsIHVucGFkZGVkIFJGQyA0NjQ4IGJhc2UzMi4gQ29pbi1zcGVjaWZpYyBwdWJsaWMta2V5IGVuY29kaW5ncyBhcmVcbiAqIGFwcGxpZWQgb25seSB0byBkZXJpdmVkIHdhbGxldCBjaGlsZHJlbi5cbiAqXG4gKiBUaGUgcHVyZSBjb2RlY3MgKyBjb21wb3NpdGUtcHViIGVuY29kaW5nIG1vdmVkIHRvIEBiaXRnby1iZXRhL3Nkay1saWItc2FmZXMuIE9ubHkgdGhlIFdBU01cbiAqIHNvZnQtZGVyaXZhdGlvbiByZW1haW5zIGhlcmUgKGl0IG5lZWRzIEVkMjU1MTlCSVAzMi9FZGRzYSwgd2hpY2ggbGl2ZSBpbiBzZGstY29yZSkuXG4gKi9cblxuaW1wb3J0IHsgY3JlYXRlSGFzaCB9IGZyb20gJ2NyeXB0byc7XG5pbXBvcnQgKiBhcyBuYWNsIGZyb20gJ3R3ZWV0bmFjbCc7XG5pbXBvcnQge1xuICBFZDI1NTE5QklQMzIsXG4gIEVkZHNhLFxuICBiaWdJbnRGcm9tQnVmZmVyQkUsXG4gIGJpZ0ludEZyb21CdWZmZXJMRSxcbiAgYmlnSW50VG9CdWZmZXJCRSxcbiAgYmlnSW50VG9CdWZmZXJMRSxcbiAgY2xhbXAsXG59IGZyb20gJy4uLy4uL2FjY291bnQtbGliJztcbmltcG9ydCB7XG4gIGFzc2VydEJpcDMyUGF0aCxcbiAgZGVjb2RlRGVyaXZhYmxlRWQyNTUxOVB1YixcbiAgZGVjb2RlRWQyNTUxOUNoYWluQ29kZSxcbiAgZGVjb2RlRWQyNTUxOVN0cktleVNlY3JldFNlZWQsXG59IGZyb20gJ0BiaXRnby1iZXRhL3Nkay1saWItc2FmZXMnO1xuXG4vKiogRWQyNTUxOSBleHRlbmRlZC1rZXkgaGFsdmVzICsgcHVibGljIHBvaW50LCBwYXJhbWV0ZXJpc2VkIGJ5IGVuY29kaW5nIChCdWZmZXIgcmF3LCBzdHJpbmcgaGV4KS4gKi9cbmV4cG9ydCB0eXBlIEVkMjU1MTlFeHRlbmRlZEtleVBhcnRzPFQ+ID0ge1xuICByZWFkb25seSBrTDogVDsgLy8gc2lnbmluZyBzY2FsYXIsIHJlZHVjZWQgbW9kIExcbiAgcmVhZG9ubHkga1I6IFQ7IC8vIG5vbmNlIHByZWZpeFxuICByZWFkb25seSBwdWI6IFQ7IC8vIDMyLWJ5dGUgcHVibGljIGtleVxufTtcblxubGV0IGVkZHNhUHJvbWlzZTogUHJvbWlzZTxFZGRzYT4gfCB1bmRlZmluZWQ7XG5mdW5jdGlvbiBnZXRFZGRzYSgpOiBQcm9taXNlPEVkZHNhPiB7XG4gIGlmICghZWRkc2FQcm9taXNlKSB7XG4gICAgZWRkc2FQcm9taXNlID0gKGFzeW5jICgpID0+IEVkZHNhLmluaXRpYWxpemUoYXdhaXQgRWQyNTUxOUJJUDMyLmluaXRpYWxpemUoKSkpKCk7XG4gICAgZWRkc2FQcm9taXNlLmNhdGNoKCgpID0+IHtcbiAgICAgIGVkZHNhUHJvbWlzZSA9IHVuZGVmaW5lZDtcbiAgICB9KTtcbiAgfVxuICByZXR1cm4gZWRkc2FQcm9taXNlO1xufVxuXG4vKiogU29mdC1kZXJpdmUgYW4gdW5oYXJkZW5lZCBwYXRoIGFuZCByZXR1cm4gdGhlIGRlcml2ZWQgcmF3IDMyLWJ5dGUgcHVibGljIGtleS4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBzb2Z0RGVyaXZlQ2hpbGRQdWJFZDI1NTE5QXRQYXRoKGNvbXBvc2l0ZVB1Yjogc3RyaW5nLCBwYXRoOiBzdHJpbmcpOiBQcm9taXNlPEJ1ZmZlcj4ge1xuICBhc3NlcnRCaXAzMlBhdGgocGF0aCwgeyBoYXJkZW5lZDogZmFsc2UgfSk7XG4gIGNvbnN0IHsgcHViLCBjaGFpbkNvZGUgfSA9IGRlY29kZURlcml2YWJsZUVkMjU1MTlQdWIoY29tcG9zaXRlUHViKTtcbiAgY29uc3QgZWRkc2EgPSBhd2FpdCBnZXRFZGRzYSgpO1xuICByZXR1cm4gQnVmZmVyLmZyb20oZWRkc2EuZGVyaXZlVW5oYXJkZW5lZChCdWZmZXIuY29uY2F0KFtwdWIsIGNoYWluQ29kZV0pLnRvU3RyaW5nKCdoZXgnKSwgcGF0aCkuc2xpY2UoMCwgNjQpLCAnaGV4Jyk7XG59XG5cbi8qKiBTb2Z0LWRlcml2ZSBgbS88aW5kZXg+YCBhbmQgcmV0dXJuIHRoZSBkZXJpdmVkIHJhdyAzMi1ieXRlIHB1YmxpYyBrZXkuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gc29mdERlcml2ZUNoaWxkUHViRWQyNTUxOShjb21wb3NpdGVQdWI6IHN0cmluZywgaW5kZXg6IG51bWJlcik6IFByb21pc2U8QnVmZmVyPiB7XG4gIGlmICghTnVtYmVyLmlzSW50ZWdlcihpbmRleCkgfHwgaW5kZXggPCAwIHx8IGluZGV4ID4gMHg3ZmZmZmZmZikge1xuICAgIHRocm93IG5ldyBFcnJvcihgZWQyNTUxOSBzYWZlIGNvLXNpZ25lciBkZXJpdmF0aW9uIGluZGV4IG11c3QgYmUgbm9uLWhhcmRlbmVkLCBnb3QgJHtpbmRleH1gKTtcbiAgfVxuICByZXR1cm4gc29mdERlcml2ZUNoaWxkUHViRWQyNTUxOUF0UGF0aChjb21wb3NpdGVQdWIsIGBtLyR7aW5kZXh9YCk7XG59XG5cbi8qKlxuICogU29mdC1kZXJpdmUgYW4gZWQyNTUxOSBjby1zaWduZXIgY2hpbGQgYXQgYW4gdW5oYXJkZW5lZCBwYXRoLCByZXR1cm5pbmcgdGhlIHByaXZhdGVcbiAqIGV4dGVuZGVkLWtleSBtYXRlcmlhbCDigJQgdGhlIHJlZHVjZWQtbW9kLUwgc2NhbGFyIGBrTGAsIHRoZSBub25jZSBwcmVmaXggYGtSYCwgYW5kIHRoZSBtYXRjaGluZ1xuICogcHVibGljIHBvaW50IOKAlCBmcm9tIGEgcm9vdCBzZWNyZXQgc2VlZCBwbHVzIHRoZSByb290IGNoYWluIGNvZGUgY2FycmllZCBvbiB0aGUga2V5Y2FyZC5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHNvZnREZXJpdmVDaGlsZFBydkVkMjU1MTlBdFBhdGgocGFyYW1zOiB7XG4gIHNlZWRTdHJLZXk6IHN0cmluZztcbiAgY2hhaW5Db2RlOiBzdHJpbmc7XG4gIHBhdGg6IHN0cmluZztcbn0pOiBQcm9taXNlPEVkMjU1MTlFeHRlbmRlZEtleVBhcnRzPEJ1ZmZlcj4+IHtcbiAgY29uc3QgeyBzZWVkU3RyS2V5LCBjaGFpbkNvZGUsIHBhdGggfSA9IHBhcmFtcztcbiAgYXNzZXJ0QmlwMzJQYXRoKHBhdGgsIHsgaGFyZGVuZWQ6IGZhbHNlIH0pO1xuICBjb25zdCBzZWVkID0gZGVjb2RlRWQyNTUxOVN0cktleVNlY3JldFNlZWQoc2VlZFN0cktleSk7XG4gIGNvbnN0IGNoYWluQ29kZUJ1ZiA9IGRlY29kZUVkMjU1MTlDaGFpbkNvZGUoY2hhaW5Db2RlKTtcbiAgY29uc3QgZWRkc2EgPSBhd2FpdCBnZXRFZGRzYSgpO1xuICBjb25zdCBoID0gY3JlYXRlSGFzaCgnc2hhNTEyJykudXBkYXRlKHNlZWQpLmRpZ2VzdCgpO1xuICBjb25zdCBzayA9IGNsYW1wKGJpZ0ludEZyb21CdWZmZXJMRShoLnN1YmFycmF5KDAsIDMyKSkpO1xuICBjb25zdCBwcmVmaXggPSBiaWdJbnRGcm9tQnVmZmVyQkUoaC5zdWJhcnJheSgzMikpO1xuICBjb25zdCBwayA9IEVkZHNhLmN1cnZlLmJhc2VQb2ludE11bHQoc2spO1xuICBpZiAoIWVkZHNhLmhkVHJlZSkge1xuICAgIHRocm93IG5ldyBFcnJvcignRWRkc2EgSEQgdHJlZSBpcyBub3QgaW5pdGlhbGl6ZWQnKTtcbiAgfVxuICBjb25zdCBkZXJpdmVkID0gZWRkc2EuaGRUcmVlLnByaXZhdGVEZXJpdmUoeyBwaywgc2ssIHByZWZpeCwgY2hhaW5jb2RlOiBiaWdJbnRGcm9tQnVmZmVyQkUoY2hhaW5Db2RlQnVmKSB9LCBwYXRoKTtcbiAgaWYgKGRlcml2ZWQucHJlZml4ID09PSB1bmRlZmluZWQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3NvZnQgZGVyaXZhdGlvbiBkaWQgbm90IHByb2R1Y2UgYSBub25jZSBwcmVmaXgnKTtcbiAgfVxuICByZXR1cm4ge1xuICAgIGtMOiBiaWdJbnRUb0J1ZmZlckxFKGRlcml2ZWQuc2ssIDMyKSxcbiAgICBrUjogYmlnSW50VG9CdWZmZXJCRShkZXJpdmVkLnByZWZpeCwgMzIpLFxuICAgIHB1YjogYmlnSW50VG9CdWZmZXJMRShkZXJpdmVkLnBrLCAzMiksXG4gIH07XG59XG5cbi8qKlxuICogU2lnbiBgbWVzc2FnZWAgd2l0aCBhIEJJUDMyLUVkMjU1MTkgZXh0ZW5kZWQga2V5IGRpcmVjdGx5LCB3aXRob3V0IGEgc2VlZC5cbiAqXG4gKiBBIHNvZnQtZGVyaXZlZCBjaGlsZCBoYXMgbm8gMzItYnl0ZSBzZWVkIHdob3NlIFNIQS01MTIgeWllbGRzIGAoa0wsIGtSKWAsIHNvIHRoZVxuICogc2VlZC1iYXNlZCBgbmFjbC5zaWduLmtleVBhaXIuZnJvbVNlZWRgIGNhbm5vdCBzaWduIGZvciBpdC4gVGhpcyBwZXJmb3JtcyBSRkMgODAzMlxuICogc2NhbGFyIHNpZ25pbmcgc3RyYWlnaHQgZnJvbSB0aGUgcmVkdWNlZC1tb2QtTCBzY2FsYXIgYGtMYCBhbmQgdGhlIG5vbmNlIHByZWZpeCBga1JgLlxuICpcbiAqIEBwYXJhbSBtZXNzYWdlIGJ5dGVzIHRvIHNpZ25cbiAqIEBwYXJhbSBrTCAzMi1ieXRlIHNpZ25pbmcgc2NhbGFyLCByZWR1Y2VkIG1vZCBMIChsaXR0bGUtZW5kaWFuKVxuICogQHBhcmFtIGtSIDMyLWJ5dGUgbm9uY2UgcHJlZml4IChiaWctZW5kaWFuKVxuICogQHJldHVybnMgNjQtYnl0ZSBFZDI1NTE5IHNpZ25hdHVyZSBgUiDigJYgU2BcbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHNpZ25FZDI1NTE5RXh0ZW5kZWQobWVzc2FnZTogQnVmZmVyLCBrTDogQnVmZmVyLCBrUjogQnVmZmVyKTogUHJvbWlzZTxCdWZmZXI+IHtcbiAgaWYgKGtMLmxlbmd0aCAhPT0gMzIpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgRWQyNTUxOSBleHRlbmRlZCBrZXkga0wgbGVuZ3RoOiBleHBlY3RlZCAzMiBieXRlcywgZ290ICR7a0wubGVuZ3RofWApO1xuICB9XG4gIGlmIChrUi5sZW5ndGggIT09IDMyKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIEVkMjU1MTkgZXh0ZW5kZWQga2V5IGtSIGxlbmd0aDogZXhwZWN0ZWQgMzIgYnl0ZXMsIGdvdCAke2tSLmxlbmd0aH1gKTtcbiAgfVxuICBhd2FpdCBnZXRFZGRzYSgpO1xuICBjb25zdCBjdXJ2ZSA9IEVkZHNhLmN1cnZlO1xuICBjb25zdCBrTEludCA9IGJpZ0ludEZyb21CdWZmZXJMRShrTCk7XG4gIGNvbnN0IHIgPSBjdXJ2ZS5zY2FsYXJSZWR1Y2UoXG4gICAgYmlnSW50RnJvbUJ1ZmZlckxFKFxuICAgICAgY3JlYXRlSGFzaCgnc2hhNTEyJylcbiAgICAgICAgLnVwZGF0ZShCdWZmZXIuY29uY2F0KFtrUiwgbWVzc2FnZV0pKVxuICAgICAgICAuZGlnZXN0KClcbiAgICApXG4gICk7XG4gIGNvbnN0IFIgPSBjdXJ2ZS5iYXNlUG9pbnRNdWx0KHIpO1xuICBjb25zdCBBID0gY3VydmUuYmFzZVBvaW50TXVsdChrTEludCk7XG4gIGNvbnN0IGggPSBjdXJ2ZS5zY2FsYXJSZWR1Y2UoXG4gICAgYmlnSW50RnJvbUJ1ZmZlckxFKFxuICAgICAgY3JlYXRlSGFzaCgnc2hhNTEyJylcbiAgICAgICAgLnVwZGF0ZShCdWZmZXIuY29uY2F0KFtiaWdJbnRUb0J1ZmZlckxFKFIsIDMyKSwgYmlnSW50VG9CdWZmZXJMRShBLCAzMiksIG1lc3NhZ2VdKSlcbiAgICAgICAgLmRpZ2VzdCgpXG4gICAgKVxuICApO1xuICBjb25zdCBTID0gY3VydmUuc2NhbGFyQWRkKHIsIGN1cnZlLnNjYWxhck11bHQoaCwga0xJbnQpKTtcbiAgcmV0dXJuIEJ1ZmZlci5jb25jYXQoW2JpZ0ludFRvQnVmZmVyTEUoUiwgMzIpLCBiaWdJbnRUb0J1ZmZlckxFKFMsIDMyKV0pO1xufVxuXG4vKiogQW4gZXh0ZXJuYWxseS1wcm9kdWNlZCBFZDI1NTE5IHNpZ25hdHVyZSBvdmVyIGEgdHJhbnNhY3Rpb24ncyBzaWduaW5nIG1lc3NhZ2UuICovXG5leHBvcnQgdHlwZSBFeHRlcm5hbEVkMjU1MTlTaWduYXR1cmUgPSB7XG4gIHJlYWRvbmx5IHB1YmxpY0tleTogc3RyaW5nOyAvLyByYXcgMzItYnl0ZSBwdWJsaWMga2V5IChoZXgpXG4gIHJlYWRvbmx5IHNpZ25hdHVyZTogc3RyaW5nOyAvLyByYXcgNjQtYnl0ZSBzaWduYXR1cmUgKGhleClcbn07XG5cbi8qKiBGYWlscyBmYXN0IGlmIGEgYEV4dGVybmFsRWQyNTUxOVNpZ25hdHVyZWAgaGFzIG1hbGZvcm1lZCBoZXgvbGVuZ3Rocy4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhc3NlcnRWYWxpZEV4dGVybmFsRWQyNTUxOVNpZ25hdHVyZShzaWc6IEV4dGVybmFsRWQyNTUxOVNpZ25hdHVyZSk6IHZvaWQge1xuICBpZiAoIS9eWzAtOWEtZl17NjR9JC9pLnRlc3Qoc2lnLnB1YmxpY0tleSkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgZXh0ZXJuYWwgRWQyNTUxOSBwdWJsaWMga2V5OiBleHBlY3RlZCAzMiBieXRlcyAoNjQgaGV4IGNoYXJhY3RlcnMpJyk7XG4gIH1cbiAgaWYgKCEvXlswLTlhLWZdezEyOH0kL2kudGVzdChzaWcuc2lnbmF0dXJlKSkge1xuICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBleHRlcm5hbCBFZDI1NTE5IHNpZ25hdHVyZTogZXhwZWN0ZWQgNjQgYnl0ZXMgKDEyOCBoZXggY2hhcmFjdGVycyknKTtcbiAgfVxufVxuXG4vKipcbiAqIEEgbGF6aWx5LWludm9rZWQgZXh0ZXJuYWwgRWQyNTUxOSBzaWduZXIuIENhcnJpZXMgdGhlIHB1YmxpYyBrZXkgdXAgZnJvbnQgYW5kIHByb2R1Y2VzIHRoZVxuICogc2lnbmF0dXJlIG9uIGRlbWFuZCwgb25jZSB0aGUgbWVzc2FnZSBpdCBtdXN0IGNvdmVyIGV4aXN0cyDigJQgdW5saWtlIGBFeHRlcm5hbEVkMjU1MTlTaWduYXR1cmVgLFxuICogd2hpY2ggaXMgYSBwcmUtbWFkZSBzaWduYXR1cmUuIFVzZWQgZm9yIHNlZWRsZXNzIHNvZnQtZGVyaXZlZCBiYWNrdXAgY2hpbGRyZW4gd2hvc2Ugc2lnbmF0dXJlXG4gKiBtdXN0IGNvdmVyIHRyYW5zYWN0aW9uIGJ5dGVzIHRoYXQgb25seSBleGlzdCBhdCBgcmVjb3ZlcigpYCB0aW1lLlxuICovXG5leHBvcnQgdHlwZSBFeHRlcm5hbEVkMjU1MTlTaWduZXIgPSB7XG4gIHJlYWRvbmx5IHB1YmxpY0tleTogc3RyaW5nOyAvLyByYXcgMzItYnl0ZSBwdWJsaWMga2V5IChoZXgpXG4gIHJlYWRvbmx5IHNpZ246IChtZXNzYWdlOiBVaW50OEFycmF5KSA9PiBQcm9taXNlPHsgc2lnbmF0dXJlOiBzdHJpbmcgfT47IC8vIHJhdyA2NC1ieXRlIHNpZ25hdHVyZSAoaGV4KVxufTtcblxuLyoqIEZhaWxzIGZhc3QgaWYgYW4gYEV4dGVybmFsRWQyNTUxOVNpZ25lcmAgaXMgbWlzc2luZyBvciBtaXMtc2hhcGVkLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFzc2VydFZhbGlkRXh0ZXJuYWxFZDI1NTE5U2lnbmVyKHNpZ25lcjogRXh0ZXJuYWxFZDI1NTE5U2lnbmVyKTogdm9pZCB7XG4gIGlmICghL15bMC05YS1mXXs2NH0kL2kudGVzdChzaWduZXIucHVibGljS2V5KSkge1xuICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBleHRlcm5hbCBFZDI1NTE5IHB1YmxpYyBrZXk6IGV4cGVjdGVkIDMyIGJ5dGVzICg2NCBoZXggY2hhcmFjdGVycyknKTtcbiAgfVxuICBpZiAodHlwZW9mIHNpZ25lci5zaWduICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIGV4dGVybmFsIEVkMjU1MTkgc2lnbmVyOiBzaWduIG11c3QgYmUgYSBmdW5jdGlvbicpO1xuICB9XG59XG5cbi8qKlxuICogQ2FsbHMgYW4gYEV4dGVybmFsRWQyNTUxOVNpZ25lcmAgb3ZlciBgbWVzc2FnZWAsIGZhaWxzIGZhc3QgdW5sZXNzIHRoZSBzaWduYXR1cmUgaXMgYSB2YWxpZFxuICogNjQtYnl0ZSAoMTI4LWhleCkgc2lnbmF0dXJlIHRoYXQgdmVyaWZpZXMgYWdhaW5zdCB0aGUgc2lnbmVyJ3MgYWR2ZXJ0aXNlZCBwdWJsaWMga2V5LCBhbmRcbiAqIHJldHVybnMgdGhlIGhleCBzaWduYXR1cmUuIFRoZSBjcnlwdG9ncmFwaGljIGNoZWNrIGxpdmVzIGhlcmUg4oCUIG9uY2UsIHNoYXJlZCBieSBldmVyeSBjb2luIOKAlFxuICogc28gbm8gY2FsbGVyIGNhbiBpbmplY3QgYSB3ZWxsLWZvcm1lZC1idXQtd3Jvbmcgc2lnbmF0dXJlIGludG8gYSB0cmFuc2FjdGlvbi5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHNpZ25XaXRoRXh0ZXJuYWxFZDI1NTE5U2lnbmVyKFxuICBzaWduZXI6IEV4dGVybmFsRWQyNTUxOVNpZ25lcixcbiAgbWVzc2FnZTogVWludDhBcnJheVxuKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgYXNzZXJ0VmFsaWRFeHRlcm5hbEVkMjU1MTlTaWduZXIoc2lnbmVyKTtcbiAgLy8gVGhlIHNpZ25lciBnZXRzIGEgZGVmZW5zaXZlIGNvcHk6IGl0IG11c3Qgbm90IGJlIGFibGUgdG8gbXV0YXRlIHRoZSBhdXRob3JpdGF0aXZlIHRyYW5zYWN0aW9uXG4gIC8vIGJ5dGVzLCBhbmQgdGhlIHNpZ25hdHVyZSBpcyB2ZXJpZmllZCBhZ2FpbnN0IHRoZSBvcmlnaW5hbCBtZXNzYWdlLCBub3Qgd2hhdGV2ZXIgdGhlIHNpZ25lclxuICAvLyByZWNlaXZlZCBvciBtb2RpZmllZC5cbiAgY29uc3QgbWVzc2FnZUZvclNpZ25lciA9IFVpbnQ4QXJyYXkuZnJvbShtZXNzYWdlKTtcbiAgY29uc3QgcmVzdWx0ID0gYXdhaXQgc2lnbmVyLnNpZ24obWVzc2FnZUZvclNpZ25lcik7XG4gIGlmICghcmVzdWx0IHx8IHR5cGVvZiByZXN1bHQuc2lnbmF0dXJlICE9PSAnc3RyaW5nJykge1xuICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBleHRlcm5hbCBFZDI1NTE5IHNpZ25lcjogc2lnbiBtdXN0IHJlc29sdmUgdG8geyBzaWduYXR1cmU6IHN0cmluZyB9Jyk7XG4gIH1cbiAgaWYgKCEvXlswLTlhLWZdezEyOH0kL2kudGVzdChyZXN1bHQuc2lnbmF0dXJlKSkge1xuICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBleHRlcm5hbCBFZDI1NTE5IHNpZ25hdHVyZTogZXhwZWN0ZWQgNjQgYnl0ZXMgKDEyOCBoZXggY2hhcmFjdGVycyknKTtcbiAgfVxuICBjb25zdCBzaWduYXR1cmUgPSBCdWZmZXIuZnJvbShyZXN1bHQuc2lnbmF0dXJlLCAnaGV4Jyk7XG4gIGNvbnN0IHB1YmxpY0tleSA9IEJ1ZmZlci5mcm9tKHNpZ25lci5wdWJsaWNLZXksICdoZXgnKTtcbiAgaWYgKCFuYWNsLnNpZ24uZGV0YWNoZWQudmVyaWZ5KG1lc3NhZ2UsIHNpZ25hdHVyZSwgcHVibGljS2V5KSkge1xuICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBleHRlcm5hbCBFZDI1NTE5IHNpZ25lcjogc2lnbmF0dXJlIGRvZXMgbm90IHZlcmlmeSBhZ2FpbnN0IGl0cyBwdWJsaWMga2V5Jyk7XG4gIH1cbiAgcmV0dXJuIHJlc3VsdC5zaWduYXR1cmU7XG59XG4iXX0=
@@ -104,7 +104,8 @@ export type SecpSafeRecoverKeyParams = {
104
104
  * `rootAddress` is the wallet's on-chain address. For ALGO it's the 2-of-3 multisig address over the
105
105
  * three child pubs — derivable here, but `recover()` still requires it as input. Note this is
106
106
  * *derived*, not independently verified against a known wallet address; callers with a recorded
107
- * address should cross-check it themselves.
107
+ * address should cross-check it themselves. For HBAR this field is omitted so the caller's
108
+ * network-assigned account ID is preserved when the key params are spread into a recovery request.
108
109
  */
109
110
  export type Ed25519SafeRecoverKeyParams = {
110
111
  slot: 'ed25519Multisig';
@@ -112,7 +113,7 @@ export type Ed25519SafeRecoverKeyParams = {
112
113
  userKey: string;
113
114
  bitgoKey: string;
114
115
  walletPassphrase: string;
115
- rootAddress: string;
116
+ rootAddress?: string;
116
117
  /**
117
118
  * Lazy signer for the seedless backup child. The backup child has no seed, so it cannot be
118
119
  * seed-signed; and its signature must cover `tx.bytesToSign()`, which only exists once
@@ -126,7 +127,7 @@ export type Ed25519SafeRecoverKeyParams = {
126
127
  userKey: string;
127
128
  backupKey: string;
128
129
  bitgoKey: string;
129
- rootAddress: string;
130
+ rootAddress?: string;
130
131
  };
131
132
  export type SafeRecoverKeyParams = SecpSafeRecoverKeyParams | Ed25519SafeRecoverKeyParams;
132
133
  export type DecryptedSafeRoots = {
@@ -178,7 +179,8 @@ export type SafeRecoverKeyParamsRequest = {
178
179
  * Builds the key fields `coin.recover()` expects from derived Safe child keys.
179
180
  * Supports `secp256k1Multisig` (slot 1) and `ed25519Multisig` (slot 2); the MPC slots fail closed.
180
181
  * Signed mode re-encrypts the child secrets under a fresh ephemeral passphrase (v1/SJCL); unsigned
181
- * mode returns pubs. `rootAddress` is derived from the child keys, not independently verified.
182
+ * mode returns pubs. Where supported, `rootAddress` is derived from the child keys, not independently
183
+ * verified; otherwise it is omitted so the caller can supply it.
182
184
  */
183
185
  export declare function buildSafeRecoverKeyParams(params: Extract<SafeRecoverKeyParamsRequest, {
184
186
  slot: 'secp256k1Multisig';
@@ -1 +1 @@
1
- {"version":3,"file":"recovery.d.ts","sourceRoot":"","sources":["../../../../src/bitgo/safe/recovery.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"recovery.d.ts","sourceRoot":"","sources":["../../../../src/bitgo/safe/recovery.ts"],"names":[],"mappings":"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"}
@@ -148,11 +148,18 @@ async function deriveSafeWalletKeys(params) {
148
148
  /**
149
149
  * Per-coin encoders for the `ed25519Multisig` slot: each slot-2 coin re-encodes the same 32-byte
150
150
  * children into its own address/seed string formats. A coin absent from the registry is not yet
151
- * supported for slot-2 recovery (xlm/hbar are future arms).
151
+ * supported for slot-2 recovery (xlm is a future arm).
152
152
  */
153
+ const ALGO_ENCODERS = {
154
+ encodePub: sdk_lib_safes_1.encodeAlgoKey,
155
+ encodeSeed: sdk_lib_safes_1.encodeAlgoKey,
156
+ deriveRootAddress: (userPub, backupPub, bitgoPub) => (0, sdk_lib_safes_1.algoMultisigAddress)(1, 2, [userPub, backupPub, bitgoPub]),
157
+ };
153
158
  const ED25519_MULTISIG_COIN_ENCODERS = {
154
- algo: { encodePub: sdk_lib_safes_1.encodeAlgoKey, encodeSeed: sdk_lib_safes_1.encodeAlgoKey },
155
- talgo: { encodePub: sdk_lib_safes_1.encodeAlgoKey, encodeSeed: sdk_lib_safes_1.encodeAlgoKey },
159
+ algo: ALGO_ENCODERS,
160
+ talgo: ALGO_ENCODERS,
161
+ hbar: { encodePub: sdk_lib_safes_1.encodeHbarPublicKeyDer, encodeSeed: sdk_lib_safes_1.encodeHbarPrivateKeyDer },
162
+ thbar: { encodePub: sdk_lib_safes_1.encodeHbarPublicKeyDer, encodeSeed: sdk_lib_safes_1.encodeHbarPrivateKeyDer },
156
163
  };
157
164
  async function buildSafeRecoverKeyParams(params) {
158
165
  const { bitgo, mode } = params;
@@ -204,10 +211,11 @@ async function buildEd25519MultisigRecoverKeyParams(bitgo, coin, keys, mode) {
204
211
  const userPub = buffer_1.Buffer.from(keys.user.pub, 'hex');
205
212
  const backupPub = buffer_1.Buffer.from(keys.backup.pub, 'hex');
206
213
  const bitgoPub = buffer_1.Buffer.from(keys.bitgo.pub, 'hex');
207
- // Algorand wallet addresses are the version-1 2-of-3 multisig address over the three child pubs
208
- // in wallet-creation order. `Algo.recover()` recomputes and enforces the same value and throws
209
- // `RecoveryKeyMismatchError` on any mismatch (sdk-coin-algo/src/algo.ts).
210
- const rootAddress = (0, sdk_lib_safes_1.algoMultisigAddress)(1, 2, [userPub, backupPub, bitgoPub]);
214
+ // The root address is derivable from child pubs for ALGO (version-1 2-of-3 multisig), but
215
+ // not for HBAR (Hedera account IDs are network-assigned). Each coin declares, via its registry
216
+ // entry, whether it can derive one; the caller supplies it otherwise.
217
+ const rootAddress = encoders.deriveRootAddress?.(userPub, backupPub, bitgoPub);
218
+ const rootAddressParams = rootAddress === undefined ? {} : { rootAddress };
211
219
  if (mode === 'unsigned') {
212
220
  return {
213
221
  slot: 'ed25519Multisig',
@@ -215,7 +223,7 @@ async function buildEd25519MultisigRecoverKeyParams(bitgo, coin, keys, mode) {
215
223
  userKey: encoders.encodePub(userPub),
216
224
  backupKey: encoders.encodePub(backupPub),
217
225
  bitgoKey: encoders.encodePub(bitgoPub),
218
- rootAddress,
226
+ ...rootAddressParams,
219
227
  };
220
228
  }
221
229
  // The user child is a hardened SLIP-0010 seed, so it re-encrypts exactly like slot 1. The backup
@@ -233,7 +241,7 @@ async function buildEd25519MultisigRecoverKeyParams(bitgo, coin, keys, mode) {
233
241
  userKey,
234
242
  bitgoKey: encoders.encodePub(bitgoPub),
235
243
  walletPassphrase,
236
- rootAddress,
244
+ ...rootAddressParams,
237
245
  externalBackupSigner: {
238
246
  publicKey: keys.backup.pub,
239
247
  sign: async (message) => ({
@@ -242,4 +250,4 @@ async function buildEd25519MultisigRecoverKeyParams(bitgo, coin, keys, mode) {
242
250
  },
243
251
  };
244
252
  }
245
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVjb3ZlcnkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvYml0Z28vc2FmZS9yZWNvdmVyeS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQTZJQSxnREFvRUM7QUFNRCxvREE2RUM7QUE0Q0QsOERBeUNDO0FBelhEOzs7O0dBSUc7QUFDSCxtQ0FBZ0M7QUFDaEMsbUNBQXFDO0FBQ3JDLG1EQUE2QztBQUM3QyxpREFBc0Q7QUFFdEQsNkRBYW1DO0FBQ25DLCtEQU0rQjtBQUMvQix5REFBb0U7QUFFcEUsc0NBQW1EO0FBQ25ELG9FQUF5RTtBQTJHbEUsS0FBSyxVQUFVLGtCQUFrQixDQUFDLE1BTXhDO0lBQ0MsTUFBTSxFQUFFLEtBQUssRUFBRSxVQUFVLEVBQUUsWUFBWSxFQUFFLFdBQVcsRUFBRSxRQUFRLEVBQUUsR0FBRyxNQUFNLENBQUM7SUFFMUUsTUFBTSxTQUFTLEdBQUcsSUFBQSxtQ0FBbUIsRUFBQyxVQUFVLENBQUMsQ0FBQztJQUNsRCxNQUFNLFdBQVcsR0FBRyxJQUFBLG1DQUFtQixFQUFDLFlBQVksQ0FBQyxDQUFDO0lBQ3RELE1BQU0sVUFBVSxHQUFHLElBQUEsbUNBQW1CLEVBQUMsV0FBVyxDQUFDLENBQUM7SUFFcEQsTUFBTSxXQUFXLEdBQUcsS0FBSyxFQUFFLElBQVksRUFBbUIsRUFBRTtRQUMxRCxJQUFJLENBQUM7WUFDSCxPQUFPLE1BQU0sS0FBSyxDQUFDLE9BQU8sQ0FBQyxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLENBQUMsQ0FBQztRQUN4RCxDQUFDO1FBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztZQUNYLE1BQU0sSUFBSSwrQkFBc0IsQ0FBQywrREFBK0QsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUN2RyxDQUFDO0lBQ0gsQ0FBQyxDQUFDO0lBRUYsTUFBTSxhQUFhLEdBQUcsQ0FBQyxTQUFpQixFQUF3QixFQUFFO1FBQ2hFLElBQUksQ0FBQztZQUNILE9BQU8sSUFB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QUM7UUFDdEMsZ0JBQWdCO1FBQ2hCLFdBQVc7UUFDWCxvQkFBb0IsRUFBRTtZQUNwQixTQUFTLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHO1lBQzFCLElBQUksRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLEVBQUUsQ0FBQyxDQUFDO2dCQUN4QixTQUFTLEVBQUUsQ0FDVCxNQUFNLElBQUEseUNBQW1CLEVBQ3ZCLGVBQU0sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLEVBQ3BCLGVBQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxFQUFFLEVBQUUsS0FBSyxDQUFDLEVBQ2xDLGVBQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxFQUFFLEVBQUUsS0FBSyxDQUFDLENBQ25DLENBQ0YsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDO2FBQ2xCLENBQUM7U0FDSDtLQUNGLENBQUM7QUFDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAcHJldHRpZXJcbiAqXG4gKiBAZXhwZXJpbWVudGFsIFdSVy1mYWNpbmcgc2FmZSByZWNvdmVyeSBlbnRyeSBwb2ludHMuXG4gKi9cbmltcG9ydCB7IEJ1ZmZlciB9IGZyb20gJ2J1ZmZlcic7XG5pbXBvcnQgeyByYW5kb21CeXRlcyB9IGZyb20gJ2NyeXB0byc7XG5pbXBvcnQgeyBiaXAzMiB9IGZyb20gJ0BiaXRnby1iZXRhL3V0eG8tbGliJztcbmltcG9ydCB7IE1BWF9CSVAzMl9JTkRFWCB9IGZyb20gJ0BiaXRnby1iZXRhL3N0YXRpY3MnO1xuaW1wb3J0IHR5cGUgeyBSb290S2V5VHlwZSB9IGZyb20gJ0BiaXRnby9wdWJsaWMtdHlwZXMnO1xuaW1wb3J0IHtcbiAgYnVpbGRTYWZlQmlwNDRQYXRoLFxuICBkZWNvZGVFZDI1NTE5U3RyS2V5UHVibGljS2V5LFxuICBkZXJpdmVTYWZlQ2hpbGRFZDI1NTE5SGFyZGVuZWQsXG4gIGRlcml2ZVNhZmVDaGlsZFRyaXBsZXQsXG4gIEVkMjU1MTlDaGFpbkNvZGVFbnRyeUNvZGVjLFxuICBnZXRTYWZlQmlwNDRDb2luVHlwZSxcbiAgcGFyc2VTYWZlQmlwNDRQYXRoLFxuICBwYXJzZVNhZmVLZXljYXJkQm94LFxuICB0b1NvZnRUd2luUGF0aCxcbiAgYWxnb011bHRpc2lnQWRkcmVzcyxcbiAgZW5jb2RlQWxnb0tleSxcbiAgdHlwZSBTYWZlS2V5Y2FyZFJvb3RFbnRyeSxcbn0gZnJvbSAnQGJpdGdvLWJldGEvc2RrLWxpYi1zYWZlcyc7XG5pbXBvcnQge1xuICBzaWduRWQyNTUxOUV4dGVuZGVkLFxuICBzb2Z0RGVyaXZlQ2hpbGRQdWJFZDI1NTE5QXRQYXRoLFxuICBzb2Z0RGVyaXZlQ2hpbGRQcnZFZDI1NTE5QXRQYXRoLFxuICB0eXBlIEVkMjU1MTlFeHRlbmRlZEtleVBhcnRzLFxuICB0eXBlIEV4dGVybmFsRWQyNTUxOVNpZ25lcixcbn0gZnJvbSAnLi9kZXJpdmFibGVFZDI1NTE5UHViJztcbmltcG9ydCB7IERrbHNWcmZVdGlscywgTXBzVnJmVXRpbHMgfSBmcm9tICdAYml0Z28tYmV0YS9zZGstbGliLW1wYyc7XG5pbXBvcnQgeyBCaXRHb0Jhc2UgfSBmcm9tICcuLi9iaXRnb0Jhc2UnO1xuaW1wb3J0IHsgSW5jb3JyZWN0UGFzc3dvcmRFcnJvciB9IGZyb20gJy4uL2Vycm9ycyc7XG5pbXBvcnQgeyBwYXJzZVNhZmVNcGNLZXlFbnZlbG9wZXMgfSBmcm9tICcuLi91dGlscy90c3Mva2V5U2hhcmVFbnZlbG9wZSc7XG5cbmV4cG9ydCB0eXBlIERlY3J5cHRlZE1wY1NhZmVSb290ID0geyBzaWduaW5nOiBCdWZmZXI7IHZyZjogQnVmZmVyIH07XG5cbmV4cG9ydCB0eXBlIE9uY2hhaW5TYWZlUm9vdCA9IHsgdXNlcjogc3RyaW5nOyBiYWNrdXA6IHN0cmluZzsgYml0Z286IHN0cmluZyB9O1xuZXhwb3J0IHR5cGUgTXBjU2FmZVJvb3QgPSB7IHVzZXI6IERlY3J5cHRlZE1wY1NhZmVSb290OyBiYWNrdXA6IERlY3J5cHRlZE1wY1NhZmVSb290OyBiaXRnbzogc3RyaW5nIH07XG5leHBvcnQgdHlwZSBFZDI1NTE5TXVsdGlzaWdTYWZlUm9vdCA9IHtcbiAgdXNlcjogc3RyaW5nO1xuICBiYWNrdXA6IHsgcHJ2OiBzdHJpbmc7IGNoYWluQ29kZTogc3RyaW5nIH07XG4gIGJpdGdvOiBzdHJpbmc7XG59O1xuXG5leHBvcnQgdHlwZSBTZWNwMjU2azFNdWx0aXNpZ0NoaWxkS2V5cyA9IHtcbiAgdXNlcjogeyBwcnY6IHN0cmluZzsgcHViOiBzdHJpbmcgfTtcbiAgYmFja3VwOiB7IHBydjogc3RyaW5nOyBwdWI6IHN0cmluZyB9O1xuICBiaXRnbzogeyBwdWI6IHN0cmluZyB9O1xufTtcblxuZXhwb3J0IHR5cGUgRWNkc2FNcGNDaGlsZEtleXMgPSB7XG4gIGNvbW1vbktleWNoYWluOiBzdHJpbmc7XG4gIHVzZXI6IHN0cmluZztcbiAgYmFja3VwOiBzdHJpbmc7XG59O1xuXG5leHBvcnQgdHlwZSBFZGRzYU1wY0NoaWxkS2V5cyA9IEVjZHNhTXBjQ2hpbGRLZXlzO1xuXG4vKipcbiAqIEEgaGFyZGVuZWQgKFNMSVAtMDAxMCkgZWQyNTUxOSBjaGlsZC4gVGhlIGBraW5kYCBkaXNjcmltaW5hdG9yIHByZXZlbnRzIGEgcmF3IHNlZWQgZnJvbSBiZWluZ1xuICogbWlzdGFrZW4gZm9yIGFuIGV4dGVuZGVkIGtleSBkb3duc3RyZWFtIOKAlCBib3RoIGFyZSAzMi1ieXRlIHZhbHVlcyB0aGF0IGBpc1ZhbGlkUHViYCB3b3VsZCBhY2NlcHQuXG4gKi9cbmV4cG9ydCB0eXBlIFNhZmVFZDI1NTE5U2VlZEtleSA9IHtcbiAgcmVhZG9ubHkga2luZDogJ3NlZWQnO1xuICByZWFkb25seSBzZWVkOiBzdHJpbmc7IC8vIDMyLWJ5dGUgY2hpbGQgc2VlZCAoaGV4KSDigJQgdGhlIHNpZ25lciBpbnB1dFxuICByZWFkb25seSBwdWI6IHN0cmluZzsgLy8gMzItYnl0ZSBwdWJsaWMga2V5IChoZXgpXG59O1xuXG4vKipcbiAqIEEgc29mdCAoQklQMzItRWQyNTUxOSkgZWQyNTUxOSBjaGlsZC4gTm8gMzItYnl0ZSBzZWVkIG1hcHMgYmFjayB0byBhIHNvZnQtZGVyaXZlZCBjaGlsZCwgc28gdGhlXG4gKiBzaWduZXIgbmVlZHMgYm90aCBoYWx2ZXMgZGlyZWN0bHk6IGBrTGAgKHRoZSBjbGFtcGVkIHNjYWxhcikgYW5kIGBrUmAgKHRoZSBub25jZSBwcmVmaXgpLlxuICovXG5leHBvcnQgdHlwZSBTYWZlRWQyNTUxOUV4dGVuZGVkS2V5ID0geyByZWFkb25seSBraW5kOiAnZXh0ZW5kZWQnIH0gJiBFZDI1NTE5RXh0ZW5kZWRLZXlQYXJ0czxzdHJpbmc+OyAvLyBoZXhcblxuLyoqIFRoZSB0aHJlZSBlZDI1NTE5IGNvLXNpZ25lciBjaGlsZHJlbi4gQml0R28gaXMgcHViLW9ubHk6IGl0cyBwcml2YXRlIGtleSBzdGF5cyBpbiB0aGUgSFNNLiAqL1xuZXhwb3J0IHR5cGUgRWQyNTUxOU11bHRpc2lnQ2hpbGRLZXlzID0ge1xuICB1c2VyOiBTYWZlRWQyNTUxOVNlZWRLZXk7XG4gIGJhY2t1cDogU2FmZUVkMjU1MTlFeHRlbmRlZEtleTtcbiAgYml0Z286IHsgcmVhZG9ubHkgcHViOiBzdHJpbmcgfTtcbn07XG5cbmV4cG9ydCB0eXBlIERlcml2ZWRTYWZlV2FsbGV0S2V5cyA9XG4gIHwgeyBzbG90OiAnc2VjcDI1NmsxTXVsdGlzaWcnOyBwYXRoOiBzdHJpbmc7IGtleXM6IFNlY3AyNTZrMU11bHRpc2lnQ2hpbGRLZXlzIH1cbiAgfCB7IHNsb3Q6ICdlY2RzYU1wYyc7IHBhdGg6IHN0cmluZzsga2V5czogRWNkc2FNcGNDaGlsZEtleXMgfVxuICB8IHsgc2xvdDogJ2VkZHNhTXBjJzsgcGF0aDogc3RyaW5nOyBrZXlzOiBFZGRzYU1wY0NoaWxkS2V5cyB9XG4gIHwgeyBzbG90OiAnZWQyNTUxOU11bHRpc2lnJzsgcGF0aDogc3RyaW5nOyBrZXlzOiBFZDI1NTE5TXVsdGlzaWdDaGlsZEtleXMgfTtcblxuZXhwb3J0IHR5cGUgU2VjcFNhZmVSZWNvdmVyS2V5UGFyYW1zID0ge1xuICBzbG90OiAnc2VjcDI1NmsxTXVsdGlzaWcnO1xuICB1c2VyS2V5OiBzdHJpbmc7XG4gIGJhY2t1cEtleTogc3RyaW5nO1xuICBiaXRnb0tleTogc3RyaW5nO1xuICB3YWxsZXRQYXNzcGhyYXNlPzogc3RyaW5nO1xufTtcblxuLyoqXG4gKiBTbG90LTIgKGVkMjU1MTlNdWx0aXNpZykgc2FmZSByZWNvdmVyeSBrZXkgcGFyYW1zLiBBIGRpc2NyaW1pbmF0ZWQgdW5pb24gb24gYG1vZGVgLCBzbyB0aGUgaW52YWxpZFxuICogY29tYm9zIGFyZSBub3QgcmVwcmVzZW50YWJsZTogc2lnbmVkIG1vZGUgYWx3YXlzIGNhcnJpZXMgdGhlIGxhenkgc2lnbmVyIGFuZCBuZXZlciBhIGBiYWNrdXBLZXlgLFxuICogdW5zaWduZWQgbW9kZSBhbHdheXMgY2FycmllcyB0aGUgZW5jb2RlZCBgYmFja3VwS2V5YCBhbmQgbmV2ZXIgYSBzaWduZXIgb3IgcGFzc3BocmFzZS5cbiAqXG4gKiBgcm9vdEFkZHJlc3NgIGlzIHRoZSB3YWxsZXQncyBvbi1jaGFpbiBhZGRyZXNzLiBGb3IgQUxHTyBpdCdzIHRoZSAyLW9mLTMgbXVsdGlzaWcgYWRkcmVzcyBvdmVyIHRoZVxuICogdGhyZWUgY2hpbGQgcHVicyDigJQgZGVyaXZhYmxlIGhlcmUsIGJ1dCBgcmVjb3ZlcigpYCBzdGlsbCByZXF1aXJlcyBpdCBhcyBpbnB1dC4gTm90ZSB0aGlzIGlzXG4gKiAqZGVyaXZlZCosIG5vdCBpbmRlcGVuZGVudGx5IHZlcmlmaWVkIGFnYWluc3QgYSBrbm93biB3YWxsZXQgYWRkcmVzczsgY2FsbGVycyB3aXRoIGEgcmVjb3JkZWRcbiAqIGFkZHJlc3Mgc2hvdWxkIGNyb3NzLWNoZWNrIGl0IHRoZW1zZWx2ZXMuXG4gKi9cbmV4cG9ydCB0eXBlIEVkMjU1MTlTYWZlUmVjb3ZlcktleVBhcmFtcyA9XG4gIHwge1xuICAgICAgc2xvdDogJ2VkMjU1MTlNdWx0aXNpZyc7XG4gICAgICBtb2RlOiAnc2lnbmVkJztcbiAgICAgIHVzZXJLZXk6IHN0cmluZztcbiAgICAgIGJpdGdvS2V5OiBzdHJpbmc7XG4gICAgICB3YWxsZXRQYXNzcGhyYXNlOiBzdHJpbmc7XG4gICAgICByb290QWRkcmVzczogc3RyaW5nO1xuICAgICAgLyoqXG4gICAgICAgKiBMYXp5IHNpZ25lciBmb3IgdGhlIHNlZWRsZXNzIGJhY2t1cCBjaGlsZC4gVGhlIGJhY2t1cCBjaGlsZCBoYXMgbm8gc2VlZCwgc28gaXQgY2Fubm90IGJlXG4gICAgICAgKiBzZWVkLXNpZ25lZDsgYW5kIGl0cyBzaWduYXR1cmUgbXVzdCBjb3ZlciBgdHguYnl0ZXNUb1NpZ24oKWAsIHdoaWNoIG9ubHkgZXhpc3RzIG9uY2VcbiAgICAgICAqIGByZWNvdmVyKClgIGJ1aWxkcyB0aGUgdHguIFNvIGluc3RlYWQgb2YgYSBwcmUtbWFkZSBzaWduYXR1cmUgd2UgcGFzcyBhIGNsb3N1cmUgdGhhdCBob2xkc1xuICAgICAgICogdGhlIHByaXZhdGUgYGtMYC9ga1JgIGFuZCBzaWducyBvbiBkZW1hbmQg4oCUIHRoZSBwcml2YXRlIGhhbHZlcyBuZXZlciBsZWF2ZSBpdC5cbiAgICAgICAqL1xuICAgICAgZXh0ZXJuYWxCYWNrdXBTaWduZXI6IEV4dGVybmFsRWQyNTUxOVNpZ25lcjtcbiAgICB9XG4gIHwge1xuICAgICAgc2xvdDogJ2VkMjU1MTlNdWx0aXNpZyc7XG4gICAgICBtb2RlOiAndW5zaWduZWQnO1xuICAgICAgdXNlcktleTogc3RyaW5nO1xuICAgICAgYmFja3VwS2V5OiBzdHJpbmc7XG4gICAgICBiaXRnb0tleTogc3RyaW5nO1xuICAgICAgcm9vdEFkZHJlc3M6IHN0cmluZztcbiAgICB9O1xuXG5leHBvcnQgdHlwZSBTYWZlUmVjb3ZlcktleVBhcmFtcyA9IFNlY3BTYWZlUmVjb3ZlcktleVBhcmFtcyB8IEVkMjU1MTlTYWZlUmVjb3ZlcktleVBhcmFtcztcblxuZXhwb3J0IHR5cGUgRGVjcnlwdGVkU2FmZVJvb3RzID0ge1xuICBzZWNwMjU2azFNdWx0aXNpZzogT25jaGFpblNhZmVSb290O1xuICBlZDI1NTE5TXVsdGlzaWc6IEVkMjU1MTlNdWx0aXNpZ1NhZmVSb290O1xuICBlY2RzYU1wYzogTXBjU2FmZVJvb3Q7XG4gIGVkZHNhTXBjOiBNcGNTYWZlUm9vdDtcbn07XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBkZWNyeXB0U2FmZUtleWNhcmQocGFyYW1zOiB7XG4gIGJpdGdvOiBCaXRHb0Jhc2U7XG4gIHVzZXJLZXlCb3g6IHN0cmluZztcbiAgYmFja3VwS2V5Qm94OiBzdHJpbmc7XG4gIGJpdGdvS2V5Qm94OiBzdHJpbmc7XG4gIHBhc3N3b3JkOiBzdHJpbmc7XG59KTogUHJvbWlzZTxEZWNyeXB0ZWRTYWZlUm9vdHM+IHtcbiAgY29uc3QgeyBiaXRnbywgdXNlcktleUJveCwgYmFja3VwS2V5Qm94LCBiaXRnb0tleUJveCwgcGFzc3dvcmQgfSA9IHBhcmFtcztcblxuICBjb25zdCB1c2VyUm9vdHMgPSBwYXJzZVNhZmVLZXljYXJkQm94KHVzZXJLZXlCb3gpO1xuICBjb25zdCBiYWNrdXBSb290cyA9IHBhcnNlU2FmZUtleWNhcmRCb3goYmFja3VwS2V5Qm94KTtcbiAgY29uc3QgYml0Z29Sb290cyA9IHBhcnNlU2FmZUtleWNhcmRCb3goYml0Z29LZXlCb3gpO1xuXG4gIGNvbnN0IGRlY3J5cHRSb290ID0gYXN5bmMgKHJvb3Q6IHN0cmluZyk6IFByb21pc2U8c3RyaW5nPiA9PiB7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBhd2FpdCBiaXRnby5kZWNyeXB0KHsgaW5wdXQ6IHJvb3QsIHBhc3N3b3JkIH0pO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHRocm93IG5ldyBJbmNvcnJlY3RQYXNzd29yZEVycm9yKCd1bmFibGUgdG8gZGVjcnlwdCB0aGUgc2FmZSBrZXljYXJkIHdpdGggdGhlIHByb3ZpZGVkIHBhc3N3b3JkJywgZSk7XG4gICAgfVxuICB9O1xuXG4gIGNvbnN0IHVud3JhcE1wY1Jvb3QgPSAoZGVjcnlwdGVkOiBzdHJpbmcpOiBEZWNyeXB0ZWRNcGNTYWZlUm9vdCA9PiB7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBwYXJzZVNhZmVNcGNLZXlFbnZlbG9wZXMoZGVjcnlwdGVkKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICB0aHJvdyBuZXcgSW5jb3JyZWN0UGFzc3dvcmRFcnJvcigndW5hYmxlIHRvIGRlY3J5cHQgdGhlIHNhZmUga2V5Y2FyZCB3aXRoIHRoZSBwcm92aWRlZCBwYXNzd29yZCcsIGUpO1xuICAgIH1cbiAgfTtcblxuICAvLyBPbmx5IGJveCBCJ3MgZWQyNTUxOU11bHRpc2lnIHNsb3QgbWF5IGNhcnJ5IHRoZSBkZXJpdmFibGUgYHsgcHJ2LCBjaGFpbkNvZGUgfWAgb2JqZWN0OyBldmVyeVxuICAvLyBvdGhlciBlbnRyeSDigJQgYWxsIG9mIGJveGVzIEEgYW5kIEMsIGFuZCBldmVyeSBub24tZWQyNTUxOSBzbG90IGluIGJveCBCIOKAlCBpcyBhIGJhcmUgc3RyaW5nIGFuZFxuICAvLyBmYWlscyBjbG9zZWQgaWYgaXQgY2FycmllcyB0aGUgb2JqZWN0IGluc3RlYWQuXG4gIGNvbnN0IHJlcXVpcmVCYXJlU3RyaW5nID0gKGVudHJ5OiBTYWZlS2V5Y2FyZFJvb3RFbnRyeSk6IHN0cmluZyA9PiB7XG4gICAgaWYgKEVkMjU1MTlDaGFpbkNvZGVFbnRyeUNvZGVjLmlzKGVudHJ5KSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCd1bmV4cGVjdGVkIGVkMjU1MTkgY2hhaW4tY29kZSBlbnRyeSB3aGVyZSBhIGJhcmUgc3RyaW5nIHdhcyByZXF1aXJlZCcpO1xuICAgIH1cbiAgICByZXR1cm4gZW50cnk7XG4gIH07XG5cbiAgY29uc3QgZGVjcnlwdEVkMjU1MTlCYWNrdXAgPSBhc3luYyAoZW50cnk6IFNhZmVLZXljYXJkUm9vdEVudHJ5KTogUHJvbWlzZTx7IHBydjogc3RyaW5nOyBjaGFpbkNvZGU6IHN0cmluZyB9PiA9PiB7XG4gICAgaWYgKCFFZDI1NTE5Q2hhaW5Db2RlRW50cnlDb2RlYy5pcyhlbnRyeSkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignZWQyNTUxOSBiYWNrdXAgcm9vdCBtdXN0IGNhcnJ5IGEgY2hhaW4gY29kZScpO1xuICAgIH1cbiAgICByZXR1cm4geyBwcnY6IGF3YWl0IGRlY3J5cHRSb290KGVudHJ5LnBydiksIGNoYWluQ29kZTogZW50cnkuY2hhaW5Db2RlIH07XG4gIH07XG5cbiAgcmV0dXJuIHtcbiAgICBzZWNwMjU2azFNdWx0aXNpZzoge1xuICAgICAgdXNlcjogYXdhaXQgZGVjcnlwdFJvb3QocmVxdWlyZUJhcmVTdHJpbmcodXNlclJvb3RzLnNlY3AyNTZrMU11bHRpc2lnKSksXG4gICAgICBiYWNrdXA6IGF3YWl0IGRlY3J5cHRSb290KHJlcXVpcmVCYXJlU3RyaW5nKGJhY2t1cFJvb3RzLnNlY3AyNTZrMU11bHRpc2lnKSksXG4gICAgICBiaXRnbzogcmVxdWlyZUJhcmVTdHJpbmcoYml0Z29Sb290cy5zZWNwMjU2azFNdWx0aXNpZyksXG4gICAgfSxcbiAgICBlZDI1NTE5TXVsdGlzaWc6IHtcbiAgICAgIHVzZXI6IGF3YWl0IGRlY3J5cHRSb290KHJlcXVpcmVCYXJlU3RyaW5nKHVzZXJSb290cy5lZDI1NTE5TXVsdGlzaWcpKSxcbiAgICAgIGJhY2t1cDogYXdhaXQgZGVjcnlwdEVkMjU1MTlCYWNrdXAoYmFja3VwUm9vdHMuZWQyNTUxOU11bHRpc2lnKSxcbiAgICAgIGJpdGdvOiByZXF1aXJlQmFyZVN0cmluZyhiaXRnb1Jvb3RzLmVkMjU1MTlNdWx0aXNpZyksXG4gICAgfSxcbiAgICBlY2RzYU1wYzoge1xuICAgICAgdXNlcjogdW53cmFwTXBjUm9vdChhd2FpdCBkZWNyeXB0Um9vdChyZXF1aXJlQmFyZVN0cmluZyh1c2VyUm9vdHMuZWNkc2FNcGMpKSksXG4gICAgICBiYWNrdXA6IHVud3JhcE1wY1Jvb3QoYXdhaXQgZGVjcnlwdFJvb3QocmVxdWlyZUJhcmVTdHJpbmcoYmFja3VwUm9vdHMuZWNkc2FNcGMpKSksXG4gICAgICBiaXRnbzogcmVxdWlyZUJhcmVTdHJpbmcoYml0Z29Sb290cy5lY2RzYU1wYyksXG4gICAgfSxcbiAgICBlZGRzYU1wYzoge1xuICAgICAgdXNlcjogdW53cmFwTXBjUm9vdChhd2FpdCBkZWNyeXB0Um9vdChyZXF1aXJlQmFyZVN0cmluZyh1c2VyUm9vdHMuZWRkc2FNcGMpKSksXG4gICAgICBiYWNrdXA6IHVud3JhcE1wY1Jvb3QoYXdhaXQgZGVjcnlwdFJvb3QocmVxdWlyZUJhcmVTdHJpbmcoYmFja3VwUm9vdHMuZWRkc2FNcGMpKSksXG4gICAgICBiaXRnbzogcmVxdWlyZUJhcmVTdHJpbmcoYml0Z29Sb290cy5lZGRzYU1wYyksXG4gICAgfSxcbiAgfTtcbn1cblxuLyoqXG4gKiBEZXJpdmVzIGEgU2FmZSB3YWxsZXQncyBjaGlsZCBrZXlzIGF0IHRoZSBCSVA0NCBwYXRoIGZvciBhIGdpdmVuIHNsb3QgYW5kIGFjY291bnQuXG4gKiBTdXBwb3J0cyBhbGwgZm91ciBzbG90czogYHNlY3AyNTZrMU11bHRpc2lnYCwgYGVkMjU1MTlNdWx0aXNpZ2AsIGBlY2RzYU1wY2AsIGFuZCBgZWRkc2FNcGNgLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZGVyaXZlU2FmZVdhbGxldEtleXMocGFyYW1zOiB7XG4gIGNvaW46IHN0cmluZztcbiAgc2xvdDogUm9vdEtleVR5cGU7XG4gIGFjY291bnQ6IG51bWJlcjtcbiAgcm9vdHM6IERlY3J5cHRlZFNhZmVSb290cztcbn0pOiBQcm9taXNlPERlcml2ZWRTYWZlV2FsbGV0S2V5cz4ge1xuICBpZiAoIU51bWJlci5pc0ludGVnZXIocGFyYW1zLmFjY291bnQpIHx8IHBhcmFtcy5hY2NvdW50IDwgMCB8fCBwYXJhbXMuYWNjb3VudCA+IE1BWF9CSVAzMl9JTkRFWCkge1xuICAgIHRocm93IG5ldyBFcnJvcihgZGVyaXZlU2FmZVdhbGxldEtleXM6IGludmFsaWQgYWNjb3VudCAnJHtwYXJhbXMuYWNjb3VudH0nYCk7XG4gIH1cblxuICBjb25zdCB7IGFjY291bnQsIHJvb3RzIH0gPSBwYXJhbXM7XG4gIGNvbnN0IHBhdGggPSBidWlsZFNhZmVCaXA0NFBhdGgoZ2V0U2FmZUJpcDQ0Q29pblR5cGUocGFyYW1zLmNvaW4pLCBwYXJhbXMuc2xvdCwgYWNjb3VudCk7XG4gIGNvbnN0IHsgY29pblR5cGUsIHNsb3RPcmRpbmFsIH0gPSBwYXJzZVNhZmVCaXA0NFBhdGgocGF0aCk7XG5cbiAgaWYgKHBhcmFtcy5zbG90ID09PSAnc2VjcDI1NmsxTXVsdGlzaWcnKSB7XG4gICAgcmV0dXJuIHsgc2xvdDogJ3NlY3AyNTZrMU11bHRpc2lnJywgcGF0aCwga2V5czogZGVyaXZlU2FmZUNoaWxkVHJpcGxldChyb290cy5zZWNwMjU2azFNdWx0aXNpZywgcGF0aCkgfTtcbiAgfVxuXG4gIGlmIChwYXJhbXMuc2xvdCA9PT0gJ2VjZHNhTXBjJykge1xuICAgIGNvbnN0IHsgY29tbW9uS2V5Y2hhaW4sIHVzZXJDaGlsZCwgYmFja3VwQ2hpbGQgfSA9IGF3YWl0IERrbHNWcmZVdGlscy5kZXJpdmVTYWZlRWNkc2FNcGNDaGlsZCh7XG4gICAgICB1c2VyUm9vdDogcm9vdHMuZWNkc2FNcGMudXNlcixcbiAgICAgIGJhY2t1cFJvb3Q6IHJvb3RzLmVjZHNhTXBjLmJhY2t1cCxcbiAgICAgIGFjY291bnQsXG4gICAgICBjb2luVHlwZSxcbiAgICAgIHNhZmVTbG90T3JkaW5hbDogc2xvdE9yZGluYWwsXG4gICAgfSk7XG4gICAgcmV0dXJuIHtcbiAgICAgIHNsb3Q6ICdlY2RzYU1wYycsXG4gICAgICBwYXRoLFxuICAgICAga2V5czogeyBjb21tb25LZXljaGFpbiwgdXNlcjogdXNlckNoaWxkLCBiYWNrdXA6IGJhY2t1cENoaWxkIH0sXG4gICAgfTtcbiAgfVxuXG4gIGlmIChwYXJhbXMuc2xvdCA9PT0gJ2VkZHNhTXBjJykge1xuICAgIGNvbnN0IHsgY29tbW9uS2V5Y2hhaW4sIHVzZXJDaGlsZCwgYmFja3VwQ2hpbGQgfSA9IGF3YWl0IE1wc1ZyZlV0aWxzLmRlcml2ZVNhZmVFZGRzYU1wY0NoaWxkKHtcbiAgICAgIHVzZXJSb290OiByb290cy5lZGRzYU1wYy51c2VyLFxuICAgICAgYmFja3VwUm9vdDogcm9vdHMuZWRkc2FNcGMuYmFja3VwLFxuICAgICAgYWNjb3VudCxcbiAgICAgIGNvaW5UeXBlLFxuICAgICAgc2FmZVNsb3RPcmRpbmFsOiBzbG90T3JkaW5hbCxcbiAgICB9KTtcbiAgICByZXR1cm4ge1xuICAgICAgc2xvdDogJ2VkZHNhTXBjJyxcbiAgICAgIHBhdGgsXG4gICAgICBrZXlzOiB7IGNvbW1vbktleWNoYWluLCB1c2VyOiB1c2VyQ2hpbGQsIGJhY2t1cDogYmFja3VwQ2hpbGQgfSxcbiAgICB9O1xuICB9XG5cbiAgaWYgKHBhcmFtcy5zbG90ID09PSAnZWQyNTUxOU11bHRpc2lnJykge1xuICAgIGNvbnN0IHJvb3QgPSByb290cy5lZDI1NTE5TXVsdGlzaWc7XG4gICAgY29uc3QgY29zaWduZXJQYXRoID0gdG9Tb2Z0VHdpblBhdGgocGF0aCk7XG5cbiAgICBjb25zdCB1c2VyID0gZGVyaXZlU2FmZUNoaWxkRWQyNTUxOUhhcmRlbmVkKHJvb3QudXNlciwgcGF0aCk7XG4gICAgY29uc3QgYmFja3VwID0gYXdhaXQgc29mdERlcml2ZUNoaWxkUHJ2RWQyNTUxOUF0UGF0aCh7XG4gICAgICBzZWVkU3RyS2V5OiByb290LmJhY2t1cC5wcnYsXG4gICAgICBjaGFpbkNvZGU6IHJvb3QuYmFja3VwLmNoYWluQ29kZSxcbiAgICAgIHBhdGg6IGNvc2lnbmVyUGF0aCxcbiAgICB9KTtcbiAgICBjb25zdCBiaXRnbyA9IGF3YWl0IHNvZnREZXJpdmVDaGlsZFB1YkVkMjU1MTlBdFBhdGgocm9vdC5iaXRnbywgY29zaWduZXJQYXRoKTtcblxuICAgIHJldHVybiB7XG4gICAgICBzbG90OiAnZWQyNTUxOU11bHRpc2lnJyxcbiAgICAgIHBhdGgsXG4gICAgICBrZXlzOiB7XG4gICAgICAgIHVzZXI6IHsga2luZDogJ3NlZWQnLCBzZWVkOiB1c2VyLnBydiwgcHViOiBkZWNvZGVFZDI1NTE5U3RyS2V5UHVibGljS2V5KHVzZXIucHViKS50b1N0cmluZygnaGV4JykgfSxcbiAgICAgICAgYmFja3VwOiB7XG4gICAgICAgICAga2luZDogJ2V4dGVuZGVkJyxcbiAgICAgICAgICBrTDogYmFja3VwLmtMLnRvU3RyaW5nKCdoZXgnKSxcbiAgICAgICAgICBrUjogYmFja3VwLmtSLnRvU3RyaW5nKCdoZXgnKSxcbiAgICAgICAgICBwdWI6IGJhY2t1cC5wdWIudG9TdHJpbmcoJ2hleCcpLFxuICAgICAgICB9LFxuICAgICAgICBiaXRnbzogeyBwdWI6IGJpdGdvLnRvU3RyaW5nKCdoZXgnKSB9LFxuICAgICAgfSxcbiAgICB9O1xuICB9XG5cbiAgdGhyb3cgbmV3IEVycm9yKGBkZXJpdmVTYWZlV2FsbGV0S2V5czogc2xvdCAnJHtwYXJhbXMuc2xvdH0nIGlzIG5vdCBzdXBwb3J0ZWQgeWV0YCk7XG59XG5cbi8qKlxuICogUGVyLWNvaW4gZW5jb2RlcnMgZm9yIHRoZSBgZWQyNTUxOU11bHRpc2lnYCBzbG90OiBlYWNoIHNsb3QtMiBjb2luIHJlLWVuY29kZXMgdGhlIHNhbWUgMzItYnl0ZVxuICogY2hpbGRyZW4gaW50byBpdHMgb3duIGFkZHJlc3Mvc2VlZCBzdHJpbmcgZm9ybWF0cy4gQSBjb2luIGFic2VudCBmcm9tIHRoZSByZWdpc3RyeSBpcyBub3QgeWV0XG4gKiBzdXBwb3J0ZWQgZm9yIHNsb3QtMiByZWNvdmVyeSAoeGxtL2hiYXIgYXJlIGZ1dHVyZSBhcm1zKS5cbiAqL1xuY29uc3QgRUQyNTUxOV9NVUxUSVNJR19DT0lOX0VOQ09ERVJTOiBSZWNvcmQ8XG4gIHN0cmluZyxcbiAgeyBlbmNvZGVQdWI6IChieXRlczogQnVmZmVyKSA9PiBzdHJpbmc7IGVuY29kZVNlZWQ6IChieXRlczogQnVmZmVyKSA9PiBzdHJpbmcgfSB8IHVuZGVmaW5lZFxuPiA9IHtcbiAgYWxnbzogeyBlbmNvZGVQdWI6IGVuY29kZUFsZ29LZXksIGVuY29kZVNlZWQ6IGVuY29kZUFsZ29LZXkgfSxcbiAgdGFsZ286IHsgZW5jb2RlUHViOiBlbmNvZGVBbGdvS2V5LCBlbmNvZGVTZWVkOiBlbmNvZGVBbGdvS2V5IH0sXG59O1xuXG4vKipcbiAqIFRoZSByZXF1ZXN0IHNoYXBlIGZvciBgYnVpbGRTYWZlUmVjb3ZlcktleVBhcmFtc2AuIFRoZSBgc2xvdGAgbGl0ZXJhbCBpcyB0aGUgZGlzY3JpbWluYW50IHRoYXRcbiAqIHRpZXMgZWFjaCBzbG90IHRvIGl0cyBvd24gYGtleXNgIHNoYXBlLCBzbyBUeXBlU2NyaXB0IG5hcnJvd3MgYHBhcmFtcy5rZXlzYCBhdXRvbWF0aWNhbGx5IGFuZCBhXG4gKiBzbG90IGFkZGVkIHdpdGhvdXQgYSBicmFuY2ggaXMgYSBjb21waWxlIGVycm9yIHJhdGhlciB0aGFuIGEgc2lsZW50IGNhc3QuXG4gKi9cbmV4cG9ydCB0eXBlIFNhZmVSZWNvdmVyS2V5UGFyYW1zUmVxdWVzdCA9IHtcbiAgYml0Z286IEJpdEdvQmFzZTtcbiAgY29pbjogc3RyaW5nO1xuICBtb2RlOiAnc2lnbmVkJyB8ICd1bnNpZ25lZCc7XG59ICYgKFxuICB8IHsgc2xvdDogJ3NlY3AyNTZrMU11bHRpc2lnJzsga2V5czogU2VjcDI1NmsxTXVsdGlzaWdDaGlsZEtleXMgfVxuICB8IHsgc2xvdDogJ2VkMjU1MTlNdWx0aXNpZyc7IGtleXM6IEVkMjU1MTlNdWx0aXNpZ0NoaWxkS2V5cyB9XG4gIHwgeyBzbG90OiAnZWNkc2FNcGMnOyBrZXlzOiBFY2RzYU1wY0NoaWxkS2V5cyB9XG4gIHwgeyBzbG90OiAnZWRkc2FNcGMnOyBrZXlzOiBFZGRzYU1wY0NoaWxkS2V5cyB9XG4pO1xuXG4vKipcbiAqIEJ1aWxkcyB0aGUga2V5IGZpZWxkcyBgY29pbi5yZWNvdmVyKClgIGV4cGVjdHMgZnJvbSBkZXJpdmVkIFNhZmUgY2hpbGQga2V5cy5cbiAqIFN1cHBvcnRzIGBzZWNwMjU2azFNdWx0aXNpZ2AgKHNsb3QgMSkgYW5kIGBlZDI1NTE5TXVsdGlzaWdgIChzbG90IDIpOyB0aGUgTVBDIHNsb3RzIGZhaWwgY2xvc2VkLlxuICogU2lnbmVkIG1vZGUgcmUtZW5jcnlwdHMgdGhlIGNoaWxkIHNlY3JldHMgdW5kZXIgYSBmcmVzaCBlcGhlbWVyYWwgcGFzc3BocmFzZSAodjEvU0pDTCk7IHVuc2lnbmVkXG4gKiBtb2RlIHJldHVybnMgcHVicy4gYHJvb3RBZGRyZXNzYCBpcyBkZXJpdmVkIGZyb20gdGhlIGNoaWxkIGtleXMsIG5vdCBpbmRlcGVuZGVudGx5IHZlcmlmaWVkLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gYnVpbGRTYWZlUmVjb3ZlcktleVBhcmFtcyhcbiAgcGFyYW1zOiBFeHRyYWN0PFNhZmVSZWNvdmVyS2V5UGFyYW1zUmVxdWVzdCwgeyBzbG90OiAnc2VjcDI1NmsxTXVsdGlzaWcnIH0+XG4pOiBQcm9taXNlPFNlY3BTYWZlUmVjb3ZlcktleVBhcmFtcz47XG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gYnVpbGRTYWZlUmVjb3ZlcktleVBhcmFtcyhcbiAgcGFyYW1zOiBFeHRyYWN0PFNhZmVSZWNvdmVyS2V5UGFyYW1zUmVxdWVzdCwgeyBzbG90OiAnZWQyNTUxOU11bHRpc2lnJyB9PlxuKTogUHJvbWlzZTxFZDI1NTE5U2FmZVJlY292ZXJLZXlQYXJhbXM+O1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGJ1aWxkU2FmZVJlY292ZXJLZXlQYXJhbXMocGFyYW1zOiBTYWZlUmVjb3ZlcktleVBhcmFtc1JlcXVlc3QpOiBQcm9taXNlPFNhZmVSZWNvdmVyS2V5UGFyYW1zPjtcbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBidWlsZFNhZmVSZWNvdmVyS2V5UGFyYW1zKHBhcmFtczogU2FmZVJlY292ZXJLZXlQYXJhbXNSZXF1ZXN0KTogUHJvbWlzZTxTYWZlUmVjb3ZlcktleVBhcmFtcz4ge1xuICBjb25zdCB7IGJpdGdvLCBtb2RlIH0gPSBwYXJhbXM7XG5cbiAgaWYgKHBhcmFtcy5zbG90ID09PSAnZWQyNTUxOU11bHRpc2lnJykge1xuICAgIHJldHVybiBidWlsZEVkMjU1MTlNdWx0aXNpZ1JlY292ZXJLZXlQYXJhbXMoYml0Z28sIHBhcmFtcy5jb2luLCBwYXJhbXMua2V5cywgbW9kZSk7XG4gIH1cblxuICBpZiAocGFyYW1zLnNsb3QgPT09ICdzZWNwMjU2azFNdWx0aXNpZycpIHtcbiAgICBjb25zdCBrZXlzID0gcGFyYW1zLmtleXM7XG5cbiAgICBpZiAobW9kZSA9PT0gJ3Vuc2lnbmVkJykge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgc2xvdDogJ3NlY3AyNTZrMU11bHRpc2lnJyxcbiAgICAgICAgdXNlcktleToga2V5cy51c2VyLnB1YixcbiAgICAgICAgYmFja3VwS2V5OiBrZXlzLmJhY2t1cC5wdWIsXG4gICAgICAgIGJpdGdvS2V5OiBrZXlzLmJpdGdvLnB1YixcbiAgICAgIH07XG4gICAgfVxuXG4gICAgY29uc3QgdXNlclBydiA9IGJpcDMyLmZyb21CYXNlNTgoa2V5cy51c2VyLnBydik7XG4gICAgY29uc3QgYmFja3VwUHJ2ID0gYmlwMzIuZnJvbUJhc2U1OChrZXlzLmJhY2t1cC5wcnYpO1xuICAgIGlmICghdXNlclBydi5wcml2YXRlS2V5IHx8ICFiYWNrdXBQcnYucHJpdmF0ZUtleSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdidWlsZFNhZmVSZWNvdmVyS2V5UGFyYW1zOiBrZXlzLnVzZXIucHJ2IGFuZCBrZXlzLmJhY2t1cC5wcnYgbXVzdCBiZSBwcml2YXRlIHhwcnZzJyk7XG4gICAgfVxuXG4gICAgY29uc3Qgd2FsbGV0UGFzc3BocmFzZSA9IHJhbmRvbUJ5dGVzKDMyKS50b1N0cmluZygnaGV4Jyk7XG4gICAgY29uc3QgW3VzZXJLZXksIGJhY2t1cEtleV0gPSBhd2FpdCBQcm9taXNlLmFsbChbXG4gICAgICBiaXRnby5lbmNyeXB0KHsgaW5wdXQ6IGtleXMudXNlci5wcnYsIHBhc3N3b3JkOiB3YWxsZXRQYXNzcGhyYXNlLCBlbmNyeXB0aW9uVmVyc2lvbjogMSB9KSxcbiAgICAgIGJpdGdvLmVuY3J5cHQoeyBpbnB1dDoga2V5cy5iYWNrdXAucHJ2LCBwYXNzd29yZDogd2FsbGV0UGFzc3BocmFzZSwgZW5jcnlwdGlvblZlcnNpb246IDEgfSksXG4gICAgXSk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgc2xvdDogJ3NlY3AyNTZrMU11bHRpc2lnJyxcbiAgICAgIHVzZXJLZXksXG4gICAgICBiYWNrdXBLZXksXG4gICAgICBiaXRnb0tleToga2V5cy5iaXRnby5wdWIsXG4gICAgICB3YWxsZXRQYXNzcGhyYXNlLFxuICAgIH07XG4gIH1cblxuICB0aHJvdyBuZXcgRXJyb3IoYGJ1aWxkU2FmZVJlY292ZXJLZXlQYXJhbXM6IHNsb3QgJyR7cGFyYW1zLnNsb3R9JyBpcyBub3Qgc3VwcG9ydGVkIHlldGApO1xufVxuXG5hc3luYyBmdW5jdGlvbiBidWlsZEVkMjU1MTlNdWx0aXNpZ1JlY292ZXJLZXlQYXJhbXMoXG4gIGJpdGdvOiBCaXRHb0Jhc2UsXG4gIGNvaW46IHN0cmluZyxcbiAga2V5czogRWQyNTUxOU11bHRpc2lnQ2hpbGRLZXlzLFxuICBtb2RlOiAnc2lnbmVkJyB8ICd1bnNpZ25lZCdcbik6IFByb21pc2U8RWQyNTUxOVNhZmVSZWNvdmVyS2V5UGFyYW1zPiB7XG4gIGNvbnN0IGVuY29kZXJzID0gRUQyNTUxOV9NVUxUSVNJR19DT0lOX0VOQ09ERVJTW2NvaW5dO1xuICBpZiAoIWVuY29kZXJzKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBidWlsZFNhZmVSZWNvdmVyS2V5UGFyYW1zOiBjb2luICcke2NvaW59JyBlZDI1NTE5TXVsdGlzaWcgaXMgbm90IHN1cHBvcnRlZCB5ZXRgKTtcbiAgfVxuXG4gIGZvciAoY29uc3QgcHViIG9mIFtrZXlzLnVzZXIucHViLCBrZXlzLmJhY2t1cC5wdWIsIGtleXMuYml0Z28ucHViXSkge1xuICAgIC8vIHN0cmljdCBoZXgsIG5vdCBsZW5ndGgtb25seTogQnVmZmVyLmZyb20ocHViLCAnaGV4JykgdHJ1bmNhdGVzIGF0IHRoZSBmaXJzdCBiYWQgcGFpciwgc28gYVxuICAgIC8vIGxlbmd0aCBjaGVjayBhbG9uZSB3b3VsZCBhY2NlcHQgdHJhaWxpbmcgZ2FyYmFnZVxuICAgIGlmICghL15bMC05YS1mXXs2NH0kL2kudGVzdChwdWIpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ2J1aWxkU2FmZVJlY292ZXJLZXlQYXJhbXM6IGVkMjU1MTkgY2hpbGQgcHVibGljIGtleXMgbXVzdCBiZSAzMiBieXRlcycpO1xuICAgIH1cbiAgfVxuXG4gIGNvbnN0IHVzZXJQdWIgPSBCdWZmZXIuZnJvbShrZXlzLnVzZXIucHViLCAnaGV4Jyk7XG4gIGNvbnN0IGJhY2t1cFB1YiA9IEJ1ZmZlci5mcm9tKGtleXMuYmFja3VwLnB1YiwgJ2hleCcpO1xuICBjb25zdCBiaXRnb1B1YiA9IEJ1ZmZlci5mcm9tKGtleXMuYml0Z28ucHViLCAnaGV4Jyk7XG5cbiAgLy8gQWxnb3JhbmQgd2FsbGV0IGFkZHJlc3NlcyBhcmUgdGhlIHZlcnNpb24tMSAyLW9mLTMgbXVsdGlzaWcgYWRkcmVzcyBvdmVyIHRoZSB0aHJlZSBjaGlsZCBwdWJzXG4gIC8vIGluIHdhbGxldC1jcmVhdGlvbiBvcmRlci4gYEFsZ28ucmVjb3ZlcigpYCByZWNvbXB1dGVzIGFuZCBlbmZvcmNlcyB0aGUgc2FtZSB2YWx1ZSBhbmQgdGhyb3dzXG4gIC8vIGBSZWNvdmVyeUtleU1pc21hdGNoRXJyb3JgIG9uIGFueSBtaXNtYXRjaCAoc2RrLWNvaW4tYWxnby9zcmMvYWxnby50cykuXG4gIGNvbnN0IHJvb3RBZGRyZXNzID0gYWxnb011bHRpc2lnQWRkcmVzcygxLCAyLCBbdXNlclB1YiwgYmFja3VwUHViLCBiaXRnb1B1Yl0pO1xuXG4gIGlmIChtb2RlID09PSAndW5zaWduZWQnKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHNsb3Q6ICdlZDI1NTE5TXVsdGlzaWcnLFxuICAgICAgbW9kZTogJ3Vuc2lnbmVkJyxcbiAgICAgIHVzZXJLZXk6IGVuY29kZXJzLmVuY29kZVB1Yih1c2VyUHViKSxcbiAgICAgIGJhY2t1cEtleTogZW5jb2RlcnMuZW5jb2RlUHViKGJhY2t1cFB1YiksXG4gICAgICBiaXRnb0tleTogZW5jb2RlcnMuZW5jb2RlUHViKGJpdGdvUHViKSxcbiAgICAgIHJvb3RBZGRyZXNzLFxuICAgIH07XG4gIH1cblxuICAvLyBUaGUgdXNlciBjaGlsZCBpcyBhIGhhcmRlbmVkIFNMSVAtMDAxMCBzZWVkLCBzbyBpdCByZS1lbmNyeXB0cyBleGFjdGx5IGxpa2Ugc2xvdCAxLiBUaGUgYmFja3VwXG4gIC8vIGNoaWxkIGlzIGEgc2VlZGxlc3Mgc29mdCBleHRlbmRlZCBrZXk6IGl0IGNhbm5vdCBiZSByZS1lbmNyeXB0ZWQgYXMgYSBzZWVkLCBzbyBpdCBiZWNvbWVzIGEgbGF6eVxuICAvLyBleHRlcm5hbCBzaWduZXIgb3ZlciB0aGUgdHggYnl0ZXMgKFdDTi0yODk1J3MgZXh0ZW5kZWQta2V5IHNpZ25lciwgaW52b2tlZCBieSB0aGUgY29pbikuXG4gIGNvbnN0IHdhbGxldFBhc3NwaHJhc2UgPSByYW5kb21CeXRlcygzMikudG9TdHJpbmcoJ2hleCcpO1xuICBjb25zdCB1c2VyS2V5ID0gYXdhaXQgYml0Z28uZW5jcnlwdCh7XG4gICAgaW5wdXQ6IGVuY29kZXJzLmVuY29kZVNlZWQoQnVmZmVyLmZyb20oa2V5cy51c2VyLnNlZWQsICdoZXgnKSksXG4gICAgcGFzc3dvcmQ6IHdhbGxldFBhc3NwaHJhc2UsXG4gICAgZW5jcnlwdGlvblZlcnNpb246IDEsXG4gIH0pO1xuXG4gIHJldHVybiB7XG4gICAgc2xvdDogJ2VkMjU1MTlNdWx0aXNpZycsXG4gICAgbW9kZTogJ3NpZ25lZCcsXG4gICAgdXNlcktleSxcbiAgICBiaXRnb0tleTogZW5jb2RlcnMuZW5jb2RlUHViKGJpdGdvUHViKSxcbiAgICB3YWxsZXRQYXNzcGhyYXNlLFxuICAgIHJvb3RBZGRyZXNzLFxuICAgIGV4dGVybmFsQmFja3VwU2lnbmVyOiB7XG4gICAgICBwdWJsaWNLZXk6IGtleXMuYmFja3VwLnB1YixcbiAgICAgIHNpZ246IGFzeW5jIChtZXNzYWdlKSA9PiAoe1xuICAgICAgICBzaWduYXR1cmU6IChcbiAgICAgICAgICBhd2FpdCBzaWduRWQyNTUxOUV4dGVuZGVkKFxuICAgICAgICAgICAgQnVmZmVyLmZyb20obWVzc2FnZSksXG4gICAgICAgICAgICBCdWZmZXIuZnJvbShrZXlzLmJhY2t1cC5rTCwgJ2hleCcpLFxuICAgICAgICAgICAgQnVmZmVyLmZyb20oa2V5cy5iYWNrdXAua1IsICdoZXgnKVxuICAgICAgICAgIClcbiAgICAgICAgKS50b1N0cmluZygnaGV4JyksXG4gICAgICB9KSxcbiAgICB9LFxuICB9O1xufVxuIl19
253
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVjb3ZlcnkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvYml0Z28vc2FmZS9yZWNvdmVyeS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQWdKQSxnREFvRUM7QUFNRCxvREE2RUM7QUEyREQsOERBeUNDO0FBM1lEOzs7O0dBSUc7QUFDSCxtQ0FBZ0M7QUFDaEMsbUNBQXFDO0FBQ3JDLG1EQUE2QztBQUM3QyxpREFBc0Q7QUFFdEQsNkRBZW1DO0FBQ25DLCtEQU0rQjtBQUMvQix5REFBb0U7QUFFcEUsc0NBQW1EO0FBQ25ELG9FQUF5RTtBQTRHbEUsS0FBSyxVQUFVLGtCQUFrQixDQUFDLE1BTXhDO0lBQ0MsTUFBTSxFQUFFLEtBQUssRUFBRSxVQUFVLEVBQUUsWUFBWSxFQUFFLFdBQVcsRUFBRSxRQUFRLEVBQUUsR0FBRyxNQUFNLENBQUM7SUFFMUUsTUFBTSxTQUFTLEdBQUcsSUFBQSxtQ0FBbUIsRUFBQyxVQUFVLENBQUMsQ0FBQztJQUNsRCxNQUFNLFdBQVcsR0FBRyxJQUFBLG1DQUFtQixFQUFDLFlBQVksQ0FBQyxDQUFDO0lBQ3RELE1BQU0sVUFBVSxHQUFHLElBQUEsbUNBQW1CLEVBQUMsV0FBVyxDQUFDLENBQUM7SUFFcEQsTUFBTSxXQUFXLEdBQUcsS0FBSyxFQUFFLElBQVksRUFBbUIsRUFBRTtRQUMxRCxJQUFJLENBQUM7WUFDSCxPQUFPLE1BQU0sS0FBSyxDQUFDLE9BQU8sQ0FBQyxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLENBQUMsQ0FBQztRQUN4RCxDQUFDO1FBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztZQUNYLE1BQU0sSUFBSSwrQkFBc0IsQ0FBQywrREFBK0QsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUN2RyxDQUFDO0lBQ0gsQ0FBQyxDQUFDO0lBRUYsTUFBTSxhQUFhLEdBQUcsQ0FBQyxTQUFpQixFQUF3QixFQUFFO1FBQ2hFLElBQUksQ0FBQztZQUNILE9BQU8sSUFB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LENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3pELE1BQU0sT0FBTyxHQUFHLE1BQU0sS0FBSyxDQUFDLE9BQU8sQ0FBQztRQUNsQyxLQUFLLEVBQUUsUUFBUSxDQUFDLFVBQVUsQ0FBQyxlQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQzlELFFBQVEsRUFBRSxnQkFBZ0I7UUFDMUIsaUJBQWlCLEVBQUUsQ0FBQztLQUNyQixDQUFDLENBQUM7SUFFSCxPQUFPO1FBQ0wsSUFBSSxFQUFFLGlCQUFpQjtRQUN2QixJQUFJLEVBQUUsUUFBUTtRQUNkLE9BQU87UUFDUCxRQUFRLEVBQUUsUUFBUSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUM7UUFDdEMsZ0JBQWdCO1FBQ2hCLEdBQUcsaUJBQWlCO1FBQ3BCLG9CQUFvQixFQUFFO1lBQ3BCLFNBQVMsRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUc7WUFDMUIsSUFBSSxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsRUFBRSxDQUFDLENBQUM7Z0JBQ3hCLFNBQVMsRUFBRSxDQUNULE1BQU0sSUFBQSx5Q0FBbUIsRUFDdkIsZUFBTSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsRUFDcEIsZUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEVBQUUsRUFBRSxLQUFLLENBQUMsRUFDbEMsZUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEVBQUUsRUFBRSxLQUFLLENBQUMsQ0FDbkMsQ0FDRixDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUM7YUFDbEIsQ0FBQztTQUNIO0tBQ0YsQ0FBQztBQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBwcmV0dGllclxuICpcbiAqIEBleHBlcmltZW50YWwgV1JXLWZhY2luZyBzYWZlIHJlY292ZXJ5IGVudHJ5IHBvaW50cy5cbiAqL1xuaW1wb3J0IHsgQnVmZmVyIH0gZnJvbSAnYnVmZmVyJztcbmltcG9ydCB7IHJhbmRvbUJ5dGVzIH0gZnJvbSAnY3J5cHRvJztcbmltcG9ydCB7IGJpcDMyIH0gZnJvbSAnQGJpdGdvLWJldGEvdXR4by1saWInO1xuaW1wb3J0IHsgTUFYX0JJUDMyX0lOREVYIH0gZnJvbSAnQGJpdGdvLWJldGEvc3RhdGljcyc7XG5pbXBvcnQgdHlwZSB7IFJvb3RLZXlUeXBlIH0gZnJvbSAnQGJpdGdvL3B1YmxpYy10eXBlcyc7XG5pbXBvcnQge1xuICBidWlsZFNhZmVCaXA0NFBhdGgsXG4gIGRlY29kZUVkMjU1MTlTdHJLZXlQdWJsaWNLZXksXG4gIGRlcml2ZVNhZmVDaGlsZEVkMjU1MTlIYXJkZW5lZCxcbiAgZGVyaXZlU2FmZUNoaWxkVHJpcGxldCxcbiAgRWQyNTUxOUNoYWluQ29kZUVudHJ5Q29kZWMsXG4gIGdldFNhZmVCaXA0NENvaW5UeXBlLFxuICBwYXJzZVNhZmVCaXA0NFBhdGgsXG4gIHBhcnNlU2FmZUtleWNhcmRCb3gsXG4gIHRvU29mdFR3aW5QYXRoLFxuICBhbGdvTXVsdGlzaWdBZGRyZXNzLFxuICBlbmNvZGVBbGdvS2V5LFxuICBlbmNvZGVIYmFyUHVibGljS2V5RGVyLFxuICBlbmNvZGVIYmFyUHJpdmF0ZUtleURlcixcbiAgdHlwZSBTYWZlS2V5Y2FyZFJvb3RFbnRyeSxcbn0gZnJvbSAnQGJpdGdvLWJldGEvc2RrLWxpYi1zYWZlcyc7XG5pbXBvcnQge1xuICBzaWduRWQyNTUxOUV4dGVuZGVkLFxuICBzb2Z0RGVyaXZlQ2hpbGRQdWJFZDI1NTE5QXRQYXRoLFxuICBzb2Z0RGVyaXZlQ2hpbGRQcnZFZDI1NTE5QXRQYXRoLFxuICB0eXBlIEVkMjU1MTlFeHRlbmRlZEtleVBhcnRzLFxuICB0eXBlIEV4dGVybmFsRWQyNTUxOVNpZ25lcixcbn0gZnJvbSAnLi9kZXJpdmFibGVFZDI1NTE5UHViJztcbmltcG9ydCB7IERrbHNWcmZVdGlscywgTXBzVnJmVXRpbHMgfSBmcm9tICdAYml0Z28tYmV0YS9zZGstbGliLW1wYyc7XG5pbXBvcnQgeyBCaXRHb0Jhc2UgfSBmcm9tICcuLi9iaXRnb0Jhc2UnO1xuaW1wb3J0IHsgSW5jb3JyZWN0UGFzc3dvcmRFcnJvciB9IGZyb20gJy4uL2Vycm9ycyc7XG5pbXBvcnQgeyBwYXJzZVNhZmVNcGNLZXlFbnZlbG9wZXMgfSBmcm9tICcuLi91dGlscy90c3Mva2V5U2hhcmVFbnZlbG9wZSc7XG5cbmV4cG9ydCB0eXBlIERlY3J5cHRlZE1wY1NhZmVSb290ID0geyBzaWduaW5nOiBCdWZmZXI7IHZyZjogQnVmZmVyIH07XG5cbmV4cG9ydCB0eXBlIE9uY2hhaW5TYWZlUm9vdCA9IHsgdXNlcjogc3RyaW5nOyBiYWNrdXA6IHN0cmluZzsgYml0Z286IHN0cmluZyB9O1xuZXhwb3J0IHR5cGUgTXBjU2FmZVJvb3QgPSB7IHVzZXI6IERlY3J5cHRlZE1wY1NhZmVSb290OyBiYWNrdXA6IERlY3J5cHRlZE1wY1NhZmVSb290OyBiaXRnbzogc3RyaW5nIH07XG5leHBvcnQgdHlwZSBFZDI1NTE5TXVsdGlzaWdTYWZlUm9vdCA9IHtcbiAgdXNlcjogc3RyaW5nO1xuICBiYWNrdXA6IHsgcHJ2OiBzdHJpbmc7IGNoYWluQ29kZTogc3RyaW5nIH07XG4gIGJpdGdvOiBzdHJpbmc7XG59O1xuXG5leHBvcnQgdHlwZSBTZWNwMjU2azFNdWx0aXNpZ0NoaWxkS2V5cyA9IHtcbiAgdXNlcjogeyBwcnY6IHN0cmluZzsgcHViOiBzdHJpbmcgfTtcbiAgYmFja3VwOiB7IHBydjogc3RyaW5nOyBwdWI6IHN0cmluZyB9O1xuICBiaXRnbzogeyBwdWI6IHN0cmluZyB9O1xufTtcblxuZXhwb3J0IHR5cGUgRWNkc2FNcGNDaGlsZEtleXMgPSB7XG4gIGNvbW1vbktleWNoYWluOiBzdHJpbmc7XG4gIHVzZXI6IHN0cmluZztcbiAgYmFja3VwOiBzdHJpbmc7XG59O1xuXG5leHBvcnQgdHlwZSBFZGRzYU1wY0NoaWxkS2V5cyA9IEVjZHNhTXBjQ2hpbGRLZXlzO1xuXG4vKipcbiAqIEEgaGFyZGVuZWQgKFNMSVAtMDAxMCkgZWQyNTUxOSBjaGlsZC4gVGhlIGBraW5kYCBkaXNjcmltaW5hdG9yIHByZXZlbnRzIGEgcmF3IHNlZWQgZnJvbSBiZWluZ1xuICogbWlzdGFrZW4gZm9yIGFuIGV4dGVuZGVkIGtleSBkb3duc3RyZWFtIOKAlCBib3RoIGFyZSAzMi1ieXRlIHZhbHVlcyB0aGF0IGBpc1ZhbGlkUHViYCB3b3VsZCBhY2NlcHQuXG4gKi9cbmV4cG9ydCB0eXBlIFNhZmVFZDI1NTE5U2VlZEtleSA9IHtcbiAgcmVhZG9ubHkga2luZDogJ3NlZWQnO1xuICByZWFkb25seSBzZWVkOiBzdHJpbmc7IC8vIDMyLWJ5dGUgY2hpbGQgc2VlZCAoaGV4KSDigJQgdGhlIHNpZ25lciBpbnB1dFxuICByZWFkb25seSBwdWI6IHN0cmluZzsgLy8gMzItYnl0ZSBwdWJsaWMga2V5IChoZXgpXG59O1xuXG4vKipcbiAqIEEgc29mdCAoQklQMzItRWQyNTUxOSkgZWQyNTUxOSBjaGlsZC4gTm8gMzItYnl0ZSBzZWVkIG1hcHMgYmFjayB0byBhIHNvZnQtZGVyaXZlZCBjaGlsZCwgc28gdGhlXG4gKiBzaWduZXIgbmVlZHMgYm90aCBoYWx2ZXMgZGlyZWN0bHk6IGBrTGAgKHRoZSBjbGFtcGVkIHNjYWxhcikgYW5kIGBrUmAgKHRoZSBub25jZSBwcmVmaXgpLlxuICovXG5leHBvcnQgdHlwZSBTYWZlRWQyNTUxOUV4dGVuZGVkS2V5ID0geyByZWFkb25seSBraW5kOiAnZXh0ZW5kZWQnIH0gJiBFZDI1NTE5RXh0ZW5kZWRLZXlQYXJ0czxzdHJpbmc+OyAvLyBoZXhcblxuLyoqIFRoZSB0aHJlZSBlZDI1NTE5IGNvLXNpZ25lciBjaGlsZHJlbi4gQml0R28gaXMgcHViLW9ubHk6IGl0cyBwcml2YXRlIGtleSBzdGF5cyBpbiB0aGUgSFNNLiAqL1xuZXhwb3J0IHR5cGUgRWQyNTUxOU11bHRpc2lnQ2hpbGRLZXlzID0ge1xuICB1c2VyOiBTYWZlRWQyNTUxOVNlZWRLZXk7XG4gIGJhY2t1cDogU2FmZUVkMjU1MTlFeHRlbmRlZEtleTtcbiAgYml0Z286IHsgcmVhZG9ubHkgcHViOiBzdHJpbmcgfTtcbn07XG5cbmV4cG9ydCB0eXBlIERlcml2ZWRTYWZlV2FsbGV0S2V5cyA9XG4gIHwgeyBzbG90OiAnc2VjcDI1NmsxTXVsdGlzaWcnOyBwYXRoOiBzdHJpbmc7IGtleXM6IFNlY3AyNTZrMU11bHRpc2lnQ2hpbGRLZXlzIH1cbiAgfCB7IHNsb3Q6ICdlY2RzYU1wYyc7IHBhdGg6IHN0cmluZzsga2V5czogRWNkc2FNcGNDaGlsZEtleXMgfVxuICB8IHsgc2xvdDogJ2VkZHNhTXBjJzsgcGF0aDogc3RyaW5nOyBrZXlzOiBFZGRzYU1wY0NoaWxkS2V5cyB9XG4gIHwgeyBzbG90OiAnZWQyNTUxOU11bHRpc2lnJzsgcGF0aDogc3RyaW5nOyBrZXlzOiBFZDI1NTE5TXVsdGlzaWdDaGlsZEtleXMgfTtcblxuZXhwb3J0IHR5cGUgU2VjcFNhZmVSZWNvdmVyS2V5UGFyYW1zID0ge1xuICBzbG90OiAnc2VjcDI1NmsxTXVsdGlzaWcnO1xuICB1c2VyS2V5OiBzdHJpbmc7XG4gIGJhY2t1cEtleTogc3RyaW5nO1xuICBiaXRnb0tleTogc3RyaW5nO1xuICB3YWxsZXRQYXNzcGhyYXNlPzogc3RyaW5nO1xufTtcblxuLyoqXG4gKiBTbG90LTIgKGVkMjU1MTlNdWx0aXNpZykgc2FmZSByZWNvdmVyeSBrZXkgcGFyYW1zLiBBIGRpc2NyaW1pbmF0ZWQgdW5pb24gb24gYG1vZGVgLCBzbyB0aGUgaW52YWxpZFxuICogY29tYm9zIGFyZSBub3QgcmVwcmVzZW50YWJsZTogc2lnbmVkIG1vZGUgYWx3YXlzIGNhcnJpZXMgdGhlIGxhenkgc2lnbmVyIGFuZCBuZXZlciBhIGBiYWNrdXBLZXlgLFxuICogdW5zaWduZWQgbW9kZSBhbHdheXMgY2FycmllcyB0aGUgZW5jb2RlZCBgYmFja3VwS2V5YCBhbmQgbmV2ZXIgYSBzaWduZXIgb3IgcGFzc3BocmFzZS5cbiAqXG4gKiBgcm9vdEFkZHJlc3NgIGlzIHRoZSB3YWxsZXQncyBvbi1jaGFpbiBhZGRyZXNzLiBGb3IgQUxHTyBpdCdzIHRoZSAyLW9mLTMgbXVsdGlzaWcgYWRkcmVzcyBvdmVyIHRoZVxuICogdGhyZWUgY2hpbGQgcHVicyDigJQgZGVyaXZhYmxlIGhlcmUsIGJ1dCBgcmVjb3ZlcigpYCBzdGlsbCByZXF1aXJlcyBpdCBhcyBpbnB1dC4gTm90ZSB0aGlzIGlzXG4gKiAqZGVyaXZlZCosIG5vdCBpbmRlcGVuZGVudGx5IHZlcmlmaWVkIGFnYWluc3QgYSBrbm93biB3YWxsZXQgYWRkcmVzczsgY2FsbGVycyB3aXRoIGEgcmVjb3JkZWRcbiAqIGFkZHJlc3Mgc2hvdWxkIGNyb3NzLWNoZWNrIGl0IHRoZW1zZWx2ZXMuIEZvciBIQkFSIHRoaXMgZmllbGQgaXMgb21pdHRlZCBzbyB0aGUgY2FsbGVyJ3NcbiAqIG5ldHdvcmstYXNzaWduZWQgYWNjb3VudCBJRCBpcyBwcmVzZXJ2ZWQgd2hlbiB0aGUga2V5IHBhcmFtcyBhcmUgc3ByZWFkIGludG8gYSByZWNvdmVyeSByZXF1ZXN0LlxuICovXG5leHBvcnQgdHlwZSBFZDI1NTE5U2FmZVJlY292ZXJLZXlQYXJhbXMgPVxuICB8IHtcbiAgICAgIHNsb3Q6ICdlZDI1NTE5TXVsdGlzaWcnO1xuICAgICAgbW9kZTogJ3NpZ25lZCc7XG4gICAgICB1c2VyS2V5OiBzdHJpbmc7XG4gICAgICBiaXRnb0tleTogc3RyaW5nO1xuICAgICAgd2FsbGV0UGFzc3BocmFzZTogc3RyaW5nO1xuICAgICAgcm9vdEFkZHJlc3M/OiBzdHJpbmc7XG4gICAgICAvKipcbiAgICAgICAqIExhenkgc2lnbmVyIGZvciB0aGUgc2VlZGxlc3MgYmFja3VwIGNoaWxkLiBUaGUgYmFja3VwIGNoaWxkIGhhcyBubyBzZWVkLCBzbyBpdCBjYW5ub3QgYmVcbiAgICAgICAqIHNlZWQtc2lnbmVkOyBhbmQgaXRzIHNpZ25hdHVyZSBtdXN0IGNvdmVyIGB0eC5ieXRlc1RvU2lnbigpYCwgd2hpY2ggb25seSBleGlzdHMgb25jZVxuICAgICAgICogYHJlY292ZXIoKWAgYnVpbGRzIHRoZSB0eC4gU28gaW5zdGVhZCBvZiBhIHByZS1tYWRlIHNpZ25hdHVyZSB3ZSBwYXNzIGEgY2xvc3VyZSB0aGF0IGhvbGRzXG4gICAgICAgKiB0aGUgcHJpdmF0ZSBga0xgL2BrUmAgYW5kIHNpZ25zIG9uIGRlbWFuZCDigJQgdGhlIHByaXZhdGUgaGFsdmVzIG5ldmVyIGxlYXZlIGl0LlxuICAgICAgICovXG4gICAgICBleHRlcm5hbEJhY2t1cFNpZ25lcjogRXh0ZXJuYWxFZDI1NTE5U2lnbmVyO1xuICAgIH1cbiAgfCB7XG4gICAgICBzbG90OiAnZWQyNTUxOU11bHRpc2lnJztcbiAgICAgIG1vZGU6ICd1bnNpZ25lZCc7XG4gICAgICB1c2VyS2V5OiBzdHJpbmc7XG4gICAgICBiYWNrdXBLZXk6IHN0cmluZztcbiAgICAgIGJpdGdvS2V5OiBzdHJpbmc7XG4gICAgICByb290QWRkcmVzcz86IHN0cmluZztcbiAgICB9O1xuXG5leHBvcnQgdHlwZSBTYWZlUmVjb3ZlcktleVBhcmFtcyA9IFNlY3BTYWZlUmVjb3ZlcktleVBhcmFtcyB8IEVkMjU1MTlTYWZlUmVjb3ZlcktleVBhcmFtcztcblxuZXhwb3J0IHR5cGUgRGVjcnlwdGVkU2FmZVJvb3RzID0ge1xuICBzZWNwMjU2azFNdWx0aXNpZzogT25jaGFpblNhZmVSb290O1xuICBlZDI1NTE5TXVsdGlzaWc6IEVkMjU1MTlNdWx0aXNpZ1NhZmVSb290O1xuICBlY2RzYU1wYzogTXBjU2FmZVJvb3Q7XG4gIGVkZHNhTXBjOiBNcGNTYWZlUm9vdDtcbn07XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBkZWNyeXB0U2FmZUtleWNhcmQocGFyYW1zOiB7XG4gIGJpdGdvOiBCaXRHb0Jhc2U7XG4gIHVzZXJLZXlCb3g6IHN0cmluZztcbiAgYmFja3VwS2V5Qm94OiBzdHJpbmc7XG4gIGJpdGdvS2V5Qm94OiBzdHJpbmc7XG4gIHBhc3N3b3JkOiBzdHJpbmc7XG59KTogUHJvbWlzZTxEZWNyeXB0ZWRTYWZlUm9vdHM+IHtcbiAgY29uc3QgeyBiaXRnbywgdXNlcktleUJveCwgYmFja3VwS2V5Qm94LCBiaXRnb0tleUJveCwgcGFzc3dvcmQgfSA9IHBhcmFtcztcblxuICBjb25zdCB1c2VyUm9vdHMgPSBwYXJzZVNhZmVLZXljYXJkQm94KHVzZXJLZXlCb3gpO1xuICBjb25zdCBiYWNrdXBSb290cyA9IHBhcnNlU2FmZUtleWNhcmRCb3goYmFja3VwS2V5Qm94KTtcbiAgY29uc3QgYml0Z29Sb290cyA9IHBhcnNlU2FmZUtleWNhcmRCb3goYml0Z29LZXlCb3gpO1xuXG4gIGNvbnN0IGRlY3J5cHRSb290ID0gYXN5bmMgKHJvb3Q6IHN0cmluZyk6IFByb21pc2U8c3RyaW5nPiA9PiB7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBhd2FpdCBiaXRnby5kZWNyeXB0KHsgaW5wdXQ6IHJvb3QsIHBhc3N3b3JkIH0pO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHRocm93IG5ldyBJbmNvcnJlY3RQYXNzd29yZEVycm9yKCd1bmFibGUgdG8gZGVjcnlwdCB0aGUgc2FmZSBrZXljYXJkIHdpdGggdGhlIHByb3ZpZGVkIHBhc3N3b3JkJywgZSk7XG4gICAgfVxuICB9O1xuXG4gIGNvbnN0IHVud3JhcE1wY1Jvb3QgPSAoZGVjcnlwdGVkOiBzdHJpbmcpOiBEZWNyeXB0ZWRNcGNTYWZlUm9vdCA9PiB7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBwYXJzZVNhZmVNcGNLZXlFbnZlbG9wZXMoZGVjcnlwdGVkKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICB0aHJvdyBuZXcgSW5jb3JyZWN0UGFzc3dvcmRFcnJvcigndW5hYmxlIHRvIGRlY3J5cHQgdGhlIHNhZmUga2V5Y2FyZCB3aXRoIHRoZSBwcm92aWRlZCBwYXNzd29yZCcsIGUpO1xuICAgIH1cbiAgfTtcblxuICAvLyBPbmx5IGJveCBCJ3MgZWQyNTUxOU11bHRpc2lnIHNsb3QgbWF5IGNhcnJ5IHRoZSBkZXJpdmFibGUgYHsgcHJ2LCBjaGFpbkNvZGUgfWAgb2JqZWN0OyBldmVyeVxuICAvLyBvdGhlciBlbnRyeSDigJQgYWxsIG9mIGJveGVzIEEgYW5kIEMsIGFuZCBldmVyeSBub24tZWQyNTUxOSBzbG90IGluIGJveCBCIOKAlCBpcyBhIGJhcmUgc3RyaW5nIGFuZFxuICAvLyBmYWlscyBjbG9zZWQgaWYgaXQgY2FycmllcyB0aGUgb2JqZWN0IGluc3RlYWQuXG4gIGNvbnN0IHJlcXVpcmVCYXJlU3RyaW5nID0gKGVudHJ5OiBTYWZlS2V5Y2FyZFJvb3RFbnRyeSk6IHN0cmluZyA9PiB7XG4gICAgaWYgKEVkMjU1MTlDaGFpbkNvZGVFbnRyeUNvZGVjLmlzKGVudHJ5KSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCd1bmV4cGVjdGVkIGVkMjU1MTkgY2hhaW4tY29kZSBlbnRyeSB3aGVyZSBhIGJhcmUgc3RyaW5nIHdhcyByZXF1aXJlZCcpO1xuICAgIH1cbiAgICByZXR1cm4gZW50cnk7XG4gIH07XG5cbiAgY29uc3QgZGVjcnlwdEVkMjU1MTlCYWNrdXAgPSBhc3luYyAoZW50cnk6IFNhZmVLZXljYXJkUm9vdEVudHJ5KTogUHJvbWlzZTx7IHBydjogc3RyaW5nOyBjaGFpbkNvZGU6IHN0cmluZyB9PiA9PiB7XG4gICAgaWYgKCFFZDI1NTE5Q2hhaW5Db2RlRW50cnlDb2RlYy5pcyhlbnRyeSkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignZWQyNTUxOSBiYWNrdXAgcm9vdCBtdXN0IGNhcnJ5IGEgY2hhaW4gY29kZScpO1xuICAgIH1cbiAgICByZXR1cm4geyBwcnY6IGF3YWl0IGRlY3J5cHRSb290KGVudHJ5LnBydiksIGNoYWluQ29kZTogZW50cnkuY2hhaW5Db2RlIH07XG4gIH07XG5cbiAgcmV0dXJuIHtcbiAgICBzZWNwMjU2azFNdWx0aXNpZzoge1xuICAgICAgdXNlcjogYXdhaXQgZGVjcnlwdFJvb3QocmVxdWlyZUJhcmVTdHJpbmcodXNlclJvb3RzLnNlY3AyNTZrMU11bHRpc2lnKSksXG4gICAgICBiYWNrdXA6IGF3YWl0IGRlY3J5cHRSb290KHJlcXVpcmVCYXJlU3RyaW5nKGJhY2t1cFJvb3RzLnNlY3AyNTZrMU11bHRpc2lnKSksXG4gICAgICBiaXRnbzogcmVxdWlyZUJhcmVTdHJpbmcoYml0Z29Sb290cy5zZWNwMjU2azFNdWx0aXNpZyksXG4gICAgfSxcbiAgICBlZDI1NTE5TXVsdGlzaWc6IHtcbiAgICAgIHVzZXI6IGF3YWl0IGRlY3J5cHRSb290KHJlcXVpcmVCYXJlU3RyaW5nKHVzZXJSb290cy5lZDI1NTE5TXVsdGlzaWcpKSxcbiAgICAgIGJhY2t1cDogYXdhaXQgZGVjcnlwdEVkMjU1MTlCYWNrdXAoYmFja3VwUm9vdHMuZWQyNTUxOU11bHRpc2lnKSxcbiAgICAgIGJpdGdvOiByZXF1aXJlQmFyZVN0cmluZyhiaXRnb1Jvb3RzLmVkMjU1MTlNdWx0aXNpZyksXG4gICAgfSxcbiAgICBlY2RzYU1wYzoge1xuICAgICAgdXNlcjogdW53cmFwTXBjUm9vdChhd2FpdCBkZWNyeXB0Um9vdChyZXF1aXJlQmFyZVN0cmluZyh1c2VyUm9vdHMuZWNkc2FNcGMpKSksXG4gICAgICBiYWNrdXA6IHVud3JhcE1wY1Jvb3QoYXdhaXQgZGVjcnlwdFJvb3QocmVxdWlyZUJhcmVTdHJpbmcoYmFja3VwUm9vdHMuZWNkc2FNcGMpKSksXG4gICAgICBiaXRnbzogcmVxdWlyZUJhcmVTdHJpbmcoYml0Z29Sb290cy5lY2RzYU1wYyksXG4gICAgfSxcbiAgICBlZGRzYU1wYzoge1xuICAgICAgdXNlcjogdW53cmFwTXBjUm9vdChhd2FpdCBkZWNyeXB0Um9vdChyZXF1aXJlQmFyZVN0cmluZyh1c2VyUm9vdHMuZWRkc2FNcGMpKSksXG4gICAgICBiYWNrdXA6IHVud3JhcE1wY1Jvb3QoYXdhaXQgZGVjcnlwdFJvb3QocmVxdWlyZUJhcmVTdHJpbmcoYmFja3VwUm9vdHMuZWRkc2FNcGMpKSksXG4gICAgICBiaXRnbzogcmVxdWlyZUJhcmVTdHJpbmcoYml0Z29Sb290cy5lZGRzYU1wYyksXG4gICAgfSxcbiAgfTtcbn1cblxuLyoqXG4gKiBEZXJpdmVzIGEgU2FmZSB3YWxsZXQncyBjaGlsZCBrZXlzIGF0IHRoZSBCSVA0NCBwYXRoIGZvciBhIGdpdmVuIHNsb3QgYW5kIGFjY291bnQuXG4gKiBTdXBwb3J0cyBhbGwgZm91ciBzbG90czogYHNlY3AyNTZrMU11bHRpc2lnYCwgYGVkMjU1MTlNdWx0aXNpZ2AsIGBlY2RzYU1wY2AsIGFuZCBgZWRkc2FNcGNgLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZGVyaXZlU2FmZVdhbGxldEtleXMocGFyYW1zOiB7XG4gIGNvaW46IHN0cmluZztcbiAgc2xvdDogUm9vdEtleVR5cGU7XG4gIGFjY291bnQ6IG51bWJlcjtcbiAgcm9vdHM6IERlY3J5cHRlZFNhZmVSb290cztcbn0pOiBQcm9taXNlPERlcml2ZWRTYWZlV2FsbGV0S2V5cz4ge1xuICBpZiAoIU51bWJlci5pc0ludGVnZXIocGFyYW1zLmFjY291bnQpIHx8IHBhcmFtcy5hY2NvdW50IDwgMCB8fCBwYXJhbXMuYWNjb3VudCA+IE1BWF9CSVAzMl9JTkRFWCkge1xuICAgIHRocm93IG5ldyBFcnJvcihgZGVyaXZlU2FmZVdhbGxldEtleXM6IGludmFsaWQgYWNjb3VudCAnJHtwYXJhbXMuYWNjb3VudH0nYCk7XG4gIH1cblxuICBjb25zdCB7IGFjY291bnQsIHJvb3RzIH0gPSBwYXJhbXM7XG4gIGNvbnN0IHBhdGggPSBidWlsZFNhZmVCaXA0NFBhdGgoZ2V0U2FmZUJpcDQ0Q29pblR5cGUocGFyYW1zLmNvaW4pLCBwYXJhbXMuc2xvdCwgYWNjb3VudCk7XG4gIGNvbnN0IHsgY29pblR5cGUsIHNsb3RPcmRpbmFsIH0gPSBwYXJzZVNhZmVCaXA0NFBhdGgocGF0aCk7XG5cbiAgaWYgKHBhcmFtcy5zbG90ID09PSAnc2VjcDI1NmsxTXVsdGlzaWcnKSB7XG4gICAgcmV0dXJuIHsgc2xvdDogJ3NlY3AyNTZrMU11bHRpc2lnJywgcGF0aCwga2V5czogZGVyaXZlU2FmZUNoaWxkVHJpcGxldChyb290cy5zZWNwMjU2azFNdWx0aXNpZywgcGF0aCkgfTtcbiAgfVxuXG4gIGlmIChwYXJhbXMuc2xvdCA9PT0gJ2VjZHNhTXBjJykge1xuICAgIGNvbnN0IHsgY29tbW9uS2V5Y2hhaW4sIHVzZXJDaGlsZCwgYmFja3VwQ2hpbGQgfSA9IGF3YWl0IERrbHNWcmZVdGlscy5kZXJpdmVTYWZlRWNkc2FNcGNDaGlsZCh7XG4gICAgICB1c2VyUm9vdDogcm9vdHMuZWNkc2FNcGMudXNlcixcbiAgICAgIGJhY2t1cFJvb3Q6IHJvb3RzLmVjZHNhTXBjLmJhY2t1cCxcbiAgICAgIGFjY291bnQsXG4gICAgICBjb2luVHlwZSxcbiAgICAgIHNhZmVTbG90T3JkaW5hbDogc2xvdE9yZGluYWwsXG4gICAgfSk7XG4gICAgcmV0dXJuIHtcbiAgICAgIHNsb3Q6ICdlY2RzYU1wYycsXG4gICAgICBwYXRoLFxuICAgICAga2V5czogeyBjb21tb25LZXljaGFpbiwgdXNlcjogdXNlckNoaWxkLCBiYWNrdXA6IGJhY2t1cENoaWxkIH0sXG4gICAgfTtcbiAgfVxuXG4gIGlmIChwYXJhbXMuc2xvdCA9PT0gJ2VkZHNhTXBjJykge1xuICAgIGNvbnN0IHsgY29tbW9uS2V5Y2hhaW4sIHVzZXJDaGlsZCwgYmFja3VwQ2hpbGQgfSA9IGF3YWl0IE1wc1ZyZlV0aWxzLmRlcml2ZVNhZmVFZGRzYU1wY0NoaWxkKHtcbiAgICAgIHVzZXJSb290OiByb290cy5lZGRzYU1wYy51c2VyLFxuICAgICAgYmFja3VwUm9vdDogcm9vdHMuZWRkc2FNcGMuYmFja3VwLFxuICAgICAgYWNjb3VudCxcbiAgICAgIGNvaW5UeXBlLFxuICAgICAgc2FmZVNsb3RPcmRpbmFsOiBzbG90T3JkaW5hbCxcbiAgICB9KTtcbiAgICByZXR1cm4ge1xuICAgICAgc2xvdDogJ2VkZHNhTXBjJyxcbiAgICAgIHBhdGgsXG4gICAgICBrZXlzOiB7IGNvbW1vbktleWNoYWluLCB1c2VyOiB1c2VyQ2hpbGQsIGJhY2t1cDogYmFja3VwQ2hpbGQgfSxcbiAgICB9O1xuICB9XG5cbiAgaWYgKHBhcmFtcy5zbG90ID09PSAnZWQyNTUxOU11bHRpc2lnJykge1xuICAgIGNvbnN0IHJvb3QgPSByb290cy5lZDI1NTE5TXVsdGlzaWc7XG4gICAgY29uc3QgY29zaWduZXJQYXRoID0gdG9Tb2Z0VHdpblBhdGgocGF0aCk7XG5cbiAgICBjb25zdCB1c2VyID0gZGVyaXZlU2FmZUNoaWxkRWQyNTUxOUhhcmRlbmVkKHJvb3QudXNlciwgcGF0aCk7XG4gICAgY29uc3QgYmFja3VwID0gYXdhaXQgc29mdERlcml2ZUNoaWxkUHJ2RWQyNTUxOUF0UGF0aCh7XG4gICAgICBzZWVkU3RyS2V5OiByb290LmJhY2t1cC5wcnYsXG4gICAgICBjaGFpbkNvZGU6IHJvb3QuYmFja3VwLmNoYWluQ29kZSxcbiAgICAgIHBhdGg6IGNvc2lnbmVyUGF0aCxcbiAgICB9KTtcbiAgICBjb25zdCBiaXRnbyA9IGF3YWl0IHNvZnREZXJpdmVDaGlsZFB1YkVkMjU1MTlBdFBhdGgocm9vdC5iaXRnbywgY29zaWduZXJQYXRoKTtcblxuICAgIHJldHVybiB7XG4gICAgICBzbG90OiAnZWQyNTUxOU11bHRpc2lnJyxcbiAgICAgIHBhdGgsXG4gICAgICBrZXlzOiB7XG4gICAgICAgIHVzZXI6IHsga2luZDogJ3NlZWQnLCBzZWVkOiB1c2VyLnBydiwgcHViOiBkZWNvZGVFZDI1NTE5U3RyS2V5UHVibGljS2V5KHVzZXIucHViKS50b1N0cmluZygnaGV4JykgfSxcbiAgICAgICAgYmFja3VwOiB7XG4gICAgICAgICAga2luZDogJ2V4dGVuZGVkJyxcbiAgICAgICAgICBrTDogYmFja3VwLmtMLnRvU3RyaW5nKCdoZXgnKSxcbiAgICAgICAgICBrUjogYmFja3VwLmtSLnRvU3RyaW5nKCdoZXgnKSxcbiAgICAgICAgICBwdWI6IGJhY2t1cC5wdWIudG9TdHJpbmcoJ2hleCcpLFxuICAgICAgICB9LFxuICAgICAgICBiaXRnbzogeyBwdWI6IGJpdGdvLnRvU3RyaW5nKCdoZXgnKSB9LFxuICAgICAgfSxcbiAgICB9O1xuICB9XG5cbiAgdGhyb3cgbmV3IEVycm9yKGBkZXJpdmVTYWZlV2FsbGV0S2V5czogc2xvdCAnJHtwYXJhbXMuc2xvdH0nIGlzIG5vdCBzdXBwb3J0ZWQgeWV0YCk7XG59XG5cbi8qKlxuICogUGVyLWNvaW4gZW5jb2RlcnMgZm9yIHRoZSBgZWQyNTUxOU11bHRpc2lnYCBzbG90OiBlYWNoIHNsb3QtMiBjb2luIHJlLWVuY29kZXMgdGhlIHNhbWUgMzItYnl0ZVxuICogY2hpbGRyZW4gaW50byBpdHMgb3duIGFkZHJlc3Mvc2VlZCBzdHJpbmcgZm9ybWF0cy4gQSBjb2luIGFic2VudCBmcm9tIHRoZSByZWdpc3RyeSBpcyBub3QgeWV0XG4gKiBzdXBwb3J0ZWQgZm9yIHNsb3QtMiByZWNvdmVyeSAoeGxtIGlzIGEgZnV0dXJlIGFybSkuXG4gKi9cbmNvbnN0IEFMR09fRU5DT0RFUlMgPSB7XG4gIGVuY29kZVB1YjogZW5jb2RlQWxnb0tleSxcbiAgZW5jb2RlU2VlZDogZW5jb2RlQWxnb0tleSxcbiAgZGVyaXZlUm9vdEFkZHJlc3M6ICh1c2VyUHViOiBCdWZmZXIsIGJhY2t1cFB1YjogQnVmZmVyLCBiaXRnb1B1YjogQnVmZmVyKSA9PlxuICAgIGFsZ29NdWx0aXNpZ0FkZHJlc3MoMSwgMiwgW3VzZXJQdWIsIGJhY2t1cFB1YiwgYml0Z29QdWJdKSxcbn07XG5cbmNvbnN0IEVEMjU1MTlfTVVMVElTSUdfQ09JTl9FTkNPREVSUzogUmVjb3JkPFxuICBzdHJpbmcsXG4gIHwge1xuICAgICAgZW5jb2RlUHViOiAoYnl0ZXM6IEJ1ZmZlcikgPT4gc3RyaW5nO1xuICAgICAgZW5jb2RlU2VlZDogKGJ5dGVzOiBCdWZmZXIpID0+IHN0cmluZztcbiAgICAgIGRlcml2ZVJvb3RBZGRyZXNzPzogKHVzZXJQdWI6IEJ1ZmZlciwgYmFja3VwUHViOiBCdWZmZXIsIGJpdGdvUHViOiBCdWZmZXIpID0+IHN0cmluZztcbiAgICB9XG4gIHwgdW5kZWZpbmVkXG4+ID0ge1xuICBhbGdvOiBBTEdPX0VOQ09ERVJTLFxuICB0YWxnbzogQUxHT19FTkNPREVSUyxcbiAgaGJhcjogeyBlbmNvZGVQdWI6IGVuY29kZUhiYXJQdWJsaWNLZXlEZXIsIGVuY29kZVNlZWQ6IGVuY29kZUhiYXJQcml2YXRlS2V5RGVyIH0sXG4gIHRoYmFyOiB7IGVuY29kZVB1YjogZW5jb2RlSGJhclB1YmxpY0tleURlciwgZW5jb2RlU2VlZDogZW5jb2RlSGJhclByaXZhdGVLZXlEZXIgfSxcbn07XG5cbi8qKlxuICogVGhlIHJlcXVlc3Qgc2hhcGUgZm9yIGBidWlsZFNhZmVSZWNvdmVyS2V5UGFyYW1zYC4gVGhlIGBzbG90YCBsaXRlcmFsIGlzIHRoZSBkaXNjcmltaW5hbnQgdGhhdFxuICogdGllcyBlYWNoIHNsb3QgdG8gaXRzIG93biBga2V5c2Agc2hhcGUsIHNvIFR5cGVTY3JpcHQgbmFycm93cyBgcGFyYW1zLmtleXNgIGF1dG9tYXRpY2FsbHkgYW5kIGFcbiAqIHNsb3QgYWRkZWQgd2l0aG91dCBhIGJyYW5jaCBpcyBhIGNvbXBpbGUgZXJyb3IgcmF0aGVyIHRoYW4gYSBzaWxlbnQgY2FzdC5cbiAqL1xuZXhwb3J0IHR5cGUgU2FmZVJlY292ZXJLZXlQYXJhbXNSZXF1ZXN0ID0ge1xuICBiaXRnbzogQml0R29CYXNlO1xuICBjb2luOiBzdHJpbmc7XG4gIG1vZGU6ICdzaWduZWQnIHwgJ3Vuc2lnbmVkJztcbn0gJiAoXG4gIHwgeyBzbG90OiAnc2VjcDI1NmsxTXVsdGlzaWcnOyBrZXlzOiBTZWNwMjU2azFNdWx0aXNpZ0NoaWxkS2V5cyB9XG4gIHwgeyBzbG90OiAnZWQyNTUxOU11bHRpc2lnJzsga2V5czogRWQyNTUxOU11bHRpc2lnQ2hpbGRLZXlzIH1cbiAgfCB7IHNsb3Q6ICdlY2RzYU1wYyc7IGtleXM6IEVjZHNhTXBjQ2hpbGRLZXlzIH1cbiAgfCB7IHNsb3Q6ICdlZGRzYU1wYyc7IGtleXM6IEVkZHNhTXBjQ2hpbGRLZXlzIH1cbik7XG5cbi8qKlxuICogQnVpbGRzIHRoZSBrZXkgZmllbGRzIGBjb2luLnJlY292ZXIoKWAgZXhwZWN0cyBmcm9tIGRlcml2ZWQgU2FmZSBjaGlsZCBrZXlzLlxuICogU3VwcG9ydHMgYHNlY3AyNTZrMU11bHRpc2lnYCAoc2xvdCAxKSBhbmQgYGVkMjU1MTlNdWx0aXNpZ2AgKHNsb3QgMik7IHRoZSBNUEMgc2xvdHMgZmFpbCBjbG9zZWQuXG4gKiBTaWduZWQgbW9kZSByZS1lbmNyeXB0cyB0aGUgY2hpbGQgc2VjcmV0cyB1bmRlciBhIGZyZXNoIGVwaGVtZXJhbCBwYXNzcGhyYXNlICh2MS9TSkNMKTsgdW5zaWduZWRcbiAqIG1vZGUgcmV0dXJucyBwdWJzLiBXaGVyZSBzdXBwb3J0ZWQsIGByb290QWRkcmVzc2AgaXMgZGVyaXZlZCBmcm9tIHRoZSBjaGlsZCBrZXlzLCBub3QgaW5kZXBlbmRlbnRseVxuICogdmVyaWZpZWQ7IG90aGVyd2lzZSBpdCBpcyBvbWl0dGVkIHNvIHRoZSBjYWxsZXIgY2FuIHN1cHBseSBpdC5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGJ1aWxkU2FmZVJlY292ZXJLZXlQYXJhbXMoXG4gIHBhcmFtczogRXh0cmFjdDxTYWZlUmVjb3ZlcktleVBhcmFtc1JlcXVlc3QsIHsgc2xvdDogJ3NlY3AyNTZrMU11bHRpc2lnJyB9PlxuKTogUHJvbWlzZTxTZWNwU2FmZVJlY292ZXJLZXlQYXJhbXM+O1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGJ1aWxkU2FmZVJlY292ZXJLZXlQYXJhbXMoXG4gIHBhcmFtczogRXh0cmFjdDxTYWZlUmVjb3ZlcktleVBhcmFtc1JlcXVlc3QsIHsgc2xvdDogJ2VkMjU1MTlNdWx0aXNpZycgfT5cbik6IFByb21pc2U8RWQyNTUxOVNhZmVSZWNvdmVyS2V5UGFyYW1zPjtcbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBidWlsZFNhZmVSZWNvdmVyS2V5UGFyYW1zKHBhcmFtczogU2FmZVJlY292ZXJLZXlQYXJhbXNSZXF1ZXN0KTogUHJvbWlzZTxTYWZlUmVjb3ZlcktleVBhcmFtcz47XG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gYnVpbGRTYWZlUmVjb3ZlcktleVBhcmFtcyhwYXJhbXM6IFNhZmVSZWNvdmVyS2V5UGFyYW1zUmVxdWVzdCk6IFByb21pc2U8U2FmZVJlY292ZXJLZXlQYXJhbXM+IHtcbiAgY29uc3QgeyBiaXRnbywgbW9kZSB9ID0gcGFyYW1zO1xuXG4gIGlmIChwYXJhbXMuc2xvdCA9PT0gJ2VkMjU1MTlNdWx0aXNpZycpIHtcbiAgICByZXR1cm4gYnVpbGRFZDI1NTE5TXVsdGlzaWdSZWNvdmVyS2V5UGFyYW1zKGJpdGdvLCBwYXJhbXMuY29pbiwgcGFyYW1zLmtleXMsIG1vZGUpO1xuICB9XG5cbiAgaWYgKHBhcmFtcy5zbG90ID09PSAnc2VjcDI1NmsxTXVsdGlzaWcnKSB7XG4gICAgY29uc3Qga2V5cyA9IHBhcmFtcy5rZXlzO1xuXG4gICAgaWYgKG1vZGUgPT09ICd1bnNpZ25lZCcpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHNsb3Q6ICdzZWNwMjU2azFNdWx0aXNpZycsXG4gICAgICAgIHVzZXJLZXk6IGtleXMudXNlci5wdWIsXG4gICAgICAgIGJhY2t1cEtleToga2V5cy5iYWNrdXAucHViLFxuICAgICAgICBiaXRnb0tleToga2V5cy5iaXRnby5wdWIsXG4gICAgICB9O1xuICAgIH1cblxuICAgIGNvbnN0IHVzZXJQcnYgPSBiaXAzMi5mcm9tQmFzZTU4KGtleXMudXNlci5wcnYpO1xuICAgIGNvbnN0IGJhY2t1cFBydiA9IGJpcDMyLmZyb21CYXNlNTgoa2V5cy5iYWNrdXAucHJ2KTtcbiAgICBpZiAoIXVzZXJQcnYucHJpdmF0ZUtleSB8fCAhYmFja3VwUHJ2LnByaXZhdGVLZXkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignYnVpbGRTYWZlUmVjb3ZlcktleVBhcmFtczoga2V5cy51c2VyLnBydiBhbmQga2V5cy5iYWNrdXAucHJ2IG11c3QgYmUgcHJpdmF0ZSB4cHJ2cycpO1xuICAgIH1cblxuICAgIGNvbnN0IHdhbGxldFBhc3NwaHJhc2UgPSByYW5kb21CeXRlcygzMikudG9TdHJpbmcoJ2hleCcpO1xuICAgIGNvbnN0IFt1c2VyS2V5LCBiYWNrdXBLZXldID0gYXdhaXQgUHJvbWlzZS5hbGwoW1xuICAgICAgYml0Z28uZW5jcnlwdCh7IGlucHV0OiBrZXlzLnVzZXIucHJ2LCBwYXNzd29yZDogd2FsbGV0UGFzc3BocmFzZSwgZW5jcnlwdGlvblZlcnNpb246IDEgfSksXG4gICAgICBiaXRnby5lbmNyeXB0KHsgaW5wdXQ6IGtleXMuYmFja3VwLnBydiwgcGFzc3dvcmQ6IHdhbGxldFBhc3NwaHJhc2UsIGVuY3J5cHRpb25WZXJzaW9uOiAxIH0pLFxuICAgIF0pO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIHNsb3Q6ICdzZWNwMjU2azFNdWx0aXNpZycsXG4gICAgICB1c2VyS2V5LFxuICAgICAgYmFja3VwS2V5LFxuICAgICAgYml0Z29LZXk6IGtleXMuYml0Z28ucHViLFxuICAgICAgd2FsbGV0UGFzc3BocmFzZSxcbiAgICB9O1xuICB9XG5cbiAgdGhyb3cgbmV3IEVycm9yKGBidWlsZFNhZmVSZWNvdmVyS2V5UGFyYW1zOiBzbG90ICcke3BhcmFtcy5zbG90fScgaXMgbm90IHN1cHBvcnRlZCB5ZXRgKTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gYnVpbGRFZDI1NTE5TXVsdGlzaWdSZWNvdmVyS2V5UGFyYW1zKFxuICBiaXRnbzogQml0R29CYXNlLFxuICBjb2luOiBzdHJpbmcsXG4gIGtleXM6IEVkMjU1MTlNdWx0aXNpZ0NoaWxkS2V5cyxcbiAgbW9kZTogJ3NpZ25lZCcgfCAndW5zaWduZWQnXG4pOiBQcm9taXNlPEVkMjU1MTlTYWZlUmVjb3ZlcktleVBhcmFtcz4ge1xuICBjb25zdCBlbmNvZGVycyA9IEVEMjU1MTlfTVVMVElTSUdfQ09JTl9FTkNPREVSU1tjb2luXTtcbiAgaWYgKCFlbmNvZGVycykge1xuICAgIHRocm93IG5ldyBFcnJvcihgYnVpbGRTYWZlUmVjb3ZlcktleVBhcmFtczogY29pbiAnJHtjb2lufScgZWQyNTUxOU11bHRpc2lnIGlzIG5vdCBzdXBwb3J0ZWQgeWV0YCk7XG4gIH1cblxuICBmb3IgKGNvbnN0IHB1YiBvZiBba2V5cy51c2VyLnB1Yiwga2V5cy5iYWNrdXAucHViLCBrZXlzLmJpdGdvLnB1Yl0pIHtcbiAgICAvLyBzdHJpY3QgaGV4LCBub3QgbGVuZ3RoLW9ubHk6IEJ1ZmZlci5mcm9tKHB1YiwgJ2hleCcpIHRydW5jYXRlcyBhdCB0aGUgZmlyc3QgYmFkIHBhaXIsIHNvIGFcbiAgICAvLyBsZW5ndGggY2hlY2sgYWxvbmUgd291bGQgYWNjZXB0IHRyYWlsaW5nIGdhcmJhZ2VcbiAgICBpZiAoIS9eWzAtOWEtZl17NjR9JC9pLnRlc3QocHViKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdidWlsZFNhZmVSZWNvdmVyS2V5UGFyYW1zOiBlZDI1NTE5IGNoaWxkIHB1YmxpYyBrZXlzIG11c3QgYmUgMzIgYnl0ZXMnKTtcbiAgICB9XG4gIH1cblxuICBjb25zdCB1c2VyUHViID0gQnVmZmVyLmZyb20oa2V5cy51c2VyLnB1YiwgJ2hleCcpO1xuICBjb25zdCBiYWNrdXBQdWIgPSBCdWZmZXIuZnJvbShrZXlzLmJhY2t1cC5wdWIsICdoZXgnKTtcbiAgY29uc3QgYml0Z29QdWIgPSBCdWZmZXIuZnJvbShrZXlzLmJpdGdvLnB1YiwgJ2hleCcpO1xuXG4gIC8vIFRoZSByb290IGFkZHJlc3MgaXMgZGVyaXZhYmxlIGZyb20gY2hpbGQgcHVicyBmb3IgQUxHTyAodmVyc2lvbi0xIDItb2YtMyBtdWx0aXNpZyksIGJ1dFxuICAvLyBub3QgZm9yIEhCQVIgKEhlZGVyYSBhY2NvdW50IElEcyBhcmUgbmV0d29yay1hc3NpZ25lZCkuIEVhY2ggY29pbiBkZWNsYXJlcywgdmlhIGl0cyByZWdpc3RyeVxuICAvLyBlbnRyeSwgd2hldGhlciBpdCBjYW4gZGVyaXZlIG9uZTsgdGhlIGNhbGxlciBzdXBwbGllcyBpdCBvdGhlcndpc2UuXG4gIGNvbnN0IHJvb3RBZGRyZXNzID0gZW5jb2RlcnMuZGVyaXZlUm9vdEFkZHJlc3M/Lih1c2VyUHViLCBiYWNrdXBQdWIsIGJpdGdvUHViKTtcbiAgY29uc3Qgcm9vdEFkZHJlc3NQYXJhbXMgPSByb290QWRkcmVzcyA9PT0gdW5kZWZpbmVkID8ge30gOiB7IHJvb3RBZGRyZXNzIH07XG5cbiAgaWYgKG1vZGUgPT09ICd1bnNpZ25lZCcpIHtcbiAgICByZXR1cm4ge1xuICAgICAgc2xvdDogJ2VkMjU1MTlNdWx0aXNpZycsXG4gICAgICBtb2RlOiAndW5zaWduZWQnLFxuICAgICAgdXNlcktleTogZW5jb2RlcnMuZW5jb2RlUHViKHVzZXJQdWIpLFxuICAgICAgYmFja3VwS2V5OiBlbmNvZGVycy5lbmNvZGVQdWIoYmFja3VwUHViKSxcbiAgICAgIGJpdGdvS2V5OiBlbmNvZGVycy5lbmNvZGVQdWIoYml0Z29QdWIpLFxuICAgICAgLi4ucm9vdEFkZHJlc3NQYXJhbXMsXG4gICAgfTtcbiAgfVxuXG4gIC8vIFRoZSB1c2VyIGNoaWxkIGlzIGEgaGFyZGVuZWQgU0xJUC0wMDEwIHNlZWQsIHNvIGl0IHJlLWVuY3J5cHRzIGV4YWN0bHkgbGlrZSBzbG90IDEuIFRoZSBiYWNrdXBcbiAgLy8gY2hpbGQgaXMgYSBzZWVkbGVzcyBzb2Z0IGV4dGVuZGVkIGtleTogaXQgY2Fubm90IGJlIHJlLWVuY3J5cHRlZCBhcyBhIHNlZWQsIHNvIGl0IGJlY29tZXMgYSBsYXp5XG4gIC8vIGV4dGVybmFsIHNpZ25lciBvdmVyIHRoZSB0eCBieXRlcyAoV0NOLTI4OTUncyBleHRlbmRlZC1rZXkgc2lnbmVyLCBpbnZva2VkIGJ5IHRoZSBjb2luKS5cbiAgY29uc3Qgd2FsbGV0UGFzc3BocmFzZSA9IHJhbmRvbUJ5dGVzKDMyKS50b1N0cmluZygnaGV4Jyk7XG4gIGNvbnN0IHVzZXJLZXkgPSBhd2FpdCBiaXRnby5lbmNyeXB0KHtcbiAgICBpbnB1dDogZW5jb2RlcnMuZW5jb2RlU2VlZChCdWZmZXIuZnJvbShrZXlzLnVzZXIuc2VlZCwgJ2hleCcpKSxcbiAgICBwYXNzd29yZDogd2FsbGV0UGFzc3BocmFzZSxcbiAgICBlbmNyeXB0aW9uVmVyc2lvbjogMSxcbiAgfSk7XG5cbiAgcmV0dXJuIHtcbiAgICBzbG90OiAnZWQyNTUxOU11bHRpc2lnJyxcbiAgICBtb2RlOiAnc2lnbmVkJyxcbiAgICB1c2VyS2V5LFxuICAgIGJpdGdvS2V5OiBlbmNvZGVycy5lbmNvZGVQdWIoYml0Z29QdWIpLFxuICAgIHdhbGxldFBhc3NwaHJhc2UsXG4gICAgLi4ucm9vdEFkZHJlc3NQYXJhbXMsXG4gICAgZXh0ZXJuYWxCYWNrdXBTaWduZXI6IHtcbiAgICAgIHB1YmxpY0tleToga2V5cy5iYWNrdXAucHViLFxuICAgICAgc2lnbjogYXN5bmMgKG1lc3NhZ2UpID0+ICh7XG4gICAgICAgIHNpZ25hdHVyZTogKFxuICAgICAgICAgIGF3YWl0IHNpZ25FZDI1NTE5RXh0ZW5kZWQoXG4gICAgICAgICAgICBCdWZmZXIuZnJvbShtZXNzYWdlKSxcbiAgICAgICAgICAgIEJ1ZmZlci5mcm9tKGtleXMuYmFja3VwLmtMLCAnaGV4JyksXG4gICAgICAgICAgICBCdWZmZXIuZnJvbShrZXlzLmJhY2t1cC5rUiwgJ2hleCcpXG4gICAgICAgICAgKVxuICAgICAgICApLnRvU3RyaW5nKCdoZXgnKSxcbiAgICAgIH0pLFxuICAgIH0sXG4gIH07XG59XG4iXX0=
@@ -239,6 +239,19 @@ describe('derivableEd25519Pub', function () {
239
239
  signature.should.match(/^[0-9a-f]{128}$/);
240
240
  nacl.sign.detached.verify(message, Buffer.from(signature, 'hex'), keyPair.publicKey).should.equal(true);
241
241
  });
242
+ it('rejects a signer that mutates its message argument, leaving the original message intact', async function () {
243
+ const originalMessage = Uint8Array.from(message);
244
+ const mutatingSigner = {
245
+ publicKey,
246
+ sign: async (m) => {
247
+ m.fill(0x00);
248
+ return { signature: Buffer.from(nacl.sign.detached(m, keyPair.secretKey)).toString('hex') };
249
+ },
250
+ };
251
+ await (0, src_1.signWithExternalEd25519Signer)(mutatingSigner, originalMessage).should.be.rejectedWith(/does not verify against its public key/);
252
+ // The authoritative message must be unchanged: the signer only ever saw a defensive copy.
253
+ Buffer.from(originalMessage).equals(Buffer.from(message)).should.equal(true);
254
+ });
242
255
  });
243
256
  });
244
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVyaXZhYmxlRWQyNTUxOVB1Yi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Rlc3QvdW5pdC9iaXRnby9zYWZlL2Rlcml2YWJsZUVkMjU1MTlQdWIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxrQkFBZ0I7QUFDaEIsbUNBQW9DO0FBQ3BDLGdEQUFrQztBQUNsQyx5Q0F5QnlCO0FBRXpCLHdEQUF3RDtBQUN4RCxtR0FBbUc7QUFDbkcsOEVBQThFO0FBQzlFLDZFQUErRDtBQUUvRCxNQUFNLFVBQVUsR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3BDLE1BQU0sVUFBVSxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsRUFBRSxFQUFFLElBQUksQ0FBQyxDQUFDO0FBQzFDLE1BQU0sUUFBUSxHQUFHLElBQUEsK0JBQXlCLEVBQUMsVUFBVSxFQUFFLFVBQVUsQ0FBQyxDQUFDO0FBQ25FLE1BQU0sYUFBYSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxVQUFVLEVBQUUsVUFBVSxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDOUUsTUFBTSxhQUFhLEdBQUcsMERBQTBELENBQUM7QUFDakYsTUFBTSxXQUFXLEdBQUcsMERBQTBELENBQUM7QUFFL0UsUUFBUSxDQUFDLHFCQUFxQixFQUFFO0lBQzlCLFFBQVEsQ0FBQyxvQkFBb0IsRUFBRTtRQUM3QixFQUFFLENBQUMsb0RBQW9ELEVBQUU7WUFDdkQsd0NBQWtDLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUNwRCxrQ0FBNEIsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQy9DLFFBQVEsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLGlCQUFpQixDQUFDLENBQUM7WUFDekMsSUFB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UyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDO2lCQUN0RixDQUFDO2FBQ0gsRUFDRCxPQUFPLENBQ1IsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLFlBQVksQ0FBQyx3Q0FBd0MsQ0FBQyxDQUFDO1FBQ3JFLENBQUMsQ0FBQyxDQUFDO1FBRUgsRUFBRSxDQUFDLGdEQUFnRCxFQUFFLEtBQUs7WUFDeEQsTUFBTSxTQUFTLEdBQUcsTUFBTSxJQUFBLG1DQUE2QixFQUFDLFdBQVcsRUFBRSxPQUFPLENBQUMsQ0FBQztZQUM1RSxTQUFTLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO1lBQzFDLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxPQUFPLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsS0FBSyxDQUFDLEVBQUUsT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDMUcsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQztBQUNMLENBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICdzaG91bGQnO1xuaW1wb3J0IHsgY3JlYXRlSGFzaCB9IGZyb20gJ2NyeXB0byc7XG5pbXBvcnQgKiBhcyBuYWNsIGZyb20gJ3R3ZWV0bmFjbCc7XG5pbXBvcnQge1xuICBERVJJVkFCTEVfRUQyNTUxOV9DSEFJTl9DT0RFX0JZVEVTLFxuICBERVJJVkFCTEVfRUQyNTUxOV9QVUJfTEVOR1RILFxuICBFZDI1NTE5QklQMzIsXG4gIEVkZHNhLFxuICBiaWdJbnRGcm9tQnVmZmVyTEUsXG4gIGJpZ0ludFRvQnVmZmVyTEUsXG4gIGNsYW1wLFxuICBkZWNvZGVEZXJpdmFibGVFZDI1NTE5UHViLFxuICBkZWNvZGVFZDI1NTE5U3RyS2V5UHVibGljS2V5LFxuICBkZWNvZGVFZDI1NTE5U3RyS2V5U2VjcmV0U2VlZCxcbiAgZW5jb2RlRGVyaXZhYmxlRWQyNTUxOVB1YixcbiAgZW5jb2RlRWQyNTUxOUNoYWluQ29kZSxcbiAgZW5jb2RlRWQyNTUxOVN0cktleVB1YmxpY0tleSxcbiAgZ2VuZXJhdGVFZDI1NTE5Q2hhaW5Db2RlLFxuICBhc3NlcnRWYWxpZEV4dGVybmFsRWQyNTUxOVNpZ25lcixcbiAgc2lnbldpdGhFeHRlcm5hbEVkMjU1MTlTaWduZXIsXG4gIGlzQ2hlY2tzdW1WYWxpZFN0cktleUVkMjU1MTlQdWIsXG4gIGlzRGVyaXZhYmxlRWQyNTUxOVB1YixcbiAgaXNWYWxpZEVkMjU1MTlTdHJLZXlQdWJsaWNLZXksXG4gIHNpZ25FZDI1NTE5RXh0ZW5kZWQsXG4gIHNvZnREZXJpdmVDaGlsZFB1YkVkMjU1MTksXG4gIHNvZnREZXJpdmVDaGlsZFB1YkVkMjU1MTlBdFBhdGgsXG4gIHNvZnREZXJpdmVDaGlsZFBydkVkMjU1MTlBdFBhdGgsXG4gIHR5cGUgRXh0ZXJuYWxFZDI1NTE5U2lnbmVyLFxufSBmcm9tICcuLi8uLi8uLi8uLi9zcmMnO1xuXG4vLyBDcm9zcy1yZXBvIGZpeHR1cmU6IGJ5dGUtaWRlbnRpY2FsIHRvIHdhbGxldC1wbGF0Zm9ybVxuLy8gdGVzdC91bml0L2Jhc2Uvc2FmZXMvZml4dHVyZXMvZGVyaXZhYmxlRWQyNTUxOVB1Yi5qc29uLiBGb3VyIGluZGVwZW5kZW50IGltcGxlbWVudGF0aW9ucyBvZiB0aGlzXG4vLyBmb3JtYXQgd2lsbCBvdGhlcndpc2UgZHJpZnQsIGFuZCB0aGUgZmFpbHVyZSBtb2RlIGlzIHVucmVjb3ZlcmFibGUgd2FsbGV0cy5cbmltcG9ydCAqIGFzIGZpeHR1cmUgZnJvbSAnLi9maXh0dXJlcy9kZXJpdmFibGVFZDI1NTE5UHViLmpzb24nO1xuXG5jb25zdCBQVUJMSUNfS0VZID0gQnVmZmVyLmFsbG9jKDMyKTtcbmNvbnN0IENIQUlOX0NPREUgPSBCdWZmZXIuYWxsb2MoMzIsIDB4YWIpO1xuY29uc3QgUk9PVF9QVUIgPSBlbmNvZGVEZXJpdmFibGVFZDI1NTE5UHViKFBVQkxJQ19LRVksIENIQUlOX0NPREUpO1xuY29uc3QgUk9PVF9LRVlDSEFJTiA9IEJ1ZmZlci5jb25jYXQoW1BVQkxJQ19LRVksIENIQUlOX0NPREVdKS50b1N0cmluZygnaGV4Jyk7XG5jb25zdCBTVFJLRVlfUFVCTElDID0gJ0dBNVdVSjU0WjIzS0lMTENVT1VOQUtUUEJWWldLTVFWTzRPNkVRNUdITEFFUklNTExITkNTS1lIJztcbmNvbnN0IFNUUktFWV9TRUVEID0gJ1NBQUFDQVFEQVFDUU1CWUlCRUZBV0RBTkJZSFJBRUlTQ01LQktGUVhEQU1SVUdZNERVUEI2TktJJztcblxuZGVzY3JpYmUoJ2Rlcml2YWJsZUVkMjU1MTlQdWInLCBmdW5jdGlvbiAoKSB7XG4gIGRlc2NyaWJlKCdiYXNlMzIgcm9vdCBmb3JtYXQnLCBmdW5jdGlvbiAoKSB7XG4gICAgaXQoJ2VuY29kZXMgMzItYnl0ZSBwdWJsaWMga2V5IHBsdXMgMzItYnl0ZSBjaGFpbiBjb2RlJywgZnVuY3Rpb24gKCkge1xuICAgICAgREVSSVZBQkxFX0VEMjU1MTlfQ0hBSU5fQ09ERV9CWVRFUy5zaG91bGQuZXF1YWwoMzIpO1xuICAgICAgREVSSVZBQkxFX0VEMjU1MTlfUFVCX0xFTkdUSC5zaG91bGQuZXF1YWwoMTAzKTtcbiAgICAgIFJPT1RfUFVCLnNob3VsZC5tYXRjaCgvXltBLVoyLTddezEwM30kLyk7XG4gICAgICBkZWNvZGVEZXJpdmFibGVFZDI1NTE5UHViKFJPT1RfUFVCKS5wdWIuZXF1YWxzKFBVQkxJQ19LRVkpLnNob3VsZC5lcXVhbCh0cnVlKTtcbiAgICAgIGRlY29kZURlcml2YWJsZUVkMjU1MTlQdWIoUk9PVF9QVUIpLmNoYWluQ29kZS5lcXVhbHMoQ0hBSU5fQ09ERSkuc2hvdWxkLmVxdWFsKHRydWUpO1xuICAgIH0pO1xuXG4gICAgaXQoJ21hdGNoZXMgdGhlIGNvbnN0YW50cyBwaW5uZWQgaW4gdGhlIHNoYXJlZCBmaXh0dXJlJywgZnVuY3Rpb24gKCkge1xuICAgICAgREVSSVZBQkxFX0VEMjU1MTlfUFVCX0xFTkdUSC5zaG91bGQuZXF1YWwoZml4dHVyZS5yb290UHViQmFzZTMyTGVuZ3RoKTtcbiAgICAgIERFUklWQUJMRV9FRDI1NTE5X0NIQUlOX0NPREVfQllURVMuc2hvdWxkLmVxdWFsKGZpeHR1cmUuY2hhaW5Db2RlQnl0ZXMpO1xuICAgIH0pO1xuXG4gICAgaXQoJ2dlbmVyYXRlcyByYXcgY2hhaW4gY29kZSBmb3Igcm9vdCBjb21wb3NpdGlvbicsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGdlbmVyYXRlRWQyNTUxOUNoYWluQ29kZSgpLmxlbmd0aC5zaG91bGQuZXF1YWwoMzIpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnZml4dHVyZSB2ZWN0b3JzJywgZnVuY3Rpb24gKCkge1xuICAgIGZvciAoY29uc3QgdmVjdG9yIG9mIGZpeHR1cmUudmFsaWQpIHtcbiAgICAgIGl0KGByb3VuZC10cmlwcyAke3ZlY3Rvci5uYW1lfWAsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgY29uc3QgY29tcG9zaXRlID0gZW5jb2RlRGVyaXZhYmxlRWQyNTUxOVB1YihcbiAgICAgICAgICBCdWZmZXIuZnJvbSh2ZWN0b3IucHViLCAnaGV4JyksXG4gICAgICAgICAgQnVmZmVyLmZyb20odmVjdG9yLmNoYWluQ29kZSwgJ2hleCcpXG4gICAgICAgICk7XG4gICAgICAgIGNvbXBvc2l0ZS5zaG91bGQuZXF1YWwodmVjdG9yLmNvbXBvc2l0ZSk7XG4gICAgICAgIGNvbnN0IGRlY29kZWQgPSBkZWNvZGVEZXJpdmFibGVFZDI1NTE5UHViKHZlY3Rvci5jb21wb3NpdGUpO1xuICAgICAgICBkZWNvZGVkLnB1Yi50b1N0cmluZygnaGV4Jykuc2hvdWxkLmVxdWFsKHZlY3Rvci5wdWIpO1xuICAgICAgICBkZWNvZGVkLmNoYWluQ29kZS50b1N0cmluZygnaGV4Jykuc2hvdWxkLmVxdWFsKHZlY3Rvci5jaGFpbkNvZGUpO1xuICAgICAgICBpc0Rlcml2YWJsZUVkMjU1MTlQdWIodmVjdG9yLmNvbXBvc2l0ZSkuc2hvdWxkLmVxdWFsKHRydWUpO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgZm9yIChjb25zdCB2ZWN0b3Igb2YgZml4dHVyZS5pbnZhbGlkQ29tcG9zaXRlKSB7XG4gICAgICBpdChgcmVqZWN0cyAke3ZlY3Rvci5uYW1lfWAsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaXNEZXJpdmFibGVFZDI1NTE5UHViKHZlY3Rvci5jb21wb3NpdGUpLnNob3VsZC5lcXVhbChmYWxzZSk7XG4gICAgICAgICgoKSA9PiBkZWNvZGVEZXJpdmFibGVFZDI1NTE5UHViKHZlY3Rvci5jb21wb3NpdGUpKS5zaG91bGQudGhyb3coL0ludmFsaWQgZGVyaXZhYmxlIGVkMjU1MTkgcHViLyk7XG4gICAgICB9KTtcbiAgICB9XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdyYXcgcHVibGljIHNvZnQgZGVyaXZhdGlvbicsIGZ1bmN0aW9uICgpIHtcbiAgICBpdCgnZGVyaXZlcyBhIGRldGVybWluaXN0aWMgcHVibGljIGtleSBhbmQgZGlzY2FyZHMgdGhlIGNoaWxkIGNoYWluIGNvZGUnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBlZGRzYSA9IGF3YWl0IEVkZHNhLmluaXRpYWxpemUoYXdhaXQgRWQyNTUxOUJJUDMyLmluaXRpYWxpemUoKSk7XG4gICAgICBjb25zdCBkZXJpdmVkID0gZWRkc2EuZGVyaXZlVW5oYXJkZW5lZChST09UX0tFWUNIQUlOLCAnbS83Jyk7XG4gICAgICBkZXJpdmVkLmxlbmd0aC5zaG91bGQuZXF1YWwoMTI4KTtcbiAgICAgIGRlcml2ZWQuc2xpY2UoMCwgNjQpLnNob3VsZC5tYXRjaCgvXlswLTlhLWZdezY0fSQvKTtcbiAgICAgIGRlcml2ZWQuc2xpY2UoNjQpLnNob3VsZC5tYXRjaCgvXlswLTlhLWZdezY0fSQvKTtcbiAgICAgIChhd2FpdCBzb2Z0RGVyaXZlQ2hpbGRQdWJFZDI1NTE5KFJPT1RfUFVCLCA3KSkudG9TdHJpbmcoJ2hleCcpLnNob3VsZC5lcXVhbChkZXJpdmVkLnNsaWNlKDAsIDY0KSk7XG4gICAgfSk7XG5cbiAgICAvLyBUaGUgZ29sZGVuIHZlY3RvcnMgYmVsb3cgcGluIHRoZSB1bmhhcmRlbmVkIGRlcml2YXRpb24gb3V0cHV0IHNoYXJlZCBjcm9zcy1yZXBvIHdpdGhcbiAgICAvLyB3YWxsZXQtcGxhdGZvcm06IGEgZGl2ZXJnZW50IGltcGxlbWVudGF0aW9uIGRlcml2ZXMgY28tc2lnbmVyIGtleXMgbm9ib2R5IGVsc2UgY2FuXG4gICAgLy8gcmVwcm9kdWNlLCBwZXJtYW5lbnRseSBicmlja2luZyB0aGUgd2FsbGV0cyBtaW50ZWQgd2l0aCBpdC5cbiAgICBmb3IgKGNvbnN0IHZlY3RvciBvZiBmaXh0dXJlLnNvZnREZXJpdmF0aW9uKSB7XG4gICAgICBpdChgZGVyaXZlcyB0aGUgcGlubmVkIGdvbGRlbiBjaGlsZDogJHt2ZWN0b3IubmFtZX1gLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgIC8vIFRoZSBwdWIvY2hhaW5Db2RlIGZpZWxkcyBtdXN0IGVuY29kZSB0byB0aGUgY29tcG9zaXRlIGFjdHVhbGx5IGRlcml2ZWQgZnJvbS5cbiAgICAgICAgZW5jb2RlRGVyaXZhYmxlRWQyNTUxOVB1YihCdWZmZXIuZnJvbSh2ZWN0b3IucHViLCAnaGV4JyksIEJ1ZmZlci5mcm9tKHZlY3Rvci5jaGFpbkNvZGUsICdoZXgnKSkuc2hvdWxkLmVxdWFsKFxuICAgICAgICAgIHZlY3Rvci5jb21wb3NpdGVcbiAgICAgICAgKTtcbiAgICAgICAgY29uc3QgY2hpbGQgPSBhd2FpdCBzb2Z0RGVyaXZlQ2hpbGRQdWJFZDI1NTE5KHZlY3Rvci5jb21wb3NpdGUsIHZlY3Rvci5pbmRleCk7XG4gICAgICAgIGNoaWxkLnRvU3RyaW5nKCdoZXgnKS5zaG91bGQuZXF1YWwodmVjdG9yLmNoaWxkUHViKTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGl0KCdyZWplY3RzIGEgaGFyZGVuZWQgb3Igb3V0LW9mLXJhbmdlIGluZGV4JywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgYXdhaXQgc29mdERlcml2ZUNoaWxkUHViRWQyNTUxOShST09UX1BVQiwgLTEpLnNob3VsZC5iZS5yZWplY3RlZFdpdGgoL25vbi1oYXJkZW5lZC8pO1xuICAgICAgYXdhaXQgc29mdERlcml2ZUNoaWxkUHViRWQyNTUxOShST09UX1BVQiwgMHg4MDAwMDAwMCkuc2hvdWxkLmJlLnJlamVjdGVkV2l0aCgvbm9uLWhhcmRlbmVkLyk7XG4gICAgICBhd2FpdCBzb2Z0RGVyaXZlQ2hpbGRQdWJFZDI1NTE5KFJPT1RfUFVCLCAxLjUpLnNob3VsZC5iZS5yZWplY3RlZFdpdGgoL25vbi1oYXJkZW5lZC8pO1xuICAgIH0pO1xuXG4gICAgaXQoJ3JlamVjdHMgYSBtYWxmb3JtZWQgcm9vdCcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGF3YWl0IHNvZnREZXJpdmVDaGlsZFB1YkVkMjU1MTkoZml4dHVyZS5pbnZhbGlkQ29tcG9zaXRlWzFdLmNvbXBvc2l0ZSwgMCkuc2hvdWxkLmJlLnJlamVjdGVkV2l0aChcbiAgICAgICAgL0ludmFsaWQgZGVyaXZhYmxlIGVkMjU1MTkgcHViL1xuICAgICAgKTtcbiAgICAgIGF3YWl0IHNvZnREZXJpdmVDaGlsZFB1YkVkMjU1MTkoU1RSS0VZX1BVQkxJQywgMCkuc2hvdWxkLmJlLnJlamVjdGVkV2l0aCgvSW52YWxpZCBkZXJpdmFibGUgZWQyNTUxOSBwdWIvKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ211bHRpLXNlZ21lbnQgc29mdCBkZXJpdmF0aW9uJywgZnVuY3Rpb24gKCkge1xuICAgIGNvbnN0IHNlZWQgPSBkZWNvZGVFZDI1NTE5U3RyS2V5U2VjcmV0U2VlZChTVFJLRVlfU0VFRCk7XG4gICAgY29uc3Qgcm9vdFB1YiA9IEJ1ZmZlci5mcm9tKG5hY2wuc2lnbi5rZXlQYWlyLmZyb21TZWVkKHNlZWQpLnB1YmxpY0tleSk7XG4gICAgY29uc3Qgcm9vdENoYWluQ29kZSA9IEJ1ZmZlci5hbGxvYygzMiwgMHhhYik7XG4gICAgY29uc3QgY29tcG9zaXRlID0gZW5jb2RlRGVyaXZhYmxlRWQyNTUxOVB1Yihyb290UHViLCByb290Q2hhaW5Db2RlKTtcbiAgICBjb25zdCBjaGFpbkNvZGVTdHIgPSBlbmNvZGVFZDI1NTE5Q2hhaW5Db2RlKHJvb3RDaGFpbkNvZGUpO1xuXG4gICAgaXQoJ3ByaXZhdGUgZGVyaXZlIHB1YmxpYyBoYWxmIG1hdGNoZXMgcHVibGljIGRlcml2ZSBhdCBtLzAgYW5kIG0vNDQvMjgzLzIvMCcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGZvciAoY29uc3QgcGF0aCBvZiBbJ20vMCcsICdtLzQ0LzI4My8yLzAnXSkge1xuICAgICAgICBjb25zdCBwdWIgPSBhd2FpdCBzb2Z0RGVyaXZlQ2hpbGRQdWJFZDI1NTE5QXRQYXRoKGNvbXBvc2l0ZSwgcGF0aCk7XG4gICAgICAgIGNvbnN0IHBydiA9IGF3YWl0IHNvZnREZXJpdmVDaGlsZFBydkVkMjU1MTlBdFBhdGgoeyBzZWVkU3RyS2V5OiBTVFJLRVlfU0VFRCwgY2hhaW5Db2RlOiBjaGFpbkNvZGVTdHIsIHBhdGggfSk7XG4gICAgICAgIHBydi5wdWIuZXF1YWxzKHB1Yikuc2hvdWxkLmVxdWFsKHRydWUpO1xuICAgICAgICAvLyBSZWNvbXB1dGUgdGhlIHB1YmxpYyBwb2ludCBkaXJlY3RseSBmcm9tIGtMIHRvIHByb3ZlIHRoZSBwcml2YXRlIHNjYWxhciBtYXBzIHRvIHB1Yi5cbiAgICAgICAgYmlnSW50VG9CdWZmZXJMRShFZGRzYS5jdXJ2ZS5iYXNlUG9pbnRNdWx0KGJpZ0ludEZyb21CdWZmZXJMRShwcnYua0wpKSwgMzIpXG4gICAgICAgICAgLmVxdWFscyhwcnYucHViKVxuICAgICAgICAgIC5zaG91bGQuZXF1YWwodHJ1ZSk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBpdCgncmVqZWN0cyBoYXJkZW5lZCBhbmQgb3V0LW9mLXJhbmdlIHBhdGhzJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgYXdhaXQgc29mdERlcml2ZUNoaWxkUHViRWQyNTUxOUF0UGF0aChjb21wb3NpdGUsIFwibS8wJ1wiKS5zaG91bGQuYmUucmVqZWN0ZWRXaXRoKC9JbnZhbGlkIHNvZnQgZGVyaXZhdGlvbiBwYXRoLyk7XG4gICAgICBhd2FpdCBzb2Z0RGVyaXZlQ2hpbGRQcnZFZDI1NTE5QXRQYXRoKHtcbiAgICAgICAgc2VlZFN0cktleTogU1RSS0VZX1NFRUQsXG4gICAgICAgIGNoYWluQ29kZTogY2hhaW5Db2RlU3RyLFxuICAgICAgICBwYXRoOiBcIm0vMCdcIixcbiAgICAgIH0pLnNob3VsZC5iZS5yZWplY3RlZFdpdGgoL0ludmFsaWQgc29mdCBkZXJpdmF0aW9uIHBhdGgvKTtcbiAgICAgIGF3YWl0IHNvZnREZXJpdmVDaGlsZFB1YkVkMjU1MTlBdFBhdGgoY29tcG9zaXRlLCAnbS8yMTQ3NDgzNjQ4Jykuc2hvdWxkLmJlLnJlamVjdGVkV2l0aCgvb3V0IG9mIHJhbmdlLyk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdTdGVsbGFyIHVzZXIta2V5IGNvZGVjcycsIGZ1bmN0aW9uICgpIHtcbiAgICBpdCgna2VlcHMgU3RlbGxhciBlbmNvZGluZyBzZXBhcmF0ZSBmcm9tIHRoZSBuZXV0cmFsIHJvb3QgZm9ybWF0JywgZnVuY3Rpb24gKCkge1xuICAgICAgaXNWYWxpZEVkMjU1MTlTdHJLZXlQdWJsaWNLZXkoU1RSS0VZX1BVQkxJQykuc2hvdWxkLmVxdWFsKHRydWUpO1xuICAgICAgZW5jb2RlRWQyNTUxOVN0cktleVB1YmxpY0tleShkZWNvZGVFZDI1NTE5U3RyS2V5UHVibGljS2V5KFNUUktFWV9QVUJMSUMpKS5zaG91bGQuZXF1YWwoU1RSS0VZX1BVQkxJQyk7XG4gICAgICBkZWNvZGVFZDI1NTE5U3RyS2V5U2VjcmV0U2VlZChTVFJLRVlfU0VFRCkubGVuZ3RoLnNob3VsZC5lcXVhbCgzMik7XG4gICAgICBpc0Rlcml2YWJsZUVkMjU1MTlQdWIoU1RSS0VZX1BVQkxJQykuc2hvdWxkLmVxdWFsKGZhbHNlKTtcbiAgICAgIGlzQ2hlY2tzdW1WYWxpZFN0cktleUVkMjU1MTlQdWIoU1RSS0VZX1BVQkxJQykuc2hvdWxkLmVxdWFsKHRydWUpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3JlamVjdHMgYSBwdWJsaWMga2V5IHdpdGggYSBjb3JydXB0ZWQgY2hlY2tzdW0nLCBmdW5jdGlvbiAoKSB7XG4gICAgICBpc1ZhbGlkRWQyNTUxOVN0cktleVB1YmxpY0tleSgnR0E1V1VKNTRaMjNLSUxMQ1VPVU5BS1RQQlZaV0tNUVZPNE82RVE1R0hMQUVSSU1MTEhOQ1NLWUEnKS5zaG91bGQuZXF1YWwoZmFsc2UpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3JlamVjdHMgYSBzZWNyZXQgc2VlZCB3aGVyZSBhIHB1YmxpYyBrZXkgaXMgcmVxdWlyZWQnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBpc1ZhbGlkRWQyNTUxOVN0cktleVB1YmxpY0tleSgnU0E1V1VKNTRaMjNLSUxMQ1VPVU5BS1RQQlZaV0tNUVZPNE82RVE1R0hMQUVSSU1MTEhOQ1NLWUgnKS5zaG91bGQuZXF1YWwoZmFsc2UpO1xuICAgICAgKCgpID0+IGRlY29kZUVkMjU1MTlTdHJLZXlQdWJsaWNLZXkoJ1NBNVdVSjU0WjIzS0lMTENVT1VOQUtUUEJWWldLTVFWTzRPNkVRNUdITEFFUklNTExITkNTS1lIJykpLnNob3VsZC50aHJvdyhcbiAgICAgICAgL1N0cktleSBwdWJsaWMga2V5L1xuICAgICAgKTtcbiAgICB9KTtcblxuICAgIGl0KCdyZWplY3RzIGEgbm9uLWJhc2UzMiBjaGFyYWN0ZXIsIHRoZSBlbXB0eSBzdHJpbmcsIGFuZCBsb3dlcmNhc2UnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBpc1ZhbGlkRWQyNTUxOVN0cktleVB1YmxpY0tleSgnR0E1V1VKNTRaMjNLSUxMQ1VPVU5BS1RQQlZaV0tNUVZPNE82RVE1R0hMQUVSSU1MTEhOQ1NLWTEnKS5zaG91bGQuZXF1YWwoZmFsc2UpO1xuICAgICAgaXNWYWxpZEVkMjU1MTlTdHJLZXlQdWJsaWNLZXkoJycpLnNob3VsZC5lcXVhbChmYWxzZSk7XG4gICAgICBpc1ZhbGlkRWQyNTUxOVN0cktleVB1YmxpY0tleShTVFJLRVlfUFVCTElDLnRvTG93ZXJDYXNlKCkpLnNob3VsZC5lcXVhbChmYWxzZSk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdleHRlbmRlZC1rZXkgc2lnbmluZycsIGZ1bmN0aW9uICgpIHtcbiAgICBjb25zdCBzZWVkID0gZGVjb2RlRWQyNTUxOVN0cktleVNlY3JldFNlZWQoU1RSS0VZX1NFRUQpO1xuICAgIGNvbnN0IG1lc3NhZ2UgPSBCdWZmZXIuZnJvbSgnZXh0ZW5kZWQta2V5IHNpZ25hdHVyZScpO1xuICAgIGNvbnN0IHJvb3RDaGFpbkNvZGUgPSBCdWZmZXIuYWxsb2MoMzIsIDB4YWIpO1xuICAgIGNvbnN0IGNoYWluQ29kZVN0ciA9IGVuY29kZUVkMjU1MTlDaGFpbkNvZGUocm9vdENoYWluQ29kZSk7XG5cbiAgICBpdCgnbWF0Y2hlcyB0aGUgc2VlZC1iYXNlZCBzaWduZXIgZm9yIGEgc2VlZC1iYWNrZWQga2V5JywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgaCA9IGNyZWF0ZUhhc2goJ3NoYTUxMicpLnVwZGF0ZShzZWVkKS5kaWdlc3QoKTtcbiAgICAgIGNvbnN0IGtMID0gYmlnSW50VG9CdWZmZXJMRShjbGFtcChiaWdJbnRGcm9tQnVmZmVyTEUoaC5zdWJhcnJheSgwLCAzMikpKSwgMzIpO1xuICAgICAgY29uc3Qga1IgPSBoLnN1YmFycmF5KDMyKTtcbiAgICAgIGNvbnN0IHNpZyA9IGF3YWl0IHNpZ25FZDI1NTE5RXh0ZW5kZWQobWVzc2FnZSwga0wsIGtSKTtcbiAgICAgIGNvbnN0IGV4cGVjdGVkID0gQnVmZmVyLmZyb20obmFjbC5zaWduLmRldGFjaGVkKG1lc3NhZ2UsIG5hY2wuc2lnbi5rZXlQYWlyLmZyb21TZWVkKHNlZWQpLnNlY3JldEtleSkpO1xuICAgICAgc2lnLmVxdWFscyhleHBlY3RlZCkuc2hvdWxkLmVxdWFsKHRydWUpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3NpZ25zIGEgc29mdC1kZXJpdmVkIGtleSB3aXRoIG5vIHNlZWQgYW5kIHZlcmlmaWVzIGFnYWluc3QgaXRzIHB1YicsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHBydiA9IGF3YWl0IHNvZnREZXJpdmVDaGlsZFBydkVkMjU1MTlBdFBhdGgoe1xuICAgICAgICBzZWVkU3RyS2V5OiBTVFJLRVlfU0VFRCxcbiAgICAgICAgY2hhaW5Db2RlOiBjaGFpbkNvZGVTdHIsXG4gICAgICAgIHBhdGg6ICdtLzAnLFxuICAgICAgfSk7XG4gICAgICBjb25zdCBzaWcgPSBhd2FpdCBzaWduRWQyNTUxOUV4dGVuZGVkKG1lc3NhZ2UsIHBydi5rTCwgcHJ2LmtSKTtcbiAgICAgIG5hY2wuc2lnbi5kZXRhY2hlZC52ZXJpZnkobWVzc2FnZSwgc2lnLCBwcnYucHViKS5zaG91bGQuZXF1YWwodHJ1ZSk7XG4gICAgICAvLyBUaGUgc29mdC1kZXJpdmVkIHNjYWxhciBoYXMgbm8gc2VlZDogdHJlYXRpbmcga0wgYXMgYSBzZWVkIHlpZWxkcyBhIGRpZmZlcmVudCBwdWIuXG4gICAgICBCdWZmZXIuZnJvbShuYWNsLnNpZ24ua2V5UGFpci5mcm9tU2VlZChwcnYua0wpLnB1YmxpY0tleSkuZXF1YWxzKHBydi5wdWIpLnNob3VsZC5lcXVhbChmYWxzZSk7XG4gICAgfSk7XG5cbiAgICBpdCgncmVqZWN0cyBrTC9rUiB0aGF0IGFyZSBub3QgMzIgYnl0ZXMnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBhd2FpdCBzaWduRWQyNTUxOUV4dGVuZGVkKG1lc3NhZ2UsIEJ1ZmZlci5hbGxvYygzMSksIEJ1ZmZlci5hbGxvYygzMikpLnNob3VsZC5iZS5yZWplY3RlZFdpdGgoL2tMIGxlbmd0aC8pO1xuICAgICAgYXdhaXQgc2lnbkVkMjU1MTlFeHRlbmRlZChtZXNzYWdlLCBCdWZmZXIuYWxsb2MoMzIpLCBCdWZmZXIuYWxsb2MoMzMpKS5zaG91bGQuYmUucmVqZWN0ZWRXaXRoKC9rUiBsZW5ndGgvKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ0V4dGVybmFsRWQyNTUxOVNpZ25lcicsIGZ1bmN0aW9uICgpIHtcbiAgICBjb25zdCBtZXNzYWdlID0gQnVmZmVyLmZyb20oJ2V4dGVybmFsLXNpZ25lciBtZXNzYWdlJyk7XG4gICAgY29uc3Qga2V5UGFpciA9IG5hY2wuc2lnbi5rZXlQYWlyLmZyb21TZWVkKEJ1ZmZlci5hbGxvYygzMiwgMHg0MikpO1xuICAgIGNvbnN0IHB1YmxpY0tleSA9IEJ1ZmZlci5mcm9tKGtleVBhaXIucHVibGljS2V5KS50b1N0cmluZygnaGV4Jyk7XG4gICAgY29uc3Qgb3RoZXJLZXlQYWlyID0gbmFjbC5zaWduLmtleVBhaXIuZnJvbVNlZWQoQnVmZmVyLmFsbG9jKDMyLCAweDc3KSk7XG4gICAgY29uc3QgdmFsaWRTaWduZXI6IEV4dGVybmFsRWQyNTUxOVNpZ25lciA9IHtcbiAgICAgIHB1YmxpY0tleSxcbiAgICAgIHNpZ246IGFzeW5jIChtOiBVaW50OEFycmF5KSA9PiAoe1xuICAgICAgICBzaWduYXR1cmU6IEJ1ZmZlci5mcm9tKG5hY2wuc2lnbi5kZXRhY2hlZChtLCBrZXlQYWlyLnNlY3JldEtleSkpLnRvU3RyaW5nKCdoZXgnKSxcbiAgICAgIH0pLFxuICAgIH07XG5cbiAgICBpdCgncmVqZWN0cyBhIG1hbGZvcm1lZCBwdWJsaWMga2V5JywgZnVuY3Rpb24gKCkge1xuICAgICAgKCgpID0+XG4gICAgICAgIGFzc2VydFZhbGlkRXh0ZXJuYWxFZDI1NTE5U2lnbmVyKHtcbiAgICAgICAgICBwdWJsaWNLZXk6ICdub3QtaGV4JyxcbiAgICAgICAgICBzaWduOiBhc3luYyAoKSA9PiAoeyBzaWduYXR1cmU6ICdhJy5yZXBlYXQoMTI4KSB9KSxcbiAgICAgICAgfSkpLnNob3VsZC50aHJvdygvZXhwZWN0ZWQgMzIgYnl0ZXMvKTtcbiAgICB9KTtcblxuICAgIGl0KCdyZWplY3RzIGEgcHVibGljIGtleSB3aXRoIHRyYWlsaW5nIGdhcmJhZ2UgYWZ0ZXIgNjQgaGV4IGNoYXJzJywgZnVuY3Rpb24gKCkge1xuICAgICAgLy8gQnVmZmVyLmZyb20ocHViLCAnaGV4JykgdHJ1bmNhdGVzIGF0IHRoZSBmaXJzdCBiYWQgcGFpciwgc28gYSBsZW5ndGgtb25seSBjaGVjayB3b3VsZFxuICAgICAgLy8gYWNjZXB0IHRoaXM7IHRoZSBzdHJpY3QgcmVnZXggbXVzdCBub3QuXG4gICAgICAoKCkgPT5cbiAgICAgICAgYXNzZXJ0VmFsaWRFeHRlcm5hbEVkMjU1MTlTaWduZXIoe1xuICAgICAgICAgIHB1YmxpY0tleTogJ2YxJy5yZXBlYXQoMzIpICsgJ3p6JyxcbiAgICAgICAgICBzaWduOiBhc3luYyAoKSA9PiAoeyBzaWduYXR1cmU6ICdhJy5yZXBlYXQoMTI4KSB9KSxcbiAgICAgICAgfSkpLnNob3VsZC50aHJvdygvZXhwZWN0ZWQgMzIgYnl0ZXMvKTtcbiAgICB9KTtcblxuICAgIGl0KCdyZWplY3RzIGEgc2lnbmVyIHdpdGhvdXQgYSBzaWduIGZ1bmN0aW9uJywgZnVuY3Rpb24gKCkge1xuICAgICAgKCgpID0+XG4gICAgICAgIGFzc2VydFZhbGlkRXh0ZXJuYWxFZDI1NTE5U2lnbmVyKHtcbiAgICAgICAgICBwdWJsaWNLZXksXG4gICAgICAgICAgc2lnbjogdW5kZWZpbmVkIGFzIHVua25vd24gYXMgRXh0ZXJuYWxFZDI1NTE5U2lnbmVyWydzaWduJ10sXG4gICAgICAgIH0pKS5zaG91bGQudGhyb3coL3NpZ24gbXVzdCBiZSBhIGZ1bmN0aW9uLyk7XG4gICAgfSk7XG5cbiAgICBpdCgncmVqZWN0cyBhIG5vbi02NC1ieXRlIHNpZ25hdHVyZScsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGF3YWl0IHNpZ25XaXRoRXh0ZXJuYWxFZDI1NTE5U2lnbmVyKFxuICAgICAgICB7IHB1YmxpY0tleSwgc2lnbjogYXN5bmMgKCkgPT4gKHsgc2lnbmF0dXJlOiAnYWInIH0pIH0sXG4gICAgICAgIG1lc3NhZ2VcbiAgICAgICkuc2hvdWxkLmJlLnJlamVjdGVkV2l0aCgvZXhwZWN0ZWQgNjQgYnl0ZXMvKTtcbiAgICB9KTtcblxuICAgIGl0KCdyZWplY3RzIHdoZW4gc2lnbiByZXNvbHZlcyB0byBhIG5vbi1vYmplY3QnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBhd2FpdCBzaWduV2l0aEV4dGVybmFsRWQyNTUxOVNpZ25lcihcbiAgICAgICAgeyBwdWJsaWNLZXksIHNpZ246IGFzeW5jICgpID0+IG51bGwgYXMgdW5rbm93biBhcyB7IHNpZ25hdHVyZTogc3RyaW5nIH0gfSxcbiAgICAgICAgbWVzc2FnZVxuICAgICAgKS5zaG91bGQuYmUucmVqZWN0ZWRXaXRoKC9zaWduIG11c3QgcmVzb2x2ZSB0byBcXHsgc2lnbmF0dXJlOiBzdHJpbmcgXFx9Lyk7XG4gICAgfSk7XG5cbiAgICBpdCgncmVqZWN0cyBhIHdlbGwtZm9ybWVkIHNpZ25hdHVyZSBmcm9tIHRoZSB3cm9uZyBrZXknLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBhd2FpdCBzaWduV2l0aEV4dGVybmFsRWQyNTUxOVNpZ25lcihcbiAgICAgICAge1xuICAgICAgICAgIHB1YmxpY0tleSxcbiAgICAgICAgICBzaWduOiBhc3luYyAobTogVWludDhBcnJheSkgPT4gKHtcbiAgICAgICAgICAgIHNpZ25hdHVyZTogQnVmZmVyLmZyb20obmFjbC5zaWduLmRldGFjaGVkKG0sIG90aGVyS2V5UGFpci5zZWNyZXRLZXkpKS50b1N0cmluZygnaGV4JyksXG4gICAgICAgICAgfSksXG4gICAgICAgIH0sXG4gICAgICAgIG1lc3NhZ2VcbiAgICAgICkuc2hvdWxkLmJlLnJlamVjdGVkV2l0aCgvZG9lcyBub3QgdmVyaWZ5IGFnYWluc3QgaXRzIHB1YmxpYyBrZXkvKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaWducyBhbmQgcmV0dXJucyBhIHZlcmlmaWVkIDY0LWJ5dGUgc2lnbmF0dXJlJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3Qgc2lnbmF0dXJlID0gYXdhaXQgc2lnbldpdGhFeHRlcm5hbEVkMjU1MTlTaWduZXIodmFsaWRTaWduZXIsIG1lc3NhZ2UpO1xuICAgICAgc2lnbmF0dXJlLnNob3VsZC5tYXRjaCgvXlswLTlhLWZdezEyOH0kLyk7XG4gICAgICBuYWNsLnNpZ24uZGV0YWNoZWQudmVyaWZ5KG1lc3NhZ2UsIEJ1ZmZlci5mcm9tKHNpZ25hdHVyZSwgJ2hleCcpLCBrZXlQYWlyLnB1YmxpY0tleSkuc2hvdWxkLmVxdWFsKHRydWUpO1xuICAgIH0pO1xuICB9KTtcbn0pO1xuIl19
257
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVyaXZhYmxlRWQyNTUxOVB1Yi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Rlc3QvdW5pdC9iaXRnby9zYWZlL2Rlcml2YWJsZUVkMjU1MTlQdWIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxrQkFBZ0I7QUFDaEIsbUNBQW9DO0FBQ3BDLGdEQUFrQztBQUNsQyx5Q0F5QnlCO0FBRXpCLHdEQUF3RDtBQUN4RCxtR0FBbUc7QUFDbkcsOEVBQThFO0FBQzlFLDZFQUErRDtBQUUvRCxNQUFNLFVBQVUsR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3BDLE1BQU0sVUFBVSxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsRUFBRSxFQUFFLElBQUksQ0FBQyxDQUFDO0FBQzFDLE1BQU0sUUFBUSxHQUFHLElBQUEsK0JBQXlCLEVBQUMsVUFBVSxFQUFFLFVBQVUsQ0FBQyxDQUFDO0FBQ25FLE1BQU0sYUFBYSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxVQUFVLEVBQUUsVUFBVSxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDOUUsTUFBTSxhQUFhLEdBQUcsMERBQTBELENBQUM7QUFDakYsTUFBTSxXQUFXLEdBQUcsMERBQTBELENBQUM7QUFFL0UsUUFBUSxDQUFDLHFCQUFxQixFQUFFO0lBQzlCLFFBQVEsQ0FBQyxvQkFBb0IsRUFBRTtRQUM3QixFQUFFLENBQUMsb0RBQW9ELEVBQUU7WUFDdkQsd0NBQWtDLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUNwRCxrQ0FBNEIsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQy9DLFFBQVEsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLGlCQUFpQixDQUFDLENBQUM7WUFDekMsSUFB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QyxNQUFNLENBQUMsRUFBRSxDQUFDLFlBQVksQ0FDekYsd0NBQXdDLENBQ3pDLENBQUM7WUFDRiwwRkFBMEY7WUFDMUYsTUFBTSxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDL0UsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQztBQUNMLENBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICdzaG91bGQnO1xuaW1wb3J0IHsgY3JlYXRlSGFzaCB9IGZyb20gJ2NyeXB0byc7XG5pbXBvcnQgKiBhcyBuYWNsIGZyb20gJ3R3ZWV0bmFjbCc7XG5pbXBvcnQge1xuICBERVJJVkFCTEVfRUQyNTUxOV9DSEFJTl9DT0RFX0JZVEVTLFxuICBERVJJVkFCTEVfRUQyNTUxOV9QVUJfTEVOR1RILFxuICBFZDI1NTE5QklQMzIsXG4gIEVkZHNhLFxuICBiaWdJbnRGcm9tQnVmZmVyTEUsXG4gIGJpZ0ludFRvQnVmZmVyTEUsXG4gIGNsYW1wLFxuICBkZWNvZGVEZXJpdmFibGVFZDI1NTE5UHViLFxuICBkZWNvZGVFZDI1NTE5U3RyS2V5UHVibGljS2V5LFxuICBkZWNvZGVFZDI1NTE5U3RyS2V5U2VjcmV0U2VlZCxcbiAgZW5jb2RlRGVyaXZhYmxlRWQyNTUxOVB1YixcbiAgZW5jb2RlRWQyNTUxOUNoYWluQ29kZSxcbiAgZW5jb2RlRWQyNTUxOVN0cktleVB1YmxpY0tleSxcbiAgZ2VuZXJhdGVFZDI1NTE5Q2hhaW5Db2RlLFxuICBhc3NlcnRWYWxpZEV4dGVybmFsRWQyNTUxOVNpZ25lcixcbiAgc2lnbldpdGhFeHRlcm5hbEVkMjU1MTlTaWduZXIsXG4gIGlzQ2hlY2tzdW1WYWxpZFN0cktleUVkMjU1MTlQdWIsXG4gIGlzRGVyaXZhYmxlRWQyNTUxOVB1YixcbiAgaXNWYWxpZEVkMjU1MTlTdHJLZXlQdWJsaWNLZXksXG4gIHNpZ25FZDI1NTE5RXh0ZW5kZWQsXG4gIHNvZnREZXJpdmVDaGlsZFB1YkVkMjU1MTksXG4gIHNvZnREZXJpdmVDaGlsZFB1YkVkMjU1MTlBdFBhdGgsXG4gIHNvZnREZXJpdmVDaGlsZFBydkVkMjU1MTlBdFBhdGgsXG4gIHR5cGUgRXh0ZXJuYWxFZDI1NTE5U2lnbmVyLFxufSBmcm9tICcuLi8uLi8uLi8uLi9zcmMnO1xuXG4vLyBDcm9zcy1yZXBvIGZpeHR1cmU6IGJ5dGUtaWRlbnRpY2FsIHRvIHdhbGxldC1wbGF0Zm9ybVxuLy8gdGVzdC91bml0L2Jhc2Uvc2FmZXMvZml4dHVyZXMvZGVyaXZhYmxlRWQyNTUxOVB1Yi5qc29uLiBGb3VyIGluZGVwZW5kZW50IGltcGxlbWVudGF0aW9ucyBvZiB0aGlzXG4vLyBmb3JtYXQgd2lsbCBvdGhlcndpc2UgZHJpZnQsIGFuZCB0aGUgZmFpbHVyZSBtb2RlIGlzIHVucmVjb3ZlcmFibGUgd2FsbGV0cy5cbmltcG9ydCAqIGFzIGZpeHR1cmUgZnJvbSAnLi9maXh0dXJlcy9kZXJpdmFibGVFZDI1NTE5UHViLmpzb24nO1xuXG5jb25zdCBQVUJMSUNfS0VZID0gQnVmZmVyLmFsbG9jKDMyKTtcbmNvbnN0IENIQUlOX0NPREUgPSBCdWZmZXIuYWxsb2MoMzIsIDB4YWIpO1xuY29uc3QgUk9PVF9QVUIgPSBlbmNvZGVEZXJpdmFibGVFZDI1NTE5UHViKFBVQkxJQ19LRVksIENIQUlOX0NPREUpO1xuY29uc3QgUk9PVF9LRVlDSEFJTiA9IEJ1ZmZlci5jb25jYXQoW1BVQkxJQ19LRVksIENIQUlOX0NPREVdKS50b1N0cmluZygnaGV4Jyk7XG5jb25zdCBTVFJLRVlfUFVCTElDID0gJ0dBNVdVSjU0WjIzS0lMTENVT1VOQUtUUEJWWldLTVFWTzRPNkVRNUdITEFFUklNTExITkNTS1lIJztcbmNvbnN0IFNUUktFWV9TRUVEID0gJ1NBQUFDQVFEQVFDUU1CWUlCRUZBV0RBTkJZSFJBRUlTQ01LQktGUVhEQU1SVUdZNERVUEI2TktJJztcblxuZGVzY3JpYmUoJ2Rlcml2YWJsZUVkMjU1MTlQdWInLCBmdW5jdGlvbiAoKSB7XG4gIGRlc2NyaWJlKCdiYXNlMzIgcm9vdCBmb3JtYXQnLCBmdW5jdGlvbiAoKSB7XG4gICAgaXQoJ2VuY29kZXMgMzItYnl0ZSBwdWJsaWMga2V5IHBsdXMgMzItYnl0ZSBjaGFpbiBjb2RlJywgZnVuY3Rpb24gKCkge1xuICAgICAgREVSSVZBQkxFX0VEMjU1MTlfQ0hBSU5fQ09ERV9CWVRFUy5zaG91bGQuZXF1YWwoMzIpO1xuICAgICAgREVSSVZBQkxFX0VEMjU1MTlfUFVCX0xFTkdUSC5zaG91bGQuZXF1YWwoMTAzKTtcbiAgICAgIFJPT1RfUFVCLnNob3VsZC5tYXRjaCgvXltBLVoyLTddezEwM30kLyk7XG4gICAgICBkZWNvZGVEZXJpdmFibGVFZDI1NTE5UHViKFJPT1RfUFVCKS5wdWIuZXF1YWxzKFBVQkxJQ19LRVkpLnNob3VsZC5lcXVhbCh0cnVlKTtcbiAgICAgIGRlY29kZURlcml2YWJsZUVkMjU1MTlQdWIoUk9PVF9QVUIpLmNoYWluQ29kZS5lcXVhbHMoQ0hBSU5fQ09ERSkuc2hvdWxkLmVxdWFsKHRydWUpO1xuICAgIH0pO1xuXG4gICAgaXQoJ21hdGNoZXMgdGhlIGNvbnN0YW50cyBwaW5uZWQgaW4gdGhlIHNoYXJlZCBmaXh0dXJlJywgZnVuY3Rpb24gKCkge1xuICAgICAgREVSSVZBQkxFX0VEMjU1MTlfUFVCX0xFTkdUSC5zaG91bGQuZXF1YWwoZml4dHVyZS5yb290UHViQmFzZTMyTGVuZ3RoKTtcbiAgICAgIERFUklWQUJMRV9FRDI1NTE5X0NIQUlOX0NPREVfQllURVMuc2hvdWxkLmVxdWFsKGZpeHR1cmUuY2hhaW5Db2RlQnl0ZXMpO1xuICAgIH0pO1xuXG4gICAgaXQoJ2dlbmVyYXRlcyByYXcgY2hhaW4gY29kZSBmb3Igcm9vdCBjb21wb3NpdGlvbicsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGdlbmVyYXRlRWQyNTUxOUNoYWluQ29kZSgpLmxlbmd0aC5zaG91bGQuZXF1YWwoMzIpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnZml4dHVyZSB2ZWN0b3JzJywgZnVuY3Rpb24gKCkge1xuICAgIGZvciAoY29uc3QgdmVjdG9yIG9mIGZpeHR1cmUudmFsaWQpIHtcbiAgICAgIGl0KGByb3VuZC10cmlwcyAke3ZlY3Rvci5uYW1lfWAsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgY29uc3QgY29tcG9zaXRlID0gZW5jb2RlRGVyaXZhYmxlRWQyNTUxOVB1YihcbiAgICAgICAgICBCdWZmZXIuZnJvbSh2ZWN0b3IucHViLCAnaGV4JyksXG4gICAgICAgICAgQnVmZmVyLmZyb20odmVjdG9yLmNoYWluQ29kZSwgJ2hleCcpXG4gICAgICAgICk7XG4gICAgICAgIGNvbXBvc2l0ZS5zaG91bGQuZXF1YWwodmVjdG9yLmNvbXBvc2l0ZSk7XG4gICAgICAgIGNvbnN0IGRlY29kZWQgPSBkZWNvZGVEZXJpdmFibGVFZDI1NTE5UHViKHZlY3Rvci5jb21wb3NpdGUpO1xuICAgICAgICBkZWNvZGVkLnB1Yi50b1N0cmluZygnaGV4Jykuc2hvdWxkLmVxdWFsKHZlY3Rvci5wdWIpO1xuICAgICAgICBkZWNvZGVkLmNoYWluQ29kZS50b1N0cmluZygnaGV4Jykuc2hvdWxkLmVxdWFsKHZlY3Rvci5jaGFpbkNvZGUpO1xuICAgICAgICBpc0Rlcml2YWJsZUVkMjU1MTlQdWIodmVjdG9yLmNvbXBvc2l0ZSkuc2hvdWxkLmVxdWFsKHRydWUpO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgZm9yIChjb25zdCB2ZWN0b3Igb2YgZml4dHVyZS5pbnZhbGlkQ29tcG9zaXRlKSB7XG4gICAgICBpdChgcmVqZWN0cyAke3ZlY3Rvci5uYW1lfWAsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaXNEZXJpdmFibGVFZDI1NTE5UHViKHZlY3Rvci5jb21wb3NpdGUpLnNob3VsZC5lcXVhbChmYWxzZSk7XG4gICAgICAgICgoKSA9PiBkZWNvZGVEZXJpdmFibGVFZDI1NTE5UHViKHZlY3Rvci5jb21wb3NpdGUpKS5zaG91bGQudGhyb3coL0ludmFsaWQgZGVyaXZhYmxlIGVkMjU1MTkgcHViLyk7XG4gICAgICB9KTtcbiAgICB9XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdyYXcgcHVibGljIHNvZnQgZGVyaXZhdGlvbicsIGZ1bmN0aW9uICgpIHtcbiAgICBpdCgnZGVyaXZlcyBhIGRldGVybWluaXN0aWMgcHVibGljIGtleSBhbmQgZGlzY2FyZHMgdGhlIGNoaWxkIGNoYWluIGNvZGUnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBlZGRzYSA9IGF3YWl0IEVkZHNhLmluaXRpYWxpemUoYXdhaXQgRWQyNTUxOUJJUDMyLmluaXRpYWxpemUoKSk7XG4gICAgICBjb25zdCBkZXJpdmVkID0gZWRkc2EuZGVyaXZlVW5oYXJkZW5lZChST09UX0tFWUNIQUlOLCAnbS83Jyk7XG4gICAgICBkZXJpdmVkLmxlbmd0aC5zaG91bGQuZXF1YWwoMTI4KTtcbiAgICAgIGRlcml2ZWQuc2xpY2UoMCwgNjQpLnNob3VsZC5tYXRjaCgvXlswLTlhLWZdezY0fSQvKTtcbiAgICAgIGRlcml2ZWQuc2xpY2UoNjQpLnNob3VsZC5tYXRjaCgvXlswLTlhLWZdezY0fSQvKTtcbiAgICAgIChhd2FpdCBzb2Z0RGVyaXZlQ2hpbGRQdWJFZDI1NTE5KFJPT1RfUFVCLCA3KSkudG9TdHJpbmcoJ2hleCcpLnNob3VsZC5lcXVhbChkZXJpdmVkLnNsaWNlKDAsIDY0KSk7XG4gICAgfSk7XG5cbiAgICAvLyBUaGUgZ29sZGVuIHZlY3RvcnMgYmVsb3cgcGluIHRoZSB1bmhhcmRlbmVkIGRlcml2YXRpb24gb3V0cHV0IHNoYXJlZCBjcm9zcy1yZXBvIHdpdGhcbiAgICAvLyB3YWxsZXQtcGxhdGZvcm06IGEgZGl2ZXJnZW50IGltcGxlbWVudGF0aW9uIGRlcml2ZXMgY28tc2lnbmVyIGtleXMgbm9ib2R5IGVsc2UgY2FuXG4gICAgLy8gcmVwcm9kdWNlLCBwZXJtYW5lbnRseSBicmlja2luZyB0aGUgd2FsbGV0cyBtaW50ZWQgd2l0aCBpdC5cbiAgICBmb3IgKGNvbnN0IHZlY3RvciBvZiBmaXh0dXJlLnNvZnREZXJpdmF0aW9uKSB7XG4gICAgICBpdChgZGVyaXZlcyB0aGUgcGlubmVkIGdvbGRlbiBjaGlsZDogJHt2ZWN0b3IubmFtZX1gLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgIC8vIFRoZSBwdWIvY2hhaW5Db2RlIGZpZWxkcyBtdXN0IGVuY29kZSB0byB0aGUgY29tcG9zaXRlIGFjdHVhbGx5IGRlcml2ZWQgZnJvbS5cbiAgICAgICAgZW5jb2RlRGVyaXZhYmxlRWQyNTUxOVB1YihCdWZmZXIuZnJvbSh2ZWN0b3IucHViLCAnaGV4JyksIEJ1ZmZlci5mcm9tKHZlY3Rvci5jaGFpbkNvZGUsICdoZXgnKSkuc2hvdWxkLmVxdWFsKFxuICAgICAgICAgIHZlY3Rvci5jb21wb3NpdGVcbiAgICAgICAgKTtcbiAgICAgICAgY29uc3QgY2hpbGQgPSBhd2FpdCBzb2Z0RGVyaXZlQ2hpbGRQdWJFZDI1NTE5KHZlY3Rvci5jb21wb3NpdGUsIHZlY3Rvci5pbmRleCk7XG4gICAgICAgIGNoaWxkLnRvU3RyaW5nKCdoZXgnKS5zaG91bGQuZXF1YWwodmVjdG9yLmNoaWxkUHViKTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGl0KCdyZWplY3RzIGEgaGFyZGVuZWQgb3Igb3V0LW9mLXJhbmdlIGluZGV4JywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgYXdhaXQgc29mdERlcml2ZUNoaWxkUHViRWQyNTUxOShST09UX1BVQiwgLTEpLnNob3VsZC5iZS5yZWplY3RlZFdpdGgoL25vbi1oYXJkZW5lZC8pO1xuICAgICAgYXdhaXQgc29mdERlcml2ZUNoaWxkUHViRWQyNTUxOShST09UX1BVQiwgMHg4MDAwMDAwMCkuc2hvdWxkLmJlLnJlamVjdGVkV2l0aCgvbm9uLWhhcmRlbmVkLyk7XG4gICAgICBhd2FpdCBzb2Z0RGVyaXZlQ2hpbGRQdWJFZDI1NTE5KFJPT1RfUFVCLCAxLjUpLnNob3VsZC5iZS5yZWplY3RlZFdpdGgoL25vbi1oYXJkZW5lZC8pO1xuICAgIH0pO1xuXG4gICAgaXQoJ3JlamVjdHMgYSBtYWxmb3JtZWQgcm9vdCcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGF3YWl0IHNvZnREZXJpdmVDaGlsZFB1YkVkMjU1MTkoZml4dHVyZS5pbnZhbGlkQ29tcG9zaXRlWzFdLmNvbXBvc2l0ZSwgMCkuc2hvdWxkLmJlLnJlamVjdGVkV2l0aChcbiAgICAgICAgL0ludmFsaWQgZGVyaXZhYmxlIGVkMjU1MTkgcHViL1xuICAgICAgKTtcbiAgICAgIGF3YWl0IHNvZnREZXJpdmVDaGlsZFB1YkVkMjU1MTkoU1RSS0VZX1BVQkxJQywgMCkuc2hvdWxkLmJlLnJlamVjdGVkV2l0aCgvSW52YWxpZCBkZXJpdmFibGUgZWQyNTUxOSBwdWIvKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ211bHRpLXNlZ21lbnQgc29mdCBkZXJpdmF0aW9uJywgZnVuY3Rpb24gKCkge1xuICAgIGNvbnN0IHNlZWQgPSBkZWNvZGVFZDI1NTE5U3RyS2V5U2VjcmV0U2VlZChTVFJLRVlfU0VFRCk7XG4gICAgY29uc3Qgcm9vdFB1YiA9IEJ1ZmZlci5mcm9tKG5hY2wuc2lnbi5rZXlQYWlyLmZyb21TZWVkKHNlZWQpLnB1YmxpY0tleSk7XG4gICAgY29uc3Qgcm9vdENoYWluQ29kZSA9IEJ1ZmZlci5hbGxvYygzMiwgMHhhYik7XG4gICAgY29uc3QgY29tcG9zaXRlID0gZW5jb2RlRGVyaXZhYmxlRWQyNTUxOVB1Yihyb290UHViLCByb290Q2hhaW5Db2RlKTtcbiAgICBjb25zdCBjaGFpbkNvZGVTdHIgPSBlbmNvZGVFZDI1NTE5Q2hhaW5Db2RlKHJvb3RDaGFpbkNvZGUpO1xuXG4gICAgaXQoJ3ByaXZhdGUgZGVyaXZlIHB1YmxpYyBoYWxmIG1hdGNoZXMgcHVibGljIGRlcml2ZSBhdCBtLzAgYW5kIG0vNDQvMjgzLzIvMCcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGZvciAoY29uc3QgcGF0aCBvZiBbJ20vMCcsICdtLzQ0LzI4My8yLzAnXSkge1xuICAgICAgICBjb25zdCBwdWIgPSBhd2FpdCBzb2Z0RGVyaXZlQ2hpbGRQdWJFZDI1NTE5QXRQYXRoKGNvbXBvc2l0ZSwgcGF0aCk7XG4gICAgICAgIGNvbnN0IHBydiA9IGF3YWl0IHNvZnREZXJpdmVDaGlsZFBydkVkMjU1MTlBdFBhdGgoeyBzZWVkU3RyS2V5OiBTVFJLRVlfU0VFRCwgY2hhaW5Db2RlOiBjaGFpbkNvZGVTdHIsIHBhdGggfSk7XG4gICAgICAgIHBydi5wdWIuZXF1YWxzKHB1Yikuc2hvdWxkLmVxdWFsKHRydWUpO1xuICAgICAgICAvLyBSZWNvbXB1dGUgdGhlIHB1YmxpYyBwb2ludCBkaXJlY3RseSBmcm9tIGtMIHRvIHByb3ZlIHRoZSBwcml2YXRlIHNjYWxhciBtYXBzIHRvIHB1Yi5cbiAgICAgICAgYmlnSW50VG9CdWZmZXJMRShFZGRzYS5jdXJ2ZS5iYXNlUG9pbnRNdWx0KGJpZ0ludEZyb21CdWZmZXJMRShwcnYua0wpKSwgMzIpXG4gICAgICAgICAgLmVxdWFscyhwcnYucHViKVxuICAgICAgICAgIC5zaG91bGQuZXF1YWwodHJ1ZSk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBpdCgncmVqZWN0cyBoYXJkZW5lZCBhbmQgb3V0LW9mLXJhbmdlIHBhdGhzJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgYXdhaXQgc29mdERlcml2ZUNoaWxkUHViRWQyNTUxOUF0UGF0aChjb21wb3NpdGUsIFwibS8wJ1wiKS5zaG91bGQuYmUucmVqZWN0ZWRXaXRoKC9JbnZhbGlkIHNvZnQgZGVyaXZhdGlvbiBwYXRoLyk7XG4gICAgICBhd2FpdCBzb2Z0RGVyaXZlQ2hpbGRQcnZFZDI1NTE5QXRQYXRoKHtcbiAgICAgICAgc2VlZFN0cktleTogU1RSS0VZX1NFRUQsXG4gICAgICAgIGNoYWluQ29kZTogY2hhaW5Db2RlU3RyLFxuICAgICAgICBwYXRoOiBcIm0vMCdcIixcbiAgICAgIH0pLnNob3VsZC5iZS5yZWplY3RlZFdpdGgoL0ludmFsaWQgc29mdCBkZXJpdmF0aW9uIHBhdGgvKTtcbiAgICAgIGF3YWl0IHNvZnREZXJpdmVDaGlsZFB1YkVkMjU1MTlBdFBhdGgoY29tcG9zaXRlLCAnbS8yMTQ3NDgzNjQ4Jykuc2hvdWxkLmJlLnJlamVjdGVkV2l0aCgvb3V0IG9mIHJhbmdlLyk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdTdGVsbGFyIHVzZXIta2V5IGNvZGVjcycsIGZ1bmN0aW9uICgpIHtcbiAgICBpdCgna2VlcHMgU3RlbGxhciBlbmNvZGluZyBzZXBhcmF0ZSBmcm9tIHRoZSBuZXV0cmFsIHJvb3QgZm9ybWF0JywgZnVuY3Rpb24gKCkge1xuICAgICAgaXNWYWxpZEVkMjU1MTlTdHJLZXlQdWJsaWNLZXkoU1RSS0VZX1BVQkxJQykuc2hvdWxkLmVxdWFsKHRydWUpO1xuICAgICAgZW5jb2RlRWQyNTUxOVN0cktleVB1YmxpY0tleShkZWNvZGVFZDI1NTE5U3RyS2V5UHVibGljS2V5KFNUUktFWV9QVUJMSUMpKS5zaG91bGQuZXF1YWwoU1RSS0VZX1BVQkxJQyk7XG4gICAgICBkZWNvZGVFZDI1NTE5U3RyS2V5U2VjcmV0U2VlZChTVFJLRVlfU0VFRCkubGVuZ3RoLnNob3VsZC5lcXVhbCgzMik7XG4gICAgICBpc0Rlcml2YWJsZUVkMjU1MTlQdWIoU1RSS0VZX1BVQkxJQykuc2hvdWxkLmVxdWFsKGZhbHNlKTtcbiAgICAgIGlzQ2hlY2tzdW1WYWxpZFN0cktleUVkMjU1MTlQdWIoU1RSS0VZX1BVQkxJQykuc2hvdWxkLmVxdWFsKHRydWUpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3JlamVjdHMgYSBwdWJsaWMga2V5IHdpdGggYSBjb3JydXB0ZWQgY2hlY2tzdW0nLCBmdW5jdGlvbiAoKSB7XG4gICAgICBpc1ZhbGlkRWQyNTUxOVN0cktleVB1YmxpY0tleSgnR0E1V1VKNTRaMjNLSUxMQ1VPVU5BS1RQQlZaV0tNUVZPNE82RVE1R0hMQUVSSU1MTEhOQ1NLWUEnKS5zaG91bGQuZXF1YWwoZmFsc2UpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3JlamVjdHMgYSBzZWNyZXQgc2VlZCB3aGVyZSBhIHB1YmxpYyBrZXkgaXMgcmVxdWlyZWQnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBpc1ZhbGlkRWQyNTUxOVN0cktleVB1YmxpY0tleSgnU0E1V1VKNTRaMjNLSUxMQ1VPVU5BS1RQQlZaV0tNUVZPNE82RVE1R0hMQUVSSU1MTEhOQ1NLWUgnKS5zaG91bGQuZXF1YWwoZmFsc2UpO1xuICAgICAgKCgpID0+IGRlY29kZUVkMjU1MTlTdHJLZXlQdWJsaWNLZXkoJ1NBNVdVSjU0WjIzS0lMTENVT1VOQUtUUEJWWldLTVFWTzRPNkVRNUdITEFFUklNTExITkNTS1lIJykpLnNob3VsZC50aHJvdyhcbiAgICAgICAgL1N0cktleSBwdWJsaWMga2V5L1xuICAgICAgKTtcbiAgICB9KTtcblxuICAgIGl0KCdyZWplY3RzIGEgbm9uLWJhc2UzMiBjaGFyYWN0ZXIsIHRoZSBlbXB0eSBzdHJpbmcsIGFuZCBsb3dlcmNhc2UnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBpc1ZhbGlkRWQyNTUxOVN0cktleVB1YmxpY0tleSgnR0E1V1VKNTRaMjNLSUxMQ1VPVU5BS1RQQlZaV0tNUVZPNE82RVE1R0hMQUVSSU1MTEhOQ1NLWTEnKS5zaG91bGQuZXF1YWwoZmFsc2UpO1xuICAgICAgaXNWYWxpZEVkMjU1MTlTdHJLZXlQdWJsaWNLZXkoJycpLnNob3VsZC5lcXVhbChmYWxzZSk7XG4gICAgICBpc1ZhbGlkRWQyNTUxOVN0cktleVB1YmxpY0tleShTVFJLRVlfUFVCTElDLnRvTG93ZXJDYXNlKCkpLnNob3VsZC5lcXVhbChmYWxzZSk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdleHRlbmRlZC1rZXkgc2lnbmluZycsIGZ1bmN0aW9uICgpIHtcbiAgICBjb25zdCBzZWVkID0gZGVjb2RlRWQyNTUxOVN0cktleVNlY3JldFNlZWQoU1RSS0VZX1NFRUQpO1xuICAgIGNvbnN0IG1lc3NhZ2UgPSBCdWZmZXIuZnJvbSgnZXh0ZW5kZWQta2V5IHNpZ25hdHVyZScpO1xuICAgIGNvbnN0IHJvb3RDaGFpbkNvZGUgPSBCdWZmZXIuYWxsb2MoMzIsIDB4YWIpO1xuICAgIGNvbnN0IGNoYWluQ29kZVN0ciA9IGVuY29kZUVkMjU1MTlDaGFpbkNvZGUocm9vdENoYWluQ29kZSk7XG5cbiAgICBpdCgnbWF0Y2hlcyB0aGUgc2VlZC1iYXNlZCBzaWduZXIgZm9yIGEgc2VlZC1iYWNrZWQga2V5JywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgaCA9IGNyZWF0ZUhhc2goJ3NoYTUxMicpLnVwZGF0ZShzZWVkKS5kaWdlc3QoKTtcbiAgICAgIGNvbnN0IGtMID0gYmlnSW50VG9CdWZmZXJMRShjbGFtcChiaWdJbnRGcm9tQnVmZmVyTEUoaC5zdWJhcnJheSgwLCAzMikpKSwgMzIpO1xuICAgICAgY29uc3Qga1IgPSBoLnN1YmFycmF5KDMyKTtcbiAgICAgIGNvbnN0IHNpZyA9IGF3YWl0IHNpZ25FZDI1NTE5RXh0ZW5kZWQobWVzc2FnZSwga0wsIGtSKTtcbiAgICAgIGNvbnN0IGV4cGVjdGVkID0gQnVmZmVyLmZyb20obmFjbC5zaWduLmRldGFjaGVkKG1lc3NhZ2UsIG5hY2wuc2lnbi5rZXlQYWlyLmZyb21TZWVkKHNlZWQpLnNlY3JldEtleSkpO1xuICAgICAgc2lnLmVxdWFscyhleHBlY3RlZCkuc2hvdWxkLmVxdWFsKHRydWUpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3NpZ25zIGEgc29mdC1kZXJpdmVkIGtleSB3aXRoIG5vIHNlZWQgYW5kIHZlcmlmaWVzIGFnYWluc3QgaXRzIHB1YicsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHBydiA9IGF3YWl0IHNvZnREZXJpdmVDaGlsZFBydkVkMjU1MTlBdFBhdGgoe1xuICAgICAgICBzZWVkU3RyS2V5OiBTVFJLRVlfU0VFRCxcbiAgICAgICAgY2hhaW5Db2RlOiBjaGFpbkNvZGVTdHIsXG4gICAgICAgIHBhdGg6ICdtLzAnLFxuICAgICAgfSk7XG4gICAgICBjb25zdCBzaWcgPSBhd2FpdCBzaWduRWQyNTUxOUV4dGVuZGVkKG1lc3NhZ2UsIHBydi5rTCwgcHJ2LmtSKTtcbiAgICAgIG5hY2wuc2lnbi5kZXRhY2hlZC52ZXJpZnkobWVzc2FnZSwgc2lnLCBwcnYucHViKS5zaG91bGQuZXF1YWwodHJ1ZSk7XG4gICAgICAvLyBUaGUgc29mdC1kZXJpdmVkIHNjYWxhciBoYXMgbm8gc2VlZDogdHJlYXRpbmcga0wgYXMgYSBzZWVkIHlpZWxkcyBhIGRpZmZlcmVudCBwdWIuXG4gICAgICBCdWZmZXIuZnJvbShuYWNsLnNpZ24ua2V5UGFpci5mcm9tU2VlZChwcnYua0wpLnB1YmxpY0tleSkuZXF1YWxzKHBydi5wdWIpLnNob3VsZC5lcXVhbChmYWxzZSk7XG4gICAgfSk7XG5cbiAgICBpdCgncmVqZWN0cyBrTC9rUiB0aGF0IGFyZSBub3QgMzIgYnl0ZXMnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBhd2FpdCBzaWduRWQyNTUxOUV4dGVuZGVkKG1lc3NhZ2UsIEJ1ZmZlci5hbGxvYygzMSksIEJ1ZmZlci5hbGxvYygzMikpLnNob3VsZC5iZS5yZWplY3RlZFdpdGgoL2tMIGxlbmd0aC8pO1xuICAgICAgYXdhaXQgc2lnbkVkMjU1MTlFeHRlbmRlZChtZXNzYWdlLCBCdWZmZXIuYWxsb2MoMzIpLCBCdWZmZXIuYWxsb2MoMzMpKS5zaG91bGQuYmUucmVqZWN0ZWRXaXRoKC9rUiBsZW5ndGgvKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ0V4dGVybmFsRWQyNTUxOVNpZ25lcicsIGZ1bmN0aW9uICgpIHtcbiAgICBjb25zdCBtZXNzYWdlID0gQnVmZmVyLmZyb20oJ2V4dGVybmFsLXNpZ25lciBtZXNzYWdlJyk7XG4gICAgY29uc3Qga2V5UGFpciA9IG5hY2wuc2lnbi5rZXlQYWlyLmZyb21TZWVkKEJ1ZmZlci5hbGxvYygzMiwgMHg0MikpO1xuICAgIGNvbnN0IHB1YmxpY0tleSA9IEJ1ZmZlci5mcm9tKGtleVBhaXIucHVibGljS2V5KS50b1N0cmluZygnaGV4Jyk7XG4gICAgY29uc3Qgb3RoZXJLZXlQYWlyID0gbmFjbC5zaWduLmtleVBhaXIuZnJvbVNlZWQoQnVmZmVyLmFsbG9jKDMyLCAweDc3KSk7XG4gICAgY29uc3QgdmFsaWRTaWduZXI6IEV4dGVybmFsRWQyNTUxOVNpZ25lciA9IHtcbiAgICAgIHB1YmxpY0tleSxcbiAgICAgIHNpZ246IGFzeW5jIChtOiBVaW50OEFycmF5KSA9PiAoe1xuICAgICAgICBzaWduYXR1cmU6IEJ1ZmZlci5mcm9tKG5hY2wuc2lnbi5kZXRhY2hlZChtLCBrZXlQYWlyLnNlY3JldEtleSkpLnRvU3RyaW5nKCdoZXgnKSxcbiAgICAgIH0pLFxuICAgIH07XG5cbiAgICBpdCgncmVqZWN0cyBhIG1hbGZvcm1lZCBwdWJsaWMga2V5JywgZnVuY3Rpb24gKCkge1xuICAgICAgKCgpID0+XG4gICAgICAgIGFzc2VydFZhbGlkRXh0ZXJuYWxFZDI1NTE5U2lnbmVyKHtcbiAgICAgICAgICBwdWJsaWNLZXk6ICdub3QtaGV4JyxcbiAgICAgICAgICBzaWduOiBhc3luYyAoKSA9PiAoeyBzaWduYXR1cmU6ICdhJy5yZXBlYXQoMTI4KSB9KSxcbiAgICAgICAgfSkpLnNob3VsZC50aHJvdygvZXhwZWN0ZWQgMzIgYnl0ZXMvKTtcbiAgICB9KTtcblxuICAgIGl0KCdyZWplY3RzIGEgcHVibGljIGtleSB3aXRoIHRyYWlsaW5nIGdhcmJhZ2UgYWZ0ZXIgNjQgaGV4IGNoYXJzJywgZnVuY3Rpb24gKCkge1xuICAgICAgLy8gQnVmZmVyLmZyb20ocHViLCAnaGV4JykgdHJ1bmNhdGVzIGF0IHRoZSBmaXJzdCBiYWQgcGFpciwgc28gYSBsZW5ndGgtb25seSBjaGVjayB3b3VsZFxuICAgICAgLy8gYWNjZXB0IHRoaXM7IHRoZSBzdHJpY3QgcmVnZXggbXVzdCBub3QuXG4gICAgICAoKCkgPT5cbiAgICAgICAgYXNzZXJ0VmFsaWRFeHRlcm5hbEVkMjU1MTlTaWduZXIoe1xuICAgICAgICAgIHB1YmxpY0tleTogJ2YxJy5yZXBlYXQoMzIpICsgJ3p6JyxcbiAgICAgICAgICBzaWduOiBhc3luYyAoKSA9PiAoeyBzaWduYXR1cmU6ICdhJy5yZXBlYXQoMTI4KSB9KSxcbiAgICAgICAgfSkpLnNob3VsZC50aHJvdygvZXhwZWN0ZWQgMzIgYnl0ZXMvKTtcbiAgICB9KTtcblxuICAgIGl0KCdyZWplY3RzIGEgc2lnbmVyIHdpdGhvdXQgYSBzaWduIGZ1bmN0aW9uJywgZnVuY3Rpb24gKCkge1xuICAgICAgKCgpID0+XG4gICAgICAgIGFzc2VydFZhbGlkRXh0ZXJuYWxFZDI1NTE5U2lnbmVyKHtcbiAgICAgICAgICBwdWJsaWNLZXksXG4gICAgICAgICAgc2lnbjogdW5kZWZpbmVkIGFzIHVua25vd24gYXMgRXh0ZXJuYWxFZDI1NTE5U2lnbmVyWydzaWduJ10sXG4gICAgICAgIH0pKS5zaG91bGQudGhyb3coL3NpZ24gbXVzdCBiZSBhIGZ1bmN0aW9uLyk7XG4gICAgfSk7XG5cbiAgICBpdCgncmVqZWN0cyBhIG5vbi02NC1ieXRlIHNpZ25hdHVyZScsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGF3YWl0IHNpZ25XaXRoRXh0ZXJuYWxFZDI1NTE5U2lnbmVyKFxuICAgICAgICB7IHB1YmxpY0tleSwgc2lnbjogYXN5bmMgKCkgPT4gKHsgc2lnbmF0dXJlOiAnYWInIH0pIH0sXG4gICAgICAgIG1lc3NhZ2VcbiAgICAgICkuc2hvdWxkLmJlLnJlamVjdGVkV2l0aCgvZXhwZWN0ZWQgNjQgYnl0ZXMvKTtcbiAgICB9KTtcblxuICAgIGl0KCdyZWplY3RzIHdoZW4gc2lnbiByZXNvbHZlcyB0byBhIG5vbi1vYmplY3QnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBhd2FpdCBzaWduV2l0aEV4dGVybmFsRWQyNTUxOVNpZ25lcihcbiAgICAgICAgeyBwdWJsaWNLZXksIHNpZ246IGFzeW5jICgpID0+IG51bGwgYXMgdW5rbm93biBhcyB7IHNpZ25hdHVyZTogc3RyaW5nIH0gfSxcbiAgICAgICAgbWVzc2FnZVxuICAgICAgKS5zaG91bGQuYmUucmVqZWN0ZWRXaXRoKC9zaWduIG11c3QgcmVzb2x2ZSB0byBcXHsgc2lnbmF0dXJlOiBzdHJpbmcgXFx9Lyk7XG4gICAgfSk7XG5cbiAgICBpdCgncmVqZWN0cyBhIHdlbGwtZm9ybWVkIHNpZ25hdHVyZSBmcm9tIHRoZSB3cm9uZyBrZXknLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBhd2FpdCBzaWduV2l0aEV4dGVybmFsRWQyNTUxOVNpZ25lcihcbiAgICAgICAge1xuICAgICAgICAgIHB1YmxpY0tleSxcbiAgICAgICAgICBzaWduOiBhc3luYyAobTogVWludDhBcnJheSkgPT4gKHtcbiAgICAgICAgICAgIHNpZ25hdHVyZTogQnVmZmVyLmZyb20obmFjbC5zaWduLmRldGFjaGVkKG0sIG90aGVyS2V5UGFpci5zZWNyZXRLZXkpKS50b1N0cmluZygnaGV4JyksXG4gICAgICAgICAgfSksXG4gICAgICAgIH0sXG4gICAgICAgIG1lc3NhZ2VcbiAgICAgICkuc2hvdWxkLmJlLnJlamVjdGVkV2l0aCgvZG9lcyBub3QgdmVyaWZ5IGFnYWluc3QgaXRzIHB1YmxpYyBrZXkvKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaWducyBhbmQgcmV0dXJucyBhIHZlcmlmaWVkIDY0LWJ5dGUgc2lnbmF0dXJlJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3Qgc2lnbmF0dXJlID0gYXdhaXQgc2lnbldpdGhFeHRlcm5hbEVkMjU1MTlTaWduZXIodmFsaWRTaWduZXIsIG1lc3NhZ2UpO1xuICAgICAgc2lnbmF0dXJlLnNob3VsZC5tYXRjaCgvXlswLTlhLWZdezEyOH0kLyk7XG4gICAgICBuYWNsLnNpZ24uZGV0YWNoZWQudmVyaWZ5KG1lc3NhZ2UsIEJ1ZmZlci5mcm9tKHNpZ25hdHVyZSwgJ2hleCcpLCBrZXlQYWlyLnB1YmxpY0tleSkuc2hvdWxkLmVxdWFsKHRydWUpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3JlamVjdHMgYSBzaWduZXIgdGhhdCBtdXRhdGVzIGl0cyBtZXNzYWdlIGFyZ3VtZW50LCBsZWF2aW5nIHRoZSBvcmlnaW5hbCBtZXNzYWdlIGludGFjdCcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IG9yaWdpbmFsTWVzc2FnZSA9IFVpbnQ4QXJyYXkuZnJvbShtZXNzYWdlKTtcbiAgICAgIGNvbnN0IG11dGF0aW5nU2lnbmVyOiBFeHRlcm5hbEVkMjU1MTlTaWduZXIgPSB7XG4gICAgICAgIHB1YmxpY0tleSxcbiAgICAgICAgc2lnbjogYXN5bmMgKG06IFVpbnQ4QXJyYXkpID0+IHtcbiAgICAgICAgICBtLmZpbGwoMHgwMCk7XG4gICAgICAgICAgcmV0dXJuIHsgc2lnbmF0dXJlOiBCdWZmZXIuZnJvbShuYWNsLnNpZ24uZGV0YWNoZWQobSwga2V5UGFpci5zZWNyZXRLZXkpKS50b1N0cmluZygnaGV4JykgfTtcbiAgICAgICAgfSxcbiAgICAgIH07XG4gICAgICBhd2FpdCBzaWduV2l0aEV4dGVybmFsRWQyNTUxOVNpZ25lcihtdXRhdGluZ1NpZ25lciwgb3JpZ2luYWxNZXNzYWdlKS5zaG91bGQuYmUucmVqZWN0ZWRXaXRoKFxuICAgICAgICAvZG9lcyBub3QgdmVyaWZ5IGFnYWluc3QgaXRzIHB1YmxpYyBrZXkvXG4gICAgICApO1xuICAgICAgLy8gVGhlIGF1dGhvcml0YXRpdmUgbWVzc2FnZSBtdXN0IGJlIHVuY2hhbmdlZDogdGhlIHNpZ25lciBvbmx5IGV2ZXIgc2F3IGEgZGVmZW5zaXZlIGNvcHkuXG4gICAgICBCdWZmZXIuZnJvbShvcmlnaW5hbE1lc3NhZ2UpLmVxdWFscyhCdWZmZXIuZnJvbShtZXNzYWdlKSkuc2hvdWxkLmVxdWFsKHRydWUpO1xuICAgIH0pO1xuICB9KTtcbn0pO1xuIl19