ng-easycommerce 0.0.619 → 0.0.621

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.
@@ -249,8 +249,9 @@ var CartService = /** @class */ (function () {
249
249
  };
250
250
  this.updateCartObj = function (cart, emitEvent) {
251
251
  if (emitEvent === void 0) { emitEvent = true; }
252
+ var _a, _b, _c;
252
253
  _this.cartSubject.next(cart);
253
- _this.updateBalanceAttributes(cart);
254
+ _this.updateBalanceAttributes((_a = cart) === null || _a === void 0 ? void 0 : _a.balanceCustomer, (_c = (_b = cart) === null || _b === void 0 ? void 0 : _b.totals) === null || _c === void 0 ? void 0 : _c.total);
254
255
  emitEvent && _this.analyticsService.callEvent('add_to_cart', cart);
255
256
  _this.promotionsSubject.next(_this.orderUtils.getPromotions(cart, true));
256
257
  cart.couponCode
@@ -385,6 +386,9 @@ var CartService = /** @class */ (function () {
385
386
  if (!balance || balance.creditAmount === null || balance.creditAmount === undefined) {
386
387
  return true;
387
388
  }
389
+ if (balance.allowAnyPaymentMethod) {
390
+ return true;
391
+ }
388
392
  if (balance.remainingCredits === undefined) {
389
393
  return false;
390
394
  }
@@ -662,21 +666,21 @@ var CartService = /** @class */ (function () {
662
666
  return subtotal - total;
663
667
  }));
664
668
  };
665
- CartService.prototype.updateBalanceAttributes = function (cartData) {
666
- var _a, _b, _c;
667
- var balance = (_a = cartData) === null || _a === void 0 ? void 0 : _a.balanceCustomer;
669
+ CartService.prototype.updateBalanceAttributes = function (balance, total) {
670
+ if (total === void 0) { total = null; }
668
671
  if (!balance) {
669
672
  this.balanceCustomerSubject.next(null);
670
673
  return;
671
674
  }
675
+ var totalAmount = (total !== null && total !== void 0 ? total : 0);
672
676
  var balanceData = {
673
677
  allowAnyPaymentMethod: balance.allowAnyPaymentMethod,
674
678
  allowExceedBalance: balance.allowExceedBalance,
675
679
  creditAmount: balance.creditAmount,
676
680
  showMax: balance.showMax,
677
681
  showPrice: balance.showPrice,
678
- remainingCredits: balance.creditAmount && ((_c = (_b = cartData) === null || _b === void 0 ? void 0 : _b.totals) === null || _c === void 0 ? void 0 : _c.total) && balance.creditAmount >= cartData.totals.total
679
- ? balance.creditAmount - cartData.totals.total
682
+ remainingCredits: balance.creditAmount != null && totalAmount != null && balance.creditAmount >= totalAmount
683
+ ? balance.creditAmount - totalAmount
680
684
  : 0,
681
685
  applyMaxOrders: balance.applyMaxOrders,
682
686
  maxOrders: balance.maxOrders
@@ -702,4 +706,4 @@ var CartService = /** @class */ (function () {
702
706
  return CartService;
703
707
  }());
704
708
  export { CartService };
705
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FydC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6Im5nOi8vbmctZWFzeWNvbW1lcmNlLyIsInNvdXJjZXMiOlsibGliL3NlcnZpY2VzL2NhcnQuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUczQyxPQUFPLEVBQUUsZUFBZSxFQUFjLE1BQU0sTUFBTSxDQUFDO0FBQ25ELE9BQU8sRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNyQyxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUM5RCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDM0MsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzdDLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUV0RCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUdsRSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUNoRSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUNwRCxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0saUJBQWlCLENBQUM7Ozs7O0FBS3pDO0lBa0RJLHFCQUFvQixVQUE2QixFQUFVLGFBQTJCLEVBQVUsTUFBaUIsRUFDckcsV0FBd0IsRUFBVSxVQUErQixFQUFVLGdCQUFrQyxFQUM3RyxvQkFBMEMsRUFDMUMsTUFBYztRQUgxQixpQkFVQztRQVZtQixlQUFVLEdBQVYsVUFBVSxDQUFtQjtRQUFVLGtCQUFhLEdBQWIsYUFBYSxDQUFjO1FBQVUsV0FBTSxHQUFOLE1BQU0sQ0FBVztRQUNyRyxnQkFB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WUFDdkMsT0FBTztTQUNWO1FBRUQsSUFBTSxXQUFXLEdBQUc7WUFDaEIscUJBQXFCLEVBQUUsT0FBTyxDQUFDLHFCQUFxQjtZQUNwRCxrQkFBa0IsRUFBRSxPQUFPLENBQUMsa0JBQWtCO1lBQzlDLFlBQVksRUFBRSxPQUFPLENBQUMsWUFBWTtZQUNsQyxPQUFPLEVBQUUsT0FBTyxDQUFDLE9BQU87WUFDeEIsU0FBUyxFQUFFLE9BQU8sQ0FBQyxTQUFTO1lBQzVCLGdCQUFnQixFQUFFLE9BQU8sQ0FBQyxZQUFZLGlCQUFJLFFBQVEsMENBQUUsTUFBTSwwQ0FBRSxLQUFLLENBQUEsSUFBSSxPQUFPLENBQUMsWUFBWSxJQUFJLFFBQVEsQ0FBQyxNQUFNLENBQUMsS0FBSztnQkFDOUcsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxZQUFZLEdBQUcsUUFBUSxDQUFDLE1BQU0sQ0FBQyxLQUFLO2dCQUM5QyxDQUFDLENBQUMsQ0FBQztZQUNQLGNBQWMsRUFBRSxPQUFPLENBQUMsY0FBYztZQUN0QyxTQUFTLEVBQUUsT0FBTyxDQUFDLFNBQVM7U0FDL0IsQ0FBQztRQUVGLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7SUFDbEQsQ0FBQzs7Z0JBcm5CK0IsaUJBQWlCO2dCQUF5QixZQUFZO2dCQUFrQixTQUFTO2dCQUN4RixXQUFXO2dCQUFzQixtQkFBbUI7Z0JBQTRCLGdCQUFnQjtnQkFDdkYsb0JBQW9CO2dCQUNsQyxNQUFNOzs7SUFyRGpCLFdBQVc7UUFIdkIsVUFBVSxDQUFDO1lBQ1IsVUFBVSxFQUFFLE1BQU07U0FDckIsQ0FBQztPQUNXLFdBQVcsQ0F5cUJ2QjtzQkE3ckJEO0NBNnJCQyxBQXpxQkQsSUF5cUJDO1NBenFCWSxXQUFXIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBQcm9kdWN0IH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9wcm9kdWN0JztcclxuaW1wb3J0IHsgQ2FydEl0ZW0gfSBmcm9tICcuLi9pbnRlcmZhY2VzL2NhcnQtaXRlbSc7XHJcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBtYXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XHJcbmltcG9ydCB7IENvbm5lY3Rpb25TZXJ2aWNlIH0gZnJvbSAnLi4vYXBpL2Nvbm5lY3Rpb24uc2VydmljZSc7XHJcbmltcG9ydCB7IENvbnN0YW50cyB9IGZyb20gJy4uL2NvcmUuY29uc3RzJztcclxuaW1wb3J0IHsgQXV0aFNlcnZpY2UgfSBmcm9tICcuL2F1dGguc2VydmljZSc7XHJcbmltcG9ydCB7IFRvYXN0U2VydmljZSB9IGZyb20gJy4uL3V0aWxzL3RvYXN0LnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBDb3Vwb25JIH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9jb3Vwb24nO1xyXG5pbXBvcnQgeyBPcmRlclV0aWxpdHlTZXJ2aWNlIH0gZnJvbSAnLi4vdXRpbHMvb3JkZXItdXRpbC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgQ2hlY2tvdXREYXRhIH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9jaGVja291dC1kYXRhJztcclxuaW1wb3J0IHsgQ2FydEFmZm9yZGFibGUgfSBmcm9tICcuLi9pbnRlcmZhY2VzL2NhcnQvY2FydC1hZmZvcmRhYmxlJztcclxuaW1wb3J0IHsgQ2hhbm5lbENvbmZpZ1NlcnZpY2UgfSBmcm9tICcuL2NoYW5uZWwtY29uZmlnLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBBbmFseXRpY3NTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vcHVibGljLWFwaSc7XHJcbmltcG9ydCB7IFJvdXRlciB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XHJcblxyXG5ASW5qZWN0YWJsZSh7XHJcbiAgICBwcm92aWRlZEluOiAncm9vdCdcclxufSlcclxuZXhwb3J0IGNsYXNzIENhcnRTZXJ2aWNlIHtcclxuICAgIHByaXZhdGUgY2FydEl0ZW1zU3ViamVjdDogQmVoYXZpb3JTdWJqZWN0PENhcnRJdGVtW10+ID0gbmV3IEJlaGF2aW9yU3ViamVjdChbXSk7XHJcbiAgICBwcml2YXRlIGNvdXBvblN1YmplY3Q6IEJlaGF2aW9yU3ViamVjdDxhbnk+ID0gbmV3IEJlaGF2aW9yU3ViamVjdChudWxsKTtcclxuICAgIHByaXZhdGUgY2FydFN1YmplY3Q6IEJlaGF2aW9yU3ViamVjdDxhbnk+ID0gbmV3IEJlaGF2aW9yU3ViamVjdChudWxsKTtcclxuICAgIHByaXZhdGUgcmVxdWVzdEluUHJvY2VzcyA9IG5ldyBCZWhhdmlvclN1YmplY3QoZmFsc2UpO1xyXG4gICAgcHJpdmF0ZSBwcm9tb3Rpb25zU3ViamVjdDogQmVoYXZpb3JTdWJqZWN0PENoZWNrb3V0RGF0YVtdPiA9IG5ldyBCZWhhdmlvclN1YmplY3QoW10pO1xyXG5cclxuICAgIHByaXZhdGUgYmFsYW5jZUN1c3RvbWVyU3ViamVjdDogQmVoYXZpb3JTdWJqZWN0PHtcclxuICAgICAgICBhbGxvd0FueVBheW1lbnRNZXRob2Q/OiBib29sZWFuO1xyXG4gICAgICAgIGFsbG93RXhjZWVkQmFsYW5jZT86IGJvb2xlYW47XHJcbiAgICAgICAgY3JlZGl0QW1vdW50PzogbnVtYmVyIHwgbnVsbDtcclxuICAgICAgICBzaG93TWF4PzogYm9vbGVhbjtcclxuICAgICAgICBzaG93UHJpY2U/OiBib29sZWFuO1xyXG4gICAgICAgIHJlbWFpbmluZ0NyZWRpdHM/OiBudW1iZXI7XHJcbiAgICAgICAgYXBwbHlNYXhPcmRlcnM/OiBib29sZWFuO1xyXG4gICAgICAgIG1heE9yZGVycz86IG51bWJlcjtcclxuICAgIH0gfCBudWxsPiA9IG5ldyBCZWhhdmlvclN1YmplY3QobnVsbCk7XHJcblxyXG4gICAgcHJpdmF0ZSBpdGVtcyA9IFtdO1xyXG5cclxuICAgIHByaXZhdGUgY291bnQ6IG51bWJlciA9IDA7XHJcbiAgICBwcml2YXRlIGxvY2FsZSA9IFwiXCI7XHJcbiAgICBwcml2YXRlIGxvZ2dlZF9pbiA9IGZhbHNlO1xyXG4gICAgcHJpdmF0ZSBoYXZlX3RvX3VwZGF0ZSA9IHRydWU7XHJcbiAgICBwdWJsaWMgY2hhbm5lbENvbmZpZzogYW55ID0ge307XHJcbiAgICBwcml2YXRlIGNhcnRfYmFzZVVybCA9ICdzaG9wLWFwaS8nICsgdGhpcy5jb25zdHMuZ2V0Q2hhbm5lbCgpICsgJy9jYXJ0cyc7XHJcblxyXG4gICAgcHVibGljIGNhcnRJdGVtc0FwaSA9ICgpID0+IHRoaXMuY2FydF9iYXNlVXJsICsgJz9sb2NhbGU9JyArIHRoaXMuY29uc3RzLmdldExvY2FsZSgpO1xyXG4gICAgcHVibGljIGFkZEl0ZW1BcGkgPSAoKSA9PiB0aGlzLmNhcnRfYmFzZVVybCArICcvJyArIHRoaXMuY2FydF90b2tlbiArICcvaXRlbXMnICsgJz9sb2NhbGU9JyArIHRoaXMuY29uc3RzLmdldExvY2FsZSgpO1xyXG4gICAgcHVibGljIGFkZEFsbEl0ZW1zQXBpID0gKCkgPT4gdGhpcy5jYXJ0X2Jhc2VVcmwgKyAnLycgKyB0aGlzLmNhcnRfdG9rZW4gKyAnL211bHRpcGxlLWl0ZW1zJyArICc/bG9jYWxlPScgKyB0aGlzLmNvbnN0cy5nZXRMb2NhbGUoKTtcclxuICAgIHB1YmxpYyB1cGRhdGVJdGVtUXVhbnRpdHlBcGkgPSAoaXRlbV9pZCkgPT4gdGhpcy5jYXJ0X2Jhc2VVcmwgKyAnLycgKyB0aGlzLmNhcnRfdG9rZW4gKyAnL2l0ZW1zLycgKyBpdGVtX2lkICsgJz9sb2NhbGU9JyArIHRoaXMuY29uc3RzLmdldExvY2FsZSgpO1xyXG4gICAgcHVibGljIGRlbGV0ZUl0ZW1BcGkgPSAoaXRlbV9pZCkgPT4gdGhpcy5jYXJ0X2Jhc2VVcmwgKyAnLycgKyB0aGlzLmNhcnRfdG9rZW4gKyAnL2l0ZW1zLycgKyBpdGVtX2lkICsgJz9sb2NhbGU9JyArIHRoaXMuY29uc3RzLmdldExvY2FsZSgpO1xyXG4gICAgcHVibGljIGNvdXBvbkFwaSA9ICgpID0+IHRoaXMuY2FydF9iYXNlVXJsICsgJy8nICsgdGhpcy5jYXJ0X3Rva2VuICsgJy9jb3Vwb24nO1xyXG4gICAgcHVibGljIGFkZHJlc3NCb29rQXBpID0gKCkgPT4gJ3Nob3AtYXBpLycgKyB0aGlzLmNvbnN0cy5nZXRDaGFubmVsKCkgKyAnL2FkZHJlc3MtYm9vayc7XHJcbiAgICBwdWJsaWMgdGF4ZXNBcGkgPSAoKSA9PiAnc2hvcC1hcGkvJyArIHRoaXMuY29uc3RzLmdldENoYW5uZWwoKSArICcvY2FydHMvdGF4JztcclxuXHJcbiAgICBwdWJsaWMgY2FydF90b2tlbjtcclxuICAgIHB1YmxpYyBjYXJ0SXRlbXMgPSB0aGlzLmNhcnRJdGVtc1N1YmplY3QuYXNPYnNlcnZhYmxlKCkucGlwZShtYXAoaXRlbXMgPT4gdGhpcy5zd2l0Y2hQcmljZUluQ2FydEl0ZW0oaXRlbXMpKSlcclxuICAgIHB1YmxpYyBjb3Vwb24gPSB0aGlzLmNvdXBvblN1YmplY3QuYXNPYnNlcnZhYmxlKCk7XHJcbiAgICBwdWJsaWMgbG9hZGluZyA9IHRoaXMucmVxdWVzdEluUHJvY2Vzcy5hc09ic2VydmFibGUoKTtcclxuICAgIHB1YmxpYyBjYXJ0ID0gdGhpcy5jYXJ0U3ViamVjdC5hc09ic2VydmFibGUoKTtcclxuICAgIHB1YmxpYyBwcm9tb3Rpb25zID0gdGhpcy5wcm9tb3Rpb25zU3ViamVjdC5hc09ic2VydmFibGUoKTtcclxuICAgIHB1YmxpYyBkZWxldGluZzogQm9vbGVhbiA9IGZhbHNlO1xyXG4gICAgcHVibGljIGJhbGFuY2VDdXN0b21lciQgPSB0aGlzLmJhbGFuY2VDdXN0b21lclN1YmplY3QuYXNPYnNlcnZhYmxlKCk7XHJcbiAgICBwdWJsaWMgYWxsb3dBbnlQYXltZW50TWV0aG9kJCA9IHRoaXMuYmFsYW5jZUN1c3RvbWVyJC5waXBlKG1hcChkYXRhID0+IGRhdGE/LmFsbG93QW55UGF5bWVudE1ldGhvZCA/PyBudWxsKSk7XHJcbiAgICBwdWJsaWMgYWxsb3dFeGNlZWRCYWxhbmNlJCA9IHRoaXMuYmFsYW5jZUN1c3RvbWVyJC5waXBlKG1hcChkYXRhID0+IGRhdGE/LmFsbG93RXhjZWVkQmFsYW5jZSA/PyBudWxsKSk7XHJcbiAgICBwdWJsaWMgY3JlZGl0QW1vdW50JCA9IHRoaXMuYmFsYW5jZUN1c3RvbWVyJC5waXBlKG1hcChkYXRhID0+IGRhdGE/LmNyZWRpdEFtb3VudCA/PyBudWxsKSk7XHJcbiAgICBwdWJsaWMgc2hvd01heCQgPSB0aGlzLmJhbGFuY2VDdXN0b21lciQucGlwZShtYXAoZGF0YSA9PiBkYXRhPy5zaG93TWF4ID8/IG51bGwpKTtcclxuICAgIHB1YmxpYyBzaG93UHJpY2UkID0gdGhpcy5iYWxhbmNlQ3VzdG9tZXIkLnBpcGUobWFwKGRhdGEgPT4gZGF0YT8uc2hvd1ByaWNlID8/IG51bGwpKTtcclxuXHJcbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlIGNvbm5lY3Rpb246IENvbm5lY3Rpb25TZXJ2aWNlLCBwcml2YXRlIHRvYXN0clNlcnZpY2U6IFRvYXN0U2VydmljZSwgcHJpdmF0ZSBjb25zdHM6IENvbnN0YW50cyxcclxuICAgICAgICBwcml2YXRlIGF1dGhTZXJ2aWNlOiBBdXRoU2VydmljZSwgcHJpdmF0ZSBvcmRlclV0aWxzOiBPcmRlclV0aWxpdHlTZXJ2aWNlLCBwcml2YXRlIGFuYWx5dGljc1NlcnZpY2U6IEFuYWx5dGljc1NlcnZpY2UsXHJcbiAgICAgICAgcHJpdmF0ZSBjaGFubmVsQ29uZmlnU2VydmljZTogQ2hhbm5lbENvbmZpZ1NlcnZpY2UsXHJcbiAgICAgICAgcHJpdmF0ZSByb3V0ZXI6IFJvdXRlcikge1xyXG5cclxuICAgICAgICB0aGlzLnJlcXVlc3RJblByb2Nlc3MubmV4dCh0cnVlKTtcclxuICAgICAgICB0aGlzLml0ZW1zID0gSlNPTi5wYXJzZShsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnY2FydCcpKSB8fCBbXTtcclxuICAgICAgICB0aGlzLmNhcnRfdG9rZW4gPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnY2FydF90b2tlbicpIHx8IG51bGw7XHJcbiAgICAgICAgdGhpcy5hdXRoU2VydmljZS5sb2dnZWRJbi5zdWJzY3JpYmUocmVzID0+IHRoaXMuZ2V0Q2FydCgpKTtcclxuICAgICAgICB0aGlzLmNoYW5uZWxDb25maWdTZXJ2aWNlLmNoYW5uZWxDb25maWckLnN1YnNjcmliZShyZXMgPT4gdGhpcy5jaGFubmVsQ29uZmlnID0gcmVzKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0Q2FydDIoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuY2FydEl0ZW1zU3ViamVjdC52YWx1ZTtcclxuICAgIH1cclxuXHJcbiAgICBnZXRBZGRyZXNzQm9vayA9IGFzeW5jICgpID0+XHJcbiAgICAgICAgdGhpcy5jb25uZWN0aW9uLmdldCh0aGlzLmFkZHJlc3NCb29rQXBpKCkpLnBpcGUobWFwKHJlcyA9PiByZXM/Lmxlbmd0aCAmJiByZXMubWFwKGFkZHJlcyA9PiB7IHJldHVybiBhZGRyZXMgJiYgeyAuLi5hZGRyZXMsIHNlbGVjdGVkOiBhZGRyZXMuZGVmYXVsdCB9IH0pIHx8IG51bGwpKS50b1Byb21pc2UoKTtcclxuXHJcbiAgICBwdWJsaWMgZ2V0VGF4ZXMgPSBhc3luYyAoKSA9PlxyXG4gICAgICAgIHRoaXMuY29ubmVjdGlvbi5wb3N0KHRoaXMudGF4ZXNBcGkoKSwgeyB0b2tlbjogdGhpcy5jYXJ0X3Rva2VuIH0pLnN1YnNjcmliZShyZXMgPT4gcmVzKVxyXG5cclxuICAgIHByaXZhdGUgZ2V0Q2FydCA9IGFzeW5jICgpID0+XHJcbiAgICAgICAgdGhpcy5jb25uZWN0aW9uLnBvc3QodGhpcy5jYXJ0SXRlbXNBcGkoKSwgKCh0aGlzLmNhcnRfdG9rZW4gJiYgdGhpcy5pdGVtcy5sZW5ndGggPj0gMSkgJiYgeyB0b2tlbjogdGhpcy5jYXJ0X3Rva2VuIH0pKS5zdWJzY3JpYmUoXHJcbiAgICAgICAgICAgIHJlcyA9PiB0aGlzLmluaXRpYWxpemVDYXJ0KHJlcylcclxuICAgICAgICApXHJcblxyXG4gICAgcHJpdmF0ZSBnZXRDYXJ0QnlUb2tlbiA9IGFzeW5jICgpID0+XHJcbiAgICAgICAgdGhpcy5jb25uZWN0aW9uLnBvc3QodGhpcy5jYXJ0SXRlbXNBcGkoKSwgKCh0aGlzLmNhcnRfdG9rZW4pICYmIHsgdG9rZW46IHRoaXMuY2FydF90b2tlbiB9KSkuc3Vic2NyaWJlKFxyXG4gICAgICAgICAgICByZXMgPT4gdGhpcy5pbml0aWFsaXplQ2FydChyZXMpXHJcbiAgICAgICAgKVxyXG5cclxuICAgIHByaXZhdGUgZ2V0Q2FydEJ5Q3VzdG9tZXIgPSBhc3luYyAoKSA9PlxyXG4gICAgICAgIHRoaXMuY29ubmVjdGlvbi5wb3N0KHRoaXMuY2FydEl0ZW1zQXBpKCkpLnN1YnNjcmliZShcclxuICAgICAgICAgICAgcmVzID0+IHRoaXMuaW5pdGlhbGl6ZUNhcnQocmVzKVxyXG4gICAgICAgIClcclxuXHJcbiAgICAvKipcclxuICAgICAqICBAcHJpdmF0ZVxyXG4gICAgICogIENBUlQgQ1JVRCBTRVJWRVInUyBTWU5DUk9OSVpFRFxyXG4gICAgICovXHJcblxyXG4gICAgcHJpdmF0ZSBpbml0aWFsaXplQ2FydCA9IChyZXNwb25zZSkgPT4ge1xyXG4gICAgICAgIHRoaXMuY2FydF90b2tlbiA9IHJlc3BvbnNlLnRva2VuVmFsdWU7XHJcbiAgICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oJ2NhcnRfdG9rZW4nLCB0aGlzLmNhcnRfdG9rZW4pO1xyXG4gICAgICAgIHRoaXMubG9jYWxlID0gcmVzcG9uc2UubG9jYWxlO1xyXG4gICAgICAgIC8qIGxldCBsb2NhbGVGcm9tU3RvcmFnZSA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKCdMT0NBTEUnKVxyXG4gICAgICAgIGNvbnNvbGUubG9nKGxvY2FsZUZyb21TdG9yYWdlKVxyXG4gICAgICAgIHRoaXMubG9jYWxlID0gbG9jYWxlRnJvbVN0b3JhZ2UgPyBsb2NhbGVGcm9tU3RvcmFnZSA6IHJlc3BvbnNlLmxvY2FsZTtcclxuICAgICAgICByZXNwb25zZS5sb2NhbGUgPSB0aGlzLmxvY2FsZSAqL1xyXG4gICAgICAgIHRoaXMudXBkYXRlQ2FydE9iaihyZXNwb25zZSwgZmFsc2UpO1xyXG4gICAgICAgIHRoaXMudXBkYXRlQ2FydEl0ZW1zKHRoaXMudHJhbnNmb3JtSXRlbXMocmVzcG9uc2UuaXRlbXMpKTtcclxuICAgICAgICB0aGlzLnJlcXVlc3RJblByb2Nlc3MubmV4dChmYWxzZSk7XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBzd2l0Y2hQcmljZUluQ2FydEl0ZW0gPSAoaXRlbXM6IENhcnRJdGVtW10pID0+IHtcclxuICAgICAgICAvL3JldHVybiBpdGVtcztcclxuICAgICAgICByZXR1cm4gaXRlbXMubWFwKFxyXG4gICAgICAgICAgICBpdGVtID0+IHtcclxuICAgICAgICAgICAgICAgIGlmIChpdGVtLnByb2R1Y3QpIHtcclxuICAgICAgICAgICAgICAgICAgICBpdGVtLnByb2R1Y3QucHJpY2UgPSBpdGVtLnByb2R1Y3QudmFyaWFudHNbMF0uc2FsZXByaWNlID8gaXRlbS5wcm9kdWN0LnZhcmlhbnRzWzBdLnNhbGVwcmljZSA6IGl0ZW0ucHJvZHVjdC52YXJpYW50c1swXS5wcmljZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHJldHVybiBpdGVtXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICApXHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBzdGVwQ2FydCA9IChyZXMpID0+IHtcclxuICAgICAgICByZXMuaXRlbXMubGVuZ3RoID4gMCAmJiByZXMuaXRlbXMuZm9yRWFjaChcclxuICAgICAgICAgICAgaXRlbSA9PiAhdGhpcy5pc0l0ZW1JbkxvY2FsKGl0ZW0uaWQpICYmIHRoaXMuZGVsZXRlQ2FydEl0ZW0oaXRlbSwgZmFsc2UpXHJcbiAgICAgICAgKTtcclxuICAgICAgICB0aGlzLmFkZEFsbFRvQ2FydChcclxuICAgICAgICAgICAgdGhpcy5pdGVtcy5maWx0ZXIoXHJcbiAgICAgICAgICAgICAgICBpdGVtID0+ICFyZXMuaXRlbXMuc29tZShleHRlcm5hbF9pdGVtID0+IGV4dGVybmFsX2l0ZW0uaWQgPT0gaXRlbS5pdGVtX2lkKVxyXG4gICAgICAgICAgICApXHJcbiAgICAgICAgKTtcclxuICAgIH1cclxuICAgIFxyXG5cclxuICAgIHByaXZhdGUgdXBkYXRlQ2FydEl0ZW1zID0gKGl0ZW1zKSA9PiB7XHJcbiAgICAgICAgdGhpcy5pdGVtcyA9IGl0ZW1zO1xyXG4gICAgICAgIHRoaXMuY291bnQgPSBpdGVtcy5sZW5ndGg7XHJcbiAgICAgICAgdGhpcy5jYXJ0SXRlbXNTdWJqZWN0Lm5leHQodGhpcy5pdGVtcyk7XHJcbiAgICAgICAgdGhpcy51cGRhdGVMb2NhbENhcnQoKTtcclxuICAgICAgICB0aGlzLnJlcXVlc3RJblByb2Nlc3MubmV4dChmYWxzZSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSB1cGRhdGVDYXJ0SXRlbVF1YW50aXR5ID0gKHZhcmlhbnRfaWQsIHF1YW50aXR5KSA9PiB7XHJcbiAgICAgICAgbGV0IG5ld1F1YW50aXR5ID0gdGhpcy5pdGVtcy5maW5kKGl0ZW0gPT4gaXRlbS52YXJpYW50X2lkID09IHZhcmlhbnRfaWQpLnF1YW50aXR5ID0gcXVhbnRpdHk7XHJcbiAgICAgICAgdGhpcy5jYXJ0SXRlbXNTdWJqZWN0Lm5leHQodGhpcy5pdGVtcyk7XHJcbiAgICAgICAgdGhpcy5yZXF1ZXN0SW5Qcm9jZXNzLm5leHQoZmFsc2UpO1xyXG4gICAgICAgIHRoaXMudXBkYXRlTG9jYWxDYXJ0KCk7XHJcbiAgICAgICAgdGhpcy50b2FzdHJTZXJ2aWNlLnNob3coJ3Byb2R1Y3QtdXBkYXRlZCcsIHsgcXVhbnRpdHk6IG5ld1F1YW50aXR5IH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgYXBwZW5kVG9DYXJ0ID0gKGNhcnQpID0+IHtcclxuICAgICAgICB0aGlzLnVwZGF0ZUNhcnRPYmooY2FydCk7XHJcbiAgICAgICAgdGhpcy5pdGVtcyA9IHRoaXMudHJhbnNmb3JtSXRlbXMoY2FydC5pdGVtcyk7XHJcbiAgICAgICAgdGhpcy5jb3VudCA9IHRoaXMuaXRlbXMubGVuZ3RoO1xyXG4gICAgICAgIHRoaXMucmVxdWVzdEluUHJvY2Vzcy5uZXh0KGZhbHNlKTtcclxuICAgICAgICB0aGlzLnVwZGF0ZUxvY2FsQ2FydCgpO1xyXG4gICAgICAgIC8vICAgIHRoaXMudG9hc3RyU2VydmljZS5zaG93KCdwcm9kdWN0LWFkZGVkJyk7XHJcbiAgICAgICAgdGhpcy5jYXJ0SXRlbXNTdWJqZWN0Lm5leHQodGhpcy5pdGVtcyk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSByZW1vdmVDYXJ0SXRlbSA9IChjYXJ0LCBwcm9kdWN0LCB0b2FzdCA9IHRydWUpID0+IHtcclxuICAgICAgICB0aGlzLnVwZGF0ZUNhcnRPYmooY2FydCwgZmFsc2UpO1xyXG4gICAgICAgIHRoaXMuaXRlbXMuc3BsaWNlKHRoaXMuaXRlbXMuZmluZEluZGV4KGl0ZW0gPT4gaXRlbS5pdGVtX2lkID09IHByb2R1Y3QuaXRlbV9pZCksIDEpO1xyXG4gICAgICAgIHRoaXMuY2FydEl0ZW1zU3ViamVjdC5uZXh0KHRoaXMuaXRlbXMpO1xyXG4gICAgICAgIHRvYXN0ICYmIHRoaXMucmVxdWVzdEluUHJvY2Vzcy5uZXh0KGZhbHNlKTtcclxuICAgICAgICB0b2FzdCAmJiB0aGlzLnRvYXN0clNlcnZpY2Uuc2hvdygncHJvZHVjdC1yZW1vdmVkJyk7XHJcbiAgICAgICAgdGhpcy51cGRhdGVMb2NhbENhcnQoKTtcclxuICAgICAgICAvLyB0aGlzLmdvb2dsZUFuYWx5dGljcy5yZW1vdmVGcm9tQ2FydChwcm9kdWN0KTtcclxuICAgICAgICB0aGlzLmFuYWx5dGljc1NlcnZpY2UuY2FsbEV2ZW50KCdyZW1vdmVfZnJvbV9jYXJ0JywgeyAuLi5wcm9kdWN0LCBjdXJyZW5jeTogdGhpcy5jb25zdHMuY3VycmVuY3kuY29kZSB9KVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGFkZElmQWxscmVhZHlFeGlzdHMgPSAocHJvZHVjdCwgdmFyaWFudF9pZCwgcXVhbnRpdHlBZGQgPSAxKSA9PlxyXG4gICAgICAgIHRoaXMuaXRlbXMuZmluZCgoaXRlbSwgaW5kZXgpID0+IHtcclxuICAgICAgICAgICAgaWYgKGl0ZW0ucHJvZHVjdC5pZCA9PSBwcm9kdWN0LmlkICYmIGl0ZW0udmFyaWFudF9pZCA9PSB2YXJpYW50X2lkKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZUl0ZW1RdWFudGl0eShpdGVtLCB0aGlzLmZpbmRJdGVtKHByb2R1Y3QuaWQpLnF1YW50aXR5ICsgcXVhbnRpdHlBZGQpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgIHByaXZhdGUgdXBkYXRlTG9jYWxDYXJ0ID0gKCkgPT4ge1xyXG4gICAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKCdjYXJ0JywgSlNPTi5zdHJpbmdpZnkodGhpcy5pdGVtcykpO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgcmVzZXRDYXJ0ID0gKG5leHQ/KSA9PiB7XHJcbiAgICAgICAgdGhpcy5pdGVtcyA9IFtdO1xyXG4gICAgICAgIHRoaXMuY2FydFN1YmplY3QubmV4dChudWxsKTtcclxuICAgICAgICB0aGlzLnVwZGF0ZUJhbGFuY2VBdHRyaWJ1dGVzKG51bGwpO1xyXG4gICAgICAgIHRoaXMuY2FydF90b2tlbiA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5jYXJ0SXRlbXNTdWJqZWN0Lm5leHQoW10pO1xyXG4gICAgICAgIHRoaXMuY291bnQgPSAwO1xyXG4gICAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKCdjYXJ0JywgXCJbXVwiKTtcclxuICAgICAgICBsb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbSgnY2FydF90b2tlbicpO1xyXG4gICAgICAgIG5leHQgJiYgbmV4dCgpO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgdXBkYXRlQ2FydE9iaiA9IChjYXJ0LCBlbWl0RXZlbnQgPSB0cnVlKTogYm9vbGVhbiA9PiB7XHJcbiAgICAgICAgdGhpcy5jYXJ0U3ViamVjdC5uZXh0KGNhcnQpO1xyXG4gICAgICAgIHRoaXMudXBkYXRlQmFsYW5jZUF0dHJpYnV0ZXMoY2FydCk7XHJcbiAgICAgICAgZW1pdEV2ZW50ICYmIHRoaXMuYW5hbHl0aWNzU2VydmljZS5jYWxsRXZlbnQoJ2FkZF90b19jYXJ0JywgY2FydCk7XHJcbiAgICAgICAgdGhpcy5wcm9tb3Rpb25zU3ViamVjdC5uZXh0KHRoaXMub3JkZXJVdGlscy5nZXRQcm9tb3Rpb25zKGNhcnQsIHRydWUpKTtcclxuXHJcbiAgICAgICAgY2FydC5jb3Vwb25Db2RlXHJcbiAgICAgICAgICAgID8gdGhpcy5mb3JtYXRDb3Vwb24oY2FydClcclxuICAgICAgICAgICAgOiB0aGlzLmNvdXBvblN1YmplY3QubmV4dChudWxsKTtcclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGlzSXRlbUluTG9jYWwgPSAoaXRlbV9pZCkgPT4gdGhpcy5pdGVtcy5zb21lKGl0ZW0gPT4gaXRlbS5pdGVtX2lkID09IGl0ZW1faWQpO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogIEBwdWJsaWNcclxuICAgICAqICBDQVJUIENSVURcclxuICAgICAqL1xyXG5cclxuICAgIGFkZFRvQ2FydCA9IChwcm9kdWN0OiBQcm9kdWN0LCBxdWFudGl0eTogbnVtYmVyLCB2YXJpYW50X2lkKSA9PiB7XHJcbiAgICAgICAgY29uc3QgYmFsYW5jZSA9IHRoaXMuYmFsYW5jZUN1c3RvbWVyU3ViamVjdC52YWx1ZTtcclxuICAgICAgICBjb25zdCBhcHBseU1heE9yZGVycyA9IGJhbGFuY2U/LmFwcGx5TWF4T3JkZXJzID8/IGZhbHNlO1xyXG4gICAgICAgIGNvbnN0IG1heE9yZGVycyA9IGJhbGFuY2U/Lm1heE9yZGVycyA/PyBJbmZpbml0eTtcclxuXHJcbiAgICAgICAgaWYgKGFwcGx5TWF4T3JkZXJzICYmIChtYXhPcmRlcnMgPD0gMCB8fCBtYXhPcmRlcnMgPT09IG51bGwpKSB7XHJcbiAgICAgICAgICAgIHRoaXMudG9hc3RyU2VydmljZS5zaG93KCdtYXgtb3JkZXJzLXJlYWNoZWQnKTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKCF0aGlzLmF1dGhTZXJ2aWNlLmlzQWJsZVRvQnV5KCkpIHtcclxuICAgICAgICAgICAgdGhpcy50b2FzdHJTZXJ2aWNlLnNob3coJ211c3Qtc2VsZWN0LWN1c3RvbWVyJylcclxuICAgICAgICAgICAgcmV0dXJuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnJlcXVlc3RJblByb2Nlc3MubmV4dCh0cnVlKTtcclxuICAgICAgICBsZXQgYWRkZWQgPSB0aGlzLmFkZElmQWxscmVhZHlFeGlzdHMocHJvZHVjdCwgdmFyaWFudF9pZCwgcXVhbnRpdHkpO1xyXG4gICAgICAgIGlmICghYWRkZWQpIHtcclxuICAgICAgICAgICAgdGhpcy5jb25uZWN0aW9uLnBvc3QodGhpcy5hZGRJdGVtQXBpKCksIHsgcHJvZHVjdENvZGU6IHByb2R1Y3QuaWQsIHF1YW50aXR5OiBxdWFudGl0eSwgdmFyaWFudENvZGU6IHZhcmlhbnRfaWQgfSlcclxuICAgICAgICAgICAgICAgIC5zdWJzY3JpYmUoXHJcbiAgICAgICAgICAgICAgICAgICAgcmVzID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gTWFuZWphciBsYSByZXNwdWVzdGEgSFRUUCBleGl0b3NhIChjw7NkaWdvIDIwMClcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5hcHBlbmRUb0NhcnQocmVzKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy50b2FzdHJTZXJ2aWNlLnNob3coJ3Byb2R1Y3QtYWRkZWQnKTtcclxuICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgIGVyciA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIE1hbmVqYXIgZWwgZXJyb3IgZGUgbGEgbGxhbWFkYSBIVFRQIChjw7NkaWdvIDUwMCB1IG90cm8gZXJyb3IpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlcnIuc3RhdHVzID09PSA1MDApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEPDs2RpZ28gZGUgZXJyb3IgNTAwICh0aW1lb3V0KVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5oYW5kbGVFcnJvcihlcnIpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy50b2FzdHJTZXJ2aWNlLnNob3coJ0hhIG9jdXJyaWRvIHVuIGVycm9yIGFsIGFncmVnYXIgYWwgY2Fycml0by4gVnVlbHZhIGEgaW50ZW50YXJsby4nKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIE90cm8gY8OzZGlnbyBkZSBlcnJvclxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5oYW5kbGVFcnJvcihlcnIpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gdGhpcy50b2FzdHJTZXJ2aWNlLnNob3coJ0Vycm9yIGluZXNwZXJhZG8uIFZ1ZWx2YSBhIGludGVudGFybG8nKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgfVxyXG5cclxuXHJcbiAgICB9XHJcblxyXG4gICAgYWRkVG9Mb3QgPSAocHJvZHVjdDogUHJvZHVjdCwgcXVhbnRpdHk6IG51bWJlciwgdmFyaWFudF9pZCwgaWQ/LCBvcmRlcl9pdGVtX2lkPywgbG90X3F1YW50aXR5PywgdW5pdF9wcmljZT8sIHVuaXRfdG90YWw/LCBhanVzdGVtZW50X3RvdGFsPywgdG90YWxfbG90PywgbG90X3N0YXR1cz8sIGRhdGVfcmVxdWVzdD8sIG5vdGVzPywgc2hpcHBpbmdfYWRkcmVzc19pZD8sIHNoaXBwaW5nX2FkZHJlc3NfbmFtZT8sIGFjdGlvbj8pID0+IHtcclxuICAgICAgICBpZiAoIXRoaXMuYXV0aFNlcnZpY2UuaXNBYmxlVG9CdXkoKSkge1xyXG4gICAgICAgICAgICB0aGlzLnRvYXN0clNlcnZpY2Uuc2hvdygnbXVzdC1zZWxlY3QtY3VzdG9tZXInKVxyXG4gICAgICAgICAgICByZXR1cm5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGxldCBhZGRlZCA9ICcnO1xyXG4gICAgICAgICFhZGRlZCAmJiB0aGlzLmNvbm5lY3Rpb24ucG9zdCh0aGlzLmFkZEl0ZW1BcGkoKSwgeyBwcm9kdWN0Q29kZTogcHJvZHVjdC5pZCwgcXVhbnRpdHk6IHF1YW50aXR5LCB2YXJpYW50Q29kZTogdmFyaWFudF9pZCwgaWQ6IGlkIHx8ICcnLCBvcmRlcl9pdGVtX2lkOiBvcmRlcl9pdGVtX2lkIHx8ICcnLCBsb3RfcXVhbnRpdHk6IGxvdF9xdWFudGl0eSB8fCAnJywgdW5pdF9wcmljZTogdW5pdF9wcmljZSB8fCAnJywgdW5pdF90b3RhbDogdW5pdF90b3RhbCB8fCAnJywgYWp1c3RlbWVudF90b3RhbDogYWp1c3RlbWVudF90b3RhbCB8fCAnJywgdG90YWxfbG90OiB0b3RhbF9sb3QgfHwgJycsIGxvdF9zdGF0dXM6IGxvdF9zdGF0dXMgfHwgJycsIGRhdGVfcmVxdWVzdDogZGF0ZV9yZXF1ZXN0IHx8ICcnLCBub3Rlczogbm90ZXMgfHwgJycsIHNoaXBwaW5nX2FkZHJlc3NfaWQ6IHNoaXBwaW5nX2FkZHJlc3NfaWQgfHwgJycsIHNoaXBwaW5nX2FkZHJlc3NfbmFtZTogc2hpcHBpbmdfYWRkcmVzc19uYW1lIHx8ICcnLCBhY3Rpb246IGFjdGlvbiB8fCAnbmV3bG90JyB9KVxyXG4gICAgICAgICAgICAuc3Vic2NyaWJlKFxyXG4gICAgICAgICAgICAgICAgcmVzID0+IHRoaXMuYXBwZW5kVG9DYXJ0KHJlcyksXHJcbiAgICAgICAgICAgICAgICBlcnIgPT4gdGhpcy5oYW5kbGVFcnJvcihlcnIpXHJcbiAgICAgICAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgYWRkVG9DYXJ0UHJvbWlzZSA9IGFzeW5jIChwcm9kdWN0OiBQcm9kdWN0LCBxdWFudGl0eTogbnVtYmVyLCB2YXJpYW50X2lkKSA9PiB7XHJcbiAgICAgICAgaWYgKCF0aGlzLmF1dGhTZXJ2aWNlLmlzQWJsZVRvQnV5KCkpIHtcclxuICAgICAgICAgICAgdGhpcy50b2FzdHJTZXJ2aWNlLnNob3coJ211c3Qtc2VsZWN0LWN1c3RvbWVyJylcclxuICAgICAgICAgICAgcmV0dXJuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnJlcXVlc3RJblByb2Nlc3MubmV4dCh0cnVlKTtcclxuICAgICAgICBsZXQgYWRkZWQgPSB0aGlzLmFkZElmQWxscmVhZHlFeGlzdHMocHJvZHVjdCwgdmFyaWFudF9pZCwgcXVhbnRpdHkpO1xyXG4gICAgICAgIGlmICghYWRkZWQpIHtcclxuICAgICAgICAgICAgbGV0IHJlc3VsdCA9IGF3YWl0ICh0aGlzLmNvbm5lY3Rpb24ucG9zdCh0aGlzLmFkZEl0ZW1BcGkoKSwgeyBwcm9kdWN0Q29kZTogcHJvZHVjdC5pZCwgcXVhbnRpdHk6IHF1YW50aXR5LCB2YXJpYW50Q29kZTogdmFyaWFudF9pZCB9KS50b1Byb21pc2UoKSk7XHJcbiAgICAgICAgICAgIGlmICghcmVzdWx0IHx8IHJlc3VsdC5lcnJvcikgdGhpcy5oYW5kbGVFcnJvcihyZXN1bHQuZXJyb3IpO1xyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuYXBwZW5kVG9DYXJ0KHJlc3VsdCk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4geyBlcnJvcjogZmFsc2UgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB7IGVycm9yOiB0cnVlIH1cclxuICAgIH1cclxuXHJcblxyXG4gICAgYWRkQWxsVG9DYXJ0ID0gKGl0ZW1zOiBhbnlbXSkgPT4ge1xyXG4gICAgICAgIGlmICghdGhpcy5hdXRoU2VydmljZS5pc0FibGVUb0J1eSgpKSB7XHJcbiAgICAgICAgICAgIHRoaXMudG9hc3RyU2VydmljZS5zaG93KCdtdXN0LXNlbGVjdC1jdXN0b21lcicpXHJcbiAgICAgICAgICAgIHJldHVyblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5yZXF1ZXN0SW5Qcm9jZXNzLm5leHQodHJ1ZSk7XHJcblxyXG4gICAgICAgIGNvbnN0IHBhcmFtcyA9IHsgaXRlbXM6IHRoaXMubWVyZ2VJdGVtc0FkZEFsbFRvQ2FydChpdGVtcykgfTtcclxuXHJcbiAgICAgICAgdGhpcy5jb25uZWN0aW9uLnBvc3QodGhpcy5hZGRBbGxJdGVtc0FwaSgpLCBwYXJhbXMpXHJcbiAgICAgICAgICAgIC50b1Byb21pc2UoKS50aGVuKFxyXG4gICAgICAgICAgICAgICAgcmVzID0+IHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZUNhcnRPYmoocmVzLmNhcnQpICYmIHRoaXMudXBkYXRlQ2FydEl0ZW1zKHRoaXMudHJhbnNmb3JtSXRlbXMocmVzLmNhcnQuaXRlbXMpKTtcclxuICAgICAgICAgICAgICAgICAgICByZXMuY2FydF9yZXNwb25zZS5zdGF0dXMgPT0gJ3N1Y2Nlc3MnICYmIHRoaXMudG9hc3RyU2VydmljZS5zaG93KCdwcm9kdWN0cy1hZGRlZCcpO1xyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIGVyciA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5oYW5kbGVFcnJvcihlcnIpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICApLmNhdGNoKGVyciA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmhhbmRsZUVycm9yKGVycik7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGFkZFJlcGVhdE9yZGVyVG9DYXJ0KGl0ZW1zOiBhbnlbXSk6IHZvaWQge1xyXG4gICAgICAgIGlmICh0aGlzLmNhcnRJdGVtc1N1YmplY3QudmFsdWUubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICB0aGlzLnRvYXN0clNlcnZpY2Uuc2hvdygnY2FydC1ub3QtZW1wdHknKTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKCF0aGlzLmF1dGhTZXJ2aWNlLmlzQWJsZVRvQnV5KCkpIHtcclxuICAgICAgICAgICAgdGhpcy50b2FzdHJTZXJ2aWNlLnNob3coJ211c3Qtc2VsZWN0LWN1c3RvbWVyJylcclxuICAgICAgICAgICAgcmV0dXJuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb25zdCBpdGVtc1RvQWRkID0gaXRlbXMubWFwKGl0ZW0gPT4gKHtcclxuICAgICAgICAgICAgcHJvZHVjdENvZGU6IGl0ZW0ucHJvZHVjdC5pZCxcclxuICAgICAgICAgICAgcXVhbnRpdHk6IGl0ZW0ucXVhbnRpdHksXHJcbiAgICAgICAgICAgIHZhcmlhbnRDb2RlOiBpdGVtLnByb2R1Y3QudmFyaWFudHNbMF0uY29kZVxyXG4gICAgICAgIH0pKTtcclxuXHJcbiAgICAgICAgaWYgKGl0ZW1zVG9BZGQubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgICAgICAgIHRoaXMudG9hc3RyU2VydmljZS5zaG93KCduby1wcm9kdWN0cy10by1hZGQnKTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29uc3QgcGFyYW1zID0ge1xyXG4gICAgICAgICAgICBpdGVtczogaXRlbXNUb0FkZFxyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIHRoaXMucmVxdWVzdEluUHJvY2Vzcy5uZXh0KHRydWUpO1xyXG5cclxuICAgICAgICB0aGlzLmNvbm5lY3Rpb24ucG9zdCh0aGlzLmFkZEFsbEl0ZW1zQXBpKCksIHBhcmFtcylcclxuICAgICAgICAgICAgLnRvUHJvbWlzZSgpXHJcbiAgICAgICAgICAgIC50aGVuKHJlcyA9PiB7XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKHJlcz8uc3RhdHVzID09PSAnZmFpbHVyZScpIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBlcnJvck1lc3NhZ2UgPSByZXMuZXJyb3I/LnRvTG93ZXJDYXNlKCkucmVwbGFjZSgvXFxzKy9nLCAnXycpIHx8ICd1bmtub3duX2Vycm9yJztcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnRvYXN0clNlcnZpY2Uuc2hvdyhlcnJvck1lc3NhZ2UpO1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICBjb25zdCBpdGVtc1Jlc3BvbnNlID0gcmVzPy5pdGVtc19yZXNwb25zZSB8fCBbXTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGNhcnRJdGVtcyA9IHJlcz8uY2FydD8uaXRlbXMgfHwgW107XHJcblxyXG4gICAgICAgICAgICAgICAgY29uc3Qgb3V0T2ZTdG9ja0l0ZW1zID0gaXRlbXNSZXNwb25zZS5maWx0ZXIoaXRlbSA9PlxyXG4gICAgICAgICAgICAgICAgICAgIGl0ZW0uc3RhdHVzID09PSAnZmFpbHVyZScgJiZcclxuICAgICAgICAgICAgICAgICAgICBpdGVtLmVycm9ycy5zb21lKGVycm9yID0+IGVycm9yLmNvZGUgPT09ICdvdXRfb2Zfc3RvY2snKVxyXG4gICAgICAgICAgICAgICAgKTtcclxuXHJcbiAgICAgICAgICAgICAgICBpZiAoY2FydEl0ZW1zLmxlbmd0aCA9PT0gMCAmJiBvdXRPZlN0b2NrSXRlbXMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMudG9hc3RyU2VydmljZS5zaG93KCdhbGwtcHJvZHVjdHMtb3V0LW9mLXN0b2NrJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIGlmIChvdXRPZlN0b2NrSXRlbXMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMudG9hc3RyU2VydmljZS5zaG93KCdzb21lLXByb2R1Y3RzLW91dC1vZi1zdG9jaycpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIGlmIChjYXJ0SXRlbXMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlQ2FydE9iaihyZXMuY2FydCk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy51cGRhdGVDYXJ0SXRlbXModGhpcy50cmFuc2Zvcm1JdGVtcyhjYXJ0SXRlbXMpKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnRvYXN0clNlcnZpY2Uuc2hvdygncHJvZHVjdHMtYWRkZWQnKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbJy9jYXJ0J10pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgZXJyID0+IHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmhhbmRsZUVycm9yKGVycik7XHJcbiAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAuY2F0Y2goZXJyID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMuaGFuZGxlRXJyb3IoZXJyKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgbWVyZ2VJdGVtc0FkZEFsbFRvQ2FydCA9IChpdGVtczogYW55W10pID0+IHtcclxuICAgICAgICBsZXQgcGFyYW1zTWVyZ2UgPSBbXVxyXG4gICAgICAgIHRoaXMuaXRlbXMuZm9yRWFjaChpdGVtID0+IHtcclxuICAgICAgICAgICAgbGV0IGl0ZW1JbnRlcm5vID0gaXRlbXMuZmluZChpdGVtUGFyYW0gPT4gaXRlbVBhcmFtLnZhcmlhbnRDb2RlID09IGl0ZW0udmFyaWFudF9pZClcclxuICAgICAgICAgICAgcGFyYW1zTWVyZ2UucHVzaChcclxuICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICBwcm9kdWN0Q29kZTogaXRlbS5wcm9kdWN0LmlkLFxyXG4gICAgICAgICAgICAgICAgICAgIHZhcmlhbnRDb2RlOiBpdGVtLnZhcmlhbnRfaWQsXHJcbiAgICAgICAgICAgICAgICAgICAgcXVhbnRpdHk6IGl0ZW1JbnRlcm5vICYmIGl0ZW1JbnRlcm5vLnF1YW50aXR5IHx8IGl0ZW0ucXVhbnRpdHlcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgKVxyXG4gICAgICAgIH0pXHJcblxyXG4gICAgICAgIGl0ZW1zID0gaXRlbXMuZmlsdGVyKGl0ZW1QYXJhbSA9PiAhdGhpcy5pdGVtcy5maW5kKGl0ZW0gPT4gaXRlbVBhcmFtLnZhcmlhbnRDb2RlID09IGl0ZW0udmFyaWFudF9pZCkpXHJcblxyXG4gICAgICAgIHJldHVybiBbLi4uaXRlbXMsIC4uLnBhcmFtc01lcmdlXVxyXG4gICAgfVxyXG5cclxuICAgIHVwZGF0ZUl0ZW1RdWFudGl0eSA9IChpdGVtOiBDYXJ0SXRlbSwgcXVhbnRpdHkpID0+IHtcclxuICAgICAgICBpZiAodGhpcy52YWxpZGF0ZVF1YW50aXR5KGl0ZW0sIHF1YW50aXR5KSAmJiAodGhpcy52YWxpZGF0ZVByaWNlQW5kQ3JlZGl0cyhpdGVtLCBxdWFudGl0eSkpKSB7XHJcbiAgICAgICAgICAgIHRoaXMuY29ubmVjdGlvbi5wdXQodGhpcy51cGRhdGVJdGVtUXVhbnRpdHlBcGkodGhpcy5maW5kSXRlbUJ5SWRWYXJpYW50KGl0ZW0udmFyaWFudF9pZCkpLCB7ICdxdWFudGl0eSc6IE51bWJlcihxdWFudGl0eSkgfSkuc3Vic2NyaWJlKFxyXG4gICAgICAgICAgICAgICAgcmVzID0+IHRoaXMudXBkYXRlQ2FydE9iaihyZXMpICYmIHRoaXMudXBkYXRlQ2FydEl0ZW1RdWFudGl0eShpdGVtLnZhcmlhbnRfaWQsIE51bWJlcihxdWFudGl0eSkpLFxyXG4gICAgICAgICAgICAgICAgZXJyID0+IHRoaXMuaGFuZGxlRXJyb3IoZXJyKVxyXG4gICAgICAgICAgICApXHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuXHJcbiAgICB2YWxpZGF0ZVF1YW50aXR5ID0gKGl0ZW06IENhcnRJdGVtLCBxdWFudGl0eSkgPT4ge1xyXG4gICAgICAgIGlmICgodGhpcy5nZXRDb3VudEZyb21JdGVtSW5DYXJ0KGl0ZW0ucHJvZHVjdENvZGUpICsgcXVhbnRpdHkpID4gaXRlbS5wcm9kdWN0LnZhcmlhbnRzWzBdLm1heGltdW1JdGVtc1F1YW50aXR5KSB7XHJcbiAgICAgICAgICAgIHRoaXMudG9hc3RyU2VydmljZS5zaG93KCdtYXhpbXVtLWl0ZW1zLXF1YW50aXR5JywgeyBxdWFudGl0eTogaXRlbS5wcm9kdWN0LnZhcmlhbnRzWzBdLm1heGltdW1JdGVtc1F1YW50aXR5IH0pXHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZVxyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoKHRoaXMuZ2V0Q291bnRGcm9tSXRlbUluQ2FydChpdGVtLnByb2R1Y3RDb2RlKSArIHF1YW50aXR5KSA8IGl0ZW0ucHJvZHVjdC52YXJpYW50c1swXS5taW5pbXVtSXRlbXNRdWFudGl0eSkge1xyXG4gICAgICAgICAgICB0aGlzLnRvYXN0clNlcnZpY2Uuc2hvdygnbWluaW11bS1pdGVtcy1xdWFudGl0eScsIHsgcXVhbnRpdHk6IGl0ZW0ucHJvZHVjdC52YXJpYW50c1swXS5taW5pbXVtSXRlbXNRdWFudGl0eSB9KVxyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2VcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRydWVcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIHZhbGlkYXRlUHJpY2VBbmRDcmVkaXRzID0gKGl0ZW06IENhcnRJdGVtLCBxdWFudGl0eTogbnVtYmVyKTogYm9vbGVhbiA9PiB7XHJcbiAgICAgICAgY29uc3QgYmFsYW5jZSA9IHRoaXMuYmFsYW5jZUN1c3RvbWVyU3ViamVjdC52YWx1ZTtcclxuXHJcbiAgICAgICAgaWYgKCFiYWxhbmNlIHx8IGJhbGFuY2UuY3JlZGl0QW1vdW50ID09PSBudWxsIHx8IGJhbGFuY2UuY3JlZGl0QW1vdW50ID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoYmFsYW5jZS5yZW1haW5pbmdDcmVkaXRzID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29uc3QgdW5pdFByaWNlID0gaXRlbS50b3RhbCAvIGl0ZW0ucXVhbnRpdHk7XHJcbiAgICAgICAgY29uc3QgYWRkaXRpb25hbFF1YW50aXR5ID0gcXVhbnRpdHkgLSBpdGVtLnF1YW50aXR5O1xyXG5cclxuICAgICAgICBpZiAoYWRkaXRpb25hbFF1YW50aXR5IDw9IDApIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb25zdCBhZGRpdGlvbmFsQ29zdCA9IHVuaXRQcmljZSAqIGFkZGl0aW9uYWxRdWFudGl0eTtcclxuXHJcbiAgICAgICAgaWYgKGFkZGl0aW9uYWxDb3N0ID4gYmFsYW5jZS5yZW1haW5pbmdDcmVkaXRzKSB7XHJcbiAgICAgICAgICAgIHRoaXMudG9hc3RyU2VydmljZS5zaG93KCdub3QtZW5vdWdoLWNyZWRpdHMnKTtcclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9O1xyXG5cclxuICAgIHB1YmxpYyBoYXNTdWZmaWNpZW50Q3JlZGl0c0ZvckNhcnRUb3RhbCA9ICgpOiBib29sZWFuID0+IHtcclxuICAgICAgICBjb25zdCBiYWxhbmNlID0gdGhpcy5iYWxhbmNlQ3VzdG9tZXJTdWJqZWN0LnZhbHVlO1xyXG5cclxuICAgICAgICBpZiAoIWJhbGFuY2UgfHwgYmFsYW5jZS5jcmVkaXRBbW91bnQgPT09IG51bGwgfHwgYmFsYW5jZS5jcmVkaXRBbW91bnQgPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChiYWxhbmNlLnJlbWFpbmluZ0NyZWRpdHMgPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAodGhpcy5jYXJ0U3ViamVjdC52YWx1ZS50b3RhbHMudG90YWwgPiBiYWxhbmNlLmNyZWRpdEFtb3VudCkge1xyXG4gICAgICAgICAgICB0aGlzLnRvYXN0clNlcnZpY2Uuc2hvdygnbm90LWVub3VnaC1jcmVkaXRzJyk7XHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfTtcclxuXHJcbiAgICBjYWxjdWxhdGVTdG9ja0NvdW50cyA9IChpdGVtOiBDYXJ0SXRlbSwgcXVhbnRpdHkpID0+IHtcclxuICAgICAgICBpZiAoaXRlbS5wcm9kdWN0LnN0b2NrIDwgaXRlbS5xdWFudGl0eSArIHF1YW50aXR5KSB7XHJcbiAgICAgICAgICAgIC8vIHRoaXMudG9hc3RyU2VydmljZS5zaG93KCdvdXQtb2Ytc3RvY2snKTtcclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0cnVlXHJcbiAgICB9XHJcblxyXG4gICAgZGVsZXRlQ2FydEl0ZW0gPSAoaXRlbSwgdG9hc3QgPSB0cnVlKSA9PiB7XHJcbiAgICAgICAgbGV0IGlkX2J1c2NhZG8gPSB0aGlzLmZpbmRJdGVtQnlJZFZhcmlhbnQoaXRlbS52YXJpYW50X2lkKVxyXG4gICAgICAgIHRoaXMucmVxdWVzdEluUHJvY2Vzcy5uZXh0KHRydWUpO1xyXG4gICAgICAgIC8vICAgIHRoaXMuY29ubmVjdGlvbi5wb3N0KHRoaXMuYWRkSXRlbUFwaSgpLCB7IHByb2R1Y3RDb2RlOiBpdGVtLnByb2R1Y3QuaWQsIHF1YW50aXR5OiAwLCB2YXJpYW50Q29kZTogaXRlbS52YXJpYW50X2lkLCBpZDogJycsIG9yZGVyX2l0ZW1faWQ6IGl0ZW0uaXRlbV9pZCwgbG90X3F1YW50aXR5OiAnJywgdW5pdF9wcmljZTogJycsIHVuaXRfdG90YWw6ICcnLCBhanVzdGVtZW50X3RvdGFsOiAnJywgdG90YWxfbG90OiAnJywgbG90X3N0YXR1czogJycsIGRhdGVfcmVxdWVzdDogJycsIG5vdGVzOiAgJycsIHNoaXBwaW5nX2FkZHJlc3NfaWQ6ICcnLCBzaGlwcGluZ19hZGRyZXNzX25hbWU6ICcnLCBhY3Rpb246ICAnZGVsZXRlb3JkZXJpdGVtJ30pXHJcbiAgICAgICAgLy8gICAgICAgIC5zdWJzY3JpYmUoXHJcbiAgICAgICAgLy8gICAgICAgICAgICByZXMgPT4gdGhpcy5yZW1vdmVDYXJ0SXRlbShyZXMsIGl0ZW0sIHRvYXN0KSxcclxuICAgICAgICAvLyAgICAgICAgICAgIGVyciA9PiB0aGlzLmhhbmRsZUVycm9yKGVycilcclxuICAgICAgICAvLyAgICAgICAgKTtcclxuICAgICAgICB0aGlzLmNvbm5lY3Rpb24uZGVsZXRlKHRoaXMuZGVsZXRlSXRlbUFwaShpZF9idXNjYWRvKSkuc3Vic2NyaWJlKFxyXG4gICAgICAgICAgICByZXMgPT4geyB0aGlzLnJlbW92ZUNhcnRJdGVtKHJlcywgaXRlbSwgdG9hc3QpOyB0aGlzLnJlcXVlc3RJblByb2Nlc3MubmV4dChmYWxzZSk7IH0sXHJcbiAgICAgICAgICAgIGVyciA9PiB7IHRoaXMuaGFuZGxlRXJyb3IoZXJyKTsgdGhpcy5yZXF1ZXN0SW5Qcm9jZXNzLm5leHQoZmFsc2UpOyB9LFxyXG4gICAgICAgIClcclxuICAgIH1cclxuXHJcbiAgICBjbGVhckNhcnQoKSB7XHJcbiAgICAgICAgLy9zb2x1Y2lvbiBwcm92aXNhb3JpYVxyXG4gICAgICAgIGxldCBpdGVtcyA9IFsuLi50aGlzLml0ZW1zXVxyXG4gICAgICAgIHdoaWxlIChpdGVtcyAmJiBpdGVtcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZGVsZXRlQ2FydEl0ZW0oaXRlbXMucG9wKCksIGZhbHNlKVxyXG4gICAgICAgIH1cclxuICAgICAgICAvL3RoaXMucmVzZXRDYXJ0KHRoaXMuZ2V0Q2FydCk7XHJcbiAgICB9XHJcblxyXG4gICAgY2xlYXJBbmRSZXNldENhcnQoKSB7XHJcbiAgICAgICAgdGhpcy5yZXNldENhcnQodGhpcy5nZXRDYXJ0KTtcclxuICAgIH1cclxuXHJcbiAgICBjbGVhckFuZFJlc2V0Q3VzdG9tZXJDYXJ0KCkge1xyXG4gICAgICAgIGNvbnNvbGUubG9nKFwiQ2xlYXJpbmcgYW5kIHJlc2V0aW5nLi4uXCIpXHJcbiAgICAgICAgdGhpcy5yZXNldENhcnQodGhpcy5nZXRDYXJ0QnlDdXN0b21lcilcclxuICAgIH1cclxuXHJcbiAgICBoYW5kbGVFcnJvciA9IChlcnJvcjogeyBlcnJvcjogc3RyaW5nIH0pID0+IHtcclxuICAgICAgICB0aGlzLnRvYXN0clNlcnZpY2Uuc2hvdygnb3BlcmF0aW9uLWVycm9yLXBhcmFtJyk7XHJcbiAgICAgICAgdGhpcy5yZXF1ZXN0SW5Qcm9jZXNzLm5leHQoZmFsc2UpO1xyXG4gICAgfVxyXG5cclxuICAgIGdldENvdW50RnJvbUl0ZW1JbkNhcnQgPSAoY29kZVZhcmlhbnQpOiBudW1iZXIgPT4gdGhpcy5pdGVtcy5maW5kKGl0ZW0gPT4gaXRlbS52YXJpYW50X2lkID09IGNvZGVWYXJpYW50KT8ucXVhbnRpdHkgfHwgMDtcclxuXHJcbiAgICBmaW5kSXRlbUJ5SWRWYXJpYW50ID0gKHZhcmlhbnRfaWQpID0+IHRoaXMuaXRlbXMuZmluZChpdGVtID0+IGl0ZW0udmFyaWFudF9pZCA9PSB2YXJpYW50X2lkKS5pdGVtX2lkXHJcblxyXG4gICAgZmluZEl0ZW0gPSAocHJvZHVjdF9pZCkgPT4gdGhpcy5pdGVtcy5maW5kKGl0ZW0gPT4gaXRlbS5wcm9kdWN0LmlkID09IHByb2R1Y3RfaWQpO1xyXG5cclxuICAgIC8qKiBEQVRBIEZPUiBPVEhFUiBTRVJWSUNFUyAqL1xyXG4gICAgZ2V0Q2FydFRva2VuID0gKCkgPT4gdGhpcy5jYXJ0X3Rva2VuO1xyXG5cclxuICAgIGdldExvY2FsZSA9ICgpID0+IHRoaXMubG9jYWxlO1xyXG5cclxuICAgIGdldFRvdGFsQW1vdW50ID0gKCk6IE9ic2VydmFibGU8bnVtYmVyPiA9PlxyXG4gICAgICAgIHRoaXMuY2FydC5waXBlKG1hcCgoY2FydCkgPT4gY2FydD8udG90YWxzPy50b3RhbCkpO1xyXG5cclxuICAgIGdldENvdW50Q2FydEl0ZW1zID0gKCk6IE9ic2VydmFibGU8bnVtYmVyPiA9PlxyXG4gICAgICAgIHRoaXMuY2FydEl0ZW1zLnBpcGUobWFwKChjYXJ0SXRlbXMpID0+IGNhcnRJdGVtcz8ubGVuZ3RoKSk7XHJcblxyXG4gICAgZ2V0VGF4ZXNBbW91bnQgPSAoKTogT2JzZXJ2YWJsZTxudW1iZXI+ID0+XHJcbiAgICAgICAgdGhpcy5jYXJ0LnBpcGUobWFwKChjYXJ0KSA9PiBjYXJ0Py50b3RhbHM/LnRheGVzID4gMCA/IGNhcnQ/LnRvdGFscz8udGF4ZXMgOiAwKSk7XHJcblxyXG4gICAgZ2V0U3ViVG90YWxBbW91bnQgPSAoKTogT2JzZXJ2YWJsZTxudW1iZXI+ID0+XHJcbiAgICAgICAgdGhpcy5jYXJ0LnBpcGUobWFwKChjYXJ0KSA9PiBjYXJ0Py50b3RhbHM/LnN1YnRvdGFsKSk7XHJcblxyXG4gICAgdG9EZWNpbWFsID0gKHRvdGFsKSA9PiAodG90YWwgLSBNYXRoLmZsb29yKHRvdGFsKSA9PSAwKSA/IHRvdGFsIC8gMTAwIDogdG90YWxcclxuXHJcbiAgICBnZXREaXNjb3VudCgpOiBPYnNlcnZhYmxlPG51bWJlcj4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmNhcnRJdGVtcy5waXBlKG1hcCgocHJvZHVjdCkgPT4ge1xyXG4gICAgICAgICAgICBsZXQgdG90YWwgPSB0aGlzLml0ZW1zLnJlZHVjZSgocHJldiwgY3VycikgPT4ge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHByZXYgKyBjdXJyLnByb2R1Y3Quc2FsZXByaWNlICogY3Vyci5xdWFudGl0eTtcclxuICAgICAgICAgICAgfSwgMCk7XHJcbiAgICAgICAgICAgIGxldCBzdWJ0b3RhbCA9IHRoaXMuaXRlbXMucmVkdWNlKChwcmV2LCBjdXJyKSA9PiB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gcHJldiArIGN1cnIucHJvZHVjdC5wcmljZSAqIGN1cnIucXVhbnRpdHk7XHJcbiAgICAgICAgICAgIH0sIDApO1xyXG4gICAgICAgICAgICByZXR1cm4gc3VidG90YWwgLSB0b3RhbDtcclxuICAgICAgICB9KSk7XHJcbiAgICB9XHJcblxyXG4gICAgYWRkQ291cG9uID0gYXN5bmMgKGNvZGUpOiBQcm9taXNlPGFueT4gPT4ge1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIGxldCByZXN1bHQgPSBhd2FpdCB0aGlzLmNvbm5lY3Rpb24ucHV0KHRoaXMuY291cG9uQXBpKCksIHsgY291cG9uOiBjb2RlIH0pLnRvUHJvbWlzZSgpO1xyXG4gICAgICAgICAgICBpZiAocmVzdWx0LmVycm9yIHx8IHJlc3VsdC5lcnJvcnMpIHJldHVybiB7IGVycm9yOiB0cnVlLCBtZXNzYWdlOiAnaW52YWxpZC1jb3Vwb24nIH07XHJcbiAgICAgICAgICAgIHRoaXMudXBkYXRlQ2FydE9iaihyZXN1bHQsIGZhbHNlKTtcclxuICAgICAgICAgICAgcmV0dXJuIHsgZXJyb3I6IGZhbHNlLCBtZXNzYWdlOiAnb2snIH07XHJcbiAgICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICByZXR1cm4geyBlcnJvcjogdHJ1ZSwgbWVzc2FnZTogJ2ludmFsaWQtY291cG9uJyB9O1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICByZW1vdmVDb3Vwb24gPSBhc3luYyAoKSA9PiB0aGlzLmNvbm5lY3Rpb24uZGVsZXRlKHRoaXMuY291cG9uQXBpKCkpLnBpcGUobWFwKHJlcyA9PiB0aGlzLnVwZGF0ZUNhcnRPYmoocmVzLCBmYWxzZSkpKS50b1Byb21pc2UoKTtcclxuXHJcbiAgICBmb3JtYXRDb3Vwb24gPSAoY2FydCkgPT4ge1xyXG4gICAgICAgIGxldCBjdXJyZW50X2NvdXBvbiA9IHRoaXMuY291cG9uU3ViamVjdC52YWx1ZTtcclxuICAgICAgICBsZXQgY291cG9uOiBDb3Vwb25JID0geyBjb2RlOiBjYXJ0LmNvdXBvbkNvZGUgfTtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICBjb25zdCBrZXkgPSBPYmplY3Qua2V5cyhjYXJ0LmNhcnREaXNjb3VudHMpWzBdO1xyXG4gICAgICAgICAgICBjb3Vwb24gPSB7XHJcbiAgICAgICAgICAgICAgICAuLi5jb3Vwb24sXHJcbiAgICAgICAgICAgICAgICBhbW91bnQ6IChjYXJ0LmNhcnREaXNjb3VudHMgJiYgY2FydC5jYXJ0RGlzY291bnRzW2tleV0uYW1vdW50LmN1cnJlbnQpIHx8IDAsXHJcbiAgICAgICAgICAgICAgICBuYW1lOiAoY2FydC5jYXJ0RGlzY291bnRzICYmIGNhcnQuY2FydERpc2NvdW50c1trZXldLm5hbWUpIHx8ICduby1uYW1lJ1xyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgIH0gY2F0Y2ggKGUpIHsgfVxyXG4gICAgICAgIChjb3Vwb24gIT0gY3VycmVudF9jb3Vwb24pICYmIHRoaXMuY291cG9uU3ViamVjdC5uZXh0KGNvdXBvbik7XHJcbiAgICB9XHJcblxyXG4gICAgY2hhbmdlSGF2ZVRvVXBkYXRlID0gKHZhbHVlKSA9PiB0aGlzLmhhdmVfdG9fdXBkYXRlID0gdmFsdWU7XHJcblxyXG4gICAgcmVhZHlGb3JDaGVja291dCA9IChzdWNjZXNzQ2FsbGJhY2s/OiBGdW5jdGlvbiwgZXJyb3JDYWxsYmFjaz86IEZ1bmN0aW9uKTogQ2FydEFmZm9yZGFibGUgPT4ge1xyXG4gICAgICAgIGxldCBjYXJ0ID0gdGhpcy5jYXJ0U3ViamVjdC52YWx1ZTtcclxuICAgICAgICBsZXQgaXRlbXMgPSB0aGlzLmNhcnRJdGVtc1N1YmplY3QudmFsdWU7XHJcbiAgICAgICAgbGV0IHJlc3VsdDogQ2FydEFmZm9yZGFibGUgPSB7IG9rOiB0cnVlIH07XHJcbiAgICAgICAgaWYgKGl0ZW1zLmxlbmd0aCA8IHRoaXMuY2hhbm5lbENvbmZpZy5taW5pbXVtUXVhbnRpdHlQdXJjaGFzZUl0ZW1zKSB7XHJcbiAgICAgICAgICAgIHJlc3VsdC5vayA9IGZhbHNlOyByZXN1bHQucmVhc29ucy5wdXNoKHsgbWVzc2FnZTogJ25vdC1lbm91Z2h0LWl0ZW1zJyB9KVxyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoY2FydC50b3RhbHMudG90YWwgPCB0aGlzLmNoYW5uZWxDb25maWcubWluaW11bVB1cmNoYXNlQW1vdW50KSB7XHJcbiAgICAgICAgICAgIHJlc3VsdC5vayA9IGZhbHNlOyByZXN1bHQucmVhc29ucy5wdXNoKHsgbWVzc2FnZTogJ25vdC1lbm91Z2h0LWFtb3VudCcgfSlcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHN1Y2Nlc3NDYWxsYmFjayB8fCBlcnJvckNhbGxiYWNrKSB7XHJcbiAgICAgICAgICAgIHJlc3VsdC5va1xyXG4gICAgICAgICAgICAgICAgPyBzdWNjZXNzQ2FsbGJhY2sgJiYgc3VjY2Vzc0NhbGxiYWNrKClcclxuICAgICAgICAgICAgICAgIDogZXJyb3JDYWxsYmFjayAmJiBlcnJvckNhbGxiYWNrKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICB9XHJcblxyXG4gICAgdXBkYXRlSXRlbXNPbkVycm9yID0gKGl0ZW1zV2l0aEVycm9yOiBhbnlbXSwgY29kZTogc3RyaW5nKSA9PiB7XHJcbiAgICAgICAgLy8gY29uc29sZS5sb2coaXRlbXNXaXRoRXJyb3IpO1xyXG4gICAgICAgIC8vIGNvbnNvbGUubG9nKHRoaXMuaXRlbXMpO1xyXG4gICAgICAgIGxldCBpdGVtc1VwZGF0ZWQgPSB0aGlzLml0ZW1zLm1hcChpdGVtID0+IHtcclxuICAgICAgICAgICAgbGV0IGl0ZW1XaXRoRXJyb3IgPSBpdGVtc1dpdGhFcnJvci5maW5kKGZhaWxlZEl0ZW0gPT4gaXRlbS5pdGVtX2lkID09IGZhaWxlZEl0ZW0uaWQpO1xyXG4gICAgICAgICAgICBpZiAoaXRlbVdpdGhFcnJvcikge1xyXG4gICAgICAgICAgICAgICAgaXRlbS5mYWlsZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgaXRlbS5lcnJvciA9IGNvZGU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIGl0ZW07XHJcbiAgICAgICAgfSlcclxuICAgICAgICAvLyBjb25zb2xlLmxvZyhpdGVtc1VwZGF0ZWQpO1xyXG4gICAgICAgIHRoaXMudXBkYXRlQ2FydEl0ZW1zKGl0ZW1zVXBkYXRlZCk7XHJcbiAgICB9XHJcblxyXG4gICAgbG9hZENhcnRCeVRva2VuID0gYXN5bmMgKHRva2VuOiBzdHJpbmcpID0+IHtcclxuICAgICAgICB0aGlzLmNhcnRfdG9rZW4gPSB0b2tlblxyXG4gICAgICAgIGxldCByZXN1bHQgPSBhd2FpdCB0aGlzLmdldENhcnRCeVRva2VuKClcclxuICAgICAgICByZXR1cm4gcmVzdWx0XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiAgVVRJTFNcclxuICAgICAqL1xyXG5cclxuICAgIHRyYW5zZm9ybUl0ZW1zID0gKHNlcnZlcl9pdGVtKSA9PiBzZXJ2ZXJfaXRlbS5tYXAoXHJcbiAgICAgICAgaXRlbSA9PiB7XHJcbiAgICAgICAgICAgIGl0ZW0gPSB7XHJcbiAgICAgICAgICAgICAgICBwcm9kdWN0OiBpdGVtLnByb2R1Y3QsXHJcbiAgICAgICAgICAgICAgICB2YXJpYW50X2lkOiBpdGVtLnByb2R1Y3QudmFyaWFudHNbMF0uY29kZSxcclxuICAgICAgICAgICAgICAgIGxvdDogaXRlbS5vcmRlckl0ZW1Mb3QsXHJcbiAgICAgICAgICAgICAgICBxdWFudGl0eTogaXRlbS5xdWFudGl0eSxcclxuICAgICAgICAgICAgICAgIGl0ZW1faWQ6IGl0ZW0uaWQsXHJcbiAgICAgICAgICAgICAgICB0b3RhbDogaXRlbS50b3RhbFxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKGl0ZW0ucHJvZHVjdC52YXJpYW50c1swXSk7XHJcbiAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKGl0ZW0ucHJvZHVjdC52YXJpYW50c1swXS5zYWxlcHJpY2UpO1xyXG4gICAgICAgICAgICAvLyBjb25zb2xlLmxvZyhpdGVtLnByb2R1Y3QudmFyaWFudHNbMF0ucHJpY2UpO1xyXG4gICAgICAgICAgICAvLyBjb25zb2xlLmxvZyhpdGVtLnByb2R1Y3QudmFyaWFudHNbMF0uc2FsZXByaWNlID4gMCA/IGl0ZW0ucHJvZHVjdC52YXJpYW50c1swXS5zZWxlcHJpY2UgOiBpdGVtLnByb2R1Y3QudmFyaWFudHNbMF0ucHJpY2UpO1xyXG4gICAgICAgICAgICAvLyBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgLy8gICAgIGl0ZW0ucHJvZHVjdC5wcmljZSA9IGl0ZW0udG90YWwgLyBpdGVtLnF1YW50aXR5Ly8gPyBpdGVtLnByb2R1Y3QudmFyaWFudHNbMF0uc2VsZXByaWNlIDogaXRlbS5wcm9kdWN0LnZhcmlhbnRzWzBdLnByaWNlO1xyXG4gICAgICAgICAgICAvLyB9LCAxMDApO1xyXG4gICAgICAgICAgICByZXR1cm4gaXRlbTtcclxuICAgICAgICB9XHJcbiAgICApXHJcblxyXG5cclxuICAgIGdldENyZWRpdEFtb3VudCA9ICgpOiBPYnNlcnZhYmxlPG51bWJlciB8IG51bGw+ID0+XHJcbiAgICAgICAgdGhpcy5iYWxhbmNlQ3VzdG9tZXJTdWJqZWN0LnBpcGUoXHJcbiAgICAgICAgICAgIG1hcCgoYmFsYW5jZUN1c3RvbWVyKSA9PiBiYWxhbmNlQ3VzdG9tZXI/LmNyZWRpdEFtb3VudCA/PyBudWxsKVxyXG4gICAgICAgICk7XHJcbiAgICAgICAgXHJcbiAgICAgICAgZ2V0Q2xpZW50VGF4ZXMgPSAoKTogT2JzZXJ2YWJsZTxudW1iZXI+ID0+XHJcbiAgICAgICAgICAgIHRoaXMuY2FydC5waXBlKG1hcCgoY2FydCkgPT4gY2FydD8udG90YWxzPy50YXhlcyA+IDAgPyBjYXJ0Py50b3RhbHM/LmNsaWVudFRheGVzIDogMCkpO1xyXG5cclxuICAgIGdldFJlbWFpbmluZ0NyZWRpdHMgPSAoKTogT2JzZXJ2YWJsZTxudW1iZXI+ID0+XHJcbiAgICAgICAgdGhpcy5iYWxhbmNlQ3VzdG9tZXJTdWJqZWN0LnBpcGUobWFwKChiYWxhbmNlQ3VzdG9tZXIpID0+IGJhbGFuY2VDdXN0b21lcj8ucmVtYWluaW5nQ3JlZGl0cykpO1xyXG5cclxuICAgIHB1YmxpYyB1cGRhdGVCYWxhbmNlQXR0cmlidXRlcyhjYXJ0RGF0YTogYW55KSB7XHJcbiAgICAgICAgY29uc3QgYmFsYW5jZSA9IGNhcnREYXRhPy5iYWxhbmNlQ3VzdG9tZXI7XHJcblxyXG4gICAgICAgIGlmICghYmFsYW5jZSkge1xyXG4gICAgICAgICAgICB0aGlzLmJhbGFuY2VDdXN0b21lclN1YmplY3QubmV4dChudWxsKTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29uc3QgYmFsYW5jZURhdGEgPSB7XHJcbiAgICAgICAgICAgIGFsbG93QW55UGF5bWVudE1ldGhvZDogYmFsYW5jZS5hbGxvd0FueVBheW1lbnRNZXRob2QsXHJcbiAgICAgICAgICAgIGFsbG93RXhjZWVkQmFsYW5jZTogYmFsYW5jZS5hbGxvd0V4Y2VlZEJhbGFuY2UsXHJcbiAgICAgICAgICAgIGNyZWRpdEFtb3VudDogYmFsYW5jZS5jcmVkaXRBbW91bnQsXHJcbiAgICAgICAgICAgIHNob3dNYXg6IGJhbGFuY2Uuc2hvd01heCxcclxuICAgICAgICAgICAgc2hvd1ByaWNlOiBiYWxhbmNlLnNob3dQcmljZSxcclxuICAgICAgICAgICAgcmVtYWluaW5nQ3JlZGl0czogYmFsYW5jZS5jcmVkaXRBbW91bnQgJiYgY2FydERhdGE/LnRvdGFscz8udG90YWwgJiYgYmFsYW5jZS5jcmVkaXRBbW91bnQgPj0gY2FydERhdGEudG90YWxzLnRvdGFsXHJcbiAgICAgICAgICAgICAgICA/IGJhbGFuY2UuY3JlZGl0QW1vdW50IC0gY2FydERhdGEudG90YWxzLnRvdGFsXHJcbiAgICAgICAgICAgICAgICA6IDAsXHJcbiAgICAgICAgICAgIGFwcGx5TWF4T3JkZXJzOiBiYWxhbmNlLmFwcGx5TWF4T3JkZXJzLFxyXG4gICAgICAgICAgICBtYXhPcmRlcnM6IGJhbGFuY2UubWF4T3JkZXJzXHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgdGhpcy5iYWxhbmNlQ3VzdG9tZXJTdWJqZWN0Lm5leHQoYmFsYW5jZURhdGEpO1xyXG4gICAgfVxyXG5cclxufVxyXG4iXX0=
709
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FydC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6Im5nOi8vbmctZWFzeWNvbW1lcmNlLyIsInNvdXJjZXMiOlsibGliL3NlcnZpY2VzL2NhcnQuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUczQyxPQUFPLEVBQUUsZUFBZSxFQUFjLE1BQU0sTUFBTSxDQUFDO0FBQ25ELE9BQU8sRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNyQyxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUM5RCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDM0MsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzdDLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUV0RCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUdsRSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUNoRSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUNwRCxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0saUJBQWlCLENBQUM7Ozs7O0FBS3pDO0lBa0RJLHFCQUFvQixVQUE2QixFQUFVLGFBQTJCLEVBQVUsTUFBaUIsRUFDckcsV0FBd0IsRUFBVSxVQUErQixFQUFVLGdCQUFrQyxFQUM3RyxvQkFBMEMsRUFDMUMsTUFBYztRQUgxQixpQkFVQztRQVZtQixlQUFVLEdBQVYsVUFBVSxDQUFtQjtRQUFVLGtCQUFhLEdBQWIsYUFBYSxDQUFjO1FBQVUsV0FBTSxHQUFOLE1BQU0sQ0FBVztRQUNyRyxnQkFB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cG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgUHJvZHVjdCB9IGZyb20gJy4uL2ludGVyZmFjZXMvcHJvZHVjdCc7XHJcbmltcG9ydCB7IENhcnRJdGVtIH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9jYXJ0LWl0ZW0nO1xyXG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgbWFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xyXG5pbXBvcnQgeyBDb25uZWN0aW9uU2VydmljZSB9IGZyb20gJy4uL2FwaS9jb25uZWN0aW9uLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBDb25zdGFudHMgfSBmcm9tICcuLi9jb3JlLmNvbnN0cyc7XHJcbmltcG9ydCB7IEF1dGhTZXJ2aWNlIH0gZnJvbSAnLi9hdXRoLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBUb2FzdFNlcnZpY2UgfSBmcm9tICcuLi91dGlscy90b2FzdC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgQ291cG9uSSB9IGZyb20gJy4uL2ludGVyZmFjZXMvY291cG9uJztcclxuaW1wb3J0IHsgT3JkZXJVdGlsaXR5U2VydmljZSB9IGZyb20gJy4uL3V0aWxzL29yZGVyLXV0aWwuc2VydmljZSc7XHJcbmltcG9ydCB7IENoZWNrb3V0RGF0YSB9IGZyb20gJy4uL2ludGVyZmFjZXMvY2hlY2tvdXQtZGF0YSc7XHJcbmltcG9ydCB7IENhcnRBZmZvcmRhYmxlIH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9jYXJ0L2NhcnQtYWZmb3JkYWJsZSc7XHJcbmltcG9ydCB7IENoYW5uZWxDb25maWdTZXJ2aWNlIH0gZnJvbSAnLi9jaGFubmVsLWNvbmZpZy5zZXJ2aWNlJztcclxuaW1wb3J0IHsgQW5hbHl0aWNzU2VydmljZSB9IGZyb20gJy4uLy4uL3B1YmxpYy1hcGknO1xyXG5pbXBvcnQgeyBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xyXG5cclxuQEluamVjdGFibGUoe1xyXG4gICAgcHJvdmlkZWRJbjogJ3Jvb3QnXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBDYXJ0U2VydmljZSB7XHJcbiAgICBwcml2YXRlIGNhcnRJdGVtc1N1YmplY3Q6IEJlaGF2aW9yU3ViamVjdDxDYXJ0SXRlbVtdPiA9IG5ldyBCZWhhdmlvclN1YmplY3QoW10pO1xyXG4gICAgcHJpdmF0ZSBjb3Vwb25TdWJqZWN0OiBCZWhhdmlvclN1YmplY3Q8YW55PiA9IG5ldyBCZWhhdmlvclN1YmplY3QobnVsbCk7XHJcbiAgICBwcml2YXRlIGNhcnRTdWJqZWN0OiBCZWhhdmlvclN1YmplY3Q8YW55PiA9IG5ldyBCZWhhdmlvclN1YmplY3QobnVsbCk7XHJcbiAgICBwcml2YXRlIHJlcXVlc3RJblByb2Nlc3MgPSBuZXcgQmVoYXZpb3JTdWJqZWN0KGZhbHNlKTtcclxuICAgIHByaXZhdGUgcHJvbW90aW9uc1N1YmplY3Q6IEJlaGF2aW9yU3ViamVjdDxDaGVja291dERhdGFbXT4gPSBuZXcgQmVoYXZpb3JTdWJqZWN0KFtdKTtcclxuXHJcbiAgICBwcml2YXRlIGJhbGFuY2VDdXN0b21lclN1YmplY3Q6IEJlaGF2aW9yU3ViamVjdDx7XHJcbiAgICAgICAgYWxsb3dBbnlQYXltZW50TWV0aG9kPzogYm9vbGVhbjtcclxuICAgICAgICBhbGxvd0V4Y2VlZEJhbGFuY2U/OiBib29sZWFuO1xyXG4gICAgICAgIGNyZWRpdEFtb3VudD86IG51bWJlciB8IG51bGw7XHJcbiAgICAgICAgc2hvd01heD86IGJvb2xlYW47XHJcbiAgICAgICAgc2hvd1ByaWNlPzogYm9vbGVhbjtcclxuICAgICAgICByZW1haW5pbmdDcmVkaXRzPzogbnVtYmVyO1xyXG4gICAgICAgIGFwcGx5TWF4T3JkZXJzPzogYm9vbGVhbjtcclxuICAgICAgICBtYXhPcmRlcnM/OiBudW1iZXI7XHJcbiAgICB9IHwgbnVsbD4gPSBuZXcgQmVoYXZpb3JTdWJqZWN0KG51bGwpO1xyXG5cclxuICAgIHByaXZhdGUgaXRlbXMgPSBbXTtcclxuXHJcbiAgICBwcml2YXRlIGNvdW50OiBudW1iZXIgPSAwO1xyXG4gICAgcHJpdmF0ZSBsb2NhbGUgPSBcIlwiO1xyXG4gICAgcHJpdmF0ZSBsb2dnZWRfaW4gPSBmYWxzZTtcclxuICAgIHByaXZhdGUgaGF2ZV90b191cGRhdGUgPSB0cnVlO1xyXG4gICAgcHVibGljIGNoYW5uZWxDb25maWc6IGFueSA9IHt9O1xyXG4gICAgcHJpdmF0ZSBjYXJ0X2Jhc2VVcmwgPSAnc2hvcC1hcGkvJyArIHRoaXMuY29uc3RzLmdldENoYW5uZWwoKSArICcvY2FydHMnO1xyXG5cclxuICAgIHB1YmxpYyBjYXJ0SXRlbXNBcGkgPSAoKSA9PiB0aGlzLmNhcnRfYmFzZVVybCArICc/bG9jYWxlPScgKyB0aGlzLmNvbnN0cy5nZXRMb2NhbGUoKTtcclxuICAgIHB1YmxpYyBhZGRJdGVtQXBpID0gKCkgPT4gdGhpcy5jYXJ0X2Jhc2VVcmwgKyAnLycgKyB0aGlzLmNhcnRfdG9rZW4gKyAnL2l0ZW1zJyArICc/bG9jYWxlPScgKyB0aGlzLmNvbnN0cy5nZXRMb2NhbGUoKTtcclxuICAgIHB1YmxpYyBhZGRBbGxJdGVtc0FwaSA9ICgpID0+IHRoaXMuY2FydF9iYXNlVXJsICsgJy8nICsgdGhpcy5jYXJ0X3Rva2VuICsgJy9tdWx0aXBsZS1pdGVtcycgKyAnP2xvY2FsZT0nICsgdGhpcy5jb25zdHMuZ2V0TG9jYWxlKCk7XHJcbiAgICBwdWJsaWMgdXBkYXRlSXRlbVF1YW50aXR5QXBpID0gKGl0ZW1faWQpID0+IHRoaXMuY2FydF9iYXNlVXJsICsgJy8nICsgdGhpcy5jYXJ0X3Rva2VuICsgJy9pdGVtcy8nICsgaXRlbV9pZCArICc/bG9jYWxlPScgKyB0aGlzLmNvbnN0cy5nZXRMb2NhbGUoKTtcclxuICAgIHB1YmxpYyBkZWxldGVJdGVtQXBpID0gKGl0ZW1faWQpID0+IHRoaXMuY2FydF9iYXNlVXJsICsgJy8nICsgdGhpcy5jYXJ0X3Rva2VuICsgJy9pdGVtcy8nICsgaXRlbV9pZCArICc/bG9jYWxlPScgKyB0aGlzLmNvbnN0cy5nZXRMb2NhbGUoKTtcclxuICAgIHB1YmxpYyBjb3Vwb25BcGkgPSAoKSA9PiB0aGlzLmNhcnRfYmFzZVVybCArICcvJyArIHRoaXMuY2FydF90b2tlbiArICcvY291cG9uJztcclxuICAgIHB1YmxpYyBhZGRyZXNzQm9va0FwaSA9ICgpID0+ICdzaG9wLWFwaS8nICsgdGhpcy5jb25zdHMuZ2V0Q2hhbm5lbCgpICsgJy9hZGRyZXNzLWJvb2snO1xyXG4gICAgcHVibGljIHRheGVzQXBpID0gKCkgPT4gJ3Nob3AtYXBpLycgKyB0aGlzLmNvbnN0cy5nZXRDaGFubmVsKCkgKyAnL2NhcnRzL3RheCc7XHJcblxyXG4gICAgcHVibGljIGNhcnRfdG9rZW47XHJcbiAgICBwdWJsaWMgY2FydEl0ZW1zID0gdGhpcy5jYXJ0SXRlbXNTdWJqZWN0LmFzT2JzZXJ2YWJsZSgpLnBpcGUobWFwKGl0ZW1zID0+IHRoaXMuc3dpdGNoUHJpY2VJbkNhcnRJdGVtKGl0ZW1zKSkpXHJcbiAgICBwdWJsaWMgY291cG9uID0gdGhpcy5jb3Vwb25TdWJqZWN0LmFzT2JzZXJ2YWJsZSgpO1xyXG4gICAgcHVibGljIGxvYWRpbmcgPSB0aGlzLnJlcXVlc3RJblByb2Nlc3MuYXNPYnNlcnZhYmxlKCk7XHJcbiAgICBwdWJsaWMgY2FydCA9IHRoaXMuY2FydFN1YmplY3QuYXNPYnNlcnZhYmxlKCk7XHJcbiAgICBwdWJsaWMgcHJvbW90aW9ucyA9IHRoaXMucHJvbW90aW9uc1N1YmplY3QuYXNPYnNlcnZhYmxlKCk7XHJcbiAgICBwdWJsaWMgZGVsZXRpbmc6IEJvb2xlYW4gPSBmYWxzZTtcclxuICAgIHB1YmxpYyBiYWxhbmNlQ3VzdG9tZXIkID0gdGhpcy5iYWxhbmNlQ3VzdG9tZXJTdWJqZWN0LmFzT2JzZXJ2YWJsZSgpO1xyXG4gICAgcHVibGljIGFsbG93QW55UGF5bWVudE1ldGhvZCQgPSB0aGlzLmJhbGFuY2VDdXN0b21lciQucGlwZShtYXAoZGF0YSA9PiBkYXRhPy5hbGxvd0FueVBheW1lbnRNZXRob2QgPz8gbnVsbCkpO1xyXG4gICAgcHVibGljIGFsbG93RXhjZWVkQmFsYW5jZSQgPSB0aGlzLmJhbGFuY2VDdXN0b21lciQucGlwZShtYXAoZGF0YSA9PiBkYXRhPy5hbGxvd0V4Y2VlZEJhbGFuY2UgPz8gbnVsbCkpO1xyXG4gICAgcHVibGljIGNyZWRpdEFtb3VudCQgPSB0aGlzLmJhbGFuY2VDdXN0b21lciQucGlwZShtYXAoZGF0YSA9PiBkYXRhPy5jcmVkaXRBbW91bnQgPz8gbnVsbCkpO1xyXG4gICAgcHVibGljIHNob3dNYXgkID0gdGhpcy5iYWxhbmNlQ3VzdG9tZXIkLnBpcGUobWFwKGRhdGEgPT4gZGF0YT8uc2hvd01heCA/PyBudWxsKSk7XHJcbiAgICBwdWJsaWMgc2hvd1ByaWNlJCA9IHRoaXMuYmFsYW5jZUN1c3RvbWVyJC5waXBlKG1hcChkYXRhID0+IGRhdGE/LnNob3dQcmljZSA/PyBudWxsKSk7XHJcblxyXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSBjb25uZWN0aW9uOiBDb25uZWN0aW9uU2VydmljZSwgcHJpdmF0ZSB0b2FzdHJTZXJ2aWNlOiBUb2FzdFNlcnZpY2UsIHByaXZhdGUgY29uc3RzOiBDb25zdGFudHMsXHJcbiAgICAgICAgcHJpdmF0ZSBhdXRoU2VydmljZTogQXV0aFNlcnZpY2UsIHByaXZhdGUgb3JkZXJVdGlsczogT3JkZXJVdGlsaXR5U2VydmljZSwgcHJpdmF0ZSBhbmFseXRpY3NTZXJ2aWNlOiBBbmFseXRpY3NTZXJ2aWNlLFxyXG4gICAgICAgIHByaXZhdGUgY2hhbm5lbENvbmZpZ1NlcnZpY2U6IENoYW5uZWxDb25maWdTZXJ2aWNlLFxyXG4gICAgICAgIHByaXZhdGUgcm91dGVyOiBSb3V0ZXIpIHtcclxuXHJcbiAgICAgICAgdGhpcy5yZXF1ZXN0SW5Qcm9jZXNzLm5leHQodHJ1ZSk7XHJcbiAgICAgICAgdGhpcy5pdGVtcyA9IEpTT04ucGFyc2UobG9jYWxTdG9yYWdlLmdldEl0ZW0oJ2NhcnQnKSkgfHwgW107XHJcbiAgICAgICAgdGhpcy5jYXJ0X3Rva2VuID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oJ2NhcnRfdG9rZW4nKSB8fCBudWxsO1xyXG4gICAgICAgIHRoaXMuYXV0aFNlcnZpY2UubG9nZ2VkSW4uc3Vic2NyaWJlKHJlcyA9PiB0aGlzLmdldENhcnQoKSk7XHJcbiAgICAgICAgdGhpcy5jaGFubmVsQ29uZmlnU2VydmljZS5jaGFubmVsQ29uZmlnJC5zdWJzY3JpYmUocmVzID0+IHRoaXMuY2hhbm5lbENvbmZpZyA9IHJlcyk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldENhcnQyKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmNhcnRJdGVtc1N1YmplY3QudmFsdWU7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0QWRkcmVzc0Jvb2sgPSBhc3luYyAoKSA9PlxyXG4gICAgICAgIHRoaXMuY29ubmVjdGlvbi5nZXQodGhpcy5hZGRyZXNzQm9va0FwaSgpKS5waXBlKG1hcChyZXMgPT4gcmVzPy5sZW5ndGggJiYgcmVzLm1hcChhZGRyZXMgPT4geyByZXR1cm4gYWRkcmVzICYmIHsgLi4uYWRkcmVzLCBzZWxlY3RlZDogYWRkcmVzLmRlZmF1bHQgfSB9KSB8fCBudWxsKSkudG9Qcm9taXNlKCk7XHJcblxyXG4gICAgcHVibGljIGdldFRheGVzID0gYXN5bmMgKCkgPT5cclxuICAgICAgICB0aGlzLmNvbm5lY3Rpb24ucG9zdCh0aGlzLnRheGVzQXBpKCksIHsgdG9rZW46IHRoaXMuY2FydF90b2tlbiB9KS5zdWJzY3JpYmUocmVzID0+IHJlcylcclxuXHJcbiAgICBwcml2YXRlIGdldENhcnQgPSBhc3luYyAoKSA9PlxyXG4gICAgICAgIHRoaXMuY29ubmVjdGlvbi5wb3N0KHRoaXMuY2FydEl0ZW1zQXBpKCksICgodGhpcy5jYXJ0X3Rva2VuICYmIHRoaXMuaXRlbXMubGVuZ3RoID49IDEpICYmIHsgdG9rZW46IHRoaXMuY2FydF90b2tlbiB9KSkuc3Vic2NyaWJlKFxyXG4gICAgICAgICAgICByZXMgPT4gdGhpcy5pbml0aWFsaXplQ2FydChyZXMpXHJcbiAgICAgICAgKVxyXG5cclxuICAgIHByaXZhdGUgZ2V0Q2FydEJ5VG9rZW4gPSBhc3luYyAoKSA9PlxyXG4gICAgICAgIHRoaXMuY29ubmVjdGlvbi5wb3N0KHRoaXMuY2FydEl0ZW1zQXBpKCksICgodGhpcy5jYXJ0X3Rva2VuKSAmJiB7IHRva2VuOiB0aGlzLmNhcnRfdG9rZW4gfSkpLnN1YnNjcmliZShcclxuICAgICAgICAgICAgcmVzID0+IHRoaXMuaW5pdGlhbGl6ZUNhcnQocmVzKVxyXG4gICAgICAgIClcclxuXHJcbiAgICBwcml2YXRlIGdldENhcnRCeUN1c3RvbWVyID0gYXN5bmMgKCkgPT5cclxuICAgICAgICB0aGlzLmNvbm5lY3Rpb24ucG9zdCh0aGlzLmNhcnRJdGVtc0FwaSgpKS5zdWJzY3JpYmUoXHJcbiAgICAgICAgICAgIHJlcyA9PiB0aGlzLmluaXRpYWxpemVDYXJ0KHJlcylcclxuICAgICAgICApXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiAgQHByaXZhdGVcclxuICAgICAqICBDQVJUIENSVUQgU0VSVkVSJ1MgU1lOQ1JPTklaRURcclxuICAgICAqL1xyXG5cclxuICAgIHByaXZhdGUgaW5pdGlhbGl6ZUNhcnQgPSAocmVzcG9uc2UpID0+IHtcclxuICAgICAgICB0aGlzLmNhcnRfdG9rZW4gPSByZXNwb25zZS50b2tlblZhbHVlO1xyXG4gICAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKCdjYXJ0X3Rva2VuJywgdGhpcy5jYXJ0X3Rva2VuKTtcclxuICAgICAgICB0aGlzLmxvY2FsZSA9IHJlc3BvbnNlLmxvY2FsZTtcclxuICAgICAgICAvKiBsZXQgbG9jYWxlRnJvbVN0b3JhZ2UgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnTE9DQUxFJylcclxuICAgICAgICBjb25zb2xlLmxvZyhsb2NhbGVGcm9tU3RvcmFnZSlcclxuICAgICAgICB0aGlzLmxvY2FsZSA9IGxvY2FsZUZyb21TdG9yYWdlID8gbG9jYWxlRnJvbVN0b3JhZ2UgOiByZXNwb25zZS5sb2NhbGU7XHJcbiAgICAgICAgcmVzcG9uc2UubG9jYWxlID0gdGhpcy5sb2NhbGUgKi9cclxuICAgICAgICB0aGlzLnVwZGF0ZUNhcnRPYmoocmVzcG9uc2UsIGZhbHNlKTtcclxuICAgICAgICB0aGlzLnVwZGF0ZUNhcnRJdGVtcyh0aGlzLnRyYW5zZm9ybUl0ZW1zKHJlc3BvbnNlLml0ZW1zKSk7XHJcbiAgICAgICAgdGhpcy5yZXF1ZXN0SW5Qcm9jZXNzLm5leHQoZmFsc2UpO1xyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgc3dpdGNoUHJpY2VJbkNhcnRJdGVtID0gKGl0ZW1zOiBDYXJ0SXRlbVtdKSA9PiB7XHJcbiAgICAgICAgLy9yZXR1cm4gaXRlbXM7XHJcbiAgICAgICAgcmV0dXJuIGl0ZW1zLm1hcChcclxuICAgICAgICAgICAgaXRlbSA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAoaXRlbS5wcm9kdWN0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaXRlbS5wcm9kdWN0LnByaWNlID0gaXRlbS5wcm9kdWN0LnZhcmlhbnRzWzBdLnNhbGVwcmljZSA/IGl0ZW0ucHJvZHVjdC52YXJpYW50c1swXS5zYWxlcHJpY2UgOiBpdGVtLnByb2R1Y3QudmFyaWFudHNbMF0ucHJpY2U7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gaXRlbVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgKVxyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgc3RlcENhcnQgPSAocmVzKSA9PiB7XHJcbiAgICAgICAgcmVzLml0ZW1zLmxlbmd0aCA+IDAgJiYgcmVzLml0ZW1zLmZvckVhY2goXHJcbiAgICAgICAgICAgIGl0ZW0gPT4gIXRoaXMuaXNJdGVtSW5Mb2NhbChpdGVtLmlkKSAmJiB0aGlzLmRlbGV0ZUNhcnRJdGVtKGl0ZW0sIGZhbHNlKVxyXG4gICAgICAgICk7XHJcbiAgICAgICAgdGhpcy5hZGRBbGxUb0NhcnQoXHJcbiAgICAgICAgICAgIHRoaXMuaXRlbXMuZmlsdGVyKFxyXG4gICAgICAgICAgICAgICAgaXRlbSA9PiAhcmVzLml0ZW1zLnNvbWUoZXh0ZXJuYWxfaXRlbSA9PiBleHRlcm5hbF9pdGVtLmlkID09IGl0ZW0uaXRlbV9pZClcclxuICAgICAgICAgICAgKVxyXG4gICAgICAgICk7XHJcbiAgICB9XHJcblxyXG5cclxuICAgIHByaXZhdGUgdXBkYXRlQ2FydEl0ZW1zID0gKGl0ZW1zKSA9PiB7XHJcbiAgICAgICAgdGhpcy5pdGVtcyA9IGl0ZW1zO1xyXG4gICAgICAgIHRoaXMuY291bnQgPSBpdGVtcy5sZW5ndGg7XHJcbiAgICAgICAgdGhpcy5jYXJ0SXRlbXNTdWJqZWN0Lm5leHQodGhpcy5pdGVtcyk7XHJcbiAgICAgICAgdGhpcy51cGRhdGVMb2NhbENhcnQoKTtcclxuICAgICAgICB0aGlzLnJlcXVlc3RJblByb2Nlc3MubmV4dChmYWxzZSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSB1cGRhdGVDYXJ0SXRlbVF1YW50aXR5ID0gKHZhcmlhbnRfaWQsIHF1YW50aXR5KSA9PiB7XHJcbiAgICAgICAgbGV0IG5ld1F1YW50aXR5ID0gdGhpcy5pdGVtcy5maW5kKGl0ZW0gPT4gaXRlbS52YXJpYW50X2lkID09IHZhcmlhbnRfaWQpLnF1YW50aXR5ID0gcXVhbnRpdHk7XHJcbiAgICAgICAgdGhpcy5jYXJ0SXRlbXNTdWJqZWN0Lm5leHQodGhpcy5pdGVtcyk7XHJcbiAgICAgICAgdGhpcy5yZXF1ZXN0SW5Qcm9jZXNzLm5leHQoZmFsc2UpO1xyXG4gICAgICAgIHRoaXMudXBkYXRlTG9jYWxDYXJ0KCk7XHJcbiAgICAgICAgdGhpcy50b2FzdHJTZXJ2aWNlLnNob3coJ3Byb2R1Y3QtdXBkYXRlZCcsIHsgcXVhbnRpdHk6IG5ld1F1YW50aXR5IH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgYXBwZW5kVG9DYXJ0ID0gKGNhcnQpID0+IHtcclxuICAgICAgICB0aGlzLnVwZGF0ZUNhcnRPYmooY2FydCk7XHJcbiAgICAgICAgdGhpcy5pdGVtcyA9IHRoaXMudHJhbnNmb3JtSXRlbXMoY2FydC5pdGVtcyk7XHJcbiAgICAgICAgdGhpcy5jb3VudCA9IHRoaXMuaXRlbXMubGVuZ3RoO1xyXG4gICAgICAgIHRoaXMucmVxdWVzdEluUHJvY2Vzcy5uZXh0KGZhbHNlKTtcclxuICAgICAgICB0aGlzLnVwZGF0ZUxvY2FsQ2FydCgpO1xyXG4gICAgICAgIC8vICAgIHRoaXMudG9hc3RyU2VydmljZS5zaG93KCdwcm9kdWN0LWFkZGVkJyk7XHJcbiAgICAgICAgdGhpcy5jYXJ0SXRlbXNTdWJqZWN0Lm5leHQodGhpcy5pdGVtcyk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSByZW1vdmVDYXJ0SXRlbSA9IChjYXJ0LCBwcm9kdWN0LCB0b2FzdCA9IHRydWUpID0+IHtcclxuICAgICAgICB0aGlzLnVwZGF0ZUNhcnRPYmooY2FydCwgZmFsc2UpO1xyXG4gICAgICAgIHRoaXMuaXRlbXMuc3BsaWNlKHRoaXMuaXRlbXMuZmluZEluZGV4KGl0ZW0gPT4gaXRlbS5pdGVtX2lkID09IHByb2R1Y3QuaXRlbV9pZCksIDEpO1xyXG4gICAgICAgIHRoaXMuY2FydEl0ZW1zU3ViamVjdC5uZXh0KHRoaXMuaXRlbXMpO1xyXG4gICAgICAgIHRvYXN0ICYmIHRoaXMucmVxdWVzdEluUHJvY2Vzcy5uZXh0KGZhbHNlKTtcclxuICAgICAgICB0b2FzdCAmJiB0aGlzLnRvYXN0clNlcnZpY2Uuc2hvdygncHJvZHVjdC1yZW1vdmVkJyk7XHJcbiAgICAgICAgdGhpcy51cGRhdGVMb2NhbENhcnQoKTtcclxuICAgICAgICAvLyB0aGlzLmdvb2dsZUFuYWx5dGljcy5yZW1vdmVGcm9tQ2FydChwcm9kdWN0KTtcclxuICAgICAgICB0aGlzLmFuYWx5dGljc1NlcnZpY2UuY2FsbEV2ZW50KCdyZW1vdmVfZnJvbV9jYXJ0JywgeyAuLi5wcm9kdWN0LCBjdXJyZW5jeTogdGhpcy5jb25zdHMuY3VycmVuY3kuY29kZSB9KVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGFkZElmQWxscmVhZHlFeGlzdHMgPSAocHJvZHVjdCwgdmFyaWFudF9pZCwgcXVhbnRpdHlBZGQgPSAxKSA9PlxyXG4gICAgICAgIHRoaXMuaXRlbXMuZmluZCgoaXRlbSwgaW5kZXgpID0+IHtcclxuICAgICAgICAgICAgaWYgKGl0ZW0ucHJvZHVjdC5pZCA9PSBwcm9kdWN0LmlkICYmIGl0ZW0udmFyaWFudF9pZCA9PSB2YXJpYW50X2lkKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZUl0ZW1RdWFudGl0eShpdGVtLCB0aGlzLmZpbmRJdGVtKHByb2R1Y3QuaWQpLnF1YW50aXR5ICsgcXVhbnRpdHlBZGQpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgIHByaXZhdGUgdXBkYXRlTG9jYWxDYXJ0ID0gKCkgPT4ge1xyXG4gICAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKCdjYXJ0JywgSlNPTi5zdHJpbmdpZnkodGhpcy5pdGVtcykpO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgcmVzZXRDYXJ0ID0gKG5leHQ/KSA9PiB7XHJcbiAgICAgICAgdGhpcy5pdGVtcyA9IFtdO1xyXG4gICAgICAgIHRoaXMuY2FydFN1YmplY3QubmV4dChudWxsKTtcclxuICAgICAgICB0aGlzLnVwZGF0ZUJhbGFuY2VBdHRyaWJ1dGVzKG51bGwpO1xyXG4gICAgICAgIHRoaXMuY2FydF90b2tlbiA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5jYXJ0SXRlbXNTdWJqZWN0Lm5leHQoW10pO1xyXG4gICAgICAgIHRoaXMuY291bnQgPSAwO1xyXG4gICAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKCdjYXJ0JywgXCJbXVwiKTtcclxuICAgICAgICBsb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbSgnY2FydF90b2tlbicpO1xyXG4gICAgICAgIG5leHQgJiYgbmV4dCgpO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgdXBkYXRlQ2FydE9iaiA9IChjYXJ0LCBlbWl0RXZlbnQgPSB0cnVlKTogYm9vbGVhbiA9PiB7XHJcbiAgICAgICAgdGhpcy5jYXJ0U3ViamVjdC5uZXh0KGNhcnQpO1xyXG4gICAgICAgIHRoaXMudXBkYXRlQmFsYW5jZUF0dHJpYnV0ZXMoY2FydD8uYmFsYW5jZUN1c3RvbWVyLCBjYXJ0Py50b3RhbHM/LnRvdGFsKTtcclxuICAgICAgICBlbWl0RXZlbnQgJiYgdGhpcy5hbmFseXRpY3NTZXJ2aWNlLmNhbGxFdmVudCgnYWRkX3RvX2NhcnQnLCBjYXJ0KTtcclxuICAgICAgICB0aGlzLnByb21vdGlvbnNTdWJqZWN0Lm5leHQodGhpcy5vcmRlclV0aWxzLmdldFByb21vdGlvbnMoY2FydCwgdHJ1ZSkpO1xyXG5cclxuICAgICAgICBjYXJ0LmNvdXBvbkNvZGVcclxuICAgICAgICAgICAgPyB0aGlzLmZvcm1hdENvdXBvbihjYXJ0KVxyXG4gICAgICAgICAgICA6IHRoaXMuY291cG9uU3ViamVjdC5uZXh0KG51bGwpO1xyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgaXNJdGVtSW5Mb2NhbCA9IChpdGVtX2lkKSA9PiB0aGlzLml0ZW1zLnNvbWUoaXRlbSA9PiBpdGVtLml0ZW1faWQgPT0gaXRlbV9pZCk7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiAgQHB1YmxpY1xyXG4gICAgICogIENBUlQgQ1JVRFxyXG4gICAgICovXHJcblxyXG4gICAgYWRkVG9DYXJ0ID0gKHByb2R1Y3Q6IFByb2R1Y3QsIHF1YW50aXR5OiBudW1iZXIsIHZhcmlhbnRfaWQpID0+IHtcclxuICAgICAgICBjb25zdCBiYWxhbmNlID0gdGhpcy5iYWxhbmNlQ3VzdG9tZXJTdWJqZWN0LnZhbHVlO1xyXG4gICAgICAgIGNvbnN0IGFwcGx5TWF4T3JkZXJzID0gYmFsYW5jZT8uYXBwbHlNYXhPcmRlcnMgPz8gZmFsc2U7XHJcbiAgICAgICAgY29uc3QgbWF4T3JkZXJzID0gYmFsYW5jZT8ubWF4T3JkZXJzID8/IEluZmluaXR5O1xyXG5cclxuICAgICAgICBpZiAoYXBwbHlNYXhPcmRlcnMgJiYgKG1heE9yZGVycyA8PSAwIHx8IG1heE9yZGVycyA9PT0gbnVsbCkpIHtcclxuICAgICAgICAgICAgdGhpcy50b2FzdHJTZXJ2aWNlLnNob3coJ21heC1vcmRlcnMtcmVhY2hlZCcpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoIXRoaXMuYXV0aFNlcnZpY2UuaXNBYmxlVG9CdXkoKSkge1xyXG4gICAgICAgICAgICB0aGlzLnRvYXN0clNlcnZpY2Uuc2hvdygnbXVzdC1zZWxlY3QtY3VzdG9tZXInKVxyXG4gICAgICAgICAgICByZXR1cm5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMucmVxdWVzdEluUHJvY2Vzcy5uZXh0KHRydWUpO1xyXG4gICAgICAgIGxldCBhZGRlZCA9IHRoaXMuYWRkSWZBbGxyZWFkeUV4aXN0cyhwcm9kdWN0LCB2YXJpYW50X2lkLCBxdWFudGl0eSk7XHJcbiAgICAgICAgaWYgKCFhZGRlZCkge1xyXG4gICAgICAgICAgICB0aGlzLmNvbm5lY3Rpb24ucG9zdCh0aGlzLmFkZEl0ZW1BcGkoKSwgeyBwcm9kdWN0Q29kZTogcHJvZHVjdC5pZCwgcXVhbnRpdHk6IHF1YW50aXR5LCB2YXJpYW50Q29kZTogdmFyaWFudF9pZCB9KVxyXG4gICAgICAgICAgICAgICAgLnN1YnNjcmliZShcclxuICAgICAgICAgICAgICAgICAgICByZXMgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBNYW5lamFyIGxhIHJlc3B1ZXN0YSBIVFRQIGV4aXRvc2EgKGPDs2RpZ28gMjAwKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmFwcGVuZFRvQ2FydChyZXMpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnRvYXN0clNlcnZpY2Uuc2hvdygncHJvZHVjdC1hZGRlZCcpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgZXJyID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gTWFuZWphciBlbCBlcnJvciBkZSBsYSBsbGFtYWRhIEhUVFAgKGPDs2RpZ28gNTAwIHUgb3RybyBlcnJvcilcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVyci5zdGF0dXMgPT09IDUwMCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gQ8OzZGlnbyBkZSBlcnJvciA1MDAgKHRpbWVvdXQpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmhhbmRsZUVycm9yKGVycik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnRvYXN0clNlcnZpY2Uuc2hvdygnSGEgb2N1cnJpZG8gdW4gZXJyb3IgYWwgYWdyZWdhciBhbCBjYXJyaXRvLiBWdWVsdmEgYSBpbnRlbnRhcmxvLicpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gT3RybyBjw7NkaWdvIGRlIGVycm9yXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmhhbmRsZUVycm9yKGVycik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB0aGlzLnRvYXN0clNlcnZpY2Uuc2hvdygnRXJyb3IgaW5lc3BlcmFkby4gVnVlbHZhIGEgaW50ZW50YXJsbycpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgKTtcclxuICAgICAgICB9XHJcblxyXG5cclxuICAgIH1cclxuXHJcbiAgICBhZGRUb0xvdCA9IChwcm9kdWN0OiBQcm9kdWN0LCBxdWFudGl0eTogbnVtYmVyLCB2YXJpYW50X2lkLCBpZD8sIG9yZGVyX2l0ZW1faWQ/LCBsb3RfcXVhbnRpdHk/LCB1bml0X3ByaWNlPywgdW5pdF90b3RhbD8sIGFqdXN0ZW1lbnRfdG90YWw/LCB0b3RhbF9sb3Q/LCBsb3Rfc3RhdHVzPywgZGF0ZV9yZXF1ZXN0Pywgbm90ZXM/LCBzaGlwcGluZ19hZGRyZXNzX2lkPywgc2hpcHBpbmdfYWRkcmVzc19uYW1lPywgYWN0aW9uPykgPT4ge1xyXG4gICAgICAgIGlmICghdGhpcy5hdXRoU2VydmljZS5pc0FibGVUb0J1eSgpKSB7XHJcbiAgICAgICAgICAgIHRoaXMudG9hc3RyU2VydmljZS5zaG93KCdtdXN0LXNlbGVjdC1jdXN0b21lcicpXHJcbiAgICAgICAgICAgIHJldHVyblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgbGV0IGFkZGVkID0gJyc7XHJcbiAgICAgICAgIWFkZGVkICYmIHRoaXMuY29ubmVjdGlvbi5wb3N0KHRoaXMuYWRkSXRlbUFwaSgpLCB7IHByb2R1Y3RDb2RlOiBwcm9kdWN0LmlkLCBxdWFudGl0eTogcXVhbnRpdHksIHZhcmlhbnRDb2RlOiB2YXJpYW50X2lkLCBpZDogaWQgfHwgJycsIG9yZGVyX2l0ZW1faWQ6IG9yZGVyX2l0ZW1faWQgfHwgJycsIGxvdF9xdWFudGl0eTogbG90X3F1YW50aXR5IHx8ICcnLCB1bml0X3ByaWNlOiB1bml0X3ByaWNlIHx8ICcnLCB1bml0X3RvdGFsOiB1bml0X3RvdGFsIHx8ICcnLCBhanVzdGVtZW50X3RvdGFsOiBhanVzdGVtZW50X3RvdGFsIHx8ICcnLCB0b3RhbF9sb3Q6IHRvdGFsX2xvdCB8fCAnJywgbG90X3N0YXR1czogbG90X3N0YXR1cyB8fCAnJywgZGF0ZV9yZXF1ZXN0OiBkYXRlX3JlcXVlc3QgfHwgJycsIG5vdGVzOiBub3RlcyB8fCAnJywgc2hpcHBpbmdfYWRkcmVzc19pZDogc2hpcHBpbmdfYWRkcmVzc19pZCB8fCAnJywgc2hpcHBpbmdfYWRkcmVzc19uYW1lOiBzaGlwcGluZ19hZGRyZXNzX25hbWUgfHwgJycsIGFjdGlvbjogYWN0aW9uIHx8ICduZXdsb3QnIH0pXHJcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoXHJcbiAgICAgICAgICAgICAgICByZXMgPT4gdGhpcy5hcHBlbmRUb0NhcnQocmVzKSxcclxuICAgICAgICAgICAgICAgIGVyciA9PiB0aGlzLmhhbmRsZUVycm9yKGVycilcclxuICAgICAgICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICBhZGRUb0NhcnRQcm9taXNlID0gYXN5bmMgKHByb2R1Y3Q6IFByb2R1Y3QsIHF1YW50aXR5OiBudW1iZXIsIHZhcmlhbnRfaWQpID0+IHtcclxuICAgICAgICBpZiAoIXRoaXMuYXV0aFNlcnZpY2UuaXNBYmxlVG9CdXkoKSkge1xyXG4gICAgICAgICAgICB0aGlzLnRvYXN0clNlcnZpY2Uuc2hvdygnbXVzdC1zZWxlY3QtY3VzdG9tZXInKVxyXG4gICAgICAgICAgICByZXR1cm5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMucmVxdWVzdEluUHJvY2Vzcy5uZXh0KHRydWUpO1xyXG4gICAgICAgIGxldCBhZGRlZCA9IHRoaXMuYWRkSWZBbGxyZWFkeUV4aXN0cyhwcm9kdWN0LCB2YXJpYW50X2lkLCBxdWFudGl0eSk7XHJcbiAgICAgICAgaWYgKCFhZGRlZCkge1xyXG4gICAgICAgICAgICBsZXQgcmVzdWx0ID0gYXdhaXQgKHRoaXMuY29ubmVjdGlvbi5wb3N0KHRoaXMuYWRkSXRlbUFwaSgpLCB7IHByb2R1Y3RDb2RlOiBwcm9kdWN0LmlkLCBxdWFudGl0eTogcXVhbnRpdHksIHZhcmlhbnRDb2RlOiB2YXJpYW50X2lkIH0pLnRvUHJvbWlzZSgpKTtcclxuICAgICAgICAgICAgaWYgKCFyZXN1bHQgfHwgcmVzdWx0LmVycm9yKSB0aGlzLmhhbmRsZUVycm9yKHJlc3VsdC5lcnJvcik7XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5hcHBlbmRUb0NhcnQocmVzdWx0KTtcclxuICAgICAgICAgICAgICAgIHJldHVybiB7IGVycm9yOiBmYWxzZSB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHsgZXJyb3I6IHRydWUgfVxyXG4gICAgfVxyXG5cclxuXHJcbiAgICBhZGRBbGxUb0NhcnQgPSAoaXRlbXM6IGFueVtdKSA9PiB7XHJcbiAgICAgICAgaWYgKCF0aGlzLmF1dGhTZXJ2aWNlLmlzQWJsZVRvQnV5KCkpIHtcclxuICAgICAgICAgICAgdGhpcy50b2FzdHJTZXJ2aWNlLnNob3coJ211c3Qtc2VsZWN0LWN1c3RvbWVyJylcclxuICAgICAgICAgICAgcmV0dXJuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnJlcXVlc3RJblByb2Nlc3MubmV4dCh0cnVlKTtcclxuXHJcbiAgICAgICAgY29uc3QgcGFyYW1zID0geyBpdGVtczogdGhpcy5tZXJnZUl0ZW1zQWRkQWxsVG9DYXJ0KGl0ZW1zKSB9O1xyXG5cclxuICAgICAgICB0aGlzLmNvbm5lY3Rpb24ucG9zdCh0aGlzLmFkZEFsbEl0ZW1zQXBpKCksIHBhcmFtcylcclxuICAgICAgICAgICAgLnRvUHJvbWlzZSgpLnRoZW4oXHJcbiAgICAgICAgICAgICAgICByZXMgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlQ2FydE9iaihyZXMuY2FydCkgJiYgdGhpcy51cGRhdGVDYXJ0SXRlbXModGhpcy50cmFuc2Zvcm1JdGVtcyhyZXMuY2FydC5pdGVtcykpO1xyXG4gICAgICAgICAgICAgICAgICAgIHJlcy5jYXJ0X3Jlc3BvbnNlLnN0YXR1cyA9PSAnc3VjY2VzcycgJiYgdGhpcy50b2FzdHJTZXJ2aWNlLnNob3coJ3Byb2R1Y3RzLWFkZGVkJyk7XHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgZXJyID0+IHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmhhbmRsZUVycm9yKGVycik7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICkuY2F0Y2goZXJyID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMuaGFuZGxlRXJyb3IoZXJyKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgYWRkUmVwZWF0T3JkZXJUb0NhcnQoaXRlbXM6IGFueVtdKTogdm9pZCB7XHJcbiAgICAgICAgaWYgKHRoaXMuY2FydEl0ZW1zU3ViamVjdC52YWx1ZS5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgIHRoaXMudG9hc3RyU2VydmljZS5zaG93KCdjYXJ0LW5vdC1lbXB0eScpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoIXRoaXMuYXV0aFNlcnZpY2UuaXNBYmxlVG9CdXkoKSkge1xyXG4gICAgICAgICAgICB0aGlzLnRvYXN0clNlcnZpY2Uuc2hvdygnbXVzdC1zZWxlY3QtY3VzdG9tZXInKVxyXG4gICAgICAgICAgICByZXR1cm5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbnN0IGl0ZW1zVG9BZGQgPSBpdGVtcy5tYXAoaXRlbSA9PiAoe1xyXG4gICAgICAgICAgICBwcm9kdWN0Q29kZTogaXRlbS5wcm9kdWN0LmlkLFxyXG4gICAgICAgICAgICBxdWFudGl0eTogaXRlbS5xdWFudGl0eSxcclxuICAgICAgICAgICAgdmFyaWFudENvZGU6IGl0ZW0ucHJvZHVjdC52YXJpYW50c1swXS5jb2RlXHJcbiAgICAgICAgfSkpO1xyXG5cclxuICAgICAgICBpZiAoaXRlbXNUb0FkZC5sZW5ndGggPT09IDApIHtcclxuICAgICAgICAgICAgdGhpcy50b2FzdHJTZXJ2aWNlLnNob3coJ25vLXByb2R1Y3RzLXRvLWFkZCcpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb25zdCBwYXJhbXMgPSB7XHJcbiAgICAgICAgICAgIGl0ZW1zOiBpdGVtc1RvQWRkXHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgdGhpcy5yZXF1ZXN0SW5Qcm9jZXNzLm5leHQodHJ1ZSk7XHJcblxyXG4gICAgICAgIHRoaXMuY29ubmVjdGlvbi5wb3N0KHRoaXMuYWRkQWxsSXRlbXNBcGkoKSwgcGFyYW1zKVxyXG4gICAgICAgICAgICAudG9Qcm9taXNlKClcclxuICAgICAgICAgICAgLnRoZW4ocmVzID0+IHtcclxuXHJcbiAgICAgICAgICAgICAgICBpZiAocmVzPy5zdGF0dXMgPT09ICdmYWlsdXJlJykge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGVycm9yTWVzc2FnZSA9IHJlcy5lcnJvcj8udG9Mb3dlckNhc2UoKS5yZXBsYWNlKC9cXHMrL2csICdfJykgfHwgJ3Vua25vd25fZXJyb3InO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMudG9hc3RyU2VydmljZS5zaG93KGVycm9yTWVzc2FnZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIGNvbnN0IGl0ZW1zUmVzcG9uc2UgPSByZXM/Lml0ZW1zX3Jlc3BvbnNlIHx8IFtdO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgY2FydEl0ZW1zID0gcmVzPy5jYXJ0Py5pdGVtcyB8fCBbXTtcclxuXHJcbiAgICAgICAgICAgICAgICBjb25zdCBvdXRPZlN0b2NrSXRlbXMgPSBpdGVtc1Jlc3BvbnNlLmZpbHRlcihpdGVtID0+XHJcbiAgICAgICAgICAgICAgICAgICAgaXRlbS5zdGF0dXMgPT09ICdmYWlsdXJlJyAmJlxyXG4gICAgICAgICAgICAgICAgICAgIGl0ZW0uZXJyb3JzLnNvbWUoZXJyb3IgPT4gZXJyb3IuY29kZSA9PT0gJ291dF9vZl9zdG9jaycpXHJcbiAgICAgICAgICAgICAgICApO1xyXG5cclxuICAgICAgICAgICAgICAgIGlmIChjYXJ0SXRlbXMubGVuZ3RoID09PSAwICYmIG91dE9mU3RvY2tJdGVtcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy50b2FzdHJTZXJ2aWNlLnNob3coJ2FsbC1wcm9kdWN0cy1vdXQtb2Ytc3RvY2snKTtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKG91dE9mU3RvY2tJdGVtcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy50b2FzdHJTZXJ2aWNlLnNob3coJ3NvbWUtcHJvZHVjdHMtb3V0LW9mLXN0b2NrJyk7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKGNhcnRJdGVtcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy51cGRhdGVDYXJ0T2JqKHJlcy5jYXJ0KTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZUNhcnRJdGVtcyh0aGlzLnRyYW5zZm9ybUl0ZW1zKGNhcnRJdGVtcykpO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMudG9hc3RyU2VydmljZS5zaG93KCdwcm9kdWN0cy1hZGRlZCcpO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFsnL2NhcnQnXSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICBlcnIgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaGFuZGxlRXJyb3IoZXJyKTtcclxuICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIC5jYXRjaChlcnIgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5oYW5kbGVFcnJvcihlcnIpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBtZXJnZUl0ZW1zQWRkQWxsVG9DYXJ0ID0gKGl0ZW1zOiBhbnlbXSkgPT4ge1xyXG4gICAgICAgIGxldCBwYXJhbXNNZXJnZSA9IFtdXHJcbiAgICAgICAgdGhpcy5pdGVtcy5mb3JFYWNoKGl0ZW0gPT4ge1xyXG4gICAgICAgICAgICBsZXQgaXRlbUludGVybm8gPSBpdGVtcy5maW5kKGl0ZW1QYXJhbSA9PiBpdGVtUGFyYW0udmFyaWFudENvZGUgPT0gaXRlbS52YXJpYW50X2lkKVxyXG4gICAgICAgICAgICBwYXJhbXNNZXJnZS5wdXNoKFxyXG4gICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgIHByb2R1Y3RDb2RlOiBpdGVtLnByb2R1Y3QuaWQsXHJcbiAgICAgICAgICAgICAgICAgICAgdmFyaWFudENvZGU6IGl0ZW0udmFyaWFudF9pZCxcclxuICAgICAgICAgICAgICAgICAgICBxdWFudGl0eTogaXRlbUludGVybm8gJiYgaXRlbUludGVybm8ucXVhbnRpdHkgfHwgaXRlbS5xdWFudGl0eVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICApXHJcbiAgICAgICAgfSlcclxuXHJcbiAgICAgICAgaXRlbXMgPSBpdGVtcy5maWx0ZXIoaXRlbVBhcmFtID0+ICF0aGlzLml0ZW1zLmZpbmQoaXRlbSA9PiBpdGVtUGFyYW0udmFyaWFudENvZGUgPT0gaXRlbS52YXJpYW50X2lkKSlcclxuXHJcbiAgICAgICAgcmV0dXJuIFsuLi5pdGVtcywgLi4ucGFyYW1zTWVyZ2VdXHJcbiAgICB9XHJcblxyXG4gICAgdXBkYXRlSXRlbVF1YW50aXR5ID0gKGl0ZW06IENhcnRJdGVtLCBxdWFudGl0eSkgPT4ge1xyXG4gICAgICAgIGlmICh0aGlzLnZhbGlkYXRlUXVhbnRpdHkoaXRlbSwgcXVhbnRpdHkpICYmICh0aGlzLnZhbGlkYXRlUHJpY2VBbmRDcmVkaXRzKGl0ZW0sIHF1YW50aXR5KSkpIHtcclxuICAgICAgICAgICAgdGhpcy5jb25uZWN0aW9uLnB1dCh0aGlzLnVwZGF0ZUl0ZW1RdWFudGl0eUFwaSh0aGlzLmZpbmRJdGVtQnlJZFZhcmlhbnQoaXRlbS52YXJpYW50X2lkKSksIHsgJ3F1YW50aXR5JzogTnVtYmVyKHF1YW50aXR5KSB9KS5zdWJzY3JpYmUoXHJcbiAgICAgICAgICAgICAgICByZXMgPT4gdGhpcy51cGRhdGVDYXJ0T2JqKHJlcykgJiYgdGhpcy51cGRhdGVDYXJ0SXRlbVF1YW50aXR5KGl0ZW0udmFyaWFudF9pZCwgTnVtYmVyKHF1YW50aXR5KSksXHJcbiAgICAgICAgICAgICAgICBlcnIgPT4gdGhpcy5oYW5kbGVFcnJvcihlcnIpXHJcbiAgICAgICAgICAgIClcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG5cclxuICAgIHZhbGlkYXRlUXVhbnRpdHkgPSAoaXRlbTogQ2FydEl0ZW0sIHF1YW50aXR5KSA9PiB7XHJcbiAgICAgICAgaWYgKCh0aGlzLmdldENvdW50RnJvbUl0ZW1JbkNhcnQoaXRlbS5wcm9kdWN0Q29kZSkgKyBxdWFudGl0eSkgPiBpdGVtLnByb2R1Y3QudmFyaWFudHNbMF0ubWF4aW11bUl0ZW1zUXVhbnRpdHkpIHtcclxuICAgICAgICAgICAgdGhpcy50b2FzdHJTZXJ2aWNlLnNob3coJ21heGltdW0taXRlbXMtcXVhbnRpdHknLCB7IHF1YW50aXR5OiBpdGVtLnByb2R1Y3QudmFyaWFudHNbMF0ubWF4aW11bUl0ZW1zUXVhbnRpdHkgfSlcclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICgodGhpcy5nZXRDb3VudEZyb21JdGVtSW5DYXJ0KGl0ZW0ucHJvZHVjdENvZGUpICsgcXVhbnRpdHkpIDwgaXRlbS5wcm9kdWN0LnZhcmlhbnRzWzBdLm1pbmltdW1JdGVtc1F1YW50aXR5KSB7XHJcbiAgICAgICAgICAgIHRoaXMudG9hc3RyU2VydmljZS5zaG93KCdtaW5pbXVtLWl0ZW1zLXF1YW50aXR5JywgeyBxdWFudGl0eTogaXRlbS5wcm9kdWN0LnZhcmlhbnRzWzBdLm1pbmltdW1JdGVtc1F1YW50aXR5IH0pXHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdHJ1ZVxyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgdmFsaWRhdGVQcmljZUFuZENyZWRpdHMgPSAoaXRlbTogQ2FydEl0ZW0sIHF1YW50aXR5OiBudW1iZXIpOiBib29sZWFuID0+IHtcclxuICAgICAgICBjb25zdCBiYWxhbmNlID0gdGhpcy5iYWxhbmNlQ3VzdG9tZXJTdWJqZWN0LnZhbHVlO1xyXG5cclxuICAgICAgICBpZiAoIWJhbGFuY2UgfHwgYmFsYW5jZS5jcmVkaXRBbW91bnQgPT09IG51bGwgfHwgYmFsYW5jZS5jcmVkaXRBbW91bnQgPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChiYWxhbmNlLmFsbG93QW55UGF5bWVudE1ldGhvZCkge1xyXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChiYWxhbmNlLnJlbWFpbmluZ0NyZWRpdHMgPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb25zdCB1bml0UHJpY2UgPSBpdGVtLnRvdGFsIC8gaXRlbS5xdWFudGl0eTtcclxuICAgICAgICBjb25zdCBhZGRpdGlvbmFsUXVhbnRpdHkgPSBxdWFudGl0eSAtIGl0ZW0ucXVhbnRpdHk7XHJcblxyXG4gICAgICAgIGlmIChhZGRpdGlvbmFsUXVhbnRpdHkgPD0gMCkge1xyXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbnN0IGFkZGl0aW9uYWxDb3N0ID0gdW5pdFByaWNlICogYWRkaXRpb25hbFF1YW50aXR5O1xyXG5cclxuICAgICAgICBpZiAoYWRkaXRpb25hbENvc3QgPiBiYWxhbmNlLnJlbWFpbmluZ0NyZWRpdHMpIHtcclxuICAgICAgICAgICAgdGhpcy50b2FzdHJTZXJ2aWNlLnNob3coJ25vdC1lbm91Z2gtY3JlZGl0cycpO1xyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH07XHJcblxyXG4gICAgcHVibGljIGhhc1N1ZmZpY2llbnRDcmVkaXRzRm9yQ2FydFRvdGFsID0gKCk6IGJvb2xlYW4gPT4ge1xyXG4gICAgICAgIGNvbnN0IGJhbGFuY2UgPSB0aGlzLmJhbGFuY2VDdXN0b21lclN1YmplY3QudmFsdWU7XHJcblxyXG4gICAgICAgIGlmICghYmFsYW5jZSB8fCBiYWxhbmNlLmNyZWRpdEFtb3VudCA9PT0gbnVsbCB8fCBiYWxhbmNlLmNyZWRpdEFtb3VudCA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKGJhbGFuY2UucmVtYWluaW5nQ3JlZGl0cyA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh0aGlzLmNhcnRTdWJqZWN0LnZhbHVlLnRvdGFscy50b3RhbCA+IGJhbGFuY2UuY3JlZGl0QW1vdW50KSB7XHJcbiAgICAgICAgICAgIHRoaXMudG9hc3RyU2VydmljZS5zaG93KCdub3QtZW5vdWdoLWNyZWRpdHMnKTtcclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9O1xyXG5cclxuICAgIGNhbGN1bGF0ZVN0b2NrQ291bnRzID0gKGl0ZW06IENhcnRJdGVtLCBxdWFudGl0eSkgPT4ge1xyXG4gICAgICAgIGlmIChpdGVtLnByb2R1Y3Quc3RvY2sgPCBpdGVtLnF1YW50aXR5ICsgcXVhbnRpdHkpIHtcclxuICAgICAgICAgICAgLy8gdGhpcy50b2FzdHJTZXJ2aWNlLnNob3coJ291dC1vZi1zdG9jaycpO1xyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2VcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRydWVcclxuICAgIH1cclxuXHJcbiAgICBkZWxldGVDYXJ0SXRlbSA9IChpdGVtLCB0b2FzdCA9IHRydWUpID0+IHtcclxuICAgICAgICBsZXQgaWRfYnVzY2FkbyA9IHRoaXMuZmluZEl0ZW1CeUlkVmFyaWFudChpdGVtLnZhcmlhbnRfaWQpXHJcbiAgICAgICAgdGhpcy5yZXF1ZXN0SW5Qcm9jZXNzLm5leHQodHJ1ZSk7XHJcbiAgICAgICAgLy8gICAgdGhpcy5jb25uZWN0aW9uLnBvc3QodGhpcy5hZGRJdGVtQXBpKCksIHsgcHJvZHVjdENvZGU6IGl0ZW0ucHJvZHVjdC5pZCwgcXVhbnRpdHk6IDAsIHZhcmlhbnRDb2RlOiBpdGVtLnZhcmlhbnRfaWQsIGlkOiAnJywgb3JkZXJfaXRlbV9pZDogaXRlbS5pdGVtX2lkLCBsb3RfcXVhbnRpdHk6ICcnLCB1bml0X3ByaWNlOiAnJywgdW5pdF90b3RhbDogJycsIGFqdXN0ZW1lbnRfdG90YWw6ICcnLCB0b3RhbF9sb3Q6ICcnLCBsb3Rfc3RhdHVzOiAnJywgZGF0ZV9yZXF1ZXN0OiAnJywgbm90ZXM6ICAnJywgc2hpcHBpbmdfYWRkcmVzc19pZDogJycsIHNoaXBwaW5nX2FkZHJlc3NfbmFtZTogJycsIGFjdGlvbjogICdkZWxldGVvcmRlcml0ZW0nfSlcclxuICAgICAgICAvLyAgICAgICAgLnN1YnNjcmliZShcclxuICAgICAgICAvLyAgICAgICAgICAgIHJlcyA9PiB0aGlzLnJlbW92ZUNhcnRJdGVtKHJlcywgaXRlbSwgdG9hc3QpLFxyXG4gICAgICAgIC8vICAgICAgICAgICAgZXJyID0+IHRoaXMuaGFuZGxlRXJyb3IoZXJyKVxyXG4gICAgICAgIC8vICAgICAgICApO1xyXG4gICAgICAgIHRoaXMuY29ubmVjdGlvbi5kZWxldGUodGhpcy5kZWxldGVJdGVtQXBpKGlkX2J1c2NhZG8pKS5zdWJzY3JpYmUoXHJcbiAgICAgICAgICAgIHJlcyA9PiB7IHRoaXMucmVtb3ZlQ2FydEl0ZW0ocmVzLCBpdGVtLCB0b2FzdCk7IHRoaXMucmVxdWVzdEluUHJvY2Vzcy5uZXh0KGZhbHNlKTsgfSxcclxuICAgICAgICAgICAgZXJyID0+IHsgdGhpcy5oYW5kbGVFcnJvcihlcnIpOyB0aGlzLnJlcXVlc3RJblByb2Nlc3MubmV4dChmYWxzZSk7IH0sXHJcbiAgICAgICAgKVxyXG4gICAgfVxyXG5cclxuICAgIGNsZWFyQ2FydCgpIHtcclxuICAgICAgICAvL3NvbHVjaW9uIHByb3Zpc2FvcmlhXHJcbiAgICAgICAgbGV0IGl0ZW1zID0gWy4uLnRoaXMuaXRlbXNdXHJcbiAgICAgICAgd2hpbGUgKGl0ZW1zICYmIGl0ZW1zLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgdGhpcy5kZWxldGVDYXJ0SXRlbShpdGVtcy5wb3AoKSwgZmFsc2UpXHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vdGhpcy5yZXNldENhcnQodGhpcy5nZXRDYXJ0KTtcclxuICAgIH1cclxuXHJcbiAgICBjbGVhckFuZFJlc2V0Q2FydCgpIHtcclxuICAgICAgICB0aGlzLnJlc2V0Q2FydCh0aGlzLmdldENhcnQpO1xyXG4gICAgfVxyXG5cclxuICAgIGNsZWFyQW5kUmVzZXRDdXN0b21lckNhcnQoKSB7XHJcbiAgICAgICAgY29uc29sZS5sb2coXCJDbGVhcmluZyBhbmQgcmVzZXRpbmcuLi5cIilcclxuICAgICAgICB0aGlzLnJlc2V0Q2FydCh0aGlzLmdldENhcnRCeUN1c3RvbWVyKVxyXG4gICAgfVxyXG5cclxuICAgIGhhbmRsZUVycm9yID0gKGVycm9yOiB7IGVycm9yOiBzdHJpbmcgfSkgPT4ge1xyXG4gICAgICAgIHRoaXMudG9hc3RyU2VydmljZS5zaG93KCdvcGVyYXRpb24tZXJyb3ItcGFyYW0nKTtcclxuICAgICAgICB0aGlzLnJlcXVlc3RJblByb2Nlc3MubmV4dChmYWxzZSk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0Q291bnRGcm9tSXRlbUluQ2FydCA9IChjb2RlVmFyaWFudCk6IG51bWJlciA9PiB0aGlzLml0ZW1zLmZpbmQoaXRlbSA9PiBpdGVtLnZhcmlhbnRfaWQgPT0gY29kZVZhcmlhbnQpPy5xdWFudGl0eSB8fCAwO1xyXG5cclxuICAgIGZpbmRJdGVtQnlJZFZhcmlhbnQgPSAodmFyaWFudF9pZCkgPT4gdGhpcy5pdGVtcy5maW5kKGl0ZW0gPT4gaXRlbS52YXJpYW50X2lkID09IHZhcmlhbnRfaWQpLml0ZW1faWRcclxuXHJcbiAgICBmaW5kSXRlbSA9IChwcm9kdWN0X2lkKSA9PiB0aGlzLml0ZW1zLmZpbmQoaXRlbSA9PiBpdGVtLnByb2R1Y3QuaWQgPT0gcHJvZHVjdF9pZCk7XHJcblxyXG4gICAgLyoqIERBVEEgRk9SIE9USEVSIFNFUlZJQ0VTICovXHJcbiAgICBnZXRDYXJ0VG9rZW4gPSAoKSA9PiB0aGlzLmNhcnRfdG9rZW47XHJcblxyXG4gICAgZ2V0TG9jYWxlID0gKCkgPT4gdGhpcy5sb2NhbGU7XHJcblxyXG4gICAgZ2V0VG90YWxBbW91bnQgPSAoKTogT2JzZXJ2YWJsZTxudW1iZXI+ID0+XHJcbiAgICAgICAgdGhpcy5jYXJ0LnBpcGUobWFwKChjYXJ0KSA9PiBjYXJ0Py50b3RhbHM/LnRvdGFsKSk7XHJcblxyXG4gICAgZ2V0Q291bnRDYXJ0SXRlbXMgPSAoKTogT2JzZXJ2YWJsZTxudW1iZXI+ID0+XHJcbiAgICAgICAgdGhpcy5jYXJ0SXRlbXMucGlwZShtYXAoKGNhcnRJdGVtcykgPT4gY2FydEl0ZW1zPy5sZW5ndGgpKTtcclxuXHJcbiAgICBnZXRUYXhlc0Ftb3VudCA9ICgpOiBPYnNlcnZhYmxlPG51bWJlcj4gPT5cclxuICAgICAgICB0aGlzLmNhcnQucGlwZShtYXAoKGNhcnQpID0+IGNhcnQ/LnRvdGFscz8udGF4ZXMgPiAwID8gY2FydD8udG90YWxzPy50YXhlcyA6IDApKTtcclxuXHJcbiAgICBnZXRTdWJUb3RhbEFtb3VudCA9ICgpOiBPYnNlcnZhYmxlPG51bWJlcj4gPT5cclxuICAgICAgICB0aGlzLmNhcnQucGlwZShtYXAoKGNhcnQpID0+IGNhcnQ/LnRvdGFscz8uc3VidG90YWwpKTtcclxuXHJcbiAgICB0b0RlY2ltYWwgPSAodG90YWwpID0+ICh0b3RhbCAtIE1hdGguZmxvb3IodG90YWwpID09IDApID8gdG90YWwgLyAxMDAgOiB0b3RhbFxyXG5cclxuICAgIGdldERpc2NvdW50KCk6IE9ic2VydmFibGU8bnVtYmVyPiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuY2FydEl0ZW1zLnBpcGUobWFwKChwcm9kdWN0KSA9PiB7XHJcbiAgICAgICAgICAgIGxldCB0b3RhbCA9IHRoaXMuaXRlbXMucmVkdWNlKChwcmV2LCBjdXJyKSA9PiB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gcHJldiArIGN1cnIucHJvZHVjdC5zYWxlcHJpY2UgKiBjdXJyLnF1YW50aXR5O1xyXG4gICAgICAgICAgICB9LCAwKTtcclxuICAgICAgICAgICAgbGV0IHN1YnRvdGFsID0gdGhpcy5pdGVtcy5yZWR1Y2UoKHByZXYsIGN1cnIpID0+IHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBwcmV2ICsgY3Vyci5wcm9kdWN0LnByaWNlICogY3Vyci5xdWFudGl0eTtcclxuICAgICAgICAgICAgfSwgMCk7XHJcbiAgICAgICAgICAgIHJldHVybiBzdWJ0b3RhbCAtIHRvdGFsO1xyXG4gICAgICAgIH0pKTtcclxuICAgIH1cclxuXHJcbiAgICBhZGRDb3Vwb24gPSBhc3luYyAoY29kZSk6IFByb21pc2U8YW55PiA9PiB7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgbGV0IHJlc3VsdCA9IGF3YWl0IHRoaXMuY29ubmVjdGlvbi5wdXQodGhpcy5jb3Vwb25BcGkoKSwgeyBjb3Vwb246IGNvZGUgfSkudG9Qcm9taXNlKCk7XHJcbiAgICAgICAgICAgIGlmIChyZXN1bHQuZXJyb3IgfHwgcmVzdWx0LmVycm9ycykgcmV0dXJuIHsgZXJyb3I6IHRydWUsIG1lc3NhZ2U6ICdpbnZhbGlkLWNvdXBvbicgfTtcclxuICAgICAgICAgICAgdGhpcy51cGRhdGVDYXJ0T2JqKHJlc3VsdCwgZmFsc2UpO1xyXG4gICAgICAgICAgICByZXR1cm4geyBlcnJvcjogZmFsc2UsIG1lc3NhZ2U6ICdvaycgfTtcclxuICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB7IGVycm9yOiB0cnVlLCBtZXNzYWdlOiAnaW52YWxpZC1jb3Vwb24nIH07XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHJlbW92ZUNvdXBvbiA9IGFzeW5jICgpID0+IHRoaXMuY29ubmVjdGlvbi5kZWxldGUodGhpcy5jb3Vwb25BcGkoKSkucGlwZShtYXAocmVzID0+IHRoaXMudXBkYXRlQ2FydE9iaihyZXMsIGZhbHNlKSkpLnRvUHJvbWlzZSgpO1xyXG5cclxuICAgIGZvcm1hdENvdXBvbiA9IChjYXJ0KSA9PiB7XHJcbiAgICAgICAgbGV0IGN1cnJlbnRfY291cG9uID0gdGhpcy5jb3Vwb25TdWJqZWN0LnZhbHVlO1xyXG4gICAgICAgIGxldCBjb3Vwb246IENvdXBvbkkgPSB7IGNvZGU6IGNhcnQuY291cG9uQ29kZSB9O1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGtleSA9IE9iamVjdC5rZXlzKGNhcnQuY2FydERpc2NvdW50cylbMF07XHJcbiAgICAgICAgICAgIGNvdXBvbiA9IHtcclxuICAgICAgICAgICAgICAgIC4uLmNvdXBvbixcclxuICAgICAgICAgICAgICAgIGFtb3VudDogKGNhcnQuY2FydERpc2NvdW50cyAmJiBjYXJ0LmNhcnREaXNjb3VudHNba2V5XS5hbW91bnQuY3VycmVudCkgfHwgMCxcclxuICAgICAgICAgICAgICAgIG5hbWU6IChjYXJ0LmNhcnREaXNjb3VudHMgJiYgY2FydC5jYXJ0RGlzY291bnRzW2tleV0ubmFtZSkgfHwgJ25vLW5hbWUnXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgfSBjYXRjaCAoZSkgeyB9XHJcbiAgICAgICAgKGNvdXBvbiAhPSBjdXJyZW50X2NvdXBvbikgJiYgdGhpcy5jb3Vwb25TdWJqZWN0Lm5leHQoY291cG9uKTtcclxuICAgIH1cclxuXHJcbiAgICBjaGFuZ2VIYXZlVG9VcGRhdGUgPSAodmFsdWUpID0+IHRoaXMuaGF2ZV90b191cGRhdGUgPSB2YWx1ZTtcclxuXHJcbiAgICByZWFkeUZvckNoZWNrb3V0ID0gKHN1Y2Nlc3NDYWxsYmFjaz86IEZ1bmN0aW9uLCBlcnJvckNhbGxiYWNrPzogRnVuY3Rpb24pOiBDYXJ0QWZmb3JkYWJsZSA9PiB7XHJcbiAgICAgICAgbGV0IGNhcnQgPSB0aGlzLmNhcnRTdWJqZWN0LnZhbHVlO1xyXG4gICAgICAgIGxldCBpdGVtcyA9IHRoaXMuY2FydEl0ZW1zU3ViamVjdC52YWx1ZTtcclxuICAgICAgICBsZXQgcmVzdWx0OiBDYXJ0QWZmb3JkYWJsZSA9IHsgb2s6IHRydWUgfTtcclxuICAgICAgICBpZiAoaXRlbXMubGVuZ3RoIDwgdGhpcy5jaGFubmVsQ29uZmlnLm1pbmltdW1RdWFudGl0eVB1cmNoYXNlSXRlbXMpIHtcclxuICAgICAgICAgICAgcmVzdWx0Lm9rID0gZmFsc2U7IHJlc3VsdC5yZWFzb25zLnB1c2goeyBtZXNzYWdlOiAnbm90LWVub3VnaHQtaXRlbXMnIH0pXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChjYXJ0LnRvdGFscy50b3RhbCA8IHRoaXMuY2hhbm5lbENvbmZpZy5taW5pbXVtUHVyY2hhc2VBbW91bnQpIHtcclxuICAgICAgICAgICAgcmVzdWx0Lm9rID0gZmFsc2U7IHJlc3VsdC5yZWFzb25zLnB1c2goeyBtZXNzYWdlOiAnbm90LWVub3VnaHQtYW1vdW50JyB9KVxyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoc3VjY2Vzc0NhbGxiYWNrIHx8IGVycm9yQ2FsbGJhY2spIHtcclxuICAgICAgICAgICAgcmVzdWx0Lm9rXHJcbiAgICAgICAgICAgICAgICA/IHN1Y2Nlc3NDYWxsYmFjayAmJiBzdWNjZXNzQ2FsbGJhY2soKVxyXG4gICAgICAgICAgICAgICAgOiBlcnJvckNhbGxiYWNrICYmIGVycm9yQ2FsbGJhY2soKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgIH1cclxuXHJcbiAgICB1cGRhdGVJdGVtc09uRXJyb3IgPSAoaXRlbXNXaXRoRXJyb3I6IGFueVtdLCBjb2RlOiBzdHJpbmcpID0+IHtcclxuICAgICAgICAvLyBjb25zb2xlLmxvZyhpdGVtc1dpdGhFcnJvcik7XHJcbiAgICAgICAgLy8gY29uc29sZS5sb2codGhpcy5pdGVtcyk7XHJcbiAgICAgICAgbGV0IGl0ZW1zVXBkYXRlZCA9IHRoaXMuaXRlbXMubWFwKGl0ZW0gPT4ge1xyXG4gICAgICAgICAgICBsZXQgaXRlbVdpdGhFcnJvciA9IGl0ZW1zV2l0aEVycm9yLmZpbmQoZmFpbGVkSXRlbSA9PiBpdGVtLml0ZW1faWQgPT0gZmFpbGVkSXRlbS5pZCk7XHJcbiAgICAgICAgICAgIGlmIChpdGVtV2l0aEVycm9yKSB7XHJcbiAgICAgICAgICAgICAgICBpdGVtLmZhaWxlZCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICBpdGVtLmVycm9yID0gY29kZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gaXRlbTtcclxuICAgICAgICB9KVxyXG4gICAgICAgIC8vIGNvbnNvbGUubG9nKGl0ZW1zVXBkYXRlZCk7XHJcbiAgICAgICAgdGhpcy51cGRhdGVDYXJ0SXRlbXMoaXRlbXNVcGRhdGVkKTtcclxuICAgIH1cclxuXHJcbiAgICBsb2FkQ2FydEJ5VG9rZW4gPSBhc3luYyAodG9rZW46IHN0cmluZykgPT4ge1xyXG4gICAgICAgIHRoaXMuY2FydF90b2tlbiA9IHRva2VuXHJcbiAgICAgICAgbGV0IHJlc3VsdCA9IGF3YWl0IHRoaXMuZ2V0Q2FydEJ5VG9rZW4oKVxyXG4gICAgICAgIHJldHVybiByZXN1bHRcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqICBVVElMU1xyXG4gICAgICovXHJcblxyXG4gICAgdHJhbnNmb3JtSXRlbXMgPSAoc2VydmVyX2l0ZW0pID0+IHNlcnZlcl9pdGVtLm1hcChcclxuICAgICAgICBpdGVtID0+IHtcclxuICAgICAgICAgICAgaXRlbSA9IHtcclxuICAgICAgICAgICAgICAgIHByb2R1Y3Q6IGl0ZW0ucHJvZHVjdCxcclxuICAgICAgICAgICAgICAgIHZhcmlhbnRfaWQ6IGl0ZW0ucHJvZHVjdC52YXJpYW50c1swXS5jb2RlLFxyXG4gICAgICAgICAgICAgICAgbG90OiBpdGVtLm9yZGVySXRlbUxvdCxcclxuICAgICAgICAgICAgICAgIHF1YW50aXR5OiBpdGVtLnF1YW50aXR5LFxyXG4gICAgICAgICAgICAgICAgaXRlbV9pZDogaXRlbS5pZCxcclxuICAgICAgICAgICAgICAgIHRvdGFsOiBpdGVtLnRvdGFsXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgLy8gY29uc29sZS5sb2coaXRlbS5wcm9kdWN0LnZhcmlhbnRzWzBdKTtcclxuICAgICAgICAgICAgLy8gY29uc29sZS5sb2coaXRlbS5wcm9kdWN0LnZhcmlhbnRzWzBdLnNhbGVwcmljZSk7XHJcbiAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKGl0ZW0ucHJvZHVjdC52YXJpYW50c1swXS5wcmljZSk7XHJcbiAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKGl0ZW0ucHJvZHVjdC52YXJpYW50c1swXS5zYWxlcHJpY2UgPiAwID8gaXRlbS5wcm9kdWN0LnZhcmlhbnRzWzBdLnNlbGVwcmljZSA6IGl0ZW0ucHJvZHVjdC52YXJpYW50c1swXS5wcmljZSk7XHJcbiAgICAgICAgICAgIC8vIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICAvLyAgICAgaXRlbS5wcm9kdWN0LnByaWNlID0gaXRlbS50b3RhbCAvIGl0ZW0ucXVhbnRpdHkvLyA/IGl0ZW0ucHJvZHVjdC52YXJpYW50c1swXS5zZWxlcHJpY2UgOiBpdGVtLnByb2R1Y3QudmFyaWFudHNbMF0ucHJpY2U7XHJcbiAgICAgICAgICAgIC8vIH0sIDEwMCk7XHJcbiAgICAgICAgICAgIHJldHVybiBpdGVtO1xyXG4gICAgICAgIH1cclxuICAgIClcclxuXHJcblxyXG4gICAgZ2V0Q3JlZGl0QW1vdW50ID0gKCk6IE9ic2VydmFibGU8bnVtYmVyIHwgbnVsbD4gPT5cclxuICAgICAgICB0aGlzLmJhbGFuY2VDdXN0b21lclN1YmplY3QucGlwZShcclxuICAgICAgICAgICAgbWFwKChiYWxhbmNlQ3VzdG9tZXIpID0+IGJhbGFuY2VDdXN0b21lcj8uY3JlZGl0QW1vdW50ID8/IG51bGwpXHJcbiAgICAgICAgKTtcclxuXHJcbiAgICBnZXRDbGllbnRUYXhlcyA9ICgpOiBPYnNlcnZhYmxlPG51bWJlcj4gPT5cclxuICAgICAgICB0aGlzLmNhcnQucGlwZShtYXAoKGNhcnQpID0+IGNhcnQ/LnRvdGFscz8udGF4ZXMgPiAwID8gY2FydD8udG90YWxzPy5jbGllbnRUYXhlcyA6IDApKTtcclxuXHJcbiAgICBnZXRSZW1haW5pbmdDcmVkaXRzID0gKCk6IE9ic2VydmFibGU8bnVtYmVyPiA9PlxyXG4gICAgICAgIHRoaXMuYmFsYW5jZUN1c3RvbWVyU3ViamVjdC5waXBlKG1hcCgoYmFsYW5jZUN1c3RvbWVyKSA9PiBiYWxhbmNlQ3VzdG9tZXI/LnJlbWFpbmluZ0NyZWRpdHMpKTtcclxuXHJcbiAgICBwdWJsaWMgdXBkYXRlQmFsYW5jZUF0dHJpYnV0ZXMoYmFsYW5jZTogYW55LCB0b3RhbDogbnVtYmVyIHwgbnVsbCA9IG51bGwpIHtcclxuICAgICAgICBpZiAoIWJhbGFuY2UpIHtcclxuICAgICAgICAgICAgdGhpcy5iYWxhbmNlQ3VzdG9tZXJTdWJqZWN0Lm5leHQobnVsbCk7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbnN0IHRvdGFsQW1vdW50ID0gdG90YWwgPz8gMDtcclxuXHJcbiAgICAgICAgY29uc3QgYmFsYW5jZURhdGEgPSB7XHJcbiAgICAgICAgICAgIGFsbG93QW55UGF5bWVudE1ldGhvZDogYmFsYW5jZS5hbGxvd0FueVBheW1lbnRNZXRob2QsXHJcbiAgICAgICAgICAgIGFsbG93RXhjZWVkQmFsYW5jZTogYmFsYW5jZS5hbGxvd0V4Y2VlZEJhbGFuY2UsXHJcbiAgICAgICAgICAgIGNyZWRpdEFtb3VudDogYmFsYW5jZS5jcmVkaXRBbW91bnQsXHJcbiAgICAgICAgICAgIHNob3dNYXg6IGJhbGFuY2Uuc2hvd01heCxcclxuICAgICAgICAgICAgc2hvd1ByaWNlOiBiYWxhbmNlLnNob3dQcmljZSxcclxuICAgICAgICAgICAgcmVtYWluaW5nQ3JlZGl0czpcclxuICAgICAgICAgICAgICAgIGJhbGFuY2UuY3JlZGl0QW1vdW50ICE9IG51bGwgJiYgdG90YWxBbW91bnQgIT0gbnVsbCAmJiBiYWxhbmNlLmNyZWRpdEFtb3VudCA+PSB0b3RhbEFtb3VudFxyXG4gICAgICAgICAgICAgICAgICAgID8gYmFsYW5jZS5jcmVkaXRBbW91bnQgLSB0b3RhbEFtb3VudFxyXG4gICAgICAgICAgICAgICAgICAgIDogMCxcclxuICAgICAgICAgICAgYXBwbHlNYXhPcmRlcnM6IGJhbGFuY2UuYXBwbHlNYXhPcmRlcnMsXHJcbiAgICAgICAgICAgIG1heE9yZGVyczogYmFsYW5jZS5tYXhPcmRlcnNcclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICB0aGlzLmJhbGFuY2VDdXN0b21lclN1YmplY3QubmV4dChiYWxhbmNlRGF0YSk7XHJcbiAgICB9XHJcblxyXG59XHJcbiJdfQ==
@@ -227,7 +227,10 @@ var CheckoutService = /** @class */ (function () {
227
227
  return [4 /*yield*/, this.completeOrder()];
228
228
  case 1:
229
229
  result = _a.sent();
230
- if (result && result.error) {
230
+ if (!result ||
231
+ result.error ||
232
+ result.code === 'insufficient_credit' ||
233
+ result.code === 'error') {
231
234
  this.cartService.changeHaveToUpdate(false);
232
235
  this.loadingSubject.next(false);
233
236
  return [2 /*return*/, ({ ok: false, require_login: true, message: 'not-completed' })];
@@ -313,4 +316,4 @@ var CheckoutService = /** @class */ (function () {
313
316
  return CheckoutService;
314
317
  }());
315
318
  export { CheckoutService };
316
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hlY2tvdXQuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiJuZzovL25nLWVhc3ljb21tZXJjZS8iLCJzb3VyY2VzIjpbImxpYi9zZXJ2aWNlcy9jaGVja291dC9jaGVja291dC5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQVUsTUFBTSxlQUFlLENBQUM7QUFDbkQsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDakUsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzlDLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUM5QyxPQUFPLEVBQUUsZUFBZSxFQUFFLGFBQWEsRUFBRSxhQUFhLEVBQUUsUUFBUSxFQUFFLEVBQUUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUVuRixPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFFbkQsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDckUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDeEQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBRTlDLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQzlELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFRLE1BQU0sZ0JBQWdCLENBQUM7QUFDMUQsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3pDLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUN6RCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sdUJBQXVCLENBQUM7Ozs7Ozs7QUFLbEQ7SUErQkkseUJBQW9CLFVBQTZCLEVBQ3JDLFdBQXdCLEVBQ3hCLE1BQWlCLEVBQ2pCLGFBQTJCLEVBQzNCLFVBQStCLEVBQy9CLGdCQUFrQyxFQUNuQyxXQUF3QixFQUN2QixNQUFjLEVBQ2QsWUFBaUMsRUFDakMsU0FBb0I7UUFUaEMsaUJBaUNDO1FBakNtQixlQUFVLEdBQVYsVUFBVSxDQUFtQjtRQUNyQyxnQkFBVyxHQUFYLFdBQVcsQ0FBYTtRQUN4QixXQUFNLEdBQU4sTUFBTSxDQUFXO1FBQ2pCLGtCQUFhLEdBQWIsYUFBYSxDQUFjO1FBQzNCLGVBQVUsR0FBVixVQUFVLENBQXFCO1FBQy9CLHFCQUFnQixHQUFoQixnQkFBZ0IsQ0FBa0I7UUFDbkMsZ0JBQVcsR0FBWCxXQUFXLENBQWE7UUFDdkIsV0FBTSxHQUFOLE1BQU0sQ0FBUTtRQUNkLGlCQUFZLEdBQVosWUFBWSxDQUFxQjtRQUNqQyxjQUFTLEdBQVQsU0FBUyxDQUFXO1FBdENoQyxZQUFPLEdBQUcsY0FBTSxPQUFBLFdBQVcsR0FBRyxLQUFJLENBQUMsTUFBTSxDQUFDLFVBQVUsRUFBRSxHQUFHLFlBQVksR0FBRyxLQUFJLENBQUMsV0FBVyxDQUFDLFlBQVksRUFBRSxFQUF2RixDQUF1RixDQUFDO1FBQ3hHLHlCQUFvQixHQUFHLGNBQU0sT0FBQSxLQUFJLENBQUMsT0FBTyxFQUFFLEdBQUcsVUFBVSxFQUEzQixDQUEyQixDQUFDO1FBQ3pELGtCQUFhLEdBQUcsY0FBTSxPQUFBLEtBQUksQ0FBQyxPQUFPLEVBQUUsR0FBRyxVQUFVLEVBQTNCLENBQTJCLENBQUM7UUFDbEQsa0JBQWEsR0FBRyxVQUFDLE1BQU0sSUFBSyxPQUFBLEtBQUksQ0FBQyxPQUFPLEVBQUUsR0FBRyxXQUFXLEdBQUcsTUFBTSxFQUFyQyxDQUFxQyxDQUFDO1FBQ2xFLGdCQUFXLEdBQUcsY0FBTSxPQUFBLEtBQUksQ0FBQyxPQUFPLEVBQUUsR0FBRyxXQUFXLEVBQTVCLENBQTRCLENBQUM7UUFDakQsdUJBQWtCLEdBQUcsY0FBTSxPQUFBLEVBQUUsRUFBRixDQUFFLENBQUM7UUFDOUIscUJBQWdCLEdBQUcsY0FBTSxPQUFBLFdBQVcsR0FBRyxLQUFJLENBQUMsTUFBTSxDQUFDLFVBQVUsRUFBRSxHQUFHLGdCQUFnQixHQUFHLEtBQUksQ0FBQyxXQUFXLENBQUMsWUFBWSxFQUFFLEdBQUcsYUFBYSxFQUEzRyxDQUEyRyxDQUFDO1FBQ3JJLDZCQUF3QixHQUFHLGNBQU0sT0FBQSxXQUFXLEdBQUcsS0FBSSxDQUFDLE1BQU0sQ0FBQyxVQUFVLEVBQUUsR0FBRyxTQUFTLEdBQUcsS0FBSSxDQUFDLFdBQVcsQ0FBQyxZQUFZLEVBQUUsR0FBRywwQkFBMEIsRUFBakgsQ0FBaUgsQ0FBQztRQUUzSSx1QkFBa0IsR0FBRyxJQUFJLGFBQWEsRUFBVyxDQUFDO1FBQ2xELG1CQUFjLEdBQUcsSUFBSSxlQUFlLENBQVUsS0FBSyxDQUFDLENBQUM7UUFFckQsaUJBQVksR0FBRyxJQUFJLGVBQWUsQ0FBUyxJQUFJLENBQUMsQ0FBQztRQUNqRCxtQkFBYyxHQUFHLElBQUksZUFBZSxDQUFVLEtBQUssQ0FBQyxDQUFDO1FBQ3JELGlCQUFZLEdBQUcsSUFBSSxlQUFlLENBQU0sSUFBSSxDQUFDLENBQUM7UUFDOUMseUJBQW9CLEdBQUcsSUFBSSxlQUFlLENBQWlCLElBQUksQ0FBQyxDQUFDO1FBRWpFLGtCQUFhLEdBQVEsRUFBRSxDQUFDO1FBS3pCLFdBQU0sR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLFlBQVksRUFBRSxDQUFDO1FBQzFDLFdBQU0sR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLFlBQVksRUFBRSxDQUFDO1FBQzFDLGFBQVEsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLFlBQVksRUFBRSxDQUFDO1FBQzlDLGlCQUFZLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixDQUFDLFlBQVksRUFBRSxDQUFDO1FBQ3RELG1CQUFjLEdBQUcsSUFBSSxDQUFDLG9CQUFvQixDQUFDLFlBQVksRUFBRSxDQUFDO1FBQzFELGFBQVEsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLFlBQVksRUFBRSxDQUFDO1FBd0NyRCxnQkFBVyxHQUFHLFVBQUMsS0FBSyxJQUFLLE9BQUEsS0FBSyxJQUFJLEtBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUF0QyxDQUFzQyxDQUFDO1FBRWhFLGdCQUFXLEdBQUcsVUFBQyxTQUFvQjtZQUMvQixJQUFJLFdBQVcsR0FBRyxLQUFJLENBQUMsWUFBWSxDQUFDLFFBQVEsRUFBRSxDQUFDLElBQUksQ0FBQyxVQUFBLElBQUksSUFBSSxPQUFBLElBQUksQ0FBQyxJQUFJLElBQUksU0FBUyxFQUF0QixDQUFzQixDQUFDLENBQUM7WUFDcEYsT0FBTyxDQUFDLFdBQVcsSUFBSSxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDN0MsQ0FBQyxDQUFBO1FBRUQsYUFBUSxHQUFHLFVBQUMsS0FBYyxFQUFFLFVBQWlCO1lBQWpCLDJCQUFBLEVBQUEsaUJBQWlCO1lBQ3pDLElBQUksV0FBVyxHQUFHLEVBQUUsQ0FBQztZQUNyQixLQUFLLENBQUMsT0FBTyxDQUFDLFVBQUMsSUFBSSxFQUFFLENBQUMsSUFBSyxPQUFBLFdBQVcsQ0FBQyxJQUFJLENBQUMsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsUUFBUSxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBL0QsQ0FBK0QsQ0FBQyxDQUFDO1lBQzVGLEtBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1lBRXBDLHlCQUF5QjtZQUN6QixRQUFRLENBQUM7Z0JBQ0wsRUFBRSxFQUFFLEtBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxFQUFFLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxjQUFNLE9BQUEsRUFBRSxDQUFDLElBQUksQ0FBQyxFQUFSLENBQVEsQ0FBQyxDQUFDO2dCQUMzRCxRQUFRLEVBQUUsS0FBSSxDQUFDLFNBQVMsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLGNBQU0sT0FBQSxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQVIsQ0FBUSxDQUFDLENBQUM7YUFDMUUsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxVQUFBLE9BQU87O2dCQUNoQixJQUFNLE1BQU0sR0FBRztvQkFDWCxFQUFFLEVBQUUsT0FBQSxPQUFPLENBQUMsRUFBRSwwQ0FBRSxFQUFFLEtBQUksU0FBUztvQkFDL0IsT0FBTyxFQUFFLE9BQUEsT0FBTyxDQUFDLFFBQVEsMENBQUUsT0FBTyxLQUFJLFNBQVM7b0JBQy9DLElBQUksRUFBRSxPQUFBLE9BQU8sQ0FBQyxRQUFRLDBDQUFFLElBQUksS0FBSSxTQUFTO2lCQUM1QyxDQUFDO2dCQUVGLElBQU0sV0FBVyxHQUFHLElBQUksZUFBZSxDQUFDLE1BQU0sQ0FBQyxDQUFDLFFBQVEsRUFBRSxDQUFDO2dCQUMzRCxJQUFNLGFBQWEsR0FBTSxLQUFJLENBQUMsd0JBQXdCLEVBQUUsU0FBSSxXQUFhLENBQUM7Z0JBRTFFLEtBQUksQ0FBQyxVQUFVLENBQUMsa0JBQWtCLENBQUMsYUFBYSxDQUFDLENBQUMsU0FBUyxFQUFFLENBQUMsSUFBSSxDQUM5RCxVQUFBLEdBQUc7O29CQUNDLEtBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxTQUFTLENBQUMsZUFBZSx3QkFDeEMsS0FBSSxDQUFDLFNBQVMsS0FDakIsUUFBUSxRQUFFLEtBQUksQ0FBQyxTQUFTLDBDQUFFLFFBQVEsRUFDbEMsS0FBSyxRQUFFLEtBQUksQ0FBQyxTQUFTLDBDQUFFLEtBQUssSUFDOUIsQ0FBQztnQkFDUCxDQUFDLENBQ0osQ0FBQztZQUNOLENBQUMsQ0FBQyxDQUFDO1FBQ1AsQ0FBQyxDQUFBO1FBRUQsaUJBQVksR0FBRyxVQUFPLFdBQVcsRUFBRSxJQUFJLEVBQUUsS0FBTSxFQUFFLFNBQVU7Ozs7NEJBQ3ZELHFCQUFNLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxXQUFXLENBQUMsRUFBQTs7d0JBQTNDLFNBQTJDLENBQUM7d0JBQzVDLFVBQVUsQ0FBQzs0QkFDUCxJQUFJLEtBQUssR0FBRyxLQUFJLENBQUMsWUFBWSxDQUFDLFFBQVEsRUFBRSxDQUFDOzRCQUN6QyxLQUFLLENBQUMsSUFBSSxDQUFDLFVBQUEsSUFBSSxJQUFJLE9BQUEsSUFBSSxDQUFDLFFBQVEsSUFBSSxXQUFXLEVBQTVCLENBQTRCLENBQUMsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7NEJBQzdELEtBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDOzRCQUU5QixJQUFJLEtBQUssRUFBRTtnQ0FDUCxLQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztnQ0FDOUIsS0FBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQzs2QkFDbkM7NEJBRUQsSUFBSSxLQUFJLENBQUMsZUFBZSxFQUFFLEVBQUU7Z0NBQ3hCLElBQUksS0FBSyxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxJQUFJLFVBQVUsRUFBRTtpQ0FDL0M7cUNBQU07b0NBQ0gsVUFBVSxDQUFDO3dDQUNQLEtBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO29DQUNuQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7aUNBQ1g7NkJBQ0o7d0JBRUwsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO3dCQUNSLHNCQUFPLElBQUksRUFBQzs7O2FBQ2YsQ0FBQTtRQUVELGlCQUFZLEdBQUcsVUFBTyxXQUFXOzs7Ozt3QkFDekIsS0FBSyxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsUUFBUSxFQUFFLENBQUM7d0JBQ2pDLHFCQUFNLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxXQUFXLEVBQUUsS0FBSyxFQUFFLEtBQUssQ0FBQyxFQUFBOzt3QkFBakUsS0FBSyxHQUFHLFNBQXlELENBQUM7d0JBQ2xFLEtBQUssQ0FBQyxJQUFJLENBQUMsVUFBQSxJQUFJLElBQUksT0FBQSxJQUFJLENBQUMsUUFBUSxJQUFJLFdBQVcsRUFBNUIsQ0FBNEIsQ0FBQyxDQUFDLEtBQUssRUFBRSxDQUFDO3dCQUN6RCxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQzt3QkFDOUIsc0JBQU8sSUFBSSxFQUFDOzs7YUFDZixDQUFBO1FBRUQsd0JBQW1CLEdBQUcsVUFBQyxXQUFXLEVBQUUsUUFBZSxFQUFFLE1BQWE7WUFBOUIseUJBQUEsRUFBQSxlQUFlO1lBQUUsdUJBQUEsRUFBQSxhQUFhO1lBQzlELElBQUksS0FBSyxHQUFHLEtBQUksQ0FBQyxZQUFZLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDekMsS0FBSyxHQUFHLEtBQUssQ0FBQyxHQUFHLENBQUMsVUFBQyxJQUFJO2dCQUNuQixRQUFRO29CQUNKLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLElBQUksV0FBVyxDQUFDLElBQUksSUFBSSxDQUFDLE9BQU8sRUFBRTtvQkFDbEQsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVEsR0FBRyxXQUFXLENBQUMsSUFBSSxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUE7Z0JBQ3JELE9BQU8sSUFBSSxDQUFDO1lBQ2hCLENBQUMsQ0FBQyxDQUFBO1lBQ0YsTUFBTSxJQUFJLEtBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ3hDLE9BQU8sS0FBSyxDQUFDO1FBQ2pCLENBQUMsQ0FBQTtRQUVELG9CQUFlLEdBQUc7WUFDZCxJQUFJLEtBQUssR0FBRyxLQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQztZQUNwQyxJQUFNLFlBQVksR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLFVBQUEsSUFBSSxJQUFJLE9BQUEsSUFBSSxDQUFDLFNBQVMsRUFBRSxFQUFoQixDQUFnQixDQUFDLENBQUM7WUFDMUQsT0FBTyxDQUFDLFlBQVksQ0FBQztRQUN6QixDQUFDLENBQUE7UUFFRCxnQkFBVyxHQUFHLFVBQUMsU0FBUztZQUNwQixPQUFPLEtBQUksQ0FBQyxZQUFZLENBQUMsUUFBUSxFQUFFLENBQUMsSUFBSSxDQUFDLFVBQUEsSUFBSSxJQUFJLE9BQUEsSUFBSSxDQUFDLElBQUksSUFBSSxTQUFTLEVBQXRCLENBQXNCLENBQUMsQ0FBQyxPQUFPLEVBQUUsQ0FBQTtRQUN0RixDQUFDLENBQUM7UUFFRixhQUFRLEdBQUcsVUFBQyxLQUFLLElBQU8sS0FBSSxDQUFDLEtBQUssR0FBRyxLQUFLLEVBQUUsS0FBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUEsQ0FBQyxDQUFDLENBQUM7UUFDNUUsYUFBUSxHQUFHLGNBQU0sT0FBQSxLQUFJLENBQUMsS0FBSyxJQUFJLEtBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxFQUFyQyxDQUFxQyxDQUFDO1FBRS9DLGtCQUFhLEdBQUcsY0FBTSxPQUFBLEtBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLEtBQUksQ0FBQyxXQUFXLEVBQUUsRUFBRSxFQUFFLEtBQUssRUFBRSxLQUFJLENBQUMsYUFBYSxDQUFDLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSSxDQUFDLGFBQWEsQ0FBQyxLQUFLLElBQUksRUFBRSxFQUFFLENBQUMsQ0FBQyxTQUFTLEVBQUUsRUFBL0gsQ0FBK0gsQ0FBQztRQUU5SixhQUFRLEdBQUc7Ozs7O3dCQUNQLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO3dCQUNsQixxQkFBTSxJQUFJLENBQUMsYUFBYSxFQUFFLEVBQUE7O3dCQUFuQyxNQUFNLEdBQUcsU0FBMEI7d0JBQ3ZDLElBQUksTUFBTSxJQUFJLE1BQU0sQ0FBQyxLQUFLLEVBQUU7NEJBQ3hCLElBQUksQ0FBQyxXQUFXLENBQUMsa0JBQWtCLENBQUMsS0FBSyxDQUFDLENBQUM7NEJBQzNDLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDOzRCQUNoQyxzQkFBTyxDQUFDLEVBQUUsRUFBRSxFQUFFLEtBQUssRUFBRSxhQUFhLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxlQUFlLEVBQUUsQ0FBQyxFQUFDO3lCQUN6RTt3QkFDRCxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDO3dCQUN0QixJQUFJLENBQUMsZ0JBQWdCLENBQUMsU0FBUyxDQUFDLFVBQVUsd0JBQU8sTUFBTSxLQUFFLFFBQVEsRUFBRSxNQUFNLENBQUMsUUFBUSxFQUFFLEtBQUssRUFBRSxNQUFNLENBQUMsS0FBSyxJQUFHLENBQUM7d0JBQzNHLElBQUksQ0FBQyxXQUFXLENBQUMsaUJBQWlCLEVBQUUsQ0FBQzt3QkFDckMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQzt3QkFDcEMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7d0JBQ2hDLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO3dCQUNoQyxzQkFBTyxDQUFDLEVBQUUsRUFBRSxFQUFFLElBQUksRUFBRSxhQUFhLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFDOzs7YUFDNUQsQ0FBQTtRQUVELHdCQUFtQixHQUFHLFVBQUMsSUFBUzs7WUFDNUIsSUFBSSxNQUFNLEdBQUcsS0FBSSxDQUFDLFVBQVUsQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDakQsSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssSUFBSSxDQUFDLEVBQUU7Z0JBQ3hCLElBQUksS0FBSyxnQkFBUSxNQUFNLENBQUMsTUFBTSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBRSxDQUFDO2dCQUM3QyxNQUFNLENBQUMsTUFBTSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsR0FBRztvQkFDeEIsSUFBSSxFQUFFLE9BQU87b0JBQ2IsSUFBSSxFQUFFLE9BQU87b0JBQ2IsTUFBTSxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSztpQkFDNUIsQ0FBQTtnQkFDRCxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO2FBQ3RCO1lBQ0QsSUFBSSxRQUFRLFNBQUcsTUFBTSwwQ0FBRSxJQUFJLENBQUMsVUFBQSxTQUFTLElBQUksT0FBQSxTQUFTLENBQUMsSUFBSSxJQUFJLFVBQVUsRUFBNUIsQ0FBNEIsQ0FBQyxDQUFDO1lBQ3ZFLElBQUksQ0FBQyxRQUFRLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLElBQUksQ0FBQyxFQUFFO2dCQUV4QyxJQUFJLE9BQUEsTUFBTSwwQ0FBRSxNQUFNLEtBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFVBQUEsSUFBSSxJQUFJLE9BQUEsSUFBSSxDQUFDLElBQUksS0FBSyxVQUFVLEVBQXhCLENBQXdCLENBQUMsRUFBRTtvQkFDbEUsSUFBSSxLQUFLLGdCQUFRLE1BQU0sQ0FBQyxNQUFNLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFFLENBQUM7b0JBQzdDLE1BQU0sQ0FBQyxNQUFNLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxHQUFHO3dCQUN4QixJQUFJLEVBQUUsVUFBVTt3QkFDaEIsSUFBSSxFQUFFLFVBQVU7d0JBQ2hCLE1BQU0sRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVE7cUJBQy9CLENBQUE7b0JBQ0QsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztpQkFDdEI7YUFDSjtZQUNELEtBQUksQ0FBQyxvQkFBb0IsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDM0MsQ0FBQyxDQUFBO1FBRUQsb0JBQWUsR0FBRyxjQUFRLENBQUMsQ0FBQTtRQXpLdkIsYUFBYSxDQUFDLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxTQUFTLEVBQUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxVQUFDLEVBQWdCO2dCQUFoQixrQkFBZ0IsRUFBZixhQUFLLEVBQUUsZUFBTztZQUM1RixJQUFJLENBQUMsT0FBTyxJQUFJLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO2dCQUM5QixLQUFJLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFBO2dCQUNsQyxLQUFJLENBQUMsV0FBVyxDQUFDLGNBQWMsRUFBRSxDQUFDLFNBQVMsQ0FBQyxVQUFBLEdBQUc7b0JBQzNDLEtBQUksQ0FBQyxLQUFLLEdBQUcsR0FBRyxDQUFDO2dCQUNyQixDQUFDLENBQUMsQ0FBQzthQUNOO1FBRUwsQ0FBQyxDQUFDLENBQUE7UUFDRixJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsVUFBQSxJQUFJLElBQUksT0FBQSxJQUFJLElBQUksQ0FBQyxLQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxJQUFJLEtBQUksQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsRUFBakUsQ0FBaUUsQ0FBQyxDQUFDO1FBQzNHLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLFVBQUEsS0FBSyxJQUFJLE9BQUEsS0FBSyxJQUFJLEtBQUksQ0FBQyxtQkFBbUIsQ0FBQyxLQUFLLENBQUMsRUFBeEMsQ0FBd0MsQ0FBQyxDQUFBO1FBQ3hFLElBQUksQ0FBQyxXQUFXLENBQUMsY0FBYyxFQUFFLENBQUMsU0FBUyxDQUFDLFVBQUEsSUFBSSxJQUFJLE9BQUEsS0FBSSxDQUFDLElBQUksR0FBRyxJQUFJLEVBQWhCLENBQWdCLENBQUMsQ0FBQTtRQUNyRSxJQUFJLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLFVBQUEsR0FBRyxJQUFJLE9BQUEsR0FBRyxJQUFJLElBQUksRUFBWCxDQUFXLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FDL0QsVUFBQSxHQUFHO1lBQ0MsSUFBSSxHQUFHLENBQUMsSUFBSSxJQUFJLGNBQWMsSUFBSSxHQUFHLENBQUMsSUFBSSxJQUFJLG1EQUFtRCxFQUFFO2dCQUMvRixLQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQTtnQkFDeEMsVUFBVSxDQUFDO29CQUNQLEtBQUksQ0FBQyxNQUFNLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxDQUFBO2dCQUN0QyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUM7YUFDWjtRQUNMLENBQUMsQ0FDSixDQUFBO0lBQ0wsQ0FBQztJQUVELGtDQUFRLEdBQVI7SUFDQSxDQUFDOztnQkFwQytCLGlCQUFpQjtnQkFDeEIsV0FBVztnQkFDaEIsU0FBUztnQkFDRixZQUFZO2dCQUNmLG1CQUFtQjtnQkFDYixnQkFBZ0I7Z0JBQ3RCLFdBQVc7Z0JBQ2YsTUFBTTtnQkFDQSxtQkFBbUI7Z0JBQ3RCLFNBQVM7OztJQXhDdkIsZUFBZTtRQUgzQixVQUFVLENBQUM7WUFDUixVQUFVLEVBQUUsTUFBTTtTQUNyQixDQUFDO09BQ1csZUFBZSxDQXFOM0I7MEJBMU9EO0NBME9DLEFBck5ELElBcU5DO1NBck5ZLGVBQWUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlLCBPbkluaXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgQ29ubmVjdGlvblNlcnZpY2UgfSBmcm9tICcuLi8uLi9hcGkvY29ubmVjdGlvbi5zZXJ2aWNlJztcclxuaW1wb3J0IHsgQ2FydFNlcnZpY2UgfSBmcm9tICcuLi9jYXJ0LnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBDb25zdGFudHMgfSBmcm9tICcuLi8uLi9jb3JlLmNvbnN0cyc7XHJcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgUmVwbGF5U3ViamVjdCwgY29tYmluZUxhdGVzdCwgZm9ya0pvaW4sIG9mIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IFN0ZXBJLCBTdGVwVHlwZUkgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzL3N0ZXAnO1xyXG5pbXBvcnQgeyBTdGVwIH0gZnJvbSAnLi4vLi4vY2xhc3Nlcy9jaGVja291dC9zdGVwJztcclxuaW1wb3J0IHsgQ2hlY2tvdXREYXRhLCBDaGVja291dERhdGFUeXBlIH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcy9jaGVja291dC1kYXRhJztcclxuaW1wb3J0IHsgT3JkZXJVdGlsaXR5U2VydmljZSB9IGZyb20gJy4uLy4uL3V0aWxzL29yZGVyLXV0aWwuc2VydmljZSc7XHJcbmltcG9ydCB7IEFuYWx5dGljc1NlcnZpY2UgfSBmcm9tICcuLi9hbmFseXRpY3Muc2VydmljZSc7XHJcbmltcG9ydCB7IEF1dGhTZXJ2aWNlIH0gZnJvbSAnLi4vYXV0aC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgVXNlciB9IGZyb20gJy4uLy4uL2NsYXNzZXMvdXNlcic7XHJcbmltcG9ydCB7IEVycm9ySGFuZGxlclNlcnZpY2UgfSBmcm9tICcuL2Vycm9yLWhhbmRsZXIuc2VydmljZSc7XHJcbmltcG9ydCB7IGNhdGNoRXJyb3IsIGZpbHRlciwgdGFrZSB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcclxuaW1wb3J0IHsgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcclxuaW1wb3J0IHsgVG9hc3RTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vdXRpbHMvdG9hc3Quc2VydmljZSc7XHJcbmltcG9ydCB7IElwU2VydmljZSB9IGZyb20gJy4uL2lwLWFkZHJlc3Muc2VydmljZSc7XHJcblxyXG5ASW5qZWN0YWJsZSh7XHJcbiAgICBwcm92aWRlZEluOiAncm9vdCdcclxufSlcclxuZXhwb3J0IGNsYXNzIENoZWNrb3V0U2VydmljZSBpbXBsZW1lbnRzIE9uSW5pdCB7XHJcblxyXG4gICAgYmFzZUFwaSA9ICgpID0+ICdzaG9wLWFwaS8nICsgdGhpcy5jb25zdHMuZ2V0Q2hhbm5lbCgpICsgJy9jaGVja291dC8nICsgdGhpcy5jYXJ0U2VydmljZS5nZXRDYXJ0VG9rZW4oKTtcclxuICAgIGdldFBheW1lbnRNZXRob2RzQXBpID0gKCkgPT4gdGhpcy5iYXNlQXBpKCkgKyAnL3BheW1lbnQnO1xyXG4gICAgcHV0QWRkcmVzc0FwaSA9ICgpID0+IHRoaXMuYmFzZUFwaSgpICsgJy9hZGRyZXNzJztcclxuICAgIHB1dFBheW1lbnRBcGkgPSAobWV0aG9kKSA9PiB0aGlzLmJhc2VBcGkoKSArICcvcGF5bWVudC8nICsgbWV0aG9kO1xyXG4gICAgY29tcGxldGVBcGkgPSAoKSA9PiB0aGlzLmJhc2VBcGkoKSArICcvY29tcGxldGUnO1xyXG4gICAgcGVyc2lzdFNoaXBtZW50QXBpID0gKCkgPT4gJyc7XHJcbiAgICBnZXRQcmVmZXJlbmNlQXBpID0gKCkgPT4gJ3Nob3AtYXBpLycgKyB0aGlzLmNvbnN0cy5nZXRDaGFubmVsKCkgKyAnL21lcmNhZG8tcGFnby8nICsgdGhpcy5jYXJ0U2VydmljZS5nZXRDYXJ0VG9rZW4oKSArICcvcHJlZmVyZW5jZSc7XHJcbiAgICBnZXRIYXNQdXJjaGFzZUNvbmRpdGlvbnMgPSAoKSA9PiAnc2hvcC1hcGkvJyArIHRoaXMuY29uc3RzLmdldENoYW5uZWwoKSArICcvY2FydHMvJyArIHRoaXMuY2FydFNlcnZpY2UuZ2V0Q2FydFRva2VuKCkgKyAnL2hhc19wdXJjaGFzZV9jb25kaXRpb25zJztcclxuXHJcbiAgICBwcml2YXRlIGNhbkNoZWNrb3V0U3ViamVjdCA9IG5ldyBSZXBsYXlTdWJqZWN0PGJvb2xlYW4+KCk7XHJcbiAgICBwcml2YXRlIG9uUmVhZHlTdWJqZWN0ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XHJcblxyXG4gICAgcHJpdmF0ZSBzdGF0ZVN1YmplY3QgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PFN0ZXBbXT4obnVsbCk7XHJcbiAgICBwcml2YXRlIGxvYWRpbmdTdWJqZWN0ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XHJcbiAgICBwcml2YXRlIG9yZGVyU3ViamVjdCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8YW55PihudWxsKTtcclxuICAgIHByaXZhdGUgYXNvY2lhdGVkRGF0YVN1YmplY3QgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PENoZWNrb3V0RGF0YVtdPihudWxsKTtcclxuICAgIHByaXZhdGUgb3JkZXI6IGFueTtcclxuICAgIHByaXZhdGUgY2hlY2tvdXRfZGF0YTogYW55ID0ge307XHJcbiAgICBwdWJsaWMgdG90YWw7XHJcbiAgICBwcml2YXRlIGNhcnRMb2NhbDtcclxuICAgIHByaXZhdGUgdXNlcjogVXNlcjtcclxuXHJcbiAgICBwdWJsaWMgb3JkZXIkID0gdGhpcy5vcmRlclN1YmplY3QuYXNPYnNlcnZhYmxlKCk7XHJcbiAgICBwdWJsaWMgc3RhdGUkID0gdGhpcy5zdGF0ZVN1YmplY3QuYXNPYnNlcnZhYmxlKCk7XHJcbiAgICBwdWJsaWMgbG9hZGluZyQgPSB0aGlzLmxvYWRpbmdTdWJqZWN0LmFzT2JzZXJ2YWJsZSgpO1xyXG4gICAgcHVibGljIGNhbkNoZWNrb3V0JCA9IHRoaXMuY2FuQ2hlY2tvdXRTdWJqZWN0LmFzT2JzZXJ2YWJsZSgpO1xyXG4gICAgcHVibGljIGFzb2NpYXRlZERhdGEkID0gdGhpcy5hc29jaWF0ZWREYXRhU3ViamVjdC5hc09ic2VydmFibGUoKTtcclxuICAgIHB1YmxpYyBvblJlYWR5JCA9IHRoaXMub25SZWFkeVN1YmplY3QuYXNPYnNlcnZhYmxlKCk7XHJcblxyXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSBjb25uZWN0aW9uOiBDb25uZWN0aW9uU2VydmljZSxcclxuICAgICAgICBwcml2YXRlIGNhcnRTZXJ2aWNlOiBDYXJ0U2VydmljZSxcclxuICAgICAgICBwcml2YXRlIGNvbnN0czogQ29uc3RhbnRzLFxyXG4gICAgICAgIHByaXZhdGUgdG9hc3RyU2VydmljZTogVG9hc3RTZXJ2aWNlLFxyXG4gICAgICAgIHByaXZhdGUgb3JkZXJVdGlsczogT3JkZXJVdGlsaXR5U2VydmljZSxcclxuICAgICAgICBwcml2YXRlIGFuYWx5dGljc1NlcnZpY2U6IEFuYWx5dGljc1NlcnZpY2UsXHJcbiAgICAgICAgcHVibGljIGF1dGhTZXJ2aWNlOiBBdXRoU2VydmljZSxcclxuICAgICAgICBwcml2YXRlIHJvdXRlcjogUm91dGVyLFxyXG4gICAgICAgIHByaXZhdGUgZXJyb3JIYW5kbGVyOiBFcnJvckhhbmRsZXJTZXJ2aWNlLFxyXG4gICAgICAgIHByaXZhdGUgaXBTZXJ2aWNlOiBJcFNlcnZpY2UpIHtcclxuXHJcbiAgICAgICAgY29tYmluZUxhdGVzdChbdGhpcy5jYXJ0U2VydmljZS5jYXJ0SXRlbXMsIHRoaXMuY2FydFNlcnZpY2UubG9hZGluZ10pLnN1YnNjcmliZSgoW2l0ZW1zLCBsb2FkaW5nXSkgPT4ge1xyXG4gICAgICAgICAgICBpZiAoIWxvYWRpbmcgJiYgaXRlbXMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jYW5DaGVja291dFN1YmplY3QubmV4dCh0cnVlKVxyXG4gICAgICAgICAgICAgICAgdGhpcy5jYXJ0U2VydmljZS5nZXRUb3RhbEFtb3VudCgpLnN1YnNjcmliZShyZXMgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMudG90YWwgPSByZXM7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICB9KVxyXG4gICAgICAgIHRoaXMuY2FydFNlcnZpY2UuY2FydC5zdWJzY3JpYmUoY2FydCA9PiBjYXJ0ICYmICh0aGlzLmNhcnRMb2NhbCA9IGNhcnQpICYmIHRoaXMudXBkYXRlQXNvY2lhdGVkRGF0YShjYXJ0KSk7XHJcbiAgICAgICAgdGhpcy5vcmRlciQuc3Vic2NyaWJlKG9yZGVyID0+IG9yZGVyICYmIHRoaXMudXBkYXRlQXNvY2lhdGVkRGF0YShvcmRlcikpXHJcbiAgICAgICAgdGhpcy5hdXRoU2VydmljZS5nZXRVc2VyUHJvZmlsZSgpLnN1YnNjcmliZSh1c2VyID0+IHRoaXMudXNlciA9IHVzZXIpXHJcbiAgICAgICAgdGhpcy5lcnJvckhhbmRsZXIuZXJyb3IkLnBpcGUoZmlsdGVyKHJlcyA9PiByZXMgIT0gbnVsbCkpLnN1YnNjcmliZShcclxuICAgICAgICAgICAgcmVzID0+IHtcclxuICAgICAgICAgICAgICAgIGlmIChyZXMuY29kZSA9PSAnb3V0X29mX3N0b2NrJyB8fCByZXMuY29kZSA9PSAnaXRlbXNfd2l0aF9wcm9kdWN0X29yX3Byb2R1Y3RfdmFyaWFudF9ub3RfZW5hYmxlZCcpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnRvYXN0clNlcnZpY2Uuc2hvdygncmVkaXJlY3QtY2FydCcpXHJcbiAgICAgICAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlQnlVcmwoJy9jYXJ0JylcclxuICAgICAgICAgICAgICAgICAgICB9LCAyMDAwKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIClcclxuICAgIH1cclxuXHJcbiAgICBuZ09uSW5pdCgpIHtcclxuICAgIH1cclxuXHJcbiAgICB1cGRhdGVPcmRlciA9IChvcmRlcikgPT4gb3JkZXIgJiYgdGhpcy5vcmRlclN1YmplY3QubmV4dChvcmRlcik7XHJcblxyXG4gICAgZ2V0U3RlcERhdGEgPSAoc3RlcF9uYW1lOiBTdGVwVHlwZUkpID0+IHtcclxuICAgICAgICBsZXQgc3RlcF9yZXN1bHQgPSB0aGlzLnN0YXRlU3ViamVjdC5nZXRWYWx1ZSgpLmZpbmQoc3RlcCA9PiBzdGVwLm5hbWUgPT0gc3RlcF9uYW1lKTtcclxuICAgICAgICByZXR1cm4gKHN0ZXBfcmVzdWx0ICYmIHN0ZXBfcmVzdWx0LmRhdGEpO1xyXG4gICAgfVxyXG5cclxuICAgIHNldFN0ZXBzID0gKHN0ZXBzOiBTdGVwSVtdLCBhdXRvaGFuZGxlID0gdHJ1ZSkgPT4ge1xyXG4gICAgICAgIGxldCBmaW5hbF9zdGVwcyA9IFtdO1xyXG4gICAgICAgIHN0ZXBzLmZvckVhY2goKHN0ZXAsIGkpID0+IGZpbmFsX3N0ZXBzLnB1c2gobmV3IFN0ZXAoc3RlcC5uYW1lLCBzdGVwLnByaW9yaXR5IHx8IChpICsgMSkpKSk7XHJcbiAgICAgICAgdGhpcy5zdGF0ZVN1YmplY3QubmV4dChmaW5hbF9zdGVwcyk7XHJcblxyXG4gICAgICAgIC8vIE9idGVuZXIgSVAgeSB1YmljYWNpw7NuXHJcbiAgICAgICAgZm9ya0pvaW4oe1xyXG4gICAgICAgICAgICBpcDogdGhpcy5pcFNlcnZpY2UuZ2V0SXAoKS5waXBlKGNhdGNoRXJyb3IoKCkgPT4gb2YobnVsbCkpKSxcclxuICAgICAgICAgICAgbG9jYXRpb246IHRoaXMuaXBTZXJ2aWNlLmdldExvY2F0aW9uKCkucGlwZShjYXRjaEVycm9yKCgpID0+IG9mKG51bGwpKSlcclxuICAgICAgICB9KS5zdWJzY3JpYmUocmVzdWx0cyA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IHBhcmFtcyA9IHtcclxuICAgICAgICAgICAgICAgIGlwOiByZXN1bHRzLmlwPy5pcCB8fCAndW5rbm93bicsXHJcbiAgICAgICAgICAgICAgICBjb3VudHJ5OiByZXN1bHRzLmxvY2F0aW9uPy5jb3VudHJ5IHx8ICd1bmtub3duJyxcclxuICAgICAgICAgICAgICAgIGNpdHk6IHJlc3VsdHMubG9jYXRpb24/LmNpdHkgfHwgJ3Vua25vd24nXHJcbiAgICAgICAgICAgIH07XHJcblxyXG4gICAgICAgICAgICBjb25zdCBxdWVyeVN0cmluZyA9IG5ldyBVUkxTZWFyY2hQYXJhbXMocGFyYW1zKS50b1N0cmluZygpO1xyXG4gICAgICAgICAgICBjb25zdCB1cmxXaXRoUGFyYW1zID0gYCR7dGhpcy5nZXRIYXNQdXJjaGFzZUNvbmRpdGlvbnMoKX0/JHtxdWVyeVN0cmluZ31gO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5jb25uZWN0aW9uLmdldEVycm9yTm90SGFuZGxlcih1cmxXaXRoUGFyYW1zKS50b1Byb21pc2UoKS50aGVuKFxyXG4gICAgICAgICAgICAgICAgcmVzID0+IHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmFuYWx5dGljc1NlcnZpY2UuY2FsbEV2ZW50KCdjaGVja291dF9pbml0Jywge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAuLi50aGlzLmNhcnRMb2NhbCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVuY3k6IHRoaXMuY2FydExvY2FsPy5jdXJyZW5jeSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHRoaXMuY2FydExvY2FsPy50b3RhbFxyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHNldFN0ZXBSZWFkeSA9IGFzeW5jIChzdGVwX251bWJlciwgZGF0YSwgb3JkZXI/LCBhdXRvbWF0aWM/KSA9PiB7XHJcbiAgICAgICAgYXdhaXQgdGhpcy5yZXN0YXJ0QWxsU3RlcHNGcm9tKHN0ZXBfbnVtYmVyKTtcclxuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgbGV0IHN0ZXBzID0gdGhpcy5zdGF0ZVN1YmplY3QuZ2V0VmFsdWUoKTtcclxuICAgICAgICAgICAgc3RlcHMuZmluZChzdGVwID0+IHN0ZXAucHJpb3JpdHkgPT0gc3RlcF9udW1iZXIpLnJlYWR5KGRhdGEpO1xyXG4gICAgICAgICAgICB0aGlzLnN0YXRlU3ViamVjdC5uZXh0KHN0ZXBzKTtcclxuXHJcbiAgICAgICAgICAgIGlmIChvcmRlcikge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5vcmRlclN1YmplY3QubmV4dChvcmRlcik7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnRvdGFsID0gb3JkZXIudG90YWxzLnRvdGFsO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAodGhpcy5pc0NoZWNrb3V0UmVhZHkoKSkge1xyXG4gICAgICAgICAgICAgICAgaWYgKHN0ZXBzW3N0ZXBzLmxlbmd0aCAtIDFdLm5hbWUgPT0gJ3NoaXBtZW50Jykge1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5vblJlYWR5U3ViamVjdC5uZXh0KHRydWUpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0sIDUwMCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgfSwgMTUwKTtcclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICBzZXRTdGVwRG9pbmcgPSBhc3luYyAoc3RlcF9udW1iZXIpID0+IHtcclxuICAgICAgICBsZXQgc3RlcHMgPSB0aGlzLnN0YXRlU3ViamVjdC5nZXRWYWx1ZSgpO1xyXG4gICAgICAgIHN0ZXBzID0gYXdhaXQgdGhpcy5yZXN0YXJ0QWxsU3RlcHNGcm9tKHN0ZXBfbnVtYmVyLCBmYWxzZSwgZmFsc2UpO1xyXG4gICAgICAgIHN0ZXBzLmZpbmQoc3RlcCA9PiBzdGVwLnByaW9yaXR5ID09IHN0ZXBfbnVtYmVyKS5kb2luZygpO1xyXG4gICAgICAgIHRoaXMuc3RhdGVTdWJqZWN0Lm5leHQoc3RlcHMpO1xyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIHJlc3RhcnRBbGxTdGVwc0Zyb20gPSAoc3RlcF9udW1iZXIsIGluY2x1ZGVkID0gdHJ1ZSwgdXBkYXRlID0gdHJ1ZSkgPT4ge1xyXG4gICAgICAgIGxldCBzdGVwcyA9IHRoaXMuc3RhdGVTdWJqZWN0LmdldFZhbHVlKCk7XHJcbiAgICAgICAgc3RlcHMgPSBzdGVwcy5tYXAoKHN0ZXApID0+IHtcclxuICAgICAgICAgICAgaW5jbHVkZWRcclxuICAgICAgICAgICAgICAgID8gKHN0ZXAucHJpb3JpdHkgPj0gc3RlcF9udW1iZXIpICYmIHN0ZXAucmVzdGFydCgpXHJcbiAgICAgICAgICAgICAgICA6IChzdGVwLnByaW9yaXR5ID4gc3RlcF9udW1iZXIpICYmIHN0ZXAucmVzdGFydCgpXHJcbiAgICAgICAgICAgIHJldHVybiBzdGVwO1xyXG4gICAgICAgIH0pXHJcbiAgICAgICAgdXBkYXRlICYmIHRoaXMuc3RhdGVTdWJqZWN0Lm5leHQoc3RlcHMpO1xyXG4gICAgICAgIHJldHVybiBzdGVwcztcclxuICAgIH1cclxuXHJcbiAgICBpc0NoZWNrb3V0UmVhZHkgPSAoKSA9PiB7XHJcbiAgICAgICAgbGV0IHN0ZXBzID0gdGhpcy5zdGF0ZVN1YmplY3QudmFsdWU7XHJcbiAgICAgICAgY29uc3Qgc3RlcF9taXNzaW5nID0gc3RlcHMuZmluZChzdGVwID0+IHN0ZXAuaXNQZW5kaW5nKCkpO1xyXG4gICAgICAgIHJldHVybiAhc3RlcF9taXNzaW5nO1xyXG4gICAgfVxyXG5cclxuICAgIGlzU3RlcFJlYWR5ID0gKHN0ZXBfbmFtZSkgPT4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnN0YXRlU3ViamVjdC5nZXRWYWx1ZSgpLmZpbmQoc3RlcCA9PiBzdGVwLm5hbWUgPT0gc3RlcF9uYW1lKS5pc1JlYWR5KClcclxuICAgIH07XHJcblxyXG4gICAgc2V0T3JkZXIgPSAob3JkZXIpID0+IHsgdGhpcy5vcmRlciA9IG9yZGVyLCB0aGlzLm9yZGVyU3ViamVjdC5uZXh0KG9yZGVyKSB9O1xyXG4gICAgZ2V0T3JkZXIgPSAoKSA9PiB0aGlzLm9yZGVyIHx8IHRoaXMub3JkZXJTdWJqZWN0LnZhbHVlO1xyXG5cclxuICAgIHByaXZhdGUgY29tcGxldGVPcmRlciA9ICgpID0+IHRoaXMuY29ubmVjdGlvbi5wdXQodGhpcy5jb21wbGV0ZUFwaSgpLCB7IGVtYWlsOiB0aGlzLmNoZWNrb3V0X2RhdGEuZW1haWwsIG5vdGVzOiB0aGlzLmNoZWNrb3V0X2RhdGEubm90ZXMgfHwgJycgfSkudG9Qcm9taXNlKCk7XHJcblxyXG4gICAgY29tcGxldGUgPSBhc3luYyAoKSA9PiB7XHJcbiAgICAgICAgdGhpcy5sb2FkaW5nU3ViamVjdC5uZXh0KHRydWUpO1xyXG4gICAgICAgIGxldCByZXN1bHQgPSBhd2FpdCB0aGlzLmNvbXBsZXRlT3JkZXIoKTtcclxuICAgICAgICBpZiAocmVzdWx0ICYmIHJlc3VsdC5lcnJvcikge1xyXG4gICAgICAgICAgICB0aGlzLmNhcnRTZXJ2aWNlLmNoYW5nZUhhdmVUb1VwZGF0ZShmYWxzZSk7XHJcbiAgICAgICAgICAgIHRoaXMubG9hZGluZ1N1YmplY3QubmV4dChmYWxzZSk7XHJcbiAgICAgICAgICAgIHJldHVybiAoeyBvazogZmFsc2UsIHJlcXVpcmVfbG9naW46IHRydWUsIG1lc3NhZ2U6ICdub3QtY29tcGxldGVkJyB9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5zZXRPcmRlcihyZXN1bHQpO1xyXG4gICAgICAgIHRoaXMuYW5hbHl0aWNzU2VydmljZS5jYWxsRXZlbnQoJ3B1cmNoYXNlJywgeyAuLi5yZXN1bHQsIGN1cnJlbmN5OiByZXN1bHQuY3VycmVuY3ksIHZhbHVlOiByZXN1bHQudG90YWwgfSk7XHJcbiAgICAgICAgdGhpcy5jYXJ0U2VydmljZS5jbGVhckFuZFJlc2V0Q2FydCgpO1xyXG4gICAgICAgIHRoaXMuY2FuQ2hlY2tvdXRTdWJqZWN0Lm5leHQoZmFsc2UpO1xyXG4gICAgICAgIHRoaXMub25SZWFkeVN1YmplY3QubmV4dChmYWxzZSk7XHJcbiAgICAgICAgdGhpcy5sb2FkaW5nU3ViamVjdC5uZXh0KGZhbHNlKTtcclxuICAgICAgICByZXR1cm4gKHsgb2s6IHRydWUsIHJlcXVpcmVfbG9naW46IGZhbHNlLCBtZXNzYWdlOiAnJyB9KTtcclxuICAgIH1cclxuXHJcbiAgICB1cGRhdGVBc29jaWF0ZWREYXRhID0gKGNhcnQ6IGFueSkgPT4ge1xyXG4gICAgICAgIGxldCByZXN1bHQgPSB0aGlzLm9yZGVyVXRpbHMuZ2V0UHJvbW90aW9ucyhjYXJ0KTtcclxuICAgICAgICBpZiAoY2FydC50b3RhbHMudGF4ZXMgIT0gMCkge1xyXG4gICAgICAgICAgICBsZXQgdG90YWwgPSB7IC4uLnJlc3VsdFtyZXN1bHQubGVuZ3RoIC0gMV0gfTtcclxuICAgICAgICAgICAgcmVzdWx0W3Jlc3VsdC5sZW5ndGggLSAxXSA9IHtcclxuICAgICAgICAgICAgICAgIHR5cGU6ICd0YXhlcycsXHJcbiAgICAgICAgICAgICAgICBuYW1lOiAndGF4ZXMnLFxyXG4gICAgICAgICAgICAgICAgYW1vdW50OiBjYXJ0LnRvdGFscy50YXhlc1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJlc3VsdC5wdXNoKHRvdGFsKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgbGV0IHNoaXBtZW50ID0gcmVzdWx0Py5maW5kKHByb21vdGlvbiA9PiBwcm9tb3Rpb24udHlwZSA9PSBcInNoaXBtZW50XCIpO1xyXG4gICAgICAgIGlmICghc2hpcG1lbnQgJiYgY2FydC50b3RhbHMuc2hpcHBpbmcgIT0gMCkge1xyXG5cclxuICAgICAgICAgICAgaWYgKHJlc3VsdD8ubGVuZ3RoICYmICFyZXN1bHQuZmluZChpdGVtID0+IGl0ZW0udHlwZSA9PT0gXCJzaGlwbWVudFwiKSkge1xyXG4gICAgICAgICAgICAgICAgbGV0IHRvdGFsID0geyAuLi5yZXN1bHRbcmVzdWx0Lmxlbmd0aCAtIDFdIH07XHJcbiAgICAgICAgICAgICAgICByZXN1bHRbcmVzdWx0Lmxlbmd0aCAtIDFdID0ge1xyXG4gICAgICAgICAgICAgICAgICAgIHR5cGU6ICdzaGlwbWVudCcsXHJcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogJ3NoaXBtZW50JyxcclxuICAgICAgICAgICAgICAgICAgICBhbW91bnQ6IGNhcnQudG90YWxzLnNoaXBwaW5nXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICByZXN1bHQucHVzaCh0b3RhbCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5hc29jaWF0ZWREYXRhU3ViamVjdC5uZXh0KHJlc3VsdCk7XHJcbiAgICB9XHJcblxyXG4gICAgcmVzdGFydENoZWNrb3V0ID0gKCkgPT4geyB9XHJcblxyXG59XHJcbiJdfQ==
319
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hlY2tvdXQuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiJuZzovL25nLWVhc3ljb21tZXJjZS8iLCJzb3VyY2VzIjpbImxpYi9zZXJ2aWNlcy9jaGVja291dC9jaGVja291dC5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQVUsTUFBTSxlQUFlLENBQUM7QUFDbkQsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDakUsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzlDLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUM5QyxPQUFPLEVBQUUsZUFBZSxFQUFFLGFBQWEsRUFBRSxhQUFhLEVBQUUsUUFBUSxFQUFFLEVBQUUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUVuRixPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFFbkQsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDckUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDeEQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBRTlDLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQzlELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFRLE1BQU0sZ0JBQWdCLENBQUM7QUFDMUQsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3pDLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUN6RCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sdUJBQXVCLENBQUM7Ozs7Ozs7QUFLbEQ7SUErQkks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O2dCQUN4QyxVQUFVLENBQUM7b0JBQ1AsS0FBSSxDQUFDLE1BQU0sQ0FBQyxhQUFhLENBQUMsT0FBTyxDQUFDLENBQUE7Z0JBQ3RDLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQzthQUNaO1FBQ0wsQ0FBQyxDQUNKLENBQUE7SUFDTCxDQUFDO0lBRUQsa0NBQVEsR0FBUjtJQUNBLENBQUM7O2dCQXBDK0IsaUJBQWlCO2dCQUN4QixXQUFXO2dCQUNoQixTQUFTO2dCQUNGLFlBQVk7Z0JBQ2YsbUJBQW1CO2dCQUNiLGdCQUFnQjtnQkFDdEIsV0FBVztnQkFDZixNQUFNO2dCQUNBLG1CQUFtQjtnQkFDdEIsU0FBUzs7O0lBeEN2QixlQUFlO1FBSDNCLFVBQVUsQ0FBQztZQUNSLFVBQVUsRUFBRSxNQUFNO1NBQ3JCLENBQUM7T0FDVyxlQUFlLENBME4zQjswQkEvT0Q7Q0ErT0MsQUExTkQsSUEwTkM7U0ExTlksZUFBZSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUsIE9uSW5pdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBDb25uZWN0aW9uU2VydmljZSB9IGZyb20gJy4uLy4uL2FwaS9jb25uZWN0aW9uLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBDYXJ0U2VydmljZSB9IGZyb20gJy4uL2NhcnQuc2VydmljZSc7XHJcbmltcG9ydCB7IENvbnN0YW50cyB9IGZyb20gJy4uLy4uL2NvcmUuY29uc3RzJztcclxuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBSZXBsYXlTdWJqZWN0LCBjb21iaW5lTGF0ZXN0LCBmb3JrSm9pbiwgb2YgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgU3RlcEksIFN0ZXBUeXBlSSB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMvc3RlcCc7XHJcbmltcG9ydCB7IFN0ZXAgfSBmcm9tICcuLi8uLi9jbGFzc2VzL2NoZWNrb3V0L3N0ZXAnO1xyXG5pbXBvcnQgeyBDaGVja291dERhdGEsIENoZWNrb3V0RGF0YVR5cGUgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzL2NoZWNrb3V0LWRhdGEnO1xyXG5pbXBvcnQgeyBPcmRlclV0aWxpdHlTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vdXRpbHMvb3JkZXItdXRpbC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgQW5hbHl0aWNzU2VydmljZSB9IGZyb20gJy4uL2FuYWx5dGljcy5zZXJ2aWNlJztcclxuaW1wb3J0IHsgQXV0aFNlcnZpY2UgfSBmcm9tICcuLi9hdXRoLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBVc2VyIH0gZnJvbSAnLi4vLi4vY2xhc3Nlcy91c2VyJztcclxuaW1wb3J0IHsgRXJyb3JIYW5kbGVyU2VydmljZSB9IGZyb20gJy4vZXJyb3ItaGFuZGxlci5zZXJ2aWNlJztcclxuaW1wb3J0IHsgY2F0Y2hFcnJvciwgZmlsdGVyLCB0YWtlIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xyXG5pbXBvcnQgeyBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xyXG5pbXBvcnQgeyBUb2FzdFNlcnZpY2UgfSBmcm9tICcuLi8uLi91dGlscy90b2FzdC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgSXBTZXJ2aWNlIH0gZnJvbSAnLi4vaXAtYWRkcmVzcy5zZXJ2aWNlJztcclxuXHJcbkBJbmplY3RhYmxlKHtcclxuICAgIHByb3ZpZGVkSW46ICdyb290J1xyXG59KVxyXG5leHBvcnQgY2xhc3MgQ2hlY2tvdXRTZXJ2aWNlIGltcGxlbWVudHMgT25Jbml0IHtcclxuXHJcbiAgICBiYXNlQXBpID0gKCkgPT4gJ3Nob3AtYXBpLycgKyB0aGlzLmNvbnN0cy5nZXRDaGFubmVsKCkgKyAnL2NoZWNrb3V0LycgKyB0aGlzLmNhcnRTZXJ2aWNlLmdldENhcnRUb2tlbigpO1xyXG4gICAgZ2V0UGF5bWVudE1ldGhvZHNBcGkgPSAoKSA9PiB0aGlzLmJhc2VBcGkoKSArICcvcGF5bWVudCc7XHJcbiAgICBwdXRBZGRyZXNzQXBpID0gKCkgPT4gdGhpcy5iYXNlQXBpKCkgKyAnL2FkZHJlc3MnO1xyXG4gICAgcHV0UGF5bWVudEFwaSA9IChtZXRob2QpID0+IHRoaXMuYmFzZUFwaSgpICsgJy9wYXltZW50LycgKyBtZXRob2Q7XHJcbiAgICBjb21wbGV0ZUFwaSA9ICgpID0+IHRoaXMuYmFzZUFwaSgpICsgJy9jb21wbGV0ZSc7XHJcbiAgICBwZXJzaXN0U2hpcG1lbnRBcGkgPSAoKSA9PiAnJztcclxuICAgIGdldFByZWZlcmVuY2VBcGkgPSAoKSA9PiAnc2hvcC1hcGkvJyArIHRoaXMuY29uc3RzLmdldENoYW5uZWwoKSArICcvbWVyY2Fkby1wYWdvLycgKyB0aGlzLmNhcnRTZXJ2aWNlLmdldENhcnRUb2tlbigpICsgJy9wcmVmZXJlbmNlJztcclxuICAgIGdldEhhc1B1cmNoYXNlQ29uZGl0aW9ucyA9ICgpID0+ICdzaG9wLWFwaS8nICsgdGhpcy5jb25zdHMuZ2V0Q2hhbm5lbCgpICsgJy9jYXJ0cy8nICsgdGhpcy5jYXJ0U2VydmljZS5nZXRDYXJ0VG9rZW4oKSArICcvaGFzX3B1cmNoYXNlX2NvbmRpdGlvbnMnO1xyXG5cclxuICAgIHByaXZhdGUgY2FuQ2hlY2tvdXRTdWJqZWN0ID0gbmV3IFJlcGxheVN1YmplY3Q8Ym9vbGVhbj4oKTtcclxuICAgIHByaXZhdGUgb25SZWFkeVN1YmplY3QgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcclxuXHJcbiAgICBwcml2YXRlIHN0YXRlU3ViamVjdCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8U3RlcFtdPihudWxsKTtcclxuICAgIHByaXZhdGUgbG9hZGluZ1N1YmplY3QgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcclxuICAgIHByaXZhdGUgb3JkZXJTdWJqZWN0ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxhbnk+KG51bGwpO1xyXG4gICAgcHJpdmF0ZSBhc29jaWF0ZWREYXRhU3ViamVjdCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Q2hlY2tvdXREYXRhW10+KG51bGwpO1xyXG4gICAgcHJpdmF0ZSBvcmRlcjogYW55O1xyXG4gICAgcHJpdmF0ZSBjaGVja291dF9kYXRhOiBhbnkgPSB7fTtcclxuICAgIHB1YmxpYyB0b3RhbDtcclxuICAgIHByaXZhdGUgY2FydExvY2FsO1xyXG4gICAgcHJpdmF0ZSB1c2VyOiBVc2VyO1xyXG5cclxuICAgIHB1YmxpYyBvcmRlciQgPSB0aGlzLm9yZGVyU3ViamVjdC5hc09ic2VydmFibGUoKTtcclxuICAgIHB1YmxpYyBzdGF0ZSQgPSB0aGlzLnN0YXRlU3ViamVjdC5hc09ic2VydmFibGUoKTtcclxuICAgIHB1YmxpYyBsb2FkaW5nJCA9IHRoaXMubG9hZGluZ1N1YmplY3QuYXNPYnNlcnZhYmxlKCk7XHJcbiAgICBwdWJsaWMgY2FuQ2hlY2tvdXQkID0gdGhpcy5jYW5DaGVja291dFN1YmplY3QuYXNPYnNlcnZhYmxlKCk7XHJcbiAgICBwdWJsaWMgYXNvY2lhdGVkRGF0YSQgPSB0aGlzLmFzb2NpYXRlZERhdGFTdWJqZWN0LmFzT2JzZXJ2YWJsZSgpO1xyXG4gICAgcHVibGljIG9uUmVhZHkkID0gdGhpcy5vblJlYWR5U3ViamVjdC5hc09ic2VydmFibGUoKTtcclxuXHJcbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlIGNvbm5lY3Rpb246IENvbm5lY3Rpb25TZXJ2aWNlLFxyXG4gICAgICAgIHByaXZhdGUgY2FydFNlcnZpY2U6IENhcnRTZXJ2aWNlLFxyXG4gICAgICAgIHByaXZhdGUgY29uc3RzOiBDb25zdGFudHMsXHJcbiAgICAgICAgcHJpdmF0ZSB0b2FzdHJTZXJ2aWNlOiBUb2FzdFNlcnZpY2UsXHJcbiAgICAgICAgcHJpdmF0ZSBvcmRlclV0aWxzOiBPcmRlclV0aWxpdHlTZXJ2aWNlLFxyXG4gICAgICAgIHByaXZhdGUgYW5hbHl0aWNzU2VydmljZTogQW5hbHl0aWNzU2VydmljZSxcclxuICAgICAgICBwdWJsaWMgYXV0aFNlcnZpY2U6IEF1dGhTZXJ2aWNlLFxyXG4gICAgICAgIHByaXZhdGUgcm91dGVyOiBSb3V0ZXIsXHJcbiAgICAgICAgcHJpdmF0ZSBlcnJvckhhbmRsZXI6IEVycm9ySGFuZGxlclNlcnZpY2UsXHJcbiAgICAgICAgcHJpdmF0ZSBpcFNlcnZpY2U6IElwU2VydmljZSkge1xyXG5cclxuICAgICAgICBjb21iaW5lTGF0ZXN0KFt0aGlzLmNhcnRTZXJ2aWNlLmNhcnRJdGVtcywgdGhpcy5jYXJ0U2VydmljZS5sb2FkaW5nXSkuc3Vic2NyaWJlKChbaXRlbXMsIGxvYWRpbmddKSA9PiB7XHJcbiAgICAgICAgICAgIGlmICghbG9hZGluZyAmJiBpdGVtcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNhbkNoZWNrb3V0U3ViamVjdC5uZXh0KHRydWUpXHJcbiAgICAgICAgICAgICAgICB0aGlzLmNhcnRTZXJ2aWNlLmdldFRvdGFsQW1vdW50KCkuc3Vic2NyaWJlKHJlcyA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy50b3RhbCA9IHJlcztcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgIH0pXHJcbiAgICAgICAgdGhpcy5jYXJ0U2VydmljZS5jYXJ0LnN1YnNjcmliZShjYXJ0ID0+IGNhcnQgJiYgKHRoaXMuY2FydExvY2FsID0gY2FydCkgJiYgdGhpcy51cGRhdGVBc29jaWF0ZWREYXRhKGNhcnQpKTtcclxuICAgICAgICB0aGlzLm9yZGVyJC5zdWJzY3JpYmUob3JkZXIgPT4gb3JkZXIgJiYgdGhpcy51cGRhdGVBc29jaWF0ZWREYXRhKG9yZGVyKSlcclxuICAgICAgICB0aGlzLmF1dGhTZXJ2aWNlLmdldFVzZXJQcm9maWxlKCkuc3Vic2NyaWJlKHVzZXIgPT4gdGhpcy51c2VyID0gdXNlcilcclxuICAgICAgICB0aGlzLmVycm9ySGFuZGxlci5lcnJvciQucGlwZShmaWx0ZXIocmVzID0+IHJlcyAhPSBudWxsKSkuc3Vic2NyaWJlKFxyXG4gICAgICAgICAgICByZXMgPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKHJlcy5jb2RlID09ICdvdXRfb2Zfc3RvY2snIHx8IHJlcy5jb2RlID09ICdpdGVtc193aXRoX3Byb2R1Y3Rfb3JfcHJvZHVjdF92YXJpYW50X25vdF9lbmFibGVkJykge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMudG9hc3RyU2VydmljZS5zaG93KCdyZWRpcmVjdC1jYXJ0JylcclxuICAgICAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGVCeVVybCgnL2NhcnQnKVxyXG4gICAgICAgICAgICAgICAgICAgIH0sIDIwMDApO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgKVxyXG4gICAgfVxyXG5cclxuICAgIG5nT25Jbml0KCkge1xyXG4gICAgfVxyXG5cclxuICAgIHVwZGF0ZU9yZGVyID0gKG9yZGVyKSA9PiBvcmRlciAmJiB0aGlzLm9yZGVyU3ViamVjdC5uZXh0KG9yZGVyKTtcclxuXHJcbiAgICBnZXRTdGVwRGF0YSA9IChzdGVwX25hbWU6IFN0ZXBUeXBlSSkgPT4ge1xyXG4gICAgICAgIGxldCBzdGVwX3Jlc3VsdCA9IHRoaXMuc3RhdGVTdWJqZWN0LmdldFZhbHVlKCkuZmluZChzdGVwID0+IHN0ZXAubmFtZSA9PSBzdGVwX25hbWUpO1xyXG4gICAgICAgIHJldHVybiAoc3RlcF9yZXN1bHQgJiYgc3RlcF9yZXN1bHQuZGF0YSk7XHJcbiAgICB9XHJcblxyXG4gICAgc2V0U3RlcHMgPSAoc3RlcHM6IFN0ZXBJW10sIGF1dG9oYW5kbGUgPSB0cnVlKSA9PiB7XHJcbiAgICAgICAgbGV0IGZpbmFsX3N0ZXBzID0gW107XHJcbiAgICAgICAgc3RlcHMuZm9yRWFjaCgoc3RlcCwgaSkgPT4gZmluYWxfc3RlcHMucHVzaChuZXcgU3RlcChzdGVwLm5hbWUsIHN0ZXAucHJpb3JpdHkgfHwgKGkgKyAxKSkpKTtcclxuICAgICAgICB0aGlzLnN0YXRlU3ViamVjdC5uZXh0KGZpbmFsX3N0ZXBzKTtcclxuXHJcbiAgICAgICAgLy8gT2J0ZW5lciBJUCB5IHViaWNhY2nDs25cclxuICAgICAgICBmb3JrSm9pbih7XHJcbiAgICAgICAgICAgIGlwOiB0aGlzLmlwU2VydmljZS5nZXRJcCgpLnBpcGUoY2F0Y2hFcnJvcigoKSA9PiBvZihudWxsKSkpLFxyXG4gICAgICAgICAgICBsb2NhdGlvbjogdGhpcy5pcFNlcnZpY2UuZ2V0TG9jYXRpb24oKS5waXBlKGNhdGNoRXJyb3IoKCkgPT4gb2YobnVsbCkpKVxyXG4gICAgICAgIH0pLnN1YnNjcmliZShyZXN1bHRzID0+IHtcclxuICAgICAgICAgICAgY29uc3QgcGFyYW1zID0ge1xyXG4gICAgICAgICAgICAgICAgaXA6IHJlc3VsdHMuaXA/LmlwIHx8ICd1bmtub3duJyxcclxuICAgICAgICAgICAgICAgIGNvdW50cnk6IHJlc3VsdHMubG9jYXRpb24/LmNvdW50cnkgfHwgJ3Vua25vd24nLFxyXG4gICAgICAgICAgICAgICAgY2l0eTogcmVzdWx0cy5sb2NhdGlvbj8uY2l0eSB8fCAndW5rbm93bidcclxuICAgICAgICAgICAgfTtcclxuXHJcbiAgICAgICAgICAgIGNvbnN0IHF1ZXJ5U3RyaW5nID0gbmV3IFVSTFNlYXJjaFBhcmFtcyhwYXJhbXMpLnRvU3RyaW5nKCk7XHJcbiAgICAgICAgICAgIGNvbnN0IHVybFdpdGhQYXJhbXMgPSBgJHt0aGlzLmdldEhhc1B1cmNoYXNlQ29uZGl0aW9ucygpfT8ke3F1ZXJ5U3RyaW5nfWA7XHJcblxyXG4gICAgICAgICAgICB0aGlzLmNvbm5lY3Rpb24uZ2V0RXJyb3JOb3RIYW5kbGVyKHVybFdpdGhQYXJhbXMpLnRvUHJvbWlzZSgpLnRoZW4oXHJcbiAgICAgICAgICAgICAgICByZXMgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYW5hbHl0aWNzU2VydmljZS5jYWxsRXZlbnQoJ2NoZWNrb3V0X2luaXQnLCB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC4uLnRoaXMuY2FydExvY2FsLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW5jeTogdGhpcy5jYXJ0TG9jYWw/LmN1cnJlbmN5LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogdGhpcy5jYXJ0TG9jYWw/LnRvdGFsXHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgc2V0U3RlcFJlYWR5ID0gYXN5bmMgKHN0ZXBfbnVtYmVyLCBkYXRhLCBvcmRlcj8sIGF1dG9tYXRpYz8pID0+IHtcclxuICAgICAgICBhd2FpdCB0aGlzLnJlc3RhcnRBbGxTdGVwc0Zyb20oc3RlcF9udW1iZXIpO1xyXG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICBsZXQgc3RlcHMgPSB0aGlzLnN0YXRlU3ViamVjdC5nZXRWYWx1ZSgpO1xyXG4gICAgICAgICAgICBzdGVwcy5maW5kKHN0ZXAgPT4gc3RlcC5wcmlvcml0eSA9PSBzdGVwX251bWJlcikucmVhZHkoZGF0YSk7XHJcbiAgICAgICAgICAgIHRoaXMuc3RhdGVTdWJqZWN0Lm5leHQoc3RlcHMpO1xyXG5cclxuICAgICAgICAgICAgaWYgKG9yZGVyKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLm9yZGVyU3ViamVjdC5uZXh0KG9yZGVyKTtcclxuICAgICAgICAgICAgICAgIHRoaXMudG90YWwgPSBvcmRlci50b3RhbHMudG90YWw7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmICh0aGlzLmlzQ2hlY2tvdXRSZWFkeSgpKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoc3RlcHNbc3RlcHMubGVuZ3RoIC0gMV0ubmFtZSA9PSAnc2hpcG1lbnQnKSB7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm9uUmVhZHlTdWJqZWN0Lm5leHQodHJ1ZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSwgNTAwKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICB9LCAxNTApO1xyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIHNldFN0ZXBEb2luZyA9IGFzeW5jIChzdGVwX251bWJlcikgPT4ge1xyXG4gICAgICAgIGxldCBzdGVwcyA9IHRoaXMuc3RhdGVTdWJqZWN0LmdldFZhbHVlKCk7XHJcbiAgICAgICAgc3RlcHMgPSBhd2FpdCB0aGlzLnJlc3RhcnRBbGxTdGVwc0Zyb20oc3RlcF9udW1iZXIsIGZhbHNlLCBmYWxzZSk7XHJcbiAgICAgICAgc3RlcHMuZmluZChzdGVwID0+IHN0ZXAucHJpb3JpdHkgPT0gc3RlcF9udW1iZXIpLmRvaW5nKCk7XHJcbiAgICAgICAgdGhpcy5zdGF0ZVN1YmplY3QubmV4dChzdGVwcyk7XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgcmVzdGFydEFsbFN0ZXBzRnJvbSA9IChzdGVwX251bWJlciwgaW5jbHVkZWQgPSB0cnVlLCB1cGRhdGUgPSB0cnVlKSA9PiB7XHJcbiAgICAgICAgbGV0IHN0ZXBzID0gdGhpcy5zdGF0ZVN1YmplY3QuZ2V0VmFsdWUoKTtcclxuICAgICAgICBzdGVwcyA9IHN0ZXBzLm1hcCgoc3RlcCkgPT4ge1xyXG4gICAgICAgICAgICBpbmNsdWRlZFxyXG4gICAgICAgICAgICAgICAgPyAoc3RlcC5wcmlvcml0eSA+PSBzdGVwX251bWJlcikgJiYgc3RlcC5yZXN0YXJ0KClcclxuICAgICAgICAgICAgICAgIDogKHN0ZXAucHJpb3JpdHkgPiBzdGVwX251bWJlcikgJiYgc3RlcC5yZXN0YXJ0KClcclxuICAgICAgICAgICAgcmV0dXJuIHN0ZXA7XHJcbiAgICAgICAgfSlcclxuICAgICAgICB1cGRhdGUgJiYgdGhpcy5zdGF0ZVN1YmplY3QubmV4dChzdGVwcyk7XHJcbiAgICAgICAgcmV0dXJuIHN0ZXBzO1xyXG4gICAgfVxyXG5cclxuICAgIGlzQ2hlY2tvdXRSZWFkeSA9ICgpID0+IHtcclxuICAgICAgICBsZXQgc3RlcHMgPSB0aGlzLnN0YXRlU3ViamVjdC52YWx1ZTtcclxuICAgICAgICBjb25zdCBzdGVwX21pc3NpbmcgPSBzdGVwcy5maW5kKHN0ZXAgPT4gc3RlcC5pc1BlbmRpbmcoKSk7XHJcbiAgICAgICAgcmV0dXJuICFzdGVwX21pc3Npbmc7XHJcbiAgICB9XHJcblxyXG4gICAgaXNTdGVwUmVhZHkgPSAoc3RlcF9uYW1lKSA9PiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuc3RhdGVTdWJqZWN0LmdldFZhbHVlKCkuZmluZChzdGVwID0+IHN0ZXAubmFtZSA9PSBzdGVwX25hbWUpLmlzUmVhZHkoKVxyXG4gICAgfTtcclxuXHJcbiAgICBzZXRPcmRlciA9IChvcmRlcikgPT4geyB0aGlzLm9yZGVyID0gb3JkZXIsIHRoaXMub3JkZXJTdWJqZWN0Lm5leHQob3JkZXIpIH07XHJcbiAgICBnZXRPcmRlciA9ICgpID0+IHRoaXMub3JkZXIgfHwgdGhpcy5vcmRlclN1YmplY3QudmFsdWU7XHJcblxyXG4gICAgcHJpdmF0ZSBjb21wbGV0ZU9yZGVyID0gKCkgPT4gdGhpcy5jb25uZWN0aW9uLnB1dCh0aGlzLmNvbXBsZXRlQXBpKCksIHsgZW1haWw6IHRoaXMuY2hlY2tvdXRfZGF0YS5lbWFpbCwgbm90ZXM6IHRoaXMuY2hlY2tvdXRfZGF0YS5ub3RlcyB8fCAnJyB9KS50b1Byb21pc2UoKTtcclxuXHJcbiAgICBjb21wbGV0ZSA9IGFzeW5jICgpID0+IHtcclxuICAgICAgICB0aGlzLmxvYWRpbmdTdWJqZWN0Lm5leHQodHJ1ZSk7XHJcbiAgICAgICAgbGV0IHJlc3VsdCA9IGF3YWl0IHRoaXMuY29tcGxldGVPcmRlcigpO1xyXG4gICAgICAgIGlmIChcclxuICAgICAgICAgICAgIXJlc3VsdCB8fFxyXG4gICAgICAgICAgICByZXN1bHQuZXJyb3IgfHxcclxuICAgICAgICAgICAgcmVzdWx0LmNvZGUgPT09ICdpbnN1ZmZpY2llbnRfY3JlZGl0JyB8fFxyXG4gICAgICAgICAgICByZXN1bHQuY29kZSA9PT0gJ2Vycm9yJ1xyXG4gICAgICAgICkge1xyXG4gICAgICAgICAgICB0aGlzLmNhcnRTZXJ2aWNlLmNoYW5nZUhhdmVUb1VwZGF0ZShmYWxzZSk7XHJcbiAgICAgICAgICAgIHRoaXMubG9hZGluZ1N1YmplY3QubmV4dChmYWxzZSk7XHJcbiAgICAgICAgICAgIHJldHVybiAoeyBvazogZmFsc2UsIHJlcXVpcmVfbG9naW46IHRydWUsIG1lc3NhZ2U6ICdub3QtY29tcGxldGVkJyB9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5zZXRPcmRlcihyZXN1bHQpO1xyXG4gICAgICAgIHRoaXMuYW5hbHl0aWNzU2VydmljZS5jYWxsRXZlbnQoJ3B1cmNoYXNlJywgeyAuLi5yZXN1bHQsIGN1cnJlbmN5OiByZXN1bHQuY3VycmVuY3ksIHZhbHVlOiByZXN1bHQudG90YWwgfSk7XHJcbiAgICAgICAgdGhpcy5jYXJ0U2VydmljZS5jbGVhckFuZFJlc2V0Q2FydCgpO1xyXG4gICAgICAgIHRoaXMuY2FuQ2hlY2tvdXRTdWJqZWN0Lm5leHQoZmFsc2UpO1xyXG4gICAgICAgIHRoaXMub25SZWFkeVN1YmplY3QubmV4dChmYWxzZSk7XHJcbiAgICAgICAgdGhpcy5sb2FkaW5nU3ViamVjdC5uZXh0KGZhbHNlKTtcclxuICAgICAgICByZXR1cm4gKHsgb2s6IHRydWUsIHJlcXVpcmVfbG9naW46IGZhbHNlLCBtZXNzYWdlOiAnJyB9KTtcclxuICAgIH1cclxuXHJcbiAgICB1cGRhdGVBc29jaWF0ZWREYXRhID0gKGNhcnQ6IGFueSkgPT4ge1xyXG4gICAgICAgIGxldCByZXN1bHQgPSB0aGlzLm9yZGVyVXRpbHMuZ2V0UHJvbW90aW9ucyhjYXJ0KTtcclxuICAgICAgICBpZiAoY2FydC50b3RhbHMudGF4ZXMgIT0gMCkge1xyXG4gICAgICAgICAgICBsZXQgdG90YWwgPSB7IC4uLnJlc3VsdFtyZXN1bHQubGVuZ3RoIC0gMV0gfTtcclxuICAgICAgICAgICAgcmVzdWx0W3Jlc3VsdC5sZW5ndGggLSAxXSA9IHtcclxuICAgICAgICAgICAgICAgIHR5cGU6ICd0YXhlcycsXHJcbiAgICAgICAgICAgICAgICBuYW1lOiAndGF4ZXMnLFxyXG4gICAgICAgICAgICAgICAgYW1vdW50OiBjYXJ0LnRvdGFscy50YXhlc1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJlc3VsdC5wdXNoKHRvdGFsKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgbGV0IHNoaXBtZW50ID0gcmVzdWx0Py5maW5kKHByb21vdGlvbiA9PiBwcm9tb3Rpb24udHlwZSA9PSBcInNoaXBtZW50XCIpO1xyXG4gICAgICAgIGlmICghc2hpcG1lbnQgJiYgY2FydC50b3RhbHMuc2hpcHBpbmcgIT0gMCkge1xyXG5cclxuICAgICAgICAgICAgaWYgKHJlc3VsdD8ubGVuZ3RoICYmICFyZXN1bHQuZmluZChpdGVtID0+IGl0ZW0udHlwZSA9PT0gXCJzaGlwbWVudFwiKSkge1xyXG4gICAgICAgICAgICAgICAgbGV0IHRvdGFsID0geyAuLi5yZXN1bHRbcmVzdWx0Lmxlbmd0aCAtIDFdIH07XHJcbiAgICAgICAgICAgICAgICByZXN1bHRbcmVzdWx0Lmxlbmd0aCAtIDFdID0ge1xyXG4gICAgICAgICAgICAgICAgICAgIHR5cGU6ICdzaGlwbWVudCcsXHJcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogJ3NoaXBtZW50JyxcclxuICAgICAgICAgICAgICAgICAgICBhbW91bnQ6IGNhcnQudG90YWxzLnNoaXBwaW5nXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICByZXN1bHQucHVzaCh0b3RhbCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5hc29jaWF0ZWREYXRhU3ViamVjdC5uZXh0KHJlc3VsdCk7XHJcbiAgICB9XHJcblxyXG4gICAgcmVzdGFydENoZWNrb3V0ID0gKCkgPT4geyB9XHJcblxyXG59XHJcbiJdfQ==