ng-easycommerce 0.1.1 → 1.1.3

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.
Files changed (115) hide show
  1. package/README.md +14 -0
  2. package/assets/ec-i18n/ct.json +4 -0
  3. package/assets/ec-i18n/en.json +4 -0
  4. package/assets/ec-i18n/es.json +4 -0
  5. package/assets/ec-i18n/fr.json +4 -0
  6. package/assets/ec-i18n/gl.json +4 -0
  7. package/assets/ec-i18n/pr.json +4 -0
  8. package/bundles/ng-easycommerce.umd.js +5191 -3521
  9. package/bundles/ng-easycommerce.umd.js.map +1 -1
  10. package/bundles/ng-easycommerce.umd.min.js +1 -1
  11. package/bundles/ng-easycommerce.umd.min.js.map +1 -1
  12. package/esm2015/lib/api/connection.service.js +2 -2
  13. package/esm2015/lib/core.consts.js +4 -5
  14. package/esm2015/lib/ec-component/account-ec/order-ec/order-ec.component.js +2 -2
  15. package/esm2015/lib/ec-component/cart-bootstrap-navigation.js +27 -0
  16. package/esm2015/lib/ec-component/cart-ec/cart-ec.component.js +11 -1
  17. package/esm2015/lib/ec-component/checkout-ec/checkout-ec.component.js +28 -3
  18. package/esm2015/lib/ec-component/checkout-ec/dataform-ec/dataform-ec.component.js +185 -13
  19. package/esm2015/lib/ec-component/checkout-ec/detail-checkout-block-ec/detail-checkout-block-ec.component.js +6 -2
  20. package/esm2015/lib/ec-component/checkout-ec/payment-ec/payment-ec.component.js +26 -9
  21. package/esm2015/lib/ec-component/checkout-ec/payment-ec-single/payment-ec-single.component.js +11 -3
  22. package/esm2015/lib/ec-component/checkout-ec/shipment-ec/shipment-ec.component.js +4 -2
  23. package/esm2015/lib/ec-component/coupon-ec/coupon-ec.component.js +6 -1
  24. package/esm2015/lib/guards/able-buyer-guard.service.js +2 -2
  25. package/esm2015/lib/guards/auth-guard.service.js +2 -2
  26. package/esm2015/lib/guards/checkout-ready.service.js +3 -3
  27. package/esm2015/lib/guards/loggedin-guard.service.js +2 -2
  28. package/esm2015/lib/guards/user-role-guard.service.js +2 -2
  29. package/esm2015/lib/interfaces/checkout-data.js +1 -1
  30. package/esm2015/lib/services/account/orders.service.js +6 -4
  31. package/esm2015/lib/services/auth.service.js +4 -3
  32. package/esm2015/lib/services/captcha.service.js +6 -4
  33. package/esm2015/lib/services/cart.service.js +1194 -74
  34. package/esm2015/lib/services/channel-config.service.js +4 -6
  35. package/esm2015/lib/services/checkout/addressing.service.js +65 -9
  36. package/esm2015/lib/services/checkout/checkout.service.js +58 -9
  37. package/esm2015/lib/services/checkout/error-handler.service.js +4 -3
  38. package/esm2015/lib/services/checkout/payment.service.js +35 -15
  39. package/esm2015/lib/services/checkout/shipment.service.js +54 -3
  40. package/esm2015/lib/services/concatenated-associations.service.js +4 -3
  41. package/esm2015/lib/services/currency.service.js +5 -3
  42. package/esm2015/lib/services/filters.service.js +2 -2
  43. package/esm2015/lib/services/footer/footer.service.js +4 -3
  44. package/esm2015/lib/services/gift-card.service.js +56 -5
  45. package/esm2015/lib/services/parameters.service.js +5 -3
  46. package/esm2015/lib/services/reviews.service.js +5 -4
  47. package/esm2015/lib/services/seo.service.js +4 -5
  48. package/esm2015/lib/services/stores.service.js +4 -3
  49. package/esm2015/lib/services/wishlist.service.js +3 -4
  50. package/esm2015/lib/utils/analytics/google-analytics.service.js +1 -1
  51. package/esm2015/lib/utils/order-util.service.js +22 -2
  52. package/esm2015/lib/utils/price-presentation.service.js +2 -3
  53. package/esm2015/lib/utils/shipping-price-display.service.js +2 -3
  54. package/esm5/lib/api/connection.service.js +2 -2
  55. package/esm5/lib/core.consts.js +4 -5
  56. package/esm5/lib/ec-component/account-ec/order-ec/order-ec.component.js +2 -2
  57. package/esm5/lib/ec-component/cart-bootstrap-navigation.js +27 -0
  58. package/esm5/lib/ec-component/cart-ec/cart-ec.component.js +11 -1
  59. package/esm5/lib/ec-component/checkout-ec/checkout-ec.component.js +28 -3
  60. package/esm5/lib/ec-component/checkout-ec/dataform-ec/dataform-ec.component.js +206 -12
  61. package/esm5/lib/ec-component/checkout-ec/detail-checkout-block-ec/detail-checkout-block-ec.component.js +6 -2
  62. package/esm5/lib/ec-component/checkout-ec/payment-ec/payment-ec.component.js +31 -14
  63. package/esm5/lib/ec-component/checkout-ec/payment-ec-single/payment-ec-single.component.js +11 -3
  64. package/esm5/lib/ec-component/checkout-ec/shipment-ec/shipment-ec.component.js +5 -3
  65. package/esm5/lib/ec-component/coupon-ec/coupon-ec.component.js +6 -1
  66. package/esm5/lib/guards/able-buyer-guard.service.js +2 -2
  67. package/esm5/lib/guards/auth-guard.service.js +2 -2
  68. package/esm5/lib/guards/checkout-ready.service.js +3 -3
  69. package/esm5/lib/guards/loggedin-guard.service.js +2 -2
  70. package/esm5/lib/guards/user-role-guard.service.js +2 -2
  71. package/esm5/lib/interfaces/checkout-data.js +1 -1
  72. package/esm5/lib/services/account/orders.service.js +6 -4
  73. package/esm5/lib/services/auth.service.js +4 -3
  74. package/esm5/lib/services/captcha.service.js +6 -4
  75. package/esm5/lib/services/cart.service.js +1243 -94
  76. package/esm5/lib/services/channel-config.service.js +4 -6
  77. package/esm5/lib/services/checkout/addressing.service.js +65 -9
  78. package/esm5/lib/services/checkout/checkout.service.js +65 -13
  79. package/esm5/lib/services/checkout/error-handler.service.js +4 -3
  80. package/esm5/lib/services/checkout/payment.service.js +29 -11
  81. package/esm5/lib/services/checkout/shipment.service.js +58 -7
  82. package/esm5/lib/services/concatenated-associations.service.js +4 -3
  83. package/esm5/lib/services/currency.service.js +5 -3
  84. package/esm5/lib/services/filters.service.js +2 -2
  85. package/esm5/lib/services/footer/footer.service.js +4 -3
  86. package/esm5/lib/services/gift-card.service.js +59 -5
  87. package/esm5/lib/services/parameters.service.js +5 -3
  88. package/esm5/lib/services/reviews.service.js +5 -4
  89. package/esm5/lib/services/seo.service.js +4 -5
  90. package/esm5/lib/services/stores.service.js +4 -3
  91. package/esm5/lib/services/wishlist.service.js +3 -4
  92. package/esm5/lib/utils/analytics/google-analytics.service.js +1 -1
  93. package/esm5/lib/utils/order-util.service.js +22 -2
  94. package/esm5/lib/utils/price-presentation.service.js +2 -3
  95. package/esm5/lib/utils/shipping-price-display.service.js +2 -3
  96. package/fesm2015/ng-easycommerce.js +4360 -2745
  97. package/fesm2015/ng-easycommerce.js.map +1 -1
  98. package/fesm5/ng-easycommerce.js +5193 -3523
  99. package/fesm5/ng-easycommerce.js.map +1 -1
  100. package/lib/ec-component/cart-bootstrap-navigation.d.ts +7 -0
  101. package/lib/ec-component/cart-ec/cart-ec.component.d.ts +5 -2
  102. package/lib/ec-component/checkout-ec/checkout-ec.component.d.ts +6 -1
  103. package/lib/ec-component/checkout-ec/dataform-ec/dataform-ec.component.d.ts +27 -3
  104. package/lib/ec-component/checkout-ec/detail-checkout-block-ec/detail-checkout-block-ec.component.d.ts +1 -1
  105. package/lib/ec-component/checkout-ec/payment-ec/payment-ec.component.d.ts +3 -0
  106. package/lib/ec-component/checkout-ec/payment-ec-single/payment-ec-single.component.d.ts +3 -0
  107. package/lib/interfaces/checkout-data.d.ts +6 -1
  108. package/lib/services/cart.service.d.ts +123 -7
  109. package/lib/services/checkout/addressing.service.d.ts +1 -1
  110. package/lib/services/checkout/checkout.service.d.ts +3 -0
  111. package/lib/services/checkout/shipment.service.d.ts +2 -2
  112. package/lib/services/gift-card.service.d.ts +1 -0
  113. package/lib/utils/order-util.service.d.ts +1 -0
  114. package/ng-easycommerce.metadata.json +1 -1
  115. package/package.json +1 -1
@@ -23,9 +23,8 @@ import { Router } from '@angular/router';
23
23
  import { TranslateService } from '@ngx-translate/core';
24
24
  import { BehaviorSubject, ReplaySubject } from 'rxjs';
25
25
  import * as i0 from "@angular/core";
