@bitgo-beta/utxo-ord 1.0.1-beta.162 → 1.0.1-beta.1621
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/cjs/src/OrdOutput.d.ts.map +1 -0
- package/dist/cjs/src/OrdOutput.js +197 -0
- package/dist/{src → cjs/src}/OutputLayout.d.ts +3 -3
- package/dist/cjs/src/OutputLayout.d.ts.map +1 -0
- package/dist/cjs/src/OutputLayout.js +246 -0
- package/dist/{src → cjs/src}/SatPoint.d.ts +1 -1
- package/dist/cjs/src/SatPoint.d.ts.map +1 -0
- package/dist/cjs/src/SatPoint.js +48 -0
- package/dist/cjs/src/SatRange.d.ts.map +1 -0
- package/dist/cjs/src/SatRange.js +58 -0
- package/dist/cjs/src/combinations.d.ts.map +1 -0
- package/dist/cjs/src/combinations.js +13 -0
- package/dist/cjs/src/index.d.ts.map +1 -0
- package/dist/cjs/src/index.js +49 -0
- package/dist/{src → cjs/src}/inscriptions.d.ts +0 -1
- package/dist/cjs/src/inscriptions.d.ts.map +1 -0
- package/dist/cjs/src/inscriptions.js +202 -0
- package/dist/{src → cjs/src}/psbt.d.ts +6 -7
- package/dist/cjs/src/psbt.d.ts.map +1 -0
- package/dist/cjs/src/psbt.js +154 -0
- package/dist/cjs/tsconfig.tsbuildinfo +1 -0
- package/dist/esm/OrdOutput.d.ts +65 -0
- package/dist/esm/OrdOutput.js +192 -0
- package/dist/esm/OutputLayout.d.ts +47 -0
- package/dist/esm/OutputLayout.d.ts.map +1 -0
- package/dist/esm/OutputLayout.js +240 -0
- package/dist/esm/SatPoint.d.ts +13 -0
- package/dist/esm/SatPoint.d.ts.map +1 -0
- package/dist/esm/SatPoint.js +43 -0
- package/dist/esm/SatRange.d.ts +26 -0
- package/dist/esm/SatRange.js +53 -0
- package/dist/esm/combinations.d.ts +2 -0
- package/dist/esm/combinations.js +10 -0
- package/dist/esm/index.d.ts +10 -0
- package/dist/esm/index.js +10 -0
- package/dist/esm/inscriptions.d.ts +31 -0
- package/dist/esm/inscriptions.d.ts.map +1 -0
- package/dist/esm/inscriptions.js +164 -0
- package/dist/esm/psbt.d.ts +67 -0
- package/dist/esm/psbt.d.ts.map +1 -0
- package/dist/esm/psbt.js +147 -0
- package/package.json +26 -9
- package/dist/src/OrdOutput.js +0 -197
- package/dist/src/OutputLayout.d.ts.map +0 -1
- package/dist/src/OutputLayout.js +0 -248
- package/dist/src/SatPoint.d.ts.map +0 -1
- package/dist/src/SatPoint.js +0 -49
- package/dist/src/SatRange.js +0 -58
- package/dist/src/combinations.js +0 -14
- package/dist/src/index.js +0 -23
- package/dist/src/inscriptions.d.ts.map +0 -1
- package/dist/src/inscriptions.js +0 -169
- package/dist/src/psbt.d.ts.map +0 -1
- package/dist/src/psbt.js +0 -150
- package/dist/tsconfig.tsbuildinfo +0 -1
- /package/dist/{src → cjs/src}/OrdOutput.d.ts +0 -0
- /package/dist/{src → cjs/src}/SatRange.d.ts +0 -0
- /package/dist/{src → cjs/src}/combinations.d.ts +0 -0
- /package/dist/{src → cjs/src}/index.d.ts +0 -0
- /package/dist/{src → esm}/OrdOutput.d.ts.map +0 -0
- /package/dist/{src → esm}/SatRange.d.ts.map +0 -0
- /package/dist/{src → esm}/combinations.d.ts.map +0 -0
- /package/dist/{src → esm}/index.d.ts.map +0 -0
package/dist/src/OutputLayout.js
DELETED
|
@@ -1,248 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
/*
|
|
3
|
-
|
|
4
|
-
This file contains code for creating an output layouts for transactions that pass on inscriptions.
|
|
5
|
-
|
|
6
|
-
When passing on an inscription, we want to satisfy a few constraints:
|
|
7
|
-
|
|
8
|
-
* All outputs should be larger than a minimal value (dust limit)
|
|
9
|
-
* The sum of all output values needs to be less than the input to cover the transaction fee.
|
|
10
|
-
* The output containing the inscription should be as small as possible, but large enough to
|
|
11
|
-
contain the inscription.
|
|
12
|
-
|
|
13
|
-
To keep the inscription output small, we can pad the satoshi range preceding and following the range
|
|
14
|
-
with change outputs, which have a minimal size and incur a fee cost.
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
Broadly speaking, there are four scenarios:
|
|
18
|
-
|
|
19
|
-
(1) Small inscription input that has just enough value to pay for fee and a single inscription
|
|
20
|
-
output (u0). No padding outputs.
|
|
21
|
-
┌────────┬────────┐
|
|
22
|
-
│ │ u0 │
|
|
23
|
-
│ r ┼ │
|
|
24
|
-
│ ├────────┘
|
|
25
|
-
│ │ fee
|
|
26
|
-
└────────┘
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
(2) Large inscription input with inscription close to start of input.
|
|
30
|
-
Inscription output followed by change output (u1) padding the remaining value.
|
|
31
|
-
|
|
32
|
-
┌────────┬────────┐
|
|
33
|
-
│ │ u0 │
|
|
34
|
-
│ r ┼ │
|
|
35
|
-
│ ├────────┤
|
|
36
|
-
│ │ u1 │
|
|
37
|
-
│ │ │
|
|
38
|
-
│ │ │
|
|
39
|
-
│ │ │
|
|
40
|
-
│ │ │
|
|
41
|
-
│ │ │
|
|
42
|
-
│ │ │
|
|
43
|
-
│ │ │
|
|
44
|
-
│ │ │
|
|
45
|
-
│ │ │
|
|
46
|
-
│ ├────────┘
|
|
47
|
-
│ │
|
|
48
|
-
│ │ fee
|
|
49
|
-
│ │
|
|
50
|
-
└────────┘
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
(3) Large inscription input with inscription close to end of input.
|
|
54
|
-
Change output padding start followed by inscription output.
|
|
55
|
-
|
|
56
|
-
┌────────┬────────┐
|
|
57
|
-
│ │ u0 │
|
|
58
|
-
│ │ │
|
|
59
|
-
│ │ │
|
|
60
|
-
│ │ │
|
|
61
|
-
│ │ │
|
|
62
|
-
│ │ │
|
|
63
|
-
│ │ │
|
|
64
|
-
│ │ │
|
|
65
|
-
│ │ │
|
|
66
|
-
│ ├────────┤
|
|
67
|
-
│ r ┼ │
|
|
68
|
-
│ │ u1 │
|
|
69
|
-
│ ├────────┘
|
|
70
|
-
│ │
|
|
71
|
-
│ │ fee
|
|
72
|
-
│ │
|
|
73
|
-
└────────┘
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
(4) Large inscription input with inscription in the middle.
|
|
77
|
-
Inscription input (u1) with padding on both sides (u0 and u2)
|
|
78
|
-
|
|
79
|
-
┌────────┬────────┐
|
|
80
|
-
│ │ u0 │
|
|
81
|
-
│ │ │
|
|
82
|
-
│ │ │
|
|
83
|
-
│ │ │
|
|
84
|
-
│ │ │
|
|
85
|
-
│ ├────────┤
|
|
86
|
-
│ │ u1 │
|
|
87
|
-
│ r ┼ │
|
|
88
|
-
│ ├────────┤
|
|
89
|
-
│ │ u2 │
|
|
90
|
-
│ │ │
|
|
91
|
-
│ │ │
|
|
92
|
-
│ │ │
|
|
93
|
-
│ ├────────┘
|
|
94
|
-
│ │
|
|
95
|
-
│ │ fee
|
|
96
|
-
│ │
|
|
97
|
-
└────────┘
|
|
98
|
-
*/
|
|
99
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
100
|
-
exports.findOutputLayout = exports.getOrdOutputsForLayout = exports.toParameters = exports.toArray = void 0;
|
|
101
|
-
const ZERO = BigInt(0);
|
|
102
|
-
const ONE = BigInt(1);
|
|
103
|
-
function max(a, b) {
|
|
104
|
-
return a < b ? b : a;
|
|
105
|
-
}
|
|
106
|
-
function min(a, b) {
|
|
107
|
-
return a < b ? a : b;
|
|
108
|
-
}
|
|
109
|
-
function sum(arr) {
|
|
110
|
-
return arr.reduce((a, b) => a + b, ZERO);
|
|
111
|
-
}
|
|
112
|
-
/** @return canonical sequence of parameters */
|
|
113
|
-
function toArray(p) {
|
|
114
|
-
return [p.firstChangeOutput, p.inscriptionOutput, p.secondChangeOutput, p.feeOutput];
|
|
115
|
-
}
|
|
116
|
-
exports.toArray = toArray;
|
|
117
|
-
function toParameters(firstChangeOutput, inscriptionOutput, secondChangeOutput, feeOutput) {
|
|
118
|
-
return {
|
|
119
|
-
firstChangeOutput,
|
|
120
|
-
inscriptionOutput,
|
|
121
|
-
secondChangeOutput,
|
|
122
|
-
feeOutput,
|
|
123
|
-
};
|
|
124
|
-
}
|
|
125
|
-
exports.toParameters = toParameters;
|
|
126
|
-
/**
|
|
127
|
-
* Translates a layout into OrdOutputs. Absent outputs are set to `null`.
|
|
128
|
-
*
|
|
129
|
-
* @param inscriptionInput
|
|
130
|
-
* @param layout
|
|
131
|
-
* @return OrdOutputs for layout
|
|
132
|
-
*/
|
|
133
|
-
function getOrdOutputsForLayout(inscriptionInput, layout) {
|
|
134
|
-
const outputs = inscriptionInput.splitAllWithParams(toArray(layout), { exact: true, allowZero: true });
|
|
135
|
-
if (outputs.length !== 4) {
|
|
136
|
-
throw new Error(`unexpected result`);
|
|
137
|
-
}
|
|
138
|
-
return toParameters(...outputs);
|
|
139
|
-
}
|
|
140
|
-
exports.getOrdOutputsForLayout = getOrdOutputsForLayout;
|
|
141
|
-
/**
|
|
142
|
-
* @param constraints
|
|
143
|
-
* @param inscriptionInput
|
|
144
|
-
* @param layout
|
|
145
|
-
* @return true iff layout satisfies constraints
|
|
146
|
-
*/
|
|
147
|
-
function check(constraints, inscriptionInput, layout) {
|
|
148
|
-
var _a;
|
|
149
|
-
if ((layout.firstChangeOutput === ZERO || constraints.minChangeOutput <= layout.firstChangeOutput) &&
|
|
150
|
-
(layout.secondChangeOutput === ZERO || constraints.minChangeOutput <= layout.secondChangeOutput) &&
|
|
151
|
-
constraints.minInscriptionOutput <= layout.inscriptionOutput &&
|
|
152
|
-
layout.inscriptionOutput <= constraints.maxInscriptionOutput &&
|
|
153
|
-
getFeeForOutputs(constraints, [layout.firstChangeOutput, layout.inscriptionOutput, layout.secondChangeOutput]) <=
|
|
154
|
-
layout.feeOutput &&
|
|
155
|
-
sum(toArray(layout)) === inscriptionInput.value) {
|
|
156
|
-
/* make sure inscription actually lies on the inscriptionOutput */
|
|
157
|
-
const outputs = getOrdOutputsForLayout(inscriptionInput, layout);
|
|
158
|
-
return ((_a = outputs.inscriptionOutput) === null || _a === void 0 ? void 0 : _a.ordinals.length) === 1;
|
|
159
|
-
}
|
|
160
|
-
return false;
|
|
161
|
-
}
|
|
162
|
-
function getFeeForOutputs(p, outputs) {
|
|
163
|
-
return outputs.reduce((sum, oValue) => sum + (oValue === ZERO ? ZERO : p.feePerOutput), p.feeFixed);
|
|
164
|
-
}
|
|
165
|
-
function getStartChangeOutput(c) {
|
|
166
|
-
// we don't need a change padding output
|
|
167
|
-
if (c.satPos < c.maxInscriptionOutput) {
|
|
168
|
-
return ZERO;
|
|
169
|
-
}
|
|
170
|
-
if (c.minChangeOutput <= c.satPos) {
|
|
171
|
-
return c.satPos;
|
|
172
|
-
}
|
|
173
|
-
return null;
|
|
174
|
-
}
|
|
175
|
-
function getInscriptionOutput(c, startChangeOutput) {
|
|
176
|
-
const result = min(c.maxInscriptionOutput, max(c.minInscriptionOutput, c.satPos - startChangeOutput + ONE));
|
|
177
|
-
if (c.satPos < startChangeOutput || startChangeOutput + result < c.satPos) {
|
|
178
|
-
return null;
|
|
179
|
-
}
|
|
180
|
-
// if is not worth creating an end change output, let's maximize the inscription output
|
|
181
|
-
if (getEndChangeOutput(c, startChangeOutput, result) === ZERO) {
|
|
182
|
-
const remainder = c.total - startChangeOutput - getFeeForOutputs(c, [startChangeOutput, result]);
|
|
183
|
-
return min(remainder, c.maxInscriptionOutput);
|
|
184
|
-
}
|
|
185
|
-
return result;
|
|
186
|
-
}
|
|
187
|
-
function getEndChangeOutput(c, startChangeOutput, inscriptionOutput) {
|
|
188
|
-
const remainder = c.total - sum([startChangeOutput, inscriptionOutput]);
|
|
189
|
-
const minFeeWithoutSecondOutput = getFeeForOutputs(c, [startChangeOutput, inscriptionOutput]);
|
|
190
|
-
const minFeeWithSecondOutput = getFeeForOutputs(c, [startChangeOutput, inscriptionOutput, c.minChangeOutput]);
|
|
191
|
-
if (remainder < minFeeWithoutSecondOutput) {
|
|
192
|
-
// We cannot even pay the fee for the output(s) we have so far.
|
|
193
|
-
return null;
|
|
194
|
-
}
|
|
195
|
-
if (remainder - minFeeWithSecondOutput < c.minChangeOutput) {
|
|
196
|
-
// The remainder is too small to pay for the end change output. Let's skip it and pay a higher fee.
|
|
197
|
-
return ZERO;
|
|
198
|
-
}
|
|
199
|
-
// let's use as much as we can for fee while leaving enough for fee
|
|
200
|
-
return remainder - minFeeWithSecondOutput;
|
|
201
|
-
}
|
|
202
|
-
function getFeeOutput(c, startChangeOutput, inscriptionOutput, endChangeOutput) {
|
|
203
|
-
const minFee = getFeeForOutputs(c, [startChangeOutput, inscriptionOutput, endChangeOutput]);
|
|
204
|
-
const remainder = c.total - sum([startChangeOutput, inscriptionOutput, endChangeOutput]);
|
|
205
|
-
if (remainder < minFee) {
|
|
206
|
-
return null;
|
|
207
|
-
}
|
|
208
|
-
return remainder;
|
|
209
|
-
}
|
|
210
|
-
/**
|
|
211
|
-
* @param inscriptionInput
|
|
212
|
-
* @param search
|
|
213
|
-
* @return a solution that satisfies constraints. If no solution can be found, return `undefined`.
|
|
214
|
-
*/
|
|
215
|
-
function findOutputLayout(inscriptionInput, search) {
|
|
216
|
-
if (inscriptionInput.ordinals.length !== 1) {
|
|
217
|
-
throw new Error(`unexpected ordinal count ${inscriptionInput.ordinals.length}`);
|
|
218
|
-
}
|
|
219
|
-
if (inscriptionInput.ordinals[0].size() !== ONE) {
|
|
220
|
-
throw new Error(`only single-satoshi inscriptions are supported`);
|
|
221
|
-
}
|
|
222
|
-
const satPos = inscriptionInput.ordinals[0].start;
|
|
223
|
-
const total = inscriptionInput.value;
|
|
224
|
-
const constraints = { ...search, satPos, total };
|
|
225
|
-
const startChangeOutput = getStartChangeOutput(constraints);
|
|
226
|
-
if (startChangeOutput === null) {
|
|
227
|
-
return;
|
|
228
|
-
}
|
|
229
|
-
const inscriptionOutput = getInscriptionOutput(constraints, startChangeOutput);
|
|
230
|
-
if (inscriptionOutput === null) {
|
|
231
|
-
return;
|
|
232
|
-
}
|
|
233
|
-
const endChangeOutput = getEndChangeOutput(constraints, startChangeOutput, inscriptionOutput);
|
|
234
|
-
if (endChangeOutput === null) {
|
|
235
|
-
return;
|
|
236
|
-
}
|
|
237
|
-
const feeOutput = getFeeOutput(constraints, startChangeOutput, inscriptionOutput, endChangeOutput);
|
|
238
|
-
if (feeOutput === null) {
|
|
239
|
-
return;
|
|
240
|
-
}
|
|
241
|
-
const result = toParameters(startChangeOutput, inscriptionOutput, endChangeOutput, feeOutput);
|
|
242
|
-
if (!check(constraints, inscriptionInput, result)) {
|
|
243
|
-
throw new Error(`invalid result`);
|
|
244
|
-
}
|
|
245
|
-
return result;
|
|
246
|
-
}
|
|
247
|
-
exports.findOutputLayout = findOutputLayout;
|
|
248
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiT3V0cHV0TGF5b3V0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL091dHB1dExheW91dC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQWdHRzs7O0FBSUgsTUFBTSxJQUFJLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3ZCLE1BQU0sR0FBRyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUV0QixTQUFTLEdBQUcsQ0FBQyxDQUFTLEVBQUUsQ0FBUztJQUMvQixPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3ZCLENBQUM7QUFFRCxTQUFTLEdBQUcsQ0FBQyxDQUFTLEVBQUUsQ0FBUztJQUMvQixPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3ZCLENBQUM7QUFFRCxTQUFTLEdBQUcsQ0FBQyxHQUFhO0lBQ3hCLE9BQU8sR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUM7QUFDM0MsQ0FBQztBQWdCRCwrQ0FBK0M7QUFDL0MsU0FBZ0IsT0FBTyxDQUFJLENBQWdCO0lBQ3pDLE9BQU8sQ0FBQyxDQUFDLENBQUMsaUJBQWlCLEVBQUUsQ0FBQyxDQUFDLGlCQUFpQixFQUFFLENBQUMsQ0FBQyxrQkFBa0IsRUFBRSxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUM7QUFDdkYsQ0FBQztBQUZELDBCQUVDO0FBRUQsU0FBZ0IsWUFBWSxDQUMxQixpQkFBb0IsRUFDcEIsaUJBQW9C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LG9CQUFvQixDQUFDLFdBQVcsQ0FBQyxDQUFDO0lBQzVELElBQUksaUJBQWlCLEtBQUssSUFBSSxFQUFFO1FBQzlCLE9BQU87S0FDUjtJQUNELE1BQU0saUJBQWlCLEdBQUcsb0JBQW9CLENBQUMsV0FBVyxFQUFFLGlCQUFpQixDQUFDLENBQUM7SUFDL0UsSUFBSSxpQkFBaUIsS0FBSyxJQUFJLEVBQUU7UUFDOUIsT0FBTztLQUNSO0lBQ0QsTUFBTSxlQUFlLEdBQUcsa0JBQWtCLENBQUMsV0FBVyxFQUFFLGlCQUFpQixFQUFFLGlCQUFpQixDQUFDLENBQUM7SUFDOUYsSUFBSSxlQUFlLEtBQUssSUFBSSxFQUFFO1FBQzVCLE9BQU87S0FDUjtJQUNELE1BQU0sU0FBUyxHQUFHLFlBQVksQ0FBQyxXQUFXLEVBQUUsaUJBQWlCLEVBQUUsaUJBQWlCLEVBQUUsZUFBZSxDQUFDLENBQUM7SUFDbkcsSUFBSSxTQUFTLEtBQUssSUFBSSxFQUFFO1FBQ3RCLE9BQU87S0FDUjtJQUNELE1BQU0sTUFBTSxHQUFHLFlBQVksQ0FBQyxpQkFBaUIsRUFBRSxpQkFBaUIsRUFBRSxlQUFlLEVBQUUsU0FBUyxDQUFDLENBQUM7SUFDOUYsSUFBSSxDQUFDLEtBQUssQ0FBQyxXQUFXLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxDQUFDLEVBQUU7UUFDakQsTUFBTSxJQUFJLEtBQUssQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO0tBQ25DO0lBQ0QsT0FBTyxNQUFNLENBQUM7QUFDaEIsQ0FBQztBQXJDRCw0Q0FxQ0MiLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuXG5UaGlzIGZpbGUgY29udGFpbnMgY29kZSBmb3IgY3JlYXRpbmcgYW4gb3V0cHV0IGxheW91dHMgZm9yIHRyYW5zYWN0aW9ucyB0aGF0IHBhc3Mgb24gaW5zY3JpcHRpb25zLlxuXG5XaGVuIHBhc3Npbmcgb24gYW4gaW5zY3JpcHRpb24sIHdlIHdhbnQgdG8gc2F0aXNmeSBhIGZldyBjb25zdHJhaW50czpcblxuKiBBbGwgb3V0cHV0cyBzaG91bGQgYmUgbGFyZ2VyIHRoYW4gYSBtaW5pbWFsIHZhbHVlIChkdXN0IGxpbWl0KVxuKiBUaGUgc3VtIG9mIGFsbCBvdXRwdXQgdmFsdWVzIG5lZWRzIHRvIGJlIGxlc3MgdGhhbiB0aGUgaW5wdXQgdG8gY292ZXIgdGhlIHRyYW5zYWN0aW9uIGZlZS5cbiogVGhlIG91dHB1dCBjb250YWluaW5nIHRoZSBpbnNjcmlwdGlvbiBzaG91bGQgYmUgYXMgc21hbGwgYXMgcG9zc2libGUsIGJ1dCBsYXJnZSBlbm91Z2ggdG9cbiAgY29udGFpbiB0aGUgaW5zY3JpcHRpb24uXG5cblRvIGtlZXAgdGhlIGluc2NyaXB0aW9uIG91dHB1dCBzbWFsbCwgd2UgY2FuIHBhZCB0aGUgc2F0b3NoaSByYW5nZSBwcmVjZWRpbmcgYW5kIGZvbGxvd2luZyB0aGUgcmFuZ2VcbndpdGggY2hhbmdlIG91dHB1dHMsIHdoaWNoIGhhdmUgYSBtaW5pbWFsIHNpemUgYW5kIGluY3VyIGEgZmVlIGNvc3QuXG5cblxuQnJvYWRseSBzcGVha2luZywgdGhlcmUgYXJlIGZvdXIgc2NlbmFyaW9zOlxuXG4oMSkgU21hbGwgaW5zY3JpcHRpb24gaW5wdXQgdGhhdCBoYXMganVzdCBlbm91Z2ggdmFsdWUgdG8gcGF5IGZvciBmZWUgYW5kIGEgc2luZ2xlIGluc2NyaXB0aW9uXG4gICAgb3V0cHV0ICh1MCkuIE5vIHBhZGRpbmcgb3V0cHV0cy5cbiAgICDilIzilIDilIDilIDilIDilIDilIDilIDilIDilKzilIDilIDilIDilIDilIDilIDilIDilIDilJBcbiAgICDilIIgICAgICAgIOKUgiB1MCAgICAg4pSCXG4gICAg4pSCICAgICAgciDilLwgICAgICAgIOKUglxuICAgIOKUgiAgICAgICAg4pSc4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSYXG4gICAg4pSCICAgICAgICDilIIgZmVlXG4gICAg4pSU4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSYXG5cblxuKDIpIExhcmdlIGluc2NyaXB0aW9uIGlucHV0IHdpdGggaW5zY3JpcHRpb24gY2xvc2UgdG8gc3RhcnQgb2YgaW5wdXQuXG4gICAgSW5zY3JpcHRpb24gb3V0cHV0IGZvbGxvd2VkIGJ5IGNoYW5nZSBvdXRwdXQgKHUxKSBwYWRkaW5nIHRoZSByZW1haW5pbmcgdmFsdWUuXG5cbiAgICDilIzilIDilIDilIDilIDilIDilIDilIDilIDilKzilIDilIDilIDilIDilIDilIDilIDilIDilJBcbiAgICDilIIgICAgICAgIOKUgiB1MCAgICAg4pSCXG4gICAg4pSCICAgICAgciDilLwgICAgICAgIOKUglxuICAgIOKUgiAgICAgICAg4pSc4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSkXG4gICAg4pSCICAgICAgICDilIIgdTEgICAgIOKUglxuICAgIOKUgiAgICAgICAg4pSCICAgICAgICDilIJcbiAgICDilIIgICAgICAgIOKUgiAgICAgICAg4pSCXG4gICAg4pSCICAgICAgICDilIIgICAgICAgIOKUglxuICAgIOKUgiAgICAgICAg4pSCICAgICAgICDilIJcbiAgICDilIIgICAgICAgIOKUgiAgICAgICAg4pSCXG4gICAg4pSCICAgICAgICDilIIgICAgICAgIOKUglxuICAgIOKUgiAgICAgICAg4pSCICAgICAgICDilIJcbiAgICDilIIgICAgICAgIOKUgiAgICAgICAg4pSCXG4gICAg4pSCICAgICAgICDilIIgICAgICAgIOKUglxuICAgIOKUgiAgICAgICAg4pSc4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSYXG4gICAg4pSCICAgICAgICDilIJcbiAgICDilIIgICAgICAgIOKUgiBmZWVcbiAgICDilIIgICAgICAgIOKUglxuICAgIOKUlOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUmFxuXG5cbigzKSBMYXJnZSBpbnNjcmlwdGlvbiBpbnB1dCB3aXRoIGluc2NyaXB0aW9uIGNsb3NlIHRvIGVuZCBvZiBpbnB1dC5cbiAgICBDaGFuZ2Ugb3V0cHV0IHBhZGRpbmcgc3RhcnQgZm9sbG93ZWQgYnkgaW5zY3JpcHRpb24gb3V0cHV0LlxuXG4gICAg4pSM4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSs4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSQXG4gICAg4pSCICAgICAgICDilIIgdTAgICAgIOKUglxuICAgIOKUgiAgICAgICAg4pSCICAgICAgICDilIJcbiAgICDilIIgICAgICAgIOKUgiAgICAgICAg4pSCXG4gICAg4pSCICAgICAgICDilIIgICAgICAgIOKUglxuICAgIOKUgiAgICAgICAg4pSCICAgICAgICDilIJcbiAgICDilIIgICAgICAgIOKUgiAgICAgICAg4pSCXG4gICAg4pSCICAgICAgICDilIIgICAgICAgIOKUglxuICAgIOKUgiAgICAgICAg4pSCICAgICAgICDilIJcbiAgICDilIIgICAgICAgIOKUgiAgICAgICAg4pSCXG4gICAg4pSCICAgICAgICDilJzilIDilIDilIDilIDilIDilIDilIDilIDilKRcbiAgICDilIIgICAgICByIOKUvCAgICAgICAg4pSCXG4gICAg4pSCICAgICAgICDilIIgdTEgICAgIOKUglxuICAgIOKUgiAgICAgICAg4pSc4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSYXG4gICAg4pSCICAgICAgICDilIJcbiAgICDilIIgICAgICAgIOKUgiBmZWVcbiAgICDilIIgICAgICAgIOKUglxuICAgIOKUlOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUmFxuXG5cbig0KSBMYXJnZSBpbnNjcmlwdGlvbiBpbnB1dCB3aXRoIGluc2NyaXB0aW9uIGluIHRoZSBtaWRkbGUuXG4gICAgSW5zY3JpcHRpb24gaW5wdXQgKHUxKSB3aXRoIHBhZGRpbmcgb24gYm90aCBzaWRlcyAodTAgYW5kIHUyKVxuXG4gICAg4pSM4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSs4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSQXG4gICAg4pSCICAgICAgICDilIIgdTAgICAgIOKUglxuICAgIOKUgiAgICAgICAg4pSCICAgICAgICDilIJcbiAgICDilIIgICAgICAgIOKUgiAgICAgICAg4pSCXG4gICAg4pSCICAgICAgICDilIIgICAgICAgIOKUglxuICAgIOKUgiAgICAgICAg4pSCICAgICAgICDilIJcbiAgICDilIIgICAgICAgIOKUnOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUpFxuICAgIOKUgiAgICAgICAg4pSCIHUxICAgICDilIJcbiAgICDilIIgICAgICByIOKUvCAgICAgICAg4pSCXG4gICAg4pSCICAgICAgICDilJzilIDilIDilIDilIDilIDilIDilIDilIDilKRcbiAgICDilIIgICAgICAgIOKUgiB1MiAgICAg4pSCXG4gICAg4pSCICAgICAgICDilIIgICAgICAgIOKUglxuICAgIOKUgiAgICAgICAg4pSCICAgICAgICDilIJcbiAgICDilIIgICAgICAgIOKUgiAgICAgICAg4pSCXG4gICAg4pSCICAgICAgICDilJzilIDilIDilIDilIDilIDilIDilIDilIDilJhcbiAgICDilIIgICAgICAgIOKUglxuICAgIOKUgiAgICAgICAg4pSCIGZlZVxuICAgIOKUgiAgICAgICAg4pSCXG4gICAg4pSU4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSYXG4gKi9cblxuaW1wb3J0IHsgT3JkT3V0cHV0IH0gZnJvbSAnLi9PcmRPdXRwdXQnO1xuXG5jb25zdCBaRVJPID0gQmlnSW50KDApO1xuY29uc3QgT05FID0gQmlnSW50KDEpO1xuXG5mdW5jdGlvbiBtYXgoYTogYmlnaW50LCBiOiBiaWdpbnQpOiBiaWdpbnQge1xuICByZXR1cm4gYSA8IGIgPyBiIDogYTtcbn1cblxuZnVuY3Rpb24gbWluKGE6IGJpZ2ludCwgYjogYmlnaW50KTogYmlnaW50IHtcbiAgcmV0dXJuIGEgPCBiID8gYSA6IGI7XG59XG5cbmZ1bmN0aW9uIHN1bShhcnI6IGJpZ2ludFtdKTogYmlnaW50IHtcbiAgcmV0dXJuIGFyci5yZWR1Y2UoKGEsIGIpID0+IGEgKyBiLCBaRVJPKTtcbn1cblxuLyoqXG4gKiBBIHJhbmdlIGNvbnN0cmFpbnRcbiAqL1xudHlwZSBQYXJhbWV0ZXJzPFQ+ID0ge1xuICAvKiogUGFkZGluZyBwcmVjZWRpbmcgdGhlIGluc2NyaXB0aW9uIG91dHB1dCAqL1xuICBmaXJzdENoYW5nZU91dHB1dDogVDtcbiAgLyoqIFRoZSBpbnNjcmlwdGlvbiBvdXRwdXQgdGhhdCB3aWxsIGluaGVyaXQgdGhlIGlucHV0IGluc2NyaXB0aW9uICovXG4gIGluc2NyaXB0aW9uT3V0cHV0OiBUO1xuICAvKiogUGFkZGluZyBmb2xsb3dpbmcgdGhlIGluc2NyaXB0aW9uIG91dHB1dCAqL1xuICBzZWNvbmRDaGFuZ2VPdXRwdXQ6IFQ7XG4gIC8qKiBOb3QgYSByZWFsIG91dHB1dCwgdXNlZCBvbmx5IHRvIHNpbXBsaWZ5IGNhbGN1bGF0aW9ucyAqL1xuICBmZWVPdXRwdXQ6IFQ7XG59O1xuXG4vKiogQHJldHVybiBjYW5vbmljYWwgc2VxdWVuY2Ugb2YgcGFyYW1ldGVycyAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvQXJyYXk8VD4ocDogUGFyYW1ldGVyczxUPik6IFtULCBULCBULCBUXSB7XG4gIHJldHVybiBbcC5maXJzdENoYW5nZU91dHB1dCwgcC5pbnNjcmlwdGlvbk91dHB1dCwgcC5zZWNvbmRDaGFuZ2VPdXRwdXQsIHAuZmVlT3V0cHV0XTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRvUGFyYW1ldGVyczxUPihcbiAgZmlyc3RDaGFuZ2VPdXRwdXQ6IFQsXG4gIGluc2NyaXB0aW9uT3V0cHV0OiBULFxuICBzZWNvbmRDaGFuZ2VPdXRwdXQ6IFQsXG4gIGZlZU91dHB1dDogVFxuKTogUGFyYW1ldGVyczxUPiB7XG4gIHJldHVybiB7XG4gICAgZmlyc3RDaGFuZ2VPdXRwdXQsXG4gICAgaW5zY3JpcHRpb25PdXRwdXQsXG4gICAgc2Vjb25kQ2hhbmdlT3V0cHV0LFxuICAgIGZlZU91dHB1dCxcbiAgfTtcbn1cblxuLyoqIEEgZmluaXNoZWQgb3V0cHV0IGxheW91dCAqL1xuZXhwb3J0IHR5cGUgT3V0cHV0TGF5b3V0ID0gUGFyYW1ldGVyczxiaWdpbnQ+O1xuXG4vKipcbiAqIFRyYW5zbGF0ZXMgYSBsYXlvdXQgaW50byBPcmRPdXRwdXRzLiBBYnNlbnQgb3V0cHV0cyBhcmUgc2V0IHRvIGBudWxsYC5cbiAqXG4gKiBAcGFyYW0gaW5zY3JpcHRpb25JbnB1dFxuICogQHBhcmFtIGxheW91dFxuICogQHJldHVybiBPcmRPdXRwdXRzIGZvciBsYXlvdXRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldE9yZE91dHB1dHNGb3JMYXlvdXQoXG4gIGluc2NyaXB0aW9uSW5wdXQ6IE9yZE91dHB1dCxcbiAgbGF5b3V0OiBPdXRwdXRMYXlvdXRcbik6IFBhcmFtZXRlcnM8T3JkT3V0cHV0IHwgbnVsbD4ge1xuICBjb25zdCBvdXRwdXRzID0gaW5zY3JpcHRpb25JbnB1dC5zcGxpdEFsbFdpdGhQYXJhbXModG9BcnJheShsYXlvdXQpLCB7IGV4YWN0OiB0cnVlLCBhbGxvd1plcm86IHRydWUgfSk7XG4gIGlmIChvdXRwdXRzLmxlbmd0aCAhPT0gNCkge1xuICAgIHRocm93IG5ldyBFcnJvcihgdW5leHBlY3RlZCByZXN1bHRgKTtcbiAgfVxuICB0eXBlIFQgPSBPcmRPdXRwdXQgfCBudWxsO1xuICByZXR1cm4gdG9QYXJhbWV0ZXJzKC4uLihvdXRwdXRzIGFzIFtULCBULCBULCBUXSkpO1xufVxuXG4vKipcbiAqIEBwYXJhbSBjb25zdHJhaW50c1xuICogQHBhcmFtIGluc2NyaXB0aW9uSW5wdXRcbiAqIEBwYXJhbSBsYXlvdXRcbiAqIEByZXR1cm4gdHJ1ZSBpZmYgbGF5b3V0IHNhdGlzZmllcyBjb25zdHJhaW50c1xuICovXG5mdW5jdGlvbiBjaGVjayhjb25zdHJhaW50czogQ29uc3RyYWludHMsIGluc2NyaXB0aW9uSW5wdXQ6IE9yZE91dHB1dCwgbGF5b3V0OiBPdXRwdXRMYXlvdXQpOiBib29sZWFuIHtcbiAgaWYgKFxuICAgIChsYXlvdXQuZmlyc3RDaGFuZ2VPdXRwdXQgPT09IFpFUk8gfHwgY29uc3RyYWludHMubWluQ2hhbmdlT3V0cHV0IDw9IGxheW91dC5maXJzdENoYW5nZU91dHB1dCkgJiZcbiAgICAobGF5b3V0LnNlY29uZENoYW5nZU91dHB1dCA9PT0gWkVSTyB8fCBjb25zdHJhaW50cy5taW5DaGFuZ2VPdXRwdXQgPD0gbGF5b3V0LnNlY29uZENoYW5nZU91dHB1dCkgJiZcbiAgICBjb25zdHJhaW50cy5taW5JbnNjcmlwdGlvbk91dHB1dCA8PSBsYXlvdXQuaW5zY3JpcHRpb25PdXRwdXQgJiZcbiAgICBsYXlvdXQuaW5zY3JpcHRpb25PdXRwdXQgPD0gY29uc3RyYWludHMubWF4SW5zY3JpcHRpb25PdXRwdXQgJiZcbiAgICBnZXRGZWVGb3JPdXRwdXRzKGNvbnN0cmFpbnRzLCBbbGF5b3V0LmZpcnN0Q2hhbmdlT3V0cHV0LCBsYXlvdXQuaW5zY3JpcHRpb25PdXRwdXQsIGxheW91dC5zZWNvbmRDaGFuZ2VPdXRwdXRdKSA8PVxuICAgICAgbGF5b3V0LmZlZU91dHB1dCAmJlxuICAgIHN1bSh0b0FycmF5KGxheW91dCkpID09PSBpbnNjcmlwdGlvbklucHV0LnZhbHVlXG4gICkge1xuICAgIC8qIG1ha2Ugc3VyZSBpbnNjcmlwdGlvbiBhY3R1YWxseSBsaWVzIG9uIHRoZSBpbnNjcmlwdGlvbk91dHB1dCAqL1xuICAgIGNvbnN0IG91dHB1dHMgPSBnZXRPcmRPdXRwdXRzRm9yTGF5b3V0KGluc2NyaXB0aW9uSW5wdXQsIGxheW91dCk7XG4gICAgcmV0dXJuIG91dHB1dHMuaW5zY3JpcHRpb25PdXRwdXQ/Lm9yZGluYWxzLmxlbmd0aCA9PT0gMTtcbiAgfVxuXG4gIHJldHVybiBmYWxzZTtcbn1cblxuLyoqXG4gKiBIaWdoLWxldmVsIGNvbnN0cmFpbnRzIGZvciBvdXRwdXQgbGF5b3V0XG4gKi9cbmV4cG9ydCB0eXBlIENvbnN0cmFpbnRzID0ge1xuICBtaW5DaGFuZ2VPdXRwdXQ6IGJpZ2ludDtcbiAgbWluSW5zY3JpcHRpb25PdXRwdXQ6IGJpZ2ludDtcbiAgbWF4SW5zY3JpcHRpb25PdXRwdXQ6IGJpZ2ludDtcbiAgZmVlRml4ZWQ6IGJpZ2ludDtcbiAgZmVlUGVyT3V0cHV0OiBiaWdpbnQ7XG4gIHNhdFBvczogYmlnaW50O1xuICB0b3RhbDogYmlnaW50O1xufTtcblxuZnVuY3Rpb24gZ2V0RmVlRm9yT3V0cHV0cyhwOiB7IGZlZVBlck91dHB1dDogYmlnaW50OyBmZWVGaXhlZDogYmlnaW50IH0sIG91dHB1dHM6IGJpZ2ludFtdKTogYmlnaW50IHtcbiAgcmV0dXJuIG91dHB1dHMucmVkdWNlKChzdW0sIG9WYWx1ZSk6IGJpZ2ludCA9PiBzdW0gKyAob1ZhbHVlID09PSBaRVJPID8gWkVSTyA6IHAuZmVlUGVyT3V0cHV0KSwgcC5mZWVGaXhlZCk7XG59XG5mdW5jdGlvbiBnZXRTdGFydENoYW5nZU91dHB1dChjOiBDb25zdHJhaW50cyk6IGJpZ2ludCB8IG51bGwge1xuICAvLyB3ZSBkb24ndCBuZWVkIGEgY2hhbmdlIHBhZGRpbmcgb3V0cHV0XG4gIGlmIChjLnNhdFBvcyA8IGMubWF4SW5zY3JpcHRpb25PdXRwdXQpIHtcbiAgICByZXR1cm4gWkVSTztcbiAgfVxuICBpZiAoYy5taW5DaGFuZ2VPdXRwdXQgPD0gYy5zYXRQb3MpIHtcbiAgICByZXR1cm4gYy5zYXRQb3M7XG4gIH1cbiAgcmV0dXJuIG51bGw7XG59XG5cbmZ1bmN0aW9uIGdldEluc2NyaXB0aW9uT3V0cHV0KGM6IENvbnN0cmFpbnRzLCBzdGFydENoYW5nZU91dHB1dDogYmlnaW50KTogYmlnaW50IHwgbnVsbCB7XG4gIGNvbnN0IHJlc3VsdCA9IG1pbihjLm1heEluc2NyaXB0aW9uT3V0cHV0LCBtYXgoYy5taW5JbnNjcmlwdGlvbk91dHB1dCwgYy5zYXRQb3MgLSBzdGFydENoYW5nZU91dHB1dCArIE9ORSkpO1xuICBpZiAoYy5zYXRQb3MgPCBzdGFydENoYW5nZU91dHB1dCB8fCBzdGFydENoYW5nZU91dHB1dCArIHJlc3VsdCA8IGMuc2F0UG9zKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgLy8gaWYgaXMgbm90IHdvcnRoIGNyZWF0aW5nIGFuIGVuZCBjaGFuZ2Ugb3V0cHV0LCBsZXQncyBtYXhpbWl6ZSB0aGUgaW5zY3JpcHRpb24gb3V0cHV0XG4gIGlmIChnZXRFbmRDaGFuZ2VPdXRwdXQoYywgc3RhcnRDaGFuZ2VPdXRwdXQsIHJlc3VsdCkgPT09IFpFUk8pIHtcbiAgICBjb25zdCByZW1haW5kZXIgPSBjLnRvdGFsIC0gc3RhcnRDaGFuZ2VPdXRwdXQgLSBnZXRGZWVGb3JPdXRwdXRzKGMsIFtzdGFydENoYW5nZU91dHB1dCwgcmVzdWx0XSk7XG4gICAgcmV0dXJuIG1pbihyZW1haW5kZXIsIGMubWF4SW5zY3JpcHRpb25PdXRwdXQpO1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbmZ1bmN0aW9uIGdldEVuZENoYW5nZU91dHB1dChjOiBDb25zdHJhaW50cywgc3RhcnRDaGFuZ2VPdXRwdXQ6IGJpZ2ludCwgaW5zY3JpcHRpb25PdXRwdXQ6IGJpZ2ludCk6IGJpZ2ludCB8IG51bGwge1xuICBjb25zdCByZW1haW5kZXIgPSBjLnRvdGFsIC0gc3VtKFtzdGFydENoYW5nZU91dHB1dCwgaW5zY3JpcHRpb25PdXRwdXRdKTtcbiAgY29uc3QgbWluRmVlV2l0aG91dFNlY29uZE91dHB1dCA9IGdldEZlZUZvck91dHB1dHMoYywgW3N0YXJ0Q2hhbmdlT3V0cHV0LCBpbnNjcmlwdGlvbk91dHB1dF0pO1xuICBjb25zdCBtaW5GZWVXaXRoU2Vjb25kT3V0cHV0ID0gZ2V0RmVlRm9yT3V0cHV0cyhjLCBbc3RhcnRDaGFuZ2VPdXRwdXQsIGluc2NyaXB0aW9uT3V0cHV0LCBjLm1pbkNoYW5nZU91dHB1dF0pO1xuICBpZiAocmVtYWluZGVyIDwgbWluRmVlV2l0aG91dFNlY29uZE91dHB1dCkge1xuICAgIC8vIFdlIGNhbm5vdCBldmVuIHBheSB0aGUgZmVlIGZvciB0aGUgb3V0cHV0KHMpIHdlIGhhdmUgc28gZmFyLlxuICAgIHJldHVybiBudWxsO1xuICB9XG4gIGlmIChyZW1haW5kZXIgLSBtaW5GZWVXaXRoU2Vjb25kT3V0cHV0IDwgYy5taW5DaGFuZ2VPdXRwdXQpIHtcbiAgICAvLyBUaGUgcmVtYWluZGVyIGlzIHRvbyBzbWFsbCB0byBwYXkgZm9yIHRoZSBlbmQgY2hhbmdlIG91dHB1dC4gTGV0J3Mgc2tpcCBpdCBhbmQgcGF5IGEgaGlnaGVyIGZlZS5cbiAgICByZXR1cm4gWkVSTztcbiAgfVxuICAvLyBsZXQncyB1c2UgYXMgbXVjaCBhcyB3ZSBjYW4gZm9yIGZlZSB3aGlsZSBsZWF2aW5nIGVub3VnaCBmb3IgZmVlXG4gIHJldHVybiByZW1haW5kZXIgLSBtaW5GZWVXaXRoU2Vjb25kT3V0cHV0O1xufVxuXG5mdW5jdGlvbiBnZXRGZWVPdXRwdXQoXG4gIGM6IENvbnN0cmFpbnRzLFxuICBzdGFydENoYW5nZU91dHB1dDogYmlnaW50LFxuICBpbnNjcmlwdGlvbk91dHB1dDogYmlnaW50LFxuICBlbmRDaGFuZ2VPdXRwdXQ6IGJpZ2ludFxuKTogYmlnaW50IHwgbnVsbCB7XG4gIGNvbnN0IG1pbkZlZSA9IGdldEZlZUZvck91dHB1dHMoYywgW3N0YXJ0Q2hhbmdlT3V0cHV0LCBpbnNjcmlwdGlvbk91dHB1dCwgZW5kQ2hhbmdlT3V0cHV0XSk7XG4gIGNvbnN0IHJlbWFpbmRlciA9IGMudG90YWwgLSBzdW0oW3N0YXJ0Q2hhbmdlT3V0cHV0LCBpbnNjcmlwdGlvbk91dHB1dCwgZW5kQ2hhbmdlT3V0cHV0XSk7XG4gIGlmIChyZW1haW5kZXIgPCBtaW5GZWUpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICByZXR1cm4gcmVtYWluZGVyO1xufVxuXG4vKipcbiAqIEBwYXJhbSBpbnNjcmlwdGlvbklucHV0XG4gKiBAcGFyYW0gc2VhcmNoXG4gKiBAcmV0dXJuIGEgc29sdXRpb24gdGhhdCBzYXRpc2ZpZXMgY29uc3RyYWludHMuIElmIG5vIHNvbHV0aW9uIGNhbiBiZSBmb3VuZCwgcmV0dXJuIGB1bmRlZmluZWRgLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZmluZE91dHB1dExheW91dChcbiAgaW5zY3JpcHRpb25JbnB1dDogT3JkT3V0cHV0LFxuICBzZWFyY2g6IE9taXQ8Q29uc3RyYWludHMsICdzYXRQb3MnIHwgJ3RvdGFsJz5cbik6IE91dHB1dExheW91dCB8IHVuZGVmaW5lZCB7XG4gIGlmIChpbnNjcmlwdGlvbklucHV0Lm9yZGluYWxzLmxlbmd0aCAhPT0gMSkge1xuICAgIHRocm93IG5ldyBFcnJvcihgdW5leHBlY3RlZCBvcmRpbmFsIGNvdW50ICR7aW5zY3JpcHRpb25JbnB1dC5vcmRpbmFscy5sZW5ndGh9YCk7XG4gIH1cbiAgaWYgKGluc2NyaXB0aW9uSW5wdXQub3JkaW5hbHNbMF0uc2l6ZSgpICE9PSBPTkUpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYG9ubHkgc2luZ2xlLXNhdG9zaGkgaW5zY3JpcHRpb25zIGFyZSBzdXBwb3J0ZWRgKTtcbiAgfVxuXG4gIGNvbnN0IHNhdFBvcyA9IGluc2NyaXB0aW9uSW5wdXQub3JkaW5hbHNbMF0uc3RhcnQ7XG4gIGNvbnN0IHRvdGFsID0gaW5zY3JpcHRpb25JbnB1dC52YWx1ZTtcblxuICBjb25zdCBjb25zdHJhaW50czogQ29uc3RyYWludHMgPSB7IC4uLnNlYXJjaCwgc2F0UG9zLCB0b3RhbCB9O1xuXG4gIGNvbnN0IHN0YXJ0Q2hhbmdlT3V0cHV0ID0gZ2V0U3RhcnRDaGFuZ2VPdXRwdXQoY29uc3RyYWludHMpO1xuICBpZiAoc3RhcnRDaGFuZ2VPdXRwdXQgPT09IG51bGwpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgY29uc3QgaW5zY3JpcHRpb25PdXRwdXQgPSBnZXRJbnNjcmlwdGlvbk91dHB1dChjb25zdHJhaW50cywgc3RhcnRDaGFuZ2VPdXRwdXQpO1xuICBpZiAoaW5zY3JpcHRpb25PdXRwdXQgPT09IG51bGwpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgY29uc3QgZW5kQ2hhbmdlT3V0cHV0ID0gZ2V0RW5kQ2hhbmdlT3V0cHV0KGNvbnN0cmFpbnRzLCBzdGFydENoYW5nZU91dHB1dCwgaW5zY3JpcHRpb25PdXRwdXQpO1xuICBpZiAoZW5kQ2hhbmdlT3V0cHV0ID09PSBudWxsKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIGNvbnN0IGZlZU91dHB1dCA9IGdldEZlZU91dHB1dChjb25zdHJhaW50cywgc3RhcnRDaGFuZ2VPdXRwdXQsIGluc2NyaXB0aW9uT3V0cHV0LCBlbmRDaGFuZ2VPdXRwdXQpO1xuICBpZiAoZmVlT3V0cHV0ID09PSBudWxsKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIGNvbnN0IHJlc3VsdCA9IHRvUGFyYW1ldGVycyhzdGFydENoYW5nZU91dHB1dCwgaW5zY3JpcHRpb25PdXRwdXQsIGVuZENoYW5nZU91dHB1dCwgZmVlT3V0cHV0KTtcbiAgaWYgKCFjaGVjayhjb25zdHJhaW50cywgaW5zY3JpcHRpb25JbnB1dCwgcmVzdWx0KSkge1xuICAgIHRocm93IG5ldyBFcnJvcihgaW52YWxpZCByZXN1bHRgKTtcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuIl19
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"SatPoint.d.ts","sourceRoot":"","sources":["../../src/SatPoint.ts"],"names":[],"mappings":"AAaA,oBAAY,QAAQ,GAAG,GAAG,MAAM,IAAI,MAAM,IAAI,MAAM,EAAE,CAAC;AAEvD,wBAAgB,aAAa,CAAC,CAAC,EAAE,QAAQ,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAiBzF;AAED,wBAAgB,cAAc,CAAC,CAAC,EAAE;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GAAG,QAAQ,CAE1F;AAED,wBAAgB,UAAU,CAAC,CAAC,EAAE,MAAM,GAAG,CAAC,IAAI,QAAQ,CAOnD"}
|
package/dist/src/SatPoint.js
DELETED
|
@@ -1,49 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.isSatPoint = exports.formatSatPoint = exports.parseSatPoint = void 0;
|
|
4
|
-
/*
|
|
5
|
-
|
|
6
|
-
https://github.com/casey/ord/blob/master/bip.mediawiki#terminology-and-notation
|
|
7
|
-
|
|
8
|
-
> A satpoint may be used to indicate the location of a sat within an output.
|
|
9
|
-
> A satpoint consists of an outpoint, i.e., a transaction ID and output index, with the addition of
|
|
10
|
-
> the offset of the ordinal within that output. For example, if the sat in question is at offset 6
|
|
11
|
-
> in the first output of a transaction, its satpoint is:
|
|
12
|
-
> `680df1e4d43016571e504b0b142ee43c5c0b83398a97bdcfd94ea6f287322d22:0:6`
|
|
13
|
-
|
|
14
|
-
*/
|
|
15
|
-
const utxo_lib_1 = require("@bitgo-beta/utxo-lib");
|
|
16
|
-
function parseSatPoint(p) {
|
|
17
|
-
const parts = p.split(':');
|
|
18
|
-
if (parts.length !== 3) {
|
|
19
|
-
throw new Error(`expected format txid:vout:sat`);
|
|
20
|
-
}
|
|
21
|
-
const [txid, vout, offsetStr] = parts;
|
|
22
|
-
const offset = BigInt(offsetStr);
|
|
23
|
-
if (offset.toString() !== offsetStr) {
|
|
24
|
-
throw new Error(`SatPoint offset must be base-10`);
|
|
25
|
-
}
|
|
26
|
-
if (offset < 0) {
|
|
27
|
-
throw new Error(`SatPoint offset must be positive`);
|
|
28
|
-
}
|
|
29
|
-
return {
|
|
30
|
-
...utxo_lib_1.bitgo.parseOutputId([txid, vout].join(':')),
|
|
31
|
-
offset,
|
|
32
|
-
};
|
|
33
|
-
}
|
|
34
|
-
exports.parseSatPoint = parseSatPoint;
|
|
35
|
-
function formatSatPoint(p) {
|
|
36
|
-
return `${p.txid}:${p.vout}:${p.offset}`;
|
|
37
|
-
}
|
|
38
|
-
exports.formatSatPoint = formatSatPoint;
|
|
39
|
-
function isSatPoint(v) {
|
|
40
|
-
try {
|
|
41
|
-
parseSatPoint(v);
|
|
42
|
-
return true;
|
|
43
|
-
}
|
|
44
|
-
catch {
|
|
45
|
-
return false;
|
|
46
|
-
}
|
|
47
|
-
}
|
|
48
|
-
exports.isSatPoint = isSatPoint;
|
|
49
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU2F0UG9pbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvU2F0UG9pbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUE7Ozs7Ozs7Ozs7RUFVRTtBQUNGLG1EQUE2QztBQUk3QyxTQUFnQixhQUFhLENBQUMsQ0FBVztJQUN2QyxNQUFNLEtBQUssR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQzNCLElBQUksS0FBSyxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUU7UUFDdEIsTUFBTSxJQUFJLEtBQUssQ0FBQywrQkFBK0IsQ0FBQyxDQUFDO0tBQ2xEO0lBQ0QsTUFBTSxDQUFDLElBQUksRUFBRSxJQUFJLEVBQUUsU0FBUyxDQUFDLEdBQUcsS0FBSyxDQUFDO0lBQ3RDLE1BQU0sTUFBTSxHQUFHLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUNqQyxJQUFJLE1BQU0sQ0FBQyxRQUFRLEVBQUUsS0FBSyxTQUFTLEVBQUU7UUFDbkMsTUFBTSxJQUFJLEtBQUssQ0FBQyxpQ0FBaUMsQ0FBQyxDQUFDO0tBQ3BEO0lBQ0QsSUFBSSxNQUFNLEdBQUcsQ0FBQyxFQUFFO1FBQ2QsTUFBTSxJQUFJLEtBQUssQ0FBQyxrQ0FBa0MsQ0FBQyxDQUFDO0tBQ3JEO0lBQ0QsT0FBTztRQUNMLEdBQUcsZ0JBQUssQ0FBQyxhQUFhLENBQUMsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQzlDLE1BQU07S0FDUCxDQUFDO0FBQ0osQ0FBQztBQWpCRCxzQ0FpQkM7QUFFRCxTQUFnQixjQUFjLENBQUMsQ0FBaUQ7SUFDOUUsT0FBTyxHQUFHLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLENBQUMsTUFBTSxFQUFXLENBQUM7QUFDcEQsQ0FBQztBQUZELHdDQUVDO0FBRUQsU0FBZ0IsVUFBVSxDQUFDLENBQVM7SUFDbEMsSUFBSTtRQUNGLGFBQWEsQ0FBQyxDQUFhLENBQUMsQ0FBQztRQUM3QixPQUFPLElBQUksQ0FBQztLQUNiO0lBQUMsTUFBTTtRQUNOLE9BQU8sS0FBSyxDQUFDO0tBQ2Q7QUFDSCxDQUFDO0FBUEQsZ0NBT0MiLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuXG5odHRwczovL2dpdGh1Yi5jb20vY2FzZXkvb3JkL2Jsb2IvbWFzdGVyL2JpcC5tZWRpYXdpa2kjdGVybWlub2xvZ3ktYW5kLW5vdGF0aW9uXG5cbj4gQSBzYXRwb2ludCBtYXkgYmUgdXNlZCB0byBpbmRpY2F0ZSB0aGUgbG9jYXRpb24gb2YgYSBzYXQgd2l0aGluIGFuIG91dHB1dC5cbj4gQSBzYXRwb2ludCBjb25zaXN0cyBvZiBhbiBvdXRwb2ludCwgaS5lLiwgYSB0cmFuc2FjdGlvbiBJRCBhbmQgb3V0cHV0IGluZGV4LCB3aXRoIHRoZSBhZGRpdGlvbiBvZlxuPiB0aGUgb2Zmc2V0IG9mIHRoZSBvcmRpbmFsIHdpdGhpbiB0aGF0IG91dHB1dC4gRm9yIGV4YW1wbGUsIGlmIHRoZSBzYXQgaW4gcXVlc3Rpb24gaXMgYXQgb2Zmc2V0IDZcbj4gaW4gdGhlIGZpcnN0IG91dHB1dCBvZiBhIHRyYW5zYWN0aW9uLCBpdHMgc2F0cG9pbnQgaXM6XG4+IGA2ODBkZjFlNGQ0MzAxNjU3MWU1MDRiMGIxNDJlZTQzYzVjMGI4MzM5OGE5N2JkY2ZkOTRlYTZmMjg3MzIyZDIyOjA6NmBcblxuKi9cbmltcG9ydCB7IGJpdGdvIH0gZnJvbSAnQGJpdGdvLWJldGEvdXR4by1saWInO1xuXG5leHBvcnQgdHlwZSBTYXRQb2ludCA9IGAke3N0cmluZ306JHtudW1iZXJ9OiR7YmlnaW50fWA7XG5cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZVNhdFBvaW50KHA6IFNhdFBvaW50KTogeyB0eGlkOiBzdHJpbmc7IHZvdXQ6IG51bWJlcjsgb2Zmc2V0OiBiaWdpbnQgfSB7XG4gIGNvbnN0IHBhcnRzID0gcC5zcGxpdCgnOicpO1xuICBpZiAocGFydHMubGVuZ3RoICE9PSAzKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBleHBlY3RlZCBmb3JtYXQgdHhpZDp2b3V0OnNhdGApO1xuICB9XG4gIGNvbnN0IFt0eGlkLCB2b3V0LCBvZmZzZXRTdHJdID0gcGFydHM7XG4gIGNvbnN0IG9mZnNldCA9IEJpZ0ludChvZmZzZXRTdHIpO1xuICBpZiAob2Zmc2V0LnRvU3RyaW5nKCkgIT09IG9mZnNldFN0cikge1xuICAgIHRocm93IG5ldyBFcnJvcihgU2F0UG9pbnQgb2Zmc2V0IG11c3QgYmUgYmFzZS0xMGApO1xuICB9XG4gIGlmIChvZmZzZXQgPCAwKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBTYXRQb2ludCBvZmZzZXQgbXVzdCBiZSBwb3NpdGl2ZWApO1xuICB9XG4gIHJldHVybiB7XG4gICAgLi4uYml0Z28ucGFyc2VPdXRwdXRJZChbdHhpZCwgdm91dF0uam9pbignOicpKSxcbiAgICBvZmZzZXQsXG4gIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmb3JtYXRTYXRQb2ludChwOiB7IHR4aWQ6IHN0cmluZzsgdm91dDogbnVtYmVyOyBvZmZzZXQ6IGJpZ2ludCB9KTogU2F0UG9pbnQge1xuICByZXR1cm4gYCR7cC50eGlkfToke3Audm91dH06JHtwLm9mZnNldH1gIGFzIGNvbnN0O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNTYXRQb2ludCh2OiBzdHJpbmcpOiB2IGlzIFNhdFBvaW50IHtcbiAgdHJ5IHtcbiAgICBwYXJzZVNhdFBvaW50KHYgYXMgU2F0UG9pbnQpO1xuICAgIHJldHVybiB0cnVlO1xuICB9IGNhdGNoIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn1cbiJdfQ==
|
package/dist/src/SatRange.js
DELETED
|
@@ -1,58 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.SatRange = exports.InvalidSatRange = void 0;
|
|
4
|
-
class InvalidSatRange extends Error {
|
|
5
|
-
constructor(message, start, end) {
|
|
6
|
-
super(message);
|
|
7
|
-
this.start = start;
|
|
8
|
-
this.end = end;
|
|
9
|
-
}
|
|
10
|
-
}
|
|
11
|
-
exports.InvalidSatRange = InvalidSatRange;
|
|
12
|
-
function toRange(v) {
|
|
13
|
-
return typeof v === 'bigint' ? new SatRange(v, v) : v;
|
|
14
|
-
}
|
|
15
|
-
/**
|
|
16
|
-
* Range of satoshi, inclusive.
|
|
17
|
-
* Inscriptions have start === end.
|
|
18
|
-
*/
|
|
19
|
-
class SatRange {
|
|
20
|
-
constructor(start, end) {
|
|
21
|
-
this.start = start;
|
|
22
|
-
this.end = end;
|
|
23
|
-
if (start < 0 || end < 0 || end < start) {
|
|
24
|
-
throw new InvalidSatRange(`Invalid SatRange [${start}, ${end}]`, start, end);
|
|
25
|
-
}
|
|
26
|
-
}
|
|
27
|
-
/**
|
|
28
|
-
* @param offset
|
|
29
|
-
* @return SatRange with start and end shifted by offset
|
|
30
|
-
*/
|
|
31
|
-
shiftedBy(offset) {
|
|
32
|
-
return new SatRange(this.start + offset, this.end + offset);
|
|
33
|
-
}
|
|
34
|
-
/** @return true iff this intersects with _other_ */
|
|
35
|
-
intersectsWith(other) {
|
|
36
|
-
other = toRange(other);
|
|
37
|
-
if (this.start <= other.start) {
|
|
38
|
-
return other.start <= this.end;
|
|
39
|
-
}
|
|
40
|
-
return other.intersectsWith(this);
|
|
41
|
-
}
|
|
42
|
-
/** @return true iff this is superset of _other_. */
|
|
43
|
-
isSupersetOf(other) {
|
|
44
|
-
other = toRange(other);
|
|
45
|
-
return this.start <= other.start && other.end <= this.end;
|
|
46
|
-
}
|
|
47
|
-
toString() {
|
|
48
|
-
if (this.start === this.end) {
|
|
49
|
-
return `[${this.start}]`;
|
|
50
|
-
}
|
|
51
|
-
return `[${this.start}..${this.end}]`;
|
|
52
|
-
}
|
|
53
|
-
size() {
|
|
54
|
-
return this.end - this.start + BigInt(1);
|
|
55
|
-
}
|
|
56
|
-
}
|
|
57
|
-
exports.SatRange = SatRange;
|
|
58
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU2F0UmFuZ2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvU2F0UmFuZ2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsTUFBYSxlQUFnQixTQUFRLEtBQUs7SUFDeEMsWUFBWSxPQUFlLEVBQVMsS0FBYSxFQUFTLEdBQVc7UUFDbkUsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBRG1CLFVBQUssR0FBTCxLQUFLLENBQVE7UUFBUyxRQUFHLEdBQUgsR0FBRyxDQUFRO0lBRXJFLENBQUM7Q0FDRjtBQUpELDBDQUlDO0FBRUQsU0FBUyxPQUFPLENBQUMsQ0FBb0I7SUFDbkMsT0FBTyxPQUFPLENBQUMsS0FBSyxRQUFRLENBQUMsQ0FBQyxDQUFDLElBQUksUUFBUSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3hELENBQUM7QUFFRDs7O0dBR0c7QUFDSCxNQUFhLFFBQVE7SUFDbkIsWUFBbUIsS0FBYSxFQUFTLEdBQVc7UUFBakMsVUFBSyxHQUFMLEtBQUssQ0FBUTtRQUFTLFFBQUcsR0FBSCxHQUFHLENBQVE7UUFDbEQsSUFBSSxLQUFLLEdBQUcsQ0FBQyxJQUFJLEdBQUcsR0FBRyxDQUFDLElBQUksR0FBRyxHQUFHLEtBQUssRUFBRTtZQUN2QyxNQUFNLElBQUksZUFBZSxDQUFDLHFCQUFxQixLQUFLLEtBQUssR0FBRyxHQUFHLEVBQUUsS0FBSyxFQUFFLEdBQUcsQ0FBQyxDQUFDO1NBQzlFO0lBQ0gsQ0FBQztJQUVEOzs7T0FHRztJQUNILFNBQVMsQ0FBQyxNQUFjO1FBQ3RCLE9BQU8sSUFBSSxRQUFRLENBQUMsSUFBSSxDQUFDLEtBQUssR0FBRyxNQUFNLEVBQUUsSUFBSSxDQUFDLEdBQUcsR0FBRyxNQUFNLENBQUMsQ0FBQztJQUM5RCxDQUFDO0lBRUQsb0RBQW9EO0lBQ3BELGNBQWMsQ0FBQyxLQUF3QjtRQUNyQyxLQUFLLEdBQUcsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3ZCLElBQUksSUFBSSxDQUFDLEtBQUssSUFBSSxLQUFLLENBQUMsS0FBSyxFQUFFO1lBQzdCLE9BQU8sS0FBSyxDQUFDLEtBQUssSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDO1NBQ2hDO1FBQ0QsT0FBTyxLQUFLLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3BDLENBQUM7SUFFRCxvREFBb0Q7SUFDcEQsWUFBWSxDQUFDLEtBQXdCO1FBQ25DLEtBQUssR0FBRyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDdkIsT0FBTyxJQUFJLENBQUMsS0FBSyxJQUFJLEtBQUssQ0FBQyxLQUFLLElBQUksS0FBSyxDQUFDLEdBQUcsSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDO0lBQzVELENBQUM7SUFFRCxRQUFRO1FBQ04sSUFBSSxJQUFJLENBQUMsS0FBSyxLQUFLLElBQUksQ0FBQyxHQUFHLEVBQUU7WUFDM0IsT0FBTyxJQUFJLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQztTQUMxQjtRQUNELE9BQU8sSUFBSSxJQUFJLENBQUMsS0FBSyxLQUFLLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQztJQUN4QyxDQUFDO0lBRUQsSUFBSTtRQUNGLE9BQU8sSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsS0FBSyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUMzQyxDQUFDO0NBQ0Y7QUF4Q0QsNEJBd0NDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGNsYXNzIEludmFsaWRTYXRSYW5nZSBleHRlbmRzIEVycm9yIHtcbiAgY29uc3RydWN0b3IobWVzc2FnZTogc3RyaW5nLCBwdWJsaWMgc3RhcnQ6IGJpZ2ludCwgcHVibGljIGVuZDogYmlnaW50KSB7XG4gICAgc3VwZXIobWVzc2FnZSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gdG9SYW5nZSh2OiBiaWdpbnQgfCBTYXRSYW5nZSk6IFNhdFJhbmdlIHtcbiAgcmV0dXJuIHR5cGVvZiB2ID09PSAnYmlnaW50JyA/IG5ldyBTYXRSYW5nZSh2LCB2KSA6IHY7XG59XG5cbi8qKlxuICogUmFuZ2Ugb2Ygc2F0b3NoaSwgaW5jbHVzaXZlLlxuICogSW5zY3JpcHRpb25zIGhhdmUgc3RhcnQgPT09IGVuZC5cbiAqL1xuZXhwb3J0IGNsYXNzIFNhdFJhbmdlIHtcbiAgY29uc3RydWN0b3IocHVibGljIHN0YXJ0OiBiaWdpbnQsIHB1YmxpYyBlbmQ6IGJpZ2ludCkge1xuICAgIGlmIChzdGFydCA8IDAgfHwgZW5kIDwgMCB8fCBlbmQgPCBzdGFydCkge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRTYXRSYW5nZShgSW52YWxpZCBTYXRSYW5nZSBbJHtzdGFydH0sICR7ZW5kfV1gLCBzdGFydCwgZW5kKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIG9mZnNldFxuICAgKiBAcmV0dXJuIFNhdFJhbmdlIHdpdGggc3RhcnQgYW5kIGVuZCBzaGlmdGVkIGJ5IG9mZnNldFxuICAgKi9cbiAgc2hpZnRlZEJ5KG9mZnNldDogYmlnaW50KTogU2F0UmFuZ2Uge1xuICAgIHJldHVybiBuZXcgU2F0UmFuZ2UodGhpcy5zdGFydCArIG9mZnNldCwgdGhpcy5lbmQgKyBvZmZzZXQpO1xuICB9XG5cbiAgLyoqIEByZXR1cm4gdHJ1ZSBpZmYgdGhpcyBpbnRlcnNlY3RzIHdpdGggX290aGVyXyAqL1xuICBpbnRlcnNlY3RzV2l0aChvdGhlcjogYmlnaW50IHwgU2F0UmFuZ2UpOiBib29sZWFuIHtcbiAgICBvdGhlciA9IHRvUmFuZ2Uob3RoZXIpO1xuICAgIGlmICh0aGlzLnN0YXJ0IDw9IG90aGVyLnN0YXJ0KSB7XG4gICAgICByZXR1cm4gb3RoZXIuc3RhcnQgPD0gdGhpcy5lbmQ7XG4gICAgfVxuICAgIHJldHVybiBvdGhlci5pbnRlcnNlY3RzV2l0aCh0aGlzKTtcbiAgfVxuXG4gIC8qKiBAcmV0dXJuIHRydWUgaWZmIHRoaXMgaXMgc3VwZXJzZXQgb2YgX290aGVyXy4gKi9cbiAgaXNTdXBlcnNldE9mKG90aGVyOiBiaWdpbnQgfCBTYXRSYW5nZSk6IGJvb2xlYW4ge1xuICAgIG90aGVyID0gdG9SYW5nZShvdGhlcik7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQgPD0gb3RoZXIuc3RhcnQgJiYgb3RoZXIuZW5kIDw9IHRoaXMuZW5kO1xuICB9XG5cbiAgdG9TdHJpbmcoKTogc3RyaW5nIHtcbiAgICBpZiAodGhpcy5zdGFydCA9PT0gdGhpcy5lbmQpIHtcbiAgICAgIHJldHVybiBgWyR7dGhpcy5zdGFydH1dYDtcbiAgICB9XG4gICAgcmV0dXJuIGBbJHt0aGlzLnN0YXJ0fS4uJHt0aGlzLmVuZH1dYDtcbiAgfVxuXG4gIHNpemUoKTogYmlnaW50IHtcbiAgICByZXR1cm4gdGhpcy5lbmQgLSB0aGlzLnN0YXJ0ICsgQmlnSW50KDEpO1xuICB9XG59XG4iXX0=
|
package/dist/src/combinations.js
DELETED
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.powerset = void 0;
|
|
4
|
-
function powerset(arr) {
|
|
5
|
-
if (arr.length === 0) {
|
|
6
|
-
return [[]];
|
|
7
|
-
}
|
|
8
|
-
else {
|
|
9
|
-
const [a, ...rest] = arr;
|
|
10
|
-
return powerset(rest).flatMap((s) => [[a, ...s], s]);
|
|
11
|
-
}
|
|
12
|
-
}
|
|
13
|
-
exports.powerset = powerset;
|
|
14
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tYmluYXRpb25zLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NvbWJpbmF0aW9ucy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxTQUFnQixRQUFRLENBQUksR0FBUTtJQUNsQyxJQUFJLEdBQUcsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFO1FBQ3BCLE9BQU8sQ0FBQyxFQUFFLENBQUMsQ0FBQztLQUNiO1NBQU07UUFDTCxNQUFNLENBQUMsQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDO1FBQ3pCLE9BQU8sUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7S0FDdEQ7QUFDSCxDQUFDO0FBUEQsNEJBT0MiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgZnVuY3Rpb24gcG93ZXJzZXQ8VD4oYXJyOiBUW10pOiBUW11bXSB7XG4gIGlmIChhcnIubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIFtbXV07XG4gIH0gZWxzZSB7XG4gICAgY29uc3QgW2EsIC4uLnJlc3RdID0gYXJyO1xuICAgIHJldHVybiBwb3dlcnNldChyZXN0KS5mbGF0TWFwKChzKSA9PiBbW2EsIC4uLnNdLCBzXSk7XG4gIH1cbn1cbiJdfQ==
|
package/dist/src/index.js
DELETED
|
@@ -1,23 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
/**
|
|
3
|
-
* https://github.com/casey/ord/blob/0.5.1/bip.mediawiki
|
|
4
|
-
*/
|
|
5
|
-
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
6
|
-
if (k2 === undefined) k2 = k;
|
|
7
|
-
Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
|
|
8
|
-
}) : (function(o, m, k, k2) {
|
|
9
|
-
if (k2 === undefined) k2 = k;
|
|
10
|
-
o[k2] = m[k];
|
|
11
|
-
}));
|
|
12
|
-
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
13
|
-
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
14
|
-
};
|
|
15
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
16
|
-
exports.inscriptions = void 0;
|
|
17
|
-
__exportStar(require("./SatRange"), exports);
|
|
18
|
-
__exportStar(require("./OrdOutput"), exports);
|
|
19
|
-
__exportStar(require("./OutputLayout"), exports);
|
|
20
|
-
__exportStar(require("./SatPoint"), exports);
|
|
21
|
-
__exportStar(require("./psbt"), exports);
|
|
22
|
-
exports.inscriptions = require("./inscriptions");
|
|
23
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBOztHQUVHOzs7Ozs7Ozs7Ozs7O0FBRUgsNkNBQTJCO0FBQzNCLDhDQUE0QjtBQUM1QixpREFBK0I7QUFDL0IsNkNBQTJCO0FBQzNCLHlDQUF1QjtBQUN2QixpREFBK0MiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIGh0dHBzOi8vZ2l0aHViLmNvbS9jYXNleS9vcmQvYmxvYi8wLjUuMS9iaXAubWVkaWF3aWtpXG4gKi9cblxuZXhwb3J0ICogZnJvbSAnLi9TYXRSYW5nZSc7XG5leHBvcnQgKiBmcm9tICcuL09yZE91dHB1dCc7XG5leHBvcnQgKiBmcm9tICcuL091dHB1dExheW91dCc7XG5leHBvcnQgKiBmcm9tICcuL1NhdFBvaW50JztcbmV4cG9ydCAqIGZyb20gJy4vcHNidCc7XG5leHBvcnQgKiBhcyBpbnNjcmlwdGlvbnMgZnJvbSAnLi9pbnNjcmlwdGlvbnMnO1xuIl19
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"inscriptions.d.ts","sourceRoot":"","sources":["../../src/inscriptions.ts"],"names":[],"mappings":";AAOA,OAAO,EAKL,OAAO,EAKR,MAAM,sBAAsB,CAAC;AAC9B,OAAO,KAAK,OAAO,MAAM,sBAAsB,CAAC;AAChD,OAAO,EAAE,6BAA6B,EAAE,MAAM,sBAAsB,CAAC;AAqGrE;;;;;;GAMG;AACH,wBAAgB,2BAA2B,CACzC,MAAM,EAAE,MAAM,EACd,WAAW,EAAE,MAAM,EACnB,eAAe,EAAE,MAAM,EACvB,OAAO,EAAE,OAAO,GACf,6BAA6B,CAuB/B;AAED;;;;;GAKG;AACH,wBAAgB,gCAAgC,CAAC,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,eAAe,EAAE,MAAM,GAAG,MAAM,CAKrH;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,qBAAqB,CACnC,UAAU,EAAE,MAAM,EAClB,aAAa,EAAE,OAAO,CAAC,KAAK,CAAC,aAAa,EAC1C,aAAa,EAAE,MAAM,EACrB,gBAAgB,EAAE,MAAM,EACxB,gBAAgB,EAAE,MAAM,EACxB,OAAO,EAAE,OAAO,GACf,OAAO,CAAC,KAAK,CAAC,QAAQ,CA2BxB"}
|
package/dist/src/inscriptions.js
DELETED
|
@@ -1,169 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
/*
|
|
3
|
-
Functions for dealing with inscriptions.
|
|
4
|
-
|
|
5
|
-
See https://docs.ordinals.com/inscriptions.html
|
|
6
|
-
*/
|
|
7
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
8
|
-
exports.signRevealTransaction = exports.createOutputScriptForInscription = exports.createInscriptionRevealData = void 0;
|
|
9
|
-
const assert = require("assert");
|
|
10
|
-
const utxo_lib_1 = require("@bitgo-beta/utxo-lib");
|
|
11
|
-
const utxolib = require("@bitgo-beta/utxo-lib");
|
|
12
|
-
const OPS = utxo_lib_1.script.OPS;
|
|
13
|
-
const MAX_LENGTH_TAP_DATA_PUSH = 520;
|
|
14
|
-
/**
|
|
15
|
-
* The max size of an individual OP_PUSH in a Taproot script is 520 bytes. This
|
|
16
|
-
* function splits inscriptionData into an array buffer of 520 bytes length.
|
|
17
|
-
* https://docs.ordinals.com/inscriptions.html
|
|
18
|
-
* @param inscriptionData
|
|
19
|
-
* @param chunkSize
|
|
20
|
-
*/
|
|
21
|
-
function splitBuffer(inscriptionData, chunkSize) {
|
|
22
|
-
const pushDataBuffers = [];
|
|
23
|
-
for (let i = 0; i < inscriptionData.length; i += chunkSize) {
|
|
24
|
-
pushDataBuffers.push(inscriptionData.slice(i, i + chunkSize));
|
|
25
|
-
}
|
|
26
|
-
return pushDataBuffers;
|
|
27
|
-
}
|
|
28
|
-
/**
|
|
29
|
-
*
|
|
30
|
-
* @returns inscription payment object
|
|
31
|
-
* @param pubkey
|
|
32
|
-
* @param contentType
|
|
33
|
-
* @param inscriptionData
|
|
34
|
-
*/
|
|
35
|
-
function createPaymentForInscription(pubkey, contentType, inscriptionData) {
|
|
36
|
-
const dataPushBuffers = splitBuffer(inscriptionData, MAX_LENGTH_TAP_DATA_PUSH);
|
|
37
|
-
const uncompiledScript = [
|
|
38
|
-
pubkey,
|
|
39
|
-
OPS.OP_CHECKSIG,
|
|
40
|
-
OPS.OP_FALSE,
|
|
41
|
-
OPS.OP_IF,
|
|
42
|
-
Buffer.from('ord', 'ascii'),
|
|
43
|
-
1,
|
|
44
|
-
1,
|
|
45
|
-
Buffer.from(contentType, 'ascii'),
|
|
46
|
-
OPS.OP_0,
|
|
47
|
-
...dataPushBuffers,
|
|
48
|
-
OPS.OP_ENDIF,
|
|
49
|
-
];
|
|
50
|
-
const compiledScript = utxo_lib_1.script.compile(uncompiledScript);
|
|
51
|
-
const redeem = {
|
|
52
|
-
output: compiledScript,
|
|
53
|
-
depth: 0,
|
|
54
|
-
};
|
|
55
|
-
return utxo_lib_1.p2trPayments.p2tr({ redeems: [redeem], redeemIndex: 0 }, { eccLib: utxo_lib_1.ecc });
|
|
56
|
-
}
|
|
57
|
-
/**
|
|
58
|
-
* @param payment
|
|
59
|
-
* @param controlBlock
|
|
60
|
-
* @param commitOutput
|
|
61
|
-
* @param network
|
|
62
|
-
* @return virtual size of a transaction with a single inscription reveal input and a single commitOutput
|
|
63
|
-
*/
|
|
64
|
-
function getInscriptionRevealSize(payment, controlBlock, commitOutput, network) {
|
|
65
|
-
var _a, _b;
|
|
66
|
-
const psbt = utxo_lib_1.bitgo.createPsbtForNetwork({ network });
|
|
67
|
-
const parsedControlBlock = utxo_lib_1.taproot.parseControlBlock(utxo_lib_1.ecc, controlBlock);
|
|
68
|
-
const leafHash = utxo_lib_1.taproot.getTapleafHash(utxo_lib_1.ecc, parsedControlBlock, (_a = payment.redeem) === null || _a === void 0 ? void 0 : _a.output);
|
|
69
|
-
psbt.addInput({
|
|
70
|
-
hash: Buffer.alloc(32),
|
|
71
|
-
index: 0,
|
|
72
|
-
witnessUtxo: { script: commitOutput, value: BigInt(100000) },
|
|
73
|
-
tapLeafScript: [
|
|
74
|
-
{
|
|
75
|
-
controlBlock,
|
|
76
|
-
script: (_b = payment.redeem) === null || _b === void 0 ? void 0 : _b.output,
|
|
77
|
-
leafVersion: utxo_lib_1.taproot.INITIAL_TAPSCRIPT_VERSION,
|
|
78
|
-
},
|
|
79
|
-
],
|
|
80
|
-
});
|
|
81
|
-
psbt.addOutput({ script: commitOutput, value: BigInt(10000) });
|
|
82
|
-
psbt.signTaprootInput(0, {
|
|
83
|
-
publicKey: Buffer.alloc(32),
|
|
84
|
-
signSchnorr(hash) {
|
|
85
|
-
// dummy schnorr-sized signature
|
|
86
|
-
return Buffer.alloc(64);
|
|
87
|
-
},
|
|
88
|
-
}, [leafHash]);
|
|
89
|
-
psbt.finalizeTapInputWithSingleLeafScriptAndSignature(0);
|
|
90
|
-
return psbt.extractTransaction(/* disableFeeCheck */ true).virtualSize();
|
|
91
|
-
}
|
|
92
|
-
/**
|
|
93
|
-
* @param pubkey
|
|
94
|
-
* @param contentType
|
|
95
|
-
* @param inscriptionData
|
|
96
|
-
* @param network
|
|
97
|
-
* @returns PreparedInscriptionRevealData
|
|
98
|
-
*/
|
|
99
|
-
function createInscriptionRevealData(pubkey, contentType, inscriptionData, network) {
|
|
100
|
-
var _a, _b;
|
|
101
|
-
const payment = createPaymentForInscription(pubkey, contentType, inscriptionData);
|
|
102
|
-
const { output: commitOutput, controlBlock } = payment;
|
|
103
|
-
assert(commitOutput);
|
|
104
|
-
assert(controlBlock);
|
|
105
|
-
assert((_a = payment.redeem) === null || _a === void 0 ? void 0 : _a.output);
|
|
106
|
-
const commitAddress = utxo_lib_1.address.fromOutputScript(commitOutput, network);
|
|
107
|
-
const tapLeafScript = [
|
|
108
|
-
{
|
|
109
|
-
controlBlock,
|
|
110
|
-
script: (_b = payment.redeem) === null || _b === void 0 ? void 0 : _b.output,
|
|
111
|
-
leafVersion: utxo_lib_1.taproot.INITIAL_TAPSCRIPT_VERSION,
|
|
112
|
-
},
|
|
113
|
-
];
|
|
114
|
-
const revealTransactionVSize = getInscriptionRevealSize(payment, controlBlock, commitOutput, network);
|
|
115
|
-
return {
|
|
116
|
-
address: commitAddress,
|
|
117
|
-
revealTransactionVSize,
|
|
118
|
-
tapLeafScript: tapLeafScript[0],
|
|
119
|
-
};
|
|
120
|
-
}
|
|
121
|
-
exports.createInscriptionRevealData = createInscriptionRevealData;
|
|
122
|
-
/**
|
|
123
|
-
* @param pubkey
|
|
124
|
-
* @param contentType
|
|
125
|
-
* @param inscriptionData
|
|
126
|
-
* @returns inscription address
|
|
127
|
-
*/
|
|
128
|
-
function createOutputScriptForInscription(pubkey, contentType, inscriptionData) {
|
|
129
|
-
const payment = createPaymentForInscription(pubkey, contentType, inscriptionData);
|
|
130
|
-
assert(payment.output, 'Failed to create inscription output script');
|
|
131
|
-
return payment.output;
|
|
132
|
-
}
|
|
133
|
-
exports.createOutputScriptForInscription = createOutputScriptForInscription;
|
|
134
|
-
/**
|
|
135
|
-
*
|
|
136
|
-
* @param privateKey
|
|
137
|
-
* @param tapLeafScript
|
|
138
|
-
* @param commitAddress
|
|
139
|
-
* @param recipientAddress
|
|
140
|
-
* @param unsignedCommitTx
|
|
141
|
-
* @param network
|
|
142
|
-
*
|
|
143
|
-
* @return a fully signed reveal transaction
|
|
144
|
-
*/
|
|
145
|
-
function signRevealTransaction(privateKey, tapLeafScript, commitAddress, recipientAddress, unsignedCommitTx, network) {
|
|
146
|
-
const unserCommitTxn = utxolib.bitgo.createTransactionFromBuffer(unsignedCommitTx, network);
|
|
147
|
-
const hash = unserCommitTxn.getHash();
|
|
148
|
-
const commitOutput = utxolib.address.toOutputScript(commitAddress, network);
|
|
149
|
-
const vout = unserCommitTxn.outs.findIndex((out) => out.script.equals(commitOutput));
|
|
150
|
-
if (vout === -1) {
|
|
151
|
-
throw new Error('Invalid commit transaction');
|
|
152
|
-
}
|
|
153
|
-
const psbt = utxo_lib_1.bitgo.createPsbtForNetwork({ network });
|
|
154
|
-
psbt.addInput({
|
|
155
|
-
hash,
|
|
156
|
-
index: vout,
|
|
157
|
-
witnessUtxo: { script: commitOutput, value: BigInt(unserCommitTxn.outs[vout].value) },
|
|
158
|
-
tapLeafScript: [tapLeafScript],
|
|
159
|
-
});
|
|
160
|
-
const recipientOutput = utxo_lib_1.address.toOutputScript(recipientAddress, network);
|
|
161
|
-
psbt.addOutput({ script: recipientOutput, value: BigInt(10000) });
|
|
162
|
-
const signer = utxo_lib_1.ECPair.fromPrivateKey(privateKey);
|
|
163
|
-
const parsedControlBlock = utxo_lib_1.taproot.parseControlBlock(utxo_lib_1.ecc, tapLeafScript.controlBlock);
|
|
164
|
-
const leafHash = utxo_lib_1.taproot.getTapleafHash(utxo_lib_1.ecc, parsedControlBlock, tapLeafScript.script);
|
|
165
|
-
psbt.signTaprootInput(0, signer, [leafHash]);
|
|
166
|
-
return psbt;
|
|
167
|
-
}
|
|
168
|
-
exports.signRevealTransaction = signRevealTransaction;
|
|
169
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5zY3JpcHRpb25zLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2luc2NyaXB0aW9ucy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7Ozs7RUFJRTs7O0FBRUYsaUNBQWlDO0FBQ2pDLG1EQVU4QjtBQUM5QixnREFBZ0Q7QUFHaEQsTUFBTSxHQUFHLEdBQUcsaUJBQU8sQ0FBQyxHQUFHLENBQUM7QUFDeEIsTUFBTSx3QkFBd0IsR0FBRyxHQUFHLENBQUM7QUFFckM7Ozs7OztHQU1HO0FBQ0gsU0FBUyxXQUFXLENBQUMsZUFBdUIsRUFBRSxTQUFpQjtJQUM3RCxNQUFNLGVBQWUsR0FBYSxFQUFFLENBQUM7SUFDckMsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLGVBQWUsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxJQUFJLFNBQVMsRUFBRTtRQUMxRCxlQUFlLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxTQUFTLENBQUMsQ0FBQyxDQUFDO0tBQy9EO0lBRUQsT0FBTyxlQUFlLENBQUM7QUFDekIsQ0FBQztBQUVEOzs7Ozs7R0FNRztBQUNILFNBQVMsMkJBQTJCLENBQUMsTUFBYyxFQUFFLFdBQW1CLEVBQUUsZUFBdUI7SUFDL0YsTUFBTSxlQUFlLEdBQUcsV0FBVyxDQUFDLGVBQWUsRUFBRSx3QkFBd0IsQ0FBQyxDQUFDO0lBRS9FLE1BQU0sZ0JBQWdCLEdBQUc7UUFDdkIsTUFBTTtRQUNOLEdBQUcsQ0FBQyxXQUFXO1FBQ2YsR0FBRyxDQUFDLFFBQVE7UUFDWixHQUFHLENBQUMsS0FBSztRQUNULE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLE9BQU8sQ0FBQztRQUMzQixDQUFDO1FBQ0QsQ0FBQztRQUNELE1BQU0sQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLE9BQU8sQ0FBQztRQUNqQyxHQUFHLENBQUMsSUFBSTtRQUNSLEdBQUcsZUFBZTtRQUNsQixHQUFHLENBQUMsUUFBUTtLQUNiLENBQUM7SUFFRixNQUFNLGNBQWMsR0FBRyxpQkFBTyxDQUFDLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO0lBQ3pELE1BQU0sTUFBTSxHQUFZO1FBQ3RCLE1BQU0sRUFBRSxjQUFjO1FBQ3RCLEtBQUssRUFBRSxDQUFDO0tBQ1QsQ0FBQztJQUVGLE9BQU8sdUJBQVEsQ0FBQyxJQUFJLENBQUMsRUFBRSxPQUFPLEVBQUUsQ0FBQyxNQUFNLENBQUMsRUFBRSxXQUFXLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxNQUFNLEVBQU4sY0FBTSxFQUFFLENBQUMsQ0FBQztBQUMxRSxDQUFDO0FBRUQ7Ozs7OztHQU1HO0FBQ0gsU0FBUyx3QkFBd0IsQ0FDL0IsT0FBZ0IsRUFDaEIsWUFBb0IsRUFDcEIsWUFBb0IsRUFDcEIsT0FBZ0I7O0lBRWhCLE1BQU0sSUFBSSxHQUFHLGdCQUFLLENBQUMsb0JBQW9CLENBQUMsRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFDO0lBQ3JELE1BQU0sa0JBQWtCLEdBQUcsa0JBQU8sQ0FBQyxpQkFBaUIsQ0FBQyxjQUFNLEVBQUUsWUFBWSxDQUFDLENBQUM7SUFDM0UsTUFBTSxRQUFRLEdBQUcsa0JBQU8sQ0FBQyxjQUFjLENBQUMsY0FBTSxFQUFFLGtCQUFrQixFQUFFLE1BQUEsT0FBTyxDQUFDLE1BQU0sMENBQUUsTUFBZ0IsQ0FBQyxDQUFDO0lBRXRHLElBQUksQ0FBQyxRQUFRLENBQUM7UUFDWixJQUFJLEVBQUUsTUFBTSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7UUFDdEIsS0FBSyxFQUFFLENBQUM7UUFDUixXQUFXLEVBQUUsRUFBRSxNQUFNLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBRSxNQUFNLENBQUMsTUFBTyxDQUFDLEVBQUU7UUFDN0QsYUFBYSxFQUFFO1lBQ2I7Z0JBQ0UsWUFBWTtnQkFDWixNQUFNLEVBQUUsTUFBQSxPQUFPLENBQUMsTUFBTSwwQ0FBRSxNQUFnQjtnQkFDeEMsV0FBVyxFQUFFLGtCQUFPLENBQUMseUJBQXlCO2FBQy9DO1NBQ0Y7S0FDRixDQUFDLENBQUM7SUFDSCxJQUFJLENBQUMsU0FBUyxDQUFDLEVBQUUsTUFBTSxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQUUsTUFBTSxDQUFDLEtBQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUVoRSxJQUFJLENBQUMsZ0JBQWdCLENBQ25CLENBQUMsRUFDRDtRQUNFLFNBQVMsRUFBRSxNQUFNLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztRQUMzQixXQUFXLENBQUMsSUFBWTtZQUN0QixnQ0FBZ0M7WUFDaEMsT0FBTyxNQUFNLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQzFCLENBQUM7S0FDRixFQUNELENBQUMsUUFBUSxDQUFDLENBQ1gsQ0FBQztJQUVGLElBQUksQ0FBQyxnREFBZ0QsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN6RCxPQUFPLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxxQkFBcUIsQ0FBQyxJQUFJLENBQUMsQ0FBQyxXQUFXLEVBQUUsQ0FBQztBQUMzRSxDQUFDO0FBRUQ7Ozs7OztHQU1HO0FBQ0gsU0FBZ0IsMkJBQTJCLENBQ3pDLE1BQWMsRUFDZCxXQUFtQixFQUNuQixlQUF1QixFQUN2QixPQUFnQjs7SUFFaEIsTUFBTSxPQUFPLEdBQUcsMkJBQTJCLENBQUMsTUFBTSxFQUFFLFdBQVcsRUFBRSxlQUFlLENBQUMsQ0FBQztJQUVsRixNQUFNLEVBQUUsTUFBTSxFQUFFLFlBQVksRUFBRSxZQUFZLEVBQUUsR0FBRyxPQUFPLENBQUM7SUFDdkQsTUFBTSxDQUFDLFlBQVksQ0FBQyxDQUFDO0lBQ3JCLE1BQU0sQ0FBQyxZQUFZLENBQUMsQ0FBQztJQUNyQixNQUFNLENBQUMsTUFBQSxPQUFPLENBQUMsTUFBTSwwQ0FBRSxNQUFNLENBQUMsQ0FBQztJQUMvQixNQUFNLGFBQWEsR0FBRyxrQkFBTyxDQUFDLGdCQUFnQixDQUFDLFlBQVksRUFBRSxPQUFPLENBQUMsQ0FBQztJQUV0RSxNQUFNLGFBQWEsR0FBa0M7UUFDbkQ7WUFDRSxZQUFZO1lBQ1osTUFBTSxFQUFFLE1BQUEsT0FBTyxDQUFDLE1BQU0sMENBQUUsTUFBTTtZQUM5QixXQUFXLEVBQUUsa0JBQU8sQ0FBQyx5QkFBeUI7U0FDL0M7S0FDRixDQUFDO0lBQ0YsTUFBTSxzQkFBc0IsR0FBRyx3QkFBd0IsQ0FBQyxPQUFPLEVBQUUsWUFBWSxFQUFFLFlBQVksRUFBRSxPQUFPLENBQUMsQ0FBQztJQUV0RyxPQUFPO1FBQ0wsT0FBTyxFQUFFLGFBQWE7UUFDdEIsc0JBQXNCO1FBQ3RCLGFBQWEsRUFBRSxhQUFhLENBQUMsQ0FBQyxDQUFDO0tBQ2hDLENBQUM7QUFDSixDQUFDO0FBNUJELGtFQTRCQztBQUVEOzs7OztHQUtHO0FBQ0gsU0FBZ0IsZ0NBQWdDLENBQUMsTUFBYyxFQUFFLFdBQW1CLEVBQUUsZUFBdUI7SUFDM0csTUFBTSxPQUFPLEdBQUcsMkJBQTJCLENBQUMsTUFBTSxFQUFFLFdBQVcsRUFBRSxlQUFlLENBQUMsQ0FBQztJQUVsRixNQUFNLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRSw0Q0FBNEMsQ0FBQyxDQUFDO0lBQ3JFLE9BQU8sT0FBTyxDQUFDLE1BQU0sQ0FBQztBQUN4QixDQUFDO0FBTEQsNEVBS0M7QUFFRDs7Ozs7Ozs7OztHQVVHO0FBQ0gsU0FBZ0IscUJBQXFCLENBQ25DLFVBQWtCLEVBQ2xCLGFBQTBDLEVBQzFDLGFBQXFCLEVBQ3JCLGdCQUF3QixFQUN4QixnQkFBd0IsRUFDeEIsT0FBZ0I7SUFFaEIsTUFBTSxjQUFjLEdBQUcsT0FBTyxDQUFDLEtBQUssQ0FBQywyQkFBMkIsQ0FBQyxnQkFBZ0IsRUFBRSxPQUFPLENBQUMsQ0FBQztJQUM1RixNQUFNLElBQUksR0FBRyxjQUFjLENBQUMsT0FBTyxFQUFFLENBQUM7SUFDdEMsTUFBTSxZQUFZLEdBQUcsT0FBTyxDQUFDLE9BQU8sQ0FBQyxjQUFjLENBQUMsYUFBYSxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBQzVFLE1BQU0sSUFBSSxHQUFHLGNBQWMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDO0lBRXJGLElBQUksSUFBSSxLQUFLLENBQUMsQ0FBQyxFQUFFO1FBQ2YsTUFBTSxJQUFJLEtBQUssQ0FBQyw0QkFBNEIsQ0FBQyxDQUFDO0tBQy9DO0lBRUQsTUFBTSxJQUFJLEdBQUcsZ0JBQUssQ0FBQyxvQkFBb0IsQ0FBQyxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUM7SUFDckQsSUFBSSxDQUFDLFFBQVEsQ0FBQztRQUNaLElBQUk7UUFDSixLQUFLLEVBQUUsSUFBSTtRQUNYLFdBQVcsRUFBRSxFQUFFLE1BQU0sRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFFLE1BQU0sQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEtBQUssQ0FBQyxFQUFFO1FBQ3JGLGFBQWEsRUFBRSxDQUFDLGFBQWEsQ0FBQztLQUMvQixDQUFDLENBQUM7SUFFSCxNQUFNLGVBQWUsR0FBRyxrQkFBTyxDQUFDLGNBQWMsQ0FBQyxnQkFBZ0IsRUFBRSxPQUFPLENBQUMsQ0FBQztJQUMxRSxJQUFJLENBQUMsU0FBUyxDQUFDLEVBQUUsTUFBTSxFQUFFLGVBQWUsRUFBRSxLQUFLLEVBQUUsTUFBTSxDQUFDLEtBQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUVuRSxNQUFNLE1BQU0sR0FBRyxpQkFBTSxDQUFDLGNBQWMsQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUNqRCxNQUFNLGtCQUFrQixHQUFHLGtCQUFPLENBQUMsaUJBQWlCLENBQUMsY0FBTSxFQUFFLGFBQWEsQ0FBQyxZQUFZLENBQUMsQ0FBQztJQUN6RixNQUFNLFFBQVEsR0FBRyxrQkFBTyxDQUFDLGNBQWMsQ0FBQyxjQUFNLEVBQUUsa0JBQWtCLEVBQUUsYUFBYSxDQUFDLE1BQWdCLENBQUMsQ0FBQztJQUNwRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxFQUFFLE1BQU0sRUFBRSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7SUFFN0MsT0FBTyxJQUFJLENBQUM7QUFDZCxDQUFDO0FBbENELHNEQWtDQyIsInNvdXJjZXNDb250ZW50IjpbIi8qXG5GdW5jdGlvbnMgZm9yIGRlYWxpbmcgd2l0aCBpbnNjcmlwdGlvbnMuXG5cblNlZSBodHRwczovL2RvY3Mub3JkaW5hbHMuY29tL2luc2NyaXB0aW9ucy5odG1sXG4qL1xuXG5pbXBvcnQgKiBhcyBhc3NlcnQgZnJvbSAnYXNzZXJ0JztcbmltcG9ydCB7XG4gIHAydHJQYXltZW50cyBhcyBwYXltZW50cyxcbiAgZWNjIGFzIGVjY0xpYixcbiAgc2NyaXB0IGFzIGJzY3JpcHQsXG4gIFBheW1lbnQsXG4gIE5ldHdvcmssXG4gIGJpdGdvLFxuICBhZGRyZXNzLFxuICB0YXByb290LFxuICBFQ1BhaXIsXG59IGZyb20gJ0BiaXRnby1iZXRhL3V0eG8tbGliJztcbmltcG9ydCAqIGFzIHV0eG9saWIgZnJvbSAnQGJpdGdvLWJldGEvdXR4by1saWInO1xuaW1wb3J0IHsgUHJlcGFyZWRJbnNjcmlwdGlvblJldmVhbERhdGEgfSBmcm9tICdAYml0Z28tYmV0YS9zZGstY29yZSc7XG5cbmNvbnN0IE9QUyA9IGJzY3JpcHQuT1BTO1xuY29uc3QgTUFYX0xFTkdUSF9UQVBfREFUQV9QVVNIID0gNTIwO1xuXG4vKipcbiAqIFRoZSBtYXggc2l6ZSBvZiBhbiBpbmRpdmlkdWFsIE9QX1BVU0ggaW4gYSBUYXByb290IHNjcmlwdCBpcyA1MjAgYnl0ZXMuIFRoaXNcbiAqIGZ1bmN0aW9uIHNwbGl0cyBpbnNjcmlwdGlvbkRhdGEgaW50byBhbiBhcnJheSBidWZmZXIgb2YgNTIwIGJ5dGVzIGxlbmd0aC5cbiAqIGh0dHBzOi8vZG9jcy5vcmRpbmFscy5jb20vaW5zY3JpcHRpb25zLmh0bWxcbiAqIEBwYXJhbSBpbnNjcmlwdGlvbkRhdGFcbiAqIEBwYXJhbSBjaHVua1NpemVcbiAqL1xuZnVuY3Rpb24gc3BsaXRCdWZmZXIoaW5zY3JpcHRpb25EYXRhOiBCdWZmZXIsIGNodW5rU2l6ZTogbnVtYmVyKSB7XG4gIGNvbnN0IHB1c2hEYXRhQnVmZmVyczogQnVmZmVyW10gPSBbXTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBpbnNjcmlwdGlvbkRhdGEubGVuZ3RoOyBpICs9IGNodW5rU2l6ZSkge1xuICAgIHB1c2hEYXRhQnVmZmVycy5wdXNoKGluc2NyaXB0aW9uRGF0YS5zbGljZShpLCBpICsgY2h1bmtTaXplKSk7XG4gIH1cblxuICByZXR1cm4gcHVzaERhdGFCdWZmZXJzO1xufVxuXG4vKipcbiAqXG4gKiBAcmV0dXJucyBpbnNjcmlwdGlvbiBwYXltZW50IG9iamVjdFxuICogQHBhcmFtIHB1YmtleVxuICogQHBhcmFtIGNvbnRlbnRUeXBlXG4gKiBAcGFyYW0gaW5zY3JpcHRpb25EYXRhXG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZVBheW1lbnRGb3JJbnNjcmlwdGlvbihwdWJrZXk6IEJ1ZmZlciwgY29udGVudFR5cGU6IHN0cmluZywgaW5zY3JpcHRpb25EYXRhOiBCdWZmZXIpOiBQYXltZW50IHtcbiAgY29uc3QgZGF0YVB1c2hCdWZmZXJzID0gc3BsaXRCdWZmZXIoaW5zY3JpcHRpb25EYXRhLCBNQVhfTEVOR1RIX1RBUF9EQVRBX1BVU0gpO1xuXG4gIGNvbnN0IHVuY29tcGlsZWRTY3JpcHQgPSBbXG4gICAgcHVia2V5LFxuICAgIE9QUy5PUF9DSEVDS1NJRyxcbiAgICBPUFMuT1BfRkFMU0UsXG4gICAgT1BTLk9QX0lGLFxuICAgIEJ1ZmZlci5mcm9tKCdvcmQnLCAnYXNjaWknKSxcbiAgICAxLCAvLyB0aGVzZSB0d28gbGluZXMgc2hvdWxkIGJlIGNvbWJpbmVkIGFzIGEgc2luZ2xlIE9QUy5PUF8xLFxuICAgIDEsIC8vIGJ1dCBgb3JkYCdzIGRlY29kZXIgaGFzIGEgYnVnIHNvIGl0IGhhcyB0byBiZSBsaWtlIHRoaXNcbiAgICBCdWZmZXIuZnJvbShjb250ZW50VHlwZSwgJ2FzY2lpJyksXG4gICAgT1BTLk9QXzAsXG4gICAgLi4uZGF0YVB1c2hCdWZmZXJzLFxuICAgIE9QUy5PUF9FTkRJRixcbiAgXTtcblxuICBjb25zdCBjb21waWxlZFNjcmlwdCA9IGJzY3JpcHQuY29tcGlsZSh1bmNvbXBpbGVkU2NyaXB0KTtcbiAgY29uc3QgcmVkZWVtOiBQYXltZW50ID0ge1xuICAgIG91dHB1dDogY29tcGlsZWRTY3JpcHQsXG4gICAgZGVwdGg6IDAsXG4gIH07XG5cbiAgcmV0dXJuIHBheW1lbnRzLnAydHIoeyByZWRlZW1zOiBbcmVkZWVtXSwgcmVkZWVtSW5kZXg6IDAgfSwgeyBlY2NMaWIgfSk7XG59XG5cbi8qKlxuICogQHBhcmFtIHBheW1lbnRcbiAqIEBwYXJhbSBjb250cm9sQmxvY2tcbiAqIEBwYXJhbSBjb21taXRPdXRwdXRcbiAqIEBwYXJhbSBuZXR3b3JrXG4gKiBAcmV0dXJuIHZpcnR1YWwgc2l6ZSBvZiBhIHRyYW5zYWN0aW9uIHdpdGggYSBzaW5nbGUgaW5zY3JpcHRpb24gcmV2ZWFsIGlucHV0IGFuZCBhIHNpbmdsZSBjb21taXRPdXRwdXRcbiAqL1xuZnVuY3Rpb24gZ2V0SW5zY3JpcHRpb25SZXZlYWxTaXplKFxuICBwYXltZW50OiBQYXltZW50LFxuICBjb250cm9sQmxvY2s6IEJ1ZmZlcixcbiAgY29tbWl0T3V0cHV0OiBCdWZmZXIsXG4gIG5ldHdvcms6IE5ldHdvcmtcbik6IG51bWJlciB7XG4gIGNvbnN0IHBzYnQgPSBiaXRnby5jcmVhdGVQc2J0Rm9yTmV0d29yayh7IG5ldHdvcmsgfSk7XG4gIGNvbnN0IHBhcnNlZENvbnRyb2xCbG9jayA9IHRhcHJvb3QucGFyc2VDb250cm9sQmxvY2soZWNjTGliLCBjb250cm9sQmxvY2spO1xuICBjb25zdCBsZWFmSGFzaCA9IHRhcHJvb3QuZ2V0VGFwbGVhZkhhc2goZWNjTGliLCBwYXJzZWRDb250cm9sQmxvY2ssIHBheW1lbnQucmVkZWVtPy5vdXRwdXQgYXMgQnVmZmVyKTtcblxuICBwc2J0LmFkZElucHV0KHtcbiAgICBoYXNoOiBCdWZmZXIuYWxsb2MoMzIpLFxuICAgIGluZGV4OiAwLFxuICAgIHdpdG5lc3NVdHhvOiB7IHNjcmlwdDogY29tbWl0T3V0cHV0LCB2YWx1ZTogQmlnSW50KDEwMF8wMDApIH0sXG4gICAgdGFwTGVhZlNjcmlwdDogW1xuICAgICAge1xuICAgICAgICBjb250cm9sQmxvY2ssXG4gICAgICAgIHNjcmlwdDogcGF5bWVudC5yZWRlZW0/Lm91dHB1dCBhcyBCdWZmZXIsXG4gICAgICAgIGxlYWZWZXJzaW9uOiB0YXByb290LklOSVRJQUxfVEFQU0NSSVBUX1ZFUlNJT04sXG4gICAgICB9LFxuICAgIF0sXG4gIH0pO1xuICBwc2J0LmFkZE91dHB1dCh7IHNjcmlwdDogY29tbWl0T3V0cHV0LCB2YWx1ZTogQmlnSW50KDEwXzAwMCkgfSk7XG5cbiAgcHNidC5zaWduVGFwcm9vdElucHV0KFxuICAgIDAsXG4gICAge1xuICAgICAgcHVibGljS2V5OiBCdWZmZXIuYWxsb2MoMzIpLFxuICAgICAgc2lnblNjaG5vcnIoaGFzaDogQnVmZmVyKTogQnVmZmVyIHtcbiAgICAgICAgLy8gZHVtbXkgc2Nobm9yci1zaXplZCBzaWduYXR1cmVcbiAgICAgICAgcmV0dXJuIEJ1ZmZlci5hbGxvYyg2NCk7XG4gICAgICB9LFxuICAgIH0sXG4gICAgW2xlYWZIYXNoXVxuICApO1xuXG4gIHBzYnQuZmluYWxpemVUYXBJbnB1dFdpdGhTaW5nbGVMZWFmU2NyaXB0QW5kU2lnbmF0dXJlKDApO1xuICByZXR1cm4gcHNidC5leHRyYWN0VHJhbnNhY3Rpb24oLyogZGlzYWJsZUZlZUNoZWNrICovIHRydWUpLnZpcnR1YWxTaXplKCk7XG59XG5cbi8qKlxuICogQHBhcmFtIHB1YmtleVxuICogQHBhcmFtIGNvbnRlbnRUeXBlXG4gKiBAcGFyYW0gaW5zY3JpcHRpb25EYXRhXG4gKiBAcGFyYW0gbmV0d29ya1xuICogQHJldHVybnMgUHJlcGFyZWRJbnNjcmlwdGlvblJldmVhbERhdGFcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUluc2NyaXB0aW9uUmV2ZWFsRGF0YShcbiAgcHVia2V5OiBCdWZmZXIsXG4gIGNvbnRlbnRUeXBlOiBzdHJpbmcsXG4gIGluc2NyaXB0aW9uRGF0YTogQnVmZmVyLFxuICBuZXR3b3JrOiBOZXR3b3JrXG4pOiBQcmVwYXJlZEluc2NyaXB0aW9uUmV2ZWFsRGF0YSB7XG4gIGNvbnN0IHBheW1lbnQgPSBjcmVhdGVQYXltZW50Rm9ySW5zY3JpcHRpb24ocHVia2V5LCBjb250ZW50VHlwZSwgaW5zY3JpcHRpb25EYXRhKTtcblxuICBjb25zdCB7IG91dHB1dDogY29tbWl0T3V0cHV0LCBjb250cm9sQmxvY2sgfSA9IHBheW1lbnQ7XG4gIGFzc2VydChjb21taXRPdXRwdXQpO1xuICBhc3NlcnQoY29udHJvbEJsb2NrKTtcbiAgYXNzZXJ0KHBheW1lbnQucmVkZWVtPy5vdXRwdXQpO1xuICBjb25zdCBjb21taXRBZGRyZXNzID0gYWRkcmVzcy5mcm9tT3V0cHV0U2NyaXB0KGNvbW1pdE91dHB1dCwgbmV0d29yayk7XG5cbiAgY29uc3QgdGFwTGVhZlNjcmlwdDogdXR4b2xpYi5iaXRnby5UYXBMZWFmU2NyaXB0W10gPSBbXG4gICAge1xuICAgICAgY29udHJvbEJsb2NrLFxuICAgICAgc2NyaXB0OiBwYXltZW50LnJlZGVlbT8ub3V0cHV0LFxuICAgICAgbGVhZlZlcnNpb246IHRhcHJvb3QuSU5JVElBTF9UQVBTQ1JJUFRfVkVSU0lPTixcbiAgICB9LFxuICBdO1xuICBjb25zdCByZXZlYWxUcmFuc2FjdGlvblZTaXplID0gZ2V0SW5zY3JpcHRpb25SZXZlYWxTaXplKHBheW1lbnQsIGNvbnRyb2xCbG9jaywgY29tbWl0T3V0cHV0LCBuZXR3b3JrKTtcblxuICByZXR1cm4ge1xuICAgIGFkZHJlc3M6IGNvbW1pdEFkZHJlc3MsXG4gICAgcmV2ZWFsVHJhbnNhY3Rpb25WU2l6ZSxcbiAgICB0YXBMZWFmU2NyaXB0OiB0YXBMZWFmU2NyaXB0WzBdLFxuICB9O1xufVxuXG4vKipcbiAqIEBwYXJhbSBwdWJrZXlcbiAqIEBwYXJhbSBjb250ZW50VHlwZVxuICogQHBhcmFtIGluc2NyaXB0aW9uRGF0YVxuICogQHJldHVybnMgaW5zY3JpcHRpb24gYWRkcmVzc1xuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlT3V0cHV0U2NyaXB0Rm9ySW5zY3JpcHRpb24ocHVia2V5OiBCdWZmZXIsIGNvbnRlbnRUeXBlOiBzdHJpbmcsIGluc2NyaXB0aW9uRGF0YTogQnVmZmVyKTogQnVmZmVyIHtcbiAgY29uc3QgcGF5bWVudCA9IGNyZWF0ZVBheW1lbnRGb3JJbnNjcmlwdGlvbihwdWJrZXksIGNvbnRlbnRUeXBlLCBpbnNjcmlwdGlvbkRhdGEpO1xuXG4gIGFzc2VydChwYXltZW50Lm91dHB1dCwgJ0ZhaWxlZCB0byBjcmVhdGUgaW5zY3JpcHRpb24gb3V0cHV0IHNjcmlwdCcpO1xuICByZXR1cm4gcGF5bWVudC5vdXRwdXQ7XG59XG5cbi8qKlxuICpcbiAqIEBwYXJhbSBwcml2YXRlS2V5XG4gKiBAcGFyYW0gdGFwTGVhZlNjcmlwdFxuICogQHBhcmFtIGNvbW1pdEFkZHJlc3NcbiAqIEBwYXJhbSByZWNpcGllbnRBZGRyZXNzXG4gKiBAcGFyYW0gdW5zaWduZWRDb21taXRUeFxuICogQHBhcmFtIG5ldHdvcmtcbiAqXG4gKiBAcmV0dXJuIGEgZnVsbHkgc2lnbmVkIHJldmVhbCB0cmFuc2FjdGlvblxuICovXG5leHBvcnQgZnVuY3Rpb24gc2lnblJldmVhbFRyYW5zYWN0aW9uKFxuICBwcml2YXRlS2V5OiBCdWZmZXIsXG4gIHRhcExlYWZTY3JpcHQ6IHV0eG9saWIuYml0Z28uVGFwTGVhZlNjcmlwdCxcbiAgY29tbWl0QWRkcmVzczogc3RyaW5nLFxuICByZWNpcGllbnRBZGRyZXNzOiBzdHJpbmcsXG4gIHVuc2lnbmVkQ29tbWl0VHg6IEJ1ZmZlcixcbiAgbmV0d29yazogTmV0d29ya1xuKTogdXR4b2xpYi5iaXRnby5VdHhvUHNidCB7XG4gIGNvbnN0IHVuc2VyQ29tbWl0VHhuID0gdXR4b2xpYi5iaXRnby5jcmVhdGVUcmFuc2FjdGlvbkZyb21CdWZmZXIodW5zaWduZWRDb21taXRUeCwgbmV0d29yayk7XG4gIGNvbnN0IGhhc2ggPSB1bnNlckNvbW1pdFR4bi5nZXRIYXNoKCk7XG4gIGNvbnN0IGNvbW1pdE91dHB1dCA9IHV0eG9saWIuYWRkcmVzcy50b091dHB1dFNjcmlwdChjb21taXRBZGRyZXNzLCBuZXR3b3JrKTtcbiAgY29uc3Qgdm91dCA9IHVuc2VyQ29tbWl0VHhuLm91dHMuZmluZEluZGV4KChvdXQpID0+IG91dC5zY3JpcHQuZXF1YWxzKGNvbW1pdE91dHB1dCkpO1xuXG4gIGlmICh2b3V0ID09PSAtMSkge1xuICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBjb21taXQgdHJhbnNhY3Rpb24nKTtcbiAgfVxuXG4gIGNvbnN0IHBzYnQgPSBiaXRnby5jcmVhdGVQc2J0Rm9yTmV0d29yayh7IG5ldHdvcmsgfSk7XG4gIHBzYnQuYWRkSW5wdXQoe1xuICAgIGhhc2gsXG4gICAgaW5kZXg6IHZvdXQsXG4gICAgd2l0bmVzc1V0eG86IHsgc2NyaXB0OiBjb21taXRPdXRwdXQsIHZhbHVlOiBCaWdJbnQodW5zZXJDb21taXRUeG4ub3V0c1t2b3V0XS52YWx1ZSkgfSxcbiAgICB0YXBMZWFmU2NyaXB0OiBbdGFwTGVhZlNjcmlwdF0sXG4gIH0pO1xuXG4gIGNvbnN0IHJlY2lwaWVudE91dHB1dCA9IGFkZHJlc3MudG9PdXRwdXRTY3JpcHQocmVjaXBpZW50QWRkcmVzcywgbmV0d29yayk7XG4gIHBzYnQuYWRkT3V0cHV0KHsgc2NyaXB0OiByZWNpcGllbnRPdXRwdXQsIHZhbHVlOiBCaWdJbnQoMTBfMDAwKSB9KTtcblxuICBjb25zdCBzaWduZXIgPSBFQ1BhaXIuZnJvbVByaXZhdGVLZXkocHJpdmF0ZUtleSk7XG4gIGNvbnN0IHBhcnNlZENvbnRyb2xCbG9jayA9IHRhcHJvb3QucGFyc2VDb250cm9sQmxvY2soZWNjTGliLCB0YXBMZWFmU2NyaXB0LmNvbnRyb2xCbG9jayk7XG4gIGNvbnN0IGxlYWZIYXNoID0gdGFwcm9vdC5nZXRUYXBsZWFmSGFzaChlY2NMaWIsIHBhcnNlZENvbnRyb2xCbG9jaywgdGFwTGVhZlNjcmlwdC5zY3JpcHQgYXMgQnVmZmVyKTtcbiAgcHNidC5zaWduVGFwcm9vdElucHV0KDAsIHNpZ25lciwgW2xlYWZIYXNoXSk7XG5cbiAgcmV0dXJuIHBzYnQ7XG59XG4iXX0=
|