utxo-lib 1.0.8 → 1.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (104) hide show
  1. package/README.md +19 -16
  2. package/dist/src/address.d.ts.map +1 -1
  3. package/dist/src/address.js +11 -1
  4. package/dist/src/addressFormat.d.ts +1 -1
  5. package/dist/src/addressFormat.d.ts.map +1 -1
  6. package/dist/src/addressFormat.js +1 -1
  7. package/dist/src/base_crypto.d.ts +14 -0
  8. package/dist/src/base_crypto.d.ts.map +1 -0
  9. package/dist/src/base_crypto.js +215 -0
  10. package/dist/src/bitgo/Musig2.d.ts +115 -17
  11. package/dist/src/bitgo/Musig2.d.ts.map +1 -1
  12. package/dist/src/bitgo/Musig2.js +283 -101
  13. package/dist/src/bitgo/PsbtUtil.d.ts +59 -0
  14. package/dist/src/bitgo/PsbtUtil.d.ts.map +1 -0
  15. package/dist/src/bitgo/PsbtUtil.js +91 -0
  16. package/dist/src/bitgo/UtxoPsbt.d.ts +180 -47
  17. package/dist/src/bitgo/UtxoPsbt.d.ts.map +1 -1
  18. package/dist/src/bitgo/UtxoPsbt.js +657 -121
  19. package/dist/src/bitgo/UtxoTransaction.js +2 -2
  20. package/dist/src/bitgo/bitcoincash/address.js +2 -2
  21. package/dist/src/bitgo/index.d.ts +11 -0
  22. package/dist/src/bitgo/index.d.ts.map +1 -1
  23. package/dist/src/bitgo/index.js +6 -2
  24. package/dist/src/bitgo/legacysafe/index.d.ts +15 -0
  25. package/dist/src/bitgo/legacysafe/index.d.ts.map +1 -0
  26. package/dist/src/bitgo/legacysafe/index.js +61 -0
  27. package/dist/src/bitgo/litecoin/LitecoinPsbt.d.ts +10 -0
  28. package/dist/src/bitgo/litecoin/LitecoinPsbt.d.ts.map +1 -0
  29. package/dist/src/bitgo/litecoin/LitecoinPsbt.js +17 -0
  30. package/dist/src/bitgo/litecoin/LitecoinTransaction.d.ts +16 -0
  31. package/dist/src/bitgo/litecoin/LitecoinTransaction.d.ts.map +1 -0
  32. package/dist/src/bitgo/litecoin/LitecoinTransaction.js +46 -0
  33. package/dist/src/bitgo/litecoin/LitecoinTransactionBuilder.d.ts +10 -0
  34. package/dist/src/bitgo/litecoin/LitecoinTransactionBuilder.d.ts.map +1 -0
  35. package/dist/src/bitgo/litecoin/LitecoinTransactionBuilder.js +15 -0
  36. package/dist/src/bitgo/litecoin/index.d.ts +4 -0
  37. package/dist/src/bitgo/litecoin/index.d.ts.map +1 -0
  38. package/dist/src/bitgo/litecoin/index.js +16 -0
  39. package/dist/src/bitgo/outputScripts.d.ts +3 -1
  40. package/dist/src/bitgo/outputScripts.d.ts.map +1 -1
  41. package/dist/src/bitgo/outputScripts.js +20 -12
  42. package/dist/src/bitgo/parseInput.d.ts +49 -20
  43. package/dist/src/bitgo/parseInput.d.ts.map +1 -1
  44. package/dist/src/bitgo/parseInput.js +110 -26
  45. package/dist/src/bitgo/psbt/fromHalfSigned.d.ts.map +1 -1
  46. package/dist/src/bitgo/psbt/fromHalfSigned.js +9 -6
  47. package/dist/src/bitgo/psbt/scriptTypes.js +3 -3
  48. package/dist/src/bitgo/signature.d.ts +3 -3
  49. package/dist/src/bitgo/signature.d.ts.map +1 -1
  50. package/dist/src/bitgo/signature.js +48 -16
  51. package/dist/src/bitgo/transaction.d.ts +18 -3
  52. package/dist/src/bitgo/transaction.d.ts.map +1 -1
  53. package/dist/src/bitgo/transaction.js +28 -15
  54. package/dist/src/bitgo/types.d.ts +2 -0
  55. package/dist/src/bitgo/types.d.ts.map +1 -1
  56. package/dist/src/bitgo/types.js +1 -1
  57. package/dist/src/bitgo/wallet/Psbt.d.ts +104 -12
  58. package/dist/src/bitgo/wallet/Psbt.d.ts.map +1 -1
  59. package/dist/src/bitgo/wallet/Psbt.js +285 -70
  60. package/dist/src/bitgo/wallet/Unspent.d.ts +28 -0
  61. package/dist/src/bitgo/wallet/Unspent.d.ts.map +1 -1
  62. package/dist/src/bitgo/wallet/Unspent.js +172 -68
  63. package/dist/src/bitgo/wallet/WalletOutput.d.ts +17 -1
  64. package/dist/src/bitgo/wallet/WalletOutput.d.ts.map +1 -1
  65. package/dist/src/bitgo/wallet/WalletOutput.js +64 -23
  66. package/dist/src/bitgo/wallet/chains.d.ts +2 -2
  67. package/dist/src/bitgo/wallet/chains.d.ts.map +1 -1
  68. package/dist/src/bitgo/wallet/chains.js +1 -1
  69. package/dist/src/bitgo/zcash/ZcashPsbt.d.ts +0 -1
  70. package/dist/src/bitgo/zcash/ZcashPsbt.d.ts.map +1 -1
  71. package/dist/src/bitgo/zcash/ZcashPsbt.js +7 -16
  72. package/dist/src/bitgo/zcash/ZcashTransaction.js +2 -2
  73. package/dist/src/musig.d.ts +390 -0
  74. package/dist/src/musig.d.ts.map +1 -0
  75. package/dist/src/musig.js +447 -0
  76. package/dist/src/networks.d.ts +1 -2
  77. package/dist/src/networks.d.ts.map +1 -1
  78. package/dist/src/networks.js +22 -29
  79. package/dist/src/noble_ecc.d.ts +1 -1
  80. package/dist/src/noble_ecc.d.ts.map +1 -1
  81. package/dist/src/noble_ecc.js +11 -7
  82. package/dist/src/payments/p2tr.d.ts.map +1 -1
  83. package/dist/src/payments/p2tr.js +21 -19
  84. package/dist/src/payments/p2tr_ns.js +2 -3
  85. package/dist/src/taproot.d.ts +16 -0
  86. package/dist/src/taproot.d.ts.map +1 -1
  87. package/dist/src/taproot.js +45 -4
  88. package/dist/src/testutil/index.d.ts +2 -0
  89. package/dist/src/testutil/index.d.ts.map +1 -1
  90. package/dist/src/testutil/index.js +3 -1
  91. package/dist/src/testutil/keys.d.ts +3 -0
  92. package/dist/src/testutil/keys.d.ts.map +1 -1
  93. package/dist/src/testutil/keys.js +17 -2
  94. package/dist/src/testutil/mock.d.ts +1 -1
  95. package/dist/src/testutil/mock.d.ts.map +1 -1
  96. package/dist/src/testutil/mock.js +12 -4
  97. package/dist/src/testutil/psbt.d.ts +89 -0
  98. package/dist/src/testutil/psbt.d.ts.map +1 -0
  99. package/dist/src/testutil/psbt.js +150 -0
  100. package/dist/src/testutil/transaction.d.ts +70 -0
  101. package/dist/src/testutil/transaction.d.ts.map +1 -0
  102. package/dist/src/testutil/transaction.js +107 -0
  103. package/dist/src/transaction_builder.js +2 -2
  104. package/package.json +6 -7
@@ -469,7 +469,7 @@ function fixMultisigOrder(input, transaction, vin, prevOutputs) {
469
469
  return false;
470
470
  // TODO: avoid O(n) hashForSignature
471
471
  const parsed = _5.script.signature.decode(signature);
472
- const hash = transaction.hashForSignature(vin, input.redeemScript, parsed.hashType, prevOutput === null || prevOutput === void 0 ? void 0 : prevOutput.value);
472
+ const hash = transaction.hashForSignature(vin, input.redeemScript, parsed.hashType, prevOutput?.value);
473
473
  // skip if signature does not match pubKey
474
474
  if (!keyPair.verify(hash, parsed.signature))
475
475
  return false;
@@ -1081,4 +1081,4 @@ function getSigningData(network, inputs, needsOutputs, tx, signParams, keyPair,
1081
1081
  taptreeRoot,
1082
1082
  };
1083
1083
  }
