@bitgo/sdk-coin-icp 1.7.0 → 1.9.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/CHANGELOG.md +20 -0
- package/dist/src/icp.d.ts +3 -1
- package/dist/src/icp.d.ts.map +1 -1
- package/dist/src/icp.js +10 -6
- package/dist/src/lib/iface.d.ts +7 -0
- package/dist/src/lib/iface.d.ts.map +1 -1
- package/dist/src/lib/iface.js +5 -2
- package/dist/src/lib/transaction.d.ts +3 -3
- package/dist/src/lib/transaction.d.ts.map +1 -1
- package/dist/src/lib/transaction.js +19 -26
- package/dist/src/lib/transactionBuilder.d.ts +3 -3
- package/dist/src/lib/transactionBuilder.d.ts.map +1 -1
- package/dist/src/lib/transactionBuilder.js +9 -9
- package/dist/src/lib/transactionBuilderFactory.d.ts +1 -1
- package/dist/src/lib/transactionBuilderFactory.d.ts.map +1 -1
- package/dist/src/lib/transactionBuilderFactory.js +4 -4
- package/dist/src/lib/transferBuilder.d.ts +1 -0
- package/dist/src/lib/transferBuilder.d.ts.map +1 -1
- package/dist/src/lib/transferBuilder.js +9 -13
- package/dist/src/lib/unsignedTransactionBuilder.d.ts.map +1 -1
- package/dist/src/lib/unsignedTransactionBuilder.js +6 -7
- package/dist/src/lib/utils.d.ts +29 -7
- package/dist/src/lib/utils.d.ts.map +1 -1
- package/dist/src/lib/utils.js +65 -11
- package/package.json +6 -6
package/dist/src/lib/utils.js
CHANGED
|
@@ -52,9 +52,19 @@ const protobufjs_1 = __importDefault(require("protobufjs"));
|
|
|
52
52
|
const protoDefinition_1 = require("./protoDefinition");
|
|
53
53
|
exports.REQUEST_STATUS = 'request_status';
|
|
54
54
|
class Utils {
|
|
55
|
+
constructor() {
|
|
56
|
+
this.signPayload = (privateKey, payloadHex) => {
|
|
57
|
+
const privateKeyBytes = Buffer.from(privateKey, 'hex');
|
|
58
|
+
const payloadHash = crypto_1.default.createHash('sha256').update(Buffer.from(payloadHex, 'hex')).digest('hex');
|
|
59
|
+
const signature = secp256k1_1.secp256k1.sign(payloadHash, privateKeyBytes);
|
|
60
|
+
const r = Buffer.from(signature.r.toString(16).padStart(64, '0'), 'hex');
|
|
61
|
+
const s = Buffer.from(signature.s.toString(16).padStart(64, '0'), 'hex');
|
|
62
|
+
return Buffer.concat([r, s]).toString('hex');
|
|
63
|
+
};
|
|
64
|
+
}
|
|
55
65
|
/** @inheritdoc */
|
|
56
66
|
isValidSignature(signature) {
|
|
57
|
-
throw new
|
|
67
|
+
throw new sdk_core_1.MethodNotImplementedError();
|
|
58
68
|
}
|
|
59
69
|
/**
|
|
60
70
|
* gets the gas data of this transaction.
|
|
@@ -64,13 +74,30 @@ class Utils {
|
|
|
64
74
|
return '-10000';
|
|
65
75
|
}
|
|
66
76
|
/**
|
|
67
|
-
* Checks if the provided address is a valid
|
|
77
|
+
* Checks if the provided address is a valid ICP address.
|
|
68
78
|
*
|
|
69
79
|
* @param {string} address - The address to validate.
|
|
70
|
-
* @returns {boolean} - Returns `true` if the address is
|
|
80
|
+
* @returns {boolean} - Returns `true` if the address is valid, otherwise `false`.
|
|
71
81
|
*/
|
|
72
82
|
isValidAddress(address) {
|
|
73
|
-
|
|
83
|
+
const rootAddress = this.validateMemoAndReturnRootAddress(address);
|
|
84
|
+
return rootAddress !== undefined && this.isValidHash(rootAddress);
|
|
85
|
+
}
|
|
86
|
+
/**
|
|
87
|
+
* Validates the memo ID in the address and returns the root address.
|
|
88
|
+
*
|
|
89
|
+
* @param {string} address - The address to validate and extract the root address from.
|
|
90
|
+
* @returns {string | undefined} - The root address if valid, otherwise `undefined`.
|
|
91
|
+
*/
|
|
92
|
+
validateMemoAndReturnRootAddress(address) {
|
|
93
|
+
if (!address) {
|
|
94
|
+
return undefined;
|
|
95
|
+
}
|
|
96
|
+
const [rootAddress, memoId] = address.split('?memoId=');
|
|
97
|
+
if (memoId && this.validateMemo(BigInt(memoId))) {
|
|
98
|
+
return rootAddress;
|
|
99
|
+
}
|
|
100
|
+
return address;
|
|
74
101
|
}
|
|
75
102
|
/**
|
|
76
103
|
* Checks if the provided hex string is a valid public key.
|
|
@@ -273,29 +300,45 @@ class Utils {
|
|
|
273
300
|
}
|
|
274
301
|
return { pub, prv };
|
|
275
302
|
}
|
|
303
|
+
/**
|
|
304
|
+
* Validates the provided fee.
|
|
305
|
+
*
|
|
306
|
+
* @param {string} fee - The fee to validate.
|
|
307
|
+
* @throws {BuildTransactionError} - If the fee is zero or invalid.
|
|
308
|
+
*/
|
|
276
309
|
validateFee(fee) {
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
if (fee !== this.gasData()) {
|
|
281
|
-
throw new sdk_core_1.BuildTransactionError('Invalid fee value');
|
|
310
|
+
const feeValue = new bignumber_js_1.default(fee);
|
|
311
|
+
if (feeValue.isZero()) {
|
|
312
|
+
throw new sdk_core_1.BuildTransactionError('Fee cannot be zero');
|
|
282
313
|
}
|
|
314
|
+
return true;
|
|
283
315
|
}
|
|
284
316
|
/** @inheritdoc */
|
|
285
317
|
validateValue(value) {
|
|
286
318
|
if (value.isLessThanOrEqualTo(0)) {
|
|
287
319
|
throw new sdk_core_1.BuildTransactionError('amount cannot be less than or equal to zero');
|
|
288
320
|
}
|
|
321
|
+
return true;
|
|
289
322
|
}
|
|
323
|
+
/**
|
|
324
|
+
* Validates the provided memo.
|
|
325
|
+
*
|
|
326
|
+
* @param {number | BigInt} memo - The memo to validate.
|
|
327
|
+
* @returns {boolean} - Returns `true` if the memo is valid.
|
|
328
|
+
* @throws {BuildTransactionError} - If the memo is invalid.
|
|
329
|
+
*/
|
|
290
330
|
validateMemo(memo) {
|
|
291
|
-
|
|
331
|
+
const memoNumber = Number(memo);
|
|
332
|
+
if (memoNumber < 0 || Number.isNaN(memoNumber)) {
|
|
292
333
|
throw new sdk_core_1.BuildTransactionError('Invalid memo');
|
|
293
334
|
}
|
|
335
|
+
return true;
|
|
294
336
|
}
|
|
295
337
|
validateExpireTime(expireTime) {
|
|
296
338
|
if (Number(expireTime) < Date.now() * 1000000) {
|
|
297
339
|
throw new sdk_core_1.BuildTransactionError('Invalid expiry time');
|
|
298
340
|
}
|
|
341
|
+
return true;
|
|
299
342
|
}
|
|
300
343
|
/**
|
|
301
344
|
* Validates the raw transaction data to ensure it has a valid format in the blockchain context.
|
|
@@ -612,8 +655,19 @@ class Utils {
|
|
|
612
655
|
isValidTransactionId(txId) {
|
|
613
656
|
return this.isValidHash(txId);
|
|
614
657
|
}
|
|
658
|
+
getSignatures(payloadsData, senderPublicKey, senderPrivateKey) {
|
|
659
|
+
return payloadsData.payloads.map((payload) => ({
|
|
660
|
+
signing_payload: payload,
|
|
661
|
+
signature_type: payload.signature_type,
|
|
662
|
+
public_key: {
|
|
663
|
+
hex_bytes: senderPublicKey,
|
|
664
|
+
curve_type: iface_1.CurveType.SECP256K1,
|
|
665
|
+
},
|
|
666
|
+
hex_bytes: this.signPayload(senderPrivateKey, payload.hex_bytes),
|
|
667
|
+
}));
|
|
668
|
+
}
|
|
615
669
|
}
|
|
616
670
|
exports.Utils = Utils;
|
|
617
671
|
const utils = new Utils();
|
|
618
672
|
exports.default = utils;
|
|
619
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGliL3V0aWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLDhDQUE4RztBQUM5RyxrREFBbUU7QUFDbkUsc0RBQXdDO0FBQ3hDLG9EQUE0QjtBQUM1QixvREFBMkI7QUFDM0IsbUNBUWlCO0FBQ2pCLHVDQUFrRDtBQUNsRCxtQ0FBd0MsQ0FBQyxnTUFBZ007QUFDek8sMERBQWtDO0FBQ2xDLGdFQUFxQztBQUNyQyx1REFBb0Q7QUFDcEQsNERBQWtDO0FBQ2xDLHVEQUFvRDtBQUV2QyxRQUFBLGNBQWMsR0FBRyxnQkFBZ0IsQ0FBQztBQUUvQyxNQUFhLEtBQUs7SUFDaEIsa0JBQWtCO0lBQ2xCLGdCQUFnQixDQUFDLFNBQWlCO1FBQ2hDLE1BQU0sSUFBSSxLQUFLLENBQUMseUJBQXlCLENBQUMsQ0FBQztJQUM3QyxDQUFDO0lBRUQ7O09BRUc7SUFDSCxnRkFBZ0Y7SUFDaEYsT0FBTztRQUNMLE9BQU8sUUFBUSxDQUFDO0lBQ2xCLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNILGNBQWMsQ0FBQyxPQUFlO1FBQzVCLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUNuQyxDQUFDO0lBRUQ7Ozs7Ozs7OztPQVNHO0lBQ0gsZ0JBQWdCLENBQUMsTUFBYztRQUM3QixJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQztZQUM1RCxPQUFPLEtBQUssQ0FBQztRQUNmLENBQUM7UUFFRCxNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQzVDLE1BQU0sU0FBUyxHQUFHLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNqQyxN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ZVRyYW5zYWN0aW9uRXJyb3IsIFJlY2lwaWVudCwgQnVpbGRUcmFuc2FjdGlvbkVycm9yIH0gZnJvbSAnQGJpdGdvL3Nkay1jb3JlJztcbmltcG9ydCB7IFByaW5jaXBhbCBhcyBEZmluaXR5UHJpbmNpcGFsIH0gZnJvbSAnQGRmaW5pdHkvcHJpbmNpcGFsJztcbmltcG9ydCAqIGFzIGFnZW50IGZyb20gJ0BkZmluaXR5L2FnZW50JztcbmltcG9ydCBjcnlwdG8gZnJvbSAnY3J5cHRvJztcbmltcG9ydCBjcmMzMiBmcm9tICdjcmMtMzInO1xuaW1wb3J0IHtcbiAgSHR0cENhbmlzdGVyVXBkYXRlLFxuICBJY3BUcmFuc2FjdGlvbkRhdGEsXG4gIFJlYWRTdGF0ZSxcbiAgUmVxdWVzdFR5cGUsXG4gIFNpZ25hdHVyZXMsXG4gIEljcE1ldGFkYXRhLFxuICBTZW5kQXJncyxcbn0gZnJvbSAnLi9pZmFjZSc7XG5pbXBvcnQgeyBLZXlQYWlyIGFzIEljcEtleVBhaXIgfSBmcm9tICcuL2tleVBhaXInO1xuaW1wb3J0IHsgZGVjb2RlLCBlbmNvZGUgfSBmcm9tICdjYm9yLXgnOyAvLyBUaGUgXCJjYm9yLXhcIiBsaWJyYXJ5IGlzIHVzZWQgaGVyZSBiZWNhdXNlIGl0IHN1cHBvcnRzIG1vZGVybiBmZWF0dXJlcyBsaWtlIEJpZ0ludC4gZG8gbm90IHJlcGxhY2UgaXQgd2l0aCBcImNib3IgYXMgXCJjYm9yXCIgaXMgbm90IGNvbXBhdGlibGUgd2l0aCBSdXN0J3Mgc2VyZGVfY2JvciB3aGVuIGhhbmRsaW5nIGJpZyBudW1iZXJzLlxuaW1wb3J0IGpzX3NoYTI1NiBmcm9tICdqcy1zaGEyNTYnO1xuaW1wb3J0IEJpZ051bWJlciBmcm9tICdiaWdudW1iZXIuanMnO1xuaW1wb3J0IHsgc2VjcDI1NmsxIH0gZnJvbSAnQG5vYmxlL2N1cnZlcy9zZWNwMjU2azEnO1xuaW1wb3J0IHByb3RvYnVmIGZyb20gJ3Byb3RvYnVmanMnO1xuaW1wb3J0IHsgcHJvdG9EZWZpbml0aW9uIH0gZnJvbSAnLi9wcm90b0RlZmluaXRpb24nO1xuXG5leHBvcnQgY29uc3QgUkVRVUVTVF9TVEFUVVMgPSAncmVxdWVzdF9zdGF0dXMnO1xuXG5leHBvcnQgY2xhc3MgVXRpbHMgaW1wbGVtZW50cyBCYXNlVXRpbHMge1xuICAvKiogQGluaGVyaXRkb2MgKi9cbiAgaXNWYWxpZFNpZ25hdHVyZShzaWduYXR1cmU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHRocm93IG5ldyBFcnJvcignTWV0aG9kIG5vdCBpbXBsZW1lbnRlZC4nKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBnZXRzIHRoZSBnYXMgZGF0YSBvZiB0aGlzIHRyYW5zYWN0aW9uLlxuICAgKi9cbiAgLy9UT0RPIFdJTi00MjQyOiB0byBtb3ZlZCB0byBhIGNvbmZpZyBhbmQgZXZlbnR1YWxseSB0byBhbiBBUEkgZm9yIGR5bmFtaWMgdmFsdWVcbiAgZ2FzRGF0YSgpOiBzdHJpbmcge1xuICAgIHJldHVybiAnLTEwMDAwJztcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVja3MgaWYgdGhlIHByb3ZpZGVkIGFkZHJlc3MgaXMgYSB2YWxpZCBoZXhhZGVjaW1hbCBzdHJpbmcuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBhZGRyZXNzIC0gVGhlIGFkZHJlc3MgdG8gdmFsaWRhdGUuXG4gICAqIEByZXR1cm5zIHtib29sZWFufSAtIFJldHVybnMgYHRydWVgIGlmIHRoZSBhZGRyZXNzIGlzIGEgdmFsaWQgNjQtY2hhcmFjdGVyIGhleGFkZWNpbWFsIHN0cmluZywgb3RoZXJ3aXNlIGBmYWxzZWAuXG4gICAqL1xuICBpc1ZhbGlkQWRkcmVzcyhhZGRyZXNzOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5pc1ZhbGlkSGFzaChhZGRyZXNzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVja3MgaWYgdGhlIHByb3ZpZGVkIGhleCBzdHJpbmcgaXMgYSB2YWxpZCBwdWJsaWMga2V5LlxuICAgKlxuICAgKiBBIHZhbGlkIHB1YmxpYyBrZXkgY2FuIGJlIGVpdGhlciBjb21wcmVzc2VkIG9yIHVuY29tcHJlc3NlZDpcbiAgICogLSBDb21wcmVzc2VkIHB1YmxpYyBrZXlzIGFyZSAzMyBieXRlcyBsb25nIGFuZCBzdGFydCB3aXRoIGVpdGhlciAweDAyIG9yIDB4MDMuXG4gICAqIC0gVW5jb21wcmVzc2VkIHB1YmxpYyBrZXlzIGFyZSA2NSBieXRlcyBsb25nIGFuZCBzdGFydCB3aXRoIDB4MDQuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBoZXhTdHIgLSBUaGUgaGV4IHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgcHVibGljIGtleSB0byB2YWxpZGF0ZS5cbiAgICogQHJldHVybnMge2Jvb2xlYW59IC0gUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIGhleCBzdHJpbmcgaXMgYSB2YWxpZCBwdWJsaWMga2V5LCBvdGhlcndpc2UgYGZhbHNlYC5cbiAgICovXG4gIGlzVmFsaWRQdWJsaWNLZXkoaGV4U3RyOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICBpZiAoIXRoaXMuaXNWYWxpZEhleChoZXhTdHIpIHx8ICF0aGlzLmlzVmFsaWRMZW5ndGgoaGV4U3RyKSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGNvbnN0IHB1YktleUJ5dGVzID0gdGhpcy5oZXhUb0J5dGVzKGhleFN0cik7XG4gICAgY29uc3QgZmlyc3RCeXRlID0gcHViS2V5Qnl0ZXNbMF07XG4gICAgY29uc3QgdmFsaWRDb21wcmVzc2VkID0gcHViS2V5Qnl0ZXMubGVuZ3RoID09PSAzMyAmJiAoZmlyc3RCeXRlID09PSAyIHx8IGZpcnN0Qnl0ZSA9PT0gMyk7XG4gICAgY29uc3QgdmFsaWRVbmNvbXByZXNzZWQgPSBwdWJLZXlCeXRlcy5sZW5ndGggPT09IDY1ICYmIGZpcnN0Qnl0ZSA9PT0gNDtcblxuICAgIHJldHVybiB2YWxpZENvbXByZXNzZWQgfHwgdmFsaWRVbmNvbXByZXNzZWQ7XG4gIH1cblxuICAvKipcbiAgICogRW5jb2RlcyBhIHZhbHVlIGludG8gQ0JPUiBmb3JtYXQgYW5kIHJldHVybnMgaXQgYXMgYSBoZXggc3RyaW5nLlxuICAgKlxuICAgKiBAcGFyYW0ge3Vua25vd259IHZhbHVlIC0gVGhlIHZhbHVlIHRvIGVuY29kZS5cbiAgICogQHJldHVybnMge3N0cmluZ30gLSBUaGUgQ0JPUiBlbmNvZGVkIHZhbHVlIGFzIGEgaGV4IHN0cmluZy5cbiAgICovXG4gIGNib3JFbmNvZGUodmFsdWU6IHVua25vd24pOiBzdHJpbmcge1xuICAgIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1ZhbHVlIHRvIGVuY29kZSBjYW5ub3QgYmUgdW5kZWZpbmVkLicpO1xuICAgIH1cbiAgICBjb25zdCBjYm9yRGF0YSA9IGVuY29kZSh2YWx1ZSk7XG4gICAgcmV0dXJuIEJ1ZmZlci5mcm9tKGNib3JEYXRhKS50b1N0cmluZygnaGV4Jyk7XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2tzIGlmIHRoZSBsZW5ndGggb2YgdGhlIGdpdmVuIGhleGFkZWNpbWFsIHN0cmluZyBpcyB2YWxpZC5cbiAgICogQSB2YWxpZCBsZW5ndGggaXMgZWl0aGVyIDY2IGNoYXJhY3RlcnMgKDMzIGJ5dGVzKSBvciAxMzAgY2hhcmFjdGVycyAoNjUgYnl0ZXMpLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gaGV4U3RyIC0gVGhlIGhleGFkZWNpbWFsIHN0cmluZyB0byBjaGVjay5cbiAgICogQHJldHVybnMge2Jvb2xlYW59IC0gUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIGxlbmd0aCBpcyB2YWxpZCwgb3RoZXJ3aXNlIGBmYWxzZWAuXG4gICAqL1xuICBpc1ZhbGlkTGVuZ3RoKGhleFN0cjogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIGhleFN0ci5sZW5ndGggLyAyID09PSAzMyB8fCBoZXhTdHIubGVuZ3RoIC8gMiA9PT0gNjU7XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2tzIGlmIHRoZSBwcm92aWRlZCBzdHJpbmcgaXMgYSB2YWxpZCBoZXhhZGVjaW1hbCBzdHJpbmcuXG4gICAqXG4gICAqIEEgdmFsaWQgaGV4YWRlY2ltYWwgc3RyaW5nIGNvbnNpc3RzIG9mIHBhaXJzIG9mIGhleGFkZWNpbWFsIGRpZ2l0cyAoMC05LCBhLWYsIEEtRikuXG4gICAqXG4gICAqIEBwYXJhbSBoZXhTdHIgLSBUaGUgc3RyaW5nIHRvIGJlIHZhbGlkYXRlZCBhcyBhIGhleGFkZWNpbWFsIHN0cmluZy5cbiAgICogQHJldHVybnMgVHJ1ZSBpZiB0aGUgc3RyaW5nIGlzIGEgdmFsaWQgaGV4YWRlY2ltYWwgc3RyaW5nLCBmYWxzZSBvdGhlcndpc2UuXG4gICAqL1xuICBpc1ZhbGlkSGV4KGhleFN0cjogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIC9eKFswLTlhLWZBLUZdezJ9KSskLy50ZXN0KGhleFN0cik7XG4gIH1cblxuICAvKipcbiAgICogQ29udmVydHMgYSBoZXhhZGVjaW1hbCBzdHJpbmcgdG8gYSBVaW50OEFycmF5LlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gaGV4IC0gVGhlIGhleGFkZWNpbWFsIHN0cmluZyB0byBjb252ZXJ0LlxuICAgKiBAcmV0dXJucyB7VWludDhBcnJheX0gVGhlIHJlc3VsdGluZyBieXRlIGFycmF5LlxuICAgKi9cbiAgaGV4VG9CeXRlcyhoZXg6IHN0cmluZyk6IFVpbnQ4QXJyYXkge1xuICAgIGNvbnN0IGJ5dGVzID0gbmV3IFVpbnQ4QXJyYXkoaGV4Lmxlbmd0aCAvIDIpO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgaGV4Lmxlbmd0aDsgaSArPSAyKSB7XG4gICAgICBieXRlc1tpIC8gMl0gPSBwYXJzZUludChoZXguc3Vic3RyKGksIDIpLCAxNik7XG4gICAgfVxuICAgIHJldHVybiBieXRlcztcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdGRvYyAqL1xuICBpc1ZhbGlkUHJpdmF0ZUtleShrZXk6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmlzVmFsaWRLZXkoa2V5KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBWYWxpZGF0ZXMgd2hldGhlciB0aGUgcHJvdmlkZWQga2V5IGlzIGEgdmFsaWQgSUNQIHByaXZhdGUga2V5LlxuICAgKlxuICAgKiBUaGlzIGZ1bmN0aW9uIGF0dGVtcHRzIHRvIGNyZWF0ZSBhIG5ldyBpbnN0YW5jZSBvZiBgSWNwS2V5UGFpcmAgdXNpbmcgdGhlIHByb3ZpZGVkIGtleS5cbiAgICogSWYgdGhlIGtleSBpcyB2YWxpZCwgdGhlIGZ1bmN0aW9uIHJldHVybnMgYHRydWVgLiBJZiB0aGUga2V5IGlzIGludmFsaWQsIGFuIGVycm9yIGlzIHRocm93bixcbiAgICogYW5kIHRoZSBmdW5jdGlvbiByZXR1cm5zIGBmYWxzZWAuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgLSBUaGUgcHJpdmF0ZSBrZXkgdG8gdmFsaWRhdGUuXG4gICAqIEByZXR1cm5zIHtib29sZWFufSAtIGB0cnVlYCBpZiB0aGUga2V5IGlzIHZhbGlkLCBgZmFsc2VgIG90aGVyd2lzZS5cbiAgICovXG4gIGlzVmFsaWRLZXkoa2V5OiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICB0cnkge1xuICAgICAgbmV3IEljcEtleVBhaXIoeyBwcnY6IGtleSB9KTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0gY2F0Y2gge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBDb21wcmVzc2VzIGFuIHVuY29tcHJlc3NlZCBwdWJsaWMga2V5LlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gdW5jb21wcmVzc2VkS2V5IC0gVGhlIHVuY29tcHJlc3NlZCBwdWJsaWMga2V5IGluIGhleGFkZWNpbWFsIGZvcm1hdC5cbiAgICogQHJldHVybnMge3N0cmluZ30gLSBUaGUgY29tcHJlc3NlZCBwdWJsaWMga2V5IGluIGhleGFkZWNpbWFsIGZvcm1hdC5cbiAgICogQHRocm93cyB7RXJyb3J9IC0gSWYgdGhlIGlucHV0IGtleSBpcyBub3QgYSB2YWxpZCB1bmNvbXByZXNzZWQgcHVibGljIGtleS5cbiAgICovXG4gIGNvbXByZXNzUHVibGljS2V5KHVuY29tcHJlc3NlZEtleTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBpZiAodW5jb21wcmVzc2VkS2V5LnN0YXJ0c1dpdGgoJzAyJykgfHwgdW5jb21wcmVzc2VkS2V5LnN0YXJ0c1dpdGgoJzAzJykpIHtcbiAgICAgIHJldHVybiB1bmNvbXByZXNzZWRLZXk7XG4gICAgfVxuICAgIGlmICghdW5jb21wcmVzc2VkS2V5LnN0YXJ0c1dpdGgoJzA0JykgfHwgdW5jb21wcmVzc2VkS2V5Lmxlbmd0aCAhPT0gMTMwKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgdW5jb21wcmVzc2VkIHB1YmxpYyBrZXkgZm9ybWF0LicpO1xuICAgIH1cblxuICAgIGNvbnN0IHhIZXggPSB1bmNvbXByZXNzZWRLZXkuc2xpY2UoMiwgNjYpO1xuICAgIGNvbnN0IHlIZXggPSB1bmNvbXByZXNzZWRLZXkuc2xpY2UoNjYpO1xuICAgIGNvbnN0IHkgPSBCaWdJbnQoYDB4JHt5SGV4fWApO1xuICAgIGNvbnN0IHByZWZpeCA9IHkgJSAybiA9PT0gMG4gPyAnMDInIDogJzAzJztcblxuICAgIHJldHVybiBgJHtwcmVmaXh9JHt4SGV4fWA7XG4gIH1cblxuICAvKipcbiAgICogQ29udmVydHMgYSBwdWJsaWMga2V5IGZyb20gaXRzIGhleGFkZWNpbWFsIHN0cmluZyByZXByZXNlbnRhdGlvbiB0byBERVIgZm9ybWF0LlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gcHVibGljS2V5SGV4IC0gVGhlIHB1YmxpYyBrZXkgaW4gaGV4YWRlY2ltYWwgc3RyaW5nIGZvcm1hdC5cbiAgICogQHJldHVybnMgVGhlIHB1YmxpYyBrZXkgaW4gREVSIGZvcm1hdCBhcyBhIFVpbnQ4QXJyYXkuXG4gICAqL1xuICBnZXRQdWJsaWNLZXlJbkRFUkZvcm1hdChwdWJsaWNLZXlIZXg6IHN0cmluZyk6IFVpbnQ4QXJyYXkge1xuICAgIGNvbnN0IHB1YmxpY0tleUJ1ZmZlciA9IEJ1ZmZlci5mcm9tKHB1YmxpY0tleUhleCwgJ2hleCcpO1xuICAgIGNvbnN0IGVsbGlwdGljS2V5ID0gc2VjcDI1NmsxLlByb2plY3RpdmVQb2ludC5mcm9tSGV4KHB1YmxpY0tleUJ1ZmZlci50b1N0cmluZygnaGV4JykpO1xuICAgIGNvbnN0IHVuY29tcHJlc3NlZFB1YmxpY0tleUhleCA9IGVsbGlwdGljS2V5LnRvSGV4KGZhbHNlKTtcbiAgICBjb25zdCBkZXJFbmNvZGVkS2V5ID0gYWdlbnQud3JhcERFUihCdWZmZXIuZnJvbSh1bmNvbXByZXNzZWRQdWJsaWNLZXlIZXgsICdoZXgnKSwgYWdlbnQuU0VDUDI1NksxX09JRCk7XG4gICAgcmV0dXJuIGRlckVuY29kZWRLZXk7XG4gIH1cblxuICAvKipcbiAgICogQ29udmVydHMgYSBwdWJsaWMga2V5IGluIGhleGFkZWNpbWFsIGZvcm1hdCB0byBhIERmaW5pdHkgUHJpbmNpcGFsIElELlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gcHVibGljS2V5SGV4IC0gVGhlIHB1YmxpYyBrZXkgaW4gaGV4YWRlY2ltYWwgZm9ybWF0LlxuICAgKiBAcmV0dXJucyBUaGUgY29ycmVzcG9uZGluZyBEZmluaXR5IFByaW5jaXBhbCBJRC5cbiAgICovXG4gIGdldFByaW5jaXBhbElkRnJvbVB1YmxpY0tleShwdWJsaWNLZXlIZXg6IHN0cmluZyk6IERmaW5pdHlQcmluY2lwYWwge1xuICAgIGNvbnN0IGRlckVuY29kZWRLZXkgPSB0aGlzLmdldFB1YmxpY0tleUluREVSRm9ybWF0KHB1YmxpY0tleUhleCk7XG4gICAgY29uc3QgcHJpbmNpcGFsSWQgPSBEZmluaXR5UHJpbmNpcGFsLnNlbGZBdXRoZW50aWNhdGluZyhCdWZmZXIuZnJvbShkZXJFbmNvZGVkS2V5KSk7XG4gICAgcmV0dXJuIHByaW5jaXBhbElkO1xuICB9XG5cbiAgLyoqXG4gICAqIERlcml2ZXMgYSBEZmluaXR5UHJpbmNpcGFsIGZyb20gYSBnaXZlbiBwdWJsaWMga2V5IGluIGhleGFkZWNpbWFsIGZvcm1hdC5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IHB1YmxpY0tleUhleCAtIFRoZSBwdWJsaWMga2V5IGluIGhleGFkZWNpbWFsIGZvcm1hdC5cbiAgICogQHJldHVybnMgVGhlIGRlcml2ZWQgRGZpbml0eVByaW5jaXBhbC5cbiAgICogQHRocm93cyBXaWxsIHRocm93IGFuIGVycm9yIGlmIHRoZSBwcmluY2lwYWwgY2Fubm90IGJlIGRlcml2ZWQgZnJvbSB0aGUgcHVibGljIGtleS5cbiAgICovXG4gIGRlcml2ZVByaW5jaXBhbEZyb21QdWJsaWNLZXkocHVibGljS2V5SGV4OiBzdHJpbmcpOiBEZmluaXR5UHJpbmNpcGFsIHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgZGVyRW5jb2RlZEtleSA9IHRoaXMuZ2V0UHVibGljS2V5SW5ERVJGb3JtYXQocHVibGljS2V5SGV4KTtcbiAgICAgIGNvbnN0IHByaW5jaXBhbElkID0gRGZpbml0eVByaW5jaXBhbC5zZWxmQXV0aGVudGljYXRpbmcoQnVmZmVyLmZyb20oZGVyRW5jb2RlZEtleSkpO1xuICAgICAgY29uc3QgcHJpbmNpcGFsID0gRGZpbml0eVByaW5jaXBhbC5mcm9tVWludDhBcnJheShwcmluY2lwYWxJZC50b1VpbnQ4QXJyYXkoKSk7XG4gICAgICByZXR1cm4gcHJpbmNpcGFsO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEZhaWxlZCB0byBkZXJpdmUgcHJpbmNpcGFsIGZyb20gcHVibGljIGtleTogJHtlcnJvci5tZXNzYWdlfWApO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBDb252ZXJ0cyBhIERmaW5pdHlQcmluY2lwYWwgYW5kIGFuIG9wdGlvbmFsIHN1YkFjY291bnQgdG8gYSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgYW4gYWNjb3VudCBJRC5cbiAgICpcbiAgICogQHBhcmFtIHtEZmluaXR5UHJpbmNpcGFsfSBwcmluY2lwYWwgLSBUaGUgcHJpbmNpcGFsIHRvIGNvbnZlcnQuXG4gICAqIEBwYXJhbSB7VWludDhBcnJheX0gW3N1YkFjY291bnQ9bmV3IFVpbnQ4QXJyYXkoMzIpXSAtIEFuIG9wdGlvbmFsIHN1Yi1hY2NvdW50LCBkZWZhdWx0cyB0byBhIDMyLWJ5dGUgYXJyYXkgb2YgemVyb3MuXG4gICAqIEByZXR1cm5zIHtzdHJpbmd9IFRoZSBoZXhhZGVjaW1hbCBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIGFjY291bnQgSUQuXG4gICAqL1xuICBmcm9tUHJpbmNpcGFsKHByaW5jaXBhbDogRGZpbml0eVByaW5jaXBhbCwgc3ViQWNjb3VudDogVWludDhBcnJheSA9IG5ldyBVaW50OEFycmF5KDMyKSk6IHN0cmluZyB7XG4gICAgY29uc3QgcHJpbmNpcGFsQnl0ZXMgPSBCdWZmZXIuZnJvbShwcmluY2lwYWwudG9VaW50OEFycmF5KCkuYnVmZmVyKTtcbiAgICByZXR1cm4gdGhpcy5nZXRBY2NvdW50SWRGcm9tUHJpbmNpcGFsQnl0ZXModGhpcy5nZXRBY2NvdW50SWRQcmVmaXgoKSwgcHJpbmNpcGFsQnl0ZXMsIHN1YkFjY291bnQpO1xuICB9XG5cbiAgZ2V0QWNjb3VudElkRnJvbVByaW5jaXBhbEJ5dGVzKFxuICAgIEFDQ09VTlRfSURfUFJFRklYOiBCdWZmZXI8QXJyYXlCdWZmZXI+LFxuICAgIHByaW5jaXBhbEJ5dGVzOiBCdWZmZXI8QXJyYXlCdWZmZXJMaWtlPixcbiAgICBzdWJBY2NvdW50OiBVaW50OEFycmF5PEFycmF5QnVmZmVyTGlrZT5cbiAgKTogc3RyaW5nIHtcbiAgICBjb25zdCBjb21iaW5lZEJ5dGVzID0gQnVmZmVyLmNvbmNhdChbQUNDT1VOVF9JRF9QUkVGSVgsIHByaW5jaXBhbEJ5dGVzLCBzdWJBY2NvdW50XSk7XG4gICAgY29uc3Qgc2hhMjI0SGFzaCA9IGNyeXB0by5jcmVhdGVIYXNoKCdzaGEyMjQnKS51cGRhdGUoY29tYmluZWRCeXRlcykuZGlnZXN0KCk7XG4gICAgY29uc3QgY2hlY2tzdW0gPSBCdWZmZXIuYWxsb2MoNCk7XG4gICAgY2hlY2tzdW0ud3JpdGVVSW50MzJCRShjcmMzMi5idWYoc2hhMjI0SGFzaCkgPj4+IDAsIDApO1xuICAgIGNvbnN0IGFjY291bnRJZEJ5dGVzID0gQnVmZmVyLmNvbmNhdChbY2hlY2tzdW0sIHNoYTIyNEhhc2hdKTtcbiAgICByZXR1cm4gYWNjb3VudElkQnl0ZXMudG9TdHJpbmcoJ2hleCcpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHJpZXZlcyB0aGUgYWRkcmVzcyBhc3NvY2lhdGVkIHdpdGggYSBnaXZlbiBoZXgtZW5jb2RlZCBwdWJsaWMga2V5LlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gaGV4RW5jb2RlZFB1YmxpY0tleSAtIFRoZSBwdWJsaWMga2V5IGluIGhleC1lbmNvZGVkIGZvcm1hdC5cbiAgICogQHJldHVybnMge1Byb21pc2U8c3RyaW5nPn0gQSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgdG8gdGhlIGFkZHJlc3MgZGVyaXZlZCBmcm9tIHRoZSBwcm92aWRlZCBwdWJsaWMga2V5LlxuICAgKiBAdGhyb3dzIHtFcnJvcn0gVGhyb3dzIGFuIGVycm9yIGlmIHRoZSBwcm92aWRlZCBwdWJsaWMga2V5IGlzIG5vdCBpbiBhIHZhbGlkIGhleC1lbmNvZGVkIGZvcm1hdC5cbiAgICovXG4gIGFzeW5jIGdldEFkZHJlc3NGcm9tUHVibGljS2V5KGhleEVuY29kZWRQdWJsaWNLZXk6IHN0cmluZyk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgaWYgKCF0aGlzLmlzVmFsaWRQdWJsaWNLZXkoaGV4RW5jb2RlZFB1YmxpY0tleSkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBoZXgtZW5jb2RlZCBwdWJsaWMga2V5IGZvcm1hdC4nKTtcbiAgICB9XG4gICAgY29uc3QgY29tcHJlc3NlZEtleSA9IHRoaXMuY29tcHJlc3NQdWJsaWNLZXkoaGV4RW5jb2RlZFB1YmxpY0tleSk7XG4gICAgY29uc3Qga2V5UGFpciA9IG5ldyBJY3BLZXlQYWlyKHsgcHViOiBjb21wcmVzc2VkS2V5IH0pO1xuICAgIHJldHVybiBrZXlQYWlyLmdldEFkZHJlc3MoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZW5lcmF0ZXMgYSBuZXcga2V5IHBhaXIuIElmIGEgc2VlZCBpcyBwcm92aWRlZCwgaXQgd2lsbCBiZSB1c2VkIHRvIGdlbmVyYXRlIHRoZSBrZXkgcGFpci5cbiAgICpcbiAgICogQHBhcmFtIHtCdWZmZXJ9IFtzZWVkXSAtIE9wdGlvbmFsIHNlZWQgZm9yIGtleSBnZW5lcmF0aW9uLlxuICAgKiBAcmV0dXJucyB7S2V5UGFpcn0gLSBUaGUgZ2VuZXJhdGVkIGtleSBwYWlyIGNvbnRhaW5pbmcgYm90aCBwdWJsaWMgYW5kIHByaXZhdGUga2V5cy5cbiAgICogQHRocm93cyB7RXJyb3J9IC0gSWYgdGhlIHByaXZhdGUga2V5IGlzIG1pc3NpbmcgaW4gdGhlIGdlbmVyYXRlZCBrZXkgcGFpci5cbiAgICovXG4gIHB1YmxpYyBnZW5lcmF0ZUtleVBhaXIoc2VlZD86IEJ1ZmZlcik6IEtleVBhaXIge1xuICAgIGNvbnN0IGtleVBhaXIgPSBzZWVkID8gbmV3IEljcEtleVBhaXIoeyBzZWVkIH0pIDogbmV3IEljcEtleVBhaXIoKTtcbiAgICBjb25zdCB7IHB1YiwgcHJ2IH0gPSBrZXlQYWlyLmdldEtleXMoKTtcbiAgICBpZiAoIXBydikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdQcml2YXRlIGtleSBpcyBtaXNzaW5nIGluIHRoZSBnZW5lcmF0ZWQga2V5IHBhaXIuJyk7XG4gICAgfVxuICAgIHJldHVybiB7IHB1YiwgcHJ2IH07XG4gIH1cblxuICB2YWxpZGF0ZUZlZShmZWU6IHN0cmluZyk6IHZvaWQge1xuICAgIGlmIChuZXcgQmlnTnVtYmVyKGZlZSkuaXNFcXVhbFRvKDApKSB7XG4gICAgICB0aHJvdyBuZXcgQnVpbGRUcmFuc2FjdGlvbkVycm9yKCdGZWUgZXF1YWwgdG8gemVybycpO1xuICAgIH1cbiAgICBpZiAoZmVlICE9PSB0aGlzLmdhc0RhdGEoKSkge1xuICAgICAgdGhyb3cgbmV3IEJ1aWxkVHJhbnNhY3Rpb25FcnJvcignSW52YWxpZCBmZWUgdmFsdWUnKTtcbiAgICB9XG4gIH1cblxuICAvKiogQGluaGVyaXRkb2MgKi9cbiAgdmFsaWRhdGVWYWx1ZSh2YWx1ZTogQmlnTnVtYmVyKTogdm9pZCB7XG4gICAgaWYgKHZhbHVlLmlzTGVzc1RoYW5PckVxdWFsVG8oMCkpIHtcbiAgICAgIHRocm93IG5ldyBCdWlsZFRyYW5zYWN0aW9uRXJyb3IoJ2Ftb3VudCBjYW5ub3QgYmUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIHplcm8nKTtcbiAgICB9XG4gIH1cblxuICB2YWxpZGF0ZU1lbW8obWVtbzogbnVtYmVyIHwgQmlnSW50KTogdm9pZCB7XG4gICAgaWYgKE51bWJlcihtZW1vKSA8IDAgfHwgTnVtYmVyKG1lbW8pID09PSBudWxsIHx8IE51bWJlcihtZW1vKSA9PT0gdW5kZWZpbmVkIHx8IE51bWJlci5pc05hTihOdW1iZXIobWVtbykpKSB7XG4gICAgICB0aHJvdyBuZXcgQnVpbGRUcmFuc2FjdGlvbkVycm9yKCdJbnZhbGlkIG1lbW8nKTtcbiAgICB9XG4gIH1cblxuICB2YWxpZGF0ZUV4cGlyZVRpbWUoZXhwaXJlVGltZTogbnVtYmVyIHwgQmlnSW50KTogdm9pZCB7XG4gICAgaWYgKE51bWJlcihleHBpcmVUaW1lKSA8IERhdGUubm93KCkgKiAxMDAwXzAwMCkge1xuICAgICAgdGhyb3cgbmV3IEJ1aWxkVHJhbnNhY3Rpb25FcnJvcignSW52YWxpZCBleHBpcnkgdGltZScpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBWYWxpZGF0ZXMgdGhlIHJhdyB0cmFuc2FjdGlvbiBkYXRhIHRvIGVuc3VyZSBpdCBoYXMgYSB2YWxpZCBmb3JtYXQgaW4gdGhlIGJsb2NrY2hhaW4gY29udGV4dC5cbiAgICpcbiAgICogQHBhcmFtIHtJY3BUcmFuc2FjdGlvbkRhdGF9IHRyYW5zYWN0aW9uRGF0YSAtIFRoZSB0cmFuc2FjdGlvbiBkYXRhIHRvIHZhbGlkYXRlLlxuICAgKiBAdGhyb3dzIHtQYXJzZVRyYW5zYWN0aW9uRXJyb3J9IElmIHRoZSB0cmFuc2FjdGlvbiBkYXRhIGlzIGludmFsaWQuXG4gICAqL1xuICB2YWxpZGF0ZVJhd1RyYW5zYWN0aW9uKHRyYW5zYWN0aW9uRGF0YTogSWNwVHJhbnNhY3Rpb25EYXRhKTogdm9pZCB7XG4gICAgaWYgKCF0cmFuc2FjdGlvbkRhdGEpIHtcbiAgICAgIHRocm93IG5ldyBQYXJzZVRyYW5zYWN0aW9uRXJyb3IoJ1RyYW5zYWN0aW9uIGRhdGEgaXMgbWlzc2luZy4nKTtcbiAgICB9XG4gICAgY29uc3QgeyBzZW5kZXJQdWJsaWNLZXlIZXgsIHNlbmRlckFkZHJlc3MsIHJlY2VpdmVyQWRkcmVzcyB9ID0gdHJhbnNhY3Rpb25EYXRhO1xuICAgIGlmICghdGhpcy5pc1ZhbGlkUHVibGljS2V5KHNlbmRlclB1YmxpY0tleUhleCkpIHtcbiAgICAgIHRocm93IG5ldyBQYXJzZVRyYW5zYWN0aW9uRXJyb3IoJ1NlbmRlciBwdWJsaWMga2V5IGlzIGludmFsaWQuJyk7XG4gICAgfVxuICAgIGlmICghdGhpcy5pc1ZhbGlkQWRkcmVzcyhzZW5kZXJBZGRyZXNzKSkge1xuICAgICAgdGhyb3cgbmV3IFBhcnNlVHJhbnNhY3Rpb25FcnJvcignU2VuZGVyIGFkZHJlc3MgaXMgaW52YWxpZC4nKTtcbiAgICB9XG4gICAgaWYgKCF0aGlzLmlzVmFsaWRBZGRyZXNzKHJlY2VpdmVyQWRkcmVzcykpIHtcbiAgICAgIHRocm93IG5ldyBQYXJzZVRyYW5zYWN0aW9uRXJyb3IoJ1JlY2VpdmVyIGFkZHJlc3MgaXMgaW52YWxpZC4nKTtcbiAgICB9XG4gICAgdGhpcy52YWxpZGF0ZUZlZSh0cmFuc2FjdGlvbkRhdGEuZmVlKTtcbiAgICB0aGlzLnZhbGlkYXRlVmFsdWUobmV3IEJpZ051bWJlcih0cmFuc2FjdGlvbkRhdGEuYW1vdW50KSk7XG4gICAgdGhpcy52YWxpZGF0ZU1lbW8odHJhbnNhY3Rpb25EYXRhLm1lbW8pO1xuICAgIHRoaXMudmFsaWRhdGVFeHBpcmVUaW1lKHRyYW5zYWN0aW9uRGF0YS5leHBpcnlUaW1lKTtcbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0ge29iamVjdH0gdXBkYXRlXG4gICAqIEByZXR1cm5zIHtCdWZmZXJ9XG4gICAqL1xuICBnZW5lcmF0ZUh0dHBDYW5pc3RlclVwZGF0ZUlkKHVwZGF0ZTogSHR0cENhbmlzdGVyVXBkYXRlKTogQnVmZmVyIHtcbiAgICByZXR1cm4gdGhpcy5IdHRwQ2FuaXN0ZXJVcGRhdGVSZXByZXNlbnRhdGlvbkluZGVwZW5kZW50SGFzaCh1cGRhdGUpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdlbmVyYXRlcyBhIHJlcHJlc2VudGF0aW9uLWluZGVwZW5kZW50IGhhc2ggZm9yIGFuIEhUVFAgY2FuaXN0ZXIgdXBkYXRlLlxuICAgKlxuICAgKiBAcGFyYW0ge0h0dHBDYW5pc3RlclVwZGF0ZX0gdXBkYXRlIC0gVGhlIEhUVFAgY2FuaXN0ZXIgdXBkYXRlIG9iamVjdC5cbiAgICogQHJldHVybnMge0J1ZmZlcn0gLSBUaGUgaGFzaCBvZiB0aGUgdXBkYXRlIG9iamVjdC5cbiAgICovXG4gIEh0dHBDYW5pc3RlclVwZGF0ZVJlcHJlc2VudGF0aW9uSW5kZXBlbmRlbnRIYXNoKHVwZGF0ZTogSHR0cENhbmlzdGVyVXBkYXRlKTogQnVmZmVyIHtcbiAgICBjb25zdCB1cGRhdGVNYXAgPSB7XG4gICAgICByZXF1ZXN0X3R5cGU6IFJlcXVlc3RUeXBlLkNBTEwsXG4gICAgICBjYW5pc3Rlcl9pZDogdXBkYXRlLmNhbmlzdGVyX2lkLFxuICAgICAgbWV0aG9kX25hbWU6IHVwZGF0ZS5tZXRob2RfbmFtZSxcbiAgICAgIGFyZzogdXBkYXRlLmFyZyxcbiAgICAgIGluZ3Jlc3NfZXhwaXJ5OiB1cGRhdGUuaW5ncmVzc19leHBpcnksXG4gICAgICBzZW5kZXI6IHVwZGF0ZS5zZW5kZXIsXG4gICAgfTtcbiAgICByZXR1cm4gdGhpcy5oYXNoT2ZNYXAodXBkYXRlTWFwKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZW5lcmF0ZXMgYSBTSEEtMjU2IGhhc2ggZm9yIGEgZ2l2ZW4gbWFwIG9iamVjdC5cbiAgICpcbiAgICogQHBhcmFtIHtSZWNvcmQ8c3RyaW5nLCB1bmtub3duPn0gbWFwIC0gVGhlIG1hcCBvYmplY3QgdG8gaGFzaC5cbiAgICogQHJldHVybnMge0J1ZmZlcn0gLSBUaGUgcmVzdWx0aW5nIGhhc2ggYXMgYSBCdWZmZXIuXG4gICAqL1xuICBoYXNoT2ZNYXAobWFwOiBSZWNvcmQ8c3RyaW5nLCBhbnk+KTogQnVmZmVyIHtcbiAgICBjb25zdCBoYXNoZXM6IEJ1ZmZlcltdID0gW107XG4gICAgZm9yIChjb25zdCBrZXkgaW4gbWFwKSB7XG4gICAgICBoYXNoZXMucHVzaCh0aGlzLmhhc2hLZXlWYWwoa2V5LCBtYXBba2V5XSkpO1xuICAgIH1cbiAgICBoYXNoZXMuc29ydCgoYnVmMCwgYnVmMSkgPT4gYnVmMC5jb21wYXJlKGJ1ZjEpKTtcbiAgICByZXR1cm4gdGhpcy5zaGEyNTYoaGFzaGVzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZW5lcmF0ZXMgYSBoYXNoIGZvciBhIGtleS12YWx1ZSBwYWlyLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30ga2V5IC0gVGhlIGtleSB0byBoYXNoLlxuICAgKiBAcGFyYW0ge3N0cmluZyB8IEJ1ZmZlciB8IEJpZ0ludH0gdmFsIC0gVGhlIHZhbHVlIHRvIGhhc2guXG4gICAqIEByZXR1cm5zIHtCdWZmZXJ9IC0gVGhlIHJlc3VsdGluZyBoYXNoIGFzIGEgQnVmZmVyLlxuICAgKi9cbiAgaGFzaEtleVZhbChrZXk6IHN0cmluZywgdmFsOiBhbnkpOiBCdWZmZXIge1xuICAgIGNvbnN0IGtleUhhc2ggPSB0aGlzLmhhc2hTdHJpbmcoa2V5KTtcbiAgICBjb25zdCB2YWxIYXNoID0gdGhpcy5oYXNoVmFsKHZhbCk7XG4gICAgcmV0dXJuIEJ1ZmZlci5jb25jYXQoW2tleUhhc2gsIHZhbEhhc2hdKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZW5lcmF0ZXMgYSBTSEEtMjU2IGhhc2ggZm9yIGEgZ2l2ZW4gc3RyaW5nLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gdmFsdWUgLSBUaGUgc3RyaW5nIHRvIGhhc2guXG4gICAqIEByZXR1cm5zIHtCdWZmZXJ9IC0gVGhlIHJlc3VsdGluZyBoYXNoIGFzIGEgQnVmZmVyLlxuICAgKi9cbiAgaGFzaFN0cmluZyh2YWx1ZTogc3RyaW5nKTogQnVmZmVyIHtcbiAgICByZXR1cm4gdGhpcy5zaGEyNTYoW0J1ZmZlci5mcm9tKHZhbHVlKV0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEdlbmVyYXRlcyBhIGhhc2ggZm9yIGEgNjQtYml0IHVuc2lnbmVkIGludGVnZXIuXG4gICAqXG4gICAqIEBwYXJhbSB7YmlnaW50fSBuIC0gVGhlIDY0LWJpdCB1bnNpZ25lZCBpbnRlZ2VyIHRvIGhhc2guXG4gICAqIEByZXR1cm5zIHtCdWZmZXJ9IC0gVGhlIHJlc3VsdGluZyBoYXNoIGFzIGEgQnVmZmVyLlxuICAgKi9cbiAgaGFzaFU2NChuOiBiaWdpbnQpOiBCdWZmZXIge1xuICAgIGNvbnN0IGJ1ZiA9IEJ1ZmZlci5hbGxvY1Vuc2FmZSgxMCk7XG4gICAgbGV0IGkgPSAwO1xuICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICBjb25zdCBieXRlID0gTnVtYmVyKG4gJiBCaWdJbnQoMHg3ZikpO1xuICAgICAgbiA+Pj0gQmlnSW50KDcpO1xuICAgICAgaWYgKG4gPT09IEJpZ0ludCgwKSkge1xuICAgICAgICBidWZbaV0gPSBieXRlO1xuICAgICAgICBicmVhaztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGJ1ZltpXSA9IGJ5dGUgfCAweDgwO1xuICAgICAgICArK2k7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmhhc2hCeXRlcyhidWYuc3ViYXJyYXkoMCwgaSArIDEpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZW5lcmF0ZXMgYSBTSEEtMjU2IGhhc2ggZm9yIGFuIGFycmF5IG9mIGVsZW1lbnRzLlxuICAgKlxuICAgKiBAcGFyYW0ge0FycmF5PGFueT59IGVsZW1lbnRzIC0gVGhlIGFycmF5IG9mIGVsZW1lbnRzIHRvIGhhc2guXG4gICAqIEByZXR1cm5zIHtCdWZmZXJ9IC0gVGhlIHJlc3VsdGluZyBoYXNoIGFzIGEgQnVmZmVyLlxuICAgKi9cbiAgaGFzaEFycmF5KGVsZW1lbnRzOiBBcnJheTxhbnk+KTogQnVmZmVyIHtcbiAgICByZXR1cm4gdGhpcy5zaGEyNTYoZWxlbWVudHMubWFwKHRoaXMuaGFzaFZhbCkpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdlbmVyYXRlcyBhIGhhc2ggZm9yIGEgZ2l2ZW4gdmFsdWUuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nIHwgQnVmZmVyIHwgQmlnSW50IHwgbnVtYmVyIHwgQXJyYXk8dW5rbm93bj59IHZhbCAtIFRoZSB2YWx1ZSB0byBoYXNoLlxuICAgKiBAcmV0dXJucyB7QnVmZmVyfSAtIFRoZSByZXN1bHRpbmcgaGFzaCBhcyBhIEJ1ZmZlci5cbiAgICogQHRocm93cyB7RXJyb3J9IC0gSWYgdGhlIHZhbHVlIHR5cGUgaXMgdW5zdXBwb3J0ZWQuXG4gICAqL1xuICBoYXNoVmFsKHZhbDogc3RyaW5nIHwgQnVmZmVyIHwgQmlnSW50IHwgbnVtYmVyIHwgQXJyYXk8dW5rbm93bj4pOiBCdWZmZXIge1xuICAgIGlmICh0eXBlb2YgdmFsID09PSAnc3RyaW5nJykge1xuICAgICAgcmV0dXJuIHV0aWxzLmhhc2hTdHJpbmcodmFsKTtcbiAgICB9IGVsc2UgaWYgKEJ1ZmZlci5pc0J1ZmZlcih2YWwpKSB7XG4gICAgICByZXR1cm4gdXRpbHMuaGFzaEJ5dGVzKHZhbCk7XG4gICAgfSBlbHNlIGlmICh0eXBlb2YgdmFsID09PSAnYmlnaW50JyB8fCB0eXBlb2YgdmFsID09PSAnbnVtYmVyJykge1xuICAgICAgcmV0dXJuIHV0aWxzLmhhc2hVNjQoQmlnSW50KHZhbCkpO1xuICAgIH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheSh2YWwpKSB7XG4gICAgICByZXR1cm4gdXRpbHMuaGFzaEFycmF5KHZhbCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgVW5zdXBwb3J0ZWQgdmFsdWUgdHlwZSBmb3IgaGFzaGluZzogJHt0eXBlb2YgdmFsfWApO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBDb21wdXRlcyB0aGUgU0hBLTI1NiBoYXNoIG9mIHRoZSBnaXZlbiBidWZmZXIuXG4gICAqXG4gICAqIEBwYXJhbSB2YWx1ZSAtIFRoZSBidWZmZXIgdG8gaGFzaC5cbiAgICogQHJldHVybnMgVGhlIFNIQS0yNTYgaGFzaCBvZiB0aGUgaW5wdXQgYnVmZmVyLlxuICAgKi9cbiAgaGFzaEJ5dGVzKHZhbHVlOiBCdWZmZXIpOiBCdWZmZXIge1xuICAgIHJldHVybiB0aGlzLnNoYTI1NihbdmFsdWVdKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDb21wdXRlcyB0aGUgU0hBLTI1NiBoYXNoIG9mIHRoZSBwcm92aWRlZCBhcnJheSBvZiBCdWZmZXIgY2h1bmtzLlxuICAgKlxuICAgKiBAcGFyYW0ge0FycmF5PEJ1ZmZlcj59IGNodW5rcyAtIEFuIGFycmF5IG9mIEJ1ZmZlciBvYmplY3RzIHRvIGJlIGhhc2hlZC5cbiAgICogQHJldHVybnMge0J1ZmZlcn0gLSBUaGUgcmVzdWx0aW5nIFNIQS0yNTYgaGFzaCBhcyBhIEJ1ZmZlci5cbiAgICovXG4gIHNoYTI1NihjaHVua3M6IEFycmF5PEJ1ZmZlcj4pOiBCdWZmZXIge1xuICAgIGNvbnN0IGhhc2hlciA9IGpzX3NoYTI1Ni5zaGEyNTYuY3JlYXRlKCk7XG4gICAgY2h1bmtzLmZvckVhY2goKGNodW5rKSA9PiBoYXNoZXIudXBkYXRlKGNodW5rKSk7XG4gICAgcmV0dXJuIEJ1ZmZlci5mcm9tKGhhc2hlci5hcnJheUJ1ZmZlcigpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDb252ZXJ0cyBhIGhleGFkZWNpbWFsIHN0cmluZyB0byBhIEJ1ZmZlci5cbiAgICpcbiAgICogQHBhcmFtIGhleCAtIFRoZSBoZXhhZGVjaW1hbCBzdHJpbmcgdG8gY29udmVydC5cbiAgICogQHJldHVybnMgQSBCdWZmZXIgY29udGFpbmluZyB0aGUgYmluYXJ5IGRhdGEgcmVwcmVzZW50ZWQgYnkgdGhlIGhleGFkZWNpbWFsIHN0cmluZy5cbiAgICovXG4gIGJsb2JGcm9tSGV4KGhleDogc3RyaW5nKTogQnVmZmVyIHtcbiAgICByZXR1cm4gQnVmZmVyLmZyb20oaGV4LCAnaGV4Jyk7XG4gIH1cblxuICAvKipcbiAgICogQ29udmVydHMgYSBiaW5hcnkgYmxvYiAoQnVmZmVyKSB0byBhIGhleGFkZWNpbWFsIHN0cmluZy5cbiAgICpcbiAgICogQHBhcmFtIHtCdWZmZXJ9IGJsb2IgLSBUaGUgYmluYXJ5IGRhdGEgdG8gYmUgY29udmVydGVkLlxuICAgKiBAcmV0dXJucyB7c3RyaW5nfSBUaGUgaGV4YWRlY2ltYWwgcmVwcmVzZW50YXRpb24gb2YgdGhlIGJpbmFyeSBkYXRhLlxuICAgKi9cbiAgYmxvYlRvSGV4KGJsb2I6IEJ1ZmZlcik6IHN0cmluZyB7XG4gICAgcmV0dXJuIGJsb2IudG9TdHJpbmcoJ2hleCcpO1xuICB9XG5cbiAgLyoqXG4gICAqIERlY29kZXMgYSBnaXZlbiBDQk9SLWVuY29kZWQgYnVmZmVyLlxuICAgKlxuICAgKiBAcGFyYW0gYnVmZmVyIC0gVGhlIENCT1ItZW5jb2RlZCBidWZmZXIgdG8gZGVjb2RlLlxuICAgKiBAcmV0dXJucyBUaGUgZGVjb2RlZCBkYXRhLlxuICAgKi9cbiAgY2JvckRlY29kZShidWZmZXI6IEJ1ZmZlcik6IHVua25vd24ge1xuICAgIGNvbnN0IHJlcyA9IGRlY29kZShidWZmZXIpO1xuICAgIHJldHVybiByZXM7XG4gIH1cblxuICAvKipcbiAgICogR2VuZXJhdGVzIGEgQnVmZmVyIGNvbnRhaW5pbmcgdGhlIGRvbWFpbiBJQyByZXF1ZXN0IHN0cmluZy5cbiAgICpcbiAgICogQHJldHVybnMge0J1ZmZlcn0gQSBCdWZmZXIgb2JqZWN0IGluaXRpYWxpemVkIHdpdGggdGhlIHN0cmluZyAnXFx4MEFpYy1yZXF1ZXN0Jy5cbiAgICovXG4gIGdldERvbWFpbklDUmVxdWVzdCgpOiBCdWZmZXIge1xuICAgIHJldHVybiBCdWZmZXIuZnJvbSgnXFx4MEFpYy1yZXF1ZXN0Jyk7XG4gIH1cblxuICAvKipcbiAgICogQ29tYmluZXMgdGhlIGRvbWFpbiBJQyByZXF1ZXN0IGJ1ZmZlciB3aXRoIHRoZSBwcm92aWRlZCBtZXNzYWdlIElEIGJ1ZmZlciB0byBjcmVhdGUgc2lnbmF0dXJlIGRhdGEuXG4gICAqXG4gICAqIEBwYXJhbSB7QnVmZmVyfSBtZXNzYWdlSWQgLSBUaGUgYnVmZmVyIGNvbnRhaW5pbmcgdGhlIG1lc3NhZ2UgSUQuXG4gICAqIEByZXR1cm5zIHtCdWZmZXJ9IC0gVGhlIGNvbmNhdGVuYXRlZCBidWZmZXIgY29udGFpbmluZyB0aGUgZG9tYWluIElDIHJlcXVlc3QgYW5kIHRoZSBtZXNzYWdlIElELlxuICAgKi9cbiAgbWFrZVNpZ25hdHVyZURhdGEobWVzc2FnZUlkOiBCdWZmZXIpOiBCdWZmZXIge1xuICAgIHJldHVybiBCdWZmZXIuY29uY2F0KFt0aGlzLmdldERvbWFpbklDUmVxdWVzdCgpLCBtZXNzYWdlSWRdKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZW5lcmF0ZXMgYSByZWFkIHN0YXRlIG9iamVjdCBmcm9tIGFuIEhUVFAgY2FuaXN0ZXIgdXBkYXRlLlxuICAgKlxuICAgKiBAcGFyYW0ge0h0dHBDYW5pc3RlclVwZGF0ZX0gdXBkYXRlIC0gVGhlIEhUVFAgY2FuaXN0ZXIgdXBkYXRlIG9iamVjdC5cbiAgICogQHJldHVybnMge1JlYWRTdGF0ZX0gVGhlIHJlYWQgc3RhdGUgb2JqZWN0IGNvbnRhaW5pbmcgdGhlIHNlbmRlciwgcGF0aHMsIGFuZCBpbmdyZXNzIGV4cGlyeS5cbiAgICovXG4gIG1ha2VSZWFkU3RhdGVGcm9tVXBkYXRlKHVwZGF0ZTogSHR0cENhbmlzdGVyVXBkYXRlKTogUmVhZFN0YXRlIHtcbiAgICByZXR1cm4ge1xuICAgICAgc2VuZGVyOiB1cGRhdGUuc2VuZGVyLFxuICAgICAgcGF0aHM6IFtbQnVmZmVyLmZyb20oUkVRVUVTVF9TVEFUVVMpLCB0aGlzLmdlbmVyYXRlSHR0cENhbmlzdGVyVXBkYXRlSWQodXBkYXRlKV1dLFxuICAgICAgaW5ncmVzc19leHBpcnk6IHVwZGF0ZS5pbmdyZXNzX2V4cGlyeSxcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIEdlbmVyYXRlcyBhIHJlcHJlc2VudGF0aW9uLWluZGVwZW5kZW50IGhhc2ggZm9yIGFuIEhUVFAgcmVhZCBzdGF0ZSBvYmplY3QuXG4gICAqXG4gICAqIEBwYXJhbSB7UmVhZFN0YXRlfSByZWFkU3RhdGUgLSBUaGUgSFRUUCByZWFkIHN0YXRlIG9iamVjdC5cbiAgICogQHJldHVybnMge0J1ZmZlcn0gLSBUaGUgaGFzaCBvZiB0aGUgcmVhZCBzdGF0ZSBvYmplY3QuXG4gICAqL1xuICBIdHRwUmVhZFN0YXRlUmVwcmVzZW50YXRpb25JbmRlcGVuZGVudEhhc2gocmVhZFN0YXRlOiBSZWFkU3RhdGUpOiBCdWZmZXIge1xuICAgIHJldHVybiB0aGlzLmhhc2hPZk1hcCh7XG4gICAgICByZXF1ZXN0X3R5cGU6IFJlcXVlc3RUeXBlLlJFQURfU1RBVEUsXG4gICAgICBpbmdyZXNzX2V4cGlyeTogcmVhZFN0YXRlLmluZ3Jlc3NfZXhwaXJ5LFxuICAgICAgcGF0aHM6IHJlYWRTdGF0ZS5wYXRocyxcbiAgICAgIHNlbmRlcjogcmVhZFN0YXRlLnNlbmRlcixcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBFeHRyYWN0cyB0aGUgcmVjaXBpZW50IGluZm9ybWF0aW9uIGZyb20gdGhlIHByb3ZpZGVkIElDUCB0cmFuc2FjdGlvbiBkYXRhLlxuICAgKlxuICAgKiBAcGFyYW0ge0ljcFRyYW5zYWN0aW9uRGF0YX0gaWNwVHJhbnNhY3Rpb25EYXRhIC0gVGhlIElDUCB0cmFuc2FjdGlvbiBkYXRhIGNvbnRhaW5pbmcgdGhlIHJlY2VpdmVyJ3MgYWRkcmVzcyBhbmQgYW1vdW50LlxuICAgKiBAcmV0dXJucyB7UmVjaXBpZW50W119IEFuIGFycmF5IGNvbnRhaW5pbmcgYSBzaW5nbGUgcmVjaXBpZW50IG9iamVjdCB3aXRoIHRoZSByZWNlaXZlcidzIGFkZHJlc3MgYW5kIGFtb3VudC5cbiAgICovXG4gIGdldFJlY2lwaWVudHMoaWNwVHJhbnNhY3Rpb25EYXRhOiBJY3BUcmFuc2FjdGlvbkRhdGEpOiBSZWNpcGllbnQge1xuICAgIHJldHVybiB7XG4gICAgICBhZGRyZXNzOiBpY3BUcmFuc2FjdGlvbkRhdGEucmVjZWl2ZXJBZGRyZXNzLFxuICAgICAgYW1vdW50OiBpY3BUcmFuc2FjdGlvbkRhdGEuYW1vdW50LFxuICAgIH07XG4gIH1cblxuICBnZXRUcmFuc2FjdGlvblNpZ25hdHVyZShzaWduYXR1cmVNYXA6IE1hcDxzdHJpbmcsIFNpZ25hdHVyZXM+LCB1cGRhdGU6IEh0dHBDYW5pc3RlclVwZGF0ZSk6IFNpZ25hdHVyZXMgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiBzaWduYXR1cmVNYXAuZ2V0KHRoaXMuYmxvYlRvSGV4KHRoaXMubWFrZVNpZ25hdHVyZURhdGEodGhpcy5nZW5lcmF0ZUh0dHBDYW5pc3RlclVwZGF0ZUlkKHVwZGF0ZSkpKSk7XG4gIH1cblxuICBnZXRSZWFkU3RhdGVTaWduYXR1cmUoc2lnbmF0dXJlTWFwOiBNYXA8c3RyaW5nLCBTaWduYXR1cmVzPiwgcmVhZFN0YXRlOiBSZWFkU3RhdGUpOiBTaWduYXR1cmVzIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gc2lnbmF0dXJlTWFwLmdldChcbiAgICAgIHRoaXMuYmxvYlRvSGV4KHRoaXMubWFrZVNpZ25hdHVyZURhdGEodGhpcy5IdHRwUmVhZFN0YXRlUmVwcmVzZW50YXRpb25JbmRlcGVuZGVudEhhc2gocmVhZFN0YXRlKSkpXG4gICAgKTtcbiAgfVxuXG4gIGdldE1ldGFEYXRhKG1lbW86IG51bWJlciB8IEJpZ0ludCk6IHsgbWV0YURhdGE6IEljcE1ldGFkYXRhOyBpbmdyZXNzRW5kVGltZTogbnVtYmVyIHwgQmlnSW50IH0ge1xuICAgIGNvbnN0IGN1cnJlbnRUaW1lID0gRGF0ZS5ub3coKSAqIDEwMDAwMDA7XG4gICAgY29uc3QgaW5ncmVzc1N0YXJ0VGltZSA9IGN1cnJlbnRUaW1lO1xuICAgIGNvbnN0IGluZ3Jlc3NFbmRUaW1lID0gaW5ncmVzc1N0YXJ0VGltZSArIDUgKiA2MCAqIDEwMDAwMDAwMDA7IC8vIDUgbWlucyBpbiBuYW5vc2Vjb25kc1xuICAgIGNvbnN0IG1ldGFEYXRhOiBJY3BNZXRhZGF0YSA9IHtcbiAgICAgIGNyZWF0ZWRfYXRfdGltZTogY3VycmVudFRpbWUsXG4gICAgICBtZW1vOiBtZW1vLFxuICAgICAgaW5ncmVzc19zdGFydDogaW5ncmVzc1N0YXJ0VGltZSxcbiAgICAgIGluZ3Jlc3NfZW5kOiBpbmdyZXNzRW5kVGltZSxcbiAgICB9O1xuICAgIHJldHVybiB7IG1ldGFEYXRhLCBpbmdyZXNzRW5kVGltZSB9O1xuICB9XG5cbiAgY29udmVydFNlbmRlckJsb2JUb1ByaW5jaXBhbChzZW5kZXJCbG9iOiBVaW50OEFycmF5KTogVWludDhBcnJheSB7XG4gICAgY29uc3QgTUFYX0xFTkdUSF9JTl9CWVRFUyA9IDI5O1xuICAgIGlmIChzZW5kZXJCbG9iLmxlbmd0aCA+IE1BWF9MRU5HVEhfSU5fQllURVMpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignQnl0ZXMgdG9vIGxvbmcgZm9yIGEgdmFsaWQgUHJpbmNpcGFsJyk7XG4gICAgfVxuICAgIGNvbnN0IHByaW5jaXBhbEJ5dGVzID0gbmV3IFVpbnQ4QXJyYXkoTUFYX0xFTkdUSF9JTl9CWVRFUyk7XG4gICAgcHJpbmNpcGFsQnl0ZXMuc2V0KHNlbmRlckJsb2Iuc2xpY2UoMCwgc2VuZGVyQmxvYi5sZW5ndGgpKTtcbiAgICByZXR1cm4gcHJpbmNpcGFsQnl0ZXM7XG4gIH1cblxuICBhc3luYyBmcm9tQXJncyhhcmc6IFVpbnQ4QXJyYXkpOiBQcm9taXNlPFNlbmRBcmdzPiB7XG4gICAgY29uc3Qgcm9vdCA9IHByb3RvYnVmLnBhcnNlKHByb3RvRGVmaW5pdGlvbikucm9vdDtcbiAgICBjb25zdCBTZW5kUmVxdWVzdE1lc3NhZ2UgPSByb290Lmxvb2t1cFR5cGUoJ1NlbmRSZXF1ZXN0Jyk7XG4gICAgY29uc3QgYXJncyA9IFNlbmRSZXF1ZXN0TWVzc2FnZS5kZWNvZGUoYXJnKSBhcyB1bmtub3duIGFzIFNlbmRBcmdzO1xuICAgIGNvbnN0IHRyYW5zZm9ybWVkQXJnczogU2VuZEFyZ3MgPSB7XG4gICAgICBtZW1vOiB7IG1lbW86IEJpZ0ludChhcmdzLm1lbW8ubWVtby50b1N0cmluZygpKSB9LFxuICAgICAgcGF5bWVudDogeyByZWNlaXZlckdldHM6IHsgZThzOiBhcmdzLnBheW1lbnQucmVjZWl2ZXJHZXRzLmU4cyB9IH0sXG4gICAgICBtYXhGZWU6IHsgZThzOiBhcmdzLm1heEZlZS5lOHMgfSxcbiAgICAgIHRvOiB7IGhhc2g6IEJ1ZmZlci5mcm9tKGFyZ3MudG8uaGFzaCkgfSxcbiAgICAgIGNyZWF0ZWRBdFRpbWU6IHsgdGltZXN0YW1wTmFub3M6IEJpZ051bWJlcihhcmdzLmNyZWF0ZWRBdFRpbWUudGltZXN0YW1wTmFub3MudG9TdHJpbmcoKSkudG9OdW1iZXIoKSB9LFxuICAgIH07XG4gICAgcmV0dXJuIHRyYW5zZm9ybWVkQXJncztcbiAgfVxuXG4gIGFzeW5jIHRvQXJnKGFyZ3M6IFNlbmRBcmdzKTogUHJvbWlzZTxVaW50OEFycmF5PiB7XG4gICAgY29uc3Qgcm9vdCA9IHByb3RvYnVmLnBhcnNlKHByb3RvRGVmaW5pdGlvbikucm9vdDtcbiAgICBjb25zdCBTZW5kUmVxdWVzdE1lc3NhZ2UgPSByb290Lmxvb2t1cFR5cGUoJ1NlbmRSZXF1ZXN0Jyk7XG4gICAgY29uc3QgZXJyTXNnID0gU2VuZFJlcXVlc3RNZXNzYWdlLnZlcmlmeShhcmdzKTtcbiAgICBpZiAoZXJyTXNnKSB0aHJvdyBuZXcgRXJyb3IoZXJyTXNnKTtcbiAgICBjb25zdCBtZXNzYWdlID0gU2VuZFJlcXVlc3RNZXNzYWdlLmNyZWF0ZShhcmdzKTtcbiAgICByZXR1cm4gU2VuZFJlcXVlc3RNZXNzYWdlLmVuY29kZShtZXNzYWdlKS5maW5pc2goKTtcbiAgfVxuXG4gIGdldEFjY291bnRJZFByZWZpeCgpOiBCdWZmZXI8QXJyYXlCdWZmZXI+IHtcbiAgICByZXR1cm4gQnVmZmVyLmZyb20oWzB4MGEsIC4uLkJ1ZmZlci5mcm9tKCdhY2NvdW50LWlkJyldKTtcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdGRvYyAqL1xuICBpc1ZhbGlkQmxvY2tJZChoYXNoOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICAvLyBJQ1AgYmxvY2sgaGFzaGVzIGFyZSA2NC1jaGFyYWN0ZXIgaGV4YWRlY2ltYWwgc3RyaW5nc1xuICAgIHJldHVybiB0aGlzLmlzVmFsaWRIYXNoKGhhc2gpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgd2hldGhlciBvciBub3QgdGhlIHN0cmluZyBpcyBhIHZhbGlkIElDUCBoYXNoXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBoYXNoIC0gc3RyaW5nIHRvIHZhbGlkYXRlXG4gICAqIEByZXR1cm5zIHtib29sZWFufVxuICAgKi9cbiAgaXNWYWxpZEhhc2goaGFzaDogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHR5cGVvZiBoYXNoID09PSAnc3RyaW5nJyAmJiAvXlswLTlhLWZBLUZdezY0fSQvLnRlc3QoaGFzaCk7XG4gIH1cblxuICAvKiogQGluaGVyaXRkb2MgKi9cbiAgaXNWYWxpZFRyYW5zYWN0aW9uSWQodHhJZDogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuaXNWYWxpZEhhc2godHhJZCk7XG4gIH1cbn1cblxuY29uc3QgdXRpbHMgPSBuZXcgVXRpbHMoKTtcbmV4cG9ydCBkZWZhdWx0IHV0aWxzO1xuIl19
|
|
673
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGliL3V0aWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLDhDQU95QjtBQUN6QixrREFBbUU7QUFDbkUsc0RBQXdDO0FBQ3hDLG9EQUE0QjtBQUM1QixvREFBMkI7QUFDM0IsbUNBVWlCO0FBQ2pCLHVDQUFrRDtBQUNsRCxtQ0FBd0MsQ0FBQyxnTUFBZ007QUFDek8sMERBQWtDO0FBQ2xDLGdFQUFxQztBQUNyQyx1REFBb0Q7QUFDcEQsNERBQWtDO0FBQ2xDLHVEQUFvRDtBQUV2QyxRQUFBLGNBQWMsR0FBRyxnQkFBZ0IsQ0FBQztBQUUvQyxNQUFhLEtBQUs7SUFBbEI7UUFvcEJFLGdCQUFXLEdBQUcsQ0FBQyxVQUFrQixFQUFFLFVBQWtCLEVBQVUsRUFBRTtZQUMvRCxNQUFNLGVBQWUsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxLQUFLLENBQUMsQ0FBQztZQUN2RCxNQUFNLFdBQVcsR0FBRyxnQkFBTSxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUMsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDckcsTUFBTSxTQUFTLEdBQUcscUJBQVMsQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLGVBQWUsQ0FBQyxDQUFDO1lBQy9ELE1BQU0sQ0FBQyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUMsUUFBUSxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQztZQUN6RSxNQUFNLENBQUMsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFD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V0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ2hDLENBQUM7SUFFRCxhQUFhLENBQUMsWUFBMEIsRUFBRSxlQUF1QixFQUFFLGdCQUF3QjtRQUN6RixPQUFPLFlBQVksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1lBQzdDLGVBQWUsRUFBRSxPQUFPO1lBQ3hCLGNBQWMsRUFBRSxPQUFPLENBQUMsY0FBYztZQUN0QyxVQUFVLEVBQUU7Z0JBQ1YsU0FBUyxFQUFFLGVBQWU7Z0JBQzFCLFVBQVUsRUFBRSxpQkFBUyxDQUFDLFNBQVM7YUFDaEM7WUFDRCxTQUFTLEVBQUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxnQkFBZ0IsRUFBRSxPQUFPLENBQUMsU0FBUyxDQUFDO1NBQ2pFLENBQUMsQ0FBQyxDQUFDO0lBQ04sQ0FBQztDQVVGO0FBNXBCRCxzQkE0cEJDO0FBRUQsTUFBTSxLQUFLLEdBQUcsSUFBSSxLQUFLLEVBQUUsQ0FBQztBQUMxQixrQkFBZSxLQUFLLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBCYXNlVXRpbHMsXG4gIEtleVBhaXIsXG4gIFBhcnNlVHJhbnNhY3Rpb25FcnJvcixcbiAgUmVjaXBpZW50LFxuICBCdWlsZFRyYW5zYWN0aW9uRXJyb3IsXG4gIE1ldGhvZE5vdEltcGxlbWVudGVkRXJyb3IsXG59IGZyb20gJ0BiaXRnby9zZGstY29yZSc7XG5pbXBvcnQgeyBQcmluY2lwYWwgYXMgRGZpbml0eVByaW5jaXBhbCB9IGZyb20gJ0BkZmluaXR5L3ByaW5jaXBhbCc7XG5pbXBvcnQgKiBhcyBhZ2VudCBmcm9tICdAZGZpbml0eS9hZ2VudCc7XG5pbXBvcnQgY3J5cHRvIGZyb20gJ2NyeXB0byc7XG5pbXBvcnQgY3JjMzIgZnJvbSAnY3JjLTMyJztcbmltcG9ydCB7XG4gIEh0dHBDYW5pc3RlclVwZGF0ZSxcbiAgSWNwVHJhbnNhY3Rpb25EYXRhLFxuICBSZWFkU3RhdGUsXG4gIFJlcXVlc3RUeXBlLFxuICBTaWduYXR1cmVzLFxuICBJY3BNZXRhZGF0YSxcbiAgU2VuZEFyZ3MsXG4gIFBheWxvYWRzRGF0YSxcbiAgQ3VydmVUeXBlLFxufSBmcm9tICcuL2lmYWNlJztcbmltcG9ydCB7IEtleVBhaXIgYXMgSWNwS2V5UGFpciB9IGZyb20gJy4va2V5UGFpcic7XG5pbXBvcnQgeyBkZWNvZGUsIGVuY29kZSB9IGZyb20gJ2Nib3IteCc7IC8vIFRoZSBcImNib3IteFwiIGxpYnJhcnkgaXMgdXNlZCBoZXJlIGJlY2F1c2UgaXQgc3VwcG9ydHMgbW9kZXJuIGZlYXR1cmVzIGxpa2UgQmlnSW50LiBkbyBub3QgcmVwbGFjZSBpdCB3aXRoIFwiY2JvciBhcyBcImNib3JcIiBpcyBub3QgY29tcGF0aWJsZSB3aXRoIFJ1c3QncyBzZXJkZV9jYm9yIHdoZW4gaGFuZGxpbmcgYmlnIG51bWJlcnMuXG5pbXBvcnQganNfc2hhMjU2IGZyb20gJ2pzLXNoYTI1Nic7XG5pbXBvcnQgQmlnTnVtYmVyIGZyb20gJ2JpZ251bWJlci5qcyc7XG5pbXBvcnQgeyBzZWNwMjU2azEgfSBmcm9tICdAbm9ibGUvY3VydmVzL3NlY3AyNTZrMSc7XG5pbXBvcnQgcHJvdG9idWYgZnJvbSAncHJvdG9idWZqcyc7XG5pbXBvcnQgeyBwcm90b0RlZmluaXRpb24gfSBmcm9tICcuL3Byb3RvRGVmaW5pdGlvbic7XG5cbmV4cG9ydCBjb25zdCBSRVFVRVNUX1NUQVRVUyA9ICdyZXF1ZXN0X3N0YXR1cyc7XG5cbmV4cG9ydCBjbGFzcyBVdGlscyBpbXBsZW1lbnRzIEJhc2VVdGlscyB7XG4gIC8qKiBAaW5oZXJpdGRvYyAqL1xuICBpc1ZhbGlkU2lnbmF0dXJlKHNpZ25hdHVyZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgdGhyb3cgbmV3IE1ldGhvZE5vdEltcGxlbWVudGVkRXJyb3IoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBnZXRzIHRoZSBnYXMgZGF0YSBvZiB0aGlzIHRyYW5zYWN0aW9uLlxuICAgKi9cbiAgLy9UT0RPIFdJTi00MjQyOiB0byBtb3ZlZCB0byBhIGNvbmZpZyBhbmQgZXZlbnR1YWxseSB0byBhbiBBUEkgZm9yIGR5bmFtaWMgdmFsdWVcbiAgZ2FzRGF0YSgpOiBzdHJpbmcge1xuICAgIHJldHVybiAnLTEwMDAwJztcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVja3MgaWYgdGhlIHByb3ZpZGVkIGFkZHJlc3MgaXMgYSB2YWxpZCBJQ1AgYWRkcmVzcy5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IGFkZHJlc3MgLSBUaGUgYWRkcmVzcyB0byB2YWxpZGF0ZS5cbiAgICogQHJldHVybnMge2Jvb2xlYW59IC0gUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIGFkZHJlc3MgaXMgdmFsaWQsIG90aGVyd2lzZSBgZmFsc2VgLlxuICAgKi9cbiAgaXNWYWxpZEFkZHJlc3MoYWRkcmVzczogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgY29uc3Qgcm9vdEFkZHJlc3MgPSB0aGlzLnZhbGlkYXRlTWVtb0FuZFJldHVyblJvb3RBZGRyZXNzKGFkZHJlc3MpO1xuICAgIHJldHVybiByb290QWRkcmVzcyAhPT0gdW5kZWZpbmVkICYmIHRoaXMuaXNWYWxpZEhhc2gocm9vdEFkZHJlc3MpO1xuICB9XG5cbiAgLyoqXG4gICAqIFZhbGlkYXRlcyB0aGUgbWVtbyBJRCBpbiB0aGUgYWRkcmVzcyBhbmQgcmV0dXJucyB0aGUgcm9vdCBhZGRyZXNzLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gYWRkcmVzcyAtIFRoZSBhZGRyZXNzIHRvIHZhbGlkYXRlIGFuZCBleHRyYWN0IHRoZSByb290IGFkZHJlc3MgZnJvbS5cbiAgICogQHJldHVybnMge3N0cmluZyB8IHVuZGVmaW5lZH0gLSBUaGUgcm9vdCBhZGRyZXNzIGlmIHZhbGlkLCBvdGhlcndpc2UgYHVuZGVmaW5lZGAuXG4gICAqL1xuICB2YWxpZGF0ZU1lbW9BbmRSZXR1cm5Sb290QWRkcmVzcyhhZGRyZXNzOiBzdHJpbmcpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAgIGlmICghYWRkcmVzcykge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gICAgY29uc3QgW3Jvb3RBZGRyZXNzLCBtZW1vSWRdID0gYWRkcmVzcy5zcGxpdCgnP21lbW9JZD0nKTtcbiAgICBpZiAobWVtb0lkICYmIHRoaXMudmFsaWRhdGVNZW1vKEJpZ0ludChtZW1vSWQpKSkge1xuICAgICAgcmV0dXJuIHJvb3RBZGRyZXNzO1xuICAgIH1cbiAgICByZXR1cm4gYWRkcmVzcztcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVja3MgaWYgdGhlIHByb3ZpZGVkIGhleCBzdHJpbmcgaXMgYSB2YWxpZCBwdWJsaWMga2V5LlxuICAgKlxuICAgKiBBIHZhbGlkIHB1YmxpYyBrZXkgY2FuIGJlIGVpdGhlciBjb21wcmVzc2VkIG9yIHVuY29tcHJlc3NlZDpcbiAgICogLSBDb21wcmVzc2VkIHB1YmxpYyBrZXlzIGFyZSAzMyBieXRlcyBsb25nIGFuZCBzdGFydCB3aXRoIGVpdGhlciAweDAyIG9yIDB4MDMuXG4gICAqIC0gVW5jb21wcmVzc2VkIHB1YmxpYyBrZXlzIGFyZSA2NSBieXRlcyBsb25nIGFuZCBzdGFydCB3aXRoIDB4MDQuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBoZXhTdHIgLSBUaGUgaGV4IHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgcHVibGljIGtleSB0byB2YWxpZGF0ZS5cbiAgICogQHJldHVybnMge2Jvb2xlYW59IC0gUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIGhleCBzdHJpbmcgaXMgYSB2YWxpZCBwdWJsaWMga2V5LCBvdGhlcndpc2UgYGZhbHNlYC5cbiAgICovXG4gIGlzVmFsaWRQdWJsaWNLZXkoaGV4U3RyOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICBpZiAoIXRoaXMuaXNWYWxpZEhleChoZXhTdHIpIHx8ICF0aGlzLmlzVmFsaWRMZW5ndGgoaGV4U3RyKSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGNvbnN0IHB1YktleUJ5dGVzID0gdGhpcy5oZXhUb0J5dGVzKGhleFN0cik7XG4gICAgY29uc3QgZmlyc3RCeXRlID0gcHViS2V5Qnl0ZXNbMF07XG4gICAgY29uc3QgdmFsaWRDb21wcmVzc2VkID0gcHViS2V5Qnl0ZXMubGVuZ3RoID09PSAzMyAmJiAoZmlyc3RCeXRlID09PSAyIHx8IGZpcnN0Qnl0ZSA9PT0gMyk7XG4gICAgY29uc3QgdmFsaWRVbmNvbXByZXNzZWQgPSBwdWJLZXlCeXRlcy5sZW5ndGggPT09IDY1ICYmIGZpcnN0Qnl0ZSA9PT0gNDtcblxuICAgIHJldHVybiB2YWxpZENvbXByZXNzZWQgfHwgdmFsaWRVbmNvbXByZXNzZWQ7XG4gIH1cblxuICAvKipcbiAgICogRW5jb2RlcyBhIHZhbHVlIGludG8gQ0JPUiBmb3JtYXQgYW5kIHJldHVybnMgaXQgYXMgYSBoZXggc3RyaW5nLlxuICAgKlxuICAgKiBAcGFyYW0ge3Vua25vd259IHZhbHVlIC0gVGhlIHZhbHVlIHRvIGVuY29kZS5cbiAgICogQHJldHVybnMge3N0cmluZ30gLSBUaGUgQ0JPUiBlbmNvZGVkIHZhbHVlIGFzIGEgaGV4IHN0cmluZy5cbiAgICovXG4gIGNib3JFbmNvZGUodmFsdWU6IHVua25vd24pOiBzdHJpbmcge1xuICAgIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1ZhbHVlIHRvIGVuY29kZSBjYW5ub3QgYmUgdW5kZWZpbmVkLicpO1xuICAgIH1cbiAgICBjb25zdCBjYm9yRGF0YSA9IGVuY29kZSh2YWx1ZSk7XG4gICAgcmV0dXJuIEJ1ZmZlci5mcm9tKGNib3JEYXRhKS50b1N0cmluZygnaGV4Jyk7XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2tzIGlmIHRoZSBsZW5ndGggb2YgdGhlIGdpdmVuIGhleGFkZWNpbWFsIHN0cmluZyBpcyB2YWxpZC5cbiAgICogQSB2YWxpZCBsZW5ndGggaXMgZWl0aGVyIDY2IGNoYXJhY3RlcnMgKDMzIGJ5dGVzKSBvciAxMzAgY2hhcmFjdGVycyAoNjUgYnl0ZXMpLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gaGV4U3RyIC0gVGhlIGhleGFkZWNpbWFsIHN0cmluZyB0byBjaGVjay5cbiAgICogQHJldHVybnMge2Jvb2xlYW59IC0gUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIGxlbmd0aCBpcyB2YWxpZCwgb3RoZXJ3aXNlIGBmYWxzZWAuXG4gICAqL1xuICBpc1ZhbGlkTGVuZ3RoKGhleFN0cjogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIGhleFN0ci5sZW5ndGggLyAyID09PSAzMyB8fCBoZXhTdHIubGVuZ3RoIC8gMiA9PT0gNjU7XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2tzIGlmIHRoZSBwcm92aWRlZCBzdHJpbmcgaXMgYSB2YWxpZCBoZXhhZGVjaW1hbCBzdHJpbmcuXG4gICAqXG4gICAqIEEgdmFsaWQgaGV4YWRlY2ltYWwgc3RyaW5nIGNvbnNpc3RzIG9mIHBhaXJzIG9mIGhleGFkZWNpbWFsIGRpZ2l0cyAoMC05LCBhLWYsIEEtRikuXG4gICAqXG4gICAqIEBwYXJhbSBoZXhTdHIgLSBUaGUgc3RyaW5nIHRvIGJlIHZhbGlkYXRlZCBhcyBhIGhleGFkZWNpbWFsIHN0cmluZy5cbiAgICogQHJldHVybnMgVHJ1ZSBpZiB0aGUgc3RyaW5nIGlzIGEgdmFsaWQgaGV4YWRlY2ltYWwgc3RyaW5nLCBmYWxzZSBvdGhlcndpc2UuXG4gICAqL1xuICBpc1ZhbGlkSGV4KGhleFN0cjogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIC9eKFswLTlhLWZBLUZdezJ9KSskLy50ZXN0KGhleFN0cik7XG4gIH1cblxuICAvKipcbiAgICogQ29udmVydHMgYSBoZXhhZGVjaW1hbCBzdHJpbmcgdG8gYSBVaW50OEFycmF5LlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gaGV4IC0gVGhlIGhleGFkZWNpbWFsIHN0cmluZyB0byBjb252ZXJ0LlxuICAgKiBAcmV0dXJucyB7VWludDhBcnJheX0gVGhlIHJlc3VsdGluZyBieXRlIGFycmF5LlxuICAgKi9cbiAgaGV4VG9CeXRlcyhoZXg6IHN0cmluZyk6IFVpbnQ4QXJyYXkge1xuICAgIGNvbnN0IGJ5dGVzID0gbmV3IFVpbnQ4QXJyYXkoaGV4Lmxlbmd0aCAvIDIpO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgaGV4Lmxlbmd0aDsgaSArPSAyKSB7XG4gICAgICBieXRlc1tpIC8gMl0gPSBwYXJzZUludChoZXguc3Vic3RyKGksIDIpLCAxNik7XG4gICAgfVxuICAgIHJldHVybiBieXRlcztcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdGRvYyAqL1xuICBpc1ZhbGlkUHJpdmF0ZUtleShrZXk6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmlzVmFsaWRLZXkoa2V5KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBWYWxpZGF0ZXMgd2hldGhlciB0aGUgcHJvdmlkZWQga2V5IGlzIGEgdmFsaWQgSUNQIHByaXZhdGUga2V5LlxuICAgKlxuICAgKiBUaGlzIGZ1bmN0aW9uIGF0dGVtcHRzIHRvIGNyZWF0ZSBhIG5ldyBpbnN0YW5jZSBvZiBgSWNwS2V5UGFpcmAgdXNpbmcgdGhlIHByb3ZpZGVkIGtleS5cbiAgICogSWYgdGhlIGtleSBpcyB2YWxpZCwgdGhlIGZ1bmN0aW9uIHJldHVybnMgYHRydWVgLiBJZiB0aGUga2V5IGlzIGludmFsaWQsIGFuIGVycm9yIGlzIHRocm93bixcbiAgICogYW5kIHRoZSBmdW5jdGlvbiByZXR1cm5zIGBmYWxzZWAuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgLSBUaGUgcHJpdmF0ZSBrZXkgdG8gdmFsaWRhdGUuXG4gICAqIEByZXR1cm5zIHtib29sZWFufSAtIGB0cnVlYCBpZiB0aGUga2V5IGlzIHZhbGlkLCBgZmFsc2VgIG90aGVyd2lzZS5cbiAgICovXG4gIGlzVmFsaWRLZXkoa2V5OiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICB0cnkge1xuICAgICAgbmV3IEljcEtleVBhaXIoeyBwcnY6IGtleSB9KTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0gY2F0Y2gge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBDb21wcmVzc2VzIGFuIHVuY29tcHJlc3NlZCBwdWJsaWMga2V5LlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gdW5jb21wcmVzc2VkS2V5IC0gVGhlIHVuY29tcHJlc3NlZCBwdWJsaWMga2V5IGluIGhleGFkZWNpbWFsIGZvcm1hdC5cbiAgICogQHJldHVybnMge3N0cmluZ30gLSBUaGUgY29tcHJlc3NlZCBwdWJsaWMga2V5IGluIGhleGFkZWNpbWFsIGZvcm1hdC5cbiAgICogQHRocm93cyB7RXJyb3J9IC0gSWYgdGhlIGlucHV0IGtleSBpcyBub3QgYSB2YWxpZCB1bmNvbXByZXNzZWQgcHVibGljIGtleS5cbiAgICovXG4gIGNvbXByZXNzUHVibGljS2V5KHVuY29tcHJlc3NlZEtleTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBpZiAodW5jb21wcmVzc2VkS2V5LnN0YXJ0c1dpdGgoJzAyJykgfHwgdW5jb21wcmVzc2VkS2V5LnN0YXJ0c1dpdGgoJzAzJykpIHtcbiAgICAgIHJldHVybiB1bmNvbXByZXNzZWRLZXk7XG4gICAgfVxuICAgIGlmICghdW5jb21wcmVzc2VkS2V5LnN0YXJ0c1dpdGgoJzA0JykgfHwgdW5jb21wcmVzc2VkS2V5Lmxlbmd0aCAhPT0gMTMwKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgdW5jb21wcmVzc2VkIHB1YmxpYyBrZXkgZm9ybWF0LicpO1xuICAgIH1cblxuICAgIGNvbnN0IHhIZXggPSB1bmNvbXByZXNzZWRLZXkuc2xpY2UoMiwgNjYpO1xuICAgIGNvbnN0IHlIZXggPSB1bmNvbXByZXNzZWRLZXkuc2xpY2UoNjYpO1xuICAgIGNvbnN0IHkgPSBCaWdJbnQoYDB4JHt5SGV4fWApO1xuICAgIGNvbnN0IHByZWZpeCA9IHkgJSAybiA9PT0gMG4gPyAnMDInIDogJzAzJztcblxuICAgIHJldHVybiBgJHtwcmVmaXh9JHt4SGV4fWA7XG4gIH1cblxuICAvKipcbiAgICogQ29udmVydHMgYSBwdWJsaWMga2V5IGZyb20gaXRzIGhleGFkZWNpbWFsIHN0cmluZyByZXByZXNlbnRhdGlvbiB0byBERVIgZm9ybWF0LlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gcHVibGljS2V5SGV4IC0gVGhlIHB1YmxpYyBrZXkgaW4gaGV4YWRlY2ltYWwgc3RyaW5nIGZvcm1hdC5cbiAgICogQHJldHVybnMgVGhlIHB1YmxpYyBrZXkgaW4gREVSIGZvcm1hdCBhcyBhIFVpbnQ4QXJyYXkuXG4gICAqL1xuICBnZXRQdWJsaWNLZXlJbkRFUkZvcm1hdChwdWJsaWNLZXlIZXg6IHN0cmluZyk6IFVpbnQ4QXJyYXkge1xuICAgIGNvbnN0IHB1YmxpY0tleUJ1ZmZlciA9IEJ1ZmZlci5mcm9tKHB1YmxpY0tleUhleCwgJ2hleCcpO1xuICAgIGNvbnN0IGVsbGlwdGljS2V5ID0gc2VjcDI1NmsxLlByb2plY3RpdmVQb2ludC5mcm9tSGV4KHB1YmxpY0tleUJ1ZmZlci50b1N0cmluZygnaGV4JykpO1xuICAgIGNvbnN0IHVuY29tcHJlc3NlZFB1YmxpY0tleUhleCA9IGVsbGlwdGljS2V5LnRvSGV4KGZhbHNlKTtcbiAgICBjb25zdCBkZXJFbmNvZGVkS2V5ID0gYWdlbnQud3JhcERFUihCdWZmZXIuZnJvbSh1bmNvbXByZXNzZWRQdWJsaWNLZXlIZXgsICdoZXgnKSwgYWdlbnQuU0VDUDI1NksxX09JRCk7XG4gICAgcmV0dXJuIGRlckVuY29kZWRLZXk7XG4gIH1cblxuICAvKipcbiAgICogQ29udmVydHMgYSBwdWJsaWMga2V5IGluIGhleGFkZWNpbWFsIGZvcm1hdCB0byBhIERmaW5pdHkgUHJpbmNpcGFsIElELlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gcHVibGljS2V5SGV4IC0gVGhlIHB1YmxpYyBrZXkgaW4gaGV4YWRlY2ltYWwgZm9ybWF0LlxuICAgKiBAcmV0dXJucyBUaGUgY29ycmVzcG9uZGluZyBEZmluaXR5IFByaW5jaXBhbCBJRC5cbiAgICovXG4gIGdldFByaW5jaXBhbElkRnJvbVB1YmxpY0tleShwdWJsaWNLZXlIZXg6IHN0cmluZyk6IERmaW5pdHlQcmluY2lwYWwge1xuICAgIGNvbnN0IGRlckVuY29kZWRLZXkgPSB0aGlzLmdldFB1YmxpY0tleUluREVSRm9ybWF0KHB1YmxpY0tleUhleCk7XG4gICAgY29uc3QgcHJpbmNpcGFsSWQgPSBEZmluaXR5UHJpbmNpcGFsLnNlbGZBdXRoZW50aWNhdGluZyhCdWZmZXIuZnJvbShkZXJFbmNvZGVkS2V5KSk7XG4gICAgcmV0dXJuIHByaW5jaXBhbElkO1xuICB9XG5cbiAgLyoqXG4gICAqIERlcml2ZXMgYSBEZmluaXR5UHJpbmNpcGFsIGZyb20gYSBnaXZlbiBwdWJsaWMga2V5IGluIGhleGFkZWNpbWFsIGZvcm1hdC5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IHB1YmxpY0tleUhleCAtIFRoZSBwdWJsaWMga2V5IGluIGhleGFkZWNpbWFsIGZvcm1hdC5cbiAgICogQHJldHVybnMgVGhlIGRlcml2ZWQgRGZpbml0eVByaW5jaXBhbC5cbiAgICogQHRocm93cyBXaWxsIHRocm93IGFuIGVycm9yIGlmIHRoZSBwcmluY2lwYWwgY2Fubm90IGJlIGRlcml2ZWQgZnJvbSB0aGUgcHVibGljIGtleS5cbiAgICovXG4gIGRlcml2ZVByaW5jaXBhbEZyb21QdWJsaWNLZXkocHVibGljS2V5SGV4OiBzdHJpbmcpOiBEZmluaXR5UHJpbmNpcGFsIHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgZGVyRW5jb2RlZEtleSA9IHRoaXMuZ2V0UHVibGljS2V5SW5ERVJGb3JtYXQocHVibGljS2V5SGV4KTtcbiAgICAgIGNvbnN0IHByaW5jaXBhbElkID0gRGZpbml0eVByaW5jaXBhbC5zZWxmQXV0aGVudGljYXRpbmcoQnVmZmVyLmZyb20oZGVyRW5jb2RlZEtleSkpO1xuICAgICAgY29uc3QgcHJpbmNpcGFsID0gRGZpbml0eVByaW5jaXBhbC5mcm9tVWludDhBcnJheShwcmluY2lwYWxJZC50b1VpbnQ4QXJyYXkoKSk7XG4gICAgICByZXR1cm4gcHJpbmNpcGFsO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEZhaWxlZCB0byBkZXJpdmUgcHJpbmNpcGFsIGZyb20gcHVibGljIGtleTogJHtlcnJvci5tZXNzYWdlfWApO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBDb252ZXJ0cyBhIERmaW5pdHlQcmluY2lwYWwgYW5kIGFuIG9wdGlvbmFsIHN1YkFjY291bnQgdG8gYSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgYW4gYWNjb3VudCBJRC5cbiAgICpcbiAgICogQHBhcmFtIHtEZmluaXR5UHJpbmNpcGFsfSBwcmluY2lwYWwgLSBUaGUgcHJpbmNpcGFsIHRvIGNvbnZlcnQuXG4gICAqIEBwYXJhbSB7VWludDhBcnJheX0gW3N1YkFjY291bnQ9bmV3IFVpbnQ4QXJyYXkoMzIpXSAtIEFuIG9wdGlvbmFsIHN1Yi1hY2NvdW50LCBkZWZhdWx0cyB0byBhIDMyLWJ5dGUgYXJyYXkgb2YgemVyb3MuXG4gICAqIEByZXR1cm5zIHtzdHJpbmd9IFRoZSBoZXhhZGVjaW1hbCBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIGFjY291bnQgSUQuXG4gICAqL1xuICBmcm9tUHJpbmNpcGFsKHByaW5jaXBhbDogRGZpbml0eVByaW5jaXBhbCwgc3ViQWNjb3VudDogVWludDhBcnJheSA9IG5ldyBVaW50OEFycmF5KDMyKSk6IHN0cmluZyB7XG4gICAgY29uc3QgcHJpbmNpcGFsQnl0ZXMgPSBCdWZmZXIuZnJvbShwcmluY2lwYWwudG9VaW50OEFycmF5KCkuYnVmZmVyKTtcbiAgICByZXR1cm4gdGhpcy5nZXRBY2NvdW50SWRGcm9tUHJpbmNpcGFsQnl0ZXModGhpcy5nZXRBY2NvdW50SWRQcmVmaXgoKSwgcHJpbmNpcGFsQnl0ZXMsIHN1YkFjY291bnQpO1xuICB9XG5cbiAgZ2V0QWNjb3VudElkRnJvbVByaW5jaXBhbEJ5dGVzKFxuICAgIEFDQ09VTlRfSURfUFJFRklYOiBCdWZmZXI8QXJyYXlCdWZmZXI+LFxuICAgIHByaW5jaXBhbEJ5dGVzOiBCdWZmZXI8QXJyYXlCdWZmZXJMaWtlPixcbiAgICBzdWJBY2NvdW50OiBVaW50OEFycmF5PEFycmF5QnVmZmVyTGlrZT5cbiAgKTogc3RyaW5nIHtcbiAgICBjb25zdCBjb21iaW5lZEJ5dGVzID0gQnVmZmVyLmNvbmNhdChbQUNDT1VOVF9JRF9QUkVGSVgsIHByaW5jaXBhbEJ5dGVzLCBzdWJBY2NvdW50XSk7XG4gICAgY29uc3Qgc2hhMjI0SGFzaCA9IGNyeXB0by5jcmVhdGVIYXNoKCdzaGEyMjQnKS51cGRhdGUoY29tYmluZWRCeXRlcykuZGlnZXN0KCk7XG4gICAgY29uc3QgY2hlY2tzdW0gPSBCdWZmZXIuYWxsb2MoNCk7XG4gICAgY2hlY2tzdW0ud3JpdGVVSW50MzJCRShjcmMzMi5idWYoc2hhMjI0SGFzaCkgPj4+IDAsIDApO1xuICAgIGNvbnN0IGFjY291bnRJZEJ5dGVzID0gQnVmZmVyLmNvbmNhdChbY2hlY2tzdW0sIHNoYTIyNEhhc2hdKTtcbiAgICByZXR1cm4gYWNjb3VudElkQnl0ZXMudG9TdHJpbmcoJ2hleCcpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHJpZXZlcyB0aGUgYWRkcmVzcyBhc3NvY2lhdGVkIHdpdGggYSBnaXZlbiBoZXgtZW5jb2RlZCBwdWJsaWMga2V5LlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gaGV4RW5jb2RlZFB1YmxpY0tleSAtIFRoZSBwdWJsaWMga2V5IGluIGhleC1lbmNvZGVkIGZvcm1hdC5cbiAgICogQHJldHVybnMge1Byb21pc2U8c3RyaW5nPn0gQSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgdG8gdGhlIGFkZHJlc3MgZGVyaXZlZCBmcm9tIHRoZSBwcm92aWRlZCBwdWJsaWMga2V5LlxuICAgKiBAdGhyb3dzIHtFcnJvcn0gVGhyb3dzIGFuIGVycm9yIGlmIHRoZSBwcm92aWRlZCBwdWJsaWMga2V5IGlzIG5vdCBpbiBhIHZhbGlkIGhleC1lbmNvZGVkIGZvcm1hdC5cbiAgICovXG4gIGFzeW5jIGdldEFkZHJlc3NGcm9tUHVibGljS2V5KGhleEVuY29kZWRQdWJsaWNLZXk6IHN0cmluZyk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgaWYgKCF0aGlzLmlzVmFsaWRQdWJsaWNLZXkoaGV4RW5jb2RlZFB1YmxpY0tleSkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBoZXgtZW5jb2RlZCBwdWJsaWMga2V5IGZvcm1hdC4nKTtcbiAgICB9XG4gICAgY29uc3QgY29tcHJlc3NlZEtleSA9IHRoaXMuY29tcHJlc3NQdWJsaWNLZXkoaGV4RW5jb2RlZFB1YmxpY0tleSk7XG4gICAgY29uc3Qga2V5UGFpciA9IG5ldyBJY3BLZXlQYWlyKHsgcHViOiBjb21wcmVzc2VkS2V5IH0pO1xuICAgIHJldHVybiBrZXlQYWlyLmdldEFkZHJlc3MoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZW5lcmF0ZXMgYSBuZXcga2V5IHBhaXIuIElmIGEgc2VlZCBpcyBwcm92aWRlZCwgaXQgd2lsbCBiZSB1c2VkIHRvIGdlbmVyYXRlIHRoZSBrZXkgcGFpci5cbiAgICpcbiAgICogQHBhcmFtIHtCdWZmZXJ9IFtzZWVkXSAtIE9wdGlvbmFsIHNlZWQgZm9yIGtleSBnZW5lcmF0aW9uLlxuICAgKiBAcmV0dXJucyB7S2V5UGFpcn0gLSBUaGUgZ2VuZXJhdGVkIGtleSBwYWlyIGNvbnRhaW5pbmcgYm90aCBwdWJsaWMgYW5kIHByaXZhdGUga2V5cy5cbiAgICogQHRocm93cyB7RXJyb3J9IC0gSWYgdGhlIHByaXZhdGUga2V5IGlzIG1pc3NpbmcgaW4gdGhlIGdlbmVyYXRlZCBrZXkgcGFpci5cbiAgICovXG4gIHB1YmxpYyBnZW5lcmF0ZUtleVBhaXIoc2VlZD86IEJ1ZmZlcik6IEtleVBhaXIge1xuICAgIGNvbnN0IGtleVBhaXIgPSBzZWVkID8gbmV3IEljcEtleVBhaXIoeyBzZWVkIH0pIDogbmV3IEljcEtleVBhaXIoKTtcbiAgICBjb25zdCB7IHB1YiwgcHJ2IH0gPSBrZXlQYWlyLmdldEtleXMoKTtcbiAgICBpZiAoIXBydikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdQcml2YXRlIGtleSBpcyBtaXNzaW5nIGluIHRoZSBnZW5lcmF0ZWQga2V5IHBhaXIuJyk7XG4gICAgfVxuICAgIHJldHVybiB7IHB1YiwgcHJ2IH07XG4gIH1cblxuICAvKipcbiAgICogVmFsaWRhdGVzIHRoZSBwcm92aWRlZCBmZWUuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBmZWUgLSBUaGUgZmVlIHRvIHZhbGlkYXRlLlxuICAgKiBAdGhyb3dzIHtCdWlsZFRyYW5zYWN0aW9uRXJyb3J9IC0gSWYgdGhlIGZlZSBpcyB6ZXJvIG9yIGludmFsaWQuXG4gICAqL1xuICB2YWxpZGF0ZUZlZShmZWU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IGZlZVZhbHVlID0gbmV3IEJpZ051bWJlcihmZWUpO1xuICAgIGlmIChmZWVWYWx1ZS5pc1plcm8oKSkge1xuICAgICAgdGhyb3cgbmV3IEJ1aWxkVHJhbnNhY3Rpb25FcnJvcignRmVlIGNhbm5vdCBiZSB6ZXJvJyk7XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgLyoqIEBpbmhlcml0ZG9jICovXG4gIHZhbGlkYXRlVmFsdWUodmFsdWU6IEJpZ051bWJlcik6IGJvb2xlYW4ge1xuICAgIGlmICh2YWx1ZS5pc0xlc3NUaGFuT3JFcXVhbFRvKDApKSB7XG4gICAgICB0aHJvdyBuZXcgQnVpbGRUcmFuc2FjdGlvbkVycm9yKCdhbW91bnQgY2Fubm90IGJlIGxlc3MgdGhhbiBvciBlcXVhbCB0byB6ZXJvJyk7XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgLyoqXG4gICAqIFZhbGlkYXRlcyB0aGUgcHJvdmlkZWQgbWVtby5cbiAgICpcbiAgICogQHBhcmFtIHtudW1iZXIgfCBCaWdJbnR9IG1lbW8gLSBUaGUgbWVtbyB0byB2YWxpZGF0ZS5cbiAgICogQHJldHVybnMge2Jvb2xlYW59IC0gUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIG1lbW8gaXMgdmFsaWQuXG4gICAqIEB0aHJvd3Mge0J1aWxkVHJhbnNhY3Rpb25FcnJvcn0gLSBJZiB0aGUgbWVtbyBpcyBpbnZhbGlkLlxuICAgKi9cbiAgdmFsaWRhdGVNZW1vKG1lbW86IG51bWJlciB8IEJpZ0ludCk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IG1lbW9OdW1iZXIgPSBOdW1iZXIobWVtbyk7XG4gICAgaWYgKG1lbW9OdW1iZXIgPCAwIHx8IE51bWJlci5pc05hTihtZW1vTnVtYmVyKSkge1xuICAgICAgdGhyb3cgbmV3IEJ1aWxkVHJhbnNhY3Rpb25FcnJvcignSW52YWxpZCBtZW1vJyk7XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgdmFsaWRhdGVFeHBpcmVUaW1lKGV4cGlyZVRpbWU6IG51bWJlciB8IEJpZ0ludCk6IGJvb2xlYW4ge1xuICAgIGlmIChOdW1iZXIoZXhwaXJlVGltZSkgPCBEYXRlLm5vdygpICogMTAwMF8wMDApIHtcbiAgICAgIHRocm93IG5ldyBCdWlsZFRyYW5zYWN0aW9uRXJyb3IoJ0ludmFsaWQgZXhwaXJ5IHRpbWUnKTtcbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICAvKipcbiAgICogVmFsaWRhdGVzIHRoZSByYXcgdHJhbnNhY3Rpb24gZGF0YSB0byBlbnN1cmUgaXQgaGFzIGEgdmFsaWQgZm9ybWF0IGluIHRoZSBibG9ja2NoYWluIGNvbnRleHQuXG4gICAqXG4gICAqIEBwYXJhbSB7SWNwVHJhbnNhY3Rpb25EYXRhfSB0cmFuc2FjdGlvbkRhdGEgLSBUaGUgdHJhbnNhY3Rpb24gZGF0YSB0byB2YWxpZGF0ZS5cbiAgICogQHRocm93cyB7UGFyc2VUcmFuc2FjdGlvbkVycm9yfSBJZiB0aGUgdHJhbnNhY3Rpb24gZGF0YSBpcyBpbnZhbGlkLlxuICAgKi9cbiAgdmFsaWRhdGVSYXdUcmFuc2FjdGlvbih0cmFuc2FjdGlvbkRhdGE6IEljcFRyYW5zYWN0aW9uRGF0YSk6IHZvaWQge1xuICAgIGlmICghdHJhbnNhY3Rpb25EYXRhKSB7XG4gICAgICB0aHJvdyBuZXcgUGFyc2VUcmFuc2FjdGlvbkVycm9yKCdUcmFuc2FjdGlvbiBkYXRhIGlzIG1pc3NpbmcuJyk7XG4gICAgfVxuICAgIGNvbnN0IHsgc2VuZGVyUHVibGljS2V5SGV4LCBzZW5kZXJBZGRyZXNzLCByZWNlaXZlckFkZHJlc3MgfSA9IHRyYW5zYWN0aW9uRGF0YTtcbiAgICBpZiAoIXRoaXMuaXNWYWxpZFB1YmxpY0tleShzZW5kZXJQdWJsaWNLZXlIZXgpKSB7XG4gICAgICB0aHJvdyBuZXcgUGFyc2VUcmFuc2FjdGlvbkVycm9yKCdTZW5kZXIgcHVibGljIGtleSBpcyBpbnZhbGlkLicpO1xuICAgIH1cbiAgICBpZiAoIXRoaXMuaXNWYWxpZEFkZHJlc3Moc2VuZGVyQWRkcmVzcykpIHtcbiAgICAgIHRocm93IG5ldyBQYXJzZVRyYW5zYWN0aW9uRXJyb3IoJ1NlbmRlciBhZGRyZXNzIGlzIGludmFsaWQuJyk7XG4gICAgfVxuICAgIGlmICghdGhpcy5pc1ZhbGlkQWRkcmVzcyhyZWNlaXZlckFkZHJlc3MpKSB7XG4gICAgICB0aHJvdyBuZXcgUGFyc2VUcmFuc2FjdGlvbkVycm9yKCdSZWNlaXZlciBhZGRyZXNzIGlzIGludmFsaWQuJyk7XG4gICAgfVxuICAgIHRoaXMudmFsaWRhdGVGZWUodHJhbnNhY3Rpb25EYXRhLmZlZSk7XG4gICAgdGhpcy52YWxpZGF0ZVZhbHVlKG5ldyBCaWdOdW1iZXIodHJhbnNhY3Rpb25EYXRhLmFtb3VudCkpO1xuICAgIHRoaXMudmFsaWRhdGVNZW1vKHRyYW5zYWN0aW9uRGF0YS5tZW1vKTtcbiAgICB0aGlzLnZhbGlkYXRlRXhwaXJlVGltZSh0cmFuc2FjdGlvbkRhdGEuZXhwaXJ5VGltZSk7XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIHtvYmplY3R9IHVwZGF0ZVxuICAgKiBAcmV0dXJucyB7QnVmZmVyfVxuICAgKi9cbiAgZ2VuZXJhdGVIdHRwQ2FuaXN0ZXJVcGRhdGVJZCh1cGRhdGU6IEh0dHBDYW5pc3RlclVwZGF0ZSk6IEJ1ZmZlciB7XG4gICAgcmV0dXJuIHRoaXMuSHR0cENhbmlzdGVyVXBkYXRlUmVwcmVzZW50YXRpb25JbmRlcGVuZGVudEhhc2godXBkYXRlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZW5lcmF0ZXMgYSByZXByZXNlbnRhdGlvbi1pbmRlcGVuZGVudCBoYXNoIGZvciBhbiBIVFRQIGNhbmlzdGVyIHVwZGF0ZS5cbiAgICpcbiAgICogQHBhcmFtIHtIdHRwQ2FuaXN0ZXJVcGRhdGV9IHVwZGF0ZSAtIFRoZSBIVFRQIGNhbmlzdGVyIHVwZGF0ZSBvYmplY3QuXG4gICAqIEByZXR1cm5zIHtCdWZmZXJ9IC0gVGhlIGhhc2ggb2YgdGhlIHVwZGF0ZSBvYmplY3QuXG4gICAqL1xuICBIdHRwQ2FuaXN0ZXJVcGRhdGVSZXByZXNlbnRhdGlvbkluZGVwZW5kZW50SGFzaCh1cGRhdGU6IEh0dHBDYW5pc3RlclVwZGF0ZSk6IEJ1ZmZlciB7XG4gICAgY29uc3QgdXBkYXRlTWFwID0ge1xuICAgICAgcmVxdWVzdF90eXBlOiBSZXF1ZXN0VHlwZS5DQUxMLFxuICAgICAgY2FuaXN0ZXJfaWQ6IHVwZGF0ZS5jYW5pc3Rlcl9pZCxcbiAgICAgIG1ldGhvZF9uYW1lOiB1cGRhdGUubWV0aG9kX25hbWUsXG4gICAgICBhcmc6IHVwZGF0ZS5hcmcsXG4gICAgICBpbmdyZXNzX2V4cGlyeTogdXBkYXRlLmluZ3Jlc3NfZXhwaXJ5LFxuICAgICAgc2VuZGVyOiB1cGRhdGUuc2VuZGVyLFxuICAgIH07XG4gICAgcmV0dXJuIHRoaXMuaGFzaE9mTWFwKHVwZGF0ZU1hcCk7XG4gIH1cblxuICAvKipcbiAgICogR2VuZXJhdGVzIGEgU0hBLTI1NiBoYXNoIGZvciBhIGdpdmVuIG1hcCBvYmplY3QuXG4gICAqXG4gICAqIEBwYXJhbSB7UmVjb3JkPHN0cmluZywgdW5rbm93bj59IG1hcCAtIFRoZSBtYXAgb2JqZWN0IHRvIGhhc2guXG4gICAqIEByZXR1cm5zIHtCdWZmZXJ9IC0gVGhlIHJlc3VsdGluZyBoYXNoIGFzIGEgQnVmZmVyLlxuICAgKi9cbiAgaGFzaE9mTWFwKG1hcDogUmVjb3JkPHN0cmluZywgYW55Pik6IEJ1ZmZlciB7XG4gICAgY29uc3QgaGFzaGVzOiBCdWZmZXJbXSA9IFtdO1xuICAgIGZvciAoY29uc3Qga2V5IGluIG1hcCkge1xuICAgICAgaGFzaGVzLnB1c2godGhpcy5oYXNoS2V5VmFsKGtleSwgbWFwW2tleV0pKTtcbiAgICB9XG4gICAgaGFzaGVzLnNvcnQoKGJ1ZjAsIGJ1ZjEpID0+IGJ1ZjAuY29tcGFyZShidWYxKSk7XG4gICAgcmV0dXJuIHRoaXMuc2hhMjU2KGhhc2hlcyk7XG4gIH1cblxuICAvKipcbiAgICogR2VuZXJhdGVzIGEgaGFzaCBmb3IgYSBrZXktdmFsdWUgcGFpci5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IGtleSAtIFRoZSBrZXkgdG8gaGFzaC5cbiAgICogQHBhcmFtIHtzdHJpbmcgfCBCdWZmZXIgfCBCaWdJbnR9IHZhbCAtIFRoZSB2YWx1ZSB0byBoYXNoLlxuICAgKiBAcmV0dXJucyB7QnVmZmVyfSAtIFRoZSByZXN1bHRpbmcgaGFzaCBhcyBhIEJ1ZmZlci5cbiAgICovXG4gIGhhc2hLZXlWYWwoa2V5OiBzdHJpbmcsIHZhbDogYW55KTogQnVmZmVyIHtcbiAgICBjb25zdCBrZXlIYXNoID0gdGhpcy5oYXNoU3RyaW5nKGtleSk7XG4gICAgY29uc3QgdmFsSGFzaCA9IHRoaXMuaGFzaFZhbCh2YWwpO1xuICAgIHJldHVybiBCdWZmZXIuY29uY2F0KFtrZXlIYXNoLCB2YWxIYXNoXSk7XG4gIH1cblxuICAvKipcbiAgICogR2VuZXJhdGVzIGEgU0hBLTI1NiBoYXNoIGZvciBhIGdpdmVuIHN0cmluZy5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IHZhbHVlIC0gVGhlIHN0cmluZyB0byBoYXNoLlxuICAgKiBAcmV0dXJucyB7QnVmZmVyfSAtIFRoZSByZXN1bHRpbmcgaGFzaCBhcyBhIEJ1ZmZlci5cbiAgICovXG4gIGhhc2hTdHJpbmcodmFsdWU6IHN0cmluZyk6IEJ1ZmZlciB7XG4gICAgcmV0dXJuIHRoaXMuc2hhMjU2KFtCdWZmZXIuZnJvbSh2YWx1ZSldKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZW5lcmF0ZXMgYSBoYXNoIGZvciBhIDY0LWJpdCB1bnNpZ25lZCBpbnRlZ2VyLlxuICAgKlxuICAgKiBAcGFyYW0ge2JpZ2ludH0gbiAtIFRoZSA2NC1iaXQgdW5zaWduZWQgaW50ZWdlciB0byBoYXNoLlxuICAgKiBAcmV0dXJucyB7QnVmZmVyfSAtIFRoZSByZXN1bHRpbmcgaGFzaCBhcyBhIEJ1ZmZlci5cbiAgICovXG4gIGhhc2hVNjQobjogYmlnaW50KTogQnVmZmVyIHtcbiAgICBjb25zdCBidWYgPSBCdWZmZXIuYWxsb2NVbnNhZmUoMTApO1xuICAgIGxldCBpID0gMDtcbiAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgY29uc3QgYnl0ZSA9IE51bWJlcihuICYgQmlnSW50KDB4N2YpKTtcbiAgICAgIG4gPj49IEJpZ0ludCg3KTtcbiAgICAgIGlmIChuID09PSBCaWdJbnQoMCkpIHtcbiAgICAgICAgYnVmW2ldID0gYnl0ZTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBidWZbaV0gPSBieXRlIHwgMHg4MDtcbiAgICAgICAgKytpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdGhpcy5oYXNoQnl0ZXMoYnVmLnN1YmFycmF5KDAsIGkgKyAxKSk7XG4gIH1cblxuICAvKipcbiAgICogR2VuZXJhdGVzIGEgU0hBLTI1NiBoYXNoIGZvciBhbiBhcnJheSBvZiBlbGVtZW50cy5cbiAgICpcbiAgICogQHBhcmFtIHtBcnJheTxhbnk+fSBlbGVtZW50cyAtIFRoZSBhcnJheSBvZiBlbGVtZW50cyB0byBoYXNoLlxuICAgKiBAcmV0dXJucyB7QnVmZmVyfSAtIFRoZSByZXN1bHRpbmcgaGFzaCBhcyBhIEJ1ZmZlci5cbiAgICovXG4gIGhhc2hBcnJheShlbGVtZW50czogQXJyYXk8YW55Pik6IEJ1ZmZlciB7XG4gICAgcmV0dXJuIHRoaXMuc2hhMjU2KGVsZW1lbnRzLm1hcCh0aGlzLmhhc2hWYWwpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZW5lcmF0ZXMgYSBoYXNoIGZvciBhIGdpdmVuIHZhbHVlLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZyB8IEJ1ZmZlciB8IEJpZ0ludCB8IG51bWJlciB8IEFycmF5PHVua25vd24+fSB2YWwgLSBUaGUgdmFsdWUgdG8gaGFzaC5cbiAgICogQHJldHVybnMge0J1ZmZlcn0gLSBUaGUgcmVzdWx0aW5nIGhhc2ggYXMgYSBCdWZmZXIuXG4gICAqIEB0aHJvd3Mge0Vycm9yfSAtIElmIHRoZSB2YWx1ZSB0eXBlIGlzIHVuc3VwcG9ydGVkLlxuICAgKi9cbiAgaGFzaFZhbCh2YWw6IHN0cmluZyB8IEJ1ZmZlciB8IEJpZ0ludCB8IG51bWJlciB8IEFycmF5PHVua25vd24+KTogQnVmZmVyIHtcbiAgICBpZiAodHlwZW9mIHZhbCA9PT0gJ3N0cmluZycpIHtcbiAgICAgIHJldHVybiB1dGlscy5oYXNoU3RyaW5nKHZhbCk7XG4gICAgfSBlbHNlIGlmIChCdWZmZXIuaXNCdWZmZXIodmFsKSkge1xuICAgICAgcmV0dXJuIHV0aWxzLmhhc2hCeXRlcyh2YWwpO1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIHZhbCA9PT0gJ2JpZ2ludCcgfHwgdHlwZW9mIHZhbCA9PT0gJ251bWJlcicpIHtcbiAgICAgIHJldHVybiB1dGlscy5oYXNoVTY0KEJpZ0ludCh2YWwpKTtcbiAgICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkodmFsKSkge1xuICAgICAgcmV0dXJuIHV0aWxzLmhhc2hBcnJheSh2YWwpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFVuc3VwcG9ydGVkIHZhbHVlIHR5cGUgZm9yIGhhc2hpbmc6ICR7dHlwZW9mIHZhbH1gKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQ29tcHV0ZXMgdGhlIFNIQS0yNTYgaGFzaCBvZiB0aGUgZ2l2ZW4gYnVmZmVyLlxuICAgKlxuICAgKiBAcGFyYW0gdmFsdWUgLSBUaGUgYnVmZmVyIHRvIGhhc2guXG4gICAqIEByZXR1cm5zIFRoZSBTSEEtMjU2IGhhc2ggb2YgdGhlIGlucHV0IGJ1ZmZlci5cbiAgICovXG4gIGhhc2hCeXRlcyh2YWx1ZTogQnVmZmVyKTogQnVmZmVyIHtcbiAgICByZXR1cm4gdGhpcy5zaGEyNTYoW3ZhbHVlXSk7XG4gIH1cblxuICAvKipcbiAgICogQ29tcHV0ZXMgdGhlIFNIQS0yNTYgaGFzaCBvZiB0aGUgcHJvdmlkZWQgYXJyYXkgb2YgQnVmZmVyIGNodW5rcy5cbiAgICpcbiAgICogQHBhcmFtIHtBcnJheTxCdWZmZXI+fSBjaHVua3MgLSBBbiBhcnJheSBvZiBCdWZmZXIgb2JqZWN0cyB0byBiZSBoYXNoZWQuXG4gICAqIEByZXR1cm5zIHtCdWZmZXJ9IC0gVGhlIHJlc3VsdGluZyBTSEEtMjU2IGhhc2ggYXMgYSBCdWZmZXIuXG4gICAqL1xuICBzaGEyNTYoY2h1bmtzOiBBcnJheTxCdWZmZXI+KTogQnVmZmVyIHtcbiAgICBjb25zdCBoYXNoZXIgPSBqc19zaGEyNTYuc2hhMjU2LmNyZWF0ZSgpO1xuICAgIGNodW5rcy5mb3JFYWNoKChjaHVuaykgPT4gaGFzaGVyLnVwZGF0ZShjaHVuaykpO1xuICAgIHJldHVybiBCdWZmZXIuZnJvbShoYXNoZXIuYXJyYXlCdWZmZXIoKSk7XG4gIH1cblxuICAvKipcbiAgICogQ29udmVydHMgYSBoZXhhZGVjaW1hbCBzdHJpbmcgdG8gYSBCdWZmZXIuXG4gICAqXG4gICAqIEBwYXJhbSBoZXggLSBUaGUgaGV4YWRlY2ltYWwgc3RyaW5nIHRvIGNvbnZlcnQuXG4gICAqIEByZXR1cm5zIEEgQnVmZmVyIGNvbnRhaW5pbmcgdGhlIGJpbmFyeSBkYXRhIHJlcHJlc2VudGVkIGJ5IHRoZSBoZXhhZGVjaW1hbCBzdHJpbmcuXG4gICAqL1xuICBibG9iRnJvbUhleChoZXg6IHN0cmluZyk6IEJ1ZmZlciB7XG4gICAgcmV0dXJuIEJ1ZmZlci5mcm9tKGhleCwgJ2hleCcpO1xuICB9XG5cbiAgLyoqXG4gICAqIENvbnZlcnRzIGEgYmluYXJ5IGJsb2IgKEJ1ZmZlcikgdG8gYSBoZXhhZGVjaW1hbCBzdHJpbmcuXG4gICAqXG4gICAqIEBwYXJhbSB7QnVmZmVyfSBibG9iIC0gVGhlIGJpbmFyeSBkYXRhIHRvIGJlIGNvbnZlcnRlZC5cbiAgICogQHJldHVybnMge3N0cmluZ30gVGhlIGhleGFkZWNpbWFsIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBiaW5hcnkgZGF0YS5cbiAgICovXG4gIGJsb2JUb0hleChibG9iOiBCdWZmZXIpOiBzdHJpbmcge1xuICAgIHJldHVybiBibG9iLnRvU3RyaW5nKCdoZXgnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZWNvZGVzIGEgZ2l2ZW4gQ0JPUi1lbmNvZGVkIGJ1ZmZlci5cbiAgICpcbiAgICogQHBhcmFtIGJ1ZmZlciAtIFRoZSBDQk9SLWVuY29kZWQgYnVmZmVyIHRvIGRlY29kZS5cbiAgICogQHJldHVybnMgVGhlIGRlY29kZWQgZGF0YS5cbiAgICovXG4gIGNib3JEZWNvZGUoYnVmZmVyOiBCdWZmZXIpOiB1bmtub3duIHtcbiAgICBjb25zdCByZXMgPSBkZWNvZGUoYnVmZmVyKTtcbiAgICByZXR1cm4gcmVzO1xuICB9XG5cbiAgLyoqXG4gICAqIEdlbmVyYXRlcyBhIEJ1ZmZlciBjb250YWluaW5nIHRoZSBkb21haW4gSUMgcmVxdWVzdCBzdHJpbmcuXG4gICAqXG4gICAqIEByZXR1cm5zIHtCdWZmZXJ9IEEgQnVmZmVyIG9iamVjdCBpbml0aWFsaXplZCB3aXRoIHRoZSBzdHJpbmcgJ1xceDBBaWMtcmVxdWVzdCcuXG4gICAqL1xuICBnZXREb21haW5JQ1JlcXVlc3QoKTogQnVmZmVyIHtcbiAgICByZXR1cm4gQnVmZmVyLmZyb20oJ1xceDBBaWMtcmVxdWVzdCcpO1xuICB9XG5cbiAgLyoqXG4gICAqIENvbWJpbmVzIHRoZSBkb21haW4gSUMgcmVxdWVzdCBidWZmZXIgd2l0aCB0aGUgcHJvdmlkZWQgbWVzc2FnZSBJRCBidWZmZXIgdG8gY3JlYXRlIHNpZ25hdHVyZSBkYXRhLlxuICAgKlxuICAgKiBAcGFyYW0ge0J1ZmZlcn0gbWVzc2FnZUlkIC0gVGhlIGJ1ZmZlciBjb250YWluaW5nIHRoZSBtZXNzYWdlIElELlxuICAgKiBAcmV0dXJucyB7QnVmZmVyfSAtIFRoZSBjb25jYXRlbmF0ZWQgYnVmZmVyIGNvbnRhaW5pbmcgdGhlIGRvbWFpbiBJQyByZXF1ZXN0IGFuZCB0aGUgbWVzc2FnZSBJRC5cbiAgICovXG4gIG1ha2VTaWduYXR1cmVEYXRhKG1lc3NhZ2VJZDogQnVmZmVyKTogQnVmZmVyIHtcbiAgICByZXR1cm4gQnVmZmVyLmNvbmNhdChbdGhpcy5nZXREb21haW5JQ1JlcXVlc3QoKSwgbWVzc2FnZUlkXSk7XG4gIH1cblxuICAvKipcbiAgICogR2VuZXJhdGVzIGEgcmVhZCBzdGF0ZSBvYmplY3QgZnJvbSBhbiBIVFRQIGNhbmlzdGVyIHVwZGF0ZS5cbiAgICpcbiAgICogQHBhcmFtIHtIdHRwQ2FuaXN0ZXJVcGRhdGV9IHVwZGF0ZSAtIFRoZSBIVFRQIGNhbmlzdGVyIHVwZGF0ZSBvYmplY3QuXG4gICAqIEByZXR1cm5zIHtSZWFkU3RhdGV9IFRoZSByZWFkIHN0YXRlIG9iamVjdCBjb250YWluaW5nIHRoZSBzZW5kZXIsIHBhdGhzLCBhbmQgaW5ncmVzcyBleHBpcnkuXG4gICAqL1xuICBtYWtlUmVhZFN0YXRlRnJvbVVwZGF0ZSh1cGRhdGU6IEh0dHBDYW5pc3RlclVwZGF0ZSk6IFJlYWRTdGF0ZSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHNlbmRlcjogdXBkYXRlLnNlbmRlcixcbiAgICAgIHBhdGhzOiBbW0J1ZmZlci5mcm9tKFJFUVVFU1RfU1RBVFVTKSwgdGhpcy5nZW5lcmF0ZUh0dHBDYW5pc3RlclVwZGF0ZUlkKHVwZGF0ZSldXSxcbiAgICAgIGluZ3Jlc3NfZXhwaXJ5OiB1cGRhdGUuaW5ncmVzc19leHBpcnksXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZW5lcmF0ZXMgYSByZXByZXNlbnRhdGlvbi1pbmRlcGVuZGVudCBoYXNoIGZvciBhbiBIVFRQIHJlYWQgc3RhdGUgb2JqZWN0LlxuICAgKlxuICAgKiBAcGFyYW0ge1JlYWRTdGF0ZX0gcmVhZFN0YXRlIC0gVGhlIEhUVFAgcmVhZCBzdGF0ZSBvYmplY3QuXG4gICAqIEByZXR1cm5zIHtCdWZmZXJ9IC0gVGhlIGhhc2ggb2YgdGhlIHJlYWQgc3RhdGUgb2JqZWN0LlxuICAgKi9cbiAgSHR0cFJlYWRTdGF0ZVJlcHJlc2VudGF0aW9uSW5kZXBlbmRlbnRIYXNoKHJlYWRTdGF0ZTogUmVhZFN0YXRlKTogQnVmZmVyIHtcbiAgICByZXR1cm4gdGhpcy5oYXNoT2ZNYXAoe1xuICAgICAgcmVxdWVzdF90eXBlOiBSZXF1ZXN0VHlwZS5SRUFEX1NUQVRFLFxuICAgICAgaW5ncmVzc19leHBpcnk6IHJlYWRTdGF0ZS5pbmdyZXNzX2V4cGlyeSxcbiAgICAgIHBhdGhzOiByZWFkU3RhdGUucGF0aHMsXG4gICAgICBzZW5kZXI6IHJlYWRTdGF0ZS5zZW5kZXIsXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogRXh0cmFjdHMgdGhlIHJlY2lwaWVudCBpbmZvcm1hdGlvbiBmcm9tIHRoZSBwcm92aWRlZCBJQ1AgdHJhbnNhY3Rpb24gZGF0YS5cbiAgICpcbiAgICogQHBhcmFtIHtJY3BUcmFuc2FjdGlvbkRhdGF9IGljcFRyYW5zYWN0aW9uRGF0YSAtIFRoZSBJQ1AgdHJhbnNhY3Rpb24gZGF0YSBjb250YWluaW5nIHRoZSByZWNlaXZlcidzIGFkZHJlc3MgYW5kIGFtb3VudC5cbiAgICogQHJldHVybnMge1JlY2lwaWVudFtdfSBBbiBhcnJheSBjb250YWluaW5nIGEgc2luZ2xlIHJlY2lwaWVudCBvYmplY3Qgd2l0aCB0aGUgcmVjZWl2ZXIncyBhZGRyZXNzIGFuZCBhbW91bnQuXG4gICAqL1xuICBnZXRSZWNpcGllbnRzKGljcFRyYW5zYWN0aW9uRGF0YTogSWNwVHJhbnNhY3Rpb25EYXRhKTogUmVjaXBpZW50IHtcbiAgICByZXR1cm4ge1xuICAgICAgYWRkcmVzczogaWNwVHJhbnNhY3Rpb25EYXRhLnJlY2VpdmVyQWRkcmVzcyxcbiAgICAgIGFtb3VudDogaWNwVHJhbnNhY3Rpb25EYXRhLmFtb3VudCxcbiAgICB9O1xuICB9XG5cbiAgZ2V0VHJhbnNhY3Rpb25TaWduYXR1cmUoc2lnbmF0dXJlTWFwOiBNYXA8c3RyaW5nLCBTaWduYXR1cmVzPiwgdXBkYXRlOiBIdHRwQ2FuaXN0ZXJVcGRhdGUpOiBTaWduYXR1cmVzIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gc2lnbmF0dXJlTWFwLmdldCh0aGlzLmJsb2JUb0hleCh0aGlzLm1ha2VTaWduYXR1cmVEYXRhKHRoaXMuZ2VuZXJhdGVIdHRwQ2FuaXN0ZXJVcGRhdGVJZCh1cGRhdGUpKSkpO1xuICB9XG5cbiAgZ2V0UmVhZFN0YXRlU2lnbmF0dXJlKHNpZ25hdHVyZU1hcDogTWFwPHN0cmluZywgU2lnbmF0dXJlcz4sIHJlYWRTdGF0ZTogUmVhZFN0YXRlKTogU2lnbmF0dXJlcyB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHNpZ25hdHVyZU1hcC5nZXQoXG4gICAgICB0aGlzLmJsb2JUb0hleCh0aGlzLm1ha2VTaWduYXR1cmVEYXRhKHRoaXMuSHR0cFJlYWRTdGF0ZVJlcHJlc2VudGF0aW9uSW5kZXBlbmRlbnRIYXNoKHJlYWRTdGF0ZSkpKVxuICAgICk7XG4gIH1cblxuICBnZXRNZXRhRGF0YShtZW1vOiBudW1iZXIgfCBCaWdJbnQpOiB7IG1ldGFEYXRhOiBJY3BNZXRhZGF0YTsgaW5ncmVzc0VuZFRpbWU6IG51bWJlciB8IEJpZ0ludCB9IHtcbiAgICBjb25zdCBjdXJyZW50VGltZSA9IERhdGUubm93KCkgKiAxMDAwMDAwO1xuICAgIGNvbnN0IGluZ3Jlc3NTdGFydFRpbWUgPSBjdXJyZW50VGltZTtcbiAgICBjb25zdCBpbmdyZXNzRW5kVGltZSA9IGluZ3Jlc3NTdGFydFRpbWUgKyA1ICogNjAgKiAxMDAwMDAwMDAwOyAvLyA1IG1pbnMgaW4gbmFub3NlY29uZHNcbiAgICBjb25zdCBtZXRhRGF0YTogSWNwTWV0YWRhdGEgPSB7XG4gICAgICBjcmVhdGVkX2F0X3RpbWU6IGN1cnJlbnRUaW1lLFxuICAgICAgbWVtbzogbWVtbyxcbiAgICAgIGluZ3Jlc3Nfc3RhcnQ6IGluZ3Jlc3NTdGFydFRpbWUsXG4gICAgICBpbmdyZXNzX2VuZDogaW5ncmVzc0VuZFRpbWUsXG4gICAgfTtcbiAgICByZXR1cm4geyBtZXRhRGF0YSwgaW5ncmVzc0VuZFRpbWUgfTtcbiAgfVxuXG4gIGNvbnZlcnRTZW5kZXJCbG9iVG9QcmluY2lwYWwoc2VuZGVyQmxvYjogVWludDhBcnJheSk6IFVpbnQ4QXJyYXkge1xuICAgIGNvbnN0IE1BWF9MRU5HVEhfSU5fQllURVMgPSAyOTtcbiAgICBpZiAoc2VuZGVyQmxvYi5sZW5ndGggPiBNQVhfTEVOR1RIX0lOX0JZVEVTKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0J5dGVzIHRvbyBsb25nIGZvciBhIHZhbGlkIFByaW5jaXBhbCcpO1xuICAgIH1cbiAgICBjb25zdCBwcmluY2lwYWxCeXRlcyA9IG5ldyBVaW50OEFycmF5KE1BWF9MRU5HVEhfSU5fQllURVMpO1xuICAgIHByaW5jaXBhbEJ5dGVzLnNldChzZW5kZXJCbG9iLnNsaWNlKDAsIHNlbmRlckJsb2IubGVuZ3RoKSk7XG4gICAgcmV0dXJuIHByaW5jaXBhbEJ5dGVzO1xuICB9XG5cbiAgYXN5bmMgZnJvbUFyZ3MoYXJnOiBVaW50OEFycmF5KTogUHJvbWlzZTxTZW5kQXJncz4ge1xuICAgIGNvbnN0IHJvb3QgPSBwcm90b2J1Zi5wYXJzZShwcm90b0RlZmluaXRpb24pLnJvb3Q7XG4gICAgY29uc3QgU2VuZFJlcXVlc3RNZXNzYWdlID0gcm9vdC5sb29rdXBUeXBlKCdTZW5kUmVxdWVzdCcpO1xuICAgIGNvbnN0IGFyZ3MgPSBTZW5kUmVxdWVzdE1lc3NhZ2UuZGVjb2RlKGFyZykgYXMgdW5rbm93biBhcyBTZW5kQXJncztcbiAgICBjb25zdCB0cmFuc2Zvcm1lZEFyZ3M6IFNlbmRBcmdzID0ge1xuICAgICAgbWVtbzogeyBtZW1vOiBCaWdJbnQoYXJncy5tZW1vLm1lbW8udG9TdHJpbmcoKSkgfSxcbiAgICAgIHBheW1lbnQ6IHsgcmVjZWl2ZXJHZXRzOiB7IGU4czogYXJncy5wYXltZW50LnJlY2VpdmVyR2V0cy5lOHMgfSB9LFxuICAgICAgbWF4RmVlOiB7IGU4czogYXJncy5tYXhGZWUuZThzIH0sXG4gICAgICB0bzogeyBoYXNoOiBCdWZmZXIuZnJvbShhcmdzLnRvLmhhc2gpIH0sXG4gICAgICBjcmVhdGVkQXRUaW1lOiB7IHRpbWVzdGFtcE5hbm9zOiBCaWdOdW1iZXIoYXJncy5jcmVhdGVkQXRUaW1lLnRpbWVzdGFtcE5hbm9zLnRvU3RyaW5nKCkpLnRvTnVtYmVyKCkgfSxcbiAgICB9O1xuICAgIHJldHVybiB0cmFuc2Zvcm1lZEFyZ3M7XG4gIH1cblxuICBhc3luYyB0b0FyZyhhcmdzOiBTZW5kQXJncyk6IFByb21pc2U8VWludDhBcnJheT4ge1xuICAgIGNvbnN0IHJvb3QgPSBwcm90b2J1Zi5wYXJzZShwcm90b0RlZmluaXRpb24pLnJvb3Q7XG4gICAgY29uc3QgU2VuZFJlcXVlc3RNZXNzYWdlID0gcm9vdC5sb29rdXBUeXBlKCdTZW5kUmVxdWVzdCcpO1xuICAgIGNvbnN0IGVyck1zZyA9IFNlbmRSZXF1ZXN0TWVzc2FnZS52ZXJpZnkoYXJncyk7XG4gICAgaWYgKGVyck1zZykgdGhyb3cgbmV3IEVycm9yKGVyck1zZyk7XG4gICAgY29uc3QgbWVzc2FnZSA9IFNlbmRSZXF1ZXN0TWVzc2FnZS5jcmVhdGUoYXJncyk7XG4gICAgcmV0dXJuIFNlbmRSZXF1ZXN0TWVzc2FnZS5lbmNvZGUobWVzc2FnZSkuZmluaXNoKCk7XG4gIH1cblxuICBnZXRBY2NvdW50SWRQcmVmaXgoKTogQnVmZmVyPEFycmF5QnVmZmVyPiB7XG4gICAgcmV0dXJuIEJ1ZmZlci5mcm9tKFsweDBhLCAuLi5CdWZmZXIuZnJvbSgnYWNjb3VudC1pZCcpXSk7XG4gIH1cblxuICAvKiogQGluaGVyaXRkb2MgKi9cbiAgaXNWYWxpZEJsb2NrSWQoaGFzaDogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgLy8gSUNQIGJsb2NrIGhhc2hlcyBhcmUgNjQtY2hhcmFjdGVyIGhleGFkZWNpbWFsIHN0cmluZ3NcbiAgICByZXR1cm4gdGhpcy5pc1ZhbGlkSGFzaChoYXNoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHdoZXRoZXIgb3Igbm90IHRoZSBzdHJpbmcgaXMgYSB2YWxpZCBJQ1AgaGFzaFxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gaGFzaCAtIHN0cmluZyB0byB2YWxpZGF0ZVxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAgICovXG4gIGlzVmFsaWRIYXNoKGhhc2g6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0eXBlb2YgaGFzaCA9PT0gJ3N0cmluZycgJiYgL15bMC05YS1mQS1GXXs2NH0kLy50ZXN0KGhhc2gpO1xuICB9XG5cbiAgLyoqIEBpbmhlcml0ZG9jICovXG4gIGlzVmFsaWRUcmFuc2FjdGlvbklkKHR4SWQ6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmlzVmFsaWRIYXNoKHR4SWQpO1xuICB9XG5cbiAgZ2V0U2lnbmF0dXJlcyhwYXlsb2Fkc0RhdGE6IFBheWxvYWRzRGF0YSwgc2VuZGVyUHVibGljS2V5OiBzdHJpbmcsIHNlbmRlclByaXZhdGVLZXk6IHN0cmluZyk6IFNpZ25hdHVyZXNbXSB7XG4gICAgcmV0dXJuIHBheWxvYWRzRGF0YS5wYXlsb2Fkcy5tYXAoKHBheWxvYWQpID0+ICh7XG4gICAgICBzaWduaW5nX3BheWxvYWQ6IHBheWxvYWQsXG4gICAgICBzaWduYXR1cmVfdHlwZTogcGF5bG9hZC5zaWduYXR1cmVfdHlwZSxcbiAgICAgIHB1YmxpY19rZXk6IHtcbiAgICAgICAgaGV4X2J5dGVzOiBzZW5kZXJQdWJsaWNLZXksXG4gICAgICAgIGN1cnZlX3R5cGU6IEN1cnZlVHlwZS5TRUNQMjU2SzEsXG4gICAgICB9LFxuICAgICAgaGV4X2J5dGVzOiB0aGlzLnNpZ25QYXlsb2FkKHNlbmRlclByaXZhdGVLZXksIHBheWxvYWQuaGV4X2J5dGVzKSxcbiAgICB9KSk7XG4gIH1cblxuICBzaWduUGF5bG9hZCA9IChwcml2YXRlS2V5OiBzdHJpbmcsIHBheWxvYWRIZXg6IHN0cmluZyk6IHN0cmluZyA9PiB7XG4gICAgY29uc3QgcHJpdmF0ZUtleUJ5dGVzID0gQnVmZmVyLmZyb20ocHJpdmF0ZUtleSwgJ2hleCcpO1xuICAgIGNvbnN0IHBheWxvYWRIYXNoID0gY3J5cHRvLmNyZWF0ZUhhc2goJ3NoYTI1NicpLnVwZGF0ZShCdWZmZXIuZnJvbShwYXlsb2FkSGV4LCAnaGV4JykpLmRpZ2VzdCgnaGV4Jyk7XG4gICAgY29uc3Qgc2lnbmF0dXJlID0gc2VjcDI1NmsxLnNpZ24ocGF5bG9hZEhhc2gsIHByaXZhdGVLZXlCeXRlcyk7XG4gICAgY29uc3QgciA9IEJ1ZmZlci5mcm9tKHNpZ25hdHVyZS5yLnRvU3RyaW5nKDE2KS5wYWRTdGFydCg2NCwgJzAnKSwgJ2hleCcpO1xuICAgIGNvbnN0IHMgPSBCdWZmZXIuZnJvbShzaWduYXR1cmUucy50b1N0cmluZygxNikucGFkU3RhcnQoNjQsICcwJyksICdoZXgnKTtcbiAgICByZXR1cm4gQnVmZmVyLmNvbmNhdChbciwgc10pLnRvU3RyaW5nKCdoZXgnKTtcbiAgfTtcbn1cblxuY29uc3QgdXRpbHMgPSBuZXcgVXRpbHMoKTtcbmV4cG9ydCBkZWZhdWx0IHV0aWxzO1xuIl19
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@bitgo/sdk-coin-icp",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.9.0",
|
|
4
4
|
"description": "BitGo SDK coin library for Internet Computer",
|
|
5
5
|
"main": "./dist/src/index.js",
|
|
6
6
|
"types": "./dist/src/index.d.ts",
|
|
@@ -40,9 +40,9 @@
|
|
|
40
40
|
]
|
|
41
41
|
},
|
|
42
42
|
"dependencies": {
|
|
43
|
-
"@bitgo/sdk-core": "^31.1
|
|
43
|
+
"@bitgo/sdk-core": "^31.2.1",
|
|
44
44
|
"@bitgo/secp256k1": "^1.3.3",
|
|
45
|
-
"@bitgo/statics": "^51.
|
|
45
|
+
"@bitgo/statics": "^51.5.0",
|
|
46
46
|
"@dfinity/agent": "^2.2.0",
|
|
47
47
|
"@dfinity/candid": "^2.2.0",
|
|
48
48
|
"@dfinity/principal": "^2.2.0",
|
|
@@ -54,8 +54,8 @@
|
|
|
54
54
|
"protobufjs": "^7.2.5"
|
|
55
55
|
},
|
|
56
56
|
"devDependencies": {
|
|
57
|
-
"@bitgo/sdk-api": "^1.61.
|
|
58
|
-
"@bitgo/sdk-test": "^8.0.
|
|
57
|
+
"@bitgo/sdk-api": "^1.61.2",
|
|
58
|
+
"@bitgo/sdk-test": "^8.0.77"
|
|
59
59
|
},
|
|
60
|
-
"gitHead": "
|
|
60
|
+
"gitHead": "a580bc29181b873bf997d41303614023a686600d"
|
|
61
61
|
}
|