ng-easycommerce-v18 0.3.22-beta.1 → 0.3.22

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 (33) hide show
  1. package/README.md +8 -2
  2. package/esm2022/lib/classes/filters/attributes-filter.mjs +74 -4
  3. package/esm2022/lib/classes/filters/category-filter.mjs +105 -26
  4. package/esm2022/lib/classes/filters/filter-factory.mjs +7 -3
  5. package/esm2022/lib/classes/filters/filter.mjs +27 -2
  6. package/esm2022/lib/classes/filters/price_range-filter.mjs +3 -3
  7. package/esm2022/lib/constants/core.constants.service.mjs +12 -1
  8. package/esm2022/lib/ec-components/blocks-ec/block-products-ec/block-products-ec.component.mjs +5 -3
  9. package/esm2022/lib/ec-components/collection-ec/collection-ec.component.mjs +41 -17
  10. package/esm2022/lib/ec-components/filters-ec/filters-ec.component.mjs +42 -9
  11. package/esm2022/lib/ec-components/header-ec/header-ec.component.mjs +42 -27
  12. package/esm2022/lib/ec-components/price-range-filter/price-range-filter.component.mjs +13 -2
  13. package/esm2022/lib/ec-components/related-products-ec/related-products-ec.component.mjs +6 -4
  14. package/esm2022/lib/ec-components/widgets-ec/magnizoom-ec/magnizoom-ec.component.mjs +4 -2
  15. package/esm2022/lib/ec-services/analytics/facebook-pixel.service.mjs +4 -2
  16. package/esm2022/lib/ec-services/analytics/google-analytics.service.mjs +4 -2
  17. package/esm2022/lib/ec-services/filters.service.mjs +124 -18
  18. package/esm2022/lib/ec-services/options.service.mjs +27 -3
  19. package/esm2022/lib/ec-services/pagination.service.mjs +70 -22
  20. package/esm2022/lib/ec-services/products.service.mjs +5 -3
  21. package/fesm2022/ng-easycommerce-v18.mjs +586 -126
  22. package/fesm2022/ng-easycommerce-v18.mjs.map +1 -1
  23. package/lib/classes/filters/attributes-filter.d.ts +24 -0
  24. package/lib/classes/filters/category-filter.d.ts +30 -3
  25. package/lib/constants/core.constants.service.d.ts +7 -0
  26. package/lib/ec-components/collection-ec/collection-ec.component.d.ts +5 -4
  27. package/lib/ec-components/filters-ec/filters-ec.component.d.ts +13 -0
  28. package/lib/ec-components/price-range-filter/price-range-filter.component.d.ts +2 -0
  29. package/lib/ec-services/filters.service.d.ts +18 -1
  30. package/lib/ec-services/options.service.d.ts +4 -0
  31. package/lib/ec-services/pagination.service.d.ts +21 -5
  32. package/lib/ec-services/products.service.d.ts +1 -1
  33. package/package.json +1 -1
@@ -30,6 +30,11 @@ export class CoreConstantsService {
30
30
  * Guarda la variable window del web browser.
31
31
  */
32
32
  window;
33
+ /**
34
+ * Tipo de ruta actual (ej: 'categories', 'attributes', etc).
35
+ * Lo usamos para que PaginationService sepa qué filtro esperar.
36
+ */
37
+ currentRouteType = null;
33
38
  constructor() {
34
39
  if (isPlatformBrowser(this.platformId)) {
35
40
  this.window = window;
@@ -307,6 +312,12 @@ export class CoreConstantsService {
307
312
  return this.apiConstants.CHANNEL;
308
313
  }
309
314
  form_sender = false;
315
+ setCurrentRouteType(type) {
316
+ this.currentRouteType = type;
317
+ }
318
+ getCurrentRouteType() {
319
+ return this.currentRouteType;
320
+ }
310
321
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: CoreConstantsService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
311
322
  static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: CoreConstantsService, providedIn: 'root' });
312
323
  }
@@ -316,4 +327,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
316
327
  providedIn: 'root'
317
328
  }]
318
329
  }], ctorParameters: () => [] });