26
- import * as i1 from "../public-api";
27
- import * as i2 from "@ngx-translate/core";
28
- import * as i3 from "@angular/router";
26
+ import * as i1 from "@ngx-translate/core";
27
+ import * as i2 from "@angular/router";
29
28
  var Constants = /** @class */ (function () {
30
29
  function Constants(translate, router, env) {
31
30
  var _this = this;
@@ -438,7 +437,7 @@ var Constants = /** @class */ (function () {
438
437
  { type: Router },
439
438
  { type: undefined, decorators: [{ type: Inject, args: ['env',] }] }
440
439
  ]; };
441
- Constants.ɵprov = i0.ɵɵdefineInjectable({ factory: function Constants_Factory() { return new i1.Constants(i0.ɵɵinject(i2.TranslateService), i0.ɵɵinject(i3.Router), i0.ɵɵinject("env")); }, token: i1.Constants, providedIn: "root" });
440
+ Constants.ɵprov = i0.ɵɵdefineInjectable({ factory: function Constants_Factory() { return new Constants(i0.ɵɵinject(i1.TranslateService), i0.ɵɵinject(i2.Router), i0.ɵɵinject("env")); }, token: Constants, providedIn: "root" });
442
441
  Constants = __decorate([
443
442
  Injectable({
444
443
  providedIn: 'root'
@@ -448,4 +447,4 @@ var Constants = /** @class */ (function () {
448
447
  return Constants;
449
448
  }());
450
449
  export { Constants };
451
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29yZS5jb25zdHMuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9uZy1lYXN5Y29tbWVyY2UvIiwic291cmNlcyI6WyJsaWIvY29yZS5jb25zdHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFDQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNuRCxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDekMsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDdkQsT0FBTyxFQUFFLGVBQWUsRUFBRSxhQUFhLEVBQUUsTUFBTSxNQUFNLENBQUM7Ozs7O0FBYXREO0lBRUksbUJBQW1CLFNBQTJCLEVBQVUsTUFBYyxFQUF5QixHQUFHO1FBQWxHLGlCQUF1RztRQUFwRixjQUFTLEdBQVQsU0FBUyxDQUFrQjtRQUFVLFdBQU0sR0FBTixNQUFNLENBQVE7UUFBeUIsUUFBRyxHQUFILEdBQUcsQ0FBQTtRQUVqRixXQUFNLEdBQUcsUUFBUSxDQUFDO1FBQ2xCLFlBQU8sR0FBRyxTQUFTLENBQUM7UUFDOUIsZ0JBQVcsR0FBVyxFQUFFLENBQUM7UUFFeEIseUJBQW9CLEdBQUcsSUFBSSxhQUFhLEVBQU8sQ0FBQztRQUNqRCxtQkFBYyxHQUFHLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUV6RCxxQkFBZ0IsR0FBRyxVQUFDLE9BQU8sSUFBSyxPQUFBLFlBQVksR0FBRyxPQUFPLEdBQUcsU0FBUyxFQUFsQyxDQUFrQyxDQUFDO1FBRW5FLGtCQUFhLEdBQVcsTUFBTSxJQUFJLEVBQUUsQ0FBQztRQUNyQyxxQkFBZ0IsR0FBVyxJQUFJLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUVyRSxnRkFBZ0Y7UUFDeEUsWUFBTyxHQUFXLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFD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QUksS0FBSyxDQUFDLElBQUksSUFBSSxRQUFRLEVBQXBFLENBQW9FLENBQUMsQ0FBQTtJQUVwRyxDQUFDO0lBQUEsQ0FBQztJQWtJRix3Q0FBb0IsR0FBcEIsVUFBcUIsV0FBbUI7UUFDcEMsT0FBTyxJQUFJLENBQUMsa0JBQWtCLENBQUMsV0FBVyxDQUFDLElBQUksRUFBRSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsUUFBUSxFQUFFLG1DQUFtQyxFQUFFLENBQUM7SUFDcEksQ0FBQzs7Z0JBNWQ2QixnQkFBZ0I7Z0JBQWtCLE1BQU07Z0RBQUcsTUFBTSxTQUFDLEtBQUs7OztJQUY1RSxTQUFTO1FBSHJCLFVBQVUsQ0FBQztZQUNSLFVBQVUsRUFBRSxNQUFNO1NBQ3JCLENBQUM7UUFHMkUsV0FBQSxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUE7T0FGN0UsU0FBUyxDQStkckI7b0JBaGZEO0NBZ2ZDLEFBL2RELElBK2RDO1NBL2RZLFNBQVMiLCJzb3VyY2VzQ29udGVudCI6WyJcbmltcG9ydCB7IEluamVjdGFibGUsIEluamVjdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7IFRyYW5zbGF0ZVNlcnZpY2UgfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgUmVwbGF5U3ViamVjdCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgQ29ubmVjdGlvblNlcnZpY2UgfSBmcm9tICcuL2FwaS9jb25uZWN0aW9uLnNlcnZpY2UnO1xuaW1wb3J0IHsgQ3VycmVuY3lDb25maWcgfSBmcm9tICcuL2ludGVyZmFjZXMvY3VycmVuY3lDb25maWcnO1xuaW1wb3J0IHsgRGVmYXVsdEZpbHRlciwgRmlsdGVyQ29uZmlnIH0gZnJvbSAnLi9pbnRlcmZhY2VzL2ZpbHRlcic7XG5pbXBvcnQgeyBQYXJhbXNQcm9kdWN0c1dpdGhVbmlxdWVWYXJpYW50IH0gZnJvbSAnLi9pbnRlcmZhY2VzL3BhcmFtc0ludGVyZmFjZXMvcGFyYW1zUHJvZHVjdHNXaXRoVW5pcXVlVmFyaWFudCc7XG50eXBlIGN1cnJlbmN5VHlwZSA9ICdFVVInIHwgJ0FSRycgfCAnVVNEJyB8ICdQWUcnIHwgJ1BFTicgfCAnU0VLJyB8ICdDVVNUT00nO1xudHlwZSBwb3NpdGlvblR5cGUgPSAnTCcgfCAnUic7XG50eXBlIGNoYW5uZWxUeXBlcyA9ICdiMmInIHwgJ2IyYjJjJyB8ICdiMmMnO1xuZXhwb3J0IHR5cGUgQ2hlY2tvdXRWaWV3VHlwZSA9ICdsZWdhY3knIHwgJ3NpbmdsZSc7XG5cbkBJbmplY3RhYmxlKHtcbiAgICBwcm92aWRlZEluOiAncm9vdCdcbn0pXG5leHBvcnQgY2xhc3MgQ29uc3RhbnRzIHtcblxuICAgIGNvbnN0cnVjdG9yKHB1YmxpYyB0cmFuc2xhdGU6IFRyYW5zbGF0ZVNlcnZpY2UsIHByaXZhdGUgcm91dGVyOiBSb3V0ZXIsIEBJbmplY3QoJ2VudicpIHByaXZhdGUgZW52KSB7IH1cblxuICAgIHByaXZhdGUgcmVhZG9ubHkgTE9DQUxFID0gJ0xPQ0FMRSc7XG4gICAgcHJpdmF0ZSByZWFkb25seSBDSEFOTkVMID0gJ0NIQU5ORUwnO1xuICAgIHB1YmxpYyBzZWFyY2hWYWx1ZTogc3RyaW5nID0gJyc7XG5cbiAgICBwcml2YXRlIGNoYW5uZWxDb25maWdTdWJqZWN0ID0gbmV3IFJlcGxheVN1YmplY3Q8YW55PigpO1xuICAgIHB1YmxpYyBjaGFubmVsQ29uZmlnJCA9IHRoaXMuY2hhbm5lbENvbmZpZ1N1YmplY3QuYXNPYnNlcnZhYmxlKCk7XG5cbiAgICBwcml2YXRlIGNoYW5uZWxDb25maWdBUEkgPSAoY2hhbm5lbCkgPT4gJy9zaG9wLWFwaS8nICsgY2hhbm5lbCArICdjaGFubmVsJztcblxuICAgIHByaXZhdGUgYnJvd3NlcldpbmRvdzogb2JqZWN0ID0gd2luZG93IHx8IHt9O1xuICAgIHByaXZhdGUgYnJvd3NlcldpbmRvd0Vudjogb2JqZWN0ID0gdGhpcy5icm93c2VyV2luZG93WydfX2VudiddIHx8IHt9O1xuXG4gICAgLy8gICAgIHByaXZhdGUgdXJsQmFzZTogc3RyaW5nID0gJ2h0dHA6Ly90ZXN0aW5nLmJhY2tlbmQuZWFzeWNvbW1lcmNldGVjaC5jb20vJztcbiAgICBwcml2YXRlIHVybEJhc2U6IHN0cmluZyA9IHRoaXMuYnJvd3NlcldpbmRvd0VudlsnYXBpVXJsJ10gPyB0aGlzLmJyb3dzZXJXaW5kb3dFbnZbJ2FwaVVybCddIDogKHRoaXMuZW52LmFwaVVybCB8fCAnaHR0cDovL2JhY2tlbmQuZWFzeWNvbW1lcmNlLmRldnAvJyk7XG4gICAgcHJpdmF0ZSB1cmxBc3NldHM6IHN0cmluZyA9IHRoaXMuYnJvd3NlcldpbmRvd0VudlsndXJsQXNzZXRzJ10gPyB0aGlzLmJyb3dzZXJXaW5kb3dFbnZbJ3VybEFzc2V0cyddIDogKHRoaXMuZW52LnVybEFzc2V0cyB8fCB0aGlzLnVybEJhc2UpO1xuICAgIHByaXZhdGUgdXJsRnJvbnRlbmQ6IHN0cmluZyA9IHRoaXMuYnJvd3NlcldpbmRvd0VudlsndXJsRnJvbnRlbmQnXSA/IHRoaXMuYnJvd3NlcldpbmRvd0VudlsndXJsRnJvbnRlbmQnXSA6ICh0aGlzLmVudi51cmxGcm9udGVuZCB8fCAnaHR0cHM6Ly9lbGRlbi5lYXN5Y29tbWVyY2V0ZWNoLmNvbS8nKTtcbiAgICBwcml2YXRlIGxvY2FsZTogc3RyaW5nID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0odGhpcy5MT0NBTEUpID8gbG9jYWxTdG9yYWdlLmdldEl0ZW0odGhpcy5MT0NBTEUpIDogdGhpcy5icm93c2VyV2luZG93RW52Wydsb2NhbGUnXSA/IHRoaXMuYnJvd3NlcldpbmRvd0VudlsnbG9jYWxlJ10gOiAodGhpcy5lbnYubG9jYWxlIHx8ICdlc19BUicpO1xuICAgIHByaXZhdGUgY2hhbm5lbDogc3RyaW5nID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0odGhpcy5DSEFOTkVMKSA/IGxvY2FsU3RvcmFnZS5nZXRJdGVtKHRoaXMuQ0hBTk5FTCkgOiB0aGlzLmJyb3dzZXJXaW5kb3dFbnZbJ2NoYW5uZWwnXSA/IHRoaXMuYnJvd3NlcldpbmRvd0VudlsnY2hhbm5lbCddIDogKHRoaXMuZW52LmNoYW5uZWwgfHwgJ21pbm9yaXN0YScpXG4gICAgcHJpdmF0ZSBibG9ja3NDYWNoZVRpbWU6IHN0cmluZyA9IHRoaXMuYnJvd3NlcldpbmRvd0VudlsnYmxvY2tzQ2FjaGVUaW1lJ10gPyB0aGlzLmJyb3dzZXJXaW5kb3dFbnZbJ2Jsb2Nrc0NhY2hlVGltZSddIDogKHRoaXMuZW52LmJsb2Nrc0NhY2hlVGltZSB8fCBudWxsKTtcbiAgICBwcml2YXRlIGNoZWNrb3V0VmlldzogQ2hlY2tvdXRWaWV3VHlwZSA9ICdsZWdhY3knO1xuICAgIHByaXZhdGUgY2hlY2tvdXRWaWV3U3ViamVjdCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Q2hlY2tvdXRWaWV3VHlwZT4odGhpcy5jaGVja291dFZpZXcpO1xuICAgIHB1YmxpYyBjaGVja291dFZpZXckID0gdGhpcy5jaGVja291dFZpZXdTdWJqZWN0LmFzT2JzZXJ2YWJsZSgpO1xuXG4gICAgcHJpdmF0ZSBtb2RhbENvbmZpZyA9IHsgdGl0bGU6ICdFeGFtcGxlJywgY2xhc3M6ICdtb2RhbC14bCBtb2RhbC1kaWFsb2ctY2VudGVyZWQnLCBrZXlib2FyZDogZmFsc2UgfTtcbiAgICBzZXRNb2RhbENvbmZpZyA9IChjb25maWc6IGFueSkgPT4gdGhpcy5tb2RhbENvbmZpZyA9IGNvbmZpZztcbiAgICBnZXRNb2RhbENvbmZpZyA9ICgpID0+IHRoaXMubW9kYWxDb25maWc7XG5cbiAgICBwcml2YXRlIHZlcnNpb246IHN0cmluZyA9ICd2MSc7XG5cbiAgICBwcml2YXRlIHJvdXRlcyA9IFsvXmhvbWUkL2csIC9eKFxcLz8pY29sbGVjdGlvbihcXC8/KShbXFx3XFwuXFwvXFw/XSopJC9nLCAvXmNvbnRhY3QkL2ddO1xuXG4gICAgLyogR2V0IHJpZCBvZiB0aGlzIEFTQVAhICovXG4gICAgcHJpdmF0ZSBtYXN0ZXJDaGFubmVsID0gbnVsbFxuXG4gICAgcHVibGljIGdldE1hc3RlckNoYW5uZWwgPSAoKSA9PiB7XG4gICAgICAgIGlmICghdGhpcy5tYXN0ZXJDaGFubmVsKSB0aGlzLm1hc3RlckNoYW5uZWwgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnTUFTVEVSX0NIQU5ORUwnKVxuICAgICAgICByZXR1cm4gdGhpcy5tYXN0ZXJDaGFubmVsXG4gICAgfVxuXG4gICAgcHVibGljIHNldE1hc3RlckNoYW5uZWwgPSBjaGFubmVsID0+IHtcbiAgICAgICAgdGhpcy5tYXN0ZXJDaGFubmVsID0gY2hhbm5lbFxuICAgICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSgnTUFTVEVSX0NIQU5ORUwnLCBjaGFubmVsKVxuICAgIH1cblxuICAgIHByaXZhdGUgaXNQcm9kdWN0aW9uID0gKCkgPT4gdGhpcy5icm93c2VyV2luZG93RW52Wydwcm9kdWN0aW9uJ10gPyB0aGlzLmJyb3dzZXJXaW5kb3dFbnZbJ3Byb2R1Y3Rpb24nXSA6ICh0aGlzLmVudi5wcm9kdWN0aW9uIHx8IGZhbHNlKTtcblxuICAgIHNldFVybEJhc2UgPSAodXJsKSA9PiB0aGlzLnVybEJhc2UgPSB1cmw7XG4gICAgc2V0VXJsQXNzZXRzID0gKHVybCkgPT4gdGhpcy51cmxBc3NldHMgPSB1cmw7XG5cbiAgICAvKipcbiAgICAgKiBAcGFyYW0gbmV4dCBGdW5jdGlvbiB0byBleGVjdXRlXG4gICAgICogQHBhcmFtIHBhcmFtcyBUaGF0IGZ1bmN0aW9uIG5lZWRzXG4gICAgICpcbiAgICAgKiBFeGVjdXRlIHRoZSBmdW5jdGlvbiBwYXNzZWQgYXMgcGFyYW1zLCBpZiB0aGUgZnJvbnRlbmQgaXMgaW4gcHJvZHVjdGlvbiBtb2RlXG4gICAgICovXG4gICAgb25seUlmUHJvZHVjdGlvbiA9IChuZXh0LCBwYXJhbXMpID0+IHRoaXMuaXNQcm9kdWN0aW9uKCkgJiYgbmV4dChwYXJhbXMpO1xuXG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIERldnVlbHZlIGxhIHVybCBiYXNlIGRvbmRlIHNlIGFsb2phbiBsb3MgYXJjaGl2b3MgbXVsdGltZWRpYVxuICAgICAqIEBwYXJhbSBwb3N0TWVkaWEgY2FycGV0YSBkb25kZSBzZSBndWFyZGFuIGxvcyBhcmNoaXZvc1xuICAgICAqIEByZXR1cm5zXG4gICAgICovXG4gICAgbWVkaWFVcmwgPSAocG9zdE1lZGlhPzogc3RyaW5nKSA9PiB0aGlzLnVybEFzc2V0cyArICh0aGlzLnVybEFzc2V0cyA9PSB0aGlzLnVybEJhc2UgPyAnbWVkaWEvJyA6ICcnKSArIChwb3N0TWVkaWEgPyBwb3N0TWVkaWEgOiBcImltYWdlL1wiKTtcbiAgICBtZWRpYUJhbm5lclVybCA9ICgpID0+IHRoaXMudXJsQXNzZXRzICsgKHRoaXMudXJsQXNzZXRzID09IHRoaXMudXJsQmFzZSA/ICdtZWRpYS8nIDogJycpICsgXCJiYW5uZXItaW1hZ2UvXCI7XG4gICAgbWVkaWFTdG9yZVVybCA9ICgpID0+IHRoaXMudXJsQXNzZXRzICsgKHRoaXMudXJsQXNzZXRzID09IHRoaXMudXJsQmFzZSA/ICdtZWRpYS8nIDogJycpICsgXCJzdG9yZS1pbWFnZS9cIjtcblxuICAgIGdldFByb2R1Y3RzTGlzdFJvdXRlID0gKCkgPT4gJ2NvbGxlY3Rpb24vJztcblxuICAgIGdldFNlY3Rpb25zUm91dGUgPSAoKSA9PiAnc2VjdGlvbi8nO1xuXG4gICAgZ2V0VXJsQmFzZSA9ICgpID0+IHRoaXMudXJsQmFzZTtcbiAgICBnZXRVcmxGcm9udGVuZCA9ICgpID0+IHRoaXMudXJsRnJvbnRlbmQ7XG5cbiAgICBnZXRCbG9ja3NDYWNoZVRpbWUgPSAoKTogbnVtYmVyID0+IHRoaXMuYmxvY2tzQ2FjaGVUaW1lICYmIHBhcnNlSW50KHRoaXMuYmxvY2tzQ2FjaGVUaW1lKTtcblxuICAgIC8vIGdldExvY2FsZSA9ICgpID0+IHRoaXMubG9jYWxlO1xuICAgIC8vIHNldExvY2FsZSA9IChsb2NhbGUpID0+IHRoaXMubG9jYWxlID0gbG9jYWxlO1xuXG4gICAgZ2V0TG9jYWxlID0gKCkgPT4ge1xuICAgICAgICBpZiAobG9jYWxTdG9yYWdlLmdldEl0ZW0odGhpcy5MT0NBTEUpKSB7XG4gICAgICAgICAgICB0aGlzLmxvY2FsZSA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKHRoaXMuTE9DQUxFKVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLmxvY2FsZVxuICAgIH1cblxuICAgIGdldExvY2FsZVRyYW5zbGF0ZSA9ICgpID0+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0TG9jYWxlKCkuc3BsaXQoJ18nKVswXVxuICAgIH1cblxuICAgIHB1YmxpYyBzZXRMb2NhbGUgPSBsb2NhbGUgPT4ge1xuICAgICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSh0aGlzLkxPQ0FMRSwgbG9jYWxlKVxuICAgICAgICB0aGlzLnRyYW5zbGF0ZS51c2UobG9jYWxlLnNwbGl0KCdfJylbMF0pXG4gICAgICAgIHRoaXMubG9jYWxlID0gbG9jYWxlXG4gICAgfVxuXG4gICAgZ2V0Q2hhbm5lbCA9ICgpID0+IHtcbiAgICAgICAgaWYgKGxvY2FsU3RvcmFnZS5nZXRJdGVtKHRoaXMuQ0hBTk5FTCkpIHtcbiAgICAgICAgICAgIHRoaXMuY2hhbm5lbCA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKHRoaXMuQ0hBTk5FTClcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5jaGFubmVsXG4gICAgfVxuXG4gICAgcHVibGljIHNldENoYW5uZWwgPSBjaGFubmVsID0+IHtcbiAgICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0odGhpcy5DSEFOTkVMLCBjaGFubmVsKVxuICAgICAgICB0aGlzLmNoYW5uZWwgPSBjaGFubmVsXG4gICAgfVxuXG4gICAgZ2V0Q2hlY2tvdXRWaWV3ID0gKCk6IENoZWNrb3V0Vmlld1R5cGUgPT4gdGhpcy5jaGVja291dFZpZXc7XG5cbiAgICBwcml2YXRlIHNldENoZWNrb3V0VmlldyA9ICh2aWV3OiBDaGVja291dFZpZXdUeXBlKSA9PiB7XG4gICAgICAgIGNvbnN0IG5vcm1hbGl6ZWQ6IENoZWNrb3V0Vmlld1R5cGUgPSB2aWV3ID09PSAnc2luZ2xlJyA/ICdzaW5nbGUnIDogJ2xlZ2FjeSc7XG4gICAgICAgIHRoaXMuY2hlY2tvdXRWaWV3ID0gbm9ybWFsaXplZDtcbiAgICAgICAgdGhpcy5jaGVja291dFZpZXdTdWJqZWN0Lm5leHQobm9ybWFsaXplZCk7XG4gICAgfVxuXG4gICAgZ2V0VmVyc2lvbiA9ICgpID0+IHRoaXMudmVyc2lvbjtcblxuICAgIGxvZ2luRXh0cmFEYXRhID0gKCkgPT4ge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgY2xpZW50X2lkOiAnZGVtb19jbGllbnQnLFxuICAgICAgICAgICAgY2xpZW50X3NlY3JldDogJ3NlY3JldF9kZW1vX2NsaWVudCcsXG4gICAgICAgICAgICBncmFudF90eXBlOiAncGFzc3dvcmQnXG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBpc0NvbGxlY3Rpb24gPSAocGF0aCkgPT4gKC9eKFxcLz8pY29sbGVjdGlvbihcXC8/KShbXFx3XFwuXFwvXFw/XSopJC9nKS50ZXN0KHBhdGgpO1xuXG4gICAgLyoqXG4gICAgICogVXRpbGl0aWVzXG4gICAgICovXG5cbiAgICBtb2JpbGUgPSAoKSA9PiB3aW5kb3cuaW5uZXJXaWR0aCA8IDc1MDtcblxuICAgIHN0cmljdFR5cGVDaGFubmVsID0gKCkgPT4gdGhpcy5lbnYuc3RyaWN0VHlwZUNoYW5uZWwgfHwgJ2IyYjJjJztcblxuICAgIHRvRGVjaW1hbCA9ICh0b3RhbCkgPT4gKHRvdGFsIC0gTWF0aC5mbG9vcih0b3RhbCkgPT0gMCkgPyB0b3RhbCAvIDEwMCA6IHRvdGFsO1xuXG4gICAgLyoqXG4gICAgICogRWxlbWVudG9zIHBhcmEgbWFuZWpvIGRlIGxpc3RhIGRlIHJ1dGFzIHJldXRpbGl6YWJsZXNcbiAgICAgKi9cblxuICAgIGFkZFJvdXRlVG9SZXVzZSA9IChyb3V0ZTogUmVnRXhwKSA9PiByb3V0ZSAmJiB0aGlzLnJvdXRlcy5wdXNoKHJvdXRlKTtcblxuICAgIHJlbW92ZVJvdXRlVG9SZXVzZSA9IChyb3V0ZTogUmVnRXhwKSA9PiB7XG4gICAgICAgIGNvbnN0IGluZGV4ID0gdGhpcy5yb3V0ZXMuaW5kZXhPZihyb3V0ZSk7XG4gICAgICAgIGlmIChpbmRleCA+IC0xKSB7XG4gICAgICAgICAgICB0aGlzLnJvdXRlcy5zcGxpY2UoaW5kZXgsIDEpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZ2V0Um91dGVzVG9SZXVzZSA9ICgpOiBSZWdFeHBbXSA9PiB0aGlzLnJvdXRlcztcblxuXG5cbiAgICAvKipcbiAgICAgKiAgQHB1YmxpYyBlamVtcGxvIGRlIHVzbyA8aW1nICpuZ0Zvcj1cImxldCBpdGVtIG9mIGNvbnN0cy5nZXRSYXRpbmdTdGFyKHByb2R1Y3QucmF0aW5nLCdhc3NldHMvaW1hZ2VzL3N0YXIucG5nJywnYXNzZXRzL2ltYWdlcy9ub3RTdGFyLnBuZycpXCIgW3NyY109XCJpdGVtXCI+XG4gICAgICogIEBkZXNjcmlwdGlvbiBmdW5jaW9uIHF1ZSBkYWRvIHVuIHZhbG9yIGVudHJlIDEgLi4gNSwgeSBzdGFyOiBub3RTdGFyOlxuICAgICAqICAgICAgKGRlYmVuIHNlciBlbCBwYXRoIGRlbCBhcmNoaXZvIGxvY2FsIGEgbGEgaW1wbGVtZW50YWNpb24pLlxuICAgICAqICAgICAgcmV0b3JuYSB1biBhcnJlZ2xvIGNvbiBjb24gbGEgdmFsb3JhY2lvbiBjb3JyZXNwb25kaWVudGUuXG4gICAgICovXG4gICAgZ2V0UmF0aW5nU3RhciA9IChyYXRpbmc6IGFueSwgc3RhcjogU3RyaW5nLCBub3RTdGFyOiBTdHJpbmcpID0+IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGxldCB1cmxTdGFyID0gW107XG4gICAgICAgICAgICBsZXQgY2FudFN0YXIgPSBOdW1iZXIocmF0aW5nKSB8fCAwO1xuICAgICAgICAgICAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IDU7IGluZGV4KyspIHtcbiAgICAgICAgICAgICAgICB1cmxTdGFyLnB1c2goXG4gICAgICAgICAgICAgICAgICAgIGNhbnRTdGFyID4gMFxuICAgICAgICAgICAgICAgICAgICAgICAgPyBzdGFyXG4gICAgICAgICAgICAgICAgICAgICAgICA6IG5vdFN0YXJcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIGNhbnRTdGFyLS07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdXJsU3RhcjtcbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXCJnZXRSYXRpbmdTdGFyIHByb2R1am8gdW4gZXJyb3IgLT4gXCIsIGVycm9yKTtcbiAgICAgICAgfVxuXG4gICAgfTtcblxuICAgIC8qKlxuICAgICAqICBAcHVibGljIGVqZW1wbG8gZGUgdXNvIChrZXlwcmVzcyk9XCJpbnB1dFZhbGlkYXRpb25CeUV4cHJlc3Npb25zKCRldmVudCwnWzAtOV17MSw5fScpXCIgZW4gZWwgRE9NLlxuICAgICAqICBAZGVzY3JpcHRpb24gZnVuY2lvbiBxdWUgZGFkbyB1biBtYW5lamFuZG9yIGRlIGV2ZW50bywgeSB1bmEgZXhwcmVzaW9uIHJlZ3VsYXIgZXN0YSBlc1xuICAgICAqICAgICAgICAgIGV2YWx1YWRhIHNvYnJlIGxvcyB2YWxvcmVzIHF1ZSBlbCBtYW5lamFkb3IgZGUgZXZlbnRvcyBub3MgZW52aWEuXG4gICAgICogICAgICAgICAgRW4gZWwgY2FzbyBlbiBlbCBxdWUgc2UgZW52aWUgZWwgcGFyYW1ldHJvICdjb25kaXRpb24nIGVzdGUgcHVlZGUgc2VyIHBhcmFcbiAgICAgKiAgICAgICAgICBhbnVsYXIgZWwgZXZlbnRvIGNvbW8gY29uZGljaW9uIGFkaWNpb25hbCBhIGxhIGV2YWx1YWNpb24gZGUgbGEgZW50cmFkYS5cbiAgICAgKi9cbiAgICBpbnB1dFZhbGlkYXRpb25CeUV4cHJlc3Npb25zID0gKGUsIHBhdHJvbiwgY29uZGl0aW9uID0gbnVsbCkgPT4ge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgbGV0IHRlY2xhID0gKGRvY3VtZW50KSA/IGUua2V5Q29kZSA6IGUud2hpY2g7XG4gICAgICAgICAgICBpZiAodGVjbGEgPT0gOCkgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICBsZXQgcGF0cm9uUmVnID0gbmV3IFJlZ0V4cChwYXRyb24pXG4gICAgICAgICAgICBsZXQgdGVjbGFfZmluYWwgPSBTdHJpbmcuZnJvbUNoYXJDb2RlKHRlY2xhKTtcbiAgICAgICAgICAgIGlmIChjb25kaXRpb24gIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBwYXRyb25SZWcudGVzdCh0ZWNsYV9maW5hbCkgJiYgY29uZGl0aW9uO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHBhdHJvblJlZy50ZXN0KHRlY2xhX2ZpbmFsKVxuICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcihcImlucHV0VmFsaWRhdGlvbkJ5RXhwcmVzc2lvbnMgcHJvZHVqbyB1biBlcnJvciAtPiBcIiwgZXJyb3IpO1xuICAgICAgICB9XG4gICAgfVxuXG5cbiAgICAvKipcbiAgICAgKlxuICAgICAqIEBwYXJhbSBuZWVkbGVzIChhZ3VqYXMpIG9iamVjdCBjb24gY2xhdmVzIHZhbG9yIGEgZmlsdHJhclxuICAgICAqIEBwYXJhbSBoYXlzdGFjayAocGFqYXIpIG9iamVjdG8gZW4gZWwgcXVlIGJ1c2NhclxuICAgICAqXG4gICAgICogQGRlc2NyaXB0aW9uIGZ1bmNpb24gcXVlIGJ1c2NhIGVuIGVsIGhheXN0YWNrIChwYWphcikgdG9kb3MgbG9zIG9iamV0b3MgcXVlIGNvbnRlbnRhblxuICAgICAqIHRvZGFzIGxhcyBjbGF2ZXMgZGUgbG9zIG5lZWRsZXMoYWd1amFzKSBxdWUgY29udGVuZ2FuIGVsIG1pc21vIHZhbG9yXG4gICAgICovXG4gICAgY29udGFpbnNBbGwobmVlZGxlczogb2JqZWN0LCBoYXlzdGFjazogb2JqZWN0KTogYm9vbGVhbiB7XG4gICAgICAgIGxldCByZXN1bHQ6IGJvb2xlYW4gPSB0cnVlO1xuXG4gICAgICAgIGlmICghIW5lZWRsZXMgJiYgISFoYXlzdGFjaykge1xuICAgICAgICAgICAgT2JqZWN0LmVudHJpZXMobmVlZGxlcykuZm9yRWFjaCh2YWx1ZSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKCEoaGF5c3RhY2suaGFzT3duUHJvcGVydHkodmFsdWVbMF0pICYmIGhheXN0YWNrW3ZhbHVlWzBdXSA9PSB2YWx1ZVsxXSkpIHJlc3VsdCA9IGZhbHNlXG4gICAgICAgICAgICB9KVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUHJvcGllZGFkIHF1ZSBzZSB1dGlsaXphIHBhcmEgdG9tYXIgY29tbyBjb25maWd1cmFjacOzbiBwYXJhIGVsIHRpcG8gZGUgbW9uZWRhIHF1ZSBzZSB1dGlsaXphIGVuIGVsIHNpdGlvLlxuICAgICAqIEVzdG9zIHZhbG9yZXMgc29uIHV0aWxpemFkb3MgcGFyYSBlbCBwaXBlIGN1cnJlbmN5UHJpY2VcbiAgICAgKi9cbiAgICBwdWJsaWMgY3VycmVuY3k6IEN1cnJlbmN5Q29uZmlnID0ge1xuICAgICAgICBjb2RlOiAnQVJHJyxcbiAgICAgICAgc3ltYm9sOiAnJCcsXG4gICAgICAgIHBvc2l0aW9uOiAnTGVmdCcsXG4gICAgICAgIHdpdGhvdXREZWNpbWFsOiBmYWxzZVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEFycmVnbG8gZGUgdmFsb3JlcyB1c2Fkb3MgcGFyYSBlbCBwaXBlIGN1cnJlbmN5UHJpY2VcbiAgICAgKi9cbiAgICBwdWJsaWMgY3VycmVuY3lUeXBlQ29uZmlnOiBDdXJyZW5jeUNvbmZpZ1tdID0gW1xuICAgICAgICB7XG4gICAgICAgICAgICBjb2RlOiAnRVVSJyxcbiAgICAgICAgICAgIHN5bWJvbDogJ+KCrCcsXG4gICAgICAgICAgICBwb3NpdGlvbjogJ1JpZ2h0JyxcbiAgICAgICAgICAgIHdpdGhvdXREZWNpbWFsOiBmYWxzZVxuXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIGNvZGU6ICdBUkcnLFxuICAgICAgICAgICAgc3ltYm9sOiAnJCcsXG4gICAgICAgICAgICBwb3NpdGlvbjogJ0xlZnQnLFxuICAgICAgICAgICAgd2l0aG91dERlY2ltYWw6IGZhbHNlXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIGNvZGU6ICdBUlMnLFxuICAgICAgICAgICAgc3ltYm9sOiAnJCcsXG4gICAgICAgICAgICBwb3NpdGlvbjogJ0xlZnQnLFxuICAgICAgICAgICAgd2l0aG91dERlY2ltYWw6IGZhbHNlXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIGNvZGU6ICdVU0QnLFxuICAgICAgICAgICAgc3ltYm9sOiAnJCcsXG4gICAgICAgICAgICBwb3NpdGlvbjogJ0xlZnQnLFxuICAgICAgICAgICAgd2l0aG91dERlY2ltYWw6IGZhbHNlXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIGNvZGU6ICdQWUcnLFxuICAgICAgICAgICAgc3ltYm9sOiAnR3MuJyxcbiAgICAgICAgICAgIHBvc2l0aW9uOiAnTGVmdCcsXG4gICAgICAgICAgICB3aXRob3V0RGVjaW1hbDogZmFsc2VcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgY29kZTogJ1BFTicsXG4gICAgICAgICAgICBzeW1ib2w6ICdTLycsXG4gICAgICAgICAgICBwb3NpdGlvbjogJ0xlZnQnLFxuICAgICAgICAgICAgd2l0aG91dERlY2ltYWw6IGZhbHNlXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIGNvZGU6ICdTRUsnLFxuICAgICAgICAgICAgc3ltYm9sOiAnU0VLJyxcbiAgICAgICAgICAgIHBvc2l0aW9uOiAnUmlnaHQnLFxuICAgICAgICAgICAgd2l0aG91dERlY2ltYWw6IHRydWVcbiAgICAgICAgfSxcbiAgICBdXG5cbiAgICBwdWJsaWMgc2V0Q3VycmVuY3lUeXBlQ29uZmlnID0gKGN1cnJlbmN5VHlwZUNvbmZpZzogQ3VycmVuY3lDb25maWdbXSkgPT4ge1xuICAgICAgICB0aGlzLmN1cnJlbmN5VHlwZUNvbmZpZyA9IGN1cnJlbmN5VHlwZUNvbmZpZztcbiAgICB9XG5cblxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBSZWVtcGxhemEgbG9zIHZhbG9yZXMgZGUgdW5hIG1vbmVkYS5cbiAgICAgKiBAcGFyYW0gY3VycmVuY3lUeXBlRmluZCBUaXBvIGRlIGN1cnJlbmN5IHF1ZSBzZSBkZXNlYSBtb2RpZmljYXJcbiAgICAgKiBAcGFyYW0gY3VzdG9tVHlwZSBMb3MgbnVldm9zIHZhbG9yZXMuIFRvZGFzIGxhcyBrZXkgc29uIG9wY2lvbmFsZXNcbiAgICAgKiBAZXhhbXBsZSBjdXN0b21UeXBlID0geyBjb2RlOiAnQVJHJywgc3ltYm9sOiAnJCcsIHBvc2l0aW9uOiAnTGVmdCcgLCB3aXRob3V0RGVjaW1hbDogZmFsc2UgfVxuICAgICAqL1xuICAgIHB1YmxpYyByZXBsYWNlQ3VycmVuY3lUeXBlQ29uZmlnID0gKGN1cnJlbmN5VHlwZUZpbmQ6IGN1cnJlbmN5VHlwZSwgY3VzdG9tVHlwZTogQ3VycmVuY3lDb25maWcpID0+IHtcbiAgICAgICAgbGV0IGN1cnJlbmN5VHlwZSA9IHRoaXMuY3VycmVuY3lUeXBlQ29uZmlnLmZpbmQodHlwZSA9PiB0eXBlLmNvZGUgPT0gY3VycmVuY3lUeXBlRmluZClcbiAgICAgICAgaWYgKGN1cnJlbmN5VHlwZSkge1xuICAgICAgICAgICAgY3VycmVuY3lUeXBlLnN5bWJvbCA9IGN1c3RvbVR5cGU/LnN5bWJvbCB8fCBjdXJyZW5jeVR5cGUuc3ltYm9sXG4gICAgICAgICAgICBjdXJyZW5jeVR5cGUuY29kZSA9IGN1c3RvbVR5cGU/LmNvZGUgfHwgY3VycmVuY3lUeXBlLmNvZGVcbiAgICAgICAgICAgIGN1cnJlbmN5VHlwZS5wb3NpdGlvbiA9IGN1c3RvbVR5cGU/LnBvc2l0aW9uIHx8IGN1cnJlbmN5VHlwZS5wb3NpdGlvblxuICAgICAgICAgICAgY3VycmVuY3lUeXBlLndpdGhvdXREZWNpbWFsID0gY3VzdG9tVHlwZT8ud2l0aG91dERlY2ltYWwgfHwgY3VycmVuY3lUeXBlLndpdGhvdXREZWNpbWFsXG4gICAgICAgIH1cbiAgICAgICAgLy9SZXZlZXIgZW4gZWwgZnV0dXJvIHNpIHNlIGVtcGllemFuIGEgYWdyZWdhciBvdHJvIHRpcG9zIGRlIG1vbmVkYXNcbiAgICAgICAgLyogZWxzZXtcbiAgICAgICAgICAgIHRoaXMuY3VycmVuY3lUeXBlQ29uZmlnLnB1c2goey4uLmN1c3RvbVR5cGUgfSlcbiAgICAgICAgfSAqL1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqXG4gICAgICogQHBhcmFtIGN1cnJlbmN5VHlwZUZpbmQgRGVmaW5pciBlbCBjb2RlIGRlbCB0aXBvIGRlIG1vbmVkYSBxdWUgc2UgcXVpZXJhIHV0aWxpemFyLlxuICAgICAqIFNpIGVsIHRpcG8gZXMgQ1VTVE9NIHNlIHRvbWFuIGxvcyB2YWxvcmVzIGRlbCBzZWd1bmRvIHBhcmFtZXRybyBkb25kZSBzZSBwdWVkZSBkZWZpbmlyIGxhIHNpbWJvbG9nw61hIHkgcG9zZXNpw7NuIHF1ZSBzZSBxdWllcmEuXG4gICAgICogQHBhcmFtIGN1c3RvbVR5cGUgRm9ybWF0byBkZWwgcGFyw6FtZXRybyBlamVtcGxvIHsgY29kZTogJ0FSRycsIHN5bWJvbDogJyQnLCBwb3NpdGlvbjogJ0wnICwgd2l0aG91dERlY2ltYWxzOiBmYWxzZSB9ICxcbiAgICAgKiB0b2RhcyBsYXMga2V5IHNvbiBvcGNpb25hbGVzIHkgcG9yIGRlZmVjdG8gc2UgdG9tYW4gbG9zIHZhbG9yZXMgZGVsIGVqZW1wbG8uXG4gICAgICogQHJldHVybnMgc2UgcmV0b3JuYSBsYSBjb25maWd1cmFjacOzbiBxdWUgc2Ugc2V0ZW8gYSBsYSBwcm9waWVkYWQgY3VycmVuY3kgZGVsIHNlcnZpY2lvLlxuICAgICAqL1xuICAgIHB1YmxpYyBzZXRDdXJyZW5jeSA9IChjdXJyZW5jeVR5cGVGaW5kOiBjdXJyZW5jeVR5cGUsIGN1c3RvbVR5cGU/OiBDdXJyZW5jeUNvbmZpZykgPT4ge1xuICAgICAgICB0aGlzLmN1cnJlbmN5ID0gdGhpcy5jdXJyZW5jeVR5cGVDb25maWcuZmluZChjdCA9PiBjdC5jb2RlID09IGN1cnJlbmN5VHlwZUZpbmQudG9VcHBlckNhc2UoKSkgfHwgdGhpcy5jdXJyZW5jeVxuICAgICAgICBjdXN0b21UeXBlICYmICh0aGlzLmN1cnJlbmN5ID0geyAuLi50aGlzLmN1cnJlbmN5LCAuLi5jdXN0b21UeXBlIH0pXG4gICAgICAgIHJldHVybiB0aGlzLmN1cnJlbmN5O1xuICAgIH07XG5cblxuICAgIC8qKlxuICAgICAqIGRldnVlbHZlIHRydWUgc2kgZXhpc3RlIGVsIGVsZW1lbnRvIFwic2VhcmNoXCIgZW4gZWwgYXJyYXkgZGUgcGFyYW1ldHJvcyBcInBhcmFtc1wiXG4gICAgICpcbiAgICAgKiBAcGFyYW0gcGFyYW1zIEFycmF5IGRlIHBhcmFtZXRyb3MgZW50cmUgbG9zIHF1ZSBidXNjYXJcbiAgICAgKiBAcGFyYW0gc2VhcmNoZWQgRWxlbWVudG8gcXVlIGJ1c2NhclxuICAgICAqIEBwYXJhbSBwcmVmaXggcHJlZmlqbyBkZWwgc3RyaW5nIGEgYnVzY2FyIChlamVtcGxvOiBcImxpbmtfXCIpXG4gICAgICogQHBhcmFtIHN1ZmZpeCBzdWZpam8gZGVsIHN0cmluZyBhIGJ1c2NhciAoZWplbXBsbzogXCJsaW5rX1wiKVxuICAgICAqIEBwYXJhbSBjYXNlc2Vuc2l0aXZlIGRldGVybWluYSBzaSBzZSBldmFsdWEgY29uIHNlbnNpYmlsaWRhZCBlbnRyZSBtYXl1c2N1bGEgeSBtaW51c2N1bGFcbiAgICAgKiBAcmV0dXJucyByZXRvcm5hIHRydWUgbyBmYWxzZSBzaSBzZSBlbmNvbnRybyBvIG5vIGVsIHBhcmFtZXRybyBlbiBlbCBhcnJheVxuICAgICAqL1xuICAgIHB1YmxpYyBoYXNQYXJhbXMoXG4gICAgICAgIHBhcmFtcyxcbiAgICAgICAgc2VhcmNoZWQsXG4gICAgICAgIHByZWZpeCA9ICcnLFxuICAgICAgICBzdWZmaXggPSAnJyxcbiAgICAgICAgY2FzZXNlbnNpdGl2ZSA9IGZhbHNlKTogYm9vbGVhbiB7XG5cblxuICAgICAgICByZXR1cm4gY2FzZXNlbnNpdGl2ZSA/IHBhcmFtcy5maW5kKHBhcmFtID0+IChwYXJhbS5jb2RlKS50b0xvd2VyQ2FzZSgpID09IChwcmVmaXggKyBzZWFyY2hlZCArIHN1ZmZpeCkudG9Mb3dlckNhc2UoKSB8fCAocGFyYW0uY29kZSkudG9Mb3dlckNhc2UoKSA9PSAoc2VhcmNoZWQpLnRvTG93ZXJDYXNlKCkpXG4gICAgICAgICAgICA6IHBhcmFtcy5maW5kKHBhcmFtID0+IHBhcmFtLmNvZGUgPT0gKHByZWZpeCArIHNlYXJjaGVkICsgc3VmZml4KSB8fCBwYXJhbS5jb2RlID09IHNlYXJjaGVkKVxuXG4gICAgfTtcblxuICAgIHB1YmxpYyBtb2RpZnlDaGFubmVsQ29uZmlnID0gY2hhbm5lbENvbmZpZyA9PiB7XG4gICAgICAgIGlmIChjaGFubmVsQ29uZmlnLmNoYW5uZWwgfHwgY2hhbm5lbENvbmZpZy5jb2RlKVxuICAgICAgICAgICAgdGhpcy5zZXRDaGFubmVsKGNoYW5uZWxDb25maWcuY2hhbm5lbCB8fCBjaGFubmVsQ29uZmlnLmNvZGUpXG5cbiAgICAgICAgaWYgKGNoYW5uZWxDb25maWcubG9jYWxlIHx8IChjaGFubmVsQ29uZmlnLmxvY2FsZXMgJiYgY2hhbm5lbENvbmZpZy5sb2NhbGVzLmNvZGUpKVxuICAgICAgICAgICAgdGhpcy5zZXRMb2NhbGUoY2hhbm5lbENvbmZpZy5sb2NhbGUgfHwgY2hhbm5lbENvbmZpZy5sb2NhbGVzLmNvZGUpXG5cbiAgICAgICAgaWYgKGNoYW5uZWxDb25maWcuY3VycmVuY3kgfHwgY2hhbm5lbENvbmZpZy5iYXNlQ3VycmVuY3kpXG4gICAgICAgICAgICB0aGlzLnNldEN1cnJlbmN5KGNoYW5uZWxDb25maWcuY3VycmVuY3kgfHwgY2hhbm5lbENvbmZpZy5iYXNlQ3VycmVuY3kpXG5cbiAgICAgICAgaWYgKGNoYW5uZWxDb25maWcuY2hlY2tvdXRWaWV3ICE9IG51bGwpIHtcbiAgICAgICAgICAgIHRoaXMuc2V0Q2hlY2tvdXRWaWV3KGNoYW5uZWxDb25maWcuY2hlY2tvdXRWaWV3IGFzIENoZWNrb3V0Vmlld1R5cGUpXG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gY2hhbm5lbENvbmZpZztcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIFNlIHV0aWxpemEgcGFyYSBjb25maWd1cmFyIGxvcyBmaWx0cm9zIHBvciBkZWZlY3RvIHF1ZSBzZSBhcGxpY2FyYW4gZW4gbGEgc2VjY2lvbiAnQ29sbGVjdGlvbidcbiAgICAgKiBjdWFuZG8gc2UgaW5ncmVzYSBhIGxhIG1pc21hLlxuICAgICAqL1xuICAgIHByaXZhdGUgZGVmYXVsdEZpbHRlcnM6IERlZmF1bHRGaWx0ZXJbXSA9IFtdXG5cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gU2V0dGVhIGVsIHZhbG9yIGRlIGxhIHZhcmlhYmxlIGRlZmF1bEZpbHRlcnMuXG4gICAgICogQHBhcmFtIGZpbHRlcnNcbiAgICAgKi9cbiAgICBwdWJsaWMgc2V0RGVmYXVsdEZpbHRlcnMgPSAoZmlsdGVyczogRGVmYXVsdEZpbHRlcltdKSA9PiB7XG4gICAgICAgIHRoaXMuZGVmYXVsdEZpbHRlcnMgPSBmaWx0ZXJzO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXREZWZhdWx0RmlsdGVycyA9ICgpOiBEZWZhdWx0RmlsdGVyW10gPT4gdGhpcy5kZWZhdWx0RmlsdGVyc1xuXG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIFNlIHV0aWxpemEgcGFyYSBjb25maWd1cmFyIHRhbnRvIGxvcyBmaWx0cm9zIHBvciBkZWZlY3RvcyBxdWUgeWEgc2VyYW4gYXBsaWNhZG9zLCBjb21vIHRhbWJpZW5cbiAgICAgKiBsb3MgZmlsdHJvcyBxdWUgc2UgbW9zdHJhcmFuIGVuIGxhIHNlY2Npb24gY29sbGVjdGlvbiwgc3Ugb3JkZW4sIGV0Yy5cbiAgICAgKi9cbiAgICBwcml2YXRlIGZpbHRlckNvbmZpZzogRmlsdGVyQ29uZmlnID0ge1xuICAgICAgICBkZWZhdWx0RmlsdGVyczogW10sXG4gICAgICAgIGZpbHRlcnM6IFsnY2F0ZWdvcnknLCAnYXR0cmlidXRlcycsICdkeW5hbWljcycsICdwcmljZV9yYW5nZSddXG4gICAgfVxuXG4gICAgcHVibGljIHNldEZpbHRlckNvbmZpZyA9IChmaWx0ZXJDb25maWc6IEZpbHRlckNvbmZpZykgPT4ge1xuICAgICAgICBmaWx0ZXJDb25maWcuZGVmYXVsdEZpbHRlcnMgPyB0aGlzLmZpbHRlckNvbmZpZy5kZWZhdWx0RmlsdGVycyA9IGZpbHRlckNvbmZpZy5kZWZhdWx0RmlsdGVycyA6IG51bGxcbiAgICAgICAgZmlsdGVyQ29uZmlnLmZpbHRlcnMgPyB0aGlzLmZpbHRlckNvbmZpZy5maWx0ZXJzID0gZmlsdGVyQ29uZmlnLmZpbHRlcnMgOiBudWxsXG4gICAgfVxuXG4gICAgcHVibGljIGdldEZpbHRlckNvbmZpZyA9ICgpID0+IHRoaXMuZmlsdGVyQ29uZmlnLmZpbHRlcnNcblxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBjb250aWVuZSB1biBhcnJlZ2xvIGRlIHN0cmluZyBjdXlvIGNvbnRlbmlkbyBzb24gbG9zIGNvZGlnb3MgZGUgbG9zIHBhaXNlcy5cbiAgICAgKiBAZXhhbXBsZSBbJ0FSJywnRVMnLCdHQiddXG4gICAgICovXG4gICAgcHJpdmF0ZSBjb3VudHJpZXM6IHN0cmluZ1tdID0gW11cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gY29udGllbmUgdW4gYXJyZWdsbyBkZSBzdHJpbmcgY3V5byBjb250ZW5pZG8gc29uIGxvcyBjb2RpZ29zIGRlIGxvcyBwYWlzZXMgYSBleGNsdWlyLlxuICAgICAqIEBleGFtcGxlIFsnR0InXVxuICAgICAqL1xuICAgIHB1YmxpYyBleGNsdWRlZENvdW50cmllczogc3RyaW5nW10gPSBbXVxuICAgIC8qKlxuICAgICAqXG4gICAgICogQHBhcmFtIGNvdW50cmllcyBkZWJlIGNvbnRlbmVyIGxvcyBjb2RpZ29zIGRlIGxvcyBwYWlzZXMgcXVlIHNlIHF1aWVyZSBtb3N0cmFyXG4gICAgICogQGV4YW1wbGUgWydBUicsJ0VTJywnR0InXVxuICAgICAqIEByZXR1cm5zXG4gICAgICovXG4gICAgcHVibGljIHNldENvdW50cmllcyA9IChjb3VudHJpZXM6IHN0cmluZ1tdKSA9PiB0aGlzLmNvdW50cmllcyA9IGNvdW50cmllcztcblxuICAgIHB1YmxpYyBnZXRDb3VudHJpZXMgPSAoKSA9PiB0aGlzLmNvdW50cmllcztcblxuXG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIGVzdGEgdmFyaWFibGUgc2UgdXRpbGl6YSBwYXJhIGNvbmZpZ3VyYXIgbG9zIHBhcmFtZXRyb3MgY3VhbmRvIHNlIGRlc2VhIG1vc3RyYXJcbiAgICAgKiB2YXJpYW50ZXMgZWwgbGlzdGFkbyBkZSBwcm9kdWN0b3MuXG4gICAgICogQHBhcmFtIHtzdHJpbmd9dHlwZSB0aXBvIGRlIG9wdGlvbnNcbiAgICAgKiBAcGFyYW0ge3N0cmluZ31jb2RlIGNvZGlnbyBkZSBvcHRpb25zXG4gICAgICogQHBhcmFtIHtib29sZWFufWRlZmF1bHRGaXJzdE9wdGlvbiBgdHJ1ZWAgdG9tYSBlbCBwcmltZXIgb3B0aW9uIGRlbCBwcm9kdWN0byBlbiBnZW5lcmFsXG4gICAgICogQHBhcmFtIHtib29sZWFufWNoZWNrSWZTdG9jayBgdHJ1ZWAgc2UgcmVhbGl6YSB1biBjaGVxdWVvIGRlIHNpIGxhIHZhcmlhbnRlIHRpZW5lIHN0b2NrIHBhcmEgbW9zdHJhcmxhXG4gICAgICogQGV4YW1wbGUgIGBgYGphdmFzY3JpcHRcbiAgICAgKiB7XG4gICAgICAgIHR5cGU6ICdjb2xvcicsXG4gICAgICAgIGNvZGU6ICdjb2xvcicsXG4gICAgICAgIGRlZmF1bHRGaXJzdE9wdGlvbjogZmFsc2UgLFxuICAgICAgICBjaGVja0lmU3RvY2s6dHJ1ZVxuICAgICAgICB9IGBgYFxuICAgICAqL1xuICAgIHByaXZhdGUgcGFyYW1zUHJvZHVjdHNXaXRoVW5pcXVlVmFyaWFudDogUGFyYW1zUHJvZHVjdHNXaXRoVW5pcXVlVmFyaWFudCA9IHtcbiAgICAgICAgdHlwZTogJ2NvbG9yJyxcbiAgICAgICAgY29kZTogJ2NvbG9yJyxcbiAgICAgICAgZGVmYXVsdEZpcnN0T3B0aW9uOiBmYWxzZSxcbiAgICAgICAgY2hlY2tJZlN0b2NrOiB0cnVlXG4gICAgfVxuXG4gICAgc2V0UGFyYW1zUHJvZHVjdHNXaXRoVW5pcXVlVmFyaWFudCA9ICh2YWx1ZTogUGFyYW1zUHJvZHVjdHNXaXRoVW5pcXVlVmFyaWFudCkgPT4ge1xuICAgICAgICB0aGlzLnBhcmFtc1Byb2R1Y3RzV2l0aFVuaXF1ZVZhcmlhbnQgPSB7XG4gICAgICAgICAgICAuLi50aGlzLnBhcmFtc1Byb2R1Y3RzV2l0aFVuaXF1ZVZhcmlhbnQsXG4gICAgICAgICAgICAuLi52YWx1ZVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgZ2V0UGFyYW1zUHJvZHVjdHNXaXRoVW5pcXVlVmFyaWFudCA9ICgpID0+IHRoaXMucGFyYW1zUHJvZHVjdHNXaXRoVW5pcXVlVmFyaWFudFxuXG5cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gc2UgdXRpbGl6YSBwYXJhIGNvbmZpZ3VyYXIgcXVlIGZpbHRyb3MgZGVsIHRpcG8gYFNvcnRGaWx0ZXJgIHNlIHF1aWVyZSBtb3N0cmFyIGVuIGxhIHZpc3RhLlxuICAgICAqIFNlIHVzYW4gbG9zIGNvZGlnbyBkZSBsb3MgZmlsdHJvcyBwYXJhIGluZGljYXIgY3VhbGVzIHNlIGRlYmVuIG1vc3RyYXIuXG4gICAgICovXG4gICAgcHJpdmF0ZSBzb3J0RmlsdGVyczogc3RyaW5nW10gPSBbJ3ByaWNlJywgJ29yZGVyLWFscGgnLCAncmVjZW50J11cblxuICAgIC8qKlxuICAgICAqXG4gICAgICogQHBhcmFtIGZpbHRlcnNDb2RlIGFycmVnbG8gZGUgc3RyaW5ncyBjb24gbG9zIGNvZGlnb3MgZGUgbG9zIGZpbHRyb3MuXG4gICAgICogU2kgc2UgbGUgcGFzYSBlbCBwYXJhbWV0cm8gKiphbGwqKiBlc3RlIG1vc3RyYXJhIHRvZG9zLlxuICAgICAqIEBleGFtcGxlIHByaWNlIHwgb3JkZXItYWxwaCB8IHJlY2VudCB8IHVwZGF0ZSB8IGFsbFxuICAgICAqIEByZXR1cm5zXG4gICAgICovXG4gICAgc2V0U29ydEZpbHRlcnMgPSAoZmlsdGVyc0NvZGU6IHN0cmluZ1tdID0gWydhbGwnXSkgPT4gdGhpcy5zb3J0RmlsdGVycyA9IGZpbHRlcnNDb2RlO1xuXG4gICAgZ2V0U29ydEZpbHRlcnMgPSAoKSA9PiB0aGlzLnNvcnRGaWx0ZXJzO1xuXG4gICAgcHJpdmF0ZSBwb3N0YWxDb2RlUGF0dGVybnM6IHsgW2tleTogc3RyaW5nXTogeyBwYXR0ZXJuOiBSZWdFeHAsIGVycm9yS2V5OiBzdHJpbmcgfSB9ID0ge1xuICAgICAgICAnQVInOiB7IHBhdHRlcm46IC9eWzAtOV17NH0kLywgZXJyb3JLZXk6IFwicG9zdGFsLWNvZGUtcGF0dGVybi1lcnJvci5hclwiIH0sXG4gICAgICAgICdVWSc6IHsgcGF0dGVybjogL15bMC05XXs1fSQvLCBlcnJvcktleTogXCJwb3N0YWwtY29kZS1wYXR0ZXJuLWVycm9yLnV5XCIgfSxcbiAgICAgICAgJ0dCJzogeyBwYXR0ZXJuOiAvXltBLVpdezEsMn1bMC05XVtBLVowLTldP1xccz9bMC05XVtBLVpdezJ9JC8sIGVycm9yS2V5OiBcInBvc3RhbC1jb2RlLXBhdHRlcm4tZXJyb3IuZ2JcIiB9LFxuICAgICAgICAnRVMnOiB7IHBhdHRlcm46IC9eKD86MFsxLTldfFsxLTRdXFxkfDVbMC0yXSlcXGR7M30kLywgZXJyb3JLZXk6IFwicG9zdGFsLWNvZGUtcGF0dGVybi1lcnJvci5lc1wiIH0sXG4gICAgICAgICdCUic6IHsgcGF0dGVybjogL15bMC05XXs1fS1bMC05XXszfSQvLCBlcnJvcktleTogXCJwb3N0YWwtY29kZS1wYXR0ZXJuLWVycm9yLmJyXCIgfSxcbiAgICAgICAgJ0ZSJzogeyBwYXR0ZXJuOiAvXlswLTldezV9JC8sIGVycm9yS2V5OiBcInBvc3RhbC1jb2RlLXBhdHRlcm4tZXJyb3IuZnJcIiB9LFxuICAgICAgICAnUFQnOiB7IHBhdHRlcm46IC9eWzAtOV17NH0tWzAtOV17M30kLywgZXJyb3JLZXk6IFwicG9zdGFsLWNvZGUtcGF0dGVybi1lcnJvci5wdFwiIH0sXG4gICAgfTtcblxuICAgIGdldFBvc3RhbENvZGVQYXR0ZXJuKGNvdW50cnlDb2RlOiBzdHJpbmcpOiB7IHBhdHRlcm46IFJlZ0V4cCwgZXJyb3JLZXk6IHN0cmluZyB9IHtcbiAgICAgICAgcmV0dXJuIHRoaXMucG9zdGFsQ29kZVBhdHRlcm5zW2NvdW50cnlDb2RlXSB8fCB7IHBhdHRlcm46IC9eW0EtWmEtejAtOVxcc1xcLV0rJC8sIGVycm9yS2V5OiBcInBvc3RhbC1jb2RlLXBhdHRlcm4tZXJyb3IuZGVmYXVsdFwiIH07XG4gICAgfVxufVxuIl19
450
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29yZS5jb25zdHMuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9uZy1lYXN5Y29tbWVyY2UvIiwic291cmNlcyI6WyJsaWIvY29yZS5jb25zdHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFDQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNuRCxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDekMsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDdkQsT0FBTyxFQUFFLGVBQWUsRUFBRSxhQUFhLEVBQUUsTUFBTSxNQUFNLENBQUM7Ozs7QUFhdEQ7SUFFSSxtQkFBbUIsU0FBMkIsRUFBVSxNQUFjLEVBQXlCLEdBQUc7UUFBbEcsaUJBQXVHO1FBQXBGLGNBQVMsR0FBVCxTQUFTLENBQWtCO1FBQVUsV0FBTSxHQUFOLE1BQU0sQ0FBUTtRQUF5QixRQUFHLEdBQUgsR0FBRyxDQUFBO1FBRWpGLFdBQU0sR0FBRyxRQUFRLENBQUM7UUFDbEIsWUFBTyxHQUFHLFNBQVMsQ0FBQztRQUM5QixnQkFBVyxHQUFXLEVBQUUsQ0FBQztRQUV4Qix5QkFBb0IsR0FBRyxJQUFJLGFBQWEsRUFBTyxDQUFDO1FBQ2pELG1CQUFjLEdBQUcsSUFBSSxDQUFDLG9CQUFvQixDQUFDLFlBQVksRUFBRSxDQUFDO1FBRXpELHFCQUFnQixHQUFHLFVBQUMsT0FBTyxJQUFLLE9BQUEsWUFBWSxHQUFHLE9BQU8sR0FBRyxTQUFTLEVBQWxDLENBQWtDLENBQUM7UUFFbkUsa0JBQWEsR0FBVyxNQUFNLElBQUksRUFBRSxDQUFDO1FBQ3JDLHFCQUFnQixHQUFXLElBQUksQ0FBQyxhQUFhLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRSxDQUFDO1FBRXJFLGdGQUFnRjtRQUN4RSxZQUFPLEdBQVcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMs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SSxLQUFLLENBQUMsSUFBSSxJQUFJLFFBQVEsRUFBcEUsQ0FBb0UsQ0FBQyxDQUFBO0lBRXBHLENBQUM7SUFBQSxDQUFDO0lBa0lGLHdDQUFvQixHQUFwQixVQUFxQixXQUFtQjtRQUNwQyxPQUFPLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxXQUFXLENBQUMsSUFBSSxFQUFFLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxRQUFRLEVBQUUsbUNBQW1DLEVBQUUsQ0FBQztJQUNwSSxDQUFDOztnQkE1ZDZCLGdCQUFnQjtnQkFBa0IsTUFBTTtnREFBRyxNQUFNLFNBQUMsS0FBSzs7O0lBRjVFLFNBQVM7UUFIckIsVUFBVSxDQUFDO1lBQ1IsVUFBVSxFQUFFLE1BQU07U0FDckIsQ0FBQztRQUcyRSxXQUFBLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQTtPQUY3RSxTQUFTLENBK2RyQjtvQkFoZkQ7Q0FnZkMsQUEvZEQsSUErZEM7U0EvZFksU0FBUyIsInNvdXJjZXNDb250ZW50IjpbIlxuaW1wb3J0IHsgSW5qZWN0YWJsZSwgSW5qZWN0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHsgVHJhbnNsYXRlU2VydmljZSB9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBSZXBsYXlTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBDb25uZWN0aW9uU2VydmljZSB9IGZyb20gJy4vYXBpL2Nvbm5lY3Rpb24uc2VydmljZSc7XG5pbXBvcnQgeyBDdXJyZW5jeUNvbmZpZyB9IGZyb20gJy4vaW50ZXJmYWNlcy9jdXJyZW5jeUNvbmZpZyc7XG5pbXBvcnQgeyBEZWZhdWx0RmlsdGVyLCBGaWx0ZXJDb25maWcgfSBmcm9tICcuL2ludGVyZmFjZXMvZmlsdGVyJztcbmltcG9ydCB7IFBhcmFtc1Byb2R1Y3RzV2l0aFVuaXF1ZVZhcmlhbnQgfSBmcm9tICcuL2ludGVyZmFjZXMvcGFyYW1zSW50ZXJmYWNlcy9wYXJhbXNQcm9kdWN0c1dpdGhVbmlxdWVWYXJpYW50JztcbnR5cGUgY3VycmVuY3lUeXBlID0gJ0VVUicgfCAnQVJHJyB8ICdVU0QnIHwgJ1BZRycgfCAnUEVOJyB8ICdTRUsnIHwgJ0NVU1RPTSc7XG50eXBlIHBvc2l0aW9uVHlwZSA9ICdMJyB8ICdSJztcbnR5cGUgY2hhbm5lbFR5cGVzID0gJ2IyYicgfCAnYjJiMmMnIHwgJ2IyYyc7XG5leHBvcnQgdHlwZSBDaGVja291dFZpZXdUeXBlID0gJ2xlZ2FjeScgfCAnc2luZ2xlJztcblxuQEluamVjdGFibGUoe1xuICAgIHByb3ZpZGVkSW46ICdyb290J1xufSlcbmV4cG9ydCBjbGFzcyBDb25zdGFudHMge1xuXG4gICAgY29uc3RydWN0b3IocHVibGljIHRyYW5zbGF0ZTogVHJhbnNsYXRlU2VydmljZSwgcHJpdmF0ZSByb3V0ZXI6IFJvdXRlciwgQEluamVjdCgnZW52JykgcHJpdmF0ZSBlbnYpIHsgfVxuXG4gICAgcHJpdmF0ZSByZWFkb25seSBMT0NBTEUgPSAnTE9DQUxFJztcbiAgICBwcml2YXRlIHJlYWRvbmx5IENIQU5ORUwgPSAnQ0hBTk5FTCc7XG4gICAgcHVibGljIHNlYXJjaFZhbHVlOiBzdHJpbmcgPSAnJztcblxuICAgIHByaXZhdGUgY2hhbm5lbENvbmZpZ1N1YmplY3QgPSBuZXcgUmVwbGF5U3ViamVjdDxhbnk+KCk7XG4gICAgcHVibGljIGNoYW5uZWxDb25maWckID0gdGhpcy5jaGFubmVsQ29uZmlnU3ViamVjdC5hc09ic2VydmFibGUoKTtcblxuICAgIHByaXZhdGUgY2hhbm5lbENvbmZpZ0FQSSA9IChjaGFubmVsKSA9PiAnL3Nob3AtYXBpLycgKyBjaGFubmVsICsgJ2NoYW5uZWwnO1xuXG4gICAgcHJpdmF0ZSBicm93c2VyV2luZG93OiBvYmplY3QgPSB3aW5kb3cgfHwge307XG4gICAgcHJpdmF0ZSBicm93c2VyV2luZG93RW52OiBvYmplY3QgPSB0aGlzLmJyb3dzZXJXaW5kb3dbJ19fZW52J10gfHwge307XG5cbiAgICAvLyAgICAgcHJpdmF0ZSB1cmxCYXNlOiBzdHJpbmcgPSAnaHR0cDovL3Rlc3RpbmcuYmFja2VuZC5lYXN5Y29tbWVyY2V0ZWNoLmNvbS8nO1xuICAgIHByaXZhdGUgdXJsQmFzZTogc3RyaW5nID0gdGhpcy5icm93c2VyV2luZG93RW52WydhcGlVcmwnXSA/IHRoaXMuYnJvd3NlcldpbmRvd0VudlsnYXBpVXJsJ10gOiAodGhpcy5lbnYuYXBpVXJsIHx8ICdodHRwOi8vYmFja2VuZC5lYXN5Y29tbWVyY2UuZGV2cC8nKTtcbiAgICBwcml2YXRlIHVybEFzc2V0czogc3RyaW5nID0gdGhpcy5icm93c2VyV2luZG93RW52Wyd1cmxBc3NldHMnXSA/IHRoaXMuYnJvd3NlcldpbmRvd0VudlsndXJsQXNzZXRzJ10gOiAodGhpcy5lbnYudXJsQXNzZXRzIHx8IHRoaXMudXJsQmFzZSk7XG4gICAgcHJpdmF0ZSB1cmxGcm9udGVuZDogc3RyaW5nID0gdGhpcy5icm93c2VyV2luZG93RW52Wyd1cmxGcm9udGVuZCddID8gdGhpcy5icm93c2VyV2luZG93RW52Wyd1cmxGcm9udGVuZCddIDogKHRoaXMuZW52LnVybEZyb250ZW5kIHx8ICdodHRwczovL2VsZGVuLmVhc3ljb21tZXJjZXRlY2guY29tLycpO1xuICAgIHByaXZhdGUgbG9jYWxlOiBzdHJpbmcgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSh0aGlzLkxPQ0FMRSkgPyBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSh0aGlzLkxPQ0FMRSkgOiB0aGlzLmJyb3dzZXJXaW5kb3dFbnZbJ2xvY2FsZSddID8gdGhpcy5icm93c2VyV2luZG93RW52Wydsb2NhbGUnXSA6ICh0aGlzLmVudi5sb2NhbGUgfHwgJ2VzX0FSJyk7XG4gICAgcHJpdmF0ZSBjaGFubmVsOiBzdHJpbmcgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSh0aGlzLkNIQU5ORUwpID8gbG9jYWxTdG9yYWdlLmdldEl0ZW0odGhpcy5DSEFOTkVMKSA6IHRoaXMuYnJvd3NlcldpbmRvd0VudlsnY2hhbm5lbCddID8gdGhpcy5icm93c2VyV2luZG93RW52WydjaGFubmVsJ10gOiAodGhpcy5lbnYuY2hhbm5lbCB8fCAnbWlub3Jpc3RhJylcbiAgICBwcml2YXRlIGJsb2Nrc0NhY2hlVGltZTogc3RyaW5nID0gdGhpcy5icm93c2VyV2luZG93RW52WydibG9ja3NDYWNoZVRpbWUnXSA/IHRoaXMuYnJvd3NlcldpbmRvd0VudlsnYmxvY2tzQ2FjaGVUaW1lJ10gOiAodGhpcy5lbnYuYmxvY2tzQ2FjaGVUaW1lIHx8IG51bGwpO1xuICAgIHByaXZhdGUgY2hlY2tvdXRWaWV3OiBDaGVja291dFZpZXdUeXBlID0gJ2xlZ2FjeSc7XG4gICAgcHJpdmF0ZSBjaGVja291dFZpZXdTdWJqZWN0ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxDaGVja291dFZpZXdUeXBlPih0aGlzLmNoZWNrb3V0Vmlldyk7XG4gICAgcHVibGljIGNoZWNrb3V0VmlldyQgPSB0aGlzLmNoZWNrb3V0Vmlld1N1YmplY3QuYXNPYnNlcnZhYmxlKCk7XG5cbiAgICBwcml2YXRlIG1vZGFsQ29uZmlnID0geyB0aXRsZTogJ0V4YW1wbGUnLCBjbGFzczogJ21vZGFsLXhsIG1vZGFsLWRpYWxvZy1jZW50ZXJlZCcsIGtleWJvYXJkOiBmYWxzZSB9O1xuICAgIHNldE1vZGFsQ29uZmlnID0gKGNvbmZpZzogYW55KSA9PiB0aGlzLm1vZGFsQ29uZmlnID0gY29uZmlnO1xuICAgIGdldE1vZGFsQ29uZmlnID0gKCkgPT4gdGhpcy5tb2RhbENvbmZpZztcblxuICAgIHByaXZhdGUgdmVyc2lvbjogc3RyaW5nID0gJ3YxJztcblxuICAgIHByaXZhdGUgcm91dGVzID0gWy9eaG9tZSQvZywgL14oXFwvPyljb2xsZWN0aW9uKFxcLz8pKFtcXHdcXC5cXC9cXD9dKikkL2csIC9eY29udGFjdCQvZ107XG5cbiAgICAvKiBHZXQgcmlkIG9mIHRoaXMgQVNBUCEgKi9cbiAgICBwcml2YXRlIG1hc3RlckNoYW5uZWwgPSBudWxsXG5cbiAgICBwdWJsaWMgZ2V0TWFzdGVyQ2hhbm5lbCA9ICgpID0+IHtcbiAgICAgICAgaWYgKCF0aGlzLm1hc3RlckNoYW5uZWwpIHRoaXMubWFzdGVyQ2hhbm5lbCA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKCdNQVNURVJfQ0hBTk5FTCcpXG4gICAgICAgIHJldHVybiB0aGlzLm1hc3RlckNoYW5uZWxcbiAgICB9XG5cbiAgICBwdWJsaWMgc2V0TWFzdGVyQ2hhbm5lbCA9IGNoYW5uZWwgPT4ge1xuICAgICAgICB0aGlzLm1hc3RlckNoYW5uZWwgPSBjaGFubmVsXG4gICAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKCdNQVNURVJfQ0hBTk5FTCcsIGNoYW5uZWwpXG4gICAgfVxuXG4gICAgcHJpdmF0ZSBpc1Byb2R1Y3Rpb24gPSAoKSA9PiB0aGlzLmJyb3dzZXJXaW5kb3dFbnZbJ3Byb2R1Y3Rpb24nXSA/IHRoaXMuYnJvd3NlcldpbmRvd0VudlsncHJvZHVjdGlvbiddIDogKHRoaXMuZW52LnByb2R1Y3Rpb24gfHwgZmFsc2UpO1xuXG4gICAgc2V0VXJsQmFzZSA9ICh1cmwpID0+IHRoaXMudXJsQmFzZSA9IHVybDtcbiAgICBzZXRVcmxBc3NldHMgPSAodXJsKSA9PiB0aGlzLnVybEFzc2V0cyA9IHVybDtcblxuICAgIC8qKlxuICAgICAqIEBwYXJhbSBuZXh0IEZ1bmN0aW9uIHRvIGV4ZWN1dGVcbiAgICAgKiBAcGFyYW0gcGFyYW1zIFRoYXQgZnVuY3Rpb24gbmVlZHNcbiAgICAgKlxuICAgICAqIEV4ZWN1dGUgdGhlIGZ1bmN0aW9uIHBhc3NlZCBhcyBwYXJhbXMsIGlmIHRoZSBmcm9udGVuZCBpcyBpbiBwcm9kdWN0aW9uIG1vZGVcbiAgICAgKi9cbiAgICBvbmx5SWZQcm9kdWN0aW9uID0gKG5leHQsIHBhcmFtcykgPT4gdGhpcy5pc1Byb2R1Y3Rpb24oKSAmJiBuZXh0KHBhcmFtcyk7XG5cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gRGV2dWVsdmUgbGEgdXJsIGJhc2UgZG9uZGUgc2UgYWxvamFuIGxvcyBhcmNoaXZvcyBtdWx0aW1lZGlhXG4gICAgICogQHBhcmFtIHBvc3RNZWRpYSBjYXJwZXRhIGRvbmRlIHNlIGd1YXJkYW4gbG9zIGFyY2hpdm9zXG4gICAgICogQHJldHVybnNcbiAgICAgKi9cbiAgICBtZWRpYVVybCA9IChwb3N0TWVkaWE/OiBzdHJpbmcpID0+IHRoaXMudXJsQXNzZXRzICsgKHRoaXMudXJsQXNzZXRzID09IHRoaXMudXJsQmFzZSA/ICdtZWRpYS8nIDogJycpICsgKHBvc3RNZWRpYSA/IHBvc3RNZWRpYSA6IFwiaW1hZ2UvXCIpO1xuICAgIG1lZGlhQmFubmVyVXJsID0gKCkgPT4gdGhpcy51cmxBc3NldHMgKyAodGhpcy51cmxBc3NldHMgPT0gdGhpcy51cmxCYXNlID8gJ21lZGlhLycgOiAnJykgKyBcImJhbm5lci1pbWFnZS9cIjtcbiAgICBtZWRpYVN0b3JlVXJsID0gKCkgPT4gdGhpcy51cmxBc3NldHMgKyAodGhpcy51cmxBc3NldHMgPT0gdGhpcy51cmxCYXNlID8gJ21lZGlhLycgOiAnJykgKyBcInN0b3JlLWltYWdlL1wiO1xuXG4gICAgZ2V0UHJvZHVjdHNMaXN0Um91dGUgPSAoKSA9PiAnY29sbGVjdGlvbi8nO1xuXG4gICAgZ2V0U2VjdGlvbnNSb3V0ZSA9ICgpID0+ICdzZWN0aW9uLyc7XG5cbiAgICBnZXRVcmxCYXNlID0gKCkgPT4gdGhpcy51cmxCYXNlO1xuICAgIGdldFVybEZyb250ZW5kID0gKCkgPT4gdGhpcy51cmxGcm9udGVuZDtcblxuICAgIGdldEJsb2Nrc0NhY2hlVGltZSA9ICgpOiBudW1iZXIgPT4gdGhpcy5ibG9ja3NDYWNoZVRpbWUgJiYgcGFyc2VJbnQodGhpcy5ibG9ja3NDYWNoZVRpbWUpO1xuXG4gICAgLy8gZ2V0TG9jYWxlID0gKCkgPT4gdGhpcy5sb2NhbGU7XG4gICAgLy8gc2V0TG9jYWxlID0gKGxvY2FsZSkgPT4gdGhpcy5sb2NhbGUgPSBsb2NhbGU7XG5cbiAgICBnZXRMb2NhbGUgPSAoKSA9PiB7XG4gICAgICAgIGlmIChsb2NhbFN0b3JhZ2UuZ2V0SXRlbSh0aGlzLkxPQ0FMRSkpIHtcbiAgICAgICAgICAgIHRoaXMubG9jYWxlID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0odGhpcy5MT0NBTEUpXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMubG9jYWxlXG4gICAgfVxuXG4gICAgZ2V0TG9jYWxlVHJhbnNsYXRlID0gKCkgPT4ge1xuICAgICAgICByZXR1cm4gdGhpcy5nZXRMb2NhbGUoKS5zcGxpdCgnXycpWzBdXG4gICAgfVxuXG4gICAgcHVibGljIHNldExvY2FsZSA9IGxvY2FsZSA9PiB7XG4gICAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKHRoaXMuTE9DQUxFLCBsb2NhbGUpXG4gICAgICAgIHRoaXMudHJhbnNsYXRlLnVzZShsb2NhbGUuc3BsaXQoJ18nKVswXSlcbiAgICAgICAgdGhpcy5sb2NhbGUgPSBsb2NhbGVcbiAgICB9XG5cbiAgICBnZXRDaGFubmVsID0gKCkgPT4ge1xuICAgICAgICBpZiAobG9jYWxTdG9yYWdlLmdldEl0ZW0odGhpcy5DSEFOTkVMKSkge1xuICAgICAgICAgICAgdGhpcy5jaGFubmVsID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0odGhpcy5DSEFOTkVMKVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLmNoYW5uZWxcbiAgICB9XG5cbiAgICBwdWJsaWMgc2V0Q2hhbm5lbCA9IGNoYW5uZWwgPT4ge1xuICAgICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSh0aGlzLkNIQU5ORUwsIGNoYW5uZWwpXG4gICAgICAgIHRoaXMuY2hhbm5lbCA9IGNoYW5uZWxcbiAgICB9XG5cbiAgICBnZXRDaGVja291dFZpZXcgPSAoKTogQ2hlY2tvdXRWaWV3VHlwZSA9PiB0aGlzLmNoZWNrb3V0VmlldztcblxuICAgIHByaXZhdGUgc2V0Q2hlY2tvdXRWaWV3ID0gKHZpZXc6IENoZWNrb3V0Vmlld1R5cGUpID0+IHtcbiAgICAgICAgY29uc3Qgbm9ybWFsaXplZDogQ2hlY2tvdXRWaWV3VHlwZSA9IHZpZXcgPT09ICdzaW5nbGUnID8gJ3NpbmdsZScgOiAnbGVnYWN5JztcbiAgICAgICAgdGhpcy5jaGVja291dFZpZXcgPSBub3JtYWxpemVkO1xuICAgICAgICB0aGlzLmNoZWNrb3V0Vmlld1N1YmplY3QubmV4dChub3JtYWxpemVkKTtcbiAgICB9XG5cbiAgICBnZXRWZXJzaW9uID0gKCkgPT4gdGhpcy52ZXJzaW9uO1xuXG4gICAgbG9naW5FeHRyYURhdGEgPSAoKSA9PiB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBjbGllbnRfaWQ6ICdkZW1vX2NsaWVudCcsXG4gICAgICAgICAgICBjbGllbnRfc2VjcmV0OiAnc2VjcmV0X2RlbW9fY2xpZW50JyxcbiAgICAgICAgICAgIGdyYW50X3R5cGU6ICdwYXNzd29yZCdcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGlzQ29sbGVjdGlvbiA9IChwYXRoKSA9PiAoL14oXFwvPyljb2xsZWN0aW9uKFxcLz8pKFtcXHdcXC5cXC9cXD9dKikkL2cpLnRlc3QocGF0aCk7XG5cbiAgICAvKipcbiAgICAgKiBVdGlsaXRpZXNcbiAgICAgKi9cblxuICAgIG1vYmlsZSA9ICgpID0+IHdpbmRvdy5pbm5lcldpZHRoIDwgNzUwO1xuXG4gICAgc3RyaWN0VHlwZUNoYW5uZWwgPSAoKSA9PiB0aGlzLmVudi5zdHJpY3RUeXBlQ2hhbm5lbCB8fCAnYjJiMmMnO1xuXG4gICAgdG9EZWNpbWFsID0gKHRvdGFsKSA9PiAodG90YWwgLSBNYXRoLmZsb29yKHRvdGFsKSA9PSAwKSA/IHRvdGFsIC8gMTAwIDogdG90YWw7XG5cbiAgICAvKipcbiAgICAgKiBFbGVtZW50b3MgcGFyYSBtYW5lam8gZGUgbGlzdGEgZGUgcnV0YXMgcmV1dGlsaXphYmxlc1xuICAgICAqL1xuXG4gICAgYWRkUm91dGVUb1JldXNlID0gKHJvdXRlOiBSZWdFeHApID0+IHJvdXRlICYmIHRoaXMucm91dGVzLnB1c2gocm91dGUpO1xuXG4gICAgcmVtb3ZlUm91dGVUb1JldXNlID0gKHJvdXRlOiBSZWdFeHApID0+IHtcbiAgICAgICAgY29uc3QgaW5kZXggPSB0aGlzLnJvdXRlcy5pbmRleE9mKHJvdXRlKTtcbiAgICAgICAgaWYgKGluZGV4ID4gLTEpIHtcbiAgICAgICAgICAgIHRoaXMucm91dGVzLnNwbGljZShpbmRleCwgMSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBnZXRSb3V0ZXNUb1JldXNlID0gKCk6IFJlZ0V4cFtdID0+IHRoaXMucm91dGVzO1xuXG5cblxuICAgIC8qKlxuICAgICAqICBAcHVibGljIGVqZW1wbG8gZGUgdXNvIDxpbWcgKm5nRm9yPVwibGV0IGl0ZW0gb2YgY29uc3RzLmdldFJhdGluZ1N0YXIocHJvZHVjdC5yYXRpbmcsJ2Fzc2V0cy9pbWFnZXMvc3Rhci5wbmcnLCdhc3NldHMvaW1hZ2VzL25vdFN0YXIucG5nJylcIiBbc3JjXT1cIml0ZW1cIj5cbiAgICAgKiAgQGRlc2NyaXB0aW9uIGZ1bmNpb24gcXVlIGRhZG8gdW4gdmFsb3IgZW50cmUgMSAuLiA1LCB5IHN0YXI6IG5vdFN0YXI6XG4gICAgICogICAgICAoZGViZW4gc2VyIGVsIHBhdGggZGVsIGFyY2hpdm8gbG9jYWwgYSBsYSBpbXBsZW1lbnRhY2lvbikuXG4gICAgICogICAgICByZXRvcm5hIHVuIGFycmVnbG8gY29uIGNvbiBsYSB2YWxvcmFjaW9uIGNvcnJlc3BvbmRpZW50ZS5cbiAgICAgKi9cbiAgICBnZXRSYXRpbmdTdGFyID0gKHJhdGluZzogYW55LCBzdGFyOiBTdHJpbmcsIG5vdFN0YXI6IFN0cmluZykgPT4ge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgbGV0IHVybFN0YXIgPSBbXTtcbiAgICAgICAgICAgIGxldCBjYW50U3RhciA9IE51bWJlcihyYXRpbmcpIHx8IDA7XG4gICAgICAgICAgICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgNTsgaW5kZXgrKykge1xuICAgICAgICAgICAgICAgIHVybFN0YXIucHVzaChcbiAgICAgICAgICAgICAgICAgICAgY2FudFN0YXIgPiAwXG4gICAgICAgICAgICAgICAgICAgICAgICA/IHN0YXJcbiAgICAgICAgICAgICAgICAgICAgICAgIDogbm90U3RhclxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgY2FudFN0YXItLTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB1cmxTdGFyO1xuICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcihcImdldFJhdGluZ1N0YXIgcHJvZHVqbyB1biBlcnJvciAtPiBcIiwgZXJyb3IpO1xuICAgICAgICB9XG5cbiAgICB9O1xuXG4gICAgLyoqXG4gICAgICogIEBwdWJsaWMgZWplbXBsbyBkZSB1c28gKGtleXByZXNzKT1cImlucHV0VmFsaWRhdGlvbkJ5RXhwcmVzc2lvbnMoJGV2ZW50LCdbMC05XXsxLDl9JylcIiBlbiBlbCBET00uXG4gICAgICogIEBkZXNjcmlwdGlvbiBmdW5jaW9uIHF1ZSBkYWRvIHVuIG1hbmVqYW5kb3IgZGUgZXZlbnRvLCB5IHVuYSBleHByZXNpb24gcmVndWxhciBlc3RhIGVzXG4gICAgICogICAgICAgICAgZXZhbHVhZGEgc29icmUgbG9zIHZhbG9yZXMgcXVlIGVsIG1hbmVqYWRvciBkZSBldmVudG9zIG5vcyBlbnZpYS5cbiAgICAgKiAgICAgICAgICBFbiBlbCBjYXNvIGVuIGVsIHF1ZSBzZSBlbnZpZSBlbCBwYXJhbWV0cm8gJ2NvbmRpdGlvbicgZXN0ZSBwdWVkZSBzZXIgcGFyYVxuICAgICAqICAgICAgICAgIGFudWxhciBlbCBldmVudG8gY29tbyBjb25kaWNpb24gYWRpY2lvbmFsIGEgbGEgZXZhbHVhY2lvbiBkZSBsYSBlbnRyYWRhLlxuICAgICAqL1xuICAgIGlucHV0VmFsaWRhdGlvbkJ5RXhwcmVzc2lvbnMgPSAoZSwgcGF0cm9uLCBjb25kaXRpb24gPSBudWxsKSA9PiB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBsZXQgdGVjbGEgPSAoZG9jdW1lbnQpID8gZS5rZXlDb2RlIDogZS53aGljaDtcbiAgICAgICAgICAgIGlmICh0ZWNsYSA9PSA4KSByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIGxldCBwYXRyb25SZWcgPSBuZXcgUmVnRXhwKHBhdHJvbilcbiAgICAgICAgICAgIGxldCB0ZWNsYV9maW5hbCA9IFN0cmluZy5mcm9tQ2hhckNvZGUodGVjbGEpO1xuICAgICAgICAgICAgaWYgKGNvbmRpdGlvbiAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHBhdHJvblJlZy50ZXN0KHRlY2xhX2ZpbmFsKSAmJiBjb25kaXRpb247XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gcGF0cm9uUmVnLnRlc3QodGVjbGFfZmluYWwpXG4gICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKFwiaW5wdXRWYWxpZGF0aW9uQnlFeHByZXNzaW9ucyBwcm9kdWpvIHVuIGVycm9yIC0+IFwiLCBlcnJvcik7XG4gICAgICAgIH1cbiAgICB9XG5cblxuICAgIC8qKlxuICAgICAqXG4gICAgICogQHBhcmFtIG5lZWRsZXMgKGFndWphcykgb2JqZWN0IGNvbiBjbGF2ZXMgdmFsb3IgYSBmaWx0cmFyXG4gICAgICogQHBhcmFtIGhheXN0YWNrIChwYWphcikgb2JqZWN0byBlbiBlbCBxdWUgYnVzY2FyXG4gICAgICpcbiAgICAgKiBAZGVzY3JpcHRpb24gZnVuY2lvbiBxdWUgYnVzY2EgZW4gZWwgaGF5c3RhY2sgKHBhamFyKSB0b2RvcyBsb3Mgb2JqZXRvcyBxdWUgY29udGVudGFuXG4gICAgICogdG9kYXMgbGFzIGNsYXZlcyBkZSBsb3MgbmVlZGxlcyhhZ3VqYXMpIHF1ZSBjb250ZW5nYW4gZWwgbWlzbW8gdmFsb3JcbiAgICAgKi9cbiAgICBjb250YWluc0FsbChuZWVkbGVzOiBvYmplY3QsIGhheXN0YWNrOiBvYmplY3QpOiBib29sZWFuIHtcbiAgICAgICAgbGV0IHJlc3VsdDogYm9vbGVhbiA9IHRydWU7XG5cbiAgICAgICAgaWYgKCEhbmVlZGxlcyAmJiAhIWhheXN0YWNrKSB7XG4gICAgICAgICAgICBPYmplY3QuZW50cmllcyhuZWVkbGVzKS5mb3JFYWNoKHZhbHVlID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoIShoYXlzdGFjay5oYXNPd25Qcm9wZXJ0eSh2YWx1ZVswXSkgJiYgaGF5c3RhY2tbdmFsdWVbMF1dID09IHZhbHVlWzFdKSkgcmVzdWx0ID0gZmFsc2VcbiAgICAgICAgICAgIH0pXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBQcm9waWVkYWQgcXVlIHNlIHV0aWxpemEgcGFyYSB0b21hciBjb21vIGNvbmZpZ3VyYWNpw7NuIHBhcmEgZWwgdGlwbyBkZSBtb25lZGEgcXVlIHNlIHV0aWxpemEgZW4gZWwgc2l0aW8uXG4gICAgICogRXN0b3MgdmFsb3JlcyBzb24gdXRpbGl6YWRvcyBwYXJhIGVsIHBpcGUgY3VycmVuY3lQcmljZVxuICAgICAqL1xuICAgIHB1YmxpYyBjdXJyZW5jeTogQ3VycmVuY3lDb25maWcgPSB7XG4gICAgICAgIGNvZGU6ICdBUkcnLFxuICAgICAgICBzeW1ib2w6ICckJyxcbiAgICAgICAgcG9zaXRpb246ICdMZWZ0JyxcbiAgICAgICAgd2l0aG91dERlY2ltYWw6IGZhbHNlXG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQXJyZWdsbyBkZSB2YWxvcmVzIHVzYWRvcyBwYXJhIGVsIHBpcGUgY3VycmVuY3lQcmljZVxuICAgICAqL1xuICAgIHB1YmxpYyBjdXJyZW5jeVR5cGVDb25maWc6IEN1cnJlbmN5Q29uZmlnW10gPSBbXG4gICAgICAgIHtcbiAgICAgICAgICAgIGNvZGU6ICdFVVInLFxuICAgICAgICAgICAgc3ltYm9sOiAn4oKsJyxcbiAgICAgICAgICAgIHBvc2l0aW9uOiAnUmlnaHQnLFxuICAgICAgICAgICAgd2l0aG91dERlY2ltYWw6IGZhbHNlXG5cbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgY29kZTogJ0FSRycsXG4gICAgICAgICAgICBzeW1ib2w6ICckJyxcbiAgICAgICAgICAgIHBvc2l0aW9uOiAnTGVmdCcsXG4gICAgICAgICAgICB3aXRob3V0RGVjaW1hbDogZmFsc2VcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgY29kZTogJ0FSUycsXG4gICAgICAgICAgICBzeW1ib2w6ICckJyxcbiAgICAgICAgICAgIHBvc2l0aW9uOiAnTGVmdCcsXG4gICAgICAgICAgICB3aXRob3V0RGVjaW1hbDogZmFsc2VcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgY29kZTogJ1VTRCcsXG4gICAgICAgICAgICBzeW1ib2w6ICckJyxcbiAgICAgICAgICAgIHBvc2l0aW9uOiAnTGVmdCcsXG4gICAgICAgICAgICB3aXRob3V0RGVjaW1hbDogZmFsc2VcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgY29kZTogJ1BZRycsXG4gICAgICAgICAgICBzeW1ib2w6ICdHcy4nLFxuICAgICAgICAgICAgcG9zaXRpb246ICdMZWZ0JyxcbiAgICAgICAgICAgIHdpdGhvdXREZWNpbWFsOiBmYWxzZVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBjb2RlOiAnUEVOJyxcbiAgICAgICAgICAgIHN5bWJvbDogJ1MvJyxcbiAgICAgICAgICAgIHBvc2l0aW9uOiAnTGVmdCcsXG4gICAgICAgICAgICB3aXRob3V0RGVjaW1hbDogZmFsc2VcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgY29kZTogJ1NFSycsXG4gICAgICAgICAgICBzeW1ib2w6ICdTRUsnLFxuICAgICAgICAgICAgcG9zaXRpb246ICdSaWdodCcsXG4gICAgICAgICAgICB3aXRob3V0RGVjaW1hbDogdHJ1ZVxuICAgICAgICB9LFxuICAgIF1cblxuICAgIHB1YmxpYyBzZXRDdXJyZW5jeVR5cGVDb25maWcgPSAoY3VycmVuY3lUeXBlQ29uZmlnOiBDdXJyZW5jeUNvbmZpZ1tdKSA9PiB7XG4gICAgICAgIHRoaXMuY3VycmVuY3lUeXBlQ29uZmlnID0gY3VycmVuY3lUeXBlQ29uZmlnO1xuICAgIH1cblxuXG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIFJlZW1wbGF6YSBsb3MgdmFsb3JlcyBkZSB1bmEgbW9uZWRhLlxuICAgICAqIEBwYXJhbSBjdXJyZW5jeVR5cGVGaW5kIFRpcG8gZGUgY3VycmVuY3kgcXVlIHNlIGRlc2VhIG1vZGlmaWNhclxuICAgICAqIEBwYXJhbSBjdXN0b21UeXBlIExvcyBudWV2b3MgdmFsb3Jlcy4gVG9kYXMgbGFzIGtleSBzb24gb3BjaW9uYWxlc1xuICAgICAqIEBleGFtcGxlIGN1c3RvbVR5cGUgPSB7IGNvZGU6ICdBUkcnLCBzeW1ib2w6ICckJywgcG9zaXRpb246ICdMZWZ0JyAsIHdpdGhvdXREZWNpbWFsOiBmYWxzZSB9XG4gICAgICovXG4gICAgcHVibGljIHJlcGxhY2VDdXJyZW5jeVR5cGVDb25maWcgPSAoY3VycmVuY3lUeXBlRmluZDogY3VycmVuY3lUeXBlLCBjdXN0b21UeXBlOiBDdXJyZW5jeUNvbmZpZykgPT4ge1xuICAgICAgICBsZXQgY3VycmVuY3lUeXBlID0gdGhpcy5jdXJyZW5jeVR5cGVDb25maWcuZmluZCh0eXBlID0+IHR5cGUuY29kZSA9PSBjdXJyZW5jeVR5cGVGaW5kKVxuICAgICAgICBpZiAoY3VycmVuY3lUeXBlKSB7XG4gICAgICAgICAgICBjdXJyZW5jeVR5cGUuc3ltYm9sID0gY3VzdG9tVHlwZT8uc3ltYm9sIHx8IGN1cnJlbmN5VHlwZS5zeW1ib2xcbiAgICAgICAgICAgIGN1cnJlbmN5VHlwZS5jb2RlID0gY3VzdG9tVHlwZT8uY29kZSB8fCBjdXJyZW5jeVR5cGUuY29kZVxuICAgICAgICAgICAgY3VycmVuY3lUeXBlLnBvc2l0aW9uID0gY3VzdG9tVHlwZT8ucG9zaXRpb24gfHwgY3VycmVuY3lUeXBlLnBvc2l0aW9uXG4gICAgICAgICAgICBjdXJyZW5jeVR5cGUud2l0aG91dERlY2ltYWwgPSBjdXN0b21UeXBlPy53aXRob3V0RGVjaW1hbCB8fCBjdXJyZW5jeVR5cGUud2l0aG91dERlY2ltYWxcbiAgICAgICAgfVxuICAgICAgICAvL1JldmVlciBlbiBlbCBmdXR1cm8gc2kgc2UgZW1waWV6YW4gYSBhZ3JlZ2FyIG90cm8gdGlwb3MgZGUgbW9uZWRhc1xuICAgICAgICAvKiBlbHNle1xuICAgICAgICAgICAgdGhpcy5jdXJyZW5jeVR5cGVDb25maWcucHVzaCh7Li4uY3VzdG9tVHlwZSB9KVxuICAgICAgICB9ICovXG4gICAgfVxuXG4gICAgLyoqXG4gICAgICpcbiAgICAgKiBAcGFyYW0gY3VycmVuY3lUeXBlRmluZCBEZWZpbmlyIGVsIGNvZGUgZGVsIHRpcG8gZGUgbW9uZWRhIHF1ZSBzZSBxdWllcmEgdXRpbGl6YXIuXG4gICAgICogU2kgZWwgdGlwbyBlcyBDVVNUT00gc2UgdG9tYW4gbG9zIHZhbG9yZXMgZGVsIHNlZ3VuZG8gcGFyYW1ldHJvIGRvbmRlIHNlIHB1ZWRlIGRlZmluaXIgbGEgc2ltYm9sb2fDrWEgeSBwb3Nlc2nDs24gcXVlIHNlIHF1aWVyYS5cbiAgICAgKiBAcGFyYW0gY3VzdG9tVHlwZSBGb3JtYXRvIGRlbCBwYXLDoW1ldHJvIGVqZW1wbG8geyBjb2RlOiAnQVJHJywgc3ltYm9sOiAnJCcsIHBvc2l0aW9uOiAnTCcgLCB3aXRob3V0RGVjaW1hbHM6IGZhbHNlIH0gLFxuICAgICAqIHRvZGFzIGxhcyBrZXkgc29uIG9wY2lvbmFsZXMgeSBwb3IgZGVmZWN0byBzZSB0b21hbiBsb3MgdmFsb3JlcyBkZWwgZWplbXBsby5cbiAgICAgKiBAcmV0dXJucyBzZSByZXRvcm5hIGxhIGNvbmZpZ3VyYWNpw7NuIHF1ZSBzZSBzZXRlbyBhIGxhIHByb3BpZWRhZCBjdXJyZW5jeSBkZWwgc2VydmljaW8uXG4gICAgICovXG4gICAgcHVibGljIHNldEN1cnJlbmN5ID0gKGN1cnJlbmN5VHlwZUZpbmQ6IGN1cnJlbmN5VHlwZSwgY3VzdG9tVHlwZT86IEN1cnJlbmN5Q29uZmlnKSA9PiB7XG4gICAgICAgIHRoaXMuY3VycmVuY3kgPSB0aGlzLmN1cnJlbmN5VHlwZUNvbmZpZy5maW5kKGN0ID0+IGN0LmNvZGUgPT0gY3VycmVuY3lUeXBlRmluZC50b1VwcGVyQ2FzZSgpKSB8fCB0aGlzLmN1cnJlbmN5XG4gICAgICAgIGN1c3RvbVR5cGUgJiYgKHRoaXMuY3VycmVuY3kgPSB7IC4uLnRoaXMuY3VycmVuY3ksIC4uLmN1c3RvbVR5cGUgfSlcbiAgICAgICAgcmV0dXJuIHRoaXMuY3VycmVuY3k7XG4gICAgfTtcblxuXG4gICAgLyoqXG4gICAgICogZGV2dWVsdmUgdHJ1ZSBzaSBleGlzdGUgZWwgZWxlbWVudG8gXCJzZWFyY2hcIiBlbiBlbCBhcnJheSBkZSBwYXJhbWV0cm9zIFwicGFyYW1zXCJcbiAgICAgKlxuICAgICAqIEBwYXJhbSBwYXJhbXMgQXJyYXkgZGUgcGFyYW1ldHJvcyBlbnRyZSBsb3MgcXVlIGJ1c2NhclxuICAgICAqIEBwYXJhbSBzZWFyY2hlZCBFbGVtZW50byBxdWUgYnVzY2FyXG4gICAgICogQHBhcmFtIHByZWZpeCBwcmVmaWpvIGRlbCBzdHJpbmcgYSBidXNjYXIgKGVqZW1wbG86IFwibGlua19cIilcbiAgICAgKiBAcGFyYW0gc3VmZml4IHN1ZmlqbyBkZWwgc3RyaW5nIGEgYnVzY2FyIChlamVtcGxvOiBcImxpbmtfXCIpXG4gICAgICogQHBhcmFtIGNhc2VzZW5zaXRpdmUgZGV0ZXJtaW5hIHNpIHNlIGV2YWx1YSBjb24gc2Vuc2liaWxpZGFkIGVudHJlIG1heXVzY3VsYSB5IG1pbnVzY3VsYVxuICAgICAqIEByZXR1cm5zIHJldG9ybmEgdHJ1ZSBvIGZhbHNlIHNpIHNlIGVuY29udHJvIG8gbm8gZWwgcGFyYW1ldHJvIGVuIGVsIGFycmF5XG4gICAgICovXG4gICAgcHVibGljIGhhc1BhcmFtcyhcbiAgICAgICAgcGFyYW1zLFxuICAgICAgICBzZWFyY2hlZCxcbiAgICAgICAgcHJlZml4ID0gJycsXG4gICAgICAgIHN1ZmZpeCA9ICcnLFxuICAgICAgICBjYXNlc2Vuc2l0aXZlID0gZmFsc2UpOiBib29sZWFuIHtcblxuXG4gICAgICAgIHJldHVybiBjYXNlc2Vuc2l0aXZlID8gcGFyYW1zLmZpbmQocGFyYW0gPT4gKHBhcmFtLmNvZGUpLnRvTG93ZXJDYXNlKCkgPT0gKHByZWZpeCArIHNlYXJjaGVkICsgc3VmZml4KS50b0xvd2VyQ2FzZSgpIHx8IChwYXJhbS5jb2RlKS50b0xvd2VyQ2FzZSgpID09IChzZWFyY2hlZCkudG9Mb3dlckNhc2UoKSlcbiAgICAgICAgICAgIDogcGFyYW1zLmZpbmQocGFyYW0gPT4gcGFyYW0uY29kZSA9PSAocHJlZml4ICsgc2VhcmNoZWQgKyBzdWZmaXgpIHx8IHBhcmFtLmNvZGUgPT0gc2VhcmNoZWQpXG5cbiAgICB9O1xuXG4gICAgcHVibGljIG1vZGlmeUNoYW5uZWxDb25maWcgPSBjaGFubmVsQ29uZmlnID0+IHtcbiAgICAgICAgaWYgKGNoYW5uZWxDb25maWcuY2hhbm5lbCB8fCBjaGFubmVsQ29uZmlnLmNvZGUpXG4gICAgICAgICAgICB0aGlzLnNldENoYW5uZWwoY2hhbm5lbENvbmZpZy5jaGFubmVsIHx8IGNoYW5uZWxDb25maWcuY29kZSlcblxuICAgICAgICBpZiAoY2hhbm5lbENvbmZpZy5sb2NhbGUgfHwgKGNoYW5uZWxDb25maWcubG9jYWxlcyAmJiBjaGFubmVsQ29uZmlnLmxvY2FsZXMuY29kZSkpXG4gICAgICAgICAgICB0aGlzLnNldExvY2FsZShjaGFubmVsQ29uZmlnLmxvY2FsZSB8fCBjaGFubmVsQ29uZmlnLmxvY2FsZXMuY29kZSlcblxuICAgICAgICBpZiAoY2hhbm5lbENvbmZpZy5jdXJyZW5jeSB8fCBjaGFubmVsQ29uZmlnLmJhc2VDdXJyZW5jeSlcbiAgICAgICAgICAgIHRoaXMuc2V0Q3VycmVuY3koY2hhbm5lbENvbmZpZy5jdXJyZW5jeSB8fCBjaGFubmVsQ29uZmlnLmJhc2VDdXJyZW5jeSlcblxuICAgICAgICBpZiAoY2hhbm5lbENvbmZpZy5jaGVja291dFZpZXcgIT0gbnVsbCkge1xuICAgICAgICAgICAgdGhpcy5zZXRDaGVja291dFZpZXcoY2hhbm5lbENvbmZpZy5jaGVja291dFZpZXcgYXMgQ2hlY2tvdXRWaWV3VHlwZSlcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBjaGFubmVsQ29uZmlnO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gU2UgdXRpbGl6YSBwYXJhIGNvbmZpZ3VyYXIgbG9zIGZpbHRyb3MgcG9yIGRlZmVjdG8gcXVlIHNlIGFwbGljYXJhbiBlbiBsYSBzZWNjaW9uICdDb2xsZWN0aW9uJ1xuICAgICAqIGN1YW5kbyBzZSBpbmdyZXNhIGEgbGEgbWlzbWEuXG4gICAgICovXG4gICAgcHJpdmF0ZSBkZWZhdWx0RmlsdGVyczogRGVmYXVsdEZpbHRlcltdID0gW11cblxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBTZXR0ZWEgZWwgdmFsb3IgZGUgbGEgdmFyaWFibGUgZGVmYXVsRmlsdGVycy5cbiAgICAgKiBAcGFyYW0gZmlsdGVyc1xuICAgICAqL1xuICAgIHB1YmxpYyBzZXREZWZhdWx0RmlsdGVycyA9IChmaWx0ZXJzOiBEZWZhdWx0RmlsdGVyW10pID0+IHtcbiAgICAgICAgdGhpcy5kZWZhdWx0RmlsdGVycyA9IGZpbHRlcnM7XG4gICAgfVxuXG4gICAgcHVibGljIGdldERlZmF1bHRGaWx0ZXJzID0gKCk6IERlZmF1bHRGaWx0ZXJbXSA9PiB0aGlzLmRlZmF1bHRGaWx0ZXJzXG5cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gU2UgdXRpbGl6YSBwYXJhIGNvbmZpZ3VyYXIgdGFudG8gbG9zIGZpbHRyb3MgcG9yIGRlZmVjdG9zIHF1ZSB5YSBzZXJhbiBhcGxpY2Fkb3MsIGNvbW8gdGFtYmllblxuICAgICAqIGxvcyBmaWx0cm9zIHF1ZSBzZSBtb3N0cmFyYW4gZW4gbGEgc2VjY2lvbiBjb2xsZWN0aW9uLCBzdSBvcmRlbiwgZXRjLlxuICAgICAqL1xuICAgIHByaXZhdGUgZmlsdGVyQ29uZmlnOiBGaWx0ZXJDb25maWcgPSB7XG4gICAgICAgIGRlZmF1bHRGaWx0ZXJzOiBbXSxcbiAgICAgICAgZmlsdGVyczogWydjYXRlZ29yeScsICdhdHRyaWJ1dGVzJywgJ2R5bmFtaWNzJywgJ3ByaWNlX3JhbmdlJ11cbiAgICB9XG5cbiAgICBwdWJsaWMgc2V0RmlsdGVyQ29uZmlnID0gKGZpbHRlckNvbmZpZzogRmlsdGVyQ29uZmlnKSA9PiB7XG4gICAgICAgIGZpbHRlckNvbmZpZy5kZWZhdWx0RmlsdGVycyA/IHRoaXMuZmlsdGVyQ29uZmlnLmRlZmF1bHRGaWx0ZXJzID0gZmlsdGVyQ29uZmlnLmRlZmF1bHRGaWx0ZXJzIDogbnVsbFxuICAgICAgICBmaWx0ZXJDb25maWcuZmlsdGVycyA/IHRoaXMuZmlsdGVyQ29uZmlnLmZpbHRlcnMgPSBmaWx0ZXJDb25maWcuZmlsdGVycyA6IG51bGxcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0RmlsdGVyQ29uZmlnID0gKCkgPT4gdGhpcy5maWx0ZXJDb25maWcuZmlsdGVyc1xuXG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIGNvbnRpZW5lIHVuIGFycmVnbG8gZGUgc3RyaW5nIGN1eW8gY29udGVuaWRvIHNvbiBsb3MgY29kaWdvcyBkZSBsb3MgcGFpc2VzLlxuICAgICAqIEBleGFtcGxlIFsnQVInLCdFUycsJ0dCJ11cbiAgICAgKi9cbiAgICBwcml2YXRlIGNvdW50cmllczogc3RyaW5nW10gPSBbXVxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBjb250aWVuZSB1biBhcnJlZ2xvIGRlIHN0cmluZyBjdXlvIGNvbnRlbmlkbyBzb24gbG9zIGNvZGlnb3MgZGUgbG9zIHBhaXNlcyBhIGV4Y2x1aXIuXG4gICAgICogQGV4YW1wbGUgWydHQiddXG4gICAgICovXG4gICAgcHVibGljIGV4Y2x1ZGVkQ291bnRyaWVzOiBzdHJpbmdbXSA9IFtdXG4gICAgLyoqXG4gICAgICpcbiAgICAgKiBAcGFyYW0gY291bnRyaWVzIGRlYmUgY29udGVuZXIgbG9zIGNvZGlnb3MgZGUgbG9zIHBhaXNlcyBxdWUgc2UgcXVpZXJlIG1vc3RyYXJcbiAgICAgKiBAZXhhbXBsZSBbJ0FSJywnRVMnLCdHQiddXG4gICAgICogQHJldHVybnNcbiAgICAgKi9cbiAgICBwdWJsaWMgc2V0Q291bnRyaWVzID0gKGNvdW50cmllczogc3RyaW5nW10pID0+IHRoaXMuY291bnRyaWVzID0gY291bnRyaWVzO1xuXG4gICAgcHVibGljIGdldENvdW50cmllcyA9ICgpID0+IHRoaXMuY291bnRyaWVzO1xuXG5cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gZXN0YSB2YXJpYWJsZSBzZSB1dGlsaXphIHBhcmEgY29uZmlndXJhciBsb3MgcGFyYW1ldHJvcyBjdWFuZG8gc2UgZGVzZWEgbW9zdHJhclxuICAgICAqIHZhcmlhbnRlcyBlbCBsaXN0YWRvIGRlIHByb2R1Y3Rvcy5cbiAgICAgKiBAcGFyYW0ge3N0cmluZ310eXBlIHRpcG8gZGUgb3B0aW9uc1xuICAgICAqIEBwYXJhbSB7c3RyaW5nfWNvZGUgY29kaWdvIGRlIG9wdGlvbnNcbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59ZGVmYXVsdEZpcnN0T3B0aW9uIGB0cnVlYCB0b21hIGVsIHByaW1lciBvcHRpb24gZGVsIHByb2R1Y3RvIGVuIGdlbmVyYWxcbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59Y2hlY2tJZlN0b2NrIGB0cnVlYCBzZSByZWFsaXphIHVuIGNoZXF1ZW8gZGUgc2kgbGEgdmFyaWFudGUgdGllbmUgc3RvY2sgcGFyYSBtb3N0cmFybGFcbiAgICAgKiBAZXhhbXBsZSAgYGBgamF2YXNjcmlwdFxuICAgICAqIHtcbiAgICAgICAgdHlwZTogJ2NvbG9yJyxcbiAgICAgICAgY29kZTogJ2NvbG9yJyxcbiAgICAgICAgZGVmYXVsdEZpcnN0T3B0aW9uOiBmYWxzZSAsXG4gICAgICAgIGNoZWNrSWZTdG9jazp0cnVlXG4gICAgICAgIH0gYGBgXG4gICAgICovXG4gICAgcHJpdmF0ZSBwYXJhbXNQcm9kdWN0c1dpdGhVbmlxdWVWYXJpYW50OiBQYXJhbXNQcm9kdWN0c1dpdGhVbmlxdWVWYXJpYW50ID0ge1xuICAgICAgICB0eXBlOiAnY29sb3InLFxuICAgICAgICBjb2RlOiAnY29sb3InLFxuICAgICAgICBkZWZhdWx0Rmlyc3RPcHRpb246IGZhbHNlLFxuICAgICAgICBjaGVja0lmU3RvY2s6IHRydWVcbiAgICB9XG5cbiAgICBzZXRQYXJhbXNQcm9kdWN0c1dpdGhVbmlxdWVWYXJpYW50ID0gKHZhbHVlOiBQYXJhbXNQcm9kdWN0c1dpdGhVbmlxdWVWYXJpYW50KSA9PiB7XG4gICAgICAgIHRoaXMucGFyYW1zUHJvZHVjdHNXaXRoVW5pcXVlVmFyaWFudCA9IHtcbiAgICAgICAgICAgIC4uLnRoaXMucGFyYW1zUHJvZHVjdHNXaXRoVW5pcXVlVmFyaWFudCxcbiAgICAgICAgICAgIC4uLnZhbHVlXG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBnZXRQYXJhbXNQcm9kdWN0c1dpdGhVbmlxdWVWYXJpYW50ID0gKCkgPT4gdGhpcy5wYXJhbXNQcm9kdWN0c1dpdGhVbmlxdWVWYXJpYW50XG5cblxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBzZSB1dGlsaXphIHBhcmEgY29uZmlndXJhciBxdWUgZmlsdHJvcyBkZWwgdGlwbyBgU29ydEZpbHRlcmAgc2UgcXVpZXJlIG1vc3RyYXIgZW4gbGEgdmlzdGEuXG4gICAgICogU2UgdXNhbiBsb3MgY29kaWdvIGRlIGxvcyBmaWx0cm9zIHBhcmEgaW5kaWNhciBjdWFsZXMgc2UgZGViZW4gbW9zdHJhci5cbiAgICAgKi9cbiAgICBwcml2YXRlIHNvcnRGaWx0ZXJzOiBzdHJpbmdbXSA9IFsncHJpY2UnLCAnb3JkZXItYWxwaCcsICdyZWNlbnQnXVxuXG4gICAgLyoqXG4gICAgICpcbiAgICAgKiBAcGFyYW0gZmlsdGVyc0NvZGUgYXJyZWdsbyBkZSBzdHJpbmdzIGNvbiBsb3MgY29kaWdvcyBkZSBsb3MgZmlsdHJvcy5cbiAgICAgKiBTaSBzZSBsZSBwYXNhIGVsIHBhcmFtZXRybyAqKmFsbCoqIGVzdGUgbW9zdHJhcmEgdG9kb3MuXG4gICAgICogQGV4YW1wbGUgcHJpY2UgfCBvcmRlci1hbHBoIHwgcmVjZW50IHwgdXBkYXRlIHwgYWxsXG4gICAgICogQHJldHVybnNcbiAgICAgKi9cbiAgICBzZXRTb3J0RmlsdGVycyA9IChmaWx0ZXJzQ29kZTogc3RyaW5nW10gPSBbJ2FsbCddKSA9PiB0aGlzLnNvcnRGaWx0ZXJzID0gZmlsdGVyc0NvZGU7XG5cbiAgICBnZXRTb3J0RmlsdGVycyA9ICgpID0+IHRoaXMuc29ydEZpbHRlcnM7XG5cbiAgICBwcml2YXRlIHBvc3RhbENvZGVQYXR0ZXJuczogeyBba2V5OiBzdHJpbmddOiB7IHBhdHRlcm46IFJlZ0V4cCwgZXJyb3JLZXk6IHN0cmluZyB9IH0gPSB7XG4gICAgICAgICdBUic6IHsgcGF0dGVybjogL15bMC05XXs0fSQvLCBlcnJvcktleTogXCJwb3N0YWwtY29kZS1wYXR0ZXJuLWVycm9yLmFyXCIgfSxcbiAgICAgICAgJ1VZJzogeyBwYXR0ZXJuOiAvXlswLTldezV9JC8sIGVycm9yS2V5OiBcInBvc3RhbC1jb2RlLXBhdHRlcm4tZXJyb3IudXlcIiB9LFxuICAgICAgICAnR0InOiB7IHBhdHRlcm46IC9eW0EtWl17MSwyfVswLTldW0EtWjAtOV0/XFxzP1swLTldW0EtWl17Mn0kLywgZXJyb3JLZXk6IFwicG9zdGFsLWNvZGUtcGF0dGVybi1lcnJvci5nYlwiIH0sXG4gICAgICAgICdFUyc6IHsgcGF0dGVybjogL14oPzowWzEtOV18WzEtNF1cXGR8NVswLTJdKVxcZHszfSQvLCBlcnJvcktleTogXCJwb3N0YWwtY29kZS1wYXR0ZXJuLWVycm9yLmVzXCIgfSxcbiAgICAgICAgJ0JSJzogeyBwYXR0ZXJuOiAvXlswLTldezV9LVswLTldezN9JC8sIGVycm9yS2V5OiBcInBvc3RhbC1jb2RlLXBhdHRlcm4tZXJyb3IuYnJcIiB9LFxuICAgICAgICAnRlInOiB7IHBhdHRlcm46IC9eWzAtOV17NX0kLywgZXJyb3JLZXk6IFwicG9zdGFsLWNvZGUtcGF0dGVybi1lcnJvci5mclwiIH0sXG4gICAgICAgICdQVCc6IHsgcGF0dGVybjogL15bMC05XXs0fS1bMC05XXszfSQvLCBlcnJvcktleTogXCJwb3N0YWwtY29kZS1wYXR0ZXJuLWVycm9yLnB0XCIgfSxcbiAgICB9O1xuXG4gICAgZ2V0UG9zdGFsQ29kZVBhdHRlcm4oY291bnRyeUNvZGU6IHN0cmluZyk6IHsgcGF0dGVybjogUmVnRXhwLCBlcnJvcktleTogc3RyaW5nIH0ge1xuICAgICAgICByZXR1cm4gdGhpcy5wb3N0YWxDb2RlUGF0dGVybnNbY291bnRyeUNvZGVdIHx8IHsgcGF0dGVybjogL15bQS1aYS16MC05XFxzXFwtXSskLywgZXJyb3JLZXk6IFwicG9zdGFsLWNvZGUtcGF0dGVybi1lcnJvci5kZWZhdWx0XCIgfTtcbiAgICB9XG59XG4iXX0=
@@ -267,11 +267,11 @@ var OrderEcComponent = /** @class */ (function (_super) {
267
267
  OrderEcComponent = __decorate([
268
268
  Component({
269
269
  selector: 'app-order-ec',
270
- template: "<main class=\"py-5\" id=\"orderEcComponent\">\n <div class=\"container\">\n <div class=\"wrap\" *ngIf=\"!loading; else loadingView\">\n <div *ngIf=\"order; else noOrder\">\n\n <div class=\"row justify-content-between \">\n <div class=\"col-sm-auto col-12 font-brandon\">\n <h4 class=\"tit1 fw-bold\">{{ ('order' | translate) + ': ' + order.number }}</h4>\n </div>\n <ng-container *ngIf=\"order?.invoice\">\n <div class=\"col-sm col-12 font-brandon\" *ngIf=\"(creditAccountShowPrices !== null ? creditAccountShowPrices : true)\">\n <a target=\"_blank\" [href]=\"consts.getUrlBase().slice(0, -1) + order.invoice\"\n class=\"btn btn-link btn-invoice\">\n <i class=\"fas fa-file-download me-1\"></i>\n {{ 'download' | translate }} {{ 'invoices' | translate | titlecase }}\n </a>\n </div>\n </ng-container>\n <a (click)=\"volver()\" class=\"col-auto text-end\">\n <button class=\"btn btvolver bg-gray text-white\">{{ 'back-to-orders' | translate }}</button>\n </a>\n </div>\n\n <section id=\"orders\">\n <div class=\"row pt-2\">\n <div class=\"col-md-2 col-12\">\n <p class=\"st\">{{ 'payment-state' | translate }}:</p>\n <p class=\"\">\n {{ order.payments[0].state | translate }}\n </p>\n </div>\n <div class=\"col-md-2 col-12 font-brandon\">\n <p class=\"st\">{{ 'shipment-state' | translate }}:</p>\n <p class=\"\">\n {{ order.shipments[0].state | translate }}\n </p>\n </div>\n <div class=\"col-md-2 col-12 font-brandon\">\n <p class=\"st\">{{ 'payment-method' | translate }}:</p>\n <p class=\"\">\n {{ order.payments[0]?.method?.name | translate }}\n </p>\n </div>\n <div class=\"col-md-2 col-12 font-brandon\">\n <p class=\"st\">{{ 'shipment-method' | translate }}:</p>\n <p class=\"\">\n {{ order.shipments[0].method.name }}\n </p>\n <!-- ACA DEBERIA IR EL LINK DE SEGUIMIENTO -->\n <a *ngIf=\"order.tracking\" [href]=\"order.tracking\"\n class=\"btn btn-outline-dark btnLogout px-3 py-1 font-size-10 w-auto btn-sm\">Ver\n seguimiento</a>\n </div>\n <div class=\"col-md-2 col-12 font-brandon\">\n <p class=\"st\">{{ 'date' | translate }}:</p>\n <p class=\"\">\n {{ toDate(order.checkoutCompletedAt, 'DD/MM/YYYY') | translate }}<br>\n {{ toDate(order.checkoutCompletedAt, 'h:mm:ss a') | translate }}\n </p>\n </div>\n <div class=\"col-md-2 col-12 font-brandon\"\n *ngIf=\"(creditAccountShowPrices !== null ? creditAccountShowPrices : true)\">\n <p class=\"st\">{{ 'total' | translate }}:</p>\n <h5 class=\"fw-bold\">\n {{ (order.totals.total) | ecCurrencySymbol:'alwaysShowDecimals'}}\n\n </h5>\n </div>\n </div>\n </section>\n\n <div class=\"text-end mt-3\" *ngIf=\"!hidePrices && allowRepeatOrders\">\n <button class=\"btn btn-primary mb-2\" (click)=\"repeatOrder()\">\n {{ 'repeat-order' | translate }}\n </button>\n </div>\n\n <div class=\"container py-3 border-top border-bottom\">\n <div *ngIf=\"order.items.length; else noProducts\" class=\"row\">\n <div class=\"col-2 font-sm font-brandon d-none d-md-block\">\n {{ 'product' | translate | uppercase }}\n </div>\n <div class=\"col-3 font-sm font-brandon d-none d-md-block\">\n {{ 'description' | translate | uppercase }}\n </div>\n <div id=\"colLots\" *ngIf=\"ordersService.channelConfig.applyOrderLot\"\n class=\"col-1 font-sm font-brandon d-none d-md-block\">\n <!-- {{ 'description' | translate | uppercase }} -->\n {{ 'lots' | translate | uppercase }}\n </div>\n <div class=\"col-2 text-end font-sm font-brandon d-none d-md-block\"\n *ngIf=\"(creditAccountShowPrices !== null ? creditAccountShowPrices : true)\">\n {{ 'unit-price' | translate | uppercase }}\n </div>\n <div class=\"col-1 text-center font-sm font-brandon d-none d-md-block\">\n {{ 'quantity' | translate | uppercase }}\n </div>\n <div class=\"col-1 text-end font-sm font-brandon d-none d-md-block\"\n *ngIf=\"(creditAccountShowPrices !== null ? creditAccountShowPrices : true)\">\n {{ 'discount' | translate | uppercase }}\n </div>\n <div class=\"col-2 text-end font-sm font-brandon d-none d-md-block\"\n *ngIf=\"(creditAccountShowPrices !== null ? creditAccountShowPrices : true)\">\n {{ 'subtotal' | translate | uppercase }}\n </div>\n </div>\n <ng-container *ngFor=\"let item of order.items; let i = index\">\n <div class=\"row cart-items\">\n <div class=\"col-5 col-md-2 py-2\">\n <ng-container *ngIf=\"item.product.variants[0]?.images?.length ; else defaultpicture\">\n <img class=\"smc maxwidth img-fluid rounded-custom \"\n [src]=\"consts.mediaUrl() + item.product.variants[0].images[0]\" alt=\"\">\n </ng-container>\n <ng-template #defaultpicture>\n <img *ngIf=\"item.product.picturesdefault\"\n class=\"smc maxwidth img-fluid rounded-custom\"\n [src]=\"consts.mediaUrl() + item.product.picturesdefault[0]\" alt=\"\">\n </ng-template>\n </div> \n <div\n class=\"col-md-3 col-7 d-flex flex-column justify-content-center\">\n <p class=\"font-brandon d-flex w-100 mb-0\">\n {{ item.product.name }} (Cod:{{ item.product.variants[0].code }})\n </p>\n <p *ngIf=\"enableFieldNotesInArticleFile && item.comments\" class=\"comment-truncated fst-italic small text-muted mt-1\">\n \"{{ item.comments }}\"\n </p>\n </div>\n <div class=\"col-md-1 col-1 flex-column flex-md-row justify-content-start d-flex align-items-center\"\n *ngIf=\"ordersService.channelConfig.applyOrderLot\">\n <input type=\"button\" class=\"btn btn-primary btnSeguir m-0 text-center\" type=\"button\"\n [attr.data-bs-toggle]=\"'collapse'\" [attr.data-bs-target]=\"'#collapseExample'+i\"\n aria-expanded=\"false\" [attr.aria-controls]=\"'collapseExample'+i\"\n value=\"{{ 'see' | translate | uppercase }}\">\n </div>\n <div class=\"container d-md-none\">\n <div class=\"row\">\n <div class=\"col-3\">\n <small class=\"order-line-label\">{{ 'unit-price' | translate }}</small>\n <p class=\"text-center w-100 m-0\" *ngIf=\"hasOrderLineValue(item, 'unit'); else noMobileUnit\">\n {{ getOrderLineValue(item, 'unit') | ecCurrencySymbol:'alwaysShowDecimals' }}\n </p>\n <ng-template #noMobileUnit>-</ng-template>\n </div>\n <div class=\"col-3\">\n <small class=\"order-line-label\">{{ 'quantity' | translate }}</small>\n <p class=\"text-center w-100 m-0\">{{ item.quantity }}</p>\n </div>\n <div class=\"col-3\">\n <small class=\"order-line-label\">{{ 'discount' | translate }}</small>\n <p class=\"text-center w-100 m-0\" *ngIf=\"getOrderLineValue(item, 'discount') !== 0; else noMobileDiscount\">\n {{ getOrderLineValue(item, 'discount') | ecCurrencySymbol:'alwaysShowDecimals' }}\n </p>\n <ng-template #noMobileDiscount>-</ng-template>\n </div>\n <div class=\"col-3\">\n <small class=\"order-line-label\">{{ 'subtotal' | translate }}</small>\n <p class=\"text-center w-100 m-0\" *ngIf=\"hasOrderLineValue(item, 'subtotal'); else noMobileSubtotal\">\n {{ getOrderLineValue(item, 'subtotal') | ecCurrencySymbol:'alwaysShowDecimals' }}\n </p>\n <ng-template #noMobileSubtotal>-</ng-template>\n </div>\n </div>\n </div>\n\n <div class=\"col-2 d-none d-md-flex align-items-center\"\n *ngIf=\"(creditAccountShowPrices !== null ? creditAccountShowPrices : true)\">\n <p class=\"text-end w-100 m-0\">\n {{ hasOrderLineValue(item, 'unit') ? (getOrderLineValue(item, 'unit') | ecCurrencySymbol:'alwaysShowDecimals') : '-' }}\n </p>\n </div>\n <div class=\"col-1 d-none d-md-flex align-items-center\">\n <p class=\"text-center w-100 m-0\"> {{ item.quantity }}</p>\n </div>\n <div class=\"col-1 d-none d-md-flex align-items-center\"\n *ngIf=\"(creditAccountShowPrices !== null ? creditAccountShowPrices : true)\">\n <p class=\"text-end w-100 m-0\" [class.text-muted]=\"getOrderLineValue(item, 'discount') === 0\">\n {{ getOrderLineValue(item, 'discount') !== 0 ? (getOrderLineValue(item, 'discount') | ecCurrencySymbol:'alwaysShowDecimals') : '-' }}\n </p>\n </div>\n <div class=\"col-2 d-none d-md-flex align-items-center\"\n *ngIf=\"(creditAccountShowPrices !== null ? creditAccountShowPrices : true)\">\n <p class=\"text-end w-100 m-0\">\n {{ hasOrderLineValue(item, 'subtotal') ? (getOrderLineValue(item, 'subtotal') | ecCurrencySymbol:'alwaysShowDecimals') : '-' }}\n </p>\n </div>\n <div class=\"collapse\" [attr.id]=\"'collapseExample'+i\">\n <div class=\"card card-body\">\n <table class=\"table table-striped\">\n <thead>\n <tr>\n <th scope=\"col\">#</th>\n <th scope=\"col\">Estado</th>\n <th scope=\"col\">Cantidad</th>\n <th scope=\"col\">Fecha Solicitada</th>\n <th scope=\"col\">Fecha Estimada</th>\n <th scope=\"col\">Sede</th>\n <th scope=\"col\">Nota</th>\n <th scope=\"col\">Total Lote</th>\n </tr>\n </thead>\n <tbody>\n <ng-container *ngFor=\"let lot of item.orderItemLot\">\n <tr>\n <th scope=\"row\">{{lot.id}}</th>\n <td>{{lot.lot_status}}</td>\n <td>{{lot.quantity}}</td>\n <td>{{ toDate(lot.date_request, 'DD/MM/YYYY') | translate }}</td>\n <td *ngIf=\"lot.date_deliver; else sinFechaEstimada\">{{\n toDate(lot.date_deliver, 'DD/MM/YYYY') | translate }}</td>\n <ng-template #sinFechaEstimada>\n <td>Pendiente</td>\n </ng-template>\n <td>{{lot.shipping_address_name}}</td>\n <td>{{lot.notes}}</td>\n <td>{{lot.total_lot | ecCurrencySymbol:'alwaysShowDecimals'}}</td>\n </tr>\n </ng-container>\n </tbody>\n </table>\n </div>\n </div>\n </div>\n\n </ng-container>\n </div>\n\n <div class=\"container\">\n <div class=\"row\">\n <div class=\"col-12 col-md-6\"></div>\n <div class=\"col-12 col-md-6\"\n *ngIf=\"(creditAccountShowPrices !== null ? creditAccountShowPrices : true)\">\n <div class=\"order-summary py-4\">\n <div class=\"order-summary-row\">\n <span>{{ 'subtotal' | translate }}</span>\n <strong>\n {{ getHistoricalProductsSubtotal() !== null\n ? (getHistoricalProductsSubtotal() | ecCurrencySymbol:'alwaysShowDecimals')\n : '-' }}\n </strong>\n </div>\n\n <div class=\"order-summary-row order-summary-row--discount\"\n *ngIf=\"!hideDiscounts && getHistoricalOrderDiscount() !== null && getHistoricalOrderDiscount() !== 0\">\n <span>{{ 'discount' | translate }}</span>\n <strong>{{ getHistoricalOrderDiscount() | ecCurrencySymbol:'alwaysShowDecimals' }}</strong>\n </div>\n\n <div class=\"order-summary-row order-summary-row--discount\"\n *ngIf=\"!hideDiscounts && getHistoricalCouponDiscount() !== null && getHistoricalCouponDiscount() !== 0\">\n <span>{{ 'coupon' | translate }}</span>\n <strong>{{ getHistoricalCouponDiscount() | ecCurrencySymbol:'alwaysShowDecimals' }}</strong>\n </div>\n\n <div class=\"order-summary-row order-summary-row--tax\"\n *ngIf=\"!showPriceWithTaxesWhileBrowsing && !hideTaxes && hasHistoricalTaxes()\">\n <span>{{ 'taxes' | translate }}</span>\n <strong>{{ getHistoricalTaxes() | ecCurrencySymbol:'alwaysShowDecimals' }}</strong>\n </div>\n\n <div class=\"order-summary-row\"\n *ngIf=\"getHistoricalShipping() !== null\">\n <span>{{ 'shipment' | translate }}</span>\n <strong>{{ getHistoricalShipping() | ecCurrencySymbol:'alwaysShowDecimals' }}</strong>\n </div>\n\n <div class=\"order-summary-row order-summary-row--total\">\n <span>{{ 'total' | translate | uppercase }}</span>\n <strong>\n {{ getHistoricalTotal() !== null\n ? (getHistoricalTotal() | ecCurrencySymbol:'alwaysShowDecimals')\n : '-' }}\n </strong>\n </div>\n\n <div class=\"order-summary-tax-info\"\n *ngIf=\"showPriceWithTaxesWhileBrowsing && !hideTaxes && hasHistoricalTaxes()\">\n <span>{{ 'taxes-included-in-total' | translate }}</span>\n <strong>{{ getHistoricalTaxes() | ecCurrencySymbol:'alwaysShowDecimals' }}</strong>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n\n</main>\n\n<ng-template #noOrder>\n <div class=\"w-100 h-50\">\n <div class=\"d-flex flex-row justify-content-center align-items-center text-center\">\n <h5>{{ 'no-orders' | translate }}</h5>\n </div>\n </div>\n</ng-template>\n\n<ng-template #loadingView>\n <div class=\"w-100 h-50 py-5\">\n <div class=\"d-flex flex-row justify-content-center align-items-center text-center\">\n <app-loading-full-ec></app-loading-full-ec>\n </div>\n </div>\n</ng-template>\n",
270
+ template: "<main class=\"py-5\" id=\"orderEcComponent\">\n <div class=\"container\">\n <div class=\"wrap\" *ngIf=\"!loading; else loadingView\">\n <div *ngIf=\"order; else noOrder\">\n\n <div class=\"row justify-content-between \">\n <div class=\"col-sm-auto col-12 font-brandon\">\n <h4 class=\"tit1 fw-bold\">{{ ('order' | translate) + ': ' + order.number }}</h4>\n </div>\n <ng-container *ngIf=\"order?.invoice\">\n <div class=\"col-sm col-12 font-brandon\" *ngIf=\"(creditAccountShowPrices !== null ? creditAccountShowPrices : true)\">\n <a target=\"_blank\" [href]=\"consts.getUrlBase().slice(0, -1) + order.invoice\"\n class=\"btn btn-link btn-invoice\">\n <i class=\"fas fa-file-download me-1\"></i>\n {{ 'download' | translate }} {{ 'invoices' | translate | titlecase }}\n </a>\n </div>\n </ng-container>\n <a (click)=\"volver()\" class=\"col-auto text-end\">\n <button class=\"btn btvolver bg-gray text-white\">{{ 'back-to-orders' | translate }}</button>\n </a>\n </div>\n\n <section id=\"orders\">\n <div class=\"row pt-2\">\n <div class=\"col-md-2 col-12\">\n <p class=\"st\">{{ 'payment-state' | translate }}:</p>\n <p class=\"\">\n {{ order.payments[0].state | translate }}\n </p>\n </div>\n <div class=\"col-md-2 col-12 font-brandon\">\n <p class=\"st\">{{ 'shipment-state' | translate }}:</p>\n <p class=\"\">\n {{ order.shipments[0].state | translate }}\n </p>\n </div>\n <div class=\"col-md-2 col-12 font-brandon\">\n <p class=\"st\">{{ 'payment-method' | translate }}:</p>\n <p class=\"\">\n {{ order.payments[0]?.method?.name | translate }}\n </p>\n </div>\n <div class=\"col-md-2 col-12 font-brandon\">\n <p class=\"st\">{{ 'shipment-method' | translate }}:</p>\n <p class=\"\">\n {{ order.shipments[0].method.name }}\n </p>\n <!-- ACA DEBERIA IR EL LINK DE SEGUIMIENTO -->\n <a *ngIf=\"order.tracking\" [href]=\"order.tracking\"\n class=\"btn btn-outline-dark btnLogout px-3 py-1 font-size-10 w-auto btn-sm\">Ver\n seguimiento</a>\n </div>\n <div class=\"col-md-2 col-12 font-brandon\">\n <p class=\"st\">{{ 'date' | translate }}:</p>\n <p class=\"\">\n {{ toDate(order.checkoutCompletedAt, 'DD/MM/YYYY') | translate }}<br>\n {{ toDate(order.checkoutCompletedAt, 'h:mm:ss a') | translate }}\n </p>\n </div>\n <div class=\"col-md-2 col-12 font-brandon\"\n *ngIf=\"(creditAccountShowPrices !== null ? creditAccountShowPrices : true)\">\n <p class=\"st\">{{ 'total' | translate }}:</p>\n <h5 class=\"fw-bold\">\n {{ (order.totals.total) | ecCurrencySymbol:'alwaysShowDecimals'}}\n\n </h5>\n </div>\n </div>\n </section>\n\n <div class=\"text-end mt-3\" *ngIf=\"!hidePrices && allowRepeatOrders\">\n <button class=\"btn btn-primary mb-2\" (click)=\"repeatOrder()\">\n {{ 'repeat-order' | translate }}\n </button>\n </div>\n\n <div class=\"container py-3 border-top border-bottom\">\n <div *ngIf=\"order.items.length; else noProducts\" class=\"row\">\n <div class=\"col-2 font-sm font-brandon d-none d-md-block\">\n {{ 'product' | translate | uppercase }}\n </div>\n <div class=\"col-3 font-sm font-brandon d-none d-md-block\">\n {{ 'description' | translate | uppercase }}\n </div>\n <div id=\"colLots\" *ngIf=\"ordersService.channelConfig.applyOrderLot\"\n class=\"col-1 font-sm font-brandon d-none d-md-block\">\n <!-- {{ 'description' | translate | uppercase }} -->\n {{ 'lots' | translate | uppercase }}\n </div>\n <div class=\"col-2 text-end font-sm font-brandon d-none d-md-block\"\n *ngIf=\"(creditAccountShowPrices !== null ? creditAccountShowPrices : true)\">\n {{ 'unit-price' | translate | uppercase }}\n </div>\n <div class=\"col-1 text-center font-sm font-brandon d-none d-md-block\">\n {{ 'quantity' | translate | uppercase }}\n </div>\n <div class=\"col-1 text-end font-sm font-brandon d-none d-md-block\"\n *ngIf=\"(creditAccountShowPrices !== null ? creditAccountShowPrices : true)\">\n {{ 'discount' | translate | uppercase }}\n </div>\n <div class=\"col-2 text-end font-sm font-brandon d-none d-md-block\"\n *ngIf=\"(creditAccountShowPrices !== null ? creditAccountShowPrices : true)\">\n {{ 'subtotal' | translate | uppercase }}\n </div>\n </div>\n <ng-container *ngFor=\"let item of order.items; let i = index\">\n <div class=\"row cart-items\">\n <div class=\"col-5 col-md-2 py-2\">\n <ng-container *ngIf=\"item.product.variants[0]?.images?.length ; else defaultpicture\">\n <img class=\"smc maxwidth img-fluid rounded-custom \"\n [src]=\"consts.mediaUrl() + item.product.variants[0].images[0]\" alt=\"\">\n </ng-container>\n <ng-template #defaultpicture>\n <img *ngIf=\"item.product.picturesdefault\"\n class=\"smc maxwidth img-fluid rounded-custom\"\n [src]=\"consts.mediaUrl() + item.product.picturesdefault[0]\" alt=\"\">\n </ng-template>\n </div> \n <div\n class=\"col-md-3 col-7 d-flex flex-column justify-content-center\">\n <p class=\"font-brandon d-flex w-100 mb-0\">\n {{ item.product.name }} (Cod:{{ item.product.variants[0].code }})\n </p>\n <p *ngIf=\"enableFieldNotesInArticleFile && item.comments\" class=\"comment-truncated fst-italic small text-muted mt-1\">\n \"{{ item.comments }}\"\n </p>\n </div>\n <div class=\"col-md-1 col-1 flex-column flex-md-row justify-content-start d-flex align-items-center\"\n *ngIf=\"ordersService.channelConfig.applyOrderLot\">\n <input type=\"button\" class=\"btn btn-primary btnSeguir m-0 text-center\" type=\"button\"\n [attr.data-bs-toggle]=\"'collapse'\" [attr.data-bs-target]=\"'#collapseExample'+i\"\n aria-expanded=\"false\" [attr.aria-controls]=\"'collapseExample'+i\"\n value=\"{{ 'see' | translate | uppercase }}\">\n </div>\n <div class=\"container d-md-none\">\n <div class=\"row\">\n <div class=\"col-3\">\n <small class=\"order-line-label\">{{ 'unit-price' | translate }}</small>\n <p class=\"text-center w-100 m-0\" *ngIf=\"hasOrderLineValue(item, 'unit'); else noMobileUnit\">\n {{ getOrderLineValue(item, 'unit') | ecCurrencySymbol:'alwaysShowDecimals' }}\n </p>\n <ng-template #noMobileUnit>-</ng-template>\n </div>\n <div class=\"col-3\">\n <small class=\"order-line-label\">{{ 'quantity' | translate }}</small>\n <p class=\"text-center w-100 m-0\">{{ item.quantity }}</p>\n </div>\n <div class=\"col-3\">\n <small class=\"order-line-label\">{{ 'discount' | translate }}</small>\n <p class=\"text-center w-100 m-0\" *ngIf=\"getOrderLineValue(item, 'discount') !== 0; else noMobileDiscount\">\n {{ getOrderLineValue(item, 'discount') | ecCurrencySymbol:'alwaysShowDecimals' }}\n </p>\n <ng-template #noMobileDiscount>-</ng-template>\n </div>\n <div class=\"col-3\">\n <small class=\"order-line-label\">{{ 'subtotal' | translate }}</small>\n <p class=\"text-center w-100 m-0\" *ngIf=\"hasOrderLineValue(item, 'subtotal'); else noMobileSubtotal\">\n {{ getOrderLineValue(item, 'subtotal') | ecCurrencySymbol:'alwaysShowDecimals' }}\n </p>\n <ng-template #noMobileSubtotal>-</ng-template>\n </div>\n </div>\n </div>\n\n <div class=\"col-2 d-none d-md-flex align-items-center\"\n *ngIf=\"(creditAccountShowPrices !== null ? creditAccountShowPrices : true)\">\n <p class=\"text-end w-100 m-0\">\n {{ hasOrderLineValue(item, 'unit') ? (getOrderLineValue(item, 'unit') | ecCurrencySymbol:'alwaysShowDecimals') : '-' }}\n </p>\n </div>\n <div class=\"col-1 d-none d-md-flex align-items-center\">\n <p class=\"text-center w-100 m-0\"> {{ item.quantity }}</p>\n </div>\n <div class=\"col-1 d-none d-md-flex align-items-center\"\n *ngIf=\"(creditAccountShowPrices !== null ? creditAccountShowPrices : true)\">\n <p class=\"text-end w-100 m-0\" [class.text-muted]=\"getOrderLineValue(item, 'discount') === 0\">\n {{ getOrderLineValue(item, 'discount') !== 0 ? (getOrderLineValue(item, 'discount') | ecCurrencySymbol:'alwaysShowDecimals') : '-' }}\n </p>\n </div>\n <div class=\"col-2 d-none d-md-flex align-items-center\"\n *ngIf=\"(creditAccountShowPrices !== null ? creditAccountShowPrices : true)\">\n <p class=\"text-end w-100 m-0\">\n {{ hasOrderLineValue(item, 'subtotal') ? (getOrderLineValue(item, 'subtotal') | ecCurrencySymbol:'alwaysShowDecimals') : '-' }}\n </p>\n </div>\n <div class=\"collapse\" [attr.id]=\"'collapseExample'+i\">\n <div class=\"card card-body\">\n <table class=\"table table-striped\">\n <thead>\n <tr>\n <th scope=\"col\">#</th>\n <th scope=\"col\">Estado</th>\n <th scope=\"col\">Cantidad</th>\n <th scope=\"col\">Fecha Solicitada</th>\n <th scope=\"col\">Fecha Estimada</th>\n <th scope=\"col\">Sede</th>\n <th scope=\"col\">Nota</th>\n <th scope=\"col\">Total Lote</th>\n </tr>\n </thead>\n <tbody>\n <ng-container *ngFor=\"let lot of item.orderItemLot\">\n <tr>\n <th scope=\"row\">{{lot.id}}</th>\n <td>{{lot.lot_status}}</td>\n <td>{{lot.quantity}}</td>\n <td>{{ toDate(lot.date_request, 'DD/MM/YYYY') | translate }}</td>\n <td *ngIf=\"lot.date_deliver; else sinFechaEstimada\">{{\n toDate(lot.date_deliver, 'DD/MM/YYYY') | translate }}</td>\n <ng-template #sinFechaEstimada>\n <td>Pendiente</td>\n </ng-template>\n <td>{{lot.shipping_address_name}}</td>\n <td>{{lot.notes}}</td>\n <td>{{lot.total_lot | ecCurrencySymbol:'alwaysShowDecimals'}}</td>\n </tr>\n </ng-container>\n </tbody>\n </table>\n </div>\n </div>\n </div>\n\n </ng-container>\n </div>\n\n <div class=\"container\">\n <div class=\"row\">\n <div class=\"col-12 col-md-6\"></div>\n <div class=\"col-12 col-md-6\"\n *ngIf=\"(creditAccountShowPrices !== null ? creditAccountShowPrices : true)\">\n <div class=\"order-summary py-4\">\n <div class=\"order-summary-row\">\n <span>{{ 'subtotal' | translate }}</span>\n <strong>\n {{ getHistoricalProductsSubtotal() !== null\n ? (getHistoricalProductsSubtotal() | ecCurrencySymbol:'alwaysShowDecimals')\n : '-' }}\n </strong>\n </div>\n\n <div class=\"order-summary-row order-summary-row--discount\"\n *ngIf=\"!hideDiscounts && getHistoricalOrderDiscount() !== null && getHistoricalOrderDiscount() !== 0\">\n <span>{{ 'discount' | translate }}</span>\n <strong>{{ getHistoricalOrderDiscount() | ecCurrencySymbol:'alwaysShowDecimals' }}</strong>\n </div>\n\n <div class=\"order-summary-row order-summary-row--discount\"\n *ngIf=\"!hideDiscounts && getHistoricalCouponDiscount() !== null && getHistoricalCouponDiscount() !== 0\">\n <span>{{ 'coupon' | translate }}</span>\n <strong>{{ getHistoricalCouponDiscount() | ecCurrencySymbol:'alwaysShowDecimals' }}</strong>\n </div>\n\n <div class=\"order-summary-row order-summary-row--discount\"\n *ngIf=\"order?.totals?.paymentMethodAdjustment !== null && order?.totals?.paymentMethodAdjustment !== undefined && order?.totals?.paymentMethodAdjustment !== 0\">\n <span>\n {{ (order.totals.paymentMethodAdjustment < 0 ? 'payment-method-discount' : 'payment-method-surcharge') | translate }}\n <ng-container *ngIf=\"order.totals.paymentMethodAdjustmentLabel\">\n \u00B7 {{ order.totals.paymentMethodAdjustmentLabel }}\n </ng-container>\n </span>\n <strong>{{ order.totals.paymentMethodAdjustment | ecCurrencySymbol:'alwaysShowDecimals' }}</strong>\n </div>\n\n <div class=\"order-summary-row order-summary-row--tax\"\n *ngIf=\"!showPriceWithTaxesWhileBrowsing && !hideTaxes && hasHistoricalTaxes()\">\n <span>{{ 'taxes' | translate }}</span>\n <strong>{{ getHistoricalTaxes() | ecCurrencySymbol:'alwaysShowDecimals' }}</strong>\n </div>\n\n <div class=\"order-summary-row\"\n *ngIf=\"getHistoricalShipping() !== null\">\n <span>{{ 'shipment' | translate }}</span>\n <strong>{{ getHistoricalShipping() | ecCurrencySymbol:'alwaysShowDecimals' }}</strong>\n </div>\n\n <div class=\"order-summary-row order-summary-row--total\">\n <span>{{ 'total' | translate | uppercase }}</span>\n <strong>\n {{ getHistoricalTotal() !== null\n ? (getHistoricalTotal() | ecCurrencySymbol:'alwaysShowDecimals')\n : '-' }}\n </strong>\n </div>\n\n <div class=\"order-summary-tax-info\"\n *ngIf=\"showPriceWithTaxesWhileBrowsing && !hideTaxes && hasHistoricalTaxes()\">\n <span>{{ 'taxes-included-in-total' | translate }}</span>\n <strong>{{ getHistoricalTaxes() | ecCurrencySymbol:'alwaysShowDecimals' }}</strong>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n\n</main>\n\n<ng-template #noOrder>\n <div class=\"w-100 h-50\">\n <div class=\"d-flex flex-row justify-content-center align-items-center text-center\">\n <h5>{{ 'no-orders' | translate }}</h5>\n </div>\n </div>\n</ng-template>\n\n<ng-template #loadingView>\n <div class=\"w-100 h-50 py-5\">\n <div class=\"d-flex flex-row justify-content-center align-items-center text-center\">\n <app-loading-full-ec></app-loading-full-ec>\n </div>\n </div>\n</ng-template>\n",
271
271
  styles: [".maxwidth{max-width:100px}.comment-truncated{display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:2;overflow:hidden;text-overflow:ellipsis;white-space:normal;max-height:3em}.order-line-label{display:block;color:#6b7280;font-size:.72rem;line-height:1.2;text-transform:uppercase}.order-summary{display:flex;flex-direction:column;gap:.65rem;color:#4b5563}.order-summary-row{display:flex;align-items:baseline;justify-content:space-between;gap:1rem;min-width:0;font-size:.95rem}.order-summary-row span{min-width:0}.order-summary-row strong{flex:0 0 auto;white-space:nowrap;color:#111827;font-weight:600;text-align:right}.order-summary-row--discount strong{color:#15803d}.order-summary-row--tax{color:#4b5563}.order-summary-row--total{margin-top:.35rem;padding-top:.8rem;border-top:1px solid #d1d5db;color:#111827;font-size:1.15rem;font-weight:700}.order-summary-row--total strong{font-size:1.2rem;font-weight:700}.order-summary-tax-info{display:flex;align-items:baseline;justify-content:space-between;gap:1rem;margin-top:-.15rem;color:#6b7280;font-size:.82rem;font-weight:400}.order-summary-tax-info strong{flex:0 0 auto;white-space:nowrap;font-weight:400}@media (max-width:767.98px){.order-summary{padding-top:1rem;padding-bottom:1rem}.order-summary-row,.order-summary-tax-info{gap:.75rem}.order-summary-row--total{font-size:1.05rem}.order-summary-row--total strong{font-size:1.1rem}}"]
272
272
  })
273
273
  ], OrderEcComponent);
274
274
  return OrderEcComponent;
275
275
  }(ComponentHelper));
276
276
  export { OrderEcComponent };
277
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3JkZXItZWMuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6Im5nOi8vbmctZWFzeWNvbW1lcmNlLyIsInNvdXJjZXMiOlsibGliL2VjLWNvbXBvbmVudC9hY2NvdW50LWVjL29yZGVyLWVjL29yZGVyLWVjLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQVUsTUFBTSxlQUFlLENBQUM7QUFDekQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUN2QyxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3pELE9BQU8sS0FBSyxNQUFNLE1BQU0sUUFBUSxDQUFDO0FBQ2pDLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSwwQ0FBMEMsQ0FBQztBQUN6RSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDakQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBQ3BFLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUM3RCxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSwwQ0FBMEMsQ0FBQztBQU9oRjtJQUFzQyxvQ0FBZTtJQWlCakQsMEJBQ1csYUFBNEIsRUFDekIsWUFBNEIsRUFDL0IsTUFBYyxFQUNkLE1BQWlCLEVBQ2hCLFdBQXdCLEVBQ3hCLG9CQUEwQztRQU50RCxZQVFJLGlCQUFPLFNBRVY7UUFUVSxtQkFBYSxHQUFiLGFBQWEsQ0FBZTtRQUN6QixrQkFBWSxHQUFaLFlBQVksQ0FBZ0I7UUFDL0IsWUFBTSxHQUFOLE1BQU0sQ0FBUTtRQUNkLFlBQU0sR0FBTixNQUFNLENBQVc7UUFDaEIsaUJBQVcsR0FBWCxXQUFXLENBQWE7UUFDeEIsMEJBQW9CLEdBQXBCLG9C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U0FBUztZQUM1QyxLQUFJLENBQUMsdUJBQXVCLEdBQUcsU0FBUyxDQUFDO1FBQzdDLENBQUMsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFBO0lBQ25CLENBQUM7SUE2SEQsc0NBQVcsR0FBWDtRQUNJLElBQUksSUFBSSxDQUFDLGlCQUFpQixJQUFJLElBQUksQ0FBQyxLQUFLLEVBQUU7WUFDdEMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxvQkFBb0IsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO1NBQzNEO0lBQ0wsQ0FBQzs7Z0JBbkx5QixhQUFhO2dCQUNYLGNBQWM7Z0JBQ3ZCLE1BQU07Z0JBQ04sU0FBUztnQkFDSCxXQUFXO2dCQUNGLG9CQUFvQjs7SUFmN0M7UUFBUixLQUFLLEVBQUU7eURBQW1CO0lBUmxCLGdCQUFnQjtRQUw1QixTQUFTLENBQUM7WUFDUCxRQUFRLEVBQUUsY0FBYztZQUN4Qiw2dG5CQUFzQzs7U0FFekMsQ0FBQztPQUNXLGdCQUFnQixDQXVNNUI7SUFBRCx1QkFBQztDQUFBLEFBdk1ELENBQXNDLGVBQWUsR0F1TXBEO1NBdk1ZLGdCQUFnQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgSW5wdXQsIE9uSW5pdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBBY3RpdmF0ZWRSb3V0ZSwgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCAqIGFzIG1vbWVudCBmcm9tICdtb21lbnQnO1xuaW1wb3J0IHsgT3JkZXJzU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL2FjY291bnQvb3JkZXJzLnNlcnZpY2UnO1xuaW1wb3J0IHsgQ29uc3RhbnRzIH0gZnJvbSAnLi4vLi4vLi4vY29yZS5jb25zdHMnO1xuaW1wb3J0IHsgQ29tcG9uZW50SGVscGVyIH0gZnJvbSAnLi4vLi4vLi4vY2xhc3Nlcy9jb21wb25lbnQtaGVscGVyJztcbmltcG9ydCB7IENhcnRTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvY2FydC5zZXJ2aWNlJztcbmltcG9ydCB7IENoYW5uZWxDb25maWdTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvY2hhbm5lbC1jb25maWcuc2VydmljZSc7XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnYXBwLW9yZGVyLWVjJyxcbiAgICB0ZW1wbGF0ZVVybDogJ29yZGVyLWVjLmNvbXBvbmVudC5odG1sJyxcbiAgICBzdHlsZVVybHM6IFsnb3JkZXItZWMuY29tcG9uZW50LnNjc3MnXVxufSlcbmV4cG9ydCBjbGFzcyBPcmRlckVjQ29tcG9uZW50IGV4dGVuZHMgQ29tcG9uZW50SGVscGVyIGltcGxlbWVudHMgT25Jbml0IHtcblxuICAgIHByb3RlY3RlZCBvcmRlclN1YmplY3QgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGFueT4oe30pO1xuXG4gICAgcHVibGljIG9yZGVyJCA9IHRoaXMub3JkZXJTdWJqZWN0LmFzT2JzZXJ2YWJsZSgpO1xuICAgIHB1YmxpYyBvcmRlciA9IG51bGxcbiAgICBwdWJsaWMgbG9hZGluZyA9IHRydWU7XG4gICAgcHVibGljIGVycm9yO1xuICAgIEBJbnB1dCgpIG51bWJlck9yZGVyID0gbnVsbFxuICAgIHB1YmxpYyBhbGxvd1JlcGVhdE9yZGVycyA9IGZhbHNlO1xuICAgIHB1YmxpYyBjcmVkaXRBY2NvdW50U2hvd1ByaWNlczogYm9vbGVhbiB8IG51bGwgPSBudWxsO1xuICAgIHB1YmxpYyBoaWRlUHJpY2VzOiBib29sZWFuID0gZmFsc2U7XG4gICAgcHVibGljIGhpZGVEaXNjb3VudHM6IGJvb2xlYW4gPSBmYWxzZTtcbiAgICBwdWJsaWMgaGlkZVRheGVzOiBib29sZWFuID0gZmFsc2U7XG4gICAgcHVibGljIGVuYWJsZUZpZWxkTm90ZXNJbkFydGljbGVGaWxlOiBib29sZWFuID0gZmFsc2U7XG4gICAgcHVibGljIHNob3dQcmljZVdpdGhUYXhlc1doaWxlQnJvd3Npbmc6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBwdWJsaWMgb3JkZXJzU2VydmljZTogT3JkZXJzU2VydmljZSxcbiAgICAgICAgcHJvdGVjdGVkIGFjdGl2ZWRSb3V0ZTogQWN0aXZhdGVkUm91dGUsXG4gICAgICAgIHB1YmxpYyByb3V0ZXI6IFJvdXRlcixcbiAgICAgICAgcHVibGljIGNvbnN0czogQ29uc3RhbnRzLFxuICAgICAgICBwcml2YXRlIGNhcnRTZXJ2aWNlOiBDYXJ0U2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSBjaGFubmVsQ29uZmlnU2VydmljZTogQ2hhbm5lbENvbmZpZ1NlcnZpY2VcbiAgICApIHtcbiAgICAgICAgc3VwZXIoKTtcbiAgICAgICAgdGhpcy5lY09uQ29uc3RydWN0KClcbiAgICB9XG5cbiAgICBuZ09uSW5pdCgpIHtcbiAgICAgICAgdGhpcy5sb2FkaW5nID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5vcmRlcnNTZXJ2aWNlLnNlbGVjdGVkT3JkZXIkLnN1YnNjcmliZShcbiAgICAgICAgICAgIGFzeW5jIHJlcyA9PiB7XG4gICAgICAgICAgICAgICAgbGV0IG9yZGVyO1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLm51bWJlck9yZGVyID09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5udW1iZXJPcmRlciA9IHRoaXMuYWN0aXZlZFJvdXRlLnNuYXBzaG90LnBhcmFtcy5udW1iZXJcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHJlcykgb3JkZXIgPSByZXM7XG4gICAgICAgICAgICAgICAgZWxzZSBvcmRlciA9IGF3YWl0IHRoaXMub3JkZXJzU2VydmljZS5maW5kT3JkZXIodGhpcy5udW1iZXJPcmRlcik7XG4gICAgICAgICAgICAgICAgb3JkZXIgJiYgdGhpcy5vcmRlclN1YmplY3QubmV4dChvcmRlcik7XG4gICAgICAgICAgICAgICAgIW9yZGVyICYmIHRoaXMuY2FsbEVycm9yKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5vcmRlciA9IG9yZGVyXG4gICAgICAgICAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIGVyciA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5vcmRlcnNTZXJ2aWNlLmVycm9yJC50b1Byb21pc2UoKS50aGVuKHJlcyA9PiB0aGlzLmVycm9yID0gcmVzKTtcbiAgICAgICAgICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB0aGlzLmNhbGxFcnJvcigpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuY2hhbm5lbENvbmZpZ1NlcnZpY2UuY2hhbm5lbENvbmZpZyQuc3Vic2NyaWJlKFxuICAgICAgICAgICAgKGNvbmZpZykgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChjb25maWcgJiYgY29uZmlnLmFsbG93UmVwZWF0T3JkZXJzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5hbGxvd1JlcGVhdE9yZGVycyA9IGNvbmZpZy5hbGxvd1JlcGVhdE9yZGVycztcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmFsbG93UmVwZWF0T3JkZXJzID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRoaXMuaGlkZVByaWNlcyA9IGNvbmZpZz8uaGlkZVByaWNlcyA/PyBmYWxzZTtcbiAgICAgICAgICAgICAgICB0aGlzLmhpZGVEaXNjb3VudHMgPSBjb25maWc/LmhpZGVEaXNjb3VudHMgPz8gZmFsc2U7XG4gICAgICAgICAgICAgICAgdGhpcy5oaWRlVGF4ZXMgPSBjb25maWc/LmhpZGVUYXhlcyA/PyBmYWxzZTtcbiAgICAgICAgICAgICAgICB0aGlzLnNob3dQcmljZVdpdGhUYXhlc1doaWxlQnJvd3NpbmcgPSBjb25maWc/LnNob3dQcmljZVdpdGhUYXhlc1doaWxlQnJvd3NpbmcgPT09IHRydWU7XG4gICAgICAgICAgICAgICAgdGhpcy5lbmFibGVGaWVsZE5vdGVzSW5BcnRpY2xlRmlsZSA9IGNvbmZpZz8uZW5hYmxlRmllbGROb3Rlc0luQXJ0aWNsZUZpbGUgPz8gZmFsc2U7XG4gICAgICAgICAgICB9LFxuICAgICAgICApO1xuICAgICAgICB0aGlzLmNhcnRTZXJ2aWNlLnNob3dQcmljZSQuc3Vic2NyaWJlKChzaG93UHJpY2UpID0+IHtcbiAgICAgICAgICAgIHRoaXMuY3JlZGl0QWNjb3VudFNob3dQcmljZXMgPSBzaG93UHJpY2U7XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLmVjT25Jbml0KClcbiAgICB9XG5cbiAgICB0b0RhdGUgPSAoZGF0ZSwgZm9ybWF0KSA9PiBtb21lbnQoZGF0ZSkuZm9ybWF0KCFmb3JtYXQgJiYgJ0REL01NL1lZWVksIGg6bW06c3MgYScgfHwgZm9ybWF0KVxuXG4gICAgcHJpdmF0ZSBnZXRMaW5lUHJpY2luZyA9IChpdGVtOiBhbnkpOiBhbnkgfCBudWxsID0+IHtcbiAgICAgICAgY29uc3QgcHJpY2luZyA9IGl0ZW0/LmxpbmVQcmljaW5nIHx8IGl0ZW0/LmxpbmVfcHJpY2luZztcbiAgICAgICAgaWYgKCFwcmljaW5nIHx8ICFwcmljaW5nLnVuaXQgfHwgIXByaWNpbmcuZGlzY291bnQgfHwgIXByaWNpbmcuc3VidG90YWwpIHJldHVybiBudWxsO1xuXG4gICAgICAgIGNvbnN0IHNlY3Rpb25zID0gWyd1bml0JywgJ2Rpc2NvdW50JywgJ3N1YnRvdGFsJ107XG4gICAgICAgIGNvbnN0IHZhbGlkID0gc2VjdGlvbnMuZXZlcnkoc2VjdGlvbiA9PlxuICAgICAgICAgICAgWyduZXQnLCAndGF4JywgJ2dyb3NzJ10uZXZlcnkoa2V5ID0+IE51bWJlci5pc0Zpbml0ZShOdW1iZXIocHJpY2luZ1tzZWN0aW9uXVtrZXldKSkpXG4gICAgICAgICk7XG5cbiAgICAgICAgcmV0dXJuIHZhbGlkID8gcHJpY2luZyA6IG51bGw7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRIaXN0b3JpY2FsUHJpY2luZ0tleSA9ICgpOiAnbmV0JyB8ICdncm9zcycgPT5cbiAgICAgICAgdGhpcy5zaG93UHJpY2VXaXRoVGF4ZXNXaGlsZUJyb3dzaW5nID8gJ2dyb3NzJyA6ICduZXQnO1xuXG4gICAgZ2V0T3JkZXJMaW5lVmFsdWUgPSAoaXRlbTogYW55LCBzZWN0aW9uOiAndW5pdCcgfCAnZGlzY291bnQnIHwgJ3N1YnRvdGFsJyk6IG51bWJlciB8IG51bGwgPT4ge1xuICAgICAgICBjb25zdCBsaW5lUHJpY2luZyA9IHRoaXMuZ2V0TGluZVByaWNpbmcoaXRlbSk7XG4gICAgICAgIGlmIChsaW5lUHJpY2luZykge1xuICAgICAgICAgICAgcmV0dXJuIE51bWJlcihsaW5lUHJpY2luZ1tzZWN0aW9uXVt0aGlzLmdldEhpc3RvcmljYWxQcmljaW5nS2V5KCldKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChzZWN0aW9uID09PSAndW5pdCcpIHtcbiAgICAgICAgICAgIGNvbnN0IHVuaXRQcmljZSA9IGl0ZW0/LnVuaXRQcmljZSA/PyBpdGVtPy51bml0X3ByaWNlO1xuICAgICAgICAgICAgaWYgKHVuaXRQcmljZSAhPT0gbnVsbCAmJiB1bml0UHJpY2UgIT09IHVuZGVmaW5lZCAmJiB1bml0UHJpY2UgIT09ICcnKSByZXR1cm4gTnVtYmVyKHVuaXRQcmljZSk7XG5cbiAgICAgICAgICAgIGNvbnN0IGhpc3RvcmljYWxTdWJ0b3RhbCA9IGl0ZW0/LnN1YnRvdGFsID8/IGl0ZW0/LnRvdGFsO1xuICAgICAgICAgICAgY29uc3QgcXVhbnRpdHkgPSBOdW1iZXIoaXRlbT8ucXVhbnRpdHkgfHwgMCk7XG4gICAgICAgICAgICBpZiAoaGlzdG9yaWNhbFN1YnRvdGFsICE9PSBudWxsICYmIGhpc3RvcmljYWxTdWJ0b3RhbCAhPT0gdW5kZWZpbmVkICYmIHF1YW50aXR5ID4gMCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBOdW1iZXIoaGlzdG9yaWNhbFN1YnRvdGFsKSAvIHF1YW50aXR5O1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBDb21wYXRpYmlsaWRhZCBleHRyZW1hIGNvbiByZXNwdWVzdGFzIGFudGlndWFzIHF1ZSBubyBjb250aWVuZW5cbiAgICAgICAgICAgIC8vIG5pbmfDum4gaW1wb3J0ZSBkZWwgT3JkZXJJdGVtLiBOdW5jYSB0aWVuZSBwcmlvcmlkYWQgc29icmUgZGF0b3NcbiAgICAgICAgICAgIC8vIGhpc3TDs3JpY29zIHBlcnNpc3RpZG9zLlxuICAgICAgICAgICAgY29uc3QgdmFyaWFudCA9IGl0ZW0/LnByb2R1Y3Q/LnZhcmlhbnRzPy5bMF07XG4gICAgICAgICAgICBjb25zdCBjYXRhbG9nUHJpY2UgPSB2YXJpYW50Py5zYWxlcHJpY2UgPz8gdmFyaWFudD8ucHJpY2U7XG4gICAgICAgICAgICByZXR1cm4gY2F0YWxvZ1ByaWNlID09PSBudWxsIHx8IGNhdGFsb2dQcmljZSA9PT0gdW5kZWZpbmVkIHx8IGNhdGFsb2dQcmljZSA9PT0gJydcbiAgICAgICAgICAgICAgICA/IG51bGxcbiAgICAgICAgICAgICAgICA6IE51bWJlcihjYXRhbG9nUHJpY2UpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHNlY3Rpb24gPT09ICdkaXNjb3VudCcpIHtcbiAgICAgICAgICAgIGNvbnN0IGRpc2NvdW50ID0gaXRlbT8uZGlzY291bnQ7XG4gICAgICAgICAgICByZXR1cm4gZGlzY291bnQgPT09IG51bGwgfHwgZGlzY291bnQgPT09IHVuZGVmaW5lZCB8fCBkaXNjb3VudCA9PT0gJycgPyAwIDogTnVtYmVyKGRpc2NvdW50KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHN1YnRvdGFsID0gaXRlbT8uc3VidG90YWwgPz8gaXRlbT8udG90YWw7XG4gICAgICAgIGlmIChzdWJ0b3RhbCAhPT0gbnVsbCAmJiBzdWJ0b3RhbCAhPT0gdW5kZWZpbmVkICYmIHN1YnRvdGFsICE9PSAnJykgcmV0dXJuIE51bWJlcihzdWJ0b3RhbCk7XG5cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgaGFzT3JkZXJMaW5lVmFsdWUgPSAoaXRlbTogYW55LCBzZWN0aW9uOiAndW5pdCcgfCAnZGlzY291bnQnIHwgJ3N1YnRvdGFsJyk6IGJvb2xlYW4gPT5cbiAgICAgICAgdGhpcy5nZXRPcmRlckxpbmVWYWx1ZShpdGVtLCBzZWN0aW9uKSAhPT0gbnVsbDtcblxuICAgIHByaXZhdGUgZ2V0VG90YWxzUHJpY2luZyA9ICh0b3RhbHM6IGFueSwgY2FtZWxLZXk6IHN0cmluZywgc25ha2VLZXk6IHN0cmluZyk6IGFueSB8IG51bGwgPT4ge1xuICAgICAgICBjb25zdCBwcmljaW5nID0gdG90YWxzPy5bY2FtZWxLZXldIHx8IHRvdGFscz8uW3NuYWtlS2V5XTtcbiAgICAgICAgaWYgKCFwcmljaW5nIHx8ICFbJ25ldCcsICd0YXgnLCAnZ3Jvc3MnXS5ldmVyeShrZXkgPT4gTnVtYmVyLmlzRmluaXRlKE51bWJlcihwcmljaW5nW2tleV0pKSkpIHJldHVybiBudWxsO1xuICAgICAgICByZXR1cm4gcHJpY2luZztcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldFNlbGVjdGVkVG90YWxzUHJpY2luZyA9ICh0b3RhbHM6IGFueSwgY2FtZWxLZXk6IHN0cmluZywgc25ha2VLZXk6IHN0cmluZyk6IG51bWJlciB8IG51bGwgPT4ge1xuICAgICAgICBjb25zdCBwcmljaW5nID0gdGhpcy5nZXRUb3RhbHNQcmljaW5nKHRvdGFscywgY2FtZWxLZXksIHNuYWtlS2V5KTtcbiAgICAgICAgcmV0dXJuIHByaWNpbmcgPyBOdW1iZXIocHJpY2luZ1t0aGlzLmdldEhpc3RvcmljYWxQcmljaW5nS2V5KCldKSA6IG51bGw7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBoYXNIaXN0b3JpY2FsTGluZVByaWNpbmcgPSAoKTogYm9vbGVhbiA9PlxuICAgICAgICBBcnJheS5pc0FycmF5KHRoaXMub3JkZXI/Lml0ZW1zKVxuICAgICAgICAmJiB0aGlzLm9yZGVyLml0ZW1zLmxlbmd0aCA+IDBcbiAgICAgICAgJiYgdGhpcy5vcmRlci5pdGVtcy5ldmVyeShpdGVtID0+IHRoaXMuZ2V0TGluZVByaWNpbmcoaXRlbSkpO1xuXG4gICAgZ2V0SGlzdG9yaWNhbFByb2R1Y3RzU3VidG90YWwgPSAoKTogbnVtYmVyIHwgbnVsbCA9PiB7XG4gICAgICAgIGlmICh0aGlzLmhhc0hpc3RvcmljYWxMaW5lUHJpY2luZygpKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5vcmRlci5pdGVtcy5yZWR1Y2UoKHRvdGFsLCBpdGVtKSA9PlxuICAgICAgICAgICAgICAgIHRvdGFsICsgTnVtYmVyKHRoaXMuZ2V0TGluZVByaWNpbmcoaXRlbSkuc3VidG90YWxbdGhpcy5nZXRIaXN0b3JpY2FsUHJpY2luZ0tleSgpXSksIDApO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3Qgc3VidG90YWwgPSB0aGlzLm9yZGVyPy50b3RhbHM/LmNhcnRTdWJ0b3RhbFxuICAgICAgICAgICAgPz8gdGhpcy5vcmRlcj8udG90YWxzPy5jYXJ0X3N1YnRvdGFsXG4gICAgICAgICAgICA/PyB0aGlzLm9yZGVyPy50b3RhbHM/LnN1YnRvdGFsO1xuICAgICAgICByZXR1cm4gc3VidG90YWwgPT09IG51bGwgfHwgc3VidG90YWwgPT09IHVuZGVmaW5lZCA/IG51bGwgOiBOdW1iZXIoc3VidG90YWwpO1xuICAgIH1cblxuICAgIGdldEhpc3RvcmljYWxPcmRlckRpc2NvdW50ID0gKCk6IG51bWJlciB8IG51bGwgPT4ge1xuICAgICAgICBjb25zdCBleHBsaWNpdCA9IHRoaXMuZ2V0U2VsZWN0ZWRUb3RhbHNQcmljaW5nKHRoaXMub3JkZXI/LnRvdGFscywgJ29yZGVyRGlzY291bnRQcmljaW5nJywgJ29yZGVyX2Rpc2NvdW50X3ByaWNpbmcnKTtcbiAgICAgICAgaWYgKGV4cGxpY2l0ICE9PSBudWxsKSByZXR1cm4gZXhwbGljaXQ7XG5cbiAgICAgICAgY29uc3QgdG90YWxzID0gdGhpcy5vcmRlcj8udG90YWxzIHx8IHt9O1xuICAgICAgICByZXR1cm4gdG90YWxzLnByb21vdGlvbiA9PT0gbnVsbCB8fCB0b3RhbHMucHJvbW90aW9uID09PSB1bmRlZmluZWQgPyBudWxsIDogTnVtYmVyKHRvdGFscy5wcm9tb3Rpb24pO1xuICAgIH1cblxuICAgIGdldEhpc3RvcmljYWxDb3Vwb25EaXNjb3VudCA9ICgpOiBudW1iZXIgfCBudWxsID0+XG4gICAgICAgIHRoaXMuZ2V0U2VsZWN0ZWRUb3RhbHNQcmljaW5nKHRoaXMub3JkZXI/LnRvdGFscywgJ2NvdXBvbkRpc2NvdW50UHJpY2luZycsICdjb3Vwb25fZGlzY291bnRfcHJpY2luZycpO1xuXG4gICAgZ2V0SGlzdG9yaWNhbFNoaXBwaW5nID0gKCk6IG51bWJlciB8IG51bGwgPT4ge1xuICAgICAgICBjb25zdCBleHBsaWNpdCA9IHRoaXMuZ2V0U2VsZWN0ZWRUb3RhbHNQcmljaW5nKHRoaXMub3JkZXI/LnRvdGFscywgJ3NoaXBwaW5nUHJpY2luZycsICdzaGlwcGluZ19wcmljaW5nJyk7XG4gICAgICAgIGlmIChleHBsaWNpdCAhPT0gbnVsbCkgcmV0dXJuIGV4cGxpY2l0O1xuXG4gICAgICAgIGNvbnN0IHNoaXBwaW5nID0gdGhpcy5vcmRlcj8udG90YWxzPy5zaGlwcGluZztcbiAgICAgICAgcmV0dXJuIHNoaXBwaW5nID09PSBudWxsIHx8IHNoaXBwaW5nID09PSB1bmRlZmluZWQgPyBudWxsIDogTnVtYmVyKHNoaXBwaW5nKTtcbiAgICB9XG5cbiAgICBnZXRIaXN0b3JpY2FsVGF4ZXMgPSAoKTogbnVtYmVyID0+IE51bWJlcih0aGlzLm9yZGVyPy50b3RhbHM/LnRheGVzXG4gICAgICAgID8/IHRoaXMub3JkZXI/LnRvdGFscz8uY2FydFRheGVzXG4gICAgICAgID8/IHRoaXMub3JkZXI/LnRvdGFscz8uY2FydF90YXhlc1xuICAgICAgICA/PyAwKTtcblxuICAgIGhhc0hpc3RvcmljYWxUYXhlcyA9ICgpOiBib29sZWFuID0+IHRoaXMuZ2V0SGlzdG9yaWNhbFRheGVzKCkgIT09IDA7XG5cbiAgICBnZXRIaXN0b3JpY2FsVG90YWwgPSAoKTogbnVtYmVyIHwgbnVsbCA9PiB7XG4gICAgICAgIGNvbnN0IHRvdGFsID0gdGhpcy5vcmRlcj8udG90YWxzPy50b3RhbDtcbiAgICAgICAgcmV0dXJuIHRvdGFsID09PSBudWxsIHx8IHRvdGFsID09PSB1bmRlZmluZWQgPyBudWxsIDogTnVtYmVyKHRvdGFsKTtcbiAgICB9XG5cbiAgICBjYWxsRXJyb3IgPSAoKSA9PiB7XG4gICAgICAgIHRoaXMuZXJyb3IgPSAnPyc7XG4gICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlQnlVcmwoJ2FjY291bnQvb3JkZXJzJyk7XG4gICAgfVxuXG4gICAgdm9sdmVyID0gKCkgPT4gdGhpcy5yb3V0ZXIubmF2aWdhdGVCeVVybCgnYWNjb3VudC9vcmRlcnMnKTtcblxuICAgIHJlcGVhdE9yZGVyKCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5hbGxvd1JlcGVhdE9yZGVycyAmJiB0aGlzLm9yZGVyKSB7XG4gICAgICAgICAgICB0aGlzLmNhcnRTZXJ2aWNlLmFkZFJlcGVhdE9yZGVyVG9DYXJ0KHRoaXMub3JkZXIuaXRlbXMpO1xuICAgICAgICB9XG4gICAgfVxuXG59XG4iXX0=
277
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3JkZXItZWMuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6Im5nOi8vbmctZWFzeWNvbW1lcmNlLyIsInNvdXJjZXMiOlsibGliL2VjLWNvbXBvbmVudC9hY2NvdW50LWVjL29yZGVyLWVjL29yZGVyLWVjLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQVUsTUFBTSxlQUFlLENBQUM7QUFDekQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUN2QyxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3pELE9BQU8sS0FBSyxNQUFNLE1BQU0sUUFBUSxDQUFDO0FBQ2pDLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSwwQ0FBMEMsQ0FBQztBQUN6RSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDakQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBQ3BFLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUM3RCxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSwwQ0FBMEMsQ0FBQztBQU9oRjtJQUFzQyxvQ0FBZTtJQWlCakQsMEJBQ1csYUFBNEIsRUFDekIsWUFBNEIsRUFDL0IsTUFBYyxFQUNkLE1BQWlCLEVBQ2hCLFdBQXdCLEVBQ3hCLG9CQUEwQztRQU50RCxZQVFJLGlCQUFPLFNBRVY7UUFUVSxtQkFBYSxHQUFiLGFBQWEsQ0FBZTtRQUN6QixrQkFBWSxHQUFaLFlBQVksQ0FBZ0I7UUFDL0IsWUFBTSxHQUFOLE1BQU0sQ0FBUTtRQUNkLFlBQU0sR0FBTixNQUFNLENBQVc7UUFDaEIsaUJBQVcsR0FBWCxXQUFXLENBQWE7UUFDeEIsMEJBQW9CLEdBQXBCLG9C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U0FBUztZQUM1QyxLQUFJLENBQUMsdUJBQXVCLEdBQUcsU0FBUyxDQUFDO1FBQzdDLENBQUMsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFBO0lBQ25CLENBQUM7SUE2SEQsc0NBQVcsR0FBWDtRQUNJLElBQUksSUFBSSxDQUFDLGlCQUFpQixJQUFJLElBQUksQ0FBQyxLQUFLLEVBQUU7WUFDdEMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxvQkFBb0IsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO1NBQzNEO0lBQ0wsQ0FBQzs7Z0JBbkx5QixhQUFhO2dCQUNYLGNBQWM7Z0JBQ3ZCLE1BQU07Z0JBQ04sU0FBUztnQkFDSCxXQUFXO2dCQUNGLG9CQUFvQjs7SUFmN0M7UUFBUixLQUFLLEVBQUU7eURBQW1CO0lBUmxCLGdCQUFnQjtRQUw1QixTQUFTLENBQUM7WUFDUCxRQUFRLEVBQUUsY0FBYztZQUN4Qix1cnBCQUFzQzs7U0FFekMsQ0FBQztPQUNXLGdCQUFnQixDQXVNNUI7SUFBRCx1QkFBQztDQUFBLEFBdk1ELENBQXNDLGVBQWUsR0F1TXBEO1NBdk1ZLGdCQUFnQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgSW5wdXQsIE9uSW5pdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBBY3RpdmF0ZWRSb3V0ZSwgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCAqIGFzIG1vbWVudCBmcm9tICdtb21lbnQnO1xuaW1wb3J0IHsgT3JkZXJzU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL2FjY291bnQvb3JkZXJzLnNlcnZpY2UnO1xuaW1wb3J0IHsgQ29uc3RhbnRzIH0gZnJvbSAnLi4vLi4vLi4vY29yZS5jb25zdHMnO1xuaW1wb3J0IHsgQ29tcG9uZW50SGVscGVyIH0gZnJvbSAnLi4vLi4vLi4vY2xhc3Nlcy9jb21wb25lbnQtaGVscGVyJztcbmltcG9ydCB7IENhcnRTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvY2FydC5zZXJ2aWNlJztcbmltcG9ydCB7IENoYW5uZWxDb25maWdTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvY2hhbm5lbC1jb25maWcuc2VydmljZSc7XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnYXBwLW9yZGVyLWVjJyxcbiAgICB0ZW1wbGF0ZVVybDogJ29yZGVyLWVjLmNvbXBvbmVudC5odG1sJyxcbiAgICBzdHlsZVVybHM6IFsnb3JkZXItZWMuY29tcG9uZW50LnNjc3MnXVxufSlcbmV4cG9ydCBjbGFzcyBPcmRlckVjQ29tcG9uZW50IGV4dGVuZHMgQ29tcG9uZW50SGVscGVyIGltcGxlbWVudHMgT25Jbml0IHtcblxuICAgIHByb3RlY3RlZCBvcmRlclN1YmplY3QgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGFueT4oe30pO1xuXG4gICAgcHVibGljIG9yZGVyJCA9IHRoaXMub3JkZXJTdWJqZWN0LmFzT2JzZXJ2YWJsZSgpO1xuICAgIHB1YmxpYyBvcmRlciA9IG51bGxcbiAgICBwdWJsaWMgbG9hZGluZyA9IHRydWU7XG4gICAgcHVibGljIGVycm9yO1xuICAgIEBJbnB1dCgpIG51bWJlck9yZGVyID0gbnVsbFxuICAgIHB1YmxpYyBhbGxvd1JlcGVhdE9yZGVycyA9IGZhbHNlO1xuICAgIHB1YmxpYyBjcmVkaXRBY2NvdW50U2hvd1ByaWNlczogYm9vbGVhbiB8IG51bGwgPSBudWxsO1xuICAgIHB1YmxpYyBoaWRlUHJpY2VzOiBib29sZWFuID0gZmFsc2U7XG4gICAgcHVibGljIGhpZGVEaXNjb3VudHM6IGJvb2xlYW4gPSBmYWxzZTtcbiAgICBwdWJsaWMgaGlkZVRheGVzOiBib29sZWFuID0gZmFsc2U7XG4gICAgcHVibGljIGVuYWJsZUZpZWxkTm90ZXNJbkFydGljbGVGaWxlOiBib29sZWFuID0gZmFsc2U7XG4gICAgcHVibGljIHNob3dQcmljZVdpdGhUYXhlc1doaWxlQnJvd3Npbmc6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBwdWJsaWMgb3JkZXJzU2VydmljZTogT3JkZXJzU2VydmljZSxcbiAgICAgICAgcHJvdGVjdGVkIGFjdGl2ZWRSb3V0ZTogQWN0aXZhdGVkUm91dGUsXG4gICAgICAgIHB1YmxpYyByb3V0ZXI6IFJvdXRlcixcbiAgICAgICAgcHVibGljIGNvbnN0czogQ29uc3RhbnRzLFxuICAgICAgICBwcml2YXRlIGNhcnRTZXJ2aWNlOiBDYXJ0U2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSBjaGFubmVsQ29uZmlnU2VydmljZTogQ2hhbm5lbENvbmZpZ1NlcnZpY2VcbiAgICApIHtcbiAgICAgICAgc3VwZXIoKTtcbiAgICAgICAgdGhpcy5lY09uQ29uc3RydWN0KClcbiAgICB9XG5cbiAgICBuZ09uSW5pdCgpIHtcbiAgICAgICAgdGhpcy5sb2FkaW5nID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5vcmRlcnNTZXJ2aWNlLnNlbGVjdGVkT3JkZXIkLnN1YnNjcmliZShcbiAgICAgICAgICAgIGFzeW5jIHJlcyA9PiB7XG4gICAgICAgICAgICAgICAgbGV0IG9yZGVyO1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLm51bWJlck9yZGVyID09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5udW1iZXJPcmRlciA9IHRoaXMuYWN0aXZlZFJvdXRlLnNuYXBzaG90LnBhcmFtcy5udW1iZXJcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHJlcykgb3JkZXIgPSByZXM7XG4gICAgICAgICAgICAgICAgZWxzZSBvcmRlciA9IGF3YWl0IHRoaXMub3JkZXJzU2VydmljZS5maW5kT3JkZXIodGhpcy5udW1iZXJPcmRlcik7XG4gICAgICAgICAgICAgICAgb3JkZXIgJiYgdGhpcy5vcmRlclN1YmplY3QubmV4dChvcmRlcik7XG4gICAgICAgICAgICAgICAgIW9yZGVyICYmIHRoaXMuY2FsbEVycm9yKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5vcmRlciA9IG9yZGVyXG4gICAgICAgICAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIGVyciA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5vcmRlcnNTZXJ2aWNlLmVycm9yJC50b1Byb21pc2UoKS50aGVuKHJlcyA9PiB0aGlzLmVycm9yID0gcmVzKTtcbiAgICAgICAgICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB0aGlzLmNhbGxFcnJvcigpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuY2hhbm5lbENvbmZpZ1NlcnZpY2UuY2hhbm5lbENvbmZpZyQuc3Vic2NyaWJlKFxuICAgICAgICAgICAgKGNvbmZpZykgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChjb25maWcgJiYgY29uZmlnLmFsbG93UmVwZWF0T3JkZXJzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5hbGxvd1JlcGVhdE9yZGVycyA9IGNvbmZpZy5hbGxvd1JlcGVhdE9yZGVycztcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmFsbG93UmVwZWF0T3JkZXJzID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRoaXMuaGlkZVByaWNlcyA9IGNvbmZpZz8uaGlkZVByaWNlcyA/PyBmYWxzZTtcbiAgICAgICAgICAgICAgICB0aGlzLmhpZGVEaXNjb3VudHMgPSBjb25maWc/LmhpZGVEaXNjb3VudHMgPz8gZmFsc2U7XG4gICAgICAgICAgICAgICAgdGhpcy5oaWRlVGF4ZXMgPSBjb25maWc/LmhpZGVUYXhlcyA/PyBmYWxzZTtcbiAgICAgICAgICAgICAgICB0aGlzLnNob3dQcmljZVdpdGhUYXhlc1doaWxlQnJvd3NpbmcgPSBjb25maWc/LnNob3dQcmljZVdpdGhUYXhlc1doaWxlQnJvd3NpbmcgPT09IHRydWU7XG4gICAgICAgICAgICAgICAgdGhpcy5lbmFibGVGaWVsZE5vdGVzSW5BcnRpY2xlRmlsZSA9IGNvbmZpZz8uZW5hYmxlRmllbGROb3Rlc0luQXJ0aWNsZUZpbGUgPz8gZmFsc2U7XG4gICAgICAgICAgICB9LFxuICAgICAgICApO1xuICAgICAgICB0aGlzLmNhcnRTZXJ2aWNlLnNob3dQcmljZSQuc3Vic2NyaWJlKChzaG93UHJpY2UpID0+IHtcbiAgICAgICAgICAgIHRoaXMuY3JlZGl0QWNjb3VudFNob3dQcmljZXMgPSBzaG93UHJpY2U7XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLmVjT25Jbml0KClcbiAgICB9XG5cbiAgICB0b0RhdGUgPSAoZGF0ZSwgZm9ybWF0KSA9PiBtb21lbnQoZGF0ZSkuZm9ybWF0KCFmb3JtYXQgJiYgJ0REL01NL1lZWVksIGg6bW06c3MgYScgfHwgZm9ybWF0KVxuXG4gICAgcHJpdmF0ZSBnZXRMaW5lUHJpY2luZyA9IChpdGVtOiBhbnkpOiBhbnkgfCBudWxsID0+IHtcbiAgICAgICAgY29uc3QgcHJpY2luZyA9IGl0ZW0/LmxpbmVQcmljaW5nIHx8IGl0ZW0/LmxpbmVfcHJpY2luZztcbiAgICAgICAgaWYgKCFwcmljaW5nIHx8ICFwcmljaW5nLnVuaXQgfHwgIXByaWNpbmcuZGlzY291bnQgfHwgIXByaWNpbmcuc3VidG90YWwpIHJldHVybiBudWxsO1xuXG4gICAgICAgIGNvbnN0IHNlY3Rpb25zID0gWyd1bml0JywgJ2Rpc2NvdW50JywgJ3N1YnRvdGFsJ107XG4gICAgICAgIGNvbnN0IHZhbGlkID0gc2VjdGlvbnMuZXZlcnkoc2VjdGlvbiA9PlxuICAgICAgICAgICAgWyduZXQnLCAndGF4JywgJ2dyb3NzJ10uZXZlcnkoa2V5ID0+IE51bWJlci5pc0Zpbml0ZShOdW1iZXIocHJpY2luZ1tzZWN0aW9uXVtrZXldKSkpXG4gICAgICAgICk7XG5cbiAgICAgICAgcmV0dXJuIHZhbGlkID8gcHJpY2luZyA6IG51bGw7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRIaXN0b3JpY2FsUHJpY2luZ0tleSA9ICgpOiAnbmV0JyB8ICdncm9zcycgPT5cbiAgICAgICAgdGhpcy5zaG93UHJpY2VXaXRoVGF4ZXNXaGlsZUJyb3dzaW5nID8gJ2dyb3NzJyA6ICduZXQnO1xuXG4gICAgZ2V0T3JkZXJMaW5lVmFsdWUgPSAoaXRlbTogYW55LCBzZWN0aW9uOiAndW5pdCcgfCAnZGlzY291bnQnIHwgJ3N1YnRvdGFsJyk6IG51bWJlciB8IG51bGwgPT4ge1xuICAgICAgICBjb25zdCBsaW5lUHJpY2luZyA9IHRoaXMuZ2V0TGluZVByaWNpbmcoaXRlbSk7XG4gICAgICAgIGlmIChsaW5lUHJpY2luZykge1xuICAgICAgICAgICAgcmV0dXJuIE51bWJlcihsaW5lUHJpY2luZ1tzZWN0aW9uXVt0aGlzLmdldEhpc3RvcmljYWxQcmljaW5nS2V5KCldKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChzZWN0aW9uID09PSAndW5pdCcpIHtcbiAgICAgICAgICAgIGNvbnN0IHVuaXRQcmljZSA9IGl0ZW0/LnVuaXRQcmljZSA/PyBpdGVtPy51bml0X3ByaWNlO1xuICAgICAgICAgICAgaWYgKHVuaXRQcmljZSAhPT0gbnVsbCAmJiB1bml0UHJpY2UgIT09IHVuZGVmaW5lZCAmJiB1bml0UHJpY2UgIT09ICcnKSByZXR1cm4gTnVtYmVyKHVuaXRQcmljZSk7XG5cbiAgICAgICAgICAgIGNvbnN0IGhpc3RvcmljYWxTdWJ0b3RhbCA9IGl0ZW0/LnN1YnRvdGFsID8/IGl0ZW0/LnRvdGFsO1xuICAgICAgICAgICAgY29uc3QgcXVhbnRpdHkgPSBOdW1iZXIoaXRlbT8ucXVhbnRpdHkgfHwgMCk7XG4gICAgICAgICAgICBpZiAoaGlzdG9yaWNhbFN1YnRvdGFsICE9PSBudWxsICYmIGhpc3RvcmljYWxTdWJ0b3RhbCAhPT0gdW5kZWZpbmVkICYmIHF1YW50aXR5ID4gMCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBOdW1iZXIoaGlzdG9yaWNhbFN1YnRvdGFsKSAvIHF1YW50aXR5O1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBDb21wYXRpYmlsaWRhZCBleHRyZW1hIGNvbiByZXNwdWVzdGFzIGFudGlndWFzIHF1ZSBubyBjb250aWVuZW5cbiAgICAgICAgICAgIC8vIG5pbmfDum4gaW1wb3J0ZSBkZWwgT3JkZXJJdGVtLiBOdW5jYSB0aWVuZSBwcmlvcmlkYWQgc29icmUgZGF0b3NcbiAgICAgICAgICAgIC8vIGhpc3TDs3JpY29zIHBlcnNpc3RpZG9zLlxuICAgICAgICAgICAgY29uc3QgdmFyaWFudCA9IGl0ZW0/LnByb2R1Y3Q/LnZhcmlhbnRzPy5bMF07XG4gICAgICAgICAgICBjb25zdCBjYXRhbG9nUHJpY2UgPSB2YXJpYW50Py5zYWxlcHJpY2UgPz8gdmFyaWFudD8ucHJpY2U7XG4gICAgICAgICAgICByZXR1cm4gY2F0YWxvZ1ByaWNlID09PSBudWxsIHx8IGNhdGFsb2dQcmljZSA9PT0gdW5kZWZpbmVkIHx8IGNhdGFsb2dQcmljZSA9PT0gJydcbiAgICAgICAgICAgICAgICA/IG51bGxcbiAgICAgICAgICAgICAgICA6IE51bWJlcihjYXRhbG9nUHJpY2UpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHNlY3Rpb24gPT09ICdkaXNjb3VudCcpIHtcbiAgICAgICAgICAgIGNvbnN0IGRpc2NvdW50ID0gaXRlbT8uZGlzY291bnQ7XG4gICAgICAgICAgICByZXR1cm4gZGlzY291bnQgPT09IG51bGwgfHwgZGlzY291bnQgPT09IHVuZGVmaW5lZCB8fCBkaXNjb3VudCA9PT0gJycgPyAwIDogTnVtYmVyKGRpc2NvdW50KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHN1YnRvdGFsID0gaXRlbT8uc3VidG90YWwgPz8gaXRlbT8udG90YWw7XG4gICAgICAgIGlmIChzdWJ0b3RhbCAhPT0gbnVsbCAmJiBzdWJ0b3RhbCAhPT0gdW5kZWZpbmVkICYmIHN1YnRvdGFsICE9PSAnJykgcmV0dXJuIE51bWJlcihzdWJ0b3RhbCk7XG5cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgaGFzT3JkZXJMaW5lVmFsdWUgPSAoaXRlbTogYW55LCBzZWN0aW9uOiAndW5pdCcgfCAnZGlzY291bnQnIHwgJ3N1YnRvdGFsJyk6IGJvb2xlYW4gPT5cbiAgICAgICAgdGhpcy5nZXRPcmRlckxpbmVWYWx1ZShpdGVtLCBzZWN0aW9uKSAhPT0gbnVsbDtcblxuICAgIHByaXZhdGUgZ2V0VG90YWxzUHJpY2luZyA9ICh0b3RhbHM6IGFueSwgY2FtZWxLZXk6IHN0cmluZywgc25ha2VLZXk6IHN0cmluZyk6IGFueSB8IG51bGwgPT4ge1xuICAgICAgICBjb25zdCBwcmljaW5nID0gdG90YWxzPy5bY2FtZWxLZXldIHx8IHRvdGFscz8uW3NuYWtlS2V5XTtcbiAgICAgICAgaWYgKCFwcmljaW5nIHx8ICFbJ25ldCcsICd0YXgnLCAnZ3Jvc3MnXS5ldmVyeShrZXkgPT4gTnVtYmVyLmlzRmluaXRlKE51bWJlcihwcmljaW5nW2tleV0pKSkpIHJldHVybiBudWxsO1xuICAgICAgICByZXR1cm4gcHJpY2luZztcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldFNlbGVjdGVkVG90YWxzUHJpY2luZyA9ICh0b3RhbHM6IGFueSwgY2FtZWxLZXk6IHN0cmluZywgc25ha2VLZXk6IHN0cmluZyk6IG51bWJlciB8IG51bGwgPT4ge1xuICAgICAgICBjb25zdCBwcmljaW5nID0gdGhpcy5nZXRUb3RhbHNQcmljaW5nKHRvdGFscywgY2FtZWxLZXksIHNuYWtlS2V5KTtcbiAgICAgICAgcmV0dXJuIHByaWNpbmcgPyBOdW1iZXIocHJpY2luZ1t0aGlzLmdldEhpc3RvcmljYWxQcmljaW5nS2V5KCldKSA6IG51bGw7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBoYXNIaXN0b3JpY2FsTGluZVByaWNpbmcgPSAoKTogYm9vbGVhbiA9PlxuICAgICAgICBBcnJheS5pc0FycmF5KHRoaXMub3JkZXI/Lml0ZW1zKVxuICAgICAgICAmJiB0aGlzLm9yZGVyLml0ZW1zLmxlbmd0aCA+IDBcbiAgICAgICAgJiYgdGhpcy5vcmRlci5pdGVtcy5ldmVyeShpdGVtID0+IHRoaXMuZ2V0TGluZVByaWNpbmcoaXRlbSkpO1xuXG4gICAgZ2V0SGlzdG9yaWNhbFByb2R1Y3RzU3VidG90YWwgPSAoKTogbnVtYmVyIHwgbnVsbCA9PiB7XG4gICAgICAgIGlmICh0aGlzLmhhc0hpc3RvcmljYWxMaW5lUHJpY2luZygpKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5vcmRlci5pdGVtcy5yZWR1Y2UoKHRvdGFsLCBpdGVtKSA9PlxuICAgICAgICAgICAgICAgIHRvdGFsICsgTnVtYmVyKHRoaXMuZ2V0TGluZVByaWNpbmcoaXRlbSkuc3VidG90YWxbdGhpcy5nZXRIaXN0b3JpY2FsUHJpY2luZ0tleSgpXSksIDApO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3Qgc3VidG90YWwgPSB0aGlzLm9yZGVyPy50b3RhbHM/LmNhcnRTdWJ0b3RhbFxuICAgICAgICAgICAgPz8gdGhpcy5vcmRlcj8udG90YWxzPy5jYXJ0X3N1YnRvdGFsXG4gICAgICAgICAgICA/PyB0aGlzLm9yZGVyPy50b3RhbHM/LnN1YnRvdGFsO1xuICAgICAgICByZXR1cm4gc3VidG90YWwgPT09IG51bGwgfHwgc3VidG90YWwgPT09IHVuZGVmaW5lZCA/IG51bGwgOiBOdW1iZXIoc3VidG90YWwpO1xuICAgIH1cblxuICAgIGdldEhpc3RvcmljYWxPcmRlckRpc2NvdW50ID0gKCk6IG51bWJlciB8IG51bGwgPT4ge1xuICAgICAgICBjb25zdCBleHBsaWNpdCA9IHRoaXMuZ2V0U2VsZWN0ZWRUb3RhbHNQcmljaW5nKHRoaXMub3JkZXI/LnRvdGFscywgJ29yZGVyRGlzY291bnRQcmljaW5nJywgJ29yZGVyX2Rpc2NvdW50X3ByaWNpbmcnKTtcbiAgICAgICAgaWYgKGV4cGxpY2l0ICE9PSBudWxsKSByZXR1cm4gZXhwbGljaXQ7XG5cbiAgICAgICAgY29uc3QgdG90YWxzID0gdGhpcy5vcmRlcj8udG90YWxzIHx8IHt9O1xuICAgICAgICByZXR1cm4gdG90YWxzLnByb21vdGlvbiA9PT0gbnVsbCB8fCB0b3RhbHMucHJvbW90aW9uID09PSB1bmRlZmluZWQgPyBudWxsIDogTnVtYmVyKHRvdGFscy5wcm9tb3Rpb24pO1xuICAgIH1cblxuICAgIGdldEhpc3RvcmljYWxDb3Vwb25EaXNjb3VudCA9ICgpOiBudW1iZXIgfCBudWxsID0+XG4gICAgICAgIHRoaXMuZ2V0U2VsZWN0ZWRUb3RhbHNQcmljaW5nKHRoaXMub3JkZXI/LnRvdGFscywgJ2NvdXBvbkRpc2NvdW50UHJpY2luZycsICdjb3Vwb25fZGlzY291bnRfcHJpY2luZycpO1xuXG4gICAgZ2V0SGlzdG9yaWNhbFNoaXBwaW5nID0gKCk6IG51bWJlciB8IG51bGwgPT4ge1xuICAgICAgICBjb25zdCBleHBsaWNpdCA9IHRoaXMuZ2V0U2VsZWN0ZWRUb3RhbHNQcmljaW5nKHRoaXMub3JkZXI/LnRvdGFscywgJ3NoaXBwaW5nUHJpY2luZycsICdzaGlwcGluZ19wcmljaW5nJyk7XG4gICAgICAgIGlmIChleHBsaWNpdCAhPT0gbnVsbCkgcmV0dXJuIGV4cGxpY2l0O1xuXG4gICAgICAgIGNvbnN0IHNoaXBwaW5nID0gdGhpcy5vcmRlcj8udG90YWxzPy5zaGlwcGluZztcbiAgICAgICAgcmV0dXJuIHNoaXBwaW5nID09PSBudWxsIHx8IHNoaXBwaW5nID09PSB1bmRlZmluZWQgPyBudWxsIDogTnVtYmVyKHNoaXBwaW5nKTtcbiAgICB9XG5cbiAgICBnZXRIaXN0b3JpY2FsVGF4ZXMgPSAoKTogbnVtYmVyID0+IE51bWJlcih0aGlzLm9yZGVyPy50b3RhbHM/LnRheGVzXG4gICAgICAgID8/IHRoaXMub3JkZXI/LnRvdGFscz8uY2FydFRheGVzXG4gICAgICAgID8/IHRoaXMub3JkZXI/LnRvdGFscz8uY2FydF90YXhlc1xuICAgICAgICA/PyAwKTtcblxuICAgIGhhc0hpc3RvcmljYWxUYXhlcyA9ICgpOiBib29sZWFuID0+IHRoaXMuZ2V0SGlzdG9yaWNhbFRheGVzKCkgIT09IDA7XG5cbiAgICBnZXRIaXN0b3JpY2FsVG90YWwgPSAoKTogbnVtYmVyIHwgbnVsbCA9PiB7XG4gICAgICAgIGNvbnN0IHRvdGFsID0gdGhpcy5vcmRlcj8udG90YWxzPy50b3RhbDtcbiAgICAgICAgcmV0dXJuIHRvdGFsID09PSBudWxsIHx8IHRvdGFsID09PSB1bmRlZmluZWQgPyBudWxsIDogTnVtYmVyKHRvdGFsKTtcbiAgICB9XG5cbiAgICBjYWxsRXJyb3IgPSAoKSA9PiB7XG4gICAgICAgIHRoaXMuZXJyb3IgPSAnPyc7XG4gICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlQnlVcmwoJ2FjY291bnQvb3JkZXJzJyk7XG4gICAgfVxuXG4gICAgdm9sdmVyID0gKCkgPT4gdGhpcy5yb3V0ZXIubmF2aWdhdGVCeVVybCgnYWNjb3VudC9vcmRlcnMnKTtcblxuICAgIHJlcGVhdE9yZGVyKCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5hbGxvd1JlcGVhdE9yZGVycyAmJiB0aGlzLm9yZGVyKSB7XG4gICAgICAgICAgICB0aGlzLmNhcnRTZXJ2aWNlLmFkZFJlcGVhdE9yZGVyVG9DYXJ0KHRoaXMub3JkZXIuaXRlbXMpO1xuICAgICAgICB9XG4gICAgfVxuXG59XG4iXX0=
@@ -0,0 +1,27 @@
1
+ /** Identifica las rutas del core que deben salir al inicio tras reemplazar un token inactivo. */
2
+ export var cartBootstrapRecoveryRoute = function (url) {
3
+ var path = (url || '').split(/[?#]/)[0].replace(/\/+$/, '') || '/';
4
+ if (path === '/cart')
5
+ return 'cart';
6
+ if (path === '/checkout' || path === '/cart/checkout')
7
+ return 'checkout';
8
+ return null;
9
+ };
10
+ /** Ejecuta la navegación solo desde la ruta core correspondiente al consumidor. */
11
+ export var navigateHomeAfterCartBootstrapRecovery = function (url, expectedRoute, consumeRecovery, navigateHome) {
12
+ if (cartBootstrapRecoveryRoute(url) !== expectedRoute)
13
+ return false;
14
+ if (!consumeRecovery())
15
+ return false;
16
+ navigateHome();
17
+ return true;
18
+ };
19
+ /** Invalida el estado local y sale únicamente de una ruta de checkout. */
20
+ export var handleInvalidatedCheckoutNavigation = function (url, invalidateCheckout, navigateHome) {
21
+ if (cartBootstrapRecoveryRoute(url) !== 'checkout')
22
+ return false;
23
+ invalidateCheckout();
24
+ navigateHome();
25
+ return true;
26
+ };
27
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FydC1ib290c3RyYXAtbmF2aWdhdGlvbi5qcyIsInNvdXJjZVJvb3QiOiJuZzovL25nLWVhc3ljb21tZXJjZS8iLCJzb3VyY2VzIjpbImxpYi9lYy1jb21wb25lbnQvY2FydC1ib290c3RyYXAtbmF2aWdhdGlvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQSxpR0FBaUc7QUFDakcsTUFBTSxDQUFDLElBQU0sMEJBQTBCLEdBQUcsVUFBQyxHQUFXO0lBQ2xELElBQU0sSUFBSSxHQUFHLENBQUMsR0FBRyxJQUFJLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxJQUFJLEdBQUcsQ0FBQztJQUNyRSxJQUFJLElBQUksS0FBSyxPQUFPO1FBQUUsT0FBTyxNQUFNLENBQUM7SUFDcEMsSUFBSSxJQUFJLEtBQUssV0FBVyxJQUFJLElBQUksS0FBSyxnQkFBZ0I7UUFBRSxPQUFPLFVBQVUsQ0FBQztJQUN6RSxPQUFPLElBQUksQ0FBQztBQUNoQixDQUFDLENBQUM7QUFFRixtRkFBbUY7QUFDbkYsTUFBTSxDQUFDLElBQU0sc0NBQXNDLEdBQUcsVUFDbEQsR0FBVyxFQUNYLGFBQXdELEVBQ3hELGVBQThCLEVBQzlCLFlBQXVCO0lBRXZCLElBQUksMEJBQTBCLENBQUMsR0FBRyxDQUFDLEtBQUssYUFBYTtRQUFFLE9BQU8sS0FBSyxDQUFDO0lBQ3BFLElBQUksQ0FBQyxlQUFlLEVBQUU7UUFBRSxPQUFPLEtBQUssQ0FBQztJQUNyQyxZQUFZLEVBQUUsQ0FBQztJQUNmLE9BQU8sSUFBSSxDQUFDO0FBQ2hCLENBQUMsQ0FBQztBQUVGLDBFQUEwRTtBQUMxRSxNQUFNLENBQUMsSUFBTSxtQ0FBbUMsR0FBRyxVQUMvQyxHQUFXLEVBQ1gsa0JBQThCLEVBQzlCLFlBQXVCO0lBRXZCLElBQUksMEJBQTBCLENBQUMsR0FBRyxDQUFDLEtBQUssVUFBVTtRQUFFLE9BQU8sS0FBSyxDQUFDO0lBQ2pFLGtCQUFrQixFQUFFLENBQUM7SUFDckIsWUFBWSxFQUFFLENBQUM7SUFDZixPQUFPLElBQUksQ0FBQztBQUNoQixDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgdHlwZSBDYXJ0Qm9vdHN0cmFwUmVjb3ZlcnlSb3V0ZSA9ICdjYXJ0JyB8ICdjaGVja291dCcgfCBudWxsO1xuXG4vKiogSWRlbnRpZmljYSBsYXMgcnV0YXMgZGVsIGNvcmUgcXVlIGRlYmVuIHNhbGlyIGFsIGluaWNpbyB0cmFzIHJlZW1wbGF6YXIgdW4gdG9rZW4gaW5hY3Rpdm8uICovXG5leHBvcnQgY29uc3QgY2FydEJvb3RzdHJhcFJlY292ZXJ5Um91dGUgPSAodXJsOiBzdHJpbmcpOiBDYXJ0Qm9vdHN0cmFwUmVjb3ZlcnlSb3V0ZSA9PiB7XG4gICAgY29uc3QgcGF0aCA9ICh1cmwgfHwgJycpLnNwbGl0KC9bPyNdLylbMF0ucmVwbGFjZSgvXFwvKyQvLCAnJykgfHwgJy8nO1xuICAgIGlmIChwYXRoID09PSAnL2NhcnQnKSByZXR1cm4gJ2NhcnQnO1xuICAgIGlmIChwYXRoID09PSAnL2NoZWNrb3V0JyB8fCBwYXRoID09PSAnL2NhcnQvY2hlY2tvdXQnKSByZXR1cm4gJ2NoZWNrb3V0JztcbiAgICByZXR1cm4gbnVsbDtcbn07XG5cbi8qKiBFamVjdXRhIGxhIG5hdmVnYWNpw7NuIHNvbG8gZGVzZGUgbGEgcnV0YSBjb3JlIGNvcnJlc3BvbmRpZW50ZSBhbCBjb25zdW1pZG9yLiAqL1xuZXhwb3J0IGNvbnN0IG5hdmlnYXRlSG9tZUFmdGVyQ2FydEJvb3RzdHJhcFJlY292ZXJ5ID0gKFxuICAgIHVybDogc3RyaW5nLFxuICAgIGV4cGVjdGVkUm91dGU6IEV4Y2x1ZGU8Q2FydEJvb3RzdHJhcFJlY292ZXJ5Um91dGUsIG51bGw+LFxuICAgIGNvbnN1bWVSZWNvdmVyeTogKCkgPT4gYm9vbGVhbixcbiAgICBuYXZpZ2F0ZUhvbWU6ICgpID0+IGFueVxuKTogYm9vbGVhbiA9PiB7XG4gICAgaWYgKGNhcnRCb290c3RyYXBSZWNvdmVyeVJvdXRlKHVybCkgIT09IGV4cGVjdGVkUm91dGUpIHJldHVybiBmYWxzZTtcbiAgICBpZiAoIWNvbnN1bWVSZWNvdmVyeSgpKSByZXR1cm4gZmFsc2U7XG4gICAgbmF2aWdhdGVIb21lKCk7XG4gICAgcmV0dXJuIHRydWU7XG59O1xuXG4vKiogSW52YWxpZGEgZWwgZXN0YWRvIGxvY2FsIHkgc2FsZSDDum5pY2FtZW50ZSBkZSB1bmEgcnV0YSBkZSBjaGVja291dC4gKi9cbmV4cG9ydCBjb25zdCBoYW5kbGVJbnZhbGlkYXRlZENoZWNrb3V0TmF2aWdhdGlvbiA9IChcbiAgICB1cmw6IHN0cmluZyxcbiAgICBpbnZhbGlkYXRlQ2hlY2tvdXQ6ICgpID0+IHZvaWQsXG4gICAgbmF2aWdhdGVIb21lOiAoKSA9PiBhbnlcbik6IGJvb2xlYW4gPT4ge1xuICAgIGlmIChjYXJ0Qm9vdHN0cmFwUmVjb3ZlcnlSb3V0ZSh1cmwpICE9PSAnY2hlY2tvdXQnKSByZXR1cm4gZmFsc2U7XG4gICAgaW52YWxpZGF0ZUNoZWNrb3V0KCk7XG4gICAgbmF2aWdhdGVIb21lKCk7XG4gICAgcmV0dXJuIHRydWU7XG59O1xuIl19