@bitgo-beta/abstract-utxo 1.1.1-beta.2266 → 1.1.1-beta.2268

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (64) hide show
  1. package/dist/cjs/src/abstractUtxoCoin.d.ts.map +1 -1
  2. package/dist/cjs/src/abstractUtxoCoin.js +3 -3
  3. package/dist/cjs/src/impl/zec/address.d.ts +6 -0
  4. package/dist/cjs/src/impl/zec/address.d.ts.map +1 -1
  5. package/dist/cjs/src/impl/zec/address.js +38 -1
  6. package/dist/cjs/src/impl/zec/recipients.d.ts +2 -1
  7. package/dist/cjs/src/impl/zec/recipients.d.ts.map +1 -1
  8. package/dist/cjs/src/impl/zec/recipients.js +7 -3
  9. package/dist/cjs/src/impl/zec/types.d.ts +5 -0
  10. package/dist/cjs/src/impl/zec/types.d.ts.map +1 -1
  11. package/dist/cjs/src/impl/zec/types.js +1 -1
  12. package/dist/cjs/src/impl/zec/zec.d.ts +21 -2
  13. package/dist/cjs/src/impl/zec/zec.d.ts.map +1 -1
  14. package/dist/cjs/src/impl/zec/zec.js +57 -1
  15. package/dist/cjs/src/transaction/explainTransaction.d.ts +2 -1
  16. package/dist/cjs/src/transaction/explainTransaction.d.ts.map +1 -1
  17. package/dist/cjs/src/transaction/explainTransaction.js +3 -2
  18. package/dist/cjs/src/transaction/fixedScript/explainPsbtWasm.d.ts +2 -0
  19. package/dist/cjs/src/transaction/fixedScript/explainPsbtWasm.d.ts.map +1 -1
  20. package/dist/cjs/src/transaction/fixedScript/explainPsbtWasm.js +4 -1
  21. package/dist/cjs/src/transaction/fixedScript/parseTransaction.d.ts.map +1 -1
  22. package/dist/cjs/src/transaction/fixedScript/parseTransaction.js +9 -3
  23. package/dist/cjs/src/transaction/recipient.d.ts +24 -1
  24. package/dist/cjs/src/transaction/recipient.d.ts.map +1 -1
  25. package/dist/cjs/src/transaction/recipient.js +32 -4
  26. package/dist/cjs/test/unit/bip322.js +14 -4
  27. package/dist/cjs/test/unit/customChangeWallet.js +3 -1
  28. package/dist/cjs/test/unit/impl/zec/psbtDecode.d.ts +2 -0
  29. package/dist/cjs/test/unit/impl/zec/psbtDecode.d.ts.map +1 -0
  30. package/dist/cjs/test/unit/impl/zec/psbtDecode.js +69 -0
  31. package/dist/cjs/test/unit/impl/zec/shieldedPrebuildAndSign.d.ts +2 -0
  32. package/dist/cjs/test/unit/impl/zec/shieldedPrebuildAndSign.d.ts.map +1 -0
  33. package/dist/cjs/test/unit/impl/zec/shieldedPrebuildAndSign.js +329 -0
  34. package/dist/cjs/test/unit/impl/zec/unit/address.js +23 -1
  35. package/dist/cjs/test/unit/impl/zec/unit/resolvePsbtRecipients.js +7 -5
  36. package/dist/cjs/test/unit/transaction/fixedScript/explainPsbt.js +9 -1
  37. package/dist/cjs/test/unit/transaction/fixedScript/parsePsbt.js +2 -1
  38. package/dist/cjs/tsconfig.tsbuildinfo +1 -1
  39. package/dist/esm/abstractUtxoCoin.d.ts.map +1 -1
  40. package/dist/esm/abstractUtxoCoin.js +3 -3
  41. package/dist/esm/impl/zec/address.d.ts +6 -0
  42. package/dist/esm/impl/zec/address.d.ts.map +1 -1
  43. package/dist/esm/impl/zec/address.js +38 -1
  44. package/dist/esm/impl/zec/recipients.d.ts +2 -1
  45. package/dist/esm/impl/zec/recipients.d.ts.map +1 -1
  46. package/dist/esm/impl/zec/recipients.js +7 -3
  47. package/dist/esm/impl/zec/types.d.ts +5 -0
  48. package/dist/esm/impl/zec/types.d.ts.map +1 -1
  49. package/dist/esm/impl/zec/types.js +1 -1
  50. package/dist/esm/impl/zec/zec.d.ts +21 -2
  51. package/dist/esm/impl/zec/zec.d.ts.map +1 -1
  52. package/dist/esm/impl/zec/zec.js +57 -1
  53. package/dist/esm/transaction/explainTransaction.d.ts +2 -1
  54. package/dist/esm/transaction/explainTransaction.d.ts.map +1 -1
  55. package/dist/esm/transaction/explainTransaction.js +3 -2
  56. package/dist/esm/transaction/fixedScript/explainPsbtWasm.d.ts +2 -0
  57. package/dist/esm/transaction/fixedScript/explainPsbtWasm.d.ts.map +1 -1
  58. package/dist/esm/transaction/fixedScript/explainPsbtWasm.js +4 -1
  59. package/dist/esm/transaction/fixedScript/parseTransaction.d.ts.map +1 -1
  60. package/dist/esm/transaction/fixedScript/parseTransaction.js +9 -3
  61. package/dist/esm/transaction/recipient.d.ts +24 -1
  62. package/dist/esm/transaction/recipient.d.ts.map +1 -1
  63. package/dist/esm/transaction/recipient.js +32 -4
  64. package/package.json +10 -10
@@ -1 +1 @@
1
- {"version":3,"file":"abstractUtxoCoin.d.ts","sourceRoot":"","sources":["../../../src/abstractUtxoCoin.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"abstractUtxoCoin.d.ts","sourceRoot":"","sources":["../../../src/abstractUtxoCoin.ts"],"names":[],"mappings":"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"}
@@ -477,9 +477,9 @@ class AbstractUtxoCoin extends sdk_core_1.BaseCoin {
477
477
  if (wallet && (0, descriptor_1.isDescriptorWallet)(wallet)) {
478
478
  // Descriptor wallets decode prebuild bytes straight into the wasm-utxo
479
479
  // descriptor Psbt, skipping the fixedScriptWallet.BitGoPsbt intermediate.
480
- return (0, transaction_1.explainTx)((0, decode_1.decodeDescriptorPsbt)(params), { ...params, wallet }, this.wasmName);
480
+ return (0, transaction_1.explainTx)((0, decode_1.decodeDescriptorPsbt)(params), { ...params, wallet }, this.wasmName, this.addressCodec);
481
481
  }
482
- return (0, transaction_1.explainTx)(this.decodeTransactionFromPrebuild(params), { ...params, wallet }, this.wasmName);
482
+ return (0, transaction_1.explainTx)(this.decodeTransactionFromPrebuild(params), { ...params, wallet }, this.wasmName, this.addressCodec);
483
483
  }
484
484
  /**
485
485
  * @deprecated - use {@see backupKeyRecovery}
@@ -641,4 +641,4 @@ class AbstractUtxoCoin extends sdk_core_1.BaseCoin {
641
641
  }
642
642
  }
643
643
  exports.AbstractUtxoCoin = AbstractUtxoCoin;
644
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWJzdHJhY3RVdHhvQ29pbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9hYnN0cmFjdFV0eG9Db2luLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBLG9EQUE0QjtBQUM1QixtQ0FBcUM7QUFFckMsb0RBQXVCO0FBQ3ZCLGdEQUEwRTtBQUMxRSxtREEyQzhCO0FBRTlCLHlDQVlvQjtBQUNwQixpRkFBbUg7QUFDbkgscUNBQXlEO0FBQ3pELCtDQUErRTtBQUMvRSx1REFBdUQ7QUFHdkQsa0ZBSW9EO0FBQ3BELDZDQUE2RztBQUM3RyxtQ0FRaUI7QUFDakIsdURBQXdGO0FBRXhGLGlEQUFxSDtBQUNySCwyQ0FBMEU7QUFDMUUsMkNBQXNFO0FBQ3RFLGdFQUE4RDtBQUM5RCxtRUFBZ0U7QUFDaEUscUNBQXdEO0FBQ3hELG9FQUF1RTtBQWtCdkUsTUFBYSx1QkFBd0IsU0FBUSxLQUFLO0lBQ2hELFlBQVksUUFBa0I7UUFDNUIsS0FBSyxDQUFDLDRCQUE0QixRQUFRLDhEQUE4RCxDQUFDLENBQUM7SUFDNUcsQ0FBQztDQUNGO0FBSkQsMERBSUM7QUEyQkQ7O0dBRUc7QUFDSCxTQUFTLG9CQUFvQixDQUMzQixFQUErQixFQUMvQixJQUEwQixFQUMxQixRQUFzQjtJQUV0QixJQUFBLGdCQUFNLEVBQUMsSUFBSSxJQUFJLElBQUEsbUJBQVEsRUFBQyxJQUFJLENBQUMsRUFBRSw2RUFBNkUsQ0FBQyxDQUFDO0lBQzlHLE1BQU0sY0FBYyxHQUFHLDZCQUFpQixDQUFDLGNBQWMsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDeEUsTUFBTSxnQkFBZ0IsR0FBRyxFQUFFLFVBQVUsRUFBRSxJQUFBLDZDQUEwQixFQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUM7SUFDOUUsTUFBTSxNQUFNLEdBQUcsRUFBRSxDQUFDLDhCQUE4QixDQUFDLGNBQWMsRUFBRSxFQUFFLGdCQUFnQixFQUFFLENBQUMsQ0FBQztJQUN2RixP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RyxHQUtKO1FBQ0MsSUFBSSxZQUFZLEtBQUssS0FBSyxFQUFFLENBQUM7WUFDM0IsTUFBTSxJQUFJLEtBQUssQ0FBQyw2Q0FBNkMsQ0FBQyxDQUFDO1FBQ2pFLENBQUM7UUFDRCxJQUFJLENBQUMsSUFBQSxxQkFBVSxFQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBQSxzQkFBVyxFQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDMUMsTUFBTSxJQUFJLEtBQUssQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDO1FBQ3pDLENBQUM7UUFDRCxJQUFJLFNBQVMsRUFBRSxDQUFDO1lBQ2QsTUFBTSxTQUFTLEdBQUcsaUJBQUssQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLENBQUMsUUFBUSxFQUFFLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDOUQsSUFBSSxTQUFTLEtBQUssU0FBUyxFQUFFLENBQUM7Z0JBQzVCLE1BQU0sSUFBSSxLQUFLLENBQUMsdUNBQXVDLENBQUMsQ0FBQztZQUMzRCxDQUFDO1FBQ0gsQ0FBQztJQUNILENBQUM7Q0FDRjtBQWx0QkQsNENBa3RCQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBhc3NlcnQgZnJvbSAnYXNzZXJ0JztcbmltcG9ydCB7IHJhbmRvbUJ5dGVzIH0gZnJvbSAnY3J5cHRvJztcblxuaW1wb3J0IF8gZnJvbSAnbG9kYXNoJztcbmltcG9ydCB7IEJJUDMyLCBmaXhlZFNjcmlwdFdhbGxldCwgaGFzUHNidE1hZ2ljIH0gZnJvbSAnQGJpdGdvL3dhc20tdXR4byc7XG5pbXBvcnQge1xuICBBZGRyZXNzQ29pblNwZWNpZmljLFxuICBCYXNlQ29pbixcbiAgQml0R29CYXNlLFxuICBDb2xkVHJhbnNhY3Rpb25QcmVidWlsZCxcbiAgQ3JlYXRlQWRkcmVzc0Zvcm1hdCxcbiAgRXh0cmFQcmVidWlsZFBhcmFtc09wdGlvbnMsXG4gIEhhbGZTaWduZWRVdHhvVHJhbnNhY3Rpb24sXG4gIElCYXNlQ29pbixcbiAgaXNCb2x0MTFJbnZvaWNlLFxuICBJbnZhbGlkQWRkcmVzc0Rlcml2YXRpb25Qcm9wZXJ0eUVycm9yLFxuICBJbnZhbGlkQWRkcmVzc0Vycm9yLFxuICBJUmVxdWVzdFRyYWNlcixcbiAgaXNUcmlwbGUsXG4gIElXYWxsZXQsXG4gIEtleWNoYWluLFxuICBLZXljaGFpbnNUcmlwbGV0LFxuICBLZXlJbmRpY2VzLFxuICBNaXNtYXRjaGVkUmVjaXBpZW50LFxuICBNdWx0aXNpZ1R5cGUsXG4gIG11bHRpc2lnVHlwZXMsXG4gIFBhcnNlVHJhbnNhY3Rpb25PcHRpb25zIGFzIEJhc2VQYXJzZVRyYW5zYWN0aW9uT3B0aW9ucyxcbiAgUHJlY3JlYXRlQml0R29PcHRpb25zLFxuICBQcmVzaWduVHJhbnNhY3Rpb25PcHRpb25zLFxuICBCcmlkZ2luZ1BhcmFtcyxcbiAgUmVxdWVzdFRyYWNlcixcbiAgU2lnbmVkVHJhbnNhY3Rpb24sXG4gIFR4SW50ZW50TWlzbWF0Y2hFcnJvcixcbiAgU2lnblRyYW5zYWN0aW9uT3B0aW9ucyBhcyBCYXNlU2lnblRyYW5zYWN0aW9uT3B0aW9ucyxcbiAgU3VwcGxlbWVudEdlbmVyYXRlV2FsbGV0T3B0aW9ucyxcbiAgVHJhbnNhY3Rpb25QYXJhbXMgYXMgQmFzZVRyYW5zYWN0aW9uUGFyYW1zLFxuICBUcmFuc2FjdGlvblByZWJ1aWxkIGFzIEJhc2VUcmFuc2FjdGlvblByZWJ1aWxkLFxuICBUcmlwbGUsXG4gIFR4SW50ZW50TWlzbWF0Y2hSZWNpcGllbnRFcnJvcixcbiAgVmVyaWZpY2F0aW9uT3B0aW9ucyxcbiAgVmVyaWZ5QWRkcmVzc09wdGlvbnMgYXMgQmFzZVZlcmlmeUFkZHJlc3NPcHRpb25zLFxuICBWZXJpZnlUcmFuc2FjdGlvbk9wdGlvbnMgYXMgQmFzZVZlcmlmeVRyYW5zYWN0aW9uT3B0aW9ucyxcbiAgV2FsbGV0LFxuICBpc1ZhbGlkUHJ2LFxuICBpc1ZhbGlkWHBydixcbiAgRGVyaXZlQWRkcmVzc09wdGlvbnMsXG4gIERlcml2ZUFkZHJlc3NSZXN1bHQsXG4gIFVuaWZpZWRSZWNpcGllbnRQcmVmZXJlbmNlLFxufSBmcm9tICdAYml0Z28tYmV0YS9zZGstY29yZSc7XG5cbmltcG9ydCB7XG4gIGJhY2t1cEtleVJlY292ZXJ5LFxuICBDcm9zc0NoYWluUmVjb3ZlcnlTaWduZWQsXG4gIENyb3NzQ2hhaW5SZWNvdmVyeVVuc2lnbmVkLFxuICBmb3JDb2luLFxuICByZWNvdmVyQ3Jvc3NDaGFpbixcbiAgUmVjb3ZlclBhcmFtcyxcbiAgUmVjb3ZlcnlQcm92aWRlcixcbiAgdjFCYWNrdXBLZXlSZWNvdmVyeSxcbiAgVjFSZWNvdmVyUGFyYW1zLFxuICB2MVN3ZWVwLFxuICBWMVN3ZWVwUGFyYW1zLFxufSBmcm9tICcuL3JlY292ZXJ5JztcbmltcG9ydCB7IGdldFJlcGxheVByb3RlY3Rpb25QdWJrZXlzLCBpc1JlcGxheVByb3RlY3Rpb25VbnNwZW50IH0gZnJvbSAnLi90cmFuc2FjdGlvbi9maXhlZFNjcmlwdC9yZXBsYXlQcm90ZWN0aW9uJztcbmltcG9ydCB7IHN1cHBvcnRlZENyb3NzQ2hhaW5SZWNvdmVyaWVzIH0gZnJvbSAnLi9jb25maWcnO1xuaW1wb3J0IHsgZXhwbGFpblR4LCBwYXJzZVRyYW5zYWN0aW9uLCB2ZXJpZnlUcmFuc2FjdGlvbiB9IGZyb20gJy4vdHJhbnNhY3Rpb24nO1xuaW1wb3J0IHsgQWRkcmVzc0NvZGVjIH0gZnJvbSAnLi90cmFuc2FjdGlvbi9yZWNpcGllbnQnO1xuaW1wb3J0IHR5cGUgeyBUcmFuc2FjdGlvbkV4cGxhbmF0aW9uIH0gZnJvbSAnLi90cmFuc2FjdGlvbi9maXhlZFNjcmlwdC9leHBsYWluVHJhbnNhY3Rpb24nO1xuaW1wb3J0IHsgTXVzaWcyUGFydGljaXBhbnQgfSBmcm9tICcuL3RyYW5zYWN0aW9uL2ZpeGVkU2NyaXB0L211c2lnMic7XG5pbXBvcnQge1xuICBBZ2dyZWdhdGVWYWxpZGF0aW9uRXJyb3IsXG4gIEVycm9yTWlzc2luZ091dHB1dHMsXG4gIEVycm9ySW1wbGljaXRFeHRlcm5hbE91dHB1dHMsXG59IGZyb20gJy4vdHJhbnNhY3Rpb24vZGVzY3JpcHRvci92ZXJpZnlUcmFuc2FjdGlvbic7XG5pbXBvcnQgeyBhc3NlcnREZXNjcmlwdG9yV2FsbGV0QWRkcmVzcywgZ2V0RGVzY3JpcHRvck1hcEZyb21XYWxsZXQsIGlzRGVzY3JpcHRvcldhbGxldCB9IGZyb20gJy4vZGVzY3JpcHRvcic7XG5pbXBvcnQge1xuICBnZXRGdWxsTmFtZUZyb21Db2luTmFtZSxcbiAgZ2V0TWFpbm5ldENvaW5OYW1lLFxuICB0b1dhc21VdHhvQ29pbk5hbWUsXG4gIGlzTWFpbm5ldENvaW4sXG4gIFdhc21VdHhvQ29pbk5hbWUsXG4gIFV0eG9Db2luTmFtZSxcbiAgVXR4b0NvaW5OYW1lTWFpbm5ldCxcbn0gZnJvbSAnLi9uYW1lcyc7XG5pbXBvcnQgeyBhc3NlcnRGaXhlZFNjcmlwdFdhbGxldEFkZHJlc3MsIGdlbmVyYXRlQWRkcmVzcyB9IGZyb20gJy4vYWRkcmVzcy9maXhlZFNjcmlwdCc7XG5pbXBvcnQgeyBQYXJzZWRUcmFuc2FjdGlvbiB9IGZyb20gJy4vdHJhbnNhY3Rpb24vdHlwZXMnO1xuaW1wb3J0IHsgZGVjb2RlRGVzY3JpcHRvclBzYnQsIGRlY29kZVBzYnQsIGVuY29kZVRyYW5zYWN0aW9uLCBzdHJpbmdUb0J1ZmZlclRyeUZvcm1hdHMgfSBmcm9tICcuL3RyYW5zYWN0aW9uL2RlY29kZSc7XG5pbXBvcnQgeyBmZXRjaEtleWNoYWlucywgdG9CaXAzMlRyaXBsZSwgVXR4b0tleWNoYWluIH0gZnJvbSAnLi9rZXljaGFpbnMnO1xuaW1wb3J0IHsgdmVyaWZ5S2V5U2lnbmF0dXJlLCB2ZXJpZnlVc2VyUHVibGljS2V5IH0gZnJvbSAnLi92ZXJpZnlLZXknO1xuaW1wb3J0IHsgZ2V0UG9saWN5Rm9yRW52IH0gZnJvbSAnLi9kZXNjcmlwdG9yL3ZhbGlkYXRlUG9saWN5JztcbmltcG9ydCB7IHNpZ25UcmFuc2FjdGlvbiB9IGZyb20gJy4vdHJhbnNhY3Rpb24vc2lnblRyYW5zYWN0aW9uJztcbmltcG9ydCB7IGlzVXR4b1dhbGxldERhdGEsIFV0eG9XYWxsZXQgfSBmcm9tICcuL3dhbGxldCc7XG5pbXBvcnQgeyBpc0Rlc2NyaXB0b3JXYWxsZXREYXRhIH0gZnJvbSAnLi9kZXNjcmlwdG9yL2Rlc2NyaXB0b3JXYWxsZXQnO1xuaW1wb3J0IHR5cGUgeyBVbnNwZW50IH0gZnJvbSAnLi91bnNwZW50JztcblxudHlwZSBTY3JpcHRUeXBlMk9mMyA9ICdwMnNoJyB8ICdwMnNoUDJ3c2gnIHwgJ3Ayd3NoJyB8ICdwMnRyJyB8ICdwMnRyTXVzaWcyJztcblxuZXhwb3J0IHR5cGUgVHhGb3JtYXQgPVxuICAvLyBUaGlzIGlzIGEgbGVnYWN5IHRyYW5zYWN0aW9uIGZvcm1hdCBiYXNlZCBhcm91bmQgdGhlIGJpdGNvaW5qcy1saWIgc2VyaWFsaXphdGlvbiBvZiB1bnNpZ25lZCB0cmFuc2FjdGlvbnNcbiAgLy8gZG9lcyBub3QgaW5jbHVkZSBwcmV2T3V0IGRhdGEgYW5kIGlzIGEgYml0IHBhaW5mdWwgdG8gd29yayB3aXRoXG4gIC8vIGdvaW5nIHRvIGJlIGRlcHJlY2F0ZWQgaW4gZmF2b3Igb2YgcHNidFxuICAvLyBAZGVwcmVjYXRlZFxuICB8ICdsZWdhY3knXG4gIC8vIFRoaXMgaXMgdGhlIHN0YW5kYXJkIHBzYnQgZm9ybWF0LCBpbmNsdWRpbmcgdGhlIGZ1bGwgcHJldlR4IGRhdGEgZm9yIGxlZ2FjeSB0cmFuc2FjdGlvbnMuXG4gIC8vIFRoaXMgd2lsbCByZW1haW4gc3VwcG9ydGVkIGJ1dCBpcyBub3QgdGhlIGRlZmF1bHQsIHNpbmNlIHRoZSBkYXRhIHNpemVzIGNhbiBiZWNvbWUgcHJvaGliaXRpdmVseSBsYXJnZS5cbiAgfCAncHNidCdcbiAgLy8gVGhpcyBpcyBhIG5vbnN0YW5kYXJkIHBzYnQgdmVyc2lvbiB3aGVyZSBsZWdhY3kgaW5wdXRzIGFyZSBzZXJpYWxpemVkIGFzIGlmIHRoZXkgd2VyZSBzZWd3aXQgaW5wdXRzLlxuICAvLyBXaGlsZSB0aGlzIHByZXZlbnRzIHVzIHRvIGZ1bGx5IHZlcmlmeSB0aGUgdHJhbnNhY3Rpb24gZmVlLCB3ZSBoYXZlIG90aGVyIGNoZWNrcyBpbiBwbGFjZSB0byBlbnN1cmUgdGhlIGZlZSBpcyB3aXRoaW4gYm91bmRzLlxuICB8ICdwc2J0LWxpdGUnO1xuXG5leHBvcnQgY2xhc3MgRXJyb3JEZXByZWNhdGVkVHhGb3JtYXQgZXh0ZW5kcyBFcnJvciB7XG4gIGNvbnN0cnVjdG9yKHR4Rm9ybWF0OiBUeEZvcm1hdCkge1xuICAgIHN1cGVyKGBTREsgc3VwcG9ydCBmb3IgdHhGb3JtYXQ9JHt0eEZvcm1hdH0gaXMgZGVwcmVjYXRlZCBvbiB0aGlzIGVudmlyb25tZW50LiBQbGVhc2UgdXNlIHBzYnQgaW5zdGVhZC5gKTtcbiAgfVxufVxuXG50eXBlIFV0eG9DdXN0b21TaWduaW5nRnVuY3Rpb248VE51bWJlciBleHRlbmRzIG51bWJlciB8IGJpZ2ludD4gPSB7XG4gIChwYXJhbXM6IHtcbiAgICBjb2luOiBJQmFzZUNvaW47XG4gICAgdHhQcmVidWlsZDogVHJhbnNhY3Rpb25QcmVidWlsZDxUTnVtYmVyPjtcbiAgICBwdWJzPzogc3RyaW5nW107XG4gICAgLyoqXG4gICAgICogc2lnbmluZ1N0ZXAgZmxhZyBiZWNvbWVzIGFwcGxpY2FibGUgd2hlbiBib3RoIG9mIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OlxuICAgICAqIDEpIFdoZW4gdGhlIGV4dGVybmFsIGV4cHJlc3Mgc2lnbmVyIGlzIGFjdGl2YXRlZFxuICAgICAqIDIpIFdoZW4gdGhlIFBTQlQgaW5jbHVkZXMgYXQgbGVhc3Qgb25lIHRhcHJvb3RLZXlQYXRoU3BlbmQgaW5wdXQuXG4gICAgICpcbiAgICAgKiBUaGUgc2lnbmluZyBwcm9jZXNzIG9mIGEgdGFwcm9vdEtleVBhdGhTcGVuZCBpbnB1dCBpcyBhIDQtc3RlcCBzZXF1ZW5jZTpcbiAgICAgKiBpKSB1c2VyIG5vbmNlIGdlbmVyYXRpb24gLSBzaWduZXJOb25jZSAtIHRoaXMgaXMgdGhlIGZpcnN0IGNhbGwgdG8gZXh0ZXJuYWwgZXhwcmVzcyBzaWduZXIgc2lnblRyYW5zYWN0aW9uXG4gICAgICogaWkpIGJpdGdvIG5vbmNlIGdlbmVyYXRpb24gLSBjb3NpZ25lck5vbmNlIC0gdGhpcyBpcyB0aGUgZmlyc3QgYW5kIG9ubHkgY2FsbCB0byBsb2NhbCBzaWduVHJhbnNhY3Rpb25cbiAgICAgKiBpaWkpIHVzZXIgc2lnbmF0dXJlIC0gc2lnbmVyU2lnbmF0dXJlIC0gdGhpcyBpcyB0aGUgc2Vjb25kIGNhbGwgdG8gZXh0ZXJuYWwgZXhwcmVzcyBzaWduZXIgc2lnblRyYW5zYWN0aW9uXG4gICAgICogaXYpIGJpdGdvIHNpZ25hdHVyZSAtIG5vdCBpbiBzaWduVHJhbnNhY3Rpb24gbWV0aG9k4oCZcyBzY29wZVxuICAgICAqXG4gICAgICogSW4gdGhlIGFic2VuY2Ugb2YgdGhpcyBmbGFnLCB0aGUgYWZvcmVtZW50aW9uZWQgZmlyc3QgdGhyZWUgc2VxdWVuY2UgaXMgZXhlY3V0ZWQgaW4gYSBzaW5nbGUgc2lnblRyYW5zYWN0aW9uIGNhbGwuXG4gICAgICpcbiAgICAgKiBOT1RFOiBXZSBtYWtlIGEgc3Ryb25nIGFzc3VtcHRpb24gdGhhdCB0aGUgZXh0ZXJuYWwgZXhwcmVzcyBzaWduZXIgYW5kIGl0cyBjYWxsZXIgdXNlcyBzdGlja3kgc2Vzc2lvbnMsXG4gICAgICogc2luY2UgUFNCVHMgYXJlIGNhY2hlZCBpbiBzdGVwIDEgdG8gYmUgdXNlZCBpbiBzdGVwIDMgZm9yIE11U2lnMiB1c2VyIHNlY3VyZSBub25jZSBhY2Nlc3MuXG4gICAgICovXG4gICAgc2lnbmluZ1N0ZXA/OiAnc2lnbmVyTm9uY2UnIHwgJ3NpZ25lclNpZ25hdHVyZScgfCAnY29zaWduZXJOb25jZSc7XG4gIH0pOiBQcm9taXNlPFNpZ25lZFRyYW5zYWN0aW9uPjtcbn07XG5cbi8qKlxuICogQ2hlY2sgaWYgYSBkZWNvZGVkIHRyYW5zYWN0aW9uIGhhcyBhdCBsZWFzdCBvbmUgdGFwcm9vdCBrZXkgcGF0aCBzcGVuZCAoTXVTaWcyKSBpbnB1dC5cbiAqL1xuZnVuY3Rpb24gaGFzS2V5UGF0aFNwZW5kSW5wdXQoXG4gIHR4OiBmaXhlZFNjcmlwdFdhbGxldC5CaXRHb1BzYnQsXG4gIHB1YnM6IHN0cmluZ1tdIHwgdW5kZWZpbmVkLFxuICBjb2luTmFtZTogVXR4b0NvaW5OYW1lXG4pOiBib29sZWFuIHtcbiAgYXNzZXJ0KHB1YnMgJiYgaXNUcmlwbGUocHVicyksICdwdWIgdHJpcGxlIGlzIHJlcXVpcmVkIHRvIGNoZWNrIGZvciBrZXkgcGF0aCBzcGVuZCBpbnB1dHMgaW4gd2FzbS11dHhvIFBTQlQnKTtcbiAgY29uc3Qgcm9vdFdhbGxldEtleXMgPSBmaXhlZFNjcmlwdFdhbGxldC5Sb290V2FsbGV0S2V5cy5mcm9tWHB1YnMocHVicyk7XG4gIGNvbnN0IHJlcGxheVByb3RlY3Rpb24gPSB7IHB1YmxpY0tleXM6IGdldFJlcGxheVByb3RlY3Rpb25QdWJrZXlzKGNvaW5OYW1lKSB9O1xuICBjb25zdCBwYXJzZWQgPSB0eC5wYXJzZVRyYW5zYWN0aW9uV2l0aFdhbGxldEtleXMocm9vdFdhbGxldEtleXMsIHsgcmVwbGF5UHJvdGVjdGlvbiB9KTtcbiAgcmV0dXJuIHBhcnNlZC5pbnB1dHMuc29tZSgoaW5wdXQpID0+IGlucHV0LnNjcmlwdFR5cGUgPT09ICdwMnRyTXVzaWcyS2V5UGF0aCcpO1xufVxuXG4vKipcbiAqIENvbnZlcnQgVmFsaWRhdGlvbkVycm9yIHRvIFR4SW50ZW50TWlzbWF0Y2hSZWNpcGllbnRFcnJvciB3aXRoIHN0cnVjdHVyZWQgZGF0YVxuICpcbiAqIFRoaXMgcHJlc2VydmVzIHRoZSBzdHJ1Y3R1cmVkIGVycm9yIGluZm9ybWF0aW9uIGZyb20gdGhlIG9yaWdpbmFsIFZhbGlkYXRpb25FcnJvclxuICogYnkgZXh0cmFjdGluZyB0aGUgbWlzbWF0Y2hlZCBvdXRwdXRzIGFuZCBjb252ZXJ0aW5nIHRoZW0gdG8gdGhlIHN0YW5kYXJkaXplZCBmb3JtYXQuXG4gKiBUaGUgb3JpZ2luYWwgZXJyb3IgaXMgcHJlc2VydmVkIGFzIHRoZSBgY2F1c2VgIGZvciBkZWJ1Z2dpbmcgcHVycG9zZXMuXG4gKi9cbmZ1bmN0aW9uIGNvbnZlcnRWYWxpZGF0aW9uRXJyb3JUb1R4SW50ZW50TWlzbWF0Y2goXG4gIGVycm9yOiBBZ2dyZWdhdGVWYWxpZGF0aW9uRXJyb3IsXG4gIHJlcUlkOiBzdHJpbmcgfCBJUmVxdWVzdFRyYWNlciB8IHVuZGVmaW5lZCxcbiAgdHhQYXJhbXM6IEJhc2VUcmFuc2FjdGlvblBhcmFtcyxcbiAgdHhIZXg6IHN0cmluZyB8IHVuZGVmaW5lZCxcbiAgdHhFeHBsYW5hdGlvbj86IHVua25vd25cbik6IFR4SW50ZW50TWlzbWF0Y2hSZWNpcGllbnRFcnJvciB7XG4gIGNvbnN0IG1pc21hdGNoZWRSZWNpcGllbnRzOiBNaXNtYXRjaGVkUmVjaXBpZW50W10gPSBbXTtcblxuICBmb3IgKGNvbnN0IGVyciBvZiBlcnJvci5lcnJvcnMpIHtcbiAgICBpZiAoZXJyIGluc3RhbmNlb2YgRXJyb3JNaXNzaW5nT3V0cHV0cykge1xuICAgICAgbWlzbWF0Y2hlZFJlY2lwaWVudHMucHVzaChcbiAgICAgICAgLi4uZXJyLm1pc3NpbmdPdXRwdXRzLm1hcCgob3V0cHV0KSA9PiAoe1xuICAgICAgICAgIGFkZHJlc3M6IG91dHB1dC5hZGRyZXNzLFxuICAgICAgICAgIGFtb3VudDogb3V0cHV0LmFtb3VudC50b1N0cmluZygpLFxuICAgICAgICB9KSlcbiAgICAgICk7XG4gICAgfSBlbHNlIGlmIChlcnIgaW5zdGFuY2VvZiBFcnJvckltcGxpY2l0RXh0ZXJuYWxPdXRwdXRzKSB7XG4gICAgICBtaXNtYXRjaGVkUmVjaXBpZW50cy5wdXNoKFxuICAgICAgICAuLi5lcnIuaW1wbGljaXRFeHRlcm5hbE91dHB1dHMubWFwKChvdXRwdXQpID0+ICh7XG4gICAgICAgICAgYWRkcmVzczogb3V0cHV0LmFkZHJlc3MsXG4gICAgICAgICAgYW1vdW50OiBvdXRwdXQuYW1vdW50LnRvU3RyaW5nKCksXG4gICAgICAgIH0pKVxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICBjb25zdCB0eEludGVudEVycm9yID0gbmV3IFR4SW50ZW50TWlzbWF0Y2hSZWNpcGllbnRFcnJvcihcbiAgICBlcnJvci5tZXNzYWdlLFxuICAgIHJlcUlkLFxuICAgIFt0eFBhcmFtc10sXG4gICAgdHhIZXgsXG4gICAgbWlzbWF0Y2hlZFJlY2lwaWVudHMsXG4gICAgdHhFeHBsYW5hdGlvblxuICApO1xuICAvLyBQcmVzZXJ2ZSB0aGUgb3JpZ2luYWwgc3RydWN0dXJlZCBlcnJvciBhcyB0aGUgY2F1c2UgZm9yIGRlYnVnZ2luZ1xuICAvLyBTZWU6IGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0phdmFTY3JpcHQvUmVmZXJlbmNlL0dsb2JhbF9PYmplY3RzL0Vycm9yL2NhdXNlXG4gICh0eEludGVudEVycm9yIGFzIEVycm9yICYgeyBjYXVzZT86IEVycm9yIH0pLmNhdXNlID0gZXJyb3I7XG4gIHJldHVybiB0eEludGVudEVycm9yO1xufVxuXG5leHBvcnQgdHlwZSB7IERlY29kZWRUcmFuc2FjdGlvbiB9IGZyb20gJy4vdHJhbnNhY3Rpb24vdHlwZXMnO1xuXG5leHBvcnQgdHlwZSBVdHhvQ29pblNwZWNpZmljID0gQWRkcmVzc0NvaW5TcGVjaWZpYyB8IERlc2NyaXB0b3JBZGRyZXNzQ29pblNwZWNpZmljO1xuXG5leHBvcnQgaW50ZXJmYWNlIFZlcmlmeUFkZHJlc3NPcHRpb25zPFRDb2luU3BlY2lmaWMgZXh0ZW5kcyBVdHhvQ29pblNwZWNpZmljPiBleHRlbmRzIEJhc2VWZXJpZnlBZGRyZXNzT3B0aW9ucyB7XG4gIGNoYWluPzogbnVtYmVyO1xuICBpbmRleDogbnVtYmVyO1xuICBjb2luU3BlY2lmaWM/OiBUQ29pblNwZWNpZmljO1xufVxuXG5leHBvcnQgdHlwZSBCaXAzMjJNZXNzYWdlID0ge1xuICBhZGRyZXNzOiBzdHJpbmc7XG4gIG1lc3NhZ2U6IHN0cmluZztcbn07XG5cbmV4cG9ydCBpbnRlcmZhY2UgVHJhbnNhY3Rpb25JbmZvPFROdW1iZXIgZXh0ZW5kcyBudW1iZXIgfCBiaWdpbnQgPSBudW1iZXI+IHtcbiAgLyoqIE1hcHMgdHhpZCB0byB0eGhleC4gUmVxdWlyZWQgZm9yIG9mZmxpbmUgc2lnbmluZy4gKi9cbiAgdHhIZXhlcz86IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG4gIGNoYW5nZUFkZHJlc3Nlcz86IHN0cmluZ1tdO1xuICAvKiogcHNidCBkb2VzIG5vdCByZXF1aXJlIHVuc3BlbnRzLiAqL1xuICB1bnNwZW50cz86IFVuc3BlbnQ8VE51bWJlcj5bXTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBFeHBsYWluVHJhbnNhY3Rpb25PcHRpb25zPFROdW1iZXIgZXh0ZW5kcyBudW1iZXIgfCBiaWdpbnQgPSBudW1iZXI+IHtcbiAgdHhIZXg6IHN0cmluZztcbiAgdHhJbmZvPzogVHJhbnNhY3Rpb25JbmZvPFROdW1iZXI+O1xuICBmZWVJbmZvPzogc3RyaW5nO1xuICBwdWJzPzogVHJpcGxlPHN0cmluZz47XG4gIGN1c3RvbUNoYW5nZVhwdWJzPzogVHJpcGxlPHN0cmluZz47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRGVjb3JhdGVkRXhwbGFpblRyYW5zYWN0aW9uT3B0aW9uczxUTnVtYmVyIGV4dGVuZHMgbnVtYmVyIHwgYmlnaW50ID0gbnVtYmVyPlxuICBleHRlbmRzIEV4cGxhaW5UcmFuc2FjdGlvbk9wdGlvbnM8VE51bWJlcj4ge1xuICBjaGFuZ2VJbmZvPzogeyBhZGRyZXNzOiBzdHJpbmc7IGNoYWluOiBudW1iZXI7IGluZGV4OiBudW1iZXIgfVtdO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFRyYW5zYWN0aW9uUHJlYnVpbGQ8VE51bWJlciBleHRlbmRzIG51bWJlciB8IGJpZ2ludCA9IG51bWJlcj4gZXh0ZW5kcyBCYXNlVHJhbnNhY3Rpb25QcmVidWlsZCB7XG4gIHR4SW5mbz86IFRyYW5zYWN0aW9uSW5mbzxUTnVtYmVyPjtcbiAgYmxvY2tIZWlnaHQ/OiBudW1iZXI7XG4gIC8qKlxuICAgKiBQU0JULWxpdGUgaGV4IHByZXNlbnQgb25seSBpbiBwZW5kaW5nIGFwcHJvdmFsIGZsb3dzLCB3aGVyZSBhbm90aGVyIHVzZXIncyBzZW5kIGZpeGVkIHRoZSBmb3JtYXQuXG4gICAqIE5vdCBzZXQgaW4gcmVndWxhciAvdHgvYnVpbGQgcmVzcG9uc2VzICh3aGVyZSB0aGUgY2FsbGVyIGNvbnRyb2xzIHRoZSBidWlsZCBwYXJhbWV0ZXJzKS5cbiAgICogUHJlZmVycmVkIG92ZXIgdHhIZXggd2hlbiBwcmVzZW50LCBhcyBpdCBjYXJyaWVzIHJpY2hlciBkYXRhIChub25XaXRuZXNzVXR4bywgcmVkZWVtU2NyaXB0LCBCSVAtMzIgcGF0aHMpLlxuICAgKi9cbiAgdHhIZXhQc2J0Pzogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFRyYW5zYWN0aW9uUGFyYW1zIGV4dGVuZHMgQmFzZVRyYW5zYWN0aW9uUGFyYW1zIHtcbiAgd2FsbGV0UGFzc3BocmFzZT86IHN0cmluZztcbiAgYWxsb3dFeHRlcm5hbENoYW5nZUFkZHJlc3M/OiBib29sZWFuO1xuICBjaGFuZ2VBZGRyZXNzPzogc3RyaW5nO1xuICByYmZUeElkcz86IHN0cmluZ1tdO1xuICAvKiogUGFyYW1ldGVycyBmb3IgYnJpZGdpbmcgaW50ZW50cyAoZS5nLiBCVEMgLT4gc0JUQyBwZWctaW4pLCBwcmVzZW50IHdoZW4gYHR5cGUgPT09ICdicmlkZ2luZydgLiAqL1xuICBicmlkZ2luZ1BhcmFtcz86IEJyaWRnaW5nUGFyYW1zO1xuICBxcj86IGJvb2xlYW47XG4gIC8qKiBaY2FzaC1vbmx5IHByZWZlcmVuY2UgZm9yIHJlc29sdmluZyBVbmlmaWVkIEFkZHJlc3MgcmVjaXBpZW50cy4gKi9cbiAgdW5pZmllZFJlY2lwaWVudFByZWZlcmVuY2U/OiBVbmlmaWVkUmVjaXBpZW50UHJlZmVyZW5jZTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBQYXJzZVRyYW5zYWN0aW9uT3B0aW9uczxUTnVtYmVyIGV4dGVuZHMgbnVtYmVyIHwgYmlnaW50ID0gbnVtYmVyPiBleHRlbmRzIEJhc2VQYXJzZVRyYW5zYWN0aW9uT3B0aW9ucyB7XG4gIHR4UGFyYW1zOiBUcmFuc2FjdGlvblBhcmFtcztcbiAgdHhQcmVidWlsZDogVHJhbnNhY3Rpb25QcmVidWlsZDxUTnVtYmVyPjtcbiAgd2FsbGV0OiBVdHhvV2FsbGV0O1xuICB2ZXJpZmljYXRpb24/OiBWZXJpZmljYXRpb25PcHRpb25zO1xuICByZXFJZD86IElSZXF1ZXN0VHJhY2VyO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEdlbmVyYXRlQWRkcmVzc09wdGlvbnMge1xuICBhZGRyZXNzVHlwZT86IFNjcmlwdFR5cGUyT2YzO1xuICB0aHJlc2hvbGQ/OiBudW1iZXI7XG4gIGNoYWluPzogbnVtYmVyO1xuICBpbmRleD86IG51bWJlcjtcbiAgc2Vnd2l0PzogYm9vbGVhbjtcbiAgYmVjaDMyPzogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBHZW5lcmF0ZUZpeGVkU2NyaXB0QWRkcmVzc09wdGlvbnMgZXh0ZW5kcyBHZW5lcmF0ZUFkZHJlc3NPcHRpb25zIHtcbiAgZm9ybWF0PzogQ3JlYXRlQWRkcmVzc0Zvcm1hdDtcbiAga2V5Y2hhaW5zOiB7XG4gICAgcHViOiBzdHJpbmc7XG4gICAgYXNwS2V5SWQ/OiBzdHJpbmc7XG4gIH1bXTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBBZGRyZXNzRGV0YWlscyB7XG4gIGFkZHJlc3M6IHN0cmluZztcbiAgY2hhaW46IG51bWJlcjtcbiAgaW5kZXg6IG51bWJlcjtcbiAgY29pbjogc3RyaW5nO1xuICBjb2luU3BlY2lmaWM6IEFkZHJlc3NDb2luU3BlY2lmaWMgfCBEZXNjcmlwdG9yQWRkcmVzc0NvaW5TcGVjaWZpYztcbiAgYWRkcmVzc1R5cGU/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRGVzY3JpcHRvckFkZHJlc3NDb2luU3BlY2lmaWMgZXh0ZW5kcyBBZGRyZXNzQ29pblNwZWNpZmljIHtcbiAgZGVzY3JpcHRvck5hbWU6IHN0cmluZztcbiAgZGVzY3JpcHRvckNoZWNrc3VtOiBzdHJpbmc7XG59XG5cbnR5cGUgVXR4b0Jhc2VTaWduVHJhbnNhY3Rpb25PcHRpb25zPFROdW1iZXIgZXh0ZW5kcyBudW1iZXIgfCBiaWdpbnQgPSBudW1iZXI+ID0gQmFzZVNpZ25UcmFuc2FjdGlvbk9wdGlvbnMgJiB7XG4gIC8qKiBUcmFuc2FjdGlvbiBwcmVidWlsZCBmcm9tIGJpdGdvIHNlcnZlciAqL1xuICB0eFByZWJ1aWxkOiB7XG4gICAgLyoqXG4gICAgICogd2FsbGV0SWQgaXMgcmVxdWlyZWQgaW4gZm9sbG93aW5nIDIgc2NlbmFyaW9zLlxuICAgICAqIDEuIEV4dGVybmFsIHNpZ25lciBleHByZXNzIG1vZGUgaXMgdXNlZC5cbiAgICAgKiAyLiBiaXRnbyBNdVNpZzIgbm9uY2UgaXMgcmVxdWVzdGVkXG4gICAgICovXG4gICAgd2FsbGV0SWQ/OiBzdHJpbmc7XG4gICAgdHhIZXg6IHN0cmluZztcbiAgICB0eEluZm8/OiBUcmFuc2FjdGlvbkluZm88VE51bWJlcj47XG4gIH07XG4gIC8qKiB4cHVicyB0cmlwbGUgZm9yIHdhbGxldCAodXNlciwgYmFja3VwLCBiaXRnbykuIFJlcXVpcmVkIG9ubHkgd2hlbiB0eFByZWJ1aWxkLnR4SGV4IGlzIG5vdCBhIFBTQlQgKi9cbiAgcHVicz86IFRyaXBsZTxzdHJpbmc+O1xuICAvKiogeHB1YiBmb3IgY29zaWduZXIgKGRlZmF1bHRzIHRvIGJpdGdvKSAqL1xuICBjb3NpZ25lclB1Yj86IHN0cmluZztcbiAgLyoqXG4gICAqIFdoZW4gdHJ1ZSwgY3JlYXRlcyBmdWxsLXNpZ25lZCB0cmFuc2FjdGlvbiB3aXRob3V0IHBsYWNlaG9sZGVyIHNpZ25hdHVyZXMuXG4gICAqIFdoZW4gZmFsc2UsIGNyZWF0ZXMgaGFsZi1zaWduZWQgdHJhbnNhY3Rpb24gd2l0aCBwbGFjZWhvbGRlciBzaWduYXR1cmVzLlxuICAgKi9cbiAgaXNMYXN0U2lnbmF0dXJlPzogYm9vbGVhbjtcbiAgLyoqXG4gICAqIFdoZW4gdHJ1ZSwgdGhlIHNpZ25lZCB0cmFuc2FjdGlvbiB3aWxsIGJlIGNvbnZlcnRlZCBmcm9tIFBTQlQgdG8gbGVnYWN5IGZvcm1hdCBiZWZvcmUgcmV0dXJuaW5nLlxuICAgKiBTZXQgYXV0b21hdGljYWxseSBieSBwcmVzaWduVHJhbnNhY3Rpb24oKSB3aGVuIHRoZSBjYWxsZXIgZXhwbGljaXRseSByZXF1ZXN0ZWQgdHhGb3JtYXQ6ICdsZWdhY3knLlxuICAgKi9cbiAgcmV0dXJuTGVnYWN5Rm9ybWF0PzogYm9vbGVhbjtcbiAgd2FsbGV0PzogVXR4b1dhbGxldDtcbiAgLyoqXG4gICAqIFdoZW4gdHJ1ZSAoZGVmYXVsdCksIGV4dHJhY3QgZmluYWxpemVkIFBTQlQgdG8gbGVnYWN5IHRyYW5zYWN0aW9uIGZvcm1hdC5cbiAgICogV2hlbiBmYWxzZSwgcmV0dXJuIGZpbmFsaXplZCBQU0JULiBVc2VmdWwgZm9yIHRlc3RpbmcgdG8ga2VlcCB0cmFuc2FjdGlvbnMgaW4gUFNCVCBmb3JtYXQuXG4gICAqL1xuICBleHRyYWN0VHJhbnNhY3Rpb24/OiBib29sZWFuO1xuICAvKiogV2hlbiB0cnVlLCBlbWJlZHMgV0FTTS1VVFhPIHZlcnNpb24gbWV0YWRhdGEgaW50byB0aGUgc2lnbmVkIFBTQlQuIERlZmF1bHRzIHRvIGZhbHNlLiAqL1xuICB3cml0ZVNpZ25lZFdpdGg/OiBib29sZWFuO1xufTtcblxuZXhwb3J0IHR5cGUgU2lnblRyYW5zYWN0aW9uT3B0aW9uczxUTnVtYmVyIGV4dGVuZHMgbnVtYmVyIHwgYmlnaW50ID0gbnVtYmVyPiA9IFV0eG9CYXNlU2lnblRyYW5zYWN0aW9uT3B0aW9uczxUTnVtYmVyPiAmXG4gIChcbiAgICB8IHtcbiAgICAgICAgcHJ2OiBzdHJpbmc7XG4gICAgICAgIHNpZ25pbmdTdGVwPzogJ3NpZ25lck5vbmNlJyB8ICdzaWduZXJTaWduYXR1cmUnO1xuICAgICAgfVxuICAgIHwge1xuICAgICAgICBzaWduaW5nU3RlcDogJ2Nvc2lnbmVyTm9uY2UnO1xuICAgICAgfVxuICApO1xuXG5leHBvcnQgaW50ZXJmYWNlIE11bHRpU2lnQWRkcmVzcyB7XG4gIG91dHB1dFNjcmlwdDogQnVmZmVyO1xuICByZWRlZW1TY3JpcHQ/OiBCdWZmZXI7XG4gIHdpdG5lc3NTY3JpcHQ/OiBCdWZmZXI7XG4gIGFkZHJlc3M6IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBSZWNvdmVyRnJvbVdyb25nQ2hhaW5PcHRpb25zIHtcbiAgdHhpZDogc3RyaW5nO1xuICByZWNvdmVyeUFkZHJlc3M6IHN0cmluZztcbiAgd2FsbGV0OiBzdHJpbmc7XG4gIHdhbGxldFBhc3NwaHJhc2U/OiBzdHJpbmc7XG4gIHhwcnY/OiBzdHJpbmc7XG4gIGFwaUtleT86IHN0cmluZztcbiAgLyoqIEBkZXByZWNhdGVkICovXG4gIGNvaW4/OiBBYnN0cmFjdFV0eG9Db2luO1xuICByZWNvdmVyeUNvaW4/OiBBYnN0cmFjdFV0eG9Db2luO1xuICBzaWduZWQ/OiBib29sZWFuO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFZlcmlmeUtleVNpZ25hdHVyZXNPcHRpb25zIHtcbiAgdXNlcktleWNoYWluOiB7IHB1Yj86IHN0cmluZyB9O1xuICBrZXljaGFpblRvVmVyaWZ5OiB7IHB1Yj86IHN0cmluZyB9O1xuICBrZXlTaWduYXR1cmU6IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBWZXJpZnlVc2VyUHVibGljS2V5T3B0aW9ucyB7XG4gIHVzZXJLZXljaGFpbj86IFV0eG9LZXljaGFpbjtcbiAgZGlzYWJsZU5ldHdvcmtpbmc6IGJvb2xlYW47XG4gIHR4UGFyYW1zOiBUcmFuc2FjdGlvblBhcmFtcztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBWZXJpZnlUcmFuc2FjdGlvbk9wdGlvbnM8VE51bWJlciBleHRlbmRzIG51bWJlciB8IGJpZ2ludCA9IG51bWJlcj5cbiAgZXh0ZW5kcyBCYXNlVmVyaWZ5VHJhbnNhY3Rpb25PcHRpb25zIHtcbiAgdHhQcmVidWlsZDogVHJhbnNhY3Rpb25QcmVidWlsZDxUTnVtYmVyPjtcbiAgdHhQYXJhbXM6IFRyYW5zYWN0aW9uUGFyYW1zO1xuICB3YWxsZXQ6IFV0eG9XYWxsZXQ7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgU2lnblBzYnRSZXF1ZXN0IHtcbiAgcHNidDogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFNpZ25Qc2J0UmVzcG9uc2Uge1xuICBwc2J0OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBBYnN0cmFjdFV0eG9Db2luIGV4dGVuZHMgQmFzZUNvaW4gaW1wbGVtZW50cyBNdXNpZzJQYXJ0aWNpcGFudDxmaXhlZFNjcmlwdFdhbGxldC5CaXRHb1BzYnQ+IHtcbiAgYWJzdHJhY3QgbmFtZTogVXR4b0NvaW5OYW1lO1xuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHdoZXRoZXIgdGhpcyBjb2luIGlzIGEgbWFpbm5ldCBjb2luLlxuICAgKiBEZWZhdWx0IGltcGxlbWVudGF0aW9uIHVzZXMgdGhlIG5hbWUgcHJvcGVydHkuXG4gICAqIENhbiBiZSBvdmVycmlkZGVuIGJ5IHN1YmNsYXNzZXMuXG4gICAqL1xuICBwcm90ZWN0ZWQgaXNNYWlubmV0KCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBpc01haW5uZXRDb2luKHRoaXMubmFtZSk7XG4gIH1cblxuICBwdWJsaWMgcmVhZG9ubHkgYW1vdW50VHlwZTogJ251bWJlcicgfCAnYmlnaW50JztcblxuICBwcm90ZWN0ZWQgY29uc3RydWN0b3IoYml0Z286IEJpdEdvQmFzZSwgYW1vdW50VHlwZTogJ251bWJlcicgfCAnYmlnaW50JyA9ICdudW1iZXInKSB7XG4gICAgc3VwZXIoYml0Z28pO1xuICAgIHRoaXMuYW1vdW50VHlwZSA9IGFtb3VudFR5cGU7XG4gIH1cblxuICBnZXRDaGFpbigpOiBVdHhvQ29pbk5hbWUge1xuICAgIHJldHVybiB0aGlzLm5hbWU7XG4gIH1cblxuICBnZXRGYW1pbHkoKTogVXR4b0NvaW5OYW1lTWFpbm5ldCB7XG4gICAgcmV0dXJuIGdldE1haW5uZXRDb2luTmFtZSh0aGlzLm5hbWUpO1xuICB9XG5cbiAgZ2V0RnVsbE5hbWUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gZ2V0RnVsbE5hbWVGcm9tQ29pbk5hbWUodGhpcy5uYW1lKTtcbiAgfVxuXG4gIC8qKiBDb2luIG5hbWUgdXNlZCBieSB3YXNtLXV0eG8uIFByaXZhdGUgQml0Y29pbiBuZXR3b3JrcyBtYXkgbWFwIHRvIGEgc2hhcmVkIGNvZGVjLiAqL1xuICBnZXQgd2FzbU5hbWUoKTogV2FzbVV0eG9Db2luTmFtZSB7XG4gICAgcmV0dXJuIHRvV2FzbVV0eG9Db2luTmFtZSh0aGlzLm5hbWUpO1xuICB9XG5cbiAgZ2V0IGFkZHJlc3NDb2RlYygpOiBBZGRyZXNzQ29kZWMge1xuICAgIHJldHVybiBuZXcgQWRkcmVzc0NvZGVjKHRoaXMubmFtZSwgdGhpcy53YXNtTmFtZSk7XG4gIH1cblxuICAvKiogSW5kaWNhdGVzIHdoZXRoZXIgdGhlIGNvaW4gc3VwcG9ydHMgYSBibG9jayB0YXJnZXQgKi9cbiAgc3VwcG9ydHNCbG9ja1RhcmdldCgpOiBib29sZWFuIHtcbiAgICAvLyBGSVhNRTogdGhlIFNESyBkb2VzIG5vdCBzZWVtIHRvIHVzZSB0aGlzIGFueXdoZXJlIHNvIGl0IGlzIHVuY2xlYXIgd2hhdCB0aGUgcHVycG9zZSBvZiB0aGlzIG1ldGhvZCBpc1xuICAgIGNvbnN0IG1haW5uZXQgPSBnZXRNYWlubmV0Q29pbk5hbWUodGhpcy5uYW1lKTtcbiAgICByZXR1cm4gbWFpbm5ldCA9PT0gJ2J0YycgfHwgbWFpbm5ldCA9PT0gJ2RvZ2UnO1xuICB9XG5cbiAgc3dlZXBXaXRoU2VuZE1hbnkoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICAvKiogQGRlcHJlY2F0ZWQgKi9cbiAgc3RhdGljIGdldCB2YWxpZEFkZHJlc3NUeXBlcygpOiBTY3JpcHRUeXBlMk9mM1tdIHtcbiAgICByZXR1cm4gWydwMnNoJywgJ3Ayc2hQMndzaCcsICdwMndzaCcsICdwMnRyJywgJ3AydHJNdXNpZzInXTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBmYWN0b3IgYmV0d2VlbiB0aGUgYmFzZSB1bml0IGFuZCBpdHMgc21hbGxlc3Qgc3ViZGl2aXNvblxuICAgKiBAcmV0dXJuIHtudW1iZXJ9XG4gICAqL1xuICBnZXRCYXNlRmFjdG9yKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIDFlODtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVjayBpZiBhbiBhZGRyZXNzIGlzIHZhbGlkXG4gICAqIEBwYXJhbSBhZGRyZXNzXG4gICAqIEBwYXJhbSBwYXJhbVxuICAgKi9cbiAgaXNWYWxpZEFkZHJlc3MoXG4gICAgYWRkcmVzczogc3RyaW5nLFxuICAgIHBhcmFtPzogeyBhbnlGb3JtYXQ/OiBib29sZWFuOyBhbGxvd0xpZ2h0bmluZz86IGJvb2xlYW4gfSB8IC8qIGxlZ2FjeSBwYXJhbWV0ZXIgKi8gYm9vbGVhblxuICApOiBib29sZWFuIHtcbiAgICBpZiAodHlwZW9mIHBhcmFtID09PSAnYm9vbGVhbicgJiYgcGFyYW0pIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignZGVwcmVjYXRlZCcpO1xuICAgIH1cblxuICAgIGNvbnN0IGFsbG93TGlnaHRuaW5nID0gKHBhcmFtIGFzIHsgYWxsb3dMaWdodG5pbmc/OiBib29sZWFuIH0gfCB1bmRlZmluZWQpPy5hbGxvd0xpZ2h0bmluZyA/PyBmYWxzZTtcbiAgICBpZiAoYWxsb3dMaWdodG5pbmcpIHtcbiAgICAgIGlmICgvXigwMnwwMylbMC05YS1mQS1GXXs2NH0kLy50ZXN0KGFkZHJlc3MpKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgICAgaWYgKGlzQm9sdDExSW52b2ljZShhZGRyZXNzKSkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5hZGRyZXNzQ29kZWMuaXNWYWxpZEFkZHJlc3MoYWRkcmVzcyk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJuIGJvb2xlYW4gaW5kaWNhdGluZyB3aGV0aGVyIGlucHV0IGlzIHZhbGlkIHB1YmxpYyBrZXkgZm9yIHRoZSBjb2luLlxuICAgKlxuICAgKiBAcGFyYW0ge1N0cmluZ30gcHViIHRoZSBwdWIgdG8gYmUgY2hlY2tlZFxuICAgKiBAcmV0dXJucyB7Qm9vbGVhbn0gaXMgaXQgdmFsaWQ/XG4gICAqL1xuICBpc1ZhbGlkUHViKHB1Yjogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBCSVAzMi5mcm9tQmFzZTU4KHB1YikuaXNOZXV0ZXJlZCgpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogVGhpcyBpcyBjYWxsZWQgYmVmb3JlIGNyYWZ0aW5nIHRoZSBIVFRQIHJlcXVlc3QgdG8gdGhlIEJpdEdvIEFQSS5cbiAgICogSXQgY29udmVydHMgdGhlIHJlY2lwaWVudCBhZGRyZXNzIGBzY3JpcHRQdWJLZXk6Li4uYCB0byB7IHNjcmlwdDogc3RyaW5nIH0gfCB7IGFkZHJlc3M6IHN0cmluZyB9LlxuICAgKi9cbiAgb3ZlcnJpZGUgcHJlcHJvY2Vzc0J1aWxkUGFyYW1zKHBhcmFtczogUmVjb3JkPHN0cmluZywgYW55Pik6IFJlY29yZDxzdHJpbmcsIGFueT4ge1xuICAgIGlmIChwYXJhbXMucmVjaXBpZW50cyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBwYXJhbXMucmVjaXBpZW50cyA9XG4gICAgICAgIHBhcmFtcy5yZWNpcGllbnRzIGluc3RhbmNlb2YgQXJyYXlcbiAgICAgICAgICA/IHBhcmFtcz8ucmVjaXBpZW50cz8ubWFwKChyZWNpcGllbnQpID0+IHtcbiAgICAgICAgICAgICAgY29uc3QgeyBhZGRyZXNzLCAuLi5yZXN0IH0gPSByZWNpcGllbnQ7XG4gICAgICAgICAgICAgIGlmIChhZGRyZXNzID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVjaXBpZW50OyAvLyBBbHJlYWR5IHsgc2NyaXB0LCBhbW91bnQgfSDigJQgcGFzcyB0aHJvdWdoIHVuY2hhbmdlZFxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHJldHVybiB7IC4uLnJlc3QsIC4uLkFkZHJlc3NDb2RlYy5mcm9tRXh0ZW5kZWRBZGRyZXNzRm9ybWF0KGFkZHJlc3MpIH07XG4gICAgICAgICAgICB9KVxuICAgICAgICAgIDogcGFyYW1zLnJlY2lwaWVudHM7XG4gICAgfVxuXG4gICAgcmV0dXJuIHBhcmFtcztcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIGxhdGVzdCBibG9jayBoZWlnaHRcbiAgICogQHBhcmFtIHJlcUlkXG4gICAqL1xuICBhc3luYyBnZXRMYXRlc3RCbG9ja0hlaWdodChyZXFJZD86IFJlcXVlc3RUcmFjZXIpOiBQcm9taXNlPG51bWJlcj4ge1xuICAgIGlmIChyZXFJZCkge1xuICAgICAgdGhpcy5iaXRnby5zZXRSZXF1ZXN0VHJhY2VyKHJlcUlkKTtcbiAgICB9XG4gICAgY29uc3QgY2hhaW5oZWFkID0gYXdhaXQgdGhpcy5iaXRnby5nZXQodGhpcy51cmwoJy9wdWJsaWMvYmxvY2svbGF0ZXN0JykpLnJlc3VsdCgpO1xuICAgIHJldHVybiAoY2hhaW5oZWFkIGFzIGFueSkuaGVpZ2h0O1xuICB9XG5cbiAgY2hlY2tSZWNpcGllbnQocmVjaXBpZW50OiB7IGFkZHJlc3M/OiBzdHJpbmc7IGFtb3VudDogbnVtYmVyIHwgc3RyaW5nIH0pOiB2b2lkIHtcbiAgICBBZGRyZXNzQ29kZWMuYXNzZXJ0VmFsaWRUcmFuc2FjdGlvblJlY2lwaWVudChyZWNpcGllbnQpO1xuICAgIGlmIChyZWNpcGllbnQuYWRkcmVzcyAmJiAhQWRkcmVzc0NvZGVjLmlzU2NyaXB0UmVjaXBpZW50KHJlY2lwaWVudC5hZGRyZXNzKSkge1xuICAgICAgc3VwZXIuY2hlY2tSZWNpcGllbnQoeyBhZGRyZXNzOiByZWNpcGllbnQuYWRkcmVzcywgYW1vdW50OiByZWNpcGllbnQuYW1vdW50IH0pO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSdW4gY3VzdG9tIGNvaW4gbG9naWMgYWZ0ZXIgYSB0cmFuc2FjdGlvbiBwcmVidWlsZCBoYXMgYmVlbiByZWNlaXZlZCBmcm9tIEJpdEdvXG4gICAqIEBwYXJhbSBwcmVidWlsZFxuICAgKi9cbiAgYXN5bmMgcG9zdFByb2Nlc3NQcmVidWlsZDxUTnVtYmVyIGV4dGVuZHMgbnVtYmVyIHwgYmlnaW50PihcbiAgICBwcmVidWlsZDogVHJhbnNhY3Rpb25QcmVidWlsZDxUTnVtYmVyPlxuICApOiBQcm9taXNlPFRyYW5zYWN0aW9uUHJlYnVpbGQ8VE51bWJlcj4+IHtcbiAgICBjb25zdCB0eCA9IHRoaXMuZGVjb2RlVHJhbnNhY3Rpb25Gcm9tUHJlYnVpbGQocHJlYnVpbGQpO1xuICAgIGlmIChfLmlzVW5kZWZpbmVkKHByZWJ1aWxkLmJsb2NrSGVpZ2h0KSkge1xuICAgICAgcHJlYnVpbGQuYmxvY2tIZWlnaHQgPSAoYXdhaXQgdGhpcy5nZXRMYXRlc3RCbG9ja0hlaWdodCgpKSBhcyBudW1iZXI7XG4gICAgfVxuICAgIHJldHVybiBfLmV4dGVuZCh7fSwgcHJlYnVpbGQsIHsgdHhIZXg6IGVuY29kZVRyYW5zYWN0aW9uKHR4KS50b1N0cmluZygnaGV4JykgfSk7XG4gIH1cblxuICAvKipcbiAgICogQGRlcHJlY2F0ZWQgLSB3aWxsIGJlIHJlbW92ZWQgd2hlbiB3ZSBkcm9wIHN1cHBvcnQgZm9yIHV0eG9saWJcbiAgICogRGV0ZXJtaW5lIGFuIGFkZHJlc3MnIHR5cGUgYmFzZWQgb24gaXRzIHdpdG5lc3MgYW5kIHJlZGVlbSBzY3JpcHQgcHJlc2VuY2VcbiAgICogQHBhcmFtIGFkZHJlc3NEZXRhaWxzXG4gICAqL1xuICBzdGF0aWMgaW5mZXJBZGRyZXNzVHlwZShhZGRyZXNzRGV0YWlsczogeyBjaGFpbjogbnVtYmVyIH0pOiBTY3JpcHRUeXBlMk9mMyB8IG51bGwge1xuICAgIHJldHVybiBmaXhlZFNjcmlwdFdhbGxldC5DaGFpbkNvZGUuaXMoYWRkcmVzc0RldGFpbHMuY2hhaW4pXG4gICAgICA/IChmaXhlZFNjcmlwdFdhbGxldC5DaGFpbkNvZGUuc2NyaXB0VHlwZShhZGRyZXNzRGV0YWlscy5jaGFpbikgYXMgU2NyaXB0VHlwZTJPZjMpXG4gICAgICA6IG51bGw7XG4gIH1cblxuICBkZWNvZGVUcmFuc2FjdGlvbihpbnB1dDogQnVmZmVyIHwgc3RyaW5nKTogZml4ZWRTY3JpcHRXYWxsZXQuQml0R29Qc2J0IHtcbiAgICBjb25zdCBidWZmZXIgPSB0eXBlb2YgaW5wdXQgPT09ICdzdHJpbmcnID8gc3RyaW5nVG9CdWZmZXJUcnlGb3JtYXRzKGlucHV0LCBbJ2hleCcsICdiYXNlNjQnXSkgOiBpbnB1dDtcbiAgICBpZiAoIWhhc1BzYnRNYWdpYyhidWZmZXIpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3JEZXByZWNhdGVkVHhGb3JtYXQoJ2xlZ2FjeScpO1xuICAgIH1cbiAgICByZXR1cm4gZGVjb2RlUHNidChidWZmZXIsIHRoaXMud2FzbU5hbWUpO1xuICB9XG5cbiAgZGVjb2RlVHJhbnNhY3Rpb25Bc1BzYnQoaW5wdXQ6IEJ1ZmZlciB8IHN0cmluZyk6IGZpeGVkU2NyaXB0V2FsbGV0LkJpdEdvUHNidCB7XG4gICAgcmV0dXJuIHRoaXMuZGVjb2RlVHJhbnNhY3Rpb24oaW5wdXQpO1xuICB9XG5cbiAgZGVjb2RlVHJhbnNhY3Rpb25Gcm9tUHJlYnVpbGQocHJlYnVpbGQ6IHtcbiAgICB0eEhleD86IHN0cmluZztcbiAgICB0eEJhc2U2ND86IHN0cmluZztcbiAgICAvKiogU2VlIFRyYW5zYWN0aW9uUHJlYnVpbGQudHhIZXhQc2J0IOKAlCBvbmx5IHByZXNlbnQgaW4gcGVuZGluZyBhcHByb3ZhbCBmbG93cy4gKi9cbiAgICB0eEhleFBzYnQ/OiBzdHJpbmc7XG4gIH0pOiBmaXhlZFNjcmlwdFdhbGxldC5CaXRHb1BzYnQge1xuICAgIGNvbnN0IHN0cmluZyA9IHByZWJ1aWxkLnR4SGV4UHNidCA/PyBwcmVidWlsZC50eEhleCA/PyBwcmVidWlsZC50eEJhc2U2NDtcbiAgICBpZiAoIXN0cmluZykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdtaXNzaW5nIHJlcXVpcmVkIHR4SGV4IG9yIHR4QmFzZTY0IHByb3BlcnR5Jyk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmRlY29kZVRyYW5zYWN0aW9uKHN0cmluZyk7XG4gIH1cblxuICAvKipcbiAgICogRXh0cmFjdCBhbmQgZmlsbCB0cmFuc2FjdGlvbiBkZXRhaWxzIHN1Y2ggYXMgaW50ZXJuYWwvY2hhbmdlIHNwZW5kLCBleHRlcm5hbCBzcGVuZCAoZXhwbGljaXQgdnMuIGltcGxpY2l0KSwgZXRjLlxuICAgKiBAcGFyYW0gcGFyYW1zXG4gICAqIEByZXR1cm5zIHsqfVxuICAgKi9cbiAgYXN5bmMgcGFyc2VUcmFuc2FjdGlvbjxUTnVtYmVyIGV4dGVuZHMgbnVtYmVyIHwgYmlnaW50ID0gbnVtYmVyPihcbiAgICBwYXJhbXM6IFBhcnNlVHJhbnNhY3Rpb25PcHRpb25zPFROdW1iZXI+XG4gICk6IFByb21pc2U8UGFyc2VkVHJhbnNhY3Rpb248VE51bWJlcj4+IHtcbiAgICByZXR1cm4gdGhpcy5wYXJzZVRyYW5zYWN0aW9uV2l0aEFkZHJlc3NDb2RlYyhwYXJhbXMsIHRoaXMuYWRkcmVzc0NvZGVjKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBwYXJzZVRyYW5zYWN0aW9uV2l0aEFkZHJlc3NDb2RlYzxUTnVtYmVyIGV4dGVuZHMgbnVtYmVyIHwgYmlnaW50PihcbiAgICBwYXJhbXM6IFBhcnNlVHJhbnNhY3Rpb25PcHRpb25zPFROdW1iZXI+LFxuICAgIGFkZHJlc3NDb2RlYzogQWRkcmVzc0NvZGVjXG4gICk6IFByb21pc2U8UGFyc2VkVHJhbnNhY3Rpb248VE51bWJlcj4+IHtcbiAgICByZXR1cm4gcGFyc2VUcmFuc2FjdGlvbih0aGlzLCBwYXJhbXMsIGFkZHJlc3NDb2RlYyk7XG4gIH1cblxuICAvKipcbiAgICogQGRlcHJlY2F0ZWQgLSB1c2UgdGhlIGV4cG9ydGVkIGB2ZXJpZnlVc2VyUHVibGljS2V5YCBmdW5jdGlvbiBpbnN0ZWFkXG4gICAqL1xuICBwcm90ZWN0ZWQgYXN5bmMgdmVyaWZ5VXNlclB1YmxpY0tleShwYXJhbXM6IFZlcmlmeVVzZXJQdWJsaWNLZXlPcHRpb25zKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgcmV0dXJuIGF3YWl0IHZlcmlmeVVzZXJQdWJsaWNLZXkodGhpcy5iaXRnbywgcGFyYW1zKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVwcmVjYXRlZCAtIHVzZSBmdW5jdGlvbiB2ZXJpZnlLZXlTaWduYXR1cmUgaW5zdGVhZFxuICAgKi9cbiAgcHVibGljIHZlcmlmeUtleVNpZ25hdHVyZShwYXJhbXM6IFZlcmlmeUtleVNpZ25hdHVyZXNPcHRpb25zKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHZlcmlmeUtleVNpZ25hdHVyZShwYXJhbXMpO1xuICB9XG5cbiAgLyoqXG4gICAqIFZlcmlmeSB0aGF0IGEgdHJhbnNhY3Rpb24gcHJlYnVpbGQgY29tcGxpZXMgd2l0aCB0aGUgb3JpZ2luYWwgaW50ZW50aW9uXG4gICAqXG4gICAqIEBwYXJhbSBwYXJhbXNcbiAgICogQHBhcmFtIHBhcmFtcy50eFBhcmFtcyBwYXJhbXMgb2JqZWN0IHBhc3NlZCB0byBzZW5kXG4gICAqIEBwYXJhbSBwYXJhbXMudHhQcmVidWlsZCBwcmVidWlsZCBvYmplY3QgcmV0dXJuZWQgYnkgc2VydmVyXG4gICAqIEBwYXJhbSBwYXJhbXMudHhQcmVidWlsZC50eEhleCBwcmVidWlsdCB0cmFuc2FjdGlvbidzIHR4SGV4IGZvcm1cbiAgICogQHBhcmFtIHBhcmFtcy53YWxsZXQgV2FsbGV0IG9iamVjdCB0byBvYnRhaW4ga2V5cyB0byB2ZXJpZnkgYWdhaW5zdFxuICAgKiBAcGFyYW0gcGFyYW1zLnZlcmlmaWNhdGlvbiBPYmplY3Qgc3BlY2lmeWluZyBzb21lIHZlcmlmaWNhdGlvbiBwYXJhbWV0ZXJzXG4gICAqIEBwYXJhbSBwYXJhbXMudmVyaWZpY2F0aW9uLmRpc2FibGVOZXR3b3JraW5nIERpc2FsbG93IGZldGNoaW5nIGFueSBkYXRhIGZyb20gdGhlIGludGVybmV0IGZvciB2ZXJpZmljYXRpb24gcHVycG9zZXNcbiAgICogQHBhcmFtIHBhcmFtcy52ZXJpZmljYXRpb24ua2V5Y2hhaW5zIFBhc3Mga2V5Y2hhaW5zIG1hbnVhbGx5IHJhdGhlciB0aGFuIGZldGNoaW5nIHRoZW0gYnkgaWRcbiAgICogQHBhcmFtIHBhcmFtcy52ZXJpZmljYXRpb24uYWRkcmVzc2VzIEFkZHJlc3MgZGV0YWlscyB0byBwYXNzIGluIGZvciBvdXQtb2YtYmFuZCB2ZXJpZmljYXRpb25cbiAgICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmVyaWZpY2F0aW9uIHBhc3Nlc1xuICAgKiBAdGhyb3dzIHtUeEludGVudE1pc21hdGNoRXJyb3J9IGlmIHRyYW5zYWN0aW9uIHZhbGlkYXRpb24gZmFpbHNcbiAgICogQHRocm93cyB7VHhJbnRlbnRNaXNtYXRjaFJlY2lwaWVudEVycm9yfSBpZiB0cmFuc2FjdGlvbiByZWNpcGllbnRzIGRvbid0IG1hdGNoIHVzZXIgaW50ZW50XG4gICAqL1xuICBhc3luYyB2ZXJpZnlUcmFuc2FjdGlvbjxUTnVtYmVyIGV4dGVuZHMgbnVtYmVyIHwgYmlnaW50ID0gbnVtYmVyPihcbiAgICBwYXJhbXM6IFZlcmlmeVRyYW5zYWN0aW9uT3B0aW9uczxUTnVtYmVyPlxuICApOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICByZXR1cm4gdGhpcy52ZXJpZnlUcmFuc2FjdGlvbldpdGhBZGRyZXNzQ29kZWMocGFyYW1zLCB0aGlzLmFkZHJlc3NDb2RlYyk7XG4gIH1cblxuICBwcm90ZWN0ZWQgYXN5bmMgdmVyaWZ5VHJhbnNhY3Rpb25XaXRoQWRkcmVzc0NvZGVjPFROdW1iZXIgZXh0ZW5kcyBudW1iZXIgfCBiaWdpbnQ+KFxuICAgIHBhcmFtczogVmVyaWZ5VHJhbnNhY3Rpb25PcHRpb25zPFROdW1iZXI+LFxuICAgIGFkZHJlc3NDb2RlYzogQWRkcmVzc0NvZGVjXG4gICk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gYXdhaXQgdmVyaWZ5VHJhbnNhY3Rpb24odGhpcywgdGhpcy5iaXRnbywgcGFyYW1zLCBhZGRyZXNzQ29kZWMpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBBZ2dyZWdhdGVWYWxpZGF0aW9uRXJyb3IpIHtcbiAgICAgICAgY29uc3QgdHhFeHBsYW5hdGlvbiA9IGF3YWl0IFR4SW50ZW50TWlzbWF0Y2hFcnJvci50cnlHZXRUeEV4cGxhbmF0aW9uKFxuICAgICAgICAgIHRoaXMgYXMgdW5rbm93biBhcyBJQmFzZUNvaW4sXG4gICAgICAgICAgcGFyYW1zLnR4UHJlYnVpbGRcbiAgICAgICAgKTtcbiAgICAgICAgdGhyb3cgY29udmVydFZhbGlkYXRpb25FcnJvclRvVHhJbnRlbnRNaXNtYXRjaChcbiAgICAgICAgICBlcnJvcixcbiAgICAgICAgICBwYXJhbXMucmVxSWQsXG4gICAgICAgICAgcGFyYW1zLnR4UGFyYW1zLFxuICAgICAgICAgIHBhcmFtcy50eFByZWJ1aWxkLnR4SGV4LFxuICAgICAgICAgIHR4RXhwbGFuYXRpb25cbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIHRocm93IGVycm9yO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBNYWtlIHN1cmUgYW4gYWRkcmVzcyBpcyB2YWxpZCBhbmQgdGhyb3cgYW4gZXJyb3IgaWYgaXQncyBub3QuXG4gICAqIEBwYXJhbSBwYXJhbXMuYWRkcmVzcyBUaGUgYWRkcmVzcyBzdHJpbmcgb24gdGhlIG5ldHdvcmtcbiAgICogQHBhcmFtIHBhcmFtcy5hZGRyZXNzVHlwZVxuICAgKiBAcGFyYW0gcGFyYW1zLmtleWNoYWlucyBLZXljaGFpbiBvYmplY3RzIHdpdGggeHB1YnNcbiAgICogQHBhcmFtIHBhcmFtcy5jb2luU3BlY2lmaWMgQ29pbi1zcGVjaWZpYyBkZXRhaWxzIGZvciB0aGUgYWRkcmVzcyBzdWNoIGFzIGEgd2l0bmVzcyBzY3JpcHRcbiAgICogQHBhcmFtIHBhcmFtcy5jaGFpbiBEZXJpdmF0aW9uIGNoYWluXG4gICAqIEBwYXJhbSBwYXJhbXMuaW5kZXggRGVyaXZhdGlvbiBpbmRleFxuICAgKiBAdGhyb3dzIHtJbnZhbGlkQWRkcmVzc0Vycm9yfVxuICAgKiBAdGhyb3dzIHtJbnZhbGlkQWRkcmVzc0Rlcml2YXRpb25Qcm9wZXJ0eUVycm9yfVxuICAgKiBAdGhyb3dzIHtVbmV4cGVjdGVkQWRkcmVzc0Vycm9yfVxuICAgKi9cbiAgYXN5bmMgaXNXYWxsZXRBZGRyZXNzKHBhcmFtczogVmVyaWZ5QWRkcmVzc09wdGlvbnM8VXR4b0NvaW5TcGVjaWZpYz4sIHdhbGxldD86IElXYWxsZXQpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBjb25zdCB7IGFkZHJlc3MsIGtleWNoYWlucywgY2hhaW4sIGluZGV4IH0gPSBwYXJhbXM7XG5cbiAgICBpZiAoIXRoaXMuaXNWYWxpZEFkZHJlc3MoYWRkcmVzcykpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQWRkcmVzc0Vycm9yKGBpbnZhbGlkIGFkZHJlc3M6ICR7YWRkcmVzc31gKTtcbiAgICB9XG5cbiAgICBpZiAod2FsbGV0ICYmIGlzRGVzY3JpcHRvcldhbGxldCh3YWxsZXQpKSB7XG4gICAgICBpZiAoIWtleWNoYWlucykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ21pc3NpbmcgcmVxdWlyZWQgcGFyYW0ga2V5Y2hhaW5zJyk7XG4gICAgICB9XG4gICAgICBpZiAoIWlzVHJpcGxlKGtleWNoYWlucykpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdrZXljaGFpbnMgbXVzdCBiZSBhIHRyaXBsZScpO1xuICAgICAgfVxuICAgICAgYXNzZXJ0RGVzY3JpcHRvcldhbGxldEFkZHJlc3MoXG4gICAgICAgIHRoaXMuYWRkcmVzc0NvZGVjLFxuICAgICAgICBwYXJhbXMsXG4gICAgICAgIGdldERlc2NyaXB0b3JNYXBGcm9tV2FsbGV0KHdhbGxldCwgdG9CaXAzMlRyaXBsZShrZXljaGFpbnMpLCBnZXRQb2xpY3lGb3JFbnYodGhpcy5iaXRnby5lbnYpKVxuICAgICAgKTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIGlmICgoXy5pc1VuZGVmaW5lZChjaGFpbikgJiYgXy5pc1VuZGVmaW5lZChpbmRleCkpIHx8ICEoXy5pc0Zpbml0ZShjaGFpbikgJiYgXy5pc0Zpbml0ZShpbmRleCkpKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFkZHJlc3NEZXJpdmF0aW9uUHJvcGVydHlFcnJvcihcbiAgICAgICAgYGFkZHJlc3MgdmFsaWRhdGlvbiBmYWlsdXJlOiBpbnZhbGlkIGNoYWluICgke2NoYWlufSkgb3IgaW5kZXggKCR7aW5kZXh9KWBcbiAgICAgICk7XG4gICAgfVxuXG4gICAgaWYgKCFrZXljaGFpbnMpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignbWlzc2luZyByZXF1aXJlZCBwYXJhbSBrZXljaGFpbnMnKTtcbiAgICB9XG5cbiAgICBhc3NlcnRGaXhlZFNjcmlwdFdhbGxldEFkZHJlc3ModGhpcy53YXNtTmFtZSwge1xuICAgICAgYWRkcmVzcyxcbiAgICAgIGtleWNoYWlucyxcbiAgICAgIGZvcm1hdDogcGFyYW1zLmZvcm1hdCA/PyAnYmFzZTU4JyxcbiAgICAgIGNoYWluLFxuICAgICAgaW5kZXgsXG4gICAgfSk7XG5cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBMb2NhbGx5IGRlcml2ZSBhIGZpeGVkLXNjcmlwdCAoMi1vZi0zIG11bHRpc2lnKSB3YWxsZXQgcmVjZWl2ZSBhZGRyZXNzIGZyb20gdGhlIHhwdWIgdHJpcGxlXG4gICAqIGFuZCBhIGNoYWluL2luZGV4LCB1c2luZyBwdWJsaWMga2V5cyBvbmx5IChubyBwcml2YXRlIGtleXMsIG5vIG5ldHdvcmsgYWNjZXNzKS4gVGhpcyBpcyB0aGVcbiAgICogaW52ZXJzZSBvZiB7QGxpbmsgaXNXYWxsZXRBZGRyZXNzfSwgZGVsZWdhdGluZyB0byB0aGUgc2FtZSBgZ2VuZXJhdGVBZGRyZXNzYCB1c2VkIGJ5IHRoZVxuICAgKiB2ZXJpZmljYXRpb24gcGF0aCwgc28gZGVyaXZlIGFuZCB2ZXJpZnkgY2FuIG5ldmVyIGRpdmVyZ2UuXG4gICAqXG4gICAqIFRoZSBgY2hhaW5gIGNvZGUgc2VsZWN0cyB0aGUgc2NyaXB0IHR5cGUgKGUuZy4gMC8xID0gUDJTSCwgMjAvMjEgPSBQMldTSC9iZWNoMzIsIDMwLzMxID0gUDJUUik7XG4gICAqIGFuIG9wdGlvbmFsIGBmb3JtYXRgIG92ZXJyaWRlcyB0aGUgYWRkcmVzcyBlbmNvZGluZy5cbiAgICogQHBhcmFtIHBhcmFtcyBrZXljaGFpbnMgKHhwdWIgdHJpcGxlIHZpYSBgcHViYCksIGNoYWluLCBpbmRleCwgYW5kIG9wdGlvbmFsIGZvcm1hdFxuICAgKiBAcmV0dXJucyB0aGUgZGVyaXZlZCBhZGRyZXNzIGFuZCB0aGUgY2hhaW4vaW5kZXggdXNlZFxuICAgKi9cbiAgYXN5bmMgZGVyaXZlQWRkcmVzcyhwYXJhbXM6IERlcml2ZUFkZHJlc3NPcHRpb25zKTogUHJvbWlzZTxEZXJpdmVBZGRyZXNzUmVzdWx0PiB7XG4gICAgY29uc3QgeyBrZXljaGFpbnMsIGNoYWluLCBpbmRleCwgZm9ybWF0IH0gPSBwYXJhbXM7XG5cbiAgICBpZiAoIWtleWNoYWlucykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdtaXNzaW5nIHJlcXVpcmVkIHBhcmFtIGtleWNoYWlucycpO1xuICAgIH1cblxuICAgIGNvbnN0IGFkZHJlc3MgPSBnZW5lcmF0ZUFkZHJlc3ModGhpcy53YXNtTmFtZSwge1xuICAgICAgLy8gZml4ZWQtc2NyaXB0IChtdWx0aXNpZykgY29pbnMgZGVyaXZlIGZyb20gdGhlIHhwdWIgdHJpcGxlIHZpYSBgcHViYFxuICAgICAga2V5Y2hhaW5zOiBrZXljaGFpbnMgYXMgeyBwdWI6IHN0cmluZyB9W10sXG4gICAgICBjaGFpbixcbiAgICAgIGluZGV4LFxuICAgICAgZm9ybWF0LFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIHsgYWRkcmVzcywgY2hhaW4sIGluZGV4IH07XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIGFkZHJlc3NUeXBlXG4gICAqIEByZXR1cm5zIHRydWUgaWZmIGNvaW4gc3VwcG9ydHMgc3BlbmRpbmcgZnJvbSB1bnNwZW50VHlwZVxuICAgKi9cbiAgc3VwcG9ydHNBZGRyZXNzVHlwZShhZGRyZXNzVHlwZTogU2NyaXB0VHlwZTJPZjMpOiBib29sZWFuIHtcbiAgICByZXR1cm4gZml4ZWRTY3JpcHRXYWxsZXQuc3VwcG9ydHNTY3JpcHRUeXBlKHRoaXMud2FzbU5hbWUsIGFkZHJlc3NUeXBlKTtcbiAgfVxuXG4gIC8qKiBpbmhlcml0ZWQgZG9jICovXG4gIGdldERlZmF1bHRNdWx0aXNpZ1R5cGUoKTogTXVsdGlzaWdUeXBlIHtcbiAgICByZXR1cm4gbXVsdGlzaWdUeXBlcy5vbmNoYWluO1xuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSBjaGFpblxuICAgKiBAcmV0dXJuIHRydWUgaWZmIGNvaW4gc3VwcG9ydHMgc3BlbmRpbmcgZnJvbSBjaGFpblxuICAgKi9cbiAgc3VwcG9ydHNBZGRyZXNzQ2hhaW4oY2hhaW46IG51bWJlcik6IGJvb2xlYW4ge1xuICAgIHJldHVybiAoXG4gICAgICBmaXhlZFNjcmlwdFdhbGxldC5DaGFpbkNvZGUuaXMoY2hhaW4pICYmXG4gICAgICB0aGlzLnN1cHBvcnRzQWRkcmVzc1R5cGUoZml4ZWRTY3JpcHRXYWxsZXQuQ2hhaW5Db2RlLnNjcmlwdFR5cGUoY2hhaW4pIGFzIFNjcmlwdFR5cGUyT2YzKVxuICAgICk7XG4gIH1cblxuICBrZXlJZHNGb3JTaWduaW5nKCk6IG51bWJlcltdIHtcbiAgICByZXR1cm4gW0tleUluZGljZXMuVVNFUiwgS2V5SW5kaWNlcy5CQUNLVVAsIEtleUluZGljZXMuQklUR09dO1xuICB9XG5cbiAgLyoqXG4gICAqIEByZXR1cm5zIGlucHV0IHBzYnQgYWRkZWQgd2l0aCBkZXRlcm1pbmlzdGljIE11U2lnMiBub25jZSBmb3IgYml0Z28ga2V5IGZvciBlYWNoIE11U2lnMiBpbnB1dHMuXG4gICAqIEBwYXJhbSBwc2J0IGFsbCBNdVNpZzIgaW5wdXRzIHNob3VsZCBjb250YWluIHVzZXIgTXVTaWcyIG5vbmNlXG4gICAqIEBwYXJhbSB3YWxsZXRJZFxuICAgKi9cbiAgYXN5bmMgZ2V0TXVzaWcyTm9uY2VzKHBzYnQ6IGZpeGVkU2NyaXB0V2FsbGV0LkJpdEdvUHNidCwgd2FsbGV0SWQ6IHN0cmluZyk6IFByb21pc2U8Zml4ZWRTY3JpcHRXYWxsZXQuQml0R29Qc2J0PiB7XG4gICAgY29uc3QgYnVmZmVyID0gZW5jb2RlVHJhbnNhY3Rpb24ocHNidCk7XG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLmJpdGdvXG4gICAgICAucG9zdCh0aGlzLnVybCgnL3dhbGxldC8nICsgd2FsbGV0SWQgKyAnL3R4L3NpZ25wc2J0JykpXG4gICAgICAuc2VuZCh7IHBzYnQ6IGJ1ZmZlci50b1N0cmluZygnaGV4JykgfSlcbiAgICAgIC5yZXN1bHQoKTtcbiAgICByZXR1cm4gZGVjb2RlUHNidChyZXNwb25zZS5wc2J0LCB0aGlzLndhc21OYW1lKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVwcmVjYXRlZCBVc2UgZ2V0TXVzaWcyTm9uY2VzIGluc3RlYWRcbiAgICogQHJldHVybnMgaW5wdXQgcHNidCBhZGRlZCB3aXRoIGRldGVybWluaXN0aWMgTXVTaWcyIG5vbmNlIGZvciBiaXRnbyBrZXkgZm9yIGVhY2ggTXVTaWcyIGlucHV0cy5cbiAgICogQHBhcmFtIHBzYnRIZXggYWxsIE11U2lnMiBpbnB1dHMgc2hvdWxkIGNvbnRhaW4gdXNlciBNdVNpZzIgbm9uY2VcbiAgICogQHBhcmFtIHdhbGxldElkXG4gICAqL1xuICBhc3luYyBzaWduUHNidChwc2J0SGV4OiBzdHJpbmcsIHdhbGxldElkOiBzdHJpbmcpOiBQcm9taXNlPFNpZ25Qc2J0UmVzcG9uc2U+IHtcbiAgICBjb25zdCBwc2J0ID0gYXdhaXQgdGhpcy5nZXRNdXNpZzJOb25jZXModGhpcy5kZWNvZGVUcmFuc2FjdGlvbkFzUHNidChwc2J0SGV4KSwgd2FsbGV0SWQpO1xuICAgIHJldHVybiB7IHBzYnQ6IGVuY29kZVRyYW5zYWN0aW9uKHBzYnQpLnRvU3RyaW5nKCdoZXgnKSB9O1xuICB9XG5cbiAgLyoqXG4gICAqIEByZXR1cm5zIGlucHV0IHBzYnQgYWRkZWQgd2l0aCBkZXRlcm1pbmlzdGljIE11U2lnMiBub25jZSBmb3IgYml0Z28ga2V5IGZvciBlYWNoIE11U2lnMiBpbnB1dHMgZnJvbSBPVkMuXG4gICAqIEBwYXJhbSBvdmNKc29uIEpTT04gb2JqZWN0IHByb3ZpZGVkIGJ5IE9WQyB3aXRoIGZpZWxkcyBwc2J0SGV4IGFuZCB3YWxsZXRJZFxuICAgKi9cbiAgYXN5bmMgc2lnblBzYnRGcm9tT1ZDKG92Y0pzb246IFJlY29yZDxzdHJpbmcsIHVua25vd24+KTogUHJvbWlzZTxSZWNvcmQ8c3RyaW5nLCB1bmtub3duPj4ge1xuICAgIGFzc2VydChvdmNKc29uWydwc2J0SGV4J10sICdvdmNKc29uIG11c3QgY29udGFpbiBwc2J0SGV4Jyk7XG4gICAgYXNzZXJ0KG92Y0pzb25bJ3dhbGxldElkJ10sICdvdmNKc29uIG11c3QgY29udGFpbiB3YWxsZXRJZCcpO1xuICAgIGNvbnN0IGhleCA9IG92Y0pzb25bJ3BzYnRIZXgnXSBhcyBzdHJpbmc7XG4gICAgY29uc3Qgd2FsbGV0SWQgPSBvdmNKc29uWyd3YWxsZXRJZCddIGFzIHN0cmluZztcbiAgICBjb25zdCBwc2J0ID0gYXdhaXQgdGhpcy5nZXRNdXNpZzJOb25jZXModGhpcy5kZWNvZGVUcmFuc2FjdGlvbkFzUHNidChoZXgpLCB3YWxsZXRJZCk7XG4gICAgcmV0dXJuIF8uZXh0ZW5kKG92Y0pzb24sIHsgdHhIZXg6IGVuY29kZVRyYW5zYWN0aW9uKHBzYnQpLnRvU3RyaW5nKCdoZXgnKSB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBc3NlbWJsZSBrZXljaGFpbiBhbmQgaGFsZi1zaWduIHByZWJ1aWx0IHRyYW5zYWN0aW9uXG4gICAqIEBwYXJhbSBwYXJhbXMgLSB7QHNlZSBTaWduVHJhbnNhY3Rpb25PcHRpb25zfVxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxTaWduZWRUcmFuc2FjdGlvbiB8IEhhbGZTaWduZWRVdHhvVHJhbnNhY3Rpb24+fVxuICAgKi9cbiAgYXN5bmMgc2lnblRyYW5zYWN0aW9uPFROdW1iZXIgZXh0ZW5kcyBudW1iZXIgfCBiaWdpbnQgPSBudW1iZXI+KFxuICAgIHBhcmFtczogU2lnblRyYW5zYWN0aW9uT3B0aW9uczxUTnVtYmVyPlxuICApOiBQcm9taXNlPFNpZ25lZFRyYW5zYWN0aW9uIHwgSGFsZlNpZ25lZFV0eG9UcmFuc2FjdGlvbj4ge1xuICAgIHJldHVybiBzaWduVHJhbnNhY3Rpb248VE51bWJlcj4odGhpcywgdGhpcy5iaXRnbywgcGFyYW1zKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTaWduIGEgdHJhbnNhY3Rpb24gd2l0aCBhIGN1c3RvbSBzaWduaW5nIGZ1bmN0aW9uLiBFeGFtcGxlIHVzZSBjYXNlIGlzIGV4cHJlc3MgZXh0ZXJuYWwgc2lnbmVyXG4gICAqIEBwYXJhbSBjdXN0b21TaWduaW5nRnVuY3Rpb24gY3VzdG9tIHNpZ25pbmcgZnVuY3Rpb24gdGhhdCByZXR1cm5zIGEgc2luZ2xlIHNpZ25lZCB0cmFuc2FjdGlvblxuICAgKiBAcGFyYW0gc2lnblRyYW5zYWN0aW9uUGFyYW1zIHBhcmFtZXRlcnMgZm9yIGN1c3RvbSBzaWduaW5nIGZ1bmN0aW9uLiBJbmNsdWRlcyB0eFByZWJ1aWxkIGFuZCBwdWJzXG4gICAqXG4gICAqIEByZXR1cm5zIHNpZ25lZCB0cmFuc2FjdGlvbiBhcyBoZXggc3RyaW5nXG4gICAqL1xuICBhc3luYyBzaWduV2l0aEN1c3RvbVNpZ25pbmdGdW5jdGlvbjxUTnVtYmVyIGV4dGVuZHMgbnVtYmVyIHwgYmlnaW50PihcbiAgICBjdXN0b21TaWduaW5nRnVuY3Rpb246IFV0eG9DdXN0b21TaWduaW5nRnVuY3Rpb248VE51bWJlcj4sXG4gICAgc2lnblRyYW5zYWN0aW9uUGFyYW1zOiB7IHR4UHJlYnVpbGQ6IFRyYW5zYWN0aW9uUHJlYnVpbGQ8VE51bWJlcj47IHB1YnM6IHN0cmluZ1tdIH1cbiAgKTogUHJvbWlzZTxTaWduZWRUcmFuc2FjdGlvbj4ge1xuICAgIGNvbnN0IHR4SGV4ID0gc2lnblRyYW5zYWN0aW9uUGFyYW1zLnR4UHJlYnVpbGQudHhIZXg7XG4gICAgYXNzZXJ0KHR4SGV4LCAnbWlzc2luZyB0eEhleCBwYXJhbWV0ZXInKTtcblxuICAgIGNvbnN0IHR4ID0gdGhpcy5kZWNvZGVUcmFuc2FjdGlvbih0eEhleCk7XG5cbiAgICBjb25zdCBpc1R4V2l0aEtleVBhdGhTcGVuZElucHV0ID0gaGFzS2V5UGF0aFNwZW5kSW5wdXQodHgsIHNpZ25UcmFuc2FjdGlvblBhcmFtcy5wdWJzLCB0aGlzLm5hbWUpO1xuXG4gICAgaWYgKCFpc1R4V2l0aEtleVBhdGhTcGVuZElucHV0KSB7XG4gICAgICByZXR1cm4gYXdhaXQgY3VzdG9tU2lnbmluZ0Z1bmN0aW9uKHsgLi4uc2lnblRyYW5zYWN0aW9uUGFyYW1zLCBjb2luOiB0aGlzIH0pO1xuICAgIH1cblxuICAgIGNvbnN0IGdldFR4SGV4ID0gKHY6IFNpZ25lZFRyYW5zYWN0aW9uKTogc3RyaW5nID0+IHtcbiAgICAgIGlmICgndHhIZXgnIGluIHYpIHtcbiAgICAgICAgcmV0dXJuIHYudHhIZXg7XG4gICAgICB9XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ3R4SGV4IG5vdCBmb3VuZCBpbiBzaWduVHJhbnNhY3Rpb24gcmVzdWx0Jyk7XG4gICAgfTtcblxuICAgIGNvbnN0IHNpZ25lck5vbmNlVHggPSBhd2FpdCBjdXN0b21TaWduaW5nRnVuY3Rpb24oe1xuICAgICAgLi4uc2lnblRyYW5zYWN0aW9uUGFyYW1zLFxuICAgICAgc2lnbmluZ1N0ZXA6ICdzaWduZXJOb25jZScsXG4gICAgICBjb2luOiB0aGlzLFxuICAgIH0pO1xuXG4gICAgY29uc3QgeyBwdWJzIH0gPSBzaWduVHJhbnNhY3Rpb25QYXJhbXM7XG4gICAgYXNzZXJ0KHB1YnMgPT09IHVuZGVmaW5lZCB8fCBpc1RyaXBsZShwdWJzKSk7XG5cbiAgICBjb25zdCBjb3NpZ25lck5vbmNlVHggPSBhd2FpdCB0aGlzLnNpZ25UcmFuc2FjdGlvbjxUTnVtYmVyPih7XG4gICAgICAuLi5zaWduVHJhbnNhY3Rpb25QYXJhbXMsXG4gICAgICBwdWJzLFxuICAgICAgdHhQcmVidWlsZDogeyAuLi5zaWduVHJhbnNhY3Rpb25QYXJhbXMudHhQcmVidWlsZCwgdHhIZXg6IGdldFR4SGV4KHNpZ25lck5vbmNlVHgpIH0sXG4gICAgICBzaWduaW5nU3RlcDogJ2Nvc2lnbmVyTm9uY2UnLFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIGF3YWl0IGN1c3RvbVNpZ25pbmdGdW5jdGlvbih7XG4gICAgICAuLi5zaWduVHJhbnNhY3Rpb25QYXJhbXMsXG4gICAgICB0eFByZWJ1aWxkOiB7IC4uLnNpZ25UcmFuc2FjdGlvblBhcmFtcy50eFByZWJ1aWxkLCB0eEhleDogZ2V0VHhIZXgoY29zaWduZXJOb25jZVR4KSB9LFxuICAgICAgc2lnbmluZ1N0ZXA6ICdzaWduZXJTaWduYXR1cmUnLFxuICAgICAgY29pbjogdGhpcyxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0gdW5zcGVudFxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAgICovXG4gIGlzQml0R29UYWludGVkVW5zcGVudDxUTnVtYmVyIGV4dGVuZHMgbnVtYmVyIHwgYmlnaW50Pih1bnNwZW50OiBVbnNwZW50PFROdW1iZXI+KTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIGlzUmVwbGF5UHJvdGVjdGlvblVuc3BlbnQodW5zcGVudCwgdGhpcy5uYW1lKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZWNvbXBvc2UgYSByYXcgcHNidC90cmFuc2FjdGlvbiBpbnRvIHVzZWZ1bCBpbmZvcm1hdGlvbiwgc3VjaCBhcyB0aGUgdG90YWwgYW1vdW50cyxcbiAgICogY2hhbmdlIGFtb3VudHMsIGFuZCB0cmFuc2FjdGlvbiBvdXRwdXRzLlxuICAgKiBAcGFyYW0gcGFyYW1zXG4gICAqL1xuICBvdmVycmlkZSBhc3luYyBleHBsYWluVHJhbnNhY3Rpb248VE51bWJlciBleHRlbmRzIG51bWJlciB8IGJpZ2ludCA9IG51bWJlcj4oXG4gICAgcGFyYW1zOiBFeHBsYWluVHJhbnNhY3Rpb25PcHRpb25zPFROdW1iZXI+LFxuICAgIHdhbGxldD86IElXYWxsZXRcbiAgKTogUHJvbWlzZTxUcmFuc2FjdGlvbkV4cGxhbmF0aW9uPiB7XG4gICAgaWYgKCFwYXJhbXMucHVicykge1xuICAgICAgLy8gaWYgbm8gcHVicyBhcmUgcHJvdmlkZWQsIG9wcG9ydHVuaXN0aWNhbGx5IGZldGNoIHRoZSBrZXljaGFpbnMgZnJvbSB0aGUgd2FsbGV0XG4gICAgICBpZiAod2FsbGV0KSB7XG4gICAgICAgIGNvbnN0IGtleWNoYWlucyA9IGF3YWl0IGZldGNoS2V5Y2hhaW5zKHRoaXMsIHdhbGxldCk7XG4gICAgICAgIHBhcmFtcy5wdWJzID0gdG9CaXAzMlRyaXBsZShrZXljaGFpbnMpLm1hcCgoaykgPT4gay5uZXV0ZXJlZCgpLnRvQmFzZTU4KCkpIGFzIFRyaXBsZTxzdHJpbmc+O1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAod2FsbGV0ICYmIGlzRGVzY3JpcHRvcldhbGxldCh3YWxsZXQpKSB7XG4gICAgICAvLyBEZXNjcmlwdG9yIHdhbGxldHMgZGVjb2RlIHByZWJ1aWxkIGJ5dGVzIHN0cmFpZ2h0IGludG8gdGhlIHdhc20tdXR4b1xuICAgICAgLy8gZGVzY3JpcHRvciBQc2J0LCBza2lwcGluZyB0aGUgZml4ZWRTY3JpcHRXYWxsZXQuQml0R29Qc2J0IGludGVybWVkaWF0ZS5cbiAgICAgIHJldHVybiBleHBsYWluVHgoZGVjb2RlRGVzY3JpcHRvclBzYnQocGFyYW1zKSwgeyAuLi5wYXJhbXMsIHdhbGxldCB9LCB0aGlzLndhc21OYW1lKTtcbiAgICB9XG4gICAgcmV0dXJuIGV4cGxhaW5UeCh0aGlzLmRlY29kZVRyYW5zYWN0aW9uRnJvbVByZWJ1aWxkKHBhcmFtcyksIHsgLi4ucGFyYW1zLCB3YWxsZXQgfSwgdGhpcy53YXNtTmFtZSk7XG4gIH1cblxuICAvKipcbiAgICogQGRlcHJlY2F0ZWQgLSB1c2Uge0BzZWUgYmFja3VwS2V5UmVjb3Zlcnl9XG4gICAqIEJ1aWxkcyBhIGZ1bmRzIHJlY292ZXJ5IHRyYW5zYWN0aW9uIHdpdGhvdXQgQml0R29cbiAgICogQHBhcmFtIHBhcmFtcyAtIHtAc2VlIGJhY2t1cEtleVJlY292ZXJ5fVxuICAgKi9cbiAgYXN5bmMgcmVjb3ZlcihwYXJhbXM6IFJlY292ZXJQYXJhbXMpOiBSZXR1cm5UeXBlPHR5cGVvZiBiYWNrdXBLZXlSZWNvdmVyeT4ge1xuICAgIHJldHVybiBiYWNrdXBLZXlSZWNvdmVyeSh0aGlzLCB0aGlzLmJpdGdvLCBwYXJhbXMpO1xuICB9XG5cbiAgYXN5bmMgcmVjb3ZlclYxKHBhcmFtczogVjFSZWNvdmVyUGFyYW1zKTogUmV0dXJuVHlwZTx0eXBlb2YgdjFCYWNrdXBLZXlSZWNvdmVyeT4ge1xuICAgIHJldHVybiB2MUJhY2t1cEtleVJlY292ZXJ5KHRoaXMsIHRoaXMuYml0Z28sIHBhcmFtcyk7XG4gIH1cblxuICBhc3luYyBzd2VlcFYxKHBhcmFtczogVjFTd2VlcFBhcmFtcyk6IFJldHVyblR5cGU8dHlwZW9mIHYxU3dlZXA+IHtcbiAgICByZXR1cm4gdjFTd2VlcCh0aGlzLCB0aGlzLmJpdGdvLCBwYXJhbXMpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlY292ZXIgY29pbiB0aGF0IHdhcyBzZW50IHRvIHdyb25nIGNoYWluXG4gICAqIEBwYXJhbSBwYXJhbXNcbiAgICogQHBhcmFtIHBhcmFtcy50eGlkIFRoZSB0eGlkIG9mIHRoZSBmYXVsdHkgdHJhbnNhY3Rpb25cbiAgICogQHBhcmFtIHBhcmFtcy5yZWNvdmVyeUFkZHJlc3MgYWRkcmVzcyB0byBzZW5kIHJlY292ZXJlZCBmdW5kcyB0b1xuICAgKiBAcGFyYW0gcGFyYW1zLndhbGxldCB0aGUgd2FsbGV0IHRoYXQgcmVjZWl2ZWQgdGhlIGZ1bmRzXG4gICAqIEBwYXJhbSBwYXJhbXMucmVjb3ZlcnlDb2luIHRoZSBjb2luIHR5cGUgb2YgdGhlIHdhbGxldCB0aGF0IHJlY2VpdmVkIHRoZSBmdW5kc1xuICAgKiBAcGFyYW0gcGFyYW1zLnNpZ25lZCByZXR1cm4gYSBoYWxmLXNpZ25lZCB0cmFuc2FjdGlvbiAoZGVmYXVsdD10cnVlKVxuICAgKiBAcGFyYW0gcGFyYW1zLndhbGxldFBhc3NwaHJhc2UgdGhlIHdhbGxldCBwYXNzcGhyYXNlXG4gICAqIEBwYXJhbSBwYXJhbXMueHBydiB0aGUgdW5lbmNyeXB0ZWQgeHBydiAodXNlZCBpbnN0ZWFkIG9mIHdhbGxldCBwYXNzcGhyYXNlKVxuICAgKiBAcGFyYW0gcGFyYW1zLmFwaUtleSBmb3IgdXR4byBjb2lucyBvdGhlciB0aGFuIFtCVEMsVEJUQ10gdGhpcyBpcyBhIEJsb2NrIENoYWlyIGFwaSBrZXlcbiAgICogQHJldHVybnMgeyp9XG4gICAqL1xuICBhc3luYyByZWNvdmVyRnJvbVdyb25nQ2hhaW48VE51bWJlciBleHRlbmRzIG51bWJlciB8IGJpZ2ludCA9IG51bWJlcj4oXG4gICAgcGFyYW1zOiBSZWNvdmVyRnJvbVdyb25nQ2hhaW5PcHRpb25zXG4gICk6IFByb21pc2U8Q3Jvc3NDaGFpblJlY292ZXJ5U2lnbmVkPFROdW1iZXI+IHwgQ3Jvc3NDaGFpblJlY292ZXJ5VW5zaWduZWQ8VE51bWJlcj4+IHtcbiAgICBjb25zdCB7IHR4aWQsIHJlY292ZXJ5QWRkcmVzcywgd2FsbGV0LCB3YWxsZXRQYXNzcGhyYXNlLCB4cHJ2LCBhcGlLZXkgfSA9IHBhcmFtcztcblxuICAgIC8vIHBhcmFtcy5yZWNvdmVyeUNvaW4gdXNlZCB0byBiZSBwYXJhbXMuY29pbiwgYmFja3dhcmRzIGNvbXBhdGliaWxpdHlcbiAgICBjb25zdCByZWNvdmVyeUNvaW4gPSBwYXJhbXMuY29pbiB8fCBwYXJhbXMucmVjb3ZlcnlDb2luO1xuICAgIGlmICghcmVjb3ZlcnlDb2luKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ21pc3NpbmcgcmVxdWlyZWQgb2JqZWN0IHJlY292ZXJ5Q29pbicpO1xuICAgIH1cbiAgICAvLyBzaWduZWQgc2hvdWxkIGRlZmF1bHQgdG8gdHJ1ZSwgYW5kIG9ubHkgYmUgZGlzYWJsZWQgaWYgZXhwbGljaXRseSBzZXQgdG8gZmFsc2UgKG5vdCB1bmRlZmluZWQpXG4gICAgY29uc3Qgc2lnbmVkID0gcGFyYW1zLnNpZ25lZCAhPT0gZmFsc2U7XG5cbiAgICBjb25zdCBzb3VyY2VDb2luRmFtaWx5ID0gdGhpcy5nZXRGYW1pbHkoKTtcbiAgICBjb25zdCByZWNvdmVyeUNvaW5GYW1pbHkgPSByZWNvdmVyeUNvaW4uZ2V0RmFtaWx5KCk7XG4gICAgY29uc3Qgc3VwcG9ydGVkUmVjb3ZlcnlDb2lucyA9IHN1cHBvcnRlZENyb3NzQ2hhaW5SZWNvdmVyaWVzW3NvdXJjZUNvaW5GYW1pbHldO1xuXG4gICAgaWYgKF8uaXNVbmRlZmluZWQoc3VwcG9ydGVkUmVjb3ZlcnlDb2lucykgfHwgIXN1cHBvcnRlZFJlY292ZXJ5Q29pbnMuaW5jbHVkZXMocmVjb3ZlcnlDb2luRmFtaWx5KSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBSZWNvdmVyeSBvZiAke3NvdXJjZUNvaW5GYW1pbHl9IGJhbGFuY2VzIGZyb20gJHtyZWNvdmVyeUNvaW5GYW1pbHl9IHdhbGxldHMgaXMgbm90IHN1cHBvcnRlZC5gKTtcbiAgICB9XG5cbiAgICByZXR1cm4gYXdhaXQgcmVjb3ZlckNyb3NzQ2hhaW48VE51bWJlcj4odGhpcy5iaXRnbywge1xuICAgICAgc291cmNlQ29pbjogdGhpcyxcbiAgICAgIHJlY292ZXJ5Q29pbixcbiAgICAgIHdhbGxldElkOiB3YWxsZXQsXG4gICAgICB0eGlkLFxuICAgICAgcmVjb3ZlcnlBZGRyZXNzLFxuICAgICAgd2FsbGV0UGFzc3BocmFzZTogc2lnbmVkID8gd2FsbGV0UGFzc3BocmFzZSA6IHVuZGVmaW5lZCxcbiAgICAgIHhwcnY6IHNpZ25lZCA/IHhwcnYgOiB1bmRlZmluZWQsXG4gICAgICBhcGlLZXksXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogR2VuZXJhdGUgYmlwMzIga2V5IHBhaXJcbiAgICpcbiAgICogQHBhcmFtIHNlZWRcbiAgICogQHJldHVybnMge09iamVjdH0gb2JqZWN0IHdpdGggZ2VuZXJhdGVkIHB1YiBhbmQgcHJ2XG4gICAqL1xuICBnZW5lcmF0ZUtleVBhaXIoc2VlZDogQnVmZmVyKTogeyBwdWI6IHN0cmluZzsgcHJ2OiBzdHJpbmcgfSB7XG4gICAgaWYgKCFzZWVkKSB7XG4gICAgICAvLyBBbiBleHRlbmRlZCBwcml2YXRlIGtleSBoYXMgYm90aCBhIG5vcm1hbCAyNTYgYml0IHByaXZhdGUga2V5IGFuZCBhIDI1NlxuICAgICAgLy8gYml0IGNoYWluIGNvZGUsIGJvdGggb2Ygd2hpY2ggbXVzdCBiZSByYW5kb20uIDUxMiBiaXRzIGlzIHRoZXJlZm9yZSB0aGVcbiAgICAgIC8vIG1heGltdW0gZW50cm9weSBhbmQgZ2l2ZXMgdXMgbWF4aW11bSBzZWN1cml0eSBhZ2FpbnN0IGNyYWNraW5nLlxuICAgICAgc2VlZCA9IHJhbmRvbUJ5dGVzKDUxMiAvIDgpO1xuICAgIH1cbiAgICBjb25zdCBleHRlbmRlZEtleSA9IEJJUDMyLmZyb21TZWVkKHNlZWQpO1xuICAgIHJldHVybiB7XG4gICAgICBwdWI6IGV4dGVuZGVkS2V5Lm5ldXRlcmVkKCkudG9CYXNlNTgoKSxcbiAgICAgIHBydjogZXh0ZW5kZWRLZXkudG9CYXNlNTgoKSxcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIERldGVybWluZXMgdGhlIGRlZmF1bHQgdHJhbnNhY3Rpb24gZm9ybWF0IGJhc2VkIG9uIHdhbGxldCBwcm9wZXJ0aWVzIGFuZCBuZXR3b3JrXG4gICAqIEBwYXJhbSB3YWxsZXQgLSBUaGUgd2FsbGV0IHRvIGNoZWNrXG4gICAqIEBwYXJhbSByZXF1ZXN0ZWRGb3JtYXQgLSBPcHRpb25hbCBleHBsaWNpdGx5IHJlcXVlc3RlZCBmb3JtYXRcbiAgICogQHJldHVybnMgVGhlIHRyYW5zYWN0aW9uIGZvcm1hdCB0byB1c2UsIG9yIHVuZGVmaW5lZCBpZiBubyBkZWZhdWx0IGFwcGxpZXNcbiAgICovXG4gIGdldERlZmF1bHRUeEZvcm1hdCh3YWxsZXQ6IFdhbGxldCwgcmVxdWVzdGVkRm9ybWF0PzogVHhGb3JtYXQpOiBUeEZvcm1hdCB7XG4gICAgaWYgKHJlcXVlc3RlZEZvcm1hdCA9PT0gJ2xlZ2FjeScpIHtcbiAgICAgIHJldHVybiAncHNidC1saXRlJztcbiAgICB9XG4gICAgcmV0dXJuIHJlcXVlc3RlZEZvcm1hdCA/PyAncHNidC1saXRlJztcbiAgfVxuXG4gIGFzeW5jIGdldEV4dHJhUHJlYnVpbGRQYXJhbXMoYnVpbGRQYXJhbXM6IEV4dHJhUHJlYnVpbGRQYXJhbXNPcHRpb25zICYgeyB3YWxsZXQ6IFdhbGxldCB9KTogUHJvbWlzZTx7XG4gICAgdHhGb3JtYXQ/OiBUeEZvcm1hdDtcbiAgICBjaGFuZ2VBZGRyZXNzVHlwZT86IFNjcmlwdFR5cGUyT2YzW10gfCBTY3JpcHRUeXBlMk9mMztcbiAgICBhbGxvd2VkSW5wdXRTY3JpcHRUeXBlcz86IFNjcmlwdFR5cGUyT2YzW107XG4gIH0+IHtcbiAgICBjb25zdCByZXF1ZXN0ZWRGb3JtYXQgPSBidWlsZFBhcmFtcy50eEZvcm1hdCBhcyBUeEZvcm1hdCB8IHVuZGVmaW5lZDtcbiAgICBjb25zdCB0eEZvcm1hdCA9IHRoaXMuZ2V0RGVmYXVsdFR4Rm9ybWF0KGJ1aWxkUGFyYW1zLndhbGxldCwgcmVxdWVzdGVkRm9ybWF0KTtcbiAgICBsZXQgY2hhbmdlQWRkcmVzc1R5cGUgPSBidWlsZFBhcmFtcy5jaGFuZ2VBZGRyZXNzVHlwZSBhcyBTY3JpcHRUeXBlMk9mM1tdIHwgU2NyaXB0VHlwZTJPZjMgfCB1bmRlZmluZWQ7XG5cbiAgICAvLyBpZiB0aGUgYWRkcmVzc1R5cGUgaXMgbm90IHNwZWNpZmllZCwgd2UgbmVlZCB0byBkZWZhdWx0IHRvIHAydHJNdXNpZzIgZm9yIHRlc3RuZXQgaG90IHdhbGxldHMgZm9yIHN0YWdlZCByb2xsb3V0IG9mIHAydHJNdXNpZzJcbiAgICBpZiAoXG4gICAgICBidWlsZFBhcmFtcy5hZGRyZXNzVHlwZSA9PT0gdW5kZWZpbmVkICYmIC8vIGFkZHJlc3NUeXBlIGlzIGRlcHJlY2F0ZWQgYW5kIHJlcGxhY2VkIGJ5IGBjaGFuZ2VBZGRyZXNzYFxuICAgICAgYnVpbGRQYXJhbXMuY2hhbmdlQWRkcmVzc1R5cGUgPT09IHVuZGVmaW5lZCAmJlxuICAgICAgYnVpbGRQYXJhbXMuY2hhbmdlQWRkcmVzcyA9PT0gdW5kZWZpbmVkICYmXG4gICAgICBidWlsZFBhcmFtcy53YWxsZXQudHlwZSgpID09PSAnaG90J1xuICAgICkge1xuICAgICAgY2hhbmdlQWRkcmVzc1R5cGUgPSBbJ3AydHJNdXNpZzInLCAncDJ3c2gnLCAncDJzaFAyd3NoJywgJ3Ayc2gnLCAncDJ0ciddO1xuICAgIH1cblxuICAgIC8vIGdldEhhbGZTaWduZWRMZWdhY3lGb3JtYXQoKSBvbmx5IHN1cHBvcnRzIHAybXMtYmFzZWQgdHlwZXMgKHAyc2gsIHAyc2hQMndzaCwgcDJ3c2gpLlxuICAgIC8vIEZpbHRlciBjaGFuZ2Ugb3V0cHV0cyBhbmQgcmVzdHJpY3QgaW5wdXQgc2VsZWN0aW9uIHRvIHRoZXNlIHR5cGVzLlxuICAgIGNvbnN0IGxlZ2FjeUNvbXBhdGlibGVUeXBlczogU2NyaXB0VHlwZTJPZjNbXSA9IFsncDJzaCcsICdwMnNoUDJ3c2gnLCAncDJ3c2gnXTtcbiAgICBsZXQgYWxsb3dlZElucHV0U2NyaXB0VHlwZXM6IFNjcmlwdFR5cGUyT2YzW10gfCB1bmRlZmluZWQ7XG5cbiAgICBpZiAocmVxdWVzdGVkRm9ybWF0ID09PSAnbGVnYWN5Jykge1xuICAgICAgYWxsb3dlZElucHV0U2NyaXB0VHlwZXMgPSBsZWdhY3lDb21wYXRpYmxlVHlwZXM7XG4gICAgICBpZiAoQXJyYXkuaXNBcnJheShjaGFuZ2VBZGRyZXNzVHlwZSkpIHtcbiAgICAgICAgY2hhbmdlQWRkcmVzc1R5cGUgPSBjaGFuZ2VBZGRyZXNzVHlwZS5maWx0ZXIoKHQpOiB0IGlzIFNjcmlwdFR5cGUyT2YzID0+XG4gICAgICAgICAgbGVnYWN5Q29tcGF0aWJsZVR5cGVzLmluY2x1ZGVzKHQgYXMgU2NyaXB0VHlwZTJPZjMpXG4gICAgICAgICk7XG4gICAgICB9IGVsc2UgaWYgKGNoYW5nZUFkZHJlc3NUeXBlICE9PSB1bmRlZmluZWQgJiYgIWxlZ2FjeUNvbXBhdGlibGVUeXBlcy5pbmNsdWRlcyhjaGFuZ2VBZGRyZXNzVHlwZSkpIHtcbiAgICAgICAgY2hhbmdlQWRkcmVzc1R5cGUgPSBsZWdhY3lDb21wYXRpYmxlVHlwZXM7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIHR4Rm9ybWF0LFxuICAgICAgY2hhbmdlQWRkcmVzc1R5cGUsXG4gICAgICBhbGxvd2VkSW5wdXRTY3JpcHRUeXBlcyxcbiAgICB9O1xuICB9XG5cbiAgcHJlQ3JlYXRlQml0R28ocGFyYW1zOiBQcmVjcmVhdGVCaXRHb09wdGlvbnMpOiB2b2lkIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBhc3luYyBwcmVzaWduVHJhbnNhY3Rpb24ocGFyYW1zOiBQcmVzaWduVHJhbnNhY3Rpb25PcHRpb25zKTogUHJvbWlzZTxhbnk+IHtcbiAgICBpZiAocGFyYW1zLndhbGxldERhdGEgJiYgaXNVdHhvV2FsbGV0RGF0YShwYXJhbXMud2FsbGV0RGF0YSkgJiYgaXNEZXNjcmlwdG9yV2FsbGV0RGF0YShwYXJhbXMud2FsbGV0RGF0YSkpIHtcbiAgICAgIHJldHVybiBwYXJhbXM7XG4gICAgfVxuXG4gICAgY29uc3QgcmV0dXJuTGVnYWN5Rm9ybWF0ID0gKHBhcmFtcyBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPikudHhGb3JtYXQgPT09ICdsZWdhY3knO1xuICAgIHJldHVybiB7IC4uLnBhcmFtcywgcmV0dXJuTGVnYWN5Rm9ybWF0IH07XG4gIH1cblxuICBhc3luYyBzdXBwbGVtZW50R2VuZXJhdGVXYWxsZXQoXG4gICAgd2FsbGV0UGFyYW1zOiBTdXBwbGVtZW50R2VuZXJhdGVXYWxsZXRPcHRpb25zLFxuICAgIGtleWNoYWluczogS2V5Y2hhaW5zVHJpcGxldFxuICApOiBQcm9taXNlPGFueT4ge1xuICAgIHJldHVybiB3YWxsZXRQYXJhbXM7XG4gIH1cblxuICB0cmFuc2FjdGlvbkRhdGFBbGxvd2VkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHZhbHVlbGVzc1RyYW5zZmVyQWxsb3dlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBwcmVwYXJlQ29sZFRyYW5zYWN0aW9uPFQgZXh0ZW5kcyBCYXNlVHJhbnNhY3Rpb25QcmVidWlsZD4oXG4gICAgdHhQcmVidWlsZDogVCxcbiAgICBrZXljaGFpbnM6IFRyaXBsZTxLZXljaGFpbj5cbiAgKTogVCAmIENvbGRUcmFuc2FjdGlvblByZWJ1aWxkIHtcbiAgICAvLyBQU0JUcyBhbHJlYWR5IGNhcnJ5IEJJUC0zMiBkZXJpdmF0aW9uIGluZm8gaW5saW5lLCBzbyBvZmZsaW5lIHNpZ25lcnMgZG8gbm90IG5lZWQgdGhlIGV4dHJhIGluZm9ybWF0aW9uXG4gICAgaWYgKHR5cGVvZiB0eFByZWJ1aWxkLnR4SGV4ID09PSAnc3RyaW5nJyAmJiBoYXNQc2J0TWFnaWMoc3RyaW5nVG9CdWZmZXJUcnlGb3JtYXRzKHR4UHJlYnVpbGQudHhIZXgsIFsnaGV4J10pKSkge1xuICAgICAgcmV0dXJuIHR4UHJlYnVpbGQgYXMgVCAmIENvbGRUcmFuc2FjdGlvblByZWJ1aWxkO1xuICAgIH1cbiAgICByZXR1cm4gc3VwZXIucHJlcGFyZUNvbGRUcmFuc2FjdGlvbih0eFByZWJ1aWxkLCBrZXljaGFpbnMpO1xuICB9XG5cbiAgZ2V0UmVjb3ZlcnlQcm92aWRlcihhcGlUb2tlbj86IHN0cmluZyk6IFJlY292ZXJ5UHJvdmlkZXIge1xuICAgIHJldHVybiBmb3JDb2luKHRoaXMuZ2V0Q2hhaW4oKSwgYXBpVG9rZW4pO1xuICB9XG5cbiAgLyoqIEBpbmhlcml0RG9jICovXG4gIGF1ZGl0RGVjcnlwdGVkS2V5KHtcbiAgICBtdWx0aVNpZ1R5cGUsXG4gICAgcHVibGljS2V5LFxuICAgIHBydixcbiAgfToge1xuICAgIG11bHRpU2lnVHlwZTogTXVsdGlzaWdUeXBlO1xuICAgIHB1YmxpY0tleTogc3RyaW5nO1xuICAgIHBydjogc3RyaW5nO1xuICB9KTogdm9pZCB7XG4gICAgaWYgKG11bHRpU2lnVHlwZSA9PT0gJ3RzcycpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcigndHNzIGF1ZGl0aW5nIGlzIG5vdCBzdXBwb3J0ZWQgZm9yIHRoaXMgY29pbicpO1xuICAgIH1cbiAgICBpZiAoIWlzVmFsaWRQcnYocHJ2KSAmJiAhaXNWYWxpZFhwcnYocHJ2KSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdpbnZhbGlkIHByaXZhdGUga2V5Jyk7XG4gICAgfVxuICAgIGlmIChwdWJsaWNLZXkpIHtcbiAgICAgIGNvbnN0IGdlblB1YktleSA9IEJJUDMyLmZyb21CYXNlNTgocHJ2KS5uZXV0ZXJlZCgpLnRvQmFzZTU4KCk7XG4gICAgICBpZiAoZ2VuUHViS2V5ICE9PSBwdWJsaWNLZXkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdwdWJsaWMga2V5IGRvZXMgbm90IG1hdGNoIHByaXZhdGUga2V5Jyk7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG4iXX0=
644
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWJzdHJhY3RVdHhvQ29pbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9hYnN0cmFjdFV0eG9Db2luLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBLG9EQUE0QjtBQUM1QixtQ0FBcUM7QUFFckMsb0RBQXVCO0FBQ3ZCLGdEQUEwRTtBQUMxRSxtREEyQzhCO0FBRTlCLHlDQVlvQjtBQUNwQixpRkFBbUg7QUFDbkgscUNBQXlEO0FBQ3pELCtDQUErRTtBQUMvRSx1REFBdUQ7QUFHdkQsa0ZBSW9EO0FBQ3BELDZDQUE2RztBQUM3RyxtQ0FRaUI7QUFDakIsdURBQXdGO0FBRXhGLGlEQUFxSDtBQUNySCwyQ0FBMEU7QUFDMUUsMkNBQXNFO0FBQ3RFLGdFQUE4RDtBQUM5RCxtRUFBZ0U7QUFDaEUscUNBQXdEO0FBQ3hELG9FQUF1RTtBQWtCdkUsTUFBYSx1QkFBd0IsU0FBUSxLQUFLO0lBQ2hELFlBQVksUUFBa0I7UUFDNUIsS0FBSyxDQUFDLDRCQUE0QixRQUFRLDhEQUE4RCxDQUFDLENBQUM7SUFDNUcsQ0FBQztDQUNGO0FBSkQsMERBSUM7QUEyQkQ7O0dBRUc7QUFDSCxTQUFTLG9CQUFvQixDQUMzQixFQUErQixFQUMvQixJQUEwQixFQUMxQixRQUFzQjtJQUV0QixJQUFBLGdCQUFNLEVBQUMsSUFBSSxJQUFJLElBQUEsbUJBQVEsRUFBQyxJQUFJLENBQUMsRUFBRSw2RUFBNkUsQ0FBQyxDQUFDO0lBQzlHLE1BQU0sY0FBYyxHQUFHLDZCQUFpQixDQUFDLGNBQWMsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDeEUsTUFBTSxnQkFBZ0IsR0FBRyxFQUFFLFVBQVUsRUFBRSxJQUFBLDZDQUEwQixFQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUM7SUFDOUUsTUFBTSxNQUFNLEdBQUcsRUFBRSxDQUFDLDhCQUE4QixDQUFDLGNBQWMsRUFBRSxFQUFFLGdCQUFnQixFQUFFLENBQUMsQ0FBQztJQUN2RixPQUFPLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLENBQUMsVUFBVSxLQUFLLG1CQUFtQixDQUFDLENBQUM7QUFDakYsQ0FBQztBQUVEOzs7Ozs7R0FNRztBQUNILFNBQVMsd0NBQXdDLENBQy9DLEtBQStCLEVBQy9CLEtBQTBDLEVBQzFDLFFBQStCLEVBQy9CLEtBQXlCLEVBQ3pCLGFBQXVCO0lBRXZCLE1BQU0sb0JBQW9CLEdBQTBCLEVBQUUsQ0FBQztJQUV2RCxLQUFLLE1BQU0sR0FBRyxJQUFJLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQztRQUMvQixJQUFJLEdBQUcsWUFBWSx1Q0FBbUIsRUFBRSxDQUFDO1lBQ3ZDLG9CQUFvQixDQUFDLElBQUksQ0FDdkIsR0FBRyxHQUFHLENBQUMsY0FBYyxDQUFDLEdBQUcsQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsQ0FBQztnQkFDckMsT0FBTyxFQUFFLE1BQU0sQ0FBQyxPQUFPO2dCQUN2QixNQUFNLEVBQUUsTUFBTSxDQUFDLE1BQU0sQ0FBQyxRQUFRLEVBQUU7YUFDakMsQ0FBQyxDQUFDLENBQ0osQ0FBQztRQUNKLENBQUM7YUFBTSxJQUFJLEdBQUcsWUFBWSxnREFBNEIsRUFBRSxDQUFDO1lBQ3ZELG9CQUFvQixDQUFDLElBQUksQ0FDdkIsR0FBRyxHQUFHLENBQUMsdUJBQXVCLENBQUMsR0FBRyxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxDQUFDO2dCQUM5QyxPQUFPLEVBQUUsTUFBTSxDQUFDLE9BQU87Z0JBQ3ZCLE1BQU0sRUFBRSxNQUFNLENBQUMsTUFBTSxDQUFDLFFBQVEsRUFBRTthQUNqQyxDQUFDLENBQUMsQ0FDSixDQUFDO1FBQ0osQ0FBQztJQUNILENBQUM7SUFFRCxNQUFNLGFBQWEsR0FBRyxJQUFJLHlDQUE4QixDQUN0RCxLQUFLLENBQUMsT0FBTyxFQUNiLEtBQUssRUFDTCxDQUFDLFFBQVEsQ0FBQyxFQUNWLEtBQUssRUFDTCxvQkFBb0IsRUFDcEIsYUFBYSxDQUNkLENBQUM7SUFDRixvRUFBb0U7SUFDcEUsb0dBQW9HO0lBQ25HLGFBQTJDLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztJQUMzRCxPQUFPLGFBQWEsQ0FBQztBQUN2QixDQUFDO0FBa01ELE1BQXNCLGdCQUFpQixTQUFRLG1CQUFRO0lBR3JEOzs7O09BSUc7SUFDTyxTQUFTO1FBQ2pCLE9BQU8sSUFBQSxxQkFBYSxFQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNsQyxDQUFDO0lBSUQsWUFBc0IsS0FBZ0IsRUFBRSxhQUFrQyxRQUFRO1FBQ2hGLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNiLElBQUksQ0FBQyxVQUFVLEdBQUcsVUFBVSxDQUFDO0lBQy9CLENBQUM7SUFFRCxRQUFRO1FBQ04sT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDO0lBQ25CLENBQUM7SUFFRCxTQUFTO1FBQ1AsT0FBTyxJQUFBLDBCQUFrQixFQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUN2QyxDQUFDO0lBRUQsV0FBVztRQUNULE9BQU8sSUFBQSwrQkFBdUIsRUFBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDNUMsQ0FBQztJQUVELHVGQUF1RjtJQUN2RixJQUFJLFFBQVE7UUFDVixPQUFPLElBQUEsMEJBQWtCLEVBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3ZDLENBQUM7SUFFRCxJQUFJLFlBQVk7UUFDZCxPQUFPLElBQUksd0JBQVksQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUNwRCxDQUFDO0lBRUQseURBQXlEO0lBQ3pELG1CQUFtQjtRQUNqQix3R0FBd0c7UUFDeEcsTUFBTSxPQUFPLEdBQUcsSUFBQSwwQkFBa0IsRUFBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDOUMsT0FBTyxPQUFPLEtBQUssS0FBSyxJQUFJLE9BQU8sS0FBSyxNQUFNLENBQUM7SUFDakQsQ0FBQztJQUVELGlCQUFpQjtRQUNmLE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVELGtCQUFrQjtJQUNsQixNQUFNLEtBQUssaUJBQWlCO1FBQzFCLE9BQU8sQ0FBQyxNQUFNLEVBQUUsV0FBVyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsWUFBWSxDQUFDLENBQUM7SUFDOUQsQ0FBQztJQUVEOzs7T0FHRztJQUNILGFBQWE7UUFDWCxPQUFPLEdBQUcsQ0FBQztJQUNiLENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsY0FBYyxDQUNaLE9BQWUsRUFDZixLQUEwRjtRQUUxRixJQUFJLE9BQU8sS0FBSyxLQUFLLFNBQVMsSUFBSSxLQUFLLEVBQUUsQ0FBQztZQUN4QyxNQUFNLElBQUksS0FBSyxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBQ2hDLENBQUM7UUFFRCxNQUFNLGNBQWMsR0FBSSxLQUFrRCxFQUFFLGNBQWMsSUFBSSxLQUFLLENBQUM7UUFDcEcsSUFBSSxjQUFjLEVBQUUsQ0FBQztZQUNuQixJQUFJLDBCQUEwQixDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDO2dCQUM3QyxPQUFPLElBQUksQ0FBQztZQUNkLENBQUM7WUFDRCxJQUFJLElBQUEsMEJBQWUsRUFBQyxPQUFPLENBQUMsRUFBRSxDQUFDO2dCQUM3QixPQUFPLElBQUksQ0FBQztZQUNkLENBQUM7UUFDSCxDQUFDO1FBRUQsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDLGNBQWMsQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUNuRCxDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSCxVQUFVLENBQUMsR0FBVztRQUNwQixJQUFJLENBQUM7WUFDSCxPQUFPLGlCQUFLLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDLFVBQVUsRUFBRSxDQUFDO1FBQzVDLENBQUM7UUFBQyxPQUFPLENBQUMsRUFBRSxDQUFDO1lBQ1gsT0FBTyxLQUFLLENBQUM7UUFDZixDQUFDO0lBQ0gsQ0FBQztJQUVEOzs7T0FHRztJQUNNLHFCQUFxQixDQUFDLE1BQTJCO1FBQ3hELElBQUksTUFBTSxDQUFDLFVBQVUsS0FBSyxTQUFTLEVBQUUsQ0FBQztZQUNwQyxNQUFNLENBQUMsVUFBVTtnQkFDZixNQUFNLENBQUMsVUFBVSxZQUFZLEtBQUs7b0JBQ2hDLENBQUMsQ0FBQyxNQUFNLEVBQUUsVUFBVSxFQUFFLEdBQUcsQ0FBQyxDQUFDLFNBQVMsRUFBRSxFQUFFO3dCQUNwQyxNQUFNLEVBQUUsT0FBTyxFQUFFLEdBQUcsSUFBSSxFQUFFLEdBQUcsU0FBUyxDQUFDO3dCQUN2QyxJQUFJLE9BQU8sS0FBSyxTQUFTLEVBQUUsQ0FBQzs0QkFDMUIsT0FBTyxTQUFTLENBQUMsQ0FBQyxzREFBc0Q7d0JBQzFFLENBQUM7d0JBQ0QsT0FBTyxFQUFFLEdBQUcsSUFBSSxFQUFFLEdBQUcsd0JBQVksQ0FBQyx5QkFBeUIsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDO29CQUN6RSxDQUFDLENBQUM7b0JBQ0osQ0FBQyxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUM7UUFDMUIsQ0FBQztRQUVELE9BQU8sTUFBTSxDQUFDO0lBQ2hCLENBQUM7SUFFRDs7O09BR0c7SUFDSCxLQUFLLENBQUMsb0JBQW9CLENBQUMsS0FBcUI7UUFDOUMsSUFBSSxLQUFLLEVBQUUsQ0FBQztZQUNWLElBQUksQ0FBQyxLQUFLLENBQUMsZ0JBQWdCLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDckMsQ0FBQztRQUNELE1BQU0sU0FBUyxHQUFHLE1BQU0sSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUM7UUFDbEYsT0FBUSxTQUFpQixDQUFDLE1BQU0sQ0FBQztJQUNuQyxDQUFDO0lBRUQsY0FBYyxDQUFDLFNBQXdEO1FBQ3JFLHdCQUFZLENBQUMsK0JBQStCLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDeEQsSUFBSSxTQUFTLENBQUMsT0FBTyxJQUFJLENBQUMsd0JBQVksQ0FBQyxpQkFBaUIsQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztZQUM1RSxLQUFLLENBQUMsY0FBYyxDQUFDLEVBQUUsT0FBTyxFQUFFLFNBQVMsQ0FBQyxPQUFPLEVBQUUsTUFBTSxFQUFFLFNBQVMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDO1FBQ2pGLENBQUM7SUFDSCxDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsS0FBSyxDQUFDLG1CQUFtQixDQUN2QixRQUFzQztRQUV0QyxNQUFNLEVBQUUsR0FBRyxJQUFJLENBQUMsNkJBQTZCLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDeEQsSUFBSSxnQkFBQyxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLEVBQUUsQ0FBQztZQUN4QyxRQUFRLENBQUMsV0FBVyxHQUFHLENBQUMsTUFBTSxJQUFJLENBQUMsb0JBQW9CLEVBQUUsQ0FBVyxDQUFDO1FBQ3ZFLENBQUM7UUFDRCxPQUFPLGdCQUFDLENBQUMsTUFBTSxDQUFDLEVBQUUsRUFBRSxRQUFRLEVBQUUsRUFBRSxLQUFLLEVBQUUsSUFBQSwwQkFBaUIsRUFBQyxFQUFFLENBQUMsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ2xGLENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsTUFBTSxDQUFDLGdCQUFnQixDQUFDLGNBQWlDO1FBQ3ZELE9BQU8sNkJBQWlCLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxjQUFjLENBQUMsS0FBSyxDQUFDO1lBQ3pELENBQUMsQ0FBRSw2QkFBaUIsQ0FBQyxTQUFTLENBQUMsVUFBVSxDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQW9CO1lBQ2xGLENBQUMsQ0FBQyxJQUFJLENBQUM7SUFDWCxDQUFDO0lBRUQsaUJBQWlCLENBQUMsS0FBc0I7UUFDdEMsTUFBTSxNQUFNLEdBQUcsT0FBTyxLQUFLLEtBQUssUUFBUSxDQUFDLENBQUMsQ0FBQyxJQUFBLGlDQUF3QixFQUFDLEtBQUssRUFBRSxDQUFDLEtBQUssRUFBRSxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUM7UUFDdEcsSUFBSSxDQUFDLElBQUEsd0JBQVksRUFBQyxNQUFNLENBQUMsRUFBRSxDQUFDO1lBQzFCLE1BQU0sSUFBSSx1QkFBdUIsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUM5QyxDQUFDO1FBQ0QsT0FBTyxJQUFBLG1CQUFVLEVBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUMzQyxDQUFDO0lBRUQsdUJBQXVCLENBQUMsS0FBc0I7UUFDNUMsT0FBTyxJQUFJLENBQUMsaUJBQWlCLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDdkMsQ0FBQztJQUVELDZCQUE2QixDQUFDLFFBSzdCO1FBQ0MsTUFBTSxNQUFNLEdBQUcsUUFBUSxDQUFDLFNBQVMsSUFBSSxRQUFRLENBQUMsS0FBSyxJQUFJLFFBQVEsQ0FBQyxRQUFRLENBQUM7UUFDekUsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQ1osTUFBTSxJQUFJLEtBQUssQ0FBQyw2Q0FBNkMsQ0FBQyxDQUFDO1FBQ2pFLENBQUM7UUFDRCxPQUFPLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUN4QyxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILEtBQUssQ0FBQyxnQkFBZ0IsQ0FDcEIsTUFBd0M7UUFFeEMsT0FBTyxJQUFJLENBQUMsZ0NBQWdDLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQztJQUMxRSxDQUFDO0lBRVMsZ0NBQWdDLENBQ3hDLE1BQXdDLEVBQ3hDLFlBQTBCO1FBRTFCLE9BQU8sSUFBQSw4QkFBZ0IsRUFBQyxJQUFJLEVBQUUsTUFBTSxFQUFFLFlBQVksQ0FBQyxDQUFDO0lBQ3RELENBQUM7SUFFRDs7T0FFRztJQUNPLEtBQUssQ0FBQyxtQkFBbUIsQ0FBQyxNQUFrQztRQUNwRSxPQUFPLE1BQU0sSUFBQSwrQkFBbUIsRUFBQyxJQUFJLENBQUMsS0FBSyxFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBQ3ZELENBQUM7SUFFRDs7T0FFRztJQUNJLGtCQUFrQixDQUFDLE1BQWtDO1FBQzFELE9BQU8sSUFBQSw4QkFBa0IsRUFBQyxNQUFNLENBQUMsQ0FBQztJQUNwQyxDQUFDO0lBRUQ7Ozs7Ozs7Ozs7Ozs7OztPQWVHO0lBQ0gsS0FBSyxDQUFDLGlCQUFpQixDQUNyQixNQUF5QztRQUV6QyxPQUFPLElBQUksQ0FBQyxpQ0FBaUMsQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDO0lBQzNFLENBQUM7SUFFUyxLQUFLLENBQUMsaUNBQWlDLENBQy9DLE1BQXlDLEVBQ3pDLFlBQTBCO1FBRTFCLElBQUksQ0FBQztZQUNILE9BQU8sTUFBTSxJQUFBLCtCQUFpQixFQUFDLElBQUksRUFBRSxJQUFJLENBQUMsS0FBSyxFQUFFLE1BQU0sRUFBRSxZQUFZLENBQUMsQ0FBQztRQUN6RSxDQUFDO1FBQUMsT0FBTyxLQUFLLEVBQUUsQ0FBQztZQUNmLElBQUksS0FBSyxZQUFZLDRDQUF3QixFQUFFLENBQUM7Z0JBQzlDLE1BQU0sYUFBYSxHQUFHLE1BQU0sZ0NBQXFCLENBQUMsbUJBQW1CLENBQ25FLElBQTRCLEVBQzVCLE1BQU0sQ0FBQyxVQUFVLENBQ2xCLENBQUM7Z0JBQ0YsTUFBTSx3Q0FBd0MsQ0FDNUMsS0FBSyxFQUNMLE1BQU0sQ0FBQyxLQUFLLEVBQ1osTUFBTSxDQUFDLFFBQVEsRUFDZixNQUFNLENBQUMsVUFBVSxDQUFDLEtBQUssRUFDdkIsYUFBYSxDQUNkLENBQUM7WUFDSixDQUFDO1lBQ0QsTUFBTSxLQUFLLENBQUM7UUFDZCxDQUFDO0lBQ0gsQ0FBQztJQUVEOzs7Ozs7Ozs7OztPQVdHO0lBQ0gsS0FBSyxDQUFDLGVBQWUsQ0FBQyxNQUE4QyxFQUFFLE1BQWdCO1FBQ3BGLE1BQU0sRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsR0FBRyxNQUFNLENBQUM7UUFFcEQsSUFBSSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztZQUNsQyxNQUFNLElBQUksOEJBQW1CLENBQUMsb0JBQW9CLE9BQU8sRUFBRSxDQUFDLENBQUM7UUFDL0QsQ0FBQztRQUVELElBQUksTUFBTSxJQUFJLElBQUEsK0JBQWtCLEVBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQztZQUN6QyxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7Z0JBQ2YsTUFBTSxJQUFJLEtBQUssQ0FBQyxrQ0FBa0MsQ0FBQyxDQUFDO1lBQ3RELENBQUM7WUFDRCxJQUFJLENBQUMsSUFBQSxtQkFBUSxFQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUM7Z0JBQ3pCLE1BQU0sSUFBSSxLQUFLLENBQUMsNEJBQTRCLENBQUMsQ0FBQztZQUNoRCxDQUFDO1lBQ0QsSUFBQSwwQ0FBNkIsRUFDM0IsSUFBSSxDQUFDLFlBQVksRUFDakIsTUFBTSxFQUNOLElBQUEsdUNBQTBCLEVBQUMsTUFBTSxFQUFFLElBQUEseUJBQWEsRUFBQyxTQUFTLENBQUMsRUFBRSxJQUFBLGdDQUFlLEVBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUM5RixDQUFDO1lBQ0YsT0FBTyxJQUFJLENBQUM7UUFDZCxDQUFDO1FBRUQsSUFBSSxDQUFDLGdCQUFDLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxJQUFJLGdCQUFDLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLGdCQUFDLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxJQUFJLGdCQUFDLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQztZQUNoRyxNQUFNLElBQUksZ0RBQXFDLENBQzdDLDhDQUE4QyxLQUFLLGVBQWUsS0FBSyxHQUFHLENBQzNFLENBQUM7UUFDSixDQUFDO1FBRUQsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO1lBQ2YsTUFBTSxJQUFJLEtBQUssQ0FBQyxrQ0FBa0MsQ0FBQyxDQUFDO1FBQ3RELENBQUM7UUFFRCxJQUFBLDRDQUE4QixFQUFDLElBQUksQ0FBQyxRQUFRLEVBQUU7WUFDNUMsT0FBTztZQUNQLFNBQVM7WUFDVCxNQUFNLEVBQUUsTUFBTSxDQUFDLE1BQU0sSUFBSSxRQUFRO1lBQ2pDLEtBQUs7WUFDTCxLQUFLO1NBQ04sQ0FBQyxDQUFDO1FBRUgsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRUQ7Ozs7Ozs7Ozs7T0FVRztJQUNILEtBQUssQ0FBQyxhQUFhLENBQUMsTUFBNEI7UUFDOUMsTUFBTSxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxHQUFHLE1BQU0sQ0FBQztRQUVuRCxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7WUFDZixNQUFNLElBQUksS0FBSyxDQUFDLGtDQUFrQyxDQUFDLENBQUM7UUFDdEQsQ0FBQztRQUVELE1BQU0sT0FBTyxHQUFHLElBQUEsNkJBQWUsRUFBQyxJQUFJLENBQUMsUUFBUSxFQUFFO1lBQzdDLHNFQUFzRTtZQUN0RSxTQUFTLEVBQUUsU0FBOEI7WUFDekMsS0FBSztZQUNMLEtBQUs7WUFDTCxNQUFNO1NBQ1AsQ0FBQyxDQUFDO1FBRUgsT0FBTyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLENBQUM7SUFDbkMsQ0FBQztJQUVEOzs7T0FHRztJQUNILG1CQUFtQixDQUFDLFdBQTJCO1FBQzdDLE9BQU8sNkJBQWlCLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxXQUFXLENBQUMsQ0FBQztJQUMxRSxDQUFDO0lBRUQsb0JBQW9CO0lBQ3BCLHNCQUFzQjtRQUNwQixPQUFPLHdCQUFhLENBQUMsT0FBTyxDQUFDO0lBQy9CLENBQUM7SUFFRDs7O09BR0c7SUFDSCxvQkFBb0IsQ0FBQyxLQUFhO1FBQ2hDLE9BQU8sQ0FDTCw2QkFBaUIsQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQztZQUNyQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsNkJBQWlCLENBQUMsU0FBUyxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQW1CLENBQUMsQ0FDMUYsQ0FBQztJQUNKLENBQUM7SUFFRCxnQkFBZ0I7UUFDZCxPQUFPLENBQUMscUJBQVUsQ0FBQyxJQUFJLEVBQUUscUJBQVUsQ0FBQyxNQUFNLEVBQUUscUJBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNoRSxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILEtBQUssQ0FBQyxlQUFlLENBQUMsSUFBaUMsRUFBRSxRQUFnQjtRQUN2RSxNQUFNLE1BQU0sR0FBRyxJQUFBLDBCQUFpQixFQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3ZDLE1BQU0sUUFBUSxHQUFHLE1BQU0sSUFBSSxDQUFDLEtBQUs7YUFDOUIsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsVUFBVSxHQUFHLFFBQVEsR0FBRyxjQUFjLENBQUMsQ0FBQzthQUN0RCxJQUFJLENBQUMsRUFBRSxJQUFJLEVBQUUsTUFBTSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO2FBQ3RDLE1BQU0sRUFBRSxDQUFDO1FBQ1osT0FBTyxJQUFBLG1CQUFVLEVBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDbEQsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0gsS0FBSyxDQUFDLFFBQVEsQ0FBQyxPQUFlLEVBQUUsUUFBZ0I7UUFDOUMsTUFBTSxJQUFJLEdBQUcsTUFBTSxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxPQUFPLENBQUMsRUFBRSxRQUFRLENBQUMsQ0FBQztRQUN6RixPQUFPLEVBQUUsSUFBSSxFQUFFLElBQUEsMEJBQWlCLEVBQUMsSUFBSSxDQUFDLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7SUFDM0QsQ0FBQztJQUVEOzs7T0FHRztJQUNILEtBQUssQ0FBQyxlQUFlLENBQUMsT0FBZ0M7UUFDcEQsSUFBQSxnQkFBTSxFQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsRUFBRSw4QkFBOEIsQ0FBQyxDQUFDO1FBQzNELElBQUEsZ0JBQU0sRUFBQyxPQUFPLENBQUMsVUFBVSxDQUFDLEVBQUUsK0JBQStCLENBQUMsQ0FBQztRQUM3RCxNQUFNLEdBQUcsR0FBRyxPQUFPLENBQUMsU0FBUyxDQUFXLENBQUM7UUFDekMsTUFBTSxRQUFRLEdBQUcsT0FBTyxDQUFDLFVBQVUsQ0FBVyxDQUFDO1FBQy9DLE1BQU0sSUFBSSxHQUFHLE1BQU0sSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsdUJBQXVCLENBQUMsR0FBRyxDQUFDLEVBQUUsUUFBUSxDQUFDLENBQUM7UUFDckYsT0FBTyxnQkFBQyxDQUFDLE1BQU0sQ0FBQyxPQUFPLEVBQUUsRUFBRSxLQUFLLEVBQUUsSUFBQSwwQkFBaUIsRUFBQyxJQUFJLENBQUMsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQy9FLENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsS0FBSyxDQUFDLGVBQWUsQ0FDbkIsTUFBdUM7UUFFdkMsT0FBTyxJQUFBLGlDQUFlLEVBQVUsSUFBSSxFQUFFLElBQUksQ0FBQyxLQUFLLEVBQUUsTUFBTSxDQUFDLENBQUM7SUFDNUQsQ0FBQztJQUVEOzs7Ozs7T0FNRztJQUNILEtBQUssQ0FBQyw2QkFBNkIsQ0FDakMscUJBQXlELEVBQ3pELHFCQUFtRjtRQUVuRixNQUFNLEtBQUssR0FBRyxxQkFBcUIsQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDO1FBQ3JELElBQUEsZ0JBQU0sRUFBQyxLQUFLLEVBQUUseUJBQXlCLENBQUMsQ0FBQztRQUV6QyxNQUFNLEVBQUUsR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsS0FBSyxDQUFDLENBQUM7UUFFekMsTUFBTSx5QkFBeUIsR0FBRyxvQkFBb0IsQ0FBQyxFQUFFLEVBQUUscUJBQXFCLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUVsRyxJQUFJLENBQUMseUJBQXlCLEVBQUUsQ0FBQztZQUMvQixPQUFPLE1BQU0scUJBQXFCLENBQUMsRUFBRSxHQUFHLHFCQUFxQixFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO1FBQy9FLENBQUM7UUFFRCxNQUFNLFFBQVEsR0FBRyxDQUFDLENBQW9CLEVBQVUsRUFBRTtZQUNoRCxJQUFJLE9BQU8sSUFBSSxDQUFDLEVBQUUsQ0FBQztnQkFDakIsT0FBTyxDQUFDLENBQUMsS0FBSyxDQUFDO1lBQ2pCLENBQUM7WUFDRCxNQUFNLElBQUksS0FBSyxDQUFDLDJDQUEyQyxDQUFDLENBQUM7UUFDL0QsQ0FBQyxDQUFDO1FBRUYsTUFBTSxhQUFhLEdBQUcsTUFBTSxxQkFBcUIsQ0FBQztZQUNoRCxHQUFHLHFCQUFxQjtZQUN4QixXQUFXLEVBQUUsYUFBYTtZQUMxQixJQUFJLEVBQUUsSUFBSTtTQUNYLENBQUMsQ0FBQztRQUVILE1BQU0sRUFBRSxJQUFJLEVBQUUsR0FBRyxxQkFBcUIsQ0FBQztRQUN2QyxJQUFBLGdCQUFNLEVBQUMsSUFBSSxLQUFLLFNBQVMsSUFBSSxJQUFBLG1CQUFRLEVBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztRQUU3QyxNQUFNLGVBQWUsR0FBRyxNQUFNLElBQUksQ0FBQyxlQUFlLENBQVU7WUFDMUQsR0FBRyxxQkFBcUI7WUFDeEIsSUFBSTtZQUNKLFVBQVUsRUFBRSxFQUFFLEdBQUcscUJBQXFCLENBQUMsVUFBVSxFQUFFLEtBQUssRUFBRSxRQUFRLENBQUMsYUFBYSxDQUFDLEVBQUU7WUFDbkYsV0FBVyxFQUFFLGVBQWU7U0FDN0IsQ0FBQyxDQUFDO1FBRUgsT0FBTyxNQUFNLHFCQUFxQixDQUFDO1lBQ2pDLEdBQUcscUJBQXFCO1lBQ3hCLFVBQVUsRUFBRSxFQUFFLEdBQUcscUJBQXFCLENBQUMsVUFBVSxFQUFFLEtBQUssRUFBRSxRQUFRLENBQUMsZUFBZSxDQUFDLEVBQUU7WUFDckYsV0FBVyxFQUFFLGlCQUFpQjtZQUM5QixJQUFJLEVBQUUsSUFBSTtTQUNYLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRDs7O09BR0c7SUFDSCxxQkFBcUIsQ0FBa0MsT0FBeUI7UUFDOUUsT0FBTyxJQUFBLDRDQUF5QixFQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDdkQsQ0FBQztJQUVEOzs7O09BSUc7SUFDTSxLQUFLLENBQUMsa0JBQWtCLENBQy9CLE1BQTBDLEVBQzFDLE1BQWdCO1FBRWhCLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDakIsaUZBQWlGO1lBQ2pGLElBQUksTUFBTSxFQUFFLENBQUM7Z0JBQ1gsTUFBTSxTQUFTLEdBQUcsTUFBTSxJQUFBLDBCQUFjLEVBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFDO2dCQUNyRCxNQUFNLENBQUMsSUFBSSxHQUFHLElBQUEseUJBQWEsRUFBQyxTQUFTLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxRQUFRLEVBQUUsQ0FBbUIsQ0FBQztZQUMvRixDQUFDO1FBQ0gsQ0FBQztRQUNELElBQUksTUFBTSxJQUFJLElBQUEsK0JBQWtCLEVBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQztZQUN6Qyx1RUFBdUU7WUFDdkUsMEVBQTBFO1lBQzFFLE9BQU8sSUFBQSx1QkFBUyxFQUFDLElBQUEsNkJBQW9CLEVBQUMsTUFBTSxDQUFDLEVBQUUsRUFBRSxHQUFHLE1BQU0sRUFBRSxNQUFNLEVBQUUsRUFBRSxJQUFJLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUMxRyxDQUFDO1FBQ0QsT0FBTyxJQUFBLHVCQUFTLEVBQ2QsSUFBSSxDQUFDLDZCQUE2QixDQUFDLE1BQU0sQ0FBQyxFQUMxQyxFQUFFLEdBQUcsTUFBTSxFQUFFLE1BQU0sRUFBRSxFQUNyQixJQUFJLENBQUMsUUFBUSxFQUNiLElBQUksQ0FBQyxZQUFZLENBQ2xCLENBQUM7SUFDSixDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILEtBQUssQ0FBQyxPQUFPLENBQUMsTUFBcUI7UUFDakMsT0FBTyxJQUFBLDRCQUFpQixFQUFDLElBQUksRUFBRSxJQUFJLENBQUMsS0FBSyxFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBQ3JELENBQUM7SUFFRCxLQUFLLENBQUMsU0FBUyxDQUFDLE1BQXVCO1FBQ3JDLE9BQU8sSUFBQSw4QkFBbUIsRUFBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLEtBQUssRUFBRSxNQUFNLENBQUMsQ0FBQztJQUN2RCxDQUFDO0lBRUQsS0FBSyxDQUFDLE9BQU8sQ0FBQyxNQUFxQjtRQUNqQyxPQUFPLElBQUEsa0JBQU8sRUFBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLEtBQUssRUFBRSxNQUFNLENBQUMsQ0FBQztJQUMzQyxDQUFDO0lBRUQ7Ozs7Ozs7Ozs7OztPQVlHO0lBQ0gsS0FBSyxDQUFDLHFCQUFxQixDQUN6QixNQUFvQztRQUVwQyxNQUFNLEVBQUUsSUFBSSxFQUFFLGVBQWUsRUFBRSxNQUFNLEVBQUUsZ0JBQWdCLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxHQUFHLE1BQU0sQ0FBQztRQUVqRixzRUFBc0U7UUFDdEUsTUFBTSxZQUFZLEdBQUcsTUFBTSxDQUFDLElBQUksSUFBSSxNQUFNLENBQUMsWUFBWSxDQUFDO1FBQ3hELElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztZQUNsQixNQUFNLElBQUksS0FBSyxDQUFDLHNDQUFzQyxDQUFDLENBQUM7UUFDMUQsQ0FBQztRQUNELGlHQUFpRztRQUNqRyxNQUFNLE1BQU0sR0FBRyxNQUFNLENBQUMsTUFBTSxLQUFLLEtBQUssQ0FBQztRQUV2QyxNQUFNLGdCQUFnQixHQUFHLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztRQUMxQyxNQUFNLGtCQUFrQixHQUFHLFlBQVksQ0FBQyxTQUFTLEVBQUUsQ0FBQztRQUNwRCxNQUFNLHNCQUFzQixHQUFHLHNDQUE2QixDQUFDLGdCQUFnQixDQUFDLENBQUM7UUFFL0UsSUFBSSxnQkFBQyxDQUFDLFdBQVcsQ0FBQyxzQkFBc0IsQ0FBQyxJQUFJLENBQUMsc0JBQXNCLENBQUMsUUFBUSxDQUFDLGtCQUFrQixDQUFDLEVBQUUsQ0FBQztZQUNsRyxNQUFNLElBQUksS0FBSyxDQUFDLGVBQWUsZ0JBQWdCLGtCQUFrQixrQkFBa0IsNEJBQTRCLENBQUMsQ0FBQztRQUNuSCxDQUFDO1FBRUQsT0FBTyxNQUFNLElBQUEsNEJBQWlCLEVBQVUsSUFBSSxDQUFDLEtBQUssRUFBRTtZQUNsRCxVQUFVLEVBQUUsSUFBSTtZQUNoQixZQUFZO1lBQ1osUUFBUSxFQUFFLE1BQU07WUFDaEIsSUFBSTtZQUNKLGVBQWU7WUFDZixnQkFBZ0IsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxTQUFTO1lBQ3ZELElBQUksRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsU0FBUztZQUMvQixNQUFNO1NBQ1AsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0gsZUFBZSxDQUFDLElBQVk7UUFDMUIsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO1lBQ1YsMEVBQTBFO1lBQzFFLDBFQUEwRTtZQUMxRSxrRUFBa0U7WUFDbEUsSUFBSSxHQUFHLElBQUEsb0JBQVcsRUFBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFDOUIsQ0FBQztRQUNELE1BQU0sV0FBVyxHQUFHLGlCQUFLLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3pDLE9BQU87WUFDTCxHQUFHLEVBQUUsV0FBVyxDQUFDLFFBQVEsRUFBRSxDQUFDLFFBQVEsRUFBRTtZQUN0QyxHQUFHLEVBQUUsV0FBVyxDQUFDLFFBQVEsRUFBRTtTQUM1QixDQUFDO0lBQ0osQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0gsa0JBQWtCLENBQUMsTUFBYyxFQUFFLGVBQTBCO1FBQzNELElBQUksZUFBZSxLQUFLLFFBQVEsRUFBRSxDQUFDO1lBQ2pDLE9BQU8sV0FBVyxDQUFDO1FBQ3JCLENBQUM7UUFDRCxPQUFPLGVBQWUsSUFBSSxXQUFXLENBQUM7SUFDeEMsQ0FBQztJQUVELEtBQUssQ0FBQyxzQkFBc0IsQ0FBQyxXQUE0RDtRQUt2RixNQUFNLGVBQWUsR0FBRyxXQUFXLENBQUMsUUFBZ0MsQ0FBQztRQUNyRSxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsa0JBQWtCLENBQUMsV0FBVyxDQUFDLE1BQU0sRUFBRSxlQUFlLENBQUMsQ0FBQztRQUM5RSxJQUFJLGlCQUFpQixHQUFHLFdBQVcsQ0FBQyxpQkFBa0UsQ0FBQztRQUV2RyxpSUFBaUk7UUFDakksSUFDRSxXQUFXLENBQUMsV0FBVyxLQUFLLFNBQVMsSUFBSSw0REFBNEQ7WUFDckcsV0FBVyxDQUFDLGlCQUFpQixLQUFLLFNBQVM7WUFDM0MsV0FBVyxDQUFDLGFBQWEsS0FBSyxTQUFTO1lBQ3ZDLFdBQVcsQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLEtBQUssS0FBSyxFQUNuQyxDQUFDO1lBQ0QsaUJBQWlCLEdBQUcsQ0FBQyxZQUFZLEVBQUUsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFDM0UsQ0FBQztRQUVELHVGQUF1RjtRQUN2RixxRUFBcUU7UUFDckUsTUFBTSxxQkFBcUIsR0FBcUIsQ0FBQyxNQUFNLEVBQUUsV0FBVyxFQUFFLE9BQU8sQ0FBQyxDQUFDO1FBQy9FLElBQUksdUJBQXFELENBQUM7UUFFMUQsSUFBSSxlQUFlLEtBQUssUUFBUSxFQUFFLENBQUM7WUFDakMsdUJBQXVCLEdBQUcscUJBQXFCLENBQUM7WUFDaEQsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLGlCQUFpQixDQUFDLEVBQUUsQ0FBQztnQkFDckMsaUJBQWlCLEdBQUcsaUJBQWlCLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUF1QixFQUFFLENBQ3RFLHFCQUFxQixDQUFDLFFBQVEsQ0FBQyxDQUFtQixDQUFDLENBQ3BELENBQUM7WUFDSixDQUFDO2lCQUFNLElBQUksaUJBQWlCLEtBQUssU0FBUyxJQUFJLENBQUMscUJBQXFCLENBQUMsUUFBUSxDQUFDLGlCQUFpQixDQUFDLEVBQUUsQ0FBQztnQkFDakcsaUJBQWlCLEdBQUcscUJBQXFCLENBQUM7WUFDNUMsQ0FBQztRQUNILENBQUM7UUFFRCxPQUFPO1lBQ0wsUUFBUTtZQUNSLGlCQUFpQjtZQUNqQix1QkFBdUI7U0FDeEIsQ0FBQztJQUNKLENBQUM7SUFFRCxjQUFjLENBQUMsTUFBNkI7UUFDMUMsT0FBTztJQUNULENBQUM7SUFFRCxLQUFLLENBQUMsa0JBQWtCLENBQUMsTUFBaUM7UUFDeEQsSUFBSSxNQUFNLENBQUMsVUFBVSxJQUFJLElBQUEseUJBQWdCLEVBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxJQUFJLElBQUEseUNBQXNCLEVBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUM7WUFDMUcsT0FBTyxNQUFNLENBQUM7UUFDaEIsQ0FBQztRQUVELE1BQU0sa0JBQWtCLEdBQUksTUFBa0MsQ0FBQyxRQUFRLEtBQUssUUFBUSxDQUFDO1FBQ3JGLE9BQU8sRUFBRSxHQUFHLE1BQU0sRUFBRSxrQkFBa0IsRUFBRSxDQUFDO0lBQzNDLENBQUM7SUFFRCxLQUFLLENBQUMsd0JBQXdCLENBQzVCLFlBQTZDLEVBQzdDLFNBQTJCO1FBRTNCLE9BQU8sWUFBWSxDQUFDO0lBQ3RCLENBQUM7SUFFRCxzQkFBc0I7UUFDcEIsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0lBRUQsd0JBQXdCO1FBQ3RCLE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQztJQUVELHNCQUFzQixDQUNwQixVQUFhLEVBQ2IsU0FBMkI7UUFFM0IsMEdBQTBHO1FBQzFHLElBQUksT0FBTyxVQUFVLENBQUMsS0FBSyxLQUFLLFFBQVEsSUFBSSxJQUFBLHdCQUFZLEVBQUMsSUFBQSxpQ0FBd0IsRUFBQyxVQUFVLENBQUMsS0FBSyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7WUFDOUcsT0FBTyxVQUF5QyxDQUFDO1FBQ25ELENBQUM7UUFDRCxPQUFPLEtBQUssQ0FBQyxzQkFBc0IsQ0FBQyxVQUFVLEVBQUUsU0FBUyxDQUFDLENBQUM7SUFDN0QsQ0FBQztJQUVELG1CQUFtQixDQUFDLFFBQWlCO1FBQ25DLE9BQU8sSUFBQSxrQkFBTyxFQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsRUFBRSxRQUFRLENBQUMsQ0FBQztJQUM1QyxDQUFDO0lBRUQsa0JBQWtCO0lBQ2xCLGlCQUFpQixDQUFDLEVBQ2hCLFlBQVksRUFDWixTQUFTLEVBQ1QsR0FBRyxHQUtKO1FBQ0MsSUFBSSxZQUFZLEtBQUssS0FBSyxFQUFFLENBQUM7WUFDM0IsTUFBTSxJQUFJLEtBQUssQ0FBQyw2Q0FBNkMsQ0FBQyxDQUFDO1FBQ2pFLENBQUM7UUFDRCxJQUFJLENBQUMsSUFBQSxxQkFBVSxFQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBQSxzQkFBVyxFQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDMUMsTUFBTSxJQUFJLEtBQUssQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDO1FBQ3pDLENBQUM7UUFDRCxJQUFJLFNBQVMsRUFBRSxDQUFDO1lBQ2QsTUFBTSxTQUFTLEdBQUcsaUJBQUssQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLENBQUMsUUFBUSxFQUFFLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDOUQsSUFBSSxTQUFTLEtBQUssU0FBUyxFQUFFLENBQUM7Z0JBQzVCLE1BQU0sSUFBSSxLQUFLLENBQUMsdUNBQXVDLENBQUMsQ0FBQztZQUMzRCxDQUFDO1FBQ0gsQ0FBQztJQUNILENBQUM7Q0FDRjtBQXZ0QkQsNENBdXRCQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBhc3NlcnQgZnJvbSAnYXNzZXJ0JztcbmltcG9ydCB7IHJhbmRvbUJ5dGVzIH0gZnJvbSAnY3J5cHRvJztcblxuaW1wb3J0IF8gZnJvbSAnbG9kYXNoJztcbmltcG9ydCB7IEJJUDMyLCBmaXhlZFNjcmlwdFdhbGxldCwgaGFzUHNidE1hZ2ljIH0gZnJvbSAnQGJpdGdvL3dhc20tdXR4byc7XG5pbXBvcnQge1xuICBBZGRyZXNzQ29pblNwZWNpZmljLFxuICBCYXNlQ29pbixcbiAgQml0R29CYXNlLFxuICBDb2xkVHJhbnNhY3Rpb25QcmVidWlsZCxcbiAgQ3JlYXRlQWRkcmVzc0Zvcm1hdCxcbiAgRXh0cmFQcmVidWlsZFBhcmFtc09wdGlvbnMsXG4gIEhhbGZTaWduZWRVdHhvVHJhbnNhY3Rpb24sXG4gIElCYXNlQ29pbixcbiAgaXNCb2x0MTFJbnZvaWNlLFxuICBJbnZhbGlkQWRkcmVzc0Rlcml2YXRpb25Qcm9wZXJ0eUVycm9yLFxuICBJbnZhbGlkQWRkcmVzc0Vycm9yLFxuICBJUmVxdWVzdFRyYWNlcixcbiAgaXNUcmlwbGUsXG4gIElXYWxsZXQsXG4gIEtleWNoYWluLFxuICBLZXljaGFpbnNUcmlwbGV0LFxuICBLZXlJbmRpY2VzLFxuICBNaXNtYXRjaGVkUmVjaXBpZW50LFxuICBNdWx0aXNpZ1R5cGUsXG4gIG11bHRpc2lnVHlwZXMsXG4gIFBhcnNlVHJhbnNhY3Rpb25PcHRpb25zIGFzIEJhc2VQYXJzZVRyYW5zYWN0aW9uT3B0aW9ucyxcbiAgUHJlY3JlYXRlQml0R29PcHRpb25zLFxuICBQcmVzaWduVHJhbnNhY3Rpb25PcHRpb25zLFxuICBCcmlkZ2luZ1BhcmFtcyxcbiAgUmVxdWVzdFRyYWNlcixcbiAgU2lnbmVkVHJhbnNhY3Rpb24sXG4gIFR4SW50ZW50TWlzbWF0Y2hFcnJvcixcbiAgU2lnblRyYW5zYWN0aW9uT3B0aW9ucyBhcyBCYXNlU2lnblRyYW5zYWN0aW9uT3B0aW9ucyxcbiAgU3VwcGxlbWVudEdlbmVyYXRlV2FsbGV0T3B0aW9ucyxcbiAgVHJhbnNhY3Rpb25QYXJhbXMgYXMgQmFzZVRyYW5zYWN0aW9uUGFyYW1zLFxuICBUcmFuc2FjdGlvblByZWJ1aWxkIGFzIEJhc2VUcmFuc2FjdGlvblByZWJ1aWxkLFxuICBUcmlwbGUsXG4gIFR4SW50ZW50TWlzbWF0Y2hSZWNpcGllbnRFcnJvcixcbiAgVmVyaWZpY2F0aW9uT3B0aW9ucyxcbiAgVmVyaWZ5QWRkcmVzc09wdGlvbnMgYXMgQmFzZVZlcmlmeUFkZHJlc3NPcHRpb25zLFxuICBWZXJpZnlUcmFuc2FjdGlvbk9wdGlvbnMgYXMgQmFzZVZlcmlmeVRyYW5zYWN0aW9uT3B0aW9ucyxcbiAgV2FsbGV0LFxuICBpc1ZhbGlkUHJ2LFxuICBpc1ZhbGlkWHBydixcbiAgRGVyaXZlQWRkcmVzc09wdGlvbnMsXG4gIERlcml2ZUFkZHJlc3NSZXN1bHQsXG4gIFVuaWZpZWRSZWNpcGllbnRQcmVmZXJlbmNlLFxufSBmcm9tICdAYml0Z28tYmV0YS9zZGstY29yZSc7XG5cbmltcG9ydCB7XG4gIGJhY2t1cEtleVJlY292ZXJ5LFxuICBDcm9zc0NoYWluUmVjb3ZlcnlTaWduZWQsXG4gIENyb3NzQ2hhaW5SZWNvdmVyeVVuc2lnbmVkLFxuICBmb3JDb2luLFxuICByZWNvdmVyQ3Jvc3NDaGFpbixcbiAgUmVjb3ZlclBhcmFtcyxcbiAgUmVjb3ZlcnlQcm92aWRlcixcbiAgdjFCYWNrdXBLZXlSZWNvdmVyeSxcbiAgVjFSZWNvdmVyUGFyYW1zLFxuICB2MVN3ZWVwLFxuICBWMVN3ZWVwUGFyYW1zLFxufSBmcm9tICcuL3JlY292ZXJ5JztcbmltcG9ydCB7IGdldFJlcGxheVByb3RlY3Rpb25QdWJrZXlzLCBpc1JlcGxheVByb3RlY3Rpb25VbnNwZW50IH0gZnJvbSAnLi90cmFuc2FjdGlvbi9maXhlZFNjcmlwdC9yZXBsYXlQcm90ZWN0aW9uJztcbmltcG9ydCB7IHN1cHBvcnRlZENyb3NzQ2hhaW5SZWNvdmVyaWVzIH0gZnJvbSAnLi9jb25maWcnO1xuaW1wb3J0IHsgZXhwbGFpblR4LCBwYXJzZVRyYW5zYWN0aW9uLCB2ZXJpZnlUcmFuc2FjdGlvbiB9IGZyb20gJy4vdHJhbnNhY3Rpb24nO1xuaW1wb3J0IHsgQWRkcmVzc0NvZGVjIH0gZnJvbSAnLi90cmFuc2FjdGlvbi9yZWNpcGllbnQnO1xuaW1wb3J0IHR5cGUgeyBUcmFuc2FjdGlvbkV4cGxhbmF0aW9uIH0gZnJvbSAnLi90cmFuc2FjdGlvbi9maXhlZFNjcmlwdC9leHBsYWluVHJhbnNhY3Rpb24nO1xuaW1wb3J0IHsgTXVzaWcyUGFydGljaXBhbnQgfSBmcm9tICcuL3RyYW5zYWN0aW9uL2ZpeGVkU2NyaXB0L211c2lnMic7XG5pbXBvcnQge1xuICBBZ2dyZWdhdGVWYWxpZGF0aW9uRXJyb3IsXG4gIEVycm9yTWlzc2luZ091dHB1dHMsXG4gIEVycm9ySW1wbGljaXRFeHRlcm5hbE91dHB1dHMsXG59IGZyb20gJy4vdHJhbnNhY3Rpb24vZGVzY3JpcHRvci92ZXJpZnlUcmFuc2FjdGlvbic7XG5pbXBvcnQgeyBhc3NlcnREZXNjcmlwdG9yV2FsbGV0QWRkcmVzcywgZ2V0RGVzY3JpcHRvck1hcEZyb21XYWxsZXQsIGlzRGVzY3JpcHRvcldhbGxldCB9IGZyb20gJy4vZGVzY3JpcHRvcic7XG5pbXBvcnQge1xuICBnZXRGdWxsTmFtZUZyb21Db2luTmFtZSxcbiAgZ2V0TWFpbm5ldENvaW5OYW1lLFxuICB0b1dhc21VdHhvQ29pbk5hbWUsXG4gIGlzTWFpbm5ldENvaW4sXG4gIFdhc21VdHhvQ29pbk5hbWUsXG4gIFV0eG9Db2luTmFtZSxcbiAgVXR4b0NvaW5OYW1lTWFpbm5ldCxcbn0gZnJvbSAnLi9uYW1lcyc7XG5pbXBvcnQgeyBhc3NlcnRGaXhlZFNjcmlwdFdhbGxldEFkZHJlc3MsIGdlbmVyYXRlQWRkcmVzcyB9IGZyb20gJy4vYWRkcmVzcy9maXhlZFNjcmlwdCc7XG5pbXBvcnQgeyBQYXJzZWRUcmFuc2FjdGlvbiB9IGZyb20gJy4vdHJhbnNhY3Rpb24vdHlwZXMnO1xuaW1wb3J0IHsgZGVjb2RlRGVzY3JpcHRvclBzYnQsIGRlY29kZVBzYnQsIGVuY29kZVRyYW5zYWN0aW9uLCBzdHJpbmdUb0J1ZmZlclRyeUZvcm1hdHMgfSBmcm9tICcuL3RyYW5zYWN0aW9uL2RlY29kZSc7XG5pbXBvcnQgeyBmZXRjaEtleWNoYWlucywgdG9CaXAzMlRyaXBsZSwgVXR4b0tleWNoYWluIH0gZnJvbSAnLi9rZXljaGFpbnMnO1xuaW1wb3J0IHsgdmVyaWZ5S2V5U2lnbmF0dXJlLCB2ZXJpZnlVc2VyUHVibGljS2V5IH0gZnJvbSAnLi92ZXJpZnlLZXknO1xuaW1wb3J0IHsgZ2V0UG9saWN5Rm9yRW52IH0gZnJvbSAnLi9kZXNjcmlwdG9yL3ZhbGlkYXRlUG9saWN5JztcbmltcG9ydCB7IHNpZ25UcmFuc2FjdGlvbiB9IGZyb20gJy4vdHJhbnNhY3Rpb24vc2lnblRyYW5zYWN0aW9uJztcbmltcG9ydCB7IGlzVXR4b1dhbGxldERhdGEsIFV0eG9XYWxsZXQgfSBmcm9tICcuL3dhbGxldCc7XG5pbXBvcnQgeyBpc0Rlc2NyaXB0b3JXYWxsZXREYXRhIH0gZnJvbSAnLi9kZXNjcmlwdG9yL2Rlc2NyaXB0b3JXYWxsZXQnO1xuaW1wb3J0IHR5cGUgeyBVbnNwZW50IH0gZnJvbSAnLi91bnNwZW50JztcblxudHlwZSBTY3JpcHRUeXBlMk9mMyA9ICdwMnNoJyB8ICdwMnNoUDJ3c2gnIHwgJ3Ayd3NoJyB8ICdwMnRyJyB8ICdwMnRyTXVzaWcyJztcblxuZXhwb3J0IHR5cGUgVHhGb3JtYXQgPVxuICAvLyBUaGlzIGlzIGEgbGVnYWN5IHRyYW5zYWN0aW9uIGZvcm1hdCBiYXNlZCBhcm91bmQgdGhlIGJpdGNvaW5qcy1saWIgc2VyaWFsaXphdGlvbiBvZiB1bnNpZ25lZCB0cmFuc2FjdGlvbnNcbiAgLy8gZG9lcyBub3QgaW5jbHVkZSBwcmV2T3V0IGRhdGEgYW5kIGlzIGEgYml0IHBhaW5mdWwgdG8gd29yayB3aXRoXG4gIC8vIGdvaW5nIHRvIGJlIGRlcHJlY2F0ZWQgaW4gZmF2b3Igb2YgcHNidFxuICAvLyBAZGVwcmVjYXRlZFxuICB8ICdsZWdhY3knXG4gIC8vIFRoaXMgaXMgdGhlIHN0YW5kYXJkIHBzYnQgZm9ybWF0LCBpbmNsdWRpbmcgdGhlIGZ1bGwgcHJldlR4IGRhdGEgZm9yIGxlZ2FjeSB0cmFuc2FjdGlvbnMuXG4gIC8vIFRoaXMgd2lsbCByZW1haW4gc3VwcG9ydGVkIGJ1dCBpcyBub3QgdGhlIGRlZmF1bHQsIHNpbmNlIHRoZSBkYXRhIHNpemVzIGNhbiBiZWNvbWUgcHJvaGliaXRpdmVseSBsYXJnZS5cbiAgfCAncHNidCdcbiAgLy8gVGhpcyBpcyBhIG5vbnN0YW5kYXJkIHBzYnQgdmVyc2lvbiB3aGVyZSBsZWdhY3kgaW5wdXRzIGFyZSBzZXJpYWxpemVkIGFzIGlmIHRoZXkgd2VyZSBzZWd3aXQgaW5wdXRzLlxuICAvLyBXaGlsZSB0aGlzIHByZXZlbnRzIHVzIHRvIGZ1bGx5IHZlcmlmeSB0aGUgdHJhbnNhY3Rpb24gZmVlLCB3ZSBoYXZlIG90aGVyIGNoZWNrcyBpbiBwbGFjZSB0byBlbnN1cmUgdGhlIGZlZSBpcyB3aXRoaW4gYm91bmRzLlxuICB8ICdwc2J0LWxpdGUnO1xuXG5leHBvcnQgY2xhc3MgRXJyb3JEZXByZWNhdGVkVHhGb3JtYXQgZXh0ZW5kcyBFcnJvciB7XG4gIGNvbnN0cnVjdG9yKHR4Rm9ybWF0OiBUeEZvcm1hdCkge1xuICAgIHN1cGVyKGBTREsgc3VwcG9ydCBmb3IgdHhGb3JtYXQ9JHt0eEZvcm1hdH0gaXMgZGVwcmVjYXRlZCBvbiB0aGlzIGVudmlyb25tZW50LiBQbGVhc2UgdXNlIHBzYnQgaW5zdGVhZC5gKTtcbiAgfVxufVxuXG50eXBlIFV0eG9DdXN0b21TaWduaW5nRnVuY3Rpb248VE51bWJlciBleHRlbmRzIG51bWJlciB8IGJpZ2ludD4gPSB7XG4gIChwYXJhbXM6IHtcbiAgICBjb2luOiBJQmFzZUNvaW47XG4gICAgdHhQcmVidWlsZDogVHJhbnNhY3Rpb25QcmVidWlsZDxUTnVtYmVyPjtcbiAgICBwdWJzPzogc3RyaW5nW107XG4gICAgLyoqXG4gICAgICogc2lnbmluZ1N0ZXAgZmxhZyBiZWNvbWVzIGFwcGxpY2FibGUgd2hlbiBib3RoIG9mIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OlxuICAgICAqIDEpIFdoZW4gdGhlIGV4dGVybmFsIGV4cHJlc3Mgc2lnbmVyIGlzIGFjdGl2YXRlZFxuICAgICAqIDIpIFdoZW4gdGhlIFBTQlQgaW5jbHVkZXMgYXQgbGVhc3Qgb25lIHRhcHJvb3RLZXlQYXRoU3BlbmQgaW5wdXQuXG4gICAgICpcbiAgICAgKiBUaGUgc2lnbmluZyBwcm9jZXNzIG9mIGEgdGFwcm9vdEtleVBhdGhTcGVuZCBpbnB1dCBpcyBhIDQtc3RlcCBzZXF1ZW5jZTpcbiAgICAgKiBpKSB1c2VyIG5vbmNlIGdlbmVyYXRpb24gLSBzaWduZXJOb25jZSAtIHRoaXMgaXMgdGhlIGZpcnN0IGNhbGwgdG8gZXh0ZXJuYWwgZXhwcmVzcyBzaWduZXIgc2lnblRyYW5zYWN0aW9uXG4gICAgICogaWkpIGJpdGdvIG5vbmNlIGdlbmVyYXRpb24gLSBjb3NpZ25lck5vbmNlIC0gdGhpcyBpcyB0aGUgZmlyc3QgYW5kIG9ubHkgY2FsbCB0byBsb2NhbCBzaWduVHJhbnNhY3Rpb25cbiAgICAgKiBpaWkpIHVzZXIgc2lnbmF0dXJlIC0gc2lnbmVyU2lnbmF0dXJlIC0gdGhpcyBpcyB0aGUgc2Vjb25kIGNhbGwgdG8gZXh0ZXJuYWwgZXhwcmVzcyBzaWduZXIgc2lnblRyYW5zYWN0aW9uXG4gICAgICogaXYpIGJpdGdvIHNpZ25hdHVyZSAtIG5vdCBpbiBzaWduVHJhbnNhY3Rpb24gbWV0aG9k4oCZcyBzY29wZVxuICAgICAqXG4gICAgICogSW4gdGhlIGFic2VuY2Ugb2YgdGhpcyBmbGFnLCB0aGUgYWZvcmVtZW50aW9uZWQgZmlyc3QgdGhyZWUgc2VxdWVuY2UgaXMgZXhlY3V0ZWQgaW4gYSBzaW5nbGUgc2lnblRyYW5zYWN0aW9uIGNhbGwuXG4gICAgICpcbiAgICAgKiBOT1RFOiBXZSBtYWtlIGEgc3Ryb25nIGFzc3VtcHRpb24gdGhhdCB0aGUgZXh0ZXJuYWwgZXhwcmVzcyBzaWduZXIgYW5kIGl0cyBjYWxsZXIgdXNlcyBzdGlja3kgc2Vzc2lvbnMsXG4gICAgICogc2luY2UgUFNCVHMgYXJlIGNhY2hlZCBpbiBzdGVwIDEgdG8gYmUgdXNlZCBpbiBzdGVwIDMgZm9yIE11U2lnMiB1c2VyIHNlY3VyZSBub25jZSBhY2Nlc3MuXG4gICAgICovXG4gICAgc2lnbmluZ1N0ZXA/OiAnc2lnbmVyTm9uY2UnIHwgJ3NpZ25lclNpZ25hdHVyZScgfCAnY29zaWduZXJOb25jZSc7XG4gIH0pOiBQcm9taXNlPFNpZ25lZFRyYW5zYWN0aW9uPjtcbn07XG5cbi8qKlxuICogQ2hlY2sgaWYgYSBkZWNvZGVkIHRyYW5zYWN0aW9uIGhhcyBhdCBsZWFzdCBvbmUgdGFwcm9vdCBrZXkgcGF0aCBzcGVuZCAoTXVTaWcyKSBpbnB1dC5cbiAqL1xuZnVuY3Rpb24gaGFzS2V5UGF0aFNwZW5kSW5wdXQoXG4gIHR4OiBmaXhlZFNjcmlwdFdhbGxldC5CaXRHb1BzYnQsXG4gIHB1YnM6IHN0cmluZ1tdIHwgdW5kZWZpbmVkLFxuICBjb2luTmFtZTogVXR4b0NvaW5OYW1lXG4pOiBib29sZWFuIHtcbiAgYXNzZXJ0KHB1YnMgJiYgaXNUcmlwbGUocHVicyksICdwdWIgdHJpcGxlIGlzIHJlcXVpcmVkIHRvIGNoZWNrIGZvciBrZXkgcGF0aCBzcGVuZCBpbnB1dHMgaW4gd2FzbS11dHhvIFBTQlQnKTtcbiAgY29uc3Qgcm9vdFdhbGxldEtleXMgPSBmaXhlZFNjcmlwdFdhbGxldC5Sb290V2FsbGV0S2V5cy5mcm9tWHB1YnMocHVicyk7XG4gIGNvbnN0IHJlcGxheVByb3RlY3Rpb24gPSB7IHB1YmxpY0tleXM6IGdldFJlcGxheVByb3RlY3Rpb25QdWJrZXlzKGNvaW5OYW1lKSB9O1xuICBjb25zdCBwYXJzZWQgPSB0eC5wYXJzZVRyYW5zYWN0aW9uV2l0aFdhbGxldEtleXMocm9vdFdhbGxldEtleXMsIHsgcmVwbGF5UHJvdGVjdGlvbiB9KTtcbiAgcmV0dXJuIHBhcnNlZC5pbnB1dHMuc29tZSgoaW5wdXQpID0+IGlucHV0LnNjcmlwdFR5cGUgPT09ICdwMnRyTXVzaWcyS2V5UGF0aCcpO1xufVxuXG4vKipcbiAqIENvbnZlcnQgVmFsaWRhdGlvbkVycm9yIHRvIFR4SW50ZW50TWlzbWF0Y2hSZWNpcGllbnRFcnJvciB3aXRoIHN0cnVjdHVyZWQgZGF0YVxuICpcbiAqIFRoaXMgcHJlc2VydmVzIHRoZSBzdHJ1Y3R1cmVkIGVycm9yIGluZm9ybWF0aW9uIGZyb20gdGhlIG9yaWdpbmFsIFZhbGlkYXRpb25FcnJvclxuICogYnkgZXh0cmFjdGluZyB0aGUgbWlzbWF0Y2hlZCBvdXRwdXRzIGFuZCBjb252ZXJ0aW5nIHRoZW0gdG8gdGhlIHN0YW5kYXJkaXplZCBmb3JtYXQuXG4gKiBUaGUgb3JpZ2luYWwgZXJyb3IgaXMgcHJlc2VydmVkIGFzIHRoZSBgY2F1c2VgIGZvciBkZWJ1Z2dpbmcgcHVycG9zZXMuXG4gKi9cbmZ1bmN0aW9uIGNvbnZlcnRWYWxpZGF0aW9uRXJyb3JUb1R4SW50ZW50TWlzbWF0Y2goXG4gIGVycm9yOiBBZ2dyZWdhdGVWYWxpZGF0aW9uRXJyb3IsXG4gIHJlcUlkOiBzdHJpbmcgfCBJUmVxdWVzdFRyYWNlciB8IHVuZGVmaW5lZCxcbiAgdHhQYXJhbXM6IEJhc2VUcmFuc2FjdGlvblBhcmFtcyxcbiAgdHhIZXg6IHN0cmluZyB8IHVuZGVmaW5lZCxcbiAgdHhFeHBsYW5hdGlvbj86IHVua25vd25cbik6IFR4SW50ZW50TWlzbWF0Y2hSZWNpcGllbnRFcnJvciB7XG4gIGNvbnN0IG1pc21hdGNoZWRSZWNpcGllbnRzOiBNaXNtYXRjaGVkUmVjaXBpZW50W10gPSBbXTtcblxuICBmb3IgKGNvbnN0IGVyciBvZiBlcnJvci5lcnJvcnMpIHtcbiAgICBpZiAoZXJyIGluc3RhbmNlb2YgRXJyb3JNaXNzaW5nT3V0cHV0cykge1xuICAgICAgbWlzbWF0Y2hlZFJlY2lwaWVudHMucHVzaChcbiAgICAgICAgLi4uZXJyLm1pc3NpbmdPdXRwdXRzLm1hcCgob3V0cHV0KSA9PiAoe1xuICAgICAgICAgIGFkZHJlc3M6IG91dHB1dC5hZGRyZXNzLFxuICAgICAgICAgIGFtb3VudDogb3V0cHV0LmFtb3VudC50b1N0cmluZygpLFxuICAgICAgICB9KSlcbiAgICAgICk7XG4gICAgfSBlbHNlIGlmIChlcnIgaW5zdGFuY2VvZiBFcnJvckltcGxpY2l0RXh0ZXJuYWxPdXRwdXRzKSB7XG4gICAgICBtaXNtYXRjaGVkUmVjaXBpZW50cy5wdXNoKFxuICAgICAgICAuLi5lcnIuaW1wbGljaXRFeHRlcm5hbE91dHB1dHMubWFwKChvdXRwdXQpID0+ICh7XG4gICAgICAgICAgYWRkcmVzczogb3V0cHV0LmFkZHJlc3MsXG4gICAgICAgICAgYW1vdW50OiBvdXRwdXQuYW1vdW50LnRvU3RyaW5nKCksXG4gICAgICAgIH0pKVxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICBjb25zdCB0eEludGVudEVycm9yID0gbmV3IFR4SW50ZW50TWlzbWF0Y2hSZWNpcGllbnRFcnJvcihcbiAgICBlcnJvci5tZXNzYWdlLFxuICAgIHJlcUlkLFxuICAgIFt0eFBhcmFtc10sXG4gICAgdHhIZXgsXG4gICAgbWlzbWF0Y2hlZFJlY2lwaWVudHMsXG4gICAgdHhFeHBsYW5hdGlvblxuICApO1xuICAvLyBQcmVzZXJ2ZSB0aGUgb3JpZ2luYWwgc3RydWN0dXJlZCBlcnJvciBhcyB0aGUgY2F1c2UgZm9yIGRlYnVnZ2luZ1xuICAvLyBTZWU6IGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0phdmFTY3JpcHQvUmVmZXJlbmNlL0dsb2JhbF9PYmplY3RzL0Vycm9yL2NhdXNlXG4gICh0eEludGVudEVycm9yIGFzIEVycm9yICYgeyBjYXVzZT86IEVycm9yIH0pLmNhdXNlID0gZXJyb3I7XG4gIHJldHVybiB0eEludGVudEVycm9yO1xufVxuXG5leHBvcnQgdHlwZSB7IERlY29kZWRUcmFuc2FjdGlvbiB9IGZyb20gJy4vdHJhbnNhY3Rpb24vdHlwZXMnO1xuXG5leHBvcnQgdHlwZSBVdHhvQ29pblNwZWNpZmljID0gQWRkcmVzc0NvaW5TcGVjaWZpYyB8IERlc2NyaXB0b3JBZGRyZXNzQ29pblNwZWNpZmljO1xuXG5leHBvcnQgaW50ZXJmYWNlIFZlcmlmeUFkZHJlc3NPcHRpb25zPFRDb2luU3BlY2lmaWMgZXh0ZW5kcyBVdHhvQ29pblNwZWNpZmljPiBleHRlbmRzIEJhc2VWZXJpZnlBZGRyZXNzT3B0aW9ucyB7XG4gIGNoYWluPzogbnVtYmVyO1xuICBpbmRleDogbnVtYmVyO1xuICBjb2luU3BlY2lmaWM/OiBUQ29pblNwZWNpZmljO1xufVxuXG5leHBvcnQgdHlwZSBCaXAzMjJNZXNzYWdlID0ge1xuICBhZGRyZXNzOiBzdHJpbmc7XG4gIG1lc3NhZ2U6IHN0cmluZztcbn07XG5cbmV4cG9ydCBpbnRlcmZhY2UgVHJhbnNhY3Rpb25JbmZvPFROdW1iZXIgZXh0ZW5kcyBudW1iZXIgfCBiaWdpbnQgPSBudW1iZXI+IHtcbiAgLyoqIE1hcHMgdHhpZCB0byB0eGhleC4gUmVxdWlyZWQgZm9yIG9mZmxpbmUgc2lnbmluZy4gKi9cbiAgdHhIZXhlcz86IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG4gIGNoYW5nZUFkZHJlc3Nlcz86IHN0cmluZ1tdO1xuICAvKiogcHNidCBkb2VzIG5vdCByZXF1aXJlIHVuc3BlbnRzLiAqL1xuICB1bnNwZW50cz86IFVuc3BlbnQ8VE51bWJlcj5bXTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBFeHBsYWluVHJhbnNhY3Rpb25PcHRpb25zPFROdW1iZXIgZXh0ZW5kcyBudW1iZXIgfCBiaWdpbnQgPSBudW1iZXI+IHtcbiAgdHhIZXg6IHN0cmluZztcbiAgdHhJbmZvPzogVHJhbnNhY3Rpb25JbmZvPFROdW1iZXI+O1xuICBmZWVJbmZvPzogc3RyaW5nO1xuICBwdWJzPzogVHJpcGxlPHN0cmluZz47XG4gIGN1c3RvbUNoYW5nZVhwdWJzPzogVHJpcGxlPHN0cmluZz47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRGVjb3JhdGVkRXhwbGFpblRyYW5zYWN0aW9uT3B0aW9uczxUTnVtYmVyIGV4dGVuZHMgbnVtYmVyIHwgYmlnaW50ID0gbnVtYmVyPlxuICBleHRlbmRzIEV4cGxhaW5UcmFuc2FjdGlvbk9wdGlvbnM8VE51bWJlcj4ge1xuICBjaGFuZ2VJbmZvPzogeyBhZGRyZXNzOiBzdHJpbmc7IGNoYWluOiBudW1iZXI7IGluZGV4OiBudW1iZXIgfVtdO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFRyYW5zYWN0aW9uUHJlYnVpbGQ8VE51bWJlciBleHRlbmRzIG51bWJlciB8IGJpZ2ludCA9IG51bWJlcj4gZXh0ZW5kcyBCYXNlVHJhbnNhY3Rpb25QcmVidWlsZCB7XG4gIHR4SW5mbz86IFRyYW5zYWN0aW9uSW5mbzxUTnVtYmVyPjtcbiAgYmxvY2tIZWlnaHQ/OiBudW1iZXI7XG4gIC8qKlxuICAgKiBQU0JULWxpdGUgaGV4IHByZXNlbnQgb25seSBpbiBwZW5kaW5nIGFwcHJvdmFsIGZsb3dzLCB3aGVyZSBhbm90aGVyIHVzZXIncyBzZW5kIGZpeGVkIHRoZSBmb3JtYXQuXG4gICAqIE5vdCBzZXQgaW4gcmVndWxhciAvdHgvYnVpbGQgcmVzcG9uc2VzICh3aGVyZSB0aGUgY2FsbGVyIGNvbnRyb2xzIHRoZSBidWlsZCBwYXJhbWV0ZXJzKS5cbiAgICogUHJlZmVycmVkIG92ZXIgdHhIZXggd2hlbiBwcmVzZW50LCBhcyBpdCBjYXJyaWVzIHJpY2hlciBkYXRhIChub25XaXRuZXNzVXR4bywgcmVkZWVtU2NyaXB0LCBCSVAtMzIgcGF0aHMpLlxuICAgKi9cbiAgdHhIZXhQc2J0Pzogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFRyYW5zYWN0aW9uUGFyYW1zIGV4dGVuZHMgQmFzZVRyYW5zYWN0aW9uUGFyYW1zIHtcbiAgd2FsbGV0UGFzc3BocmFzZT86IHN0cmluZztcbiAgYWxsb3dFeHRlcm5hbENoYW5nZUFkZHJlc3M/OiBib29sZWFuO1xuICBjaGFuZ2VBZGRyZXNzPzogc3RyaW5nO1xuICByYmZUeElkcz86IHN0cmluZ1tdO1xuICAvKiogUGFyYW1ldGVycyBmb3IgYnJpZGdpbmcgaW50ZW50cyAoZS5nLiBCVEMgLT4gc0JUQyBwZWctaW4pLCBwcmVzZW50IHdoZW4gYHR5cGUgPT09ICdicmlkZ2luZydgLiAqL1xuICBicmlkZ2luZ1BhcmFtcz86IEJyaWRnaW5nUGFyYW1zO1xuICBxcj86IGJvb2xlYW47XG4gIC8qKiBaY2FzaC1vbmx5IHByZWZlcmVuY2UgZm9yIHJlc29sdmluZyBVbmlmaWVkIEFkZHJlc3MgcmVjaXBpZW50cy4gKi9cbiAgdW5pZmllZFJlY2lwaWVudFByZWZlcmVuY2U/OiBVbmlmaWVkUmVjaXBpZW50UHJlZmVyZW5jZTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBQYXJzZVRyYW5zYWN0aW9uT3B0aW9uczxUTnVtYmVyIGV4dGVuZHMgbnVtYmVyIHwgYmlnaW50ID0gbnVtYmVyPiBleHRlbmRzIEJhc2VQYXJzZVRyYW5zYWN0aW9uT3B0aW9ucyB7XG4gIHR4UGFyYW1zOiBUcmFuc2FjdGlvblBhcmFtcztcbiAgdHhQcmVidWlsZDogVHJhbnNhY3Rpb25QcmVidWlsZDxUTnVtYmVyPjtcbiAgd2FsbGV0OiBVdHhvV2FsbGV0O1xuICB2ZXJpZmljYXRpb24/OiBWZXJpZmljYXRpb25PcHRpb25zO1xuICByZXFJZD86IElSZXF1ZXN0VHJhY2VyO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEdlbmVyYXRlQWRkcmVzc09wdGlvbnMge1xuICBhZGRyZXNzVHlwZT86IFNjcmlwdFR5cGUyT2YzO1xuICB0aHJlc2hvbGQ/OiBudW1iZXI7XG4gIGNoYWluPzogbnVtYmVyO1xuICBpbmRleD86IG51bWJlcjtcbiAgc2Vnd2l0PzogYm9vbGVhbjtcbiAgYmVjaDMyPzogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBHZW5lcmF0ZUZpeGVkU2NyaXB0QWRkcmVzc09wdGlvbnMgZXh0ZW5kcyBHZW5lcmF0ZUFkZHJlc3NPcHRpb25zIHtcbiAgZm9ybWF0PzogQ3JlYXRlQWRkcmVzc0Zvcm1hdDtcbiAga2V5Y2hhaW5zOiB7XG4gICAgcHViOiBzdHJpbmc7XG4gICAgYXNwS2V5SWQ/OiBzdHJpbmc7XG4gIH1bXTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBBZGRyZXNzRGV0YWlscyB7XG4gIGFkZHJlc3M6IHN0cmluZztcbiAgY2hhaW46IG51bWJlcjtcbiAgaW5kZXg6IG51bWJlcjtcbiAgY29pbjogc3RyaW5nO1xuICBjb2luU3BlY2lmaWM6IEFkZHJlc3NDb2luU3BlY2lmaWMgfCBEZXNjcmlwdG9yQWRkcmVzc0NvaW5TcGVjaWZpYztcbiAgYWRkcmVzc1R5cGU/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRGVzY3JpcHRvckFkZHJlc3NDb2luU3BlY2lmaWMgZXh0ZW5kcyBBZGRyZXNzQ29pblNwZWNpZmljIHtcbiAgZGVzY3JpcHRvck5hbWU6IHN0cmluZztcbiAgZGVzY3JpcHRvckNoZWNrc3VtOiBzdHJpbmc7XG59XG5cbnR5cGUgVXR4b0Jhc2VTaWduVHJhbnNhY3Rpb25PcHRpb25zPFROdW1iZXIgZXh0ZW5kcyBudW1iZXIgfCBiaWdpbnQgPSBudW1iZXI+ID0gQmFzZVNpZ25UcmFuc2FjdGlvbk9wdGlvbnMgJiB7XG4gIC8qKiBUcmFuc2FjdGlvbiBwcmVidWlsZCBmcm9tIGJpdGdvIHNlcnZlciAqL1xuICB0eFByZWJ1aWxkOiB7XG4gICAgLyoqXG4gICAgICogd2FsbGV0SWQgaXMgcmVxdWlyZWQgaW4gZm9sbG93aW5nIDIgc2NlbmFyaW9zLlxuICAgICAqIDEuIEV4dGVybmFsIHNpZ25lciBleHByZXNzIG1vZGUgaXMgdXNlZC5cbiAgICAgKiAyLiBiaXRnbyBNdVNpZzIgbm9uY2UgaXMgcmVxdWVzdGVkXG4gICAgICovXG4gICAgd2FsbGV0SWQ/OiBzdHJpbmc7XG4gICAgdHhIZXg6IHN0cmluZztcbiAgICB0eEluZm8/OiBUcmFuc2FjdGlvbkluZm88VE51bWJlcj47XG4gIH07XG4gIC8qKiB4cHVicyB0cmlwbGUgZm9yIHdhbGxldCAodXNlciwgYmFja3VwLCBiaXRnbykuIFJlcXVpcmVkIG9ubHkgd2hlbiB0eFByZWJ1aWxkLnR4SGV4IGlzIG5vdCBhIFBTQlQgKi9cbiAgcHVicz86IFRyaXBsZTxzdHJpbmc+O1xuICAvKiogeHB1YiBmb3IgY29zaWduZXIgKGRlZmF1bHRzIHRvIGJpdGdvKSAqL1xuICBjb3NpZ25lclB1Yj86IHN0cmluZztcbiAgLyoqXG4gICAqIFdoZW4gdHJ1ZSwgY3JlYXRlcyBmdWxsLXNpZ25lZCB0cmFuc2FjdGlvbiB3aXRob3V0IHBsYWNlaG9sZGVyIHNpZ25hdHVyZXMuXG4gICAqIFdoZW4gZmFsc2UsIGNyZWF0ZXMgaGFsZi1zaWduZWQgdHJhbnNhY3Rpb24gd2l0aCBwbGFjZWhvbGRlciBzaWduYXR1cmVzLlxuICAgKi9cbiAgaXNMYXN0U2lnbmF0dXJlPzogYm9vbGVhbjtcbiAgLyoqXG4gICAqIFdoZW4gdHJ1ZSwgdGhlIHNpZ25lZCB0cmFuc2FjdGlvbiB3aWxsIGJlIGNvbnZlcnRlZCBmcm9tIFBTQlQgdG8gbGVnYWN5IGZvcm1hdCBiZWZvcmUgcmV0dXJuaW5nLlxuICAgKiBTZXQgYXV0b21hdGljYWxseSBieSBwcmVzaWduVHJhbnNhY3Rpb24oKSB3aGVuIHRoZSBjYWxsZXIgZXhwbGljaXRseSByZXF1ZXN0ZWQgdHhGb3JtYXQ6ICdsZWdhY3knLlxuICAgKi9cbiAgcmV0dXJuTGVnYWN5Rm9ybWF0PzogYm9vbGVhbjtcbiAgd2FsbGV0PzogVXR4b1dhbGxldDtcbiAgLyoqXG4gICAqIFdoZW4gdHJ1ZSAoZGVmYXVsdCksIGV4dHJhY3QgZmluYWxpemVkIFBTQlQgdG8gbGVnYWN5IHRyYW5zYWN0aW9uIGZvcm1hdC5cbiAgICogV2hlbiBmYWxzZSwgcmV0dXJuIGZpbmFsaXplZCBQU0JULiBVc2VmdWwgZm9yIHRlc3RpbmcgdG8ga2VlcCB0cmFuc2FjdGlvbnMgaW4gUFNCVCBmb3JtYXQuXG4gICAqL1xuICBleHRyYWN0VHJhbnNhY3Rpb24/OiBib29sZWFuO1xuICAvKiogV2hlbiB0cnVlLCBlbWJlZHMgV0FTTS1VVFhPIHZlcnNpb24gbWV0YWRhdGEgaW50byB0aGUgc2lnbmVkIFBTQlQuIERlZmF1bHRzIHRvIGZhbHNlLiAqL1xuICB3cml0ZVNpZ25lZFdpdGg/OiBib29sZWFuO1xufTtcblxuZXhwb3J0IHR5cGUgU2lnblRyYW5zYWN0aW9uT3B0aW9uczxUTnVtYmVyIGV4dGVuZHMgbnVtYmVyIHwgYmlnaW50ID0gbnVtYmVyPiA9IFV0eG9CYXNlU2lnblRyYW5zYWN0aW9uT3B0aW9uczxUTnVtYmVyPiAmXG4gIChcbiAgICB8IHtcbiAgICAgICAgcHJ2OiBzdHJpbmc7XG4gICAgICAgIHNpZ25pbmdTdGVwPzogJ3NpZ25lck5vbmNlJyB8ICdzaWduZXJTaWduYXR1cmUnO1xuICAgICAgfVxuICAgIHwge1xuICAgICAgICBzaWduaW5nU3RlcDogJ2Nvc2lnbmVyTm9uY2UnO1xuICAgICAgfVxuICApO1xuXG5leHBvcnQgaW50ZXJmYWNlIE11bHRpU2lnQWRkcmVzcyB7XG4gIG91dHB1dFNjcmlwdDogQnVmZmVyO1xuICByZWRlZW1TY3JpcHQ/OiBCdWZmZXI7XG4gIHdpdG5lc3NTY3JpcHQ/OiBCdWZmZXI7XG4gIGFkZHJlc3M6IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBSZWNvdmVyRnJvbVdyb25nQ2hhaW5PcHRpb25zIHtcbiAgdHhpZDogc3RyaW5nO1xuICByZWNvdmVyeUFkZHJlc3M6IHN0cmluZztcbiAgd2FsbGV0OiBzdHJpbmc7XG4gIHdhbGxldFBhc3NwaHJhc2U/OiBzdHJpbmc7XG4gIHhwcnY/OiBzdHJpbmc7XG4gIGFwaUtleT86IHN0cmluZztcbiAgLyoqIEBkZXByZWNhdGVkICovXG4gIGNvaW4/OiBBYnN0cmFjdFV0eG9Db2luO1xuICByZWNvdmVyeUNvaW4/OiBBYnN0cmFjdFV0eG9Db2luO1xuICBzaWduZWQ/OiBib29sZWFuO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFZlcmlmeUtleVNpZ25hdHVyZXNPcHRpb25zIHtcbiAgdXNlcktleWNoYWluOiB7IHB1Yj86IHN0cmluZyB9O1xuICBrZXljaGFpblRvVmVyaWZ5OiB7IHB1Yj86IHN0cmluZyB9O1xuICBrZXlTaWduYXR1cmU6IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBWZXJpZnlVc2VyUHVibGljS2V5T3B0aW9ucyB7XG4gIHVzZXJLZXljaGFpbj86IFV0eG9LZXljaGFpbjtcbiAgZGlzYWJsZU5ldHdvcmtpbmc6IGJvb2xlYW47XG4gIHR4UGFyYW1zOiBUcmFuc2FjdGlvblBhcmFtcztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBWZXJpZnlUcmFuc2FjdGlvbk9wdGlvbnM8VE51bWJlciBleHRlbmRzIG51bWJlciB8IGJpZ2ludCA9IG51bWJlcj5cbiAgZXh0ZW5kcyBCYXNlVmVyaWZ5VHJhbnNhY3Rpb25PcHRpb25zIHtcbiAgdHhQcmVidWlsZDogVHJhbnNhY3Rpb25QcmVidWlsZDxUTnVtYmVyPjtcbiAgdHhQYXJhbXM6IFRyYW5zYWN0aW9uUGFyYW1zO1xuICB3YWxsZXQ6IFV0eG9XYWxsZXQ7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgU2lnblBzYnRSZXF1ZXN0IHtcbiAgcHNidDogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFNpZ25Qc2J0UmVzcG9uc2Uge1xuICBwc2J0OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBBYnN0cmFjdFV0eG9Db2luIGV4dGVuZHMgQmFzZUNvaW4gaW1wbGVtZW50cyBNdXNpZzJQYXJ0aWNpcGFudDxmaXhlZFNjcmlwdFdhbGxldC5CaXRHb1BzYnQ+IHtcbiAgYWJzdHJhY3QgbmFtZTogVXR4b0NvaW5OYW1lO1xuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHdoZXRoZXIgdGhpcyBjb2luIGlzIGEgbWFpbm5ldCBjb2luLlxuICAgKiBEZWZhdWx0IGltcGxlbWVudGF0aW9uIHVzZXMgdGhlIG5hbWUgcHJvcGVydHkuXG4gICAqIENhbiBiZSBvdmVycmlkZGVuIGJ5IHN1YmNsYXNzZXMuXG4gICAqL1xuICBwcm90ZWN0ZWQgaXNNYWlubmV0KCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBpc01haW5uZXRDb2luKHRoaXMubmFtZSk7XG4gIH1cblxuICBwdWJsaWMgcmVhZG9ubHkgYW1vdW50VHlwZTogJ251bWJlcicgfCAnYmlnaW50JztcblxuICBwcm90ZWN0ZWQgY29uc3RydWN0b3IoYml0Z286IEJpdEdvQmFzZSwgYW1vdW50VHlwZTogJ251bWJlcicgfCAnYmlnaW50JyA9ICdudW1iZXInKSB7XG4gICAgc3VwZXIoYml0Z28pO1xuICAgIHRoaXMuYW1vdW50VHlwZSA9IGFtb3VudFR5cGU7XG4gIH1cblxuICBnZXRDaGFpbigpOiBVdHhvQ29pbk5hbWUge1xuICAgIHJldHVybiB0aGlzLm5hbWU7XG4gIH1cblxuICBnZXRGYW1pbHkoKTogVXR4b0NvaW5OYW1lTWFpbm5ldCB7XG4gICAgcmV0dXJuIGdldE1haW5uZXRDb2luTmFtZSh0aGlzLm5hbWUpO1xuICB9XG5cbiAgZ2V0RnVsbE5hbWUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gZ2V0RnVsbE5hbWVGcm9tQ29pbk5hbWUodGhpcy5uYW1lKTtcbiAgfVxuXG4gIC8qKiBDb2luIG5hbWUgdXNlZCBieSB3YXNtLXV0eG8uIFByaXZhdGUgQml0Y29pbiBuZXR3b3JrcyBtYXkgbWFwIHRvIGEgc2hhcmVkIGNvZGVjLiAqL1xuICBnZXQgd2FzbU5hbWUoKTogV2FzbVV0eG9Db2luTmFtZSB7XG4gICAgcmV0dXJuIHRvV2FzbVV0eG9Db2luTmFtZSh0aGlzLm5hbWUpO1xuICB9XG5cbiAgZ2V0IGFkZHJlc3NDb2RlYygpOiBBZGRyZXNzQ29kZWMge1xuICAgIHJldHVybiBuZXcgQWRkcmVzc0NvZGVjKHRoaXMubmFtZSwgdGhpcy53YXNtTmFtZSk7XG4gIH1cblxuICAvKiogSW5kaWNhdGVzIHdoZXRoZXIgdGhlIGNvaW4gc3VwcG9ydHMgYSBibG9jayB0YXJnZXQgKi9cbiAgc3VwcG9ydHNCbG9ja1RhcmdldCgpOiBib29sZWFuIHtcbiAgICAvLyBGSVhNRTogdGhlIFNESyBkb2VzIG5vdCBzZWVtIHRvIHVzZSB0aGlzIGFueXdoZXJlIHNvIGl0IGlzIHVuY2xlYXIgd2hhdCB0aGUgcHVycG9zZSBvZiB0aGlzIG1ldGhvZCBpc1xuICAgIGNvbnN0IG1haW5uZXQgPSBnZXRNYWlubmV0Q29pbk5hbWUodGhpcy5uYW1lKTtcbiAgICByZXR1cm4gbWFpbm5ldCA9PT0gJ2J0YycgfHwgbWFpbm5ldCA9PT0gJ2RvZ2UnO1xuICB9XG5cbiAgc3dlZXBXaXRoU2VuZE1hbnkoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICAvKiogQGRlcHJlY2F0ZWQgKi9cbiAgc3RhdGljIGdldCB2YWxpZEFkZHJlc3NUeXBlcygpOiBTY3JpcHRUeXBlMk9mM1tdIHtcbiAgICByZXR1cm4gWydwMnNoJywgJ3Ayc2hQMndzaCcsICdwMndzaCcsICdwMnRyJywgJ3AydHJNdXNpZzInXTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBmYWN0b3IgYmV0d2VlbiB0aGUgYmFzZSB1bml0IGFuZCBpdHMgc21hbGxlc3Qgc3ViZGl2aXNvblxuICAgKiBAcmV0dXJuIHtudW1iZXJ9XG4gICAqL1xuICBnZXRCYXNlRmFjdG9yKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIDFlODtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVjayBpZiBhbiBhZGRyZXNzIGlzIHZhbGlkXG4gICAqIEBwYXJhbSBhZGRyZXNzXG4gICAqIEBwYXJhbSBwYXJhbVxuICAgKi9cbiAgaXNWYWxpZEFkZHJlc3MoXG4gICAgYWRkcmVzczogc3RyaW5nLFxuICAgIHBhcmFtPzogeyBhbnlGb3JtYXQ/OiBib29sZWFuOyBhbGxvd0xpZ2h0bmluZz86IGJvb2xlYW4gfSB8IC8qIGxlZ2FjeSBwYXJhbWV0ZXIgKi8gYm9vbGVhblxuICApOiBib29sZWFuIHtcbiAgICBpZiAodHlwZW9mIHBhcmFtID09PSAnYm9vbGVhbicgJiYgcGFyYW0pIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignZGVwcmVjYXRlZCcpO1xuICAgIH1cblxuICAgIGNvbnN0IGFsbG93TGlnaHRuaW5nID0gKHBhcmFtIGFzIHsgYWxsb3dMaWdodG5pbmc/OiBib29sZWFuIH0gfCB1bmRlZmluZWQpPy5hbGxvd0xpZ2h0bmluZyA/PyBmYWxzZTtcbiAgICBpZiAoYWxsb3dMaWdodG5pbmcpIHtcbiAgICAgIGlmICgvXigwMnwwMylbMC05YS1mQS1GXXs2NH0kLy50ZXN0KGFkZHJlc3MpKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgICAgaWYgKGlzQm9sdDExSW52b2ljZShhZGRyZXNzKSkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5hZGRyZXNzQ29kZWMuaXNWYWxpZEFkZHJlc3MoYWRkcmVzcyk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJuIGJvb2xlYW4gaW5kaWNhdGluZyB3aGV0aGVyIGlucHV0IGlzIHZhbGlkIHB1YmxpYyBrZXkgZm9yIHRoZSBjb2luLlxuICAgKlxuICAgKiBAcGFyYW0ge1N0cmluZ30gcHViIHRoZSBwdWIgdG8gYmUgY2hlY2tlZFxuICAgKiBAcmV0dXJucyB7Qm9vbGVhbn0gaXMgaXQgdmFsaWQ/XG4gICAqL1xuICBpc1ZhbGlkUHViKHB1Yjogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBCSVAzMi5mcm9tQmFzZTU4KHB1YikuaXNOZXV0ZXJlZCgpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogVGhpcyBpcyBjYWxsZWQgYmVmb3JlIGNyYWZ0aW5nIHRoZSBIVFRQIHJlcXVlc3QgdG8gdGhlIEJpdEdvIEFQSS5cbiAgICogSXQgY29udmVydHMgdGhlIHJlY2lwaWVudCBhZGRyZXNzIGBzY3JpcHRQdWJLZXk6Li4uYCB0byB7IHNjcmlwdDogc3RyaW5nIH0gfCB7IGFkZHJlc3M6IHN0cmluZyB9LlxuICAgKi9cbiAgb3ZlcnJpZGUgcHJlcHJvY2Vzc0J1aWxkUGFyYW1zKHBhcmFtczogUmVjb3JkPHN0cmluZywgYW55Pik6IFJlY29yZDxzdHJpbmcsIGFueT4ge1xuICAgIGlmIChwYXJhbXMucmVjaXBpZW50cyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBwYXJhbXMucmVjaXBpZW50cyA9XG4gICAgICAgIHBhcmFtcy5yZWNpcGllbnRzIGluc3RhbmNlb2YgQXJyYXlcbiAgICAgICAgICA/IHBhcmFtcz8ucmVjaXBpZW50cz8ubWFwKChyZWNpcGllbnQpID0+IHtcbiAgICAgICAgICAgICAgY29uc3QgeyBhZGRyZXNzLCAuLi5yZXN0IH0gPSByZWNpcGllbnQ7XG4gICAgICAgICAgICAgIGlmIChhZGRyZXNzID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVjaXBpZW50OyAvLyBBbHJlYWR5IHsgc2NyaXB0LCBhbW91bnQgfSDigJQgcGFzcyB0aHJvdWdoIHVuY2hhbmdlZFxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHJldHVybiB7IC4uLnJlc3QsIC4uLkFkZHJlc3NDb2RlYy5mcm9tRXh0ZW5kZWRBZGRyZXNzRm9ybWF0KGFkZHJlc3MpIH07XG4gICAgICAgICAgICB9KVxuICAgICAgICAgIDogcGFyYW1zLnJlY2lwaWVudHM7XG4gICAgfVxuXG4gICAgcmV0dXJuIHBhcmFtcztcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIGxhdGVzdCBibG9jayBoZWlnaHRcbiAgICogQHBhcmFtIHJlcUlkXG4gICAqL1xuICBhc3luYyBnZXRMYXRlc3RCbG9ja0hlaWdodChyZXFJZD86IFJlcXVlc3RUcmFjZXIpOiBQcm9taXNlPG51bWJlcj4ge1xuICAgIGlmIChyZXFJZCkge1xuICAgICAgdGhpcy5iaXRnby5zZXRSZXF1ZXN0VHJhY2VyKHJlcUlkKTtcbiAgICB9XG4gICAgY29uc3QgY2hhaW5oZWFkID0gYXdhaXQgdGhpcy5iaXRnby5nZXQodGhpcy51cmwoJy9wdWJsaWMvYmxvY2svbGF0ZXN0JykpLnJlc3VsdCgpO1xuICAgIHJldHVybiAoY2hhaW5oZWFkIGFzIGFueSkuaGVpZ2h0O1xuICB9XG5cbiAgY2hlY2tSZWNpcGllbnQocmVjaXBpZW50OiB7IGFkZHJlc3M/OiBzdHJpbmc7IGFtb3VudDogbnVtYmVyIHwgc3RyaW5nIH0pOiB2b2lkIHtcbiAgICBBZGRyZXNzQ29kZWMuYXNzZXJ0VmFsaWRUcmFuc2FjdGlvblJlY2lwaWVudChyZWNpcGllbnQpO1xuICAgIGlmIChyZWNpcGllbnQuYWRkcmVzcyAmJiAhQWRkcmVzc0NvZGVjLmlzU2NyaXB0UmVjaXBpZW50KHJlY2lwaWVudC5hZGRyZXNzKSkge1xuICAgICAgc3VwZXIuY2hlY2tSZWNpcGllbnQoeyBhZGRyZXNzOiByZWNpcGllbnQuYWRkcmVzcywgYW1vdW50OiByZWNpcGllbnQuYW1vdW50IH0pO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSdW4gY3VzdG9tIGNvaW4gbG9naWMgYWZ0ZXIgYSB0cmFuc2FjdGlvbiBwcmVidWlsZCBoYXMgYmVlbiByZWNlaXZlZCBmcm9tIEJpdEdvXG4gICAqIEBwYXJhbSBwcmVidWlsZFxuICAgKi9cbiAgYXN5bmMgcG9zdFByb2Nlc3NQcmVidWlsZDxUTnVtYmVyIGV4dGVuZHMgbnVtYmVyIHwgYmlnaW50PihcbiAgICBwcmVidWlsZDogVHJhbnNhY3Rpb25QcmVidWlsZDxUTnVtYmVyPlxuICApOiBQcm9taXNlPFRyYW5zYWN0aW9uUHJlYnVpbGQ8VE51bWJlcj4+IHtcbiAgICBjb25zdCB0eCA9IHRoaXMuZGVjb2RlVHJhbnNhY3Rpb25Gcm9tUHJlYnVpbGQocHJlYnVpbGQpO1xuICAgIGlmIChfLmlzVW5kZWZpbmVkKHByZWJ1aWxkLmJsb2NrSGVpZ2h0KSkge1xuICAgICAgcHJlYnVpbGQuYmxvY2tIZWlnaHQgPSAoYXdhaXQgdGhpcy5nZXRMYXRlc3RCbG9ja0hlaWdodCgpKSBhcyBudW1iZXI7XG4gICAgfVxuICAgIHJldHVybiBfLmV4dGVuZCh7fSwgcHJlYnVpbGQsIHsgdHhIZXg6IGVuY29kZVRyYW5zYWN0aW9uKHR4KS50b1N0cmluZygnaGV4JykgfSk7XG4gIH1cblxuICAvKipcbiAgICogQGRlcHJlY2F0ZWQgLSB3aWxsIGJlIHJlbW92ZWQgd2hlbiB3ZSBkcm9wIHN1cHBvcnQgZm9yIHV0eG9saWJcbiAgICogRGV0ZXJtaW5lIGFuIGFkZHJlc3MnIHR5cGUgYmFzZWQgb24gaXRzIHdpdG5lc3MgYW5kIHJlZGVlbSBzY3JpcHQgcHJlc2VuY2VcbiAgICogQHBhcmFtIGFkZHJlc3NEZXRhaWxzXG4gICAqL1xuICBzdGF0aWMgaW5mZXJBZGRyZXNzVHlwZShhZGRyZXNzRGV0YWlsczogeyBjaGFpbjogbnVtYmVyIH0pOiBTY3JpcHRUeXBlMk9mMyB8IG51bGwge1xuICAgIHJldHVybiBmaXhlZFNjcmlwdFdhbGxldC5DaGFpbkNvZGUuaXMoYWRkcmVzc0RldGFpbHMuY2hhaW4pXG4gICAgICA/IChmaXhlZFNjcmlwdFdhbGxldC5DaGFpbkNvZGUuc2NyaXB0VHlwZShhZGRyZXNzRGV0YWlscy5jaGFpbikgYXMgU2NyaXB0VHlwZTJPZjMpXG4gICAgICA6IG51bGw7XG4gIH1cblxuICBkZWNvZGVUcmFuc2FjdGlvbihpbnB1dDogQnVmZmVyIHwgc3RyaW5nKTogZml4ZWRTY3JpcHRXYWxsZXQuQml0R29Qc2J0IHtcbiAgICBjb25zdCBidWZmZXIgPSB0eXBlb2YgaW5wdXQgPT09ICdzdHJpbmcnID8gc3RyaW5nVG9CdWZmZXJUcnlGb3JtYXRzKGlucHV0LCBbJ2hleCcsICdiYXNlNjQnXSkgOiBpbnB1dDtcbiAgICBpZiAoIWhhc1BzYnRNYWdpYyhidWZmZXIpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3JEZXByZWNhdGVkVHhGb3JtYXQoJ2xlZ2FjeScpO1xuICAgIH1cbiAgICByZXR1cm4gZGVjb2RlUHNidChidWZmZXIsIHRoaXMud2FzbU5hbWUpO1xuICB9XG5cbiAgZGVjb2RlVHJhbnNhY3Rpb25Bc1BzYnQoaW5wdXQ6IEJ1ZmZlciB8IHN0cmluZyk6IGZpeGVkU2NyaXB0V2FsbGV0LkJpdEdvUHNidCB7XG4gICAgcmV0dXJuIHRoaXMuZGVjb2RlVHJhbnNhY3Rpb24oaW5wdXQpO1xuICB9XG5cbiAgZGVjb2RlVHJhbnNhY3Rpb25Gcm9tUHJlYnVpbGQocHJlYnVpbGQ6IHtcbiAgICB0eEhleD86IHN0cmluZztcbiAgICB0eEJhc2U2ND86IHN0cmluZztcbiAgICAvKiogU2VlIFRyYW5zYWN0aW9uUHJlYnVpbGQudHhIZXhQc2J0IOKAlCBvbmx5IHByZXNlbnQgaW4gcGVuZGluZyBhcHByb3ZhbCBmbG93cy4gKi9cbiAgICB0eEhleFBzYnQ/OiBzdHJpbmc7XG4gIH0pOiBmaXhlZFNjcmlwdFdhbGxldC5CaXRHb1BzYnQge1xuICAgIGNvbnN0IHN0cmluZyA9IHByZWJ1aWxkLnR4SGV4UHNidCA/PyBwcmVidWlsZC50eEhleCA/PyBwcmVidWlsZC50eEJhc2U2NDtcbiAgICBpZiAoIXN0cmluZykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdtaXNzaW5nIHJlcXVpcmVkIHR4SGV4IG9yIHR4QmFzZTY0IHByb3BlcnR5Jyk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmRlY29kZVRyYW5zYWN0aW9uKHN0cmluZyk7XG4gIH1cblxuICAvKipcbiAgICogRXh0cmFjdCBhbmQgZmlsbCB0cmFuc2FjdGlvbiBkZXRhaWxzIHN1Y2ggYXMgaW50ZXJuYWwvY2hhbmdlIHNwZW5kLCBleHRlcm5hbCBzcGVuZCAoZXhwbGljaXQgdnMuIGltcGxpY2l0KSwgZXRjLlxuICAgKiBAcGFyYW0gcGFyYW1zXG4gICAqIEByZXR1cm5zIHsqfVxuICAgKi9cbiAgYXN5bmMgcGFyc2VUcmFuc2FjdGlvbjxUTnVtYmVyIGV4dGVuZHMgbnVtYmVyIHwgYmlnaW50ID0gbnVtYmVyPihcbiAgICBwYXJhbXM6IFBhcnNlVHJhbnNhY3Rpb25PcHRpb25zPFROdW1iZXI+XG4gICk6IFByb21pc2U8UGFyc2VkVHJhbnNhY3Rpb248VE51bWJlcj4+IHtcbiAgICByZXR1cm4gdGhpcy5wYXJzZVRyYW5zYWN0aW9uV2l0aEFkZHJlc3NDb2RlYyhwYXJhbXMsIHRoaXMuYWRkcmVzc0NvZGVjKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBwYXJzZVRyYW5zYWN0aW9uV2l0aEFkZHJlc3NDb2RlYzxUTnVtYmVyIGV4dGVuZHMgbnVtYmVyIHwgYmlnaW50PihcbiAgICBwYXJhbXM6IFBhcnNlVHJhbnNhY3Rpb25PcHRpb25zPFROdW1iZXI+LFxuICAgIGFkZHJlc3NDb2RlYzogQWRkcmVzc0NvZGVjXG4gICk6IFByb21pc2U8UGFyc2VkVHJhbnNhY3Rpb248VE51bWJlcj4+IHtcbiAgICByZXR1cm4gcGFyc2VUcmFuc2FjdGlvbih0aGlzLCBwYXJhbXMsIGFkZHJlc3NDb2RlYyk7XG4gIH1cblxuICAvKipcbiAgICogQGRlcHJlY2F0ZWQgLSB1c2UgdGhlIGV4cG9ydGVkIGB2ZXJpZnlVc2VyUHVibGljS2V5YCBmdW5jdGlvbiBpbnN0ZWFkXG4gICAqL1xuICBwcm90ZWN0ZWQgYXN5bmMgdmVyaWZ5VXNlclB1YmxpY0tleShwYXJhbXM6IFZlcmlmeVVzZXJQdWJsaWNLZXlPcHRpb25zKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgcmV0dXJuIGF3YWl0IHZlcmlmeVVzZXJQdWJsaWNLZXkodGhpcy5iaXRnbywgcGFyYW1zKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVwcmVjYXRlZCAtIHVzZSBmdW5jdGlvbiB2ZXJpZnlLZXlTaWduYXR1cmUgaW5zdGVhZFxuICAgKi9cbiAgcHVibGljIHZlcmlmeUtleVNpZ25hdHVyZShwYXJhbXM6IFZlcmlmeUtleVNpZ25hdHVyZXNPcHRpb25zKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHZlcmlmeUtleVNpZ25hdHVyZShwYXJhbXMpO1xuICB9XG5cbiAgLyoqXG4gICAqIFZlcmlmeSB0aGF0IGEgdHJhbnNhY3Rpb24gcHJlYnVpbGQgY29tcGxpZXMgd2l0aCB0aGUgb3JpZ2luYWwgaW50ZW50aW9uXG4gICAqXG4gICAqIEBwYXJhbSBwYXJhbXNcbiAgICogQHBhcmFtIHBhcmFtcy50eFBhcmFtcyBwYXJhbXMgb2JqZWN0IHBhc3NlZCB0byBzZW5kXG4gICAqIEBwYXJhbSBwYXJhbXMudHhQcmVidWlsZCBwcmVidWlsZCBvYmplY3QgcmV0dXJuZWQgYnkgc2VydmVyXG4gICAqIEBwYXJhbSBwYXJhbXMudHhQcmVidWlsZC50eEhleCBwcmVidWlsdCB0cmFuc2FjdGlvbidzIHR4SGV4IGZvcm1cbiAgICogQHBhcmFtIHBhcmFtcy53YWxsZXQgV2FsbGV0IG9iamVjdCB0byBvYnRhaW4ga2V5cyB0byB2ZXJpZnkgYWdhaW5zdFxuICAgKiBAcGFyYW0gcGFyYW1zLnZlcmlmaWNhdGlvbiBPYmplY3Qgc3BlY2lmeWluZyBzb21lIHZlcmlmaWNhdGlvbiBwYXJhbWV0ZXJzXG4gICAqIEBwYXJhbSBwYXJhbXMudmVyaWZpY2F0aW9uLmRpc2FibGVOZXR3b3JraW5nIERpc2FsbG93IGZldGNoaW5nIGFueSBkYXRhIGZyb20gdGhlIGludGVybmV0IGZvciB2ZXJpZmljYXRpb24gcHVycG9zZXNcbiAgICogQHBhcmFtIHBhcmFtcy52ZXJpZmljYXRpb24ua2V5Y2hhaW5zIFBhc3Mga2V5Y2hhaW5zIG1hbnVhbGx5IHJhdGhlciB0aGFuIGZldGNoaW5nIHRoZW0gYnkgaWRcbiAgICogQHBhcmFtIHBhcmFtcy52ZXJpZmljYXRpb24uYWRkcmVzc2VzIEFkZHJlc3MgZGV0YWlscyB0byBwYXNzIGluIGZvciBvdXQtb2YtYmFuZCB2ZXJpZmljYXRpb25cbiAgICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmVyaWZpY2F0aW9uIHBhc3Nlc1xuICAgKiBAdGhyb3dzIHtUeEludGVudE1pc21hdGNoRXJyb3J9IGlmIHRyYW5zYWN0aW9uIHZhbGlkYXRpb24gZmFpbHNcbiAgICogQHRocm93cyB7VHhJbnRlbnRNaXNtYXRjaFJlY2lwaWVudEVycm9yfSBpZiB0cmFuc2FjdGlvbiByZWNpcGllbnRzIGRvbid0IG1hdGNoIHVzZXIgaW50ZW50XG4gICAqL1xuICBhc3luYyB2ZXJpZnlUcmFuc2FjdGlvbjxUTnVtYmVyIGV4dGVuZHMgbnVtYmVyIHwgYmlnaW50ID0gbnVtYmVyPihcbiAgICBwYXJhbXM6IFZlcmlmeVRyYW5zYWN0aW9uT3B0aW9uczxUTnVtYmVyPlxuICApOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICByZXR1cm4gdGhpcy52ZXJpZnlUcmFuc2FjdGlvbldpdGhBZGRyZXNzQ29kZWMocGFyYW1zLCB0aGlzLmFkZHJlc3NDb2RlYyk7XG4gIH1cblxuICBwcm90ZWN0ZWQgYXN5bmMgdmVyaWZ5VHJhbnNhY3Rpb25XaXRoQWRkcmVzc0NvZGVjPFROdW1iZXIgZXh0ZW5kcyBudW1iZXIgfCBiaWdpbnQ+KFxuICAgIHBhcmFtczogVmVyaWZ5VHJhbnNhY3Rpb25PcHRpb25zPFROdW1iZXI+LFxuICAgIGFkZHJlc3NDb2RlYzogQWRkcmVzc0NvZGVjXG4gICk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gYXdhaXQgdmVyaWZ5VHJhbnNhY3Rpb24odGhpcywgdGhpcy5iaXRnbywgcGFyYW1zLCBhZGRyZXNzQ29kZWMpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBBZ2dyZWdhdGVWYWxpZGF0aW9uRXJyb3IpIHtcbiAgICAgICAgY29uc3QgdHhFeHBsYW5hdGlvbiA9IGF3YWl0IFR4SW50ZW50TWlzbWF0Y2hFcnJvci50cnlHZXRUeEV4cGxhbmF0aW9uKFxuICAgICAgICAgIHRoaXMgYXMgdW5rbm93biBhcyBJQmFzZUNvaW4sXG4gICAgICAgICAgcGFyYW1zLnR4UHJlYnVpbGRcbiAgICAgICAgKTtcbiAgICAgICAgdGhyb3cgY29udmVydFZhbGlkYXRpb25FcnJvclRvVHhJbnRlbnRNaXNtYXRjaChcbiAgICAgICAgICBlcnJvcixcbiAgICAgICAgICBwYXJhbXMucmVxSWQsXG4gICAgICAgICAgcGFyYW1zLnR4UGFyYW1zLFxuICAgICAgICAgIHBhcmFtcy50eFByZWJ1aWxkLnR4SGV4LFxuICAgICAgICAgIHR4RXhwbGFuYXRpb25cbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIHRocm93IGVycm9yO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBNYWtlIHN1cmUgYW4gYWRkcmVzcyBpcyB2YWxpZCBhbmQgdGhyb3cgYW4gZXJyb3IgaWYgaXQncyBub3QuXG4gICAqIEBwYXJhbSBwYXJhbXMuYWRkcmVzcyBUaGUgYWRkcmVzcyBzdHJpbmcgb24gdGhlIG5ldHdvcmtcbiAgICogQHBhcmFtIHBhcmFtcy5hZGRyZXNzVHlwZVxuICAgKiBAcGFyYW0gcGFyYW1zLmtleWNoYWlucyBLZXljaGFpbiBvYmplY3RzIHdpdGggeHB1YnNcbiAgICogQHBhcmFtIHBhcmFtcy5jb2luU3BlY2lmaWMgQ29pbi1zcGVjaWZpYyBkZXRhaWxzIGZvciB0aGUgYWRkcmVzcyBzdWNoIGFzIGEgd2l0bmVzcyBzY3JpcHRcbiAgICogQHBhcmFtIHBhcmFtcy5jaGFpbiBEZXJpdmF0aW9uIGNoYWluXG4gICAqIEBwYXJhbSBwYXJhbXMuaW5kZXggRGVyaXZhdGlvbiBpbmRleFxuICAgKiBAdGhyb3dzIHtJbnZhbGlkQWRkcmVzc0Vycm9yfVxuICAgKiBAdGhyb3dzIHtJbnZhbGlkQWRkcmVzc0Rlcml2YXRpb25Qcm9wZXJ0eUVycm9yfVxuICAgKiBAdGhyb3dzIHtVbmV4cGVjdGVkQWRkcmVzc0Vycm9yfVxuICAgKi9cbiAgYXN5bmMgaXNXYWxsZXRBZGRyZXNzKHBhcmFtczogVmVyaWZ5QWRkcmVzc09wdGlvbnM8VXR4b0NvaW5TcGVjaWZpYz4sIHdhbGxldD86IElXYWxsZXQpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBjb25zdCB7IGFkZHJlc3MsIGtleWNoYWlucywgY2hhaW4sIGluZGV4IH0gPSBwYXJhbXM7XG5cbiAgICBpZiAoIXRoaXMuaXNWYWxpZEFkZHJlc3MoYWRkcmVzcykpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQWRkcmVzc0Vycm9yKGBpbnZhbGlkIGFkZHJlc3M6ICR7YWRkcmVzc31gKTtcbiAgICB9XG5cbiAgICBpZiAod2FsbGV0ICYmIGlzRGVzY3JpcHRvcldhbGxldCh3YWxsZXQpKSB7XG4gICAgICBpZiAoIWtleWNoYWlucykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ21pc3NpbmcgcmVxdWlyZWQgcGFyYW0ga2V5Y2hhaW5zJyk7XG4gICAgICB9XG4gICAgICBpZiAoIWlzVHJpcGxlKGtleWNoYWlucykpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdrZXljaGFpbnMgbXVzdCBiZSBhIHRyaXBsZScpO1xuICAgICAgfVxuICAgICAgYXNzZXJ0RGVzY3JpcHRvcldhbGxldEFkZHJlc3MoXG4gICAgICAgIHRoaXMuYWRkcmVzc0NvZGVjLFxuICAgICAgICBwYXJhbXMsXG4gICAgICAgIGdldERlc2NyaXB0b3JNYXBGcm9tV2FsbGV0KHdhbGxldCwgdG9CaXAzMlRyaXBsZShrZXljaGFpbnMpLCBnZXRQb2xpY3lGb3JFbnYodGhpcy5iaXRnby5lbnYpKVxuICAgICAgKTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIGlmICgoXy5pc1VuZGVmaW5lZChjaGFpbikgJiYgXy5pc1VuZGVmaW5lZChpbmRleCkpIHx8ICEoXy5pc0Zpbml0ZShjaGFpbikgJiYgXy5pc0Zpbml0ZShpbmRleCkpKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFkZHJlc3NEZXJpdmF0aW9uUHJvcGVydHlFcnJvcihcbiAgICAgICAgYGFkZHJlc3MgdmFsaWRhdGlvbiBmYWlsdXJlOiBpbnZhbGlkIGNoYWluICgke2NoYWlufSkgb3IgaW5kZXggKCR7aW5kZXh9KWBcbiAgICAgICk7XG4gICAgfVxuXG4gICAgaWYgKCFrZXljaGFpbnMpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignbWlzc2luZyByZXF1aXJlZCBwYXJhbSBrZXljaGFpbnMnKTtcbiAgICB9XG5cbiAgICBhc3NlcnRGaXhlZFNjcmlwdFdhbGxldEFkZHJlc3ModGhpcy53YXNtTmFtZSwge1xuICAgICAgYWRkcmVzcyxcbiAgICAgIGtleWNoYWlucyxcbiAgICAgIGZvcm1hdDogcGFyYW1zLmZvcm1hdCA/PyAnYmFzZTU4JyxcbiAgICAgIGNoYWluLFxuICAgICAgaW5kZXgsXG4gICAgfSk7XG5cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBMb2NhbGx5IGRlcml2ZSBhIGZpeGVkLXNjcmlwdCAoMi1vZi0zIG11bHRpc2lnKSB3YWxsZXQgcmVjZWl2ZSBhZGRyZXNzIGZyb20gdGhlIHhwdWIgdHJpcGxlXG4gICAqIGFuZCBhIGNoYWluL2luZGV4LCB1c2luZyBwdWJsaWMga2V5cyBvbmx5IChubyBwcml2YXRlIGtleXMsIG5vIG5ldHdvcmsgYWNjZXNzKS4gVGhpcyBpcyB0aGVcbiAgICogaW52ZXJzZSBvZiB7QGxpbmsgaXNXYWxsZXRBZGRyZXNzfSwgZGVsZWdhdGluZyB0byB0aGUgc2FtZSBgZ2VuZXJhdGVBZGRyZXNzYCB1c2VkIGJ5IHRoZVxuICAgKiB2ZXJpZmljYXRpb24gcGF0aCwgc28gZGVyaXZlIGFuZCB2ZXJpZnkgY2FuIG5ldmVyIGRpdmVyZ2UuXG4gICAqXG4gICAqIFRoZSBgY2hhaW5gIGNvZGUgc2VsZWN0cyB0aGUgc2NyaXB0IHR5cGUgKGUuZy4gMC8xID0gUDJTSCwgMjAvMjEgPSBQMldTSC9iZWNoMzIsIDMwLzMxID0gUDJUUik7XG4gICAqIGFuIG9wdGlvbmFsIGBmb3JtYXRgIG92ZXJyaWRlcyB0aGUgYWRkcmVzcyBlbmNvZGluZy5cbiAgICogQHBhcmFtIHBhcmFtcyBrZXljaGFpbnMgKHhwdWIgdHJpcGxlIHZpYSBgcHViYCksIGNoYWluLCBpbmRleCwgYW5kIG9wdGlvbmFsIGZvcm1hdFxuICAgKiBAcmV0dXJucyB0aGUgZGVyaXZlZCBhZGRyZXNzIGFuZCB0aGUgY2hhaW4vaW5kZXggdXNlZFxuICAgKi9cbiAgYXN5bmMgZGVyaXZlQWRkcmVzcyhwYXJhbXM6IERlcml2ZUFkZHJlc3NPcHRpb25zKTogUHJvbWlzZTxEZXJpdmVBZGRyZXNzUmVzdWx0PiB7XG4gICAgY29uc3QgeyBrZXljaGFpbnMsIGNoYWluLCBpbmRleCwgZm9ybWF0IH0gPSBwYXJhbXM7XG5cbiAgICBpZiAoIWtleWNoYWlucykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdtaXNzaW5nIHJlcXVpcmVkIHBhcmFtIGtleWNoYWlucycpO1xuICAgIH1cblxuICAgIGNvbnN0IGFkZHJlc3MgPSBnZW5lcmF0ZUFkZHJlc3ModGhpcy53YXNtTmFtZSwge1xuICAgICAgLy8gZml4ZWQtc2NyaXB0IChtdWx0aXNpZykgY29pbnMgZGVyaXZlIGZyb20gdGhlIHhwdWIgdHJpcGxlIHZpYSBgcHViYFxuICAgICAga2V5Y2hhaW5zOiBrZXljaGFpbnMgYXMgeyBwdWI6IHN0cmluZyB9W10sXG4gICAgICBjaGFpbixcbiAgICAgIGluZGV4LFxuICAgICAgZm9ybWF0LFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIHsgYWRkcmVzcywgY2hhaW4sIGluZGV4IH07XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIGFkZHJlc3NUeXBlXG4gICAqIEByZXR1cm5zIHRydWUgaWZmIGNvaW4gc3VwcG9ydHMgc3BlbmRpbmcgZnJvbSB1bnNwZW50VHlwZVxuICAgKi9cbiAgc3VwcG9ydHNBZGRyZXNzVHlwZShhZGRyZXNzVHlwZTogU2NyaXB0VHlwZTJPZjMpOiBib29sZWFuIHtcbiAgICByZXR1cm4gZml4ZWRTY3JpcHRXYWxsZXQuc3VwcG9ydHNTY3JpcHRUeXBlKHRoaXMud2FzbU5hbWUsIGFkZHJlc3NUeXBlKTtcbiAgfVxuXG4gIC8qKiBpbmhlcml0ZWQgZG9jICovXG4gIGdldERlZmF1bHRNdWx0aXNpZ1R5cGUoKTogTXVsdGlzaWdUeXBlIHtcbiAgICByZXR1cm4gbXVsdGlzaWdUeXBlcy5vbmNoYWluO1xuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSBjaGFpblxuICAgKiBAcmV0dXJuIHRydWUgaWZmIGNvaW4gc3VwcG9ydHMgc3BlbmRpbmcgZnJvbSBjaGFpblxuICAgKi9cbiAgc3VwcG9ydHNBZGRyZXNzQ2hhaW4oY2hhaW46IG51bWJlcik6IGJvb2xlYW4ge1xuICAgIHJldHVybiAoXG4gICAgICBmaXhlZFNjcmlwdFdhbGxldC5DaGFpbkNvZGUuaXMoY2hhaW4pICYmXG4gICAgICB0aGlzLnN1cHBvcnRzQWRkcmVzc1R5cGUoZml4ZWRTY3JpcHRXYWxsZXQuQ2hhaW5Db2RlLnNjcmlwdFR5cGUoY2hhaW4pIGFzIFNjcmlwdFR5cGUyT2YzKVxuICAgICk7XG4gIH1cblxuICBrZXlJZHNGb3JTaWduaW5nKCk6IG51bWJlcltdIHtcbiAgICByZXR1cm4gW0tleUluZGljZXMuVVNFUiwgS2V5SW5kaWNlcy5CQUNLVVAsIEtleUluZGljZXMuQklUR09dO1xuICB9XG5cbiAgLyoqXG4gICAqIEByZXR1cm5zIGlucHV0IHBzYnQgYWRkZWQgd2l0aCBkZXRlcm1pbmlzdGljIE11U2lnMiBub25jZSBmb3IgYml0Z28ga2V5IGZvciBlYWNoIE11U2lnMiBpbnB1dHMuXG4gICAqIEBwYXJhbSBwc2J0IGFsbCBNdVNpZzIgaW5wdXRzIHNob3VsZCBjb250YWluIHVzZXIgTXVTaWcyIG5vbmNlXG4gICAqIEBwYXJhbSB3YWxsZXRJZFxuICAgKi9cbiAgYXN5bmMgZ2V0TXVzaWcyTm9uY2VzKHBzYnQ6IGZpeGVkU2NyaXB0V2FsbGV0LkJpdEdvUHNidCwgd2FsbGV0SWQ6IHN0cmluZyk6IFByb21pc2U8Zml4ZWRTY3JpcHRXYWxsZXQuQml0R29Qc2J0PiB7XG4gICAgY29uc3QgYnVmZmVyID0gZW5jb2RlVHJhbnNhY3Rpb24ocHNidCk7XG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLmJpdGdvXG4gICAgICAucG9zdCh0aGlzLnVybCgnL3dhbGxldC8nICsgd2FsbGV0SWQgKyAnL3R4L3NpZ25wc2J0JykpXG4gICAgICAuc2VuZCh7IHBzYnQ6IGJ1ZmZlci50b1N0cmluZygnaGV4JykgfSlcbiAgICAgIC5yZXN1bHQoKTtcbiAgICByZXR1cm4gZGVjb2RlUHNidChyZXNwb25zZS5wc2J0LCB0aGlzLndhc21OYW1lKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVwcmVjYXRlZCBVc2UgZ2V0TXVzaWcyTm9uY2VzIGluc3RlYWRcbiAgICogQHJldHVybnMgaW5wdXQgcHNidCBhZGRlZCB3aXRoIGRldGVybWluaXN0aWMgTXVTaWcyIG5vbmNlIGZvciBiaXRnbyBrZXkgZm9yIGVhY2ggTXVTaWcyIGlucHV0cy5cbiAgICogQHBhcmFtIHBzYnRIZXggYWxsIE11U2lnMiBpbnB1dHMgc2hvdWxkIGNvbnRhaW4gdXNlciBNdVNpZzIgbm9uY2VcbiAgICogQHBhcmFtIHdhbGxldElkXG4gICAqL1xuICBhc3luYyBzaWduUHNidChwc2J0SGV4OiBzdHJpbmcsIHdhbGxldElkOiBzdHJpbmcpOiBQcm9taXNlPFNpZ25Qc2J0UmVzcG9uc2U+IHtcbiAgICBjb25zdCBwc2J0ID0gYXdhaXQgdGhpcy5nZXRNdXNpZzJOb25jZXModGhpcy5kZWNvZGVUcmFuc2FjdGlvbkFzUHNidChwc2J0SGV4KSwgd2FsbGV0SWQpO1xuICAgIHJldHVybiB7IHBzYnQ6IGVuY29kZVRyYW5zYWN0aW9uKHBzYnQpLnRvU3RyaW5nKCdoZXgnKSB9O1xuICB9XG5cbiAgLyoqXG4gICAqIEByZXR1cm5zIGlucHV0IHBzYnQgYWRkZWQgd2l0aCBkZXRlcm1pbmlzdGljIE11U2lnMiBub25jZSBmb3IgYml0Z28ga2V5IGZvciBlYWNoIE11U2lnMiBpbnB1dHMgZnJvbSBPVkMuXG4gICAqIEBwYXJhbSBvdmNKc29uIEpTT04gb2JqZWN0IHByb3ZpZGVkIGJ5IE9WQyB3aXRoIGZpZWxkcyBwc2J0SGV4IGFuZCB3YWxsZXRJZFxuICAgKi9cbiAgYXN5bmMgc2lnblBzYnRGcm9tT1ZDKG92Y0pzb246IFJlY29yZDxzdHJpbmcsIHVua25vd24+KTogUHJvbWlzZTxSZWNvcmQ8c3RyaW5nLCB1bmtub3duPj4ge1xuICAgIGFzc2VydChvdmNKc29uWydwc2J0SGV4J10sICdvdmNKc29uIG11c3QgY29udGFpbiBwc2J0SGV4Jyk7XG4gICAgYXNzZXJ0KG92Y0pzb25bJ3dhbGxldElkJ10sICdvdmNKc29uIG11c3QgY29udGFpbiB3YWxsZXRJZCcpO1xuICAgIGNvbnN0IGhleCA9IG92Y0pzb25bJ3BzYnRIZXgnXSBhcyBzdHJpbmc7XG4gICAgY29uc3Qgd2FsbGV0SWQgPSBvdmNKc29uWyd3YWxsZXRJZCddIGFzIHN0cmluZztcbiAgICBjb25zdCBwc2J0ID0gYXdhaXQgdGhpcy5nZXRNdXNpZzJOb25jZXModGhpcy5kZWNvZGVUcmFuc2FjdGlvbkFzUHNidChoZXgpLCB3YWxsZXRJZCk7XG4gICAgcmV0dXJuIF8uZXh0ZW5kKG92Y0pzb24sIHsgdHhIZXg6IGVuY29kZVRyYW5zYWN0aW9uKHBzYnQpLnRvU3RyaW5nKCdoZXgnKSB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBc3NlbWJsZSBrZXljaGFpbiBhbmQgaGFsZi1zaWduIHByZWJ1aWx0IHRyYW5zYWN0aW9uXG4gICAqIEBwYXJhbSBwYXJhbXMgLSB7QHNlZSBTaWduVHJhbnNhY3Rpb25PcHRpb25zfVxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxTaWduZWRUcmFuc2FjdGlvbiB8IEhhbGZTaWduZWRVdHhvVHJhbnNhY3Rpb24+fVxuICAgKi9cbiAgYXN5bmMgc2lnblRyYW5zYWN0aW9uPFROdW1iZXIgZXh0ZW5kcyBudW1iZXIgfCBiaWdpbnQgPSBudW1iZXI+KFxuICAgIHBhcmFtczogU2lnblRyYW5zYWN0aW9uT3B0aW9uczxUTnVtYmVyPlxuICApOiBQcm9taXNlPFNpZ25lZFRyYW5zYWN0aW9uIHwgSGFsZlNpZ25lZFV0eG9UcmFuc2FjdGlvbj4ge1xuICAgIHJldHVybiBzaWduVHJhbnNhY3Rpb248VE51bWJlcj4odGhpcywgdGhpcy5iaXRnbywgcGFyYW1zKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTaWduIGEgdHJhbnNhY3Rpb24gd2l0aCBhIGN1c3RvbSBzaWduaW5nIGZ1bmN0aW9uLiBFeGFtcGxlIHVzZSBjYXNlIGlzIGV4cHJlc3MgZXh0ZXJuYWwgc2lnbmVyXG4gICAqIEBwYXJhbSBjdXN0b21TaWduaW5nRnVuY3Rpb24gY3VzdG9tIHNpZ25pbmcgZnVuY3Rpb24gdGhhdCByZXR1cm5zIGEgc2luZ2xlIHNpZ25lZCB0cmFuc2FjdGlvblxuICAgKiBAcGFyYW0gc2lnblRyYW5zYWN0aW9uUGFyYW1zIHBhcmFtZXRlcnMgZm9yIGN1c3RvbSBzaWduaW5nIGZ1bmN0aW9uLiBJbmNsdWRlcyB0eFByZWJ1aWxkIGFuZCBwdWJzXG4gICAqXG4gICAqIEByZXR1cm5zIHNpZ25lZCB0cmFuc2FjdGlvbiBhcyBoZXggc3RyaW5nXG4gICAqL1xuICBhc3luYyBzaWduV2l0aEN1c3RvbVNpZ25pbmdGdW5jdGlvbjxUTnVtYmVyIGV4dGVuZHMgbnVtYmVyIHwgYmlnaW50PihcbiAgICBjdXN0b21TaWduaW5nRnVuY3Rpb246IFV0eG9DdXN0b21TaWduaW5nRnVuY3Rpb248VE51bWJlcj4sXG4gICAgc2lnblRyYW5zYWN0aW9uUGFyYW1zOiB7IHR4UHJlYnVpbGQ6IFRyYW5zYWN0aW9uUHJlYnVpbGQ8VE51bWJlcj47IHB1YnM6IHN0cmluZ1tdIH1cbiAgKTogUHJvbWlzZTxTaWduZWRUcmFuc2FjdGlvbj4ge1xuICAgIGNvbnN0IHR4SGV4ID0gc2lnblRyYW5zYWN0aW9uUGFyYW1zLnR4UHJlYnVpbGQudHhIZXg7XG4gICAgYXNzZXJ0KHR4SGV4LCAnbWlzc2luZyB0eEhleCBwYXJhbWV0ZXInKTtcblxuICAgIGNvbnN0IHR4ID0gdGhpcy5kZWNvZGVUcmFuc2FjdGlvbih0eEhleCk7XG5cbiAgICBjb25zdCBpc1R4V2l0aEtleVBhdGhTcGVuZElucHV0ID0gaGFzS2V5UGF0aFNwZW5kSW5wdXQodHgsIHNpZ25UcmFuc2FjdGlvblBhcmFtcy5wdWJzLCB0aGlzLm5hbWUpO1xuXG4gICAgaWYgKCFpc1R4V2l0aEtleVBhdGhTcGVuZElucHV0KSB7XG4gICAgICByZXR1cm4gYXdhaXQgY3VzdG9tU2lnbmluZ0Z1bmN0aW9uKHsgLi4uc2lnblRyYW5zYWN0aW9uUGFyYW1zLCBjb2luOiB0aGlzIH0pO1xuICAgIH1cblxuICAgIGNvbnN0IGdldFR4SGV4ID0gKHY6IFNpZ25lZFRyYW5zYWN0aW9uKTogc3RyaW5nID0+IHtcbiAgICAgIGlmICgndHhIZXgnIGluIHYpIHtcbiAgICAgICAgcmV0dXJuIHYudHhIZXg7XG4gICAgICB9XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ3R4SGV4IG5vdCBmb3VuZCBpbiBzaWduVHJhbnNhY3Rpb24gcmVzdWx0Jyk7XG4gICAgfTtcblxuICAgIGNvbnN0IHNpZ25lck5vbmNlVHggPSBhd2FpdCBjdXN0b21TaWduaW5nRnVuY3Rpb24oe1xuICAgICAgLi4uc2lnblRyYW5zYWN0aW9uUGFyYW1zLFxuICAgICAgc2lnbmluZ1N0ZXA6ICdzaWduZXJOb25jZScsXG4gICAgICBjb2luOiB0aGlzLFxuICAgIH0pO1xuXG4gICAgY29uc3QgeyBwdWJzIH0gPSBzaWduVHJhbnNhY3Rpb25QYXJhbXM7XG4gICAgYXNzZXJ0KHB1YnMgPT09IHVuZGVmaW5lZCB8fCBpc1RyaXBsZShwdWJzKSk7XG5cbiAgICBjb25zdCBjb3NpZ25lck5vbmNlVHggPSBhd2FpdCB0aGlzLnNpZ25UcmFuc2FjdGlvbjxUTnVtYmVyPih7XG4gICAgICAuLi5zaWduVHJhbnNhY3Rpb25QYXJhbXMsXG4gICAgICBwdWJzLFxuICAgICAgdHhQcmVidWlsZDogeyAuLi5zaWduVHJhbnNhY3Rpb25QYXJhbXMudHhQcmVidWlsZCwgdHhIZXg6IGdldFR4SGV4KHNpZ25lck5vbmNlVHgpIH0sXG4gICAgICBzaWduaW5nU3RlcDogJ2Nvc2lnbmVyTm9uY2UnLFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIGF3YWl0IGN1c3RvbVNpZ25pbmdGdW5jdGlvbih7XG4gICAgICAuLi5zaWduVHJhbnNhY3Rpb25QYXJhbXMsXG4gICAgICB0eFByZWJ1aWxkOiB7IC4uLnNpZ25UcmFuc2FjdGlvblBhcmFtcy50eFByZWJ1aWxkLCB0eEhleDogZ2V0VHhIZXgoY29zaWduZXJOb25jZVR4KSB9LFxuICAgICAgc2lnbmluZ1N0ZXA6ICdzaWduZXJTaWduYXR1cmUnLFxuICAgICAgY29pbjogdGhpcyxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0gdW5zcGVudFxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAgICovXG4gIGlzQml0R29UYWludGVkVW5zcGVudDxUTnVtYmVyIGV4dGVuZHMgbnVtYmVyIHwgYmlnaW50Pih1bnNwZW50OiBVbnNwZW50PFROdW1iZXI+KTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIGlzUmVwbGF5UHJvdGVjdGlvblVuc3BlbnQodW5zcGVudCwgdGhpcy5uYW1lKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZWNvbXBvc2UgYSByYXcgcHNidC90cmFuc2FjdGlvbiBpbnRvIHVzZWZ1bCBpbmZvcm1hdGlvbiwgc3VjaCBhcyB0aGUgdG90YWwgYW1vdW50cyxcbiAgICogY2hhbmdlIGFtb3VudHMsIGFuZCB0cmFuc2FjdGlvbiBvdXRwdXRzLlxuICAgKiBAcGFyYW0gcGFyYW1zXG4gICAqL1xuICBvdmVycmlkZSBhc3luYyBleHBsYWluVHJhbnNhY3Rpb248VE51bWJlciBleHRlbmRzIG51bWJlciB8IGJpZ2ludCA9IG51bWJlcj4oXG4gICAgcGFyYW1zOiBFeHBsYWluVHJhbnNhY3Rpb25PcHRpb25zPFROdW1iZXI+LFxuICAgIHdhbGxldD86IElXYWxsZXRcbiAgKTogUHJvbWlzZTxUcmFuc2FjdGlvbkV4cGxhbmF0aW9uPiB7XG4gICAgaWYgKCFwYXJhbXMucHVicykge1xuICAgICAgLy8gaWYgbm8gcHVicyBhcmUgcHJvdmlkZWQsIG9wcG9ydHVuaXN0aWNhbGx5IGZldGNoIHRoZSBrZXljaGFpbnMgZnJvbSB0aGUgd2FsbGV0XG4gICAgICBpZiAod2FsbGV0KSB7XG4gICAgICAgIGNvbnN0IGtleWNoYWlucyA9IGF3YWl0IGZldGNoS2V5Y2hhaW5zKHRoaXMsIHdhbGxldCk7XG4gICAgICAgIHBhcmFtcy5wdWJzID0gdG9CaXAzMlRyaXBsZShrZXljaGFpbnMpLm1hcCgoaykgPT4gay5uZXV0ZXJlZCgpLnRvQmFzZTU4KCkpIGFzIFRyaXBsZTxzdHJpbmc+O1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAod2FsbGV0ICYmIGlzRGVzY3JpcHRvcldhbGxldCh3YWxsZXQpKSB7XG4gICAgICAvLyBEZXNjcmlwdG9yIHdhbGxldHMgZGVjb2RlIHByZWJ1aWxkIGJ5dGVzIHN0cmFpZ2h0IGludG8gdGhlIHdhc20tdXR4b1xuICAgICAgLy8gZGVzY3JpcHRvciBQc2J0LCBza2lwcGluZyB0aGUgZml4ZWRTY3JpcHRXYWxsZXQuQml0R29Qc2J0IGludGVybWVkaWF0ZS5cbiAgICAgIHJldHVybiBleHBsYWluVHgoZGVjb2RlRGVzY3JpcHRvclBzYnQocGFyYW1zKSwgeyAuLi5wYXJhbXMsIHdhbGxldCB9LCB0aGlzLndhc21OYW1lLCB0aGlzLmFkZHJlc3NDb2RlYyk7XG4gICAgfVxuICAgIHJldHVybiBleHBsYWluVHgoXG4gICAgICB0aGlzLmRlY29kZVRyYW5zYWN0aW9uRnJvbVByZWJ1aWxkKHBhcmFtcyksXG4gICAgICB7IC4uLnBhcmFtcywgd2FsbGV0IH0sXG4gICAgICB0aGlzLndhc21OYW1lLFxuICAgICAgdGhpcy5hZGRyZXNzQ29kZWNcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXByZWNhdGVkIC0gdXNlIHtAc2VlIGJhY2t1cEtleVJlY292ZXJ5fVxuICAgKiBCdWlsZHMgYSBmdW5kcyByZWNvdmVyeSB0cmFuc2FjdGlvbiB3aXRob3V0IEJpdEdvXG4gICAqIEBwYXJhbSBwYXJhbXMgLSB7QHNlZSBiYWNrdXBLZXlSZWNvdmVyeX1cbiAgICovXG4gIGFzeW5jIHJlY292ZXIocGFyYW1zOiBSZWNvdmVyUGFyYW1zKTogUmV0dXJuVHlwZTx0eXBlb2YgYmFja3VwS2V5UmVjb3Zlcnk+IHtcbiAgICByZXR1cm4gYmFja3VwS2V5UmVjb3ZlcnkodGhpcywgdGhpcy5iaXRnbywgcGFyYW1zKTtcbiAgfVxuXG4gIGFzeW5jIHJlY292ZXJWMShwYXJhbXM6IFYxUmVjb3ZlclBhcmFtcyk6IFJldHVyblR5cGU8dHlwZW9mIHYxQmFja3VwS2V5UmVjb3Zlcnk+IHtcbiAgICByZXR1cm4gdjFCYWNrdXBLZXlSZWNvdmVyeSh0aGlzLCB0aGlzLmJpdGdvLCBwYXJhbXMpO1xuICB9XG5cbiAgYXN5bmMgc3dlZXBWMShwYXJhbXM6IFYxU3dlZXBQYXJhbXMpOiBSZXR1cm5UeXBlPHR5cGVvZiB2MVN3ZWVwPiB7XG4gICAgcmV0dXJuIHYxU3dlZXAodGhpcywgdGhpcy5iaXRnbywgcGFyYW1zKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZWNvdmVyIGNvaW4gdGhhdCB3YXMgc2VudCB0byB3cm9uZyBjaGFpblxuICAgKiBAcGFyYW0gcGFyYW1zXG4gICAqIEBwYXJhbSBwYXJhbXMudHhpZCBUaGUgdHhpZCBvZiB0aGUgZmF1bHR5IHRyYW5zYWN0aW9uXG4gICAqIEBwYXJhbSBwYXJhbXMucmVjb3ZlcnlBZGRyZXNzIGFkZHJlc3MgdG8gc2VuZCByZWNvdmVyZWQgZnVuZHMgdG9cbiAgICogQHBhcmFtIHBhcmFtcy53YWxsZXQgdGhlIHdhbGxldCB0aGF0IHJlY2VpdmVkIHRoZSBmdW5kc1xuICAgKiBAcGFyYW0gcGFyYW1zLnJlY292ZXJ5Q29pbiB0aGUgY29pbiB0eXBlIG9mIHRoZSB3YWxsZXQgdGhhdCByZWNlaXZlZCB0aGUgZnVuZHNcbiAgICogQHBhcmFtIHBhcmFtcy5zaWduZWQgcmV0dXJuIGEgaGFsZi1zaWduZWQgdHJhbnNhY3Rpb24gKGRlZmF1bHQ9dHJ1ZSlcbiAgICogQHBhcmFtIHBhcmFtcy53YWxsZXRQYXNzcGhyYXNlIHRoZSB3YWxsZXQgcGFzc3BocmFzZVxuICAgKiBAcGFyYW0gcGFyYW1zLnhwcnYgdGhlIHVuZW5jcnlwdGVkIHhwcnYgKHVzZWQgaW5zdGVhZCBvZiB3YWxsZXQgcGFzc3BocmFzZSlcbiAgICogQHBhcmFtIHBhcmFtcy5hcGlLZXkgZm9yIHV0eG8gY29pbnMgb3RoZXIgdGhhbiBbQlRDLFRCVENdIHRoaXMgaXMgYSBCbG9jayBDaGFpciBhcGkga2V5XG4gICAqIEByZXR1cm5zIHsqfVxuICAgKi9cbiAgYXN5bmMgcmVjb3ZlckZyb21Xcm9uZ0NoYWluPFROdW1iZXIgZXh0ZW5kcyBudW1iZXIgfCBiaWdpbnQgPSBudW1iZXI+KFxuICAgIHBhcmFtczogUmVjb3ZlckZyb21Xcm9uZ0NoYWluT3B0aW9uc1xuICApOiBQcm9taXNlPENyb3NzQ2hhaW5SZWNvdmVyeVNpZ25lZDxUTnVtYmVyPiB8IENyb3NzQ2hhaW5SZWNvdmVyeVVuc2lnbmVkPFROdW1iZXI+PiB7XG4gICAgY29uc3QgeyB0eGlkLCByZWNvdmVyeUFkZHJlc3MsIHdhbGxldCwgd2FsbGV0UGFzc3BocmFzZSwgeHBydiwgYXBpS2V5IH0gPSBwYXJhbXM7XG5cbiAgICAvLyBwYXJhbXMucmVjb3ZlcnlDb2luIHVzZWQgdG8gYmUgcGFyYW1zLmNvaW4sIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5XG4gICAgY29uc3QgcmVjb3ZlcnlDb2luID0gcGFyYW1zLmNvaW4gfHwgcGFyYW1zLnJlY292ZXJ5Q29pbjtcbiAgICBpZiAoIXJlY292ZXJ5Q29pbikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdtaXNzaW5nIHJlcXVpcmVkIG9iamVjdCByZWNvdmVyeUNvaW4nKTtcbiAgICB9XG4gICAgLy8gc2lnbmVkIHNob3VsZCBkZWZhdWx0IHRvIHRydWUsIGFuZCBvbmx5IGJlIGRpc2FibGVkIGlmIGV4cGxpY2l0bHkgc2V0IHRvIGZhbHNlIChub3QgdW5kZWZpbmVkKVxuICAgIGNvbnN0IHNpZ25lZCA9IHBhcmFtcy5zaWduZWQgIT09IGZhbHNlO1xuXG4gICAgY29uc3Qgc291cmNlQ29pbkZhbWlseSA9IHRoaXMuZ2V0RmFtaWx5KCk7XG4gICAgY29uc3QgcmVjb3ZlcnlDb2luRmFtaWx5ID0gcmVjb3ZlcnlDb2luLmdldEZhbWlseSgpO1xuICAgIGNvbnN0IHN1cHBvcnRlZFJlY292ZXJ5Q29pbnMgPSBzdXBwb3J0ZWRDcm9zc0NoYWluUmVjb3Zlcmllc1tzb3VyY2VDb2luRmFtaWx5XTtcblxuICAgIGlmIChfLmlzVW5kZWZpbmVkKHN1cHBvcnRlZFJlY292ZXJ5Q29pbnMpIHx8ICFzdXBwb3J0ZWRSZWNvdmVyeUNvaW5zLmluY2x1ZGVzKHJlY292ZXJ5Q29pbkZhbWlseSkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgUmVjb3Zlcnkgb2YgJHtzb3VyY2VDb2luRmFtaWx5fSBiYWxhbmNlcyBmcm9tICR7cmVjb3ZlcnlDb2luRmFtaWx5fSB3YWxsZXRzIGlzIG5vdCBzdXBwb3J0ZWQuYCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGF3YWl0IHJlY292ZXJDcm9zc0NoYWluPFROdW1iZXI+KHRoaXMuYml0Z28sIHtcbiAgICAgIHNvdXJjZUNvaW46IHRoaXMsXG4gICAgICByZWNvdmVyeUNvaW4sXG4gICAgICB3YWxsZXRJZDogd2FsbGV0LFxuICAgICAgdHhpZCxcbiAgICAgIHJlY292ZXJ5QWRkcmVzcyxcbiAgICAgIHdhbGxldFBhc3NwaHJhc2U6IHNpZ25lZCA/IHdhbGxldFBhc3NwaHJhc2UgOiB1bmRlZmluZWQsXG4gICAgICB4cHJ2OiBzaWduZWQgPyB4cHJ2IDogdW5kZWZpbmVkLFxuICAgICAgYXBpS2V5LFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEdlbmVyYXRlIGJpcDMyIGtleSBwYWlyXG4gICAqXG4gICAqIEBwYXJhbSBzZWVkXG4gICAqIEByZXR1cm5zIHtPYmplY3R9IG9iamVjdCB3aXRoIGdlbmVyYXRlZCBwdWIgYW5kIHBydlxuICAgKi9cbiAgZ2VuZXJhdGVLZXlQYWlyKHNlZWQ6IEJ1ZmZlcik6IHsgcHViOiBzdHJpbmc7IHBydjogc3RyaW5nIH0ge1xuICAgIGlmICghc2VlZCkge1xuICAgICAgLy8gQW4gZXh0ZW5kZWQgcHJpdmF0ZSBrZXkgaGFzIGJvdGggYSBub3JtYWwgMjU2IGJpdCBwcml2YXRlIGtleSBhbmQgYSAyNTZcbiAgICAgIC8vIGJpdCBjaGFpbiBjb2RlLCBib3RoIG9mIHdoaWNoIG11c3QgYmUgcmFuZG9tLiA1MTIgYml0cyBpcyB0aGVyZWZvcmUgdGhlXG4gICAgICAvLyBtYXhpbXVtIGVudHJvcHkgYW5kIGdpdmVzIHVzIG1heGltdW0gc2VjdXJpdHkgYWdhaW5zdCBjcmFja2luZy5cbiAgICAgIHNlZWQgPSByYW5kb21CeXRlcyg1MTIgLyA4KTtcbiAgICB9XG4gICAgY29uc3QgZXh0ZW5kZWRLZXkgPSBCSVAzMi5mcm9tU2VlZChzZWVkKTtcbiAgICByZXR1cm4ge1xuICAgICAgcHViOiBleHRlbmRlZEtleS5uZXV0ZXJlZCgpLnRvQmFzZTU4KCksXG4gICAgICBwcnY6IGV4dGVuZGVkS2V5LnRvQmFzZTU4KCksXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZXRlcm1pbmVzIHRoZSBkZWZhdWx0IHRyYW5zYWN0aW9uIGZvcm1hdCBiYXNlZCBvbiB3YWxsZXQgcHJvcGVydGllcyBhbmQgbmV0d29ya1xuICAgKiBAcGFyYW0gd2FsbGV0IC0gVGhlIHdhbGxldCB0byBjaGVja1xuICAgKiBAcGFyYW0gcmVxdWVzdGVkRm9ybWF0IC0gT3B0aW9uYWwgZXhwbGljaXRseSByZXF1ZXN0ZWQgZm9ybWF0XG4gICAqIEByZXR1cm5zIFRoZSB0cmFuc2FjdGlvbiBmb3JtYXQgdG8gdXNlLCBvciB1bmRlZmluZWQgaWYgbm8gZGVmYXVsdCBhcHBsaWVzXG4gICAqL1xuICBnZXREZWZhdWx0VHhGb3JtYXQod2FsbGV0OiBXYWxsZXQsIHJlcXVlc3RlZEZvcm1hdD86IFR4Rm9ybWF0KTogVHhGb3JtYXQge1xuICAgIGlmIChyZXF1ZXN0ZWRGb3JtYXQgPT09ICdsZWdhY3knKSB7XG4gICAgICByZXR1cm4gJ3BzYnQtbGl0ZSc7XG4gICAgfVxuICAgIHJldHVybiByZXF1ZXN0ZWRGb3JtYXQgPz8gJ3BzYnQtbGl0ZSc7XG4gIH1cblxuICBhc3luYyBnZXRFeHRyYVByZWJ1aWxkUGFyYW1zKGJ1aWxkUGFyYW1zOiBFeHRyYVByZWJ1aWxkUGFyYW1zT3B0aW9ucyAmIHsgd2FsbGV0OiBXYWxsZXQgfSk6IFByb21pc2U8e1xuICAgIHR4Rm9ybWF0PzogVHhGb3JtYXQ7XG4gICAgY2hhbmdlQWRkcmVzc1R5cGU/OiBTY3JpcHRUeXBlMk9mM1tdIHwgU2NyaXB0VHlwZTJPZjM7XG4gICAgYWxsb3dlZElucHV0U2NyaXB0VHlwZXM/OiBTY3JpcHRUeXBlMk9mM1tdO1xuICB9PiB7XG4gICAgY29uc3QgcmVxdWVzdGVkRm9ybWF0ID0gYnVpbGRQYXJhbXMudHhGb3JtYXQgYXMgVHhGb3JtYXQgfCB1bmRlZmluZWQ7XG4gICAgY29uc3QgdHhGb3JtYXQgPSB0aGlzLmdldERlZmF1bHRUeEZvcm1hdChidWlsZFBhcmFtcy53YWxsZXQsIHJlcXVlc3RlZEZvcm1hdCk7XG4gICAgbGV0IGNoYW5nZUFkZHJlc3NUeXBlID0gYnVpbGRQYXJhbXMuY2hhbmdlQWRkcmVzc1R5cGUgYXMgU2NyaXB0VHlwZTJPZjNbXSB8IFNjcmlwdFR5cGUyT2YzIHwgdW5kZWZpbmVkO1xuXG4gICAgLy8gaWYgdGhlIGFkZHJlc3NUeXBlIGlzIG5vdCBzcGVjaWZpZWQsIHdlIG5lZWQgdG8gZGVmYXVsdCB0byBwMnRyTXVzaWcyIGZvciB0ZXN0bmV0IGhvdCB3YWxsZXRzIGZvciBzdGFnZWQgcm9sbG91dCBvZiBwMnRyTXVzaWcyXG4gICAgaWYgKFxuICAgICAgYnVpbGRQYXJhbXMuYWRkcmVzc1R5cGUgPT09IHVuZGVmaW5lZCAmJiAvLyBhZGRyZXNzVHlwZSBpcyBkZXByZWNhdGVkIGFuZCByZXBsYWNlZCBieSBgY2hhbmdlQWRkcmVzc2BcbiAgICAgIGJ1aWxkUGFyYW1zLmNoYW5nZUFkZHJlc3NUeXBlID09PSB1bmRlZmluZWQgJiZcbiAgICAgIGJ1aWxkUGFyYW1zLmNoYW5nZUFkZHJlc3MgPT09IHVuZGVmaW5lZCAmJlxuICAgICAgYnVpbGRQYXJhbXMud2FsbGV0LnR5cGUoKSA9PT0gJ2hvdCdcbiAgICApIHtcbiAgICAgIGNoYW5nZUFkZHJlc3NUeXBlID0gWydwMnRyTXVzaWcyJywgJ3Ayd3NoJywgJ3Ayc2hQMndzaCcsICdwMnNoJywgJ3AydHInXTtcbiAgICB9XG5cbiAgICAvLyBnZXRIYWxmU2lnbmVkTGVnYWN5Rm9ybWF0KCkgb25seSBzdXBwb3J0cyBwMm1zLWJhc2VkIHR5cGVzIChwMnNoLCBwMnNoUDJ3c2gsIHAyd3NoKS5cbiAgICAvLyBGaWx0ZXIgY2hhbmdlIG91dHB1dHMgYW5kIHJlc3RyaWN0IGlucHV0IHNlbGVjdGlvbiB0byB0aGVzZSB0eXBlcy5cbiAgICBjb25zdCBsZWdhY3lDb21wYXRpYmxlVHlwZXM6IFNjcmlwdFR5cGUyT2YzW10gPSBbJ3Ayc2gnLCAncDJzaFAyd3NoJywgJ3Ayd3NoJ107XG4gICAgbGV0IGFsbG93ZWRJbnB1dFNjcmlwdFR5cGVzOiBTY3JpcHRUeXBlMk9mM1tdIHwgdW5kZWZpbmVkO1xuXG4gICAgaWYgKHJlcXVlc3RlZEZvcm1hdCA9PT0gJ2xlZ2FjeScpIHtcbiAgICAgIGFsbG93ZWRJbnB1dFNjcmlwdFR5cGVzID0gbGVnYWN5Q29tcGF0aWJsZVR5cGVzO1xuICAgICAgaWYgKEFycmF5LmlzQXJyYXkoY2hhbmdlQWRkcmVzc1R5cGUpKSB7XG4gICAgICAgIGNoYW5nZUFkZHJlc3NUeXBlID0gY2hhbmdlQWRkcmVzc1R5cGUuZmlsdGVyKCh0KTogdCBpcyBTY3JpcHRUeXBlMk9mMyA9PlxuICAgICAgICAgIGxlZ2FjeUNvbXBhdGlibGVUeXBlcy5pbmNsdWRlcyh0IGFzIFNjcmlwdFR5cGUyT2YzKVxuICAgICAgICApO1xuICAgICAgfSBlbHNlIGlmIChjaGFuZ2VBZGRyZXNzVHlwZSAhPT0gdW5kZWZpbmVkICYmICFsZWdhY3lDb21wYXRpYmxlVHlwZXMuaW5jbHVkZXMoY2hhbmdlQWRkcmVzc1R5cGUpKSB7XG4gICAgICAgIGNoYW5nZUFkZHJlc3NUeXBlID0gbGVnYWN5Q29tcGF0aWJsZVR5cGVzO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICB0eEZvcm1hdCxcbiAgICAgIGNoYW5nZUFkZHJlc3NUeXBlLFxuICAgICAgYWxsb3dlZElucHV0U2NyaXB0VHlwZXMsXG4gICAgfTtcbiAgfVxuXG4gIHByZUNyZWF0ZUJpdEdvKHBhcmFtczogUHJlY3JlYXRlQml0R29PcHRpb25zKTogdm9pZCB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgYXN5bmMgcHJlc2lnblRyYW5zYWN0aW9uKHBhcmFtczogUHJlc2lnblRyYW5zYWN0aW9uT3B0aW9ucyk6IFByb21pc2U8YW55PiB7XG4gICAgaWYgKHBhcmFtcy53YWxsZXREYXRhICYmIGlzVXR4b1dhbGxldERhdGEocGFyYW1zLndhbGxldERhdGEpICYmIGlzRGVzY3JpcHRvcldhbGxldERhdGEocGFyYW1zLndhbGxldERhdGEpKSB7XG4gICAgICByZXR1cm4gcGFyYW1zO1xuICAgIH1cblxuICAgIGNvbnN0IHJldHVybkxlZ2FjeUZvcm1hdCA9IChwYXJhbXMgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4pLnR4Rm9ybWF0ID09PSAnbGVnYWN5JztcbiAgICByZXR1cm4geyAuLi5wYXJhbXMsIHJldHVybkxlZ2FjeUZvcm1hdCB9O1xuICB9XG5cbiAgYXN5bmMgc3VwcGxlbWVudEdlbmVyYXRlV2FsbGV0KFxuICAgIHdhbGxldFBhcmFtczogU3VwcGxlbWVudEdlbmVyYXRlV2FsbGV0T3B0aW9ucyxcbiAgICBrZXljaGFpbnM6IEtleWNoYWluc1RyaXBsZXRcbiAgKTogUHJvbWlzZTxhbnk+IHtcbiAgICByZXR1cm4gd2FsbGV0UGFyYW1zO1xuICB9XG5cbiAgdHJhbnNhY3Rpb25EYXRhQWxsb3dlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICB2YWx1ZWxlc3NUcmFuc2ZlckFsbG93ZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcHJlcGFyZUNvbGRUcmFuc2FjdGlvbjxUIGV4dGVuZHMgQmFzZVRyYW5zYWN0aW9uUHJlYnVpbGQ+KFxuICAgIHR4UHJlYnVpbGQ6IFQsXG4gICAga2V5Y2hhaW5zOiBUcmlwbGU8S2V5Y2hhaW4+XG4gICk6IFQgJiBDb2xkVHJhbnNhY3Rpb25QcmVidWlsZCB7XG4gICAgLy8gUFNCVHMgYWxyZWFkeSBjYXJyeSBCSVAtMzIgZGVyaXZhdGlvbiBpbmZvIGlubGluZSwgc28gb2ZmbGluZSBzaWduZXJzIGRvIG5vdCBuZWVkIHRoZSBleHRyYSBpbmZvcm1hdGlvblxuICAgIGlmICh0eXBlb2YgdHhQcmVidWlsZC50eEhleCA9PT0gJ3N0cmluZycgJiYgaGFzUHNidE1hZ2ljKHN0cmluZ1RvQnVmZmVyVHJ5Rm9ybWF0cyh0eFByZWJ1aWxkLnR4SGV4LCBbJ2hleCddKSkpIHtcbiAgICAgIHJldHVybiB0eFByZWJ1aWxkIGFzIFQgJiBDb2xkVHJhbnNhY3Rpb25QcmVidWlsZDtcbiAgICB9XG4gICAgcmV0dXJuIHN1cGVyLnByZXBhcmVDb2xkVHJhbnNhY3Rpb24odHhQcmVidWlsZCwga2V5Y2hhaW5zKTtcbiAgfVxuXG4gIGdldFJlY292ZXJ5UHJvdmlkZXIoYXBpVG9rZW4/OiBzdHJpbmcpOiBSZWNvdmVyeVByb3ZpZGVyIHtcbiAgICByZXR1cm4gZm9yQ29pbih0aGlzLmdldENoYWluKCksIGFwaVRva2VuKTtcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdERvYyAqL1xuICBhdWRpdERlY3J5cHRlZEtleSh7XG4gICAgbXVsdGlTaWdUeXBlLFxuICAgIHB1YmxpY0tleSxcbiAgICBwcnYsXG4gIH06IHtcbiAgICBtdWx0aVNpZ1R5cGU6IE11bHRpc2lnVHlwZTtcbiAgICBwdWJsaWNLZXk6IHN0cmluZztcbiAgICBwcnY6IHN0cmluZztcbiAgfSk6IHZvaWQge1xuICAgIGlmIChtdWx0aVNpZ1R5cGUgPT09ICd0c3MnKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ3RzcyBhdWRpdGluZyBpcyBub3Qgc3VwcG9ydGVkIGZvciB0aGlzIGNvaW4nKTtcbiAgICB9XG4gICAgaWYgKCFpc1ZhbGlkUHJ2KHBydikgJiYgIWlzVmFsaWRYcHJ2KHBydikpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignaW52YWxpZCBwcml2YXRlIGtleScpO1xuICAgIH1cbiAgICBpZiAocHVibGljS2V5KSB7XG4gICAgICBjb25zdCBnZW5QdWJLZXkgPSBCSVAzMi5mcm9tQmFzZTU4KHBydikubmV1dGVyZWQoKS50b0Jhc2U1OCgpO1xuICAgICAgaWYgKGdlblB1YktleSAhPT0gcHVibGljS2V5KSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcigncHVibGljIGtleSBkb2VzIG5vdCBtYXRjaCBwcml2YXRlIGtleScpO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuIl19
@@ -2,6 +2,7 @@ import { fixedScriptWallet } from '@bitgo/wasm-utxo';
2
2
  import type { UnifiedRecipientPreference } from '@bitgo-beta/sdk-core';
3
3
  import { AddressCodec } from '../../transaction/recipient';
4
4
  import { UtxoCoinName, WasmUtxoCoinName } from '../../names';
5
+ import type { ZecAddressCodecOutput } from './types';
5
6
  export type ZcashAddressKind = 'transparent' | 'shielded';
6
7
  /**
7
8
  * Address codec for Zcash coins ('zec'/'tzec') that understands ZIP-316
@@ -44,6 +45,11 @@ export declare class ZecAddressCodec extends AddressCodec {
44
45
  * throws, since it has no Orchard receiver to resolve.
45
46
  */
46
47
  decode(address: string): Uint8Array;
48
+ /** Change addresses are always transparent wallet addresses. */
49
+ decodeChangeAddress(address: string): Uint8Array;
50
+ isMatchingScript(output: ZecAddressCodecOutput): boolean;
51
+ /** Preserve a shielded output's original UA only after validating it against the raw script. */
52
+ toExtendedAddressFormat(script: Buffer, address?: string): string;
47
53
  }
48
54
  /**
49
55
  * Whether `address` is a well-formed ZIP-316 Unified Address for `network`
@@ -1 +1 @@
1
- {"version":3,"file":"address.d.ts","sourceRoot":"","sources":["../../../../../src/impl/zec/address.ts"],"names":[],"mappings":"AAAA,OAAO,EAA0B,iBAAiB,EAA4B,MAAM,kBAAkB,CAAC;AACvG,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,sBAAsB,CAAC;AAEvE,OAAO,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAC3D,OAAO,EAAE,YAAY,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAE7D,MAAM,MAAM,gBAAgB,GAAG,aAAa,GAAG,UAAU,CAAC;AAE1D;;;;;;;;;;;GAWG;AACH,qBAAa,eAAgB,SAAQ,YAAY;IAC/C,+DAA+D;IAC/D,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAqC;IACtE,2EAA2E;IAC3E,OAAO,CAAC,QAAQ,CAAC,0BAA0B,CAA6B;gBAGtE,QAAQ,EAAE,YAAY,EACtB,QAAQ,EAAE,gBAAgB,EAC1B,0BAA0B,GAAE,0BAA0C;IAOxE;;;;;;;OAOG;IACM,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO;IAOjD;;;;;;;;;;;;OAYG;IACM,MAAM,CAAC,OAAO,EAAE,MAAM,GAAG,UAAU;CAiB7C;AAED;;;;GAIG;AACH,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,iBAAiB,CAAC,gBAAgB,GAAG,OAAO,CAM5G;AAED;;;;GAIG;AACH,wBAAgB,mBAAmB,CACjC,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,iBAAiB,CAAC,gBAAgB,GAC1C,gBAAgB,GAAG,SAAS,CAa9B;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,iBAAiB,CAAC,gBAAgB,GAAG,OAAO,CAEzG"}
1
+ {"version":3,"file":"address.d.ts","sourceRoot":"","sources":["../../../../../src/impl/zec/address.ts"],"names":[],"mappings":"AAAA,OAAO,EAA0B,iBAAiB,EAA4B,MAAM,kBAAkB,CAAC;AACvG,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,sBAAsB,CAAC;AAEvE,OAAO,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAC3D,OAAO,EAAE,YAAY,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAE7D,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,SAAS,CAAC;AAErD,MAAM,MAAM,gBAAgB,GAAG,aAAa,GAAG,UAAU,CAAC;AAE1D;;;;;;;;;;;GAWG;AACH,qBAAa,eAAgB,SAAQ,YAAY;IAC/C,+DAA+D;IAC/D,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAqC;IACtE,2EAA2E;IAC3E,OAAO,CAAC,QAAQ,CAAC,0BAA0B,CAA6B;gBAGtE,QAAQ,EAAE,YAAY,EACtB,QAAQ,EAAE,gBAAgB,EAC1B,0BAA0B,GAAE,0BAA0C;IAOxE;;;;;;;OAOG;IACM,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO;IAOjD;;;;;;;;;;;;OAYG;IACM,MAAM,CAAC,OAAO,EAAE,MAAM,GAAG,UAAU;IAkB5C,gEAAgE;IACvD,mBAAmB,CAAC,OAAO,EAAE,MAAM,GAAG,UAAU;IAGhD,gBAAgB,CAAC,MAAM,EAAE,qBAAqB,GAAG,OAAO;IA6BjE,gGAAgG;IACvF,uBAAuB,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM;CAM3E;AAED;;;;GAIG;AACH,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,iBAAiB,CAAC,gBAAgB,GAAG,OAAO,CAM5G;AAED;;;;GAIG;AACH,wBAAgB,mBAAmB,CACjC,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,iBAAiB,CAAC,gBAAgB,GAC1C,gBAAgB,GAAG,SAAS,CAa9B;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,iBAAiB,CAAC,gBAAgB,GAAG,OAAO,CAEzG"}
@@ -67,6 +67,43 @@ class ZecAddressCodec extends recipient_1.AddressCodec {
67
67
  }
68
68
  return wasm_utxo_1.zcashAddress.toShieldedReceiverWithCoin(address, this.wasmName);
69
69
  }
70
+ /** Change addresses are always transparent wallet addresses. */
71
+ decodeChangeAddress(address) {
72
+ return wasm_utxo_1.zcashAddress.toTransparentReceiverWithCoin(address, this.wasmName);
73
+ }
74
+ isMatchingScript(output) {
75
+ const address = output.address;
76
+ if (address === undefined || address === null) {
77
+ return true;
78
+ }
79
+ if (recipient_1.AddressCodec.isScriptRecipient(address)) {
80
+ return super.isMatchingScript(output);
81
+ }
82
+ const matchesOutput = (decode) => {
83
+ try {
84
+ return Buffer.from(decode()).equals(Buffer.from(output.script));
85
+ }
86
+ catch {
87
+ return false;
88
+ }
89
+ };
90
+ const isShielded = output.isShielded;
91
+ if (isShielded === true) {
92
+ return matchesOutput(() => wasm_utxo_1.zcashAddress.toShieldedReceiverWithCoin(address, this.wasmName));
93
+ }
94
+ if (isShielded === false) {
95
+ return matchesOutput(() => wasm_utxo_1.zcashAddress.toTransparentReceiverWithCoin(address, this.wasmName));
96
+ }
97
+ return (matchesOutput(() => wasm_utxo_1.zcashAddress.toTransparentReceiverWithCoin(address, this.wasmName)) ||
98
+ matchesOutput(() => wasm_utxo_1.zcashAddress.toShieldedReceiverWithCoin(address, this.wasmName)));
99
+ }
100
+ /** Preserve a shielded output's original UA only after validating it against the raw script. */
101
+ toExtendedAddressFormat(script, address) {
102
+ if (address !== undefined && !this.isMatchingScript({ address, script })) {
103
+ throw new Error(`address ${address} does not match the output script`);
104
+ }
105
+ return address ?? super.toExtendedAddressFormat(script);
106
+ }
70
107
  }
71
108
  exports.ZecAddressCodec = ZecAddressCodec;
72
109
  /**
@@ -117,4 +154,4 @@ function getZcashAddressKind(address, network) {
117
154
  function isValidZcashAddress(address, network) {
118
155
  return getZcashAddressKind(address, network) !== undefined;
119
156
  }
120
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWRkcmVzcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9pbXBsL3plYy9hZGRyZXNzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQXdGQSx3REFNQztBQU9ELGtEQWdCQztBQWNELGtEQUVDO0FBcklELGdEQUF1RztBQUd2RywyREFBMkQ7QUFLM0Q7Ozs7Ozs7Ozs7O0dBV0c7QUFDSCxNQUFhLGVBQWdCLFNBQVEsd0JBQVk7SUFNL0MsWUFDRSxRQUFzQixFQUN0QixRQUEwQixFQUMxQiw2QkFBeUQsYUFBYTtRQUV0RSxLQUFLLENBQUMsUUFBUSxFQUFFLFFBQVEsQ0FBQyxDQUFDO1FBQzFCLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxRQUE4QyxDQUFDO1FBQ3ZFLElBQUksQ0FBQywwQkFBMEIsR0FBRywwQkFBMEIsQ0FBQztJQUMvRCxDQUFDO0lBRUQ7Ozs7Ozs7T0FPRztJQUNNLGNBQWMsQ0FBQyxPQUFlO1FBQ3JDLE9BQU8sQ0FDTCx3QkFBWSxDQUFDLHNCQUFzQixDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDO1lBQzNELHdCQUFZLENBQUMsa0JBQWtCLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FDeEQsQ0FBQztJQUNKLENBQUM7SUFFRDs7Ozs7Ozs7Ozs7O09BWUc7SUFDTSxNQUFNLENBQUMsT0FBZTtRQUM3QixJQUFJLElBQUksQ0FBQywwQkFBMEIsS0FBSyxVQUFVLEVBQUUsQ0FBQztZQUNuRCxPQUFPLHdCQUFZLENBQUMsNkJBQTZCLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUM1RSxDQUFDO1FBQ0QseUZBQXlGO1FBQ3pGLHFGQUFxRjtRQUNyRixJQUFJLE9BQTBELENBQUM7UUFDL0QsSUFBSSxDQUFDO1lBQ0gsT0FBTyxHQUFHLDZCQUFpQixDQUFDLG1CQUFtQixDQUFDLEtBQUssQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLGdCQUFnQixDQUFDLENBQUM7UUFDeEYsQ0FBQztRQUFDLE1BQU0sQ0FBQztZQUNQLE1BQU0sSUFBSSxLQUFLLENBQUMsV0FBVyxPQUFPLHVDQUF1QyxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQyxDQUFDO1FBQ3BHLENBQUM7UUFDRCxJQUFJLENBQUMsT0FBTyxFQUFFLGtCQUFrQixFQUFFLENBQUM7WUFDakMsTUFBTSxJQUFJLEtBQUssQ0FBQyxXQUFXLE9BQU8saURBQWlELENBQUMsQ0FBQztRQUN2RixDQUFDO1FBQ0QsT0FBTyx3QkFBWSxDQUFDLDBCQUEwQixDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDekUsQ0FBQztDQUNGO0FBN0RELDBDQTZEQztBQUVEOzs7O0dBSUc7QUFDSCxTQUFnQixzQkFBc0IsQ0FBQyxPQUFlLEVBQUUsT0FBMkM7SUFDakcsSUFBSSxDQUFDO1FBQ0gsT0FBTyw2QkFBaUIsQ0FBQyxtQkFBbUIsQ0FBQyxLQUFLLENBQUMsT0FBTyxFQUFFLE9BQU8sQ0FBQyxDQUFDLGtCQUFrQixDQUFDO0lBQzFGLENBQUM7SUFBQyxNQUFNLENBQUM7UUFDUCxPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7QUFDSCxDQUFDO0FBRUQ7Ozs7R0FJRztBQUNILFNBQWdCLG1CQUFtQixDQUNqQyxPQUFlLEVBQ2YsT0FBMkM7SUFFM0Msa0ZBQWtGO0lBQ2xGLGdGQUFnRjtJQUNoRixpRkFBaUY7SUFDakYsSUFBSSxJQUFBLHNCQUFVLEVBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztRQUN4QixJQUFJLENBQUM7WUFDSCxtQkFBVyxDQUFDLHNCQUFzQixDQUFDLE9BQU8sRUFBRSxPQUFPLENBQUMsQ0FBQztZQUNyRCxPQUFPLGFBQWEsQ0FBQztRQUN2QixDQUFDO1FBQUMsTUFBTSxDQUFDO1lBQ1Asa0VBQWtFO1FBQ3BFLENBQUM7SUFDSCxDQUFDO0lBQ0QsT0FBTyxzQkFBc0IsQ0FBQyxPQUFPLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDO0FBQzNFLENBQUM7QUFFRDs7Ozs7Ozs7Ozs7R0FXRztBQUNILFNBQWdCLG1CQUFtQixDQUFDLE9BQWUsRUFBRSxPQUEyQztJQUM5RixPQUFPLG1CQUFtQixDQUFDLE9BQU8sRUFBRSxPQUFPLENBQUMsS0FBSyxTQUFTLENBQUM7QUFDN0QsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGFkZHJlc3MgYXMgd2FzbUFkZHJlc3MsIGZpeGVkU2NyaXB0V2FsbGV0LCBpc0NvaW5OYW1lLCB6Y2FzaEFkZHJlc3MgfSBmcm9tICdAYml0Z28vd2FzbS11dHhvJztcbmltcG9ydCB0eXBlIHsgVW5pZmllZFJlY2lwaWVudFByZWZlcmVuY2UgfSBmcm9tICdAYml0Z28tYmV0YS9zZGstY29yZSc7XG5cbmltcG9ydCB7IEFkZHJlc3NDb2RlYyB9IGZyb20gJy4uLy4uL3RyYW5zYWN0aW9uL3JlY2lwaWVudCc7XG5pbXBvcnQgeyBVdHhvQ29pbk5hbWUsIFdhc21VdHhvQ29pbk5hbWUgfSBmcm9tICcuLi8uLi9uYW1lcyc7XG5cbmV4cG9ydCB0eXBlIFpjYXNoQWRkcmVzc0tpbmQgPSAndHJhbnNwYXJlbnQnIHwgJ3NoaWVsZGVkJztcblxuLyoqXG4gKiBBZGRyZXNzIGNvZGVjIGZvciBaY2FzaCBjb2lucyAoJ3plYycvJ3R6ZWMnKSB0aGF0IHVuZGVyc3RhbmRzIFpJUC0zMTZcbiAqIFVuaWZpZWQgQWRkcmVzc2VzIGluIGFkZGl0aW9uIHRvIG9yZGluYXJ5IHRyYW5zcGFyZW50IGFkZHJlc3Nlcy5cbiAqXG4gKiAtIGBkZWNvZGVgIHJlc29sdmVzIHRoZSBieXRlcyBhIHJlY2lwaWVudCBwYXlzIHRvIChzZWUgaXRzIGRvYyk6IGJ5IGRlZmF1bHRcbiAqICAgdGhlIHRyYW5zcGFyZW50IHNjcmlwdFB1YktleTsgd2l0aCBgdW5pZmllZFJlY2lwaWVudFByZWZlcmVuY2U6ICdzaGllbGRlZCdgXG4gKiAgIHRoZSByYXcgT3JjaGFyZC9Jcm9ud29vZCByZWNlaXZlciBvZiBhIFVuaWZpZWQgQWRkcmVzcy5cbiAqIC0gYGVuY29kZWAvYHRvRXh0ZW5kZWRBZGRyZXNzRm9ybWF0YCBhcmUgdW5jaGFuZ2VkOiBzY3JpcHRzIGNhbiBvbmx5IGJlXG4gKiAgIHdyaXR0ZW4gYmFjayBvdXQgYXMgdHJhbnNwYXJlbnQgYWRkcmVzc2VzLlxuICogLSBgaXNWYWxpZEFkZHJlc3NgIGFjY2VwdHMgdHJhbnNwYXJlbnQgYWRkcmVzc2VzIGFuZCBVbmlmaWVkIEFkZHJlc3NlcyB3aXRoXG4gKiAgIGEgdHJhbnNwYXJlbnQgb3IgT3JjaGFyZCByZWNlaXZlci5cbiAqL1xuZXhwb3J0IGNsYXNzIFplY0FkZHJlc3NDb2RlYyBleHRlbmRzIEFkZHJlc3NDb2RlYyB7XG4gIC8qKiBUaGUgWmNhc2ggbmV0d29yayBuYW1lIGZvciB3YXNtIGNhbGxzIOKAlCAnemVjJyBvciAndHplYycuICovXG4gIHByaXZhdGUgcmVhZG9ubHkgemNhc2hOZXR3b3JrTmFtZTogZml4ZWRTY3JpcHRXYWxsZXQuWmNhc2hOZXR3b3JrTmFtZTtcbiAgLyoqIEhvdyBVbmlmaWVkIEFkZHJlc3MgcmVjaXBpZW50cyByZXNvbHZlIHdoZW4gdGhpcyBjb2RlYyBkZWNvZGVzIHRoZW0uICovXG4gIHByaXZhdGUgcmVhZG9ubHkgdW5pZmllZFJlY2lwaWVudFByZWZlcmVuY2U6IFVuaWZpZWRSZWNpcGllbnRQcmVmZXJlbmNlO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIGNvaW5OYW1lOiBVdHhvQ29pbk5hbWUsXG4gICAgd2FzbU5hbWU6IFdhc21VdHhvQ29pbk5hbWUsXG4gICAgdW5pZmllZFJlY2lwaWVudFByZWZlcmVuY2U6IFVuaWZpZWRSZWNpcGllbnRQcmVmZXJlbmNlID0gJ3RyYW5zcGFyZW50J1xuICApIHtcbiAgICBzdXBlcihjb2luTmFtZSwgd2FzbU5hbWUpO1xuICAgIHRoaXMuemNhc2hOZXR3b3JrTmFtZSA9IHdhc21OYW1lIGFzIGZpeGVkU2NyaXB0V2FsbGV0LlpjYXNoTmV0d29ya05hbWU7XG4gICAgdGhpcy51bmlmaWVkUmVjaXBpZW50UHJlZmVyZW5jZSA9IHVuaWZpZWRSZWNpcGllbnRQcmVmZXJlbmNlO1xuICB9XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgYGFkZHJlc3NgIGlzIGEgdmFsaWQgWmNhc2ggYWRkcmVzcyBmb3IgdGhpcyBjb2luJ3MgbmV0d29yay5cbiAgICpcbiAgICogTWlycm9ycyB0aGUgcHJlLWNvZGVjIGBaZWMuaXNWYWxpZEFkZHJlc3NgIGxvZ2ljIGV4YWN0bHk6IHRoZSBhZGRyZXNzIGlzXG4gICAqIHZhbGlkIGlmZiBpdCBoYXMgYSB1c2FibGUgdHJhbnNwYXJlbnQgcmVjZWl2ZXIgKGFuIG9yZGluYXJ5IHRyYW5zcGFyZW50XG4gICAqIGFkZHJlc3MsIG9yIGEgVUEgY2FycnlpbmcgYSB0cmFuc3BhcmVudCByZWNlaXZlcikgb3IgYW4gT3JjaGFyZCByZWNlaXZlclxuICAgKiAoYSBVQSBjYXJyeWluZyBvbmUpLlxuICAgKi9cbiAgb3ZlcnJpZGUgaXNWYWxpZEFkZHJlc3MoYWRkcmVzczogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIChcbiAgICAgIHpjYXNoQWRkcmVzcy5oYXNUcmFuc3BhcmVudFJlY2VpdmVyKGFkZHJlc3MsIHRoaXMud2FzbU5hbWUpIHx8XG4gICAgICB6Y2FzaEFkZHJlc3MuaGFzT3JjaGFyZFJlY2VpdmVyKGFkZHJlc3MsIHRoaXMud2FzbU5hbWUpXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXNvbHZlIGBhZGRyZXNzYCB0byB0aGUgYnl0ZXMgdGhpcyBjb2RlYydzIHVuaWZpZWQtcmVjaXBpZW50IHByZWZlcmVuY2UgcGF5cyB0by5cbiAgICpcbiAgICogLSBgJ3RyYW5zcGFyZW50J2AgKGRlZmF1bHQpIHJlc29sdmVzIHRoZSBzY3JpcHRQdWJLZXk6IGFuIG9yZGluYXJ5XG4gICAqICAgdHJhbnNwYXJlbnQgYWRkcmVzcyBkZWNvZGVzIHRvIGl0cyBvd24gc2NyaXB0LCBhbmQgYSBVQSB3aXRoIGFcbiAgICogICB0cmFuc3BhcmVudCByZWNlaXZlciBkZWNvZGVzIHRvIHRoYXQgcmVjZWl2ZXIncyBzY3JpcHQuIEEgVUEgd2l0aG91dCBhXG4gICAqICAgdHJhbnNwYXJlbnQgcmVjZWl2ZXIgKGUuZy4gT3JjaGFyZC1vbmx5KSB0aHJvd3MsIHNpbmNlIGEgc2hpZWxkZWRcbiAgICogICBvdXRwdXQgaGFzIG5vIHNjcmlwdC5cbiAgICogLSBgJ3NoaWVsZGVkJ2AgcmVzb2x2ZXMgdGhlIHJhdyBPcmNoYXJkIChJcm9ud29vZCkgcmVjZWl2ZXIg4oCUIHRoZVxuICAgKiAgIDQzLWJ5dGUgZGl2ZXJzaWZpZXIgKyBgcGtfZGAg4oCUIG9mIGEgVUEgY2Fycnlpbmcgb25lLiBBbnkgb3RoZXIgYWRkcmVzc1xuICAgKiAgIChwbGFpbiB0cmFuc3BhcmVudCwgdHJhbnNwYXJlbnQtb25seSBVQSwgbWFsZm9ybWVkLCB3cm9uZyBuZXR3b3JrKVxuICAgKiAgIHRocm93cywgc2luY2UgaXQgaGFzIG5vIE9yY2hhcmQgcmVjZWl2ZXIgdG8gcmVzb2x2ZS5cbiAgICovXG4gIG92ZXJyaWRlIGRlY29kZShhZGRyZXNzOiBzdHJpbmcpOiBVaW50OEFycmF5IHtcbiAgICBpZiAodGhpcy51bmlmaWVkUmVjaXBpZW50UHJlZmVyZW5jZSAhPT0gJ3NoaWVsZGVkJykge1xuICAgICAgcmV0dXJuIHpjYXNoQWRkcmVzcy50b1RyYW5zcGFyZW50UmVjZWl2ZXJXaXRoQ29pbihhZGRyZXNzLCB0aGlzLndhc21OYW1lKTtcbiAgICB9XG4gICAgLy8gVGhlIHJhdyBPcmNoYXJkIHJlY2VpdmVyIGV4aXN0cyBvbmx5IGZvciBhIFVuaWZpZWQgQWRkcmVzcyBjYXJyeWluZyBvbmU7IGFueXRoaW5nIGVsc2VcbiAgICAvLyAocGxhaW4gdHJhbnNwYXJlbnQgYWRkcmVzcywgdHJhbnNwYXJlbnQtb25seSBVQSwgbWFsZm9ybWVkLCB3cm9uZyBuZXR3b3JrKSB0aHJvd3MuXG4gICAgbGV0IHVuaWZpZWQ6IGZpeGVkU2NyaXB0V2FsbGV0LlpjYXNoVW5pZmllZEFkZHJlc3MgfCB1bmRlZmluZWQ7XG4gICAgdHJ5IHtcbiAgICAgIHVuaWZpZWQgPSBmaXhlZFNjcmlwdFdhbGxldC5aY2FzaFVuaWZpZWRBZGRyZXNzLnBhcnNlKGFkZHJlc3MsIHRoaXMuemNhc2hOZXR3b3JrTmFtZSk7XG4gICAgfSBjYXRjaCB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYGFkZHJlc3MgJHthZGRyZXNzfSBpcyBub3QgYSB2YWxpZCBhZGRyZXNzIGZvciBuZXR3b3JrICR7dGhpcy56Y2FzaE5ldHdvcmtOYW1lfWApO1xuICAgIH1cbiAgICBpZiAoIXVuaWZpZWQ/Lmhhc09yY2hhcmRSZWNlaXZlcikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBhZGRyZXNzICR7YWRkcmVzc30gaGFzIG5vIE9yY2hhcmQgcmVjZWl2ZXIgdG8gcmVzb2x2ZSBhcyBzaGllbGRlZGApO1xuICAgIH1cbiAgICByZXR1cm4gemNhc2hBZGRyZXNzLnRvU2hpZWxkZWRSZWNlaXZlcldpdGhDb2luKGFkZHJlc3MsIHRoaXMud2FzbU5hbWUpO1xuICB9XG59XG5cbi8qKlxuICogV2hldGhlciBgYWRkcmVzc2AgaXMgYSB3ZWxsLWZvcm1lZCBaSVAtMzE2IFVuaWZpZWQgQWRkcmVzcyBmb3IgYG5ldHdvcmtgXG4gKiB3aXRoIGFuIE9yY2hhcmQgcmVjZWl2ZXIuIEJpdEdvIG9ubHkgc3VwcG9ydHMgT3JjaGFyZCwgc28gYSBVQSB3aXRob3V0IG9uZVxuICogKGUuZy4gU2FwbGluZy0gb3IgdHJhbnNwYXJlbnQtb25seSkgaXMgbm90IGNvbnNpZGVyZWQgdmFsaWQgaGVyZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzU2hpZWxkZWRaY2FzaEFkZHJlc3MoYWRkcmVzczogc3RyaW5nLCBuZXR3b3JrOiBmaXhlZFNjcmlwdFdhbGxldC5aY2FzaE5ldHdvcmtOYW1lKTogYm9vbGVhbiB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIGZpeGVkU2NyaXB0V2FsbGV0LlpjYXNoVW5pZmllZEFkZHJlc3MucGFyc2UoYWRkcmVzcywgbmV0d29yaykuaGFzT3JjaGFyZFJlY2VpdmVyO1xuICB9IGNhdGNoIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn1cblxuLyoqXG4gKiBDbGFzc2lmeSBhIFpjYXNoIGFkZHJlc3Mgc3RyaW5nIGFzIHRyYW5zcGFyZW50IG9yIHNoaWVsZGVkLCB2YWxpZGF0aW5nIGl0IGluXG4gKiB0aGUgcHJvY2Vzcy4gUmV0dXJucyB1bmRlZmluZWQgaWYgdGhlIGFkZHJlc3MgaXMgbmVpdGhlciBhIHZhbGlkIHRyYW5zcGFyZW50XG4gKiBhZGRyZXNzIG5vciBhIHdlbGwtZm9ybWVkIFpJUC0zMTYgVW5pZmllZCBBZGRyZXNzIGZvciBgbmV0d29ya2AuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRaY2FzaEFkZHJlc3NLaW5kKFxuICBhZGRyZXNzOiBzdHJpbmcsXG4gIG5ldHdvcms6IGZpeGVkU2NyaXB0V2FsbGV0LlpjYXNoTmV0d29ya05hbWVcbik6IFpjYXNoQWRkcmVzc0tpbmQgfCB1bmRlZmluZWQge1xuICAvLyBaY2FzaE5ldHdvcmtOYW1lIGFsc28gcGVybWl0cyAnemNhc2gnLyd6Y2FzaFRlc3QnLCB3aGljaCB0b091dHB1dFNjcmlwdFdpdGhDb2luXG4gIC8vIGRvZXNuJ3QgYWNjZXB0IChpdCB0YWtlcyBhIENvaW5OYW1lLCBpLmUuICd6ZWMnLyd0emVjJykuIFNraXAgc3RyYWlnaHQgdG8gdGhlXG4gIC8vIHNoaWVsZGVkIGNoZWNrIGZvciB0aG9zZSByYXRoZXIgdGhhbiByZWx5aW5nIG9uIGFuIHVuc2FmZSBjYXN0ICsgY2F1Z2h0IHRocm93LlxuICBpZiAoaXNDb2luTmFtZShuZXR3b3JrKSkge1xuICAgIHRyeSB7XG4gICAgICB3YXNtQWRkcmVzcy50b091dHB1dFNjcmlwdFdpdGhDb2luKGFkZHJlc3MsIG5ldHdvcmspO1xuICAgICAgcmV0dXJuICd0cmFuc3BhcmVudCc7XG4gICAgfSBjYXRjaCB7XG4gICAgICAvLyBub3QgYSB2YWxpZCB0cmFuc3BhcmVudCBhZGRyZXNzOyBmYWxsIHRocm91Z2ggdG8gc2hpZWxkZWQgY2hlY2tcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGlzU2hpZWxkZWRaY2FzaEFkZHJlc3MoYWRkcmVzcywgbmV0d29yaykgPyAnc2hpZWxkZWQnIDogdW5kZWZpbmVkO1xufVxuXG4vKipcbiAqIFN0YW5kYWxvbmUgY291bnRlcnBhcnQgdG8gYFplYy5pc1ZhbGlkQWRkcmVzc2AsIHBhcmFtZXRlcml6ZWQgYnkgYG5ldHdvcmtgXG4gKiBpbnN0ZWFkIG9mIHJlcXVpcmluZyBhIGNvaW4gaW5zdGFuY2UuIEFjY2VwdHMgdHJhbnNwYXJlbnQgYWRkcmVzc2VzIGFuZFxuICogc2hpZWxkZWQgWklQLTMxNiBVbmlmaWVkIEFkZHJlc3Nlcy5cbiAqXG4gKiBOb3Qgc3RydWN0dXJhbGx5IGlkZW50aWNhbCB0byBgWmVjLmlzVmFsaWRBZGRyZXNzYDogdGhlIGJhc2UgY2xhc3MgYWxzb1xuICogcm91bmQtdHJpcHMgdGhlIHBhcnNlZCBzY3JpcHQgdGhyb3VnaCBlYWNoIGtub3duIGVuY29kaW5nIGZvcm1hdCAoc2VlXG4gKiBgQWJzdHJhY3RVdHhvQ29pbi5pc1ZhbGlkQWRkcmVzc2ApLCB3aGVyZWFzIHRoaXMgb25seSBjYWxsc1xuICogYHRvT3V0cHV0U2NyaXB0V2l0aENvaW5gIG9uY2UgdmlhIGBnZXRaY2FzaEFkZHJlc3NLaW5kYC4gVGhleSBhZ3JlZSBpblxuICogcHJhY3RpY2Ugc2luY2UgemVjL3R6ZWMgaGF2ZSBubyBhbHRlcm5hdGUgdHJhbnNwYXJlbnQtYWRkcmVzcyBlbmNvZGluZyB0b1xuICogcm91bmQtdHJpcCBhZ2FpbnN0LCBidXQgdGhhdCdzIG5vdCBndWFyYW50ZWVkIHRvIHJlbWFpbiB0cnVlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNWYWxpZFpjYXNoQWRkcmVzcyhhZGRyZXNzOiBzdHJpbmcsIG5ldHdvcms6IGZpeGVkU2NyaXB0V2FsbGV0LlpjYXNoTmV0d29ya05hbWUpOiBib29sZWFuIHtcbiAgcmV0dXJuIGdldFpjYXNoQWRkcmVzc0tpbmQoYWRkcmVzcywgbmV0d29yaykgIT09IHVuZGVmaW5lZDtcbn1cbiJdfQ==
157
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWRkcmVzcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9pbXBsL3plYy9hZGRyZXNzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQW1JQSx3REFNQztBQU9ELGtEQWdCQztBQWNELGtEQUVDO0FBaExELGdEQUF1RztBQUd2RywyREFBMkQ7QUFPM0Q7Ozs7Ozs7Ozs7O0dBV0c7QUFDSCxNQUFhLGVBQWdCLFNBQVEsd0JBQVk7SUFNL0MsWUFDRSxRQUFzQixFQUN0QixRQUEwQixFQUMxQiw2QkFBeUQsYUFBYTtRQUV0RSxLQUFLLENBQUMsUUFBUSxFQUFFLFFBQVEsQ0FBQyxDQUFDO1FBQzFCLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxRQUE4QyxDQUFDO1FBQ3ZFLElBQUksQ0FBQywwQkFBMEIsR0FBRywwQkFBMEIsQ0FBQztJQUMvRCxDQUFDO0lBRUQ7Ozs7Ozs7T0FPRztJQUNNLGNBQWMsQ0FBQyxPQUFlO1FBQ3JDLE9BQU8sQ0FDTCx3QkFBWSxDQUFDLHNCQUFzQixDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDO1lBQzNELHdCQUFZLENBQUMsa0JBQWtCLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FDeEQsQ0FBQztJQUNKLENBQUM7SUFFRDs7Ozs7Ozs7Ozs7O09BWUc7SUFDTSxNQUFNLENBQUMsT0FBZTtRQUM3QixJQUFJLElBQUksQ0FBQywwQkFBMEIsS0FBSyxVQUFVLEVBQUUsQ0FBQztZQUNuRCxPQUFPLHdCQUFZLENBQUMsNkJBQTZCLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUM1RSxDQUFDO1FBQ0QseUZBQXlGO1FBQ3pGLHFGQUFxRjtRQUNyRixJQUFJLE9BQTBELENBQUM7UUFDL0QsSUFBSSxDQUFDO1lBQ0gsT0FBTyxHQUFHLDZCQUFpQixDQUFDLG1CQUFtQixDQUFDLEtBQUssQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFD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LE9BQWUsRUFBRSxPQUEyQztJQUNqRyxJQUFJLENBQUM7UUFDSCxPQUFPLDZCQUFpQixDQUFDLG1CQUFtQixDQUFDLEtBQUssQ0FBQyxPQUFPLEVBQUUsT0FBTyxDQUFDLENBQUMsa0JBQWtCLENBQUM7SUFDMUYsQ0FBQztJQUFDLE1BQU0sQ0FBQztRQUNQLE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQztBQUNILENBQUM7QUFFRDs7OztHQUlHO0FBQ0gsU0FBZ0IsbUJBQW1CLENBQ2pDLE9BQWUsRUFDZixPQUEyQztJQUUzQyxrRkFBa0Y7SUFDbEYsZ0ZBQWdGO0lBQ2hGLGlGQUFpRjtJQUNqRixJQUFJLElBQUEsc0JBQVUsRUFBQyxPQUFPLENBQUMsRUFBRSxDQUFDO1FBQ3hCLElBQUksQ0FBQztZQUNILG1CQUFXLENBQUMsc0JBQXNCLENBQUMsT0FBTyxFQUFFLE9BQU8sQ0FBQyxDQUFDO1lBQ3JELE9BQU8sYUFBYSxDQUFDO1FBQ3ZCLENBQUM7UUFBQyxNQUFNLENBQUM7WUFDUCxrRUFBa0U7UUFDcEUsQ0FBQztJQUNILENBQUM7SUFDRCxPQUFPLHNCQUFzQixDQUFDLE9BQU8sRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUM7QUFDM0UsQ0FBQztBQUVEOzs7Ozs7Ozs7OztHQVdHO0FBQ0gsU0FBZ0IsbUJBQW1CLENBQUMsT0FBZSxFQUFFLE9BQTJDO0lBQzlGLE9BQU8sbUJBQW1CLENBQUMsT0FBTyxFQUFFLE9BQU8sQ0FBQyxLQUFLLFNBQVMsQ0FBQztBQUM3RCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgYWRkcmVzcyBhcyB3YXNtQWRkcmVzcywgZml4ZWRTY3JpcHRXYWxsZXQsIGlzQ29pbk5hbWUsIHpjYXNoQWRkcmVzcyB9IGZyb20gJ0BiaXRnby93YXNtLXV0eG8nO1xuaW1wb3J0IHR5cGUgeyBVbmlmaWVkUmVjaXBpZW50UHJlZmVyZW5jZSB9IGZyb20gJ0BiaXRnby1iZXRhL3Nkay1jb3JlJztcblxuaW1wb3J0IHsgQWRkcmVzc0NvZGVjIH0gZnJvbSAnLi4vLi4vdHJhbnNhY3Rpb24vcmVjaXBpZW50JztcbmltcG9ydCB7IFV0eG9Db2luTmFtZSwgV2FzbVV0eG9Db2luTmFtZSB9IGZyb20gJy4uLy4uL25hbWVzJztcblxuaW1wb3J0IHR5cGUgeyBaZWNBZGRyZXNzQ29kZWNPdXRwdXQgfSBmcm9tICcuL3R5cGVzJztcblxuZXhwb3J0IHR5cGUgWmNhc2hBZGRyZXNzS2luZCA9ICd0cmFuc3BhcmVudCcgfCAnc2hpZWxkZWQnO1xuXG4vKipcbiAqIEFkZHJlc3MgY29kZWMgZm9yIFpjYXNoIGNvaW5zICgnemVjJy8ndHplYycpIHRoYXQgdW5kZXJzdGFuZHMgWklQLTMxNlxuICogVW5pZmllZCBBZGRyZXNzZXMgaW4gYWRkaXRpb24gdG8gb3JkaW5hcnkgdHJhbnNwYXJlbnQgYWRkcmVzc2VzLlxuICpcbiAqIC0gYGRlY29kZWAgcmVzb2x2ZXMgdGhlIGJ5dGVzIGEgcmVjaXBpZW50IHBheXMgdG8gKHNlZSBpdHMgZG9jKTogYnkgZGVmYXVsdFxuICogICB0aGUgdHJhbnNwYXJlbnQgc2NyaXB0UHViS2V5OyB3aXRoIGB1bmlmaWVkUmVjaXBpZW50UHJlZmVyZW5jZTogJ3NoaWVsZGVkJ2BcbiAqICAgdGhlIHJhdyBPcmNoYXJkL0lyb253b29kIHJlY2VpdmVyIG9mIGEgVW5pZmllZCBBZGRyZXNzLlxuICogLSBgZW5jb2RlYC9gdG9FeHRlbmRlZEFkZHJlc3NGb3JtYXRgIGFyZSB1bmNoYW5nZWQ6IHNjcmlwdHMgY2FuIG9ubHkgYmVcbiAqICAgd3JpdHRlbiBiYWNrIG91dCBhcyB0cmFuc3BhcmVudCBhZGRyZXNzZXMuXG4gKiAtIGBpc1ZhbGlkQWRkcmVzc2AgYWNjZXB0cyB0cmFuc3BhcmVudCBhZGRyZXNzZXMgYW5kIFVuaWZpZWQgQWRkcmVzc2VzIHdpdGhcbiAqICAgYSB0cmFuc3BhcmVudCBvciBPcmNoYXJkIHJlY2VpdmVyLlxuICovXG5leHBvcnQgY2xhc3MgWmVjQWRkcmVzc0NvZGVjIGV4dGVuZHMgQWRkcmVzc0NvZGVjIHtcbiAgLyoqIFRoZSBaY2FzaCBuZXR3b3JrIG5hbWUgZm9yIHdhc20gY2FsbHMg4oCUICd6ZWMnIG9yICd0emVjJy4gKi9cbiAgcHJpdmF0ZSByZWFkb25seSB6Y2FzaE5ldHdvcmtOYW1lOiBmaXhlZFNjcmlwdFdhbGxldC5aY2FzaE5ldHdvcmtOYW1lO1xuICAvKiogSG93IFVuaWZpZWQgQWRkcmVzcyByZWNpcGllbnRzIHJlc29sdmUgd2hlbiB0aGlzIGNvZGVjIGRlY29kZXMgdGhlbS4gKi9cbiAgcHJpdmF0ZSByZWFkb25seSB1bmlmaWVkUmVjaXBpZW50UHJlZmVyZW5jZTogVW5pZmllZFJlY2lwaWVudFByZWZlcmVuY2U7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgY29pbk5hbWU6IFV0eG9Db2luTmFtZSxcbiAgICB3YXNtTmFtZTogV2FzbVV0eG9Db2luTmFtZSxcbiAgICB1bmlmaWVkUmVjaXBpZW50UHJlZmVyZW5jZTogVW5pZmllZFJlY2lwaWVudFByZWZlcmVuY2UgPSAndHJhbnNwYXJlbnQnXG4gICkge1xuICAgIHN1cGVyKGNvaW5OYW1lLCB3YXNtTmFtZSk7XG4gICAgdGhpcy56Y2FzaE5ldHdvcmtOYW1lID0gd2FzbU5hbWUgYXMgZml4ZWRTY3JpcHRXYWxsZXQuWmNhc2hOZXR3b3JrTmFtZTtcbiAgICB0aGlzLnVuaWZpZWRSZWNpcGllbnRQcmVmZXJlbmNlID0gdW5pZmllZFJlY2lwaWVudFByZWZlcmVuY2U7XG4gIH1cblxuICAvKipcbiAgICogV2hldGhlciBgYWRkcmVzc2AgaXMgYSB2YWxpZCBaY2FzaCBhZGRyZXNzIGZvciB0aGlzIGNvaW4ncyBuZXR3b3JrLlxuICAgKlxuICAgKiBNaXJyb3JzIHRoZSBwcmUtY29kZWMgYFplYy5pc1ZhbGlkQWRkcmVzc2AgbG9naWMgZXhhY3RseTogdGhlIGFkZHJlc3MgaXNcbiAgICogdmFsaWQgaWZmIGl0IGhhcyBhIHVzYWJsZSB0cmFuc3BhcmVudCByZWNlaXZlciAoYW4gb3JkaW5hcnkgdHJhbnNwYXJlbnRcbiAgICogYWRkcmVzcywgb3IgYSBVQSBjYXJyeWluZyBhIHRyYW5zcGFyZW50IHJlY2VpdmVyKSBvciBhbiBPcmNoYXJkIHJlY2VpdmVyXG4gICAqIChhIFVBIGNhcnJ5aW5nIG9uZSkuXG4gICAqL1xuICBvdmVycmlkZSBpc1ZhbGlkQWRkcmVzcyhhZGRyZXNzOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICByZXR1cm4gKFxuICAgICAgemNhc2hBZGRyZXNzLmhhc1RyYW5zcGFyZW50UmVjZWl2ZXIoYWRkcmVzcywgdGhpcy53YXNtTmFtZSkgfHxcbiAgICAgIHpjYXNoQWRkcmVzcy5oYXNPcmNoYXJkUmVjZWl2ZXIoYWRkcmVzcywgdGhpcy53YXNtTmFtZSlcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlc29sdmUgYGFkZHJlc3NgIHRvIHRoZSBieXRlcyB0aGlzIGNvZGVjJ3MgdW5pZmllZC1yZWNpcGllbnQgcHJlZmVyZW5jZSBwYXlzIHRvLlxuICAgKlxuICAgKiAtIGAndHJhbnNwYXJlbnQnYCAoZGVmYXVsdCkgcmVzb2x2ZXMgdGhlIHNjcmlwdFB1YktleTogYW4gb3JkaW5hcnlcbiAgICogICB0cmFuc3BhcmVudCBhZGRyZXNzIGRlY29kZXMgdG8gaXRzIG93biBzY3JpcHQsIGFuZCBhIFVBIHdpdGggYVxuICAgKiAgIHRyYW5zcGFyZW50IHJlY2VpdmVyIGRlY29kZXMgdG8gdGhhdCByZWNlaXZlcidzIHNjcmlwdC4gQSBVQSB3aXRob3V0IGFcbiAgICogICB0cmFuc3BhcmVudCByZWNlaXZlciAoZS5nLiBPcmNoYXJkLW9ubHkpIHRocm93cywgc2luY2UgYSBzaGllbGRlZFxuICAgKiAgIG91dHB1dCBoYXMgbm8gc2NyaXB0LlxuICAgKiAtIGAnc2hpZWxkZWQnYCByZXNvbHZlcyB0aGUgcmF3IE9yY2hhcmQgKElyb253b29kKSByZWNlaXZlciDigJQgdGhlXG4gICAqICAgNDMtYnl0ZSBkaXZlcnNpZmllciArIGBwa19kYCDigJQgb2YgYSBVQSBjYXJyeWluZyBvbmUuIEFueSBvdGhlciBhZGRyZXNzXG4gICAqICAgKHBsYWluIHRyYW5zcGFyZW50LCB0cmFuc3BhcmVudC1vbmx5IFVBLCBtYWxmb3JtZWQsIHdyb25nIG5ldHdvcmspXG4gICAqICAgdGhyb3dzLCBzaW5jZSBpdCBoYXMgbm8gT3JjaGFyZCByZWNlaXZlciB0byByZXNvbHZlLlxuICAgKi9cbiAgb3ZlcnJpZGUgZGVjb2RlKGFkZHJlc3M6IHN0cmluZyk6IFVpbnQ4QXJyYXkge1xuICAgIGlmICh0aGlzLnVuaWZpZWRSZWNpcGllbnRQcmVmZXJlbmNlICE9PSAnc2hpZWxkZWQnKSB7XG4gICAgICByZXR1cm4gemNhc2hBZGRyZXNzLnRvVHJhbnNwYXJlbnRSZWNlaXZlcldpdGhDb2luKGFkZHJlc3MsIHRoaXMud2FzbU5hbWUpO1xuICAgIH1cbiAgICAvLyBUaGUgcmF3IE9yY2hhcmQgcmVjZWl2ZXIgZXhpc3RzIG9ubHkgZm9yIGEgVW5pZmllZCBBZGRyZXNzIGNhcnJ5aW5nIG9uZTsgYW55dGhpbmcgZWxzZVxuICAgIC8vIChwbGFpbiB0cmFuc3BhcmVudCBhZGRyZXNzLCB0cmFuc3BhcmVudC1vbmx5IFVBLCBtYWxmb3JtZWQsIHdyb25nIG5ldHdvcmspIHRocm93cy5cbiAgICBsZXQgdW5pZmllZDogZml4ZWRTY3JpcHRXYWxsZXQuWmNhc2hVbmlmaWVkQWRkcmVzcyB8IHVuZGVmaW5lZDtcbiAgICB0cnkge1xuICAgICAgdW5pZmllZCA9IGZpeGVkU2NyaXB0V2FsbGV0LlpjYXNoVW5pZmllZEFkZHJlc3MucGFyc2UoYWRkcmVzcywgdGhpcy56Y2FzaE5ldHdvcmtOYW1lKTtcbiAgICB9IGNhdGNoIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgYWRkcmVzcyAke2FkZHJlc3N9IGlzIG5vdCBhIHZhbGlkIGFkZHJlc3MgZm9yIG5ldHdvcmsgJHt0aGlzLnpjYXNoTmV0d29ya05hbWV9YCk7XG4gICAgfVxuICAgIGlmICghdW5pZmllZD8uaGFzT3JjaGFyZFJlY2VpdmVyKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYGFkZHJlc3MgJHthZGRyZXNzfSBoYXMgbm8gT3JjaGFyZCByZWNlaXZlciB0byByZXNvbHZlIGFzIHNoaWVsZGVkYCk7XG4gICAgfVxuICAgIHJldHVybiB6Y2FzaEFkZHJlc3MudG9TaGllbGRlZFJlY2VpdmVyV2l0aENvaW4oYWRkcmVzcywgdGhpcy53YXNtTmFtZSk7XG4gIH1cblxuICAvKiogQ2hhbmdlIGFkZHJlc3NlcyBhcmUgYWx3YXlzIHRyYW5zcGFyZW50IHdhbGxldCBhZGRyZXNzZXMuICovXG4gIG92ZXJyaWRlIGRlY29kZUNoYW5nZUFkZHJlc3MoYWRkcmVzczogc3RyaW5nKTogVWludDhBcnJheSB7XG4gICAgcmV0dXJuIHpjYXNoQWRkcmVzcy50b1RyYW5zcGFyZW50UmVjZWl2ZXJXaXRoQ29pbihhZGRyZXNzLCB0aGlzLndhc21OYW1lKTtcbiAgfVxuICBvdmVycmlkZSBpc01hdGNoaW5nU2NyaXB0KG91dHB1dDogWmVjQWRkcmVzc0NvZGVjT3V0cHV0KTogYm9vbGVhbiB7XG4gICAgY29uc3QgYWRkcmVzcyA9IG91dHB1dC5hZGRyZXNzO1xuICAgIGlmIChhZGRyZXNzID09PSB1bmRlZmluZWQgfHwgYWRkcmVzcyA9PT0gbnVsbCkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIGlmIChBZGRyZXNzQ29kZWMuaXNTY3JpcHRSZWNpcGllbnQoYWRkcmVzcykpIHtcbiAgICAgIHJldHVybiBzdXBlci5pc01hdGNoaW5nU2NyaXB0KG91dHB1dCk7XG4gICAgfVxuXG4gICAgY29uc3QgbWF0Y2hlc091dHB1dCA9IChkZWNvZGU6ICgpID0+IFVpbnQ4QXJyYXkpOiBib29sZWFuID0+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHJldHVybiBCdWZmZXIuZnJvbShkZWNvZGUoKSkuZXF1YWxzKEJ1ZmZlci5mcm9tKG91dHB1dC5zY3JpcHQpKTtcbiAgICAgIH0gY2F0Y2gge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgfTtcbiAgICBjb25zdCBpc1NoaWVsZGVkID0gb3V0cHV0LmlzU2hpZWxkZWQ7XG4gICAgaWYgKGlzU2hpZWxkZWQgPT09IHRydWUpIHtcbiAgICAgIHJldHVybiBtYXRjaGVzT3V0cHV0KCgpID0+IHpjYXNoQWRkcmVzcy50b1NoaWVsZGVkUmVjZWl2ZXJXaXRoQ29pbihhZGRyZXNzLCB0aGlzLndhc21OYW1lKSk7XG4gICAgfVxuICAgIGlmIChpc1NoaWVsZGVkID09PSBmYWxzZSkge1xuICAgICAgcmV0dXJuIG1hdGNoZXNPdXRwdXQoKCkgPT4gemNhc2hBZGRyZXNzLnRvVHJhbnNwYXJlbnRSZWNlaXZlcldpdGhDb2luKGFkZHJlc3MsIHRoaXMud2FzbU5hbWUpKTtcbiAgICB9XG4gICAgcmV0dXJuIChcbiAgICAgIG1hdGNoZXNPdXRwdXQoKCkgPT4gemNhc2hBZGRyZXNzLnRvVHJhbnNwYXJlbnRSZWNlaXZlcldpdGhDb2luKGFkZHJlc3MsIHRoaXMud2FzbU5hbWUpKSB8fFxuICAgICAgbWF0Y2hlc091dHB1dCgoKSA9PiB6Y2FzaEFkZHJlc3MudG9TaGllbGRlZFJlY2VpdmVyV2l0aENvaW4oYWRkcmVzcywgdGhpcy53YXNtTmFtZSkpXG4gICAgKTtcbiAgfVxuXG4gIC8qKiBQcmVzZXJ2ZSBhIHNoaWVsZGVkIG91dHB1dCdzIG9yaWdpbmFsIFVBIG9ubHkgYWZ0ZXIgdmFsaWRhdGluZyBpdCBhZ2FpbnN0IHRoZSByYXcgc2NyaXB0LiAqL1xuICBvdmVycmlkZSB0b0V4dGVuZGVkQWRkcmVzc0Zvcm1hdChzY3JpcHQ6IEJ1ZmZlciwgYWRkcmVzcz86IHN0cmluZyk6IHN0cmluZyB7XG4gICAgaWYgKGFkZHJlc3MgIT09IHVuZGVmaW5lZCAmJiAhdGhpcy5pc01hdGNoaW5nU2NyaXB0KHsgYWRkcmVzcywgc2NyaXB0IH0pKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYGFkZHJlc3MgJHthZGRyZXNzfSBkb2VzIG5vdCBtYXRjaCB0aGUgb3V0cHV0IHNjcmlwdGApO1xuICAgIH1cbiAgICByZXR1cm4gYWRkcmVzcyA/PyBzdXBlci50b0V4dGVuZGVkQWRkcmVzc0Zvcm1hdChzY3JpcHQpO1xuICB9XG59XG5cbi8qKlxuICogV2hldGhlciBgYWRkcmVzc2AgaXMgYSB3ZWxsLWZvcm1lZCBaSVAtMzE2IFVuaWZpZWQgQWRkcmVzcyBmb3IgYG5ldHdvcmtgXG4gKiB3aXRoIGFuIE9yY2hhcmQgcmVjZWl2ZXIuIEJpdEdvIG9ubHkgc3VwcG9ydHMgT3JjaGFyZCwgc28gYSBVQSB3aXRob3V0IG9uZVxuICogKGUuZy4gU2FwbGluZy0gb3IgdHJhbnNwYXJlbnQtb25seSkgaXMgbm90IGNvbnNpZGVyZWQgdmFsaWQgaGVyZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzU2hpZWxkZWRaY2FzaEFkZHJlc3MoYWRkcmVzczogc3RyaW5nLCBuZXR3b3JrOiBmaXhlZFNjcmlwdFdhbGxldC5aY2FzaE5ldHdvcmtOYW1lKTogYm9vbGVhbiB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIGZpeGVkU2NyaXB0V2FsbGV0LlpjYXNoVW5pZmllZEFkZHJlc3MucGFyc2UoYWRkcmVzcywgbmV0d29yaykuaGFzT3JjaGFyZFJlY2VpdmVyO1xuICB9IGNhdGNoIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn1cblxuLyoqXG4gKiBDbGFzc2lmeSBhIFpjYXNoIGFkZHJlc3Mgc3RyaW5nIGFzIHRyYW5zcGFyZW50IG9yIHNoaWVsZGVkLCB2YWxpZGF0aW5nIGl0IGluXG4gKiB0aGUgcHJvY2Vzcy4gUmV0dXJucyB1bmRlZmluZWQgaWYgdGhlIGFkZHJlc3MgaXMgbmVpdGhlciBhIHZhbGlkIHRyYW5zcGFyZW50XG4gKiBhZGRyZXNzIG5vciBhIHdlbGwtZm9ybWVkIFpJUC0zMTYgVW5pZmllZCBBZGRyZXNzIGZvciBgbmV0d29ya2AuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRaY2FzaEFkZHJlc3NLaW5kKFxuICBhZGRyZXNzOiBzdHJpbmcsXG4gIG5ldHdvcms6IGZpeGVkU2NyaXB0V2FsbGV0LlpjYXNoTmV0d29ya05hbWVcbik6IFpjYXNoQWRkcmVzc0tpbmQgfCB1bmRlZmluZWQge1xuICAvLyBaY2FzaE5ldHdvcmtOYW1lIGFsc28gcGVybWl0cyAnemNhc2gnLyd6Y2FzaFRlc3QnLCB3aGljaCB0b091dHB1dFNjcmlwdFdpdGhDb2luXG4gIC8vIGRvZXNuJ3QgYWNjZXB0IChpdCB0YWtlcyBhIENvaW5OYW1lLCBpLmUuICd6ZWMnLyd0emVjJykuIFNraXAgc3RyYWlnaHQgdG8gdGhlXG4gIC8vIHNoaWVsZGVkIGNoZWNrIGZvciB0aG9zZSByYXRoZXIgdGhhbiByZWx5aW5nIG9uIGFuIHVuc2FmZSBjYXN0ICsgY2F1Z2h0IHRocm93LlxuICBpZiAoaXNDb2luTmFtZShuZXR3b3JrKSkge1xuICAgIHRyeSB7XG4gICAgICB3YXNtQWRkcmVzcy50b091dHB1dFNjcmlwdFdpdGhDb2luKGFkZHJlc3MsIG5ldHdvcmspO1xuICAgICAgcmV0dXJuICd0cmFuc3BhcmVudCc7XG4gICAgfSBjYXRjaCB7XG4gICAgICAvLyBub3QgYSB2YWxpZCB0cmFuc3BhcmVudCBhZGRyZXNzOyBmYWxsIHRocm91Z2ggdG8gc2hpZWxkZWQgY2hlY2tcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGlzU2hpZWxkZWRaY2FzaEFkZHJlc3MoYWRkcmVzcywgbmV0d29yaykgPyAnc2hpZWxkZWQnIDogdW5kZWZpbmVkO1xufVxuXG4vKipcbiAqIFN0YW5kYWxvbmUgY291bnRlcnBhcnQgdG8gYFplYy5pc1ZhbGlkQWRkcmVzc2AsIHBhcmFtZXRlcml6ZWQgYnkgYG5ldHdvcmtgXG4gKiBpbnN0ZWFkIG9mIHJlcXVpcmluZyBhIGNvaW4gaW5zdGFuY2UuIEFjY2VwdHMgdHJhbnNwYXJlbnQgYWRkcmVzc2VzIGFuZFxuICogc2hpZWxkZWQgWklQLTMxNiBVbmlmaWVkIEFkZHJlc3Nlcy5cbiAqXG4gKiBOb3Qgc3RydWN0dXJhbGx5IGlkZW50aWNhbCB0byBgWmVjLmlzVmFsaWRBZGRyZXNzYDogdGhlIGJhc2UgY2xhc3MgYWxzb1xuICogcm91bmQtdHJpcHMgdGhlIHBhcnNlZCBzY3JpcHQgdGhyb3VnaCBlYWNoIGtub3duIGVuY29kaW5nIGZvcm1hdCAoc2VlXG4gKiBgQWJzdHJhY3RVdHhvQ29pbi5pc1ZhbGlkQWRkcmVzc2ApLCB3aGVyZWFzIHRoaXMgb25seSBjYWxsc1xuICogYHRvT3V0cHV0U2NyaXB0V2l0aENvaW5gIG9uY2UgdmlhIGBnZXRaY2FzaEFkZHJlc3NLaW5kYC4gVGhleSBhZ3JlZSBpblxuICogcHJhY3RpY2Ugc2luY2UgemVjL3R6ZWMgaGF2ZSBubyBhbHRlcm5hdGUgdHJhbnNwYXJlbnQtYWRkcmVzcyBlbmNvZGluZyB0b1xuICogcm91bmQtdHJpcCBhZ2FpbnN0LCBidXQgdGhhdCdzIG5vdCBndWFyYW50ZWVkIHRvIHJlbWFpbiB0cnVlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNWYWxpZFpjYXNoQWRkcmVzcyhhZGRyZXNzOiBzdHJpbmcsIG5ldHdvcms6IGZpeGVkU2NyaXB0V2FsbGV0LlpjYXNoTmV0d29ya05hbWUpOiBib29sZWFuIHtcbiAgcmV0dXJuIGdldFpjYXNoQWRkcmVzc0tpbmQoYWRkcmVzcywgbmV0d29yaykgIT09IHVuZGVmaW5lZDtcbn1cbiJdfQ==
@@ -1,5 +1,6 @@
1
1
  import { fixedScriptWallet } from '@bitgo/wasm-utxo';
2
2
  import type { UnifiedRecipientPreference } from '@bitgo-beta/sdk-core';
3
+ import type { AddressCodec } from '../../transaction/recipient';
3
4
  import { ZcashCoinName } from './types';
4
5
  /**
5
6
  * How a recipient parsed from a Zcash PSBT is spent.
@@ -61,7 +62,7 @@ export interface PsbtRecipient {
61
62
  * and `unifiedAddress` report it verbatim. Opaque outputs with no address (e.g. OP_RETURN) are
62
63
  * skipped, as they carry no recipient.
63
64
  */
64
- export declare function resolvePsbtRecipients(psbt: fixedScriptWallet.ZcashBitGoPsbt, walletKeys: fixedScriptWallet.RootWalletKeys): PsbtRecipient[];
65
+ export declare function resolvePsbtRecipients(psbt: fixedScriptWallet.ZcashBitGoPsbt, walletKeys: fixedScriptWallet.RootWalletKeys, addressCodec: AddressCodec): PsbtRecipient[];
65
66
  /**
66
67
  * Infer the Unified-Address recipient preference for a Zcash transaction when the caller did
67
68
  * not pass one — the counterpart of wallet-platform's utxo-core `buildTransaction`
@@ -1 +1 @@
1
- {"version":3,"file":"recipients.d.ts","sourceRoot":"","sources":["../../../../../src/impl/zec/recipients.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAgB,MAAM,kBAAkB,CAAC;AACnE,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,sBAAsB,CAAC;AAIvE,OAAO,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAExC;;;;;;;;GAQG;AACH,MAAM,MAAM,wBAAwB,GAChC;IACE,IAAI,EAAE,eAAe,CAAC;IACtB;;;;OAIG;IACH,cAAc,EAAE,MAAM,CAAC;CACxB,GACD;IACE,IAAI,EAAE,yBAAyB,CAAC;IAChC,+EAA+E;IAC/E,cAAc,EAAE,MAAM,CAAC;CACxB,GACD;IAAE,IAAI,EAAE,aAAa,CAAA;CAAE,CAAC;AAE5B,yEAAyE;AACzE,MAAM,WAAW,aAAa;IAC5B,0BAA0B;IAC1B,MAAM,EAAE,MAAM,CAAC;IACf;;;;;OAKG;IACH,OAAO,EAAE,MAAM,CAAC;IAChB;;;OAGG;IACH,MAAM,EAAE,UAAU,CAAC;IACnB;;;;;OAKG;IACH,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,WAAW,EAAE,wBAAwB,CAAC;CACvC;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,qBAAqB,CACnC,IAAI,EAAE,iBAAiB,CAAC,cAAc,EACtC,UAAU,EAAE,iBAAiB,CAAC,cAAc,GAC3C,aAAa,EAAE,CAgCjB;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,6BAA6B,CAC3C,IAAI,EAAE,aAAa,EACnB,UAAU,EAAE;IAAE,OAAO,EAAE,MAAM,GAAG,SAAS,CAAA;CAAE,EAAE,GAC5C,0BAA0B,GAAG,SAAS,CA0BxC"}
1
+ {"version":3,"file":"recipients.d.ts","sourceRoot":"","sources":["../../../../../src/impl/zec/recipients.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAgB,MAAM,kBAAkB,CAAC;AACnE,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,sBAAsB,CAAC;AAGvE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAEhE,OAAO,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAExC;;;;;;;;GAQG;AACH,MAAM,MAAM,wBAAwB,GAChC;IACE,IAAI,EAAE,eAAe,CAAC;IACtB;;;;OAIG;IACH,cAAc,EAAE,MAAM,CAAC;CACxB,GACD;IACE,IAAI,EAAE,yBAAyB,CAAC;IAChC,+EAA+E;IAC/E,cAAc,EAAE,MAAM,CAAC;CACxB,GACD;IAAE,IAAI,EAAE,aAAa,CAAA;CAAE,CAAC;AAE5B,yEAAyE;AACzE,MAAM,WAAW,aAAa;IAC5B,0BAA0B;IAC1B,MAAM,EAAE,MAAM,CAAC;IACf;;;;;OAKG;IACH,OAAO,EAAE,MAAM,CAAC;IAChB;;;OAGG;IACH,MAAM,EAAE,UAAU,CAAC;IACnB;;;;;OAKG;IACH,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,WAAW,EAAE,wBAAwB,CAAC;CACvC;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,qBAAqB,CACnC,IAAI,EAAE,iBAAiB,CAAC,cAAc,EACtC,UAAU,EAAE,iBAAiB,CAAC,cAAc,EAC5C,YAAY,EAAE,YAAY,GACzB,aAAa,EAAE,CAoCjB;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,6BAA6B,CAC3C,IAAI,EAAE,aAAa,EACnB,UAAU,EAAE;IAAE,OAAO,EAAE,MAAM,GAAG,SAAS,CAAA;CAAE,EAAE,GAC5C,0BAA0B,GAAG,SAAS,CA0BxC"}