@bitgo/abstract-utxo 11.1.0 → 11.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/src/abstractUtxoCoin.d.ts.map +1 -1
- package/dist/cjs/src/abstractUtxoCoin.js +9 -4
- package/dist/cjs/src/address/fixedScript.d.ts.map +1 -1
- package/dist/cjs/src/address/fixedScript.js +4 -1
- package/dist/cjs/src/deriveKeyWithSeed.d.ts +12 -0
- package/dist/cjs/src/deriveKeyWithSeed.d.ts.map +1 -0
- package/dist/cjs/src/deriveKeyWithSeed.js +17 -0
- package/dist/cjs/src/descriptor/descriptorWallet.d.ts +1 -1
- package/dist/cjs/src/descriptor/descriptorWallet.d.ts.map +1 -1
- package/dist/cjs/src/descriptor/descriptorWallet.js +1 -1
- package/dist/cjs/src/descriptor/index.d.ts +2 -1
- package/dist/cjs/src/descriptor/index.d.ts.map +1 -1
- package/dist/cjs/src/descriptor/index.js +1 -1
- package/dist/cjs/src/descriptor/validatePolicy.d.ts +1 -1
- package/dist/cjs/src/descriptor/validatePolicy.d.ts.map +1 -1
- package/dist/cjs/src/descriptor/validatePolicy.js +1 -1
- package/dist/cjs/src/impl/btc/inscriptionBuilder.d.ts.map +1 -1
- package/dist/cjs/src/impl/btc/inscriptionBuilder.js +3 -4
- package/dist/cjs/src/offlineVault/OfflineVaultHalfSigned.d.ts.map +1 -1
- package/dist/cjs/src/offlineVault/OfflineVaultHalfSigned.js +4 -5
- package/dist/cjs/src/offlineVault/descriptor/transaction.d.ts.map +1 -1
- package/dist/cjs/src/offlineVault/descriptor/transaction.js +4 -4
- package/dist/cjs/src/transaction/decode.d.ts +13 -1
- package/dist/cjs/src/transaction/decode.d.ts.map +1 -1
- package/dist/cjs/src/transaction/decode.js +19 -1
- package/dist/cjs/src/transaction/descriptor/explainPsbt.d.ts.map +1 -1
- package/dist/cjs/src/transaction/descriptor/explainPsbt.js +7 -5
- package/dist/cjs/src/transaction/descriptor/index.d.ts +1 -1
- package/dist/cjs/src/transaction/descriptor/index.d.ts.map +1 -1
- package/dist/cjs/src/transaction/descriptor/index.js +1 -1
- package/dist/cjs/src/transaction/descriptor/parse.d.ts +1 -2
- package/dist/cjs/src/transaction/descriptor/parse.d.ts.map +1 -1
- package/dist/cjs/src/transaction/descriptor/parse.js +9 -13
- package/dist/cjs/src/transaction/descriptor/signPsbt.d.ts +2 -1
- package/dist/cjs/src/transaction/descriptor/signPsbt.d.ts.map +1 -1
- package/dist/cjs/src/transaction/descriptor/signPsbt.js +1 -1
- package/dist/cjs/src/transaction/descriptor/verifyTransaction.d.ts +1 -2
- package/dist/cjs/src/transaction/descriptor/verifyTransaction.d.ts.map +1 -1
- package/dist/cjs/src/transaction/descriptor/verifyTransaction.js +3 -4
- package/dist/cjs/src/transaction/explainTransaction.d.ts +2 -2
- package/dist/cjs/src/transaction/explainTransaction.d.ts.map +1 -1
- package/dist/cjs/src/transaction/explainTransaction.js +12 -10
- package/dist/cjs/src/transaction/fixedScript/signPsbtWasm.d.ts.map +1 -1
- package/dist/cjs/src/transaction/fixedScript/signPsbtWasm.js +6 -4
- package/dist/cjs/src/transaction/signTransaction.d.ts.map +1 -1
- package/dist/cjs/src/transaction/signTransaction.js +8 -11
- package/dist/cjs/test/unit/address.js +27 -1
- package/dist/cjs/test/unit/deriveKeyWithSeed.d.ts +2 -0
- package/dist/cjs/test/unit/deriveKeyWithSeed.d.ts.map +1 -0
- package/dist/cjs/test/unit/deriveKeyWithSeed.js +56 -0
- package/dist/cjs/test/unit/transaction/descriptor/signTransactionE2E.d.ts +2 -0
- package/dist/cjs/test/unit/transaction/descriptor/signTransactionE2E.d.ts.map +1 -0
- package/dist/cjs/test/unit/transaction/descriptor/signTransactionE2E.js +100 -0
- package/dist/cjs/test/unit/transaction/descriptor/signTransactionGuard.d.ts +2 -0
- package/dist/cjs/test/unit/transaction/descriptor/signTransactionGuard.d.ts.map +1 -0
- package/dist/cjs/test/unit/transaction/descriptor/signTransactionGuard.js +84 -0
- package/dist/cjs/tsconfig.tsbuildinfo +1 -1
- package/dist/esm/abstractUtxoCoin.d.ts.map +1 -1
- package/dist/esm/abstractUtxoCoin.js +10 -5
- package/dist/esm/address/fixedScript.d.ts.map +1 -1
- package/dist/esm/address/fixedScript.js +4 -1
- package/dist/esm/deriveKeyWithSeed.d.ts +12 -0
- package/dist/esm/deriveKeyWithSeed.d.ts.map +1 -0
- package/dist/esm/deriveKeyWithSeed.js +14 -0
- package/dist/esm/descriptor/descriptorWallet.d.ts +1 -1
- package/dist/esm/descriptor/descriptorWallet.d.ts.map +1 -1
- package/dist/esm/descriptor/descriptorWallet.js +1 -1
- package/dist/esm/descriptor/index.d.ts +2 -1
- package/dist/esm/descriptor/index.d.ts.map +1 -1
- package/dist/esm/descriptor/index.js +1 -1
- package/dist/esm/descriptor/validatePolicy.d.ts +1 -1
- package/dist/esm/descriptor/validatePolicy.d.ts.map +1 -1
- package/dist/esm/descriptor/validatePolicy.js +1 -1
- package/dist/esm/impl/btc/inscriptionBuilder.d.ts.map +1 -1
- package/dist/esm/impl/btc/inscriptionBuilder.js +4 -5
- package/dist/esm/offlineVault/OfflineVaultHalfSigned.d.ts.map +1 -1
- package/dist/esm/offlineVault/OfflineVaultHalfSigned.js +4 -5
- package/dist/esm/offlineVault/descriptor/transaction.d.ts.map +1 -1
- package/dist/esm/offlineVault/descriptor/transaction.js +4 -4
- package/dist/esm/transaction/decode.d.ts +13 -1
- package/dist/esm/transaction/decode.d.ts.map +1 -1
- package/dist/esm/transaction/decode.js +19 -2
- package/dist/esm/transaction/descriptor/explainPsbt.d.ts.map +1 -1
- package/dist/esm/transaction/descriptor/explainPsbt.js +4 -2
- package/dist/esm/transaction/descriptor/index.d.ts +1 -1
- package/dist/esm/transaction/descriptor/index.d.ts.map +1 -1
- package/dist/esm/transaction/descriptor/index.js +1 -1
- package/dist/esm/transaction/descriptor/parse.d.ts +1 -2
- package/dist/esm/transaction/descriptor/parse.d.ts.map +1 -1
- package/dist/esm/transaction/descriptor/parse.js +8 -12
- package/dist/esm/transaction/descriptor/signPsbt.d.ts +2 -1
- package/dist/esm/transaction/descriptor/signPsbt.d.ts.map +1 -1
- package/dist/esm/transaction/descriptor/signPsbt.js +1 -1
- package/dist/esm/transaction/descriptor/verifyTransaction.d.ts +1 -2
- package/dist/esm/transaction/descriptor/verifyTransaction.d.ts.map +1 -1
- package/dist/esm/transaction/descriptor/verifyTransaction.js +3 -4
- package/dist/esm/transaction/explainTransaction.d.ts +2 -2
- package/dist/esm/transaction/explainTransaction.d.ts.map +1 -1
- package/dist/esm/transaction/explainTransaction.js +13 -11
- package/dist/esm/transaction/fixedScript/signPsbtWasm.d.ts.map +1 -1
- package/dist/esm/transaction/fixedScript/signPsbtWasm.js +5 -3
- package/dist/esm/transaction/signTransaction.d.ts.map +1 -1
- package/dist/esm/transaction/signTransaction.js +10 -13
- package/package.json +8 -8
|
@@ -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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"}
|
|
@@ -126,10 +126,10 @@ class AbstractUtxoCoin extends sdk_core_1.BaseCoin {
|
|
|
126
126
|
super(bitgo);
|
|
127
127
|
this.supportedTxFormats = {
|
|
128
128
|
psbt: true,
|
|
129
|
-
legacy: this.
|
|
129
|
+
legacy: this.getChain() === 'btc',
|
|
130
130
|
};
|
|
131
131
|
this.supportedSdkBackends = {
|
|
132
|
-
utxolib: this.
|
|
132
|
+
utxolib: this.getChain() === 'btc',
|
|
133
133
|
'wasm-utxo': true,
|
|
134
134
|
};
|
|
135
135
|
this.defaultSdkBackend = 'wasm-utxo';
|
|
@@ -547,7 +547,12 @@ class AbstractUtxoCoin extends sdk_core_1.BaseCoin {
|
|
|
547
547
|
params.pubs = (0, keychains_1.toBip32Triple)(keychains).map((k) => k.neutered().toBase58());
|
|
548
548
|
}
|
|
549
549
|
}
|
|
550
|
-
|
|
550
|
+
if (wallet && (0, descriptor_1.isDescriptorWallet)(wallet)) {
|
|
551
|
+
// Descriptor wallets decode prebuild bytes straight into the wasm-utxo
|
|
552
|
+
// descriptor Psbt, skipping the fixedScriptWallet.BitGoPsbt intermediate.
|
|
553
|
+
return (0, transaction_1.explainTx)((0, decode_1.decodeDescriptorPsbt)(params), { ...params, wallet }, this.name);
|
|
554
|
+
}
|
|
555
|
+
return (0, transaction_1.explainTx)(this.decodeTransactionFromPrebuild(params), { ...params, wallet }, this.name);
|
|
551
556
|
}
|
|
552
557
|
/**
|
|
553
558
|
* @deprecated - use {@see backupKeyRecovery}
|
|
@@ -710,4 +715,4 @@ class AbstractUtxoCoin extends sdk_core_1.BaseCoin {
|
|
|
710
715
|
}
|
|
711
716
|
}
|
|
712
717
|
exports.AbstractUtxoCoin = AbstractUtxoCoin;
|
|
713
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWJzdHJhY3RVdHhvQ29pbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9hYnN0cmFjdFV0eG9Db2luLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLG9EQUE0QjtBQUM1QixtQ0FBcUM7QUFFckMsb0RBQXVCO0FBQ3ZCLHlEQUEyQztBQUMzQyxnREFBNEQ7QUFDNUQsOENBQW9EO0FBQ3BELDhDQXFDeUI7QUFFekIseUNBWW9CO0FBQ3BCLGlGQUFtSDtBQUNuSCxxQ0FBeUQ7QUFDekQsK0NBUXVCO0FBR3ZCLGtGQUlvRDtBQUNwRCw2Q0FBNkc7QUFDN0csbUNBT2lCO0FBQ2pCLHVEQUF1RTtBQUN2RSwrQ0FBa0Y7QUFDbEYsaURBQW1HO0FBQ25HLDJDQUEwRTtBQUMxRSwyQ0FBc0U7QUFDdEUsZ0VBQThEO0FBQzlELG1FQUFnRTtBQUNoRSxxQ0FBd0Q7QUFDeEQsb0VBQXVFO0FBa0J2RSxNQUFhLHVCQUF3QixTQUFRLEtBQUs7SUFDaEQsWUFBWSxRQUFrQjtRQUM1QixLQUFLLENBQUMsNEJBQTRCLFFBQVEsOERBQThELENBQUMsQ0FBQztJQUM1RyxDQUFDO0NBQ0Y7QUFKRCwwREFJQztBQTJCRCxNQUFNLEVBQUUsV0FBVyxFQUFFLGtCQUFrQixFQUFFLGFBQWEsRUFBRSxHQUFHLGdCQUFLLENBQUM7QUFFakU7OztHQUdHO0FBQ0gsU0FBUyxvQkFBb0IsQ0FDM0IsRUFBK0IsRUFDL0IsSUFBMEIsRUFDMUIsUUFBc0I7SUFFdEIsSUFBSSxFQUFFLFlBQVksZ0JBQUssQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUNqQyxPQUFPLGdCQUFLLENBQUMsa0NBQWtDLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDdEQsQ0FBQztJQUNELElBQUksRUFBRSxZQUFZLDZCQUFpQixDQUFDLFNBQVMsRUFBRSxDQUFDO1FBQzlDLElBQUEsZ0JBQU0sRUFBQyxJQUFJLElBQUks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QUssQ0FBQyx1Q0FBdUMsQ0FBQyxDQUFDO1lBQzNELENBQUM7UUFDSCxDQUFDO0lBQ0gsQ0FBQztDQUNGO0FBdHZCRCw0Q0FzdkJDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGFzc2VydCBmcm9tICdhc3NlcnQnO1xuaW1wb3J0IHsgcmFuZG9tQnl0ZXMgfSBmcm9tICdjcnlwdG8nO1xuXG5pbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0ICogYXMgdXR4b2xpYiBmcm9tICdAYml0Z28vdXR4by1saWInO1xuaW1wb3J0IHsgQklQMzIsIGZpeGVkU2NyaXB0V2FsbGV0IH0gZnJvbSAnQGJpdGdvL3dhc20tdXR4byc7XG5pbXBvcnQgeyBiaXRnbywgZ2V0TWFpbm5ldCB9IGZyb20gJ0BiaXRnby91dHhvLWxpYic7XG5pbXBvcnQge1xuICBBZGRyZXNzQ29pblNwZWNpZmljLFxuICBCYXNlQ29pbixcbiAgQml0R29CYXNlLFxuICBDcmVhdGVBZGRyZXNzRm9ybWF0LFxuICBFeHRyYVByZWJ1aWxkUGFyYW1zT3B0aW9ucyxcbiAgSGFsZlNpZ25lZFV0eG9UcmFuc2FjdGlvbixcbiAgSUJhc2VDb2luLFxuICBpc0JvbHQxMUludm9pY2UsXG4gIEludmFsaWRBZGRyZXNzRGVyaXZhdGlvblByb3BlcnR5RXJyb3IsXG4gIEludmFsaWRBZGRyZXNzRXJyb3IsXG4gIElSZXF1ZXN0VHJhY2VyLFxuICBpc1RyaXBsZSxcbiAgSVdhbGxldCxcbiAgS2V5Y2hhaW5zVHJpcGxldCxcbiAgS2V5SW5kaWNlcyxcbiAgTWlzbWF0Y2hlZFJlY2lwaWVudCxcbiAgTXVsdGlzaWdUeXBlLFxuICBtdWx0aXNpZ1R5cGVzLFxuICBQYXJzZVRyYW5zYWN0aW9uT3B0aW9ucyBhcyBCYXNlUGFyc2VUcmFuc2FjdGlvbk9wdGlvbnMsXG4gIFByZWNyZWF0ZUJpdEdvT3B0aW9ucyxcbiAgUHJlc2lnblRyYW5zYWN0aW9uT3B0aW9ucyxcbiAgUmVxdWVzdFRyYWNlcixcbiAgU2lnbmVkVHJhbnNhY3Rpb24sXG4gIFR4SW50ZW50TWlzbWF0Y2hFcnJvcixcbiAgU2lnblRyYW5zYWN0aW9uT3B0aW9ucyBhcyBCYXNlU2lnblRyYW5zYWN0aW9uT3B0aW9ucyxcbiAgU3VwcGxlbWVudEdlbmVyYXRlV2FsbGV0T3B0aW9ucyxcbiAgVHJhbnNhY3Rpb25QYXJhbXMgYXMgQmFzZVRyYW5zYWN0aW9uUGFyYW1zLFxuICBUcmFuc2FjdGlvblByZWJ1aWxkIGFzIEJhc2VUcmFuc2FjdGlvblByZWJ1aWxkLFxuICBUcmlwbGUsXG4gIFR4SW50ZW50TWlzbWF0Y2hSZWNpcGllbnRFcnJvcixcbiAgVmVyaWZpY2F0aW9uT3B0aW9ucyxcbiAgVmVyaWZ5QWRkcmVzc09wdGlvbnMgYXMgQmFzZVZlcmlmeUFkZHJlc3NPcHRpb25zLFxuICBWZXJpZnlUcmFuc2FjdGlvbk9wdGlvbnMgYXMgQmFzZVZlcmlmeVRyYW5zYWN0aW9uT3B0aW9ucyxcbiAgV2FsbGV0LFxuICBpc1ZhbGlkUHJ2LFxuICBpc1ZhbGlkWHBydixcbn0gZnJvbSAnQGJpdGdvL3Nkay1jb3JlJztcblxuaW1wb3J0IHtcbiAgYmFja3VwS2V5UmVjb3ZlcnksXG4gIENyb3NzQ2hhaW5SZWNvdmVyeVNpZ25lZCxcbiAgQ3Jvc3NDaGFpblJlY292ZXJ5VW5zaWduZWQsXG4gIGZvckNvaW4sXG4gIHJlY292ZXJDcm9zc0NoYWluLFxuICBSZWNvdmVyUGFyYW1zLFxuICBSZWNvdmVyeVByb3ZpZGVyLFxuICB2MUJhY2t1cEtleVJlY292ZXJ5LFxuICBWMVJlY292ZXJQYXJhbXMsXG4gIHYxU3dlZXAsXG4gIFYxU3dlZXBQYXJhbXMsXG59IGZyb20gJy4vcmVjb3ZlcnknO1xuaW1wb3J0IHsgZ2V0UmVwbGF5UHJvdGVjdGlvblB1YmtleXMsIGlzUmVwbGF5UHJvdGVjdGlvblVuc3BlbnQgfSBmcm9tICcuL3RyYW5zYWN0aW9uL2ZpeGVkU2NyaXB0L3JlcGxheVByb3RlY3Rpb24nO1xuaW1wb3J0IHsgc3VwcG9ydGVkQ3Jvc3NDaGFpblJlY292ZXJpZXMgfSBmcm9tICcuL2NvbmZpZyc7XG5pbXBvcnQge1xuICBhc3NlcnRWYWxpZFRyYW5zYWN0aW9uUmVjaXBpZW50LFxuICBEZWNvZGVkVHJhbnNhY3Rpb24sXG4gIGV4cGxhaW5UeCxcbiAgZnJvbUV4dGVuZGVkQWRkcmVzc0Zvcm1hdCxcbiAgaXNTY3JpcHRSZWNpcGllbnQsXG4gIHBhcnNlVHJhbnNhY3Rpb24sXG4gIHZlcmlmeVRyYW5zYWN0aW9uLFxufSBmcm9tICcuL3RyYW5zYWN0aW9uJztcbmltcG9ydCB0eXBlIHsgVHJhbnNhY3Rpb25FeHBsYW5hdGlvbiB9IGZyb20gJy4vdHJhbnNhY3Rpb24vZml4ZWRTY3JpcHQvZXhwbGFpblRyYW5zYWN0aW9uJztcbmltcG9ydCB7IE11c2lnMlBhcnRpY2lwYW50IH0gZnJvbSAnLi90cmFuc2FjdGlvbi9maXhlZFNjcmlwdC9tdXNpZzInO1xuaW1wb3J0IHtcbiAgQWdncmVnYXRlVmFsaWRhdGlvbkVycm9yLFxuICBFcnJvck1pc3NpbmdPdXRwdXRzLFxuICBFcnJvckltcGxpY2l0RXh0ZXJuYWxPdXRwdXRzLFxufSBmcm9tICcuL3RyYW5zYWN0aW9uL2Rlc2NyaXB0b3IvdmVyaWZ5VHJhbnNhY3Rpb24nO1xuaW1wb3J0IHsgYXNzZXJ0RGVzY3JpcHRvcldhbGxldEFkZHJlc3MsIGdldERlc2NyaXB0b3JNYXBGcm9tV2FsbGV0LCBpc0Rlc2NyaXB0b3JXYWxsZXQgfSBmcm9tICcuL2Rlc2NyaXB0b3InO1xuaW1wb3J0IHtcbiAgZ2V0RnVsbE5hbWVGcm9tQ29pbk5hbWUsXG4gIGdldE1haW5uZXRDb2luTmFtZSxcbiAgZ2V0TmV0d29ya0Zyb21Db2luTmFtZSxcbiAgaXNNYWlubmV0Q29pbixcbiAgVXR4b0NvaW5OYW1lLFxuICBVdHhvQ29pbk5hbWVNYWlubmV0LFxufSBmcm9tICcuL25hbWVzJztcbmltcG9ydCB7IGFzc2VydEZpeGVkU2NyaXB0V2FsbGV0QWRkcmVzcyB9IGZyb20gJy4vYWRkcmVzcy9maXhlZFNjcmlwdCc7XG5pbXBvcnQgeyBpc1Nka0JhY2tlbmQsIFBhcnNlZFRyYW5zYWN0aW9uLCBTZGtCYWNrZW5kIH0gZnJvbSAnLi90cmFuc2FjdGlvbi90eXBlcyc7XG5pbXBvcnQgeyBkZWNvZGVQc2J0V2l0aCwgZW5jb2RlVHJhbnNhY3Rpb24sIHN0cmluZ1RvQnVmZmVyVHJ5Rm9ybWF0cyB9IGZyb20gJy4vdHJhbnNhY3Rpb24vZGVjb2RlJztcbmltcG9ydCB7IGZldGNoS2V5Y2hhaW5zLCB0b0JpcDMyVHJpcGxlLCBVdHhvS2V5Y2hhaW4gfSBmcm9tICcuL2tleWNoYWlucyc7XG5pbXBvcnQgeyB2ZXJpZnlLZXlTaWduYXR1cmUsIHZlcmlmeVVzZXJQdWJsaWNLZXkgfSBmcm9tICcuL3ZlcmlmeUtleSc7XG5pbXBvcnQgeyBnZXRQb2xpY3lGb3JFbnYgfSBmcm9tICcuL2Rlc2NyaXB0b3IvdmFsaWRhdGVQb2xpY3knO1xuaW1wb3J0IHsgc2lnblRyYW5zYWN0aW9uIH0gZnJvbSAnLi90cmFuc2FjdGlvbi9zaWduVHJhbnNhY3Rpb24nO1xuaW1wb3J0IHsgaXNVdHhvV2FsbGV0RGF0YSwgVXR4b1dhbGxldCB9IGZyb20gJy4vd2FsbGV0JztcbmltcG9ydCB7IGlzRGVzY3JpcHRvcldhbGxldERhdGEgfSBmcm9tICcuL2Rlc2NyaXB0b3IvZGVzY3JpcHRvcldhbGxldCc7XG5pbXBvcnQgdHlwZSB7IFVuc3BlbnQgfSBmcm9tICcuL3Vuc3BlbnQnO1xuXG5pbXBvcnQgU2NyaXB0VHlwZTJPZjMgPSB1dHhvbGliLmJpdGdvLm91dHB1dFNjcmlwdHMuU2NyaXB0VHlwZTJPZjM7XG5cbmV4cG9ydCB0eXBlIFR4Rm9ybWF0ID1cbiAgLy8gVGhpcyBpcyBhIGxlZ2FjeSB0cmFuc2FjdGlvbiBmb3JtYXQgYmFzZWQgYXJvdW5kIHRoZSBiaXRjb2luanMtbGliIHNlcmlhbGl6YXRpb24gb2YgdW5zaWduZWQgdHJhbnNhY3Rpb25zXG4gIC8vIGRvZXMgbm90IGluY2x1ZGUgcHJldk91dCBkYXRhIGFuZCBpcyBhIGJpdCBwYWluZnVsIHRvIHdvcmsgd2l0aFxuICAvLyBnb2luZyB0byBiZSBkZXByZWNhdGVkIGluIGZhdm9yIG9mIHBzYnRcbiAgLy8gQGRlcHJlY2F0ZWRcbiAgfCAnbGVnYWN5J1xuICAvLyBUaGlzIGlzIHRoZSBzdGFuZGFyZCBwc2J0IGZvcm1hdCwgaW5jbHVkaW5nIHRoZSBmdWxsIHByZXZUeCBkYXRhIGZvciBsZWdhY3kgdHJhbnNhY3Rpb25zLlxuICAvLyBUaGlzIHdpbGwgcmVtYWluIHN1cHBvcnRlZCBidXQgaXMgbm90IHRoZSBkZWZhdWx0LCBzaW5jZSB0aGUgZGF0YSBzaXplcyBjYW4gYmVjb21lIHByb2hpYml0aXZlbHkgbGFyZ2UuXG4gIHwgJ3BzYnQnXG4gIC8vIFRoaXMgaXMgYSBub25zdGFuZGFyZCBwc2J0IHZlcnNpb24gd2hlcmUgbGVnYWN5IGlucHV0cyBhcmUgc2VyaWFsaXplZCBhcyBpZiB0aGV5IHdlcmUgc2Vnd2l0IGlucHV0cy5cbiAgLy8gV2hpbGUgdGhpcyBwcmV2ZW50cyB1cyB0byBmdWxseSB2ZXJpZnkgdGhlIHRyYW5zYWN0aW9uIGZlZSwgd2UgaGF2ZSBvdGhlciBjaGVja3MgaW4gcGxhY2UgdG8gZW5zdXJlIHRoZSBmZWUgaXMgd2l0aGluIGJvdW5kcy5cbiAgfCAncHNidC1saXRlJztcblxuZXhwb3J0IGNsYXNzIEVycm9yRGVwcmVjYXRlZFR4Rm9ybWF0IGV4dGVuZHMgRXJyb3Ige1xuICBjb25zdHJ1Y3Rvcih0eEZvcm1hdDogVHhGb3JtYXQpIHtcbiAgICBzdXBlcihgU0RLIHN1cHBvcnQgZm9yIHR4Rm9ybWF0PSR7dHhGb3JtYXR9IGlzIGRlcHJlY2F0ZWQgb24gdGhpcyBlbnZpcm9ubWVudC4gUGxlYXNlIHVzZSBwc2J0IGluc3RlYWQuYCk7XG4gIH1cbn1cblxudHlwZSBVdHhvQ3VzdG9tU2lnbmluZ0Z1bmN0aW9uPFROdW1iZXIgZXh0ZW5kcyBudW1iZXIgfCBiaWdpbnQ+ID0ge1xuICAocGFyYW1zOiB7XG4gICAgY29pbjogSUJhc2VDb2luO1xuICAgIHR4UHJlYnVpbGQ6IFRyYW5zYWN0aW9uUHJlYnVpbGQ8VE51bWJlcj47XG4gICAgcHVicz86IHN0cmluZ1tdO1xuICAgIC8qKlxuICAgICAqIHNpZ25pbmdTdGVwIGZsYWcgYmVjb21lcyBhcHBsaWNhYmxlIHdoZW4gYm90aCBvZiB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDpcbiAgICAgKiAxKSBXaGVuIHRoZSBleHRlcm5hbCBleHByZXNzIHNpZ25lciBpcyBhY3RpdmF0ZWRcbiAgICAgKiAyKSBXaGVuIHRoZSBQU0JUIGluY2x1ZGVzIGF0IGxlYXN0IG9uZSB0YXByb290S2V5UGF0aFNwZW5kIGlucHV0LlxuICAgICAqXG4gICAgICogVGhlIHNpZ25pbmcgcHJvY2VzcyBvZiBhIHRhcHJvb3RLZXlQYXRoU3BlbmQgaW5wdXQgaXMgYSA0LXN0ZXAgc2VxdWVuY2U6XG4gICAgICogaSkgdXNlciBub25jZSBnZW5lcmF0aW9uIC0gc2lnbmVyTm9uY2UgLSB0aGlzIGlzIHRoZSBmaXJzdCBjYWxsIHRvIGV4dGVybmFsIGV4cHJlc3Mgc2lnbmVyIHNpZ25UcmFuc2FjdGlvblxuICAgICAqIGlpKSBiaXRnbyBub25jZSBnZW5lcmF0aW9uIC0gY29zaWduZXJOb25jZSAtIHRoaXMgaXMgdGhlIGZpcnN0IGFuZCBvbmx5IGNhbGwgdG8gbG9jYWwgc2lnblRyYW5zYWN0aW9uXG4gICAgICogaWlpKSB1c2VyIHNpZ25hdHVyZSAtIHNpZ25lclNpZ25hdHVyZSAtIHRoaXMgaXMgdGhlIHNlY29uZCBjYWxsIHRvIGV4dGVybmFsIGV4cHJlc3Mgc2lnbmVyIHNpZ25UcmFuc2FjdGlvblxuICAgICAqIGl2KSBiaXRnbyBzaWduYXR1cmUgLSBub3QgaW4gc2lnblRyYW5zYWN0aW9uIG1ldGhvZOKAmXMgc2NvcGVcbiAgICAgKlxuICAgICAqIEluIHRoZSBhYnNlbmNlIG9mIHRoaXMgZmxhZywgdGhlIGFmb3JlbWVudGlvbmVkIGZpcnN0IHRocmVlIHNlcXVlbmNlIGlzIGV4ZWN1dGVkIGluIGEgc2luZ2xlIHNpZ25UcmFuc2FjdGlvbiBjYWxsLlxuICAgICAqXG4gICAgICogTk9URTogV2UgbWFrZSBhIHN0cm9uZyBhc3N1bXB0aW9uIHRoYXQgdGhlIGV4dGVybmFsIGV4cHJlc3Mgc2lnbmVyIGFuZCBpdHMgY2FsbGVyIHVzZXMgc3RpY2t5IHNlc3Npb25zLFxuICAgICAqIHNpbmNlIFBTQlRzIGFyZSBjYWNoZWQgaW4gc3RlcCAxIHRvIGJlIHVzZWQgaW4gc3RlcCAzIGZvciBNdVNpZzIgdXNlciBzZWN1cmUgbm9uY2UgYWNjZXNzLlxuICAgICAqL1xuICAgIHNpZ25pbmdTdGVwPzogJ3NpZ25lck5vbmNlJyB8ICdzaWduZXJTaWduYXR1cmUnIHwgJ2Nvc2lnbmVyTm9uY2UnO1xuICB9KTogUHJvbWlzZTxTaWduZWRUcmFuc2FjdGlvbj47XG59O1xuXG5jb25zdCB7IGlzQ2hhaW5Db2RlLCBzY3JpcHRUeXBlRm9yQ2hhaW4sIG91dHB1dFNjcmlwdHMgfSA9IGJpdGdvO1xuXG4vKipcbiAqIENoZWNrIGlmIGEgZGVjb2RlZCB0cmFuc2FjdGlvbiBoYXMgYXQgbGVhc3Qgb25lIHRhcHJvb3Qga2V5IHBhdGggc3BlbmQgKE11U2lnMikgaW5wdXQuXG4gKiBXb3JrcyBmb3IgYm90aCB1dHhvbGliIFV0eG9Qc2J0IGFuZCB3YXNtLXV0eG8gQml0R29Qc2J0LlxuICovXG5mdW5jdGlvbiBoYXNLZXlQYXRoU3BlbmRJbnB1dDxUTnVtYmVyIGV4dGVuZHMgbnVtYmVyIHwgYmlnaW50PihcbiAgdHg6IERlY29kZWRUcmFuc2FjdGlvbjxUTnVtYmVyPixcbiAgcHViczogc3RyaW5nW10gfCB1bmRlZmluZWQsXG4gIGNvaW5OYW1lOiBVdHhvQ29pbk5hbWVcbik6IGJvb2xlYW4ge1xuICBpZiAodHggaW5zdGFuY2VvZiBiaXRnby5VdHhvUHNidCkge1xuICAgIHJldHVybiBiaXRnby5pc1RyYW5zYWN0aW9uV2l0aEtleVBhdGhTcGVuZElucHV0KHR4KTtcbiAgfVxuICBpZiAodHggaW5zdGFuY2VvZiBmaXhlZFNjcmlwdFdhbGxldC5CaXRHb1BzYnQpIHtcbiAgICBhc3NlcnQocHVicyAmJiBpc1RyaXBsZShwdWJzKSwgJ3B1YiB0cmlwbGUgaXMgcmVxdWlyZWQgdG8gY2hlY2sgZm9yIGtleSBwYXRoIHNwZW5kIGlucHV0cyBpbiB3YXNtLXV0eG8gUFNCVCcpO1xuICAgIGNvbnN0IHJvb3RXYWxsZXRLZXlzID0gZml4ZWRTY3JpcHRXYWxsZXQuUm9vdFdhbGxldEtleXMuZnJvbVhwdWJzKHB1YnMpO1xuICAgIGNvbnN0IHJlcGxheVByb3RlY3Rpb24gPSB7IHB1YmxpY0tleXM6IGdldFJlcGxheVByb3RlY3Rpb25QdWJrZXlzKGNvaW5OYW1lKSB9O1xuICAgIGNvbnN0IHBhcnNlZCA9IHR4LnBhcnNlVHJhbnNhY3Rpb25XaXRoV2FsbGV0S2V5cyhyb290V2FsbGV0S2V5cywgeyByZXBsYXlQcm90ZWN0aW9uIH0pO1xuICAgIHJldHVybiBwYXJzZWQuaW5wdXRzLnNvbWUoKGlucHV0KSA9PiBpbnB1dC5zY3JpcHRUeXBlID09PSAncDJ0ck11c2lnMktleVBhdGgnKTtcbiAgfVxuICByZXR1cm4gZmFsc2U7XG59XG5cbi8qKlxuICogQ29udmVydCBWYWxpZGF0aW9uRXJyb3IgdG8gVHhJbnRlbnRNaXNtYXRjaFJlY2lwaWVudEVycm9yIHdpdGggc3RydWN0dXJlZCBkYXRhXG4gKlxuICogVGhpcyBwcmVzZXJ2ZXMgdGhlIHN0cnVjdHVyZWQgZXJyb3IgaW5mb3JtYXRpb24gZnJvbSB0aGUgb3JpZ2luYWwgVmFsaWRhdGlvbkVycm9yXG4gKiBieSBleHRyYWN0aW5nIHRoZSBtaXNtYXRjaGVkIG91dHB1dHMgYW5kIGNvbnZlcnRpbmcgdGhlbSB0byB0aGUgc3RhbmRhcmRpemVkIGZvcm1hdC5cbiAqIFRoZSBvcmlnaW5hbCBlcnJvciBpcyBwcmVzZXJ2ZWQgYXMgdGhlIGBjYXVzZWAgZm9yIGRlYnVnZ2luZyBwdXJwb3Nlcy5cbiAqL1xuZnVuY3Rpb24gY29udmVydFZhbGlkYXRpb25FcnJvclRvVHhJbnRlbnRNaXNtYXRjaChcbiAgZXJyb3I6IEFnZ3JlZ2F0ZVZhbGlkYXRpb25FcnJvcixcbiAgcmVxSWQ6IHN0cmluZyB8IElSZXF1ZXN0VHJhY2VyIHwgdW5kZWZpbmVkLFxuICB0eFBhcmFtczogQmFzZVRyYW5zYWN0aW9uUGFyYW1zLFxuICB0eEhleDogc3RyaW5nIHwgdW5kZWZpbmVkLFxuICB0eEV4cGxhbmF0aW9uPzogdW5rbm93blxuKTogVHhJbnRlbnRNaXNtYXRjaFJlY2lwaWVudEVycm9yIHtcbiAgY29uc3QgbWlzbWF0Y2hlZFJlY2lwaWVudHM6IE1pc21hdGNoZWRSZWNpcGllbnRbXSA9IFtdO1xuXG4gIGZvciAoY29uc3QgZXJyIG9mIGVycm9yLmVycm9ycykge1xuICAgIGlmIChlcnIgaW5zdGFuY2VvZiBFcnJvck1pc3NpbmdPdXRwdXRzKSB7XG4gICAgICBtaXNtYXRjaGVkUmVjaXBpZW50cy5wdXNoKFxuICAgICAgICAuLi5lcnIubWlzc2luZ091dHB1dHMubWFwKChvdXRwdXQpID0+ICh7XG4gICAgICAgICAgYWRkcmVzczogb3V0cHV0LmFkZHJlc3MsXG4gICAgICAgICAgYW1vdW50OiBvdXRwdXQuYW1vdW50LnRvU3RyaW5nKCksXG4gICAgICAgIH0pKVxuICAgICAgKTtcbiAgICB9IGVsc2UgaWYgKGVyciBpbnN0YW5jZW9mIEVycm9ySW1wbGljaXRFeHRlcm5hbE91dHB1dHMpIHtcbiAgICAgIG1pc21hdGNoZWRSZWNpcGllbnRzLnB1c2goXG4gICAgICAgIC4uLmVyci5pbXBsaWNpdEV4dGVybmFsT3V0cHV0cy5tYXAoKG91dHB1dCkgPT4gKHtcbiAgICAgICAgICBhZGRyZXNzOiBvdXRwdXQuYWRkcmVzcyxcbiAgICAgICAgICBhbW91bnQ6IG91dHB1dC5hbW91bnQudG9TdHJpbmcoKSxcbiAgICAgICAgfSkpXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIGNvbnN0IHR4SW50ZW50RXJyb3IgPSBuZXcgVHhJbnRlbnRNaXNtYXRjaFJlY2lwaWVudEVycm9yKFxuICAgIGVycm9yLm1lc3NhZ2UsXG4gICAgcmVxSWQsXG4gICAgW3R4UGFyYW1zXSxcbiAgICB0eEhleCxcbiAgICBtaXNtYXRjaGVkUmVjaXBpZW50cyxcbiAgICB0eEV4cGxhbmF0aW9uXG4gICk7XG4gIC8vIFByZXNlcnZlIHRoZSBvcmlnaW5hbCBzdHJ1Y3R1cmVkIGVycm9yIGFzIHRoZSBjYXVzZSBmb3IgZGVidWdnaW5nXG4gIC8vIFNlZTogaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSmF2YVNjcmlwdC9SZWZlcmVuY2UvR2xvYmFsX09iamVjdHMvRXJyb3IvY2F1c2VcbiAgKHR4SW50ZW50RXJyb3IgYXMgRXJyb3IgJiB7IGNhdXNlPzogRXJyb3IgfSkuY2F1c2UgPSBlcnJvcjtcbiAgcmV0dXJuIHR4SW50ZW50RXJyb3I7XG59XG5cbmV4cG9ydCB0eXBlIHsgRGVjb2RlZFRyYW5zYWN0aW9uIH0gZnJvbSAnLi90cmFuc2FjdGlvbi90eXBlcyc7XG5cbmV4cG9ydCB0eXBlIFJvb3RXYWxsZXRLZXlzID0gYml0Z28uUm9vdFdhbGxldEtleXM7XG5cbmV4cG9ydCB0eXBlIFV0eG9Db2luU3BlY2lmaWMgPSBBZGRyZXNzQ29pblNwZWNpZmljIHwgRGVzY3JpcHRvckFkZHJlc3NDb2luU3BlY2lmaWM7XG5cbmV4cG9ydCBpbnRlcmZhY2UgVmVyaWZ5QWRkcmVzc09wdGlvbnM8VENvaW5TcGVjaWZpYyBleHRlbmRzIFV0eG9Db2luU3BlY2lmaWM+IGV4dGVuZHMgQmFzZVZlcmlmeUFkZHJlc3NPcHRpb25zIHtcbiAgY2hhaW4/OiBudW1iZXI7XG4gIGluZGV4OiBudW1iZXI7XG4gIGNvaW5TcGVjaWZpYz86IFRDb2luU3BlY2lmaWM7XG59XG5cbmV4cG9ydCB0eXBlIEJpcDMyMk1lc3NhZ2UgPSB7XG4gIGFkZHJlc3M6IHN0cmluZztcbiAgbWVzc2FnZTogc3RyaW5nO1xufTtcblxuZXhwb3J0IGludGVyZmFjZSBUcmFuc2FjdGlvbkluZm88VE51bWJlciBleHRlbmRzIG51bWJlciB8IGJpZ2ludCA9IG51bWJlcj4ge1xuICAvKiogTWFwcyB0eGlkIHRvIHR4aGV4LiBSZXF1aXJlZCBmb3Igb2ZmbGluZSBzaWduaW5nLiAqL1xuICB0eEhleGVzPzogUmVjb3JkPHN0cmluZywgc3RyaW5nPjtcbiAgY2hhbmdlQWRkcmVzc2VzPzogc3RyaW5nW107XG4gIC8qKiBwc2J0IGRvZXMgbm90IHJlcXVpcmUgdW5zcGVudHMuICovXG4gIHVuc3BlbnRzPzogVW5zcGVudDxUTnVtYmVyPltdO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEV4cGxhaW5UcmFuc2FjdGlvbk9wdGlvbnM8VE51bWJlciBleHRlbmRzIG51bWJlciB8IGJpZ2ludCA9IG51bWJlcj4ge1xuICB0eEhleDogc3RyaW5nO1xuICB0eEluZm8/OiBUcmFuc2FjdGlvbkluZm88VE51bWJlcj47XG4gIGZlZUluZm8/OiBzdHJpbmc7XG4gIHB1YnM/OiBUcmlwbGU8c3RyaW5nPjtcbiAgY3VzdG9tQ2hhbmdlWHB1YnM/OiBUcmlwbGU8c3RyaW5nPjtcbiAgZGVjb2RlV2l0aD86IFNka0JhY2tlbmQ7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRGVjb3JhdGVkRXhwbGFpblRyYW5zYWN0aW9uT3B0aW9uczxUTnVtYmVyIGV4dGVuZHMgbnVtYmVyIHwgYmlnaW50ID0gbnVtYmVyPlxuICBleHRlbmRzIEV4cGxhaW5UcmFuc2FjdGlvbk9wdGlvbnM8VE51bWJlcj4ge1xuICBjaGFuZ2VJbmZvPzogeyBhZGRyZXNzOiBzdHJpbmc7IGNoYWluOiBudW1iZXI7IGluZGV4OiBudW1iZXIgfVtdO1xufVxuXG5leHBvcnQgdHlwZSBVdHhvTmV0d29yayA9IHV0eG9saWIuTmV0d29yaztcblxuZXhwb3J0IGludGVyZmFjZSBUcmFuc2FjdGlvblByZWJ1aWxkPFROdW1iZXIgZXh0ZW5kcyBudW1iZXIgfCBiaWdpbnQgPSBudW1iZXI+IGV4dGVuZHMgQmFzZVRyYW5zYWN0aW9uUHJlYnVpbGQge1xuICB0eEluZm8/OiBUcmFuc2FjdGlvbkluZm88VE51bWJlcj47XG4gIGJsb2NrSGVpZ2h0PzogbnVtYmVyO1xuICBkZWNvZGVXaXRoPzogU2RrQmFja2VuZDtcbiAgLyoqXG4gICAqIFBTQlQtbGl0ZSBoZXggcHJlc2VudCBvbmx5IGluIHBlbmRpbmcgYXBwcm92YWwgZmxvd3MsIHdoZXJlIGFub3RoZXIgdXNlcidzIHNlbmQgZml4ZWQgdGhlIGZvcm1hdC5cbiAgICogTm90IHNldCBpbiByZWd1bGFyIC90eC9idWlsZCByZXNwb25zZXMgKHdoZXJlIHRoZSBjYWxsZXIgY29udHJvbHMgdGhlIGJ1aWxkIHBhcmFtZXRlcnMpLlxuICAgKiBQcmVmZXJyZWQgb3ZlciB0eEhleCB3aGVuIHByZXNlbnQsIGFzIGl0IGNhcnJpZXMgcmljaGVyIGRhdGEgKG5vbldpdG5lc3NVdHhvLCByZWRlZW1TY3JpcHQsIEJJUC0zMiBwYXRocykuXG4gICAqL1xuICB0eEhleFBzYnQ/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgVHJhbnNhY3Rpb25QYXJhbXMgZXh0ZW5kcyBCYXNlVHJhbnNhY3Rpb25QYXJhbXMge1xuICB3YWxsZXRQYXNzcGhyYXNlPzogc3RyaW5nO1xuICBhbGxvd0V4dGVybmFsQ2hhbmdlQWRkcmVzcz86IGJvb2xlYW47XG4gIGNoYW5nZUFkZHJlc3M/OiBzdHJpbmc7XG4gIHJiZlR4SWRzPzogc3RyaW5nW107XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUGFyc2VUcmFuc2FjdGlvbk9wdGlvbnM8VE51bWJlciBleHRlbmRzIG51bWJlciB8IGJpZ2ludCA9IG51bWJlcj4gZXh0ZW5kcyBCYXNlUGFyc2VUcmFuc2FjdGlvbk9wdGlvbnMge1xuICB0eFBhcmFtczogVHJhbnNhY3Rpb25QYXJhbXM7XG4gIHR4UHJlYnVpbGQ6IFRyYW5zYWN0aW9uUHJlYnVpbGQ8VE51bWJlcj47XG4gIHdhbGxldDogVXR4b1dhbGxldDtcbiAgdmVyaWZpY2F0aW9uPzogVmVyaWZpY2F0aW9uT3B0aW9ucztcbiAgcmVxSWQ/OiBJUmVxdWVzdFRyYWNlcjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBHZW5lcmF0ZUFkZHJlc3NPcHRpb25zIHtcbiAgYWRkcmVzc1R5cGU/OiBTY3JpcHRUeXBlMk9mMztcbiAgdGhyZXNob2xkPzogbnVtYmVyO1xuICBjaGFpbj86IG51bWJlcjtcbiAgaW5kZXg/OiBudW1iZXI7XG4gIHNlZ3dpdD86IGJvb2xlYW47XG4gIGJlY2gzMj86IGJvb2xlYW47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgR2VuZXJhdGVGaXhlZFNjcmlwdEFkZHJlc3NPcHRpb25zIGV4dGVuZHMgR2VuZXJhdGVBZGRyZXNzT3B0aW9ucyB7XG4gIGZvcm1hdD86IENyZWF0ZUFkZHJlc3NGb3JtYXQ7XG4gIGtleWNoYWluczoge1xuICAgIHB1Yjogc3RyaW5nO1xuICAgIGFzcEtleUlkPzogc3RyaW5nO1xuICB9W107XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQWRkcmVzc0RldGFpbHMge1xuICBhZGRyZXNzOiBzdHJpbmc7XG4gIGNoYWluOiBudW1iZXI7XG4gIGluZGV4OiBudW1iZXI7XG4gIGNvaW46IHN0cmluZztcbiAgY29pblNwZWNpZmljOiBBZGRyZXNzQ29pblNwZWNpZmljIHwgRGVzY3JpcHRvckFkZHJlc3NDb2luU3BlY2lmaWM7XG4gIGFkZHJlc3NUeXBlPzogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIERlc2NyaXB0b3JBZGRyZXNzQ29pblNwZWNpZmljIGV4dGVuZHMgQWRkcmVzc0NvaW5TcGVjaWZpYyB7XG4gIGRlc2NyaXB0b3JOYW1lOiBzdHJpbmc7XG4gIGRlc2NyaXB0b3JDaGVja3N1bTogc3RyaW5nO1xufVxuXG50eXBlIFV0eG9CYXNlU2lnblRyYW5zYWN0aW9uT3B0aW9uczxUTnVtYmVyIGV4dGVuZHMgbnVtYmVyIHwgYmlnaW50ID0gbnVtYmVyPiA9IEJhc2VTaWduVHJhbnNhY3Rpb25PcHRpb25zICYge1xuICAvKiogVHJhbnNhY3Rpb24gcHJlYnVpbGQgZnJvbSBiaXRnbyBzZXJ2ZXIgKi9cbiAgdHhQcmVidWlsZDoge1xuICAgIC8qKlxuICAgICAqIHdhbGxldElkIGlzIHJlcXVpcmVkIGluIGZvbGxvd2luZyAyIHNjZW5hcmlvcy5cbiAgICAgKiAxLiBFeHRlcm5hbCBzaWduZXIgZXhwcmVzcyBtb2RlIGlzIHVzZWQuXG4gICAgICogMi4gYml0Z28gTXVTaWcyIG5vbmNlIGlzIHJlcXVlc3RlZFxuICAgICAqL1xuICAgIHdhbGxldElkPzogc3RyaW5nO1xuICAgIHR4SGV4OiBzdHJpbmc7XG4gICAgdHhJbmZvPzogVHJhbnNhY3Rpb25JbmZvPFROdW1iZXI+O1xuICAgIGRlY29kZVdpdGg/OiBTZGtCYWNrZW5kO1xuICB9O1xuICAvKiogeHB1YnMgdHJpcGxlIGZvciB3YWxsZXQgKHVzZXIsIGJhY2t1cCwgYml0Z28pLiBSZXF1aXJlZCBvbmx5IHdoZW4gdHhQcmVidWlsZC50eEhleCBpcyBub3QgYSBQU0JUICovXG4gIHB1YnM/OiBUcmlwbGU8c3RyaW5nPjtcbiAgLyoqIHhwdWIgZm9yIGNvc2lnbmVyIChkZWZhdWx0cyB0byBiaXRnbykgKi9cbiAgY29zaWduZXJQdWI/OiBzdHJpbmc7XG4gIC8qKlxuICAgKiBXaGVuIHRydWUsIGNyZWF0ZXMgZnVsbC1zaWduZWQgdHJhbnNhY3Rpb24gd2l0aG91dCBwbGFjZWhvbGRlciBzaWduYXR1cmVzLlxuICAgKiBXaGVuIGZhbHNlLCBjcmVhdGVzIGhhbGYtc2lnbmVkIHRyYW5zYWN0aW9uIHdpdGggcGxhY2Vob2xkZXIgc2lnbmF0dXJlcy5cbiAgICovXG4gIGlzTGFzdFNpZ25hdHVyZT86IGJvb2xlYW47XG4gIC8qKlxuICAgKiBJZiB0cnVlLCBhbGxvd3Mgc2lnbmluZyBhIG5vbi1zZWd3aXQgaW5wdXQgd2l0aCBhIHdpdG5lc3NVdHhvIGluc3RlYWQgcmVxdWlyaW5nIGEgcHJldmlvdXNcbiAgICogdHJhbnNhY3Rpb24gKG5vbldpdG5lc3NVdHhvKVxuICAgKi9cbiAgYWxsb3dOb25TZWd3aXRTaWduaW5nV2l0aG91dFByZXZUeD86IGJvb2xlYW47XG4gIC8qKlxuICAgKiBXaGVuIHRydWUsIHRoZSBzaWduZWQgdHJhbnNhY3Rpb24gd2lsbCBiZSBjb252ZXJ0ZWQgZnJvbSBQU0JUIHRvIGxlZ2FjeSBmb3JtYXQgYmVmb3JlIHJldHVybmluZy5cbiAgICogU2V0IGF1dG9tYXRpY2FsbHkgYnkgcHJlc2lnblRyYW5zYWN0aW9uKCkgd2hlbiB0aGUgY2FsbGVyIGV4cGxpY2l0bHkgcmVxdWVzdGVkIHR4Rm9ybWF0OiAnbGVnYWN5Jy5cbiAgICovXG4gIHJldHVybkxlZ2FjeUZvcm1hdD86IGJvb2xlYW47XG4gIHdhbGxldD86IFV0eG9XYWxsZXQ7XG4gIC8qKlxuICAgKiBXaGVuIHRydWUgKGRlZmF1bHQpLCBleHRyYWN0IGZpbmFsaXplZCBQU0JUIHRvIGxlZ2FjeSB0cmFuc2FjdGlvbiBmb3JtYXQuXG4gICAqIFdoZW4gZmFsc2UsIHJldHVybiBmaW5hbGl6ZWQgUFNCVC4gVXNlZnVsIGZvciB0ZXN0aW5nIHRvIGtlZXAgdHJhbnNhY3Rpb25zIGluIFBTQlQgZm9ybWF0LlxuICAgKi9cbiAgZXh0cmFjdFRyYW5zYWN0aW9uPzogYm9vbGVhbjtcbiAgLyoqIFdoZW4gdHJ1ZSwgZW1iZWRzIFdBU00tVVRYTyB2ZXJzaW9uIG1ldGFkYXRhIGludG8gdGhlIHNpZ25lZCBQU0JULiBEZWZhdWx0cyB0byBmYWxzZS4gKi9cbiAgd3JpdGVTaWduZWRXaXRoPzogYm9vbGVhbjtcbn07XG5cbmV4cG9ydCB0eXBlIFNpZ25UcmFuc2FjdGlvbk9wdGlvbnM8VE51bWJlciBleHRlbmRzIG51bWJlciB8IGJpZ2ludCA9IG51bWJlcj4gPSBVdHhvQmFzZVNpZ25UcmFuc2FjdGlvbk9wdGlvbnM8VE51bWJlcj4gJlxuICAoXG4gICAgfCB7XG4gICAgICAgIHBydjogc3RyaW5nO1xuICAgICAgICBzaWduaW5nU3RlcD86ICdzaWduZXJOb25jZScgfCAnc2lnbmVyU2lnbmF0dXJlJztcbiAgICAgIH1cbiAgICB8IHtcbiAgICAgICAgc2lnbmluZ1N0ZXA6ICdjb3NpZ25lck5vbmNlJztcbiAgICAgIH1cbiAgKTtcblxuZXhwb3J0IGludGVyZmFjZSBNdWx0aVNpZ0FkZHJlc3Mge1xuICBvdXRwdXRTY3JpcHQ6IEJ1ZmZlcjtcbiAgcmVkZWVtU2NyaXB0PzogQnVmZmVyO1xuICB3aXRuZXNzU2NyaXB0PzogQnVmZmVyO1xuICBhZGRyZXNzOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUmVjb3ZlckZyb21Xcm9uZ0NoYWluT3B0aW9ucyB7XG4gIHR4aWQ6IHN0cmluZztcbiAgcmVjb3ZlcnlBZGRyZXNzOiBzdHJpbmc7XG4gIHdhbGxldDogc3RyaW5nO1xuICB3YWxsZXRQYXNzcGhyYXNlPzogc3RyaW5nO1xuICB4cHJ2Pzogc3RyaW5nO1xuICBhcGlLZXk/OiBzdHJpbmc7XG4gIC8qKiBAZGVwcmVjYXRlZCAqL1xuICBjb2luPzogQWJzdHJhY3RVdHhvQ29pbjtcbiAgcmVjb3ZlcnlDb2luPzogQWJzdHJhY3RVdHhvQ29pbjtcbiAgc2lnbmVkPzogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBWZXJpZnlLZXlTaWduYXR1cmVzT3B0aW9ucyB7XG4gIHVzZXJLZXljaGFpbjogeyBwdWI/OiBzdHJpbmcgfTtcbiAga2V5Y2hhaW5Ub1ZlcmlmeTogeyBwdWI/OiBzdHJpbmcgfTtcbiAga2V5U2lnbmF0dXJlOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgVmVyaWZ5VXNlclB1YmxpY0tleU9wdGlvbnMge1xuICB1c2VyS2V5Y2hhaW4/OiBVdHhvS2V5Y2hhaW47XG4gIGRpc2FibGVOZXR3b3JraW5nOiBib29sZWFuO1xuICB0eFBhcmFtczogVHJhbnNhY3Rpb25QYXJhbXM7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgVmVyaWZ5VHJhbnNhY3Rpb25PcHRpb25zPFROdW1iZXIgZXh0ZW5kcyBudW1iZXIgfCBiaWdpbnQgPSBudW1iZXI+XG4gIGV4dGVuZHMgQmFzZVZlcmlmeVRyYW5zYWN0aW9uT3B0aW9ucyB7XG4gIHR4UHJlYnVpbGQ6IFRyYW5zYWN0aW9uUHJlYnVpbGQ8VE51bWJlcj47XG4gIHR4UGFyYW1zOiBUcmFuc2FjdGlvblBhcmFtcztcbiAgd2FsbGV0OiBVdHhvV2FsbGV0O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFNpZ25Qc2J0UmVxdWVzdCB7XG4gIHBzYnQ6IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBTaWduUHNidFJlc3BvbnNlIHtcbiAgcHNidDogc3RyaW5nO1xufVxuXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgQWJzdHJhY3RVdHhvQ29pblxuICBleHRlbmRzIEJhc2VDb2luXG4gIGltcGxlbWVudHMgTXVzaWcyUGFydGljaXBhbnQ8dXR4b2xpYi5iaXRnby5VdHhvUHNidD4sIE11c2lnMlBhcnRpY2lwYW50PGZpeGVkU2NyaXB0V2FsbGV0LkJpdEdvUHNidD5cbntcbiAgYWJzdHJhY3QgbmFtZTogVXR4b0NvaW5OYW1lO1xuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHdoZXRoZXIgdGhpcyBjb2luIGlzIGEgbWFpbm5ldCBjb2luLlxuICAgKiBEZWZhdWx0IGltcGxlbWVudGF0aW9uIHVzZXMgdGhlIG5hbWUgcHJvcGVydHkuXG4gICAqIENhbiBiZSBvdmVycmlkZGVuIGJ5IHN1YmNsYXNzZXMuXG4gICAqL1xuICBwcm90ZWN0ZWQgaXNNYWlubmV0KCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBpc01haW5uZXRDb2luKHRoaXMubmFtZSk7XG4gIH1cblxuICBwdWJsaWMgcmVhZG9ubHkgYW1vdW50VHlwZTogJ251bWJlcicgfCAnYmlnaW50JztcblxuICBwcm90ZWN0ZWQgc3VwcG9ydGVkVHhGb3JtYXRzOiB7IHBzYnQ6IGJvb2xlYW47IGxlZ2FjeTogYm9vbGVhbiB9ID0ge1xuICAgIHBzYnQ6IHRydWUsXG4gICAgbGVnYWN5OiB0aGlzLmlzTWFpbm5ldCgpLFxuICB9O1xuXG4gIHByb3RlY3RlZCBzdXBwb3J0ZWRTZGtCYWNrZW5kczogeyB1dHhvbGliOiBib29sZWFuOyAnd2FzbS11dHhvJzogYm9vbGVhbiB9ID0ge1xuICAgIHV0eG9saWI6IHRoaXMuaXNNYWlubmV0KCksXG4gICAgJ3dhc20tdXR4byc6IHRydWUsXG4gIH07XG5cbiAgcHJvdGVjdGVkIGNvbnN0cnVjdG9yKGJpdGdvOiBCaXRHb0Jhc2UsIGFtb3VudFR5cGU6ICdudW1iZXInIHwgJ2JpZ2ludCcgPSAnbnVtYmVyJykge1xuICAgIHN1cGVyKGJpdGdvKTtcbiAgICB0aGlzLmFtb3VudFR5cGUgPSBhbW91bnRUeXBlO1xuICB9XG5cbiAgZGVmYXVsdFNka0JhY2tlbmQ6IFNka0JhY2tlbmQgPSAnd2FzbS11dHhvJztcblxuICAvKipcbiAgICogQGRlcHJlY2F0ZWQgLSB3aWxsIGJlIHJlbW92ZWQgd2hlbiB3ZSBkcm9wIHN1cHBvcnQgZm9yIHV0eG9saWJcbiAgICogVXNlIGBuYW1lYCBwcm9wZXJ0eSBpbnN0ZWFkLlxuICAgKi9cbiAgZ2V0IG5ldHdvcmsoKTogdXR4b2xpYi5OZXR3b3JrIHtcbiAgICByZXR1cm4gZ2V0TmV0d29ya0Zyb21Db2luTmFtZSh0aGlzLm5hbWUpO1xuICB9XG5cbiAgZ2V0Q2hhaW4oKTogVXR4b0NvaW5OYW1lIHtcbiAgICByZXR1cm4gdGhpcy5uYW1lO1xuICB9XG5cbiAgZ2V0RmFtaWx5KCk6IFV0eG9Db2luTmFtZU1haW5uZXQge1xuICAgIHJldHVybiBnZXRNYWlubmV0Q29pbk5hbWUodGhpcy5uYW1lKTtcbiAgfVxuXG4gIGdldEZ1bGxOYW1lKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGdldEZ1bGxOYW1lRnJvbUNvaW5OYW1lKHRoaXMubmFtZSk7XG4gIH1cblxuICAvKiogSW5kaWNhdGVzIHdoZXRoZXIgdGhlIGNvaW4gc3VwcG9ydHMgYSBibG9jayB0YXJnZXQgKi9cbiAgc3VwcG9ydHNCbG9ja1RhcmdldCgpOiBib29sZWFuIHtcbiAgICAvLyBGSVhNRTogdGhlIFNESyBkb2VzIG5vdCBzZWVtIHRvIHVzZSB0aGlzIGFueXdoZXJlIHNvIGl0IGlzIHVuY2xlYXIgd2hhdCB0aGUgcHVycG9zZSBvZiB0aGlzIG1ldGhvZCBpc1xuICAgIHN3aXRjaCAoZ2V0TWFpbm5ldCh0aGlzLm5ldHdvcmspKSB7XG4gICAgICBjYXNlIHV0eG9saWIubmV0d29ya3MuYml0Y29pbjpcbiAgICAgIGNhc2UgdXR4b2xpYi5uZXR3b3Jrcy5kb2dlY29pbjpcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgc3dlZXBXaXRoU2VuZE1hbnkoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICAvKiogQGRlcHJlY2F0ZWQgKi9cbiAgc3RhdGljIGdldCB2YWxpZEFkZHJlc3NUeXBlcygpOiBTY3JpcHRUeXBlMk9mM1tdIHtcbiAgICByZXR1cm4gWy4uLm91dHB1dFNjcmlwdHMuc2NyaXB0VHlwZXMyT2YzXTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBmYWN0b3IgYmV0d2VlbiB0aGUgYmFzZSB1bml0IGFuZCBpdHMgc21hbGxlc3Qgc3ViZGl2aXNvblxuICAgKiBAcmV0dXJuIHtudW1iZXJ9XG4gICAqL1xuICBnZXRCYXNlRmFjdG9yKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIDFlODtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVjayBpZiBhbiBhZGRyZXNzIGlzIHZhbGlkXG4gICAqIEBwYXJhbSBhZGRyZXNzXG4gICAqIEBwYXJhbSBwYXJhbVxuICAgKi9cbiAgaXNWYWxpZEFkZHJlc3MoXG4gICAgYWRkcmVzczogc3RyaW5nLFxuICAgIHBhcmFtPzogeyBhbnlGb3JtYXQ/OiBib29sZWFuOyBhbGxvd0xpZ2h0bmluZz86IGJvb2xlYW4gfSB8IC8qIGxlZ2FjeSBwYXJhbWV0ZXIgKi8gYm9vbGVhblxuICApOiBib29sZWFuIHtcbiAgICBpZiAodHlwZW9mIHBhcmFtID09PSAnYm9vbGVhbicgJiYgcGFyYW0pIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignZGVwcmVjYXRlZCcpO1xuICAgIH1cblxuICAgIGNvbnN0IGFsbG93TGlnaHRuaW5nID0gKHBhcmFtIGFzIHsgYWxsb3dMaWdodG5pbmc/OiBib29sZWFuIH0gfCB1bmRlZmluZWQpPy5hbGxvd0xpZ2h0bmluZyA/PyBmYWxzZTtcbiAgICBpZiAoYWxsb3dMaWdodG5pbmcpIHtcbiAgICAgIGlmICgvXigwMnwwMylbMC05YS1mQS1GXXs2NH0kLy50ZXN0KGFkZHJlc3MpKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgICAgaWYgKGlzQm9sdDExSW52b2ljZShhZGRyZXNzKSkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBCeSBkZWZhdWx0LCBhbGxvdyBhbGwgYWRkcmVzcyBmb3JtYXRzLlxuICAgIC8vIEF0IHRoZSB0aW1lIG9mIHdyaXRpbmcsIHRoZSBvbmx5IGFkZGl0aW9uYWwgYWRkcmVzcyBmb3JtYXQgaXMgYmNoIGNhc2hhZGRyLlxuICAgIGNvbnN0IGFueUZvcm1hdCA9IChwYXJhbSBhcyB7IGFueUZvcm1hdDogYm9vbGVhbiB9IHwgdW5kZWZpbmVkKT8uYW55Rm9ybWF0ID8/IHRydWU7XG4gICAgdHJ5IHtcbiAgICAgIC8vIEZpbmQgb3V0IGlmIHRoZSBhZGRyZXNzIGlzIHZhbGlkIGZvciBhbnkgZm9ybWF0LiBUcmllcyBhbGwgc3VwcG9ydGVkIGZvcm1hdHMgYnkgZGVmYXVsdC5cbiAgICAgIC8vIFRocm93cyBpZiBhZGRyZXNzIGNhbm5vdCBiZSBkZWNvZGVkIHdpdGggYW55IGZvcm1hdC5cbiAgICAgIGNvbnN0IFtmb3JtYXQsIHNjcmlwdF0gPSB1dHhvbGliLmFkZHJlc3NGb3JtYXQudG9PdXRwdXRTY3JpcHRBbmRGb3JtYXQoYWRkcmVzcywgdGhpcy5uZXR3b3JrKTtcbiAgICAgIC8vIHVubGVzcyBhbnlGb3JtYXQgaXMgc2V0LCBvbmx5ICdkZWZhdWx0JyBpcyBhbGxvd2VkLlxuICAgICAgaWYgKCFhbnlGb3JtYXQgJiYgZm9ybWF0ICE9PSAnZGVmYXVsdCcpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgICAgLy8gbWFrZSBzdXJlIHRoYXQgYWRkcmVzcyBpcyBpbiBub3JtYWwgcmVwcmVzZW50YXRpb24gZm9yIGdpdmVuIGZvcm1hdC5cbiAgICAgIHJldHVybiBhZGRyZXNzID09PSB1dHhvbGliLmFkZHJlc3NGb3JtYXQuZnJvbU91dHB1dFNjcmlwdFdpdGhGb3JtYXQoc2NyaXB0LCBmb3JtYXQsIHRoaXMubmV0d29yayk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm4gYm9vbGVhbiBpbmRpY2F0aW5nIHdoZXRoZXIgaW5wdXQgaXMgdmFsaWQgcHVibGljIGtleSBmb3IgdGhlIGNvaW4uXG4gICAqXG4gICAqIEBwYXJhbSB7U3RyaW5nfSBwdWIgdGhlIHB1YiB0byBiZSBjaGVja2VkXG4gICAqIEByZXR1cm5zIHtCb29sZWFufSBpcyBpdCB2YWxpZD9cbiAgICovXG4gIGlzVmFsaWRQdWIocHViOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIEJJUDMyLmZyb21CYXNlNTgocHViKS5pc05ldXRlcmVkKCk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBUaGlzIGlzIGNhbGxlZCBiZWZvcmUgY3JhZnRpbmcgdGhlIEhUVFAgcmVxdWVzdCB0byB0aGUgQml0R28gQVBJLlxuICAgKiBJdCBjb252ZXJ0cyB0aGUgcmVjaXBpZW50IGFkZHJlc3MgYHNjcmlwdFB1YktleTouLi5gIHRvIHsgc2NyaXB0OiBzdHJpbmcgfSB8IHsgYWRkcmVzczogc3RyaW5nIH0uXG4gICAqL1xuICBvdmVycmlkZSBwcmVwcm9jZXNzQnVpbGRQYXJhbXMocGFyYW1zOiBSZWNvcmQ8c3RyaW5nLCBhbnk+KTogUmVjb3JkPHN0cmluZywgYW55PiB7XG4gICAgaWYgKHBhcmFtcy5yZWNpcGllbnRzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHBhcmFtcy5yZWNpcGllbnRzID1cbiAgICAgICAgcGFyYW1zLnJlY2lwaWVudHMgaW5zdGFuY2VvZiBBcnJheVxuICAgICAgICAgID8gcGFyYW1zPy5yZWNpcGllbnRzPy5tYXAoKHJlY2lwaWVudCkgPT4ge1xuICAgICAgICAgICAgICBjb25zdCB7IGFkZHJlc3MsIC4uLnJlc3QgfSA9IHJlY2lwaWVudDtcbiAgICAgICAgICAgICAgaWYgKGFkZHJlc3MgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIHJldHVybiByZWNpcGllbnQ7IC8vIEFscmVhZHkgeyBzY3JpcHQsIGFtb3VudCB9IOKAlCBwYXNzIHRocm91Z2ggdW5jaGFuZ2VkXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgcmV0dXJuIHsgLi4ucmVzdCwgLi4uZnJvbUV4dGVuZGVkQWRkcmVzc0Zvcm1hdChhZGRyZXNzKSB9O1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICA6IHBhcmFtcy5yZWNpcGllbnRzO1xuICAgIH1cblxuICAgIHJldHVybiBwYXJhbXM7XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSBsYXRlc3QgYmxvY2sgaGVpZ2h0XG4gICAqIEBwYXJhbSByZXFJZFxuICAgKi9cbiAgYXN5bmMgZ2V0TGF0ZXN0QmxvY2tIZWlnaHQocmVxSWQ/OiBSZXF1ZXN0VHJhY2VyKTogUHJvbWlzZTxudW1iZXI+IHtcbiAgICBpZiAocmVxSWQpIHtcbiAgICAgIHRoaXMuYml0Z28uc2V0UmVxdWVzdFRyYWNlcihyZXFJZCk7XG4gICAgfVxuICAgIGNvbnN0IGNoYWluaGVhZCA9IGF3YWl0IHRoaXMuYml0Z28uZ2V0KHRoaXMudXJsKCcvcHVibGljL2Jsb2NrL2xhdGVzdCcpKS5yZXN1bHQoKTtcbiAgICByZXR1cm4gKGNoYWluaGVhZCBhcyBhbnkpLmhlaWdodDtcbiAgfVxuXG4gIGNoZWNrUmVjaXBpZW50KHJlY2lwaWVudDogeyBhZGRyZXNzPzogc3RyaW5nOyBhbW91bnQ6IG51bWJlciB8IHN0cmluZyB9KTogdm9pZCB7XG4gICAgYXNzZXJ0VmFsaWRUcmFuc2FjdGlvblJlY2lwaWVudChyZWNpcGllbnQpO1xuICAgIGlmIChyZWNpcGllbnQuYWRkcmVzcyAmJiAhaXNTY3JpcHRSZWNpcGllbnQocmVjaXBpZW50LmFkZHJlc3MpKSB7XG4gICAgICBzdXBlci5jaGVja1JlY2lwaWVudCh7IGFkZHJlc3M6IHJlY2lwaWVudC5hZGRyZXNzLCBhbW91bnQ6IHJlY2lwaWVudC5hbW91bnQgfSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJ1biBjdXN0b20gY29pbiBsb2dpYyBhZnRlciBhIHRyYW5zYWN0aW9uIHByZWJ1aWxkIGhhcyBiZWVuIHJlY2VpdmVkIGZyb20gQml0R29cbiAgICogQHBhcmFtIHByZWJ1aWxkXG4gICAqL1xuICBhc3luYyBwb3N0UHJvY2Vzc1ByZWJ1aWxkPFROdW1iZXIgZXh0ZW5kcyBudW1iZXIgfCBiaWdpbnQ+KFxuICAgIHByZWJ1aWxkOiBUcmFuc2FjdGlvblByZWJ1aWxkPFROdW1iZXI+XG4gICk6IFByb21pc2U8VHJhbnNhY3Rpb25QcmVidWlsZDxUTnVtYmVyPj4ge1xuICAgIGNvbnN0IHR4ID0gdGhpcy5kZWNvZGVUcmFuc2FjdGlvbkZyb21QcmVidWlsZChwcmVidWlsZCk7XG4gICAgaWYgKF8uaXNVbmRlZmluZWQocHJlYnVpbGQuYmxvY2tIZWlnaHQpKSB7XG4gICAgICBwcmVidWlsZC5ibG9ja0hlaWdodCA9IChhd2FpdCB0aGlzLmdldExhdGVzdEJsb2NrSGVpZ2h0KCkpIGFzIG51bWJlcjtcbiAgICB9XG4gICAgcmV0dXJuIF8uZXh0ZW5kKHt9LCBwcmVidWlsZCwgeyB0eEhleDogZW5jb2RlVHJhbnNhY3Rpb24odHgpLnRvU3RyaW5nKCdoZXgnKSB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVwcmVjYXRlZCAtIHdpbGwgYmUgcmVtb3ZlZCB3aGVuIHdlIGRyb3Agc3VwcG9ydCBmb3IgdXR4b2xpYlxuICAgKiBEZXRlcm1pbmUgYW4gYWRkcmVzcycgdHlwZSBiYXNlZCBvbiBpdHMgd2l0bmVzcyBhbmQgcmVkZWVtIHNjcmlwdCBwcmVzZW5jZVxuICAgKiBAcGFyYW0gYWRkcmVzc0RldGFpbHNcbiAgICovXG4gIHN0YXRpYyBpbmZlckFkZHJlc3NUeXBlKGFkZHJlc3NEZXRhaWxzOiB7IGNoYWluOiBudW1iZXIgfSk6IFNjcmlwdFR5cGUyT2YzIHwgbnVsbCB7XG4gICAgcmV0dXJuIGlzQ2hhaW5Db2RlKGFkZHJlc3NEZXRhaWxzLmNoYWluKSA/IHNjcmlwdFR5cGVGb3JDaGFpbihhZGRyZXNzRGV0YWlscy5jaGFpbikgOiBudWxsO1xuICB9XG5cbiAgY3JlYXRlVHJhbnNhY3Rpb25Gcm9tSGV4PFROdW1iZXIgZXh0ZW5kcyBudW1iZXIgfCBiaWdpbnQgPSBudW1iZXI+KFxuICAgIGhleDogc3RyaW5nXG4gICk6IHV0eG9saWIuYml0Z28uVXR4b1RyYW5zYWN0aW9uPFROdW1iZXI+IHtcbiAgICByZXR1cm4gdXR4b2xpYi5iaXRnby5jcmVhdGVUcmFuc2FjdGlvbkZyb21IZXg8VE51bWJlcj4oaGV4LCB0aGlzLm5ldHdvcmssIHRoaXMuYW1vdW50VHlwZSk7XG4gIH1cblxuICBkZWNvZGVUcmFuc2FjdGlvbjxUTnVtYmVyIGV4dGVuZHMgbnVtYmVyIHwgYmlnaW50PihcbiAgICBpbnB1dDogQnVmZmVyIHwgc3RyaW5nLFxuICAgIGRlY29kZVdpdGg6IFNka0JhY2tlbmQgPSB0aGlzLmRlZmF1bHRTZGtCYWNrZW5kXG4gICk6IERlY29kZWRUcmFuc2FjdGlvbjxUTnVtYmVyPiB7XG4gICAgaWYgKHR5cGVvZiBpbnB1dCA9PT0gJ3N0cmluZycpIHtcbiAgICAgIGNvbnN0IGJ1ZmZlciA9IHN0cmluZ1RvQnVmZmVyVHJ5Rm9ybWF0cyhpbnB1dCwgWydoZXgnLCAnYmFzZTY0J10pO1xuICAgICAgcmV0dXJuIHRoaXMuZGVjb2RlVHJhbnNhY3Rpb24oYnVmZmVyLCBkZWNvZGVXaXRoKTtcbiAgICB9XG5cbiAgICBpZiAodXR4b2xpYi5iaXRnby5pc1BzYnQoaW5wdXQpKSB7XG4gICAgICBpZiAodGhpcy5zdXBwb3J0ZWRTZGtCYWNrZW5kc1tkZWNvZGVXaXRoXSAhPT0gdHJ1ZSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFNESyBzdXBwb3J0IGZvciBkZWNvZGVXaXRoPSR7ZGVjb2RlV2l0aH0gaXMgbm90IGF2YWlsYWJsZSBvbiB0aGlzIGVudmlyb25tZW50LmApO1xuICAgICAgfVxuXG4gICAgICBpZiAoIXRoaXMuc3VwcG9ydGVkVHhGb3JtYXRzLnBzYnQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yRGVwcmVjYXRlZFR4Rm9ybWF0KCdwc2J0Jyk7XG4gICAgICB9XG4gICAgICByZXR1cm4gZGVjb2RlUHNidFdpdGgoaW5wdXQsIHRoaXMubmFtZSwgZGVjb2RlV2l0aCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIExlZ2FjeSBmb3JtYXQgdHJhbnNhY3Rpb25zIGFyZSBkZXByZWNhdGVkLiBUaGlzIHdpbGwgYmUgYW4gdW5jb25kaXRpb25hbCBlcnJvciBpbiB0aGUgZnV0dXJlLlxuICAgICAgaWYgKCF0aGlzLnN1cHBvcnRlZFR4Rm9ybWF0cy5sZWdhY3kpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yRGVwcmVjYXRlZFR4Rm9ybWF0KCdsZWdhY3knKTtcbiAgICAgIH1cbiAgICAgIGlmIChkZWNvZGVXaXRoICE9PSAndXR4b2xpYicpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcigncmVjZWl2ZWQgZGVjb2RlV2l0aCBoaW50ICVzLCBpZ25vcmluZyBmb3IgbGVnYWN5IHRyYW5zYWN0aW9uJywgZGVjb2RlV2l0aCk7XG4gICAgICB9XG4gICAgICByZXR1cm4gdXR4b2xpYi5iaXRnby5jcmVhdGVUcmFuc2FjdGlvbkZyb21CdWZmZXIoaW5wdXQsIHRoaXMubmV0d29yaywge1xuICAgICAgICBhbW91bnRUeXBlOiB0aGlzLmFtb3VudFR5cGUsXG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBkZWNvZGVUcmFuc2FjdGlvbkFzUHNidChpbnB1dDogQnVmZmVyIHwgc3RyaW5nKTogdXR4b2xpYi5iaXRnby5VdHhvUHNidCB8IGZpeGVkU2NyaXB0V2FsbGV0LkJpdEdvUHNidCB7XG4gICAgY29uc3QgZGVjb2RlZCA9IHRoaXMuZGVjb2RlVHJhbnNhY3Rpb24oaW5wdXQpO1xuICAgIGlmIChkZWNvZGVkIGluc3RhbmNlb2YgZml4ZWRTY3JpcHRXYWxsZXQuQml0R29Qc2J0IHx8IGRlY29kZWQgaW5zdGFuY2VvZiB1dHhvbGliLmJpdGdvLlV0eG9Qc2J0KSB7XG4gICAgICByZXR1cm4gZGVjb2RlZDtcbiAgICB9XG4gICAgdGhyb3cgbmV3IEVycm9yKCdleHBlY3RlZCBwc2J0IGJ1dCBnb3QgdHJhbnNhY3Rpb24nKTtcbiAgfVxuXG4gIGRlY29kZVRyYW5zYWN0aW9uRnJvbVByZWJ1aWxkPFROdW1iZXIgZXh0ZW5kcyBudW1iZXIgfCBiaWdpbnQ+KHByZWJ1aWxkOiB7XG4gICAgdHhIZXg/OiBzdHJpbmc7XG4gICAgdHhCYXNlNjQ/OiBzdHJpbmc7XG4gICAgLyoqIFNlZSBUcmFuc2FjdGlvblByZWJ1aWxkLnR4SGV4UHNidCDigJQgb25seSBwcmVzZW50IGluIHBlbmRpbmcgYXBwcm92YWwgZmxvd3MuICovXG4gICAgdHhIZXhQc2J0Pzogc3RyaW5nO1xuICAgIGRlY29kZVdpdGg/OiBzdHJpbmc7XG4gIH0pOiBEZWNvZGVkVHJhbnNhY3Rpb248VE51bWJlcj4ge1xuICAgIGNvbnN0IHN0cmluZyA9IHByZWJ1aWxkLnR4SGV4UHNidCA/PyBwcmVidWlsZC50eEhleCA/PyBwcmVidWlsZC50eEJhc2U2NDtcbiAgICBpZiAoIXN0cmluZykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdtaXNzaW5nIHJlcXVpcmVkIHR4SGV4IG9yIHR4QmFzZTY0IHByb3BlcnR5Jyk7XG4gICAgfVxuICAgIGxldCB7IGRlY29kZVdpdGggfSA9IHByZWJ1aWxkO1xuICAgIGlmIChkZWNvZGVXaXRoICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGlmICh0eXBlb2YgZGVjb2RlV2l0aCAhPT0gJ3N0cmluZycgfHwgIWlzU2RrQmFja2VuZChkZWNvZGVXaXRoKSkge1xuICAgICAgICBjb25zb2xlLmVycm9yKCdkZWNvZGVXaXRoICVzIGlzIG5vdCBhIHZhbGlkIHZhbHVlLCB1c2luZyBkZWZhdWx0JywgZGVjb2RlV2l0aCk7XG4gICAgICAgIGRlY29kZVdpdGggPSB1bmRlZmluZWQ7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmRlY29kZVRyYW5zYWN0aW9uKHN0cmluZywgZGVjb2RlV2l0aCk7XG4gIH1cblxuICAvKipcbiAgICogRXh0cmFjdCBhbmQgZmlsbCB0cmFuc2FjdGlvbiBkZXRhaWxzIHN1Y2ggYXMgaW50ZXJuYWwvY2hhbmdlIHNwZW5kLCBleHRlcm5hbCBzcGVuZCAoZXhwbGljaXQgdnMuIGltcGxpY2l0KSwgZXRjLlxuICAgKiBAcGFyYW0gcGFyYW1zXG4gICAqIEByZXR1cm5zIHsqfVxuICAgKi9cbiAgYXN5bmMgcGFyc2VUcmFuc2FjdGlvbjxUTnVtYmVyIGV4dGVuZHMgbnVtYmVyIHwgYmlnaW50ID0gbnVtYmVyPihcbiAgICBwYXJhbXM6IFBhcnNlVHJhbnNhY3Rpb25PcHRpb25zPFROdW1iZXI+XG4gICk6IFByb21pc2U8UGFyc2VkVHJhbnNhY3Rpb248VE51bWJlcj4+IHtcbiAgICByZXR1cm4gcGFyc2VUcmFuc2FjdGlvbih0aGlzLCBwYXJhbXMpO1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXByZWNhdGVkIC0gdXNlIGZ1bmN0aW9uIHZlcmlmeVVzZXJQdWJsaWNLZXkgaW5zdGVhZFxuICAgKi9cbiAgcHJvdGVjdGVkIHZlcmlmeVVzZXJQdWJsaWNLZXkocGFyYW1zOiBWZXJpZnlVc2VyUHVibGljS2V5T3B0aW9ucyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB2ZXJpZnlVc2VyUHVibGljS2V5KHRoaXMuYml0Z28sIHBhcmFtcyk7XG4gIH1cblxuICAvKipcbiAgICogQGRlcHJlY2F0ZWQgLSB1c2UgZnVuY3Rpb24gdmVyaWZ5S2V5U2lnbmF0dXJlIGluc3RlYWRcbiAgICovXG4gIHB1YmxpYyB2ZXJpZnlLZXlTaWduYXR1cmUocGFyYW1zOiBWZXJpZnlLZXlTaWduYXR1cmVzT3B0aW9ucyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB2ZXJpZnlLZXlTaWduYXR1cmUocGFyYW1zKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBWZXJpZnkgdGhhdCBhIHRyYW5zYWN0aW9uIHByZWJ1aWxkIGNvbXBsaWVzIHdpdGggdGhlIG9yaWdpbmFsIGludGVudGlvblxuICAgKlxuICAgKiBAcGFyYW0gcGFyYW1zXG4gICAqIEBwYXJhbSBwYXJhbXMudHhQYXJhbXMgcGFyYW1zIG9iamVjdCBwYXNzZWQgdG8gc2VuZFxuICAgKiBAcGFyYW0gcGFyYW1zLnR4UHJlYnVpbGQgcHJlYnVpbGQgb2JqZWN0IHJldHVybmVkIGJ5IHNlcnZlclxuICAgKiBAcGFyYW0gcGFyYW1zLnR4UHJlYnVpbGQudHhIZXggcHJlYnVpbHQgdHJhbnNhY3Rpb24ncyB0eEhleCBmb3JtXG4gICAqIEBwYXJhbSBwYXJhbXMud2FsbGV0IFdhbGxldCBvYmplY3QgdG8gb2J0YWluIGtleXMgdG8gdmVyaWZ5IGFnYWluc3RcbiAgICogQHBhcmFtIHBhcmFtcy52ZXJpZmljYXRpb24gT2JqZWN0IHNwZWNpZnlpbmcgc29tZSB2ZXJpZmljYXRpb24gcGFyYW1ldGVyc1xuICAgKiBAcGFyYW0gcGFyYW1zLnZlcmlmaWNhdGlvbi5kaXNhYmxlTmV0d29ya2luZyBEaXNhbGxvdyBmZXRjaGluZyBhbnkgZGF0YSBmcm9tIHRoZSBpbnRlcm5ldCBmb3IgdmVyaWZpY2F0aW9uIHB1cnBvc2VzXG4gICAqIEBwYXJhbSBwYXJhbXMudmVyaWZpY2F0aW9uLmtleWNoYWlucyBQYXNzIGtleWNoYWlucyBtYW51YWxseSByYXRoZXIgdGhhbiBmZXRjaGluZyB0aGVtIGJ5IGlkXG4gICAqIEBwYXJhbSBwYXJhbXMudmVyaWZpY2F0aW9uLmFkZHJlc3NlcyBBZGRyZXNzIGRldGFpbHMgdG8gcGFzcyBpbiBmb3Igb3V0LW9mLWJhbmQgdmVyaWZpY2F0aW9uXG4gICAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZlcmlmaWNhdGlvbiBwYXNzZXNcbiAgICogQHRocm93cyB7VHhJbnRlbnRNaXNtYXRjaEVycm9yfSBpZiB0cmFuc2FjdGlvbiB2YWxpZGF0aW9uIGZhaWxzXG4gICAqIEB0aHJvd3Mge1R4SW50ZW50TWlzbWF0Y2hSZWNpcGllbnRFcnJvcn0gaWYgdHJhbnNhY3Rpb24gcmVjaXBpZW50cyBkb24ndCBtYXRjaCB1c2VyIGludGVudFxuICAgKi9cbiAgYXN5bmMgdmVyaWZ5VHJhbnNhY3Rpb248VE51bWJlciBleHRlbmRzIG51bWJlciB8IGJpZ2ludCA9IG51bWJlcj4oXG4gICAgcGFyYW1zOiBWZXJpZnlUcmFuc2FjdGlvbk9wdGlvbnM8VE51bWJlcj5cbiAgKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBhd2FpdCB2ZXJpZnlUcmFuc2FjdGlvbih0aGlzLCB0aGlzLmJpdGdvLCBwYXJhbXMpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBBZ2dyZWdhdGVWYWxpZGF0aW9uRXJyb3IpIHtcbiAgICAgICAgY29uc3QgdHhFeHBsYW5hdGlvbiA9IGF3YWl0IFR4SW50ZW50TWlzbWF0Y2hFcnJvci50cnlHZXRUeEV4cGxhbmF0aW9uKFxuICAgICAgICAgIHRoaXMgYXMgdW5rbm93biBhcyBJQmFzZUNvaW4sXG4gICAgICAgICAgcGFyYW1zLnR4UHJlYnVpbGRcbiAgICAgICAgKTtcbiAgICAgICAgdGhyb3cgY29udmVydFZhbGlkYXRpb25FcnJvclRvVHhJbnRlbnRNaXNtYXRjaChcbiAgICAgICAgICBlcnJvcixcbiAgICAgICAgICBwYXJhbXMucmVxSWQsXG4gICAgICAgICAgcGFyYW1zLnR4UGFyYW1zLFxuICAgICAgICAgIHBhcmFtcy50eFByZWJ1aWxkLnR4SGV4LFxuICAgICAgICAgIHR4RXhwbGFuYXRpb25cbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIHRocm93IGVycm9yO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBNYWtlIHN1cmUgYW4gYWRkcmVzcyBpcyB2YWxpZCBhbmQgdGhyb3cgYW4gZXJyb3IgaWYgaXQncyBub3QuXG4gICAqIEBwYXJhbSBwYXJhbXMuYWRkcmVzcyBUaGUgYWRkcmVzcyBzdHJpbmcgb24gdGhlIG5ldHdvcmtcbiAgICogQHBhcmFtIHBhcmFtcy5hZGRyZXNzVHlwZVxuICAgKiBAcGFyYW0gcGFyYW1zLmtleWNoYWlucyBLZXljaGFpbiBvYmplY3RzIHdpdGggeHB1YnNcbiAgICogQHBhcmFtIHBhcmFtcy5jb2luU3BlY2lmaWMgQ29pbi1zcGVjaWZpYyBkZXRhaWxzIGZvciB0aGUgYWRkcmVzcyBzdWNoIGFzIGEgd2l0bmVzcyBzY3JpcHRcbiAgICogQHBhcmFtIHBhcmFtcy5jaGFpbiBEZXJpdmF0aW9uIGNoYWluXG4gICAqIEBwYXJhbSBwYXJhbXMuaW5kZXggRGVyaXZhdGlvbiBpbmRleFxuICAgKiBAdGhyb3dzIHtJbnZhbGlkQWRkcmVzc0Vycm9yfVxuICAgKiBAdGhyb3dzIHtJbnZhbGlkQWRkcmVzc0Rlcml2YXRpb25Qcm9wZXJ0eUVycm9yfVxuICAgKiBAdGhyb3dzIHtVbmV4cGVjdGVkQWRkcmVzc0Vycm9yfVxuICAgKi9cbiAgYXN5bmMgaXNXYWxsZXRBZGRyZXNzKHBhcmFtczogVmVyaWZ5QWRkcmVzc09wdGlvbnM8VXR4b0NvaW5TcGVjaWZpYz4sIHdhbGxldD86IElXYWxsZXQpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBjb25zdCB7IGFkZHJlc3MsIGtleWNoYWlucywgY2hhaW4sIGluZGV4IH0gPSBwYXJhbXM7XG5cbiAgICBpZiAoIXRoaXMuaXNWYWxpZEFkZHJlc3MoYWRkcmVzcykpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQWRkcmVzc0Vycm9yKGBpbnZhbGlkIGFkZHJlc3M6ICR7YWRkcmVzc31gKTtcbiAgICB9XG5cbiAgICBpZiAod2FsbGV0ICYmIGlzRGVzY3JpcHRvcldhbGxldCh3YWxsZXQpKSB7XG4gICAgICBpZiAoIWtleWNoYWlucykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ21pc3NpbmcgcmVxdWlyZWQgcGFyYW0ga2V5Y2hhaW5zJyk7XG4gICAgICB9XG4gICAgICBpZiAoIWlzVHJpcGxlKGtleWNoYWlucykpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdrZXljaGFpbnMgbXVzdCBiZSBhIHRyaXBsZScpO1xuICAgICAgfVxuICAgICAgYXNzZXJ0RGVzY3JpcHRvcldhbGxldEFkZHJlc3MoXG4gICAgICAgIHRoaXMubmFtZSxcbiAgICAgICAgcGFyYW1zLFxuICAgICAgICBnZXREZXNjcmlwdG9yTWFwRnJvbVdhbGxldCh3YWxsZXQsIHRvQmlwMzJUcmlwbGUoa2V5Y2hhaW5zKSwgZ2V0UG9saWN5Rm9yRW52KHRoaXMuYml0Z28uZW52KSlcbiAgICAgICk7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBpZiAoKF8uaXNVbmRlZmluZWQoY2hhaW4pICYmIF8uaXNVbmRlZmluZWQoaW5kZXgpKSB8fCAhKF8uaXNGaW5pdGUoY2hhaW4pICYmIF8uaXNGaW5pdGUoaW5kZXgpKSkge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBZGRyZXNzRGVyaXZhdGlvblByb3BlcnR5RXJyb3IoXG4gICAgICAgIGBhZGRyZXNzIHZhbGlkYXRpb24gZmFpbHVyZTogaW52YWxpZCBjaGFpbiAoJHtjaGFpbn0pIG9yIGluZGV4ICgke2luZGV4fSlgXG4gICAgICApO1xuICAgIH1cblxuICAgIGlmICgha2V5Y2hhaW5zKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ21pc3NpbmcgcmVxdWlyZWQgcGFyYW0ga2V5Y2hhaW5zJyk7XG4gICAgfVxuXG4gICAgYXNzZXJ0Rml4ZWRTY3JpcHRXYWxsZXRBZGRyZXNzKHRoaXMubmFtZSwge1xuICAgICAgYWRkcmVzcyxcbiAgICAgIGtleWNoYWlucyxcbiAgICAgIGZvcm1hdDogcGFyYW1zLmZvcm1hdCA/PyAnYmFzZTU4JyxcbiAgICAgIGNoYWluLFxuICAgICAgaW5kZXgsXG4gICAgfSk7XG5cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0gYWRkcmVzc1R5cGVcbiAgICogQHJldHVybnMgdHJ1ZSBpZmYgY29pbiBzdXBwb3J0cyBzcGVuZGluZyBmcm9tIHVuc3BlbnRUeXBlXG4gICAqL1xuICBzdXBwb3J0c0FkZHJlc3NUeXBlKGFkZHJlc3NUeXBlOiBTY3JpcHRUeXBlMk9mMyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB1dHhvbGliLmJpdGdvLm91dHB1dFNjcmlwdHMuaXNTdXBwb3J0ZWRTY3JpcHRUeXBlKHRoaXMubmV0d29yaywgYWRkcmVzc1R5cGUpO1xuICB9XG5cbiAgLyoqIGluaGVyaXRlZCBkb2MgKi9cbiAgZ2V0RGVmYXVsdE11bHRpc2lnVHlwZSgpOiBNdWx0aXNpZ1R5cGUge1xuICAgIHJldHVybiBtdWx0aXNpZ1R5cGVzLm9uY2hhaW47XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIGNoYWluXG4gICAqIEByZXR1cm4gdHJ1ZSBpZmYgY29pbiBzdXBwb3J0cyBzcGVuZGluZyBmcm9tIGNoYWluXG4gICAqL1xuICBzdXBwb3J0c0FkZHJlc3NDaGFpbihjaGFpbjogbnVtYmVyKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIGlzQ2hhaW5Db2RlKGNoYWluKSAmJiB0aGlzLnN1cHBvcnRzQWRkcmVzc1R5cGUodXR4b2xpYi5iaXRnby5zY3JpcHRUeXBlRm9yQ2hhaW4oY2hhaW4pKTtcbiAgfVxuXG4gIGtleUlkc0ZvclNpZ25pbmcoKTogbnVtYmVyW10ge1xuICAgIHJldHVybiBbS2V5SW5kaWNlcy5VU0VSLCBLZXlJbmRpY2VzLkJBQ0tVUCwgS2V5SW5kaWNlcy5CSVRHT107XG4gIH1cblxuICAvKipcbiAgICogQHJldHVybnMgaW5wdXQgcHNidCBhZGRlZCB3aXRoIGRldGVybWluaXN0aWMgTXVTaWcyIG5vbmNlIGZvciBiaXRnbyBrZXkgZm9yIGVhY2ggTXVTaWcyIGlucHV0cy5cbiAgICogQHBhcmFtIHBzYnQgYWxsIE11U2lnMiBpbnB1dHMgc2hvdWxkIGNvbnRhaW4gdXNlciBNdVNpZzIgbm9uY2VcbiAgICogQHBhcmFtIHdhbGxldElkXG4gICAqL1xuICBhc3luYyBnZXRNdXNpZzJOb25jZXMocHNidDogdXR4b2xpYi5iaXRnby5VdHhvUHNidCwgd2FsbGV0SWQ6IHN0cmluZyk6IFByb21pc2U8dXR4b2xpYi5iaXRnby5VdHhvUHNidD47XG4gIGFzeW5jIGdldE11c2lnMk5vbmNlcyhwc2J0OiBmaXhlZFNjcmlwdFdhbGxldC5CaXRHb1BzYnQsIHdhbGxldElkOiBzdHJpbmcpOiBQcm9taXNlPGZpeGVkU2NyaXB0V2FsbGV0LkJpdEdvUHNidD47XG4gIGFzeW5jIGdldE11c2lnMk5vbmNlczxUIGV4dGVuZHMgdXR4b2xpYi5iaXRnby5VdHhvUHNidCB8IGZpeGVkU2NyaXB0V2FsbGV0LkJpdEdvUHNidD4oXG4gICAgcHNidDogVCxcbiAgICB3YWxsZXRJZDogc3RyaW5nXG4gICk6IFByb21pc2U8VD47XG4gIGFzeW5jIGdldE11c2lnMk5vbmNlczxUIGV4dGVuZHMgdXR4b2xpYi5iaXRnby5VdHhvUHNidCB8IGZpeGVkU2NyaXB0V2FsbGV0LkJpdEdvUHNidD4oXG4gICAgcHNidDogVCxcbiAgICB3YWxsZXRJZDogc3RyaW5nXG4gICk6IFByb21pc2U8VD4ge1xuICAgIGNvbnN0IGJ1ZmZlciA9IGVuY29kZVRyYW5zYWN0aW9uKHBzYnQpO1xuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5iaXRnb1xuICAgICAgLnBvc3QodGhpcy51cmwoJy93YWxsZXQvJyArIHdhbGxldElkICsgJy90eC9zaWducHNidCcpKVxuICAgICAgLnNlbmQoeyBwc2J0OiBidWZmZXIudG9TdHJpbmcoJ2hleCcpIH0pXG4gICAgICAucmVzdWx0KCk7XG4gICAgaWYgKHBzYnQgaW5zdGFuY2VvZiB1dHhvbGliLmJpdGdvLlV0eG9Qc2J0KSB7XG4gICAgICByZXR1cm4gZGVjb2RlUHNidFdpdGgocmVzcG9uc2UucHNidCwgdGhpcy5uYW1lLCAndXR4b2xpYicpIGFzIFQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBkZWNvZGVQc2J0V2l0aChyZXNwb25zZS5wc2J0LCB0aGlzLm5hbWUsICd3YXNtLXV0eG8nKSBhcyBUO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVwcmVjYXRlZCBVc2UgZ2V0TXVzaWcyTm9uY2VzIGluc3RlYWRcbiAgICogQHJldHVybnMgaW5wdXQgcHNidCBhZGRlZCB3aXRoIGRldGVybWluaXN0aWMgTXVTaWcyIG5vbmNlIGZvciBiaXRnbyBrZXkgZm9yIGVhY2ggTXVTaWcyIGlucHV0cy5cbiAgICogQHBhcmFtIHBzYnRIZXggYWxsIE11U2lnMiBpbnB1dHMgc2hvdWxkIGNvbnRhaW4gdXNlciBNdVNpZzIgbm9uY2VcbiAgICogQHBhcmFtIHdhbGxldElkXG4gICAqL1xuICBhc3luYyBzaWduUHNidChwc2J0SGV4OiBzdHJpbmcsIHdhbGxldElkOiBzdHJpbmcpOiBQcm9taXNlPFNpZ25Qc2J0UmVzcG9uc2U+IHtcbiAgICBjb25zdCBwc2J0ID0gYXdhaXQgdGhpcy5nZXRNdXNpZzJOb25jZXModGhpcy5kZWNvZGVUcmFuc2FjdGlvbkFzUHNidChwc2J0SGV4KSwgd2FsbGV0SWQpO1xuICAgIHJldHVybiB7IHBzYnQ6IGVuY29kZVRyYW5zYWN0aW9uKHBzYnQpLnRvU3RyaW5nKCdoZXgnKSB9O1xuICB9XG5cbiAgLyoqXG4gICAqIEByZXR1cm5zIGlucHV0IHBzYnQgYWRkZWQgd2l0aCBkZXRlcm1pbmlzdGljIE11U2lnMiBub25jZSBmb3IgYml0Z28ga2V5IGZvciBlYWNoIE11U2lnMiBpbnB1dHMgZnJvbSBPVkMuXG4gICAqIEBwYXJhbSBvdmNKc29uIEpTT04gb2JqZWN0IHByb3ZpZGVkIGJ5IE9WQyB3aXRoIGZpZWxkcyBwc2J0SGV4IGFuZCB3YWxsZXRJZFxuICAgKi9cbiAgYXN5bmMgc2lnblBzYnRGcm9tT1ZDKG92Y0pzb246IFJlY29yZDxzdHJpbmcsIHVua25vd24+KTogUHJvbWlzZTxSZWNvcmQ8c3RyaW5nLCB1bmtub3duPj4ge1xuICAgIGFzc2VydChvdmNKc29uWydwc2J0SGV4J10sICdvdmNKc29uIG11c3QgY29udGFpbiBwc2J0SGV4Jyk7XG4gICAgYXNzZXJ0KG92Y0pzb25bJ3dhbGxldElkJ10sICdvdmNKc29uIG11c3QgY29udGFpbiB3YWxsZXRJZCcpO1xuICAgIGNvbnN0IGhleCA9IG92Y0pzb25bJ3BzYnRIZXgnXSBhcyBzdHJpbmc7XG4gICAgY29uc3Qgd2FsbGV0SWQgPSBvdmNKc29uWyd3YWxsZXRJZCddIGFzIHN0cmluZztcbiAgICBjb25zdCBwc2J0ID0gYXdhaXQgdGhpcy5nZXRNdXNpZzJOb25jZXModGhpcy5kZWNvZGVUcmFuc2FjdGlvbkFzUHNidChoZXgpLCB3YWxsZXRJZCk7XG4gICAgcmV0dXJuIF8uZXh0ZW5kKG92Y0pzb24sIHsgdHhIZXg6IGVuY29kZVRyYW5zYWN0aW9uKHBzYnQpLnRvU3RyaW5nKCdoZXgnKSB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBc3NlbWJsZSBrZXljaGFpbiBhbmQgaGFsZi1zaWduIHByZWJ1aWx0IHRyYW5zYWN0aW9uXG4gICAqIEBwYXJhbSBwYXJhbXMgLSB7QHNlZSBTaWduVHJhbnNhY3Rpb25PcHRpb25zfVxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxTaWduZWRUcmFuc2FjdGlvbiB8IEhhbGZTaWduZWRVdHhvVHJhbnNhY3Rpb24+fVxuICAgKi9cbiAgYXN5bmMgc2lnblRyYW5zYWN0aW9uPFROdW1iZXIgZXh0ZW5kcyBudW1iZXIgfCBiaWdpbnQgPSBudW1iZXI+KFxuICAgIHBhcmFtczogU2lnblRyYW5zYWN0aW9uT3B0aW9uczxUTnVtYmVyPlxuICApOiBQcm9taXNlPFNpZ25lZFRyYW5zYWN0aW9uIHwgSGFsZlNpZ25lZFV0eG9UcmFuc2FjdGlvbj4ge1xuICAgIHJldHVybiBzaWduVHJhbnNhY3Rpb248VE51bWJlcj4odGhpcywgdGhpcy5iaXRnbywgcGFyYW1zKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTaWduIGEgdHJhbnNhY3Rpb24gd2l0aCBhIGN1c3RvbSBzaWduaW5nIGZ1bmN0aW9uLiBFeGFtcGxlIHVzZSBjYXNlIGlzIGV4cHJlc3MgZXh0ZXJuYWwgc2lnbmVyXG4gICAqIEBwYXJhbSBjdXN0b21TaWduaW5nRnVuY3Rpb24gY3VzdG9tIHNpZ25pbmcgZnVuY3Rpb24gdGhhdCByZXR1cm5zIGEgc2luZ2xlIHNpZ25lZCB0cmFuc2FjdGlvblxuICAgKiBAcGFyYW0gc2lnblRyYW5zYWN0aW9uUGFyYW1zIHBhcmFtZXRlcnMgZm9yIGN1c3RvbSBzaWduaW5nIGZ1bmN0aW9uLiBJbmNsdWRlcyB0eFByZWJ1aWxkIGFuZCBwdWJzXG4gICAqXG4gICAqIEByZXR1cm5zIHNpZ25lZCB0cmFuc2FjdGlvbiBhcyBoZXggc3RyaW5nXG4gICAqL1xuICBhc3luYyBzaWduV2l0aEN1c3RvbVNpZ25pbmdGdW5jdGlvbjxUTnVtYmVyIGV4dGVuZHMgbnVtYmVyIHwgYmlnaW50PihcbiAgICBjdXN0b21TaWduaW5nRnVuY3Rpb246IFV0eG9DdXN0b21TaWduaW5nRnVuY3Rpb248VE51bWJlcj4sXG4gICAgc2lnblRyYW5zYWN0aW9uUGFyYW1zOiB7IHR4UHJlYnVpbGQ6IFRyYW5zYWN0aW9uUHJlYnVpbGQ8VE51bWJlcj47IHB1YnM6IHN0cmluZ1tdIH1cbiAgKTogUHJvbWlzZTxTaWduZWRUcmFuc2FjdGlvbj4ge1xuICAgIGNvbnN0IHR4SGV4ID0gc2lnblRyYW5zYWN0aW9uUGFyYW1zLnR4UHJlYnVpbGQudHhIZXg7XG4gICAgYXNzZXJ0KHR4SGV4LCAnbWlzc2luZyB0eEhleCBwYXJhbWV0ZXInKTtcblxuICAgIGNvbnN0IHR4ID0gdGhpcy5kZWNvZGVUcmFuc2FjdGlvbih0eEhleCk7XG5cbiAgICBjb25zdCBpc1R4V2l0aEtleVBhdGhTcGVuZElucHV0ID0gaGFzS2V5UGF0aFNwZW5kSW5wdXQodHgsIHNpZ25UcmFuc2FjdGlvblBhcmFtcy5wdWJzLCB0aGlzLm5hbWUpO1xuXG4gICAgaWYgKCFpc1R4V2l0aEtleVBhdGhTcGVuZElucHV0KSB7XG4gICAgICByZXR1cm4gYXdhaXQgY3VzdG9tU2lnbmluZ0Z1bmN0aW9uKHsgLi4uc2lnblRyYW5zYWN0aW9uUGFyYW1zLCBjb2luOiB0aGlzIH0pO1xuICAgIH1cblxuICAgIGNvbnN0IGdldFR4SGV4ID0gKHY6IFNpZ25lZFRyYW5zYWN0aW9uKTogc3RyaW5nID0+IHtcbiAgICAgIGlmICgndHhIZXgnIGluIHYpIHtcbiAgICAgICAgcmV0dXJuIHYudHhIZXg7XG4gICAgICB9XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ3R4SGV4IG5vdCBmb3VuZCBpbiBzaWduVHJhbnNhY3Rpb24gcmVzdWx0Jyk7XG4gICAgfTtcblxuICAgIGNvbnN0IHNpZ25lck5vbmNlVHggPSBhd2FpdCBjdXN0b21TaWduaW5nRnVuY3Rpb24oe1xuICAgICAgLi4uc2lnblRyYW5zYWN0aW9uUGFyYW1zLFxuICAgICAgc2lnbmluZ1N0ZXA6ICdzaWduZXJOb25jZScsXG4gICAgICBjb2luOiB0aGlzLFxuICAgIH0pO1xuXG4gICAgY29uc3QgeyBwdWJzIH0gPSBzaWduVHJhbnNhY3Rpb25QYXJhbXM7XG4gICAgYXNzZXJ0KHB1YnMgPT09IHVuZGVmaW5lZCB8fCBpc1RyaXBsZShwdWJzKSk7XG5cbiAgICBjb25zdCBjb3NpZ25lck5vbmNlVHggPSBhd2FpdCB0aGlzLnNpZ25UcmFuc2FjdGlvbjxUTnVtYmVyPih7XG4gICAgICAuLi5zaWduVHJhbnNhY3Rpb25QYXJhbXMsXG4gICAgICBwdWJzLFxuICAgICAgdHhQcmVidWlsZDogeyAuLi5zaWduVHJhbnNhY3Rpb25QYXJhbXMudHhQcmVidWlsZCwgdHhIZXg6IGdldFR4SGV4KHNpZ25lck5vbmNlVHgpIH0sXG4gICAgICBzaWduaW5nU3RlcDogJ2Nvc2lnbmVyTm9uY2UnLFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIGF3YWl0IGN1c3RvbVNpZ25pbmdGdW5jdGlvbih7XG4gICAgICAuLi5zaWduVHJhbnNhY3Rpb25QYXJhbXMsXG4gICAgICB0eFByZWJ1aWxkOiB7IC4uLnNpZ25UcmFuc2FjdGlvblBhcmFtcy50eFByZWJ1aWxkLCB0eEhleDogZ2V0VHhIZXgoY29zaWduZXJOb25jZVR4KSB9LFxuICAgICAgc2lnbmluZ1N0ZXA6ICdzaWduZXJTaWduYXR1cmUnLFxuICAgICAgY29pbjogdGhpcyxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0gdW5zcGVudFxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAgICovXG4gIGlzQml0R29UYWludGVkVW5zcGVudDxUTnVtYmVyIGV4dGVuZHMgbnVtYmVyIHwgYmlnaW50Pih1bnNwZW50OiBVbnNwZW50PFROdW1iZXI+KTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIGlzUmVwbGF5UHJvdGVjdGlvblVuc3BlbnQodW5zcGVudCwgdGhpcy5uYW1lKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZWNvbXBvc2UgYSByYXcgcHNidC90cmFuc2FjdGlvbiBpbnRvIHVzZWZ1bCBpbmZvcm1hdGlvbiwgc3VjaCBhcyB0aGUgdG90YWwgYW1vdW50cyxcbiAgICogY2hhbmdlIGFtb3VudHMsIGFuZCB0cmFuc2FjdGlvbiBvdXRwdXRzLlxuICAgKiBAcGFyYW0gcGFyYW1zXG4gICAqL1xuICBvdmVycmlkZSBhc3luYyBleHBsYWluVHJhbnNhY3Rpb248VE51bWJlciBleHRlbmRzIG51bWJlciB8IGJpZ2ludCA9IG51bWJlcj4oXG4gICAgcGFyYW1zOiBFeHBsYWluVHJhbnNhY3Rpb25PcHRpb25zPFROdW1iZXI+LFxuICAgIHdhbGxldD86IElXYWxsZXRcbiAgKTogUHJvbWlzZTxUcmFuc2FjdGlvbkV4cGxhbmF0aW9uPiB7XG4gICAgaWYgKCFwYXJhbXMucHVicykge1xuICAgICAgLy8gaWYgbm8gcHVicyBhcmUgcHJvdmlkZWQsIG9wcG9ydHVuaXN0aWNhbGx5IGZldGNoIHRoZSBrZXljaGFpbnMgZnJvbSB0aGUgd2FsbGV0XG4gICAgICBpZiAod2FsbGV0KSB7XG4gICAgICAgIGNvbnN0IGtleWNoYWlucyA9IGF3YWl0IGZldGNoS2V5Y2hhaW5zKHRoaXMsIHdhbGxldCk7XG4gICAgICAgIHBhcmFtcy5wdWJzID0gdG9CaXAzMlRyaXBsZShrZXljaGFpbnMpLm1hcCgoaykgPT4gay5uZXV0ZXJlZCgpLnRvQmFzZTU4KCkpIGFzIFRyaXBsZTxzdHJpbmc+O1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZXhwbGFpblR4KHRoaXMuZGVjb2RlVHJhbnNhY3Rpb25Gcm9tUHJlYnVpbGQocGFyYW1zKSwgcGFyYW1zLCB0aGlzLm5hbWUpO1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXByZWNhdGVkIC0gdXNlIHtAc2VlIGJhY2t1cEtleVJlY292ZXJ5fVxuICAgKiBCdWlsZHMgYSBmdW5kcyByZWNvdmVyeSB0cmFuc2FjdGlvbiB3aXRob3V0IEJpdEdvXG4gICAqIEBwYXJhbSBwYXJhbXMgLSB7QHNlZSBiYWNrdXBLZXlSZWNvdmVyeX1cbiAgICovXG4gIGFzeW5jIHJlY292ZXIocGFyYW1zOiBSZWNvdmVyUGFyYW1zKTogUmV0dXJuVHlwZTx0eXBlb2YgYmFja3VwS2V5UmVjb3Zlcnk+IHtcbiAgICByZXR1cm4gYmFja3VwS2V5UmVjb3ZlcnkodGhpcywgdGhpcy5iaXRnbywgcGFyYW1zKTtcbiAgfVxuXG4gIGFzeW5jIHJlY292ZXJWMShwYXJhbXM6IFYxUmVjb3ZlclBhcmFtcyk6IFJldHVyblR5cGU8dHlwZW9mIHYxQmFja3VwS2V5UmVjb3Zlcnk+IHtcbiAgICByZXR1cm4gdjFCYWNrdXBLZXlSZWNvdmVyeSh0aGlzLCB0aGlzLmJpdGdvLCBwYXJhbXMpO1xuICB9XG5cbiAgYXN5bmMgc3dlZXBWMShwYXJhbXM6IFYxU3dlZXBQYXJhbXMpOiBSZXR1cm5UeXBlPHR5cGVvZiB2MVN3ZWVwPiB7XG4gICAgcmV0dXJuIHYxU3dlZXAodGhpcywgdGhpcy5iaXRnbywgcGFyYW1zKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZWNvdmVyIGNvaW4gdGhhdCB3YXMgc2VudCB0byB3cm9uZyBjaGFpblxuICAgKiBAcGFyYW0gcGFyYW1zXG4gICAqIEBwYXJhbSBwYXJhbXMudHhpZCBUaGUgdHhpZCBvZiB0aGUgZmF1bHR5IHRyYW5zYWN0aW9uXG4gICAqIEBwYXJhbSBwYXJhbXMucmVjb3ZlcnlBZGRyZXNzIGFkZHJlc3MgdG8gc2VuZCByZWNvdmVyZWQgZnVuZHMgdG9cbiAgICogQHBhcmFtIHBhcmFtcy53YWxsZXQgdGhlIHdhbGxldCB0aGF0IHJlY2VpdmVkIHRoZSBmdW5kc1xuICAgKiBAcGFyYW0gcGFyYW1zLnJlY292ZXJ5Q29pbiB0aGUgY29pbiB0eXBlIG9mIHRoZSB3YWxsZXQgdGhhdCByZWNlaXZlZCB0aGUgZnVuZHNcbiAgICogQHBhcmFtIHBhcmFtcy5zaWduZWQgcmV0dXJuIGEgaGFsZi1zaWduZWQgdHJhbnNhY3Rpb24gKGRlZmF1bHQ9dHJ1ZSlcbiAgICogQHBhcmFtIHBhcmFtcy53YWxsZXRQYXNzcGhyYXNlIHRoZSB3YWxsZXQgcGFzc3BocmFzZVxuICAgKiBAcGFyYW0gcGFyYW1zLnhwcnYgdGhlIHVuZW5jcnlwdGVkIHhwcnYgKHVzZWQgaW5zdGVhZCBvZiB3YWxsZXQgcGFzc3BocmFzZSlcbiAgICogQHBhcmFtIHBhcmFtcy5hcGlLZXkgZm9yIHV0eG8gY29pbnMgb3RoZXIgdGhhbiBbQlRDLFRCVENdIHRoaXMgaXMgYSBCbG9jayBDaGFpciBhcGkga2V5XG4gICAqIEByZXR1cm5zIHsqfVxuICAgKi9cbiAgYXN5bmMgcmVjb3ZlckZyb21Xcm9uZ0NoYWluPFROdW1iZXIgZXh0ZW5kcyBudW1iZXIgfCBiaWdpbnQgPSBudW1iZXI+KFxuICAgIHBhcmFtczogUmVjb3ZlckZyb21Xcm9uZ0NoYWluT3B0aW9uc1xuICApOiBQcm9taXNlPENyb3NzQ2hhaW5SZWNvdmVyeVNpZ25lZDxUTnVtYmVyPiB8IENyb3NzQ2hhaW5SZWNvdmVyeVVuc2lnbmVkPFROdW1iZXI+PiB7XG4gICAgY29uc3QgeyB0eGlkLCByZWNvdmVyeUFkZHJlc3MsIHdhbGxldCwgd2FsbGV0UGFzc3BocmFzZSwgeHBydiwgYXBpS2V5IH0gPSBwYXJhbXM7XG5cbiAgICAvLyBwYXJhbXMucmVjb3ZlcnlDb2luIHVzZWQgdG8gYmUgcGFyYW1zLmNvaW4sIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5XG4gICAgY29uc3QgcmVjb3ZlcnlDb2luID0gcGFyYW1zLmNvaW4gfHwgcGFyYW1zLnJlY292ZXJ5Q29pbjtcbiAgICBpZiAoIXJlY292ZXJ5Q29pbikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdtaXNzaW5nIHJlcXVpcmVkIG9iamVjdCByZWNvdmVyeUNvaW4nKTtcbiAgICB9XG4gICAgLy8gc2lnbmVkIHNob3VsZCBkZWZhdWx0IHRvIHRydWUsIGFuZCBvbmx5IGJlIGRpc2FibGVkIGlmIGV4cGxpY2l0bHkgc2V0IHRvIGZhbHNlIChub3QgdW5kZWZpbmVkKVxuICAgIGNvbnN0IHNpZ25lZCA9IHBhcmFtcy5zaWduZWQgIT09IGZhbHNlO1xuXG4gICAgY29uc3Qgc291cmNlQ29pbkZhbWlseSA9IHRoaXMuZ2V0RmFtaWx5KCk7XG4gICAgY29uc3QgcmVjb3ZlcnlDb2luRmFtaWx5ID0gcmVjb3ZlcnlDb2luLmdldEZhbWlseSgpO1xuICAgIGNvbnN0IHN1cHBvcnRlZFJlY292ZXJ5Q29pbnMgPSBzdXBwb3J0ZWRDcm9zc0NoYWluUmVjb3Zlcmllc1tzb3VyY2VDb2luRmFtaWx5XTtcblxuICAgIGlmIChfLmlzVW5kZWZpbmVkKHN1cHBvcnRlZFJlY292ZXJ5Q29pbnMpIHx8ICFzdXBwb3J0ZWRSZWNvdmVyeUNvaW5zLmluY2x1ZGVzKHJlY292ZXJ5Q29pbkZhbWlseSkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgUmVjb3Zlcnkgb2YgJHtzb3VyY2VDb2luRmFtaWx5fSBiYWxhbmNlcyBmcm9tICR7cmVjb3ZlcnlDb2luRmFtaWx5fSB3YWxsZXRzIGlzIG5vdCBzdXBwb3J0ZWQuYCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGF3YWl0IHJlY292ZXJDcm9zc0NoYWluPFROdW1iZXI+KHRoaXMuYml0Z28sIHtcbiAgICAgIHNvdXJjZUNvaW46IHRoaXMsXG4gICAgICByZWNvdmVyeUNvaW4sXG4gICAgICB3YWxsZXRJZDogd2FsbGV0LFxuICAgICAgdHhpZCxcbiAgICAgIHJlY292ZXJ5QWRkcmVzcyxcbiAgICAgIHdhbGxldFBhc3NwaHJhc2U6IHNpZ25lZCA/IHdhbGxldFBhc3NwaHJhc2UgOiB1bmRlZmluZWQsXG4gICAgICB4cHJ2OiBzaWduZWQgPyB4cHJ2IDogdW5kZWZpbmVkLFxuICAgICAgYXBpS2V5LFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEdlbmVyYXRlIGJpcDMyIGtleSBwYWlyXG4gICAqXG4gICAqIEBwYXJhbSBzZWVkXG4gICAqIEByZXR1cm5zIHtPYmplY3R9IG9iamVjdCB3aXRoIGdlbmVyYXRlZCBwdWIgYW5kIHBydlxuICAgKi9cbiAgZ2VuZXJhdGVLZXlQYWlyKHNlZWQ6IEJ1ZmZlcik6IHsgcHViOiBzdHJpbmc7IHBydjogc3RyaW5nIH0ge1xuICAgIGlmICghc2VlZCkge1xuICAgICAgLy8gQW4gZXh0ZW5kZWQgcHJpdmF0ZSBrZXkgaGFzIGJvdGggYSBub3JtYWwgMjU2IGJpdCBwcml2YXRlIGtleSBhbmQgYSAyNTZcbiAgICAgIC8vIGJpdCBjaGFpbiBjb2RlLCBib3RoIG9mIHdoaWNoIG11c3QgYmUgcmFuZG9tLiA1MTIgYml0cyBpcyB0aGVyZWZvcmUgdGhlXG4gICAgICAvLyBtYXhpbXVtIGVudHJvcHkgYW5kIGdpdmVzIHVzIG1heGltdW0gc2VjdXJpdHkgYWdhaW5zdCBjcmFja2luZy5cbiAgICAgIHNlZWQgPSByYW5kb21CeXRlcyg1MTIgLyA4KTtcbiAgICB9XG4gICAgY29uc3QgZXh0ZW5kZWRLZXkgPSBCSVAzMi5mcm9tU2VlZChzZWVkKTtcbiAgICByZXR1cm4ge1xuICAgICAgcHViOiBleHRlbmRlZEtleS5uZXV0ZXJlZCgpLnRvQmFzZTU4KCksXG4gICAgICBwcnY6IGV4dGVuZGVkS2V5LnRvQmFzZTU4KCksXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZXRlcm1pbmVzIHRoZSBkZWZhdWx0IHRyYW5zYWN0aW9uIGZvcm1hdCBiYXNlZCBvbiB3YWxsZXQgcHJvcGVydGllcyBhbmQgbmV0d29ya1xuICAgKiBAcGFyYW0gd2FsbGV0IC0gVGhlIHdhbGxldCB0byBjaGVja1xuICAgKiBAcGFyYW0gcmVxdWVzdGVkRm9ybWF0IC0gT3B0aW9uYWwgZXhwbGljaXRseSByZXF1ZXN0ZWQgZm9ybWF0XG4gICAqIEByZXR1cm5zIFRoZSB0cmFuc2FjdGlvbiBmb3JtYXQgdG8gdXNlLCBvciB1bmRlZmluZWQgaWYgbm8gZGVmYXVsdCBhcHBsaWVzXG4gICAqL1xuICBnZXREZWZhdWx0VHhGb3JtYXQod2FsbGV0OiBXYWxsZXQsIHJlcXVlc3RlZEZvcm1hdD86IFR4Rm9ybWF0KTogVHhGb3JtYXQge1xuICAgIGlmIChyZXF1ZXN0ZWRGb3JtYXQgPT09ICdsZWdhY3knKSB7XG4gICAgICByZXR1cm4gJ3BzYnQtbGl0ZSc7XG4gICAgfVxuICAgIHJldHVybiByZXF1ZXN0ZWRGb3JtYXQgPz8gJ3BzYnQtbGl0ZSc7XG4gIH1cblxuICBhc3luYyBnZXRFeHRyYVByZWJ1aWxkUGFyYW1zKGJ1aWxkUGFyYW1zOiBFeHRyYVByZWJ1aWxkUGFyYW1zT3B0aW9ucyAmIHsgd2FsbGV0OiBXYWxsZXQgfSk6IFByb21pc2U8e1xuICAgIHR4Rm9ybWF0PzogVHhGb3JtYXQ7XG4gICAgY2hhbmdlQWRkcmVzc1R5cGU/OiBTY3JpcHRUeXBlMk9mM1tdIHwgU2NyaXB0VHlwZTJPZjM7XG4gICAgYWxsb3dlZElucHV0U2NyaXB0VHlwZXM/OiBTY3JpcHRUeXBlMk9mM1tdO1xuICB9PiB7XG4gICAgY29uc3QgcmVxdWVzdGVkRm9ybWF0ID0gYnVpbGRQYXJhbXMudHhGb3JtYXQgYXMgVHhGb3JtYXQgfCB1bmRlZmluZWQ7XG4gICAgY29uc3QgdHhGb3JtYXQgPSB0aGlzLmdldERlZmF1bHRUeEZvcm1hdChidWlsZFBhcmFtcy53YWxsZXQsIHJlcXVlc3RlZEZvcm1hdCk7XG4gICAgbGV0IGNoYW5nZUFkZHJlc3NUeXBlID0gYnVpbGRQYXJhbXMuY2hhbmdlQWRkcmVzc1R5cGUgYXMgU2NyaXB0VHlwZTJPZjNbXSB8IFNjcmlwdFR5cGUyT2YzIHwgdW5kZWZpbmVkO1xuXG4gICAgLy8gaWYgdGhlIGFkZHJlc3NUeXBlIGlzIG5vdCBzcGVjaWZpZWQsIHdlIG5lZWQgdG8gZGVmYXVsdCB0byBwMnRyTXVzaWcyIGZvciB0ZXN0bmV0IGhvdCB3YWxsZXRzIGZvciBzdGFnZWQgcm9sbG91dCBvZiBwMnRyTXVzaWcyXG4gICAgaWYgKFxuICAgICAgYnVpbGRQYXJhbXMuYWRkcmVzc1R5cGUgPT09IHVuZGVmaW5lZCAmJiAvLyBhZGRyZXNzVHlwZSBpcyBkZXByZWNhdGVkIGFuZCByZXBsYWNlZCBieSBgY2hhbmdlQWRkcmVzc2BcbiAgICAgIGJ1aWxkUGFyYW1zLmNoYW5nZUFkZHJlc3NUeXBlID09PSB1bmRlZmluZWQgJiZcbiAgICAgIGJ1aWxkUGFyYW1zLmNoYW5nZUFkZHJlc3MgPT09IHVuZGVmaW5lZCAmJlxuICAgICAgYnVpbGRQYXJhbXMud2FsbGV0LnR5cGUoKSA9PT0gJ2hvdCdcbiAgICApIHtcbiAgICAgIGNoYW5nZUFkZHJlc3NUeXBlID0gWydwMnRyTXVzaWcyJywgJ3Ayd3NoJywgJ3Ayc2hQMndzaCcsICdwMnNoJywgJ3AydHInXTtcbiAgICB9XG5cbiAgICAvLyBnZXRIYWxmU2lnbmVkTGVnYWN5Rm9ybWF0KCkgb25seSBzdXBwb3J0cyBwMm1zLWJhc2VkIHR5cGVzIChwMnNoLCBwMnNoUDJ3c2gsIHAyd3NoKS5cbiAgICAvLyBGaWx0ZXIgY2hhbmdlIG91dHB1dHMgYW5kIHJlc3RyaWN0IGlucHV0IHNlbGVjdGlvbiB0byB0aGVzZSB0eXBlcy5cbiAgICBjb25zdCBsZWdhY3lDb21wYXRpYmxlVHlwZXM6IFNjcmlwdFR5cGUyT2YzW10gPSBbJ3Ayc2gnLCAncDJzaFAyd3NoJywgJ3Ayd3NoJ107XG4gICAgbGV0IGFsbG93ZWRJbnB1dFNjcmlwdFR5cGVzOiBTY3JpcHRUeXBlMk9mM1tdIHwgdW5kZWZpbmVkO1xuXG4gICAgaWYgKHJlcXVlc3RlZEZvcm1hdCA9PT0gJ2xlZ2FjeScpIHtcbiAgICAgIGFsbG93ZWRJbnB1dFNjcmlwdFR5cGVzID0gbGVnYWN5Q29tcGF0aWJsZVR5cGVzO1xuICAgICAgaWYgKEFycmF5LmlzQXJyYXkoY2hhbmdlQWRkcmVzc1R5cGUpKSB7XG4gICAgICAgIGNoYW5nZUFkZHJlc3NUeXBlID0gY2hhbmdlQWRkcmVzc1R5cGUuZmlsdGVyKCh0KTogdCBpcyBTY3JpcHRUeXBlMk9mMyA9PlxuICAgICAgICAgIGxlZ2FjeUNvbXBhdGlibGVUeXBlcy5pbmNsdWRlcyh0IGFzIFNjcmlwdFR5cGUyT2YzKVxuICAgICAgICApO1xuICAgICAgfSBlbHNlIGlmIChjaGFuZ2VBZGRyZXNzVHlwZSAhPT0gdW5kZWZpbmVkICYmICFsZWdhY3lDb21wYXRpYmxlVHlwZXMuaW5jbHVkZXMoY2hhbmdlQWRkcmVzc1R5cGUpKSB7XG4gICAgICAgIGNoYW5nZUFkZHJlc3NUeXBlID0gbGVnYWN5Q29tcGF0aWJsZVR5cGVzO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICB0eEZvcm1hdCxcbiAgICAgIGNoYW5nZUFkZHJlc3NUeXBlLFxuICAgICAgYWxsb3dlZElucHV0U2NyaXB0VHlwZXMsXG4gICAgfTtcbiAgfVxuXG4gIHByZUNyZWF0ZUJpdEdvKHBhcmFtczogUHJlY3JlYXRlQml0R29PcHRpb25zKTogdm9pZCB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgYXN5bmMgcHJlc2lnblRyYW5zYWN0aW9uKHBhcmFtczogUHJlc2lnblRyYW5zYWN0aW9uT3B0aW9ucyk6IFByb21pc2U8YW55PiB7XG4gICAgaWYgKHBhcmFtcy53YWxsZXREYXRhICYmIGlzVXR4b1dhbGxldERhdGEocGFyYW1zLndhbGxldERhdGEpICYmIGlzRGVzY3JpcHRvcldhbGxldERhdGEocGFyYW1zLndhbGxldERhdGEpKSB7XG4gICAgICByZXR1cm4gcGFyYW1zO1xuICAgIH1cblxuICAgIGNvbnN0IHJldHVybkxlZ2FjeUZvcm1hdCA9IChwYXJhbXMgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4pLnR4Rm9ybWF0ID09PSAnbGVnYWN5JztcblxuICAgIC8vIEluIHRoZSBjYXNlIHRoYXQgd2UgaGF2ZSBhICdwc2J0LWxpdGUnIHRyYW5zYWN0aW9uIGZvcm1hdCwgd2Ugd2FudCB0byBpbmRpY2F0ZSBpbiBzaWduaW5nIHRvIG5vdCBmYWlsXG4gICAgY29uc3QgdHhIZXggPSAocGFyYW1zLnR4SGV4ID8/IHBhcmFtcy50eFByZWJ1aWxkPy50eEhleCkgYXMgc3RyaW5nO1xuICAgIGlmIChcbiAgICAgIHR4SGV4ICYmXG4gICAgICB1dHhvbGliLmJpdGdvLmlzUHNidCh0eEhleCBhcyBzdHJpbmcpICYmXG4gICAgICB1dHhvbGliLmJpdGdvLmlzUHNidExpdGUodXR4b2xpYi5iaXRnby5jcmVhdGVQc2J0RnJvbUhleCh0eEhleCwgdGhpcy5uZXR3b3JrKSkgJiZcbiAgICAgIHBhcmFtcy5hbGxvd05vblNlZ3dpdFNpZ25pbmdXaXRob3V0UHJldlR4ID09PSB1bmRlZmluZWRcbiAgICApIHtcbiAgICAgIHJldHVybiB7IC4uLnBhcmFtcywgYWxsb3dOb25TZWd3aXRTaWduaW5nV2l0aG91dFByZXZUeDogdHJ1ZSwgcmV0dXJuTGVnYWN5Rm9ybWF0IH07XG4gICAgfVxuICAgIHJldHVybiB7IC4uLnBhcmFtcywgcmV0dXJuTGVnYWN5Rm9ybWF0IH07XG4gIH1cblxuICBhc3luYyBzdXBwbGVtZW50R2VuZXJhdGVXYWxsZXQoXG4gICAgd2FsbGV0UGFyYW1zOiBTdXBwbGVtZW50R2VuZXJhdGVXYWxsZXRPcHRpb25zLFxuICAgIGtleWNoYWluczogS2V5Y2hhaW5zVHJpcGxldFxuICApOiBQcm9taXNlPGFueT4ge1xuICAgIHJldHVybiB3YWxsZXRQYXJhbXM7XG4gIH1cblxuICB0cmFuc2FjdGlvbkRhdGFBbGxvd2VkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHZhbHVlbGVzc1RyYW5zZmVyQWxsb3dlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBnZXRSZWNvdmVyeVByb3ZpZGVyKGFwaVRva2VuPzogc3RyaW5nKTogUmVjb3ZlcnlQcm92aWRlciB7XG4gICAgcmV0dXJuIGZvckNvaW4odGhpcy5nZXRDaGFpbigpLCBhcGlUb2tlbik7XG4gIH1cblxuICAvKiogQGluaGVyaXREb2MgKi9cbiAgYXVkaXREZWNyeXB0ZWRLZXkoe1xuICAgIG11bHRpU2lnVHlwZSxcbiAgICBwdWJsaWNLZXksXG4gICAgcHJ2LFxuICB9OiB7XG4gICAgbXVsdGlTaWdUeXBlOiBNdWx0aXNpZ1R5cGU7XG4gICAgcHVibGljS2V5OiBzdHJpbmc7XG4gICAgcHJ2OiBzdHJpbmc7XG4gIH0pOiB2b2lkIHtcbiAgICBpZiAobXVsdGlTaWdUeXBlID09PSAndHNzJykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCd0c3MgYXVkaXRpbmcgaXMgbm90IHN1cHBvcnRlZCBmb3IgdGhpcyBjb2luJyk7XG4gICAgfVxuICAgIGlmICghaXNWYWxpZFBydihwcnYpICYmICFpc1ZhbGlkWHBydihwcnYpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ2ludmFsaWQgcHJpdmF0ZSBrZXknKTtcbiAgICB9XG4gICAgaWYgKHB1YmxpY0tleSkge1xuICAgICAgY29uc3QgZ2VuUHViS2V5ID0gQklQMzIuZnJvbUJhc2U1OChwcnYpLm5ldXRlcmVkKCkudG9CYXNlNTgoKTtcbiAgICAgIGlmIChnZW5QdWJLZXkgIT09IHB1YmxpY0tleSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3B1YmxpYyBrZXkgZG9lcyBub3QgbWF0Y2ggcHJpdmF0ZSBrZXknKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbiJdfQ==
|
|
718
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWJzdHJhY3RVdHhvQ29pbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9hYnN0cmFjdFV0eG9Db2luLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLG9EQUE0QjtBQUM1QixtQ0FBcUM7QUFFckMsb0RBQXVCO0FBQ3ZCLHlEQUEyQztBQUMzQyxnREFBNEQ7QUFDNUQsOENBQW9EO0FBQ3BELDhDQXFDeUI7QUFFekIseUNBWW9CO0FBQ3BCLGlGQUFtSDtBQUNuSCxxQ0FBeUQ7QUFDekQsK0NBUXVCO0FBR3ZCLGtGQUlvRDtBQUNwRCw2Q0FBNkc7QUFDN0csbUNBT2lCO0FBQ2pCLHVEQUF1RTtBQUN2RSwrQ0FBa0Y7QUFDbEYsaURBSzhCO0FBQzlCLDJDQUEwRTtBQUMxRSwyQ0FBc0U7QUFDdEUsZ0VBQThEO0FBQzlELG1FQUFnRTtBQUNoRSxxQ0FBd0Q7QUFDeEQsb0VBQXVFO0FBa0J2RSxNQUFhLHVCQUF3QixTQUFRLEtBQUs7SUFDaEQsWUFBWSxRQUFrQjtRQUM1QixLQUFLLENBQUMsNEJBQTRCLFFBQVEsOERBQThELENBQUMsQ0FBQztJQUM1RyxDQUFDO0NBQ0Y7QUFKRCwwREFJQztBQTJCRCxNQUFNLEVBQUUsV0FBVyxFQUFFLGtCQUFrQixFQUFFLGFBQWEsRUFBRSxHQUFHLGdCQUFLLENBQUM7QUFFakU7OztHQUdHO0FBQ0gsU0FBUyxvQkFBb0IsQ0FDM0IsRUFBK0IsRUFDL0IsSUFBMEIsRUFDMUIsUUFBc0I7SUFFdEIsSUFBSSxFQUFFLFlBQVksZ0JBQUssQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUNqQyxPQUFPLGdCQUFLLENBQUMsa0NBQWtDLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDdEQsQ0FBQztJQUNELElBQUksRUFBRSxZQUFZLDZCQUFpQixDQUFDLFNBQVMsRUFBRSxDQUFDO1FBQzlDLElBQUEsZ0JBQU0sRUFBQyxJQUFJLElBQUks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QyxJQUFBLHNCQUFXLEVBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUMxQyxNQUFNLElBQUksS0FBSyxDQUFDLHFCQUFxQixDQUFDLENBQUM7UUFDekMsQ0FBQztRQUNELElBQUksU0FBUyxFQUFFLENBQUM7WUFDZCxNQUFNLFNBQVMsR0FBRyxpQkFBSyxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUM5RCxJQUFJLFNBQVMsS0FBSyxTQUFTLEVBQUUsQ0FBQztnQkFDNUIsTUFBTSxJQUFJLEtBQUssQ0FBQyx1Q0FBdUMsQ0FBQyxDQUFDO1lBQzNELENBQUM7UUFDSCxDQUFDO0lBQ0gsQ0FBQztDQUNGO0FBM3ZCRCw0Q0EydkJDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGFzc2VydCBmcm9tICdhc3NlcnQnO1xuaW1wb3J0IHsgcmFuZG9tQnl0ZXMgfSBmcm9tICdjcnlwdG8nO1xuXG5pbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0ICogYXMgdXR4b2xpYiBmcm9tICdAYml0Z28vdXR4by1saWInO1xuaW1wb3J0IHsgQklQMzIsIGZpeGVkU2NyaXB0V2FsbGV0IH0gZnJvbSAnQGJpdGdvL3dhc20tdXR4byc7XG5pbXBvcnQgeyBiaXRnbywgZ2V0TWFpbm5ldCB9IGZyb20gJ0BiaXRnby91dHhvLWxpYic7XG5pbXBvcnQge1xuICBBZGRyZXNzQ29pblNwZWNpZmljLFxuICBCYXNlQ29pbixcbiAgQml0R29CYXNlLFxuICBDcmVhdGVBZGRyZXNzRm9ybWF0LFxuICBFeHRyYVByZWJ1aWxkUGFyYW1zT3B0aW9ucyxcbiAgSGFsZlNpZ25lZFV0eG9UcmFuc2FjdGlvbixcbiAgSUJhc2VDb2luLFxuICBpc0JvbHQxMUludm9pY2UsXG4gIEludmFsaWRBZGRyZXNzRGVyaXZhdGlvblByb3BlcnR5RXJyb3IsXG4gIEludmFsaWRBZGRyZXNzRXJyb3IsXG4gIElSZXF1ZXN0VHJhY2VyLFxuICBpc1RyaXBsZSxcbiAgSVdhbGxldCxcbiAgS2V5Y2hhaW5zVHJpcGxldCxcbiAgS2V5SW5kaWNlcyxcbiAgTWlzbWF0Y2hlZFJlY2lwaWVudCxcbiAgTXVsdGlzaWdUeXBlLFxuICBtdWx0aXNpZ1R5cGVzLFxuICBQYXJzZVRyYW5zYWN0aW9uT3B0aW9ucyBhcyBCYXNlUGFyc2VUcmFuc2FjdGlvbk9wdGlvbnMsXG4gIFByZWNyZWF0ZUJpdEdvT3B0aW9ucyxcbiAgUHJlc2lnblRyYW5zYWN0aW9uT3B0aW9ucyxcbiAgUmVxdWVzdFRyYWNlcixcbiAgU2lnbmVkVHJhbnNhY3Rpb24sXG4gIFR4SW50ZW50TWlzbWF0Y2hFcnJvcixcbiAgU2lnblRyYW5zYWN0aW9uT3B0aW9ucyBhcyBCYXNlU2lnblRyYW5zYWN0aW9uT3B0aW9ucyxcbiAgU3VwcGxlbWVudEdlbmVyYXRlV2FsbGV0T3B0aW9ucyxcbiAgVHJhbnNhY3Rpb25QYXJhbXMgYXMgQmFzZVRyYW5zYWN0aW9uUGFyYW1zLFxuICBUcmFuc2FjdGlvblByZWJ1aWxkIGFzIEJhc2VUcmFuc2FjdGlvblByZWJ1aWxkLFxuICBUcmlwbGUsXG4gIFR4SW50ZW50TWlzbWF0Y2hSZWNpcGllbnRFcnJvcixcbiAgVmVyaWZpY2F0aW9uT3B0aW9ucyxcbiAgVmVyaWZ5QWRkcmVzc09wdGlvbnMgYXMgQmFzZVZlcmlmeUFkZHJlc3NPcHRpb25zLFxuICBWZXJpZnlUcmFuc2FjdGlvbk9wdGlvbnMgYXMgQmFzZVZlcmlmeVRyYW5zYWN0aW9uT3B0aW9ucyxcbiAgV2FsbGV0LFxuICBpc1ZhbGlkUHJ2LFxuICBpc1ZhbGlkWHBydixcbn0gZnJvbSAnQGJpdGdvL3Nkay1jb3JlJztcblxuaW1wb3J0IHtcbiAgYmFja3VwS2V5UmVjb3ZlcnksXG4gIENyb3NzQ2hhaW5SZWNvdmVyeVNpZ25lZCxcbiAgQ3Jvc3NDaGFpblJlY292ZXJ5VW5zaWduZWQsXG4gIGZvckNvaW4sXG4gIHJlY292ZXJDcm9zc0NoYWluLFxuICBSZWNvdmVyUGFyYW1zLFxuICBSZWNvdmVyeVByb3ZpZGVyLFxuICB2MUJhY2t1cEtleVJlY292ZXJ5LFxuICBWMVJlY292ZXJQYXJhbXMsXG4gIHYxU3dlZXAsXG4gIFYxU3dlZXBQYXJhbXMsXG59IGZyb20gJy4vcmVjb3ZlcnknO1xuaW1wb3J0IHsgZ2V0UmVwbGF5UHJvdGVjdGlvblB1YmtleXMsIGlzUmVwbGF5UHJvdGVjdGlvblVuc3BlbnQgfSBmcm9tICcuL3RyYW5zYWN0aW9uL2ZpeGVkU2NyaXB0L3JlcGxheVByb3RlY3Rpb24nO1xuaW1wb3J0IHsgc3VwcG9ydGVkQ3Jvc3NDaGFpblJlY292ZXJpZXMgfSBmcm9tICcuL2NvbmZpZyc7XG5pbXBvcnQge1xuICBhc3NlcnRWYWxpZFRyYW5zYWN0aW9uUmVjaXBpZW50LFxuICBEZWNvZGVkVHJhbnNhY3Rpb24sXG4gIGV4cGxhaW5UeCxcbiAgZnJvbUV4dGVuZGVkQWRkcmVzc0Zvcm1hdCxcbiAgaXNTY3JpcHRSZWNpcGllbnQsXG4gIHBhcnNlVHJhbnNhY3Rpb24sXG4gIHZlcmlmeVRyYW5zYWN0aW9uLFxufSBmcm9tICcuL3RyYW5zYWN0aW9uJztcbmltcG9ydCB0eXBlIHsgVHJhbnNhY3Rpb25FeHBsYW5hdGlvbiB9IGZyb20gJy4vdHJhbnNhY3Rpb24vZml4ZWRTY3JpcHQvZXhwbGFpblRyYW5zYWN0aW9uJztcbmltcG9ydCB7IE11c2lnMlBhcnRpY2lwYW50IH0gZnJvbSAnLi90cmFuc2FjdGlvbi9maXhlZFNjcmlwdC9tdXNpZzInO1xuaW1wb3J0IHtcbiAgQWdncmVnYXRlVmFsaWRhdGlvbkVycm9yLFxuICBFcnJvck1pc3NpbmdPdXRwdXRzLFxuICBFcnJvckltcGxpY2l0RXh0ZXJuYWxPdXRwdXRzLFxufSBmcm9tICcuL3RyYW5zYWN0aW9uL2Rlc2NyaXB0b3IvdmVyaWZ5VHJhbnNhY3Rpb24nO1xuaW1wb3J0IHsgYXNzZXJ0RGVzY3JpcHRvcldhbGxldEFkZHJlc3MsIGdldERlc2NyaXB0b3JNYXBGcm9tV2FsbGV0LCBpc0Rlc2NyaXB0b3JXYWxsZXQgfSBmcm9tICcuL2Rlc2NyaXB0b3InO1xuaW1wb3J0IHtcbiAgZ2V0RnVsbE5hbWVGcm9tQ29pbk5hbWUsXG4gIGdldE1haW5uZXRDb2luTmFtZSxcbiAgZ2V0TmV0d29ya0Zyb21Db2luTmFtZSxcbiAgaXNNYWlubmV0Q29pbixcbiAgVXR4b0NvaW5OYW1lLFxuICBVdHhvQ29pbk5hbWVNYWlubmV0LFxufSBmcm9tICcuL25hbWVzJztcbmltcG9ydCB7IGFzc2VydEZpeGVkU2NyaXB0V2FsbGV0QWRkcmVzcyB9IGZyb20gJy4vYWRkcmVzcy9maXhlZFNjcmlwdCc7XG5pbXBvcnQgeyBpc1Nka0JhY2tlbmQsIFBhcnNlZFRyYW5zYWN0aW9uLCBTZGtCYWNrZW5kIH0gZnJvbSAnLi90cmFuc2FjdGlvbi90eXBlcyc7XG5pbXBvcnQge1xuICBkZWNvZGVEZXNjcmlwdG9yUHNidCxcbiAgZGVjb2RlUHNidFdpdGgsXG4gIGVuY29kZVRyYW5zYWN0aW9uLFxuICBzdHJpbmdUb0J1ZmZlclRyeUZvcm1hdHMsXG59IGZyb20gJy4vdHJhbnNhY3Rpb24vZGVjb2RlJztcbmltcG9ydCB7IGZldGNoS2V5Y2hhaW5zLCB0b0JpcDMyVHJpcGxlLCBVdHhvS2V5Y2hhaW4gfSBmcm9tICcuL2tleWNoYWlucyc7XG5pbXBvcnQgeyB2ZXJpZnlLZXlTaWduYXR1cmUsIHZlcmlmeVVzZXJQdWJsaWNLZXkgfSBmcm9tICcuL3ZlcmlmeUtleSc7XG5pbXBvcnQgeyBnZXRQb2xpY3lGb3JFbnYgfSBmcm9tICcuL2Rlc2NyaXB0b3IvdmFsaWRhdGVQb2xpY3knO1xuaW1wb3J0IHsgc2lnblRyYW5zYWN0aW9uIH0gZnJvbSAnLi90cmFuc2FjdGlvbi9zaWduVHJhbnNhY3Rpb24nO1xuaW1wb3J0IHsgaXNVdHhvV2FsbGV0RGF0YSwgVXR4b1dhbGxldCB9IGZyb20gJy4vd2FsbGV0JztcbmltcG9ydCB7IGlzRGVzY3JpcHRvcldhbGxldERhdGEgfSBmcm9tICcuL2Rlc2NyaXB0b3IvZGVzY3JpcHRvcldhbGxldCc7XG5pbXBvcnQgdHlwZSB7IFVuc3BlbnQgfSBmcm9tICcuL3Vuc3BlbnQnO1xuXG5pbXBvcnQgU2NyaXB0VHlwZTJPZjMgPSB1dHhvbGliLmJpdGdvLm91dHB1dFNjcmlwdHMuU2NyaXB0VHlwZTJPZjM7XG5cbmV4cG9ydCB0eXBlIFR4Rm9ybWF0ID1cbiAgLy8gVGhpcyBpcyBhIGxlZ2FjeSB0cmFuc2FjdGlvbiBmb3JtYXQgYmFzZWQgYXJvdW5kIHRoZSBiaXRjb2luanMtbGliIHNlcmlhbGl6YXRpb24gb2YgdW5zaWduZWQgdHJhbnNhY3Rpb25zXG4gIC8vIGRvZXMgbm90IGluY2x1ZGUgcHJldk91dCBkYXRhIGFuZCBpcyBhIGJpdCBwYWluZnVsIHRvIHdvcmsgd2l0aFxuICAvLyBnb2luZyB0byBiZSBkZXByZWNhdGVkIGluIGZhdm9yIG9mIHBzYnRcbiAgLy8gQGRlcHJlY2F0ZWRcbiAgfCAnbGVnYWN5J1xuICAvLyBUaGlzIGlzIHRoZSBzdGFuZGFyZCBwc2J0IGZvcm1hdCwgaW5jbHVkaW5nIHRoZSBmdWxsIHByZXZUeCBkYXRhIGZvciBsZWdhY3kgdHJhbnNhY3Rpb25zLlxuICAvLyBUaGlzIHdpbGwgcmVtYWluIHN1cHBvcnRlZCBidXQgaXMgbm90IHRoZSBkZWZhdWx0LCBzaW5jZSB0aGUgZGF0YSBzaXplcyBjYW4gYmVjb21lIHByb2hpYml0aXZlbHkgbGFyZ2UuXG4gIHwgJ3BzYnQnXG4gIC8vIFRoaXMgaXMgYSBub25zdGFuZGFyZCBwc2J0IHZlcnNpb24gd2hlcmUgbGVnYWN5IGlucHV0cyBhcmUgc2VyaWFsaXplZCBhcyBpZiB0aGV5IHdlcmUgc2Vnd2l0IGlucHV0cy5cbiAgLy8gV2hpbGUgdGhpcyBwcmV2ZW50cyB1cyB0byBmdWxseSB2ZXJpZnkgdGhlIHRyYW5zYWN0aW9uIGZlZSwgd2UgaGF2ZSBvdGhlciBjaGVja3MgaW4gcGxhY2UgdG8gZW5zdXJlIHRoZSBmZWUgaXMgd2l0aGluIGJvdW5kcy5cbiAgfCAncHNidC1saXRlJztcblxuZXhwb3J0IGNsYXNzIEVycm9yRGVwcmVjYXRlZFR4Rm9ybWF0IGV4dGVuZHMgRXJyb3Ige1xuICBjb25zdHJ1Y3Rvcih0eEZvcm1hdDogVHhGb3JtYXQpIHtcbiAgICBzdXBlcihgU0RLIHN1cHBvcnQgZm9yIHR4Rm9ybWF0PSR7dHhGb3JtYXR9IGlzIGRlcHJlY2F0ZWQgb24gdGhpcyBlbnZpcm9ubWVudC4gUGxlYXNlIHVzZSBwc2J0IGluc3RlYWQuYCk7XG4gIH1cbn1cblxudHlwZSBVdHhvQ3VzdG9tU2lnbmluZ0Z1bmN0aW9uPFROdW1iZXIgZXh0ZW5kcyBudW1iZXIgfCBiaWdpbnQ+ID0ge1xuICAocGFyYW1zOiB7XG4gICAgY29pbjogSUJhc2VDb2luO1xuICAgIHR4UHJlYnVpbGQ6IFRyYW5zYWN0aW9uUHJlYnVpbGQ8VE51bWJlcj47XG4gICAgcHVicz86IHN0cmluZ1tdO1xuICAgIC8qKlxuICAgICAqIHNpZ25pbmdTdGVwIGZsYWcgYmVjb21lcyBhcHBsaWNhYmxlIHdoZW4gYm90aCBvZiB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDpcbiAgICAgKiAxKSBXaGVuIHRoZSBleHRlcm5hbCBleHByZXNzIHNpZ25lciBpcyBhY3RpdmF0ZWRcbiAgICAgKiAyKSBXaGVuIHRoZSBQU0JUIGluY2x1ZGVzIGF0IGxlYXN0IG9uZSB0YXByb290S2V5UGF0aFNwZW5kIGlucHV0LlxuICAgICAqXG4gICAgICogVGhlIHNpZ25pbmcgcHJvY2VzcyBvZiBhIHRhcHJvb3RLZXlQYXRoU3BlbmQgaW5wdXQgaXMgYSA0LXN0ZXAgc2VxdWVuY2U6XG4gICAgICogaSkgdXNlciBub25jZSBnZW5lcmF0aW9uIC0gc2lnbmVyTm9uY2UgLSB0aGlzIGlzIHRoZSBmaXJzdCBjYWxsIHRvIGV4dGVybmFsIGV4cHJlc3Mgc2lnbmVyIHNpZ25UcmFuc2FjdGlvblxuICAgICAqIGlpKSBiaXRnbyBub25jZSBnZW5lcmF0aW9uIC0gY29zaWduZXJOb25jZSAtIHRoaXMgaXMgdGhlIGZpcnN0IGFuZCBvbmx5IGNhbGwgdG8gbG9jYWwgc2lnblRyYW5zYWN0aW9uXG4gICAgICogaWlpKSB1c2VyIHNpZ25hdHVyZSAtIHNpZ25lclNpZ25hdHVyZSAtIHRoaXMgaXMgdGhlIHNlY29uZCBjYWxsIHRvIGV4dGVybmFsIGV4cHJlc3Mgc2lnbmVyIHNpZ25UcmFuc2FjdGlvblxuICAgICAqIGl2KSBiaXRnbyBzaWduYXR1cmUgLSBub3QgaW4gc2lnblRyYW5zYWN0aW9uIG1ldGhvZOKAmXMgc2NvcGVcbiAgICAgKlxuICAgICAqIEluIHRoZSBhYnNlbmNlIG9mIHRoaXMgZmxhZywgdGhlIGFmb3JlbWVudGlvbmVkIGZpcnN0IHRocmVlIHNlcXVlbmNlIGlzIGV4ZWN1dGVkIGluIGEgc2luZ2xlIHNpZ25UcmFuc2FjdGlvbiBjYWxsLlxuICAgICAqXG4gICAgICogTk9URTogV2UgbWFrZSBhIHN0cm9uZyBhc3N1bXB0aW9uIHRoYXQgdGhlIGV4dGVybmFsIGV4cHJlc3Mgc2lnbmVyIGFuZCBpdHMgY2FsbGVyIHVzZXMgc3RpY2t5IHNlc3Npb25zLFxuICAgICAqIHNpbmNlIFBTQlRzIGFyZSBjYWNoZWQgaW4gc3RlcCAxIHRvIGJlIHVzZWQgaW4gc3RlcCAzIGZvciBNdVNpZzIgdXNlciBzZWN1cmUgbm9uY2UgYWNjZXNzLlxuICAgICAqL1xuICAgIHNpZ25pbmdTdGVwPzogJ3NpZ25lck5vbmNlJyB8ICdzaWduZXJTaWduYXR1cmUnIHwgJ2Nvc2lnbmVyTm9uY2UnO1xuICB9KTogUHJvbWlzZTxTaWduZWRUcmFuc2FjdGlvbj47XG59O1xuXG5jb25zdCB7IGlzQ2hhaW5Db2RlLCBzY3JpcHRUeXBlRm9yQ2hhaW4sIG91dHB1dFNjcmlwdHMgfSA9IGJpdGdvO1xuXG4vKipcbiAqIENoZWNrIGlmIGEgZGVjb2RlZCB0cmFuc2FjdGlvbiBoYXMgYXQgbGVhc3Qgb25lIHRhcHJvb3Qga2V5IHBhdGggc3BlbmQgKE11U2lnMikgaW5wdXQuXG4gKiBXb3JrcyBmb3IgYm90aCB1dHhvbGliIFV0eG9Qc2J0IGFuZCB3YXNtLXV0eG8gQml0R29Qc2J0LlxuICovXG5mdW5jdGlvbiBoYXNLZXlQYXRoU3BlbmRJbnB1dDxUTnVtYmVyIGV4dGVuZHMgbnVtYmVyIHwgYmlnaW50PihcbiAgdHg6IERlY29kZWRUcmFuc2FjdGlvbjxUTnVtYmVyPixcbiAgcHViczogc3RyaW5nW10gfCB1bmRlZmluZWQsXG4gIGNvaW5OYW1lOiBVdHhvQ29pbk5hbWVcbik6IGJvb2xlYW4ge1xuICBpZiAodHggaW5zdGFuY2VvZiBiaXRnby5VdHhvUHNidCkge1xuICAgIHJldHVybiBiaXRnby5pc1RyYW5zYWN0aW9uV2l0aEtleVBhdGhTcGVuZElucHV0KHR4KTtcbiAgfVxuICBpZiAodHggaW5zdGFuY2VvZiBmaXhlZFNjcmlwdFdhbGxldC5CaXRHb1BzYnQpIHtcbiAgICBhc3NlcnQocHVicyAmJiBpc1RyaXBsZShwdWJzKSwgJ3B1YiB0cmlwbGUgaXMgcmVxdWlyZWQgdG8gY2hlY2sgZm9yIGtleSBwYXRoIHNwZW5kIGlucHV0cyBpbiB3YXNtLXV0eG8gUFNCVCcpO1xuICAgIGNvbnN0IHJvb3RXYWxsZXRLZXlzID0gZml4ZWRTY3JpcHRXYWxsZXQuUm9vdFdhbGxldEtleXMuZnJvbVhwdWJzKHB1YnMpO1xuICAgIGNvbnN0IHJlcGxheVByb3RlY3Rpb24gPSB7IHB1YmxpY0tleXM6IGdldFJlcGxheVByb3RlY3Rpb25QdWJrZXlzKGNvaW5OYW1lKSB9O1xuICAgIGNvbnN0IHBhcnNlZCA9IHR4LnBhcnNlVHJhbnNhY3Rpb25XaXRoV2FsbGV0S2V5cyhyb290V2FsbGV0S2V5cywgeyByZXBsYXlQcm90ZWN0aW9uIH0pO1xuICAgIHJldHVybiBwYXJzZWQuaW5wdXRzLnNvbWUoKGlucHV0KSA9PiBpbnB1dC5zY3JpcHRUeXBlID09PSAncDJ0ck11c2lnMktleVBhdGgnKTtcbiAgfVxuICByZXR1cm4gZmFsc2U7XG59XG5cbi8qKlxuICogQ29udmVydCBWYWxpZGF0aW9uRXJyb3IgdG8gVHhJbnRlbnRNaXNtYXRjaFJlY2lwaWVudEVycm9yIHdpdGggc3RydWN0dXJlZCBkYXRhXG4gKlxuICogVGhpcyBwcmVzZXJ2ZXMgdGhlIHN0cnVjdHVyZWQgZXJyb3IgaW5mb3JtYXRpb24gZnJvbSB0aGUgb3JpZ2luYWwgVmFsaWRhdGlvbkVycm9yXG4gKiBieSBleHRyYWN0aW5nIHRoZSBtaXNtYXRjaGVkIG91dHB1dHMgYW5kIGNvbnZlcnRpbmcgdGhlbSB0byB0aGUgc3RhbmRhcmRpemVkIGZvcm1hdC5cbiAqIFRoZSBvcmlnaW5hbCBlcnJvciBpcyBwcmVzZXJ2ZWQgYXMgdGhlIGBjYXVzZWAgZm9yIGRlYnVnZ2luZyBwdXJwb3Nlcy5cbiAqL1xuZnVuY3Rpb24gY29udmVydFZhbGlkYXRpb25FcnJvclRvVHhJbnRlbnRNaXNtYXRjaChcbiAgZXJyb3I6IEFnZ3JlZ2F0ZVZhbGlkYXRpb25FcnJvcixcbiAgcmVxSWQ6IHN0cmluZyB8IElSZXF1ZXN0VHJhY2VyIHwgdW5kZWZpbmVkLFxuICB0eFBhcmFtczogQmFzZVRyYW5zYWN0aW9uUGFyYW1zLFxuICB0eEhleDogc3RyaW5nIHwgdW5kZWZpbmVkLFxuICB0eEV4cGxhbmF0aW9uPzogdW5rbm93blxuKTogVHhJbnRlbnRNaXNtYXRjaFJlY2lwaWVudEVycm9yIHtcbiAgY29uc3QgbWlzbWF0Y2hlZFJlY2lwaWVudHM6IE1pc21hdGNoZWRSZWNpcGllbnRbXSA9IFtdO1xuXG4gIGZvciAoY29uc3QgZXJyIG9mIGVycm9yLmVycm9ycykge1xuICAgIGlmIChlcnIgaW5zdGFuY2VvZiBFcnJvck1pc3NpbmdPdXRwdXRzKSB7XG4gICAgICBtaXNtYXRjaGVkUmVjaXBpZW50cy5wdXNoKFxuICAgICAgICAuLi5lcnIubWlzc2luZ091dHB1dHMubWFwKChvdXRwdXQpID0+ICh7XG4gICAgICAgICAgYWRkcmVzczogb3V0cHV0LmFkZHJlc3MsXG4gICAgICAgICAgYW1vdW50OiBvdXRwdXQuYW1vdW50LnRvU3RyaW5nKCksXG4gICAgICAgIH0pKVxuICAgICAgKTtcbiAgICB9IGVsc2UgaWYgKGVyciBpbnN0YW5jZW9mIEVycm9ySW1wbGljaXRFeHRlcm5hbE91dHB1dHMpIHtcbiAgICAgIG1pc21hdGNoZWRSZWNpcGllbnRzLnB1c2goXG4gICAgICAgIC4uLmVyci5pbXBsaWNpdEV4dGVybmFsT3V0cHV0cy5tYXAoKG91dHB1dCkgPT4gKHtcbiAgICAgICAgICBhZGRyZXNzOiBvdXRwdXQuYWRkcmVzcyxcbiAgICAgICAgICBhbW91bnQ6IG91dHB1dC5hbW91bnQudG9TdHJpbmcoKSxcbiAgICAgICAgfSkpXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIGNvbnN0IHR4SW50ZW50RXJyb3IgPSBuZXcgVHhJbnRlbnRNaXNtYXRjaFJlY2lwaWVudEVycm9yKFxuICAgIGVycm9yLm1lc3NhZ2UsXG4gICAgcmVxSWQsXG4gICAgW3R4UGFyYW1zXSxcbiAgICB0eEhleCxcbiAgICBtaXNtYXRjaGVkUmVjaXBpZW50cyxcbiAgICB0eEV4cGxhbmF0aW9uXG4gICk7XG4gIC8vIFByZXNlcnZlIHRoZSBvcmlnaW5hbCBzdHJ1Y3R1cmVkIGVycm9yIGFzIHRoZSBjYXVzZSBmb3IgZGVidWdnaW5nXG4gIC8vIFNlZTogaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSmF2YVNjcmlwdC9SZWZlcmVuY2UvR2xvYmFsX09iamVjdHMvRXJyb3IvY2F1c2VcbiAgKHR4SW50ZW50RXJyb3IgYXMgRXJyb3IgJiB7IGNhdXNlPzogRXJyb3IgfSkuY2F1c2UgPSBlcnJvcjtcbiAgcmV0dXJuIHR4SW50ZW50RXJyb3I7XG59XG5cbmV4cG9ydCB0eXBlIHsgRGVjb2RlZFRyYW5zYWN0aW9uIH0gZnJvbSAnLi90cmFuc2FjdGlvbi90eXBlcyc7XG5cbmV4cG9ydCB0eXBlIFJvb3RXYWxsZXRLZXlzID0gYml0Z28uUm9vdFdhbGxldEtleXM7XG5cbmV4cG9ydCB0eXBlIFV0eG9Db2luU3BlY2lmaWMgPSBBZGRyZXNzQ29pblNwZWNpZmljIHwgRGVzY3JpcHRvckFkZHJlc3NDb2luU3BlY2lmaWM7XG5cbmV4cG9ydCBpbnRlcmZhY2UgVmVyaWZ5QWRkcmVzc09wdGlvbnM8VENvaW5TcGVjaWZpYyBleHRlbmRzIFV0eG9Db2luU3BlY2lmaWM+IGV4dGVuZHMgQmFzZVZlcmlmeUFkZHJlc3NPcHRpb25zIHtcbiAgY2hhaW4/OiBudW1iZXI7XG4gIGluZGV4OiBudW1iZXI7XG4gIGNvaW5TcGVjaWZpYz86IFRDb2luU3BlY2lmaWM7XG59XG5cbmV4cG9ydCB0eXBlIEJpcDMyMk1lc3NhZ2UgPSB7XG4gIGFkZHJlc3M6IHN0cmluZztcbiAgbWVzc2FnZTogc3RyaW5nO1xufTtcblxuZXhwb3J0IGludGVyZmFjZSBUcmFuc2FjdGlvbkluZm88VE51bWJlciBleHRlbmRzIG51bWJlciB8IGJpZ2ludCA9IG51bWJlcj4ge1xuICAvKiogTWFwcyB0eGlkIHRvIHR4aGV4LiBSZXF1aXJlZCBmb3Igb2ZmbGluZSBzaWduaW5nLiAqL1xuICB0eEhleGVzPzogUmVjb3JkPHN0cmluZywgc3RyaW5nPjtcbiAgY2hhbmdlQWRkcmVzc2VzPzogc3RyaW5nW107XG4gIC8qKiBwc2J0IGRvZXMgbm90IHJlcXVpcmUgdW5zcGVudHMuICovXG4gIHVuc3BlbnRzPzogVW5zcGVudDxUTnVtYmVyPltdO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEV4cGxhaW5UcmFuc2FjdGlvbk9wdGlvbnM8VE51bWJlciBleHRlbmRzIG51bWJlciB8IGJpZ2ludCA9IG51bWJlcj4ge1xuICB0eEhleDogc3RyaW5nO1xuICB0eEluZm8/OiBUcmFuc2FjdGlvbkluZm88VE51bWJlcj47XG4gIGZlZUluZm8/OiBzdHJpbmc7XG4gIHB1YnM/OiBUcmlwbGU8c3RyaW5nPjtcbiAgY3VzdG9tQ2hhbmdlWHB1YnM/OiBUcmlwbGU8c3RyaW5nPjtcbiAgZGVjb2RlV2l0aD86IFNka0JhY2tlbmQ7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRGVjb3JhdGVkRXhwbGFpblRyYW5zYWN0aW9uT3B0aW9uczxUTnVtYmVyIGV4dGVuZHMgbnVtYmVyIHwgYmlnaW50ID0gbnVtYmVyPlxuICBleHRlbmRzIEV4cGxhaW5UcmFuc2FjdGlvbk9wdGlvbnM8VE51bWJlcj4ge1xuICBjaGFuZ2VJbmZvPzogeyBhZGRyZXNzOiBzdHJpbmc7IGNoYWluOiBudW1iZXI7IGluZGV4OiBudW1iZXIgfVtdO1xufVxuXG5leHBvcnQgdHlwZSBVdHhvTmV0d29yayA9IHV0eG9saWIuTmV0d29yaztcblxuZXhwb3J0IGludGVyZmFjZSBUcmFuc2FjdGlvblByZWJ1aWxkPFROdW1iZXIgZXh0ZW5kcyBudW1iZXIgfCBiaWdpbnQgPSBudW1iZXI+IGV4dGVuZHMgQmFzZVRyYW5zYWN0aW9uUHJlYnVpbGQge1xuICB0eEluZm8/OiBUcmFuc2FjdGlvbkluZm88VE51bWJlcj47XG4gIGJsb2NrSGVpZ2h0PzogbnVtYmVyO1xuICBkZWNvZGVXaXRoPzogU2RrQmFja2VuZDtcbiAgLyoqXG4gICAqIFBTQlQtbGl0ZSBoZXggcHJlc2VudCBvbmx5IGluIHBlbmRpbmcgYXBwcm92YWwgZmxvd3MsIHdoZXJlIGFub3RoZXIgdXNlcidzIHNlbmQgZml4ZWQgdGhlIGZvcm1hdC5cbiAgICogTm90IHNldCBpbiByZWd1bGFyIC90eC9idWlsZCByZXNwb25zZXMgKHdoZXJlIHRoZSBjYWxsZXIgY29udHJvbHMgdGhlIGJ1aWxkIHBhcmFtZXRlcnMpLlxuICAgKiBQcmVmZXJyZWQgb3ZlciB0eEhleCB3aGVuIHByZXNlbnQsIGFzIGl0IGNhcnJpZXMgcmljaGVyIGRhdGEgKG5vbldpdG5lc3NVdHhvLCByZWRlZW1TY3JpcHQsIEJJUC0zMiBwYXRocykuXG4gICAqL1xuICB0eEhleFBzYnQ/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgVHJhbnNhY3Rpb25QYXJhbXMgZXh0ZW5kcyBCYXNlVHJhbnNhY3Rpb25QYXJhbXMge1xuICB3YWxsZXRQYXNzcGhyYXNlPzogc3RyaW5nO1xuICBhbGxvd0V4dGVybmFsQ2hhbmdlQWRkcmVzcz86IGJvb2xlYW47XG4gIGNoYW5nZUFkZHJlc3M/OiBzdHJpbmc7XG4gIHJiZlR4SWRzPzogc3RyaW5nW107XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUGFyc2VUcmFuc2FjdGlvbk9wdGlvbnM8VE51bWJlciBleHRlbmRzIG51bWJlciB8IGJpZ2ludCA9IG51bWJlcj4gZXh0ZW5kcyBCYXNlUGFyc2VUcmFuc2FjdGlvbk9wdGlvbnMge1xuICB0eFBhcmFtczogVHJhbnNhY3Rpb25QYXJhbXM7XG4gIHR4UHJlYnVpbGQ6IFRyYW5zYWN0aW9uUHJlYnVpbGQ8VE51bWJlcj47XG4gIHdhbGxldDogVXR4b1dhbGxldDtcbiAgdmVyaWZpY2F0aW9uPzogVmVyaWZpY2F0aW9uT3B0aW9ucztcbiAgcmVxSWQ/OiBJUmVxdWVzdFRyYWNlcjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBHZW5lcmF0ZUFkZHJlc3NPcHRpb25zIHtcbiAgYWRkcmVzc1R5cGU/OiBTY3JpcHRUeXBlMk9mMztcbiAgdGhyZXNob2xkPzogbnVtYmVyO1xuICBjaGFpbj86IG51bWJlcjtcbiAgaW5kZXg/OiBudW1iZXI7XG4gIHNlZ3dpdD86IGJvb2xlYW47XG4gIGJlY2gzMj86IGJvb2xlYW47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgR2VuZXJhdGVGaXhlZFNjcmlwdEFkZHJlc3NPcHRpb25zIGV4dGVuZHMgR2VuZXJhdGVBZGRyZXNzT3B0aW9ucyB7XG4gIGZvcm1hdD86IENyZWF0ZUFkZHJlc3NGb3JtYXQ7XG4gIGtleWNoYWluczoge1xuICAgIHB1Yjogc3RyaW5nO1xuICAgIGFzcEtleUlkPzogc3RyaW5nO1xuICB9W107XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQWRkcmVzc0RldGFpbHMge1xuICBhZGRyZXNzOiBzdHJpbmc7XG4gIGNoYWluOiBudW1iZXI7XG4gIGluZGV4OiBudW1iZXI7XG4gIGNvaW46IHN0cmluZztcbiAgY29pblNwZWNpZmljOiBBZGRyZXNzQ29pblNwZWNpZmljIHwgRGVzY3JpcHRvckFkZHJlc3NDb2luU3BlY2lmaWM7XG4gIGFkZHJlc3NUeXBlPzogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIERlc2NyaXB0b3JBZGRyZXNzQ29pblNwZWNpZmljIGV4dGVuZHMgQWRkcmVzc0NvaW5TcGVjaWZpYyB7XG4gIGRlc2NyaXB0b3JOYW1lOiBzdHJpbmc7XG4gIGRlc2NyaXB0b3JDaGVja3N1bTogc3RyaW5nO1xufVxuXG50eXBlIFV0eG9CYXNlU2lnblRyYW5zYWN0aW9uT3B0aW9uczxUTnVtYmVyIGV4dGVuZHMgbnVtYmVyIHwgYmlnaW50ID0gbnVtYmVyPiA9IEJhc2VTaWduVHJhbnNhY3Rpb25PcHRpb25zICYge1xuICAvKiogVHJhbnNhY3Rpb24gcHJlYnVpbGQgZnJvbSBiaXRnbyBzZXJ2ZXIgKi9cbiAgdHhQcmVidWlsZDoge1xuICAgIC8qKlxuICAgICAqIHdhbGxldElkIGlzIHJlcXVpcmVkIGluIGZvbGxvd2luZyAyIHNjZW5hcmlvcy5cbiAgICAgKiAxLiBFeHRlcm5hbCBzaWduZXIgZXhwcmVzcyBtb2RlIGlzIHVzZWQuXG4gICAgICogMi4gYml0Z28gTXVTaWcyIG5vbmNlIGlzIHJlcXVlc3RlZFxuICAgICAqL1xuICAgIHdhbGxldElkPzogc3RyaW5nO1xuICAgIHR4SGV4OiBzdHJpbmc7XG4gICAgdHhJbmZvPzogVHJhbnNhY3Rpb25JbmZvPFROdW1iZXI+O1xuICAgIGRlY29kZVdpdGg/OiBTZGtCYWNrZW5kO1xuICB9O1xuICAvKiogeHB1YnMgdHJpcGxlIGZvciB3YWxsZXQgKHVzZXIsIGJhY2t1cCwgYml0Z28pLiBSZXF1aXJlZCBvbmx5IHdoZW4gdHhQcmVidWlsZC50eEhleCBpcyBub3QgYSBQU0JUICovXG4gIHB1YnM/OiBUcmlwbGU8c3RyaW5nPjtcbiAgLyoqIHhwdWIgZm9yIGNvc2lnbmVyIChkZWZhdWx0cyB0byBiaXRnbykgKi9cbiAgY29zaWduZXJQdWI/OiBzdHJpbmc7XG4gIC8qKlxuICAgKiBXaGVuIHRydWUsIGNyZWF0ZXMgZnVsbC1zaWduZWQgdHJhbnNhY3Rpb24gd2l0aG91dCBwbGFjZWhvbGRlciBzaWduYXR1cmVzLlxuICAgKiBXaGVuIGZhbHNlLCBjcmVhdGVzIGhhbGYtc2lnbmVkIHRyYW5zYWN0aW9uIHdpdGggcGxhY2Vob2xkZXIgc2lnbmF0dXJlcy5cbiAgICovXG4gIGlzTGFzdFNpZ25hdHVyZT86IGJvb2xlYW47XG4gIC8qKlxuICAgKiBJZiB0cnVlLCBhbGxvd3Mgc2lnbmluZyBhIG5vbi1zZWd3aXQgaW5wdXQgd2l0aCBhIHdpdG5lc3NVdHhvIGluc3RlYWQgcmVxdWlyaW5nIGEgcHJldmlvdXNcbiAgICogdHJhbnNhY3Rpb24gKG5vbldpdG5lc3NVdHhvKVxuICAgKi9cbiAgYWxsb3dOb25TZWd3aXRTaWduaW5nV2l0aG91dFByZXZUeD86IGJvb2xlYW47XG4gIC8qKlxuICAgKiBXaGVuIHRydWUsIHRoZSBzaWduZWQgdHJhbnNhY3Rpb24gd2lsbCBiZSBjb252ZXJ0ZWQgZnJvbSBQU0JUIHRvIGxlZ2FjeSBmb3JtYXQgYmVmb3JlIHJldHVybmluZy5cbiAgICogU2V0IGF1dG9tYXRpY2FsbHkgYnkgcHJlc2lnblRyYW5zYWN0aW9uKCkgd2hlbiB0aGUgY2FsbGVyIGV4cGxpY2l0bHkgcmVxdWVzdGVkIHR4Rm9ybWF0OiAnbGVnYWN5Jy5cbiAgICovXG4gIHJldHVybkxlZ2FjeUZvcm1hdD86IGJvb2xlYW47XG4gIHdhbGxldD86IFV0eG9XYWxsZXQ7XG4gIC8qKlxuICAgKiBXaGVuIHRydWUgKGRlZmF1bHQpLCBleHRyYWN0IGZpbmFsaXplZCBQU0JUIHRvIGxlZ2FjeSB0cmFuc2FjdGlvbiBmb3JtYXQuXG4gICAqIFdoZW4gZmFsc2UsIHJldHVybiBmaW5hbGl6ZWQgUFNCVC4gVXNlZnVsIGZvciB0ZXN0aW5nIHRvIGtlZXAgdHJhbnNhY3Rpb25zIGluIFBTQlQgZm9ybWF0LlxuICAgKi9cbiAgZXh0cmFjdFRyYW5zYWN0aW9uPzogYm9vbGVhbjtcbiAgLyoqIFdoZW4gdHJ1ZSwgZW1iZWRzIFdBU00tVVRYTyB2ZXJzaW9uIG1ldGFkYXRhIGludG8gdGhlIHNpZ25lZCBQU0JULiBEZWZhdWx0cyB0byBmYWxzZS4gKi9cbiAgd3JpdGVTaWduZWRXaXRoPzogYm9vbGVhbjtcbn07XG5cbmV4cG9ydCB0eXBlIFNpZ25UcmFuc2FjdGlvbk9wdGlvbnM8VE51bWJlciBleHRlbmRzIG51bWJlciB8IGJpZ2ludCA9IG51bWJlcj4gPSBVdHhvQmFzZVNpZ25UcmFuc2FjdGlvbk9wdGlvbnM8VE51bWJlcj4gJlxuICAoXG4gICAgfCB7XG4gICAgICAgIHBydjogc3RyaW5nO1xuICAgICAgICBzaWduaW5nU3RlcD86ICdzaWduZXJOb25jZScgfCAnc2lnbmVyU2lnbmF0dXJlJztcbiAgICAgIH1cbiAgICB8IHtcbiAgICAgICAgc2lnbmluZ1N0ZXA6ICdjb3NpZ25lck5vbmNlJztcbiAgICAgIH1cbiAgKTtcblxuZXhwb3J0IGludGVyZmFjZSBNdWx0aVNpZ0FkZHJlc3Mge1xuICBvdXRwdXRTY3JpcHQ6IEJ1ZmZlcjtcbiAgcmVkZWVtU2NyaXB0PzogQnVmZmVyO1xuICB3aXRuZXNzU2NyaXB0PzogQnVmZmVyO1xuICBhZGRyZXNzOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUmVjb3ZlckZyb21Xcm9uZ0NoYWluT3B0aW9ucyB7XG4gIHR4aWQ6IHN0cmluZztcbiAgcmVjb3ZlcnlBZGRyZXNzOiBzdHJpbmc7XG4gIHdhbGxldDogc3RyaW5nO1xuICB3YWxsZXRQYXNzcGhyYXNlPzogc3RyaW5nO1xuICB4cHJ2Pzogc3RyaW5nO1xuICBhcGlLZXk/OiBzdHJpbmc7XG4gIC8qKiBAZGVwcmVjYXRlZCAqL1xuICBjb2luPzogQWJzdHJhY3RVdHhvQ29pbjtcbiAgcmVjb3ZlcnlDb2luPzogQWJzdHJhY3RVdHhvQ29pbjtcbiAgc2lnbmVkPzogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBWZXJpZnlLZXlTaWduYXR1cmVzT3B0aW9ucyB7XG4gIHVzZXJLZXljaGFpbjogeyBwdWI/OiBzdHJpbmcgfTtcbiAga2V5Y2hhaW5Ub1ZlcmlmeTogeyBwdWI/OiBzdHJpbmcgfTtcbiAga2V5U2lnbmF0dXJlOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgVmVyaWZ5VXNlclB1YmxpY0tleU9wdGlvbnMge1xuICB1c2VyS2V5Y2hhaW4/OiBVdHhvS2V5Y2hhaW47XG4gIGRpc2FibGVOZXR3b3JraW5nOiBib29sZWFuO1xuICB0eFBhcmFtczogVHJhbnNhY3Rpb25QYXJhbXM7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgVmVyaWZ5VHJhbnNhY3Rpb25PcHRpb25zPFROdW1iZXIgZXh0ZW5kcyBudW1iZXIgfCBiaWdpbnQgPSBudW1iZXI+XG4gIGV4dGVuZHMgQmFzZVZlcmlmeVRyYW5zYWN0aW9uT3B0aW9ucyB7XG4gIHR4UHJlYnVpbGQ6IFRyYW5zYWN0aW9uUHJlYnVpbGQ8VE51bWJlcj47XG4gIHR4UGFyYW1zOiBUcmFuc2FjdGlvblBhcmFtcztcbiAgd2FsbGV0OiBVdHhvV2FsbGV0O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFNpZ25Qc2J0UmVxdWVzdCB7XG4gIHBzYnQ6IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBTaWduUHNidFJlc3BvbnNlIHtcbiAgcHNidDogc3RyaW5nO1xufVxuXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgQWJzdHJhY3RVdHhvQ29pblxuICBleHRlbmRzIEJhc2VDb2luXG4gIGltcGxlbWVudHMgTXVzaWcyUGFydGljaXBhbnQ8dXR4b2xpYi5iaXRnby5VdHhvUHNidD4sIE11c2lnMlBhcnRpY2lwYW50PGZpeGVkU2NyaXB0V2FsbGV0LkJpdEdvUHNidD5cbntcbiAgYWJzdHJhY3QgbmFtZTogVXR4b0NvaW5OYW1lO1xuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHdoZXRoZXIgdGhpcyBjb2luIGlzIGEgbWFpbm5ldCBjb2luLlxuICAgKiBEZWZhdWx0IGltcGxlbWVudGF0aW9uIHVzZXMgdGhlIG5hbWUgcHJvcGVydHkuXG4gICAqIENhbiBiZSBvdmVycmlkZGVuIGJ5IHN1YmNsYXNzZXMuXG4gICAqL1xuICBwcm90ZWN0ZWQgaXNNYWlubmV0KCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBpc01haW5uZXRDb2luKHRoaXMubmFtZSk7XG4gIH1cblxuICBwdWJsaWMgcmVhZG9ubHkgYW1vdW50VHlwZTogJ251bWJlcicgfCAnYmlnaW50JztcblxuICBwcm90ZWN0ZWQgc3VwcG9ydGVkVHhGb3JtYXRzOiB7IHBzYnQ6IGJvb2xlYW47IGxlZ2FjeTogYm9vbGVhbiB9ID0ge1xuICAgIHBzYnQ6IHRydWUsXG4gICAgbGVnYWN5OiB0aGlzLmdldENoYWluKCkgPT09ICdidGMnLFxuICB9O1xuXG4gIHByb3RlY3RlZCBzdXBwb3J0ZWRTZGtCYWNrZW5kczogeyB1dHhvbGliOiBib29sZWFuOyAnd2FzbS11dHhvJzogYm9vbGVhbiB9ID0ge1xuICAgIHV0eG9saWI6IHRoaXMuZ2V0Q2hhaW4oKSA9PT0gJ2J0YycsXG4gICAgJ3dhc20tdXR4byc6IHRydWUsXG4gIH07XG5cbiAgcHJvdGVjdGVkIGNvbnN0cnVjdG9yKGJpdGdvOiBCaXRHb0Jhc2UsIGFtb3VudFR5cGU6ICdudW1iZXInIHwgJ2JpZ2ludCcgPSAnbnVtYmVyJykge1xuICAgIHN1cGVyKGJpdGdvKTtcbiAgICB0aGlzLmFtb3VudFR5cGUgPSBhbW91bnRUeXBlO1xuICB9XG5cbiAgZGVmYXVsdFNka0JhY2tlbmQ6IFNka0JhY2tlbmQgPSAnd2FzbS11dHhvJztcblxuICAvKipcbiAgICogQGRlcHJlY2F0ZWQgLSB3aWxsIGJlIHJlbW92ZWQgd2hlbiB3ZSBkcm9wIHN1cHBvcnQgZm9yIHV0eG9saWJcbiAgICogVXNlIGBuYW1lYCBwcm9wZXJ0eSBpbnN0ZWFkLlxuICAgKi9cbiAgZ2V0IG5ldHdvcmsoKTogdXR4b2xpYi5OZXR3b3JrIHtcbiAgICByZXR1cm4gZ2V0TmV0d29ya0Zyb21Db2luTmFtZSh0aGlzLm5hbWUpO1xuICB9XG5cbiAgZ2V0Q2hhaW4oKTogVXR4b0NvaW5OYW1lIHtcbiAgICByZXR1cm4gdGhpcy5uYW1lO1xuICB9XG5cbiAgZ2V0RmFtaWx5KCk6IFV0eG9Db2luTmFtZU1haW5uZXQge1xuICAgIHJldHVybiBnZXRNYWlubmV0Q29pbk5hbWUodGhpcy5uYW1lKTtcbiAgfVxuXG4gIGdldEZ1bGxOYW1lKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGdldEZ1bGxOYW1lRnJvbUNvaW5OYW1lKHRoaXMubmFtZSk7XG4gIH1cblxuICAvKiogSW5kaWNhdGVzIHdoZXRoZXIgdGhlIGNvaW4gc3VwcG9ydHMgYSBibG9jayB0YXJnZXQgKi9cbiAgc3VwcG9ydHNCbG9ja1RhcmdldCgpOiBib29sZWFuIHtcbiAgICAvLyBGSVhNRTogdGhlIFNESyBkb2VzIG5vdCBzZWVtIHRvIHVzZSB0aGlzIGFueXdoZXJlIHNvIGl0IGlzIHVuY2xlYXIgd2hhdCB0aGUgcHVycG9zZSBvZiB0aGlzIG1ldGhvZCBpc1xuICAgIHN3aXRjaCAoZ2V0TWFpbm5ldCh0aGlzLm5ldHdvcmspKSB7XG4gICAgICBjYXNlIHV0eG9saWIubmV0d29ya3MuYml0Y29pbjpcbiAgICAgIGNhc2UgdXR4b2xpYi5uZXR3b3Jrcy5kb2dlY29pbjpcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgc3dlZXBXaXRoU2VuZE1hbnkoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICAvKiogQGRlcHJlY2F0ZWQgKi9cbiAgc3RhdGljIGdldCB2YWxpZEFkZHJlc3NUeXBlcygpOiBTY3JpcHRUeXBlMk9mM1tdIHtcbiAgICByZXR1cm4gWy4uLm91dHB1dFNjcmlwdHMuc2NyaXB0VHlwZXMyT2YzXTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBmYWN0b3IgYmV0d2VlbiB0aGUgYmFzZSB1bml0IGFuZCBpdHMgc21hbGxlc3Qgc3ViZGl2aXNvblxuICAgKiBAcmV0dXJuIHtudW1iZXJ9XG4gICAqL1xuICBnZXRCYXNlRmFjdG9yKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIDFlODtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVjayBpZiBhbiBhZGRyZXNzIGlzIHZhbGlkXG4gICAqIEBwYXJhbSBhZGRyZXNzXG4gICAqIEBwYXJhbSBwYXJhbVxuICAgKi9cbiAgaXNWYWxpZEFkZHJlc3MoXG4gICAgYWRkcmVzczogc3RyaW5nLFxuICAgIHBhcmFtPzogeyBhbnlGb3JtYXQ/OiBib29sZWFuOyBhbGxvd0xpZ2h0bmluZz86IGJvb2xlYW4gfSB8IC8qIGxlZ2FjeSBwYXJhbWV0ZXIgKi8gYm9vbGVhblxuICApOiBib29sZWFuIHtcbiAgICBpZiAodHlwZW9mIHBhcmFtID09PSAnYm9vbGVhbicgJiYgcGFyYW0pIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignZGVwcmVjYXRlZCcpO1xuICAgIH1cblxuICAgIGNvbnN0IGFsbG93TGlnaHRuaW5nID0gKHBhcmFtIGFzIHsgYWxsb3dMaWdodG5pbmc/OiBib29sZWFuIH0gfCB1bmRlZmluZWQpPy5hbGxvd0xpZ2h0bmluZyA/PyBmYWxzZTtcbiAgICBpZiAoYWxsb3dMaWdodG5pbmcpIHtcbiAgICAgIGlmICgvXigwMnwwMylbMC05YS1mQS1GXXs2NH0kLy50ZXN0KGFkZHJlc3MpKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgICAgaWYgKGlzQm9sdDExSW52b2ljZShhZGRyZXNzKSkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBCeSBkZWZhdWx0LCBhbGxvdyBhbGwgYWRkcmVzcyBmb3JtYXRzLlxuICAgIC8vIEF0IHRoZSB0aW1lIG9mIHdyaXRpbmcsIHRoZSBvbmx5IGFkZGl0aW9uYWwgYWRkcmVzcyBmb3JtYXQgaXMgYmNoIGNhc2hhZGRyLlxuICAgIGNvbnN0IGFueUZvcm1hdCA9IChwYXJhbSBhcyB7IGFueUZvcm1hdDogYm9vbGVhbiB9IHwgdW5kZWZpbmVkKT8uYW55Rm9ybWF0ID8/IHRydWU7XG4gICAgdHJ5IHtcbiAgICAgIC8vIEZpbmQgb3V0IGlmIHRoZSBhZGRyZXNzIGlzIHZhbGlkIGZvciBhbnkgZm9ybWF0LiBUcmllcyBhbGwgc3VwcG9ydGVkIGZvcm1hdHMgYnkgZGVmYXVsdC5cbiAgICAgIC8vIFRocm93cyBpZiBhZGRyZXNzIGNhbm5vdCBiZSBkZWNvZGVkIHdpdGggYW55IGZvcm1hdC5cbiAgICAgIGNvbnN0IFtmb3JtYXQsIHNjcmlwdF0gPSB1dHhvbGliLmFkZHJlc3NGb3JtYXQudG9PdXRwdXRTY3JpcHRBbmRGb3JtYXQoYWRkcmVzcywgdGhpcy5uZXR3b3JrKTtcbiAgICAgIC8vIHVubGVzcyBhbnlGb3JtYXQgaXMgc2V0LCBvbmx5ICdkZWZhdWx0JyBpcyBhbGxvd2VkLlxuICAgICAgaWYgKCFhbnlGb3JtYXQgJiYgZm9ybWF0ICE9PSAnZGVmYXVsdCcpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgICAgLy8gbWFrZSBzdXJlIHRoYXQgYWRkcmVzcyBpcyBpbiBub3JtYWwgcmVwcmVzZW50YXRpb24gZm9yIGdpdmVuIGZvcm1hdC5cbiAgICAgIHJldHVybiBhZGRyZXNzID09PSB1dHhvbGliLmFkZHJlc3NGb3JtYXQuZnJvbU91dHB1dFNjcmlwdFdpdGhGb3JtYXQoc2NyaXB0LCBmb3JtYXQsIHRoaXMubmV0d29yayk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm4gYm9vbGVhbiBpbmRpY2F0aW5nIHdoZXRoZXIgaW5wdXQgaXMgdmFsaWQgcHVibGljIGtleSBmb3IgdGhlIGNvaW4uXG4gICAqXG4gICAqIEBwYXJhbSB7U3RyaW5nfSBwdWIgdGhlIHB1YiB0byBiZSBjaGVja2VkXG4gICAqIEByZXR1cm5zIHtCb29sZWFufSBpcyBpdCB2YWxpZD9cbiAgICovXG4gIGlzVmFsaWRQdWIocHViOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIEJJUDMyLmZyb21CYXNlNTgocHViKS5pc05ldXRlcmVkKCk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBUaGlzIGlzIGNhbGxlZCBiZWZvcmUgY3JhZnRpbmcgdGhlIEhUVFAgcmVxdWVzdCB0byB0aGUgQml0R28gQVBJLlxuICAgKiBJdCBjb252ZXJ0cyB0aGUgcmVjaXBpZW50IGFkZHJlc3MgYHNjcmlwdFB1YktleTouLi5gIHRvIHsgc2NyaXB0OiBzdHJpbmcgfSB8IHsgYWRkcmVzczogc3RyaW5nIH0uXG4gICAqL1xuICBvdmVycmlkZSBwcmVwcm9jZXNzQnVpbGRQYXJhbXMocGFyYW1zOiBSZWNvcmQ8c3RyaW5nLCBhbnk+KTogUmVjb3JkPHN0cmluZywgYW55PiB7XG4gICAgaWYgKHBhcmFtcy5yZWNpcGllbnRzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHBhcmFtcy5yZWNpcGllbnRzID1cbiAgICAgICAgcGFyYW1zLnJlY2lwaWVudHMgaW5zdGFuY2VvZiBBcnJheVxuICAgICAgICAgID8gcGFyYW1zPy5yZWNpcGllbnRzPy5tYXAoKHJlY2lwaWVudCkgPT4ge1xuICAgICAgICAgICAgICBjb25zdCB7IGFkZHJlc3MsIC4uLnJlc3QgfSA9IHJlY2lwaWVudDtcbiAgICAgICAgICAgICAgaWYgKGFkZHJlc3MgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIHJldHVybiByZWNpcGllbnQ7IC8vIEFscmVhZHkgeyBzY3JpcHQsIGFtb3VudCB9IOKAlCBwYXNzIHRocm91Z2ggdW5jaGFuZ2VkXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgcmV0dXJuIHsgLi4ucmVzdCwgLi4uZnJvbUV4dGVuZGVkQWRkcmVzc0Zvcm1hdChhZGRyZXNzKSB9O1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICA6IHBhcmFtcy5yZWNpcGllbnRzO1xuICAgIH1cblxuICAgIHJldHVybiBwYXJhbXM7XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSBsYXRlc3QgYmxvY2sgaGVpZ2h0XG4gICAqIEBwYXJhbSByZXFJZFxuICAgKi9cbiAgYXN5bmMgZ2V0TGF0ZXN0QmxvY2tIZWlnaHQocmVxSWQ/OiBSZXF1ZXN0VHJhY2VyKTogUHJvbWlzZTxudW1iZXI+IHtcbiAgICBpZiAocmVxSWQpIHtcbiAgICAgIHRoaXMuYml0Z28uc2V0UmVxdWVzdFRyYWNlcihyZXFJZCk7XG4gICAgfVxuICAgIGNvbnN0IGNoYWluaGVhZCA9IGF3YWl0IHRoaXMuYml0Z28uZ2V0KHRoaXMudXJsKCcvcHVibGljL2Jsb2NrL2xhdGVzdCcpKS5yZXN1bHQoKTtcbiAgICByZXR1cm4gKGNoYWluaGVhZCBhcyBhbnkpLmhlaWdodDtcbiAgfVxuXG4gIGNoZWNrUmVjaXBpZW50KHJlY2lwaWVudDogeyBhZGRyZXNzPzogc3RyaW5nOyBhbW91bnQ6IG51bWJlciB8IHN0cmluZyB9KTogdm9pZCB7XG4gICAgYXNzZXJ0VmFsaWRUcmFuc2FjdGlvblJlY2lwaWVudChyZWNpcGllbnQpO1xuICAgIGlmIChyZWNpcGllbnQuYWRkcmVzcyAmJiAhaXNTY3JpcHRSZWNpcGllbnQocmVjaXBpZW50LmFkZHJlc3MpKSB7XG4gICAgICBzdXBlci5jaGVja1JlY2lwaWVudCh7IGFkZHJlc3M6IHJlY2lwaWVudC5hZGRyZXNzLCBhbW91bnQ6IHJlY2lwaWVudC5hbW91bnQgfSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJ1biBjdXN0b20gY29pbiBsb2dpYyBhZnRlciBhIHRyYW5zYWN0aW9uIHByZWJ1aWxkIGhhcyBiZWVuIHJlY2VpdmVkIGZyb20gQml0R29cbiAgICogQHBhcmFtIHByZWJ1aWxkXG4gICAqL1xuICBhc3luYyBwb3N0UHJvY2Vzc1ByZWJ1aWxkPFROdW1iZXIgZXh0ZW5kcyBudW1iZXIgfCBiaWdpbnQ+KFxuICAgIHByZWJ1aWxkOiBUcmFuc2FjdGlvblByZWJ1aWxkPFROdW1iZXI+XG4gICk6IFByb21pc2U8VHJhbnNhY3Rpb25QcmVidWlsZDxUTnVtYmVyPj4ge1xuICAgIGNvbnN0IHR4ID0gdGhpcy5kZWNvZGVUcmFuc2FjdGlvbkZyb21QcmVidWlsZChwcmVidWlsZCk7XG4gICAgaWYgKF8uaXNVbmRlZmluZWQocHJlYnVpbGQuYmxvY2tIZWlnaHQpKSB7XG4gICAgICBwcmVidWlsZC5ibG9ja0hlaWdodCA9IChhd2FpdCB0aGlzLmdldExhdGVzdEJsb2NrSGVpZ2h0KCkpIGFzIG51bWJlcjtcbiAgICB9XG4gICAgcmV0dXJuIF8uZXh0ZW5kKHt9LCBwcmVidWlsZCwgeyB0eEhleDogZW5jb2RlVHJhbnNhY3Rpb24odHgpLnRvU3RyaW5nKCdoZXgnKSB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVwcmVjYXRlZCAtIHdpbGwgYmUgcmVtb3ZlZCB3aGVuIHdlIGRyb3Agc3VwcG9ydCBmb3IgdXR4b2xpYlxuICAgKiBEZXRlcm1pbmUgYW4gYWRkcmVzcycgdHlwZSBiYXNlZCBvbiBpdHMgd2l0bmVzcyBhbmQgcmVkZWVtIHNjcmlwdCBwcmVzZW5jZVxuICAgKiBAcGFyYW0gYWRkcmVzc0RldGFpbHNcbiAgICovXG4gIHN0YXRpYyBpbmZlckFkZHJlc3NUeXBlKGFkZHJlc3NEZXRhaWxzOiB7IGNoYWluOiBudW1iZXIgfSk6IFNjcmlwdFR5cGUyT2YzIHwgbnVsbCB7XG4gICAgcmV0dXJuIGlzQ2hhaW5Db2RlKGFkZHJlc3NEZXRhaWxzLmNoYWluKSA/IHNjcmlwdFR5cGVGb3JDaGFpbihhZGRyZXNzRGV0YWlscy5jaGFpbikgOiBudWxsO1xuICB9XG5cbiAgY3JlYXRlVHJhbnNhY3Rpb25Gcm9tSGV4PFROdW1iZXIgZXh0ZW5kcyBudW1iZXIgfCBiaWdpbnQgPSBudW1iZXI+KFxuICAgIGhleDogc3RyaW5nXG4gICk6IHV0eG9saWIuYml0Z28uVXR4b1RyYW5zYWN0aW9uPFROdW1iZXI+IHtcbiAgICByZXR1cm4gdXR4b2xpYi5iaXRnby5jcmVhdGVUcmFuc2FjdGlvbkZyb21IZXg8VE51bWJlcj4oaGV4LCB0aGlzLm5ldHdvcmssIHRoaXMuYW1vdW50VHlwZSk7XG4gIH1cblxuICBkZWNvZGVUcmFuc2FjdGlvbjxUTnVtYmVyIGV4dGVuZHMgbnVtYmVyIHwgYmlnaW50PihcbiAgICBpbnB1dDogQnVmZmVyIHwgc3RyaW5nLFxuICAgIGRlY29kZVdpdGg6IFNka0JhY2tlbmQgPSB0aGlzLmRlZmF1bHRTZGtCYWNrZW5kXG4gICk6IERlY29kZWRUcmFuc2FjdGlvbjxUTnVtYmVyPiB7XG4gICAgaWYgKHR5cGVvZiBpbnB1dCA9PT0gJ3N0cmluZycpIHtcbiAgICAgIGNvbnN0IGJ1ZmZlciA9IHN0cmluZ1RvQnVmZmVyVHJ5Rm9ybWF0cyhpbnB1dCwgWydoZXgnLCAnYmFzZTY0J10pO1xuICAgICAgcmV0dXJuIHRoaXMuZGVjb2RlVHJhbnNhY3Rpb24oYnVmZmVyLCBkZWNvZGVXaXRoKTtcbiAgICB9XG5cbiAgICBpZiAodXR4b2xpYi5iaXRnby5pc1BzYnQoaW5wdXQpKSB7XG4gICAgICBpZiAodGhpcy5zdXBwb3J0ZWRTZGtCYWNrZW5kc1tkZWNvZGVXaXRoXSAhPT0gdHJ1ZSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFNESyBzdXBwb3J0IGZvciBkZWNvZGVXaXRoPSR7ZGVjb2RlV2l0aH0gaXMgbm90IGF2YWlsYWJsZSBvbiB0aGlzIGVudmlyb25tZW50LmApO1xuICAgICAgfVxuXG4gICAgICBpZiAoIXRoaXMuc3VwcG9ydGVkVHhGb3JtYXRzLnBzYnQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yRGVwcmVjYXRlZFR4Rm9ybWF0KCdwc2J0Jyk7XG4gICAgICB9XG4gICAgICByZXR1cm4gZGVjb2RlUHNidFdpdGgoaW5wdXQsIHRoaXMubmFtZSwgZGVjb2RlV2l0aCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIExlZ2FjeSBmb3JtYXQgdHJhbnNhY3Rpb25zIGFyZSBkZXByZWNhdGVkLiBUaGlzIHdpbGwgYmUgYW4gdW5jb25kaXRpb25hbCBlcnJvciBpbiB0aGUgZnV0dXJlLlxuICAgICAgaWYgKCF0aGlzLnN1cHBvcnRlZFR4Rm9ybWF0cy5sZWdhY3kpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yRGVwcmVjYXRlZFR4Rm9ybWF0KCdsZWdhY3knKTtcbiAgICAgIH1cbiAgICAgIGlmIChkZWNvZGVXaXRoICE9PSAndXR4b2xpYicpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcigncmVjZWl2ZWQgZGVjb2RlV2l0aCBoaW50ICVzLCBpZ25vcmluZyBmb3IgbGVnYWN5IHRyYW5zYWN0aW9uJywgZGVjb2RlV2l0aCk7XG4gICAgICB9XG4gICAgICByZXR1cm4gdXR4b2xpYi5iaXRnby5jcmVhdGVUcmFuc2FjdGlvbkZyb21CdWZmZXIoaW5wdXQsIHRoaXMubmV0d29yaywge1xuICAgICAgICBhbW91bnRUeXBlOiB0aGlzLmFtb3VudFR5cGUsXG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBkZWNvZGVUcmFuc2FjdGlvbkFzUHNidChpbnB1dDogQnVmZmVyIHwgc3RyaW5nKTogdXR4b2xpYi5iaXRnby5VdHhvUHNidCB8IGZpeGVkU2NyaXB0V2FsbGV0LkJpdEdvUHNidCB7XG4gICAgY29uc3QgZGVjb2RlZCA9IHRoaXMuZGVjb2RlVHJhbnNhY3Rpb24oaW5wdXQpO1xuICAgIGlmIChkZWNvZGVkIGluc3RhbmNlb2YgZml4ZWRTY3JpcHRXYWxsZXQuQml0R29Qc2J0IHx8IGRlY29kZWQgaW5zdGFuY2VvZiB1dHhvbGliLmJpdGdvLlV0eG9Qc2J0KSB7XG4gICAgICByZXR1cm4gZGVjb2RlZDtcbiAgICB9XG4gICAgdGhyb3cgbmV3IEVycm9yKCdleHBlY3RlZCBwc2J0IGJ1dCBnb3QgdHJhbnNhY3Rpb24nKTtcbiAgfVxuXG4gIGRlY29kZVRyYW5zYWN0aW9uRnJvbVByZWJ1aWxkPFROdW1iZXIgZXh0ZW5kcyBudW1iZXIgfCBiaWdpbnQ+KHByZWJ1aWxkOiB7XG4gICAgdHhIZXg/OiBzdHJpbmc7XG4gICAgdHhCYXNlNjQ/OiBzdHJpbmc7XG4gICAgLyoqIFNlZSBUcmFuc2FjdGlvblByZWJ1aWxkLnR4SGV4UHNidCDigJQgb25seSBwcmVzZW50IGluIHBlbmRpbmcgYXBwcm92YWwgZmxvd3MuICovXG4gICAgdHhIZXhQc2J0Pzogc3RyaW5nO1xuICAgIGRlY29kZVdpdGg/OiBzdHJpbmc7XG4gIH0pOiBEZWNvZGVkVHJhbnNhY3Rpb248VE51bWJlcj4ge1xuICAgIGNvbnN0IHN0cmluZyA9IHByZWJ1aWxkLnR4SGV4UHNidCA/PyBwcmVidWlsZC50eEhleCA/PyBwcmVidWlsZC50eEJhc2U2NDtcbiAgICBpZiAoIXN0cmluZykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdtaXNzaW5nIHJlcXVpcmVkIHR4SGV4IG9yIHR4QmFzZTY0IHByb3BlcnR5Jyk7XG4gICAgfVxuICAgIGxldCB7IGRlY29kZVdpdGggfSA9IHByZWJ1aWxkO1xuICAgIGlmIChkZWNvZGVXaXRoICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGlmICh0eXBlb2YgZGVjb2RlV2l0aCAhPT0gJ3N0cmluZycgfHwgIWlzU2RrQmFja2VuZChkZWNvZGVXaXRoKSkge1xuICAgICAgICBjb25zb2xlLmVycm9yKCdkZWNvZGVXaXRoICVzIGlzIG5vdCBhIHZhbGlkIHZhbHVlLCB1c2luZyBkZWZhdWx0JywgZGVjb2RlV2l0aCk7XG4gICAgICAgIGRlY29kZVdpdGggPSB1bmRlZmluZWQ7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmRlY29kZVRyYW5zYWN0aW9uKHN0cmluZywgZGVjb2RlV2l0aCk7XG4gIH1cblxuICAvKipcbiAgICogRXh0cmFjdCBhbmQgZmlsbCB0cmFuc2FjdGlvbiBkZXRhaWxzIHN1Y2ggYXMgaW50ZXJuYWwvY2hhbmdlIHNwZW5kLCBleHRlcm5hbCBzcGVuZCAoZXhwbGljaXQgdnMuIGltcGxpY2l0KSwgZXRjLlxuICAgKiBAcGFyYW0gcGFyYW1zXG4gICAqIEByZXR1cm5zIHsqfVxuICAgKi9cbiAgYXN5bmMgcGFyc2VUcmFuc2FjdGlvbjxUTnVtYmVyIGV4dGVuZHMgbnVtYmVyIHwgYmlnaW50ID0gbnVtYmVyPihcbiAgICBwYXJhbXM6IFBhcnNlVHJhbnNhY3Rpb25PcHRpb25zPFROdW1iZXI+XG4gICk6IFByb21pc2U8UGFyc2VkVHJhbnNhY3Rpb248VE51bWJlcj4+IHtcbiAgICByZXR1cm4gcGFyc2VUcmFuc2FjdGlvbih0aGlzLCBwYXJhbXMpO1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXByZWNhdGVkIC0gdXNlIGZ1bmN0aW9uIHZlcmlmeVVzZXJQdWJsaWNLZXkgaW5zdGVhZFxuICAgKi9cbiAgcHJvdGVjdGVkIHZlcmlmeVVzZXJQdWJsaWNLZXkocGFyYW1zOiBWZXJpZnlVc2VyUHVibGljS2V5T3B0aW9ucyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB2ZXJpZnlVc2VyUHVibGljS2V5KHRoaXMuYml0Z28sIHBhcmFtcyk7XG4gIH1cblxuICAvKipcbiAgICogQGRlcHJlY2F0ZWQgLSB1c2UgZnVuY3Rpb24gdmVyaWZ5S2V5U2lnbmF0dXJlIGluc3RlYWRcbiAgICovXG4gIHB1YmxpYyB2ZXJpZnlLZXlTaWduYXR1cmUocGFyYW1zOiBWZXJpZnlLZXlTaWduYXR1cmVzT3B0aW9ucyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB2ZXJpZnlLZXlTaWduYXR1cmUocGFyYW1zKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBWZXJpZnkgdGhhdCBhIHRyYW5zYWN0aW9uIHByZWJ1aWxkIGNvbXBsaWVzIHdpdGggdGhlIG9yaWdpbmFsIGludGVudGlvblxuICAgKlxuICAgKiBAcGFyYW0gcGFyYW1zXG4gICAqIEBwYXJhbSBwYXJhbXMudHhQYXJhbXMgcGFyYW1zIG9iamVjdCBwYXNzZWQgdG8gc2VuZFxuICAgKiBAcGFyYW0gcGFyYW1zLnR4UHJlYnVpbGQgcHJlYnVpbGQgb2JqZWN0IHJldHVybmVkIGJ5IHNlcnZlclxuICAgKiBAcGFyYW0gcGFyYW1zLnR4UHJlYnVpbGQudHhIZXggcHJlYnVpbHQgdHJhbnNhY3Rpb24ncyB0eEhleCBmb3JtXG4gICAqIEBwYXJhbSBwYXJhbXMud2FsbGV0IFdhbGxldCBvYmplY3QgdG8gb2J0YWluIGtleXMgdG8gdmVyaWZ5IGFnYWluc3RcbiAgICogQHBhcmFtIHBhcmFtcy52ZXJpZmljYXRpb24gT2JqZWN0IHNwZWNpZnlpbmcgc29tZSB2ZXJpZmljYXRpb24gcGFyYW1ldGVyc1xuICAgKiBAcGFyYW0gcGFyYW1zLnZlcmlmaWNhdGlvbi5kaXNhYmxlTmV0d29ya2luZyBEaXNhbGxvdyBmZXRjaGluZyBhbnkgZGF0YSBmcm9tIHRoZSBpbnRlcm5ldCBmb3IgdmVyaWZpY2F0aW9uIHB1cnBvc2VzXG4gICAqIEBwYXJhbSBwYXJhbXMudmVyaWZpY2F0aW9uLmtleWNoYWlucyBQYXNzIGtleWNoYWlucyBtYW51YWxseSByYXRoZXIgdGhhbiBmZXRjaGluZyB0aGVtIGJ5IGlkXG4gICAqIEBwYXJhbSBwYXJhbXMudmVyaWZpY2F0aW9uLmFkZHJlc3NlcyBBZGRyZXNzIGRldGFpbHMgdG8gcGFzcyBpbiBmb3Igb3V0LW9mLWJhbmQgdmVyaWZpY2F0aW9uXG4gICAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZlcmlmaWNhdGlvbiBwYXNzZXNcbiAgICogQHRocm93cyB7VHhJbnRlbnRNaXNtYXRjaEVycm9yfSBpZiB0cmFuc2FjdGlvbiB2YWxpZGF0aW9uIGZhaWxzXG4gICAqIEB0aHJvd3Mge1R4SW50ZW50TWlzbWF0Y2hSZWNpcGllbnRFcnJvcn0gaWYgdHJhbnNhY3Rpb24gcmVjaXBpZW50cyBkb24ndCBtYXRjaCB1c2VyIGludGVudFxuICAgKi9cbiAgYXN5bmMgdmVyaWZ5VHJhbnNhY3Rpb248VE51bWJlciBleHRlbmRzIG51bWJlciB8IGJpZ2ludCA9IG51bWJlcj4oXG4gICAgcGFyYW1zOiBWZXJpZnlUcmFuc2FjdGlvbk9wdGlvbnM8VE51bWJlcj5cbiAgKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBhd2FpdCB2ZXJpZnlUcmFuc2FjdGlvbih0aGlzLCB0aGlzLmJpdGdvLCBwYXJhbXMpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBBZ2dyZWdhdGVWYWxpZGF0aW9uRXJyb3IpIHtcbiAgICAgICAgY29uc3QgdHhFeHBsYW5hdGlvbiA9IGF3YWl0IFR4SW50ZW50TWlzbWF0Y2hFcnJvci50cnlHZXRUeEV4cGxhbmF0aW9uKFxuICAgICAgICAgIHRoaXMgYXMgdW5rbm93biBhcyBJQmFzZUNvaW4sXG4gICAgICAgICAgcGFyYW1zLnR4UHJlYnVpbGRcbiAgICAgICAgKTtcbiAgICAgICAgdGhyb3cgY29udmVydFZhbGlkYXRpb25FcnJvclRvVHhJbnRlbnRNaXNtYXRjaChcbiAgICAgICAgICBlcnJvcixcbiAgICAgICAgICBwYXJhbXMucmVxSWQsXG4gICAgICAgICAgcGFyYW1zLnR4UGFyYW1zLFxuICAgICAgICAgIHBhcmFtcy50eFByZWJ1aWxkLnR4SGV4LFxuICAgICAgICAgIHR4RXhwbGFuYXRpb25cbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIHRocm93IGVycm9yO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBNYWtlIHN1cmUgYW4gYWRkcmVzcyBpcyB2YWxpZCBhbmQgdGhyb3cgYW4gZXJyb3IgaWYgaXQncyBub3QuXG4gICAqIEBwYXJhbSBwYXJhbXMuYWRkcmVzcyBUaGUgYWRkcmVzcyBzdHJpbmcgb24gdGhlIG5ldHdvcmtcbiAgICogQHBhcmFtIHBhcmFtcy5hZGRyZXNzVHlwZVxuICAgKiBAcGFyYW0gcGFyYW1zLmtleWNoYWlucyBLZXljaGFpbiBvYmplY3RzIHdpdGggeHB1YnNcbiAgICogQHBhcmFtIHBhcmFtcy5jb2luU3BlY2lmaWMgQ29pbi1zcGVjaWZpYyBkZXRhaWxzIGZvciB0aGUgYWRkcmVzcyBzdWNoIGFzIGEgd2l0bmVzcyBzY3JpcHRcbiAgICogQHBhcmFtIHBhcmFtcy5jaGFpbiBEZXJpdmF0aW9uIGNoYWluXG4gICAqIEBwYXJhbSBwYXJhbXMuaW5kZXggRGVyaXZhdGlvbiBpbmRleFxuICAgKiBAdGhyb3dzIHtJbnZhbGlkQWRkcmVzc0Vycm9yfVxuICAgKiBAdGhyb3dzIHtJbnZhbGlkQWRkcmVzc0Rlcml2YXRpb25Qcm9wZXJ0eUVycm9yfVxuICAgKiBAdGhyb3dzIHtVbmV4cGVjdGVkQWRkcmVzc0Vycm9yfVxuICAgKi9cbiAgYXN5bmMgaXNXYWxsZXRBZGRyZXNzKHBhcmFtczogVmVyaWZ5QWRkcmVzc09wdGlvbnM8VXR4b0NvaW5TcGVjaWZpYz4sIHdhbGxldD86IElXYWxsZXQpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBjb25zdCB7IGFkZHJlc3MsIGtleWNoYWlucywgY2hhaW4sIGluZGV4IH0gPSBwYXJhbXM7XG5cbiAgICBpZiAoIXRoaXMuaXNWYWxpZEFkZHJlc3MoYWRkcmVzcykpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQWRkcmVzc0Vycm9yKGBpbnZhbGlkIGFkZHJlc3M6ICR7YWRkcmVzc31gKTtcbiAgICB9XG5cbiAgICBpZiAod2FsbGV0ICYmIGlzRGVzY3JpcHRvcldhbGxldCh3YWxsZXQpKSB7XG4gICAgICBpZiAoIWtleWNoYWlucykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ21pc3NpbmcgcmVxdWlyZWQgcGFyYW0ga2V5Y2hhaW5zJyk7XG4gICAgICB9XG4gICAgICBpZiAoIWlzVHJpcGxlKGtleWNoYWlucykpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdrZXljaGFpbnMgbXVzdCBiZSBhIHRyaXBsZScpO1xuICAgICAgfVxuICAgICAgYXNzZXJ0RGVzY3JpcHRvcldhbGxldEFkZHJlc3MoXG4gICAgICAgIHRoaXMubmFtZSxcbiAgICAgICAgcGFyYW1zLFxuICAgICAgICBnZXREZXNjcmlwdG9yTWFwRnJvbVdhbGxldCh3YWxsZXQsIHRvQmlwMzJUcmlwbGUoa2V5Y2hhaW5zKSwgZ2V0UG9saWN5Rm9yRW52KHRoaXMuYml0Z28uZW52KSlcbiAgICAgICk7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBpZiAoKF8uaXNVbmRlZmluZWQoY2hhaW4pICYmIF8uaXNVbmRlZmluZWQoaW5kZXgpKSB8fCAhKF8uaXNGaW5pdGUoY2hhaW4pICYmIF8uaXNGaW5pdGUoaW5kZXgpKSkge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBZGRyZXNzRGVyaXZhdGlvblByb3BlcnR5RXJyb3IoXG4gICAgICAgIGBhZGRyZXNzIHZhbGlkYXRpb24gZmFpbHVyZTogaW52YWxpZCBjaGFpbiAoJHtjaGFpbn0pIG9yIGluZGV4ICgke2luZGV4fSlgXG4gICAgICApO1xuICAgIH1cblxuICAgIGlmICgha2V5Y2hhaW5zKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ21pc3NpbmcgcmVxdWlyZWQgcGFyYW0ga2V5Y2hhaW5zJyk7XG4gICAgfVxuXG4gICAgYXNzZXJ0Rml4ZWRTY3JpcHRXYWxsZXRBZGRyZXNzKHRoaXMubmFtZSwge1xuICAgICAgYWRkcmVzcyxcbiAgICAgIGtleWNoYWlucyxcbiAgICAgIGZvcm1hdDogcGFyYW1zLmZvcm1hdCA/PyAnYmFzZTU4JyxcbiAgICAgIGNoYWluLFxuICAgICAgaW5kZXgsXG4gICAgfSk7XG5cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0gYWRkcmVzc1R5cGVcbiAgICogQHJldHVybnMgdHJ1ZSBpZmYgY29pbiBzdXBwb3J0cyBzcGVuZGluZyBmcm9tIHVuc3BlbnRUeXBlXG4gICAqL1xuICBzdXBwb3J0c0FkZHJlc3NUeXBlKGFkZHJlc3NUeXBlOiBTY3JpcHRUeXBlMk9mMyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB1dHhvbGliLmJpdGdvLm91dHB1dFNjcmlwdHMuaXNTdXBwb3J0ZWRTY3JpcHRUeXBlKHRoaXMubmV0d29yaywgYWRkcmVzc1R5cGUpO1xuICB9XG5cbiAgLyoqIGluaGVyaXRlZCBkb2MgKi9cbiAgZ2V0RGVmYXVsdE11bHRpc2lnVHlwZSgpOiBNdWx0aXNpZ1R5cGUge1xuICAgIHJldHVybiBtdWx0aXNpZ1R5cGVzLm9uY2hhaW47XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIGNoYWluXG4gICAqIEByZXR1cm4gdHJ1ZSBpZmYgY29pbiBzdXBwb3J0cyBzcGVuZGluZyBmcm9tIGNoYWluXG4gICAqL1xuICBzdXBwb3J0c0FkZHJlc3NDaGFpbihjaGFpbjogbnVtYmVyKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIGlzQ2hhaW5Db2RlKGNoYWluKSAmJiB0aGlzLnN1cHBvcnRzQWRkcmVzc1R5cGUodXR4b2xpYi5iaXRnby5zY3JpcHRUeXBlRm9yQ2hhaW4oY2hhaW4pKTtcbiAgfVxuXG4gIGtleUlkc0ZvclNpZ25pbmcoKTogbnVtYmVyW10ge1xuICAgIHJldHVybiBbS2V5SW5kaWNlcy5VU0VSLCBLZXlJbmRpY2VzLkJBQ0tVUCwgS2V5SW5kaWNlcy5CSVRHT107XG4gIH1cblxuICAvKipcbiAgICogQHJldHVybnMgaW5wdXQgcHNidCBhZGRlZCB3aXRoIGRldGVybWluaXN0aWMgTXVTaWcyIG5vbmNlIGZvciBiaXRnbyBrZXkgZm9yIGVhY2ggTXVTaWcyIGlucHV0cy5cbiAgICogQHBhcmFtIHBzYnQgYWxsIE11U2lnMiBpbnB1dHMgc2hvdWxkIGNvbnRhaW4gdXNlciBNdVNpZzIgbm9uY2VcbiAgICogQHBhcmFtIHdhbGxldElkXG4gICAqL1xuICBhc3luYyBnZXRNdXNpZzJOb25jZXMocHNidDogdXR4b2xpYi5iaXRnby5VdHhvUHNidCwgd2FsbGV0SWQ6IHN0cmluZyk6IFByb21pc2U8dXR4b2xpYi5iaXRnby5VdHhvUHNidD47XG4gIGFzeW5jIGdldE11c2lnMk5vbmNlcyhwc2J0OiBmaXhlZFNjcmlwdFdhbGxldC5CaXRHb1BzYnQsIHdhbGxldElkOiBzdHJpbmcpOiBQcm9taXNlPGZpeGVkU2NyaXB0V2FsbGV0LkJpdEdvUHNidD47XG4gIGFzeW5jIGdldE11c2lnMk5vbmNlczxUIGV4dGVuZHMgdXR4b2xpYi5iaXRnby5VdHhvUHNidCB8IGZpeGVkU2NyaXB0V2FsbGV0LkJpdEdvUHNidD4oXG4gICAgcHNidDogVCxcbiAgICB3YWxsZXRJZDogc3RyaW5nXG4gICk6IFByb21pc2U8VD47XG4gIGFzeW5jIGdldE11c2lnMk5vbmNlczxUIGV4dGVuZHMgdXR4b2xpYi5iaXRnby5VdHhvUHNidCB8IGZpeGVkU2NyaXB0V2FsbGV0LkJpdEdvUHNidD4oXG4gICAgcHNidDogVCxcbiAgICB3YWxsZXRJZDogc3RyaW5nXG4gICk6IFByb21pc2U8VD4ge1xuICAgIGNvbnN0IGJ1ZmZlciA9IGVuY29kZVRyYW5zYWN0aW9uKHBzYnQpO1xuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5iaXRnb1xuICAgICAgLnBvc3QodGhpcy51cmwoJy93YWxsZXQvJyArIHdhbGxldElkICsgJy90eC9zaWducHNidCcpKVxuICAgICAgLnNlbmQoeyBwc2J0OiBidWZmZXIudG9TdHJpbmcoJ2hleCcpIH0pXG4gICAgICAucmVzdWx0KCk7XG4gICAgaWYgKHBzYnQgaW5zdGFuY2VvZiB1dHhvbGliLmJpdGdvLlV0eG9Qc2J0KSB7XG4gICAgICByZXR1cm4gZGVjb2RlUHNidFdpdGgocmVzcG9uc2UucHNidCwgdGhpcy5uYW1lLCAndXR4b2xpYicpIGFzIFQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBkZWNvZGVQc2J0V2l0aChyZXNwb25zZS5wc2J0LCB0aGlzLm5hbWUsICd3YXNtLXV0eG8nKSBhcyBUO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVwcmVjYXRlZCBVc2UgZ2V0TXVzaWcyTm9uY2VzIGluc3RlYWRcbiAgICogQHJldHVybnMgaW5wdXQgcHNidCBhZGRlZCB3aXRoIGRldGVybWluaXN0aWMgTXVTaWcyIG5vbmNlIGZvciBiaXRnbyBrZXkgZm9yIGVhY2ggTXVTaWcyIGlucHV0cy5cbiAgICogQHBhcmFtIHBzYnRIZXggYWxsIE11U2lnMiBpbnB1dHMgc2hvdWxkIGNvbnRhaW4gdXNlciBNdVNpZzIgbm9uY2VcbiAgICogQHBhcmFtIHdhbGxldElkXG4gICAqL1xuICBhc3luYyBzaWduUHNidChwc2J0SGV4OiBzdHJpbmcsIHdhbGxldElkOiBzdHJpbmcpOiBQcm9taXNlPFNpZ25Qc2J0UmVzcG9uc2U+IHtcbiAgICBjb25zdCBwc2J0ID0gYXdhaXQgdGhpcy5nZXRNdXNpZzJOb25jZXModGhpcy5kZWNvZGVUcmFuc2FjdGlvbkFzUHNidChwc2J0SGV4KSwgd2FsbGV0SWQpO1xuICAgIHJldHVybiB7IHBzYnQ6IGVuY29kZVRyYW5zYWN0aW9uKHBzYnQpLnRvU3RyaW5nKCdoZXgnKSB9O1xuICB9XG5cbiAgLyoqXG4gICAqIEByZXR1cm5zIGlucHV0IHBzYnQgYWRkZWQgd2l0aCBkZXRlcm1pbmlzdGljIE11U2lnMiBub25jZSBmb3IgYml0Z28ga2V5IGZvciBlYWNoIE11U2lnMiBpbnB1dHMgZnJvbSBPVkMuXG4gICAqIEBwYXJhbSBvdmNKc29uIEpTT04gb2JqZWN0IHByb3ZpZGVkIGJ5IE9WQyB3aXRoIGZpZWxkcyBwc2J0SGV4IGFuZCB3YWxsZXRJZFxuICAgKi9cbiAgYXN5bmMgc2lnblBzYnRGcm9tT1ZDKG92Y0pzb246IFJlY29yZDxzdHJpbmcsIHVua25vd24+KTogUHJvbWlzZTxSZWNvcmQ8c3RyaW5nLCB1bmtub3duPj4ge1xuICAgIGFzc2VydChvdmNKc29uWydwc2J0SGV4J10sICdvdmNKc29uIG11c3QgY29udGFpbiBwc2J0SGV4Jyk7XG4gICAgYXNzZXJ0KG92Y0pzb25bJ3dhbGxldElkJ10sICdvdmNKc29uIG11c3QgY29udGFpbiB3YWxsZXRJZCcpO1xuICAgIGNvbnN0IGhleCA9IG92Y0pzb25bJ3BzYnRIZXgnXSBhcyBzdHJpbmc7XG4gICAgY29uc3Qgd2FsbGV0SWQgPSBvdmNKc29uWyd3YWxsZXRJZCddIGFzIHN0cmluZztcbiAgICBjb25zdCBwc2J0ID0gYXdhaXQgdGhpcy5nZXRNdXNpZzJOb25jZXModGhpcy5kZWNvZGVUcmFuc2FjdGlvbkFzUHNidChoZXgpLCB3YWxsZXRJZCk7XG4gICAgcmV0dXJuIF8uZXh0ZW5kKG92Y0pzb24sIHsgdHhIZXg6IGVuY29kZVRyYW5zYWN0aW9uKHBzYnQpLnRvU3RyaW5nKCdoZXgnKSB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBc3NlbWJsZSBrZXljaGFpbiBhbmQgaGFsZi1zaWduIHByZWJ1aWx0IHRyYW5zYWN0aW9uXG4gICAqIEBwYXJhbSBwYXJhbXMgLSB7QHNlZSBTaWduVHJhbnNhY3Rpb25PcHRpb25zfVxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxTaWduZWRUcmFuc2FjdGlvbiB8IEhhbGZTaWduZWRVdHhvVHJhbnNhY3Rpb24+fVxuICAgKi9cbiAgYXN5bmMgc2lnblRyYW5zYWN0aW9uPFROdW1iZXIgZXh0ZW5kcyBudW1iZXIgfCBiaWdpbnQgPSBudW1iZXI+KFxuICAgIHBhcmFtczogU2lnblRyYW5zYWN0aW9uT3B0aW9uczxUTnVtYmVyPlxuICApOiBQcm9taXNlPFNpZ25lZFRyYW5zYWN0aW9uIHwgSGFsZlNpZ25lZFV0eG9UcmFuc2FjdGlvbj4ge1xuICAgIHJldHVybiBzaWduVHJhbnNhY3Rpb248VE51bWJlcj4odGhpcywgdGhpcy5iaXRnbywgcGFyYW1zKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTaWduIGEgdHJhbnNhY3Rpb24gd2l0aCBhIGN1c3RvbSBzaWduaW5nIGZ1bmN0aW9uLiBFeGFtcGxlIHVzZSBjYXNlIGlzIGV4cHJlc3MgZXh0ZXJuYWwgc2lnbmVyXG4gICAqIEBwYXJhbSBjdXN0b21TaWduaW5nRnVuY3Rpb24gY3VzdG9tIHNpZ25pbmcgZnVuY3Rpb24gdGhhdCByZXR1cm5zIGEgc2luZ2xlIHNpZ25lZCB0cmFuc2FjdGlvblxuICAgKiBAcGFyYW0gc2lnblRyYW5zYWN0aW9uUGFyYW1zIHBhcmFtZXRlcnMgZm9yIGN1c3RvbSBzaWduaW5nIGZ1bmN0aW9uLiBJbmNsdWRlcyB0eFByZWJ1aWxkIGFuZCBwdWJzXG4gICAqXG4gICAqIEByZXR1cm5zIHNpZ25lZCB0cmFuc2FjdGlvbiBhcyBoZXggc3RyaW5nXG4gICAqL1xuICBhc3luYyBzaWduV2l0aEN1c3RvbVNpZ25pbmdGdW5jdGlvbjxUTnVtYmVyIGV4dGVuZHMgbnVtYmVyIHwgYmlnaW50PihcbiAgICBjdXN0b21TaWduaW5nRnVuY3Rpb246IFV0eG9DdXN0b21TaWduaW5nRnVuY3Rpb248VE51bWJlcj4sXG4gICAgc2lnblRyYW5zYWN0aW9uUGFyYW1zOiB7IHR4UHJlYnVpbGQ6IFRyYW5zYWN0aW9uUHJlYnVpbGQ8VE51bWJlcj47IHB1YnM6IHN0cmluZ1tdIH1cbiAgKTogUHJvbWlzZTxTaWduZWRUcmFuc2FjdGlvbj4ge1xuICAgIGNvbnN0IHR4SGV4ID0gc2lnblRyYW5zYWN0aW9uUGFyYW1zLnR4UHJlYnVpbGQudHhIZXg7XG4gICAgYXNzZXJ0KHR4SGV4LCAnbWlzc2luZyB0eEhleCBwYXJhbWV0ZXInKTtcblxuICAgIGNvbnN0IHR4ID0gdGhpcy5kZWNvZGVUcmFuc2FjdGlvbih0eEhleCk7XG5cbiAgICBjb25zdCBpc1R4V2l0aEtleVBhdGhTcGVuZElucHV0ID0gaGFzS2V5UGF0aFNwZW5kSW5wdXQodHgsIHNpZ25UcmFuc2FjdGlvblBhcmFtcy5wdWJzLCB0aGlzLm5hbWUpO1xuXG4gICAgaWYgKCFpc1R4V2l0aEtleVBhdGhTcGVuZElucHV0KSB7XG4gICAgICByZXR1cm4gYXdhaXQgY3VzdG9tU2lnbmluZ0Z1bmN0aW9uKHsgLi4uc2lnblRyYW5zYWN0aW9uUGFyYW1zLCBjb2luOiB0aGlzIH0pO1xuICAgIH1cblxuICAgIGNvbnN0IGdldFR4SGV4ID0gKHY6IFNpZ25lZFRyYW5zYWN0aW9uKTogc3RyaW5nID0+IHtcbiAgICAgIGlmICgndHhIZXgnIGluIHYpIHtcbiAgICAgICAgcmV0dXJuIHYudHhIZXg7XG4gICAgICB9XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ3R4SGV4IG5vdCBmb3VuZCBpbiBzaWduVHJhbnNhY3Rpb24gcmVzdWx0Jyk7XG4gICAgfTtcblxuICAgIGNvbnN0IHNpZ25lck5vbmNlVHggPSBhd2FpdCBjdXN0b21TaWduaW5nRnVuY3Rpb24oe1xuICAgICAgLi4uc2lnblRyYW5zYWN0aW9uUGFyYW1zLFxuICAgICAgc2lnbmluZ1N0ZXA6ICdzaWduZXJOb25jZScsXG4gICAgICBjb2luOiB0aGlzLFxuICAgIH0pO1xuXG4gICAgY29uc3QgeyBwdWJzIH0gPSBzaWduVHJhbnNhY3Rpb25QYXJhbXM7XG4gICAgYXNzZXJ0KHB1YnMgPT09IHVuZGVmaW5lZCB8fCBpc1RyaXBsZShwdWJzKSk7XG5cbiAgICBjb25zdCBjb3NpZ25lck5vbmNlVHggPSBhd2FpdCB0aGlzLnNpZ25UcmFuc2FjdGlvbjxUTnVtYmVyPih7XG4gICAgICAuLi5zaWduVHJhbnNhY3Rpb25QYXJhbXMsXG4gICAgICBwdWJzLFxuICAgICAgdHhQcmVidWlsZDogeyAuLi5zaWduVHJhbnNhY3Rpb25QYXJhbXMudHhQcmVidWlsZCwgdHhIZXg6IGdldFR4SGV4KHNpZ25lck5vbmNlVHgpIH0sXG4gICAgICBzaWduaW5nU3RlcDogJ2Nvc2lnbmVyTm9uY2UnLFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIGF3YWl0IGN1c3RvbVNpZ25pbmdGdW5jdGlvbih7XG4gICAgICAuLi5zaWduVHJhbnNhY3Rpb25QYXJhbXMsXG4gICAgICB0eFByZWJ1aWxkOiB7IC4uLnNpZ25UcmFuc2FjdGlvblBhcmFtcy50eFByZWJ1aWxkLCB0eEhleDogZ2V0VHhIZXgoY29zaWduZXJOb25jZVR4KSB9LFxuICAgICAgc2lnbmluZ1N0ZXA6ICdzaWduZXJTaWduYXR1cmUnLFxuICAgICAgY29pbjogdGhpcyxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0gdW5zcGVudFxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAgICovXG4gIGlzQml0R29UYWludGVkVW5zcGVudDxUTnVtYmVyIGV4dGVuZHMgbnVtYmVyIHwgYmlnaW50Pih1bnNwZW50OiBVbnNwZW50PFROdW1iZXI+KTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIGlzUmVwbGF5UHJvdGVjdGlvblVuc3BlbnQodW5zcGVudCwgdGhpcy5uYW1lKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZWNvbXBvc2UgYSByYXcgcHNidC90cmFuc2FjdGlvbiBpbnRvIHVzZWZ1bCBpbmZvcm1hdGlvbiwgc3VjaCBhcyB0aGUgdG90YWwgYW1vdW50cyxcbiAgICogY2hhbmdlIGFtb3VudHMsIGFuZCB0cmFuc2FjdGlvbiBvdXRwdXRzLlxuICAgKiBAcGFyYW0gcGFyYW1zXG4gICAqL1xuICBvdmVycmlkZSBhc3luYyBleHBsYWluVHJhbnNhY3Rpb248VE51bWJlciBleHRlbmRzIG51bWJlciB8IGJpZ2ludCA9IG51bWJlcj4oXG4gICAgcGFyYW1zOiBFeHBsYWluVHJhbnNhY3Rpb25PcHRpb25zPFROdW1iZXI+LFxuICAgIHdhbGxldD86IElXYWxsZXRcbiAgKTogUHJvbWlzZTxUcmFuc2FjdGlvbkV4cGxhbmF0aW9uPiB7XG4gICAgaWYgKCFwYXJhbXMucHVicykge1xuICAgICAgLy8gaWYgbm8gcHVicyBhcmUgcHJvdmlkZWQsIG9wcG9ydHVuaXN0aWNhbGx5IGZldGNoIHRoZSBrZXljaGFpbnMgZnJvbSB0aGUgd2FsbGV0XG4gICAgICBpZiAod2FsbGV0KSB7XG4gICAgICAgIGNvbnN0IGtleWNoYWlucyA9IGF3YWl0IGZldGNoS2V5Y2hhaW5zKHRoaXMsIHdhbGxldCk7XG4gICAgICAgIHBhcmFtcy5wdWJzID0gdG9CaXAzMlRyaXBsZShrZXljaGFpbnMpLm1hcCgoaykgPT4gay5uZXV0ZXJlZCgpLnRvQmFzZTU4KCkpIGFzIFRyaXBsZTxzdHJpbmc+O1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAod2FsbGV0ICYmIGlzRGVzY3JpcHRvcldhbGxldCh3YWxsZXQpKSB7XG4gICAgICAvLyBEZXNjcmlwdG9yIHdhbGxldHMgZGVjb2RlIHByZWJ1aWxkIGJ5dGVzIHN0cmFpZ2h0IGludG8gdGhlIHdhc20tdXR4b1xuICAgICAgLy8gZGVzY3JpcHRvciBQc2J0LCBza2lwcGluZyB0aGUgZml4ZWRTY3JpcHRXYWxsZXQuQml0R29Qc2J0IGludGVybWVkaWF0ZS5cbiAgICAgIHJldHVybiBleHBsYWluVHgoZGVjb2RlRGVzY3JpcHRvclBzYnQocGFyYW1zKSwgeyAuLi5wYXJhbXMsIHdhbGxldCB9LCB0aGlzLm5hbWUpO1xuICAgIH1cbiAgICByZXR1cm4gZXhwbGFpblR4KHRoaXMuZGVjb2RlVHJhbnNhY3Rpb25Gcm9tUHJlYnVpbGQocGFyYW1zKSwgeyAuLi5wYXJhbXMsIHdhbGxldCB9LCB0aGlzLm5hbWUpO1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXByZWNhdGVkIC0gdXNlIHtAc2VlIGJhY2t1cEtleVJlY292ZXJ5fVxuICAgKiBCdWlsZHMgYSBmdW5kcyByZWNvdmVyeSB0cmFuc2FjdGlvbiB3aXRob3V0IEJpdEdvXG4gICAqIEBwYXJhbSBwYXJhbXMgLSB7QHNlZSBiYWNrdXBLZXlSZWNvdmVyeX1cbiAgICovXG4gIGFzeW5jIHJlY292ZXIocGFyYW1zOiBSZWNvdmVyUGFyYW1zKTogUmV0dXJuVHlwZTx0eXBlb2YgYmFja3VwS2V5UmVjb3Zlcnk+IHtcbiAgICByZXR1cm4gYmFja3VwS2V5UmVjb3ZlcnkodGhpcywgdGhpcy5iaXRnbywgcGFyYW1zKTtcbiAgfVxuXG4gIGFzeW5jIHJlY292ZXJWMShwYXJhbXM6IFYxUmVjb3ZlclBhcmFtcyk6IFJldHVyblR5cGU8dHlwZW9mIHYxQmFja3VwS2V5UmVjb3Zlcnk+IHtcbiAgICByZXR1cm4gdjFCYWNrdXBLZXlSZWNvdmVyeSh0aGlzLCB0aGlzLmJpdGdvLCBwYXJhbXMpO1xuICB9XG5cbiAgYXN5bmMgc3dlZXBWMShwYXJhbXM6IFYxU3dlZXBQYXJhbXMpOiBSZXR1cm5UeXBlPHR5cGVvZiB2MVN3ZWVwPiB7XG4gICAgcmV0dXJuIHYxU3dlZXAodGhpcywgdGhpcy5iaXRnbywgcGFyYW1zKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZWNvdmVyIGNvaW4gdGhhdCB3YXMgc2VudCB0byB3cm9uZyBjaGFpblxuICAgKiBAcGFyYW0gcGFyYW1zXG4gICAqIEBwYXJhbSBwYXJhbXMudHhpZCBUaGUgdHhpZCBvZiB0aGUgZmF1bHR5IHRyYW5zYWN0aW9uXG4gICAqIEBwYXJhbSBwYXJhbXMucmVjb3ZlcnlBZGRyZXNzIGFkZHJlc3MgdG8gc2VuZCByZWNvdmVyZWQgZnVuZHMgdG9cbiAgICogQHBhcmFtIHBhcmFtcy53YWxsZXQgdGhlIHdhbGxldCB0aGF0IHJlY2VpdmVkIHRoZSBmdW5kc1xuICAgKiBAcGFyYW0gcGFyYW1zLnJlY292ZXJ5Q29pbiB0aGUgY29pbiB0eXBlIG9mIHRoZSB3YWxsZXQgdGhhdCByZWNlaXZlZCB0aGUgZnVuZHNcbiAgICogQHBhcmFtIHBhcmFtcy5zaWduZWQgcmV0dXJuIGEgaGFsZi1zaWduZWQgdHJhbnNhY3Rpb24gKGRlZmF1bHQ9dHJ1ZSlcbiAgICogQHBhcmFtIHBhcmFtcy53YWxsZXRQYXNzcGhyYXNlIHRoZSB3YWxsZXQgcGFzc3BocmFzZVxuICAgKiBAcGFyYW0gcGFyYW1zLnhwcnYgdGhlIHVuZW5jcnlwdGVkIHhwcnYgKHVzZWQgaW5zdGVhZCBvZiB3YWxsZXQgcGFzc3BocmFzZSlcbiAgICogQHBhcmFtIHBhcmFtcy5hcGlLZXkgZm9yIHV0eG8gY29pbnMgb3RoZXIgdGhhbiBbQlRDLFRCVENdIHRoaXMgaXMgYSBCbG9jayBDaGFpciBhcGkga2V5XG4gICAqIEByZXR1cm5zIHsqfVxuICAgKi9cbiAgYXN5bmMgcmVjb3ZlckZyb21Xcm9uZ0NoYWluPFROdW1iZXIgZXh0ZW5kcyBudW1iZXIgfCBiaWdpbnQgPSBudW1iZXI+KFxuICAgIHBhcmFtczogUmVjb3ZlckZyb21Xcm9uZ0NoYWluT3B0aW9uc1xuICApOiBQcm9taXNlPENyb3NzQ2hhaW5SZWNvdmVyeVNpZ25lZDxUTnVtYmVyPiB8IENyb3NzQ2hhaW5SZWNvdmVyeVVuc2lnbmVkPFROdW1iZXI+PiB7XG4gICAgY29uc3QgeyB0eGlkLCByZWNvdmVyeUFkZHJlc3MsIHdhbGxldCwgd2FsbGV0UGFzc3BocmFzZSwgeHBydiwgYXBpS2V5IH0gPSBwYXJhbXM7XG5cbiAgICAvLyBwYXJhbXMucmVjb3ZlcnlDb2luIHVzZWQgdG8gYmUgcGFyYW1zLmNvaW4sIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5XG4gICAgY29uc3QgcmVjb3ZlcnlDb2luID0gcGFyYW1zLmNvaW4gfHwgcGFyYW1zLnJlY292ZXJ5Q29pbjtcbiAgICBpZiAoIXJlY292ZXJ5Q29pbikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdtaXNzaW5nIHJlcXVpcmVkIG9iamVjdCByZWNvdmVyeUNvaW4nKTtcbiAgICB9XG4gICAgLy8gc2lnbmVkIHNob3VsZCBkZWZhdWx0IHRvIHRydWUsIGFuZCBvbmx5IGJlIGRpc2FibGVkIGlmIGV4cGxpY2l0bHkgc2V0IHRvIGZhbHNlIChub3QgdW5kZWZpbmVkKVxuICAgIGNvbnN0IHNpZ25lZCA9IHBhcmFtcy5zaWduZWQgIT09IGZhbHNlO1xuXG4gICAgY29uc3Qgc291cmNlQ29pbkZhbWlseSA9IHRoaXMuZ2V0RmFtaWx5KCk7XG4gICAgY29uc3QgcmVjb3ZlcnlDb2luRmFtaWx5ID0gcmVjb3ZlcnlDb2luLmdldEZhbWlseSgpO1xuICAgIGNvbnN0IHN1cHBvcnRlZFJlY292ZXJ5Q29pbnMgPSBzdXBwb3J0ZWRDcm9zc0NoYWluUmVjb3Zlcmllc1tzb3VyY2VDb2luRmFtaWx5XTtcblxuICAgIGlmIChfLmlzVW5kZWZpbmVkKHN1cHBvcnRlZFJlY292ZXJ5Q29pbnMpIHx8ICFzdXBwb3J0ZWRSZWNvdmVyeUNvaW5zLmluY2x1ZGVzKHJlY292ZXJ5Q29pbkZhbWlseSkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgUmVjb3Zlcnkgb2YgJHtzb3VyY2VDb2luRmFtaWx5fSBiYWxhbmNlcyBmcm9tICR7cmVjb3ZlcnlDb2luRmFtaWx5fSB3YWxsZXRzIGlzIG5vdCBzdXBwb3J0ZWQuYCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGF3YWl0IHJlY292ZXJDcm9zc0NoYWluPFROdW1iZXI+KHRoaXMuYml0Z28sIHtcbiAgICAgIHNvdXJjZUNvaW46IHRoaXMsXG4gICAgICByZWNvdmVyeUNvaW4sXG4gICAgICB3YWxsZXRJZDogd2FsbGV0LFxuICAgICAgdHhpZCxcbiAgICAgIHJlY292ZXJ5QWRkcmVzcyxcbiAgICAgIHdhbGxldFBhc3NwaHJhc2U6IHNpZ25lZCA/IHdhbGxldFBhc3NwaHJhc2UgOiB1bmRlZmluZWQsXG4gICAgICB4cHJ2OiBzaWduZWQgPyB4cHJ2IDogdW5kZWZpbmVkLFxuICAgICAgYXBpS2V5LFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEdlbmVyYXRlIGJpcDMyIGtleSBwYWlyXG4gICAqXG4gICAqIEBwYXJhbSBzZWVkXG4gICAqIEByZXR1cm5zIHtPYmplY3R9IG9iamVjdCB3aXRoIGdlbmVyYXRlZCBwdWIgYW5kIHBydlxuICAgKi9cbiAgZ2VuZXJhdGVLZXlQYWlyKHNlZWQ6IEJ1ZmZlcik6IHsgcHViOiBzdHJpbmc7IHBydjogc3RyaW5nIH0ge1xuICAgIGlmICghc2VlZCkge1xuICAgICAgLy8gQW4gZXh0ZW5kZWQgcHJpdmF0ZSBrZXkgaGFzIGJvdGggYSBub3JtYWwgMjU2IGJpdCBwcml2YXRlIGtleSBhbmQgYSAyNTZcbiAgICAgIC8vIGJpdCBjaGFpbiBjb2RlLCBib3RoIG9mIHdoaWNoIG11c3QgYmUgcmFuZG9tLiA1MTIgYml0cyBpcyB0aGVyZWZvcmUgdGhlXG4gICAgICAvLyBtYXhpbXVtIGVudHJvcHkgYW5kIGdpdmVzIHVzIG1heGltdW0gc2VjdXJpdHkgYWdhaW5zdCBjcmFja2luZy5cbiAgICAgIHNlZWQgPSByYW5kb21CeXRlcyg1MTIgLyA4KTtcbiAgICB9XG4gICAgY29uc3QgZXh0ZW5kZWRLZXkgPSBCSVAzMi5mcm9tU2VlZChzZWVkKTtcbiAgICByZXR1cm4ge1xuICAgICAgcHViOiBleHRlbmRlZEtleS5uZXV0ZXJlZCgpLnRvQmFzZTU4KCksXG4gICAgICBwcnY6IGV4dGVuZGVkS2V5LnRvQmFzZTU4KCksXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZXRlcm1pbmVzIHRoZSBkZWZhdWx0IHRyYW5zYWN0aW9uIGZvcm1hdCBiYXNlZCBvbiB3YWxsZXQgcHJvcGVydGllcyBhbmQgbmV0d29ya1xuICAgKiBAcGFyYW0gd2FsbGV0IC0gVGhlIHdhbGxldCB0byBjaGVja1xuICAgKiBAcGFyYW0gcmVxdWVzdGVkRm9ybWF0IC0gT3B0aW9uYWwgZXhwbGljaXRseSByZXF1ZXN0ZWQgZm9ybWF0XG4gICAqIEByZXR1cm5zIFRoZSB0cmFuc2FjdGlvbiBmb3JtYXQgdG8gdXNlLCBvciB1bmRlZmluZWQgaWYgbm8gZGVmYXVsdCBhcHBsaWVzXG4gICAqL1xuICBnZXREZWZhdWx0VHhGb3JtYXQod2FsbGV0OiBXYWxsZXQsIHJlcXVlc3RlZEZvcm1hdD86IFR4Rm9ybWF0KTogVHhGb3JtYXQge1xuICAgIGlmIChyZXF1ZXN0ZWRGb3JtYXQgPT09ICdsZWdhY3knKSB7XG4gICAgICByZXR1cm4gJ3BzYnQtbGl0ZSc7XG4gICAgfVxuICAgIHJldHVybiByZXF1ZXN0ZWRGb3JtYXQgPz8gJ3BzYnQtbGl0ZSc7XG4gIH1cblxuICBhc3luYyBnZXRFeHRyYVByZWJ1aWxkUGFyYW1zKGJ1aWxkUGFyYW1zOiBFeHRyYVByZWJ1aWxkUGFyYW1zT3B0aW9ucyAmIHsgd2FsbGV0OiBXYWxsZXQgfSk6IFByb21pc2U8e1xuICAgIHR4Rm9ybWF0PzogVHhGb3JtYXQ7XG4gICAgY2hhbmdlQWRkcmVzc1R5cGU/OiBTY3JpcHRUeXBlMk9mM1tdIHwgU2NyaXB0VHlwZTJPZjM7XG4gICAgYWxsb3dlZElucHV0U2NyaXB0VHlwZXM/OiBTY3JpcHRUeXBlMk9mM1tdO1xuICB9PiB7XG4gICAgY29uc3QgcmVxdWVzdGVkRm9ybWF0ID0gYnVpbGRQYXJhbXMudHhGb3JtYXQgYXMgVHhGb3JtYXQgfCB1bmRlZmluZWQ7XG4gICAgY29uc3QgdHhGb3JtYXQgPSB0aGlzLmdldERlZmF1bHRUeEZvcm1hdChidWlsZFBhcmFtcy53YWxsZXQsIHJlcXVlc3RlZEZvcm1hdCk7XG4gICAgbGV0IGNoYW5nZUFkZHJlc3NUeXBlID0gYnVpbGRQYXJhbXMuY2hhbmdlQWRkcmVzc1R5cGUgYXMgU2NyaXB0VHlwZTJPZjNbXSB8IFNjcmlwdFR5cGUyT2YzIHwgdW5kZWZpbmVkO1xuXG4gICAgLy8gaWYgdGhlIGFkZHJlc3NUeXBlIGlzIG5vdCBzcGVjaWZpZWQsIHdlIG5lZWQgdG8gZGVmYXVsdCB0byBwMnRyTXVzaWcyIGZvciB0ZXN0bmV0IGhvdCB3YWxsZXRzIGZvciBzdGFnZWQgcm9sbG91dCBvZiBwMnRyTXVzaWcyXG4gICAgaWYgKFxuICAgICAgYnVpbGRQYXJhbXMuYWRkcmVzc1R5cGUgPT09IHVuZGVmaW5lZCAmJiAvLyBhZGRyZXNzVHlwZSBpcyBkZXByZWNhdGVkIGFuZCByZXBsYWNlZCBieSBgY2hhbmdlQWRkcmVzc2BcbiAgICAgIGJ1aWxkUGFyYW1zLmNoYW5nZUFkZHJlc3NUeXBlID09PSB1bmRlZmluZWQgJiZcbiAgICAgIGJ1aWxkUGFyYW1zLmNoYW5nZUFkZHJlc3MgPT09IHVuZGVmaW5lZCAmJlxuICAgICAgYnVpbGRQYXJhbXMud2FsbGV0LnR5cGUoKSA9PT0gJ2hvdCdcbiAgICApIHtcbiAgICAgIGNoYW5nZUFkZHJlc3NUeXBlID0gWydwMnRyTXVzaWcyJywgJ3Ayd3NoJywgJ3Ayc2hQMndzaCcsICdwMnNoJywgJ3AydHInXTtcbiAgICB9XG5cbiAgICAvLyBnZXRIYWxmU2lnbmVkTGVnYWN5Rm9ybWF0KCkgb25seSBzdXBwb3J0cyBwMm1zLWJhc2VkIHR5cGVzIChwMnNoLCBwMnNoUDJ3c2gsIHAyd3NoKS5cbiAgICAvLyBGaWx0ZXIgY2hhbmdlIG91dHB1dHMgYW5kIHJlc3RyaWN0IGlucHV0IHNlbGVjdGlvbiB0byB0aGVzZSB0eXBlcy5cbiAgICBjb25zdCBsZWdhY3lDb21wYXRpYmxlVHlwZXM6IFNjcmlwdFR5cGUyT2YzW10gPSBbJ3Ayc2gnLCAncDJzaFAyd3NoJywgJ3Ayd3NoJ107XG4gICAgbGV0IGFsbG93ZWRJbnB1dFNjcmlwdFR5cGVzOiBTY3JpcHRUeXBlMk9mM1tdIHwgdW5kZWZpbmVkO1xuXG4gICAgaWYgKHJlcXVlc3RlZEZvcm1hdCA9PT0gJ2xlZ2FjeScpIHtcbiAgICAgIGFsbG93ZWRJbnB1dFNjcmlwdFR5cGVzID0gbGVnYWN5Q29tcGF0aWJsZVR5cGVzO1xuICAgICAgaWYgKEFycmF5LmlzQXJyYXkoY2hhbmdlQWRkcmVzc1R5cGUpKSB7XG4gICAgICAgIGNoYW5nZUFkZHJlc3NUeXBlID0gY2hhbmdlQWRkcmVzc1R5cGUuZmlsdGVyKCh0KTogdCBpcyBTY3JpcHRUeXBlMk9mMyA9PlxuICAgICAgICAgIGxlZ2FjeUNvbXBhdGlibGVUeXBlcy5pbmNsdWRlcyh0IGFzIFNjcmlwdFR5cGUyT2YzKVxuICAgICAgICApO1xuICAgICAgfSBlbHNlIGlmIChjaGFuZ2VBZGRyZXNzVHlwZSAhPT0gdW5kZWZpbmVkICYmICFsZWdhY3lDb21wYXRpYmxlVHlwZXMuaW5jbHVkZXMoY2hhbmdlQWRkcmVzc1R5cGUpKSB7XG4gICAgICAgIGNoYW5nZUFkZHJlc3NUeXBlID0gbGVnYWN5Q29tcGF0aWJsZVR5cGVzO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICB0eEZvcm1hdCxcbiAgICAgIGNoYW5nZUFkZHJlc3NUeXBlLFxuICAgICAgYWxsb3dlZElucHV0U2NyaXB0VHlwZXMsXG4gICAgfTtcbiAgfVxuXG4gIHByZUNyZWF0ZUJpdEdvKHBhcmFtczogUHJlY3JlYXRlQml0R29PcHRpb25zKTogdm9pZCB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgYXN5bmMgcHJlc2lnblRyYW5zYWN0aW9uKHBhcmFtczogUHJlc2lnblRyYW5zYWN0aW9uT3B0aW9ucyk6IFByb21pc2U8YW55PiB7XG4gICAgaWYgKHBhcmFtcy53YWxsZXREYXRhICYmIGlzVXR4b1dhbGxldERhdGEocGFyYW1zLndhbGxldERhdGEpICYmIGlzRGVzY3JpcHRvcldhbGxldERhdGEocGFyYW1zLndhbGxldERhdGEpKSB7XG4gICAgICByZXR1cm4gcGFyYW1zO1xuICAgIH1cblxuICAgIGNvbnN0IHJldHVybkxlZ2FjeUZvcm1hdCA9IChwYXJhbXMgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4pLnR4Rm9ybWF0ID09PSAnbGVnYWN5JztcblxuICAgIC8vIEluIHRoZSBjYXNlIHRoYXQgd2UgaGF2ZSBhICdwc2J0LWxpdGUnIHRyYW5zYWN0aW9uIGZvcm1hdCwgd2Ugd2FudCB0byBpbmRpY2F0ZSBpbiBzaWduaW5nIHRvIG5vdCBmYWlsXG4gICAgY29uc3QgdHhIZXggPSAocGFyYW1zLnR4SGV4ID8/IHBhcmFtcy50eFByZWJ1aWxkPy50eEhleCkgYXMgc3RyaW5nO1xuICAgIGlmIChcbiAgICAgIHR4SGV4ICYmXG4gICAgICB1dHhvbGliLmJpdGdvLmlzUHNidCh0eEhleCBhcyBzdHJpbmcpICYmXG4gICAgICB1dHhvbGliLmJpdGdvLmlzUHNidExpdGUodXR4b2xpYi5iaXRnby5jcmVhdGVQc2J0RnJvbUhleCh0eEhleCwgdGhpcy5uZXR3b3JrKSkgJiZcbiAgICAgIHBhcmFtcy5hbGxvd05vblNlZ3dpdFNpZ25pbmdXaXRob3V0UHJldlR4ID09PSB1bmRlZmluZWRcbiAgICApIHtcbiAgICAgIHJldHVybiB7IC4uLnBhcmFtcywgYWxsb3dOb25TZWd3aXRTaWduaW5nV2l0aG91dFByZXZUeDogdHJ1ZSwgcmV0dXJuTGVnYWN5Rm9ybWF0IH07XG4gICAgfVxuICAgIHJldHVybiB7IC4uLnBhcmFtcywgcmV0dXJuTGVnYWN5Rm9ybWF0IH07XG4gIH1cblxuICBhc3luYyBzdXBwbGVtZW50R2VuZXJhdGVXYWxsZXQoXG4gICAgd2FsbGV0UGFyYW1zOiBTdXBwbGVtZW50R2VuZXJhdGVXYWxsZXRPcHRpb25zLFxuICAgIGtleWNoYWluczogS2V5Y2hhaW5zVHJpcGxldFxuICApOiBQcm9taXNlPGFueT4ge1xuICAgIHJldHVybiB3YWxsZXRQYXJhbXM7XG4gIH1cblxuICB0cmFuc2FjdGlvbkRhdGFBbGxvd2VkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHZhbHVlbGVzc1RyYW5zZmVyQWxsb3dlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBnZXRSZWNvdmVyeVByb3ZpZGVyKGFwaVRva2VuPzogc3RyaW5nKTogUmVjb3ZlcnlQcm92aWRlciB7XG4gICAgcmV0dXJuIGZvckNvaW4odGhpcy5nZXRDaGFpbigpLCBhcGlUb2tlbik7XG4gIH1cblxuICAvKiogQGluaGVyaXREb2MgKi9cbiAgYXVkaXREZWNyeXB0ZWRLZXkoe1xuICAgIG11bHRpU2lnVHlwZSxcbiAgICBwdWJsaWNLZXksXG4gICAgcHJ2LFxuICB9OiB7XG4gICAgbXVsdGlTaWdUeXBlOiBNdWx0aXNpZ1R5cGU7XG4gICAgcHVibGljS2V5OiBzdHJpbmc7XG4gICAgcHJ2OiBzdHJpbmc7XG4gIH0pOiB2b2lkIHtcbiAgICBpZiAobXVsdGlTaWdUeXBlID09PSAndHNzJykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCd0c3MgYXVkaXRpbmcgaXMgbm90IHN1cHBvcnRlZCBmb3IgdGhpcyBjb2luJyk7XG4gICAgfVxuICAgIGlmICghaXNWYWxpZFBydihwcnYpICYmICFpc1ZhbGlkWHBydihwcnYpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ2ludmFsaWQgcHJpdmF0ZSBrZXknKTtcbiAgICB9XG4gICAgaWYgKHB1YmxpY0tleSkge1xuICAgICAgY29uc3QgZ2VuUHViS2V5ID0gQklQMzIuZnJvbUJhc2U1OChwcnYpLm5ldXRlcmVkKCkudG9CYXNlNTgoKTtcbiAgICAgIGlmIChnZW5QdWJLZXkgIT09IHB1YmxpY0tleSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3B1YmxpYyBrZXkgZG9lcyBub3QgbWF0Y2ggcHJpdmF0ZSBrZXknKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbiJdfQ==
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fixedScript.d.ts","sourceRoot":"","sources":["../../../../src/address/fixedScript.ts"],"names":[],"mappings":"AACA,OAAO,EAEL,mBAAmB,EASnB,MAAM,EACP,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAErD,OAAO,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAGxC,KAAK,SAAS,GAAG,iBAAiB,CAAC,SAAS,CAAC;AAE7C,MAAM,WAAW,8BAA8B;IAC7C,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,sBAAsB;IACrC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED,UAAU,iCAAkC,SAAQ,sBAAsB;IACxE,MAAM,CAAC,EAAE,mBAAmB,CAAC;IAC7B,SAAS,EAAE;QAAE,GAAG,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;CAC9B;AAaD,wBAAgB,gCAAgC,CAC9C,QAAQ,EAAE,YAAY,EACtB,SAAS,EAAE,iBAAiB,CAAC,aAAa,GAAG,MAAM,CAAC,MAAM,CAAC,EAC3D,KAAK,EAAE,SAAS,EAChB,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,mBAAmB,GAAG,SAAS,GACtC,MAAM,CAKR;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,eAAe,CAAC,QAAQ,EAAE,YAAY,EAAE,MAAM,EAAE,iCAAiC,GAAG,MAAM,
|
|
1
|
+
{"version":3,"file":"fixedScript.d.ts","sourceRoot":"","sources":["../../../../src/address/fixedScript.ts"],"names":[],"mappings":"AACA,OAAO,EAEL,mBAAmB,EASnB,MAAM,EACP,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAErD,OAAO,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAGxC,KAAK,SAAS,GAAG,iBAAiB,CAAC,SAAS,CAAC;AAE7C,MAAM,WAAW,8BAA8B;IAC7C,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,sBAAsB;IACrC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED,UAAU,iCAAkC,SAAQ,sBAAsB;IACxE,MAAM,CAAC,EAAE,mBAAmB,CAAC;IAC7B,SAAS,EAAE;QAAE,GAAG,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;CAC9B;AAaD,wBAAgB,gCAAgC,CAC9C,QAAQ,EAAE,YAAY,EACtB,SAAS,EAAE,iBAAiB,CAAC,aAAa,GAAG,MAAM,CAAC,MAAM,CAAC,EAC3D,KAAK,EAAE,SAAS,EAChB,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,mBAAmB,GAAG,SAAS,GACtC,MAAM,CAKR;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,eAAe,CAAC,QAAQ,EAAE,YAAY,EAAE,MAAM,EAAE,iCAAiC,GAAG,MAAM,CAiEzG;AAED,KAAK,QAAQ,GAAG;IACd,GAAG,EAAE,MAAM,CAAC;CACb,CAAC;AAEF,wBAAgB,8BAA8B,CAC5C,QAAQ,EAAE,YAAY,EACtB,EACE,KAAK,EACL,KAAK,EACL,SAAS,EACT,MAAM,EACN,OAAO,GACR,EAAE;IACD,KAAK,EAAE,MAAM,GAAG,SAAS,CAAC;IAC1B,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,QAAQ,EAAE,CAAC;IACtB,MAAM,EAAE,mBAAmB,CAAC;IAC5B,OAAO,EAAE,MAAM,CAAC;CACjB,GACA,IAAI,CAqBN"}
|
|
@@ -41,6 +41,9 @@ function generateAddress(coinName, params) {
|
|
|
41
41
|
derivationIndex = params.index;
|
|
42
42
|
}
|
|
43
43
|
const { keychains, chain, segwit = false, bech32 = false } = params;
|
|
44
|
+
if (lodash_1.default.isNumber(chain) && lodash_1.default.isInteger(chain) && !wasm_utxo_1.fixedScriptWallet.ChainCode.is(chain)) {
|
|
45
|
+
throw new sdk_core_1.InvalidAddressDerivationPropertyError(`address validation failure: unrecognised chain code (${chain})`);
|
|
46
|
+
}
|
|
44
47
|
let derivationChain = wasm_utxo_1.fixedScriptWallet.ChainCode.value('p2sh', 'external');
|
|
45
48
|
if (lodash_1.default.isNumber(chain) && lodash_1.default.isInteger(chain) && wasm_utxo_1.fixedScriptWallet.ChainCode.is(chain)) {
|
|
46
49
|
derivationChain = chain;
|
|
@@ -102,4 +105,4 @@ function assertFixedScriptWalletAddress(coinName, { chain, index, keychains, for
|
|
|
102
105
|
throw new sdk_core_1.UnexpectedAddressError(`address validation failure: expected ${expectedAddress} but got ${address}`);
|
|
103
106
|
}
|
|
104
107
|
}
|
|
105
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZml4ZWRTY3JpcHQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvYWRkcmVzcy9maXhlZFNjcmlwdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQWdEQSw0RUFXQztBQWFELDBDQTZEQztBQU1ELHdFQW9DQztBQS9LRCxvREFBdUI7QUFDdkIsOENBWXlCO0FBQ3pCLGdEQUFxRDtBQXVCckQsU0FBUyxtQkFBbUIsQ0FBQyxRQUFzQixFQUFFLFdBQTJCO0lBQzlFLE9BQU8sNkJBQWlCLENBQUMsa0JBQWtCLENBQUMsUUFBUSxFQUFFLFdBQVcsQ0FBQyxDQUFDO0FBQ3JFLENBQUM7QUFFRDs7R0FFRztBQUNILFNBQVMsbUJBQW1CLENBQUMsVUFBbUM7SUFDOUQsT0FBTyxVQUFVLEtBQUssTUFBTSxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQztBQUMzRCxDQUFDO0FBRUQsU0FBZ0IsZ0NBQWdDLENBQzlDLFFBQXNCLEVBQ3RCLFNBQTJELEVBQzNELEtBQWdCLEVBQ2hCLEtBQWEsRUFDYixNQUF1QztJQUV2Qyw2REFBNkQ7SUFDN0Qsa0RBQWtEO0lBQ2xELE1BQU0sVUFBVSxHQUFHLE1BQU0sS0FBSyxRQUFRLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDO0lBQzVELE9BQU8sNkJBQWlCLENBQUMsT0FBTyxDQUFDLFNBQVMsRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxVQUFVLENBQUMsQ0FBQztBQUNsRixDQUFDO0FBRUQ7Ozs7Ozs7Ozs7R0FVRztBQUNILFNBQWdCLGVBQWUsQ0FBQyxRQUFzQixFQUFFLE1BQXlDO0lBQy9GLElBQUksZUFBZSxHQUFHLENBQUMsQ0FBQztJQUN4QixJQUFJLGdCQUFDLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsSUFBSyxNQUFNLENBQUMsS0FBZ0IsR0FBRyxDQUFDLEVBQUUs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LENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLGdCQUFDLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxJQUFJLGdCQUFDLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUNoRyxNQUFNLElBQUksZ0RBQXFDLENBQzdDLDhDQUE4QyxLQUFLLGVBQWUsS0FBSyxHQUFHLENBQzNFLENBQUM7SUFDSixDQUFDO0lBRUQsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO1FBQ2YsTUFBTSxJQUFJLEtBQUssQ0FBQyxrQ0FBa0MsQ0FBQyxDQUFDO0lBQ3RELENBQUM7SUFFRCxNQUFNLGVBQWUsR0FBRyxlQUFlLENBQUMsUUFBUSxFQUFFO1FBQ2hELE1BQU07UUFDTixTQUFTO1FBQ1QsS0FBSztRQUNMLEtBQUs7S0FDTixDQUFDLENBQUM7SUFFSCxJQUFJLGVBQWUsS0FBSyxPQUFPLEVBQUUsQ0FBQztRQUNoQyxNQUFNLElBQUksaUNBQXNCLENBQUMsd0NBQXdDLGVBQWUsWUFBWSxPQUFPLEVBQUUsQ0FBQyxDQUFDO0lBQ2pILENBQUM7QUFDSCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IF8gZnJvbSAnbG9kYXNoJztcbmltcG9ydCB7XG4gIEFkZHJlc3NUeXBlQ2hhaW5NaXNtYXRjaEVycm9yLFxuICBDcmVhdGVBZGRyZXNzRm9ybWF0LFxuICBJbnZhbGlkQWRkcmVzc0Rlcml2YXRpb25Qcm9wZXJ0eUVycm9yLFxuICBVbmV4cGVjdGVkQWRkcmVzc0Vycm9yLFxuICBQMnNoUDJ3c2hVbnN1cHBvcnRlZEVycm9yLFxuICBQMnRyTXVzaWcyVW5zdXBwb3J0ZWRFcnJvcixcbiAgUDJ0clVuc3VwcG9ydGVkRXJyb3IsXG4gIFAyd3NoVW5zdXBwb3J0ZWRFcnJvcixcbiAgVW5zdXBwb3J0ZWRBZGRyZXNzVHlwZUVycm9yLFxuICBpc1RyaXBsZSxcbiAgVHJpcGxlLFxufSBmcm9tICdAYml0Z28vc2RrLWNvcmUnO1xuaW1wb3J0IHsgZml4ZWRTY3JpcHRXYWxsZXQgfSBmcm9tICdAYml0Z28vd2FzbS11dHhvJztcblxuaW1wb3J0IHsgVXR4b0NvaW5OYW1lIH0gZnJvbSAnLi4vbmFtZXMnO1xuXG50eXBlIFNjcmlwdFR5cGUyT2YzID0gZml4ZWRTY3JpcHRXYWxsZXQuT3V0cHV0U2NyaXB0VHlwZTtcbnR5cGUgQ2hhaW5Db2RlID0gZml4ZWRTY3JpcHRXYWxsZXQuQ2hhaW5Db2RlO1xuXG5leHBvcnQgaW50ZXJmYWNlIEZpeGVkU2NyaXB0QWRkcmVzc0NvaW5TcGVjaWZpYyB7XG4gIG91dHB1dFNjcmlwdD86IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBHZW5lcmF0ZUFkZHJlc3NPcHRpb25zIHtcbiAgY2hhaW4/OiBudW1iZXI7XG4gIGluZGV4PzogbnVtYmVyO1xuICBzZWd3aXQ/OiBib29sZWFuO1xuICBiZWNoMzI/OiBib29sZWFuO1xufVxuXG5pbnRlcmZhY2UgR2VuZXJhdGVGaXhlZFNjcmlwdEFkZHJlc3NPcHRpb25zIGV4dGVuZHMgR2VuZXJhdGVBZGRyZXNzT3B0aW9ucyB7XG4gIGZvcm1hdD86IENyZWF0ZUFkZHJlc3NGb3JtYXQ7XG4gIGtleWNoYWluczogeyBwdWI6IHN0cmluZyB9W107XG59XG5cbmZ1bmN0aW9uIHN1cHBvcnRzQWRkcmVzc1R5cGUoY29pbk5hbWU6IFV0eG9Db2luTmFtZSwgYWRkcmVzc1R5cGU6IFNjcmlwdFR5cGUyT2YzKTogYm9vbGVhbiB7XG4gIHJldHVybiBmaXhlZFNjcmlwdFdhbGxldC5zdXBwb3J0c1NjcmlwdFR5cGUoY29pbk5hbWUsIGFkZHJlc3NUeXBlKTtcbn1cblxuLyoqXG4gKiBOb3JtYWxpemUgc2NyaXB0IHR5cGUgYWxpYXNlcy4gXCJwMnRyXCIgaXMgYW4gYWxpYXMgZm9yIFwicDJ0ckxlZ2FjeVwiLlxuICovXG5mdW5jdGlvbiBub3JtYWxpemVTY3JpcHRUeXBlKHNjcmlwdFR5cGU6IFNjcmlwdFR5cGUyT2YzIHwgJ3AydHInKTogU2NyaXB0VHlwZTJPZjMge1xuICByZXR1cm4gc2NyaXB0VHlwZSA9PT0gJ3AydHInID8gJ3AydHJMZWdhY3knIDogc2NyaXB0VHlwZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdlbmVyYXRlQWRkcmVzc1dpdGhDaGFpbkFuZEluZGV4KFxuICBjb2luTmFtZTogVXR4b0NvaW5OYW1lLFxuICBrZXljaGFpbnM6IGZpeGVkU2NyaXB0V2FsbGV0LldhbGxldEtleXNBcmcgfCBUcmlwbGU8c3RyaW5nPixcbiAgY2hhaW46IENoYWluQ29kZSxcbiAgaW5kZXg6IG51bWJlcixcbiAgZm9ybWF0OiBDcmVhdGVBZGRyZXNzRm9ybWF0IHwgdW5kZWZpbmVkXG4pOiBzdHJpbmcge1xuICAvLyBDb252ZXJ0IENyZWF0ZUFkZHJlc3NGb3JtYXQgdG8gQWRkcmVzc0Zvcm1hdCBmb3Igd2FzbS11dHhvXG4gIC8vICdiYXNlNTgnIC0+ICdkZWZhdWx0JywgJ2Nhc2hhZGRyJyAtPiAnY2FzaGFkZHInXG4gIGNvbnN0IHdhc21Gb3JtYXQgPSBmb3JtYXQgPT09ICdiYXNlNTgnID8gJ2RlZmF1bHQnIDogZm9ybWF0O1xuICByZXR1cm4gZml4ZWRTY3JpcHRXYWxsZXQuYWRkcmVzcyhrZXljaGFpbnMsIGNoYWluLCBpbmRleCwgY29pbk5hbWUsIHdhc21Gb3JtYXQpO1xufVxuXG4vKipcbiAqIEdlbmVyYXRlIGFuIGFkZHJlc3MgZm9yIGEgd2FsbGV0IGJhc2VkIG9uIGEgc2V0IG9mIGNvbmZpZ3VyYXRpb25zXG4gKiBAcGFyYW0gcGFyYW1zLmtleWNoYWlucyAgIHtbb2JqZWN0XX0gQXJyYXkgb2Ygb2JqZWN0cyB3aXRoIHhwdWJzXG4gKiBAcGFyYW0gcGFyYW1zLnRocmVzaG9sZCAgIHtudW1iZXJ9ICAgTWluaW11bSBudW1iZXIgb2Ygc2lnbmF0dXJlc1xuICogQHBhcmFtIHBhcmFtcy5jaGFpbiAgICAgICB7bnVtYmVyfSAgIERlcml2YXRpb24gY2hhaW4gKHNlZSBodHRwczovL2dpdGh1Yi5jb20vQml0R28vdW5zcGVudHMvYmxvYi9tYXN0ZXIvc3JjL2NvZGVzLnRzIGZvclxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIGNvcnJlc3BvbmRpbmcgYWRkcmVzcyB0eXBlIG9mIGEgZ2l2ZW4gY2hhaW4gY29kZSlcbiAqIEBwYXJhbSBwYXJhbXMuaW5kZXggICAgICAge251bWJlcn0gICBEZXJpdmF0aW9uIGluZGV4XG4gKiBAcGFyYW0gcGFyYW1zLnNlZ3dpdCAgICAgIHtib29sZWFufSAgRGVwcmVjYXRlZFxuICogQHBhcmFtIHBhcmFtcy5iZWNoMzIgICAgICB7Ym9vbGVhbn0gIERlcHJlY2F0ZWRcbiAqIEByZXR1cm5zIHtzdHJpbmd9IFRoZSBnZW5lcmF0ZWQgYWRkcmVzc1xuICovXG5leHBvcnQgZnVuY3Rpb24gZ2VuZXJhdGVBZGRyZXNzKGNvaW5OYW1lOiBVdHhvQ29pbk5hbWUsIHBhcmFtczogR2VuZXJhdGVGaXhlZFNjcmlwdEFkZHJlc3NPcHRpb25zKTogc3RyaW5nIHtcbiAgbGV0IGRlcml2YXRpb25JbmRleCA9IDA7XG4gIGlmIChfLmlzSW50ZWdlcihwYXJhbXMuaW5kZXgpICYmIChwYXJhbXMuaW5kZXggYXMgbnVtYmVyKSA+IDApIHtcbiAgICBkZXJpdmF0aW9uSW5kZXggPSBwYXJhbXMuaW5kZXggYXMgbnVtYmVyO1xuICB9XG5cbiAgY29uc3QgeyBrZXljaGFpbnMsIGNoYWluLCBzZWd3aXQgPSBmYWxzZSwgYmVjaDMyID0gZmFsc2UgfSA9IHBhcmFtcyBhcyBHZW5lcmF0ZUZpeGVkU2NyaXB0QWRkcmVzc09wdGlvbnM7XG5cbiAgbGV0IGRlcml2YXRpb25DaGFpbjogQ2hhaW5Db2RlID0gZml4ZWRTY3JpcHRXYWxsZXQuQ2hhaW5Db2RlLnZhbHVlKCdwMnNoJywgJ2V4dGVybmFsJyk7XG4gIGlmIChfLmlzTnVtYmVyKGNoYWluKSAmJiBfLmlzSW50ZWdlcihjaGFpbikgJiYgZml4ZWRTY3JpcHRXYWxsZXQuQ2hhaW5Db2RlLmlzKGNoYWluKSkge1xuICAgIGRlcml2YXRpb25DaGFpbiA9IGNoYWluO1xuICB9XG5cbiAgZnVuY3Rpb24gY29udmVydEZsYWdzVG9BZGRyZXNzVHlwZSgpOiBTY3JpcHRUeXBlMk9mMyB7XG4gICAgaWYgKGZpeGVkU2NyaXB0V2FsbGV0LkNoYWluQ29kZS5pcyhjaGFpbikpIHtcbiAgICAgIHJldHVybiBmaXhlZFNjcmlwdFdhbGxldC5DaGFpbkNvZGUuc2NyaXB0VHlwZShjaGFpbik7XG4gICAgfVxuICAgIGlmIChfLmlzQm9vbGVhbihzZWd3aXQpICYmIHNlZ3dpdCkge1xuICAgICAgcmV0dXJuICdwMnNoUDJ3c2gnO1xuICAgIH0gZWxzZSBpZiAoXy5pc0Jvb2xlYW4oYmVjaDMyKSAmJiBiZWNoMzIpIHtcbiAgICAgIHJldHVybiAncDJ3c2gnO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gJ3Ayc2gnO1xuICAgIH1cbiAgfVxuXG4gIGNvbnN0IGFkZHJlc3NUeXBlID0gbm9ybWFsaXplU2NyaXB0VHlwZShjb252ZXJ0RmxhZ3NUb0FkZHJlc3NUeXBlKCkpO1xuXG4gIGlmIChhZGRyZXNzVHlwZSAhPT0gZml4ZWRTY3JpcHRXYWxsZXQuQ2hhaW5Db2RlLnNjcmlwdFR5cGUoZGVyaXZhdGlvbkNoYWluKSkge1xuICAgIHRocm93IG5ldyBBZGRyZXNzVHlwZUNoYWluTWlzbWF0Y2hFcnJvcihhZGRyZXNzVHlwZSwgZGVyaXZhdGlvbkNoYWluKTtcbiAgfVxuXG4gIGlmICghc3VwcG9ydHNBZGRyZXNzVHlwZShjb2luTmFtZSwgYWRkcmVzc1R5cGUpKSB7XG4gICAgc3dpdGNoIChhZGRyZXNzVHlwZSkge1xuICAgICAgY2FzZSAncDJzaCc6XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgaW50ZXJuYWwgZXJyb3I6IHAyc2ggc2hvdWxkIGFsd2F5cyBiZSBzdXBwb3J0ZWRgKTtcbiAgICAgIGNhc2UgJ3Ayc2hQMndzaCc6XG4gICAgICAgIHRocm93IG5ldyBQMnNoUDJ3c2hVbnN1cHBvcnRlZEVycm9yKCk7XG4gICAgICBjYXNlICdwMndzaCc6XG4gICAgICAgIHRocm93IG5ldyBQMndzaFVuc3VwcG9ydGVkRXJyb3IoKTtcbiAgICAgIGNhc2UgJ3AydHInOlxuICAgICAgY2FzZSAncDJ0ckxlZ2FjeSc6XG4gICAgICAgIHRocm93IG5ldyBQMnRyVW5zdXBwb3J0ZWRFcnJvcigpO1xuICAgICAgY2FzZSAncDJ0ck11c2lnMic6XG4gICAgICAgIHRocm93IG5ldyBQMnRyTXVzaWcyVW5zdXBwb3J0ZWRFcnJvcigpO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkQWRkcmVzc1R5cGVFcnJvcigpO1xuICAgIH1cbiAgfVxuXG4gIGlmICghaXNUcmlwbGUoa2V5Y2hhaW5zKSkge1xuICAgIHRocm93IG5ldyBFcnJvcigna2V5Y2hhaW5zIG11c3QgYmUgYSB0cmlwbGUnKTtcbiAgfVxuXG4gIHJldHVybiBnZW5lcmF0ZUFkZHJlc3NXaXRoQ2hhaW5BbmRJbmRleChcbiAgICBjb2luTmFtZSxcbiAgICBrZXljaGFpbnMubWFwKChrKSA9PiBrLnB1YikgYXMgVHJpcGxlPHN0cmluZz4sXG4gICAgZGVyaXZhdGlvbkNoYWluLFxuICAgIGRlcml2YXRpb25JbmRleCxcbiAgICBwYXJhbXMuZm9ybWF0XG4gICk7XG59XG5cbnR5cGUgS2V5Y2hhaW4gPSB7XG4gIHB1Yjogc3RyaW5nO1xufTtcblxuZXhwb3J0IGZ1bmN0aW9uIGFzc2VydEZpeGVkU2NyaXB0V2FsbGV0QWRkcmVzcyhcbiAgY29pbk5hbWU6IFV0eG9Db2luTmFtZSxcbiAge1xuICAgIGNoYWluLFxuICAgIGluZGV4LFxuICAgIGtleWNoYWlucyxcbiAgICBmb3JtYXQsXG4gICAgYWRkcmVzcyxcbiAgfToge1xuICAgIGNoYWluOiBudW1iZXIgfCB1bmRlZmluZWQ7XG4gICAgaW5kZXg6IG51bWJlcjtcbiAgICBrZXljaGFpbnM6IEtleWNoYWluW107XG4gICAgZm9ybWF0OiBDcmVhdGVBZGRyZXNzRm9ybWF0O1xuICAgIGFkZHJlc3M6IHN0cmluZztcbiAgfVxuKTogdm9pZCB7XG4gIGlmICgoXy5pc1VuZGVmaW5lZChjaGFpbikgJiYgXy5pc1VuZGVmaW5lZChpbmRleCkpIHx8ICEoXy5pc0Zpbml0ZShjaGFpbikgJiYgXy5pc0Zpbml0ZShpbmRleCkpKSB7XG4gICAgdGhyb3cgbmV3IEludmFsaWRBZGRyZXNzRGVyaXZhdGlvblByb3BlcnR5RXJyb3IoXG4gICAgICBgYWRkcmVzcyB2YWxpZGF0aW9uIGZhaWx1cmU6IGludmFsaWQgY2hhaW4gKCR7Y2hhaW59KSBvciBpbmRleCAoJHtpbmRleH0pYFxuICAgICk7XG4gIH1cblxuICBpZiAoIWtleWNoYWlucykge1xuICAgIHRocm93IG5ldyBFcnJvcignbWlzc2luZyByZXF1aXJlZCBwYXJhbSBrZXljaGFpbnMnKTtcbiAgfVxuXG4gIGNvbnN0IGV4cGVjdGVkQWRkcmVzcyA9IGdlbmVyYXRlQWRkcmVzcyhjb2luTmFtZSwge1xuICAgIGZvcm1hdCxcbiAgICBrZXljaGFpbnMsXG4gICAgY2hhaW4sXG4gICAgaW5kZXgsXG4gIH0pO1xuXG4gIGlmIChleHBlY3RlZEFkZHJlc3MgIT09IGFkZHJlc3MpIHtcbiAgICB0aHJvdyBuZXcgVW5leHBlY3RlZEFkZHJlc3NFcnJvcihgYWRkcmVzcyB2YWxpZGF0aW9uIGZhaWx1cmU6IGV4cGVjdGVkICR7ZXhwZWN0ZWRBZGRyZXNzfSBidXQgZ290ICR7YWRkcmVzc31gKTtcbiAgfVxufVxuIl19
|
|
108
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZml4ZWRTY3JpcHQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvYWRkcmVzcy9maXhlZFNjcmlwdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQWdEQSw0RUFXQztBQWFELDBDQWlFQztBQU1ELHdFQW9DQztBQW5MRCxvREFBdUI7QUFDdkIsOENBWXlCO0FBQ3pCLGdEQUFxRDtBQXVCckQsU0FBUyxtQkFBbUIsQ0FBQyxRQUFzQixFQUFFLFdBQTJCO0lBQzlFLE9BQU8sNkJBQWlCLENBQUMsa0JBQWtCLENBQUMsUUFBUSxFQUFFLFdBQVcsQ0FBQyxDQUFDO0FBQ3JFLENBQUM7QUFFRDs7R0FFRztBQUNILFNBQVMsbUJBQW1CLENBQUMsVUFBbUM7SUFDOUQsT0FBTyxVQUFVLEtBQUssTUFBTSxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQztBQUMzRCxDQUFDO0FBRUQsU0FBZ0IsZ0NBQWdDLENBQzlDLFFBQXNCLEVBQ3RCLFNBQTJELEVBQzNELEtBQWdCLEVBQ2hCLEtBQWEsRUFDYixNQUF1QztJQUV2Qyw2REFBNkQ7SUFDN0Qsa0RBQWtEO0lBQ2xELE1BQU0sVUFBVSxHQUFHLE1BQU0sS0FBSyxRQUFRLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDO0lBQzVELE9BQU8sNkJBQWlCLENBQUMsT0FBTyxDQUFDLFNBQVMsRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxVQUFVLENBQUMsQ0FBQztBQUNsRixDQUFDO0FBRUQ7Ozs7Ozs7Ozs7R0FVRztBQUNILFNBQWdCLGVBQWUsQ0FBQyxRQUFzQixFQUFFLE1BQXlDO0lBQy9GLElBQUksZUFBZSxHQUFHLENBQUMsQ0FBQztJQUN4QixJQUFJLGdCQUFDLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsSUFBSyxNQUFNLENBQUMsS0FBZ0IsR0FBRyxDQUFDLEVBQUUs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N0MsZUFBZSxFQUNmLGVBQWUsRUFDZixNQUFNLENBQUMsTUFBTSxDQUNkLENBQUM7QUFDSixDQUFDO0FBTUQsU0FBZ0IsOEJBQThCLENBQzVDLFFBQXNCLEVBQ3RCLEVBQ0UsS0FBSyxFQUNMLEtBQUssRUFDTCxTQUFTLEVBQ1QsTUFBTSxFQUNOLE9BQU8sR0FPUjtJQUVELElBQUksQ0FBQyxnQkFBQyxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsSUFBSSxnQkFBQyxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxnQkFBQyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsSUFBSSxnQkFBQyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUM7UUFDaEcsTUFBTSxJQUFJLGdEQUFxQyxDQUM3Qyw4Q0FBOEMsS0FBSyxlQUFlLEtBQUssR0FBRyxDQUMzRSxDQUFDO0lBQ0osQ0FBQztJQUVELElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztRQUNmLE1BQU0sSUFBSSxLQUFLLENBQUMsa0NBQWtDLENBQUMsQ0FBQztJQUN0RCxDQUFDO0lBRUQsTUFBTSxlQUFlLEdBQUcsZUFBZSxDQUFDLFFBQVEsRUFBRTtRQUNoRCxNQUFNO1FBQ04sU0FBUztRQUNULEtBQUs7UUFDTCxLQUFLO0tBQ04sQ0FBQyxDQUFDO0lBRUgsSUFBSSxlQUFlLEtBQUssT0FBTyxFQUFFLENBQUM7UUFDaEMsTUFBTSxJQUFJLGlDQUFzQixDQUFDLHdDQUF3QyxlQUFlLFlBQVksT0FBTyxFQUFFLENBQUMsQ0FBQztJQUNqSCxDQUFDO0FBQ0gsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBfIGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQge1xuICBBZGRyZXNzVHlwZUNoYWluTWlzbWF0Y2hFcnJvcixcbiAgQ3JlYXRlQWRkcmVzc0Zvcm1hdCxcbiAgSW52YWxpZEFkZHJlc3NEZXJpdmF0aW9uUHJvcGVydHlFcnJvcixcbiAgVW5leHBlY3RlZEFkZHJlc3NFcnJvcixcbiAgUDJzaFAyd3NoVW5zdXBwb3J0ZWRFcnJvcixcbiAgUDJ0ck11c2lnMlVuc3VwcG9ydGVkRXJyb3IsXG4gIFAydHJVbnN1cHBvcnRlZEVycm9yLFxuICBQMndzaFVuc3VwcG9ydGVkRXJyb3IsXG4gIFVuc3VwcG9ydGVkQWRkcmVzc1R5cGVFcnJvcixcbiAgaXNUcmlwbGUsXG4gIFRyaXBsZSxcbn0gZnJvbSAnQGJpdGdvL3Nkay1jb3JlJztcbmltcG9ydCB7IGZpeGVkU2NyaXB0V2FsbGV0IH0gZnJvbSAnQGJpdGdvL3dhc20tdXR4byc7XG5cbmltcG9ydCB7IFV0eG9Db2luTmFtZSB9IGZyb20gJy4uL25hbWVzJztcblxudHlwZSBTY3JpcHRUeXBlMk9mMyA9IGZpeGVkU2NyaXB0V2FsbGV0Lk91dHB1dFNjcmlwdFR5cGU7XG50eXBlIENoYWluQ29kZSA9IGZpeGVkU2NyaXB0V2FsbGV0LkNoYWluQ29kZTtcblxuZXhwb3J0IGludGVyZmFjZSBGaXhlZFNjcmlwdEFkZHJlc3NDb2luU3BlY2lmaWMge1xuICBvdXRwdXRTY3JpcHQ/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgR2VuZXJhdGVBZGRyZXNzT3B0aW9ucyB7XG4gIGNoYWluPzogbnVtYmVyO1xuICBpbmRleD86IG51bWJlcjtcbiAgc2Vnd2l0PzogYm9vbGVhbjtcbiAgYmVjaDMyPzogYm9vbGVhbjtcbn1cblxuaW50ZXJmYWNlIEdlbmVyYXRlRml4ZWRTY3JpcHRBZGRyZXNzT3B0aW9ucyBleHRlbmRzIEdlbmVyYXRlQWRkcmVzc09wdGlvbnMge1xuICBmb3JtYXQ/OiBDcmVhdGVBZGRyZXNzRm9ybWF0O1xuICBrZXljaGFpbnM6IHsgcHViOiBzdHJpbmcgfVtdO1xufVxuXG5mdW5jdGlvbiBzdXBwb3J0c0FkZHJlc3NUeXBlKGNvaW5OYW1lOiBVdHhvQ29pbk5hbWUsIGFkZHJlc3NUeXBlOiBTY3JpcHRUeXBlMk9mMyk6IGJvb2xlYW4ge1xuICByZXR1cm4gZml4ZWRTY3JpcHRXYWxsZXQuc3VwcG9ydHNTY3JpcHRUeXBlKGNvaW5OYW1lLCBhZGRyZXNzVHlwZSk7XG59XG5cbi8qKlxuICogTm9ybWFsaXplIHNjcmlwdCB0eXBlIGFsaWFzZXMuIFwicDJ0clwiIGlzIGFuIGFsaWFzIGZvciBcInAydHJMZWdhY3lcIi5cbiAqL1xuZnVuY3Rpb24gbm9ybWFsaXplU2NyaXB0VHlwZShzY3JpcHRUeXBlOiBTY3JpcHRUeXBlMk9mMyB8ICdwMnRyJyk6IFNjcmlwdFR5cGUyT2YzIHtcbiAgcmV0dXJuIHNjcmlwdFR5cGUgPT09ICdwMnRyJyA/ICdwMnRyTGVnYWN5JyA6IHNjcmlwdFR5cGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZW5lcmF0ZUFkZHJlc3NXaXRoQ2hhaW5BbmRJbmRleChcbiAgY29pbk5hbWU6IFV0eG9Db2luTmFtZSxcbiAga2V5Y2hhaW5zOiBmaXhlZFNjcmlwdFdhbGxldC5XYWxsZXRLZXlzQXJnIHwgVHJpcGxlPHN0cmluZz4sXG4gIGNoYWluOiBDaGFpbkNvZGUsXG4gIGluZGV4OiBudW1iZXIsXG4gIGZvcm1hdDogQ3JlYXRlQWRkcmVzc0Zvcm1hdCB8IHVuZGVmaW5lZFxuKTogc3RyaW5nIHtcbiAgLy8gQ29udmVydCBDcmVhdGVBZGRyZXNzRm9ybWF0IHRvIEFkZHJlc3NGb3JtYXQgZm9yIHdhc20tdXR4b1xuICAvLyAnYmFzZTU4JyAtPiAnZGVmYXVsdCcsICdjYXNoYWRkcicgLT4gJ2Nhc2hhZGRyJ1xuICBjb25zdCB3YXNtRm9ybWF0ID0gZm9ybWF0ID09PSAnYmFzZTU4JyA/ICdkZWZhdWx0JyA6IGZvcm1hdDtcbiAgcmV0dXJuIGZpeGVkU2NyaXB0V2FsbGV0LmFkZHJlc3Moa2V5Y2hhaW5zLCBjaGFpbiwgaW5kZXgsIGNvaW5OYW1lLCB3YXNtRm9ybWF0KTtcbn1cblxuLyoqXG4gKiBHZW5lcmF0ZSBhbiBhZGRyZXNzIGZvciBhIHdhbGxldCBiYXNlZCBvbiBhIHNldCBvZiBjb25maWd1cmF0aW9uc1xuICogQHBhcmFtIHBhcmFtcy5rZXljaGFpbnMgICB7W29iamVjdF19IEFycmF5IG9mIG9iamVjdHMgd2l0aCB4cHVic1xuICogQHBhcmFtIHBhcmFtcy50aHJlc2hvbGQgICB7bnVtYmVyfSAgIE1pbmltdW0gbnVtYmVyIG9mIHNpZ25hdHVyZXNcbiAqIEBwYXJhbSBwYXJhbXMuY2hhaW4gICAgICAge251bWJlcn0gICBEZXJpdmF0aW9uIGNoYWluIChzZWUgaHR0cHM6Ly9naXRodWIuY29tL0JpdEdvL3Vuc3BlbnRzL2Jsb2IvbWFzdGVyL3NyYy9jb2Rlcy50cyBmb3JcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBjb3JyZXNwb25kaW5nIGFkZHJlc3MgdHlwZSBvZiBhIGdpdmVuIGNoYWluIGNvZGUpXG4gKiBAcGFyYW0gcGFyYW1zLmluZGV4ICAgICAgIHtudW1iZXJ9ICAgRGVyaXZhdGlvbiBpbmRleFxuICogQHBhcmFtIHBhcmFtcy5zZWd3aXQgICAgICB7Ym9vbGVhbn0gIERlcHJlY2F0ZWRcbiAqIEBwYXJhbSBwYXJhbXMuYmVjaDMyICAgICAge2Jvb2xlYW59ICBEZXByZWNhdGVkXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBUaGUgZ2VuZXJhdGVkIGFkZHJlc3NcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdlbmVyYXRlQWRkcmVzcyhjb2luTmFtZTogVXR4b0NvaW5OYW1lLCBwYXJhbXM6IEdlbmVyYXRlRml4ZWRTY3JpcHRBZGRyZXNzT3B0aW9ucyk6IHN0cmluZyB7XG4gIGxldCBkZXJpdmF0aW9uSW5kZXggPSAwO1xuICBpZiAoXy5pc0ludGVnZXIocGFyYW1zLmluZGV4KSAmJiAocGFyYW1zLmluZGV4IGFzIG51bWJlcikgPiAwKSB7XG4gICAgZGVyaXZhdGlvbkluZGV4ID0gcGFyYW1zLmluZGV4IGFzIG51bWJlcjtcbiAgfVxuXG4gIGNvbnN0IHsga2V5Y2hhaW5zLCBjaGFpbiwgc2Vnd2l0ID0gZmFsc2UsIGJlY2gzMiA9IGZhbHNlIH0gPSBwYXJhbXMgYXMgR2VuZXJhdGVGaXhlZFNjcmlwdEFkZHJlc3NPcHRpb25zO1xuXG4gIGlmIChfLmlzTnVtYmVyKGNoYWluKSAmJiBfLmlzSW50ZWdlcihjaGFpbikgJiYgIWZpeGVkU2NyaXB0V2FsbGV0LkNoYWluQ29kZS5pcyhjaGFpbikpIHtcbiAgICB0aHJvdyBuZXcgSW52YWxpZEFkZHJlc3NEZXJpdmF0aW9uUHJvcGVydHlFcnJvcihgYWRkcmVzcyB2YWxpZGF0aW9uIGZhaWx1cmU6IHVucmVjb2duaXNlZCBjaGFpbiBjb2RlICgke2NoYWlufSlgKTtcbiAgfVxuXG4gIGxldCBkZXJpdmF0aW9uQ2hhaW46IENoYWluQ29kZSA9IGZpeGVkU2NyaXB0V2FsbGV0LkNoYWluQ29kZS52YWx1ZSgncDJzaCcsICdleHRlcm5hbCcpO1xuICBpZiAoXy5pc051bWJlcihjaGFpbikgJiYgXy5pc0ludGVnZXIoY2hhaW4pICYmIGZpeGVkU2NyaXB0V2FsbGV0LkNoYWluQ29kZS5pcyhjaGFpbikpIHtcbiAgICBkZXJpdmF0aW9uQ2hhaW4gPSBjaGFpbjtcbiAgfVxuXG4gIGZ1bmN0aW9uIGNvbnZlcnRGbGFnc1RvQWRkcmVzc1R5cGUoKTogU2NyaXB0VHlwZTJPZjMge1xuICAgIGlmIChmaXhlZFNjcmlwdFdhbGxldC5DaGFpbkNvZGUuaXMoY2hhaW4pKSB7XG4gICAgICByZXR1cm4gZml4ZWRTY3JpcHRXYWxsZXQuQ2hhaW5Db2RlLnNjcmlwdFR5cGUoY2hhaW4pO1xuICAgIH1cbiAgICBpZiAoXy5pc0Jvb2xlYW4oc2Vnd2l0KSAmJiBzZWd3aXQpIHtcbiAgICAgIHJldHVybiAncDJzaFAyd3NoJztcbiAgICB9IGVsc2UgaWYgKF8uaXNCb29sZWFuKGJlY2gzMikgJiYgYmVjaDMyKSB7XG4gICAgICByZXR1cm4gJ3Ayd3NoJztcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuICdwMnNoJztcbiAgICB9XG4gIH1cblxuICBjb25zdCBhZGRyZXNzVHlwZSA9IG5vcm1hbGl6ZVNjcmlwdFR5cGUoY29udmVydEZsYWdzVG9BZGRyZXNzVHlwZSgpKTtcblxuICBpZiAoYWRkcmVzc1R5cGUgIT09IGZpeGVkU2NyaXB0V2FsbGV0LkNoYWluQ29kZS5zY3JpcHRUeXBlKGRlcml2YXRpb25DaGFpbikpIHtcbiAgICB0aHJvdyBuZXcgQWRkcmVzc1R5cGVDaGFpbk1pc21hdGNoRXJyb3IoYWRkcmVzc1R5cGUsIGRlcml2YXRpb25DaGFpbik7XG4gIH1cblxuICBpZiAoIXN1cHBvcnRzQWRkcmVzc1R5cGUoY29pbk5hbWUsIGFkZHJlc3NUeXBlKSkge1xuICAgIHN3aXRjaCAoYWRkcmVzc1R5cGUpIHtcbiAgICAgIGNhc2UgJ3Ayc2gnOlxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYGludGVybmFsIGVycm9yOiBwMnNoIHNob3VsZCBhbHdheXMgYmUgc3VwcG9ydGVkYCk7XG4gICAgICBjYXNlICdwMnNoUDJ3c2gnOlxuICAgICAgICB0aHJvdyBuZXcgUDJzaFAyd3NoVW5zdXBwb3J0ZWRFcnJvcigpO1xuICAgICAgY2FzZSAncDJ3c2gnOlxuICAgICAgICB0aHJvdyBuZXcgUDJ3c2hVbnN1cHBvcnRlZEVycm9yKCk7XG4gICAgICBjYXNlICdwMnRyJzpcbiAgICAgIGNhc2UgJ3AydHJMZWdhY3knOlxuICAgICAgICB0aHJvdyBuZXcgUDJ0clVuc3VwcG9ydGVkRXJyb3IoKTtcbiAgICAgIGNhc2UgJ3AydHJNdXNpZzInOlxuICAgICAgICB0aHJvdyBuZXcgUDJ0ck11c2lnMlVuc3VwcG9ydGVkRXJyb3IoKTtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZEFkZHJlc3NUeXBlRXJyb3IoKTtcbiAgICB9XG4gIH1cblxuICBpZiAoIWlzVHJpcGxlKGtleWNoYWlucykpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ2tleWNoYWlucyBtdXN0IGJlIGEgdHJpcGxlJyk7XG4gIH1cblxuICByZXR1cm4gZ2VuZXJhdGVBZGRyZXNzV2l0aENoYWluQW5kSW5kZXgoXG4gICAgY29pbk5hbWUsXG4gICAga2V5Y2hhaW5zLm1hcCgoaykgPT4gay5wdWIpIGFzIFRyaXBsZTxzdHJpbmc+LFxuICAgIGRlcml2YXRpb25DaGFpbixcbiAgICBkZXJpdmF0aW9uSW5kZXgsXG4gICAgcGFyYW1zLmZvcm1hdFxuICApO1xufVxuXG50eXBlIEtleWNoYWluID0ge1xuICBwdWI6IHN0cmluZztcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBhc3NlcnRGaXhlZFNjcmlwdFdhbGxldEFkZHJlc3MoXG4gIGNvaW5OYW1lOiBVdHhvQ29pbk5hbWUsXG4gIHtcbiAgICBjaGFpbixcbiAgICBpbmRleCxcbiAgICBrZXljaGFpbnMsXG4gICAgZm9ybWF0LFxuICAgIGFkZHJlc3MsXG4gIH06IHtcbiAgICBjaGFpbjogbnVtYmVyIHwgdW5kZWZpbmVkO1xuICAgIGluZGV4OiBudW1iZXI7XG4gICAga2V5Y2hhaW5zOiBLZXljaGFpbltdO1xuICAgIGZvcm1hdDogQ3JlYXRlQWRkcmVzc0Zvcm1hdDtcbiAgICBhZGRyZXNzOiBzdHJpbmc7XG4gIH1cbik6IHZvaWQge1xuICBpZiAoKF8uaXNVbmRlZmluZWQoY2hhaW4pICYmIF8uaXNVbmRlZmluZWQoaW5kZXgpKSB8fCAhKF8uaXNGaW5pdGUoY2hhaW4pICYmIF8uaXNGaW5pdGUoaW5kZXgpKSkge1xuICAgIHRocm93IG5ldyBJbnZhbGlkQWRkcmVzc0Rlcml2YXRpb25Qcm9wZXJ0eUVycm9yKFxuICAgICAgYGFkZHJlc3MgdmFsaWRhdGlvbiBmYWlsdXJlOiBpbnZhbGlkIGNoYWluICgke2NoYWlufSkgb3IgaW5kZXggKCR7aW5kZXh9KWBcbiAgICApO1xuICB9XG5cbiAgaWYgKCFrZXljaGFpbnMpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ21pc3NpbmcgcmVxdWlyZWQgcGFyYW0ga2V5Y2hhaW5zJyk7XG4gIH1cblxuICBjb25zdCBleHBlY3RlZEFkZHJlc3MgPSBnZW5lcmF0ZUFkZHJlc3MoY29pbk5hbWUsIHtcbiAgICBmb3JtYXQsXG4gICAga2V5Y2hhaW5zLFxuICAgIGNoYWluLFxuICAgIGluZGV4LFxuICB9KTtcblxuICBpZiAoZXhwZWN0ZWRBZGRyZXNzICE9PSBhZGRyZXNzKSB7XG4gICAgdGhyb3cgbmV3IFVuZXhwZWN0ZWRBZGRyZXNzRXJyb3IoYGFkZHJlc3MgdmFsaWRhdGlvbiBmYWlsdXJlOiBleHBlY3RlZCAke2V4cGVjdGVkQWRkcmVzc30gYnV0IGdvdCAke2FkZHJlc3N9YCk7XG4gIH1cbn1cbiJdfQ==
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { BIP32 } from '@bitgo/wasm-utxo';
|
|
2
|
+
/**
|
|
3
|
+
* Derive a child key from `key` using a path determined by `seed`.
|
|
4
|
+
*
|
|
5
|
+
* Mirrors `BaseCoin.deriveKeyWithSeedBip32` from sdk-core but operates on
|
|
6
|
+
* wasm-utxo's BIP32 class (which has the same `derivePath` semantics).
|
|
7
|
+
*/
|
|
8
|
+
export declare function deriveKeyWithSeed(key: BIP32, seed: string): {
|
|
9
|
+
key: BIP32;
|
|
10
|
+
derivationPath: string;
|
|
11
|
+
};
|
|
12
|
+
//# sourceMappingURL=deriveKeyWithSeed.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"deriveKeyWithSeed.d.ts","sourceRoot":"","sources":["../../../src/deriveKeyWithSeed.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AAE9C;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,GAAG;IAAE,GAAG,EAAE,KAAK,CAAC;IAAC,cAAc,EAAE,MAAM,CAAA;CAAE,CAQlG"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.deriveKeyWithSeed = deriveKeyWithSeed;
|
|
4
|
+
const crypto_1 = require("crypto");
|
|
5
|
+
/**
|
|
6
|
+
* Derive a child key from `key` using a path determined by `seed`.
|
|
7
|
+
*
|
|
8
|
+
* Mirrors `BaseCoin.deriveKeyWithSeedBip32` from sdk-core but operates on
|
|
9
|
+
* wasm-utxo's BIP32 class (which has the same `derivePath` semantics).
|
|
10
|
+
*/
|
|
11
|
+
function deriveKeyWithSeed(key, seed) {
|
|
12
|
+
const sha = (input) => (0, crypto_1.createHash)('sha256').update(input).digest();
|
|
13
|
+
const derivationPathInput = sha(sha(seed)).toString('hex');
|
|
14
|
+
const derivationPath = `m/999999/${parseInt(derivationPathInput.slice(0, 7), 16)}/${parseInt(derivationPathInput.slice(7, 14), 16)}`;
|
|
15
|
+
return { key: key.derivePath(derivationPath), derivationPath };
|
|
16
|
+
}
|
|
17
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVyaXZlS2V5V2l0aFNlZWQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvZGVyaXZlS2V5V2l0aFNlZWQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFVQSw4Q0FRQztBQWxCRCxtQ0FBb0M7QUFJcEM7Ozs7O0dBS0c7QUFDSCxTQUFnQixpQkFBaUIsQ0FBQyxHQUFVLEVBQUUsSUFBWTtJQUN4RCxNQUFNLEdBQUcsR0FBRyxDQUFDLEtBQXNCLEVBQVUsRUFBRSxDQUFDLElBQUEsbUJBQVUsRUFBQyxRQUFRLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUM7SUFDNUYsTUFBTSxtQkFBbUIsR0FBRyxHQUFHLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzNELE1BQU0sY0FBYyxHQUFHLFlBQVksUUFBUSxDQUFDLG1CQUFtQixDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLElBQUksUUFBUSxDQUMxRixtQkFBbUIsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUNoQyxFQUFFLENBQ0gsRUFBRSxDQUFDO0lBQ0osT0FBTyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsVUFBVSxDQUFDLGNBQWMsQ0FBQyxFQUFFLGNBQWMsRUFBRSxDQUFDO0FBQ2pFLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBjcmVhdGVIYXNoIH0gZnJvbSAnY3J5cHRvJztcblxuaW1wb3J0IHR5cGUgeyBCSVAzMiB9IGZyb20gJ0BiaXRnby93YXNtLXV0eG8nO1xuXG4vKipcbiAqIERlcml2ZSBhIGNoaWxkIGtleSBmcm9tIGBrZXlgIHVzaW5nIGEgcGF0aCBkZXRlcm1pbmVkIGJ5IGBzZWVkYC5cbiAqXG4gKiBNaXJyb3JzIGBCYXNlQ29pbi5kZXJpdmVLZXlXaXRoU2VlZEJpcDMyYCBmcm9tIHNkay1jb3JlIGJ1dCBvcGVyYXRlcyBvblxuICogd2FzbS11dHhvJ3MgQklQMzIgY2xhc3MgKHdoaWNoIGhhcyB0aGUgc2FtZSBgZGVyaXZlUGF0aGAgc2VtYW50aWNzKS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRlcml2ZUtleVdpdGhTZWVkKGtleTogQklQMzIsIHNlZWQ6IHN0cmluZyk6IHsga2V5OiBCSVAzMjsgZGVyaXZhdGlvblBhdGg6IHN0cmluZyB9IHtcbiAgY29uc3Qgc2hhID0gKGlucHV0OiBzdHJpbmcgfCBCdWZmZXIpOiBCdWZmZXIgPT4gY3JlYXRlSGFzaCgnc2hhMjU2JykudXBkYXRlKGlucHV0KS5kaWdlc3QoKTtcbiAgY29uc3QgZGVyaXZhdGlvblBhdGhJbnB1dCA9IHNoYShzaGEoc2VlZCkpLnRvU3RyaW5nKCdoZXgnKTtcbiAgY29uc3QgZGVyaXZhdGlvblBhdGggPSBgbS85OTk5OTkvJHtwYXJzZUludChkZXJpdmF0aW9uUGF0aElucHV0LnNsaWNlKDAsIDcpLCAxNil9LyR7cGFyc2VJbnQoXG4gICAgZGVyaXZhdGlvblBhdGhJbnB1dC5zbGljZSg3LCAxNCksXG4gICAgMTZcbiAgKX1gO1xuICByZXR1cm4geyBrZXk6IGtleS5kZXJpdmVQYXRoKGRlcml2YXRpb25QYXRoKSwgZGVyaXZhdGlvblBhdGggfTtcbn1cbiJdfQ==
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { IWallet, WalletCoinSpecific } from '@bitgo/sdk-core';
|
|
2
2
|
import { UtxoWallet, UtxoWalletData } from '../wallet';
|
|
3
|
-
import type { DescriptorMap } from '../wasmUtil';
|
|
4
3
|
import { NamedDescriptor } from './NamedDescriptor';
|
|
5
4
|
import { DescriptorValidationPolicy, KeyTriple } from './validatePolicy';
|
|
5
|
+
import type { DescriptorMap } from './index';
|
|
6
6
|
type DescriptorWalletCoinSpecific = {
|
|
7
7
|
descriptors: NamedDescriptor[];
|
|
8
8
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"descriptorWallet.d.ts","sourceRoot":"","sources":["../../../../src/descriptor/descriptorWallet.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AAE9D,OAAO,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"descriptorWallet.d.ts","sourceRoot":"","sources":["../../../../src/descriptor/descriptorWallet.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AAE9D,OAAO,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAEvD,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,0BAA0B,EAAE,SAAS,EAA2B,MAAM,kBAAkB,CAAC;AAElG,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAE7C,KAAK,4BAA4B,GAAG;IAClC,WAAW,EAAE,eAAe,EAAE,CAAC;CAChC,CAAC;AAQF,KAAK,oBAAoB,GAAG,cAAc,GAAG;IAC3C,YAAY,EAAE,4BAA4B,CAAC;CAC5C,CAAC;AAEF,MAAM,WAAW,iBAAkB,SAAQ,UAAU;IACnD,YAAY,IAAI,kBAAkB,GAAG,4BAA4B,CAAC;CACnE;AAED,wBAAgB,sBAAsB,CAAC,GAAG,EAAE,cAAc,GAAG,GAAG,IAAI,oBAAoB,CAEvF;AAED,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,OAAO,GAAG,GAAG,IAAI,iBAAiB,CAEzE;AAED,wBAAgB,0BAA0B,CACxC,MAAM,EAAE,iBAAiB,EACzB,UAAU,EAAE,SAAS,EACrB,MAAM,EAAE,0BAA0B,GACjC,aAAa,CAEf"}
|