@pmcretail/mapper-library 0.0.13 → 0.0.15

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.
@@ -93,7 +93,7 @@ var RJMapperBuilderClass = /** @class */ (function () {
93
93
  (/** @type {?} */ (this)).rjObject['Header'].OriginatedBy.TerminalNumber = (/** @type {?} */ (this)).terminalNumber;
94
94
  (/** @type {?} */ (this)).rjObject['Header'].OriginatedBy.TransactionNumber = (/** @type {?} */ (this)).transactionNumber;
95
95
  (/** @type {?} */ (this)).rjObject['Header'].TaxMethodID = (/** @type {?} */ (this)).taxMethodId;
96
- (/** @type {?} */ (this)).rjObject['Header'].DynamicStockLookup = (/** @type {?} */ (this)).generateDynamicStockLookUp(); //todo
96
+ (/** @type {?} */ (this)).rjObject['Header'].DynamicStockLookup = (/** @type {?} */ (this)).generateDynamicStockLookUp();
97
97
  (/** @type {?} */ (this)).rjObject['Header'].BasketLanguageID = (/** @type {?} */ (this)).basketLanguageId; //todo
98
98
  (/** @type {?} */ (this)).rjObject['Header'].BasketCountryID = (/** @type {?} */ (this)).basketCountryId; //todo
99
99
  (/** @type {?} */ (this)).rjObject['Header'].BasketCurrencyID = (/** @type {?} */ (this)).transactionDocument.baseCurrency;
@@ -115,6 +115,11 @@ var RJMapperBuilderClass = /** @class */ (function () {
115
115
  */
116
116
  function () {
117
117
  var _this = this;
118
+ /** @type {?} */
119
+ var transactionDiscount = [];
120
+ if ((/** @type {?} */ (this)).transactionDocument.basket.transactionDiscount && (/** @type {?} */ (this)).transactionDocument.basket.transactionDiscount.length > 0) {
121
+ transactionDiscount = (/** @type {?} */ (this)).transactionDocument.basket.transactionDiscount;
122
+ }
118
123
  if ((/** @type {?} */ (this)).transactionDocument.type === TRANSACTION_TYPE.SALE) {
119
124
  (/** @type {?} */ (this)).rjObject['ProductSale'] = [];
120
125
  (/** @type {?} */ (this)).rjObject['ModifierItem'] = [];
@@ -140,7 +145,7 @@ var RJMapperBuilderClass = /** @class */ (function () {
140
145
  }
141
146
  }
142
147
  /** @type {?} */
143
- var data = (/** @type {?} */ (_this)).addProduct(element, (lineDiscount.length > 0 ? lineDiscount[0] : null));
148
+ var data = (/** @type {?} */ (_this)).addProduct(element, (lineDiscount.length > 0 ? lineDiscount[0] : null), (transactionDiscount.length > 0 ? transactionDiscount : null));
144
149
  (/** @type {?} */ (_this)).rjObject['ProductSale'].push(data);
145
150
  (/** @type {?} */ (_this)).getModifierItem(lineDiscount.length > 0 ? lineDiscount[0] : null, element.itemLineId);
146
151
  }));
@@ -160,7 +165,7 @@ var RJMapperBuilderClass = /** @class */ (function () {
160
165
  */
161
166
  function (element) {
162
167
  /** @type {?} */
163
- var data = (/** @type {?} */ (_this)).returnProduct(element, (element.hasOwnProperty('lineDiscount') ? element.lineDiscount : null));
168
+ var data = (/** @type {?} */ (_this)).returnProduct(element, (element.hasOwnProperty('lineDiscount') ? element.lineDiscount : null), (transactionDiscount.length > 0 ? transactionDiscount : null));
164
169
  (/** @type {?} */ (_this)).rjObject['ProductReturn'].push(data);
165
170
  (/** @type {?} */ (_this)).getModifierItem(element.lineDiscount, element.itemLineId);
166
171
  }));
@@ -176,7 +181,7 @@ var RJMapperBuilderClass = /** @class */ (function () {
176
181
  */
177
182
  function (element) {
178
183
  /** @type {?} */
179
- var data = (/** @type {?} */ (_this)).returnProduct(element, (element.hasOwnProperty('lineDiscount') ? element.lineDiscount : null));
184
+ var data = (/** @type {?} */ (_this)).returnProduct(element, (element.hasOwnProperty('lineDiscount') ? element.lineDiscount : null), (transactionDiscount.length > 0 ? transactionDiscount : null));
180
185
  /** @type {?} */
181
186
  var obj = {
182
187
  "OriginalReceiptSupplied": 0,
@@ -203,7 +208,7 @@ var RJMapperBuilderClass = /** @class */ (function () {
203
208
  function (element) {
204
209
  if (element.refundedQuantity > 0) {
205
210
  /** @type {?} */
206
- var returnProduct = (/** @type {?} */ (_this)).returnProduct(element, (element.hasOwnProperty('lineDiscount') ? element.lineDiscount : null));
211
+ var returnProduct = (/** @type {?} */ (_this)).returnProduct(element, (element.hasOwnProperty('lineDiscount') ? element.lineDiscount : null), (transactionDiscount.length > 0 ? transactionDiscount : null));
207
212
  /** @type {?} */
208
213
  var obj = {
209
214
  "OriginalReceiptSupplied": 0,
@@ -217,7 +222,7 @@ var RJMapperBuilderClass = /** @class */ (function () {
217
222
  }
218
223
  else {
219
224
  /** @type {?} */
220
- var addProduct = (/** @type {?} */ (_this)).addProduct(element, (element.hasOwnProperty('lineDiscount') ? element.lineDiscount : null));
225
+ var addProduct = (/** @type {?} */ (_this)).addProduct(element, (element.hasOwnProperty('lineDiscount') ? element.lineDiscount : null), (transactionDiscount.length > 0 ? transactionDiscount : null));
221
226
  (/** @type {?} */ (_this)).rjObject['ProductSale'].push(addProduct);
222
227
  }
223
228
  (/** @type {?} */ (_this)).getModifierItem(element.lineDiscount, element.itemLineId);
@@ -247,18 +252,24 @@ var RJMapperBuilderClass = /** @class */ (function () {
247
252
  function (element) {
248
253
  /** @type {?} */
249
254
  var obj = {};
250
- obj['XMLSchemaVersion'] = "1";
251
- obj['NetValue'] = (/** @type {?} */ (_this)).convertToString(element.discountAmount < 0 ? element.discountAmount : -element.discountAmount);
252
- obj['EffectiveNetValue'] = (/** @type {?} */ (_this)).convertToString(element.discountAmount < 0 ? element.discountAmount : -element.discountAmount);
255
+ obj['XMLSchemaVersion'] = (/** @type {?} */ (_this)).xmlSchemaVersion;
256
+ obj['NetValue'] = (/** @type {?} */ (_this)).convertToString(element.discountAmount * -1);
257
+ obj['EffectiveNetValue'] = (/** @type {?} */ (_this)).convertToString(element.discountAmount * -1);
253
258
  obj['Description'] = element.reasonDisplayText;
254
259
  obj['UserID'] = (/** @type {?} */ (_this)).transactionDocument.userName;
255
260
  obj['ReasonCodeID'] = element.reasonCode;
256
- obj['DiscountType'] = (/** @type {?} */ (_this)).convertToString(element.discountType.toUpperCase() == DISCOUNTTYPE.PERCENT.toUpperCase() ? 0 : 1); // todo - compare values
261
+ obj['DiscountType'] = (/** @type {?} */ (_this)).convertToString(element.discountType.toUpperCase() == DISCOUNTTYPE.PERCENT.toUpperCase() ? 0 : 1);
257
262
  obj['RoundingRule'] = (/** @type {?} */ (_this)).convertToString(2);
258
263
  obj['ModifiedLineNumber'] = element.itemLineIds;
259
264
  obj['LineNumber'] = (/** @type {?} */ (_this)).convertToString((/** @type {?} */ (_this)).generateLineNumber());
260
- // obj['DiscountedValue'] = obj['discountAmount'] // todo - confirm value before discount;
261
- // obj['DiscountPercentage'] = obj['discountAmount'] / 100 ; // todo - optional
265
+ obj['DiscountedValue'] = (/** @type {?} */ (_this)).transactionDocument.basketSummary.basketTotal + (/** @type {?} */ (_this)).transactionDocument.basketSummary.discountTotal;
266
+ if (element.discountType.toUpperCase() == DISCOUNTTYPE.PERCENT.toUpperCase()) {
267
+ obj['DiscountPercentage'] = (/** @type {?} */ (_this)).convertToString((element.discountAmount / (/** @type {?} */ (_this)).transactionDocument.basketSummary.basketTotal).toFixed(1));
268
+ }
269
+ if ((/** @type {?} */ (_this)).transactionDocument.type === 'REFUND') {
270
+ obj['NetValue'] = (/** @type {?} */ (_this)).convertToString(element.discountAmount < 0 ? -element.discountAmount : element.discountAmount);
271
+ obj['EffectiveNetValue'] = (/** @type {?} */ (_this)).convertToString(element.discountAmount < 0 ? -element.discountAmount : element.discountAmount);
272
+ }
262
273
  (/** @type {?} */ (_this)).rjObject['BasketDiscount'].push(obj);
263
274
  }));
264
275
  return (/** @type {?} */ (this));
@@ -336,51 +347,94 @@ var RJMapperBuilderClass = /** @class */ (function () {
336
347
  obj['TaxPercentage'] = element.VAT.toFixed(2); // todo
337
348
  (/** @type {?} */ (_this)).rjObject['Trailer']['TaxItem'].push(obj);
338
349
  }));
339
- // TODO: make Trailer object from promotion
340
- if ((/** @type {?} */ (this)).transactionDocument.basket.linePromotion.length > 0) {
350
+ if ((/** @type {?} */ (this)).transactionDocument.basket.linePromotion.length > 0 || (/** @type {?} */ (this)).transactionDocument.basket.linePromotion.length > 0) {
341
351
  (/** @type {?} */ (this)).rjObject['Trailer']['PromotionItem'] = [];
342
- (/** @type {?} */ (this)).transactionDocument.basket.linePromotion.forEach((/**
343
- * @param {?} element
344
- * @return {?}
345
- */
346
- function (element) {
347
- console.log('element', element);
348
- /** @type {?} */
349
- var obj = {};
350
- obj['PromotionID'] = element.promotionId;
351
- obj['PromotionSaving'] = element.promotionAmount < 0 ? element.promotionAmount : -element.promotionAmount;
352
- obj['PromotionQuantity'] = ""; // todo - not avaialble
353
- obj['PromotionDescription'] = element.displayText;
354
- obj['PromotionHit'] = {};
355
- obj['PromotionHit']['XMLSchemaVersion'] = (/** @type {?} */ (_this)).xmlSchemaVersion;
356
- obj['PromotionHit']['HitNumber'] = ""; // todo;
357
- obj['PromotionHit']['HitQuantity'] = ""; // todo;
358
- obj['PromotionHit']['HitSaving'] = ""; // todo;
359
- obj['PromotionHit']['PromotionTrigger'] = {};
360
- element.trigger.forEach((/**
361
- * @param {?} subElement
352
+ if ((/** @type {?} */ (this)).transactionDocument.basket.linePromotion.length > 0) {
353
+ (/** @type {?} */ (this)).transactionDocument.basket.linePromotion.forEach((/**
354
+ * @param {?} element
362
355
  * @return {?}
363
356
  */
364
- function (subElement) {
357
+ function (element) {
358
+ /** @type {?} */
359
+ var obj = {};
360
+ obj['PromotionID'] = element.promotionId;
361
+ obj['PromotionSaving'] = element.promotionAmount < 0 ? element.promotionAmount : -element.promotionAmount;
362
+ obj['PromotionQuantity'] = "1";
363
+ obj['PromotionDescription'] = element.displayText;
364
+ obj['PromotionHit'] = {};
365
+ obj['PromotionHit']['XMLSchemaVersion'] = (/** @type {?} */ (_this)).xmlSchemaVersion;
366
+ obj['PromotionHit']['HitNumber'] = "1";
367
+ obj['PromotionHit']['HitQuantity'] = "1";
368
+ obj['PromotionHit']['HitSaving'] = element.promotionAmount < 0 ? element.promotionAmount : -element.promotionAmount;
369
+ obj['PromotionHit']['PromotionTrigger'] = {};
365
370
  /** @type {?} */
366
371
  var product = (/** @type {?} */ (_this)).transactionDocument.basket.products.find((/**
367
372
  * @param {?} item
368
373
  * @return {?}
369
374
  */
370
- function (item) { return item.itemLineId == subElement.itemLineId; }));
375
+ function (item) { return item.itemLineId == element.itemLineId; }));
371
376
  obj['PromotionHit']['PromotionTrigger']['XMLSchemaVersion'] = (/** @type {?} */ (_this)).xmlSchemaVersion;
372
377
  obj['PromotionHit']['PromotionTrigger']['ProductID'] = product.SKU;
373
378
  obj['PromotionHit']['PromotionTrigger']['UnitValue'] = (/** @type {?} */ (_this)).convertToString(element.promotionLinePrice / product.quantity);
374
- obj['PromotionHit']['PromotionTrigger']['LineNumber'] = (/** @type {?} */ (_this)).convertToString(subElement.itemLineId);
375
- obj['PromotionHit']['PromotionTrigger']['Quantity'] = (/** @type {?} */ (_this)).convertToString(subElement.quantity.toFixed(1));
379
+ obj['PromotionHit']['PromotionTrigger']['LineNumber'] = (/** @type {?} */ (_this)).getNumber(product.SKU);
380
+ obj['PromotionHit']['PromotionTrigger']['Quantity'] = (/** @type {?} */ (_this)).convertToString(product.quantity.toFixed(1));
376
381
  obj['PromotionHit']['PromotionTrigger']['TaxCode'] = (/** @type {?} */ (_this)).transactionDocument.basket.taxBreakdown.taxLines.find((/**
377
382
  * @param {?} item
378
383
  * @return {?}
379
384
  */
380
385
  function (item) { return item.itemLineId == element.itemLineId; })).VATCode; // todo
386
+ (/** @type {?} */ (_this)).rjObject['Trailer']['PromotionItem'].push(obj);
381
387
  }));
382
- (/** @type {?} */ (_this)).rjObject['Trailer']['PromotionItem'].push(obj);
383
- }));
388
+ }
389
+ if ((/** @type {?} */ (this)).transactionDocument.basket.transactionPromotion.length > 0) {
390
+ (/** @type {?} */ (this)).transactionDocument.basket.transactionPromotion.forEach((/**
391
+ * @param {?} element
392
+ * @return {?}
393
+ */
394
+ function (element) {
395
+ /** @type {?} */
396
+ var obj = {};
397
+ console.log('element');
398
+ obj['PromotionID'] = element.promotionId;
399
+ obj['PromotionSaving'] = element.promotionAmount < 0 ? element.promotionAmount : -element.promotionAmount;
400
+ obj['PromotionQuantity'] = "1";
401
+ obj['PromotionDescription'] = element.displayText;
402
+ obj['PromotionHit'] = {};
403
+ obj['PromotionHit']['XMLSchemaVersion'] = (/** @type {?} */ (_this)).xmlSchemaVersion;
404
+ obj['PromotionHit']['HitNumber'] = "1";
405
+ obj['PromotionHit']['HitQuantity'] = "1";
406
+ obj['PromotionHit']['HitSaving'] = element.promotionAmount < 0 ? element.promotionAmount : -element.promotionAmount;
407
+ obj['PromotionHit']['PromotionTrigger'] = [];
408
+ (/** @type {?} */ (_this)).transactionDocument.basket.products.forEach((/**
409
+ * @param {?} product
410
+ * @return {?}
411
+ */
412
+ function (product) {
413
+ /** @type {?} */
414
+ var promotionTrigger = {};
415
+ element.itemLineIds.forEach((/**
416
+ * @param {?} itemLineId
417
+ * @return {?}
418
+ */
419
+ function (itemLineId) {
420
+ if (JSON.stringify(itemLineId) === product.itemLineId) {
421
+ promotionTrigger['XMLSchemaVersion'] = (/** @type {?} */ (_this)).xmlSchemaVersion;
422
+ promotionTrigger['ProductID'] = product.SKU;
423
+ promotionTrigger['UnitValue'] = (/** @type {?} */ (_this)).convertToString(element.promotionLinePrice / product.quantity);
424
+ promotionTrigger['LineNumber'] = (/** @type {?} */ (_this)).getNumber(product.SKU);
425
+ promotionTrigger['Quantity'] = (/** @type {?} */ (_this)).convertToString(product.quantity);
426
+ promotionTrigger['TaxCode'] = (/** @type {?} */ (_this)).transactionDocument.basket.taxBreakdown.taxLines.find((/**
427
+ * @param {?} item
428
+ * @return {?}
429
+ */
430
+ function (item) { return item.itemLineId == product.itemLineId; })).VATCode;
431
+ obj['PromotionHit']['PromotionTrigger'].push(promotionTrigger);
432
+ }
433
+ }));
434
+ }));
435
+ (/** @type {?} */ (_this)).rjObject['Trailer']['PromotionItem'].push(obj);
436
+ }));
437
+ }
384
438
  }
385
439
  return (/** @type {?} */ (this));
386
440
  };
@@ -396,64 +450,136 @@ var RJMapperBuilderClass = /** @class */ (function () {
396
450
  */
397
451
  function () {
398
452
  var _this = this;
399
- (/** @type {?} */ (this)).rjObject['CashTender'] = [];
400
453
  if ((/** @type {?} */ (this)).transactionDocument.paymentDetails && (/** @type {?} */ (this)).transactionDocument.paymentDetails.length > 0) {
401
454
  (/** @type {?} */ (this)).transactionDocument.paymentDetails.forEach((/**
402
455
  * @param {?} element
403
456
  * @return {?}
404
457
  */
405
458
  function (element) {
406
- if (element.paymentType.toUpperCase() === 'GIFT CARD') {
407
- /** @type {?} */
408
- var obj = {
409
- XMLSchemaVersion: (/** @type {?} */ (_this)).xmlSchemaVersion,
410
- LineNumber: (/** @type {?} */ (_this)).generateLineNumber(),
411
- NetValue: (/** @type {?} */ (_this)).convertToString(-1 * (/** @type {?} */ (_this)).removeDecimal((Math.round(element.amount)))),
412
- EffectiveNetValue: (/** @type {?} */ (_this)).convertToString(-1 * (/** @type {?} */ (_this)).removeDecimal((Math.round(element.amount)))),
413
- Description: (/** @type {?} */ (_this)).getDescription(element),
414
- DeviceID: (/** @type {?} */ (_this)).deviceId,
415
- UserID: (/** @type {?} */ (_this)).transactionDocument.userName,
416
- DateTimeCreated: (/** @type {?} */ (_this)).updatedAt,
417
- TenderType: element.externalTenderType ? element.externalTenderType : '',
418
- TenderSubType: element.externalSubTenderType ? element.externalSubTenderType : '',
419
- TenderAmount: (/** @type {?} */ (_this)).convertToString(-1 * (/** @type {?} */ (_this)).removeDecimal((Math.round(element.amount)))),
420
- CurrencyID: (/** @type {?} */ (_this)).transactionDocument.baseCurrency,
421
- CurrencyDescription: (/** @type {?} */ (_this)).transactionDocument.baseCurrency,
422
- GiftVoucherSalesAllowed: '',
423
- //todo
424
- AllowRechargeableVoucherSales: '',
425
- //todo
426
- GiftVoucherID: ''
427
- };
428
- (/** @type {?} */ (_this)).rjObject['CashTender'].push(obj);
459
+ if (element.externalTenderKey) {
460
+ (/** @type {?} */ (_this)).rjObject[element.externalTenderKey] = [];
461
+ if (element.paymentType.toUpperCase() === 'GIFT CARD') {
462
+ /** @type {?} */
463
+ var obj = {
464
+ XMLSchemaVersion: (/** @type {?} */ (_this)).xmlSchemaVersion,
465
+ LineNumber: (/** @type {?} */ (_this)).generateLineNumber(),
466
+ NetValue: (/** @type {?} */ (_this)).convertToString(-1 * (/** @type {?} */ (_this)).removeDecimal((Math.round(element.amount)))),
467
+ EffectiveNetValue: (/** @type {?} */ (_this)).convertToString(-1 * (/** @type {?} */ (_this)).removeDecimal((Math.round(element.amount)))),
468
+ Description: (/** @type {?} */ (_this)).getDescription(element),
469
+ DeviceID: (/** @type {?} */ (_this)).deviceId,
470
+ UserID: (/** @type {?} */ (_this)).transactionDocument.userName,
471
+ DateTimeCreated: (/** @type {?} */ (_this)).updatedAt,
472
+ TenderType: element.externalTenderType ? element.externalTenderType : '',
473
+ TenderSubType: element.externalSubTenderType ? element.externalSubTenderType : '',
474
+ TenderAmount: (/** @type {?} */ (_this)).convertToString(-1 * (/** @type {?} */ (_this)).removeDecimal((Math.round(element.amount)))),
475
+ CurrencyID: (/** @type {?} */ (_this)).transactionDocument.baseCurrency,
476
+ CurrencyDescription: (/** @type {?} */ (_this)).transactionDocument.baseCurrency,
477
+ GiftVoucherSalesAllowed: '',
478
+ //todo
479
+ AllowRechargeableVoucherSales: '',
480
+ //todo
481
+ GiftVoucherID: ''
482
+ };
483
+ (/** @type {?} */ (_this)).rjObject[element.externalTenderKey].push(obj);
484
+ }
485
+ else {
486
+ /** @type {?} */
487
+ var obj1 = {
488
+ XMLSchemaVersion: "1",
489
+ LineNumber: (/** @type {?} */ (_this)).generateLineNumber(),
490
+ //todo
491
+ NetValue: JSON.stringify(-1 * (Math.round(element.amount))),
492
+ EffectiveNetValue: JSON.stringify(-1 * (Math.round(element.amount))),
493
+ Description: (/** @type {?} */ (_this)).getDescription(element),
494
+ DeviceID: (/** @type {?} */ (_this)).deviceId,
495
+ UserID: (/** @type {?} */ (_this)).transactionDocument.userName,
496
+ DateTimeCreated: (/** @type {?} */ (_this)).updatedAt,
497
+ TenderType: element.externalTenderType ? element.externalTenderType : '',
498
+ TenderSubType: element.externalSubTenderType ? element.externalSubTenderType : '',
499
+ TenderAmount: JSON.stringify(-1 * (Math.round(element.amount))),
500
+ CurrencyID: (/** @type {?} */ (_this)).transactionDocument.baseCurrency,
501
+ CurrencyDescription: (/** @type {?} */ (_this)).transactionDocument.baseCurrency,
502
+ IncludeInTransactionTotalCheck: "1",
503
+ AllowRechargeableVoucherSales: "1",
504
+ OpenDrawerAtEnd: "1"
505
+ };
506
+ (/** @type {?} */ (_this)).rjObject[element.externalTenderKey].push(obj1);
507
+ }
429
508
  }
430
509
  else {
431
- /** @type {?} */
432
- var obj1 = {
433
- XMLSchemaVersion: "1",
434
- LineNumber: (/** @type {?} */ (_this)).generateLineNumber(),
435
- //todo
436
- NetValue: JSON.stringify(-1 * (Math.round(element.amount))),
437
- EffectiveNetValue: JSON.stringify(-1 * (Math.round(element.amount))),
438
- Description: (/** @type {?} */ (_this)).getDescription(element),
439
- DeviceID: (/** @type {?} */ (_this)).deviceId,
440
- UserID: (/** @type {?} */ (_this)).transactionDocument.userName,
441
- DateTimeCreated: (/** @type {?} */ (_this)).updatedAt,
442
- TenderType: element.externalTenderType ? element.externalTenderType : '',
443
- TenderSubType: element.externalSubTenderType ? element.externalSubTenderType : '',
444
- TenderAmount: JSON.stringify(-1 * (Math.round(element.amount))),
445
- CurrencyID: (/** @type {?} */ (_this)).transactionDocument.baseCurrency,
446
- CurrencyDescription: (/** @type {?} */ (_this)).transactionDocument.baseCurrency,
447
- IncludeInTransactionTotalCheck: "1",
448
- AllowRechargeableVoucherSales: "1",
449
- OpenDrawerAtEnd: "1"
450
- };
451
- (/** @type {?} */ (_this)).rjObject['CashTender'].push(obj1);
510
+ (/** @type {?} */ (_this)).rjObject['CashTender'] = [];
511
+ if (element.paymentType.toUpperCase() === 'GIFT CARD') {
512
+ /** @type {?} */
513
+ var obj = {
514
+ XMLSchemaVersion: (/** @type {?} */ (_this)).xmlSchemaVersion,
515
+ LineNumber: (/** @type {?} */ (_this)).generateLineNumber(),
516
+ NetValue: (/** @type {?} */ (_this)).convertToString(-1 * (/** @type {?} */ (_this)).removeDecimal((Math.round(element.amount)))),
517
+ EffectiveNetValue: (/** @type {?} */ (_this)).convertToString(-1 * (/** @type {?} */ (_this)).removeDecimal((Math.round(element.amount)))),
518
+ Description: (/** @type {?} */ (_this)).getDescription(element),
519
+ DeviceID: (/** @type {?} */ (_this)).deviceId,
520
+ UserID: (/** @type {?} */ (_this)).transactionDocument.userName,
521
+ DateTimeCreated: (/** @type {?} */ (_this)).updatedAt,
522
+ TenderType: element.externalTenderType ? element.externalTenderType : '',
523
+ TenderSubType: element.externalSubTenderType ? element.externalSubTenderType : '',
524
+ TenderAmount: (/** @type {?} */ (_this)).convertToString(-1 * (/** @type {?} */ (_this)).removeDecimal((Math.round(element.amount)))),
525
+ CurrencyID: (/** @type {?} */ (_this)).transactionDocument.baseCurrency,
526
+ CurrencyDescription: (/** @type {?} */ (_this)).transactionDocument.baseCurrency,
527
+ GiftVoucherSalesAllowed: '',
528
+ //todo
529
+ AllowRechargeableVoucherSales: '',
530
+ //todo
531
+ GiftVoucherID: ''
532
+ };
533
+ (/** @type {?} */ (_this)).rjObject['CashTender'].push(obj);
534
+ }
535
+ else {
536
+ /** @type {?} */
537
+ var obj1 = {
538
+ XMLSchemaVersion: "1",
539
+ LineNumber: (/** @type {?} */ (_this)).generateLineNumber(),
540
+ NetValue: JSON.stringify(-1 * (Math.round(element.amount))),
541
+ EffectiveNetValue: JSON.stringify(-1 * (Math.round(element.amount))),
542
+ Description: (/** @type {?} */ (_this)).getDescription(element),
543
+ DeviceID: (/** @type {?} */ (_this)).deviceId,
544
+ UserID: (/** @type {?} */ (_this)).transactionDocument.userName,
545
+ DateTimeCreated: (/** @type {?} */ (_this)).updatedAt,
546
+ TenderType: element.externalTenderType ? element.externalTenderType : '',
547
+ TenderSubType: element.externalSubTenderType ? element.externalSubTenderType : '',
548
+ TenderAmount: JSON.stringify(-1 * (Math.round(element.amount))),
549
+ CurrencyID: (/** @type {?} */ (_this)).transactionDocument.baseCurrency,
550
+ CurrencyDescription: (/** @type {?} */ (_this)).transactionDocument.baseCurrency,
551
+ IncludeInTransactionTotalCheck: "1",
552
+ AllowRechargeableVoucherSales: "1",
553
+ OpenDrawerAtEnd: "1"
554
+ };
555
+ (/** @type {?} */ (_this)).rjObject['CashTender'].push(obj1);
556
+ }
452
557
  }
453
558
  }));
454
559
  }
455
560
  return (/** @type {?} */ (this));
456
561
  };
562
+ /**
563
+ * @param {?} productId
564
+ * @return {?}
565
+ */
566
+ RJMapperBuilderClass.prototype.getNumber = /**
567
+ * @param {?} productId
568
+ * @return {?}
569
+ */
570
+ function (productId) {
571
+ /** @type {?} */
572
+ var lineNumber;
573
+ for (var i = 0; i < this.rjObject['ProductSale'].length; i++) {
574
+ /** @type {?} */
575
+ var element = this.rjObject['ProductSale'][i];
576
+ if (JSON.stringify(productId) === JSON.stringify(element.ProductID)) {
577
+ lineNumber = element.LineNumber;
578
+ break;
579
+ }
580
+ }
581
+ return lineNumber;
582
+ };
457
583
  /**
458
584
  * @return {?}
459
585
  */
@@ -875,14 +1001,17 @@ var RJMapperBuilderClass = /** @class */ (function () {
875
1001
  /**
876
1002
  * @param {?} element
877
1003
  * @param {?} lineDiscount
1004
+ * @param {?} transactionDiscount
878
1005
  * @return {?}
879
1006
  */
880
1007
  RJMapperBuilderClass.prototype.returnProduct = /**
881
1008
  * @param {?} element
882
1009
  * @param {?} lineDiscount
1010
+ * @param {?} transactionDiscount
883
1011
  * @return {?}
884
1012
  */
885
- function (element, lineDiscount) {
1013
+ function (element, lineDiscount, transactionDiscount) {
1014
+ var _this = this;
886
1015
  /** @type {?} */
887
1016
  var obj = {};
888
1017
  /** @type {?} */
@@ -918,7 +1047,7 @@ var RJMapperBuilderClass = /** @class */ (function () {
918
1047
  obj['DisplayTaxCode'] = ''; // todo
919
1048
  obj['ProductAttributes'] = ''; //todo - not required
920
1049
  obj['Perishable'] = this.getAttributes();
921
- obj['MMGroupID'] = this.getAttributes();
1050
+ obj['MMGroupID'] = this.getCaregories(element);
922
1051
  obj['CustomerDetails'] = ""; // todo - blank
923
1052
  obj['TotalPromotionSaving'] = element['promotionAmount'] || -1; // TODO
924
1053
  obj['OriginalTaxAmount'] = this.convertToString(this.getOriginalTax(element, taxTotal.VAT) * -1);
@@ -957,19 +1086,87 @@ var RJMapperBuilderClass = /** @class */ (function () {
957
1086
  obj.ExtendedValue = ((lineDiscount.discountedLinePrice || 0) + lineDiscount.discountAmount) * -1;
958
1087
  obj.UnitPrice = ((lineDiscount.discountedLinePrice || 0) + lineDiscount.discountAmount) * -1;
959
1088
  }
1089
+ if (transactionDiscount) {
1090
+ obj['BasketDiscountModifier'] = [];
1091
+ this.transactionDocument.basket.transactionDiscount.forEach((/**
1092
+ * @param {?} e
1093
+ * @return {?}
1094
+ */
1095
+ function (e) {
1096
+ /** @type {?} */
1097
+ var discountObj = {};
1098
+ e.itemLineIds.forEach((/**
1099
+ * @param {?} x
1100
+ * @return {?}
1101
+ */
1102
+ function (x) {
1103
+ if (x == element.itemLineId) {
1104
+ /** @type {?} */
1105
+ var discountAmount = _this.convertToString(e.discountAmount * -1);
1106
+ discountObj.BasketDiscountLineNumber = _this.getLineNumber(e, discountAmount);
1107
+ discountObj.XMLSchemaVersion = _this.xmlSchemaVersion;
1108
+ discountObj.DiscountedValue = _this.getDiscountedValue(element.totalLinePrice, e.discountAmount);
1109
+ obj['BasketDiscountModifier'].push(discountObj);
1110
+ }
1111
+ }));
1112
+ }));
1113
+ /** @type {?} */
1114
+ var totaltransactionDiscount = 0;
1115
+ obj['BasketDiscountModifier'].forEach((/**
1116
+ * @param {?} value
1117
+ * @return {?}
1118
+ */
1119
+ function (value) {
1120
+ totaltransactionDiscount = totaltransactionDiscount + value.DiscountedValue;
1121
+ }));
1122
+ //update the product price
1123
+ obj['EffectiveNetValue'] = obj.EffectiveNetValue + totaltransactionDiscount;
1124
+ }
1125
+ if (this.transactionDocument.basket.transactionPromotion.length > 0) {
1126
+ obj['PromotionSaving'] = [];
1127
+ this.transactionDocument.basket.transactionPromotion.forEach((/**
1128
+ * @param {?} transactionPromo
1129
+ * @return {?}
1130
+ */
1131
+ function (transactionPromo) {
1132
+ /** @type {?} */
1133
+ var promotionObj = {};
1134
+ transactionPromo.itemLineIds.forEach((/**
1135
+ * @param {?} itemLineId
1136
+ * @return {?}
1137
+ */
1138
+ function (itemLineId) {
1139
+ if (itemLineId == element.itemLineId) {
1140
+ promotionObj.ModifierValue = transactionPromo.promotionAmount;
1141
+ promotionObj.ModifierDateTime = _this.transactionDocument.createdAt;
1142
+ promotionObj.ModifierDescription = transactionPromo.displayText;
1143
+ promotionObj.XMLSchemaVersion = _this.xmlSchemaVersion;
1144
+ promotionObj.PromotionID = transactionPromo.promotionId;
1145
+ promotionObj.PromotionDescription = transactionPromo.displayText;
1146
+ promotionObj.HitNumber = '1';
1147
+ promotionObj.PromotionHitProductQuantity = _this.getQuantity(element);
1148
+ promotionObj.PromotionHitQuantity = _this.getQuantity(element) * -1;
1149
+ obj['PromotionSaving'].push(promotionObj);
1150
+ }
1151
+ }));
1152
+ }));
1153
+ }
960
1154
  return obj;
961
1155
  };
962
1156
  /**
963
1157
  * @param {?} element
964
1158
  * @param {?} lineDiscount
1159
+ * @param {?} transactionDiscount
965
1160
  * @return {?}
966
1161
  */
967
1162
  RJMapperBuilderClass.prototype.addProduct = /**
968
1163
  * @param {?} element
969
1164
  * @param {?} lineDiscount
1165
+ * @param {?} transactionDiscount
970
1166
  * @return {?}
971
1167
  */
972
- function (element, lineDiscount) {
1168
+ function (element, lineDiscount, transactionDiscount) {
1169
+ var _this = this;
973
1170
  /** @type {?} */
974
1171
  var taxTotal = this.transactionDocument.basket['taxBreakdown']['taxLines'].find((/**
975
1172
  * @param {?} item
@@ -988,8 +1185,7 @@ var RJMapperBuilderClass = /** @class */ (function () {
988
1185
  DateTimeCreated: this.createdAt,
989
1186
  ExtendedValue: this.removeDecimal(element.price),
990
1187
  UnitPrice: this.removeDecimal(element.price),
991
- MMGroupID: this.getAttributes(),
992
- //todo
1188
+ MMGroupID: this.getCaregories(element),
993
1189
  Quantity: element.quantity.toFixed(1),
994
1190
  SalespersonID: this.transactionDocument.userId,
995
1191
  SalespersonName: this.transactionDocument.userName,
@@ -998,14 +1194,14 @@ var RJMapperBuilderClass = /** @class */ (function () {
998
1194
  * @return {?}
999
1195
  */
1000
1196
  function (item) { return item.itemLineId == element['itemLineId']; })).VATCode,
1001
- TaxModifiable: 1,
1197
+ TaxModifiable: "1",
1002
1198
  //todo
1003
1199
  OriginalTaxAmount: this.convertToString(this.getOriginalTax(element, taxTotal.VAT)),
1004
1200
  TaxAmount: this.convertToString(taxTotal.taxLineTotal),
1005
- OriginalTaxAmountSet: 1,
1201
+ OriginalTaxAmountSet: "1",
1006
1202
  //todo
1007
1203
  ProductID: element.SKU,
1008
- HandKeyed: 1,
1204
+ HandKeyed: "1",
1009
1205
  //todo
1010
1206
  CustomerDetails: "",
1011
1207
  Perishable: this.getAttributes()
@@ -1034,7 +1230,7 @@ var RJMapperBuilderClass = /** @class */ (function () {
1034
1230
  obj['PriceOverride'].ModifierReasonID = lineDiscount.priceOverrideReasonCode;
1035
1231
  obj['PriceOverride'].ModifierReasonDescription = lineDiscount.priceOverrideReasonName;
1036
1232
  obj['PriceOverride'].AuthorisingUserID = this.transactionDocument.userName;
1037
- obj['PriceOverride'].XMLSchemaVersion = 1;
1233
+ obj['PriceOverride'].XMLSchemaVersion = this.xmlSchemaVersion;
1038
1234
  obj['PriceOverride'].NewPrice = this.removeDecimal(lineDiscount.unitPrice);
1039
1235
  obj['PriceOverride'].OriginalPrice = this.removeDecimal(lineDiscount.discountedLinePrice || 0 + lineDiscount.discountAmount);
1040
1236
  }
@@ -1044,8 +1240,150 @@ var RJMapperBuilderClass = /** @class */ (function () {
1044
1240
  obj['ExtendedValue'] = ((lineDiscount.discountedLinePrice || 0) + lineDiscount.discountAmount);
1045
1241
  obj['UnitPrice'] = ((lineDiscount.discountedLinePrice || 0) + lineDiscount.discountAmount);
1046
1242
  }
1243
+ if (transactionDiscount) {
1244
+ obj['BasketDiscountModifier'] = [];
1245
+ this.transactionDocument.basket.transactionDiscount.forEach((/**
1246
+ * @param {?} e
1247
+ * @return {?}
1248
+ */
1249
+ function (e) {
1250
+ /** @type {?} */
1251
+ var discountObj = {};
1252
+ e.itemLineIds.forEach((/**
1253
+ * @param {?} itemLineId
1254
+ * @return {?}
1255
+ */
1256
+ function (itemLineId) {
1257
+ if (itemLineId == element.itemLineId) {
1258
+ /** @type {?} */
1259
+ var discountAmount = _this.convertToString(e.discountAmount * -1);
1260
+ discountObj.XMLSchemaVersion = _this.xmlSchemaVersion;
1261
+ discountObj.DiscountedValue = -(_this.getDiscountedValue(element.totalLinePrice, e.discountAmount).toFixed(0));
1262
+ discountObj.BasketDiscountLineNumber = _this.getLineNumber(e, discountAmount);
1263
+ obj['BasketDiscountModifier'].push(discountObj);
1264
+ }
1265
+ }));
1266
+ }));
1267
+ /** @type {?} */
1268
+ var totaltransactionDiscount_1 = 0;
1269
+ obj['BasketDiscountModifier'].forEach((/**
1270
+ * @param {?} value
1271
+ * @return {?}
1272
+ */
1273
+ function (value) {
1274
+ totaltransactionDiscount_1 = totaltransactionDiscount_1 + value.DiscountedValue;
1275
+ }));
1276
+ //update the product price
1277
+ obj['EffectiveNetValue'] = obj.EffectiveNetValue + totaltransactionDiscount_1;
1278
+ }
1279
+ if (this.transactionDocument.basket.transactionPromotion.length > 0 || this.transactionDocument.basket.linePromotion.length > 0) {
1280
+ obj['DistributedPromotionSaving'] = [];
1281
+ if (this.transactionDocument.basket.transactionPromotion.length > 0) {
1282
+ this.transactionDocument.basket.transactionPromotion.forEach((/**
1283
+ * @param {?} e
1284
+ * @return {?}
1285
+ */
1286
+ function (e) {
1287
+ /** @type {?} */
1288
+ var promotionObj = {};
1289
+ e.itemLineIds.forEach((/**
1290
+ * @param {?} itemLineId
1291
+ * @return {?}
1292
+ */
1293
+ function (itemLineId) {
1294
+ if (itemLineId == element.itemLineId) {
1295
+ promotionObj.PromotionID = e.promotionId;
1296
+ promotionObj.Hit = '1';
1297
+ promotionObj.Saving = _this.getSaving(element.totalLinePrice, e.promotionAmount);
1298
+ promotionObj.ISaving = _this.getSaving(element.totalLinePrice, e.promotionAmount);
1299
+ obj['DistributedPromotionSaving'].push(promotionObj);
1300
+ }
1301
+ }));
1302
+ }));
1303
+ }
1304
+ if (this.transactionDocument.basket.linePromotion.length > 0) {
1305
+ this.transactionDocument.basket.linePromotion.forEach((/**
1306
+ * @param {?} linePromotion
1307
+ * @return {?}
1308
+ */
1309
+ function (linePromotion) {
1310
+ /** @type {?} */
1311
+ var promotionObj = {};
1312
+ if (element.itemLineId == linePromotion.itemLineId) {
1313
+ promotionObj.PromotionID = linePromotion.promotionId;
1314
+ promotionObj.Hit = "1";
1315
+ promotionObj.Saving = linePromotion.promotionLinePrice;
1316
+ promotionObj.ISaving = linePromotion.promotionLinePrice;
1317
+ obj['DistributedPromotionSaving'].push(promotionObj);
1318
+ }
1319
+ }));
1320
+ }
1321
+ /** @type {?} */
1322
+ var transactionPromotion_1 = 0;
1323
+ obj['DistributedPromotionSaving'].forEach((/**
1324
+ * @param {?} value
1325
+ * @return {?}
1326
+ */
1327
+ function (value) {
1328
+ transactionPromotion_1 = transactionPromotion_1 + value.Saving;
1329
+ }));
1330
+ obj['EffectiveNetValue'] = obj.EffectiveNetValue + transactionPromotion_1;
1331
+ }
1047
1332
  return obj;
1048
1333
  };
1334
+ /**
1335
+ * @param {?} price
1336
+ * @param {?} promotionAmount
1337
+ * @return {?}
1338
+ */
1339
+ RJMapperBuilderClass.prototype.getSaving = /**
1340
+ * @param {?} price
1341
+ * @param {?} promotionAmount
1342
+ * @return {?}
1343
+ */
1344
+ function (price, promotionAmount) {
1345
+ /** @type {?} */
1346
+ var Saving = (price * promotionAmount) / this.transactionDocument.basketSummary.saleTotal;
1347
+ return Saving;
1348
+ };
1349
+ /**
1350
+ * @param {?} value
1351
+ * @param {?} discountAmount
1352
+ * @return {?}
1353
+ */
1354
+ RJMapperBuilderClass.prototype.getLineNumber = /**
1355
+ * @param {?} value
1356
+ * @param {?} discountAmount
1357
+ * @return {?}
1358
+ */
1359
+ function (value, discountAmount) {
1360
+ /** @type {?} */
1361
+ var lineNumber;
1362
+ for (var i = 0; i < this.rjObject['BasketDiscount'].length; i++) {
1363
+ /** @type {?} */
1364
+ var element = this.rjObject['BasketDiscount'][i];
1365
+ if (value.reasonCode === element.ReasonCodeID && discountAmount === element.NetValue) {
1366
+ lineNumber = element.LineNumber;
1367
+ break;
1368
+ }
1369
+ }
1370
+ return lineNumber;
1371
+ };
1372
+ /**
1373
+ * @param {?} price
1374
+ * @param {?} discountAmount
1375
+ * @return {?}
1376
+ */
1377
+ RJMapperBuilderClass.prototype.getDiscountedValue = /**
1378
+ * @param {?} price
1379
+ * @param {?} discountAmount
1380
+ * @return {?}
1381
+ */
1382
+ function (price, discountAmount) {
1383
+ /** @type {?} */
1384
+ var DiscountedValue = (price * discountAmount) / this.transactionDocument.basketSummary.saleTotal;
1385
+ return DiscountedValue;
1386
+ };
1049
1387
  /**
1050
1388
  * @param {?} element
1051
1389
  * @param {?} VAT
@@ -1077,7 +1415,7 @@ var RJMapperBuilderClass = /** @class */ (function () {
1077
1415
  return value;
1078
1416
  }
1079
1417
  catch (e) {
1080
- console.log(value, ' can not be converted in string', e);
1418
+ console.log(value, 'can not be converted in string', e);
1081
1419
  }
1082
1420
  };
1083
1421
  /**
@@ -1129,6 +1467,34 @@ var RJMapperBuilderClass = /** @class */ (function () {
1129
1467
  return "";
1130
1468
  }
1131
1469
  };
1470
+ /**
1471
+ * @param {?} element
1472
+ * @return {?}
1473
+ */
1474
+ RJMapperBuilderClass.prototype.getCaregories = /**
1475
+ * @param {?} element
1476
+ * @return {?}
1477
+ */
1478
+ function (element) {
1479
+ /** @type {?} */
1480
+ var MMGroupId = " ";
1481
+ if (element.categories && element.categories.length > 0) {
1482
+ /** @type {?} */
1483
+ var categories = element.categories.filter((/**
1484
+ * @param {?} x
1485
+ * @return {?}
1486
+ */
1487
+ function (x) { return x.parentId != ''; }));
1488
+ /** @type {?} */
1489
+ var value = categories.filter((/**
1490
+ * @param {?} x
1491
+ * @return {?}
1492
+ */
1493
+ function (x) { return x.id != x.parentId; }));
1494
+ MMGroupId = value[0].name;
1495
+ }
1496
+ return MMGroupId;
1497
+ };
1132
1498
  /**
1133
1499
  * @param {?} date
1134
1500
  * @return {?}
@@ -1165,21 +1531,18 @@ var RJMapperBuilderClass = /** @class */ (function () {
1165
1531
  */
1166
1532
  function (transactionPromotion) {
1167
1533
  if (transactionPromotion && transactionPromotion.length > 0) {
1168
- this.rjObject['BasketDiscount'] = {};
1169
- this.rjObject['BasketDiscount']['XMLSchemaVersion'] = 1;
1170
- this.rjObject['BasketDiscount']['LineNumber'] = this.generateLineNumber();
1171
- this.rjObject['BasketDiscount']['NetValue'] = this.removeDecimal(transactionPromotion[0].promotionLinePrice) * -1;
1172
- this.rjObject['BasketDiscount']['EffectiveNetValue'] = this.removeDecimal(transactionPromotion[0].promotionLinePrice) * -1;
1173
- this.rjObject['BasketDiscount']['Description'] = transactionPromotion[0].promotionInfo;
1174
- this.rjObject['BasketDiscount']['DeviceID'] = this.deviceId;
1175
- this.rjObject['BasketDiscount']['UserID'] = this.transactionDocument.userName;
1176
- this.rjObject['BasketDiscount']['DateTimeCreated'] = this.createdAt;
1177
- this.rjObject['BasketDiscount']['ModifiedLineNumber'] = transactionPromotion[0].itemLineIds;
1178
- this.rjObject['BasketDiscount']['ReasonCodeID'] = 0;
1179
- this.rjObject['BasketDiscount']['DiscountType'] = transactionPromotion[0].promotionType == 'TRANSACTION_OFF' ? 1 : 0;
1180
- this.rjObject['BasketDiscount']['DiscountPercentage'] = 0; //todo
1181
- this.rjObject['BasketDiscount']['DiscountedValue'] = 0; //todo
1182
- this.rjObject['BasketDiscount']['RoundingRule'] = 2;
1534
+ this.rjObject['PromoVoucherItem'] = {};
1535
+ this.rjObject['PromoVoucherItem']['XMLSchemaVersion'] = this.xmlSchemaVersion;
1536
+ this.rjObject['PromoVoucherItem']['LineNumber'] = this.generateLineNumber();
1537
+ this.rjObject['PromoVoucherItem']['NetValue'] = this.removeDecimal(transactionPromotion[0].promotionLinePrice) * -1;
1538
+ this.rjObject['PromoVoucherItem']['EffectiveNetValue'] = this.removeDecimal(transactionPromotion[0].promotionLinePrice) * -1;
1539
+ this.rjObject['PromoVoucherItem']['Description'] = transactionPromotion[0].promotionInfo;
1540
+ this.rjObject['PromoVoucherItem']['DeviceID'] = this.deviceId;
1541
+ this.rjObject['PromoVoucherItem']['UserID'] = this.transactionDocument.userName;
1542
+ this.rjObject['PromoVoucherItem']['DateTimeCreated'] = this.createdAt;
1543
+ this.rjObject['PromoVoucherItem']['ProductId'] = ""; //todo
1544
+ this.rjObject['PromoVoucherItem']['SerialNumber'] = ""; //todo
1545
+ this.rjObject['PromoVoucherItem']['MMGroupId'] = "";
1183
1546
  }
1184
1547
  };
1185
1548
  /**
@@ -1326,4 +1689,4 @@ if (false) {
1326
1689
  */
1327
1690
  RJMapperBuilderClass.prototype.rjObject;
1328
1691
  }
1329
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUkotbWFwcGVyLmNsYXNzLmpzIiwic291cmNlUm9vdCI6Im5nOi8vQHBtY3JldGFpbC9tYXBwZXItbGlicmFyeS8iLCJzb3VyY2VzIjpbImxpYi9SSi1tYXBwZXIuY2xhc3MudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUEsT0FBTyxFQUFFLFlBQVksRUFBK0MsZ0JBQWdCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQTtBQUNwSCxPQUFPLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUMxRTtJQTJCSSw4QkFBWSxjQUFvQztRQVB4QyxjQUFTLEdBQUcsQ0FBQyxDQUFDO1FBQ2Qsa0JBQWEsR0FBRyxDQUFDLENBQUM7UUFJbEIsYUFBUSxHQUFRLEVBQUUsQ0FBQTtRQUd0QixJQUFJLGNBQWMsRUFBRTtZQUNoQixJQUFJLENBQUMsbUJBQW1CLEdBQUcsY0FBYyxDQUFDO1NBQzdDO2FBQU07WUFDSCxJQUFJLENBQUMsbUJBQW1CLEdBQUc7Z0JBQ3ZCLGFBQWEsRUFBRSxFQUFFO2dCQUNqQixvQkFBb0IsRUFBRSxFQUFFO2dCQUN4QixjQUFjLEVBQUUsRUFBRTtnQkFDbEIsUUFBUSxFQUFFLEVBQUU7Z0JBQ1osT0FBTyxFQUFFLEVBQUU7Z0JBQ1gsT0FBTyxFQUFFLEVBQUU7Z0JBQ1gsV0FBVyxFQUFFLEVBQUU7Z0JBQ2Ysa0JBQWtCLEVBQUUsRUFBRTtnQkFDdEIsUUFBUSxFQUFFLEVBQUU7Z0JBQ1osVUFBVSxFQUFFLEVBQUU7Z0JBQ2QsTUFBTSxFQUFFLEVBQUU7Z0JBQ1YsZ0JBQWdCLEVBQUUsU0FBUztnQkFDM0IsTUFBTSxFQUFFLEtBQUs7Z0JBQ2IsTUFBTSxFQUFFLG1CQUFBLEVBQUUsRUFBTztnQkFDakIsYUFBYSxFQUFFLG1CQUFBLEVBQUUsRUFBTztnQkFDeEIsWUFBWSxFQUFFLEVBQUU7Z0JBQ2hCLElBQUksRUFBRSxFQUFFO2dCQUNSLGVBQWUsRUFBRSxFQUFFO2dCQUNuQixTQUFTLEVBQUUsRUFBRTtnQkFDYixTQUFT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Q0FBQztTQUMzRzthQUNHO1lBQ0EsUUFBUSxHQUFHLE9BQU8sQ0FBQyxrQkFBa0IsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLGtCQUFrQixDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLGtCQUFrQixDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUM7U0FDbkk7UUFDRCxPQUFPLFFBQVEsQ0FBQztJQUNwQixDQUFDO0lBQ0wsMkJBQUM7QUFBRCxDQUFDLEFBaHRCRCxJQWd0QkM7Ozs7Ozs7SUE5c0JHLG1EQUFpRDs7Ozs7SUFDakQsd0NBQXNCOzs7OztJQUN0QixpREFBK0I7Ozs7O0lBQy9CLCtDQUE2Qjs7Ozs7SUFDN0IscURBQW1DOzs7OztJQUNuQywwQ0FBd0I7Ozs7O0lBQ3hCLGdEQUE4Qjs7Ozs7SUFDOUIsNENBQTBCOzs7OztJQUMxQiw0Q0FBMEI7Ozs7O0lBQzFCLDZDQUEyQjs7Ozs7SUFDM0IseUNBQXVCOzs7OztJQUN2Qix5Q0FBdUI7Ozs7O0lBQ3ZCLDhDQUE0Qjs7Ozs7SUFDNUIsMkNBQXlCOzs7OztJQUN6QiwrQ0FBNkI7Ozs7O0lBQzdCLGdEQUE4Qjs7Ozs7SUFDOUIsK0NBQTZCOzs7OztJQUM3QixnREFBOEI7Ozs7O0lBQzlCLHlDQUFzQjs7Ozs7SUFDdEIsNkNBQTBCOzs7OztJQUMxQix3Q0FBc0I7Ozs7O0lBQ3RCLHlDQUF1Qjs7Ozs7SUFDdkIseUNBQXVCOzs7OztJQUN2Qix3Q0FBMEIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBESVNDT1VOVFRZUEUsIExpbmVEaXNjb3VudCwgVFByb2R1Y3QsIFRyYW5zYWN0aW9uRG9jdW1lbnQsIFRSQU5TQUNUSU9OX1RZUEUgfSBmcm9tIFwiLi9tYXBwZXItbGlicmFyeS5tb2RlbFwiXHJcbmltcG9ydCB7IFRyYW5zYWN0aW9uRG9jdW1lbnRCdWlsZGVyIH0gZnJvbSBcIi4vVHJhbnNhY3Rpb25Eb2N1bWVudEJ1aWxkZXJcIjtcclxuZXhwb3J0IGNsYXNzIFJKTWFwcGVyQnVpbGRlckNsYXNzIHtcclxuXHJcbiAgICBwcml2YXRlIHRyYW5zYWN0aW9uRG9jdW1lbnQ6IFRyYW5zYWN0aW9uRG9jdW1lbnQ7XHJcbiAgICBwcml2YXRlIGRldmljZUlkOiBhbnk7XHJcbiAgICBwcml2YXRlIHRyYW5zYWN0aW9uTnVtYmVyOiBhbnk7XHJcbiAgICBwcml2YXRlIG1hbmlmZXN0VmVyc2lvbjogYW55O1xyXG4gICAgcHJpdmF0ZSBkYXRhYmFzZVNjaGVtYVZlcnNpb246IGFueTtcclxuICAgIHByaXZhdGUgYmFza2V0VHlwZTogYW55O1xyXG4gICAgcHJpdmF0ZSB4bWxTY2hlbWFWZXJzaW9uOiBhbnk7XHJcbiAgICBwcml2YXRlIG1ham9yVmVyc2lvbjogYW55O1xyXG4gICAgcHJpdmF0ZSBtaW5vclZlcnNpb246IGFueTtcclxuICAgIHByaXZhdGUgZXh0ZXJuYWxTdGF0ZTogYW55O1xyXG4gICAgcHJpdmF0ZSBjYXNoaWVySWQ6IGFueTtcclxuICAgIHByaXZhdGUgY29tcGFueUlkOiBhbnk7XHJcbiAgICBwcml2YXRlIHRlcm1pbmFsTnVtYmVyOiBhbnk7XHJcbiAgICBwcml2YXRlIHRheE1ldGhvZElkOiBhbnk7XHJcbiAgICBwcml2YXRlIHRyYWRpbmdSZWdpb25JZDogYW55O1xyXG4gICAgcHJpdmF0ZSBiYXNrZXRDdXJyZW5jeUlkOiBhbnk7XHJcbiAgICBwcml2YXRlIGJhc2tldENvdW50cnlJZDogYW55O1xyXG4gICAgcHJpdmF0ZSBiYXNrZXRMYW5ndWFnZUlkOiBhbnk7XHJcbiAgICBwcml2YXRlIGl0ZW1Db3VudCA9IDA7XHJcbiAgICBwcml2YXRlIGxhcmdlc3ROdW1iZXIgPSAwO1xyXG4gICAgcHJpdmF0ZSBicmFuY2hJZDogYW55O1xyXG4gICAgcHJpdmF0ZSBjcmVhdGVkQXQ6IGFueTtcclxuICAgIHByaXZhdGUgdXBkYXRlZEF0IDphbnk7XHJcbiAgICBwcml2YXRlIHJqT2JqZWN0OiBhbnkgPSB7fVxyXG5cclxuICAgIGNvbnN0cnVjdG9yKHRyYW5zYWN0aW9uRG9jPzogVHJhbnNhY3Rpb25Eb2N1bWVudCkge1xyXG4gICAgICAgIGlmICh0cmFuc2FjdGlvbkRvYykge1xyXG4gICAgICAgICAgICB0aGlzLnRyYW5zYWN0aW9uRG9jdW1lbnQgPSB0cmFuc2FjdGlvbkRvYztcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLnRyYW5zYWN0aW9uRG9jdW1lbnQgPSB7XHJcbiAgICAgICAgICAgICAgICB0cmFuc2FjdGlvbklkOiBcIlwiLFxyXG4gICAgICAgICAgICAgICAgb2ZmbGluZVRyYW5zYWN0aW9uSWQ6IFwiXCIsXHJcbiAgICAgICAgICAgICAgICB0cmFuc2FjdGlvblJlZjogXCJcIixcclxuICAgICAgICAgICAgICAgIGRhdGVUaW1lOiBcIlwiLFxyXG4gICAgICAgICAgICAgICAgb3JnQ29kZTogXCJcIixcclxuICAgICAgICAgICAgICAgIHN0b3JlSWQ6IFwiXCIsXHJcbiAgICAgICAgICAgICAgICBzdG9yZU5vZGVJZDogXCJcIixcclxuICAgICAgICAgICAgICAgIHN0b3JlTm9kZVN0cnVjdHVyZTogXCJcIixcclxuICAgICAgICAgICAgICAgIGRldmljZUlkOiBcIlwiLFxyXG4gICAgICAgICAgICAgICAgdGVybWluYWxJZDogXCJcIixcclxuICAgICAgICAgICAgICAgIHVzZXJJZDogXCJcIixcclxuICAgICAgICAgICAgICAgIGluaXRpYXRpbmdNb2R1bGU6IFwiZUJhc2tldFwiLFxyXG4gICAgICAgICAgICAgICAgZXhwb3J0OiBmYWxzZSxcclxuICAgICAgICAgICAgICAgIGJhc2tldDoge30gYXMgYW55LFxyXG4gICAgICAgICAgICAgICAgYmFza2V0U3VtbWFyeToge30gYXMgYW55LFxyXG4gICAgICAgICAgICAgICAgYmFzZUN1cnJlbmN5OiBcIlwiLFxyXG4gICAgICAgICAgICAgICAgdHlwZTogXCJcIixcclxuICAgICAgICAgICAgICAgIG9wZXJhdGlvblN0YXR1czogXCJcIixcclxuICAgICAgICAgICAgICAgIGNyZWF0ZWRBdDogXCJcIixcclxuICAgICAgICAgICAgICAgIHVwZGF0ZWRBdDogXCJcIixcclxuICAgICAgICAgICAgICAgIGlkOiBcIlwiLFxyXG4gICAgICAgICAgICAgICAgY3VycmVudFRyYW5zYWN0aW9uRGV0YWlsczoge30gYXMgYW55LFxyXG4gICAgICAgICAgICAgICAgc2FsZVRvdGFsOiAwLFxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmluaXRpbGl6ZUl0ZW1Db3VudCgpO1xyXG4gICAgICAgIHRoaXMuc2V0TGluZU51bWJlckZvclByb2R1Y3RzKCk7XHJcbiAgICAgICAgdGhpcy5jcmVhdGVkQXQgPSB0aGlzLmdldERhdGUodGhpcy50cmFuc2FjdGlvbkRvY3VtZW50LmNyZWF0ZWRBdCk7XHJcbiAgICAgICAgdGhpcy51cGRhdGVkQXQgPSB0aGlzLmdldERhdGUodGhpcy50cmFuc2FjdGlvbkRvY3VtZW50LnVwZGF0ZWRBdCk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0UG9zYmFza2V0SW5mbygpIHtcclxuICAgICAgICB0aGlzLnJqT2JqZWN0WydLZXl3b3JkJ10gPSB0aGlzLmdlbmVyYXRlS2V5d29yZCgpO1xyXG4gICAgICAgIHRoaXMucmpPYmplY3RbJ0lEJ10gPSB0aGlzLmdlbmVyYXRlSWQodGhpcy5jcmVhdGVkQXQpO1xyXG4gICAgICAgIHRoaXMucmpPYmplY3RbJ1hNTFNjaGVtYVZlcnNpb24nXSA9ICcyJztcclxuICAgICAgICB0aGlzLnJqT2JqZWN0WydMYXN0VXBkYXRlZCddID0gdGhpcy51cGRhdGVkQXQ7XHJcbiAgICAgICAgdGhpcy5yak9iamVjdFsnTWFqb3JWZXJzaW9uJ10gPSB0aGlzLm1ham9yVmVyc2lvbjtcclxuICAgICAgICB0aGlzLnJqT2JqZWN0WydNaW5vclZlcnNpb24nXSA9IHRoaXMubWlub3JWZXJzaW9uO1xyXG4gICAgICAgIHRoaXMucmpPYmplY3RbJ01hbmlmZXN0VmVyc2lvbiddID0gdGhpcy5tYW5pZmVzdFZlcnNpb247XHJcbiAgICAgICAgdGhpcy5yak9iamVjdFsnRGF0YWJhc2VTY2hlbWFWZXJzaW9uJ10gPSB0aGlzLmRhdGFiYXNlU2NoZW1hVmVyc2lvbjtcclxuICAgICAgICB0aGlzLnJqT2JqZWN0WydCYXNrZXRUeXBlJ10gPSB0aGlzLmJhc2tldFR5cGU7XHJcbiAgICAgICAgdGhpcy5yak9iamVjdFsnU3RhdGUnXSA9IHRoaXMuZ2V0U3RhdGUoKTtcclxuICAgICAgICB0aGlzLnJqT2JqZWN0WydFeHRlcm5hbFN0YXRlJ10gPSB0aGlzLmV4dGVybmFsU3RhdGU7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfVxyXG5cclxuXHJcbiAgICBnZXRoZWFkZXJJbmZvKCkge1xyXG4gICAgICAgIHRoaXMucmpPYmplY3RbJ0hlYWRlciddID0ge307XHJcbiAgICAgICAgdGhpcy5yak9iamVjdFsnSGVhZGVyJ10uVGltZVpvbmVPZmZzZXQgPSB0aGlzLmNvbnZlcnRUb1N0cmluZyh0aGlzLmdlbmVyYXRlVGltZXpvbmVvZmZzZXQodGhpcy50cmFuc2FjdGlvbkRvY3VtZW50LmNyZWF0ZWRBdCkpO1xyXG4gICAgICAgIHRoaXMucmpPYmplY3RbJ0hlYWRlciddLkRhdGVUaW1lQ3JlYXRlZCA9IHRoaXMuY3JlYXRlZEF0O1xyXG4gICAgICAgIHRoaXMucmpPYmplY3RbJ0hlYWRlciddLk9yaWdpbmF0ZWRCeSA9IHt9O1xyXG4gICAgICAgIHRoaXMucmpPYmplY3RbJ0hlYWRlciddLk9yaWdpbmF0ZWRCeS5EZXZpY2VJRCA9IHRoaXMuZGV2aWNlSWQ7XHJcbiAgICAgICAgdGhpcy5yak9iamVjdFsnSGVhZGVyJ10uT3JpZ2luYXRlZEJ5LkNhc2hpZXJJRCA9IHRoaXMuY2FzaGllcklkO1xyXG4gICAgICAgIHRoaXMucmpPYmplY3RbJ0hlYWRlciddLk9yaWdpbmF0ZWRCeS5Db21wYW55SUQgPSB0aGlzLmNvbXBhbnlJZDtcclxuICAgICAgICB0aGlzLnJqT2JqZWN0WydIZWFkZXInXS5PcmlnaW5hdGVkQnkuU3RvcmVJRCA9IHRoaXMudHJhbnNhY3Rpb25Eb2N1bWVudC5zdG9yZUlkO1xyXG4gICAgICAgIHRoaXMucmpPYmplY3RbJ0hlYWRlciddLk9yaWdpbmF0ZWRCeS5CcmFuY2hJRCA9IHRoaXMuYnJhbmNoSWQ7XHJcbiAgICAgICAgdGhpcy5yak9iamVjdFsnSGVhZGVyJ10uT3JpZ2luYXRlZEJ5LlRlcm1pbmFsTnVtYmVyID0gdGhpcy50ZXJtaW5hbE51bWJlcjtcclxuICAgICAgICB0aGlzLnJqT2JqZWN0WydIZWFkZXInXS5PcmlnaW5hdGVkQnkuVHJhbnNhY3Rpb25OdW1iZXIgPSB0aGlzLnRyYW5zYWN0aW9uTnVtYmVyO1xyXG4gICAgICAgIHRoaXMucmpPYmplY3RbJ0hlYWRlciddLlRheE1ldGhvZElEID0gdGhpcy50YXhNZXRob2RJZDtcclxuICAgICAgICB0aGlzLnJqT2JqZWN0WydIZWFkZXInXS5EeW5hbWljU3RvY2tMb29rdXAgPSB0aGlzLmdlbmVyYXRlRHluYW1pY1N0b2NrTG9va1VwKCk7Ly90b2RvXHJcbiAgICAgICAgdGhpcy5yak9iamVjdFsnSGVhZGVyJ10uQmFza2V0TGFuZ3VhZ2VJRCA9IHRoaXMuYmFza2V0TGFuZ3VhZ2VJZDsgLy90b2RvXHJcbiAgICAgICAgdGhpcy5yak9iamVjdFsnSGVhZGVyJ10uQmFza2V0Q291bnRyeUlEID0gdGhpcy5iYXNrZXRDb3VudHJ5SWQ7IC8vdG9kb1xyXG4gICAgICAgIHRoaXMucmpPYmplY3RbJ0hlYWRlciddLkJhc2tldEN1cnJlbmN5SUQgPSB0aGlzLnRyYW5zYWN0aW9uRG9jdW1lbnQuYmFzZUN1cnJlbmN5O1xyXG4gICAgICAgIHRoaXMucmpPYmplY3RbJ0hlYWRlciddLlRyYWRpbmdSZWdpb25JRCA9IHRoaXMudHJhZGluZ1JlZ2lvbklkO1xyXG4gICAgICAgIHRoaXMucmpPYmplY3RbJ0hlYWRlciddLkV1cm96b25lID0gXCIgXCI7Ly91bmtub3duXHJcbiAgICAgICAgdGhpcy5yak9iamVjdFsnSGVhZGVyJ10uRXVyb0Jhc2VFeGNoYW5nZVJhdGUgPSBcIlwiOyAvL3Vua25vd25cclxuICAgICAgICB0aGlzLnJqT2JqZWN0WydIZWFkZXInXS5QcmludGFibGVOYW1lID0gdGhpcy50cmFuc2FjdGlvbkRvY3VtZW50LnVzZXJOYW1lOyAvL3Vua25vd25cclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9XHJcblxyXG4gICAgcmpNYXBwZXIoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMudHJhbnNhY3Rpb25Eb2N1bWVudC50eXBlID09PSBUUkFOU0FDVElPTl9UWVBFLlNBTEUpIHtcclxuICAgICAgICAgICAgdGhpcy5yak9iamVjdFsnUHJvZHVjdFNhbGUnXSA9IFtdO1xyXG4gICAgICAgICAgICB0aGlzLnJqT2JqZWN0WydNb2RpZmllckl0ZW0nXSA9IFtdO1xyXG5cclxuICAgICAgICAgICAgdGhpcy50cmFuc2FjdGlvbkRvY3VtZW50LmJhc2tldC5wcm9kdWN0cy5mb3JFYWNoKChlbGVtZW50OiBhbnkpID0+IHtcclxuICAgICAgICAgICAgICAgIGxldCBsaW5lRGlzY291bnQgPSBbXTtcclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLnRyYW5zYWN0aW9uRG9jdW1lbnQuYmFza2V0LmxpbmVEaXNjb3VudCAmJiB0aGlzLnRyYW5zYWN0aW9uRG9jdW1lbnQuYmFza2V0LmxpbmVEaXNjb3VudC5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbGluZURpc2NvdW50ID0gdGhpcy50cmFuc2FjdGlvbkRvY3VtZW50LmJhc2tldC5saW5lRGlzY291bnQuZmlsdGVyKCh4OiBhbnkpID0+IHguaXRlbUxpbmVJZCA9PT0gZWxlbWVudC5pdGVtTGluZUlkKTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAobGluZURpc2NvdW50Lmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaW5kZXggPSB0aGlzLnRyYW5zYWN0aW9uRG9jdW1lbnQuYmFza2V0LmxpbmVEaXNjb3VudC5pbmRleE9mKGxpbmVEaXNjb3VudFswXSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpbmRleCA+IC0xKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnRyYW5zYWN0aW9uRG9jdW1lbnQuYmFza2V0LmxpbmVEaXNjb3VudC5zcGxpY2UoaW5kZXgsIDEpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgbGV0IGRhdGEgPSB0aGlzLmFkZFByb2R1Y3QoZWxlbWVudCwgKGxpbmVEaXNjb3VudC5sZW5ndGggPiAwID8gbGluZURpc2NvdW50WzBdIDogbnVsbCkpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5yak9iamVjdFsnUHJvZHVjdFNhbGUnXS5wdXNoKGRhdGEpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5nZXRNb2RpZmllckl0ZW0obGluZURpc2NvdW50Lmxlbmd0aCA+IDAgPyBsaW5lRGlzY291bnRbMF0gOiBudWxsLCBlbGVtZW50Lml0ZW1MaW5lSWQpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgbGV0IHRyYW5zYWN0aW9uUHJvbW90aW9uID0gW107XHJcbiAgICAgICAgICAgIGlmICh0aGlzLnRyYW5zYWN0aW9uRG9jdW1lbnQuYmFza2V0LnRyYW5zYWN0aW9uUHJvbW90aW9uICYmIHRoaXMudHJhbnNhY3Rpb25Eb2N1bWVudC5iYXNrZXQudHJhbnNhY3Rpb25Qcm9tb3Rpb24ubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgICAgdHJhbnNhY3Rpb25Qcm9tb3Rpb24gPSB0aGlzLnRyYW5zYWN0aW9uRG9jdW1lbnQuYmFza2V0LnRyYW5zYWN0aW9uUHJvbW90aW9uO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5nZXRUcmFuc2FjdGlvblByb21vdGlvbih0cmFuc2FjdGlvblByb21vdGlvbik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2UgaWYgKHRoaXMudHJhbnNhY3Rpb25Eb2N1bWVudC50eXBlID09PSBUUkFOU0FDVElPTl9UWVBFLlJFRlVORCkge1xyXG4gICAgICAgICAgICB0aGlzLnJqT2JqZWN0WydQcm9kdWN0UmV0dXJuJ10gPSBbXTtcclxuICAgICAgICAgICAgdGhpcy5yak9iamVjdFsnTW9kaWZpZXJJdGVtJ10gPSBbXTtcclxuICAgICAgICAgICAgdGhpcy50cmFuc2FjdGlvbkRvY3VtZW50LmJhc2tldC5wcm9kdWN0cy5mb3JFYWNoKChlbGVtZW50OiBhbnkpID0+IHtcclxuICAgICAgICAgICAgICAgIGxldCBkYXRhID0gdGhpcy5yZXR1cm5Qcm9kdWN0KGVsZW1lbnQsIChlbGVtZW50Lmhhc093blByb3BlcnR5KCdsaW5lRGlzY291bnQnKSA/IGVsZW1lbnQubGluZURpc2NvdW50IDogbnVsbCkpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5yak9iamVjdFsnUHJvZHVjdFJldHVybiddLnB1c2goZGF0YSk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmdldE1vZGlmaWVySXRlbShlbGVtZW50LmxpbmVEaXNjb3VudCwgZWxlbWVudC5pdGVtTGluZUlkKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLnRyYW5zYWN0aW9uRG9jdW1lbnQudHlwZSA9PT0gVFJBTlNBQ1RJT05fVFlQRS5TQUxFX1JFRlVORCkge1xyXG4gICAgICAgICAgICB0aGlzLnJqT2JqZWN0WydQcm9kdWN0UmV0dXJuJ10gPSBbXTtcclxuICAgICAgICAgICAgdGhpcy5yak9iamVjdFsnTW9kaWZpZXJJdGVtJ10gPSBbXTtcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIGxldCB0cmFuc2FjdGlvbkRvYzogYW55ID0gbmV3IFRyYW5zYWN0aW9uRG9jdW1lbnRCdWlsZGVyKCkuYmFza2V0KHRoaXMudHJhbnNhY3Rpb25Eb2N1bWVudC5jdXJyZW50VHJhbnNhY3Rpb25EZXRhaWxzKS5idWlsZCgpO1xyXG4gICAgICAgICAgICB0cmFuc2FjdGlvbkRvYy5iYXNrZXQucHJvZHVjdHMuZm9yRWFjaCgoZWxlbWVudDogYW55KSA9PiB7XHJcbiAgICAgICAgICAgICAgICBsZXQgZGF0YSA9IHRoaXMucmV0dXJuUHJvZHVjdChlbGVtZW50LCAoZWxlbWVudC5oYXNPd25Qcm9wZXJ0eSgnbGluZURpc2NvdW50JykgPyBlbGVtZW50LmxpbmVEaXNjb3VudCA6IG51bGwpKTtcclxuICAgICAgICAgICAgICAgIGxldCBvYmogPSB7XHJcbiAgICAgICAgICAgICAgICAgICAgXCJPcmlnaW5hbFJlY2VpcHRTdXBwbGllZFwiOiAwLFxyXG4gICAgICAgICAgICAgICAgICAgIFwiT3JpZ2luYWxCcmFuY2hJRFwiOiAwLFxyXG4gICAgICAgICAgICAgICAgICAgIFwiT3JpZ2luYWxUZXJtaW5hbE51bWJlclwiOiAwLFxyXG4gICAgICAgICAgICAgICAgICAgIFwiT3JpZ2luYWxUcmFuc2FjdGlvbk51bWJlclwiOiAwLFxyXG4gICAgICAgICAgICAgICAgICAgIFwiT3JpZ2luYWxDYXNoaWVyTnVtYmVyXCI6IDBcclxuICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgICBkYXRhWydSZXR1cm4nXSA9IHsuLi5kYXRhWydSZXR1cm4nXSwgLi4ub2JqfTtcclxuICAgICAgICAgICAgICAgIHRoaXMucmpPYmplY3RbJ1Byb2R1Y3RSZXR1cm4nXS5wdXNoKGRhdGEpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5nZXRNb2RpZmllckl0ZW0oZWxlbWVudC5saW5lRGlzY291bnQsIGVsZW1lbnQuaXRlbUxpbmVJZCk7XHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLnRyYW5zYWN0aW9uRG9jdW1lbnQudHlwZSA9PT0gVFJBTlNBQ1RJT05fVFlQRS5TQUxFX0VYQ0hBTkdFKSB7XHJcbiAgICAgICAgICAgIHRoaXMucmpPYmplY3RbJ1Byb2R1Y3RSZXR1cm4nXSA9IFtdO1xyXG4gICAgICAgICAgICB0aGlzLnJqT2JqZWN0WydQcm9kdWN0U2FsZSddID0gW107XHJcbiAgICAgICAgICAgIHRoaXMucmpPYmplY3RbJ01vZGlmaWVySXRlbSddID0gW107XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICBsZXQgdHJhbnNhY3Rpb25Eb2M6IGFueSA9IG5ldyBUcmFuc2FjdGlvbkRvY3VtZW50QnVpbGRlcigpLmJhc2tldCh0aGlzLnRyYW5zYWN0aW9uRG9jdW1lbnQuY3VycmVudFRyYW5zYWN0aW9uRGV0YWlscykuYnVpbGQoKTtcclxuICAgICAgICAgICAgdHJhbnNhY3Rpb25Eb2MuYmFza2V0LnByb2R1Y3RzLmZvckVhY2goKGVsZW1lbnQ6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKGVsZW1lbnQucmVmdW5kZWRRdWFudGl0eSA+IDApIHtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgcmV0dXJuUHJvZHVjdCA9IHRoaXMucmV0dXJuUHJvZHVjdChlbGVtZW50LCAoZWxlbWVudC5oYXNPd25Qcm9wZXJ0eSgnbGluZURpc2NvdW50JykgPyBlbGVtZW50LmxpbmVEaXNjb3VudCA6IG51bGwpKTtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgb2JqID0ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBcIk9yaWdpbmFsUmVjZWlwdFN1cHBsaWVkXCI6IDAsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiT3JpZ2luYWxCcmFuY2hJRFwiOiAwLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBcIk9yaWdpbmFsVGVybWluYWxOdW1iZXJcIjogMCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgXCJPcmlnaW5hbFRyYW5zYWN0aW9uTnVtYmVyXCI6IDAsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiT3JpZ2luYWxDYXNoaWVyTnVtYmVyXCI6IDBcclxuICAgICAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVyblByb2R1Y3RbJ1JldHVybiddID0gey4uLnJldHVyblByb2R1Y3RbJ1JldHVybiddLCAuLi5vYmp9O1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucmpPYmplY3RbJ1Byb2R1Y3RSZXR1cm4nXS5wdXNoKHJldHVyblByb2R1Y3QpO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgYWRkUHJvZHVjdCA9IHRoaXMuYWRkUHJvZHVjdChlbGVtZW50LCAoZWxlbWVudC5oYXNPd25Qcm9wZXJ0eSgnbGluZURpc2NvdW50JykgPyBlbGVtZW50LmxpbmVEaXNjb3VudCA6IG51bGwpKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnJqT2JqZWN0WydQcm9kdWN0U2FsZSddLnB1c2goYWRkUHJvZHVjdCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB0aGlzLmdldE1vZGlmaWVySXRlbShlbGVtZW50LmxpbmVEaXNjb3VudCwgZWxlbWVudC5pdGVtTGluZUlkKTtcclxuICAgICAgICAgICAgfSlcclxuXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfVxyXG5cclxuICAgIGdldEJhc2tldERpc2NvdW50KCkge1xyXG4gICAgICAgIGlmICghdGhpcy50cmFuc2FjdGlvbkRvY3VtZW50LmJhc2tldC50cmFuc2FjdGlvbkRpc2NvdW50KSByZXR1cm4gdGhpcztcclxuICAgICAgICB0aGlzLnJqT2JqZWN0WydCYXNrZXREaXNjb3VudCddID0gW107XHJcbiAgICAgICAgdGhpcy50cmFuc2FjdGlvbkRvY3VtZW50LmJhc2tldC50cmFuc2FjdGlvbkRpc2NvdW50LmZvckVhY2goKGVsZW1lbnQ6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICBsZXQgb2JqOiBhbnkgPSB7fVxyXG4gICAgICAgICAgICBvYmpbJ1hNTFNjaGVtYVZlcnNpb24nXSA9IFwiMVwiO1xyXG4gICAgICAgICAgICBvYmpbJ05ldFZhbHVlJ10gPSB0aGlzLmNvbnZlcnRUb1N0cmluZyhlbGVtZW50LmRpc2NvdW50QW1vdW50IDwgMCA/IGVsZW1lbnQuZGlzY291bnRBbW91bnQgOiAtZWxlbWVudC5kaXNjb3VudEFtb3VudCk7XHJcbiAgICAgICAgICAgIG9ialsnRWZmZWN0aXZlTmV0VmFsdWUnXSA9dGhpcy5jb252ZXJ0VG9TdHJpbmcoIGVsZW1lbnQuZGlzY291bnRBbW91bnQgPCAwID8gZWxlbWVudC5kaXNjb3VudEFtb3VudCA6IC1lbGVtZW50LmRpc2NvdW50QW1vdW50KTtcclxuICAgICAgICAgICAgb2JqWydEZXNjcmlwdGlvbiddID0gZWxlbWVudC5yZWFzb25EaXNwbGF5VGV4dDtcclxuICAgICAgICAgICAgb2JqWydVc2VySUQnXSA9IHRoaXMudHJhbnNhY3Rpb25Eb2N1bWVudC51c2VyTmFtZTtcclxuICAgICAgICAgICAgb2JqWydSZWFzb25Db2RlSUQnXSA9IGVsZW1lbnQucmVhc29uQ29kZTtcclxuICAgICAgICAgICAgb2JqWydEaXNjb3VudFR5cGUnXSA9IHRoaXMuY29udmVydFRvU3RyaW5nKGVsZW1lbnQuZGlzY291bnRUeXBlLnRvVXBwZXJDYXNlKCkgPT0gRElTQ09VTlRUWVBFLlBFUkNFTlQudG9VcHBlckNhc2UoKSA/IDAgOiAxKTsgLy8gdG9kbyAtIGNvbXBhcmUgdmFsdWVzIFxyXG4gICAgICAgICAgICBvYmpbJ1JvdW5kaW5nUnVsZSddID0gdGhpcy5jb252ZXJ0VG9TdHJpbmcoMik7XHJcbiAgICAgICAgICAgIG9ialsnTW9kaWZpZWRMaW5lTnVtYmVyJ10gPSBlbGVtZW50Lml0ZW1MaW5lSWRzOyAgICAgICAgICAgXHJcbiAgICAgICAgICAgIG9ialsnTGluZU51bWJlciddID0gdGhpcy5jb252ZXJ0VG9TdHJpbmcodGhpcy5nZW5lcmF0ZUxpbmVOdW1iZXIoKSk7IFxyXG4gICAgICAgICAgICAvLyBvYmpbJ0Rpc2NvdW50ZWRWYWx1ZSddID0gb2JqWydkaXNjb3VudEFtb3VudCddIC8vIHRvZG8gLSBjb25maXJtIHZhbHVlIGJlZm9yZSBkaXNjb3VudDtcclxuICAgICAgICAgICAgLy8gb2JqWydEaXNjb3VudFBlcmNlbnRhZ2UnXSA9IG9ialsnZGlzY291bnRBbW91bnQnXSAvIDEwMCA7IC8vIHRvZG8gLSBvcHRpb25hbFxyXG5cclxuICAgICAgICAgICAgdGhpcy5yak9iamVjdFsnQmFza2V0RGlzY291bnQnXS5wdXNoKG9iaik7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0TW9kaWZpZXJJdGVtKGRhdGE6IGFueSwgbGluZU5vOiBhbnkpIHtcclxuICAgICAgICBpZiAoZGF0YSAmJiBsaW5lTm8pIHtcclxuICAgICAgICAgICAgbGV0IG9iajogYW55ID0ge307XHJcbiAgICAgICAgICAgIG9iai5YTUxTY2hlbWFWZXJzaW9uID0gMTtcclxuICAgICAgICAgICAgb2JqLkxpbmVOdW1iZXIgPSB0aGlzLmdlbmVyYXRlTGluZU51bWJlcigpO1xyXG4gICAgICAgICAgICBvYmouTmV0VmFsdWUgPSAwO1xyXG4gICAgICAgICAgICBvYmouRWZmZWN0aXZlTmV0VmFsdWUgPSAwO1xyXG4gICAgICAgICAgICBvYmouRGVzY3JpcHRpb24gPSBkYXRhLnBlcmNlbnRhZ2VEaXNjb3VudFJlYXNvbk5hbWUgPyBkYXRhLnBlcmNlbnRhZ2VEaXNjb3VudFJlYXNvbk5hbWUgOiBkYXRhLnByaWNlT3ZlcnJpZGVSZWFzb25OYW1lO1xyXG4gICAgICAgICAgICBvYmouRGV2aWNlSUQgPSB0aGlzLmRldmljZUlkO1xyXG4gICAgICAgICAgICBvYmouVXNlcklEID0gdGhpcy50cmFuc2FjdGlvbkRvY3VtZW50LnVzZXJOYW1lO1xyXG4gICAgICAgICAgICBvYmouRGF0ZVRpbWVDcmVhdGVkID0gdGhpcy51cGRhdGVkQXQ7XHJcbiAgICAgICAgICAgIG9iai5BdXRob3Jpc2luZ1VzZXJJRCA9IHRoaXMudHJhbnNhY3Rpb25Eb2N1bWVudC51c2VyTmFtZTtcclxuICAgICAgICAgICAgb2JqLlJlYXNvbkNvZGVJRCA9IGRhdGEucGVyY2VudGFnZURpc2NvdW50UmVhc29uQ29kZSA/IGRhdGEucGVyY2VudGFnZURpc2NvdW50UmVhc29uQ29kZSA6IGRhdGEucHJpY2VPdmVycmlkZVJlYXNvbkNvZGU7XHJcbiAgICAgICAgICAgIG9iai5Nb2RpZmllZExpbmVOdW1iZXIgPSBsaW5lTm87XHJcbiAgICAgICAgICAgIG9iai5Nb2RpZmllZEluZGV4ID0gMTtcclxuXHJcbiAgICAgICAgICAgIHRoaXMucmpPYmplY3RbJ01vZGlmaWVySXRlbSddLnB1c2gob2JqKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0VHJhaWxlckluZm8oKSB7XHJcbiAgICAgICAgdGhpcy5yak9iamVjdFsnVHJhaWxlciddID0ge307XHJcbiAgICAgICAgdGhpcy5yak9iamVjdC5UcmFpbGVyLkRhdGVUaW1lQ29tcGxldGVkID0gdGhpcy51cGRhdGVkQXQ7XHJcbiAgICAgICAgdGhpcy5yak9iamVjdC5UcmFpbGVyLkNvbXBsZXRlZEJ5ID0ge307XHJcbiAgICAgICAgdGhpcy5yak9iamVjdC5UcmFpbGVyLkNvbXBsZXRlZEJ5LkRldmljZUlEID0gdGhpcy5kZXZpY2VJZDtcclxuICAgICAgICB0aGlzLnJqT2JqZWN0LlRyYWlsZXIuQ29tcGxldGVkQnkuQ2FzaGllcklEID0gdGhpcy5jYXNoaWVySWQ7XHJcbiAgICAgICAgdGhpcy5yak9iamVjdC5UcmFpbGVyLkNvbXBsZXRlZEJ5LlN0b3JlSUQgPSB0aGlzLnRyYW5zYWN0aW9uRG9jdW1lbnQuc3RvcmVJZDtcclxuICAgICAgICB0aGlzLnJqT2JqZWN0LlRyYWlsZXIuQ29tcGxldGVkQnkuQnJhbmNoSUQgPSB0aGlzLmJyYW5jaElkO1xyXG4gICAgICAgIHRoaXMucmpPYmplY3QuVHJhaWxlci5Db21wbGV0ZWRCeS5UZXJtaW5hbE51bWJlciA9IHRoaXMudHJhbnNhY3Rpb25Eb2N1bWVudC50ZXJtaW5hbElkO1xyXG4gICAgICAgIHRoaXMucmpPYmplY3QuVHJhaWxlci5Ub3RhbCA9IHRoaXMuY29udmVydFRvU3RyaW5nKHRoaXMudHJhbnNhY3Rpb25Eb2N1bWVudC5iYXNrZXRTdW1tYXJ5LmJhc2tldFRvdGFsICogMTAwKTtcclxuICAgICAgICB0aGlzLnJqT2JqZWN0LlRyYWlsZXIuSXRlbUNvdW50ID0gdGhpcy5pdGVtQ291bnQ7IC8vZ2l2ZXMgdG90YWwgY291bnQgZm9yIHByb2R1Y3RcclxuICAgICAgICB0aGlzLnJqT2JqZWN0LlRyYWlsZXIuSXRlbVF1YW50aXR5ID0gdGhpcy5jb252ZXJ0VG9TdHJpbmcodGhpcy50cmFuc2FjdGlvbkRvY3VtZW50LmJhc2tldFN1bW1hcnkudG90YWxJdGVtcyk7XHJcbiAgICAgICAgdGhpcy5yak9iamVjdC5UcmFpbGVyLk5ldEl0ZW1RdWFudGl0eSA9IHRoaXMuY29udmVydFRvU3RyaW5nKHRoaXMudHJhbnNhY3Rpb25Eb2N1bWVudC5iYXNrZXRTdW1tYXJ5LnRvdGFsSXRlbXMpO1xyXG4gICAgICAgIHRoaXMucmpPYmplY3QuVHJhaWxlci5UYXhUb3RhbCA9IHRoaXMuY29udmVydFRvU3RyaW5nKHRoaXMudHJhbnNhY3Rpb25Eb2N1bWVudC5iYXNrZXRTdW1tYXJ5LlZBVFRvdGFsKTtcclxuICAgICAgICB0aGlzLnJqT2JqZWN0LlRyYWlsZXIuU2VxdWVuY2VEZXZpY2VJRCA9IHRoaXMuZGV2aWNlSWQ7XHJcbiAgICAgICAgdGhpcy5yak9iamVjdC5UcmFpbGVyLlNlcXVlbmNlTnVtYmVyID0gJ3Nuc24nIC8vc3RhdGljIGZvciBub3dcclxuXHJcbiAgICAgICAgdGhpcy5yak9iamVjdFsnVHJhaWxlciddWydUYXhJdGVtJ10gPSBbXTtcclxuICAgICAgICB0aGlzLnRyYW5zYWN0aW9uRG9jdW1lbnQuYmFza2V0LnRheEJyZWFrZG93bi50YXhMaW5lcy5mb3JFYWNoKChlbGVtZW50OiBhbnkpID0+IHtcclxuICAgICAgICAgICAgbGV0IG9iajogYW55ID0ge307XHJcblxyXG4gICAgICAgICAgICBvYmpbJ1hNTFNjaGVtYVZlcnNpb24nXSA9IHRoaXMueG1sU2NoZW1hVmVyc2lvbjtcclxuICAgICAgICAgICAgb2JqWydUYXhSYXRlJ10gPSBlbGVtZW50LlZBVDtcclxuICAgICAgICAgICAgb2JqWydUYXhhYmxlVG90YWwnXSA9IHRoaXMuY29udmVydFRvU3RyaW5nKGVsZW1lbnQudGF4YWJsZUFtb3VudCk7XHJcbiAgICAgICAgICAgIG9ialsnVGF4VG90YWwnXSA9IHRoaXMuY29udmVydFRvU3RyaW5nKGVsZW1lbnQudGF4TGluZVRvdGFsKTtcclxuICAgICAgICAgICAgb2JqWydUYXhEZXNjcmlwdGlvbiddID0gdGhpcy5jb252ZXJ0VG9TdHJpbmcoZWxlbWVudC5WQVRDb2RlKTtcclxuICAgICAgICAgICAgb2JqWydUYXhJbmNsdWRlZCddID0gJzEnO1xyXG4gICAgICAgICAgICBvYmpbJ1RheFBlcmNlbnRhZ2UnXSA9IGVsZW1lbnQuVkFULnRvRml4ZWQoMik7IC8vIHRvZG9cclxuXHJcbiAgICAgICAgICAgIHRoaXMucmpPYmplY3RbJ1RyYWlsZXInXVsnVGF4SXRlbSddLnB1c2gob2JqKVxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICAvLyBUT0RPOiBtYWtlIFRyYWlsZXIgb2JqZWN0IGZyb20gcHJvbW90aW9uICAgICAgIFxyXG4gICAgICAgIGlmICh0aGlzLnRyYW5zYWN0aW9uRG9jdW1lbnQuYmFza2V0LmxpbmVQcm9tb3Rpb24ubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICB0aGlzLnJqT2JqZWN0WydUcmFpbGVyJ11bJ1Byb21vdGlvbkl0ZW0nXSA9IFtdO1xyXG4gICAgICAgICAgICB0aGlzLnRyYW5zYWN0aW9uRG9jdW1lbnQuYmFza2V0LmxpbmVQcm9tb3Rpb24uZm9yRWFjaCgoZWxlbWVudDogYW55KSA9PiB7XHJcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZygnZWxlbWVudCcsIGVsZW1lbnQpXHJcbiAgICAgICAgICAgICAgICBsZXQgb2JqOiBhbnkgPSB7fTtcclxuXHJcbiAgICAgICAgICAgICAgICBvYmpbJ1Byb21vdGlvbklEJ10gPSBlbGVtZW50LnByb21vdGlvbklkO1xyXG4gICAgICAgICAgICAgICAgb2JqWydQcm9tb3Rpb25TYXZpbmcnXSA9IGVsZW1lbnQucHJvbW90aW9uQW1vdW50IDwgMCA/IGVsZW1lbnQucHJvbW90aW9uQW1vdW50IDogLWVsZW1lbnQucHJvbW90aW9uQW1vdW50O1xyXG4gICAgICAgICAgICAgICAgb2JqWydQcm9tb3Rpb25RdWFudGl0eSddID0gXCJcIjsgLy8gdG9kbyAtIG5vdCBhdmFpYWxibGVcclxuICAgICAgICAgICAgICAgIG9ialsnUHJvbW90aW9uRGVzY3JpcHRpb24nXSA9IGVsZW1lbnQuZGlzcGxheVRleHQ7XHJcbiAgICAgICAgICAgICAgICBvYmpbJ1Byb21vdGlvbkhpdCddID0ge31cclxuICAgICAgICAgICAgICAgIG9ialsnUHJvbW90aW9uSGl0J11bJ1hNTFNjaGVtYVZlcnNpb24nXSA9IHRoaXMueG1sU2NoZW1hVmVyc2lvbjtcclxuICAgICAgICAgICAgICAgIG9ialsnUHJvbW90aW9uSGl0J11bJ0hpdE51bWJlciddID0gXCJcIjsgLy8gdG9kbztcclxuICAgICAgICAgICAgICAgIG9ialsnUHJvbW90aW9uSGl0J11bJ0hpdFF1YW50aXR5J10gPSBcIlwiOyAvLyB0b2RvO1xyXG4gICAgICAgICAgICAgICAgb2JqWydQcm9tb3Rpb25IaXQnXVsnSGl0U2F2aW5nJ10gPSBcIlwiOy8vIHRvZG87XHJcbiAgICAgICAgICAgICAgICBvYmpbJ1Byb21vdGlvbkhpdCddWydQcm9tb3Rpb25UcmlnZ2VyJ10gPSB7fTtcclxuICAgICAgICAgICAgICAgIGVsZW1lbnQudHJpZ2dlci5mb3JFYWNoKChzdWJFbGVtZW50OiBhbnkpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgcHJvZHVjdCA9IHRoaXMudHJhbnNhY3Rpb25Eb2N1bWVudC5iYXNrZXQucHJvZHVjdHMuZmluZCgoaXRlbTogYW55KSA9PiBpdGVtLml0ZW1MaW5lSWQgPT0gc3ViRWxlbWVudC5pdGVtTGluZUlkKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgb2JqWydQcm9tb3Rpb25IaXQnXVsnUHJvbW90aW9uVHJpZ2dlciddWydYTUxTY2hlbWFWZXJzaW9uJ10gPSB0aGlzLnhtbFNjaGVtYVZlcnNpb247XHJcbiAgICAgICAgICAgICAgICAgICAgb2JqWydQcm9tb3Rpb25IaXQnXVsnUHJvbW90aW9uVHJpZ2dlciddWydQcm9kdWN0SUQnXSA9IHByb2R1Y3QuU0tVO1xyXG4gICAgICAgICAgICAgICAgICAgIG9ialsnUHJvbW90aW9uSGl0J11bJ1Byb21vdGlvblRyaWdnZXInXVsnVW5pdFZhbHVlJ10gPSB0aGlzLmNvbnZlcnRUb1N0cmluZyhlbGVtZW50LnByb21vdGlvbkxpbmVQcmljZSAvIHByb2R1Y3QucXVhbnRpdHkpO1xyXG4gICAgICAgICAgICAgICAgICAgIG9ialsnUHJvbW90aW9uSGl0J11bJ1Byb21vdGlvblRyaWdnZXInXVsnTGluZU51bWJlciddID0gdGhpcy5jb252ZXJ0VG9TdHJpbmcoc3ViRWxlbWVudC5pdGVtTGluZUlkKTtcclxuICAgICAgICAgICAgICAgICAgICBvYmpbJ1Byb21vdGlvbkhpdCddWydQcm9tb3Rpb25UcmlnZ2VyJ11bJ1F1YW50aXR5J10gPSB0aGlzLmNvbnZlcnRUb1N0cmluZyhzdWJFbGVtZW50LnF1YW50aXR5LnRvRml4ZWQoMSkpO1xyXG4gICAgICAgICAgICAgICAgICAgIG9ialsnUHJvbW90aW9uSGl0J11bJ1Byb21vdGlvblRyaWdnZXInXVsnVGF4Q29kZSddID0gdGhpcy50cmFuc2FjdGlvbkRvY3VtZW50LmJhc2tldC50YXhCcmVha2Rvd24udGF4TGluZXMuZmluZCgoaXRlbTogYW55KSA9PiBpdGVtLml0ZW1MaW5lSWQgPT0gZWxlbWVudC5pdGVtTGluZUlkKS5WQVRDb2RlOyAvLyB0b2RvXHJcbiAgICAgICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLnJqT2JqZWN0WydUcmFpbGVyJ11bJ1Byb21vdGlvbkl0ZW0nXS5wdXNoKG9iaik7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH1cclxuXHJcbiAgICBnZXRUZW5kZXJJbmZvKCkge1xyXG4gICAgICAgIHRoaXMucmpPYmplY3RbJ0Nhc2hUZW5kZXInXSA9IFtdO1xyXG4gICAgICAgIGlmICh0aGlzLnRyYW5zYWN0aW9uRG9jdW1lbnQucGF5bWVudERldGFpbHMgJiYgdGhpcy50cmFuc2FjdGlvbkRvY3VtZW50LnBheW1lbnREZXRhaWxzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgdGhpcy50cmFuc2FjdGlvbkRvY3VtZW50LnBheW1lbnREZXRhaWxzLmZvckVhY2goKGVsZW1lbnQ6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKGVsZW1lbnQucGF5bWVudFR5cGUudG9VcHBlckNhc2UoKSA9PT0gJ0dJRlQgQ0FSRCcpIHtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgb2JqID0ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBYTUxTY2hlbWFWZXJzaW9uOiB0aGlzLnhtbFNjaGVtYVZlcnNpb24sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIExpbmVOdW1iZXI6IHRoaXMuZ2VuZXJhdGVMaW5lTnVtYmVyKCksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIE5ldFZhbHVlOiB0aGlzLmNvbnZlcnRUb1N0cmluZygtMSAqIHRoaXMucmVtb3ZlRGVjaW1hbCgoTWF0aC5yb3VuZChlbGVtZW50LmFtb3VudCkpKSksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIEVmZmVjdGl2ZU5ldFZhbHVlOiB0aGlzLmNvbnZlcnRUb1N0cmluZygtMSAqIHRoaXMucmVtb3ZlRGVjaW1hbCgoTWF0aC5yb3VuZChlbGVtZW50LmFtb3VudCkpKSksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIERlc2NyaXB0aW9uOiB0aGlzLmdldERlc2NyaXB0aW9uKGVsZW1lbnQpLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBEZXZpY2VJRDogdGhpcy5kZXZpY2VJZCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgVXNlcklEOiB0aGlzLnRyYW5zYWN0aW9uRG9jdW1lbnQudXNlck5hbWUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIERhdGVUaW1lQ3JlYXRlZDogdGhpcy51cGRhdGVkQXQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFRlbmRlclR5cGU6IGVsZW1lbnQuZXh0ZXJuYWxUZW5kZXJUeXBlID8gZWxlbWVudC5leHRlcm5hbFRlbmRlclR5cGUgOiAnJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgVGVuZGVyU3ViVHlwZTogZWxlbWVudC5leHRlcm5hbFN1YlRlbmRlclR5cGUgPyBlbGVtZW50LmV4dGVybmFsU3ViVGVuZGVyVHlwZSA6ICcnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBUZW5kZXJBbW91bnQ6IHRoaXMuY29udmVydFRvU3RyaW5nKC0xICogdGhpcy5yZW1vdmVEZWNpbWFsKChNYXRoLnJvdW5kKGVsZW1lbnQuYW1vdW50KSkpKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgQ3VycmVuY3lJRDogdGhpcy50cmFuc2FjdGlvbkRvY3VtZW50LmJhc2VDdXJyZW5jeSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgQ3VycmVuY3lEZXNjcmlwdGlvbjogdGhpcy50cmFuc2FjdGlvbkRvY3VtZW50LmJhc2VDdXJyZW5jeSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgR2lmdFZvdWNoZXJTYWxlc0FsbG93ZWQ6ICcnLC8vdG9kb1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBBbGxvd1JlY2hhcmdlYWJsZVZvdWNoZXJTYWxlczogJycsLy90b2RvXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIEdpZnRWb3VjaGVySUQ6ICcnXHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucmpPYmplY3RbJ0Nhc2hUZW5kZXInXS5wdXNoKG9iailcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCBvYmoxID0ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBYTUxTY2hlbWFWZXJzaW9uOiBcIjFcIixcclxuICAgICAgICAgICAgICAgICAgICAgICAgTGluZU51bWJlcjogdGhpcy5nZW5lcmF0ZUxpbmVOdW1iZXIoKSwvL3RvZG9cclxuICAgICAgICAgICAgICAgICAgICAgICAgTmV0VmFsdWU6IEpTT04uc3RyaW5naWZ5KC0xICogKE1hdGgucm91bmQoZWxlbWVudC5hbW91bnQpKSksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIEVmZmVjdGl2ZU5ldFZhbHVlOiBKU09OLnN0cmluZ2lmeSgtMSAqIChNYXRoLnJvdW5kKGVsZW1lbnQuYW1vdW50KSkpLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBEZXNjcmlwdGlvbjogdGhpcy5nZXREZXNjcmlwdGlvbihlbGVtZW50KSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgRGV2aWNlSUQ6IHRoaXMuZGV2aWNlSWQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFVzZXJJRDogdGhpcy50cmFuc2FjdGlvbkRvY3VtZW50LnVzZXJOYW1lLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBEYXRlVGltZUNyZWF0ZWQ6IHRoaXMudXBkYXRlZEF0LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBUZW5kZXJUeXBlOiBlbGVtZW50LmV4dGVybmFsVGVuZGVyVHlwZSA/IGVsZW1lbnQuZXh0ZXJuYWxUZW5kZXJUeXBlIDogJycsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFRlbmRlclN1YlR5cGU6IGVsZW1lbnQuZXh0ZXJuYWxTdWJUZW5kZXJUeXBlID8gZWxlbWVudC5leHRlcm5hbFN1YlRlbmRlclR5cGUgOiAnJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgVGVuZGVyQW1vdW50OiBKU09OLnN0cmluZ2lmeSgtMSAqIChNYXRoLnJvdW5kKGVsZW1lbnQuYW1vdW50KSkpLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBDdXJyZW5jeUlEOiB0aGlzLnRyYW5zYWN0aW9uRG9jdW1lbnQuYmFzZUN1cnJlbmN5LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBDdXJyZW5jeURlc2NyaXB0aW9uOiB0aGlzLnRyYW5zYWN0aW9uRG9jdW1lbnQuYmFzZUN1cnJlbmN5LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBJbmNsdWRlSW5UcmFuc2FjdGlvblRvdGFsQ2hlY2s6IFwiMVwiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBBbGxvd1JlY2hhcmdlYWJsZVZvdWNoZXJTYWxlczogXCIxXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIE9wZW5EcmF3ZXJBdEVuZDogXCIxXCJcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5yak9iamVjdFsnQ2FzaFRlbmRlciddLnB1c2gob2JqMSlcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfVxyXG5cclxuICAgIHNldExpbmVOdW1iZXJGb3JQcm9kdWN0cygpIHtcclxuICAgICAgICBsZXQgaXRlbUxpbmVJZEFycmF5ID0gW107XHJcbiAgICAgICAgaXRlbUxpbmVJZEFycmF5ID0gdGhpcy50cmFuc2FjdGlvbkRvY3VtZW50LmJhc2tldC5wcm9kdWN0cy5tYXAoKHByb2R1Y3Q6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICByZXR1cm4gcGFyc2VJbnQocHJvZHVjdC5pdGVtTGluZUlkKTtcclxuICAgICAgICB9KVxyXG4gICAgICAgIHRoaXMubGFyZ2VzdE51bWJlciA9IGl0ZW1MaW5lSWRBcnJheS5yZWR1Y2UoKGE6IGFueSwgYjogYW55KSA9PiBNYXRoLm1heChhLCBiKSk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2VuZXJhdGVMaW5lTnVtYmVyKCkge1xyXG4gICAgICAgIHRoaXMubGFyZ2VzdE51bWJlciArPSAxO1xyXG4gICAgICAgIHRoaXMuaXRlbUNvdW50ICs9IDE7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMubGFyZ2VzdE51bWJlcjtcclxuICAgIH1cclxuXHJcbiAgICBpbml0aWxpemVJdGVtQ291bnQoKSB7XHJcbiAgICAgICAgdGhpcy5pdGVtQ291bnQgPSB0aGlzLnRyYW5zYWN0aW9uRG9jdW1lbnQuYmFza2V0LnByb2R1Y3RzLmxlbmd0aDtcclxuICAgIH1cclxuXHJcbiAgICBidWlsZCgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5yak9iamVjdDtcclxuICAgIH1cclxuXHJcbiAgICBnZXREZXNjcmlwdGlvbihlbGVtZW50OiBhbnkpIHtcclxuICAgICAgICBpZiAoZWxlbWVudC5wYXltZW50VHlwZS50b1VwcGVyQ2FzZSgpID09PSAnQ0FSRCcpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGVsZW1lbnQuY2FyZFR5cGVcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHJldHVybiBlbGVtZW50LnBheW1lbnRUeXBlO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBzZXREZXZpY2VJbmZvKGlkOiBhbnkpIHtcclxuICAgICAgICB0aGlzLmRldmljZUlkID0gaWRcclxuICAgICAgICByZXR1cm4gdGhpc1xyXG4gICAgfVxyXG5cclxuICAgIHJlbW92ZURlY2ltYWwodmFsdWU6IG51bWJlcikge1xyXG4gICAgICAgIHJldHVybiB2YWx1ZSAqIDEwMDtcclxuICAgIH1cclxuXHJcbiAgICBzZXRUcmFuc2FjdGlvbk51bWJlcih2YWx1ZTogYW55KSB7XHJcbiAgICAgICAgdGhpcy50cmFuc2FjdGlvbk51bWJlciA9IHZhbHVlO1xyXG4gICAgICAgIHJldHVybiB0aGlzXHJcbiAgICB9XHJcblxyXG4gICAgc2V0TWFuaWZlc3RWZXJzaW9uKHZhbHVlOiBhbnkpIHtcclxuICAgICAgICB0aGlzLm1hbmlmZXN0VmVyc2lvbiA9IHZhbHVlO1xyXG4gICAgICAgIHJldHVybiB0aGlzXHJcbiAgICB9XHJcblxyXG4gICAgc2V0RGF0YWJhc2VTY2hlbWFWZXJzaW9uKHZhbHVlOiBhbnkpIHtcclxuICAgICAgICB0aGlzLmRhdGFiYXNlU2NoZW1hVmVyc2lvbiA9IHZhbHVlO1xyXG4gICAgICAgIHJldHVybiB0aGlzXHJcbiAgICB9XHJcblxyXG4gICAgc2V0QmFza2V0VHlwZSh2YWx1ZTogYW55KSB7XHJcbiAgICAgICAgdGhpcy5iYXNrZXRUeXBlID0gdmFsdWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXNcclxuICAgIH1cclxuXHJcbiAgICBzZXRUcmFkaW5nUmVnaW9uSUQodmFsdWU6IGFueSkge1xyXG4gICAgICAgIHRoaXMudHJhZGluZ1JlZ2lvbklkID0gdmFsdWVcclxuICAgICAgICByZXR1cm4gdGhpc1xyXG4gICAgfVxyXG5cclxuICAgIHNldENvbXBhbnlJRCh2YWx1ZTogYW55KSB7XHJcbiAgICAgICAgdGhpcy5jb21wYW55SWQgPSB2YWx1ZVxyXG4gICAgICAgIHJldHVybiB0aGlzXHJcbiAgICB9XHJcblxyXG4gICAgc2V0VGF4TWV0aG9kSUQodmFsdWU6IGFueSkge1xyXG4gICAgICAgIHRoaXMudGF4TWV0aG9kSWQgPSB2YWx1ZVxyXG4gICAgICAgIHJldHVybiB0aGlzXHJcbiAgICB9XHJcblxyXG4gICAgc2V0TWFqb3JWZXJzaW9uKHZhbHVlOiBhbnkpIHtcclxuICAgICAgICB0aGlzLm1ham9yVmVyc2lvbiA9IHZhbHVlXHJcbiAgICAgICAgcmV0dXJuIHRoaXNcclxuICAgIH1cclxuXHJcbiAgICBzZXRNaW5vclZlcnNpb24odmFsdWU6IGFueSkge1xyXG4gICAgICAgIHRoaXMubWlub3JWZXJzaW9uID0gdmFsdWVcclxuICAgICAgICByZXR1cm4gdGhpc1xyXG4gICAgfVxyXG5cclxuICAgIHNldFhNTFNjaGVtYVZlcnNpb24odmFsdWU6IGFueSkge1xyXG4gICAgICAgIHRoaXMueG1sU2NoZW1hVmVyc2lvbiA9IHZhbHVlXHJcbiAgICAgICAgcmV0dXJuIHRoaXNcclxuICAgIH1cclxuXHJcbiAgICBzZXRFeHRlcm5hbFN0YXRlKHZhbHVlOiBhbnkpIHtcclxuICAgICAgICB0aGlzLmV4dGVybmFsU3RhdGUgPSB2YWx1ZVxyXG4gICAgICAgIHJldHVybiB0aGlzXHJcbiAgICB9XHJcblxyXG4gICAgc2V0Q2FzaGllcklEKCkge1xyXG4gICAgICAgIHRoaXMuY2FzaGllcklkID0gKHRoaXMudHJhbnNhY3Rpb25Eb2N1bWVudCAmJiB0aGlzLnRyYW5zYWN0aW9uRG9jdW1lbnQudXNlck5hbWUpID8gIHRoaXMudHJhbnNhY3Rpb25Eb2N1bWVudC51c2VyTmFtZSA6ICcnO1xyXG4gICAgICAgIHJldHVybiB0aGlzXHJcbiAgICB9XHJcblxyXG4gICAgc2V0VGVybWluYWxOdW1iZXIodmFsdWU6IGFueSkge1xyXG4gICAgICAgIHRoaXMudGVybWluYWxOdW1iZXIgPSB2YWx1ZTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH1cclxuXHJcbiAgICBzZXRCYXNrZXRMYW5ndWFnZUlEKHZhbHVlOiBhbnkpIHtcclxuICAgICAgICB0aGlzLmJhc2tldExhbmd1YWdlSWQgPSB2YWx1ZTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH1cclxuICAgIHNldEJhc2tldENvdW50cnlJRCh2YWx1ZTogYW55KSB7XHJcbiAgICAgICAgdGhpcy5iYXNrZXRDb3VudHJ5SWQgPSB2YWx1ZTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH1cclxuXHJcbiAgICBzZXRCYXNrZXRDdXJyZW5jeUlEKHZhbHVlOiBhbnkpIHtcclxuICAgICAgICB0aGlzLmJhc2tldEN1cnJlbmN5SWQgPSB2YWx1ZTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH1cclxuXHJcbiAgICBzZXRCcmFuY2hJRCh2YWx1ZTogYW55KSB7XHJcbiAgICAgICAgdGhpcy5icmFuY2hJZCA9IHZhbHVlO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfVxyXG5cclxuICAgIGdlbmVyYXRlSWQoZGF0ZTogYW55KSB7XHJcbiAgICAgICAgbGV0IG5ld0RhdGVUaW1lID0gZGF0ZS5yZXBsYWNlKC9bXjAtOV0vZywgJycpXHJcbiAgICAgICAgbGV0IGlkID0gKHRoaXMuZGV2aWNlSWQgKyAnfCcgKyBuZXdEYXRlVGltZSArICd8JyArIHRoaXMudHJhbnNhY3Rpb25OdW1iZXIpLnRvU3RyaW5nKCk7XHJcbiAgICAgICAgcmV0dXJuIGlkO1xyXG4gICAgfSBcclxuXHJcbiAgICBnZW5lcmF0ZVRpbWV6b25lb2Zmc2V0KGRhdGU6IGFueSkge1xyXG4gICAgICAgIGxldCB4ID0gZGF0ZSA/IGRhdGUgOiAnJztcclxuICAgICAgICByZXR1cm4gbmV3IERhdGUoeCkuZ2V0VGltZXpvbmVPZmZzZXQoKTtcclxuICAgIH1cclxuXHJcbiAgICBnZW5lcmF0ZUtleXdvcmQoKSB7XHJcbiAgICAgICAgbGV0IHggPSAodGhpcy5jb21wYW55SWQgKyAnfCcgKyB0aGlzLnRyYW5zYWN0aW9uRG9jdW1lbnQuc3RvcmVJZCArICd8JyArIHRoaXMudGVybWluYWxOdW1iZXIgKyAnfCcgKyB0aGlzLnRyYW5zYWN0aW9uTnVtYmVyKS50b1N0cmluZygpO1xyXG4gICAgICAgIHJldHVybiB4O1xyXG4gICAgfVxyXG5cclxuICAgIGdldFN0YXRlKCkge1xyXG4gICAgICAgIGlmICh0aGlzLnRyYW5zYWN0aW9uRG9jdW1lbnQub3BlcmF0aW9uU3RhdHVzID09PSAnUEFZX1NVQ0NFU1MnKSB7XHJcbiAgICAgICAgICAgIHJldHVybiAnQ29tcGxldGVkJztcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHJldHVybiAnQ2FuY2VsbGVkJztcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuUHJvZHVjdChlbGVtZW50OiBhbnksIGxpbmVEaXNjb3VudDogTGluZURpc2NvdW50KSB7XHJcbiAgICAgICAgbGV0IG9iajogYW55ID0ge31cclxuICAgICAgICBsZXQgdGF4VG90YWwgPSB0aGlzLnRyYW5zYWN0aW9uRG9jdW1lbnQuYmFza2V0Wyd0YXhCcmVha2Rvd24nXVsndGF4TGluZXMnXS5maW5kKChpdGVtOiBhbnkpID0+IGl0ZW0uaXRlbUxpbmVJZCA9PSBlbGVtZW50WydpdGVtTGluZUlkJ10pO1xyXG4gICAgICAgIG9ialsnWE1MU2NoZW1hVmVyc2lvbiddID0gdGhpcy54bWxTY2hlbWFWZXJzaW9uO1xyXG4gICAgICAgIG9ialsnTGluZU51bWJlciddID0gZWxlbWVudFsnaXRlbUxpbmVJZCddO1xyXG4gICAgICAgIG9ialsnTmV0VmFsdWUnXSA9IHRoaXMucmVtb3ZlRGVjaW1hbChlbGVtZW50WydyZWZ1bmRlZFRvdGFsJ10pO1xyXG4gICAgICAgIG9ialsnRWZmZWN0aXZlTmV0VmFsdWUnXSA9IHRoaXMucmVtb3ZlRGVjaW1hbChlbGVtZW50WydyZWZ1bmRlZFRvdGFsJ10pO1xyXG4gICAgICAgIG9ialsnRGVzY3JpcHRpb24nXSA9IGVsZW1lbnRbJ2Rlc2NyaXB0aW9uJ107XHJcbiAgICAgICAgb2JqWydEZXZpY2VJRCddID0gdGhpcy50cmFuc2FjdGlvbkRvY3VtZW50Wyd0ZXJtaW5hbElkJ107XHJcbiAgICAgICAgb2JqWydVc2VySUQnXSA9IHRoaXMudHJhbnNhY3Rpb25Eb2N1bWVudC51c2VyTmFtZTtcclxuICAgICAgICBvYmpbJ0RhdGVUaW1lQ3JlYXRlZCddID0gdGhpcy5jcmVhdGVkQXQ7XHJcbiAgICAgICAgb2JqWydFeHRlbmRlZFZhbHVlJ10gPSB0aGlzLnJlbW92ZURlY2ltYWwoZWxlbWVudFsndG90YWxMaW5lUHJpY2UnXSotMSk7XHJcbiAgICAgICAgb2JqWydVbml0UHJpY2UnXSA9IHRoaXMucmVtb3ZlRGVjaW1hbChlbGVtZW50WydwcmljZSddKTtcclxuICAgICAgICBvYmpbJ1F1YW50aXR5J10gPSB0aGlzLmdldFF1YW50aXR5KGVsZW1lbnQpO1xyXG4gICAgICAgIG9ialsnT3JpZ2luYWxUYXhBbW91bnRTZXQnXSA9IDE7XHJcbiAgICAgICAgb2JqWydQcm9kdWN0SUQnXSA9IGVsZW1lbnRbJ1NLVSddO1xyXG4gICAgICAgIG9ialsnSGFuZEtleWVkJ10gPSAxO1xyXG4gICAgICAgIG9ialsnTG9uZ0Rlc2NyaXB0aW9uJ10gPSBlbGVtZW50WydkZXNjcmlwdGlvbiddO1xyXG4gICAgICAgIG9ialsnUmV0dXJuJ10gPSB7fTtcclxuICAgICAgICBvYmpbJ1JldHVybiddWydSZXR1cm5SZWFzb25JRCddID0gZWxlbWVudFsncmVmdW5kZWRSZWFzb24nXTtcclxuICAgICAgICBvYmpbJ1JldHVybiddWydSZXR1cm5EZXNjcmlwdGlvbiddID0gZWxlbWVudFsncmVmdW5kZWRSZWFzb25EZXNjcmlwdGlvbiddO1xyXG4gICAgICAgIG9ialsnUmV0dXJuJ11bJ1JldHVyblRvU3RvY2snXSA9IHRoaXMuZ2V0UXVhbnRpdHkoZWxlbWVudCk7XHJcbiAgICAgICAgb2JqWydUYXhDb2RlJ10gPSB0aGlzLnRyYW5zYWN0aW9uRG9jdW1lbnQuYmFza2V0Wyd0YXhCcmVha2Rvd24nXVsndGF4TGluZXMnXS5maW5kKChpdGVtOiBhbnkpID0+IGl0ZW0uaXRlbUxpbmVJZCA9PSBlbGVtZW50WydpdGVtTGluZUlkJ10pLlZBVENvZGU7XHJcblxyXG4gICAgICAgIG9ialsnRGlzcGxheVRheENvZGUnXSA9ICcnOyAvLyB0b2RvXHJcbiAgICAgICAgb2JqWydQcm9kdWN0QXR0cmlidXRlcyddID0gJyc7IC8vdG9kbyAtIG5vdCByZXF1aXJlZFxyXG4gICAgICAgIG9ialsnUGVyaXNoYWJsZSddID0gdGhpcy5nZXRBdHRyaWJ1dGVzKCk7XHJcbiAgICAgICAgb2JqWydNTUdyb3VwSUQnXSA9IHRoaXMuZ2V0QXR0cmlidXRlcygpO1xyXG4gICAgICAgIG9ialsnQ3VzdG9tZXJEZXRhaWxzJ10gPSBcIlwiOyAvLyB0b2RvIC0gYmxhbmtcclxuICAgICAgICBvYmpbJ1RvdGFsUHJvbW90aW9uU2F2aW5nJ10gPSBlbGVtZW50Wydwcm9tb3Rpb25BbW91bnQnXSB8fCAtMTsgLy8gVE9ET1xyXG4gICAgICAgIG9ialsnT3JpZ2luYWxUYXhBbW91bnQnXSA9IHRoaXMuY29udmVydFRvU3RyaW5nKHRoaXMuZ2V0T3JpZ2luYWxUYXgoZWxlbWVudCx0YXhUb3RhbC5WQVQpICogLTEpXHJcbiAgICAgICAgb2JqWyd0YXhBbW91bnQnXSA9IHRheFRvdGFsLnRheExpbmVUb3RhbCA8IDAgPyh0YXhUb3RhbC50YXhMaW5lVG90YWwpIDogKC10YXhUb3RhbC50YXhMaW5lVG90YWwpO1xyXG5cclxuICAgICAgICBpZiAobGluZURpc2NvdW50KSB7XHJcbiAgICAgICAgICAgIGlmIChsaW5lRGlzY291bnQucGVyY2VudGFnZURpc2NvdW50UmVhc29uTmFtZSAmJiBsaW5lRGlzY291bnQucGVyY2VudGFnZURpc2NvdW50UmVhc29uQ29kZSkge1xyXG4gICAgICAgICAgICAgICAgLy8gbGluZSBkaXNjb3VudFxyXG4gICAgICAgICAgICAgICAgb2JqWydEaXNjb3VudCddID0ge307XHJcbiAgICAgICAgICAgICAgICBvYmpbJ0Rpc2NvdW50J10uTW9kaWZpZXJWYWx1ZSA9IHRoaXMucmVtb3ZlRGVjaW1hbChsaW5lRGlzY291bnQudW5pdFByaWNlKSAqIC0xO1xyXG4gICAgICAgICAgICAgICAgb2JqWydEaXNjb3VudCddLk1vZGlmaWVyRGF0ZVRpbWUgPSBvYmouRGF0ZVRpbWVDcmVhdGVkO1xyXG4gICAgICAgICAgICAgICAgb2JqWydEaXNjb3VudCddLk1vZGlmaWVyUmVhc29uSUQgPSBsaW5lRGlzY291bnQucGVyY2VudGFnZURpc2NvdW50UmVhc29uQ29kZTtcclxuICAgICAgICAgICAgICAgIG9ialsnRGlzY291bnQnXS5Nb2RpZmllckRlc2NyaXB0aW9uID0gbGluZURpc2NvdW50LnBlcmNlbnRhZ2VEaXNjb3VudFJlYXNvbk5hbWU7XHJcbiAgICAgICAgICAgICAgICBvYmpbJ0Rpc2NvdW50J10uQXV0aG9yaXNpbmdVc2VySUQgPSB0aGlzLnRyYW5zYWN0aW9uRG9jdW1lbnQudXNlck5hbWU7XHJcbiAgICAgICAgICAgICAgICBvYmpbJ0Rpc2NvdW50J10uRGlzY291bnRUeXBlID0gbGluZURpc2NvdW50LmRpc2NvdW50VHlwZTtcclxuICAgICAgICAgICAgICAgIG9ialsnRGlzY291bnQnXS5YTUxTY2hlbWFWZXJzaW9uID0gMTtcclxuICAgICAgICAgICAgICAgIG9ialsnRGlzY291bnQnXS5PcmlnaW5hbFByaWNlID0gdGhpcy5yZW1vdmVEZWNpbWFsKGxpbmVEaXNjb3VudC5kaXNjb3VudEFtb3VudCArIChsaW5lRGlzY291bnQuZGlzY291bnRlZExpbmVQcmljZSB8fCAwKSk7XHJcbiAgICAgICAgICAgICAgICBvYmpbJ0Rpc2NvdW50J10uRGlzY291bnRlZFZhbHVlID0gdGhpcy5yZW1vdmVEZWNpbWFsKGxpbmVEaXNjb3VudC51bml0UHJpY2UpO1xyXG4gICAgICAgICAgICAgICAgb2JqWydEaXNjb3VudCddLkRpc2NvdW50UGVyY2VudGFnZSA9IGxpbmVEaXNjb3VudC5wZXJjZW50YWdlRGlzY291bnRWYWx1ZTtcclxuICAgICAgICAgICAgICAgIG9ialsnRGlzY291bnQnXS5Sb3VuZGluZ1J1bGUgPSAyO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAobGluZURpc2NvdW50LnByaWNlT3ZlcnJpZGVSZWFzb25Db2RlICYmIGxpbmVEaXNjb3VudC5wcmljZU92ZXJyaWRlUmVhc29uTmFtZSkge1xyXG4gICAgICAgICAgICAgICAgLy9wcmljZSBvdmVycmlkZVxyXG4gICAgICAgICAgICAgICAgb2JqWydQcmljZU92ZXJyaWRlJ10gPSB7fTtcclxuICAgICAgICAgICAgICAgIG9ialsnUHJpY2VPdmVycmlkZSddLk1vZGlmaWVyVmFsdWUgPSB0aGlzLnJlbW92ZURlY2ltYWwobGluZURpc2NvdW50LmRpc2NvdW50QW1vdW50KSAqIC0xO1xyXG4gICAgICAgICAgICAgICAgb2JqWydQcmljZU92ZXJyaWRlJ10uTW9kaWZpZXJEYXRlVGltZSA9IG9iai5EYXRlVGltZUNyZWF0ZWQ7XHJcbiAgICAgICAgICAgICAgICBvYmpbJ1ByaWNlT3ZlcnJpZGUnXS5Nb2RpZmllclJlYXNvbklEID0gbGluZURpc2NvdW50LnByaWNlT3ZlcnJpZGVSZWFzb25Db2RlO1xyXG4gICAgICAgICAgICAgICAgb2JqWydQcmljZU92ZXJyaWRlJ10uTW9kaWZpZXJSZWFzb25EZXNjcmlwdGlvbiA9IGxpbmVEaXNjb3VudC5wcmljZU92ZXJyaWRlUmVhc29uTmFtZTtcclxuICAgICAgICAgICAgICAgIG9ialsnUHJpY2VPdmVycmlkZSddLkF1dGhvcmlzaW5nVXNlcklEID0gdGhpcy50cmFuc2FjdGlvbkRvY3VtZW50LnVzZXJOYW1lO1xyXG4gICAgICAgICAgICAgICAgb2JqWydQcmljZU92ZXJyaWRlJ10uWE1MU2NoZW1hVmVyc2lvbiA9IDE7XHJcbiAgICAgICAgICAgICAgICBvYmpbJ1ByaWNlT3ZlcnJpZGUnXS5OZXdQcmljZSA9IHRoaXMucmVtb3ZlRGVjaW1hbChsaW5lRGlzY291bnQudW5pdFByaWNlKTtcclxuICAgICAgICAgICAgICAgIG9ialsnUHJpY2VPdmVycmlkZSddLk9yaWdpbmFsUHJpY2UgPSB0aGlzLnJlbW92ZURlY2ltYWwobGluZURpc2NvdW50LmRpc2NvdW50ZWRMaW5lUHJpY2UgfHwgMCArIGxpbmVEaXNjb3VudC5kaXNjb3VudEFtb3VudCk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIC8vdXBkYXRlIHRoZSBwcm9kdWN0IHByaWNlXHJcbiAgICAgICAgICAgIG9iai5OZXRWYWx1ZSA9ICgobGluZURpc2NvdW50LmRpc2NvdW50ZWRMaW5lUHJpY2UgfHwgMCkgKyBsaW5lRGlzY291bnQuZGlzY291bnRBbW91bnQpICogLTE7XHJcbiAgICAgICAgICAgIG9iai5FZmZlY3RpdmVOZXRWYWx1ZSA9ICgobGluZURpc2NvdW50LmRpc2NvdW50ZWRMaW5lUHJpY2UgfHwgMCkgKyBsaW5lRGlzY291bnQuZGlzY291bnRBbW91bnQpICogLTE7XHJcbiAgICAgICAgICAgIG9iai5FeHRlbmRlZFZhbHVlID0gKChsaW5lRGlzY291bnQuZGlzY291bnRlZExpbmVQcmljZSB8fCAwKSArIGxpbmVEaXNjb3VudC5kaXNjb3VudEFtb3VudCkgKiAtMTtcclxuICAgICAgICAgICAgb2JqLlVuaXRQcmljZSA9ICgobGluZURpc2NvdW50LmRpc2NvdW50ZWRMaW5lUHJpY2UgfHwgMCkgKyBsaW5lRGlzY291bnQuZGlzY291bnRBbW91bnQpICogLTE7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gb2JqO1xyXG4gICAgfVxyXG5cclxuICAgIGFkZFByb2R1Y3QoZWxlbWVudDogVFByb2R1Y3QsIGxpbmVEaXNjb3VudDogTGluZURpc2NvdW50KSB7XHJcbiAgICAgICAgbGV0IHRheFRvdGFsID0gdGhpcy50cmFuc2FjdGlvbkRvY3VtZW50LmJhc2tldFsndGF4QnJlYWtkb3duJ11bJ3RheExpbmVzJ10uZmluZCgoaXRlbTogYW55KSA9PiBpdGVtLml0ZW1MaW5lSWQgPT0gZWxlbWVudFsnaXRlbUxpbmVJZCddKTtcclxuICAgICAgICBsZXQgb2JqOiBhbnkgPSB7XHJcbiAgICAgICAgICAgIFhNTFNjaGVtYVZlcnNpb246IHRoaXMueG1sU2NoZW1hVmVyc2lvbixcclxuICAgICAgICAgICAgTGluZU51bWJlcjogZWxlbWVudC5pdGVtTGluZUlkLFxyXG4gICAgICAgICAgICBOZXRWYWx1ZTogdGhpcy5yZW1vdmVEZWNpbWFsKGVsZW1lbnQudG90YWxMaW5lUHJpY2UpLFxyXG4gICAgICAgICAgICBFZmZlY3RpdmVOZXRWYWx1ZTogdGhpcy5yZW1vdmVEZWNpbWFsKGVsZW1lbnQudG90YWxMaW5lUHJpY2UpLFxyXG4gICAgICAgICAgICBEZXNjcmlwdGlvbjogZWxlbWVudC5kZXNjcmlwdGlvbixcclxuICAgICAgICAgICAgRGV2aWNlSUQ6IHRoaXMuZGV2aWNlSWQsXHJcbiAgICAgICAgICAgIFVzZXJJRDogdGhpcy50cmFuc2FjdGlvbkRvY3VtZW50LnVzZXJOYW1lLFxyXG4gICAgICAgICAgICBEYXRlVGltZUNyZWF0ZWQ6IHRoaXMuY3JlYXRlZEF0LFxyXG4gICAgICAgICAgICBFeHRlbmRlZFZhbHVlOiB0aGlzLnJlbW92ZURlY2ltYWwoZWxlbWVudC5wcmljZSksXHJcbiAgICAgICAgICAgIFVuaXRQcmljZTogdGhpcy5yZW1vdmVEZWNpbWFsKGVsZW1lbnQucHJpY2UpLFxyXG4gICAgICAgICAgICBNTUdyb3VwSUQ6IHRoaXMuZ2V0QXR0cmlidXRlcygpLCAvL3RvZG9cclxuICAgICAgICAgICAgUXVhbnRpdHk6IGVsZW1lbnQucXVhbnRpdHkudG9GaXhlZCgxKSxcclxuICAgICAgICAgICAgU2FsZXNwZXJzb25JRDogdGhpcy50cmFuc2FjdGlvbkRvY3VtZW50LnVzZXJJZCxcclxuICAgICAgICAgICAgU2FsZXNwZXJzb25OYW1lOiB0aGlzLnRyYW5zYWN0aW9uRG9jdW1lbnQudXNlck5hbWUsXHJcbiAgICAgICAgICAgIFRheENvZGU6IHRoaXMudHJhbnNhY3Rpb25Eb2N1bWVudC5iYXNrZXRbJ3RheEJyZWFrZG93biddWyd0YXhMaW5lcyddLmZpbmQoKGl0ZW06IGFueSkgPT4gaXRlbS5pdGVtTGluZUlkID09IGVsZW1lbnRbJ2l0ZW1MaW5lSWQnXSkuVkFUQ29kZSxcclxuICAgICAgICAgICAgVGF4TW9kaWZpYWJsZTogMSwgLy90b2RvXHJcbiAgICAgICAgICAgIE9yaWdpbmFsVGF4QW1vdW50IDogIHRoaXMuY29udmVydFRvU3RyaW5nKHRoaXMuZ2V0T3JpZ2luYWxUYXgoZWxlbWVudCx0YXhUb3RhbC5WQVQpKSxcclxuICAgICAgICAgICAgVGF4QW1vdW50IDogIHRoaXMuY29udmVydFRvU3RyaW5nKHRheFRvdGFsLnRheExpbmVUb3RhbCksXHJcbiAgICAgICAgICAgIE9yaWdpbmFsVGF4QW1vdW50U2V0OiAxLC8vdG9kb1xyXG4gICAgICAgICAgICBQcm9kdWN0SUQ6IGVsZW1lbnQuU0tVLFxyXG4gICAgICAgICAgICBIYW5kS2V5ZWQ6IDEsLy90b2RvXHJcbiAgICAgICAgICAgIEN1c3RvbWVyRGV0YWlsczogXCJcIixcclxuICAgICAgICAgICAgUGVyaXNoYWJsZTogdGhpcy5nZXRBdHRyaWJ1dGVzKClcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGxpbmVEaXNjb3VudCkge1xyXG4gICAgICAgICAgICBpZiAobGluZURpc2NvdW50LnBlcmNlbnRhZ2VEaXNjb3VudFJlYXNvbk5hbWUgJiYgbGluZURpc2NvdW50LnBlcmNlbnRhZ2VEaXNjb3VudFJlYXNvbkNvZGUpIHtcclxuICAgICAgICAgICAgICAgIC8vIGxpbmUgZGlzY291bnRcclxuICAgICAgICAgICAgICAgIG9ialsnRGlzY291bnQnXSA9IHt9O1xyXG4gICAgICAgICAgICAgICAgb2JqWydEaXNjb3VudCddLk1vZGlmaWVyVmFsdWUgPSB0aGlzLnJlbW92ZURlY2ltYWwobGluZURpc2NvdW50LnVuaXRQcmljZSkgKiAtMTtcclxuICAgICAgICAgICAgICAgIG9ialsnRGlzY291bnQnXS5Nb2RpZmllckRhdGVUaW1lID0gb2JqLkRhdGVUaW1lQ3JlYXRlZDtcclxuICAgICAgICAgICAgICAgIG9ialsnRGlzY291bnQnXS5Nb2RpZmllclJlYXNvbklEID0gbGluZURpc2NvdW50LnBlcmNlbnRhZ2VEaXNjb3VudFJlYXNvbkNvZGU7XHJcbiAgICAgICAgICAgICAgICBvYmpbJ0Rpc2NvdW50J10uTW9kaWZpZXJEZXNjcmlwdGlvbiA9IGxpbmVEaXNjb3VudC5wZXJjZW50YWdlRGlzY291bnRSZWFzb25OYW1lO1xyXG4gICAgICAgICAgICAgICAgb2JqWydEaXNjb3VudCddLkF1dGhvcmlzaW5nVXNlcklEID0gdGhpcy50cmFuc2FjdGlvbkRvY3VtZW50LnVzZXJOYW1lO1xyXG4gICAgICAgICAgICAgICAgb2JqWydEaXNjb3VudCddLkRpc2NvdW50VHlwZSA9IGxpbmVEaXNjb3VudC5kaXNjb3VudFR5cGU7XHJcbiAgICAgICAgICAgICAgICBvYmpbJ0Rpc2NvdW50J10uWE1MU2NoZW1hVmVyc2lvbiA9IDE7XHJcbiAgICAgICAgICAgICAgICBvYmpbJ0Rpc2NvdW50J10uT3JpZ2luYWxQcmljZSA9IHRoaXMucmVtb3ZlRGVjaW1hbChsaW5lRGlzY291bnQuZGlzY291bnRBbW91bnQgKyAobGluZURpc2NvdW50LmRpc2NvdW50ZWRMaW5lUHJpY2UgfHwgMCkpO1xyXG4gICAgICAgICAgICAgICAgb2JqWydEaXNjb3VudCddLkRpc2NvdW50ZWRWYWx1ZSA9IHRoaXMucmVtb3ZlRGVjaW1hbChsaW5lRGlzY291bnQudW5pdFByaWNlKTtcclxuICAgICAgICAgICAgICAgIG9ialsnRGlzY291bnQnXS5EaXNjb3VudFBlcmNlbnRhZ2UgPSBsaW5lRGlzY291bnQucGVyY2VudGFnZURpc2NvdW50VmFsdWU7XHJcbiAgICAgICAgICAgICAgICBvYmpbJ0Rpc2NvdW50J10uUm91bmRpbmdSdWxlID0gMjtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKGxpbmVEaXNjb3VudC5wcmljZU92ZXJyaWRlUmVhc29uQ29kZSAmJiBsaW5lRGlzY291bnQucHJpY2VPdmVycmlkZVJlYXNvbk5hbWUpIHtcclxuICAgICAgICAgICAgICAgIC8vcHJpY2Ugb3ZlcnJpZGVcclxuICAgICAgICAgICAgICAgIG9ialsnUHJpY2VPdmVycmlkZSddID0ge307XHJcbiAgICAgICAgICAgICAgICBvYmpbJ1ByaWNlT3ZlcnJpZGUnXS5Nb2RpZmllclZhbHVlID0gdGhpcy5yZW1vdmVEZWNpbWFsKGxpbmVEaXNjb3VudC5kaXNjb3VudEFtb3VudCkgKiAtMTtcclxuICAgICAgICAgICAgICAgIG9ialsnUHJpY2VPdmVycmlkZSddLk1vZGlmaWVyRGF0ZVRpbWUgPSBvYmouRGF0ZVRpbWVDcmVhdGVkO1xyXG4gICAgICAgICAgICAgICAgb2JqWydQcmljZU92ZXJyaWRlJ10uTW9kaWZpZXJSZWFzb25JRCA9IGxpbmVEaXNjb3VudC5wcmljZU92ZXJyaWRlUmVhc29uQ29kZTtcclxuICAgICAgICAgICAgICAgIG9ialsnUHJpY2VPdmVycmlkZSddLk1vZGlmaWVyUmVhc29uRGVzY3JpcHRpb24gPSBsaW5lRGlzY291bnQucHJpY2VPdmVycmlkZVJlYXNvbk5hbWU7XHJcbiAgICAgICAgICAgICAgICBvYmpbJ1ByaWNlT3ZlcnJpZGUnXS5BdXRob3Jpc2luZ1VzZXJJRCA9IHRoaXMudHJhbnNhY3Rpb25Eb2N1bWVudC51c2VyTmFtZTtcclxuICAgICAgICAgICAgICAgIG9ialsnUHJpY2VPdmVycmlkZSddLlhNTFNjaGVtYVZlcnNpb24gPSAxO1xyXG4gICAgICAgICAgICAgICAgb2JqWydQcmljZU92ZXJyaWRlJ10uTmV3UHJpY2UgPSB0aGlzLnJlbW92ZURlY2ltYWwobGluZURpc2NvdW50LnVuaXRQcmljZSk7XHJcbiAgICAgICAgICAgICAgICBvYmpbJ1ByaWNlT3ZlcnJpZGUnXS5PcmlnaW5hbFByaWNlID0gdGhpcy5yZW1vdmVEZWNpbWFsKGxpbmVEaXNjb3VudC5kaXNjb3VudGVkTGluZVByaWNlIHx8IDAgKyBsaW5lRGlzY291bnQuZGlzY291bnRBbW91bnQpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAvL3VwZGF0ZSB0aGUgcHJvZHVjdCBwcmljZVxyXG4gICAgICAgICAgICBvYmpbJ05ldFZhbHVlJ10gPSAoKGxpbmVEaXNjb3VudC5kaXNjb3VudGVkTGluZVByaWNlIHx8IDApICsgbGluZURpc2NvdW50LmRpc2NvdW50QW1vdW50KTtcclxuICAgICAgICAgICAgb2JqWydFZmZlY3RpdmVOZXRWYWx1ZSddID0gKChsaW5lRGlzY291bnQuZGlzY291bnRlZExpbmVQcmljZSB8fCAwKSArIGxpbmVEaXNjb3VudC5kaXNjb3VudEFtb3VudCk7XHJcbiAgICAgICAgICAgIG9ialsnRXh0ZW5kZWRWYWx1ZSddID0gKChsaW5lRGlzY291bnQuZGlzY291bnRlZExpbmVQcmljZSB8fCAwKSArIGxpbmVEaXNjb3VudC5kaXNjb3VudEFtb3VudCk7XHJcbiAgICAgICAgICAgIG9ialsnVW5pdFByaWNlJ10gPSAoKGxpbmVEaXNjb3VudC5kaXNjb3VudGVkTGluZVByaWNlIHx8IDApICsgbGluZURpc2NvdW50LmRpc2NvdW50QW1vdW50KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBvYmo7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0T3JpZ2luYWxUYXgoZWxlbWVudDogVFByb2R1Y3QsIFZBVCkge1xyXG4gICAgICAgIGxldCBwcmljZWJlZm9yZXRheCA9IChlbGVtZW50LnByaWNlICogMTAwKS8oMTAwICsgVkFUIClcclxuICAgICAgICBsZXQgb3JpZ2luYWx0YXg9IGVsZW1lbnQucHJpY2UgLSBwcmljZWJlZm9yZXRheFxyXG4gICAgICAgIHJldHVybiBvcmlnaW5hbHRheDtcclxuICAgIH1cclxuXHJcbiAgICBjb252ZXJ0VG9TdHJpbmcodmFsdWU6IGFueSkge1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIHZhbHVlID0gSlNPTi5zdHJpbmdpZnkodmFsdWUpO1xyXG4gICAgICAgICAgICByZXR1cm4gdmFsdWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKHZhbHVlLCAnIGNhbiBub3QgYmUgY29udmVydGVkIGluIHN0cmluZycsIGUpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBnZW5lcmF0ZUR5bmFtaWNTdG9ja0xvb2tVcCgpIHtcclxuICAgICAgICBsZXQgeCA9ICcwJztcclxuICAgICAgICB0aGlzLnRyYW5zYWN0aW9uRG9jdW1lbnQuYmFza2V0LnByb2R1Y3RzLmZvckVhY2goKGVsZW1lbnQ6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICBpZiAoZWxlbWVudC5kZWxpdmVyeU1ldGhvZCA9PT0gJzEnIHx8IGVsZW1lbnQuZGVsaXZlcnlNZXRob2QgPT09ICcyJykge1xyXG4gICAgICAgICAgICAgICAgeCA9ICcxJztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHJldHVybiB4O1xyXG4gICAgfVxyXG5cclxuICAgIGdldEF0dHJpYnV0ZXMoKXtcclxuICAgICAgICBsZXQgbmFtZTogc3RyaW5nIHwgYW55W10gPSBbXVxyXG4gICAgICAgIHRoaXMudHJhbnNhY3Rpb25Eb2N1bWVudC5iYXNrZXQucHJvZHVjdHMuZm9yRWFjaCgoZWxlbWVudDogYW55KSA9PiB7XHJcbiAgICAgICAgICAgIGlmICggZWxlbWVudC5hdHRyaWJ1dGVzICYmIGVsZW1lbnQuYXR0cmlidXRlcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICBuYW1lID0gZWxlbWVudC5hdHRyaWJ1dGVzLmZpbHRlcigoeDogYW55KSA9PiB4Lm5hbWUudG9VcHBlckNhc2UoKSA9PT0gZWxlbWVudC5uYW1lLnRvVXBwZXJDYXNlKCkpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgaWYgKG5hbWUubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICByZXR1cm4gbmFtZVswXS52YWx1ZVxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNle1xyXG4gICAgICAgICAgICByZXR1cm4gXCJcIlxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBnZXREYXRlKGRhdGU6c3RyaW5nKXtcclxuICAgICAgICBsZXQgb2Zmc2V0ID0gdGhpcy5nZW5lcmF0ZVRpbWV6b25lb2Zmc2V0KGRhdGUpICogLTE7XHJcbiAgICAgICAgbGV0IG9mZnNldEhvdXJzID0gTWF0aC5hYnMoTWF0aC5mbG9vcihvZmZzZXQgLyA2MCkpOyAgICAgICAgXHJcblx0ICAgIGxldCBvZmZzZXRNaW51dGVzID0gTWF0aC5hYnMob2Zmc2V0KSAtIG9mZnNldEhvdXJzICogNjA7XHJcblxyXG4gICAgICAgIGxldCBvZmZzZXRTaWduID0gJysnO1xyXG4gICAgICAgIGlmIChvZmZzZXQgPCAwKSB7XHJcbiAgICAgICAgICAgIG9mZnNldFNpZ24gPSAnLSc7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBsZXQgbmV3ZGF0ZSA9IGRhdGUuc3Vic3RyaW5nKDAsMTkpO1xyXG4gICAgICAgIGNvbnN0IHggPSAobmV3ZGF0ZSsgb2Zmc2V0U2lnbiArU3RyaW5nKG9mZnNldEhvdXJzKS5wYWRTdGFydCgyLCAnMCcpKyc6JytTdHJpbmcob2Zmc2V0TWludXRlcykucGFkU3RhcnQoMiwgJzAnKSkudG9TdHJpbmcoKTtcclxuICAgICAgICByZXR1cm4geDsgICAgICAgIFxyXG4gICAgfVxyXG4gICAgXHJcbiAgICBnZXRUcmFuc2FjdGlvblByb21vdGlvbih0cmFuc2FjdGlvblByb21vdGlvbil7XHJcbiAgICAgICAgaWYodHJhbnNhY3Rpb25Qcm9tb3Rpb24gJiYgdHJhbnNhY3Rpb25Qcm9tb3Rpb24ubGVuZ3RoID4gMCl7XHJcbiAgICAgICAgICAgIHRoaXMucmpPYmplY3RbJ0Jhc2tldERpc2NvdW50J10gPSB7fTtcclxuICAgICAgICAgICAgdGhpcy5yak9iamVjdFsnQmFza2V0RGlzY291bnQnXVsnWE1MU2NoZW1hVmVyc2lvbiddID0gMTtcclxuICAgICAgICAgICAgdGhpcy5yak9iamVjdFsnQmFza2V0RGlzY291bnQnXVsnTGluZU51bWJlciddID0gdGhpcy5nZW5lcmF0ZUxpbmVOdW1iZXIoKTtcclxuICAgICAgICAgICAgdGhpcy5yak9iamVjdFsnQmFza2V0RGlzY291bnQnXVsnTmV0VmFsdWUnXSA9ICB0aGlzLnJlbW92ZURlY2ltYWwodHJhbnNhY3Rpb25Qcm9tb3Rpb25bMF0ucHJvbW90aW9uTGluZVByaWNlKSAqIC0xO1xyXG4gICAgICAgICAgICB0aGlzLnJqT2JqZWN0WydCYXNrZXREaXNjb3VudCddWydFZmZlY3RpdmVOZXRWYWx1ZSddID0gdGhpcy5yZW1vdmVEZWNpbWFsKHRyYW5zYWN0aW9uUHJvbW90aW9uWzBdLnByb21vdGlvbkxpbmVQcmljZSkgKiAtMTtcclxuICAgICAgICAgICAgdGhpcy5yak9iamVjdFsnQmFza2V0RGlzY291bnQnXVsnRGVzY3JpcHRpb24nXSA9IHRyYW5zYWN0aW9uUHJvbW90aW9uWzBdLnByb21vdGlvbkluZm87XHJcbiAgICAgICAgICAgIHRoaXMucmpPYmplY3RbJ0Jhc2tldERpc2NvdW50J11bJ0RldmljZUlEJ10gPSB0aGlzLmRldmljZUlkO1xyXG4gICAgICAgICAgICB0aGlzLnJqT2JqZWN0WydCYXNrZXREaXNjb3VudCddWydVc2VySUQnXSA9IHRoaXMudHJhbnNhY3Rpb25Eb2N1bWVudC51c2VyTmFtZTtcclxuICAgICAgICAgICAgdGhpcy5yak9iamVjdFsnQmFza2V0RGlzY291bnQnXVsnRGF0ZVRpbWVDcmVhdGVkJ10gPSB0aGlzLmNyZWF0ZWRBdDtcclxuICAgICAgICAgICAgdGhpcy5yak9iamVjdFsnQmFza2V0RGlzY291bnQnXVsnTW9kaWZpZWRMaW5lTnVtYmVyJ10gPSB0cmFuc2FjdGlvblByb21vdGlvblswXS5pdGVtTGluZUlkcztcclxuICAgICAgICAgICAgdGhpcy5yak9iamVjdFsnQmFza2V0RGlzY291bnQnXVsnUmVhc29uQ29kZUlEJ10gPSAwO1xyXG4gICAgICAgICAgICB0aGlzLnJqT2JqZWN0WydCYXNrZXREaXNjb3VudCddWydEaXNjb3VudFR5cGUnXSA9IHRyYW5zYWN0aW9uUHJvbW90aW9uWzBdLnByb21vdGlvblR5cGUgPT0gJ1RSQU5TQUNUSU9OX09GRicgPyAxIDogMDtcclxuICAgICAgICAgICAgdGhpcy5yak9iamVjdFsnQmFza2V0RGlzY291bnQnXVsnRGlzY291bnRQZXJjZW50YWdlJ10gPSAwOyAvL3RvZG9cclxuICAgICAgICAgICAgdGhpcy5yak9iamVjdFsnQmFza2V0RGlzY291bnQnXVsnRGlzY291bnRlZFZhbHVlJ10gPSAwOyAvL3RvZG9cclxuICAgICAgICAgICAgdGhpcy5yak9iamVjdFsnQmFza2V0RGlzY291bnQnXVsnUm91bmRpbmdSdWxlJ10gPSAyO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIFxyXG4gICAgZ2V0UXVhbnRpdHkoZWxlbWVudDogYW55KSB7XHJcbiAgICAgICAgbGV0IHF1YW50aXR5XHJcbiAgICAgICAgaWYodGhpcy50cmFuc2FjdGlvbkRvY3VtZW50LnVucmVmZXJlbmNlZFJlZnVuZCl7XHJcbiAgICAgICAgICAgIHF1YW50aXR5ID0gZWxlbWVudFsncXVhbnRpdHknXSA8IDAgPyBlbGVtZW50WydxdWFudGl0eSddLnRvRml4ZWQoMSkgOiAoLWVsZW1lbnRbJ3F1YW50aXR5J10pLnRvRml4ZWQoMSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2V7XHJcbiAgICAgICAgICAgIHF1YW50aXR5ID0gZWxlbWVudFsncmVmdW5kZWRRdWFudGl0eSddIDwgMCA/IGVsZW1lbnRbJ3JlZnVuZGVkUXVhbnRpdHknXS50b0ZpeGVkKDEpIDogKC1lbGVtZW50WydyZWZ1bmRlZFF1YW50aXR5J10pLnRvRml4ZWQoMSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBxdWFudGl0eTtcclxuICAgIH1cclxufVxyXG4iXX0=
1692
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUkotbWFwcGVyLmNsYXNzLmpzIiwic291cmNlUm9vdCI6Im5nOi8vQHBtY3JldGFpbC9tYXBwZXItbGlicmFyeS8iLCJzb3VyY2VzIjpbImxpYi9SSi1tYXBwZXIuY2xhc3MudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUEsT0FBTyxFQUFFLFlBQVksRUFBb0UsZ0JBQWdCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQTtBQUN6SSxPQUFPLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUMxRTtJQTJCSSw4QkFBWSxjQUFvQztRQVB4QyxjQUFTLEdBQUcsQ0FBQyxDQUFDO1FBQ2Qsa0JBQWEsR0FBRyxDQUFDLENBQUM7UUFJbEIsYUFBUSxHQUFRLEVBQUUsQ0FBQTtRQUd0QixJQUFJLGNBQWMsRUFBRTtZQUNoQixJQUFJLENBQUMsbUJBQW1CLEdBQUcsY0FBYyxDQUFDO1NBQzdDO2FBQU07WUFDSCxJQUFJLENBQUMsbUJBQW1CLEdBQUc7Z0JBQ3ZCLGFBQWEsRUFBRSxFQUFFO2dCQUNqQixvQkFBb0IsRUFBRSxFQUFFO2dCQUN4QixjQUFjLEVBQUUsRUFBRTtnQkFDbEIsUUFBUSxFQUFFLEVBQUU7Z0JBQ1osT0FBTyxFQUFFLEVBQUU7Z0JBQ1gsT0FBTyxFQUFFLEVBQUU7Z0JBQ1gsV0FBVyxFQUFFLEVBQUU7Z0JBQ2Ysa0JBQWtCLEVBQUUsRUFBRTtnQkFDdEIsUUFBUSxFQUFFLEVBQUU7Z0JBQ1osVUFBVSxFQUFFLEVBQUU7Z0JBQ2QsTUFBTSxFQUFFLEVBQUU7Z0JBQ1YsZ0JBQWdCLEVBQUUsU0FBUztnQkFDM0IsTUFBTSxFQUFFLEtBQUs7Z0JBQ2IsTUFBTSxFQUFFLG1CQUFBLEVBQUUsRUFBTztnQkFDakIsYUFBYSxFQUFFLG1CQUFBLEVBQUUsRUFBTztnQkFDeEIsWUFBWSxFQUFFLEVBQUU7Z0JBQ2hCLElBQUksRUFBRSxFQUFFO2dCQUNSLGVBQWUsRUFBRSxFQUFFO2dCQUNuQixTQUFTLEVBQUUsRUFBRTtnQkFDYixTQUFT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LGtCQUFrQixDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUM7U0FDbkk7UUFDRCxPQUFPLFFBQVEsQ0FBQztJQUNwQixDQUFDO0lBQ0wsMkJBQUM7QUFBRCxDQUFDLEFBbjdCRCxJQW03QkM7Ozs7Ozs7SUFqN0JHLG1EQUFpRDs7Ozs7SUFDakQsd0NBQXNCOzs7OztJQUN0QixpREFBK0I7Ozs7O0lBQy9CLCtDQUE2Qjs7Ozs7SUFDN0IscURBQW1DOzs7OztJQUNuQywwQ0FBd0I7Ozs7O0lBQ3hCLGdEQUE4Qjs7Ozs7SUFDOUIsNENBQTBCOzs7OztJQUMxQiw0Q0FBMEI7Ozs7O0lBQzFCLDZDQUEyQjs7Ozs7SUFDM0IseUNBQXVCOzs7OztJQUN2Qix5Q0FBdUI7Ozs7O0lBQ3ZCLDhDQUE0Qjs7Ozs7SUFDNUIsMkNBQXlCOzs7OztJQUN6QiwrQ0FBNkI7Ozs7O0lBQzdCLGdEQUE4Qjs7Ozs7SUFDOUIsK0NBQTZCOzs7OztJQUM3QixnREFBOEI7Ozs7O0lBQzlCLHlDQUFzQjs7Ozs7SUFDdEIsNkNBQTBCOzs7OztJQUMxQix3Q0FBc0I7Ozs7O0lBQ3RCLHlDQUF1Qjs7Ozs7SUFDdkIseUNBQXVCOzs7OztJQUN2Qix3Q0FBMEIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBESVNDT1VOVFRZUEUsIExpbmVEaXNjb3VudCwgVFByb2R1Y3QsIFRyYW5zYWN0aW9uRGlzY291bnQsIFRyYW5zYWN0aW9uRG9jdW1lbnQsIFRSQU5TQUNUSU9OX1RZUEUgfSBmcm9tIFwiLi9tYXBwZXItbGlicmFyeS5tb2RlbFwiXHJcbmltcG9ydCB7IFRyYW5zYWN0aW9uRG9jdW1lbnRCdWlsZGVyIH0gZnJvbSBcIi4vVHJhbnNhY3Rpb25Eb2N1bWVudEJ1aWxkZXJcIjtcclxuZXhwb3J0IGNsYXNzIFJKTWFwcGVyQnVpbGRlckNsYXNzIHtcclxuXHJcbiAgICBwcml2YXRlIHRyYW5zYWN0aW9uRG9jdW1lbnQ6IFRyYW5zYWN0aW9uRG9jdW1lbnQ7XHJcbiAgICBwcml2YXRlIGRldmljZUlkOiBhbnk7XHJcbiAgICBwcml2YXRlIHRyYW5zYWN0aW9uTnVtYmVyOiBhbnk7XHJcbiAgICBwcml2YXRlIG1hbmlmZXN0VmVyc2lvbjogYW55O1xyXG4gICAgcHJpdmF0ZSBkYXRhYmFzZVNjaGVtYVZlcnNpb246IGFueTtcclxuICAgIHByaXZhdGUgYmFza2V0VHlwZTogYW55O1xyXG4gICAgcHJpdmF0ZSB4bWxTY2hlbWFWZXJzaW9uOiBhbnk7XHJcbiAgICBwcml2YXRlIG1ham9yVmVyc2lvbjogYW55O1xyXG4gICAgcHJpdmF0ZSBtaW5vclZlcnNpb246IGFueTtcclxuICAgIHByaXZhdGUgZXh0ZXJuYWxTdGF0ZTogYW55O1xyXG4gICAgcHJpdmF0ZSBjYXNoaWVySWQ6IGFueTtcclxuICAgIHByaXZhdGUgY29tcGFueUlkOiBhbnk7XHJcbiAgICBwcml2YXRlIHRlcm1pbmFsTnVtYmVyOiBhbnk7XHJcbiAgICBwcml2YXRlIHRheE1ldGhvZElkOiBhbnk7XHJcbiAgICBwcml2YXRlIHRyYWRpbmdSZWdpb25JZDogYW55O1xyXG4gICAgcHJpdmF0ZSBiYXNrZXRDdXJyZW5jeUlkOiBhbnk7XHJcbiAgICBwcml2YXRlIGJhc2tldENvdW50cnlJZDogYW55O1xyXG4gICAgcHJpdmF0ZSBiYXNrZXRMYW5ndWFnZUlkOiBhbnk7XHJcbiAgICBwcml2YXRlIGl0ZW1Db3VudCA9IDA7XHJcbiAgICBwcml2YXRlIGxhcmdlc3ROdW1iZXIgPSAwO1xyXG4gICAgcHJpdmF0ZSBicmFuY2hJZDogYW55O1xyXG4gICAgcHJpdmF0ZSBjcmVhdGVkQXQ6IGFueTtcclxuICAgIHByaXZhdGUgdXBkYXRlZEF0IDphbnk7XHJcbiAgICBwcml2YXRlIHJqT2JqZWN0OiBhbnkgPSB7fVxyXG5cclxuICAgIGNvbnN0cnVjdG9yKHRyYW5zYWN0aW9uRG9jPzogVHJhbnNhY3Rpb25Eb2N1bWVudCkge1xyXG4gICAgICAgIGlmICh0cmFuc2FjdGlvbkRvYykge1xyXG4gICAgICAgICAgICB0aGlzLnRyYW5zYWN0aW9uRG9jdW1lbnQgPSB0cmFuc2FjdGlvbkRvYztcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLnRyYW5zYWN0aW9uRG9jdW1lbnQgPSB7XHJcbiAgICAgICAgICAgICAgICB0cmFuc2FjdGlvbklkOiBcIlwiLFxyXG4gICAgICAgICAgICAgICAgb2ZmbGluZVRyYW5zYWN0aW9uSWQ6IFwiXCIsXHJcbiAgICAgICAgICAgICAgICB0cmFuc2FjdGlvblJlZjogXCJcIixcclxuICAgICAgICAgICAgICAgIGRhdGVUaW1lOiBcIlwiLFxyXG4gICAgICAgICAgICAgICAgb3JnQ29kZTogXCJcIixcclxuICAgICAgICAgICAgICAgIHN0b3JlSWQ6IFwiXCIsXHJcbiAgICAgICAgICAgICAgICBzdG9yZU5vZGVJZDogXCJcIixcclxuICAgICAgICAgICAgICAgIHN0b3JlTm9kZVN0cnVjdHVyZTogXCJcIixcclxuICAgICAgICAgICAgICAgIGRldmljZUlkOiBcIlwiLFxyXG4gICAgICAgICAgICAgICAgdGVybWluYWxJZDogXCJcIixcclxuICAgICAgICAgICAgICAgIHVzZXJJZDogXCJcIixcclxuICAgICAgICAgICAgICAgIGluaXRpYXRpbmdNb2R1bGU6IFwiZUJhc2tldFwiLFxyXG4gICAgICAgICAgICAgICAgZXhwb3J0OiBmYWxzZSxcclxuICAgICAgICAgICAgICAgIGJhc2tldDoge30gYXMgYW55LFxyXG4gICAgICAgICAgICAgICAgYmFza2V0U3VtbWFyeToge30gYXMgYW55LFxyXG4gICAgICAgICAgICAgICAgYmFzZUN1cnJlbmN5OiBcIlwiLFxyXG4gICAgICAgICAgICAgICAgdHlwZTogXCJcIixcclxuICAgICAgICAgICAgICAgIG9wZXJhdGlvblN0YXR1czogXCJcIixcclxuICAgICAgICAgICAgICAgIGNyZWF0ZWRBdDogXCJcIixcclxuICAgICAgICAgICAgICAgIHVwZGF0ZWRBdDogXCJcIixcclxuICAgICAgICAgICAgICAgIGlkOiBcIlwiLFxyXG4gICAgICAgICAgICAgICAgY3VycmVudFRyYW5zYWN0aW9uRGV0YWlsczoge30gYXMgYW55LFxyXG4gICAgICAgICAgICAgICAgc2FsZVRvdGFsOiAwLFxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmluaXRpbGl6ZUl0ZW1Db3VudCgpO1xyXG4gICAgICAgIHRoaXMuc2V0TGluZU51bWJlckZvclByb2R1Y3RzKCk7XHJcbiAgICAgICAgdGhpcy5jcmVhdGVkQXQgPSB0aGlzLmdldERhdGUodGhpcy50cmFuc2FjdGlvbkRvY3VtZW50LmNyZWF0ZWRBdCk7XHJcbiAgICAgICAgdGhpcy51cGRhdGVkQXQgPSB0aGlzLmdldERhdGUodGhpcy50cmFuc2FjdGlvbkRvY3VtZW50LnVwZGF0ZWRBdCk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0UG9zYmFza2V0SW5mbygpIHtcclxuICAgICAgICB0aGlzLnJqT2JqZWN0WydLZXl3b3JkJ10gPSB0aGlzLmdlbmVyYXRlS2V5d29yZCgpO1xyXG4gICAgICAgIHRoaXMucmpPYmplY3RbJ0lEJ10gPSB0aGlzLmdlbmVyYXRlSWQodGhpcy5jcmVhdGVkQXQpO1xyXG4gICAgICAgIHRoaXMucmpPYmplY3RbJ1hNTFNjaGVtYVZlcnNpb24nXSA9ICcyJztcclxuICAgICAgICB0aGlzLnJqT2JqZWN0WydMYXN0VXBkYXRlZCddID0gdGhpcy51cGRhdGVkQXQ7XHJcbiAgICAgICAgdGhpcy5yak9iamVjdFsnTWFqb3JWZXJzaW9uJ10gPSB0aGlzLm1ham9yVmVyc2lvbjtcclxuICAgICAgICB0aGlzLnJqT2JqZWN0WydNaW5vclZlcnNpb24nXSA9IHRoaXMubWlub3JWZXJzaW9uO1xyXG4gICAgICAgIHRoaXMucmpPYmplY3RbJ01hbmlmZXN0VmVyc2lvbiddID0gdGhpcy5tYW5pZmVzdFZlcnNpb247XHJcbiAgICAgICAgdGhpcy5yak9iamVjdFsnRGF0YWJhc2VTY2hlbWFWZXJzaW9uJ10gPSB0aGlzLmRhdGFiYXNlU2NoZW1hVmVyc2lvbjtcclxuICAgICAgICB0aGlzLnJqT2JqZWN0WydCYXNrZXRUeXBlJ10gPSB0aGlzLmJhc2tldFR5cGU7XHJcbiAgICAgICAgdGhpcy5yak9iamVjdFsnU3RhdGUnXSA9IHRoaXMuZ2V0U3RhdGUoKTtcclxuICAgICAgICB0aGlzLnJqT2JqZWN0WydFeHRlcm5hbFN0YXRlJ10gPSB0aGlzLmV4dGVybmFsU3RhdGU7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfVxyXG5cclxuXHJcbiAgICBnZXRoZWFkZXJJbmZvKCkge1xyXG4gICAgICAgIHRoaXMucmpPYmplY3RbJ0hlYWRlciddID0ge307XHJcbiAgICAgICAgdGhpcy5yak9iamVjdFsnSGVhZGVyJ10uVGltZVpvbmVPZmZzZXQgPSB0aGlzLmNvbnZlcnRUb1N0cmluZyh0aGlzLmdlbmVyYXRlVGltZXpvbmVvZmZzZXQodGhpcy50cmFuc2FjdGlvbkRvY3VtZW50LmNyZWF0ZWRBdCkpO1xyXG4gICAgICAgIHRoaXMucmpPYmplY3RbJ0hlYWRlciddLkRhdGVUaW1lQ3JlYXRlZCA9IHRoaXMuY3JlYXRlZEF0O1xyXG4gICAgICAgIHRoaXMucmpPYmplY3RbJ0hlYWRlciddLk9yaWdpbmF0ZWRCeSA9IHt9O1xyXG4gICAgICAgIHRoaXMucmpPYmplY3RbJ0hlYWRlciddLk9yaWdpbmF0ZWRCeS5EZXZpY2VJRCA9IHRoaXMuZGV2aWNlSWQ7XHJcbiAgICAgICAgdGhpcy5yak9iamVjdFsnSGVhZGVyJ10uT3JpZ2luYXRlZEJ5LkNhc2hpZXJJRCA9IHRoaXMuY2FzaGllcklkO1xyXG4gICAgICAgIHRoaXMucmpPYmplY3RbJ0hlYWRlciddLk9yaWdpbmF0ZWRCeS5Db21wYW55SUQgPSB0aGlzLmNvbXBhbnlJZDtcclxuICAgICAgICB0aGlzLnJqT2JqZWN0WydIZWFkZXInXS5PcmlnaW5hdGVkQnkuU3RvcmVJRCA9IHRoaXMudHJhbnNhY3Rpb25Eb2N1bWVudC5zdG9yZUlkO1xyXG4gICAgICAgIHRoaXMucmpPYmplY3RbJ0hlYWRlciddLk9yaWdpbmF0ZWRCeS5CcmFuY2hJRCA9IHRoaXMuYnJhbmNoSWQ7XHJcbiAgICAgICAgdGhpcy5yak9iamVjdFsnSGVhZGVyJ10uT3JpZ2luYXRlZEJ5LlRlcm1pbmFsTnVtYmVyID0gdGhpcy50ZXJtaW5hbE51bWJlcjtcclxuICAgICAgICB0aGlzLnJqT2JqZWN0WydIZWFkZXInXS5PcmlnaW5hdGVkQnkuVHJhbnNhY3Rpb25OdW1iZXIgPSB0aGlzLnRyYW5zYWN0aW9uTnVtYmVyO1xyXG4gICAgICAgIHRoaXMucmpPYmplY3RbJ0hlYWRlciddLlRheE1ldGhvZElEID0gdGhpcy50YXhNZXRob2RJZDtcclxuICAgICAgICB0aGlzLnJqT2JqZWN0WydIZWFkZXInXS5EeW5hbWljU3RvY2tMb29rdXAgPSB0aGlzLmdlbmVyYXRlRHluYW1pY1N0b2NrTG9va1VwKCk7XHJcbiAgICAgICAgdGhpcy5yak9iamVjdFsnSGVhZGVyJ10uQmFza2V0TGFuZ3VhZ2VJRCA9IHRoaXMuYmFza2V0TGFuZ3VhZ2VJZDsgLy90b2RvXHJcbiAgICAgICAgdGhpcy5yak9iamVjdFsnSGVhZGVyJ10uQmFza2V0Q291bnRyeUlEID0gdGhpcy5iYXNrZXRDb3VudHJ5SWQ7IC8vdG9kb1xyXG4gICAgICAgIHRoaXMucmpPYmplY3RbJ0hlYWRlciddLkJhc2tldEN1cnJlbmN5SUQgPSB0aGlzLnRyYW5zYWN0aW9uRG9jdW1lbnQuYmFzZUN1cnJlbmN5O1xyXG4gICAgICAgIHRoaXMucmpPYmplY3RbJ0hlYWRlciddLlRyYWRpbmdSZWdpb25JRCA9IHRoaXMudHJhZGluZ1JlZ2lvbklkO1xyXG4gICAgICAgIHRoaXMucmpPYmplY3RbJ0hlYWRlciddLkV1cm96b25lID0gXCIgXCI7Ly91bmtub3duXHJcbiAgICAgICAgdGhpcy5yak9iamVjdFsnSGVhZGVyJ10uRXVyb0Jhc2VFeGNoYW5nZVJhdGUgPSBcIlwiOyAvL3Vua25vd25cclxuICAgICAgICB0aGlzLnJqT2JqZWN0WydIZWFkZXInXS5QcmludGFibGVOYW1lID0gdGhpcy50cmFuc2FjdGlvbkRvY3VtZW50LnVzZXJOYW1lOyAvL3Vua25vd25cclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9XHJcblxyXG4gICAgcmpNYXBwZXIoKSB7XHJcbiAgICAgICAgdmFyIHRyYW5zYWN0aW9uRGlzY291bnQ6YW55ID0gW10gO1xyXG4gICAgICAgIGlmICh0aGlzLnRyYW5zYWN0aW9uRG9jdW1lbnQuYmFza2V0LnRyYW5zYWN0aW9uRGlzY291bnQgJiYgdGhpcy50cmFuc2FjdGlvbkRvY3VtZW50LmJhc2tldC50cmFuc2FjdGlvbkRpc2NvdW50Lmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgIHRyYW5zYWN0aW9uRGlzY291bnQgPSB0aGlzLnRyYW5zYWN0aW9uRG9jdW1lbnQuYmFza2V0LnRyYW5zYWN0aW9uRGlzY291bnRcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHRoaXMudHJhbnNhY3Rpb25Eb2N1bWVudC50eXBlID09PSBUUkFOU0FDVElPTl9UWVBFLlNBTEUpIHtcclxuICAgICAgICAgICAgdGhpcy5yak9iamVjdFsnUHJvZHVjdFNhbGUnXSA9IFtdO1xyXG4gICAgICAgICAgICB0aGlzLnJqT2JqZWN0WydNb2RpZmllckl0ZW0nXSA9IFtdO1xyXG5cclxuICAgICAgICAgICAgdGhpcy50cmFuc2FjdGlvbkRvY3VtZW50LmJhc2tldC5wcm9kdWN0cy5mb3JFYWNoKChlbGVtZW50OiBhbnkpID0+IHtcclxuICAgICAgICAgICAgICAgIGxldCBsaW5lRGlzY291bnQgPSBbXTtcclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLnRyYW5zYWN0aW9uRG9jdW1lbnQuYmFza2V0LmxpbmVEaXNjb3VudCAmJiB0aGlzLnRyYW5zYWN0aW9uRG9jdW1lbnQuYmFza2V0LmxpbmVEaXNjb3VudC5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbGluZURpc2NvdW50ID0gdGhpcy50cmFuc2FjdGlvbkRvY3VtZW50LmJhc2tldC5saW5lRGlzY291bnQuZmlsdGVyKCh4OiBhbnkpID0+IHguaXRlbUxpbmVJZCA9PT0gZWxlbWVudC5pdGVtTGluZUlkKTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAobGluZURpc2NvdW50Lmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaW5kZXggPSB0aGlzLnRyYW5zYWN0aW9uRG9jdW1lbnQuYmFza2V0LmxpbmVEaXNjb3VudC5pbmRleE9mKGxpbmVEaXNjb3VudFswXSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpbmRleCA+IC0xKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnRyYW5zYWN0aW9uRG9jdW1lbnQuYmFza2V0LmxpbmVEaXNjb3VudC5zcGxpY2UoaW5kZXgsIDEpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgbGV0IGRhdGEgPSB0aGlzLmFkZFByb2R1Y3QoZWxlbWVudCwgKGxpbmVEaXNjb3VudC5sZW5ndGggPiAwID8gbGluZURpc2NvdW50WzBdIDogbnVsbCksKHRyYW5zYWN0aW9uRGlzY291bnQubGVuZ3RoID4gMCA/IHRyYW5zYWN0aW9uRGlzY291bnQgOiBudWxsKSk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnJqT2JqZWN0WydQcm9kdWN0U2FsZSddLnB1c2goZGF0YSk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmdldE1vZGlmaWVySXRlbShsaW5lRGlzY291bnQubGVuZ3RoID4gMCA/IGxpbmVEaXNjb3VudFswXSA6IG51bGwsIGVsZW1lbnQuaXRlbUxpbmVJZCk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICBsZXQgdHJhbnNhY3Rpb25Qcm9tb3Rpb24gPSBbXTtcclxuICAgICAgICAgICAgaWYgKHRoaXMudHJhbnNhY3Rpb25Eb2N1bWVudC5iYXNrZXQudHJhbnNhY3Rpb25Qcm9tb3Rpb24gJiYgdGhpcy50cmFuc2FjdGlvbkRvY3VtZW50LmJhc2tldC50cmFuc2FjdGlvblByb21vdGlvbi5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICB0cmFuc2FjdGlvblByb21vdGlvbiA9IHRoaXMudHJhbnNhY3Rpb25Eb2N1bWVudC5iYXNrZXQudHJhbnNhY3Rpb25Qcm9tb3Rpb247XHJcbiAgICAgICAgICAgICAgICB0aGlzLmdldFRyYW5zYWN0aW9uUHJvbW90aW9uKHRyYW5zYWN0aW9uUHJvbW90aW9uKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy50cmFuc2FjdGlvbkRvY3VtZW50LnR5cGUgPT09IFRSQU5TQUNUSU9OX1RZUEUuUkVGVU5EKSB7XHJcbiAgICAgICAgICAgIHRoaXMucmpPYmplY3RbJ1Byb2R1Y3RSZXR1cm4nXSA9IFtdO1xyXG4gICAgICAgICAgICB0aGlzLnJqT2JqZWN0WydNb2RpZmllckl0ZW0nXSA9IFtdOyAgICAgICAgICAgIFxyXG4gICAgICAgICAgICB0aGlzLnRyYW5zYWN0aW9uRG9jdW1lbnQuYmFza2V0LnByb2R1Y3RzLmZvckVhY2goKGVsZW1lbnQ6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgbGV0IGRhdGEgPSB0aGlzLnJldHVyblByb2R1Y3QoZWxlbWVudCwgKGVsZW1lbnQuaGFzT3duUHJvcGVydHkoJ2xpbmVEaXNjb3VudCcpID8gZWxlbWVudC5saW5lRGlzY291bnQgOiBudWxsKSwodHJhbnNhY3Rpb25EaXNjb3VudC5sZW5ndGggPiAwID8gdHJhbnNhY3Rpb25EaXNjb3VudCA6IG51bGwpKTtcclxuICAgICAgICAgICAgICAgIHRoaXMucmpPYmplY3RbJ1Byb2R1Y3RSZXR1cm4nXS5wdXNoKGRhdGEpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5nZXRNb2RpZmllckl0ZW0oZWxlbWVudC5saW5lRGlzY291bnQsIGVsZW1lbnQuaXRlbUxpbmVJZCk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy50cmFuc2FjdGlvbkRvY3VtZW50LnR5cGUgPT09IFRSQU5TQUNUSU9OX1RZUEUuU0FMRV9SRUZVTkQpIHtcclxuICAgICAgICAgICAgdGhpcy5yak9iamVjdFsnUHJvZHVjdFJldHVybiddID0gW107XHJcbiAgICAgICAgICAgIHRoaXMucmpPYmplY3RbJ01vZGlmaWVySXRlbSddID0gW107XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICBsZXQgdHJhbnNhY3Rpb25Eb2M6IGFueSA9IG5ldyBUcmFuc2FjdGlvbkRvY3VtZW50QnVpbGRlcigpLmJhc2tldCh0aGlzLnRyYW5zYWN0aW9uRG9jdW1lbnQuY3VycmVudFRyYW5zYWN0aW9uRGV0YWlscykuYnVpbGQoKTtcclxuICAgICAgICAgICAgdHJhbnNhY3Rpb25Eb2MuYmFza2V0LnByb2R1Y3RzLmZvckVhY2goKGVsZW1lbnQ6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgbGV0IGRhdGEgPSB0aGlzLnJldHVyblByb2R1Y3QoZWxlbWVudCwgKGVsZW1lbnQuaGFzT3duUHJvcGVydHkoJ2xpbmVEaXNjb3VudCcpID8gZWxlbWVudC5saW5lRGlzY291bnQgOiBudWxsKSwodHJhbnNhY3Rpb25EaXNjb3VudC5sZW5ndGggPiAwID8gdHJhbnNhY3Rpb25EaXNjb3VudCA6IG51bGwpKTtcclxuICAgICAgICAgICAgICAgIGxldCBvYmogPSB7XHJcbiAgICAgICAgICAgICAgICAgICAgXCJPcmlnaW5hbFJlY2VpcHRTdXBwbGllZFwiOiAwLFxyXG4gICAgICAgICAgICAgICAgICAgIFwiT3JpZ2luYWxCcmFuY2hJRFwiOiAwLFxyXG4gICAgICAgICAgICAgICAgICAgIFwiT3JpZ2luYWxUZXJtaW5hbE51bWJlclwiOiAwLFxyXG4gICAgICAgICAgICAgICAgICAgIFwiT3JpZ2luYWxUcmFuc2FjdGlvbk51bWJlclwiOiAwLFxyXG4gICAgICAgICAgICAgICAgICAgIFwiT3JpZ2luYWxDYXNoaWVyTnVtYmVyXCI6IDBcclxuICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgICBkYXRhWydSZXR1cm4nXSA9IHsuLi5kYXRhWydSZXR1cm4nXSwgLi4ub2JqfTtcclxuICAgICAgICAgICAgICAgIHRoaXMucmpPYmplY3RbJ1Byb2R1Y3RSZXR1cm4nXS5wdXNoKGRhdGEpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5nZXRNb2RpZmllckl0ZW0oZWxlbWVudC5saW5lRGlzY291bnQsIGVsZW1lbnQuaXRlbUxpbmVJZCk7XHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLnRyYW5zYWN0aW9uRG9jdW1lbnQudHlwZSA9PT0gVFJBTlNBQ1RJT05fVFlQRS5TQUxFX0VYQ0hBTkdFKSB7XHJcbiAgICAgICAgICAgIHRoaXMucmpPYmplY3RbJ1Byb2R1Y3RSZXR1cm4nXSA9IFtdO1xyXG4gICAgICAgICAgICB0aGlzLnJqT2JqZWN0WydQcm9kdWN0U2FsZSddID0gW107XHJcbiAgICAgICAgICAgIHRoaXMucmpPYmplY3RbJ01vZGlmaWVySXRlbSddID0gW107XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICBsZXQgdHJhbnNhY3Rpb25Eb2M6IGFueSA9IG5ldyBUcmFuc2FjdGlvbkRvY3VtZW50QnVpbGRlcigpLmJhc2tldCh0aGlzLnRyYW5zYWN0aW9uRG9jdW1lbnQuY3VycmVudFRyYW5zYWN0aW9uRGV0YWlscykuYnVpbGQoKTtcclxuICAgICAgICAgICAgdHJhbnNhY3Rpb25Eb2MuYmFza2V0LnByb2R1Y3RzLmZvckVhY2goKGVsZW1lbnQ6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKGVsZW1lbnQucmVmdW5kZWRRdWFudGl0eSA+IDApIHtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgcmV0dXJuUHJvZHVjdCA9IHRoaXMucmV0dXJuUHJvZHVjdChlbGVtZW50LCAoZWxlbWVudC5oYXNPd25Qcm9wZXJ0eSgnbGluZURpc2NvdW50JykgPyBlbGVtZW50LmxpbmVEaXNjb3VudCA6IG51bGwpLCh0cmFuc2FjdGlvbkRpc2NvdW50Lmxlbmd0aCA+IDAgPyB0cmFuc2FjdGlvbkRpc2NvdW50IDogbnVsbCkpO1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCBvYmogPSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiT3JpZ2luYWxSZWNlaXB0U3VwcGxpZWRcIjogMCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgXCJPcmlnaW5hbEJyYW5jaElEXCI6IDAsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiT3JpZ2luYWxUZXJtaW5hbE51bWJlclwiOiAwLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBcIk9yaWdpbmFsVHJhbnNhY3Rpb25OdW1iZXJcIjogMCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgXCJPcmlnaW5hbENhc2hpZXJOdW1iZXJcIjogMFxyXG4gICAgICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuUHJvZHVjdFsnUmV0dXJuJ10gPSB7Li4ucmV0dXJuUHJvZHVjdFsnUmV0dXJuJ10sIC4uLm9ian07XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5yak9iamVjdFsnUHJvZHVjdFJldHVybiddLnB1c2gocmV0dXJuUHJvZHVjdCk7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCBhZGRQcm9kdWN0ID0gdGhpcy5hZGRQcm9kdWN0KGVsZW1lbnQsIChlbGVtZW50Lmhhc093blByb3BlcnR5KCdsaW5lRGlzY291bnQnKSA/IGVsZW1lbnQubGluZURpc2NvdW50IDogbnVsbCkgLCh0cmFuc2FjdGlvbkRpc2NvdW50Lmxlbmd0aCA+IDAgPyB0cmFuc2FjdGlvbkRpc2NvdW50IDogbnVsbCkpO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucmpPYmplY3RbJ1Byb2R1Y3RTYWxlJ10ucHVzaChhZGRQcm9kdWN0KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHRoaXMuZ2V0TW9kaWZpZXJJdGVtKGVsZW1lbnQubGluZURpc2NvdW50LCBlbGVtZW50Lml0ZW1MaW5lSWQpO1xyXG4gICAgICAgICAgICB9KVxyXG5cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0QmFza2V0RGlzY291bnQoKSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLnRyYW5zYWN0aW9uRG9jdW1lbnQuYmFza2V0LnRyYW5zYWN0aW9uRGlzY291bnQpIHJldHVybiB0aGlzO1xyXG4gICAgICAgIHRoaXMucmpPYmplY3RbJ0Jhc2tldERpc2NvdW50J10gPSBbXTtcclxuICAgICAgICB0aGlzLnRyYW5zYWN0aW9uRG9jdW1lbnQuYmFza2V0LnRyYW5zYWN0aW9uRGlzY291bnQuZm9yRWFjaCgoZWxlbWVudDogYW55KSA9PiB7XHJcbiAgICAgICAgICAgIGxldCBvYmo6IGFueSA9IHt9XHJcbiAgICAgICAgICAgIG9ialsnWE1MU2NoZW1hVmVyc2lvbiddID0gdGhpcy54bWxTY2hlbWFWZXJzaW9uO1xyXG4gICAgICAgICAgICBvYmpbJ05ldFZhbHVlJ10gPSB0aGlzLmNvbnZlcnRUb1N0cmluZyhlbGVtZW50LmRpc2NvdW50QW1vdW50ICogLTEpO1xyXG4gICAgICAgICAgICBvYmpbJ0VmZmVjdGl2ZU5ldFZhbHVlJ10gPXRoaXMuY29udmVydFRvU3RyaW5nKCBlbGVtZW50LmRpc2NvdW50QW1vdW50ICogLTEpO1xyXG4gICAgICAgICAgICBvYmpbJ0Rlc2NyaXB0aW9uJ10gPSBlbGVtZW50LnJlYXNvbkRpc3BsYXlUZXh0O1xyXG4gICAgICAgICAgICBvYmpbJ1VzZXJJRCddID0gdGhpcy50cmFuc2FjdGlvbkRvY3VtZW50LnVzZXJOYW1lO1xyXG4gICAgICAgICAgICBvYmpbJ1JlYXNvbkNvZGVJRCddID0gZWxlbWVudC5yZWFzb25Db2RlO1xyXG4gICAgICAgICAgICBvYmpbJ0Rpc2NvdW50VHlwZSddID0gdGhpcy5jb252ZXJ0VG9TdHJpbmcoZWxlbWVudC5kaXNjb3VudFR5cGUudG9VcHBlckNhc2UoKSA9PSBESVNDT1VOVFRZUEUuUEVSQ0VOVC50b1VwcGVyQ2FzZSgpID8gMCA6IDEpOyBcclxuICAgICAgICAgICAgb2JqWydSb3VuZGluZ1J1bGUnXSA9IHRoaXMuY29udmVydFRvU3RyaW5nKDIpO1xyXG4gICAgICAgICAgICBvYmpbJ01vZGlmaWVkTGluZU51bWJlciddID0gZWxlbWVudC5pdGVtTGluZUlkczsgICAgICAgICAgIFxyXG4gICAgICAgICAgICBvYmpbJ0xpbmVOdW1iZXInXSA9IHRoaXMuY29udmVydFRvU3RyaW5nKHRoaXMuZ2VuZXJhdGVMaW5lTnVtYmVyKCkpOyBcclxuICAgICAgICAgICAgb2JqWydEaXNjb3VudGVkVmFsdWUnXSA9ICB0aGlzLnRyYW5zYWN0aW9uRG9jdW1lbnQuYmFza2V0U3VtbWFyeS5iYXNrZXRUb3RhbCArIHRoaXMudHJhbnNhY3Rpb25Eb2N1bWVudC5iYXNrZXRTdW1tYXJ5LmRpc2NvdW50VG90YWw7XHJcbiAgICAgICAgICAgIGlmKGVsZW1lbnQuZGlzY291bnRUeXBlLnRvVXBwZXJDYXNlKCkgPT0gRElTQ09VTlRUWVBFLlBFUkNFTlQudG9VcHBlckNhc2UoKSl7XHJcbiAgICAgICAgICAgICAgICBvYmpbJ0Rpc2NvdW50UGVyY2VudGFnZSddID0gIHRoaXMuY29udmVydFRvU3RyaW5nKChlbGVtZW50LmRpc2NvdW50QW1vdW50IC8gdGhpcy50cmFuc2FjdGlvbkRvY3VtZW50LmJhc2tldFN1bW1hcnkuYmFza2V0VG90YWwpLnRvRml4ZWQoMSkpXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYodGhpcy50cmFuc2FjdGlvbkRvY3VtZW50LnR5cGUgPT09ICdSRUZVTkQnKXtcclxuICAgICAgICAgICAgICAgIG9ialsnTmV0VmFsdWUnXSA9IHRoaXMuY29udmVydFRvU3RyaW5nKGVsZW1lbnQuZGlzY291bnRBbW91bnQgPCAwID8gLWVsZW1lbnQuZGlzY291bnRBbW91bnQgOiBlbGVtZW50LmRpc2NvdW50QW1vdW50KTtcclxuICAgICAgICAgICAgICAgIG9ialsnRWZmZWN0aXZlTmV0VmFsdWUnXSA9dGhpcy5jb252ZXJ0VG9TdHJpbmcoIGVsZW1lbnQuZGlzY291bnRBbW91bnQgPCAwID8gLWVsZW1lbnQuZGlzY291bnRBbW91bnQgOiBlbGVtZW50LmRpc2NvdW50QW1vdW50KTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgdGhpcy5yak9iamVjdFsnQmFza2V0RGlzY291bnQnXS5wdXNoKG9iaik7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0TW9kaWZpZXJJdGVtKGRhdGE6IGFueSwgbGluZU5vOiBhbnkpIHtcclxuICAgICAgICBpZiAoZGF0YSAmJiBsaW5lTm8pIHtcclxuICAgICAgICAgICAgbGV0IG9iajogYW55ID0ge307XHJcbiAgICAgICAgICAgIG9iai5YTUxTY2hlbWFWZXJzaW9uID0gMTtcclxuICAgICAgICAgICAgb2JqLkxpbmVOdW1iZXIgPSB0aGlzLmdlbmVyYXRlTGluZU51bWJlcigpO1xyXG4gICAgICAgICAgICBvYmouTmV0VmFsdWUgPSAwO1xyXG4gICAgICAgICAgICBvYmouRWZmZWN0aXZlTmV0VmFsdWUgPSAwO1xyXG4gICAgICAgICAgICBvYmouRGVzY3JpcHRpb24gPSBkYXRhLnBlcmNlbnRhZ2VEaXNjb3VudFJlYXNvbk5hbWUgPyBkYXRhLnBlcmNlbnRhZ2VEaXNjb3VudFJlYXNvbk5hbWUgOiBkYXRhLnByaWNlT3ZlcnJpZGVSZWFzb25OYW1lO1xyXG4gICAgICAgICAgICBvYmouRGV2aWNlSUQgPSB0aGlzLmRldmljZUlkO1xyXG4gICAgICAgICAgICBvYmouVXNlcklEID0gdGhpcy50cmFuc2FjdGlvbkRvY3VtZW50LnVzZXJOYW1lO1xyXG4gICAgICAgICAgICBvYmouRGF0ZVRpbWVDcmVhdGVkID0gdGhpcy51cGRhdGVkQXQ7XHJcbiAgICAgICAgICAgIG9iai5BdXRob3Jpc2luZ1VzZXJJRCA9IHRoaXMudHJhbnNhY3Rpb25Eb2N1bWVudC51c2VyTmFtZTtcclxuICAgICAgICAgICAgb2JqLlJlYXNvbkNvZGVJRCA9IGRhdGEucGVyY2VudGFnZURpc2NvdW50UmVhc29uQ29kZSA/IGRhdGEucGVyY2VudGFnZURpc2NvdW50UmVhc29uQ29kZSA6IGRhdGEucHJpY2VPdmVycmlkZVJlYXNvbkNvZGU7XHJcbiAgICAgICAgICAgIG9iai5Nb2RpZmllZExpbmVOdW1iZXIgPSBsaW5lTm87XHJcbiAgICAgICAgICAgIG9iai5Nb2RpZmllZEluZGV4ID0gMTtcclxuXHJcbiAgICAgICAgICAgIHRoaXMucmpPYmplY3RbJ01vZGlmaWVySXRlbSddLnB1c2gob2JqKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0VHJhaWxlckluZm8oKSB7XHJcbiAgICAgICAgdGhpcy5yak9iamVjdFsnVHJhaWxlciddID0ge307XHJcbiAgICAgICAgdGhpcy5yak9iamVjdC5UcmFpbGVyLkRhdGVUaW1lQ29tcGxldGVkID0gdGhpcy51cGRhdGVkQXQ7XHJcbiAgICAgICAgdGhpcy5yak9iamVjdC5UcmFpbGVyLkNvbXBsZXRlZEJ5ID0ge307XHJcbiAgICAgICAgdGhpcy5yak9iamVjdC5UcmFpbGVyLkNvbXBsZXRlZEJ5LkRldmljZUlEID0gdGhpcy5kZXZpY2VJZDtcclxuICAgICAgICB0aGlzLnJqT2JqZWN0LlRyYWlsZXIuQ29tcGxldGVkQnkuQ2FzaGllcklEID0gdGhpcy5jYXNoaWVySWQ7XHJcbiAgICAgICAgdGhpcy5yak9iamVjdC5UcmFpbGVyLkNvbXBsZXRlZEJ5LlN0b3JlSUQgPSB0aGlzLnRyYW5zYWN0aW9uRG9jdW1lbnQuc3RvcmVJZDtcclxuICAgICAgICB0aGlzLnJqT2JqZWN0LlRyYWlsZXIuQ29tcGxldGVkQnkuQnJhbmNoSUQgPSB0aGlzLmJyYW5jaElkO1xyXG4gICAgICAgIHRoaXMucmpPYmplY3QuVHJhaWxlci5Db21wbGV0ZWRCeS5UZXJtaW5hbE51bWJlciA9IHRoaXMudHJhbnNhY3Rpb25Eb2N1bWVudC50ZXJtaW5hbElkO1xyXG4gICAgICAgIHRoaXMucmpPYmplY3QuVHJhaWxlci5Ub3RhbCA9IHRoaXMuY29udmVydFRvU3RyaW5nKHRoaXMudHJhbnNhY3Rpb25Eb2N1bWVudC5iYXNrZXRTdW1tYXJ5LmJhc2tldFRvdGFsICogMTAwKTtcclxuICAgICAgICB0aGlzLnJqT2JqZWN0LlRyYWlsZXIuSXRlbUNvdW50ID0gdGhpcy5pdGVtQ291bnQ7IC8vZ2l2ZXMgdG90YWwgY291bnQgZm9yIHByb2R1Y3RcclxuICAgICAgICB0aGlzLnJqT2JqZWN0LlRyYWlsZXIuSXRlbVF1YW50aXR5ID0gdGhpcy5jb252ZXJ0VG9TdHJpbmcodGhpcy50cmFuc2FjdGlvbkRvY3VtZW50LmJhc2tldFN1bW1hcnkudG90YWxJdGVtcyk7XHJcbiAgICAgICAgdGhpcy5yak9iamVjdC5UcmFpbGVyLk5ldEl0ZW1RdWFudGl0eSA9IHRoaXMuY29udmVydFRvU3RyaW5nKHRoaXMudHJhbnNhY3Rpb25Eb2N1bWVudC5iYXNrZXRTdW1tYXJ5LnRvdGFsSXRlbXMpO1xyXG4gICAgICAgIHRoaXMucmpPYmplY3QuVHJhaWxlci5UYXhUb3RhbCA9IHRoaXMuY29udmVydFRvU3RyaW5nKHRoaXMudHJhbnNhY3Rpb25Eb2N1bWVudC5iYXNrZXRTdW1tYXJ5LlZBVFRvdGFsKTtcclxuICAgICAgICB0aGlzLnJqT2JqZWN0LlRyYWlsZXIuU2VxdWVuY2VEZXZpY2VJRCA9IHRoaXMuZGV2aWNlSWQ7XHJcbiAgICAgICAgdGhpcy5yak9iamVjdC5UcmFpbGVyLlNlcXVlbmNlTnVtYmVyID0gJ3Nuc24nIC8vc3RhdGljIGZvciBub3dcclxuXHJcbiAgICAgICAgdGhpcy5yak9iamVjdFsnVHJhaWxlciddWydUYXhJdGVtJ10gPSBbXTtcclxuICAgICAgICB0aGlzLnRyYW5zYWN0aW9uRG9jdW1lbnQuYmFza2V0LnRheEJyZWFrZG93bi50YXhMaW5lcy5mb3JFYWNoKChlbGVtZW50OiBhbnkpID0+IHtcclxuICAgICAgICAgICAgbGV0IG9iajogYW55ID0ge307XHJcblxyXG4gICAgICAgICAgICBvYmpbJ1hNTFNjaGVtYVZlcnNpb24nXSA9IHRoaXMueG1sU2NoZW1hVmVyc2lvbjtcclxuICAgICAgICAgICAgb2JqWydUYXhSYXRlJ10gPSBlbGVtZW50LlZBVDtcclxuICAgICAgICAgICAgb2JqWydUYXhhYmxlVG90YWwnXSA9IHRoaXMuY29udmVydFRvU3RyaW5nKGVsZW1lbnQudGF4YWJsZUFtb3VudCk7XHJcbiAgICAgICAgICAgIG9ialsnVGF4VG90YWwnXSA9IHRoaXMuY29udmVydFRvU3RyaW5nKGVsZW1lbnQudGF4TGluZVRvdGFsKTtcclxuICAgICAgICAgICAgb2JqWydUYXhEZXNjcmlwdGlvbiddID0gdGhpcy5jb252ZXJ0VG9TdHJpbmcoZWxlbWVudC5WQVRDb2RlKTtcclxuICAgICAgICAgICAgb2JqWydUYXhJbmNsdWRlZCddID0gJzEnO1xyXG4gICAgICAgICAgICBvYmpbJ1RheFBlcmNlbnRhZ2UnXSA9IGVsZW1lbnQuVkFULnRvRml4ZWQoMik7IC8vIHRvZG9cclxuXHJcbiAgICAgICAgICAgIHRoaXMucmpPYmplY3RbJ1RyYWlsZXInXVsnVGF4SXRlbSddLnB1c2gob2JqKVxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGlmICh0aGlzLnRyYW5zYWN0aW9uRG9jdW1lbnQuYmFza2V0LmxpbmVQcm9tb3Rpb24ubGVuZ3RoID4gMCB8fCB0aGlzLnRyYW5zYWN0aW9uRG9jdW1lbnQuYmFza2V0LmxpbmVQcm9tb3Rpb24ubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICB0aGlzLnJqT2JqZWN0WydUcmFpbGVyJ11bJ1Byb21vdGlvbkl0ZW0nXSA9IFtdO1xyXG4gICAgICAgICAgICBpZiAodGhpcy50cmFuc2FjdGlvbkRvY3VtZW50LmJhc2tldC5saW5lUHJvbW90aW9uLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICAgIHRoaXMudHJhbnNhY3Rpb25Eb2N1bWVudC5iYXNrZXQubGluZVByb21vdGlvbi5mb3JFYWNoKChlbGVtZW50OiBhbnkpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgb2JqOiBhbnkgPSB7fTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgb2JqWydQcm9tb3Rpb25JRCddID0gZWxlbWVudC5wcm9tb3Rpb25JZDtcclxuICAgICAgICAgICAgICAgICAgICBvYmpbJ1Byb21vdGlvblNhdmluZyddID0gZWxlbWVudC5wcm9tb3Rpb25BbW91bnQgPCAwID8gZWxlbWVudC5wcm9tb3Rpb25BbW91bnQgOiAtZWxlbWVudC5wcm9tb3Rpb25BbW91bnQ7XHJcbiAgICAgICAgICAgICAgICAgICAgb2JqWydQcm9tb3Rpb25RdWFudGl0eSddID0gXCIxXCI7XHJcbiAgICAgICAgICAgICAgICAgICAgb2JqWydQcm9tb3Rpb25EZXNjcmlwdGlvbiddID0gZWxlbWVudC5kaXNwbGF5VGV4dDtcclxuICAgICAgICAgICAgICAgICAgICBvYmpbJ1Byb21vdGlvbkhpdCddID0ge31cclxuICAgICAgICAgICAgICAgICAgICBvYmpbJ1Byb21vdGlvbkhpdCddWydYTUxTY2hlbWFWZXJzaW9uJ10gPSB0aGlzLnhtbFNjaGVtYVZlcnNpb247XHJcbiAgICAgICAgICAgICAgICAgICAgb2JqWydQcm9tb3Rpb25IaXQnXVsnSGl0TnVtYmVyJ10gPSBcIjFcIjtcclxuICAgICAgICAgICAgICAgICAgICBvYmpbJ1Byb21vdGlvbkhpdCddWydIaXRRdWFudGl0eSddID0gXCIxXCI7XHJcbiAgICAgICAgICAgICAgICAgICAgb2JqWydQcm9tb3Rpb25IaXQnXVsnSGl0U2F2aW5nJ10gPSBlbGVtZW50LnByb21vdGlvbkFtb3VudCA8IDAgPyBlbGVtZW50LnByb21vdGlvbkFtb3VudCA6IC1lbGVtZW50LnByb21vdGlvbkFtb3VudDtcclxuICAgICAgICAgICAgICAgICAgICBvYmpbJ1Byb21vdGlvbkhpdCddWydQcm9tb3Rpb25UcmlnZ2VyJ10gPSB7fTtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgcHJvZHVjdCA9IHRoaXMudHJhbnNhY3Rpb25Eb2N1bWVudC5iYXNrZXQucHJvZHVjdHMuZmluZCgoaXRlbTogYW55KSA9PiBpdGVtLml0ZW1MaW5lSWQgPT0gZWxlbWVudC5pdGVtTGluZUlkKTtcclxuICAgICAgICAgICAgICAgICAgICBvYmpbJ1Byb21vdGlvbkhpdCddWydQcm9tb3Rpb25UcmlnZ2VyJ11bJ1hNTFNjaGVtYVZlcnNpb24nXSA9IHRoaXMueG1sU2NoZW1hVmVyc2lvbjtcclxuICAgICAgICAgICAgICAgICAgICBvYmpbJ1Byb21vdGlvbkhpdCddWydQcm9tb3Rpb25UcmlnZ2VyJ11bJ1Byb2R1Y3RJRCddID0gcHJvZHVjdC5TS1U7XHJcbiAgICAgICAgICAgICAgICAgICAgb2JqWydQcm9tb3Rpb25IaXQnXVsnUHJvbW90aW9uVHJpZ2dlciddWydVbml0VmFsdWUnXSA9IHRoaXMuY29udmVydFRvU3RyaW5nKGVsZW1lbnQucHJvbW90aW9uTGluZVByaWNlIC8gcHJvZHVjdC5xdWFudGl0eSk7XHJcbiAgICAgICAgICAgICAgICAgICAgb2JqWydQcm9tb3Rpb25IaXQnXVsnUHJvbW90aW9uVHJpZ2dlciddWydMaW5lTnVtYmVyJ10gPSB0aGlzLmdldE51bWJlcihwcm9kdWN0LlNLVSk7XHJcbiAgICAgICAgICAgICAgICAgICAgb2JqWydQcm9tb3Rpb25IaXQnXVsnUHJvbW90aW9uVHJpZ2dlciddWydRdWFudGl0eSddID0gdGhpcy5jb252ZXJ0VG9TdHJpbmcocHJvZHVjdC5xdWFudGl0eS50b0ZpeGVkKDEpKTtcclxuICAgICAgICAgICAgICAgICAgICBvYmpbJ1Byb21vdGlvbkhpdCddWydQcm9tb3Rpb25UcmlnZ2VyJ11bJ1RheENvZGUnXSA9IHRoaXMudHJhbnNhY3Rpb25Eb2N1bWVudC5iYXNrZXQudGF4QnJlYWtkb3duLnRheExpbmVzLmZpbmQoKGl0ZW06IGFueSkgPT4gaXRlbS5pdGVtTGluZUlkID09IGVsZW1lbnQuaXRlbUxpbmVJZCkuVkFUQ29kZTsgLy8gdG9kb1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucmpPYmplY3RbJ1RyYWlsZXInXVsnUHJvbW90aW9uSXRlbSddLnB1c2gob2JqKTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAodGhpcy50cmFuc2FjdGlvbkRvY3VtZW50LmJhc2tldC50cmFuc2FjdGlvblByb21vdGlvbi5sZW5ndGggPiAwKSB7XHJcblxyXG4gICAgICAgICAgICAgICAgdGhpcy50cmFuc2FjdGlvbkRvY3VtZW50LmJhc2tldC50cmFuc2FjdGlvblByb21vdGlvbi5mb3JFYWNoKChlbGVtZW50OiBhbnkpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgb2JqOiBhbnkgPSB7fTtcclxuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZygnZWxlbWVudCcpO1xyXG4gICAgICAgICAgICAgICAgICAgIG9ialsnUHJvbW90aW9uSUQnXSA9IGVsZW1lbnQucHJvbW90aW9uSWQ7XHJcbiAgICAgICAgICAgICAgICAgICAgb2JqWydQcm9tb3Rpb25TYXZpbmcnXSA9IGVsZW1lbnQucHJvbW90aW9uQW1vdW50IDwgMCA/IGVsZW1lbnQucHJvbW90aW9uQW1vdW50IDogLWVsZW1lbnQucHJvbW90aW9uQW1vdW50O1xyXG4gICAgICAgICAgICAgICAgICAgIG9ialsnUHJvbW90aW9uUXVhbnRpdHknXSA9IFwiMVwiO1xyXG4gICAgICAgICAgICAgICAgICAgIG9ialsnUHJvbW90aW9uRGVzY3JpcHRpb24nXSA9IGVsZW1lbnQuZGlzcGxheVRleHQ7XHJcbiAgICAgICAgICAgICAgICAgICAgb2JqWydQcm9tb3Rpb25IaXQnXSA9IHt9XHJcbiAgICAgICAgICAgICAgICAgICAgb2JqWydQcm9tb3Rpb25IaXQnXVsnWE1MU2NoZW1hVmVyc2lvbiddID0gdGhpcy54bWxTY2hlbWFWZXJzaW9uO1xyXG4gICAgICAgICAgICAgICAgICAgIG9ialsnUHJvbW90aW9uSGl0J11bJ0hpdE51bWJlciddID0gXCIxXCI7XHJcbiAgICAgICAgICAgICAgICAgICAgb2JqWydQcm9tb3Rpb25IaXQnXVsnSGl0UXVhbnRpdHknXSA9IFwiMVwiO1xyXG4gICAgICAgICAgICAgICAgICAgIG9ialsnUHJvbW90aW9uSGl0J11bJ0hpdFNhdmluZyddID0gZWxlbWVudC5wcm9tb3Rpb25BbW91bnQgPCAwID8gZWxlbWVudC5wcm9tb3Rpb25BbW91bnQgOiAtZWxlbWVudC5wcm9tb3Rpb25BbW91bnQ7XHJcbiAgICAgICAgICAgICAgICAgICAgb2JqWydQcm9tb3Rpb25IaXQnXVsnUHJvbW90aW9uVHJpZ2dlciddID0gW107XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy50cmFuc2FjdGlvbkRvY3VtZW50LmJhc2tldC5wcm9kdWN0cy5mb3JFYWNoKChwcm9kdWN0OiBhbnkpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHByb21vdGlvblRyaWdnZXIgPSB7fTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZWxlbWVudC5pdGVtTGluZUlkcy5mb3JFYWNoKChpdGVtTGluZUlkOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChKU09OLnN0cmluZ2lmeShpdGVtTGluZUlkKSA9PT0gcHJvZHVjdC5pdGVtTGluZUlkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvbW90aW9uVHJpZ2dlclsnWE1MU2NoZW1hVmVyc2lvbiddID0gdGhpcy54bWxTY2hlbWFWZXJzaW9uO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb21vdGlvblRyaWdnZXJbJ1Byb2R1Y3RJRCddID0gcHJvZHVjdC5TS1U7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvbW90aW9uVHJpZ2dlclsnVW5pdFZhbHVlJ10gPSB0aGlzLmNvbnZlcnRUb1N0cmluZyhlbGVtZW50LnByb21vdGlvbkxpbmVQcmljZSAvIHByb2R1Y3QucXVhbnRpdHkpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb21vdGlvblRyaWdnZXJbJ0xpbmVOdW1iZXInXSA9IHRoaXMuZ2V0TnVtYmVyKHByb2R1Y3QuU0tVKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9tb3Rpb25UcmlnZ2VyWydRdWFudGl0eSddID0gdGhpcy5jb252ZXJ0VG9TdHJpbmcocHJvZHVjdC5xdWFudGl0eSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvbW90aW9uVHJpZ2dlclsnVGF4Q29kZSddID0gdGhpcy50cmFuc2FjdGlvbkRvY3VtZW50LmJhc2tldC50YXhCcmVha2Rvd24udGF4TGluZXMuZmluZCgoaXRlbTogYW55KSA9PiBpdGVtLml0ZW1MaW5lSWQgPT0gcHJvZHVjdC5pdGVtTGluZUlkKS5WQVRDb2RlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9ialsnUHJvbW90aW9uSGl0J11bJ1Byb21vdGlvblRyaWdnZXInXS5wdXNoKHByb21vdGlvblRyaWdnZXIpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnJqT2JqZWN0WydUcmFpbGVyJ11bJ1Byb21vdGlvbkl0ZW0nXS5wdXNoKG9iaik7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH1cclxuXHJcbiAgICBnZXRUZW5kZXJJbmZvKCkge1xyXG4gICAgICAgXHJcbiAgICAgICAgaWYgKHRoaXMudHJhbnNhY3Rpb25Eb2N1bWVudC5wYXltZW50RGV0YWlscyAmJiB0aGlzLnRyYW5zYWN0aW9uRG9jdW1lbnQucGF5bWVudERldGFpbHMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICB0aGlzLnRyYW5zYWN0aW9uRG9jdW1lbnQucGF5bWVudERldGFpbHMuZm9yRWFjaCgoZWxlbWVudDogYW55KSA9PiB7XHJcbiAgICAgICAgICAgIGlmKGVsZW1lbnQuZXh0ZXJuYWxUZW5kZXJLZXkpe1xyXG4gICAgICAgICAgICAgICAgdGhpcy5yak9iamVjdFtlbGVtZW50LmV4dGVybmFsVGVuZGVyS2V5XSA9IFtdO1xyXG4gICAgICAgICAgICAgICAgaWYgKGVsZW1lbnQucGF5bWVudFR5cGUudG9VcHBlckNhc2UoKSA9PT0gJ0dJRlQgQ0FSRCcpIHtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgb2JqID0ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBYTUxTY2hlbWFWZXJzaW9uOiB0aGlzLnhtbFNjaGVtYVZlcnNpb24sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIExpbmVOdW1iZXI6IHRoaXMuZ2VuZXJhdGVMaW5lTnVtYmVyKCksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIE5ldFZhbHVlOiB0aGlzLmNvbnZlcnRUb1N0cmluZygtMSAqIHRoaXMucmVtb3ZlRGVjaW1hbCgoTWF0aC5yb3VuZChlbGVtZW50LmFtb3VudCkpKSksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIEVmZmVjdGl2ZU5ldFZhbHVlOiB0aGlzLmNvbnZlcnRUb1N0cmluZygtMSAqIHRoaXMucmVtb3ZlRGVjaW1hbCgoTWF0aC5yb3VuZChlbGVtZW50LmFtb3VudCkpKSksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIERlc2NyaXB0aW9uOiB0aGlzLmdldERlc2NyaXB0aW9uKGVsZW1lbnQpLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBEZXZpY2VJRDogdGhpcy5kZXZpY2VJZCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgVXNlcklEOiB0aGlzLnRyYW5zYWN0aW9uRG9jdW1lbnQudXNlck5hbWUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIERhdGVUaW1lQ3JlYXRlZDogdGhpcy51cGRhdGVkQXQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFRlbmRlclR5cGU6IGVsZW1lbnQuZXh0ZXJuYWxUZW5kZXJUeXBlID8gZWxlbWVudC5leHRlcm5hbFRlbmRlclR5cGUgOiAnJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgVGVuZGVyU3ViVHlwZTogZWxlbWVudC5leHRlcm5hbFN1YlRlbmRlclR5cGUgPyBlbGVtZW50LmV4dGVybmFsU3ViVGVuZGVyVHlwZSA6ICcnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBUZW5kZXJBbW91bnQ6IHRoaXMuY29udmVydFRvU3RyaW5nKC0xICogdGhpcy5yZW1vdmVEZWNpbWFsKChNYXRoLnJvdW5kKGVsZW1lbnQuYW1vdW50KSkpKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgQ3VycmVuY3lJRDogdGhpcy50cmFuc2FjdGlvbkRvY3VtZW50LmJhc2VDdXJyZW5jeSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgQ3VycmVuY3lEZXNjcmlwdGlvbjogdGhpcy50cmFuc2FjdGlvbkRvY3VtZW50LmJhc2VDdXJyZW5jeSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgR2lmdFZvdWNoZXJTYWxlc0FsbG93ZWQ6ICcnLC8vdG9kb1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBBbGxvd1JlY2hhcmdlYWJsZVZvdWNoZXJTYWxlczogJycsLy90b2RvXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIEdpZnRWb3VjaGVySUQ6ICcnXHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucmpPYmplY3RbZWxlbWVudC5leHRlcm5hbFRlbmRlcktleV0ucHVzaChvYmopXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgb2JqMSA9IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgWE1MU2NoZW1hVmVyc2lvbjogXCIxXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIExpbmVOdW1iZXI6IHRoaXMuZ2VuZXJhdGVMaW5lTnVtYmVyKCksLy90b2RvXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIE5ldFZhbHVlOiBKU09OLnN0cmluZ2lmeSgtMSAqIChNYXRoLnJvdW5kKGVsZW1lbnQuYW1vdW50KSkpLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBFZmZlY3RpdmVOZXRWYWx1ZTogSlNPTi5zdHJpbmdpZnkoLTEgKiAoTWF0aC5yb3VuZChlbGVtZW50LmFtb3VudCkpKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgRGVzY3JpcHRpb246IHRoaXMuZ2V0RGVzY3JpcHRpb24oZWxlbWVudCksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIERldmljZUlEOiB0aGlzLmRldmljZUlkLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBVc2VySUQ6IHRoaXMudHJhbnNhY3Rpb25Eb2N1bWVudC51c2VyTmFtZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgRGF0ZVRpbWVDcmVhdGVkOiB0aGlzLnVwZGF0ZWRBdCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgVGVuZGVyVHlwZTogZWxlbWVudC5leHRlcm5hbFRlbmRlclR5cGUgPyBlbGVtZW50LmV4dGVybmFsVGVuZGVyVHlwZSA6ICcnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBUZW5kZXJTdWJUeXBlOiBlbGVtZW50LmV4dGVybmFsU3ViVGVuZGVyVHlwZSA/IGVsZW1lbnQuZXh0ZXJuYWxTdWJUZW5kZXJUeXBlIDogJycsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFRlbmRlckFtb3VudDogSlNPTi5zdHJpbmdpZnkoLTEgKiAoTWF0aC5yb3VuZChlbGVtZW50LmFtb3VudCkpKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgQ3VycmVuY3lJRDogdGhpcy50cmFuc2FjdGlvbkRvY3VtZW50LmJhc2VDdXJyZW5jeSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgQ3VycmVuY3lEZXNjcmlwdGlvbjogdGhpcy50cmFuc2FjdGlvbkRvY3VtZW50LmJhc2VDdXJyZW5jeSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgSW5jbHVkZUluVHJhbnNhY3Rpb25Ub3RhbENoZWNrOiBcIjFcIixcclxuICAgICAgICAgICAgICAgICAgICAgICAgQWxsb3dSZWNoYXJnZWFibGVWb3VjaGVyU2FsZXM6IFwiMVwiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBPcGVuRHJhd2VyQXRFbmQ6IFwiMVwiXHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucmpPYmplY3RbZWxlbWVudC5leHRlcm5hbFRlbmRlcktleV0ucHVzaChvYmoxKVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9IGVsc2V7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnJqT2JqZWN0WydDYXNoVGVuZGVyJ10gPSBbXTtcclxuICAgICAgICAgICAgICAgIGlmIChlbGVtZW50LnBheW1lbnRUeXBlLnRvVXBwZXJDYXNlKCkgPT09ICdHSUZUIENBUkQnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IG9iaiA9IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgWE1MU2NoZW1hVmVyc2lvbjogdGhpcy54bWxTY2hlbWFWZXJzaW9uLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBMaW5lTnVtYmVyOiB0aGlzLmdlbmVyYXRlTGluZU51bWJlcigpLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBOZXRWYWx1ZTogdGhpcy5jb252ZXJ0VG9TdHJpbmcoLTEgKiB0aGlzLnJlbW92ZURlY2ltYWwoKE1hdGgucm91bmQoZWxlbWVudC5hbW91bnQpKSkpLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBFZmZlY3RpdmVOZXRWYWx1ZTogdGhpcy5jb252ZXJ0VG9TdHJpbmcoLTEgKiB0aGlzLnJlbW92ZURlY2ltYWwoKE1hdGgucm91bmQoZWxlbWVudC5hbW91bnQpKSkpLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBEZXNjcmlwdGlvbjogdGhpcy5nZXREZXNjcmlwdGlvbihlbGVtZW50KSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgRGV2aWNlSUQ6IHRoaXMuZGV2aWNlSWQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFVzZXJJRDogdGhpcy50cmFuc2FjdGlvbkRvY3VtZW50LnVzZXJOYW1lLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBEYXRlVGltZUNyZWF0ZWQ6IHRoaXMudXBkYXRlZEF0LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBUZW5kZXJUeXBlOiBlbGVtZW50LmV4dGVybmFsVGVuZGVyVHlwZSA/IGVsZW1lbnQuZXh0ZXJuYWxUZW5kZXJUeXBlIDogJycsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFRlbmRlclN1YlR5cGU6IGVsZW1lbnQuZXh0ZXJuYWxTdWJUZW5kZXJUeXBlID8gZWxlbWVudC5leHRlcm5hbFN1YlRlbmRlclR5cGUgOiAnJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgVGVuZGVyQW1vdW50OiB0aGlzLmNvbnZlcnRUb1N0cmluZygtMSAqIHRoaXMucmVtb3ZlRGVjaW1hbCgoTWF0aC5yb3VuZChlbGVtZW50LmFtb3VudCkpKSksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIEN1cnJlbmN5SUQ6IHRoaXMudHJhbnNhY3Rpb25Eb2N1bWVudC5iYXNlQ3VycmVuY3ksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIEN1cnJlbmN5RGVzY3JpcHRpb246IHRoaXMudHJhbnNhY3Rpb25Eb2N1bWVudC5iYXNlQ3VycmVuY3ksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIEdpZnRWb3VjaGVyU2FsZXNBbGxvd2VkOiAnJywvL3RvZG9cclxuICAgICAgICAgICAgICAgICAgICAgICAgQWxsb3dSZWNoYXJnZWFibGVWb3VjaGVyU2FsZXM6ICcnLC8vdG9kb1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBHaWZ0Vm91Y2hlcklEOiAnJ1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnJqT2JqZWN0WydDYXNoVGVuZGVyJ10ucHVzaChvYmopXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgb2JqMSA9IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgWE1MU2NoZW1hVmVyc2lvbjogXCIxXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIExpbmVOdW1iZXI6IHRoaXMuZ2VuZXJhdGVMaW5lTnVtYmVyKCksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIE5ldFZhbHVlOiBKU09OLnN0cmluZ2lmeSgtMSAqIChNYXRoLnJvdW5kKGVsZW1lbnQuYW1vdW50KSkpLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBFZmZlY3RpdmVOZXRWYWx1ZTogSlNPTi5zdHJpbmdpZnkoLTEgKiAoTWF0aC5yb3VuZChlbGVtZW50LmFtb3VudCkpKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgRGVzY3JpcHRpb246IHRoaXMuZ2V0RGVzY3JpcHRpb24oZWxlbWVudCksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIERldmljZUlEOiB0aGlzLmRldmljZUlkLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBVc2VySUQ6IHRoaXMudHJhbnNhY3Rpb25Eb2N1bWVudC51c2VyTmFtZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgRGF0ZVRpbWVDcmVhdGVkOiB0aGlzLnVwZGF0ZWRBdCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgVGVuZGVyVHlwZTogZWxlbWVudC5leHRlcm5hbFRlbmRlclR5cGUgPyBlbGVtZW50LmV4dGVybmFsVGVuZGVyVHlwZSA6ICcnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBUZW5kZXJTdWJUeXBlOiBlbGVtZW50LmV4dGVybmFsU3ViVGVuZGVyVHlwZSA/IGVsZW1lbnQuZXh0ZXJuYWxTdWJUZW5kZXJUeXBlIDogJycsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFRlbmRlckFtb3VudDogSlNPTi5zdHJpbmdpZnkoLTEgKiAoTWF0aC5yb3VuZChlbGVtZW50LmFtb3VudCkpKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgQ3VycmVuY3lJRDogdGhpcy50cmFuc2FjdGlvbkRvY3VtZW50LmJhc2VDdXJyZW5jeSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgQ3VycmVuY3lEZXNjcmlwdGlvbjogdGhpcy50cmFuc2FjdGlvbkRvY3VtZW50LmJhc2VDdXJyZW5jeSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgSW5jbHVkZUluVHJhbnNhY3Rpb25Ub3RhbENoZWNrOiBcIjFcIixcclxuICAgICAgICAgICAgICAgICAgICAgICAgQWxsb3dSZWNoYXJnZWFibGVWb3VjaGVyU2FsZXM6IFwiMVwiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBPcGVuRHJhd2VyQXRFbmQ6IFwiMVwiXHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucmpPYmplY3RbJ0Nhc2hUZW5kZXInXS5wdXNoKG9iajEpXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfVxyXG5cclxuICAgIGdldE51bWJlcihwcm9kdWN0SWQpIHtcclxuICAgICAgICBsZXQgbGluZU51bWJlcjsgXHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLnJqT2JqZWN0WydQcm9kdWN0U2FsZSddLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGVsZW1lbnQgPSB0aGlzLnJqT2JqZWN0WydQcm9kdWN0U2FsZSddW2ldO1xyXG4gICAgICAgICAgICBpZihKU09OLnN0cmluZ2lmeShwcm9kdWN0SWQpID09PSBKU09OLnN0cmluZ2lmeShlbGVtZW50LlByb2R1Y3RJRCkpe1xyXG4gICAgICAgICAgICAgICAgbGluZU51bWJlciA9IGVsZW1lbnQuTGluZU51bWJlcjtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBsaW5lTnVtYmVyO1xyXG4gICAgfVxyXG5cclxuICAgIHNldExpbmVOdW1iZXJGb3JQcm9kdWN0cygpIHtcclxuICAgICAgICBsZXQgaXRlbUxpbmVJZEFycmF5ID0gW107XHJcbiAgICAgICAgaXRlbUxpbmVJZEFycmF5ID0gdGhpcy50cmFuc2FjdGlvbkRvY3VtZW50LmJhc2tldC5wcm9kdWN0cy5tYXAoKHByb2R1Y3Q6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICByZXR1cm4gcGFyc2VJbnQocHJvZHVjdC5pdGVtTGluZUlkKTtcclxuICAgICAgICB9KVxyXG4gICAgICAgIHRoaXMubGFyZ2VzdE51bWJlciA9IGl0ZW1MaW5lSWRBcnJheS5yZWR1Y2UoKGE6IGFueSwgYjogYW55KSA9PiBNYXRoLm1heChhLCBiKSk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2VuZXJhdGVMaW5lTnVtYmVyKCkge1xyXG4gICAgICAgIHRoaXMubGFyZ2VzdE51bWJlciArPSAxO1xyXG4gICAgICAgIHRoaXMuaXRlbUNvdW50ICs9IDE7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMubGFyZ2VzdE51bWJlcjtcclxuICAgIH1cclxuXHJcbiAgICBpbml0aWxpemVJdGVtQ291bnQoKSB7XHJcbiAgICAgICAgdGhpcy5pdGVtQ291bnQgPSB0aGlzLnRyYW5zYWN0aW9uRG9jdW1lbnQuYmFza2V0LnByb2R1Y3RzLmxlbmd0aDtcclxuICAgIH1cclxuXHJcbiAgICBidWlsZCgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5yak9iamVjdDtcclxuICAgIH1cclxuXHJcbiAgICBnZXREZXNjcmlwdGlvbihlbGVtZW50OiBhbnkpIHtcclxuICAgICAgICBpZiAoZWxlbWVudC5wYXltZW50VHlwZS50b1VwcGVyQ2FzZSgpID09PSAnQ0FSRCcpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGVsZW1lbnQuY2FyZFR5cGVcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHJldHVybiBlbGVtZW50LnBheW1lbnRUeXBlO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBzZXREZXZpY2VJbmZvKGlkOiBhbnkpIHtcclxuICAgICAgICB0aGlzLmRldmljZUlkID0gaWRcclxuICAgICAgICByZXR1cm4gdGhpc1xyXG4gICAgfVxyXG5cclxuICAgIHJlbW92ZURlY2ltYWwodmFsdWU6IG51bWJlcikge1xyXG4gICAgICAgIHJldHVybiB2YWx1ZSAqIDEwMDtcclxuICAgIH1cclxuXHJcbiAgICBzZXRUcmFuc2FjdGlvbk51bWJlcih2YWx1ZTogYW55KSB7XHJcbiAgICAgICAgdGhpcy50cmFuc2FjdGlvbk51bWJlciA9IHZhbHVlO1xyXG4gICAgICAgIHJldHVybiB0aGlzXHJcbiAgICB9XHJcblxyXG4gICAgc2V0TWFuaWZlc3RWZXJzaW9uKHZhbHVlOiBhbnkpIHtcclxuICAgICAgICB0aGlzLm1hbmlmZXN0VmVyc2lvbiA9IHZhbHVlO1xyXG4gICAgICAgIHJldHVybiB0aGlzXHJcbiAgICB9XHJcblxyXG4gICAgc2V0RGF0YWJhc2VTY2hlbWFWZXJzaW9uKHZhbHVlOiBhbnkpIHtcclxuICAgICAgICB0aGlzLmRhdGFiYXNlU2NoZW1hVmVyc2lvbiA9IHZhbHVlO1xyXG4gICAgICAgIHJldHVybiB0aGlzXHJcbiAgICB9XHJcblxyXG4gICAgc2V0QmFza2V0VHlwZSh2YWx1ZTogYW55KSB7XHJcbiAgICAgICAgdGhpcy5iYXNrZXRUeXBlID0gdmFsdWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXNcclxuICAgIH1cclxuXHJcbiAgICBzZXRUcmFkaW5nUmVnaW9uSUQodmFsdWU6IGFueSkge1xyXG4gICAgICAgIHRoaXMudHJhZGluZ1JlZ2lvbklkID0gdmFsdWVcclxuICAgICAgICByZXR1cm4gdGhpc1xyXG4gICAgfVxyXG5cclxuICAgIHNldENvbXBhbnlJRCh2YWx1ZTogYW55KSB7XHJcbiAgICAgICAgdGhpcy5jb21wYW55SWQgPSB2YWx1ZVxyXG4gICAgICAgIHJldHVybiB0aGlzXHJcbiAgICB9XHJcblxyXG4gICAgc2V0VGF4TWV0aG9kSUQodmFsdWU6IGFueSkge1xyXG4gICAgICAgIHRoaXMudGF4TWV0aG9kSWQgPSB2YWx1ZVxyXG4gICAgICAgIHJldHVybiB0aGlzXHJcbiAgICB9XHJcblxyXG4gICAgc2V0TWFqb3JWZXJzaW9uKHZhbHVlOiBhbnkpIHtcclxuICAgICAgICB0aGlzLm1ham9yVmVyc2lvbiA9IHZhbHVlXHJcbiAgICAgICAgcmV0dXJuIHRoaXNcclxuICAgIH1cclxuXHJcbiAgICBzZXRNaW5vclZlcnNpb24odmFsdWU6IGFueSkge1xyXG4gICAgICAgIHRoaXMubWlub3JWZXJzaW9uID0gdmFsdWVcclxuICAgICAgICByZXR1cm4gdGhpc1xyXG4gICAgfVxyXG5cclxuICAgIHNldFhNTFNjaGVtYVZlcnNpb24odmFsdWU6IGFueSkge1xyXG4gICAgICAgIHRoaXMueG1sU2NoZW1hVmVyc2lvbiA9IHZhbHVlXHJcbiAgICAgICAgcmV0dXJuIHRoaXNcclxuICAgIH1cclxuXHJcbiAgICBzZXRFeHRlcm5hbFN0YXRlKHZhbHVlOiBhbnkpIHtcclxuICAgICAgICB0aGlzLmV4dGVybmFsU3RhdGUgPSB2YWx1ZVxyXG4gICAgICAgIHJldHVybiB0aGlzXHJcbiAgICB9XHJcblxyXG4gICAgc2V0Q2FzaGllcklEKCkge1xyXG4gICAgICAgIHRoaXMuY2FzaGllcklkID0gKHRoaXMudHJhbnNhY3Rpb25Eb2N1bWVudCAmJiB0aGlzLnRyYW5zYWN0aW9uRG9jdW1lbnQudXNlck5hbWUpID8gIHRoaXMudHJhbnNhY3Rpb25Eb2N1bWVudC51c2VyTmFtZSA6ICcnO1xyXG4gICAgICAgIHJldHVybiB0aGlzXHJcbiAgICB9XHJcblxyXG4gICAgc2V0VGVybWluYWxOdW1iZXIodmFsdWU6IGFueSkge1xyXG4gICAgICAgIHRoaXMudGVybWluYWxOdW1iZXIgPSB2YWx1ZTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH1cclxuXHJcbiAgICBzZXRCYXNrZXRMYW5ndWFnZUlEKHZhbHVlOiBhbnkpIHtcclxuICAgICAgICB0aGlzLmJhc2tldExhbmd1YWdlSWQgPSB2YWx1ZTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH1cclxuICAgIHNldEJhc2tldENvdW50cnlJRCh2YWx1ZTogYW55KSB7XHJcbiAgICAgICAgdGhpcy5iYXNrZXRDb3VudHJ5SWQgPSB2YWx1ZTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH1cclxuXHJcbiAgICBzZXRCYXNrZXRDdXJyZW5jeUlEKHZhbHVlOiBhbnkpIHtcclxuICAgICAgICB0aGlzLmJhc2tldEN1cnJlbmN5SWQgPSB2YWx1ZTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH1cclxuXHJcbiAgICBzZXRCcmFuY2hJRCh2YWx1ZTogYW55KSB7XHJcbiAgICAgICAgdGhpcy5icmFuY2hJZCA9IHZhbHVlO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfVxyXG5cclxuICAgIGdlbmVyYXRlSWQoZGF0ZTogYW55KSB7XHJcbiAgICAgICAgbGV0IG5ld0RhdGVUaW1lID0gZGF0ZS5yZXBsYWNlKC9bXjAtOV0vZywgJycpXHJcbiAgICAgICAgbGV0IGlkID0gKHRoaXMuZGV2aWNlSWQgKyAnfCcgKyBuZXdEYXRlVGltZSArICd8JyArIHRoaXMudHJhbnNhY3Rpb25OdW1iZXIpLnRvU3RyaW5nKCk7XHJcbiAgICAgICAgcmV0dXJuIGlkO1xyXG4gICAgfSBcclxuXHJcbiAgICBnZW5lcmF0ZVRpbWV6b25lb2Zmc2V0KGRhdGU6IGFueSkge1xyXG4gICAgICAgIGxldCB4ID0gZGF0ZSA/IGRhdGUgOiAnJztcclxuICAgICAgICByZXR1cm4gbmV3IERhdGUoeCkuZ2V0VGltZXpvbmVPZmZzZXQoKTtcclxuICAgIH1cclxuXHJcbiAgICBnZW5lcmF0ZUtleXdvcmQoKSB7XHJcbiAgICAgICAgbGV0IHggPSAodGhpcy5jb21wYW55SWQgKyAnfCcgKyB0aGlzLnRyYW5zYWN0aW9uRG9jdW1lbnQuc3RvcmVJZCArICd8JyArIHRoaXMudGVybWluYWxOdW1iZXIgKyAnfCcgKyB0aGlzLnRyYW5zYWN0aW9uTnVtYmVyKS50b1N0cmluZygpO1xyXG4gICAgICAgIHJldHVybiB4O1xyXG4gICAgfVxyXG5cclxuICAgIGdldFN0YXRlKCkge1xyXG4gICAgICAgIGlmICh0aGlzLnRyYW5zYWN0aW9uRG9jdW1lbnQub3BlcmF0aW9uU3RhdHVzID09PSAnUEFZX1NVQ0NFU1MnKSB7XHJcbiAgICAgICAgICAgIHJldHVybiAnQ29tcGxldGVkJztcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHJldHVybiAnQ2FuY2VsbGVkJztcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuUHJvZHVjdChlbGVtZW50OiBhbnksIGxpbmVEaXNjb3VudDogTGluZURpc2NvdW50ICwgdHJhbnNhY3Rpb25EaXNjb3VudDogVHJhbnNhY3Rpb25EaXNjb3VudCkge1xyXG4gICAgICAgIGxldCBvYmo6IGFueSA9IHt9O1xyXG4gICAgICAgIGxldCB0YXhUb3RhbCA9IHRoaXMudHJhbnNhY3Rpb25Eb2N1bWVudC5iYXNrZXRbJ3RheEJyZWFrZG93biddWyd0YXhMaW5lcyddLmZpbmQoKGl0ZW06IGFueSkgPT4gaXRlbS5pdGVtTGluZUlkID09IGVsZW1lbnRbJ2l0ZW1MaW5lSWQnXSk7XHJcbiAgICAgICAgb2JqWydYTUxTY2hlbWFWZXJzaW9uJ10gPSB0aGlzLnhtbFNjaGVtYVZlcnNpb247XHJcbiAgICAgICAgb2JqWydMaW5lTnVtYmVyJ10gPSBlbGVtZW50WydpdGVtTGluZUlkJ107XHJcbiAgICAgICAgb2JqWydOZXRWYWx1ZSddID0gdGhpcy5yZW1vdmVEZWNpbWFsKGVsZW1lbnRbJ3JlZnVuZGVkVG90YWwnXSk7XHJcbiAgICAgICAgb2JqWydFZmZlY3RpdmVOZXRWYWx1ZSddID0gdGhpcy5yZW1vdmVEZWNpbWFsKGVsZW1lbnRbJ3JlZnVuZGVkVG90YWwnXSk7XHJcbiAgICAgICAgb2JqWydEZXNjcmlwdGlvbiddID0gZWxlbWVudFsnZGVzY3JpcHRpb24nXTtcclxuICAgICAgICBvYmpbJ0RldmljZUlEJ10gPSB0aGlzLnRyYW5zYWN0aW9uRG9jdW1lbnRbJ3Rlcm1pbmFsSWQnXTtcclxuICAgICAgICBvYmpbJ1VzZXJJRCddID0gdGhpcy50cmFuc2FjdGlvbkRvY3VtZW50LnVzZXJOYW1lO1xyXG4gICAgICAgIG9ialsnRGF0ZVRpbWVDcmVhdGVkJ10gPSB0aGlzLmNyZWF0ZWRBdDtcclxuICAgICAgICBvYmpbJ0V4dGVuZGVkVmFsdWUnXSA9IHRoaXMucmVtb3ZlRGVjaW1hbChlbGVtZW50Wyd0b3RhbExpbmVQcmljZSddKi0xKTtcclxuICAgICAgICBvYmpbJ1VuaXRQcmljZSddID0gdGhpcy5yZW1vdmVEZWNpbWFsKGVsZW1lbnRbJ3ByaWNlJ10pO1xyXG4gICAgICAgIG9ialsnUXVhbnRpdHknXSA9IHRoaXMuZ2V0UXVhbnRpdHkoZWxlbWVudCk7XHJcbiAgICAgICAgb2JqWydPcmlnaW5hbFRheEFtb3VudFNldCddID0gMTtcclxuICAgICAgICBvYmpbJ1Byb2R1Y3RJRCddID0gZWxlbWVudFsnU0tVJ107XHJcbiAgICAgICAgb2JqWydIYW5kS2V5ZWQnXSA9IDE7XHJcbiAgICAgICAgb2JqWydMb25nRGVzY3JpcHRpb24nXSA9IGVsZW1lbnRbJ2Rlc2NyaXB0aW9uJ107XHJcbiAgICAgICAgb2JqWydSZXR1cm4nXSA9IHt9O1xyXG4gICAgICAgIG9ialsnUmV0dXJuJ11bJ1JldHVyblJlYXNvbklEJ10gPSBlbGVtZW50WydyZWZ1bmRlZFJlYXNvbiddO1xyXG4gICAgICAgIG9ialsnUmV0dXJuJ11bJ1JldHVybkRlc2NyaXB0aW9uJ10gPSBlbGVtZW50WydyZWZ1bmRlZFJlYXNvbkRlc2NyaXB0aW9uJ107XHJcbiAgICAgICAgb2JqWydSZXR1cm4nXVsnUmV0dXJuVG9TdG9jayddID0gdGhpcy5nZXRRdWFudGl0eShlbGVtZW50KTtcclxuICAgICAgICBvYmpbJ1RheENvZGUnXSA9IHRoaXMudHJhbnNhY3Rpb25Eb2N1bWVudC5iYXNrZXRbJ3RheEJyZWFrZG93biddWyd0YXhMaW5lcyddLmZpbmQoKGl0ZW06IGFueSkgPT4gaXRlbS5pdGVtTGluZUlkID09IGVsZW1lbnRbJ2l0ZW1MaW5lSWQnXSkuVkFUQ29kZTtcclxuXHJcbiAgICAgICAgb2JqWydEaXNwbGF5VGF4Q29kZSddID0gJyc7IC8vIHRvZG9cclxuICAgICAgICBvYmpbJ1Byb2R1Y3RBdHRyaWJ1dGVzJ10gPSAnJzsgLy90b2RvIC0gbm90IHJlcXVpcmVkXHJcbiAgICAgICAgb2JqWydQZXJpc2hhYmxlJ10gPSB0aGlzLmdldEF0dHJpYnV0ZXMoKTtcclxuICAgICAgICBvYmpbJ01NR3JvdXBJRCddID0gdGhpcy5nZXRDYXJlZ29yaWVzKGVsZW1lbnQpO1xyXG4gICAgICAgIG9ialsnQ3VzdG9tZXJEZXRhaWxzJ10gPSBcIlwiOyAvLyB0b2RvIC0gYmxhbmtcclxuICAgICAgICBvYmpbJ1RvdGFsUHJvbW90aW9uU2F2aW5nJ10gPSBlbGVtZW50Wydwcm9tb3Rpb25BbW91bnQnXSB8fCAtMTsgLy8gVE9ET1xyXG4gICAgICAgIG9ialsnT3JpZ2luYWxUYXhBbW91bnQnXSA9IHRoaXMuY29udmVydFRvU3RyaW5nKHRoaXMuZ2V0T3JpZ2luYWxUYXgoZWxlbWVudCx0YXhUb3RhbC5WQVQpICogLTEpXHJcbiAgICAgICAgb2JqWyd0YXhBbW91bnQnXSA9IHRheFRvdGFsLnRheExpbmVUb3RhbCA8IDAgPyh0YXhUb3RhbC50YXhMaW5lVG90YWwpIDogKC10YXhUb3RhbC50YXhMaW5lVG90YWwpO1xyXG5cclxuICAgICAgICBpZiAobGluZURpc2NvdW50KSB7XHJcbiAgICAgICAgICAgIGlmIChsaW5lRGlzY291bnQucGVyY2VudGFnZURpc2NvdW50UmVhc29uTmFtZSAmJiBsaW5lRGlzY291bnQucGVyY2VudGFnZURpc2NvdW50UmVhc29uQ29kZSkge1xyXG4gICAgICAgICAgICAgICAgLy8gbGluZSBkaXNjb3VudFxyXG4gICAgICAgICAgICAgICAgb2JqWydEaXNjb3VudCddID0ge307XHJcbiAgICAgICAgICAgICAgICBvYmpbJ0Rpc2NvdW50J10uTW9kaWZpZXJWYWx1ZSA9IHRoaXMucmVtb3ZlRGVjaW1hbChsaW5lRGlzY291bnQudW5pdFByaWNlKSAqIC0xO1xyXG4gICAgICAgICAgICAgICAgb2JqWydEaXNjb3VudCddLk1vZGlmaWVyRGF0ZVRpbWUgPSBvYmouRGF0ZVRpbWVDcmVhdGVkO1xyXG4gICAgICAgICAgICAgICAgb2JqWydEaXNjb3VudCddLk1vZGlmaWVyUmVhc29uSUQgPSBsaW5lRGlzY291bnQucGVyY2VudGFnZURpc2NvdW50UmVhc29uQ29kZTtcclxuICAgICAgICAgICAgICAgIG9ialsnRGlzY291bnQnXS5Nb2RpZmllckRlc2NyaXB0aW9uID0gbGluZURpc2NvdW50LnBlcmNlbnRhZ2VEaXNjb3VudFJlYXNvbk5hbWU7XHJcbiAgICAgICAgICAgICAgICBvYmpbJ0Rpc2NvdW50J10uQXV0aG9yaXNpbmdVc2VySUQgPSB0aGlzLnRyYW5zYWN0aW9uRG9jdW1lbnQudXNlck5hbWU7XHJcbiAgICAgICAgICAgICAgICBvYmpbJ0Rpc2NvdW50J10uRGlzY291bnRUeXBlID0gbGluZURpc2NvdW50LmRpc2NvdW50VHlwZTtcclxuICAgICAgICAgICAgICAgIG9ialsnRGlzY291bnQnXS5YTUxTY2hlbWFWZXJzaW9uID0gMTtcclxuICAgICAgICAgICAgICAgIG9ialsnRGlzY291bnQnXS5PcmlnaW5hbFByaWNlID0gdGhpcy5yZW1vdmVEZWNpbWFsKGxpbmVEaXNjb3VudC5kaXNjb3VudEFtb3VudCArIChsaW5lRGlzY291bnQuZGlzY291bnRlZExpbmVQcmljZSB8fCAwKSk7XHJcbiAgICAgICAgICAgICAgICBvYmpbJ0Rpc2NvdW50J10uRGlzY291bnRlZFZhbHVlID0gdGhpcy5yZW1vdmVEZWNpbWFsKGxpbmVEaXNjb3VudC51bml0UHJpY2UpO1xyXG4gICAgICAgICAgICAgICAgb2JqWydEaXNjb3VudCddLkRpc2NvdW50UGVyY2VudGFnZSA9IGxpbmVEaXNjb3VudC5wZXJjZW50YWdlRGlzY291bnRWYWx1ZTtcclxuICAgICAgICAgICAgICAgIG9ialsnRGlzY291bnQnXS5Sb3VuZGluZ1J1bGUgPSAyO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAobGluZURpc2NvdW50LnByaWNlT3ZlcnJpZGVSZWFzb25Db2RlICYmIGxpbmVEaXNjb3VudC5wcmljZU92ZXJyaWRlUmVhc29uTmFtZSkge1xyXG4gICAgICAgICAgICAgICAgLy9wcmljZSBvdmVycmlkZVxyXG4gICAgICAgICAgICAgICAgb2JqWydQcmljZU92ZXJyaWRlJ10gPSB7fTtcclxuICAgICAgICAgICAgICAgIG9ialsnUHJpY2VPdmVycmlkZSddLk1vZGlmaWVyVmFsdWUgPSB0aGlzLnJlbW92ZURlY2ltYWwobGluZURpc2NvdW50LmRpc2NvdW50QW1vdW50KSAqIC0xO1xyXG4gICAgICAgICAgICAgICAgb2JqWydQcmljZU92ZXJyaWRlJ10uTW9kaWZpZXJEYXRlVGltZSA9IG9iai5EYXRlVGltZUNyZWF0ZWQ7XHJcbiAgICAgICAgICAgICAgICBvYmpbJ1ByaWNlT3ZlcnJpZGUnXS5Nb2RpZmllclJlYXNvbklEID0gbGluZURpc2NvdW50LnByaWNlT3ZlcnJpZGVSZWFzb25Db2RlO1xyXG4gICAgICAgICAgICAgICAgb2JqWydQcmljZU92ZXJyaWRlJ10uTW9kaWZpZXJSZWFzb25EZXNjcmlwdGlvbiA9IGxpbmVEaXNjb3VudC5wcmljZU92ZXJyaWRlUmVhc29uTmFtZTtcclxuICAgICAgICAgICAgICAgIG9ialsnUHJpY2VPdmVycmlkZSddLkF1dGhvcmlzaW5nVXNlcklEID0gdGhpcy50cmFuc2FjdGlvbkRvY3VtZW50LnVzZXJOYW1lO1xyXG4gICAgICAgICAgICAgICAgb2JqWydQcmljZU92ZXJyaWRlJ10uWE1MU2NoZW1hVmVyc2lvbiA9IDE7XHJcbiAgICAgICAgICAgICAgICBvYmpbJ1ByaWNlT3ZlcnJpZGUnXS5OZXdQcmljZSA9IHRoaXMucmVtb3ZlRGVjaW1hbChsaW5lRGlzY291bnQudW5pdFByaWNlKTtcclxuICAgICAgICAgICAgICAgIG9ialsnUHJpY2VPdmVycmlkZSddLk9yaWdpbmFsUHJpY2UgPSB0aGlzLnJlbW92ZURlY2ltYWwobGluZURpc2NvdW50LmRpc2NvdW50ZWRMaW5lUHJpY2UgfHwgMCArIGxpbmVEaXNjb3VudC5kaXNjb3VudEFtb3VudCk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIC8vdXBkYXRlIHRoZSBwcm9kdWN0IHByaWNlXHJcbiAgICAgICAgICAgIG9iai5OZXRWYWx1ZSA9ICgobGluZURpc2NvdW50LmRpc2NvdW50ZWRMaW5lUHJpY2UgfHwgMCkgKyBsaW5lRGlzY291bnQuZGlzY291bnRBbW91bnQpICogLTE7XHJcbiAgICAgICAgICAgIG9iai5FZmZlY3RpdmVOZXRWYWx1ZSA9ICgobGluZURpc2NvdW50LmRpc2NvdW50ZWRMaW5lUHJpY2UgfHwgMCkgKyBsaW5lRGlzY291bnQuZGlzY291bnRBbW91bnQpICogLTE7XHJcbiAgICAgICAgICAgIG9iai5FeHRlbmRlZFZhbHVlID0gKChsaW5lRGlzY291bnQuZGlzY291bnRlZExpbmVQcmljZSB8fCAwKSArIGxpbmVEaXNjb3VudC5kaXNjb3VudEFtb3VudCkgKiAtMTtcclxuICAgICAgICAgICAgb2JqLlVuaXRQcmljZSA9ICgobGluZURpc2NvdW50LmRpc2NvdW50ZWRMaW5lUHJpY2UgfHwgMCkgKyBsaW5lRGlzY291bnQuZGlzY291bnRBbW91bnQpICogLTE7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZih0cmFuc2FjdGlvbkRpc2NvdW50KSB7XHJcbiAgICAgICAgICAgIG9ialsnQmFza2V0RGlzY291bnRNb2RpZmllciddID0gW107XHJcbiAgICAgICAgICAgIHRoaXMudHJhbnNhY3Rpb25Eb2N1bWVudC5iYXNrZXQudHJhbnNhY3Rpb25EaXNjb3VudC5mb3JFYWNoKChlOiBhbnkpID0+IHsgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgbGV0IGRpc2NvdW50T2JqOiBhbnkgPXt9XHJcbiAgICAgICAgICAgICAgICAgZS5pdGVtTGluZUlkcy5mb3JFYWNoKCh4OiBhbnkpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoeCA9PSBlbGVtZW50Lml0ZW1MaW5lSWQpIHsgIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgZGlzY291bnRBbW91bnQgPSB0aGlzLmNvbnZlcnRUb1N0cmluZyhlLmRpc2NvdW50QW1vdW50ICogLTEpOyAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGRpc2NvdW50T2JqLkJhc2tldERpc2NvdW50TGluZU51bWJlciA9IHRoaXMuZ2V0TGluZU51bWJlcihlLGRpc2NvdW50QW1vdW50KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZGlzY291bnRPYmouWE1MU2NoZW1hVmVyc2lvbiA9IHRoaXMueG1sU2NoZW1hVmVyc2lvbjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZGlzY291bnRPYmouRGlzY291bnRlZFZhbHVlID0gdGhpcy5nZXREaXNjb3VudGVkVmFsdWUoZWxlbWVudC50b3RhbExpbmVQcmljZSwgZS5kaXNjb3VudEFtb3VudCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG9ialsnQmFza2V0RGlzY291bnRNb2RpZmllciddLnB1c2goZGlzY291bnRPYmopO1xyXG4gICAgICAgICAgICAgICAgICAgIH0gICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgfSk7ICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIHZhciB0b3RhbHRyYW5zYWN0aW9uRGlzY291bnQgPSAwO1xyXG4gICAgICAgICAgICBvYmpbJ0Jhc2tldERpc2NvdW50TW9kaWZpZXInXS5mb3JFYWNoKCh2YWx1ZTphbnkpPT57XHJcbiAgICAgICAgICAgICAgICB0b3RhbHRyYW5zYWN0aW9uRGlzY291bnQgPSB0b3RhbHRyYW5zYWN0aW9uRGlzY291bnQgKyB2YWx1ZS5EaXNjb3VudGVkVmFsdWU7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAvL3VwZGF0ZSB0aGUgcHJvZHVjdCBwcmljZVxyXG4gICAgICAgICAgICBvYmpbJ0VmZmVjdGl2ZU5ldFZhbHVlJ10gPSBvYmouRWZmZWN0aXZlTmV0VmFsdWUgKyAgdG90YWx0cmFuc2FjdGlvbkRpc2NvdW50O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHRoaXMudHJhbnNhY3Rpb25Eb2N1bWVudC5iYXNrZXQudHJhbnNhY3Rpb25Qcm9tb3Rpb24ubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICBvYmpbJ1Byb21vdGlvblNhdmluZyddID0gW107XHJcbiAgICAgICAgICAgIHRoaXMudHJhbnNhY3Rpb25Eb2N1bWVudC5iYXNrZXQudHJhbnNhY3Rpb25Qcm9tb3Rpb24uZm9yRWFjaCgodHJhbnNhY3Rpb25Qcm9tbzogYW55KSA9PiB7XHJcbiAgICAgICAgICAgICAgICBsZXQgcHJvbW90aW9uT2JqOiBhbnkgPSB7fTtcclxuICAgICAgICAgICAgICAgIHRyYW5zYWN0aW9uUHJvbW8uaXRlbUxpbmVJZHMuZm9yRWFjaCgoaXRlbUxpbmVJZDogYW55KSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGl0ZW1MaW5lSWQgPT0gZWxlbWVudC5pdGVtTGluZUlkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHByb21vdGlvbk9iai5Nb2RpZmllclZhbHVlID0gdHJhbnNhY3Rpb25Qcm9tby5wcm9tb3Rpb25BbW91bnQ7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHByb21vdGlvbk9iai5Nb2RpZmllckRhdGVUaW1lID0gdGhpcy50cmFuc2FjdGlvbkRvY3VtZW50LmNyZWF0ZWRBdDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcHJvbW90aW9uT2JqLk1vZGlmaWVyRGVzY3JpcHRpb24gPSB0cmFuc2FjdGlvblByb21vLmRpc3BsYXlUZXh0O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBwcm9tb3Rpb25PYmouWE1MU2NoZW1hVmVyc2lvbiA9IHRoaXMueG1sU2NoZW1hVmVyc2lvbjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcHJvbW90aW9uT2JqLlByb21vdGlvbklEID0gdHJhbnNhY3Rpb25Qcm9tby5wcm9tb3Rpb25JZDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcHJvbW90aW9uT2JqLlByb21vdGlvbkRlc2NyaXB0aW9uID0gdHJhbnNhY3Rpb25Qcm9tby5kaXNwbGF5VGV4dDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcHJvbW90aW9uT2JqLkhpdE51bWJlciA9ICcxJztcclxuICAgICAgICAgICAgICAgICAgICAgICAgcHJvbW90aW9uT2JqLlByb21vdGlvbkhpdFByb2R1Y3RRdWFudGl0eSA9IHRoaXMuZ2V0UXVhbnRpdHkoZWxlbWVudCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHByb21vdGlvbk9iai5Qcm9tb3Rpb25IaXRRdWFudGl0eSA9IHRoaXMuZ2V0UXVhbnRpdHkoZWxlbWVudCkgKiAtMTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgb2JqWydQcm9tb3Rpb25TYXZpbmcnXS5wdXNoKHByb21vdGlvbk9iaik7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIG9iajtcclxuICAgIH1cclxuXHJcbiAgICBhZGRQcm9kdWN0KGVsZW1lbnQ6IFRQcm9kdWN0LCBsaW5lRGlzY291bnQ6IExpbmVEaXNjb3VudCwgdHJhbnNhY3Rpb25EaXNjb3VudDogVHJhbnNhY3Rpb25EaXNjb3VudCkge1xyXG4gICAgICAgIGxldCB0YXhUb3RhbCA9IHRoaXMudHJhbnNhY3Rpb25Eb2N1bWVudC5iYXNrZXRbJ3RheEJyZWFrZG93biddWyd0YXhMaW5lcyddLmZpbmQoKGl0ZW06IGFueSkgPT4gaXRlbS5pdGVtTGluZUlkID09IGVsZW1lbnRbJ2l0ZW1MaW5lSWQnXSk7XHJcbiAgICAgICAgbGV0IG9iajogYW55ID0ge1xyXG4gICAgICAgICAgICBYTUxTY2hlbWFWZXJzaW9uOiB0aGlzLnhtbFNjaGVtYVZlcnNpb24sXHJcbiAgICAgICAgICAgIExpbmVOdW1iZXI6IGVsZW1lbnQuaXRlbUxpbmVJZCxcclxuICAgICAgICAgICAgTmV0VmFsdWU6IHRoaXMucmVtb3ZlRGVjaW1hbChlbGVtZW50LnRvdGFsTGluZVByaWNlKSxcclxuICAgICAgICAgICAgRWZmZWN0aXZlTmV0VmFsdWU6IHRoaXMucmVtb3ZlRGVjaW1hbChlbGVtZW50LnRvdGFsTGluZVByaWNlKSxcclxuICAgICAgICAgICAgRGVzY3JpcHRpb246IGVsZW1lbnQuZGVzY3JpcHRpb24sXHJcbiAgICAgICAgICAgIERldmljZUlEOiB0aGlzLmRldmljZUlkLFxyXG4gICAgICAgICAgICBVc2VySUQ6IHRoaXMudHJhbnNhY3Rpb25Eb2N1bWVudC51c2VyTmFtZSxcclxuICAgICAgICAgICAgRGF0ZVRpbWVDcmVhdGVkOiB0aGlzLmNyZWF0ZWRBdCxcclxuICAgICAgICAgICAgRXh0ZW5kZWRWYWx1ZTogdGhpcy5yZW1vdmVEZWNpbWFsKGVsZW1lbnQucHJpY2UpLFxyXG4gICAgICAgICAgICBVbml0UHJpY2U6IHRoaXMucmVtb3ZlRGVjaW1hbChlbGVtZW50LnByaWNlKSxcclxuICAgICAgICAgICAgTU1Hcm91cElEOiB0aGlzLmdldENhcmVnb3JpZXMoZWxlbWVudCksXHJcbiAgICAgICAgICAgIFF1YW50aXR5OiBlbGVtZW50LnF1YW50aXR5LnRvRml4ZWQoMSksXHJcbiAgICAgICAgICAgIFNhbGVzcGVyc29uSUQ6IHRoaXMudHJhbnNhY3Rpb25Eb2N1bWVudC51c2VySWQsXHJcbiAgICAgICAgICAgIFNhbGVzcGVyc29uTmFtZTogdGhpcy50cmFuc2FjdGlvbkRvY3VtZW50LnVzZXJOYW1lLFxyXG4gICAgICAgICAgICBUYXhDb2RlOiB0aGlzLnRyYW5zYWN0aW9uRG9jdW1lbnQuYmFza2V0Wyd0YXhCcmVha2Rvd24nXVsndGF4TGluZXMnXS5maW5kKChpdGVtOiBhbnkpID0+IGl0ZW0uaXRlbUxpbmVJZCA9PSBlbGVtZW50WydpdGVtTGluZUlkJ10pLlZBVENvZGUsXHJcbiAgICAgICAgICAgIFRheE1vZGlmaWFibGU6IFwiMVwiLCAvL3RvZG9cclxuICAgICAgICAgICAgT3JpZ2luYWxUYXhBbW91bnQgOiAgdGhpcy5jb252ZXJ0VG9TdHJpbmcodGhpcy5nZXRPcmlnaW5hbFRheChlbGVtZW50LHRheFRvdGFsLlZBVCkpLFxyXG4gICAgICAgICAgICBUYXhBbW91bnQgOiAgdGhpcy5jb252ZXJ0VG9TdHJpbmcodGF4VG90YWwudGF4TGluZVRvdGFsKSxcclxuICAgICAgICAgICAgT3JpZ2luYWxUYXhBbW91bnRTZXQ6IFwiMVwiLC8vdG9kb1xyXG4gICAgICAgICAgICBQcm9kdWN0SUQ6IGVsZW1lbnQuU0tVLFxyXG4gICAgICAgICAgICBIYW5kS2V5ZWQ6IFwiMVwiLC8vdG9kb1xyXG4gICAgICAgICAgICBDdXN0b21lckRldGFpbHM6IFwiXCIsXHJcbiAgICAgICAgICAgIFBlcmlzaGFibGU6IHRoaXMuZ2V0QXR0cmlidXRlcygpXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChsaW5lRGlzY291bnQpIHtcclxuICAgICAgICAgICAgaWYgKGxpbmVEaXNjb3VudC5wZXJjZW50YWdlRGlzY291bnRSZWFzb25OYW1lICYmIGxpbmVEaXNjb3VudC5wZXJjZW50YWdlRGlzY291bnRSZWFzb25Db2RlKSB7XHJcbiAgICAgICAgICAgICAgICAvLyBsaW5lIGRpc2NvdW50XHJcbiAgICAgICAgICAgICAgICBvYmpbJ0Rpc2NvdW50J10gPSB7fTtcclxuICAgICAgICAgICAgICAgIG9ialsnRGlzY291bnQnXS5Nb2RpZmllclZhbHVlID0gdGhpcy5yZW1vdmVEZWNpbWFsKGxpbmVEaXNjb3VudC51bml0UHJpY2UpICogLTE7XHJcbiAgICAgICAgICAgICAgICBvYmpbJ0Rpc2NvdW50J10uTW9kaWZpZXJEYXRlVGltZSA9IG9iai5EYXRlVGltZUNyZWF0ZWQ7XHJcbiAgICAgICAgICAgICAgICBvYmpbJ0Rpc2NvdW50J10uTW9kaWZpZXJSZWFzb25JRCA9IGxpbmVEaXNjb3VudC5wZXJjZW50YWdlRGlzY291bnRSZWFzb25Db2RlO1xyXG4gICAgICAgICAgICAgICAgb2JqWydEaXNjb3VudCddLk1vZGlmaWVyRGVzY3JpcHRpb24gPSBsaW5lRGlzY291bnQucGVyY2VudGFnZURpc2NvdW50UmVhc29uTmFtZTtcclxuICAgICAgICAgICAgICAgIG9ialsnRGlzY291bnQnXS5BdXRob3Jpc2luZ1VzZXJJRCA9IHRoaXMudHJhbnNhY3Rpb25Eb2N1bWVudC51c2VyTmFtZTtcclxuICAgICAgICAgICAgICAgIG9ialsnRGlzY291bnQnXS5EaXNjb3VudFR5cGUgPSBsaW5lRGlzY291bnQuZGlzY291bnRUeXBlO1xyXG4gICAgICAgICAgICAgICAgb2JqWydEaXNjb3VudCddLlhNTFNjaGVtYVZlcnNpb24gPSAxO1xyXG4gICAgICAgICAgICAgICAgb2JqWydEaXNjb3VudCddLk9yaWdpbmFsUHJpY2UgPSB0aGlzLnJlbW92ZURlY2ltYWwobGluZURpc2NvdW50LmRpc2NvdW50QW1vdW50ICsgKGxpbmVEaXNjb3VudC5kaXNjb3VudGVkTGluZVByaWNlIHx8IDApKTtcclxuICAgICAgICAgICAgICAgIG9ialsnRGlzY291bnQnXS5EaXNjb3VudGVkVmFsdWUgPSB0aGlzLnJlbW92ZURlY2ltYWwobGluZURpc2NvdW50LnVuaXRQcmljZSk7XHJcbiAgICAgICAgICAgICAgICBvYmpbJ0Rpc2NvdW50J10uRGlzY291bnRQZXJjZW50YWdlID0gbGluZURpc2NvdW50LnBlcmNlbnRhZ2VEaXNjb3VudFZhbHVlO1xyXG4gICAgICAgICAgICAgICAgb2JqWydEaXNjb3VudCddLlJvdW5kaW5nUnVsZSA9IDI7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmIChsaW5lRGlzY291bnQucHJpY2VPdmVycmlkZVJlYXNvbkNvZGUgJiYgbGluZURpc2NvdW50LnByaWNlT3ZlcnJpZGVSZWFzb25OYW1lKSB7XHJcbiAgICAgICAgICAgICAgICAvL3ByaWNlIG92ZXJyaWRlXHJcbiAgICAgICAgICAgICAgICBvYmpbJ1ByaWNlT3ZlcnJpZGUnXSA9IHt9O1xyXG4gICAgICAgICAgICAgICAgb2JqWydQcmljZU92ZXJyaWRlJ10uTW9kaWZpZXJWYWx1ZSA9IHRoaXMucmVtb3ZlRGVjaW1hbChsaW5lRGlzY291bnQuZGlzY291bnRBbW91bnQpICogLTE7XHJcbiAgICAgICAgICAgICAgICBvYmpbJ1ByaWNlT3ZlcnJpZGUnXS5Nb2RpZmllckRhdGVUaW1lID0gb2JqLkRhdGVUaW1lQ3JlYXRlZDtcclxuICAgICAgICAgICAgICAgIG9ialsnUHJpY2VPdmVycmlkZSddLk1vZGlmaWVyUmVhc29uSUQgPSBsaW5lRGlzY291bnQucHJpY2VPdmVycmlkZVJlYXNvbkNvZGU7XHJcbiAgICAgICAgICAgICAgICBvYmpbJ1ByaWNlT3ZlcnJpZGUnXS5Nb2RpZmllclJlYXNvbkRlc2NyaXB0aW9uID0gbGluZURpc2NvdW50LnByaWNlT3ZlcnJpZGVSZWFzb25OYW1lO1xyXG4gICAgICAgICAgICAgICAgb2JqWydQcmljZU92ZXJyaWRlJ10uQXV0aG9yaXNpbmdVc2VySUQgPSB0aGlzLnRyYW5zYWN0aW9uRG9jdW1lbnQudXNlck5hbWU7XHJcbiAgICAgICAgICAgICAgICBvYmpbJ1ByaWNlT3ZlcnJpZGUnXS5YTUxTY2hlbWFWZXJzaW9uID0gdGhpcy54bWxTY2hlbWFWZXJzaW9uO1xyXG4gICAgICAgICAgICAgICAgb2JqWydQcmljZU92ZXJyaWRlJ10uTmV3UHJpY2UgPSB0aGlzLnJlbW92ZURlY2ltYWwobGluZURpc2NvdW50LnVuaXRQcmljZSk7XHJcbiAgICAgICAgICAgICAgICBvYmpbJ1ByaWNlT3ZlcnJpZGUnXS5PcmlnaW5hbFByaWNlID0gdGhpcy5yZW1vdmVEZWNpbWFsKGxpbmVEaXNjb3VudC5kaXNjb3VudGVkTGluZVByaWNlIHx8IDAgKyBsaW5lRGlzY291bnQuZGlzY291bnRBbW91bnQpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAvL3VwZGF0ZSB0aGUgcHJvZHVjdCBwcmljZVxyXG4gICAgICAgICAgICBvYmpbJ05ldFZhbHVlJ10gPSAoKGxpbmVEaXNjb3VudC5kaXNjb3VudGVkTGluZVByaWNlIHx8IDApICsgbGluZURpc2NvdW50LmRpc2NvdW50QW1vdW50KTtcclxuICAgICAgICAgICAgb2JqWydFZmZlY3RpdmVOZXRWYWx1ZSddID0gKChsaW5lRGlzY291bnQuZGlzY291bnRlZExpbmVQcmljZSB8fCAwKSArIGxpbmVEaXNjb3VudC5kaXNjb3VudEFtb3VudCk7XHJcbiAgICAgICAgICAgIG9ialsnRXh0ZW5kZWRWYWx1ZSddID0gKChsaW5lRGlzY291bnQuZGlzY291bnRlZExpbmVQcmljZSB8fCAwKSArIGxpbmVEaXNjb3VudC5kaXNjb3VudEFtb3VudCk7XHJcbiAgICAgICAgICAgIG9ialsnVW5pdFByaWNlJ10gPSAoKGxpbmVEaXNjb3VudC5kaXNjb3VudGVkTGluZVByaWNlIHx8IDApICsgbGluZURpc2NvdW50LmRpc2NvdW50QW1vdW50KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmKHRyYW5zYWN0aW9uRGlzY291bnQpIHtcclxuICAgICAgICAgICAgb2JqWydCYXNrZXREaXNjb3VudE1vZGlmaWVyJ10gPSBbXTtcclxuICAgICAgICAgICAgdGhpcy50cmFuc2FjdGlvbkRvY3VtZW50LmJhc2tldC50cmFuc2FjdGlvbkRpc2NvdW50LmZvckVhY2goKGU6YW55KSA9PiB7ICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgbGV0IGRpc2NvdW50T2JqOiBhbnkgPXt9O1xyXG4gICAgICAgICAgICAgICAgIGUuaXRlbUxpbmVJZHMuZm9yRWFjaCgoaXRlbUxpbmVJZDogYW55KSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGl0ZW1MaW5lSWQgPT0gZWxlbWVudC5pdGVtTGluZUlkKSB7IFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgZGlzY291bnRBbW91bnQgPSB0aGlzLmNvbnZlcnRUb1N0cmluZyhlLmRpc2NvdW50QW1vdW50ICogLTEpOyAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGRpc2NvdW50T2JqLlhNTFNjaGVtYVZlcnNpb24gPSB0aGlzLnhtbFNjaGVtYVZlcnNpb247XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGRpc2NvdW50T2JqLkRpc2NvdW50ZWRWYWx1ZSA9IC0odGhpcy5nZXREaXNjb3VudGVkVmFsdWUoZWxlbWVudC50b3RhbExpbmVQcmljZSwgZS5kaXNjb3VudEFtb3VudCkudG9GaXhlZCgwKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGRpc2NvdW50T2JqLkJhc2tldERpc2NvdW50TGluZU51bWJlciA9IHRoaXMuZ2V0TGluZU51bWJlcihlLGRpc2NvdW50QW1vdW50KSA7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG9ialsnQmFza2V0RGlzY291bnRNb2RpZmllciddLnB1c2goZGlzY291bnRPYmopOyBcclxuICAgICAgICAgICAgICAgICAgICB9ICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgIH0pOyAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgbGV0IHRvdGFsdHJhbnNhY3Rpb25EaXNjb3VudCA9IDA7XHJcbiAgICAgICAgICAgIG9ialsnQmFza2V0RGlzY291bnRNb2RpZmllciddLmZvckVhY2goKHZhbHVlOmFueSk9PntcclxuICAgICAgICAgICAgICAgIHRvdGFsdHJhbnNhY3Rpb25EaXNjb3VudCA9IHRvdGFsdHJhbnNhY3Rpb25EaXNjb3VudCArIHZhbHVlLkRpc2NvdW50ZWRWYWx1ZTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIC8vdXBkYXRlIHRoZSBwcm9kdWN0IHByaWNlXHJcbiAgICAgICAgICAgIG9ialsnRWZmZWN0aXZlTmV0VmFsdWUnXSA9IG9iai5FZmZlY3RpdmVOZXRWYWx1ZSArICB0b3RhbHRyYW5zYWN0aW9uRGlzY291bnQ7ICAgICAgICAgICAgICBcclxuICAgICAgICB9XHJcbiAgICAgICAgXHJcbiAgICAgICAgaWYgKHRoaXMudHJhbnNhY3Rpb25Eb2N1bWVudC5iYXNrZXQudHJhbnNhY3Rpb25Qcm9tb3Rpb24ubGVuZ3RoID4gMCB8fCB0aGlzLnRyYW5zYWN0aW9uRG9jdW1lbnQuYmFza2V0LmxpbmVQcm9tb3Rpb24ubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICBvYmpbJ0Rpc3RyaWJ1dGVkUHJvbW90aW9uU2F2aW5nJ10gPSBbXTtcclxuICAgICAgICAgICAgaWYgKHRoaXMudHJhbnNhY3Rpb25Eb2N1bWVudC5iYXNrZXQudHJhbnNhY3Rpb25Qcm9tb3Rpb24ubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy50cmFuc2FjdGlvbkRvY3VtZW50LmJhc2tldC50cmFuc2FjdGlvblByb21vdGlvbi5mb3JFYWNoKChlOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgcHJvbW90aW9uT2JqOiBhbnkgPSB7fTtcclxuICAgICAgICAgICAgICAgICAgICBlLml0ZW1MaW5lSWRzLmZvckVhY2goKGl0ZW1MaW5lSWQ6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXRlbUxpbmVJZCA9PSBlbGVtZW50Lml0ZW1MaW5lSWQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb21vdGlvbk9iai5Qcm9tb3Rpb25JRCA9IGUucHJvbW90aW9uSWQ7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9tb3Rpb25PYmouSGl0ID0gJzEnO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvbW90aW9uT2JqLlNhdmluZyA9IHRoaXMuZ2V0U2F2aW5nKGVsZW1lbnQudG90YWxMaW5lUHJpY2UsIGUucHJvbW90aW9uQW1vdW50KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb21vdGlvbk9iai5JU2F2aW5nID0gdGhpcy5nZXRTYXZpbmcoZWxlbWVudC50b3RhbExpbmVQcmljZSwgZS5wcm9tb3Rpb25BbW91bnQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqWydEaXN0cmlidXRlZFByb21vdGlvblNhdmluZyddLnB1c2gocHJvbW90aW9uT2JqKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmICh0aGlzLnRyYW5zYWN0aW9uRG9jdW1lbnQuYmFza2V0LmxpbmVQcm9tb3Rpb24ubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy50cmFuc2FjdGlvbkRvY3VtZW50LmJhc2tldC5saW5lUHJvbW90aW9uLmZvckVhY2goKGxpbmVQcm9tb3Rpb246IGFueSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCBwcm9tb3Rpb25PYmo6IGFueSA9IHt9O1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChlbGVtZW50Lml0ZW1MaW5lSWQgPT0gbGluZVByb21vdGlvbi5pdGVtTGluZUlkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHByb21vdGlvbk9iai5Qcm9tb3Rpb25JRCA9IGxpbmVQcm9tb3Rpb24ucHJvbW90aW9uSWQ7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHByb21vdGlvbk9iai5IaXQgPSBcIjFcIjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcHJvbW90aW9uT2JqLlNhdmluZyA9IGxpbmVQcm9tb3Rpb24ucHJvbW90aW9uTGluZVByaWNlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBwcm9tb3Rpb25PYmouSVNhdmluZyA9IGxpbmVQcm9tb3Rpb24ucHJvbW90aW9uTGluZVByaWNlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBvYmpbJ0Rpc3RyaWJ1dGVkUHJvbW90aW9uU2F2aW5nJ10ucHVzaChwcm9tb3Rpb25PYmopO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGxldCB0cmFuc2FjdGlvblByb21vdGlvbiA9IDA7XHJcbiAgICAgICAgICAgIG9ialsnRGlzdHJpYnV0ZWRQcm9tb3Rpb25TYXZpbmcnXS5mb3JFYWNoKCh2YWx1ZTogYW55KSA9PiB7XHJcbiAgICAgICAgICAgICAgICB0cmFuc2FjdGlvblByb21vdGlvbiA9IHRyYW5zYWN0aW9uUHJvbW90aW9uICsgdmFsdWUuU2F2aW5nO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgb2JqWydFZmZlY3RpdmVOZXRWYWx1ZSddID0gb2JqLkVmZmVjdGl2ZU5ldFZhbHVlICsgdHJhbnNhY3Rpb25Qcm9tb3Rpb247XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBvYmo7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0U2F2aW5nKHByaWNlLHByb21vdGlvbkFtb3VudCk6IGFueSB7XHJcbiAgICAgICAgbGV0IFNhdmluZyA9IChwcmljZSpwcm9tb3Rpb25BbW91bnQpL3RoaXMudHJhbnNhY3Rpb25Eb2N1bWVudC5iYXNrZXRTdW1tYXJ5LnNhbGVUb3RhbDtcclxuICAgICAgICByZXR1cm4gU2F2aW5nO1xyXG4gICAgfVxyXG5cclxuICAgIGdldExpbmVOdW1iZXIodmFsdWU6IGFueSxkaXNjb3VudEFtb3VudDpzdHJpbmcgKXtcclxuICAgICAgICBsZXQgbGluZU51bWJlcjtcclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMucmpPYmplY3RbJ0Jhc2tldERpc2NvdW50J10ubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgY29uc3QgZWxlbWVudCA9IHRoaXMucmpPYmplY3RbJ0Jhc2tldERpc2NvdW50J11baV07XHJcbiAgICAgICAgICAgIGlmKCB2YWx1ZS5yZWFzb25Db2RlID09PSBlbGVtZW50LlJlYXNvbkNvZGVJRCAmJiBkaXNjb3VudEFtb3VudCA9PT0gZWxlbWVudC5OZXRWYWx1ZSl7XHJcbiAgICAgICAgICAgICAgICBsaW5lTnVtYmVyID0gZWxlbWVudC5MaW5lTnVtYmVyO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7ICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGxpbmVOdW1iZXI7ICAgICAgICBcclxuICAgIH1cclxuXHJcblxyXG4gICAgZ2V0RGlzY291bnRlZFZhbHVlKHByaWNlOmFueSAsZGlzY291bnRBbW91bnQ6YW55ICkge1xyXG4gICAgICAgIGxldCBEaXNjb3VudGVkVmFsdWUgPSAocHJpY2UgKiBkaXNjb3VudEFtb3VudCkvdGhpcy50cmFuc2FjdGlvbkRvY3VtZW50LmJhc2tldFN1bW1hcnkuc2FsZVRvdGFsIDtcclxuICAgICAgICByZXR1cm4gRGlzY291bnRlZFZhbHVlO1xyXG4gICAgfVxyXG5cclxuICAgIGdldE9yaWdpbmFsVGF4KGVsZW1lbnQ6IFRQcm9kdWN0LCBWQVQpIHtcclxuICAgICAgICBsZXQgcHJpY2ViZWZvcmV0YXggPSAoZWxlbWVudC5wcmljZSAqIDEwMCkvKDEwMCArIFZBVCApXHJcbiAgICAgICAgbGV0IG9yaWdpbmFsdGF4PSBlbGVtZW50LnByaWNlIC0gcHJpY2ViZWZvcmV0YXhcclxuICAgICAgICByZXR1cm4gb3JpZ2luYWx0YXg7XHJcbiAgICB9XHJcblxyXG4gICAgY29udmVydFRvU3RyaW5nKHZhbHVlOiBhbnkpIHtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICB2YWx1ZSA9IEpTT04uc3RyaW5naWZ5KHZhbHVlKTtcclxuICAgICAgICAgICAgcmV0dXJuIHZhbHVlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICBjb25zb2xlLmxvZyh2YWx1ZSwgJ2NhbiBub3QgYmUgY29udmVydGVkIGluIHN0cmluZycsIGUpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBnZW5lcmF0ZUR5bmFtaWNTdG9ja0xvb2tVcCgpIHtcclxuICAgICAgICBsZXQgeCA9ICcwJztcclxuICAgICAgICB0aGlzLnRyYW5zYWN0aW9uRG9jdW1lbnQuYmFza2V0LnByb2R1Y3RzLmZvckVhY2goKGVsZW1lbnQ6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICBpZiAoZWxlbWVudC5kZWxpdmVyeU1ldGhvZCA9PT0gJzEnIHx8IGVsZW1lbnQuZGVsaXZlcnlNZXRob2QgPT09ICcyJykge1xyXG4gICAgICAgICAgICAgICAgeCA9ICcxJztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHJldHVybiB4O1xyXG4gICAgfVxyXG5cclxuICAgIGdldEF0dHJpYnV0ZXMoKXtcclxuICAgICAgICBsZXQgbmFtZTogc3RyaW5nIHwgYW55W10gPSBbXVxyXG4gICAgICAgIHRoaXMudHJhbnNhY3Rpb25Eb2N1bWVudC5iYXNrZXQucHJvZHVjdHMuZm9yRWFjaCgoZWxlbWVudDogYW55KSA9PiB7XHJcbiAgICAgICAgICAgIGlmICggZWxlbWVudC5hdHRyaWJ1dGVzICYmIGVsZW1lbnQuYXR0cmlidXRlcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICBuYW1lID0gZWxlbWVudC5hdHRyaWJ1dGVzLmZpbHRlcigoeDogYW55KSA9PiB4Lm5hbWUudG9VcHBlckNhc2UoKSA9PT0gZWxlbWVudC5uYW1lLnRvVXBwZXJDYXNlKCkpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgaWYgKG5hbWUubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICByZXR1cm4gbmFtZVswXS52YWx1ZVxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNle1xyXG4gICAgICAgICAgICByZXR1cm4gXCJcIlxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBnZXRDYXJlZ29yaWVzKGVsZW1lbnQpIHtcclxuICAgICAgICBsZXQgTU1Hcm91cElkID0gXCIgXCI7XHJcbiAgICAgICAgaWYgKGVsZW1lbnQuY2F0ZWdvcmllcyAmJiBlbGVtZW50LmNhdGVnb3JpZXMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICBsZXQgY2F0ZWdvcmllcyA9IGVsZW1lbnQuY2F0ZWdvcmllcy5maWx0ZXIoKHgpID0+IHgucGFyZW50SWQgIT0gJycpO1xyXG4gICAgICAgICAgICBsZXQgdmFsdWUgPSBjYXRlZ29yaWVzLmZpbHRlcigoeCkgPT4geC5pZCAhPSB4LnBhcmVudElkKTtcclxuICAgICAgICAgICAgTU1Hcm91cElkID0gdmFsdWVbMF0ubmFtZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIE1NR3JvdXBJZDtcclxuICAgIH1cclxuXHJcbiAgICBnZXREYXRlKGRhdGU6c3RyaW5nKXtcclxuICAgICAgICBsZXQgb2Zmc2V0ID0gdGhpcy5nZW5lcmF0ZVRpbWV6b25lb2Zmc2V0KGRhdGUpICogLTE7XHJcbiAgICAgICAgbGV0IG9mZnNldEhvdXJzID0gTWF0aC5hYnMoTWF0aC5mbG9vcihvZmZzZXQgLyA2MCkpOyAgICAgICAgXHJcblx0ICAgIGxldCBvZmZzZXRNaW51dGVzID0gTWF0aC5hYnMob2Zmc2V0KSAtIG9mZnNldEhvdXJzICogNjA7XHJcblxyXG4gICAgICAgIGxldCBvZmZzZXRTaWduID0gJysnO1xyXG4gICAgICAgIGlmIChvZmZzZXQgPCAwKSB7XHJcbiAgICAgICAgICAgIG9mZnNldFNpZ24gPSAnLSc7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBsZXQgbmV3ZGF0ZSA9IGRhdGUuc3Vic3RyaW5nKDAsMTkpO1xyXG4gICAgICAgIGNvbnN0IHggPSAobmV3ZGF0ZSsgb2Zmc2V0U2lnbiArU3RyaW5nKG9mZnNldEhvdXJzKS5wYWRTdGFydCgyLCAnMCcpKyc6JytTdHJpbmcob2Zmc2V0TWludXRlcykucGFkU3RhcnQoMiwgJzAnKSkudG9TdHJpbmcoKTtcclxuICAgICAgICByZXR1cm4geDsgICAgICAgIFxyXG4gICAgfVxyXG4gICAgXHJcbiAgICBnZXRUcmFuc2FjdGlvblByb21vdGlvbih0cmFuc2FjdGlvblByb21vdGlvbil7XHJcbiAgICAgICAgaWYodHJhbnNhY3Rpb25Qcm9tb3Rpb24gJiYgdHJhbnNhY3Rpb25Qcm9tb3Rpb24ubGVuZ3RoID4gMCl7XHJcbiAgICAgICAgICAgIHRoaXMucmpPYmplY3RbJ1Byb21vVm91Y2hlckl0ZW0nXSA9IHt9O1xyXG4gICAgICAgICAgICB0aGlzLnJqT2JqZWN0WydQcm9tb1ZvdWNoZXJJdGVtJ11bJ1hNTFNjaGVtYVZlcnNpb24nXSA9IHRoaXMueG1sU2NoZW1hVmVyc2lvbjtcclxuICAgICAgICAgICAgdGhpcy5yak9iamVjdFsnUHJvbW9Wb3VjaGVySXRlbSddWydMaW5lTnVtYmVyJ10gPSB0aGlzLmdlbmVyYXRlTGluZU51bWJlcigpO1xyXG4gICAgICAgICAgICB0aGlzLnJqT2JqZWN0WydQcm9tb1ZvdWNoZXJJdGVtJ11bJ05ldFZhbHVlJ10gPSAgdGhpcy5yZW1vdmVEZWNpbWFsKHRyYW5zYWN0aW9uUHJvbW90aW9uWzBdLnByb21vdGlvbkxpbmVQcmljZSkgKiAtMTtcclxuICAgICAgICAgICAgdGhpcy5yak9iamVjdFsnUHJvbW9Wb3VjaGVySXRlbSddWydFZmZlY3RpdmVOZXRWYWx1ZSddID0gdGhpcy5yZW1vdmVEZWNpbWFsKHRyYW5zYWN0aW9uUHJvbW90aW9uWzBdLnByb21vdGlvbkxpbmVQcmljZSkgKiAtMTtcclxuICAgICAgICAgICAgdGhpcy5yak9iamVjdFsnUHJvbW9Wb3VjaGVySXRlbSddWydEZXNjcmlwdGlvbiddID0gdHJhbnNhY3Rpb25Qcm9tb3Rpb25bMF0ucHJvbW90aW9uSW5mbztcclxuICAgICAgICAgICAgdGhpcy5yak9iamVjdFsnUHJvbW9Wb3VjaGVySXRlbSddWydEZXZpY2VJRCddID0gdGhpcy5kZXZpY2VJZDtcclxuICAgICAgICAgICAgdGhpcy5yak9iamVjdFsnUHJvbW9Wb3VjaGVySXRlbSddWydVc2VySUQnXSA9IHRoaXMudHJhbnNhY3Rpb25Eb2N1bWVudC51c2VyTmFtZTtcclxuICAgICAgICAgICAgdGhpcy5yak9iamVjdFsnUHJvbW9Wb3VjaGVySXRlbSddWydEYXRlVGltZUNyZWF0ZWQnXSA9IHRoaXMuY3JlYXRlZEF0O1xyXG4gICAgICAgICAgICB0aGlzLnJqT2JqZWN0WydQcm9tb1ZvdWNoZXJJdGVtJ11bJ1Byb2R1Y3RJZCddID0gXCJcIjsgLy90b2RvXHJcbiAgICAgICAgICAgIHRoaXMucmpPYmplY3RbJ1Byb21vVm91Y2hlckl0ZW0nXVsnU2VyaWFsTnVtYmVyJ10gPSBcIlwiIDsgLy90b2RvXHJcbiAgICAgICAgICAgIHRoaXMucmpPYmplY3RbJ1Byb21vVm91Y2hlckl0ZW0nXVsnTU1Hcm91cElkJ10gPSBcIlwiO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIFxyXG4gICAgZ2V0UXVhbnRpdHkoZWxlbWVudDogYW55KSB7XHJcbiAgICAgICAgbGV0IHF1YW50aXR5XHJcbiAgICAgICAgaWYodGhpcy50cmFuc2FjdGlvbkRvY3VtZW50LnVucmVmZXJlbmNlZFJlZnVuZCl7XHJcbiAgICAgICAgICAgIHF1YW50aXR5ID0gZWxlbWVudFsncXVhbnRpdHknXSA8IDAgPyBlbGVtZW50WydxdWFudGl0eSddLnRvRml4ZWQoMSkgOiAoLWVsZW1lbnRbJ3F1YW50aXR5J10pLnRvRml4ZWQoMSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2V7XHJcbiAgICAgICAgICAgIHF1YW50aXR5ID0gZWxlbWVudFsncmVmdW5kZWRRdWFudGl0eSddIDwgMCA/IGVsZW1lbnRbJ3JlZnVuZGVkUXVhbnRpdHknXS50b0ZpeGVkKDEpIDogKC1lbGVtZW50WydyZWZ1bmRlZFF1YW50aXR5J10pLnRvRml4ZWQoMSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBxdWFudGl0eTtcclxuICAgIH1cclxufVxyXG4iXX0=