319
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29yZS5jb25zdGFudHMuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25nLWVhc3ljb21tZXJjZS12MTgvc3JjL2xpYi9jb25zdGFudHMvY29yZS5jb25zdGFudHMuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxXQUFXLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDaEUsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDOUQsT0FBTyxFQUFFLGlCQUFpQixFQUFFLFFBQVEsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBRTlELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGNBQWMsQ0FBQzs7QUFDakQ7Ozs7R0FJRztBQUlILE1BQU0sT0FBTyxvQkFBb0I7SUFFekIsV0FBVyxHQUFXLEVBQUUsQ0FBQztJQUNoQzs7T0FFRztJQUNLLFlBQVksR0FBRyxNQUFNLENBQUMsbUJBQW1CLENBQUMsQ0FBQTtJQUNsRDs7T0FFRztJQUNLLFVBQVUsR0FBUSxNQUFNLENBQUMsV0FBVyxDQUFDLENBQUE7SUFDN0M7O09BRUc7SUFDSyxRQUFRLEdBQWEsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFBO0lBQzdDOztPQUVHO0lBQ0ssV0FBVyxHQUFnQixNQUFNLENBQUMsaUJBQWlCLENBQUMsQ0FBQTtJQUM1RDs7T0FFRztJQUNLLE1BQU0sQ0FBUztJQUV2QjtRQUNDLElBQUksaUJBQWlCLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUM7WUFDeEMsSUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUE7UUFDckIsQ0FBQztJQUNGLENBQUM7SUFDRDs7T0FFRztJQUNJLGtCQUFrQixHQUFXLGFBQWEsQ0FBQztJQUNsRDs7T0FFRztJQUNJLGNBQWMsR0FBVyxXQUFXLENBQUM7SUFDNUM7O09BRUc7SUFD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TyxJQUFJLENBQUMseUJBQXlCLENBQUEsQ0FBQyxDQUFDO0lBRXZFOzs7Ozs7Ozs7Ozs7OztNQWNFO0lBQ00sK0JBQStCLEdBQW9DO1FBQzFFLElBQUksRUFBRSxPQUFPO1FBQ2IsSUFBSSxFQUFFLE9BQU87UUFDYixrQkFBa0IsRUFBRSxLQUFLO1FBQ3pCLFlBQVksRUFBRSxJQUFJO0tBQ2xCLENBQUE7SUFFRCxrQ0FBa0MsR0FBRyxDQUFDLEtBQXNDLEVBQUUsRUFBRTtRQUMvRSxJQUFJLENBQUMsK0JBQStCLEdBQUc7WUFDdEMsR0FBRyxJQUFJLENBQUMsK0JBQStCO1lBQ3ZDLEdBQUcsS0FBSztTQUNSLENBQUE7SUFDRixDQUFDLENBQUE7SUFFRCxrQ0FBa0MsR0FBRyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsK0JBQStCLENBQUE7SUFFeEUsVUFBVTtRQUNoQixPQUFPLElBQUksQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDO0lBQ2xDLENBQUM7SUFFTSxXQUFXLEdBQVksS0FBSyxDQUFDO3dHQTlVeEIsb0JBQW9COzRHQUFwQixvQkFBb0IsY0FGcEIsTUFBTTs7NEZBRU4sb0JBQW9CO2tCQUhoQyxVQUFVO21CQUFDO29CQUNYLFVBQVUsRUFBRSxNQUFNO2lCQUNsQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGluamVjdCwgSW5qZWN0YWJsZSwgUExBVEZPUk1fSUQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEFwaUNvbnN0YW50c1NlcnZpY2UgfSBmcm9tICcuL2FwaS5jb25zdGFudHMuc2VydmljZSc7XG5pbXBvcnQgeyBpc1BsYXRmb3JtQnJvd3NlciwgRE9DVU1FTlQgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgQ3VycmVuY3lDb25maWcsIGN1cnJlbmN5VHlwZSwgUGFyYW1zUHJvZHVjdHNXaXRoVW5pcXVlVmFyaWFudCwgRW52aXJvbm1lbnQgfSBmcm9tICcuLi9pbnRlcmZhY2VzJztcbmltcG9ydCB7IEVOVklST05NRU5UX1RPS0VOIH0gZnJvbSAnLi4vcHJvdmlkZXJzJztcbi8qKlxuICogU2VydmljaW8gcXVlIHByb3ZlZSBsYXMgY29uc3RhbnRlcyBuZWNlc2FyaWFzIHF1ZSBzZSB1dGlsaXphbiBwb3IgdG9kYSBsYSBhcGxpY2FjacOzbi5cbiAqIEBleHBvcnRcbiAqIEBjbGFzcyBDb3JlQ29uc3RhbnRzU2VydmljZVxuICovXG5ASW5qZWN0YWJsZSh7XG5cdHByb3ZpZGVkSW46ICdyb290J1xufSlcbmV4cG9ydCBjbGFzcyBDb3JlQ29uc3RhbnRzU2VydmljZSB7XG5cblx0cHVibGljIHNlYXJjaFZhbHVlOiBzdHJpbmcgPSAnJztcblx0LyoqXG5cdCAqIFNlcnZpY2lvIHF1ZSBjb250aWVuZSBsYXMgY29uc3RhbnRlcyB1c2FkYXMgcGFyYSBsYSBBUElcblx0ICovXG5cdHByaXZhdGUgYXBpQ29uc3RhbnRzID0gaW5qZWN0KEFwaUNvbnN0YW50c1NlcnZpY2UpXG5cdC8qKlxuXHQgKiBQcm92ZWUgZWwgSUQgZGUgbGEgcGxhdGFmb3JtYSBlbiBkb25kZSBzZSBlc3RhIGVqZWN1dGFuZG8gZWwgY29kaWdvLCBlc3RvIHNpcnZlIHBhcmEgcG9kZXIgZGlmZXJlbmNpYXIgc2kgZXMgZGUgdW4gc2Vydmlkb3IgbyB1biBuYXZlZ2Fkb3Igd2ViLlxuXHQgKi9cblx0cHJpdmF0ZSBwbGF0Zm9ybUlkOiBhbnkgPSBpbmplY3QoUExBVEZPUk1fSUQpXG5cdC8qKlxuXHQgKiBEb2N1bWVudCB0b2tlbiBwYXJhIGFjY2VzbyBTU1ItY29tcGF0aWJsZSBhbCBkb2N1bWVudG9cblx0ICovXG5cdHByaXZhdGUgZG9jdW1lbnQ6IERvY3VtZW50ID0gaW5qZWN0KERPQ1VNRU5UKVxuXHQvKipcblx0ICogQ29udGllbmUgbG9zIGRhdG9zIHByb3Zpc3RvIHBvciBlbCBmcm9udGVuZCBlbiBlbCBhcmNoaXZvIGVudmlyb25tZW50LnRzXG5cdCAqL1xuXHRwcml2YXRlIGVudmlyb25tZW50OiBFbnZpcm9ubWVudCA9IGluamVjdChFTlZJUk9OTUVOVF9UT0tFTilcblx0LyoqXG5cdCAqIEd1YXJkYSBsYSB2YXJpYWJsZSB3aW5kb3cgZGVsIHdlYiBicm93c2VyLlxuXHQgKi9cblx0cHJpdmF0ZSB3aW5kb3c/OldpbmRvdztcblxuXHRjb25zdHJ1Y3RvcigpIHtcblx0XHRpZiAoaXNQbGF0Zm9ybUJyb3dzZXIodGhpcy5wbGF0Zm9ybUlkKSkge1xuXHRcdFx0dGhpcy53aW5kb3cgPSB3aW5kb3dcblx0XHR9XG5cdH1cblx0LyoqXG5cdCAqIFBhdGggdXNhZG8gZW4gbGFzIGNvbGVjY2lvbmVzIGRlIHByb2R1Y3Rvcy5cblx0ICovXG5cdHB1YmxpYyBQUk9EVUNUX0xJU1RfUk9VVEU6IHN0cmluZyA9ICdjb2xsZWN0aW9uLyc7XG5cdC8qKlxuXHQgKiBQYXRoIHVzYWRvIHBhcmEgYWNjZWRlciBhIGxhcyBzZWNjaW9uZXMuXG5cdCAqL1xuXHRwdWJsaWMgU0VDVElPTlNfUk9VVEU6IHN0cmluZyA9ICdzZWN0aW9ucy8nO1xuXHQvKipcblx0ICogUGF0aCBxdWUgYWxvamEgbGEgY2FycGV0YSBkZSBsb3MgYXNzZXRzLlxuXHQgKi9cblx0cHVibGljIHJlYWRvbmx5IEFTU0VUU19VUkw6IHN0cmluZyA9IHRoaXMuYXBpQ29uc3RhbnRzLkFQSV9VUkw7XG5cdC8qKlxuXHQgKiBSZXRvcm5hIGxhIHVybCBkb25kZSBzZSBndWFyZGEgbGFzIGltYWdlbmVzLlxuXHQgKiBAcGFyYW0gcG9zdE1lZGlhIFxuXHQgKiBAcmV0dXJucyBcblx0ICovXG5cdHB1YmxpYyBtZWRpYVVybCA9IChwb3N0TWVkaWE/OiBzdHJpbmcpID0+IHRoaXMuQVNTRVRTX1VSTCArICh0aGlzLkFTU0VUU19VUkwgPT0gdGhpcy5hcGlDb25zdGFudHMuQVBJX1VSTCA/ICdtZWRpYS8nIDogJycpICsgKHBvc3RNZWRpYSA/IHBvc3RNZWRpYSA6IFwiaW1hZ2UvXCIpO1xuXHQvKipcblx0ICogUmV0b3JuYSBsYSB1cmwgZG9uZGUgc2UgZ3VhcmRhIGxhcyBpbWFnZW5lcy5cblx0ICogQHBhcmFtIHBvc3RNZWRpYSBcblx0ICogQHJldHVybnMgXG5cdCAqL1xuXHRwdWJsaWMgbWVkaWFJbWFnZVVybCA9IChwb3N0TWVkaWE/OiBzdHJpbmcpID0+IHRoaXMuQVNTRVRTX1VSTCArICh0aGlzLkFTU0VUU19VUkwgPT0gdGhpcy5hcGlDb25zdGFudHMuQVBJX1VSTCA/ICdtZWRpYS9pbWFnZS8nIDogJycpICsgKHBvc3RNZWRpYSA/IHBvc3RNZWRpYSA6IFwiaW1hZ2UvXCIpO1xuXHQvKipcblx0ICogUmV0b3JuYSBsYSB1cmwgZGVsIHNpdGlvLlxuXHQgKiBAcGFyYW0gcG9zdE1lZGlhIFxuXHQgKiBAcmV0dXJucyBcblx0ICovXG5cdHB1YmxpYyB1cmwgPSAoKSA9PiB0aGlzLmFwaUNvbnN0YW50cy5BUElfVVJMLnJlcGxhY2UoL1xcLyQvLCAnJyk7IC8vIHJlbW92ZSBsYXN0IHNsYXNoXHRcblxuXHQvKipcblx0ICogVVJMIGRlbCBzaXRpbyBmcm9udGVuZCAtIENvbXBhdGlibGUgY29uIEFuZ3VsYXIgU1NSXG5cdCAqL1xuXHRwdWJsaWMgZ2V0IEZST05URU5EX1VSTCgpOiBzdHJpbmcge1xuXHRcdC8vIFZlcmlmaWNhciBzaSBlc3RhbW9zIGVuIGVsIG5hdmVnYWRvclxuXHRcdGlmIChpc1BsYXRmb3JtQnJvd3Nlcih0aGlzLnBsYXRmb3JtSWQpKSB7XG5cdFx0XHQvLyBQcmltZXJvIGludGVudGEgbGVlciBkZSB3aW5kb3cuX19lbnYgKGNvbmZpZ3VyYWRvIHBvciBEb2NrZXIvQ0kpXG5cdFx0XHRjb25zdCB3aW5kb3dFbnYgPSAodGhpcy53aW5kb3cgYXMgYW55KT8uX19lbnY7XG5cdFx0XHRpZiAod2luZG93RW52Py5mcm9udGVuZFVybCkge1xuXHRcdFx0XHQvLyBMb2cgcGFyYSBkZWJ1Z2dpbmcgZW4gZGVzYXJyb2xsb1xuXHRcdFx0XHRpZiAoIXdpbmRvd0Vudi5mcm9udGVuZFVybC5zdGFydHNXaXRoKCdodHRwJykpIHtcblx0XHRcdFx0XHRjb25zb2xlLndhcm4oJ1tGUk9OVEVORF9VUkxdIEludmFsaWQgZnJvbnRlbmRVcmwgZm9ybWF0OicsIHdpbmRvd0Vudi5mcm9udGVuZFVybCk7XG5cdFx0XHRcdH1cblx0XHRcdFx0cmV0dXJuIHdpbmRvd0Vudi5mcm9udGVuZFVybDtcblx0XHRcdH1cblx0XHRcdFxuXHRcdFx0Ly8gU2kgbm8gaGF5IGNvbmZpZ3VyYWNpw7NuIGVzcGVjw61maWNhLCBjb25zdHJ1aXIgZGVzZGUgd2luZG93LmxvY2F0aW9uXG5cdFx0XHRpZiAodGhpcy53aW5kb3c/LmxvY2F0aW9uKSB7XG5cdFx0XHRcdGNvbnN0IHVybCA9IGAke3RoaXMud2luZG93LmxvY2F0aW9uLnByb3RvY29sfS8vJHt0aGlzLndpbmRvdy5sb2NhdGlvbi5ob3N0fWA7XG5cdFx0XHRcdC8vIFZlcmlmaWNhciBxdWUgbm8gc2VhIGxvY2FsaG9zdCBvIDEyNy4wLjAuMSBlbiBwcm9kdWNjacOzblxuXHRcdFx0XHRpZiAodXJsLmluY2x1ZGVzKCcxMjcuMC4wLjEnKSB8fCB1cmwuaW5jbHVkZXMoJ2xvY2FsaG9zdCcpKSB7XG5cdFx0XHRcdFx0Y29uc29sZS53YXJuKCdbRlJPTlRFTkRfVVJMXSBVc2luZyBsb2NhbGhvc3QgVVJMIGluIHByb2R1Y3Rpb24sIGNvbnNpZGVyIHNldHRpbmcgd2luZG93Ll9fZW52LmZyb250ZW5kVXJsJyk7XG5cdFx0XHRcdH1cblx0XHRcdFx0cmV0dXJuIHVybDtcblx0XHRcdH1cblx0XHR9XG5cdFx0XG5cdFx0Ly8gUGFyYSBTU1IsIGludGVudGFyIGNvbnN0cnVpciBkZXNkZSBlbCBkb2N1bWVudCBzaSBlc3TDoSBkaXNwb25pYmxlXG5cdFx0aWYgKHRoaXMuZG9jdW1lbnQ/LmxvY2F0aW9uKSB7XG5cdFx0XHRyZXR1cm4gYCR7dGhpcy5kb2N1bWVudC5sb2NhdGlvbi5wcm90b2NvbH0vLyR7dGhpcy5kb2N1bWVudC5sb2NhdGlvbi5ob3N0fWA7XG5cdFx0fVxuXHRcdFxuXHRcdC8vIEludGVudGFyIG9idGVuZXIgZGVzZGUgZW52aXJvbm1lbnRcblx0XHRpZiAodGhpcy5lbnZpcm9ubWVudC5mcm9udGVuZFVybCkge1xuXHRcdFx0cmV0dXJuIHRoaXMuZW52aXJvbm1lbnQuZnJvbnRlbmRVcmw7XG5cdFx0fVxuXHRcdFxuXHRcdC8vIMOabHRpbW8gZmFsbGJhY2sgLSB1c2FyIGxhIFVSTCBkZWwgQVBJIHNpIGVzdMOhIGNvbmZpZ3VyYWRhIHkgZXMgYWJzb2x1dGFcblx0XHRjb25zdCBhcGlVcmwgPSB0aGlzLmFwaUNvbnN0YW50cy5BUElfVVJMO1xuXHRcdGlmIChhcGlVcmwgJiYgKGFwaVVybC5zdGFydHNXaXRoKCdodHRwOi8vJykgfHwgYXBpVXJsLnN0YXJ0c1dpdGgoJ2h0dHBzOi8vJykpKSB7XG5cdFx0XHR0cnkge1xuXHRcdFx0XHRjb25zdCB1cmwgPSBuZXcgVVJMKGFwaVVybCk7XG5cdFx0XHRcdHJldHVybiBgJHt1cmwucHJvdG9jb2x9Ly8ke3VybC5ob3N0fWA7XG5cdFx0XHR9IGNhdGNoIChlKSB7XG5cdFx0XHRcdGNvbnNvbGUud2FybignW0ZST05URU5EX1VSTF0gQ291bGQgbm90IHBhcnNlIEFQSSBVUkwgYXMgZmFsbGJhY2s6JywgYXBpVXJsKTtcblx0XHRcdH1cblx0XHR9XG5cdFx0XG5cdFx0Ly8gRmFsbGJhY2sgZmluYWwgLSByZXRvcm5hciBVUkwgdmFjw61hXG5cdFx0Y29uc29sZS53YXJuKCdbRlJPTlRFTkRfVVJMXSBObyB2YWxpZCBmcm9udGVuZCBVUkwgZm91bmQsIHRoaXMgbWF5IGNhdXNlIGlzc3VlcyB3aXRoIG1ldGEgdGFncycpO1xuXHRcdHJldHVybiAnJztcblx0fVxuXG5cdC8qKlxuXHQgKiBSZXRvcm5hIGxhIFVSTCBjb21wbGV0YSBkZWwgZnJvbnRlbmQgY29uIHVuYSBydXRhIG9wY2lvbmFsXG5cdCAqIEBwYXJhbSBwYXRoIC0gUnV0YSBvcGNpb25hbCBwYXJhIGFncmVnYXIgYSBsYSBVUkwgYmFzZVxuXHQgKiBAcmV0dXJucyB7c3RyaW5nfSBVUkwgY29tcGxldGEgZGVsIGZyb250ZW5kXG5cdCAqL1xuXHRwdWJsaWMgZ2V0RnJvbnRlbmRVcmwgPSAocGF0aD86IHN0cmluZyk6IHN0cmluZyA9PiB7XG5cdFx0Y29uc3QgYmFzZVVybCA9IHRoaXMuRlJPTlRFTkRfVVJMO1xuXHRcdGlmICghcGF0aCkge1xuXHRcdFx0cmV0dXJuIGJhc2VVcmw7XG5cdFx0fVxuXHRcdFxuXHRcdC8vIEFzZWd1cmFyIHF1ZSBsYSBydXRhIGNvbWllbmNlIGNvbiAnLycgeSBubyB0ZW5nYSBkb2JsZSBzbGFzaFxuXHRcdGNvbnN0IGNsZWFuUGF0aCA9IHBhdGguc3RhcnRzV2l0aCgnLycpID8gcGF0aCA6IGAvJHtwYXRofWA7XG5cdFx0Y29uc3QgY2xlYW5CYXNlVXJsID0gYmFzZVVybC5lbmRzV2l0aCgnLycpID8gYmFzZVVybC5zbGljZSgwLCAtMSkgOiBiYXNlVXJsO1xuXHRcdFxuXHRcdHJldHVybiBgJHtjbGVhbkJhc2VVcmx9JHtjbGVhblBhdGh9YDtcblx0fVxuXG5cdC8qKlxuXHQgKiBSZXRvcm5hIGxhIFVSTCBhYnNvbHV0YSBkZSB1bmEgaW1hZ2VuIHBhcmEgbWV0YSB0YWdzIChjb21wYXRpYmxlIGNvbiBTU1IpXG5cdCAqIEBwYXJhbSBwb3N0TWVkaWEgLSBSdXRhIGRlIGxhIGltYWdlblxuXHQgKiBAcmV0dXJucyB7c3RyaW5nfSBVUkwgYWJzb2x1dGEgZGUgbGEgaW1hZ2VuXG5cdCAqL1xuXHRwdWJsaWMgZ2V0QWJzb2x1dGVJbWFnZVVybCA9IChwb3N0TWVkaWE/OiBzdHJpbmcpOiBzdHJpbmcgPT4ge1xuXHRcdC8vIFNpIGxhIFVSTCB5YSBlcyBhYnNvbHV0YSwgZGV2b2x2ZXJsYSB0YWwgY29tbyBlc3TDoVxuXHRcdGlmIChwb3N0TWVkaWEgJiYgKHBvc3RNZWRpYS5zdGFydHNXaXRoKCdodHRwOi8vJykgfHwgcG9zdE1lZGlhLnN0YXJ0c1dpdGgoJ2h0dHBzOi8vJykpKSB7XG5cdFx0XHRyZXR1cm4gcG9zdE1lZGlhO1xuXHRcdH1cblxuXHRcdC8vIENvbnN0cnVpciBsYSBVUkwgZGUgbGEgaW1hZ2VuIHVzYW5kbyBsYSBVUkwgZGVsIEFQSVxuXHRcdGNvbnN0IGltYWdlVXJsID0gdGhpcy5tZWRpYUltYWdlVXJsKHBvc3RNZWRpYSk7XG5cdFx0XG5cdFx0Ly8gU2kgbGEgVVJMIGRlIGxhIGltYWdlbiB5YSBlcyBhYnNvbHV0YSwgZGV2b2x2ZXJsYVxuXHRcdGlmIChpbWFnZVVybC5zdGFydHNXaXRoKCdodHRwOi8vJykgfHwgaW1hZ2VVcmwuc3RhcnRzV2l0aCgnaHR0cHM6Ly8nKSkge1xuXHRcdFx0cmV0dXJuIGltYWdlVXJsO1xuXHRcdH1cblx0XHRcblx0XHQvLyBTaSBlcyB1bmEgVVJMIHJlbGF0aXZhLCBjb252ZXJ0aXJsYSBhIGFic29sdXRhIHVzYW5kbyBsYSBVUkwgYmFzZSBkZWwgQVBJXG5cdFx0Y29uc3QgYXBpQmFzZVVybCA9IHRoaXMuYXBpQ29uc3RhbnRzLkFQSV9VUkw7XG5cdFx0aWYgKGFwaUJhc2VVcmwuc3RhcnRzV2l0aCgnaHR0cDovLycpIHx8IGFwaUJhc2VVcmwuc3RhcnRzV2l0aCgnaHR0cHM6Ly8nKSkge1xuXHRcdFx0Ly8gQVBJX1VSTCB5YSBlcyBhYnNvbHV0YVxuXHRcdFx0cmV0dXJuIGltYWdlVXJsO1xuXHRcdH1cblx0XHRcblx0XHQvLyBTaSBBUElfVVJMIGVzIHJlbGF0aXZhLCB1c2FyIGxhIFVSTCBkZWwgZnJvbnRlbmQgY29tbyBiYXNlXG5cdFx0Y29uc3QgZnJvbnRlbmRVcmwgPSB0aGlzLkZST05URU5EX1VSTDtcblx0XHRpZiAoIWZyb250ZW5kVXJsKSB7XG5cdFx0XHRyZXR1cm4gaW1hZ2VVcmw7IC8vIEZhbGxiYWNrIHNpIG5vIHBvZGVtb3MgZGV0ZXJtaW5hciBsYSBVUkwgZGVsIGZyb250ZW5kXG5cdFx0fVxuXHRcdFxuXHRcdC8vIENvbnN0cnVpciBVUkwgYWJzb2x1dGFcblx0XHRjb25zdCBjbGVhbkFwaVVybCA9IGFwaUJhc2VVcmwuc3RhcnRzV2l0aCgnLycpID8gYXBpQmFzZVVybC5zdWJzdHJpbmcoMSkgOiBhcGlCYXNlVXJsO1xuXHRcdGNvbnN0IGNsZWFuRnJvbnRlbmRVcmwgPSBmcm9udGVuZFVybC5lbmRzV2l0aCgnLycpID8gZnJvbnRlbmRVcmwuc2xpY2UoMCwgLTEpIDogZnJvbnRlbmRVcmw7XG5cdFx0Y29uc3QgY2xlYW5JbWFnZVVybCA9IGltYWdlVXJsLnN0YXJ0c1dpdGgoJy8nKSA/IGltYWdlVXJsLnN1YnN0cmluZygxKSA6IGltYWdlVXJsO1xuXHRcdFxuXHRcdHJldHVybiBgJHtjbGVhbkZyb250ZW5kVXJsfS8ke2NsZWFuQXBpVXJsfSR7Y2xlYW5JbWFnZVVybH1gO1xuXHR9XG5cblx0LyoqXG5cdCAqIFJldG9ybmEgbGEgdXJsIGRlIGxhcyBpbWFnZW5lcyBkZSBsb3MgYmFubmVyc1xuXHQgKiBAcmV0dXJucyBcblx0ICovXG5cdHB1YmxpYyBtZWRpYUJhbm5lclVybCA9ICgpID0+IHRoaXMuQVNTRVRTX1VSTCArICh0aGlzLkFTU0VUU19VUkwgPT0gdGhpcy5hcGlDb25zdGFudHMuQVBJX1VSTCA/ICdtZWRpYS8nIDogJycpICsgXCJiYW5uZXItaW1hZ2UvXCI7XG5cdFxuXHRtZWRpYVN0b3JlVXJsID0gKCkgPT4gdGhpcy5BU1NFVFNfVVJMICsgKHRoaXMuQVNTRVRTX1VSTCA9PSB0aGlzLmFwaUNvbnN0YW50cy5BUElfVVJMID8gJ21lZGlhLycgOiAnJykgKyBcInN0b3JlLWltYWdlL1wiO1xuXHRcblx0LyoqXG5cdCAqIFJldG9ybmEgYHRydWVgIHNpIGxhIHZpc3RhIGVzIG1vYmlsZSwgYGZhbHNlYCBjYXNvIGNvbnRyYXJpby5cblx0ICogQHJldHVybnMge2Jvb2xlYW59XG5cdCAqL1xuXHRwdWJsaWMgbW9iaWxlU2NyZWVuID0gKCk6IGJvb2xlYW4gPT4gdGhpcy53aW5kb3cgJiYgdGhpcy53aW5kb3c/LmlubmVyV2lkdGggPCA3NTAgfHwgZmFsc2U7XG5cdC8qKlxuXHQgKiBDb250aWVuZSBsb3MgdmFsb3JlcyBwYXJhIGxhIG1vbmVkYSBhY3R1YWxcblx0ICovXG5cdHB1YmxpYyBjdXJyZW5jeTogQ3VycmVuY3lDb25maWcgPSB7XG5cdFx0Y29kZTogJ0FSRycsXG5cdFx0c3ltYm9sOiAnJCcsXG5cdFx0cG9zaXRpb246ICdMZWZ0Jyxcblx0XHR3aXRob3V0RGVjaW1hbDogZmFsc2Vcblx0fTtcblxuXHQvKipcblx0ICogQXJyZWdsbyBkZSB2YWxvcmVzIHVzYWRvcyBwYXJhIGVsIHBpcGUgY3VycmVuY3lQcmljZVxuXHQgKi9cblx0cHVibGljIGN1cnJlbmN5VHlwZUNvbmZpZzogQ3VycmVuY3lDb25maWdbXSA9IFtcblx0XHR7XG5cdFx0XHRjb2RlOiAnRVVSJyxcblx0XHRcdHN5bWJvbDogJ+KCrCcsXG5cdFx0XHRwb3NpdGlvbjogJ1JpZ2h0Jyxcblx0XHRcdHdpdGhvdXREZWNpbWFsOiBmYWxzZVxuXG5cdFx0fSxcblx0XHR7XG5cdFx0XHRjb2RlOiAnQVJHJyxcblx0XHRcdHN5bWJvbDogJyQnLFxuXHRcdFx0cG9zaXRpb246ICdMZWZ0Jyxcblx0XHRcdHdpdGhvdXREZWNpbWFsOiBmYWxzZVxuXHRcdH0sXG5cdFx0e1xuXHRcdFx0Y29kZTogJ0FSUycsXG5cdFx0XHRzeW1ib2w6ICckJyxcblx0XHRcdHBvc2l0aW9uOiAnTGVmdCcsXG5cdFx0XHR3aXRob3V0RGVjaW1hbDogZmFsc2Vcblx0XHR9LFxuXHRcdHtcblx0XHRcdGNvZGU6ICdVU0QnLFxuXHRcdFx0c3ltYm9sOiAnJCcsXG5cdFx0XHRwb3NpdGlvbjogJ0xlZnQnLFxuXHRcdFx0d2l0aG91dERlY2ltYWw6IGZhbHNlXG5cdFx0fSxcblx0XHR7XG5cdFx0XHRjb2RlOiAnUFlHJyxcblx0XHRcdHN5bWJvbDogJ0dzLicsXG5cdFx0XHRwb3NpdGlvbjogJ0xlZnQnLFxuXHRcdFx0d2l0aG91dERlY2ltYWw6IGZhbHNlXG5cdFx0fSxcblx0XHR7XG5cdFx0XHRjb2RlOiAnUEVOJyxcblx0XHRcdHN5bWJvbDogJ1MvJyxcblx0XHRcdHBvc2l0aW9uOiAnTGVmdCcsXG5cdFx0XHR3aXRob3V0RGVjaW1hbDogZmFsc2Vcblx0XHR9LFxuXHRcdHtcblx0XHRcdGNvZGU6ICdTRUsnLFxuXHRcdFx0c3ltYm9sOiAnU0VLJyxcblx0XHRcdHBvc2l0aW9uOiAnUmlnaHQnLFxuXHRcdFx0d2l0aG91dERlY2ltYWw6IHRydWVcblx0XHR9LFxuXHRdXG5cdC8qKlxuXHQgKiBDYW1iaWEgbGEgY29uZmlndXJhY2nDs24gZGUgbGEgbW9uZWRhLlxuXHQgKiBAcGFyYW0gY3VycmVuY3lUeXBlQ29uZmlnIEFycmVnbG8gY29uIGxhcyBkaXN0aW50YXMgbW9uZWRhcy5cblx0ICovXG5cdHB1YmxpYyBzZXRDdXJyZW5jeVR5cGVDb25maWcoY3VycmVuY3lUeXBlQ29uZmlnOiBDdXJyZW5jeUNvbmZpZ1tdKSB7XG5cdFx0dGhpcy5jdXJyZW5jeVR5cGVDb25maWcgPSBjdXJyZW5jeVR5cGVDb25maWc7XG5cdH1cblxuXHQvKipcblx0ICogQHBhcmFtIGN1cnJlbmN5VHlwZUZpbmQgRGVmaW5pciBlbCBjb2RlIGRlbCB0aXBvIGRlIG1vbmVkYSBxdWUgc2UgcXVpZXJhIHV0aWxpemFyLlxuXHQgKiBTaSBlbCB0aXBvIGVzIENVU1RPTSBzZSB0b21hbiBsb3MgdmFsb3JlcyBkZWwgc2VndW5kbyBwYXJhbWV0cm8gZG9uZGUgc2UgcHVlZGUgZGVmaW5pciBsYSBzaW1ib2xvZ8OtYSB5IHBvc2VzacOzbiBxdWUgc2UgcXVpZXJhLlxuXHQgKiBAcGFyYW0gY3VzdG9tVHlwZSBGb3JtYXRvIGRlbCBwYXLDoW1ldHJvIGVqZW1wbG8geyBjb2RlOiAnQVJHJywgc3ltYm9sOiAnJCcsIHBvc2l0aW9uOiAnTCcgLCB3aXRob3V0RGVjaW1hbHM6IGZhbHNlIH0gLFxuXHQgKiB0b2RhcyBsYXMga2V5IHNvbiBvcGNpb25hbGVzIHkgcG9yIGRlZmVjdG8gc2UgdG9tYW4gbG9zIHZhbG9yZXMgZGVsIGVqZW1wbG8uXG5cdCAqIEByZXR1cm5zIHNlIHJldG9ybmEgbGEgY29uZmlndXJhY2nDs24gcXVlIHNlIHNldGVvIGEgbGEgcHJvcGllZGFkIGN1cnJlbmN5IGRlbCBzZXJ2aWNpby5cblx0ICovXG5cdHB1YmxpYyBzZXRDdXJyZW5jeShjdXJyZW5jeVR5cGVGaW5kOiBjdXJyZW5jeVR5cGUsIGN1c3RvbVR5cGU/OiBDdXJyZW5jeUNvbmZpZyk6IEN1cnJlbmN5Q29uZmlnIHtcblx0XHR0aGlzLmN1cnJlbmN5ID0gdGhpcy5jdXJyZW5jeVR5cGVDb25maWcuZmluZCgoY3Q6IEN1cnJlbmN5Q29uZmlnKSA9PiBjdC5jb2RlID09IGN1cnJlbmN5VHlwZUZpbmQudG9VcHBlckNhc2UoKSkgfHwgdGhpcy5jdXJyZW5jeVxuXHRcdGN1c3RvbVR5cGUgJiYgKHRoaXMuY3VycmVuY3kgPSB7IC4uLnRoaXMuY3VycmVuY3ksIC4uLmN1c3RvbVR5cGUgfSlcblx0XHRyZXR1cm4gdGhpcy5jdXJyZW5jeTtcblx0fTtcblxuXG5cdHB1YmxpYyBtb2RpZnlDaGFubmVsQ29uZmlnKGNoYW5uZWxDb25maWc6IGFueSkge1xuXHRcdGlmIChjaGFubmVsQ29uZmlnLmNoYW5uZWwgfHwgY2hhbm5lbENvbmZpZy5jb2RlKVxuXHRcdFx0dGhpcy5hcGlDb25zdGFudHMuc2V0Q2hhbm5lbChjaGFubmVsQ29uZmlnLmNoYW5uZWwgfHwgY2hhbm5lbENvbmZpZy5jb2RlKVxuXG5cdFx0aWYgKGNoYW5uZWxDb25maWcubG9jYWxlIHx8IGNoYW5uZWxDb25maWcubG9jYWxlcy5jb2RlKVxuXHRcdFx0dGhpcy5hcGlDb25zdGFudHMuc2V0TG9jYWxlKGNoYW5uZWxDb25maWcubG9jYWxlIHx8IGNoYW5uZWxDb25maWcubG9jYWxlcy5jb2RlKVxuXG5cdFx0aWYgKGNoYW5uZWxDb25maWcuY3VycmVuY3kgfHwgY2hhbm5lbENvbmZpZy5iYXNlQ3VycmVuY3kpXG5cdFx0XHR0aGlzLnNldEN1cnJlbmN5KGNoYW5uZWxDb25maWcuY3VycmVuY3kgfHwgY2hhbm5lbENvbmZpZy5iYXNlQ3VycmVuY3kpXG5cblx0XHRyZXR1cm4gY2hhbm5lbENvbmZpZztcblx0fVxuXG5cdC8qKlxuXHQqIEBkZXNjcmlwdGlvbiBzZSB1dGlsaXphIHBhcmEgY29uZmlndXJhciBxdWUgZmlsdHJvcyBkZWwgdGlwbyBgU29ydEZpbHRlcmAgc2UgcXVpZXJlIG1vc3RyYXIgZW4gbGEgdmlzdGEuXG5cdCogU2UgdXNhbiBsb3MgY29kaWdvIGRlIGxvcyBmaWx0cm9zIHBhcmEgaW5kaWNhciBjdWFsZXMgc2UgZGViZW4gbW9zdHJhci5cblx0Ki9cblx0cHJpdmF0ZSBzb3J0RmlsdGVyczogc3RyaW5nW10gPSBbJ3ByaWNlJywgJ29yZGVyLWFscGgnLCAncmVjZW50J11cblxuXHQvKipcblx0ICpcblx0ICogQHBhcmFtIGZpbHRlcnNDb2RlIGFycmVnbG8gZGUgc3RyaW5ncyBjb24gbG9zIGNvZGlnb3MgZGUgbG9zIGZpbHRyb3MuXG5cdCAqIFNpIHNlIGxlIHBhc2EgZWwgcGFyYW1ldHJvICoqYWxsKiogZXN0ZSBtb3N0cmFyYSB0b2Rvcy5cblx0ICogQGV4YW1wbGUgcHJpY2UgfCBvcmRlci1hbHBoIHwgcmVjZW50IHwgdXBkYXRlIHwgYWxsXG5cdCAqIEByZXR1cm5zXG5cdCAqL1xuXHRzZXRTb3J0RmlsdGVycyA9IChmaWx0ZXJzQ29kZTogc3RyaW5nW10gPSBbJ2FsbCddKSA9PiB0aGlzLnNvcnRGaWx0ZXJzID0gZmlsdGVyc0NvZGU7XG5cblx0Z2V0U29ydEZpbHRlcnMgPSAoKSA9PiB0aGlzLnNvcnRGaWx0ZXJzO1xuXG5cdC8vIEFCT1VUIFBST0RVQ1RTIFxuXHRwcml2YXRlIHByb2R1Y3RzV2l0aFVuaXF1ZVZhcmlhbnQ6IGJvb2xlYW4gPSBmYWxzZTtcblx0c2V0UHJvZHVjdFdpdGhVbmlxdWVWYXJpYW50KHZhbHVlOiBib29sZWFuKSB7IHRoaXMucHJvZHVjdHNXaXRoVW5pcXVlVmFyaWFudCA9IHZhbHVlOyB9XG5cdGdldFByb2R1Y3RXaXRoVW5pcXVlVmFyaWFudCgpIHsgcmV0dXJuIHRoaXMucHJvZHVjdHNXaXRoVW5pcXVlVmFyaWFudCB9XG5cblx0LyoqXG5cdCogQGRlc2NyaXB0aW9uIGVzdGEgdmFyaWFibGUgc2UgdXRpbGl6YSBwYXJhIGNvbmZpZ3VyYXIgbG9zIHBhcmFtZXRyb3MgY3VhbmRvIHNlIGRlc2VhIG1vc3RyYXJcblx0KiB2YXJpYW50ZXMgZWwgbGlzdGFkbyBkZSBwcm9kdWN0b3MuXG5cdCogQHBhcmFtIHtzdHJpbmd9dHlwZSB0aXBvIGRlIG9wdGlvbnNcblx0KiBAcGFyYW0ge3N0cmluZ31jb2RlIGNvZGlnbyBkZSBvcHRpb25zXG5cdCogQHBhcmFtIHtib29sZWFufWRlZmF1bHRGaXJzdE9wdGlvbiBgdHJ1ZWAgdG9tYSBlbCBwcmltZXIgb3B0aW9uIGRlbCBwcm9kdWN0byBlbiBnZW5lcmFsXG5cdCogQHBhcmFtIHtib29sZWFufWNoZWNrSWZTdG9jayBgdHJ1ZWAgc2UgcmVhbGl6YSB1biBjaGVxdWVvIGRlIHNpIGxhIHZhcmlhbnRlIHRpZW5lIHN0b2NrIHBhcmEgbW9zdHJhcmxhXG5cdCogQGV4YW1wbGUgIGBgYGphdmFzY3JpcHRcblx0KiB7XG5cdCAgIHR5cGU6ICdjb2xvcicsXG5cdCAgIGNvZGU6ICdjb2xvcicsXG5cdCAgIGRlZmF1bHRGaXJzdE9wdGlvbjogZmFsc2UgLFxuXHQgICBjaGVja0lmU3RvY2s6dHJ1ZVxuXHQgICB9IGBgYFxuXHQqL1xuXHRwcml2YXRlIHBhcmFtc1Byb2R1Y3RzV2l0aFVuaXF1ZVZhcmlhbnQ6IFBhcmFtc1Byb2R1Y3RzV2l0aFVuaXF1ZVZhcmlhbnQgPSB7XG5cdFx0dHlwZTogJ2NvbG9yJyxcblx0XHRjb2RlOiAnY29sb3InLFxuXHRcdGRlZmF1bHRGaXJzdE9wdGlvbjogZmFsc2UsXG5cdFx0Y2hlY2tJZlN0b2NrOiB0cnVlXG5cdH1cblxuXHRzZXRQYXJhbXNQcm9kdWN0c1dpdGhVbmlxdWVWYXJpYW50ID0gKHZhbHVlOiBQYXJhbXNQcm9kdWN0c1dpdGhVbmlxdWVWYXJpYW50KSA9PiB7XG5cdFx0dGhpcy5wYXJhbXNQcm9kdWN0c1dpdGhVbmlxdWVWYXJpYW50ID0ge1xuXHRcdFx0Li4udGhpcy5wYXJhbXNQcm9kdWN0c1dpdGhVbmlxdWVWYXJpYW50LFxuXHRcdFx0Li4udmFsdWVcblx0XHR9XG5cdH1cblxuXHRnZXRQYXJhbXNQcm9kdWN0c1dpdGhVbmlxdWVWYXJpYW50ID0gKCkgPT4gdGhpcy5wYXJhbXNQcm9kdWN0c1dpdGhVbmlxdWVWYXJpYW50XG5cdFxuXHRwdWJsaWMgZ2V0Q2hhbm5lbCgpe1xuXHRcdHJldHVybiB0aGlzLmFwaUNvbnN0YW50cy5DSEFOTkVMO1xuXHR9XG5cblx0cHVibGljIGZvcm1fc2VuZGVyOiBib29sZWFuID0gZmFsc2U7XG59XG4iXX0=
330
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29yZS5jb25zdGFudHMuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25nLWVhc3ljb21tZXJjZS12MTgvc3JjL2xpYi9jb25zdGFudHMvY29yZS5jb25zdGFudHMuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxXQUFXLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDaEUsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDOUQsT0FBTyxFQUFFLGlCQUFpQixFQUFFLFFBQVEsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBRTlELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGNBQWMsQ0FBQzs7QUFDakQ7Ozs7R0FJRztBQUlILE1BQU0sT0FBTyxvQkFBb0I7SUFFekIsV0FBVyxHQUFXLEVBQUUsQ0FBQztJQUNoQzs7T0FFRztJQUNLLFlBQVksR0FBRyxNQUFNLENBQUMsbUJBQW1CLENBQUMsQ0FBQTtJQUNsRDs7T0FFRztJQUNLLFVBQVUsR0FBUSxNQUFNLENBQUMsV0FBVyxDQUFDLENBQUE7SUFDN0M7O09BRUc7SUFDSyxRQUFRLEdBQWEsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFBO0lBQzdDOztPQUVHO0lBQ0ssV0FBVyxHQUFnQixNQUFNLENBQUMsaUJBQWlCLENBQUMsQ0FBQTtJQUM1RDs7T0FFRztJQUNLLE1BQU0sQ0FBUztJQUV2Qjs7O09BR0c7SUFDSSxnQkFBZ0IsR0FBa0IsSUFBSSxDQUFDO0lBRTlDO1FBQ0MsSUFBSSxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQztZQUN4QyxJQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQTtRQUNyQixDQUFDO0lBQ0YsQ0FBQztJQUNEOztPQUVHO0lBQ0ksa0JBQWtCLEdBQVcsYUFBYSxDQUFDO0lBQ2xEOztPQUVH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S0FBSyxDQUFDLENBQUMsQ0FBQztJQUN2RiwyQkFBMkIsS0FBSyxPQUFPLElBQUksQ0FBQyx5QkFBeUIsQ0FBQSxDQUFDLENBQUM7SUFFdkU7Ozs7Ozs7Ozs7Ozs7O01BY0U7SUFDTSwrQkFBK0IsR0FBb0M7UUFDMUUsSUFBSSxFQUFFLE9BQU87UUFDYixJQUFJLEVBQUUsT0FBTztRQUNiLGtCQUFrQixFQUFFLEtBQUs7UUFDekIsWUFBWSxFQUFFLElBQUk7S0FDbEIsQ0FBQTtJQUVELGtDQUFrQyxHQUFHLENBQUMsS0FBc0MsRUFBRSxFQUFFO1FBQy9FLElBQUksQ0FBQywrQkFBK0IsR0FBRztZQUN0QyxHQUFHLElBQUksQ0FBQywrQkFBK0I7WUFDdkMsR0FBRyxLQUFLO1NBQ1IsQ0FBQTtJQUNGLENBQUMsQ0FBQTtJQUVELGtDQUFrQyxHQUFHLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQywrQkFBK0IsQ0FBQTtJQUV4RSxVQUFVO1FBQ2hCLE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUM7SUFDbEMsQ0FBQztJQUVNLFdBQVcsR0FBWSxLQUFLLENBQUM7SUFFcEMsbUJBQW1CLENBQUMsSUFBbUI7UUFDdEMsSUFBSSxDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQztJQUM5QixDQUFDO0lBRUQsbUJBQW1CO1FBQ2xCLE9BQU8sSUFBSSxDQUFDLGdCQUFnQixDQUFDO0lBQzlCLENBQUM7d0dBNVZXLG9CQUFvQjs0R0FBcEIsb0JBQW9CLGNBRnBCLE1BQU07OzRGQUVOLG9CQUFvQjtrQkFIaEMsVUFBVTttQkFBQztvQkFDWCxVQUFVLEVBQUUsTUFBTTtpQkFDbEIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBpbmplY3QsIEluamVjdGFibGUsIFBMQVRGT1JNX0lEIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBBcGlDb25zdGFudHNTZXJ2aWNlIH0gZnJvbSAnLi9hcGkuY29uc3RhbnRzLnNlcnZpY2UnO1xuaW1wb3J0IHsgaXNQbGF0Zm9ybUJyb3dzZXIsIERPQ1VNRU5UIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IEN1cnJlbmN5Q29uZmlnLCBjdXJyZW5jeVR5cGUsIFBhcmFtc1Byb2R1Y3RzV2l0aFVuaXF1ZVZhcmlhbnQsIEVudmlyb25tZW50IH0gZnJvbSAnLi4vaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBFTlZJUk9OTUVOVF9UT0tFTiB9IGZyb20gJy4uL3Byb3ZpZGVycyc7XG4vKipcbiAqIFNlcnZpY2lvIHF1ZSBwcm92ZWUgbGFzIGNvbnN0YW50ZXMgbmVjZXNhcmlhcyBxdWUgc2UgdXRpbGl6YW4gcG9yIHRvZGEgbGEgYXBsaWNhY2nDs24uXG4gKiBAZXhwb3J0XG4gKiBAY2xhc3MgQ29yZUNvbnN0YW50c1NlcnZpY2VcbiAqL1xuQEluamVjdGFibGUoe1xuXHRwcm92aWRlZEluOiAncm9vdCdcbn0pXG5leHBvcnQgY2xhc3MgQ29yZUNvbnN0YW50c1NlcnZpY2Uge1xuXG5cdHB1YmxpYyBzZWFyY2hWYWx1ZTogc3RyaW5nID0gJyc7XG5cdC8qKlxuXHQgKiBTZXJ2aWNpbyBxdWUgY29udGllbmUgbGFzIGNvbnN0YW50ZXMgdXNhZGFzIHBhcmEgbGEgQVBJXG5cdCAqL1xuXHRwcml2YXRlIGFwaUNvbnN0YW50cyA9IGluamVjdChBcGlDb25zdGFudHNTZXJ2aWNlKVxuXHQvKipcblx0ICogUHJvdmVlIGVsIElEIGRlIGxhIHBsYXRhZm9ybWEgZW4gZG9uZGUgc2UgZXN0YSBlamVjdXRhbmRvIGVsIGNvZGlnbywgZXN0byBzaXJ2ZSBwYXJhIHBvZGVyIGRpZmVyZW5jaWFyIHNpIGVzIGRlIHVuIHNlcnZpZG9yIG8gdW4gbmF2ZWdhZG9yIHdlYi5cblx0ICovXG5cdHByaXZhdGUgcGxhdGZvcm1JZDogYW55ID0gaW5qZWN0KFBMQVRGT1JNX0lEKVxuXHQvKipcblx0ICogRG9jdW1lbnQgdG9rZW4gcGFyYSBhY2Nlc28gU1NSLWNvbXBhdGlibGUgYWwgZG9jdW1lbnRvXG5cdCAqL1xuXHRwcml2YXRlIGRvY3VtZW50OiBEb2N1bWVudCA9IGluamVjdChET0NVTUVOVClcblx0LyoqXG5cdCAqIENvbnRpZW5lIGxvcyBkYXRvcyBwcm92aXN0byBwb3IgZWwgZnJvbnRlbmQgZW4gZWwgYXJjaGl2byBlbnZpcm9ubWVudC50c1xuXHQgKi9cblx0cHJpdmF0ZSBlbnZpcm9ubWVudDogRW52aXJvbm1lbnQgPSBpbmplY3QoRU5WSVJPTk1FTlRfVE9LRU4pXG5cdC8qKlxuXHQgKiBHdWFyZGEgbGEgdmFyaWFibGUgd2luZG93IGRlbCB3ZWIgYnJvd3Nlci5cblx0ICovXG5cdHByaXZhdGUgd2luZG93PzpXaW5kb3c7XG5cblx0LyoqXG5cdCAqIFRpcG8gZGUgcnV0YSBhY3R1YWwgKGVqOiAnY2F0ZWdvcmllcycsICdhdHRyaWJ1dGVzJywgZXRjKS5cblx0ICogTG8gdXNhbW9zIHBhcmEgcXVlIFBhZ2luYXRpb25TZXJ2aWNlIHNlcGEgcXXDqSBmaWx0cm8gZXNwZXJhci5cblx0ICovXG5cdHB1YmxpYyBjdXJyZW50Um91dGVUeXBlOiBzdHJpbmcgfCBudWxsID0gbnVsbDtcblxuXHRjb25zdHJ1Y3RvcigpIHtcblx0XHRpZiAoaXNQbGF0Zm9ybUJyb3dzZXIodGhpcy5wbGF0Zm9ybUlkKSkge1xuXHRcdFx0dGhpcy53aW5kb3cgPSB3aW5kb3dcblx0XHR9XG5cdH1cblx0LyoqXG5cdCAqIFBhdGggdXNhZG8gZW4gbGFzIGNvbGVjY2lvbmVzIGRlIHByb2R1Y3Rvcy5cblx0ICovXG5cdHB1YmxpYyBQUk9EVUNUX0xJU1RfUk9VVEU6IHN0cmluZyA9ICdjb2xsZWN0aW9uLyc7XG5cdC8qKlxuXHQgKiBQYXRoIHVzYWRvIHBhcmEgYWNjZWRlciBhIGxhcyBzZWNjaW9uZXMuXG5cdCAqL1xuXHRwdWJsaWMgU0VDVElPTlNfUk9VVEU6IHN0cmluZyA9ICdzZWN0aW9ucy8nO1xuXHQvKipcblx0ICogUGF0aCBxdWUgYWxvamEgbGEgY2FycGV0YSBkZSBsb3MgYXNzZXRzLlxuXHQgKi9cblx0cHVibGljIHJlYWRvbmx5IEFTU0VUU19VUkw6IHN0cmluZyA9IHRoaXMuYXBpQ29uc3RhbnRzLkFQSV9VUkw7XG5cdC8qKlxuXHQgKiBSZXRvcm5hIGxhIHVybCBkb25kZSBzZSBndWFyZGEgbGFzIGltYWdlbmVzLlxuXHQgKiBAcGFyYW0gcG9zdE1lZGlhIFxuXHQgKiBAcmV0dXJucyBcblx0ICovXG5cdHB1YmxpYyBtZWRpYVVybCA9IChwb3N0TWVkaWE/OiBzdHJpbmcpID0+IHRoaXMuQVNTRVRTX1VSTCArICh0aGlzLkFTU0VUU19VUkwgPT0gdGhpcy5hcGlDb25zdGFudHMuQVBJX1VSTCA/ICdtZWRpYS8nIDogJycpICsgKHBvc3RNZWRpYSA/IHBvc3RNZWRpYSA6IFwiaW1hZ2UvXCIpO1xuXHQvKipcblx0ICogUmV0b3JuYSBsYSB1cmwgZG9uZGUgc2UgZ3VhcmRhIGxhcyBpbWFnZW5lcy5cblx0ICogQHBhcmFtIHBvc3RNZWRpYSBcblx0ICogQHJldHVybnMgXG5cdCAqL1xuXHRwdWJsaWMgbWVkaWFJbWFnZVVybCA9IChwb3N0TWVkaWE/OiBzdHJpbmcpID0+IHRoaXMuQVNTRVRTX1VSTCArICh0aGlzLkFTU0VUU19VUkwgPT0gdGhpcy5hcGlDb25zdGFudHMuQVBJX1VSTCA/ICdtZWRpYS9pbWFnZS8nIDogJycpICsgKHBvc3RNZWRpYSA/IHBvc3RNZWRpYSA6IFwiaW1hZ2UvXCIpO1xuXHQvKipcblx0ICogUmV0b3JuYSBsYSB1cmwgZGVsIHNpdGlvLlxuXHQgKiBAcGFyYW0gcG9zdE1lZGlhIFxuXHQgKiBAcmV0dXJucyBcblx0ICovXG5cdHB1YmxpYyB1cmwgPSAoKSA9PiB0aGlzLmFwaUNvbnN0YW50cy5BUElfVVJMLnJlcGxhY2UoL1xcLyQvLCAnJyk7IC8vIHJlbW92ZSBsYXN0IHNsYXNoXHRcblxuXHQvKipcblx0ICogVVJMIGRlbCBzaXRpbyBmcm9udGVuZCAtIENvbXBhdGlibGUgY29uIEFuZ3VsYXIgU1NSXG5cdCAqL1xuXHRwdWJsaWMgZ2V0IEZST05URU5EX1VSTCgpOiBzdHJpbmcge1xuXHRcdC8vIFZlcmlmaWNhciBzaSBlc3RhbW9zIGVuIGVsIG5hdmVnYWRvclxuXHRcdGlmIChpc1BsYXRmb3JtQnJvd3Nlcih0aGlzLnBsYXRmb3JtSWQpKSB7XG5cdFx0XHQvLyBQcmltZXJvIGludGVudGEgbGVlciBkZSB3aW5kb3cuX19lbnYgKGNvbmZpZ3VyYWRvIHBvciBEb2NrZXIvQ0kpXG5cdFx0XHRjb25zdCB3aW5kb3dFbnYgPSAodGhpcy53aW5kb3cgYXMgYW55KT8uX19lbnY7XG5cdFx0XHRpZiAod2luZG93RW52Py5mcm9udGVuZFVybCkge1xuXHRcdFx0XHQvLyBMb2cgcGFyYSBkZWJ1Z2dpbmcgZW4gZGVzYXJyb2xsb1xuXHRcdFx0XHRpZiAoIXdpbmRvd0Vudi5mcm9udGVuZFVybC5zdGFydHNXaXRoKCdodHRwJykpIHtcblx0XHRcdFx0XHRjb25zb2xlLndhcm4oJ1tGUk9OVEVORF9VUkxdIEludmFsaWQgZnJvbnRlbmRVcmwgZm9ybWF0OicsIHdpbmRvd0Vudi5mcm9udGVuZFVybCk7XG5cdFx0XHRcdH1cblx0XHRcdFx0cmV0dXJuIHdpbmRvd0Vudi5mcm9udGVuZFVybDtcblx0XHRcdH1cblx0XHRcdFxuXHRcdFx0Ly8gU2kgbm8gaGF5IGNvbmZpZ3VyYWNpw7NuIGVzcGVjw61maWNhLCBjb25zdHJ1aXIgZGVzZGUgd2luZG93LmxvY2F0aW9uXG5cdFx0XHRpZiAodGhpcy53aW5kb3c/LmxvY2F0aW9uKSB7XG5cdFx0XHRcdGNvbnN0IHVybCA9IGAke3RoaXMud2luZG93LmxvY2F0aW9uLnByb3RvY29sfS8vJHt0aGlzLndpbmRvdy5sb2NhdGlvbi5ob3N0fWA7XG5cdFx0XHRcdC8vIFZlcmlmaWNhciBxdWUgbm8gc2VhIGxvY2FsaG9zdCBvIDEyNy4wLjAuMSBlbiBwcm9kdWNjacOzblxuXHRcdFx0XHRpZiAodXJsLmluY2x1ZGVzKCcxMjcuMC4wLjEnKSB8fCB1cmwuaW5jbHVkZXMoJ2xvY2FsaG9zdCcpKSB7XG5cdFx0XHRcdFx0Y29uc29sZS53YXJuKCdbRlJPTlRFTkRfVVJMXSBVc2luZyBsb2NhbGhvc3QgVVJMIGluIHByb2R1Y3Rpb24sIGNvbnNpZGVyIHNldHRpbmcgd2luZG93Ll9fZW52LmZyb250ZW5kVXJsJyk7XG5cdFx0XHRcdH1cblx0XHRcdFx0cmV0dXJuIHVybDtcblx0XHRcdH1cblx0XHR9XG5cdFx0XG5cdFx0Ly8gUGFyYSBTU1IsIGludGVudGFyIGNvbnN0cnVpciBkZXNkZSBlbCBkb2N1bWVudCBzaSBlc3TDoSBkaXNwb25pYmxlXG5cdFx0aWYgKHRoaXMuZG9jdW1lbnQ/LmxvY2F0aW9uKSB7XG5cdFx0XHRyZXR1cm4gYCR7dGhpcy5kb2N1bWVudC5sb2NhdGlvbi5wcm90b2NvbH0vLyR7dGhpcy5kb2N1bWVudC5sb2NhdGlvbi5ob3N0fWA7XG5cdFx0fVxuXHRcdFxuXHRcdC8vIEludGVudGFyIG9idGVuZXIgZGVzZGUgZW52aXJvbm1lbnRcblx0XHRpZiAodGhpcy5lbnZpcm9ubWVudC5mcm9udGVuZFVybCkge1xuXHRcdFx0cmV0dXJuIHRoaXMuZW52aXJvbm1lbnQuZnJvbnRlbmRVcmw7XG5cdFx0fVxuXHRcdFxuXHRcdC8vIMOabHRpbW8gZmFsbGJhY2sgLSB1c2FyIGxhIFVSTCBkZWwgQVBJIHNpIGVzdMOhIGNvbmZpZ3VyYWRhIHkgZXMgYWJzb2x1dGFcblx0XHRjb25zdCBhcGlVcmwgPSB0aGlzLmFwaUNvbnN0YW50cy5BUElfVVJMO1xuXHRcdGlmIChhcGlVcmwgJiYgKGFwaVVybC5zdGFydHNXaXRoKCdodHRwOi8vJykgfHwgYXBpVXJsLnN0YXJ0c1dpdGgoJ2h0dHBzOi8vJykpKSB7XG5cdFx0XHR0cnkge1xuXHRcdFx0XHRjb25zdCB1cmwgPSBuZXcgVVJMKGFwaVVybCk7XG5cdFx0XHRcdHJldHVybiBgJHt1cmwucHJvdG9jb2x9Ly8ke3VybC5ob3N0fWA7XG5cdFx0XHR9IGNhdGNoIChlKSB7XG5cdFx0XHRcdGNvbnNvbGUud2FybignW0ZST05URU5EX1VSTF0gQ291bGQgbm90IHBhcnNlIEFQSSBVUkwgYXMgZmFsbGJhY2s6JywgYXBpVXJsKTtcblx0XHRcdH1cblx0XHR9XG5cdFx0XG5cdFx0Ly8gRmFsbGJhY2sgZmluYWwgLSByZXRvcm5hciBVUkwgdmFjw61hXG5cdFx0Y29uc29sZS53YXJuKCdbRlJPTlRFTkRfVVJMXSBObyB2YWxpZCBmcm9udGVuZCBVUkwgZm91bmQsIHRoaXMgbWF5IGNhdXNlIGlzc3VlcyB3aXRoIG1ldGEgdGFncycpO1xuXHRcdHJldHVybiAnJztcblx0fVxuXG5cdC8qKlxuXHQgKiBSZXRvcm5hIGxhIFVSTCBjb21wbGV0YSBkZWwgZnJvbnRlbmQgY29uIHVuYSBydXRhIG9wY2lvbmFsXG5cdCAqIEBwYXJhbSBwYXRoIC0gUnV0YSBvcGNpb25hbCBwYXJhIGFncmVnYXIgYSBsYSBVUkwgYmFzZVxuXHQgKiBAcmV0dXJucyB7c3RyaW5nfSBVUkwgY29tcGxldGEgZGVsIGZyb250ZW5kXG5cdCAqL1xuXHRwdWJsaWMgZ2V0RnJvbnRlbmRVcmwgPSAocGF0aD86IHN0cmluZyk6IHN0cmluZyA9PiB7XG5cdFx0Y29uc3QgYmFzZVVybCA9IHRoaXMuRlJPTlRFTkRfVVJMO1xuXHRcdGlmICghcGF0aCkge1xuXHRcdFx0cmV0dXJuIGJhc2VVcmw7XG5cdFx0fVxuXHRcdFxuXHRcdC8vIEFzZWd1cmFyIHF1ZSBsYSBydXRhIGNvbWllbmNlIGNvbiAnLycgeSBubyB0ZW5nYSBkb2JsZSBzbGFzaFxuXHRcdGNvbnN0IGNsZWFuUGF0aCA9IHBhdGguc3RhcnRzV2l0aCgnLycpID8gcGF0aCA6IGAvJHtwYXRofWA7XG5cdFx0Y29uc3QgY2xlYW5CYXNlVXJsID0gYmFzZVVybC5lbmRzV2l0aCgnLycpID8gYmFzZVVybC5zbGljZSgwLCAtMSkgOiBiYXNlVXJsO1xuXHRcdFxuXHRcdHJldHVybiBgJHtjbGVhbkJhc2VVcmx9JHtjbGVhblBhdGh9YDtcblx0fVxuXG5cdC8qKlxuXHQgKiBSZXRvcm5hIGxhIFVSTCBhYnNvbHV0YSBkZSB1bmEgaW1hZ2VuIHBhcmEgbWV0YSB0YWdzIChjb21wYXRpYmxlIGNvbiBTU1IpXG5cdCAqIEBwYXJhbSBwb3N0TWVkaWEgLSBSdXRhIGRlIGxhIGltYWdlblxuXHQgKiBAcmV0dXJucyB7c3RyaW5nfSBVUkwgYWJzb2x1dGEgZGUgbGEgaW1hZ2VuXG5cdCAqL1xuXHRwdWJsaWMgZ2V0QWJzb2x1dGVJbWFnZVVybCA9IChwb3N0TWVkaWE/OiBzdHJpbmcpOiBzdHJpbmcgPT4ge1xuXHRcdC8vIFNpIGxhIFVSTCB5YSBlcyBhYnNvbHV0YSwgZGV2b2x2ZXJsYSB0YWwgY29tbyBlc3TDoVxuXHRcdGlmIChwb3N0TWVkaWEgJiYgKHBvc3RNZWRpYS5zdGFydHNXaXRoKCdodHRwOi8vJykgfHwgcG9zdE1lZGlhLnN0YXJ0c1dpdGgoJ2h0dHBzOi8vJykpKSB7XG5cdFx0XHRyZXR1cm4gcG9zdE1lZGlhO1xuXHRcdH1cblxuXHRcdC8vIENvbnN0cnVpciBsYSBVUkwgZGUgbGEgaW1hZ2VuIHVzYW5kbyBsYSBVUkwgZGVsIEFQSVxuXHRcdGNvbnN0IGltYWdlVXJsID0gdGhpcy5tZWRpYUltYWdlVXJsKHBvc3RNZWRpYSk7XG5cdFx0XG5cdFx0Ly8gU2kgbGEgVVJMIGRlIGxhIGltYWdlbiB5YSBlcyBhYnNvbHV0YSwgZGV2b2x2ZXJsYVxuXHRcdGlmIChpbWFnZVVybC5zdGFydHNXaXRoKCdodHRwOi8vJykgfHwgaW1hZ2VVcmwuc3RhcnRzV2l0aCgnaHR0cHM6Ly8nKSkge1xuXHRcdFx0cmV0dXJuIGltYWdlVXJsO1xuXHRcdH1cblx0XHRcblx0XHQvLyBTaSBlcyB1bmEgVVJMIHJlbGF0aXZhLCBjb252ZXJ0aXJsYSBhIGFic29sdXRhIHVzYW5kbyBsYSBVUkwgYmFzZSBkZWwgQVBJXG5cdFx0Y29uc3QgYXBpQmFzZVVybCA9IHRoaXMuYXBpQ29uc3RhbnRzLkFQSV9VUkw7XG5cdFx0aWYgKGFwaUJhc2VVcmwuc3RhcnRzV2l0aCgnaHR0cDovLycpIHx8IGFwaUJhc2VVcmwuc3RhcnRzV2l0aCgnaHR0cHM6Ly8nKSkge1xuXHRcdFx0Ly8gQVBJX1VSTCB5YSBlcyBhYnNvbHV0YVxuXHRcdFx0cmV0dXJuIGltYWdlVXJsO1xuXHRcdH1cblx0XHRcblx0XHQvLyBTaSBBUElfVVJMIGVzIHJlbGF0aXZhLCB1c2FyIGxhIFVSTCBkZWwgZnJvbnRlbmQgY29tbyBiYXNlXG5cdFx0Y29uc3QgZnJvbnRlbmRVcmwgPSB0aGlzLkZST05URU5EX1VSTDtcblx0XHRpZiAoIWZyb250ZW5kVXJsKSB7XG5cdFx0XHRyZXR1cm4gaW1hZ2VVcmw7IC8vIEZhbGxiYWNrIHNpIG5vIHBvZGVtb3MgZGV0ZXJtaW5hciBsYSBVUkwgZGVsIGZyb250ZW5kXG5cdFx0fVxuXHRcdFxuXHRcdC8vIENvbnN0cnVpciBVUkwgYWJzb2x1dGFcblx0XHRjb25zdCBjbGVhbkFwaVVybCA9IGFwaUJhc2VVcmwuc3RhcnRzV2l0aCgnLycpID8gYXBpQmFzZVVybC5zdWJzdHJpbmcoMSkgOiBhcGlCYXNlVXJsO1xuXHRcdGNvbnN0IGNsZWFuRnJvbnRlbmRVcmwgPSBmcm9udGVuZFVybC5lbmRzV2l0aCgnLycpID8gZnJvbnRlbmRVcmwuc2xpY2UoMCwgLTEpIDogZnJvbnRlbmRVcmw7XG5cdFx0Y29uc3QgY2xlYW5JbWFnZVVybCA9IGltYWdlVXJsLnN0YXJ0c1dpdGgoJy8nKSA/IGltYWdlVXJsLnN1YnN0cmluZygxKSA6IGltYWdlVXJsO1xuXHRcdFxuXHRcdHJldHVybiBgJHtjbGVhbkZyb250ZW5kVXJsfS8ke2NsZWFuQXBpVXJsfSR7Y2xlYW5JbWFnZVVybH1gO1xuXHR9XG5cblx0LyoqXG5cdCAqIFJldG9ybmEgbGEgdXJsIGRlIGxhcyBpbWFnZW5lcyBkZSBsb3MgYmFubmVyc1xuXHQgKiBAcmV0dXJucyBcblx0ICovXG5cdHB1YmxpYyBtZWRpYUJhbm5lclVybCA9ICgpID0+IHRoaXMuQVNTRVRTX1VSTCArICh0aGlzLkFTU0VUU19VUkwgPT0gdGhpcy5hcGlDb25zdGFudHMuQVBJX1VSTCA/ICdtZWRpYS8nIDogJycpICsgXCJiYW5uZXItaW1hZ2UvXCI7XG5cdFxuXHRtZWRpYVN0b3JlVXJsID0gKCkgPT4gdGhpcy5BU1NFVFNfVVJMICsgKHRoaXMuQVNTRVRTX1VSTCA9PSB0aGlzLmFwaUNvbnN0YW50cy5BUElfVVJMID8gJ21lZGlhLycgOiAnJykgKyBcInN0b3JlLWltYWdlL1wiO1xuXHRcblx0LyoqXG5cdCAqIFJldG9ybmEgYHRydWVgIHNpIGxhIHZpc3RhIGVzIG1vYmlsZSwgYGZhbHNlYCBjYXNvIGNvbnRyYXJpby5cblx0ICogQHJldHVybnMge2Jvb2xlYW59XG5cdCAqL1xuXHRwdWJsaWMgbW9iaWxlU2NyZWVuID0gKCk6IGJvb2xlYW4gPT4gdGhpcy53aW5kb3cgJiYgdGhpcy53aW5kb3c/LmlubmVyV2lkdGggPCA3NTAgfHwgZmFsc2U7XG5cdC8qKlxuXHQgKiBDb250aWVuZSBsb3MgdmFsb3JlcyBwYXJhIGxhIG1vbmVkYSBhY3R1YWxcblx0ICovXG5cdHB1YmxpYyBjdXJyZW5jeTogQ3VycmVuY3lDb25maWcgPSB7XG5cdFx0Y29kZTogJ0FSRycsXG5cdFx0c3ltYm9sOiAnJCcsXG5cdFx0cG9zaXRpb246ICdMZWZ0Jyxcblx0XHR3aXRob3V0RGVjaW1hbDogZmFsc2Vcblx0fTtcblxuXHQvKipcblx0ICogQXJyZWdsbyBkZSB2YWxvcmVzIHVzYWRvcyBwYXJhIGVsIHBpcGUgY3VycmVuY3lQcmljZVxuXHQgKi9cblx0cHVibGljIGN1cnJlbmN5VHlwZUNvbmZpZzogQ3VycmVuY3lDb25maWdbXSA9IFtcblx0XHR7XG5cdFx0XHRjb2RlOiAnRVVSJyxcblx0XHRcdHN5bWJvbDogJ+KCrCcsXG5cdFx0XHRwb3NpdGlvbjogJ1JpZ2h0Jyxcblx0XHRcdHdpdGhvdXREZWNpbWFsOiBmYWxzZVxuXG5cdFx0fSxcblx0XHR7XG5cdFx0XHRjb2RlOiAnQVJHJyxcblx0XHRcdHN5bWJvbDogJyQnLFxuXHRcdFx0cG9zaXRpb246ICdMZWZ0Jyxcblx0XHRcdHdpdGhvdXREZWNpbWFsOiBmYWxzZVxuXHRcdH0sXG5cdFx0e1xuXHRcdFx0Y29kZTogJ0FSUycsXG5cdFx0XHRzeW1ib2w6ICckJyxcblx0XHRcdHBvc2l0aW9uOiAnTGVmdCcsXG5cdFx0XHR3aXRob3V0RGVjaW1hbDogZmFsc2Vcblx0XHR9LFxuXHRcdHtcblx0XHRcdGNvZGU6ICdVU0QnLFxuXHRcdFx0c3ltYm9sOiAnJCcsXG5cdFx0XHRwb3NpdGlvbjogJ0xlZnQnLFxuXHRcdFx0d2l0aG91dERlY2ltYWw6IGZhbHNlXG5cdFx0fSxcblx0XHR7XG5cdFx0XHRjb2RlOiAnUFlHJyxcblx0XHRcdHN5bWJvbDogJ0dzLicsXG5cdFx0XHRwb3NpdGlvbjogJ0xlZnQnLFxuXHRcdFx0d2l0aG91dERlY2ltYWw6IGZhbHNlXG5cdFx0fSxcblx0XHR7XG5cdFx0XHRjb2RlOiAnUEVOJyxcblx0XHRcdHN5bWJvbDogJ1MvJyxcblx0XHRcdHBvc2l0aW9uOiAnTGVmdCcsXG5cdFx0XHR3aXRob3V0RGVjaW1hbDogZmFsc2Vcblx0XHR9LFxuXHRcdHtcblx0XHRcdGNvZGU6ICdTRUsnLFxuXHRcdFx0c3ltYm9sOiAnU0VLJyxcblx0XHRcdHBvc2l0aW9uOiAnUmlnaHQnLFxuXHRcdFx0d2l0aG91dERlY2ltYWw6IHRydWVcblx0XHR9LFxuXHRdXG5cdC8qKlxuXHQgKiBDYW1iaWEgbGEgY29uZmlndXJhY2nDs24gZGUgbGEgbW9uZWRhLlxuXHQgKiBAcGFyYW0gY3VycmVuY3lUeXBlQ29uZmlnIEFycmVnbG8gY29uIGxhcyBkaXN0aW50YXMgbW9uZWRhcy5cblx0ICovXG5cdHB1YmxpYyBzZXRDdXJyZW5jeVR5cGVDb25maWcoY3VycmVuY3lUeXBlQ29uZmlnOiBDdXJyZW5jeUNvbmZpZ1tdKSB7XG5cdFx0dGhpcy5jdXJyZW5jeVR5cGVDb25maWcgPSBjdXJyZW5jeVR5cGVDb25maWc7XG5cdH1cblxuXHQvKipcblx0ICogQHBhcmFtIGN1cnJlbmN5VHlwZUZpbmQgRGVmaW5pciBlbCBjb2RlIGRlbCB0aXBvIGRlIG1vbmVkYSBxdWUgc2UgcXVpZXJhIHV0aWxpemFyLlxuXHQgKiBTaSBlbCB0aXBvIGVzIENVU1RPTSBzZSB0b21hbiBsb3MgdmFsb3JlcyBkZWwgc2VndW5kbyBwYXJhbWV0cm8gZG9uZGUgc2UgcHVlZGUgZGVmaW5pciBsYSBzaW1ib2xvZ8OtYSB5IHBvc2VzacOzbiBxdWUgc2UgcXVpZXJhLlxuXHQgKiBAcGFyYW0gY3VzdG9tVHlwZSBGb3JtYXRvIGRlbCBwYXLDoW1ldHJvIGVqZW1wbG8geyBjb2RlOiAnQVJHJywgc3ltYm9sOiAnJCcsIHBvc2l0aW9uOiAnTCcgLCB3aXRob3V0RGVjaW1hbHM6IGZhbHNlIH0gLFxuXHQgKiB0b2RhcyBsYXMga2V5IHNvbiBvcGNpb25hbGVzIHkgcG9yIGRlZmVjdG8gc2UgdG9tYW4gbG9zIHZhbG9yZXMgZGVsIGVqZW1wbG8uXG5cdCAqIEByZXR1cm5zIHNlIHJldG9ybmEgbGEgY29uZmlndXJhY2nDs24gcXVlIHNlIHNldGVvIGEgbGEgcHJvcGllZGFkIGN1cnJlbmN5IGRlbCBzZXJ2aWNpby5cblx0ICovXG5cdHB1YmxpYyBzZXRDdXJyZW5jeShjdXJyZW5jeVR5cGVGaW5kOiBjdXJyZW5jeVR5cGUsIGN1c3RvbVR5cGU/OiBDdXJyZW5jeUNvbmZpZyk6IEN1cnJlbmN5Q29uZmlnIHtcblx0XHR0aGlzLmN1cnJlbmN5ID0gdGhpcy5jdXJyZW5jeVR5cGVDb25maWcuZmluZCgoY3Q6IEN1cnJlbmN5Q29uZmlnKSA9PiBjdC5jb2RlID09IGN1cnJlbmN5VHlwZUZpbmQudG9VcHBlckNhc2UoKSkgfHwgdGhpcy5jdXJyZW5jeVxuXHRcdGN1c3RvbVR5cGUgJiYgKHRoaXMuY3VycmVuY3kgPSB7IC4uLnRoaXMuY3VycmVuY3ksIC4uLmN1c3RvbVR5cGUgfSlcblx0XHRyZXR1cm4gdGhpcy5jdXJyZW5jeTtcblx0fTtcblxuXG5cdHB1YmxpYyBtb2RpZnlDaGFubmVsQ29uZmlnKGNoYW5uZWxDb25maWc6IGFueSkge1xuXHRcdGlmIChjaGFubmVsQ29uZmlnLmNoYW5uZWwgfHwgY2hhbm5lbENvbmZpZy5jb2RlKVxuXHRcdFx0dGhpcy5hcGlDb25zdGFudHMuc2V0Q2hhbm5lbChjaGFubmVsQ29uZmlnLmNoYW5uZWwgfHwgY2hhbm5lbENvbmZpZy5jb2RlKVxuXG5cdFx0aWYgKGNoYW5uZWxDb25maWcubG9jYWxlIHx8IGNoYW5uZWxDb25maWcubG9jYWxlcy5jb2RlKVxuXHRcdFx0dGhpcy5hcGlDb25zdGFudHMuc2V0TG9jYWxlKGNoYW5uZWxDb25maWcubG9jYWxlIHx8IGNoYW5uZWxDb25maWcubG9jYWxlcy5jb2RlKVxuXG5cdFx0aWYgKGNoYW5uZWxDb25maWcuY3VycmVuY3kgfHwgY2hhbm5lbENvbmZpZy5iYXNlQ3VycmVuY3kpXG5cdFx0XHR0aGlzLnNldEN1cnJlbmN5KGNoYW5uZWxDb25maWcuY3VycmVuY3kgfHwgY2hhbm5lbENvbmZpZy5iYXNlQ3VycmVuY3kpXG5cblx0XHRyZXR1cm4gY2hhbm5lbENvbmZpZztcblx0fVxuXG5cdC8qKlxuXHQqIEBkZXNjcmlwdGlvbiBzZSB1dGlsaXphIHBhcmEgY29uZmlndXJhciBxdWUgZmlsdHJvcyBkZWwgdGlwbyBgU29ydEZpbHRlcmAgc2UgcXVpZXJlIG1vc3RyYXIgZW4gbGEgdmlzdGEuXG5cdCogU2UgdXNhbiBsb3MgY29kaWdvIGRlIGxvcyBmaWx0cm9zIHBhcmEgaW5kaWNhciBjdWFsZXMgc2UgZGViZW4gbW9zdHJhci5cblx0Ki9cblx0cHJpdmF0ZSBzb3J0RmlsdGVyczogc3RyaW5nW10gPSBbJ3ByaWNlJywgJ29yZGVyLWFscGgnLCAncmVjZW50J11cblxuXHQvKipcblx0ICpcblx0ICogQHBhcmFtIGZpbHRlcnNDb2RlIGFycmVnbG8gZGUgc3RyaW5ncyBjb24gbG9zIGNvZGlnb3MgZGUgbG9zIGZpbHRyb3MuXG5cdCAqIFNpIHNlIGxlIHBhc2EgZWwgcGFyYW1ldHJvICoqYWxsKiogZXN0ZSBtb3N0cmFyYSB0b2Rvcy5cblx0ICogQGV4YW1wbGUgcHJpY2UgfCBvcmRlci1hbHBoIHwgcmVjZW50IHwgdXBkYXRlIHwgYWxsXG5cdCAqIEByZXR1cm5zXG5cdCAqL1xuXHRzZXRTb3J0RmlsdGVycyA9IChmaWx0ZXJzQ29kZTogc3RyaW5nW10gPSBbJ2FsbCddKSA9PiB0aGlzLnNvcnRGaWx0ZXJzID0gZmlsdGVyc0NvZGU7XG5cblx0Z2V0U29ydEZpbHRlcnMgPSAoKSA9PiB0aGlzLnNvcnRGaWx0ZXJzO1xuXG5cdC8vIEFCT1VUIFBST0RVQ1RTIFxuXHRwcml2YXRlIHByb2R1Y3RzV2l0aFVuaXF1ZVZhcmlhbnQ6IGJvb2xlYW4gPSBmYWxzZTtcblx0c2V0UHJvZHVjdFdpdGhVbmlxdWVWYXJpYW50KHZhbHVlOiBib29sZWFuKSB7IHRoaXMucHJvZHVjdHNXaXRoVW5pcXVlVmFyaWFudCA9IHZhbHVlOyB9XG5cdGdldFByb2R1Y3RXaXRoVW5pcXVlVmFyaWFudCgpIHsgcmV0dXJuIHRoaXMucHJvZHVjdHNXaXRoVW5pcXVlVmFyaWFudCB9XG5cblx0LyoqXG5cdCogQGRlc2NyaXB0aW9uIGVzdGEgdmFyaWFibGUgc2UgdXRpbGl6YSBwYXJhIGNvbmZpZ3VyYXIgbG9zIHBhcmFtZXRyb3MgY3VhbmRvIHNlIGRlc2VhIG1vc3RyYXJcblx0KiB2YXJpYW50ZXMgZWwgbGlzdGFkbyBkZSBwcm9kdWN0b3MuXG5cdCogQHBhcmFtIHtzdHJpbmd9dHlwZSB0aXBvIGRlIG9wdGlvbnNcblx0KiBAcGFyYW0ge3N0cmluZ31jb2RlIGNvZGlnbyBkZSBvcHRpb25zXG5cdCogQHBhcmFtIHtib29sZWFufWRlZmF1bHRGaXJzdE9wdGlvbiBgdHJ1ZWAgdG9tYSBlbCBwcmltZXIgb3B0aW9uIGRlbCBwcm9kdWN0byBlbiBnZW5lcmFsXG5cdCogQHBhcmFtIHtib29sZWFufWNoZWNrSWZTdG9jayBgdHJ1ZWAgc2UgcmVhbGl6YSB1biBjaGVxdWVvIGRlIHNpIGxhIHZhcmlhbnRlIHRpZW5lIHN0b2NrIHBhcmEgbW9zdHJhcmxhXG5cdCogQGV4YW1wbGUgIGBgYGphdmFzY3JpcHRcblx0KiB7XG5cdCAgIHR5cGU6ICdjb2xvcicsXG5cdCAgIGNvZGU6ICdjb2xvcicsXG5cdCAgIGRlZmF1bHRGaXJzdE9wdGlvbjogZmFsc2UgLFxuXHQgICBjaGVja0lmU3RvY2s6dHJ1ZVxuXHQgICB9IGBgYFxuXHQqL1xuXHRwcml2YXRlIHBhcmFtc1Byb2R1Y3RzV2l0aFVuaXF1ZVZhcmlhbnQ6IFBhcmFtc1Byb2R1Y3RzV2l0aFVuaXF1ZVZhcmlhbnQgPSB7XG5cdFx0dHlwZTogJ2NvbG9yJyxcblx0XHRjb2RlOiAnY29sb3InLFxuXHRcdGRlZmF1bHRGaXJzdE9wdGlvbjogZmFsc2UsXG5cdFx0Y2hlY2tJZlN0b2NrOiB0cnVlXG5cdH1cblxuXHRzZXRQYXJhbXNQcm9kdWN0c1dpdGhVbmlxdWVWYXJpYW50ID0gKHZhbHVlOiBQYXJhbXNQcm9kdWN0c1dpdGhVbmlxdWVWYXJpYW50KSA9PiB7XG5cdFx0dGhpcy5wYXJhbXNQcm9kdWN0c1dpdGhVbmlxdWVWYXJpYW50ID0ge1xuXHRcdFx0Li4udGhpcy5wYXJhbXNQcm9kdWN0c1dpdGhVbmlxdWVWYXJpYW50LFxuXHRcdFx0Li4udmFsdWVcblx0XHR9XG5cdH1cblxuXHRnZXRQYXJhbXNQcm9kdWN0c1dpdGhVbmlxdWVWYXJpYW50ID0gKCkgPT4gdGhpcy5wYXJhbXNQcm9kdWN0c1dpdGhVbmlxdWVWYXJpYW50XG5cdFxuXHRwdWJsaWMgZ2V0Q2hhbm5lbCgpe1xuXHRcdHJldHVybiB0aGlzLmFwaUNvbnN0YW50cy5DSEFOTkVMO1xuXHR9XG5cblx0cHVibGljIGZvcm1fc2VuZGVyOiBib29sZWFuID0gZmFsc2U7XG5cblx0c2V0Q3VycmVudFJvdXRlVHlwZSh0eXBlOiBzdHJpbmcgfCBudWxsKSB7XG5cdFx0dGhpcy5jdXJyZW50Um91dGVUeXBlID0gdHlwZTtcblx0fVxuXG5cdGdldEN1cnJlbnRSb3V0ZVR5cGUoKTogc3RyaW5nIHwgbnVsbCB7XG5cdFx0cmV0dXJuIHRoaXMuY3VycmVudFJvdXRlVHlwZTtcblx0fVxufVxuIl19
@@ -1,7 +1,7 @@
1
1
  import { Component, CUSTOM_ELEMENTS_SCHEMA, inject, Input, PLATFORM_ID, signal } from '@angular/core';
