@bitgo-beta/sdk-coin-vet 1.0.1-beta.580 → 1.0.1-beta.582
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/lib/constants.d.ts +3 -0
- package/dist/src/lib/constants.d.ts.map +1 -1
- package/dist/src/lib/constants.js +5 -2
- package/dist/src/lib/iface.d.ts +1 -0
- package/dist/src/lib/iface.d.ts.map +1 -1
- package/dist/src/lib/iface.js +1 -1
- package/dist/src/lib/index.d.ts +2 -0
- package/dist/src/lib/index.d.ts.map +1 -1
- package/dist/src/lib/index.js +6 -2
- package/dist/src/lib/transaction/validatorRegistrationTransaction.d.ts +29 -0
- package/dist/src/lib/transaction/validatorRegistrationTransaction.d.ts.map +1 -0
- package/dist/src/lib/transaction/validatorRegistrationTransaction.js +162 -0
- package/dist/src/lib/transactionBuilder/validatorRegistrationBuilder.d.ts +72 -0
- package/dist/src/lib/transactionBuilder/validatorRegistrationBuilder.d.ts.map +1 -0
- package/dist/src/lib/transactionBuilder/validatorRegistrationBuilder.js +133 -0
- package/dist/src/lib/transactionBuilderFactory.d.ts +3 -0
- package/dist/src/lib/transactionBuilderFactory.d.ts.map +1 -1
- package/dist/src/lib/transactionBuilderFactory.js +10 -1
- package/dist/src/lib/utils.d.ts +23 -0
- package/dist/src/lib/utils.d.ts.map +1 -1
- package/dist/src/lib/utils.js +47 -1
- package/dist/test/resources/vet.d.ts +8 -2
- package/dist/test/resources/vet.d.ts.map +1 -1
- package/dist/test/resources/vet.js +11 -5
- package/dist/test/transactionBuilder/validatorRegistrationTxnBuilder.d.ts +2 -0
- package/dist/test/transactionBuilder/validatorRegistrationTxnBuilder.d.ts.map +1 -0
- package/dist/test/transactionBuilder/validatorRegistrationTxnBuilder.js +195 -0
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +10 -10
|
@@ -0,0 +1,133 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.ValidatorRegistrationBuilder = void 0;
|
|
7
|
+
const assert_1 = __importDefault(require("assert"));
|
|
8
|
+
const sdk_core_1 = require("@bitgo-beta/sdk-core");
|
|
9
|
+
const transactionBuilder_1 = require("./transactionBuilder");
|
|
10
|
+
const validatorRegistrationTransaction_1 = require("../transaction/validatorRegistrationTransaction");
|
|
11
|
+
const utils_1 = __importDefault(require("../utils"));
|
|
12
|
+
class ValidatorRegistrationBuilder extends transactionBuilder_1.TransactionBuilder {
|
|
13
|
+
/**
|
|
14
|
+
* Creates a new add validation Clause txn instance.
|
|
15
|
+
*
|
|
16
|
+
* @param {Readonly<CoinConfig>} _coinConfig - The coin configuration object
|
|
17
|
+
*/
|
|
18
|
+
constructor(_coinConfig) {
|
|
19
|
+
super(_coinConfig);
|
|
20
|
+
this._transaction = new validatorRegistrationTransaction_1.ValidatorRegistrationTransaction(_coinConfig);
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Initializes the builder with an existing validation registration txn.
|
|
24
|
+
*
|
|
25
|
+
* @param {ValidatorRegistrationTransaction} tx - The transaction to initialize the builder with
|
|
26
|
+
*/
|
|
27
|
+
initBuilder(tx) {
|
|
28
|
+
this._transaction = tx;
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Gets the staking transaction instance.
|
|
32
|
+
*
|
|
33
|
+
* @returns {ValidatorRegistrationTransaction} The validator registration transaction
|
|
34
|
+
*/
|
|
35
|
+
get validatorRegistrationTransaction() {
|
|
36
|
+
return this._transaction;
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Gets the transaction type for validator registration.
|
|
40
|
+
*
|
|
41
|
+
* @returns {TransactionType} The transaction type
|
|
42
|
+
*/
|
|
43
|
+
get transactionType() {
|
|
44
|
+
return sdk_core_1.TransactionType.StakingLock;
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Validates the transaction clauses for validator registration transaction.
|
|
48
|
+
* @param {TransactionClause[]} clauses - The transaction clauses to validate.
|
|
49
|
+
* @returns {boolean} - Returns true if the clauses are valid, false otherwise.
|
|
50
|
+
*/
|
|
51
|
+
isValidTransactionClauses(clauses) {
|
|
52
|
+
try {
|
|
53
|
+
if (!clauses || !Array.isArray(clauses) || clauses.length === 0) {
|
|
54
|
+
return false;
|
|
55
|
+
}
|
|
56
|
+
const clause = clauses[0];
|
|
57
|
+
if (!clause.to || !utils_1.default.isValidAddress(clause.to)) {
|
|
58
|
+
return false;
|
|
59
|
+
}
|
|
60
|
+
return true;
|
|
61
|
+
}
|
|
62
|
+
catch (e) {
|
|
63
|
+
return false;
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* Sets the staking contract address for this validator registration tx.
|
|
68
|
+
* The address must be explicitly provided to ensure the correct contract is used.
|
|
69
|
+
*
|
|
70
|
+
* @param {string} address - The contract address (required)
|
|
71
|
+
* @returns {ValidatorRegistrationBuilder} This transaction builder
|
|
72
|
+
* @throws {Error} If no address is provided
|
|
73
|
+
*/
|
|
74
|
+
stakingContractAddress(address) {
|
|
75
|
+
if (!address) {
|
|
76
|
+
throw new Error('Staking contract address is required');
|
|
77
|
+
}
|
|
78
|
+
this.validateAddress({ address });
|
|
79
|
+
this.validatorRegistrationTransaction.stakingContractAddress = address;
|
|
80
|
+
return this;
|
|
81
|
+
}
|
|
82
|
+
/**
|
|
83
|
+
* Sets the staking period for this validator registration tx.
|
|
84
|
+
*
|
|
85
|
+
* @param {number} period - The staking period
|
|
86
|
+
* @returns {ValidatorRegistrationBuilder} This transaction builder
|
|
87
|
+
*/
|
|
88
|
+
stakingPeriod(period) {
|
|
89
|
+
this.validatorRegistrationTransaction.stakingPeriod = period;
|
|
90
|
+
return this;
|
|
91
|
+
}
|
|
92
|
+
/**
|
|
93
|
+
* Sets the validator address for this validator registration tx.
|
|
94
|
+
* @param {string} address - The validator address
|
|
95
|
+
* @returns {ValidatorRegistrationBuilder} This transaction builder
|
|
96
|
+
*/
|
|
97
|
+
validator(address) {
|
|
98
|
+
if (!address) {
|
|
99
|
+
throw new Error('Validator address is required');
|
|
100
|
+
}
|
|
101
|
+
this.validateAddress({ address });
|
|
102
|
+
this.validatorRegistrationTransaction.validator = address;
|
|
103
|
+
return this;
|
|
104
|
+
}
|
|
105
|
+
/**
|
|
106
|
+
* Sets the transaction data for this validator registration tx.
|
|
107
|
+
*
|
|
108
|
+
* @param {string} data - The transaction data
|
|
109
|
+
* @returns {ValidatorRegistrationBuilder} This transaction builder
|
|
110
|
+
*/
|
|
111
|
+
transactionData(data) {
|
|
112
|
+
this.validatorRegistrationTransaction.transactionData = data;
|
|
113
|
+
return this;
|
|
114
|
+
}
|
|
115
|
+
/** @inheritdoc */
|
|
116
|
+
validateTransaction(transaction) {
|
|
117
|
+
if (!transaction) {
|
|
118
|
+
throw new Error('transaction not defined');
|
|
119
|
+
}
|
|
120
|
+
(0, assert_1.default)(transaction.stakingContractAddress, 'Staking contract address is required');
|
|
121
|
+
(0, assert_1.default)(transaction.stakingPeriod, 'Staking period is required');
|
|
122
|
+
(0, assert_1.default)(transaction.validator, 'Validator address is required');
|
|
123
|
+
this.validateAddress({ address: transaction.stakingContractAddress });
|
|
124
|
+
}
|
|
125
|
+
/** @inheritdoc */
|
|
126
|
+
async buildImplementation() {
|
|
127
|
+
this.transaction.type = this.transactionType;
|
|
128
|
+
await this.validatorRegistrationTransaction.build();
|
|
129
|
+
return this.transaction;
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
exports.ValidatorRegistrationBuilder = ValidatorRegistrationBuilder;
|
|
133
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmFsaWRhdG9yUmVnaXN0cmF0aW9uQnVpbGRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9saWIvdHJhbnNhY3Rpb25CdWlsZGVyL3ZhbGlkYXRvclJlZ2lzdHJhdGlvbkJ1aWxkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUEsb0RBQTRCO0FBRTVCLG1EQUF1RDtBQUd2RCw2REFBMEQ7QUFFMUQsc0dBQW1HO0FBQ25HLHFEQUE2QjtBQUU3QixNQUFhLDRCQUE2QixTQUFRLHVDQUFrQjtJQUNsRTs7OztPQUlHO0lBQ0gsWUFBWSxXQUFpQztRQUMzQyxLQUFLLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDbkIsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLG1FQUFnQyxDQUFDLFdBQVcsQ0FBQyxDQUFDO0lBQ3hFLENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsV0FBVyxDQUFDLEVBQW9DO1FBQzlDLElBQUksQ0FBQyxZQUFZLEdBQUcsRUFBRSxDQUFDO0lBQ3pCLENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsSUFBSSxnQ0FBZ0M7UUFDbEMsT0FBTyxJQUFJLENBQUMsWUFBZ0QsQ0FBQztJQUMvRCxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILElBQWMsZUFBZTtRQUMzQixPQUFPLDBCQUFlLENBQUMsV0FBVyxDQUFDO0lBQ3JDLENBQUM7SUFFRDs7OztPQUlHO0lBQ08seUJBQXlCLENBQUMsT0FBNEI7UUFDOUQsSUFBSSxDQUFDO1lBQ0gsSUFBSSxDQUFDLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLElBQUksT0FBTyxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUUsQ0FBQztnQkFDaEUsT0FBTyxLQUFLLENBQUM7WUFDZixDQUFDO1lBRUQsTUFBTSxNQUFNLEdBQUcsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQzFCLElBQUksQ0FBQyxNQUFNLENBQUMsRUFBRSxJQUFJLENBQUMsZUFBSyxDQUFDLGNBQWMsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQztnQkFDbkQsT0FBTyxLQUFLLENBQUM7WUFDZixDQUFDO1lBRUQsT0FBTyxJQUFJLENBQUM7UUFDZCxDQUFDO1FBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztZQUNYLE9BQU8sS0FBSyxDQUFDO1FBQ2YsQ0FBQztJQUNILENBQUM7SUFFRDs7Ozs7OztPQU9HO0lBQ0gsc0JBQXNCLENBQUMsT0FBZTtRQUNwQyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDYixNQUFNLElBQUksS0FBSyxDQUFDLHNDQUFzQyxDQUFDLENBQUM7UUFDMUQsQ0FBQztRQUNELElBQUksQ0FBQyxlQUFlLENBQUMsRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFDO1FBQ2xDLElBQUksQ0FBQyxnQ0FBZ0MsQ0FBQyxzQkFBc0IsR0FBRyxPQUFPLENBQUM7UUFDdkUsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSCxhQUFhLENBQUMsTUFBYztRQUMxQixJQUFJLENBQUMsZ0NBQWdDLENBQUMsYUFBYSxHQUFHLE1BQU0sQ0FBQztRQUM3RCxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsU0FBUyxDQUFDLE9BQWU7UUFDdkIsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQ2IsTUFBTSxJQUFJLEtBQUssQ0FBQywrQkFBK0IsQ0FBQyxDQUFDO1FBQ25ELENBQUM7UUFDRCxJQUFJLENBQUMsZUFBZSxDQUFDLEVBQUUsT0FBTyxFQUFFLENBQUMsQ0FBQztRQUNsQyxJQUFJLENBQUMsZ0NBQWdDLENBQUMsU0FBUyxHQUFHLE9BQU8sQ0FBQztRQUMxRCxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNILGVBQWUsQ0FBQyxJQUFZO1FBQzFCLElBQUksQ0FBQyxnQ0FBZ0MsQ0FBQyxlQUFlLEdBQUcsSUFBSSxDQUFDO1FBQzdELE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVELGtCQUFrQjtJQUNsQixtQkFBbUIsQ0FBQyxXQUE4QztRQUNoRSxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7WUFDakIsTUFBTSxJQUFJLEtBQUssQ0FBQyx5QkFBeUIsQ0FBQyxDQUFDO1FBQzdDLENBQUM7UUFDRCxJQUFBLGdCQUFNLEVBQUMsV0FBVyxDQUFDLHNCQUFzQixFQUFFLHNDQUFzQyxDQUFDLENBQUM7UUFFbkYsSUFBQSxnQkFBTSxFQUFDLFdBQVcsQ0FBQyxhQUFhLEVBQUUsNEJBQTRCLENBQUMsQ0FBQztRQUNoRSxJQUFBLGdCQUFNLEVBQUMsV0FBVyxDQUFDLFNBQVMsRUFBRSwrQkFBK0IsQ0FBQyxDQUFDO1FBQy9ELElBQUksQ0FBQyxlQUFlLENBQUMsRUFBRSxPQUFPLEVBQUUsV0FBVyxDQUFDLHNCQUFzQixFQUFFLENBQUMsQ0FBQztJQUN4RSxDQUFDO0lBRUQsa0JBQWtCO0lBQ1IsS0FBSyxDQUFDLG1CQUFtQjtRQUNqQyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDO1FBQzdDLE1BQU0sSUFBSSxDQUFDLGdDQUFnQyxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ3BELE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQztJQUMxQixDQUFDO0NBQ0Y7QUFuSUQsb0VBbUlDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGFzc2VydCBmcm9tICdhc3NlcnQnO1xuaW1wb3J0IHsgQmFzZUNvaW4gYXMgQ29pbkNvbmZpZyB9IGZyb20gJ0BiaXRnby1iZXRhL3N0YXRpY3MnO1xuaW1wb3J0IHsgVHJhbnNhY3Rpb25UeXBlIH0gZnJvbSAnQGJpdGdvLWJldGEvc2RrLWNvcmUnO1xuaW1wb3J0IHsgVHJhbnNhY3Rpb25DbGF1c2UgfSBmcm9tICdAdmVjaGFpbi9zZGstY29yZSc7XG5cbmltcG9ydCB7IFRyYW5zYWN0aW9uQnVpbGRlciB9IGZyb20gJy4vdHJhbnNhY3Rpb25CdWlsZGVyJztcbmltcG9ydCB7IFRyYW5zYWN0aW9uIH0gZnJvbSAnLi4vdHJhbnNhY3Rpb24vdHJhbnNhY3Rpb24nO1xuaW1wb3J0IHsgVmFsaWRhdG9yUmVnaXN0cmF0aW9uVHJhbnNhY3Rpb24gfSBmcm9tICcuLi90cmFuc2FjdGlvbi92YWxpZGF0b3JSZWdpc3RyYXRpb25UcmFuc2FjdGlvbic7XG5pbXBvcnQgdXRpbHMgZnJvbSAnLi4vdXRpbHMnO1xuXG5leHBvcnQgY2xhc3MgVmFsaWRhdG9yUmVnaXN0cmF0aW9uQnVpbGRlciBleHRlbmRzIFRyYW5zYWN0aW9uQnVpbGRlciB7XG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgbmV3IGFkZCB2YWxpZGF0aW9uIENsYXVzZSB0eG4gaW5zdGFuY2UuXG4gICAqXG4gICAqIEBwYXJhbSB7UmVhZG9ubHk8Q29pbkNvbmZpZz59IF9jb2luQ29uZmlnIC0gVGhlIGNvaW4gY29uZmlndXJhdGlvbiBvYmplY3RcbiAgICovXG4gIGNvbnN0cnVjdG9yKF9jb2luQ29uZmlnOiBSZWFkb25seTxDb2luQ29uZmlnPikge1xuICAgIHN1cGVyKF9jb2luQ29uZmlnKTtcbiAgICB0aGlzLl90cmFuc2FjdGlvbiA9IG5ldyBWYWxpZGF0b3JSZWdpc3RyYXRpb25UcmFuc2FjdGlvbihfY29pbkNvbmZpZyk7XG4gIH1cblxuICAvKipcbiAgICogSW5pdGlhbGl6ZXMgdGhlIGJ1aWxkZXIgd2l0aCBhbiBleGlzdGluZyB2YWxpZGF0aW9uIHJlZ2lzdHJhdGlvbiB0eG4uXG4gICAqXG4gICAqIEBwYXJhbSB7VmFsaWRhdG9yUmVnaXN0cmF0aW9uVHJhbnNhY3Rpb259IHR4IC0gVGhlIHRyYW5zYWN0aW9uIHRvIGluaXRpYWxpemUgdGhlIGJ1aWxkZXIgd2l0aFxuICAgKi9cbiAgaW5pdEJ1aWxkZXIodHg6IFZhbGlkYXRvclJlZ2lzdHJhdGlvblRyYW5zYWN0aW9uKTogdm9pZCB7XG4gICAgdGhpcy5fdHJhbnNhY3Rpb24gPSB0eDtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIHRoZSBzdGFraW5nIHRyYW5zYWN0aW9uIGluc3RhbmNlLlxuICAgKlxuICAgKiBAcmV0dXJucyB7VmFsaWRhdG9yUmVnaXN0cmF0aW9uVHJhbnNhY3Rpb259IFRoZSB2YWxpZGF0b3IgcmVnaXN0cmF0aW9uIHRyYW5zYWN0aW9uXG4gICAqL1xuICBnZXQgdmFsaWRhdG9yUmVnaXN0cmF0aW9uVHJhbnNhY3Rpb24oKTogVmFsaWRhdG9yUmVnaXN0cmF0aW9uVHJhbnNhY3Rpb24ge1xuICAgIHJldHVybiB0aGlzLl90cmFuc2FjdGlvbiBhcyBWYWxpZGF0b3JSZWdpc3RyYXRpb25UcmFuc2FjdGlvbjtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIHRoZSB0cmFuc2FjdGlvbiB0eXBlIGZvciB2YWxpZGF0b3IgcmVnaXN0cmF0aW9uLlxuICAgKlxuICAgKiBAcmV0dXJucyB7VHJhbnNhY3Rpb25UeXBlfSBUaGUgdHJhbnNhY3Rpb24gdHlwZVxuICAgKi9cbiAgcHJvdGVjdGVkIGdldCB0cmFuc2FjdGlvblR5cGUoKTogVHJhbnNhY3Rpb25UeXBlIHtcbiAgICByZXR1cm4gVHJhbnNhY3Rpb25UeXBlLlN0YWtpbmdMb2NrO1xuICB9XG5cbiAgLyoqXG4gICAqIFZhbGlkYXRlcyB0aGUgdHJhbnNhY3Rpb24gY2xhdXNlcyBmb3IgdmFsaWRhdG9yIHJlZ2lzdHJhdGlvbiB0cmFuc2FjdGlvbi5cbiAgICogQHBhcmFtIHtUcmFuc2FjdGlvbkNsYXVzZVtdfSBjbGF1c2VzIC0gVGhlIHRyYW5zYWN0aW9uIGNsYXVzZXMgdG8gdmFsaWRhdGUuXG4gICAqIEByZXR1cm5zIHtib29sZWFufSAtIFJldHVybnMgdHJ1ZSBpZiB0aGUgY2xhdXNlcyBhcmUgdmFsaWQsIGZhbHNlIG90aGVyd2lzZS5cbiAgICovXG4gIHByb3RlY3RlZCBpc1ZhbGlkVHJhbnNhY3Rpb25DbGF1c2VzKGNsYXVzZXM6IFRyYW5zYWN0aW9uQ2xhdXNlW10pOiBib29sZWFuIHtcbiAgICB0cnkge1xuICAgICAgaWYgKCFjbGF1c2VzIHx8ICFBcnJheS5pc0FycmF5KGNsYXVzZXMpIHx8IGNsYXVzZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgY2xhdXNlID0gY2xhdXNlc1swXTtcbiAgICAgIGlmICghY2xhdXNlLnRvIHx8ICF1dGlscy5pc1ZhbGlkQWRkcmVzcyhjbGF1c2UudG8pKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBTZXRzIHRoZSBzdGFraW5nIGNvbnRyYWN0IGFkZHJlc3MgZm9yIHRoaXMgdmFsaWRhdG9yIHJlZ2lzdHJhdGlvbiB0eC5cbiAgICogVGhlIGFkZHJlc3MgbXVzdCBiZSBleHBsaWNpdGx5IHByb3ZpZGVkIHRvIGVuc3VyZSB0aGUgY29ycmVjdCBjb250cmFjdCBpcyB1c2VkLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gYWRkcmVzcyAtIFRoZSBjb250cmFjdCBhZGRyZXNzIChyZXF1aXJlZClcbiAgICogQHJldHVybnMge1ZhbGlkYXRvclJlZ2lzdHJhdGlvbkJ1aWxkZXJ9IFRoaXMgdHJhbnNhY3Rpb24gYnVpbGRlclxuICAgKiBAdGhyb3dzIHtFcnJvcn0gSWYgbm8gYWRkcmVzcyBpcyBwcm92aWRlZFxuICAgKi9cbiAgc3Rha2luZ0NvbnRyYWN0QWRkcmVzcyhhZGRyZXNzOiBzdHJpbmcpOiB0aGlzIHtcbiAgICBpZiAoIWFkZHJlc3MpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignU3Rha2luZyBjb250cmFjdCBhZGRyZXNzIGlzIHJlcXVpcmVkJyk7XG4gICAgfVxuICAgIHRoaXMudmFsaWRhdGVBZGRyZXNzKHsgYWRkcmVzcyB9KTtcbiAgICB0aGlzLnZhbGlkYXRvclJlZ2lzdHJhdGlvblRyYW5zYWN0aW9uLnN0YWtpbmdDb250cmFjdEFkZHJlc3MgPSBhZGRyZXNzO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldHMgdGhlIHN0YWtpbmcgcGVyaW9kIGZvciB0aGlzIHZhbGlkYXRvciByZWdpc3RyYXRpb24gdHguXG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBwZXJpb2QgLSBUaGUgc3Rha2luZyBwZXJpb2RcbiAgICogQHJldHVybnMge1ZhbGlkYXRvclJlZ2lzdHJhdGlvbkJ1aWxkZXJ9IFRoaXMgdHJhbnNhY3Rpb24gYnVpbGRlclxuICAgKi9cbiAgc3Rha2luZ1BlcmlvZChwZXJpb2Q6IG51bWJlcik6IHRoaXMge1xuICAgIHRoaXMudmFsaWRhdG9yUmVnaXN0cmF0aW9uVHJhbnNhY3Rpb24uc3Rha2luZ1BlcmlvZCA9IHBlcmlvZDtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXRzIHRoZSB2YWxpZGF0b3IgYWRkcmVzcyBmb3IgdGhpcyB2YWxpZGF0b3IgcmVnaXN0cmF0aW9uIHR4LlxuICAgKiBAcGFyYW0ge3N0cmluZ30gYWRkcmVzcyAtIFRoZSB2YWxpZGF0b3IgYWRkcmVzc1xuICAgKiBAcmV0dXJucyB7VmFsaWRhdG9yUmVnaXN0cmF0aW9uQnVpbGRlcn0gVGhpcyB0cmFuc2FjdGlvbiBidWlsZGVyXG4gICAqL1xuICB2YWxpZGF0b3IoYWRkcmVzczogc3RyaW5nKTogdGhpcyB7XG4gICAgaWYgKCFhZGRyZXNzKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1ZhbGlkYXRvciBhZGRyZXNzIGlzIHJlcXVpcmVkJyk7XG4gICAgfVxuICAgIHRoaXMudmFsaWRhdGVBZGRyZXNzKHsgYWRkcmVzcyB9KTtcbiAgICB0aGlzLnZhbGlkYXRvclJlZ2lzdHJhdGlvblRyYW5zYWN0aW9uLnZhbGlkYXRvciA9IGFkZHJlc3M7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogU2V0cyB0aGUgdHJhbnNhY3Rpb24gZGF0YSBmb3IgdGhpcyB2YWxpZGF0b3IgcmVnaXN0cmF0aW9uIHR4LlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gZGF0YSAtIFRoZSB0cmFuc2FjdGlvbiBkYXRhXG4gICAqIEByZXR1cm5zIHtWYWxpZGF0b3JSZWdpc3RyYXRpb25CdWlsZGVyfSBUaGlzIHRyYW5zYWN0aW9uIGJ1aWxkZXJcbiAgICovXG4gIHRyYW5zYWN0aW9uRGF0YShkYXRhOiBzdHJpbmcpOiB0aGlzIHtcbiAgICB0aGlzLnZhbGlkYXRvclJlZ2lzdHJhdGlvblRyYW5zYWN0aW9uLnRyYW5zYWN0aW9uRGF0YSA9IGRhdGE7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKiogQGluaGVyaXRkb2MgKi9cbiAgdmFsaWRhdGVUcmFuc2FjdGlvbih0cmFuc2FjdGlvbj86IFZhbGlkYXRvclJlZ2lzdHJhdGlvblRyYW5zYWN0aW9uKTogdm9pZCB7XG4gICAgaWYgKCF0cmFuc2FjdGlvbikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCd0cmFuc2FjdGlvbiBub3QgZGVmaW5lZCcpO1xuICAgIH1cbiAgICBhc3NlcnQodHJhbnNhY3Rpb24uc3Rha2luZ0NvbnRyYWN0QWRkcmVzcywgJ1N0YWtpbmcgY29udHJhY3QgYWRkcmVzcyBpcyByZXF1aXJlZCcpO1xuXG4gICAgYXNzZXJ0KHRyYW5zYWN0aW9uLnN0YWtpbmdQZXJpb2QsICdTdGFraW5nIHBlcmlvZCBpcyByZXF1aXJlZCcpO1xuICAgIGFzc2VydCh0cmFuc2FjdGlvbi52YWxpZGF0b3IsICdWYWxpZGF0b3IgYWRkcmVzcyBpcyByZXF1aXJlZCcpO1xuICAgIHRoaXMudmFsaWRhdGVBZGRyZXNzKHsgYWRkcmVzczogdHJhbnNhY3Rpb24uc3Rha2luZ0NvbnRyYWN0QWRkcmVzcyB9KTtcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdGRvYyAqL1xuICBwcm90ZWN0ZWQgYXN5bmMgYnVpbGRJbXBsZW1lbnRhdGlvbigpOiBQcm9taXNlPFRyYW5zYWN0aW9uPiB7XG4gICAgdGhpcy50cmFuc2FjdGlvbi50eXBlID0gdGhpcy50cmFuc2FjdGlvblR5cGU7XG4gICAgYXdhaXQgdGhpcy52YWxpZGF0b3JSZWdpc3RyYXRpb25UcmFuc2FjdGlvbi5idWlsZCgpO1xuICAgIHJldHVybiB0aGlzLnRyYW5zYWN0aW9uO1xuICB9XG59XG4iXX0=
|
|
@@ -22,6 +22,8 @@ import { StakeClauseTransaction } from './transaction/stakeClauseTransaction';
|
|
|
22
22
|
import { StakeClauseTxnBuilder } from './transactionBuilder/stakeClauseTxnBuilder';
|
|
23
23
|
import { DelegateTxnBuilder } from './transactionBuilder/delegateTxnBuilder';
|
|
24
24
|
import { DelegateClauseTransaction } from './transaction/delegateClauseTransaction';
|
|
25
|
+
import { ValidatorRegistrationTransaction } from './transaction/validatorRegistrationTransaction';
|
|
26
|
+
import { ValidatorRegistrationBuilder } from './transactionBuilder/validatorRegistrationBuilder';
|
|
25
27
|
export declare class TransactionBuilderFactory extends BaseTransactionBuilderFactory {
|
|
26
28
|
constructor(_coinConfig: Readonly<CoinConfig>);
|
|
27
29
|
/** @inheritdoc */
|
|
@@ -33,6 +35,7 @@ export declare class TransactionBuilderFactory extends BaseTransactionBuilderFac
|
|
|
33
35
|
getTokenTransactionBuilder(tx?: Transaction): TokenTransactionBuilder;
|
|
34
36
|
getStakingBuilder(tx?: StakingTransaction): StakingBuilder;
|
|
35
37
|
getStakingDelegateBuilder(tx?: DelegateClauseTransaction): DelegateTxnBuilder;
|
|
38
|
+
getValidatorRegistrationBuilder(tx?: ValidatorRegistrationTransaction): ValidatorRegistrationBuilder;
|
|
36
39
|
getStakingActivateBuilder(tx?: StakeClauseTransaction): StakeClauseTxnBuilder;
|
|
37
40
|
/**
|
|
38
41
|
* Gets an nft transaction builder.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"transactionBuilderFactory.d.ts","sourceRoot":"","sources":["../../../src/lib/transactionBuilderFactory.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,IAAI,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAClE,OAAO,EAAE,6BAA6B,EAA2B,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAC/G,OAAO,EAAE,QAAQ,IAAI,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAC7D,OAAO,EAAE,kBAAkB,EAAE,MAAM,yCAAyC,CAAC;AAC7E,OAAO,EAAE,eAAe,EAAE,MAAM,sCAAsC,CAAC;AACvE,OAAO,EAAE,4BAA4B,EAAE,MAAM,mDAAmD,CAAC;AACjG,OAAO,EAAE,4BAA4B,EAAE,MAAM,mDAAmD,CAAC;AACjG,OAAO,EAAE,qBAAqB,EAAE,MAAM,4CAA4C,CAAC;AACnF,OAAO,EAAE,cAAc,EAAE,MAAM,qCAAqC,CAAC;AACrE,OAAO,EAAE,mBAAmB,EAAE,MAAM,0CAA0C,CAAC;AAC/E,OAAO,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AAExD,OAAO,EAAE,gCAAgC,EAAE,MAAM,gDAAgD,CAAC;AAClG,OAAO,EAAE,qBAAqB,EAAE,MAAM,qCAAqC,CAAC;AAC5E,OAAO,EAAE,yBAAyB,EAAE,MAAM,8BAA8B,CAAC;AACzE,OAAO,EAAE,kBAAkB,EAAE,MAAM,kCAAkC,CAAC;AACtE,OAAO,EAAE,uBAAuB,EAAE,MAAM,4BAA4B,CAAC;AACrE,OAAO,EAAE,uBAAuB,EAAE,MAAM,8CAA8C,CAAC;AAEvF,OAAO,EAAE,cAAc,EAAE,MAAM,qCAAqC,CAAC;AACrE,OAAO,EAAE,kBAAkB,EAAE,MAAM,kCAAkC,CAAC;AACtE,OAAO,EAAE,qBAAqB,EAAE,MAAM,4CAA4C,CAAC;AAEnF,OAAO,EAAE,sBAAsB,EAAE,MAAM,sCAAsC,CAAC;AAC9E,OAAO,EAAE,qBAAqB,EAAE,MAAM,4CAA4C,CAAC;AACnF,OAAO,EAAE,kBAAkB,EAAE,MAAM,yCAAyC,CAAC;AAC7E,OAAO,EAAE,yBAAyB,EAAE,MAAM,yCAAyC,CAAC;
|
|
1
|
+
{"version":3,"file":"transactionBuilderFactory.d.ts","sourceRoot":"","sources":["../../../src/lib/transactionBuilderFactory.ts"],"names":[],"mappings":"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"}
|
|
@@ -28,6 +28,8 @@ const stakeClauseTransaction_1 = require("./transaction/stakeClauseTransaction")
|
|
|
28
28
|
const stakeClauseTxnBuilder_1 = require("./transactionBuilder/stakeClauseTxnBuilder");
|
|
29
29
|
const delegateTxnBuilder_1 = require("./transactionBuilder/delegateTxnBuilder");
|
|
30
30
|
const delegateClauseTransaction_1 = require("./transaction/delegateClauseTransaction");
|
|
31
|
+
const validatorRegistrationTransaction_1 = require("./transaction/validatorRegistrationTransaction");
|
|
32
|
+
const validatorRegistrationBuilder_1 = require("./transactionBuilder/validatorRegistrationBuilder");
|
|
31
33
|
class TransactionBuilderFactory extends sdk_core_1.BaseTransactionBuilderFactory {
|
|
32
34
|
constructor(_coinConfig) {
|
|
33
35
|
super(_coinConfig);
|
|
@@ -82,6 +84,10 @@ class TransactionBuilderFactory extends sdk_core_1.BaseTransactionBuilderFactory
|
|
|
82
84
|
const claimRewardsTx = new claimRewards_1.ClaimRewardsTransaction(this._coinConfig);
|
|
83
85
|
claimRewardsTx.fromDeserializedSignedTransaction(signedTx);
|
|
84
86
|
return this.getClaimRewardsBuilder(claimRewardsTx);
|
|
87
|
+
case sdk_core_1.TransactionType.StakingLock:
|
|
88
|
+
const validatorRegistrationTx = new validatorRegistrationTransaction_1.ValidatorRegistrationTransaction(this._coinConfig);
|
|
89
|
+
validatorRegistrationTx.fromDeserializedSignedTransaction(signedTx);
|
|
90
|
+
return this.getValidatorRegistrationBuilder(validatorRegistrationTx);
|
|
85
91
|
default:
|
|
86
92
|
throw new sdk_core_1.InvalidTransactionError('Invalid transaction type');
|
|
87
93
|
}
|
|
@@ -109,6 +115,9 @@ class TransactionBuilderFactory extends sdk_core_1.BaseTransactionBuilderFactory
|
|
|
109
115
|
getStakingDelegateBuilder(tx) {
|
|
110
116
|
return this.initializeBuilder(tx, new delegateTxnBuilder_1.DelegateTxnBuilder(this._coinConfig));
|
|
111
117
|
}
|
|
118
|
+
getValidatorRegistrationBuilder(tx) {
|
|
119
|
+
return this.initializeBuilder(tx, new validatorRegistrationBuilder_1.ValidatorRegistrationBuilder(this._coinConfig));
|
|
120
|
+
}
|
|
112
121
|
getStakingActivateBuilder(tx) {
|
|
113
122
|
return this.initializeBuilder(tx, new stakeClauseTxnBuilder_1.StakeClauseTxnBuilder(this._coinConfig));
|
|
114
123
|
}
|
|
@@ -170,4 +179,4 @@ class TransactionBuilderFactory extends sdk_core_1.BaseTransactionBuilderFactory
|
|
|
170
179
|
}
|
|
171
180
|
}
|
|
172
181
|
exports.TransactionBuilderFactory = TransactionBuilderFactory;
|
|
173
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNhY3Rpb25CdWlsZGVyRmFjdG9yeS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9saWIvdHJhbnNhY3Rpb25CdWlsZGVyRmFjdG9yeS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7QUFDQSxtREFBK0c7QUFHL0csMEVBQXVFO0FBQ3ZFLG9HQUFpRztBQUNqRyxvR0FBaUc7QUFDakcsc0ZBQW1GO0FBQ25GLHdFQUFxRTtBQUNyRSxrRkFBK0U7QUFDL0UsMkRBQXdEO0FBQ3hELG9EQUE0QjtBQUM1QixxR0FBa0c7QUFDbEcsK0VBQTRFO0FBQzVFLGlFQUF5RTtBQUN6RSx5RUFBc0U7QUFDdEUsNkRBQXFFO0FBQ3JFLDBGQUF1RjtBQUN2RixxRUFBa0U7QUFDbEUsd0VBQXFFO0FBQ3JFLHlFQUFzRTtBQUN0RSxzRkFBbUY7QUFDbkYsaUVBQThEO0FBQzlELGlGQUE4RTtBQUM5RSxzRkFBbUY7QUFDbkYsZ0ZBQTZFO0FBQzdFLHVGQUFvRjtBQUVwRixNQUFhLHlCQUEwQixTQUFRLHdDQUE2QjtJQUMxRSxZQUFZLFdBQWlDO1FBQzNDLEtBQUssQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUNyQixDQUFDO0lBRUQsa0JBQWtCO0lBQ2xCLElBQUksQ0FBQyxXQUFtQjtRQUN0QixJQUFJLENBQUM7WUFDSCxNQUFNLFFBQVEsR0FBRyx5QkFBVyxDQUFDLHNCQUFzQixDQUFDLFdBQVcsQ0FBQyxDQUFDO1lBQ2pFLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQywrQkFBK0IsQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUM1RCxRQUFRLElBQUksRUFBRSxDQUFDO2dCQUNiLEtBQUssMEJBQWUsQ0FBQyxJQUFJO29CQUN2QixNQUFNLFVBQVUsR0FBRyxJQUFJLHlCQUFXLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO29CQUNyRCxVQUFVLENBQUMsaUNBQWlDLENBQUMsUUFBUSxDQUFDLENBQUM7b0JBQ3ZELE9BQU8sSUFBSSxD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QUMsU0FBUyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUNwRSxDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ0ssaUJBQWlCLENBQStCLEVBQTJCLEVBQUUsT0FBVTtRQUM3RixJQUFJLEVBQUUsRUFBRSxDQUFDO1lBQ1AsT0FBTyxDQUFDLFdBQVcsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUMxQixDQUFDO1FBQ0QsT0FBTyxPQUFPLENBQUM7SUFDakIsQ0FBQztDQUNGO0FBMUpELDhEQTBKQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFRyYW5zYWN0aW9uIGFzIFZldFRyYW5zYWN0aW9uIH0gZnJvbSAnQHZlY2hhaW4vc2RrLWNvcmUnO1xuaW1wb3J0IHsgQmFzZVRyYW5zYWN0aW9uQnVpbGRlckZhY3RvcnksIEludmFsaWRUcmFuc2FjdGlvbkVycm9yLCBUcmFuc2FjdGlvblR5cGUgfSBmcm9tICdAYml0Z28tYmV0YS9zZGstY29yZSc7XG5pbXBvcnQgeyBCYXNlQ29pbiBhcyBDb2luQ29uZmlnIH0gZnJvbSAnQGJpdGdvLWJldGEvc3RhdGljcyc7XG5pbXBvcnQgeyBUcmFuc2FjdGlvbkJ1aWxkZXIgfSBmcm9tICcuL3RyYW5zYWN0aW9uQnVpbGRlci90cmFuc2FjdGlvbkJ1aWxkZXInO1xuaW1wb3J0IHsgVHJhbnNmZXJCdWlsZGVyIH0gZnJvbSAnLi90cmFuc2FjdGlvbkJ1aWxkZXIvdHJhbnNmZXJCdWlsZGVyJztcbmltcG9ydCB7IEFkZHJlc3NJbml0aWFsaXphdGlvbkJ1aWxkZXIgfSBmcm9tICcuL3RyYW5zYWN0aW9uQnVpbGRlci9hZGRyZXNzSW5pdGlhbGl6YXRpb25CdWlsZGVyJztcbmltcG9ydCB7IEZsdXNoVG9rZW5UcmFuc2FjdGlvbkJ1aWxkZXIgfSBmcm9tICcuL3RyYW5zYWN0aW9uQnVpbGRlci9mbHVzaFRva2VuVHJhbnNhY3Rpb25CdWlsZGVyJztcbmltcG9ydCB7IEV4aXREZWxlZ2F0aW9uQnVpbGRlciB9IGZyb20gJy4vdHJhbnNhY3Rpb25CdWlsZGVyL2V4aXREZWxlZ2F0aW9uQnVpbGRlcic7XG5pbXBvcnQgeyBCdXJuTmZ0QnVpbGRlciB9IGZyb20gJy4vdHJhbnNhY3Rpb25CdWlsZGVyL2J1cm5OZnRCdWlsZGVyJztcbmltcG9ydCB7IENsYWltUmV3YXJkc0J1aWxkZXIgfSBmcm9tICcuL3RyYW5zYWN0aW9uQnVpbGRlci9jbGFpbVJld2FyZHNCdWlsZGVyJztcbmltcG9ydCB7IFRyYW5zYWN0aW9uIH0gZnJvbSAnLi90cmFuc2FjdGlvbi90cmFuc2FjdGlvbic7XG5pbXBvcnQgdXRpbHMgZnJvbSAnLi91dGlscyc7XG5pbXBvcnQgeyBBZGRyZXNzSW5pdGlhbGl6YXRpb25UcmFuc2FjdGlvbiB9IGZyb20gJy4vdHJhbnNhY3Rpb24vYWRkcmVzc0luaXRpYWxpemF0aW9uVHJhbnNhY3Rpb24nO1xuaW1wb3J0IHsgRmx1c2hUb2tlblRyYW5zYWN0aW9uIH0gZnJvbSAnLi90cmFuc2FjdGlvbi9mbHVzaFRva2VuVHJhbnNhY3Rpb24nO1xuaW1wb3J0IHsgRXhpdERlbGVnYXRpb25UcmFuc2FjdGlvbiB9IGZyb20gJy4vdHJhbnNhY3Rpb24vZXhpdERlbGVnYXRpb24nO1xuaW1wb3J0IHsgQnVybk5mdFRyYW5zYWN0aW9uIH0gZnJvbSAnLi90cmFuc2FjdGlvbi9idXJuTmZ0VHJhbnNhY3Rpb24nO1xuaW1wb3J0IHsgQ2xhaW1SZXdhcmRzVHJhbnNhY3Rpb24gfSBmcm9tICcuL3RyYW5zYWN0aW9uL2NsYWltUmV3YXJkcyc7XG5pbXBvcnQgeyBUb2tlblRyYW5zYWN0aW9uQnVpbGRlciB9IGZyb20gJy4vdHJhbnNhY3Rpb25CdWlsZGVyL3Rva2VuVHJhbnNhY3Rpb25CdWlsZGVyJztcbmltcG9ydCB7IFRva2VuVHJhbnNhY3Rpb24gfSBmcm9tICcuL3RyYW5zYWN0aW9uL3Rva2VuVHJhbnNhY3Rpb24nO1xuaW1wb3J0IHsgU3Rha2luZ0J1aWxkZXIgfSBmcm9tICcuL3RyYW5zYWN0aW9uQnVpbGRlci9zdGFraW5nQnVpbGRlcic7XG5pbXBvcnQgeyBTdGFraW5nVHJhbnNhY3Rpb24gfSBmcm9tICcuL3RyYW5zYWN0aW9uL3N0YWtpbmdUcmFuc2FjdGlvbic7XG5pbXBvcnQgeyBORlRUcmFuc2FjdGlvbkJ1aWxkZXIgfSBmcm9tICcuL3RyYW5zYWN0aW9uQnVpbGRlci9uZnRUcmFuc2FjdGlvbkJ1aWxkZXInO1xuaW1wb3J0IHsgTkZUVHJhbnNhY3Rpb24gfSBmcm9tICcuL3RyYW5zYWN0aW9uL25mdFRyYW5zYWN0aW9uJztcbmltcG9ydCB7IFN0YWtlQ2xhdXNlVHJhbnNhY3Rpb24gfSBmcm9tICcuL3RyYW5zYWN0aW9uL3N0YWtlQ2xhdXNlVHJhbnNhY3Rpb24nO1xuaW1wb3J0IHsgU3Rha2VDbGF1c2VUeG5CdWlsZGVyIH0gZnJvbSAnLi90cmFuc2FjdGlvbkJ1aWxkZXIvc3Rha2VDbGF1c2VUeG5CdWlsZGVyJztcbmltcG9ydCB7IERlbGVnYXRlVHhuQnVpbGRlciB9IGZyb20gJy4vdHJhbnNhY3Rpb25CdWlsZGVyL2RlbGVnYXRlVHhuQnVpbGRlcic7XG5pbXBvcnQgeyBEZWxlZ2F0ZUNsYXVzZVRyYW5zYWN0aW9uIH0gZnJvbSAnLi90cmFuc2FjdGlvbi9kZWxlZ2F0ZUNsYXVzZVRyYW5zYWN0aW9uJztcblxuZXhwb3J0IGNsYXNzIFRyYW5zYWN0aW9uQnVpbGRlckZhY3RvcnkgZXh0ZW5kcyBCYXNlVHJhbnNhY3Rpb25CdWlsZGVyRmFjdG9yeSB7XG4gIGNvbnN0cnVjdG9yKF9jb2luQ29uZmlnOiBSZWFkb25seTxDb2luQ29uZmlnPikge1xuICAgIHN1cGVyKF9jb2luQ29uZmlnKTtcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdGRvYyAqL1xuICBmcm9tKHNpZ25lZFJhd1R4OiBzdHJpbmcpOiBUcmFuc2FjdGlvbkJ1aWxkZXIge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBzaWduZWRUeCA9IFRyYW5zYWN0aW9uLmRlc2VyaWFsaXplVHJhbnNhY3Rpb24oc2lnbmVkUmF3VHgpO1xuICAgICAgY29uc3QgdHlwZSA9IHRoaXMuZ2V0VHJhbnNhY3Rpb25UeXBlRnJvbVNpZ25lZFR4bihzaWduZWRUeCk7XG4gICAgICBzd2l0Y2ggKHR5cGUpIHtcbiAgICAgICAgY2FzZSBUcmFuc2FjdGlvblR5cGUuU2VuZDpcbiAgICAgICAgICBjb25zdCB0cmFuc2ZlclR4ID0gbmV3IFRyYW5zYWN0aW9uKHRoaXMuX2NvaW5Db25maWcpO1xuICAgICAgICAgIHRyYW5zZmVyVHguZnJvbURlc2VyaWFsaXplZFNpZ25lZFRyYW5zYWN0aW9uKHNpZ25lZFR4KTtcbiAgICAgICAgICByZXR1cm4gdGhpcy5nZXRUcmFuc2ZlckJ1aWxkZXIodHJhbnNmZXJUeCk7XG4gICAgICAgIGNhc2UgVHJhbnNhY3Rpb25UeXBlLkFkZHJlc3NJbml0aWFsaXphdGlvbjpcbiAgICAgICAgICBjb25zdCBhZGRyZXNzSW5pdGlhbGl6YXRpb25UeCA9IG5ldyBBZGRyZXNzSW5pdGlhbGl6YXRpb25UcmFuc2FjdGlvbih0aGlzLl9jb2luQ29uZmlnKTtcbiAgICAgICAgICBhZGRyZXNzSW5pdGlhbGl6YXRpb25UeC5mcm9tRGVzZXJpYWxpemVkU2lnbmVkVHJhbnNhY3Rpb24oc2lnbmVkVHgpO1xuICAgICAgICAgIHJldHVybiB0aGlzLmdldEFkZHJlc3NJbml0aWFsaXphdGlvbkJ1aWxkZXIoYWRkcmVzc0luaXRpYWxpemF0aW9uVHgpO1xuICAgICAgICBjYXNlIFRyYW5zYWN0aW9uVHlwZS5GbHVzaFRva2VuczpcbiAgICAgICAgICBjb25zdCBmbHVzaFRva2VuVHggPSBuZXcgRmx1c2hUb2tlblRyYW5zYWN0aW9uKHRoaXMuX2NvaW5Db25maWcpO1xuICAgICAgICAgIGZsdXNoVG9rZW5UeC5mcm9tRGVzZXJpYWxpemVkU2lnbmVkVHJhbnNhY3Rpb24oc2lnbmVkVHgpO1xuICAgICAgICAgIHJldHVybiB0aGlzLmdldEZsdXNoVG9rZW5UcmFuc2FjdGlvbkJ1aWxkZXIoZmx1c2hUb2tlblR4KTtcbiAgICAgICAgY2FzZSBUcmFuc2FjdGlvblR5cGUuU2VuZFRva2VuOlxuICAgICAgICAgIGNvbnN0IHRva2VuVHJhbnNmZXJUeCA9IG5ldyBUb2tlblRyYW5zYWN0aW9uKHRoaXMuX2NvaW5Db25maWcpO1xuICAgICAgICAgIHRva2VuVHJhbnNmZXJUeC5mcm9tRGVzZXJpYWxpemVkU2lnbmVkVHJhbnNhY3Rpb24oc2lnbmVkVHgpO1xuICAgICAgICAgIHJldHVybiB0aGlzLmdldFRva2VuVHJhbnNhY3Rpb25CdWlsZGVyKHRva2VuVHJhbnNmZXJUeCk7XG4gICAgICAgIGNhc2UgVHJhbnNhY3Rpb25UeXBlLlNlbmRORlQ6XG4gICAgICAgICAgY29uc3QgbmZ0VHJhbnNmZXJUeCA9IG5ldyBORlRUcmFuc2FjdGlvbih0aGlzLl9jb2luQ29uZmlnKTtcbiAgICAgICAgICBuZnRUcmFuc2ZlclR4LmZyb21EZXNlcmlhbGl6ZWRTaWduZWRUcmFuc2FjdGlvbihzaWduZWRUeCk7XG4gICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0TkZUVHJhbnNhY3Rpb25CdWlsZGVyKG5mdFRyYW5zZmVyVHgpO1xuICAgICAgICBjYXNlIFRyYW5zYWN0aW9uVHlwZS5Db250cmFjdENhbGw6XG4gICAgICAgICAgY29uc3Qgc3Rha2luZ1R4ID0gbmV3IFN0YWtpbmdUcmFuc2FjdGlvbih0aGlzLl9jb2luQ29uZmlnKTtcbiAgICAgICAgICBzdGFraW5nVHguZnJvbURlc2VyaWFsaXplZFNpZ25lZFRyYW5zYWN0aW9uKHNpZ25lZFR4KTtcbiAgICAgICAgICByZXR1cm4gdGhpcy5nZXRTdGFraW5nQnVpbGRlcihzdGFraW5nVHgpO1xuICAgICAgICBjYXNlIFRyYW5zYWN0aW9uVHlwZS5TdGFraW5nQWN0aXZhdGU6XG4gICAgICAgICAgY29uc3Qgc3Rha2VDbGF1c2VUeCA9IG5ldyBTdGFrZUNsYXVzZVRyYW5zYWN0aW9uKHRoaXMuX2NvaW5Db25maWcpO1xuICAgICAgICAgIHN0YWtlQ2xhdXNlVHguZnJvbURlc2VyaWFsaXplZFNpZ25lZFRyYW5zYWN0aW9uKHNpZ25lZFR4KTtcbiAgICAgICAgICByZXR1cm4gdGhpcy5nZXRTdGFraW5nQWN0aXZhdGVCdWlsZGVyKHN0YWtlQ2xhdXNlVHgpO1xuICAgICAgICBjYXNlIFRyYW5zYWN0aW9uVHlwZS5TdGFraW5nRGVsZWdhdGU6XG4gICAgICAgICAgY29uc3QgZGVsZWdhdGVDbGF1c2VUeCA9IG5ldyBEZWxlZ2F0ZUNsYXVzZVRyYW5zYWN0aW9uKHRoaXMuX2NvaW5Db25maWcpO1xuICAgICAgICAgIGRlbGVnYXRlQ2xhdXNlVHguZnJvbURlc2VyaWFsaXplZFNpZ25lZFRyYW5zYWN0aW9uKHNpZ25lZFR4KTtcbiAgICAgICAgICByZXR1cm4gdGhpcy5nZXRTdGFraW5nRGVsZWdhdGVCdWlsZGVyKGRlbGVnYXRlQ2xhdXNlVHgpO1xuICAgICAgICBjYXNlIFRyYW5zYWN0aW9uVHlwZS5TdGFraW5nVW5sb2NrOlxuICAgICAgICAgIGNvbnN0IGV4aXREZWxlZ2F0aW9uVHggPSBuZXcgRXhpdERlbGVnYXRpb25UcmFuc2FjdGlvbih0aGlzLl9jb2luQ29uZmlnKTtcbiAgICAgICAgICBleGl0RGVsZWdhdGlvblR4LmZyb21EZXNlcmlhbGl6ZWRTaWduZWRUcmFuc2FjdGlvbihzaWduZWRUeCk7XG4gICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0RXhpdERlbGVnYXRpb25CdWlsZGVyKGV4aXREZWxlZ2F0aW9uVHgpO1xuICAgICAgICBjYXNlIFRyYW5zYWN0aW9uVHlwZS5TdGFraW5nV2l0aGRyYXc6XG4gICAgICAgICAgY29uc3QgYnVybk5mdFR4ID0gbmV3IEJ1cm5OZnRUcmFuc2FjdGlvbih0aGlzLl9jb2luQ29uZmlnKTtcbiAgICAgICAgICBidXJuTmZ0VHguZnJvbURlc2VyaWFsaXplZFNpZ25lZFRyYW5zYWN0aW9uKHNpZ25lZFR4KTtcbiAgICAgICAgICByZXR1cm4gdGhpcy5nZXRCdXJuTmZ0QnVpbGRlcihidXJuTmZ0VHgpO1xuICAgICAgICBjYXNlIFRyYW5zYWN0aW9uVHlwZS5TdGFraW5nQ2xhaW06XG4gICAgICAgICAgY29uc3QgY2xhaW1SZXdhcmRzVHggPSBuZXcgQ2xhaW1SZXdhcmRzVHJhbnNhY3Rpb24odGhpcy5fY29pbkNvbmZpZyk7XG4gICAgICAgICAgY2xhaW1SZXdhcmRzVHguZnJvbURlc2VyaWFsaXplZFNpZ25lZFRyYW5zYWN0aW9uKHNpZ25lZFR4KTtcbiAgICAgICAgICByZXR1cm4gdGhpcy5nZXRDbGFpbVJld2FyZHNCdWlsZGVyKGNsYWltUmV3YXJkc1R4KTtcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICB0aHJvdyBuZXcgSW52YWxpZFRyYW5zYWN0aW9uRXJyb3IoJ0ludmFsaWQgdHJhbnNhY3Rpb24gdHlwZScpO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHRocm93IGU7XG4gICAgfVxuICB9XG5cbiAgLyoqIEBpbmhlcml0ZG9jICovXG4gIGdldFRyYW5zZmVyQnVpbGRlcih0eD86IFRyYW5zYWN0aW9uKTogVHJhbnNmZXJCdWlsZGVyIHtcbiAgICByZXR1cm4gdGhpcy5pbml0aWFsaXplQnVpbGRlcih0eCwgbmV3IFRyYW5zZmVyQnVpbGRlcih0aGlzLl9jb2luQ29uZmlnKSk7XG4gIH1cblxuICBnZXRBZGRyZXNzSW5pdGlhbGl6YXRpb25CdWlsZGVyKHR4PzogQWRkcmVzc0luaXRpYWxpemF0aW9uVHJhbnNhY3Rpb24pOiBBZGRyZXNzSW5pdGlhbGl6YXRpb25CdWlsZGVyIHtcbiAgICByZXR1cm4gdGhpcy5pbml0aWFsaXplQnVpbGRlcih0eCwgbmV3IEFkZHJlc3NJbml0aWFsaXphdGlvbkJ1aWxkZXIodGhpcy5fY29pbkNvbmZpZykpO1xuICB9XG5cbiAgZ2V0Rmx1c2hUb2tlblRyYW5zYWN0aW9uQnVpbGRlcih0eD86IEZsdXNoVG9rZW5UcmFuc2FjdGlvbik6IEZsdXNoVG9rZW5UcmFuc2FjdGlvbkJ1aWxkZXIge1xuICAgIHJldHVybiB0aGlzLmluaXRpYWxpemVCdWlsZGVyKHR4LCBuZXcgRmx1c2hUb2tlblRyYW5zYWN0aW9uQnVpbGRlcih0aGlzLl9jb2luQ29uZmlnKSk7XG4gIH1cblxuICBnZXRUb2tlblRyYW5zYWN0aW9uQnVpbGRlcih0eD86IFRyYW5zYWN0aW9uKTogVG9rZW5UcmFuc2FjdGlvbkJ1aWxkZXIge1xuICAgIHJldHVybiB0aGlzLmluaXRpYWxpemVCdWlsZGVyKHR4LCBuZXcgVG9rZW5UcmFuc2FjdGlvbkJ1aWxkZXIodGhpcy5fY29pbkNvbmZpZykpO1xuICB9XG5cbiAgZ2V0U3Rha2luZ0J1aWxkZXIodHg/OiBTdGFraW5nVHJhbnNhY3Rpb24pOiBTdGFraW5nQnVpbGRlciB7XG4gICAgcmV0dXJuIHRoaXMuaW5pdGlhbGl6ZUJ1aWxkZXIodHgsIG5ldyBTdGFraW5nQnVpbGRlcih0aGlzLl9jb2luQ29uZmlnKSk7XG4gIH1cblxuICBnZXRTdGFraW5nRGVsZWdhdGVCdWlsZGVyKHR4PzogRGVsZWdhdGVDbGF1c2VUcmFuc2FjdGlvbik6IERlbGVnYXRlVHhuQnVpbGRlciB7XG4gICAgcmV0dXJuIHRoaXMuaW5pdGlhbGl6ZUJ1aWxkZXIodHgsIG5ldyBEZWxlZ2F0ZVR4bkJ1aWxkZXIodGhpcy5fY29pbkNvbmZpZykpO1xuICB9XG5cbiAgZ2V0U3Rha2luZ0FjdGl2YXRlQnVpbGRlcih0eD86IFN0YWtlQ2xhdXNlVHJhbnNhY3Rpb24pOiBTdGFrZUNsYXVzZVR4bkJ1aWxkZXIge1xuICAgIHJldHVybiB0aGlzLmluaXRpYWxpemVCdWlsZGVyKHR4LCBuZXcgU3Rha2VDbGF1c2VUeG5CdWlsZGVyKHRoaXMuX2NvaW5Db25maWcpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIGFuIG5mdCB0cmFuc2FjdGlvbiBidWlsZGVyLlxuICAgKlxuICAgKiBAcGFyYW0ge05GVFRyYW5zYWN0aW9ufSB0eCAtIFRoZSBuZnQgdHJhbnNhY3Rpb24gdG8gdXNlXG4gICAqIEByZXR1cm5zIHtORlRUcmFuc2FjdGlvbkJ1aWxkZXJ9IFRoZSBuZnQgdHJhbnNhY3Rpb24gYnVpbGRlclxuICAgKi9cbiAgZ2V0TkZUVHJhbnNhY3Rpb25CdWlsZGVyKHR4PzogVHJhbnNhY3Rpb24pOiBORlRUcmFuc2FjdGlvbkJ1aWxkZXIge1xuICAgIHJldHVybiB0aGlzLmluaXRpYWxpemVCdWlsZGVyKHR4LCBuZXcgTkZUVHJhbnNhY3Rpb25CdWlsZGVyKHRoaXMuX2NvaW5Db25maWcpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIGFuIGV4aXQgZGVsZWdhdGlvbiB0cmFuc2FjdGlvbiBidWlsZGVyLlxuICAgKlxuICAgKiBAcGFyYW0ge0V4aXREZWxlZ2F0aW9uVHJhbnNhY3Rpb259IHR4IC0gVGhlIGV4aXQgZGVsZWdhdGlvbiB0cmFuc2FjdGlvbiB0byB1c2VcbiAgICogQHJldHVybnMge0V4aXREZWxlZ2F0aW9uQnVpbGRlcn0gVGhlIGV4aXQgZGVsZWdhdGlvbiB0cmFuc2FjdGlvbiBidWlsZGVyXG4gICAqL1xuICBnZXRFeGl0RGVsZWdhdGlvbkJ1aWxkZXIodHg/OiBFeGl0RGVsZWdhdGlvblRyYW5zYWN0aW9uKTogRXhpdERlbGVnYXRpb25CdWlsZGVyIHtcbiAgICByZXR1cm4gdGhpcy5pbml0aWFsaXplQnVpbGRlcih0eCwgbmV3IEV4aXREZWxlZ2F0aW9uQnVpbGRlcih0aGlzLl9jb2luQ29uZmlnKSk7XG4gIH1cblxuICAvKipcbiAgICogR2V0cyBhIGJ1cm4gTkZUIHRyYW5zYWN0aW9uIGJ1aWxkZXIuXG4gICAqXG4gICAqIEBwYXJhbSB7QnVybk5mdFRyYW5zYWN0aW9ufSB0eCAtIFRoZSBidXJuIE5GVCB0cmFuc2FjdGlvbiB0byB1c2VcbiAgICogQHJldHVybnMge0J1cm5OZnRCdWlsZGVyfSBUaGUgYnVybiBORlQgdHJhbnNhY3Rpb24gYnVpbGRlclxuICAgKi9cbiAgZ2V0QnVybk5mdEJ1aWxkZXIodHg/OiBCdXJuTmZ0VHJhbnNhY3Rpb24pOiBCdXJuTmZ0QnVpbGRlciB7XG4gICAgcmV0dXJuIHRoaXMuaW5pdGlhbGl6ZUJ1aWxkZXIodHgsIG5ldyBCdXJuTmZ0QnVpbGRlcih0aGlzLl9jb2luQ29uZmlnKSk7XG4gIH1cblxuICAvKipcbiAgICogR2V0cyBhIGNsYWltIHJld2FyZHMgdHJhbnNhY3Rpb24gYnVpbGRlci5cbiAgICpcbiAgICogQHBhcmFtIHtDbGFpbVJld2FyZHNUcmFuc2FjdGlvbn0gdHggLSBUaGUgY2xhaW0gcmV3YXJkcyB0cmFuc2FjdGlvbiB0byB1c2VcbiAgICogQHJldHVybnMge0NsYWltUmV3YXJkc0J1aWxkZXJ9IFRoZSBjbGFpbSByZXdhcmRzIHRyYW5zYWN0aW9uIGJ1aWxkZXJcbiAgICovXG4gIGdldENsYWltUmV3YXJkc0J1aWxkZXIodHg/OiBDbGFpbVJld2FyZHNUcmFuc2FjdGlvbik6IENsYWltUmV3YXJkc0J1aWxkZXIge1xuICAgIHJldHVybiB0aGlzLmluaXRpYWxpemVCdWlsZGVyKHR4LCBuZXcgQ2xhaW1SZXdhcmRzQnVpbGRlcih0aGlzLl9jb2luQ29uZmlnKSk7XG4gIH1cblxuICAvKiogQGluaGVyaXRkb2MgKi9cbiAgZ2V0V2FsbGV0SW5pdGlhbGl6YXRpb25CdWlsZGVyKCk6IHZvaWQge1xuICAgIHRocm93IG5ldyBFcnJvcignTWV0aG9kIG5vdCBpbXBsZW1lbnRlZC4nKTtcbiAgfVxuXG4gIGdldFRyYW5zYWN0aW9uVHlwZUZyb21TaWduZWRUeG4oc2lnbmVkVHhuOiBWZXRUcmFuc2FjdGlvbik6IFRyYW5zYWN0aW9uVHlwZSB7XG4gICAgcmV0dXJuIHV0aWxzLmdldFRyYW5zYWN0aW9uVHlwZUZyb21DbGF1c2Uoc2lnbmVkVHhuLmJvZHkuY2xhdXNlcyk7XG4gIH1cblxuICAvKipcbiAgICogSW5pdGlhbGl6ZSB0aGUgYnVpbGRlciB3aXRoIHRoZSBnaXZlbiB0cmFuc2FjdGlvblxuICAgKlxuICAgKiBAcGFyYW0ge1RyYW5zYWN0aW9uIHwgdW5kZWZpbmVkfSB0eCAtIHRoZSB0cmFuc2FjdGlvbiB1c2VkIHRvIGluaXRpYWxpemUgdGhlIGJ1aWxkZXJcbiAgICogQHBhcmFtIHtUcmFuc2FjdGlvbkJ1aWxkZXJ9IGJ1aWxkZXIgLSB0aGUgYnVpbGRlciB0byBiZSBpbml0aWFsaXplZFxuICAgKiBAcmV0dXJucyB7VHJhbnNhY3Rpb25CdWlsZGVyfSB0aGUgYnVpbGRlciBpbml0aWFsaXplZFxuICAgKi9cbiAgcHJpdmF0ZSBpbml0aWFsaXplQnVpbGRlcjxUIGV4dGVuZHMgVHJhbnNhY3Rpb25CdWlsZGVyPih0eDogVHJhbnNhY3Rpb24gfCB1bmRlZmluZWQsIGJ1aWxkZXI6IFQpOiBUIHtcbiAgICBpZiAodHgpIHtcbiAgICAgIGJ1aWxkZXIuaW5pdEJ1aWxkZXIodHgpO1xuICAgIH1cbiAgICByZXR1cm4gYnVpbGRlcjtcbiAgfVxufVxuIl19
|
|
182
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNhY3Rpb25CdWlsZGVyRmFjdG9yeS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9saWIvdHJhbnNhY3Rpb25CdWlsZGVyRmFjdG9yeS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7QUFDQSxtREFBK0c7QUFHL0csMEVBQXVFO0FBQ3ZFLG9HQUFpRztBQUNqRyxvR0FBaUc7QUFDakcsc0ZBQW1GO0FBQ25GLHdFQUFxRTtBQUNyRSxrRkFBK0U7QUFDL0UsMkRBQXdEO0FBQ3hELG9EQUE0QjtBQUM1QixxR0FBa0c7QUFDbEcsK0VBQTRFO0FBQzVFLGlFQUF5RTtBQUN6RSx5RUFBc0U7QUFDdEUsNkRBQXFFO0FBQ3JFLDBGQUF1RjtBQUN2RixxRUFBa0U7QUFDbEUsd0VBQXFFO0FBQ3JFLHlFQUFzRTtBQUN0RSxzRkFBbUY7QUFDbkYsaUVBQThEO0FBQzlELGlGQUE4RTtBQUM5RSxzRkFBbUY7QUFDbkYsZ0ZBQTZFO0FBQzdFLHVGQUFvRjtBQUNwRixxR0FBa0c7QUFDbEcsb0dBQWlHO0FBRWpHLE1BQWEseUJBQTBCLFNBQVEsd0NBQTZCO0lBQzFFLFlBQVksV0FBaUM7UUFDM0MsS0FBSyxDQUFDLFdBQVcsQ0FBQyxDQUFDO0lBQ3JCLENBQUM7SUFFRCxrQkFBa0I7SUFDbEIsSUFBSSxDQUFDLFdBQW1CO1FBQ3RCLElBQUksQ0FBQztZQUNILE1BQU0sUUFBUSxHQUFHLHlCQUFXLENBQUMsc0JBQXNCLENBQUMsV0FBVyxDQUFDLENBQUM7WUFDakUsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLCtCQUErQixDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQzVELFFBQVEsSUFBSSxFQUFFLENBQUM7Z0JBQ2IsS0FBSywwQkFBZSxDQUFDLElBQUk7b0JBQ3ZCLE1BQU0sVUFBVSxHQUFHLElBQUkseUJBQVcsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7b0JBQ3JELFVBQVUsQ0FBQyxpQ0FBaUMsQ0FBQyxRQUFRLENB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QUFDLEVBQUUsRUFBRSxJQUFJLCtCQUFjLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUM7SUFDMUUsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0gsc0JBQXNCLENBQUMsRUFBNEI7UUFDakQsT0FBTyxJQUFJLENBQUMsaUJBQWlCLENBQUMsRUFBRSxFQUFFLElBQUkseUNBQW1CLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUM7SUFDL0UsQ0FBQztJQUVELGtCQUFrQjtJQUNsQiw4QkFBOEI7UUFDNUIsTUFBTSxJQUFJLEtBQUssQ0FBQyx5QkFBeUIsQ0FBQyxDQUFDO0lBQzdDLENBQUM7SUFFRCwrQkFBK0IsQ0FBQyxTQUF5QjtRQUN2RCxPQUFPLGVBQUssQ0FBQyw0QkFBNEIsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ3BFLENBQUM7SUFFRDs7Ozs7O09BTUc7SUFDSyxpQkFBaUIsQ0FBK0IsRUFBMkIsRUFBRSxPQUFVO1FBQzdGLElBQUksRUFBRSxFQUFFLENBQUM7WUFDUCxPQUFPLENBQUMsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQzFCLENBQUM7UUFDRCxPQUFPLE9BQU8sQ0FBQztJQUNqQixDQUFDO0NBQ0Y7QUFsS0QsOERBa0tDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgVHJhbnNhY3Rpb24gYXMgVmV0VHJhbnNhY3Rpb24gfSBmcm9tICdAdmVjaGFpbi9zZGstY29yZSc7XG5pbXBvcnQgeyBCYXNlVHJhbnNhY3Rpb25CdWlsZGVyRmFjdG9yeSwgSW52YWxpZFRyYW5zYWN0aW9uRXJyb3IsIFRyYW5zYWN0aW9uVHlwZSB9IGZyb20gJ0BiaXRnby1iZXRhL3Nkay1jb3JlJztcbmltcG9ydCB7IEJhc2VDb2luIGFzIENvaW5Db25maWcgfSBmcm9tICdAYml0Z28tYmV0YS9zdGF0aWNzJztcbmltcG9ydCB7IFRyYW5zYWN0aW9uQnVpbGRlciB9IGZyb20gJy4vdHJhbnNhY3Rpb25CdWlsZGVyL3RyYW5zYWN0aW9uQnVpbGRlcic7XG5pbXBvcnQgeyBUcmFuc2ZlckJ1aWxkZXIgfSBmcm9tICcuL3RyYW5zYWN0aW9uQnVpbGRlci90cmFuc2ZlckJ1aWxkZXInO1xuaW1wb3J0IHsgQWRkcmVzc0luaXRpYWxpemF0aW9uQnVpbGRlciB9IGZyb20gJy4vdHJhbnNhY3Rpb25CdWlsZGVyL2FkZHJlc3NJbml0aWFsaXphdGlvbkJ1aWxkZXInO1xuaW1wb3J0IHsgRmx1c2hUb2tlblRyYW5zYWN0aW9uQnVpbGRlciB9IGZyb20gJy4vdHJhbnNhY3Rpb25CdWlsZGVyL2ZsdXNoVG9rZW5UcmFuc2FjdGlvbkJ1aWxkZXInO1xuaW1wb3J0IHsgRXhpdERlbGVnYXRpb25CdWlsZGVyIH0gZnJvbSAnLi90cmFuc2FjdGlvbkJ1aWxkZXIvZXhpdERlbGVnYXRpb25CdWlsZGVyJztcbmltcG9ydCB7IEJ1cm5OZnRCdWlsZGVyIH0gZnJvbSAnLi90cmFuc2FjdGlvbkJ1aWxkZXIvYnVybk5mdEJ1aWxkZXInO1xuaW1wb3J0IHsgQ2xhaW1SZXdhcmRzQnVpbGRlciB9IGZyb20gJy4vdHJhbnNhY3Rpb25CdWlsZGVyL2NsYWltUmV3YXJkc0J1aWxkZXInO1xuaW1wb3J0IHsgVHJhbnNhY3Rpb24gfSBmcm9tICcuL3RyYW5zYWN0aW9uL3RyYW5zYWN0aW9uJztcbmltcG9ydCB1dGlscyBmcm9tICcuL3V0aWxzJztcbmltcG9ydCB7IEFkZHJlc3NJbml0aWFsaXphdGlvblRyYW5zYWN0aW9uIH0gZnJvbSAnLi90cmFuc2FjdGlvbi9hZGRyZXNzSW5pdGlhbGl6YXRpb25UcmFuc2FjdGlvbic7XG5pbXBvcnQgeyBGbHVzaFRva2VuVHJhbnNhY3Rpb24gfSBmcm9tICcuL3RyYW5zYWN0aW9uL2ZsdXNoVG9rZW5UcmFuc2FjdGlvbic7XG5pbXBvcnQgeyBFeGl0RGVsZWdhdGlvblRyYW5zYWN0aW9uIH0gZnJvbSAnLi90cmFuc2FjdGlvbi9leGl0RGVsZWdhdGlvbic7XG5pbXBvcnQgeyBCdXJuTmZ0VHJhbnNhY3Rpb24gfSBmcm9tICcuL3RyYW5zYWN0aW9uL2J1cm5OZnRUcmFuc2FjdGlvbic7XG5pbXBvcnQgeyBDbGFpbVJld2FyZHNUcmFuc2FjdGlvbiB9IGZyb20gJy4vdHJhbnNhY3Rpb24vY2xhaW1SZXdhcmRzJztcbmltcG9ydCB7IFRva2VuVHJhbnNhY3Rpb25CdWlsZGVyIH0gZnJvbSAnLi90cmFuc2FjdGlvbkJ1aWxkZXIvdG9rZW5UcmFuc2FjdGlvbkJ1aWxkZXInO1xuaW1wb3J0IHsgVG9rZW5UcmFuc2FjdGlvbiB9IGZyb20gJy4vdHJhbnNhY3Rpb24vdG9rZW5UcmFuc2FjdGlvbic7XG5pbXBvcnQgeyBTdGFraW5nQnVpbGRlciB9IGZyb20gJy4vdHJhbnNhY3Rpb25CdWlsZGVyL3N0YWtpbmdCdWlsZGVyJztcbmltcG9ydCB7IFN0YWtpbmdUcmFuc2FjdGlvbiB9IGZyb20gJy4vdHJhbnNhY3Rpb24vc3Rha2luZ1RyYW5zYWN0aW9uJztcbmltcG9ydCB7IE5GVFRyYW5zYWN0aW9uQnVpbGRlciB9IGZyb20gJy4vdHJhbnNhY3Rpb25CdWlsZGVyL25mdFRyYW5zYWN0aW9uQnVpbGRlcic7XG5pbXBvcnQgeyBORlRUcmFuc2FjdGlvbiB9IGZyb20gJy4vdHJhbnNhY3Rpb24vbmZ0VHJhbnNhY3Rpb24nO1xuaW1wb3J0IHsgU3Rha2VDbGF1c2VUcmFuc2FjdGlvbiB9IGZyb20gJy4vdHJhbnNhY3Rpb24vc3Rha2VDbGF1c2VUcmFuc2FjdGlvbic7XG5pbXBvcnQgeyBTdGFrZUNsYXVzZVR4bkJ1aWxkZXIgfSBmcm9tICcuL3RyYW5zYWN0aW9uQnVpbGRlci9zdGFrZUNsYXVzZVR4bkJ1aWxkZXInO1xuaW1wb3J0IHsgRGVsZWdhdGVUeG5CdWlsZGVyIH0gZnJvbSAnLi90cmFuc2FjdGlvbkJ1aWxkZXIvZGVsZWdhdGVUeG5CdWlsZGVyJztcbmltcG9ydCB7IERlbGVnYXRlQ2xhdXNlVHJhbnNhY3Rpb24gfSBmcm9tICcuL3RyYW5zYWN0aW9uL2RlbGVnYXRlQ2xhdXNlVHJhbnNhY3Rpb24nO1xuaW1wb3J0IHsgVmFsaWRhdG9yUmVnaXN0cmF0aW9uVHJhbnNhY3Rpb24gfSBmcm9tICcuL3RyYW5zYWN0aW9uL3ZhbGlkYXRvclJlZ2lzdHJhdGlvblRyYW5zYWN0aW9uJztcbmltcG9ydCB7IFZhbGlkYXRvclJlZ2lzdHJhdGlvbkJ1aWxkZXIgfSBmcm9tICcuL3RyYW5zYWN0aW9uQnVpbGRlci92YWxpZGF0b3JSZWdpc3RyYXRpb25CdWlsZGVyJztcblxuZXhwb3J0IGNsYXNzIFRyYW5zYWN0aW9uQnVpbGRlckZhY3RvcnkgZXh0ZW5kcyBCYXNlVHJhbnNhY3Rpb25CdWlsZGVyRmFjdG9yeSB7XG4gIGNvbnN0cnVjdG9yKF9jb2luQ29uZmlnOiBSZWFkb25seTxDb2luQ29uZmlnPikge1xuICAgIHN1cGVyKF9jb2luQ29uZmlnKTtcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdGRvYyAqL1xuICBmcm9tKHNpZ25lZFJhd1R4OiBzdHJpbmcpOiBUcmFuc2FjdGlvbkJ1aWxkZXIge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBzaWduZWRUeCA9IFRyYW5zYWN0aW9uLmRlc2VyaWFsaXplVHJhbnNhY3Rpb24oc2lnbmVkUmF3VHgpO1xuICAgICAgY29uc3QgdHlwZSA9IHRoaXMuZ2V0VHJhbnNhY3Rpb25UeXBlRnJvbVNpZ25lZFR4bihzaWduZWRUeCk7XG4gICAgICBzd2l0Y2ggKHR5cGUpIHtcbiAgICAgICAgY2FzZSBUcmFuc2FjdGlvblR5cGUuU2VuZDpcbiAgICAgICAgICBjb25zdCB0cmFuc2ZlclR4ID0gbmV3IFRyYW5zYWN0aW9uKHRoaXMuX2NvaW5Db25maWcpO1xuICAgICAgICAgIHRyYW5zZmVyVHguZnJvbURlc2VyaWFsaXplZFNpZ25lZFRyYW5zYWN0aW9uKHNpZ25lZFR4KTtcbiAgICAgICAgICByZXR1cm4gdGhpcy5nZXRUcmFuc2ZlckJ1aWxkZXIodHJhbnNmZXJUeCk7XG4gICAgICAgIGNhc2UgVHJhbnNhY3Rpb25UeXBlLkFkZHJlc3NJbml0aWFsaXphdGlvbjpcbiAgICAgICAgICBjb25zdCBhZGRyZXNzSW5pdGlhbGl6YXRpb25UeCA9IG5ldyBBZGRyZXNzSW5pdGlhbGl6YXRpb25UcmFuc2FjdGlvbih0aGlzLl9jb2luQ29uZmlnKTtcbiAgICAgICAgICBhZGRyZXNzSW5pdGlhbGl6YXRpb25UeC5mcm9tRGVzZXJpYWxpemVkU2lnbmVkVHJhbnNhY3Rpb24oc2lnbmVkVHgpO1xuICAgICAgICAgIHJldHVybiB0aGlzLmdldEFkZHJlc3NJbml0aWFsaXphdGlvbkJ1aWxkZXIoYWRkcmVzc0luaXRpYWxpemF0aW9uVHgpO1xuICAgICAgICBjYXNlIFRyYW5zYWN0aW9uVHlwZS5GbHVzaFRva2VuczpcbiAgICAgICAgICBjb25zdCBmbHVzaFRva2VuVHggPSBuZXcgRmx1c2hUb2tlblRyYW5zYWN0aW9uKHRoaXMuX2NvaW5Db25maWcpO1xuICAgICAgICAgIGZsdXNoVG9rZW5UeC5mcm9tRGVzZXJpYWxpemVkU2lnbmVkVHJhbnNhY3Rpb24oc2lnbmVkVHgpO1xuICAgICAgICAgIHJldHVybiB0aGlzLmdldEZsdXNoVG9rZW5UcmFuc2FjdGlvbkJ1aWxkZXIoZmx1c2hUb2tlblR4KTtcbiAgICAgICAgY2FzZSBUcmFuc2FjdGlvblR5cGUuU2VuZFRva2VuOlxuICAgICAgICAgIGNvbnN0IHRva2VuVHJhbnNmZXJUeCA9IG5ldyBUb2tlblRyYW5zYWN0aW9uKHRoaXMuX2NvaW5Db25maWcpO1xuICAgICAgICAgIHRva2VuVHJhbnNmZXJUeC5mcm9tRGVzZXJpYWxpemVkU2lnbmVkVHJhbnNhY3Rpb24oc2lnbmVkVHgpO1xuICAgICAgICAgIHJldHVybiB0aGlzLmdldFRva2VuVHJhbnNhY3Rpb25CdWlsZGVyKHRva2VuVHJhbnNmZXJUeCk7XG4gICAgICAgIGNhc2UgVHJhbnNhY3Rpb25UeXBlLlNlbmRORlQ6XG4gICAgICAgICAgY29uc3QgbmZ0VHJhbnNmZXJUeCA9IG5ldyBORlRUcmFuc2FjdGlvbih0aGlzLl9jb2luQ29uZmlnKTtcbiAgICAgICAgICBuZnRUcmFuc2ZlclR4LmZyb21EZXNlcmlhbGl6ZWRTaWduZWRUcmFuc2FjdGlvbihzaWduZWRUeCk7XG4gICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0TkZUVHJhbnNhY3Rpb25CdWlsZGVyKG5mdFRyYW5zZmVyVHgpO1xuICAgICAgICBjYXNlIFRyYW5zYWN0aW9uVHlwZS5Db250cmFjdENhbGw6XG4gICAgICAgICAgY29uc3Qgc3Rha2luZ1R4ID0gbmV3IFN0YWtpbmdUcmFuc2FjdGlvbih0aGlzLl9jb2luQ29uZmlnKTtcbiAgICAgICAgICBzdGFraW5nVHguZnJvbURlc2VyaWFsaXplZFNpZ25lZFRyYW5zYWN0aW9uKHNpZ25lZFR4KTtcbiAgICAgICAgICByZXR1cm4gdGhpcy5nZXRTdGFraW5nQnVpbGRlcihzdGFraW5nVHgpO1xuICAgICAgICBjYXNlIFRyYW5zYWN0aW9uVHlwZS5TdGFraW5nQWN0aXZhdGU6XG4gICAgICAgICAgY29uc3Qgc3Rha2VDbGF1c2VUeCA9IG5ldyBTdGFrZUNsYXVzZVRyYW5zYWN0aW9uKHRoaXMuX2NvaW5Db25maWcpO1xuICAgICAgICAgIHN0YWtlQ2xhdXNlVHguZnJvbURlc2VyaWFsaXplZFNpZ25lZFRyYW5zYWN0aW9uKHNpZ25lZFR4KTtcbiAgICAgICAgICByZXR1cm4gdGhpcy5nZXRTdGFraW5nQWN0aXZhdGVCdWlsZGVyKHN0YWtlQ2xhdXNlVHgpO1xuICAgICAgICBjYXNlIFRyYW5zYWN0aW9uVHlwZS5TdGFraW5nRGVsZWdhdGU6XG4gICAgICAgICAgY29uc3QgZGVsZWdhdGVDbGF1c2VUeCA9IG5ldyBEZWxlZ2F0ZUNsYXVzZVRyYW5zYWN0aW9uKHRoaXMuX2NvaW5Db25maWcpO1xuICAgICAgICAgIGRlbGVnYXRlQ2xhdXNlVHguZnJvbURlc2VyaWFsaXplZFNpZ25lZFRyYW5zYWN0aW9uKHNpZ25lZFR4KTtcbiAgICAgICAgICByZXR1cm4gdGhpcy5nZXRTdGFraW5nRGVsZWdhdGVCdWlsZGVyKGRlbGVnYXRlQ2xhdXNlVHgpO1xuICAgICAgICBjYXNlIFRyYW5zYWN0aW9uVHlwZS5TdGFraW5nVW5sb2NrOlxuICAgICAgICAgIGNvbnN0IGV4aXREZWxlZ2F0aW9uVHggPSBuZXcgRXhpdERlbGVnYXRpb25UcmFuc2FjdGlvbih0aGlzLl9jb2luQ29uZmlnKTtcbiAgICAgICAgICBleGl0RGVsZWdhdGlvblR4LmZyb21EZXNlcmlhbGl6ZWRTaWduZWRUcmFuc2FjdGlvbihzaWduZWRUeCk7XG4gICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0RXhpdERlbGVnYXRpb25CdWlsZGVyKGV4aXREZWxlZ2F0aW9uVHgpO1xuICAgICAgICBjYXNlIFRyYW5zYWN0aW9uVHlwZS5TdGFraW5nV2l0aGRyYXc6XG4gICAgICAgICAgY29uc3QgYnVybk5mdFR4ID0gbmV3IEJ1cm5OZnRUcmFuc2FjdGlvbih0aGlzLl9jb2luQ29uZmlnKTtcbiAgICAgICAgICBidXJuTmZ0VHguZnJvbURlc2VyaWFsaXplZFNpZ25lZFRyYW5zYWN0aW9uKHNpZ25lZFR4KTtcbiAgICAgICAgICByZXR1cm4gdGhpcy5nZXRCdXJuTmZ0QnVpbGRlcihidXJuTmZ0VHgpO1xuICAgICAgICBjYXNlIFRyYW5zYWN0aW9uVHlwZS5TdGFraW5nQ2xhaW06XG4gICAgICAgICAgY29uc3QgY2xhaW1SZXdhcmRzVHggPSBuZXcgQ2xhaW1SZXdhcmRzVHJhbnNhY3Rpb24odGhpcy5fY29pbkNvbmZpZyk7XG4gICAgICAgICAgY2xhaW1SZXdhcmRzVHguZnJvbURlc2VyaWFsaXplZFNpZ25lZFRyYW5zYWN0aW9uKHNpZ25lZFR4KTtcbiAgICAgICAgICByZXR1cm4gdGhpcy5nZXRDbGFpbVJld2FyZHNCdWlsZGVyKGNsYWltUmV3YXJkc1R4KTtcbiAgICAgICAgY2FzZSBUcmFuc2FjdGlvblR5cGUuU3Rha2luZ0xvY2s6XG4gICAgICAgICAgY29uc3QgdmFsaWRhdG9yUmVnaXN0cmF0aW9uVHggPSBuZXcgVmFsaWRhdG9yUmVnaXN0cmF0aW9uVHJhbnNhY3Rpb24odGhpcy5fY29pbkNvbmZpZyk7XG4gICAgICAgICAgdmFsaWRhdG9yUmVnaXN0cmF0aW9uVHguZnJvbURlc2VyaWFsaXplZFNpZ25lZFRyYW5zYWN0aW9uKHNpZ25lZFR4KTtcbiAgICAgICAgICByZXR1cm4gdGhpcy5nZXRWYWxpZGF0b3JSZWdpc3RyYXRpb25CdWlsZGVyKHZhbGlkYXRvclJlZ2lzdHJhdGlvblR4KTtcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICB0aHJvdyBuZXcgSW52YWxpZFRyYW5zYWN0aW9uRXJyb3IoJ0ludmFsaWQgdHJhbnNhY3Rpb24gdHlwZScpO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHRocm93IGU7XG4gICAgfVxuICB9XG5cbiAgLyoqIEBpbmhlcml0ZG9jICovXG4gIGdldFRyYW5zZmVyQnVpbGRlcih0eD86IFRyYW5zYWN0aW9uKTogVHJhbnNmZXJCdWlsZGVyIHtcbiAgICByZXR1cm4gdGhpcy5pbml0aWFsaXplQnVpbGRlcih0eCwgbmV3IFRyYW5zZmVyQnVpbGRlcih0aGlzLl9jb2luQ29uZmlnKSk7XG4gIH1cblxuICBnZXRBZGRyZXNzSW5pdGlhbGl6YXRpb25CdWlsZGVyKHR4PzogQWRkcmVzc0luaXRpYWxpemF0aW9uVHJhbnNhY3Rpb24pOiBBZGRyZXNzSW5pdGlhbGl6YXRpb25CdWlsZGVyIHtcbiAgICByZXR1cm4gdGhpcy5pbml0aWFsaXplQnVpbGRlcih0eCwgbmV3IEFkZHJlc3NJbml0aWFsaXphdGlvbkJ1aWxkZXIodGhpcy5fY29pbkNvbmZpZykpO1xuICB9XG5cbiAgZ2V0Rmx1c2hUb2tlblRyYW5zYWN0aW9uQnVpbGRlcih0eD86IEZsdXNoVG9rZW5UcmFuc2FjdGlvbik6IEZsdXNoVG9rZW5UcmFuc2FjdGlvbkJ1aWxkZXIge1xuICAgIHJldHVybiB0aGlzLmluaXRpYWxpemVCdWlsZGVyKHR4LCBuZXcgRmx1c2hUb2tlblRyYW5zYWN0aW9uQnVpbGRlcih0aGlzLl9jb2luQ29uZmlnKSk7XG4gIH1cblxuICBnZXRUb2tlblRyYW5zYWN0aW9uQnVpbGRlcih0eD86IFRyYW5zYWN0aW9uKTogVG9rZW5UcmFuc2FjdGlvbkJ1aWxkZXIge1xuICAgIHJldHVybiB0aGlzLmluaXRpYWxpemVCdWlsZGVyKHR4LCBuZXcgVG9rZW5UcmFuc2FjdGlvbkJ1aWxkZXIodGhpcy5fY29pbkNvbmZpZykpO1xuICB9XG5cbiAgZ2V0U3Rha2luZ0J1aWxkZXIodHg/OiBTdGFraW5nVHJhbnNhY3Rpb24pOiBTdGFraW5nQnVpbGRlciB7XG4gICAgcmV0dXJuIHRoaXMuaW5pdGlhbGl6ZUJ1aWxkZXIodHgsIG5ldyBTdGFraW5nQnVpbGRlcih0aGlzLl9jb2luQ29uZmlnKSk7XG4gIH1cblxuICBnZXRTdGFraW5nRGVsZWdhdGVCdWlsZGVyKHR4PzogRGVsZWdhdGVDbGF1c2VUcmFuc2FjdGlvbik6IERlbGVnYXRlVHhuQnVpbGRlciB7XG4gICAgcmV0dXJuIHRoaXMuaW5pdGlhbGl6ZUJ1aWxkZXIodHgsIG5ldyBEZWxlZ2F0ZVR4bkJ1aWxkZXIodGhpcy5fY29pbkNvbmZpZykpO1xuICB9XG5cbiAgZ2V0VmFsaWRhdG9yUmVnaXN0cmF0aW9uQnVpbGRlcih0eD86IFZhbGlkYXRvclJlZ2lzdHJhdGlvblRyYW5zYWN0aW9uKTogVmFsaWRhdG9yUmVnaXN0cmF0aW9uQnVpbGRlciB7XG4gICAgcmV0dXJuIHRoaXMuaW5pdGlhbGl6ZUJ1aWxkZXIodHgsIG5ldyBWYWxpZGF0b3JSZWdpc3RyYXRpb25CdWlsZGVyKHRoaXMuX2NvaW5Db25maWcpKTtcbiAgfVxuXG4gIGdldFN0YWtpbmdBY3RpdmF0ZUJ1aWxkZXIodHg/OiBTdGFrZUNsYXVzZVRyYW5zYWN0aW9uKTogU3Rha2VDbGF1c2VUeG5CdWlsZGVyIHtcbiAgICByZXR1cm4gdGhpcy5pbml0aWFsaXplQnVpbGRlcih0eCwgbmV3IFN0YWtlQ2xhdXNlVHhuQnVpbGRlcih0aGlzLl9jb2luQ29uZmlnKSk7XG4gIH1cblxuICAvKipcbiAgICogR2V0cyBhbiBuZnQgdHJhbnNhY3Rpb24gYnVpbGRlci5cbiAgICpcbiAgICogQHBhcmFtIHtORlRUcmFuc2FjdGlvbn0gdHggLSBUaGUgbmZ0IHRyYW5zYWN0aW9uIHRvIHVzZVxuICAgKiBAcmV0dXJucyB7TkZUVHJhbnNhY3Rpb25CdWlsZGVyfSBUaGUgbmZ0IHRyYW5zYWN0aW9uIGJ1aWxkZXJcbiAgICovXG4gIGdldE5GVFRyYW5zYWN0aW9uQnVpbGRlcih0eD86IFRyYW5zYWN0aW9uKTogTkZUVHJhbnNhY3Rpb25CdWlsZGVyIHtcbiAgICByZXR1cm4gdGhpcy5pbml0aWFsaXplQnVpbGRlcih0eCwgbmV3IE5GVFRyYW5zYWN0aW9uQnVpbGRlcih0aGlzLl9jb2luQ29uZmlnKSk7XG4gIH1cblxuICAvKipcbiAgICogR2V0cyBhbiBleGl0IGRlbGVnYXRpb24gdHJhbnNhY3Rpb24gYnVpbGRlci5cbiAgICpcbiAgICogQHBhcmFtIHtFeGl0RGVsZWdhdGlvblRyYW5zYWN0aW9ufSB0eCAtIFRoZSBleGl0IGRlbGVnYXRpb24gdHJhbnNhY3Rpb24gdG8gdXNlXG4gICAqIEByZXR1cm5zIHtFeGl0RGVsZWdhdGlvbkJ1aWxkZXJ9IFRoZSBleGl0IGRlbGVnYXRpb24gdHJhbnNhY3Rpb24gYnVpbGRlclxuICAgKi9cbiAgZ2V0RXhpdERlbGVnYXRpb25CdWlsZGVyKHR4PzogRXhpdERlbGVnYXRpb25UcmFuc2FjdGlvbik6IEV4aXREZWxlZ2F0aW9uQnVpbGRlciB7XG4gICAgcmV0dXJuIHRoaXMuaW5pdGlhbGl6ZUJ1aWxkZXIodHgsIG5ldyBFeGl0RGVsZWdhdGlvbkJ1aWxkZXIodGhpcy5fY29pbkNvbmZpZykpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldHMgYSBidXJuIE5GVCB0cmFuc2FjdGlvbiBidWlsZGVyLlxuICAgKlxuICAgKiBAcGFyYW0ge0J1cm5OZnRUcmFuc2FjdGlvbn0gdHggLSBUaGUgYnVybiBORlQgdHJhbnNhY3Rpb24gdG8gdXNlXG4gICAqIEByZXR1cm5zIHtCdXJuTmZ0QnVpbGRlcn0gVGhlIGJ1cm4gTkZUIHRyYW5zYWN0aW9uIGJ1aWxkZXJcbiAgICovXG4gIGdldEJ1cm5OZnRCdWlsZGVyKHR4PzogQnVybk5mdFRyYW5zYWN0aW9uKTogQnVybk5mdEJ1aWxkZXIge1xuICAgIHJldHVybiB0aGlzLmluaXRpYWxpemVCdWlsZGVyKHR4LCBuZXcgQnVybk5mdEJ1aWxkZXIodGhpcy5fY29pbkNvbmZpZykpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldHMgYSBjbGFpbSByZXdhcmRzIHRyYW5zYWN0aW9uIGJ1aWxkZXIuXG4gICAqXG4gICAqIEBwYXJhbSB7Q2xhaW1SZXdhcmRzVHJhbnNhY3Rpb259IHR4IC0gVGhlIGNsYWltIHJld2FyZHMgdHJhbnNhY3Rpb24gdG8gdXNlXG4gICAqIEByZXR1cm5zIHtDbGFpbVJld2FyZHNCdWlsZGVyfSBUaGUgY2xhaW0gcmV3YXJkcyB0cmFuc2FjdGlvbiBidWlsZGVyXG4gICAqL1xuICBnZXRDbGFpbVJld2FyZHNCdWlsZGVyKHR4PzogQ2xhaW1SZXdhcmRzVHJhbnNhY3Rpb24pOiBDbGFpbVJld2FyZHNCdWlsZGVyIHtcbiAgICByZXR1cm4gdGhpcy5pbml0aWFsaXplQnVpbGRlcih0eCwgbmV3IENsYWltUmV3YXJkc0J1aWxkZXIodGhpcy5fY29pbkNvbmZpZykpO1xuICB9XG5cbiAgLyoqIEBpbmhlcml0ZG9jICovXG4gIGdldFdhbGxldEluaXRpYWxpemF0aW9uQnVpbGRlcigpOiB2b2lkIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ01ldGhvZCBub3QgaW1wbGVtZW50ZWQuJyk7XG4gIH1cblxuICBnZXRUcmFuc2FjdGlvblR5cGVGcm9tU2lnbmVkVHhuKHNpZ25lZFR4bjogVmV0VHJhbnNhY3Rpb24pOiBUcmFuc2FjdGlvblR5cGUge1xuICAgIHJldHVybiB1dGlscy5nZXRUcmFuc2FjdGlvblR5cGVGcm9tQ2xhdXNlKHNpZ25lZFR4bi5ib2R5LmNsYXVzZXMpO1xuICB9XG5cbiAgLyoqXG4gICAqIEluaXRpYWxpemUgdGhlIGJ1aWxkZXIgd2l0aCB0aGUgZ2l2ZW4gdHJhbnNhY3Rpb25cbiAgICpcbiAgICogQHBhcmFtIHtUcmFuc2FjdGlvbiB8IHVuZGVmaW5lZH0gdHggLSB0aGUgdHJhbnNhY3Rpb24gdXNlZCB0byBpbml0aWFsaXplIHRoZSBidWlsZGVyXG4gICAqIEBwYXJhbSB7VHJhbnNhY3Rpb25CdWlsZGVyfSBidWlsZGVyIC0gdGhlIGJ1aWxkZXIgdG8gYmUgaW5pdGlhbGl6ZWRcbiAgICogQHJldHVybnMge1RyYW5zYWN0aW9uQnVpbGRlcn0gdGhlIGJ1aWxkZXIgaW5pdGlhbGl6ZWRcbiAgICovXG4gIHByaXZhdGUgaW5pdGlhbGl6ZUJ1aWxkZXI8VCBleHRlbmRzIFRyYW5zYWN0aW9uQnVpbGRlcj4odHg6IFRyYW5zYWN0aW9uIHwgdW5kZWZpbmVkLCBidWlsZGVyOiBUKTogVCB7XG4gICAgaWYgKHR4KSB7XG4gICAgICBidWlsZGVyLmluaXRCdWlsZGVyKHR4KTtcbiAgICB9XG4gICAgcmV0dXJuIGJ1aWxkZXI7XG4gIH1cbn1cbiJdfQ==
|
package/dist/src/lib/utils.d.ts
CHANGED
|
@@ -55,6 +55,16 @@ export declare class Utils implements BaseUtils {
|
|
|
55
55
|
* @returns {string} - The tokenId as a string
|
|
56
56
|
*/
|
|
57
57
|
decodeClaimRewardsData(data: string): string;
|
|
58
|
+
/**
|
|
59
|
+
* Decodes add validation transaction data to extract validator address and staking period
|
|
60
|
+
*
|
|
61
|
+
* @param {string} data - The encoded transaction data
|
|
62
|
+
* @returns {object} - Object containing validator address and staking period
|
|
63
|
+
*/
|
|
64
|
+
decodeAddValidationData(data: string): {
|
|
65
|
+
validator: string;
|
|
66
|
+
period: number;
|
|
67
|
+
};
|
|
58
68
|
/**
|
|
59
69
|
* Decodes exit delegation transaction data to extract tokenId
|
|
60
70
|
*
|
|
@@ -81,6 +91,12 @@ export declare class Utils implements BaseUtils {
|
|
|
81
91
|
* @returns {string} The staking contract address for the network
|
|
82
92
|
*/
|
|
83
93
|
getDefaultStakingAddress(coinConfig: Readonly<CoinConfig>): string;
|
|
94
|
+
/**
|
|
95
|
+
* Get the network-appropriate contract address for validator registration
|
|
96
|
+
* @param {CoinConfig} coinConfig - The coin configuration object
|
|
97
|
+
* @returns {string} The contract address for the network
|
|
98
|
+
*/
|
|
99
|
+
getContractAddressForValidatorRegistration(coinConfig: Readonly<CoinConfig>): string;
|
|
84
100
|
/**
|
|
85
101
|
* Check if an address is a valid delegation contract address for any network
|
|
86
102
|
* @param {string} address - The address to check
|
|
@@ -100,6 +116,13 @@ export declare class Utils implements BaseUtils {
|
|
|
100
116
|
* @throws {Error} If the address doesn't match the expected contract address
|
|
101
117
|
*/
|
|
102
118
|
validateStakingContractAddress(address: string, coinConfig: Readonly<CoinConfig>): void;
|
|
119
|
+
/**
|
|
120
|
+
* Validate that the contract address matches the expected stargate address for the network
|
|
121
|
+
* @param {string} address - The contract address to validate
|
|
122
|
+
* @param {CoinConfig} coinConfig - The coin configuration object
|
|
123
|
+
* @throws {Error} If the address doesn't match the expected contract address
|
|
124
|
+
*/
|
|
125
|
+
validateContractAddressForValidatorRegistration(address: string, coinConfig: Readonly<CoinConfig>): void;
|
|
103
126
|
/**
|
|
104
127
|
* Validate that a contract address matches the expected stargate contract for the network
|
|
105
128
|
* @param {string} address - The contract address to validate
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../src/lib/utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAW,WAAW,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAG5E,OAAO,EAAE,SAAS,EAAE,oBAAoB,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../src/lib/utils.ts"],"names":[],"mappings":"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"}
|
package/dist/src/lib/utils.js
CHANGED
|
@@ -84,6 +84,9 @@ class Utils {
|
|
|
84
84
|
else if (clauses[0].data.startsWith(constants_1.EXIT_DELEGATION_METHOD_ID)) {
|
|
85
85
|
return sdk_core_2.TransactionType.StakingUnlock;
|
|
86
86
|
}
|
|
87
|
+
else if (clauses[0].data.startsWith(constants_1.ADD_VALIDATION_METHOD_ID)) {
|
|
88
|
+
return sdk_core_2.TransactionType.StakingLock;
|
|
89
|
+
}
|
|
87
90
|
else if (clauses[0].data.startsWith(constants_1.BURN_NFT_METHOD_ID)) {
|
|
88
91
|
return sdk_core_2.TransactionType.StakingWithdraw;
|
|
89
92
|
}
|
|
@@ -216,6 +219,26 @@ class Utils {
|
|
|
216
219
|
throw new Error(`Failed to decode claim rewards data: ${error.message}`);
|
|
217
220
|
}
|
|
218
221
|
}
|
|
222
|
+
/**
|
|
223
|
+
* Decodes add validation transaction data to extract validator address and staking period
|
|
224
|
+
*
|
|
225
|
+
* @param {string} data - The encoded transaction data
|
|
226
|
+
* @returns {object} - Object containing validator address and staking period
|
|
227
|
+
*/
|
|
228
|
+
decodeAddValidationData(data) {
|
|
229
|
+
try {
|
|
230
|
+
const parameters = data.slice(10);
|
|
231
|
+
// Decode using ethereumjs-abi directly
|
|
232
|
+
const decoded = ethereumjs_abi_1.default.rawDecode(['address', 'uint32'], Buffer.from(parameters, 'hex'));
|
|
233
|
+
return {
|
|
234
|
+
validator: (0, ethereumjs_util_1.addHexPrefix)(decoded[0].toString()).toLowerCase(),
|
|
235
|
+
period: Number(decoded[1]),
|
|
236
|
+
};
|
|
237
|
+
}
|
|
238
|
+
catch (error) {
|
|
239
|
+
throw new Error(`Failed to decode add validation data: ${error.message}`);
|
|
240
|
+
}
|
|
241
|
+
}
|
|
219
242
|
/**
|
|
220
243
|
* Decodes exit delegation transaction data to extract tokenId
|
|
221
244
|
*
|
|
@@ -272,6 +295,17 @@ class Utils {
|
|
|
272
295
|
const isTestnet = coinConfig.network.type === 'testnet';
|
|
273
296
|
return isTestnet ? constants_1.STARGATE_CONTRACT_ADDRESS_TESTNET : constants_1.STARGATE_NFT_ADDRESS;
|
|
274
297
|
}
|
|
298
|
+
/**
|
|
299
|
+
* Get the network-appropriate contract address for validator registration
|
|
300
|
+
* @param {CoinConfig} coinConfig - The coin configuration object
|
|
301
|
+
* @returns {string} The contract address for the network
|
|
302
|
+
*/
|
|
303
|
+
getContractAddressForValidatorRegistration(coinConfig) {
|
|
304
|
+
const isTestnet = coinConfig.network.type === 'testnet';
|
|
305
|
+
return isTestnet
|
|
306
|
+
? constants_1.VALIDATOR_REGISTRATION_STAKER_CONTRACT_ADDRESS_TESTNET
|
|
307
|
+
: constants_1.VALIDATOR_REGISTRATION_STAKER_CONTRACT_ADDRESS_MAINNET;
|
|
308
|
+
}
|
|
275
309
|
/**
|
|
276
310
|
* Check if an address is a valid delegation contract address for any network
|
|
277
311
|
* @param {string} address - The address to check
|
|
@@ -303,6 +337,18 @@ class Utils {
|
|
|
303
337
|
throw new Error(`Invalid staking contract address. Expected ${expectedAddress} for ${coinConfig.network.type}, got ${address}`);
|
|
304
338
|
}
|
|
305
339
|
}
|
|
340
|
+
/**
|
|
341
|
+
* Validate that the contract address matches the expected stargate address for the network
|
|
342
|
+
* @param {string} address - The contract address to validate
|
|
343
|
+
* @param {CoinConfig} coinConfig - The coin configuration object
|
|
344
|
+
* @throws {Error} If the address doesn't match the expected contract address
|
|
345
|
+
*/
|
|
346
|
+
validateContractAddressForValidatorRegistration(address, coinConfig) {
|
|
347
|
+
const expectedAddress = this.getContractAddressForValidatorRegistration(coinConfig);
|
|
348
|
+
if (address.toLowerCase() !== expectedAddress.toLowerCase()) {
|
|
349
|
+
throw new Error(`Invalid contract address for validator registration. Expected ${expectedAddress} for ${coinConfig.network.type}, got ${address}`);
|
|
350
|
+
}
|
|
351
|
+
}
|
|
306
352
|
/**
|
|
307
353
|
* Validate that a contract address matches the expected stargate contract for the network
|
|
308
354
|
* @param {string} address - The contract address to validate
|
|
@@ -319,4 +365,4 @@ class Utils {
|
|
|
319
365
|
exports.Utils = Utils;
|
|
320
366
|
const utils = new Utils();
|
|
321
367
|
exports.default = utils;
|
|
322
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGliL3V0aWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBLGdEQUE0RTtBQUM1RSxvRUFBeUM7QUFDekMscURBQW1EO0FBQ25ELG1EQUF3RjtBQUN4RiwyREFLa0M7QUFDbEMsMkNBa0JxQjtBQUNyQix1Q0FBb0M7QUFHcEMsTUFBYSxLQUFLO0lBQ2hCLGNBQWMsQ0FBQyxPQUFlO1FBQzVCLE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQyxPQUFPLEVBQUUsOEJBQWtCLENBQUMsQ0FBQztJQUN0RCxDQUFDO0lBRUQsY0FBYyxDQUFDLElBQVk7UUFDekIsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksRUFBRSwrQkFBbUIsQ0FBQyxDQUFDO0lBQ3BELENBQUM7SUFFRCxpQkFBaUIsQ0FBQyxHQUFXO1FBQzNCLElBQUksQ0FBQztZQUNILElBQUksaUJBQU8sQ0FBQyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDO1lBQzFCLE9BQU8sSUFBSSxDQUFDO1FBQ2QsQ0FBQztRQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7WUFDWCxPQUFPLEtBQUssQ0FBQztRQUNmLENBQUM7SUFDSCxDQUFDO0lBRUQsZ0JBQWdCLENBQUMsR0FBVztRQUMxQixJQUFJLENBQUM7WUFDSCxJQUFJLGlCQUFPLENBQUMsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQztZQUMxQixPQUFPLElBQUksQ0FBQztRQUNkLENBQUM7UUFBQyxPQUFPLENBQUMsRUFBRSxDQUFDO1lBQ1gsT0FBTyxLQUFLLENBQUM7UUFDZixDQUFDO0lBQ0gsQ0FBQztJQUVELGdCQUFnQixDQUFDLFNBQWlCO1FBQ2hDLE1BQU0sSUFBSSxLQUFLLENBQUMsd0JBQXdCLENBQUMsQ0FBQztJQUM1QyxDQUFDO0lBRUQsb0JBQW9CLENBQUMsSUFBWTtRQUMvQixPQUFPLElBQUksQ0FB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LHdDQUE0QixDQUFDLFdBQVcsRUFBRSxDQUNuSCxDQUFDO0lBQ0osQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0gsOEJBQThCLENBQUMsT0FBZSxFQUFFLFVBQWdDO1FBQzlFLE1BQU0sZUFBZSxHQUFHLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUNsRSxJQUFJLE9BQU8sQ0FBQyxXQUFXLEVBQUUsS0FBSyxlQUFlLENBQUMsV0FBVyxFQUFFLEVBQUUsQ0FBQztZQUM1RCxNQUFNLElBQUksS0FBSyxDQUNiLDhDQUE4QyxlQUFlLFFBQVEsVUFBVSxDQUFDLE9BQU8sQ0FBQyxJQUFJLFNBQVMsT0FBTyxFQUFFLENBQy9HLENBQUM7UUFDSixDQUFDO0lBQ0gsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0gsaUNBQWlDLENBQUMsT0FBZSxFQUFFLFVBQWdDO1FBQ2pGLE1BQU0sZUFBZSxHQUFHLElBQUksQ0FBQywyQkFBMkIsQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUNyRSxJQUFJLE9BQU8sQ0FBQyxXQUFXLEVBQUUsS0FBSyxlQUFlLENBQUMsV0FBVyxFQUFFLEVBQUUsQ0FBQztZQUM1RCxNQUFNLElBQUksS0FBSyxDQUNiLGlEQUFpRCxlQUFlLFFBQVEsVUFBVSxDQUFDLE9BQU8sQ0FBQyxJQUFJLFNBQVMsT0FBTyxFQUFFLENBQ2xILENBQUM7UUFDSixDQUFDO0lBQ0gsQ0FBQztDQUNGO0FBdFZELHNCQXNWQztBQUVELE1BQU0sS0FBSyxHQUFHLElBQUksS0FBSyxFQUFFLENBQUM7QUFFMUIsa0JBQWUsS0FBSyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSGV4VUludCwgVHJhbnNhY3Rpb24sIFRyYW5zYWN0aW9uQ2xhdXNlIH0gZnJvbSAnQHZlY2hhaW4vc2RrLWNvcmUnO1xuaW1wb3J0IEV0aGVyZXVtQWJpIGZyb20gJ2V0aGVyZXVtanMtYWJpJztcbmltcG9ydCB7IGFkZEhleFByZWZpeCwgQk4gfSBmcm9tICdldGhlcmV1bWpzLXV0aWwnO1xuaW1wb3J0IHsgQmFzZVV0aWxzLCBUcmFuc2FjdGlvblJlY2lwaWVudCwgVHJhbnNhY3Rpb25UeXBlIH0gZnJvbSAnQGJpdGdvLWJldGEvc2RrLWNvcmUnO1xuaW1wb3J0IHtcbiAgdjRDcmVhdGVGb3J3YXJkZXJNZXRob2RJZCxcbiAgZmx1c2hGb3J3YXJkZXJUb2tlbnNNZXRob2RJZFY0LFxuICBnZXRSYXdEZWNvZGVkLFxuICBnZXRCdWZmZXJlZEJ5dGVDb2RlLFxufSBmcm9tICdAYml0Z28tYmV0YS9hYnN0cmFjdC1ldGgnO1xuaW1wb3J0IHtcbiAgVFJBTlNGRVJfVE9LRU5fTUVUSE9EX0lELFxuICBTVEFLSU5HX01FVEhPRF9JRCxcbiAgU1RBS0VfQ0xBVVNFX01FVEhPRF9JRCxcbiAgRVhJVF9ERUxFR0FUSU9OX01FVEhPRF9JRCxcbiAgQlVSTl9ORlRfTUVUSE9EX0lELFxuICBWRVRfQUREUkVTU19MRU5HVEgsXG4gIFZFVF9CTE9DS19JRF9MRU5HVEgsXG4gIFZFVF9UUkFOU0FDVElPTl9JRF9MRU5HVEgsXG4gIFRSQU5TRkVSX05GVF9NRVRIT0RfSUQsXG4gIENMQUlNX0JBU0VfUkVXQVJEU19NRVRIT0RfSUQsXG4gIENMQUlNX1NUQUtJTkdfUkVXQVJEU19NRVRIT0RfSUQsXG4gIFNUQVJHQVRFX05GVF9BRERSRVNTLFxuICBTVEFSR0FURV9ORlRfQUREUkVTU19URVNUTkVULFxuICBTVEFSR0FURV9ERUxFR0FUSU9OX0FERFJFU1MsXG4gIERFTEVHQVRFX0NMQVVTRV9NRVRIT0RfSUQsXG4gIFNUQVJHQVRFX0NPTlRSQUNUX0FERFJFU1NfVEVTVE5FVCxcbiAgU1RBUkdBVEVfREVMRUdBVElPTl9BRERSRVNTX1RFU1RORVQsXG59IGZyb20gJy4vY29uc3RhbnRzJztcbmltcG9ydCB7IEtleVBhaXIgfSBmcm9tICcuL2tleVBhaXInO1xuaW1wb3J0IHsgQmFzZUNvaW4gYXMgQ29pbkNvbmZpZyB9IGZyb20gJ0BiaXRnby1iZXRhL3N0YXRpY3MnO1xuXG5leHBvcnQgY2xhc3MgVXRpbHMgaW1wbGVtZW50cyBCYXNlVXRpbHMge1xuICBpc1ZhbGlkQWRkcmVzcyhhZGRyZXNzOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5pc1ZhbGlkSGV4KGFkZHJlc3MsIFZFVF9BRERSRVNTX0xFTkdUSCk7XG4gIH1cblxuICBpc1ZhbGlkQmxvY2tJZChoYXNoOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5pc1ZhbGlkSGV4KGhhc2gsIFZFVF9CTE9DS19JRF9MRU5HVEgpO1xuICB9XG5cbiAgaXNWYWxpZFByaXZhdGVLZXkoa2V5OiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICB0cnkge1xuICAgICAgbmV3IEtleVBhaXIoeyBwcnY6IGtleSB9KTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cblxuICBpc1ZhbGlkUHVibGljS2V5KGtleTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgdHJ5IHtcbiAgICAgIG5ldyBLZXlQYWlyKHsgcHViOiBrZXkgfSk7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgaXNWYWxpZFNpZ25hdHVyZShzaWduYXR1cmU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHRocm93IG5ldyBFcnJvcignTWV0aG9kIG5vdCBpbXBsZW1lbnRlZCcpO1xuICB9XG5cbiAgaXNWYWxpZFRyYW5zYWN0aW9uSWQodHhJZDogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuaXNWYWxpZEhleCh0eElkLCBWRVRfVFJBTlNBQ1RJT05fSURfTEVOR1RIKTtcbiAgfVxuXG4gIGlzVmFsaWRIZXgodmFsdWU6IHN0cmluZywgbGVuZ3RoOiBudW1iZXIpOiBib29sZWFuIHtcbiAgICBjb25zdCByZWdleCA9IG5ldyBSZWdFeHAoYF4oMHh8MFgpW2EtZkEtRjAtOV17JHtsZW5ndGh9fSRgKTtcbiAgICByZXR1cm4gcmVnZXgudGVzdCh2YWx1ZSk7XG4gIH1cblxuICBkZXNlcmlhbGl6ZVRyYW5zYWN0aW9uKHNlcmlhbGl6ZWRUcmFuc2FjdGlvbjogc3RyaW5nKTogVHJhbnNhY3Rpb24ge1xuICAgIGNvbnN0IHR4Qnl0ZXMgPSBIZXhVSW50Lm9mKHNlcmlhbGl6ZWRUcmFuc2FjdGlvbikuYnl0ZXM7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBUcmFuc2FjdGlvbi5kZWNvZGUodHhCeXRlcywgZmFsc2UpO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgaWYgKGVyci5tZXNzYWdlPy5pbmNsdWRlcygnRXhwZWN0ZWQgOSBpdGVtcywgYnV0IGdvdCAxMCcpKSB7XG4gICAgICAgIC8vIExpa2VseSBzaWduZWQsIHNvIHJldHJ5IHdpdGggaXNTaWduZWQgPSB0cnVlXG4gICAgICAgIHJldHVybiBUcmFuc2FjdGlvbi5kZWNvZGUodHhCeXRlcywgdHJ1ZSk7XG4gICAgICB9XG4gICAgICB0aHJvdyBlcnI7XG4gICAgfVxuICB9XG5cbiAgZ2V0VHJhbnNhY3Rpb25UeXBlRnJvbUNsYXVzZShjbGF1c2VzOiBUcmFuc2FjdGlvbkNsYXVzZVtdKTogVHJhbnNhY3Rpb25UeXBlIHtcbiAgICBpZiAoY2xhdXNlc1swXS5kYXRhID09PSAnMHgnKSB7XG4gICAgICByZXR1cm4gVHJhbnNhY3Rpb25UeXBlLlNlbmQ7XG4gICAgfSBlbHNlIGlmIChjbGF1c2VzWzBdLmRhdGEuc3RhcnRzV2l0aCh2NENyZWF0ZUZvcndhcmRlck1ldGhvZElkKSkge1xuICAgICAgcmV0dXJuIFRyYW5zYWN0aW9uVHlwZS5BZGRyZXNzSW5pdGlhbGl6YXRpb247XG4gICAgfSBlbHNlIGlmIChjbGF1c2VzWzBdLmRhdGEuc3RhcnRzV2l0aChmbHVzaEZvcndhcmRlclRva2Vuc01ldGhvZElkVjQpKSB7XG4gICAgICByZXR1cm4gVHJhbnNhY3Rpb25UeXBlLkZsdXNoVG9rZW5zO1xuICAgIH0gZWxzZSBpZiAoY2xhdXNlc1swXS5kYXRhLnN0YXJ0c1dpdGgoVFJBTlNGRVJfVE9LRU5fTUVUSE9EX0lEKSkge1xuICAgICAgcmV0dXJuIFRyYW5zYWN0aW9uVHlwZS5TZW5kVG9rZW47XG4gICAgfSBlbHNlIGlmIChjbGF1c2VzWzBdLmRhdGEuc3RhcnRzV2l0aChTVEFLSU5HX01FVEhPRF9JRCkpIHtcbiAgICAgIHJldHVybiBUcmFuc2FjdGlvblR5cGUuQ29udHJhY3RDYWxsO1xuICAgIH0gZWxzZSBpZiAoY2xhdXNlc1swXS5kYXRhLnN0YXJ0c1dpdGgoU1RBS0VfQ0xBVVNFX01FVEhPRF9JRCkpIHtcbiAgICAgIHJldHVybiBUcmFuc2FjdGlvblR5cGUuU3Rha2luZ0FjdGl2YXRlO1xuICAgIH0gZWxzZSBpZiAoY2xhdXNlc1swXS5kYXRhLnN0YXJ0c1dpdGgoREVMRUdBVEVfQ0xBVVNFX01FVEhPRF9JRCkpIHtcbiAgICAgIHJldHVybiBUcmFuc2FjdGlvblR5cGUuU3Rha2luZ0RlbGVnYXRlO1xuICAgIH0gZWxzZSBpZiAoY2xhdXNlc1swXS5kYXRhLnN0YXJ0c1dpdGgoRVhJVF9ERUxFR0FUSU9OX01FVEhPRF9JRCkpIHtcbiAgICAgIHJldHVybiBUcmFuc2FjdGlvblR5cGUuU3Rha2luZ1VubG9jaztcbiAgICB9IGVsc2UgaWYgKGNsYXVzZXNbMF0uZGF0YS5zdGFydHNXaXRoKEJVUk5fTkZUX01FVEhPRF9JRCkpIHtcbiAgICAgIHJldHVybiBUcmFuc2FjdGlvblR5cGUuU3Rha2luZ1dpdGhkcmF3O1xuICAgIH0gZWxzZSBpZiAoXG4gICAgICBjbGF1c2VzWzBdLmRhdGEuc3RhcnRzV2l0aChDTEFJTV9CQVNFX1JFV0FSRFNfTUVUSE9EX0lEKSB8fFxuICAgICAgY2xhdXNlc1swXS5kYXRhLnN0YXJ0c1dpdGgoQ0xBSU1fU1RBS0lOR19SRVdBUkRTX01FVEhPRF9JRClcbiAgICApIHtcbiAgICAgIHJldHVybiBUcmFuc2FjdGlvblR5cGUuU3Rha2luZ0NsYWltO1xuICAgIH0gZWxzZSBpZiAoY2xhdXNlc1swXS5kYXRhLnN0YXJ0c1dpdGgoVFJBTlNGRVJfTkZUX01FVEhPRF9JRCkpIHtcbiAgICAgIHJldHVybiBUcmFuc2FjdGlvblR5cGUuU2VuZE5GVDtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIFRyYW5zYWN0aW9uVHlwZS5TZW5kVG9rZW47XG4gICAgfVxuICB9XG5cbiAgZ2V0VHJhbnNmZXJUb2tlbkRhdGEodG9BZGRyZXNzOiBzdHJpbmcsIGFtb3VudFdlaTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBjb25zdCBtZXRob2ROYW1lID0gJ3RyYW5zZmVyJztcbiAgICBjb25zdCB0eXBlcyA9IFsnYWRkcmVzcycsICd1aW50MjU2J107XG4gICAgY29uc3QgcGFyYW1zID0gW3RvQWRkcmVzcywgbmV3IEJOKGFtb3VudFdlaSldO1xuXG4gICAgY29uc3QgbWV0aG9kID0gRXRoZXJldW1BYmkubWV0aG9kSUQobWV0aG9kTmFtZSwgdHlwZXMpO1xuICAgIGNvbnN0IGFyZ3MgPSBFdGhlcmV1bUFiaS5yYXdFbmNvZGUodHlwZXMsIHBhcmFtcyk7XG5cbiAgICByZXR1cm4gYWRkSGV4UHJlZml4KEJ1ZmZlci5jb25jYXQoW21ldGhvZCwgYXJnc10pLnRvU3RyaW5nKCdoZXgnKSk7XG4gIH1cblxuICBnZXRUcmFuc2Zlck5GVERhdGEoZnJvbTogc3RyaW5nLCB0bzogc3RyaW5nLCB0b2tlbklkOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGNvbnN0IG1ldGhvZE5hbWUgPSAndHJhbnNmZXJGcm9tJztcbiAgICBjb25zdCB0eXBlcyA9IFsnYWRkcmVzcycsICdhZGRyZXNzJywgJ3VpbnQyNTYnXTtcbiAgICBjb25zdCBwYXJhbXMgPSBbZnJvbSwgdG8sIG5ldyBCTih0b2tlbklkKV07XG5cbiAgICBjb25zdCBtZXRob2QgPSBFdGhlcmV1bUFiaS5tZXRob2RJRChtZXRob2ROYW1lLCB0eXBlcyk7XG4gICAgY29uc3QgYXJncyA9IEV0aGVyZXVtQWJpLnJhd0VuY29kZSh0eXBlcywgcGFyYW1zKTtcblxuICAgIHJldHVybiBhZGRIZXhQcmVmaXgoQnVmZmVyLmNvbmNhdChbbWV0aG9kLCBhcmdzXSkudG9TdHJpbmcoJ2hleCcpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZWNvZGVzIHN0YWtpbmcgdHJhbnNhY3Rpb24gZGF0YSB0byBleHRyYWN0IGxldmVsSWQgYW5kIGF1dG9yZW5ld1xuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gZGF0YSAtIFRoZSBlbmNvZGVkIHRyYW5zYWN0aW9uIGRhdGFcbiAgICogQHJldHVybnMge29iamVjdH0gLSBPYmplY3QgY29udGFpbmluZyBsZXZlbElkIGFuZCBhdXRvcmVuZXdcbiAgICovXG4gIGRlY29kZVN0YWtpbmdEYXRhKGRhdGE6IHN0cmluZyk6IHsgbGV2ZWxJZDogbnVtYmVyOyBhdXRvcmVuZXc6IGJvb2xlYW4gfSB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHBhcmFtZXRlcnMgPSBkYXRhLnNsaWNlKDEwKTtcblxuICAgICAgLy8gRGVjb2RlIHVzaW5nIGV0aGVyZXVtanMtYWJpIGRpcmVjdGx5XG4gICAgICBjb25zdCBkZWNvZGVkID0gRXRoZXJldW1BYmkucmF3RGVjb2RlKFsndWludDgnLCAnYm9vbCddLCBCdWZmZXIuZnJvbShwYXJhbWV0ZXJzLCAnaGV4JykpO1xuXG4gICAgICByZXR1cm4ge1xuICAgICAgICBsZXZlbElkOiBOdW1iZXIoZGVjb2RlZFswXSksXG4gICAgICAgIGF1dG9yZW5ldzogQm9vbGVhbihkZWNvZGVkWzFdKSxcbiAgICAgIH07XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgRmFpbGVkIHRvIGRlY29kZSBzdGFraW5nIGRhdGE6ICR7ZXJyb3IubWVzc2FnZX1gKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogRGVjb2RlcyBzdGFraW5nIHRyYW5zYWN0aW9uIGRhdGEgdG8gZXh0cmFjdCBsZXZlbElkIGFuZCBhdXRvcmVuZXdcbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IGRhdGEgLSBUaGUgZW5jb2RlZCB0cmFuc2FjdGlvbiBkYXRhXG4gICAqIEByZXR1cm5zIHtvYmplY3R9IC0gT2JqZWN0IGNvbnRhaW5pbmcgbGV2ZWxJZCBhbmQgYXV0b3JlbmV3XG4gICAqL1xuICBkZWNvZGVTdGFrZUNsYXVzZURhdGEoZGF0YTogc3RyaW5nKTogeyBsZXZlbElkOiBudW1iZXIgfSB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHBhcmFtZXRlcnMgPSBkYXRhLnNsaWNlKDEwKTtcblxuICAgICAgLy8gRGVjb2RlIHVzaW5nIGV0aGVyZXVtanMtYWJpIGRpcmVjdGx5XG4gICAgICBjb25zdCBkZWNvZGVkID0gRXRoZXJldW1BYmkucmF3RGVjb2RlKFsndWludDgnXSwgQnVmZmVyLmZyb20ocGFyYW1ldGVycywgJ2hleCcpKTtcblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgbGV2ZWxJZDogTnVtYmVyKGRlY29kZWRbMF0pLFxuICAgICAgfTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBGYWlsZWQgdG8gZGVjb2RlIHN0YWtpbmcgZGF0YTogJHtlcnJvci5tZXNzYWdlfWApO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBEZWNvZGVzIGRlbGVnYXRlIHRyYW5zYWN0aW9uIGRhdGEgdG8gZXh0cmFjdCB0b2tlbklkIGFuZCB2YWxpZGF0b3JBZGRyZXNzXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBkYXRhIC0gVGhlIGVuY29kZWQgdHJhbnNhY3Rpb24gZGF0YVxuICAgKiBAcmV0dXJucyB7b2JqZWN0fSAtIE9iamVjdCBjb250YWluaW5nIGxldmVsSWQgYW5kIHZhbGlkYXRvciBhZGRyZXNzXG4gICAqL1xuICBkZWNvZGVEZWxlZ2F0ZUNsYXVzZURhdGEoZGF0YTogc3RyaW5nKTogeyB0b2tlbklkOiBzdHJpbmc7IHZhbGlkYXRvcjogc3RyaW5nIH0ge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBwYXJhbWV0ZXJzID0gZGF0YS5zbGljZSgxMCk7XG5cbiAgICAgIC8vIERlY29kZSB1c2luZyBldGhlcmV1bWpzLWFiaSBkaXJlY3RseVxuICAgICAgY29uc3QgZGVjb2RlZCA9IEV0aGVyZXVtQWJpLnJhd0RlY29kZShbJ3VpbnQyNTYnLCAnYWRkcmVzcyddLCBCdWZmZXIuZnJvbShwYXJhbWV0ZXJzLCAnaGV4JykpO1xuXG4gICAgICByZXR1cm4ge1xuICAgICAgICB0b2tlbklkOiBTdHJpbmcoZGVjb2RlZFswXSksXG4gICAgICAgIHZhbGlkYXRvcjogYWRkSGV4UHJlZml4KGRlY29kZWRbMV0udG9TdHJpbmcoKSkudG9Mb3dlckNhc2UoKSxcbiAgICAgIH07XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgRmFpbGVkIHRvIGRlY29kZSBkZWxlZ2F0aW9uIGRhdGE6ICR7ZXJyb3IubWVzc2FnZX1gKTtcbiAgICB9XG4gIH1cblxuICBkZWNvZGVUcmFuc2ZlclRva2VuRGF0YShkYXRhOiBzdHJpbmcpOiBUcmFuc2FjdGlvblJlY2lwaWVudCB7XG4gICAgY29uc3QgW2FkZHJlc3MsIGFtb3VudF0gPSBnZXRSYXdEZWNvZGVkKFxuICAgICAgWydhZGRyZXNzJywgJ3VpbnQyNTYnXSxcbiAgICAgIGdldEJ1ZmZlcmVkQnl0ZUNvZGUoVFJBTlNGRVJfVE9LRU5fTUVUSE9EX0lELCBkYXRhKVxuICAgICk7XG4gICAgY29uc3QgcmVjaXBpZW50QWRkcmVzcyA9IGFkZEhleFByZWZpeChhZGRyZXNzLnRvU3RyaW5nKCkpLnRvTG93ZXJDYXNlKCk7XG4gICAgcmV0dXJuIHtcbiAgICAgIGFkZHJlc3M6IHJlY2lwaWVudEFkZHJlc3MsXG4gICAgICBhbW91bnQ6IGFtb3VudC50b1N0cmluZygpLFxuICAgIH07XG4gIH1cblxuICBkZWNvZGVUcmFuc2Zlck5GVERhdGEoZGF0YTogc3RyaW5nKToge1xuICAgIHJlY2lwaWVudHM6IFRyYW5zYWN0aW9uUmVjaXBpZW50W107XG4gICAgc2VuZGVyOiBzdHJpbmc7XG4gICAgdG9rZW5JZDogc3RyaW5nO1xuICB9IHtcbiAgICBjb25zdCBbZnJvbSwgdG8sIHRva2VuSWRCTl0gPSBnZXRSYXdEZWNvZGVkKFxuICAgICAgWydhZGRyZXNzJywgJ2FkZHJlc3MnLCAndWludDI1NiddLFxuICAgICAgZ2V0QnVmZmVyZWRCeXRlQ29kZShUUkFOU0ZFUl9ORlRfTUVUSE9EX0lELCBkYXRhKVxuICAgICk7XG4gICAgY29uc3QgcmVjaXBpZW50QWRkcmVzcyA9IGFkZEhleFByZWZpeCh0by50b1N0cmluZygpKS50b0xvd2VyQ2FzZSgpO1xuICAgIGNvbnN0IHJlY2lwaWVudDogVHJhbnNhY3Rpb25SZWNpcGllbnQgPSB7XG4gICAgICBhZGRyZXNzOiByZWNpcGllbnRBZGRyZXNzLFxuICAgICAgYW1vdW50OiAnMScsXG4gICAgfTtcbiAgICBjb25zdCBzZW5kZXIgPSBhZGRIZXhQcmVmaXgoZnJvbS50b1N0cmluZygpKS50b0xvd2VyQ2FzZSgpO1xuICAgIGNvbnN0IHRva2VuSWQgPSB0b2tlbklkQk4udG9TdHJpbmcoKTtcbiAgICByZXR1cm4ge1xuICAgICAgcmVjaXBpZW50czogW3JlY2lwaWVudF0sXG4gICAgICBzZW5kZXIsXG4gICAgICB0b2tlbklkLFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogRGVjb2RlcyBjbGFpbSByZXdhcmRzIHRyYW5zYWN0aW9uIGRhdGEgdG8gZXh0cmFjdCB0b2tlbklkXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBkYXRhIC0gVGhlIGVuY29kZWQgY2xhaW0gcmV3YXJkcyBtZXRob2QgY2FsbCBkYXRhXG4gICAqIEByZXR1cm5zIHtzdHJpbmd9IC0gVGhlIHRva2VuSWQgYXMgYSBzdHJpbmdcbiAgICovXG4gIGRlY29kZUNsYWltUmV3YXJkc0RhdGEoZGF0YTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICB0cnkge1xuICAgICAgLy8gUmVtb3ZlIG1ldGhvZCBJRCAoZmlyc3QgMTAgY2hhcmFjdGVyczogJzB4JyArIDQtYnl0ZSBtZXRob2QgSUQpXG4gICAgICBjb25zdCBtZXRob2REYXRhID0gZGF0YS5zbGljZSgxMCk7XG5cbiAgICAgIC8vIEV4dHJhY3QgdG9rZW5JZCBmcm9tIGZpcnN0IDMyLWJ5dGUgc2xvdFxuICAgICAgLy8gVGhlIHRva2VuSWQgaXMgYSB1aW50MjU2LCBzbyB3ZSB0YWtlIHRoZSBmdWxsIDY0IGhleCBjaGFyYWN0ZXJzXG4gICAgICBjb25zdCB0b2tlbklkSGV4ID0gbWV0aG9kRGF0YS5zbGljZSgwLCA2NCk7XG5cbiAgICAgIC8vIENvbnZlcnQgaGV4IHRvIGRlY2ltYWwgc3RyaW5nXG4gICAgICByZXR1cm4gQmlnSW50KCcweCcgKyB0b2tlbklkSGV4KS50b1N0cmluZygpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEZhaWxlZCB0byBkZWNvZGUgY2xhaW0gcmV3YXJkcyBkYXRhOiAke2Vycm9yLm1lc3NhZ2V9YCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIERlY29kZXMgZXhpdCBkZWxlZ2F0aW9uIHRyYW5zYWN0aW9uIGRhdGEgdG8gZXh0cmFjdCB0b2tlbklkXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBkYXRhIC0gVGhlIGVuY29kZWQgZXhpdCBkZWxlZ2F0aW9uIG1ldGhvZCBjYWxsIGRhdGFcbiAgICogQHJldHVybnMge3N0cmluZ30gLSBUaGUgdG9rZW5JZCBhcyBhIHN0cmluZ1xuICAgKi9cbiAgZGVjb2RlRXhpdERlbGVnYXRpb25EYXRhKGRhdGE6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgdHJ5IHtcbiAgICAgIGlmICghZGF0YS5zdGFydHNXaXRoKEVYSVRfREVMRUdBVElPTl9NRVRIT0RfSUQpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBleGl0IGRlbGVnYXRpb24gbWV0aG9kIGRhdGEnKTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgdG9rZW5JZEhleCA9IGRhdGEuc2xpY2UoRVhJVF9ERUxFR0FUSU9OX01FVEhPRF9JRC5sZW5ndGgpO1xuICAgICAgLy8gQ29udmVydCBoZXggdG8gZGVjaW1hbCAobWF0Y2hpbmcgb3JpZ2luYWwgcGFyc2VJbnQgbG9naWMpXG4gICAgICByZXR1cm4gcGFyc2VJbnQodG9rZW5JZEhleCwgMTYpLnRvU3RyaW5nKCk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgRmFpbGVkIHRvIGRlY29kZSBleGl0IGRlbGVnYXRpb24gZGF0YTogJHtlcnJvci5tZXNzYWdlfWApO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBEZWNvZGVzIGJ1cm4gTkZUIHRyYW5zYWN0aW9uIGRhdGEgdG8gZXh0cmFjdCB0b2tlbklkXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBkYXRhIC0gVGhlIGVuY29kZWQgYnVybiBORlQgbWV0aG9kIGNhbGwgZGF0YVxuICAgKiBAcmV0dXJucyB7c3RyaW5nfSAtIFRoZSB0b2tlbklkIGFzIGEgc3RyaW5nXG4gICAqL1xuICBkZWNvZGVCdXJuTmZ0RGF0YShkYXRhOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHRyeSB7XG4gICAgICBpZiAoIWRhdGEuc3RhcnRzV2l0aChCVVJOX05GVF9NRVRIT0RfSUQpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBidXJuIE5GVCBtZXRob2QgZGF0YScpO1xuICAgICAgfVxuXG4gICAgICBjb25zdCB0b2tlbklkSGV4ID0gZGF0YS5zbGljZShCVVJOX05GVF9NRVRIT0RfSUQubGVuZ3RoKTtcbiAgICAgIC8vIENvbnZlcnQgaGV4IHRvIGRlY2ltYWwgKG1hdGNoaW5nIG9yaWdpbmFsIHBhcnNlSW50IGxvZ2ljKVxuICAgICAgcmV0dXJuIHBhcnNlSW50KHRva2VuSWRIZXgsIDE2KS50b1N0cmluZygpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEZhaWxlZCB0byBkZWNvZGUgYnVybiBORlQgZGF0YTogJHtlcnJvci5tZXNzYWdlfWApO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIG5ldHdvcmstYXBwcm9wcmlhdGUgc3RhcmdhdGUgY29udHJhY3QgYWRkcmVzc1xuICAgKiBAcGFyYW0ge0NvaW5Db25maWd9IGNvaW5Db25maWcgLSBUaGUgY29pbiBjb25maWd1cmF0aW9uIG9iamVjdFxuICAgKiBAcmV0dXJucyB7c3RyaW5nfSBUaGUgZGVsZWdhdGlvbiBjb250cmFjdCBhZGRyZXNzIGZvciB0aGUgbmV0d29ya1xuICAgKi9cbiAgZ2V0RGVmYXVsdERlbGVnYXRpb25BZGRyZXNzKGNvaW5Db25maWc6IFJlYWRvbmx5PENvaW5Db25maWc+KTogc3RyaW5nIHtcbiAgICBjb25zdCBpc1Rlc3RuZXQgPSBjb2luQ29uZmlnLm5ldHdvcmsudHlwZSA9PT0gJ3Rlc3RuZXQnO1xuICAgIHJldHVybiBpc1Rlc3RuZXQgPyBTVEFSR0FURV9DT05UUkFDVF9BRERSRVNTX1RFU1RORVQgOiBTVEFSR0FURV9ERUxFR0FUSU9OX0FERFJFU1M7XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSBuZXR3b3JrLWFwcHJvcHJpYXRlIHN0YWtpbmcgY29udHJhY3QgYWRkcmVzc1xuICAgKiBAcGFyYW0ge0NvaW5Db25maWd9IGNvaW5Db25maWcgLSBUaGUgY29pbiBjb25maWd1cmF0aW9uIG9iamVjdFxuICAgKiBAcmV0dXJucyB7c3RyaW5nfSBUaGUgc3Rha2luZyBjb250cmFjdCBhZGRyZXNzIGZvciB0aGUgbmV0d29ya1xuICAgKi9cbiAgZ2V0RGVmYXVsdFN0YWtpbmdBZGRyZXNzKGNvaW5Db25maWc6IFJlYWRvbmx5PENvaW5Db25maWc+KTogc3RyaW5nIHtcbiAgICBjb25zdCBpc1Rlc3RuZXQgPSBjb2luQ29uZmlnLm5ldHdvcmsudHlwZSA9PT0gJ3Rlc3RuZXQnO1xuICAgIHJldHVybiBpc1Rlc3RuZXQgPyBTVEFSR0FURV9DT05UUkFDVF9BRERSRVNTX1RFU1RORVQgOiBTVEFSR0FURV9ORlRfQUREUkVTUztcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVjayBpZiBhbiBhZGRyZXNzIGlzIGEgdmFsaWQgZGVsZWdhdGlvbiBjb250cmFjdCBhZGRyZXNzIGZvciBhbnkgbmV0d29ya1xuICAgKiBAcGFyYW0ge3N0cmluZ30gYWRkcmVzcyAtIFRoZSBhZGRyZXNzIHRvIGNoZWNrXG4gICAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHRoZSBhZGRyZXNzIGlzIGEgZGVsZWdhdGlvbiBjb250cmFjdCBhZGRyZXNzXG4gICAqL1xuICBpc0RlbGVnYXRpb25Db250cmFjdEFkZHJlc3MoYWRkcmVzczogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgY29uc3QgbG93ZXJBZGRyZXNzID0gYWRkcmVzcy50b0xvd2VyQ2FzZSgpO1xuICAgIHJldHVybiAoXG4gICAgICBsb3dlckFkZHJlc3MgPT09IFNUQVJHQVRFX0RFTEVHQVRJT05fQUREUkVTUy50b0xvd2VyQ2FzZSgpIHx8XG4gICAgICBsb3dlckFkZHJlc3MgPT09IFNUQVJHQVRFX0RFTEVHQVRJT05fQUREUkVTU19URVNUTkVULnRvTG93ZXJDYXNlKClcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrIGlmIGFuIGFkZHJlc3MgaXMgYSB2YWxpZCBORlQgY29udHJhY3QgYWRkcmVzcyBmb3IgYW55IG5ldHdvcmtcbiAgICogQHBhcmFtIHtzdHJpbmd9IGFkZHJlc3MgLSBUaGUgYWRkcmVzcyB0byBjaGVja1xuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB0aGUgYWRkcmVzcyBpcyBhbiBORlQgY29udHJhY3QgYWRkcmVzc1xuICAgKi9cbiAgaXNOZnRDb250cmFjdEFkZHJlc3MoYWRkcmVzczogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgY29uc3QgbG93ZXJBZGRyZXNzID0gYWRkcmVzcy50b0xvd2VyQ2FzZSgpO1xuICAgIHJldHVybiAoXG4gICAgICBsb3dlckFkZHJlc3MgPT09IFNUQVJHQVRFX05GVF9BRERSRVNTLnRvTG93ZXJDYXNlKCkgfHwgbG93ZXJBZGRyZXNzID09PSBTVEFSR0FURV9ORlRfQUREUkVTU19URVNUTkVULnRvTG93ZXJDYXNlKClcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIFZhbGlkYXRlIHRoYXQgYSBjb250cmFjdCBhZGRyZXNzIG1hdGNoZXMgdGhlIGV4cGVjdGVkIHN0YXJnYXRlIGFkZHJlc3MgZm9yIHRoZSBuZXR3b3JrXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBhZGRyZXNzIC0gVGhlIGNvbnRyYWN0IGFkZHJlc3MgdG8gdmFsaWRhdGVcbiAgICogQHBhcmFtIHtDb2luQ29uZmlnfSBjb2luQ29uZmlnIC0gVGhlIGNvaW4gY29uZmlndXJhdGlvbiBvYmplY3RcbiAgICogQHRocm93cyB7RXJyb3J9IElmIHRoZSBhZGRyZXNzIGRvZXNuJ3QgbWF0Y2ggdGhlIGV4cGVjdGVkIGNvbnRyYWN0IGFkZHJlc3NcbiAgICovXG4gIHZhbGlkYXRlU3Rha2luZ0NvbnRyYWN0QWRkcmVzcyhhZGRyZXNzOiBzdHJpbmcsIGNvaW5Db25maWc6IFJlYWRvbmx5PENvaW5Db25maWc+KTogdm9pZCB7XG4gICAgY29uc3QgZXhwZWN0ZWRBZGRyZXNzID0gdGhpcy5nZXREZWZhdWx0U3Rha2luZ0FkZHJlc3MoY29pbkNvbmZpZyk7XG4gICAgaWYgKGFkZHJlc3MudG9Mb3dlckNhc2UoKSAhPT0gZXhwZWN0ZWRBZGRyZXNzLnRvTG93ZXJDYXNlKCkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYEludmFsaWQgc3Rha2luZyBjb250cmFjdCBhZGRyZXNzLiBFeHBlY3RlZCAke2V4cGVjdGVkQWRkcmVzc30gZm9yICR7Y29pbkNvbmZpZy5uZXR3b3JrLnR5cGV9LCBnb3QgJHthZGRyZXNzfWBcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFZhbGlkYXRlIHRoYXQgYSBjb250cmFjdCBhZGRyZXNzIG1hdGNoZXMgdGhlIGV4cGVjdGVkIHN0YXJnYXRlIGNvbnRyYWN0IGZvciB0aGUgbmV0d29ya1xuICAgKiBAcGFyYW0ge3N0cmluZ30gYWRkcmVzcyAtIFRoZSBjb250cmFjdCBhZGRyZXNzIHRvIHZhbGlkYXRlXG4gICAqIEBwYXJhbSB7Q29pbkNvbmZpZ30gY29pbkNvbmZpZyAtIFRoZSBjb2luIGNvbmZpZ3VyYXRpb24gb2JqZWN0XG4gICAqIEB0aHJvd3Mge0Vycm9yfSBJZiB0aGUgYWRkcmVzcyBkb2Vzbid0IG1hdGNoIHRoZSBleHBlY3RlZCBkZWxlZ2F0aW9uIGNvbnRyYWN0IGFkZHJlc3NcbiAgICovXG4gIHZhbGlkYXRlRGVsZWdhdGlvbkNvbnRyYWN0QWRkcmVzcyhhZGRyZXNzOiBzdHJpbmcsIGNvaW5Db25maWc6IFJlYWRvbmx5PENvaW5Db25maWc+KTogdm9pZCB7XG4gICAgY29uc3QgZXhwZWN0ZWRBZGRyZXNzID0gdGhpcy5nZXREZWZhdWx0RGVsZWdhdGlvbkFkZHJlc3MoY29pbkNvbmZpZyk7XG4gICAgaWYgKGFkZHJlc3MudG9Mb3dlckNhc2UoKSAhPT0gZXhwZWN0ZWRBZGRyZXNzLnRvTG93ZXJDYXNlKCkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYEludmFsaWQgZGVsZWdhdGlvbiBjb250cmFjdCBhZGRyZXNzLiBFeHBlY3RlZCAke2V4cGVjdGVkQWRkcmVzc30gZm9yICR7Y29pbkNvbmZpZy5uZXR3b3JrLnR5cGV9LCBnb3QgJHthZGRyZXNzfWBcbiAgICAgICk7XG4gICAgfVxuICB9XG59XG5cbmNvbnN0IHV0aWxzID0gbmV3IFV0aWxzKCk7XG5cbmV4cG9ydCBkZWZhdWx0IHV0aWxzO1xuIl19
|
|
368
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGliL3V0aWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBLGdEQUE0RTtBQUM1RSxvRUFBeUM7QUFDekMscURBQW1EO0FBQ25ELG1EQUF3RjtBQUN4RiwyREFLa0M7QUFDbEMsMkNBcUJxQjtBQUNyQix1Q0FBb0M7QUFHcEMsTUFBYSxLQUFLO0lBQ2hCLGNBQWMsQ0FBQyxPQUFlO1FBQzVCLE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQyxPQUFPLEVBQUUsOEJBQWtCLENBQUMsQ0FBQztJQUN0RCxDQUFDO0lBRUQsY0FBYyxDQUFDLElBQVk7UUFDekIsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksRUFBRSwrQkFBbUIsQ0FBQyxDQUFDO0lBQ3BELENBQUM7SUFFRCxpQkFBaUIsQ0FBQyxHQUFXO1FBQzNCLElBQUksQ0FBQztZQUNILElBQUksaUJBQU8sQ0FBQyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDO1lBQzFCLE9BQU8sSUFBSSxDQUFDO1FBQ2QsQ0FBQztRQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7WUFDWCxPQUFPLEtBQUssQ0FBQztRQUNmLENBQUM7SUFDSCxDQUFDO0lBRUQsZ0JBQWdCLENBQUMsR0FBVztRQUMxQixJQUFJLENBQUM7WUFDSCxJQUFJLGlCQUFPLENBQUMsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQztZQUMxQixPQUFPLElBQUksQ0FBQztRQUNkLENBQUM7UUFBQyxPQUFPLENBQUMsRUFBRSxDQUFDO1lBQ1gsT0FBTyxLQUFLLENBQUM7UUFDZixDQUFDO0lBQ0gsQ0FBQztJQUVELGdCQUFnQixDQUFDLFNBQWlCO1FBQ2hDLE1BQU0sSUFBSSxLQUFLLENBQUMsd0JBQXdCLENBQUMsQ0FBQztJQUM1QyxDQUFDO0lBRUQsb0JBQW9CLENBQUMsSUFBWTtRQUMvQixPQUFPLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxFQUFFLHFDQUF5QixDQUFDLENBQUM7SUFDMUQsQ0FBQztJQUVELFVBQVUsQ0FBQyxLQUFhLEVBQUUsTUFBYztRQUN0QyxNQUFNLEtBQUssR0FBRyxJQUFJLE1BQU0sQ0FBQyx1QkFBdUIsTUFBTSxJQUFJLENBQUMsQ0FBQztRQUM1RCxPQUFPLEtBQUssQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDM0IsQ0FBQztJQUVELHNCQUFzQixDQUFDLHFCQUE2QjtRQUNsRCxNQUFNLE9BQU8sR0FBRyxrQkFBTyxDQUFDLEVBQUUsQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDLEtBQUssQ0FBQztRQUN4RCxJQUFJLENBQUM7WUFDSCxPQUFPLHNCQUFXLENBQUMsTUFBTSxDQUFDLE9BQU8sRUFBRSxLQUFLLENBQUMsQ0FBQztRQUM1QyxDQUFDO1FBQUMsT0FBTyxHQUFHLEVBQUUsQ0FBQztZQUNiLElBQUksR0FBRyxDQUFDLE9BQU8sRUFBRSxRQUFRLENBQUMsOEJBQThCLENBQUMsRUFBRSxDQUFDO2dCQUMxRCwrQ0FBK0M7Z0JBQy9DLE9BQU8sc0JBQVcsQ0FBQyxNQUFNLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxDQUFDO1lBQzNDLENBQUM7WUFDRCxNQUFNLEdBQUcsQ0FBQztRQUNaLENBQUM7SUFDSCxDQUFDO0lBRUQsNEJBQTRCLENBQUMsT0FBNEI7UUFDdkQsSUFBSSxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxLQUFLLElBQUksRUFBRSxDQUFDO1lBQzdCLE9BQU8sMEJBQWUsQ0FBQyxJQUFJLENBQUM7UUFDOUIsQ0FBQzthQUFNLElBQUksT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsd0NBQXlCLENBQUMsRUFBRSxDQUFDO1lBQ2pFLE9BQU8sMEJBQWUsQ0FBQyxxQkFBcUIsQ0FBQztRQUMvQyxDQUFDO2FBQU0sSUFBSSxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyw2Q0FBOEIsQ0FBQyxFQUFFLENBQUM7WUFDdEUsT0FBTywwQkFBZSxDQUFDLFdBQVcsQ0FBQztRQUNyQyxDQUFDO2FBQU0sSUFBSSxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxvQ0FBd0IsQ0FBQyxFQUFFLENBQUM7WUFDaEUsT0FBTywwQkFBZSxDQUFDLFNBQVMsQ0FBQztRQUNuQyxDQUFDO2FBQU0sSUFBSSxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyw2QkFBaUIsQ0FBQyxFQUFFLENBQUM7WUFDekQsT0FBTywwQkFBZSxDQUFDLFlBQVksQ0FBQztRQUN0QyxDQUFDO2FBQU0sSUFBSSxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxrQ0FBc0IsQ0FBQyxFQUFFLENBQUM7WUFDOUQsT0FBTywwQkFBZSxDQUFDLGVBQWUsQ0FBQztRQUN6QyxDQUFDO2FBQU0sSUFBSSxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxxQ0FBeUIsQ0FBQyxFQUFFLENBQUM7WUFDakUsT0FBTywwQkFBZSxDQUFDLGVBQWUsQ0FBQztRQUN6QyxDQUFDO2FBQU0sSUFBSSxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxxQ0FBeUIsQ0FBQyxFQUFFLENBQUM7WUFDakUsT0FBTywwQkFBZSxDQUFDLGFBQWEsQ0FBQztRQUN2QyxDQUFDO2FBQU0sSUFBSSxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxvQ0FBd0IsQ0FBQyxFQUFFLENBQUM7WUFDaEUsT0FBTywwQkFBZSxDQUFDLFdBQVcsQ0FBQztRQUNyQyxDQUFDO2FBQU0sSUFBSSxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyw4QkFBa0IsQ0FBQyxFQUFFLENBQUM7WUFDMUQsT0FBTywwQkFBZSxDQUFDLGVBQWUsQ0FBQztRQUN6QyxDQUFDO2FBQU0s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Y2VzQ29udGVudCI6WyJpbXBvcnQgeyBIZXhVSW50LCBUcmFuc2FjdGlvbiwgVHJhbnNhY3Rpb25DbGF1c2UgfSBmcm9tICdAdmVjaGFpbi9zZGstY29yZSc7XG5pbXBvcnQgRXRoZXJldW1BYmkgZnJvbSAnZXRoZXJldW1qcy1hYmknO1xuaW1wb3J0IHsgYWRkSGV4UHJlZml4LCBCTiB9IGZyb20gJ2V0aGVyZXVtanMtdXRpbCc7XG5pbXBvcnQgeyBCYXNlVXRpbHMsIFRyYW5zYWN0aW9uUmVjaXBpZW50LCBUcmFuc2FjdGlvblR5cGUgfSBmcm9tICdAYml0Z28tYmV0YS9zZGstY29yZSc7XG5pbXBvcnQge1xuICB2NENyZWF0ZUZvcndhcmRlck1ldGhvZElkLFxuICBmbHVzaEZvcndhcmRlclRva2Vuc01ldGhvZElkVjQsXG4gIGdldFJhd0RlY29kZWQsXG4gIGdldEJ1ZmZlcmVkQnl0ZUNvZGUsXG59IGZyb20gJ0BiaXRnby1iZXRhL2Fic3RyYWN0LWV0aCc7XG5pbXBvcnQge1xuICBUUkFOU0ZFUl9UT0tFTl9NRVRIT0RfSUQsXG4gIFNUQUtJTkdfTUVUSE9EX0lELFxuICBTVEFLRV9DTEFVU0VfTUVUSE9EX0lELFxuICBFWElUX0RFTEVHQVRJT05fTUVUSE9EX0lELFxuICBCVVJOX05GVF9NRVRIT0RfSUQsXG4gIFZFVF9BRERSRVNTX0xFTkdUSCxcbiAgVkVUX0JMT0NLX0lEX0xFTkdUSCxcbiAgVkVUX1RSQU5TQUNUSU9OX0lEX0xFTkdUSCxcbiAgVFJBTlNGRVJfTkZUX01FVEhPRF9JRCxcbiAgQ0xBSU1fQkFTRV9SRVdBUkRTX01FVEhPRF9JRCxcbiAgQ0xBSU1fU1RBS0lOR19SRVdBUkRTX01FVEhPRF9JRCxcbiAgU1RBUkdBVEVfTkZUX0FERFJFU1MsXG4gIFNUQVJHQVRFX05GVF9BRERSRVNTX1RFU1RORVQsXG4gIFNUQVJHQVRFX0RFTEVHQVRJT05fQUREUkVTUyxcbiAgREVMRUdBVEVfQ0xBVVNFX01FVEhPRF9JRCxcbiAgU1RBUkdBVEVfQ09OVFJBQ1RfQUREUkVTU19URVNUTkVULFxuICBTVEFSR0FURV9ERUxFR0FUSU9OX0FERFJFU1NfVEVTVE5FVCxcbiAgVkFMSURBVE9SX1JFR0lTVFJBVElPTl9TVEFLRVJfQ09OVFJBQ1RfQUREUkVTU19NQUlOTkVULFxuICBWQUxJREFUT1JfUkVHSVNUUkFUSU9OX1NUQUtFUl9DT05UUkFDVF9BRERSRVNTX1RFU1RORVQsXG4gIEFERF9WQUxJREFUSU9OX01FVEhPRF9JRCxcbn0gZnJvbSAnLi9jb25zdGFudHMnO1xuaW1wb3J0IHsgS2V5UGFpciB9IGZyb20gJy4va2V5UGFpcic7XG5pbXBvcnQgeyBCYXNlQ29pbiBhcyBDb2luQ29uZmlnIH0gZnJvbSAnQGJpdGdvLWJldGEvc3RhdGljcyc7XG5cbmV4cG9ydCBjbGFzcyBVdGlscyBpbXBsZW1lbnRzIEJhc2VVdGlscyB7XG4gIGlzVmFsaWRBZGRyZXNzKGFkZHJlc3M6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmlzVmFsaWRIZXgoYWRkcmVzcywgVkVUX0FERFJFU1NfTEVOR1RIKTtcbiAgfVxuXG4gIGlzVmFsaWRCbG9ja0lkKGhhc2g6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmlzVmFsaWRIZXgoaGFzaCwgVkVUX0JMT0NLX0lEX0xFTkdUSCk7XG4gIH1cblxuICBpc1ZhbGlkUHJpdmF0ZUtleShrZXk6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHRyeSB7XG4gICAgICBuZXcgS2V5UGFpcih7IHBydjoga2V5IH0pO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIGlzVmFsaWRQdWJsaWNLZXkoa2V5OiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICB0cnkge1xuICAgICAgbmV3IEtleVBhaXIoeyBwdWI6IGtleSB9KTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cblxuICBpc1ZhbGlkU2lnbmF0dXJlKHNpZ25hdHVyZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdNZXRob2Qgbm90IGltcGxlbWVudGVkJyk7XG4gIH1cblxuICBpc1ZhbGlkVHJhbnNhY3Rpb25JZCh0eElkOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5pc1ZhbGlkSGV4KHR4SWQsIFZFVF9UUkFOU0FDVElPTl9JRF9MRU5HVEgpO1xuICB9XG5cbiAgaXNWYWxpZEhleCh2YWx1ZTogc3RyaW5nLCBsZW5ndGg6IG51bWJlcik6IGJvb2xlYW4ge1xuICAgIGNvbnN0IHJlZ2V4ID0gbmV3IFJlZ0V4cChgXigweHwwWClbYS1mQS1GMC05XXske2xlbmd0aH19JGApO1xuICAgIHJldHVybiByZWdleC50ZXN0KHZhbHVlKTtcbiAgfVxuXG4gIGRlc2VyaWFsaXplVHJhbnNhY3Rpb24oc2VyaWFsaXplZFRyYW5zYWN0aW9uOiBzdHJpbmcpOiBUcmFuc2FjdGlvbiB7XG4gICAgY29uc3QgdHhCeXRlcyA9IEhleFVJbnQub2Yoc2VyaWFsaXplZFRyYW5zYWN0aW9uKS5ieXRlcztcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIFRyYW5zYWN0aW9uLmRlY29kZSh0eEJ5dGVzLCBmYWxzZSk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBpZiAoZXJyLm1lc3NhZ2U/LmluY2x1ZGVzKCdFeHBlY3RlZCA5IGl0ZW1zLCBidXQgZ290IDEwJykpIHtcbiAgICAgICAgLy8gTGlrZWx5IHNpZ25lZCwgc28gcmV0cnkgd2l0aCBpc1NpZ25lZCA9IHRydWVcbiAgICAgICAgcmV0dXJuIFRyYW5zYWN0aW9uLmRlY29kZSh0eEJ5dGVzLCB0cnVlKTtcbiAgICAgIH1cbiAgICAgIHRocm93IGVycjtcbiAgICB9XG4gIH1cblxuICBnZXRUcmFuc2FjdGlvblR5cGVGcm9tQ2xhdXNlKGNsYXVzZXM6IFRyYW5zYWN0aW9uQ2xhdXNlW10pOiBUcmFuc2FjdGlvblR5cGUge1xuICAgIGlmIChjbGF1c2VzWzBdLmRhdGEgPT09ICcweCcpIHtcbiAgICAgIHJldHVybiBUcmFuc2FjdGlvblR5cGUuU2VuZDtcbiAgICB9IGVsc2UgaWYgKGNsYXVzZXNbMF0uZGF0YS5zdGFydHNXaXRoKHY0Q3JlYXRlRm9yd2FyZGVyTWV0aG9kSWQpKSB7XG4gICAgICByZXR1cm4gVHJhbnNhY3Rpb25UeXBlLkFkZHJlc3NJbml0aWFsaXphdGlvbjtcbiAgICB9IGVsc2UgaWYgKGNsYXVzZXNbMF0uZGF0YS5zdGFydHNXaXRoKGZsdXNoRm9yd2FyZGVyVG9rZW5zTWV0aG9kSWRWNCkpIHtcbiAgICAgIHJldHVybiBUcmFuc2FjdGlvblR5cGUuRmx1c2hUb2tlbnM7XG4gICAgfSBlbHNlIGlmIChjbGF1c2VzWzBdLmRhdGEuc3RhcnRzV2l0aChUUkFOU0ZFUl9UT0tFTl9NRVRIT0RfSUQpKSB7XG4gICAgICByZXR1cm4gVHJhbnNhY3Rpb25UeXBlLlNlbmRUb2tlbjtcbiAgICB9IGVsc2UgaWYgKGNsYXVzZXNbMF0uZGF0YS5zdGFydHNXaXRoKFNUQUtJTkdfTUVUSE9EX0lEKSkge1xuICAgICAgcmV0dXJuIFRyYW5zYWN0aW9uVHlwZS5Db250cmFjdENhbGw7XG4gICAgfSBlbHNlIGlmIChjbGF1c2VzWzBdLmRhdGEuc3RhcnRzV2l0aChTVEFLRV9DTEFVU0VfTUVUSE9EX0lEKSkge1xuICAgICAgcmV0dXJuIFRyYW5zYWN0aW9uVHlwZS5TdGFraW5nQWN0aXZhdGU7XG4gICAgfSBlbHNlIGlmIChjbGF1c2VzWzBdLmRhdGEuc3RhcnRzV2l0aChERUxFR0FURV9DTEFVU0VfTUVUSE9EX0lEKSkge1xuICAgICAgcmV0dXJuIFRyYW5zYWN0aW9uVHlwZS5TdGFraW5nRGVsZWdhdGU7XG4gICAgfSBlbHNlIGlmIChjbGF1c2VzWzBdLmRhdGEuc3RhcnRzV2l0aChFWElUX0RFTEVHQVRJT05fTUVUSE9EX0lEKSkge1xuICAgICAgcmV0dXJuIFRyYW5zYWN0aW9uVHlwZS5TdGFraW5nVW5sb2NrO1xuICAgIH0gZWxzZSBpZiAoY2xhdXNlc1swXS5kYXRhLnN0YXJ0c1dpdGgoQUREX1ZBTElEQVRJT05fTUVUSE9EX0lEKSkge1xuICAgICAgcmV0dXJuIFRyYW5zYWN0aW9uVHlwZS5TdGFraW5nTG9jaztcbiAgICB9IGVsc2UgaWYgKGNsYXVzZXNbMF0uZGF0YS5zdGFydHNXaXRoKEJVUk5fTkZUX01FVEhPRF9JRCkpIHtcbiAgICAgIHJldHVybiBUcmFuc2FjdGlvblR5cGUuU3Rha2luZ1dpdGhkcmF3O1xuICAgIH0gZWxzZSBpZiAoXG4gICAgICBjbGF1c2VzWzBdLmRhdGEuc3RhcnRzV2l0aChDTEFJTV9CQVNFX1JFV0FSRFNfTUVUSE9EX0lEKSB8fFxuICAgICAgY2xhdXNlc1swXS5kYXRhLnN0YXJ0c1dpdGgoQ0xBSU1fU1RBS0lOR19SRVdBUkRTX01FVEhPRF9JRClcbiAgICApIHtcbiAgICAgIHJldHVybiBUcmFuc2FjdGlvblR5cGUuU3Rha2luZ0NsYWltO1xuICAgIH0gZWxzZSBpZiAoY2xhdXNlc1swXS5kYXRhLnN0YXJ0c1dpdGgoVFJBTlNGRVJfTkZUX01FVEhPRF9JRCkpIHtcbiAgICAgIHJldHVybiBUcmFuc2FjdGlvblR5cGUuU2VuZE5GVDtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIFRyYW5zYWN0aW9uVHlwZS5TZW5kVG9rZW47XG4gICAgfVxuICB9XG5cbiAgZ2V0VHJhbnNmZXJUb2tlbkRhdGEodG9BZGRyZXNzOiBzdHJpbmcsIGFtb3VudFdlaTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBjb25zdCBtZXRob2ROYW1lID0gJ3RyYW5zZmVyJztcbiAgICBjb25zdCB0eXBlcyA9IFsnYWRkcmVzcycsICd1aW50MjU2J107XG4gICAgY29uc3QgcGFyYW1zID0gW3RvQWRkcmVzcywgbmV3IEJOKGFtb3VudFdlaSldO1xuXG4gICAgY29uc3QgbWV0aG9kID0gRXRoZXJldW1BYmkubWV0aG9kSUQobWV0aG9kTmFtZSwgdHlwZXMpO1xuICAgIGNvbnN0IGFyZ3MgPSBFdGhlcmV1bUFiaS5yYXdFbmNvZGUodHlwZXMsIHBhcmFtcyk7XG5cbiAgICByZXR1cm4gYWRkSGV4UHJlZml4KEJ1ZmZlci5jb25jYXQoW21ldGhvZCwgYXJnc10pLnRvU3RyaW5nKCdoZXgnKSk7XG4gIH1cblxuICBnZXRUcmFuc2Zlck5GVERhdGEoZnJvbTogc3RyaW5nLCB0bzogc3RyaW5nLCB0b2tlbklkOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGNvbnN0IG1ldGhvZE5hbWUgPSAndHJhbnNmZXJGcm9tJztcbiAgICBjb25zdCB0eXBlcyA9IFsnYWRkcmVzcycsICdhZGRyZXNzJywgJ3VpbnQyNTYnXTtcbiAgICBjb25zdCBwYXJhbXMgPSBbZnJvbSwgdG8sIG5ldyBCTih0b2tlbklkKV07XG5cbiAgICBjb25zdCBtZXRob2QgPSBFdGhlcmV1bUFiaS5tZXRob2RJRChtZXRob2ROYW1lLCB0eXBlcyk7XG4gICAgY29uc3QgYXJncyA9IEV0aGVyZXVtQWJpLnJhd0VuY29kZSh0eXBlcywgcGFyYW1zKTtcblxuICAgIHJldHVybiBhZGRIZXhQcmVmaXgoQnVmZmVyLmNvbmNhdChbbWV0aG9kLCBhcmdzXSkudG9TdHJpbmcoJ2hleCcpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZWNvZGVzIHN0YWtpbmcgdHJhbnNhY3Rpb24gZGF0YSB0byBleHRyYWN0IGxldmVsSWQgYW5kIGF1dG9yZW5ld1xuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gZGF0YSAtIFRoZSBlbmNvZGVkIHRyYW5zYWN0aW9uIGRhdGFcbiAgICogQHJldHVybnMge29iamVjdH0gLSBPYmplY3QgY29udGFpbmluZyBsZXZlbElkIGFuZCBhdXRvcmVuZXdcbiAgICovXG4gIGRlY29kZVN0YWtpbmdEYXRhKGRhdGE6IHN0cmluZyk6IHsgbGV2ZWxJZDogbnVtYmVyOyBhdXRvcmVuZXc6IGJvb2xlYW4gfSB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHBhcmFtZXRlcnMgPSBkYXRhLnNsaWNlKDEwKTtcblxuICAgICAgLy8gRGVjb2RlIHVzaW5nIGV0aGVyZXVtanMtYWJpIGRpcmVjdGx5XG4gICAgICBjb25zdCBkZWNvZGVkID0gRXRoZXJldW1BYmkucmF3RGVjb2RlKFsndWludDgnLCAnYm9vbCddLCBCdWZmZXIuZnJvbShwYXJhbWV0ZXJzLCAnaGV4JykpO1xuXG4gICAgICByZXR1cm4ge1xuICAgICAgICBsZXZlbElkOiBOdW1iZXIoZGVjb2RlZFswXSksXG4gICAgICAgIGF1dG9yZW5ldzogQm9vbGVhbihkZWNvZGVkWzFdKSxcbiAgICAgIH07XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgRmFpbGVkIHRvIGRlY29kZSBzdGFraW5nIGRhdGE6ICR7ZXJyb3IubWVzc2FnZX1gKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogRGVjb2RlcyBzdGFraW5nIHRyYW5zYWN0aW9uIGRhdGEgdG8gZXh0cmFjdCBsZXZlbElkIGFuZCBhdXRvcmVuZXdcbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IGRhdGEgLSBUaGUgZW5jb2RlZCB0cmFuc2FjdGlvbiBkYXRhXG4gICAqIEByZXR1cm5zIHtvYmplY3R9IC0gT2JqZWN0IGNvbnRhaW5pbmcgbGV2ZWxJZCBhbmQgYXV0b3JlbmV3XG4gICAqL1xuICBkZWNvZGVTdGFrZUNsYXVzZURhdGEoZGF0YTogc3RyaW5nKTogeyBsZXZlbElkOiBudW1iZXIgfSB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHBhcmFtZXRlcnMgPSBkYXRhLnNsaWNlKDEwKTtcblxuICAgICAgLy8gRGVjb2RlIHVzaW5nIGV0aGVyZXVtanMtYWJpIGRpcmVjdGx5XG4gICAgICBjb25zdCBkZWNvZGVkID0gRXRoZXJldW1BYmkucmF3RGVjb2RlKFsndWludDgnXSwgQnVmZmVyLmZyb20ocGFyYW1ldGVycywgJ2hleCcpKTtcblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgbGV2ZWxJZDogTnVtYmVyKGRlY29kZWRbMF0pLFxuICAgICAgfTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBGYWlsZWQgdG8gZGVjb2RlIHN0YWtpbmcgZGF0YTogJHtlcnJvci5tZXNzYWdlfWApO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBEZWNvZGVzIGRlbGVnYXRlIHRyYW5zYWN0aW9uIGRhdGEgdG8gZXh0cmFjdCB0b2tlbklkIGFuZCB2YWxpZGF0b3JBZGRyZXNzXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBkYXRhIC0gVGhlIGVuY29kZWQgdHJhbnNhY3Rpb24gZGF0YVxuICAgKiBAcmV0dXJucyB7b2JqZWN0fSAtIE9iamVjdCBjb250YWluaW5nIGxldmVsSWQgYW5kIHZhbGlkYXRvciBhZGRyZXNzXG4gICAqL1xuICBkZWNvZGVEZWxlZ2F0ZUNsYXVzZURhdGEoZGF0YTogc3RyaW5nKTogeyB0b2tlbklkOiBzdHJpbmc7IHZhbGlkYXRvcjogc3RyaW5nIH0ge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBwYXJhbWV0ZXJzID0gZGF0YS5zbGljZSgxMCk7XG5cbiAgICAgIC8vIERlY29kZSB1c2luZyBldGhlcmV1bWpzLWFiaSBkaXJlY3RseVxuICAgICAgY29uc3QgZGVjb2RlZCA9IEV0aGVyZXVtQWJpLnJhd0RlY29kZShbJ3VpbnQyNTYnLCAnYWRkcmVzcyddLCBCdWZmZXIuZnJvbShwYXJhbWV0ZXJzLCAnaGV4JykpO1xuXG4gICAgICByZXR1cm4ge1xuICAgICAgICB0b2tlbklkOiBTdHJpbmcoZGVjb2RlZFswXSksXG4gICAgICAgIHZhbGlkYXRvcjogYWRkSGV4UHJlZml4KGRlY29kZWRbMV0udG9TdHJpbmcoKSkudG9Mb3dlckNhc2UoKSxcbiAgICAgIH07XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgRmFpbGVkIHRvIGRlY29kZSBkZWxlZ2F0aW9uIGRhdGE6ICR7ZXJyb3IubWVzc2FnZX1gKTtcbiAgICB9XG4gIH1cblxuICBkZWNvZGVUcmFuc2ZlclRva2VuRGF0YShkYXRhOiBzdHJpbmcpOiBUcmFuc2FjdGlvblJlY2lwaWVudCB7XG4gICAgY29uc3QgW2FkZHJlc3MsIGFtb3VudF0gPSBnZXRSYXdEZWNvZGVkKFxuICAgICAgWydhZGRyZXNzJywgJ3VpbnQyNTYnXSxcbiAgICAgIGdldEJ1ZmZlcmVkQnl0ZUNvZGUoVFJBTlNGRVJfVE9LRU5fTUVUSE9EX0lELCBkYXRhKVxuICAgICk7XG4gICAgY29uc3QgcmVjaXBpZW50QWRkcmVzcyA9IGFkZEhleFByZWZpeChhZGRyZXNzLnRvU3RyaW5nKCkpLnRvTG93ZXJDYXNlKCk7XG4gICAgcmV0dXJuIHtcbiAgICAgIGFkZHJlc3M6IHJlY2lwaWVudEFkZHJlc3MsXG4gICAgICBhbW91bnQ6IGFtb3VudC50b1N0cmluZygpLFxuICAgIH07XG4gIH1cblxuICBkZWNvZGVUcmFuc2Zlck5GVERhdGEoZGF0YTogc3RyaW5nKToge1xuICAgIHJlY2lwaWVudHM6IFRyYW5zYWN0aW9uUmVjaXBpZW50W107XG4gICAgc2VuZGVyOiBzdHJpbmc7XG4gICAgdG9rZW5JZDogc3RyaW5nO1xuICB9IHtcbiAgICBjb25zdCBbZnJvbSwgdG8sIHRva2VuSWRCTl0gPSBnZXRSYXdEZWNvZGVkKFxuICAgICAgWydhZGRyZXNzJywgJ2FkZHJlc3MnLCAndWludDI1NiddLFxuICAgICAgZ2V0QnVmZmVyZWRCeXRlQ29kZShUUkFOU0ZFUl9ORlRfTUVUSE9EX0lELCBkYXRhKVxuICAgICk7XG4gICAgY29uc3QgcmVjaXBpZW50QWRkcmVzcyA9IGFkZEhleFByZWZpeCh0by50b1N0cmluZygpKS50b0xvd2VyQ2FzZSgpO1xuICAgIGNvbnN0IHJlY2lwaWVudDogVHJhbnNhY3Rpb25SZWNpcGllbnQgPSB7XG4gICAgICBhZGRyZXNzOiByZWNpcGllbnRBZGRyZXNzLFxuICAgICAgYW1vdW50OiAnMScsXG4gICAgfTtcbiAgICBjb25zdCBzZW5kZXIgPSBhZGRIZXhQcmVmaXgoZnJvbS50b1N0cmluZygpKS50b0xvd2VyQ2FzZSgpO1xuICAgIGNvbnN0IHRva2VuSWQgPSB0b2tlbklkQk4udG9TdHJpbmcoKTtcbiAgICByZXR1cm4ge1xuICAgICAgcmVjaXBpZW50czogW3JlY2lwaWVudF0sXG4gICAgICBzZW5kZXIsXG4gICAgICB0b2tlbklkLFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogRGVjb2RlcyBjbGFpbSByZXdhcmRzIHRyYW5zYWN0aW9uIGRhdGEgdG8gZXh0cmFjdCB0b2tlbklkXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBkYXRhIC0gVGhlIGVuY29kZWQgY2xhaW0gcmV3YXJkcyBtZXRob2QgY2FsbCBkYXRhXG4gICAqIEByZXR1cm5zIHtzdHJpbmd9IC0gVGhlIHRva2VuSWQgYXMgYSBzdHJpbmdcbiAgICovXG4gIGRlY29kZUNsYWltUmV3YXJkc0RhdGEoZGF0YTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICB0cnkge1xuICAgICAgLy8gUmVtb3ZlIG1ldGhvZCBJRCAoZmlyc3QgMTAgY2hhcmFjdGVyczogJzB4JyArIDQtYnl0ZSBtZXRob2QgSUQpXG4gICAgICBjb25zdCBtZXRob2REYXRhID0gZGF0YS5zbGljZSgxMCk7XG5cbiAgICAgIC8vIEV4dHJhY3QgdG9rZW5JZCBmcm9tIGZpcnN0IDMyLWJ5dGUgc2xvdFxuICAgICAgLy8gVGhlIHRva2VuSWQgaXMgYSB1aW50MjU2LCBzbyB3ZSB0YWtlIHRoZSBmdWxsIDY0IGhleCBjaGFyYWN0ZXJzXG4gICAgICBjb25zdCB0b2tlbklkSGV4ID0gbWV0aG9kRGF0YS5zbGljZSgwLCA2NCk7XG5cbiAgICAgIC8vIENvbnZlcnQgaGV4IHRvIGRlY2ltYWwgc3RyaW5nXG4gICAgICByZXR1cm4gQmlnSW50KCcweCcgKyB0b2tlbklkSGV4KS50b1N0cmluZygpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEZhaWxlZCB0byBkZWNvZGUgY2xhaW0gcmV3YXJkcyBkYXRhOiAke2Vycm9yLm1lc3NhZ2V9YCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIERlY29kZXMgYWRkIHZhbGlkYXRpb24gdHJhbnNhY3Rpb24gZGF0YSB0byBleHRyYWN0IHZhbGlkYXRvciBhZGRyZXNzIGFuZCBzdGFraW5nIHBlcmlvZFxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gZGF0YSAtIFRoZSBlbmNvZGVkIHRyYW5zYWN0aW9uIGRhdGFcbiAgICogQHJldHVybnMge29iamVjdH0gLSBPYmplY3QgY29udGFpbmluZyB2YWxpZGF0b3IgYWRkcmVzcyBhbmQgc3Rha2luZyBwZXJpb2RcbiAgICovXG4gIGRlY29kZUFkZFZhbGlkYXRpb25EYXRhKGRhdGE6IHN0cmluZyk6IHsgdmFsaWRhdG9yOiBzdHJpbmc7IHBlcmlvZDogbnVtYmVyIH0ge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBwYXJhbWV0ZXJzID0gZGF0YS5zbGljZSgxMCk7XG5cbiAgICAgIC8vIERlY29kZSB1c2luZyBldGhlcmV1bWpzLWFiaSBkaXJlY3RseVxuICAgICAgY29uc3QgZGVjb2RlZCA9IEV0aGVyZXVtQWJpLnJhd0RlY29kZShbJ2FkZHJlc3MnLCAndWludDMyJ10sIEJ1ZmZlci5mcm9tKHBhcmFtZXRlcnMsICdoZXgnKSk7XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIHZhbGlkYXRvcjogYWRkSGV4UHJlZml4KGRlY29kZWRbMF0udG9TdHJpbmcoKSkudG9Mb3dlckNhc2UoKSxcbiAgICAgICAgcGVyaW9kOiBOdW1iZXIoZGVjb2RlZFsxXSksXG4gICAgICB9O1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEZhaWxlZCB0byBkZWNvZGUgYWRkIHZhbGlkYXRpb24gZGF0YTogJHtlcnJvci5tZXNzYWdlfWApO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBEZWNvZGVzIGV4aXQgZGVsZWdhdGlvbiB0cmFuc2FjdGlvbiBkYXRhIHRvIGV4dHJhY3QgdG9rZW5JZFxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gZGF0YSAtIFRoZSBlbmNvZGVkIGV4aXQgZGVsZWdhdGlvbiBtZXRob2QgY2FsbCBkYXRhXG4gICAqIEByZXR1cm5zIHtzdHJpbmd9IC0gVGhlIHRva2VuSWQgYXMgYSBzdHJpbmdcbiAgICovXG4gIGRlY29kZUV4aXREZWxlZ2F0aW9uRGF0YShkYXRhOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHRyeSB7XG4gICAgICBpZiAoIWRhdGEuc3RhcnRzV2l0aChFWElUX0RFTEVHQVRJT05fTUVUSE9EX0lEKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgZXhpdCBkZWxlZ2F0aW9uIG1ldGhvZCBkYXRhJyk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHRva2VuSWRIZXggPSBkYXRhLnNsaWNlKEVYSVRfREVMRUdBVElPTl9NRVRIT0RfSUQubGVuZ3RoKTtcbiAgICAgIC8vIENvbnZlcnQgaGV4IHRvIGRlY2ltYWwgKG1hdGNoaW5nIG9yaWdpbmFsIHBhcnNlSW50IGxvZ2ljKVxuICAgICAgcmV0dXJuIHBhcnNlSW50KHRva2VuSWRIZXgsIDE2KS50b1N0cmluZygpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEZhaWxlZCB0byBkZWNvZGUgZXhpdCBkZWxlZ2F0aW9uIGRhdGE6ICR7ZXJyb3IubWVzc2FnZX1gKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogRGVjb2RlcyBidXJuIE5GVCB0cmFuc2FjdGlvbiBkYXRhIHRvIGV4dHJhY3QgdG9rZW5JZFxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gZGF0YSAtIFRoZSBlbmNvZGVkIGJ1cm4gTkZUIG1ldGhvZCBjYWxsIGRhdGFcbiAgICogQHJldHVybnMge3N0cmluZ30gLSBUaGUgdG9rZW5JZCBhcyBhIHN0cmluZ1xuICAgKi9cbiAgZGVjb2RlQnVybk5mdERhdGEoZGF0YTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICB0cnkge1xuICAgICAgaWYgKCFkYXRhLnN0YXJ0c1dpdGgoQlVSTl9ORlRfTUVUSE9EX0lEKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgYnVybiBORlQgbWV0aG9kIGRhdGEnKTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgdG9rZW5JZEhleCA9IGRhdGEuc2xpY2UoQlVSTl9ORlRfTUVUSE9EX0lELmxlbmd0aCk7XG4gICAgICAvLyBDb252ZXJ0IGhleCB0byBkZWNpbWFsIChtYXRjaGluZyBvcmlnaW5hbCBwYXJzZUludCBsb2dpYylcbiAgICAgIHJldHVybiBwYXJzZUludCh0b2tlbklkSGV4LCAxNikudG9TdHJpbmcoKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBGYWlsZWQgdG8gZGVjb2RlIGJ1cm4gTkZUIGRhdGE6ICR7ZXJyb3IubWVzc2FnZX1gKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSBuZXR3b3JrLWFwcHJvcHJpYXRlIHN0YXJnYXRlIGNvbnRyYWN0IGFkZHJlc3NcbiAgICogQHBhcmFtIHtDb2luQ29uZmlnfSBjb2luQ29uZmlnIC0gVGhlIGNvaW4gY29uZmlndXJhdGlvbiBvYmplY3RcbiAgICogQHJldHVybnMge3N0cmluZ30gVGhlIGRlbGVnYXRpb24gY29udHJhY3QgYWRkcmVzcyBmb3IgdGhlIG5ldHdvcmtcbiAgICovXG4gIGdldERlZmF1bHREZWxlZ2F0aW9uQWRkcmVzcyhjb2luQ29uZmlnOiBSZWFkb25seTxDb2luQ29uZmlnPik6IHN0cmluZyB7XG4gICAgY29uc3QgaXNUZXN0bmV0ID0gY29pbkNvbmZpZy5uZXR3b3JrLnR5cGUgPT09ICd0ZXN0bmV0JztcbiAgICByZXR1cm4gaXNUZXN0bmV0ID8gU1RBUkdBVEVfQ09OVFJBQ1RfQUREUkVTU19URVNUTkVUIDogU1RBUkdBVEVfREVMRUdBVElPTl9BRERSRVNTO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgbmV0d29yay1hcHByb3ByaWF0ZSBzdGFraW5nIGNvbnRyYWN0IGFkZHJlc3NcbiAgICogQHBhcmFtIHtDb2luQ29uZmlnfSBjb2luQ29uZmlnIC0gVGhlIGNvaW4gY29uZmlndXJhdGlvbiBvYmplY3RcbiAgICogQHJldHVybnMge3N0cmluZ30gVGhlIHN0YWtpbmcgY29udHJhY3QgYWRkcmVzcyBmb3IgdGhlIG5ldHdvcmtcbiAgICovXG4gIGdldERlZmF1bHRTdGFraW5nQWRkcmVzcyhjb2luQ29uZmlnOiBSZWFkb25seTxDb2luQ29uZmlnPik6IHN0cmluZyB7XG4gICAgY29uc3QgaXNUZXN0bmV0ID0gY29pbkNvbmZpZy5uZXR3b3JrLnR5cGUgPT09ICd0ZXN0bmV0JztcbiAgICByZXR1cm4gaXNUZXN0bmV0ID8gU1RBUkdBVEVfQ09OVFJBQ1RfQUREUkVTU19URVNUTkVUIDogU1RBUkdBVEVfTkZUX0FERFJFU1M7XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSBuZXR3b3JrLWFwcHJvcHJpYXRlIGNvbnRyYWN0IGFkZHJlc3MgZm9yIHZhbGlkYXRvciByZWdpc3RyYXRpb25cbiAgICogQHBhcmFtIHtDb2luQ29uZmlnfSBjb2luQ29uZmlnIC0gVGhlIGNvaW4gY29uZmlndXJhdGlvbiBvYmplY3RcbiAgICogQHJldHVybnMge3N0cmluZ30gVGhlIGNvbnRyYWN0IGFkZHJlc3MgZm9yIHRoZSBuZXR3b3JrXG4gICAqL1xuICBnZXRDb250cmFjdEFkZHJlc3NGb3JWYWxpZGF0b3JSZWdpc3RyYXRpb24oY29pbkNvbmZpZzogUmVhZG9ubHk8Q29pbkNvbmZpZz4pOiBzdHJpbmcge1xuICAgIGNvbnN0IGlzVGVzdG5ldCA9IGNvaW5Db25maWcubmV0d29yay50eXBlID09PSAndGVzdG5ldCc7XG4gICAgcmV0dXJuIGlzVGVzdG5ldFxuICAgICAgPyBWQUxJREFUT1JfUkVHSVNUUkFUSU9OX1NUQUtFUl9DT05UUkFDVF9BRERSRVNTX1RFU1RORVRcbiAgICAgIDogVkFMSURBVE9SX1JFR0lTVFJBVElPTl9TVEFLRVJfQ09OVFJBQ1RfQUREUkVTU19NQUlOTkVUO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrIGlmIGFuIGFkZHJlc3MgaXMgYSB2YWxpZCBkZWxlZ2F0aW9uIGNvbnRyYWN0IGFkZHJlc3MgZm9yIGFueSBuZXR3b3JrXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBhZGRyZXNzIC0gVGhlIGFkZHJlc3MgdG8gY2hlY2tcbiAgICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdGhlIGFkZHJlc3MgaXMgYSBkZWxlZ2F0aW9uIGNvbnRyYWN0IGFkZHJlc3NcbiAgICovXG4gIGlzRGVsZWdhdGlvbkNvbnRyYWN0QWRkcmVzcyhhZGRyZXNzOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICBjb25zdCBsb3dlckFkZHJlc3MgPSBhZGRyZXNzLnRvTG93ZXJDYXNlKCk7XG4gICAgcmV0dXJuIChcbiAgICAgIGxvd2VyQWRkcmVzcyA9PT0gU1RBUkdBVEVfREVMRUdBVElPTl9BRERSRVNTLnRvTG93ZXJDYXNlKCkgfHxcbiAgICAgIGxvd2VyQWRkcmVzcyA9PT0gU1RBUkdBVEVfREVMRUdBVElPTl9BRERSRVNTX1RFU1RORVQudG9Mb3dlckNhc2UoKVxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2sgaWYgYW4gYWRkcmVzcyBpcyBhIHZhbGlkIE5GVCBjb250cmFjdCBhZGRyZXNzIGZvciBhbnkgbmV0d29ya1xuICAgKiBAcGFyYW0ge3N0cmluZ30gYWRkcmVzcyAtIFRoZSBhZGRyZXNzIHRvIGNoZWNrXG4gICAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHRoZSBhZGRyZXNzIGlzIGFuIE5GVCBjb250cmFjdCBhZGRyZXNzXG4gICAqL1xuICBpc05mdENvbnRyYWN0QWRkcmVzcyhhZGRyZXNzOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICBjb25zdCBsb3dlckFkZHJlc3MgPSBhZGRyZXNzLnRvTG93ZXJDYXNlKCk7XG4gICAgcmV0dXJuIChcbiAgICAgIGxvd2VyQWRkcmVzcyA9PT0gU1RBUkdBVEVfTkZUX0FERFJFU1MudG9Mb3dlckNhc2UoKSB8fCBsb3dlckFkZHJlc3MgPT09IFNUQVJHQVRFX05GVF9BRERSRVNTX1RFU1RORVQudG9Mb3dlckNhc2UoKVxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogVmFsaWRhdGUgdGhhdCBhIGNvbnRyYWN0IGFkZHJlc3MgbWF0Y2hlcyB0aGUgZXhwZWN0ZWQgc3RhcmdhdGUgYWRkcmVzcyBmb3IgdGhlIG5ldHdvcmtcbiAgICogQHBhcmFtIHtzdHJpbmd9IGFkZHJlc3MgLSBUaGUgY29udHJhY3QgYWRkcmVzcyB0byB2YWxpZGF0ZVxuICAgKiBAcGFyYW0ge0NvaW5Db25maWd9IGNvaW5Db25maWcgLSBUaGUgY29pbiBjb25maWd1cmF0aW9uIG9iamVjdFxuICAgKiBAdGhyb3dzIHtFcnJvcn0gSWYgdGhlIGFkZHJlc3MgZG9lc24ndCBtYXRjaCB0aGUgZXhwZWN0ZWQgY29udHJhY3QgYWRkcmVzc1xuICAgKi9cbiAgdmFsaWRhdGVTdGFraW5nQ29udHJhY3RBZGRyZXNzKGFkZHJlc3M6IHN0cmluZywgY29pbkNvbmZpZzogUmVhZG9ubHk8Q29pbkNvbmZpZz4pOiB2b2lkIHtcbiAgICBjb25zdCBleHBlY3RlZEFkZHJlc3MgPSB0aGlzLmdldERlZmF1bHRTdGFraW5nQWRkcmVzcyhjb2luQ29uZmlnKTtcbiAgICBpZiAoYWRkcmVzcy50b0xvd2VyQ2FzZSgpICE9PSBleHBlY3RlZEFkZHJlc3MudG9Mb3dlckNhc2UoKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgSW52YWxpZCBzdGFraW5nIGNvbnRyYWN0IGFkZHJlc3MuIEV4cGVjdGVkICR7ZXhwZWN0ZWRBZGRyZXNzfSBmb3IgJHtjb2luQ29uZmlnLm5ldHdvcmsudHlwZX0sIGdvdCAke2FkZHJlc3N9YFxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogVmFsaWRhdGUgdGhhdCB0aGUgY29udHJhY3QgYWRkcmVzcyBtYXRjaGVzIHRoZSBleHBlY3RlZCBzdGFyZ2F0ZSBhZGRyZXNzIGZvciB0aGUgbmV0d29ya1xuICAgKiBAcGFyYW0ge3N0cmluZ30gYWRkcmVzcyAtIFRoZSBjb250cmFjdCBhZGRyZXNzIHRvIHZhbGlkYXRlXG4gICAqIEBwYXJhbSB7Q29pbkNvbmZpZ30gY29pbkNvbmZpZyAtIFRoZSBjb2luIGNvbmZpZ3VyYXRpb24gb2JqZWN0XG4gICAqIEB0aHJvd3Mge0Vycm9yfSBJZiB0aGUgYWRkcmVzcyBkb2Vzbid0IG1hdGNoIHRoZSBleHBlY3RlZCBjb250cmFjdCBhZGRyZXNzXG4gICAqL1xuICB2YWxpZGF0ZUNvbnRyYWN0QWRkcmVzc0ZvclZhbGlkYXRvclJlZ2lzdHJhdGlvbihhZGRyZXNzOiBzdHJpbmcsIGNvaW5Db25maWc6IFJlYWRvbmx5PENvaW5Db25maWc+KTogdm9pZCB7XG4gICAgY29uc3QgZXhwZWN0ZWRBZGRyZXNzID0gdGhpcy5nZXRDb250cmFjdEFkZHJlc3NGb3JWYWxpZGF0b3JSZWdpc3RyYXRpb24oY29pbkNvbmZpZyk7XG4gICAgaWYgKGFkZHJlc3MudG9Mb3dlckNhc2UoKSAhPT0gZXhwZWN0ZWRBZGRyZXNzLnRvTG93ZXJDYXNlKCkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYEludmFsaWQgY29udHJhY3QgYWRkcmVzcyBmb3IgdmFsaWRhdG9yIHJlZ2lzdHJhdGlvbi4gRXhwZWN0ZWQgJHtleHBlY3RlZEFkZHJlc3N9IGZvciAke2NvaW5Db25maWcubmV0d29yay50eXBlfSwgZ290ICR7YWRkcmVzc31gXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBWYWxpZGF0ZSB0aGF0IGEgY29udHJhY3QgYWRkcmVzcyBtYXRjaGVzIHRoZSBleHBlY3RlZCBzdGFyZ2F0ZSBjb250cmFjdCBmb3IgdGhlIG5ldHdvcmtcbiAgICogQHBhcmFtIHtzdHJpbmd9IGFkZHJlc3MgLSBUaGUgY29udHJhY3QgYWRkcmVzcyB0byB2YWxpZGF0ZVxuICAgKiBAcGFyYW0ge0NvaW5Db25maWd9IGNvaW5Db25maWcgLSBUaGUgY29pbiBjb25maWd1cmF0aW9uIG9iamVjdFxuICAgKiBAdGhyb3dzIHtFcnJvcn0gSWYgdGhlIGFkZHJlc3MgZG9lc24ndCBtYXRjaCB0aGUgZXhwZWN0ZWQgZGVsZWdhdGlvbiBjb250cmFjdCBhZGRyZXNzXG4gICAqL1xuICB2YWxpZGF0ZURlbGVnYXRpb25Db250cmFjdEFkZHJlc3MoYWRkcmVzczogc3RyaW5nLCBjb2luQ29uZmlnOiBSZWFkb25seTxDb2luQ29uZmlnPik6IHZvaWQge1xuICAgIGNvbnN0IGV4cGVjdGVkQWRkcmVzcyA9IHRoaXMuZ2V0RGVmYXVsdERlbGVnYXRpb25BZGRyZXNzKGNvaW5Db25maWcpO1xuICAgIGlmIChhZGRyZXNzLnRvTG93ZXJDYXNlKCkgIT09IGV4cGVjdGVkQWRkcmVzcy50b0xvd2VyQ2FzZSgpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBJbnZhbGlkIGRlbGVnYXRpb24gY29udHJhY3QgYWRkcmVzcy4gRXhwZWN0ZWQgJHtleHBlY3RlZEFkZHJlc3N9IGZvciAke2NvaW5Db25maWcubmV0d29yay50eXBlfSwgZ290ICR7YWRkcmVzc31gXG4gICAgICApO1xuICAgIH1cbiAgfVxufVxuXG5jb25zdCB1dGlscyA9IG5ldyBVdGlscygpO1xuXG5leHBvcnQgZGVmYXVsdCB1dGlscztcbiJdfQ==
|