@witnet/sdk 1.0.15 → 1.1.1
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/package.json +13 -13
- package/dist/src/bin/helpers.d.ts +1 -0
- package/dist/src/bin/helpers.d.ts.map +1 -1
- package/dist/src/bin/helpers.js +34 -5
- package/dist/src/lib/crypto/payloads/DataRequestPayload.d.ts +7 -4
- package/dist/src/lib/crypto/payloads/DataRequestPayload.d.ts.map +1 -1
- package/dist/src/lib/crypto/payloads/DataRequestPayload.js +42 -16
- package/dist/src/lib/crypto/payloads.d.ts.map +1 -1
- package/dist/src/lib/crypto/payloads.js +1 -2
- package/dist/src/lib/crypto/signer.js +12 -9
- package/dist/src/lib/crypto/transmitters.js +2 -2
- package/dist/src/lib/crypto/types.d.ts.map +1 -1
- package/dist/src/lib/crypto/types.js +1 -2
- package/dist/src/lib/radon/index.d.ts +4 -2
- package/dist/src/lib/radon/index.d.ts.map +1 -1
- package/dist/src/lib/radon/index.js +50 -32
- package/dist/src/lib/radon/types.d.ts +31 -27
- package/dist/src/lib/radon/types.d.ts.map +1 -1
- package/dist/src/lib/radon/types.js +88 -46
- package/dist/src/lib/radon/utils.js +3 -3
- package/dist/src/lib/rpc/provider.d.ts +12 -0
- package/dist/src/lib/rpc/provider.d.ts.map +1 -1
- package/dist/src/lib/rpc/provider.js +11 -1
- package/dist/witnet/assets/index.d.ts +1 -2
- package/dist/witnet/assets/modals/index.d.ts +1 -2
- package/dist/witnet/assets/modals/web3/eth.js +3 -3
- package/dist/witnet/assets/modals/web3/ipfs.d.ts +1 -2
- package/dist/witnet/assets/modals/web3/ipfs.js +11 -9
- package/dist/witnet/assets/modals/web3/wit.js +4 -4
- package/dist/witnet/assets/requests.js +6 -51
- package/package.json +13 -13
- package/src/bin/cli/inspect.js +103 -13
- package/src/bin/cli/radon.js +157 -79
- package/src/bin/cli/wallet.js +4 -6
- package/src/bin/helpers.js +37 -4
- package/src/bin/toolkit.js +2 -2
- package/witnet/assets/modals/web3/eth.js +2 -2
- package/witnet/assets/modals/web3/ipfs.js +9 -6
- package/witnet/assets/modals/web3/wit.js +3 -3
- package/witnet/assets/requests.js +5 -51
|
@@ -10,6 +10,7 @@ const payloads_1 = require("../payloads");
|
|
|
10
10
|
const types_1 = require("../types");
|
|
11
11
|
const utils_1 = require("../utils");
|
|
12
12
|
const COLLATERAL_RATIO = 100n;
|
|
13
|
+
// const RADON_ERROR_MAX_BYTES = 9;
|
|
13
14
|
const DR_COMMIT_TX_WEIGHT = 400;
|
|
14
15
|
const DR_REVEAL_TX_WEIGHT = 200;
|
|
15
16
|
const DR_TALLY_TX_WEIGHT = 100;
|
|
@@ -53,22 +54,51 @@ class DataRequestPayload extends payloads_1.TransactionPayloadMultiSig {
|
|
|
53
54
|
}
|
|
54
55
|
get droSLA() {
|
|
55
56
|
if (this._target && this._fees) {
|
|
56
|
-
const minConsensusPercentage =
|
|
57
|
+
const minConsensusPercentage = this._target.majorityType === "qualified" ? 66 : 51;
|
|
57
58
|
const witnesses = (typeof this._target.witnesses === 'object'
|
|
58
59
|
? Object.keys(this._target.witnesses).length
|
|
59
60
|
: this._target.witnesses || 0);
|
|
60
|
-
const commitAndRevealFee = this._fees2UnitaryCommitRevealReward(this._fees, witnesses);
|
|
61
61
|
const witnessReward = this._fees2UnitaryReward(this._fees, witnesses);
|
|
62
|
-
const
|
|
62
|
+
const commitAndRevealFee = this._fees2UnitaryCommitRevealReward(this._fees, witnesses); //Math.floor(Number(witnessReward / BigInt(witnesses))) // TODO: zerofy if protocol >= V2_1
|
|
63
|
+
const collateral = witnessReward * COLLATERAL_RATIO; // TODO: zerofy if protocol >= V2_1
|
|
63
64
|
if (collateral > Number.MAX_SAFE_INTEGER)
|
|
64
|
-
throw new TypeError(`${this.constructor.name}:
|
|
65
|
+
throw new TypeError(`${this.constructor.name}: excessive witness collateral: ${collateral.toString()} > ${Number.MAX_SAFE_INTEGER}`);
|
|
65
66
|
else if (witnessReward > Number.MAX_SAFE_INTEGER)
|
|
66
|
-
throw new TypeError(`${this.constructor.name}:
|
|
67
|
+
throw new TypeError(`${this.constructor.name}: excessive witness reward: ${witnessReward.toString()} > ${Number.MAX_SAFE_INTEGER}`);
|
|
67
68
|
else if (commitAndRevealFee > Number.MAX_SAFE_INTEGER)
|
|
68
|
-
throw new TypeError(`${this.constructor.name}:
|
|
69
|
+
throw new TypeError(`${this.constructor.name}: excessive commit/reveal fee: ${commitAndRevealFee.toString()} > ${Number.MAX_SAFE_INTEGER}`);
|
|
70
|
+
// TODO: only when protocol >= V2_1
|
|
71
|
+
// let maxResultSize
|
|
72
|
+
// if (this.request) {
|
|
73
|
+
// if (this.request.witnessReducer.opcode === Opcodes.ConcatenateAndHash) {
|
|
74
|
+
// if (this._target?.maxResultSize && this._target?.maxResultSize !== 34) {
|
|
75
|
+
// throw new TypeError(`${this.constructor.name}: invalid max result size (${this._target?.maxResultSize}) for a concatenate-and-hash output.`)
|
|
76
|
+
// }
|
|
77
|
+
// } else {
|
|
78
|
+
// switch (this.request.dataType) {
|
|
79
|
+
// case "RadonBoolean":
|
|
80
|
+
// case "RadonInteger":
|
|
81
|
+
// case "RadonFloat":
|
|
82
|
+
// if (this._target?.maxResultSize && this._target.maxResultSize !== RADON_ERROR_MAX_BYTES) {
|
|
83
|
+
// throw new TypeError(`${this.constructor.name}: invalid max result size (${
|
|
84
|
+
// this._target.maxResultSize
|
|
85
|
+
// } bytes) for expected result type (${this.request.dataType})`)
|
|
86
|
+
// }
|
|
87
|
+
// break;
|
|
88
|
+
// default:
|
|
89
|
+
// if (this._target?.maxResultSize && this._target.maxResultSize < RADON_ERROR_MAX_BYTES) {
|
|
90
|
+
// throw new TypeError(`${this.constructor.name}: invalid max result size (${
|
|
91
|
+
// this._target.maxResultSize
|
|
92
|
+
// } bytes) for variant result type (${this.request.dataType})`)
|
|
93
|
+
// }
|
|
94
|
+
// maxResultSize = this._target?.maxResultSize || DataRequestPayload.DEFAULT_MAX_RESULT_SIZE
|
|
95
|
+
// }
|
|
96
|
+
// }
|
|
97
|
+
// }
|
|
69
98
|
return {
|
|
70
99
|
collateral: Number(collateral),
|
|
71
100
|
commitAndRevealFee: Number(commitAndRevealFee),
|
|
101
|
+
// maxResultSize, TODO: only if protocol >= V2_1
|
|
72
102
|
minConsensusPercentage,
|
|
73
103
|
witnesses,
|
|
74
104
|
witnessReward: Number(witnessReward),
|
|
@@ -155,13 +185,13 @@ class DataRequestPayload extends payloads_1.TransactionPayloadMultiSig {
|
|
|
155
185
|
this._target.witnesses -= Math.ceil(delta / (DR_COMMIT_TX_WEIGHT + DR_REVEAL_TX_WEIGHT * TX_WEIGHT_OUTPUT_SIZE));
|
|
156
186
|
if (this._target.witnesses < 3) {
|
|
157
187
|
delete this._target.witnesses;
|
|
158
|
-
throw new Error(`${this.constructor.name}: cannot estimate witnesses: radon request too
|
|
188
|
+
throw new Error(`${this.constructor.name}: cannot estimate witnesses: radon request too heavy: ${this.weight} weight units`);
|
|
159
189
|
}
|
|
160
190
|
}
|
|
161
191
|
}
|
|
162
192
|
const priority = this._target?.fees || types_1.TransactionPriority.Opulent;
|
|
163
193
|
let estimatedFees = await this._estimateNetworkFees(ledger.provider, priority);
|
|
164
|
-
while (this._fees < estimatedFees) {
|
|
194
|
+
while (this._fees < estimatedFees && this._change >= 0) {
|
|
165
195
|
this._fees = estimatedFees;
|
|
166
196
|
this._outputs = [];
|
|
167
197
|
this._inputs = [];
|
|
@@ -180,10 +210,6 @@ class DataRequestPayload extends payloads_1.TransactionPayloadMultiSig {
|
|
|
180
210
|
this.prepareOutputs({ value: this._change });
|
|
181
211
|
estimatedFees = await this._estimateNetworkFees(ledger.provider, priority);
|
|
182
212
|
}
|
|
183
|
-
else {
|
|
184
|
-
// insufficient funds ...
|
|
185
|
-
break;
|
|
186
|
-
}
|
|
187
213
|
}
|
|
188
214
|
}
|
|
189
215
|
return this._change;
|
|
@@ -314,10 +340,10 @@ class DataRequestPayload extends payloads_1.TransactionPayloadMultiSig {
|
|
|
314
340
|
+ TX_WEIGHT_OUTPUT_SIZE))));
|
|
315
341
|
}
|
|
316
342
|
_fees2UnitaryCommitRevealReward(fees, witnesses) {
|
|
317
|
-
return fees / BigInt(witnesses) || 1n;
|
|
343
|
+
return (fees / BigInt(witnesses)) || 1n;
|
|
318
344
|
}
|
|
319
345
|
_fees2UnitaryReward(fees, _witnesses) {
|
|
320
|
-
return utils_1.BigMath.max(fees,
|
|
346
|
+
return utils_1.BigMath.max(fees, BigInt(Math.ceil(Number(DataRequestPayload.MIN_COLLATERAL / COLLATERAL_RATIO))));
|
|
321
347
|
}
|
|
322
348
|
_fees2Value(fees, witnesses) {
|
|
323
349
|
return (BigInt(witnesses) * (this._fees2UnitaryReward(fees, witnesses)
|
|
@@ -333,8 +359,8 @@ class DataRequestPayload extends payloads_1.TransactionPayloadMultiSig {
|
|
|
333
359
|
}
|
|
334
360
|
}
|
|
335
361
|
exports.DataRequestPayload = DataRequestPayload;
|
|
362
|
+
DataRequestPayload.DEFAULT_MAX_RESULT_SIZE = 256;
|
|
336
363
|
DataRequestPayload.DEFAULT_WITNESSES = 12;
|
|
337
364
|
DataRequestPayload.MAX_WEIGHT = 80000;
|
|
338
365
|
DataRequestPayload.MIN_COLLATERAL = 20000000000n;
|
|
339
|
-
DataRequestPayload.MIN_CONSENSUS_PERCENTAGE = 51;
|
|
340
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRGF0YVJlcXVlc3RQYXlsb2FkLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi9jcnlwdG8vcGF5bG9hZHMvRGF0YVJlcXVlc3RQYXlsb2FkLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLE1BQU0sSUFBSSxHQUFHLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQTtBQUU1QiwyQ0FBOEM7QUFDOUMsTUFBTSxTQUFTLEdBQUcsaUJBQVMsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLHNDQUFzQyxDQUFDLENBQUMsQ0FBQTtBQUVyRixrREFBaUU7QUFFakUsdUNBQXlEO0FBSXpELDBDQUF3RDtBQUN4RCxvQ0FBdUY7QUFDdkYsb0NBQTBDO0FBa0IxQyxNQUFNLGdCQUFnQixHQUFHLElBQUksQ0FBQztBQUU5QixNQUFNLG1CQUFtQixHQUFHLEdBQUcsQ0FBQTtBQUMvQixNQUFNLG1CQUFtQixHQUFHLEdBQUcsQ0FBQTtBQUMvQixNQUFNLGtCQUFrQixHQUFHLEdBQUcsQ0FBQTtBQUU5QixNQUFNLGtCQUFrQixHQUFHLENBQUMsQ0FBQTtBQUM1QixNQUFNLGlCQUFpQixHQUFHLENBQUMsQ0FBQTtBQUUzQixNQUFNLG9CQUFvQixHQUFHLEdBQUcsQ0FBQTtBQUNoQyxNQUFNLHFCQUFxQixHQUFHLEVBQUUsQ0FBQTtBQUVoQyxNQUFhLGtCQUFtQixTQUFRLHFDQUE2QztJQVVqRixZQUFhLGFBQXFCLEVBQUUsS0FBbUMsRUFBRSxhQUFpQztRQUN0RyxLQUFLLENBQUMsYUFBYSxFQUFFLGFBQWEsQ0FBQyxDQUFBO1FBQ25DLElBQUksS0FBSyxZQUFZLG9CQUFZLEVBQUUsQ0FBQztZQUNoQyxJQUFJLENBQUMsUUFBUSxHQUFHLEtBQUssQ0FBQTtRQUN6QixDQUFDO2FBQU0sSUFBSSxLQUFLLFlBQVkscUJBQWEsRUFBRSxDQUFDO1lBQ3hDLElBQUksQ0FBQyxRQUFRLEdBQUcsS0FBSyxDQUFBO1FBQ3pCLENBQUM7YUFBTSxDQUFDO1lBQ0osTUFBTSxJQUFJLFNBQVMsQ0FBQyxxREFBc0QsS0FBYSxFQUFFLFdBQVcsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFBO1FBQ2hILENBQUM7SUFDTCxDQUFDO0lBRUQsSUFBVyxPQUFPO1FBQ2QsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixFQUFFLENBQUE7UUFDdEMsSUFBSSxHQUFHLEVBQUUsQ0FBQztZQUNOLE1BQU0saUJBQWlCLEdBQUcsU0FBUyxDQUFDLFVBQVUsQ0FBQyxtQkFBbUIsQ0FBQyxDQUFBO1lBQ25FLE1BQU0sR0FBRyxHQUFHLGlCQUFpQixDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQTtZQUN6QyxJQUFJLEdBQUcsRUFBRSxDQUFDO2dCQUNOLE1BQU0sU0FBUyxDQUFDLEdBQUcsQ0FBQyxDQUFBO1lBQ3hCLENBQUM7aUJBQU0sQ0FBQztnQkFDSix1REFBdUQ7Z0JBQ3ZELE1BQU0sT0FBTyxHQUFHLGlCQUFpQixDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQTtnQkFDakQsK0RBQStEO2dCQUMvRCxNQUFNLFFBQVEsR0FBRyxpQkFBaUIsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUE7Z0JBQzNELGlEQUFpRDtnQkFDakQsT0FBTyxJQUFBLHFCQUFXLEVBQUMsSUFBQSxjQUFNLEVBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQTtZQUN4QyxDQUFDO1FBQ0wsQ0FBQzthQUFNLENBQUM7WUFDSixPQUFPLFNBQVMsQ0FBQTtRQUNwQixDQUFDO0lBQ0wsQ0FBQztJQUVELElBQVcsTUFBTTtRQUNiLElBQUksSUFBSSxDQUFDLE9BQU8sSUFBSSxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDN0IsTUFBTSxzQkFBc0IsR0FBRyxrQkFBa0IsQ0FBQyx3QkFBd0IsQ0FBQTtZQUMxRSxNQUFNLFNBQVMsR0FBRyxDQUNkLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxTQUFTLEtBQUssUUFBUTtnQkFDdEMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQyxNQUFNO2dCQUM1QyxDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxTQUFTLElBQUksQ0FBQyxDQUNwQyxDQUFDO1lBQ0YsTUFBTSxrQkFBa0IsR0FBRyxJQUFJLENBQUMsK0JBQStCLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxTQUFTLENBQUMsQ0FBQTtZQUN0RixNQUFNLGFBQWEsR0FBRyxJQUFJLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxTQUFTLENBQUMsQ0FBQTtZQUNyRSxNQUFNLFVBQVUsR0FBRyxhQUFhLEdBQUcsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFBO1lBQ3BELElBQUksVUFBVSxHQUFHLE1BQU0sQ0FBQyxnQkFBZ0I7Z0JBQ3BDLE1BQU0sSUFBSSxTQUFTLENBQUMsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksa0NBQWtDLFVBQVUsQ0FBQyxRQUFRLEVBQUUsTUFBTSxNQUFNLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQyxDQUFDO2lCQUNuSSxJQUFJLGFBQWEsR0FBRyxNQUFNLENBQUMsZ0JBQWdCO2dCQUM1QyxNQUFNLElBQUksU0FBUyxDQUFDLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLDhCQUE4QixhQUFhLENBQUMsUUFBUSxFQUFFLE1BQU0sTUFBTSxDQUFDLGdCQUFnQixFQUFFLENBQUMsQ0FBQztpQkFDbEksSUFBSSxrQkFBa0IsR0FBRyxNQUFNLENBQUMsZ0JBQWdCO2dCQUNqRCxNQUFNLElBQUksU0FBUyxDQUFDLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLGlDQUFpQyxrQkFBa0IsQ0FBQyxRQUFRLEVBQUUsTUFBTSxNQUFNLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQyxDQUFDO1lBQy9JLE9BQU87Z0JBQ0gsVUFBVSxFQUFFLE1BQU0sQ0FBQyxVQUFVLENBQUM7Z0JBQzlCLGtCQUFrQixFQUFFLE1BQU0sQ0FBQyxrQkFBa0IsQ0FBQztnQkFDOUMsc0JBQXNCO2dCQUN0QixTQUFTO2dCQUNULGFBQWEsRUFBRSxNQUFNLENBQUMsYUFBYSxDQUFDO2FBQ3ZDLENBQUE7UUFFTCxDQUFDO2FBQU0sQ0FBQztZQUNKLE9BQU8sU0FBUyxDQUFBO1FBQ3BCLENBQUM7SUFDTCxDQUFDO0lBRUQsSUFBVyxJQUFJO1FBQ1gsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQTtRQUMvQixJQUFJLFNBQVMsSUFBSSxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDNUIsT0FBTyxJQUFBLHFCQUFXLEVBQUMsSUFBQSxjQUFNLEVBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQztnQkFDcEMsSUFBQSx1QkFBYSxFQUFDLElBQUksQ0FBQyxPQUFPLENBQUM7Z0JBQzNCLElBQUEsY0FBTSxFQUFDLFNBQVMsQ0FBQzthQUNwQixDQUFDLENBQUMsQ0FBUyxDQUFBO1FBQ2hCLENBQUM7YUFBTSxDQUFDO1lBQ0osT0FBTyxTQUFTLENBQUE7UUFDcEIsQ0FBQztJQUNMLENBQUM7SUFFRCxJQUFXLFNBQVM7UUFDaEIsT0FBTyxrQkFBa0IsQ0FBQyxVQUFVLENBQUE7SUFDeEMsQ0FBQztJQUVELElBQVcsYUFBYTtRQUNwQixPQUFPLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFBO0lBQzFCLENBQUM7SUFFRCxJQUFXLFFBQVE7UUFDZixPQUFPLENBQ0gsSUFBSSxDQUFDLE9BQU87ZUFDTCxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sR0FBRyxDQUFDO2VBQ3ZCLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUTtlQUNmLENBQUMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUN4QixDQUFBO0lBQ0wsQ0FBQztJQUVELElBQVcsT0FBTztRQUNkLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQTtJQUN6RCxDQUFDO0lBRUQsSUFBVyxPQUFPO1FBQ2QsT0FBTyxJQUFJLENBQUMsT0FBTyxFQUFFLE9BQU8sQ0FBQTtJQUNoQyxDQUFDO0lBRUQsSUFBVyxPQUFPO1FBQ2QsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFBO0lBQ3hCLENBQUM7SUFFRCxJQUFXLEtBQUs7UUFDWixJQUFJLElBQUksQ0FBQyxPQUFPLElBQUksSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQzdCLE9BQU8sYUFBSyxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxTQUFTLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQTtRQUN0RixDQUFDO2FBQU0sQ0FBQztZQUNKLE9BQU8sYUFBSyxDQUFDLElBQUksRUFBRSxDQUFBO1FBQ3ZCLENBQUM7SUFDTCxDQUFDO0lBRUQsSUFBVyxNQUFNO1FBQ2IsSUFBSSxJQUFJLENBQUMsUUFBUSxJQUFJLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUNoQyxNQUFNLFNBQVMsR0FBRyxPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsU0FBUyxLQUFLLFFBQVEsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxTQUFTLElBQUksQ0FBQyxDQUFBO1lBQ3ZJLE9BQU8sQ0FDSCxrQkFBa0IsR0FBRyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxFQUFFLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztnQkFDN0QsQ0FBRSxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sR0FBRyxvQkFBb0I7c0JBQzFDLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxHQUFHLHFCQUFxQjtzQkFDNUMsU0FBUyxHQUFHLENBQ04sbUJBQW1COzBCQUNiLG1CQUFtQixHQUFHLGlCQUFpQjswQkFDdkMscUJBQXFCLENBQUMsb0ZBQW9GO3FCQUN2SDtzQkFDQyxJQUFJLENBQUMsR0FBRyxDQUFDLGtCQUFrQixFQUFFLElBQUksQ0FBQyxPQUFPLEVBQUUsYUFBYSxJQUFJLENBQUMsQ0FBQyxHQUFHLGlCQUFpQixDQUMzRixDQUFDO1FBQ04sQ0FBQzthQUFNLENBQUM7WUFDSixPQUFPLENBQUMsQ0FBQTtRQUNaLENBQUM7SUFDTCxDQUFDO0lBRU0sS0FBSyxDQUFDLFlBQVksQ0FBQyxNQUFlLEVBQUUsTUFBZ0I7UUFDdkQsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUNoQixNQUFNLElBQUksS0FBSyxDQUFDLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLHdDQUF3QyxDQUFDLENBQUE7UUFFckYsQ0FBQzthQUFNLElBQUssSUFBSSxDQUFDLE9BQWUsRUFBRSxJQUFJLFlBQVksYUFBSyxFQUFFLENBQUM7WUFDdEQsSUFBSSxDQUFDLEtBQUssR0FBSSxJQUFJLENBQUMsT0FBZSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUM7WUFDL0MsT0FBTyxLQUFLLENBQUMsWUFBWSxDQUFDLE1BQU0sRUFBRSxNQUFNLENBQUMsQ0FBQTtRQUM3QyxDQUFDO1FBRUQsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUNoQixJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxTQUFTLEVBQUUsQ0FBQztnQkFDMUIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FDN0Isa0JBQWtCLENBQUMsaUJBQWlCLEVBQ3BDLE1BQU0sTUFBTSxDQUFDLFFBQVEsQ0FBQyxTQUFTLEVBQUUsQ0FDcEMsQ0FBQTtnQkFDRCxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsU0FBUyxHQUFHLENBQUMsRUFBRSxDQUFDO29CQUM3QixPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFBO29CQUM3QixNQUFNLElBQUksS0FBSyxDQUFDLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLGdFQUFnRSxDQUFDLENBQUE7Z0JBRTdHLENBQUM7cUJBQU0sSUFBSSxJQUFJLENBQUMsTUFBTSxHQUFHLGtCQUFrQixDQUFDLFVBQVUsR0FBRyxHQUFHLEVBQUUsQ0FBQztvQkFDM0QsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLE1BQU0sR0FBRyxrQkFBa0IsQ0FBQyxVQUFVLEdBQUcsR0FBRyxDQUFBO29CQUMvRCxJQUFJLENBQUMsT0FBTyxDQUFDLFNBQVMsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLG1CQUFtQixHQUFHLG1CQUFtQixHQUFHLHFCQUFxQixDQUFDLENBQUMsQ0FBQTtvQkFDaEgsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLFNBQVMsR0FBRyxDQUFDLEVBQUUsQ0FBQzt3QkFDN0IsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQTt3QkFDN0IsTUFBTSxJQUFJLEtBQUssQ0FBQyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSwyREFBMkQsSUFBSSxDQUFDLE1BQU0sZUFBZSxDQUFDLENBQUE7b0JBQ2xJLENBQUM7Z0JBQ0wsQ0FBQztZQUNMLENBQUM7WUFDRCxNQUFNLFFBQVEsR0FBSSxJQUFJLENBQUMsT0FBZSxFQUFFLElBQTJCLElBQUksMkJBQW1CLENBQUMsT0FBTyxDQUFBO1lBQ2xHLElBQUksYUFBYSxHQUFHLE1BQU0sSUFBSSxDQUFDLG9CQUFvQixDQUFDLE1BQU0sQ0FBQyxRQUFRLEVBQUUsUUFBUSxDQUFDLENBQUM7WUFDL0UsT0FBTyxJQUFJLENBQUMsS0FBSyxHQUFHLGFBQWEsRUFBRSxDQUFDO2dCQUNoQyxJQUFJLENBQUMsS0FBSyxHQUFHLGFBQWEsQ0FBQTtnQkFDMUIsSUFBSSxDQUFDLFFBQVEsR0FBRyxFQUFFLENBQUE7Z0JBQ2xCLElBQUksQ0FBQyxPQUFPLEdBQUcsRUFBRSxDQUFBO2dCQUNqQixJQUFJLENBQUMsUUFBUSxHQUFHLEVBQUUsQ0FBQTtnQkFDbEIsb0VBQW9FO2dCQUNwRSxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQTtnQkFDbEUsTUFBTSxLQUFLLEdBQUcsTUFBTSxNQUFNLENBQUMsV0FBVyxDQUFDO29CQUNuQyxLQUFLLEVBQUUsYUFBSyxDQUFDLFVBQVUsQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDO29CQUMzRCxNQUFNO2lCQUNULENBQUMsQ0FBQTtnQkFDRixJQUFJLENBQUMsUUFBUSxJQUFJLEtBQUssQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxFQUFFLENBQUMsSUFBSSxHQUFHLElBQUksRUFBRSxFQUFFLENBQUMsQ0FBQTtnQkFDOUYsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQTtnQkFDM0IsTUFBTSxDQUFDLFlBQVksQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFBO2dCQUM3QixJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxRQUFRLEdBQUcsQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFBO2dCQUNuRCxJQUFJLElBQUksQ0FBQyxPQUFPLElBQUksQ0FBQyxFQUFFLENBQUM7b0JBQ3BCLElBQUksQ0FBQyxjQUFjLENBQUMsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUE7b0JBQzVDLGFBQWEsR0FBRyxNQUFNLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxNQUFNLENBQUMsUUFBUSxFQUFFLFFBQVEsQ0FBQyxDQUFBO2dCQUM5RSxDQUFDO3FCQUFNLENBQUM7b0JBQ0oseUJBQXlCO29CQUN6QixNQUFLO2dCQUNULENBQUM7WUFDTCxDQUFDO1FBQ0wsQ0FBQztRQUNELE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQTtJQUN2QixDQUFDO0lBRU0sV0FBVyxDQUFDLE1BQXlCO1FBQ3hDLE9BQU87WUFDSCxPQUFPLEVBQUUsSUFBSSxDQUFDLE9BQU87WUFDckIsT0FBTyxFQUFFLElBQUksQ0FBQyxPQUFPO1lBQ3JCLE9BQU8sRUFBRSxJQUFJLENBQUMsT0FBTztZQUNyQixTQUFTLEVBQUUsTUFBTSxDQUFDLFNBQVM7U0FDOUIsQ0FBQTtJQUNMLENBQUM7SUFFTSxjQUFjLENBQUMsTUFBMEI7UUFDNUMsSUFBSSxNQUFNLEVBQUUsS0FBSyxFQUFFLENBQUM7WUFDaEIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUM7Z0JBQ2YsR0FBRyxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTTtnQkFDM0IsS0FBSyxFQUFFLE1BQU0sQ0FBQyxLQUFLO2dCQUNuQixTQUFTLEVBQUUsQ0FBQzthQUNmLENBQUMsQ0FBQTtRQUNOLENBQUM7SUFDTCxDQUFDO0lBRU0sV0FBVyxDQUFDLE1BQXlCO1FBQ3hDLElBQUksQ0FBQyxPQUFPLEdBQUcsRUFBRSxDQUFBO1FBQ2pCLElBQUksQ0FBQyxRQUFRLEdBQUcsRUFBRSxDQUFBO1FBQ2xCLElBQUksQ0FBQyxLQUFLLEdBQUcsRUFBRSxDQUFBO1FBQ2YsSUFBSSxDQUFDLE9BQU8sR0FBRyxFQUFFLENBQUE7UUFDakIsSUFBSSxDQUFDLFFBQVEsR0FBRyxFQUFFLENBQUE7UUFDbEIsSUFBSSxDQUFDLE9BQU8sR0FBRyxNQUFNLENBQUE7UUFDckIsSUFBSSxJQUFJLENBQUMsTUFBTSxFQUFFLFVBQVUsSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLFVBQVUsR0FBRyxrQkFBa0IsQ0FBQyxjQUFjLEVBQUUsQ0FBQztZQUN4RixNQUFNLElBQUksU0FBUyxDQUNmLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLDBDQUNwQixJQUFJLENBQUMsTUFBTSxDQUFDLFVBQ2hCLE1BQ0ksa0JBQWtCLENBQUMsY0FDdkIsRUFBRSxDQUNMLENBQUM7UUFDTixDQUFDO1FBQ0QsSUFBSSxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDaEIsTUFBTSxJQUFJLEdBQUcsTUFBTSxFQUFFLElBQUksQ0FBQTtZQUN6QixJQUFJLElBQUksS0FBSyxTQUFTLEVBQUUsQ0FBQztnQkFDckIsTUFBTSxJQUFJLFNBQVMsQ0FBQyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxpQ0FBaUMsQ0FBQyxDQUFBO1lBQ2xGLENBQUM7aUJBQU0sSUFBSSxPQUFPLElBQUksS0FBSyxRQUFRLEVBQUUsQ0FBQztnQkFDbEMsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLGlCQUFpQixDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQTtZQUMzRCxDQUFDO2lCQUFNLENBQUM7Z0JBQ0osSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxDQUFBO1lBQ3pELENBQUM7UUFDTCxDQUFDO1FBQ0QsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFBO0lBQzNCLENBQUM7SUFFTSxNQUFNLENBQUMsUUFBUSxHQUFHLEtBQUs7UUFDMUIsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQTtRQUMxQixPQUFPO1lBQ0gsTUFBTSxFQUFFLElBQUksQ0FBQyxNQUFNO2lCQUNkLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxjQUFjLEVBQUUsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDLENBQUM7WUFDM0QsT0FBTyxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQztnQkFDOUIsR0FBRyxFQUFFLEdBQUcsQ0FBQyxHQUFHO2dCQUNaLFNBQVMsRUFBRSxHQUFHLENBQUMsU0FBUztnQkFDeEIsS0FBSyxFQUFFLEdBQUcsQ0FBQyxLQUFLLENBQUMsUUFBUSxFQUFFO2FBQzlCLENBQUMsQ0FBQztZQUNILFNBQVMsRUFBRTtnQkFDUCxHQUFHLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsRUFBRSxZQUFZLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO2dCQUMxRSxxQkFBcUIsRUFBRSxNQUFNLEVBQUUsa0JBQWtCO2dCQUNqRCx3QkFBd0IsRUFBRSxNQUFNLEVBQUUsc0JBQXNCO2dCQUN4RCxTQUFTLEVBQUUsTUFBTSxFQUFFLFNBQVM7Z0JBQzVCLGNBQWMsRUFBRSxNQUFNLEVBQUUsYUFBYTtnQkFDckMsVUFBVSxFQUFFLE1BQU0sRUFBRSxVQUFVO2FBQ2pDO1NBQ0osQ0FBQTtJQUNMLENBQUM7SUFFTSxVQUFVO1FBQ2IsSUFBSSxJQUFJLENBQUMsUUFBUSxJQUFJLElBQUksQ0FBQyxPQUFPLElBQUksSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQ2pELE9BQU87Z0JBQ0gsTUFBTSxFQUFFLElBQUksQ0FBQyxNQUFNO3FCQUNkLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRTtvQkFDUixNQUFNLGFBQWEsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQTtvQkFDdkQsTUFBTSxXQUFXLEdBQUcsUUFBUSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUE7b0JBQy9ELE9BQU87d0JBQ0gsYUFBYSxFQUFFOzRCQUNYLGFBQWEsRUFBRSxFQUFFLE1BQU0sRUFBRSxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUEsdUJBQWEsRUFBQyxhQUFhLENBQUMsQ0FBQyxFQUFFOzRCQUNuRSxHQUFHLENBQUMsV0FBVyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxXQUFXLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO3lCQUM5QztxQkFDSixDQUFBO2dCQUNMLENBQUMsQ0FBQztnQkFDTixPQUFPLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDO29CQUM5QixHQUFHLEVBQUUsRUFBRSxJQUFJLEVBQUUsS0FBSyxDQUFDLElBQUksQ0FBQyxxQkFBYSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsU0FBUyxFQUFFLENBQUMsR0FBRztvQkFDekUsS0FBSyxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQztvQkFDaEMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxTQUFTLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLFFBQVEsRUFBRSxHQUFHLENBQUMsU0FBUyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztpQkFDNUQsQ0FBQyxDQUFDO2dCQUNILFFBQVEsRUFBRSxJQUFJLENBQUMsbUJBQW1CLEVBQUU7YUFDdkMsQ0FBQTtRQUNMLENBQUM7SUFDTCxDQUFDO0lBRU0sY0FBYyxDQUFDLE1BQVk7UUFDOUIsTUFBTSxHQUFHLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxNQUFNLENBQUMsQ0FBQTtRQUN4QyxJQUFJLE1BQU0sSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUMzQyxJQUFJLENBQUMsQ0FDRCxNQUFNO21CQUNDLENBQ0MsQ0FBQyxNQUFNLEVBQUUsSUFBSTt1QkFDVixDQUNDLE1BQU0sQ0FBQyxJQUFJLFlBQVksYUFBSyxJQUFLLE1BQU0sQ0FBQyxJQUFjLENBQUMsTUFBTSxHQUFHLENBQUM7MkJBQzlELE1BQU0sQ0FBQyxNQUFNLENBQUMsMkJBQW1CLENBQUMsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUM5RCxDQUNKO21CQUNFLENBQUMsTUFBTSxFQUFFLFNBQVMsSUFBSSxNQUFNLEVBQUUsU0FBUyxLQUFLLFNBQVMsQ0FBQzttQkFDdEQsQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLElBQUksTUFBTSxFQUFFLElBQUksQ0FBQyxDQUMxQyxFQUFFLENBQUM7Z0JBQ0EsTUFBTSxJQUFJLFNBQVMsQ0FBQyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxzQkFBc0IsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUE7WUFDL0YsQ0FBQztpQkFBTSxJQUFJLE1BQU0sRUFBRSxTQUFTLEVBQUUsQ0FBQztnQkFDM0IsSUFBSSxPQUFPLE1BQU0sQ0FBQyxTQUFTLEtBQUssUUFBUSxFQUFFLENBQUM7b0JBQ3ZDLE1BQU0sSUFBSSxTQUFTLENBQUMsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksdURBQXVELE1BQU0sQ0FBQyxTQUFTLEVBQUUsQ0FBQyxDQUFBO2dCQUMxSCxDQUFDO2dCQUNELE1BQU0sQ0FBQyxTQUFTLEdBQUcsUUFBUSxDQUFDLE1BQU0sQ0FBQyxTQUFtQixDQUFDLENBQUE7WUFDM0QsQ0FBQztZQUNELE9BQU8sTUFBMkIsQ0FBQTtRQUN0QyxDQUFDO2FBQU0sQ0FBQztZQUNKLE9BQU8sU0FBUyxDQUFBO1FBQ3BCLENBQUM7SUFDTCxDQUFDO0lBRVMsa0JBQWtCLENBQUMsTUFBWTtRQUNyQyxJQUFJLE1BQU0sRUFBRSxDQUFDO1lBQ1QsT0FBTyxNQUFNLENBQUMsV0FBVyxDQUNyQixNQUFNLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUUsRUFBRSxDQUFDO2dCQUN0QyxNQUFNO2dCQUNOLE1BQU07Z0JBQ04sZUFBZTtnQkFDZixXQUFXO2FBQ2QsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FDbkIsQ0FBQTtRQUNMLENBQUM7SUFDTCxDQUFDO0lBRVMsS0FBSyxDQUFDLG9CQUFvQixDQUFDLFFBQTBCLEVBQUUsUUFBUSxHQUFHLDJCQUFtQixDQUFDLE1BQU07UUFDbEcsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztZQUNwQixJQUFJLENBQUMsV0FBVyxHQUFHLE1BQU0sUUFBUSxDQUFDLFVBQVUsRUFBRSxDQUFBO1FBQ2xELENBQUM7UUFDRCxPQUFPLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUNwQixJQUFJLENBQUMsV0FBVyxDQUFDLE9BQU8sUUFBUSxFQUFFLENBQUMsQ0FBQyxRQUFRLEdBQUcsQ0FDM0MsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FDekIsSUFBSSxDQUFDLE1BQU07WUFDWCw0RUFBNEU7Y0FDMUUscUJBQXFCLENBQzFCLENBQ0osQ0FDSixDQUFDLENBQUM7SUFDUCxDQUFDO0lBRVMsK0JBQStCLENBQUMsSUFBWSxFQUFFLFNBQWlCO1FBQ3JFLE9BQU8sSUFBSSxHQUFHLE1BQU0sQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFLENBQUE7SUFDekMsQ0FBQztJQUVTLG1CQUFtQixDQUFDLElBQVksRUFBRSxVQUFrQjtRQUMxRCxPQUFPLGVBQU8sQ0FBQyxHQUFHLENBQ2QsSUFBSSxFQUNKLEVBQUUsR0FBRyxrQkFBa0IsQ0FBQyxjQUFjLEdBQUcsZ0JBQWdCLENBQzVELENBQUM7SUFDTixDQUFDO0lBQ1MsV0FBVyxDQUFDLElBQVksRUFBRSxTQUFpQjtRQUNqRCxPQUFPLENBQ0gsTUFBTSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQ2hCLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLEVBQUUsU0FBUyxDQUFDO2NBQ3ZDLEVBQUUsR0FBRyxJQUFJLENBQUMsK0JBQStCLENBQUMsSUFBSSxFQUFFLFNBQVMsQ0FBQyxDQUMvRCxDQUNKLENBQUM7SUFDTixDQUFDO0lBRVMsbUJBQW1CO1FBQ3pCLElBQUksSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQ2hCLE9BQU87Z0JBQ0gsR0FBRyxJQUFJLENBQUMsTUFBTTtnQkFDZCxXQUFXLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxVQUFVLEVBQUU7YUFDMUMsQ0FBQTtRQUNMLENBQUM7SUFDTCxDQUFDOztBQW5YTCxnREFvWEM7QUFsWGlCLG9DQUFpQixHQUFHLEVBQUUsQ0FBQTtBQUN0Qiw2QkFBVSxHQUFHLEtBQU0sQ0FBQTtBQUNuQixpQ0FBYyxHQUFHLFlBQWUsQ0FBQTtBQUNoQywyQ0FBd0IsR0FBRyxFQUFFLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJjb25zdCBMb25nID0gcmVxdWlyZShcImxvbmdcIilcclxuXHJcbmltcG9ydCB7IFJvb3QgYXMgUHJvdG9Sb290IH0gZnJvbSBcInByb3RvYnVmanNcIlxyXG5jb25zdCBwcm90b1Jvb3QgPSBQcm90b1Jvb3QuZnJvbUpTT04ocmVxdWlyZShcIi4uLy4uLy4uLy4uL3dpdG5ldC93aXRuZXQucHJvdG8uanNvblwiKSlcclxuXHJcbmltcG9ydCB7IGZyb21IZXhTdHJpbmcsIHRvSGV4U3RyaW5nIH0gZnJvbSBcIi4uLy4uLy4uL2Jpbi9oZWxwZXJzXCJcclxuXHJcbmltcG9ydCB7IFJhZG9uUmVxdWVzdCwgUmFkb25UZW1wbGF0ZSB9IGZyb20gXCIuLi8uLi9yYWRvblwiXHJcbmltcG9ydCB7IEhhc2gsIEhleFN0cmluZywgSUpzb25ScGNQcm92aWRlciB9IGZyb20gXCIuLi8uLi90eXBlc1wiXHJcblxyXG5pbXBvcnQgeyBJTGVkZ2VyIH0gZnJvbSBcIi4uL2ludGVyZmFjZXNcIlxyXG5pbXBvcnQgeyBUcmFuc2FjdGlvblBheWxvYWRNdWx0aVNpZyB9IGZyb20gXCIuLi9wYXlsb2Fkc1wiXHJcbmltcG9ydCB7IENvaW5zLCBQdWJsaWNLZXlIYXNoLCBUcmFuc2FjdGlvblBhcmFtcywgVHJhbnNhY3Rpb25Qcmlvcml0eSB9IGZyb20gXCIuLi90eXBlc1wiXHJcbmltcG9ydCB7IEJpZ01hdGgsIHNoYTI1NiB9IGZyb20gXCIuLi91dGlsc1wiXHJcblxyXG5leHBvcnQgdHlwZSBEYXRhUmVxdWVzdFRlbXBsYXRlQXJncyA9IGFueSB8IHN0cmluZyB8IHN0cmluZ1tdIHwgc3RyaW5nW11bXVxyXG4gICAgXHJcbmV4cG9ydCB0eXBlIERhdGFSZXF1ZXN0UGFyYW1zID0gVHJhbnNhY3Rpb25QYXJhbXMgJiB7XHJcbiAgICBhcmdzPzogRGF0YVJlcXVlc3RUZW1wbGF0ZUFyZ3MsXHJcbiAgICBtYXhSZXN1bHRTaXplPzogbnVtYmVyLFxyXG4gICAgd2l0bmVzc2VzPzogbnVtYmVyLFxyXG59XHJcblxyXG50eXBlIERhdGFSZXF1ZXN0T3V0cHV0U0xBID0ge1xyXG4gICAgY29sbGF0ZXJhbDogbnVtYmVyLFxyXG4gICAgY29tbWl0QW5kUmV2ZWFsRmVlOiBudW1iZXIsXHJcbiAgICBtaW5Db25zZW5zdXNQZXJjZW50YWdlOiBudW1iZXIsXHJcbiAgICB3aXRuZXNzZXM6IG51bWJlcixcclxuICAgIHdpdG5lc3NSZXdhcmQ/OiBudW1iZXIsXHJcbn1cclxuXHJcbmNvbnN0IENPTExBVEVSQUxfUkFUSU8gPSAxMDBuO1xyXG5cclxuY29uc3QgRFJfQ09NTUlUX1RYX1dFSUdIVCA9IDQwMFxyXG5jb25zdCBEUl9SRVZFQUxfVFhfV0VJR0hUID0gMjAwXHJcbmNvbnN0IERSX1RBTExZX1RYX1dFSUdIVCA9IDEwMFxyXG5cclxuY29uc3QgRFJfVFhfV0VJR0hUX0FMUEhBID0gMVxyXG5jb25zdCBEUl9UWF9XRUlHSFRfQkVUQSA9IDFcclxuXHJcbmNvbnN0IFRYX1dFSUdIVF9JTlBVVF9TSVpFID0gMTMzXHJcbmNvbnN0IFRYX1dFSUdIVF9PVVRQVVRfU0laRSA9IDM2XHJcblxyXG5leHBvcnQgY2xhc3MgRGF0YVJlcXVlc3RQYXlsb2FkIGV4dGVuZHMgVHJhbnNhY3Rpb25QYXlsb2FkTXVsdGlTaWc8RGF0YVJlcXVlc3RQYXJhbXM+IHtcclxuXHJcbiAgICBwdWJsaWMgc3RhdGljIERFRkFVTFRfV0lUTkVTU0VTID0gMTJcclxuICAgIHB1YmxpYyBzdGF0aWMgTUFYX1dFSUdIVCA9IDgwXzAwMFxyXG4gICAgcHVibGljIHN0YXRpYyBNSU5fQ09MTEFURVJBTCA9IDIwXzAwMF8wMDBfMDAwblxyXG4gICAgcHVibGljIHN0YXRpYyBNSU5fQ09OU0VOU1VTX1BFUkNFTlRBR0UgPSA1MTtcclxuXHJcbiAgICBwcm90ZWN0ZWQgX3JlcXVlc3Q/OiBSYWRvblJlcXVlc3QgXHJcbiAgICBwdWJsaWMgcmVhZG9ubHkgdGVtcGxhdGU/OiBSYWRvblRlbXBsYXRlXHJcbiAgICBcclxuICAgIGNvbnN0cnVjdG9yIChwcm90b1R5cGVOYW1lOiBzdHJpbmcsIHJhZG9uOiBSYWRvblJlcXVlc3QgfCBSYWRvblRlbXBsYXRlLCBpbml0aWFsVGFyZ2V0PzogRGF0YVJlcXVlc3RQYXJhbXMpIHtcclxuICAgICAgICBzdXBlcihwcm90b1R5cGVOYW1lLCBpbml0aWFsVGFyZ2V0KVxyXG4gICAgICAgIGlmIChyYWRvbiBpbnN0YW5jZW9mIFJhZG9uUmVxdWVzdCkge1xyXG4gICAgICAgICAgICB0aGlzLl9yZXF1ZXN0ID0gcmFkb25cclxuICAgICAgICB9IGVsc2UgaWYgKHJhZG9uIGluc3RhbmNlb2YgUmFkb25UZW1wbGF0ZSkge1xyXG4gICAgICAgICAgICB0aGlzLnRlbXBsYXRlID0gcmFkb25cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGBEYXRhUmVxdWVzdFBheWxvYWQ6IHVuc3VwcG9ydGVkIFJhZG9uIGFzc2V0IHR5cGU6ICR7KHJhZG9uIGFzIGFueSk/LmNvbnN0cnVjdG9yLm5hbWV9YClcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldCBkcm9IYXNoKCk6IEhhc2ggfCB1bmRlZmluZWQge1xyXG4gICAgICAgIGNvbnN0IG9iaiA9IHRoaXMuX3RvRHJPdXRwdXRQcm90b2J1ZigpXHJcbiAgICAgICAgaWYgKG9iaikge1xyXG4gICAgICAgICAgICBjb25zdCBEYXRhUmVxdWVzdE91dHB1dCA9IHByb3RvUm9vdC5sb29rdXBUeXBlKFwiRGF0YVJlcXVlc3RPdXRwdXRcIilcclxuICAgICAgICAgICAgY29uc3QgZXJyID0gRGF0YVJlcXVlc3RPdXRwdXQudmVyaWZ5KG9iailcclxuICAgICAgICAgICAgaWYgKGVycikge1xyXG4gICAgICAgICAgICAgICAgdGhyb3cgVHlwZUVycm9yKGVycilcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKFwiXFxuZHJvSGFzaC5vYmogPT5cIiwgSlNPTi5zdHJpbmdpZnkob2JqKSlcclxuICAgICAgICAgICAgICAgIGNvbnN0IG1lc3NhZ2UgPSBEYXRhUmVxdWVzdE91dHB1dC5mcm9tT2JqZWN0KG9iailcclxuICAgICAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKFwiXFxuZHJvSGFzaC5tZXNzYWdlID0+XCIsIEpTT04uc3RyaW5naWZ5KG1lc3NhZ2UpKVxyXG4gICAgICAgICAgICAgICAgY29uc3QgYnl0ZWNvZGUgPSBEYXRhUmVxdWVzdE91dHB1dC5lbmNvZGUobWVzc2FnZSkuZmluaXNoKClcclxuICAgICAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKFwiXFxuZHJvSGFzaC5ieXRlY29kZSA9PlwiLCBieXRlY29kZSlcclxuICAgICAgICAgICAgICAgIHJldHVybiB0b0hleFN0cmluZyhzaGEyNTYoYnl0ZWNvZGUpKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZFxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0IGRyb1NMQSgpOiBEYXRhUmVxdWVzdE91dHB1dFNMQSB8IHVuZGVmaW5lZCB7XHJcbiAgICAgICAgaWYgKHRoaXMuX3RhcmdldCAmJiB0aGlzLl9mZWVzKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IG1pbkNvbnNlbnN1c1BlcmNlbnRhZ2UgPSBEYXRhUmVxdWVzdFBheWxvYWQuTUlOX0NPTlNFTlNVU19QRVJDRU5UQUdFXHJcbiAgICAgICAgICAgIGNvbnN0IHdpdG5lc3NlcyA9IChcclxuICAgICAgICAgICAgICAgIHR5cGVvZiB0aGlzLl90YXJnZXQud2l0bmVzc2VzID09PSAnb2JqZWN0J1xyXG4gICAgICAgICAgICAgICAgICAgID8gT2JqZWN0LmtleXModGhpcy5fdGFyZ2V0LndpdG5lc3NlcykubGVuZ3RoIFxyXG4gICAgICAgICAgICAgICAgICAgIDogdGhpcy5fdGFyZ2V0LndpdG5lc3NlcyB8fCAwXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIGNvbnN0IGNvbW1pdEFuZFJldmVhbEZlZSA9IHRoaXMuX2ZlZXMyVW5pdGFyeUNvbW1pdFJldmVhbFJld2FyZCh0aGlzLl9mZWVzLCB3aXRuZXNzZXMpXHJcbiAgICAgICAgICAgIGNvbnN0IHdpdG5lc3NSZXdhcmQgPSB0aGlzLl9mZWVzMlVuaXRhcnlSZXdhcmQodGhpcy5fZmVlcywgd2l0bmVzc2VzKSBcclxuICAgICAgICAgICAgY29uc3QgY29sbGF0ZXJhbCA9IHdpdG5lc3NSZXdhcmQgKiBCaWdJbnQod2l0bmVzc2VzKVxyXG4gICAgICAgICAgICBpZiAoY29sbGF0ZXJhbCA+IE51bWJlci5NQVhfU0FGRV9JTlRFR0VSKSBcclxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoYCR7dGhpcy5jb25zdHJ1Y3Rvci5uYW1lfTogdG9vIG11Y2ggd2l0bmVzcyBjb2xsYXRlcmFsOiAke2NvbGxhdGVyYWwudG9TdHJpbmcoKX0gPiAke051bWJlci5NQVhfU0FGRV9JTlRFR0VSfWApO1xyXG4gICAgICAgICAgICBlbHNlIGlmICh3aXRuZXNzUmV3YXJkID4gTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVIpXHJcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGAke3RoaXMuY29uc3RydWN0b3IubmFtZX06IHRvbyBtdWNoIHdpdG5lc3MgcmV3YXJkOiAke3dpdG5lc3NSZXdhcmQudG9TdHJpbmcoKX0gPiAke051bWJlci5NQVhfU0FGRV9JTlRFR0VSfWApO1xyXG4gICAgICAgICAgICBlbHNlIGlmIChjb21taXRBbmRSZXZlYWxGZWUgPiBOdW1iZXIuTUFYX1NBRkVfSU5URUdFUilcclxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoYCR7dGhpcy5jb25zdHJ1Y3Rvci5uYW1lfTogdG9vIG11Y2ggY29tbWl0L3JldmVhbCBmZWU6ICR7Y29tbWl0QW5kUmV2ZWFsRmVlLnRvU3RyaW5nKCl9ID4gJHtOdW1iZXIuTUFYX1NBRkVfSU5URUdFUn1gKTtcclxuICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICAgIGNvbGxhdGVyYWw6IE51bWJlcihjb2xsYXRlcmFsKSxcclxuICAgICAgICAgICAgICAgIGNvbW1pdEFuZFJldmVhbEZlZTogTnVtYmVyKGNvbW1pdEFuZFJldmVhbEZlZSksXHJcbiAgICAgICAgICAgICAgICBtaW5Db25zZW5zdXNQZXJjZW50YWdlLFxyXG4gICAgICAgICAgICAgICAgd2l0bmVzc2VzLFxyXG4gICAgICAgICAgICAgICAgd2l0bmVzc1Jld2FyZDogTnVtYmVyKHdpdG5lc3NSZXdhcmQpLFxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWRcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldCBoYXNoKCk6IEhhc2ggfCB1bmRlZmluZWQge1xyXG4gICAgICAgIGNvbnN0IF9ieXRlY29kZSA9IHRoaXMuYnl0ZWNvZGVcclxuICAgICAgICBpZiAoX2J5dGVjb2RlICYmIHRoaXMuZHJvSGFzaCkge1xyXG4gICAgICAgICAgICByZXR1cm4gdG9IZXhTdHJpbmcoc2hhMjU2KEJ1ZmZlci5jb25jYXQoW1xyXG4gICAgICAgICAgICAgICAgZnJvbUhleFN0cmluZyh0aGlzLmRyb0hhc2gpLFxyXG4gICAgICAgICAgICAgICAgc2hhMjU2KF9ieXRlY29kZSksXHJcbiAgICAgICAgICAgIF0pKSkgYXMgSGFzaFxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWRcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldCBtYXhXZWlnaHQoKTogbnVtYmVyIHtcclxuICAgICAgICByZXR1cm4gRGF0YVJlcXVlc3RQYXlsb2FkLk1BWF9XRUlHSFRcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0IHBhcmFtZXRlcml6ZWQoKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuICEhdGhpcy50ZW1wbGF0ZVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXQgcHJlcGFyZWQoKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuIChcclxuICAgICAgICAgICAgdGhpcy5jb3ZlcmVkXHJcbiAgICAgICAgICAgICAgICAmJiB0aGlzLl9pbnB1dHMubGVuZ3RoID4gMFxyXG4gICAgICAgICAgICAgICAgJiYgISF0aGlzLl9yZXF1ZXN0XHJcbiAgICAgICAgICAgICAgICAmJiAhIXRoaXMuX3RhcmdldFxyXG4gICAgICAgIClcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0IHJhZEFyZ3MoKTogRGF0YVJlcXVlc3RUZW1wbGF0ZUFyZ3MgfCB1bmRlZmluZWQge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnRlbXBsYXRlID8gdGhpcy5fdGFyZ2V0Py5hcmdzIDogdW5kZWZpbmVkXHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldCByYWRIYXNoKCk6IEhleFN0cmluZyB8IHVuZGVmaW5lZCB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMucmVxdWVzdD8ucmFkSGFzaFxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXQgcmVxdWVzdCgpOiBSYWRvblJlcXVlc3QgfCB1bmRlZmluZWQge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9yZXF1ZXN0XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldCB2YWx1ZSgpOiBDb2lucyB7XHJcbiAgICAgICAgaWYgKHRoaXMuX3RhcmdldCAmJiB0aGlzLl9mZWVzKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBDb2lucy5mcm9tUGVkcm9zKHRoaXMuX2ZlZXMyVmFsdWUodGhpcy5fZmVlcywgdGhpcy5fdGFyZ2V0LndpdG5lc3NlcyB8fCAwKSlcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICByZXR1cm4gQ29pbnMuemVybygpXHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXQgd2VpZ2h0KCk6IG51bWJlciB7XHJcbiAgICAgICAgaWYgKHRoaXMuX3JlcXVlc3QgJiYgdGhpcy5fdGFyZ2V0KSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHdpdG5lc3NlcyA9IHR5cGVvZiB0aGlzLl90YXJnZXQud2l0bmVzc2VzID09PSAnb2JqZWN0JyA/IE9iamVjdC5rZXlzKHRoaXMuX3RhcmdldC53aXRuZXNzZXMpLmxlbmd0aCA6IHRoaXMuX3RhcmdldC53aXRuZXNzZXMgfHwgMFxyXG4gICAgICAgICAgICByZXR1cm4gKFxyXG4gICAgICAgICAgICAgICAgRFJfVFhfV0VJR0hUX0FMUEhBICogKHRoaXMuX3JlcXVlc3Qud2VpZ2h0KCkgKyA4ICsgMiArIDggKyA0ICsgOCksXHJcbiAgICAgICAgICAgICAgICAgICAgKyB0aGlzLl9pbnB1dHMubGVuZ3RoICogVFhfV0VJR0hUX0lOUFVUX1NJWkUgXHJcbiAgICAgICAgICAgICAgICAgICAgKyB0aGlzLl9vdXRwdXRzLmxlbmd0aCAqIFRYX1dFSUdIVF9PVVRQVVRfU0laRSBcclxuICAgICAgICAgICAgICAgICAgICArIHdpdG5lc3NlcyAqIChcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIERSX0NPTU1JVF9UWF9XRUlHSFRcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArIERSX1JFVkVBTF9UWF9XRUlHSFQgKiBEUl9UWF9XRUlHSFRfQkVUQSAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyBUWF9XRUlHSFRfT1VUUFVUX1NJWkUgLy8gVE9ETyBWMi4xOiB0eXBlb2YgdGhpcy5fdGFyZ2V0LndpdG5lc3NlcyA9PT0gJ29iamVjdCcgPyBUWF9XRUlHSFRfT1VUUFVUX1NJWkUgOiAwXHJcbiAgICAgICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgICAgICAgICsgTWF0aC5tYXgoRFJfVEFMTFlfVFhfV0VJR0hULCB0aGlzLl90YXJnZXQ/Lm1heFJlc3VsdFNpemUgfHwgMCkgKiBEUl9UWF9XRUlHSFRfQkVUQVxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHJldHVybiAwXHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBhc3luYyBjb25zdW1lVXR4b3MobGVkZ2VyOiBJTGVkZ2VyLCByZWxvYWQ/OiBib29sZWFuKTogUHJvbWlzZTxiaWdpbnQ+IHtcclxuICAgICAgICBpZiAoIXRoaXMuX3RhcmdldCkge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYCR7dGhpcy5jb25zdHJ1Y3Rvci5uYW1lfTogaW50ZXJuYWwgZXJyb3I6IG5vIGluLWZsaWdodCBwYXJhbXMuYClcclxuICAgICAgICBcclxuICAgICAgICB9IGVsc2UgaWYgKCh0aGlzLl90YXJnZXQgYXMgYW55KT8uZmVlcyBpbnN0YW5jZW9mIENvaW5zKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX2ZlZXMgPSAodGhpcy5fdGFyZ2V0IGFzIGFueSkuZmVlcy5wZWRyb3M7XHJcbiAgICAgICAgICAgIHJldHVybiBzdXBlci5jb25zdW1lVXR4b3MobGVkZ2VyLCByZWxvYWQpXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoIXRoaXMuY292ZXJlZCkge1xyXG4gICAgICAgICAgICBpZiAoIXRoaXMuX3RhcmdldC53aXRuZXNzZXMpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuX3RhcmdldC53aXRuZXNzZXMgPSBNYXRoLm1pbihcclxuICAgICAgICAgICAgICAgICAgICBEYXRhUmVxdWVzdFBheWxvYWQuREVGQVVMVF9XSVRORVNTRVMsIFxyXG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IGxlZGdlci5wcm92aWRlci53aXRuZXNzZXMoKVxyXG4gICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuX3RhcmdldC53aXRuZXNzZXMgPCAzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZGVsZXRlIHRoaXMuX3RhcmdldC53aXRuZXNzZXNcclxuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYCR7dGhpcy5jb25zdHJ1Y3Rvci5uYW1lfTogY2Fubm90IGVzdGltYXRlIHdpdG5lc3NlczogbmV0d29yayBub3QgcmVhZHkgZm9yIHdpdG5lc3NpbmcuYCkgICAgXHJcbiAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy53ZWlnaHQgPiBEYXRhUmVxdWVzdFBheWxvYWQuTUFYX1dFSUdIVCAqIDAuOCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGRlbHRhID0gdGhpcy53ZWlnaHQgLSBEYXRhUmVxdWVzdFBheWxvYWQuTUFYX1dFSUdIVCAqIDAuOFxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX3RhcmdldC53aXRuZXNzZXMgLT0gTWF0aC5jZWlsKGRlbHRhIC8gKERSX0NPTU1JVF9UWF9XRUlHSFQgKyBEUl9SRVZFQUxfVFhfV0VJR0hUICogVFhfV0VJR0hUX09VVFBVVF9TSVpFKSlcclxuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5fdGFyZ2V0LndpdG5lc3NlcyA8IDMpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZGVsZXRlIHRoaXMuX3RhcmdldC53aXRuZXNzZXNcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGAke3RoaXMuY29uc3RydWN0b3IubmFtZX06IGNhbm5vdCBlc3RpbWF0ZSB3aXRuZXNzZXM6IHJhZG9uIHJlcXVlc3QgdG9vIGNvbXBsZXg6ICR7dGhpcy53ZWlnaHR9IHdlaWdodCB1bml0c2ApXHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNvbnN0IHByaW9yaXR5ID0gKHRoaXMuX3RhcmdldCBhcyBhbnkpPy5mZWVzIGFzIFRyYW5zYWN0aW9uUHJpb3JpdHkgfHwgVHJhbnNhY3Rpb25Qcmlvcml0eS5PcHVsZW50XHJcbiAgICAgICAgICAgIGxldCBlc3RpbWF0ZWRGZWVzID0gYXdhaXQgdGhpcy5fZXN0aW1hdGVOZXR3b3JrRmVlcyhsZWRnZXIucHJvdmlkZXIsIHByaW9yaXR5KTtcclxuICAgICAgICAgICAgd2hpbGUgKHRoaXMuX2ZlZXMgPCBlc3RpbWF0ZWRGZWVzKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9mZWVzID0gZXN0aW1hdGVkRmVlc1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fb3V0cHV0cyA9IFtdXHJcbiAgICAgICAgICAgICAgICB0aGlzLl9pbnB1dHMgPSBbXVxyXG4gICAgICAgICAgICAgICAgdGhpcy5fY292ZXJlZCA9IDBuXHJcbiAgICAgICAgICAgICAgICAvLyBjb25zdW1lIHV0eG9zIGFzIHRvIGNvdmVyIGZvciBlc3RpbWF0ZWQgdmFsdWUgYW5kIGVzdGltYXRlZCBmZWVzIFxyXG4gICAgICAgICAgICAgICAgY29uc3QgdmFsdWUgPSB0aGlzLl9mZWVzMlZhbHVlKHRoaXMuX2ZlZXMsIHRoaXMuX3RhcmdldC53aXRuZXNzZXMpXHJcbiAgICAgICAgICAgICAgICBjb25zdCB1dHhvcyA9IGF3YWl0IGxlZGdlci5zZWxlY3RVdHhvcyh7IFxyXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOiBDb2lucy5mcm9tUGVkcm9zKHZhbHVlICsgdGhpcy5fZmVlcyAtIHRoaXMuX2NvdmVyZWQpLCBcclxuICAgICAgICAgICAgICAgICAgICByZWxvYWQsXHJcbiAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgdGhpcy5fY292ZXJlZCArPSB1dHhvcy5tYXAodXR4byA9PiBCaWdJbnQodXR4by52YWx1ZSkpLnJlZHVjZSgocHJldiwgY3VycikgPT4gcHJldiArIGN1cnIsIDBuKVxyXG4gICAgICAgICAgICAgICAgdGhpcy5faW5wdXRzLnB1c2goLi4udXR4b3MpXHJcbiAgICAgICAgICAgICAgICBsZWRnZXIuY29uc3VtZVV0eG9zKC4uLnV0eG9zKVxyXG4gICAgICAgICAgICAgICAgdGhpcy5fY2hhbmdlID0gdGhpcy5fY292ZXJlZCAtICh2YWx1ZSArIHRoaXMuX2ZlZXMpXHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5fY2hhbmdlID49IDApIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnByZXBhcmVPdXRwdXRzKHsgdmFsdWU6IHRoaXMuX2NoYW5nZSB9KVxyXG4gICAgICAgICAgICAgICAgICAgIGVzdGltYXRlZEZlZXMgPSBhd2FpdCB0aGlzLl9lc3RpbWF0ZU5ldHdvcmtGZWVzKGxlZGdlci5wcm92aWRlciwgcHJpb3JpdHkpXHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIGluc3VmZmljaWVudCBmdW5kcyAuLi5cclxuICAgICAgICAgICAgICAgICAgICBicmVha1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0aGlzLl9jaGFuZ2VcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgaW50b1JlY2VpcHQodGFyZ2V0OiBEYXRhUmVxdWVzdFBhcmFtcyk6IGFueSB7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgZHJvSGFzaDogdGhpcy5kcm9IYXNoLFxyXG4gICAgICAgICAgICByYWRBcmdzOiB0aGlzLnJhZEFyZ3MsXHJcbiAgICAgICAgICAgIHJhZEhhc2g6IHRoaXMucmFkSGFzaCxcclxuICAgICAgICAgICAgd2l0bmVzc2VzOiB0YXJnZXQud2l0bmVzc2VzLFxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgcHJlcGFyZU91dHB1dHMoY2hhbmdlPzogeyB2YWx1ZTogYmlnaW50IH0pOiBhbnkge1xyXG4gICAgICAgIGlmIChjaGFuZ2U/LnZhbHVlKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX291dHB1dHMucHVzaCh7XHJcbiAgICAgICAgICAgICAgICBwa2g6IHRoaXMuX2lucHV0c1swXS5zaWduZXIsXHJcbiAgICAgICAgICAgICAgICB2YWx1ZTogY2hhbmdlLnZhbHVlLFxyXG4gICAgICAgICAgICAgICAgdGltZV9sb2NrOiAwLFxyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgcmVzZXRUYXJnZXQodGFyZ2V0OiBEYXRhUmVxdWVzdFBhcmFtcyk6IGFueSB7XHJcbiAgICAgICAgdGhpcy5fY2hhbmdlID0gMG5cclxuICAgICAgICB0aGlzLl9jb3ZlcmVkID0gMG5cclxuICAgICAgICB0aGlzLl9mZWVzID0gMG5cclxuICAgICAgICB0aGlzLl9pbnB1dHMgPSBbXVxyXG4gICAgICAgIHRoaXMuX291dHB1dHMgPSBbXVxyXG4gICAgICAgIHRoaXMuX3RhcmdldCA9IHRhcmdldFxyXG4gICAgICAgIGlmICh0aGlzLmRyb1NMQT8uY29sbGF0ZXJhbCAmJiB0aGlzLmRyb1NMQS5jb2xsYXRlcmFsIDwgRGF0YVJlcXVlc3RQYXlsb2FkLk1JTl9DT0xMQVRFUkFMKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXHJcbiAgICAgICAgICAgICAgICBgJHt0aGlzLmNvbnN0cnVjdG9yLm5hbWV9OiB3aXRuZXNzaW5nIGNvbGxhdGVyYWwgYmVsb3cgbWluaW11bTogJHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmRyb1NMQS5jb2xsYXRlcmFsXHJcbiAgICAgICAgICAgICAgICB9IDwgJHtcclxuICAgICAgICAgICAgICAgICAgICBEYXRhUmVxdWVzdFBheWxvYWQuTUlOX0NPTExBVEVSQUxcclxuICAgICAgICAgICAgICAgIH1gXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0aGlzLnRlbXBsYXRlKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGFyZ3MgPSB0YXJnZXQ/LmFyZ3NcclxuICAgICAgICAgICAgaWYgKGFyZ3MgPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihgJHt0aGlzLmNvbnN0cnVjdG9yLm5hbWV9OiBubyB0ZW1wbGF0ZSBhcmdzIHdlcmUgcGFzc2VkLmApXHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIGFyZ3MgPT09ICdzdHJpbmcnKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9yZXF1ZXN0ID0gdGhpcy50ZW1wbGF0ZS5idWlsZFJhZG9uUmVxdWVzdChbYXJnc10pXHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9yZXF1ZXN0ID0gdGhpcy50ZW1wbGF0ZS5idWlsZFJhZG9uUmVxdWVzdChhcmdzKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGRlbGV0ZSB0aGlzLl9wcmlvcml0aWVzXHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHRvSlNPTihodW1hbml6ZSA9IGZhbHNlKTogYW55IHtcclxuICAgICAgICBjb25zdCBkcm9TTEEgPSB0aGlzLmRyb1NMQSAgICAgICAgXHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgaW5wdXRzOiB0aGlzLmlucHV0c1xyXG4gICAgICAgICAgICAgICAgLm1hcCh1dHhvID0+ICh7IG91dHB1dF9wb2ludGVyOiB1dHhvLm91dHB1dF9wb2ludGVyIH0pKSxcclxuICAgICAgICAgICAgb3V0cHV0czogdGhpcy5vdXRwdXRzLm1hcCh2dG8gPT4gKHsgXHJcbiAgICAgICAgICAgICAgICBwa2g6IHZ0by5wa2gsXHJcbiAgICAgICAgICAgICAgICB0aW1lX2xvY2s6IHZ0by50aW1lX2xvY2ssXHJcbiAgICAgICAgICAgICAgICB2YWx1ZTogdnRvLnZhbHVlLnRvU3RyaW5nKCksXHJcbiAgICAgICAgICAgIH0pKSxcclxuICAgICAgICAgICAgZHJfb3V0cHV0OiB7XHJcbiAgICAgICAgICAgICAgICAuLi4odGhpcy5fcmVxdWVzdCA/IHsgZGF0YV9yZXF1ZXN0OiB0aGlzLl9yZXF1ZXN0LnRvSlNPTihodW1hbml6ZSkgfSA6IHt9KSxcclxuICAgICAgICAgICAgICAgIGNvbW1pdF9hbmRfcmV2ZWFsX2ZlZTogZHJvU0xBPy5jb21taXRBbmRSZXZlYWxGZWUsXHJcbiAgICAgICAgICAgICAgICBtaW5fY29uc2Vuc3VzX3BlcmNlbnRhZ2U6IGRyb1NMQT8ubWluQ29uc2Vuc3VzUGVyY2VudGFnZSxcclxuICAgICAgICAgICAgICAgIHdpdG5lc3NlczogZHJvU0xBPy53aXRuZXNzZXMsXHJcbiAgICAgICAgICAgICAgICB3aXRuZXNzX3Jld2FyZDogZHJvU0xBPy53aXRuZXNzUmV3YXJkLFxyXG4gICAgICAgICAgICAgICAgY29sbGF0ZXJhbDogZHJvU0xBPy5jb2xsYXRlcmFsXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9ICAgXHJcblxyXG4gICAgcHVibGljIHRvUHJvdG9idWYoKTogYW55IHtcclxuICAgICAgICBpZiAodGhpcy5wcmVwYXJlZCAmJiB0aGlzLl90YXJnZXQgJiYgdGhpcy5fcmVxdWVzdCkge1xyXG4gICAgICAgICAgICByZXR1cm4geyAgICBcclxuICAgICAgICAgICAgICAgIGlucHV0czogdGhpcy5pbnB1dHNcclxuICAgICAgICAgICAgICAgICAgICAubWFwKHV0eG8gPT4geyBcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdHJhbnNhY3Rpb25JZCA9IHV0eG8ub3V0cHV0X3BvaW50ZXIuc3BsaXQoJzonKVswXVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBvdXRwdXRJbmRleCA9IHBhcnNlSW50KHV0eG8ub3V0cHV0X3BvaW50ZXIuc3BsaXQoJzonKVsxXSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dFBvaW50ZXI6IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmFuc2FjdGlvbklkOiB7IFNIQTI1NjogQXJyYXkuZnJvbShmcm9tSGV4U3RyaW5nKHRyYW5zYWN0aW9uSWQpKSB9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLihvdXRwdXRJbmRleCA+IDAgPyB7IG91dHB1dEluZGV4IH0gOiB7fSksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfSksXHJcbiAgICAgICAgICAgICAgICBvdXRwdXRzOiB0aGlzLm91dHB1dHMubWFwKHZ0byA9PiAoeyBcclxuICAgICAgICAgICAgICAgICAgICBwa2g6IHsgaGFzaDogQXJyYXkuZnJvbShQdWJsaWNLZXlIYXNoLmZyb21CZWNoMzIodnRvLnBraCkudG9CeXRlczIwKCkpLCB9LFxyXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOiBMb25nLmZyb21WYWx1ZSh2dG8udmFsdWUpLFxyXG4gICAgICAgICAgICAgICAgICAgIC4uLih2dG8udGltZV9sb2NrID4gMCA/IHsgdGltZUxvY2s6IHZ0by50aW1lX2xvY2sgfSA6IHt9KSxcclxuICAgICAgICAgICAgICAgIH0pKSxcclxuICAgICAgICAgICAgICAgIGRyT3V0cHV0OiB0aGlzLl90b0RyT3V0cHV0UHJvdG9idWYoKSxcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgdmFsaWRhdGVUYXJnZXQodGFyZ2V0PzogYW55KTogRGF0YVJlcXVlc3RQYXJhbXMgfCB1bmRlZmluZWQge1xyXG4gICAgICAgIHRhcmdldCA9IHRoaXMuX2NsZWFuVGFyZ2V0RXh0cmFzKHRhcmdldClcclxuICAgICAgICBpZiAodGFyZ2V0ICYmIE9iamVjdC5rZXlzKHRhcmdldCkubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICBpZiAoIShcclxuICAgICAgICAgICAgICAgIHRhcmdldFxyXG4gICAgICAgICAgICAgICAgICAgICYmIChcclxuICAgICAgICAgICAgICAgICAgICAgICAgIXRhcmdldD8uZmVlcyBcclxuICAgICAgICAgICAgICAgICAgICAgICAgfHwgKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0LmZlZXMgaW5zdGFuY2VvZiBDb2lucyAmJiAodGFyZ2V0LmZlZXMgYXMgQ29pbnMpLnBlZHJvcyA+IDAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCBPYmplY3QudmFsdWVzKFRyYW5zYWN0aW9uUHJpb3JpdHkpLmluY2x1ZGVzKHRhcmdldC5mZWVzKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgICAgICAgICYmICh0YXJnZXQ/LndpdG5lc3NlcyB8fCB0YXJnZXQ/LndpdG5lc3NlcyA9PT0gdW5kZWZpbmVkKVxyXG4gICAgICAgICAgICAgICAgICAgICYmICghdGhpcy50ZW1wbGF0ZSB8fCB0YXJnZXQ/LmFyZ3MpXHJcbiAgICAgICAgICAgICkpIHtcclxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoYCR7dGhpcy5jb25zdHJ1Y3Rvci5uYW1lfTogaW52YWxpZCBvcHRpb25zOiAke0pTT04uc3RyaW5naWZ5KHRhcmdldCl9YClcclxuICAgICAgICAgICAgfSBlbHNlIGlmICh0YXJnZXQ/LndpdG5lc3Nlcykge1xyXG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiB0YXJnZXQud2l0bmVzc2VzID09PSAnb2JqZWN0Jykge1xyXG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoYCR7dGhpcy5jb25zdHJ1Y3Rvci5uYW1lfTogZXhwbGljaXQgd2l0bmVzc2luZyBjb21taXR0ZWVzIG5vdCB5ZXQgc3VwcG9ydGVkOiAke3RhcmdldC53aXRuZXNzZXN9YClcclxuICAgICAgICAgICAgICAgIH0gXHJcbiAgICAgICAgICAgICAgICB0YXJnZXQud2l0bmVzc2VzID0gcGFyc2VJbnQodGFyZ2V0LndpdG5lc3NlcyBhcyBzdHJpbmcpXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIHRhcmdldCBhcyBEYXRhUmVxdWVzdFBhcmFtc1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWRcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHJvdGVjdGVkIF9jbGVhblRhcmdldEV4dHJhcyh0YXJnZXQ/OiBhbnkpOiBhbnkge1xyXG4gICAgICAgIGlmICh0YXJnZXQpIHtcclxuICAgICAgICAgICAgcmV0dXJuIE9iamVjdC5mcm9tRW50cmllcyhcclxuICAgICAgICAgICAgICAgIE9iamVjdC5lbnRyaWVzKHRhcmdldCkuZmlsdGVyKChba2V5LF0pID0+IFtcclxuICAgICAgICAgICAgICAgICAgICAnYXJncycsXHJcbiAgICAgICAgICAgICAgICAgICAgJ2ZlZXMnLFxyXG4gICAgICAgICAgICAgICAgICAgICdtYXhSZXN1bHRTaXplJyxcclxuICAgICAgICAgICAgICAgICAgICAnd2l0bmVzc2VzJyxcclxuICAgICAgICAgICAgICAgIF0uaW5jbHVkZXMoa2V5KSlcclxuICAgICAgICAgICAgKVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwcm90ZWN0ZWQgYXN5bmMgX2VzdGltYXRlTmV0d29ya0ZlZXMocHJvdmlkZXI6IElKc29uUnBjUHJvdmlkZXIsIHByaW9yaXR5ID0gVHJhbnNhY3Rpb25Qcmlvcml0eS5NZWRpdW0pOiBQcm9taXNlPGJpZ2ludD4ge1xyXG4gICAgICAgIGlmICghdGhpcy5fcHJpb3JpdGllcykge1xyXG4gICAgICAgICAgICB0aGlzLl9wcmlvcml0aWVzID0gYXdhaXQgcHJvdmlkZXIucHJpb3JpdGllcygpXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBCaWdJbnQoTWF0aC5mbG9vcihcclxuICAgICAgICAgICAgdGhpcy5fcHJpb3JpdGllc1tgZHJ0XyR7cHJpb3JpdHl9YF0ucHJpb3JpdHkgKiAoXHJcbiAgICAgICAgICAgICAgICB0aGlzLmNvdmVyZWQgPyB0aGlzLndlaWdodCA6IChcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLndlaWdodFxyXG4gICAgICAgICAgICAgICAgICAgIC8vIGVzdGltYXRlIHdlaWdodCBvZiBvbmUgc2luZ2xlIG91dHB1dCBpbiBjYXNlIHRoZXJlIHdhcyBjaGFuZ2UgdG8gcGF5IGJhY2tcclxuICAgICAgICAgICAgICAgICAgICArIFRYX1dFSUdIVF9PVVRQVVRfU0laRSBcclxuICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgKVxyXG4gICAgICAgICkpO1xyXG4gICAgfVxyXG5cclxuICAgIHByb3RlY3RlZCBfZmVlczJVbml0YXJ5Q29tbWl0UmV2ZWFsUmV3YXJkKGZlZXM6IGJpZ2ludCwgd2l0bmVzc2VzOiBudW1iZXIpOiBiaWdpbnQge1xyXG4gICAgICAgIHJldHVybiBmZWVzIC8gQmlnSW50KHdpdG5lc3NlcykgfHwgMW5cclxuICAgIH1cclxuXHJcbiAgICBwcm90ZWN0ZWQgX2ZlZXMyVW5pdGFyeVJld2FyZChmZWVzOiBiaWdpbnQsIF93aXRuZXNzZXM6IG51bWJlcik6IGJpZ2ludCB7XHJcbiAgICAgICAgcmV0dXJuIEJpZ01hdGgubWF4KFxyXG4gICAgICAgICAgICBmZWVzLFxyXG4gICAgICAgICAgICAxbiArIERhdGFSZXF1ZXN0UGF5bG9hZC5NSU5fQ09MTEFURVJBTCAvIENPTExBVEVSQUxfUkFUSU9cclxuICAgICAgICApO1xyXG4gICAgfVxyXG4gICAgcHJvdGVjdGVkIF9mZWVzMlZhbHVlKGZlZXM6IGJpZ2ludCwgd2l0bmVzc2VzOiBudW1iZXIpOiBiaWdpbnQge1xyXG4gICAgICAgIHJldHVybiAoXHJcbiAgICAgICAgICAgIEJpZ0ludCh3aXRuZXNzZXMpICogKFxyXG4gICAgICAgICAgICAgICAgdGhpcy5fZmVlczJVbml0YXJ5UmV3YXJkKGZlZXMsIHdpdG5lc3NlcylcclxuICAgICAgICAgICAgICAgICsgMm4gKiB0aGlzLl9mZWVzMlVuaXRhcnlDb21taXRSZXZlYWxSZXdhcmQoZmVlcywgd2l0bmVzc2VzKVxyXG4gICAgICAgICAgICApXHJcbiAgICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICBwcm90ZWN0ZWQgX3RvRHJPdXRwdXRQcm90b2J1ZigpOiBhbnkge1xyXG4gICAgICAgIGlmICh0aGlzLl9yZXF1ZXN0KSB7XHJcbiAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgICAuLi50aGlzLmRyb1NMQSxcclxuICAgICAgICAgICAgICAgIGRhdGFSZXF1ZXN0OiB0aGlzLl9yZXF1ZXN0LnRvUHJvdG9idWYoKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59XHJcblxyXG4iXX0=
|
|
366
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRGF0YVJlcXVlc3RQYXlsb2FkLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi9jcnlwdG8vcGF5bG9hZHMvRGF0YVJlcXVlc3RQYXlsb2FkLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLE1BQU0sSUFBSSxHQUFHLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQTtBQUU1QiwyQ0FBOEM7QUFDOUMsTUFBTSxTQUFTLEdBQUcsaUJBQVMsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLHNDQUFzQyxDQUFDLENBQUMsQ0FBQTtBQUVyRixrREFBaUU7QUFFakUsdUNBQXlEO0FBSXpELDBDQUF3RDtBQUN4RCxvQ0FBdUY7QUFDdkYsb0NBQTBDO0FBdUIxQyxNQUFNLGdCQUFnQixHQUFHLElBQUksQ0FBQztBQUM5QixtQ0FBbUM7QUFFbkMsTUFBTSxtQkFBbUIsR0FBRyxHQUFHLENBQUE7QUFDL0IsTUFBTSxtQkFBbUIsR0FBRyxHQUFHLENBQUE7QUFDL0IsTUFBTSxrQkFBa0IsR0FBRyxHQUFHLENBQUE7QUFFOUIsTUFBTSxrQkFBa0IsR0FBRyxDQUFDLENBQUE7QUFDNUIsTUFBTSxpQkFBaUIsR0FBRyxDQUFDLENBQUE7QUFFM0IsTUFBTSxvQkFBb0IsR0FBRyxHQUFHLENBQUE7QUFDaEMsTUFBTSxxQkFBcUIsR0FBRyxFQUFFLENBQUE7QUFFaEMsTUFBYSxrQkFBbUIsU0FBUSxxQ0FBNkM7SUFVakYsWUFBYSxhQUFxQixFQUFFLEtBQW1DLEVBQUUsYUFBaUM7UUFDdEcsS0FBSyxDQUFDLGFBQWEsRUFBRSxhQUFhLENBQUMsQ0FBQTtRQUNuQyxJQUFJLEtBQUssWUFBWSxvQkFBWSxFQUFFLENBQUM7WUFDaEMsSUFBSSxDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUE7UUFDekIsQ0FBQzthQUFNLElBQUksS0FBSyxZQUFZLHFCQUFhLEVBQUUsQ0FBQztZQUN4QyxJQUFJLENBQUMsUUFBUSxHQUFHLEtBQUssQ0FB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UUFDMUQsT0FBTyxlQUFPLENBQUMsR0FBRyxDQUNkLElBQUksRUFDSixNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsa0JBQWtCLENBQUMsY0FBYyxHQUFHLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxDQUNsRixDQUFDO0lBQ04sQ0FBQztJQUNTLFdBQVcsQ0FBQyxJQUFZLEVBQUUsU0FBaUI7UUFDakQsT0FBTyxDQUNILE1BQU0sQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUNoQixJQUFJLENBQUMsbUJBQW1CLENBQUMsSUFBSSxFQUFFLFNBQVMsQ0FBQztjQUN2QyxFQUFFLEdBQUcsSUFBSSxDQUFDLCtCQUErQixDQUFDLElBQUksRUFBRSxTQUFTLENBQUMsQ0FDL0QsQ0FDSixDQUFDO0lBQ04sQ0FBQztJQUVTLG1CQUFtQjtRQUN6QixJQUFJLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUNoQixPQUFPO2dCQUNILEdBQUcsSUFBSSxDQUFDLE1BQU07Z0JBQ2QsV0FBVyxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsVUFBVSxFQUFFO2FBQzFDLENBQUE7UUFDTCxDQUFDO0lBQ0wsQ0FBQzs7QUE3WUwsZ0RBOFlDO0FBNVlpQiwwQ0FBdUIsR0FBRyxHQUFHLENBQUM7QUFDOUIsb0NBQWlCLEdBQUcsRUFBRSxDQUFBO0FBQ3RCLDZCQUFVLEdBQUcsS0FBTSxDQUFBO0FBQ25CLGlDQUFjLEdBQUcsWUFBZSxDQUFBIiwic291cmNlc0NvbnRlbnQiOlsiY29uc3QgTG9uZyA9IHJlcXVpcmUoXCJsb25nXCIpXHJcblxyXG5pbXBvcnQgeyBSb290IGFzIFByb3RvUm9vdCB9IGZyb20gXCJwcm90b2J1ZmpzXCJcclxuY29uc3QgcHJvdG9Sb290ID0gUHJvdG9Sb290LmZyb21KU09OKHJlcXVpcmUoXCIuLi8uLi8uLi8uLi93aXRuZXQvd2l0bmV0LnByb3RvLmpzb25cIikpXHJcblxyXG5pbXBvcnQgeyBmcm9tSGV4U3RyaW5nLCB0b0hleFN0cmluZyB9IGZyb20gXCIuLi8uLi8uLi9iaW4vaGVscGVyc1wiXHJcblxyXG5pbXBvcnQgeyBSYWRvblJlcXVlc3QsIFJhZG9uVGVtcGxhdGUgfSBmcm9tIFwiLi4vLi4vcmFkb25cIlxyXG5pbXBvcnQgeyBIYXNoLCBIZXhTdHJpbmcsIElKc29uUnBjUHJvdmlkZXIgfSBmcm9tIFwiLi4vLi4vdHlwZXNcIlxyXG5cclxuaW1wb3J0IHsgSUxlZGdlciB9IGZyb20gXCIuLi9pbnRlcmZhY2VzXCJcclxuaW1wb3J0IHsgVHJhbnNhY3Rpb25QYXlsb2FkTXVsdGlTaWcgfSBmcm9tIFwiLi4vcGF5bG9hZHNcIlxyXG5pbXBvcnQgeyBDb2lucywgUHVibGljS2V5SGFzaCwgVHJhbnNhY3Rpb25QYXJhbXMsIFRyYW5zYWN0aW9uUHJpb3JpdHkgfSBmcm9tIFwiLi4vdHlwZXNcIlxyXG5pbXBvcnQgeyBCaWdNYXRoLCBzaGEyNTYgfSBmcm9tIFwiLi4vdXRpbHNcIlxyXG4vLyBpbXBvcnQgeyBPcGNvZGVzIH0gZnJvbSBcInNyYy9saWIvcmFkb24vcmVkdWNlcnNcIlxyXG5cclxuZXhwb3J0IHR5cGUgRGF0YVJlcXVlc3RUZW1wbGF0ZUFyZ3MgPSBhbnkgfCBzdHJpbmcgfCBzdHJpbmdbXSB8IHN0cmluZ1tdW11cclxuXHJcbmV4cG9ydCB0eXBlIERhdGFSZXF1ZXN0TWFqb3JpdHkgPSBcInNpbXBsZVwiIHwgXCJxdWFsaWZpZWRcIjtcclxuICAgIFxyXG5leHBvcnQgdHlwZSBEYXRhUmVxdWVzdFBhcmFtcyA9IFRyYW5zYWN0aW9uUGFyYW1zICYge1xyXG4gICAgYXJncz86IERhdGFSZXF1ZXN0VGVtcGxhdGVBcmdzLFxyXG4gICAgbWFqb3JpdHlUeXBlPzogRGF0YVJlcXVlc3RNYWpvcml0eSxcclxuICAgIG1heFJlc3VsdFNpemU/OiBudW1iZXIsXHJcbiAgICB3aXRuZXNzZXM/OiBudW1iZXIsIFxyXG59XHJcblxyXG50eXBlIERhdGFSZXF1ZXN0T3V0cHV0U0xBID0ge1xyXG4gICAgY29sbGF0ZXJhbD86IG51bWJlcixcclxuICAgIGNvbW1pdEFuZFJldmVhbEZlZT86IG51bWJlcixcclxuICAgIG1pbkNvbnNlbnN1c1BlcmNlbnRhZ2U6IG51bWJlcixcclxuICAgIHdpdG5lc3NlczogbnVtYmVyLFxyXG4gICAgd2l0bmVzc1Jld2FyZDogbnVtYmVyLFxyXG4gICAgbWF4UmVzdWx0U2l6ZT86IG51bWJlcixcclxufVxyXG5cclxuY29uc3QgQ09MTEFURVJBTF9SQVRJTyA9IDEwMG47XHJcbi8vIGNvbnN0IFJBRE9OX0VSUk9SX01BWF9CWVRFUyA9IDk7XHJcblxyXG5jb25zdCBEUl9DT01NSVRfVFhfV0VJR0hUID0gNDAwXHJcbmNvbnN0IERSX1JFVkVBTF9UWF9XRUlHSFQgPSAyMDBcclxuY29uc3QgRFJfVEFMTFlfVFhfV0VJR0hUID0gMTAwXHJcblxyXG5jb25zdCBEUl9UWF9XRUlHSFRfQUxQSEEgPSAxXHJcbmNvbnN0IERSX1RYX1dFSUdIVF9CRVRBID0gMVxyXG5cclxuY29uc3QgVFhfV0VJR0hUX0lOUFVUX1NJWkUgPSAxMzNcclxuY29uc3QgVFhfV0VJR0hUX09VVFBVVF9TSVpFID0gMzZcclxuXHJcbmV4cG9ydCBjbGFzcyBEYXRhUmVxdWVzdFBheWxvYWQgZXh0ZW5kcyBUcmFuc2FjdGlvblBheWxvYWRNdWx0aVNpZzxEYXRhUmVxdWVzdFBhcmFtcz4ge1xyXG5cclxuICAgIHB1YmxpYyBzdGF0aWMgREVGQVVMVF9NQVhfUkVTVUxUX1NJWkUgPSAyNTY7XHJcbiAgICBwdWJsaWMgc3RhdGljIERFRkFVTFRfV0lUTkVTU0VTID0gMTJcclxuICAgIHB1YmxpYyBzdGF0aWMgTUFYX1dFSUdIVCA9IDgwXzAwMFxyXG4gICAgcHVibGljIHN0YXRpYyBNSU5fQ09MTEFURVJBTCA9IDIwXzAwMF8wMDBfMDAwblxyXG5cclxuICAgIHByb3RlY3RlZCBfcmVxdWVzdD86IFJhZG9uUmVxdWVzdCBcclxuICAgIHB1YmxpYyByZWFkb25seSB0ZW1wbGF0ZT86IFJhZG9uVGVtcGxhdGVcclxuICAgIFxyXG4gICAgY29uc3RydWN0b3IgKHByb3RvVHlwZU5hbWU6IHN0cmluZywgcmFkb246IFJhZG9uUmVxdWVzdCB8IFJhZG9uVGVtcGxhdGUsIGluaXRpYWxUYXJnZXQ/OiBEYXRhUmVxdWVzdFBhcmFtcykge1xyXG4gICAgICAgIHN1cGVyKHByb3RvVHlwZU5hbWUsIGluaXRpYWxUYXJnZXQpXHJcbiAgICAgICAgaWYgKHJhZG9uIGluc3RhbmNlb2YgUmFkb25SZXF1ZXN0KSB7XHJcbiAgICAgICAgICAgIHRoaXMuX3JlcXVlc3QgPSByYWRvblxyXG4gICAgICAgIH0gZWxzZSBpZiAocmFkb24gaW5zdGFuY2VvZiBSYWRvblRlbXBsYXRlKSB7XHJcbiAgICAgICAgICAgIHRoaXMudGVtcGxhdGUgPSByYWRvblxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoYERhdGFSZXF1ZXN0UGF5bG9hZDogdW5zdXBwb3J0ZWQgUmFkb24gYXNzZXQgdHlwZTogJHsocmFkb24gYXMgYW55KT8uY29uc3RydWN0b3IubmFtZX1gKVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0IGRyb0hhc2goKTogSGFzaCB8IHVuZGVmaW5lZCB7XHJcbiAgICAgICAgY29uc3Qgb2JqID0gdGhpcy5fdG9Eck91dHB1dFByb3RvYnVmKClcclxuICAgICAgICBpZiAob2JqKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IERhdGFSZXF1ZXN0T3V0cHV0ID0gcHJvdG9Sb290Lmxvb2t1cFR5cGUoXCJEYXRhUmVxdWVzdE91dHB1dFwiKVxyXG4gICAgICAgICAgICBjb25zdCBlcnIgPSBEYXRhUmVxdWVzdE91dHB1dC52ZXJpZnkob2JqKVxyXG4gICAgICAgICAgICBpZiAoZXJyKSB7XHJcbiAgICAgICAgICAgICAgICB0aHJvdyBUeXBlRXJyb3IoZXJyKVxyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgLy8gY29uc29sZS5sb2coXCJcXG5kcm9IYXNoLm9iaiA9PlwiLCBKU09OLnN0cmluZ2lmeShvYmopKVxyXG4gICAgICAgICAgICAgICAgY29uc3QgbWVzc2FnZSA9IERhdGFSZXF1ZXN0T3V0cHV0LmZyb21PYmplY3Qob2JqKVxyXG4gICAgICAgICAgICAgICAgLy8gY29uc29sZS5sb2coXCJcXG5kcm9IYXNoLm1lc3NhZ2UgPT5cIiwgSlNPTi5zdHJpbmdpZnkobWVzc2FnZSkpXHJcbiAgICAgICAgICAgICAgICBjb25zdCBieXRlY29kZSA9IERhdGFSZXF1ZXN0T3V0cHV0LmVuY29kZShtZXNzYWdlKS5maW5pc2goKVxyXG4gICAgICAgICAgICAgICAgLy8gY29uc29sZS5sb2coXCJcXG5kcm9IYXNoLmJ5dGVjb2RlID0+XCIsIGJ5dGVjb2RlKVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRvSGV4U3RyaW5nKHNoYTI1NihieXRlY29kZSkpXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkXHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXQgZHJvU0xBKCk6IERhdGFSZXF1ZXN0T3V0cHV0U0xBIHwgdW5kZWZpbmVkIHtcclxuICAgICAgICBpZiAodGhpcy5fdGFyZ2V0ICYmIHRoaXMuX2ZlZXMpIHtcclxuICAgICAgICAgICAgY29uc3QgbWluQ29uc2Vuc3VzUGVyY2VudGFnZSA9IHRoaXMuX3RhcmdldC5tYWpvcml0eVR5cGUgPT09IFwicXVhbGlmaWVkXCIgPyA2NiA6IDUxO1xyXG4gICAgICAgICAgICBjb25zdCB3aXRuZXNzZXMgPSAoXHJcbiAgICAgICAgICAgICAgICB0eXBlb2YgdGhpcy5fdGFyZ2V0LndpdG5lc3NlcyA9PT0gJ29iamVjdCdcclxuICAgICAgICAgICAgICAgICAgICA/IE9iamVjdC5rZXlzKHRoaXMuX3RhcmdldC53aXRuZXNzZXMpLmxlbmd0aCBcclxuICAgICAgICAgICAgICAgICAgICA6IHRoaXMuX3RhcmdldC53aXRuZXNzZXMgfHwgMFxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgICAgICBjb25zdCB3aXRuZXNzUmV3YXJkID0gdGhpcy5fZmVlczJVbml0YXJ5UmV3YXJkKHRoaXMuX2ZlZXMsIHdpdG5lc3NlcykgXHJcbiAgICAgICAgICAgIGNvbnN0IGNvbW1pdEFuZFJldmVhbEZlZSA9IHRoaXMuX2ZlZXMyVW5pdGFyeUNvbW1pdFJldmVhbFJld2FyZCh0aGlzLl9mZWVzLCB3aXRuZXNzZXMpIC8vTWF0aC5mbG9vcihOdW1iZXIod2l0bmVzc1Jld2FyZCAvIEJpZ0ludCh3aXRuZXNzZXMpKSkgLy8gVE9ETzogemVyb2Z5IGlmIHByb3RvY29sID49IFYyXzFcclxuICAgICAgICAgICAgY29uc3QgY29sbGF0ZXJhbCA9IHdpdG5lc3NSZXdhcmQgKiBDT0xMQVRFUkFMX1JBVElPIC8vIFRPRE86IHplcm9meSBpZiBwcm90b2NvbCA+PSBWMl8xXHJcbiAgICAgICAgICAgIGlmIChjb2xsYXRlcmFsID4gTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVIpIFxyXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihgJHt0aGlzLmNvbnN0cnVjdG9yLm5hbWV9OiBleGNlc3NpdmUgd2l0bmVzcyBjb2xsYXRlcmFsOiAke2NvbGxhdGVyYWwudG9TdHJpbmcoKX0gPiAke051bWJlci5NQVhfU0FGRV9JTlRFR0VSfWApO1xyXG4gICAgICAgICAgICBlbHNlIGlmICh3aXRuZXNzUmV3YXJkID4gTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVIpXHJcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGAke3RoaXMuY29uc3RydWN0b3IubmFtZX06IGV4Y2Vzc2l2ZSB3aXRuZXNzIHJld2FyZDogJHt3aXRuZXNzUmV3YXJkLnRvU3RyaW5nKCl9ID4gJHtOdW1iZXIuTUFYX1NBRkVfSU5URUdFUn1gKTtcclxuICAgICAgICAgICAgZWxzZSBpZiAoY29tbWl0QW5kUmV2ZWFsRmVlID4gTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVIpXHJcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGAke3RoaXMuY29uc3RydWN0b3IubmFtZX06IGV4Y2Vzc2l2ZSBjb21taXQvcmV2ZWFsIGZlZTogJHtjb21taXRBbmRSZXZlYWxGZWUudG9TdHJpbmcoKX0gPiAke051bWJlci5NQVhfU0FGRV9JTlRFR0VSfWApO1xyXG4gICAgICAgICAgICAvLyBUT0RPOiBvbmx5IHdoZW4gcHJvdG9jb2wgPj0gVjJfMVxyXG4gICAgICAgICAgICAvLyBsZXQgbWF4UmVzdWx0U2l6ZVxyXG4gICAgICAgICAgICAvLyBpZiAodGhpcy5yZXF1ZXN0KSB7XHJcbiAgICAgICAgICAgIC8vICAgICBpZiAodGhpcy5yZXF1ZXN0LndpdG5lc3NSZWR1Y2VyLm9wY29kZSA9PT0gT3Bjb2Rlcy5Db25jYXRlbmF0ZUFuZEhhc2gpIHtcclxuICAgICAgICAgICAgLy8gICAgICAgICBpZiAodGhpcy5fdGFyZ2V0Py5tYXhSZXN1bHRTaXplICYmIHRoaXMuX3RhcmdldD8ubWF4UmVzdWx0U2l6ZSAhPT0gMzQpIHtcclxuICAgICAgICAgICAgLy8gICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihgJHt0aGlzLmNvbnN0cnVjdG9yLm5hbWV9OiBpbnZhbGlkIG1heCByZXN1bHQgc2l6ZSAoJHt0aGlzLl90YXJnZXQ/Lm1heFJlc3VsdFNpemV9KSBmb3IgYSBjb25jYXRlbmF0ZS1hbmQtaGFzaCBvdXRwdXQuYClcclxuICAgICAgICAgICAgLy8gICAgICAgICB9XHJcbiAgICAgICAgICAgIC8vICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAvLyAgICAgICAgIHN3aXRjaCAodGhpcy5yZXF1ZXN0LmRhdGFUeXBlKSB7XHJcbiAgICAgICAgICAgIC8vICAgICAgICAgICAgIGNhc2UgXCJSYWRvbkJvb2xlYW5cIjpcclxuICAgICAgICAgICAgLy8gICAgICAgICAgICAgY2FzZSBcIlJhZG9uSW50ZWdlclwiOlxyXG4gICAgICAgICAgICAvLyAgICAgICAgICAgICBjYXNlIFwiUmFkb25GbG9hdFwiOlxyXG4gICAgICAgICAgICAvLyAgICAgICAgICAgICAgICAgaWYgKHRoaXMuX3RhcmdldD8ubWF4UmVzdWx0U2l6ZSAmJiB0aGlzLl90YXJnZXQubWF4UmVzdWx0U2l6ZSAhPT0gUkFET05fRVJST1JfTUFYX0JZVEVTKSB7XHJcbiAgICAgICAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihgJHt0aGlzLmNvbnN0cnVjdG9yLm5hbWV9OiBpbnZhbGlkIG1heCByZXN1bHQgc2l6ZSAoJHtcclxuICAgICAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fdGFyZ2V0Lm1heFJlc3VsdFNpemVcclxuICAgICAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgfSBieXRlcykgZm9yIGV4cGVjdGVkIHJlc3VsdCB0eXBlICgke3RoaXMucmVxdWVzdC5kYXRhVHlwZX0pYClcclxuICAgICAgICAgICAgLy8gICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgLy8gICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAvLyAgICAgICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgICAvLyAgICAgICAgICAgICAgICAgaWYgKHRoaXMuX3RhcmdldD8ubWF4UmVzdWx0U2l6ZSAmJiB0aGlzLl90YXJnZXQubWF4UmVzdWx0U2l6ZSA8IFJBRE9OX0VSUk9SX01BWF9CWVRFUykge1xyXG4gICAgICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoYCR7dGhpcy5jb25zdHJ1Y3Rvci5uYW1lfTogaW52YWxpZCBtYXggcmVzdWx0IHNpemUgKCR7XHJcbiAgICAgICAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3RhcmdldC5tYXhSZXN1bHRTaXplXHJcbiAgICAgICAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAgIH0gYnl0ZXMpIGZvciB2YXJpYW50IHJlc3VsdCB0eXBlICgke3RoaXMucmVxdWVzdC5kYXRhVHlwZX0pYClcclxuICAgICAgICAgICAgLy8gICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgLy8gICAgICAgICAgICAgICAgIG1heFJlc3VsdFNpemUgPSB0aGlzLl90YXJnZXQ/Lm1heFJlc3VsdFNpemUgfHwgRGF0YVJlcXVlc3RQYXlsb2FkLkRFRkFVTFRfTUFYX1JFU1VMVF9TSVpFXHJcbiAgICAgICAgICAgIC8vICAgICAgICAgfVxyXG4gICAgICAgICAgICAvLyAgICAgfVxyXG4gICAgICAgICAgICAvLyB9XHJcbiAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgICBjb2xsYXRlcmFsOiBOdW1iZXIoY29sbGF0ZXJhbCksXHJcbiAgICAgICAgICAgICAgICBjb21taXRBbmRSZXZlYWxGZWU6IE51bWJlcihjb21taXRBbmRSZXZlYWxGZWUpLFxyXG4gICAgICAgICAgICAgICAgLy8gbWF4UmVzdWx0U2l6ZSwgVE9ETzogb25seSBpZiBwcm90b2NvbCA+PSBWMl8xXHJcbiAgICAgICAgICAgICAgICBtaW5Db25zZW5zdXNQZXJjZW50YWdlLFxyXG4gICAgICAgICAgICAgICAgd2l0bmVzc2VzLFxyXG4gICAgICAgICAgICAgICAgd2l0bmVzc1Jld2FyZDogTnVtYmVyKHdpdG5lc3NSZXdhcmQpLFxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWRcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldCBoYXNoKCk6IEhhc2ggfCB1bmRlZmluZWQge1xyXG4gICAgICAgIGNvbnN0IF9ieXRlY29kZSA9IHRoaXMuYnl0ZWNvZGVcclxuICAgICAgICBpZiAoX2J5dGVjb2RlICYmIHRoaXMuZHJvSGFzaCkge1xyXG4gICAgICAgICAgICByZXR1cm4gdG9IZXhTdHJpbmcoc2hhMjU2KEJ1ZmZlci5jb25jYXQoW1xyXG4gICAgICAgICAgICAgICAgZnJvbUhleFN0cmluZyh0aGlzLmRyb0hhc2gpLFxyXG4gICAgICAgICAgICAgICAgc2hhMjU2KF9ieXRlY29kZSksXHJcbiAgICAgICAgICAgIF0pKSkgYXMgSGFzaFxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWRcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldCBtYXhXZWlnaHQoKTogbnVtYmVyIHtcclxuICAgICAgICByZXR1cm4gRGF0YVJlcXVlc3RQYXlsb2FkLk1BWF9XRUlHSFRcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0IHBhcmFtZXRlcml6ZWQoKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuICEhdGhpcy50ZW1wbGF0ZVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXQgcHJlcGFyZWQoKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuIChcclxuICAgICAgICAgICAgdGhpcy5jb3ZlcmVkXHJcbiAgICAgICAgICAgICAgICAmJiB0aGlzLl9pbnB1dHMubGVuZ3RoID4gMFxyXG4gICAgICAgICAgICAgICAgJiYgISF0aGlzLl9yZXF1ZXN0XHJcbiAgICAgICAgICAgICAgICAmJiAhIXRoaXMuX3RhcmdldFxyXG4gICAgICAgIClcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0IHJhZEFyZ3MoKTogRGF0YVJlcXVlc3RUZW1wbGF0ZUFyZ3MgfCB1bmRlZmluZWQge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnRlbXBsYXRlID8gdGhpcy5fdGFyZ2V0Py5hcmdzIDogdW5kZWZpbmVkXHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldCByYWRIYXNoKCk6IEhleFN0cmluZyB8IHVuZGVmaW5lZCB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMucmVxdWVzdD8ucmFkSGFzaFxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXQgcmVxdWVzdCgpOiBSYWRvblJlcXVlc3QgfCB1bmRlZmluZWQge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9yZXF1ZXN0XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldCB2YWx1ZSgpOiBDb2lucyB7XHJcbiAgICAgICAgaWYgKHRoaXMuX3RhcmdldCAmJiB0aGlzLl9mZWVzKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBDb2lucy5mcm9tUGVkcm9zKHRoaXMuX2ZlZXMyVmFsdWUodGhpcy5fZmVlcywgdGhpcy5fdGFyZ2V0LndpdG5lc3NlcyB8fCAwKSlcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICByZXR1cm4gQ29pbnMuemVybygpXHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXQgd2VpZ2h0KCk6IG51bWJlciB7XHJcbiAgICAgICAgaWYgKHRoaXMuX3JlcXVlc3QgJiYgdGhpcy5fdGFyZ2V0KSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHdpdG5lc3NlcyA9IHR5cGVvZiB0aGlzLl90YXJnZXQud2l0bmVzc2VzID09PSAnb2JqZWN0JyA/IE9iamVjdC5rZXlzKHRoaXMuX3RhcmdldC53aXRuZXNzZXMpLmxlbmd0aCA6IHRoaXMuX3RhcmdldC53aXRuZXNzZXMgfHwgMFxyXG4gICAgICAgICAgICByZXR1cm4gKFxyXG4gICAgICAgICAgICAgICAgRFJfVFhfV0VJR0hUX0FMUEhBICogKHRoaXMuX3JlcXVlc3Qud2VpZ2h0KCkgKyA4ICsgMiArIDggKyA0ICsgOCksXHJcbiAgICAgICAgICAgICAgICAgICAgKyB0aGlzLl9pbnB1dHMubGVuZ3RoICogVFhfV0VJR0hUX0lOUFVUX1NJWkUgXHJcbiAgICAgICAgICAgICAgICAgICAgKyB0aGlzLl9vdXRwdXRzLmxlbmd0aCAqIFRYX1dFSUdIVF9PVVRQVVRfU0laRSBcclxuICAgICAgICAgICAgICAgICAgICArIHdpdG5lc3NlcyAqIChcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIERSX0NPTU1JVF9UWF9XRUlHSFRcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArIERSX1JFVkVBTF9UWF9XRUlHSFQgKiBEUl9UWF9XRUlHSFRfQkVUQSAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyBUWF9XRUlHSFRfT1VUUFVUX1NJWkUgLy8gVE9ETyBWMi4xOiB0eXBlb2YgdGhpcy5fdGFyZ2V0LndpdG5lc3NlcyA9PT0gJ29iamVjdCcgPyBUWF9XRUlHSFRfT1VUUFVUX1NJWkUgOiAwXHJcbiAgICAgICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgICAgICAgICsgTWF0aC5tYXgoRFJfVEFMTFlfVFhfV0VJR0hULCB0aGlzLl90YXJnZXQ/Lm1heFJlc3VsdFNpemUgfHwgMCkgKiBEUl9UWF9XRUlHSFRfQkVUQVxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHJldHVybiAwXHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBhc3luYyBjb25zdW1lVXR4b3MobGVkZ2VyOiBJTGVkZ2VyLCByZWxvYWQ/OiBib29sZWFuKTogUHJvbWlzZTxiaWdpbnQ+IHtcclxuICAgICAgICBpZiAoIXRoaXMuX3RhcmdldCkge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYCR7dGhpcy5jb25zdHJ1Y3Rvci5uYW1lfTogaW50ZXJuYWwgZXJyb3I6IG5vIGluLWZsaWdodCBwYXJhbXMuYClcclxuICAgICAgICBcclxuICAgICAgICB9IGVsc2UgaWYgKCh0aGlzLl90YXJnZXQgYXMgYW55KT8uZmVlcyBpbnN0YW5jZW9mIENvaW5zKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX2ZlZXMgPSAodGhpcy5fdGFyZ2V0IGFzIGFueSkuZmVlcy5wZWRyb3M7XHJcbiAgICAgICAgICAgIHJldHVybiBzdXBlci5jb25zdW1lVXR4b3MobGVkZ2VyLCByZWxvYWQpXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoIXRoaXMuY292ZXJlZCkge1xyXG4gICAgICAgICAgICBpZiAoIXRoaXMuX3RhcmdldC53aXRuZXNzZXMpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuX3RhcmdldC53aXRuZXNzZXMgPSBNYXRoLm1pbihcclxuICAgICAgICAgICAgICAgICAgICBEYXRhUmVxdWVzdFBheWxvYWQuREVGQVVMVF9XSVRORVNTRVMsIFxyXG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IGxlZGdlci5wcm92aWRlci53aXRuZXNzZXMoKVxyXG4gICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuX3RhcmdldC53aXRuZXNzZXMgPCAzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZGVsZXRlIHRoaXMuX3RhcmdldC53aXRuZXNzZXNcclxuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYCR7dGhpcy5jb25zdHJ1Y3Rvci5uYW1lfTogY2Fubm90IGVzdGltYXRlIHdpdG5lc3NlczogbmV0d29yayBub3QgcmVhZHkgZm9yIHdpdG5lc3NpbmcuYCkgICAgXHJcbiAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy53ZWlnaHQgPiBEYXRhUmVxdWVzdFBheWxvYWQuTUFYX1dFSUdIVCAqIDAuOCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGRlbHRhID0gdGhpcy53ZWlnaHQgLSBEYXRhUmVxdWVzdFBheWxvYWQuTUFYX1dFSUdIVCAqIDAuOFxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX3RhcmdldC53aXRuZXNzZXMgLT0gTWF0aC5jZWlsKGRlbHRhIC8gKERSX0NPTU1JVF9UWF9XRUlHSFQgKyBEUl9SRVZFQUxfVFhfV0VJR0hUICogVFhfV0VJR0hUX09VVFBVVF9TSVpFKSlcclxuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5fdGFyZ2V0LndpdG5lc3NlcyA8IDMpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZGVsZXRlIHRoaXMuX3RhcmdldC53aXRuZXNzZXNcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGAke3RoaXMuY29uc3RydWN0b3IubmFtZX06IGNhbm5vdCBlc3RpbWF0ZSB3aXRuZXNzZXM6IHJhZG9uIHJlcXVlc3QgdG9vIGhlYXZ5OiAke3RoaXMud2VpZ2h0fSB3ZWlnaHQgdW5pdHNgKVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjb25zdCBwcmlvcml0eSA9ICh0aGlzLl90YXJnZXQgYXMgYW55KT8uZmVlcyBhcyBUcmFuc2FjdGlvblByaW9yaXR5IHx8IFRyYW5zYWN0aW9uUHJpb3JpdHkuT3B1bGVudFxyXG4gICAgICAgICAgICBsZXQgZXN0aW1hdGVkRmVlcyA9IGF3YWl0IHRoaXMuX2VzdGltYXRlTmV0d29ya0ZlZXMobGVkZ2VyLnByb3ZpZGVyLCBwcmlvcml0eSk7XHJcbiAgICAgICAgICAgIHdoaWxlICh0aGlzLl9mZWVzIDwgZXN0aW1hdGVkRmVlcyAmJiB0aGlzLl9jaGFuZ2UgPj0gMCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fZmVlcyA9IGVzdGltYXRlZEZlZXNcclxuICAgICAgICAgICAgICAgIHRoaXMuX291dHB1dHMgPSBbXVxyXG4gICAgICAgICAgICAgICAgdGhpcy5faW5wdXRzID0gW11cclxuICAgICAgICAgICAgICAgIHRoaXMuX2NvdmVyZWQgPSAwblxyXG4gICAgICAgICAgICAgICAgLy8gY29uc3VtZSB1dHhvcyBhcyB0byBjb3ZlciBmb3IgZXN0aW1hdGVkIHZhbHVlIGFuZCBlc3RpbWF0ZWQgZmVlcyBcclxuICAgICAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gdGhpcy5fZmVlczJWYWx1ZSh0aGlzLl9mZWVzLCB0aGlzLl90YXJnZXQud2l0bmVzc2VzKVxyXG4gICAgICAgICAgICAgICAgY29uc3QgdXR4b3MgPSBhd2FpdCBsZWRnZXIuc2VsZWN0VXR4b3MoeyBcclxuICAgICAgICAgICAgICAgICAgICB2YWx1ZTogQ29pbnMuZnJvbVBlZHJvcyh2YWx1ZSArIHRoaXMuX2ZlZXMgLSB0aGlzLl9jb3ZlcmVkKSwgXHJcbiAgICAgICAgICAgICAgICAgICAgcmVsb2FkLFxyXG4gICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgIHRoaXMuX2NvdmVyZWQgKz0gdXR4b3MubWFwKHV0eG8gPT4gQmlnSW50KHV0eG8udmFsdWUpKS5yZWR1Y2UoKHByZXYsIGN1cnIpID0+IHByZXYgKyBjdXJyLCAwbilcclxuICAgICAgICAgICAgICAgIHRoaXMuX2lucHV0cy5wdXNoKC4uLnV0eG9zKVxyXG4gICAgICAgICAgICAgICAgbGVkZ2VyLmNvbnN1bWVVdHhvcyguLi51dHhvcylcclxuICAgICAgICAgICAgICAgIHRoaXMuX2NoYW5nZSA9IHRoaXMuX2NvdmVyZWQgLSAodmFsdWUgKyB0aGlzLl9mZWVzKVxyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuX2NoYW5nZSA+PSAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5wcmVwYXJlT3V0cHV0cyh7IHZhbHVlOiB0aGlzLl9jaGFuZ2UgfSlcclxuICAgICAgICAgICAgICAgICAgICBlc3RpbWF0ZWRGZWVzID0gYXdhaXQgdGhpcy5fZXN0aW1hdGVOZXR3b3JrRmVlcyhsZWRnZXIucHJvdmlkZXIsIHByaW9yaXR5KVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0aGlzLl9jaGFuZ2VcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgaW50b1JlY2VpcHQodGFyZ2V0OiBEYXRhUmVxdWVzdFBhcmFtcyk6IGFueSB7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgZHJvSGFzaDogdGhpcy5kcm9IYXNoLFxyXG4gICAgICAgICAgICByYWRBcmdzOiB0aGlzLnJhZEFyZ3MsXHJcbiAgICAgICAgICAgIHJhZEhhc2g6IHRoaXMucmFkSGFzaCxcclxuICAgICAgICAgICAgd2l0bmVzc2VzOiB0YXJnZXQud2l0bmVzc2VzLFxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgcHJlcGFyZU91dHB1dHMoY2hhbmdlPzogeyB2YWx1ZTogYmlnaW50IH0pOiBhbnkge1xyXG4gICAgICAgIGlmIChjaGFuZ2U/LnZhbHVlKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX291dHB1dHMucHVzaCh7XHJcbiAgICAgICAgICAgICAgICBwa2g6IHRoaXMuX2lucHV0c1swXS5zaWduZXIsXHJcbiAgICAgICAgICAgICAgICB2YWx1ZTogY2hhbmdlLnZhbHVlLFxyXG4gICAgICAgICAgICAgICAgdGltZV9sb2NrOiAwLFxyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgcmVzZXRUYXJnZXQodGFyZ2V0OiBEYXRhUmVxdWVzdFBhcmFtcyk6IGFueSB7XHJcbiAgICAgICAgdGhpcy5fY2hhbmdlID0gMG5cclxuICAgICAgICB0aGlzLl9jb3ZlcmVkID0gMG5cclxuICAgICAgICB0aGlzLl9mZWVzID0gMG5cclxuICAgICAgICB0aGlzLl9pbnB1dHMgPSBbXVxyXG4gICAgICAgIHRoaXMuX291dHB1dHMgPSBbXVxyXG4gICAgICAgIHRoaXMuX3RhcmdldCA9IHRhcmdldFxyXG4gICAgICAgIGlmICh0aGlzLmRyb1NMQT8uY29sbGF0ZXJhbCAmJiB0aGlzLmRyb1NMQS5jb2xsYXRlcmFsIDwgRGF0YVJlcXVlc3RQYXlsb2FkLk1JTl9DT0xMQVRFUkFMKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXHJcbiAgICAgICAgICAgICAgICBgJHt0aGlzLmNvbnN0cnVjdG9yLm5hbWV9OiB3aXRuZXNzaW5nIGNvbGxhdGVyYWwgYmVsb3cgbWluaW11bTogJHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmRyb1NMQS5jb2xsYXRlcmFsXHJcbiAgICAgICAgICAgICAgICB9IDwgJHtcclxuICAgICAgICAgICAgICAgICAgICBEYXRhUmVxdWVzdFBheWxvYWQuTUlOX0NPTExBVEVSQUxcclxuICAgICAgICAgICAgICAgIH1gXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0aGlzLnRlbXBsYXRlKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGFyZ3MgPSB0YXJnZXQ/LmFyZ3NcclxuICAgICAgICAgICAgaWYgKGFyZ3MgPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihgJHt0aGlzLmNvbnN0cnVjdG9yLm5hbWV9OiBubyB0ZW1wbGF0ZSBhcmdzIHdlcmUgcGFzc2VkLmApXHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIGFyZ3MgPT09ICdzdHJpbmcnKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9yZXF1ZXN0ID0gdGhpcy50ZW1wbGF0ZS5idWlsZFJhZG9uUmVxdWVzdChbYXJnc10pXHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9yZXF1ZXN0ID0gdGhpcy50ZW1wbGF0ZS5idWlsZFJhZG9uUmVxdWVzdChhcmdzKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGRlbGV0ZSB0aGlzLl9wcmlvcml0aWVzXHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHRvSlNPTihodW1hbml6ZSA9IGZhbHNlKTogYW55IHtcclxuICAgICAgICBjb25zdCBkcm9TTEEgPSB0aGlzLmRyb1NMQSAgICAgICAgXHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgaW5wdXRzOiB0aGlzLmlucHV0c1xyXG4gICAgICAgICAgICAgICAgLm1hcCh1dHhvID0+ICh7IG91dHB1dF9wb2ludGVyOiB1dHhvLm91dHB1dF9wb2ludGVyIH0pKSxcclxuICAgICAgICAgICAgb3V0cHV0czogdGhpcy5vdXRwdXRzLm1hcCh2dG8gPT4gKHsgXHJcbiAgICAgICAgICAgICAgICBwa2g6IHZ0by5wa2gsXHJcbiAgICAgICAgICAgICAgICB0aW1lX2xvY2s6IHZ0by50aW1lX2xvY2ssXHJcbiAgICAgICAgICAgICAgICB2YWx1ZTogdnRvLnZhbHVlLnRvU3RyaW5nKCksXHJcbiAgICAgICAgICAgIH0pKSxcclxuICAgICAgICAgICAgZHJfb3V0cHV0OiB7XHJcbiAgICAgICAgICAgICAgICAuLi4odGhpcy5fcmVxdWVzdCA/IHsgZGF0YV9yZXF1ZXN0OiB0aGlzLl9yZXF1ZXN0LnRvSlNPTihodW1hbml6ZSkgfSA6IHt9KSxcclxuICAgICAgICAgICAgICAgIGNvbW1pdF9hbmRfcmV2ZWFsX2ZlZTogZHJvU0xBPy5jb21taXRBbmRSZXZlYWxGZWUsXHJcbiAgICAgICAgICAgICAgICBtaW5fY29uc2Vuc3VzX3BlcmNlbnRhZ2U6IGRyb1NMQT8ubWluQ29uc2Vuc3VzUGVyY2VudGFnZSxcclxuICAgICAgICAgICAgICAgIHdpdG5lc3NlczogZHJvU0xBPy53aXRuZXNzZXMsXHJcbiAgICAgICAgICAgICAgICB3aXRuZXNzX3Jld2FyZDogZHJvU0xBPy53aXRuZXNzUmV3YXJkLFxyXG4gICAgICAgICAgICAgICAgY29sbGF0ZXJhbDogZHJvU0xBPy5jb2xsYXRlcmFsXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9ICAgXHJcblxyXG4gICAgcHVibGljIHRvUHJvdG9idWYoKTogYW55IHtcclxuICAgICAgICBpZiAodGhpcy5wcmVwYXJlZCAmJiB0aGlzLl90YXJnZXQgJiYgdGhpcy5fcmVxdWVzdCkge1xyXG4gICAgICAgICAgICByZXR1cm4geyAgICBcclxuICAgICAgICAgICAgICAgIGlucHV0czogdGhpcy5pbnB1dHNcclxuICAgICAgICAgICAgICAgICAgICAubWFwKHV0eG8gPT4geyBcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdHJhbnNhY3Rpb25JZCA9IHV0eG8ub3V0cHV0X3BvaW50ZXIuc3BsaXQoJzonKVswXVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBvdXRwdXRJbmRleCA9IHBhcnNlSW50KHV0eG8ub3V0cHV0X3BvaW50ZXIuc3BsaXQoJzonKVsxXSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dFBvaW50ZXI6IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmFuc2FjdGlvbklkOiB7IFNIQTI1NjogQXJyYXkuZnJvbShmcm9tSGV4U3RyaW5nKHRyYW5zYWN0aW9uSWQpKSB9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLihvdXRwdXRJbmRleCA+IDAgPyB7IG91dHB1dEluZGV4IH0gOiB7fSksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfSksXHJcbiAgICAgICAgICAgICAgICBvdXRwdXRzOiB0aGlzLm91dHB1dHMubWFwKHZ0byA9PiAoeyBcclxuICAgICAgICAgICAgICAgICAgICBwa2g6IHsgaGFzaDogQXJyYXkuZnJvbShQdWJsaWNLZXlIYXNoLmZyb21CZWNoMzIodnRvLnBraCkudG9CeXRlczIwKCkpLCB9LFxyXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOiBMb25nLmZyb21WYWx1ZSh2dG8udmFsdWUpLFxyXG4gICAgICAgICAgICAgICAgICAgIC4uLih2dG8udGltZV9sb2NrID4gMCA/IHsgdGltZUxvY2s6IHZ0by50aW1lX2xvY2sgfSA6IHt9KSxcclxuICAgICAgICAgICAgICAgIH0pKSxcclxuICAgICAgICAgICAgICAgIGRyT3V0cHV0OiB0aGlzLl90b0RyT3V0cHV0UHJvdG9idWYoKSxcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgdmFsaWRhdGVUYXJnZXQodGFyZ2V0PzogYW55KTogRGF0YVJlcXVlc3RQYXJhbXMgfCB1bmRlZmluZWQge1xyXG4gICAgICAgIHRhcmdldCA9IHRoaXMuX2NsZWFuVGFyZ2V0RXh0cmFzKHRhcmdldClcclxuICAgICAgICBpZiAodGFyZ2V0ICYmIE9iamVjdC5rZXlzKHRhcmdldCkubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICBpZiAoIShcclxuICAgICAgICAgICAgICAgIHRhcmdldFxyXG4gICAgICAgICAgICAgICAgICAgICYmIChcclxuICAgICAgICAgICAgICAgICAgICAgICAgIXRhcmdldD8uZmVlcyBcclxuICAgICAgICAgICAgICAgICAgICAgICAgfHwgKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0LmZlZXMgaW5zdGFuY2VvZiBDb2lucyAmJiAodGFyZ2V0LmZlZXMgYXMgQ29pbnMpLnBlZHJvcyA+IDAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCBPYmplY3QudmFsdWVzKFRyYW5zYWN0aW9uUHJpb3JpdHkpLmluY2x1ZGVzKHRhcmdldC5mZWVzKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgICAgICAgICYmICh0YXJnZXQ/LndpdG5lc3NlcyB8fCB0YXJnZXQ/LndpdG5lc3NlcyA9PT0gdW5kZWZpbmVkKVxyXG4gICAgICAgICAgICAgICAgICAgICYmICghdGhpcy50ZW1wbGF0ZSB8fCB0YXJnZXQ/LmFyZ3MpXHJcbiAgICAgICAgICAgICkpIHtcclxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoYCR7dGhpcy5jb25zdHJ1Y3Rvci5uYW1lfTogaW52YWxpZCBvcHRpb25zOiAke0pTT04uc3RyaW5naWZ5KHRhcmdldCl9YClcclxuICAgICAgICAgICAgfSBlbHNlIGlmICh0YXJnZXQ/LndpdG5lc3Nlcykge1xyXG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiB0YXJnZXQud2l0bmVzc2VzID09PSAnb2JqZWN0Jykge1xyXG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoYCR7dGhpcy5jb25zdHJ1Y3Rvci5uYW1lfTogZXhwbGljaXQgd2l0bmVzc2luZyBjb21taXR0ZWVzIG5vdCB5ZXQgc3VwcG9ydGVkOiAke3RhcmdldC53aXRuZXNzZXN9YClcclxuICAgICAgICAgICAgICAgIH0gXHJcbiAgICAgICAgICAgICAgICB0YXJnZXQud2l0bmVzc2VzID0gcGFyc2VJbnQodGFyZ2V0LndpdG5lc3NlcyBhcyBzdHJpbmcpXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIHRhcmdldCBhcyBEYXRhUmVxdWVzdFBhcmFtc1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWRcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHJvdGVjdGVkIF9jbGVhblRhcmdldEV4dHJhcyh0YXJnZXQ/OiBhbnkpOiBhbnkge1xyXG4gICAgICAgIGlmICh0YXJnZXQpIHtcclxuICAgICAgICAgICAgcmV0dXJuIE9iamVjdC5mcm9tRW50cmllcyhcclxuICAgICAgICAgICAgICAgIE9iamVjdC5lbnRyaWVzKHRhcmdldCkuZmlsdGVyKChba2V5LF0pID0+IFtcclxuICAgICAgICAgICAgICAgICAgICAnYXJncycsXHJcbiAgICAgICAgICAgICAgICAgICAgJ2ZlZXMnLFxyXG4gICAgICAgICAgICAgICAgICAgICdtYXhSZXN1bHRTaXplJyxcclxuICAgICAgICAgICAgICAgICAgICAnd2l0bmVzc2VzJyxcclxuICAgICAgICAgICAgICAgIF0uaW5jbHVkZXMoa2V5KSlcclxuICAgICAgICAgICAgKVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwcm90ZWN0ZWQgYXN5bmMgX2VzdGltYXRlTmV0d29ya0ZlZXMocHJvdmlkZXI6IElKc29uUnBjUHJvdmlkZXIsIHByaW9yaXR5ID0gVHJhbnNhY3Rpb25Qcmlvcml0eS5NZWRpdW0pOiBQcm9taXNlPGJpZ2ludD4ge1xyXG4gICAgICAgIGlmICghdGhpcy5fcHJpb3JpdGllcykge1xyXG4gICAgICAgICAgICB0aGlzLl9wcmlvcml0aWVzID0gYXdhaXQgcHJvdmlkZXIucHJpb3JpdGllcygpXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBCaWdJbnQoTWF0aC5mbG9vcihcclxuICAgICAgICAgICAgdGhpcy5fcHJpb3JpdGllc1tgZHJ0XyR7cHJpb3JpdHl9YF0ucHJpb3JpdHkgKiAoXHJcbiAgICAgICAgICAgICAgICB0aGlzLmNvdmVyZWQgPyB0aGlzLndlaWdodCA6IChcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLndlaWdodFxyXG4gICAgICAgICAgICAgICAgICAgIC8vIGVzdGltYXRlIHdlaWdodCBvZiBvbmUgc2luZ2xlIG91dHB1dCBpbiBjYXNlIHRoZXJlIHdhcyBjaGFuZ2UgdG8gcGF5IGJhY2tcclxuICAgICAgICAgICAgICAgICAgICArIFRYX1dFSUdIVF9PVVRQVVRfU0laRSBcclxuICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgKVxyXG4gICAgICAgICkpO1xyXG4gICAgfVxyXG5cclxuICAgIHByb3RlY3RlZCBfZmVlczJVbml0YXJ5Q29tbWl0UmV2ZWFsUmV3YXJkKGZlZXM6IGJpZ2ludCwgd2l0bmVzc2VzOiBudW1iZXIpOiBiaWdpbnQge1xyXG4gICAgICAgIHJldHVybiAoZmVlcyAvIEJpZ0ludCh3aXRuZXNzZXMpKSB8fCAxblxyXG4gICAgfVxyXG5cclxuICAgIHByb3RlY3RlZCBfZmVlczJVbml0YXJ5UmV3YXJkKGZlZXM6IGJpZ2ludCwgX3dpdG5lc3NlczogbnVtYmVyKTogYmlnaW50IHtcclxuICAgICAgICByZXR1cm4gQmlnTWF0aC5tYXgoXHJcbiAgICAgICAgICAgIGZlZXMsXHJcbiAgICAgICAgICAgIEJpZ0ludChNYXRoLmNlaWwoTnVtYmVyKERhdGFSZXF1ZXN0UGF5bG9hZC5NSU5fQ09MTEFURVJBTCAvIENPTExBVEVSQUxfUkFUSU8pKSksXHJcbiAgICAgICAgKTtcclxuICAgIH1cclxuICAgIHByb3RlY3RlZCBfZmVlczJWYWx1ZShmZWVzOiBiaWdpbnQsIHdpdG5lc3NlczogbnVtYmVyKTogYmlnaW50IHtcclxuICAgICAgICByZXR1cm4gKFxyXG4gICAgICAgICAgICBCaWdJbnQod2l0bmVzc2VzKSAqIChcclxuICAgICAgICAgICAgICAgIHRoaXMuX2ZlZXMyVW5pdGFyeVJld2FyZChmZWVzLCB3aXRuZXNzZXMpXHJcbiAgICAgICAgICAgICAgICArIDJuICogdGhpcy5fZmVlczJVbml0YXJ5Q29tbWl0UmV2ZWFsUmV3YXJkKGZlZXMsIHdpdG5lc3NlcylcclxuICAgICAgICAgICAgKVxyXG4gICAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJvdGVjdGVkIF90b0RyT3V0cHV0UHJvdG9idWYoKTogYW55IHtcclxuICAgICAgICBpZiAodGhpcy5fcmVxdWVzdCkge1xyXG4gICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgLi4udGhpcy5kcm9TTEEsXHJcbiAgICAgICAgICAgICAgICBkYXRhUmVxdWVzdDogdGhpcy5fcmVxdWVzdC50b1Byb3RvYnVmKClcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxyXG5cclxuIl19
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"payloads.d.ts","sourceRoot":"","sources":["../../../../src/lib/crypto/payloads.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,IAAI,SAAS,EAAqB,MAAM,YAAY,CAAA;AAGjE,OAAO,EAAE,IAAI,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,MAAM,UAAU,CAAA;AAGvE,OAAO,EAAE,OAAO,EAAE,gBAAgB,EAAE,mBAAmB,EAAE,2BAA2B,EAAE,MAAM,cAAc,CAAA;AAE1G,OAAO,EAAE,KAAK,EAAE,mBAAmB,EAAE,mBAAmB,EAAE,IAAI,EAAE,MAAM,SAAS,CAAC;AAEhF,8BAAsB,kBAAkB,CAAC,KAAK,CAAE,YAAW,mBAAmB,CAAC,KAAK,CAAC;IAEjF,SAAS,CAAC,OAAO,EAAE,MAAM,CAAC;IAC1B,SAAS,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC3B,SAAS,CAAC,KAAK,EAAE,MAAM,CAAC;IACxB,SAAS,CAAC,WAAW,CAAC,EAAE,iBAAiB,CAAC;IAC1C,SAAS,CAAC,UAAU,EAAE,SAAS,CAAC;IAChC,SAAS,CAAC,OAAO,CAAC,EAAE,KAAK,CAAC;gBAEd,aAAa,EAAE,MAAM,EAAE,aAAa,CAAC,EAAE,KAAK;IAQxD,IAAW,QAAQ,IAAI,UAAU,GAAG,SAAS,
|
|
1
|
+
{"version":3,"file":"payloads.d.ts","sourceRoot":"","sources":["../../../../src/lib/crypto/payloads.ts"],"names":[],"mappings":"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"}
|
|
@@ -17,7 +17,6 @@ class TransactionPayload {
|
|
|
17
17
|
get bytecode() {
|
|
18
18
|
// make toProtobuf return Protobuf's deserialized message
|
|
19
19
|
const obj = this.toProtobuf();
|
|
20
|
-
// console.log("TransactionPayload<Specs>.bytecode() =>", obj)
|
|
21
20
|
if (!obj)
|
|
22
21
|
return undefined;
|
|
23
22
|
const err = this._protoType.verify(obj);
|
|
@@ -173,4 +172,4 @@ class TransactionPayloadMultiSig extends TransactionPayload {
|
|
|
173
172
|
}
|
|
174
173
|
}
|
|
175
174
|
exports.TransactionPayloadMultiSig = TransactionPayloadMultiSig;
|
|
176
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGF5bG9hZHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbGliL2NyeXB0by9wYXlsb2Fkcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSwyQ0FBaUU7QUFDakUsTUFBTSxTQUFTLEdBQUcsaUJBQVMsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLG1DQUFtQyxDQUFDLENBQUMsQ0FBQTtBQUdsRixvQ0FBc0M7QUFHdEMsbUNBQWdDO0FBQ2hDLG1DQUFnRjtBQUVoRixNQUFzQixrQkFBa0I7SUFTcEMsWUFBWSxhQUFxQixFQUFFLGFBQXFCO1FBQ3BELElBQUksQ0FBQyxVQUFVLEdBQUcsU0FBUyxDQUFDLFVBQVUsQ0FBQyxhQUFhLENBQUMsQ0FBQTtRQUNyRCxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsYUFBYSxDQUFDLENBQUE7UUFDakQsSUFBSSxDQUFDLE9BQU8sR0FBRyxFQUFFLENBQUE7UUFDakIsSUFBSSxDQUFDLFFBQVEsR0FBRyxFQUFFLENBQUE7UUFDbEIsSUFBSSxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUE7SUFDbkIsQ0FBQztJQUVELElBQVcsUUFBUTtRQUNmLHlEQUF5RDtRQUN6RCxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUE7UUFDN0IsOERBQThEO1FBQzlELElBQUksQ0FBQyxHQUFHO1lBQUUsT0FBTyxTQUFTLENBQUE7UUFFMUIsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUE7UUFDdkMsSUFBSSxHQUFHLEVBQUUsQ0FBQztZQUNOLE1BQU0sU0FBUyxDQUFDLEdBQUcsQ0FBQyxDQUFBO1FBQ3hCLENBQUM7YUFBTSxDQUFDO1lBQ0osK0NBQStDO1lBQy9DLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFBO1lBQy9D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LEVBQUUsTUFBTSxDQUFDLFNBQVMsRUFBRSxDQUFDLENBQUE7UUFDdkUsQ0FBQztRQUNELE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQTtJQUN2QixDQUFDO0lBRU0sY0FBYyxDQUFDLE1BQW9EO1FBQ3RFLElBQUksTUFBTSxFQUFFLEtBQUssRUFBRSxDQUFDO1lBQ2hCLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDO2dCQUNmLEdBQUcsRUFBRSxNQUFNLENBQUMsR0FBRztnQkFDZixLQUFLLEVBQUUsTUFBTSxDQUFDLEtBQUs7Z0JBQ25CLFNBQVMsRUFBRSxDQUFDO2FBQ2YsQ0FBQyxDQUFBO1FBQ04sQ0FBQztJQUNMLENBQUM7SUFFTSxXQUFXLENBQUMsTUFBYTtRQUM1QixJQUFJLENBQUMsT0FBTyxHQUFHLEVBQUUsQ0FBQTtRQUNqQixJQUFJLENBQUMsUUFBUSxHQUFHLEVBQUUsQ0FBQTtRQUNsQixJQUFJLENBQUMsS0FBSyxHQUFHLEVBQUUsQ0FBQTtRQUNmLElBQUksQ0FBQyxPQUFPLEdBQUcsRUFBRSxDQUFBO1FBQ2pCLElBQUksQ0FBQyxRQUFRLEdBQUcsRUFBRSxDQUFBO1FBQ2xCLElBQUksQ0FBQyxPQUFPLEdBQUcsTUFBTSxDQUFBO1FBQ3JCLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQTtJQUMzQixDQUFDO0NBV0o7QUF2SUQsZ0VBdUlDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgVHlwZSBhcyBQcm90b1R5cGUsIFJvb3QgYXMgUHJvdG9Sb290IH0gZnJvbSBcInByb3RvYnVmanNcIlxyXG5jb25zdCBwcm90b1Jvb3QgPSBQcm90b1Jvb3QuZnJvbUpTT04ocmVxdWlyZShcIi4uLy4uLy4uL3dpdG5ldC93aXRuZXQucHJvdG8uanNvblwiKSlcclxuXHJcbmltcG9ydCB7IEhhc2gsIE5ldHdvcmtQcmlvcml0aWVzLCBWYWx1ZVRyYW5zZmVyT3V0cHV0IH0gZnJvbSBcIi4uL3R5cGVzXCJcclxuaW1wb3J0IHsgdG9IZXhTdHJpbmcgfSBmcm9tIFwiLi4vdXRpbHNcIlxyXG5cclxuaW1wb3J0IHsgSUxlZGdlciwgSUpzb25ScGNQcm92aWRlciwgSVRyYW5zYWN0aW9uUGF5bG9hZCwgSVRyYW5zYWN0aW9uUGF5bG9hZE11bHRpU2lnIH0gZnJvbSBcIi4vaW50ZXJmYWNlc1wiXHJcbmltcG9ydCB7IHNoYTI1NiB9IGZyb20gXCIuL3V0aWxzXCJcclxuaW1wb3J0IHsgQ29pbnMsIFB1YmxpY0tleUhhc2hTdHJpbmcsIFRyYW5zYWN0aW9uUHJpb3JpdHksIFV0eG8gfSBmcm9tIFwiLi90eXBlc1wiO1xyXG5cclxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIFRyYW5zYWN0aW9uUGF5bG9hZDxTcGVjcz4gaW1wbGVtZW50cyBJVHJhbnNhY3Rpb25QYXlsb2FkPFNwZWNzPiB7XHJcbiBcclxuICAgIHByb3RlY3RlZCBfY2hhbmdlOiBiaWdpbnQ7XHJcbiAgICBwcm90ZWN0ZWQgX2NvdmVyZWQ6IGJpZ2ludDtcclxuICAgIHByb3RlY3RlZCBfZmVlczogYmlnaW50O1xyXG4gICAgcHJvdGVjdGVkIF9wcmlvcml0aWVzPzogTmV0d29ya1ByaW9yaXRpZXM7XHJcbiAgICBwcm90ZWN0ZWQgX3Byb3RvVHlwZTogUHJvdG9UeXBlO1xyXG4gICAgcHJvdGVjdGVkIF90YXJnZXQ/OiBTcGVjcztcclxuICAgIFxyXG4gICAgY29uc3RydWN0b3IocHJvdG9UeXBlTmFtZTogc3RyaW5nLCBpbml0aWFsVGFyZ2V0PzogU3BlY3MpIHtcclxuICAgICAgICB0aGlzLl9wcm90b1R5cGUgPSBwcm90b1Jvb3QubG9va3VwVHlwZShwcm90b1R5cGVOYW1lKVxyXG4gICAgICAgIHRoaXMuX3RhcmdldCA9IHRoaXMudmFsaWRhdGVUYXJnZXQoaW5pdGlhbFRhcmdldClcclxuICAgICAgICB0aGlzLl9jaGFuZ2UgPSAwblxyXG4gICAgICAgIHRoaXMuX2NvdmVyZWQgPSAwblxyXG4gICAgICAgIHRoaXMuX2ZlZXMgPSAwblxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXQgYnl0ZWNvZGUoKTogVWludDhBcnJheSB8IHVuZGVmaW5lZCB7XHJcbiAgICAgICAgLy8gbWFrZSB0b1Byb3RvYnVmIHJldHVybiBQcm90b2J1ZidzIGRlc2VyaWFsaXplZCBtZXNzYWdlXHJcbiAgICAgICAgY29uc3Qgb2JqID0gdGhpcy50b1Byb3RvYnVmKClcclxuICAgICAgICAvLyBjb25zb2xlLmxvZyhcIlRyYW5zYWN0aW9uUGF5bG9hZDxTcGVjcz4uYnl0ZWNvZGUoKSA9PlwiLCBvYmopXHJcbiAgICAgICAgaWYgKCFvYmopIHJldHVybiB1bmRlZmluZWRcclxuXHJcbiAgICAgICAgY29uc3QgZXJyID0gdGhpcy5fcHJvdG9UeXBlLnZlcmlmeShvYmopXHJcbiAgICAgICAgaWYgKGVycikge1xyXG4gICAgICAgICAgICB0aHJvdyBUeXBlRXJyb3IoZXJyKVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKFwiXFxub2JqID0+XCIsIEpTT04uc3RyaW5naWZ5KG9iaikpXHJcbiAgICAgICAgICAgIGNvbnN0IG1lc3NhZ2UgPSB0aGlzLl9wcm90b1R5cGUuZnJvbU9iamVjdChvYmopXHJcbiAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKFwiXFxubWVzc2FnZSA9PlwiLCBKU09OLnN0cmluZ2lmeShtZXNzYWdlKSlcclxuICAgICAgICAgICAgY29uc3QgYnl0ZWNvZGUgPSB0aGlzLl9wcm90b1R5cGUuZW5jb2RlKG1lc3NhZ2UpLmZpbmlzaCgpXHJcbiAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKFwiXFxuYnl0ZWNvZGUgPT5cIiwgdG9IZXhTdHJpbmcoYnl0ZWNvZGUpKVxyXG4gICAgICAgICAgICByZXR1cm4gYnl0ZWNvZGVcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldCBjaGFuZ2UoKTogQ29pbnMgfCB1bmRlZmluZWQge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9jaGFuZ2UgPiAwID8gQ29pbnMuZnJvbVBlZHJvcyh0aGlzLl9jaGFuZ2UpIDogdW5kZWZpbmVkXHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldCBjb3ZlcmVkKCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiAoXHJcbiAgICAgICAgICAgICEhdGhpcy5mZWVzXHJcbiAgICAgICAgICAgICAgICAmJiB0aGlzLl9jb3ZlcmVkID49IHRoaXMudmFsdWUucGVkcm9zICsgdGhpcy5mZWVzLnBlZHJvc1xyXG4gICAgICAgIClcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0IGZlZXMoKTogQ29pbnMgfCB1bmRlZmluZWQge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9mZWVzID4gMCA/IENvaW5zLmZyb21QZWRyb3ModGhpcy5fZmVlcykgOiB1bmRlZmluZWRcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0IGhhc2goKTogSGFzaCB8IHVuZGVmaW5lZCB7XHJcbiAgICAgICAgY29uc3QgX2J5dGVjb2RlID0gdGhpcy5ieXRlY29kZVxyXG4gICAgICAgIGlmIChfYnl0ZWNvZGUgaW5zdGFuY2VvZiBVaW50OEFycmF5KSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0b0hleFN0cmluZyhzaGEyNTYoX2J5dGVjb2RlKSlcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkXHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBpbnRvUmVjZWlwdCh0YXJnZXQ6IFNwZWNzKTogYW55IHtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAuLi50YXJnZXRcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgYWJzdHJhY3QgY29uc3VtZVV0eG9zKGxlZGdlcjogSUxlZGdlcik6IFByb21pc2U8YmlnaW50PjtcclxuICAgIGFic3RyYWN0IHByZXBhcmVPdXRwdXRzKGNoYW5nZT86IHsgdmFsdWU6IGJpZ2ludCwgcGtoOiBQdWJsaWNLZXlIYXNoU3RyaW5nIH0sIHBhcmFtcz86IGFueSk6IGFueTtcclxuICAgIGFic3RyYWN0IHJlc2V0VGFyZ2V0KHRhcmdldDogU3BlY3MpOiBhbnk7XHJcbiAgICBhYnN0cmFjdCB0b0pTT04oaHVtYW5pemU6IGJvb2xlYW4pOiBhbnk7XHJcbiAgICBhYnN0cmFjdCB0b1Byb3RvYnVmKCk6IGFueTtcclxuICAgIGFic3RyYWN0IHZhbGlkYXRlVGFyZ2V0KHRhcmdldD86IGFueSk6IFNwZWNzIHwgdW5kZWZpbmVkO1xyXG5cclxuICAgIGFic3RyYWN0IGdldCBvdXRwdXRzKCk6IEFycmF5PFZhbHVlVHJhbnNmZXJPdXRwdXQ+O1xyXG4gICAgYWJzdHJhY3QgZ2V0IG1heFdlaWdodCgpOiBudW1iZXI7XHJcbiAgICBhYnN0cmFjdCBnZXQgcHJlcGFyZWQoKTogYm9vbGVhbjtcclxuICAgIGFic3RyYWN0IGdldCB2YWx1ZSgpOiBDb2lucztcclxuICAgIGFic3RyYWN0IGdldCB3ZWlnaHQoKTogbnVtYmVyO1xyXG5cclxuICAgIHByb3RlY3RlZCBhYnN0cmFjdCBfY2xlYW5UYXJnZXRFeHRyYXMocGFyYW1zPzogYW55KTogYW55O1xyXG4gICAgcHJvdGVjdGVkIGFic3RyYWN0IF9lc3RpbWF0ZU5ldHdvcmtGZWVzKHByb3ZpZGVyOiBJSnNvblJwY1Byb3ZpZGVyLCBwcmlvcml0eT86IFRyYW5zYWN0aW9uUHJpb3JpdHkpOiBQcm9taXNlPGJpZ2ludD47XHJcbn1cclxuXHJcbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBUcmFuc2FjdGlvblBheWxvYWRNdWx0aVNpZzxTcGVjcz4gXHJcbiAgICBleHRlbmRzIFRyYW5zYWN0aW9uUGF5bG9hZDxTcGVjcz5cclxuICAgIGltcGxlbWVudHMgSVRyYW5zYWN0aW9uUGF5bG9hZE11bHRpU2lnPFNwZWNzPlxyXG57XHJcbiAgICBwcm90ZWN0ZWQgX2lucHV0czogQXJyYXk8VXR4bz5cclxuICAgIHByb3RlY3RlZCBfb3V0cHV0czogQXJyYXk8VmFsdWVUcmFuc2Zlck91dHB1dD5cclxuICAgIFxyXG4gICAgY29uc3RydWN0b3IocHJvdG9UeXBlTmFtZTogc3RyaW5nLCBpbml0aWFsVGFyZ2V0PzogU3BlY3MpIHtcclxuICAgICAgICBzdXBlcihwcm90b1R5cGVOYW1lLCBpbml0aWFsVGFyZ2V0KVxyXG4gICAgICAgIHRoaXMuX2lucHV0cyA9IFtdXHJcbiAgICAgICAgdGhpcy5fb3V0cHV0cyA9IFtdXHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldCBpbnB1dHMoKTogQXJyYXk8VXR4bz4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9pbnB1dHNcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0IG91dHB1dHMoKTogQXJyYXk8VmFsdWVUcmFuc2Zlck91dHB1dD4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9vdXRwdXRzXHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldCBwcmVwYXJlZCgpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gKFxyXG4gICAgICAgICAgICB0aGlzLl9pbnB1dHMubGVuZ3RoID4gMCBcclxuICAgICAgICAgICAgICAgICYmIHRoaXMuX291dHB1dHMubGVuZ3RoID4gMFxyXG4gICAgICAgIClcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgYXN5bmMgY29uc3VtZVV0eG9zKGxlZGdlcjogSUxlZGdlciwgcmVsb2FkPzogYm9vbGVhbik6IFByb21pc2U8YmlnaW50PiB7XHJcbiAgICAgICAgaWYgKCF0aGlzLl90YXJnZXQpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGAke3RoaXMuY29uc3RydWN0b3IubmFtZX06IGludGVybmFsIGVycm9yOiBubyBpbi1mbGlnaHQgcGFyYW1zLmApXHJcbiAgICAgICAgfSBcclxuICAgICAgICBjb25zdCBwcmVwYXJlZCA9IHRoaXMucHJlcGFyZWRcclxuICAgICAgICBpZiAoIXRoaXMuY292ZXJlZCkge1xyXG4gICAgICAgICAgICAvLyBjb25zb2xlLmxvZyhhd2FpdCBsZWRnZXIuZ2V0VXR4b3MoKSlcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIC8vIGNvbnN1bWUgdXR4b3MgYXMgdG8gY292ZXIgdGhpcy52YWx1ZSwgYXQgbGVhc3RcclxuICAgICAgICAgICAgY29uc3QgdXR4b3MgPSBhd2FpdCBsZWRnZXIuc2VsZWN0VXR4b3MoeyBcclxuICAgICAgICAgICAgICAgIHZhbHVlOiBDb2lucy5mcm9tUGVkcm9zKHRoaXMudmFsdWUucGVkcm9zIC0gdGhpcy5fY292ZXJlZCksIFxyXG4gICAgICAgICAgICAgICAgcmVsb2FkLFxyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAvLyBjb25zb2xlLmxvZyhsZWRnZXIuY29uc3RydWN0b3IubmFtZSwgXCJjYWNoZUluZm8gPT5cIiwgbGVkZ2VyLnBraCwgbGVkZ2VyLmNhY2hlSW5mbywgdGhpcy52YWx1ZS5wZWRyb3MsIHRoaXMuX2NvdmVyZWQpXHJcbiAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKHV0eG9zKVxyXG4gICAgICAgICAgICB0aGlzLl9jb3ZlcmVkICs9IHV0eG9zLm1hcCh1dHhvID0+IHV0eG8udmFsdWUpLnJlZHVjZSgocHJldiwgY3VycikgPT4gcHJldiArIGN1cnIsIDBuKVxyXG4gICAgICAgICAgICAvLyBjb25zb2xlLmxvZyhcImluaXRpYWwgY292ZXIgPT5cIiwgdGhpcy5fY292ZXJlZClcclxuICAgICAgICAgICAgdGhpcy5faW5wdXRzLnB1c2goLi4udXR4b3MpXHJcbiAgICAgICAgICAgIGxlZGdlci5jb25zdW1lVXR4b3MoLi4udXR4b3MpXHJcblxyXG4gICAgICAgICAgICAvLyB0cnkgdG8gY292ZXIgZmVlcyBvbmx5IGlmIHRoaXMudmFsdWUgaXMgY292ZXJlZCBmaXJzdFxyXG4gICAgICAgICAgICBpZiAodGhpcy5fY292ZXJlZCA+PSB0aGlzLnZhbHVlLnBlZHJvcykge1xyXG4gICAgICAgICAgICAgICAgLy8gY29uc29sZS5sb2codGhpcy5faW5wdXRzKVxyXG4gICAgICAgICAgICAgICAgLy8gY29uc29sZS5sb2coXCJyZW1haW5pbmcgdXR4b3MgPT5cIiwgYXdhaXQgbGVkZ2VyLmdldFV0eG9zKCkpXHJcbiAgICAgICAgICAgICAgICBpZiAoKHRoaXMuX3RhcmdldCBhcyBhbnkpPy5mZWVzIGluc3RhbmNlb2YgQ29pbnMpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9mZWVzID0gKHRoaXMuX3RhcmdldCBhcyBhbnkpLmZlZXMucGVkcm9zO1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKHRoaXMuX2NvdmVyZWQsIHRoaXMudmFsdWUucGVkcm9zLCB0aGlzLl9mZWVzLCB0aGlzLl9jb3ZlcmVkIDwgdGhpcy52YWx1ZS5wZWRyb3MgKyB0aGlzLl9mZWVzKVxyXG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLl9jb3ZlcmVkIDwgdGhpcy52YWx1ZS5wZWRyb3MgKyB0aGlzLl9mZWVzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKFwibW9yZSB1dHhvcyByZXF1aXJlZC4uLlwiKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBleHRyYXMgPSBhd2FpdCBsZWRnZXIuc2VsZWN0VXR4b3MoeyBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBDb2lucy5mcm9tUGVkcm9zKHRoaXMudmFsdWUucGVkcm9zICsgdGhpcy5fZmVlcyAgLSB0aGlzLl9jb3ZlcmVkKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGVkZ2VyLmNvbnN1bWVVdHhvcyguLi5leHRyYXMpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2NvdmVyZWQgKz0gZXh0cmFzLm1hcCh1dHhvID0+IHV0eG8udmFsdWUpLnJlZHVjZSgocHJldiwgY3VycikgPT4gcHJldiArIGN1cnIsIDBuKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9pbnB1dHMucHVzaCguLi5leHRyYXMpXHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2NoYW5nZSA9IHRoaXMuX2NvdmVyZWQgLSAodGhpcy52YWx1ZS5wZWRyb3MgKyB0aGlzLl9mZWVzKVxyXG4gICAgICAgICAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKHRoaXMuX2NoYW5nZSlcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcHJpb3JpdHkgPSAodGhpcy5fdGFyZ2V0IGFzIGFueSk/LmZlZXMgYXMgVHJhbnNhY3Rpb25Qcmlvcml0eSB8fCBUcmFuc2FjdGlvblByaW9yaXR5Lk9wdWxlbnRcclxuICAgICAgICAgICAgICAgICAgICBsZXQgZXN0aW1hdGVkRmVlcyA9IGF3YWl0IHRoaXMuX2VzdGltYXRlTmV0d29ya0ZlZXMobGVkZ2VyLnByb3ZpZGVyLCBwcmlvcml0eSk7XHJcbiAgICAgICAgICAgICAgICAgICAgd2hpbGUgKHRoaXMuX2ZlZXMgPCBlc3RpbWF0ZWRGZWVzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2ZlZXMgPSBlc3RpbWF0ZWRGZWVzXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX291dHB1dHMgPSBbXVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBhZGQgbW9yZSB1dHhvcyBvbmx5IGlmIHRoZSBvbmVzIHNlbGVjdGVkIGZvciBjb3ZlcmluZyB0aGUgdmFsdWUgYW5kIHRoZSBlc3RpbWF0ZSBmZWVzIGRvbid0IHN1ZmZpY2U6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLl9jb3ZlcmVkIDwgdGhpcy52YWx1ZS5wZWRyb3MgKyB0aGlzLl9mZWVzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBleHRyYXMgPSBhd2FpdCBsZWRnZXIuc2VsZWN0VXR4b3MoeyBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogQ29pbnMuZnJvbVBlZHJvcyh0aGlzLnZhbHVlLnBlZHJvcyArIHRoaXMuX2ZlZXMgLSB0aGlzLl9jb3ZlcmVkKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxlZGdlci5jb25zdW1lVXR4b3MoLi4uZXh0cmFzKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fY292ZXJlZCArPSBleHRyYXMubWFwKHV0eG8gPT4gdXR4by52YWx1ZSkucmVkdWNlKChwcmV2LCBjdXJyKSA9PiBwcmV2ICsgY3VyciwgMG4pXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9pbnB1dHMucHVzaCguLi5leHRyYXMpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fY2hhbmdlID0gdGhpcy5fY292ZXJlZCAtICh0aGlzLnZhbHVlLnBlZHJvcyArIHRoaXMuX2ZlZXMpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLl9jaGFuZ2UgPCAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBpbnN1ZmZpY2llbnQgZnVuZHMgLi4uXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVha1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5wcmVwYXJlT3V0cHV0cyh7IHZhbHVlOiB0aGlzLl9jaGFuZ2UsIHBraDogbGVkZ2VyLmNoYW5nZVBraCB9KVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gaXRlcmF0ZSB1bnRpbCBhY3R1YWwgZmVlcyBtYXRjaCBlc3RpbWF0ZWQgZmVlc1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXN0aW1hdGVkRmVlcyA9IGF3YWl0IHRoaXMuX2VzdGltYXRlTmV0d29ya0ZlZXMobGVkZ2VyLnByb3ZpZGVyLCBwcmlvcml0eSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiAwbjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBjb25zb2xlLmxvZyhcImNoYW5nZSA9PlwiLCB0aGlzLl9jaGFuZ2UpXHJcbiAgICAgICAgLy8gcHJlcGFyZSBvdXRwdXRzLCBvbmx5IGlmIHZhbHVlIGFuZCBmZWVzIGdvdCBmdWxseSBjb3ZlcmVkIGZvciB0aGUgZmlyc3QgdGltZTpcclxuICAgICAgICBpZiAodGhpcy5fY2hhbmdlID49IDAgJiYgIXByZXBhcmVkKSB7XHJcbiAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKCctJy5yZXBlYXQoODApKVxyXG4gICAgICAgICAgICAvLyBjb25zb2xlLmxvZyh0aGlzLl9pbnB1dHMpXHJcbiAgICAgICAgICAgIHRoaXMucHJlcGFyZU91dHB1dHMoeyB2YWx1ZTogdGhpcy5fY2hhbmdlLCBwa2g6IGxlZGdlci5jaGFuZ2VQa2ggfSlcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2NoYW5nZVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBwcmVwYXJlT3V0cHV0cyhjaGFuZ2U/OiB7IHZhbHVlOiBiaWdpbnQsIHBraDogUHVibGljS2V5SGFzaFN0cmluZyB9KTogYW55IHtcclxuICAgICAgICBpZiAoY2hhbmdlPy52YWx1ZSkge1xyXG4gICAgICAgICAgICB0aGlzLl9vdXRwdXRzLnB1c2goe1xyXG4gICAgICAgICAgICAgICAgcGtoOiBjaGFuZ2UucGtoLFxyXG4gICAgICAgICAgICAgICAgdmFsdWU6IGNoYW5nZS52YWx1ZSxcclxuICAgICAgICAgICAgICAgIHRpbWVfbG9jazogMCxcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHJlc2V0VGFyZ2V0KHRhcmdldDogU3BlY3MpOiBhbnkge1xyXG4gICAgICAgIHRoaXMuX2NoYW5nZSA9IDBuXHJcbiAgICAgICAgdGhpcy5fY292ZXJlZCA9IDBuXHJcbiAgICAgICAgdGhpcy5fZmVlcyA9IDBuXHJcbiAgICAgICAgdGhpcy5faW5wdXRzID0gW11cclxuICAgICAgICB0aGlzLl9vdXRwdXRzID0gW11cclxuICAgICAgICB0aGlzLl90YXJnZXQgPSB0YXJnZXRcclxuICAgICAgICBkZWxldGUgdGhpcy5fcHJpb3JpdGllc1xyXG4gICAgfVxyXG5cclxuICAgIGFic3RyYWN0IHRvSlNPTihodW1hbml6ZTogYm9vbGVhbik6IGFueTtcclxuICAgIGFic3RyYWN0IHRvUHJvdG9idWYoKTogYW55O1xyXG4gICAgYWJzdHJhY3QgdmFsaWRhdGVUYXJnZXQodGFyZ2V0PzogYW55KTogU3BlY3MgfCB1bmRlZmluZWQ7XHJcblxyXG4gICAgYWJzdHJhY3QgZ2V0IG1heFdlaWdodCgpOiBudW1iZXI7XHJcbiAgICBhYnN0cmFjdCBnZXQgdmFsdWUoKTogQ29pbnM7XHJcbiAgICBhYnN0cmFjdCBnZXQgd2VpZ2h0KCk6IG51bWJlcjtcclxuICAgIFxyXG4gICAgcHJvdGVjdGVkIGFic3RyYWN0IF9jbGVhblRhcmdldEV4dHJhcyhwYXJhbXM/OiBhbnkpOiBhbnk7XHJcbn1cclxuIl19
|
|
175
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGF5bG9hZHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbGliL2NyeXB0by9wYXlsb2Fkcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSwyQ0FBaUU7QUFDakUsTUFBTSxTQUFTLEdBQUcsaUJBQVMsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLG1DQUFtQyxDQUFDLENBQUMsQ0FBQTtBQUdsRixvQ0FBc0M7QUFHdEMsbUNBQWdDO0FBQ2hDLG1DQUFnRjtBQUVoRixNQUFzQixrQkFBa0I7SUFTcEMsWUFBWSxhQUFxQixFQUFFLGFBQXFCO1FBQ3BELElBQUksQ0FBQyxVQUFVLEdBQUcsU0FBUyxDQUFDLFVBQVUsQ0FBQyxhQUFhLENBQUMsQ0FBQTtRQUNyRCxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsYUFBYSxDQUFDLENBQUE7UUFDakQsSUFBSSxDQUFDLE9BQU8sR0FBRyxFQUFFLENBQUE7UUFDakIsSUFBSSxDQUFDLFFBQVEsR0FBRyxFQUFFLENBQUE7UUFDbEIsSUFBSSxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUE7SUFDbkIsQ0FBQztJQUVELElBQVcsUUFBUTtRQUNmLHlEQUF5RDtRQUN6RCxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUE7UUFDN0IsSUFBSSxDQUFDLEdBQUc7WUFBRSxPQUFPLFNBQVMsQ0FBQTtRQUMxQixNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQTtRQUN2QyxJQUFJLEdBQUcsRUFBRSxDQUFDO1lBQ04sTUFBTSxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUE7UUFDeEIsQ0FBQzthQUFNLENBQUM7WUFDSiwrQ0FBK0M7WUFDL0MsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLENBQUE7WUFDL0MsdURBQXVEO1lBQ3ZE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QUMsU0FBUyxFQUFFLENBQUMsQ0FBQTtRQUN2RSxDQUFDO1FBQ0QsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFBO0lBQ3ZCLENBQUM7SUFFTSxjQUFjLENBQUMsTUFBb0Q7UUFDdEUsSUFBSSxNQUFNLEVBQUUsS0FBSyxFQUFFLENBQUM7WUFDaEIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUM7Z0JBQ2YsR0FBRyxFQUFFLE1BQU0sQ0FBQyxHQUFHO2dCQUNmLEtBQUssRUFBRSxNQUFNLENBQUMsS0FBSztnQkFDbkIsU0FBUyxFQUFFLENBQUM7YUFDZixDQUFDLENBQUE7UUFDTixDQUFDO0lBQ0wsQ0FBQztJQUVNLFdBQVcsQ0FBQyxNQUFhO1FBQzVCLElBQUksQ0FBQyxPQUFPLEdBQUcsRUFBRSxDQUFBO1FBQ2pCLElBQUksQ0FBQyxRQUFRLEdBQUcsRUFBRSxDQUFBO1FBQ2xCLElBQUksQ0FBQyxLQUFLLEdBQUcsRUFBRSxDQUFBO1FBQ2YsSUFBSSxDQUFDLE9BQU8sR0FBRyxFQUFFLENBQUE7UUFDakIsSUFBSSxDQUFDLFFBQVEsR0FBRyxFQUFFLENBQUE7UUFDbEIsSUFBSSxDQUFDLE9BQU8sR0FBRyxNQUFNLENBQUE7UUFDckIsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFBO0lBQzNCLENBQUM7Q0FXSjtBQXZJRCxnRUF1SUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBUeXBlIGFzIFByb3RvVHlwZSwgUm9vdCBhcyBQcm90b1Jvb3QgfSBmcm9tIFwicHJvdG9idWZqc1wiXHJcbmNvbnN0IHByb3RvUm9vdCA9IFByb3RvUm9vdC5mcm9tSlNPTihyZXF1aXJlKFwiLi4vLi4vLi4vd2l0bmV0L3dpdG5ldC5wcm90by5qc29uXCIpKVxyXG5cclxuaW1wb3J0IHsgSGFzaCwgTmV0d29ya1ByaW9yaXRpZXMsIFZhbHVlVHJhbnNmZXJPdXRwdXQgfSBmcm9tIFwiLi4vdHlwZXNcIlxyXG5pbXBvcnQgeyB0b0hleFN0cmluZyB9IGZyb20gXCIuLi91dGlsc1wiXHJcblxyXG5pbXBvcnQgeyBJTGVkZ2VyLCBJSnNvblJwY1Byb3ZpZGVyLCBJVHJhbnNhY3Rpb25QYXlsb2FkLCBJVHJhbnNhY3Rpb25QYXlsb2FkTXVsdGlTaWcgfSBmcm9tIFwiLi9pbnRlcmZhY2VzXCJcclxuaW1wb3J0IHsgc2hhMjU2IH0gZnJvbSBcIi4vdXRpbHNcIlxyXG5pbXBvcnQgeyBDb2lucywgUHVibGljS2V5SGFzaFN0cmluZywgVHJhbnNhY3Rpb25Qcmlvcml0eSwgVXR4byB9IGZyb20gXCIuL3R5cGVzXCI7XHJcblxyXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgVHJhbnNhY3Rpb25QYXlsb2FkPFNwZWNzPiBpbXBsZW1lbnRzIElUcmFuc2FjdGlvblBheWxvYWQ8U3BlY3M+IHtcclxuIFxyXG4gICAgcHJvdGVjdGVkIF9jaGFuZ2U6IGJpZ2ludDtcclxuICAgIHByb3RlY3RlZCBfY292ZXJlZDogYmlnaW50O1xyXG4gICAgcHJvdGVjdGVkIF9mZWVzOiBiaWdpbnQ7XHJcbiAgICBwcm90ZWN0ZWQgX3ByaW9yaXRpZXM/OiBOZXR3b3JrUHJpb3JpdGllcztcclxuICAgIHByb3RlY3RlZCBfcHJvdG9UeXBlOiBQcm90b1R5cGU7XHJcbiAgICBwcm90ZWN0ZWQgX3RhcmdldD86IFNwZWNzO1xyXG4gICAgXHJcbiAgICBjb25zdHJ1Y3Rvcihwcm90b1R5cGVOYW1lOiBzdHJpbmcsIGluaXRpYWxUYXJnZXQ/OiBTcGVjcykge1xyXG4gICAgICAgIHRoaXMuX3Byb3RvVHlwZSA9IHByb3RvUm9vdC5sb29rdXBUeXBlKHByb3RvVHlwZU5hbWUpXHJcbiAgICAgICAgdGhpcy5fdGFyZ2V0ID0gdGhpcy52YWxpZGF0ZVRhcmdldChpbml0aWFsVGFyZ2V0KVxyXG4gICAgICAgIHRoaXMuX2NoYW5nZSA9IDBuXHJcbiAgICAgICAgdGhpcy5fY292ZXJlZCA9IDBuXHJcbiAgICAgICAgdGhpcy5fZmVlcyA9IDBuXHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldCBieXRlY29kZSgpOiBVaW50OEFycmF5IHwgdW5kZWZpbmVkIHtcclxuICAgICAgICAvLyBtYWtlIHRvUHJvdG9idWYgcmV0dXJuIFByb3RvYnVmJ3MgZGVzZXJpYWxpemVkIG1lc3NhZ2VcclxuICAgICAgICBjb25zdCBvYmogPSB0aGlzLnRvUHJvdG9idWYoKVxyXG4gICAgICAgIGlmICghb2JqKSByZXR1cm4gdW5kZWZpbmVkXHJcbiAgICAgICAgY29uc3QgZXJyID0gdGhpcy5fcHJvdG9UeXBlLnZlcmlmeShvYmopXHJcbiAgICAgICAgaWYgKGVycikge1xyXG4gICAgICAgICAgICB0aHJvdyBUeXBlRXJyb3IoZXJyKVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKFwiXFxub2JqID0+XCIsIEpTT04uc3RyaW5naWZ5KG9iaikpXHJcbiAgICAgICAgICAgIGNvbnN0IG1lc3NhZ2UgPSB0aGlzLl9wcm90b1R5cGUuZnJvbU9iamVjdChvYmopXHJcbiAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKFwiXFxubWVzc2FnZSA9PlwiLCBKU09OLnN0cmluZ2lmeShtZXNzYWdlKSlcclxuICAgICAgICAgICAgY29uc3QgYnl0ZWNvZGUgPSB0aGlzLl9wcm90b1R5cGUuZW5jb2RlKG1lc3NhZ2UpLmZpbmlzaCgpXHJcbiAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKFwiXFxuYnl0ZWNvZGUgPT5cIiwgdG9IZXhTdHJpbmcoYnl0ZWNvZGUpKVxyXG4gICAgICAgICAgICByZXR1cm4gYnl0ZWNvZGVcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldCBjaGFuZ2UoKTogQ29pbnMgfCB1bmRlZmluZWQge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9jaGFuZ2UgPiAwID8gQ29pbnMuZnJvbVBlZHJvcyh0aGlzLl9jaGFuZ2UpIDogdW5kZWZpbmVkXHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldCBjb3ZlcmVkKCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiAoXHJcbiAgICAgICAgICAgICEhdGhpcy5mZWVzXHJcbiAgICAgICAgICAgICAgICAmJiB0aGlzLl9jb3ZlcmVkID49IHRoaXMudmFsdWUucGVkcm9zICsgdGhpcy5mZWVzLnBlZHJvc1xyXG4gICAgICAgIClcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0IGZlZXMoKTogQ29pbnMgfCB1bmRlZmluZWQge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9mZWVzID4gMCA/IENvaW5zLmZyb21QZWRyb3ModGhpcy5fZmVlcykgOiB1bmRlZmluZWRcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0IGhhc2goKTogSGFzaCB8IHVuZGVmaW5lZCB7XHJcbiAgICAgICAgY29uc3QgX2J5dGVjb2RlID0gdGhpcy5ieXRlY29kZVxyXG4gICAgICAgIGlmIChfYnl0ZWNvZGUgaW5zdGFuY2VvZiBVaW50OEFycmF5KSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0b0hleFN0cmluZyhzaGEyNTYoX2J5dGVjb2RlKSlcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkXHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBpbnRvUmVjZWlwdCh0YXJnZXQ6IFNwZWNzKTogYW55IHtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAuLi50YXJnZXRcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgYWJzdHJhY3QgY29uc3VtZVV0eG9zKGxlZGdlcjogSUxlZGdlcik6IFByb21pc2U8YmlnaW50PjtcclxuICAgIGFic3RyYWN0IHByZXBhcmVPdXRwdXRzKGNoYW5nZT86IHsgdmFsdWU6IGJpZ2ludCwgcGtoOiBQdWJsaWNLZXlIYXNoU3RyaW5nIH0sIHBhcmFtcz86IGFueSk6IGFueTtcclxuICAgIGFic3RyYWN0IHJlc2V0VGFyZ2V0KHRhcmdldDogU3BlY3MpOiBhbnk7XHJcbiAgICBhYnN0cmFjdCB0b0pTT04oaHVtYW5pemU6IGJvb2xlYW4pOiBhbnk7XHJcbiAgICBhYnN0cmFjdCB0b1Byb3RvYnVmKCk6IGFueTtcclxuICAgIGFic3RyYWN0IHZhbGlkYXRlVGFyZ2V0KHRhcmdldD86IGFueSk6IFNwZWNzIHwgdW5kZWZpbmVkO1xyXG5cclxuICAgIGFic3RyYWN0IGdldCBvdXRwdXRzKCk6IEFycmF5PFZhbHVlVHJhbnNmZXJPdXRwdXQ+O1xyXG4gICAgYWJzdHJhY3QgZ2V0IG1heFdlaWdodCgpOiBudW1iZXI7XHJcbiAgICBhYnN0cmFjdCBnZXQgcHJlcGFyZWQoKTogYm9vbGVhbjtcclxuICAgIGFic3RyYWN0IGdldCB2YWx1ZSgpOiBDb2lucztcclxuICAgIGFic3RyYWN0IGdldCB3ZWlnaHQoKTogbnVtYmVyO1xyXG5cclxuICAgIHByb3RlY3RlZCBhYnN0cmFjdCBfY2xlYW5UYXJnZXRFeHRyYXMocGFyYW1zPzogYW55KTogYW55O1xyXG4gICAgcHJvdGVjdGVkIGFic3RyYWN0IF9lc3RpbWF0ZU5ldHdvcmtGZWVzKHByb3ZpZGVyOiBJSnNvblJwY1Byb3ZpZGVyLCBwcmlvcml0eT86IFRyYW5zYWN0aW9uUHJpb3JpdHkpOiBQcm9taXNlPGJpZ2ludD47XHJcbn1cclxuXHJcbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBUcmFuc2FjdGlvblBheWxvYWRNdWx0aVNpZzxTcGVjcz4gXHJcbiAgICBleHRlbmRzIFRyYW5zYWN0aW9uUGF5bG9hZDxTcGVjcz5cclxuICAgIGltcGxlbWVudHMgSVRyYW5zYWN0aW9uUGF5bG9hZE11bHRpU2lnPFNwZWNzPlxyXG57XHJcbiAgICBwcm90ZWN0ZWQgX2lucHV0czogQXJyYXk8VXR4bz5cclxuICAgIHByb3RlY3RlZCBfb3V0cHV0czogQXJyYXk8VmFsdWVUcmFuc2Zlck91dHB1dD5cclxuICAgIFxyXG4gICAgY29uc3RydWN0b3IocHJvdG9UeXBlTmFtZTogc3RyaW5nLCBpbml0aWFsVGFyZ2V0PzogU3BlY3MpIHtcclxuICAgICAgICBzdXBlcihwcm90b1R5cGVOYW1lLCBpbml0aWFsVGFyZ2V0KVxyXG4gICAgICAgIHRoaXMuX2lucHV0cyA9IFtdXHJcbiAgICAgICAgdGhpcy5fb3V0cHV0cyA9IFtdXHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldCBpbnB1dHMoKTogQXJyYXk8VXR4bz4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9pbnB1dHNcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0IG91dHB1dHMoKTogQXJyYXk8VmFsdWVUcmFuc2Zlck91dHB1dD4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9vdXRwdXRzXHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldCBwcmVwYXJlZCgpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gKFxyXG4gICAgICAgICAgICB0aGlzLl9pbnB1dHMubGVuZ3RoID4gMCBcclxuICAgICAgICAgICAgICAgICYmIHRoaXMuX291dHB1dHMubGVuZ3RoID4gMFxyXG4gICAgICAgIClcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgYXN5bmMgY29uc3VtZVV0eG9zKGxlZGdlcjogSUxlZGdlciwgcmVsb2FkPzogYm9vbGVhbik6IFByb21pc2U8YmlnaW50PiB7XHJcbiAgICAgICAgaWYgKCF0aGlzLl90YXJnZXQpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGAke3RoaXMuY29uc3RydWN0b3IubmFtZX06IGludGVybmFsIGVycm9yOiBubyBpbi1mbGlnaHQgcGFyYW1zLmApXHJcbiAgICAgICAgfSBcclxuICAgICAgICBjb25zdCBwcmVwYXJlZCA9IHRoaXMucHJlcGFyZWRcclxuICAgICAgICBpZiAoIXRoaXMuY292ZXJlZCkge1xyXG4gICAgICAgICAgICAvLyBjb25zb2xlLmxvZyhhd2FpdCBsZWRnZXIuZ2V0VXR4b3MoKSlcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIC8vIGNvbnN1bWUgdXR4b3MgYXMgdG8gY292ZXIgdGhpcy52YWx1ZSwgYXQgbGVhc3RcclxuICAgICAgICAgICAgY29uc3QgdXR4b3MgPSBhd2FpdCBsZWRnZXIuc2VsZWN0VXR4b3MoeyBcclxuICAgICAgICAgICAgICAgIHZhbHVlOiBDb2lucy5mcm9tUGVkcm9zKHRoaXMudmFsdWUucGVkcm9zIC0gdGhpcy5fY292ZXJlZCksIFxyXG4gICAgICAgICAgICAgICAgcmVsb2FkLFxyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAvLyBjb25zb2xlLmxvZyhsZWRnZXIuY29uc3RydWN0b3IubmFtZSwgXCJjYWNoZUluZm8gPT5cIiwgbGVkZ2VyLnBraCwgbGVkZ2VyLmNhY2hlSW5mbywgdGhpcy52YWx1ZS5wZWRyb3MsIHRoaXMuX2NvdmVyZWQpXHJcbiAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKHV0eG9zKVxyXG4gICAgICAgICAgICB0aGlzLl9jb3ZlcmVkICs9IHV0eG9zLm1hcCh1dHhvID0+IHV0eG8udmFsdWUpLnJlZHVjZSgocHJldiwgY3VycikgPT4gcHJldiArIGN1cnIsIDBuKVxyXG4gICAgICAgICAgICAvLyBjb25zb2xlLmxvZyhcImluaXRpYWwgY292ZXIgPT5cIiwgdGhpcy5fY292ZXJlZClcclxuICAgICAgICAgICAgdGhpcy5faW5wdXRzLnB1c2goLi4udXR4b3MpXHJcbiAgICAgICAgICAgIGxlZGdlci5jb25zdW1lVXR4b3MoLi4udXR4b3MpXHJcblxyXG4gICAgICAgICAgICAvLyB0cnkgdG8gY292ZXIgZmVlcyBvbmx5IGlmIHRoaXMudmFsdWUgaXMgY292ZXJlZCBmaXJzdFxyXG4gICAgICAgICAgICBpZiAodGhpcy5fY292ZXJlZCA+PSB0aGlzLnZhbHVlLnBlZHJvcykge1xyXG4gICAgICAgICAgICAgICAgLy8gY29uc29sZS5sb2codGhpcy5faW5wdXRzKVxyXG4gICAgICAgICAgICAgICAgLy8gY29uc29sZS5sb2coXCJyZW1haW5pbmcgdXR4b3MgPT5cIiwgYXdhaXQgbGVkZ2VyLmdldFV0eG9zKCkpXHJcbiAgICAgICAgICAgICAgICBpZiAoKHRoaXMuX3RhcmdldCBhcyBhbnkpPy5mZWVzIGluc3RhbmNlb2YgQ29pbnMpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9mZWVzID0gKHRoaXMuX3RhcmdldCBhcyBhbnkpLmZlZXMucGVkcm9zO1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKHRoaXMuX2NvdmVyZWQsIHRoaXMudmFsdWUucGVkcm9zLCB0aGlzLl9mZWVzLCB0aGlzLl9jb3ZlcmVkIDwgdGhpcy52YWx1ZS5wZWRyb3MgKyB0aGlzLl9mZWVzKVxyXG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLl9jb3ZlcmVkIDwgdGhpcy52YWx1ZS5wZWRyb3MgKyB0aGlzLl9mZWVzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKFwibW9yZSB1dHhvcyByZXF1aXJlZC4uLlwiKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBleHRyYXMgPSBhd2FpdCBsZWRnZXIuc2VsZWN0VXR4b3MoeyBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBDb2lucy5mcm9tUGVkcm9zKHRoaXMudmFsdWUucGVkcm9zICsgdGhpcy5fZmVlcyAgLSB0aGlzLl9jb3ZlcmVkKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGVkZ2VyLmNvbnN1bWVVdHhvcyguLi5leHRyYXMpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2NvdmVyZWQgKz0gZXh0cmFzLm1hcCh1dHhvID0+IHV0eG8udmFsdWUpLnJlZHVjZSgocHJldiwgY3VycikgPT4gcHJldiArIGN1cnIsIDBuKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9pbnB1dHMucHVzaCguLi5leHRyYXMpXHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2NoYW5nZSA9IHRoaXMuX2NvdmVyZWQgLSAodGhpcy52YWx1ZS5wZWRyb3MgKyB0aGlzLl9mZWVzKVxyXG4gICAgICAgICAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKHRoaXMuX2NoYW5nZSlcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcHJpb3JpdHkgPSAodGhpcy5fdGFyZ2V0IGFzIGFueSk/LmZlZXMgYXMgVHJhbnNhY3Rpb25Qcmlvcml0eSB8fCBUcmFuc2FjdGlvblByaW9yaXR5Lk9wdWxlbnRcclxuICAgICAgICAgICAgICAgICAgICBsZXQgZXN0aW1hdGVkRmVlcyA9IGF3YWl0IHRoaXMuX2VzdGltYXRlTmV0d29ya0ZlZXMobGVkZ2VyLnByb3ZpZGVyLCBwcmlvcml0eSk7XHJcbiAgICAgICAgICAgICAgICAgICAgd2hpbGUgKHRoaXMuX2ZlZXMgPCBlc3RpbWF0ZWRGZWVzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2ZlZXMgPSBlc3RpbWF0ZWRGZWVzXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX291dHB1dHMgPSBbXVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBhZGQgbW9yZSB1dHhvcyBvbmx5IGlmIHRoZSBvbmVzIHNlbGVjdGVkIGZvciBjb3ZlcmluZyB0aGUgdmFsdWUgYW5kIHRoZSBlc3RpbWF0ZSBmZWVzIGRvbid0IHN1ZmZpY2U6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLl9jb3ZlcmVkIDwgdGhpcy52YWx1ZS5wZWRyb3MgKyB0aGlzLl9mZWVzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBleHRyYXMgPSBhd2FpdCBsZWRnZXIuc2VsZWN0VXR4b3MoeyBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogQ29pbnMuZnJvbVBlZHJvcyh0aGlzLnZhbHVlLnBlZHJvcyArIHRoaXMuX2ZlZXMgLSB0aGlzLl9jb3ZlcmVkKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxlZGdlci5jb25zdW1lVXR4b3MoLi4uZXh0cmFzKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fY292ZXJlZCArPSBleHRyYXMubWFwKHV0eG8gPT4gdXR4by52YWx1ZSkucmVkdWNlKChwcmV2LCBjdXJyKSA9PiBwcmV2ICsgY3VyciwgMG4pXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9pbnB1dHMucHVzaCguLi5leHRyYXMpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fY2hhbmdlID0gdGhpcy5fY292ZXJlZCAtICh0aGlzLnZhbHVlLnBlZHJvcyArIHRoaXMuX2ZlZXMpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLl9jaGFuZ2UgPCAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBpbnN1ZmZpY2llbnQgZnVuZHMgLi4uXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVha1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5wcmVwYXJlT3V0cHV0cyh7IHZhbHVlOiB0aGlzLl9jaGFuZ2UsIHBraDogbGVkZ2VyLmNoYW5nZVBraCB9KVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gaXRlcmF0ZSB1bnRpbCBhY3R1YWwgZmVlcyBtYXRjaCBlc3RpbWF0ZWQgZmVlc1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXN0aW1hdGVkRmVlcyA9IGF3YWl0IHRoaXMuX2VzdGltYXRlTmV0d29ya0ZlZXMobGVkZ2VyLnByb3ZpZGVyLCBwcmlvcml0eSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiAwbjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBjb25zb2xlLmxvZyhcImNoYW5nZSA9PlwiLCB0aGlzLl9jaGFuZ2UpXHJcbiAgICAgICAgLy8gcHJlcGFyZSBvdXRwdXRzLCBvbmx5IGlmIHZhbHVlIGFuZCBmZWVzIGdvdCBmdWxseSBjb3ZlcmVkIGZvciB0aGUgZmlyc3QgdGltZTpcclxuICAgICAgICBpZiAodGhpcy5fY2hhbmdlID49IDAgJiYgIXByZXBhcmVkKSB7XHJcbiAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKCctJy5yZXBlYXQoODApKVxyXG4gICAgICAgICAgICAvLyBjb25zb2xlLmxvZyh0aGlzLl9pbnB1dHMpXHJcbiAgICAgICAgICAgIHRoaXMucHJlcGFyZU91dHB1dHMoeyB2YWx1ZTogdGhpcy5fY2hhbmdlLCBwa2g6IGxlZGdlci5jaGFuZ2VQa2ggfSlcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2NoYW5nZVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBwcmVwYXJlT3V0cHV0cyhjaGFuZ2U/OiB7IHZhbHVlOiBiaWdpbnQsIHBraDogUHVibGljS2V5SGFzaFN0cmluZyB9KTogYW55IHtcclxuICAgICAgICBpZiAoY2hhbmdlPy52YWx1ZSkge1xyXG4gICAgICAgICAgICB0aGlzLl9vdXRwdXRzLnB1c2goe1xyXG4gICAgICAgICAgICAgICAgcGtoOiBjaGFuZ2UucGtoLFxyXG4gICAgICAgICAgICAgICAgdmFsdWU6IGNoYW5nZS52YWx1ZSxcclxuICAgICAgICAgICAgICAgIHRpbWVfbG9jazogMCxcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHJlc2V0VGFyZ2V0KHRhcmdldDogU3BlY3MpOiBhbnkge1xyXG4gICAgICAgIHRoaXMuX2NoYW5nZSA9IDBuXHJcbiAgICAgICAgdGhpcy5fY292ZXJlZCA9IDBuXHJcbiAgICAgICAgdGhpcy5fZmVlcyA9IDBuXHJcbiAgICAgICAgdGhpcy5faW5wdXRzID0gW11cclxuICAgICAgICB0aGlzLl9vdXRwdXRzID0gW11cclxuICAgICAgICB0aGlzLl90YXJnZXQgPSB0YXJnZXRcclxuICAgICAgICBkZWxldGUgdGhpcy5fcHJpb3JpdGllc1xyXG4gICAgfVxyXG5cclxuICAgIGFic3RyYWN0IHRvSlNPTihodW1hbml6ZTogYm9vbGVhbik6IGFueTtcclxuICAgIGFic3RyYWN0IHRvUHJvdG9idWYoKTogYW55O1xyXG4gICAgYWJzdHJhY3QgdmFsaWRhdGVUYXJnZXQodGFyZ2V0PzogYW55KTogU3BlY3MgfCB1bmRlZmluZWQ7XHJcblxyXG4gICAgYWJzdHJhY3QgZ2V0IG1heFdlaWdodCgpOiBudW1iZXI7XHJcbiAgICBhYnN0cmFjdCBnZXQgdmFsdWUoKTogQ29pbnM7XHJcbiAgICBhYnN0cmFjdCBnZXQgd2VpZ2h0KCk6IG51bWJlcjtcclxuICAgIFxyXG4gICAgcHJvdGVjdGVkIGFic3RyYWN0IF9jbGVhblRhcmdldEV4dHJhcyhwYXJhbXM/OiBhbnkpOiBhbnk7XHJcbn1cclxuIl19
|
|
@@ -32,11 +32,14 @@ var __importStar = (this && this.__importStar) || (function () {
|
|
|
32
32
|
return result;
|
|
33
33
|
};
|
|
34
34
|
})();
|
|
35
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
36
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
37
|
+
};
|
|
35
38
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
39
|
exports.Signer = void 0;
|
|
37
|
-
const
|
|
38
|
-
const
|
|
39
|
-
const
|
|
40
|
+
const ethers_1 = __importDefault(require("ethers"));
|
|
41
|
+
const keccak256_1 = __importDefault(require("keccak256"));
|
|
42
|
+
const secp256k1_1 = __importDefault(require("secp256k1"));
|
|
40
43
|
const utils = __importStar(require("../utils"));
|
|
41
44
|
const types_1 = require("./types");
|
|
42
45
|
const utils_1 = require("./utils");
|
|
@@ -152,11 +155,11 @@ class Signer {
|
|
|
152
155
|
authorizeEvmAddress(evmAddress) {
|
|
153
156
|
const addr = utils.fromHexString(evmAddress);
|
|
154
157
|
// console.log("addr =>", addr)
|
|
155
|
-
const hash =
|
|
158
|
+
const hash = (0, keccak256_1.default)(Buffer.from(addr));
|
|
156
159
|
// console.log("hash =>", utils.toHexString(hash, true))
|
|
157
160
|
if (this.node.privateKey) {
|
|
158
|
-
const signingKey = new
|
|
159
|
-
const signature = signingKey.
|
|
161
|
+
const signingKey = new ethers_1.default.SigningKey(this.node.privateKey);
|
|
162
|
+
const signature = signingKey.sign(hash);
|
|
160
163
|
const sig = `0x${signature.r.slice(2)}${signature.s.slice(2)}${signature.v.toString(16)}`;
|
|
161
164
|
// const der = secp256k1.signatureExport(signature)
|
|
162
165
|
// const signature = RecoverableSignature.fromKeyedSignature(
|
|
@@ -199,8 +202,8 @@ class Signer {
|
|
|
199
202
|
else if (this.node.privateKey) {
|
|
200
203
|
const msg = Uint8Array.from(buffer);
|
|
201
204
|
const privateKey = Uint8Array.from(Buffer.from(this.node.privateKey));
|
|
202
|
-
const signature =
|
|
203
|
-
const der =
|
|
205
|
+
const signature = secp256k1_1.default.ecdsaSign(msg, privateKey).signature;
|
|
206
|
+
const der = secp256k1_1.default.signatureExport(signature);
|
|
204
207
|
return {
|
|
205
208
|
public_key: {
|
|
206
209
|
compressed: this.publicKey.compressed,
|
|
@@ -229,4 +232,4 @@ class Signer {
|
|
|
229
232
|
}
|
|
230
233
|
}
|
|
231
234
|
exports.Signer = Signer;
|
|
232
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2lnbmVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2xpYi9jcnlwdG8vc2lnbmVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLE1BQU0sTUFBTSxHQUFHLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQTtBQUNoQyxNQUFNLFNBQVMsR0FBRyxPQUFPLENBQUMsV0FBVyxDQUFDLENBQUE7QUFDdEMsTUFBTSxTQUFTLEdBQUcsT0FBTyxDQUFDLFdBQVcsQ0FBQyxDQUFBO0FBRXRDLGdEQUFpQztBQUlqQyxtQ0FBaUo7QUFDakosbUNBQXFDO0FBRXJDLE1BQWEsTUFBTTtJQVNmLFlBQ0ksSUFBWSxFQUNaLFFBQTBCLEVBQzFCLFFBQWdDO1FBVDFCLFVBQUssR0FBZ0IsRUFBRSxDQUFBO1FBVzdCLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFBO1FBQ2hCLElBQUksQ0FBQyxRQUFRLEdBQUcsUUFBUSxDQUFBO1FBQ3hCLElBQUksQ0FBQyxRQUFRLEdBQUcsUUFBUSxJQUFJLDZCQUFxQixDQUFDLE9BQU8sQ0FBQTtRQUN6RCxJQUFJLENBQUMsUUFBUSxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQ3BCLE1BQU0sS0FBSyxDQUFDLGdEQUFnRCxDQUFDLENBQUE7UUFDakUsQ0FBQztRQUNELElBQUksQ0FBQyxZQUFZLEdBQUcsS0FBSyxDQUFBO0lBQzdCLENBQUM7SUFFRCxtSEFBbUg7SUFDbkgsbUhBQW1IO0lBRW5ILElBQVcsU0FBUztRQUNoQixNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQTtRQUN6QyxJQUFJLFVBQVUsR0FBVyxFQUFFLENBQUE7UUFDM0IsSUFBSSxRQUFRLEdBQVcsTUFBTSxDQUFDLGdCQUFnQixDQUFBO1FBQzlDLElBQUksQ0FBQyxLQUFLLENB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QUFTLEVBQUU7d0JBQ1AsR0FBRyxFQUFFLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDO3FCQUN2QjtpQkFDSjthQUNKLENBQUE7UUFDTCxDQUFDO2FBQU0sQ0FBQztZQUNKLE1BQU0sS0FBSyxDQUFDLDRDQUE0QyxDQUFDLENBQUE7UUFDN0QsQ0FBQztJQUNMLENBQUM7SUFFTSxXQUFXLENBQUMsSUFBWTtRQU0zQixNQUFNLE1BQU0sR0FBRyxLQUFLLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxDQUFBO1FBQ3hDLE1BQU0sY0FBYyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUE7UUFDNUMsT0FBTztZQUNILE9BQU8sRUFBRSxJQUFJLENBQUMsR0FBRztZQUNqQixPQUFPLEVBQUUsSUFBSTtZQUNiLFNBQVMsRUFBRSxpQkFBUyxDQUFDLFlBQVksQ0FBQyxjQUFjLENBQUMsVUFBVSxDQUFDLENBQUMsV0FBVyxFQUFFO1lBQzFFLFNBQVMsRUFBRSw0QkFBb0IsQ0FBQyxrQkFBa0IsQ0FBQyxjQUFjLEVBQUUsTUFBTSxDQUFDLENBQUMsV0FBVyxFQUFFO1NBQzNGLENBQUE7SUFDTCxDQUFDO0NBQ0o7QUExTkQsd0JBME5DIiwic291cmNlc0NvbnRlbnQiOlsiY29uc3QgZXRoZXJzID0gcmVxdWlyZSgnZXRoZXJzJylcclxuY29uc3Qga2VjY2FrMjU2ID0gcmVxdWlyZSgna2VjY2FrMjU2JylcclxuY29uc3Qgc2VjcDI1NmsxID0gcmVxdWlyZSgnc2VjcDI1NmsxJylcclxuXHJcbmltcG9ydCAqIGFzIHV0aWxzIGZyb20gXCIuLi91dGlsc1wiXHJcblxyXG5pbXBvcnQgeyBCYWxhbmNlLCBIZXhTdHJpbmcsIE5ldHdvcmssIFF1ZXJ5U3Rha2VzT3JkZXIsIFN0YWtlRW50cnkgfSBmcm9tIFwiLi4vdHlwZXNcIlxyXG5pbXBvcnQgeyBJQklQMzIsIElKc29uUnBjUHJvdmlkZXIsIElTaWduZXIgfSBmcm9tIFwiLi9pbnRlcmZhY2VzXCJcclxuaW1wb3J0IHsgQ29pbnMsIEtleWVkU2lnbmF0dXJlLCBQdWJsaWNLZXksIFB1YmxpY0tleUhhc2hTdHJpbmcsIFJlY292ZXJhYmxlU2lnbmF0dXJlLCBVdHhvLCBVdHhvQ2FjaGVJbmZvLCBVdHhvU2VsZWN0aW9uU3RyYXRlZ3kgfSBmcm9tIFwiLi90eXBlc1wiXHJcbmltcG9ydCB7IHNlbGVjdFV0eG9zIH0gZnJvbSBcIi4vdXRpbHNcIlxyXG5cclxuZXhwb3J0IGNsYXNzIFNpZ25lciBpbXBsZW1lbnRzIElTaWduZXIge1xyXG4gICAgXHJcbiAgICBwcm90ZWN0ZWQgbm9kZTogSUJJUDMyO1xyXG4gICAgcHJvdGVjdGVkIHV0eG9zOiBBcnJheTxVdHhvPiA9IFtdXHJcbiAgICBwcml2YXRlIF9pbml0aWFsaXplZDogYm9vbGVhbjtcclxuICAgIFxyXG4gICAgcHVibGljIHJlYWRvbmx5IHByb3ZpZGVyOiBJSnNvblJwY1Byb3ZpZGVyXHJcbiAgICBwdWJsaWMgc3RyYXRlZ3k6IFV0eG9TZWxlY3Rpb25TdHJhdGVneVxyXG5cclxuICAgIGNvbnN0cnVjdG9yKFxyXG4gICAgICAgIG5vZGU6IElCSVAzMiwgXHJcbiAgICAgICAgcHJvdmlkZXI6IElKc29uUnBjUHJvdmlkZXIsIFxyXG4gICAgICAgIHN0cmF0ZWd5PzogVXR4b1NlbGVjdGlvblN0cmF0ZWd5LFxyXG4gICAgKSB7XHJcbiAgICAgICAgdGhpcy5ub2RlID0gbm9kZVxyXG4gICAgICAgIHRoaXMucHJvdmlkZXIgPSBwcm92aWRlclxyXG4gICAgICAgIHRoaXMuc3RyYXRlZ3kgPSBzdHJhdGVneSB8fCBVdHhvU2VsZWN0aW9uU3RyYXRlZ3kuU2xpbUZpdFxyXG4gICAgICAgIGlmICghcHJvdmlkZXIubmV0d29yaykge1xyXG4gICAgICAgICAgICB0aHJvdyBFcnJvcihgU2lnbmVyOiBpbnRlcm5hbCBlcnJvcjogdW5pbnRpYWxpemVkIHByb3ZpZGVyLmApXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuX2luaXRpYWxpemVkID0gZmFsc2VcclxuICAgIH1cclxuXHJcbiAgICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XHJcbiAgICAvLyAtLS0gSUxlZGdlciAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgcHVibGljIGdldCBjYWNoZUluZm8oKTogVXR4b0NhY2hlSW5mbyB7XHJcbiAgICAgICAgY29uc3Qgbm93ID0gTWF0aC5mbG9vcihEYXRlLm5vdygpIC8gMTAwMClcclxuICAgICAgICBsZXQgZXhwZW5kYWJsZTogYmlnaW50ID0gMG5cclxuICAgICAgICBsZXQgdGltZWxvY2s6IG51bWJlciA9IE51bWJlci5NQVhfU0FGRV9JTlRFR0VSXHJcbiAgICAgICAgdGhpcy51dHhvcy5tYXAodXR4byA9PiB7XHJcbiAgICAgICAgICAgIGlmICh1dHhvLnRpbWVsb2NrID4gbm93KSB7XHJcbiAgICAgICAgICAgICAgICBpZiAodXR4by50aW1lbG9jayA8IHRpbWVsb2NrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGltZWxvY2sgPSB1dHhvLnRpbWVsb2NrXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBleHBlbmRhYmxlICs9IHV0eG8udmFsdWVcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pXHJcbiAgICAgICAgaWYgKHRpbWVsb2NrID09PSBOdW1iZXIuTUFYX1NBRkVfSU5URUdFUikgdGltZWxvY2sgPSAwO1xyXG4gICAgICAgIHJldHVybiB7IGV4cGVuZGFibGUsIHRpbWVsb2NrLCBzaXplOiB0aGlzLnV0eG9zLmxlbmd0aCB9XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldCBjaGFuZ2VQa2goKTogUHVibGljS2V5SGFzaFN0cmluZyB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMucGtoXHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldCBuZXR3b3JrKCk6IE5ldHdvcmsge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnByb3ZpZGVyLm5ldHdvcmsgfHwgXCJtYWlubmV0XCJcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0IHBraCgpOiBQdWJsaWNLZXlIYXNoU3RyaW5nIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5wdWJsaWNLZXkuaGFzaCgpLnRvQmVjaDMyKHRoaXMubmV0d29yaylcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0IHB1YmxpY0tleSgpOiBQdWJsaWNLZXkge1xyXG4gICAgICAgIHJldHVybiBQdWJsaWNLZXkuZnJvbVVpbnQ4QXJyYXkodGhpcy5ub2RlLnB1YmxpY0tleSlcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0IHByaXZhdGVLZXkoKTogSGV4U3RyaW5nIHtcclxuICAgICAgICByZXR1cm4gdXRpbHMudG9IZXhTdHJpbmcodGhpcy5ub2RlPy5wcml2YXRlS2V5LCB0cnVlKVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBhZGRVdHhvcyguLi51dHhvczogQXJyYXk8VXR4bz4pOiB7IGV4Y2x1ZGVkOiBBcnJheTxVdHhvPiwgaW5jbHVkZWQ6IEFycmF5PFV0eG8+IH0ge1xyXG4gICAgICAgIGNvbnN0IGV4Y2x1ZGVkOiBBcnJheTxVdHhvPiA9IFtdXHJcbiAgICAgICAgY29uc3QgZXhpc3RpbmdQb2ludGVycyA9IG5ldyBTZXQodGhpcy51dHhvcy5tYXAoY2FjaGVkID0+IGNhY2hlZC5vdXRwdXRfcG9pbnRlcikpO1xyXG4gICAgICAgIGNvbnN0IGluY2x1ZGVkOiBBcnJheTxVdHhvPiA9IHV0eG9zLmZpbHRlcih1dHhvID0+IHtcclxuICAgICAgICAgICAgaWYgKHV0eG8uc2lnbmVyID09PSB0aGlzLnBraCkge1xyXG4gICAgICAgICAgICAgICAgLy8gYXZvaWQgYWRkaW5nIGR1cGxpY2F0ZXNcclxuICAgICAgICAgICAgICAgIGlmICghZXhpc3RpbmdQb2ludGVycy5oYXModXR4by5vdXRwdXRfcG9pbnRlcikpIHtcclxuICAgICAgICAgICAgICAgICAgICBleGlzdGluZ1BvaW50ZXJzLmFkZCh1dHhvLm91dHB1dF9wb2ludGVyKVxyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlXHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgZXhjbHVkZWQucHVzaCh1dHhvKVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSlcclxuICAgICAgICB0aGlzLnV0eG9zLnB1c2goLi4uaW5jbHVkZWQpXHJcbiAgICAgICAgcmV0dXJuIHsgZXhjbHVkZWQsIGluY2x1ZGVkIH1cclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgY29uc3VtZVV0eG9zKC4uLnV0eG9zOiBBcnJheTxVdHhvPik6IEFycmF5PFV0eG8+IHtcclxuICAgICAgICB0aGlzLnV0eG9zID0gdGhpcy51dHhvcy5maWx0ZXIoY2FjaGVkID0+IHtcclxuICAgICAgICAgICAgY29uc3QgaW5jb21pbmdJbmRleCA9IHV0eG9zLmZpbmRJbmRleChpbmNvbWluZyA9PiBjYWNoZWQub3V0cHV0X3BvaW50ZXIgPT09IGluY29taW5nLm91dHB1dF9wb2ludGVyKTtcclxuICAgICAgICAgICAgaWYgKGluY29taW5nSW5kZXggPj0gMCkge1xyXG4gICAgICAgICAgICAgICAgdXR4b3Muc3BsaWNlKGluY29taW5nSW5kZXgsIDEpXHJcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2VcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KVxyXG4gICAgICAgIC8vIGNvbnNvbGUubG9nKFwiU2lnbmVyLmNvbnN1bWVVdHhvczogcmVtYWluaW5nOlwiLCB1dHhvcylcclxuICAgICAgICByZXR1cm4gdXR4b3NcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgYXN5bmMgZ2V0QmFsYW5jZSgpOiBQcm9taXNlPEJhbGFuY2U+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy5wcm92aWRlci5nZXRCYWxhbmNlKHRoaXMucGtoKVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBhc3luYyBnZXREZWxlZ2F0ZWVzKG9yZGVyPzogUXVlcnlTdGFrZXNPcmRlcik6IFByb21pc2U8QXJyYXk8U3Rha2VFbnRyeT4+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy5wcm92aWRlci5zdGFrZXMoe1xyXG4gICAgICAgICAgICBmaWx0ZXI6IHsgd2l0aGRyYXdlcjogdGhpcy5wa2ggfSxcclxuICAgICAgICAgICAgcGFyYW1zOiB7IG9yZGVyIH0sXHJcbiAgICAgICAgfSlcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0U2lnbmVyKHBraD86IFB1YmxpY0tleUhhc2hTdHJpbmcpOiBJU2lnbmVyIHwgdW5kZWZpbmVkIHsgXHJcbiAgICAgICAgcmV0dXJuICghcGtoIHx8IHBraCA9PT0gdGhpcy5wa2gpID8gdGhpcyA6IHVuZGVmaW5lZFxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBhc3luYyBnZXRVdHhvcyhyZWxvYWQgPSBmYWxzZSk6IFByb21pc2U8QXJyYXk8VXR4bz4+IHtcclxuICAgICAgICBpZiAocmVsb2FkIHx8ICF0aGlzLl9pbml0aWFsaXplZCkge1xyXG4gICAgICAgICAgICB0aGlzLl9pbml0aWFsaXplZCA9IHRydWVcclxuICAgICAgICAgICAgdGhpcy51dHhvcyA9IChhd2FpdCB0aGlzLnByb3ZpZGVyLmdldFV0eG9zKHRoaXMucGtoKSlcclxuICAgICAgICAgICAgICAgIC5tYXAodXR4byA9PiAoeyAuLi51dHhvLCBzaWduZXI6IHRoaXMucGtoIH0pKVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdGhpcy51dHhvc1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBhc3luYyBzZWxlY3RVdHhvcyhzcGVjcz86IHtcclxuICAgICAgICB2YWx1ZT86IENvaW5zLFxyXG4gICAgICAgIHJlbG9hZD86IGJvb2xlYW4sXHJcbiAgICAgICAgc3RyYXRlZ3k/OiBVdHhvU2VsZWN0aW9uU3RyYXRlZ3lcclxuICAgIH0pOiBQcm9taXNlPEFycmF5PFV0eG8+PiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXNcclxuICAgICAgICAgICAgLmdldFV0eG9zKHNwZWNzPy5yZWxvYWQpXHJcbiAgICAgICAgICAgIC50aGVuKHV0eG9zID0+IHNlbGVjdFV0eG9zKHsgdXR4b3MsIHZhbHVlOiBzcGVjcz8udmFsdWUsIHN0cmF0ZWd5OiBzcGVjcz8uc3RyYXRlZ3kgfHwgdGhpcy5zdHJhdGVneSB9KSlcclxuICAgIH1cclxuICAgIFxyXG4gICAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxyXG4gICAgLy8gLS0tIElTaWduZXIgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIHB1YmxpYyBhdXRob3JpemVFdm1BZGRyZXNzKGV2bUFkZHJlc3M6IEhleFN0cmluZyk6IGFueSB7XHJcbiAgICAgICAgY29uc3QgYWRkciA9IHV0aWxzLmZyb21IZXhTdHJpbmcoZXZtQWRkcmVzcylcclxuICAgICAgICAvLyBjb25zb2xlLmxvZyhcImFkZHIgPT5cIiwgYWRkcilcclxuICAgICAgICBjb25zdCBoYXNoID0ga2VjY2FrMjU2KEJ1ZmZlci5mcm9tKGFkZHIpKVxyXG4gICAgICAgIC8vIGNvbnNvbGUubG9nKFwiaGFzaCA9PlwiLCB1dGlscy50b0hleFN0cmluZyhoYXNoLCB0cnVlKSlcclxuXHJcbiAgICAgICAgaWYgKHRoaXMubm9kZS5wcml2YXRlS2V5KSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHNpZ25pbmdLZXkgPSBuZXcgZXRoZXJzLnV0aWxzLlNpZ25pbmdLZXkodGhpcy5ub2RlLnByaXZhdGVLZXkpXHJcbiAgICAgICAgICAgIGNvbnN0IHNpZ25hdHVyZSA9IHNpZ25pbmdLZXkuc2lnbkRpZ2VzdChoYXNoKVxyXG4gICAgICAgICAgICBjb25zdCBzaWcgPSBgMHgke3NpZ25hdHVyZS5yLnNsaWNlKDIpfSR7c2lnbmF0dXJlLnMuc2xpY2UoMil9JHtzaWduYXR1cmUudi50b1N0cmluZygxNil9YFxyXG4gICAgICAgICAgICAgICAgLy8gY29uc3QgZGVyID0gc2VjcDI1NmsxLnNpZ25hdHVyZUV4cG9ydChzaWduYXR1cmUpXHJcbiAgICAgICAgICAgIC8vIGNvbnN0IHNpZ25hdHVyZSA9IFJlY292ZXJhYmxlU2lnbmF0dXJlLmZyb21LZXllZFNpZ25hdHVyZShcclxuICAgICAgICAgICAgLy8gICAgIHRoaXMuc2lnbkhhc2goaGFzaCksXHJcbiAgICAgICAgICAgIC8vICAgICBoYXNoXHJcbiAgICAgICAgICAgIC8vICk7XHJcblxyXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhcInB1YktleTEgPT5cIiwgc2lnbmluZ0tleS5wdWJsaWNLZXkpXHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKFwicHViS2V5MiA9PlwiLCB1dGlscy50b0hleFN0cmluZyh0aGlzLm5vZGUucHVibGljS2V5LCB0cnVlKSlcclxuICAgICAgICAgICAgY29uc29sZS5sb2coXCJwdWJLZXlIYXNoID0+XCIsIHRoaXMucHVibGljS2V5Lmhhc2goKS50b0hleFN0cmluZygpKVxyXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhcInNpZyA9PlwiLCBzaWcsIFwiXFxuXCIpXHJcbiAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKFwic2lnbmF0dXJlID0+XCIsIHNpZ25hdHVyZS50b1N0cmluZygpKVxyXG4gICAgICAgICAgICAvLyBjb25zb2xlLmxvZyhcImRlciA9PlwiLCBkZXIpXHJcbiAgICAgICAgICAgIHJldHVybiBzaWdcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBcclxuICAgIHB1YmxpYyBhc3luYyBnZXRTdGFrZUVudHJ5Tm9uY2UodmFsaWRhdG9yOiBQdWJsaWNLZXlIYXNoU3RyaW5nKTogUHJvbWlzZTxudW1iZXI+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy5wcm92aWRlclxyXG4gICAgICAgICAgICAuc3Rha2VzKHsgZmlsdGVyOiB7XHJcbiAgICAgICAgICAgICAgICB2YWxpZGF0b3IsXHJcbiAgICAgICAgICAgICAgICB3aXRoZHJhd2VyOiB0aGlzLnBraFxyXG4gICAgICAgICAgICB9fSkudGhlbigoW2VudHJ5XSkgPT4gZW50cnkudmFsdWUubm9uY2UpXHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHNpZ25IYXNoKGhhc2g6IGFueSk6IEtleWVkU2lnbmF0dXJlIHtcclxuICAgICAgICBsZXQgYnVmZmVyOiBCdWZmZXI7XHJcbiAgICAgICAgaWYgKGhhc2ggaW5zdGFuY2VvZiBVaW50OEFycmF5KSB7XHJcbiAgICAgICAgICAgIGJ1ZmZlciA9IEJ1ZmZlci5mcm9tKGhhc2gpXHJcbiAgICAgICAgfSBlbHNlIGlmIChoYXNoIGluc3RhbmNlb2YgQnVmZmVyKSB7XHJcbiAgICAgICAgICAgIGJ1ZmZlciA9IGhhc2hcclxuICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiBoYXNoID09PSAnc3RyaW5nJykge1xyXG4gICAgICAgICAgICBidWZmZXIgPSBCdWZmZXIuZnJvbSh1dGlscy5mcm9tSGV4U3RyaW5nKGhhc2gpKSAgICAgICAgICAgXHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGAke3RoaXMuY29uc3RydWN0b3IubmFtZX06IHVuc3VwcG9ydGVkIGhhc2ggdmFsdWU6ICR7aGFzaH1gKVxyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoIWJ1ZmZlciB8fCBidWZmZXIubGVuZ3RoICE9PSAzMikge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYCR7dGhpcy5jb25zdHJ1Y3Rvci5uYW1lfTogaW52YWxpZCBoYXNoIGxlbmd0aDogJHtidWZmZXIubGVuZ3RofSAhPSAzMmApXHJcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLm5vZGUucHJpdmF0ZUtleSkge1xyXG4gICAgICAgICAgICBjb25zdCBtc2cgPSBVaW50OEFycmF5LmZyb20oYnVmZmVyKVxyXG4gICAgICAgICAgICBjb25zdCBwcml2YXRlS2V5ID0gVWludDhBcnJheS5mcm9tKEJ1ZmZlci5mcm9tKHRoaXMubm9kZS5wcml2YXRlS2V5KSlcclxuICAgICAgICAgICAgY29uc3Qgc2lnbmF0dXJlID0gc2VjcDI1NmsxLmVjZHNhU2lnbihtc2csIHByaXZhdGVLZXkpLnNpZ25hdHVyZVxyXG4gICAgICAgICAgICBjb25zdCBkZXIgPSBzZWNwMjU2azEuc2lnbmF0dXJlRXhwb3J0KHNpZ25hdHVyZSlcclxuICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICAgIHB1YmxpY19rZXk6IHtcclxuICAgICAgICAgICAgICAgICAgICBjb21wcmVzc2VkOiB0aGlzLnB1YmxpY0tleS5jb21wcmVzc2VkLFxyXG4gICAgICAgICAgICAgICAgICAgIGJ5dGVzOiBBcnJheS5mcm9tKHRoaXMucHVibGljS2V5LmJ5dGVzKSxcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICBzaWduYXR1cmU6IHtcclxuICAgICAgICAgICAgICAgICAgICBTZWNwMjU2azE6IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZGVyOiBBcnJheS5mcm9tKGRlciksXHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhyb3cgRXJyb3IoYFNpZ25lcjogaW52YWxpZCBCSVAzMiBub2RlOiBubyBwcml2YXRlIGtleWApXHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBzaWduTWVzc2FnZSh0ZXh0OiBzdHJpbmcpOiB7XHJcbiAgICAgICAgYWRkcmVzczogc3RyaW5nLFxyXG4gICAgICAgIG1lc3NhZ2U6IHN0cmluZyxcclxuICAgICAgICBwdWJsaWNLZXk6IEhleFN0cmluZyxcclxuICAgICAgICBzaWduYXR1cmU6IEhleFN0cmluZ1xyXG4gICAgfSB7XHJcbiAgICAgICAgY29uc3QgZGlnZXN0ID0gdXRpbHMuZGlnZXN0TWVzc2FnZSh0ZXh0KVxyXG4gICAgICAgIGNvbnN0IGtleWVkU2lnbmF0dXJlID0gdGhpcy5zaWduSGFzaChkaWdlc3QpXHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgYWRkcmVzczogdGhpcy5wa2gsXHJcbiAgICAgICAgICAgIG1lc3NhZ2U6IHRleHQsXHJcbiAgICAgICAgICAgIHB1YmxpY0tleTogUHVibGljS2V5LmZyb21Qcm90b2J1ZihrZXllZFNpZ25hdHVyZS5wdWJsaWNfa2V5KS50b0hleFN0cmluZygpLFxyXG4gICAgICAgICAgICBzaWduYXR1cmU6IFJlY292ZXJhYmxlU2lnbmF0dXJlLmZyb21LZXllZFNpZ25hdHVyZShrZXllZFNpZ25hdHVyZSwgZGlnZXN0KS50b0hleFN0cmluZygpLFxyXG4gICAgICAgIH1cclxuICAgIH1cclxufSJdfQ==
|
|
235
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2lnbmVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2xpYi9jcnlwdG8vc2lnbmVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLG9EQUEwQztBQUMxQywwREFBZ0Q7QUFDaEQsMERBQWdEO0FBRWhELGdEQUFpQztBQUlqQyxtQ0FBaUo7QUFDakosbUNBQXFDO0FBRXJDLE1BQWEsTUFBTTtJQVNmLFlBQ0ksSUFBWSxFQUNaLFFBQTBCLEVBQzFCLFFBQWdDO1FBVDFCLFVBQUssR0FBZ0IsRUFBRSxDQUFBO1FBVzdCLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFBO1FBQ2hCLElBQUksQ0FBQyxRQUFRLEdBQUcsUUFBUSxDQUFBO1FBQ3hCLElBQUksQ0FBQyxRQUFRLEdBQUcsUUFBUSxJQUFJLDZCQUFxQixDQUFDLE9BQU8sQ0FBQTtRQUN6RCxJQUFJLENBQUMsUUFBUSxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQ3BCLE1BQU0sS0FBSyxDQUFDLGdEQUFnRCxDQUFDLENBQUE7UUFDakUsQ0FBQztRQUNELElBQUksQ0FBQyxZQUFZLEdBQUcsS0FBSyxDQUFBO0lBQzdCLENBQUM7SUFFRCxtSEFBbUg7SUFDbkgsbUhBQW1IO0lBRW5ILElBQVcsU0FBUztRQUNoQixNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQTtRQUN6QyxJQUFJLFVBQVUsR0FBVyxFQUFFLENBQUE7UUFDM0IsSUFBSSxRQUFRLEdBQVcsTUFBTSxDQUFDLGdCQUFnQixDQUFBO1FBQzlDLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFO1lBQ2xCLElBQUksSUFBSSxDQUFDLFFBQVEsR0FBRyxHQUFHLEVBQUUsQ0FBQztnQkFDdEIsSUFBSSxJQUFJLENBQUMs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O1lBQ0osTUFBTSxLQUFLLENBQUMsNENBQTRDLENBQUMsQ0FBQTtRQUM3RCxDQUFDO0lBQ0wsQ0FBQztJQUVNLFdBQVcsQ0FBQyxJQUFZO1FBTTNCLE1BQU0sTUFBTSxHQUFHLEtBQUssQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLENBQUE7UUFDeEMsTUFBTSxjQUFjLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQTtRQUM1QyxPQUFPO1lBQ0gsT0FBTyxFQUFFLElBQUksQ0FBQyxHQUFHO1lBQ2pCLE9BQU8sRUFBRSxJQUFJO1lBQ2IsU0FBUyxFQUFFLGlCQUFTLENBQUMsWUFBWSxDQUFDLGNBQWMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxXQUFXLEVBQUU7WUFDMUUsU0FBUyxFQUFFLDRCQUFvQixDQUFDLGtCQUFrQixDQUFDLGNBQWMsRUFBRSxNQUFNLENBQUMsQ0FBQyxXQUFXLEVBQUU7U0FDM0YsQ0FBQTtJQUNMLENBQUM7Q0FDSjtBQTFORCx3QkEwTkMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBkZWZhdWx0IGFzIGV0aGVycyB9IGZyb20gXCJldGhlcnNcIlxyXG5pbXBvcnQgeyBkZWZhdWx0IGFzIGtlY2NhazI1NiB9IGZyb20gXCJrZWNjYWsyNTZcIlxyXG5pbXBvcnQgeyBkZWZhdWx0IGFzIHNlY3AyNTZrMSB9IGZyb20gXCJzZWNwMjU2azFcIlxyXG5cclxuaW1wb3J0ICogYXMgdXRpbHMgZnJvbSBcIi4uL3V0aWxzXCJcclxuXHJcbmltcG9ydCB7IEJhbGFuY2UsIEhleFN0cmluZywgTmV0d29yaywgUXVlcnlTdGFrZXNPcmRlciwgU3Rha2VFbnRyeSB9IGZyb20gXCIuLi90eXBlc1wiXHJcbmltcG9ydCB7IElCSVAzMiwgSUpzb25ScGNQcm92aWRlciwgSVNpZ25lciB9IGZyb20gXCIuL2ludGVyZmFjZXNcIlxyXG5pbXBvcnQgeyBDb2lucywgS2V5ZWRTaWduYXR1cmUsIFB1YmxpY0tleSwgUHVibGljS2V5SGFzaFN0cmluZywgUmVjb3ZlcmFibGVTaWduYXR1cmUsIFV0eG8sIFV0eG9DYWNoZUluZm8sIFV0eG9TZWxlY3Rpb25TdHJhdGVneSB9IGZyb20gXCIuL3R5cGVzXCJcclxuaW1wb3J0IHsgc2VsZWN0VXR4b3MgfSBmcm9tIFwiLi91dGlsc1wiXHJcblxyXG5leHBvcnQgY2xhc3MgU2lnbmVyIGltcGxlbWVudHMgSVNpZ25lciB7XHJcbiAgICBcclxuICAgIHByb3RlY3RlZCBub2RlOiBJQklQMzI7XHJcbiAgICBwcm90ZWN0ZWQgdXR4b3M6IEFycmF5PFV0eG8+ID0gW11cclxuICAgIHByaXZhdGUgX2luaXRpYWxpemVkOiBib29sZWFuO1xyXG4gICAgXHJcbiAgICBwdWJsaWMgcmVhZG9ubHkgcHJvdmlkZXI6IElKc29uUnBjUHJvdmlkZXJcclxuICAgIHB1YmxpYyBzdHJhdGVneTogVXR4b1NlbGVjdGlvblN0cmF0ZWd5XHJcblxyXG4gICAgY29uc3RydWN0b3IoXHJcbiAgICAgICAgbm9kZTogSUJJUDMyLCBcclxuICAgICAgICBwcm92aWRlcjogSUpzb25ScGNQcm92aWRlciwgXHJcbiAgICAgICAgc3RyYXRlZ3k/OiBVdHhvU2VsZWN0aW9uU3RyYXRlZ3ksXHJcbiAgICApIHtcclxuICAgICAgICB0aGlzLm5vZGUgPSBub2RlXHJcbiAgICAgICAgdGhpcy5wcm92aWRlciA9IHByb3ZpZGVyXHJcbiAgICAgICAgdGhpcy5zdHJhdGVneSA9IHN0cmF0ZWd5IHx8IFV0eG9TZWxlY3Rpb25TdHJhdGVneS5TbGltRml0XHJcbiAgICAgICAgaWYgKCFwcm92aWRlci5uZXR3b3JrKSB7XHJcbiAgICAgICAgICAgIHRocm93IEVycm9yKGBTaWduZXI6IGludGVybmFsIGVycm9yOiB1bmludGlhbGl6ZWQgcHJvdmlkZXIuYClcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5faW5pdGlhbGl6ZWQgPSBmYWxzZVxyXG4gICAgfVxyXG5cclxuICAgIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cclxuICAgIC8vIC0tLSBJTGVkZ2VyIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBwdWJsaWMgZ2V0IGNhY2hlSW5mbygpOiBVdHhvQ2FjaGVJbmZvIHtcclxuICAgICAgICBjb25zdCBub3cgPSBNYXRoLmZsb29yKERhdGUubm93KCkgLyAxMDAwKVxyXG4gICAgICAgIGxldCBleHBlbmRhYmxlOiBiaWdpbnQgPSAwblxyXG4gICAgICAgIGxldCB0aW1lbG9jazogbnVtYmVyID0gTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVJcclxuICAgICAgICB0aGlzLnV0eG9zLm1hcCh1dHhvID0+IHtcclxuICAgICAgICAgICAgaWYgKHV0eG8udGltZWxvY2sgPiBub3cpIHtcclxuICAgICAgICAgICAgICAgIGlmICh1dHhvLnRpbWVsb2NrIDwgdGltZWxvY2spIHtcclxuICAgICAgICAgICAgICAgICAgICB0aW1lbG9jayA9IHV0eG8udGltZWxvY2tcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGV4cGVuZGFibGUgKz0gdXR4by52YWx1ZVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSlcclxuICAgICAgICBpZiAodGltZWxvY2sgPT09IE51bWJlci5NQVhfU0FGRV9JTlRFR0VSKSB0aW1lbG9jayA9IDA7XHJcbiAgICAgICAgcmV0dXJuIHsgZXhwZW5kYWJsZSwgdGltZWxvY2ssIHNpemU6IHRoaXMudXR4b3MubGVuZ3RoIH1cclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0IGNoYW5nZVBraCgpOiBQdWJsaWNLZXlIYXNoU3RyaW5nIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5wa2hcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0IG5ldHdvcmsoKTogTmV0d29yayB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMucHJvdmlkZXIubmV0d29yayB8fCBcIm1haW5uZXRcIlxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXQgcGtoKCk6IFB1YmxpY0tleUhhc2hTdHJpbmcge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnB1YmxpY0tleS5oYXNoKCkudG9CZWNoMzIodGhpcy5uZXR3b3JrKVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXQgcHVibGljS2V5KCk6IFB1YmxpY0tleSB7XHJcbiAgICAgICAgcmV0dXJuIFB1YmxpY0tleS5mcm9tVWludDhBcnJheSh0aGlzLm5vZGUucHVibGljS2V5KVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXQgcHJpdmF0ZUtleSgpOiBIZXhTdHJpbmcge1xyXG4gICAgICAgIHJldHVybiB1dGlscy50b0hleFN0cmluZyh0aGlzLm5vZGU/LnByaXZhdGVLZXksIHRydWUpXHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGFkZFV0eG9zKC4uLnV0eG9zOiBBcnJheTxVdHhvPik6IHsgZXhjbHVkZWQ6IEFycmF5PFV0eG8+LCBpbmNsdWRlZDogQXJyYXk8VXR4bz4gfSB7XHJcbiAgICAgICAgY29uc3QgZXhjbHVkZWQ6IEFycmF5PFV0eG8+ID0gW11cclxuICAgICAgICBjb25zdCBleGlzdGluZ1BvaW50ZXJzID0gbmV3IFNldCh0aGlzLnV0eG9zLm1hcChjYWNoZWQgPT4gY2FjaGVkLm91dHB1dF9wb2ludGVyKSk7XHJcbiAgICAgICAgY29uc3QgaW5jbHVkZWQ6IEFycmF5PFV0eG8+ID0gdXR4b3MuZmlsdGVyKHV0eG8gPT4ge1xyXG4gICAgICAgICAgICBpZiAodXR4by5zaWduZXIgPT09IHRoaXMucGtoKSB7XHJcbiAgICAgICAgICAgICAgICAvLyBhdm9pZCBhZGRpbmcgZHVwbGljYXRlc1xyXG4gICAgICAgICAgICAgICAgaWYgKCFleGlzdGluZ1BvaW50ZXJzLmhhcyh1dHhvLm91dHB1dF9wb2ludGVyKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGV4aXN0aW5nUG9pbnRlcnMuYWRkKHV0eG8ub3V0cHV0X3BvaW50ZXIpXHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWVcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBleGNsdWRlZC5wdXNoKHV0eG8pXHJcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KVxyXG4gICAgICAgIHRoaXMudXR4b3MucHVzaCguLi5pbmNsdWRlZClcclxuICAgICAgICByZXR1cm4geyBleGNsdWRlZCwgaW5jbHVkZWQgfVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBjb25zdW1lVXR4b3MoLi4udXR4b3M6IEFycmF5PFV0eG8+KTogQXJyYXk8VXR4bz4ge1xyXG4gICAgICAgIHRoaXMudXR4b3MgPSB0aGlzLnV0eG9zLmZpbHRlcihjYWNoZWQgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCBpbmNvbWluZ0luZGV4ID0gdXR4b3MuZmluZEluZGV4KGluY29taW5nID0+IGNhY2hlZC5vdXRwdXRfcG9pbnRlciA9PT0gaW5jb21pbmcub3V0cHV0X3BvaW50ZXIpO1xyXG4gICAgICAgICAgICBpZiAoaW5jb21pbmdJbmRleCA+PSAwKSB7XHJcbiAgICAgICAgICAgICAgICB1dHhvcy5zcGxpY2UoaW5jb21pbmdJbmRleCwgMSlcclxuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZVxyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWVcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pXHJcbiAgICAgICAgLy8gY29uc29sZS5sb2coXCJTaWduZXIuY29uc3VtZVV0eG9zOiByZW1haW5pbmc6XCIsIHV0eG9zKVxyXG4gICAgICAgIHJldHVybiB1dHhvc1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBhc3luYyBnZXRCYWxhbmNlKCk6IFByb21pc2U8QmFsYW5jZT4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnByb3ZpZGVyLmdldEJhbGFuY2UodGhpcy5wa2gpXHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGFzeW5jIGdldERlbGVnYXRlZXMob3JkZXI/OiBRdWVyeVN0YWtlc09yZGVyKTogUHJvbWlzZTxBcnJheTxTdGFrZUVudHJ5Pj4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnByb3ZpZGVyLnN0YWtlcyh7XHJcbiAgICAgICAgICAgIGZpbHRlcjogeyB3aXRoZHJhd2VyOiB0aGlzLnBraCB9LFxyXG4gICAgICAgICAgICBwYXJhbXM6IHsgb3JkZXIgfSxcclxuICAgICAgICB9KVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXRTaWduZXIocGtoPzogUHVibGljS2V5SGFzaFN0cmluZyk6IElTaWduZXIgfCB1bmRlZmluZWQgeyBcclxuICAgICAgICByZXR1cm4gKCFwa2ggfHwgcGtoID09PSB0aGlzLnBraCkgPyB0aGlzIDogdW5kZWZpbmVkXHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGFzeW5jIGdldFV0eG9zKHJlbG9hZCA9IGZhbHNlKTogUHJvbWlzZTxBcnJheTxVdHhvPj4ge1xyXG4gICAgICAgIGlmIChyZWxvYWQgfHwgIXRoaXMuX2luaXRpYWxpemVkKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX2luaXRpYWxpemVkID0gdHJ1ZVxyXG4gICAgICAgICAgICB0aGlzLnV0eG9zID0gKGF3YWl0IHRoaXMucHJvdmlkZXIuZ2V0VXR4b3ModGhpcy5wa2gpKVxyXG4gICAgICAgICAgICAgICAgLm1hcCh1dHhvID0+ICh7IC4uLnV0eG8sIHNpZ25lcjogdGhpcy5wa2ggfSkpXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0aGlzLnV0eG9zXHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGFzeW5jIHNlbGVjdFV0eG9zKHNwZWNzPzoge1xyXG4gICAgICAgIHZhbHVlPzogQ29pbnMsXHJcbiAgICAgICAgcmVsb2FkPzogYm9vbGVhbixcclxuICAgICAgICBzdHJhdGVneT86IFV0eG9TZWxlY3Rpb25TdHJhdGVneVxyXG4gICAgfSk6IFByb21pc2U8QXJyYXk8VXR4bz4+IHtcclxuICAgICAgICByZXR1cm4gdGhpc1xyXG4gICAgICAgICAgICAuZ2V0VXR4b3Moc3BlY3M/LnJlbG9hZClcclxuICAgICAgICAgICAgLnRoZW4odXR4b3MgPT4gc2VsZWN0VXR4b3MoeyB1dHhvcywgdmFsdWU6IHNwZWNzPy52YWx1ZSwgc3RyYXRlZ3k6IHNwZWNzPy5zdHJhdGVneSB8fCB0aGlzLnN0cmF0ZWd5IH0pKVxyXG4gICAgfVxyXG4gICAgXHJcbiAgICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XHJcbiAgICAvLyAtLS0gSVNpZ25lciAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgcHVibGljIGF1dGhvcml6ZUV2bUFkZHJlc3MoZXZtQWRkcmVzczogSGV4U3RyaW5nKTogYW55IHtcclxuICAgICAgICBjb25zdCBhZGRyID0gdXRpbHMuZnJvbUhleFN0cmluZyhldm1BZGRyZXNzKVxyXG4gICAgICAgIC8vIGNvbnNvbGUubG9nKFwiYWRkciA9PlwiLCBhZGRyKVxyXG4gICAgICAgIGNvbnN0IGhhc2ggPSBrZWNjYWsyNTYoQnVmZmVyLmZyb20oYWRkcikpXHJcbiAgICAgICAgLy8gY29uc29sZS5sb2coXCJoYXNoID0+XCIsIHV0aWxzLnRvSGV4U3RyaW5nKGhhc2gsIHRydWUpKVxyXG5cclxuICAgICAgICBpZiAodGhpcy5ub2RlLnByaXZhdGVLZXkpIHtcclxuICAgICAgICAgICAgY29uc3Qgc2lnbmluZ0tleSA9IG5ldyBldGhlcnMuU2lnbmluZ0tleSh0aGlzLm5vZGUucHJpdmF0ZUtleSlcclxuICAgICAgICAgICAgY29uc3Qgc2lnbmF0dXJlID0gc2lnbmluZ0tleS5zaWduKGhhc2gpXHJcbiAgICAgICAgICAgIGNvbnN0IHNpZyA9IGAweCR7c2lnbmF0dXJlLnIuc2xpY2UoMil9JHtzaWduYXR1cmUucy5zbGljZSgyKX0ke3NpZ25hdHVyZS52LnRvU3RyaW5nKDE2KX1gXHJcbiAgICAgICAgICAgICAgICAvLyBjb25zdCBkZXIgPSBzZWNwMjU2azEuc2lnbmF0dXJlRXhwb3J0KHNpZ25hdHVyZSlcclxuICAgICAgICAgICAgLy8gY29uc3Qgc2lnbmF0dXJlID0gUmVjb3ZlcmFibGVTaWduYXR1cmUuZnJvbUtleWVkU2lnbmF0dXJlKFxyXG4gICAgICAgICAgICAvLyAgICAgdGhpcy5zaWduSGFzaChoYXNoKSxcclxuICAgICAgICAgICAgLy8gICAgIGhhc2hcclxuICAgICAgICAgICAgLy8gKTtcclxuXHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKFwicHViS2V5MSA9PlwiLCBzaWduaW5nS2V5LnB1YmxpY0tleSlcclxuICAgICAgICAgICAgY29uc29sZS5sb2coXCJwdWJLZXkyID0+XCIsIHV0aWxzLnRvSGV4U3RyaW5nKHRoaXMubm9kZS5wdWJsaWNLZXksIHRydWUpKVxyXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhcInB1YktleUhhc2ggPT5cIiwgdGhpcy5wdWJsaWNLZXkuaGFzaCgpLnRvSGV4U3RyaW5nKCkpXHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKFwic2lnID0+XCIsIHNpZywgXCJcXG5cIilcclxuICAgICAgICAgICAgLy8gY29uc29sZS5sb2coXCJzaWduYXR1cmUgPT5cIiwgc2lnbmF0dXJlLnRvU3RyaW5nKCkpXHJcbiAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKFwiZGVyID0+XCIsIGRlcilcclxuICAgICAgICAgICAgcmV0dXJuIHNpZ1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIFxyXG4gICAgcHVibGljIGFzeW5jIGdldFN0YWtlRW50cnlOb25jZSh2YWxpZGF0b3I6IFB1YmxpY0tleUhhc2hTdHJpbmcpOiBQcm9taXNlPG51bWJlcj4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnByb3ZpZGVyXHJcbiAgICAgICAgICAgIC5zdGFrZXMoeyBmaWx0ZXI6IHtcclxuICAgICAgICAgICAgICAgIHZhbGlkYXRvcixcclxuICAgICAgICAgICAgICAgIHdpdGhkcmF3ZXI6IHRoaXMucGtoXHJcbiAgICAgICAgICAgIH19KS50aGVuKChbZW50cnldKSA9PiBlbnRyeS52YWx1ZS5ub25jZSlcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgc2lnbkhhc2goaGFzaDogYW55KTogS2V5ZWRTaWduYXR1cmUge1xyXG4gICAgICAgIGxldCBidWZmZXI6IEJ1ZmZlcjtcclxuICAgICAgICBpZiAoaGFzaCBpbnN0YW5jZW9mIFVpbnQ4QXJyYXkpIHtcclxuICAgICAgICAgICAgYnVmZmVyID0gQnVmZmVyLmZyb20oaGFzaClcclxuICAgICAgICB9IGVsc2UgaWYgKGhhc2ggaW5zdGFuY2VvZiBCdWZmZXIpIHtcclxuICAgICAgICAgICAgYnVmZmVyID0gaGFzaFxyXG4gICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIGhhc2ggPT09ICdzdHJpbmcnKSB7XHJcbiAgICAgICAgICAgIGJ1ZmZlciA9IEJ1ZmZlci5mcm9tKHV0aWxzLmZyb21IZXhTdHJpbmcoaGFzaCkpICAgICAgICAgICBcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYCR7dGhpcy5jb25zdHJ1Y3Rvci5uYW1lfTogdW5zdXBwb3J0ZWQgaGFzaCB2YWx1ZTogJHtoYXNofWApXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghYnVmZmVyIHx8IGJ1ZmZlci5sZW5ndGggIT09IDMyKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgJHt0aGlzLmNvbnN0cnVjdG9yLm5hbWV9OiBpbnZhbGlkIGhhc2ggbGVuZ3RoOiAke2J1ZmZlci5sZW5ndGh9ICE9IDMyYClcclxuICAgICAgICB9IGVsc2UgaWYgKHRoaXMubm9kZS5wcml2YXRlS2V5KSB7XHJcbiAgICAgICAgICAgIGNvbnN0IG1zZyA9IFVpbnQ4QXJyYXkuZnJvbShidWZmZXIpXHJcbiAgICAgICAgICAgIGNvbnN0IHByaXZhdGVLZXkgPSBVaW50OEFycmF5LmZyb20oQnVmZmVyLmZyb20odGhpcy5ub2RlLnByaXZhdGVLZXkpKVxyXG4gICAgICAgICAgICBjb25zdCBzaWduYXR1cmUgPSBzZWNwMjU2azEuZWNkc2FTaWduKG1zZywgcHJpdmF0ZUtleSkuc2lnbmF0dXJlXHJcbiAgICAgICAgICAgIGNvbnN0IGRlciA9IHNlY3AyNTZrMS5zaWduYXR1cmVFeHBvcnQoc2lnbmF0dXJlKVxyXG4gICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgcHVibGljX2tleToge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbXByZXNzZWQ6IHRoaXMucHVibGljS2V5LmNvbXByZXNzZWQsXHJcbiAgICAgICAgICAgICAgICAgICAgYnl0ZXM6IEFycmF5LmZyb20odGhpcy5wdWJsaWNLZXkuYnl0ZXMpLFxyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIHNpZ25hdHVyZToge1xyXG4gICAgICAgICAgICAgICAgICAgIFNlY3AyNTZrMToge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBkZXI6IEFycmF5LmZyb20oZGVyKSxcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aHJvdyBFcnJvcihgU2lnbmVyOiBpbnZhbGlkIEJJUDMyIG5vZGU6IG5vIHByaXZhdGUga2V5YClcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHNpZ25NZXNzYWdlKHRleHQ6IHN0cmluZyk6IHtcclxuICAgICAgICBhZGRyZXNzOiBzdHJpbmcsXHJcbiAgICAgICAgbWVzc2FnZTogc3RyaW5nLFxyXG4gICAgICAgIHB1YmxpY0tleTogSGV4U3RyaW5nLFxyXG4gICAgICAgIHNpZ25hdHVyZTogSGV4U3RyaW5nXHJcbiAgICB9IHtcclxuICAgICAgICBjb25zdCBkaWdlc3QgPSB1dGlscy5kaWdlc3RNZXNzYWdlKHRleHQpXHJcbiAgICAgICAgY29uc3Qga2V5ZWRTaWduYXR1cmUgPSB0aGlzLnNpZ25IYXNoKGRpZ2VzdClcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICBhZGRyZXNzOiB0aGlzLnBraCxcclxuICAgICAgICAgICAgbWVzc2FnZTogdGV4dCxcclxuICAgICAgICAgICAgcHVibGljS2V5OiBQdWJsaWNLZXkuZnJvbVByb3RvYnVmKGtleWVkU2lnbmF0dXJlLnB1YmxpY19rZXkpLnRvSGV4U3RyaW5nKCksXHJcbiAgICAgICAgICAgIHNpZ25hdHVyZTogUmVjb3ZlcmFibGVTaWduYXR1cmUuZnJvbUtleWVkU2lnbmF0dXJlKGtleWVkU2lnbmF0dXJlLCBkaWdlc3QpLnRvSGV4U3RyaW5nKCksXHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59Il19
|