2
2
  import { BlockEcComponent } from '../../abstractions-components';
3
3
  import { AnalyticsService } from '../../../ec-services';
4
- import { CommonModule } from '@angular/common';
4
+ import { CommonModule, isPlatformBrowser } from '@angular/common';
5
5
  // import function to register Swiper custom elements
6
6
  import { register } from 'swiper/element/bundle';
7
7
  import { ProductEcComponent } from "../../product-ec/product-ec.component";
@@ -66,7 +66,7 @@ export class BlockProductsEcComponent extends BlockEcComponent {
66
66
  * Permite personalización de las imágenes de las flechas mediante @Input.
67
67
  */
68
68
  setupSwiperNavigation() {
69
- if (this.meta?.styles?.carrousel !== false) {
69
+ if (this.meta?.styles?.carrousel !== false && isPlatformBrowser(this.platformId)) {
70
70
  // Usar setTimeout para asegurar que el swiper esté inicializado
71
71
  setTimeout(() => {
72
72
  this.initializeSwiperWithCustomNavigation();
@@ -78,6 +78,8 @@ export class BlockProductsEcComponent extends BlockEcComponent {
78
78
  * Esta función puede ser movida al componente base para reutilización.
79
79
  */
80
80
  initializeSwiperWithCustomNavigation() {
81
+ if (!isPlatformBrowser(this.platformId))
82
+ return;
81
83
  const prevButton = document.getElementById(`${this.meta?.code}-prev`);
82
84
  const nextButton = document.getElementById(`${this.meta?.code}-next`);
83
85
  const swiperElement = document.getElementById(this.meta?.code);
@@ -216,4 +218,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
216
218
  required: true
217
219
  }]
218
220
  }] } });
219
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmxvY2stcHJvZHVjdHMtZWMuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmctZWFzeWNvbW1lcmNlLXYxOC9zcmMvbGliL2VjLWNvbXBvbmVudHMvYmxvY2tzLWVjL2Jsb2NrLXByb2R1Y3RzLWVjL2Jsb2NrLXByb2R1Y3RzLWVjLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25nLWVhc3ljb21tZXJjZS12MTgvc3JjL2xpYi9lYy1jb21wb25lbnRzL2Jsb2Nrcy1lYy9ibG9jay1wcm9kdWN0cy1lYy9ibG9jay1wcm9kdWN0cy1lYy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQWtDLFNBQVMsRUFBRSxzQkFBc0IsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLFdBQVcsRUFBRSxNQUFNLEVBQWUsTUFBTSxlQUFlLENBQUM7QUFDbkosT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFFakUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDeEQsT0FBTyxFQUFFLFlBQVksRUFBcUIsTUFBTSxpQkFBaUIsQ0FBQztBQUNsRSxxREFBcUQ7QUFDckQsT0FBTyxFQUFFLFFBQVEsRUFBbUIsTUFBTSx1QkFBdUIsQ0FBQztBQUNsRSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSx1Q0FBdUMsQ0FBQzs7O0FBRTNFLFFBQVEsRUFBRSxDQUFBO0FBQ1Y7Ozs7R0FJRztBQVNILE1BQU0sT0FBTyx3QkFBeUIsU0FBUSxnQkFBZ0I7SUFDNUQsK0NBQStDO0lBQ2hELHlFQUF5RTtJQUNoRSxjQUFjLENBQVUsQ0FBQyxtQ0FBbUM7SUFDNUQsY0FBYyxDQUFVLENBQUMsbUNBQW1DO0lBQzVELGFBQWEsR0FBVyxHQUFHLENBQUM7SUFDNUIsYUFBYSxHQUFXLEdBQUcs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QUFsQixLQUFLO2dCQU1ILFFBQVE7c0JBRlYsS0FBSzt1QkFBQzt3QkFDTixRQUFRLEVBQUUsSUFBSTtxQkFDZDtnQkFNRSxJQUFJO3NCQUZOLEtBQUs7dUJBQUM7d0JBQ04sUUFBUSxFQUFFLElBQUk7cUJBQ2QiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBhZnRlck5leHRSZW5kZXIsIEFmdGVyVmlld0luaXQsIENvbXBvbmVudCwgQ1VTVE9NX0VMRU1FTlRTX1NDSEVNQSwgaW5qZWN0LCBJbnB1dCwgUExBVEZPUk1fSUQsIHNpZ25hbCwgVGVtcGxhdGVSZWYgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEJsb2NrRWNDb21wb25lbnQgfSBmcm9tICcuLi8uLi9hYnN0cmFjdGlvbnMtY29tcG9uZW50cyc7XG5pbXBvcnQgeyBTd2lwZXJPcHRpb25zIH0gZnJvbSAnc3dpcGVyL3R5cGVzJztcbmltcG9ydCB7IEFuYWx5dGljc1NlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9lYy1zZXJ2aWNlcyc7XG5pbXBvcnQgeyBDb21tb25Nb2R1bGUsIGlzUGxhdGZvcm1Ccm93c2VyIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbi8vIGltcG9ydCBmdW5jdGlvbiB0byByZWdpc3RlciBTd2lwZXIgY3VzdG9tIGVsZW1lbnRzXG5pbXBvcnQgeyByZWdpc3RlciwgU3dpcGVyQ29udGFpbmVyIH0gZnJvbSAnc3dpcGVyL2VsZW1lbnQvYnVuZGxlJztcbmltcG9ydCB7IFByb2R1Y3RFY0NvbXBvbmVudCB9IGZyb20gXCIuLi8uLi9wcm9kdWN0LWVjL3Byb2R1Y3QtZWMuY29tcG9uZW50XCI7XG5cbnJlZ2lzdGVyKClcbi8qKlxuICogQ29tcG9uZW4gcGFyYSBtYW5lamFyIGxvcyBibG9xdWVzIGRlIHByb2R1Y3Rvcy5cbiAqIEBleHRlbmRzIHtCbG9ja0VjQ29tcG9uZW50fVxuICogQGNsYXNzIEJsb2NrUHJvZHVjdHNFY0NvbXBvbmVudFxuICovXG5AQ29tcG9uZW50KHtcblx0c2VsZWN0b3I6ICdhcHAtYmxvY2stcHJvZHVjdHMtZWMnLFxuXHRzdGFuZGFsb25lOiB0cnVlLFxuXHRpbXBvcnRzOiBbQ29tbW9uTW9kdWxlLCBQcm9kdWN0RWNDb21wb25lbnRdLFxuXHR0ZW1wbGF0ZVVybDogJy4vYmxvY2stcHJvZHVjdHMtZWMuY29tcG9uZW50Lmh0bWwnLFxuXHRzdHlsZVVybDogJy4vYmxvY2stcHJvZHVjdHMtZWMuY29tcG9uZW50LnNjc3MnLFxuXHRzY2hlbWFzOiBbQ1VTVE9NX0VMRU1FTlRTX1NDSEVNQV1cbn0pXG5leHBvcnQgY2xhc3MgQmxvY2tQcm9kdWN0c0VjQ29tcG9uZW50IGV4dGVuZHMgQmxvY2tFY0NvbXBvbmVudCBpbXBsZW1lbnRzIEFmdGVyVmlld0luaXQge1xuXHRcdC8vIFBlcnNvbmFsaXphY2nDs24gZGUgbGFzIGZsZWNoYXMgZGUgbmF2ZWdhY2nDs25cblx0Ly8gUG9yIGRlZmVjdG8gdXNhIHPDrW1ib2xvcyBkZSB0ZXh0bywgcGVybyBzZSBwdWVkZW4gZXNwZWNpZmljYXIgaW3DoWdlbmVzXG5cdEBJbnB1dCgpIHByZXZBcnJvd0ltYWdlPzogc3RyaW5nOyAvLyB1bmRlZmluZWQgPSB1c2Egc8OtbWJvbG8gZGUgdGV4dG9cblx0QElucHV0KCkgbmV4dEFycm93SW1hZ2U/OiBzdHJpbmc7IC8vIHVuZGVmaW5lZCA9IHVzYSBzw61tYm9sbyBkZSB0ZXh0b1xuXHRASW5wdXQoKSBwcmV2QXJyb3dUZXh0OiBzdHJpbmcgPSAnPCc7XG5cdEBJbnB1dCgpIG5leHRBcnJvd1RleHQ6IHN0cmluZyA9ICc+Jztcblx0LyoqXG5cdCAqIFNlcnZpY2lvIGRlIEFuYWx5dGljc1xuXHQgKi9cblx0cHJpdmF0ZSBhbmFseXRpY3NTZXJ2aWNlOiBBbmFseXRpY3NTZXJ2aWNlID0gaW5qZWN0KEFuYWx5dGljc1NlcnZpY2UpXG5cdC8qKlxuXHQgKiBTaWduYWwgdXRsaXphZG8gcGFyYSBndWFyZGEgZWwgY29udGVuZWRvciBkZWwgY2FycnVzZWxcblx0ICovXG5cdHN3aXBlckVsZW1lbnQgPSBzaWduYWw8U3dpcGVyQ29udGFpbmVyIHwgbnVsbD4obnVsbClcblx0LyoqXG5cdCAqIElucHV0IHF1ZSByZWNpYmUgdW4gdGVtcGxhdGUgcGFyYSBlbCBwcm9kdWN0by5cblx0ICovXG5cdEBJbnB1dCgpIGFwcFByb2R1Y3Q6IFRlbXBsYXRlUmVmPGFueT4gfCB1bmRlZmluZWQ7XG5cdC8qKlxuXHQgKiBDb2xlY2Npw7NuIGRlIHByb2R1Y3Rvcy5cblx0ICovXG5cdEBJbnB1dCh7XG5cdFx0cmVxdWlyZWQ6IHRydWVcblx0fSkgcHJvZHVjdHM6IGFueTsgLy8gUHJvZHVjdFtdO1xuXHQvKipcblx0ICogQmxvcXVlIHByaW5jaXBhbCBxdWUgY29udGllbmUgbG9zIHByb2R1Y3Rvc1xuXHQgKi9cblx0QElucHV0KHtcblx0XHRyZXF1aXJlZDogdHJ1ZVxuXHR9KSBtZXRhOiBhbnk7XG5cblx0bmdBZnRlclZpZXdJbml0KCkge1xuXHRcdHRoaXMuc2V0dXBTd2lwZXJOYXZpZ2F0aW9uKCk7XG5cdH1cblx0XG5cdHByaXZhdGUgZG9jdW1lbnQ/OiBEb2N1bWVudDtcblx0cHJpdmF0ZSBwbGF0Zm9ybUlkOiBhbnkgPSBpbmplY3QoUExBVEZPUk1fSUQpXG5cblx0LyoqXG5cdCAqIEVqZWN1dGEgZWwgbcOpdG9kbyBgYWZ0ZXJOZXh0UmVuZGVyYHBhcmEgY2FyZ2FyIGxhcyBjb25maWd1cmFjaW9uZXMgbmVjZXNhcmlhcyBcblx0ICogcGFyYSBlbCBjYXJydXNlbCBkZWwgYmFubmVycy4gRXN0byBkZWJlIHNlciBhc2kgZGViaWRvIGEgcXVlIHlhIGRlYmUgZXN0YXIgcHJlc2VudGVcblx0ICogZW4gZWwgRG9tIGVsIGVsZW1lbnQgYDxzd2lwZXItY29udGFpbmVyPmAgcGFyYSBwb2RlciBjb25maWd1cmFybG8uXG5cdCAqL1xuXHRjb25zdHJ1Y3RvcigpIHtcblx0XHRzdXBlcigpXG5cdH1cblx0LyoqXG5cdCAqIEFwbGljYSBlbCBldmVudG8gYHNlbGVjdF9wcm9tb3Rpb25gIGp1bnRvIGNvbiBlbCBiYW5uZXIgcXVlIGludGVyYWN0dWEuXG5cdCAqIEBwYXJhbSBiYW5uZXIgXG5cdCAqL1xuXHRzZWxlY3RQcm9tb3Rpb24oaXRlbTogYW55KTogdm9pZCB7XG5cdFx0dGhpcy5hbmFseXRpY3NTZXJ2aWNlLmNhbGxFdmVudCgnc2VsZWN0X3Byb21vdGlvbicsIGl0ZW0pXG5cdH1cblxuXHQvKipcblx0ICogQ29uZmlndXJhIGxhIG5hdmVnYWNpw7NuIHBlcnNvbmFsaXphZGEgZGVsIFN3aXBlci5cblx0ICogRXN0YSBmdW5jacOzbiBlc3TDoSBkaXNlw7FhZGEgcGFyYSBzZXIgbW92aWRhIGFsIGNvbXBvbmVudGUgYmFzZSBCbG9ja1Byb2R1Y3RzRWNDb21wb25lbnQuXG5cdCAqIFBlcm1pdGUgcGVyc29uYWxpemFjacOzbiBkZSBsYXMgaW3DoWdlbmVzIGRlIGxhcyBmbGVjaGFzIG1lZGlhbnRlIEBJbnB1dC5cblx0ICovXG5cdHByaXZhdGUgc2V0dXBTd2lwZXJOYXZpZ2F0aW9uKCkge1xuXHRcdGlmICh0aGlzLm1ldGE/LnN0eWxlcz8uY2Fycm91c2VsICE9PSBmYWxzZSkge1xuXHRcdFx0Ly8gVXNhciBzZXRUaW1lb3V0IHBhcmEgYXNlZ3VyYXIgcXVlIGVsIHN3aXBlciBlc3TDqSBpbmljaWFsaXphZG9cblx0XHRcdHNldFRpbWVvdXQoKCkgPT4ge1xuXHRcdFx0XHR0aGlzLmluaXRpYWxpemVTd2lwZXJXaXRoQ3VzdG9tTmF2aWdhdGlvbigpO1xuXHRcdFx0fSwgMjAwKTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogSW5pY2lhbGl6YSBlbCBTd2lwZXIgY29uIG5hdmVnYWNpw7NuIHBlcnNvbmFsaXphZGEuXG5cdCAqIEVzdGEgZnVuY2nDs24gcHVlZGUgc2VyIG1vdmlkYSBhbCBjb21wb25lbnRlIGJhc2UgcGFyYSByZXV0aWxpemFjacOzbi5cblx0ICovXG5cdHByaXZhdGUgaW5pdGlhbGl6ZVN3aXBlcldpdGhDdXN0b21OYXZpZ2F0aW9uKCkge1xuXHRcdGNvbnN0IHByZXZCdXR0b24gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChgJHt0aGlzLm1ldGE/LmNvZGV9LXByZXZgKTtcblx0XHRjb25zdCBuZXh0QnV0dG9uID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoYCR7dGhpcy5tZXRhPy5jb2RlfS1uZXh0YCk7XG5cdFx0Y29uc3Qgc3dpcGVyRWxlbWVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHRoaXMubWV0YT8uY29kZSkgYXMgYW55O1xuXG5cdFx0aWYgKHByZXZCdXR0b24gJiYgbmV4dEJ1dHRvbiAmJiBzd2lwZXJFbGVtZW50KSB7XG5cdFx0XHQvLyBjb25zb2xlLmxvZygnQ29uZmlndXJhbmRvIG5hdmVnYWNpw7NuIHBlcnNvbmFsaXphZGEgcGFyYTonLCB0aGlzLm1ldGE/LmNvZGUpO1xuXHRcdFx0XG5cdFx0XHRjb25zdCBzd2lwZXJDb25maWcgPSB0aGlzLmdldFN3aXBlckNvbmZpZ3VyYXRpb24oKTtcblxuXHRcdFx0Ly8gVmVyaWZpY2FyIHNpIGVsIFN3aXBlciB5YSBlc3TDoSBpbmljaWFsaXphZG9cblx0XHRcdGlmICghc3dpcGVyRWxlbWVudC5zd2lwZXIpIHtcblx0XHRcdFx0dGhpcy5pbml0aWFsaXplTmV3U3dpcGVyKHN3aXBlckVsZW1lbnQsIHN3aXBlckNvbmZpZyk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHR0aGlzLnVwZGF0ZUV4aXN0aW5nU3dpcGVyKHN3aXBlckVsZW1lbnQpO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBDb25maWd1cmFyIGxvcyBldmVudCBsaXN0ZW5lcnMgcGFyYSBsb3MgYm90b25lc1xuXHRcdFx0dGhpcy5zZXR1cE5hdmlnYXRpb25FdmVudExpc3RlbmVycyhwcmV2QnV0dG9uLCBuZXh0QnV0dG9uLCBzd2lwZXJFbGVtZW50KTtcblx0XHRcdFxuXHRcdFx0Ly8gY29uc29sZS5sb2coJ0V2ZW50IGxpc3RlbmVycyBjb25maWd1cmFkb3MgcGFyYSBsb3MgYm90b25lcyBkZSBuYXZlZ2FjacOzbicpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHQvLyBjb25zb2xlLmxvZygnTm8gc2UgcHVkaWVyb24gZW5jb250cmFyIGxvcyBlbGVtZW50b3M6Jywge1xuXHRcdFx0Ly8gXHRwcmV2QnV0dG9uOiAhIXByZXZCdXR0b24sXG5cdFx0XHQvLyBcdG5leHRCdXR0b246ICEhbmV4dEJ1dHRvbixcblx0XHRcdC8vIFx0c3dpcGVyRWxlbWVudDogISFzd2lwZXJFbGVtZW50XG5cdFx0XHQvLyB9KTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogT2J0aWVuZSBsYSBjb25maWd1cmFjacOzbiBiYXNlIGRlbCBTd2lwZXIuXG5cdCAqIEVzdGEgY29uZmlndXJhY2nDs24gcHVlZGUgc2VyIHBlcnNvbmFsaXphZGEgZW4gZWwgZnV0dXJvIG1lZGlhbnRlIEBJbnB1dC5cblx0ICovXG5cdHByaXZhdGUgZ2V0U3dpcGVyQ29uZmlndXJhdGlvbigpIHtcblx0XHRyZXR1cm4ge1xuXHRcdFx0c2xpZGVzUGVyVmlldzogJ2F1dG8nLFxuXHRcdFx0c3BhY2VCZXR3ZWVuOiAxNixcblx0XHRcdHNsaWRlc1Blckdyb3VwOiAxLCAvLyBJbXBvcnRhbnRlOiBtb3ZlcnNlIGRlIHVubyBlbiB1bm9cblx0XHRcdG5hdmlnYXRpb246IGZhbHNlLCAvLyBEZXNoYWJpbGl0YW1vcyBsYSBuYXZlZ2FjacOzbiBwb3IgZGVmZWN0b1xuXHRcdFx0cGFnaW5hdGlvbjogZmFsc2UsXG5cdFx0XHRsb29wOiB0cnVlLFxuXHRcdFx0Z3JhYkN1cnNvcjogdHJ1ZSxcblx0XHRcdGF1dG9wbGF5OiB0cnVlLFxuXHRcdFx0YnJlYWtwb2ludHM6IHtcblx0XHRcdFx0MzIwOiB7XG5cdFx0XHRcdFx0c2xpZGVzUGVyVmlldzogMSxcblx0XHRcdFx0XHRzcGFjZUJldHdlZW46IDgsXG5cdFx0XHRcdFx0c2xpZGVzUGVyR3JvdXA6IDFcblx0XHRcdFx0fSxcblx0XHRcdFx0NTc2OiB7XG5cdFx0XHRcdFx0c2xpZGVzUGVyVmlldzogMixcblx0XHRcdFx0XHRzcGFjZUJldHdlZW46IDEyLFxuXHRcdFx0XHRcdHNsaWRlc1Blckdyb3VwOiAxXG5cdFx0XHRcdH0sXG5cdFx0XHRcdDc2ODoge1xuXHRcdFx0XHRcdHNsaWRlc1BlclZpZXc6IDMsXG5cdFx0XHRcdFx0c3BhY2VCZXR3ZWVuOiAxNixcblx0XHRcdFx0XHRzbGlkZXNQZXJHcm91cDogMVxuXHRcdFx0XHR9LFxuXHRcdFx0XHQxMDI0OiB7XG5cdFx0XHRcdFx0c2xpZGVzUGVyVmlldzogNCxcblx0XHRcdFx0XHRzcGFjZUJldHdlZW46IDE2LFxuXHRcdFx0XHRcdHNsaWRlc1Blckdyb3VwOiAxXG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9O1xuXHR9XG5cblx0LyoqXG5cdCAqIEluaWNpYWxpemEgdW4gbnVldm8gU3dpcGVyIGNvbiBsYSBjb25maWd1cmFjacOzbiBwcm9wb3JjaW9uYWRhLlxuXHQgKi9cblx0cHJpdmF0ZSBpbml0aWFsaXplTmV3U3dpcGVyKHN3aXBlckVsZW1lbnQ6IGFueSwgY29uZmlnOiBhbnkpIHtcblx0XHQvLyBBc2lnbmFyIGNvbmZpZ3VyYWNpw7NuIGFsIGVsZW1lbnRvXG5cdFx0T2JqZWN0LmFzc2lnbihzd2lwZXJFbGVtZW50LCBjb25maWcpO1xuXHRcdFxuXHRcdC8vIEluaWNpYWxpemFyIGVsIFN3aXBlclxuXHRcdHN3aXBlckVsZW1lbnQuaW5pdGlhbGl6ZSgpO1xuXHRcdFxuXHRcdC8vIGNvbnNvbGUubG9nKCdTd2lwZXIgaW5pY2lhbGl6YWRvIGNvbiBjb25maWd1cmFjacOzbiBwZXJzb25hbGl6YWRhJyk7XG5cdH1cblxuXHQvKipcblx0ICogQWN0dWFsaXphIHVuIFN3aXBlciBleGlzdGVudGUgcGFyYSBhc2VndXJhciBsYSBjb25maWd1cmFjacOzbiBjb3JyZWN0YS5cblx0ICovXG5cdHByaXZhdGUgdXBkYXRlRXhpc3RpbmdTd2lwZXIoc3dpcGVyRWxlbWVudDogYW55KSB7XG5cdFx0Ly8gY29uc29sZS5sb2coJ0FjdHVhbGl6YW5kbyBjb25maWd1cmFjacOzbiBkZSBTd2lwZXIgZXhpc3RlbnRlJyk7XG5cdFx0XG5cdFx0Ly8gRm9yemFyIHNsaWRlc1Blckdyb3VwIGEgMVxuXHRcdHN3aXBlckVsZW1lbnQuc3dpcGVyLnBhcmFtcy5zbGlkZXNQZXJHcm91cCA9IDE7XG5cdFx0c3dpcGVyRWxlbWVudC5zd2lwZXIuYWxsb3dTbGlkZU5leHQgPSB0cnVlO1xuXHRcdHN3aXBlckVsZW1lbnQuc3dpcGVyLmFsbG93U2xpZGVQcmV2ID0gdHJ1ZTtcblx0XHRcblx0XHQvLyBBY3R1YWxpemFyIHRhbWJpw6luIGxvcyBicmVha3BvaW50cyBzaSBleGlzdGVuXG5cdFx0aWYgKHN3aXBlckVsZW1lbnQuc3dpcGVyLnBhcmFtcy5icmVha3BvaW50cykge1xuXHRcdFx0T2JqZWN0LmtleXMoc3dpcGVyRWxlbWVudC5zd2lwZXIucGFyYW1zLmJyZWFrcG9pbnRzKS5mb3JFYWNoKGtleSA9PiB7XG5cdFx0XHRcdHN3aXBlckVsZW1lbnQuc3dpcGVyLnBhcmFtcy5icmVha3BvaW50c1trZXldLnNsaWRlc1Blckdyb3VwID0gMTtcblx0XHRcdH0pO1xuXHRcdH1cblx0XHRcblx0XHRzd2lwZXJFbGVtZW50LnN3aXBlci51cGRhdGUoKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBDb25maWd1cmEgbG9zIGV2ZW50IGxpc3RlbmVycyBwYXJhIGxvcyBib3RvbmVzIGRlIG5hdmVnYWNpw7NuLlxuXHQgKi9cblx0cHJpdmF0ZSBzZXR1cE5hdmlnYXRpb25FdmVudExpc3RlbmVycyhwcmV2QnV0dG9uOiBFbGVtZW50LCBuZXh0QnV0dG9uOiBFbGVtZW50LCBzd2lwZXJFbGVtZW50OiBhbnkpIHtcblx0XHRwcmV2QnV0dG9uLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgKGUpID0+IHtcblx0XHRcdGUucHJldmVudERlZmF1bHQoKTtcblx0XHRcdGUuc3RvcFByb3BhZ2F0aW9uKCk7XG5cdFx0XHQvLyBjb25zb2xlLmxvZygnQ2xpY2sgZW4gYm90w7NuIGFudGVyaW9yJyk7XG5cdFx0XHRpZiAoc3dpcGVyRWxlbWVudC5zd2lwZXIpIHtcblx0XHRcdFx0c3dpcGVyRWxlbWVudC5zd2lwZXIuc2xpZGVQcmV2KCk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cblx0XHRuZXh0QnV0dG9uLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgKGUpID0+IHtcblx0XHRcdGUucHJldmVudERlZmF1bHQoKTtcblx0XHRcdGUuc3RvcFByb3BhZ2F0aW9uKCk7XG5cdFx0XHQvLyBjb25zb2xlLmxvZygnQ2xpY2sgZW4gYm90w7NuIHNpZ3VpZW50ZScpO1xuXHRcdFx0aWYgKHN3aXBlckVsZW1lbnQuc3dpcGVyKSB7XG5cdFx0XHRcdHN3aXBlckVsZW1lbnQuc3dpcGVyLnNsaWRlTmV4dCgpO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHR9XG59XG4iLCI8c2VjdGlvbiBbbmdDbGFzc109XCJ0cmltQ2xhc3NCbG9jayhtZXRhLmNvZGUpICsgJyBjb250YWluZXItZmx1aWQnXCI+XG5cbiAgICA8ZGl2IGNsYXNzPVwiYmxvY2tQcm9kdWN0IGJsb2NrLXByb2R1Y3RcIj5cbiAgICAgICAgQGlmKG1ldGEubmFtZSl7XG4gICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMTIgbXQtNFwiPlxuICAgICAgICAgICAgICAgIDxoMiAgY2xhc3M9XCJmb250LXdlaWdodC1ub3JtYWwgZm9udC1nZFwiPlxuICAgICAgICAgICAgICAgICAgICA8c3Bhbj57e21ldGEubmFtZX19PC9zcGFuPlxuICAgICAgICAgICAgICAgIDwvaDI+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIH1cblxuXG4gICAgICAgIEBpZihtZXRhLnN0eWxlcyAmJiBtZXRhLnN0eWxlcy5jYXJyb3VzZWwgPT0gZmFsc2Upe1xuICAgICAgICA8ZGl2IGNsYXNzPVwicm93IFwiPlxuICAgICAgICAgICAgQGZvciAocHJvZHVjdCBvZiBwcm9kdWN0czsgdHJhY2sgJGluZGV4KSB7XG4gICAgICAgICAgICA8ZGl2IFtjbGFzc109XCInaXRlbSAnKyAnIGNvbC0nKyAobWV0YS5zdHlsZXMuaXRlbXM/LnNtKSArICcgY29sLW1kLScgKyAobWV0YS5zdHlsZXMuaXRlbXM/Lm1kKSAgKyAnIGNvbC1sZy0nICsgKG1ldGEuc3R5bGVzLml0ZW1zPy5sZykgICsgJyBweC0yJ1wiIFtpZF09XCIkaW5kZXhcIj5cbiAgICAgICAgICAgICAgICA8IS0tIHZlcmlmaWNhIHF1ZSBzaSB2aWVuZW4gdW4gdGVtcGxhdGUgcGFyYSB1biBjdXN0b20gYXBwUHJvZHVjdCBsbGFtYWRvIFwiYXBwUHJvZHVjdFwiIGNvbiB1biBvYmpldG8gXCJwcm9kdWN0XCItIHNpbm8gdXNhIHBvciBkZWZlY3RvIGVsIGRlbCBjb3JlIC0tPlxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJhcHBQcm9kdWN0ID8gYXBwUHJvZHVjdCA6IGRlZmF1bHRBcHBQcm9kdWN0OyBjb250ZXh0OiB7cHJvZHVjdDpwcm9kdWN0fVwiPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICB9XG4gICAgICAgIDwvZGl2PlxuICAgICAgICB9IEBlbHNlIHtcbiAgICAgICAgPGRpdiBjbGFzcz1cImNvbnRhaW5lciBwb3NpdGlvbi1yZWxhdGl2ZVwiPlxuICAgICAgICAgICAgPHN3aXBlci1jb250YWluZXIgXG4gICAgICAgICAgICAgICAgaW5pdD1cImZhbHNlXCIgXG4gICAgICAgICAgICAgICAgW2lkXT1cIm1ldGE/LmNvZGVcIlxuICAgICAgICAgICAgICAgIHNsaWRlcy1wZXItdmlldz1cImF1dG9cIlxuICAgICAgICAgICAgICAgIHNwYWNlLWJldHdlZW49XCIxNlwiXG4gICAgICAgICAgICAgICAgc2xpZGVzLXBlci1ncm91cD1cIjFcIlxuICAgICAgICAgICAgICAgIG5hdmlnYXRpb249XCJmYWxzZVwiXG4gICAgICAgICAgICAgICAgcGFnaW5hdGlvbj1cImZhbHNlXCJcbiAgICAgICAgICAgICAgICBsb29wPVwiZmFsc2VcIj5cbiAgICAgICAgICAgICAgICBAZm9yIChwcm9kdWN0IG9mIHByb2R1Y3RzOyB0cmFjayAkaW5kZXgpIHtcbiAgICAgICAgICAgICAgICA8c3dpcGVyLXNsaWRlIGlkPVwic3dpcGVyLXNsaWRlXCI+XG4gICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICAgICAgICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwiYXBwUHJvZHVjdCA/IGFwcFByb2R1Y3QgOiBkZWZhdWx0QXBwUHJvZHVjdDsgY29udGV4dDoge3Byb2R1Y3Q6cHJvZHVjdH1cIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICA8L3N3aXBlci1zbGlkZT5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICA8L3N3aXBlci1jb250YWluZXI+XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIDwhLS0gQm90b25lcyBkZSBuYXZlZ2FjacOzbiBwZXJzb25hbGl6YWRvcyAtLT5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzd2lwZXItbmF2aWdhdGlvblwiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzd2lwZXItYnV0dG9uLXByZXZcIiBbaWRdPVwibWV0YT8uY29kZSArICctcHJldidcIj5cbiAgICAgICAgICAgICAgICAgICAgQGlmKHByZXZBcnJvd0ltYWdlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICA8aW1nIFtzcmNdPVwicHJldkFycm93SW1hZ2VcIiBhbHQ9XCJBbnRlcmlvclwiIC8+XG4gICAgICAgICAgICAgICAgICAgIH0gQGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJhcnJvdy10ZXh0XCI+e3twcmV2QXJyb3dUZXh0fX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic3dpcGVyLWJ1dHRvbi1uZXh0XCIgW2lkXT1cIm1ldGE/LmNvZGUgKyAnLW5leHQnXCI+XG4gICAgICAgICAgICAgICAgICAgIEBpZihuZXh0QXJyb3dJbWFnZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBbc3JjXT1cIm5leHRBcnJvd0ltYWdlXCIgYWx0PVwiU2lndWllbnRlXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgfSBAZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImFycm93LXRleHRcIj57e25leHRBcnJvd1RleHR9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICB9XG4gICAgPC9kaXY+XG48L3NlY3Rpb24+XG5cblxuPCEtLSBjb21wb25lbnRlIHBvciBkZWZlY3RvICh0b21hcmEgY29tbyBwcm9kdWN0byBlbCBjb250ZXh0byBwYXNhZG8gY29tbyBcInByb2R1Y3RcIikgLS0+XG48bmctdGVtcGxhdGUgI2RlZmF1bHRBcHBQcm9kdWN0IGxldC1wcm9kdWN0PVwicHJvZHVjdFwiPlxuICAgIDxhcHAtcHJvZHVjdC1lYyBbcHJvZHVjdF09XCJwcm9kdWN0XCI+PC9hcHAtcHJvZHVjdC1lYz5cbjwvbmctdGVtcGxhdGU+Il19
221
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmxvY2stcHJvZHVjdHMtZWMuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmctZWFzeWNvbW1lcmNlLXYxOC9zcmMvbGliL2VjLWNvbXBvbmVudHMvYmxvY2tzLWVjL2Jsb2NrLXByb2R1Y3RzLWVjL2Jsb2NrLXByb2R1Y3RzLWVjLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25nLWVhc3ljb21tZXJjZS12MTgvc3JjL2xpYi9lYy1jb21wb25lbnRzL2Jsb2Nrcy1lYy9ibG9jay1wcm9kdWN0cy1lYy9ibG9jay1wcm9kdWN0cy1lYy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQWtDLFNBQVMsRUFBRSxzQkFBc0IsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLFdBQVcsRUFBRSxNQUFNLEVBQWUsTUFBTSxlQUFlLENBQUM7QUFDbkosT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFFakUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDeEQsT0FBTyxFQUFFLFlBQVksRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ2xFLHFEQUFxRDtBQUNyRCxPQUFPLEVBQUUsUUFBUSxFQUFtQixNQUFNLHVCQUF1QixDQUFDO0FBQ2xFLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHVDQUF1QyxDQUFDOzs7QUFFM0UsUUFBUSxFQUFFLENBQUE7QUFDVjs7OztHQUlHO0FBU0gsTUFBTSxPQUFPLHdCQUF5QixTQUFRLGdCQUFnQjtJQUM1RCwrQ0FBK0M7SUFDaEQseUVBQXlFO0lBQ2hFLGNBQWMsQ0FBVSxDQUFDLG1DQUFtQztJQUM1RCxjQUFjLENBQVUsQ0FBQyxtQ0FBbUM7SUFDNUQsYUFBYSxHQUFXLEdBQUcsQ0FBQztJQUM1QixhQUFh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d0RBS3hCLGNBQWM7c0JBQXRCLEtBQUs7Z0JBQ0csY0FBYztzQkFBdEIsS0FBSztnQkFDRyxhQUFhO3NCQUFyQixLQUFLO2dCQUNHLGFBQWE7c0JBQXJCLEtBQUs7Z0JBWUcsVUFBVTtzQkFBbEIsS0FBSztnQkFNSCxRQUFRO3NCQUZWLEtBQUs7dUJBQUM7d0JBQ04sUUFBUSxFQUFFLElBQUk7cUJBQ2Q7Z0JBTUUsSUFBSTtzQkFGTixLQUFLO3VCQUFDO3dCQUNOLFFBQVEsRUFBRSxJQUFJO3FCQUNkIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgYWZ0ZXJOZXh0UmVuZGVyLCBBZnRlclZpZXdJbml0LCBDb21wb25lbnQsIENVU1RPTV9FTEVNRU5UU19TQ0hFTUEsIGluamVjdCwgSW5wdXQsIFBMQVRGT1JNX0lELCBzaWduYWwsIFRlbXBsYXRlUmVmIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBCbG9ja0VjQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vYWJzdHJhY3Rpb25zLWNvbXBvbmVudHMnO1xuaW1wb3J0IHsgU3dpcGVyT3B0aW9ucyB9IGZyb20gJ3N3aXBlci90eXBlcyc7XG5pbXBvcnQgeyBBbmFseXRpY3NTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vZWMtc2VydmljZXMnO1xuaW1wb3J0IHsgQ29tbW9uTW9kdWxlLCBpc1BsYXRmb3JtQnJvd3NlciB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG4vLyBpbXBvcnQgZnVuY3Rpb24gdG8gcmVnaXN0ZXIgU3dpcGVyIGN1c3RvbSBlbGVtZW50c1xuaW1wb3J0IHsgcmVnaXN0ZXIsIFN3aXBlckNvbnRhaW5lciB9IGZyb20gJ3N3aXBlci9lbGVtZW50L2J1bmRsZSc7XG5pbXBvcnQgeyBQcm9kdWN0RWNDb21wb25lbnQgfSBmcm9tIFwiLi4vLi4vcHJvZHVjdC1lYy9wcm9kdWN0LWVjLmNvbXBvbmVudFwiO1xuXG5yZWdpc3RlcigpXG4vKipcbiAqIENvbXBvbmVuIHBhcmEgbWFuZWphciBsb3MgYmxvcXVlcyBkZSBwcm9kdWN0b3MuXG4gKiBAZXh0ZW5kcyB7QmxvY2tFY0NvbXBvbmVudH1cbiAqIEBjbGFzcyBCbG9ja1Byb2R1Y3RzRWNDb21wb25lbnRcbiAqL1xuQENvbXBvbmVudCh7XG5cdHNlbGVjdG9yOiAnYXBwLWJsb2NrLXByb2R1Y3RzLWVjJyxcblx0c3RhbmRhbG9uZTogdHJ1ZSxcblx0aW1wb3J0czogW0NvbW1vbk1vZHVsZSwgUHJvZHVjdEVjQ29tcG9uZW50XSxcblx0dGVtcGxhdGVVcmw6ICcuL2Jsb2NrLXByb2R1Y3RzLWVjLmNvbXBvbmVudC5odG1sJyxcblx0c3R5bGVVcmw6ICcuL2Jsb2NrLXByb2R1Y3RzLWVjLmNvbXBvbmVudC5zY3NzJyxcblx0c2NoZW1hczogW0NVU1RPTV9FTEVNRU5UU19TQ0hFTUFdXG59KVxuZXhwb3J0IGNsYXNzIEJsb2NrUHJvZHVjdHNFY0NvbXBvbmVudCBleHRlbmRzIEJsb2NrRWNDb21wb25lbnQgaW1wbGVtZW50cyBBZnRlclZpZXdJbml0IHtcblx0XHQvLyBQZXJzb25hbGl6YWNpw7NuIGRlIGxhcyBmbGVjaGFzIGRlIG5hdmVnYWNpw7NuXG5cdC8vIFBvciBkZWZlY3RvIHVzYSBzw61tYm9sb3MgZGUgdGV4dG8sIHBlcm8gc2UgcHVlZGVuIGVzcGVjaWZpY2FyIGltw6FnZW5lc1xuXHRASW5wdXQoKSBwcmV2QXJyb3dJbWFnZT86IHN0cmluZzsgLy8gdW5kZWZpbmVkID0gdXNhIHPDrW1ib2xvIGRlIHRleHRvXG5cdEBJbnB1dCgpIG5leHRBcnJvd0ltYWdlPzogc3RyaW5nOyAvLyB1bmRlZmluZWQgPSB1c2Egc8OtbWJvbG8gZGUgdGV4dG9cblx0QElucHV0KCkgcHJldkFycm93VGV4dDogc3RyaW5nID0gJzwnO1xuXHRASW5wdXQoKSBuZXh0QXJyb3dUZXh0OiBzdHJpbmcgPSAnPic7XG5cdC8qKlxuXHQgKiBTZXJ2aWNpbyBkZSBBbmFseXRpY3Ncblx0ICovXG5cdHByaXZhdGUgYW5hbHl0aWNzU2VydmljZTogQW5hbHl0aWNzU2VydmljZSA9IGluamVjdChBbmFseXRpY3NTZXJ2aWNlKVxuXHQvKipcblx0ICogU2lnbmFsIHV0bGl6YWRvIHBhcmEgZ3VhcmRhIGVsIGNvbnRlbmVkb3IgZGVsIGNhcnJ1c2VsXG5cdCAqL1xuXHRzd2lwZXJFbGVtZW50ID0gc2lnbmFsPFN3aXBlckNvbnRhaW5lciB8IG51bGw+KG51bGwpXG5cdC8qKlxuXHQgKiBJbnB1dCBxdWUgcmVjaWJlIHVuIHRlbXBsYXRlIHBhcmEgZWwgcHJvZHVjdG8uXG5cdCAqL1xuXHRASW5wdXQoKSBhcHBQcm9kdWN0OiBUZW1wbGF0ZVJlZjxhbnk+IHwgdW5kZWZpbmVkO1xuXHQvKipcblx0ICogQ29sZWNjacOzbiBkZSBwcm9kdWN0b3MuXG5cdCAqL1xuXHRASW5wdXQoe1xuXHRcdHJlcXVpcmVkOiB0cnVlXG5cdH0pIHByb2R1Y3RzOiBhbnk7IC8vIFByb2R1Y3RbXTtcblx0LyoqXG5cdCAqIEJsb3F1ZSBwcmluY2lwYWwgcXVlIGNvbnRpZW5lIGxvcyBwcm9kdWN0b3Ncblx0ICovXG5cdEBJbnB1dCh7XG5cdFx0cmVxdWlyZWQ6IHRydWVcblx0fSkgbWV0YTogYW55O1xuXG5cdG5nQWZ0ZXJWaWV3SW5pdCgpIHtcblx0XHR0aGlzLnNldHVwU3dpcGVyTmF2aWdhdGlvbigpO1xuXHR9XG5cdFxuXHRwcml2YXRlIGRvY3VtZW50PzogRG9jdW1lbnQ7XG5cdHByaXZhdGUgcGxhdGZvcm1JZDogYW55ID0gaW5qZWN0KFBMQVRGT1JNX0lEKVxuXG5cdC8qKlxuXHQgKiBFamVjdXRhIGVsIG3DqXRvZG8gYGFmdGVyTmV4dFJlbmRlcmBwYXJhIGNhcmdhciBsYXMgY29uZmlndXJhY2lvbmVzIG5lY2VzYXJpYXMgXG5cdCAqIHBhcmEgZWwgY2FycnVzZWwgZGVsIGJhbm5lcnMuIEVzdG8gZGViZSBzZXIgYXNpIGRlYmlkbyBhIHF1ZSB5YSBkZWJlIGVzdGFyIHByZXNlbnRlXG5cdCAqIGVuIGVsIERvbSBlbCBlbGVtZW50IGA8c3dpcGVyLWNvbnRhaW5lcj5gIHBhcmEgcG9kZXIgY29uZmlndXJhcmxvLlxuXHQgKi9cblx0Y29uc3RydWN0b3IoKSB7XG5cdFx0c3VwZXIoKVxuXHR9XG5cdC8qKlxuXHQgKiBBcGxpY2EgZWwgZXZlbnRvIGBzZWxlY3RfcHJvbW90aW9uYCBqdW50byBjb24gZWwgYmFubmVyIHF1ZSBpbnRlcmFjdHVhLlxuXHQgKiBAcGFyYW0gYmFubmVyIFxuXHQgKi9cblx0c2VsZWN0UHJvbW90aW9uKGl0ZW06IGFueSk6IHZvaWQge1xuXHRcdHRoaXMuYW5hbHl0aWNzU2VydmljZS5jYWxsRXZlbnQoJ3NlbGVjdF9wcm9tb3Rpb24nLCBpdGVtKVxuXHR9XG5cblx0LyoqXG5cdCAqIENvbmZpZ3VyYSBsYSBuYXZlZ2FjacOzbiBwZXJzb25hbGl6YWRhIGRlbCBTd2lwZXIuXG5cdCAqIEVzdGEgZnVuY2nDs24gZXN0w6EgZGlzZcOxYWRhIHBhcmEgc2VyIG1vdmlkYSBhbCBjb21wb25lbnRlIGJhc2UgQmxvY2tQcm9kdWN0c0VjQ29tcG9uZW50LlxuXHQgKiBQZXJtaXRlIHBlcnNvbmFsaXphY2nDs24gZGUgbGFzIGltw6FnZW5lcyBkZSBsYXMgZmxlY2hhcyBtZWRpYW50ZSBASW5wdXQuXG5cdCAqL1xuXHRwcml2YXRlIHNldHVwU3dpcGVyTmF2aWdhdGlvbigpIHtcblx0XHRpZiAodGhpcy5tZXRhPy5zdHlsZXM/LmNhcnJvdXNlbCAhPT0gZmFsc2UgJiYgaXNQbGF0Zm9ybUJyb3dzZXIodGhpcy5wbGF0Zm9ybUlkKSkge1xuXHRcdFx0Ly8gVXNhciBzZXRUaW1lb3V0IHBhcmEgYXNlZ3VyYXIgcXVlIGVsIHN3aXBlciBlc3TDqSBpbmljaWFsaXphZG9cblx0XHRcdHNldFRpbWVvdXQoKCkgPT4ge1xuXHRcdFx0XHR0aGlzLmluaXRpYWxpemVTd2lwZXJXaXRoQ3VzdG9tTmF2aWdhdGlvbigpO1xuXHRcdFx0fSwgMjAwKTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogSW5pY2lhbGl6YSBlbCBTd2lwZXIgY29uIG5hdmVnYWNpw7NuIHBlcnNvbmFsaXphZGEuXG5cdCAqIEVzdGEgZnVuY2nDs24gcHVlZGUgc2VyIG1vdmlkYSBhbCBjb21wb25lbnRlIGJhc2UgcGFyYSByZXV0aWxpemFjacOzbi5cblx0ICovXG5cdHByaXZhdGUgaW5pdGlhbGl6ZVN3aXBlcldpdGhDdXN0b21OYXZpZ2F0aW9uKCkge1xuXHRcdGlmICghaXNQbGF0Zm9ybUJyb3dzZXIodGhpcy5wbGF0Zm9ybUlkKSkgcmV0dXJuO1xuXHRcdFxuXHRcdGNvbnN0IHByZXZCdXR0b24gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChgJHt0aGlzLm1ldGE/LmNvZGV9LXByZXZgKTtcblx0XHRjb25zdCBuZXh0QnV0dG9uID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoYCR7dGhpcy5tZXRhPy5jb2RlfS1uZXh0YCk7XG5cdFx0Y29uc3Qgc3dpcGVyRWxlbWVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHRoaXMubWV0YT8uY29kZSkgYXMgYW55O1xuXG5cdFx0aWYgKHByZXZCdXR0b24gJiYgbmV4dEJ1dHRvbiAmJiBzd2lwZXJFbGVtZW50KSB7XG5cdFx0XHQvLyBjb25zb2xlLmxvZygnQ29uZmlndXJhbmRvIG5hdmVnYWNpw7NuIHBlcnNvbmFsaXphZGEgcGFyYTonLCB0aGlzLm1ldGE/LmNvZGUpO1xuXHRcdFx0XG5cdFx0XHRjb25zdCBzd2lwZXJDb25maWcgPSB0aGlzLmdldFN3aXBlckNvbmZpZ3VyYXRpb24oKTtcblxuXHRcdFx0Ly8gVmVyaWZpY2FyIHNpIGVsIFN3aXBlciB5YSBlc3TDoSBpbmljaWFsaXphZG9cblx0XHRcdGlmICghc3dpcGVyRWxlbWVudC5zd2lwZXIpIHtcblx0XHRcdFx0dGhpcy5pbml0aWFsaXplTmV3U3dpcGVyKHN3aXBlckVsZW1lbnQsIHN3aXBlckNvbmZpZyk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHR0aGlzLnVwZGF0ZUV4aXN0aW5nU3dpcGVyKHN3aXBlckVsZW1lbnQpO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBDb25maWd1cmFyIGxvcyBldmVudCBsaXN0ZW5lcnMgcGFyYSBsb3MgYm90b25lc1xuXHRcdFx0dGhpcy5zZXR1cE5hdmlnYXRpb25FdmVudExpc3RlbmVycyhwcmV2QnV0dG9uLCBuZXh0QnV0dG9uLCBzd2lwZXJFbGVtZW50KTtcblx0XHRcdFxuXHRcdFx0Ly8gY29uc29sZS5sb2coJ0V2ZW50IGxpc3RlbmVycyBjb25maWd1cmFkb3MgcGFyYSBsb3MgYm90b25lcyBkZSBuYXZlZ2FjacOzbicpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHQvLyBjb25zb2xlLmxvZygnTm8gc2UgcHVkaWVyb24gZW5jb250cmFyIGxvcyBlbGVtZW50b3M6Jywge1xuXHRcdFx0Ly8gXHRwcmV2QnV0dG9uOiAhIXByZXZCdXR0b24sXG5cdFx0XHQvLyBcdG5leHRCdXR0b246ICEhbmV4dEJ1dHRvbixcblx0XHRcdC8vIFx0c3dpcGVyRWxlbWVudDogISFzd2lwZXJFbGVtZW50XG5cdFx0XHQvLyB9KTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogT2J0aWVuZSBsYSBjb25maWd1cmFjacOzbiBiYXNlIGRlbCBTd2lwZXIuXG5cdCAqIEVzdGEgY29uZmlndXJhY2nDs24gcHVlZGUgc2VyIHBlcnNvbmFsaXphZGEgZW4gZWwgZnV0dXJvIG1lZGlhbnRlIEBJbnB1dC5cblx0ICovXG5cdHByaXZhdGUgZ2V0U3dpcGVyQ29uZmlndXJhdGlvbigpIHtcblx0XHRyZXR1cm4ge1xuXHRcdFx0c2xpZGVzUGVyVmlldzogJ2F1dG8nLFxuXHRcdFx0c3BhY2VCZXR3ZWVuOiAxNixcblx0XHRcdHNsaWRlc1Blckdyb3VwOiAxLCAvLyBJbXBvcnRhbnRlOiBtb3ZlcnNlIGRlIHVubyBlbiB1bm9cblx0XHRcdG5hdmlnYXRpb246IGZhbHNlLCAvLyBEZXNoYWJpbGl0YW1vcyBsYSBuYXZlZ2FjacOzbiBwb3IgZGVmZWN0b1xuXHRcdFx0cGFnaW5hdGlvbjogZmFsc2UsXG5cdFx0XHRsb29wOiB0cnVlLFxuXHRcdFx0Z3JhYkN1cnNvcjogdHJ1ZSxcblx0XHRcdGF1dG9wbGF5OiB0cnVlLFxuXHRcdFx0YnJlYWtwb2ludHM6IHtcblx0XHRcdFx0MzIwOiB7XG5cdFx0XHRcdFx0c2xpZGVzUGVyVmlldzogMSxcblx0XHRcdFx0XHRzcGFjZUJldHdlZW46IDgsXG5cdFx0XHRcdFx0c2xpZGVzUGVyR3JvdXA6IDFcblx0XHRcdFx0fSxcblx0XHRcdFx0NTc2OiB7XG5cdFx0XHRcdFx0c2xpZGVzUGVyVmlldzogMixcblx0XHRcdFx0XHRzcGFjZUJldHdlZW46IDEyLFxuXHRcdFx0XHRcdHNsaWRlc1Blckdyb3VwOiAxXG5cdFx0XHRcdH0sXG5cdFx0XHRcdDc2ODoge1xuXHRcdFx0XHRcdHNsaWRlc1BlclZpZXc6IDMsXG5cdFx0XHRcdFx0c3BhY2VCZXR3ZWVuOiAxNixcblx0XHRcdFx0XHRzbGlkZXNQZXJHcm91cDogMVxuXHRcdFx0XHR9LFxuXHRcdFx0XHQxMDI0OiB7XG5cdFx0XHRcdFx0c2xpZGVzUGVyVmlldzogNCxcblx0XHRcdFx0XHRzcGFjZUJldHdlZW46IDE2LFxuXHRcdFx0XHRcdHNsaWRlc1Blckdyb3VwOiAxXG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9O1xuXHR9XG5cblx0LyoqXG5cdCAqIEluaWNpYWxpemEgdW4gbnVldm8gU3dpcGVyIGNvbiBsYSBjb25maWd1cmFjacOzbiBwcm9wb3JjaW9uYWRhLlxuXHQgKi9cblx0cHJpdmF0ZSBpbml0aWFsaXplTmV3U3dpcGVyKHN3aXBlckVsZW1lbnQ6IGFueSwgY29uZmlnOiBhbnkpIHtcblx0XHQvLyBBc2lnbmFyIGNvbmZpZ3VyYWNpw7NuIGFsIGVsZW1lbnRvXG5cdFx0T2JqZWN0LmFzc2lnbihzd2lwZXJFbGVtZW50LCBjb25maWcpO1xuXHRcdFxuXHRcdC8vIEluaWNpYWxpemFyIGVsIFN3aXBlclxuXHRcdHN3aXBlckVsZW1lbnQuaW5pdGlhbGl6ZSgpO1xuXHRcdFxuXHRcdC8vIGNvbnNvbGUubG9nKCdTd2lwZXIgaW5pY2lhbGl6YWRvIGNvbiBjb25maWd1cmFjacOzbiBwZXJzb25hbGl6YWRhJyk7XG5cdH1cblxuXHQvKipcblx0ICogQWN0dWFsaXphIHVuIFN3aXBlciBleGlzdGVudGUgcGFyYSBhc2VndXJhciBsYSBjb25maWd1cmFjacOzbiBjb3JyZWN0YS5cblx0ICovXG5cdHByaXZhdGUgdXBkYXRlRXhpc3RpbmdTd2lwZXIoc3dpcGVyRWxlbWVudDogYW55KSB7XG5cdFx0Ly8gY29uc29sZS5sb2coJ0FjdHVhbGl6YW5kbyBjb25maWd1cmFjacOzbiBkZSBTd2lwZXIgZXhpc3RlbnRlJyk7XG5cdFx0XG5cdFx0Ly8gRm9yemFyIHNsaWRlc1Blckdyb3VwIGEgMVxuXHRcdHN3aXBlckVsZW1lbnQuc3dpcGVyLnBhcmFtcy5zbGlkZXNQZXJHcm91cCA9IDE7XG5cdFx0c3dpcGVyRWxlbWVudC5zd2lwZXIuYWxsb3dTbGlkZU5leHQgPSB0cnVlO1xuXHRcdHN3aXBlckVsZW1lbnQuc3dpcGVyLmFsbG93U2xpZGVQcmV2ID0gdHJ1ZTtcblx0XHRcblx0XHQvLyBBY3R1YWxpemFyIHRhbWJpw6luIGxvcyBicmVha3BvaW50cyBzaSBleGlzdGVuXG5cdFx0aWYgKHN3aXBlckVsZW1lbnQuc3dpcGVyLnBhcmFtcy5icmVha3BvaW50cykge1xuXHRcdFx0T2JqZWN0LmtleXMoc3dpcGVyRWxlbWVudC5zd2lwZXIucGFyYW1zLmJyZWFrcG9pbnRzKS5mb3JFYWNoKGtleSA9PiB7XG5cdFx0XHRcdHN3aXBlckVsZW1lbnQuc3dpcGVyLnBhcmFtcy5icmVha3BvaW50c1trZXldLnNsaWRlc1Blckdyb3VwID0gMTtcblx0XHRcdH0pO1xuXHRcdH1cblx0XHRcblx0XHRzd2lwZXJFbGVtZW50LnN3aXBlci51cGRhdGUoKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBDb25maWd1cmEgbG9zIGV2ZW50IGxpc3RlbmVycyBwYXJhIGxvcyBib3RvbmVzIGRlIG5hdmVnYWNpw7NuLlxuXHQgKi9cblx0cHJpdmF0ZSBzZXR1cE5hdmlnYXRpb25FdmVudExpc3RlbmVycyhwcmV2QnV0dG9uOiBFbGVtZW50LCBuZXh0QnV0dG9uOiBFbGVtZW50LCBzd2lwZXJFbGVtZW50OiBhbnkpIHtcblx0XHRwcmV2QnV0dG9uLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgKGUpID0+IHtcblx0XHRcdGUucHJldmVudERlZmF1bHQoKTtcblx0XHRcdGUuc3RvcFByb3BhZ2F0aW9uKCk7XG5cdFx0XHQvLyBjb25zb2xlLmxvZygnQ2xpY2sgZW4gYm90w7NuIGFudGVyaW9yJyk7XG5cdFx0XHRpZiAoc3dpcGVyRWxlbWVudC5zd2lwZXIpIHtcblx0XHRcdFx0c3dpcGVyRWxlbWVudC5zd2lwZXIuc2xpZGVQcmV2KCk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cblx0XHRuZXh0QnV0dG9uLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgKGUpID0+IHtcblx0XHRcdGUucHJldmVudERlZmF1bHQoKTtcblx0XHRcdGUuc3RvcFByb3BhZ2F0aW9uKCk7XG5cdFx0XHQvLyBjb25zb2xlLmxvZygnQ2xpY2sgZW4gYm90w7NuIHNpZ3VpZW50ZScpO1xuXHRcdFx0aWYgKHN3aXBlckVsZW1lbnQuc3dpcGVyKSB7XG5cdFx0XHRcdHN3aXBlckVsZW1lbnQuc3dpcGVyLnNsaWRlTmV4dCgpO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHR9XG59XG4iLCI8c2VjdGlvbiBbbmdDbGFzc109XCJ0cmltQ2xhc3NCbG9jayhtZXRhLmNvZGUpICsgJyBjb250YWluZXItZmx1aWQnXCI+XG5cbiAgICA8ZGl2IGNsYXNzPVwiYmxvY2tQcm9kdWN0IGJsb2NrLXByb2R1Y3RcIj5cbiAgICAgICAgQGlmKG1ldGEubmFtZSl7XG4gICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMTIgbXQtNFwiPlxuICAgICAgICAgICAgICAgIDxoMiAgY2xhc3M9XCJmb250LXdlaWdodC1ub3JtYWwgZm9udC1nZFwiPlxuICAgICAgICAgICAgICAgICAgICA8c3Bhbj57e21ldGEubmFtZX19PC9zcGFuPlxuICAgICAgICAgICAgICAgIDwvaDI+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIH1cblxuXG4gICAgICAgIEBpZihtZXRhLnN0eWxlcyAmJiBtZXRhLnN0eWxlcy5jYXJyb3VzZWwgPT0gZmFsc2Upe1xuICAgICAgICA8ZGl2IGNsYXNzPVwicm93IFwiPlxuICAgICAgICAgICAgQGZvciAocHJvZHVjdCBvZiBwcm9kdWN0czsgdHJhY2sgJGluZGV4KSB7XG4gICAgICAgICAgICA8ZGl2IFtjbGFzc109XCInaXRlbSAnKyAnIGNvbC0nKyAobWV0YS5zdHlsZXMuaXRlbXM/LnNtKSArICcgY29sLW1kLScgKyAobWV0YS5zdHlsZXMuaXRlbXM/Lm1kKSAgKyAnIGNvbC1sZy0nICsgKG1ldGEuc3R5bGVzLml0ZW1zPy5sZykgICsgJyBweC0yJ1wiIFtpZF09XCIkaW5kZXhcIj5cbiAgICAgICAgICAgICAgICA8IS0tIHZlcmlmaWNhIHF1ZSBzaSB2aWVuZW4gdW4gdGVtcGxhdGUgcGFyYSB1biBjdXN0b20gYXBwUHJvZHVjdCBsbGFtYWRvIFwiYXBwUHJvZHVjdFwiIGNvbiB1biBvYmpldG8gXCJwcm9kdWN0XCItIHNpbm8gdXNhIHBvciBkZWZlY3RvIGVsIGRlbCBjb3JlIC0tPlxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJhcHBQcm9kdWN0ID8gYXBwUHJvZHVjdCA6IGRlZmF1bHRBcHBQcm9kdWN0OyBjb250ZXh0OiB7cHJvZHVjdDpwcm9kdWN0fVwiPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICB9XG4gICAgICAgIDwvZGl2PlxuICAgICAgICB9IEBlbHNlIHtcbiAgICAgICAgPGRpdiBjbGFzcz1cImNvbnRhaW5lciBwb3NpdGlvbi1yZWxhdGl2ZVwiPlxuICAgICAgICAgICAgPHN3aXBlci1jb250YWluZXIgXG4gICAgICAgICAgICAgICAgaW5pdD1cImZhbHNlXCIgXG4gICAgICAgICAgICAgICAgW2lkXT1cIm1ldGE/LmNvZGVcIlxuICAgICAgICAgICAgICAgIHNsaWRlcy1wZXItdmlldz1cImF1dG9cIlxuICAgICAgICAgICAgICAgIHNwYWNlLWJldHdlZW49XCIxNlwiXG4gICAgICAgICAgICAgICAgc2xpZGVzLXBlci1ncm91cD1cIjFcIlxuICAgICAgICAgICAgICAgIG5hdmlnYXRpb249XCJmYWxzZVwiXG4gICAgICAgICAgICAgICAgcGFnaW5hdGlvbj1cImZhbHNlXCJcbiAgICAgICAgICAgICAgICBsb29wPVwiZmFsc2VcIj5cbiAgICAgICAgICAgICAgICBAZm9yIChwcm9kdWN0IG9mIHByb2R1Y3RzOyB0cmFjayAkaW5kZXgpIHtcbiAgICAgICAgICAgICAgICA8c3dpcGVyLXNsaWRlIGlkPVwic3dpcGVyLXNsaWRlXCI+XG4gICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICAgICAgICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwiYXBwUHJvZHVjdCA/IGFwcFByb2R1Y3QgOiBkZWZhdWx0QXBwUHJvZHVjdDsgY29udGV4dDoge3Byb2R1Y3Q6cHJvZHVjdH1cIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICA8L3N3aXBlci1zbGlkZT5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICA8L3N3aXBlci1jb250YWluZXI+XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIDwhLS0gQm90b25lcyBkZSBuYXZlZ2FjacOzbiBwZXJzb25hbGl6YWRvcyAtLT5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzd2lwZXItbmF2aWdhdGlvblwiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzd2lwZXItYnV0dG9uLXByZXZcIiBbaWRdPVwibWV0YT8uY29kZSArICctcHJldidcIj5cbiAgICAgICAgICAgICAgICAgICAgQGlmKHByZXZBcnJvd0ltYWdlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICA8aW1nIFtzcmNdPVwicHJldkFycm93SW1hZ2VcIiBhbHQ9XCJBbnRlcmlvclwiIC8+XG4gICAgICAgICAgICAgICAgICAgIH0gQGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJhcnJvdy10ZXh0XCI+e3twcmV2QXJyb3dUZXh0fX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic3dpcGVyLWJ1dHRvbi1uZXh0XCIgW2lkXT1cIm1ldGE/LmNvZGUgKyAnLW5leHQnXCI+XG4gICAgICAgICAgICAgICAgICAgIEBpZihuZXh0QXJyb3dJbWFnZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBbc3JjXT1cIm5leHRBcnJvd0ltYWdlXCIgYWx0PVwiU2lndWllbnRlXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgfSBAZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImFycm93LXRleHRcIj57e25leHRBcnJvd1RleHR9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICB9XG4gICAgPC9kaXY+XG48L3NlY3Rpb24+XG5cblxuPCEtLSBjb21wb25lbnRlIHBvciBkZWZlY3RvICh0b21hcmEgY29tbyBwcm9kdWN0byBlbCBjb250ZXh0byBwYXNhZG8gY29tbyBcInByb2R1Y3RcIikgLS0+XG48bmctdGVtcGxhdGUgI2RlZmF1bHRBcHBQcm9kdWN0IGxldC1wcm9kdWN0PVwicHJvZHVjdFwiPlxuICAgIDxhcHAtcHJvZHVjdC1lYyBbcHJvZHVjdF09XCJwcm9kdWN0XCI+PC9hcHAtcHJvZHVjdC1lYz5cbjwvbmctdGVtcGxhdGU+Il19
@@ -2,7 +2,7 @@ import { Component, inject, Input, PLATFORM_ID, signal } from '@angular/core';
2
2
  import { AuthService, FiltersService, OptionsService, ProductsService } from '../../ec-services';
3
3
  import { ActivatedRoute } from '@angular/router';
4
4
  import { CoreConstantsService } from '../../constants';
5
- import { combineLatest } from 'rxjs';
5
+ import { combineLatest, distinctUntilChanged, map, Subject, takeUntil } from 'rxjs';
6
6
  import { InfiniteScrollDirective } from "ngx-infinite-scroll";
7
7
  import { isPlatformBrowser } from '@angular/common';
8
8
  import * as i0 from "@angular/core";
@@ -10,6 +10,7 @@ export class CollectionEcComponent {
10
10
  _productsService = inject(ProductsService);
11
11
  _activeRoute = inject(ActivatedRoute);
12
12
  _optionsService = inject(OptionsService);
13
+ _filtersService = inject(FiltersService);
13
14
  params$ = this._activeRoute.params;
14
15
  //public ready = this._optionsService.ready
15
16
  queryParams$ = this._activeRoute.queryParams;
@@ -21,40 +22,63 @@ export class CollectionEcComponent {
21
22
  defaultFilters = [];
22
23
  loading = false;
23
24
  countProducts = signal(0);
24
- loaded = false;
25
+ loaded = signal(false);
25
26
  optionsFilters = ['all'];
26
27
  filters_sort = [];
27
- _filtersService = inject(FiltersService);
28
28
  filters$ = this._filtersService.filters$;
29
29
  ready$ = this._filtersService.ready$;
30
30
  window;
31
31
  isList = false;
32
+ destroy$ = new Subject();
32
33
  setAsList = (value) => this.isList = value;
33
34
  ngOnInit() {
34
- this.getProducts();
35
- this.window?.scroll(0, 0);
35
+ if (isPlatformBrowser(this.platformId)) {
36
+ this.window?.scroll(0, 0);
37
+ }
38
+ combineLatest([this.params$, this.queryParams$])
39
+ .pipe(map(([params, query]) => ({ params, query })), distinctUntilChanged((a, b) => JSON.stringify(a) === JSON.stringify(b)), takeUntil(this.destroy$))
40
+ .subscribe(({ params, query }) => {
41
+ // Guardamos el tipo de ruta actual en las constantes (ej: 'categories', 'sections', etc.)
42
+ const routeType = params['type'] || null;
43
+ this.constanst.setCurrentRouteType(routeType);
44
+ const paginationSettings = {
45
+ latest: true,
46
+ limit: 10,
47
+ type: params['type'] || null,
48
+ value: params['value'] || null
49
+ };
50
+ // Punto clave:
51
+ // A partir de la URL (params + query) reconstruimos los filtros
52
+ // (categorías, atributos, rango de precios, etc.)
53
+ // Esto permite:
54
+ // - Soportar F5 / recarga sin perder filtros
55
+ // - Navegar con URL compartibles (deep linking)
56
+ this._filtersService.hydrateFromRoute(paginationSettings, params, query);
57
+ });
36
58
  }
37
59
  //protected readonly questions = signal<Question[]>([]);
38
60
  total = 0;
39
61
  platformId = inject(PLATFORM_ID);
40
62
  constructor() {
63
+ // Guardamos window sólo en Browser para evitar errores en SSR
41
64
  if (isPlatformBrowser(this.platformId)) {
42
65
  this.window = window;
43
66
  }
44
- }
45
- getProducts() {
46
- combineLatest([this.params$, this.queryParams$]).subscribe({
47
- next: ([params, queryParams]) => {
48
- const paginationSettings = {
49
- latest: true,
50
- limit: 10,
51
- type: params['type'] || null,
52
- value: params['value'] || null
53
- };
54
- this._productsService.getProductsForFilter(paginationSettings, queryParams["search"]);
67
+ // Nos suscribimos al stream de productos.
68
+ // Cuando ProductsService emite, marcamos `loaded` en true, pero solo en Browser.
69
+ // En SSR no lo marcamos para evitar cambios de estado innecesarios.
70
+ this.products$
71
+ .pipe(takeUntil(this.destroy$))
72
+ .subscribe(products => {
73
+ if (isPlatformBrowser(this.platformId)) {
74
+ this.loaded.set(true);
55
75
  }
56
76
  });
57
77
  }
78
+ ngOnDestroy() {
79
+ this.destroy$.next();
80
+ this.destroy$.complete();
81
+ }
58
82
  onScroll() {
59
83
  this.loading = true;
60
84
  this._productsService.updateProducts();
@@ -72,4 +96,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
72
96
  }], ctorParameters: () => [], propDecorators: { optionsFilters: [{
73
97
  type: Input
74
98
  }] } });
75
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29sbGVjdGlvbi1lYy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZy1lYXN5Y29tbWVyY2UtdjE4L3NyYy9saWIvZWMtY29tcG9uZW50cy9jb2xsZWN0aW9uLWVjL2NvbGxlY3Rpb24tZWMuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmctZWFzeWNvbW1lcmNlLXYxOC9zcmMvbGliL2VjLWNvbXBvbmVudHMvY29sbGVjdGlvbi1lYy9jb2xsZWN0aW9uLWVjLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBbUIsU0FBUyxFQUFnQixNQUFNLEVBQUUsS0FBSyxFQUFVLFdBQVcsRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFckgsT0FBTyxFQUFFLFdBQVcsRUFBRSxjQUFjLEVBQUUsY0FBYyxFQUFFLGVBQWUsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ2pHLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUNqRCxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUN2RCxPQUFPLEVBQUUsYUFBYSxFQUFtQyxNQUFNLE1BQU0sQ0FBQztBQUV0RSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUM5RCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQzs7QUFRcEQsTUFBTSxPQUFPLHFCQUFxQjtJQUV2QixnQkFBZ0IsR0FBb0IsTUFBTSxDQUFDLGVBQWUsQ0FBQyxDQUFBO0lBQzNELFlBQVksR0FBbUIsTUFBTSxDQUFDLGNBQWMsQ0FBQyxDQUFBO0lBQ3JELGVBQWUsR0FBbUIsTUFBTSxDQUFDLGNBQWMsQ0FBQyxDQUFBO0lBRTNELE9BQU8sR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQTtJ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bnQsIEhvc3RMaXN0ZW5lciwgaW5qZWN0LCBJbnB1dCwgT25Jbml0LCBQTEFURk9STV9JRCwgc2lnbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBEZWZhdWx0RmlsdGVyLCBGaWx0ZXJUeXBlLCBQYWdpbmF0aW9uU2V0dGluZ3MsIFByb2R1Y3QgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzJztcbmltcG9ydCB7IEF1dGhTZXJ2aWNlLCBGaWx0ZXJzU2VydmljZSwgT3B0aW9uc1NlcnZpY2UsIFByb2R1Y3RzU2VydmljZSB9IGZyb20gJy4uLy4uL2VjLXNlcnZpY2VzJztcbmltcG9ydCB7IEFjdGl2YXRlZFJvdXRlIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7IENvcmVDb25zdGFudHNTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vY29uc3RhbnRzJztcbmltcG9ydCB7IGNvbWJpbmVMYXRlc3QsIGZvcmtKb2luLCBtYXAsIE9ic2VydmFibGUsIHRha2UgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IEZpbHRlciB9IGZyb20gJy4uLy4uL2NsYXNzZXMnO1xuaW1wb3J0IHsgSW5maW5pdGVTY3JvbGxEaXJlY3RpdmUgfSBmcm9tIFwibmd4LWluZmluaXRlLXNjcm9sbFwiO1xuaW1wb3J0IHsgaXNQbGF0Zm9ybUJyb3dzZXIgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuQENvbXBvbmVudCh7XG5cdHNlbGVjdG9yOiAnbGliLWNvbGxlY3Rpb24tZWMnLFxuXHRzdGFuZGFsb25lOiB0cnVlLFxuXHRpbXBvcnRzOiBbSW5maW5pdGVTY3JvbGxEaXJlY3RpdmVdLFxuXHR0ZW1wbGF0ZVVybDogJy4vY29sbGVjdGlvbi1lYy5jb21wb25lbnQuaHRtbCcsXG5cdHN0eWxlVXJsOiAnLi9jb2xsZWN0aW9uLWVjLmNvbXBvbmVudC5zY3NzJ1xufSlcbmV4cG9ydCBjbGFzcyBDb2xsZWN0aW9uRWNDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuXG5cdHByb3RlY3RlZCBfcHJvZHVjdHNTZXJ2aWNlOiBQcm9kdWN0c1NlcnZpY2UgPSBpbmplY3QoUHJvZHVjdHNTZXJ2aWNlKVxuXHRwcm90ZWN0ZWQgX2FjdGl2ZVJvdXRlOiBBY3RpdmF0ZWRSb3V0ZSA9IGluamVjdChBY3RpdmF0ZWRSb3V0ZSlcblx0cHJvdGVjdGVkIF9vcHRpb25zU2VydmljZTogT3B0aW9uc1NlcnZpY2UgPSBpbmplY3QoT3B0aW9uc1NlcnZpY2UpXG5cblx0cHVibGljIHBhcmFtcyQgPSB0aGlzLl9hY3RpdmVSb3V0ZS5wYXJhbXNcblx0Ly9wdWJsaWMgcmVhZHkgPSB0aGlzLl9vcHRpb25zU2VydmljZS5yZWFkeVxuXHRwdWJsaWMgcXVlcnlQYXJhbXMkID0gdGhpcy5fYWN0aXZlUm91dGUucXVlcnlQYXJhbXNcblx0cHVibGljIHByb2R1Y3RzJCA9IHRoaXMuX3Byb2R1Y3RzU2VydmljZS5wcm9kdWN0cyRcblx0Ly9wdWJsaWMgcHJvZHVjdHMkID0gW11cblxuXHRwdWJsaWMgYXV0aFNlcnZpY2U6IEF1dGhTZXJ2aWNlID0gaW5qZWN0KEF1dGhTZXJ2aWNlKVxuXHRwdWJsaWMgY29uc3RhbnN0OiBDb3JlQ29uc3RhbnRzU2VydmljZSA9IGluamVjdChDb3JlQ29uc3RhbnRzU2VydmljZSlcblxuXHRwdWJsaWMgcHJvZHVjdHM6IFByb2R1Y3RbXSA9IFtdO1xuXHRwdWJsaWMgZGVmYXVsdEZpbHRlcnM6IERlZmF1bHRGaWx0ZXJbXSA9IFtdO1xuXHRwdWJsaWMgbG9hZGluZzogQm9vbGVhbiA9IGZhbHNlO1xuXHRwdWJsaWMgY291bnRQcm9kdWN0cyA9IHNpZ25hbDxudW1iZXI+KDApXG5cdHByaXZhdGUgbG9hZGVkID0gZmFsc2U7XG5cblx0QElucHV0KCkgb3B0aW9uc0ZpbHRlcnM6IEZpbHRlclR5cGVbXSA9IFsnYWxsJ107XG5cblx0ZmlsdGVyc19zb3J0OiBGaWx0ZXJbXSA9IFtdO1xuXG5cdHByaXZhdGUgX2ZpbHRlcnNTZXJ2aWNlOiBGaWx0ZXJzU2VydmljZSA9IGluamVjdChGaWx0ZXJzU2VydmljZSlcblx0cHVibGljIGZpbHRlcnMkOiBPYnNlcnZhYmxlPEZpbHRlcltdPiA9IHRoaXMuX2ZpbHRlcnNTZXJ2aWNlLmZpbHRlcnMkO1xuXHRwdWJsaWMgcmVhZHkkOiBPYnNlcnZhYmxlPGJvb2xlYW4+ID0gdGhpcy5fZmlsdGVyc1NlcnZpY2UucmVhZHkkO1xuXG5cdHByaXZhdGUgd2luZG93PzogV2luZG93O1xuXG5cdHB1YmxpYyBpc0xpc3Q6IGJvb2xlYW4gPSBmYWxzZVxuXHRzZXRBc0xpc3QgPSAodmFsdWU6IGJvb2xlYW4pID0+IHRoaXMuaXNMaXN0ID0gdmFsdWVcblxuXHRuZ09uSW5pdCgpOiB2b2lkIHtcblx0XHR0aGlzLmdldFByb2R1Y3RzKCk7XG5cdFx0dGhpcy53aW5kb3c/LnNjcm9sbCgwLCAwKVxuXHR9XG5cblx0Ly9wcm90ZWN0ZWQgcmVhZG9ubHkgcXVlc3Rpb25zID0gc2lnbmFsPFF1ZXN0aW9uW10+KFtdKTtcblx0cHJpdmF0ZSB0b3RhbCA9IDA7XG5cdHByaXZhdGUgcGxhdGZvcm1JZDogYW55ID0gaW5qZWN0KFBMQVRGT1JNX0lEKVxuXG5cdGNvbnN0cnVjdG9yKCkge1xuXHRcdGlmIChpc1BsYXRmb3JtQnJvd3Nlcih0aGlzLnBsYXRmb3JtSWQpKSB7XG5cdFx0XHR0aGlzLndpbmRvdyA9IHdpbmRvd1xuXG5cdFx0fVxuXHR9XG5cblx0Z2V0UHJvZHVjdHMoKTogdm9pZCB7XG5cdFx0Y29tYmluZUxhdGVzdChbdGhpcy5wYXJhbXMkLCB0aGlzLnF1ZXJ5UGFyYW1zJF0pLnN1YnNjcmliZSh7XG5cdFx0XHRuZXh0OiAoW3BhcmFtcywgcXVlcnlQYXJhbXNdKSA9PiB7XG5cdFx0XHRcdGNvbnN0IHBhZ2luYXRpb25TZXR0aW5nczogUGFnaW5hdGlvblNldHRpbmdzID0ge1xuXHRcdFx0XHRcdGxhdGVzdDogdHJ1ZSxcblx0XHRcdFx0XHRsaW1pdDogMTAsXG5cdFx0XHRcdFx0dHlwZTogcGFyYW1zWyd0eXBlJ10gfHwgbnVsbCxcblx0XHRcdFx0XHR2YWx1ZTogcGFyYW1zWyd2YWx1ZSddIHx8IG51bGxcblx0XHRcdFx0fVxuXHRcdFx0XHR0aGlzLl9wcm9kdWN0c1NlcnZpY2UuZ2V0UHJvZHVjdHNGb3JGaWx0ZXIocGFnaW5hdGlvblNldHRpbmdzLCBxdWVyeVBhcmFtc1tcInNlYXJjaFwiXSk7XG5cdFx0XHR9XG5cdFx0fSlcblx0fVxuXG5cdG9uU2Nyb2xsKCkge1xuXHRcdHRoaXMubG9hZGluZyA9IHRydWU7XG5cdFx0dGhpcy5fcHJvZHVjdHNTZXJ2aWNlLnVwZGF0ZVByb2R1Y3RzKClcblx0fVxuXG5cdC8vIE3DqXRvZG8gcGFyYSBzYWJlciBzaSB1biBwcm9kdWN0byB0aWVuZSBzdG9jayB1c2FuZG8gZWwgc2VydmljaW9cblx0cHVibGljIHByb2R1Y3RIYXNTdG9jayhwcm9kdWN0OiBQcm9kdWN0KTogYm9vbGVhbiB7XG5cdFx0cmV0dXJuIHRoaXMuX3Byb2R1Y3RzU2VydmljZS5oYXNTdG9jayhwcm9kdWN0KTtcblx0fVxufVxuIiwiPHNlY3Rpb24gY2xhc3M9XCJjb250YWluZXIteGwgbWItNVwiPlxuICAgIDxkaXYgY2xhc3M9XCJyb3cgbS0wIHAtMFwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiZC1ub25lIGQtbGctYmxvY2sgY29sLTNcIj5cbiAgICAgICAgICAgIDwhLS1GaWx0cm9zLS0+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMTIgY29sLWxnLTkgbXQtMiBwLTBcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb250YWluZXJcIj5cbiAgICAgICAgICAgICAgICA8IS0tIEBmb3IoWydhJywgJ2InLCAnYycsICdkJ10gYXMgcHJvZHVjdCl7XG5cbiAgICAgICAgICAgICAgICB9IC0tPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgPC9kaXY+XG48L3NlY3Rpb24+XG4iXX0=
99
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29sbGVjdGlvbi1lYy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZy1lYXN5Y29tbWVyY2UtdjE4L3NyYy9saWIvZWMtY29tcG9uZW50cy9jb2xsZWN0aW9uLWVjL2NvbGxlY3Rpb24tZWMuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmctZWFzeWNvbW1lcmNlLXYxOC9zcmMvbGliL2VjLWNvbXBvbmVudHMvY29sbGVjdGlvbi1lYy9jb2xsZWN0aW9uLWVjLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBbUIsU0FBUyxFQUFnQixNQUFNLEVBQUUsS0FBSyxFQUFxQixXQUFXLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRWhJLE9BQU8sRUFBRSxXQUFXLEVBQUUsY0FBYyxFQUFFLGNBQWMsRUFBRSxlQUFlLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUNqRyxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDakQsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDdkQsT0FBTyxFQUFFLGFBQWEsRUFBRSxvQkFBb0IsRUFBWSxHQUFHLEVBQWMsT0FBTyxFQUFRLFNBQVMsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUVoSCxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUM5RCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQzs7QUFRcEQsTUFBTSxPQUFPLHFCQUFxQjtJQUV2QixnQkFBZ0IsR0FBb0IsTUFBTSxDQUFDLGVBQWUsQ0FBQyxDQUFBO0lBQzNELFlBQVksR0FBbUIsTUFBTSxDQUFDLGNBQWMsQ0FBQyxDQUFBO0lBQ3JELGVBQWUsR0FBbUIsTUFBTSxDQUFDLGNBQWMsQ0FBQyxDQUFBO0lBQzFE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bnRlbnQiOlsiaW1wb3J0IHsgYWZ0ZXJOZXh0UmVuZGVyLCBDb21wb25lbnQsIEhvc3RMaXN0ZW5lciwgaW5qZWN0LCBJbnB1dCwgT25EZXN0cm95LCBPbkluaXQsIFBMQVRGT1JNX0lELCBzaWduYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IERlZmF1bHRGaWx0ZXIsIEZpbHRlclR5cGUsIFBhZ2luYXRpb25TZXR0aW5ncywgUHJvZHVjdCB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMnO1xuaW1wb3J0IHsgQXV0aFNlcnZpY2UsIEZpbHRlcnNTZXJ2aWNlLCBPcHRpb25zU2VydmljZSwgUHJvZHVjdHNTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vZWMtc2VydmljZXMnO1xuaW1wb3J0IHsgQWN0aXZhdGVkUm91dGUgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHsgQ29yZUNvbnN0YW50c1NlcnZpY2UgfSBmcm9tICcuLi8uLi9jb25zdGFudHMnO1xuaW1wb3J0IHsgY29tYmluZUxhdGVzdCwgZGlzdGluY3RVbnRpbENoYW5nZWQsIGZvcmtKb2luLCBtYXAsIE9ic2VydmFibGUsIFN1YmplY3QsIHRha2UsIHRha2VVbnRpbCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgRmlsdGVyIH0gZnJvbSAnLi4vLi4vY2xhc3Nlcyc7XG5pbXBvcnQgeyBJbmZpbml0ZVNjcm9sbERpcmVjdGl2ZSB9IGZyb20gXCJuZ3gtaW5maW5pdGUtc2Nyb2xsXCI7XG5pbXBvcnQgeyBpc1BsYXRmb3JtQnJvd3NlciB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5AQ29tcG9uZW50KHtcblx0c2VsZWN0b3I6ICdsaWItY29sbGVjdGlvbi1lYycsXG5cdHN0YW5kYWxvbmU6IHRydWUsXG5cdGltcG9ydHM6IFtJbmZpbml0ZVNjcm9sbERpcmVjdGl2ZV0sXG5cdHRlbXBsYXRlVXJsOiAnLi9jb2xsZWN0aW9uLWVjLmNvbXBvbmVudC5odG1sJyxcblx0c3R5bGVVcmw6ICcuL2NvbGxlY3Rpb24tZWMuY29tcG9uZW50LnNjc3MnXG59KVxuZXhwb3J0IGNsYXNzIENvbGxlY3Rpb25FY0NvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcblxuXHRwcm90ZWN0ZWQgX3Byb2R1Y3RzU2VydmljZTogUHJvZHVjdHNTZXJ2aWNlID0gaW5qZWN0KFByb2R1Y3RzU2VydmljZSlcblx0cHJvdGVjdGVkIF9hY3RpdmVSb3V0ZTogQWN0aXZhdGVkUm91dGUgPSBpbmplY3QoQWN0aXZhdGVkUm91dGUpXG5cdHByb3RlY3RlZCBfb3B0aW9uc1NlcnZpY2U6IE9wdGlvbnNTZXJ2aWNlID0gaW5qZWN0KE9wdGlvbnNTZXJ2aWNlKVxuXHRwcml2YXRlIF9maWx0ZXJzU2VydmljZTogRmlsdGVyc1NlcnZpY2UgPSBpbmplY3QoRmlsdGVyc1NlcnZpY2UpO1xuXG5cdHB1YmxpYyBwYXJhbXMkID0gdGhpcy5fYWN0aXZlUm91dGUucGFyYW1zXG5cdC8vcHVibGljIHJlYWR5ID0gdGhpcy5fb3B0aW9uc1NlcnZpY2UucmVhZHlcblx0cHVibGljIHF1ZXJ5UGFyYW1zJCA9IHRoaXMuX2FjdGl2ZVJvdXRlLnF1ZXJ5UGFyYW1zXG5cdHB1YmxpYyBwcm9kdWN0cyQgPSB0aGlzLl9wcm9kdWN0c1NlcnZpY2UucHJvZHVjdHMkXG5cdC8vcHVibGljIHByb2R1Y3RzJCA9IFtdXG5cblx0cHVibGljIGF1dGhTZXJ2aWNlOiBBdXRoU2VydmljZSA9IGluamVjdChBdXRoU2VydmljZSlcblx0cHVibGljIGNvbnN0YW5zdDogQ29yZUNvbnN0YW50c1NlcnZpY2UgPSBpbmplY3QoQ29yZUNvbnN0YW50c1NlcnZpY2UpXG5cblx0cHVibGljIHByb2R1Y3RzOiBQcm9kdWN0W10gPSBbXTtcblx0cHVibGljIGRlZmF1bHRGaWx0ZXJzOiBEZWZhdWx0RmlsdGVyW10gPSBbXTtcblx0cHVibGljIGxvYWRpbmc6IEJvb2xlYW4gPSBmYWxzZTtcblx0cHVibGljIGNvdW50UHJvZHVjdHMgPSBzaWduYWw8bnVtYmVyPigwKVxuXHRwcml2YXRlIGxvYWRlZCA9IHNpZ25hbChmYWxzZSk7XG5cblx0QElucHV0KCkgb3B0aW9uc0ZpbHRlcnM6IEZpbHRlclR5cGVbXSA9IFsnYWxsJ107XG5cblx0ZmlsdGVyc19zb3J0OiBGaWx0ZXJbXSA9IFtdO1xuXG5cdHB1YmxpYyBmaWx0ZXJzJDogT2JzZXJ2YWJsZTxGaWx0ZXJbXT4gPSB0aGlzLl9maWx0ZXJzU2VydmljZS5maWx0ZXJzJDtcblx0cHVibGljIHJlYWR5JDogT2JzZXJ2YWJsZTxib29sZWFuPiA9IHRoaXMuX2ZpbHRlcnNTZXJ2aWNlLnJlYWR5JDtcblxuXHRwcml2YXRlIHdpbmRvdz86IFdpbmRvdztcblxuXHRwdWJsaWMgaXNMaXN0OiBib29sZWFuID0gZmFsc2Vcblx0cHJpdmF0ZSBkZXN0cm95JCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG5cdHNldEFzTGlzdCA9ICh2YWx1ZTogYm9vbGVhbikgPT4gdGhpcy5pc0xpc3QgPSB2YWx1ZVxuXG5cdG5nT25Jbml0KCk6IHZvaWQge1xuXHRcdGlmIChpc1BsYXRmb3JtQnJvd3Nlcih0aGlzLnBsYXRmb3JtSWQpKSB7XG5cdFx0XHR0aGlzLndpbmRvdz8uc2Nyb2xsKDAsIDApO1xuXHRcdH1cblxuXHRcdGNvbWJpbmVMYXRlc3QoW3RoaXMucGFyYW1zJCwgdGhpcy5xdWVyeVBhcmFtcyRdKVxuXHRcdFx0LnBpcGUoXG5cdFx0XHRcdG1hcCgoW3BhcmFtcywgcXVlcnldKSA9PiAoeyBwYXJhbXMsIHF1ZXJ5IH0pKSxcblx0XHRcdFx0ZGlzdGluY3RVbnRpbENoYW5nZWQoKGEsIGIpID0+IEpTT04uc3RyaW5naWZ5KGEpID09PSBKU09OLnN0cmluZ2lmeShiKSksXG5cdFx0XHRcdHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKVxuXHRcdFx0KVxuXHRcdFx0LnN1YnNjcmliZSgoeyBwYXJhbXMsIHF1ZXJ5IH0pID0+IHtcblx0XHRcdFx0Ly8gR3VhcmRhbW9zIGVsIHRpcG8gZGUgcnV0YSBhY3R1YWwgZW4gbGFzIGNvbnN0YW50ZXMgKGVqOiAnY2F0ZWdvcmllcycsICdzZWN0aW9ucycsIGV0Yy4pXG5cdFx0XHRcdGNvbnN0IHJvdXRlVHlwZSA9IHBhcmFtc1sndHlwZSddIHx8IG51bGw7XG5cdFx0XHRcdHRoaXMuY29uc3RhbnN0LnNldEN1cnJlbnRSb3V0ZVR5cGUocm91dGVUeXBlKTtcblxuXHRcdFx0XHRjb25zdCBwYWdpbmF0aW9uU2V0dGluZ3M6IFBhZ2luYXRpb25TZXR0aW5ncyA9IHtcblx0XHRcdFx0XHRsYXRlc3Q6IHRydWUsXG5cdFx0XHRcdFx0bGltaXQ6IDEwLFxuXHRcdFx0XHRcdHR5cGU6IHBhcmFtc1sndHlwZSddIHx8IG51bGwsXG5cdFx0XHRcdFx0dmFsdWU6IHBhcmFtc1sndmFsdWUnXSB8fCBudWxsXG5cdFx0XHRcdH07XG5cblx0XHRcdFx0Ly8gIFB1bnRvIGNsYXZlOlxuXHRcdFx0XHQvLyAgICBBIHBhcnRpciBkZSBsYSBVUkwgKHBhcmFtcyArIHF1ZXJ5KSByZWNvbnN0cnVpbW9zIGxvcyBmaWx0cm9zXG5cdFx0XHRcdC8vICAgIChjYXRlZ29yw61hcywgYXRyaWJ1dG9zLCByYW5nbyBkZSBwcmVjaW9zLCBldGMuKVxuXHRcdFx0XHQvLyAgICBFc3RvIHBlcm1pdGU6XG5cdFx0XHRcdC8vICAgIC0gU29wb3J0YXIgRjUgLyByZWNhcmdhIHNpbiBwZXJkZXIgZmlsdHJvc1xuXHRcdFx0XHQvLyAgICAtIE5hdmVnYXIgY29uIFVSTCBjb21wYXJ0aWJsZXMgKGRlZXAgbGlua2luZylcblx0XHRcdFx0dGhpcy5fZmlsdGVyc1NlcnZpY2UuaHlkcmF0ZUZyb21Sb3V0ZShwYWdpbmF0aW9uU2V0dGluZ3MsIHBhcmFtcywgcXVlcnkpO1xuXHRcdFx0fSk7XG5cdH1cblxuXHQvL3Byb3RlY3RlZCByZWFkb25seSBxdWVzdGlvbnMgPSBzaWduYWw8UXVlc3Rpb25bXT4oW10pO1xuXHRwcml2YXRlIHRvdGFsID0gMDtcblx0cHJpdmF0ZSBwbGF0Zm9ybUlkOiBhbnkgPSBpbmplY3QoUExBVEZPUk1fSUQpXG5cblx0Y29uc3RydWN0b3IoKSB7XG5cdFx0Ly8gR3VhcmRhbW9zIHdpbmRvdyBzw7NsbyBlbiBCcm93c2VyIHBhcmEgZXZpdGFyIGVycm9yZXMgZW4gU1NSXG5cdFx0aWYgKGlzUGxhdGZvcm1Ccm93c2VyKHRoaXMucGxhdGZvcm1JZCkpIHtcblx0XHRcdHRoaXMud2luZG93ID0gd2luZG93XG5cblx0XHR9XG5cdFx0Ly8gIE5vcyBzdXNjcmliaW1vcyBhbCBzdHJlYW0gZGUgcHJvZHVjdG9zLlxuXHRcdC8vICAgIEN1YW5kbyBQcm9kdWN0c1NlcnZpY2UgZW1pdGUsIG1hcmNhbW9zIGBsb2FkZWRgIGVuIHRydWUsIHBlcm8gc29sbyBlbiBCcm93c2VyLlxuXHRcdC8vICAgIEVuIFNTUiBubyBsbyBtYXJjYW1vcyBwYXJhIGV2aXRhciBjYW1iaW9zIGRlIGVzdGFkbyBpbm5lY2VzYXJpb3MuXG5cdFx0dGhpcy5wcm9kdWN0cyRcblx0XHRcdC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSlcblx0XHRcdC5zdWJzY3JpYmUocHJvZHVjdHMgPT4ge1xuXHRcdFx0XHRpZiAoaXNQbGF0Zm9ybUJyb3dzZXIodGhpcy5wbGF0Zm9ybUlkKSkge1xuXHRcdFx0XHRcdHRoaXMubG9hZGVkLnNldCh0cnVlKTtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdH1cblxuXHRuZ09uRGVzdHJveSgpOiB2b2lkIHtcblx0XHR0aGlzLmRlc3Ryb3kkLm5leHQoKTtcblx0XHR0aGlzLmRlc3Ryb3kkLmNvbXBsZXRlKCk7XG5cdH1cblxuXHRvblNjcm9sbCgpIHtcblx0XHR0aGlzLmxvYWRpbmcgPSB0cnVlO1xuXHRcdHRoaXMuX3Byb2R1Y3RzU2VydmljZS51cGRhdGVQcm9kdWN0cygpXG5cdH1cblxuXHQvLyBNw6l0b2RvIHBhcmEgc2FiZXIgc2kgdW4gcHJvZHVjdG8gdGllbmUgc3RvY2sgdXNhbmRvIGVsIHNlcnZpY2lvXG5cdHB1YmxpYyBwcm9kdWN0SGFzU3RvY2socHJvZHVjdDogUHJvZHVjdCk6IGJvb2xlYW4ge1xuXHRcdHJldHVybiB0aGlzLl9wcm9kdWN0c1NlcnZpY2UuaGFzU3RvY2socHJvZHVjdCk7XG5cdH1cbn1cbiIsIjxzZWN0aW9uIGNsYXNzPVwiY29udGFpbmVyLXhsIG1iLTVcIj5cbiAgICA8ZGl2IGNsYXNzPVwicm93IG0tMCBwLTBcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImQtbm9uZSBkLWxnLWJsb2NrIGNvbC0zXCI+XG4gICAgICAgICAgICA8IS0tRmlsdHJvcy0tPlxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTEyIGNvbC1sZy05IG10LTIgcC0wXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29udGFpbmVyXCI+XG4gICAgICAgICAgICAgICAgPCEtLSBAZm9yKFsnYScsICdiJywgJ2MnLCAnZCddIGFzIHByb2R1Y3Qpe1xuXG4gICAgICAgICAgICAgICAgfSAtLT5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cblxuICAgIDwvZGl2PlxuPC9zZWN0aW9uPlxuIl19
@@ -3,7 +3,7 @@ import { FiltersService, AuthService } from '../../ec-services';
3
3
  import { Filter } from '../../classes';
4
4
  import { ProductsService } from '../../ec-services/products.service';
5
5
  import { CoreConstantsService } from '../../constants';
6
- import { Router } from '@angular/router';
6
+ import { ActivatedRoute, Router } from '@angular/router';
7
7
  import { PriceRangeFilter } from '../../classes/filters/price_range-filter';
8
8
  import { ChannelService } from '../../ec-services/channel.service';
9
9
  import * as i0 from "@angular/core";
@@ -19,6 +19,7 @@ export class FiltersEcComponent {
19
19
  injector = inject(Injector);
20
20
  isAuthenticated$ = this._authService.isAuthenticated();
21
21
  hidePrices = false;
22
+ route = inject(ActivatedRoute);
22
23
  setSelect;
23
24
  ngOnInit() {
24
25
  }
@@ -48,26 +49,56 @@ export class FiltersEcComponent {
48
49
  .pop()
49
50
  selectedOption && this._filtersService.setFilterSelected(this.filters[0], selectedOption) */
50
51
  }
52
+ /**
53
+ * Maneja el click sobre un elemento de filtro (categoría, atributo, etc.).
54
+ *
55
+ * - Para categorías: navega a la URL de la categoría.
56
+ * - Para atributos: actualiza la query string de la URL con `attributeCodes`.
57
+ * - Para otros filtros: delega en FiltersService para marcar seleccionado.
58
+ *
59
+ * La idea es que **la URL siempre represente los filtros aplicados**,
60
+ * de modo que:
61
+ * - al hacer F5 no se pierdan los filtros,
62
+ * - los links sean compartibles (deep linking).
63
+ */
51
64
  setSelected(filter, selected) {
52
65
  if (!filter || !selected) {
53
- console.error('Filter or selected element is undefined:', { filter, selected });
54
66
  return;
55
67
  }
68
+ // Si el elemento está marcado como no visible, no hacemos nada
69
+ if (selected.isVisible === false)
70
+ return;
56
71
  if (typeof filter.setSelected !== 'function') {
57
- console.error('filter.setSelected is not a function. Filter might not be an instance of the expected class:', filter);
58
72
  return;
59
73
  }
60
74
  try {
61
- // this._filtersService.setFilterSelected(filter, selected);
62
75
  if (filter.type() === 'categories') {
76
+ // Para categorías usamos navegación por path (ej: /collection/categories/camas-elasticas)
63
77
  if (selected.path) {
64
78
  this.router.navigate([selected.path]);
65
79
  }
80
+ return;
66
81
  }
67
- else if (filter.type() === 'attributes') {
68
- // Manejar la navegación para atributos
69
- this._filtersService.setFilterSelected(filter, selected);
82
+ if (filter.type() === 'attributes') {
83
+ // El backend espera que le mandemos el "code" del atributo en el query param
84
+ const code = selected.code || selected.value || null;
85
+ // Actualizamos la URL manteniendo la ruta, pero agregando `attributeCodes`
86
+ // Ejemplo de resultado:
87
+ // /collection/categories/camas-elasticas?attributeCodes=ABC123&...
88
+ //
89
+ // También reseteamos la página a null para que vuelva a la primera página
90
+ // cuando se aplica un nuevo filtro.
91
+ this.router.navigate([], {
92
+ relativeTo: this.route,
93
+ queryParams: {
94
+ attributeCodes: code,
95
+ page: null
96
+ },
97
+ queryParamsHandling: 'merge'
98
+ });
99
+ return;
70
100
  }
101
+ this._filtersService.setFilterSelected(filter, selected);
71
102
  }
72
103
  catch (error) {
73
104
  console.error("Error while setting selected filter:", error);
@@ -101,7 +132,9 @@ export class FiltersEcComponent {
101
132
  return true;
102
133
  };
103
134
  scrollUp = () => {
104
- window.scroll(0, 0);
135
+ if (typeof window !== 'undefined') {
136
+ window.scroll(0, 0);
137
+ }
105
138
  return true;
106
139
  };
107
140
  hasAppliedFilters() {
@@ -138,4 +171,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
138
171
  }], ctorParameters: () => [], propDecorators: { setSelect: [{
139
172
  type: Input
140
173
  }] } });
141
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsdGVycy1lYy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZy1lYXN5Y29tbWVyY2UtdjE4L3NyYy9saWIvZWMtY29tcG9uZW50cy9maWx0ZXJzLWVjL2ZpbHRlcnMtZWMuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmctZWFzeWNvbW1lcmNlLXYxOC9zcmMvbGliL2VjLWNvbXBvbmVudHMvZmlsdGVycy1lYy9maWx0ZXJzLWVjLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBeUIsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzFGLE9BQU8sRUFBRSxjQUFjLEVBQUcsV0FBVyxFQUFDLE1BQU0sbUJBQW1CLENBQUM7QUFDaEUsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUV2QyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFDckUsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDdkQsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3pDLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLDBDQUEwQyxDQUFDO0FBQzVFLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQzs7QUFVbkUsTUFBTSxPQUFPLGtCQUFrQjtJQUVuQixZQUFZLEdBQWdCLE1BQU0sQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUNoRCxlQUFlLEdBQW1CLE1BQU0sQ0FBQyxjQUFjLENBQUMsQ0FBQztJQUN6RCxnQkFBZ0IsR0FBb0IsTUFBTSxDQUFDLGVBQWUsQ0FBQyxDQUFDO0lBQzVELFVBQVUsR0FBeUIsTUFBTSxDQUFDLG9CQUFvQixDQUFDLENBQUM7SUFDaEUsTUFB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LCBFbGVtZW50UmVmLCBWaWV3Q2hpbGQsIEluamVjdG9yIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBGaWx0ZXJzU2VydmljZSAsIEF1dGhTZXJ2aWNlfSBmcm9tICcuLi8uLi9lYy1zZXJ2aWNlcyc7XG5pbXBvcnQgeyBGaWx0ZXIgfSBmcm9tICcuLi8uLi9jbGFzc2VzJztcbmltcG9ydCB7IEZpbHRlckVsZW1lbnQsIEZpbHRlclR5cGUsIFBhZ2luYXRpb25TZXR0aW5ncyB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMnO1xuaW1wb3J0IHsgUHJvZHVjdHNTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vZWMtc2VydmljZXMvcHJvZHVjdHMuc2VydmljZSc7XG5pbXBvcnQgeyBDb3JlQ29uc3RhbnRzU2VydmljZSB9IGZyb20gJy4uLy4uL2NvbnN0YW50cyc7XG5pbXBvcnQgeyBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHsgUHJpY2VSYW5nZUZpbHRlciB9IGZyb20gJy4uLy4uL2NsYXNzZXMvZmlsdGVycy9wcmljZV9yYW5nZS1maWx0ZXInO1xuaW1wb3J0IHsgQ2hhbm5lbFNlcnZpY2UgfSBmcm9tICcuLi8uLi9lYy1zZXJ2aWNlcy9jaGFubmVsLnNlcnZpY2UnO1xuXG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnbGliLWZpbHRlcnMtZWMnLFxuICAgIHN0YW5kYWxvbmU6IHRydWUsXG4gICAgaW1wb3J0czogW10sXG4gICAgdGVtcGxhdGVVcmw6ICcuL2ZpbHRlcnMtZWMuY29tcG9uZW50Lmh0bWwnLFxuICAgIHN0eWxlVXJsOiAnLi9maWx0ZXJzLWVjLmNvbXBvbmVudC5zY3NzJ1xufSlcbmV4cG9ydCBjbGFzcyBGaWx0ZXJzRWNDb21wb25lbnQge1xuXG4gICAgcHJpdmF0ZSBfYXV0aFNlcnZpY2U6IEF1dGhTZXJ2aWNlID0gaW5qZWN0KEF1dGhTZXJ2aWNlKTtcbiAgICBwcml2YXRlIF9maWx0ZXJzU2VydmljZTogRmlsdGVyc1NlcnZpY2UgPSBpbmplY3QoRmlsdGVyc1NlcnZpY2UpO1xuICAgIHByaXZhdGUgX3Byb2R1Y3RzU2VydmljZTogUHJvZHVjdHNTZXJ2aWNlID0gaW5qZWN0KFByb2R1Y3RzU2VydmljZSk7XG4gICAgcHJpdmF0ZSBfY29uc3RhbnRzOiBDb3JlQ29uc3RhbnRzU2VydmljZSA9IGluamVjdChDb3JlQ29uc3RhbnRzU2VydmljZSk7XG4gICAgcHJpdmF0ZSByb3V0ZXI6IFJvdXRlciA9IGluamVjdChSb3V0ZXIpO1xuICAgIHB1YmxpYyBmaWx0ZXJzOiBGaWx0ZXJbXSA9IFtdO1xuICAgIHB1YmxpYyBmaWx0ZXIkID0gdGhpcy5fZmlsdGVyc1NlcnZpY2UuZmlsdGVycyQ7XG4gICAgcHVibGljIHNob3dQcmljZXNPbmx5VG9Mb2dnZWRVc2VyczogYm9vbGVhbiA9IGZhbHNlO1xuICAgIHB1YmxpYyBpbmplY3RvcjogSW5qZWN0b3IgPSBpbmplY3QoSW5qZWN0b3IpO1xuXHRwdWJsaWMgaXNBdXRoZW50aWNhdGVkJCA9IHRoaXMuX2F1dGhTZXJ2aWNlLmlzQXV0aGVudGljYXRlZCgpO1xuICAgIHB1YmxpYyBoaWRlUHJpY2VzOiBib29sZWFuID0gZmFsc2U7XG4gICAgXG4gICAgQElucHV0KCkgc2V0U2VsZWN0OiBhbnk7XG5cbiAgICBuZ09uSW5pdCgpIHtcblxuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICB0aGlzLl9maWx0ZXJzU2VydmljZS5maWx0ZXJzJC5zdWJzY3JpYmUoKGZpbHRlcnM6IEZpbHRlcltdKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmZpbHRlcnMgPSBmaWx0ZXJzO1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5pbmplY3Rvci5nZXQoQ2hhbm5lbFNlcnZpY2UpLmNoYW5uZWwkLnN1YnNjcmliZShjaGFubmVsID0+IHtcbiAgICAgICAgICAgIHRoaXMuc2hvd1ByaWNlc09ubHlUb0xvZ2dlZFVzZXJzID0gISFjaGFubmVsLnNob3dQcmljZXNPbmx5VG9Mb2dnZWRVc2VycztcbiAgICAgICAgICAgIHRoaXMuaGlkZVByaWNlcyA9ICEhY2hhbm5lbC5oaWRlUHJpY2VzO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgLyoqIDEpIFBhcmEgY3VhbmRvIG1lIHBpZGVuICdwcmljZV9yYW5nZScsIGRldnVlbHZvIFByaWNlUmFuZ2VGaWx0ZXIgKi9cbiAgICBwdWJsaWMgZ2V0U3BlY2lmaWNGaWx0ZXIodHlwZTogJ3ByaWNlX3JhbmdlJyk6IFByaWNlUmFuZ2VGaWx0ZXIgfCBudWxsO1xuXG4gICAgLyoqIDIpIFBhcmEgY3VhbHF1aWVyIG90cm8gRmlsdGVyVHlwZSwgZGV2dWVsdm8gRmlsdGVyICovXG4gICAgcHVibGljIGdldFNwZWNpZmljRmlsdGVyKHR5cGU6IEZpbHRlclR5cGUpOiBGaWx0ZXIgfCBudWxsO1xuICAgIHB1YmxpYyBnZXRTcGVjaWZpY0ZpbHRlcih0eXBlOiBGaWx0ZXJUeXBlKTogRmlsdGVyIHwgbnVsbCB7XG4gICAgICAgIGNvbnN0IGZpbHRlciA9IHRoaXMuZmlsdGVycy5maW5kKGYgPT4gZi50eXBlKCkgPT09IHR5cGUpO1xuICAgICAgICBpZiAodHlwZSA9PT0gJ3ByaWNlX3JhbmdlJyAmJiBmaWx0ZXIgJiYgIShmaWx0ZXIgaW5zdGFuY2VvZiBGaWx0ZXIpKSB7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKGBFeHBlY3RlZCBhIEZpbHRlciBpbnN0YW5jZSBidXQgZ290YCwgZmlsdGVyKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmlsdGVyIHx8IG51bGw7XG4gICAgfVxuXG4gICAgLypPYnRpZW5lIGVsIGZpbHRybyBlbGVnaWRvIGVuIGVsIHNlbGVjdCwgbG8gcGFzYSBhbCBzZXRTZWxlY3RcbiAgICBwYXJhIHF1ZSBzZSBtYXJxdWUgc2VsZWNjaW9uYWRvKi9cbiAgICBvblNlbGVjdChldmVudDogYW55LCBmaWx0ZXI6IEZpbHRlckVsZW1lbnRbXSB8IG51bGwpIHtcbiAgICAgICAgLy8gY29uc29sZS5sb2coZmlsdGVyKVxuICAgICAgICAvKiAgY29uc3Qgc2VsZWN0ZWRPcHRpb24gPSBmaWx0ZXJcbiAgICAgICAgICAgICAuZmxhdE1hcChjYXRlZ29yeSA9PiBjYXRlZ29yeS5jaGlsZHJlbilcbiAgICAgICAgICAgICAuZmlsdGVyKG9wdGlvbiA9PiBvcHRpb24/LmNvZGUgPT09IGV2ZW50LnRhcmdldC52YWx1ZSlcbiAgICAgICAgICAgICAucG9wKClcbiAgICAgICAgIHNlbGVjdGVkT3B0aW9uICYmIHRoaXMuX2ZpbHRlcnNTZXJ2aWNlLnNldEZpbHRlclNlbGVjdGVkKHRoaXMuZmlsdGVyc1swXSwgc2VsZWN0ZWRPcHRpb24pICovXG4gICAgfVxuXG4gICAgc2V0U2VsZWN0ZWQoZmlsdGVyOiBGaWx0ZXIgfCBudWxsLCBzZWxlY3RlZDogRmlsdGVyRWxlbWVudCB8IG51bGwpIHtcbiAgICAgICAgaWYgKCFmaWx0ZXIgfHwgIXNlbGVjdGVkKSB7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKCdGaWx0ZXIgb3Igc2VsZWN0ZWQgZWxlbWVudCBpcyB1bmRlZmluZWQ6JywgeyBmaWx0ZXIsIHNlbGVjdGVkIH0pO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHR5cGVvZiAoZmlsdGVyIGFzIGFueSkuc2V0U2VsZWN0ZWQgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ2ZpbHRlci5zZXRTZWxlY3RlZCBpcyBub3QgYSBmdW5jdGlvbi4gRmlsdGVyIG1pZ2h0IG5vdCBiZSBhbiBpbnN0YW5jZSBvZiB0aGUgZXhwZWN0ZWQgY2xhc3M6JywgZmlsdGVyKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICAvLyB0aGlzLl9maWx0ZXJzU2VydmljZS5zZXRGaWx0ZXJTZWxlY3RlZChmaWx0ZXIsIHNlbGVjdGVkKTtcbiAgICAgICAgICAgIGlmIChmaWx0ZXIudHlwZSgpID09PSAnY2F0ZWdvcmllcycpIHtcbiAgICAgICAgICAgICAgICBpZiAoc2VsZWN0ZWQucGF0aCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbc2VsZWN0ZWQucGF0aF0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSBpZiAoZmlsdGVyLnR5cGUoKSA9PT0gJ2F0dHJpYnV0ZXMnKSB7XG4gICAgICAgICAgICAgICAgLy8gTWFuZWphciBsYSBuYXZlZ2FjacOzbiBwYXJhIGF0cmlidXRvc1xuICAgICAgICAgICAgICAgIHRoaXMuX2ZpbHRlcnNTZXJ2aWNlLnNldEZpbHRlclNlbGVjdGVkKGZpbHRlciwgc2VsZWN0ZWQpO1xuICAgICAgICAgICAgfVxuXG5cbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXCJFcnJvciB3aGlsZSBzZXR0aW5nIHNlbGVjdGVkIGZpbHRlcjpcIiwgZXJyb3IpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgdW5pcXVlU2VsZWN0aW9uKGZpbHRlcjogeyBkYXRhOiBhbnlbXTsgfSwgZmlsdGVyQ2hpbGQ6IGFueSkge1xuICAgICAgICAvLyBCdXNjYXIgc2kgaGF5IHVuIGZpbHRybyBkZSB0aXBvIFByaWNlUmFuZ2VGaWx0ZXIgZW4gbGEgbGlzdGEgZGUgZmlsdHJvc1xuICAgICAgICBjb25zdCBwcmljZVJhbmdlRmlsdGVyID0gdGhpcy5maWx0ZXJzLmZpbmQoZiA9PiBmIGluc3RhbmNlb2YgUHJpY2VSYW5nZUZpbHRlcik7XG5cbiAgICAgICAgaWYgKHByaWNlUmFuZ2VGaWx0ZXIpIHtcbiAgICAgICAgICAgIHByaWNlUmFuZ2VGaWx0ZXIucmVzZXQoKTtcbiAgICAgICAgfVxuICAgICAgICBmaWx0ZXIuZGF0YS5mb3JFYWNoKGZpbHRlckVsZW1lbnQgPT4ge1xuICAgICAgICAgICAgaWYgKGZpbHRlckVsZW1lbnQuc2VsZWN0ZWQpIHtcbiAgICAgICAgICAgICAgICBmaWx0ZXJFbGVtZW50LnNlbGVjdGVkID0gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmaWx0ZXJFbGVtZW50LmNoaWxkcmVuLmZvckVhY2goKGZpbHRlckNoaWxkcmVuOiBGaWx0ZXJFbGVtZW50KSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGZpbHRlckNoaWxkcmVuICE9IGZpbHRlckNoaWxkICYmIGZpbHRlckNoaWxkcmVuLnNlbGVjdGVkKSB7XG4gICAgICAgICAgICAgICAgICAgIGZpbHRlckNoaWxkcmVuLnNlbGVjdGVkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8vICBjbG9zZSA9ICgpID0+IHtcbiAgICAvLyAgICAgICB0aGlzLmRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwiZmlsdHJvc1wiKS5jbGFzc0xpc3QucmVtb3ZlKCdpbicpO1xuICAgIC8vICAgICAgIHJldHVybiB0cnVlO1xuICAgIC8vICB9O1xuXG5cbiAgICBjbG9zZSA9ICgpID0+IHtcbiAgICAgICAgLy8gdGhpcy5jb25zdHMubW9iaWxlKClcbiAgICAgICAgLy8gICAgICA/IHRoaXMuZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJhY2NvcmRpb25FeGFtcGxlXCIpLmNsYXNzTGlzdC5yZW1vdmUoJ3Nob3cnKVxuICAgICAgICAvLyAgICAgIDogdGhpcy5kb2N1bWVudC5nZXRFbGVtZW50QnlJZChhY2NvcmRpb25faWQpLmNsYXNzTGlzdC5yZW1vdmUoJ3Nob3cnKTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfTtcblxuXG4gICAgc2Nyb2xsVXAgPSAoKSA9PiB7XG4gICAgICAgIHdpbmRvdy5zY3JvbGwoMCwgMCk7XG4gICAgICAgIHJldHVybiB0cnVlXG4gICAgfVxuXG5cblxuXG5cbiAgICBoYXNBcHBsaWVkRmlsdGVycygpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZmlsdGVycz8uc29tZSgoZmlsdGVyOiBhbnkpID0+IHtcbiAgICAgICAgICAgIGlmIChmaWx0ZXIudHlwZT8uKCkgPT09ICdwcmljZV9yYW5nZScpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBtaW5TZXQgPSBmaWx0ZXIuY3VycmVudE1pblByaWNlICE9PSBudWxsICYmIGZpbHRlci5jdXJyZW50TWluUHJpY2UgIT09IDA7XG4gICAgICAgICAgICAgICAgY29uc3QgbWF4U2V0ID0gZmlsdGVyLmN1cnJlbnRNYXhQcmljZSAhPT0gbnVsbCAmJiBmaWx0ZXIuY3VycmVudE1heFByaWNlICE9PSBmaWx0ZXIubWF4UHJpY2U7XG4gICAgICAgICAgICAgICAgaWYgKG1pblNldCB8fCBtYXhTZXQpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gZmlsdGVyLmRhdGE/LnNvbWUoKGZpbHRlckVsZW1lbnQ6IGFueSkgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KGZpbHRlckVsZW1lbnQuY2hpbGRyZW4pKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmaWx0ZXJFbGVtZW50LmNoaWxkcmVuLnNvbWUoKGNoaWxkOiBhbnkpID0+IGNoaWxkLnNlbGVjdGVkKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZpbHRlckVsZW1lbnQuc2VsZWN0ZWQ7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSkgPz8gZmFsc2U7XG4gICAgfVxuLyoqXG4gICAqIFZlcmlmaWNhIHNpIHVuYSBjYXRlZ29yw61hIHRpZW5lIGxhIHByb3BpZWRhZCBpc1Zpc2libGUgeSBlc3TDoSBtYXJjYWRhIGNvbW8gdmlzaWJsZVxuICAgKiBAcGFyYW0gY2F0ZWdvcnkgLSBMYSBjYXRlZ29yw61hIGEgdmVyaWZpY2FyXG4gICAqIEByZXR1cm5zIHRydWUgc2kgbGEgY2F0ZWdvcsOtYSBlcyB2aXNpYmxlLCBmYWxzZSBlbiBjYXNvIGNvbnRyYXJpb1xuICAgKi9cbiAgICBoYXNWaXNpYmxlUHJvcGVydHkoY2F0ZWdvcnk6IEZpbHRlckVsZW1lbnQpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIChjYXRlZ29yeSBhcyBhbnkpLmlzVmlzaWJsZSA9PT0gdHJ1ZTtcbiAgICB9XG59XG4iLCI8cD5maWx0ZXJzLWVjIHdvcmtzITwvcD5cbiJdfQ==
174
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsdGVycy1lYy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZy1lYXN5Y29tbWVyY2UtdjE4L3NyYy9saWIvZWMtY29tcG9uZW50cy9maWx0ZXJzLWVjL2ZpbHRlcnMtZWMuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmctZWFzeWNvbW1lcmNlLXYxOC9zcmMvbGliL2VjLWNvbXBvbmVudHMvZmlsdGVycy1lYy9maWx0ZXJzLWVjLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBeUIsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzFGLE9BQU8sRUFBRSxjQUFjLEVBQUcsV0FBVyxFQUFDLE1BQU0sbUJBQW1CLENBQUM7QUFDaEUsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUV2QyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFDckUsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDdkQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUN6RCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSwwQ0FBMEMsQ0FBQztBQUM1RSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sbUNBQW1DLENBQUM7O0FBVW5FLE1BQU0sT0FBTyxrQkFBa0I7SUFFbkIsWUFBWSxHQUFnQixNQUFNLENBQUMsV0FBVyxDQUFDLENBQUM7SUFDaEQsZUFBZSxHQUFtQixNQUFNLENBQUMsY0FBYyxDQUFDLENBQUM7SUFDekQsZ0JBQWdCLEdBQW9CLE1BQU0sQ0FBQyxlQUFlLENBQUMsQ0FBQztJQUM1RCxVQUFVLEdBQXlCLE1BQU0sQ0FBQyxvQkFBb0IsQ0FBQyxDQUFD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QUFVLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQztnQkFDdkUsQ0FBQztnQkFDRCxPQUFPLGFBQWEsQ0FBQyxRQUFRLENBQUM7WUFDbEMsQ0FBQyxDQUFDLENBQUM7UUFDUCxDQUFDLENBQUMsSUFBSSxLQUFLLENBQUM7SUFDaEIsQ0FBQztJQUNMOzs7O1NBSUs7SUFDRCxrQkFBa0IsQ0FBQyxRQUF1QjtRQUN0QyxPQUFRLFFBQWdCLENBQUMsU0FBUyxLQUFLLElBQUksQ0FBQztJQUNoRCxDQUFDO3dHQXZMUSxrQkFBa0I7NEZBQWxCLGtCQUFrQiw4R0NsQi9CLDRCQUNBOzs0RkRpQmEsa0JBQWtCO2tCQVA5QixTQUFTOytCQUNJLGdCQUFnQixjQUNkLElBQUksV0FDUCxFQUFFO3dEQW1CRixTQUFTO3NCQUFqQixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBpbmplY3QsIElucHV0LCBFbGVtZW50UmVmLCBWaWV3Q2hpbGQsIEluamVjdG9yIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBGaWx0ZXJzU2VydmljZSAsIEF1dGhTZXJ2aWNlfSBmcm9tICcuLi8uLi9lYy1zZXJ2aWNlcyc7XG5pbXBvcnQgeyBGaWx0ZXIgfSBmcm9tICcuLi8uLi9jbGFzc2VzJztcbmltcG9ydCB7IEZpbHRlckVsZW1lbnQsIEZpbHRlclR5cGUsIFBhZ2luYXRpb25TZXR0aW5ncyB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMnO1xuaW1wb3J0IHsgUHJvZHVjdHNTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vZWMtc2VydmljZXMvcHJvZHVjdHMuc2VydmljZSc7XG5pbXBvcnQgeyBDb3JlQ29uc3RhbnRzU2VydmljZSB9IGZyb20gJy4uLy4uL2NvbnN0YW50cyc7XG5pbXBvcnQgeyBBY3RpdmF0ZWRSb3V0ZSwgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7IFByaWNlUmFuZ2VGaWx0ZXIgfSBmcm9tICcuLi8uLi9jbGFzc2VzL2ZpbHRlcnMvcHJpY2VfcmFuZ2UtZmlsdGVyJztcbmltcG9ydCB7IENoYW5uZWxTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vZWMtc2VydmljZXMvY2hhbm5lbC5zZXJ2aWNlJztcblxuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ2xpYi1maWx0ZXJzLWVjJyxcbiAgICBzdGFuZGFsb25lOiB0cnVlLFxuICAgIGltcG9ydHM6IFtdLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9maWx0ZXJzLWVjLmNvbXBvbmVudC5odG1sJyxcbiAgICBzdHlsZVVybDogJy4vZmlsdGVycy1lYy5jb21wb25lbnQuc2Nzcydcbn0pXG5leHBvcnQgY2xhc3MgRmlsdGVyc0VjQ29tcG9uZW50IHtcblxuICAgIHByaXZhdGUgX2F1dGhTZXJ2aWNlOiBBdXRoU2VydmljZSA9IGluamVjdChBdXRoU2VydmljZSk7XG4gICAgcHJpdmF0ZSBfZmlsdGVyc1NlcnZpY2U6IEZpbHRlcnNTZXJ2aWNlID0gaW5qZWN0KEZpbHRlcnNTZXJ2aWNlKTtcbiAgICBwcml2YXRlIF9wcm9kdWN0c1NlcnZpY2U6IFByb2R1Y3RzU2VydmljZSA9IGluamVjdChQcm9kdWN0c1NlcnZpY2UpO1xuICAgIHByaXZhdGUgX2NvbnN0YW50czogQ29yZUNvbnN0YW50c1NlcnZpY2UgPSBpbmplY3QoQ29yZUNvbnN0YW50c1NlcnZpY2UpO1xuICAgIHByaXZhdGUgcm91dGVyOiBSb3V0ZXIgPSBpbmplY3QoUm91dGVyKTtcbiAgICBwdWJsaWMgZmlsdGVyczogRmlsdGVyW10gPSBbXTtcbiAgICBwdWJsaWMgZmlsdGVyJCA9IHRoaXMuX2ZpbHRlcnNTZXJ2aWNlLmZpbHRlcnMkO1xuICAgIHB1YmxpYyBzaG93UHJpY2VzT25seVRvTG9nZ2VkVXNlcnM6IGJvb2xlYW4gPSBmYWxzZTtcbiAgICBwdWJsaWMgaW5qZWN0b3I6IEluamVjdG9yID0gaW5qZWN0KEluamVjdG9yKTtcblx0cHVibGljIGlzQXV0aGVudGljYXRlZCQgPSB0aGlzLl9hdXRoU2VydmljZS5pc0F1dGhlbnRpY2F0ZWQoKTtcbiAgICBwdWJsaWMgaGlkZVByaWNlczogYm9vbGVhbiA9IGZhbHNlO1xuICAgIHByaXZhdGUgcm91dGU6IEFjdGl2YXRlZFJvdXRlID0gaW5qZWN0KEFjdGl2YXRlZFJvdXRlKTtcblxuICAgIEBJbnB1dCgpIHNldFNlbGVjdDogYW55O1xuXG4gICAgbmdPbkluaXQoKSB7XG5cbiAgICB9XG5cbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgdGhpcy5fZmlsdGVyc1NlcnZpY2UuZmlsdGVycyQuc3Vic2NyaWJlKChmaWx0ZXJzOiBGaWx0ZXJbXSkgPT4ge1xuICAgICAgICAgICAgdGhpcy5maWx0ZXJzID0gZmlsdGVycztcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuaW5qZWN0b3IuZ2V0KENoYW5uZWxTZXJ2aWNlKS5jaGFubmVsJC5zdWJzY3JpYmUoY2hhbm5lbCA9PiB7XG4gICAgICAgICAgICB0aGlzLnNob3dQcmljZXNPbmx5VG9Mb2dnZWRVc2VycyA9ICEhY2hhbm5lbC5zaG93UHJpY2VzT25seVRvTG9nZ2VkVXNlcnM7XG4gICAgICAgICAgICB0aGlzLmhpZGVQcmljZXMgPSAhIWNoYW5uZWwuaGlkZVByaWNlcztcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIC8qKiAxKSBQYXJhIGN1YW5kbyBtZSBwaWRlbiAncHJpY2VfcmFuZ2UnLCBkZXZ1ZWx2byBQcmljZVJhbmdlRmlsdGVyICovXG4gICAgcHVibGljIGdldFNwZWNpZmljRmlsdGVyKHR5cGU6ICdwcmljZV9yYW5nZScpOiBQcmljZVJhbmdlRmlsdGVyIHwgbnVsbDtcblxuICAgIC8qKiAyKSBQYXJhIGN1YWxxdWllciBvdHJvIEZpbHRlclR5cGUsIGRldnVlbHZvIEZpbHRlciAqL1xuICAgIHB1YmxpYyBnZXRTcGVjaWZpY0ZpbHRlcih0eXBlOiBGaWx0ZXJUeXBlKTogRmlsdGVyIHwgbnVsbDtcbiAgICBwdWJsaWMgZ2V0U3BlY2lmaWNGaWx0ZXIodHlwZTogRmlsdGVyVHlwZSk6IEZpbHRlciB8IG51bGwge1xuICAgICAgICBjb25zdCBmaWx0ZXIgPSB0aGlzLmZpbHRlcnMuZmluZChmID0+IGYudHlwZSgpID09PSB0eXBlKTtcbiAgICAgICAgaWYgKHR5cGUgPT09ICdwcmljZV9yYW5nZScgJiYgZmlsdGVyICYmICEoZmlsdGVyIGluc3RhbmNlb2YgRmlsdGVyKSkge1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcihgRXhwZWN0ZWQgYSBGaWx0ZXIgaW5zdGFuY2UgYnV0IGdvdGAsIGZpbHRlcik7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZpbHRlciB8fCBudWxsO1xuICAgIH1cblxuICAgIC8qT2J0aWVuZSBlbCBmaWx0cm8gZWxlZ2lkbyBlbiBlbCBzZWxlY3QsIGxvIHBhc2EgYWwgc2V0U2VsZWN0XG4gICAgcGFyYSBxdWUgc2UgbWFycXVlIHNlbGVjY2lvbmFkbyovXG4gICAgb25TZWxlY3QoZXZlbnQ6IGFueSwgZmlsdGVyOiBGaWx0ZXJFbGVtZW50W10gfCBudWxsKSB7XG4gICAgICAgIC8vIGNvbnNvbGUubG9nKGZpbHRlcilcbiAgICAgICAgLyogIGNvbnN0IHNlbGVjdGVkT3B0aW9uID0gZmlsdGVyXG4gICAgICAgICAgICAgLmZsYXRNYXAoY2F0ZWdvcnkgPT4gY2F0ZWdvcnkuY2hpbGRyZW4pXG4gICAgICAgICAgICAgLmZpbHRlcihvcHRpb24gPT4gb3B0aW9uPy5jb2RlID09PSBldmVudC50YXJnZXQudmFsdWUpXG4gICAgICAgICAgICAgLnBvcCgpXG4gICAgICAgICBzZWxlY3RlZE9wdGlvbiAmJiB0aGlzLl9maWx0ZXJzU2VydmljZS5zZXRGaWx0ZXJTZWxlY3RlZCh0aGlzLmZpbHRlcnNbMF0sIHNlbGVjdGVkT3B0aW9uKSAqL1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIE1hbmVqYSBlbCBjbGljayBzb2JyZSB1biBlbGVtZW50byBkZSBmaWx0cm8gKGNhdGVnb3LDrWEsIGF0cmlidXRvLCBldGMuKS5cbiAgICAgKlxuICAgICAqIC0gUGFyYSBjYXRlZ29yw61hczogbmF2ZWdhIGEgbGEgVVJMIGRlIGxhIGNhdGVnb3LDrWEuXG4gICAgICogLSBQYXJhIGF0cmlidXRvczogYWN0dWFsaXphIGxhIHF1ZXJ5IHN0cmluZyBkZSBsYSBVUkwgY29uIGBhdHRyaWJ1dGVDb2Rlc2AuXG4gICAgICogLSBQYXJhIG90cm9zIGZpbHRyb3M6IGRlbGVnYSBlbiBGaWx0ZXJzU2VydmljZSBwYXJhIG1hcmNhciBzZWxlY2Npb25hZG8uXG4gICAgICpcbiAgICAgKiBMYSBpZGVhIGVzIHF1ZSAqKmxhIFVSTCBzaWVtcHJlIHJlcHJlc2VudGUgbG9zIGZpbHRyb3MgYXBsaWNhZG9zKiosXG4gICAgICogZGUgbW9kbyBxdWU6XG4gICAgICogICAtIGFsIGhhY2VyIEY1IG5vIHNlIHBpZXJkYW4gbG9zIGZpbHRyb3MsXG4gICAgICogICAtIGxvcyBsaW5rcyBzZWFuIGNvbXBhcnRpYmxlcyAoZGVlcCBsaW5raW5nKS5cbiAgICAgKi9cbiAgICBzZXRTZWxlY3RlZChmaWx0ZXI6IEZpbHRlciB8IG51bGwsIHNlbGVjdGVkOiBGaWx0ZXJFbGVtZW50IHwgbnVsbCkge1xuICAgICAgICBpZiAoIWZpbHRlciB8fCAhc2VsZWN0ZWQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFNpIGVsIGVsZW1lbnRvIGVzdMOhIG1hcmNhZG8gY29tbyBubyB2aXNpYmxlLCBubyBoYWNlbW9zIG5hZGFcbiAgICAgICAgaWYgKChzZWxlY3RlZCBhcyBhbnkpLmlzVmlzaWJsZSA9PT0gZmFsc2UpIHJldHVybjtcblxuICAgICAgICBpZiAodHlwZW9mIChmaWx0ZXIgYXMgYW55KS5zZXRTZWxlY3RlZCAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGlmIChmaWx0ZXIudHlwZSgpID09PSAnY2F0ZWdvcmllcycpIHtcbiAgICAgICAgICAgICAgICAvLyBQYXJhIGNhdGVnb3LDrWFzIHVzYW1vcyBuYXZlZ2FjacOzbiBwb3IgcGF0aCAoZWo6IC9jb2xsZWN0aW9uL2NhdGVnb3JpZXMvY2FtYXMtZWxhc3RpY2FzKVxuICAgICAgICAgICAgICAgIGlmIChzZWxlY3RlZC5wYXRoKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFtzZWxlY3RlZC5wYXRoXSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChmaWx0ZXIudHlwZSgpID09PSAnYXR0cmlidXRlcycpIHtcbiAgICAgICAgICAgICAgICAvLyBFbCBiYWNrZW5kIGVzcGVyYSBxdWUgbGUgbWFuZGVtb3MgZWwgXCJjb2RlXCIgZGVsIGF0cmlidXRvIGVuIGVsIHF1ZXJ5IHBhcmFtXG4gICAgICAgICAgICAgICAgY29uc3QgY29kZSA9IChzZWxlY3RlZCBhcyBhbnkpLmNvZGUgfHwgKHNlbGVjdGVkIGFzIGFueSkudmFsdWUgfHwgbnVsbDtcblxuICAgICAgICAgICAgICAgIC8vIEFjdHVhbGl6YW1vcyBsYSBVUkwgbWFudGVuaWVuZG8gbGEgcnV0YSwgcGVybyBhZ3JlZ2FuZG8gYGF0dHJpYnV0ZUNvZGVzYFxuICAgICAgICAgICAgICAgIC8vIEVqZW1wbG8gZGUgcmVzdWx0YWRvOlxuICAgICAgICAgICAgICAgIC8vICAgL2NvbGxlY3Rpb24vY2F0ZWdvcmllcy9jYW1hcy1lbGFzdGljYXM/YXR0cmlidXRlQ29kZXM9QUJDMTIzJi4uLlxuICAgICAgICAgICAgICAgIC8vXG4gICAgICAgICAgICAgICAgLy8gVGFtYmnDqW4gcmVzZXRlYW1vcyBsYSBww6FnaW5hIGEgbnVsbCBwYXJhIHF1ZSB2dWVsdmEgYSBsYSBwcmltZXJhIHDDoWdpbmFcbiAgICAgICAgICAgICAgICAvLyBjdWFuZG8gc2UgYXBsaWNhIHVuIG51ZXZvIGZpbHRyby5cbiAgICAgICAgICAgICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbXSwge1xuICAgICAgICAgICAgICAgICAgICByZWxhdGl2ZVRvOiB0aGlzLnJvdXRlLFxuICAgICAgICAgICAgICAgICAgICBxdWVyeVBhcmFtczoge1xuICAgICAgICAgICAgICAgICAgICAgICAgYXR0cmlidXRlQ29kZXM6IGNvZGUsXG4gICAgICAgICAgICAgICAgICAgICAgICBwYWdlOiBudWxsXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIHF1ZXJ5UGFyYW1zSGFuZGxpbmc6ICdtZXJnZSdcbiAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuX2ZpbHRlcnNTZXJ2aWNlLnNldEZpbHRlclNlbGVjdGVkKGZpbHRlciwgc2VsZWN0ZWQpO1xuXG4gICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKFwiRXJyb3Igd2hpbGUgc2V0dGluZyBzZWxlY3RlZCBmaWx0ZXI6XCIsIGVycm9yKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHVuaXF1ZVNlbGVjdGlvbihmaWx0ZXI6IHsgZGF0YTogYW55W107IH0sIGZpbHRlckNoaWxkOiBhbnkpIHtcbiAgICAgICAgLy8gQnVzY2FyIHNpIGhheSB1biBmaWx0cm8gZGUgdGlwbyBQcmljZVJhbmdlRmlsdGVyIGVuIGxhIGxpc3RhIGRlIGZpbHRyb3NcbiAgICAgICAgY29uc3QgcHJpY2VSYW5nZUZpbHRlciA9IHRoaXMuZmlsdGVycy5maW5kKGYgPT4gZiBpbnN0YW5jZW9mIFByaWNlUmFuZ2VGaWx0ZXIpO1xuXG4gICAgICAgIGlmIChwcmljZVJhbmdlRmlsdGVyKSB7XG4gICAgICAgICAgICBwcmljZVJhbmdlRmlsdGVyLnJlc2V0KCk7XG4gICAgICAgIH1cbiAgICAgICAgZmlsdGVyLmRhdGEuZm9yRWFjaChmaWx0ZXJFbGVtZW50ID0+IHtcbiAgICAgICAgICAgIGlmIChmaWx0ZXJFbGVtZW50LnNlbGVjdGVkKSB7XG4gICAgICAgICAgICAgICAgZmlsdGVyRWxlbWVudC5zZWxlY3RlZCA9IGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZmlsdGVyRWxlbWVudC5jaGlsZHJlbi5mb3JFYWNoKChmaWx0ZXJDaGlsZHJlbjogRmlsdGVyRWxlbWVudCkgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChmaWx0ZXJDaGlsZHJlbiAhPSBmaWx0ZXJDaGlsZCAmJiBmaWx0ZXJDaGlsZHJlbi5zZWxlY3RlZCkge1xuICAgICAgICAgICAgICAgICAgICBmaWx0ZXJDaGlsZHJlbi5zZWxlY3RlZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvLyAgY2xvc2UgPSAoKSA9PiB7XG4gICAgLy8gICAgICAgdGhpcy5kb2N1bWVudC5nZXRFbGVtZW50QnlJZChcImZpbHRyb3NcIikuY2xhc3NMaXN0LnJlbW92ZSgnaW4nKTtcbiAgICAvLyAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAvLyAgfTtcblxuXG4gICAgY2xvc2UgPSAoKSA9PiB7XG4gICAgICAgIC8vIHRoaXMuY29uc3RzLm1vYmlsZSgpXG4gICAgICAgIC8vICAgICAgPyB0aGlzLmRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwiYWNjb3JkaW9uRXhhbXBsZVwiKS5jbGFzc0xpc3QucmVtb3ZlKCdzaG93JylcbiAgICAgICAgLy8gICAgICA6IHRoaXMuZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoYWNjb3JkaW9uX2lkKS5jbGFzc0xpc3QucmVtb3ZlKCdzaG93Jyk7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH07XG5cblxuICAgIHNjcm9sbFVwID0gKCkgPT4ge1xuICAgICAgICBpZiAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgIHdpbmRvdy5zY3JvbGwoMCwgMCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRydWVcbiAgICB9XG5cblxuXG5cblxuICAgIGhhc0FwcGxpZWRGaWx0ZXJzKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5maWx0ZXJzPy5zb21lKChmaWx0ZXI6IGFueSkgPT4ge1xuICAgICAgICAgICAgaWYgKGZpbHRlci50eXBlPy4oKSA9PT0gJ3ByaWNlX3JhbmdlJykge1xuICAgICAgICAgICAgICAgIGNvbnN0IG1pblNldCA9IGZpbHRlci5jdXJyZW50TWluUHJpY2UgIT09IG51bGwgJiYgZmlsdGVyLmN1cnJlbnRNaW5QcmljZSAhPT0gMDtcbiAgICAgICAgICAgICAgICBjb25zdCBtYXhTZXQgPSBmaWx0ZXIuY3VycmVudE1heFByaWNlICE9PSBudWxsICYmIGZpbHRlci5jdXJyZW50TWF4UHJpY2UgIT09IGZpbHRlci5tYXhQcmljZTtcbiAgICAgICAgICAgICAgICBpZiAobWluU2V0IHx8IG1heFNldCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiBmaWx0ZXIuZGF0YT8uc29tZSgoZmlsdGVyRWxlbWVudDogYW55KSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoZmlsdGVyRWxlbWVudC5jaGlsZHJlbikpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZpbHRlckVsZW1lbnQuY2hpbGRyZW4uc29tZSgoY2hpbGQ6IGFueSkgPT4gY2hpbGQuc2VsZWN0ZWQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gZmlsdGVyRWxlbWVudC5zZWxlY3RlZDtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KSA/PyBmYWxzZTtcbiAgICB9XG4vKipcbiAgICogVmVyaWZpY2Egc2kgdW5hIGNhdGVnb3LDrWEgdGllbmUgbGEgcHJvcGllZGFkIGlzVmlzaWJsZSB5IGVzdMOhIG1hcmNhZGEgY29tbyB2aXNpYmxlXG4gICAqIEBwYXJhbSBjYXRlZ29yeSAtIExhIGNhdGVnb3LDrWEgYSB2ZXJpZmljYXJcbiAgICogQHJldHVybnMgdHJ1ZSBzaSBsYSBjYXRlZ29yw61hIGVzIHZpc2libGUsIGZhbHNlIGVuIGNhc28gY29udHJhcmlvXG4gICAqL1xuICAgIGhhc1Zpc2libGVQcm9wZXJ0eShjYXRlZ29yeTogRmlsdGVyRWxlbWVudCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gKGNhdGVnb3J5IGFzIGFueSkuaXNWaXNpYmxlID09PSB0cnVlO1xuICAgIH1cbn1cbiIsIjxwPmZpbHRlcnMtZWMgd29ya3MhPC9wPlxuIl19