@vendasta/billing 11.0.0 → 11.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/esm2020/lib/_generated/host.service.mjs +3 -3
- package/esm2020/lib/_internal/bank-reconciliation.api.service.mjs +3 -3
- package/esm2020/lib/_internal/billing.api.service.mjs +9 -4
- package/esm2020/lib/_internal/bundle.api.service.mjs +3 -3
- package/esm2020/lib/_internal/contract-document.api.service.mjs +3 -3
- package/esm2020/lib/_internal/contract.api.service.mjs +3 -3
- package/esm2020/lib/_internal/credit.api.service.mjs +3 -3
- package/esm2020/lib/_internal/discount.api.service.mjs +3 -3
- package/esm2020/lib/_internal/interfaces/contract.interface.mjs +1 -1
- package/esm2020/lib/_internal/invoice-template.api.service.mjs +3 -3
- package/esm2020/lib/_internal/invoice.api.service.mjs +3 -3
- package/esm2020/lib/_internal/merchant.api.service.mjs +3 -3
- package/esm2020/lib/_internal/objects/annotations.mjs +6 -6
- package/esm2020/lib/_internal/objects/api.mjs +174 -174
- package/esm2020/lib/_internal/objects/applied-bundle.mjs +13 -13
- package/esm2020/lib/_internal/objects/applied-discount.mjs +7 -7
- package/esm2020/lib/_internal/objects/applied-tax-rate.mjs +7 -7
- package/esm2020/lib/_internal/objects/balance.mjs +19 -19
- package/esm2020/lib/_internal/objects/billable-item.mjs +120 -120
- package/esm2020/lib/_internal/objects/bundle.mjs +71 -71
- package/esm2020/lib/_internal/objects/commitment.mjs +7 -7
- package/esm2020/lib/_internal/objects/common.mjs +12 -12
- package/esm2020/lib/_internal/objects/contract-document.mjs +29 -29
- package/esm2020/lib/_internal/objects/contract.mjs +90 -87
- package/esm2020/lib/_internal/objects/credit.mjs +24 -24
- package/esm2020/lib/_internal/objects/customer-summary.mjs +19 -19
- package/esm2020/lib/_internal/objects/date-range.mjs +7 -7
- package/esm2020/lib/_internal/objects/discount.mjs +42 -42
- package/esm2020/lib/_internal/objects/external-account.mjs +32 -32
- package/esm2020/lib/_internal/objects/fee.mjs +13 -13
- package/esm2020/lib/_internal/objects/field-mask.mjs +6 -6
- package/esm2020/lib/_internal/objects/invoice-template.mjs +126 -126
- package/esm2020/lib/_internal/objects/invoice.mjs +206 -206
- package/esm2020/lib/_internal/objects/merchant-report.mjs +19 -19
- package/esm2020/lib/_internal/objects/merchant.mjs +201 -201
- package/esm2020/lib/_internal/objects/metered-component.mjs +18 -18
- package/esm2020/lib/_internal/objects/payment-card.mjs +38 -38
- package/esm2020/lib/_internal/objects/payment.mjs +273 -273
- package/esm2020/lib/_internal/objects/payout.mjs +41 -41
- package/esm2020/lib/_internal/objects/pricing-plan-product.mjs +92 -92
- package/esm2020/lib/_internal/objects/pricing-plan.mjs +53 -53
- package/esm2020/lib/_internal/objects/product-pricing.mjs +19 -19
- package/esm2020/lib/_internal/objects/product-summary.mjs +85 -85
- package/esm2020/lib/_internal/objects/product.mjs +59 -59
- package/esm2020/lib/_internal/objects/purchase.mjs +71 -71
- package/esm2020/lib/_internal/objects/recurring-invoice.mjs +59 -59
- package/esm2020/lib/_internal/objects/refund.mjs +25 -25
- package/esm2020/lib/_internal/objects/report-run.mjs +18 -18
- package/esm2020/lib/_internal/objects/retail-customer-configuration.mjs +24 -24
- package/esm2020/lib/_internal/objects/sales-credit-note.mjs +31 -31
- package/esm2020/lib/_internal/objects/sales-invoice.mjs +51 -51
- package/esm2020/lib/_internal/objects/subscribe-validation.mjs +7 -7
- package/esm2020/lib/_internal/objects/subscription.mjs +88 -88
- package/esm2020/lib/_internal/objects/tax-rate.mjs +62 -62
- package/esm2020/lib/_internal/payment-method.api.service.mjs +3 -3
- package/esm2020/lib/_internal/payment.api.service.mjs +3 -3
- package/esm2020/lib/_internal/pricing.api.service.mjs +3 -3
- package/esm2020/lib/_internal/product-summary.api.service.mjs +3 -3
- package/esm2020/lib/_internal/product.api.service.mjs +3 -3
- package/esm2020/lib/_internal/purchase.api.service.mjs +3 -3
- package/esm2020/lib/_internal/recurring-invoice.api.service.mjs +3 -3
- package/esm2020/lib/_internal/refund.api.service.mjs +3 -3
- package/esm2020/lib/_internal/retail-customer-configuration.api.service.mjs +3 -3
- package/esm2020/lib/_internal/sales-credit-note.api.service.mjs +3 -3
- package/esm2020/lib/_internal/sales-invoice.api.service.mjs +3 -3
- package/esm2020/lib/_internal/tax.api.service.mjs +3 -3
- package/esm2020/lib/_internal/vendor.api.service.mjs +3 -3
- package/fesm2015/vendasta-billing.mjs +2422 -2414
- package/fesm2015/vendasta-billing.mjs.map +1 -1
- package/fesm2020/vendasta-billing.mjs +2422 -2414
- package/fesm2020/vendasta-billing.mjs.map +1 -1
- package/lib/_internal/billing.api.service.d.ts +1 -0
- package/lib/_internal/interfaces/contract.interface.d.ts +1 -0
- package/lib/_internal/objects/contract.d.ts +1 -0
- package/package.json +3 -3
|
@@ -12,17 +12,17 @@ export function enumStringToValue(enumRef, value) {
|
|
|
12
12
|
return enumRef[value];
|
|
13
13
|
}
|
|
14
14
|
export class AddBundleRequest {
|
|
15
|
+
static fromProto(proto) {
|
|
16
|
+
let m = new AddBundleRequest();
|
|
17
|
+
m = Object.assign(m, proto);
|
|
18
|
+
return m;
|
|
19
|
+
}
|
|
15
20
|
constructor(kwargs) {
|
|
16
21
|
if (!kwargs) {
|
|
17
22
|
return;
|
|
18
23
|
}
|
|
19
24
|
Object.assign(this, kwargs);
|
|
20
25
|
}
|
|
21
|
-
static fromProto(proto) {
|
|
22
|
-
let m = new AddBundleRequest();
|
|
23
|
-
m = Object.assign(m, proto);
|
|
24
|
-
return m;
|
|
25
|
-
}
|
|
26
26
|
toApiJson() {
|
|
27
27
|
const toReturn = {};
|
|
28
28
|
if (typeof this.invoiceId !== 'undefined') {
|
|
@@ -38,12 +38,6 @@ export class AddBundleRequest {
|
|
|
38
38
|
}
|
|
39
39
|
}
|
|
40
40
|
export class AddBundleResponse {
|
|
41
|
-
constructor(kwargs) {
|
|
42
|
-
if (!kwargs) {
|
|
43
|
-
return;
|
|
44
|
-
}
|
|
45
|
-
Object.assign(this, kwargs);
|
|
46
|
-
}
|
|
47
41
|
static fromProto(proto) {
|
|
48
42
|
let m = new AddBundleResponse();
|
|
49
43
|
m = Object.assign(m, proto);
|
|
@@ -52,6 +46,12 @@ export class AddBundleResponse {
|
|
|
52
46
|
}
|
|
53
47
|
return m;
|
|
54
48
|
}
|
|
49
|
+
constructor(kwargs) {
|
|
50
|
+
if (!kwargs) {
|
|
51
|
+
return;
|
|
52
|
+
}
|
|
53
|
+
Object.assign(this, kwargs);
|
|
54
|
+
}
|
|
55
55
|
toApiJson() {
|
|
56
56
|
const toReturn = {};
|
|
57
57
|
if (typeof this.invoice !== 'undefined' && this.invoice !== null) {
|
|
@@ -61,12 +61,6 @@ export class AddBundleResponse {
|
|
|
61
61
|
}
|
|
62
62
|
}
|
|
63
63
|
export class AddLineItemRequest {
|
|
64
|
-
constructor(kwargs) {
|
|
65
|
-
if (!kwargs) {
|
|
66
|
-
return;
|
|
67
|
-
}
|
|
68
|
-
Object.assign(this, kwargs);
|
|
69
|
-
}
|
|
70
64
|
static fromProto(proto) {
|
|
71
65
|
let m = new AddLineItemRequest();
|
|
72
66
|
m = Object.assign(m, proto);
|
|
@@ -75,6 +69,12 @@ export class AddLineItemRequest {
|
|
|
75
69
|
}
|
|
76
70
|
return m;
|
|
77
71
|
}
|
|
72
|
+
constructor(kwargs) {
|
|
73
|
+
if (!kwargs) {
|
|
74
|
+
return;
|
|
75
|
+
}
|
|
76
|
+
Object.assign(this, kwargs);
|
|
77
|
+
}
|
|
78
78
|
toApiJson() {
|
|
79
79
|
const toReturn = {};
|
|
80
80
|
if (typeof this.merchantId !== 'undefined') {
|
|
@@ -102,12 +102,6 @@ export class AddLineItemRequest {
|
|
|
102
102
|
}
|
|
103
103
|
}
|
|
104
104
|
export class AddLineItemResponse {
|
|
105
|
-
constructor(kwargs) {
|
|
106
|
-
if (!kwargs) {
|
|
107
|
-
return;
|
|
108
|
-
}
|
|
109
|
-
Object.assign(this, kwargs);
|
|
110
|
-
}
|
|
111
105
|
static fromProto(proto) {
|
|
112
106
|
let m = new AddLineItemResponse();
|
|
113
107
|
m = Object.assign(m, proto);
|
|
@@ -116,6 +110,12 @@ export class AddLineItemResponse {
|
|
|
116
110
|
}
|
|
117
111
|
return m;
|
|
118
112
|
}
|
|
113
|
+
constructor(kwargs) {
|
|
114
|
+
if (!kwargs) {
|
|
115
|
+
return;
|
|
116
|
+
}
|
|
117
|
+
Object.assign(this, kwargs);
|
|
118
|
+
}
|
|
119
119
|
toApiJson() {
|
|
120
120
|
const toReturn = {};
|
|
121
121
|
if (typeof this.invoice !== 'undefined' && this.invoice !== null) {
|
|
@@ -125,17 +125,17 @@ export class AddLineItemResponse {
|
|
|
125
125
|
}
|
|
126
126
|
}
|
|
127
127
|
export class ChargeInvoiceRequest {
|
|
128
|
+
static fromProto(proto) {
|
|
129
|
+
let m = new ChargeInvoiceRequest();
|
|
130
|
+
m = Object.assign(m, proto);
|
|
131
|
+
return m;
|
|
132
|
+
}
|
|
128
133
|
constructor(kwargs) {
|
|
129
134
|
if (!kwargs) {
|
|
130
135
|
return;
|
|
131
136
|
}
|
|
132
137
|
Object.assign(this, kwargs);
|
|
133
138
|
}
|
|
134
|
-
static fromProto(proto) {
|
|
135
|
-
let m = new ChargeInvoiceRequest();
|
|
136
|
-
m = Object.assign(m, proto);
|
|
137
|
-
return m;
|
|
138
|
-
}
|
|
139
139
|
toApiJson() {
|
|
140
140
|
const toReturn = {};
|
|
141
141
|
if (typeof this.merchantId !== 'undefined') {
|
|
@@ -154,17 +154,17 @@ export class ChargeInvoiceRequest {
|
|
|
154
154
|
}
|
|
155
155
|
}
|
|
156
156
|
export class CreateInvoiceRequest {
|
|
157
|
+
static fromProto(proto) {
|
|
158
|
+
let m = new CreateInvoiceRequest();
|
|
159
|
+
m = Object.assign(m, proto);
|
|
160
|
+
return m;
|
|
161
|
+
}
|
|
157
162
|
constructor(kwargs) {
|
|
158
163
|
if (!kwargs) {
|
|
159
164
|
return;
|
|
160
165
|
}
|
|
161
166
|
Object.assign(this, kwargs);
|
|
162
167
|
}
|
|
163
|
-
static fromProto(proto) {
|
|
164
|
-
let m = new CreateInvoiceRequest();
|
|
165
|
-
m = Object.assign(m, proto);
|
|
166
|
-
return m;
|
|
167
|
-
}
|
|
168
168
|
toApiJson() {
|
|
169
169
|
const toReturn = {};
|
|
170
170
|
if (typeof this.merchantId !== 'undefined') {
|
|
@@ -183,17 +183,17 @@ export class CreateInvoiceRequest {
|
|
|
183
183
|
}
|
|
184
184
|
}
|
|
185
185
|
export class CreateInvoiceResponse {
|
|
186
|
+
static fromProto(proto) {
|
|
187
|
+
let m = new CreateInvoiceResponse();
|
|
188
|
+
m = Object.assign(m, proto);
|
|
189
|
+
return m;
|
|
190
|
+
}
|
|
186
191
|
constructor(kwargs) {
|
|
187
192
|
if (!kwargs) {
|
|
188
193
|
return;
|
|
189
194
|
}
|
|
190
195
|
Object.assign(this, kwargs);
|
|
191
196
|
}
|
|
192
|
-
static fromProto(proto) {
|
|
193
|
-
let m = new CreateInvoiceResponse();
|
|
194
|
-
m = Object.assign(m, proto);
|
|
195
|
-
return m;
|
|
196
|
-
}
|
|
197
197
|
toApiJson() {
|
|
198
198
|
const toReturn = {};
|
|
199
199
|
if (typeof this.invoiceId !== 'undefined') {
|
|
@@ -203,12 +203,6 @@ export class CreateInvoiceResponse {
|
|
|
203
203
|
}
|
|
204
204
|
}
|
|
205
205
|
export class CreatePaymentLinkRequest {
|
|
206
|
-
constructor(kwargs) {
|
|
207
|
-
if (!kwargs) {
|
|
208
|
-
return;
|
|
209
|
-
}
|
|
210
|
-
Object.assign(this, kwargs);
|
|
211
|
-
}
|
|
212
206
|
static fromProto(proto) {
|
|
213
207
|
let m = new CreatePaymentLinkRequest();
|
|
214
208
|
m = Object.assign(m, proto);
|
|
@@ -217,6 +211,12 @@ export class CreatePaymentLinkRequest {
|
|
|
217
211
|
}
|
|
218
212
|
return m;
|
|
219
213
|
}
|
|
214
|
+
constructor(kwargs) {
|
|
215
|
+
if (!kwargs) {
|
|
216
|
+
return;
|
|
217
|
+
}
|
|
218
|
+
Object.assign(this, kwargs);
|
|
219
|
+
}
|
|
220
220
|
toApiJson() {
|
|
221
221
|
const toReturn = {};
|
|
222
222
|
if (typeof this.merchantId !== 'undefined') {
|
|
@@ -235,17 +235,17 @@ export class CreatePaymentLinkRequest {
|
|
|
235
235
|
}
|
|
236
236
|
}
|
|
237
237
|
export class CreatePaymentLinkResponse {
|
|
238
|
+
static fromProto(proto) {
|
|
239
|
+
let m = new CreatePaymentLinkResponse();
|
|
240
|
+
m = Object.assign(m, proto);
|
|
241
|
+
return m;
|
|
242
|
+
}
|
|
238
243
|
constructor(kwargs) {
|
|
239
244
|
if (!kwargs) {
|
|
240
245
|
return;
|
|
241
246
|
}
|
|
242
247
|
Object.assign(this, kwargs);
|
|
243
248
|
}
|
|
244
|
-
static fromProto(proto) {
|
|
245
|
-
let m = new CreatePaymentLinkResponse();
|
|
246
|
-
m = Object.assign(m, proto);
|
|
247
|
-
return m;
|
|
248
|
-
}
|
|
249
249
|
toApiJson() {
|
|
250
250
|
const toReturn = {};
|
|
251
251
|
if (typeof this.invoiceId !== 'undefined') {
|
|
@@ -255,17 +255,17 @@ export class CreatePaymentLinkResponse {
|
|
|
255
255
|
}
|
|
256
256
|
}
|
|
257
257
|
export class InvoiceCustomerAddress {
|
|
258
|
+
static fromProto(proto) {
|
|
259
|
+
let m = new InvoiceCustomerAddress();
|
|
260
|
+
m = Object.assign(m, proto);
|
|
261
|
+
return m;
|
|
262
|
+
}
|
|
258
263
|
constructor(kwargs) {
|
|
259
264
|
if (!kwargs) {
|
|
260
265
|
return;
|
|
261
266
|
}
|
|
262
267
|
Object.assign(this, kwargs);
|
|
263
268
|
}
|
|
264
|
-
static fromProto(proto) {
|
|
265
|
-
let m = new InvoiceCustomerAddress();
|
|
266
|
-
m = Object.assign(m, proto);
|
|
267
|
-
return m;
|
|
268
|
-
}
|
|
269
269
|
toApiJson() {
|
|
270
270
|
const toReturn = {};
|
|
271
271
|
if (typeof this.address !== 'undefined') {
|
|
@@ -290,12 +290,6 @@ export class InvoiceCustomerAddress {
|
|
|
290
290
|
}
|
|
291
291
|
}
|
|
292
292
|
export class ListInvoicesRequestFiltersDateFilter {
|
|
293
|
-
constructor(kwargs) {
|
|
294
|
-
if (!kwargs) {
|
|
295
|
-
return;
|
|
296
|
-
}
|
|
297
|
-
Object.assign(this, kwargs);
|
|
298
|
-
}
|
|
299
293
|
static fromProto(proto) {
|
|
300
294
|
let m = new ListInvoicesRequestFiltersDateFilter();
|
|
301
295
|
m = Object.assign(m, proto);
|
|
@@ -310,6 +304,12 @@ export class ListInvoicesRequestFiltersDateFilter {
|
|
|
310
304
|
}
|
|
311
305
|
return m;
|
|
312
306
|
}
|
|
307
|
+
constructor(kwargs) {
|
|
308
|
+
if (!kwargs) {
|
|
309
|
+
return;
|
|
310
|
+
}
|
|
311
|
+
Object.assign(this, kwargs);
|
|
312
|
+
}
|
|
313
313
|
toApiJson() {
|
|
314
314
|
const toReturn = {};
|
|
315
315
|
if (typeof this.dateField !== 'undefined') {
|
|
@@ -325,17 +325,17 @@ export class ListInvoicesRequestFiltersDateFilter {
|
|
|
325
325
|
}
|
|
326
326
|
}
|
|
327
327
|
export class DeleteInvoiceRequest {
|
|
328
|
+
static fromProto(proto) {
|
|
329
|
+
let m = new DeleteInvoiceRequest();
|
|
330
|
+
m = Object.assign(m, proto);
|
|
331
|
+
return m;
|
|
332
|
+
}
|
|
328
333
|
constructor(kwargs) {
|
|
329
334
|
if (!kwargs) {
|
|
330
335
|
return;
|
|
331
336
|
}
|
|
332
337
|
Object.assign(this, kwargs);
|
|
333
338
|
}
|
|
334
|
-
static fromProto(proto) {
|
|
335
|
-
let m = new DeleteInvoiceRequest();
|
|
336
|
-
m = Object.assign(m, proto);
|
|
337
|
-
return m;
|
|
338
|
-
}
|
|
339
339
|
toApiJson() {
|
|
340
340
|
const toReturn = {};
|
|
341
341
|
if (typeof this.merchantId !== 'undefined') {
|
|
@@ -348,17 +348,17 @@ export class DeleteInvoiceRequest {
|
|
|
348
348
|
}
|
|
349
349
|
}
|
|
350
350
|
export class DeleteLineItemRequest {
|
|
351
|
+
static fromProto(proto) {
|
|
352
|
+
let m = new DeleteLineItemRequest();
|
|
353
|
+
m = Object.assign(m, proto);
|
|
354
|
+
return m;
|
|
355
|
+
}
|
|
351
356
|
constructor(kwargs) {
|
|
352
357
|
if (!kwargs) {
|
|
353
358
|
return;
|
|
354
359
|
}
|
|
355
360
|
Object.assign(this, kwargs);
|
|
356
361
|
}
|
|
357
|
-
static fromProto(proto) {
|
|
358
|
-
let m = new DeleteLineItemRequest();
|
|
359
|
-
m = Object.assign(m, proto);
|
|
360
|
-
return m;
|
|
361
|
-
}
|
|
362
362
|
toApiJson() {
|
|
363
363
|
const toReturn = {};
|
|
364
364
|
if (typeof this.merchantId !== 'undefined') {
|
|
@@ -374,12 +374,6 @@ export class DeleteLineItemRequest {
|
|
|
374
374
|
}
|
|
375
375
|
}
|
|
376
376
|
export class DeleteLineItemResponse {
|
|
377
|
-
constructor(kwargs) {
|
|
378
|
-
if (!kwargs) {
|
|
379
|
-
return;
|
|
380
|
-
}
|
|
381
|
-
Object.assign(this, kwargs);
|
|
382
|
-
}
|
|
383
377
|
static fromProto(proto) {
|
|
384
378
|
let m = new DeleteLineItemResponse();
|
|
385
379
|
m = Object.assign(m, proto);
|
|
@@ -388,6 +382,12 @@ export class DeleteLineItemResponse {
|
|
|
388
382
|
}
|
|
389
383
|
return m;
|
|
390
384
|
}
|
|
385
|
+
constructor(kwargs) {
|
|
386
|
+
if (!kwargs) {
|
|
387
|
+
return;
|
|
388
|
+
}
|
|
389
|
+
Object.assign(this, kwargs);
|
|
390
|
+
}
|
|
391
391
|
toApiJson() {
|
|
392
392
|
const toReturn = {};
|
|
393
393
|
if (typeof this.invoice !== 'undefined' && this.invoice !== null) {
|
|
@@ -397,17 +397,17 @@ export class DeleteLineItemResponse {
|
|
|
397
397
|
}
|
|
398
398
|
}
|
|
399
399
|
export class DuplicateInvoiceRequest {
|
|
400
|
+
static fromProto(proto) {
|
|
401
|
+
let m = new DuplicateInvoiceRequest();
|
|
402
|
+
m = Object.assign(m, proto);
|
|
403
|
+
return m;
|
|
404
|
+
}
|
|
400
405
|
constructor(kwargs) {
|
|
401
406
|
if (!kwargs) {
|
|
402
407
|
return;
|
|
403
408
|
}
|
|
404
409
|
Object.assign(this, kwargs);
|
|
405
410
|
}
|
|
406
|
-
static fromProto(proto) {
|
|
407
|
-
let m = new DuplicateInvoiceRequest();
|
|
408
|
-
m = Object.assign(m, proto);
|
|
409
|
-
return m;
|
|
410
|
-
}
|
|
411
411
|
toApiJson() {
|
|
412
412
|
const toReturn = {};
|
|
413
413
|
if (typeof this.merchantId !== 'undefined') {
|
|
@@ -420,17 +420,17 @@ export class DuplicateInvoiceRequest {
|
|
|
420
420
|
}
|
|
421
421
|
}
|
|
422
422
|
export class DuplicateInvoiceResponse {
|
|
423
|
+
static fromProto(proto) {
|
|
424
|
+
let m = new DuplicateInvoiceResponse();
|
|
425
|
+
m = Object.assign(m, proto);
|
|
426
|
+
return m;
|
|
427
|
+
}
|
|
423
428
|
constructor(kwargs) {
|
|
424
429
|
if (!kwargs) {
|
|
425
430
|
return;
|
|
426
431
|
}
|
|
427
432
|
Object.assign(this, kwargs);
|
|
428
433
|
}
|
|
429
|
-
static fromProto(proto) {
|
|
430
|
-
let m = new DuplicateInvoiceResponse();
|
|
431
|
-
m = Object.assign(m, proto);
|
|
432
|
-
return m;
|
|
433
|
-
}
|
|
434
434
|
toApiJson() {
|
|
435
435
|
const toReturn = {};
|
|
436
436
|
if (typeof this.invoiceId !== 'undefined') {
|
|
@@ -440,12 +440,6 @@ export class DuplicateInvoiceResponse {
|
|
|
440
440
|
}
|
|
441
441
|
}
|
|
442
442
|
export class ListInvoicesRequestFilters {
|
|
443
|
-
constructor(kwargs) {
|
|
444
|
-
if (!kwargs) {
|
|
445
|
-
return;
|
|
446
|
-
}
|
|
447
|
-
Object.assign(this, kwargs);
|
|
448
|
-
}
|
|
449
443
|
static fromProto(proto) {
|
|
450
444
|
let m = new ListInvoicesRequestFilters();
|
|
451
445
|
m = Object.assign(m, proto);
|
|
@@ -457,6 +451,12 @@ export class ListInvoicesRequestFilters {
|
|
|
457
451
|
}
|
|
458
452
|
return m;
|
|
459
453
|
}
|
|
454
|
+
constructor(kwargs) {
|
|
455
|
+
if (!kwargs) {
|
|
456
|
+
return;
|
|
457
|
+
}
|
|
458
|
+
Object.assign(this, kwargs);
|
|
459
|
+
}
|
|
460
460
|
toApiJson() {
|
|
461
461
|
const toReturn = {};
|
|
462
462
|
if (typeof this.merchantId !== 'undefined') {
|
|
@@ -481,17 +481,17 @@ export class ListInvoicesRequestFilters {
|
|
|
481
481
|
}
|
|
482
482
|
}
|
|
483
483
|
export class GetInvoiceRequest {
|
|
484
|
+
static fromProto(proto) {
|
|
485
|
+
let m = new GetInvoiceRequest();
|
|
486
|
+
m = Object.assign(m, proto);
|
|
487
|
+
return m;
|
|
488
|
+
}
|
|
484
489
|
constructor(kwargs) {
|
|
485
490
|
if (!kwargs) {
|
|
486
491
|
return;
|
|
487
492
|
}
|
|
488
493
|
Object.assign(this, kwargs);
|
|
489
494
|
}
|
|
490
|
-
static fromProto(proto) {
|
|
491
|
-
let m = new GetInvoiceRequest();
|
|
492
|
-
m = Object.assign(m, proto);
|
|
493
|
-
return m;
|
|
494
|
-
}
|
|
495
495
|
toApiJson() {
|
|
496
496
|
const toReturn = {};
|
|
497
497
|
if (typeof this.merchantId !== 'undefined') {
|
|
@@ -504,12 +504,6 @@ export class GetInvoiceRequest {
|
|
|
504
504
|
}
|
|
505
505
|
}
|
|
506
506
|
export class GetInvoiceResponse {
|
|
507
|
-
constructor(kwargs) {
|
|
508
|
-
if (!kwargs) {
|
|
509
|
-
return;
|
|
510
|
-
}
|
|
511
|
-
Object.assign(this, kwargs);
|
|
512
|
-
}
|
|
513
507
|
static fromProto(proto) {
|
|
514
508
|
let m = new GetInvoiceResponse();
|
|
515
509
|
m = Object.assign(m, proto);
|
|
@@ -518,6 +512,12 @@ export class GetInvoiceResponse {
|
|
|
518
512
|
}
|
|
519
513
|
return m;
|
|
520
514
|
}
|
|
515
|
+
constructor(kwargs) {
|
|
516
|
+
if (!kwargs) {
|
|
517
|
+
return;
|
|
518
|
+
}
|
|
519
|
+
Object.assign(this, kwargs);
|
|
520
|
+
}
|
|
521
521
|
toApiJson() {
|
|
522
522
|
const toReturn = {};
|
|
523
523
|
if (typeof this.invoice !== 'undefined' && this.invoice !== null) {
|
|
@@ -527,12 +527,6 @@ export class GetInvoiceResponse {
|
|
|
527
527
|
}
|
|
528
528
|
}
|
|
529
529
|
export class Invoice {
|
|
530
|
-
constructor(kwargs) {
|
|
531
|
-
if (!kwargs) {
|
|
532
|
-
return;
|
|
533
|
-
}
|
|
534
|
-
Object.assign(this, kwargs);
|
|
535
|
-
}
|
|
536
530
|
static fromProto(proto) {
|
|
537
531
|
let m = new Invoice();
|
|
538
532
|
m = Object.assign(m, proto);
|
|
@@ -592,6 +586,12 @@ export class Invoice {
|
|
|
592
586
|
}
|
|
593
587
|
return m;
|
|
594
588
|
}
|
|
589
|
+
constructor(kwargs) {
|
|
590
|
+
if (!kwargs) {
|
|
591
|
+
return;
|
|
592
|
+
}
|
|
593
|
+
Object.assign(this, kwargs);
|
|
594
|
+
}
|
|
595
595
|
toApiJson() {
|
|
596
596
|
const toReturn = {};
|
|
597
597
|
if (typeof this.merchantId !== 'undefined') {
|
|
@@ -688,12 +688,6 @@ export class Invoice {
|
|
|
688
688
|
}
|
|
689
689
|
}
|
|
690
690
|
export class InvoiceItem {
|
|
691
|
-
constructor(kwargs) {
|
|
692
|
-
if (!kwargs) {
|
|
693
|
-
return;
|
|
694
|
-
}
|
|
695
|
-
Object.assign(this, kwargs);
|
|
696
|
-
}
|
|
697
691
|
static fromProto(proto) {
|
|
698
692
|
let m = new InvoiceItem();
|
|
699
693
|
m = Object.assign(m, proto);
|
|
@@ -717,6 +711,12 @@ export class InvoiceItem {
|
|
|
717
711
|
}
|
|
718
712
|
return m;
|
|
719
713
|
}
|
|
714
|
+
constructor(kwargs) {
|
|
715
|
+
if (!kwargs) {
|
|
716
|
+
return;
|
|
717
|
+
}
|
|
718
|
+
Object.assign(this, kwargs);
|
|
719
|
+
}
|
|
720
720
|
toApiJson() {
|
|
721
721
|
const toReturn = {};
|
|
722
722
|
if (typeof this.id !== 'undefined') {
|
|
@@ -759,12 +759,6 @@ export class InvoiceItem {
|
|
|
759
759
|
}
|
|
760
760
|
}
|
|
761
761
|
export class ListInvoicesRequest {
|
|
762
|
-
constructor(kwargs) {
|
|
763
|
-
if (!kwargs) {
|
|
764
|
-
return;
|
|
765
|
-
}
|
|
766
|
-
Object.assign(this, kwargs);
|
|
767
|
-
}
|
|
768
762
|
static fromProto(proto) {
|
|
769
763
|
let m = new ListInvoicesRequest();
|
|
770
764
|
m = Object.assign(m, proto);
|
|
@@ -776,6 +770,12 @@ export class ListInvoicesRequest {
|
|
|
776
770
|
}
|
|
777
771
|
return m;
|
|
778
772
|
}
|
|
773
|
+
constructor(kwargs) {
|
|
774
|
+
if (!kwargs) {
|
|
775
|
+
return;
|
|
776
|
+
}
|
|
777
|
+
Object.assign(this, kwargs);
|
|
778
|
+
}
|
|
779
779
|
toApiJson() {
|
|
780
780
|
const toReturn = {};
|
|
781
781
|
if (typeof this.filters !== 'undefined' && this.filters !== null) {
|
|
@@ -788,12 +788,6 @@ export class ListInvoicesRequest {
|
|
|
788
788
|
}
|
|
789
789
|
}
|
|
790
790
|
export class ListInvoicesResponse {
|
|
791
|
-
constructor(kwargs) {
|
|
792
|
-
if (!kwargs) {
|
|
793
|
-
return;
|
|
794
|
-
}
|
|
795
|
-
Object.assign(this, kwargs);
|
|
796
|
-
}
|
|
797
791
|
static fromProto(proto) {
|
|
798
792
|
let m = new ListInvoicesResponse();
|
|
799
793
|
m = Object.assign(m, proto);
|
|
@@ -805,6 +799,12 @@ export class ListInvoicesResponse {
|
|
|
805
799
|
}
|
|
806
800
|
return m;
|
|
807
801
|
}
|
|
802
|
+
constructor(kwargs) {
|
|
803
|
+
if (!kwargs) {
|
|
804
|
+
return;
|
|
805
|
+
}
|
|
806
|
+
Object.assign(this, kwargs);
|
|
807
|
+
}
|
|
808
808
|
toApiJson() {
|
|
809
809
|
const toReturn = {};
|
|
810
810
|
if (typeof this.invoices !== 'undefined' && this.invoices !== null) {
|
|
@@ -817,17 +817,17 @@ export class ListInvoicesResponse {
|
|
|
817
817
|
}
|
|
818
818
|
}
|
|
819
819
|
export class PayInvoiceRequest {
|
|
820
|
+
static fromProto(proto) {
|
|
821
|
+
let m = new PayInvoiceRequest();
|
|
822
|
+
m = Object.assign(m, proto);
|
|
823
|
+
return m;
|
|
824
|
+
}
|
|
820
825
|
constructor(kwargs) {
|
|
821
826
|
if (!kwargs) {
|
|
822
827
|
return;
|
|
823
828
|
}
|
|
824
829
|
Object.assign(this, kwargs);
|
|
825
830
|
}
|
|
826
|
-
static fromProto(proto) {
|
|
827
|
-
let m = new PayInvoiceRequest();
|
|
828
|
-
m = Object.assign(m, proto);
|
|
829
|
-
return m;
|
|
830
|
-
}
|
|
831
831
|
toApiJson() {
|
|
832
832
|
const toReturn = {};
|
|
833
833
|
if (typeof this.merchantId !== 'undefined') {
|
|
@@ -840,12 +840,6 @@ export class PayInvoiceRequest {
|
|
|
840
840
|
}
|
|
841
841
|
}
|
|
842
842
|
export class PaymentLinkItem {
|
|
843
|
-
constructor(kwargs) {
|
|
844
|
-
if (!kwargs) {
|
|
845
|
-
return;
|
|
846
|
-
}
|
|
847
|
-
Object.assign(this, kwargs);
|
|
848
|
-
}
|
|
849
843
|
static fromProto(proto) {
|
|
850
844
|
let m = new PaymentLinkItem();
|
|
851
845
|
m = Object.assign(m, proto);
|
|
@@ -854,6 +848,12 @@ export class PaymentLinkItem {
|
|
|
854
848
|
}
|
|
855
849
|
return m;
|
|
856
850
|
}
|
|
851
|
+
constructor(kwargs) {
|
|
852
|
+
if (!kwargs) {
|
|
853
|
+
return;
|
|
854
|
+
}
|
|
855
|
+
Object.assign(this, kwargs);
|
|
856
|
+
}
|
|
857
857
|
toApiJson() {
|
|
858
858
|
const toReturn = {};
|
|
859
859
|
if (typeof this.amount !== 'undefined') {
|
|
@@ -869,17 +869,17 @@ export class PaymentLinkItem {
|
|
|
869
869
|
}
|
|
870
870
|
}
|
|
871
871
|
export class RemoveBundleRequest {
|
|
872
|
+
static fromProto(proto) {
|
|
873
|
+
let m = new RemoveBundleRequest();
|
|
874
|
+
m = Object.assign(m, proto);
|
|
875
|
+
return m;
|
|
876
|
+
}
|
|
872
877
|
constructor(kwargs) {
|
|
873
878
|
if (!kwargs) {
|
|
874
879
|
return;
|
|
875
880
|
}
|
|
876
881
|
Object.assign(this, kwargs);
|
|
877
882
|
}
|
|
878
|
-
static fromProto(proto) {
|
|
879
|
-
let m = new RemoveBundleRequest();
|
|
880
|
-
m = Object.assign(m, proto);
|
|
881
|
-
return m;
|
|
882
|
-
}
|
|
883
883
|
toApiJson() {
|
|
884
884
|
const toReturn = {};
|
|
885
885
|
if (typeof this.invoiceId !== 'undefined') {
|
|
@@ -898,12 +898,6 @@ export class RemoveBundleRequest {
|
|
|
898
898
|
}
|
|
899
899
|
}
|
|
900
900
|
export class RemoveBundleResponse {
|
|
901
|
-
constructor(kwargs) {
|
|
902
|
-
if (!kwargs) {
|
|
903
|
-
return;
|
|
904
|
-
}
|
|
905
|
-
Object.assign(this, kwargs);
|
|
906
|
-
}
|
|
907
901
|
static fromProto(proto) {
|
|
908
902
|
let m = new RemoveBundleResponse();
|
|
909
903
|
m = Object.assign(m, proto);
|
|
@@ -912,6 +906,12 @@ export class RemoveBundleResponse {
|
|
|
912
906
|
}
|
|
913
907
|
return m;
|
|
914
908
|
}
|
|
909
|
+
constructor(kwargs) {
|
|
910
|
+
if (!kwargs) {
|
|
911
|
+
return;
|
|
912
|
+
}
|
|
913
|
+
Object.assign(this, kwargs);
|
|
914
|
+
}
|
|
915
915
|
toApiJson() {
|
|
916
916
|
const toReturn = {};
|
|
917
917
|
if (typeof this.invoice !== 'undefined' && this.invoice !== null) {
|
|
@@ -921,17 +921,17 @@ export class RemoveBundleResponse {
|
|
|
921
921
|
}
|
|
922
922
|
}
|
|
923
923
|
export class SendInvoiceRequest {
|
|
924
|
+
static fromProto(proto) {
|
|
925
|
+
let m = new SendInvoiceRequest();
|
|
926
|
+
m = Object.assign(m, proto);
|
|
927
|
+
return m;
|
|
928
|
+
}
|
|
924
929
|
constructor(kwargs) {
|
|
925
930
|
if (!kwargs) {
|
|
926
931
|
return;
|
|
927
932
|
}
|
|
928
933
|
Object.assign(this, kwargs);
|
|
929
934
|
}
|
|
930
|
-
static fromProto(proto) {
|
|
931
|
-
let m = new SendInvoiceRequest();
|
|
932
|
-
m = Object.assign(m, proto);
|
|
933
|
-
return m;
|
|
934
|
-
}
|
|
935
935
|
toApiJson() {
|
|
936
936
|
const toReturn = {};
|
|
937
937
|
if (typeof this.merchantId !== 'undefined') {
|
|
@@ -950,17 +950,17 @@ export class SendInvoiceRequest {
|
|
|
950
950
|
}
|
|
951
951
|
}
|
|
952
952
|
export class UpdateBundleRequest {
|
|
953
|
+
static fromProto(proto) {
|
|
954
|
+
let m = new UpdateBundleRequest();
|
|
955
|
+
m = Object.assign(m, proto);
|
|
956
|
+
return m;
|
|
957
|
+
}
|
|
953
958
|
constructor(kwargs) {
|
|
954
959
|
if (!kwargs) {
|
|
955
960
|
return;
|
|
956
961
|
}
|
|
957
962
|
Object.assign(this, kwargs);
|
|
958
963
|
}
|
|
959
|
-
static fromProto(proto) {
|
|
960
|
-
let m = new UpdateBundleRequest();
|
|
961
|
-
m = Object.assign(m, proto);
|
|
962
|
-
return m;
|
|
963
|
-
}
|
|
964
964
|
toApiJson() {
|
|
965
965
|
const toReturn = {};
|
|
966
966
|
if (typeof this.merchantId !== 'undefined') {
|
|
@@ -982,12 +982,6 @@ export class UpdateBundleRequest {
|
|
|
982
982
|
}
|
|
983
983
|
}
|
|
984
984
|
export class UpdateBundleResponse {
|
|
985
|
-
constructor(kwargs) {
|
|
986
|
-
if (!kwargs) {
|
|
987
|
-
return;
|
|
988
|
-
}
|
|
989
|
-
Object.assign(this, kwargs);
|
|
990
|
-
}
|
|
991
985
|
static fromProto(proto) {
|
|
992
986
|
let m = new UpdateBundleResponse();
|
|
993
987
|
m = Object.assign(m, proto);
|
|
@@ -996,6 +990,12 @@ export class UpdateBundleResponse {
|
|
|
996
990
|
}
|
|
997
991
|
return m;
|
|
998
992
|
}
|
|
993
|
+
constructor(kwargs) {
|
|
994
|
+
if (!kwargs) {
|
|
995
|
+
return;
|
|
996
|
+
}
|
|
997
|
+
Object.assign(this, kwargs);
|
|
998
|
+
}
|
|
999
999
|
toApiJson() {
|
|
1000
1000
|
const toReturn = {};
|
|
1001
1001
|
if (typeof this.invoice !== 'undefined' && this.invoice !== null) {
|
|
@@ -1005,17 +1005,17 @@ export class UpdateBundleResponse {
|
|
|
1005
1005
|
}
|
|
1006
1006
|
}
|
|
1007
1007
|
export class UpdateDefaultTaxRatesRequest {
|
|
1008
|
+
static fromProto(proto) {
|
|
1009
|
+
let m = new UpdateDefaultTaxRatesRequest();
|
|
1010
|
+
m = Object.assign(m, proto);
|
|
1011
|
+
return m;
|
|
1012
|
+
}
|
|
1008
1013
|
constructor(kwargs) {
|
|
1009
1014
|
if (!kwargs) {
|
|
1010
1015
|
return;
|
|
1011
1016
|
}
|
|
1012
1017
|
Object.assign(this, kwargs);
|
|
1013
1018
|
}
|
|
1014
|
-
static fromProto(proto) {
|
|
1015
|
-
let m = new UpdateDefaultTaxRatesRequest();
|
|
1016
|
-
m = Object.assign(m, proto);
|
|
1017
|
-
return m;
|
|
1018
|
-
}
|
|
1019
1019
|
toApiJson() {
|
|
1020
1020
|
const toReturn = {};
|
|
1021
1021
|
if (typeof this.invoiceId !== 'undefined') {
|
|
@@ -1031,12 +1031,6 @@ export class UpdateDefaultTaxRatesRequest {
|
|
|
1031
1031
|
}
|
|
1032
1032
|
}
|
|
1033
1033
|
export class UpdateDefaultTaxRatesResponse {
|
|
1034
|
-
constructor(kwargs) {
|
|
1035
|
-
if (!kwargs) {
|
|
1036
|
-
return;
|
|
1037
|
-
}
|
|
1038
|
-
Object.assign(this, kwargs);
|
|
1039
|
-
}
|
|
1040
1034
|
static fromProto(proto) {
|
|
1041
1035
|
let m = new UpdateDefaultTaxRatesResponse();
|
|
1042
1036
|
m = Object.assign(m, proto);
|
|
@@ -1045,6 +1039,12 @@ export class UpdateDefaultTaxRatesResponse {
|
|
|
1045
1039
|
}
|
|
1046
1040
|
return m;
|
|
1047
1041
|
}
|
|
1042
|
+
constructor(kwargs) {
|
|
1043
|
+
if (!kwargs) {
|
|
1044
|
+
return;
|
|
1045
|
+
}
|
|
1046
|
+
Object.assign(this, kwargs);
|
|
1047
|
+
}
|
|
1048
1048
|
toApiJson() {
|
|
1049
1049
|
const toReturn = {};
|
|
1050
1050
|
if (typeof this.invoice !== 'undefined' && this.invoice !== null) {
|
|
@@ -1054,12 +1054,6 @@ export class UpdateDefaultTaxRatesResponse {
|
|
|
1054
1054
|
}
|
|
1055
1055
|
}
|
|
1056
1056
|
export class UpdateInvoiceRequest {
|
|
1057
|
-
constructor(kwargs) {
|
|
1058
|
-
if (!kwargs) {
|
|
1059
|
-
return;
|
|
1060
|
-
}
|
|
1061
|
-
Object.assign(this, kwargs);
|
|
1062
|
-
}
|
|
1063
1057
|
static fromProto(proto) {
|
|
1064
1058
|
let m = new UpdateInvoiceRequest();
|
|
1065
1059
|
m = Object.assign(m, proto);
|
|
@@ -1071,6 +1065,12 @@ export class UpdateInvoiceRequest {
|
|
|
1071
1065
|
}
|
|
1072
1066
|
return m;
|
|
1073
1067
|
}
|
|
1068
|
+
constructor(kwargs) {
|
|
1069
|
+
if (!kwargs) {
|
|
1070
|
+
return;
|
|
1071
|
+
}
|
|
1072
|
+
Object.assign(this, kwargs);
|
|
1073
|
+
}
|
|
1074
1074
|
toApiJson() {
|
|
1075
1075
|
const toReturn = {};
|
|
1076
1076
|
if (typeof this.invoice !== 'undefined' && this.invoice !== null) {
|
|
@@ -1083,12 +1083,6 @@ export class UpdateInvoiceRequest {
|
|
|
1083
1083
|
}
|
|
1084
1084
|
}
|
|
1085
1085
|
export class UpdateInvoiceResponse {
|
|
1086
|
-
constructor(kwargs) {
|
|
1087
|
-
if (!kwargs) {
|
|
1088
|
-
return;
|
|
1089
|
-
}
|
|
1090
|
-
Object.assign(this, kwargs);
|
|
1091
|
-
}
|
|
1092
1086
|
static fromProto(proto) {
|
|
1093
1087
|
let m = new UpdateInvoiceResponse();
|
|
1094
1088
|
m = Object.assign(m, proto);
|
|
@@ -1097,6 +1091,12 @@ export class UpdateInvoiceResponse {
|
|
|
1097
1091
|
}
|
|
1098
1092
|
return m;
|
|
1099
1093
|
}
|
|
1094
|
+
constructor(kwargs) {
|
|
1095
|
+
if (!kwargs) {
|
|
1096
|
+
return;
|
|
1097
|
+
}
|
|
1098
|
+
Object.assign(this, kwargs);
|
|
1099
|
+
}
|
|
1100
1100
|
toApiJson() {
|
|
1101
1101
|
const toReturn = {};
|
|
1102
1102
|
if (typeof this.invoice !== 'undefined' && this.invoice !== null) {
|
|
@@ -1106,12 +1106,6 @@ export class UpdateInvoiceResponse {
|
|
|
1106
1106
|
}
|
|
1107
1107
|
}
|
|
1108
1108
|
export class UpdateLineItemRequest {
|
|
1109
|
-
constructor(kwargs) {
|
|
1110
|
-
if (!kwargs) {
|
|
1111
|
-
return;
|
|
1112
|
-
}
|
|
1113
|
-
Object.assign(this, kwargs);
|
|
1114
|
-
}
|
|
1115
1109
|
static fromProto(proto) {
|
|
1116
1110
|
let m = new UpdateLineItemRequest();
|
|
1117
1111
|
m = Object.assign(m, proto);
|
|
@@ -1120,6 +1114,12 @@ export class UpdateLineItemRequest {
|
|
|
1120
1114
|
}
|
|
1121
1115
|
return m;
|
|
1122
1116
|
}
|
|
1117
|
+
constructor(kwargs) {
|
|
1118
|
+
if (!kwargs) {
|
|
1119
|
+
return;
|
|
1120
|
+
}
|
|
1121
|
+
Object.assign(this, kwargs);
|
|
1122
|
+
}
|
|
1123
1123
|
toApiJson() {
|
|
1124
1124
|
const toReturn = {};
|
|
1125
1125
|
if (typeof this.merchantId !== 'undefined') {
|
|
@@ -1150,12 +1150,6 @@ export class UpdateLineItemRequest {
|
|
|
1150
1150
|
}
|
|
1151
1151
|
}
|
|
1152
1152
|
export class UpdateLineItemResponse {
|
|
1153
|
-
constructor(kwargs) {
|
|
1154
|
-
if (!kwargs) {
|
|
1155
|
-
return;
|
|
1156
|
-
}
|
|
1157
|
-
Object.assign(this, kwargs);
|
|
1158
|
-
}
|
|
1159
1153
|
static fromProto(proto) {
|
|
1160
1154
|
let m = new UpdateLineItemResponse();
|
|
1161
1155
|
m = Object.assign(m, proto);
|
|
@@ -1164,6 +1158,12 @@ export class UpdateLineItemResponse {
|
|
|
1164
1158
|
}
|
|
1165
1159
|
return m;
|
|
1166
1160
|
}
|
|
1161
|
+
constructor(kwargs) {
|
|
1162
|
+
if (!kwargs) {
|
|
1163
|
+
return;
|
|
1164
|
+
}
|
|
1165
|
+
Object.assign(this, kwargs);
|
|
1166
|
+
}
|
|
1167
1167
|
toApiJson() {
|
|
1168
1168
|
const toReturn = {};
|
|
1169
1169
|
if (typeof this.invoice !== 'undefined' && this.invoice !== null) {
|
|
@@ -1173,17 +1173,17 @@ export class UpdateLineItemResponse {
|
|
|
1173
1173
|
}
|
|
1174
1174
|
}
|
|
1175
1175
|
export class VoidInvoiceRequest {
|
|
1176
|
+
static fromProto(proto) {
|
|
1177
|
+
let m = new VoidInvoiceRequest();
|
|
1178
|
+
m = Object.assign(m, proto);
|
|
1179
|
+
return m;
|
|
1180
|
+
}
|
|
1176
1181
|
constructor(kwargs) {
|
|
1177
1182
|
if (!kwargs) {
|
|
1178
1183
|
return;
|
|
1179
1184
|
}
|
|
1180
1185
|
Object.assign(this, kwargs);
|
|
1181
1186
|
}
|
|
1182
|
-
static fromProto(proto) {
|
|
1183
|
-
let m = new VoidInvoiceRequest();
|
|
1184
|
-
m = Object.assign(m, proto);
|
|
1185
|
-
return m;
|
|
1186
|
-
}
|
|
1187
1187
|
toApiJson() {
|
|
1188
1188
|
const toReturn = {};
|
|
1189
1189
|
if (typeof this.merchantId !== 'undefined') {
|
|
@@ -1195,4 +1195,4 @@ export class VoidInvoiceRequest {
|
|
|
1195
1195
|
return toReturn;
|
|
1196
1196
|
}
|
|
1197
1197
|
}
|
|
1198
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW52b2ljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2JpbGxpbmdfc2RrL3NyYy9saWIvX2ludGVybmFsL29iamVjdHMvaW52b2ljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFPQSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDakQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ3JELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUNwRCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQ3pDLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxxQkFBcUIsRUFBRSxNQUFNLFVBQVUsQ0FBQztBQUN0RSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sWUFBWSxDQUFDO0FBQ3JDLE9BQU8sS0FBSyxDQUFDLE1BQU0sVUFBVSxDQUFDO0FBRTlCLE1BQU0sVUFBVSxpQkFBaUIsQ0FBSSxPQUFZLEVBQUUsS0FBYTtJQUM5RCxJQUFJLE9BQU8sS0FBSyxLQUFLLFFBQVEsRUFBRTtRQUM3QixPQUFPLEtBQUssQ0FBQztLQUNkO0lBQ0QsT0FBTyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDeEIsQ0FBQztBQUVELE1BQU0sT0FBTyxnQkFBZ0I7SUFXekIsWUFBWSxNQUFvQztRQUM1QyxJQUFJLENBQUMsTUFBTSxFQUFFO1lBQ1QsT0FBTztTQUNWO1FBQ0QsTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLENBQUM7SUFDaEMsQ0FBQztJQVhELE1BQU0sQ0FBQyxTQUFTLENBQUMsS0FBVTtRQUN2QixJQUFJLENBQUMsR0FBRyxJQUFJLGdCQUFnQixFQUFFLENBQUM7UUFDL0IsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQzVCLE9BQU8sQ0FBQyxDQUFD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LE9BQU8sS0FBSyxJQUFJLEVBQUU7WUFBQyxRQUFRLENBQUMsU0FBUyxDQUFDLEdBQUcsV0FBVyxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFFLElBQUksQ0FBQyxPQUFlLENBQUMsU0FBUyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUM7U0FBQztRQUN6SyxPQUFPLFFBQVEsQ0FBQztJQUNwQixDQUFDO0NBQ0o7QUFFRCxNQUFNLE9BQU8sa0JBQWtCO0lBVTNCLFlBQVksTUFBc0M7UUFDOUMsSUFBSSxDQUFDLE1BQU0sRUFBRTtZQUNULE9BQU87U0FDVjtRQUNELE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBQ2hDLENBQUM7SUFYRCxNQUFNLENBQUMsU0FBUyxDQUFDLEtBQVU7UUFDdkIsSUFBSSxDQUFDLEdBQUcsSUFBSSxrQkFBa0IsRUFBRSxDQUFDO1FBQ2pDLENBQUMsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUM1QixPQUFPLENBQUMsQ0FBQztJQUNiLENBQUM7SUFTRCxTQUFTO1FBQ0wsTUFBTSxRQUFRLEdBRVYsRUFBRSxDQUFDO1FBRVAsSUFBSSxPQUFPLElBQUksQ0FBQyxVQUFVLEtBQUssV0FBVyxFQUFFO1lBQUMsUUFBUSxDQUFDLFlBQVksQ0FBQyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUM7U0FBQztRQUN2RixJQUFJLE9BQU8sSUFBSSxDQUFDLFNBQVMsS0FBSyxXQUFXLEVBQUU7WUFBQyxRQUFRLENBQUMsV0FBVyxDQUFDLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQztTQUFDO1FBQ3BGLE9BQU8sUUFBUSxDQUFDO0lBQ3BCLENBQUM7Q0FDSiIsInNvdXJjZXNDb250ZW50IjpbIi8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuLy8gQ29kZSBnZW5lcmF0ZWQgYnkgc2RrZ2VuXG4vLyBETyBOT1QgRURJVCEuXG4vL1xuLy8gT2JqZWN0cy5cbi8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuaW1wb3J0ICogYXMgaSBmcm9tICcuLi9pbnRlcmZhY2VzJztcbmltcG9ydCB7IEFwcGxpZWRCdW5kbGUgfSBmcm9tICcuL2FwcGxpZWQtYnVuZGxlJztcbmltcG9ydCB7IEFwcGxpZWREaXNjb3VudCB9IGZyb20gJy4vYXBwbGllZC1kaXNjb3VudCc7XG5pbXBvcnQgeyBBcHBsaWVkVGF4UmF0ZSB9IGZyb20gJy4vYXBwbGllZC10YXgtcmF0ZSc7XG5pbXBvcnQgeyBGaWVsZE1hc2sgfSBmcm9tICcuL2ZpZWxkLW1hc2snO1xuaW1wb3J0IHsgUGFnZWRSZXF1ZXN0T3B0aW9ucywgUGFnZWRSZXNwb25zZU1ldGFkYXRhIH0gZnJvbSAnLi9jb21tb24nO1xuaW1wb3J0IHsgVGF4UmF0ZSB9IGZyb20gJy4vdGF4LXJhdGUnO1xuaW1wb3J0ICogYXMgZSBmcm9tICcuLi9lbnVtcyc7XG5cbmV4cG9ydCBmdW5jdGlvbiBlbnVtU3RyaW5nVG9WYWx1ZTxFPihlbnVtUmVmOiBhbnksIHZhbHVlOiBzdHJpbmcpOiBFIHtcbiAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcicpIHtcbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cbiAgcmV0dXJuIGVudW1SZWZbdmFsdWVdO1xufVxuXG5leHBvcnQgY2xhc3MgQWRkQnVuZGxlUmVxdWVzdCBpbXBsZW1lbnRzIGkuQWRkQnVuZGxlUmVxdWVzdEludGVyZmFjZSB7XG4gICAgaW52b2ljZUlkOiBzdHJpbmc7XG4gICAgbWVyY2hhbnRJZDogc3RyaW5nO1xuICAgIGJ1bmRsZUlkOiBzdHJpbmc7XG5cbiAgICBzdGF0aWMgZnJvbVByb3RvKHByb3RvOiBhbnkpOiBBZGRCdW5kbGVSZXF1ZXN0IHtcbiAgICAgICAgbGV0IG0gPSBuZXcgQWRkQnVuZGxlUmVxdWVzdCgpO1xuICAgICAgICBtID0gT2JqZWN0LmFzc2lnbihtLCBwcm90byk7XG4gICAgICAgIHJldHVybiBtO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKGt3YXJncz86IGkuQWRkQnVuZGxlUmVxdWVzdEludGVyZmFjZSkge1xuICAgICAgICBpZiAoIWt3YXJncykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywga3dhcmdzKTtcbiAgICB9XG5cbiAgICB0b0FwaUpzb24oKTogb2JqZWN0IHtcbiAgICAgICAgY29uc3QgdG9SZXR1cm46IHtcbiAgICAgICAgICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgICAgICAgfSA9IHt9O1xuICAgICAgICBcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmludm9pY2VJZCAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnaW52b2ljZUlkJ10gPSB0aGlzLmludm9pY2VJZDt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5tZXJjaGFudElkICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydtZXJjaGFudElkJ10gPSB0aGlzLm1lcmNoYW50SWQ7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuYnVuZGxlSWQgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2J1bmRsZUlkJ10gPSB0aGlzLmJ1bmRsZUlkO31cbiAgICAgICAgcmV0dXJuIHRvUmV0dXJuO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIEFkZEJ1bmRsZVJlc3BvbnNlIGltcGxlbWVudHMgaS5BZGRCdW5kbGVSZXNwb25zZUludGVyZmFjZSB7XG4gICAgaW52b2ljZTogSW52b2ljZTtcblxuICAgIHN0YXRpYyBmcm9tUHJvdG8ocHJvdG86IGFueSk6IEFkZEJ1bmRsZVJlc3BvbnNlIHtcbiAgICAgICAgbGV0IG0gPSBuZXcgQWRkQnVuZGxlUmVzcG9uc2UoKTtcbiAgICAgICAgbSA9IE9iamVjdC5hc3NpZ24obSwgcHJvdG8pO1xuICAgICAgICBpZiAocHJvdG8uaW52b2ljZSkge20uaW52b2ljZSA9IEludm9pY2UuZnJvbVByb3RvKHByb3RvLmludm9pY2UpO31cbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Ioa3dhcmdzPzogaS5BZGRCdW5kbGVSZXNwb25zZUludGVyZmFjZSkge1xuICAgICAgICBpZiAoIWt3YXJncykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywga3dhcmdzKTtcbiAgICB9XG5cbiAgICB0b0FwaUpzb24oKTogb2JqZWN0IHtcbiAgICAgICAgY29uc3QgdG9SZXR1cm46IHtcbiAgICAgICAgICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgICAgICAgfSA9IHt9O1xuICAgICAgICBcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmludm9pY2UgIT09ICd1bmRlZmluZWQnICYmIHRoaXMuaW52b2ljZSAhPT0gbnVsbCkge3RvUmV0dXJuWydpbnZvaWNlJ10gPSAndG9BcGlKc29uJyBpbiB0aGlzLmludm9pY2UgPyAodGhpcy5pbnZvaWNlIGFzIGFueSkudG9BcGlKc29uKCkgOiB0aGlzLmludm9pY2U7fVxuICAgICAgICByZXR1cm4gdG9SZXR1cm47XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgQWRkTGluZUl0ZW1SZXF1ZXN0IGltcGxlbWVudHMgaS5BZGRMaW5lSXRlbVJlcXVlc3RJbnRlcmZhY2Uge1xuICAgIG1lcmNoYW50SWQ6IHN0cmluZztcbiAgICBpbnZvaWNlSWQ6IHN0cmluZztcbiAgICBza3U6IHN0cmluZztcbiAgICBhbW91bnQ6IG51bWJlcjtcbiAgICBxdWFudGl0eTogbnVtYmVyO1xuICAgIGRlc2NyaXB0aW9uOiBzdHJpbmc7XG4gICAgdGF4UmF0ZXM6IHN0cmluZ1tdO1xuXG4gICAgc3RhdGljIGZyb21Qcm90byhwcm90bzogYW55KTogQWRkTGluZUl0ZW1SZXF1ZXN0IHtcbiAgICAgICAgbGV0IG0gPSBuZXcgQWRkTGluZUl0ZW1SZXF1ZXN0KCk7XG4gICAgICAgIG0gPSBPYmplY3QuYXNzaWduKG0sIHByb3RvKTtcbiAgICAgICAgaWYgKHByb3RvLmFtb3VudCkge20uYW1vdW50ID0gcGFyc2VJbnQocHJvdG8uYW1vdW50LCAxMCk7fVxuICAgICAgICByZXR1cm4gbTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihrd2FyZ3M/OiBpLkFkZExpbmVJdGVtUmVxdWVzdEludGVyZmFjZSkge1xuICAgICAgICBpZiAoIWt3YXJncykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywga3dhcmdzKTtcbiAgICB9XG5cbiAgICB0b0FwaUpzb24oKTogb2JqZWN0IHtcbiAgICAgICAgY29uc3QgdG9SZXR1cm46IHtcbiAgICAgICAgICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgICAgICAgfSA9IHt9O1xuICAgICAgICBcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLm1lcmNoYW50SWQgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ21lcmNoYW50SWQnXSA9IHRoaXMubWVyY2hhbnRJZDt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5pbnZvaWNlSWQgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2ludm9pY2VJZCddID0gdGhpcy5pbnZvaWNlSWQ7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuc2t1ICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydza3UnXSA9IHRoaXMuc2t1O31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmFtb3VudCAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnYW1vdW50J10gPSB0aGlzLmFtb3VudDt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5xdWFudGl0eSAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsncXVhbnRpdHknXSA9IHRoaXMucXVhbnRpdHk7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuZGVzY3JpcHRpb24gIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2Rlc2NyaXB0aW9uJ10gPSB0aGlzLmRlc2NyaXB0aW9uO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnRheFJhdGVzICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWyd0YXhSYXRlcyddID0gdGhpcy50YXhSYXRlczt9XG4gICAgICAgIHJldHVybiB0b1JldHVybjtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBBZGRMaW5lSXRlbVJlc3BvbnNlIGltcGxlbWVudHMgaS5BZGRMaW5lSXRlbVJlc3BvbnNlSW50ZXJmYWNlIHtcbiAgICBpbnZvaWNlOiBJbnZvaWNlO1xuXG4gICAgc3RhdGljIGZyb21Qcm90byhwcm90bzogYW55KTogQWRkTGluZUl0ZW1SZXNwb25zZSB7XG4gICAgICAgIGxldCBtID0gbmV3IEFkZExpbmVJdGVtUmVzcG9uc2UoKTtcbiAgICAgICAgbSA9IE9iamVjdC5hc3NpZ24obSwgcHJvdG8pO1xuICAgICAgICBpZiAocHJvdG8uaW52b2ljZSkge20uaW52b2ljZSA9IEludm9pY2UuZnJvbVByb3RvKHByb3RvLmludm9pY2UpO31cbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Ioa3dhcmdzPzogaS5BZGRMaW5lSXRlbVJlc3BvbnNlSW50ZXJmYWNlKSB7XG4gICAgICAgIGlmICgha3dhcmdzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLCBrd2FyZ3MpO1xuICAgIH1cblxuICAgIHRvQXBpSnNvbigpOiBvYmplY3Qge1xuICAgICAgICBjb25zdCB0b1JldHVybjoge1xuICAgICAgICAgICAgW2tleTogc3RyaW5nXTogYW55O1xuICAgICAgICB9ID0ge307XG4gICAgICAgIFxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuaW52b2ljZSAhPT0gJ3VuZGVmaW5lZCcgJiYgdGhpcy5pbnZvaWNlICE9PSBudWxsKSB7dG9SZXR1cm5bJ2ludm9pY2UnXSA9ICd0b0FwaUpzb24nIGluIHRoaXMuaW52b2ljZSA/ICh0aGlzLmludm9pY2UgYXMgYW55KS50b0FwaUpzb24oKSA6IHRoaXMuaW52b2ljZTt9XG4gICAgICAgIHJldHVybiB0b1JldHVybjtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBDaGFyZ2VJbnZvaWNlUmVxdWVzdCBpbXBsZW1lbnRzIGkuQ2hhcmdlSW52b2ljZVJlcXVlc3RJbnRlcmZhY2Uge1xuICAgIG1lcmNoYW50SWQ6IHN0cmluZztcbiAgICBjdXN0b21lcklkOiBzdHJpbmc7XG4gICAgaW52b2ljZUlkOiBzdHJpbmc7XG4gICAgcGF5bWVudE1ldGhvZElkOiBzdHJpbmc7XG5cbiAgICBzdGF0aWMgZnJvbVByb3RvKHByb3RvOiBhbnkpOiBDaGFyZ2VJbnZvaWNlUmVxdWVzdCB7XG4gICAgICAgIGxldCBtID0gbmV3IENoYXJnZUludm9pY2VSZXF1ZXN0KCk7XG4gICAgICAgIG0gPSBPYmplY3QuYXNzaWduKG0sIHByb3RvKTtcbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Ioa3dhcmdzPzogaS5DaGFyZ2VJbnZvaWNlUmVxdWVzdEludGVyZmFjZSkge1xuICAgICAgICBpZiAoIWt3YXJncykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywga3dhcmdzKTtcbiAgICB9XG5cbiAgICB0b0FwaUpzb24oKTogb2JqZWN0IHtcbiAgICAgICAgY29uc3QgdG9SZXR1cm46IHtcbiAgICAgICAgICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgICAgICAgfSA9IHt9O1xuICAgICAgICBcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLm1lcmNoYW50SWQgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ21lcmNoYW50SWQnXSA9IHRoaXMubWVyY2hhbnRJZDt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5jdXN0b21lcklkICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydjdXN0b21lcklkJ10gPSB0aGlzLmN1c3RvbWVySWQ7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuaW52b2ljZUlkICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydpbnZvaWNlSWQnXSA9IHRoaXMuaW52b2ljZUlkO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnBheW1lbnRNZXRob2RJZCAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsncGF5bWVudE1ldGhvZElkJ10gPSB0aGlzLnBheW1lbnRNZXRob2RJZDt9XG4gICAgICAgIHJldHVybiB0b1JldHVybjtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBDcmVhdGVJbnZvaWNlUmVxdWVzdCBpbXBsZW1lbnRzIGkuQ3JlYXRlSW52b2ljZVJlcXVlc3RJbnRlcmZhY2Uge1xuICAgIG1lcmNoYW50SWQ6IHN0cmluZztcbiAgICBjdXN0b21lcklkOiBzdHJpbmc7XG4gICAgY3VycmVuY3lDb2RlOiBzdHJpbmc7XG4gICAgb3JkZXJJZDogc3RyaW5nO1xuXG4gICAgc3RhdGljIGZyb21Qcm90byhwcm90bzogYW55KTogQ3JlYXRlSW52b2ljZVJlcXVlc3Qge1xuICAgICAgICBsZXQgbSA9IG5ldyBDcmVhdGVJbnZvaWNlUmVxdWVzdCgpO1xuICAgICAgICBtID0gT2JqZWN0LmFzc2lnbihtLCBwcm90byk7XG4gICAgICAgIHJldHVybiBtO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKGt3YXJncz86IGkuQ3JlYXRlSW52b2ljZVJlcXVlc3RJbnRlcmZhY2UpIHtcbiAgICAgICAgaWYgKCFrd2FyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGt3YXJncyk7XG4gICAgfVxuXG4gICAgdG9BcGlKc29uKCk6IG9iamVjdCB7XG4gICAgICAgIGNvbnN0IHRvUmV0dXJuOiB7XG4gICAgICAgICAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gICAgICAgIH0gPSB7fTtcbiAgICAgICAgXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5tZXJjaGFudElkICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydtZXJjaGFudElkJ10gPSB0aGlzLm1lcmNoYW50SWQ7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuY3VzdG9tZXJJZCAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnY3VzdG9tZXJJZCddID0gdGhpcy5jdXN0b21lcklkO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmN1cnJlbmN5Q29kZSAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnY3VycmVuY3lDb2RlJ10gPSB0aGlzLmN1cnJlbmN5Q29kZTt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5vcmRlcklkICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydvcmRlcklkJ10gPSB0aGlzLm9yZGVySWQ7fVxuICAgICAgICByZXR1cm4gdG9SZXR1cm47XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgQ3JlYXRlSW52b2ljZVJlc3BvbnNlIGltcGxlbWVudHMgaS5DcmVhdGVJbnZvaWNlUmVzcG9uc2VJbnRlcmZhY2Uge1xuICAgIGludm9pY2VJZDogc3RyaW5nO1xuXG4gICAgc3RhdGljIGZyb21Qcm90byhwcm90bzogYW55KTogQ3JlYXRlSW52b2ljZVJlc3BvbnNlIHtcbiAgICAgICAgbGV0IG0gPSBuZXcgQ3JlYXRlSW52b2ljZVJlc3BvbnNlKCk7XG4gICAgICAgIG0gPSBPYmplY3QuYXNzaWduKG0sIHByb3RvKTtcbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Ioa3dhcmdzPzogaS5DcmVhdGVJbnZvaWNlUmVzcG9uc2VJbnRlcmZhY2UpIHtcbiAgICAgICAgaWYgKCFrd2FyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGt3YXJncyk7XG4gICAgfVxuXG4gICAgdG9BcGlKc29uKCk6IG9iamVjdCB7XG4gICAgICAgIGNvbnN0IHRvUmV0dXJuOiB7XG4gICAgICAgICAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gICAgICAgIH0gPSB7fTtcbiAgICAgICAgXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5pbnZvaWNlSWQgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2ludm9pY2VJZCddID0gdGhpcy5pbnZvaWNlSWQ7fVxuICAgICAgICByZXR1cm4gdG9SZXR1cm47XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgQ3JlYXRlUGF5bWVudExpbmtSZXF1ZXN0IGltcGxlbWVudHMgaS5DcmVhdGVQYXltZW50TGlua1JlcXVlc3RJbnRlcmZhY2Uge1xuICAgIG1lcmNoYW50SWQ6IHN0cmluZztcbiAgICBjdXN0b21lcklkOiBzdHJpbmc7XG4gICAgY3VycmVuY3lDb2RlOiBzdHJpbmc7XG4gICAgbGluZUl0ZW1zOiBQYXltZW50TGlua0l0ZW1bXTtcblxuICAgIHN0YXRpYyBmcm9tUHJvdG8ocHJvdG86IGFueSk6IENyZWF0ZVBheW1lbnRMaW5rUmVxdWVzdCB7XG4gICAgICAgIGxldCBtID0gbmV3IENyZWF0ZVBheW1lbnRMaW5rUmVxdWVzdCgpO1xuICAgICAgICBtID0gT2JqZWN0LmFzc2lnbihtLCBwcm90byk7XG4gICAgICAgIGlmIChwcm90by5saW5lSXRlbXMpIHttLmxpbmVJdGVtcyA9IHByb3RvLmxpbmVJdGVtcy5tYXAoUGF5bWVudExpbmtJdGVtLmZyb21Qcm90byk7fVxuICAgICAgICByZXR1cm4gbTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihrd2FyZ3M/OiBpLkNyZWF0ZVBheW1lbnRMaW5rUmVxdWVzdEludGVyZmFjZSkge1xuICAgICAgICBpZiAoIWt3YXJncykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywga3dhcmdzKTtcbiAgICB9XG5cbiAgICB0b0FwaUpzb24oKTogb2JqZWN0IHtcbiAgICAgICAgY29uc3QgdG9SZXR1cm46IHtcbiAgICAgICAgICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgICAgICAgfSA9IHt9O1xuICAgICAgICBcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLm1lcmNoYW50SWQgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ21lcmNoYW50SWQnXSA9IHRoaXMubWVyY2hhbnRJZDt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5jdXN0b21lcklkICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydjdXN0b21lcklkJ10gPSB0aGlzLmN1c3RvbWVySWQ7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuY3VycmVuY3lDb2RlICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydjdXJyZW5jeUNvZGUnXSA9IHRoaXMuY3VycmVuY3lDb2RlO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmxpbmVJdGVtcyAhPT0gJ3VuZGVmaW5lZCcgJiYgdGhpcy5saW5lSXRlbXMgIT09IG51bGwpIHt0b1JldHVyblsnbGluZUl0ZW1zJ10gPSAndG9BcGlKc29uJyBpbiB0aGlzLmxpbmVJdGVtcyA/ICh0aGlzLmxpbmVJdGVtcyBhcyBhbnkpLnRvQXBpSnNvbigpIDogdGhpcy5saW5lSXRlbXM7fVxuICAgICAgICByZXR1cm4gdG9SZXR1cm47XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgQ3JlYXRlUGF5bWVudExpbmtSZXNwb25zZSBpbXBsZW1lbnRzIGkuQ3JlYXRlUGF5bWVudExpbmtSZXNwb25zZUludGVyZmFjZSB7XG4gICAgaW52b2ljZUlkOiBzdHJpbmc7XG5cbiAgICBzdGF0aWMgZnJvbVByb3RvKHByb3RvOiBhbnkpOiBDcmVhdGVQYXltZW50TGlua1Jlc3BvbnNlIHtcbiAgICAgICAgbGV0IG0gPSBuZXcgQ3JlYXRlUGF5bWVudExpbmtSZXNwb25zZSgpO1xuICAgICAgICBtID0gT2JqZWN0LmFzc2lnbihtLCBwcm90byk7XG4gICAgICAgIHJldHVybiBtO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKGt3YXJncz86IGkuQ3JlYXRlUGF5bWVudExpbmtSZXNwb25zZUludGVyZmFjZSkge1xuICAgICAgICBpZiAoIWt3YXJncykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywga3dhcmdzKTtcbiAgICB9XG5cbiAgICB0b0FwaUpzb24oKTogb2JqZWN0IHtcbiAgICAgICAgY29uc3QgdG9SZXR1cm46IHtcbiAgICAgICAgICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgICAgICAgfSA9IHt9O1xuICAgICAgICBcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmludm9pY2VJZCAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnaW52b2ljZUlkJ10gPSB0aGlzLmludm9pY2VJZDt9XG4gICAgICAgIHJldHVybiB0b1JldHVybjtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBJbnZvaWNlQ3VzdG9tZXJBZGRyZXNzIGltcGxlbWVudHMgaS5JbnZvaWNlQ3VzdG9tZXJBZGRyZXNzSW50ZXJmYWNlIHtcbiAgICBhZGRyZXNzOiBzdHJpbmc7XG4gICAgY2l0eTogc3RyaW5nO1xuICAgIHN0YXRlOiBzdHJpbmc7XG4gICAgemlwOiBzdHJpbmc7XG4gICAgY291bnRyeTogc3RyaW5nO1xuICAgIGFkZHJlc3MyOiBzdHJpbmc7XG5cbiAgICBzdGF0aWMgZnJvbVByb3RvKHByb3RvOiBhbnkpOiBJbnZvaWNlQ3VzdG9tZXJBZGRyZXNzIHtcbiAgICAgICAgbGV0IG0gPSBuZXcgSW52b2ljZUN1c3RvbWVyQWRkcmVzcygpO1xuICAgICAgICBtID0gT2JqZWN0LmFzc2lnbihtLCBwcm90byk7XG4gICAgICAgIHJldHVybiBtO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKGt3YXJncz86IGkuSW52b2ljZUN1c3RvbWVyQWRkcmVzc0ludGVyZmFjZSkge1xuICAgICAgICBpZiAoIWt3YXJncykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywga3dhcmdzKTtcbiAgICB9XG5cbiAgICB0b0FwaUpzb24oKTogb2JqZWN0IHtcbiAgICAgICAgY29uc3QgdG9SZXR1cm46IHtcbiAgICAgICAgICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgICAgICAgfSA9IHt9O1xuICAgICAgICBcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmFkZHJlc3MgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2FkZHJlc3MnXSA9IHRoaXMuYWRkcmVzczt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5jaXR5ICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydjaXR5J10gPSB0aGlzLmNpdHk7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuc3RhdGUgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ3N0YXRlJ10gPSB0aGlzLnN0YXRlO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnppcCAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnemlwJ10gPSB0aGlzLnppcDt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5jb3VudHJ5ICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydjb3VudHJ5J10gPSB0aGlzLmNvdW50cnk7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuYWRkcmVzczIgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2FkZHJlc3MyJ10gPSB0aGlzLmFkZHJlc3MyO31cbiAgICAgICAgcmV0dXJuIHRvUmV0dXJuO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIExpc3RJbnZvaWNlc1JlcXVlc3RGaWx0ZXJzRGF0ZUZpbHRlciBpbXBsZW1lbnRzIGkuTGlzdEludm9pY2VzUmVxdWVzdEZpbHRlcnNEYXRlRmlsdGVySW50ZXJmYWNlIHtcbiAgICBkYXRlRmllbGQ6IGUuTGlzdEludm9pY2VzUmVxdWVzdEZpbHRlcnNEYXRlRmlsdGVyRGF0ZUZpZWxkO1xuICAgIGRhdGVMdGU6IERhdGU7XG4gICAgZGF0ZUd0ZTogRGF0ZTtcblxuICAgIHN0YXRpYyBmcm9tUHJvdG8ocHJvdG86IGFueSk6IExpc3RJbnZvaWNlc1JlcXVlc3RGaWx0ZXJzRGF0ZUZpbHRlciB7XG4gICAgICAgIGxldCBtID0gbmV3IExpc3RJbnZvaWNlc1JlcXVlc3RGaWx0ZXJzRGF0ZUZpbHRlcigpO1xuICAgICAgICBtID0gT2JqZWN0LmFzc2lnbihtLCBwcm90byk7XG4gICAgICAgIGlmIChwcm90by5kYXRlRmllbGQpIHttLmRhdGVGaWVsZCA9IGVudW1TdHJpbmdUb1ZhbHVlPGUuTGlzdEludm9pY2VzUmVxdWVzdEZpbHRlcnNEYXRlRmlsdGVyRGF0ZUZpZWxkPihlLkxpc3RJbnZvaWNlc1JlcXVlc3RGaWx0ZXJzRGF0ZUZpbHRlckRhdGVGaWVsZCwgcHJvdG8uZGF0ZUZpZWxkKTt9XG4gICAgICAgIGlmIChwcm90by5kYXRlTHRlKSB7bS5kYXRlTHRlID0gbmV3IERhdGUocHJvdG8uZGF0ZUx0ZSk7fVxuICAgICAgICBpZiAocHJvdG8uZGF0ZUd0ZSkge20uZGF0ZUd0ZSA9IG5ldyBEYXRlKHByb3RvLmRhdGVHdGUpO31cbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Ioa3dhcmdzPzogaS5MaXN0SW52b2ljZXNSZXF1ZXN0RmlsdGVyc0RhdGVGaWx0ZXJJbnRlcmZhY2UpIHtcbiAgICAgICAgaWYgKCFrd2FyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGt3YXJncyk7XG4gICAgfVxuXG4gICAgdG9BcGlKc29uKCk6IG9iamVjdCB7XG4gICAgICAgIGNvbnN0IHRvUmV0dXJuOiB7XG4gICAgICAgICAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gICAgICAgIH0gPSB7fTtcbiAgICAgICAgXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5kYXRlRmllbGQgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2RhdGVGaWVsZCddID0gdGhpcy5kYXRlRmllbGQ7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuZGF0ZUx0ZSAhPT0gJ3VuZGVmaW5lZCcgJiYgdGhpcy5kYXRlTHRlICE9PSBudWxsKSB7dG9SZXR1cm5bJ2RhdGVMdGUnXSA9ICd0b0FwaUpzb24nIGluIHRoaXMuZGF0ZUx0ZSA/ICh0aGlzLmRhdGVMdGUgYXMgYW55KS50b0FwaUpzb24oKSA6IHRoaXMuZGF0ZUx0ZTt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5kYXRlR3RlICE9PSAndW5kZWZpbmVkJyAmJiB0aGlzLmRhdGVHdGUgIT09IG51bGwpIHt0b1JldHVyblsnZGF0ZUd0ZSddID0gJ3RvQXBpSnNvbicgaW4gdGhpcy5kYXRlR3RlID8gKHRoaXMuZGF0ZUd0ZSBhcyBhbnkpLnRvQXBpSnNvbigpIDogdGhpcy5kYXRlR3RlO31cbiAgICAgICAgcmV0dXJuIHRvUmV0dXJuO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIERlbGV0ZUludm9pY2VSZXF1ZXN0IGltcGxlbWVudHMgaS5EZWxldGVJbnZvaWNlUmVxdWVzdEludGVyZmFjZSB7XG4gICAgbWVyY2hhbnRJZDogc3RyaW5nO1xuICAgIGludm9pY2VJZDogc3RyaW5nO1xuXG4gICAgc3RhdGljIGZyb21Qcm90byhwcm90bzogYW55KTogRGVsZXRlSW52b2ljZVJlcXVlc3Qge1xuICAgICAgICBsZXQgbSA9IG5ldyBEZWxldGVJbnZvaWNlUmVxdWVzdCgpO1xuICAgICAgICBtID0gT2JqZWN0LmFzc2lnbihtLCBwcm90byk7XG4gICAgICAgIHJldHVybiBtO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKGt3YXJncz86IGkuRGVsZXRlSW52b2ljZVJlcXVlc3RJbnRlcmZhY2UpIHtcbiAgICAgICAgaWYgKCFrd2FyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGt3YXJncyk7XG4gICAgfVxuXG4gICAgdG9BcGlKc29uKCk6IG9iamVjdCB7XG4gICAgICAgIGNvbnN0IHRvUmV0dXJuOiB7XG4gICAgICAgICAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gICAgICAgIH0gPSB7fTtcbiAgICAgICAgXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5tZXJjaGFudElkICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydtZXJjaGFudElkJ10gPSB0aGlzLm1lcmNoYW50SWQ7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuaW52b2ljZUlkICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydpbnZvaWNlSWQnXSA9IHRoaXMuaW52b2ljZUlkO31cbiAgICAgICAgcmV0dXJuIHRvUmV0dXJuO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIERlbGV0ZUxpbmVJdGVtUmVxdWVzdCBpbXBsZW1lbnRzIGkuRGVsZXRlTGluZUl0ZW1SZXF1ZXN0SW50ZXJmYWNlIHtcbiAgICBtZXJjaGFudElkOiBzdHJpbmc7XG4gICAgaW52b2ljZUlkOiBzdHJpbmc7XG4gICAgaWQ6IHN0cmluZztcblxuICAgIHN0YXRpYyBmcm9tUHJvdG8ocHJvdG86IGFueSk6IERlbGV0ZUxpbmVJdGVtUmVxdWVzdCB7XG4gICAgICAgIGxldCBtID0gbmV3IERlbGV0ZUxpbmVJdGVtUmVxdWVzdCgpO1xuICAgICAgICBtID0gT2JqZWN0LmFzc2lnbihtLCBwcm90byk7XG4gICAgICAgIHJldHVybiBtO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKGt3YXJncz86IGkuRGVsZXRlTGluZUl0ZW1SZXF1ZXN0SW50ZXJmYWNlKSB7XG4gICAgICAgIGlmICgha3dhcmdzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLCBrd2FyZ3MpO1xuICAgIH1cblxuICAgIHRvQXBpSnNvbigpOiBvYmplY3Qge1xuICAgICAgICBjb25zdCB0b1JldHVybjoge1xuICAgICAgICAgICAgW2tleTogc3RyaW5nXTogYW55O1xuICAgICAgICB9ID0ge307XG4gICAgICAgIFxuICAgICAgICBpZiAodHlwZW9mIHRoaXMubWVyY2hhbnRJZCAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnbWVyY2hhbnRJZCddID0gdGhpcy5tZXJjaGFudElkO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmludm9pY2VJZCAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnaW52b2ljZUlkJ10gPSB0aGlzLmludm9pY2VJZDt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5pZCAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnaWQnXSA9IHRoaXMuaWQ7fVxuICAgICAgICByZXR1cm4gdG9SZXR1cm47XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgRGVsZXRlTGluZUl0ZW1SZXNwb25zZSBpbXBsZW1lbnRzIGkuRGVsZXRlTGluZUl0ZW1SZXNwb25zZUludGVyZmFjZSB7XG4gICAgaW52b2ljZTogSW52b2ljZTtcblxuICAgIHN0YXRpYyBmcm9tUHJvdG8ocHJvdG86IGFueSk6IERlbGV0ZUxpbmVJdGVtUmVzcG9uc2Uge1xuICAgICAgICBsZXQgbSA9IG5ldyBEZWxldGVMaW5lSXRlbVJlc3BvbnNlKCk7XG4gICAgICAgIG0gPSBPYmplY3QuYXNzaWduKG0sIHByb3RvKTtcbiAgICAgICAgaWYgKHByb3RvLmludm9pY2UpIHttLmludm9pY2UgPSBJbnZvaWNlLmZyb21Qcm90byhwcm90by5pbnZvaWNlKTt9XG4gICAgICAgIHJldHVybiBtO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKGt3YXJncz86IGkuRGVsZXRlTGluZUl0ZW1SZXNwb25zZUludGVyZmFjZSkge1xuICAgICAgICBpZiAoIWt3YXJncykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywga3dhcmdzKTtcbiAgICB9XG5cbiAgICB0b0FwaUpzb24oKTogb2JqZWN0IHtcbiAgICAgICAgY29uc3QgdG9SZXR1cm46IHtcbiAgICAgICAgICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgICAgICAgfSA9IHt9O1xuICAgICAgICBcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmludm9pY2UgIT09ICd1bmRlZmluZWQnICYmIHRoaXMuaW52b2ljZSAhPT0gbnVsbCkge3RvUmV0dXJuWydpbnZvaWNlJ10gPSAndG9BcGlKc29uJyBpbiB0aGlzLmludm9pY2UgPyAodGhpcy5pbnZvaWNlIGFzIGFueSkudG9BcGlKc29uKCkgOiB0aGlzLmludm9pY2U7fVxuICAgICAgICByZXR1cm4gdG9SZXR1cm47XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgRHVwbGljYXRlSW52b2ljZVJlcXVlc3QgaW1wbGVtZW50cyBpLkR1cGxpY2F0ZUludm9pY2VSZXF1ZXN0SW50ZXJmYWNlIHtcbiAgICBtZXJjaGFudElkOiBzdHJpbmc7XG4gICAgaW52b2ljZUlkOiBzdHJpbmc7XG5cbiAgICBzdGF0aWMgZnJvbVByb3RvKHByb3RvOiBhbnkpOiBEdXBsaWNhdGVJbnZvaWNlUmVxdWVzdCB7XG4gICAgICAgIGxldCBtID0gbmV3IER1cGxpY2F0ZUludm9pY2VSZXF1ZXN0KCk7XG4gICAgICAgIG0gPSBPYmplY3QuYXNzaWduKG0sIHByb3RvKTtcbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Ioa3dhcmdzPzogaS5EdXBsaWNhdGVJbnZvaWNlUmVxdWVzdEludGVyZmFjZSkge1xuICAgICAgICBpZiAoIWt3YXJncykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywga3dhcmdzKTtcbiAgICB9XG5cbiAgICB0b0FwaUpzb24oKTogb2JqZWN0IHtcbiAgICAgICAgY29uc3QgdG9SZXR1cm46IHtcbiAgICAgICAgICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgICAgICAgfSA9IHt9O1xuICAgICAgICBcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLm1lcmNoYW50SWQgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ21lcmNoYW50SWQnXSA9IHRoaXMubWVyY2hhbnRJZDt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5pbnZvaWNlSWQgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2ludm9pY2VJZCddID0gdGhpcy5pbnZvaWNlSWQ7fVxuICAgICAgICByZXR1cm4gdG9SZXR1cm47XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgRHVwbGljYXRlSW52b2ljZVJlc3BvbnNlIGltcGxlbWVudHMgaS5EdXBsaWNhdGVJbnZvaWNlUmVzcG9uc2VJbnRlcmZhY2Uge1xuICAgIGludm9pY2VJZDogc3RyaW5nO1xuXG4gICAgc3RhdGljIGZyb21Qcm90byhwcm90bzogYW55KTogRHVwbGljYXRlSW52b2ljZVJlc3BvbnNlIHtcbiAgICAgICAgbGV0IG0gPSBuZXcgRHVwbGljYXRlSW52b2ljZVJlc3BvbnNlKCk7XG4gICAgICAgIG0gPSBPYmplY3QuYXNzaWduKG0sIHByb3RvKTtcbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Ioa3dhcmdzPzogaS5EdXBsaWNhdGVJbnZvaWNlUmVzcG9uc2VJbnRlcmZhY2UpIHtcbiAgICAgICAgaWYgKCFrd2FyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGt3YXJncyk7XG4gICAgfVxuXG4gICAgdG9BcGlKc29uKCk6IG9iamVjdCB7XG4gICAgICAgIGNvbnN0IHRvUmV0dXJuOiB7XG4gICAgICAgICAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gICAgICAgIH0gPSB7fTtcbiAgICAgICAgXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5pbnZvaWNlSWQgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2ludm9pY2VJZCddID0gdGhpcy5pbnZvaWNlSWQ7fVxuICAgICAgICByZXR1cm4gdG9SZXR1cm47XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgTGlzdEludm9pY2VzUmVxdWVzdEZpbHRlcnMgaW1wbGVtZW50cyBpLkxpc3RJbnZvaWNlc1JlcXVlc3RGaWx0ZXJzSW50ZXJmYWNlIHtcbiAgICBtZXJjaGFudElkOiBzdHJpbmc7XG4gICAgY3VzdG9tZXJJZDogc3RyaW5nO1xuICAgIHN0YXR1c2VzOiBlLkludm9pY2VTdGF0dXNbXTtcbiAgICBwYXN0RHVlOiBib29sZWFuO1xuICAgIG51bWJlcjogc3RyaW5nO1xuICAgIGRhdGVGaWx0ZXI6IExpc3RJbnZvaWNlc1JlcXVlc3RGaWx0ZXJzRGF0ZUZpbHRlcjtcblxuICAgIHN0YXRpYyBmcm9tUHJvdG8ocHJvdG86IGFueSk6IExpc3RJbnZvaWNlc1JlcXVlc3RGaWx0ZXJzIHtcbiAgICAgICAgbGV0IG0gPSBuZXcgTGlzdEludm9pY2VzUmVxdWVzdEZpbHRlcnMoKTtcbiAgICAgICAgbSA9IE9iamVjdC5hc3NpZ24obSwgcHJvdG8pO1xuICAgICAgICBpZiAocHJvdG8uc3RhdHVzZXMpIHttLnN0YXR1c2VzID0gcHJvdG8uc3RhdHVzZXMubWFwKCh2OiBzdHJpbmcpID0+IGVudW1TdHJpbmdUb1ZhbHVlPGUuSW52b2ljZVN0YXR1cz4oZS5JbnZvaWNlU3RhdHVzLCB2KSk7fVxuICAgICAgICBpZiAocHJvdG8uZGF0ZUZpbHRlcikge20uZGF0ZUZpbHRlciA9IExpc3RJbnZvaWNlc1JlcXVlc3RGaWx0ZXJzRGF0ZUZpbHRlci5mcm9tUHJvdG8ocHJvdG8uZGF0ZUZpbHRlcik7fVxuICAgICAgICByZXR1cm4gbTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihrd2FyZ3M/OiBpLkxpc3RJbnZvaWNlc1JlcXVlc3RGaWx0ZXJzSW50ZXJmYWNlKSB7XG4gICAgICAgIGlmICgha3dhcmdzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLCBrd2FyZ3MpO1xuICAgIH1cblxuICAgIHRvQXBpSnNvbigpOiBvYmplY3Qge1xuICAgICAgICBjb25zdCB0b1JldHVybjoge1xuICAgICAgICAgICAgW2tleTogc3RyaW5nXTogYW55O1xuICAgICAgICB9ID0ge307XG4gICAgICAgIFxuICAgICAgICBpZiAodHlwZW9mIHRoaXMubWVyY2hhbnRJZCAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnbWVyY2hhbnRJZCddID0gdGhpcy5tZXJjaGFudElkO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmN1c3RvbWVySWQgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2N1c3RvbWVySWQnXSA9IHRoaXMuY3VzdG9tZXJJZDt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5zdGF0dXNlcyAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnc3RhdHVzZXMnXSA9IHRoaXMuc3RhdHVzZXM7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMucGFzdER1ZSAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsncGFzdER1ZSddID0gdGhpcy5wYXN0RHVlO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLm51bWJlciAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnbnVtYmVyJ10gPSB0aGlzLm51bWJlcjt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5kYXRlRmlsdGVyICE9PSAndW5kZWZpbmVkJyAmJiB0aGlzLmRhdGVGaWx0ZXIgIT09IG51bGwpIHt0b1JldHVyblsnZGF0ZUZpbHRlciddID0gJ3RvQXBpSnNvbicgaW4gdGhpcy5kYXRlRmlsdGVyID8gKHRoaXMuZGF0ZUZpbHRlciBhcyBhbnkpLnRvQXBpSnNvbigpIDogdGhpcy5kYXRlRmlsdGVyO31cbiAgICAgICAgcmV0dXJuIHRvUmV0dXJuO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIEdldEludm9pY2VSZXF1ZXN0IGltcGxlbWVudHMgaS5HZXRJbnZvaWNlUmVxdWVzdEludGVyZmFjZSB7XG4gICAgbWVyY2hhbnRJZDogc3RyaW5nO1xuICAgIGludm9pY2VJZDogc3RyaW5nO1xuXG4gICAgc3RhdGljIGZyb21Qcm90byhwcm90bzogYW55KTogR2V0SW52b2ljZVJlcXVlc3Qge1xuICAgICAgICBsZXQgbSA9IG5ldyBHZXRJbnZvaWNlUmVxdWVzdCgpO1xuICAgICAgICBtID0gT2JqZWN0LmFzc2lnbihtLCBwcm90byk7XG4gICAgICAgIHJldHVybiBtO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKGt3YXJncz86IGkuR2V0SW52b2ljZVJlcXVlc3RJbnRlcmZhY2UpIHtcbiAgICAgICAgaWYgKCFrd2FyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGt3YXJncyk7XG4gICAgfVxuXG4gICAgdG9BcGlKc29uKCk6IG9iamVjdCB7XG4gICAgICAgIGNvbnN0IHRvUmV0dXJuOiB7XG4gICAgICAgICAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gICAgICAgIH0gPSB7fTtcbiAgICAgICAgXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5tZXJjaGFudElkICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydtZXJjaGFudElkJ10gPSB0aGlzLm1lcmNoYW50SWQ7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuaW52b2ljZUlkICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydpbnZvaWNlSWQnXSA9IHRoaXMuaW52b2ljZUlkO31cbiAgICAgICAgcmV0dXJuIHRvUmV0dXJuO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIEdldEludm9pY2VSZXNwb25zZSBpbXBsZW1lbnRzIGkuR2V0SW52b2ljZVJlc3BvbnNlSW50ZXJmYWNlIHtcbiAgICBpbnZvaWNlOiBJbnZvaWNlO1xuXG4gICAgc3RhdGljIGZyb21Qcm90byhwcm90bzogYW55KTogR2V0SW52b2ljZVJlc3BvbnNlIHtcbiAgICAgICAgbGV0IG0gPSBuZXcgR2V0SW52b2ljZVJlc3BvbnNlKCk7XG4gICAgICAgIG0gPSBPYmplY3QuYXNzaWduKG0sIHByb3RvKTtcbiAgICAgICAgaWYgKHByb3RvLmludm9pY2UpIHttLmludm9pY2UgPSBJbnZvaWNlLmZyb21Qcm90byhwcm90by5pbnZvaWNlKTt9XG4gICAgICAgIHJldHVybiBtO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKGt3YXJncz86IGkuR2V0SW52b2ljZVJlc3BvbnNlSW50ZXJmYWNlKSB7XG4gICAgICAgIGlmICgha3dhcmdzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLCBrd2FyZ3MpO1xuICAgIH1cblxuICAgIHRvQXBpSnNvbigpOiBvYmplY3Qge1xuICAgICAgICBjb25zdCB0b1JldHVybjoge1xuICAgICAgICAgICAgW2tleTogc3RyaW5nXTogYW55O1xuICAgICAgICB9ID0ge307XG4gICAgICAgIFxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuaW52b2ljZSAhPT0gJ3VuZGVmaW5lZCcgJiYgdGhpcy5pbnZvaWNlICE9PSBudWxsKSB7dG9SZXR1cm5bJ2ludm9pY2UnXSA9ICd0b0FwaUpzb24nIGluIHRoaXMuaW52b2ljZSA/ICh0aGlzLmludm9pY2UgYXMgYW55KS50b0FwaUpzb24oKSA6IHRoaXMuaW52b2ljZTt9XG4gICAgICAgIHJldHVybiB0b1JldHVybjtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBJbnZvaWNlIGltcGxlbWVudHMgaS5JbnZvaWNlSW50ZXJmYWNlIHtcbiAgICBtZXJjaGFudElkOiBzdHJpbmc7XG4gICAgaWQ6IHN0cmluZztcbiAgICBudW1iZXI6IHN0cmluZztcbiAgICBjdXN0b21lcklkOiBzdHJpbmc7XG4gICAgc3RhdHVzOiBlLkludm9pY2VTdGF0dXM7XG4gICAgc3VidG90YWw6IG51bWJlcjtcbiAgICB0b3RhbDogbnVtYmVyO1xuICAgIGFtb3VudFBhaWQ6IG51bWJlcjtcbiAgICBpc3N1ZWQ6IERhdGU7XG4gICAgZHVlOiBEYXRlO1xuICAgIGNyZWF0ZWQ6IERhdGU7XG4gICAgdXBkYXRlZDogRGF0ZTtcbiAgICBpdGVtczogSW52b2ljZUl0ZW1bXTtcbiAgICBjdXJyZW5jeTogZS5DdXJyZW5jeTtcbiAgICBwYWlkOiBEYXRlO1xuICAgIG9yZGVySWQ6IHN0cmluZztcbiAgICBhbW91bnRUYXg6IG51bWJlcjtcbiAgICBhcHBsaWVkVGF4ZXM6IEFwcGxpZWRUYXhSYXRlW107XG4gICAgZGVmYXVsdFRheFJhdGVzOiBUYXhSYXRlW107XG4gICAgYXBwbGllZEJ1bmRsZXM6IEFwcGxpZWRCdW5kbGVbXTtcbiAgICBhbW91bnREaXNjb3VudDogbnVtYmVyO1xuICAgIGN1c3RvbWVyTmFtZTogc3RyaW5nO1xuICAgIG9yaWdpbjogc3RyaW5nO1xuICAgIGNvbGxlY3Rpb25NZXRob2Q6IHN0cmluZztcbiAgICBjb250YWN0SWQ6IHN0cmluZztcbiAgICBtZW1vOiBzdHJpbmc7XG4gICAgdm9pZGVkOiBEYXRlO1xuICAgIGRlZmF1bHRQYXltZW50TWV0aG9kOiBzdHJpbmc7XG4gICAgY3VzdG9tZXJBZGRyZXNzOiBJbnZvaWNlQ3VzdG9tZXJBZGRyZXNzO1xuICAgIGV4dGVybmFsQ3VzdG9tZXJJZGVudGlmaWVyOiBzdHJpbmc7XG5cbiAgICBzdGF0aWMgZnJvbVByb3RvKHByb3RvOiBhbnkpOiBJbnZvaWNlIHtcbiAgICAgICAgbGV0IG0gPSBuZXcgSW52b2ljZSgpO1xuICAgICAgICBtID0gT2JqZWN0LmFzc2lnbihtLCBwcm90byk7XG4gICAgICAgIGlmIChwcm90by5zdGF0dXMpIHttLnN0YXR1cyA9IGVudW1TdHJpbmdUb1ZhbHVlPGUuSW52b2ljZVN0YXR1cz4oZS5JbnZvaWNlU3RhdHVzLCBwcm90by5zdGF0dXMpO31cbiAgICAgICAgaWYgKHByb3RvLnN1YnRvdGFsKSB7bS5zdWJ0b3RhbCA9IHBhcnNlSW50KHByb3RvLnN1YnRvdGFsLCAxMCk7fVxuICAgICAgICBpZiAocHJvdG8udG90YWwpIHttLnRvdGFsID0gcGFyc2VJbnQocHJvdG8udG90YWwsIDEwKTt9XG4gICAgICAgIGlmIChwcm90by5hbW91bnRQYWlkKSB7bS5hbW91bnRQYWlkID0gcGFyc2VJbnQocHJvdG8uYW1vdW50UGFpZCwgMTApO31cbiAgICAgICAgaWYgKHByb3RvLmlzc3VlZCkge20uaXNzdWVkID0gbmV3IERhdGUocHJvdG8uaXNzdWVkKTt9XG4gICAgICAgIGlmIChwcm90by5kdWUpIHttLmR1ZSA9IG5ldyBEYXRlKHByb3RvLmR1ZSk7fVxuICAgICAgICBpZiAocHJvdG8uY3JlYXRlZCkge20uY3JlYXRlZCA9IG5ldyBEYXRlKHByb3RvLmNyZWF0ZWQpO31cbiAgICAgICAgaWYgKHByb3RvLnVwZGF0ZWQpIHttLnVwZGF0ZWQgPSBuZXcgRGF0ZShwcm90by51cGRhdGVkKTt9XG4gICAgICAgIGlmIChwcm90by5pdGVtcykge20uaXRlbXMgPSBwcm90by5pdGVtcy5tYXAoSW52b2ljZUl0ZW0uZnJvbVByb3RvKTt9XG4gICAgICAgIGlmIChwcm90by5jdXJyZW5jeSkge20uY3VycmVuY3kgPSBlbnVtU3RyaW5nVG9WYWx1ZTxlLkN1cnJlbmN5PihlLkN1cnJlbmN5LCBwcm90by5jdXJyZW5jeSk7fVxuICAgICAgICBpZiAocHJvdG8ucGFpZCkge20ucGFpZCA9IG5ldyBEYXRlKHByb3RvLnBhaWQpO31cbiAgICAgICAgaWYgKHByb3RvLmFtb3VudFRheCkge20uYW1vdW50VGF4ID0gcGFyc2VJbnQocHJvdG8uYW1vdW50VGF4LCAxMCk7fVxuICAgICAgICBpZiAocHJvdG8uYXBwbGllZFRheGVzKSB7bS5hcHBsaWVkVGF4ZXMgPSBwcm90by5hcHBsaWVkVGF4ZXMubWFwKEFwcGxpZWRUYXhSYXRlLmZyb21Qcm90byk7fVxuICAgICAgICBpZiAocHJvdG8uZGVmYXVsdFRheFJhdGVzKSB7bS5kZWZhdWx0VGF4UmF0ZXMgPSBwcm90by5kZWZhdWx0VGF4UmF0ZXMubWFwKFRheFJhdGUuZnJvbVByb3RvKTt9XG4gICAgICAgIGlmIChwcm90by5hcHBsaWVkQnVuZGxlcykge20uYXBwbGllZEJ1bmRsZXMgPSBwcm90by5hcHBsaWVkQnVuZGxlcy5tYXAoQXBwbGllZEJ1bmRsZS5mcm9tUHJvdG8pO31cbiAgICAgICAgaWYgKHByb3RvLmFtb3VudERpc2NvdW50KSB7bS5hbW91bnREaXNjb3VudCA9IHBhcnNlSW50KHByb3RvLmFtb3VudERpc2NvdW50LCAxMCk7fVxuICAgICAgICBpZiAocHJvdG8udm9pZGVkKSB7bS52b2lkZWQgPSBuZXcgRGF0ZShwcm90by52b2lkZWQpO31cbiAgICAgICAgaWYgKHByb3RvLmN1c3RvbWVyQWRkcmVzcykge20uY3VzdG9tZXJBZGRyZXNzID0gSW52b2ljZUN1c3RvbWVyQWRkcmVzcy5mcm9tUHJvdG8ocHJvdG8uY3VzdG9tZXJBZGRyZXNzKTt9XG4gICAgICAgIHJldHVybiBtO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKGt3YXJncz86IGkuSW52b2ljZUludGVyZmFjZSkge1xuICAgICAgICBpZiAoIWt3YXJncykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywga3dhcmdzKTtcbiAgICB9XG5cbiAgICB0b0FwaUpzb24oKTogb2JqZWN0IHtcbiAgICAgICAgY29uc3QgdG9SZXR1cm46IHtcbiAgICAgICAgICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgICAgICAgfSA9IHt9O1xuICAgICAgICBcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLm1lcmNoYW50SWQgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ21lcmNoYW50SWQnXSA9IHRoaXMubWVyY2hhbnRJZDt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5pZCAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnaWQnXSA9IHRoaXMuaWQ7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMubnVtYmVyICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydudW1iZXInXSA9IHRoaXMubnVtYmVyO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmN1c3RvbWVySWQgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2N1c3RvbWVySWQnXSA9IHRoaXMuY3VzdG9tZXJJZDt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5zdGF0dXMgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ3N0YXR1cyddID0gdGhpcy5zdGF0dXM7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuc3VidG90YWwgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ3N1YnRvdGFsJ10gPSB0aGlzLnN1YnRvdGFsO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnRvdGFsICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWyd0b3RhbCddID0gdGhpcy50b3RhbDt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5hbW91bnRQYWlkICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydhbW91bnRQYWlkJ10gPSB0aGlzLmFtb3VudFBhaWQ7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuaXNzdWVkICE9PSAndW5kZWZpbmVkJyAmJiB0aGlzLmlzc3VlZCAhPT0gbnVsbCkge3RvUmV0dXJuWydpc3N1ZWQnXSA9ICd0b0FwaUpzb24nIGluIHRoaXMuaXNzdWVkID8gKHRoaXMuaXNzdWVkIGFzIGFueSkudG9BcGlKc29uKCkgOiB0aGlzLmlzc3VlZDt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5kdWUgIT09ICd1bmRlZmluZWQnICYmIHRoaXMuZHVlICE9PSBudWxsKSB7dG9SZXR1cm5bJ2R1ZSddID0gJ3RvQXBpSnNvbicgaW4gdGhpcy5kdWUgPyAodGhpcy5kdWUgYXMgYW55KS50b0FwaUpzb24oKSA6IHRoaXMuZHVlO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmNyZWF0ZWQgIT09ICd1bmRlZmluZWQnICYmIHRoaXMuY3JlYXRlZCAhPT0gbnVsbCkge3RvUmV0dXJuWydjcmVhdGVkJ10gPSAndG9BcGlKc29uJyBpbiB0aGlzLmNyZWF0ZWQgPyAodGhpcy5jcmVhdGVkIGFzIGFueSkudG9BcGlKc29uKCkgOiB0aGlzLmNyZWF0ZWQ7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMudXBkYXRlZCAhPT0gJ3VuZGVmaW5lZCcgJiYgdGhpcy51cGRhdGVkICE9PSBudWxsKSB7dG9SZXR1cm5bJ3VwZGF0ZWQnXSA9ICd0b0FwaUpzb24nIGluIHRoaXMudXBkYXRlZCA/ICh0aGlzLnVwZGF0ZWQgYXMgYW55KS50b0FwaUpzb24oKSA6IHRoaXMudXBkYXRlZDt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5pdGVtcyAhPT0gJ3VuZGVmaW5lZCcgJiYgdGhpcy5pdGVtcyAhPT0gbnVsbCkge3RvUmV0dXJuWydpdGVtcyddID0gJ3RvQXBpSnNvbicgaW4gdGhpcy5pdGVtcyA/ICh0aGlzLml0ZW1zIGFzIGFueSkudG9BcGlKc29uKCkgOiB0aGlzLml0ZW1zO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmN1cnJlbmN5ICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydjdXJyZW5jeSddID0gdGhpcy5jdXJyZW5jeTt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5wYWlkICE9PSAndW5kZWZpbmVkJyAmJiB0aGlzLnBhaWQgIT09IG51bGwpIHt0b1JldHVyblsncGFpZCddID0gJ3RvQXBpSnNvbicgaW4gdGhpcy5wYWlkID8gKHRoaXMucGFpZCBhcyBhbnkpLnRvQXBpSnNvbigpIDogdGhpcy5wYWlkO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLm9yZGVySWQgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ29yZGVySWQnXSA9IHRoaXMub3JkZXJJZDt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5hbW91bnRUYXggIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2Ftb3VudFRheCddID0gdGhpcy5hbW91bnRUYXg7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuYXBwbGllZFRheGVzICE9PSAndW5kZWZpbmVkJyAmJiB0aGlzLmFwcGxpZWRUYXhlcyAhPT0gbnVsbCkge3RvUmV0dXJuWydhcHBsaWVkVGF4ZXMnXSA9ICd0b0FwaUpzb24nIGluIHRoaXMuYXBwbGllZFRheGVzID8gKHRoaXMuYXBwbGllZFRheGVzIGFzIGFueSkudG9BcGlKc29uKCkgOiB0aGlzLmFwcGxpZWRUYXhlczt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5kZWZhdWx0VGF4UmF0ZXMgIT09ICd1bmRlZmluZWQnICYmIHRoaXMuZGVmYXVsdFRheFJhdGVzICE9PSBudWxsKSB7dG9SZXR1cm5bJ2RlZmF1bHRUYXhSYXRlcyddID0gJ3RvQXBpSnNvbicgaW4gdGhpcy5kZWZhdWx0VGF4UmF0ZXMgPyAodGhpcy5kZWZhdWx0VGF4UmF0ZXMgYXMgYW55KS50b0FwaUpzb24oKSA6IHRoaXMuZGVmYXVsdFRheFJhdGVzO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmFwcGxpZWRCdW5kbGVzICE9PSAndW5kZWZpbmVkJyAmJiB0aGlzLmFwcGxpZWRCdW5kbGVzICE9PSBudWxsKSB7dG9SZXR1cm5bJ2FwcGxpZWRCdW5kbGVzJ10gPSAndG9BcGlKc29uJyBpbiB0aGlzLmFwcGxpZWRCdW5kbGVzID8gKHRoaXMuYXBwbGllZEJ1bmRsZXMgYXMgYW55KS50b0FwaUpzb24oKSA6IHRoaXMuYXBwbGllZEJ1bmRsZXM7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuYW1vdW50RGlzY291bnQgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2Ftb3VudERpc2NvdW50J10gPSB0aGlzLmFtb3VudERpc2NvdW50O31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmN1c3RvbWVyTmFtZSAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnY3VzdG9tZXJOYW1lJ10gPSB0aGlzLmN1c3RvbWVyTmFtZTt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5vcmlnaW4gIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ29yaWdpbiddID0gdGhpcy5vcmlnaW47fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuY29sbGVjdGlvbk1ldGhvZCAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnY29sbGVjdGlvbk1ldGhvZCddID0gdGhpcy5jb2xsZWN0aW9uTWV0aG9kO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmNvbnRhY3RJZCAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnY29udGFjdElkJ10gPSB0aGlzLmNvbnRhY3RJZDt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5tZW1vICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydtZW1vJ10gPSB0aGlzLm1lbW87fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMudm9pZGVkICE9PSAndW5kZWZpbmVkJyAmJiB0aGlzLnZvaWRlZCAhPT0gbnVsbCkge3RvUmV0dXJuWyd2b2lkZWQnXSA9ICd0b0FwaUpzb24nIGluIHRoaXMudm9pZGVkID8gKHRoaXMudm9pZGVkIGFzIGFueSkudG9BcGlKc29uKCkgOiB0aGlzLnZvaWRlZDt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5kZWZhdWx0UGF5bWVudE1ldGhvZCAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnZGVmYXVsdFBheW1lbnRNZXRob2QnXSA9IHRoaXMuZGVmYXVsdFBheW1lbnRNZXRob2Q7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuY3VzdG9tZXJBZGRyZXNzICE9PSAndW5kZWZpbmVkJyAmJiB0aGlzLmN1c3RvbWVyQWRkcmVzcyAhPT0gbnVsbCkge3RvUmV0dXJuWydjdXN0b21lckFkZHJlc3MnXSA9ICd0b0FwaUpzb24nIGluIHRoaXMuY3VzdG9tZXJBZGRyZXNzID8gKHRoaXMuY3VzdG9tZXJBZGRyZXNzIGFzIGFueSkudG9BcGlKc29uKCkgOiB0aGlzLmN1c3RvbWVyQWRkcmVzczt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5leHRlcm5hbEN1c3RvbWVySWRlbnRpZmllciAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnZXh0ZXJuYWxDdXN0b21lcklkZW50aWZpZXInXSA9IHRoaXMuZXh0ZXJuYWxDdXN0b21lcklkZW50aWZpZXI7fVxuICAgICAgICByZXR1cm4gdG9SZXR1cm47XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgSW52b2ljZUl0ZW0gaW1wbGVtZW50cyBpLkludm9pY2VJdGVtSW50ZXJmYWNlIHtcbiAgICBpZDogc3RyaW5nO1xuICAgIHNrdTogc3RyaW5nO1xuICAgIGFtb3VudDogbnVtYmVyO1xuICAgIHF1YW50aXR5OiBudW1iZXI7XG4gICAgZGVzY3JpcHRpb246IHN0cmluZztcbiAgICB0b3RhbDogbnVtYmVyO1xuICAgIGFwcGxpZWRUYXhlczogQXBwbGllZFRheFJhdGVbXTtcbiAgICB0YXhSYXRlczogVGF4UmF0ZVtdO1xuICAgIGJ1bmRsZUlkOiBzdHJpbmc7XG4gICAgZGlzY291bnRzOiBBcHBsaWVkRGlzY291bnRbXTtcbiAgICBzdWJ0b3RhbDogbnVtYmVyO1xuICAgIGJ1bmRsZUluc3RhbmNlSWQ6IHN0cmluZztcblxuICAgIHN0YXRpYyBmcm9tUHJvdG8ocHJvdG86IGFueSk6IEludm9pY2VJdGVtIHtcbiAgICAgICAgbGV0IG0gPSBuZXcgSW52b2ljZUl0ZW0oKTtcbiAgICAgICAgbSA9IE9iamVjdC5hc3NpZ24obSwgcHJvdG8pO1xuICAgICAgICBpZiAocHJvdG8uYW1vdW50KSB7bS5hbW91bnQgPSBwYXJzZUludChwcm90by5hbW91bnQsIDEwKTt9XG4gICAgICAgIGlmIChwcm90by50b3RhbCkge20udG90YWwgPSBwYXJzZUludChwcm90by50b3RhbCwgMTApO31cbiAgICAgICAgaWYgKHByb3RvLmFwcGxpZWRUYXhlcykge20uYXBwbGllZFRheGVzID0gcHJvdG8uYXBwbGllZFRheGVzLm1hcChBcHBsaWVkVGF4UmF0ZS5mcm9tUHJvdG8pO31cbiAgICAgICAgaWYgKHByb3RvLnRheFJhdGVzKSB7bS50YXhSYXRlcyA9IHByb3RvLnRheFJhdGVzLm1hcChUYXhSYXRlLmZyb21Qcm90byk7fVxuICAgICAgICBpZiAocHJvdG8uZGlzY291bnRzKSB7bS5kaXNjb3VudHMgPSBwcm90by5kaXNjb3VudHMubWFwKEFwcGxpZWREaXNjb3VudC5mcm9tUHJvdG8pO31cbiAgICAgICAgaWYgKHByb3RvLnN1YnRvdGFsKSB7bS5zdWJ0b3RhbCA9IHBhcnNlSW50KHByb3RvLnN1YnRvdGFsLCAxMCk7fVxuICAgICAgICByZXR1cm4gbTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihrd2FyZ3M/OiBpLkludm9pY2VJdGVtSW50ZXJmYWNlKSB7XG4gICAgICAgIGlmICgha3dhcmdzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLCBrd2FyZ3MpO1xuICAgIH1cblxuICAgIHRvQXBpSnNvbigpOiBvYmplY3Qge1xuICAgICAgICBjb25zdCB0b1JldHVybjoge1xuICAgICAgICAgICAgW2tleTogc3RyaW5nXTogYW55O1xuICAgICAgICB9ID0ge307XG4gICAgICAgIFxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuaWQgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2lkJ10gPSB0aGlzLmlkO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnNrdSAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnc2t1J10gPSB0aGlzLnNrdTt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5hbW91bnQgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2Ftb3VudCddID0gdGhpcy5hbW91bnQ7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMucXVhbnRpdHkgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ3F1YW50aXR5J10gPSB0aGlzLnF1YW50aXR5O31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmRlc2NyaXB0aW9uICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydkZXNjcmlwdGlvbiddID0gdGhpcy5kZXNjcmlwdGlvbjt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy50b3RhbCAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsndG90YWwnXSA9IHRoaXMudG90YWw7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuYXBwbGllZFRheGVzICE9PSAndW5kZWZpbmVkJyAmJiB0aGlzLmFwcGxpZWRUYXhlcyAhPT0gbnVsbCkge3RvUmV0dXJuWydhcHBsaWVkVGF4ZXMnXSA9ICd0b0FwaUpzb24nIGluIHRoaXMuYXBwbGllZFRheGVzID8gKHRoaXMuYXBwbGllZFRheGVzIGFzIGFueSkudG9BcGlKc29uKCkgOiB0aGlzLmFwcGxpZWRUYXhlczt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy50YXhSYXRlcyAhPT0gJ3VuZGVmaW5lZCcgJiYgdGhpcy50YXhSYXRlcyAhPT0gbnVsbCkge3RvUmV0dXJuWyd0YXhSYXRlcyddID0gJ3RvQXBpSnNvbicgaW4gdGhpcy50YXhSYXRlcyA/ICh0aGlzLnRheFJhdGVzIGFzIGFueSkudG9BcGlKc29uKCkgOiB0aGlzLnRheFJhdGVzO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmJ1bmRsZUlkICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydidW5kbGVJZCddID0gdGhpcy5idW5kbGVJZDt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5kaXNjb3VudHMgIT09ICd1bmRlZmluZWQnICYmIHRoaXMuZGlzY291bnRzICE9PSBudWxsKSB7dG9SZXR1cm5bJ2Rpc2NvdW50cyddID0gJ3RvQXBpSnNvbicgaW4gdGhpcy5kaXNjb3VudHMgPyAodGhpcy5kaXNjb3VudHMgYXMgYW55KS50b0FwaUpzb24oKSA6IHRoaXMuZGlzY291bnRzO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnN1YnRvdGFsICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydzdWJ0b3RhbCddID0gdGhpcy5zdWJ0b3RhbDt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5idW5kbGVJbnN0YW5jZUlkICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydidW5kbGVJbnN0YW5jZUlkJ10gPSB0aGlzLmJ1bmRsZUluc3RhbmNlSWQ7fVxuICAgICAgICByZXR1cm4gdG9SZXR1cm47XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgTGlzdEludm9pY2VzUmVxdWVzdCBpbXBsZW1lbnRzIGkuTGlzdEludm9pY2VzUmVxdWVzdEludGVyZmFjZSB7XG4gICAgZmlsdGVyczogTGlzdEludm9pY2VzUmVxdWVzdEZpbHRlcnM7XG4gICAgcGFnaW5nT3B0aW9uczogUGFnZWRSZXF1ZXN0T3B0aW9ucztcblxuICAgIHN0YXRpYyBmcm9tUHJvdG8ocHJvdG86IGFueSk6IExpc3RJbnZvaWNlc1JlcXVlc3Qge1xuICAgICAgICBsZXQgbSA9IG5ldyBMaXN0SW52b2ljZXNSZXF1ZXN0KCk7XG4gICAgICAgIG0gPSBPYmplY3QuYXNzaWduKG0sIHByb3RvKTtcbiAgICAgICAgaWYgKHByb3RvLmZpbHRlcnMpIHttLmZpbHRlcnMgPSBMaXN0SW52b2ljZXNSZXF1ZXN0RmlsdGVycy5mcm9tUHJvdG8ocHJvdG8uZmlsdGVycyk7fVxuICAgICAgICBpZiAocHJvdG8ucGFnaW5nT3B0aW9ucykge20ucGFnaW5nT3B0aW9ucyA9IFBhZ2VkUmVxdWVzdE9wdGlvbnMuZnJvbVByb3RvKHByb3RvLnBhZ2luZ09wdGlvbnMpO31cbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Ioa3dhcmdzPzogaS5MaXN0SW52b2ljZXNSZXF1ZXN0SW50ZXJmYWNlKSB7XG4gICAgICAgIGlmICgha3dhcmdzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLCBrd2FyZ3MpO1xuICAgIH1cblxuICAgIHRvQXBpSnNvbigpOiBvYmplY3Qge1xuICAgICAgICBjb25zdCB0b1JldHVybjoge1xuICAgICAgICAgICAgW2tleTogc3RyaW5nXTogYW55O1xuICAgICAgICB9ID0ge307XG4gICAgICAgIFxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuZmlsdGVycyAhPT0gJ3VuZGVmaW5lZCcgJiYgdGhpcy5maWx0ZXJzICE9PSBudWxsKSB7dG9SZXR1cm5bJ2ZpbHRlcnMnXSA9ICd0b0FwaUpzb24nIGluIHRoaXMuZmlsdGVycyA/ICh0aGlzLmZpbHRlcnMgYXMgYW55KS50b0FwaUpzb24oKSA6IHRoaXMuZmlsdGVyczt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5wYWdpbmdPcHRpb25zICE9PSAndW5kZWZpbmVkJyAmJiB0aGlzLnBhZ2luZ09wdGlvbnMgIT09IG51bGwpIHt0b1JldHVyblsncGFnaW5nT3B0aW9ucyddID0gJ3RvQXBpSnNvbicgaW4gdGhpcy5wYWdpbmdPcHRpb25zID8gKHRoaXMucGFnaW5nT3B0aW9ucyBhcyBhbnkpLnRvQXBpSnNvbigpIDogdGhpcy5wYWdpbmdPcHRpb25zO31cbiAgICAgICAgcmV0dXJuIHRvUmV0dXJuO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIExpc3RJbnZvaWNlc1Jlc3BvbnNlIGltcGxlbWVudHMgaS5MaXN0SW52b2ljZXNSZXNwb25zZUludGVyZmFjZSB7XG4gICAgaW52b2ljZXM6IEludm9pY2VbXTtcbiAgICBwYWdpbmdNZXRhZGF0YTogUGFnZWRSZXNwb25zZU1ldGFkYXRhO1xuXG4gICAgc3RhdGljIGZyb21Qcm90byhwcm90bzogYW55KTogTGlzdEludm9pY2VzUmVzcG9uc2Uge1xuICAgICAgICBsZXQgbSA9IG5ldyBMaXN0SW52b2ljZXNSZXNwb25zZSgpO1xuICAgICAgICBtID0gT2JqZWN0LmFzc2lnbihtLCBwcm90byk7XG4gICAgICAgIGlmIChwcm90by5pbnZvaWNlcykge20uaW52b2ljZXMgPSBwcm90by5pbnZvaWNlcy5tYXAoSW52b2ljZS5mcm9tUHJvdG8pO31cbiAgICAgICAgaWYgKHByb3RvLnBhZ2luZ01ldGFkYXRhKSB7bS5wYWdpbmdNZXRhZGF0YSA9IFBhZ2VkUmVzcG9uc2VNZXRhZGF0YS5mcm9tUHJvdG8ocHJvdG8ucGFnaW5nTWV0YWRhdGEpO31cbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Ioa3dhcmdzPzogaS5MaXN0SW52b2ljZXNSZXNwb25zZUludGVyZmFjZSkge1xuICAgICAgICBpZiAoIWt3YXJncykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywga3dhcmdzKTtcbiAgICB9XG5cbiAgICB0b0FwaUpzb24oKTogb2JqZWN0IHtcbiAgICAgICAgY29uc3QgdG9SZXR1cm46IHtcbiAgICAgICAgICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgICAgICAgfSA9IHt9O1xuICAgICAgICBcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmludm9pY2VzICE9PSAndW5kZWZpbmVkJyAmJiB0aGlzLmludm9pY2VzICE9PSBudWxsKSB7dG9SZXR1cm5bJ2ludm9pY2VzJ10gPSAndG9BcGlKc29uJyBpbiB0aGlzLmludm9pY2VzID8gKHRoaXMuaW52b2ljZXMgYXMgYW55KS50b0FwaUpzb24oKSA6IHRoaXMuaW52b2ljZXM7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMucGFnaW5nTWV0YWRhdGEgIT09ICd1bmRlZmluZWQnICYmIHRoaXMucGFnaW5nTWV0YWRhdGEgIT09IG51bGwpIHt0b1JldHVyblsncGFnaW5nTWV0YWRhdGEnXSA9ICd0b0FwaUpzb24nIGluIHRoaXMucGFnaW5nTWV0YWRhdGEgPyAodGhpcy5wYWdpbmdNZXRhZGF0YSBhcyBhbnkpLnRvQXBpSnNvbigpIDogdGhpcy5wYWdpbmdNZXRhZGF0YTt9XG4gICAgICAgIHJldHVybiB0b1JldHVybjtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBQYXlJbnZvaWNlUmVxdWVzdCBpbXBsZW1lbnRzIGkuUGF5SW52b2ljZVJlcXVlc3RJbnRlcmZhY2Uge1xuICAgIG1lcmNoYW50SWQ6IHN0cmluZztcbiAgICBpbnZvaWNlSWQ6IHN0cmluZztcblxuICAgIHN0YXRpYyBmcm9tUHJvdG8ocHJvdG86IGFueSk6IFBheUludm9pY2VSZXF1ZXN0IHtcbiAgICAgICAgbGV0IG0gPSBuZXcgUGF5SW52b2ljZVJlcXVlc3QoKTtcbiAgICAgICAgbSA9IE9iamVjdC5hc3NpZ24obSwgcHJvdG8pO1xuICAgICAgICByZXR1cm4gbTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihrd2FyZ3M/OiBpLlBheUludm9pY2VSZXF1ZXN0SW50ZXJmYWNlKSB7XG4gICAgICAgIGlmICgha3dhcmdzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLCBrd2FyZ3MpO1xuICAgIH1cblxuICAgIHRvQXBpSnNvbigpOiBvYmplY3Qge1xuICAgICAgICBjb25zdCB0b1JldHVybjoge1xuICAgICAgICAgICAgW2tleTogc3RyaW5nXTogYW55O1xuICAgICAgICB9ID0ge307XG4gICAgICAgIFxuICAgICAgICBpZiAodHlwZW9mIHRoaXMubWVyY2hhbnRJZCAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnbWVyY2hhbnRJZCddID0gdGhpcy5tZXJjaGFudElkO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmludm9pY2VJZCAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnaW52b2ljZUlkJ10gPSB0aGlzLmludm9pY2VJZDt9XG4gICAgICAgIHJldHVybiB0b1JldHVybjtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBQYXltZW50TGlua0l0ZW0gaW1wbGVtZW50cyBpLlBheW1lbnRMaW5rSXRlbUludGVyZmFjZSB7XG4gICAgYW1vdW50OiBudW1iZXI7XG4gICAgcXVhbnRpdHk6IG51bWJlcjtcbiAgICBkZXNjcmlwdGlvbjogc3RyaW5nO1xuXG4gICAgc3RhdGljIGZyb21Qcm90byhwcm90bzogYW55KTogUGF5bWVudExpbmtJdGVtIHtcbiAgICAgICAgbGV0IG0gPSBuZXcgUGF5bWVudExpbmtJdGVtKCk7XG4gICAgICAgIG0gPSBPYmplY3QuYXNzaWduKG0sIHByb3RvKTtcbiAgICAgICAgaWYgKHByb3RvLmFtb3VudCkge20uYW1vdW50ID0gcGFyc2VJbnQocHJvdG8uYW1vdW50LCAxMCk7fVxuICAgICAgICByZXR1cm4gbTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihrd2FyZ3M/OiBpLlBheW1lbnRMaW5rSXRlbUludGVyZmFjZSkge1xuICAgICAgICBpZiAoIWt3YXJncykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywga3dhcmdzKTtcbiAgICB9XG5cbiAgICB0b0FwaUpzb24oKTogb2JqZWN0IHtcbiAgICAgICAgY29uc3QgdG9SZXR1cm46IHtcbiAgICAgICAgICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgICAgICAgfSA9IHt9O1xuICAgICAgICBcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmFtb3VudCAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnYW1vdW50J10gPSB0aGlzLmFtb3VudDt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5xdWFudGl0eSAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsncXVhbnRpdHknXSA9IHRoaXMucXVhbnRpdHk7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuZGVzY3JpcHRpb24gIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2Rlc2NyaXB0aW9uJ10gPSB0aGlzLmRlc2NyaXB0aW9uO31cbiAgICAgICAgcmV0dXJuIHRvUmV0dXJuO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIFJlbW92ZUJ1bmRsZVJlcXVlc3QgaW1wbGVtZW50cyBpLlJlbW92ZUJ1bmRsZVJlcXVlc3RJbnRlcmZhY2Uge1xuICAgIGludm9pY2VJZDogc3RyaW5nO1xuICAgIG1lcmNoYW50SWQ6IHN0cmluZztcbiAgICBidW5kbGVJZDogc3RyaW5nO1xuICAgIGJ1bmRsZUluc3RhbmNlSWQ6IHN0cmluZztcblxuICAgIHN0YXRpYyBmcm9tUHJvdG8ocHJvdG86IGFueSk6IFJlbW92ZUJ1bmRsZVJlcXVlc3Qge1xuICAgICAgICBsZXQgbSA9IG5ldyBSZW1vdmVCdW5kbGVSZXF1ZXN0KCk7XG4gICAgICAgIG0gPSBPYmplY3QuYXNzaWduKG0sIHByb3RvKTtcbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Ioa3dhcmdzPzogaS5SZW1vdmVCdW5kbGVSZXF1ZXN0SW50ZXJmYWNlKSB7XG4gICAgICAgIGlmICgha3dhcmdzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLCBrd2FyZ3MpO1xuICAgIH1cblxuICAgIHRvQXBpSnNvbigpOiBvYmplY3Qge1xuICAgICAgICBjb25zdCB0b1JldHVybjoge1xuICAgICAgICAgICAgW2tleTogc3RyaW5nXTogYW55O1xuICAgICAgICB9ID0ge307XG4gICAgICAgIFxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuaW52b2ljZUlkICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydpbnZvaWNlSWQnXSA9IHRoaXMuaW52b2ljZUlkO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLm1lcmNoYW50SWQgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ21lcmNoYW50SWQnXSA9IHRoaXMubWVyY2hhbnRJZDt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5idW5kbGVJZCAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnYnVuZGxlSWQnXSA9IHRoaXMuYnVuZGxlSWQ7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuYnVuZGxlSW5zdGFuY2VJZCAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnYnVuZGxlSW5zdGFuY2VJZCddID0gdGhpcy5idW5kbGVJbnN0YW5jZUlkO31cbiAgICAgICAgcmV0dXJuIHRvUmV0dXJuO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIFJlbW92ZUJ1bmRsZVJlc3BvbnNlIGltcGxlbWVudHMgaS5SZW1vdmVCdW5kbGVSZXNwb25zZUludGVyZmFjZSB7XG4gICAgaW52b2ljZTogSW52b2ljZTtcblxuICAgIHN0YXRpYyBmcm9tUHJvdG8ocHJvdG86IGFueSk6IFJlbW92ZUJ1bmRsZVJlc3BvbnNlIHtcbiAgICAgICAgbGV0IG0gPSBuZXcgUmVtb3ZlQnVuZGxlUmVzcG9uc2UoKTtcbiAgICAgICAgbSA9IE9iamVjdC5hc3NpZ24obSwgcHJvdG8pO1xuICAgICAgICBpZiAocHJvdG8uaW52b2ljZSkge20uaW52b2ljZSA9IEludm9pY2UuZnJvbVByb3RvKHByb3RvLmludm9pY2UpO31cbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Ioa3dhcmdzPzogaS5SZW1vdmVCdW5kbGVSZXNwb25zZUludGVyZmFjZSkge1xuICAgICAgICBpZiAoIWt3YXJncykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywga3dhcmdzKTtcbiAgICB9XG5cbiAgICB0b0FwaUpzb24oKTogb2JqZWN0IHtcbiAgICAgICAgY29uc3QgdG9SZXR1cm46IHtcbiAgICAgICAgICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgICAgICAgfSA9IHt9O1xuICAgICAgICBcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmludm9pY2UgIT09ICd1bmRlZmluZWQnICYmIHRoaXMuaW52b2ljZSAhPT0gbnVsbCkge3RvUmV0dXJuWydpbnZvaWNlJ10gPSAndG9BcGlKc29uJyBpbiB0aGlzLmludm9pY2UgPyAodGhpcy5pbnZvaWNlIGFzIGFueSkudG9BcGlKc29uKCkgOiB0aGlzLmludm9pY2U7fVxuICAgICAgICByZXR1cm4gdG9SZXR1cm47XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgU2VuZEludm9pY2VSZXF1ZXN0IGltcGxlbWVudHMgaS5TZW5kSW52b2ljZVJlcXVlc3RJbnRlcmZhY2Uge1xuICAgIG1lcmNoYW50SWQ6IHN0cmluZztcbiAgICBpbnZvaWNlSWQ6IHN0cmluZztcbiAgICBlbWFpbEFkZHJlc3Nlczogc3RyaW5nW107XG4gICAgbGFuZ3VhZ2VDb2RlOiBzdHJpbmc7XG5cbiAgICBzdGF0aWMgZnJvbVByb3RvKHByb3RvOiBhbnkpOiBTZW5kSW52b2ljZVJlcXVlc3Qge1xuICAgICAgICBsZXQgbSA9IG5ldyBTZW5kSW52b2ljZVJlcXVlc3QoKTtcbiAgICAgICAgbSA9IE9iamVjdC5hc3NpZ24obSwgcHJvdG8pO1xuICAgICAgICByZXR1cm4gbTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihrd2FyZ3M/OiBpLlNlbmRJbnZvaWNlUmVxdWVzdEludGVyZmFjZSkge1xuICAgICAgICBpZiAoIWt3YXJncykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywga3dhcmdzKTtcbiAgICB9XG5cbiAgICB0b0FwaUpzb24oKTogb2JqZWN0IHtcbiAgICAgICAgY29uc3QgdG9SZXR1cm46IHtcbiAgICAgICAgICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgICAgICAgfSA9IHt9O1xuICAgICAgICBcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLm1lcmNoYW50SWQgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ21lcmNoYW50SWQnXSA9IHRoaXMubWVyY2hhbnRJZDt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5pbnZvaWNlSWQgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2ludm9pY2VJZCddID0gdGhpcy5pbnZvaWNlSWQ7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuZW1haWxBZGRyZXNzZXMgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2VtYWlsQWRkcmVzc2VzJ10gPSB0aGlzLmVtYWlsQWRkcmVzc2VzO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmxhbmd1YWdlQ29kZSAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnbGFuZ3VhZ2VDb2RlJ10gPSB0aGlzLmxhbmd1YWdlQ29kZTt9XG4gICAgICAgIHJldHVybiB0b1JldHVybjtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBVcGRhdGVCdW5kbGVSZXF1ZXN0IGltcGxlbWVudHMgaS5VcGRhdGVCdW5kbGVSZXF1ZXN0SW50ZXJmYWNlIHtcbiAgICBtZXJjaGFudElkOiBzdHJpbmc7XG4gICAgaW52b2ljZUlkOiBzdHJpbmc7XG4gICAgYnVuZGxlSWQ6IHN0cmluZztcbiAgICBoaWRlQnVuZGxlSXRlbXM6IGJvb2xlYW47XG4gICAgYnVuZGxlSW5zdGFuY2VJZDogc3RyaW5nO1xuXG4gICAgc3RhdGljIGZyb21Qcm90byhwcm90bzogYW55KTogVXBkYXRlQnVuZGxlUmVxdWVzdCB7XG4gICAgICAgIGxldCBtID0gbmV3IFVwZGF0ZUJ1bmRsZVJlcXVlc3QoKTtcbiAgICAgICAgbSA9IE9iamVjdC5hc3NpZ24obSwgcHJvdG8pO1xuICAgICAgICByZXR1cm4gbTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihrd2FyZ3M/OiBpLlVwZGF0ZUJ1bmRsZVJlcXVlc3RJbnRlcmZhY2UpIHtcbiAgICAgICAgaWYgKCFrd2FyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGt3YXJncyk7XG4gICAgfVxuXG4gICAgdG9BcGlKc29uKCk6IG9iamVjdCB7XG4gICAgICAgIGNvbnN0IHRvUmV0dXJuOiB7XG4gICAgICAgICAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gICAgICAgIH0gPSB7fTtcbiAgICAgICAgXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5tZXJjaGFudElkICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydtZXJjaGFudElkJ10gPSB0aGlzLm1lcmNoYW50SWQ7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuaW52b2ljZUlkICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydpbnZvaWNlSWQnXSA9IHRoaXMuaW52b2ljZUlkO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmJ1bmRsZUlkICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydidW5kbGVJZCddID0gdGhpcy5idW5kbGVJZDt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5oaWRlQnVuZGxlSXRlbXMgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2hpZGVCdW5kbGVJdGVtcyddID0gdGhpcy5oaWRlQnVuZGxlSXRlbXM7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuYnVuZGxlSW5zdGFuY2VJZCAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnYnVuZGxlSW5zdGFuY2VJZCddID0gdGhpcy5idW5kbGVJbnN0YW5jZUlkO31cbiAgICAgICAgcmV0dXJuIHRvUmV0dXJuO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIFVwZGF0ZUJ1bmRsZVJlc3BvbnNlIGltcGxlbWVudHMgaS5VcGRhdGVCdW5kbGVSZXNwb25zZUludGVyZmFjZSB7XG4gICAgaW52b2ljZTogSW52b2ljZTtcblxuICAgIHN0YXRpYyBmcm9tUHJvdG8ocHJvdG86IGFueSk6IFVwZGF0ZUJ1bmRsZVJlc3BvbnNlIHtcbiAgICAgICAgbGV0IG0gPSBuZXcgVXBkYXRlQnVuZGxlUmVzcG9uc2UoKTtcbiAgICAgICAgbSA9IE9iamVjdC5hc3NpZ24obSwgcHJvdG8pO1xuICAgICAgICBpZiAocHJvdG8uaW52b2ljZSkge20uaW52b2ljZSA9IEludm9pY2UuZnJvbVByb3RvKHByb3RvLmludm9pY2UpO31cbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Ioa3dhcmdzPzogaS5VcGRhdGVCdW5kbGVSZXNwb25zZUludGVyZmFjZSkge1xuICAgICAgICBpZiAoIWt3YXJncykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywga3dhcmdzKTtcbiAgICB9XG5cbiAgICB0b0FwaUpzb24oKTogb2JqZWN0IHtcbiAgICAgICAgY29uc3QgdG9SZXR1cm46IHtcbiAgICAgICAgICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgICAgICAgfSA9IHt9O1xuICAgICAgICBcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmludm9pY2UgIT09ICd1bmRlZmluZWQnICYmIHRoaXMuaW52b2ljZSAhPT0gbnVsbCkge3RvUmV0dXJuWydpbnZvaWNlJ10gPSAndG9BcGlKc29uJyBpbiB0aGlzLmludm9pY2UgPyAodGhpcy5pbnZvaWNlIGFzIGFueSkudG9BcGlKc29uKCkgOiB0aGlzLmludm9pY2U7fVxuICAgICAgICByZXR1cm4gdG9SZXR1cm47XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgVXBkYXRlRGVmYXVsdFRheFJhdGVzUmVxdWVzdCBpbXBsZW1lbnRzIGkuVXBkYXRlRGVmYXVsdFRheFJhdGVzUmVxdWVzdEludGVyZmFjZSB7XG4gICAgaW52b2ljZUlkOiBzdHJpbmc7XG4gICAgbWVyY2hhbnRJZDogc3RyaW5nO1xuICAgIHRheFJhdGVJZHM6IHN0cmluZ1tdO1xuXG4gICAgc3RhdGljIGZyb21Qcm90byhwcm90bzogYW55KTogVXBkYXRlRGVmYXVsdFRheFJhdGVzUmVxdWVzdCB7XG4gICAgICAgIGxldCBtID0gbmV3IFVwZGF0ZURlZmF1bHRUYXhSYXRlc1JlcXVlc3QoKTtcbiAgICAgICAgbSA9IE9iamVjdC5hc3NpZ24obSwgcHJvdG8pO1xuICAgICAgICByZXR1cm4gbTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihrd2FyZ3M/OiBpLlVwZGF0ZURlZmF1bHRUYXhSYXRlc1JlcXVlc3RJbnRlcmZhY2UpIHtcbiAgICAgICAgaWYgKCFrd2FyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGt3YXJncyk7XG4gICAgfVxuXG4gICAgdG9BcGlKc29uKCk6IG9iamVjdCB7XG4gICAgICAgIGNvbnN0IHRvUmV0dXJuOiB7XG4gICAgICAgICAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gICAgICAgIH0gPSB7fTtcbiAgICAgICAgXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5pbnZvaWNlSWQgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2ludm9pY2VJZCddID0gdGhpcy5pbnZvaWNlSWQ7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMubWVyY2hhbnRJZCAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnbWVyY2hhbnRJZCddID0gdGhpcy5tZXJjaGFudElkO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnRheFJhdGVJZHMgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ3RheFJhdGVJZHMnXSA9IHRoaXMudGF4UmF0ZUlkczt9XG4gICAgICAgIHJldHVybiB0b1JldHVybjtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBVcGRhdGVEZWZhdWx0VGF4UmF0ZXNSZXNwb25zZSBpbXBsZW1lbnRzIGkuVXBkYXRlRGVmYXVsdFRheFJhdGVzUmVzcG9uc2VJbnRlcmZhY2Uge1xuICAgIGludm9pY2U6IEludm9pY2U7XG5cbiAgICBzdGF0aWMgZnJvbVByb3RvKHByb3RvOiBhbnkpOiBVcGRhdGVEZWZhdWx0VGF4UmF0ZXNSZXNwb25zZSB7XG4gICAgICAgIGxldCBtID0gbmV3IFVwZGF0ZURlZmF1bHRUYXhSYXRlc1Jlc3BvbnNlKCk7XG4gICAgICAgIG0gPSBPYmplY3QuYXNzaWduKG0sIHByb3RvKTtcbiAgICAgICAgaWYgKHByb3RvLmludm9pY2UpIHttLmludm9pY2UgPSBJbnZvaWNlLmZyb21Qcm90byhwcm90by5pbnZvaWNlKTt9XG4gICAgICAgIHJldHVybiBtO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKGt3YXJncz86IGkuVXBkYXRlRGVmYXVsdFRheFJhdGVzUmVzcG9uc2VJbnRlcmZhY2UpIHtcbiAgICAgICAgaWYgKCFrd2FyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGt3YXJncyk7XG4gICAgfVxuXG4gICAgdG9BcGlKc29uKCk6IG9iamVjdCB7XG4gICAgICAgIGNvbnN0IHRvUmV0dXJuOiB7XG4gICAgICAgICAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gICAgICAgIH0gPSB7fTtcbiAgICAgICAgXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5pbnZvaWNlICE9PSAndW5kZWZpbmVkJyAmJiB0aGlzLmludm9pY2UgIT09IG51bGwpIHt0b1JldHVyblsnaW52b2ljZSddID0gJ3RvQXBpSnNvbicgaW4gdGhpcy5pbnZvaWNlID8gKHRoaXMuaW52b2ljZSBhcyBhbnkpLnRvQXBpSnNvbigpIDogdGhpcy5pbnZvaWNlO31cbiAgICAgICAgcmV0dXJuIHRvUmV0dXJuO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIFVwZGF0ZUludm9pY2VSZXF1ZXN0IGltcGxlbWVudHMgaS5VcGRhdGVJbnZvaWNlUmVxdWVzdEludGVyZmFjZSB7XG4gICAgaW52b2ljZTogSW52b2ljZTtcbiAgICBmaWVsZE1hc2s6IEZpZWxkTWFzaztcblxuICAgIHN0YXRpYyBmcm9tUHJvdG8ocHJvdG86IGFueSk6IFVwZGF0ZUludm9pY2VSZXF1ZXN0IHtcbiAgICAgICAgbGV0IG0gPSBuZXcgVXBkYXRlSW52b2ljZVJlcXVlc3QoKTtcbiAgICAgICAgbSA9IE9iamVjdC5hc3NpZ24obSwgcHJvdG8pO1xuICAgICAgICBpZiAocHJvdG8uaW52b2ljZSkge20uaW52b2ljZSA9IEludm9pY2UuZnJvbVByb3RvKHByb3RvLmludm9pY2UpO31cbiAgICAgICAgaWYgKHByb3RvLmZpZWxkTWFzaykge20uZmllbGRNYXNrID0gRmllbGRNYXNrLmZyb21Qcm90byhwcm90by5maWVsZE1hc2spO31cbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Ioa3dhcmdzPzogaS5VcGRhdGVJbnZvaWNlUmVxdWVzdEludGVyZmFjZSkge1xuICAgICAgICBpZiAoIWt3YXJncykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywga3dhcmdzKTtcbiAgICB9XG5cbiAgICB0b0FwaUpzb24oKTogb2JqZWN0IHtcbiAgICAgICAgY29uc3QgdG9SZXR1cm46IHtcbiAgICAgICAgICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgICAgICAgfSA9IHt9O1xuICAgICAgICBcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmludm9pY2UgIT09ICd1bmRlZmluZWQnICYmIHRoaXMuaW52b2ljZSAhPT0gbnVsbCkge3RvUmV0dXJuWydpbnZvaWNlJ10gPSAndG9BcGlKc29uJyBpbiB0aGlzLmludm9pY2UgPyAodGhpcy5pbnZvaWNlIGFzIGFueSkudG9BcGlKc29uKCkgOiB0aGlzLmludm9pY2U7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuZmllbGRNYXNrICE9PSAndW5kZWZpbmVkJyAmJiB0aGlzLmZpZWxkTWFzayAhPT0gbnVsbCkge3RvUmV0dXJuWydmaWVsZE1hc2snXSA9ICd0b0FwaUpzb24nIGluIHRoaXMuZmllbGRNYXNrID8gKHRoaXMuZmllbGRNYXNrIGFzIGFueSkudG9BcGlKc29uKCkgOiB0aGlzLmZpZWxkTWFzazt9XG4gICAgICAgIHJldHVybiB0b1JldHVybjtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBVcGRhdGVJbnZvaWNlUmVzcG9uc2UgaW1wbGVtZW50cyBpLlVwZGF0ZUludm9pY2VSZXNwb25zZUludGVyZmFjZSB7XG4gICAgaW52b2ljZTogSW52b2ljZTtcblxuICAgIHN0YXRpYyBmcm9tUHJvdG8ocHJvdG86IGFueSk6IFVwZGF0ZUludm9pY2VSZXNwb25zZSB7XG4gICAgICAgIGxldCBtID0gbmV3IFVwZGF0ZUludm9pY2VSZXNwb25zZSgpO1xuICAgICAgICBtID0gT2JqZWN0LmFzc2lnbihtLCBwcm90byk7XG4gICAgICAgIGlmIChwcm90by5pbnZvaWNlKSB7bS5pbnZvaWNlID0gSW52b2ljZS5mcm9tUHJvdG8ocHJvdG8uaW52b2ljZSk7fVxuICAgICAgICByZXR1cm4gbTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihrd2FyZ3M/OiBpLlVwZGF0ZUludm9pY2VSZXNwb25zZUludGVyZmFjZSkge1xuICAgICAgICBpZiAoIWt3YXJncykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywga3dhcmdzKTtcbiAgICB9XG5cbiAgICB0b0FwaUpzb24oKTogb2JqZWN0IHtcbiAgICAgICAgY29uc3QgdG9SZXR1cm46IHtcbiAgICAgICAgICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgICAgICAgfSA9IHt9O1xuICAgICAgICBcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmludm9pY2UgIT09ICd1bmRlZmluZWQnICYmIHRoaXMuaW52b2ljZSAhPT0gbnVsbCkge3RvUmV0dXJuWydpbnZvaWNlJ10gPSAndG9BcGlKc29uJyBpbiB0aGlzLmludm9pY2UgPyAodGhpcy5pbnZvaWNlIGFzIGFueSkudG9BcGlKc29uKCkgOiB0aGlzLmludm9pY2U7fVxuICAgICAgICByZXR1cm4gdG9SZXR1cm47XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgVXBkYXRlTGluZUl0ZW1SZXF1ZXN0IGltcGxlbWVudHMgaS5VcGRhdGVMaW5lSXRlbVJlcXVlc3RJbnRlcmZhY2Uge1xuICAgIG1lcmNoYW50SWQ6IHN0cmluZztcbiAgICBpbnZvaWNlSWQ6IHN0cmluZztcbiAgICBpZDogc3RyaW5nO1xuICAgIHNrdTogc3RyaW5nO1xuICAgIGFtb3VudDogbnVtYmVyO1xuICAgIHF1YW50aXR5OiBudW1iZXI7XG4gICAgZGVzY3JpcHRpb246IHN0cmluZztcbiAgICB0YXhSYXRlczogc3RyaW5nW107XG5cbiAgICBzdGF0aWMgZnJvbVByb3RvKHByb3RvOiBhbnkpOiBVcGRhdGVMaW5lSXRlbVJlcXVlc3Qge1xuICAgICAgICBsZXQgbSA9IG5ldyBVcGRhdGVMaW5lSXRlbVJlcXVlc3QoKTtcbiAgICAgICAgbSA9IE9iamVjdC5hc3NpZ24obSwgcHJvdG8pO1xuICAgICAgICBpZiAocHJvdG8uYW1vdW50KSB7bS5hbW91bnQgPSBwYXJzZUludChwcm90by5hbW91bnQsIDEwKTt9XG4gICAgICAgIHJldHVybiBtO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKGt3YXJncz86IGkuVXBkYXRlTGluZUl0ZW1SZXF1ZXN0SW50ZXJmYWNlKSB7XG4gICAgICAgIGlmICgha3dhcmdzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLCBrd2FyZ3MpO1xuICAgIH1cblxuICAgIHRvQXBpSnNvbigpOiBvYmplY3Qge1xuICAgICAgICBjb25zdCB0b1JldHVybjoge1xuICAgICAgICAgICAgW2tleTogc3RyaW5nXTogYW55O1xuICAgICAgICB9ID0ge307XG4gICAgICAgIFxuICAgICAgICBpZiAodHlwZW9mIHRoaXMubWVyY2hhbnRJZCAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnbWVyY2hhbnRJZCddID0gdGhpcy5tZXJjaGFudElkO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmludm9pY2VJZCAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnaW52b2ljZUlkJ10gPSB0aGlzLmludm9pY2VJZDt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5pZCAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnaWQnXSA9IHRoaXMuaWQ7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuc2t1ICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydza3UnXSA9IHRoaXMuc2t1O31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmFtb3VudCAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnYW1vdW50J10gPSB0aGlzLmFtb3VudDt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5xdWFudGl0eSAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsncXVhbnRpdHknXSA9IHRoaXMucXVhbnRpdHk7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuZGVzY3JpcHRpb24gIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2Rlc2NyaXB0aW9uJ10gPSB0aGlzLmRlc2NyaXB0aW9uO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnRheFJhdGVzICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWyd0YXhSYXRlcyddID0gdGhpcy50YXhSYXRlczt9XG4gICAgICAgIHJldHVybiB0b1JldHVybjtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBVcGRhdGVMaW5lSXRlbVJlc3BvbnNlIGltcGxlbWVudHMgaS5VcGRhdGVMaW5lSXRlbVJlc3BvbnNlSW50ZXJmYWNlIHtcbiAgICBpbnZvaWNlOiBJbnZvaWNlO1xuXG4gICAgc3RhdGljIGZyb21Qcm90byhwcm90bzogYW55KTogVXBkYXRlTGluZUl0ZW1SZXNwb25zZSB7XG4gICAgICAgIGxldCBtID0gbmV3IFVwZGF0ZUxpbmVJdGVtUmVzcG9uc2UoKTtcbiAgICAgICAgbSA9IE9iamVjdC5hc3NpZ24obSwgcHJvdG8pO1xuICAgICAgICBpZiAocHJvdG8uaW52b2ljZSkge20uaW52b2ljZSA9IEludm9pY2UuZnJvbVByb3RvKHByb3RvLmludm9pY2UpO31cbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Ioa3dhcmdzPzogaS5VcGRhdGVMaW5lSXRlbVJlc3BvbnNlSW50ZXJmYWNlKSB7XG4gICAgICAgIGlmICgha3dhcmdzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLCBrd2FyZ3MpO1xuICAgIH1cblxuICAgIHRvQXBpSnNvbigpOiBvYmplY3Qge1xuICAgICAgICBjb25zdCB0b1JldHVybjoge1xuICAgICAgICAgICAgW2tleTogc3RyaW5nXTogYW55O1xuICAgICAgICB9ID0ge307XG4gICAgICAgIFxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuaW52b2ljZSAhPT0gJ3VuZGVmaW5lZCcgJiYgdGhpcy5pbnZvaWNlICE9PSBudWxsKSB7dG9SZXR1cm5bJ2ludm9pY2UnXSA9ICd0b0FwaUpzb24nIGluIHRoaXMuaW52b2ljZSA/ICh0aGlzLmludm9pY2UgYXMgYW55KS50b0FwaUpzb24oKSA6IHRoaXMuaW52b2ljZTt9XG4gICAgICAgIHJldHVybiB0b1JldHVybjtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBWb2lkSW52b2ljZVJlcXVlc3QgaW1wbGVtZW50cyBpLlZvaWRJbnZvaWNlUmVxdWVzdEludGVyZmFjZSB7XG4gICAgbWVyY2hhbnRJZDogc3RyaW5nO1xuICAgIGludm9pY2VJZDogc3RyaW5nO1xuXG4gICAgc3RhdGljIGZyb21Qcm90byhwcm90bzogYW55KTogVm9pZEludm9pY2VSZXF1ZXN0IHtcbiAgICAgICAgbGV0IG0gPSBuZXcgVm9pZEludm9pY2VSZXF1ZXN0KCk7XG4gICAgICAgIG0gPSBPYmplY3QuYXNzaWduKG0sIHByb3RvKTtcbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Ioa3dhcmdzPzogaS5Wb2lkSW52b2ljZVJlcXVlc3RJbnRlcmZhY2UpIHtcbiAgICAgICAgaWYgKCFrd2FyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGt3YXJncyk7XG4gICAgfVxuXG4gICAgdG9BcGlKc29uKCk6IG9iamVjdCB7XG4gICAgICAgIGNvbnN0IHRvUmV0dXJuOiB7XG4gICAgICAgICAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gICAgICAgIH0gPSB7fTtcbiAgICAgICAgXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5tZXJjaGFudElkICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydtZXJjaGFudElkJ10gPSB0aGlzLm1lcmNoYW50SWQ7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuaW52b2ljZUlkICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydpbnZvaWNlSWQnXSA9IHRoaXMuaW52b2ljZUlkO31cbiAgICAgICAgcmV0dXJuIHRvUmV0dXJuO1xuICAgIH1cbn1cblxuIl19
|
|
1198
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW52b2ljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2JpbGxpbmdfc2RrL3NyYy9saWIvX2ludGVybmFsL29iamVjdHMvaW52b2ljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFPQSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDakQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ3JELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUNwRCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQ3pDLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxxQkFBcUIsRUFBRSxNQUFNLFVBQVUsQ0FBQztBQUN0RSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sWUFBWSxDQUFDO0FBQ3JDLE9BQU8sS0FBSyxDQUFDLE1BQU0sVUFBVSxDQUFDO0FBRTlCLE1BQU0sVUFBVSxpQkFBaUIsQ0FBSSxPQUFZLEVBQUUsS0FBYTtJQUM5RCxJQUFJLE9BQU8sS0FBSyxLQUFLLFFBQVEsRUFBRTtRQUM3QixPQUFPLEtBQUssQ0FBQztLQUNkO0lBQ0QsT0FBTyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDeEIsQ0FBQztBQUVELE1BQU0sT0FBTyxnQkFBZ0I7SUFLekIsTUFBTSxDQUFDLFNBQVMsQ0FBQyxLQUFVO1FBQ3ZCLElBQUksQ0FBQyxHQUFHLElBQUksZ0JBQWdCLEVBQUUsQ0FBQztRQUMvQixDQUFDLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDNUIsT0FBTyxDQUFDLENBQUM7SUFDYixDQUFDO0lBRUQsWUFBWSxNQUFvQztRQUM1QyxJQUFJLENBQUMsTUFBTSxFQUFFO1lBQ1QsT0FBTztTQUNWO1FBQ0QsTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLENBQUM7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S0FBSyxJQUFJLEVBQUU7WUFBQyxRQUFRLENBQUMsU0FBUyxDQUFDLEdBQUcsV0FBVyxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFFLElBQUksQ0FBQyxPQUFlLENBQUMsU0FBUyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUM7U0FBQztRQUN6SyxPQUFPLFFBQVEsQ0FBQztJQUNwQixDQUFDO0NBQ0o7QUFFRCxNQUFNLE9BQU8sa0JBQWtCO0lBSTNCLE1BQU0sQ0FBQyxTQUFTLENBQUMsS0FBVTtRQUN2QixJQUFJLENBQUMsR0FBRyxJQUFJLGtCQUFrQixFQUFFLENBQUM7UUFDakMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQzVCLE9BQU8sQ0FBQyxDQUFDO0lBQ2IsQ0FBQztJQUVELFlBQVksTUFBc0M7UUFDOUMsSUFBSSxDQUFDLE1BQU0sRUFBRTtZQUNULE9BQU87U0FDVjtRQUNELE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBQ2hDLENBQUM7SUFFRCxTQUFTO1FBQ0wsTUFBTSxRQUFRLEdBRVYsRUFBRSxDQUFDO1FBRVAsSUFBSSxPQUFPLElBQUksQ0FBQyxVQUFVLEtBQUssV0FBVyxFQUFFO1lBQUMsUUFBUSxDQUFDLFlBQVksQ0FBQyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUM7U0FBQztRQUN2RixJQUFJLE9BQU8sSUFBSSxDQUFDLFNBQVMsS0FBSyxXQUFXLEVBQUU7WUFBQyxRQUFRLENBQUMsV0FBVyxDQUFDLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQztTQUFDO1FBQ3BGLE9BQU8sUUFBUSxDQUFDO0lBQ3BCLENBQUM7Q0FDSiIsInNvdXJjZXNDb250ZW50IjpbIi8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuLy8gQ29kZSBnZW5lcmF0ZWQgYnkgc2RrZ2VuXG4vLyBETyBOT1QgRURJVCEuXG4vL1xuLy8gT2JqZWN0cy5cbi8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuaW1wb3J0ICogYXMgaSBmcm9tICcuLi9pbnRlcmZhY2VzJztcbmltcG9ydCB7IEFwcGxpZWRCdW5kbGUgfSBmcm9tICcuL2FwcGxpZWQtYnVuZGxlJztcbmltcG9ydCB7IEFwcGxpZWREaXNjb3VudCB9IGZyb20gJy4vYXBwbGllZC1kaXNjb3VudCc7XG5pbXBvcnQgeyBBcHBsaWVkVGF4UmF0ZSB9IGZyb20gJy4vYXBwbGllZC10YXgtcmF0ZSc7XG5pbXBvcnQgeyBGaWVsZE1hc2sgfSBmcm9tICcuL2ZpZWxkLW1hc2snO1xuaW1wb3J0IHsgUGFnZWRSZXF1ZXN0T3B0aW9ucywgUGFnZWRSZXNwb25zZU1ldGFkYXRhIH0gZnJvbSAnLi9jb21tb24nO1xuaW1wb3J0IHsgVGF4UmF0ZSB9IGZyb20gJy4vdGF4LXJhdGUnO1xuaW1wb3J0ICogYXMgZSBmcm9tICcuLi9lbnVtcyc7XG5cbmV4cG9ydCBmdW5jdGlvbiBlbnVtU3RyaW5nVG9WYWx1ZTxFPihlbnVtUmVmOiBhbnksIHZhbHVlOiBzdHJpbmcpOiBFIHtcbiAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcicpIHtcbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cbiAgcmV0dXJuIGVudW1SZWZbdmFsdWVdO1xufVxuXG5leHBvcnQgY2xhc3MgQWRkQnVuZGxlUmVxdWVzdCBpbXBsZW1lbnRzIGkuQWRkQnVuZGxlUmVxdWVzdEludGVyZmFjZSB7XG4gICAgaW52b2ljZUlkOiBzdHJpbmc7XG4gICAgbWVyY2hhbnRJZDogc3RyaW5nO1xuICAgIGJ1bmRsZUlkOiBzdHJpbmc7XG5cbiAgICBzdGF0aWMgZnJvbVByb3RvKHByb3RvOiBhbnkpOiBBZGRCdW5kbGVSZXF1ZXN0IHtcbiAgICAgICAgbGV0IG0gPSBuZXcgQWRkQnVuZGxlUmVxdWVzdCgpO1xuICAgICAgICBtID0gT2JqZWN0LmFzc2lnbihtLCBwcm90byk7XG4gICAgICAgIHJldHVybiBtO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKGt3YXJncz86IGkuQWRkQnVuZGxlUmVxdWVzdEludGVyZmFjZSkge1xuICAgICAgICBpZiAoIWt3YXJncykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywga3dhcmdzKTtcbiAgICB9XG5cbiAgICB0b0FwaUpzb24oKTogb2JqZWN0IHtcbiAgICAgICAgY29uc3QgdG9SZXR1cm46IHtcbiAgICAgICAgICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgICAgICAgfSA9IHt9O1xuICAgICAgICBcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmludm9pY2VJZCAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnaW52b2ljZUlkJ10gPSB0aGlzLmludm9pY2VJZDt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5tZXJjaGFudElkICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydtZXJjaGFudElkJ10gPSB0aGlzLm1lcmNoYW50SWQ7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuYnVuZGxlSWQgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2J1bmRsZUlkJ10gPSB0aGlzLmJ1bmRsZUlkO31cbiAgICAgICAgcmV0dXJuIHRvUmV0dXJuO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIEFkZEJ1bmRsZVJlc3BvbnNlIGltcGxlbWVudHMgaS5BZGRCdW5kbGVSZXNwb25zZUludGVyZmFjZSB7XG4gICAgaW52b2ljZTogSW52b2ljZTtcblxuICAgIHN0YXRpYyBmcm9tUHJvdG8ocHJvdG86IGFueSk6IEFkZEJ1bmRsZVJlc3BvbnNlIHtcbiAgICAgICAgbGV0IG0gPSBuZXcgQWRkQnVuZGxlUmVzcG9uc2UoKTtcbiAgICAgICAgbSA9IE9iamVjdC5hc3NpZ24obSwgcHJvdG8pO1xuICAgICAgICBpZiAocHJvdG8uaW52b2ljZSkge20uaW52b2ljZSA9IEludm9pY2UuZnJvbVByb3RvKHByb3RvLmludm9pY2UpO31cbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Ioa3dhcmdzPzogaS5BZGRCdW5kbGVSZXNwb25zZUludGVyZmFjZSkge1xuICAgICAgICBpZiAoIWt3YXJncykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywga3dhcmdzKTtcbiAgICB9XG5cbiAgICB0b0FwaUpzb24oKTogb2JqZWN0IHtcbiAgICAgICAgY29uc3QgdG9SZXR1cm46IHtcbiAgICAgICAgICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgICAgICAgfSA9IHt9O1xuICAgICAgICBcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmludm9pY2UgIT09ICd1bmRlZmluZWQnICYmIHRoaXMuaW52b2ljZSAhPT0gbnVsbCkge3RvUmV0dXJuWydpbnZvaWNlJ10gPSAndG9BcGlKc29uJyBpbiB0aGlzLmludm9pY2UgPyAodGhpcy5pbnZvaWNlIGFzIGFueSkudG9BcGlKc29uKCkgOiB0aGlzLmludm9pY2U7fVxuICAgICAgICByZXR1cm4gdG9SZXR1cm47XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgQWRkTGluZUl0ZW1SZXF1ZXN0IGltcGxlbWVudHMgaS5BZGRMaW5lSXRlbVJlcXVlc3RJbnRlcmZhY2Uge1xuICAgIG1lcmNoYW50SWQ6IHN0cmluZztcbiAgICBpbnZvaWNlSWQ6IHN0cmluZztcbiAgICBza3U6IHN0cmluZztcbiAgICBhbW91bnQ6IG51bWJlcjtcbiAgICBxdWFudGl0eTogbnVtYmVyO1xuICAgIGRlc2NyaXB0aW9uOiBzdHJpbmc7XG4gICAgdGF4UmF0ZXM6IHN0cmluZ1tdO1xuXG4gICAgc3RhdGljIGZyb21Qcm90byhwcm90bzogYW55KTogQWRkTGluZUl0ZW1SZXF1ZXN0IHtcbiAgICAgICAgbGV0IG0gPSBuZXcgQWRkTGluZUl0ZW1SZXF1ZXN0KCk7XG4gICAgICAgIG0gPSBPYmplY3QuYXNzaWduKG0sIHByb3RvKTtcbiAgICAgICAgaWYgKHByb3RvLmFtb3VudCkge20uYW1vdW50ID0gcGFyc2VJbnQocHJvdG8uYW1vdW50LCAxMCk7fVxuICAgICAgICByZXR1cm4gbTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihrd2FyZ3M/OiBpLkFkZExpbmVJdGVtUmVxdWVzdEludGVyZmFjZSkge1xuICAgICAgICBpZiAoIWt3YXJncykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywga3dhcmdzKTtcbiAgICB9XG5cbiAgICB0b0FwaUpzb24oKTogb2JqZWN0IHtcbiAgICAgICAgY29uc3QgdG9SZXR1cm46IHtcbiAgICAgICAgICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgICAgICAgfSA9IHt9O1xuICAgICAgICBcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLm1lcmNoYW50SWQgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ21lcmNoYW50SWQnXSA9IHRoaXMubWVyY2hhbnRJZDt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5pbnZvaWNlSWQgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2ludm9pY2VJZCddID0gdGhpcy5pbnZvaWNlSWQ7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuc2t1ICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydza3UnXSA9IHRoaXMuc2t1O31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmFtb3VudCAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnYW1vdW50J10gPSB0aGlzLmFtb3VudDt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5xdWFudGl0eSAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsncXVhbnRpdHknXSA9IHRoaXMucXVhbnRpdHk7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuZGVzY3JpcHRpb24gIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2Rlc2NyaXB0aW9uJ10gPSB0aGlzLmRlc2NyaXB0aW9uO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnRheFJhdGVzICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWyd0YXhSYXRlcyddID0gdGhpcy50YXhSYXRlczt9XG4gICAgICAgIHJldHVybiB0b1JldHVybjtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBBZGRMaW5lSXRlbVJlc3BvbnNlIGltcGxlbWVudHMgaS5BZGRMaW5lSXRlbVJlc3BvbnNlSW50ZXJmYWNlIHtcbiAgICBpbnZvaWNlOiBJbnZvaWNlO1xuXG4gICAgc3RhdGljIGZyb21Qcm90byhwcm90bzogYW55KTogQWRkTGluZUl0ZW1SZXNwb25zZSB7XG4gICAgICAgIGxldCBtID0gbmV3IEFkZExpbmVJdGVtUmVzcG9uc2UoKTtcbiAgICAgICAgbSA9IE9iamVjdC5hc3NpZ24obSwgcHJvdG8pO1xuICAgICAgICBpZiAocHJvdG8uaW52b2ljZSkge20uaW52b2ljZSA9IEludm9pY2UuZnJvbVByb3RvKHByb3RvLmludm9pY2UpO31cbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Ioa3dhcmdzPzogaS5BZGRMaW5lSXRlbVJlc3BvbnNlSW50ZXJmYWNlKSB7XG4gICAgICAgIGlmICgha3dhcmdzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLCBrd2FyZ3MpO1xuICAgIH1cblxuICAgIHRvQXBpSnNvbigpOiBvYmplY3Qge1xuICAgICAgICBjb25zdCB0b1JldHVybjoge1xuICAgICAgICAgICAgW2tleTogc3RyaW5nXTogYW55O1xuICAgICAgICB9ID0ge307XG4gICAgICAgIFxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuaW52b2ljZSAhPT0gJ3VuZGVmaW5lZCcgJiYgdGhpcy5pbnZvaWNlICE9PSBudWxsKSB7dG9SZXR1cm5bJ2ludm9pY2UnXSA9ICd0b0FwaUpzb24nIGluIHRoaXMuaW52b2ljZSA/ICh0aGlzLmludm9pY2UgYXMgYW55KS50b0FwaUpzb24oKSA6IHRoaXMuaW52b2ljZTt9XG4gICAgICAgIHJldHVybiB0b1JldHVybjtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBDaGFyZ2VJbnZvaWNlUmVxdWVzdCBpbXBsZW1lbnRzIGkuQ2hhcmdlSW52b2ljZVJlcXVlc3RJbnRlcmZhY2Uge1xuICAgIG1lcmNoYW50SWQ6IHN0cmluZztcbiAgICBjdXN0b21lcklkOiBzdHJpbmc7XG4gICAgaW52b2ljZUlkOiBzdHJpbmc7XG4gICAgcGF5bWVudE1ldGhvZElkOiBzdHJpbmc7XG5cbiAgICBzdGF0aWMgZnJvbVByb3RvKHByb3RvOiBhbnkpOiBDaGFyZ2VJbnZvaWNlUmVxdWVzdCB7XG4gICAgICAgIGxldCBtID0gbmV3IENoYXJnZUludm9pY2VSZXF1ZXN0KCk7XG4gICAgICAgIG0gPSBPYmplY3QuYXNzaWduKG0sIHByb3RvKTtcbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Ioa3dhcmdzPzogaS5DaGFyZ2VJbnZvaWNlUmVxdWVzdEludGVyZmFjZSkge1xuICAgICAgICBpZiAoIWt3YXJncykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywga3dhcmdzKTtcbiAgICB9XG5cbiAgICB0b0FwaUpzb24oKTogb2JqZWN0IHtcbiAgICAgICAgY29uc3QgdG9SZXR1cm46IHtcbiAgICAgICAgICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgICAgICAgfSA9IHt9O1xuICAgICAgICBcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLm1lcmNoYW50SWQgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ21lcmNoYW50SWQnXSA9IHRoaXMubWVyY2hhbnRJZDt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5jdXN0b21lcklkICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydjdXN0b21lcklkJ10gPSB0aGlzLmN1c3RvbWVySWQ7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuaW52b2ljZUlkICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydpbnZvaWNlSWQnXSA9IHRoaXMuaW52b2ljZUlkO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnBheW1lbnRNZXRob2RJZCAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsncGF5bWVudE1ldGhvZElkJ10gPSB0aGlzLnBheW1lbnRNZXRob2RJZDt9XG4gICAgICAgIHJldHVybiB0b1JldHVybjtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBDcmVhdGVJbnZvaWNlUmVxdWVzdCBpbXBsZW1lbnRzIGkuQ3JlYXRlSW52b2ljZVJlcXVlc3RJbnRlcmZhY2Uge1xuICAgIG1lcmNoYW50SWQ6IHN0cmluZztcbiAgICBjdXN0b21lcklkOiBzdHJpbmc7XG4gICAgY3VycmVuY3lDb2RlOiBzdHJpbmc7XG4gICAgb3JkZXJJZDogc3RyaW5nO1xuXG4gICAgc3RhdGljIGZyb21Qcm90byhwcm90bzogYW55KTogQ3JlYXRlSW52b2ljZVJlcXVlc3Qge1xuICAgICAgICBsZXQgbSA9IG5ldyBDcmVhdGVJbnZvaWNlUmVxdWVzdCgpO1xuICAgICAgICBtID0gT2JqZWN0LmFzc2lnbihtLCBwcm90byk7XG4gICAgICAgIHJldHVybiBtO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKGt3YXJncz86IGkuQ3JlYXRlSW52b2ljZVJlcXVlc3RJbnRlcmZhY2UpIHtcbiAgICAgICAgaWYgKCFrd2FyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGt3YXJncyk7XG4gICAgfVxuXG4gICAgdG9BcGlKc29uKCk6IG9iamVjdCB7XG4gICAgICAgIGNvbnN0IHRvUmV0dXJuOiB7XG4gICAgICAgICAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gICAgICAgIH0gPSB7fTtcbiAgICAgICAgXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5tZXJjaGFudElkICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydtZXJjaGFudElkJ10gPSB0aGlzLm1lcmNoYW50SWQ7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuY3VzdG9tZXJJZCAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnY3VzdG9tZXJJZCddID0gdGhpcy5jdXN0b21lcklkO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmN1cnJlbmN5Q29kZSAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnY3VycmVuY3lDb2RlJ10gPSB0aGlzLmN1cnJlbmN5Q29kZTt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5vcmRlcklkICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydvcmRlcklkJ10gPSB0aGlzLm9yZGVySWQ7fVxuICAgICAgICByZXR1cm4gdG9SZXR1cm47XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgQ3JlYXRlSW52b2ljZVJlc3BvbnNlIGltcGxlbWVudHMgaS5DcmVhdGVJbnZvaWNlUmVzcG9uc2VJbnRlcmZhY2Uge1xuICAgIGludm9pY2VJZDogc3RyaW5nO1xuXG4gICAgc3RhdGljIGZyb21Qcm90byhwcm90bzogYW55KTogQ3JlYXRlSW52b2ljZVJlc3BvbnNlIHtcbiAgICAgICAgbGV0IG0gPSBuZXcgQ3JlYXRlSW52b2ljZVJlc3BvbnNlKCk7XG4gICAgICAgIG0gPSBPYmplY3QuYXNzaWduKG0sIHByb3RvKTtcbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Ioa3dhcmdzPzogaS5DcmVhdGVJbnZvaWNlUmVzcG9uc2VJbnRlcmZhY2UpIHtcbiAgICAgICAgaWYgKCFrd2FyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGt3YXJncyk7XG4gICAgfVxuXG4gICAgdG9BcGlKc29uKCk6IG9iamVjdCB7XG4gICAgICAgIGNvbnN0IHRvUmV0dXJuOiB7XG4gICAgICAgICAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gICAgICAgIH0gPSB7fTtcbiAgICAgICAgXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5pbnZvaWNlSWQgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2ludm9pY2VJZCddID0gdGhpcy5pbnZvaWNlSWQ7fVxuICAgICAgICByZXR1cm4gdG9SZXR1cm47XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgQ3JlYXRlUGF5bWVudExpbmtSZXF1ZXN0IGltcGxlbWVudHMgaS5DcmVhdGVQYXltZW50TGlua1JlcXVlc3RJbnRlcmZhY2Uge1xuICAgIG1lcmNoYW50SWQ6IHN0cmluZztcbiAgICBjdXN0b21lcklkOiBzdHJpbmc7XG4gICAgY3VycmVuY3lDb2RlOiBzdHJpbmc7XG4gICAgbGluZUl0ZW1zOiBQYXltZW50TGlua0l0ZW1bXTtcblxuICAgIHN0YXRpYyBmcm9tUHJvdG8ocHJvdG86IGFueSk6IENyZWF0ZVBheW1lbnRMaW5rUmVxdWVzdCB7XG4gICAgICAgIGxldCBtID0gbmV3IENyZWF0ZVBheW1lbnRMaW5rUmVxdWVzdCgpO1xuICAgICAgICBtID0gT2JqZWN0LmFzc2lnbihtLCBwcm90byk7XG4gICAgICAgIGlmIChwcm90by5saW5lSXRlbXMpIHttLmxpbmVJdGVtcyA9IHByb3RvLmxpbmVJdGVtcy5tYXAoUGF5bWVudExpbmtJdGVtLmZyb21Qcm90byk7fVxuICAgICAgICByZXR1cm4gbTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihrd2FyZ3M/OiBpLkNyZWF0ZVBheW1lbnRMaW5rUmVxdWVzdEludGVyZmFjZSkge1xuICAgICAgICBpZiAoIWt3YXJncykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywga3dhcmdzKTtcbiAgICB9XG5cbiAgICB0b0FwaUpzb24oKTogb2JqZWN0IHtcbiAgICAgICAgY29uc3QgdG9SZXR1cm46IHtcbiAgICAgICAgICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgICAgICAgfSA9IHt9O1xuICAgICAgICBcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLm1lcmNoYW50SWQgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ21lcmNoYW50SWQnXSA9IHRoaXMubWVyY2hhbnRJZDt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5jdXN0b21lcklkICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydjdXN0b21lcklkJ10gPSB0aGlzLmN1c3RvbWVySWQ7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuY3VycmVuY3lDb2RlICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydjdXJyZW5jeUNvZGUnXSA9IHRoaXMuY3VycmVuY3lDb2RlO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmxpbmVJdGVtcyAhPT0gJ3VuZGVmaW5lZCcgJiYgdGhpcy5saW5lSXRlbXMgIT09IG51bGwpIHt0b1JldHVyblsnbGluZUl0ZW1zJ10gPSAndG9BcGlKc29uJyBpbiB0aGlzLmxpbmVJdGVtcyA/ICh0aGlzLmxpbmVJdGVtcyBhcyBhbnkpLnRvQXBpSnNvbigpIDogdGhpcy5saW5lSXRlbXM7fVxuICAgICAgICByZXR1cm4gdG9SZXR1cm47XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgQ3JlYXRlUGF5bWVudExpbmtSZXNwb25zZSBpbXBsZW1lbnRzIGkuQ3JlYXRlUGF5bWVudExpbmtSZXNwb25zZUludGVyZmFjZSB7XG4gICAgaW52b2ljZUlkOiBzdHJpbmc7XG5cbiAgICBzdGF0aWMgZnJvbVByb3RvKHByb3RvOiBhbnkpOiBDcmVhdGVQYXltZW50TGlua1Jlc3BvbnNlIHtcbiAgICAgICAgbGV0IG0gPSBuZXcgQ3JlYXRlUGF5bWVudExpbmtSZXNwb25zZSgpO1xuICAgICAgICBtID0gT2JqZWN0LmFzc2lnbihtLCBwcm90byk7XG4gICAgICAgIHJldHVybiBtO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKGt3YXJncz86IGkuQ3JlYXRlUGF5bWVudExpbmtSZXNwb25zZUludGVyZmFjZSkge1xuICAgICAgICBpZiAoIWt3YXJncykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywga3dhcmdzKTtcbiAgICB9XG5cbiAgICB0b0FwaUpzb24oKTogb2JqZWN0IHtcbiAgICAgICAgY29uc3QgdG9SZXR1cm46IHtcbiAgICAgICAgICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgICAgICAgfSA9IHt9O1xuICAgICAgICBcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmludm9pY2VJZCAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnaW52b2ljZUlkJ10gPSB0aGlzLmludm9pY2VJZDt9XG4gICAgICAgIHJldHVybiB0b1JldHVybjtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBJbnZvaWNlQ3VzdG9tZXJBZGRyZXNzIGltcGxlbWVudHMgaS5JbnZvaWNlQ3VzdG9tZXJBZGRyZXNzSW50ZXJmYWNlIHtcbiAgICBhZGRyZXNzOiBzdHJpbmc7XG4gICAgY2l0eTogc3RyaW5nO1xuICAgIHN0YXRlOiBzdHJpbmc7XG4gICAgemlwOiBzdHJpbmc7XG4gICAgY291bnRyeTogc3RyaW5nO1xuICAgIGFkZHJlc3MyOiBzdHJpbmc7XG5cbiAgICBzdGF0aWMgZnJvbVByb3RvKHByb3RvOiBhbnkpOiBJbnZvaWNlQ3VzdG9tZXJBZGRyZXNzIHtcbiAgICAgICAgbGV0IG0gPSBuZXcgSW52b2ljZUN1c3RvbWVyQWRkcmVzcygpO1xuICAgICAgICBtID0gT2JqZWN0LmFzc2lnbihtLCBwcm90byk7XG4gICAgICAgIHJldHVybiBtO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKGt3YXJncz86IGkuSW52b2ljZUN1c3RvbWVyQWRkcmVzc0ludGVyZmFjZSkge1xuICAgICAgICBpZiAoIWt3YXJncykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywga3dhcmdzKTtcbiAgICB9XG5cbiAgICB0b0FwaUpzb24oKTogb2JqZWN0IHtcbiAgICAgICAgY29uc3QgdG9SZXR1cm46IHtcbiAgICAgICAgICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgICAgICAgfSA9IHt9O1xuICAgICAgICBcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmFkZHJlc3MgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2FkZHJlc3MnXSA9IHRoaXMuYWRkcmVzczt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5jaXR5ICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydjaXR5J10gPSB0aGlzLmNpdHk7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuc3RhdGUgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ3N0YXRlJ10gPSB0aGlzLnN0YXRlO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnppcCAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnemlwJ10gPSB0aGlzLnppcDt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5jb3VudHJ5ICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydjb3VudHJ5J10gPSB0aGlzLmNvdW50cnk7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuYWRkcmVzczIgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2FkZHJlc3MyJ10gPSB0aGlzLmFkZHJlc3MyO31cbiAgICAgICAgcmV0dXJuIHRvUmV0dXJuO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIExpc3RJbnZvaWNlc1JlcXVlc3RGaWx0ZXJzRGF0ZUZpbHRlciBpbXBsZW1lbnRzIGkuTGlzdEludm9pY2VzUmVxdWVzdEZpbHRlcnNEYXRlRmlsdGVySW50ZXJmYWNlIHtcbiAgICBkYXRlRmllbGQ6IGUuTGlzdEludm9pY2VzUmVxdWVzdEZpbHRlcnNEYXRlRmlsdGVyRGF0ZUZpZWxkO1xuICAgIGRhdGVMdGU6IERhdGU7XG4gICAgZGF0ZUd0ZTogRGF0ZTtcblxuICAgIHN0YXRpYyBmcm9tUHJvdG8ocHJvdG86IGFueSk6IExpc3RJbnZvaWNlc1JlcXVlc3RGaWx0ZXJzRGF0ZUZpbHRlciB7XG4gICAgICAgIGxldCBtID0gbmV3IExpc3RJbnZvaWNlc1JlcXVlc3RGaWx0ZXJzRGF0ZUZpbHRlcigpO1xuICAgICAgICBtID0gT2JqZWN0LmFzc2lnbihtLCBwcm90byk7XG4gICAgICAgIGlmIChwcm90by5kYXRlRmllbGQpIHttLmRhdGVGaWVsZCA9IGVudW1TdHJpbmdUb1ZhbHVlPGUuTGlzdEludm9pY2VzUmVxdWVzdEZpbHRlcnNEYXRlRmlsdGVyRGF0ZUZpZWxkPihlLkxpc3RJbnZvaWNlc1JlcXVlc3RGaWx0ZXJzRGF0ZUZpbHRlckRhdGVGaWVsZCwgcHJvdG8uZGF0ZUZpZWxkKTt9XG4gICAgICAgIGlmIChwcm90by5kYXRlTHRlKSB7bS5kYXRlTHRlID0gbmV3IERhdGUocHJvdG8uZGF0ZUx0ZSk7fVxuICAgICAgICBpZiAocHJvdG8uZGF0ZUd0ZSkge20uZGF0ZUd0ZSA9IG5ldyBEYXRlKHByb3RvLmRhdGVHdGUpO31cbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Ioa3dhcmdzPzogaS5MaXN0SW52b2ljZXNSZXF1ZXN0RmlsdGVyc0RhdGVGaWx0ZXJJbnRlcmZhY2UpIHtcbiAgICAgICAgaWYgKCFrd2FyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGt3YXJncyk7XG4gICAgfVxuXG4gICAgdG9BcGlKc29uKCk6IG9iamVjdCB7XG4gICAgICAgIGNvbnN0IHRvUmV0dXJuOiB7XG4gICAgICAgICAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gICAgICAgIH0gPSB7fTtcbiAgICAgICAgXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5kYXRlRmllbGQgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2RhdGVGaWVsZCddID0gdGhpcy5kYXRlRmllbGQ7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuZGF0ZUx0ZSAhPT0gJ3VuZGVmaW5lZCcgJiYgdGhpcy5kYXRlTHRlICE9PSBudWxsKSB7dG9SZXR1cm5bJ2RhdGVMdGUnXSA9ICd0b0FwaUpzb24nIGluIHRoaXMuZGF0ZUx0ZSA/ICh0aGlzLmRhdGVMdGUgYXMgYW55KS50b0FwaUpzb24oKSA6IHRoaXMuZGF0ZUx0ZTt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5kYXRlR3RlICE9PSAndW5kZWZpbmVkJyAmJiB0aGlzLmRhdGVHdGUgIT09IG51bGwpIHt0b1JldHVyblsnZGF0ZUd0ZSddID0gJ3RvQXBpSnNvbicgaW4gdGhpcy5kYXRlR3RlID8gKHRoaXMuZGF0ZUd0ZSBhcyBhbnkpLnRvQXBpSnNvbigpIDogdGhpcy5kYXRlR3RlO31cbiAgICAgICAgcmV0dXJuIHRvUmV0dXJuO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIERlbGV0ZUludm9pY2VSZXF1ZXN0IGltcGxlbWVudHMgaS5EZWxldGVJbnZvaWNlUmVxdWVzdEludGVyZmFjZSB7XG4gICAgbWVyY2hhbnRJZDogc3RyaW5nO1xuICAgIGludm9pY2VJZDogc3RyaW5nO1xuXG4gICAgc3RhdGljIGZyb21Qcm90byhwcm90bzogYW55KTogRGVsZXRlSW52b2ljZVJlcXVlc3Qge1xuICAgICAgICBsZXQgbSA9IG5ldyBEZWxldGVJbnZvaWNlUmVxdWVzdCgpO1xuICAgICAgICBtID0gT2JqZWN0LmFzc2lnbihtLCBwcm90byk7XG4gICAgICAgIHJldHVybiBtO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKGt3YXJncz86IGkuRGVsZXRlSW52b2ljZVJlcXVlc3RJbnRlcmZhY2UpIHtcbiAgICAgICAgaWYgKCFrd2FyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGt3YXJncyk7XG4gICAgfVxuXG4gICAgdG9BcGlKc29uKCk6IG9iamVjdCB7XG4gICAgICAgIGNvbnN0IHRvUmV0dXJuOiB7XG4gICAgICAgICAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gICAgICAgIH0gPSB7fTtcbiAgICAgICAgXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5tZXJjaGFudElkICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydtZXJjaGFudElkJ10gPSB0aGlzLm1lcmNoYW50SWQ7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuaW52b2ljZUlkICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydpbnZvaWNlSWQnXSA9IHRoaXMuaW52b2ljZUlkO31cbiAgICAgICAgcmV0dXJuIHRvUmV0dXJuO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIERlbGV0ZUxpbmVJdGVtUmVxdWVzdCBpbXBsZW1lbnRzIGkuRGVsZXRlTGluZUl0ZW1SZXF1ZXN0SW50ZXJmYWNlIHtcbiAgICBtZXJjaGFudElkOiBzdHJpbmc7XG4gICAgaW52b2ljZUlkOiBzdHJpbmc7XG4gICAgaWQ6IHN0cmluZztcblxuICAgIHN0YXRpYyBmcm9tUHJvdG8ocHJvdG86IGFueSk6IERlbGV0ZUxpbmVJdGVtUmVxdWVzdCB7XG4gICAgICAgIGxldCBtID0gbmV3IERlbGV0ZUxpbmVJdGVtUmVxdWVzdCgpO1xuICAgICAgICBtID0gT2JqZWN0LmFzc2lnbihtLCBwcm90byk7XG4gICAgICAgIHJldHVybiBtO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKGt3YXJncz86IGkuRGVsZXRlTGluZUl0ZW1SZXF1ZXN0SW50ZXJmYWNlKSB7XG4gICAgICAgIGlmICgha3dhcmdzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLCBrd2FyZ3MpO1xuICAgIH1cblxuICAgIHRvQXBpSnNvbigpOiBvYmplY3Qge1xuICAgICAgICBjb25zdCB0b1JldHVybjoge1xuICAgICAgICAgICAgW2tleTogc3RyaW5nXTogYW55O1xuICAgICAgICB9ID0ge307XG4gICAgICAgIFxuICAgICAgICBpZiAodHlwZW9mIHRoaXMubWVyY2hhbnRJZCAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnbWVyY2hhbnRJZCddID0gdGhpcy5tZXJjaGFudElkO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmludm9pY2VJZCAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnaW52b2ljZUlkJ10gPSB0aGlzLmludm9pY2VJZDt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5pZCAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnaWQnXSA9IHRoaXMuaWQ7fVxuICAgICAgICByZXR1cm4gdG9SZXR1cm47XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgRGVsZXRlTGluZUl0ZW1SZXNwb25zZSBpbXBsZW1lbnRzIGkuRGVsZXRlTGluZUl0ZW1SZXNwb25zZUludGVyZmFjZSB7XG4gICAgaW52b2ljZTogSW52b2ljZTtcblxuICAgIHN0YXRpYyBmcm9tUHJvdG8ocHJvdG86IGFueSk6IERlbGV0ZUxpbmVJdGVtUmVzcG9uc2Uge1xuICAgICAgICBsZXQgbSA9IG5ldyBEZWxldGVMaW5lSXRlbVJlc3BvbnNlKCk7XG4gICAgICAgIG0gPSBPYmplY3QuYXNzaWduKG0sIHByb3RvKTtcbiAgICAgICAgaWYgKHByb3RvLmludm9pY2UpIHttLmludm9pY2UgPSBJbnZvaWNlLmZyb21Qcm90byhwcm90by5pbnZvaWNlKTt9XG4gICAgICAgIHJldHVybiBtO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKGt3YXJncz86IGkuRGVsZXRlTGluZUl0ZW1SZXNwb25zZUludGVyZmFjZSkge1xuICAgICAgICBpZiAoIWt3YXJncykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywga3dhcmdzKTtcbiAgICB9XG5cbiAgICB0b0FwaUpzb24oKTogb2JqZWN0IHtcbiAgICAgICAgY29uc3QgdG9SZXR1cm46IHtcbiAgICAgICAgICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgICAgICAgfSA9IHt9O1xuICAgICAgICBcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmludm9pY2UgIT09ICd1bmRlZmluZWQnICYmIHRoaXMuaW52b2ljZSAhPT0gbnVsbCkge3RvUmV0dXJuWydpbnZvaWNlJ10gPSAndG9BcGlKc29uJyBpbiB0aGlzLmludm9pY2UgPyAodGhpcy5pbnZvaWNlIGFzIGFueSkudG9BcGlKc29uKCkgOiB0aGlzLmludm9pY2U7fVxuICAgICAgICByZXR1cm4gdG9SZXR1cm47XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgRHVwbGljYXRlSW52b2ljZVJlcXVlc3QgaW1wbGVtZW50cyBpLkR1cGxpY2F0ZUludm9pY2VSZXF1ZXN0SW50ZXJmYWNlIHtcbiAgICBtZXJjaGFudElkOiBzdHJpbmc7XG4gICAgaW52b2ljZUlkOiBzdHJpbmc7XG5cbiAgICBzdGF0aWMgZnJvbVByb3RvKHByb3RvOiBhbnkpOiBEdXBsaWNhdGVJbnZvaWNlUmVxdWVzdCB7XG4gICAgICAgIGxldCBtID0gbmV3IER1cGxpY2F0ZUludm9pY2VSZXF1ZXN0KCk7XG4gICAgICAgIG0gPSBPYmplY3QuYXNzaWduKG0sIHByb3RvKTtcbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Ioa3dhcmdzPzogaS5EdXBsaWNhdGVJbnZvaWNlUmVxdWVzdEludGVyZmFjZSkge1xuICAgICAgICBpZiAoIWt3YXJncykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywga3dhcmdzKTtcbiAgICB9XG5cbiAgICB0b0FwaUpzb24oKTogb2JqZWN0IHtcbiAgICAgICAgY29uc3QgdG9SZXR1cm46IHtcbiAgICAgICAgICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgICAgICAgfSA9IHt9O1xuICAgICAgICBcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLm1lcmNoYW50SWQgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ21lcmNoYW50SWQnXSA9IHRoaXMubWVyY2hhbnRJZDt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5pbnZvaWNlSWQgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2ludm9pY2VJZCddID0gdGhpcy5pbnZvaWNlSWQ7fVxuICAgICAgICByZXR1cm4gdG9SZXR1cm47XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgRHVwbGljYXRlSW52b2ljZVJlc3BvbnNlIGltcGxlbWVudHMgaS5EdXBsaWNhdGVJbnZvaWNlUmVzcG9uc2VJbnRlcmZhY2Uge1xuICAgIGludm9pY2VJZDogc3RyaW5nO1xuXG4gICAgc3RhdGljIGZyb21Qcm90byhwcm90bzogYW55KTogRHVwbGljYXRlSW52b2ljZVJlc3BvbnNlIHtcbiAgICAgICAgbGV0IG0gPSBuZXcgRHVwbGljYXRlSW52b2ljZVJlc3BvbnNlKCk7XG4gICAgICAgIG0gPSBPYmplY3QuYXNzaWduKG0sIHByb3RvKTtcbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Ioa3dhcmdzPzogaS5EdXBsaWNhdGVJbnZvaWNlUmVzcG9uc2VJbnRlcmZhY2UpIHtcbiAgICAgICAgaWYgKCFrd2FyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGt3YXJncyk7XG4gICAgfVxuXG4gICAgdG9BcGlKc29uKCk6IG9iamVjdCB7XG4gICAgICAgIGNvbnN0IHRvUmV0dXJuOiB7XG4gICAgICAgICAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gICAgICAgIH0gPSB7fTtcbiAgICAgICAgXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5pbnZvaWNlSWQgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2ludm9pY2VJZCddID0gdGhpcy5pbnZvaWNlSWQ7fVxuICAgICAgICByZXR1cm4gdG9SZXR1cm47XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgTGlzdEludm9pY2VzUmVxdWVzdEZpbHRlcnMgaW1wbGVtZW50cyBpLkxpc3RJbnZvaWNlc1JlcXVlc3RGaWx0ZXJzSW50ZXJmYWNlIHtcbiAgICBtZXJjaGFudElkOiBzdHJpbmc7XG4gICAgY3VzdG9tZXJJZDogc3RyaW5nO1xuICAgIHN0YXR1c2VzOiBlLkludm9pY2VTdGF0dXNbXTtcbiAgICBwYXN0RHVlOiBib29sZWFuO1xuICAgIG51bWJlcjogc3RyaW5nO1xuICAgIGRhdGVGaWx0ZXI6IExpc3RJbnZvaWNlc1JlcXVlc3RGaWx0ZXJzRGF0ZUZpbHRlcjtcblxuICAgIHN0YXRpYyBmcm9tUHJvdG8ocHJvdG86IGFueSk6IExpc3RJbnZvaWNlc1JlcXVlc3RGaWx0ZXJzIHtcbiAgICAgICAgbGV0IG0gPSBuZXcgTGlzdEludm9pY2VzUmVxdWVzdEZpbHRlcnMoKTtcbiAgICAgICAgbSA9IE9iamVjdC5hc3NpZ24obSwgcHJvdG8pO1xuICAgICAgICBpZiAocHJvdG8uc3RhdHVzZXMpIHttLnN0YXR1c2VzID0gcHJvdG8uc3RhdHVzZXMubWFwKCh2OiBzdHJpbmcpID0+IGVudW1TdHJpbmdUb1ZhbHVlPGUuSW52b2ljZVN0YXR1cz4oZS5JbnZvaWNlU3RhdHVzLCB2KSk7fVxuICAgICAgICBpZiAocHJvdG8uZGF0ZUZpbHRlcikge20uZGF0ZUZpbHRlciA9IExpc3RJbnZvaWNlc1JlcXVlc3RGaWx0ZXJzRGF0ZUZpbHRlci5mcm9tUHJvdG8ocHJvdG8uZGF0ZUZpbHRlcik7fVxuICAgICAgICByZXR1cm4gbTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihrd2FyZ3M/OiBpLkxpc3RJbnZvaWNlc1JlcXVlc3RGaWx0ZXJzSW50ZXJmYWNlKSB7XG4gICAgICAgIGlmICgha3dhcmdzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLCBrd2FyZ3MpO1xuICAgIH1cblxuICAgIHRvQXBpSnNvbigpOiBvYmplY3Qge1xuICAgICAgICBjb25zdCB0b1JldHVybjoge1xuICAgICAgICAgICAgW2tleTogc3RyaW5nXTogYW55O1xuICAgICAgICB9ID0ge307XG4gICAgICAgIFxuICAgICAgICBpZiAodHlwZW9mIHRoaXMubWVyY2hhbnRJZCAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnbWVyY2hhbnRJZCddID0gdGhpcy5tZXJjaGFudElkO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmN1c3RvbWVySWQgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2N1c3RvbWVySWQnXSA9IHRoaXMuY3VzdG9tZXJJZDt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5zdGF0dXNlcyAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnc3RhdHVzZXMnXSA9IHRoaXMuc3RhdHVzZXM7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMucGFzdER1ZSAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsncGFzdER1ZSddID0gdGhpcy5wYXN0RHVlO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLm51bWJlciAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnbnVtYmVyJ10gPSB0aGlzLm51bWJlcjt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5kYXRlRmlsdGVyICE9PSAndW5kZWZpbmVkJyAmJiB0aGlzLmRhdGVGaWx0ZXIgIT09IG51bGwpIHt0b1JldHVyblsnZGF0ZUZpbHRlciddID0gJ3RvQXBpSnNvbicgaW4gdGhpcy5kYXRlRmlsdGVyID8gKHRoaXMuZGF0ZUZpbHRlciBhcyBhbnkpLnRvQXBpSnNvbigpIDogdGhpcy5kYXRlRmlsdGVyO31cbiAgICAgICAgcmV0dXJuIHRvUmV0dXJuO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIEdldEludm9pY2VSZXF1ZXN0IGltcGxlbWVudHMgaS5HZXRJbnZvaWNlUmVxdWVzdEludGVyZmFjZSB7XG4gICAgbWVyY2hhbnRJZDogc3RyaW5nO1xuICAgIGludm9pY2VJZDogc3RyaW5nO1xuXG4gICAgc3RhdGljIGZyb21Qcm90byhwcm90bzogYW55KTogR2V0SW52b2ljZVJlcXVlc3Qge1xuICAgICAgICBsZXQgbSA9IG5ldyBHZXRJbnZvaWNlUmVxdWVzdCgpO1xuICAgICAgICBtID0gT2JqZWN0LmFzc2lnbihtLCBwcm90byk7XG4gICAgICAgIHJldHVybiBtO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKGt3YXJncz86IGkuR2V0SW52b2ljZVJlcXVlc3RJbnRlcmZhY2UpIHtcbiAgICAgICAgaWYgKCFrd2FyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGt3YXJncyk7XG4gICAgfVxuXG4gICAgdG9BcGlKc29uKCk6IG9iamVjdCB7XG4gICAgICAgIGNvbnN0IHRvUmV0dXJuOiB7XG4gICAgICAgICAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gICAgICAgIH0gPSB7fTtcbiAgICAgICAgXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5tZXJjaGFudElkICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydtZXJjaGFudElkJ10gPSB0aGlzLm1lcmNoYW50SWQ7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuaW52b2ljZUlkICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydpbnZvaWNlSWQnXSA9IHRoaXMuaW52b2ljZUlkO31cbiAgICAgICAgcmV0dXJuIHRvUmV0dXJuO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIEdldEludm9pY2VSZXNwb25zZSBpbXBsZW1lbnRzIGkuR2V0SW52b2ljZVJlc3BvbnNlSW50ZXJmYWNlIHtcbiAgICBpbnZvaWNlOiBJbnZvaWNlO1xuXG4gICAgc3RhdGljIGZyb21Qcm90byhwcm90bzogYW55KTogR2V0SW52b2ljZVJlc3BvbnNlIHtcbiAgICAgICAgbGV0IG0gPSBuZXcgR2V0SW52b2ljZVJlc3BvbnNlKCk7XG4gICAgICAgIG0gPSBPYmplY3QuYXNzaWduKG0sIHByb3RvKTtcbiAgICAgICAgaWYgKHByb3RvLmludm9pY2UpIHttLmludm9pY2UgPSBJbnZvaWNlLmZyb21Qcm90byhwcm90by5pbnZvaWNlKTt9XG4gICAgICAgIHJldHVybiBtO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKGt3YXJncz86IGkuR2V0SW52b2ljZVJlc3BvbnNlSW50ZXJmYWNlKSB7XG4gICAgICAgIGlmICgha3dhcmdzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLCBrd2FyZ3MpO1xuICAgIH1cblxuICAgIHRvQXBpSnNvbigpOiBvYmplY3Qge1xuICAgICAgICBjb25zdCB0b1JldHVybjoge1xuICAgICAgICAgICAgW2tleTogc3RyaW5nXTogYW55O1xuICAgICAgICB9ID0ge307XG4gICAgICAgIFxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuaW52b2ljZSAhPT0gJ3VuZGVmaW5lZCcgJiYgdGhpcy5pbnZvaWNlICE9PSBudWxsKSB7dG9SZXR1cm5bJ2ludm9pY2UnXSA9ICd0b0FwaUpzb24nIGluIHRoaXMuaW52b2ljZSA/ICh0aGlzLmludm9pY2UgYXMgYW55KS50b0FwaUpzb24oKSA6IHRoaXMuaW52b2ljZTt9XG4gICAgICAgIHJldHVybiB0b1JldHVybjtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBJbnZvaWNlIGltcGxlbWVudHMgaS5JbnZvaWNlSW50ZXJmYWNlIHtcbiAgICBtZXJjaGFudElkOiBzdHJpbmc7XG4gICAgaWQ6IHN0cmluZztcbiAgICBudW1iZXI6IHN0cmluZztcbiAgICBjdXN0b21lcklkOiBzdHJpbmc7XG4gICAgc3RhdHVzOiBlLkludm9pY2VTdGF0dXM7XG4gICAgc3VidG90YWw6IG51bWJlcjtcbiAgICB0b3RhbDogbnVtYmVyO1xuICAgIGFtb3VudFBhaWQ6IG51bWJlcjtcbiAgICBpc3N1ZWQ6IERhdGU7XG4gICAgZHVlOiBEYXRlO1xuICAgIGNyZWF0ZWQ6IERhdGU7XG4gICAgdXBkYXRlZDogRGF0ZTtcbiAgICBpdGVtczogSW52b2ljZUl0ZW1bXTtcbiAgICBjdXJyZW5jeTogZS5DdXJyZW5jeTtcbiAgICBwYWlkOiBEYXRlO1xuICAgIG9yZGVySWQ6IHN0cmluZztcbiAgICBhbW91bnRUYXg6IG51bWJlcjtcbiAgICBhcHBsaWVkVGF4ZXM6IEFwcGxpZWRUYXhSYXRlW107XG4gICAgZGVmYXVsdFRheFJhdGVzOiBUYXhSYXRlW107XG4gICAgYXBwbGllZEJ1bmRsZXM6IEFwcGxpZWRCdW5kbGVbXTtcbiAgICBhbW91bnREaXNjb3VudDogbnVtYmVyO1xuICAgIGN1c3RvbWVyTmFtZTogc3RyaW5nO1xuICAgIG9yaWdpbjogc3RyaW5nO1xuICAgIGNvbGxlY3Rpb25NZXRob2Q6IHN0cmluZztcbiAgICBjb250YWN0SWQ6IHN0cmluZztcbiAgICBtZW1vOiBzdHJpbmc7XG4gICAgdm9pZGVkOiBEYXRlO1xuICAgIGRlZmF1bHRQYXltZW50TWV0aG9kOiBzdHJpbmc7XG4gICAgY3VzdG9tZXJBZGRyZXNzOiBJbnZvaWNlQ3VzdG9tZXJBZGRyZXNzO1xuICAgIGV4dGVybmFsQ3VzdG9tZXJJZGVudGlmaWVyOiBzdHJpbmc7XG5cbiAgICBzdGF0aWMgZnJvbVByb3RvKHByb3RvOiBhbnkpOiBJbnZvaWNlIHtcbiAgICAgICAgbGV0IG0gPSBuZXcgSW52b2ljZSgpO1xuICAgICAgICBtID0gT2JqZWN0LmFzc2lnbihtLCBwcm90byk7XG4gICAgICAgIGlmIChwcm90by5zdGF0dXMpIHttLnN0YXR1cyA9IGVudW1TdHJpbmdUb1ZhbHVlPGUuSW52b2ljZVN0YXR1cz4oZS5JbnZvaWNlU3RhdHVzLCBwcm90by5zdGF0dXMpO31cbiAgICAgICAgaWYgKHByb3RvLnN1YnRvdGFsKSB7bS5zdWJ0b3RhbCA9IHBhcnNlSW50KHByb3RvLnN1YnRvdGFsLCAxMCk7fVxuICAgICAgICBpZiAocHJvdG8udG90YWwpIHttLnRvdGFsID0gcGFyc2VJbnQocHJvdG8udG90YWwsIDEwKTt9XG4gICAgICAgIGlmIChwcm90by5hbW91bnRQYWlkKSB7bS5hbW91bnRQYWlkID0gcGFyc2VJbnQocHJvdG8uYW1vdW50UGFpZCwgMTApO31cbiAgICAgICAgaWYgKHByb3RvLmlzc3VlZCkge20uaXNzdWVkID0gbmV3IERhdGUocHJvdG8uaXNzdWVkKTt9XG4gICAgICAgIGlmIChwcm90by5kdWUpIHttLmR1ZSA9IG5ldyBEYXRlKHByb3RvLmR1ZSk7fVxuICAgICAgICBpZiAocHJvdG8uY3JlYXRlZCkge20uY3JlYXRlZCA9IG5ldyBEYXRlKHByb3RvLmNyZWF0ZWQpO31cbiAgICAgICAgaWYgKHByb3RvLnVwZGF0ZWQpIHttLnVwZGF0ZWQgPSBuZXcgRGF0ZShwcm90by51cGRhdGVkKTt9XG4gICAgICAgIGlmIChwcm90by5pdGVtcykge20uaXRlbXMgPSBwcm90by5pdGVtcy5tYXAoSW52b2ljZUl0ZW0uZnJvbVByb3RvKTt9XG4gICAgICAgIGlmIChwcm90by5jdXJyZW5jeSkge20uY3VycmVuY3kgPSBlbnVtU3RyaW5nVG9WYWx1ZTxlLkN1cnJlbmN5PihlLkN1cnJlbmN5LCBwcm90by5jdXJyZW5jeSk7fVxuICAgICAgICBpZiAocHJvdG8ucGFpZCkge20ucGFpZCA9IG5ldyBEYXRlKHByb3RvLnBhaWQpO31cbiAgICAgICAgaWYgKHByb3RvLmFtb3VudFRheCkge20uYW1vdW50VGF4ID0gcGFyc2VJbnQocHJvdG8uYW1vdW50VGF4LCAxMCk7fVxuICAgICAgICBpZiAocHJvdG8uYXBwbGllZFRheGVzKSB7bS5hcHBsaWVkVGF4ZXMgPSBwcm90by5hcHBsaWVkVGF4ZXMubWFwKEFwcGxpZWRUYXhSYXRlLmZyb21Qcm90byk7fVxuICAgICAgICBpZiAocHJvdG8uZGVmYXVsdFRheFJhdGVzKSB7bS5kZWZhdWx0VGF4UmF0ZXMgPSBwcm90by5kZWZhdWx0VGF4UmF0ZXMubWFwKFRheFJhdGUuZnJvbVByb3RvKTt9XG4gICAgICAgIGlmIChwcm90by5hcHBsaWVkQnVuZGxlcykge20uYXBwbGllZEJ1bmRsZXMgPSBwcm90by5hcHBsaWVkQnVuZGxlcy5tYXAoQXBwbGllZEJ1bmRsZS5mcm9tUHJvdG8pO31cbiAgICAgICAgaWYgKHByb3RvLmFtb3VudERpc2NvdW50KSB7bS5hbW91bnREaXNjb3VudCA9IHBhcnNlSW50KHByb3RvLmFtb3VudERpc2NvdW50LCAxMCk7fVxuICAgICAgICBpZiAocHJvdG8udm9pZGVkKSB7bS52b2lkZWQgPSBuZXcgRGF0ZShwcm90by52b2lkZWQpO31cbiAgICAgICAgaWYgKHByb3RvLmN1c3RvbWVyQWRkcmVzcykge20uY3VzdG9tZXJBZGRyZXNzID0gSW52b2ljZUN1c3RvbWVyQWRkcmVzcy5mcm9tUHJvdG8ocHJvdG8uY3VzdG9tZXJBZGRyZXNzKTt9XG4gICAgICAgIHJldHVybiBtO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKGt3YXJncz86IGkuSW52b2ljZUludGVyZmFjZSkge1xuICAgICAgICBpZiAoIWt3YXJncykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywga3dhcmdzKTtcbiAgICB9XG5cbiAgICB0b0FwaUpzb24oKTogb2JqZWN0IHtcbiAgICAgICAgY29uc3QgdG9SZXR1cm46IHtcbiAgICAgICAgICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgICAgICAgfSA9IHt9O1xuICAgICAgICBcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLm1lcmNoYW50SWQgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ21lcmNoYW50SWQnXSA9IHRoaXMubWVyY2hhbnRJZDt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5pZCAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnaWQnXSA9IHRoaXMuaWQ7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMubnVtYmVyICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydudW1iZXInXSA9IHRoaXMubnVtYmVyO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmN1c3RvbWVySWQgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2N1c3RvbWVySWQnXSA9IHRoaXMuY3VzdG9tZXJJZDt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5zdGF0dXMgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ3N0YXR1cyddID0gdGhpcy5zdGF0dXM7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuc3VidG90YWwgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ3N1YnRvdGFsJ10gPSB0aGlzLnN1YnRvdGFsO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnRvdGFsICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWyd0b3RhbCddID0gdGhpcy50b3RhbDt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5hbW91bnRQYWlkICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydhbW91bnRQYWlkJ10gPSB0aGlzLmFtb3VudFBhaWQ7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuaXNzdWVkICE9PSAndW5kZWZpbmVkJyAmJiB0aGlzLmlzc3VlZCAhPT0gbnVsbCkge3RvUmV0dXJuWydpc3N1ZWQnXSA9ICd0b0FwaUpzb24nIGluIHRoaXMuaXNzdWVkID8gKHRoaXMuaXNzdWVkIGFzIGFueSkudG9BcGlKc29uKCkgOiB0aGlzLmlzc3VlZDt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5kdWUgIT09ICd1bmRlZmluZWQnICYmIHRoaXMuZHVlICE9PSBudWxsKSB7dG9SZXR1cm5bJ2R1ZSddID0gJ3RvQXBpSnNvbicgaW4gdGhpcy5kdWUgPyAodGhpcy5kdWUgYXMgYW55KS50b0FwaUpzb24oKSA6IHRoaXMuZHVlO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmNyZWF0ZWQgIT09ICd1bmRlZmluZWQnICYmIHRoaXMuY3JlYXRlZCAhPT0gbnVsbCkge3RvUmV0dXJuWydjcmVhdGVkJ10gPSAndG9BcGlKc29uJyBpbiB0aGlzLmNyZWF0ZWQgPyAodGhpcy5jcmVhdGVkIGFzIGFueSkudG9BcGlKc29uKCkgOiB0aGlzLmNyZWF0ZWQ7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMudXBkYXRlZCAhPT0gJ3VuZGVmaW5lZCcgJiYgdGhpcy51cGRhdGVkICE9PSBudWxsKSB7dG9SZXR1cm5bJ3VwZGF0ZWQnXSA9ICd0b0FwaUpzb24nIGluIHRoaXMudXBkYXRlZCA/ICh0aGlzLnVwZGF0ZWQgYXMgYW55KS50b0FwaUpzb24oKSA6IHRoaXMudXBkYXRlZDt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5pdGVtcyAhPT0gJ3VuZGVmaW5lZCcgJiYgdGhpcy5pdGVtcyAhPT0gbnVsbCkge3RvUmV0dXJuWydpdGVtcyddID0gJ3RvQXBpSnNvbicgaW4gdGhpcy5pdGVtcyA/ICh0aGlzLml0ZW1zIGFzIGFueSkudG9BcGlKc29uKCkgOiB0aGlzLml0ZW1zO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmN1cnJlbmN5ICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydjdXJyZW5jeSddID0gdGhpcy5jdXJyZW5jeTt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5wYWlkICE9PSAndW5kZWZpbmVkJyAmJiB0aGlzLnBhaWQgIT09IG51bGwpIHt0b1JldHVyblsncGFpZCddID0gJ3RvQXBpSnNvbicgaW4gdGhpcy5wYWlkID8gKHRoaXMucGFpZCBhcyBhbnkpLnRvQXBpSnNvbigpIDogdGhpcy5wYWlkO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLm9yZGVySWQgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ29yZGVySWQnXSA9IHRoaXMub3JkZXJJZDt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5hbW91bnRUYXggIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2Ftb3VudFRheCddID0gdGhpcy5hbW91bnRUYXg7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuYXBwbGllZFRheGVzICE9PSAndW5kZWZpbmVkJyAmJiB0aGlzLmFwcGxpZWRUYXhlcyAhPT0gbnVsbCkge3RvUmV0dXJuWydhcHBsaWVkVGF4ZXMnXSA9ICd0b0FwaUpzb24nIGluIHRoaXMuYXBwbGllZFRheGVzID8gKHRoaXMuYXBwbGllZFRheGVzIGFzIGFueSkudG9BcGlKc29uKCkgOiB0aGlzLmFwcGxpZWRUYXhlczt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5kZWZhdWx0VGF4UmF0ZXMgIT09ICd1bmRlZmluZWQnICYmIHRoaXMuZGVmYXVsdFRheFJhdGVzICE9PSBudWxsKSB7dG9SZXR1cm5bJ2RlZmF1bHRUYXhSYXRlcyddID0gJ3RvQXBpSnNvbicgaW4gdGhpcy5kZWZhdWx0VGF4UmF0ZXMgPyAodGhpcy5kZWZhdWx0VGF4UmF0ZXMgYXMgYW55KS50b0FwaUpzb24oKSA6IHRoaXMuZGVmYXVsdFRheFJhdGVzO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmFwcGxpZWRCdW5kbGVzICE9PSAndW5kZWZpbmVkJyAmJiB0aGlzLmFwcGxpZWRCdW5kbGVzICE9PSBudWxsKSB7dG9SZXR1cm5bJ2FwcGxpZWRCdW5kbGVzJ10gPSAndG9BcGlKc29uJyBpbiB0aGlzLmFwcGxpZWRCdW5kbGVzID8gKHRoaXMuYXBwbGllZEJ1bmRsZXMgYXMgYW55KS50b0FwaUpzb24oKSA6IHRoaXMuYXBwbGllZEJ1bmRsZXM7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuYW1vdW50RGlzY291bnQgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2Ftb3VudERpc2NvdW50J10gPSB0aGlzLmFtb3VudERpc2NvdW50O31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmN1c3RvbWVyTmFtZSAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnY3VzdG9tZXJOYW1lJ10gPSB0aGlzLmN1c3RvbWVyTmFtZTt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5vcmlnaW4gIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ29yaWdpbiddID0gdGhpcy5vcmlnaW47fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuY29sbGVjdGlvbk1ldGhvZCAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnY29sbGVjdGlvbk1ldGhvZCddID0gdGhpcy5jb2xsZWN0aW9uTWV0aG9kO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmNvbnRhY3RJZCAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnY29udGFjdElkJ10gPSB0aGlzLmNvbnRhY3RJZDt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5tZW1vICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydtZW1vJ10gPSB0aGlzLm1lbW87fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMudm9pZGVkICE9PSAndW5kZWZpbmVkJyAmJiB0aGlzLnZvaWRlZCAhPT0gbnVsbCkge3RvUmV0dXJuWyd2b2lkZWQnXSA9ICd0b0FwaUpzb24nIGluIHRoaXMudm9pZGVkID8gKHRoaXMudm9pZGVkIGFzIGFueSkudG9BcGlKc29uKCkgOiB0aGlzLnZvaWRlZDt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5kZWZhdWx0UGF5bWVudE1ldGhvZCAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnZGVmYXVsdFBheW1lbnRNZXRob2QnXSA9IHRoaXMuZGVmYXVsdFBheW1lbnRNZXRob2Q7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuY3VzdG9tZXJBZGRyZXNzICE9PSAndW5kZWZpbmVkJyAmJiB0aGlzLmN1c3RvbWVyQWRkcmVzcyAhPT0gbnVsbCkge3RvUmV0dXJuWydjdXN0b21lckFkZHJlc3MnXSA9ICd0b0FwaUpzb24nIGluIHRoaXMuY3VzdG9tZXJBZGRyZXNzID8gKHRoaXMuY3VzdG9tZXJBZGRyZXNzIGFzIGFueSkudG9BcGlKc29uKCkgOiB0aGlzLmN1c3RvbWVyQWRkcmVzczt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5leHRlcm5hbEN1c3RvbWVySWRlbnRpZmllciAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnZXh0ZXJuYWxDdXN0b21lcklkZW50aWZpZXInXSA9IHRoaXMuZXh0ZXJuYWxDdXN0b21lcklkZW50aWZpZXI7fVxuICAgICAgICByZXR1cm4gdG9SZXR1cm47XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgSW52b2ljZUl0ZW0gaW1wbGVtZW50cyBpLkludm9pY2VJdGVtSW50ZXJmYWNlIHtcbiAgICBpZDogc3RyaW5nO1xuICAgIHNrdTogc3RyaW5nO1xuICAgIGFtb3VudDogbnVtYmVyO1xuICAgIHF1YW50aXR5OiBudW1iZXI7XG4gICAgZGVzY3JpcHRpb246IHN0cmluZztcbiAgICB0b3RhbDogbnVtYmVyO1xuICAgIGFwcGxpZWRUYXhlczogQXBwbGllZFRheFJhdGVbXTtcbiAgICB0YXhSYXRlczogVGF4UmF0ZVtdO1xuICAgIGJ1bmRsZUlkOiBzdHJpbmc7XG4gICAgZGlzY291bnRzOiBBcHBsaWVkRGlzY291bnRbXTtcbiAgICBzdWJ0b3RhbDogbnVtYmVyO1xuICAgIGJ1bmRsZUluc3RhbmNlSWQ6IHN0cmluZztcblxuICAgIHN0YXRpYyBmcm9tUHJvdG8ocHJvdG86IGFueSk6IEludm9pY2VJdGVtIHtcbiAgICAgICAgbGV0IG0gPSBuZXcgSW52b2ljZUl0ZW0oKTtcbiAgICAgICAgbSA9IE9iamVjdC5hc3NpZ24obSwgcHJvdG8pO1xuICAgICAgICBpZiAocHJvdG8uYW1vdW50KSB7bS5hbW91bnQgPSBwYXJzZUludChwcm90by5hbW91bnQsIDEwKTt9XG4gICAgICAgIGlmIChwcm90by50b3RhbCkge20udG90YWwgPSBwYXJzZUludChwcm90by50b3RhbCwgMTApO31cbiAgICAgICAgaWYgKHByb3RvLmFwcGxpZWRUYXhlcykge20uYXBwbGllZFRheGVzID0gcHJvdG8uYXBwbGllZFRheGVzLm1hcChBcHBsaWVkVGF4UmF0ZS5mcm9tUHJvdG8pO31cbiAgICAgICAgaWYgKHByb3RvLnRheFJhdGVzKSB7bS50YXhSYXRlcyA9IHByb3RvLnRheFJhdGVzLm1hcChUYXhSYXRlLmZyb21Qcm90byk7fVxuICAgICAgICBpZiAocHJvdG8uZGlzY291bnRzKSB7bS5kaXNjb3VudHMgPSBwcm90by5kaXNjb3VudHMubWFwKEFwcGxpZWREaXNjb3VudC5mcm9tUHJvdG8pO31cbiAgICAgICAgaWYgKHByb3RvLnN1YnRvdGFsKSB7bS5zdWJ0b3RhbCA9IHBhcnNlSW50KHByb3RvLnN1YnRvdGFsLCAxMCk7fVxuICAgICAgICByZXR1cm4gbTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihrd2FyZ3M/OiBpLkludm9pY2VJdGVtSW50ZXJmYWNlKSB7XG4gICAgICAgIGlmICgha3dhcmdzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLCBrd2FyZ3MpO1xuICAgIH1cblxuICAgIHRvQXBpSnNvbigpOiBvYmplY3Qge1xuICAgICAgICBjb25zdCB0b1JldHVybjoge1xuICAgICAgICAgICAgW2tleTogc3RyaW5nXTogYW55O1xuICAgICAgICB9ID0ge307XG4gICAgICAgIFxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuaWQgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2lkJ10gPSB0aGlzLmlkO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnNrdSAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnc2t1J10gPSB0aGlzLnNrdTt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5hbW91bnQgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2Ftb3VudCddID0gdGhpcy5hbW91bnQ7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMucXVhbnRpdHkgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ3F1YW50aXR5J10gPSB0aGlzLnF1YW50aXR5O31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmRlc2NyaXB0aW9uICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydkZXNjcmlwdGlvbiddID0gdGhpcy5kZXNjcmlwdGlvbjt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy50b3RhbCAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsndG90YWwnXSA9IHRoaXMudG90YWw7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuYXBwbGllZFRheGVzICE9PSAndW5kZWZpbmVkJyAmJiB0aGlzLmFwcGxpZWRUYXhlcyAhPT0gbnVsbCkge3RvUmV0dXJuWydhcHBsaWVkVGF4ZXMnXSA9ICd0b0FwaUpzb24nIGluIHRoaXMuYXBwbGllZFRheGVzID8gKHRoaXMuYXBwbGllZFRheGVzIGFzIGFueSkudG9BcGlKc29uKCkgOiB0aGlzLmFwcGxpZWRUYXhlczt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy50YXhSYXRlcyAhPT0gJ3VuZGVmaW5lZCcgJiYgdGhpcy50YXhSYXRlcyAhPT0gbnVsbCkge3RvUmV0dXJuWyd0YXhSYXRlcyddID0gJ3RvQXBpSnNvbicgaW4gdGhpcy50YXhSYXRlcyA/ICh0aGlzLnRheFJhdGVzIGFzIGFueSkudG9BcGlKc29uKCkgOiB0aGlzLnRheFJhdGVzO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmJ1bmRsZUlkICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydidW5kbGVJZCddID0gdGhpcy5idW5kbGVJZDt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5kaXNjb3VudHMgIT09ICd1bmRlZmluZWQnICYmIHRoaXMuZGlzY291bnRzICE9PSBudWxsKSB7dG9SZXR1cm5bJ2Rpc2NvdW50cyddID0gJ3RvQXBpSnNvbicgaW4gdGhpcy5kaXNjb3VudHMgPyAodGhpcy5kaXNjb3VudHMgYXMgYW55KS50b0FwaUpzb24oKSA6IHRoaXMuZGlzY291bnRzO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnN1YnRvdGFsICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydzdWJ0b3RhbCddID0gdGhpcy5zdWJ0b3RhbDt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5idW5kbGVJbnN0YW5jZUlkICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydidW5kbGVJbnN0YW5jZUlkJ10gPSB0aGlzLmJ1bmRsZUluc3RhbmNlSWQ7fVxuICAgICAgICByZXR1cm4gdG9SZXR1cm47XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgTGlzdEludm9pY2VzUmVxdWVzdCBpbXBsZW1lbnRzIGkuTGlzdEludm9pY2VzUmVxdWVzdEludGVyZmFjZSB7XG4gICAgZmlsdGVyczogTGlzdEludm9pY2VzUmVxdWVzdEZpbHRlcnM7XG4gICAgcGFnaW5nT3B0aW9uczogUGFnZWRSZXF1ZXN0T3B0aW9ucztcblxuICAgIHN0YXRpYyBmcm9tUHJvdG8ocHJvdG86IGFueSk6IExpc3RJbnZvaWNlc1JlcXVlc3Qge1xuICAgICAgICBsZXQgbSA9IG5ldyBMaXN0SW52b2ljZXNSZXF1ZXN0KCk7XG4gICAgICAgIG0gPSBPYmplY3QuYXNzaWduKG0sIHByb3RvKTtcbiAgICAgICAgaWYgKHByb3RvLmZpbHRlcnMpIHttLmZpbHRlcnMgPSBMaXN0SW52b2ljZXNSZXF1ZXN0RmlsdGVycy5mcm9tUHJvdG8ocHJvdG8uZmlsdGVycyk7fVxuICAgICAgICBpZiAocHJvdG8ucGFnaW5nT3B0aW9ucykge20ucGFnaW5nT3B0aW9ucyA9IFBhZ2VkUmVxdWVzdE9wdGlvbnMuZnJvbVByb3RvKHByb3RvLnBhZ2luZ09wdGlvbnMpO31cbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Ioa3dhcmdzPzogaS5MaXN0SW52b2ljZXNSZXF1ZXN0SW50ZXJmYWNlKSB7XG4gICAgICAgIGlmICgha3dhcmdzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLCBrd2FyZ3MpO1xuICAgIH1cblxuICAgIHRvQXBpSnNvbigpOiBvYmplY3Qge1xuICAgICAgICBjb25zdCB0b1JldHVybjoge1xuICAgICAgICAgICAgW2tleTogc3RyaW5nXTogYW55O1xuICAgICAgICB9ID0ge307XG4gICAgICAgIFxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuZmlsdGVycyAhPT0gJ3VuZGVmaW5lZCcgJiYgdGhpcy5maWx0ZXJzICE9PSBudWxsKSB7dG9SZXR1cm5bJ2ZpbHRlcnMnXSA9ICd0b0FwaUpzb24nIGluIHRoaXMuZmlsdGVycyA/ICh0aGlzLmZpbHRlcnMgYXMgYW55KS50b0FwaUpzb24oKSA6IHRoaXMuZmlsdGVyczt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5wYWdpbmdPcHRpb25zICE9PSAndW5kZWZpbmVkJyAmJiB0aGlzLnBhZ2luZ09wdGlvbnMgIT09IG51bGwpIHt0b1JldHVyblsncGFnaW5nT3B0aW9ucyddID0gJ3RvQXBpSnNvbicgaW4gdGhpcy5wYWdpbmdPcHRpb25zID8gKHRoaXMucGFnaW5nT3B0aW9ucyBhcyBhbnkpLnRvQXBpSnNvbigpIDogdGhpcy5wYWdpbmdPcHRpb25zO31cbiAgICAgICAgcmV0dXJuIHRvUmV0dXJuO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIExpc3RJbnZvaWNlc1Jlc3BvbnNlIGltcGxlbWVudHMgaS5MaXN0SW52b2ljZXNSZXNwb25zZUludGVyZmFjZSB7XG4gICAgaW52b2ljZXM6IEludm9pY2VbXTtcbiAgICBwYWdpbmdNZXRhZGF0YTogUGFnZWRSZXNwb25zZU1ldGFkYXRhO1xuXG4gICAgc3RhdGljIGZyb21Qcm90byhwcm90bzogYW55KTogTGlzdEludm9pY2VzUmVzcG9uc2Uge1xuICAgICAgICBsZXQgbSA9IG5ldyBMaXN0SW52b2ljZXNSZXNwb25zZSgpO1xuICAgICAgICBtID0gT2JqZWN0LmFzc2lnbihtLCBwcm90byk7XG4gICAgICAgIGlmIChwcm90by5pbnZvaWNlcykge20uaW52b2ljZXMgPSBwcm90by5pbnZvaWNlcy5tYXAoSW52b2ljZS5mcm9tUHJvdG8pO31cbiAgICAgICAgaWYgKHByb3RvLnBhZ2luZ01ldGFkYXRhKSB7bS5wYWdpbmdNZXRhZGF0YSA9IFBhZ2VkUmVzcG9uc2VNZXRhZGF0YS5mcm9tUHJvdG8ocHJvdG8ucGFnaW5nTWV0YWRhdGEpO31cbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Ioa3dhcmdzPzogaS5MaXN0SW52b2ljZXNSZXNwb25zZUludGVyZmFjZSkge1xuICAgICAgICBpZiAoIWt3YXJncykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywga3dhcmdzKTtcbiAgICB9XG5cbiAgICB0b0FwaUpzb24oKTogb2JqZWN0IHtcbiAgICAgICAgY29uc3QgdG9SZXR1cm46IHtcbiAgICAgICAgICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgICAgICAgfSA9IHt9O1xuICAgICAgICBcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmludm9pY2VzICE9PSAndW5kZWZpbmVkJyAmJiB0aGlzLmludm9pY2VzICE9PSBudWxsKSB7dG9SZXR1cm5bJ2ludm9pY2VzJ10gPSAndG9BcGlKc29uJyBpbiB0aGlzLmludm9pY2VzID8gKHRoaXMuaW52b2ljZXMgYXMgYW55KS50b0FwaUpzb24oKSA6IHRoaXMuaW52b2ljZXM7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMucGFnaW5nTWV0YWRhdGEgIT09ICd1bmRlZmluZWQnICYmIHRoaXMucGFnaW5nTWV0YWRhdGEgIT09IG51bGwpIHt0b1JldHVyblsncGFnaW5nTWV0YWRhdGEnXSA9ICd0b0FwaUpzb24nIGluIHRoaXMucGFnaW5nTWV0YWRhdGEgPyAodGhpcy5wYWdpbmdNZXRhZGF0YSBhcyBhbnkpLnRvQXBpSnNvbigpIDogdGhpcy5wYWdpbmdNZXRhZGF0YTt9XG4gICAgICAgIHJldHVybiB0b1JldHVybjtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBQYXlJbnZvaWNlUmVxdWVzdCBpbXBsZW1lbnRzIGkuUGF5SW52b2ljZVJlcXVlc3RJbnRlcmZhY2Uge1xuICAgIG1lcmNoYW50SWQ6IHN0cmluZztcbiAgICBpbnZvaWNlSWQ6IHN0cmluZztcblxuICAgIHN0YXRpYyBmcm9tUHJvdG8ocHJvdG86IGFueSk6IFBheUludm9pY2VSZXF1ZXN0IHtcbiAgICAgICAgbGV0IG0gPSBuZXcgUGF5SW52b2ljZVJlcXVlc3QoKTtcbiAgICAgICAgbSA9IE9iamVjdC5hc3NpZ24obSwgcHJvdG8pO1xuICAgICAgICByZXR1cm4gbTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihrd2FyZ3M/OiBpLlBheUludm9pY2VSZXF1ZXN0SW50ZXJmYWNlKSB7XG4gICAgICAgIGlmICgha3dhcmdzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLCBrd2FyZ3MpO1xuICAgIH1cblxuICAgIHRvQXBpSnNvbigpOiBvYmplY3Qge1xuICAgICAgICBjb25zdCB0b1JldHVybjoge1xuICAgICAgICAgICAgW2tleTogc3RyaW5nXTogYW55O1xuICAgICAgICB9ID0ge307XG4gICAgICAgIFxuICAgICAgICBpZiAodHlwZW9mIHRoaXMubWVyY2hhbnRJZCAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnbWVyY2hhbnRJZCddID0gdGhpcy5tZXJjaGFudElkO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmludm9pY2VJZCAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnaW52b2ljZUlkJ10gPSB0aGlzLmludm9pY2VJZDt9XG4gICAgICAgIHJldHVybiB0b1JldHVybjtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBQYXltZW50TGlua0l0ZW0gaW1wbGVtZW50cyBpLlBheW1lbnRMaW5rSXRlbUludGVyZmFjZSB7XG4gICAgYW1vdW50OiBudW1iZXI7XG4gICAgcXVhbnRpdHk6IG51bWJlcjtcbiAgICBkZXNjcmlwdGlvbjogc3RyaW5nO1xuXG4gICAgc3RhdGljIGZyb21Qcm90byhwcm90bzogYW55KTogUGF5bWVudExpbmtJdGVtIHtcbiAgICAgICAgbGV0IG0gPSBuZXcgUGF5bWVudExpbmtJdGVtKCk7XG4gICAgICAgIG0gPSBPYmplY3QuYXNzaWduKG0sIHByb3RvKTtcbiAgICAgICAgaWYgKHByb3RvLmFtb3VudCkge20uYW1vdW50ID0gcGFyc2VJbnQocHJvdG8uYW1vdW50LCAxMCk7fVxuICAgICAgICByZXR1cm4gbTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihrd2FyZ3M/OiBpLlBheW1lbnRMaW5rSXRlbUludGVyZmFjZSkge1xuICAgICAgICBpZiAoIWt3YXJncykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywga3dhcmdzKTtcbiAgICB9XG5cbiAgICB0b0FwaUpzb24oKTogb2JqZWN0IHtcbiAgICAgICAgY29uc3QgdG9SZXR1cm46IHtcbiAgICAgICAgICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgICAgICAgfSA9IHt9O1xuICAgICAgICBcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmFtb3VudCAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnYW1vdW50J10gPSB0aGlzLmFtb3VudDt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5xdWFudGl0eSAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsncXVhbnRpdHknXSA9IHRoaXMucXVhbnRpdHk7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuZGVzY3JpcHRpb24gIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2Rlc2NyaXB0aW9uJ10gPSB0aGlzLmRlc2NyaXB0aW9uO31cbiAgICAgICAgcmV0dXJuIHRvUmV0dXJuO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIFJlbW92ZUJ1bmRsZVJlcXVlc3QgaW1wbGVtZW50cyBpLlJlbW92ZUJ1bmRsZVJlcXVlc3RJbnRlcmZhY2Uge1xuICAgIGludm9pY2VJZDogc3RyaW5nO1xuICAgIG1lcmNoYW50SWQ6IHN0cmluZztcbiAgICBidW5kbGVJZDogc3RyaW5nO1xuICAgIGJ1bmRsZUluc3RhbmNlSWQ6IHN0cmluZztcblxuICAgIHN0YXRpYyBmcm9tUHJvdG8ocHJvdG86IGFueSk6IFJlbW92ZUJ1bmRsZVJlcXVlc3Qge1xuICAgICAgICBsZXQgbSA9IG5ldyBSZW1vdmVCdW5kbGVSZXF1ZXN0KCk7XG4gICAgICAgIG0gPSBPYmplY3QuYXNzaWduKG0sIHByb3RvKTtcbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Ioa3dhcmdzPzogaS5SZW1vdmVCdW5kbGVSZXF1ZXN0SW50ZXJmYWNlKSB7XG4gICAgICAgIGlmICgha3dhcmdzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLCBrd2FyZ3MpO1xuICAgIH1cblxuICAgIHRvQXBpSnNvbigpOiBvYmplY3Qge1xuICAgICAgICBjb25zdCB0b1JldHVybjoge1xuICAgICAgICAgICAgW2tleTogc3RyaW5nXTogYW55O1xuICAgICAgICB9ID0ge307XG4gICAgICAgIFxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuaW52b2ljZUlkICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydpbnZvaWNlSWQnXSA9IHRoaXMuaW52b2ljZUlkO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLm1lcmNoYW50SWQgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ21lcmNoYW50SWQnXSA9IHRoaXMubWVyY2hhbnRJZDt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5idW5kbGVJZCAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnYnVuZGxlSWQnXSA9IHRoaXMuYnVuZGxlSWQ7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuYnVuZGxlSW5zdGFuY2VJZCAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnYnVuZGxlSW5zdGFuY2VJZCddID0gdGhpcy5idW5kbGVJbnN0YW5jZUlkO31cbiAgICAgICAgcmV0dXJuIHRvUmV0dXJuO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIFJlbW92ZUJ1bmRsZVJlc3BvbnNlIGltcGxlbWVudHMgaS5SZW1vdmVCdW5kbGVSZXNwb25zZUludGVyZmFjZSB7XG4gICAgaW52b2ljZTogSW52b2ljZTtcblxuICAgIHN0YXRpYyBmcm9tUHJvdG8ocHJvdG86IGFueSk6IFJlbW92ZUJ1bmRsZVJlc3BvbnNlIHtcbiAgICAgICAgbGV0IG0gPSBuZXcgUmVtb3ZlQnVuZGxlUmVzcG9uc2UoKTtcbiAgICAgICAgbSA9IE9iamVjdC5hc3NpZ24obSwgcHJvdG8pO1xuICAgICAgICBpZiAocHJvdG8uaW52b2ljZSkge20uaW52b2ljZSA9IEludm9pY2UuZnJvbVByb3RvKHByb3RvLmludm9pY2UpO31cbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Ioa3dhcmdzPzogaS5SZW1vdmVCdW5kbGVSZXNwb25zZUludGVyZmFjZSkge1xuICAgICAgICBpZiAoIWt3YXJncykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywga3dhcmdzKTtcbiAgICB9XG5cbiAgICB0b0FwaUpzb24oKTogb2JqZWN0IHtcbiAgICAgICAgY29uc3QgdG9SZXR1cm46IHtcbiAgICAgICAgICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgICAgICAgfSA9IHt9O1xuICAgICAgICBcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmludm9pY2UgIT09ICd1bmRlZmluZWQnICYmIHRoaXMuaW52b2ljZSAhPT0gbnVsbCkge3RvUmV0dXJuWydpbnZvaWNlJ10gPSAndG9BcGlKc29uJyBpbiB0aGlzLmludm9pY2UgPyAodGhpcy5pbnZvaWNlIGFzIGFueSkudG9BcGlKc29uKCkgOiB0aGlzLmludm9pY2U7fVxuICAgICAgICByZXR1cm4gdG9SZXR1cm47XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgU2VuZEludm9pY2VSZXF1ZXN0IGltcGxlbWVudHMgaS5TZW5kSW52b2ljZVJlcXVlc3RJbnRlcmZhY2Uge1xuICAgIG1lcmNoYW50SWQ6IHN0cmluZztcbiAgICBpbnZvaWNlSWQ6IHN0cmluZztcbiAgICBlbWFpbEFkZHJlc3Nlczogc3RyaW5nW107XG4gICAgbGFuZ3VhZ2VDb2RlOiBzdHJpbmc7XG5cbiAgICBzdGF0aWMgZnJvbVByb3RvKHByb3RvOiBhbnkpOiBTZW5kSW52b2ljZVJlcXVlc3Qge1xuICAgICAgICBsZXQgbSA9IG5ldyBTZW5kSW52b2ljZVJlcXVlc3QoKTtcbiAgICAgICAgbSA9IE9iamVjdC5hc3NpZ24obSwgcHJvdG8pO1xuICAgICAgICByZXR1cm4gbTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihrd2FyZ3M/OiBpLlNlbmRJbnZvaWNlUmVxdWVzdEludGVyZmFjZSkge1xuICAgICAgICBpZiAoIWt3YXJncykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywga3dhcmdzKTtcbiAgICB9XG5cbiAgICB0b0FwaUpzb24oKTogb2JqZWN0IHtcbiAgICAgICAgY29uc3QgdG9SZXR1cm46IHtcbiAgICAgICAgICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgICAgICAgfSA9IHt9O1xuICAgICAgICBcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLm1lcmNoYW50SWQgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ21lcmNoYW50SWQnXSA9IHRoaXMubWVyY2hhbnRJZDt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5pbnZvaWNlSWQgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2ludm9pY2VJZCddID0gdGhpcy5pbnZvaWNlSWQ7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuZW1haWxBZGRyZXNzZXMgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2VtYWlsQWRkcmVzc2VzJ10gPSB0aGlzLmVtYWlsQWRkcmVzc2VzO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmxhbmd1YWdlQ29kZSAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnbGFuZ3VhZ2VDb2RlJ10gPSB0aGlzLmxhbmd1YWdlQ29kZTt9XG4gICAgICAgIHJldHVybiB0b1JldHVybjtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBVcGRhdGVCdW5kbGVSZXF1ZXN0IGltcGxlbWVudHMgaS5VcGRhdGVCdW5kbGVSZXF1ZXN0SW50ZXJmYWNlIHtcbiAgICBtZXJjaGFudElkOiBzdHJpbmc7XG4gICAgaW52b2ljZUlkOiBzdHJpbmc7XG4gICAgYnVuZGxlSWQ6IHN0cmluZztcbiAgICBoaWRlQnVuZGxlSXRlbXM6IGJvb2xlYW47XG4gICAgYnVuZGxlSW5zdGFuY2VJZDogc3RyaW5nO1xuXG4gICAgc3RhdGljIGZyb21Qcm90byhwcm90bzogYW55KTogVXBkYXRlQnVuZGxlUmVxdWVzdCB7XG4gICAgICAgIGxldCBtID0gbmV3IFVwZGF0ZUJ1bmRsZVJlcXVlc3QoKTtcbiAgICAgICAgbSA9IE9iamVjdC5hc3NpZ24obSwgcHJvdG8pO1xuICAgICAgICByZXR1cm4gbTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihrd2FyZ3M/OiBpLlVwZGF0ZUJ1bmRsZVJlcXVlc3RJbnRlcmZhY2UpIHtcbiAgICAgICAgaWYgKCFrd2FyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGt3YXJncyk7XG4gICAgfVxuXG4gICAgdG9BcGlKc29uKCk6IG9iamVjdCB7XG4gICAgICAgIGNvbnN0IHRvUmV0dXJuOiB7XG4gICAgICAgICAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gICAgICAgIH0gPSB7fTtcbiAgICAgICAgXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5tZXJjaGFudElkICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydtZXJjaGFudElkJ10gPSB0aGlzLm1lcmNoYW50SWQ7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuaW52b2ljZUlkICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydpbnZvaWNlSWQnXSA9IHRoaXMuaW52b2ljZUlkO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmJ1bmRsZUlkICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydidW5kbGVJZCddID0gdGhpcy5idW5kbGVJZDt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5oaWRlQnVuZGxlSXRlbXMgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2hpZGVCdW5kbGVJdGVtcyddID0gdGhpcy5oaWRlQnVuZGxlSXRlbXM7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuYnVuZGxlSW5zdGFuY2VJZCAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnYnVuZGxlSW5zdGFuY2VJZCddID0gdGhpcy5idW5kbGVJbnN0YW5jZUlkO31cbiAgICAgICAgcmV0dXJuIHRvUmV0dXJuO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIFVwZGF0ZUJ1bmRsZVJlc3BvbnNlIGltcGxlbWVudHMgaS5VcGRhdGVCdW5kbGVSZXNwb25zZUludGVyZmFjZSB7XG4gICAgaW52b2ljZTogSW52b2ljZTtcblxuICAgIHN0YXRpYyBmcm9tUHJvdG8ocHJvdG86IGFueSk6IFVwZGF0ZUJ1bmRsZVJlc3BvbnNlIHtcbiAgICAgICAgbGV0IG0gPSBuZXcgVXBkYXRlQnVuZGxlUmVzcG9uc2UoKTtcbiAgICAgICAgbSA9IE9iamVjdC5hc3NpZ24obSwgcHJvdG8pO1xuICAgICAgICBpZiAocHJvdG8uaW52b2ljZSkge20uaW52b2ljZSA9IEludm9pY2UuZnJvbVByb3RvKHByb3RvLmludm9pY2UpO31cbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Ioa3dhcmdzPzogaS5VcGRhdGVCdW5kbGVSZXNwb25zZUludGVyZmFjZSkge1xuICAgICAgICBpZiAoIWt3YXJncykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywga3dhcmdzKTtcbiAgICB9XG5cbiAgICB0b0FwaUpzb24oKTogb2JqZWN0IHtcbiAgICAgICAgY29uc3QgdG9SZXR1cm46IHtcbiAgICAgICAgICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgICAgICAgfSA9IHt9O1xuICAgICAgICBcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmludm9pY2UgIT09ICd1bmRlZmluZWQnICYmIHRoaXMuaW52b2ljZSAhPT0gbnVsbCkge3RvUmV0dXJuWydpbnZvaWNlJ10gPSAndG9BcGlKc29uJyBpbiB0aGlzLmludm9pY2UgPyAodGhpcy5pbnZvaWNlIGFzIGFueSkudG9BcGlKc29uKCkgOiB0aGlzLmludm9pY2U7fVxuICAgICAgICByZXR1cm4gdG9SZXR1cm47XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgVXBkYXRlRGVmYXVsdFRheFJhdGVzUmVxdWVzdCBpbXBsZW1lbnRzIGkuVXBkYXRlRGVmYXVsdFRheFJhdGVzUmVxdWVzdEludGVyZmFjZSB7XG4gICAgaW52b2ljZUlkOiBzdHJpbmc7XG4gICAgbWVyY2hhbnRJZDogc3RyaW5nO1xuICAgIHRheFJhdGVJZHM6IHN0cmluZ1tdO1xuXG4gICAgc3RhdGljIGZyb21Qcm90byhwcm90bzogYW55KTogVXBkYXRlRGVmYXVsdFRheFJhdGVzUmVxdWVzdCB7XG4gICAgICAgIGxldCBtID0gbmV3IFVwZGF0ZURlZmF1bHRUYXhSYXRlc1JlcXVlc3QoKTtcbiAgICAgICAgbSA9IE9iamVjdC5hc3NpZ24obSwgcHJvdG8pO1xuICAgICAgICByZXR1cm4gbTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihrd2FyZ3M/OiBpLlVwZGF0ZURlZmF1bHRUYXhSYXRlc1JlcXVlc3RJbnRlcmZhY2UpIHtcbiAgICAgICAgaWYgKCFrd2FyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGt3YXJncyk7XG4gICAgfVxuXG4gICAgdG9BcGlKc29uKCk6IG9iamVjdCB7XG4gICAgICAgIGNvbnN0IHRvUmV0dXJuOiB7XG4gICAgICAgICAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gICAgICAgIH0gPSB7fTtcbiAgICAgICAgXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5pbnZvaWNlSWQgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2ludm9pY2VJZCddID0gdGhpcy5pbnZvaWNlSWQ7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMubWVyY2hhbnRJZCAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnbWVyY2hhbnRJZCddID0gdGhpcy5tZXJjaGFudElkO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnRheFJhdGVJZHMgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ3RheFJhdGVJZHMnXSA9IHRoaXMudGF4UmF0ZUlkczt9XG4gICAgICAgIHJldHVybiB0b1JldHVybjtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBVcGRhdGVEZWZhdWx0VGF4UmF0ZXNSZXNwb25zZSBpbXBsZW1lbnRzIGkuVXBkYXRlRGVmYXVsdFRheFJhdGVzUmVzcG9uc2VJbnRlcmZhY2Uge1xuICAgIGludm9pY2U6IEludm9pY2U7XG5cbiAgICBzdGF0aWMgZnJvbVByb3RvKHByb3RvOiBhbnkpOiBVcGRhdGVEZWZhdWx0VGF4UmF0ZXNSZXNwb25zZSB7XG4gICAgICAgIGxldCBtID0gbmV3IFVwZGF0ZURlZmF1bHRUYXhSYXRlc1Jlc3BvbnNlKCk7XG4gICAgICAgIG0gPSBPYmplY3QuYXNzaWduKG0sIHByb3RvKTtcbiAgICAgICAgaWYgKHByb3RvLmludm9pY2UpIHttLmludm9pY2UgPSBJbnZvaWNlLmZyb21Qcm90byhwcm90by5pbnZvaWNlKTt9XG4gICAgICAgIHJldHVybiBtO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKGt3YXJncz86IGkuVXBkYXRlRGVmYXVsdFRheFJhdGVzUmVzcG9uc2VJbnRlcmZhY2UpIHtcbiAgICAgICAgaWYgKCFrd2FyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGt3YXJncyk7XG4gICAgfVxuXG4gICAgdG9BcGlKc29uKCk6IG9iamVjdCB7XG4gICAgICAgIGNvbnN0IHRvUmV0dXJuOiB7XG4gICAgICAgICAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gICAgICAgIH0gPSB7fTtcbiAgICAgICAgXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5pbnZvaWNlICE9PSAndW5kZWZpbmVkJyAmJiB0aGlzLmludm9pY2UgIT09IG51bGwpIHt0b1JldHVyblsnaW52b2ljZSddID0gJ3RvQXBpSnNvbicgaW4gdGhpcy5pbnZvaWNlID8gKHRoaXMuaW52b2ljZSBhcyBhbnkpLnRvQXBpSnNvbigpIDogdGhpcy5pbnZvaWNlO31cbiAgICAgICAgcmV0dXJuIHRvUmV0dXJuO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIFVwZGF0ZUludm9pY2VSZXF1ZXN0IGltcGxlbWVudHMgaS5VcGRhdGVJbnZvaWNlUmVxdWVzdEludGVyZmFjZSB7XG4gICAgaW52b2ljZTogSW52b2ljZTtcbiAgICBmaWVsZE1hc2s6IEZpZWxkTWFzaztcblxuICAgIHN0YXRpYyBmcm9tUHJvdG8ocHJvdG86IGFueSk6IFVwZGF0ZUludm9pY2VSZXF1ZXN0IHtcbiAgICAgICAgbGV0IG0gPSBuZXcgVXBkYXRlSW52b2ljZVJlcXVlc3QoKTtcbiAgICAgICAgbSA9IE9iamVjdC5hc3NpZ24obSwgcHJvdG8pO1xuICAgICAgICBpZiAocHJvdG8uaW52b2ljZSkge20uaW52b2ljZSA9IEludm9pY2UuZnJvbVByb3RvKHByb3RvLmludm9pY2UpO31cbiAgICAgICAgaWYgKHByb3RvLmZpZWxkTWFzaykge20uZmllbGRNYXNrID0gRmllbGRNYXNrLmZyb21Qcm90byhwcm90by5maWVsZE1hc2spO31cbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Ioa3dhcmdzPzogaS5VcGRhdGVJbnZvaWNlUmVxdWVzdEludGVyZmFjZSkge1xuICAgICAgICBpZiAoIWt3YXJncykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywga3dhcmdzKTtcbiAgICB9XG5cbiAgICB0b0FwaUpzb24oKTogb2JqZWN0IHtcbiAgICAgICAgY29uc3QgdG9SZXR1cm46IHtcbiAgICAgICAgICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgICAgICAgfSA9IHt9O1xuICAgICAgICBcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmludm9pY2UgIT09ICd1bmRlZmluZWQnICYmIHRoaXMuaW52b2ljZSAhPT0gbnVsbCkge3RvUmV0dXJuWydpbnZvaWNlJ10gPSAndG9BcGlKc29uJyBpbiB0aGlzLmludm9pY2UgPyAodGhpcy5pbnZvaWNlIGFzIGFueSkudG9BcGlKc29uKCkgOiB0aGlzLmludm9pY2U7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuZmllbGRNYXNrICE9PSAndW5kZWZpbmVkJyAmJiB0aGlzLmZpZWxkTWFzayAhPT0gbnVsbCkge3RvUmV0dXJuWydmaWVsZE1hc2snXSA9ICd0b0FwaUpzb24nIGluIHRoaXMuZmllbGRNYXNrID8gKHRoaXMuZmllbGRNYXNrIGFzIGFueSkudG9BcGlKc29uKCkgOiB0aGlzLmZpZWxkTWFzazt9XG4gICAgICAgIHJldHVybiB0b1JldHVybjtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBVcGRhdGVJbnZvaWNlUmVzcG9uc2UgaW1wbGVtZW50cyBpLlVwZGF0ZUludm9pY2VSZXNwb25zZUludGVyZmFjZSB7XG4gICAgaW52b2ljZTogSW52b2ljZTtcblxuICAgIHN0YXRpYyBmcm9tUHJvdG8ocHJvdG86IGFueSk6IFVwZGF0ZUludm9pY2VSZXNwb25zZSB7XG4gICAgICAgIGxldCBtID0gbmV3IFVwZGF0ZUludm9pY2VSZXNwb25zZSgpO1xuICAgICAgICBtID0gT2JqZWN0LmFzc2lnbihtLCBwcm90byk7XG4gICAgICAgIGlmIChwcm90by5pbnZvaWNlKSB7bS5pbnZvaWNlID0gSW52b2ljZS5mcm9tUHJvdG8ocHJvdG8uaW52b2ljZSk7fVxuICAgICAgICByZXR1cm4gbTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihrd2FyZ3M/OiBpLlVwZGF0ZUludm9pY2VSZXNwb25zZUludGVyZmFjZSkge1xuICAgICAgICBpZiAoIWt3YXJncykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywga3dhcmdzKTtcbiAgICB9XG5cbiAgICB0b0FwaUpzb24oKTogb2JqZWN0IHtcbiAgICAgICAgY29uc3QgdG9SZXR1cm46IHtcbiAgICAgICAgICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgICAgICAgfSA9IHt9O1xuICAgICAgICBcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmludm9pY2UgIT09ICd1bmRlZmluZWQnICYmIHRoaXMuaW52b2ljZSAhPT0gbnVsbCkge3RvUmV0dXJuWydpbnZvaWNlJ10gPSAndG9BcGlKc29uJyBpbiB0aGlzLmludm9pY2UgPyAodGhpcy5pbnZvaWNlIGFzIGFueSkudG9BcGlKc29uKCkgOiB0aGlzLmludm9pY2U7fVxuICAgICAgICByZXR1cm4gdG9SZXR1cm47XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgVXBkYXRlTGluZUl0ZW1SZXF1ZXN0IGltcGxlbWVudHMgaS5VcGRhdGVMaW5lSXRlbVJlcXVlc3RJbnRlcmZhY2Uge1xuICAgIG1lcmNoYW50SWQ6IHN0cmluZztcbiAgICBpbnZvaWNlSWQ6IHN0cmluZztcbiAgICBpZDogc3RyaW5nO1xuICAgIHNrdTogc3RyaW5nO1xuICAgIGFtb3VudDogbnVtYmVyO1xuICAgIHF1YW50aXR5OiBudW1iZXI7XG4gICAgZGVzY3JpcHRpb246IHN0cmluZztcbiAgICB0YXhSYXRlczogc3RyaW5nW107XG5cbiAgICBzdGF0aWMgZnJvbVByb3RvKHByb3RvOiBhbnkpOiBVcGRhdGVMaW5lSXRlbVJlcXVlc3Qge1xuICAgICAgICBsZXQgbSA9IG5ldyBVcGRhdGVMaW5lSXRlbVJlcXVlc3QoKTtcbiAgICAgICAgbSA9IE9iamVjdC5hc3NpZ24obSwgcHJvdG8pO1xuICAgICAgICBpZiAocHJvdG8uYW1vdW50KSB7bS5hbW91bnQgPSBwYXJzZUludChwcm90by5hbW91bnQsIDEwKTt9XG4gICAgICAgIHJldHVybiBtO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKGt3YXJncz86IGkuVXBkYXRlTGluZUl0ZW1SZXF1ZXN0SW50ZXJmYWNlKSB7XG4gICAgICAgIGlmICgha3dhcmdzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLCBrd2FyZ3MpO1xuICAgIH1cblxuICAgIHRvQXBpSnNvbigpOiBvYmplY3Qge1xuICAgICAgICBjb25zdCB0b1JldHVybjoge1xuICAgICAgICAgICAgW2tleTogc3RyaW5nXTogYW55O1xuICAgICAgICB9ID0ge307XG4gICAgICAgIFxuICAgICAgICBpZiAodHlwZW9mIHRoaXMubWVyY2hhbnRJZCAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnbWVyY2hhbnRJZCddID0gdGhpcy5tZXJjaGFudElkO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmludm9pY2VJZCAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnaW52b2ljZUlkJ10gPSB0aGlzLmludm9pY2VJZDt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5pZCAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnaWQnXSA9IHRoaXMuaWQ7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuc2t1ICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydza3UnXSA9IHRoaXMuc2t1O31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmFtb3VudCAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnYW1vdW50J10gPSB0aGlzLmFtb3VudDt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5xdWFudGl0eSAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsncXVhbnRpdHknXSA9IHRoaXMucXVhbnRpdHk7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuZGVzY3JpcHRpb24gIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2Rlc2NyaXB0aW9uJ10gPSB0aGlzLmRlc2NyaXB0aW9uO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnRheFJhdGVzICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWyd0YXhSYXRlcyddID0gdGhpcy50YXhSYXRlczt9XG4gICAgICAgIHJldHVybiB0b1JldHVybjtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBVcGRhdGVMaW5lSXRlbVJlc3BvbnNlIGltcGxlbWVudHMgaS5VcGRhdGVMaW5lSXRlbVJlc3BvbnNlSW50ZXJmYWNlIHtcbiAgICBpbnZvaWNlOiBJbnZvaWNlO1xuXG4gICAgc3RhdGljIGZyb21Qcm90byhwcm90bzogYW55KTogVXBkYXRlTGluZUl0ZW1SZXNwb25zZSB7XG4gICAgICAgIGxldCBtID0gbmV3IFVwZGF0ZUxpbmVJdGVtUmVzcG9uc2UoKTtcbiAgICAgICAgbSA9IE9iamVjdC5hc3NpZ24obSwgcHJvdG8pO1xuICAgICAgICBpZiAocHJvdG8uaW52b2ljZSkge20uaW52b2ljZSA9IEludm9pY2UuZnJvbVByb3RvKHByb3RvLmludm9pY2UpO31cbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Ioa3dhcmdzPzogaS5VcGRhdGVMaW5lSXRlbVJlc3BvbnNlSW50ZXJmYWNlKSB7XG4gICAgICAgIGlmICgha3dhcmdzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLCBrd2FyZ3MpO1xuICAgIH1cblxuICAgIHRvQXBpSnNvbigpOiBvYmplY3Qge1xuICAgICAgICBjb25zdCB0b1JldHVybjoge1xuICAgICAgICAgICAgW2tleTogc3RyaW5nXTogYW55O1xuICAgICAgICB9ID0ge307XG4gICAgICAgIFxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuaW52b2ljZSAhPT0gJ3VuZGVmaW5lZCcgJiYgdGhpcy5pbnZvaWNlICE9PSBudWxsKSB7dG9SZXR1cm5bJ2ludm9pY2UnXSA9ICd0b0FwaUpzb24nIGluIHRoaXMuaW52b2ljZSA/ICh0aGlzLmludm9pY2UgYXMgYW55KS50b0FwaUpzb24oKSA6IHRoaXMuaW52b2ljZTt9XG4gICAgICAgIHJldHVybiB0b1JldHVybjtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBWb2lkSW52b2ljZVJlcXVlc3QgaW1wbGVtZW50cyBpLlZvaWRJbnZvaWNlUmVxdWVzdEludGVyZmFjZSB7XG4gICAgbWVyY2hhbnRJZDogc3RyaW5nO1xuICAgIGludm9pY2VJZDogc3RyaW5nO1xuXG4gICAgc3RhdGljIGZyb21Qcm90byhwcm90bzogYW55KTogVm9pZEludm9pY2VSZXF1ZXN0IHtcbiAgICAgICAgbGV0IG0gPSBuZXcgVm9pZEludm9pY2VSZXF1ZXN0KCk7XG4gICAgICAgIG0gPSBPYmplY3QuYXNzaWduKG0sIHByb3RvKTtcbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Ioa3dhcmdzPzogaS5Wb2lkSW52b2ljZVJlcXVlc3RJbnRlcmZhY2UpIHtcbiAgICAgICAgaWYgKCFrd2FyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGt3YXJncyk7XG4gICAgfVxuXG4gICAgdG9BcGlKc29uKCk6IG9iamVjdCB7XG4gICAgICAgIGNvbnN0IHRvUmV0dXJuOiB7XG4gICAgICAgICAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gICAgICAgIH0gPSB7fTtcbiAgICAgICAgXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5tZXJjaGFudElkICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydtZXJjaGFudElkJ10gPSB0aGlzLm1lcmNoYW50SWQ7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuaW52b2ljZUlkICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydpbnZvaWNlSWQnXSA9IHRoaXMuaW52b2ljZUlkO31cbiAgICAgICAgcmV0dXJuIHRvUmV0dXJuO1xuICAgIH1cbn1cblxuIl19
|