@witnet/sdk 1.1.3 → 1.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.env_witnet +13 -1
- package/dist/package.json +31 -24
- package/dist/src/bin/helpers.d.ts +59 -49
- package/dist/src/bin/helpers.d.ts.map +1 -1
- package/dist/src/bin/helpers.js +228 -229
- package/dist/src/index.d.ts +3 -4
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +4 -47
- package/dist/src/lib/crypto/account.d.ts +3 -3
- package/dist/src/lib/crypto/account.d.ts.map +1 -1
- package/dist/src/lib/crypto/account.js +31 -25
- package/dist/src/lib/crypto/coinbase.d.ts +4 -4
- package/dist/src/lib/crypto/coinbase.d.ts.map +1 -1
- package/dist/src/lib/crypto/coinbase.js +8 -13
- package/dist/src/lib/crypto/index.d.ts +7 -7
- package/dist/src/lib/crypto/index.d.ts.map +1 -1
- package/dist/src/lib/crypto/index.js +7 -30
- package/dist/src/lib/crypto/interfaces.d.ts +5 -5
- package/dist/src/lib/crypto/interfaces.d.ts.map +1 -1
- package/dist/src/lib/crypto/interfaces.js +2 -3
- package/dist/src/lib/crypto/payloads/DataRequestPayload.d.ts +5 -5
- package/dist/src/lib/crypto/payloads/DataRequestPayload.d.ts.map +1 -1
- package/dist/src/lib/crypto/payloads/DataRequestPayload.js +107 -95
- package/dist/src/lib/crypto/payloads/StakePayload.d.ts +3 -4
- package/dist/src/lib/crypto/payloads/StakePayload.d.ts.map +1 -1
- package/dist/src/lib/crypto/payloads/StakePayload.js +81 -71
- package/dist/src/lib/crypto/payloads/UnstakePayload.d.ts +4 -5
- package/dist/src/lib/crypto/payloads/UnstakePayload.d.ts.map +1 -1
- package/dist/src/lib/crypto/payloads/UnstakePayload.js +36 -43
- package/dist/src/lib/crypto/payloads/ValueTransferPayload.d.ts +3 -4
- package/dist/src/lib/crypto/payloads/ValueTransferPayload.d.ts.map +1 -1
- package/dist/src/lib/crypto/payloads/ValueTransferPayload.js +46 -48
- package/dist/src/lib/crypto/payloads.d.ts +5 -5
- package/dist/src/lib/crypto/payloads.d.ts.map +1 -1
- package/dist/src/lib/crypto/payloads.js +44 -45
- package/dist/src/lib/crypto/signer.d.ts +3 -3
- package/dist/src/lib/crypto/signer.d.ts.map +1 -1
- package/dist/src/lib/crypto/signer.js +45 -88
- package/dist/src/lib/crypto/transmitters/DataRequests.d.ts +6 -6
- package/dist/src/lib/crypto/transmitters/DataRequests.d.ts.map +1 -1
- package/dist/src/lib/crypto/transmitters/DataRequests.js +6 -10
- package/dist/src/lib/crypto/transmitters/StakeDeposits.d.ts +5 -5
- package/dist/src/lib/crypto/transmitters/StakeDeposits.d.ts.map +1 -1
- package/dist/src/lib/crypto/transmitters/StakeDeposits.js +7 -11
- package/dist/src/lib/crypto/transmitters/StakeWithdrawals.d.ts +6 -7
- package/dist/src/lib/crypto/transmitters/StakeWithdrawals.d.ts.map +1 -1
- package/dist/src/lib/crypto/transmitters/StakeWithdrawals.js +9 -13
- package/dist/src/lib/crypto/transmitters/ValueTransfers.d.ts +5 -5
- package/dist/src/lib/crypto/transmitters/ValueTransfers.d.ts.map +1 -1
- package/dist/src/lib/crypto/transmitters/ValueTransfers.js +6 -10
- package/dist/src/lib/crypto/transmitters.d.ts +6 -6
- package/dist/src/lib/crypto/transmitters.d.ts.map +1 -1
- package/dist/src/lib/crypto/transmitters.js +88 -76
- package/dist/src/lib/crypto/types.d.ts +1 -2
- package/dist/src/lib/crypto/types.d.ts.map +1 -1
- package/dist/src/lib/crypto/types.js +71 -67
- package/dist/src/lib/crypto/utils.d.ts +5 -5
- package/dist/src/lib/crypto/utils.d.ts.map +1 -1
- package/dist/src/lib/crypto/utils.js +48 -66
- package/dist/src/lib/crypto/wallet.d.ts +3 -3
- package/dist/src/lib/crypto/wallet.d.ts.map +1 -1
- package/dist/src/lib/crypto/wallet.js +72 -89
- package/dist/src/lib/index.d.ts +5 -4
- package/dist/src/lib/index.d.ts.map +1 -1
- package/dist/src/lib/index.js +6 -44
- package/dist/src/lib/radon/ccdr/eth.d.ts +1 -1
- package/dist/src/lib/radon/ccdr/eth.d.ts.map +1 -1
- package/dist/src/lib/radon/ccdr/eth.js +95 -83
- package/dist/src/lib/radon/ccdr/index.d.ts +2 -2
- package/dist/src/lib/radon/ccdr/index.d.ts.map +1 -1
- package/dist/src/lib/radon/ccdr/index.js +3 -39
- package/dist/src/lib/radon/ccdr/wit.d.ts +2 -2
- package/dist/src/lib/radon/ccdr/wit.d.ts.map +1 -1
- package/dist/src/lib/radon/ccdr/wit.js +17 -19
- package/dist/src/lib/radon/filters.d.ts.map +1 -1
- package/dist/src/lib/radon/filters.js +23 -19
- package/dist/src/lib/radon/index.d.ts +10 -11
- package/dist/src/lib/radon/index.d.ts.map +1 -1
- package/dist/src/lib/radon/index.js +205 -187
- package/dist/src/lib/radon/reducers.d.ts +2 -2
- package/dist/src/lib/radon/reducers.d.ts.map +1 -1
- package/dist/src/lib/radon/reducers.js +48 -34
- package/dist/src/lib/radon/types.d.ts +2 -2
- package/dist/src/lib/radon/types.d.ts.map +1 -1
- package/dist/src/lib/radon/types.js +80 -110
- package/dist/src/lib/radon/utils.d.ts +3 -3
- package/dist/src/lib/radon/utils.d.ts.map +1 -1
- package/dist/src/lib/radon/utils.js +49 -52
- package/dist/src/lib/rest/kermit.d.ts +20 -0
- package/dist/src/lib/rest/kermit.d.ts.map +1 -0
- package/dist/src/lib/rest/kermit.js +68 -0
- package/dist/src/lib/rest/types.d.ts +5 -0
- package/dist/src/lib/rest/types.d.ts.map +1 -0
- package/dist/src/lib/rest/types.js +2 -0
- package/dist/src/lib/rpc/index.d.ts +2 -2
- package/dist/src/lib/rpc/index.d.ts.map +1 -1
- package/dist/src/lib/rpc/index.js +3 -19
- package/dist/src/lib/rpc/nodes.d.ts +13 -13
- package/dist/src/lib/rpc/nodes.d.ts.map +1 -1
- package/dist/src/lib/rpc/nodes.js +69 -98
- package/dist/src/lib/rpc/provider.d.ts +4 -4
- package/dist/src/lib/rpc/provider.d.ts.map +1 -1
- package/dist/src/lib/rpc/provider.js +111 -125
- package/dist/src/lib/rpc/types.d.ts +2 -2
- package/dist/src/lib/rpc/types.d.ts.map +1 -1
- package/dist/src/lib/rpc/types.js +13 -16
- package/dist/src/lib/types.d.ts +5 -4
- package/dist/src/lib/types.d.ts.map +1 -1
- package/dist/src/lib/types.js +3 -9
- package/dist/src/lib/utils.d.ts +5 -5
- package/dist/src/lib/utils.d.ts.map +1 -1
- package/dist/src/lib/utils.js +40 -99
- package/dist/witnet/assets/index.cjs +6 -0
- package/dist/witnet/assets/index.d.cts +29 -0
- package/dist/witnet/assets/index.d.cts.map +1 -0
- package/dist/witnet/assets/modals/index.cjs +9 -0
- package/dist/witnet/assets/modals/index.d.cts +16 -0
- package/dist/witnet/assets/modals/index.d.cts.map +1 -0
- package/dist/witnet/assets/modals/web3/eth.cjs +23 -0
- package/dist/witnet/assets/modals/web3/eth.d.cts +4 -0
- package/dist/witnet/assets/modals/web3/eth.d.cts.map +1 -0
- package/dist/witnet/assets/modals/web3/ipfs.cjs +18 -0
- package/dist/witnet/assets/modals/web3/ipfs.d.cts +3 -0
- package/dist/witnet/assets/modals/web3/ipfs.d.cts.map +1 -0
- package/dist/witnet/assets/modals/web3/wit.cjs +24 -0
- package/dist/witnet/assets/modals/web3/wit.d.cts +3 -0
- package/dist/witnet/assets/modals/web3/wit.d.cts.map +1 -0
- package/dist/witnet/assets/requests.cjs +43 -0
- package/dist/witnet/assets/requests.d.cts +10 -0
- package/dist/witnet/assets/requests.d.cts.map +1 -0
- package/package.json +31 -24
- package/src/bin/bots/watcher.cjs +354 -0
- package/src/bin/cli/history.cjs +31 -0
- package/src/bin/cli/inspect.js +545 -471
- package/src/bin/cli/network.js +658 -557
- package/src/bin/cli/nodes.js +392 -332
- package/src/bin/cli/radon.js +1071 -844
- package/src/bin/cli/wallet.js +1317 -1074
- package/src/bin/helpers.js +969 -868
- package/src/bin/index.js +329 -0
- package/witnet/assets/_index.cjs +5 -0
- package/witnet/assets/_requests.cjs +25 -0
- package/witnet/assets/_sources.cjs +36 -0
- package/witnet/assets/_templates.cjs +36 -0
- package/witnet/assets/index.cjs +4 -0
- package/witnet/assets/modals/index.cjs +7 -0
- package/witnet/assets/modals/web3/eth.cjs +27 -0
- package/witnet/assets/modals/web3/ipfs.cjs +22 -0
- package/witnet/assets/modals/web3/wit.cjs +28 -0
- package/witnet/assets/requests.cjs +49 -0
- package/witnet/witnet copy.proto +457 -0
- package/witnet/witnet.proto +456 -0
- package/witnet/witnet_toolkit-1.6.7-x86_64-pc-windows-msvc.exe +0 -0
- package/witnet/witnet_toolkit-1.7.1-x86_64-pc-windows-msvc.exe +0 -0
- package/witnet/witnet_toolkit-2.0.0-rc.7-x86_64-pc-windows-msvc.exe +0 -0
- package/witnet/witnet_toolkit-2.0.2-x86_64-pc-windows-msvc.exe +0 -0
- package/witnet/witnet_toolkit-2.0.21-x86_64-pc-windows-msvc.exe +0 -0
- package/witnet/witnet_toolkit-2.0.7-x86_64-pc-windows-msvc.exe +0 -0
- package/witnet/witnet_toolkit-2.0.8-x86_64-pc-windows-msvc.exe +0 -0
- package/dist/witnet/assets/index.d.ts +0 -29
- package/dist/witnet/assets/index.d.ts.map +0 -1
- package/dist/witnet/assets/index.js +0 -6
- package/dist/witnet/assets/modals/index.d.ts +0 -16
- package/dist/witnet/assets/modals/index.d.ts.map +0 -1
- package/dist/witnet/assets/modals/index.js +0 -11
- package/dist/witnet/assets/modals/web3/eth.d.ts +0 -5
- package/dist/witnet/assets/modals/web3/eth.d.ts.map +0 -1
- package/dist/witnet/assets/modals/web3/eth.js +0 -26
- package/dist/witnet/assets/modals/web3/ipfs.d.ts +0 -4
- package/dist/witnet/assets/modals/web3/ipfs.d.ts.map +0 -1
- package/dist/witnet/assets/modals/web3/ipfs.js +0 -18
- package/dist/witnet/assets/modals/web3/wit.d.ts +0 -4
- package/dist/witnet/assets/modals/web3/wit.d.ts.map +0 -1
- package/dist/witnet/assets/modals/web3/wit.js +0 -17
- package/dist/witnet/assets/requests.d.ts +0 -11
- package/dist/witnet/assets/requests.d.ts.map +0 -1
- package/dist/witnet/assets/requests.js +0 -43
- package/src/bin/cli/history.js +0 -31
- package/src/bin/postinstall.js +0 -9
- package/src/bin/toolkit.js +0 -290
- package/witnet/assets/_index.js +0 -8
- package/witnet/assets/_requests.js +0 -25
- package/witnet/assets/_sources.js +0 -36
- package/witnet/assets/_templates.js +0 -36
- package/witnet/assets/index.js +0 -4
- package/witnet/assets/modals/index.js +0 -9
- package/witnet/assets/modals/web3/eth.js +0 -29
- package/witnet/assets/modals/web3/ipfs.js +0 -22
- package/witnet/assets/modals/web3/wit.js +0 -21
- package/witnet/assets/requests.js +0 -49
- /package/witnet/assets/modals/web3/{btc.js → btc.cjs} +0 -0
- /package/witnet/assets/modals/web3/{sol.js → sol.cjs} +0 -0
|
@@ -1,14 +1,14 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
const
|
|
6
|
-
const protoRoot =
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
1
|
+
import { createRequire } from "node:module";
|
|
2
|
+
import Long from "long";
|
|
3
|
+
const require = createRequire(import.meta.url);
|
|
4
|
+
import protobuf from "protobufjs";
|
|
5
|
+
const { Root: ProtoRoot } = protobuf;
|
|
6
|
+
const protoRoot = ProtoRoot.fromJSON(require("../../../../witnet/witnet.proto.json"));
|
|
7
|
+
import { fromHexString, toHexString } from "../../../bin/helpers.js";
|
|
8
|
+
import { RadonRequest, RadonTemplate } from "../../radon/index.js";
|
|
9
|
+
import { TransactionPayloadMultiSig } from "../payloads.js";
|
|
10
|
+
import { Coins, PublicKeyHash, TransactionPriority, } from "../types.js";
|
|
11
|
+
import { BigMath, sha256 } from "../utils.js";
|
|
12
12
|
const COLLATERAL_RATIO = 100n;
|
|
13
13
|
// const RADON_ERROR_MAX_BYTES = 9;
|
|
14
14
|
const DR_COMMIT_TX_WEIGHT = 400;
|
|
@@ -18,13 +18,19 @@ const DR_TX_WEIGHT_ALPHA = 1;
|
|
|
18
18
|
const DR_TX_WEIGHT_BETA = 1;
|
|
19
19
|
const TX_WEIGHT_INPUT_SIZE = 133;
|
|
20
20
|
const TX_WEIGHT_OUTPUT_SIZE = 36;
|
|
21
|
-
class DataRequestPayload extends
|
|
21
|
+
export class DataRequestPayload extends TransactionPayloadMultiSig {
|
|
22
|
+
static DEFAULT_MAX_RESULT_SIZE = 256;
|
|
23
|
+
static DEFAULT_WITNESSES = 12;
|
|
24
|
+
static MAX_WEIGHT = 80_000;
|
|
25
|
+
static MIN_COLLATERAL = 20000000000n;
|
|
26
|
+
_request;
|
|
27
|
+
template;
|
|
22
28
|
constructor(protoTypeName, radon, initialTarget) {
|
|
23
29
|
super(protoTypeName, initialTarget);
|
|
24
|
-
if (radon instanceof
|
|
30
|
+
if (radon instanceof RadonRequest) {
|
|
25
31
|
this._request = radon;
|
|
26
32
|
}
|
|
27
|
-
else if (radon instanceof
|
|
33
|
+
else if (radon instanceof RadonTemplate) {
|
|
28
34
|
this.template = radon;
|
|
29
35
|
}
|
|
30
36
|
else {
|
|
@@ -45,7 +51,7 @@ class DataRequestPayload extends payloads_1.TransactionPayloadMultiSig {
|
|
|
45
51
|
// console.log("\ndroHash.message =>", JSON.stringify(message))
|
|
46
52
|
const bytecode = DataRequestOutput.encode(message).finish();
|
|
47
53
|
// console.log("\ndroHash.bytecode =>", bytecode)
|
|
48
|
-
return
|
|
54
|
+
return toHexString(sha256(bytecode));
|
|
49
55
|
}
|
|
50
56
|
}
|
|
51
57
|
else {
|
|
@@ -55,9 +61,9 @@ class DataRequestPayload extends payloads_1.TransactionPayloadMultiSig {
|
|
|
55
61
|
get droSLA() {
|
|
56
62
|
if (this._target && this._fees) {
|
|
57
63
|
const minConsensusPercentage = this._target.majorityType === "qualified" ? 66 : 51;
|
|
58
|
-
const witnesses =
|
|
64
|
+
const witnesses = typeof this._target.witnesses === "object"
|
|
59
65
|
? Object.keys(this._target.witnesses).length
|
|
60
|
-
: this._target.witnesses || 0
|
|
66
|
+
: this._target.witnesses || 0;
|
|
61
67
|
const witnessReward = this._fees2UnitaryReward(this._fees, witnesses);
|
|
62
68
|
const commitAndRevealFee = this._fees2UnitaryCommitRevealReward(this._fees, witnesses); //Math.floor(Number(witnessReward / BigInt(witnesses))) // TODO: zerofy if protocol >= V2_1
|
|
63
69
|
const collateral = witnessReward * COLLATERAL_RATIO; // TODO: zerofy if protocol >= V2_1
|
|
@@ -111,10 +117,7 @@ class DataRequestPayload extends payloads_1.TransactionPayloadMultiSig {
|
|
|
111
117
|
get hash() {
|
|
112
118
|
const _bytecode = this.bytecode;
|
|
113
119
|
if (_bytecode && this.droHash) {
|
|
114
|
-
return
|
|
115
|
-
(0, helpers_1.fromHexString)(this.droHash),
|
|
116
|
-
(0, utils_1.sha256)(_bytecode),
|
|
117
|
-
])));
|
|
120
|
+
return toHexString(sha256(Buffer.concat([fromHexString(this.droHash), sha256(_bytecode)])));
|
|
118
121
|
}
|
|
119
122
|
else {
|
|
120
123
|
return undefined;
|
|
@@ -127,10 +130,10 @@ class DataRequestPayload extends payloads_1.TransactionPayloadMultiSig {
|
|
|
127
130
|
return !!this.template;
|
|
128
131
|
}
|
|
129
132
|
get prepared() {
|
|
130
|
-
return (this.covered
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
133
|
+
return (this.covered &&
|
|
134
|
+
this._inputs.length > 0 &&
|
|
135
|
+
!!this._request &&
|
|
136
|
+
!!this._target);
|
|
134
137
|
}
|
|
135
138
|
get radArgs() {
|
|
136
139
|
return this.template ? this._target?.args : undefined;
|
|
@@ -143,23 +146,26 @@ class DataRequestPayload extends payloads_1.TransactionPayloadMultiSig {
|
|
|
143
146
|
}
|
|
144
147
|
get value() {
|
|
145
148
|
if (this._target && this._fees) {
|
|
146
|
-
return
|
|
149
|
+
return Coins.fromPedros(this._fees2Value(this._fees, this._target.witnesses || 0));
|
|
147
150
|
}
|
|
148
151
|
else {
|
|
149
|
-
return
|
|
152
|
+
return Coins.zero();
|
|
150
153
|
}
|
|
151
154
|
}
|
|
152
155
|
get weight() {
|
|
153
156
|
if (this._request && this._target) {
|
|
154
|
-
const witnesses = typeof this._target.witnesses ===
|
|
157
|
+
const witnesses = typeof this._target.witnesses === "object"
|
|
158
|
+
? Object.keys(this._target.witnesses).length
|
|
159
|
+
: this._target.witnesses || 0;
|
|
155
160
|
return (DR_TX_WEIGHT_ALPHA * (this._request.weight() + 8 + 2 + 8 + 4 + 8),
|
|
156
|
-
+this._inputs.length * TX_WEIGHT_INPUT_SIZE
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
+
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
161
|
+
+this._inputs.length * TX_WEIGHT_INPUT_SIZE +
|
|
162
|
+
this._outputs.length * TX_WEIGHT_OUTPUT_SIZE +
|
|
163
|
+
witnesses *
|
|
164
|
+
(DR_COMMIT_TX_WEIGHT +
|
|
165
|
+
DR_REVEAL_TX_WEIGHT * DR_TX_WEIGHT_BETA +
|
|
166
|
+
TX_WEIGHT_OUTPUT_SIZE) + // TODO V2.1: typeof this._target.witnesses === 'object' ? TX_WEIGHT_OUTPUT_SIZE : 0
|
|
167
|
+
Math.max(DR_TALLY_TX_WEIGHT, this._target?.maxResultSize || 0) *
|
|
168
|
+
DR_TX_WEIGHT_BETA);
|
|
163
169
|
}
|
|
164
170
|
else {
|
|
165
171
|
return 0;
|
|
@@ -169,7 +175,7 @@ class DataRequestPayload extends payloads_1.TransactionPayloadMultiSig {
|
|
|
169
175
|
if (!this._target) {
|
|
170
176
|
throw new Error(`${this.constructor.name}: internal error: no in-flight params.`);
|
|
171
177
|
}
|
|
172
|
-
else if (this._target?.fees instanceof
|
|
178
|
+
else if (this._target?.fees instanceof Coins) {
|
|
173
179
|
this._fees = this._target.fees.pedros;
|
|
174
180
|
return super.consumeUtxos(ledger, reload);
|
|
175
181
|
}
|
|
@@ -182,29 +188,35 @@ class DataRequestPayload extends payloads_1.TransactionPayloadMultiSig {
|
|
|
182
188
|
}
|
|
183
189
|
else if (this.weight > DataRequestPayload.MAX_WEIGHT * 0.8) {
|
|
184
190
|
const delta = this.weight - DataRequestPayload.MAX_WEIGHT * 0.8;
|
|
185
|
-
this._target.witnesses -= Math.ceil(delta /
|
|
191
|
+
this._target.witnesses -= Math.ceil(delta /
|
|
192
|
+
(DR_COMMIT_TX_WEIGHT +
|
|
193
|
+
DR_REVEAL_TX_WEIGHT * TX_WEIGHT_OUTPUT_SIZE));
|
|
186
194
|
if (this._target.witnesses < 3) {
|
|
187
195
|
delete this._target.witnesses;
|
|
188
196
|
throw new Error(`${this.constructor.name}: cannot estimate witnesses: radon request too heavy: ${this.weight} weight units`);
|
|
189
197
|
}
|
|
190
198
|
}
|
|
191
199
|
}
|
|
192
|
-
const priority = this._target?.fees ||
|
|
200
|
+
const priority = this._target?.fees ||
|
|
201
|
+
TransactionPriority.Opulent;
|
|
193
202
|
let estimatedFees = await this._estimateNetworkFees(ledger.provider, priority);
|
|
194
203
|
while (this._fees < estimatedFees && this._change >= 0) {
|
|
195
204
|
this._fees = estimatedFees;
|
|
196
205
|
this._outputs = [];
|
|
197
|
-
|
|
198
|
-
this._covered = 0n;
|
|
199
|
-
// consume utxos as to cover for estimated value and estimated fees
|
|
206
|
+
// consume utxos as to cover for estimated value and estimated fees
|
|
200
207
|
const value = this._fees2Value(this._fees, this._target.witnesses);
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
+
if (this._covered < this.value.pedros + this._fees) {
|
|
209
|
+
const utxos = await ledger.selectUtxos({
|
|
210
|
+
value: Coins.fromPedros(value + this._fees - this._covered),
|
|
211
|
+
reload,
|
|
212
|
+
});
|
|
213
|
+
const extra = utxos
|
|
214
|
+
.map((utxo) => BigInt(utxo.value))
|
|
215
|
+
.reduce((prev, curr) => prev + curr, 0n);
|
|
216
|
+
this._covered += extra;
|
|
217
|
+
this._inputs.push(...utxos);
|
|
218
|
+
ledger.consumeUtxos(...utxos);
|
|
219
|
+
}
|
|
208
220
|
this._change = this._covered - (value + this._fees);
|
|
209
221
|
if (this._change >= 0) {
|
|
210
222
|
this.prepareOutputs({ value: this._change });
|
|
@@ -238,7 +250,8 @@ class DataRequestPayload extends payloads_1.TransactionPayloadMultiSig {
|
|
|
238
250
|
this._inputs = [];
|
|
239
251
|
this._outputs = [];
|
|
240
252
|
this._target = target;
|
|
241
|
-
if (this.droSLA?.collateral &&
|
|
253
|
+
if (this.droSLA?.collateral &&
|
|
254
|
+
this.droSLA.collateral < DataRequestPayload.MIN_COLLATERAL) {
|
|
242
255
|
throw new TypeError(`${this.constructor.name}: witnessing collateral below minimum: ${this.droSLA.collateral} < ${DataRequestPayload.MIN_COLLATERAL}`);
|
|
243
256
|
}
|
|
244
257
|
if (this.template) {
|
|
@@ -246,7 +259,7 @@ class DataRequestPayload extends payloads_1.TransactionPayloadMultiSig {
|
|
|
246
259
|
if (args === undefined) {
|
|
247
260
|
throw new TypeError(`${this.constructor.name}: no template args were passed.`);
|
|
248
261
|
}
|
|
249
|
-
else if (typeof args ===
|
|
262
|
+
else if (typeof args === "string") {
|
|
250
263
|
this._request = this.template.buildRadonRequest([args]);
|
|
251
264
|
}
|
|
252
265
|
else {
|
|
@@ -258,39 +271,45 @@ class DataRequestPayload extends payloads_1.TransactionPayloadMultiSig {
|
|
|
258
271
|
toJSON(humanize = false) {
|
|
259
272
|
const droSLA = this.droSLA;
|
|
260
273
|
return {
|
|
261
|
-
inputs: this.inputs
|
|
262
|
-
|
|
263
|
-
|
|
274
|
+
inputs: this.inputs.map((utxo) => ({
|
|
275
|
+
output_pointer: utxo.output_pointer,
|
|
276
|
+
})),
|
|
277
|
+
outputs: this.outputs.map((vto) => ({
|
|
264
278
|
pkh: vto.pkh,
|
|
265
279
|
time_lock: vto.time_lock,
|
|
266
280
|
value: vto.value.toString(),
|
|
267
281
|
})),
|
|
268
282
|
dr_output: {
|
|
269
|
-
...(this._request
|
|
283
|
+
...(this._request
|
|
284
|
+
? { data_request: this._request.toJSON(humanize) }
|
|
285
|
+
: {}),
|
|
270
286
|
commit_and_reveal_fee: droSLA?.commitAndRevealFee,
|
|
271
287
|
min_consensus_percentage: droSLA?.minConsensusPercentage,
|
|
272
288
|
witnesses: droSLA?.witnesses,
|
|
273
289
|
witness_reward: droSLA?.witnessReward,
|
|
274
|
-
collateral: droSLA?.collateral
|
|
275
|
-
}
|
|
290
|
+
collateral: droSLA?.collateral,
|
|
291
|
+
},
|
|
276
292
|
};
|
|
277
293
|
}
|
|
278
294
|
toProtobuf() {
|
|
279
295
|
if (this.prepared && this._target && this._request) {
|
|
280
296
|
return {
|
|
281
|
-
inputs: this.inputs
|
|
282
|
-
.
|
|
283
|
-
const
|
|
284
|
-
const outputIndex = parseInt(utxo.output_pointer.split(':')[1]);
|
|
297
|
+
inputs: this.inputs.map((utxo) => {
|
|
298
|
+
const transactionId = utxo.output_pointer.split(":")[0];
|
|
299
|
+
const outputIndex = parseInt(utxo.output_pointer.split(":")[1], 10);
|
|
285
300
|
return {
|
|
286
301
|
outputPointer: {
|
|
287
|
-
transactionId: {
|
|
302
|
+
transactionId: {
|
|
303
|
+
SHA256: Array.from(fromHexString(transactionId)),
|
|
304
|
+
},
|
|
288
305
|
...(outputIndex > 0 ? { outputIndex } : {}),
|
|
289
306
|
},
|
|
290
307
|
};
|
|
291
308
|
}),
|
|
292
|
-
outputs: this.outputs.map(vto => ({
|
|
293
|
-
pkh: {
|
|
309
|
+
outputs: this.outputs.map((vto) => ({
|
|
310
|
+
pkh: {
|
|
311
|
+
hash: Array.from(PublicKeyHash.fromBech32(vto.pkh).toBytes20()),
|
|
312
|
+
},
|
|
294
313
|
value: Long.fromValue(vto.value),
|
|
295
314
|
...(vto.time_lock > 0 ? { timeLock: vto.time_lock } : {}),
|
|
296
315
|
})),
|
|
@@ -301,19 +320,20 @@ class DataRequestPayload extends payloads_1.TransactionPayloadMultiSig {
|
|
|
301
320
|
validateTarget(target) {
|
|
302
321
|
target = this._cleanTargetExtras(target);
|
|
303
322
|
if (target && Object.keys(target).length > 0) {
|
|
304
|
-
if (!(target
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
323
|
+
if (!(target &&
|
|
324
|
+
(!target?.fees ||
|
|
325
|
+
(target.fees instanceof Coins &&
|
|
326
|
+
target.fees.pedros > 0) ||
|
|
327
|
+
Object.values(TransactionPriority).includes(target.fees)) &&
|
|
328
|
+
(target?.witnesses || target?.witnesses === undefined) &&
|
|
329
|
+
(!this.template || target?.args))) {
|
|
310
330
|
throw new TypeError(`${this.constructor.name}: invalid options: ${JSON.stringify(target)}`);
|
|
311
331
|
}
|
|
312
332
|
else if (target?.witnesses) {
|
|
313
|
-
if (typeof target.witnesses ===
|
|
333
|
+
if (typeof target.witnesses === "object") {
|
|
314
334
|
throw new TypeError(`${this.constructor.name}: explicit witnessing committees not yet supported: ${target.witnesses}`);
|
|
315
335
|
}
|
|
316
|
-
target.witnesses = parseInt(target.witnesses);
|
|
336
|
+
target.witnesses = parseInt(target.witnesses, 10);
|
|
317
337
|
}
|
|
318
338
|
return target;
|
|
319
339
|
}
|
|
@@ -323,44 +343,36 @@ class DataRequestPayload extends payloads_1.TransactionPayloadMultiSig {
|
|
|
323
343
|
}
|
|
324
344
|
_cleanTargetExtras(target) {
|
|
325
345
|
if (target) {
|
|
326
|
-
return Object.fromEntries(Object.entries(target).filter(([key
|
|
327
|
-
'args',
|
|
328
|
-
'fees',
|
|
329
|
-
'maxResultSize',
|
|
330
|
-
'witnesses',
|
|
331
|
-
].includes(key)));
|
|
346
|
+
return Object.fromEntries(Object.entries(target).filter(([key]) => ["args", "fees", "maxResultSize", "witnesses"].includes(key)));
|
|
332
347
|
}
|
|
333
348
|
}
|
|
334
|
-
async _estimateNetworkFees(provider, priority =
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
349
|
+
async _estimateNetworkFees(provider, priority = TransactionPriority.Medium) {
|
|
350
|
+
this._priorities = await provider.priorities();
|
|
351
|
+
return BigInt(Math.floor(this._priorities[`drt_${priority}`].priority *
|
|
352
|
+
(this.covered
|
|
353
|
+
? this.weight
|
|
354
|
+
: this.weight +
|
|
355
|
+
// estimate weight of one single output in case there was change to pay back
|
|
356
|
+
TX_WEIGHT_OUTPUT_SIZE)));
|
|
341
357
|
}
|
|
342
358
|
_fees2UnitaryCommitRevealReward(fees, witnesses) {
|
|
343
|
-
return
|
|
359
|
+
return fees / BigInt(witnesses) || 1n;
|
|
344
360
|
}
|
|
345
361
|
_fees2UnitaryReward(fees, _witnesses) {
|
|
346
|
-
return
|
|
362
|
+
return BigMath.max(fees, BigInt(Math.ceil(Number(DataRequestPayload.MIN_COLLATERAL / COLLATERAL_RATIO))));
|
|
347
363
|
}
|
|
348
364
|
_fees2Value(fees, witnesses) {
|
|
349
|
-
return (BigInt(witnesses) *
|
|
350
|
-
|
|
365
|
+
return (BigInt(witnesses) *
|
|
366
|
+
(this._fees2UnitaryReward(fees, witnesses) +
|
|
367
|
+
2n * this._fees2UnitaryCommitRevealReward(fees, witnesses)));
|
|
351
368
|
}
|
|
352
369
|
_toDrOutputProtobuf() {
|
|
353
370
|
if (this._request) {
|
|
354
371
|
return {
|
|
355
372
|
...this.droSLA,
|
|
356
|
-
dataRequest: this._request.toProtobuf()
|
|
373
|
+
dataRequest: this._request.toProtobuf(),
|
|
357
374
|
};
|
|
358
375
|
}
|
|
359
376
|
}
|
|
360
377
|
}
|
|
361
|
-
exports.DataRequestPayload = DataRequestPayload;
|
|
362
|
-
DataRequestPayload.DEFAULT_MAX_RESULT_SIZE = 256;
|
|
363
|
-
DataRequestPayload.DEFAULT_WITNESSES = 12;
|
|
364
|
-
DataRequestPayload.MAX_WEIGHT = 80000;
|
|
365
|
-
DataRequestPayload.MIN_COLLATERAL = 20000000000n;
|
|
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
|
|
378
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRGF0YVJlcXVlc3RQYXlsb2FkLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi9jcnlwdG8vcGF5bG9hZHMvRGF0YVJlcXVlc3RQYXlsb2FkLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDNUMsT0FBTyxJQUFJLE1BQU0sTUFBTSxDQUFDO0FBRXhCLE1BQU0sT0FBTyxHQUFHLGFBQWEsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBRS9DLE9BQU8sUUFBUSxNQUFNLFlBQVksQ0FBQztBQUVsQyxNQUFNLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxHQUFHLFFBQVEsQ0FBQztBQUNyQyxNQUFNLFNBQVMsR0FBRyxTQUFTLENBQUMsUUFBUSxDQUNuQyxPQUFPLENBQUMsc0NBQXNDLENBQUMsQ0FDL0MsQ0FBQztBQUVGLE9BQU8sRUFBRSxhQUFhLEVBQUUsV0FBVyxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFFckUsT0FBTyxFQUFFLFlBQVksRUFBRSxhQUFhLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUluRSxPQUFPLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM1RCxPQUFPLEVBQ04sS0FBSyxFQUNMLGFBQWEsRUFFYixtQkFBbUIsR0FDbkIsTUFBTSxhQUFhLENBQUM7QUFDckIsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFzQjlDLE1BQU0sZ0JBQWdCLEdBQUcsSUFBSSxDQUFDO0FBQzlCLG1DQUFtQztBQUVuQyxNQUFNLG1CQUFtQixHQUFHLEdBQUcsQ0FBQztBQUNoQyxNQUFNLG1CQUFtQixHQUFHLEdBQUcsQ0FBQztBQUNoQyxNQUFNLGtCQUFrQixHQUFHLEdBQUcsQ0FBQztBQUUvQixNQUFNLGtCQUFrQixHQUFHLENBQUMsQ0FBQztBQUM3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QyxDQUM1RCxDQUFDO0lBQ0gsQ0FBQztJQUVTLG1CQUFtQjtRQUM1QixJQUFJLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUNuQixPQUFPO2dCQUNOLEdBQUcsSUFBSSxDQUFDLE1BQU07Z0JBQ2QsV0FBVyxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsVUFBVSxFQUFFO2FBQ3ZDLENBQUM7UUFDSCxDQUFDO0lBQ0YsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGNyZWF0ZVJlcXVpcmUgfSBmcm9tIFwibm9kZTptb2R1bGVcIjtcclxuaW1wb3J0IExvbmcgZnJvbSBcImxvbmdcIjtcclxuXHJcbmNvbnN0IHJlcXVpcmUgPSBjcmVhdGVSZXF1aXJlKGltcG9ydC5tZXRhLnVybCk7XHJcblxyXG5pbXBvcnQgcHJvdG9idWYgZnJvbSBcInByb3RvYnVmanNcIjtcclxuXHJcbmNvbnN0IHsgUm9vdDogUHJvdG9Sb290IH0gPSBwcm90b2J1ZjtcclxuY29uc3QgcHJvdG9Sb290ID0gUHJvdG9Sb290LmZyb21KU09OKFxyXG5cdHJlcXVpcmUoXCIuLi8uLi8uLi8uLi93aXRuZXQvd2l0bmV0LnByb3RvLmpzb25cIiksXHJcbik7XHJcblxyXG5pbXBvcnQgeyBmcm9tSGV4U3RyaW5nLCB0b0hleFN0cmluZyB9IGZyb20gXCIuLi8uLi8uLi9iaW4vaGVscGVycy5qc1wiO1xyXG5cclxuaW1wb3J0IHsgUmFkb25SZXF1ZXN0LCBSYWRvblRlbXBsYXRlIH0gZnJvbSBcIi4uLy4uL3JhZG9uL2luZGV4LmpzXCI7XHJcbmltcG9ydCB0eXBlIHsgSGFzaCwgSGV4U3RyaW5nLCBJSnNvblJwY1Byb3ZpZGVyIH0gZnJvbSBcIi4uLy4uL3R5cGVzLmpzXCI7XHJcblxyXG5pbXBvcnQgdHlwZSB7IElMZWRnZXIgfSBmcm9tIFwiLi4vaW50ZXJmYWNlcy5qc1wiO1xyXG5pbXBvcnQgeyBUcmFuc2FjdGlvblBheWxvYWRNdWx0aVNpZyB9IGZyb20gXCIuLi9wYXlsb2Fkcy5qc1wiO1xyXG5pbXBvcnQge1xyXG5cdENvaW5zLFxyXG5cdFB1YmxpY0tleUhhc2gsXHJcblx0dHlwZSBUcmFuc2FjdGlvblBhcmFtcyxcclxuXHRUcmFuc2FjdGlvblByaW9yaXR5LFxyXG59IGZyb20gXCIuLi90eXBlcy5qc1wiO1xyXG5pbXBvcnQgeyBCaWdNYXRoLCBzaGEyNTYgfSBmcm9tIFwiLi4vdXRpbHMuanNcIjtcclxuXHJcbmV4cG9ydCB0eXBlIERhdGFSZXF1ZXN0VGVtcGxhdGVBcmdzID0gYW55IHwgc3RyaW5nIHwgc3RyaW5nW10gfCBzdHJpbmdbXVtdO1xyXG5cclxuZXhwb3J0IHR5cGUgRGF0YVJlcXVlc3RNYWpvcml0eSA9IFwic2ltcGxlXCIgfCBcInF1YWxpZmllZFwiO1xyXG5cclxuZXhwb3J0IHR5cGUgRGF0YVJlcXVlc3RQYXJhbXMgPSBUcmFuc2FjdGlvblBhcmFtcyAmIHtcclxuXHRhcmdzPzogRGF0YVJlcXVlc3RUZW1wbGF0ZUFyZ3M7XHJcblx0bWFqb3JpdHlUeXBlPzogRGF0YVJlcXVlc3RNYWpvcml0eTtcclxuXHRtYXhSZXN1bHRTaXplPzogbnVtYmVyO1xyXG5cdHdpdG5lc3Nlcz86IG51bWJlcjtcclxufTtcclxuXHJcbnR5cGUgRGF0YVJlcXVlc3RPdXRwdXRTTEEgPSB7XHJcblx0Y29sbGF0ZXJhbD86IG51bWJlcjtcclxuXHRjb21taXRBbmRSZXZlYWxGZWU/OiBudW1iZXI7XHJcblx0bWluQ29uc2Vuc3VzUGVyY2VudGFnZTogbnVtYmVyO1xyXG5cdHdpdG5lc3NlczogbnVtYmVyO1xyXG5cdHdpdG5lc3NSZXdhcmQ6IG51bWJlcjtcclxuXHRtYXhSZXN1bHRTaXplPzogbnVtYmVyO1xyXG59O1xyXG5cclxuY29uc3QgQ09MTEFURVJBTF9SQVRJTyA9IDEwMG47XHJcbi8vIGNvbnN0IFJBRE9OX0VSUk9SX01BWF9CWVRFUyA9IDk7XHJcblxyXG5jb25zdCBEUl9DT01NSVRfVFhfV0VJR0hUID0gNDAwO1xyXG5jb25zdCBEUl9SRVZFQUxfVFhfV0VJR0hUID0gMjAwO1xyXG5jb25zdCBEUl9UQUxMWV9UWF9XRUlHSFQgPSAxMDA7XHJcblxyXG5jb25zdCBEUl9UWF9XRUlHSFRfQUxQSEEgPSAxO1xyXG5jb25zdCBEUl9UWF9XRUlHSFRfQkVUQSA9IDE7XHJcblxyXG5jb25zdCBUWF9XRUlHSFRfSU5QVVRfU0laRSA9IDEzMztcclxuY29uc3QgVFhfV0VJR0hUX09VVFBVVF9TSVpFID0gMzY7XHJcblxyXG5leHBvcnQgY2xhc3MgRGF0YVJlcXVlc3RQYXlsb2FkIGV4dGVuZHMgVHJhbnNhY3Rpb25QYXlsb2FkTXVsdGlTaWc8RGF0YVJlcXVlc3RQYXJhbXM+IHtcclxuXHRwdWJsaWMgc3RhdGljIERFRkFVTFRfTUFYX1JFU1VMVF9TSVpFID0gMjU2O1xyXG5cdHB1YmxpYyBzdGF0aWMgREVGQVVMVF9XSVRORVNTRVMgPSAxMjtcclxuXHRwdWJsaWMgc3RhdGljIE1BWF9XRUlHSFQgPSA4MF8wMDA7XHJcblx0cHVibGljIHN0YXRpYyBNSU5fQ09MTEFURVJBTCA9IDIwXzAwMF8wMDBfMDAwbjtcclxuXHJcblx0cHJvdGVjdGVkIF9yZXF1ZXN0PzogUmFkb25SZXF1ZXN0O1xyXG5cdHB1YmxpYyByZWFkb25seSB0ZW1wbGF0ZT86IFJhZG9uVGVtcGxhdGU7XHJcblxyXG5cdGNvbnN0cnVjdG9yKFxyXG5cdFx0cHJvdG9UeXBlTmFtZTogc3RyaW5nLFxyXG5cdFx0cmFkb246IFJhZG9uUmVxdWVzdCB8IFJhZG9uVGVtcGxhdGUsXHJcblx0XHRpbml0aWFsVGFyZ2V0PzogRGF0YVJlcXVlc3RQYXJhbXMsXHJcblx0KSB7XHJcblx0XHRzdXBlcihwcm90b1R5cGVOYW1lLCBpbml0aWFsVGFyZ2V0KTtcclxuXHRcdGlmIChyYWRvbiBpbnN0YW5jZW9mIFJhZG9uUmVxdWVzdCkge1xyXG5cdFx0XHR0aGlzLl9yZXF1ZXN0ID0gcmFkb247XHJcblx0XHR9IGVsc2UgaWYgKHJhZG9uIGluc3RhbmNlb2YgUmFkb25UZW1wbGF0ZSkge1xyXG5cdFx0XHR0aGlzLnRlbXBsYXRlID0gcmFkb247XHJcblx0XHR9IGVsc2Uge1xyXG5cdFx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKFxyXG5cdFx0XHRcdGBEYXRhUmVxdWVzdFBheWxvYWQ6IHVuc3VwcG9ydGVkIFJhZG9uIGFzc2V0IHR5cGU6ICR7KHJhZG9uIGFzIGFueSk/LmNvbnN0cnVjdG9yLm5hbWV9YCxcclxuXHRcdFx0KTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdHB1YmxpYyBnZXQgZHJvSGFzaCgpOiBIYXNoIHwgdW5kZWZpbmVkIHtcclxuXHRcdGNvbnN0IG9iaiA9IHRoaXMuX3RvRHJPdXRwdXRQcm90b2J1ZigpO1xyXG5cdFx0aWYgKG9iaikge1xyXG5cdFx0XHRjb25zdCBEYXRhUmVxdWVzdE91dHB1dCA9IHByb3RvUm9vdC5sb29rdXBUeXBlKFwiRGF0YVJlcXVlc3RPdXRwdXRcIik7XHJcblx0XHRcdGNvbnN0IGVyciA9IERhdGFSZXF1ZXN0T3V0cHV0LnZlcmlmeShvYmopO1xyXG5cdFx0XHRpZiAoZXJyKSB7XHJcblx0XHRcdFx0dGhyb3cgVHlwZUVycm9yKGVycik7XHJcblx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0Ly8gY29uc29sZS5sb2coXCJcXG5kcm9IYXNoLm9iaiA9PlwiLCBKU09OLnN0cmluZ2lmeShvYmopKVxyXG5cdFx0XHRcdGNvbnN0IG1lc3NhZ2UgPSBEYXRhUmVxdWVzdE91dHB1dC5mcm9tT2JqZWN0KG9iaik7XHJcblx0XHRcdFx0Ly8gY29uc29sZS5sb2coXCJcXG5kcm9IYXNoLm1lc3NhZ2UgPT5cIiwgSlNPTi5zdHJpbmdpZnkobWVzc2FnZSkpXHJcblx0XHRcdFx0Y29uc3QgYnl0ZWNvZGUgPSBEYXRhUmVxdWVzdE91dHB1dC5lbmNvZGUobWVzc2FnZSkuZmluaXNoKCk7XHJcblx0XHRcdFx0Ly8gY29uc29sZS5sb2coXCJcXG5kcm9IYXNoLmJ5dGVjb2RlID0+XCIsIGJ5dGVjb2RlKVxyXG5cdFx0XHRcdHJldHVybiB0b0hleFN0cmluZyhzaGEyNTYoYnl0ZWNvZGUpKTtcclxuXHRcdFx0fVxyXG5cdFx0fSBlbHNlIHtcclxuXHRcdFx0cmV0dXJuIHVuZGVmaW5lZDtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdHB1YmxpYyBnZXQgZHJvU0xBKCk6IERhdGFSZXF1ZXN0T3V0cHV0U0xBIHwgdW5kZWZpbmVkIHtcclxuXHRcdGlmICh0aGlzLl90YXJnZXQgJiYgdGhpcy5fZmVlcykge1xyXG5cdFx0XHRjb25zdCBtaW5Db25zZW5zdXNQZXJjZW50YWdlID1cclxuXHRcdFx0XHR0aGlzLl90YXJnZXQubWFqb3JpdHlUeXBlID09PSBcInF1YWxpZmllZFwiID8gNjYgOiA1MTtcclxuXHRcdFx0Y29uc3Qgd2l0bmVzc2VzID1cclxuXHRcdFx0XHR0eXBlb2YgdGhpcy5fdGFyZ2V0LndpdG5lc3NlcyA9PT0gXCJvYmplY3RcIlxyXG5cdFx0XHRcdFx0PyBPYmplY3Qua2V5cyh0aGlzLl90YXJnZXQud2l0bmVzc2VzKS5sZW5ndGhcclxuXHRcdFx0XHRcdDogdGhpcy5fdGFyZ2V0LndpdG5lc3NlcyB8fCAwO1xyXG5cdFx0XHRjb25zdCB3aXRuZXNzUmV3YXJkID0gdGhpcy5fZmVlczJVbml0YXJ5UmV3YXJkKHRoaXMuX2ZlZXMsIHdpdG5lc3Nlcyk7XHJcblx0XHRcdGNvbnN0IGNvbW1pdEFuZFJldmVhbEZlZSA9IHRoaXMuX2ZlZXMyVW5pdGFyeUNvbW1pdFJldmVhbFJld2FyZChcclxuXHRcdFx0XHR0aGlzLl9mZWVzLFxyXG5cdFx0XHRcdHdpdG5lc3NlcyxcclxuXHRcdFx0KTsgLy9NYXRoLmZsb29yKE51bWJlcih3aXRuZXNzUmV3YXJkIC8gQmlnSW50KHdpdG5lc3NlcykpKSAvLyBUT0RPOiB6ZXJvZnkgaWYgcHJvdG9jb2wgPj0gVjJfMVxyXG5cdFx0XHRjb25zdCBjb2xsYXRlcmFsID0gd2l0bmVzc1Jld2FyZCAqIENPTExBVEVSQUxfUkFUSU87IC8vIFRPRE86IHplcm9meSBpZiBwcm90b2NvbCA+PSBWMl8xXHJcblx0XHRcdGlmIChjb2xsYXRlcmFsID4gTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVIpXHJcblx0XHRcdFx0dGhyb3cgbmV3IFR5cGVFcnJvcihcclxuXHRcdFx0XHRcdGAke3RoaXMuY29uc3RydWN0b3IubmFtZX06IGV4Y2Vzc2l2ZSB3aXRuZXNzIGNvbGxhdGVyYWw6ICR7Y29sbGF0ZXJhbC50b1N0cmluZygpfSA+ICR7TnVtYmVyLk1BWF9TQUZFX0lOVEVHRVJ9YCxcclxuXHRcdFx0XHQpO1xyXG5cdFx0XHRlbHNlIGlmICh3aXRuZXNzUmV3YXJkID4gTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVIpXHJcblx0XHRcdFx0dGhyb3cgbmV3IFR5cGVFcnJvcihcclxuXHRcdFx0XHRcdGAke3RoaXMuY29uc3RydWN0b3IubmFtZX06IGV4Y2Vzc2l2ZSB3aXRuZXNzIHJld2FyZDogJHt3aXRuZXNzUmV3YXJkLnRvU3RyaW5nKCl9ID4gJHtOdW1iZXIuTUFYX1NBRkVfSU5URUdFUn1gLFxyXG5cdFx0XHRcdCk7XHJcblx0XHRcdGVsc2UgaWYgKGNvbW1pdEFuZFJldmVhbEZlZSA+IE51bWJlci5NQVhfU0FGRV9JTlRFR0VSKVxyXG5cdFx0XHRcdHRocm93IG5ldyBUeXBlRXJyb3IoXHJcblx0XHRcdFx0XHRgJHt0aGlzLmNvbnN0cnVjdG9yLm5hbWV9OiBleGNlc3NpdmUgY29tbWl0L3JldmVhbCBmZWU6ICR7Y29tbWl0QW5kUmV2ZWFsRmVlLnRvU3RyaW5nKCl9ID4gJHtOdW1iZXIuTUFYX1NBRkVfSU5URUdFUn1gLFxyXG5cdFx0XHRcdCk7XHJcblx0XHRcdC8vIFRPRE86IG9ubHkgd2hlbiBwcm90b2NvbCA+PSBWMl8xXHJcblx0XHRcdC8vIGxldCBtYXhSZXN1bHRTaXplXHJcblx0XHRcdC8vIGlmICh0aGlzLnJlcXVlc3QpIHtcclxuXHRcdFx0Ly8gICAgIGlmICh0aGlzLnJlcXVlc3Qud2l0bmVzc1JlZHVjZXIub3Bjb2RlID09PSBPcGNvZGVzLkNvbmNhdGVuYXRlQW5kSGFzaCkge1xyXG5cdFx0XHQvLyAgICAgICAgIGlmICh0aGlzLl90YXJnZXQ/Lm1heFJlc3VsdFNpemUgJiYgdGhpcy5fdGFyZ2V0Py5tYXhSZXN1bHRTaXplICE9PSAzNCkge1xyXG5cdFx0XHQvLyAgICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGAke3RoaXMuY29uc3RydWN0b3IubmFtZX06IGludmFsaWQgbWF4IHJlc3VsdCBzaXplICgke3RoaXMuX3RhcmdldD8ubWF4UmVzdWx0U2l6ZX0pIGZvciBhIGNvbmNhdGVuYXRlLWFuZC1oYXNoIG91dHB1dC5gKVxyXG5cdFx0XHQvLyAgICAgICAgIH1cclxuXHRcdFx0Ly8gICAgIH0gZWxzZSB7XHJcblx0XHRcdC8vICAgICAgICAgc3dpdGNoICh0aGlzLnJlcXVlc3QuZGF0YVR5cGUpIHtcclxuXHRcdFx0Ly8gICAgICAgICAgICAgY2FzZSBcIlJhZG9uQm9vbGVhblwiOlxyXG5cdFx0XHQvLyAgICAgICAgICAgICBjYXNlIFwiUmFkb25JbnRlZ2VyXCI6XHJcblx0XHRcdC8vICAgICAgICAgICAgIGNhc2UgXCJSYWRvbkZsb2F0XCI6XHJcblx0XHRcdC8vICAgICAgICAgICAgICAgICBpZiAodGhpcy5fdGFyZ2V0Py5tYXhSZXN1bHRTaXplICYmIHRoaXMuX3RhcmdldC5tYXhSZXN1bHRTaXplICE9PSBSQURPTl9FUlJPUl9NQVhfQllURVMpIHtcclxuXHRcdFx0Ly8gICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGAke3RoaXMuY29uc3RydWN0b3IubmFtZX06IGludmFsaWQgbWF4IHJlc3VsdCBzaXplICgke1xyXG5cdFx0XHQvLyAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl90YXJnZXQubWF4UmVzdWx0U2l6ZVxyXG5cdFx0XHQvLyAgICAgICAgICAgICAgICAgICAgICAgICB9IGJ5dGVzKSBmb3IgZXhwZWN0ZWQgcmVzdWx0IHR5cGUgKCR7dGhpcy5yZXF1ZXN0LmRhdGFUeXBlfSlgKVxyXG5cdFx0XHQvLyAgICAgICAgICAgICAgICAgfVxyXG5cdFx0XHQvLyAgICAgICAgICAgICAgICAgYnJlYWs7XHJcblx0XHRcdC8vICAgICAgICAgICAgIGRlZmF1bHQ6XHJcblx0XHRcdC8vICAgICAgICAgICAgICAgICBpZiAodGhpcy5fdGFyZ2V0Py5tYXhSZXN1bHRTaXplICYmIHRoaXMuX3RhcmdldC5tYXhSZXN1bHRTaXplIDwgUkFET05fRVJST1JfTUFYX0JZVEVTKSB7XHJcblx0XHRcdC8vICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihgJHt0aGlzLmNvbnN0cnVjdG9yLm5hbWV9OiBpbnZhbGlkIG1heCByZXN1bHQgc2l6ZSAoJHtcclxuXHRcdFx0Ly8gICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fdGFyZ2V0Lm1heFJlc3VsdFNpemVcclxuXHRcdFx0Ly8gICAgICAgICAgICAgICAgICAgICAgICAgfSBieXRlcykgZm9yIHZhcmlhbnQgcmVzdWx0IHR5cGUgKCR7dGhpcy5yZXF1ZXN0LmRhdGFUeXBlfSlgKVxyXG5cdFx0XHQvLyAgICAgICAgICAgICAgICAgfVxyXG5cdFx0XHQvLyAgICAgICAgICAgICAgICAgbWF4UmVzdWx0U2l6ZSA9IHRoaXMuX3RhcmdldD8ubWF4UmVzdWx0U2l6ZSB8fCBEYXRhUmVxdWVzdFBheWxvYWQuREVGQVVMVF9NQVhfUkVTVUxUX1NJWkVcclxuXHRcdFx0Ly8gICAgICAgICB9XHJcblx0XHRcdC8vICAgICB9XHJcblx0XHRcdC8vIH1cclxuXHRcdFx0cmV0dXJuIHtcclxuXHRcdFx0XHRjb2xsYXRlcmFsOiBOdW1iZXIoY29sbGF0ZXJhbCksXHJcblx0XHRcdFx0Y29tbWl0QW5kUmV2ZWFsRmVlOiBOdW1iZXIoY29tbWl0QW5kUmV2ZWFsRmVlKSxcclxuXHRcdFx0XHQvLyBtYXhSZXN1bHRTaXplLCBUT0RPOiBvbmx5IGlmIHByb3RvY29sID49IFYyXzFcclxuXHRcdFx0XHRtaW5Db25zZW5zdXNQZXJjZW50YWdlLFxyXG5cdFx0XHRcdHdpdG5lc3NlcyxcclxuXHRcdFx0XHR3aXRuZXNzUmV3YXJkOiBOdW1iZXIod2l0bmVzc1Jld2FyZCksXHJcblx0XHRcdH07XHJcblx0XHR9IGVsc2Uge1xyXG5cdFx0XHRyZXR1cm4gdW5kZWZpbmVkO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0cHVibGljIGdldCBoYXNoKCk6IEhhc2ggfCB1bmRlZmluZWQge1xyXG5cdFx0Y29uc3QgX2J5dGVjb2RlID0gdGhpcy5ieXRlY29kZTtcclxuXHRcdGlmIChfYnl0ZWNvZGUgJiYgdGhpcy5kcm9IYXNoKSB7XHJcblx0XHRcdHJldHVybiB0b0hleFN0cmluZyhcclxuXHRcdFx0XHRzaGEyNTYoQnVmZmVyLmNvbmNhdChbZnJvbUhleFN0cmluZyh0aGlzLmRyb0hhc2gpLCBzaGEyNTYoX2J5dGVjb2RlKV0pKSxcclxuXHRcdFx0KSBhcyBIYXNoO1xyXG5cdFx0fSBlbHNlIHtcclxuXHRcdFx0cmV0dXJuIHVuZGVmaW5lZDtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdHB1YmxpYyBnZXQgbWF4V2VpZ2h0KCk6IG51bWJlciB7XHJcblx0XHRyZXR1cm4gRGF0YVJlcXVlc3RQYXlsb2FkLk1BWF9XRUlHSFQ7XHJcblx0fVxyXG5cclxuXHRwdWJsaWMgZ2V0IHBhcmFtZXRlcml6ZWQoKTogYm9vbGVhbiB7XHJcblx0XHRyZXR1cm4gISF0aGlzLnRlbXBsYXRlO1xyXG5cdH1cclxuXHJcblx0cHVibGljIGdldCBwcmVwYXJlZCgpOiBib29sZWFuIHtcclxuXHRcdHJldHVybiAoXHJcblx0XHRcdHRoaXMuY292ZXJlZCAmJlxyXG5cdFx0XHR0aGlzLl9pbnB1dHMubGVuZ3RoID4gMCAmJlxyXG5cdFx0XHQhIXRoaXMuX3JlcXVlc3QgJiZcclxuXHRcdFx0ISF0aGlzLl90YXJnZXRcclxuXHRcdCk7XHJcblx0fVxyXG5cclxuXHRwdWJsaWMgZ2V0IHJhZEFyZ3MoKTogRGF0YVJlcXVlc3RUZW1wbGF0ZUFyZ3MgfCB1bmRlZmluZWQge1xyXG5cdFx0cmV0dXJuIHRoaXMudGVtcGxhdGUgPyB0aGlzLl90YXJnZXQ/LmFyZ3MgOiB1bmRlZmluZWQ7XHJcblx0fVxyXG5cclxuXHRwdWJsaWMgZ2V0IHJhZEhhc2goKTogSGV4U3RyaW5nIHwgdW5kZWZpbmVkIHtcclxuXHRcdHJldHVybiB0aGlzLnJlcXVlc3Q/LnJhZEhhc2g7XHJcblx0fVxyXG5cclxuXHRwdWJsaWMgZ2V0IHJlcXVlc3QoKTogUmFkb25SZXF1ZXN0IHwgdW5kZWZpbmVkIHtcclxuXHRcdHJldHVybiB0aGlzLl9yZXF1ZXN0O1xyXG5cdH1cclxuXHJcblx0cHVibGljIGdldCB2YWx1ZSgpOiBDb2lucyB7XHJcblx0XHRpZiAodGhpcy5fdGFyZ2V0ICYmIHRoaXMuX2ZlZXMpIHtcclxuXHRcdFx0cmV0dXJuIENvaW5zLmZyb21QZWRyb3MoXHJcblx0XHRcdFx0dGhpcy5fZmVlczJWYWx1ZSh0aGlzLl9mZWVzLCB0aGlzLl90YXJnZXQud2l0bmVzc2VzIHx8IDApLFxyXG5cdFx0XHQpO1xyXG5cdFx0fSBlbHNlIHtcclxuXHRcdFx0cmV0dXJuIENvaW5zLnplcm8oKTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdHB1YmxpYyBnZXQgd2VpZ2h0KCk6IG51bWJlciB7XHJcblx0XHRpZiAodGhpcy5fcmVxdWVzdCAmJiB0aGlzLl90YXJnZXQpIHtcclxuXHRcdFx0Y29uc3Qgd2l0bmVzc2VzID1cclxuXHRcdFx0XHR0eXBlb2YgdGhpcy5fdGFyZ2V0LndpdG5lc3NlcyA9PT0gXCJvYmplY3RcIlxyXG5cdFx0XHRcdFx0PyBPYmplY3Qua2V5cyh0aGlzLl90YXJnZXQud2l0bmVzc2VzKS5sZW5ndGhcclxuXHRcdFx0XHRcdDogdGhpcy5fdGFyZ2V0LndpdG5lc3NlcyB8fCAwO1xyXG5cdFx0XHRyZXR1cm4gKFxyXG5cdFx0XHRcdERSX1RYX1dFSUdIVF9BTFBIQSAqICh0aGlzLl9yZXF1ZXN0LndlaWdodCgpICsgOCArIDIgKyA4ICsgNCArIDgpLFxyXG5cdFx0XHRcdCt0aGlzLl9pbnB1dHMubGVuZ3RoICogVFhfV0VJR0hUX0lOUFVUX1NJWkUgK1xyXG5cdFx0XHRcdFx0dGhpcy5fb3V0cHV0cy5sZW5ndGggKiBUWF9XRUlHSFRfT1VUUFVUX1NJWkUgK1xyXG5cdFx0XHRcdFx0d2l0bmVzc2VzICpcclxuXHRcdFx0XHRcdFx0KERSX0NPTU1JVF9UWF9XRUlHSFQgK1xyXG5cdFx0XHRcdFx0XHRcdERSX1JFVkVBTF9UWF9XRUlHSFQgKiBEUl9UWF9XRUlHSFRfQkVUQSArXHJcblx0XHRcdFx0XHRcdFx0VFhfV0VJR0hUX09VVFBVVF9TSVpFKSArIC8vIFRPRE8gVjIuMTogdHlwZW9mIHRoaXMuX3RhcmdldC53aXRuZXNzZXMgPT09ICdvYmplY3QnID8gVFhfV0VJR0hUX09VVFBVVF9TSVpFIDogMFxyXG5cdFx0XHRcdFx0TWF0aC5tYXgoRFJfVEFMTFlfVFhfV0VJR0hULCB0aGlzLl90YXJnZXQ/Lm1heFJlc3VsdFNpemUgfHwgMCkgKlxyXG5cdFx0XHRcdFx0XHREUl9UWF9XRUlHSFRfQkVUQVxyXG5cdFx0XHQpO1xyXG5cdFx0fSBlbHNlIHtcclxuXHRcdFx0cmV0dXJuIDA7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRwdWJsaWMgYXN5bmMgY29uc3VtZVV0eG9zKFxyXG5cdFx0bGVkZ2VyOiBJTGVkZ2VyLFxyXG5cdFx0cmVsb2FkPzogYm9vbGVhbixcclxuXHQpOiBQcm9taXNlPGJpZ2ludD4ge1xyXG5cdFx0aWYgKCF0aGlzLl90YXJnZXQpIHtcclxuXHRcdFx0dGhyb3cgbmV3IEVycm9yKFxyXG5cdFx0XHRcdGAke3RoaXMuY29uc3RydWN0b3IubmFtZX06IGludGVybmFsIGVycm9yOiBubyBpbi1mbGlnaHQgcGFyYW1zLmAsXHJcblx0XHRcdCk7XHJcblx0XHR9IGVsc2UgaWYgKCh0aGlzLl90YXJnZXQgYXMgYW55KT8uZmVlcyBpbnN0YW5jZW9mIENvaW5zKSB7XHJcblx0XHRcdHRoaXMuX2ZlZXMgPSAodGhpcy5fdGFyZ2V0IGFzIGFueSkuZmVlcy5wZWRyb3M7XHJcblx0XHRcdHJldHVybiBzdXBlci5jb25zdW1lVXR4b3MobGVkZ2VyLCByZWxvYWQpO1xyXG5cdFx0fVxyXG5cclxuXHRcdGlmICghdGhpcy5jb3ZlcmVkKSB7XHJcblx0XHRcdGlmICghdGhpcy5fdGFyZ2V0LndpdG5lc3Nlcykge1xyXG5cdFx0XHRcdHRoaXMuX3RhcmdldC53aXRuZXNzZXMgPSBNYXRoLm1pbihcclxuXHRcdFx0XHRcdERhdGFSZXF1ZXN0UGF5bG9hZC5ERUZBVUxUX1dJVE5FU1NFUyxcclxuXHRcdFx0XHRcdGF3YWl0IGxlZGdlci5wcm92aWRlci53aXRuZXNzZXMoKSxcclxuXHRcdFx0XHQpO1xyXG5cdFx0XHRcdGlmICh0aGlzLl90YXJnZXQud2l0bmVzc2VzIDwgMykge1xyXG5cdFx0XHRcdFx0ZGVsZXRlIHRoaXMuX3RhcmdldC53aXRuZXNzZXM7XHJcblx0XHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoXHJcblx0XHRcdFx0XHRcdGAke3RoaXMuY29uc3RydWN0b3IubmFtZX06IGNhbm5vdCBlc3RpbWF0ZSB3aXRuZXNzZXM6IG5ldHdvcmsgbm90IHJlYWR5IGZvciB3aXRuZXNzaW5nLmAsXHJcblx0XHRcdFx0XHQpO1xyXG5cdFx0XHRcdH0gZWxzZSBpZiAodGhpcy53ZWlnaHQgPiBEYXRhUmVxdWVzdFBheWxvYWQuTUFYX1dFSUdIVCAqIDAuOCkge1xyXG5cdFx0XHRcdFx0Y29uc3QgZGVsdGEgPSB0aGlzLndlaWdodCAtIERhdGFSZXF1ZXN0UGF5bG9hZC5NQVhfV0VJR0hUICogMC44O1xyXG5cdFx0XHRcdFx0dGhpcy5fdGFyZ2V0LndpdG5lc3NlcyAtPSBNYXRoLmNlaWwoXHJcblx0XHRcdFx0XHRcdGRlbHRhIC9cclxuXHRcdFx0XHRcdFx0XHQoRFJfQ09NTUlUX1RYX1dFSUdIVCArXHJcblx0XHRcdFx0XHRcdFx0XHREUl9SRVZFQUxfVFhfV0VJR0hUICogVFhfV0VJR0hUX09VVFBVVF9TSVpFKSxcclxuXHRcdFx0XHRcdCk7XHJcblx0XHRcdFx0XHRpZiAodGhpcy5fdGFyZ2V0LndpdG5lc3NlcyA8IDMpIHtcclxuXHRcdFx0XHRcdFx0ZGVsZXRlIHRoaXMuX3RhcmdldC53aXRuZXNzZXM7XHJcblx0XHRcdFx0XHRcdHRocm93IG5ldyBFcnJvcihcclxuXHRcdFx0XHRcdFx0XHRgJHt0aGlzLmNvbnN0cnVjdG9yLm5hbWV9OiBjYW5ub3QgZXN0aW1hdGUgd2l0bmVzc2VzOiByYWRvbiByZXF1ZXN0IHRvbyBoZWF2eTogJHt0aGlzLndlaWdodH0gd2VpZ2h0IHVuaXRzYCxcclxuXHRcdFx0XHRcdFx0KTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHRcdFx0Y29uc3QgcHJpb3JpdHkgPVxyXG5cdFx0XHRcdCgodGhpcy5fdGFyZ2V0IGFzIGFueSk/LmZlZXMgYXMgVHJhbnNhY3Rpb25Qcmlvcml0eSkgfHxcclxuXHRcdFx0XHRUcmFuc2FjdGlvblByaW9yaXR5Lk9wdWxlbnQ7XHJcblx0XHRcdGxldCBlc3RpbWF0ZWRGZWVzID0gYXdhaXQgdGhpcy5fZXN0aW1hdGVOZXR3b3JrRmVlcyhcclxuXHRcdFx0XHRsZWRnZXIucHJvdmlkZXIsXHJcblx0XHRcdFx0cHJpb3JpdHksXHJcblx0XHRcdCk7XHJcblx0XHRcdHdoaWxlICh0aGlzLl9mZWVzIDwgZXN0aW1hdGVkRmVlcyAmJiB0aGlzLl9jaGFuZ2UgPj0gMCkge1xyXG5cdFx0XHRcdHRoaXMuX2ZlZXMgPSBlc3RpbWF0ZWRGZWVzO1xyXG5cdFx0XHRcdHRoaXMuX291dHB1dHMgPSBbXTtcclxuXHRcdFx0XHQvLyBjb25zdW1lIHV0eG9zIGFzIHRvIGNvdmVyIGZvciBlc3RpbWF0ZWQgdmFsdWUgYW5kIGVzdGltYXRlZCBmZWVzXHJcblx0XHRcdFx0Y29uc3QgdmFsdWUgPSB0aGlzLl9mZWVzMlZhbHVlKHRoaXMuX2ZlZXMsIHRoaXMuX3RhcmdldC53aXRuZXNzZXMpO1xyXG5cdFx0XHRcdGlmICh0aGlzLl9jb3ZlcmVkIDwgdGhpcy52YWx1ZS5wZWRyb3MgKyB0aGlzLl9mZWVzKSB7XHJcblx0XHRcdFx0XHRjb25zdCB1dHhvcyA9IGF3YWl0IGxlZGdlci5zZWxlY3RVdHhvcyh7XHJcblx0XHRcdFx0XHRcdHZhbHVlOiBDb2lucy5mcm9tUGVkcm9zKHZhbHVlICsgdGhpcy5fZmVlcyAtIHRoaXMuX2NvdmVyZWQpLFxyXG5cdFx0XHRcdFx0XHRyZWxvYWQsXHJcblx0XHRcdFx0XHR9KTtcclxuXHRcdFx0XHRcdGNvbnN0IGV4dHJhID0gdXR4b3NcclxuXHRcdFx0XHRcdFx0Lm1hcCgodXR4bykgPT4gQmlnSW50KHV0eG8udmFsdWUpKVxyXG5cdFx0XHRcdFx0XHQucmVkdWNlKChwcmV2LCBjdXJyKSA9PiBwcmV2ICsgY3VyciwgMG4pO1xyXG5cdFx0XHRcdFx0dGhpcy5fY292ZXJlZCArPSBleHRyYTtcclxuXHRcdFx0XHRcdHRoaXMuX2lucHV0cy5wdXNoKC4uLnV0eG9zKTtcclxuXHRcdFx0XHRcdGxlZGdlci5jb25zdW1lVXR4b3MoLi4udXR4b3MpO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHR0aGlzLl9jaGFuZ2UgPSB0aGlzLl9jb3ZlcmVkIC0gKHZhbHVlICsgdGhpcy5fZmVlcyk7XHJcblx0XHRcdFx0aWYgKHRoaXMuX2NoYW5nZSA+PSAwKSB7XHJcblx0XHRcdFx0XHR0aGlzLnByZXBhcmVPdXRwdXRzKHsgdmFsdWU6IHRoaXMuX2NoYW5nZSB9KTtcclxuXHRcdFx0XHRcdGVzdGltYXRlZEZlZXMgPSBhd2FpdCB0aGlzLl9lc3RpbWF0ZU5ldHdvcmtGZWVzKFxyXG5cdFx0XHRcdFx0XHRsZWRnZXIucHJvdmlkZXIsXHJcblx0XHRcdFx0XHRcdHByaW9yaXR5LFxyXG5cdFx0XHRcdFx0KTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHRcdHJldHVybiB0aGlzLl9jaGFuZ2U7XHJcblx0fVxyXG5cclxuXHRwdWJsaWMgaW50b1JlY2VpcHQodGFyZ2V0OiBEYXRhUmVxdWVzdFBhcmFtcyk6IGFueSB7XHJcblx0XHRyZXR1cm4ge1xyXG5cdFx0XHRkcm9IYXNoOiB0aGlzLmRyb0hhc2gsXHJcblx0XHRcdHJhZEFyZ3M6IHRoaXMucmFkQXJncyxcclxuXHRcdFx0cmFkSGFzaDogdGhpcy5yYWRIYXNoLFxyXG5cdFx0XHR3aXRuZXNzZXM6IHRhcmdldC53aXRuZXNzZXMsXHJcblx0XHR9O1xyXG5cdH1cclxuXHJcblx0cHVibGljIHByZXBhcmVPdXRwdXRzKGNoYW5nZT86IHsgdmFsdWU6IGJpZ2ludCB9KTogYW55IHtcclxuXHRcdGlmIChjaGFuZ2U/LnZhbHVlKSB7XHJcblx0XHRcdHRoaXMuX291dHB1dHMucHVzaCh7XHJcblx0XHRcdFx0cGtoOiB0aGlzLl9pbnB1dHNbMF0uc2lnbmVyLFxyXG5cdFx0XHRcdHZhbHVlOiBjaGFuZ2UudmFsdWUsXHJcblx0XHRcdFx0dGltZV9sb2NrOiAwLFxyXG5cdFx0XHR9KTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdHB1YmxpYyByZXNldFRhcmdldCh0YXJnZXQ6IERhdGFSZXF1ZXN0UGFyYW1zKTogYW55IHtcclxuXHRcdHRoaXMuX2NoYW5nZSA9IDBuO1xyXG5cdFx0dGhpcy5fY292ZXJlZCA9IDBuO1xyXG5cdFx0dGhpcy5fZmVlcyA9IDBuO1xyXG5cdFx0dGhpcy5faW5wdXRzID0gW107XHJcblx0XHR0aGlzLl9vdXRwdXRzID0gW107XHJcblx0XHR0aGlzLl90YXJnZXQgPSB0YXJnZXQ7XHJcblx0XHRpZiAoXHJcblx0XHRcdHRoaXMuZHJvU0xBPy5jb2xsYXRlcmFsICYmXHJcblx0XHRcdHRoaXMuZHJvU0xBLmNvbGxhdGVyYWwgPCBEYXRhUmVxdWVzdFBheWxvYWQuTUlOX0NPTExBVEVSQUxcclxuXHRcdCkge1xyXG5cdFx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKFxyXG5cdFx0XHRcdGAke3RoaXMuY29uc3RydWN0b3IubmFtZX06IHdpdG5lc3NpbmcgY29sbGF0ZXJhbCBiZWxvdyBtaW5pbXVtOiAke1xyXG5cdFx0XHRcdFx0dGhpcy5kcm9TTEEuY29sbGF0ZXJhbFxyXG5cdFx0XHRcdH0gPCAke0RhdGFSZXF1ZXN0UGF5bG9hZC5NSU5fQ09MTEFURVJBTH1gLFxyXG5cdFx0XHQpO1xyXG5cdFx0fVxyXG5cdFx0aWYgKHRoaXMudGVtcGxhdGUpIHtcclxuXHRcdFx0Y29uc3QgYXJncyA9IHRhcmdldD8uYXJncztcclxuXHRcdFx0aWYgKGFyZ3MgPT09IHVuZGVmaW5lZCkge1xyXG5cdFx0XHRcdHRocm93IG5ldyBUeXBlRXJyb3IoXHJcblx0XHRcdFx0XHRgJHt0aGlzLmNvbnN0cnVjdG9yLm5hbWV9OiBubyB0ZW1wbGF0ZSBhcmdzIHdlcmUgcGFzc2VkLmAsXHJcblx0XHRcdFx0KTtcclxuXHRcdFx0fSBlbHNlIGlmICh0eXBlb2YgYXJncyA9PT0gXCJzdHJpbmdcIikge1xyXG5cdFx0XHRcdHRoaXMuX3JlcXVlc3QgPSB0aGlzLnRlbXBsYXRlLmJ1aWxkUmFkb25SZXF1ZXN0KFthcmdzXSk7XHJcblx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0dGhpcy5fcmVxdWVzdCA9IHRoaXMudGVtcGxhdGUuYnVpbGRSYWRvblJlcXVlc3QoYXJncyk7XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHRcdGRlbGV0ZSB0aGlzLl9wcmlvcml0aWVzO1xyXG5cdH1cclxuXHJcblx0cHVibGljIHRvSlNPTihodW1hbml6ZSA9IGZhbHNlKTogYW55IHtcclxuXHRcdGNvbnN0IGRyb1NMQSA9IHRoaXMuZHJvU0xBO1xyXG5cdFx0cmV0dXJuIHtcclxuXHRcdFx0aW5wdXRzOiB0aGlzLmlucHV0cy5tYXAoKHV0eG8pID0+ICh7XHJcblx0XHRcdFx0b3V0cHV0X3BvaW50ZXI6IHV0eG8ub3V0cHV0X3BvaW50ZXIsXHJcblx0XHRcdH0pKSxcclxuXHRcdFx0b3V0cHV0czogdGhpcy5vdXRwdXRzLm1hcCgodnRvKSA9PiAoe1xyXG5cdFx0XHRcdHBraDogdnRvLnBraCxcclxuXHRcdFx0XHR0aW1lX2xvY2s6IHZ0by50aW1lX2xvY2ssXHJcblx0XHRcdFx0dmFsdWU6IHZ0by52YWx1ZS50b1N0cmluZygpLFxyXG5cdFx0XHR9KSksXHJcblx0XHRcdGRyX291dHB1dDoge1xyXG5cdFx0XHRcdC4uLih0aGlzLl9yZXF1ZXN0XHJcblx0XHRcdFx0XHQ/IHsgZGF0YV9yZXF1ZXN0OiB0aGlzLl9yZXF1ZXN0LnRvSlNPTihodW1hbml6ZSkgfVxyXG5cdFx0XHRcdFx0OiB7fSksXHJcblx0XHRcdFx0Y29tbWl0X2FuZF9yZXZlYWxfZmVlOiBkcm9TTEE/LmNvbW1pdEFuZFJldmVhbEZlZSxcclxuXHRcdFx0XHRtaW5fY29uc2Vuc3VzX3BlcmNlbnRhZ2U6IGRyb1NMQT8ubWluQ29uc2Vuc3VzUGVyY2VudGFnZSxcclxuXHRcdFx0XHR3aXRuZXNzZXM6IGRyb1NMQT8ud2l0bmVzc2VzLFxyXG5cdFx0XHRcdHdpdG5lc3NfcmV3YXJkOiBkcm9TTEE/LndpdG5lc3NSZXdhcmQsXHJcblx0XHRcdFx0Y29sbGF0ZXJhbDogZHJvU0xBPy5jb2xsYXRlcmFsLFxyXG5cdFx0XHR9LFxyXG5cdFx0fTtcclxuXHR9XHJcblxyXG5cdHB1YmxpYyB0b1Byb3RvYnVmKCk6IGFueSB7XHJcblx0XHRpZiAodGhpcy5wcmVwYXJlZCAmJiB0aGlzLl90YXJnZXQgJiYgdGhpcy5fcmVxdWVzdCkge1xyXG5cdFx0XHRyZXR1cm4ge1xyXG5cdFx0XHRcdGlucHV0czogdGhpcy5pbnB1dHMubWFwKCh1dHhvKSA9PiB7XHJcblx0XHRcdFx0XHRjb25zdCB0cmFuc2FjdGlvbklkID0gdXR4by5vdXRwdXRfcG9pbnRlci5zcGxpdChcIjpcIilbMF07XHJcblx0XHRcdFx0XHRjb25zdCBvdXRwdXRJbmRleCA9IHBhcnNlSW50KHV0eG8ub3V0cHV0X3BvaW50ZXIuc3BsaXQoXCI6XCIpWzFdLCAxMCk7XHJcblx0XHRcdFx0XHRyZXR1cm4ge1xyXG5cdFx0XHRcdFx0XHRvdXRwdXRQb2ludGVyOiB7XHJcblx0XHRcdFx0XHRcdFx0dHJhbnNhY3Rpb25JZDoge1xyXG5cdFx0XHRcdFx0XHRcdFx0U0hBMjU2OiBBcnJheS5mcm9tKGZyb21IZXhTdHJpbmcodHJhbnNhY3Rpb25JZCkpLFxyXG5cdFx0XHRcdFx0XHRcdH0sXHJcblx0XHRcdFx0XHRcdFx0Li4uKG91dHB1dEluZGV4ID4gMCA/IHsgb3V0cHV0SW5kZXggfSA6IHt9KSxcclxuXHRcdFx0XHRcdFx0fSxcclxuXHRcdFx0XHRcdH07XHJcblx0XHRcdFx0fSksXHJcblx0XHRcdFx0b3V0cHV0czogdGhpcy5vdXRwdXRzLm1hcCgodnRvKSA9PiAoe1xyXG5cdFx0XHRcdFx0cGtoOiB7XHJcblx0XHRcdFx0XHRcdGhhc2g6IEFycmF5LmZyb20oUHVibGljS2V5SGFzaC5mcm9tQmVjaDMyKHZ0by5wa2gpLnRvQnl0ZXMyMCgpKSxcclxuXHRcdFx0XHRcdH0sXHJcblx0XHRcdFx0XHR2YWx1ZTogTG9uZy5mcm9tVmFsdWUodnRvLnZhbHVlKSxcclxuXHRcdFx0XHRcdC4uLih2dG8udGltZV9sb2NrID4gMCA/IHsgdGltZUxvY2s6IHZ0by50aW1lX2xvY2sgfSA6IHt9KSxcclxuXHRcdFx0XHR9KSksXHJcblx0XHRcdFx0ZHJPdXRwdXQ6IHRoaXMuX3RvRHJPdXRwdXRQcm90b2J1ZigpLFxyXG5cdFx0XHR9O1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0cHVibGljIHZhbGlkYXRlVGFyZ2V0KHRhcmdldD86IGFueSk6IERhdGFSZXF1ZXN0UGFyYW1zIHwgdW5kZWZpbmVkIHtcclxuXHRcdHRhcmdldCA9IHRoaXMuX2NsZWFuVGFyZ2V0RXh0cmFzKHRhcmdldCk7XHJcblx0XHRpZiAodGFyZ2V0ICYmIE9iamVjdC5rZXlzKHRhcmdldCkubGVuZ3RoID4gMCkge1xyXG5cdFx0XHRpZiAoXHJcblx0XHRcdFx0IShcclxuXHRcdFx0XHRcdHRhcmdldCAmJlxyXG5cdFx0XHRcdFx0KCF0YXJnZXQ/LmZlZXMgfHxcclxuXHRcdFx0XHRcdFx0KHRhcmdldC5mZWVzIGluc3RhbmNlb2YgQ29pbnMgJiZcclxuXHRcdFx0XHRcdFx0XHQodGFyZ2V0LmZlZXMgYXMgQ29pbnMpLnBlZHJvcyA+IDApIHx8XHJcblx0XHRcdFx0XHRcdE9iamVjdC52YWx1ZXMoVHJhbnNhY3Rpb25Qcmlvcml0eSkuaW5jbHVkZXModGFyZ2V0LmZlZXMpKSAmJlxyXG5cdFx0XHRcdFx0KHRhcmdldD8ud2l0bmVzc2VzIHx8IHRhcmdldD8ud2l0bmVzc2VzID09PSB1bmRlZmluZWQpICYmXHJcblx0XHRcdFx0XHQoIXRoaXMudGVtcGxhdGUgfHwgdGFyZ2V0Py5hcmdzKVxyXG5cdFx0XHRcdClcclxuXHRcdFx0KSB7XHJcblx0XHRcdFx0dGhyb3cgbmV3IFR5cGVFcnJvcihcclxuXHRcdFx0XHRcdGAke3RoaXMuY29uc3RydWN0b3IubmFtZX06IGludmFsaWQgb3B0aW9uczogJHtKU09OLnN0cmluZ2lmeSh0YXJnZXQpfWAsXHJcblx0XHRcdFx0KTtcclxuXHRcdFx0fSBlbHNlIGlmICh0YXJnZXQ/LndpdG5lc3Nlcykge1xyXG5cdFx0XHRcdGlmICh0eXBlb2YgdGFyZ2V0LndpdG5lc3NlcyA9PT0gXCJvYmplY3RcIikge1xyXG5cdFx0XHRcdFx0dGhyb3cgbmV3IFR5cGVFcnJvcihcclxuXHRcdFx0XHRcdFx0YCR7dGhpcy5jb25zdHJ1Y3Rvci5uYW1lfTogZXhwbGljaXQgd2l0bmVzc2luZyBjb21taXR0ZWVzIG5vdCB5ZXQgc3VwcG9ydGVkOiAke3RhcmdldC53aXRuZXNzZXN9YCxcclxuXHRcdFx0XHRcdCk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdHRhcmdldC53aXRuZXNzZXMgPSBwYXJzZUludCh0YXJnZXQud2l0bmVzc2VzIGFzIHN0cmluZywgMTApO1xyXG5cdFx0XHR9XHJcblx0XHRcdHJldHVybiB0YXJnZXQgYXMgRGF0YVJlcXVlc3RQYXJhbXM7XHJcblx0XHR9IGVsc2Uge1xyXG5cdFx0XHRyZXR1cm4gdW5kZWZpbmVkO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0cHJvdGVjdGVkIF9jbGVhblRhcmdldEV4dHJhcyh0YXJnZXQ/OiBhbnkpOiBhbnkge1xyXG5cdFx0aWYgKHRhcmdldCkge1xyXG5cdFx0XHRyZXR1cm4gT2JqZWN0LmZyb21FbnRyaWVzKFxyXG5cdFx0XHRcdE9iamVjdC5lbnRyaWVzKHRhcmdldCkuZmlsdGVyKChba2V5XSkgPT5cclxuXHRcdFx0XHRcdFtcImFyZ3NcIiwgXCJmZWVzXCIsIFwibWF4UmVzdWx0U2l6ZVwiLCBcIndpdG5lc3Nlc1wiXS5pbmNsdWRlcyhrZXkpLFxyXG5cdFx0XHRcdCksXHJcblx0XHRcdCk7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRwcm90ZWN0ZWQgYXN5bmMgX2VzdGltYXRlTmV0d29ya0ZlZXMoXHJcblx0XHRwcm92aWRlcjogSUpzb25ScGNQcm92aWRlcixcclxuXHRcdHByaW9yaXR5ID0gVHJhbnNhY3Rpb25Qcmlvcml0eS5NZWRpdW0sXHJcblx0KTogUHJvbWlzZTxiaWdpbnQ+IHtcclxuXHRcdHRoaXMuX3ByaW9yaXRpZXMgPSBhd2FpdCBwcm92aWRlci5wcmlvcml0aWVzKCk7XHJcblx0XHRyZXR1cm4gQmlnSW50KFxyXG5cdFx0XHRNYXRoLmZsb29yKFxyXG5cdFx0XHRcdHRoaXMuX3ByaW9yaXRpZXNbYGRydF8ke3ByaW9yaXR5fWBdLnByaW9yaXR5ICpcclxuXHRcdFx0XHRcdCh0aGlzLmNvdmVyZWRcclxuXHRcdFx0XHRcdFx0PyB0aGlzLndlaWdodFxyXG5cdFx0XHRcdFx0XHQ6IHRoaXMud2VpZ2h0ICtcclxuXHRcdFx0XHRcdFx0XHQvLyBlc3RpbWF0ZSB3ZWlnaHQgb2Ygb25lIHNpbmdsZSBvdXRwdXQgaW4gY2FzZSB0aGVyZSB3YXMgY2hhbmdlIHRvIHBheSBiYWNrXHJcblx0XHRcdFx0XHRcdFx0VFhfV0VJR0hUX09VVFBVVF9TSVpFKSxcclxuXHRcdFx0KSxcclxuXHRcdCk7XHJcblx0fVxyXG5cclxuXHRwcm90ZWN0ZWQgX2ZlZXMyVW5pdGFyeUNvbW1pdFJldmVhbFJld2FyZChcclxuXHRcdGZlZXM6IGJpZ2ludCxcclxuXHRcdHdpdG5lc3NlczogbnVtYmVyLFxyXG5cdCk6IGJpZ2ludCB7XHJcblx0XHRyZXR1cm4gZmVlcyAvIEJpZ0ludCh3aXRuZXNzZXMpIHx8IDFuO1xyXG5cdH1cclxuXHJcblx0cHJvdGVjdGVkIF9mZWVzMlVuaXRhcnlSZXdhcmQoZmVlczogYmlnaW50LCBfd2l0bmVzc2VzOiBudW1iZXIpOiBiaWdpbnQge1xyXG5cdFx0cmV0dXJuIEJpZ01hdGgubWF4KFxyXG5cdFx0XHRmZWVzLFxyXG5cdFx0XHRCaWdJbnQoXHJcblx0XHRcdFx0TWF0aC5jZWlsKE51bWJlcihEYXRhUmVxdWVzdFBheWxvYWQuTUlOX0NPTExBVEVSQUwgLyBDT0xMQVRFUkFMX1JBVElPKSksXHJcblx0XHRcdCksXHJcblx0XHQpO1xyXG5cdH1cclxuXHRwcm90ZWN0ZWQgX2ZlZXMyVmFsdWUoZmVlczogYmlnaW50LCB3aXRuZXNzZXM6IG51bWJlcik6IGJpZ2ludCB7XHJcblx0XHRyZXR1cm4gKFxyXG5cdFx0XHRCaWdJbnQod2l0bmVzc2VzKSAqXHJcblx0XHRcdCh0aGlzLl9mZWVzMlVuaXRhcnlSZXdhcmQoZmVlcywgd2l0bmVzc2VzKSArXHJcblx0XHRcdFx0Mm4gKiB0aGlzLl9mZWVzMlVuaXRhcnlDb21taXRSZXZlYWxSZXdhcmQoZmVlcywgd2l0bmVzc2VzKSlcclxuXHRcdCk7XHJcblx0fVxyXG5cclxuXHRwcm90ZWN0ZWQgX3RvRHJPdXRwdXRQcm90b2J1ZigpOiBhbnkge1xyXG5cdFx0aWYgKHRoaXMuX3JlcXVlc3QpIHtcclxuXHRcdFx0cmV0dXJuIHtcclxuXHRcdFx0XHQuLi50aGlzLmRyb1NMQSxcclxuXHRcdFx0XHRkYXRhUmVxdWVzdDogdGhpcy5fcmVxdWVzdC50b1Byb3RvYnVmKCksXHJcblx0XHRcdH07XHJcblx0XHR9XHJcblx0fVxyXG59XHJcbiJdfQ==
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { HexString, IJsonRpcProvider, Network } from "../../types";
|
|
2
|
-
import { TransactionPayloadMultiSig } from "../payloads";
|
|
3
|
-
import { Coins, PublicKeyHashString, TransactionParams, TransactionPriority } from "../types";
|
|
1
|
+
import type { HexString, IJsonRpcProvider, Network } from "../../types.js";
|
|
2
|
+
import { TransactionPayloadMultiSig } from "../payloads.js";
|
|
3
|
+
import { Coins, type PublicKeyHashString, type TransactionParams, TransactionPriority } from "../types.js";
|
|
4
4
|
export type StakeDepositParams = TransactionParams & {
|
|
5
5
|
authorization: HexString;
|
|
6
6
|
value: Coins;
|
|
@@ -9,7 +9,6 @@ export type StakeDepositParams = TransactionParams & {
|
|
|
9
9
|
export declare class StakePayload extends TransactionPayloadMultiSig<StakeDepositParams> {
|
|
10
10
|
static MAX_WEIGHT: number;
|
|
11
11
|
static MIN_VALUE: number;
|
|
12
|
-
constructor(protoTypeName: string, specs?: any);
|
|
13
12
|
get maxWeight(): number;
|
|
14
13
|
get prepared(): boolean;
|
|
15
14
|
get value(): Coins;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"StakePayload.d.ts","sourceRoot":"","sources":["../../../../../src/lib/crypto/payloads/StakePayload.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,SAAS,EAAE,gBAAgB,EAAE,OAAO,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"StakePayload.d.ts","sourceRoot":"","sources":["../../../../../src/lib/crypto/payloads/StakePayload.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,SAAS,EAAE,gBAAgB,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;AAE3E,OAAO,EAAE,0BAA0B,EAAE,MAAM,gBAAgB,CAAC;AAC5D,OAAO,EACN,KAAK,EAGL,KAAK,mBAAmB,EAExB,KAAK,iBAAiB,EACtB,mBAAmB,EACnB,MAAM,aAAa,CAAC;AAErB,MAAM,MAAM,kBAAkB,GAAG,iBAAiB,GAAG;IACpD,aAAa,EAAE,SAAS,CAAC;IACzB,KAAK,EAAE,KAAK,CAAC;IACb,UAAU,EAAE,mBAAmB,CAAC;CAChC,CAAC;AAMF,qBAAa,YAAa,SAAQ,0BAA0B,CAAC,kBAAkB,CAAC;IAC/E,OAAc,UAAU,SAAS;IACjC,OAAc,SAAS,SAAmB;IAE1C,IAAW,SAAS,IAAI,MAAM,CAE7B;IAED,IAAW,QAAQ,IAAI,OAAO,CAM7B;IAED,IAAW,KAAK,IAAI,KAAK,CAExB;IAED,IAAW,MAAM,IAAI,MAAM,CAM1B;IAEM,WAAW,CAAC,MAAM,EAAE,kBAAkB,EAAE,OAAO,CAAC,EAAE,OAAO;;;;;IAUzD,MAAM,CAAC,SAAS,UAAQ,EAAE,OAAO,CAAC,EAAE,OAAO,GAAG,GAAG;IAkCjD,UAAU,IAAI,GAAG;IAqDjB,cAAc,CAAC,MAAM,CAAC,EAAE,GAAG,GAAG,kBAAkB,GAAG,SAAS;IA8CnE,SAAS,CAAC,kBAAkB,CAAC,MAAM,CAAC,EAAE,GAAG,GAAG,GAAG;cAU/B,oBAAoB,CACnC,QAAQ,EAAE,gBAAgB,EAC1B,QAAQ,sBAA6B,GACnC,OAAO,CAAC,MAAM,CAAC;CAkBlB"}
|