1084
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNhY3Rpb25fYnVpbGRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy90cmFuc2FjdGlvbl9idWlsZGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLGlEQUFpRDtBQUNqRCx5QkFBdUQ7QUFDdkQsNkRBQTZEO0FBQzdELHVDQUF1QztBQUN2Qyx5QkFBdUM7QUFDdkMseUJBQThCO0FBRTlCLHlCQUE4QjtBQUU5Qix5QkFBdUM7QUFDdkMseUJBQW9DO0FBQ3BDLHlCQUE2QjtBQUM3Qix5QkFBMkM7QUFDM0MsMkNBQW9EO0FBVXBELE1BQU0sU0FBUyxHQUFHLE9BQU8sQ0FBQyxXQUFXLENBQUMsQ0FBQztBQUV2QyxNQUFNLFlBQVksR0FBRyxDQUFDLEdBQVEsRUFBVyxFQUFFO0lBQ3pDLE9BQU8sU0FBUyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLElBQUksT0FBTyxHQUFHLENBQUMsSUFBSSxLQUFLLFVBQVUsSUFBSSxPQUFPLEdBQUcsQ0FBQyxXQUFXLEtBQUssVUFBVSxDQUFDO0FBQ3BILENBQUMsQ0FBQztBQUVGLE1BQU0sWUFBWSxHQUFHLFFBQVEsQ0FBQyxLQUFLLENBQUM7QUFFcEMsTUFBTSxhQUFhLEdBQWdCLElBQUksR0FBRyxDQUFDO0lBQ3pDLE1BQU07SUFDTixPQUFPO0lBQ1AsTUFBTTtJQUNOLFFBQVE7SUFDUixNQUFNO0lBQ04sZUFBZTtJQUNmLFlBQVk7SUFDWixXQUFXO0lBQ1gsYUFBYTtJQUNiLFdBQVc7SUFDWCxnQkFBZ0I7SUFDaEIsYUFBYTtJQUNiLFlBQVk7SUFDWixZQUFZO0lBQ1oscUJBQXFCO0lBQ3JCLGtCQUFrQjtJQUNsQixpQkFBaUI7SUFDakIsaUJBQWlCO0lBQ2pCLGVBQWU7SUFDZixNQUFNO0lBQ04sa0JBQWtCO0lBQ2xCLFdBQVc7Q0FDWixDQUFDLENBQUM7QUFrREgsU0FBUyxTQUFTLENBQUMsSUFBUyxFQUFFLEtBQVUsRUFBRSxPQUFlO0lBQ3ZE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cnQgKiBhcyB0eXBlcyBmcm9tICdiaXRjb2luanMtbGliL3NyYy90eXBlcyc7XG5pbXBvcnQgeyBhZGRyZXNzIGFzIGJhZGRyZXNzLCBwMnRyUGF5bWVudHMgfSBmcm9tICcuLyc7XG5pbXBvcnQgKiBhcyBidWZmZXJ1dGlscyBmcm9tICdiaXRjb2luanMtbGliL3NyYy9idWZmZXJ1dGlscyc7XG5pbXBvcnQgKiBhcyBjbGFzc2lmeSBmcm9tICcuL2NsYXNzaWZ5JztcbmltcG9ydCB7IGNyeXB0byBhcyBiY3J5cHRvIH0gZnJvbSAnLi8nO1xuaW1wb3J0IHsgbmV0d29ya3MgfSBmcm9tICcuLyc7XG5pbXBvcnQgeyBOZXR3b3JrIH0gZnJvbSAnLi8nO1xuaW1wb3J0IHsgcGF5bWVudHMgfSBmcm9tICcuLyc7XG5pbXBvcnQgeyBQYXltZW50IH0gZnJvbSAnLi8nO1xuaW1wb3J0IHsgc2NyaXB0IGFzIGJzY3JpcHQgfSBmcm9tICcuLyc7XG5pbXBvcnQgeyBvcGNvZGVzIGFzIG9wcyB9IGZyb20gJy4vJztcbmltcG9ydCB7IHRhcHJvb3QgfSBmcm9tICcuLyc7XG5pbXBvcnQgeyBUeE91dHB1dCwgVHJhbnNhY3Rpb24gfSBmcm9tICcuLyc7XG5pbXBvcnQgeyBFQ1BhaXIsIGVjYyBhcyBlY2NMaWIgfSBmcm9tICcuL25vYmxlX2VjYyc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgU2lnbmVyIHtcbiAgcHJpdmF0ZUtleT86IEJ1ZmZlcjtcbiAgcHVibGljS2V5OiBCdWZmZXI7XG4gIGdldFB1YmxpY0tleT8oKTogQnVmZmVyO1xuICBzaWduKGhhc2g6IEJ1ZmZlciwgbG93Uj86IGJvb2xlYW4pOiBCdWZmZXI7XG4gIHNpZ25TY2hub3JyKGhhc2g6IEJ1ZmZlcik6IEJ1ZmZlcjtcbn1cblxuY29uc3QgdHlwZWZvcmNlID0gcmVxdWlyZSgndHlwZWZvcmNlJyk7XG5cbmNvbnN0IHRmRnVsbFNpZ25lciA9IChvYmo6IGFueSk6IGJvb2xlYW4gPT4ge1xuICByZXR1cm4gdHlwZWZvcmNlLkJ1ZmZlcihvYmoucHVibGljS2V5KSAmJiB0eXBlb2Ygb2JqLnNpZ24gPT09ICdmdW5jdGlvbicgJiYgdHlwZW9mIG9iai5zaWduU2Nobm9yciA9PT0gJ2Z1bmN0aW9uJztcbn07XG5cbmNvbnN0IFNDUklQVF9UWVBFUyA9IGNsYXNzaWZ5LnR5cGVzO1xuXG5jb25zdCBQUkVWT1VUX1RZUEVTOiBTZXQ8c3RyaW5nPiA9IG5ldyBTZXQoW1xuICAvLyBSYXdcbiAgJ3AycGtoJyxcbiAgJ3AycGsnLFxuICAncDJ3cGtoJyxcbiAgJ3AybXMnLFxuICAvLyBQMlNIIHdyYXBwZWRcbiAgJ3Ayc2gtcDJwa2gnLFxuICAncDJzaC1wMnBrJyxcbiAgJ3Ayc2gtcDJ3cGtoJyxcbiAgJ3Ayc2gtcDJtcycsXG4gIC8vIFAyV1NIIHdyYXBwZWRcbiAgJ3Ayd3NoLXAycGtoJyxcbiAgJ3Ayd3NoLXAycGsnLFxuICAncDJ3c2gtcDJtcycsXG4gIC8vIFAyU0gtUDJXU0ggd3JhcHBlclxuICAncDJzaC1wMndzaC1wMnBraCcsXG4gICdwMnNoLXAyd3NoLXAycGsnLFxuICAncDJzaC1wMndzaC1wMm1zJyxcbiAgLy8gUDJUUiBLZXlQYXRoXG4gICdwMnRyJyxcbiAgLy8gUDJUUiBTY3JpcHRQYXRoXG4gICdwMnRyLXAybnMnLFxuXSk7XG5cbnR5cGUgTWF5YmVCdWZmZXIgPSBCdWZmZXIgfCB1bmRlZmluZWQ7XG50eXBlIFR4YlNpZ25hdHVyZXMgPSBCdWZmZXJbXSB8IE1heWJlQnVmZmVyW107XG50eXBlIFR4YlB1YmtleXMgPSBNYXliZUJ1ZmZlcltdO1xudHlwZSBUeGJXaXRuZXNzID0gQnVmZmVyW107XG50eXBlIFR4YlNjcmlwdFR5cGUgPSBzdHJpbmc7XG50eXBlIFR4YlNjcmlwdCA9IEJ1ZmZlcjtcblxuaW50ZXJmYWNlIFR4YklucHV0PFROdW1iZXIgZXh0ZW5kcyBudW1iZXIgfCBiaWdpbnQgPSBudW1iZXI+IHtcbiAgdmFsdWU/OiBUTnVtYmVyO1xuICB3aXRuZXNzVmVyc2lvbj86IG51bWJlcjtcbiAgc2lnblNjcmlwdD86IFR4YlNjcmlwdDtcbiAgc2lnblR5cGU/OiBUeGJTY3JpcHRUeXBlO1xuICBwcmV2T3V0U2NyaXB0PzogVHhiU2NyaXB0O1xuICByZWRlZW1TY3JpcHQ/OiBUeGJTY3JpcHQ7XG4gIHJlZGVlbVNjcmlwdFR5cGU/OiBUeGJTY3JpcHRUeXBlO1xuICBwcmV2T3V0VHlwZT86IFR4YlNjcmlwdFR5cGU7XG4gIHB1YmtleXM/OiBUeGJQdWJrZXlzO1xuICBzaWduYXR1cmVzPzogVHhiU2lnbmF0dXJlcztcbiAgd2l0bmVzcz86IFR4YldpdG5lc3M7XG4gIHdpdG5lc3NTY3JpcHQ/OiBUeGJTY3JpcHQ7XG4gIHdpdG5lc3NTY3JpcHRUeXBlPzogVHhiU2NyaXB0VHlwZTtcbiAgY29udHJvbEJsb2NrPzogQnVmZmVyO1xuICBhbm5leD86IEJ1ZmZlcjtcbiAgc2NyaXB0PzogVHhiU2NyaXB0O1xuICBzZXF1ZW5jZT86IG51bWJlcjtcbiAgc2NyaXB0U2lnPzogVHhiU2NyaXB0O1xuICBtYXhTaWduYXR1cmVzPzogbnVtYmVyO1xufVxuXG5pbnRlcmZhY2UgVHhiT3V0cHV0IHtcbiAgdHlwZTogc3RyaW5nO1xuICBwdWJrZXlzPzogVHhiUHVia2V5cztcbiAgc2lnbmF0dXJlcz86IFR4YlNpZ25hdHVyZXM7XG4gIG1heFNpZ25hdHVyZXM/OiBudW1iZXI7XG59XG5cbmludGVyZmFjZSBUeGJTaWduQXJnPFROdW1iZXIgZXh0ZW5kcyBudW1iZXIgfCBiaWdpbnQgPSBudW1iZXI+IHtcbiAgcHJldk91dFNjcmlwdFR5cGU6IHN0cmluZztcbiAgdmluOiBudW1iZXI7XG4gIGtleVBhaXI6IFNpZ25lcjtcbiAgcmVkZWVtU2NyaXB0PzogQnVmZmVyO1xuICBoYXNoVHlwZT86IG51bWJlcjtcbiAgd2l0bmVzc1ZhbHVlPzogVE51bWJlcjtcbiAgd2l0bmVzc1NjcmlwdD86IEJ1ZmZlcjtcbiAgY29udHJvbEJsb2NrPzogQnVmZmVyO1xuICBhbm5leD86IEJ1ZmZlcjtcbn1cblxuZnVuY3Rpb24gdGZNZXNzYWdlKHR5cGU6IGFueSwgdmFsdWU6IGFueSwgbWVzc2FnZTogc3RyaW5nKTogdm9pZCB7XG4gIHRyeSB7XG4gICAgdHlwZWZvcmNlKHR5cGUsIHZhbHVlKTtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKG1lc3NhZ2UpO1xuICB9XG59XG5cbmZ1bmN0aW9uIHR4SXNTdHJpbmc8VE51bWJlciBleHRlbmRzIG51bWJlciB8IGJpZ2ludCA9IG51bWJlcj4oXG4gIHR4OiBCdWZmZXIgfCBzdHJpbmcgfCBUcmFuc2FjdGlvbjxUTnVtYmVyPlxuKTogdHggaXMgc3RyaW5nIHtcbiAgcmV0dXJuIHR5cGVvZiB0eCA9PT0gJ3N0cmluZycgfHwgdHggaW5zdGFuY2VvZiBTdHJpbmc7XG59XG5cbmZ1bmN0aW9uIHR4SXNUcmFuc2FjdGlvbjxUTnVtYmVyIGV4dGVuZHMgbnVtYmVyIHwgYmlnaW50ID0gbnVtYmVyPihcbiAgdHg6IEJ1ZmZlciB8IHN0cmluZyB8IFRyYW5zYWN0aW9uPFROdW1iZXI+XG4pOiB0eCBpcyBUcmFuc2FjdGlvbjxUTnVtYmVyPiB7XG4gIHJldHVybiB0eCBpbnN0YW5jZW9mIFRyYW5zYWN0aW9uO1xufVxuXG5leHBvcnQgY2xhc3MgVHJhbnNhY3Rpb25CdWlsZGVyPFROdW1iZXIgZXh0ZW5kcyBudW1iZXIgfCBiaWdpbnQgPSBudW1iZXI+IHtcbiAgc3RhdGljIGZyb21UcmFuc2FjdGlvbjxUTnVtYmVyIGV4dGVuZHMgbnVtYmVyIHwgYmlnaW50ID0gbnVtYmVyPihcbiAgICB0cmFuc2FjdGlvbjogVHJhbnNhY3Rpb248VE51bWJlcj4sXG4gICAgbmV0d29yaz86IE5ldHdvcmssXG4gICAgcHJldk91dHB1dHM/OiBUeE91dHB1dDxUTnVtYmVyPltdXG4gICk6IFRyYW5zYWN0aW9uQnVpbGRlcjxUTnVtYmVyPiB7XG4gICAgY29uc3QgdHhiID0gbmV3IFRyYW5zYWN0aW9uQnVpbGRlcjxUTnVtYmVyPihuZXR3b3JrKTtcblxuICAgIC8vIENvcHkgdHJhbnNhY3Rpb24gZmllbGRzXG4gICAgdHhiLnNldFZlcnNpb24odHJhbnNhY3Rpb24udmVyc2lvbik7XG4gICAgdHhiLnNldExvY2tUaW1lKHRyYW5zYWN0aW9uLmxvY2t0aW1lKTtcblxuICAgIC8vIENvcHkgb3V0cHV0cyAoZG9uZSBmaXJzdCB0byBhdm9pZCBzaWduYXR1cmUgaW52YWxpZGF0aW9uKVxuICAgIHRyYW5zYWN0aW9uLm91dHMuZm9yRWFjaCgodHhPdXQpID0+IHtcbiAgICAgIHR4Yi5hZGRPdXRwdXQodHhPdXQuc2NyaXB0LCAodHhPdXQgYXMgVHhPdXRwdXQ8VE51bWJlcj4pLnZhbHVlKTtcbiAgICB9KTtcblxuICAgIC8vIENvcHkgaW5wdXRzXG4gICAgdHJhbnNhY3Rpb24uaW5zLmZvckVhY2goKHR4SW4pID0+IHtcbiAgICAgIHR4Yi5fX2FkZElucHV0VW5zYWZlKHR4SW4uaGFzaCwgdHhJbi5pbmRleCwge1xuICAgICAgICBzZXF1ZW5jZTogdHhJbi5zZXF1ZW5jZSxcbiAgICAgICAgc2NyaXB0OiB0eEluLnNjcmlwdCxcbiAgICAgICAgd2l0bmVzczogdHhJbi53aXRuZXNzLFxuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICAvLyBmaXggc29tZSB0aGluZ3Mgbm90IHBvc3NpYmxlIHRocm91Z2ggdGhlIHB1YmxpYyBBUElcbiAgICB0eGIuX19JTlBVVFMuZm9yRWFjaCgoaW5wdXQsIGkpID0+IHtcbiAgICAgIGZpeE11bHRpc2lnT3JkZXI8VE51bWJlcj4oaW5wdXQsIHRyYW5zYWN0aW9uLCBpLCBwcmV2T3V0cHV0cyk7XG4gICAgfSk7XG5cbiAgICByZXR1cm4gdHhiO1xuICB9XG5cbiAgcHJpdmF0ZSBfX1BSRVZfVFhfU0VUOiB7IFtpbmRleDogc3RyaW5nXTogYm9vbGVhbiB9O1xuICBwcml2YXRlIF9fSU5QVVRTOiBBcnJheTxUeGJJbnB1dDxUTnVtYmVyPj47XG4gIHByaXZhdGUgX19UWDogVHJhbnNhY3Rpb248VE51bWJlcj47XG4gIHByaXZhdGUgX19VU0VfTE9XX1I6IGJvb2xlYW47XG5cbiAgLy8gV0FSTklORzogbWF4aW11bUZlZVJhdGUgaXMgX19OT1RfXyB0byBiZSByZWxpZWQgb24sXG4gIC8vICAgICAgICAgIGl0J3MganVzdCBhbm90aGVyIHBvdGVudGlhbCBzYWZldHkgbWVjaGFuaXNtIChzYWZldHkgaW4tZGVwdGgpXG4gIGNvbnN0cnVjdG9yKHB1YmxpYyBuZXR3b3JrOiBOZXR3b3JrID0gbmV0d29ya3MuYml0Y29pbiwgcHVibGljIG1heGltdW1GZWVSYXRlOiBudW1iZXIgPSAyNTAwKSB7XG4gICAgdGhpcy5fX1BSRVZfVFhfU0VUID0ge307XG4gICAgdGhpcy5fX0lOUFVUUyA9IFtdO1xuICAgIHRoaXMuX19UWCA9IG5ldyBUcmFuc2FjdGlvbjxUTnVtYmVyPigpO1xuICAgIHRoaXMuX19UWC52ZXJzaW9uID0gMjtcbiAgICB0aGlzLl9fVVNFX0xPV19SID0gZmFsc2U7XG4gICAgY29uc29sZS53YXJuKFxuICAgICAgJ0RlcHJlY2F0aW9uIFdhcm5pbmc6IFRyYW5zYWN0aW9uQnVpbGRlciB3aWxsIGJlIHJlbW92ZWQgaW4gdGhlIGZ1dHVyZS4gJyArXG4gICAgICAgICcodjYueC54IG9yIGxhdGVyKSBQbGVhc2UgdXNlIHRoZSBQc2J0IGNsYXNzIGluc3RlYWQuIEV4YW1wbGVzIG9mIHVzYWdlICcgK1xuICAgICAgICAnYXJlIGF2YWlsYWJsZSBpbiB0aGUgdHJhbnNhY3Rpb25zLXBzYnQuanMgaW50ZWdyYXRpb24gdGVzdCBmaWxlIG9uIG91ciAnICtcbiAgICAgICAgJ0dpdGh1Yi4gQSBoaWdoIGxldmVsIGV4cGxhbmF0aW9uIGlzIGF2YWlsYWJsZSBpbiB0aGUgcHNidC50cyBhbmQgcHNidC5qcyAnICtcbiAgICAgICAgJ2ZpbGVzIGFzIHdlbGwuJ1xuICAgICk7XG4gIH1cblxuICBzZXRMb3dSKHNldHRpbmc/OiBib29sZWFuKTogYm9vbGVhbiB7XG4gICAgdHlwZWZvcmNlKHR5cGVmb3JjZS5tYXliZSh0eXBlZm9yY2UuQm9vbGVhbiksIHNldHRpbmcpO1xuICAgIGlmIChzZXR0aW5nID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHNldHRpbmcgPSB0cnVlO1xuICAgIH1cbiAgICB0aGlzLl9fVVNFX0xPV19SID0gc2V0dGluZztcbiAgICByZXR1cm4gc2V0dGluZztcbiAgfVxuXG4gIHNldExvY2tUaW1lKGxvY2t0aW1lOiBudW1iZXIpOiB2b2lkIHtcbiAgICB0eXBlZm9yY2UodHlwZXMuVUludDMyLCBsb2NrdGltZSk7XG5cbiAgICAvLyBpZiBhbnkgc2lnbmF0dXJlcyBleGlzdCwgdGhyb3dcbiAgICBpZiAoXG4gICAgICB0aGlzLl9fSU5QVVRTLnNvbWUoKGlucHV0KSA9PiB7XG4gICAgICAgIGlmICghaW5wdXQuc2lnbmF0dXJlcykgcmV0dXJuIGZhbHNlO1xuXG4gICAgICAgIHJldHVybiBpbnB1dC5zaWduYXR1cmVzLnNvbWUoKHMpID0+IHMgIT09IHVuZGVmaW5lZCk7XG4gICAgICB9KVxuICAgICkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdObywgdGhpcyB3b3VsZCBpbnZhbGlkYXRlIHNpZ25hdHVyZXMnKTtcbiAgICB9XG5cbiAgICB0aGlzLl9fVFgubG9ja3RpbWUgPSBsb2NrdGltZTtcbiAgfVxuXG4gIHNldFZlcnNpb24odmVyc2lvbjogbnVtYmVyKTogdm9pZCB7XG4gICAgdHlwZWZvcmNlKHR5cGVzLlVJbnQzMiwgdmVyc2lvbik7XG5cbiAgICAvLyBYWFg6IHRoaXMgbWlnaHQgZXZlbnR1YWxseSBiZWNvbWUgbW9yZSBjb21wbGV4IGRlcGVuZGluZyBvbiB3aGF0IHRoZSB2ZXJzaW9ucyByZXByZXNlbnRcbiAgICB0aGlzLl9fVFgudmVyc2lvbiA9IHZlcnNpb247XG4gIH1cblxuICBhZGRJbnB1dChcbiAgICB0eEhhc2g6IEJ1ZmZlciB8IHN0cmluZyB8IFRyYW5zYWN0aW9uPFROdW1iZXI+LFxuICAgIHZvdXQ6IG51bWJlcixcbiAgICBzZXF1ZW5jZT86IG51bWJlcixcbiAgICBwcmV2T3V0U2NyaXB0PzogQnVmZmVyLFxuICAgIHZhbHVlPzogVE51bWJlclxuICApOiBudW1iZXIge1xuICAgIGlmICghdGhpcy5fX2Nhbk1vZGlmeUlucHV0cygpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ05vLCB0aGlzIHdvdWxkIGludmFsaWRhdGUgc2lnbmF0dXJlcycpO1xuICAgIH1cblxuICAgIC8vIGlzIGl0IGEgaGV4IHN0cmluZz9cbiAgICBpZiAodHhJc1N0cmluZyh0eEhhc2gpKSB7XG4gICAgICAvLyB0cmFuc2FjdGlvbiBoYXNocydzIGFyZSBkaXNwbGF5ZWQgaW4gcmV2ZXJzZSBvcmRlciwgdW4tcmV2ZXJzZSBpdFxuICAgICAgdHhIYXNoID0gYnVmZmVydXRpbHMucmV2ZXJzZUJ1ZmZlcihCdWZmZXIuZnJvbSh0eEhhc2gsICdoZXgnKSk7XG5cbiAgICAgIC8vIGlzIGl0IGEgVHJhbnNhY3Rpb24gb2JqZWN0P1xuICAgIH0gZWxzZSBpZiAodHhJc1RyYW5zYWN0aW9uKHR4SGFzaCkpIHtcbiAgICAgIGNvbnN0IHR4T3V0ID0gdHhIYXNoLm91dHNbdm91dF07XG4gICAgICBwcmV2T3V0U2NyaXB0ID0gdHhPdXQuc2NyaXB0O1xuICAgICAgdmFsdWUgPSAodHhPdXQgYXMgVHhPdXRwdXQ8VE51bWJlcj4pLnZhbHVlO1xuXG4gICAgICB0eEhhc2ggPSB0eEhhc2guZ2V0SGFzaChmYWxzZSkgYXMgQnVmZmVyO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLl9fYWRkSW5wdXRVbnNhZmUodHhIYXNoLCB2b3V0LCB7XG4gICAgICBzZXF1ZW5jZSxcbiAgICAgIHByZXZPdXRTY3JpcHQsXG4gICAgICB2YWx1ZSxcbiAgICB9KTtcbiAgfVxuXG4gIGFkZE91dHB1dChzY3JpcHRQdWJLZXk6IHN0cmluZyB8IEJ1ZmZlciwgdmFsdWU6IFROdW1iZXIpOiBudW1iZXIge1xuICAgIGlmICghdGhpcy5fX2Nhbk1vZGlmeU91dHB1dHMoKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdObywgdGhpcyB3b3VsZCBpbnZhbGlkYXRlIHNpZ25hdHVyZXMnKTtcbiAgICB9XG5cbiAgICAvLyBBdHRlbXB0IHRvIGdldCBhIHNjcmlwdCBpZiBpdCdzIGEgYmFzZTU4IG9yIGJlY2gzMiBhZGRyZXNzIHN0cmluZ1xuICAgIGlmICh0eXBlb2Ygc2NyaXB0UHViS2V5ID09PSAnc3RyaW5nJykge1xuICAgICAgc2NyaXB0UHViS2V5ID0gYmFkZHJlc3MudG9PdXRwdXRTY3JpcHQoc2NyaXB0UHViS2V5LCB0aGlzLm5ldHdvcmspO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLl9fVFguYWRkT3V0cHV0KHNjcmlwdFB1YktleSwgdmFsdWUpO1xuICB9XG5cbiAgYnVpbGQoKTogVHJhbnNhY3Rpb248VE51bWJlcj4ge1xuICAgIHJldHVybiB0aGlzLl9fYnVpbGQoZmFsc2UpO1xuICB9XG5cbiAgYnVpbGRJbmNvbXBsZXRlKCk6IFRyYW5zYWN0aW9uPFROdW1iZXI+IHtcbiAgICByZXR1cm4gdGhpcy5fX2J1aWxkKHRydWUpO1xuICB9XG5cbiAgc2lnbihcbiAgICBzaWduUGFyYW1zOiBudW1iZXIgfCBUeGJTaWduQXJnPFROdW1iZXI+LFxuICAgIGtleVBhaXI/OiBTaWduZXIsXG4gICAgcmVkZWVtU2NyaXB0PzogQnVmZmVyLFxuICAgIGhhc2hUeXBlPzogbnVtYmVyLFxuICAgIHdpdG5lc3NWYWx1ZT86IFROdW1iZXIsXG4gICAgd2l0bmVzc1NjcmlwdD86IEJ1ZmZlcixcbiAgICBjb250cm9sQmxvY2s/OiBCdWZmZXIsXG4gICAgYW5uZXg/OiBCdWZmZXJcbiAgKTogdm9pZCB7XG4gICAgdHJ5U2lnbjxUTnVtYmVyPihcbiAgICAgIGdldFNpZ25pbmdEYXRhPFROdW1iZXI+KFxuICAgICAgICB0aGlzLm5ldHdvcmssXG4gICAgICAgIHRoaXMuX19JTlBVVFMsXG4gICAgICAgIHRoaXMuX19uZWVkc091dHB1dHMuYmluZCh0aGlzKSxcbiAgICAgICAgdGhpcy5fX1RYLFxuICAgICAgICBzaWduUGFyYW1zLFxuICAgICAgICBrZXlQYWlyLFxuICAgICAgICByZWRlZW1TY3JpcHQsXG4gICAgICAgIGhhc2hUeXBlLFxuICAgICAgICB3aXRuZXNzVmFsdWUsXG4gICAgICAgIHdpdG5lc3NTY3JpcHQsXG4gICAgICAgIGNvbnRyb2xCbG9jayxcbiAgICAgICAgYW5uZXgsXG4gICAgICAgIHRoaXMuX19VU0VfTE9XX1JcbiAgICAgIClcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBfX2FkZElucHV0VW5zYWZlKHR4SGFzaDogQnVmZmVyLCB2b3V0OiBudW1iZXIsIG9wdGlvbnM6IFR4YklucHV0PFROdW1iZXI+KTogbnVtYmVyIHtcbiAgICBpZiAoVHJhbnNhY3Rpb24uaXNDb2luYmFzZUhhc2godHhIYXNoKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdjb2luYmFzZSBpbnB1dHMgbm90IHN1cHBvcnRlZCcpO1xuICAgIH1cblxuICAgIGNvbnN0IHByZXZUeE91dCA9IHR4SGFzaC50b1N0cmluZygnaGV4JykgKyAnOicgKyB2b3V0O1xuICAgIGlmICh0aGlzLl9fUFJFVl9UWF9TRVRbcHJldlR4T3V0XSAhPT0gdW5kZWZpbmVkKSB0aHJvdyBuZXcgRXJyb3IoJ0R1cGxpY2F0ZSBUeE91dDogJyArIHByZXZUeE91dCk7XG5cbiAgICBsZXQgaW5wdXQ6IFR4YklucHV0PFROdW1iZXI+ID0ge307XG5cbiAgICAvLyBkZXJpdmUgd2hhdCB3ZSBjYW4gZnJvbSB0aGUgc2NyaXB0U2lnXG4gICAgaWYgKG9wdGlvbnMuc2NyaXB0ICE9PSB1bmRlZmluZWQgfHwgb3B0aW9ucy53aXRuZXNzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGlucHV0ID0gZXhwYW5kSW5wdXQ8VE51bWJlcj4ob3B0aW9ucy5zY3JpcHQsIG9wdGlvbnMud2l0bmVzcyk7XG4gICAgfVxuXG4gICAgLy8gaWYgYW4gaW5wdXQgdmFsdWUgd2FzIGdpdmVuLCByZXRhaW4gaXRcbiAgICBpZiAob3B0aW9ucy52YWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBpbnB1dC52YWx1ZSA9IG9wdGlvbnMudmFsdWU7XG4gICAgfVxuXG4gICAgLy8gZGVyaXZlIHdoYXQgd2UgY2FuIGZyb20gdGhlIHByZXZpb3VzIHRyYW5zYWN0aW9ucyBvdXRwdXQgc2NyaXB0XG4gICAgaWYgKCFpbnB1dC5wcmV2T3V0U2NyaXB0ICYmIG9wdGlvbnMucHJldk91dFNjcmlwdCkge1xuICAgICAgbGV0IHByZXZPdXRUeXBlO1xuXG4gICAgICBpZiAoIWlucHV0LnB1YmtleXMgJiYgIWlucHV0LnNpZ25hdHVyZXMpIHtcbiAgICAgICAgY29uc3QgZXhwYW5kZWQgPSBleHBhbmRPdXRwdXQob3B0aW9ucy5wcmV2T3V0U2NyaXB0KTtcbiAgICAgICAgaWYgKGV4cGFuZGVkLnB1YmtleXMpIHtcbiAgICAgICAgICBpbnB1dC5wdWJrZXlzID0gZXhwYW5kZWQucHVia2V5cztcbiAgICAgICAgICBpbnB1dC5zaWduYXR1cmVzID0gZXhwYW5kZWQuc2lnbmF0dXJlcztcbiAgICAgICAgfVxuXG4gICAgICAgIHByZXZPdXRUeXBlID0gZXhwYW5kZWQudHlwZTtcbiAgICAgIH1cblxuICAgICAgaW5wdXQucHJldk91dFNjcmlwdCA9IG9wdGlvbnMucHJldk91dFNjcmlwdDtcbiAgICAgIGlucHV0LnByZXZPdXRUeXBlID0gcHJldk91dFR5cGUgfHwgY2xhc3NpZnkub3V0cHV0KG9wdGlvbnMucHJldk91dFNjcmlwdCk7XG4gICAgfVxuXG4gICAgY29uc3QgdmluID0gdGhpcy5fX1RYLmFkZElucHV0KHR4SGFzaCwgdm91dCwgb3B0aW9ucy5zZXF1ZW5jZSwgb3B0aW9ucy5zY3JpcHRTaWcpO1xuICAgIHRoaXMuX19JTlBVVFNbdmluXSA9IGlucHV0O1xuICAgIHRoaXMuX19QUkVWX1RYX1NFVFtwcmV2VHhPdXRdID0gdHJ1ZTtcbiAgICByZXR1cm4gdmluO1xuICB9XG5cbiAgcHJpdmF0ZSBfX2J1aWxkKGFsbG93SW5jb21wbGV0ZT86IGJvb2xlYW4pOiBUcmFuc2FjdGlvbjxUTnVtYmVyPiB7XG4gICAgaWYgKCFhbGxvd0luY29tcGxldGUpIHtcbiAgICAgIGlmICghdGhpcy5fX1RYLmlucy5sZW5ndGgpIHRocm93IG5ldyBFcnJvcignVHJhbnNhY3Rpb24gaGFzIG5vIGlucHV0cycpO1xuICAgICAgaWYgKCF0aGlzLl9fVFgub3V0cy5sZW5ndGgpIHRocm93IG5ldyBFcnJvcignVHJhbnNhY3Rpb24gaGFzIG5vIG91dHB1dHMnKTtcbiAgICB9XG5cbiAgICBjb25zdCB0eCA9IHRoaXMuX19UWC5jbG9uZSgpO1xuXG4gICAgLy8gY3JlYXRlIHNjcmlwdCBzaWduYXR1cmVzIGZyb20gaW5wdXRzXG4gICAgdGhpcy5fX0lOUFVUUy5mb3JFYWNoKChpbnB1dCwgaSkgPT4ge1xuICAgICAgaWYgKCFpbnB1dC5wcmV2T3V0VHlwZSAmJiAhYWxsb3dJbmNvbXBsZXRlKSB0aHJvdyBuZXcgRXJyb3IoJ1RyYW5zYWN0aW9uIGlzIG5vdCBjb21wbGV0ZScpO1xuXG4gICAgICBjb25zdCByZXN1bHQgPSBidWlsZDxUTnVtYmVyPihpbnB1dC5wcmV2T3V0VHlwZSEsIGlucHV0LCBhbGxvd0luY29tcGxldGUpO1xuICAgICAgaWYgKCFyZXN1bHQpIHtcbiAgICAgICAgaWYgKCFhbGxvd0luY29tcGxldGUgJiYgaW5wdXQucHJldk91dFR5cGUgPT09IFNDUklQVF9UWVBFUy5OT05TVEFOREFSRCkgdGhyb3cgbmV3IEVycm9yKCdVbmtub3duIGlucHV0IHR5cGUnKTtcbiAgICAgICAgaWYgKCFhbGxvd0luY29tcGxldGUpIHRocm93IG5ldyBFcnJvcignTm90IGVub3VnaCBpbmZvcm1hdGlvbicpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGlmIChyZXN1bHQuaW5wdXQpIHtcbiAgICAgICAgdHguc2V0SW5wdXRTY3JpcHQoaSwgcmVzdWx0LmlucHV0KTtcbiAgICAgIH1cbiAgICAgIHR4LnNldFdpdG5lc3MoaSwgcmVzdWx0LndpdG5lc3MhKTtcbiAgICB9KTtcblxuICAgIGlmICghYWxsb3dJbmNvbXBsZXRlKSB7XG4gICAgICAvLyBkbyBub3QgcmVseSBvbiB0aGlzLCBpdHMgbWVyZWx5IGEgbGFzdCByZXNvcnRcbiAgICAgIGlmICh0aGlzLl9fb3Zlck1heGltdW1GZWVzKHR4LnZpcnR1YWxTaXplKCkpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignVHJhbnNhY3Rpb24gaGFzIGFic3VyZCBmZWVzJyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHR4O1xuICB9XG5cbiAgcHJpdmF0ZSBfX2Nhbk1vZGlmeUlucHV0cygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5fX0lOUFVUUy5ldmVyeSgoaW5wdXQpID0+IHtcbiAgICAgIGlmICghaW5wdXQuc2lnbmF0dXJlcykgcmV0dXJuIHRydWU7XG5cbiAgICAgIHJldHVybiBpbnB1dC5zaWduYXR1cmVzLmV2ZXJ5KChzaWduYXR1cmUpID0+IHtcbiAgICAgICAgaWYgKCFzaWduYXR1cmUpIHJldHVybiB0cnVlO1xuICAgICAgICBjb25zdCBoYXNoVHlwZSA9IHNpZ25hdHVyZUhhc2hUeXBlKHNpZ25hdHVyZSk7XG5cbiAgICAgICAgLy8gaWYgU0lHSEFTSF9BTllPTkVDQU5QQVkgaXMgc2V0LCBzaWduYXR1cmVzIHdvdWxkIG5vdFxuICAgICAgICAvLyBiZSBpbnZhbGlkYXRlZCBieSBtb3JlIGlucHV0c1xuICAgICAgICByZXR1cm4gKGhhc2hUeXBlICYgVHJhbnNhY3Rpb24uU0lHSEFTSF9BTllPTkVDQU5QQVkpICE9PSAwO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIF9fbmVlZHNPdXRwdXRzKHNpZ25pbmdIYXNoVHlwZTogbnVtYmVyKTogYm9vbGVhbiB7XG4gICAgaWYgKHNpZ25pbmdIYXNoVHlwZSA9PT0gVHJhbnNhY3Rpb24uU0lHSEFTSF9BTEwgfHwgc2lnbmluZ0hhc2hUeXBlID09PSBUcmFuc2FjdGlvbi5TSUdIQVNIX0RFRkFVTFQpIHtcbiAgICAgIHJldHVybiB0aGlzLl9fVFgub3V0cy5sZW5ndGggPT09IDA7XG4gICAgfVxuXG4gICAgLy8gaWYgaW5wdXRzIGFyZSBiZWluZyBzaWduZWQgd2l0aCBTSUdIQVNIX05PTkUsIHdlIGRvbid0IHN0cmljdGx5IG5lZWQgb3V0cHV0c1xuICAgIC8vIC5idWlsZCgpIHdpbGwgZmFpbCwgYnV0IC5idWlsZEluY29tcGxldGUoKSBpcyBPS1xuICAgIHJldHVybiAoXG4gICAgICB0aGlzLl9fVFgub3V0cy5sZW5ndGggPT09IDAgJiZcbiAgICAgIHRoaXMuX19JTlBVVFMuc29tZSgoaW5wdXQpID0+IHtcbiAgICAgICAgaWYgKCFpbnB1dC5zaWduYXR1cmVzKSByZXR1cm4gZmFsc2U7XG5cbiAgICAgICAgcmV0dXJuIGlucHV0LnNpZ25hdHVyZXMuc29tZSgoc2lnbmF0dXJlKSA9PiB7XG4gICAgICAgICAgaWYgKCFzaWduYXR1cmUpIHJldHVybiBmYWxzZTsgLy8gbm8gc2lnbmF0dXJlLCBubyBpc3N1ZVxuICAgICAgICAgIGNvbnN0IGhhc2hUeXBlID0gc2lnbmF0dXJlSGFzaFR5cGUoc2lnbmF0dXJlKTtcbiAgICAgICAgICBpZiAoaGFzaFR5cGUgJiBUcmFuc2FjdGlvbi5TSUdIQVNIX05PTkUpIHJldHVybiBmYWxzZTsgLy8gU0lHSEFTSF9OT05FIGRvZXNuJ3QgY2FyZSBhYm91dCBvdXRwdXRzXG4gICAgICAgICAgcmV0dXJuIHRydWU7IC8vIFNJR0hBU0hfKiBkb2VzIGNhcmVcbiAgICAgICAgfSk7XG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIF9fY2FuTW9kaWZ5T3V0cHV0cygpOiBib29sZWFuIHtcbiAgICBjb25zdCBuSW5wdXRzID0gdGhpcy5fX1RYLmlucy5sZW5ndGg7XG4gICAgY29uc3Qgbk91dHB1dHMgPSB0aGlzLl9fVFgub3V0cy5sZW5ndGg7XG5cbiAgICByZXR1cm4gdGhpcy5fX0lOUFVUUy5ldmVyeSgoaW5wdXQpID0+IHtcbiAgICAgIGlmIChpbnB1dC5zaWduYXR1cmVzID09PSB1bmRlZmluZWQpIHJldHVybiB0cnVlO1xuXG4gICAgICByZXR1cm4gaW5wdXQuc2lnbmF0dXJlcy5ldmVyeSgoc2lnbmF0dXJlKSA9PiB7XG4gICAgICAgIGlmICghc2lnbmF0dXJlKSByZXR1cm4gdHJ1ZTtcbiAgICAgICAgY29uc3QgaGFzaFR5cGUgPSBzaWduYXR1cmVIYXNoVHlwZShzaWduYXR1cmUpO1xuXG4gICAgICAgIGNvbnN0IGhhc2hUeXBlTW9kID0gaGFzaFR5cGUgJiAweDFmO1xuICAgICAgICBpZiAoaGFzaFR5cGVNb2QgPT09IFRyYW5zYWN0aW9uLlNJR0hBU0hfTk9ORSkgcmV0dXJuIHRydWU7XG4gICAgICAgIGlmIChoYXNoVHlwZU1vZCA9PT0gVHJhbnNhY3Rpb24uU0lHSEFTSF9TSU5HTEUpIHtcbiAgICAgICAgICAvLyBpZiBTSUdIQVNIX1NJTkdMRSBpcyBzZXQsIGFuZCBuSW5wdXRzID4gbk91dHB1dHNcbiAgICAgICAgICAvLyBzb21lIHNpZ25hdHVyZXMgd291bGQgYmUgaW52YWxpZGF0ZWQgYnkgdGhlIGFkZGl0aW9uXG4gICAgICAgICAgLy8gb2YgbW9yZSBvdXRwdXRzXG4gICAgICAgICAgcmV0dXJuIG5JbnB1dHMgPD0gbk91dHB1dHM7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIF9fb3Zlck1heGltdW1GZWVzKGJ5dGVzOiBudW1iZXIpOiBib29sZWFuIHtcbiAgICAvLyBub3QgYWxsIGlucHV0cyB3aWxsIGhhdmUgLnZhbHVlIGRlZmluZWRcbiAgICBjb25zdCBpbmNvbWluZyA9IHRoaXMuX19JTlBVVFMucmVkdWNlKFxuICAgICAgKGEsIHgpID0+IGEgKyAodHlwZW9mIHgudmFsdWUgIT09ICd1bmRlZmluZWQnID8gQmlnSW50KHgudmFsdWUpIDogQmlnSW50KDApKSxcbiAgICAgIEJpZ0ludCgwKVxuICAgICk7XG5cbiAgICAvLyBidXQgYWxsIG91dHB1dHMgZG8sIGFuZCBpZiB3ZSBoYXZlIGFueSBpbnB1dCB2YWx1ZVxuICAgIC8vIHdlIGNhbiBpbW1lZGlhdGVseSBkZXRlcm1pbmUgaWYgdGhlIG91dHB1dHMgYXJlIHRvbyBzbWFsbFxuICAgIGNvbnN0IG91dGdvaW5nID0gdGhpcy5fX1RYLm91dHMucmVkdWNlKChhLCB4KSA9PiBhICsgQmlnSW50KCh4IGFzIFR4T3V0cHV0PFROdW1iZXI+KS52YWx1ZSksIEJpZ0ludCgwKSk7XG4gICAgY29uc3QgZmVlID0gaW5jb21pbmcgLSBvdXRnb2luZztcbiAgICBjb25zdCBmZWVSYXRlID0gTnVtYmVyKGZlZSkgLyBieXRlczsgLy8gYXNzdW1lIGZlZSBmaXRzIHdpdGhpbiBudW1iZXJcblxuICAgIHJldHVybiBmZWVSYXRlID4gdGhpcy5tYXhpbXVtRmVlUmF0ZTtcbiAgfVxufVxuXG5mdW5jdGlvbiBleHBhbmRJbnB1dDxUTnVtYmVyIGV4dGVuZHMgbnVtYmVyIHwgYmlnaW50ID0gbnVtYmVyPihcbiAgc2NyaXB0U2lnPzogQnVmZmVyLFxuICB3aXRuZXNzU3RhY2s6IEJ1ZmZlcltdID0gW10sXG4gIHR5cGU/OiBzdHJpbmcsXG4gIHNjcmlwdFB1YktleT86IEJ1ZmZlclxuKTogVHhiSW5wdXQ8VE51bWJlcj4ge1xuICBpZiAoc2NyaXB0U2lnICYmIHNjcmlwdFNpZy5sZW5ndGggPT09IDAgJiYgd2l0bmVzc1N0YWNrLmxlbmd0aCA9PT0gMCkgcmV0dXJuIHt9O1xuICBpZiAoIXR5cGUpIHtcbiAgICBsZXQgc3NUeXBlOiBzdHJpbmcgfCB1bmRlZmluZWQgPSBzY3JpcHRTaWcgPyBjbGFzc2lmeS5pbnB1dChzY3JpcHRTaWcsIHRydWUpIDogdW5kZWZpbmVkO1xuICAgIGxldCB3c1R5cGU6IHN0cmluZyB8IHVuZGVmaW5lZCA9IGNsYXNzaWZ5LndpdG5lc3Mod2l0bmVzc1N0YWNrLCB0cnVlKTtcbiAgICBpZiAoc3NUeXBlID09PSBTQ1JJUFRfVFlQRVMuTk9OU1RBTkRBUkQpIHNzVHlwZSA9IHVuZGVmaW5lZDtcbiAgICBpZiAod3NUeXBlID09PSBTQ1JJUFRfVFlQRVMuTk9OU1RBTkRBUkQpIHdzVHlwZSA9IHVuZGVmaW5lZDtcbiAgICB0eXBlID0gc3NUeXBlIHx8IHdzVHlwZTtcbiAgfVxuXG4gIHN3aXRjaCAodHlwZSkge1xuICAgIGNhc2UgU0NSSVBUX1RZUEVTLlAyV1BLSDoge1xuICAgICAgY29uc3QgeyBvdXRwdXQsIHB1YmtleSwgc2lnbmF0dXJlIH0gPSBwYXltZW50cy5wMndwa2goe1xuICAgICAgICB3aXRuZXNzOiB3aXRuZXNzU3RhY2ssXG4gICAgICB9KTtcblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgcHJldk91dFNjcmlwdDogb3V0cHV0LFxuICAgICAgICBwcmV2T3V0VHlwZTogU0NSSVBUX1RZUEVTLlAyV1BLSCxcbiAgICAgICAgcHVia2V5czogW3B1YmtleV0sXG4gICAgICAgIHNpZ25hdHVyZXM6IFtzaWduYXR1cmVdLFxuICAgICAgfTtcbiAgICB9XG5cbiAgICBjYXNlIFNDUklQVF9UWVBFUy5QMlBLSDoge1xuICAgICAgY29uc3QgeyBvdXRwdXQsIHB1YmtleSwgc2lnbmF0dXJlIH0gPSBwYXltZW50cy5wMnBraCh7XG4gICAgICAgIGlucHV0OiBzY3JpcHRTaWcsXG4gICAgICB9KTtcblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgcHJldk91dFNjcmlwdDogb3V0cHV0LFxuICAgICAgICBwcmV2T3V0VHlwZTogU0NSSVBUX1RZUEVTLlAyUEtILFxuICAgICAgICBwdWJrZXlzOiBbcHVia2V5XSxcbiAgICAgICAgc2lnbmF0dXJlczogW3NpZ25hdHVyZV0sXG4gICAgICB9O1xuICAgIH1cblxuICAgIGNhc2UgU0NSSVBUX1RZUEVTLlAyUEs6IHtcbiAgICAgIGNvbnN0IHsgc2lnbmF0dXJlIH0gPSBwYXltZW50cy5wMnBrKHsgaW5wdXQ6IHNjcmlwdFNpZyB9KTtcblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgcHJldk91dFR5cGU6IFNDUklQVF9UWVBFUy5QMlBLLFxuICAgICAgICBwdWJrZXlzOiBbdW5kZWZpbmVkXSxcbiAgICAgICAgc2lnbmF0dXJlczogW3NpZ25hdHVyZV0sXG4gICAgICB9O1xuICAgIH1cblxuICAgIGNhc2UgU0NSSVBUX1RZUEVTLlAyTVM6IHtcbiAgICAgIGNvbnN0IHsgbSwgcHVia2V5cywgc2lnbmF0dXJlcyB9ID0gcGF5bWVudHMucDJtcyhcbiAgICAgICAge1xuICAgICAgICAgIGlucHV0OiBzY3JpcHRTaWcsXG4gICAgICAgICAgb3V0cHV0OiBzY3JpcHRQdWJLZXksXG4gICAgICAgIH0sXG4gICAgICAgIHsgYWxsb3dJbmNvbXBsZXRlOiB0cnVlIH1cbiAgICAgICk7XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIHByZXZPdXRUeXBlOiBTQ1JJUFRfVFlQRVMuUDJNUyxcbiAgICAgICAgcHVia2V5cyxcbiAgICAgICAgc2lnbmF0dXJlcyxcbiAgICAgICAgbWF4U2lnbmF0dXJlczogbSxcbiAgICAgIH07XG4gICAgfVxuXG4gICAgY2FzZSBTQ1JJUFRfVFlQRVMuUDJUUl9OUzoge1xuICAgICAgY29uc3QgeyBuLCBwdWJrZXlzLCBzaWduYXR1cmVzIH0gPSBwMnRyUGF5bWVudHMucDJ0cl9ucyhcbiAgICAgICAge1xuICAgICAgICAgIC8vIFdpdG5lc3Mgc2lnbmF0dXJlcyBhcmUgcmV2ZXJzZSBvZiBwdWJrZXlzLCBiZWNhdXNlIGl0J3MgYSBzdGFja1xuICAgICAgICAgIHNpZ25hdHVyZXM6IHdpdG5lc3NTdGFjay5sZW5ndGggPyB3aXRuZXNzU3RhY2sucmV2ZXJzZSgpIDogdW5kZWZpbmVkLFxuICAgICAgICAgIG91dHB1dDogc2NyaXB0UHViS2V5LFxuICAgICAgICB9LFxuICAgICAgICB7IGFsbG93SW5jb21wbGV0ZTogdHJ1ZSwgZWNjTGliIH1cbiAgICAgICk7XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIHByZXZPdXRUeXBlOiBTQ1JJUFRfVFlQRVMuUDJUUl9OUyxcbiAgICAgICAgcHVia2V5cyxcbiAgICAgICAgc2lnbmF0dXJlcyxcbiAgICAgICAgbWF4U2lnbmF0dXJlczogbixcbiAgICAgIH07XG4gICAgfVxuICB9XG5cbiAgaWYgKHR5cGUgPT09IFNDUklQVF9UWVBFUy5QMlNIKSB7XG4gICAgY29uc3QgeyBvdXRwdXQsIHJlZGVlbSB9ID0gcGF5bWVudHMucDJzaCh7XG4gICAgICBpbnB1dDogc2NyaXB0U2lnLFxuICAgICAgd2l0bmVzczogd2l0bmVzc1N0YWNrLFxuICAgIH0pO1xuXG4gICAgY29uc3Qgb3V0cHV0VHlwZSA9IGNsYXNzaWZ5Lm91dHB1dChyZWRlZW0hLm91dHB1dCEpO1xuICAgIGNvbnN0IGV4cGFuZGVkID0gZXhwYW5kSW5wdXQ8VE51bWJlcj4ocmVkZWVtIS5pbnB1dCEsIHJlZGVlbSEud2l0bmVzcyEsIG91dHB1dFR5cGUsIHJlZGVlbSEub3V0cHV0KTtcbiAgICBpZiAoIWV4cGFuZGVkLnByZXZPdXRUeXBlKSByZXR1cm4ge307XG5cbiAgICByZXR1cm4ge1xuICAgICAgcHJldk91dFNjcmlwdDogb3V0cHV0LFxuICAgICAgcHJldk91dFR5cGU6IFNDUklQVF9UWVBFUy5QMlNILFxuICAgICAgcmVkZWVtU2NyaXB0OiByZWRlZW0hLm91dHB1dCxcbiAgICAgIHJlZGVlbVNjcmlwdFR5cGU6IGV4cGFuZGVkLnByZXZPdXRUeXBlLFxuICAgICAgd2l0bmVzc1NjcmlwdDogZXhwYW5kZWQud2l0bmVzc1NjcmlwdCxcbiAgICAgIHdpdG5lc3NTY3JpcHRUeXBlOiBleHBhbmRlZC53aXRuZXNzU2NyaXB0VHlwZSxcblxuICAgICAgcHVia2V5czogZXhwYW5kZWQucHVia2V5cyxcbiAgICAgIHNpZ25hdHVyZXM6IGV4cGFuZGVkLnNpZ25hdHVyZXMsXG4gICAgfTtcbiAgfVxuXG4gIGlmICh0eXBlID09PSBTQ1JJUFRfVFlQRVMuUDJXU0gpIHtcbiAgICBjb25zdCB7IG91dHB1dCwgcmVkZWVtIH0gPSBwYXltZW50cy5wMndzaCh7XG4gICAgICBpbnB1dDogc2NyaXB0U2lnLFxuICAgICAgd2l0bmVzczogd2l0bmVzc1N0YWNrLFxuICAgIH0pO1xuICAgIGNvbnN0IG91dHB1dFR5cGUgPSBjbGFzc2lmeS5vdXRwdXQocmVkZWVtIS5vdXRwdXQhKTtcbiAgICBsZXQgZXhwYW5kZWQ7XG4gICAgaWYgKG91dHB1dFR5cGUgPT09IFNDUklQVF9UWVBFUy5QMldQS0gpIHtcbiAgICAgIGV4cGFuZGVkID0gZXhwYW5kSW5wdXQ8VE51bWJlcj4ocmVkZWVtIS5pbnB1dCEsIHJlZGVlbSEud2l0bmVzcyEsIG91dHB1dFR5cGUpO1xuICAgIH0gZWxzZSB7XG4gICAgICBleHBhbmRlZCA9IGV4cGFuZElucHV0PFROdW1iZXI+KGJzY3JpcHQuY29tcGlsZShyZWRlZW0hLndpdG5lc3MhKSwgW10sIG91dHB1dFR5cGUsIHJlZGVlbSEub3V0cHV0KTtcbiAgICB9XG4gICAgaWYgKCFleHBhbmRlZC5wcmV2T3V0VHlwZSkgcmV0dXJuIHt9O1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIHByZXZPdXRTY3JpcHQ6IG91dHB1dCxcbiAgICAgIHByZXZPdXRUeXBlOiBTQ1JJUFRfVFlQRVMuUDJXU0gsXG4gICAgICB3aXRuZXNzU2NyaXB0OiByZWRlZW0hLm91dHB1dCxcbiAgICAgIHdpdG5lc3NTY3JpcHRUeXBlOiBleHBhbmRlZC5wcmV2T3V0VHlwZSxcblxuICAgICAgcHVia2V5czogZXhwYW5kZWQucHVia2V5cyxcbiAgICAgIHNpZ25hdHVyZXM6IGV4cGFuZGVkLnNpZ25hdHVyZXMsXG4gICAgfTtcbiAgfVxuXG4gIGlmICh0eXBlID09PSBTQ1JJUFRfVFlQRVMuUDJUUikge1xuICAgIGNvbnN0IHBhcnNlZFdpdG5lc3MgPSB0YXByb290LnBhcnNlVGFwcm9vdFdpdG5lc3Mod2l0bmVzc1N0YWNrKTtcbiAgICBpZiAocGFyc2VkV2l0bmVzcy5zcGVuZFR5cGUgPT09ICdLZXknKSB7XG4gICAgICAvLyBrZXkgcGF0aCBzcGVuZCwgbm90aGluZyB0byBleHBhbmRcbiAgICAgIGNvbnN0IHsgc2lnbmF0dXJlLCBhbm5leCB9ID0gcGFyc2VkV2l0bmVzcztcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHByZXZPdXRUeXBlOiBTQ1JJUFRfVFlQRVMuUDJUUixcbiAgICAgICAgc2lnbmF0dXJlczogW3NpZ25hdHVyZV0sXG4gICAgICAgIGFubmV4LFxuICAgICAgfTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gc2NyaXB0IHBhdGggc3BlbmRcbiAgICAgIGNvbnN0IHsgdGFwc2NyaXB0LCBjb250cm9sQmxvY2ssIGFubmV4IH0gPSBwYXJzZWRXaXRuZXNzO1xuICAgICAgY29uc3QgcHJldk91dFNjcmlwdCA9IHAydHJQYXltZW50cy5wMnRyKFxuICAgICAgICB7XG4gICAgICAgICAgcmVkZWVtczogW3sgb3V0cHV0OiB0YXBzY3JpcHQgfV0sXG4gICAgICAgICAgcmVkZWVtSW5kZXg6IDAsXG4gICAgICAgICAgY29udHJvbEJsb2NrLFxuICAgICAgICAgIGFubmV4LFxuICAgICAgICB9LFxuICAgICAgICB7IGVjY0xpYiB9XG4gICAgICApLm91dHB1dDtcbiAgICAgIGNvbnN0IHdpdG5lc3NTY3JpcHRUeXBlID0gY2xhc3NpZnkub3V0cHV0KHRhcHNjcmlwdCk7XG4gICAgICBjb25zdCB7IHB1YmtleXMsIHNpZ25hdHVyZXMgfSA9IGV4cGFuZElucHV0PFROdW1iZXI+KFxuICAgICAgICB1bmRlZmluZWQsXG4gICAgICAgIHBhcnNlZFdpdG5lc3Muc2NyaXB0U2lnLFxuICAgICAgICB3aXRuZXNzU2NyaXB0VHlwZSxcbiAgICAgICAgdGFwc2NyaXB0XG4gICAgICApO1xuXG4gICAgICByZXR1cm4ge1xuICAgICAgICBwcmV2T3V0U2NyaXB0LFxuICAgICAgICBwcmV2T3V0VHlwZTogU0NSSVBUX1RZUEVTLlAyVFIsXG4gICAgICAgIHdpdG5lc3NTY3JpcHQ6IHRhcHNjcmlwdCxcbiAgICAgICAgd2l0bmVzc1NjcmlwdFR5cGUsXG5cbiAgICAgICAgY29udHJvbEJsb2NrLFxuICAgICAgICBhbm5leCxcblxuICAgICAgICBwdWJrZXlzLFxuICAgICAgICBzaWduYXR1cmVzLFxuICAgICAgfTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4ge1xuICAgIHByZXZPdXRUeXBlOiBTQ1JJUFRfVFlQRVMuTk9OU1RBTkRBUkQsXG4gICAgcHJldk91dFNjcmlwdDogc2NyaXB0U2lnLFxuICB9O1xufVxuXG4vLyBjb3VsZCBiZSBkb25lIGluIGV4cGFuZElucHV0LCBidXQgcmVxdWlyZXMgdGhlIG9yaWdpbmFsIFRyYW5zYWN0aW9uIGZvciBoYXNoRm9yU2lnbmF0dXJlXG5mdW5jdGlvbiBmaXhNdWx0aXNpZ09yZGVyPFROdW1iZXIgZXh0ZW5kcyBudW1iZXIgfCBiaWdpbnQgPSBudW1iZXI+KFxuICBpbnB1dDogVHhiSW5wdXQ8VE51bWJlcj4sXG4gIHRyYW5zYWN0aW9uOiBUcmFuc2FjdGlvbjxUTnVtYmVyPixcbiAgdmluOiBudW1iZXIsXG4gIHByZXZPdXRwdXRzPzogVHhPdXRwdXQ8VE51bWJlcj5bXVxuKTogdm9pZCB7XG4gIGlmIChpbnB1dC5yZWRlZW1TY3JpcHRUeXBlICE9PSBTQ1JJUFRfVFlQRVMuUDJNUyB8fCAhaW5wdXQucmVkZWVtU2NyaXB0KSByZXR1cm47XG4gIGlmIChpbnB1dC5wdWJrZXlzIS5sZW5ndGggPT09IGlucHV0LnNpZ25hdHVyZXMhLmxlbmd0aCkgcmV0dXJuO1xuICBjb25zdCBwcmV2T3V0cHV0ID0gcHJldk91dHB1dHMgJiYgcHJldk91dHB1dHNbdmluXTtcblxuICBjb25zdCB1bm1hdGNoZWQgPSBpbnB1dC5zaWduYXR1cmVzIS5jb25jYXQoKTtcblxuICBpbnB1dC5zaWduYXR1cmVzID0gaW5wdXQucHVia2V5cyEubWFwKChwdWJLZXkpID0+IHtcbiAgICBjb25zdCBrZXlQYWlyID0gRUNQYWlyLmZyb21QdWJsaWNLZXkocHViS2V5ISk7XG4gICAgbGV0IG1hdGNoOiBCdWZmZXIgfCB1bmRlZmluZWQ7XG5cbiAgICAvLyBjaGVjayBmb3IgYSBzaWduYXR1cmVcbiAgICB1bm1hdGNoZWQuc29tZSgoc2lnbmF0dXJlLCBpKSA9PiB7XG4gICAgICAvLyBza2lwIGlmIHVuZGVmaW5lZCB8fCBPUF8wXG4gICAgICBpZiAoIXNpZ25hdHVyZSkgcmV0dXJuIGZhbHNlO1xuXG4gICAgICAvLyBUT0RPOiBhdm9pZCBPKG4pIGhhc2hGb3JTaWduYXR1cmVcbiAgICAgIGNvbnN0IHBhcnNlZCA9IGJzY3JpcHQuc2lnbmF0dXJlLmRlY29kZShzaWduYXR1cmUpO1xuICAgICAgY29uc3QgaGFzaCA9IHRyYW5zYWN0aW9uLmhhc2hGb3JTaWduYXR1cmUodmluLCBpbnB1dC5yZWRlZW1TY3JpcHQhLCBwYXJzZWQuaGFzaFR5cGUsIHByZXZPdXRwdXQ/LnZhbHVlKTtcblxuICAgICAgLy8gc2tpcCBpZiBzaWduYXR1cmUgZG9lcyBub3QgbWF0Y2ggcHViS2V5XG4gICAgICBpZiAoIWtleVBhaXIudmVyaWZ5KGhhc2gsIHBhcnNlZC5zaWduYXR1cmUpKSByZXR1cm4gZmFsc2U7XG5cbiAgICAgIC8vIHJlbW92ZSBtYXRjaGVkIHNpZ25hdHVyZSBmcm9tIHVubWF0Y2hlZFxuICAgICAgdW5tYXRjaGVkW2ldID0gdW5kZWZpbmVkO1xuICAgICAgbWF0Y2ggPSBzaWduYXR1cmU7XG5cbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIG1hdGNoO1xuICB9KTtcbn1cblxuZnVuY3Rpb24gZXhwYW5kT3V0cHV0KHNjcmlwdDogQnVmZmVyLCBvdXJQdWJLZXk/OiBCdWZmZXIsIGNvbnRyb2xCbG9jaz86IEJ1ZmZlcik6IFR4Yk91dHB1dCB7XG4gIHR5cGVmb3JjZSh0eXBlcy5CdWZmZXIsIHNjcmlwdCk7XG4gIGNvbnN0IHR5cGUgPSBjbGFzc2lmeS5vdXRwdXQoc2NyaXB0KTtcblxuICBzd2l0Y2ggKHR5cGUpIHtcbiAgICBjYXNlIFNDUklQVF9UWVBFUy5QMlBLSDoge1xuICAgICAgaWYgKCFvdXJQdWJLZXkpIHJldHVybiB7IHR5cGUgfTtcblxuICAgICAgLy8gZG9lcyBvdXIgaGFzaDE2MChwdWJLZXkpIG1hdGNoIHRoZSBvdXRwdXQgc2NyaXB0cz9cbiAgICAgIGNvbnN0IHBraDEgPSBwYXltZW50cy5wMnBraCh7IG91dHB1dDogc2NyaXB0IH0pLmhhc2g7XG4gICAgICBjb25zdCBwa2gyID0gYmNyeXB0by5oYXNoMTYwKG91clB1YktleSk7XG4gICAgICBpZiAoIXBraDEhLmVxdWFscyhwa2gyKSkgcmV0dXJuIHsgdHlwZSB9O1xuXG4gICAgICByZXR1cm4ge1xuICAgICAgICB0eXBlLFxuICAgICAgICBwdWJrZXlzOiBbb3VyUHViS2V5XSxcbiAgICAgICAgc2lnbmF0dXJlczogW3VuZGVmaW5lZF0sXG4gICAgICB9O1xuICAgIH1cblxuICAgIGNhc2UgU0NSSVBUX1RZUEVTLlAyV1BLSDoge1xuICAgICAgaWYgKCFvdXJQdWJLZXkpIHJldHVybiB7IHR5cGUgfTtcblxuICAgICAgLy8gZG9lcyBvdXIgaGFzaDE2MChwdWJLZXkpIG1hdGNoIHRoZSBvdXRwdXQgc2NyaXB0cz9cbiAgICAgIGNvbnN0IHdwa2gxID0gcGF5bWVudHMucDJ3cGtoKHsgb3V0cHV0OiBzY3JpcHQgfSkuaGFzaDtcbiAgICAgIGNvbnN0IHdwa2gyID0gYmNyeXB0by5oYXNoMTYwKG91clB1YktleSk7XG4gICAgICBpZiAoIXdwa2gxIS5lcXVhbHMod3BraDIpKSByZXR1cm4geyB0eXBlIH07XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIHR5cGUsXG4gICAgICAgIHB1YmtleXM6IFtvdXJQdWJLZXldLFxuICAgICAgICBzaWduYXR1cmVzOiBbdW5kZWZpbmVkXSxcbiAgICAgIH07XG4gICAgfVxuXG4gICAgY2FzZSBTQ1JJUFRfVFlQRVMuUDJUUjoge1xuICAgICAgaWYgKCFvdXJQdWJLZXkpIHJldHVybiB7IHR5cGUgfTtcbiAgICAgIC8vIEhBQ0sgb3VyUHViS2V5IHRvIEJJUDM0MC1zdHlsZVxuICAgICAgaWYgKG91clB1YktleS5sZW5ndGggPT09IDMzKSBvdXJQdWJLZXkgPSBvdXJQdWJLZXkuc2xpY2UoMSk7XG4gICAgICAvLyBUT0RPOiBzdXBwb3J0IG11bHRpcGxlIHB1YmtleXNcbiAgICAgIGNvbnN0IHAydHIgPSBwMnRyUGF5bWVudHMucDJ0cih7IHB1YmtleTogb3VyUHViS2V5LCBjb250cm9sQmxvY2sgfSwgeyBlY2NMaWIgfSk7XG5cbiAgICAgIC8vIERvZXMgdHdlYWtlZCBvdXRwdXQgZm9yIGEgc2luZ2xlIHB1YmtleSBtYXRjaD9cbiAgICAgIGlmICghc2NyaXB0LmVxdWFscyhwMnRyLm91dHB1dCEpKSByZXR1cm4geyB0eXBlIH07XG5cbiAgICAgIC8vIFAyVFIgS2V5UGF0aCwgc2luZ2xlIGtleVxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgdHlwZSxcbiAgICAgICAgcHVia2V5czogW291clB1YktleV0sXG4gICAgICAgIHNpZ25hdHVyZXM6IFt1bmRlZmluZWRdLFxuICAgICAgfTtcbiAgICB9XG5cbiAgICBjYXNlIFNDUklQVF9UWVBFUy5QMlRSX05TOiB7XG4gICAgICBjb25zdCBwMnRyTnMgPSBwMnRyUGF5bWVudHMucDJ0cl9ucyh7IG91dHB1dDogc2NyaXB0IH0sIHsgZWNjTGliIH0pO1xuICAgICAgLy8gUDJUUiBTY3JpcHRQYXRoXG4gICAgICByZXR1cm4ge1xuICAgICAgICB0eXBlLFxuICAgICAgICBwdWJrZXlzOiBwMnRyTnMucHVia2V5cyxcbiAgICAgICAgc2lnbmF0dXJlczogcDJ0ck5zLnB1YmtleXMhLm1hcCgoKTogdW5kZWZpbmVkID0+IHVuZGVmaW5lZCksXG4gICAgICAgIG1heFNpZ25hdHVyZXM6IHAydHJOcy5wdWJrZXlzIS5sZW5ndGgsXG4gICAgICB9O1xuICAgIH1cblxuICAgIGNhc2UgU0NSSVBUX1RZUEVTLlAyUEs6IHtcbiAgICAgIGNvbnN0IHAycGsgPSBwYXltZW50cy5wMnBrKHsgb3V0cHV0OiBzY3JpcHQgfSk7XG4gICAgICByZXR1cm4ge1xuICAgICAgICB0eXBlLFxuICAgICAgICBwdWJrZXlzOiBbcDJway5wdWJrZXldLFxuICAgICAgICBzaWduYXR1cmVzOiBbdW5kZWZpbmVkXSxcbiAgICAgIH07XG4gICAgfVxuXG4gICAgY2FzZSBTQ1JJUFRfVFlQRVMuUDJNUzoge1xuICAgICAgY29uc3QgcDJtcyA9IHBheW1lbnRzLnAybXMoeyBvdXRwdXQ6IHNjcmlwdCB9KTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHR5cGUsXG4gICAgICAgIHB1YmtleXM6IHAybXMucHVia2V5cyxcbiAgICAgICAgc2lnbmF0dXJlczogcDJtcy5wdWJrZXlzIS5tYXAoKCk6IHVuZGVmaW5lZCA9PiB1bmRlZmluZWQpLFxuICAgICAgICBtYXhTaWduYXR1cmVzOiBwMm1zLm0sXG4gICAgICB9O1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB7IHR5cGUgfTtcbn1cblxuZnVuY3Rpb24gcHJlcGFyZUlucHV0PFROdW1iZXIgZXh0ZW5kcyBudW1iZXIgfCBiaWdpbnQgPSBudW1iZXI+KFxuICBpbnB1dDogVHhiSW5wdXQ8VE51bWJlcj4sXG4gIG91clB1YktleTogQnVmZmVyLFxuICByZWRlZW1TY3JpcHQ/OiBCdWZmZXIsXG4gIHdpdG5lc3NTY3JpcHQ/OiBCdWZmZXIsXG4gIGNvbnRyb2xCbG9jaz86IEJ1ZmZlcixcbiAgYW5uZXg/OiBCdWZmZXJcbik6IFR4YklucHV0PFROdW1iZXI+IHtcbiAgaWYgKHJlZGVlbVNjcmlwdCAmJiB3aXRuZXNzU2NyaXB0KSB7XG4gICAgY29uc3QgcDJ3c2ggPSBwYXltZW50cy5wMndzaCh7XG4gICAgICByZWRlZW06IHsgb3V0cHV0OiB3aXRuZXNzU2NyaXB0IH0sXG4gICAgfSkgYXMgUGF5bWVudDtcbiAgICBjb25zdCBwMndzaEFsdCA9IHBheW1lbnRzLnAyd3NoKHsgb3V0cHV0OiByZWRlZW1TY3JpcHQgfSkgYXMgUGF5bWVudDtcbiAgICBjb25zdCBwMnNoID0gcGF5bWVudHMucDJzaCh7IHJlZGVlbTogeyBvdXRwdXQ6IHJlZGVlbVNjcmlwdCB9IH0pIGFzIFBheW1lbnQ7XG4gICAgY29uc3QgcDJzaEFsdCA9IHBheW1lbnRzLnAyc2goeyByZWRlZW06IHAyd3NoIH0pIGFzIFBheW1lbnQ7XG5cbiAgICAvLyBlbmZvcmNlcyBQMlNIKFAyV1NIKC4uLikpXG4gICAgaWYgKCFwMndzaC5oYXNoIS5lcXVhbHMocDJ3c2hBbHQuaGFzaCEpKSB0aHJvdyBuZXcgRXJyb3IoJ1dpdG5lc3Mgc2NyaXB0IGluY29uc2lzdGVudCB3aXRoIHByZXZPdXRTY3JpcHQnKTtcbiAgICBpZiAoIXAyc2guaGFzaCEuZXF1YWxzKHAyc2hBbHQuaGFzaCEpKSB0aHJvdyBuZXcgRXJyb3IoJ1JlZGVlbSBzY3JpcHQgaW5jb25zaXN0ZW50IHdpdGggcHJldk91dFNjcmlwdCcpO1xuXG4gICAgY29uc3QgZXhwYW5kZWQgPSBleHBhbmRPdXRwdXQocDJ3c2gucmVkZWVtIS5vdXRwdXQhLCBvdXJQdWJLZXkpO1xuICAgIGlmICghZXhwYW5kZWQucHVia2V5cykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGV4cGFuZGVkLnR5cGUgKyAnIG5vdCBzdXBwb3J0ZWQgYXMgd2l0bmVzc1NjcmlwdCAoJyArIGJzY3JpcHQudG9BU00od2l0bmVzc1NjcmlwdCkgKyAnKScpO1xuICAgIH1cbiAgICBpZiAoaW5wdXQuc2lnbmF0dXJlcyAmJiBpbnB1dC5zaWduYXR1cmVzLnNvbWUoKHgpID0+IHggIT09IHVuZGVmaW5lZCkpIHtcbiAgICAgIGV4cGFuZGVkLnNpZ25hdHVyZXMgPSBpbnB1dC5zaWduYXR1cmVzO1xuICAgIH1cblxuICAgIGNvbnN0IHNpZ25TY3JpcHQgPSB3aXRuZXNzU2NyaXB0O1xuICAgIGlmIChleHBhbmRlZC50eXBlID09PSBTQ1JJUFRfVFlQRVMuUDJXUEtIKSB0aHJvdyBuZXcgRXJyb3IoJ1AyU0goUDJXU0goUDJXUEtIKSkgaXMgYSBjb25zZW5zdXMgZmFpbHVyZScpO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIHJlZGVlbVNjcmlwdCxcbiAgICAgIHJlZGVlbVNjcmlwdFR5cGU6IFNDUklQVF9UWVBFUy5QMldTSCxcblxuICAgICAgd2l0bmVzc1NjcmlwdCxcbiAgICAgIHdpdG5lc3NTY3JpcHRUeXBlOiBleHBhbmRlZC50eXBlLFxuXG4gICAgICBwcmV2T3V0VHlwZTogU0NSSVBUX1RZUEVTLlAyU0gsXG4gICAgICBwcmV2T3V0U2NyaXB0OiBwMnNoLm91dHB1dCxcblxuICAgICAgd2l0bmVzc1ZlcnNpb246IDAsXG4gICAgICBzaWduU2NyaXB0LFxuICAgICAgc2lnblR5cGU6IGV4cGFuZGVkLnR5cGUsXG5cbiAgICAgIHB1YmtleXM6IGV4cGFuZGVkLnB1YmtleXMsXG4gICAgICBzaWduYXR1cmVzOiBleHBhbmRlZC5zaWduYXR1cmVzLFxuICAgICAgbWF4U2lnbmF0dXJlczogZXhwYW5kZWQubWF4U2lnbmF0dXJlcyxcbiAgICB9O1xuICB9XG5cbiAgaWYgKHJlZGVlbVNjcmlwdCkge1xuICAgIGNvbnN0IHAyc2ggPSBwYXltZW50cy5wMnNoKHsgcmVkZWVtOiB7IG91dHB1dDogcmVkZWVtU2NyaXB0IH0gfSkgYXMgUGF5bWVudDtcblxuICAgIGlmIChpbnB1dC5wcmV2T3V0U2NyaXB0KSB7XG4gICAgICBsZXQgcDJzaEFsdDtcbiAgICAgIHRyeSB7XG4gICAgICAgIHAyc2hBbHQgPSBwYXltZW50cy5wMnNoKHsgb3V0cHV0OiBpbnB1dC5wcmV2T3V0U2NyaXB0IH0pIGFzIFBheW1lbnQ7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignUHJldk91dFNjcmlwdCBtdXN0IGJlIFAyU0gnKTtcbiAgICAgIH1cbiAgICAgIGlmICghcDJzaC5oYXNoIS5lcXVhbHMocDJzaEFsdC5oYXNoISkpIHRocm93IG5ldyBFcnJvcignUmVkZWVtIHNjcmlwdCBpbmNvbnNpc3RlbnQgd2l0aCBwcmV2T3V0U2NyaXB0Jyk7XG4gICAgfVxuXG4gICAgY29uc3QgZXhwYW5kZWQgPSBleHBhbmRPdXRwdXQocDJzaC5yZWRlZW0hLm91dHB1dCEsIG91clB1YktleSk7XG4gICAgaWYgKCFleHBhbmRlZC5wdWJrZXlzKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoZXhwYW5kZWQudHlwZSArICcgbm90IHN1cHBvcnRlZCBhcyByZWRlZW1TY3JpcHQgKCcgKyBic2NyaXB0LnRvQVNNKHJlZGVlbVNjcmlwdCkgKyAnKScpO1xuICAgIH1cbiAgICBpZiAoaW5wdXQuc2lnbmF0dXJlcyAmJiBpbnB1dC5zaWduYXR1cmVzLnNvbWUoKHgpID0+IHggIT09IHVuZGVmaW5lZCkpIHtcbiAgICAgIGV4cGFuZGVkLnNpZ25hdHVyZXMgPSBpbnB1dC5zaWduYXR1cmVzO1xuICAgIH1cblxuICAgIGxldCBzaWduU2NyaXB0ID0gcmVkZWVtU2NyaXB0O1xuICAgIGlmIChleHBhbmRlZC50eXBlID09PSBTQ1JJUFRfVFlQRVMuUDJXUEtIKSB7XG4gICAgICBzaWduU2NyaXB0ID0gcGF5bWVudHMucDJwa2goeyBwdWJrZXk6IGV4cGFuZGVkLnB1YmtleXNbMF0gfSkub3V0cHV0ITtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgcmVkZWVtU2NyaXB0LFxuICAgICAgcmVkZWVtU2NyaXB0VHlwZTogZXhwYW5kZWQudHlwZSxcblxuICAgICAgcHJldk91dFR5cGU6IFNDUklQVF9UWVBFUy5QMlNILFxuICAgICAgcHJldk91dFNjcmlwdDogcDJzaC5vdXRwdXQsXG5cbiAgICAgIHdpdG5lc3NWZXJzaW9uOiBleHBhbmRlZC50eXBlID09PSBTQ1JJUFRfVFlQRVMuUDJXUEtIID8gMCA6IHVuZGVmaW5lZCxcbiAgICAgIHNpZ25TY3JpcHQsXG4gICAgICBzaWduVHlwZTogZXhwYW5kZWQudHlwZSxcblxuICAgICAgcHVia2V5czogZXhwYW5kZWQucHVia2V5cyxcbiAgICAgIHNpZ25hdHVyZXM6IGV4cGFuZGVkLnNpZ25hdHVyZXMsXG4gICAgICBtYXhTaWduYXR1cmVzOiBleHBhbmRlZC5tYXhTaWduYXR1cmVzLFxuICAgIH07XG4gIH1cblxuICBpZiAod2l0bmVzc1NjcmlwdCAmJiBjb250cm9sQmxvY2spIHtcbiAgICAvLyBQMlRSIFNjcmlwdFBhdGhcbiAgICAvKiB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6bm8tc2hhZG93ZWQtdmFyaWFibGUgKi9cbiAgICBsZXQgcHJldk91dFNjcmlwdCA9IGlucHV0LnByZXZPdXRTY3JpcHQ7XG4gICAgaWYgKCFwcmV2T3V0U2NyaXB0KSB7XG4gICAgICBwcmV2T3V0U2NyaXB0ID0gcDJ0clBheW1lbnRzLnAydHIoXG4gICAgICAgIHtcbiAgICAgICAgICByZWRlZW1zOiBbeyBvdXRwdXQ6IHdpdG5lc3NTY3JpcHQgfV0sXG4gICAgICAgICAgcmVkZWVtSW5kZXg6IDAsXG4gICAgICAgICAgY29udHJvbEJsb2NrLFxuICAgICAgICAgIGFubmV4LFxuICAgICAgICB9LFxuICAgICAgICB7IGVjY0xpYiB9XG4gICAgICApLm91dHB1dDtcbiAgICB9XG5cbiAgICBjb25zdCBleHBhbmRlZCA9IGV4cGFuZE91dHB1dCh3aXRuZXNzU2NyaXB0LCBvdXJQdWJLZXkpO1xuICAgIGlmICghZXhwYW5kZWQucHVia2V5cykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGV4cGFuZGVkLnR5cGUgKyAnIG5vdCBzdXBwb3J0ZWQgYXMgd2l0bmVzc1NjcmlwdCAoJyArIGJzY3JpcHQudG9BU00od2l0bmVzc1NjcmlwdCkgKyAnKScpO1xuICAgIH1cbiAgICBpZiAoaW5wdXQuc2lnbmF0dXJlcyAmJiBpbnB1dC5zaWduYXR1cmVzLnNvbWUoKHgpID0+IHggIT09IHVuZGVmaW5lZCkpIHtcbiAgICAgIGV4cGFuZGVkLnNpZ25hdHVyZXMgPSBpbnB1dC5zaWduYXR1cmVzO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICB3aXRuZXNzU2NyaXB0LFxuICAgICAgd2l0bmVzc1NjcmlwdFR5cGU6IGV4cGFuZGVkLnR5cGUsXG5cbiAgICAgIHByZXZPdXRUeXBlOiBTQ1JJUFRfVFlQRVMuUDJUUixcbiAgICAgIHByZXZPdXRTY3JpcHQsXG5cbiAgICAgIHdpdG5lc3NWZXJzaW9uOiAxLFxuICAgICAgc2lnblNjcmlwdDogd2l0bmVzc1NjcmlwdCxcbiAgICAgIHNpZ25UeXBlOiBleHBhbmRlZC50eXBlLFxuXG4gICAgICBwdWJrZXlzOiBleHBhbmRlZC5wdWJrZXlzLFxuICAgICAgc2lnbmF0dXJlczogZXhwYW5kZWQuc2lnbmF0dXJlcyxcbiAgICAgIG1heFNpZ25hdHVyZXM6IGV4cGFuZGVkLm1heFNpZ25hdHVyZXMsXG5cbiAgICAgIGNvbnRyb2xCbG9jayxcbiAgICAgIGFubmV4LFxuICAgIH07XG4gIH1cblxuICBpZiAod2l0bmVzc1NjcmlwdCkge1xuICAgIGNvbnN0IHAyd3NoID0gcGF5bWVudHMucDJ3c2goeyByZWRlZW06IHsgb3V0cHV0OiB3aXRuZXNzU2NyaXB0IH0gfSk7XG5cbiAgICBpZiAoaW5wdXQucHJldk91dFNjcmlwdCkge1xuICAgICAgY29uc3QgcDJ3c2hBbHQgPSBwYXltZW50cy5wMndzaCh7IG91dHB1dDogaW5wdXQucHJldk91dFNjcmlwdCB9KTtcbiAgICAgIGlmICghcDJ3c2guaGFzaCEuZXF1YWxzKHAyd3NoQWx0Lmhhc2ghKSkgdGhyb3cgbmV3IEVycm9yKCdXaXRuZXNzIHNjcmlwdCBpbmNvbnNpc3RlbnQgd2l0aCBwcmV2T3V0U2NyaXB0Jyk7XG4gICAgfVxuXG4gICAgY29uc3QgZXhwYW5kZWQgPSBleHBhbmRPdXRwdXQocDJ3c2gucmVkZWVtIS5vdXRwdXQhLCBvdXJQdWJLZXkpO1xuICAgIGlmICghZXhwYW5kZWQucHVia2V5cykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGV4cGFuZGVkLnR5cGUgKyAnIG5vdCBzdXBwb3J0ZWQgYXMgd2l0bmVzc1NjcmlwdCAoJyArIGJzY3JpcHQudG9BU00od2l0bmVzc1NjcmlwdCkgKyAnKScpO1xuICAgIH1cbiAgICBpZiAoaW5wdXQuc2lnbmF0dXJlcyAmJiBpbnB1dC5zaWduYXR1cmVzLnNvbWUoKHgpID0+IHggIT09IHVuZGVmaW5lZCkpIHtcbiAgICAgIGV4cGFuZGVkLnNpZ25hdHVyZXMgPSBpbnB1dC5zaWduYXR1cmVzO1xuICAgIH1cblxuICAgIGNvbnN0IHNpZ25TY3JpcHQgPSB3aXRuZXNzU2NyaXB0O1xuICAgIGlmIChleHBhbmRlZC50eXBlID09PSBTQ1JJUFRfVFlQRVMuUDJXUEtIKSB0aHJvdyBuZXcgRXJyb3IoJ1AyV1NIKFAyV1BLSCkgaXMgYSBjb25zZW5zdXMgZmFpbHVyZScpO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIHdpdG5lc3NTY3JpcHQsXG4gICAgICB3aXRuZXNzU2NyaXB0VHlwZTogZXhwYW5kZWQudHlwZSxcblxuICAgICAgcHJldk91dFR5cGU6IFNDUklQVF9UWVBFUy5QMldTSCxcbiAgICAgIHByZXZPdXRTY3JpcHQ6IHAyd3NoLm91dHB1dCxcblxuICAgICAgd2l0bmVzc1ZlcnNpb246IDAsXG4gICAgICBzaWduU2NyaXB0LFxuICAgICAgc2lnblR5cGU6IGV4cGFuZGVkLnR5cGUsXG5cbiAgICAgIHB1YmtleXM6IGV4cGFuZGVkLnB1YmtleXMsXG4gICAgICBzaWduYXR1cmVzOiBleHBhbmRlZC5zaWduYXR1cmVzLFxuICAgICAgbWF4U2lnbmF0dXJlczogZXhwYW5kZWQubWF4U2lnbmF0dXJlcyxcbiAgICB9O1xuICB9XG5cbiAgaWYgKGlucHV0LnByZXZPdXRUeXBlICYmIGlucHV0LnByZXZPdXRTY3JpcHQpIHtcbiAgICAvLyBlbWJlZGRlZCBzY3JpcHRzIGFyZSBub3QgcG9zc2libGUgd2l0aG91dCBleHRyYSBpbmZvcm1hdGlvblxuICAgIGlmIChpbnB1dC5wcmV2T3V0VHlwZSA9PT0gU0NSSVBUX1RZUEVTLlAyU0gpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignUHJldk91dFNjcmlwdCBpcyAnICsgaW5wdXQucHJldk91dFR5cGUgKyAnLCByZXF1aXJlcyByZWRlZW1TY3JpcHQnKTtcbiAgICB9XG4gICAgaWYgKGlucHV0LnByZXZPdXRUeXBlID09PSBTQ1JJUFRfVFlQRVMuUDJXU0gpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignUHJldk91dFNjcmlwdCBpcyAnICsgaW5wdXQucHJldk91dFR5cGUgKyAnLCByZXF1aXJlcyB3aXRuZXNzU2NyaXB0Jyk7XG4gICAgfVxuXG4gICAgY29uc3QgZXhwYW5kZWQgPSBleHBhbmRPdXRwdXQoaW5wdXQucHJldk91dFNjcmlwdCwgb3VyUHViS2V5KTtcbiAgICBpZiAoIWV4cGFuZGVkLnB1YmtleXMpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihleHBhbmRlZC50eXBlICsgJyBub3Qgc3VwcG9ydGVkICgnICsgYnNjcmlwdC50b0FTTShpbnB1dC5wcmV2T3V0U2NyaXB0KSArICcpJyk7XG4gICAgfVxuICAgIGlmIChpbnB1dC5zaWduYXR1cmVzICYmIGlucHV0LnNpZ25hdHVyZXMuc29tZSgoeCkgPT4geCAhPT0gdW5kZWZpbmVkKSkge1xuICAgICAgZXhwYW5kZWQuc2lnbmF0dXJlcyA9IGlucHV0LnNpZ25hdHVyZXM7XG4gICAgfVxuXG4gICAgbGV0IHNpZ25TY3JpcHQgPSBpbnB1dC5wcmV2T3V0U2NyaXB0O1xuICAgIGlmIChleHBhbmRlZC50eXBlID09PSBTQ1JJUFRfVFlQRVMuUDJXUEtIKSB7XG4gICAgICBzaWduU2NyaXB0ID0gcGF5bWVudHMucDJwa2goeyBwdWJrZXk6IGV4cGFuZGVkLnB1YmtleXNbMF0gfSkub3V0cHV0IGFzIEJ1ZmZlcjtcbiAgICB9XG5cbiAgICBsZXQgd2l0bmVzc1ZlcnNpb247XG4gICAgaWYgKGV4cGFuZGVkLnR5cGUgPT09IFNDUklQVF9UWVBFUy5QMldQS0gpIHtcbiAgICAgIHdpdG5lc3NWZXJzaW9uID0gMDtcbiAgICB9IGVsc2UgaWYgKGV4cGFuZGVkLnR5cGUgPT09IFNDUklQVF9UWVBFUy5QMlRSKSB7XG4gICAgICB3aXRuZXNzVmVyc2lvbiA9IDE7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIHByZXZPdXRUeXBlOiBleHBhbmRlZC50eXBlLFxuICAgICAgcHJldk91dFNjcmlwdDogaW5wdXQucHJldk91dFNjcmlwdCxcblxuICAgICAgd2l0bmVzc1ZlcnNpb24sXG4gICAgICBzaWduU2NyaXB0LFxuICAgICAgc2lnblR5cGU6IGV4cGFuZGVkLnR5cGUsXG5cbiAgICAgIHB1YmtleXM6IGV4cGFuZGVkLnB1YmtleXMsXG4gICAgICBzaWduYXR1cmVzOiBleHBhbmRlZC5zaWduYXR1cmVzLFxuICAgICAgbWF4U2lnbmF0dXJlczogZXhwYW5kZWQubWF4U2lnbmF0dXJlcyxcbiAgICB9O1xuICB9XG5cbiAgY29uc3QgcHJldk91dFNjcmlwdCA9IHBheW1lbnRzLnAycGtoKHsgcHVia2V5OiBvdXJQdWJLZXkgfSkub3V0cHV0O1xuICByZXR1cm4ge1xuICAgIHByZXZPdXRUeXBlOiBTQ1JJUFRfVFlQRVMuUDJQS0gsXG4gICAgcHJldk91dFNjcmlwdCxcblxuICAgIHNpZ25TY3JpcHQ6IHByZXZPdXRTY3JpcHQsXG4gICAgc2lnblR5cGU6IFNDUklQVF9UWVBFUy5QMlBLSCxcblxuICAgIHB1YmtleXM6IFtvdXJQdWJLZXldLFxuICAgIHNpZ25hdHVyZXM6IFt1bmRlZmluZWRdLFxuICB9O1xufVxuXG5mdW5jdGlvbiBidWlsZDxUTnVtYmVyIGV4dGVuZHMgbnVtYmVyIHwgYmlnaW50ID0gbnVtYmVyPihcbiAgdHlwZTogc3RyaW5nLFxuICBpbnB1dDogVHhiSW5wdXQ8VE51bWJlcj4sXG4gIGFsbG93SW5jb21wbGV0ZT86IGJvb2xlYW5cbik6IFBheW1lbnQgfCB1bmRlZmluZWQge1xuICBjb25zdCBwdWJrZXlzID0gKGlucHV0LnB1YmtleXMgfHwgW10pIGFzIEJ1ZmZlcltdO1xuICBsZXQgc2lnbmF0dXJlcyA9IChpbnB1dC5zaWduYXR1cmVzIHx8IFtdKSBhcyBCdWZmZXJbXTtcblxuICBzd2l0Y2ggKHR5cGUpIHtcbiAgICBjYXNlIFNDUklQVF9UWVBFUy5QMlBLSDoge1xuICAgICAgaWYgKHB1YmtleXMubGVuZ3RoID09PSAwKSBicmVhaztcbiAgICAgIGlmIChzaWduYXR1cmVzLmxlbmd0aCA9PT0gMCkgYnJlYWs7XG5cbiAgICAgIHJldHVybiBwYXltZW50cy5wMnBraCh7IHB1YmtleTogcHVia2V5c1swXSwgc2lnbmF0dXJlOiBzaWduYXR1cmVzWzBdIH0pO1xuICAgIH1cbiAgICBjYXNlIFNDUklQVF9UWVBFUy5QMldQS0g6IHtcbiAgICAgIGlmIChwdWJrZXlzLmxlbmd0aCA9PT0gMCkgYnJlYWs7XG4gICAgICBpZiAoc2lnbmF0dXJlcy5sZW5ndGggPT09IDApIGJyZWFrO1xuXG4gICAgICByZXR1cm4gcGF5bWVudHMucDJ3cGtoKHsgcHVia2V5OiBwdWJrZXlzWzBdLCBzaWduYXR1cmU6IHNpZ25hdHVyZXNbMF0gfSk7XG4gICAgfVxuICAgIGNhc2UgU0NSSVBUX1RZUEVTLlAyUEs6IHtcbiAgICAgIGlmIChwdWJrZXlzLmxlbmd0aCA9PT0gMCkgYnJlYWs7XG4gICAgICBpZiAoc2lnbmF0dXJlcy5sZW5ndGggPT09IDApIGJyZWFrO1xuXG4gICAgICByZXR1cm4gcGF5bWVudHMucDJwayh7IHNpZ25hdHVyZTogc2lnbmF0dXJlc1swXSB9KTtcbiAgICB9XG4gICAgY2FzZSBTQ1JJUFRfVFlQRVMuUDJNUzoge1xuICAgICAgY29uc3QgbSA9IGlucHV0Lm1heFNpZ25hdHVyZXM7XG4gICAgICBpZiAoYWxsb3dJbmNvbXBsZXRlKSB7XG4gICAgICAgIHNpZ25hdHVyZXMgPSBzaWduYXR1cmVzLm1hcCgoeCkgPT4geCB8fCBvcHMuT1BfMCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzaWduYXR1cmVzID0gc2lnbmF0dXJlcy5maWx0ZXIoKHgpID0+IHgpO1xuICAgICAgfVxuXG4gICAgICAvLyBpZiB0aGUgdHJhbnNhY3Rpb24gaXMgbm90IG5vdCBjb21wbGV0ZSAoY29tcGxldGUpLCBvciBpZiBzaWduYXR1cmVzLmxlbmd0aCA9PT0gbSwgdmFsaWRhdGVcbiAgICAgIC8vIG90aGVyd2lzZSwgdGhlIG51bWJlciBvZiBPUF8wJ3MgbWF5IGJlID49IG0sIHNvIGRvbid0IHZhbGlkYXRlIChib28pXG4gICAgICBjb25zdCB2YWxpZGF0ZSA9ICFhbGxvd0luY29tcGxldGUgfHwgbSA9PT0gc2lnbmF0dXJlcy5sZW5ndGg7XG4gICAgICByZXR1cm4gcGF5bWVudHMucDJtcyh7IG0sIHB1YmtleXMsIHNpZ25hdHVyZXMgfSwgeyBhbGxvd0luY29tcGxldGUsIHZhbGlkYXRlIH0pO1xuICAgIH1cbiAgICBjYXNlIFNDUklQVF9UWVBFUy5QMlNIOiB7XG4gICAgICBjb25zdCByZWRlZW0gPSBidWlsZDxUTnVtYmVyPihpbnB1dC5yZWRlZW1TY3JpcHRUeXBlISwgaW5wdXQsIGFsbG93SW5jb21wbGV0ZSk7XG4gICAgICBpZiAoIXJlZGVlbSkgcmV0dXJuO1xuXG4gICAgICByZXR1cm4gcGF5bWVudHMucDJzaCh7XG4gICAgICAgIHJlZGVlbToge1xuICAgICAgICAgIG91dHB1dDogcmVkZWVtLm91dHB1dCB8fCBpbnB1dC5yZWRlZW1TY3JpcHQsXG4gICAgICAgICAgaW5wdXQ6IHJlZGVlbS5pbnB1dCxcbiAgICAgICAgICB3aXRuZXNzOiByZWRlZW0ud2l0bmVzcyxcbiAgICAgICAgfSxcbiAgICAgIH0pO1xuICAgIH1cbiAgICBjYXNlIFNDUklQVF9UWVBFUy5QMldTSDoge1xuICAgICAgY29uc3QgcmVkZWVtID0gYnVpbGQ8VE51bWJlcj4oaW5wdXQud2l0bmVzc1NjcmlwdFR5cGUhLCBpbnB1dCwgYWxsb3dJbmNvbXBsZXRlKTtcbiAgICAgIGlmICghcmVkZWVtKSByZXR1cm47XG5cbiAgICAgIHJldHVybiBwYXltZW50cy5wMndzaCh7XG4gICAgICAgIHJlZGVlbToge1xuICAgICAgICAgIG91dHB1dDogaW5wdXQud2l0bmVzc1NjcmlwdCxcbiAgICAgICAgICBpbnB1dDogcmVkZWVtLmlucHV0LFxuICAgICAgICAgIHdpdG5lc3M6IHJlZGVlbS53aXRuZXNzLFxuICAgICAgICB9LFxuICAgICAgfSk7XG4gICAgfVxuICAgIGNhc2UgU0NSSVBUX1RZUEVTLlAyVFI6IHtcbiAgICAgIGlmIChpbnB1dC53aXRuZXNzU2NyaXB0VHlwZSA9PT0gU0NSSVBUX1RZUEVTLlAyVFJfTlMpIHtcbiAgICAgICAgLy8gU2NyaXB0UGF0aFxuICAgICAgICBjb25zdCByZWRlZW0gPSBidWlsZDxUTnVtYmVyPihpbnB1dC53aXRuZXNzU2NyaXB0VHlwZSEsIGlucHV0LCBhbGxvd0luY29tcGxldGUpO1xuICAgICAgICByZXR1cm4gcDJ0clBheW1lbnRzLnAydHIoXG4gICAgICAgICAge1xuICAgICAgICAgICAgb3V0cHV0OiBpbnB1dC5wcmV2T3V0U2NyaXB0LFxuICAgICAgICAgICAgY29udHJvbEJsb2NrOiBpbnB1dC5jb250cm9sQmxvY2ssXG4gICAgICAgICAgICBhbm5leDogaW5wdXQuYW5uZXgsXG4gICAgICAgICAgICByZWRlZW1zOiBbcmVkZWVtIV0sXG4gICAgICAgICAgICByZWRlZW1JbmRleDogMCxcbiAgICAgICAgICB9LFxuICAgICAgICAgIHsgZWNjTGliIH1cbiAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgLy8gS2V5UGF0aFxuICAgICAgaWYgKHNpZ25hdHVyZXMubGVuZ3RoID09PSAwKSBicmVhaztcblxuICAgICAgcmV0dXJuIHAydHJQYXltZW50cy5wMnRyKHsgcHVia2V5cywgc2lnbmF0dXJlOiBzaWduYXR1cmVzWzBdIH0sIHsgZWNjTGliIH0pO1xuICAgIH1cbiAgICBjYXNlIFNDUklQVF9UWVBFUy5QMlRSX05TOiB7XG4gICAgICBjb25zdCBtID0gaW5wdXQubWF4U2lnbmF0dXJlcztcbiAgICAgIGlmIChhbGxvd0luY29tcGxldGUpIHtcbiAgICAgICAgc2lnbmF0dXJlcyA9IHNpZ25hdHVyZXMubWFwKCh4KSA9PiB4IHx8IG9wcy5PUF8wKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHNpZ25hdHVyZXMgPSBzaWduYXR1cmVzLmZpbHRlcigoeCkgPT4geCk7XG4gICAgICB9XG5cbiAgICAgIC8vIGlmIHRoZSB0cmFuc2FjdGlvbiBpcyBub3Qgbm90IGNvbXBsZXRlIChjb21wbGV0ZSksIG9yIGlmIHNpZ25hdHVyZXMubGVuZ3RoID09PSBtLCB2YWxpZGF0ZVxuICAgICAgLy8gb3RoZXJ3aXNlLCB0aGUgbnVtYmVyIG9mIE9QXzAncyBtYXkgYmUgPj0gbSwgc28gZG9uJ3QgdmFsaWRhdGUgKGJvbylcbiAgICAgIGNvbnN0IHZhbGlkYXRlID0gIWFsbG93SW5jb21wbGV0ZSB8fCBtID09PSBzaWduYXR1cmVzLmxlbmd0aDtcbiAgICAgIHJldHVybiBwMnRyUGF5bWVudHMucDJ0cl9ucyh7IHB1YmtleXMsIHNpZ25hdHVyZXMgfSwgeyBhbGxvd0luY29tcGxldGUsIHZhbGlkYXRlLCBlY2NMaWIgfSk7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGNhblNpZ248VE51bWJlciBleHRlbmRzIG51bWJlciB8IGJpZ2ludCA9IG51bWJlcj4oaW5wdXQ6IFR4YklucHV0PFROdW1iZXI+KTogYm9vbGVhbiB7XG4gIHJldHVybiAoXG4gICAgaW5wdXQuc2lnblNjcmlwdCAhPT0gdW5kZWZpbmVkICYmXG4gICAgaW5wdXQuc2lnblR5cGUgIT09IHVuZGVmaW5lZCAmJlxuICAgIGlucHV0LnB1YmtleXMgIT09IHVuZGVmaW5lZCAmJlxuICAgIGlucHV0LnNpZ25hdHVyZXMgIT09IHVuZGVmaW5lZCAmJlxuICAgIGlucHV0LnNpZ25hdHVyZXMubGVuZ3RoID09PSBpbnB1dC5wdWJrZXlzLmxlbmd0aCAmJlxuICAgIGlucHV0LnB1YmtleXMubGVuZ3RoID4gMCAmJlxuICAgIChpbnB1dC53aXRuZXNzVmVyc2lvbiA9PT0gdW5kZWZpbmVkIHx8IGlucHV0LnZhbHVlICE9PSB1bmRlZmluZWQpXG4gICk7XG59XG5cbmZ1bmN0aW9uIHNpZ25hdHVyZUhhc2hUeXBlKGJ1ZmZlcjogQnVmZmVyKTogbnVtYmVyIHtcbiAgaWYgKGJzY3JpcHQuaXNDYW5vbmljYWxTY2hub3JyU2lnbmF0dXJlKGJ1ZmZlcikgJiYgYnVmZmVyLmxlbmd0aCA9PT0gNjQpIHtcbiAgICByZXR1cm4gVHJhbnNhY3Rpb24uU0lHSEFTSF9ERUZBVUxUO1xuICB9XG4gIHJldHVybiBidWZmZXIucmVhZFVJbnQ4KGJ1ZmZlci5sZW5ndGggLSAxKTtcbn1cblxuZnVuY3Rpb24gY2hlY2tTaWduQXJnczxUTnVtYmVyIGV4dGVuZHMgbnVtYmVyIHwgYmlnaW50ID0gbnVtYmVyPihcbiAgaW5wdXRzOiBBcnJheTxUeGJJbnB1dDxUTnVtYmVyPj4sXG4gIHNpZ25QYXJhbXM6IFR4YlNpZ25Bcmc8VE51bWJlcj5cbik6IHZvaWQge1xuICBpZiAoIVBSRVZPVVRfVFlQRVMuaGFzKHNpZ25QYXJhbXMucHJldk91dFNjcmlwdFR5cGUpKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihgVW5rbm93biBwcmV2T3V0U2NyaXB0VHlwZSBcIiR7c2lnblBhcmFtcy5wcmV2T3V0U2NyaXB0VHlwZX1cImApO1xuICB9XG4gIHRmTWVzc2FnZSh0eXBlZm9yY2UuTnVtYmVyLCBzaWduUGFyYW1zLnZpbiwgYHNpZ24gbXVzdCBpbmNsdWRlIHZpbiBwYXJhbWV0ZXIgYXMgTnVtYmVyIChpbnB1dCBpbmRleClgKTtcbiAgdGZNZXNzYWdlKHRmRnVsbFNpZ25lciwgc2lnblBhcmFtcy5rZXlQYWlyLCBgc2lnbiBtdXN0IGluY2x1ZGUga2V5UGFpciBwYXJhbWV0ZXIgYXMgU2lnbmVyIGludGVyZmFjZWApO1xuICB0Zk1lc3NhZ2UodHlwZWZvcmNlLm1heWJlKHR5cGVmb3JjZS5OdW1iZXIpLCBzaWduUGFyYW1zLmhhc2hUeXBlLCBgc2lnbiBoYXNoVHlwZSBwYXJhbWV0ZXIgbXVzdCBiZSBhIG51bWJlcmApO1xuICBjb25zdCBwcmV2T3V0VHlwZSA9IChpbnB1dHNbc2lnblBhcmFtcy52aW5dIHx8IFtdKS5wcmV2T3V0VHlwZTtcbiAgY29uc3QgcG9zVHlwZSA9IHNpZ25QYXJhbXMucHJldk91dFNjcmlwdFR5cGU7XG4gIHN3aXRjaCAocG9zVHlwZSkge1xuICAgIGNhc2UgJ3AycGtoJzpcbiAgICAgIGlmIChwcmV2T3V0VHlwZSAmJiBwcmV2T3V0VHlwZSAhPT0gJ3B1YmtleWhhc2gnKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoYGlucHV0ICMke3NpZ25QYXJhbXMudmlufSBpcyBub3Qgb2YgdHlwZSBwMnBraDogJHtwcmV2T3V0VHlwZX1gKTtcbiAgICAgIH1cbiAgICAgIHRmTWVzc2FnZSh0eXBlZm9yY2UudmFsdWUodW5kZWZpbmVkKSwgc2lnblBhcmFtcy53aXRuZXNzU2NyaXB0LCBgJHtwb3NUeXBlfSByZXF1aXJlcyBOTyB3aXRuZXNzU2NyaXB0YCk7XG4gICAgICB0Zk1lc3NhZ2UodHlwZWZvcmNlLnZhbHVlKHVuZGVmaW5lZCksIHNpZ25QYXJhbXMucmVkZWVtU2NyaXB0LCBgJHtwb3NUeXBlfSByZXF1aXJlcyBOTyByZWRlZW1TY3JpcHRgKTtcbiAgICAgIHRmTWVzc2FnZSh0eXBlZm9yY2UudmFsdWUodW5kZWZpbmVkKSwgc2lnblBhcmFtcy53aXRuZXNzVmFsdWUsIGAke3Bvc1R5cGV9IHJlcXVpcmVzIE5PIHdpdG5lc3NWYWx1ZWApO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAncDJwayc6XG4gICAgICBpZiAocHJldk91dFR5cGUgJiYgcHJldk91dFR5cGUgIT09ICdwdWJrZXknKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoYGlucHV0ICMke3NpZ25QYXJhbXMudmlufSBpcyBub3Qgb2YgdHlwZSBwMnBrOiAke3ByZXZPdXRUeXBlfWApO1xuICAgICAgfVxuICAgICAgdGZNZXNzYWdlKHR5cGVmb3JjZS52YWx1ZSh1bmRlZmluZWQpLCBzaWduUGFyYW1zLndpdG5lc3NTY3JpcHQsIGAke3Bvc1R5cGV9IHJlcXVpcmVzIE5PIHdpdG5lc3NTY3JpcHRgKTtcbiAgICAgIHRmTWVzc2FnZSh0eXBlZm9yY2UudmFsdWUodW5kZWZpbmVkKSwgc2lnblBhcmFtcy5yZWRlZW1TY3JpcHQsIGAke3Bvc1R5cGV9IHJlcXVpcmVzIE5PIHJlZGVlbVNjcmlwdGApO1xuICAgICAgdGZNZXNzYWdlKHR5cGVmb3JjZS52YWx1ZSh1bmRlZmluZWQpLCBzaWduUGFyYW1zLndpdG5lc3NWYWx1ZSwgYCR7cG9zVHlwZX0gcmVxdWlyZXMgTk8gd2l0bmVzc1ZhbHVlYCk7XG4gICAgICBicmVhaztcbiAgICBjYXNlICdwMndwa2gnOlxuICAgICAgaWYgKHByZXZPdXRUeXBlICYmIHByZXZPdXRUeXBlICE9PSAnd2l0bmVzc3B1YmtleWhhc2gnKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoYGlucHV0ICMke3NpZ25QYXJhbXMudmlufSBpcyBub3Qgb2YgdHlwZSBwMndwa2g6ICR7cHJldk91dFR5cGV9YCk7XG4gICAgICB9XG4gICAgICB0Zk1lc3NhZ2UodHlwZWZvcmNlLnZhbHVlKHVuZGVmaW5lZCksIHNpZ25QYXJhbXMud2l0bmVzc1NjcmlwdCwgYCR7cG9zVHlwZX0gcmVxdWlyZXMgTk8gd2l0bmVzc1NjcmlwdGApO1xuICAgICAgdGZNZXNzYWdlKHR5cGVmb3JjZS52YWx1ZSh1bmRlZmluZWQpLCBzaWduUGFyYW1zLnJlZGVlbVNjcmlwdCwgYCR7cG9zVHlwZX0gcmVxdWlyZXMgTk8gcmVkZWVtU2NyaXB0YCk7XG4gICAgICB0Zk1lc3NhZ2UodHlwZXMuU2F0b3NoaSwgc2lnblBhcmFtcy53aXRuZXNzVmFsdWUsIGAke3Bvc1R5cGV9IHJlcXVpcmVzIHdpdG5lc3NWYWx1ZWApO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAncDJtcyc6XG4gICAgICBpZiAocHJldk91dFR5cGUgJiYgcHJldk91dFR5cGUgIT09ICdtdWx0aXNpZycpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihgaW5wdXQgIyR7c2lnblBhcmFtcy52aW59IGlzIG5vdCBvZiB0eXBlIHAybXM6ICR7cHJldk91dFR5cGV9YCk7XG4gICAgICB9XG4gICAgICB0Zk1lc3NhZ2UodHlwZWZvcmNlLnZhbHVlKHVuZGVmaW5lZCksIHNpZ25QYXJhbXMud2l0bmVzc1NjcmlwdCwgYCR7cG9zVHlwZX0gcmVxdWlyZXMgTk8gd2l0bmVzc1NjcmlwdGApO1xuICAgICAgdGZNZXNzYWdlKHR5cGVmb3JjZS52YWx1ZSh1bmRlZmluZWQpLCBzaWduUGFyYW1zLnJlZGVlbVNjcmlwdCwgYCR7cG9zVHlwZX0gcmVxdWlyZXMgTk8gcmVkZWVtU2NyaXB0YCk7XG4gICAgICB0Zk1lc3NhZ2UodHlwZWZvcmNlLnZhbHVlKHVuZGVmaW5lZCksIHNpZ25QYXJhbXMud2l0bmVzc1ZhbHVlLCBgJHtwb3NUeXBlfSByZXF1aXJlcyBOTyB3aXRuZXNzVmFsdWVgKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ3Ayc2gtcDJ3cGtoJzpcbiAgICAgIGlmIChwcmV2T3V0VHlwZSAmJiBwcmV2T3V0VHlwZSAhPT0gJ3NjcmlwdGhhc2gnKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoYGlucHV0ICMke3NpZ25QYXJhbXMudmlufSBpcyBub3Qgb2YgdHlwZSBwMnNoLXAyd3BraDogJHtwcmV2T3V0VHlwZX1gKTtcbiAgICAgIH1cbiAgICAgIHRmTWVzc2FnZSh0eXBlZm9yY2UudmFsdWUodW5kZWZpbmVkKSwgc2lnblBhcmFtcy53aXRuZXNzU2NyaXB0LCBgJHtwb3NUeXBlfSByZXF1aXJlcyBOTyB3aXRuZXNzU2NyaXB0YCk7XG4gICAgICB0Zk1lc3NhZ2UodHlwZWZvcmNlLkJ1ZmZlciwgc2lnblBhcmFtcy5yZWRlZW1TY3JpcHQsIGAke3Bvc1R5cGV9IHJlcXVpcmVzIHJlZGVlbVNjcmlwdGApO1xuICAgICAgdGZNZXNzYWdlKHR5cGVzLlNhdG9zaGksIHNpZ25QYXJhbXMud2l0bmVzc1ZhbHVlLCBgJHtwb3NUeXBlfSByZXF1aXJlcyB3aXRuZXNzVmFsdWVgKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ3Ayc2gtcDJtcyc6XG4gICAgY2FzZSAncDJzaC1wMnBrJzpcbiAgICBjYXNlICdwMnNoLXAycGtoJzpcbiAgICAgIGlmIChwcmV2T3V0VHlwZSAmJiBwcmV2T3V0VHlwZSAhPT0gJ3NjcmlwdGhhc2gnKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoYGlucHV0ICMke3NpZ25QYXJhbXMudmlufSBpcyBub3Qgb2YgdHlwZSAke3Bvc1R5cGV9OiAke3ByZXZPdXRUeXBlfWApO1xuICAgICAgfVxuICAgICAgdGZNZXNzYWdlKHR5cGVmb3JjZS52YWx1ZSh1bmRlZmluZWQpLCBzaWduUGFyYW1zLndpdG5lc3NTY3JpcHQsIGAke3Bvc1R5cGV9IHJlcXVpcmVzIE5PIHdpdG5lc3NTY3JpcHRgKTtcbiAgICAgIHRmTWVzc2FnZSh0eXBlZm9yY2UuQnVmZmVyLCBzaWduUGFyYW1zLnJlZGVlbVNjcmlwdCwgYCR7cG9zVHlwZX0gcmVxdWlyZXMgcmVkZWVtU2NyaXB0YCk7XG4gICAgICB0Zk1lc3NhZ2UodHlwZWZvcmNlLnZhbHVlKHVuZGVmaW5lZCksIHNpZ25QYXJhbXMud2l0bmVzc1ZhbHVlLCBgJHtwb3NUeXBlfSByZXF1aXJlcyBOTyB3aXRuZXNzVmFsdWVgKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ3Ayd3NoLXAybXMnOlxuICAgIGNhc2UgJ3Ayd3NoLXAycGsnOlxuICAgIGNhc2UgJ3Ayd3NoLXAycGtoJzpcbiAgICAgIGlmIChwcmV2T3V0VHlwZSAmJiBwcmV2T3V0VHlwZSAhPT0gJ3dpdG5lc3NzY3JpcHRoYXNoJykge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGBpbnB1dCAjJHtzaWduUGFyYW1zLnZpbn0gaXMgbm90IG9mIHR5cGUgJHtwb3NUeXBlfTogJHtwcmV2T3V0VHlwZX1gKTtcbiAgICAgIH1cbiAgICAgIHRmTWVzc2FnZSh0eXBlZm9yY2UuQnVmZmVyLCBzaWduUGFyYW1zLndpdG5lc3NTY3JpcHQsIGAke3Bvc1R5cGV9IHJlcXVpcmVzIHdpdG5lc3NTY3JpcHRgKTtcbiAgICAgIHRmTWVzc2FnZSh0eXBlZm9yY2UudmFsdWUodW5kZWZpbmVkKSwgc2lnblBhcmFtcy5yZWRlZW1TY3JpcHQsIGAke3Bvc1R5cGV9IHJlcXVpcmVzIE5PIHJlZGVlbVNjcmlwdGApO1xuICAgICAgdGZNZXNzYWdlKHR5cGVzLlNhdG9zaGksIHNpZ25QYXJhbXMud2l0bmVzc1ZhbHVlLCBgJHtwb3NUeXBlfSByZXF1aXJlcyB3aXRuZXNzVmFsdWVgKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ3Ayc2gtcDJ3c2gtcDJtcyc6XG4gICAgY2FzZSAncDJzaC1wMndzaC1wMnBrJzpcbiAgICBjYXNlICdwMnNoLXAyd3NoLXAycGtoJzpcbiAgICAgIGlmIChwcmV2T3V0VHlwZSAmJiBwcmV2T3V0VHlwZSAhPT0gJ3NjcmlwdGhhc2gnKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoYGlucHV0ICMke3NpZ25QYXJhbXMudmlufSBpcyBub3Qgb2YgdHlwZSAke3Bvc1R5cGV9OiAke3ByZXZPdXRUeXBlfWApO1xuICAgICAgfVxuICAgICAgdGZNZXNzYWdlKHR5cGVmb3JjZS5CdWZmZXIsIHNpZ25QYXJhbXMud2l0bmVzc1NjcmlwdCwgYCR7cG9zVHlwZX0gcmVxdWlyZXMgd2l0bmVzc1NjcmlwdGApO1xuICAgICAgdGZNZXNzYWdlKHR5cGVmb3JjZS5CdWZmZXIsIHNpZ25QYXJhbXMucmVkZWVtU2NyaXB0LCBgJHtwb3NUeXBlfSByZXF1aXJlcyB3aXRuZXNzU2NyaXB0YCk7XG4gICAgICB0Zk1lc3NhZ2UodHlwZXMuU2F0b3NoaSwgc2lnblBhcmFtcy53aXRuZXNzVmFsdWUsIGAke3Bvc1R5cGV9IHJlcXVpcmVzIHdpdG5lc3NTY3JpcHRgKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ3AydHInOlxuICAgICAgaWYgKHByZXZPdXRUeXBlICYmIHByZXZPdXRUeXBlICE9PSAndGFwcm9vdCcpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihgaW5wdXQgIyR7c2lnblBhcmFtcy52aW59IGlzIG5vdCBvZiB0eXBlICR7cG9zVHlwZX06ICR7cHJldk91dFR5cGV9YCk7XG4gICAgICB9XG4gICAgICB0Zk1lc3NhZ2UodHlwZWZvcmNlLnZhbHVlKHVuZGVmaW5lZCksIHNpZ25QYXJhbXMud2l0bmVzc1NjcmlwdCwgYCR7cG9zVHlwZX0gcmVxdWlyZXMgTk8gd2l0bmVzc1NjcmlwdGApO1xuICAgICAgdGZNZXNzYWdlKHR5cGVmb3JjZS52YWx1ZSh1bmRlZmluZWQpLCBzaWduUGFyYW1zLnJlZGVlbVNjcmlwdCwgYCR7cG9zVHlwZX0gcmVxdWlyZXMgTk8gcmVkZWVtU2NyaXB0YCk7XG4gICAgICB0Zk1lc3NhZ2UodHlwZWZvcmNlLnZhbHVlKHVuZGVmaW5lZCksIHNpZ25QYXJhbXMud2l0bmVzc1ZhbHVlLCBgJHtwb3NUeXBlfSByZXF1aXJlcyBOTyB3aXRuZXNzVmFsdWVgKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ3AydHItcDJucyc6XG4gICAgICBpZiAocHJldk91dFR5cGUgJiYgcHJldk91dFR5cGUgIT09ICd0YXByb290Jykge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGBpbnB1dCAjJHtzaWduUGFyYW1zLnZpbn0gaXMgbm90IG9mIHR5cGUgJHtwb3NUeXBlfTogJHtwcmV2T3V0VHlwZX1gKTtcbiAgICAgIH1cbiAgICAgIGlucHV0c1tzaWduUGFyYW1zLnZpbl0ucHJldk91dFR5cGUgPSBpbnB1dHNbc2lnblBhcmFtcy52aW5dLnByZXZPdXRUeXBlIHx8ICd0YXByb290JztcbiAgICAgIHRmTWVzc2FnZSh0eXBlZm9yY2UuQnVmZmVyLCBzaWduUGFyYW1zLndpdG5lc3NTY3JpcHQsIGAke3Bvc1R5cGV9IHJlcXVpcmVzIHdpdG5lc3NTY3JpcHRgKTtcbiAgICAgIHRmTWVzc2FnZSh0eXBlZm9yY2UuQnVmZmVyLCBzaWduUGFyYW1zLmNvbnRyb2xCbG9jaywgYCR7cG9zVHlwZX0gcmVxdWlyZXMgY29udHJvbEJsb2NrYCk7XG4gICAgICB0Zk1lc3NhZ2UodHlwZWZvcmNlLnZhbHVlKHVuZGVmaW5lZCksIHNpZ25QYXJhbXMucmVkZWVtU2NyaXB0LCBgJHtwb3NUeXBlfSByZXF1aXJlcyBOTyByZWRlZW1TY3JpcHRgKTtcbiAgICAgIGJyZWFrO1xuICB9XG59XG5cbmZ1bmN0aW9uIHRyeVNpZ248VE51bWJlciBleHRlbmRzIG51bWJlciB8IGJpZ2ludCA9IG51bWJlcj4oe1xuICBpbnB1dCxcbiAgb3VyUHViS2V5LFxuICBrZXlQYWlyLFxuICBzaWduYXR1cmVIYXNoLFxuICBoYXNoVHlwZSxcbiAgdXNlTG93UixcbiAgdGFwdHJlZVJvb3QsXG59OiBTaWduaW5nRGF0YTxUTnVtYmVyPik6IHZvaWQge1xuICBpZiAoaW5wdXQud2l0bmVzc1ZlcnNpb24gPT09IDEgJiYgb3VyUHViS2V5Lmxlbmd0aCA9PT0gMzMpIG91clB1YktleSA9IG91clB1YktleS5zbGljZSgxKTtcbiAgLy8gZW5mb3JjZSBpbiBvcmRlciBzaWduaW5nIG9mIHB1YmxpYyBrZXlzXG4gIGxldCBzaWduZWQgPSBmYWxzZTtcbiAgZm9yIChjb25zdCBbaSwgcHViS2V5XSBvZiBpbnB1dC5wdWJrZXlzIS5lbnRyaWVzKCkpIHtcbiAgICBpZiAoIW91clB1YktleS5lcXVhbHMocHViS2V5ISkpIGNvbnRpbnVlO1xuICAgIGlmIChpbnB1dC5zaWduYXR1cmVzIVtpXSAmJiBpbnB1dC5zaWduYXR1cmVzIVtpXSEubGVuZ3RoID4gMCkgdGhyb3cgbmV3IEVycm9yKCdTaWduYXR1cmUgYWxyZWFkeSBleGlzdHMnKTtcblxuICAgIC8vIFRPRE86IGFkZCB0ZXN0c1xuICAgIGlmIChvdXJQdWJLZXkubGVuZ3RoICE9PSAzMyAmJiBpbnB1dC53aXRuZXNzVmVyc2lvbiA9PT0gMCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdCSVAxNDMgKFdpdG5lc3MgdjApIGlucHV0cyByZXF1aXJlIGNvbXByZXNzZWQgcHVia2V5cycpO1xuICAgIH0gZWxzZSBpZiAob3VyUHViS2V5Lmxlbmd0aCAhPT0gMzIgJiYgaW5wdXQud2l0bmVzc1ZlcnNpb24gPT09IDEpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignQklQMzQxIChXaXRuZXNzIHYxKSBpbnB1dHMgcmVxdWlyZSB4LW9ubHkgcHVia2V5cycpO1xuICAgIH1cblxuICAgIGlmIChpbnB1dC53aXRuZXNzVmVyc2lvbiA9PT0gMSkge1xuICAgICAgaWYgKCFpbnB1dC53aXRuZXNzU2NyaXB0KSB7XG4gICAgICAgIC8vIEZJWE1FOiBXb3JrYXJvdW5kIGZvciBub3QgaGF2aW5nIHByb3BlciB0d2Vha2luZyBzdXBwb3J0IGZvciBrZXkgcGF0aFxuICAgICAgICBpZiAoIWtleVBhaXIucHJpdmF0ZUtleSkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgdW5leHBlY3RlZCBrZXlwYWlyYCk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcHJpdmF0ZUtleSA9IHRhcHJvb3QudGFwVHdlYWtQcml2a2V5KGVjY0xpYiwgb3VyUHViS2V5LCBrZXlQYWlyLnByaXZhdGVLZXksIHRhcHRyZWVSb290KTtcbiAgICAgICAga2V5UGFpciA9IEVDUGFpci5mcm9tUHJpdmF0ZUtleShCdWZmZXIuZnJvbShwcml2YXRlS2V5KSk7XG4gICAgICB9XG4gICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vYml0Y29pbi9iaXBzL2Jsb2IvbWFzdGVyL2JpcC0wMzQxLm1lZGlhd2lraSNjb21tb24tc2lnbmF0dXJlLW1lc3NhZ2VcbiAgICAgIGNvbnN0IHNpZ25hdHVyZSA9IGtleVBhaXIuc2lnblNjaG5vcnIoc2lnbmF0dXJlSGFzaCk7XG4gICAgICAvLyBTSUdIQVNIX0RFRkFVTFQgaXMgb21pdHRlZCBmcm9tIHRoZSBzaWduYXR1cmVcbiAgICAgIGlmIChoYXNoVHlwZSA9PT0gVHJhbnNhY3Rpb24uU0lHSEFTSF9ERUZBVUxUKSB7XG4gICAgICAgIGlucHV0LnNpZ25hdHVyZXMhW2ldID0gQnVmZmVyLmZyb20oc2lnbmF0dXJlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlucHV0LnNpZ25hdHVyZXMhW2ldID0gQnVmZmVyLmNvbmNhdChbc2lnbmF0dXJlLCBCdWZmZXIub2YoaGFzaFR5cGUpXSk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IHNpZ25hdHVyZSA9IGtleVBhaXIuc2lnbihzaWduYXR1cmVIYXNoLCB1c2VMb3dSKTtcbiAgICAgIGlucHV0LnNpZ25hdHVyZXMhW2ldID0gYnNjcmlwdC5zaWduYXR1cmUuZW5jb2RlKHNpZ25hdHVyZSwgaGFzaFR5cGUpO1xuICAgIH1cbiAgICBzaWduZWQgPSB0cnVlO1xuICB9XG5cbiAgaWYgKCFzaWduZWQpIHRocm93IG5ldyBFcnJvcignS2V5IHBhaXIgY2Fubm90IHNpZ24gZm9yIHRoaXMgaW5wdXQnKTtcbn1cblxuaW50ZXJmYWNlIFNpZ25pbmdEYXRhPFROdW1iZXIgZXh0ZW5kcyBudW1iZXIgfCBiaWdpbnQgPSBudW1iZXI+IHtcbiAgaW5wdXQ6IFR4YklucHV0PFROdW1iZXI+O1xuICBvdXJQdWJLZXk6IEJ1ZmZlcjtcbiAga2V5UGFpcjogU2lnbmVyO1xuICBzaWduYXR1cmVIYXNoOiBCdWZmZXI7XG4gIGhhc2hUeXBlOiBudW1iZXI7XG4gIHVzZUxvd1I6IGJvb2xlYW47XG4gIHRhcHRyZWVSb290PzogQnVmZmVyO1xufVxuXG50eXBlIEhhc2hUeXBlQ2hlY2sgPSAoaGFzaFR5cGU6IG51bWJlcikgPT4gYm9vbGVhbjtcblxuZnVuY3Rpb24gZ2V0U2lnbmluZ0RhdGE8VE51bWJlciBleHRlbmRzIG51bWJlciB8IGJpZ2ludCA9IG51bWJlcj4oXG4gIG5ldHdvcms6IE5ldHdvcmssXG4gIGlucHV0czogQXJyYXk8VHhiSW5wdXQ8VE51bWJlcj4+LFxuICBuZWVkc091dHB1dHM6IEhhc2hUeXBlQ2hlY2ssXG4gIHR4OiBUcmFuc2FjdGlvbjxUTnVtYmVyPixcbiAgc2lnblBhcmFtczogbnVtYmVyIHwgVHhiU2lnbkFyZzxUTnVtYmVyPixcbiAga2V5UGFpcj86IFNpZ25lcixcbiAgcmVkZWVtU2NyaXB0PzogQnVmZmVyLFxuICBoYXNoVHlwZT86IG51bWJlcixcbiAgd2l0bmVzc1ZhbHVlPzogVE51bWJlcixcbiAgd2l0bmVzc1NjcmlwdD86IEJ1ZmZlcixcbiAgY29udHJvbEJsb2NrPzogQnVmZmVyLFxuICBhbm5leD86IEJ1ZmZlcixcbiAgdXNlTG93Uj86IGJvb2xlYW5cbik6IFNpZ25pbmdEYXRhPFROdW1iZXI+IHtcbiAgbGV0IHZpbjogbnVtYmVyO1xuICBpZiAodHlwZW9mIHNpZ25QYXJhbXMgPT09ICdudW1iZXInKSB7XG4gICAgY29uc29sZS53YXJuKFxuICAgICAgJ0RFUFJFQ0FURUQ6IFRyYW5zYWN0aW9uQnVpbGRlciBzaWduIG1ldGhvZCBhcmd1bWVudHMgJyArICd3aWxsIGNoYW5nZSBpbiB2NiwgcGxlYXNlIHVzZSB0aGUgVHhiU2lnbkFyZyBpbnRlcmZhY2UnXG4gICAgKTtcbiAgICB2aW4gPSBzaWduUGFyYW1zO1xuICB9IGVsc2UgaWYgKHR5cGVvZiBzaWduUGFyYW1zID09PSAnb2JqZWN0Jykge1xuICAgIGNoZWNrU2lnbkFyZ3M8VE51bWJlcj4oaW5wdXRzLCBzaWduUGFyYW1zKTtcbiAgICAoeyB2aW4sIGtleVBhaXIsIHJlZGVlbVNjcmlwdCwgaGFzaFR5cGUsIHdpdG5lc3NWYWx1ZSwgd2l0bmVzc1NjcmlwdCwgY29udHJvbEJsb2NrLCBhbm5leCB9ID0gc2lnblBhcmFtcyk7XG4gIH0gZWxzZSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVHJhbnNhY3Rpb25CdWlsZGVyIHNpZ24gZmlyc3QgYXJnIG11c3QgYmUgVHhiU2lnbkFyZyBvciBudW1iZXInKTtcbiAgfVxuICBpZiAoa2V5UGFpciA9PT0gdW5kZWZpbmVkKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdzaWduIHJlcXVpcmVzIGtleXBhaXInKTtcbiAgfVxuICBpZiAoIWlucHV0c1t2aW5dKSB0aHJvdyBuZXcgRXJyb3IoJ05vIGlucHV0IGF0IGluZGV4OiAnICsgdmluKTtcblxuICBjb25zdCBpbnB1dCA9IGlucHV0c1t2aW5dO1xuXG4gIC8vIGlmIHJlZGVlbVNjcmlwdCB3YXMgcHJldmlvdXNseSBwcm92aWRlZCwgZW5mb3JjZSBjb25zaXN0ZW5jeVxuICBpZiAoaW5wdXQucmVkZWVtU2NyaXB0ICE9PSB1bmRlZmluZWQgJiYgcmVkZWVtU2NyaXB0ICYmICFpbnB1dC5yZWRlZW1TY3JpcHQuZXF1YWxzKHJlZGVlbVNjcmlwdCkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0luY29uc2lzdGVudCByZWRlZW1TY3JpcHQnKTtcbiAgfVxuXG4gIGNvbnN0IG91clB1YktleSA9IGtleVBhaXIucHVibGljS2V5IHx8IChrZXlQYWlyLmdldFB1YmxpY0tleSAmJiBrZXlQYWlyLmdldFB1YmxpY0tleSgpKTtcbiAgaWYgKCFjYW5TaWduPFROdW1iZXI+KGlucHV0KSkge1xuICAgIGlmICh3aXRuZXNzVmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgaWYgKGlucHV0LnZhbHVlICE9PSB1bmRlZmluZWQgJiYgaW5wdXQudmFsdWUgIT09IHdpdG5lc3NWYWx1ZSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0lucHV0IGRpZCBub3QgbWF0Y2ggd2l0bmVzc1ZhbHVlJyk7XG4gICAgICB9XG4gICAgICB0eXBlZm9yY2UodHlwZXMuU2F0b3NoaSwgd2l0bmVzc1ZhbHVlKTtcbiAgICAgIGlucHV0LnZhbHVlID0gd2l0bmVzc1ZhbHVlO1xuICAgIH1cblxuICAgIGlmICghY2FuU2lnbjxUTnVtYmVyPihpbnB1dCkpIHtcbiAgICAgIGNvbnN0IHByZXBhcmVkID0gcHJlcGFyZUlucHV0PFROdW1iZXI+KGlucHV0LCBvdXJQdWJLZXksIHJlZGVlbVNjcmlwdCwgd2l0bmVzc1NjcmlwdCwgY29udHJvbEJsb2NrLCBhbm5leCk7XG5cbiAgICAgIC8vIHVwZGF0ZXMgaW5saW5lXG4gICAgICBPYmplY3QuYXNzaWduKGlucHV0LCBwcmVwYXJlZCk7XG4gICAgfVxuXG4gICAgaWYgKCFjYW5TaWduPFROdW1iZXI+KGlucHV0KSkgdGhyb3cgRXJyb3IoaW5wdXQucHJldk91dFR5cGUgKyAnIG5vdCBzdXBwb3J0ZWQnKTtcbiAgfVxuXG4gIC8vIGhhc2hUeXBlIGNhbiBiZSAwIGluIFRhcHJvb3QsIHNvIGNhbid0IHVzZSBoYXNoVHlwZSB8fCBTSUdIQVNIX0FMTFxuICBpZiAoaW5wdXQud2l0bmVzc1ZlcnNpb24gPT09IDEpIHtcbiAgICBoYXNoVHlwZSA9IGhhc2hUeXBlID09PSB1bmRlZmluZWQgPyBUcmFuc2FjdGlvbi5TSUdIQVNIX0RFRkFVTFQgOiBoYXNoVHlwZTtcbiAgfSBlbHNlIHtcbiAgICBoYXNoVHlwZSA9IGhhc2hUeXBlIHx8IFRyYW5zYWN0aW9uLlNJR0hBU0hfQUxMO1xuICB9XG4gIGlmIChuZWVkc091dHB1dHMoaGFzaFR5cGUpKSB0aHJvdyBuZXcgRXJyb3IoJ1RyYW5zYWN0aW9uIG5lZWRzIG91dHB1dHMnKTtcblxuICAvLyBUT0RPOiBUaGlzIGlzIG5vdCB0aGUgYmVzdCBwbGFjZSB0byBkbyB0aGlzLCBidXQgbWlnaHQgc3RpY2sgd2l0aCBpdCB1bnRpbCBQU0JUXG4gIGxldCBsZWFmSGFzaDtcbiAgbGV0IHRhcHRyZWVSb290O1xuICBpZiAoY29udHJvbEJsb2NrICYmIHdpdG5lc3NTY3JpcHQpIHtcbiAgICBsZWFmSGFzaCA9IHRhcHJvb3QuZ2V0VGFwbGVhZkhhc2goZWNjTGliLCBjb250cm9sQmxvY2ssIHdpdG5lc3NTY3JpcHQpO1xuICAgIHRhcHRyZWVSb290ID0gdGFwcm9vdC5nZXRUYXB0cmVlUm9vdChlY2NMaWIsIGNvbnRyb2xCbG9jaywgd2l0bmVzc1NjcmlwdCwgbGVhZkhhc2gpO1xuICB9XG5cbiAgLy8gcmVhZHkgdG8gc2lnblxuICBsZXQgc2lnbmF0dXJlSGFzaDogQnVmZmVyO1xuICBzd2l0Y2ggKGlucHV0LndpdG5lc3NWZXJzaW9uKSB7XG4gICAgY2FzZSB1bmRlZmluZWQ6XG4gICAgICBzaWduYXR1cmVIYXNoID0gdHguaGFzaEZvclNpZ25hdHVyZSh2aW4sIGlucHV0LnNpZ25TY3JpcHQgYXMgQnVmZmVyLCBoYXNoVHlwZSwgaW5wdXQudmFsdWUpO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAwOlxuICAgICAgc2lnbmF0dXJlSGFzaCA9IHR4Lmhhc2hGb3JXaXRuZXNzVjAodmluLCBpbnB1dC5zaWduU2NyaXB0IGFzIEJ1ZmZlciwgaW5wdXQudmFsdWUgYXMgVE51bWJlciwgaGFzaFR5cGUpO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAxOlxuICAgICAgc2lnbmF0dXJlSGFzaCA9IHR4Lmhhc2hGb3JXaXRuZXNzVjEoXG4gICAgICAgIHZpbixcbiAgICAgICAgaW5wdXRzLm1hcCgoeyBwcmV2T3V0U2NyaXB0IH0pID0+IHByZXZPdXRTY3JpcHQgYXMgQnVmZmVyKSxcbiAgICAgICAgaW5wdXRzLm1hcCgoeyB2YWx1ZSB9KSA9PiB2YWx1ZSBhcyBUTnVtYmVyKSxcbiAgICAgICAgaGFzaFR5cGUsXG4gICAgICAgIGxlYWZIYXNoXG4gICAgICApO1xuICAgICAgYnJlYWs7XG4gICAgZGVmYXVsdDpcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1Vuc3VwcG9ydGVkIHdpdG5lc3MgdmVyc2lvbicpO1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBpbnB1dCxcbiAgICBvdXJQdWJLZXksXG4gICAga2V5UGFpcixcbiAgICBzaWduYXR1cmVIYXNoLFxuICAgIGhhc2hUeXBlLFxuICAgIHVzZUxvd1I6ICEhdXNlTG93UixcbiAgICB0YXB0cmVlUm9vdCxcbiAgfTtcbn1cbiJdfQ==
1084
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNhY3Rpb25fYnVpbGRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy90cmFuc2FjdGlvbl9idWlsZGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLGlEQUFpRDtBQUNqRCx5QkFBdUQ7QUFDdkQsNkRBQTZEO0FBQzdELHVDQUF1QztBQUN2Qyx5QkFBdUM7QUFDdkMseUJBQThCO0FBRTlCLHlCQUE4QjtBQUU5Qix5QkFBdUM7QUFDdkMseUJBQW9DO0FBQ3BDLHlCQUE2QjtBQUM3Qix5QkFBMkM7QUFDM0MsMkNBQW9EO0FBVXBELE1BQU0sU0FBUyxHQUFHLE9BQU8sQ0FBQyxXQUFXLENBQUMsQ0FBQztBQUV2QyxNQUFNLFlBQVksR0FBRyxDQUFDLEdBQVEsRUFBVyxFQUFFO0lBQ3pDLE9BQU8sU0FBUyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLElBQUksT0FBTyxHQUFHLENBQUMsSUFBSSxLQUFLLFVBQVUsSUFBSSxPQUFPLEdBQUcsQ0FBQyxXQUFXLEtBQUssVUFBVSxDQUFDO0FBQ3BILENBQUMsQ0FBQztBQUVGLE1BQU0sWUFBWSxHQUFHLFFBQVEsQ0FBQyxLQUFLLENBQUM7QUFFcEMsTUFBTSxhQUFhLEdBQWdCLElBQUksR0FBRyxDQUFDO0lBQ3pDLE1BQU07SUFDTixPQUFPO0lBQ1AsTUFBTTtJQUNOLFFBQVE7SUFDUixNQUFNO0lBQ04sZUFBZTtJQUNmLFlBQVk7SUFDWixXQUFXO0lBQ1gsYUFBYTtJQUNiLFdBQVc7SUFDWCxnQkFBZ0I7SUFDaEIsYUFBYTtJQUNiLFlBQVk7SUFDWixZQUFZO0lBQ1oscUJBQXFCO0lBQ3JCLGtCQUFrQjtJQUNsQixpQkFBaUI7SUFDakIsaUJBQWlCO0lBQ2pCLGVBQWU7SUFDZixNQUFNO0lBQ04sa0JBQWtCO0lBQ2xCLFdBQVc7Q0FDWixDQUFDLENBQUM7QUFrREgsU0FBUyxTQUFTLENBQUMsSUFBUyxFQUFFLEtBQVUsRUFBRSxPQUFlO0lBQ3ZE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aXRjb2luanMtbGliL3NyYy90eXBlcyc7XG5pbXBvcnQgeyBhZGRyZXNzIGFzIGJhZGRyZXNzLCBwMnRyUGF5bWVudHMgfSBmcm9tICcuLyc7XG5pbXBvcnQgKiBhcyBidWZmZXJ1dGlscyBmcm9tICdiaXRjb2luanMtbGliL3NyYy9idWZmZXJ1dGlscyc7XG5pbXBvcnQgKiBhcyBjbGFzc2lmeSBmcm9tICcuL2NsYXNzaWZ5JztcbmltcG9ydCB7IGNyeXB0byBhcyBiY3J5cHRvIH0gZnJvbSAnLi8nO1xuaW1wb3J0IHsgbmV0d29ya3MgfSBmcm9tICcuLyc7XG5pbXBvcnQgeyBOZXR3b3JrIH0gZnJvbSAnLi8nO1xuaW1wb3J0IHsgcGF5bWVudHMgfSBmcm9tICcuLyc7XG5pbXBvcnQgeyBQYXltZW50IH0gZnJvbSAnLi8nO1xuaW1wb3J0IHsgc2NyaXB0IGFzIGJzY3JpcHQgfSBmcm9tICcuLyc7XG5pbXBvcnQgeyBvcGNvZGVzIGFzIG9wcyB9IGZyb20gJy4vJztcbmltcG9ydCB7IHRhcHJvb3QgfSBmcm9tICcuLyc7XG5pbXBvcnQgeyBUeE91dHB1dCwgVHJhbnNhY3Rpb24gfSBmcm9tICcuLyc7XG5pbXBvcnQgeyBFQ1BhaXIsIGVjYyBhcyBlY2NMaWIgfSBmcm9tICcuL25vYmxlX2VjYyc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgU2lnbmVyIHtcbiAgcHJpdmF0ZUtleT86IEJ1ZmZlcjtcbiAgcHVibGljS2V5OiBCdWZmZXI7XG4gIGdldFB1YmxpY0tleT8oKTogQnVmZmVyO1xuICBzaWduKGhhc2g6IEJ1ZmZlciwgbG93Uj86IGJvb2xlYW4pOiBCdWZmZXI7XG4gIHNpZ25TY2hub3JyKGhhc2g6IEJ1ZmZlcik6IEJ1ZmZlcjtcbn1cblxuY29uc3QgdHlwZWZvcmNlID0gcmVxdWlyZSgndHlwZWZvcmNlJyk7XG5cbmNvbnN0IHRmRnVsbFNpZ25lciA9IChvYmo6IGFueSk6IGJvb2xlYW4gPT4ge1xuICByZXR1cm4gdHlwZWZvcmNlLkJ1ZmZlcihvYmoucHVibGljS2V5KSAmJiB0eXBlb2Ygb2JqLnNpZ24gPT09ICdmdW5jdGlvbicgJiYgdHlwZW9mIG9iai5zaWduU2Nobm9yciA9PT0gJ2Z1bmN0aW9uJztcbn07XG5cbmNvbnN0IFNDUklQVF9UWVBFUyA9IGNsYXNzaWZ5LnR5cGVzO1xuXG5jb25zdCBQUkVWT1VUX1RZUEVTOiBTZXQ8c3RyaW5nPiA9IG5ldyBTZXQoW1xuICAvLyBSYXdcbiAgJ3AycGtoJyxcbiAgJ3AycGsnLFxuICAncDJ3cGtoJyxcbiAgJ3AybXMnLFxuICAvLyBQMlNIIHdyYXBwZWRcbiAgJ3Ayc2gtcDJwa2gnLFxuICAncDJzaC1wMnBrJyxcbiAgJ3Ayc2gtcDJ3cGtoJyxcbiAgJ3Ayc2gtcDJtcycsXG4gIC8vIFAyV1NIIHdyYXBwZWRcbiAgJ3Ayd3NoLXAycGtoJyxcbiAgJ3Ayd3NoLXAycGsnLFxuICAncDJ3c2gtcDJtcycsXG4gIC8vIFAyU0gtUDJXU0ggd3JhcHBlclxuICAncDJzaC1wMndzaC1wMnBraCcsXG4gICdwMnNoLXAyd3NoLXAycGsnLFxuICAncDJzaC1wMndzaC1wMm1zJyxcbiAgLy8gUDJUUiBLZXlQYXRoXG4gICdwMnRyJyxcbiAgLy8gUDJUUiBTY3JpcHRQYXRoXG4gICdwMnRyLXAybnMnLFxuXSk7XG5cbnR5cGUgTWF5YmVCdWZmZXIgPSBCdWZmZXIgfCB1bmRlZmluZWQ7XG50eXBlIFR4YlNpZ25hdHVyZXMgPSBCdWZmZXJbXSB8IE1heWJlQnVmZmVyW107XG50eXBlIFR4YlB1YmtleXMgPSBNYXliZUJ1ZmZlcltdO1xudHlwZSBUeGJXaXRuZXNzID0gQnVmZmVyW107XG50eXBlIFR4YlNjcmlwdFR5cGUgPSBzdHJpbmc7XG50eXBlIFR4YlNjcmlwdCA9IEJ1ZmZlcjtcblxuaW50ZXJmYWNlIFR4YklucHV0PFROdW1iZXIgZXh0ZW5kcyBudW1iZXIgfCBiaWdpbnQgPSBudW1iZXI+IHtcbiAgdmFsdWU/OiBUTnVtYmVyO1xuICB3aXRuZXNzVmVyc2lvbj86IG51bWJlcjtcbiAgc2lnblNjcmlwdD86IFR4YlNjcmlwdDtcbiAgc2lnblR5cGU/OiBUeGJTY3JpcHRUeXBlO1xuICBwcmV2T3V0U2NyaXB0PzogVHhiU2NyaXB0O1xuICByZWRlZW1TY3JpcHQ/OiBUeGJTY3JpcHQ7XG4gIHJlZGVlbVNjcmlwdFR5cGU/OiBUeGJTY3JpcHRUeXBlO1xuICBwcmV2T3V0VHlwZT86IFR4YlNjcmlwdFR5cGU7XG4gIHB1YmtleXM/OiBUeGJQdWJrZXlzO1xuICBzaWduYXR1cmVzPzogVHhiU2lnbmF0dXJlcztcbiAgd2l0bmVzcz86IFR4YldpdG5lc3M7XG4gIHdpdG5lc3NTY3JpcHQ/OiBUeGJTY3JpcHQ7XG4gIHdpdG5lc3NTY3JpcHRUeXBlPzogVHhiU2NyaXB0VHlwZTtcbiAgY29udHJvbEJsb2NrPzogQnVmZmVyO1xuICBhbm5leD86IEJ1ZmZlcjtcbiAgc2NyaXB0PzogVHhiU2NyaXB0O1xuICBzZXF1ZW5jZT86IG51bWJlcjtcbiAgc2NyaXB0U2lnPzogVHhiU2NyaXB0O1xuICBtYXhTaWduYXR1cmVzPzogbnVtYmVyO1xufVxuXG5pbnRlcmZhY2UgVHhiT3V0cHV0IHtcbiAgdHlwZTogc3RyaW5nO1xuICBwdWJrZXlzPzogVHhiUHVia2V5cztcbiAgc2lnbmF0dXJlcz86IFR4YlNpZ25hdHVyZXM7XG4gIG1heFNpZ25hdHVyZXM/OiBudW1iZXI7XG59XG5cbmludGVyZmFjZSBUeGJTaWduQXJnPFROdW1iZXIgZXh0ZW5kcyBudW1iZXIgfCBiaWdpbnQgPSBudW1iZXI+IHtcbiAgcHJldk91dFNjcmlwdFR5cGU6IHN0cmluZztcbiAgdmluOiBudW1iZXI7XG4gIGtleVBhaXI6IFNpZ25lcjtcbiAgcmVkZWVtU2NyaXB0PzogQnVmZmVyO1xuICBoYXNoVHlwZT86IG51bWJlcjtcbiAgd2l0bmVzc1ZhbHVlPzogVE51bWJlcjtcbiAgd2l0bmVzc1NjcmlwdD86IEJ1ZmZlcjtcbiAgY29udHJvbEJsb2NrPzogQnVmZmVyO1xuICBhbm5leD86IEJ1ZmZlcjtcbn1cblxuZnVuY3Rpb24gdGZNZXNzYWdlKHR5cGU6IGFueSwgdmFsdWU6IGFueSwgbWVzc2FnZTogc3RyaW5nKTogdm9pZCB7XG4gIHRyeSB7XG4gICAgdHlwZWZvcmNlKHR5cGUsIHZhbHVlKTtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKG1lc3NhZ2UpO1xuICB9XG59XG5cbmZ1bmN0aW9uIHR4SXNTdHJpbmc8VE51bWJlciBleHRlbmRzIG51bWJlciB8IGJpZ2ludCA9IG51bWJlcj4oXG4gIHR4OiBCdWZmZXIgfCBzdHJpbmcgfCBUcmFuc2FjdGlvbjxUTnVtYmVyPlxuKTogdHggaXMgc3RyaW5nIHtcbiAgcmV0dXJuIHR5cGVvZiB0eCA9PT0gJ3N0cmluZycgfHwgdHggaW5zdGFuY2VvZiBTdHJpbmc7XG59XG5cbmZ1bmN0aW9uIHR4SXNUcmFuc2FjdGlvbjxUTnVtYmVyIGV4dGVuZHMgbnVtYmVyIHwgYmlnaW50ID0gbnVtYmVyPihcbiAgdHg6IEJ1ZmZlciB8IHN0cmluZyB8IFRyYW5zYWN0aW9uPFROdW1iZXI+XG4pOiB0eCBpcyBUcmFuc2FjdGlvbjxUTnVtYmVyPiB7XG4gIHJldHVybiB0eCBpbnN0YW5jZW9mIFRyYW5zYWN0aW9uO1xufVxuXG5leHBvcnQgY2xhc3MgVHJhbnNhY3Rpb25CdWlsZGVyPFROdW1iZXIgZXh0ZW5kcyBudW1iZXIgfCBiaWdpbnQgPSBudW1iZXI+IHtcbiAgc3RhdGljIGZyb21UcmFuc2FjdGlvbjxUTnVtYmVyIGV4dGVuZHMgbnVtYmVyIHwgYmlnaW50ID0gbnVtYmVyPihcbiAgICB0cmFuc2FjdGlvbjogVHJhbnNhY3Rpb248VE51bWJlcj4sXG4gICAgbmV0d29yaz86IE5ldHdvcmssXG4gICAgcHJldk91dHB1dHM/OiBUeE91dHB1dDxUTnVtYmVyPltdXG4gICk6IFRyYW5zYWN0aW9uQnVpbGRlcjxUTnVtYmVyPiB7XG4gICAgY29uc3QgdHhiID0gbmV3IFRyYW5zYWN0aW9uQnVpbGRlcjxUTnVtYmVyPihuZXR3b3JrKTtcblxuICAgIC8vIENvcHkgdHJhbnNhY3Rpb24gZmllbGRzXG4gICAgdHhiLnNldFZlcnNpb24odHJhbnNhY3Rpb24udmVyc2lvbik7XG4gICAgdHhiLnNldExvY2tUaW1lKHRyYW5zYWN0aW9uLmxvY2t0aW1lKTtcblxuICAgIC8vIENvcHkgb3V0cHV0cyAoZG9uZSBmaXJzdCB0byBhdm9pZCBzaWduYXR1cmUgaW52YWxpZGF0aW9uKVxuICAgIHRyYW5zYWN0aW9uLm91dHMuZm9yRWFjaCgodHhPdXQpID0+IHtcbiAgICAgIHR4Yi5hZGRPdXRwdXQodHhPdXQuc2NyaXB0LCAodHhPdXQgYXMgVHhPdXRwdXQ8VE51bWJlcj4pLnZhbHVlKTtcbiAgICB9KTtcblxuICAgIC8vIENvcHkgaW5wdXRzXG4gICAgdHJhbnNhY3Rpb24uaW5zLmZvckVhY2goKHR4SW4pID0+IHtcbiAgICAgIHR4Yi5fX2FkZElucHV0VW5zYWZlKHR4SW4uaGFzaCwgdHhJbi5pbmRleCwge1xuICAgICAgICBzZXF1ZW5jZTogdHhJbi5zZXF1ZW5jZSxcbiAgICAgICAgc2NyaXB0OiB0eEluLnNjcmlwdCxcbiAgICAgICAgd2l0bmVzczogdHhJbi53aXRuZXNzLFxuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICAvLyBmaXggc29tZSB0aGluZ3Mgbm90IHBvc3NpYmxlIHRocm91Z2ggdGhlIHB1YmxpYyBBUElcbiAgICB0eGIuX19JTlBVVFMuZm9yRWFjaCgoaW5wdXQsIGkpID0+IHtcbiAgICAgIGZpeE11bHRpc2lnT3JkZXI8VE51bWJlcj4oaW5wdXQsIHRyYW5zYWN0aW9uLCBpLCBwcmV2T3V0cHV0cyk7XG4gICAgfSk7XG5cbiAgICByZXR1cm4gdHhiO1xuICB9XG5cbiAgcHJpdmF0ZSBfX1BSRVZfVFhfU0VUOiB7IFtpbmRleDogc3RyaW5nXTogYm9vbGVhbiB9O1xuICBwcml2YXRlIF9fSU5QVVRTOiBBcnJheTxUeGJJbnB1dDxUTnVtYmVyPj47XG4gIHByaXZhdGUgX19UWDogVHJhbnNhY3Rpb248VE51bWJlcj47XG4gIHByaXZhdGUgX19VU0VfTE9XX1I6IGJvb2xlYW47XG5cbiAgLy8gV0FSTklORzogbWF4aW11bUZlZVJhdGUgaXMgX19OT1RfXyB0byBiZSByZWxpZWQgb24sXG4gIC8vICAgICAgICAgIGl0J3MganVzdCBhbm90aGVyIHBvdGVudGlhbCBzYWZldHkgbWVjaGFuaXNtIChzYWZldHkgaW4tZGVwdGgpXG4gIGNvbnN0cnVjdG9yKHB1YmxpYyBuZXR3b3JrOiBOZXR3b3JrID0gbmV0d29ya3MuYml0Y29pbiwgcHVibGljIG1heGltdW1GZWVSYXRlOiBudW1iZXIgPSAyNTAwKSB7XG4gICAgdGhpcy5fX1BSRVZfVFhfU0VUID0ge307XG4gICAgdGhpcy5fX0lOUFVUUyA9IFtdO1xuICAgIHRoaXMuX19UWCA9IG5ldyBUcmFuc2FjdGlvbjxUTnVtYmVyPigpO1xuICAgIHRoaXMuX19UWC52ZXJzaW9uID0gMjtcbiAgICB0aGlzLl9fVVNFX0xPV19SID0gZmFsc2U7XG4gICAgY29uc29sZS53YXJuKFxuICAgICAgJ0RlcHJlY2F0aW9uIFdhcm5pbmc6IFRyYW5zYWN0aW9uQnVpbGRlciB3aWxsIGJlIHJlbW92ZWQgaW4gdGhlIGZ1dHVyZS4gJyArXG4gICAgICAgICcodjYueC54IG9yIGxhdGVyKSBQbGVhc2UgdXNlIHRoZSBQc2J0IGNsYXNzIGluc3RlYWQuIEV4YW1wbGVzIG9mIHVzYWdlICcgK1xuICAgICAgICAnYXJlIGF2YWlsYWJsZSBpbiB0aGUgdHJhbnNhY3Rpb25zLXBzYnQuanMgaW50ZWdyYXRpb24gdGVzdCBmaWxlIG9uIG91ciAnICtcbiAgICAgICAgJ0dpdGh1Yi4gQSBoaWdoIGxldmVsIGV4cGxhbmF0aW9uIGlzIGF2YWlsYWJsZSBpbiB0aGUgcHNidC50cyBhbmQgcHNidC5qcyAnICtcbiAgICAgICAgJ2ZpbGVzIGFzIHdlbGwuJ1xuICAgICk7XG4gIH1cblxuICBzZXRMb3dSKHNldHRpbmc/OiBib29sZWFuKTogYm9vbGVhbiB7XG4gICAgdHlwZWZvcmNlKHR5cGVmb3JjZS5tYXliZSh0eXBlZm9yY2UuQm9vbGVhbiksIHNldHRpbmcpO1xuICAgIGlmIChzZXR0aW5nID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHNldHRpbmcgPSB0cnVlO1xuICAgIH1cbiAgICB0aGlzLl9fVVNFX0xPV19SID0gc2V0dGluZztcbiAgICByZXR1cm4gc2V0dGluZztcbiAgfVxuXG4gIHNldExvY2tUaW1lKGxvY2t0aW1lOiBudW1iZXIpOiB2b2lkIHtcbiAgICB0eXBlZm9yY2UodHlwZXMuVUludDMyLCBsb2NrdGltZSk7XG5cbiAgICAvLyBpZiBhbnkgc2lnbmF0dXJlcyBleGlzdCwgdGhyb3dcbiAgICBpZiAoXG4gICAgICB0aGlzLl9fSU5QVVRTLnNvbWUoKGlucHV0KSA9PiB7XG4gICAgICAgIGlmICghaW5wdXQuc2lnbmF0dXJlcykgcmV0dXJuIGZhbHNlO1xuXG4gICAgICAgIHJldHVybiBpbnB1dC5zaWduYXR1cmVzLnNvbWUoKHMpID0+IHMgIT09IHVuZGVmaW5lZCk7XG4gICAgICB9KVxuICAgICkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdObywgdGhpcyB3b3VsZCBpbnZhbGlkYXRlIHNpZ25hdHVyZXMnKTtcbiAgICB9XG5cbiAgICB0aGlzLl9fVFgubG9ja3RpbWUgPSBsb2NrdGltZTtcbiAgfVxuXG4gIHNldFZlcnNpb24odmVyc2lvbjogbnVtYmVyKTogdm9pZCB7XG4gICAgdHlwZWZvcmNlKHR5cGVzLlVJbnQzMiwgdmVyc2lvbik7XG5cbiAgICAvLyBYWFg6IHRoaXMgbWlnaHQgZXZlbnR1YWxseSBiZWNvbWUgbW9yZSBjb21wbGV4IGRlcGVuZGluZyBvbiB3aGF0IHRoZSB2ZXJzaW9ucyByZXByZXNlbnRcbiAgICB0aGlzLl9fVFgudmVyc2lvbiA9IHZlcnNpb247XG4gIH1cblxuICBhZGRJbnB1dChcbiAgICB0eEhhc2g6IEJ1ZmZlciB8IHN0cmluZyB8IFRyYW5zYWN0aW9uPFROdW1iZXI+LFxuICAgIHZvdXQ6IG51bWJlcixcbiAgICBzZXF1ZW5jZT86IG51bWJlcixcbiAgICBwcmV2T3V0U2NyaXB0PzogQnVmZmVyLFxuICAgIHZhbHVlPzogVE51bWJlclxuICApOiBudW1iZXIge1xuICAgIGlmICghdGhpcy5fX2Nhbk1vZGlmeUlucHV0cygpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ05vLCB0aGlzIHdvdWxkIGludmFsaWRhdGUgc2lnbmF0dXJlcycpO1xuICAgIH1cblxuICAgIC8vIGlzIGl0IGEgaGV4IHN0cmluZz9cbiAgICBpZiAodHhJc1N0cmluZyh0eEhhc2gpKSB7XG4gICAgICAvLyB0cmFuc2FjdGlvbiBoYXNocydzIGFyZSBkaXNwbGF5ZWQgaW4gcmV2ZXJzZSBvcmRlciwgdW4tcmV2ZXJzZSBpdFxuICAgICAgdHhIYXNoID0gYnVmZmVydXRpbHMucmV2ZXJzZUJ1ZmZlcihCdWZmZXIuZnJvbSh0eEhhc2gsICdoZXgnKSk7XG5cbiAgICAgIC8vIGlzIGl0IGEgVHJhbnNhY3Rpb24gb2JqZWN0P1xuICAgIH0gZWxzZSBpZiAodHhJc1RyYW5zYWN0aW9uKHR4SGFzaCkpIHtcbiAgICAgIGNvbnN0IHR4T3V0ID0gdHhIYXNoLm91dHNbdm91dF07XG4gICAgICBwcmV2T3V0U2NyaXB0ID0gdHhPdXQuc2NyaXB0O1xuICAgICAgdmFsdWUgPSAodHhPdXQgYXMgVHhPdXRwdXQ8VE51bWJlcj4pLnZhbHVlO1xuXG4gICAgICB0eEhhc2ggPSB0eEhhc2guZ2V0SGFzaChmYWxzZSkgYXMgQnVmZmVyO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLl9fYWRkSW5wdXRVbnNhZmUodHhIYXNoLCB2b3V0LCB7XG4gICAgICBzZXF1ZW5jZSxcbiAgICAgIHByZXZPdXRTY3JpcHQsXG4gICAgICB2YWx1ZSxcbiAgICB9KTtcbiAgfVxuXG4gIGFkZE91dHB1dChzY3JpcHRQdWJLZXk6IHN0cmluZyB8IEJ1ZmZlciwgdmFsdWU6IFROdW1iZXIpOiBudW1iZXIge1xuICAgIGlmICghdGhpcy5fX2Nhbk1vZGlmeU91dHB1dHMoKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdObywgdGhpcyB3b3VsZCBpbnZhbGlkYXRlIHNpZ25hdHVyZXMnKTtcbiAgICB9XG5cbiAgICAvLyBBdHRlbXB0IHRvIGdldCBhIHNjcmlwdCBpZiBpdCdzIGEgYmFzZTU4IG9yIGJlY2gzMiBhZGRyZXNzIHN0cmluZ1xuICAgIGlmICh0eXBlb2Ygc2NyaXB0UHViS2V5ID09PSAnc3RyaW5nJykge1xuICAgICAgc2NyaXB0UHViS2V5ID0gYmFkZHJlc3MudG9PdXRwdXRTY3JpcHQoc2NyaXB0UHViS2V5LCB0aGlzLm5ldHdvcmspO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLl9fVFguYWRkT3V0cHV0KHNjcmlwdFB1YktleSwgdmFsdWUpO1xuICB9XG5cbiAgYnVpbGQoKTogVHJhbnNhY3Rpb248VE51bWJlcj4ge1xuICAgIHJldHVybiB0aGlzLl9fYnVpbGQoZmFsc2UpO1xuICB9XG5cbiAgYnVpbGRJbmNvbXBsZXRlKCk6IFRyYW5zYWN0aW9uPFROdW1iZXI+IHtcbiAgICByZXR1cm4gdGhpcy5fX2J1aWxkKHRydWUpO1xuICB9XG5cbiAgc2lnbihcbiAgICBzaWduUGFyYW1zOiBudW1iZXIgfCBUeGJTaWduQXJnPFROdW1iZXI+LFxuICAgIGtleVBhaXI/OiBTaWduZXIsXG4gICAgcmVkZWVtU2NyaXB0PzogQnVmZmVyLFxuICAgIGhhc2hUeXBlPzogbnVtYmVyLFxuICAgIHdpdG5lc3NWYWx1ZT86IFROdW1iZXIsXG4gICAgd2l0bmVzc1NjcmlwdD86IEJ1ZmZlcixcbiAgICBjb250cm9sQmxvY2s/OiBCdWZmZXIsXG4gICAgYW5uZXg/OiBCdWZmZXJcbiAgKTogdm9pZCB7XG4gICAgdHJ5U2lnbjxUTnVtYmVyPihcbiAgICAgIGdldFNpZ25pbmdEYXRhPFROdW1iZXI+KFxuICAgICAgICB0aGlzLm5ldHdvcmssXG4gICAgICAgIHRoaXMuX19JTlBVVFMsXG4gICAgICAgIHRoaXMuX19uZWVkc091dHB1dHMuYmluZCh0aGlzKSxcbiAgICAgICAgdGhpcy5fX1RYLFxuICAgICAgICBzaWduUGFyYW1zLFxuICAgICAgICBrZXlQYWlyLFxuICAgICAgICByZWRlZW1TY3JpcHQsXG4gICAgICAgIGhhc2hUeXBlLFxuICAgICAgICB3aXRuZXNzVmFsdWUsXG4gICAgICAgIHdpdG5lc3NTY3JpcHQsXG4gICAgICAgIGNvbnRyb2xCbG9jayxcbiAgICAgICAgYW5uZXgsXG4gICAgICAgIHRoaXMuX19VU0VfTE9XX1JcbiAgICAgIClcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBfX2FkZElucHV0VW5zYWZlKHR4SGFzaDogQnVmZmVyLCB2b3V0OiBudW1iZXIsIG9wdGlvbnM6IFR4YklucHV0PFROdW1iZXI+KTogbnVtYmVyIHtcbiAgICBpZiAoVHJhbnNhY3Rpb24uaXNDb2luYmFzZUhhc2godHhIYXNoKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdjb2luYmFzZSBpbnB1dHMgbm90IHN1cHBvcnRlZCcpO1xuICAgIH1cblxuICAgIGNvbnN0IHByZXZUeE91dCA9IHR4SGFzaC50b1N0cmluZygnaGV4JykgKyAnOicgKyB2b3V0O1xuICAgIGlmICh0aGlzLl9fUFJFVl9UWF9TRVRbcHJldlR4T3V0XSAhPT0gdW5kZWZpbmVkKSB0aHJvdyBuZXcgRXJyb3IoJ0R1cGxpY2F0ZSBUeE91dDogJyArIHByZXZUeE91dCk7XG5cbiAgICBsZXQgaW5wdXQ6IFR4YklucHV0PFROdW1iZXI+ID0ge307XG5cbiAgICAvLyBkZXJpdmUgd2hhdCB3ZSBjYW4gZnJvbSB0aGUgc2NyaXB0U2lnXG4gICAgaWYgKG9wdGlvbnMuc2NyaXB0ICE9PSB1bmRlZmluZWQgfHwgb3B0aW9ucy53aXRuZXNzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGlucHV0ID0gZXhwYW5kSW5wdXQ8VE51bWJlcj4ob3B0aW9ucy5zY3JpcHQsIG9wdGlvbnMud2l0bmVzcyk7XG4gICAgfVxuXG4gICAgLy8gaWYgYW4gaW5wdXQgdmFsdWUgd2FzIGdpdmVuLCByZXRhaW4gaXRcbiAgICBpZiAob3B0aW9ucy52YWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBpbnB1dC52YWx1ZSA9IG9wdGlvbnMudmFsdWU7XG4gICAgfVxuXG4gICAgLy8gZGVyaXZlIHdoYXQgd2UgY2FuIGZyb20gdGhlIHByZXZpb3VzIHRyYW5zYWN0aW9ucyBvdXRwdXQgc2NyaXB0XG4gICAgaWYgKCFpbnB1dC5wcmV2T3V0U2NyaXB0ICYmIG9wdGlvbnMucHJldk91dFNjcmlwdCkge1xuICAgICAgbGV0IHByZXZPdXRUeXBlO1xuXG4gICAgICBpZiAoIWlucHV0LnB1YmtleXMgJiYgIWlucHV0LnNpZ25hdHVyZXMpIHtcbiAgICAgICAgY29uc3QgZXhwYW5kZWQgPSBleHBhbmRPdXRwdXQob3B0aW9ucy5wcmV2T3V0U2NyaXB0KTtcbiAgICAgICAgaWYgKGV4cGFuZGVkLnB1YmtleXMpIHtcbiAgICAgICAgICBpbnB1dC5wdWJrZXlzID0gZXhwYW5kZWQucHVia2V5cztcbiAgICAgICAgICBpbnB1dC5zaWduYXR1cmVzID0gZXhwYW5kZWQuc2lnbmF0dXJlcztcbiAgICAgICAgfVxuXG4gICAgICAgIHByZXZPdXRUeXBlID0gZXhwYW5kZWQudHlwZTtcbiAgICAgIH1cblxuICAgICAgaW5wdXQucHJldk91dFNjcmlwdCA9IG9wdGlvbnMucHJldk91dFNjcmlwdDtcbiAgICAgIGlucHV0LnByZXZPdXRUeXBlID0gcHJldk91dFR5cGUgfHwgY2xhc3NpZnkub3V0cHV0KG9wdGlvbnMucHJldk91dFNjcmlwdCk7XG4gICAgfVxuXG4gICAgY29uc3QgdmluID0gdGhpcy5fX1RYLmFkZElucHV0KHR4SGFzaCwgdm91dCwgb3B0aW9ucy5zZXF1ZW5jZSwgb3B0aW9ucy5zY3JpcHRTaWcpO1xuICAgIHRoaXMuX19JTlBVVFNbdmluXSA9IGlucHV0O1xuICAgIHRoaXMuX19QUkVWX1RYX1NFVFtwcmV2VHhPdXRdID0gdHJ1ZTtcbiAgICByZXR1cm4gdmluO1xuICB9XG5cbiAgcHJpdmF0ZSBfX2J1aWxkKGFsbG93SW5jb21wbGV0ZT86IGJvb2xlYW4pOiBUcmFuc2FjdGlvbjxUTnVtYmVyPiB7XG4gICAgaWYgKCFhbGxvd0luY29tcGxldGUpIHtcbiAgICAgIGlmICghdGhpcy5fX1RYLmlucy5sZW5ndGgpIHRocm93IG5ldyBFcnJvcignVHJhbnNhY3Rpb24gaGFzIG5vIGlucHV0cycpO1xuICAgICAgaWYgKCF0aGlzLl9fVFgub3V0cy5sZW5ndGgpIHRocm93IG5ldyBFcnJvcignVHJhbnNhY3Rpb24gaGFzIG5vIG91dHB1dHMnKTtcbiAgICB9XG5cbiAgICBjb25zdCB0eCA9IHRoaXMuX19UWC5jbG9uZSgpO1xuXG4gICAgLy8gY3JlYXRlIHNjcmlwdCBzaWduYXR1cmVzIGZyb20gaW5wdXRzXG4gICAgdGhpcy5fX0lOUFVUUy5mb3JFYWNoKChpbnB1dCwgaSkgPT4ge1xuICAgICAgaWYgKCFpbnB1dC5wcmV2T3V0VHlwZSAmJiAhYWxsb3dJbmNvbXBsZXRlKSB0aHJvdyBuZXcgRXJyb3IoJ1RyYW5zYWN0aW9uIGlzIG5vdCBjb21wbGV0ZScpO1xuXG4gICAgICBjb25zdCByZXN1bHQgPSBidWlsZDxUTnVtYmVyPihpbnB1dC5wcmV2T3V0VHlwZSEsIGlucHV0LCBhbGxvd0luY29tcGxldGUpO1xuICAgICAgaWYgKCFyZXN1bHQpIHtcbiAgICAgICAgaWYgKCFhbGxvd0luY29tcGxldGUgJiYgaW5wdXQucHJldk91dFR5cGUgPT09IFNDUklQVF9UWVBFUy5OT05TVEFOREFSRCkgdGhyb3cgbmV3IEVycm9yKCdVbmtub3duIGlucHV0IHR5cGUnKTtcbiAgICAgICAgaWYgKCFhbGxvd0luY29tcGxldGUpIHRocm93IG5ldyBFcnJvcignTm90IGVub3VnaCBpbmZvcm1hdGlvbicpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGlmIChyZXN1bHQuaW5wdXQpIHtcbiAgICAgICAgdHguc2V0SW5wdXRTY3JpcHQoaSwgcmVzdWx0LmlucHV0KTtcbiAgICAgIH1cbiAgICAgIHR4LnNldFdpdG5lc3MoaSwgcmVzdWx0LndpdG5lc3MhKTtcbiAgICB9KTtcblxuICAgIGlmICghYWxsb3dJbmNvbXBsZXRlKSB7XG4gICAgICAvLyBkbyBub3QgcmVseSBvbiB0aGlzLCBpdHMgbWVyZWx5IGEgbGFzdCByZXNvcnRcbiAgICAgIGlmICh0aGlzLl9fb3Zlck1heGltdW1GZWVzKHR4LnZpcnR1YWxTaXplKCkpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignVHJhbnNhY3Rpb24gaGFzIGFic3VyZCBmZWVzJyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHR4O1xuICB9XG5cbiAgcHJpdmF0ZSBfX2Nhbk1vZGlmeUlucHV0cygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5fX0lOUFVUUy5ldmVyeSgoaW5wdXQpID0+IHtcbiAgICAgIGlmICghaW5wdXQuc2lnbmF0dXJlcykgcmV0dXJuIHRydWU7XG5cbiAgICAgIHJldHVybiBpbnB1dC5zaWduYXR1cmVzLmV2ZXJ5KChzaWduYXR1cmUpID0+IHtcbiAgICAgICAgaWYgKCFzaWduYXR1cmUpIHJldHVybiB0cnVlO1xuICAgICAgICBjb25zdCBoYXNoVHlwZSA9IHNpZ25hdHVyZUhhc2hUeXBlKHNpZ25hdHVyZSk7XG5cbiAgICAgICAgLy8gaWYgU0lHSEFTSF9BTllPTkVDQU5QQVkgaXMgc2V0LCBzaWduYXR1cmVzIHdvdWxkIG5vdFxuICAgICAgICAvLyBiZSBpbnZhbGlkYXRlZCBieSBtb3JlIGlucHV0c1xuICAgICAgICByZXR1cm4gKGhhc2hUeXBlICYgVHJhbnNhY3Rpb24uU0lHSEFTSF9BTllPTkVDQU5QQVkpICE9PSAwO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIF9fbmVlZHNPdXRwdXRzKHNpZ25pbmdIYXNoVHlwZTogbnVtYmVyKTogYm9vbGVhbiB7XG4gICAgaWYgKHNpZ25pbmdIYXNoVHlwZSA9PT0gVHJhbnNhY3Rpb24uU0lHSEFTSF9BTEwgfHwgc2lnbmluZ0hhc2hUeXBlID09PSBUcmFuc2FjdGlvbi5TSUdIQVNIX0RFRkFVTFQpIHtcbiAgICAgIHJldHVybiB0aGlzLl9fVFgub3V0cy5sZW5ndGggPT09IDA7XG4gICAgfVxuXG4gICAgLy8gaWYgaW5wdXRzIGFyZSBiZWluZyBzaWduZWQgd2l0aCBTSUdIQVNIX05PTkUsIHdlIGRvbid0IHN0cmljdGx5IG5lZWQgb3V0cHV0c1xuICAgIC8vIC5idWlsZCgpIHdpbGwgZmFpbCwgYnV0IC5idWlsZEluY29tcGxldGUoKSBpcyBPS1xuICAgIHJldHVybiAoXG4gICAgICB0aGlzLl9fVFgub3V0cy5sZW5ndGggPT09IDAgJiZcbiAgICAgIHRoaXMuX19JTlBVVFMuc29tZSgoaW5wdXQpID0+IHtcbiAgICAgICAgaWYgKCFpbnB1dC5zaWduYXR1cmVzKSByZXR1cm4gZmFsc2U7XG5cbiAgICAgICAgcmV0dXJuIGlucHV0LnNpZ25hdHVyZXMuc29tZSgoc2lnbmF0dXJlKSA9PiB7XG4gICAgICAgICAgaWYgKCFzaWduYXR1cmUpIHJldHVybiBmYWxzZTsgLy8gbm8gc2lnbmF0dXJlLCBubyBpc3N1ZVxuICAgICAgICAgIGNvbnN0IGhhc2hUeXBlID0gc2lnbmF0dXJlSGFzaFR5cGUoc2lnbmF0dXJlKTtcbiAgICAgICAgICBpZiAoaGFzaFR5cGUgJiBUcmFuc2FjdGlvbi5TSUdIQVNIX05PTkUpIHJldHVybiBmYWxzZTsgLy8gU0lHSEFTSF9OT05FIGRvZXNuJ3QgY2FyZSBhYm91dCBvdXRwdXRzXG4gICAgICAgICAgcmV0dXJuIHRydWU7IC8vIFNJR0hBU0hfKiBkb2VzIGNhcmVcbiAgICAgICAgfSk7XG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIF9fY2FuTW9kaWZ5T3V0cHV0cygpOiBib29sZWFuIHtcbiAgICBjb25zdCBuSW5wdXRzID0gdGhpcy5fX1RYLmlucy5sZW5ndGg7XG4gICAgY29uc3Qgbk91dHB1dHMgPSB0aGlzLl9fVFgub3V0cy5sZW5ndGg7XG5cbiAgICByZXR1cm4gdGhpcy5fX0lOUFVUUy5ldmVyeSgoaW5wdXQpID0+IHtcbiAgICAgIGlmIChpbnB1dC5zaWduYXR1cmVzID09PSB1bmRlZmluZWQpIHJldHVybiB0cnVlO1xuXG4gICAgICByZXR1cm4gaW5wdXQuc2lnbmF0dXJlcy5ldmVyeSgoc2lnbmF0dXJlKSA9PiB7XG4gICAgICAgIGlmICghc2lnbmF0dXJlKSByZXR1cm4gdHJ1ZTtcbiAgICAgICAgY29uc3QgaGFzaFR5cGUgPSBzaWduYXR1cmVIYXNoVHlwZShzaWduYXR1cmUpO1xuXG4gICAgICAgIGNvbnN0IGhhc2hUeXBlTW9kID0gaGFzaFR5cGUgJiAweDFmO1xuICAgICAgICBpZiAoaGFzaFR5cGVNb2QgPT09IFRyYW5zYWN0aW9uLlNJR0hBU0hfTk9ORSkgcmV0dXJuIHRydWU7XG4gICAgICAgIGlmIChoYXNoVHlwZU1vZCA9PT0gVHJhbnNhY3Rpb24uU0lHSEFTSF9TSU5HTEUpIHtcbiAgICAgICAgICAvLyBpZiBTSUdIQVNIX1NJTkdMRSBpcyBzZXQsIGFuZCBuSW5wdXRzID4gbk91dHB1dHNcbiAgICAgICAgICAvLyBzb21lIHNpZ25hdHVyZXMgd291bGQgYmUgaW52YWxpZGF0ZWQgYnkgdGhlIGFkZGl0aW9uXG4gICAgICAgICAgLy8gb2YgbW9yZSBvdXRwdXRzXG4gICAgICAgICAgcmV0dXJuIG5JbnB1dHMgPD0gbk91dHB1dHM7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIF9fb3Zlck1heGltdW1GZWVzKGJ5dGVzOiBudW1iZXIpOiBib29sZWFuIHtcbiAgICAvLyBub3QgYWxsIGlucHV0cyB3aWxsIGhhdmUgLnZhbHVlIGRlZmluZWRcbiAgICBjb25zdCBpbmNvbWluZyA9IHRoaXMuX19JTlBVVFMucmVkdWNlKFxuICAgICAgKGEsIHgpID0+IGEgKyAodHlwZW9mIHgudmFsdWUgIT09ICd1bmRlZmluZWQnID8gQmlnSW50KHgudmFsdWUpIDogQmlnSW50KDApKSxcbiAgICAgIEJpZ0ludCgwKVxuICAgICk7XG5cbiAgICAvLyBidXQgYWxsIG91dHB1dHMgZG8sIGFuZCBpZiB3ZSBoYXZlIGFueSBpbnB1dCB2YWx1ZVxuICAgIC8vIHdlIGNhbiBpbW1lZGlhdGVseSBkZXRlcm1pbmUgaWYgdGhlIG91dHB1dHMgYXJlIHRvbyBzbWFsbFxuICAgIGNvbnN0IG91dGdvaW5nID0gdGhpcy5fX1RYLm91dHMucmVkdWNlKChhLCB4KSA9PiBhICsgQmlnSW50KCh4IGFzIFR4T3V0cHV0PFROdW1iZXI+KS52YWx1ZSksIEJpZ0ludCgwKSk7XG4gICAgY29uc3QgZmVlID0gaW5jb21pbmcgLSBvdXRnb2luZztcbiAgICBjb25zdCBmZWVSYXRlID0gTnVtYmVyKGZlZSkgLyBieXRlczsgLy8gYXNzdW1lIGZlZSBmaXRzIHdpdGhpbiBudW1iZXJcblxuICAgIHJldHVybiBmZWVSYXRlID4gdGhpcy5tYXhpbXVtRmVlUmF0ZTtcbiAgfVxufVxuXG5mdW5jdGlvbiBleHBhbmRJbnB1dDxUTnVtYmVyIGV4dGVuZHMgbnVtYmVyIHwgYmlnaW50ID0gbnVtYmVyPihcbiAgc2NyaXB0U2lnPzogQnVmZmVyLFxuICB3aXRuZXNzU3RhY2s6IEJ1ZmZlcltdID0gW10sXG4gIHR5cGU/OiBzdHJpbmcsXG4gIHNjcmlwdFB1YktleT86IEJ1ZmZlclxuKTogVHhiSW5wdXQ8VE51bWJlcj4ge1xuICBpZiAoc2NyaXB0U2lnICYmIHNjcmlwdFNpZy5sZW5ndGggPT09IDAgJiYgd2l0bmVzc1N0YWNrLmxlbmd0aCA9PT0gMCkgcmV0dXJuIHt9O1xuICBpZiAoIXR5cGUpIHtcbiAgICBsZXQgc3NUeXBlOiBzdHJpbmcgfCB1bmRlZmluZWQgPSBzY3JpcHRTaWcgPyBjbGFzc2lmeS5pbnB1dChzY3JpcHRTaWcsIHRydWUpIDogdW5kZWZpbmVkO1xuICAgIGxldCB3c1R5cGU6IHN0cmluZyB8IHVuZGVmaW5lZCA9IGNsYXNzaWZ5LndpdG5lc3Mod2l0bmVzc1N0YWNrLCB0cnVlKTtcbiAgICBpZiAoc3NUeXBlID09PSBTQ1JJUFRfVFlQRVMuTk9OU1RBTkRBUkQpIHNzVHlwZSA9IHVuZGVmaW5lZDtcbiAgICBpZiAod3NUeXBlID09PSBTQ1JJUFRfVFlQRVMuTk9OU1RBTkRBUkQpIHdzVHlwZSA9IHVuZGVmaW5lZDtcbiAgICB0eXBlID0gc3NUeXBlIHx8IHdzVHlwZTtcbiAgfVxuXG4gIHN3aXRjaCAodHlwZSkge1xuICAgIGNhc2UgU0NSSVBUX1RZUEVTLlAyV1BLSDoge1xuICAgICAgY29uc3QgeyBvdXRwdXQsIHB1YmtleSwgc2lnbmF0dXJlIH0gPSBwYXltZW50cy5wMndwa2goe1xuICAgICAgICB3aXRuZXNzOiB3aXRuZXNzU3RhY2ssXG4gICAgICB9KTtcblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgcHJldk91dFNjcmlwdDogb3V0cHV0LFxuICAgICAgICBwcmV2T3V0VHlwZTogU0NSSVBUX1RZUEVTLlAyV1BLSCxcbiAgICAgICAgcHVia2V5czogW3B1YmtleV0sXG4gICAgICAgIHNpZ25hdHVyZXM6IFtzaWduYXR1cmVdLFxuICAgICAgfTtcbiAgICB9XG5cbiAgICBjYXNlIFNDUklQVF9UWVBFUy5QMlBLSDoge1xuICAgICAgY29uc3QgeyBvdXRwdXQsIHB1YmtleSwgc2lnbmF0dXJlIH0gPSBwYXltZW50cy5wMnBraCh7XG4gICAgICAgIGlucHV0OiBzY3JpcHRTaWcsXG4gICAgICB9KTtcblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgcHJldk91dFNjcmlwdDogb3V0cHV0LFxuICAgICAgICBwcmV2T3V0VHlwZTogU0NSSVBUX1RZUEVTLlAyUEtILFxuICAgICAgICBwdWJrZXlzOiBbcHVia2V5XSxcbiAgICAgICAgc2lnbmF0dXJlczogW3NpZ25hdHVyZV0sXG4gICAgICB9O1xuICAgIH1cblxuICAgIGNhc2UgU0NSSVBUX1RZUEVTLlAyUEs6IHtcbiAgICAgIGNvbnN0IHsgc2lnbmF0dXJlIH0gPSBwYXltZW50cy5wMnBrKHsgaW5wdXQ6IHNjcmlwdFNpZyB9KTtcblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgcHJldk91dFR5cGU6IFNDUklQVF9UWVBFUy5QMlBLLFxuICAgICAgICBwdWJrZXlzOiBbdW5kZWZpbmVkXSxcbiAgICAgICAgc2lnbmF0dXJlczogW3NpZ25hdHVyZV0sXG4gICAgICB9O1xuICAgIH1cblxuICAgIGNhc2UgU0NSSVBUX1RZUEVTLlAyTVM6IHtcbiAgICAgIGNvbnN0IHsgbSwgcHVia2V5cywgc2lnbmF0dXJlcyB9ID0gcGF5bWVudHMucDJtcyhcbiAgICAgICAge1xuICAgICAgICAgIGlucHV0OiBzY3JpcHRTaWcsXG4gICAgICAgICAgb3V0cHV0OiBzY3JpcHRQdWJLZXksXG4gICAgICAgIH0sXG4gICAgICAgIHsgYWxsb3dJbmNvbXBsZXRlOiB0cnVlIH1cbiAgICAgICk7XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIHByZXZPdXRUeXBlOiBTQ1JJUFRfVFlQRVMuUDJNUyxcbiAgICAgICAgcHVia2V5cyxcbiAgICAgICAgc2lnbmF0dXJlcyxcbiAgICAgICAgbWF4U2lnbmF0dXJlczogbSxcbiAgICAgIH07XG4gICAgfVxuXG4gICAgY2FzZSBTQ1JJUFRfVFlQRVMuUDJUUl9OUzoge1xuICAgICAgY29uc3QgeyBuLCBwdWJrZXlzLCBzaWduYXR1cmVzIH0gPSBwMnRyUGF5bWVudHMucDJ0cl9ucyhcbiAgICAgICAge1xuICAgICAgICAgIC8vIFdpdG5lc3Mgc2lnbmF0dXJlcyBhcmUgcmV2ZXJzZSBvZiBwdWJrZXlzLCBiZWNhdXNlIGl0J3MgYSBzdGFja1xuICAgICAgICAgIHNpZ25hdHVyZXM6IHdpdG5lc3NTdGFjay5sZW5ndGggPyB3aXRuZXNzU3RhY2sucmV2ZXJzZSgpIDogdW5kZWZpbmVkLFxuICAgICAgICAgIG91dHB1dDogc2NyaXB0UHViS2V5LFxuICAgICAgICB9LFxuICAgICAgICB7IGFsbG93SW5jb21wbGV0ZTogdHJ1ZSwgZWNjTGliIH1cbiAgICAgICk7XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIHByZXZPdXRUeXBlOiBTQ1JJUFRfVFlQRVMuUDJUUl9OUyxcbiAgICAgICAgcHVia2V5cyxcbiAgICAgICAgc2lnbmF0dXJlcyxcbiAgICAgICAgbWF4U2lnbmF0dXJlczogbixcbiAgICAgIH07XG4gICAgfVxuICB9XG5cbiAgaWYgKHR5cGUgPT09IFNDUklQVF9UWVBFUy5QMlNIKSB7XG4gICAgY29uc3QgeyBvdXRwdXQsIHJlZGVlbSB9ID0gcGF5bWVudHMucDJzaCh7XG4gICAgICBpbnB1dDogc2NyaXB0U2lnLFxuICAgICAgd2l0bmVzczogd2l0bmVzc1N0YWNrLFxuICAgIH0pO1xuXG4gICAgY29uc3Qgb3V0cHV0VHlwZSA9IGNsYXNzaWZ5Lm91dHB1dChyZWRlZW0hLm91dHB1dCEpO1xuICAgIGNvbnN0IGV4cGFuZGVkID0gZXhwYW5kSW5wdXQ8VE51bWJlcj4ocmVkZWVtIS5pbnB1dCEsIHJlZGVlbSEud2l0bmVzcyEsIG91dHB1dFR5cGUsIHJlZGVlbSEub3V0cHV0KTtcbiAgICBpZiAoIWV4cGFuZGVkLnByZXZPdXRUeXBlKSByZXR1cm4ge307XG5cbiAgICByZXR1cm4ge1xuICAgICAgcHJldk91dFNjcmlwdDogb3V0cHV0LFxuICAgICAgcHJldk91dFR5cGU6IFNDUklQVF9UWVBFUy5QMlNILFxuICAgICAgcmVkZWVtU2NyaXB0OiByZWRlZW0hLm91dHB1dCxcbiAgICAgIHJlZGVlbVNjcmlwdFR5cGU6IGV4cGFuZGVkLnByZXZPdXRUeXBlLFxuICAgICAgd2l0bmVzc1NjcmlwdDogZXhwYW5kZWQud2l0bmVzc1NjcmlwdCxcbiAgICAgIHdpdG5lc3NTY3JpcHRUeXBlOiBleHBhbmRlZC53aXRuZXNzU2NyaXB0VHlwZSxcblxuICAgICAgcHVia2V5czogZXhwYW5kZWQucHVia2V5cyxcbiAgICAgIHNpZ25hdHVyZXM6IGV4cGFuZGVkLnNpZ25hdHVyZXMsXG4gICAgfTtcbiAgfVxuXG4gIGlmICh0eXBlID09PSBTQ1JJUFRfVFlQRVMuUDJXU0gpIHtcbiAgICBjb25zdCB7IG91dHB1dCwgcmVkZWVtIH0gPSBwYXltZW50cy5wMndzaCh7XG4gICAgICBpbnB1dDogc2NyaXB0U2lnLFxuICAgICAgd2l0bmVzczogd2l0bmVzc1N0YWNrLFxuICAgIH0pO1xuICAgIGNvbnN0IG91dHB1dFR5cGUgPSBjbGFzc2lmeS5vdXRwdXQocmVkZWVtIS5vdXRwdXQhKTtcbiAgICBsZXQgZXhwYW5kZWQ7XG4gICAgaWYgKG91dHB1dFR5cGUgPT09IFNDUklQVF9UWVBFUy5QMldQS0gpIHtcbiAgICAgIGV4cGFuZGVkID0gZXhwYW5kSW5wdXQ8VE51bWJlcj4ocmVkZWVtIS5pbnB1dCEsIHJlZGVlbSEud2l0bmVzcyEsIG91dHB1dFR5cGUpO1xuICAgIH0gZWxzZSB7XG4gICAgICBleHBhbmRlZCA9IGV4cGFuZElucHV0PFROdW1iZXI+KGJzY3JpcHQuY29tcGlsZShyZWRlZW0hLndpdG5lc3MhKSwgW10sIG91dHB1dFR5cGUsIHJlZGVlbSEub3V0cHV0KTtcbiAgICB9XG4gICAgaWYgKCFleHBhbmRlZC5wcmV2T3V0VHlwZSkgcmV0dXJuIHt9O1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIHByZXZPdXRTY3JpcHQ6IG91dHB1dCxcbiAgICAgIHByZXZPdXRUeXBlOiBTQ1JJUFRfVFlQRVMuUDJXU0gsXG4gICAgICB3aXRuZXNzU2NyaXB0OiByZWRlZW0hLm91dHB1dCxcbiAgICAgIHdpdG5lc3NTY3JpcHRUeXBlOiBleHBhbmRlZC5wcmV2T3V0VHlwZSxcblxuICAgICAgcHVia2V5czogZXhwYW5kZWQucHVia2V5cyxcbiAgICAgIHNpZ25hdHVyZXM6IGV4cGFuZGVkLnNpZ25hdHVyZXMsXG4gICAgfTtcbiAgfVxuXG4gIGlmICh0eXBlID09PSBTQ1JJUFRfVFlQRVMuUDJUUikge1xuICAgIGNvbnN0IHBhcnNlZFdpdG5lc3MgPSB0YXByb290LnBhcnNlVGFwcm9vdFdpdG5lc3Mod2l0bmVzc1N0YWNrKTtcbiAgICBpZiAocGFyc2VkV2l0bmVzcy5zcGVuZFR5cGUgPT09ICdLZXknKSB7XG4gICAgICAvLyBrZXkgcGF0aCBzcGVuZCwgbm90aGluZyB0byBleHBhbmRcbiAgICAgIGNvbnN0IHsgc2lnbmF0dXJlLCBhbm5leCB9ID0gcGFyc2VkV2l0bmVzcztcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHByZXZPdXRUeXBlOiBTQ1JJUFRfVFlQRVMuUDJUUixcbiAgICAgICAgc2lnbmF0dXJlczogW3NpZ25hdHVyZV0sXG4gICAgICAgIGFubmV4LFxuICAgICAgfTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gc2NyaXB0IHBhdGggc3BlbmRcbiAgICAgIGNvbnN0IHsgdGFwc2NyaXB0LCBjb250cm9sQmxvY2ssIGFubmV4IH0gPSBwYXJzZWRXaXRuZXNzO1xuICAgICAgY29uc3QgcHJldk91dFNjcmlwdCA9IHAydHJQYXltZW50cy5wMnRyKFxuICAgICAgICB7XG4gICAgICAgICAgcmVkZWVtczogW3sgb3V0cHV0OiB0YXBzY3JpcHQgfV0sXG4gICAgICAgICAgcmVkZWVtSW5kZXg6IDAsXG4gICAgICAgICAgY29udHJvbEJsb2NrLFxuICAgICAgICAgIGFubmV4LFxuICAgICAgICB9LFxuICAgICAgICB7IGVjY0xpYiB9XG4gICAgICApLm91dHB1dDtcbiAgICAgIGNvbnN0IHdpdG5lc3NTY3JpcHRUeXBlID0gY2xhc3NpZnkub3V0cHV0KHRhcHNjcmlwdCk7XG4gICAgICBjb25zdCB7IHB1YmtleXMsIHNpZ25hdHVyZXMgfSA9IGV4cGFuZElucHV0PFROdW1iZXI+KFxuICAgICAgICB1bmRlZmluZWQsXG4gICAgICAgIHBhcnNlZFdpdG5lc3Muc2NyaXB0U2lnLFxuICAgICAgICB3aXRuZXNzU2NyaXB0VHlwZSxcbiAgICAgICAgdGFwc2NyaXB0XG4gICAgICApO1xuXG4gICAgICByZXR1cm4ge1xuICAgICAgICBwcmV2T3V0U2NyaXB0LFxuICAgICAgICBwcmV2T3V0VHlwZTogU0NSSVBUX1RZUEVTLlAyVFIsXG4gICAgICAgIHdpdG5lc3NTY3JpcHQ6IHRhcHNjcmlwdCxcbiAgICAgICAgd2l0bmVzc1NjcmlwdFR5cGUsXG5cbiAgICAgICAgY29udHJvbEJsb2NrLFxuICAgICAgICBhbm5leCxcblxuICAgICAgICBwdWJrZXlzLFxuICAgICAgICBzaWduYXR1cmVzLFxuICAgICAgfTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4ge1xuICAgIHByZXZPdXRUeXBlOiBTQ1JJUFRfVFlQRVMuTk9OU1RBTkRBUkQsXG4gICAgcHJldk91dFNjcmlwdDogc2NyaXB0U2lnLFxuICB9O1xufVxuXG4vLyBjb3VsZCBiZSBkb25lIGluIGV4cGFuZElucHV0LCBidXQgcmVxdWlyZXMgdGhlIG9yaWdpbmFsIFRyYW5zYWN0aW9uIGZvciBoYXNoRm9yU2lnbmF0dXJlXG5mdW5jdGlvbiBmaXhNdWx0aXNpZ09yZGVyPFROdW1iZXIgZXh0ZW5kcyBudW1iZXIgfCBiaWdpbnQgPSBudW1iZXI+KFxuICBpbnB1dDogVHhiSW5wdXQ8VE51bWJlcj4sXG4gIHRyYW5zYWN0aW9uOiBUcmFuc2FjdGlvbjxUTnVtYmVyPixcbiAgdmluOiBudW1iZXIsXG4gIHByZXZPdXRwdXRzPzogVHhPdXRwdXQ8VE51bWJlcj5bXVxuKTogdm9pZCB7XG4gIGlmIChpbnB1dC5yZWRlZW1TY3JpcHRUeXBlICE9PSBTQ1JJUFRfVFlQRVMuUDJNUyB8fCAhaW5wdXQucmVkZWVtU2NyaXB0KSByZXR1cm47XG4gIGlmIChpbnB1dC5wdWJrZXlzIS5sZW5ndGggPT09IGlucHV0LnNpZ25hdHVyZXMhLmxlbmd0aCkgcmV0dXJuO1xuICBjb25zdCBwcmV2T3V0cHV0ID0gcHJldk91dHB1dHMgJiYgcHJldk91dHB1dHNbdmluXTtcblxuICBjb25zdCB1bm1hdGNoZWQgPSBpbnB1dC5zaWduYXR1cmVzIS5jb25jYXQoKTtcblxuICBpbnB1dC5zaWduYXR1cmVzID0gaW5wdXQucHVia2V5cyEubWFwKChwdWJLZXkpID0+IHtcbiAgICBjb25zdCBrZXlQYWlyID0gRUNQYWlyLmZyb21QdWJsaWNLZXkocHViS2V5ISk7XG4gICAgbGV0IG1hdGNoOiBCdWZmZXIgfCB1bmRlZmluZWQ7XG5cbiAgICAvLyBjaGVjayBmb3IgYSBzaWduYXR1cmVcbiAgICB1bm1hdGNoZWQuc29tZSgoc2lnbmF0dXJlLCBpKSA9PiB7XG4gICAgICAvLyBza2lwIGlmIHVuZGVmaW5lZCB8fCBPUF8wXG4gICAgICBpZiAoIXNpZ25hdHVyZSkgcmV0dXJuIGZhbHNlO1xuXG4gICAgICAvLyBUT0RPOiBhdm9pZCBPKG4pIGhhc2hGb3JTaWduYXR1cmVcbiAgICAgIGNvbnN0IHBhcnNlZCA9IGJzY3JpcHQuc2lnbmF0dXJlLmRlY29kZShzaWduYXR1cmUpO1xuICAgICAgY29uc3QgaGFzaCA9IHRyYW5zYWN0aW9uLmhhc2hGb3JTaWduYXR1cmUodmluLCBpbnB1dC5yZWRlZW1TY3JpcHQhLCBwYXJzZWQuaGFzaFR5cGUsIHByZXZPdXRwdXQ/LnZhbHVlKTtcblxuICAgICAgLy8gc2tpcCBpZiBzaWduYXR1cmUgZG9lcyBub3QgbWF0Y2ggcHViS2V5XG4gICAgICBpZiAoIWtleVBhaXIudmVyaWZ5KGhhc2gsIHBhcnNlZC5zaWduYXR1cmUpKSByZXR1cm4gZmFsc2U7XG5cbiAgICAgIC8vIHJlbW92ZSBtYXRjaGVkIHNpZ25hdHVyZSBmcm9tIHVubWF0Y2hlZFxuICAgICAgdW5tYXRjaGVkW2ldID0gdW5kZWZpbmVkO1xuICAgICAgbWF0Y2ggPSBzaWduYXR1cmU7XG5cbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIG1hdGNoO1xuICB9KTtcbn1cblxuZnVuY3Rpb24gZXhwYW5kT3V0cHV0KHNjcmlwdDogQnVmZmVyLCBvdXJQdWJLZXk/OiBCdWZmZXIsIGNvbnRyb2xCbG9jaz86IEJ1ZmZlcik6IFR4Yk91dHB1dCB7XG4gIHR5cGVmb3JjZSh0eXBlcy5CdWZmZXIsIHNjcmlwdCk7XG4gIGNvbnN0IHR5cGUgPSBjbGFzc2lmeS5vdXRwdXQoc2NyaXB0KTtcblxuICBzd2l0Y2ggKHR5cGUpIHtcbiAgICBjYXNlIFNDUklQVF9UWVBFUy5QMlBLSDoge1xuICAgICAgaWYgKCFvdXJQdWJLZXkpIHJldHVybiB7IHR5cGUgfTtcblxuICAgICAgLy8gZG9lcyBvdXIgaGFzaDE2MChwdWJLZXkpIG1hdGNoIHRoZSBvdXRwdXQgc2NyaXB0cz9cbiAgICAgIGNvbnN0IHBraDEgPSBwYXltZW50cy5wMnBraCh7IG91dHB1dDogc2NyaXB0IH0pLmhhc2g7XG4gICAgICBjb25zdCBwa2gyID0gYmNyeXB0by5oYXNoMTYwKG91clB1YktleSk7XG4gICAgICBpZiAoIXBraDEhLmVxdWFscyhwa2gyKSkgcmV0dXJuIHsgdHlwZSB9O1xuXG4gICAgICByZXR1cm4ge1xuICAgICAgICB0eXBlLFxuICAgICAgICBwdWJrZXlzOiBbb3VyUHViS2V5XSxcbiAgICAgICAgc2lnbmF0dXJlczogW3VuZGVmaW5lZF0sXG4gICAgICB9O1xuICAgIH1cblxuICAgIGNhc2UgU0NSSVBUX1RZUEVTLlAyV1BLSDoge1xuICAgICAgaWYgKCFvdXJQdWJLZXkpIHJldHVybiB7IHR5cGUgfTtcblxuICAgICAgLy8gZG9lcyBvdXIgaGFzaDE2MChwdWJLZXkpIG1hdGNoIHRoZSBvdXRwdXQgc2NyaXB0cz9cbiAgICAgIGNvbnN0IHdwa2gxID0gcGF5bWVudHMucDJ3cGtoKHsgb3V0cHV0OiBzY3JpcHQgfSkuaGFzaDtcbiAgICAgIGNvbnN0IHdwa2gyID0gYmNyeXB0by5oYXNoMTYwKG91clB1YktleSk7XG4gICAgICBpZiAoIXdwa2gxIS5lcXVhbHMod3BraDIpKSByZXR1cm4geyB0eXBlIH07XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIHR5cGUsXG4gICAgICAgIHB1YmtleXM6IFtvdXJQdWJLZXldLFxuICAgICAgICBzaWduYXR1cmVzOiBbdW5kZWZpbmVkXSxcbiAgICAgIH07XG4gICAgfVxuXG4gICAgY2FzZSBTQ1JJUFRfVFlQRVMuUDJUUjoge1xuICAgICAgaWYgKCFvdXJQdWJLZXkpIHJldHVybiB7IHR5cGUgfTtcbiAgICAgIC8vIEhBQ0sgb3VyUHViS2V5IHRvIEJJUDM0MC1zdHlsZVxuICAgICAgaWYgKG91clB1YktleS5sZW5ndGggPT09IDMzKSBvdXJQdWJLZXkgPSBvdXJQdWJLZXkuc2xpY2UoMSk7XG4gICAgICAvLyBUT0RPOiBzdXBwb3J0IG11bHRpcGxlIHB1YmtleXNcbiAgICAgIGNvbnN0IHAydHIgPSBwMnRyUGF5bWVudHMucDJ0cih7IHB1YmtleTogb3VyUHViS2V5LCBjb250cm9sQmxvY2sgfSwgeyBlY2NMaWIgfSk7XG5cbiAgICAgIC8vIERvZXMgdHdlYWtlZCBvdXRwdXQgZm9yIGEgc2luZ2xlIHB1YmtleSBtYXRjaD9cbiAgICAgIGlmICghc2NyaXB0LmVxdWFscyhwMnRyLm91dHB1dCEpKSByZXR1cm4geyB0eXBlIH07XG5cbiAgICAgIC8vIFAyVFIgS2V5UGF0aCwgc2luZ2xlIGtleVxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgdHlwZSxcbiAgICAgICAgcHVia2V5czogW291clB1YktleV0sXG4gICAgICAgIHNpZ25hdHVyZXM6IFt1bmRlZmluZWRdLFxuICAgICAgfTtcbiAgICB9XG5cbiAgICBjYXNlIFNDUklQVF9UWVBFUy5QMlRSX05TOiB7XG4gICAgICBjb25zdCBwMnRyTnMgPSBwMnRyUGF5bWVudHMucDJ0cl9ucyh7IG91dHB1dDogc2NyaXB0IH0sIHsgZWNjTGliIH0pO1xuICAgICAgLy8gUDJUUiBTY3JpcHRQYXRoXG4gICAgICByZXR1cm4ge1xuICAgICAgICB0eXBlLFxuICAgICAgICBwdWJrZXlzOiBwMnRyTnMucHVia2V5cyxcbiAgICAgICAgc2lnbmF0dXJlczogcDJ0ck5zLnB1YmtleXMhLm1hcCgoKTogdW5kZWZpbmVkID0+IHVuZGVmaW5lZCksXG4gICAgICAgIG1heFNpZ25hdHVyZXM6IHAydHJOcy5wdWJrZXlzIS5sZW5ndGgsXG4gICAgICB9O1xuICAgIH1cblxuICAgIGNhc2UgU0NSSVBUX1RZUEVTLlAyUEs6IHtcbiAgICAgIGNvbnN0IHAycGsgPSBwYXltZW50cy5wMnBrKHsgb3V0cHV0OiBzY3JpcHQgfSk7XG4gICAgICByZXR1cm4ge1xuICAgICAgICB0eXBlLFxuICAgICAgICBwdWJrZXlzOiBbcDJway5wdWJrZXldLFxuICAgICAgICBzaWduYXR1cmVzOiBbdW5kZWZpbmVkXSxcbiAgICAgIH07XG4gICAgfVxuXG4gICAgY2FzZSBTQ1JJUFRfVFlQRVMuUDJNUzoge1xuICAgICAgY29uc3QgcDJtcyA9IHBheW1lbnRzLnAybXMoeyBvdXRwdXQ6IHNjcmlwdCB9KTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHR5cGUsXG4gICAgICAgIHB1YmtleXM6IHAybXMucHVia2V5cyxcbiAgICAgICAgc2lnbmF0dXJlczogcDJtcy5wdWJrZXlzIS5tYXAoKCk6IHVuZGVmaW5lZCA9PiB1bmRlZmluZWQpLFxuICAgICAgICBtYXhTaWduYXR1cmVzOiBwMm1zLm0sXG4gICAgICB9O1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB7IHR5cGUgfTtcbn1cblxuZnVuY3Rpb24gcHJlcGFyZUlucHV0PFROdW1iZXIgZXh0ZW5kcyBudW1iZXIgfCBiaWdpbnQgPSBudW1iZXI+KFxuICBpbnB1dDogVHhiSW5wdXQ8VE51bWJlcj4sXG4gIG91clB1YktleTogQnVmZmVyLFxuICByZWRlZW1TY3JpcHQ/OiBCdWZmZXIsXG4gIHdpdG5lc3NTY3JpcHQ/OiBCdWZmZXIsXG4gIGNvbnRyb2xCbG9jaz86IEJ1ZmZlcixcbiAgYW5uZXg/OiBCdWZmZXJcbik6IFR4YklucHV0PFROdW1iZXI+IHtcbiAgaWYgKHJlZGVlbVNjcmlwdCAmJiB3aXRuZXNzU2NyaXB0KSB7XG4gICAgY29uc3QgcDJ3c2ggPSBwYXltZW50cy5wMndzaCh7XG4gICAgICByZWRlZW06IHsgb3V0cHV0OiB3aXRuZXNzU2NyaXB0IH0sXG4gICAgfSkgYXMgUGF5bWVudDtcbiAgICBjb25zdCBwMndzaEFsdCA9IHBheW1lbnRzLnAyd3NoKHsgb3V0cHV0OiByZWRlZW1TY3JpcHQgfSkgYXMgUGF5bWVudDtcbiAgICBjb25zdCBwMnNoID0gcGF5bWVudHMucDJzaCh7IHJlZGVlbTogeyBvdXRwdXQ6IHJlZGVlbVNjcmlwdCB9IH0pIGFzIFBheW1lbnQ7XG4gICAgY29uc3QgcDJzaEFsdCA9IHBheW1lbnRzLnAyc2goeyByZWRlZW06IHAyd3NoIH0pIGFzIFBheW1lbnQ7XG5cbiAgICAvLyBlbmZvcmNlcyBQMlNIKFAyV1NIKC4uLikpXG4gICAgaWYgKCFwMndzaC5oYXNoIS5lcXVhbHMocDJ3c2hBbHQuaGFzaCEpKSB0aHJvdyBuZXcgRXJyb3IoJ1dpdG5lc3Mgc2NyaXB0IGluY29uc2lzdGVudCB3aXRoIHByZXZPdXRTY3JpcHQnKTtcbiAgICBpZiAoIXAyc2guaGFzaCEuZXF1YWxzKHAyc2hBbHQuaGFzaCEpKSB0aHJvdyBuZXcgRXJyb3IoJ1JlZGVlbSBzY3JpcHQgaW5jb25zaXN0ZW50IHdpdGggcHJldk91dFNjcmlwdCcpO1xuXG4gICAgY29uc3QgZXhwYW5kZWQgPSBleHBhbmRPdXRwdXQocDJ3c2gucmVkZWVtIS5vdXRwdXQhLCBvdXJQdWJLZXkpO1xuICAgIGlmICghZXhwYW5kZWQucHVia2V5cykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGV4cGFuZGVkLnR5cGUgKyAnIG5vdCBzdXBwb3J0ZWQgYXMgd2l0bmVzc1NjcmlwdCAoJyArIGJzY3JpcHQudG9BU00od2l0bmVzc1NjcmlwdCkgKyAnKScpO1xuICAgIH1cbiAgICBpZiAoaW5wdXQuc2lnbmF0dXJlcyAmJiBpbnB1dC5zaWduYXR1cmVzLnNvbWUoKHgpID0+IHggIT09IHVuZGVmaW5lZCkpIHtcbiAgICAgIGV4cGFuZGVkLnNpZ25hdHVyZXMgPSBpbnB1dC5zaWduYXR1cmVzO1xuICAgIH1cblxuICAgIGNvbnN0IHNpZ25TY3JpcHQgPSB3aXRuZXNzU2NyaXB0O1xuICAgIGlmIChleHBhbmRlZC50eXBlID09PSBTQ1JJUFRfVFlQRVMuUDJXUEtIKSB0aHJvdyBuZXcgRXJyb3IoJ1AyU0goUDJXU0goUDJXUEtIKSkgaXMgYSBjb25zZW5zdXMgZmFpbHVyZScpO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIHJlZGVlbVNjcmlwdCxcbiAgICAgIHJlZGVlbVNjcmlwdFR5cGU6IFNDUklQVF9UWVBFUy5QMldTSCxcblxuICAgICAgd2l0bmVzc1NjcmlwdCxcbiAgICAgIHdpdG5lc3NTY3JpcHRUeXBlOiBleHBhbmRlZC50eXBlLFxuXG4gICAgICBwcmV2T3V0VHlwZTogU0NSSVBUX1RZUEVTLlAyU0gsXG4gICAgICBwcmV2T3V0U2NyaXB0OiBwMnNoLm91dHB1dCxcblxuICAgICAgd2l0bmVzc1ZlcnNpb246IDAsXG4gICAgICBzaWduU2NyaXB0LFxuICAgICAgc2lnblR5cGU6IGV4cGFuZGVkLnR5cGUsXG5cbiAgICAgIHB1YmtleXM6IGV4cGFuZGVkLnB1YmtleXMsXG4gICAgICBzaWduYXR1cmVzOiBleHBhbmRlZC5zaWduYXR1cmVzLFxuICAgICAgbWF4U2lnbmF0dXJlczogZXhwYW5kZWQubWF4U2lnbmF0dXJlcyxcbiAgICB9O1xuICB9XG5cbiAgaWYgKHJlZGVlbVNjcmlwdCkge1xuICAgIGNvbnN0IHAyc2ggPSBwYXltZW50cy5wMnNoKHsgcmVkZWVtOiB7IG91dHB1dDogcmVkZWVtU2NyaXB0IH0gfSkgYXMgUGF5bWVudDtcblxuICAgIGlmIChpbnB1dC5wcmV2T3V0U2NyaXB0KSB7XG4gICAgICBsZXQgcDJzaEFsdDtcbiAgICAgIHRyeSB7XG4gICAgICAgIHAyc2hBbHQgPSBwYXltZW50cy5wMnNoKHsgb3V0cHV0OiBpbnB1dC5wcmV2T3V0U2NyaXB0IH0pIGFzIFBheW1lbnQ7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignUHJldk91dFNjcmlwdCBtdXN0IGJlIFAyU0gnKTtcbiAgICAgIH1cbiAgICAgIGlmICghcDJzaC5oYXNoIS5lcXVhbHMocDJzaEFsdC5oYXNoISkpIHRocm93IG5ldyBFcnJvcignUmVkZWVtIHNjcmlwdCBpbmNvbnNpc3RlbnQgd2l0aCBwcmV2T3V0U2NyaXB0Jyk7XG4gICAgfVxuXG4gICAgY29uc3QgZXhwYW5kZWQgPSBleHBhbmRPdXRwdXQocDJzaC5yZWRlZW0hLm91dHB1dCEsIG91clB1YktleSk7XG4gICAgaWYgKCFleHBhbmRlZC5wdWJrZXlzKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoZXhwYW5kZWQudHlwZSArICcgbm90IHN1cHBvcnRlZCBhcyByZWRlZW1TY3JpcHQgKCcgKyBic2NyaXB0LnRvQVNNKHJlZGVlbVNjcmlwdCkgKyAnKScpO1xuICAgIH1cbiAgICBpZiAoaW5wdXQuc2lnbmF0dXJlcyAmJiBpbnB1dC5zaWduYXR1cmVzLnNvbWUoKHgpID0+IHggIT09IHVuZGVmaW5lZCkpIHtcbiAgICAgIGV4cGFuZGVkLnNpZ25hdHVyZXMgPSBpbnB1dC5zaWduYXR1cmVzO1xuICAgIH1cblxuICAgIGxldCBzaWduU2NyaXB0ID0gcmVkZWVtU2NyaXB0O1xuICAgIGlmIChleHBhbmRlZC50eXBlID09PSBTQ1JJUFRfVFlQRVMuUDJXUEtIKSB7XG4gICAgICBzaWduU2NyaXB0ID0gcGF5bWVudHMucDJwa2goeyBwdWJrZXk6IGV4cGFuZGVkLnB1YmtleXNbMF0gfSkub3V0cHV0ITtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgcmVkZWVtU2NyaXB0LFxuICAgICAgcmVkZWVtU2NyaXB0VHlwZTogZXhwYW5kZWQudHlwZSxcblxuICAgICAgcHJldk91dFR5cGU6IFNDUklQVF9UWVBFUy5QMlNILFxuICAgICAgcHJldk91dFNjcmlwdDogcDJzaC5vdXRwdXQsXG5cbiAgICAgIHdpdG5lc3NWZXJzaW9uOiBleHBhbmRlZC50eXBlID09PSBTQ1JJUFRfVFlQRVMuUDJXUEtIID8gMCA6IHVuZGVmaW5lZCxcbiAgICAgIHNpZ25TY3JpcHQsXG4gICAgICBzaWduVHlwZTogZXhwYW5kZWQudHlwZSxcblxuICAgICAgcHVia2V5czogZXhwYW5kZWQucHVia2V5cyxcbiAgICAgIHNpZ25hdHVyZXM6IGV4cGFuZGVkLnNpZ25hdHVyZXMsXG4gICAgICBtYXhTaWduYXR1cmVzOiBleHBhbmRlZC5tYXhTaWduYXR1cmVzLFxuICAgIH07XG4gIH1cblxuICBpZiAod2l0bmVzc1NjcmlwdCAmJiBjb250cm9sQmxvY2spIHtcbiAgICAvLyBQMlRSIFNjcmlwdFBhdGhcbiAgICAvKiB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6bm8tc2hhZG93ZWQtdmFyaWFibGUgKi9cbiAgICBsZXQgcHJldk91dFNjcmlwdCA9IGlucHV0LnByZXZPdXRTY3JpcHQ7XG4gICAgaWYgKCFwcmV2T3V0U2NyaXB0KSB7XG4gICAgICBwcmV2T3V0U2NyaXB0ID0gcDJ0clBheW1lbnRzLnAydHIoXG4gICAgICAgIHtcbiAgICAgICAgICByZWRlZW1zOiBbeyBvdXRwdXQ6IHdpdG5lc3NTY3JpcHQgfV0sXG4gICAgICAgICAgcmVkZWVtSW5kZXg6IDAsXG4gICAgICAgICAgY29udHJvbEJsb2NrLFxuICAgICAgICAgIGFubmV4LFxuICAgICAgICB9LFxuICAgICAgICB7IGVjY0xpYiB9XG4gICAgICApLm91dHB1dDtcbiAgICB9XG5cbiAgICBjb25zdCBleHBhbmRlZCA9IGV4cGFuZE91dHB1dCh3aXRuZXNzU2NyaXB0LCBvdXJQdWJLZXkpO1xuICAgIGlmICghZXhwYW5kZWQucHVia2V5cykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGV4cGFuZGVkLnR5cGUgKyAnIG5vdCBzdXBwb3J0ZWQgYXMgd2l0bmVzc1NjcmlwdCAoJyArIGJzY3JpcHQudG9BU00od2l0bmVzc1NjcmlwdCkgKyAnKScpO1xuICAgIH1cbiAgICBpZiAoaW5wdXQuc2lnbmF0dXJlcyAmJiBpbnB1dC5zaWduYXR1cmVzLnNvbWUoKHgpID0+IHggIT09IHVuZGVmaW5lZCkpIHtcbiAgICAgIGV4cGFuZGVkLnNpZ25hdHVyZXMgPSBpbnB1dC5zaWduYXR1cmVzO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICB3aXRuZXNzU2NyaXB0LFxuICAgICAgd2l0bmVzc1NjcmlwdFR5cGU6IGV4cGFuZGVkLnR5cGUsXG5cbiAgICAgIHByZXZPdXRUeXBlOiBTQ1JJUFRfVFlQRVMuUDJUUixcbiAgICAgIHByZXZPdXRTY3JpcHQsXG5cbiAgICAgIHdpdG5lc3NWZXJzaW9uOiAxLFxuICAgICAgc2lnblNjcmlwdDogd2l0bmVzc1NjcmlwdCxcbiAgICAgIHNpZ25UeXBlOiBleHBhbmRlZC50eXBlLFxuXG4gICAgICBwdWJrZXlzOiBleHBhbmRlZC5wdWJrZXlzLFxuICAgICAgc2lnbmF0dXJlczogZXhwYW5kZWQuc2lnbmF0dXJlcyxcbiAgICAgIG1heFNpZ25hdHVyZXM6IGV4cGFuZGVkLm1heFNpZ25hdHVyZXMsXG5cbiAgICAgIGNvbnRyb2xCbG9jayxcbiAgICAgIGFubmV4LFxuICAgIH07XG4gIH1cblxuICBpZiAod2l0bmVzc1NjcmlwdCkge1xuICAgIGNvbnN0IHAyd3NoID0gcGF5bWVudHMucDJ3c2goeyByZWRlZW06IHsgb3V0cHV0OiB3aXRuZXNzU2NyaXB0IH0gfSk7XG5cbiAgICBpZiAoaW5wdXQucHJldk91dFNjcmlwdCkge1xuICAgICAgY29uc3QgcDJ3c2hBbHQgPSBwYXltZW50cy5wMndzaCh7IG91dHB1dDogaW5wdXQucHJldk91dFNjcmlwdCB9KTtcbiAgICAgIGlmICghcDJ3c2guaGFzaCEuZXF1YWxzKHAyd3NoQWx0Lmhhc2ghKSkgdGhyb3cgbmV3IEVycm9yKCdXaXRuZXNzIHNjcmlwdCBpbmNvbnNpc3RlbnQgd2l0aCBwcmV2T3V0U2NyaXB0Jyk7XG4gICAgfVxuXG4gICAgY29uc3QgZXhwYW5kZWQgPSBleHBhbmRPdXRwdXQocDJ3c2gucmVkZWVtIS5vdXRwdXQhLCBvdXJQdWJLZXkpO1xuICAgIGlmICghZXhwYW5kZWQucHVia2V5cykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGV4cGFuZGVkLnR5cGUgKyAnIG5vdCBzdXBwb3J0ZWQgYXMgd2l0bmVzc1NjcmlwdCAoJyArIGJzY3JpcHQudG9BU00od2l0bmVzc1NjcmlwdCkgKyAnKScpO1xuICAgIH1cbiAgICBpZiAoaW5wdXQuc2lnbmF0dXJlcyAmJiBpbnB1dC5zaWduYXR1cmVzLnNvbWUoKHgpID0+IHggIT09IHVuZGVmaW5lZCkpIHtcbiAgICAgIGV4cGFuZGVkLnNpZ25hdHVyZXMgPSBpbnB1dC5zaWduYXR1cmVzO1xuICAgIH1cblxuICAgIGNvbnN0IHNpZ25TY3JpcHQgPSB3aXRuZXNzU2NyaXB0O1xuICAgIGlmIChleHBhbmRlZC50eXBlID09PSBTQ1JJUFRfVFlQRVMuUDJXUEtIKSB0aHJvdyBuZXcgRXJyb3IoJ1AyV1NIKFAyV1BLSCkgaXMgYSBjb25zZW5zdXMgZmFpbHVyZScpO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIHdpdG5lc3NTY3JpcHQsXG4gICAgICB3aXRuZXNzU2NyaXB0VHlwZTogZXhwYW5kZWQudHlwZSxcblxuICAgICAgcHJldk91dFR5cGU6IFNDUklQVF9UWVBFUy5QMldTSCxcbiAgICAgIHByZXZPdXRTY3JpcHQ6IHAyd3NoLm91dHB1dCxcblxuICAgICAgd2l0bmVzc1ZlcnNpb246IDAsXG4gICAgICBzaWduU2NyaXB0LFxuICAgICAgc2lnblR5cGU6IGV4cGFuZGVkLnR5cGUsXG5cbiAgICAgIHB1YmtleXM6IGV4cGFuZGVkLnB1YmtleXMsXG4gICAgICBzaWduYXR1cmVzOiBleHBhbmRlZC5zaWduYXR1cmVzLFxuICAgICAgbWF4U2lnbmF0dXJlczogZXhwYW5kZWQubWF4U2lnbmF0dXJlcyxcbiAgICB9O1xuICB9XG5cbiAgaWYgKGlucHV0LnByZXZPdXRUeXBlICYmIGlucHV0LnByZXZPdXRTY3JpcHQpIHtcbiAgICAvLyBlbWJlZGRlZCBzY3JpcHRzIGFyZSBub3QgcG9zc2libGUgd2l0aG91dCBleHRyYSBpbmZvcm1hdGlvblxuICAgIGlmIChpbnB1dC5wcmV2T3V0VHlwZSA9PT0gU0NSSVBUX1RZUEVTLlAyU0gpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignUHJldk91dFNjcmlwdCBpcyAnICsgaW5wdXQucHJldk91dFR5cGUgKyAnLCByZXF1aXJlcyByZWRlZW1TY3JpcHQnKTtcbiAgICB9XG4gICAgaWYgKGlucHV0LnByZXZPdXRUeXBlID09PSBTQ1JJUFRfVFlQRVMuUDJXU0gpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignUHJldk91dFNjcmlwdCBpcyAnICsgaW5wdXQucHJldk91dFR5cGUgKyAnLCByZXF1aXJlcyB3aXRuZXNzU2NyaXB0Jyk7XG4gICAgfVxuXG4gICAgY29uc3QgZXhwYW5kZWQgPSBleHBhbmRPdXRwdXQoaW5wdXQucHJldk91dFNjcmlwdCwgb3VyUHViS2V5KTtcbiAgICBpZiAoIWV4cGFuZGVkLnB1YmtleXMpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihleHBhbmRlZC50eXBlICsgJyBub3Qgc3VwcG9ydGVkICgnICsgYnNjcmlwdC50b0FTTShpbnB1dC5wcmV2T3V0U2NyaXB0KSArICcpJyk7XG4gICAgfVxuICAgIGlmIChpbnB1dC5zaWduYXR1cmVzICYmIGlucHV0LnNpZ25hdHVyZXMuc29tZSgoeCkgPT4geCAhPT0gdW5kZWZpbmVkKSkge1xuICAgICAgZXhwYW5kZWQuc2lnbmF0dXJlcyA9IGlucHV0LnNpZ25hdHVyZXM7XG4gICAgfVxuXG4gICAgbGV0IHNpZ25TY3JpcHQgPSBpbnB1dC5wcmV2T3V0U2NyaXB0O1xuICAgIGlmIChleHBhbmRlZC50eXBlID09PSBTQ1JJUFRfVFlQRVMuUDJXUEtIKSB7XG4gICAgICBzaWduU2NyaXB0ID0gcGF5bWVudHMucDJwa2goeyBwdWJrZXk6IGV4cGFuZGVkLnB1YmtleXNbMF0gfSkub3V0cHV0IGFzIEJ1ZmZlcjtcbiAgICB9XG5cbiAgICBsZXQgd2l0bmVzc1ZlcnNpb247XG4gICAgaWYgKGV4cGFuZGVkLnR5cGUgPT09IFNDUklQVF9UWVBFUy5QMldQS0gpIHtcbiAgICAgIHdpdG5lc3NWZXJzaW9uID0gMDtcbiAgICB9IGVsc2UgaWYgKGV4cGFuZGVkLnR5cGUgPT09IFNDUklQVF9UWVBFUy5QMlRSKSB7XG4gICAgICB3aXRuZXNzVmVyc2lvbiA9IDE7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIHByZXZPdXRUeXBlOiBleHBhbmRlZC50eXBlLFxuICAgICAgcHJldk91dFNjcmlwdDogaW5wdXQucHJldk91dFNjcmlwdCxcblxuICAgICAgd2l0bmVzc1ZlcnNpb24sXG4gICAgICBzaWduU2NyaXB0LFxuICAgICAgc2lnblR5cGU6IGV4cGFuZGVkLnR5cGUsXG5cbiAgICAgIHB1YmtleXM6IGV4cGFuZGVkLnB1YmtleXMsXG4gICAgICBzaWduYXR1cmVzOiBleHBhbmRlZC5zaWduYXR1cmVzLFxuICAgICAgbWF4U2lnbmF0dXJlczogZXhwYW5kZWQubWF4U2lnbmF0dXJlcyxcbiAgICB9O1xuICB9XG5cbiAgY29uc3QgcHJldk91dFNjcmlwdCA9IHBheW1lbnRzLnAycGtoKHsgcHVia2V5OiBvdXJQdWJLZXkgfSkub3V0cHV0O1xuICByZXR1cm4ge1xuICAgIHByZXZPdXRUeXBlOiBTQ1JJUFRfVFlQRVMuUDJQS0gsXG4gICAgcHJldk91dFNjcmlwdCxcblxuICAgIHNpZ25TY3JpcHQ6IHByZXZPdXRTY3JpcHQsXG4gICAgc2lnblR5cGU6IFNDUklQVF9UWVBFUy5QMlBLSCxcblxuICAgIHB1YmtleXM6IFtvdXJQdWJLZXldLFxuICAgIHNpZ25hdHVyZXM6IFt1bmRlZmluZWRdLFxuICB9O1xufVxuXG5mdW5jdGlvbiBidWlsZDxUTnVtYmVyIGV4dGVuZHMgbnVtYmVyIHwgYmlnaW50ID0gbnVtYmVyPihcbiAgdHlwZTogc3RyaW5nLFxuICBpbnB1dDogVHhiSW5wdXQ8VE51bWJlcj4sXG4gIGFsbG93SW5jb21wbGV0ZT86IGJvb2xlYW5cbik6IFBheW1lbnQgfCB1bmRlZmluZWQge1xuICBjb25zdCBwdWJrZXlzID0gKGlucHV0LnB1YmtleXMgfHwgW10pIGFzIEJ1ZmZlcltdO1xuICBsZXQgc2lnbmF0dXJlcyA9IChpbnB1dC5zaWduYXR1cmVzIHx8IFtdKSBhcyBCdWZmZXJbXTtcblxuICBzd2l0Y2ggKHR5cGUpIHtcbiAgICBjYXNlIFNDUklQVF9UWVBFUy5QMlBLSDoge1xuICAgICAgaWYgKHB1YmtleXMubGVuZ3RoID09PSAwKSBicmVhaztcbiAgICAgIGlmIChzaWduYXR1cmVzLmxlbmd0aCA9PT0gMCkgYnJlYWs7XG5cbiAgICAgIHJldHVybiBwYXltZW50cy5wMnBraCh7IHB1YmtleTogcHVia2V5c1swXSwgc2lnbmF0dXJlOiBzaWduYXR1cmVzWzBdIH0pO1xuICAgIH1cbiAgICBjYXNlIFNDUklQVF9UWVBFUy5QMldQS0g6IHtcbiAgICAgIGlmIChwdWJrZXlzLmxlbmd0aCA9PT0gMCkgYnJlYWs7XG4gICAgICBpZiAoc2lnbmF0dXJlcy5sZW5ndGggPT09IDApIGJyZWFrO1xuXG4gICAgICByZXR1cm4gcGF5bWVudHMucDJ3cGtoKHsgcHVia2V5OiBwdWJrZXlzWzBdLCBzaWduYXR1cmU6IHNpZ25hdHVyZXNbMF0gfSk7XG4gICAgfVxuICAgIGNhc2UgU0NSSVBUX1RZUEVTLlAyUEs6IHtcbiAgICAgIGlmIChwdWJrZXlzLmxlbmd0aCA9PT0gMCkgYnJlYWs7XG4gICAgICBpZiAoc2lnbmF0dXJlcy5sZW5ndGggPT09IDApIGJyZWFrO1xuXG4gICAgICByZXR1cm4gcGF5bWVudHMucDJwayh7IHNpZ25hdHVyZTogc2lnbmF0dXJlc1swXSB9KTtcbiAgICB9XG4gICAgY2FzZSBTQ1JJUFRfVFlQRVMuUDJNUzoge1xuICAgICAgY29uc3QgbSA9IGlucHV0Lm1heFNpZ25hdHVyZXM7XG4gICAgICBpZiAoYWxsb3dJbmNvbXBsZXRlKSB7XG4gICAgICAgIHNpZ25hdHVyZXMgPSBzaWduYXR1cmVzLm1hcCgoeCkgPT4geCB8fCBvcHMuT1BfMCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzaWduYXR1cmVzID0gc2lnbmF0dXJlcy5maWx0ZXIoKHgpID0+IHgpO1xuICAgICAgfVxuXG4gICAgICAvLyBpZiB0aGUgdHJhbnNhY3Rpb24gaXMgbm90IG5vdCBjb21wbGV0ZSAoY29tcGxldGUpLCBvciBpZiBzaWduYXR1cmVzLmxlbmd0aCA9PT0gbSwgdmFsaWRhdGVcbiAgICAgIC8vIG90aGVyd2lzZSwgdGhlIG51bWJlciBvZiBPUF8wJ3MgbWF5IGJlID49IG0sIHNvIGRvbid0IHZhbGlkYXRlIChib28pXG4gICAgICBjb25zdCB2YWxpZGF0ZSA9ICFhbGxvd0luY29tcGxldGUgfHwgbSA9PT0gc2lnbmF0dXJlcy5sZW5ndGg7XG4gICAgICByZXR1cm4gcGF5bWVudHMucDJtcyh7IG0sIHB1YmtleXMsIHNpZ25hdHVyZXMgfSwgeyBhbGxvd0luY29tcGxldGUsIHZhbGlkYXRlIH0pO1xuICAgIH1cbiAgICBjYXNlIFNDUklQVF9UWVBFUy5QMlNIOiB7XG4gICAgICBjb25zdCByZWRlZW0gPSBidWlsZDxUTnVtYmVyPihpbnB1dC5yZWRlZW1TY3JpcHRUeXBlISwgaW5wdXQsIGFsbG93SW5jb21wbGV0ZSk7XG4gICAgICBpZiAoIXJlZGVlbSkgcmV0dXJuO1xuXG4gICAgICByZXR1cm4gcGF5bWVudHMucDJzaCh7XG4gICAgICAgIHJlZGVlbToge1xuICAgICAgICAgIG91dHB1dDogcmVkZWVtLm91dHB1dCB8fCBpbnB1dC5yZWRlZW1TY3JpcHQsXG4gICAgICAgICAgaW5wdXQ6IHJlZGVlbS5pbnB1dCxcbiAgICAgICAgICB3aXRuZXNzOiByZWRlZW0ud2l0bmVzcyxcbiAgICAgICAgfSxcbiAgICAgIH0pO1xuICAgIH1cbiAgICBjYXNlIFNDUklQVF9UWVBFUy5QMldTSDoge1xuICAgICAgY29uc3QgcmVkZWVtID0gYnVpbGQ8VE51bWJlcj4oaW5wdXQud2l0bmVzc1NjcmlwdFR5cGUhLCBpbnB1dCwgYWxsb3dJbmNvbXBsZXRlKTtcbiAgICAgIGlmICghcmVkZWVtKSByZXR1cm47XG5cbiAgICAgIHJldHVybiBwYXltZW50cy5wMndzaCh7XG4gICAgICAgIHJlZGVlbToge1xuICAgICAgICAgIG91dHB1dDogaW5wdXQud2l0bmVzc1NjcmlwdCxcbiAgICAgICAgICBpbnB1dDogcmVkZWVtLmlucHV0LFxuICAgICAgICAgIHdpdG5lc3M6IHJlZGVlbS53aXRuZXNzLFxuICAgICAgICB9LFxuICAgICAgfSk7XG4gICAgfVxuICAgIGNhc2UgU0NSSVBUX1RZUEVTLlAyVFI6IHtcbiAgICAgIGlmIChpbnB1dC53aXRuZXNzU2NyaXB0VHlwZSA9PT0gU0NSSVBUX1RZUEVTLlAyVFJfTlMpIHtcbiAgICAgICAgLy8gU2NyaXB0UGF0aFxuICAgICAgICBjb25zdCByZWRlZW0gPSBidWlsZDxUTnVtYmVyPihpbnB1dC53aXRuZXNzU2NyaXB0VHlwZSEsIGlucHV0LCBhbGxvd0luY29tcGxldGUpO1xuICAgICAgICByZXR1cm4gcDJ0clBheW1lbnRzLnAydHIoXG4gICAgICAgICAge1xuICAgICAgICAgICAgb3V0cHV0OiBpbnB1dC5wcmV2T3V0U2NyaXB0LFxuICAgICAgICAgICAgY29udHJvbEJsb2NrOiBpbnB1dC5jb250cm9sQmxvY2ssXG4gICAgICAgICAgICBhbm5leDogaW5wdXQuYW5uZXgsXG4gICAgICAgICAgICByZWRlZW1zOiBbcmVkZWVtIV0sXG4gICAgICAgICAgICByZWRlZW1JbmRleDogMCxcbiAgICAgICAgICB9LFxuICAgICAgICAgIHsgZWNjTGliIH1cbiAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgLy8gS2V5UGF0aFxuICAgICAgaWYgKHNpZ25hdHVyZXMubGVuZ3RoID09PSAwKSBicmVhaztcblxuICAgICAgcmV0dXJuIHAydHJQYXltZW50cy5wMnRyKHsgcHVia2V5cywgc2lnbmF0dXJlOiBzaWduYXR1cmVzWzBdIH0sIHsgZWNjTGliIH0pO1xuICAgIH1cbiAgICBjYXNlIFNDUklQVF9UWVBFUy5QMlRSX05TOiB7XG4gICAgICBjb25zdCBtID0gaW5wdXQubWF4U2lnbmF0dXJlcztcbiAgICAgIGlmIChhbGxvd0luY29tcGxldGUpIHtcbiAgICAgICAgc2lnbmF0dXJlcyA9IHNpZ25hdHVyZXMubWFwKCh4KSA9PiB4IHx8IG9wcy5PUF8wKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHNpZ25hdHVyZXMgPSBzaWduYXR1cmVzLmZpbHRlcigoeCkgPT4geCk7XG4gICAgICB9XG5cbiAgICAgIC8vIGlmIHRoZSB0cmFuc2FjdGlvbiBpcyBub3Qgbm90IGNvbXBsZXRlIChjb21wbGV0ZSksIG9yIGlmIHNpZ25hdHVyZXMubGVuZ3RoID09PSBtLCB2YWxpZGF0ZVxuICAgICAgLy8gb3RoZXJ3aXNlLCB0aGUgbnVtYmVyIG9mIE9QXzAncyBtYXkgYmUgPj0gbSwgc28gZG9uJ3QgdmFsaWRhdGUgKGJvbylcbiAgICAgIGNvbnN0IHZhbGlkYXRlID0gIWFsbG93SW5jb21wbGV0ZSB8fCBtID09PSBzaWduYXR1cmVzLmxlbmd0aDtcbiAgICAgIHJldHVybiBwMnRyUGF5bWVudHMucDJ0cl9ucyh7IHB1YmtleXMsIHNpZ25hdHVyZXMgfSwgeyBhbGxvd0luY29tcGxldGUsIHZhbGlkYXRlLCBlY2NMaWIgfSk7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGNhblNpZ248VE51bWJlciBleHRlbmRzIG51bWJlciB8IGJpZ2ludCA9IG51bWJlcj4oaW5wdXQ6IFR4YklucHV0PFROdW1iZXI+KTogYm9vbGVhbiB7XG4gIHJldHVybiAoXG4gICAgaW5wdXQuc2lnblNjcmlwdCAhPT0gdW5kZWZpbmVkICYmXG4gICAgaW5wdXQuc2lnblR5cGUgIT09IHVuZGVmaW5lZCAmJlxuICAgIGlucHV0LnB1YmtleXMgIT09IHVuZGVmaW5lZCAmJlxuICAgIGlucHV0LnNpZ25hdHVyZXMgIT09IHVuZGVmaW5lZCAmJlxuICAgIGlucHV0LnNpZ25hdHVyZXMubGVuZ3RoID09PSBpbnB1dC5wdWJrZXlzLmxlbmd0aCAmJlxuICAgIGlucHV0LnB1YmtleXMubGVuZ3RoID4gMCAmJlxuICAgIChpbnB1dC53aXRuZXNzVmVyc2lvbiA9PT0gdW5kZWZpbmVkIHx8IGlucHV0LnZhbHVlICE9PSB1bmRlZmluZWQpXG4gICk7XG59XG5cbmZ1bmN0aW9uIHNpZ25hdHVyZUhhc2hUeXBlKGJ1ZmZlcjogQnVmZmVyKTogbnVtYmVyIHtcbiAgaWYgKGJzY3JpcHQuaXNDYW5vbmljYWxTY2hub3JyU2lnbmF0dXJlKGJ1ZmZlcikgJiYgYnVmZmVyLmxlbmd0aCA9PT0gNjQpIHtcbiAgICByZXR1cm4gVHJhbnNhY3Rpb24uU0lHSEFTSF9ERUZBVUxUO1xuICB9XG4gIHJldHVybiBidWZmZXIucmVhZFVJbnQ4KGJ1ZmZlci5sZW5ndGggLSAxKTtcbn1cblxuZnVuY3Rpb24gY2hlY2tTaWduQXJnczxUTnVtYmVyIGV4dGVuZHMgbnVtYmVyIHwgYmlnaW50ID0gbnVtYmVyPihcbiAgaW5wdXRzOiBBcnJheTxUeGJJbnB1dDxUTnVtYmVyPj4sXG4gIHNpZ25QYXJhbXM6IFR4YlNpZ25Bcmc8VE51bWJlcj5cbik6IHZvaWQge1xuICBpZiAoIVBSRVZPVVRfVFlQRVMuaGFzKHNpZ25QYXJhbXMucHJldk91dFNjcmlwdFR5cGUpKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihgVW5rbm93biBwcmV2T3V0U2NyaXB0VHlwZSBcIiR7c2lnblBhcmFtcy5wcmV2T3V0U2NyaXB0VHlwZX1cImApO1xuICB9XG4gIHRmTWVzc2FnZSh0eXBlZm9yY2UuTnVtYmVyLCBzaWduUGFyYW1zLnZpbiwgYHNpZ24gbXVzdCBpbmNsdWRlIHZpbiBwYXJhbWV0ZXIgYXMgTnVtYmVyIChpbnB1dCBpbmRleClgKTtcbiAgdGZNZXNzYWdlKHRmRnVsbFNpZ25lciwgc2lnblBhcmFtcy5rZXlQYWlyLCBgc2lnbiBtdXN0IGluY2x1ZGUga2V5UGFpciBwYXJhbWV0ZXIgYXMgU2lnbmVyIGludGVyZmFjZWApO1xuICB0Zk1lc3NhZ2UodHlwZWZvcmNlLm1heWJlKHR5cGVmb3JjZS5OdW1iZXIpLCBzaWduUGFyYW1zLmhhc2hUeXBlLCBgc2lnbiBoYXNoVHlwZSBwYXJhbWV0ZXIgbXVzdCBiZSBhIG51bWJlcmApO1xuICBjb25zdCBwcmV2T3V0VHlwZSA9IChpbnB1dHNbc2lnblBhcmFtcy52aW5dIHx8IFtdKS5wcmV2T3V0VHlwZTtcbiAgY29uc3QgcG9zVHlwZSA9IHNpZ25QYXJhbXMucHJldk91dFNjcmlwdFR5cGU7XG4gIHN3aXRjaCAocG9zVHlwZSkge1xuICAgIGNhc2UgJ3AycGtoJzpcbiAgICAgIGlmIChwcmV2T3V0VHlwZSAmJiBwcmV2T3V0VHlwZSAhPT0gJ3B1YmtleWhhc2gnKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoYGlucHV0ICMke3NpZ25QYXJhbXMudmlufSBpcyBub3Qgb2YgdHlwZSBwMnBraDogJHtwcmV2T3V0VHlwZX1gKTtcbiAgICAgIH1cbiAgICAgIHRmTWVzc2FnZSh0eXBlZm9yY2UudmFsdWUodW5kZWZpbmVkKSwgc2lnblBhcmFtcy53aXRuZXNzU2NyaXB0LCBgJHtwb3NUeXBlfSByZXF1aXJlcyBOTyB3aXRuZXNzU2NyaXB0YCk7XG4gICAgICB0Zk1lc3NhZ2UodHlwZWZvcmNlLnZhbHVlKHVuZGVmaW5lZCksIHNpZ25QYXJhbXMucmVkZWVtU2NyaXB0LCBgJHtwb3NUeXBlfSByZXF1aXJlcyBOTyByZWRlZW1TY3JpcHRgKTtcbiAgICAgIHRmTWVzc2FnZSh0eXBlZm9yY2UudmFsdWUodW5kZWZpbmVkKSwgc2lnblBhcmFtcy53aXRuZXNzVmFsdWUsIGAke3Bvc1R5cGV9IHJlcXVpcmVzIE5PIHdpdG5lc3NWYWx1ZWApO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAncDJwayc6XG4gICAgICBpZiAocHJldk91dFR5cGUgJiYgcHJldk91dFR5cGUgIT09ICdwdWJrZXknKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoYGlucHV0ICMke3NpZ25QYXJhbXMudmlufSBpcyBub3Qgb2YgdHlwZSBwMnBrOiAke3ByZXZPdXRUeXBlfWApO1xuICAgICAgfVxuICAgICAgdGZNZXNzYWdlKHR5cGVmb3JjZS52YWx1ZSh1bmRlZmluZWQpLCBzaWduUGFyYW1zLndpdG5lc3NTY3JpcHQsIGAke3Bvc1R5cGV9IHJlcXVpcmVzIE5PIHdpdG5lc3NTY3JpcHRgKTtcbiAgICAgIHRmTWVzc2FnZSh0eXBlZm9yY2UudmFsdWUodW5kZWZpbmVkKSwgc2lnblBhcmFtcy5yZWRlZW1TY3JpcHQsIGAke3Bvc1R5cGV9IHJlcXVpcmVzIE5PIHJlZGVlbVNjcmlwdGApO1xuICAgICAgdGZNZXNzYWdlKHR5cGVmb3JjZS52YWx1ZSh1bmRlZmluZWQpLCBzaWduUGFyYW1zLndpdG5lc3NWYWx1ZSwgYCR7cG9zVHlwZX0gcmVxdWlyZXMgTk8gd2l0bmVzc1ZhbHVlYCk7XG4gICAgICBicmVhaztcbiAgICBjYXNlICdwMndwa2gnOlxuICAgICAgaWYgKHByZXZPdXRUeXBlICYmIHByZXZPdXRUeXBlICE9PSAnd2l0bmVzc3B1YmtleWhhc2gnKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoYGlucHV0ICMke3NpZ25QYXJhbXMudmlufSBpcyBub3Qgb2YgdHlwZSBwMndwa2g6ICR7cHJldk91dFR5cGV9YCk7XG4gICAgICB9XG4gICAgICB0Zk1lc3NhZ2UodHlwZWZvcmNlLnZhbHVlKHVuZGVmaW5lZCksIHNpZ25QYXJhbXMud2l0bmVzc1NjcmlwdCwgYCR7cG9zVHlwZX0gcmVxdWlyZXMgTk8gd2l0bmVzc1NjcmlwdGApO1xuICAgICAgdGZNZXNzYWdlKHR5cGVmb3JjZS52YWx1ZSh1bmRlZmluZWQpLCBzaWduUGFyYW1zLnJlZGVlbVNjcmlwdCwgYCR7cG9zVHlwZX0gcmVxdWlyZXMgTk8gcmVkZWVtU2NyaXB0YCk7XG4gICAgICB0Zk1lc3NhZ2UodHlwZXMuU2F0b3NoaSwgc2lnblBhcmFtcy53aXRuZXNzVmFsdWUsIGAke3Bvc1R5cGV9IHJlcXVpcmVzIHdpdG5lc3NWYWx1ZWApO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAncDJtcyc6XG4gICAgICBpZiAocHJldk91dFR5cGUgJiYgcHJldk91dFR5cGUgIT09ICdtdWx0aXNpZycpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihgaW5wdXQgIyR7c2lnblBhcmFtcy52aW59IGlzIG5vdCBvZiB0eXBlIHAybXM6ICR7cHJldk91dFR5cGV9YCk7XG4gICAgICB9XG4gICAgICB0Zk1lc3NhZ2UodHlwZWZvcmNlLnZhbHVlKHVuZGVmaW5lZCksIHNpZ25QYXJhbXMud2l0bmVzc1NjcmlwdCwgYCR7cG9zVHlwZX0gcmVxdWlyZXMgTk8gd2l0bmVzc1NjcmlwdGApO1xuICAgICAgdGZNZXNzYWdlKHR5cGVmb3JjZS52YWx1ZSh1bmRlZmluZWQpLCBzaWduUGFyYW1zLnJlZGVlbVNjcmlwdCwgYCR7cG9zVHlwZX0gcmVxdWlyZXMgTk8gcmVkZWVtU2NyaXB0YCk7XG4gICAgICB0Zk1lc3NhZ2UodHlwZWZvcmNlLnZhbHVlKHVuZGVmaW5lZCksIHNpZ25QYXJhbXMud2l0bmVzc1ZhbHVlLCBgJHtwb3NUeXBlfSByZXF1aXJlcyBOTyB3aXRuZXNzVmFsdWVgKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ3Ayc2gtcDJ3cGtoJzpcbiAgICAgIGlmIChwcmV2T3V0VHlwZSAmJiBwcmV2T3V0VHlwZSAhPT0gJ3NjcmlwdGhhc2gnKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoYGlucHV0ICMke3NpZ25QYXJhbXMudmlufSBpcyBub3Qgb2YgdHlwZSBwMnNoLXAyd3BraDogJHtwcmV2T3V0VHlwZX1gKTtcbiAgICAgIH1cbiAgICAgIHRmTWVzc2FnZSh0eXBlZm9yY2UudmFsdWUodW5kZWZpbmVkKSwgc2lnblBhcmFtcy53aXRuZXNzU2NyaXB0LCBgJHtwb3NUeXBlfSByZXF1aXJlcyBOTyB3aXRuZXNzU2NyaXB0YCk7XG4gICAgICB0Zk1lc3NhZ2UodHlwZWZvcmNlLkJ1ZmZlciwgc2lnblBhcmFtcy5yZWRlZW1TY3JpcHQsIGAke3Bvc1R5cGV9IHJlcXVpcmVzIHJlZGVlbVNjcmlwdGApO1xuICAgICAgdGZNZXNzYWdlKHR5cGVzLlNhdG9zaGksIHNpZ25QYXJhbXMud2l0bmVzc1ZhbHVlLCBgJHtwb3NUeXBlfSByZXF1aXJlcyB3aXRuZXNzVmFsdWVgKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ3Ayc2gtcDJtcyc6XG4gICAgY2FzZSAncDJzaC1wMnBrJzpcbiAgICBjYXNlICdwMnNoLXAycGtoJzpcbiAgICAgIGlmIChwcmV2T3V0VHlwZSAmJiBwcmV2T3V0VHlwZSAhPT0gJ3NjcmlwdGhhc2gnKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoYGlucHV0ICMke3NpZ25QYXJhbXMudmlufSBpcyBub3Qgb2YgdHlwZSAke3Bvc1R5cGV9OiAke3ByZXZPdXRUeXBlfWApO1xuICAgICAgfVxuICAgICAgdGZNZXNzYWdlKHR5cGVmb3JjZS52YWx1ZSh1bmRlZmluZWQpLCBzaWduUGFyYW1zLndpdG5lc3NTY3JpcHQsIGAke3Bvc1R5cGV9IHJlcXVpcmVzIE5PIHdpdG5lc3NTY3JpcHRgKTtcbiAgICAgIHRmTWVzc2FnZSh0eXBlZm9yY2UuQnVmZmVyLCBzaWduUGFyYW1zLnJlZGVlbVNjcmlwdCwgYCR7cG9zVHlwZX0gcmVxdWlyZXMgcmVkZWVtU2NyaXB0YCk7XG4gICAgICB0Zk1lc3NhZ2UodHlwZWZvcmNlLnZhbHVlKHVuZGVmaW5lZCksIHNpZ25QYXJhbXMud2l0bmVzc1ZhbHVlLCBgJHtwb3NUeXBlfSByZXF1aXJlcyBOTyB3aXRuZXNzVmFsdWVgKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ3Ayd3NoLXAybXMnOlxuICAgIGNhc2UgJ3Ayd3NoLXAycGsnOlxuICAgIGNhc2UgJ3Ayd3NoLXAycGtoJzpcbiAgICAgIGlmIChwcmV2T3V0VHlwZSAmJiBwcmV2T3V0VHlwZSAhPT0gJ3dpdG5lc3NzY3JpcHRoYXNoJykge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGBpbnB1dCAjJHtzaWduUGFyYW1zLnZpbn0gaXMgbm90IG9mIHR5cGUgJHtwb3NUeXBlfTogJHtwcmV2T3V0VHlwZX1gKTtcbiAgICAgIH1cbiAgICAgIHRmTWVzc2FnZSh0eXBlZm9yY2UuQnVmZmVyLCBzaWduUGFyYW1zLndpdG5lc3NTY3JpcHQsIGAke3Bvc1R5cGV9IHJlcXVpcmVzIHdpdG5lc3NTY3JpcHRgKTtcbiAgICAgIHRmTWVzc2FnZSh0eXBlZm9yY2UudmFsdWUodW5kZWZpbmVkKSwgc2lnblBhcmFtcy5yZWRlZW1TY3JpcHQsIGAke3Bvc1R5cGV9IHJlcXVpcmVzIE5PIHJlZGVlbVNjcmlwdGApO1xuICAgICAgdGZNZXNzYWdlKHR5cGVzLlNhdG9zaGksIHNpZ25QYXJhbXMud2l0bmVzc1ZhbHVlLCBgJHtwb3NUeXBlfSByZXF1aXJlcyB3aXRuZXNzVmFsdWVgKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ3Ayc2gtcDJ3c2gtcDJtcyc6XG4gICAgY2FzZSAncDJzaC1wMndzaC1wMnBrJzpcbiAgICBjYXNlICdwMnNoLXAyd3NoLXAycGtoJzpcbiAgICAgIGlmIChwcmV2T3V0VHlwZSAmJiBwcmV2T3V0VHlwZSAhPT0gJ3NjcmlwdGhhc2gnKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoYGlucHV0ICMke3NpZ25QYXJhbXMudmlufSBpcyBub3Qgb2YgdHlwZSAke3Bvc1R5cGV9OiAke3ByZXZPdXRUeXBlfWApO1xuICAgICAgfVxuICAgICAgdGZNZXNzYWdlKHR5cGVmb3JjZS5CdWZmZXIsIHNpZ25QYXJhbXMud2l0bmVzc1NjcmlwdCwgYCR7cG9zVHlwZX0gcmVxdWlyZXMgd2l0bmVzc1NjcmlwdGApO1xuICAgICAgdGZNZXNzYWdlKHR5cGVmb3JjZS5CdWZmZXIsIHNpZ25QYXJhbXMucmVkZWVtU2NyaXB0LCBgJHtwb3NUeXBlfSByZXF1aXJlcyB3aXRuZXNzU2NyaXB0YCk7XG4gICAgICB0Zk1lc3NhZ2UodHlwZXMuU2F0b3NoaSwgc2lnblBhcmFtcy53aXRuZXNzVmFsdWUsIGAke3Bvc1R5cGV9IHJlcXVpcmVzIHdpdG5lc3NTY3JpcHRgKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ3AydHInOlxuICAgICAgaWYgKHByZXZPdXRUeXBlICYmIHByZXZPdXRUeXBlICE9PSAndGFwcm9vdCcpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihgaW5wdXQgIyR7c2lnblBhcmFtcy52aW59IGlzIG5vdCBvZiB0eXBlICR7cG9zVHlwZX06ICR7cHJldk91dFR5cGV9YCk7XG4gICAgICB9XG4gICAgICB0Zk1lc3NhZ2UodHlwZWZvcmNlLnZhbHVlKHVuZGVmaW5lZCksIHNpZ25QYXJhbXMud2l0bmVzc1NjcmlwdCwgYCR7cG9zVHlwZX0gcmVxdWlyZXMgTk8gd2l0bmVzc1NjcmlwdGApO1xuICAgICAgdGZNZXNzYWdlKHR5cGVmb3JjZS52YWx1ZSh1bmRlZmluZWQpLCBzaWduUGFyYW1zLnJlZGVlbVNjcmlwdCwgYCR7cG9zVHlwZX0gcmVxdWlyZXMgTk8gcmVkZWVtU2NyaXB0YCk7XG4gICAgICB0Zk1lc3NhZ2UodHlwZWZvcmNlLnZhbHVlKHVuZGVmaW5lZCksIHNpZ25QYXJhbXMud2l0bmVzc1ZhbHVlLCBgJHtwb3NUeXBlfSByZXF1aXJlcyBOTyB3aXRuZXNzVmFsdWVgKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ3AydHItcDJucyc6XG4gICAgICBpZiAocHJldk91dFR5cGUgJiYgcHJldk91dFR5cGUgIT09ICd0YXByb290Jykge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGBpbnB1dCAjJHtzaWduUGFyYW1zLnZpbn0gaXMgbm90IG9mIHR5cGUgJHtwb3NUeXBlfTogJHtwcmV2T3V0VHlwZX1gKTtcbiAgICAgIH1cbiAgICAgIGlucHV0c1tzaWduUGFyYW1zLnZpbl0ucHJldk91dFR5cGUgPSBpbnB1dHNbc2lnblBhcmFtcy52aW5dLnByZXZPdXRUeXBlIHx8ICd0YXByb290JztcbiAgICAgIHRmTWVzc2FnZSh0eXBlZm9yY2UuQnVmZmVyLCBzaWduUGFyYW1zLndpdG5lc3NTY3JpcHQsIGAke3Bvc1R5cGV9IHJlcXVpcmVzIHdpdG5lc3NTY3JpcHRgKTtcbiAgICAgIHRmTWVzc2FnZSh0eXBlZm9yY2UuQnVmZmVyLCBzaWduUGFyYW1zLmNvbnRyb2xCbG9jaywgYCR7cG9zVHlwZX0gcmVxdWlyZXMgY29udHJvbEJsb2NrYCk7XG4gICAgICB0Zk1lc3NhZ2UodHlwZWZvcmNlLnZhbHVlKHVuZGVmaW5lZCksIHNpZ25QYXJhbXMucmVkZWVtU2NyaXB0LCBgJHtwb3NUeXBlfSByZXF1aXJlcyBOTyByZWRlZW1TY3JpcHRgKTtcbiAgICAgIGJyZWFrO1xuICB9XG59XG5cbmZ1bmN0aW9uIHRyeVNpZ248VE51bWJlciBleHRlbmRzIG51bWJlciB8IGJpZ2ludCA9IG51bWJlcj4oe1xuICBpbnB1dCxcbiAgb3VyUHViS2V5LFxuICBrZXlQYWlyLFxuICBzaWduYXR1cmVIYXNoLFxuICBoYXNoVHlwZSxcbiAgdXNlTG93UixcbiAgdGFwdHJlZVJvb3QsXG59OiBTaWduaW5nRGF0YTxUTnVtYmVyPik6IHZvaWQge1xuICBpZiAoaW5wdXQud2l0bmVzc1ZlcnNpb24gPT09IDEgJiYgb3VyUHViS2V5Lmxlbmd0aCA9PT0gMzMpIG91clB1YktleSA9IG91clB1YktleS5zbGljZSgxKTtcbiAgLy8gZW5mb3JjZSBpbiBvcmRlciBzaWduaW5nIG9mIHB1YmxpYyBrZXlzXG4gIGxldCBzaWduZWQgPSBmYWxzZTtcbiAgZm9yIChjb25zdCBbaSwgcHViS2V5XSBvZiBpbnB1dC5wdWJrZXlzIS5lbnRyaWVzKCkpIHtcbiAgICBpZiAoIW91clB1YktleS5lcXVhbHMocHViS2V5ISkpIGNvbnRpbnVlO1xuICAgIGlmIChpbnB1dC5zaWduYXR1cmVzIVtpXSAmJiBpbnB1dC5zaWduYXR1cmVzIVtpXSEubGVuZ3RoID4gMCkgdGhyb3cgbmV3IEVycm9yKCdTaWduYXR1cmUgYWxyZWFkeSBleGlzdHMnKTtcblxuICAgIC8vIFRPRE86IGFkZCB0ZXN0c1xuICAgIGlmIChvdXJQdWJLZXkubGVuZ3RoICE9PSAzMyAmJiBpbnB1dC53aXRuZXNzVmVyc2lvbiA9PT0gMCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdCSVAxNDMgKFdpdG5lc3MgdjApIGlucHV0cyByZXF1aXJlIGNvbXByZXNzZWQgcHVia2V5cycpO1xuICAgIH0gZWxzZSBpZiAob3VyUHViS2V5Lmxlbmd0aCAhPT0gMzIgJiYgaW5wdXQud2l0bmVzc1ZlcnNpb24gPT09IDEpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignQklQMzQxIChXaXRuZXNzIHYxKSBpbnB1dHMgcmVxdWlyZSB4LW9ubHkgcHVia2V5cycpO1xuICAgIH1cblxuICAgIGlmIChpbnB1dC53aXRuZXNzVmVyc2lvbiA9PT0gMSkge1xuICAgICAgaWYgKCFpbnB1dC53aXRuZXNzU2NyaXB0KSB7XG4gICAgICAgIC8vIEZJWE1FOiBXb3JrYXJvdW5kIGZvciBub3QgaGF2aW5nIHByb3BlciB0d2Vha2luZyBzdXBwb3J0IGZvciBrZXkgcGF0aFxuICAgICAgICBpZiAoIWtleVBhaXIucHJpdmF0ZUtleSkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgdW5leHBlY3RlZCBrZXlwYWlyYCk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcHJpdmF0ZUtleSA9IHRhcHJvb3QudGFwVHdlYWtQcml2a2V5KGVjY0xpYiwgb3VyUHViS2V5LCBrZXlQYWlyLnByaXZhdGVLZXksIHRhcHRyZWVSb290KTtcbiAgICAgICAga2V5UGFpciA9IEVDUGFpci5mcm9tUHJpdmF0ZUtleShCdWZmZXIuZnJvbShwcml2YXRlS2V5KSk7XG4gICAgICB9XG4gICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vYml0Y29pbi9iaXBzL2Jsb2IvbWFzdGVyL2JpcC0wMzQxLm1lZGlhd2lraSNjb21tb24tc2lnbmF0dXJlLW1lc3NhZ2VcbiAgICAgIGNvbnN0IHNpZ25hdHVyZSA9IGtleVBhaXIuc2lnblNjaG5vcnIoc2lnbmF0dXJlSGFzaCk7XG4gICAgICAvLyBTSUdIQVNIX0RFRkFVTFQgaXMgb21pdHRlZCBmcm9tIHRoZSBzaWduYXR1cmVcbiAgICAgIGlmIChoYXNoVHlwZSA9PT0gVHJhbnNhY3Rpb24uU0lHSEFTSF9ERUZBVUxUKSB7XG4gICAgICAgIGlucHV0LnNpZ25hdHVyZXMhW2ldID0gQnVmZmVyLmZyb20oc2lnbmF0dXJlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlucHV0LnNpZ25hdHVyZXMhW2ldID0gQnVmZmVyLmNvbmNhdChbc2lnbmF0dXJlLCBCdWZmZXIub2YoaGFzaFR5cGUpXSk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IHNpZ25hdHVyZSA9IGtleVBhaXIuc2lnbihzaWduYXR1cmVIYXNoLCB1c2VMb3dSKTtcbiAgICAgIGlucHV0LnNpZ25hdHVyZXMhW2ldID0gYnNjcmlwdC5zaWduYXR1cmUuZW5jb2RlKHNpZ25hdHVyZSwgaGFzaFR5cGUpO1xuICAgIH1cbiAgICBzaWduZWQgPSB0cnVlO1xuICB9XG5cbiAgaWYgKCFzaWduZWQpIHRocm93IG5ldyBFcnJvcignS2V5IHBhaXIgY2Fubm90IHNpZ24gZm9yIHRoaXMgaW5wdXQnKTtcbn1cblxuaW50ZXJmYWNlIFNpZ25pbmdEYXRhPFROdW1iZXIgZXh0ZW5kcyBudW1iZXIgfCBiaWdpbnQgPSBudW1iZXI+IHtcbiAgaW5wdXQ6IFR4YklucHV0PFROdW1iZXI+O1xuICBvdXJQdWJLZXk6IEJ1ZmZlcjtcbiAga2V5UGFpcjogU2lnbmVyO1xuICBzaWduYXR1cmVIYXNoOiBCdWZmZXI7XG4gIGhhc2hUeXBlOiBudW1iZXI7XG4gIHVzZUxvd1I6IGJvb2xlYW47XG4gIHRhcHRyZWVSb290PzogQnVmZmVyO1xufVxuXG50eXBlIEhhc2hUeXBlQ2hlY2sgPSAoaGFzaFR5cGU6IG51bWJlcikgPT4gYm9vbGVhbjtcblxuZnVuY3Rpb24gZ2V0U2lnbmluZ0RhdGE8VE51bWJlciBleHRlbmRzIG51bWJlciB8IGJpZ2ludCA9IG51bWJlcj4oXG4gIG5ldHdvcms6IE5ldHdvcmssXG4gIGlucHV0czogQXJyYXk8VHhiSW5wdXQ8VE51bWJlcj4+LFxuICBuZWVkc091dHB1dHM6IEhhc2hUeXBlQ2hlY2ssXG4gIHR4OiBUcmFuc2FjdGlvbjxUTnVtYmVyPixcbiAgc2lnblBhcmFtczogbnVtYmVyIHwgVHhiU2lnbkFyZzxUTnVtYmVyPixcbiAga2V5UGFpcj86IFNpZ25lcixcbiAgcmVkZWVtU2NyaXB0PzogQnVmZmVyLFxuICBoYXNoVHlwZT86IG51bWJlcixcbiAgd2l0bmVzc1ZhbHVlPzogVE51bWJlcixcbiAgd2l0bmVzc1NjcmlwdD86IEJ1ZmZlcixcbiAgY29udHJvbEJsb2NrPzogQnVmZmVyLFxuICBhbm5leD86IEJ1ZmZlcixcbiAgdXNlTG93Uj86IGJvb2xlYW5cbik6IFNpZ25pbmdEYXRhPFROdW1iZXI+IHtcbiAgbGV0IHZpbjogbnVtYmVyO1xuICBpZiAodHlwZW9mIHNpZ25QYXJhbXMgPT09ICdudW1iZXInKSB7XG4gICAgY29uc29sZS53YXJuKFxuICAgICAgJ0RFUFJFQ0FURUQ6IFRyYW5zYWN0aW9uQnVpbGRlciBzaWduIG1ldGhvZCBhcmd1bWVudHMgJyArICd3aWxsIGNoYW5nZSBpbiB2NiwgcGxlYXNlIHVzZSB0aGUgVHhiU2lnbkFyZyBpbnRlcmZhY2UnXG4gICAgKTtcbiAgICB2aW4gPSBzaWduUGFyYW1zO1xuICB9IGVsc2UgaWYgKHR5cGVvZiBzaWduUGFyYW1zID09PSAnb2JqZWN0Jykge1xuICAgIGNoZWNrU2lnbkFyZ3M8VE51bWJlcj4oaW5wdXRzLCBzaWduUGFyYW1zKTtcbiAgICAoeyB2aW4sIGtleVBhaXIsIHJlZGVlbVNjcmlwdCwgaGFzaFR5cGUsIHdpdG5lc3NWYWx1ZSwgd2l0bmVzc1NjcmlwdCwgY29udHJvbEJsb2NrLCBhbm5leCB9ID0gc2lnblBhcmFtcyk7XG4gIH0gZWxzZSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVHJhbnNhY3Rpb25CdWlsZGVyIHNpZ24gZmlyc3QgYXJnIG11c3QgYmUgVHhiU2lnbkFyZyBvciBudW1iZXInKTtcbiAgfVxuICBpZiAoa2V5UGFpciA9PT0gdW5kZWZpbmVkKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdzaWduIHJlcXVpcmVzIGtleXBhaXInKTtcbiAgfVxuICBpZiAoIWlucHV0c1t2aW5dKSB0aHJvdyBuZXcgRXJyb3IoJ05vIGlucHV0IGF0IGluZGV4OiAnICsgdmluKTtcblxuICBjb25zdCBpbnB1dCA9IGlucHV0c1t2aW5dO1xuXG4gIC8vIGlmIHJlZGVlbVNjcmlwdCB3YXMgcHJldmlvdXNseSBwcm92aWRlZCwgZW5mb3JjZSBjb25zaXN0ZW5jeVxuICBpZiAoaW5wdXQucmVkZWVtU2NyaXB0ICE9PSB1bmRlZmluZWQgJiYgcmVkZWVtU2NyaXB0ICYmICFpbnB1dC5yZWRlZW1TY3JpcHQuZXF1YWxzKHJlZGVlbVNjcmlwdCkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0luY29uc2lzdGVudCByZWRlZW1TY3JpcHQnKTtcbiAgfVxuXG4gIGNvbnN0IG91clB1YktleSA9IGtleVBhaXIucHVibGljS2V5IHx8IChrZXlQYWlyLmdldFB1YmxpY0tleSAmJiBrZXlQYWlyLmdldFB1YmxpY0tleSgpKTtcbiAgaWYgKCFjYW5TaWduPFROdW1iZXI+KGlucHV0KSkge1xuICAgIGlmICh3aXRuZXNzVmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgaWYgKGlucHV0LnZhbHVlICE9PSB1bmRlZmluZWQgJiYgaW5wdXQudmFsdWUgIT09IHdpdG5lc3NWYWx1ZSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0lucHV0IGRpZCBub3QgbWF0Y2ggd2l0bmVzc1ZhbHVlJyk7XG4gICAgICB9XG4gICAgICB0eXBlZm9yY2UodHlwZXMuU2F0b3NoaSwgd2l0bmVzc1ZhbHVlKTtcbiAgICAgIGlucHV0LnZhbHVlID0gd2l0bmVzc1ZhbHVlO1xuICAgIH1cblxuICAgIGlmICghY2FuU2lnbjxUTnVtYmVyPihpbnB1dCkpIHtcbiAgICAgIGNvbnN0IHByZXBhcmVkID0gcHJlcGFyZUlucHV0PFROdW1iZXI+KGlucHV0LCBvdXJQdWJLZXksIHJlZGVlbVNjcmlwdCwgd2l0bmVzc1NjcmlwdCwgY29udHJvbEJsb2NrLCBhbm5leCk7XG5cbiAgICAgIC8vIHVwZGF0ZXMgaW5saW5lXG4gICAgICBPYmplY3QuYXNzaWduKGlucHV0LCBwcmVwYXJlZCk7XG4gICAgfVxuXG4gICAgaWYgKCFjYW5TaWduPFROdW1iZXI+KGlucHV0KSkgdGhyb3cgRXJyb3IoaW5wdXQucHJldk91dFR5cGUgKyAnIG5vdCBzdXBwb3J0ZWQnKTtcbiAgfVxuXG4gIC8vIGhhc2hUeXBlIGNhbiBiZSAwIGluIFRhcHJvb3QsIHNvIGNhbid0IHVzZSBoYXNoVHlwZSB8fCBTSUdIQVNIX0FMTFxuICBpZiAoaW5wdXQud2l0bmVzc1ZlcnNpb24gPT09IDEpIHtcbiAgICBoYXNoVHlwZSA9IGhhc2hUeXBlID09PSB1bmRlZmluZWQgPyBUcmFuc2FjdGlvbi5TSUdIQVNIX0RFRkFVTFQgOiBoYXNoVHlwZTtcbiAgfSBlbHNlIHtcbiAgICBoYXNoVHlwZSA9IGhhc2hUeXBlIHx8IFRyYW5zYWN0aW9uLlNJR0hBU0hfQUxMO1xuICB9XG4gIGlmIChuZWVkc091dHB1dHMoaGFzaFR5cGUpKSB0aHJvdyBuZXcgRXJyb3IoJ1RyYW5zYWN0aW9uIG5lZWRzIG91dHB1dHMnKTtcblxuICAvLyBUT0RPOiBUaGlzIGlzIG5vdCB0aGUgYmVzdCBwbGFjZSB0byBkbyB0aGlzLCBidXQgbWlnaHQgc3RpY2sgd2l0aCBpdCB1bnRpbCBQU0JUXG4gIGxldCBsZWFmSGFzaDtcbiAgbGV0IHRhcHRyZWVSb290O1xuICBpZiAoY29udHJvbEJsb2NrICYmIHdpdG5lc3NTY3JpcHQpIHtcbiAgICBsZWFmSGFzaCA9IHRhcHJvb3QuZ2V0VGFwbGVhZkhhc2goZWNjTGliLCBjb250cm9sQmxvY2ssIHdpdG5lc3NTY3JpcHQpO1xuICAgIHRhcHRyZWVSb290ID0gdGFwcm9vdC5nZXRUYXB0cmVlUm9vdChlY2NMaWIsIGNvbnRyb2xCbG9jaywgd2l0bmVzc1NjcmlwdCwgbGVhZkhhc2gpO1xuICB9XG5cbiAgLy8gcmVhZHkgdG8gc2lnblxuICBsZXQgc2lnbmF0dXJlSGFzaDogQnVmZmVyO1xuICBzd2l0Y2ggKGlucHV0LndpdG5lc3NWZXJzaW9uKSB7XG4gICAgY2FzZSB1bmRlZmluZWQ6XG4gICAgICBzaWduYXR1cmVIYXNoID0gdHguaGFzaEZvclNpZ25hdHVyZSh2aW4sIGlucHV0LnNpZ25TY3JpcHQgYXMgQnVmZmVyLCBoYXNoVHlwZSwgaW5wdXQudmFsdWUpO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAwOlxuICAgICAgc2lnbmF0dXJlSGFzaCA9IHR4Lmhhc2hGb3JXaXRuZXNzVjAodmluLCBpbnB1dC5zaWduU2NyaXB0IGFzIEJ1ZmZlciwgaW5wdXQudmFsdWUgYXMgVE51bWJlciwgaGFzaFR5cGUpO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAxOlxuICAgICAgc2lnbmF0dXJlSGFzaCA9IHR4Lmhhc2hGb3JXaXRuZXNzVjEoXG4gICAgICAgIHZpbixcbiAgICAgICAgaW5wdXRzLm1hcCgoeyBwcmV2T3V0U2NyaXB0IH0pID0+IHByZXZPdXRTY3JpcHQgYXMgQnVmZmVyKSxcbiAgICAgICAgaW5wdXRzLm1hcCgoeyB2YWx1ZSB9KSA9PiB2YWx1ZSBhcyBUTnVtYmVyKSxcbiAgICAgICAgaGFzaFR5cGUsXG4gICAgICAgIGxlYWZIYXNoXG4gICAgICApO1xuICAgICAgYnJlYWs7XG4gICAgZGVmYXVsdDpcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1Vuc3VwcG9ydGVkIHdpdG5lc3MgdmVyc2lvbicpO1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBpbnB1dCxcbiAgICBvdXJQdWJLZXksXG4gICAga2V5UGFpcixcbiAgICBzaWduYXR1cmVIYXNoLFxuICAgIGhhc2hUeXBlLFxuICAgIHVzZUxvd1I6ICEhdXNlTG93UixcbiAgICB0YXB0cmVlUm9vdCxcbiAgfTtcbn1cbiJdfQ==
package/package.json CHANGED
@@ -1,10 +1,10 @@
1
1
  {
2
2
  "name": "utxo-lib",
3
- "version": "1.0.8",
3
+ "version": "1.1.0",
4
4
  "description": "Client-side Bitcoin JavaScript library",
5
5
  "main": "./dist/src/index.js",
6
6
  "engines": {
7
- "node": ">=10.22.0 <17",
7
+ "node": ">=10.22.0 <19",
8
8
  "npm": ">=3.10.10"
9
9
  },
10
10
  "keywords": [
@@ -46,14 +46,13 @@
46
46
  "dist/src"
47
47
  ],
48
48
  "dependencies": {
49
- "@bitgo/blake2b": "^3.2.1",
50
- "@brandonblack/musig": "https://github.com/Mustafa-Agha/musig-js.git",
49
+ "@bitgo/blake2b": "^3.2.4",
51
50
  "@noble/secp256k1": "1.6.3",
52
51
  "bech32": "^2.0.0",
53
- "bip174": "npm:@bitgo-forks/bip174@3.1.0-master.3",
52
+ "bip174": "npm:@bitgo-forks/bip174@3.1.0-master.4",
54
53
  "bip32": "^3.0.1",
55
54
  "bitcoin-ops": "^1.3.0",
56
- "bitcoinjs-lib": "npm:@bitgo-forks/bitcoinjs-lib@7.1.0-master.4",
55
+ "bitcoinjs-lib": "npm:@bitgo-forks/bitcoinjs-lib@7.1.0-master.6",
57
56
  "bn.js": "^5.2.1",
58
57
  "bs58check": "^2.1.2",
59
58
  "cashaddress": "^1.1.0",
@@ -68,7 +67,7 @@
68
67
  "devDependencies": {
69
68
  "@types/elliptic": "^6.4.12",
70
69
  "@types/fs-extra": "^9.0.12",
71
- "@types/node": "^14.18.12",
70
+ "@types/node": "^16.18.46",
72
71
  "axios": "^0.21.1",
73
72
  "debug": "^3.1.0",
74
73
  "fs-extra": "^9.1.0"