@infrab4a/connect-angular 4.17.3-beta.9 → 4.18.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -28,7 +28,7 @@ export class CouponService {
28
28
  throw 'Cupom inválido.';
29
29
  if (coupon?.beginAt && coupon?.beginAt.getTime() > new Date().getTime())
30
30
  throw 'Cupom inválido.';
31
- if (coupon?.expiresIn && coupon?.expiresIn.getTime() < new Date().getTime())
31
+ if (coupon?.expiresIn && (coupon?.expiresIn).getTime() < new Date().getTime())
32
32
  throw 'Cupom expirado.';
33
33
  const isInShop = coupon.shopAvailability === Shops.ALL || coupon.shopAvailability === this.defaultShop;
34
34
  if (!isInShop)
@@ -83,34 +83,6 @@ export class CouponService {
83
83
  discount = checkout.subscriptionPlan.recurrencePrice * (coupon.discount.subscription.value / 100);
84
84
  return of(discount);
85
85
  }
86
- async calcDiscountShopping(coupon, checkout) {
87
- let discountInfo = null;
88
- if (checkout.user.isSubscriber && coupon.discount.subscriber.value) {
89
- discountInfo = await this.calcDiscountByType(coupon.discount.subscriber.type, coupon.discount.subscriber.value, coupon.productsCategories, checkout);
90
- }
91
- else {
92
- discountInfo = await this.calcDiscountByType(coupon.discount.non_subscriber.type, coupon.discount.non_subscriber.value, coupon.productsCategories, checkout);
93
- }
94
- return { discount: discountInfo.discount, lineItems: discountInfo.lineItems };
95
- }
96
- async calcDiscountByType(type, value, categories, checkout) {
97
- let discount = 0;
98
- if (type == CouponTypes.SHIPPING) {
99
- const subTotal = checkout.shipping.ShippingPrice;
100
- const discount = +(subTotal * ((value > 100 ? 100 : value) / 100)).toFixed(2);
101
- return { discount, lineItems: checkout.lineItems };
102
- }
103
- const lineItensElegibleForDiscount = await this.getLineItensEligebleForDiscount(categories, checkout);
104
- const subTotal = this.calcCheckoutSubtotal(lineItensElegibleForDiscount, checkout.user);
105
- if (type == CouponTypes.ABSOLUTE) {
106
- discount = value > subTotal ? subTotal : value;
107
- }
108
- else {
109
- discount = +(subTotal * ((value > 100 ? 100 : value) / 100)).toFixed(2);
110
- }
111
- const lineItems = this.calcLineItenDiscount(type, lineItensElegibleForDiscount, value, subTotal);
112
- return { discount, lineItems };
113
- }
114
86
  async hasMinSubTotal(coupon, checkout) {
115
87
  if (!coupon.minSubTotalValue)
116
88
  return true;
@@ -232,34 +204,6 @@ export class CouponService {
232
204
  }
233
205
  return couponUseLimits;
234
206
  }
235
- calcLineItenDiscount(type, lineItems, couponDiscount, subTotal) {
236
- let lineItemsDiscount = [];
237
- if (type === CouponTypes.ABSOLUTE) {
238
- const couponDiscountMax = couponDiscount > subTotal ? subTotal : couponDiscount;
239
- lineItemsDiscount = lineItems.map((item) => {
240
- if (item.isGift)
241
- return item;
242
- const totalItemPercentage = item.pricePaid / subTotal;
243
- const discountItem = couponDiscountMax * totalItemPercentage;
244
- return {
245
- ...item,
246
- discount: Number(discountItem.toFixed(2)),
247
- };
248
- });
249
- }
250
- else {
251
- lineItemsDiscount = lineItems.map((item) => {
252
- if (item.isGift)
253
- return item;
254
- const discountItem = item.pricePaid * (couponDiscount / 100);
255
- return {
256
- ...item,
257
- discount: Number(discountItem.toFixed(2)),
258
- };
259
- });
260
- }
261
- return lineItemsDiscount;
262
- }
263
207
  }
264
208
  CouponService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.1.0", ngImport: i0, type: CouponService, deps: [{ token: 'CouponRepository' }, { token: DEFAULT_SHOP }, { token: 'OrderRepository' }, { token: 'CategoryRepository' }], target: i0.ɵɵFactoryTarget.Injectable });
265
209
  CouponService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.1.0", ngImport: i0, type: CouponService, providedIn: 'root' });
@@ -281,4 +225,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.1.0", ngImpor
281
225
  type: Inject,
282
226
  args: ['CategoryRepository']
283
227
  }] }]; } });
