@bitgo/sdk-core 37.8.0 → 37.10.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/src/account-lib/baseCoin/enum.d.ts +26 -23
- package/dist/src/account-lib/baseCoin/enum.d.ts.map +1 -1
- package/dist/src/account-lib/baseCoin/enum.js +31 -24
- package/dist/src/bitgo/address-book/address-book.d.ts.map +1 -1
- package/dist/src/bitgo/address-book/address-book.js +16 -5
- package/dist/src/bitgo/baseCoin/iBaseCoin.d.ts +10 -0
- package/dist/src/bitgo/baseCoin/iBaseCoin.d.ts.map +1 -1
- package/dist/src/bitgo/baseCoin/iBaseCoin.js +1 -1
- package/dist/src/bitgo/defi/defiVault.d.ts +9 -2
- package/dist/src/bitgo/defi/defiVault.d.ts.map +1 -1
- package/dist/src/bitgo/defi/defiVault.js +28 -4
- package/dist/src/bitgo/utils/mpcUtils.d.ts.map +1 -1
- package/dist/src/bitgo/utils/mpcUtils.js +26 -2
- package/dist/src/bitgo/utils/tss/baseTSSUtils.d.ts +7 -1
- package/dist/src/bitgo/utils/tss/baseTSSUtils.d.ts.map +1 -1
- package/dist/src/bitgo/utils/tss/baseTSSUtils.js +31 -3
- package/dist/src/bitgo/utils/tss/baseTypes.d.ts +33 -0
- package/dist/src/bitgo/utils/tss/baseTypes.d.ts.map +1 -1
- package/dist/src/bitgo/utils/tss/baseTypes.js +1 -1
- package/dist/src/bitgo/utils/tss/ecdsa/ecdsa.d.ts.map +1 -1
- package/dist/src/bitgo/utils/tss/ecdsa/ecdsa.js +4 -3
- package/dist/src/bitgo/utils/tss/ecdsa/ecdsaMPCv2.d.ts.map +1 -1
- package/dist/src/bitgo/utils/tss/ecdsa/ecdsaMPCv2.js +4 -3
- package/dist/src/bitgo/utils/tss/eddsa/eddsaMPCv2.d.ts +19 -1
- package/dist/src/bitgo/utils/tss/eddsa/eddsaMPCv2.d.ts.map +1 -1
- package/dist/src/bitgo/utils/tss/eddsa/eddsaMPCv2.js +36 -14
- package/dist/src/bitgo/utils/tss/index.d.ts +1 -0
- package/dist/src/bitgo/utils/tss/index.d.ts.map +1 -1
- package/dist/src/bitgo/utils/tss/index.js +2 -1
- package/dist/src/bitgo/utils/tss/recipientUtils.d.ts +33 -0
- package/dist/src/bitgo/utils/tss/recipientUtils.d.ts.map +1 -0
- package/dist/src/bitgo/utils/tss/recipientUtils.js +117 -0
- package/dist/src/bitgo/wallet/iWallet.d.ts +17 -0
- package/dist/src/bitgo/wallet/iWallet.d.ts.map +1 -1
- package/dist/src/bitgo/wallet/iWallet.js +1 -1
- package/dist/src/bitgo/wallet/wallet.d.ts.map +1 -1
- package/dist/src/bitgo/wallet/wallet.js +72 -4
- package/dist/test/unit/bitgo/address-book/address-book.d.ts +2 -0
- package/dist/test/unit/bitgo/address-book/address-book.d.ts.map +1 -0
- package/dist/test/unit/bitgo/address-book/address-book.js +159 -0
- package/dist/test/unit/bitgo/defi/defiVault.js +61 -6
- package/dist/test/unit/bitgo/utils/tss/baseTSSUtils.js +84 -1
- package/dist/test/unit/bitgo/utils/tss/ecdsa/ecdsaMPCv2.js +3 -1
- package/dist/test/unit/bitgo/utils/tss/eddsa/eddsaMPCv2.js +18 -14
- package/dist/test/unit/bitgo/utils/tss/recipientUtils.d.ts +2 -0
- package/dist/test/unit/bitgo/utils/tss/recipientUtils.d.ts.map +1 -0
- package/dist/test/unit/bitgo/utils/tss/recipientUtils.js +171 -0
- package/dist/test/unit/bitgo/wallet/tokenApproval.js +67 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +3 -3
|
@@ -230,6 +230,89 @@ describe('Base TSS Utils', function () {
|
|
|
230
230
|
await assert.rejects(baseTssUtils.getBitgoAndUserGpgKeysForTest(bitgoGpgKeyPair.publicKey, 'not-valid-json', walletPassphrase, 'test-adata', signingUserGpgKeyDomainSeparator), /json decode|Failed to parse cyphertext to JSON/);
|
|
231
231
|
});
|
|
232
232
|
});
|
|
233
|
+
describe('recreateTxRequest', function () {
|
|
234
|
+
function makeWallet(multisigTypeVersion) {
|
|
235
|
+
return {
|
|
236
|
+
id: sinon.stub().returns('wallet-id'),
|
|
237
|
+
multisigTypeVersion: sinon.stub().returns(multisigTypeVersion),
|
|
238
|
+
};
|
|
239
|
+
}
|
|
240
|
+
function makeCoin(mpcAlgorithm, chain = 'tsol') {
|
|
241
|
+
const coin = {};
|
|
242
|
+
coin.getHashFunction = sinon.stub();
|
|
243
|
+
coin.getMPCAlgorithm = sinon.stub().returns(mpcAlgorithm);
|
|
244
|
+
coin.getChain = sinon.stub().returns(chain);
|
|
245
|
+
return coin;
|
|
246
|
+
}
|
|
247
|
+
it('derives txParams from intent for EdDSA MPCv2 wallets', async function () {
|
|
248
|
+
const txRequestId = 'tx-req-id-1';
|
|
249
|
+
const reqId = new src_1.RequestTracer();
|
|
250
|
+
const txRequest = buildTxRequest({
|
|
251
|
+
txRequestId,
|
|
252
|
+
intent: {
|
|
253
|
+
intentType: 'payment',
|
|
254
|
+
recipients: [{ address: { address: 'solAddr1' }, amount: { value: '5000000', symbol: 'tsol' } }],
|
|
255
|
+
},
|
|
256
|
+
});
|
|
257
|
+
const utils = new TestBaseTssUtils(mockBitgo, makeCoin('eddsa'), makeWallet('MPCv2'));
|
|
258
|
+
sinon.stub(utils, 'deleteSignatureShares').resolves();
|
|
259
|
+
sinon.stub(utils, 'getTxRequest').resolves(txRequest);
|
|
260
|
+
const signTxRequestStub = sinon.stub(utils, 'signTxRequest').resolves(txRequest);
|
|
261
|
+
await utils.recreateTxRequest(txRequestId, 'prv', reqId);
|
|
262
|
+
// Native SOL: symbol equals the chain name, so tokenName must be omitted
|
|
263
|
+
assert.deepStrictEqual(signTxRequestStub.firstCall.args[0].txParams, {
|
|
264
|
+
recipients: [{ address: 'solAddr1', amount: '5000000' }],
|
|
265
|
+
});
|
|
266
|
+
});
|
|
267
|
+
it('sets tokenName for SPL tokens (symbol differs from chain name)', async function () {
|
|
268
|
+
const txRequestId = 'tx-req-id-spl';
|
|
269
|
+
const reqId = new src_1.RequestTracer();
|
|
270
|
+
const txRequest = buildTxRequest({
|
|
271
|
+
txRequestId,
|
|
272
|
+
intent: {
|
|
273
|
+
intentType: 'payment',
|
|
274
|
+
recipients: [{ address: { address: 'splAddr1' }, amount: { value: '1000', symbol: 'tsol:usdc' } }],
|
|
275
|
+
},
|
|
276
|
+
});
|
|
277
|
+
const utils = new TestBaseTssUtils(mockBitgo, makeCoin('eddsa', 'tsol'), makeWallet('MPCv2'));
|
|
278
|
+
sinon.stub(utils, 'deleteSignatureShares').resolves();
|
|
279
|
+
sinon.stub(utils, 'getTxRequest').resolves(txRequest);
|
|
280
|
+
const signTxRequestStub = sinon.stub(utils, 'signTxRequest').resolves(txRequest);
|
|
281
|
+
await utils.recreateTxRequest(txRequestId, 'prv', reqId);
|
|
282
|
+
// SPL token: symbol differs from chain name, so tokenName must be set
|
|
283
|
+
assert.deepStrictEqual(signTxRequestStub.firstCall.args[0].txParams, {
|
|
284
|
+
recipients: [{ address: 'splAddr1', amount: '1000', tokenName: 'tsol:usdc' }],
|
|
285
|
+
});
|
|
286
|
+
});
|
|
287
|
+
it('passes undefined txParams for EdDSA MPCv2 when intent has no recipients', async function () {
|
|
288
|
+
const txRequestId = 'tx-req-id-2';
|
|
289
|
+
const reqId = new src_1.RequestTracer();
|
|
290
|
+
const txRequest = buildTxRequest({ txRequestId, intent: { intentType: 'enableToken' } });
|
|
291
|
+
const utils = new TestBaseTssUtils(mockBitgo, makeCoin('eddsa'), makeWallet('MPCv2'));
|
|
292
|
+
sinon.stub(utils, 'deleteSignatureShares').resolves();
|
|
293
|
+
sinon.stub(utils, 'getTxRequest').resolves(txRequest);
|
|
294
|
+
const signTxRequestStub = sinon.stub(utils, 'signTxRequest').resolves(txRequest);
|
|
295
|
+
await utils.recreateTxRequest(txRequestId, 'prv', reqId);
|
|
296
|
+
assert.strictEqual(signTxRequestStub.firstCall.args[0].txParams, undefined);
|
|
297
|
+
});
|
|
298
|
+
it('passes undefined txParams for ECDSA MPCv2 wallets (guard does not apply)', async function () {
|
|
299
|
+
const txRequestId = 'tx-req-id-3';
|
|
300
|
+
const reqId = new src_1.RequestTracer();
|
|
301
|
+
const txRequest = buildTxRequest({
|
|
302
|
+
txRequestId,
|
|
303
|
+
intent: {
|
|
304
|
+
intentType: 'payment',
|
|
305
|
+
recipients: [{ address: { address: 'ethAddr1' }, amount: { value: '1000000', symbol: 'eth' } }],
|
|
306
|
+
},
|
|
307
|
+
});
|
|
308
|
+
const utils = new TestBaseTssUtils(mockBitgo, makeCoin('ecdsa'), makeWallet('MPCv2'));
|
|
309
|
+
sinon.stub(utils, 'deleteSignatureShares').resolves();
|
|
310
|
+
sinon.stub(utils, 'getTxRequest').resolves(txRequest);
|
|
311
|
+
const signTxRequestStub = sinon.stub(utils, 'signTxRequest').resolves(txRequest);
|
|
312
|
+
await utils.recreateTxRequest(txRequestId, 'prv', reqId);
|
|
313
|
+
assert.strictEqual(signTxRequestStub.firstCall.args[0].txParams, undefined);
|
|
314
|
+
});
|
|
315
|
+
});
|
|
233
316
|
describe('ECDSA MPC v2 delegated txRequest parsing', function () {
|
|
234
317
|
it('getHashStringAndDerivationPath produces the correct hashBuffer and derivationPath', async function () {
|
|
235
318
|
const signableHex = 'deadbeef';
|
|
@@ -313,4 +396,4 @@ function bytesToWord(bytes) {
|
|
|
313
396
|
}
|
|
314
397
|
return bytes.reduce((num, byte) => num * 0x100 + byte, 0);
|
|
315
398
|
}
|
|
316
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZVRTU1V0aWxzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vdGVzdC91bml0L2JpdGdvL3V0aWxzL3Rzcy9iYXNlVFNTVXRpbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSwrQ0FBaUM7QUFDakMsbUNBQTJDO0FBQzNDLG9EQUFzQztBQUN0QyxpREFBbUM7QUFDbkMsNkNBQStCO0FBQy9CLGtEQUFvQztBQUNwQyxvREFBK0M7QUFFL0MsNENBQXNGO0FBQ3RGLG1HQUEyRTtBQVkzRSxNQUFNLGdCQUFpQixTQUFRLHNCQUFvQjtJQUNqRCxzQ0FBc0MsQ0FDcEMsU0FBb0IsRUFDcEIsMEJBQW1DO1FBRW5DLE9BQU8sSUFBSSxDQUFDLCtCQUErQixDQUFDLFNBQVMsRUFBRSwwQkFBMEIsQ0FBQyxDQUFDO0lBQ3JGLENBQUM7SUFFRCxvQkFBb0IsQ0FBQyxLQUFhLEVBQUUsVUFBa0IsRUFBRSxvQkFBNEI7UUFDbEYsSUFBSSxDQUFDLGFBQWEsQ0FBQyxLQUFLLEVBQUUsVUFBVSxFQUFFLG9CQUFvQixDQUFDLENBQUM7SUFDOUQsQ0FBQztJQUVELDZCQUE2QixDQUMzQixpQkFBeUIsRUFDekIsc0JBQThCLEVBQzlCLGdCQUF3QixFQUN4QixLQUFhLEVBQ2IseUJBQWlDO1FBRWpDLE9BQU8sSUFBSSxDQUFDLHNCQUFzQixDQUNoQyxpQkFBaUIsRUFDakIsc0JBQXNCLEVBQ3RCLGdCQUFnQixFQUNoQixLQUFLLEVBQ0wseUJBQXlCLENBQzFCLENBQUM7SUFDSixDQUFDO0NBQ0Y7QUFFRCxRQUFRLENBQUMsZ0JBQWdCLEVBQUU7SUFDekIsTUFBTSxnQkFBZ0IsR0FBRyxlQUFlLENBQUM7SUFDekMsTUFBTSxnQ0FBZ0MsR0FBRyw4QkFBOEIsQ0FBQztJQUN4RSxNQUFNLHVCQUF1QixHQUFHLDhCQUE4QixDQUFDO0lBRS9ELElBQUksWUFBOEIs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QyxDQUFDO1lBQzlCLFdBQVcsQ0FBQyxFQUFFLENBQUMsUUFBUSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztZQUMvQixXQUFXLENBQUMsRUFBRSxDQUFDLFFBQVEsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUM7U0FDakM7UUFDRCxHQUFHLENBQUMsS0FBSyxLQUFLLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO0tBQzFDLENBQUMsQ0FBQztBQUNMLENBQUM7QUFFRCxTQUFTLFdBQVcsQ0FBQyxLQUFpQjtJQUNwQyxJQUFJLEtBQUssQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFLENBQUM7UUFDdkIsTUFBTSxJQUFJLEtBQUssQ0FBQywwQkFBMEIsQ0FBQyxDQUFDO0lBQzlDLENBQUM7SUFDRCxPQUFPLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxHQUFHLEVBQUUsSUFBSSxFQUFFLEVBQUUsQ0FBQyxHQUFHLEdBQUcsS0FBSyxHQUFHLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQztBQUM1RCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgYXNzZXJ0IGZyb20gJ2Fzc2VydCc7XG5pbXBvcnQgeyBIYXNoLCByYW5kb21CeXRlcyB9IGZyb20gJ2NyeXB0byc7XG5pbXBvcnQgY3JlYXRlS2VjY2FrSGFzaCBmcm9tICdrZWNjYWsnO1xuaW1wb3J0ICogYXMgb3BlbnBncCBmcm9tICdvcGVucGdwJztcbmltcG9ydCAqIGFzIHNpbm9uIGZyb20gJ3Npbm9uJztcbmltcG9ydCAqIGFzIHNqY2wgZnJvbSAnQGJpdGdvL3NqY2wnO1xuaW1wb3J0IHsgRGtsc1V0aWxzIH0gZnJvbSAnQGJpdGdvL3Nkay1saWItbXBjJztcblxuaW1wb3J0IHsgQml0R29CYXNlLCBFY2RzYU1QQ3YyVXRpbHMsIElCYXNlQ29pbiwgVHhSZXF1ZXN0IH0gZnJvbSAnLi4vLi4vLi4vLi4vLi4vc3JjJztcbmltcG9ydCBCYXNlVHNzVXRpbHMgZnJvbSAnLi4vLi4vLi4vLi4vLi4vc3JjL2JpdGdvL3V0aWxzL3Rzcy9iYXNlVFNTVXRpbHMnO1xuXG50eXBlIEJpdGdvR3BnS2V5UGFpciA9IG9wZW5wZ3AuU2VyaWFsaXplZEtleVBhaXI8c3RyaW5nPiAmIHsgcmV2b2NhdGlvbkNlcnRpZmljYXRlOiBzdHJpbmcgfTtcbnR5cGUgVHhSZXF1ZXN0VHJhbnNhY3Rpb24gPSBOb25OdWxsYWJsZTxUeFJlcXVlc3RbJ3RyYW5zYWN0aW9ucyddPltudW1iZXJdO1xudHlwZSBVbnNpZ25lZFRyYW5zYWN0aW9uID0gVHhSZXF1ZXN0VHJhbnNhY3Rpb25bJ3Vuc2lnbmVkVHgnXTtcbnR5cGUgU2lnbmFibGVIZXhBbmREZXJpdmF0aW9uUGF0aCA9IHtcbiAgc2lnbmFibGVIZXg6IHN0cmluZztcbiAgZGVyaXZhdGlvblBhdGg6IHN0cmluZztcbiAgc2VyaWFsaXplZFR4SGV4OiBzdHJpbmcgfCB1bmRlZmluZWQ7XG59O1xudHlwZSBEZWNyeXB0ZWRHcGdLZXlzID0geyBiaXRnb0dwZ0tleTogb3BlbnBncC5LZXk7IHVzZXJHcGdQcnZLZXk6IG9wZW5wZ3AuUHJpdmF0ZUtleSB9O1xuXG5jbGFzcyBUZXN0QmFzZVRzc1V0aWxzIGV4dGVuZHMgQmFzZVRzc1V0aWxzPEJ1ZmZlcj4ge1xuICBnZXRTaWduYWJsZUhleEFuZERlcml2YXRpb25QYXRoRm9yVGVzdChcbiAgICB0eFJlcXVlc3Q6IFR4UmVxdWVzdCxcbiAgICBtaXNzaW5nVHJhbnNhY3Rpb25zTWVzc2FnZT86IHN0cmluZ1xuICApOiBTaWduYWJsZUhleEFuZERlcml2YXRpb25QYXRoIHtcbiAgICByZXR1cm4gdGhpcy5nZXRTaWduYWJsZUhleEFuZERlcml2YXRpb25QYXRoKHR4UmVxdWVzdCwgbWlzc2luZ1RyYW5zYWN0aW9uc01lc3NhZ2UpO1xuICB9XG5cbiAgdmFsaWRhdGVBZGF0YUZvclRlc3QoYWRhdGE6IHN0cmluZywgY3lwaGVydGV4dDogc3RyaW5nLCByb3VuZERvbWFpblNlcGFyYXRvcjogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy52YWxpZGF0ZUFkYXRhKGFkYXRhLCBjeXBoZXJ0ZXh0LCByb3VuZERvbWFpblNlcGFyYXRvcik7XG4gIH1cblxuICBnZXRCaXRnb0FuZFVzZXJHcGdLZXlzRm9yVGVzdChcbiAgICBiaXRnb1B1YmxpY0dwZ0tleTogc3RyaW5nLFxuICAgIGVuY3J5cHRlZFVzZXJHcGdQcnZLZXk6IHN0cmluZyxcbiAgICB3YWxsZXRQYXNzcGhyYXNlOiBzdHJpbmcsXG4gICAgYWRhdGE6IHN0cmluZyxcbiAgICB1c2VyR3BnS2V5RG9tYWluU2VwYXJhdG9yOiBzdHJpbmdcbiAgKTogUHJvbWlzZTxEZWNyeXB0ZWRHcGdLZXlzPiB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0Qml0Z29BbmRVc2VyR3BnS2V5cyhcbiAgICAgIGJpdGdvUHVibGljR3BnS2V5LFxuICAgICAgZW5jcnlwdGVkVXNlckdwZ1BydktleSxcbiAgICAgIHdhbGxldFBhc3NwaHJhc2UsXG4gICAgICBhZGF0YSxcbiAgICAgIHVzZXJHcGdLZXlEb21haW5TZXBhcmF0b3JcbiAgICApO1xuICB9XG59XG5cbmRlc2NyaWJlKCdCYXNlIFRTUyBVdGlscycsIGZ1bmN0aW9uICgpIHtcbiAgY29uc3Qgd2FsbGV0UGFzc3BocmFzZSA9ICd0ZXN0LXBhc3N3b3JkJztcbiAgY29uc3Qgc2lnbmluZ1VzZXJHcGdLZXlEb21haW5TZXBhcmF0b3IgPSAnTVBTX0RTR19TSUdOSU5HX1VTRVJfR1BHX0tFWSc7XG4gIGNvbnN0IHJvdW5kT25lRG9tYWluU2VwYXJhdG9yID0gJ01QU19EU0dfU0lHTklOR19ST1VORDFfU1RBVEUnO1xuXG4gIGxldCBiYXNlVHNzVXRpbHM6IFRlc3RCYXNlVHNzVXRpbHM7XG4gIGxldCBlY2RzYU1QQ3YyVXRpbHM6IEVjZHNhTVBDdjJVdGlscztcbiAgbGV0IG1vY2tCaXRnbzogQml0R29CYXNlO1xuICBsZXQgZGVjcnlwdEFzeW5jU3R1Yjogc2lub24uU2lub25TdHViO1xuICBsZXQgYml0Z29HcGdLZXlQYWlyOiBCaXRnb0dwZ0tleVBhaXI7XG4gIGxldCB1c2VyR3BnS2V5UGFpcjogQml0Z29HcGdLZXlQYWlyO1xuICBsZXQgdXNlclNoYXJlOiBCdWZmZXI7XG5cbiAgYmVmb3JlKGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICBvcGVucGdwLmNvbmZpZy5yZWplY3RDdXJ2ZXMgPSBuZXcgU2V0KCk7XG4gICAgYml0Z29HcGdLZXlQYWlyID0gYXdhaXQgb3BlbnBncC5nZW5lcmF0ZUtleSh7XG4gICAgICB1c2VySURzOiBbeyBuYW1lOiAnYml0Z28nLCBlbWFpbDogJ2JpdGdvQHRlc3QuY29tJyB9XSxcbiAgICAgIGN1cnZlOiAnZWQyNTUxOScsXG4gICAgICBmb3JtYXQ6ICdhcm1vcmVkJyxcbiAgICB9KTtcbiAgICB1c2VyR3BnS2V5UGFpciA9IGF3YWl0IG9wZW5wZ3AuZ2VuZXJhdGVLZXkoe1xuICAgICAgdXNlcklEczogW3sgbmFtZTogJ3VzZXInLCBlbWFpbDogJ3VzZXJAdGVzdC5jb20nIH1dLFxuICAgICAgY3VydmU6ICdlZDI1NTE5JyxcbiAgICAgIGZvcm1hdDogJ2FybW9yZWQnLFxuICAgIH0pO1xuXG4gICAgY29uc3QgW3VzZXJEa2dTZXNzaW9uXSA9IGF3YWl0IERrbHNVdGlscy5nZW5lcmF0ZURLR0tleVNoYXJlcygpO1xuICAgIHVzZXJTaGFyZSA9IHVzZXJEa2dTZXNzaW9uLmdldEtleVNoYXJlKCk7XG4gIH0pO1xuXG4gIGJlZm9yZUVhY2goZnVuY3Rpb24gKCkge1xuICAgIGRlY3J5cHRBc3luY1N0dWIgPSBzaW5vbi5zdHViKCkuY2FsbHNGYWtlKGFzeW5jICh7IGlucHV0LCBwYXNzd29yZCB9OiBQYXJhbWV0ZXJzPEJpdEdvQmFzZVsnZGVjcnlwdEFzeW5jJ10+WzBdKSA9PiB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCBwYXJzZWQgPSBKU09OLnBhcnNlKGlucHV0KTtcbiAgICAgICAgaWYgKHBhcnNlZC52ID09PSAyICYmIHBhcnNlZC5wbGFpbnRleHQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHJldHVybiBwYXJzZWQucGxhaW50ZXh0O1xuICAgICAgICB9XG4gICAgICB9IGNhdGNoIHt9XG4gICAgICByZXR1cm4gc2pjbC5kZWNyeXB0KHBhc3N3b3JkID8/ICcnLCBpbnB1dCk7XG4gICAgfSk7XG5cbiAgICBjb25zdCBtb2NrQmcgPSB7fSBhcyBCaXRHb0Jhc2U7XG4gICAgbW9ja0JnLmdldEVudiA9IHNpbm9uLnN0dWIoKS5yZXR1cm5zKCd0ZXN0Jyk7XG4gICAgbW9ja0JnLmVuY3J5cHQgPSBzaW5vblxuICAgICAgLnN0dWIoKVxuICAgICAgLmNhbGxzRmFrZSgocGFyYW1zKSA9PiBlbmNyeXB0V2l0aFNqY2wocGFyYW1zLnBhc3N3b3JkID8/ICcnLCBwYXJhbXMuaW5wdXQsIHBhcmFtcy5hZGF0YSkpO1xuICAgIG1vY2tCZy5lbmNyeXB0QXN5bmMgPSBzaW5vblxuICAgICAgLnN0dWIoKVxuICAgICAgLmNhbGxzRmFrZShhc3luYyAocGFyYW1zKSA9PiBlbmNyeXB0V2l0aFNqY2wocGFyYW1zLnBhc3N3b3JkID8/ICcnLCBwYXJhbXMuaW5wdXQsIHBhcmFtcy5hZGF0YSkpO1xuICAgIG1vY2tCZy5kZWNyeXB0ID0gc2lub24uc3R1YigpLmNhbGxzRmFrZSgocGFyYW1zKSA9PiBzamNsLmRlY3J5cHQocGFyYW1zLnBhc3N3b3JkID8/ICcnLCBwYXJhbXMuaW5wdXQpKTtcbiAgICBtb2NrQmcuZGVjcnlwdEFzeW5jID0gZGVjcnlwdEFzeW5jU3R1YjtcbiAgICBtb2NrQml0Z28gPSBtb2NrQmc7XG5cbiAgICBjb25zdCBtb2NrQ29pbiA9IHt9IGFzIElCYXNlQ29pbjtcbiAgICBtb2NrQ29pbi5nZXRIYXNoRnVuY3Rpb24gPSBzaW5vbi5zdHViKCkuY2FsbHNGYWtlKCgpID0+IGNyZWF0ZUtlY2Nha0hhc2goJ2tlY2NhazI1NicpIGFzIEhhc2gpO1xuXG4gICAgYmFzZVRzc1V0aWxzID0gbmV3IFRlc3RCYXNlVHNzVXRpbHMobW9ja0JpdGdvLCBtb2NrQ29pbik7XG4gICAgZWNkc2FNUEN2MlV0aWxzID0gbmV3IEVjZHNhTVBDdjJVdGlscyhtb2NrQml0Z28sIG1vY2tDb2luKTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ2dldFNpZ25hYmxlSGV4QW5kRGVyaXZhdGlvblBhdGgnLCBmdW5jdGlvbiAoKSB7XG4gICAgaXQoJ2V4dHJhY3RzIHNpZ25hYmxlSGV4IGFuZCBkZXJpdmF0aW9uUGF0aCBmcm9tIGEgdmFsaWQgdHhSZXF1ZXN0JywgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgdHhSZXF1ZXN0ID0gYnVpbGRUeFJlcXVlc3Qoe1xuICAgICAgICB0cmFuc2FjdGlvbnM6IFtcbiAgICAgICAgICBidWlsZFRyYW5zYWN0aW9uKHtcbiAgICAgICAgICAgIHVuc2lnbmVkVHg6IGJ1aWxkVW5zaWduZWRUcmFuc2FjdGlvbih7IHNpZ25hYmxlSGV4OiAnZGVhZGJlZWYnLCBkZXJpdmF0aW9uUGF0aDogJ20vMC8wJyB9KSxcbiAgICAgICAgICB9KSxcbiAgICAgICAgXSxcbiAgICAgIH0pO1xuXG4gICAgICBjb25zdCByZXN1bHQgPSBiYXNlVHNzVXRpbHMuZ2V0U2lnbmFibGVIZXhBbmREZXJpdmF0aW9uUGF0aEZvclRlc3QodHhSZXF1ZXN0KTtcbiAgICAgIGFzc2VydC5lcXVhbChyZXN1bHQuc2lnbmFibGVIZXgsICdkZWFkYmVlZicpO1xuICAgICAgYXNzZXJ0LmVxdWFsKHJlc3VsdC5kZXJpdmF0aW9uUGF0aCwgJ20vMC8wJyk7XG4gICAgfSk7XG5cbiAgICBpdCgndGhyb3dzIHdoZW4gdHJhbnNhY3Rpb25zIGZpZWxkIGlzIG1pc3NpbmcnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBhc3NlcnQudGhyb3dzKFxuICAgICAgICAoKSA9PiBiYXNlVHNzVXRpbHMuZ2V0U2lnbmFibGVIZXhBbmREZXJpdmF0aW9uUGF0aEZvclRlc3QoYnVpbGRUeFJlcXVlc3RXaXRob3V0VHJhbnNhY3Rpb25zKCkpLFxuICAgICAgICAvY3JlYXRlT2ZmbGluZVNoYXJlIHJlcXVpcmVzIGV4YWN0bHkgb25lIHRyYW5zYWN0aW9uIGluIHR4UmVxdWVzdC9cbiAgICAgICk7XG4gICAgfSk7XG5cbiAgICBpdCgndGhyb3dzIHdoZW4gdHJhbnNhY3Rpb25zIGFycmF5IGlzIGVtcHR5JywgZnVuY3Rpb24gKCkge1xuICAgICAgYXNzZXJ0LnRocm93cyhcbiAgICAgICAgKCkgPT4gYmFzZVRzc1V0aWxzLmdldFNpZ25hYmxlSGV4QW5kRGVyaXZhdGlvblBhdGhGb3JUZXN0KGJ1aWxkVHhSZXF1ZXN0KHsgdHJhbnNhY3Rpb25zOiBbXSB9KSksXG4gICAgICAgIC9jcmVhdGVPZmZsaW5lU2hhcmUgcmVxdWlyZXMgZXhhY3RseSBvbmUgdHJhbnNhY3Rpb24gaW4gdHhSZXF1ZXN0L1xuICAgICAgKTtcbiAgICB9KTtcblxuICAgIGl0KCd0aHJvd3Mgd2hlbiB0cmFuc2FjdGlvbnMgYXJyYXkgaGFzIG1vcmUgdGhhbiBvbmUgZWxlbWVudCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGFzc2VydC50aHJvd3MoXG4gICAgICAgICgpID0+XG4gICAgICAgICAgYmFzZVRzc1V0aWxzLmdldFNpZ25hYmxlSGV4QW5kRGVyaXZhdGlvblBhdGhGb3JUZXN0KFxuICAgICAgICAgICAgYnVpbGRUeFJlcXVlc3Qoe1xuICAgICAgICAgICAgICB0cmFuc2FjdGlvbnM6IFtcbiAgICAgICAgICAgICAgICBidWlsZFRyYW5zYWN0aW9uKHtcbiAgICAgICAgICAgICAgICAgIHVuc2lnbmVkVHg6IGJ1aWxkVW5zaWduZWRUcmFuc2FjdGlvbih7IHNpZ25hYmxlSGV4OiAnYWFhJywgZGVyaXZhdGlvblBhdGg6ICdtLzAnIH0pLFxuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgIGJ1aWxkVHJhbnNhY3Rpb24oe1xuICAgICAgICAgICAgICAgICAgdW5zaWduZWRUeDogYnVpbGRVbnNpZ25lZFRyYW5zYWN0aW9uKHsgc2lnbmFibGVIZXg6ICdiYmInLCBkZXJpdmF0aW9uUGF0aDogJ20vMScgfSksXG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICB9KVxuICAgICAgICAgICksXG4gICAgICAgIC9jcmVhdGVPZmZsaW5lU2hhcmUgcmVxdWlyZXMgZXhhY3RseSBvbmUgdHJhbnNhY3Rpb24gaW4gdHhSZXF1ZXN0L1xuICAgICAgKTtcbiAgICB9KTtcblxuICAgIGl0KCd0aHJvd3Mgd2hlbiB1bnNpZ25lZFR4IGlzIG1pc3NpbmcnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAvLyBAdHMtZXhwZWN0LWVycm9yIEludGVudGlvbmFsbHkgbWFsZm9ybWVkIHRvIGV4ZXJjaXNlIHRoZSBydW50aW1lIGd1YXJkLlxuICAgICAgY29uc3Qgbm9VbnNpZ25lZFR4OiBUeFJlcXVlc3RUcmFuc2FjdGlvbiA9IHsgc3RhdGU6ICdwZW5kaW5nU2lnbmF0dXJlJywgc2lnbmF0dXJlU2hhcmVzOiBbXSB9O1xuICAgICAgYXNzZXJ0LnRocm93cyhcbiAgICAgICAgKCkgPT4gYmFzZVRzc1V0aWxzLmdldFNpZ25hYmxlSGV4QW5kRGVyaXZhdGlvblBhdGhGb3JUZXN0KGJ1aWxkVHhSZXF1ZXN0KHsgdHJhbnNhY3Rpb25zOiBbbm9VbnNpZ25lZFR4XSB9KSksXG4gICAgICAgIC9NaXNzaW5nIHVuc2lnbmVkVHggaW4gdHJhbnNhY3Rpb25zL1xuICAgICAgKTtcbiAgICB9KTtcblxuICAgIGl0KCd0aHJvd3Mgd2hlbiBzaWduYWJsZUhleCBpcyBtaXNzaW5nJywgZnVuY3Rpb24gKCkge1xuICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvciBJbnRlbnRpb25hbGx5IG1hbGZvcm1lZCB0byBleGVyY2lzZSB0aGUgcnVudGltZSBndWFyZC5cbiAgICAgIGNvbnN0IG5vU2lnbmFibGVIZXg6IFVuc2lnbmVkVHJhbnNhY3Rpb24gPSB7IHNlcmlhbGl6ZWRUeEhleDogJ2FhYmJjY2RkJywgZGVyaXZhdGlvblBhdGg6ICdtLzAnIH07XG4gICAgICBhc3NlcnQudGhyb3dzKFxuICAgICAgICAoKSA9PlxuICAgICAgICAgIGJhc2VUc3NVdGlscy5nZXRTaWduYWJsZUhleEFuZERlcml2YXRpb25QYXRoRm9yVGVzdChcbiAgICAgICAgICAgIGJ1aWxkVHhSZXF1ZXN0KHsgdHJhbnNhY3Rpb25zOiBbYnVpbGRUcmFuc2FjdGlvbih7IHVuc2lnbmVkVHg6IG5vU2lnbmFibGVIZXggfSldIH0pXG4gICAgICAgICAgKSxcbiAgICAgICAgL01pc3Npbmcgc2lnbmFibGVIZXggaW4gdW5zaWduZWRUeC9cbiAgICAgICk7XG4gICAgfSk7XG5cbiAgICBpdCgndGhyb3dzIHdoZW4gZGVyaXZhdGlvblBhdGggaXMgbWlzc2luZycsIGZ1bmN0aW9uICgpIHtcbiAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgSW50ZW50aW9uYWxseSBtYWxmb3JtZWQgdG8gZXhlcmNpc2UgdGhlIHJ1bnRpbWUgZ3VhcmQuXG4gICAgICBjb25zdCBub0Rlcml2YXRpb25QYXRoOiBVbnNpZ25lZFRyYW5zYWN0aW9uID0geyBzZXJpYWxpemVkVHhIZXg6ICdhYWJiY2NkZCcsIHNpZ25hYmxlSGV4OiAnZGVhZGJlZWYnIH07XG4gICAgICBhc3NlcnQudGhyb3dzKFxuICAgICAgICAoKSA9PlxuICAgICAgICAgIGJhc2VUc3NVdGlscy5nZXRTaWduYWJsZUhleEFuZERlcml2YXRpb25QYXRoRm9yVGVzdChcbiAgICAgICAgICAgIGJ1aWxkVHhSZXF1ZXN0KHsgdHJhbnNhY3Rpb25zOiBbYnVpbGRUcmFuc2FjdGlvbih7IHVuc2lnbmVkVHg6IG5vRGVyaXZhdGlvblBhdGggfSldIH0pXG4gICAgICAgICAgKSxcbiAgICAgICAgL01pc3NpbmcgZGVyaXZhdGlvblBhdGggaW4gdW5zaWduZWRUeC9cbiAgICAgICk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCd2YWxpZGF0ZUFkYXRhJywgZnVuY3Rpb24gKCkge1xuICAgIGl0KCdwYXNzZXMgd2hlbiBhZGF0YSBtYXRjaGVzIHdpdGggZG9tYWluIHNlcGFyYXRvcicsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IGFkYXRhID0gJ3Rlc3QtdmFsdWUnO1xuICAgICAgY29uc3QgY3lwaGVydGV4dCA9IG1vY2tCaXRnby5lbmNyeXB0KHtcbiAgICAgICAgaW5wdXQ6ICdzZWNyZXQnLFxuICAgICAgICBwYXNzd29yZDogd2FsbGV0UGFzc3BocmFzZSxcbiAgICAgICAgYWRhdGE6IGAke3JvdW5kT25lRG9tYWluU2VwYXJhdG9yfToke2FkYXRhfWAsXG4gICAgICB9KTtcbiAgICAgIGFzc2VydC5kb2VzTm90VGhyb3coKCkgPT4gYmFzZVRzc1V0aWxzLnZhbGlkYXRlQWRhdGFGb3JUZXN0KGFkYXRhLCBjeXBoZXJ0ZXh0LCByb3VuZE9uZURvbWFpblNlcGFyYXRvcikpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Bhc3NlcyB3aGVuIGFkYXRhIG1hdGNoZXMgd2l0aG91dCBkb21haW4gc2VwYXJhdG9yJywgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgYWRhdGEgPSAndGVzdC12YWx1ZSc7XG4gICAgICBjb25zdCBjeXBoZXJ0ZXh0ID0gbW9ja0JpdGdvLmVuY3J5cHQoeyBpbnB1dDogJ3NlY3JldCcsIHBhc3N3b3JkOiB3YWxsZXRQYXNzcGhyYXNlLCBhZGF0YSB9KTtcbiAgICAgIGFzc2VydC5kb2VzTm90VGhyb3coKCkgPT4gYmFzZVRzc1V0aWxzLnZhbGlkYXRlQWRhdGFGb3JUZXN0KGFkYXRhLCBjeXBoZXJ0ZXh0LCByb3VuZE9uZURvbWFpblNlcGFyYXRvcikpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Rocm93cyB3aGVuIGFkYXRhIGRvZXMgbm90IG1hdGNoJywgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgY3lwaGVydGV4dCA9IG1vY2tCaXRnby5lbmNyeXB0KHtcbiAgICAgICAgaW5wdXQ6ICdzZWNyZXQnLFxuICAgICAgICBwYXNzd29yZDogd2FsbGV0UGFzc3BocmFzZSxcbiAgICAgICAgYWRhdGE6IGAke3JvdW5kT25lRG9tYWluU2VwYXJhdG9yfTpjb3JyZWN0YCxcbiAgICAgIH0pO1xuICAgICAgYXNzZXJ0LnRocm93cyhcbiAgICAgICAgKCkgPT4gYmFzZVRzc1V0aWxzLnZhbGlkYXRlQWRhdGFGb3JUZXN0KCd3cm9uZycsIGN5cGhlcnRleHQsIHJvdW5kT25lRG9tYWluU2VwYXJhdG9yKSxcbiAgICAgICAgL0FkYXRhIGRvZXMgbm90IG1hdGNoIGN5cGhlcnRleHQgYWRhdGEvXG4gICAgICApO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Rocm93cyB3aGVuIGN5cGhlcnRleHQgaXMgbm90IHZhbGlkIEpTT04nLCBmdW5jdGlvbiAoKSB7XG4gICAgICBhc3NlcnQudGhyb3dzKFxuICAgICAgICAoKSA9PiBiYXNlVHNzVXRpbHMudmFsaWRhdGVBZGF0YUZvclRlc3QoJ2FkYXRhJywgJ25vdC1qc29uJywgcm91bmRPbmVEb21haW5TZXBhcmF0b3IpLFxuICAgICAgICAvRmFpbGVkIHRvIHBhcnNlIGN5cGhlcnRleHQgdG8gSlNPTi9cbiAgICAgICk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdnZXRCaXRnb0FuZFVzZXJHcGdLZXlzJywgZnVuY3Rpb24gKCkge1xuICAgIGl0KCdkZWNyeXB0cyB2MSBTSkNMIGVudmVsb3BlIHdpdGhvdXQgYWRhdGEgYW5kIHNraXBzIHZhbGlkYXRpb24nLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBlbmNyeXB0ZWRVc2VyR3BnUHJ2S2V5ID0gbW9ja0JpdGdvLmVuY3J5cHQoe1xuICAgICAgICBpbnB1dDogdXNlckdwZ0tleVBhaXIucHJpdmF0ZUtleSxcbiAgICAgICAgcGFzc3dvcmQ6IHdhbGxldFBhc3NwaHJhc2UsXG4gICAgICB9KTtcblxuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgYmFzZVRzc1V0aWxzLmdldEJpdGdvQW5kVXNlckdwZ0tleXNGb3JUZXN0KFxuICAgICAgICBiaXRnb0dwZ0tleVBhaXIucHVibGljS2V5LFxuICAgICAgICBlbmNyeXB0ZWRVc2VyR3BnUHJ2S2V5LFxuICAgICAgICB3YWxsZXRQYXNzcGhyYXNlLFxuICAgICAgICAnJyxcbiAgICAgICAgc2lnbmluZ1VzZXJHcGdLZXlEb21haW5TZXBhcmF0b3JcbiAgICAgICk7XG5cbiAgICAgIGFzc2VydC5vayhyZXN1bHQuYml0Z29HcGdLZXkpO1xuICAgICAgYXNzZXJ0LmVxdWFsKHJlc3VsdC51c2VyR3BnUHJ2S2V5LmlzUHJpdmF0ZSgpLCB0cnVlKTtcbiAgICB9KTtcblxuICAgIGl0KCdkZWNyeXB0cyB2MSBTSkNMIGVudmVsb3BlIHdpdGggbWF0Y2hpbmcgYWRhdGEnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBhZGF0YSA9ICd0ZXN0LWFkYXRhJztcbiAgICAgIGNvbnN0IGVuY3J5cHRlZFVzZXJHcGdQcnZLZXkgPSBtb2NrQml0Z28uZW5jcnlwdCh7XG4gICAgICAgIGlucHV0OiB1c2VyR3BnS2V5UGFpci5wcml2YXRlS2V5LFxuICAgICAgICBwYXNzd29yZDogd2FsbGV0UGFzc3BocmFzZSxcbiAgICAgICAgYWRhdGE6IGAke3NpZ25pbmdVc2VyR3BnS2V5RG9tYWluU2VwYXJhdG9yfToke2FkYXRhfWAsXG4gICAgICB9KTtcblxuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgYmFzZVRzc1V0aWxzLmdldEJpdGdvQW5kVXNlckdwZ0tleXNGb3JUZXN0KFxuICAgICAgICBiaXRnb0dwZ0tleVBhaXIucHVibGljS2V5LFxuICAgICAgICBlbmNyeXB0ZWRVc2VyR3BnUHJ2S2V5LFxuICAgICAgICB3YWxsZXRQYXNzcGhyYXNlLFxuICAgICAgICBhZGF0YSxcbiAgICAgICAgc2lnbmluZ1VzZXJHcGdLZXlEb21haW5TZXBhcmF0b3JcbiAgICAgICk7XG5cbiAgICAgIGFzc2VydC5vayhyZXN1bHQuYml0Z29HcGdLZXkpO1xuICAgICAgYXNzZXJ0LmVxdWFsKHJlc3VsdC51c2VyR3BnUHJ2S2V5LmlzUHJpdmF0ZSgpLCB0cnVlKTtcbiAgICB9KTtcblxuICAgIGl0KCdkZWNyeXB0cyB2aWEgZGVjcnlwdEFzeW5jIGFuZCByZXR1cm5zIEdQRyBrZXlzJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgYWRhdGEgPSAndGVzdC1hZGF0YSc7XG4gICAgICAvLyBVc2UgYSBmYWtlIHYyIGVudmVsb3BlICh2OjIpIHNvIGlzVjJFbnZlbG9wZSByZXR1cm5zIHRydWUgYW5kIGRlY3J5cHRBc3luYyBpcyBjYWxsZWQuXG4gICAgICAvLyBUaGUgc3R1YiBleHRyYWN0cyBwbGFpbnRleHQgZGlyZWN0bHkgZnJvbSB0aGlzIGZha2UgZm9ybWF0LlxuICAgICAgY29uc3QgZW5jcnlwdGVkVXNlckdwZ1BydktleSA9IEpTT04uc3RyaW5naWZ5KHtcbiAgICAgICAgdjogMixcbiAgICAgICAgYWRhdGE6IGAke3NpZ25pbmdVc2VyR3BnS2V5RG9tYWluU2VwYXJhdG9yfToke2FkYXRhfWAsXG4gICAgICAgIHBsYWludGV4dDogdXNlckdwZ0tleVBhaXIucHJpdmF0ZUtleSxcbiAgICAgIH0pO1xuXG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBiYXNlVHNzVXRpbHMuZ2V0Qml0Z29BbmRVc2VyR3BnS2V5c0ZvclRlc3QoXG4gICAgICAgIGJpdGdvR3BnS2V5UGFpci5wdWJsaWNLZXksXG4gICAgICAgIGVuY3J5cHRlZFVzZXJHcGdQcnZLZXksXG4gICAgICAgIHdhbGxldFBhc3NwaHJhc2UsXG4gICAgICAgIGFkYXRhLFxuICAgICAgICBzaWduaW5nVXNlckdwZ0tleURvbWFpblNlcGFyYXRvclxuICAgICAgKTtcblxuICAgICAgc2lub24uYXNzZXJ0LmNhbGxlZE9uY2UoZGVjcnlwdEFzeW5jU3R1Yik7XG4gICAgICBhc3NlcnQub2socmVzdWx0LmJpdGdvR3BnS2V5KTtcbiAgICAgIGFzc2VydC5lcXVhbChyZXN1bHQudXNlckdwZ1BydktleS5pc1ByaXZhdGUoKSwgdHJ1ZSk7XG4gICAgfSk7XG5cbiAgICBpdCgndGhyb3dzIHdoZW4gYWRhdGEgZG9lcyBub3QgbWF0Y2gnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBlbmNyeXB0ZWRVc2VyR3BnUHJ2S2V5ID0gbW9ja0JpdGdvLmVuY3J5cHQoe1xuICAgICAgICBpbnB1dDogdXNlckdwZ0tleVBhaXIucHJpdmF0ZUtleSxcbiAgICAgICAgcGFzc3dvcmQ6IHdhbGxldFBhc3NwaHJhc2UsXG4gICAgICAgIGFkYXRhOiBgJHtzaWduaW5nVXNlckdwZ0tleURvbWFpblNlcGFyYXRvcn06Y29ycmVjdC1hZGF0YWAsXG4gICAgICB9KTtcblxuICAgICAgYXdhaXQgYXNzZXJ0LnJlamVjdHMoXG4gICAgICAgIGJhc2VUc3NVdGlscy5nZXRCaXRnb0FuZFVzZXJHcGdLZXlzRm9yVGVzdChcbiAgICAgICAgICBiaXRnb0dwZ0tleVBhaXIucHVibGljS2V5LFxuICAgICAgICAgIGVuY3J5cHRlZFVzZXJHcGdQcnZLZXksXG4gICAgICAgICAgd2FsbGV0UGFzc3BocmFzZSxcbiAgICAgICAgICAnd3JvbmctYWRhdGEnLFxuICAgICAgICAgIHNpZ25pbmdVc2VyR3BnS2V5RG9tYWluU2VwYXJhdG9yXG4gICAgICAgICksXG4gICAgICAgIC9BZGF0YSBkb2VzIG5vdCBtYXRjaCBjeXBoZXJ0ZXh0IGFkYXRhL1xuICAgICAgKTtcbiAgICB9KTtcblxuICAgIGl0KCd0aHJvd3Mgd2hlbiBjeXBoZXJ0ZXh0IGlzIG5vdCB2YWxpZCBKU09OJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgYXdhaXQgYXNzZXJ0LnJlamVjdHMoXG4gICAgICAgIGJhc2VUc3NVdGlscy5nZXRCaXRnb0FuZFVzZXJHcGdLZXlzRm9yVGVzdChcbiAgICAgICAgICBiaXRnb0dwZ0tleVBhaXIucHVibGljS2V5LFxuICAgICAgICAgICdub3QtdmFsaWQtanNvbicsXG4gICAgICAgICAgd2FsbGV0UGFzc3BocmFzZSxcbiAgICAgICAgICAndGVzdC1hZGF0YScsXG4gICAgICAgICAgc2lnbmluZ1VzZXJHcGdLZXlEb21haW5TZXBhcmF0b3JcbiAgICAgICAgKSxcbiAgICAgICAgL2pzb24gZGVjb2RlfEZhaWxlZCB0byBwYXJzZSBjeXBoZXJ0ZXh0IHRvIEpTT04vXG4gICAgICApO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnRUNEU0EgTVBDIHYyIGRlbGVnYXRlZCB0eFJlcXVlc3QgcGFyc2luZycsIGZ1bmN0aW9uICgpIHtcbiAgICBpdCgnZ2V0SGFzaFN0cmluZ0FuZERlcml2YXRpb25QYXRoIHByb2R1Y2VzIHRoZSBjb3JyZWN0IGhhc2hCdWZmZXIgYW5kIGRlcml2YXRpb25QYXRoJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3Qgc2lnbmFibGVIZXggPSAnZGVhZGJlZWYnO1xuICAgICAgY29uc3QgZGVyaXZhdGlvblBhdGggPSAnbS8wJztcbiAgICAgIGNvbnN0IHR4UmVxdWVzdCA9IGJ1aWxkVHhSZXF1ZXN0KHtcbiAgICAgICAgdHJhbnNhY3Rpb25zOiBbYnVpbGRUcmFuc2FjdGlvbih7IHVuc2lnbmVkVHg6IGJ1aWxkVW5zaWduZWRUcmFuc2FjdGlvbih7IHNpZ25hYmxlSGV4LCBkZXJpdmF0aW9uUGF0aCB9KSB9KV0sXG4gICAgICB9KTtcbiAgICAgIGNvbnN0IGV4cGVjdGVkSGFzaEJ1ZmZlciA9IGNyZWF0ZUtlY2Nha0hhc2goJ2tlY2NhazI1NicpLnVwZGF0ZShCdWZmZXIuZnJvbShzaWduYWJsZUhleCwgJ2hleCcpKS5kaWdlc3QoKTtcblxuICAgICAgY29uc3QgeyBlbmNyeXB0ZWRSb3VuZDFTZXNzaW9uIH0gPSBhd2FpdCBlY2RzYU1QQ3YyVXRpbHMuY3JlYXRlT2ZmbGluZVJvdW5kMVNoYXJlKHtcbiAgICAgICAgdHhSZXF1ZXN0LFxuICAgICAgICBwcnY6IHVzZXJTaGFyZS50b1N0cmluZygnYmFzZTY0JyksXG4gICAgICAgIHdhbGxldFBhc3NwaHJhc2UsXG4gICAgICB9KTtcblxuICAgICAgLy8gVGhlIHJvdW5kLTEgc2Vzc2lvbiBpcyBlbmNyeXB0ZWQgd2l0aCBhZGF0YSA9IFwiREtMUzIzX1NJR05JTkdfUk9VTkQxX1NUQVRFOjxoYXNoPjo8ZGVyaXZhdGlvblBhdGg+XCIsXG4gICAgICAvLyB3aGljaCBwcm92ZXMgZ2V0SGFzaFN0cmluZ0FuZERlcml2YXRpb25QYXRoIHByb2R1Y2VkIHRoZSByaWdodCB2YWx1ZXMgYWZ0ZXIgdGhlIGRlbGVnYXRpb24gcmVmYWN0b3IuXG4gICAgICBjb25zdCB7IGFkYXRhIH0gPSBKU09OLnBhcnNlKGVuY3J5cHRlZFJvdW5kMVNlc3Npb24pIGFzIHsgYWRhdGE/OiBzdHJpbmcgfTtcbiAgICAgIGFzc2VydC5lcXVhbChcbiAgICAgICAgYWRhdGEgPT09IHVuZGVmaW5lZCA/IGFkYXRhIDogZGVjb2RlVVJJQ29tcG9uZW50KGFkYXRhKSxcbiAgICAgICAgYERLTFMyM19TSUdOSU5HX1JPVU5EMV9TVEFURToke2V4cGVjdGVkSGFzaEJ1ZmZlci50b1N0cmluZygnaGV4Jyl9OiR7ZGVyaXZhdGlvblBhdGh9YFxuICAgICAgKTtcbiAgICB9KTtcblxuICAgIGl0KCdwcm9wYWdhdGVzIHRoZSBiYXNlIHVuc2lnbmVkVHggZ3VhcmQgdGhyb3VnaCB0aGUgRUNEU0Egcm91dGUnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAvLyBAdHMtZXhwZWN0LWVycm9yIEludGVudGlvbmFsbHkgbWFsZm9ybWVkIHRvIGV4ZXJjaXNlIHRoZSBydW50aW1lIGd1YXJkLlxuICAgICAgY29uc3Qgbm9VbnNpZ25lZFR4OiBUeFJlcXVlc3RUcmFuc2FjdGlvbiA9IHsgc3RhdGU6ICdwZW5kaW5nU2lnbmF0dXJlJywgc2lnbmF0dXJlU2hhcmVzOiBbXSB9O1xuICAgICAgYXdhaXQgYXNzZXJ0LnJlamVjdHMoXG4gICAgICAgIGVjZHNhTVBDdjJVdGlscy5jcmVhdGVPZmZsaW5lUm91bmQxU2hhcmUoe1xuICAgICAgICAgIHR4UmVxdWVzdDogYnVpbGRUeFJlcXVlc3QoeyB0cmFuc2FjdGlvbnM6IFtub1Vuc2lnbmVkVHhdIH0pLFxuICAgICAgICAgIHBydjogJ3VudXNlZCcsXG4gICAgICAgICAgd2FsbGV0UGFzc3BocmFzZSxcbiAgICAgICAgfSksXG4gICAgICAgIC9NaXNzaW5nIHVuc2lnbmVkVHggaW4gdHJhbnNhY3Rpb25zL1xuICAgICAgKTtcbiAgICB9KTtcbiAgfSk7XG59KTtcblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBGaXh0dXJlIGJ1aWxkZXJzXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuZnVuY3Rpb24gYnVpbGRUeFJlcXVlc3Qob3ZlcnJpZGVzOiBQYXJ0aWFsPFR4UmVxdWVzdD4gPSB7fSk6IFR4UmVxdWVzdCB7XG4gIHJldHVybiB7XG4gICAgdHhSZXF1ZXN0SWQ6ICd0eC1yZXF1ZXN0LWlkJyxcbiAgICB3YWxsZXRJZDogJ3dhbGxldC1pZCcsXG4gICAgd2FsbGV0VHlwZTogJ2hvdCcsXG4gICAgdmVyc2lvbjogMSxcbiAgICBzdGF0ZTogJ2luaXRpYWxpemVkJyxcbiAgICBkYXRlOiBuZXcgRGF0ZSgwKS50b0lTT1N0cmluZygpLFxuICAgIHVzZXJJZDogJ3VzZXItaWQnLFxuICAgIGludGVudDoge30sXG4gICAgcG9saWNpZXNDaGVja2VkOiB0cnVlLFxuICAgIHVuc2lnbmVkVHhzOiBbXSxcbiAgICB0cmFuc2FjdGlvbnM6IFtidWlsZFRyYW5zYWN0aW9uKCldLFxuICAgIGxhdGVzdDogdHJ1ZSxcbiAgICAuLi5vdmVycmlkZXMsXG4gIH07XG59XG5cbmZ1bmN0aW9uIGJ1aWxkVHhSZXF1ZXN0V2l0aG91dFRyYW5zYWN0aW9ucygpOiBUeFJlcXVlc3Qge1xuICBjb25zdCB0eFJlcXVlc3QgPSBidWlsZFR4UmVxdWVzdCgpO1xuICBkZWxldGUgdHhSZXF1ZXN0LnRyYW5zYWN0aW9ucztcbiAgcmV0dXJuIHR4UmVxdWVzdDtcbn1cblxuZnVuY3Rpb24gYnVpbGRUcmFuc2FjdGlvbihvdmVycmlkZXM6IFBhcnRpYWw8VHhSZXF1ZXN0VHJhbnNhY3Rpb24+ID0ge30pOiBUeFJlcXVlc3RUcmFuc2FjdGlvbiB7XG4gIHJldHVybiB7IHN0YXRlOiAncGVuZGluZ1NpZ25hdHVyZScsIHVuc2lnbmVkVHg6IGJ1aWxkVW5zaWduZWRUcmFuc2FjdGlvbigpLCBzaWduYXR1cmVTaGFyZXM6IFtdLCAuLi5vdmVycmlkZXMgfTtcbn1cblxuZnVuY3Rpb24gYnVpbGRVbnNpZ25lZFRyYW5zYWN0aW9uKG92ZXJyaWRlczogUGFydGlhbDxVbnNpZ25lZFRyYW5zYWN0aW9uPiA9IHt9KTogVW5zaWduZWRUcmFuc2FjdGlvbiB7XG4gIHJldHVybiB7IHNlcmlhbGl6ZWRUeEhleDogJ2FhYmJjY2RkJywgc2lnbmFibGVIZXg6ICdkZWFkYmVlZicsIGRlcml2YXRpb25QYXRoOiAnbS8wJywgLi4ub3ZlcnJpZGVzIH07XG59XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gRW5jcnlwdGlvbiBoZWxwZXJzIChtaXJyb3JzIHRoZSBlY2RzYU1QQ3YyIHRlc3QgcGF0dGVybilcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG5mdW5jdGlvbiBlbmNyeXB0V2l0aFNqY2wocGFzc3dvcmQ6IHN0cmluZywgaW5wdXQ6IHN0cmluZywgYWRhdGE/OiBzdHJpbmcpOiBzdHJpbmcge1xuICBjb25zdCBzYWx0ID0gcmFuZG9tQnl0ZXMoOCk7XG4gIGNvbnN0IGl2ID0gcmFuZG9tQnl0ZXMoMTYpO1xuICByZXR1cm4gc2pjbC5lbmNyeXB0KHBhc3N3b3JkLCBpbnB1dCwge1xuICAgIHNhbHQ6IFtieXRlc1RvV29yZChzYWx0LnN1YmFycmF5KDAsIDQpKSwgYnl0ZXNUb1dvcmQoc2FsdC5zdWJhcnJheSg0KSldLFxuICAgIGl2OiBbXG4gICAgICBieXRlc1RvV29yZChpdi5zdWJhcnJheSgwLCA0KSksXG4gICAgICBieXRlc1RvV29yZChpdi5zdWJhcnJheSg0LCA4KSksXG4gICAgICBieXRlc1RvV29yZChpdi5zdWJhcnJheSg4LCAxMikpLFxuICAgICAgYnl0ZXNUb1dvcmQoaXYuc3ViYXJyYXkoMTIsIDE2KSksXG4gICAgXSxcbiAgICAuLi4oYWRhdGEgIT09IHVuZGVmaW5lZCA/IHsgYWRhdGEgfSA6IHt9KSxcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIGJ5dGVzVG9Xb3JkKGJ5dGVzOiBVaW50OEFycmF5KTogbnVtYmVyIHtcbiAgaWYgKGJ5dGVzLmxlbmd0aCAhPT0gNCkge1xuICAgIHRocm93IG5ldyBFcnJvcignYnl0ZXMgbXVzdCBoYXZlIGxlbmd0aCA0Jyk7XG4gIH1cbiAgcmV0dXJuIGJ5dGVzLnJlZHVjZSgobnVtLCBieXRlKSA9PiBudW0gKiAweDEwMCArIGJ5dGUsIDApO1xufVxuIl19
|
|
399
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZVRTU1V0aWxzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vdGVzdC91bml0L2JpdGdvL3V0aWxzL3Rzcy9iYXNlVFNTVXRpbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSwrQ0FBaUM7QUFDakMsbUNBQTJDO0FBQzNDLG9EQUFzQztBQUN0QyxpREFBbUM7QUFDbkMsNkNBQStCO0FBQy9CLGtEQUFvQztBQUNwQyxvREFBK0M7QUFFL0MsNENBQThHO0FBQzlHLG1HQUEyRTtBQVkzRSxNQUFNLGdCQUFpQixTQUFRLHNCQUFvQjtJQUNqRCxzQ0FBc0MsQ0FDcEMsU0FBb0IsRUFDcEIsMEJBQW1DO1FBRW5DLE9BQU8sSUFBSSxDQUFDLCtCQUErQixDQUFDLFNBQVMsRUFBRSwwQkFBMEIsQ0FBQyxDQUFDO0lBQ3JGLENBQUM7SUFFRCxvQkFBb0IsQ0FBQyxLQUFhLEVBQUUsVUFBa0IsRUFBRSxvQkFBNEI7UUFDbEYsSUFBSSxDQUFDLGFBQWEsQ0FBQyxLQUFLLEVBQUUsVUFBVSxFQUFFLG9CQUFvQixDQUFDLENBQUM7SUFDOUQsQ0FBQztJQUVELDZCQUE2QixDQUMzQixpQkFBeUIsRUFDekIsc0JBQThCLEVBQzlCLGdCQUF3QixFQUN4QixLQUFhLEVBQ2IseUJBQWlDO1FBRWpDLE9BQU8sSUFBSSxDQUFDLHNCQUFzQixDQUNoQyxpQkFBaUIsRUFDakIsc0JBQXNCLEVBQ3RCLGdCQUFnQixFQUNoQixLQUFLLEVBQ0wseUJBQXlCLENBQzFCLENBQUM7SUFDSixDQUFDO0NBQ0Y7QUFFRCxRQUFRLENBQUMsZ0JBQWdCLEVBQUU7SUFDekIsTUFBTSxnQkFBZ0IsR0FBRyxlQUFlLENBQUM7SUFDekMsTUFBTSxnQ0FBZ0MsR0FBRyw4QkFBOEIsQ0FBQztJQUN4RSxNQUFNLHVCQUF1QixHQUFHLDhCQUE4QixDQUFDO0lBRS9ELElBQUksWUFBOEIs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LENBQUMsR0FBRyxHQUFHLEtBQUssR0FBRyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDNUQsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIGFzc2VydCBmcm9tICdhc3NlcnQnO1xuaW1wb3J0IHsgSGFzaCwgcmFuZG9tQnl0ZXMgfSBmcm9tICdjcnlwdG8nO1xuaW1wb3J0IGNyZWF0ZUtlY2Nha0hhc2ggZnJvbSAna2VjY2FrJztcbmltcG9ydCAqIGFzIG9wZW5wZ3AgZnJvbSAnb3BlbnBncCc7XG5pbXBvcnQgKiBhcyBzaW5vbiBmcm9tICdzaW5vbic7XG5pbXBvcnQgKiBhcyBzamNsIGZyb20gJ0BiaXRnby9zamNsJztcbmltcG9ydCB7IERrbHNVdGlscyB9IGZyb20gJ0BiaXRnby9zZGstbGliLW1wYyc7XG5cbmltcG9ydCB7IEJpdEdvQmFzZSwgRWNkc2FNUEN2MlV0aWxzLCBJQmFzZUNvaW4sIElXYWxsZXQsIFJlcXVlc3RUcmFjZXIsIFR4UmVxdWVzdCB9IGZyb20gJy4uLy4uLy4uLy4uLy4uL3NyYyc7XG5pbXBvcnQgQmFzZVRzc1V0aWxzIGZyb20gJy4uLy4uLy4uLy4uLy4uL3NyYy9iaXRnby91dGlscy90c3MvYmFzZVRTU1V0aWxzJztcblxudHlwZSBCaXRnb0dwZ0tleVBhaXIgPSBvcGVucGdwLlNlcmlhbGl6ZWRLZXlQYWlyPHN0cmluZz4gJiB7IHJldm9jYXRpb25DZXJ0aWZpY2F0ZTogc3RyaW5nIH07XG50eXBlIFR4UmVxdWVzdFRyYW5zYWN0aW9uID0gTm9uTnVsbGFibGU8VHhSZXF1ZXN0Wyd0cmFuc2FjdGlvbnMnXT5bbnVtYmVyXTtcbnR5cGUgVW5zaWduZWRUcmFuc2FjdGlvbiA9IFR4UmVxdWVzdFRyYW5zYWN0aW9uWyd1bnNpZ25lZFR4J107XG50eXBlIFNpZ25hYmxlSGV4QW5kRGVyaXZhdGlvblBhdGggPSB7XG4gIHNpZ25hYmxlSGV4OiBzdHJpbmc7XG4gIGRlcml2YXRpb25QYXRoOiBzdHJpbmc7XG4gIHNlcmlhbGl6ZWRUeEhleDogc3RyaW5nIHwgdW5kZWZpbmVkO1xufTtcbnR5cGUgRGVjcnlwdGVkR3BnS2V5cyA9IHsgYml0Z29HcGdLZXk6IG9wZW5wZ3AuS2V5OyB1c2VyR3BnUHJ2S2V5OiBvcGVucGdwLlByaXZhdGVLZXkgfTtcblxuY2xhc3MgVGVzdEJhc2VUc3NVdGlscyBleHRlbmRzIEJhc2VUc3NVdGlsczxCdWZmZXI+IHtcbiAgZ2V0U2lnbmFibGVIZXhBbmREZXJpdmF0aW9uUGF0aEZvclRlc3QoXG4gICAgdHhSZXF1ZXN0OiBUeFJlcXVlc3QsXG4gICAgbWlzc2luZ1RyYW5zYWN0aW9uc01lc3NhZ2U/OiBzdHJpbmdcbiAgKTogU2lnbmFibGVIZXhBbmREZXJpdmF0aW9uUGF0aCB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0U2lnbmFibGVIZXhBbmREZXJpdmF0aW9uUGF0aCh0eFJlcXVlc3QsIG1pc3NpbmdUcmFuc2FjdGlvbnNNZXNzYWdlKTtcbiAgfVxuXG4gIHZhbGlkYXRlQWRhdGFGb3JUZXN0KGFkYXRhOiBzdHJpbmcsIGN5cGhlcnRleHQ6IHN0cmluZywgcm91bmREb21haW5TZXBhcmF0b3I6IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMudmFsaWRhdGVBZGF0YShhZGF0YSwgY3lwaGVydGV4dCwgcm91bmREb21haW5TZXBhcmF0b3IpO1xuICB9XG5cbiAgZ2V0Qml0Z29BbmRVc2VyR3BnS2V5c0ZvclRlc3QoXG4gICAgYml0Z29QdWJsaWNHcGdLZXk6IHN0cmluZyxcbiAgICBlbmNyeXB0ZWRVc2VyR3BnUHJ2S2V5OiBzdHJpbmcsXG4gICAgd2FsbGV0UGFzc3BocmFzZTogc3RyaW5nLFxuICAgIGFkYXRhOiBzdHJpbmcsXG4gICAgdXNlckdwZ0tleURvbWFpblNlcGFyYXRvcjogc3RyaW5nXG4gICk6IFByb21pc2U8RGVjcnlwdGVkR3BnS2V5cz4ge1xuICAgIHJldHVybiB0aGlzLmdldEJpdGdvQW5kVXNlckdwZ0tleXMoXG4gICAgICBiaXRnb1B1YmxpY0dwZ0tleSxcbiAgICAgIGVuY3J5cHRlZFVzZXJHcGdQcnZLZXksXG4gICAgICB3YWxsZXRQYXNzcGhyYXNlLFxuICAgICAgYWRhdGEsXG4gICAgICB1c2VyR3BnS2V5RG9tYWluU2VwYXJhdG9yXG4gICAgKTtcbiAgfVxufVxuXG5kZXNjcmliZSgnQmFzZSBUU1MgVXRpbHMnLCBmdW5jdGlvbiAoKSB7XG4gIGNvbnN0IHdhbGxldFBhc3NwaHJhc2UgPSAndGVzdC1wYXNzd29yZCc7XG4gIGNvbnN0IHNpZ25pbmdVc2VyR3BnS2V5RG9tYWluU2VwYXJhdG9yID0gJ01QU19EU0dfU0lHTklOR19VU0VSX0dQR19LRVknO1xuICBjb25zdCByb3VuZE9uZURvbWFpblNlcGFyYXRvciA9ICdNUFNfRFNHX1NJR05JTkdfUk9VTkQxX1NUQVRFJztcblxuICBsZXQgYmFzZVRzc1V0aWxzOiBUZXN0QmFzZVRzc1V0aWxzO1xuICBsZXQgZWNkc2FNUEN2MlV0aWxzOiBFY2RzYU1QQ3YyVXRpbHM7XG4gIGxldCBtb2NrQml0Z286IEJpdEdvQmFzZTtcbiAgbGV0IGRlY3J5cHRBc3luY1N0dWI6IHNpbm9uLlNpbm9uU3R1YjtcbiAgbGV0IGJpdGdvR3BnS2V5UGFpcjogQml0Z29HcGdLZXlQYWlyO1xuICBsZXQgdXNlckdwZ0tleVBhaXI6IEJpdGdvR3BnS2V5UGFpcjtcbiAgbGV0IHVzZXJTaGFyZTogQnVmZmVyO1xuXG4gIGJlZm9yZShhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgb3BlbnBncC5jb25maWcucmVqZWN0Q3VydmVzID0gbmV3IFNldCgpO1xuICAgIGJpdGdvR3BnS2V5UGFpciA9IGF3YWl0IG9wZW5wZ3AuZ2VuZXJhdGVLZXkoe1xuICAgICAgdXNlcklEczogW3sgbmFtZTogJ2JpdGdvJywgZW1haWw6ICdiaXRnb0B0ZXN0LmNvbScgfV0sXG4gICAgICBjdXJ2ZTogJ2VkMjU1MTknLFxuICAgICAgZm9ybWF0OiAnYXJtb3JlZCcsXG4gICAgfSk7XG4gICAgdXNlckdwZ0tleVBhaXIgPSBhd2FpdCBvcGVucGdwLmdlbmVyYXRlS2V5KHtcbiAgICAgIHVzZXJJRHM6IFt7IG5hbWU6ICd1c2VyJywgZW1haWw6ICd1c2VyQHRlc3QuY29tJyB9XSxcbiAgICAgIGN1cnZlOiAnZWQyNTUxOScsXG4gICAgICBmb3JtYXQ6ICdhcm1vcmVkJyxcbiAgICB9KTtcblxuICAgIGNvbnN0IFt1c2VyRGtnU2Vzc2lvbl0gPSBhd2FpdCBEa2xzVXRpbHMuZ2VuZXJhdGVES0dLZXlTaGFyZXMoKTtcbiAgICB1c2VyU2hhcmUgPSB1c2VyRGtnU2Vzc2lvbi5nZXRLZXlTaGFyZSgpO1xuICB9KTtcblxuICBiZWZvcmVFYWNoKGZ1bmN0aW9uICgpIHtcbiAgICBkZWNyeXB0QXN5bmNTdHViID0gc2lub24uc3R1YigpLmNhbGxzRmFrZShhc3luYyAoeyBpbnB1dCwgcGFzc3dvcmQgfTogUGFyYW1ldGVyczxCaXRHb0Jhc2VbJ2RlY3J5cHRBc3luYyddPlswXSkgPT4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgcGFyc2VkID0gSlNPTi5wYXJzZShpbnB1dCk7XG4gICAgICAgIGlmIChwYXJzZWQudiA9PT0gMiAmJiBwYXJzZWQucGxhaW50ZXh0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICByZXR1cm4gcGFyc2VkLnBsYWludGV4dDtcbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCB7fVxuICAgICAgcmV0dXJuIHNqY2wuZGVjcnlwdChwYXNzd29yZCA/PyAnJywgaW5wdXQpO1xuICAgIH0pO1xuXG4gICAgY29uc3QgbW9ja0JnID0ge30gYXMgQml0R29CYXNlO1xuICAgIG1vY2tCZy5nZXRFbnYgPSBzaW5vbi5zdHViKCkucmV0dXJucygndGVzdCcpO1xuICAgIG1vY2tCZy5lbmNyeXB0ID0gc2lub25cbiAgICAgIC5zdHViKClcbiAgICAgIC5jYWxsc0Zha2UoKHBhcmFtcykgPT4gZW5jcnlwdFdpdGhTamNsKHBhcmFtcy5wYXNzd29yZCA/PyAnJywgcGFyYW1zLmlucHV0LCBwYXJhbXMuYWRhdGEpKTtcbiAgICBtb2NrQmcuZW5jcnlwdEFzeW5jID0gc2lub25cbiAgICAgIC5zdHViKClcbiAgICAgIC5jYWxsc0Zha2UoYXN5bmMgKHBhcmFtcykgPT4gZW5jcnlwdFdpdGhTamNsKHBhcmFtcy5wYXNzd29yZCA/PyAnJywgcGFyYW1zLmlucHV0LCBwYXJhbXMuYWRhdGEpKTtcbiAgICBtb2NrQmcuZGVjcnlwdCA9IHNpbm9uLnN0dWIoKS5jYWxsc0Zha2UoKHBhcmFtcykgPT4gc2pjbC5kZWNyeXB0KHBhcmFtcy5wYXNzd29yZCA/PyAnJywgcGFyYW1zLmlucHV0KSk7XG4gICAgbW9ja0JnLmRlY3J5cHRBc3luYyA9IGRlY3J5cHRBc3luY1N0dWI7XG4gICAgbW9ja0JpdGdvID0gbW9ja0JnO1xuXG4gICAgY29uc3QgbW9ja0NvaW4gPSB7fSBhcyBJQmFzZUNvaW47XG4gICAgbW9ja0NvaW4uZ2V0SGFzaEZ1bmN0aW9uID0gc2lub24uc3R1YigpLmNhbGxzRmFrZSgoKSA9PiBjcmVhdGVLZWNjYWtIYXNoKCdrZWNjYWsyNTYnKSBhcyBIYXNoKTtcblxuICAgIGJhc2VUc3NVdGlscyA9IG5ldyBUZXN0QmFzZVRzc1V0aWxzKG1vY2tCaXRnbywgbW9ja0NvaW4pO1xuICAgIGVjZHNhTVBDdjJVdGlscyA9IG5ldyBFY2RzYU1QQ3YyVXRpbHMobW9ja0JpdGdvLCBtb2NrQ29pbik7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdnZXRTaWduYWJsZUhleEFuZERlcml2YXRpb25QYXRoJywgZnVuY3Rpb24gKCkge1xuICAgIGl0KCdleHRyYWN0cyBzaWduYWJsZUhleCBhbmQgZGVyaXZhdGlvblBhdGggZnJvbSBhIHZhbGlkIHR4UmVxdWVzdCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHR4UmVxdWVzdCA9IGJ1aWxkVHhSZXF1ZXN0KHtcbiAgICAgICAgdHJhbnNhY3Rpb25zOiBbXG4gICAgICAgICAgYnVpbGRUcmFuc2FjdGlvbih7XG4gICAgICAgICAgICB1bnNpZ25lZFR4OiBidWlsZFVuc2lnbmVkVHJhbnNhY3Rpb24oeyBzaWduYWJsZUhleDogJ2RlYWRiZWVmJywgZGVyaXZhdGlvblBhdGg6ICdtLzAvMCcgfSksXG4gICAgICAgICAgfSksXG4gICAgICAgIF0sXG4gICAgICB9KTtcblxuICAgICAgY29uc3QgcmVzdWx0ID0gYmFzZVRzc1V0aWxzLmdldFNpZ25hYmxlSGV4QW5kRGVyaXZhdGlvblBhdGhGb3JUZXN0KHR4UmVxdWVzdCk7XG4gICAgICBhc3NlcnQuZXF1YWwocmVzdWx0LnNpZ25hYmxlSGV4LCAnZGVhZGJlZWYnKTtcbiAgICAgIGFzc2VydC5lcXVhbChyZXN1bHQuZGVyaXZhdGlvblBhdGgsICdtLzAvMCcpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Rocm93cyB3aGVuIHRyYW5zYWN0aW9ucyBmaWVsZCBpcyBtaXNzaW5nJywgZnVuY3Rpb24gKCkge1xuICAgICAgYXNzZXJ0LnRocm93cyhcbiAgICAgICAgKCkgPT4gYmFzZVRzc1V0aWxzLmdldFNpZ25hYmxlSGV4QW5kRGVyaXZhdGlvblBhdGhGb3JUZXN0KGJ1aWxkVHhSZXF1ZXN0V2l0aG91dFRyYW5zYWN0aW9ucygpKSxcbiAgICAgICAgL2NyZWF0ZU9mZmxpbmVTaGFyZSByZXF1aXJlcyBleGFjdGx5IG9uZSB0cmFuc2FjdGlvbiBpbiB0eFJlcXVlc3QvXG4gICAgICApO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Rocm93cyB3aGVuIHRyYW5zYWN0aW9ucyBhcnJheSBpcyBlbXB0eScsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGFzc2VydC50aHJvd3MoXG4gICAgICAgICgpID0+IGJhc2VUc3NVdGlscy5nZXRTaWduYWJsZUhleEFuZERlcml2YXRpb25QYXRoRm9yVGVzdChidWlsZFR4UmVxdWVzdCh7IHRyYW5zYWN0aW9uczogW10gfSkpLFxuICAgICAgICAvY3JlYXRlT2ZmbGluZVNoYXJlIHJlcXVpcmVzIGV4YWN0bHkgb25lIHRyYW5zYWN0aW9uIGluIHR4UmVxdWVzdC9cbiAgICAgICk7XG4gICAgfSk7XG5cbiAgICBpdCgndGhyb3dzIHdoZW4gdHJhbnNhY3Rpb25zIGFycmF5IGhhcyBtb3JlIHRoYW4gb25lIGVsZW1lbnQnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBhc3NlcnQudGhyb3dzKFxuICAgICAgICAoKSA9PlxuICAgICAgICAgIGJhc2VUc3NVdGlscy5nZXRTaWduYWJsZUhleEFuZERlcml2YXRpb25QYXRoRm9yVGVzdChcbiAgICAgICAgICAgIGJ1aWxkVHhSZXF1ZXN0KHtcbiAgICAgICAgICAgICAgdHJhbnNhY3Rpb25zOiBbXG4gICAgICAgICAgICAgICAgYnVpbGRUcmFuc2FjdGlvbih7XG4gICAgICAgICAgICAgICAgICB1bnNpZ25lZFR4OiBidWlsZFVuc2lnbmVkVHJhbnNhY3Rpb24oeyBzaWduYWJsZUhleDogJ2FhYScsIGRlcml2YXRpb25QYXRoOiAnbS8wJyB9KSxcbiAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICBidWlsZFRyYW5zYWN0aW9uKHtcbiAgICAgICAgICAgICAgICAgIHVuc2lnbmVkVHg6IGJ1aWxkVW5zaWduZWRUcmFuc2FjdGlvbih7IHNpZ25hYmxlSGV4OiAnYmJiJywgZGVyaXZhdGlvblBhdGg6ICdtLzEnIH0pLFxuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgfSlcbiAgICAgICAgICApLFxuICAgICAgICAvY3JlYXRlT2ZmbGluZVNoYXJlIHJlcXVpcmVzIGV4YWN0bHkgb25lIHRyYW5zYWN0aW9uIGluIHR4UmVxdWVzdC9cbiAgICAgICk7XG4gICAgfSk7XG5cbiAgICBpdCgndGhyb3dzIHdoZW4gdW5zaWduZWRUeCBpcyBtaXNzaW5nJywgZnVuY3Rpb24gKCkge1xuICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvciBJbnRlbnRpb25hbGx5IG1hbGZvcm1lZCB0byBleGVyY2lzZSB0aGUgcnVudGltZSBndWFyZC5cbiAgICAgIGNvbnN0IG5vVW5zaWduZWRUeDogVHhSZXF1ZXN0VHJhbnNhY3Rpb24gPSB7IHN0YXRlOiAncGVuZGluZ1NpZ25hdHVyZScsIHNpZ25hdHVyZVNoYXJlczogW10gfTtcbiAgICAgIGFzc2VydC50aHJvd3MoXG4gICAgICAgICgpID0+IGJhc2VUc3NVdGlscy5nZXRTaWduYWJsZUhleEFuZERlcml2YXRpb25QYXRoRm9yVGVzdChidWlsZFR4UmVxdWVzdCh7IHRyYW5zYWN0aW9uczogW25vVW5zaWduZWRUeF0gfSkpLFxuICAgICAgICAvTWlzc2luZyB1bnNpZ25lZFR4IGluIHRyYW5zYWN0aW9ucy9cbiAgICAgICk7XG4gICAgfSk7XG5cbiAgICBpdCgndGhyb3dzIHdoZW4gc2lnbmFibGVIZXggaXMgbWlzc2luZycsIGZ1bmN0aW9uICgpIHtcbiAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgSW50ZW50aW9uYWxseSBtYWxmb3JtZWQgdG8gZXhlcmNpc2UgdGhlIHJ1bnRpbWUgZ3VhcmQuXG4gICAgICBjb25zdCBub1NpZ25hYmxlSGV4OiBVbnNpZ25lZFRyYW5zYWN0aW9uID0geyBzZXJpYWxpemVkVHhIZXg6ICdhYWJiY2NkZCcsIGRlcml2YXRpb25QYXRoOiAnbS8wJyB9O1xuICAgICAgYXNzZXJ0LnRocm93cyhcbiAgICAgICAgKCkgPT5cbiAgICAgICAgICBiYXNlVHNzVXRpbHMuZ2V0U2lnbmFibGVIZXhBbmREZXJpdmF0aW9uUGF0aEZvclRlc3QoXG4gICAgICAgICAgICBidWlsZFR4UmVxdWVzdCh7IHRyYW5zYWN0aW9uczogW2J1aWxkVHJhbnNhY3Rpb24oeyB1bnNpZ25lZFR4OiBub1NpZ25hYmxlSGV4IH0pXSB9KVxuICAgICAgICAgICksXG4gICAgICAgIC9NaXNzaW5nIHNpZ25hYmxlSGV4IGluIHVuc2lnbmVkVHgvXG4gICAgICApO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Rocm93cyB3aGVuIGRlcml2YXRpb25QYXRoIGlzIG1pc3NpbmcnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAvLyBAdHMtZXhwZWN0LWVycm9yIEludGVudGlvbmFsbHkgbWFsZm9ybWVkIHRvIGV4ZXJjaXNlIHRoZSBydW50aW1lIGd1YXJkLlxuICAgICAgY29uc3Qgbm9EZXJpdmF0aW9uUGF0aDogVW5zaWduZWRUcmFuc2FjdGlvbiA9IHsgc2VyaWFsaXplZFR4SGV4OiAnYWFiYmNjZGQnLCBzaWduYWJsZUhleDogJ2RlYWRiZWVmJyB9O1xuICAgICAgYXNzZXJ0LnRocm93cyhcbiAgICAgICAgKCkgPT5cbiAgICAgICAgICBiYXNlVHNzVXRpbHMuZ2V0U2lnbmFibGVIZXhBbmREZXJpdmF0aW9uUGF0aEZvclRlc3QoXG4gICAgICAgICAgICBidWlsZFR4UmVxdWVzdCh7IHRyYW5zYWN0aW9uczogW2J1aWxkVHJhbnNhY3Rpb24oeyB1bnNpZ25lZFR4OiBub0Rlcml2YXRpb25QYXRoIH0pXSB9KVxuICAgICAgICAgICksXG4gICAgICAgIC9NaXNzaW5nIGRlcml2YXRpb25QYXRoIGluIHVuc2lnbmVkVHgvXG4gICAgICApO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgndmFsaWRhdGVBZGF0YScsIGZ1bmN0aW9uICgpIHtcbiAgICBpdCgncGFzc2VzIHdoZW4gYWRhdGEgbWF0Y2hlcyB3aXRoIGRvbWFpbiBzZXBhcmF0b3InLCBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBhZGF0YSA9ICd0ZXN0LXZhbHVlJztcbiAgICAgIGNvbnN0IGN5cGhlcnRleHQgPSBtb2NrQml0Z28uZW5jcnlwdCh7XG4gICAgICAgIGlucHV0OiAnc2VjcmV0JyxcbiAgICAgICAgcGFzc3dvcmQ6IHdhbGxldFBhc3NwaHJhc2UsXG4gICAgICAgIGFkYXRhOiBgJHtyb3VuZE9uZURvbWFpblNlcGFyYXRvcn06JHthZGF0YX1gLFxuICAgICAgfSk7XG4gICAgICBhc3NlcnQuZG9lc05vdFRocm93KCgpID0+IGJhc2VUc3NVdGlscy52YWxpZGF0ZUFkYXRhRm9yVGVzdChhZGF0YSwgY3lwaGVydGV4dCwgcm91bmRPbmVEb21haW5TZXBhcmF0b3IpKTtcbiAgICB9KTtcblxuICAgIGl0KCdwYXNzZXMgd2hlbiBhZGF0YSBtYXRjaGVzIHdpdGhvdXQgZG9tYWluIHNlcGFyYXRvcicsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IGFkYXRhID0gJ3Rlc3QtdmFsdWUnO1xuICAgICAgY29uc3QgY3lwaGVydGV4dCA9IG1vY2tCaXRnby5lbmNyeXB0KHsgaW5wdXQ6ICdzZWNyZXQnLCBwYXNzd29yZDogd2FsbGV0UGFzc3BocmFzZSwgYWRhdGEgfSk7XG4gICAgICBhc3NlcnQuZG9lc05vdFRocm93KCgpID0+IGJhc2VUc3NVdGlscy52YWxpZGF0ZUFkYXRhRm9yVGVzdChhZGF0YSwgY3lwaGVydGV4dCwgcm91bmRPbmVEb21haW5TZXBhcmF0b3IpKTtcbiAgICB9KTtcblxuICAgIGl0KCd0aHJvd3Mgd2hlbiBhZGF0YSBkb2VzIG5vdCBtYXRjaCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IGN5cGhlcnRleHQgPSBtb2NrQml0Z28uZW5jcnlwdCh7XG4gICAgICAgIGlucHV0OiAnc2VjcmV0JyxcbiAgICAgICAgcGFzc3dvcmQ6IHdhbGxldFBhc3NwaHJhc2UsXG4gICAgICAgIGFkYXRhOiBgJHtyb3VuZE9uZURvbWFpblNlcGFyYXRvcn06Y29ycmVjdGAsXG4gICAgICB9KTtcbiAgICAgIGFzc2VydC50aHJvd3MoXG4gICAgICAgICgpID0+IGJhc2VUc3NVdGlscy52YWxpZGF0ZUFkYXRhRm9yVGVzdCgnd3JvbmcnLCBjeXBoZXJ0ZXh0LCByb3VuZE9uZURvbWFpblNlcGFyYXRvciksXG4gICAgICAgIC9BZGF0YSBkb2VzIG5vdCBtYXRjaCBjeXBoZXJ0ZXh0IGFkYXRhL1xuICAgICAgKTtcbiAgICB9KTtcblxuICAgIGl0KCd0aHJvd3Mgd2hlbiBjeXBoZXJ0ZXh0IGlzIG5vdCB2YWxpZCBKU09OJywgZnVuY3Rpb24gKCkge1xuICAgICAgYXNzZXJ0LnRocm93cyhcbiAgICAgICAgKCkgPT4gYmFzZVRzc1V0aWxzLnZhbGlkYXRlQWRhdGFGb3JUZXN0KCdhZGF0YScsICdub3QtanNvbicsIHJvdW5kT25lRG9tYWluU2VwYXJhdG9yKSxcbiAgICAgICAgL0ZhaWxlZCB0byBwYXJzZSBjeXBoZXJ0ZXh0IHRvIEpTT04vXG4gICAgICApO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnZ2V0Qml0Z29BbmRVc2VyR3BnS2V5cycsIGZ1bmN0aW9uICgpIHtcbiAgICBpdCgnZGVjcnlwdHMgdjEgU0pDTCBlbnZlbG9wZSB3aXRob3V0IGFkYXRhIGFuZCBza2lwcyB2YWxpZGF0aW9uJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgZW5jcnlwdGVkVXNlckdwZ1BydktleSA9IG1vY2tCaXRnby5lbmNyeXB0KHtcbiAgICAgICAgaW5wdXQ6IHVzZXJHcGdLZXlQYWlyLnByaXZhdGVLZXksXG4gICAgICAgIHBhc3N3b3JkOiB3YWxsZXRQYXNzcGhyYXNlLFxuICAgICAgfSk7XG5cbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGJhc2VUc3NVdGlscy5nZXRCaXRnb0FuZFVzZXJHcGdLZXlzRm9yVGVzdChcbiAgICAgICAgYml0Z29HcGdLZXlQYWlyLnB1YmxpY0tleSxcbiAgICAgICAgZW5jcnlwdGVkVXNlckdwZ1BydktleSxcbiAgICAgICAgd2FsbGV0UGFzc3BocmFzZSxcbiAgICAgICAgJycsXG4gICAgICAgIHNpZ25pbmdVc2VyR3BnS2V5RG9tYWluU2VwYXJhdG9yXG4gICAgICApO1xuXG4gICAgICBhc3NlcnQub2socmVzdWx0LmJpdGdvR3BnS2V5KTtcbiAgICAgIGFzc2VydC5lcXVhbChyZXN1bHQudXNlckdwZ1BydktleS5pc1ByaXZhdGUoKSwgdHJ1ZSk7XG4gICAgfSk7XG5cbiAgICBpdCgnZGVjcnlwdHMgdjEgU0pDTCBlbnZlbG9wZSB3aXRoIG1hdGNoaW5nIGFkYXRhJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgYWRhdGEgPSAndGVzdC1hZGF0YSc7XG4gICAgICBjb25zdCBlbmNyeXB0ZWRVc2VyR3BnUHJ2S2V5ID0gbW9ja0JpdGdvLmVuY3J5cHQoe1xuICAgICAgICBpbnB1dDogdXNlckdwZ0tleVBhaXIucHJpdmF0ZUtleSxcbiAgICAgICAgcGFzc3dvcmQ6IHdhbGxldFBhc3NwaHJhc2UsXG4gICAgICAgIGFkYXRhOiBgJHtzaWduaW5nVXNlckdwZ0tleURvbWFpblNlcGFyYXRvcn06JHthZGF0YX1gLFxuICAgICAgfSk7XG5cbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGJhc2VUc3NVdGlscy5nZXRCaXRnb0FuZFVzZXJHcGdLZXlzRm9yVGVzdChcbiAgICAgICAgYml0Z29HcGdLZXlQYWlyLnB1YmxpY0tleSxcbiAgICAgICAgZW5jcnlwdGVkVXNlckdwZ1BydktleSxcbiAgICAgICAgd2FsbGV0UGFzc3BocmFzZSxcbiAgICAgICAgYWRhdGEsXG4gICAgICAgIHNpZ25pbmdVc2VyR3BnS2V5RG9tYWluU2VwYXJhdG9yXG4gICAgICApO1xuXG4gICAgICBhc3NlcnQub2socmVzdWx0LmJpdGdvR3BnS2V5KTtcbiAgICAgIGFzc2VydC5lcXVhbChyZXN1bHQudXNlckdwZ1BydktleS5pc1ByaXZhdGUoKSwgdHJ1ZSk7XG4gICAgfSk7XG5cbiAgICBpdCgnZGVjcnlwdHMgdmlhIGRlY3J5cHRBc3luYyBhbmQgcmV0dXJucyBHUEcga2V5cycsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IGFkYXRhID0gJ3Rlc3QtYWRhdGEnO1xuICAgICAgLy8gVXNlIGEgZmFrZSB2MiBlbnZlbG9wZSAodjoyKSBzbyBpc1YyRW52ZWxvcGUgcmV0dXJucyB0cnVlIGFuZCBkZWNyeXB0QXN5bmMgaXMgY2FsbGVkLlxuICAgICAgLy8gVGhlIHN0dWIgZXh0cmFjdHMgcGxhaW50ZXh0IGRpcmVjdGx5IGZyb20gdGhpcyBmYWtlIGZvcm1hdC5cbiAgICAgIGNvbnN0IGVuY3J5cHRlZFVzZXJHcGdQcnZLZXkgPSBKU09OLnN0cmluZ2lmeSh7XG4gICAgICAgIHY6IDIsXG4gICAgICAgIGFkYXRhOiBgJHtzaWduaW5nVXNlckdwZ0tleURvbWFpblNlcGFyYXRvcn06JHthZGF0YX1gLFxuICAgICAgICBwbGFpbnRleHQ6IHVzZXJHcGdLZXlQYWlyLnByaXZhdGVLZXksXG4gICAgICB9KTtcblxuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgYmFzZVRzc1V0aWxzLmdldEJpdGdvQW5kVXNlckdwZ0tleXNGb3JUZXN0KFxuICAgICAgICBiaXRnb0dwZ0tleVBhaXIucHVibGljS2V5LFxuICAgICAgICBlbmNyeXB0ZWRVc2VyR3BnUHJ2S2V5LFxuICAgICAgICB3YWxsZXRQYXNzcGhyYXNlLFxuICAgICAgICBhZGF0YSxcbiAgICAgICAgc2lnbmluZ1VzZXJHcGdLZXlEb21haW5TZXBhcmF0b3JcbiAgICAgICk7XG5cbiAgICAgIHNpbm9uLmFzc2VydC5jYWxsZWRPbmNlKGRlY3J5cHRBc3luY1N0dWIpO1xuICAgICAgYXNzZXJ0Lm9rKHJlc3VsdC5iaXRnb0dwZ0tleSk7XG4gICAgICBhc3NlcnQuZXF1YWwocmVzdWx0LnVzZXJHcGdQcnZLZXkuaXNQcml2YXRlKCksIHRydWUpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Rocm93cyB3aGVuIGFkYXRhIGRvZXMgbm90IG1hdGNoJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgZW5jcnlwdGVkVXNlckdwZ1BydktleSA9IG1vY2tCaXRnby5lbmNyeXB0KHtcbiAgICAgICAgaW5wdXQ6IHVzZXJHcGdLZXlQYWlyLnByaXZhdGVLZXksXG4gICAgICAgIHBhc3N3b3JkOiB3YWxsZXRQYXNzcGhyYXNlLFxuICAgICAgICBhZGF0YTogYCR7c2lnbmluZ1VzZXJHcGdLZXlEb21haW5TZXBhcmF0b3J9OmNvcnJlY3QtYWRhdGFgLFxuICAgICAgfSk7XG5cbiAgICAgIGF3YWl0IGFzc2VydC5yZWplY3RzKFxuICAgICAgICBiYXNlVHNzVXRpbHMuZ2V0Qml0Z29BbmRVc2VyR3BnS2V5c0ZvclRlc3QoXG4gICAgICAgICAgYml0Z29HcGdLZXlQYWlyLnB1YmxpY0tleSxcbiAgICAgICAgICBlbmNyeXB0ZWRVc2VyR3BnUHJ2S2V5LFxuICAgICAgICAgIHdhbGxldFBhc3NwaHJhc2UsXG4gICAgICAgICAgJ3dyb25nLWFkYXRhJyxcbiAgICAgICAgICBzaWduaW5nVXNlckdwZ0tleURvbWFpblNlcGFyYXRvclxuICAgICAgICApLFxuICAgICAgICAvQWRhdGEgZG9lcyBub3QgbWF0Y2ggY3lwaGVydGV4dCBhZGF0YS9cbiAgICAgICk7XG4gICAgfSk7XG5cbiAgICBpdCgndGhyb3dzIHdoZW4gY3lwaGVydGV4dCBpcyBub3QgdmFsaWQgSlNPTicsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGF3YWl0IGFzc2VydC5yZWplY3RzKFxuICAgICAgICBiYXNlVHNzVXRpbHMuZ2V0Qml0Z29BbmRVc2VyR3BnS2V5c0ZvclRlc3QoXG4gICAgICAgICAgYml0Z29HcGdLZXlQYWlyLnB1YmxpY0tleSxcbiAgICAgICAgICAnbm90LXZhbGlkLWpzb24nLFxuICAgICAgICAgIHdhbGxldFBhc3NwaHJhc2UsXG4gICAgICAgICAgJ3Rlc3QtYWRhdGEnLFxuICAgICAgICAgIHNpZ25pbmdVc2VyR3BnS2V5RG9tYWluU2VwYXJhdG9yXG4gICAgICAgICksXG4gICAgICAgIC9qc29uIGRlY29kZXxGYWlsZWQgdG8gcGFyc2UgY3lwaGVydGV4dCB0byBKU09OL1xuICAgICAgKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ3JlY3JlYXRlVHhSZXF1ZXN0JywgZnVuY3Rpb24gKCkge1xuICAgIGZ1bmN0aW9uIG1ha2VXYWxsZXQobXVsdGlzaWdUeXBlVmVyc2lvbjogJ01QQ3YyJyB8IHVuZGVmaW5lZCk6IElXYWxsZXQge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgaWQ6IHNpbm9uLnN0dWIoKS5yZXR1cm5zKCd3YWxsZXQtaWQnKSxcbiAgICAgICAgbXVsdGlzaWdUeXBlVmVyc2lvbjogc2lub24uc3R1YigpLnJldHVybnMobXVsdGlzaWdUeXBlVmVyc2lvbiksXG4gICAgICB9IGFzIHVua25vd24gYXMgSVdhbGxldDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBtYWtlQ29pbihtcGNBbGdvcml0aG06ICdlZGRzYScgfCAnZWNkc2EnLCBjaGFpbiA9ICd0c29sJyk6IElCYXNlQ29pbiB7XG4gICAgICBjb25zdCBjb2luID0ge30gYXMgSUJhc2VDb2luO1xuICAgICAgY29pbi5nZXRIYXNoRnVuY3Rpb24gPSBzaW5vbi5zdHViKCk7XG4gICAgICBjb2luLmdldE1QQ0FsZ29yaXRobSA9IHNpbm9uLnN0dWIoKS5yZXR1cm5zKG1wY0FsZ29yaXRobSk7XG4gICAgICBjb2luLmdldENoYWluID0gc2lub24uc3R1YigpLnJldHVybnMoY2hhaW4pO1xuICAgICAgcmV0dXJuIGNvaW47XG4gICAgfVxuXG4gICAgaXQoJ2Rlcml2ZXMgdHhQYXJhbXMgZnJvbSBpbnRlbnQgZm9yIEVkRFNBIE1QQ3YyIHdhbGxldHMnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCB0eFJlcXVlc3RJZCA9ICd0eC1yZXEtaWQtMSc7XG4gICAgICBjb25zdCByZXFJZCA9IG5ldyBSZXF1ZXN0VHJhY2VyKCk7XG4gICAgICBjb25zdCB0eFJlcXVlc3QgPSBidWlsZFR4UmVxdWVzdCh7XG4gICAgICAgIHR4UmVxdWVzdElkLFxuICAgICAgICBpbnRlbnQ6IHtcbiAgICAgICAgICBpbnRlbnRUeXBlOiAncGF5bWVudCcsXG4gICAgICAgICAgcmVjaXBpZW50czogW3sgYWRkcmVzczogeyBhZGRyZXNzOiAnc29sQWRkcjEnIH0sIGFtb3VudDogeyB2YWx1ZTogJzUwMDAwMDAnLCBzeW1ib2w6ICd0c29sJyB9IH1dLFxuICAgICAgICB9LFxuICAgICAgfSk7XG5cbiAgICAgIGNvbnN0IHV0aWxzID0gbmV3IFRlc3RCYXNlVHNzVXRpbHMobW9ja0JpdGdvLCBtYWtlQ29pbignZWRkc2EnKSwgbWFrZVdhbGxldCgnTVBDdjInKSk7XG4gICAgICBzaW5vbi5zdHViKHV0aWxzLCAnZGVsZXRlU2lnbmF0dXJlU2hhcmVzJykucmVzb2x2ZXMoKTtcbiAgICAgIHNpbm9uLnN0dWIodXRpbHMsICdnZXRUeFJlcXVlc3QnKS5yZXNvbHZlcyh0eFJlcXVlc3QpO1xuICAgICAgY29uc3Qgc2lnblR4UmVxdWVzdFN0dWIgPSBzaW5vbi5zdHViKHV0aWxzLCAnc2lnblR4UmVxdWVzdCcpLnJlc29sdmVzKHR4UmVxdWVzdCk7XG5cbiAgICAgIGF3YWl0IHV0aWxzLnJlY3JlYXRlVHhSZXF1ZXN0KHR4UmVxdWVzdElkLCAncHJ2JywgcmVxSWQpO1xuXG4gICAgICAvLyBOYXRpdmUgU09MOiBzeW1ib2wgZXF1YWxzIHRoZSBjaGFpbiBuYW1lLCBzbyB0b2tlbk5hbWUgbXVzdCBiZSBvbWl0dGVkXG4gICAgICBhc3NlcnQuZGVlcFN0cmljdEVxdWFsKHNpZ25UeFJlcXVlc3RTdHViLmZpcnN0Q2FsbC5hcmdzWzBdLnR4UGFyYW1zLCB7XG4gICAgICAgIHJlY2lwaWVudHM6IFt7IGFkZHJlc3M6ICdzb2xBZGRyMScsIGFtb3VudDogJzUwMDAwMDAnIH1dLFxuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2V0cyB0b2tlbk5hbWUgZm9yIFNQTCB0b2tlbnMgKHN5bWJvbCBkaWZmZXJzIGZyb20gY2hhaW4gbmFtZSknLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCB0eFJlcXVlc3RJZCA9ICd0eC1yZXEtaWQtc3BsJztcbiAgICAgIGNvbnN0IHJlcUlkID0gbmV3IFJlcXVlc3RUcmFjZXIoKTtcbiAgICAgIGNvbnN0IHR4UmVxdWVzdCA9IGJ1aWxkVHhSZXF1ZXN0KHtcbiAgICAgICAgdHhSZXF1ZXN0SWQsXG4gICAgICAgIGludGVudDoge1xuICAgICAgICAgIGludGVudFR5cGU6ICdwYXltZW50JyxcbiAgICAgICAgICByZWNpcGllbnRzOiBbeyBhZGRyZXNzOiB7IGFkZHJlc3M6ICdzcGxBZGRyMScgfSwgYW1vdW50OiB7IHZhbHVlOiAnMTAwMCcsIHN5bWJvbDogJ3Rzb2w6dXNkYycgfSB9XSxcbiAgICAgICAgfSxcbiAgICAgIH0pO1xuXG4gICAgICBjb25zdCB1dGlscyA9IG5ldyBUZXN0QmFzZVRzc1V0aWxzKG1vY2tCaXRnbywgbWFrZUNvaW4oJ2VkZHNhJywgJ3Rzb2wnKSwgbWFrZVdhbGxldCgnTVBDdjInKSk7XG4gICAgICBzaW5vbi5zdHViKHV0aWxzLCAnZGVsZXRlU2lnbmF0dXJlU2hhcmVzJykucmVzb2x2ZXMoKTtcbiAgICAgIHNpbm9uLnN0dWIodXRpbHMsICdnZXRUeFJlcXVlc3QnKS5yZXNvbHZlcyh0eFJlcXVlc3QpO1xuICAgICAgY29uc3Qgc2lnblR4UmVxdWVzdFN0dWIgPSBzaW5vbi5zdHViKHV0aWxzLCAnc2lnblR4UmVxdWVzdCcpLnJlc29sdmVzKHR4UmVxdWVzdCk7XG5cbiAgICAgIGF3YWl0IHV0aWxzLnJlY3JlYXRlVHhSZXF1ZXN0KHR4UmVxdWVzdElkLCAncHJ2JywgcmVxSWQpO1xuXG4gICAgICAvLyBTUEwgdG9rZW46IHN5bWJvbCBkaWZmZXJzIGZyb20gY2hhaW4gbmFtZSwgc28gdG9rZW5OYW1lIG11c3QgYmUgc2V0XG4gICAgICBhc3NlcnQuZGVlcFN0cmljdEVxdWFsKHNpZ25UeFJlcXVlc3RTdHViLmZpcnN0Q2FsbC5hcmdzWzBdLnR4UGFyYW1zLCB7XG4gICAgICAgIHJlY2lwaWVudHM6IFt7IGFkZHJlc3M6ICdzcGxBZGRyMScsIGFtb3VudDogJzEwMDAnLCB0b2tlbk5hbWU6ICd0c29sOnVzZGMnIH1dLFxuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBpdCgncGFzc2VzIHVuZGVmaW5lZCB0eFBhcmFtcyBmb3IgRWREU0EgTVBDdjIgd2hlbiBpbnRlbnQgaGFzIG5vIHJlY2lwaWVudHMnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCB0eFJlcXVlc3RJZCA9ICd0eC1yZXEtaWQtMic7XG4gICAgICBjb25zdCByZXFJZCA9IG5ldyBSZXF1ZXN0VHJhY2VyKCk7XG4gICAgICBjb25zdCB0eFJlcXVlc3QgPSBidWlsZFR4UmVxdWVzdCh7IHR4UmVxdWVzdElkLCBpbnRlbnQ6IHsgaW50ZW50VHlwZTogJ2VuYWJsZVRva2VuJyB9IH0pO1xuXG4gICAgICBjb25zdCB1dGlscyA9IG5ldyBUZXN0QmFzZVRzc1V0aWxzKG1vY2tCaXRnbywgbWFrZUNvaW4oJ2VkZHNhJyksIG1ha2VXYWxsZXQoJ01QQ3YyJykpO1xuICAgICAgc2lub24uc3R1Yih1dGlscywgJ2RlbGV0ZVNpZ25hdHVyZVNoYXJlcycpLnJlc29sdmVzKCk7XG4gICAgICBzaW5vbi5zdHViKHV0aWxzLCAnZ2V0VHhSZXF1ZXN0JykucmVzb2x2ZXModHhSZXF1ZXN0KTtcbiAgICAgIGNvbnN0IHNpZ25UeFJlcXVlc3RTdHViID0gc2lub24uc3R1Yih1dGlscywgJ3NpZ25UeFJlcXVlc3QnKS5yZXNvbHZlcyh0eFJlcXVlc3QpO1xuXG4gICAgICBhd2FpdCB1dGlscy5yZWNyZWF0ZVR4UmVxdWVzdCh0eFJlcXVlc3RJZCwgJ3BydicsIHJlcUlkKTtcblxuICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKHNpZ25UeFJlcXVlc3RTdHViLmZpcnN0Q2FsbC5hcmdzWzBdLnR4UGFyYW1zLCB1bmRlZmluZWQpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Bhc3NlcyB1bmRlZmluZWQgdHhQYXJhbXMgZm9yIEVDRFNBIE1QQ3YyIHdhbGxldHMgKGd1YXJkIGRvZXMgbm90IGFwcGx5KScsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHR4UmVxdWVzdElkID0gJ3R4LXJlcS1pZC0zJztcbiAgICAgIGNvbnN0IHJlcUlkID0gbmV3IFJlcXVlc3RUcmFjZXIoKTtcbiAgICAgIGNvbnN0IHR4UmVxdWVzdCA9IGJ1aWxkVHhSZXF1ZXN0KHtcbiAgICAgICAgdHhSZXF1ZXN0SWQsXG4gICAgICAgIGludGVudDoge1xuICAgICAgICAgIGludGVudFR5cGU6ICdwYXltZW50JyxcbiAgICAgICAgICByZWNpcGllbnRzOiBbeyBhZGRyZXNzOiB7IGFkZHJlc3M6ICdldGhBZGRyMScgfSwgYW1vdW50OiB7IHZhbHVlOiAnMTAwMDAwMCcsIHN5bWJvbDogJ2V0aCcgfSB9XSxcbiAgICAgICAgfSxcbiAgICAgIH0pO1xuXG4gICAgICBjb25zdCB1dGlscyA9IG5ldyBUZXN0QmFzZVRzc1V0aWxzKG1vY2tCaXRnbywgbWFrZUNvaW4oJ2VjZHNhJyksIG1ha2VXYWxsZXQoJ01QQ3YyJykpO1xuICAgICAgc2lub24uc3R1Yih1dGlscywgJ2RlbGV0ZVNpZ25hdHVyZVNoYXJlcycpLnJlc29sdmVzKCk7XG4gICAgICBzaW5vbi5zdHViKHV0aWxzLCAnZ2V0VHhSZXF1ZXN0JykucmVzb2x2ZXModHhSZXF1ZXN0KTtcbiAgICAgIGNvbnN0IHNpZ25UeFJlcXVlc3RTdHViID0gc2lub24uc3R1Yih1dGlscywgJ3NpZ25UeFJlcXVlc3QnKS5yZXNvbHZlcyh0eFJlcXVlc3QpO1xuXG4gICAgICBhd2FpdCB1dGlscy5yZWNyZWF0ZVR4UmVxdWVzdCh0eFJlcXVlc3RJZCwgJ3BydicsIHJlcUlkKTtcblxuICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKHNpZ25UeFJlcXVlc3RTdHViLmZpcnN0Q2FsbC5hcmdzWzBdLnR4UGFyYW1zLCB1bmRlZmluZWQpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnRUNEU0EgTVBDIHYyIGRlbGVnYXRlZCB0eFJlcXVlc3QgcGFyc2luZycsIGZ1bmN0aW9uICgpIHtcbiAgICBpdCgnZ2V0SGFzaFN0cmluZ0FuZERlcml2YXRpb25QYXRoIHByb2R1Y2VzIHRoZSBjb3JyZWN0IGhhc2hCdWZmZXIgYW5kIGRlcml2YXRpb25QYXRoJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3Qgc2lnbmFibGVIZXggPSAnZGVhZGJlZWYnO1xuICAgICAgY29uc3QgZGVyaXZhdGlvblBhdGggPSAnbS8wJztcbiAgICAgIGNvbnN0IHR4UmVxdWVzdCA9IGJ1aWxkVHhSZXF1ZXN0KHtcbiAgICAgICAgdHJhbnNhY3Rpb25zOiBbYnVpbGRUcmFuc2FjdGlvbih7IHVuc2lnbmVkVHg6IGJ1aWxkVW5zaWduZWRUcmFuc2FjdGlvbih7IHNpZ25hYmxlSGV4LCBkZXJpdmF0aW9uUGF0aCB9KSB9KV0sXG4gICAgICB9KTtcbiAgICAgIGNvbnN0IGV4cGVjdGVkSGFzaEJ1ZmZlciA9IGNyZWF0ZUtlY2Nha0hhc2goJ2tlY2NhazI1NicpLnVwZGF0ZShCdWZmZXIuZnJvbShzaWduYWJsZUhleCwgJ2hleCcpKS5kaWdlc3QoKTtcblxuICAgICAgY29uc3QgeyBlbmNyeXB0ZWRSb3VuZDFTZXNzaW9uIH0gPSBhd2FpdCBlY2RzYU1QQ3YyVXRpbHMuY3JlYXRlT2ZmbGluZVJvdW5kMVNoYXJlKHtcbiAgICAgICAgdHhSZXF1ZXN0LFxuICAgICAgICBwcnY6IHVzZXJTaGFyZS50b1N0cmluZygnYmFzZTY0JyksXG4gICAgICAgIHdhbGxldFBhc3NwaHJhc2UsXG4gICAgICB9KTtcblxuICAgICAgLy8gVGhlIHJvdW5kLTEgc2Vzc2lvbiBpcyBlbmNyeXB0ZWQgd2l0aCBhZGF0YSA9IFwiREtMUzIzX1NJR05JTkdfUk9VTkQxX1NUQVRFOjxoYXNoPjo8ZGVyaXZhdGlvblBhdGg+XCIsXG4gICAgICAvLyB3aGljaCBwcm92ZXMgZ2V0SGFzaFN0cmluZ0FuZERlcml2YXRpb25QYXRoIHByb2R1Y2VkIHRoZSByaWdodCB2YWx1ZXMgYWZ0ZXIgdGhlIGRlbGVnYXRpb24gcmVmYWN0b3IuXG4gICAgICBjb25zdCB7IGFkYXRhIH0gPSBKU09OLnBhcnNlKGVuY3J5cHRlZFJvdW5kMVNlc3Npb24pIGFzIHsgYWRhdGE/OiBzdHJpbmcgfTtcbiAgICAgIGFzc2VydC5lcXVhbChcbiAgICAgICAgYWRhdGEgPT09IHVuZGVmaW5lZCA/IGFkYXRhIDogZGVjb2RlVVJJQ29tcG9uZW50KGFkYXRhKSxcbiAgICAgICAgYERLTFMyM19TSUdOSU5HX1JPVU5EMV9TVEFURToke2V4cGVjdGVkSGFzaEJ1ZmZlci50b1N0cmluZygnaGV4Jyl9OiR7ZGVyaXZhdGlvblBhdGh9YFxuICAgICAgKTtcbiAgICB9KTtcblxuICAgIGl0KCdwcm9wYWdhdGVzIHRoZSBiYXNlIHVuc2lnbmVkVHggZ3VhcmQgdGhyb3VnaCB0aGUgRUNEU0Egcm91dGUnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAvLyBAdHMtZXhwZWN0LWVycm9yIEludGVudGlvbmFsbHkgbWFsZm9ybWVkIHRvIGV4ZXJjaXNlIHRoZSBydW50aW1lIGd1YXJkLlxuICAgICAgY29uc3Qgbm9VbnNpZ25lZFR4OiBUeFJlcXVlc3RUcmFuc2FjdGlvbiA9IHsgc3RhdGU6ICdwZW5kaW5nU2lnbmF0dXJlJywgc2lnbmF0dXJlU2hhcmVzOiBbXSB9O1xuICAgICAgYXdhaXQgYXNzZXJ0LnJlamVjdHMoXG4gICAgICAgIGVjZHNhTVBDdjJVdGlscy5jcmVhdGVPZmZsaW5lUm91bmQxU2hhcmUoe1xuICAgICAgICAgIHR4UmVxdWVzdDogYnVpbGRUeFJlcXVlc3QoeyB0cmFuc2FjdGlvbnM6IFtub1Vuc2lnbmVkVHhdIH0pLFxuICAgICAgICAgIHBydjogJ3VudXNlZCcsXG4gICAgICAgICAgd2FsbGV0UGFzc3BocmFzZSxcbiAgICAgICAgfSksXG4gICAgICAgIC9NaXNzaW5nIHVuc2lnbmVkVHggaW4gdHJhbnNhY3Rpb25zL1xuICAgICAgKTtcbiAgICB9KTtcbiAgfSk7XG59KTtcblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBGaXh0dXJlIGJ1aWxkZXJzXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuZnVuY3Rpb24gYnVpbGRUeFJlcXVlc3Qob3ZlcnJpZGVzOiBQYXJ0aWFsPFR4UmVxdWVzdD4gPSB7fSk6IFR4UmVxdWVzdCB7XG4gIHJldHVybiB7XG4gICAgdHhSZXF1ZXN0SWQ6ICd0eC1yZXF1ZXN0LWlkJyxcbiAgICB3YWxsZXRJZDogJ3dhbGxldC1pZCcsXG4gICAgd2FsbGV0VHlwZTogJ2hvdCcsXG4gICAgdmVyc2lvbjogMSxcbiAgICBzdGF0ZTogJ2luaXRpYWxpemVkJyxcbiAgICBkYXRlOiBuZXcgRGF0ZSgwKS50b0lTT1N0cmluZygpLFxuICAgIHVzZXJJZDogJ3VzZXItaWQnLFxuICAgIGludGVudDoge30sXG4gICAgcG9saWNpZXNDaGVja2VkOiB0cnVlLFxuICAgIHVuc2lnbmVkVHhzOiBbXSxcbiAgICB0cmFuc2FjdGlvbnM6IFtidWlsZFRyYW5zYWN0aW9uKCldLFxuICAgIGxhdGVzdDogdHJ1ZSxcbiAgICAuLi5vdmVycmlkZXMsXG4gIH07XG59XG5cbmZ1bmN0aW9uIGJ1aWxkVHhSZXF1ZXN0V2l0aG91dFRyYW5zYWN0aW9ucygpOiBUeFJlcXVlc3Qge1xuICBjb25zdCB0eFJlcXVlc3QgPSBidWlsZFR4UmVxdWVzdCgpO1xuICBkZWxldGUgdHhSZXF1ZXN0LnRyYW5zYWN0aW9ucztcbiAgcmV0dXJuIHR4UmVxdWVzdDtcbn1cblxuZnVuY3Rpb24gYnVpbGRUcmFuc2FjdGlvbihvdmVycmlkZXM6IFBhcnRpYWw8VHhSZXF1ZXN0VHJhbnNhY3Rpb24+ID0ge30pOiBUeFJlcXVlc3RUcmFuc2FjdGlvbiB7XG4gIHJldHVybiB7IHN0YXRlOiAncGVuZGluZ1NpZ25hdHVyZScsIHVuc2lnbmVkVHg6IGJ1aWxkVW5zaWduZWRUcmFuc2FjdGlvbigpLCBzaWduYXR1cmVTaGFyZXM6IFtdLCAuLi5vdmVycmlkZXMgfTtcbn1cblxuZnVuY3Rpb24gYnVpbGRVbnNpZ25lZFRyYW5zYWN0aW9uKG92ZXJyaWRlczogUGFydGlhbDxVbnNpZ25lZFRyYW5zYWN0aW9uPiA9IHt9KTogVW5zaWduZWRUcmFuc2FjdGlvbiB7XG4gIHJldHVybiB7IHNlcmlhbGl6ZWRUeEhleDogJ2FhYmJjY2RkJywgc2lnbmFibGVIZXg6ICdkZWFkYmVlZicsIGRlcml2YXRpb25QYXRoOiAnbS8wJywgLi4ub3ZlcnJpZGVzIH07XG59XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gRW5jcnlwdGlvbiBoZWxwZXJzIChtaXJyb3JzIHRoZSBlY2RzYU1QQ3YyIHRlc3QgcGF0dGVybilcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG5mdW5jdGlvbiBlbmNyeXB0V2l0aFNqY2wocGFzc3dvcmQ6IHN0cmluZywgaW5wdXQ6IHN0cmluZywgYWRhdGE/OiBzdHJpbmcpOiBzdHJpbmcge1xuICBjb25zdCBzYWx0ID0gcmFuZG9tQnl0ZXMoOCk7XG4gIGNvbnN0IGl2ID0gcmFuZG9tQnl0ZXMoMTYpO1xuICByZXR1cm4gc2pjbC5lbmNyeXB0KHBhc3N3b3JkLCBpbnB1dCwge1xuICAgIHNhbHQ6IFtieXRlc1RvV29yZChzYWx0LnN1YmFycmF5KDAsIDQpKSwgYnl0ZXNUb1dvcmQoc2FsdC5zdWJhcnJheSg0KSldLFxuICAgIGl2OiBbXG4gICAgICBieXRlc1RvV29yZChpdi5zdWJhcnJheSgwLCA0KSksXG4gICAgICBieXRlc1RvV29yZChpdi5zdWJhcnJheSg0LCA4KSksXG4gICAgICBieXRlc1RvV29yZChpdi5zdWJhcnJheSg4LCAxMikpLFxuICAgICAgYnl0ZXNUb1dvcmQoaXYuc3ViYXJyYXkoMTIsIDE2KSksXG4gICAgXSxcbiAgICAuLi4oYWRhdGEgIT09IHVuZGVmaW5lZCA/IHsgYWRhdGEgfSA6IHt9KSxcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIGJ5dGVzVG9Xb3JkKGJ5dGVzOiBVaW50OEFycmF5KTogbnVtYmVyIHtcbiAgaWYgKGJ5dGVzLmxlbmd0aCAhPT0gNCkge1xuICAgIHRocm93IG5ldyBFcnJvcignYnl0ZXMgbXVzdCBoYXZlIGxlbmd0aCA0Jyk7XG4gIH1cbiAgcmV0dXJuIGJ5dGVzLnJlZHVjZSgobnVtLCBieXRlKSA9PiBudW0gKiAweDEwMCArIGJ5dGUsIDApO1xufVxuIl19
|