284
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY291cG9uLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9jb25uZWN0LWFuZ3VsYXIvc3JjL3NlcnZpY2VzL2NvdXBvbi5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFBO0FBQ2xELE9BQU8sRUFLTCxhQUFhLEVBR2IsV0FBVyxFQUNYLGFBQWEsRUFJYixXQUFXLEVBQ1gsS0FBSyxFQUVMLEtBQUssR0FDTixNQUFNLG1CQUFtQixDQUFBO0FBQzFCLE9BQU8sRUFBRSxJQUFJLEVBQWMsRUFBRSxFQUFFLE1BQU0sTUFBTSxDQUFBO0FBQzNDLE9BQU8sRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUE7QUFDL0MsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLFdBQVcsQ0FBQTs7O0FBS3hDLE1BQU0sT0FBTyxhQUFhO0lBQ3hCLFlBQytDLGdCQUFrQyxFQUN4QyxXQUFrQixFQUNiLGVBQWdDLEVBQzdCLGtCQUFzQztRQUh4QyxxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQWtCO1FBQ3hDLGdCQUFXLEdBQVgsV0FBVyxDQUFPO1FBQ2Isb0JBQWUsR0FBZixlQUFlLENBQWlCO1FBQzdCLHVCQUFrQixHQUFsQixrQkFBa0IsQ0FBb0I7UUFxUC9FLDRCQUF1QixHQUFHLENBQUMsU0FBaUIsRUFBVyxFQUFFLENBQUMsQ0FBQyxDQUFDLFNBQVMsRUFBRSxLQUFLLENBQUMsY0FBYyxDQUFDLENBQUE7SUFwUGpHLENBQUM7SUFFSixXQUFXLENBQ1QsUUFBZ0IsRUFDaEIsWUFBMkIsRUFDM0IsUUFBMkIsRUFDM0IsSUFBWTtRQUVaLE9BQU8sSUFBSSxDQUNULElBQUksQ0FBQyxnQkFBZ0I7YUFDbEIsSUFBSSxDQUFDO1lBQ0osT0FBTyxFQUFFO2dCQUNQLFFBQVEsRUFBRSxFQUFFLFFBQVEsRUFB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QyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUM7aUJBQzlCLENBQUE7WUFDZixDQUFDLENBQUMsQ0FBQTtTQUNIO1FBRUQsT0FBTyxpQkFBaUIsQ0FBQTtJQUMxQixDQUFDOzswR0E5V1UsYUFBYSxrQkFFZCxrQkFBa0IsYUFDbEIsWUFBWSxhQUNaLGlCQUFpQixhQUNqQixvQkFBb0I7OEdBTG5CLGFBQWEsY0FGWixNQUFNOzJGQUVQLGFBQWE7a0JBSHpCLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25COzswQkFHSSxNQUFNOzJCQUFDLGtCQUFrQjs7MEJBQ3pCLE1BQU07MkJBQUMsWUFBWTs7MEJBQ25CLE1BQU07MkJBQUMsaUJBQWlCOzswQkFDeEIsTUFBTTsyQkFBQyxvQkFBb0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3QsIEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJ1xyXG5pbXBvcnQge1xyXG4gIENhdGVnb3J5LFxyXG4gIENhdGVnb3J5UmVwb3NpdG9yeSxcclxuICBDaGVja291dCxcclxuICBDaGVja291dFN1YnNjcmlwdGlvbixcclxuICBDaGVja291dFR5cGVzLFxyXG4gIENvdXBvbixcclxuICBDb3Vwb25SZXBvc2l0b3J5LFxyXG4gIENvdXBvblR5cGVzLFxyXG4gIEV4Y2x1c2l2aXRpZXMsXHJcbiAgTGluZUl0ZW0sXHJcbiAgT3JkZXIsXHJcbiAgT3JkZXJSZXBvc2l0b3J5LFxyXG4gIE9yZGVyU3RhdHVzLFxyXG4gIFNob3BzLFxyXG4gIFVzZXIsXHJcbiAgV2hlcmUsXHJcbn0gZnJvbSAnQGluZnJhYjRhL2Nvbm5lY3QnXHJcbmltcG9ydCB7IGZyb20sIE9ic2VydmFibGUsIG9mIH0gZnJvbSAncnhqcydcclxuaW1wb3J0IHsgY29uY2F0TWFwLCBtYXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycydcclxuaW1wb3J0IHsgREVGQVVMVF9TSE9QIH0gZnJvbSAnLi4vY29uc3RzJ1xyXG5cclxuQEluamVjdGFibGUoe1xyXG4gIHByb3ZpZGVkSW46ICdyb290JyxcclxufSlcclxuZXhwb3J0IGNsYXNzIENvdXBvblNlcnZpY2Uge1xyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgQEluamVjdCgnQ291cG9uUmVwb3NpdG9yeScpIHByaXZhdGUgcmVhZG9ubHkgY291cG9uUmVwb3NpdG9yeTogQ291cG9uUmVwb3NpdG9yeSxcclxuICAgIEBJbmplY3QoREVGQVVMVF9TSE9QKSBwcml2YXRlIHJlYWRvbmx5IGRlZmF1bHRTaG9wOiBTaG9wcyxcclxuICAgIEBJbmplY3QoJ09yZGVyUmVwb3NpdG9yeScpIHByaXZhdGUgcmVhZG9ubHkgb3JkZXJSZXBvc2l0b3J5OiBPcmRlclJlcG9zaXRvcnksXHJcbiAgICBASW5qZWN0KCdDYXRlZ29yeVJlcG9zaXRvcnknKSBwcml2YXRlIHJlYWRvbmx5IGNhdGVnb3J5UmVwb3NpdG9yeTogQ2F0ZWdvcnlSZXBvc2l0b3J5LFxyXG4gICkge31cclxuXHJcbiAgY2hlY2tDb3Vwb24oXHJcbiAgICBuaWNrbmFtZTogc3RyaW5nLFxyXG4gICAgY2hlY2tvdXRUeXBlOiBDaGVja291dFR5cGVzLFxyXG4gICAgY2hlY2tvdXQ6IFBhcnRpYWw8Q2hlY2tvdXQ+LFxyXG4gICAgcGxhbjogc3RyaW5nLFxyXG4gICk6IE9ic2VydmFibGU8Q291cG9uPiB7XHJcbiAgICByZXR1cm4gZnJvbShcclxuICAgICAgdGhpcy5jb3Vwb25SZXBvc2l0b3J5XHJcbiAgICAgICAgLmZpbmQoe1xyXG4gICAgICAgICAgZmlsdGVyczoge1xyXG4gICAgICAgICAgICBuaWNrbmFtZTogeyBvcGVyYXRvcjogV2hlcmUuRVFVQUxTLCB2YWx1ZTogbmlja25hbWUgfSxcclxuICAgICAgICAgICAgYWN0aXZlOiB7IG9wZXJhdG9yOiBXaGVyZS5FUVVBTFMsIHZhbHVlOiB0cnVlIH0sXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgIH0pXHJcbiAgICAgICAgLnRoZW4oKHJlc3VsdCkgPT4gcmVzdWx0LmRhdGFbMF0pLFxyXG4gICAgKS5waXBlKFxyXG4gICAgICBjb25jYXRNYXAoKGNvdXBvbikgPT4gdGhpcy5jb3Vwb25WYWxpZGF0aW9uKGNvdXBvbiwgY2hlY2tvdXRUeXBlKSksXHJcbiAgICAgIGNvbmNhdE1hcCgoY291cG9uVmFsaWQ6IENvdXBvbikgPT4gdGhpcy5jb3Vwb25SdWxlc1ZhbGlkYXRpb24oY291cG9uVmFsaWQsIGNoZWNrb3V0VHlwZSwgY2hlY2tvdXQsIHBsYW4pKSxcclxuICAgICAgbWFwKChjb3Vwb25WYWxpZGF0ZWQ6IENvdXBvbikgPT4gY291cG9uVmFsaWRhdGVkIGFzIENvdXBvbiksXHJcbiAgICApXHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFzeW5jIGNvdXBvblZhbGlkYXRpb24oY291cG9uOiBDb3Vwb24sIGNoZWNrb3V0VHlwZTogQ2hlY2tvdXRUeXBlcykge1xyXG4gICAgaWYgKCFjb3Vwb24pIHRocm93ICdDdXBvbSBpbnbDoWxpZG8uJ1xyXG5cclxuICAgIGlmIChjb3Vwb24/LmJlZ2luQXQgJiYgY291cG9uPy5iZWdpbkF0LmdldFRpbWUoKSA+IG5ldyBEYXRlKCkuZ2V0VGltZSgpKSB0aHJvdyAnQ3Vwb20gaW52w6FsaWRvLidcclxuXHJcbiAgICBpZiAoY291cG9uPy5leHBpcmVzSW4gJiYgY291cG9uPy5leHBpcmVzSW4uZ2V0VGltZSgpIDwgbmV3IERhdGUoKS5nZXRUaW1lKCkpIHRocm93ICdDdXBvbSBleHBpcmFkby4nXHJcblxyXG4gICAgY29uc3QgaXNJblNob3AgPSBjb3Vwb24uc2hvcEF2YWlsYWJpbGl0eSA9PT0gU2hvcHMuQUxMIHx8IGNvdXBvbi5zaG9wQXZhaWxhYmlsaXR5ID09PSB0aGlzLmRlZmF1bHRTaG9wXHJcblxyXG4gICAgaWYgKCFpc0luU2hvcCkgdGhyb3cgJ0N1cG9tIGludsOhbGlkbyBwYXJhIGxvamEuJ1xyXG5cclxuICAgIGNvbnN0IGlzQ2hlY2tvdXRUeXBlID0gY291cG9uLmNoZWNrb3V0VHlwZSA9PT0gQ2hlY2tvdXRUeXBlcy5BTEwgfHwgY291cG9uLmNoZWNrb3V0VHlwZSA9PT0gY2hlY2tvdXRUeXBlXHJcblxyXG4gICAgaWYgKCFpc0NoZWNrb3V0VHlwZSkgdGhyb3cgJ0N1cG9tIGludsOhbGlkby4gRXJybyBkZSBjaGVja291dC4nXHJcblxyXG4gICAgcmV0dXJuIGNvdXBvblxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhc3luYyBjb3Vwb25SdWxlc1ZhbGlkYXRpb24oXHJcbiAgICBjb3Vwb246IENvdXBvbixcclxuICAgIGNoZWNrb3V0VHlwZTogQ2hlY2tvdXRUeXBlcyxcclxuICAgIGNoZWNrb3V0OiBQYXJ0aWFsPENoZWNrb3V0PixcclxuICAgIHBsYW46IHN0cmluZyxcclxuICApIHtcclxuICAgIGlmIChjaGVja291dFR5cGUgPT0gQ2hlY2tvdXRUeXBlcy5TVUJTQ1JJUFRJT04pIHtcclxuICAgICAgaWYgKGNvdXBvbi5wbGFuICYmIGNvdXBvbi5wbGFuLnRvVXBwZXJDYXNlKCkgIT09IHBsYW4udG9VcHBlckNhc2UoKSkgdGhyb3cgJ0N1cG9tIGludsOhbGlkbyBwYXJhIHN1YSBhc3NpbmF0dXJhLidcclxuXHJcbiAgICAgIHJldHVybiBjb3Vwb25cclxuICAgIH1cclxuXHJcbiAgICBjb25zdCB2YWxpZFVzZXIgPSB0aGlzLmNvdXBvbVVzZXJWYWxpZGF0aW9uKGNvdXBvbiwgY2hlY2tvdXQ/LnVzZXIpXHJcblxyXG4gICAgaWYgKCF2YWxpZFVzZXIpIHRocm93ICdVc3XDoXJpbyBuw6NvIGVsZWfDrXZlbC4nXHJcblxyXG4gICAgY29uc3QgY291cG9uVXNlTGltaXRzID0gdGhpcy5nZXRDb3Vwb25Vc2VMaW1pdHMoY291cG9uLCBjaGVja291dFR5cGUsIGNoZWNrb3V0LnVzZXIpXHJcblxyXG4gICAgaWYgKGNvdXBvblVzZUxpbWl0cy5maXJzdE9yZGVyKSB7XHJcbiAgICAgIGNvbnN0IG9yZGVyc1VzZXIgPSBhd2FpdCB0aGlzLmdldE9yZGVyc0Zyb21Vc2VyKGNoZWNrb3V0LnVzZXIuZW1haWwudG9Mb2NhbGVMb3dlckNhc2UoKSlcclxuICAgICAgaWYgKGNvdXBvblVzZUxpbWl0cy5maXJzdE9yZGVyICYmIG9yZGVyc1VzZXIubGVuZ3RoID49IDEpIHRocm93ICdMaW1pdGUgZGUgdXNvIGF0aW5naWRvJ1xyXG4gICAgfVxyXG5cclxuICAgIGlmICghY291cG9uVXNlTGltaXRzLnVubGltaXRlZCB8fCBjb3Vwb25Vc2VMaW1pdHMubGltaXRlZFBlclVzZXIpIHtcclxuICAgICAgY29uc3Qgb3JkZXJzQ291cG9uID0gYXdhaXQgdGhpcy5nZXRPcmRlcnNXaXRoQ291cG9uKGNvdXBvbilcclxuXHJcbiAgICAgIGlmICghY291cG9uVXNlTGltaXRzLnVubGltaXRlZCAmJiBjb3Vwb25Vc2VMaW1pdHMudG90YWwgJiYgb3JkZXJzQ291cG9uLmxlbmd0aCA+PSBjb3Vwb25Vc2VMaW1pdHMudG90YWwpXHJcbiAgICAgICAgdGhyb3cgJ0xpbWl0ZSBkZSB1c28gYXRpbmdpZG8uJ1xyXG5cclxuICAgICAgaWYgKGNvdXBvblVzZUxpbWl0cy5saW1pdGVkUGVyVXNlcikge1xyXG4gICAgICAgIGNvbnN0IG9yZGVyc1dpdGhVc2VyID0gdGhpcy5jb3VudE9yZGVyc1dpdGhVc2VyKG9yZGVyc0NvdXBvbiwgY2hlY2tvdXQudXNlci5lbWFpbClcclxuXHJcbiAgICAgICAgaWYgKG9yZGVyc1dpdGhVc2VyID4gMCkgdGhyb3cgJ0xpbWl0ZSBkZSB1c28gcG9yIHVzdcOhcmlvIGF0aW5naWRvLidcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IGhhc1Byb2R1Y3RDYXRlZ29yaWVzID0gYXdhaXQgdGhpcy5oYXNQcm9kdWN0Q2F0ZWdvcmllcyhjb3Vwb24sIGNoZWNrb3V0KVxyXG5cclxuICAgIGlmICghaGFzUHJvZHVjdENhdGVnb3JpZXMpIHRocm93ICdTZXUgY2FycmluaG8gbsOjbyBwb3NzdWkgcHJvZHV0b3MgZWxlZ8OtdmVpcyBwYXJhIGRlc2NvbnRvLidcclxuXHJcbiAgICBjb25zdCBoYXNNaW5TdWJUb3RhbCA9IGF3YWl0IHRoaXMuaGFzTWluU3ViVG90YWwoY291cG9uLCBjaGVja291dClcclxuXHJcbiAgICBpZiAoIWhhc01pblN1YlRvdGFsKSB7XHJcbiAgICAgIGlmIChjb3Vwb24ucHJvZHVjdHNDYXRlZ29yaWVzPy5sZW5ndGgpIHtcclxuICAgICAgICB0aHJvdyBgVmFsb3IgbcOtbmltbyBkZSAke0ludGwuTnVtYmVyRm9ybWF0KCdwdC1CUicsIHsgc3R5bGU6ICdjdXJyZW5jeScsIGN1cnJlbmN5OiAnQlJMJyB9KS5mb3JtYXQoXHJcbiAgICAgICAgICBjb3Vwb24ubWluU3ViVG90YWxWYWx1ZSxcclxuICAgICAgICApfSBuw6NvIGF0aW5naWRvIG5hKHMpIGNhdGVnb3JpYShzKSBlbGVnw612ZWlzIHBhcmEgbyBkZXNjb250by5gXHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHRocm93IGBWYWxvciBtw61uaW1vIGRlICR7SW50bC5OdW1iZXJGb3JtYXQoJ3B0LUJSJywgeyBzdHlsZTogJ2N1cnJlbmN5JywgY3VycmVuY3k6ICdCUkwnIH0pLmZvcm1hdChcclxuICAgICAgICBjb3Vwb24ubWluU3ViVG90YWxWYWx1ZSxcclxuICAgICAgKX0gbsOjbyBhdGluZ2lkby5gXHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGNvdXBvblxyXG4gIH1cclxuXHJcbiAgcHVibGljIGNhbGNEaXNjb3VudFN1YnNjcmlwdGlvbihjb3Vwb246IENvdXBvbiwgY2hlY2tvdXQ6IFBhcnRpYWw8Q2hlY2tvdXRTdWJzY3JpcHRpb24+KTogT2JzZXJ2YWJsZTxudW1iZXI+IHtcclxuICAgIGxldCBkaXNjb3VudCA9IDBcclxuXHJcbiAgICBpZiAoY291cG9uLmRpc2NvdW50LnN1YnNjcmlwdGlvbi50eXBlID09IENvdXBvblR5cGVzLkFCU09MVVRFKSBkaXNjb3VudCA9IGNvdXBvbi5kaXNjb3VudC5zdWJzY3JpcHRpb24udmFsdWVcclxuICAgIGVsc2UgZGlzY291bnQgPSBjaGVja291dC5zdWJzY3JpcHRpb25QbGFuLnJlY3VycmVuY2VQcmljZSAqIChjb3Vwb24uZGlzY291bnQuc3Vic2NyaXB0aW9uLnZhbHVlIC8gMTAwKVxyXG5cclxuICAgIHJldHVybiBvZihkaXNjb3VudClcclxuICB9XHJcblxyXG4gIHB1YmxpYyBhc3luYyBjYWxjRGlzY291bnRTaG9wcGluZyhcclxuICAgIGNvdXBvbjogQ291cG9uLFxyXG4gICAgY2hlY2tvdXQ6IFBhcnRpYWw8Q2hlY2tvdXQ+LFxyXG4gICk6IFByb21pc2U8eyBkaXNjb3VudDogbnVtYmVyOyBsaW5lSXRlbXM6IExpbmVJdGVtW10gfT4ge1xyXG4gICAgbGV0IGRpc2NvdW50SW5mbzogeyBkaXNjb3VudDogbnVtYmVyOyBsaW5lSXRlbXM6IExpbmVJdGVtW10gfSA9IG51bGxcclxuXHJcbiAgICBpZiAoY2hlY2tvdXQudXNlci5pc1N1YnNjcmliZXIgJiYgY291cG9uLmRpc2NvdW50LnN1YnNjcmliZXIudmFsdWUpIHtcclxuICAgICAgZGlzY291bnRJbmZvID0gYXdhaXQgdGhpcy5jYWxjRGlzY291bnRCeVR5cGUoXHJcbiAgICAgICAgY291cG9uLmRpc2NvdW50LnN1YnNjcmliZXIudHlwZSxcclxuICAgICAgICBjb3Vwb24uZGlzY291bnQuc3Vic2NyaWJlci52YWx1ZSxcclxuICAgICAgICBjb3Vwb24ucHJvZHVjdHNDYXRlZ29yaWVzLFxyXG4gICAgICAgIGNoZWNrb3V0LFxyXG4gICAgICApXHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBkaXNjb3VudEluZm8gPSBhd2FpdCB0aGlzLmNhbGNEaXNjb3VudEJ5VHlwZShcclxuICAgICAgICBjb3Vwb24uZGlzY291bnQubm9uX3N1YnNjcmliZXIudHlwZSxcclxuICAgICAgICBjb3Vwb24uZGlzY291bnQubm9uX3N1YnNjcmliZXIudmFsdWUsXHJcbiAgICAgICAgY291cG9uLnByb2R1Y3RzQ2F0ZWdvcmllcyxcclxuICAgICAgICBjaGVja291dCxcclxuICAgICAgKVxyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiB7IGRpc2NvdW50OiBkaXNjb3VudEluZm8uZGlzY291bnQsIGxpbmVJdGVtczogZGlzY291bnRJbmZvLmxpbmVJdGVtcyB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFzeW5jIGNhbGNEaXNjb3VudEJ5VHlwZShcclxuICAgIHR5cGU6IENvdXBvblR5cGVzLFxyXG4gICAgdmFsdWU6IG51bWJlcixcclxuICAgIGNhdGVnb3JpZXM6IHN0cmluZ1tdLFxyXG4gICAgY2hlY2tvdXQ6IFBhcnRpYWw8Q2hlY2tvdXQ+LFxyXG4gICk6IFByb21pc2U8eyBkaXNjb3VudDogbnVtYmVyOyBsaW5lSXRlbXM6IExpbmVJdGVtW10gfT4ge1xyXG4gICAgbGV0IGRpc2NvdW50ID0gMFxyXG5cclxuICAgIGlmICh0eXBlID09IENvdXBvblR5cGVzLlNISVBQSU5HKSB7XHJcbiAgICAgIGNvbnN0IHN1YlRvdGFsID0gY2hlY2tvdXQuc2hpcHBpbmcuU2hpcHBpbmdQcmljZVxyXG4gICAgICBjb25zdCBkaXNjb3VudCA9ICsoc3ViVG90YWwgKiAoKHZhbHVlID4gMTAwID8gMTAwIDogdmFsdWUpIC8gMTAwKSkudG9GaXhlZCgyKVxyXG5cclxuICAgICAgcmV0dXJuIHsgZGlzY291bnQsIGxpbmVJdGVtczogY2hlY2tvdXQubGluZUl0ZW1zIH1cclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBsaW5lSXRlbnNFbGVnaWJsZUZvckRpc2NvdW50ID0gYXdhaXQgdGhpcy5nZXRMaW5lSXRlbnNFbGlnZWJsZUZvckRpc2NvdW50KGNhdGVnb3JpZXMsIGNoZWNrb3V0KVxyXG4gICAgY29uc3Qgc3ViVG90YWwgPSB0aGlzLmNhbGNDaGVja291dFN1YnRvdGFsKGxpbmVJdGVuc0VsZWdpYmxlRm9yRGlzY291bnQsIGNoZWNrb3V0LnVzZXIpXHJcblxyXG4gICAgaWYgKHR5cGUgPT0gQ291cG9uVHlwZXMuQUJTT0xVVEUpIHtcclxuICAgICAgZGlzY291bnQgPSB2YWx1ZSA+IHN1YlRvdGFsID8gc3ViVG90YWwgOiB2YWx1ZVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgZGlzY291bnQgPSArKHN1YlRvdGFsICogKCh2YWx1ZSA+IDEwMCA/IDEwMCA6IHZhbHVlKSAvIDEwMCkpLnRvRml4ZWQoMilcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBsaW5lSXRlbXMgPSB0aGlzLmNhbGNMaW5lSXRlbkRpc2NvdW50KHR5cGUsIGxpbmVJdGVuc0VsZWdpYmxlRm9yRGlzY291bnQsIHZhbHVlLCBzdWJUb3RhbClcclxuXHJcbiAgICByZXR1cm4geyBkaXNjb3VudCwgbGluZUl0ZW1zIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgYXN5bmMgaGFzTWluU3ViVG90YWwoY291cG9uOiBDb3Vwb24sIGNoZWNrb3V0OiBQYXJ0aWFsPENoZWNrb3V0Pik6IFByb21pc2U8Ym9vbGVhbj4ge1xyXG4gICAgaWYgKCFjb3Vwb24ubWluU3ViVG90YWxWYWx1ZSkgcmV0dXJuIHRydWVcclxuXHJcbiAgICBjb25zdCBsaW5lSXRlbnNEaXNjb3VudCA9IGF3YWl0IHRoaXMuZ2V0TGluZUl0ZW5zRWxpZ2VibGVGb3JEaXNjb3VudChjb3Vwb24ucHJvZHVjdHNDYXRlZ29yaWVzLCBjaGVja291dClcclxuICAgIGNvbnN0IHN1YlRvdGFsID0gdGhpcy5jYWxjQ2hlY2tvdXRTdWJ0b3RhbChsaW5lSXRlbnNEaXNjb3VudCwgY2hlY2tvdXQudXNlcilcclxuXHJcbiAgICBpZiAoY291cG9uLm1pblN1YlRvdGFsVmFsdWUgPD0gc3ViVG90YWwpIHJldHVybiB0cnVlXHJcblxyXG4gICAgcmV0dXJuIGZhbHNlXHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFzeW5jIGhhc1Byb2R1Y3RDYXRlZ29yaWVzKGNvdXBvbjogQ291cG9uLCBjaGVja291dDogUGFydGlhbDxDaGVja291dD4pOiBQcm9taXNlPGJvb2xlYW4+IHtcclxuICAgIGlmICghY291cG9uLnByb2R1Y3RzQ2F0ZWdvcmllcyB8fCAhY291cG9uLnByb2R1Y3RzQ2F0ZWdvcmllcz8ubGVuZ3RoKSB7XHJcbiAgICAgIHJldHVybiB0cnVlXHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgY291cG9uQ2F0ZWdvcmllcyA9IGF3YWl0IHRoaXMuZ2V0Q291cG9uQ2F0ZWdvcmllc0lkKGNvdXBvbi5wcm9kdWN0c0NhdGVnb3JpZXMpXHJcbiAgICBjb25zdCBoYXNDYXRlZ29yaWVzID0gY2hlY2tvdXQubGluZUl0ZW1zPy5maWx0ZXIoKGl0ZW0pID0+IHtcclxuICAgICAgaWYgKGl0ZW0uaXNHaWZ0KSByZXR1cm4gZmFsc2VcclxuICAgICAgaWYgKCFpdGVtLmNhdGVnb3JpZXMgfHwgIWl0ZW0uY2F0ZWdvcmllcz8ubGVuZ3RoKSByZXR1cm4gdHJ1ZVxyXG5cclxuICAgICAgcmV0dXJuIGl0ZW0uY2F0ZWdvcmllcy5zb21lKChjKSA9PiBjb3Vwb25DYXRlZ29yaWVzLnNvbWUoKGNhdCkgPT4gY2F0ID09IGMpKVxyXG4gICAgfSlcclxuXHJcbiAgICByZXR1cm4gaGFzQ2F0ZWdvcmllcy5sZW5ndGggPyB0cnVlIDogZmFsc2VcclxuICB9XHJcblxyXG4gIHByaXZhdGUgY291cG9tVXNlclZhbGlkYXRpb24oY291cG9uOiBDb3Vwb24sIHVzZXI6IFVzZXIpIHtcclxuICAgIGlmICghdXNlciB8fCBjb3Vwb24uZXhjbHVzaXZpdHlUeXBlLmluY2x1ZGVzKEV4Y2x1c2l2aXRpZXMuQUxMX1VTRVJTKSkgcmV0dXJuIHRydWVcclxuXHJcbiAgICBsZXQgdXNlclR5cGVzOiBFeGNsdXNpdml0aWVzW10gPSBbXVxyXG5cclxuICAgIGlmIChcclxuICAgICAgY291cG9uLmV4Y2x1c2l2aXR5VHlwZS5pbmNsdWRlcyhFeGNsdXNpdml0aWVzLkNPTExBQk9SQVRPUlMpICYmXHJcbiAgICAgIHRoaXMuZW1haWxJc0Zyb21Db2xsYWJvcmF0b3IodXNlci5lbWFpbC50b0xvY2FsZUxvd2VyQ2FzZSgpKVxyXG4gICAgKVxyXG4gICAgICB1c2VyVHlwZXMucHVzaChFeGNsdXNpdml0aWVzLkNPTExBQk9SQVRPUlMpXHJcblxyXG4gICAgaWYgKFxyXG4gICAgICBjb3Vwb24uZXhjbHVzaXZpdHlUeXBlLmluY2x1ZGVzKEV4Y2x1c2l2aXRpZXMuU1BFQ0lGSUNfVVNFUikgJiZcclxuICAgICAgY291cG9uLnVzZXJFeGNsdXNpdmVFbWFpbC5pbmNsdWRlcyh1c2VyLmVtYWlsLnRvTG9jYWxlTG93ZXJDYXNlKCkpXHJcbiAgICApXHJcbiAgICAgIHVzZXJUeXBlcy5wdXNoKEV4Y2x1c2l2aXRpZXMuU1BFQ0lGSUNfVVNFUilcclxuXHJcbiAgICBpZiAoXHJcbiAgICAgIGNvdXBvbi5leGNsdXNpdml0eVR5cGUuaW5jbHVkZXMoRXhjbHVzaXZpdGllcy5BQ1RJVkVfU1VCU0NSSUJFUikgJiZcclxuICAgICAgdXNlci5pc1N1YnNjcmliZXIgJiZcclxuICAgICAgdXNlci5zdWJzY3JpcHRpb25QbGFuICE9ICcnXHJcbiAgICApXHJcbiAgICAgIHVzZXJUeXBlcy5wdXNoKEV4Y2x1c2l2aXRpZXMuQUNUSVZFX1NVQlNDUklCRVIpXHJcblxyXG4gICAgaWYgKFxyXG4gICAgICB1c2VyLmlzU3Vic2NyaWJlciAmJlxyXG4gICAgICB1c2VyLnN1YnNjcmlwdGlvblBsYW4gPT0gJycgJiZcclxuICAgICAgY291cG9uLmV4Y2x1c2l2aXR5VHlwZS5pbmNsdWRlcyhFeGNsdXNpdml0aWVzLklOQUNUSVZFX1NVQlNDUklCRVIpXHJcbiAgICApXHJcbiAgICAgIHVzZXJUeXBlcy5wdXNoKEV4Y2x1c2l2aXRpZXMuSU5BQ1RJVkVfU1VCU0NSSUJFUilcclxuXHJcbiAgICBpZiAoY291cG9uLmV4Y2x1c2l2aXR5VHlwZS5pbmNsdWRlcyhFeGNsdXNpdml0aWVzLk5PTl9TVUJTQ1JJQkVSKSAmJiAhdXNlci5pc1N1YnNjcmliZXIpXHJcbiAgICAgIHVzZXJUeXBlcy5wdXNoKEV4Y2x1c2l2aXRpZXMuTk9OX1NVQlNDUklCRVIpXHJcblxyXG4gICAgcmV0dXJuIGNvdXBvbi5leGNsdXNpdml0eVR5cGUuc29tZSgocikgPT4gdXNlclR5cGVzLmluY2x1ZGVzKHIpKVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhc3luYyBnZXRDb3Vwb25DYXRlZ29yaWVzSWQocHJvZHVjdHNDYXRlZ29yaWVzOiBzdHJpbmdbXSk6IFByb21pc2U8QXJyYXk8U3RyaW5nPj4ge1xyXG4gICAgY29uc3QgY291cG9uQ2F0ZWdvcmllczogQXJyYXk8U3RyaW5nPiA9IFtdXHJcblxyXG4gICAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IHByb2R1Y3RzQ2F0ZWdvcmllcy5sZW5ndGg7IGluZGV4KyspIHtcclxuICAgICAgY29uc3QgY2F0ZWdvcnk6IENhdGVnb3J5ICYgeyBmaXJlc3RvcmVJZD86IHN0cmluZyB9ID0gYXdhaXQgdGhpcy5jYXRlZ29yeVJlcG9zaXRvcnkuZ2V0KHtcclxuICAgICAgICBpZDogcHJvZHVjdHNDYXRlZ29yaWVzW2luZGV4XSxcclxuICAgICAgfSlcclxuXHJcbiAgICAgIGlmIChjYXRlZ29yeSkge1xyXG4gICAgICAgIGNvbnN0IGNoaWxkcmVuID0gYXdhaXQgdGhpcy5jYXRlZ29yeVJlcG9zaXRvcnkuZ2V0Q2hpbGRyZW4ocGFyc2VJbnQocHJvZHVjdHNDYXRlZ29yaWVzW2luZGV4XSkpXHJcblxyXG4gICAgICAgIGNvdXBvbkNhdGVnb3JpZXMucHVzaChjYXRlZ29yeS5pZCwgLi4uY2hpbGRyZW4ubWFwKChjKSA9PiBjLmlkLnRvU3RyaW5nKCkpKVxyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIFsuLi5uZXcgU2V0KGNvdXBvbkNhdGVnb3JpZXMpXVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBlbWFpbElzRnJvbUNvbGxhYm9yYXRvciA9ICh1c2VyRW1haWw6IHN0cmluZyk6IGJvb2xlYW4gPT4gISF1c2VyRW1haWw/Lm1hdGNoKC9AYjRhLmNvbS5ici9nKVxyXG5cclxuICBwcml2YXRlIGFzeW5jIGdldExpbmVJdGVuc0VsaWdlYmxlRm9yRGlzY291bnQoXHJcbiAgICBwcm9kdWN0c0NhdGVnb3JpZXM6IHN0cmluZ1tdLFxyXG4gICAgY2hlY2tvdXQ6IFBhcnRpYWw8Q2hlY2tvdXQ+LFxyXG4gICk6IFByb21pc2U8TGluZUl0ZW1bXT4ge1xyXG4gICAgbGV0IGxpbmVJdGVuc0Rpc2NvdW50ID0gW11cclxuICAgIGNvbnN0IGNvdXBvbkNhdGVnb3JpZXMgPSBhd2FpdCB0aGlzLmdldENvdXBvbkNhdGVnb3JpZXNJZChwcm9kdWN0c0NhdGVnb3JpZXMpXHJcblxyXG4gICAgaWYgKHByb2R1Y3RzQ2F0ZWdvcmllcyAmJiBwcm9kdWN0c0NhdGVnb3JpZXMubGVuZ3RoKSB7XHJcbiAgICAgIGxpbmVJdGVuc0Rpc2NvdW50ID0gY2hlY2tvdXQubGluZUl0ZW1zPy5maWx0ZXIoKGl0ZW0pID0+IHtcclxuICAgICAgICBpZiAoaXRlbS5pc0dpZnQpIHJldHVybiBmYWxzZVxyXG4gICAgICAgIGlmIChpdGVtLmNhdGVnb3JpZXM/Lmxlbmd0aCkge1xyXG4gICAgICAgICAgcmV0dXJuIGl0ZW0uY2F0ZWdvcmllcy5zb21lKChjKSA9PiBjb3Vwb25DYXRlZ29yaWVzLnNvbWUoKGNhdCkgPT4gY2F0ID09IGMpKVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHRydWVcclxuICAgICAgfSlcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGxpbmVJdGVuc0Rpc2NvdW50ID0gY2hlY2tvdXQubGluZUl0ZW1zLmZpbHRlcigoaXRlbSkgPT4gIWl0ZW0uaXNHaWZ0KVxyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBsaW5lSXRlbnNEaXNjb3VudFxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBjYWxjQ2hlY2tvdXRTdWJ0b3RhbChsaW5lSXRlbnM6IExpbmVJdGVtW10sIHVzZXI6IFVzZXIpOiBudW1iZXIge1xyXG4gICAgcmV0dXJuIChcclxuICAgICAgbGluZUl0ZW5zXHJcbiAgICAgICAgPy5maWx0ZXIoKGl0ZW0pID0+ICFpdGVtLmlzR2lmdClcclxuICAgICAgICAucmVkdWNlKFxyXG4gICAgICAgICAgKGFjYywgY3VycikgPT5cclxuICAgICAgICAgICAgdXNlcj8uaXNTdWJzY3JpYmVyICYmIGN1cnIucHJpY2Uuc3Vic2NyaWJlclByaWNlXHJcbiAgICAgICAgICAgICAgPyBhY2MgKyBjdXJyLnByaWNlPy5zdWJzY3JpYmVyUHJpY2UgKiBjdXJyLnF1YW50aXR5XHJcbiAgICAgICAgICAgICAgOiBhY2MgKyBjdXJyLnByaWNlUGFpZCAqIGN1cnIucXVhbnRpdHksXHJcbiAgICAgICAgICAwLFxyXG4gICAgICAgICkgfHwgMFxyXG4gICAgKVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhc3luYyBnZXRPcmRlcnNXaXRoQ291cG9uKGNvdXBvbjogQ291cG9uKTogUHJvbWlzZTxPcmRlcltdPiB7XHJcbiAgICByZXR1cm4gYXdhaXQgdGhpcy5vcmRlclJlcG9zaXRvcnlcclxuICAgICAgLmZpbmQoe1xyXG4gICAgICAgIGZpbHRlcnM6IHtcclxuICAgICAgICAgIGNvdXBvbjogeyBpZDogY291cG9uLmlkIH0sXHJcbiAgICAgICAgICBzdGF0dXM6IHsgb3BlcmF0b3I6IFdoZXJlLk5PVEVRVUFMUywgdmFsdWU6IE9yZGVyU3RhdHVzLkNBTkNFTEFETyB9LFxyXG4gICAgICAgIH0sXHJcbiAgICAgIH0pXHJcbiAgICAgIC50aGVuKChyZXN1bHQpID0+IHJlc3VsdC5kYXRhKVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhc3luYyBnZXRPcmRlcnNGcm9tVXNlcihlbWFpbDogc3RyaW5nKSB7XHJcbiAgICByZXR1cm4gYXdhaXQgdGhpcy5vcmRlclJlcG9zaXRvcnlcclxuICAgICAgLmZpbmQoe1xyXG4gICAgICAgIGZpbHRlcnM6IHtcclxuICAgICAgICAgIHVzZXI6IHsgZW1haWw6IHsgb3BlcmF0b3I6IFdoZXJlLkVRVUFMUywgdmFsdWU6IGVtYWlsIH0gfSxcclxuICAgICAgICAgIHN0YXR1czogeyBvcGVyYXRvcjogV2hlcmUuTk9URVFVQUxTLCB2YWx1ZTogT3JkZXJTdGF0dXMuQ0FOQ0VMQURPIH0sXHJcbiAgICAgICAgfSxcclxuICAgICAgfSlcclxuICAgICAgLnRoZW4oKHJlc3VsdCkgPT4gcmVzdWx0LmRhdGEpXHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGNvdW50T3JkZXJzV2l0aFVzZXIob3JkZXJzOiBPcmRlcltdLCBlbWFpbDogc3RyaW5nKTogbnVtYmVyIHtcclxuICAgIHJldHVybiBvcmRlcnMuZmlsdGVyKChvKSA9PiBvLnVzZXIuZW1haWwgPT0gZW1haWwpLmxlbmd0aFxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXRDb3Vwb25Vc2VMaW1pdHMoY291cG9uOiBDb3Vwb24sIGNoZWNrb3V0VHlwZTogQ2hlY2tvdXRUeXBlcywgdXNlcjogVXNlcikge1xyXG4gICAgbGV0IGNvdXBvblVzZUxpbWl0czogeyB1bmxpbWl0ZWQ/OiBib29sZWFuOyB0b3RhbD86IG51bWJlcjsgbGltaXRlZFBlclVzZXI/OiBib29sZWFuOyBmaXJzdE9yZGVyPzogYm9vbGVhbiB9XHJcbiAgICBpZiAoY2hlY2tvdXRUeXBlID09IENoZWNrb3V0VHlwZXMuRUNPTU1FUkNFIHx8IGNoZWNrb3V0VHlwZSA9PSBDaGVja291dFR5cGVzLkFMTCkge1xyXG4gICAgICBpZiAoXHJcbiAgICAgICAgY291cG9uLmV4Y2x1c2l2aXR5VHlwZS5sZW5ndGggPT09IDEgJiZcclxuICAgICAgICAoY291cG9uLmV4Y2x1c2l2aXR5VHlwZS5hdCgwKSA9PT0gRXhjbHVzaXZpdGllcy5TUEVDSUZJQ19VU0VSIHx8XHJcbiAgICAgICAgICBjb3Vwb24uZXhjbHVzaXZpdHlUeXBlLmF0KDApID09PSBFeGNsdXNpdml0aWVzLkNPTExBQk9SQVRPUlMpXHJcbiAgICAgIClcclxuICAgICAgICBjb3Vwb25Vc2VMaW1pdHMgPSBjb3Vwb24udXNlTGltaXRzLm5vbl9zdWJzY3JpYmVyXHJcbiAgICAgIGVsc2UgY291cG9uVXNlTGltaXRzID0gdXNlciAmJiB1c2VyLmlzU3Vic2NyaWJlciA/IGNvdXBvbi51c2VMaW1pdHMuc3Vic2NyaWJlciA6IGNvdXBvbi51c2VMaW1pdHMubm9uX3N1YnNjcmliZXJcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGNvdXBvblVzZUxpbWl0cyA9IGNvdXBvbi51c2VMaW1pdHMuc3Vic2NyaXB0aW9uXHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGNvdXBvblVzZUxpbWl0c1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBjYWxjTGluZUl0ZW5EaXNjb3VudChcclxuICAgIHR5cGU6IENvdXBvblR5cGVzLFxyXG4gICAgbGluZUl0ZW1zOiBMaW5lSXRlbVtdLFxyXG4gICAgY291cG9uRGlzY291bnQ6IG51bWJlcixcclxuICAgIHN1YlRvdGFsOiBudW1iZXIsXHJcbiAgKTogTGluZUl0ZW1bXSB7XHJcbiAgICBsZXQgbGluZUl0ZW1zRGlzY291bnQ6IExpbmVJdGVtW10gPSBbXVxyXG4gICAgaWYgKHR5cGUgPT09IENvdXBvblR5cGVzLkFCU09MVVRFKSB7XHJcbiAgICAgIGNvbnN0IGNvdXBvbkRpc2NvdW50TWF4ID0gY291cG9uRGlzY291bnQgPiBzdWJUb3RhbCA/IHN1YlRvdGFsIDogY291cG9uRGlzY291bnRcclxuICAgICAgbGluZUl0ZW1zRGlzY291bnQgPSBsaW5lSXRlbXMubWFwKChpdGVtKSA9PiB7XHJcbiAgICAgICAgaWYgKGl0ZW0uaXNHaWZ0KSByZXR1cm4gaXRlbVxyXG5cclxuICAgICAgICBjb25zdCB0b3RhbEl0ZW1QZXJjZW50YWdlID0gaXRlbS5wcmljZVBhaWQgLyBzdWJUb3RhbFxyXG4gICAgICAgIGNvbnN0IGRpc2NvdW50SXRlbSA9IGNvdXBvbkRpc2NvdW50TWF4ICogdG90YWxJdGVtUGVyY2VudGFnZVxyXG5cclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgLi4uaXRlbSxcclxuICAgICAgICAgIGRpc2NvdW50OiBOdW1iZXIoZGlzY291bnRJdGVtLnRvRml4ZWQoMikpLFxyXG4gICAgICAgIH0gYXMgTGluZUl0ZW1cclxuICAgICAgfSlcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGxpbmVJdGVtc0Rpc2NvdW50ID0gbGluZUl0ZW1zLm1hcCgoaXRlbSkgPT4ge1xyXG4gICAgICAgIGlmIChpdGVtLmlzR2lmdCkgcmV0dXJuIGl0ZW1cclxuXHJcbiAgICAgICAgY29uc3QgZGlzY291bnRJdGVtID0gaXRlbS5wcmljZVBhaWQgKiAoY291cG9uRGlzY291bnQgLyAxMDApXHJcblxyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAuLi5pdGVtLFxyXG4gICAgICAgICAgZGlzY291bnQ6IE51bWJlcihkaXNjb3VudEl0ZW0udG9GaXhlZCgyKSksXHJcbiAgICAgICAgfSBhcyBMaW5lSXRlbVxyXG4gICAgICB9KVxyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBsaW5lSXRlbXNEaXNjb3VudFxyXG4gIH1cclxufVxyXG4iXX0=
228
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY291cG9uLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9jb25uZWN0LWFuZ3VsYXIvc3JjL3NlcnZpY2VzL2NvdXBvbi5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFBO0FBQ2xELE9BQU8sRUFLTCxhQUFhLEVBR2IsV0FBVyxFQUNYLGFBQWEsRUFJYixXQUFXLEVBQ1gsS0FBSyxFQUVMLEtBQUssR0FDTixNQUFNLG1CQUFtQixDQUFBO0FBQzFCLE9BQU8sRUFBRSxJQUFJLEVBQWMsRUFBRSxFQUFFLE1BQU0sTUFBTSxDQUFBO0FBQzNDLE9BQU8sRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUE7QUFDL0MsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLFdBQVcsQ0FBQTs7O0FBS3hDLE1BQU0sT0FBTyxhQUFhO0lBQ3hCLFlBQytDLGdCQUFrQyxFQUN4QyxXQUFrQixFQUNiLGVBQWdDLEVBQzdCLGtCQUFzQztRQUh4QyxxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQWtCO1FBQ3hDLGdCQUFXLEdBQVgsV0FBVyxDQUFPO1FBQ2Isb0JBQWUsR0FBZixlQUFlLENBQWlCO1FBQzdCLHVCQUFrQixHQUFsQixrQkFBa0IsQ0FBb0I7UUErTC9FLDRCQUF1QixHQUFHLENBQUMsU0FBaUIsRUFBVyxFQUFFLENBQUMsQ0FBQyxDQUFDLFNBQVMsRUFBRSxLQUFLLENBQUMsY0FBYyxDQUFDLENBQUE7SUE5TGpHLENBQUM7SUFFSixXQUFXLENBQ1QsUUFBZ0IsRUFDaEIsWUFBMkIsRUFDM0IsUUFBMkIsRUFDM0IsSUFBWTtRQUVaLE9BQU8sSUFBSSxDQUNULElBQUksQ0FBQyxnQkFBZ0I7YUFDbEIsSUFBSSxDQUFDO1lBQ0osT0FBTyxFQUFFO2dCQUNQLFFBQVEsRUFBRSxFQUFFLFFBQVEsRUFB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QyxlQUFlLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxLQUFLLGFBQWEsQ0FBQyxhQUFhLENBQUM7Z0JBRS9ELGVBQWUsR0FBRyxNQUFNLENBQUMsU0FBUyxDQUFDLGNBQWMsQ0FBQTs7Z0JBQzlDLGVBQWUsR0FBRyxJQUFJLElBQUksSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsY0FBYyxDQUFBO1NBQ2pIO2FBQU07WUFDTCxlQUFlLEdBQUcsTUFBTSxDQUFDLFNBQVMsQ0FBQyxZQUFZLENBQUE7U0FDaEQ7UUFFRCxPQUFPLGVBQWUsQ0FBQTtJQUN4QixDQUFDOzswR0FwUlUsYUFBYSxrQkFFZCxrQkFBa0IsYUFDbEIsWUFBWSxhQUNaLGlCQUFpQixhQUNqQixvQkFBb0I7OEdBTG5CLGFBQWEsY0FGWixNQUFNOzJGQUVQLGFBQWE7a0JBSHpCLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25COzswQkFHSSxNQUFNOzJCQUFDLGtCQUFrQjs7MEJBQ3pCLE1BQU07MkJBQUMsWUFBWTs7MEJBQ25CLE1BQU07MkJBQUMsaUJBQWlCOzswQkFDeEIsTUFBTTsyQkFBQyxvQkFBb0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3QsIEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJ1xyXG5pbXBvcnQge1xyXG4gIENhdGVnb3J5LFxyXG4gIENhdGVnb3J5UmVwb3NpdG9yeSxcclxuICBDaGVja291dCxcclxuICBDaGVja291dFN1YnNjcmlwdGlvbixcclxuICBDaGVja291dFR5cGVzLFxyXG4gIENvdXBvbixcclxuICBDb3Vwb25SZXBvc2l0b3J5LFxyXG4gIENvdXBvblR5cGVzLFxyXG4gIEV4Y2x1c2l2aXRpZXMsXHJcbiAgTGluZUl0ZW0sXHJcbiAgT3JkZXIsXHJcbiAgT3JkZXJSZXBvc2l0b3J5LFxyXG4gIE9yZGVyU3RhdHVzLFxyXG4gIFNob3BzLFxyXG4gIFVzZXIsXHJcbiAgV2hlcmUsXHJcbn0gZnJvbSAnQGluZnJhYjRhL2Nvbm5lY3QnXHJcbmltcG9ydCB7IGZyb20sIE9ic2VydmFibGUsIG9mIH0gZnJvbSAncnhqcydcclxuaW1wb3J0IHsgY29uY2F0TWFwLCBtYXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycydcclxuaW1wb3J0IHsgREVGQVVMVF9TSE9QIH0gZnJvbSAnLi4vY29uc3RzJ1xyXG5cclxuQEluamVjdGFibGUoe1xyXG4gIHByb3ZpZGVkSW46ICdyb290JyxcclxufSlcclxuZXhwb3J0IGNsYXNzIENvdXBvblNlcnZpY2Uge1xyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgQEluamVjdCgnQ291cG9uUmVwb3NpdG9yeScpIHByaXZhdGUgcmVhZG9ubHkgY291cG9uUmVwb3NpdG9yeTogQ291cG9uUmVwb3NpdG9yeSxcclxuICAgIEBJbmplY3QoREVGQVVMVF9TSE9QKSBwcml2YXRlIHJlYWRvbmx5IGRlZmF1bHRTaG9wOiBTaG9wcyxcclxuICAgIEBJbmplY3QoJ09yZGVyUmVwb3NpdG9yeScpIHByaXZhdGUgcmVhZG9ubHkgb3JkZXJSZXBvc2l0b3J5OiBPcmRlclJlcG9zaXRvcnksXHJcbiAgICBASW5qZWN0KCdDYXRlZ29yeVJlcG9zaXRvcnknKSBwcml2YXRlIHJlYWRvbmx5IGNhdGVnb3J5UmVwb3NpdG9yeTogQ2F0ZWdvcnlSZXBvc2l0b3J5LFxyXG4gICkge31cclxuXHJcbiAgY2hlY2tDb3Vwb24oXHJcbiAgICBuaWNrbmFtZTogc3RyaW5nLFxyXG4gICAgY2hlY2tvdXRUeXBlOiBDaGVja291dFR5cGVzLFxyXG4gICAgY2hlY2tvdXQ6IFBhcnRpYWw8Q2hlY2tvdXQ+LFxyXG4gICAgcGxhbjogc3RyaW5nLFxyXG4gICk6IE9ic2VydmFibGU8Q291cG9uPiB7XHJcbiAgICByZXR1cm4gZnJvbShcclxuICAgICAgdGhpcy5jb3Vwb25SZXBvc2l0b3J5XHJcbiAgICAgICAgLmZpbmQoe1xyXG4gICAgICAgICAgZmlsdGVyczoge1xyXG4gICAgICAgICAgICBuaWNrbmFtZTogeyBvcGVyYXRvcjogV2hlcmUuRVFVQUxTLCB2YWx1ZTogbmlja25hbWUgfSxcclxuICAgICAgICAgICAgYWN0aXZlOiB7IG9wZXJhdG9yOiBXaGVyZS5FUVVBTFMsIHZhbHVlOiB0cnVlIH0sXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgIH0pXHJcbiAgICAgICAgLnRoZW4oKHJlc3VsdCkgPT4gcmVzdWx0LmRhdGFbMF0pLFxyXG4gICAgKS5waXBlKFxyXG4gICAgICBjb25jYXRNYXAoKGNvdXBvbikgPT4gdGhpcy5jb3Vwb25WYWxpZGF0aW9uKGNvdXBvbiwgY2hlY2tvdXRUeXBlKSksXHJcbiAgICAgIGNvbmNhdE1hcCgoY291cG9uVmFsaWQ6IENvdXBvbikgPT4gdGhpcy5jb3Vwb25SdWxlc1ZhbGlkYXRpb24oY291cG9uVmFsaWQsIGNoZWNrb3V0VHlwZSwgY2hlY2tvdXQsIHBsYW4pKSxcclxuICAgICAgbWFwKChjb3Vwb25WYWxpZGF0ZWQ6IENvdXBvbikgPT4gY291cG9uVmFsaWRhdGVkIGFzIENvdXBvbiksXHJcbiAgICApXHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFzeW5jIGNvdXBvblZhbGlkYXRpb24oY291cG9uOiBDb3Vwb24sIGNoZWNrb3V0VHlwZTogQ2hlY2tvdXRUeXBlcykge1xyXG4gICAgaWYgKCFjb3Vwb24pIHRocm93ICdDdXBvbSBpbnbDoWxpZG8uJ1xyXG5cclxuICAgIGlmIChjb3Vwb24/LmJlZ2luQXQgJiYgY291cG9uPy5iZWdpbkF0LmdldFRpbWUoKSA+IG5ldyBEYXRlKCkuZ2V0VGltZSgpKSB0aHJvdyAnQ3Vwb20gaW52w6FsaWRvLidcclxuXHJcbiAgICBpZiAoY291cG9uPy5leHBpcmVzSW4gJiYgKGNvdXBvbj8uZXhwaXJlc0luIGFzIERhdGUpLmdldFRpbWUoKSA8IG5ldyBEYXRlKCkuZ2V0VGltZSgpKSB0aHJvdyAnQ3Vwb20gZXhwaXJhZG8uJ1xyXG5cclxuICAgIGNvbnN0IGlzSW5TaG9wID0gY291cG9uLnNob3BBdmFpbGFiaWxpdHkgPT09IFNob3BzLkFMTCB8fCBjb3Vwb24uc2hvcEF2YWlsYWJpbGl0eSA9PT0gdGhpcy5kZWZhdWx0U2hvcFxyXG5cclxuICAgIGlmICghaXNJblNob3ApIHRocm93ICdDdXBvbSBpbnbDoWxpZG8gcGFyYSBsb2phLidcclxuXHJcbiAgICBjb25zdCBpc0NoZWNrb3V0VHlwZSA9IGNvdXBvbi5jaGVja291dFR5cGUgPT09IENoZWNrb3V0VHlwZXMuQUxMIHx8IGNvdXBvbi5jaGVja291dFR5cGUgPT09IGNoZWNrb3V0VHlwZVxyXG5cclxuICAgIGlmICghaXNDaGVja291dFR5cGUpIHRocm93ICdDdXBvbSBpbnbDoWxpZG8uIEVycm8gZGUgY2hlY2tvdXQuJ1xyXG5cclxuICAgIHJldHVybiBjb3Vwb25cclxuICB9XHJcblxyXG4gIHByaXZhdGUgYXN5bmMgY291cG9uUnVsZXNWYWxpZGF0aW9uKFxyXG4gICAgY291cG9uOiBDb3Vwb24sXHJcbiAgICBjaGVja291dFR5cGU6IENoZWNrb3V0VHlwZXMsXHJcbiAgICBjaGVja291dDogUGFydGlhbDxDaGVja291dD4sXHJcbiAgICBwbGFuOiBzdHJpbmcsXHJcbiAgKSB7XHJcbiAgICBpZiAoY2hlY2tvdXRUeXBlID09IENoZWNrb3V0VHlwZXMuU1VCU0NSSVBUSU9OKSB7XHJcbiAgICAgIGlmIChjb3Vwb24ucGxhbiAmJiBjb3Vwb24ucGxhbi50b1VwcGVyQ2FzZSgpICE9PSBwbGFuLnRvVXBwZXJDYXNlKCkpIHRocm93ICdDdXBvbSBpbnbDoWxpZG8gcGFyYSBzdWEgYXNzaW5hdHVyYS4nXHJcblxyXG4gICAgICByZXR1cm4gY291cG9uXHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgdmFsaWRVc2VyID0gdGhpcy5jb3Vwb21Vc2VyVmFsaWRhdGlvbihjb3Vwb24sIGNoZWNrb3V0Py51c2VyKVxyXG5cclxuICAgIGlmICghdmFsaWRVc2VyKSB0aHJvdyAnVXN1w6FyaW8gbsOjbyBlbGVnw612ZWwuJ1xyXG5cclxuICAgIGNvbnN0IGNvdXBvblVzZUxpbWl0cyA9IHRoaXMuZ2V0Q291cG9uVXNlTGltaXRzKGNvdXBvbiwgY2hlY2tvdXRUeXBlLCBjaGVja291dC51c2VyKVxyXG5cclxuICAgIGlmIChjb3Vwb25Vc2VMaW1pdHMuZmlyc3RPcmRlcikge1xyXG4gICAgICBjb25zdCBvcmRlcnNVc2VyID0gYXdhaXQgdGhpcy5nZXRPcmRlcnNGcm9tVXNlcihjaGVja291dC51c2VyLmVtYWlsLnRvTG9jYWxlTG93ZXJDYXNlKCkpXHJcbiAgICAgIGlmIChjb3Vwb25Vc2VMaW1pdHMuZmlyc3RPcmRlciAmJiBvcmRlcnNVc2VyLmxlbmd0aCA+PSAxKSB0aHJvdyAnTGltaXRlIGRlIHVzbyBhdGluZ2lkbydcclxuICAgIH1cclxuXHJcbiAgICBpZiAoIWNvdXBvblVzZUxpbWl0cy51bmxpbWl0ZWQgfHwgY291cG9uVXNlTGltaXRzLmxpbWl0ZWRQZXJVc2VyKSB7XHJcbiAgICAgIGNvbnN0IG9yZGVyc0NvdXBvbiA9IGF3YWl0IHRoaXMuZ2V0T3JkZXJzV2l0aENvdXBvbihjb3Vwb24pXHJcblxyXG4gICAgICBpZiAoIWNvdXBvblVzZUxpbWl0cy51bmxpbWl0ZWQgJiYgY291cG9uVXNlTGltaXRzLnRvdGFsICYmIG9yZGVyc0NvdXBvbi5sZW5ndGggPj0gY291cG9uVXNlTGltaXRzLnRvdGFsKVxyXG4gICAgICAgIHRocm93ICdMaW1pdGUgZGUgdXNvIGF0aW5naWRvLidcclxuXHJcbiAgICAgIGlmIChjb3Vwb25Vc2VMaW1pdHMubGltaXRlZFBlclVzZXIpIHtcclxuICAgICAgICBjb25zdCBvcmRlcnNXaXRoVXNlciA9IHRoaXMuY291bnRPcmRlcnNXaXRoVXNlcihvcmRlcnNDb3Vwb24sIGNoZWNrb3V0LnVzZXIuZW1haWwpXHJcblxyXG4gICAgICAgIGlmIChvcmRlcnNXaXRoVXNlciA+IDApIHRocm93ICdMaW1pdGUgZGUgdXNvIHBvciB1c3XDoXJpbyBhdGluZ2lkby4nXHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBoYXNQcm9kdWN0Q2F0ZWdvcmllcyA9IGF3YWl0IHRoaXMuaGFzUHJvZHVjdENhdGVnb3JpZXMoY291cG9uLCBjaGVja291dClcclxuXHJcbiAgICBpZiAoIWhhc1Byb2R1Y3RDYXRlZ29yaWVzKSB0aHJvdyAnU2V1IGNhcnJpbmhvIG7Do28gcG9zc3VpIHByb2R1dG9zIGVsZWfDrXZlaXMgcGFyYSBkZXNjb250by4nXHJcblxyXG4gICAgY29uc3QgaGFzTWluU3ViVG90YWwgPSBhd2FpdCB0aGlzLmhhc01pblN1YlRvdGFsKGNvdXBvbiwgY2hlY2tvdXQpXHJcblxyXG4gICAgaWYgKCFoYXNNaW5TdWJUb3RhbCkge1xyXG4gICAgICBpZiAoY291cG9uLnByb2R1Y3RzQ2F0ZWdvcmllcz8ubGVuZ3RoKSB7XHJcbiAgICAgICAgdGhyb3cgYFZhbG9yIG3DrW5pbW8gZGUgJHtJbnRsLk51bWJlckZvcm1hdCgncHQtQlInLCB7IHN0eWxlOiAnY3VycmVuY3knLCBjdXJyZW5jeTogJ0JSTCcgfSkuZm9ybWF0KFxyXG4gICAgICAgICAgY291cG9uLm1pblN1YlRvdGFsVmFsdWUsXHJcbiAgICAgICAgKX0gbsOjbyBhdGluZ2lkbyBuYShzKSBjYXRlZ29yaWEocykgZWxlZ8OtdmVpcyBwYXJhIG8gZGVzY29udG8uYFxyXG4gICAgICB9XHJcblxyXG4gICAgICB0aHJvdyBgVmFsb3IgbcOtbmltbyBkZSAke0ludGwuTnVtYmVyRm9ybWF0KCdwdC1CUicsIHsgc3R5bGU6ICdjdXJyZW5jeScsIGN1cnJlbmN5OiAnQlJMJyB9KS5mb3JtYXQoXHJcbiAgICAgICAgY291cG9uLm1pblN1YlRvdGFsVmFsdWUsXHJcbiAgICAgICl9IG7Do28gYXRpbmdpZG8uYFxyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBjb3Vwb25cclxuICB9XHJcblxyXG4gIHB1YmxpYyBjYWxjRGlzY291bnRTdWJzY3JpcHRpb24oY291cG9uOiBDb3Vwb24sIGNoZWNrb3V0OiBQYXJ0aWFsPENoZWNrb3V0U3Vic2NyaXB0aW9uPik6IE9ic2VydmFibGU8bnVtYmVyPiB7XHJcbiAgICBsZXQgZGlzY291bnQgPSAwXHJcblxyXG4gICAgaWYgKGNvdXBvbi5kaXNjb3VudC5zdWJzY3JpcHRpb24udHlwZSA9PSBDb3Vwb25UeXBlcy5BQlNPTFVURSkgZGlzY291bnQgPSBjb3Vwb24uZGlzY291bnQuc3Vic2NyaXB0aW9uLnZhbHVlXHJcbiAgICBlbHNlIGRpc2NvdW50ID0gY2hlY2tvdXQuc3Vic2NyaXB0aW9uUGxhbi5yZWN1cnJlbmNlUHJpY2UgKiAoY291cG9uLmRpc2NvdW50LnN1YnNjcmlwdGlvbi52YWx1ZSAvIDEwMClcclxuXHJcbiAgICByZXR1cm4gb2YoZGlzY291bnQpXHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFzeW5jIGhhc01pblN1YlRvdGFsKGNvdXBvbjogQ291cG9uLCBjaGVja291dDogUGFydGlhbDxDaGVja291dD4pOiBQcm9taXNlPGJvb2xlYW4+IHtcclxuICAgIGlmICghY291cG9uLm1pblN1YlRvdGFsVmFsdWUpIHJldHVybiB0cnVlXHJcblxyXG4gICAgY29uc3QgbGluZUl0ZW5zRGlzY291bnQgPSBhd2FpdCB0aGlzLmdldExpbmVJdGVuc0VsaWdlYmxlRm9yRGlzY291bnQoY291cG9uLnByb2R1Y3RzQ2F0ZWdvcmllcywgY2hlY2tvdXQpXHJcbiAgICBjb25zdCBzdWJUb3RhbCA9IHRoaXMuY2FsY0NoZWNrb3V0U3VidG90YWwobGluZUl0ZW5zRGlzY291bnQsIGNoZWNrb3V0LnVzZXIpXHJcblxyXG4gICAgaWYgKGNvdXBvbi5taW5TdWJUb3RhbFZhbHVlIDw9IHN1YlRvdGFsKSByZXR1cm4gdHJ1ZVxyXG5cclxuICAgIHJldHVybiBmYWxzZVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhc3luYyBoYXNQcm9kdWN0Q2F0ZWdvcmllcyhjb3Vwb246IENvdXBvbiwgY2hlY2tvdXQ6IFBhcnRpYWw8Q2hlY2tvdXQ+KTogUHJvbWlzZTxib29sZWFuPiB7XHJcbiAgICBpZiAoIWNvdXBvbi5wcm9kdWN0c0NhdGVnb3JpZXMgfHwgIWNvdXBvbi5wcm9kdWN0c0NhdGVnb3JpZXM/Lmxlbmd0aCkge1xyXG4gICAgICByZXR1cm4gdHJ1ZVxyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IGNvdXBvbkNhdGVnb3JpZXMgPSBhd2FpdCB0aGlzLmdldENvdXBvbkNhdGVnb3JpZXNJZChjb3Vwb24ucHJvZHVjdHNDYXRlZ29yaWVzKVxyXG4gICAgY29uc3QgaGFzQ2F0ZWdvcmllcyA9IGNoZWNrb3V0LmxpbmVJdGVtcz8uZmlsdGVyKChpdGVtKSA9PiB7XHJcbiAgICAgIGlmIChpdGVtLmlzR2lmdCkgcmV0dXJuIGZhbHNlXHJcbiAgICAgIGlmICghaXRlbS5jYXRlZ29yaWVzIHx8ICFpdGVtLmNhdGVnb3JpZXM/Lmxlbmd0aCkgcmV0dXJuIHRydWVcclxuXHJcbiAgICAgIHJldHVybiBpdGVtLmNhdGVnb3JpZXMuc29tZSgoYykgPT4gY291cG9uQ2F0ZWdvcmllcy5zb21lKChjYXQpID0+IGNhdCA9PSBjKSlcclxuICAgIH0pXHJcblxyXG4gICAgcmV0dXJuIGhhc0NhdGVnb3JpZXMubGVuZ3RoID8gdHJ1ZSA6IGZhbHNlXHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGNvdXBvbVVzZXJWYWxpZGF0aW9uKGNvdXBvbjogQ291cG9uLCB1c2VyOiBVc2VyKSB7XHJcbiAgICBpZiAoIXVzZXIgfHwgY291cG9uLmV4Y2x1c2l2aXR5VHlwZS5pbmNsdWRlcyhFeGNsdXNpdml0aWVzLkFMTF9VU0VSUykpIHJldHVybiB0cnVlXHJcblxyXG4gICAgbGV0IHVzZXJUeXBlczogRXhjbHVzaXZpdGllc1tdID0gW11cclxuXHJcbiAgICBpZiAoXHJcbiAgICAgIGNvdXBvbi5leGNsdXNpdml0eVR5cGUuaW5jbHVkZXMoRXhjbHVzaXZpdGllcy5DT0xMQUJPUkFUT1JTKSAmJlxyXG4gICAgICB0aGlzLmVtYWlsSXNGcm9tQ29sbGFib3JhdG9yKHVzZXIuZW1haWwudG9Mb2NhbGVMb3dlckNhc2UoKSlcclxuICAgIClcclxuICAgICAgdXNlclR5cGVzLnB1c2goRXhjbHVzaXZpdGllcy5DT0xMQUJPUkFUT1JTKVxyXG5cclxuICAgIGlmIChcclxuICAgICAgY291cG9uLmV4Y2x1c2l2aXR5VHlwZS5pbmNsdWRlcyhFeGNsdXNpdml0aWVzLlNQRUNJRklDX1VTRVIpICYmXHJcbiAgICAgIGNvdXBvbi51c2VyRXhjbHVzaXZlRW1haWwuaW5jbHVkZXModXNlci5lbWFpbC50b0xvY2FsZUxvd2VyQ2FzZSgpKVxyXG4gICAgKVxyXG4gICAgICB1c2VyVHlwZXMucHVzaChFeGNsdXNpdml0aWVzLlNQRUNJRklDX1VTRVIpXHJcblxyXG4gICAgaWYgKFxyXG4gICAgICBjb3Vwb24uZXhjbHVzaXZpdHlUeXBlLmluY2x1ZGVzKEV4Y2x1c2l2aXRpZXMuQUNUSVZFX1NVQlNDUklCRVIpICYmXHJcbiAgICAgIHVzZXIuaXNTdWJzY3JpYmVyICYmXHJcbiAgICAgIHVzZXIuc3Vic2NyaXB0aW9uUGxhbiAhPSAnJ1xyXG4gICAgKVxyXG4gICAgICB1c2VyVHlwZXMucHVzaChFeGNsdXNpdml0aWVzLkFDVElWRV9TVUJTQ1JJQkVSKVxyXG5cclxuICAgIGlmIChcclxuICAgICAgdXNlci5pc1N1YnNjcmliZXIgJiZcclxuICAgICAgdXNlci5zdWJzY3JpcHRpb25QbGFuID09ICcnICYmXHJcbiAgICAgIGNvdXBvbi5leGNsdXNpdml0eVR5cGUuaW5jbHVkZXMoRXhjbHVzaXZpdGllcy5JTkFDVElWRV9TVUJTQ1JJQkVSKVxyXG4gICAgKVxyXG4gICAgICB1c2VyVHlwZXMucHVzaChFeGNsdXNpdml0aWVzLklOQUNUSVZFX1NVQlNDUklCRVIpXHJcblxyXG4gICAgaWYgKGNvdXBvbi5leGNsdXNpdml0eVR5cGUuaW5jbHVkZXMoRXhjbHVzaXZpdGllcy5OT05fU1VCU0NSSUJFUikgJiYgIXVzZXIuaXNTdWJzY3JpYmVyKVxyXG4gICAgICB1c2VyVHlwZXMucHVzaChFeGNsdXNpdml0aWVzLk5PTl9TVUJTQ1JJQkVSKVxyXG5cclxuICAgIHJldHVybiBjb3Vwb24uZXhjbHVzaXZpdHlUeXBlLnNvbWUoKHIpID0+IHVzZXJUeXBlcy5pbmNsdWRlcyhyKSlcclxuICB9XHJcblxyXG4gIHByaXZhdGUgYXN5bmMgZ2V0Q291cG9uQ2F0ZWdvcmllc0lkKHByb2R1Y3RzQ2F0ZWdvcmllczogc3RyaW5nW10pOiBQcm9taXNlPEFycmF5PFN0cmluZz4+IHtcclxuICAgIGNvbnN0IGNvdXBvbkNhdGVnb3JpZXM6IEFycmF5PFN0cmluZz4gPSBbXVxyXG5cclxuICAgIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCBwcm9kdWN0c0NhdGVnb3JpZXMubGVuZ3RoOyBpbmRleCsrKSB7XHJcbiAgICAgIGNvbnN0IGNhdGVnb3J5OiBDYXRlZ29yeSAmIHsgZmlyZXN0b3JlSWQ/OiBzdHJpbmcgfSA9IGF3YWl0IHRoaXMuY2F0ZWdvcnlSZXBvc2l0b3J5LmdldCh7XHJcbiAgICAgICAgaWQ6IHByb2R1Y3RzQ2F0ZWdvcmllc1tpbmRleF0sXHJcbiAgICAgIH0pXHJcblxyXG4gICAgICBpZiAoY2F0ZWdvcnkpIHtcclxuICAgICAgICBjb25zdCBjaGlsZHJlbiA9IGF3YWl0IHRoaXMuY2F0ZWdvcnlSZXBvc2l0b3J5LmdldENoaWxkcmVuKHBhcnNlSW50KHByb2R1Y3RzQ2F0ZWdvcmllc1tpbmRleF0pKVxyXG5cclxuICAgICAgICBjb3Vwb25DYXRlZ29yaWVzLnB1c2goY2F0ZWdvcnkuaWQsIC4uLmNoaWxkcmVuLm1hcCgoYykgPT4gYy5pZC50b1N0cmluZygpKSlcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBbLi4ubmV3IFNldChjb3Vwb25DYXRlZ29yaWVzKV1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgZW1haWxJc0Zyb21Db2xsYWJvcmF0b3IgPSAodXNlckVtYWlsOiBzdHJpbmcpOiBib29sZWFuID0+ICEhdXNlckVtYWlsPy5tYXRjaCgvQGI0YS5jb20uYnIvZylcclxuXHJcbiAgcHJpdmF0ZSBhc3luYyBnZXRMaW5lSXRlbnNFbGlnZWJsZUZvckRpc2NvdW50KFxyXG4gICAgcHJvZHVjdHNDYXRlZ29yaWVzOiBzdHJpbmdbXSxcclxuICAgIGNoZWNrb3V0OiBQYXJ0aWFsPENoZWNrb3V0PixcclxuICApOiBQcm9taXNlPExpbmVJdGVtW10+IHtcclxuICAgIGxldCBsaW5lSXRlbnNEaXNjb3VudCA9IFtdXHJcbiAgICBjb25zdCBjb3Vwb25DYXRlZ29yaWVzID0gYXdhaXQgdGhpcy5nZXRDb3Vwb25DYXRlZ29yaWVzSWQocHJvZHVjdHNDYXRlZ29yaWVzKVxyXG5cclxuICAgIGlmIChwcm9kdWN0c0NhdGVnb3JpZXMgJiYgcHJvZHVjdHNDYXRlZ29yaWVzLmxlbmd0aCkge1xyXG4gICAgICBsaW5lSXRlbnNEaXNjb3VudCA9IGNoZWNrb3V0LmxpbmVJdGVtcz8uZmlsdGVyKChpdGVtKSA9PiB7XHJcbiAgICAgICAgaWYgKGl0ZW0uaXNHaWZ0KSByZXR1cm4gZmFsc2VcclxuICAgICAgICBpZiAoaXRlbS5jYXRlZ29yaWVzPy5sZW5ndGgpIHtcclxuICAgICAgICAgIHJldHVybiBpdGVtLmNhdGVnb3JpZXMuc29tZSgoYykgPT4gY291cG9uQ2F0ZWdvcmllcy5zb21lKChjYXQpID0+IGNhdCA9PSBjKSlcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB0cnVlXHJcbiAgICAgIH0pXHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBsaW5lSXRlbnNEaXNjb3VudCA9IGNoZWNrb3V0LmxpbmVJdGVtcy5maWx0ZXIoKGl0ZW0pID0+ICFpdGVtLmlzR2lmdClcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gbGluZUl0ZW5zRGlzY291bnRcclxuICB9XHJcblxyXG4gIHByaXZhdGUgY2FsY0NoZWNrb3V0U3VidG90YWwobGluZUl0ZW5zOiBMaW5lSXRlbVtdLCB1c2VyOiBVc2VyKTogbnVtYmVyIHtcclxuICAgIHJldHVybiAoXHJcbiAgICAgIGxpbmVJdGVuc1xyXG4gICAgICAgID8uZmlsdGVyKChpdGVtKSA9PiAhaXRlbS5pc0dpZnQpXHJcbiAgICAgICAgLnJlZHVjZShcclxuICAgICAgICAgIChhY2MsIGN1cnIpID0+XHJcbiAgICAgICAgICAgIHVzZXI/LmlzU3Vic2NyaWJlciAmJiBjdXJyLnByaWNlLnN1YnNjcmliZXJQcmljZVxyXG4gICAgICAgICAgICAgID8gYWNjICsgY3Vyci5wcmljZT8uc3Vic2NyaWJlclByaWNlICogY3Vyci5xdWFudGl0eVxyXG4gICAgICAgICAgICAgIDogYWNjICsgY3Vyci5wcmljZVBhaWQgKiBjdXJyLnF1YW50aXR5LFxyXG4gICAgICAgICAgMCxcclxuICAgICAgICApIHx8IDBcclxuICAgIClcclxuICB9XHJcblxyXG4gIHByaXZhdGUgYXN5bmMgZ2V0T3JkZXJzV2l0aENvdXBvbihjb3Vwb246IENvdXBvbik6IFByb21pc2U8T3JkZXJbXT4ge1xyXG4gICAgcmV0dXJuIGF3YWl0IHRoaXMub3JkZXJSZXBvc2l0b3J5XHJcbiAgICAgIC5maW5kKHtcclxuICAgICAgICBmaWx0ZXJzOiB7XHJcbiAgICAgICAgICBjb3Vwb246IHsgaWQ6IGNvdXBvbi5pZCB9LFxyXG4gICAgICAgICAgc3RhdHVzOiB7IG9wZXJhdG9yOiBXaGVyZS5OT1RFUVVBTFMsIHZhbHVlOiBPcmRlclN0YXR1cy5DQU5DRUxBRE8gfSxcclxuICAgICAgICB9LFxyXG4gICAgICB9KVxyXG4gICAgICAudGhlbigocmVzdWx0KSA9PiByZXN1bHQuZGF0YSlcclxuICB9XHJcblxyXG4gIHByaXZhdGUgYXN5bmMgZ2V0T3JkZXJzRnJvbVVzZXIoZW1haWw6IHN0cmluZykge1xyXG4gICAgcmV0dXJuIGF3YWl0IHRoaXMub3JkZXJSZXBvc2l0b3J5XHJcbiAgICAgIC5maW5kKHtcclxuICAgICAgICBmaWx0ZXJzOiB7XHJcbiAgICAgICAgICB1c2VyOiB7IGVtYWlsOiB7IG9wZXJhdG9yOiBXaGVyZS5FUVVBTFMsIHZhbHVlOiBlbWFpbCB9IH0sXHJcbiAgICAgICAgICBzdGF0dXM6IHsgb3BlcmF0b3I6IFdoZXJlLk5PVEVRVUFMUywgdmFsdWU6IE9yZGVyU3RhdHVzLkNBTkNFTEFETyB9LFxyXG4gICAgICAgIH0sXHJcbiAgICAgIH0pXHJcbiAgICAgIC50aGVuKChyZXN1bHQpID0+IHJlc3VsdC5kYXRhKVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBjb3VudE9yZGVyc1dpdGhVc2VyKG9yZGVyczogT3JkZXJbXSwgZW1haWw6IHN0cmluZyk6IG51bWJlciB7XHJcbiAgICByZXR1cm4gb3JkZXJzLmZpbHRlcigobykgPT4gby51c2VyLmVtYWlsID09IGVtYWlsKS5sZW5ndGhcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2V0Q291cG9uVXNlTGltaXRzKGNvdXBvbjogQ291cG9uLCBjaGVja291dFR5cGU6IENoZWNrb3V0VHlwZXMsIHVzZXI6IFVzZXIpIHtcclxuICAgIGxldCBjb3Vwb25Vc2VMaW1pdHM6IHsgdW5saW1pdGVkPzogYm9vbGVhbjsgdG90YWw/OiBudW1iZXI7IGxpbWl0ZWRQZXJVc2VyPzogYm9vbGVhbjsgZmlyc3RPcmRlcj86IGJvb2xlYW4gfVxyXG4gICAgaWYgKGNoZWNrb3V0VHlwZSA9PSBDaGVja291dFR5cGVzLkVDT01NRVJDRSB8fCBjaGVja291dFR5cGUgPT0gQ2hlY2tvdXRUeXBlcy5BTEwpIHtcclxuICAgICAgaWYgKFxyXG4gICAgICAgIGNvdXBvbi5leGNsdXNpdml0eVR5cGUubGVuZ3RoID09PSAxICYmXHJcbiAgICAgICAgKGNvdXBvbi5leGNsdXNpdml0eVR5cGUuYXQoMCkgPT09IEV4Y2x1c2l2aXRpZXMuU1BFQ0lGSUNfVVNFUiB8fFxyXG4gICAgICAgICAgY291cG9uLmV4Y2x1c2l2aXR5VHlwZS5hdCgwKSA9PT0gRXhjbHVzaXZpdGllcy5DT0xMQUJPUkFUT1JTKVxyXG4gICAgICApXHJcbiAgICAgICAgY291cG9uVXNlTGltaXRzID0gY291cG9uLnVzZUxpbWl0cy5ub25fc3Vic2NyaWJlclxyXG4gICAgICBlbHNlIGNvdXBvblVzZUxpbWl0cyA9IHVzZXIgJiYgdXNlci5pc1N1YnNjcmliZXIgPyBjb3Vwb24udXNlTGltaXRzLnN1YnNjcmliZXIgOiBjb3Vwb24udXNlTGltaXRzLm5vbl9zdWJzY3JpYmVyXHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBjb3Vwb25Vc2VMaW1pdHMgPSBjb3Vwb24udXNlTGltaXRzLnN1YnNjcmlwdGlvblxyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBjb3Vwb25Vc2VMaW1pdHNcclxuICB9XHJcbn1cclxuIl19