ng-easycommerce-v18 0.6.30 → 0.6.31

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.
package/README.md CHANGED
@@ -1,3 +1,11 @@
1
+ # Version 0.6.31
2
+ - Se agrega filtrado centralizado de bloques y banners por `visibility` en el core para que el storefront no reciba contenido que no corresponde mostrar.
3
+ - `visibility` soporta `all`, `logged_in` y `logged_out`; si no viene informado, se toma por defecto como `all`.
4
+ - El filtrado respeta el estado de autenticacion actual y se recalcula cuando el usuario inicia o cierra sesion.
5
+ - Los banners dentro de bloques de tipo `banner` tambien se filtran por visibilidad antes de llegar a los componentes consumidores.
6
+ - Checkout stock: ante respuestas `450` / `out_of_stock` en el flujo de envio, el core muestra el mensaje del backend y lleva al usuario de vuelta al carrito para evitar un avance engañoso al checkout.
7
+ - Checkout stock: la seleccion de envio en vista `single` deja de mostrar el aviso generico de "sin metodos de envio" cuando la causa real es falta de stock.
8
+ - Checkout stock: el servicio de checkout centraliza el manejo del error para no duplicar logica de stock en los frontends.
1
9
  # Version 0.6.30
2
10
  - Modificacion `auth.interceptor.ts` para que si da error el endpoint de login desde el modal de inicio de sesion no haga redirección.
3
11
  # Version 0.6.29
@@ -222,7 +222,11 @@ export class ShipmentEcComponent {
222
222
  // A newer call superseded this one — discard stale results to prevent duplicates
223
223
  return;
224
224
  }
225
- if (!methodOptions || !methodOptions.length) {
225
+ if (this._shipmentService.shippingBlockedByStock) {
226
+ this.loadingPreload = false;
227
+ return;
228
+ }
229
+ if (!methodOptions.length) {
226
230
  this.shipmentErrorKey = 'no-shipping-options-help';
227
231
  this.loadingPreload = false;
228
232
  return;
@@ -423,4 +427,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
423
427
  }], advanceStep: [{
424
428
  type: Output
425
429
  }] } });
426
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2hpcG1lbnQtZWMuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmctZWFzeWNvbW1lcmNlLXYxOC9zcmMvbGliL2VjLWNvbXBvbmVudHMvY2hlY2tvdXQtZWMvc2hpcG1lbnQtZWMvc2hpcG1lbnQtZWMuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmctZWFzeWNvbW1lcmNlLXYxOC9zcmMvbGliL2VjLWNvbXBvbmVudHMvY2hlY2tvdXQtZWMvc2hpcG1lbnQtZWMvc2hpcG1lbnQtZWMuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFVLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDdkYsT0FBTyxFQUFFLGVBQWUsRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3hFLE9BQU8sRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFFdEQsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDaEUsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUUzQyxPQUFPLEVBQUUsZUFBZSxFQUFFLGVBQWUsRUFBRSxZQUFZLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUN0RixPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUN4RCxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUNwRixPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSxtREFBbUQsQ0FBQzs7O0FBUzlGLE1BQU0sT0FBTyxtQkFBbUI7SUFDcEIsZ0JBQWdCLEdBQW9CLE1BQU0sQ0FBQyxlQUFlLENBQUMsQ0FBQztJ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QUN4QyxPQUFPO1FBQ1gsQ0FBQztRQUVELElBQ0ksSUFBSSxDQUFDLGVBQWU7WUFDcEIsSUFBSSxDQUFDLFdBQVc7WUFDaEIsSUFBSSxDQUFDLGVBQWU7WUFDcEIsQ0FBQyxJQUFJLENBQUMsb0JBQW9CO1lBQzFCLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFdBQVcsQ0FBQyxVQUFVLENBQUMsRUFDaEQsQ0FBQztZQUNDLE9BQU87UUFDWCxDQUFDO1FBQ0QsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksRUFBRSxDQUFDO0lBQ2pDLENBQUM7d0dBaGJRLG1CQUFtQjs0RkFBbkIsbUJBQW1CLDRNQ25CaEMsa3lRQTZJQSw2cUJENUhzQyx3QkFBd0IsbUZBQUUsZUFBZSx1RkFBRSxTQUFTLHlDQUFFLG9CQUFvQix5REFBWSx5QkFBeUI7OzRGQUV4SSxtQkFBbUI7a0JBUC9CLFNBQVM7K0JBQ0ksaUJBQWlCLGNBQ2YsSUFBSSxXQUdQLENBQUMsc0JBQXNCLEVBQUUsd0JBQXdCLEVBQUUsZUFBZSxFQUFFLFNBQVMsRUFBRSxvQkFBb0IsRUFBRSxRQUFRLEVBQUUseUJBQXlCLENBQUM7d0RBU3pJLG1CQUFtQjtzQkFBM0IsS0FBSztnQkFDSSxhQUFhO3NCQUF0QixNQUFNO2dCQUNHLFdBQVc7c0JBQXBCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE9uSW5pdCwgT3V0cHV0LCBpbmplY3QgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFRyYW5zbGF0ZU1vZHVsZSwgVHJhbnNsYXRlU2VydmljZSB9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xuaW1wb3J0IHsgQXN5bmNQaXBlLCBKc29uUGlwZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyB0YWtlVW50aWxEZXN0cm95ZWQgfSBmcm9tICdAYW5ndWxhci9jb3JlL3J4anMtaW50ZXJvcCc7XG5pbXBvcnQgeyBEZXN0cm95UmVmIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCB7IENoZWNrb3V0U2VydmljZSwgU2hpcG1lbnRTZXJ2aWNlLCBUb2FzdFNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9lYy1zZXJ2aWNlcyc7XG5pbXBvcnQgeyBFY0N1cnJlbmN5U3ltYm9sUGlwZSB9IGZyb20gJy4uLy4uLy4uL2VjLXBpcGUnO1xuaW1wb3J0IHsgTG9hZGluZ0Z1bGxFY0NvbXBvbmVudCwgTG9hZGluZ0lubGluZUVjQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vd2lkZ2V0cy1lYyc7XG5pbXBvcnQgeyBTaGlwbWVudEVjU2luZ2xlQ29tcG9uZW50IH0gZnJvbSAnLi9zaGlwbWVudC1lYy1zaW5nbGUvc2hpcG1lbnQtZWMtc2luZ2xlLmNvbXBvbmVudCc7XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnYXBwLXNoaXBtZW50LWVjJyxcbiAgICBzdGFuZGFsb25lOiB0cnVlLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9zaGlwbWVudC1lYy5jb21wb25lbnQuaHRtbCcsXG4gICAgc3R5bGVVcmxzOiBbJy4vc2hpcG1lbnQtZWMuY29tcG9uZW50LnNjc3MnXSxcbiAgICBpbXBvcnRzOiBbTG9hZGluZ0Z1bGxFY0NvbXBvbmVudCwgTG9hZGluZ0lubGluZUVjQ29tcG9uZW50LCBUcmFuc2xhdGVNb2R1bGUsIEFzeW5jUGlwZSwgRWNDdXJyZW5jeVN5bWJvbFBpcGUsIEpzb25QaXBlLCBTaGlwbWVudEVjU2luZ2xlQ29tcG9uZW50XVxufSlcbmV4cG9ydCBjbGFzcyBTaGlwbWVudEVjQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcbiAgICBwcml2YXRlIF9zaGlwbWVudFNlcnZpY2U6IFNoaXBtZW50U2VydmljZSA9IGluamVjdChTaGlwbWVudFNlcnZpY2UpO1xuICAgIHByaXZhdGUgX2NoZWNrb3V0U2VydmljZTogQ2hlY2tvdXRTZXJ2aWNlID0gaW5qZWN0KENoZWNrb3V0U2VydmljZSk7XG4gICAgcHJpdmF0ZSBfdHJhbnNsYXRlU2VydmljZTogVHJhbnNsYXRlU2VydmljZSA9IGluamVjdChUcmFuc2xhdGVTZXJ2aWNlKTtcbiAgICBwcml2YXRlIF90b2FzdFNlcnZpY2U6IFRvYXN0U2VydmljZSA9IGluamVjdChUb2FzdFNlcnZpY2UpO1xuICAgIHByaXZhdGUgX2Rlc3Ryb3lSZWYgPSBpbmplY3QoRGVzdHJveVJlZik7XG5cbiAgICBASW5wdXQoKSBjb21wYWN0U2hpcG1lbnRWaWV3OiBib29sZWFuID0gZmFsc2U7XG4gICAgQE91dHB1dCgpIHN1bW1hcnlDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPHsgbGFiZWw/OiBzdHJpbmc7IGRldGFpbD86IHN0cmluZyB9PigpO1xuICAgIEBPdXRwdXQoKSBhZHZhbmNlU3RlcCA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcblxuICAgIHB1YmxpYyBtZXRob2RzJCA9IHRoaXMuX3NoaXBtZW50U2VydmljZS5tZXRob2RzJDtcbiAgICBwdWJsaWMgbWV0aG9kc0xvYWRpbmckID0gdGhpcy5fc2hpcG1lbnRTZXJ2aWNlLm1ldGhvZHNMb2FkaW5nJDtcbiAgICBwdWJsaWMgaXNMYXN0U3RlcCQgPSB0aGlzLl9jaGVja291dFNlcnZpY2UuaXNMYXN0U3RlcCQ7XG4gICAgcHVibGljIHN0YXRlJCA9IHRoaXMuX3NoaXBtZW50U2VydmljZS5zdGF0ZSQ7XG4gICAgcHVibGljIGVycm9yJCA9IHRoaXMuX3NoaXBtZW50U2VydmljZS5lcnJvciQ7XG4gICAgcHVibGljIGxvYWRpbmdTdGVwJCA9IHRoaXMuX2NoZWNrb3V0U2VydmljZS5sb2FkaW5nU3RlcCQ7XG5cbiAgICBwcml2YXRlIF9oaWRkZW5NZXRob2RzOiBzdHJpbmdbXSA9IFsnVVBTJ107XG4gICAgcHVibGljIGJ1dHRvbnNEaXNhYmxlZDogYm9vbGVhbiA9IGZhbHNlO1xuICAgIHB1YmxpYyBtZXRob2RTZWxlY3Q6IGFueTtcbiAgICBwdWJsaWMgc2VsZWN0ZWRNZXRob2RDb2RlOiBzdHJpbmcgfCBudWxsID0gbnVsbDtcbiAgICBwdWJsaWMgbG9hZGluZ0ludGVybmFsOiBib29sZWFuID0gZmFsc2U7XG4gICAgcHVibGljIGxvYWRpbmdQcmVsb2FkOiBib29sZWFuID0gZmFsc2U7XG4gICAgcHJpdmF0ZSByZXN0b3JlZE9uSW5pdDogYm9vbGVhbiA9IGZhbHNlO1xuICAgIHB1YmxpYyBtb3JlSW5mb0luTWV0aG9kOiBib29sZWFuID0gZmFsc2U7XG4gICAgcHVibGljIGNvc3RvczogYW55ID0gbnVsbDtcbiAgICBwdWJsaWMgY29zdHMkOiBPYnNlcnZhYmxlPGFueVtdPiA9IHRoaXMuX3NoaXBtZW50U2VydmljZS5jb3N0cyQ7XG4gICAgcHVibGljIGlzTGFzdE9uZTogYm9vbGVhbiA9IGZhbHNlO1xuICAgIHB1YmxpYyBlbmFibGVkQ29uZmlybUJ1dHRvbjogYm9vbGVhbiA9IGZhbHNlO1xuICAgIHB1YmxpYyBzaGlwbWVudEVycm9yS2V5OiBzdHJpbmcgfCBudWxsID0gbnVsbDtcbiAgICBwdWJsaWMgc2luZ2xlT3B0aW9uczogYW55W10gPSBbXTtcbiAgICBwdWJsaWMgc2VsZWN0ZWRPcHRpb25JZDogc3RyaW5nIHwgbnVsbCA9IG51bGw7XG4gICAgcHVibGljIHVuYXZhaWxhYmxlTWV0aG9kczogUmVjb3JkPHN0cmluZywgYm9vbGVhbj4gPSB7fTtcbiAgICBwdWJsaWMgZ3JvdXBlZE9wdGlvbnM6IHsga2V5OiBzdHJpbmc7IGxhYmVsOiBzdHJpbmc7IG9wdGlvbnM6IGFueVtdIH1bXSA9IFtdO1xuXG4gICAgcHJpdmF0ZSBsYXN0QWRkcmVzc0tleTogc3RyaW5nIHwgbnVsbCA9IG51bGw7XG4gICAgcHJpdmF0ZSBsb2FkaW5nU3RlcCA9IGZhbHNlO1xuICAgIHByaXZhdGUgcHJlbG9hZFJlcXVlc3RJZCA9IDA7XG5cbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgdGhpcy5pc0xhc3RTdGVwJC5waXBlKHRha2VVbnRpbERlc3Ryb3llZCh0aGlzLl9kZXN0cm95UmVmKSkuc3Vic2NyaWJlKHJlcyA9PiB0aGlzLmlzTGFzdE9uZSA9IHJlcyk7XG4gICAgICAgIHRoaXMubG9hZGluZ1N0ZXAkLnBpcGUodGFrZVVudGlsRGVzdHJveWVkKHRoaXMuX2Rlc3Ryb3lSZWYpKS5zdWJzY3JpYmUocmVzID0+IHRoaXMubG9hZGluZ1N0ZXAgPSAhIXJlcyk7XG4gICAgfVxuXG4gICAgbmdPbkluaXQoKSB7XG4gICAgICAgIGlmICghdGhpcy5jb21wYWN0U2hpcG1lbnRWaWV3KSB7XG4gICAgICAgICAgICB0aGlzLl9zaGlwbWVudFNlcnZpY2UuZ2V0U2hpcG1lbnRNZXRob2RzKCk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9jaGVja291dFNlcnZpY2UuYXNzb2NpYXRlZERhdGEkXG4gICAgICAgICAgICAucGlwZSh0YWtlVW50aWxEZXN0cm95ZWQodGhpcy5fZGVzdHJveVJlZikpXG4gICAgICAgICAgICAuc3Vic2NyaWJlKGRhdGEgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuY29zdG9zID0gZGF0YSAmJiBkYXRhLmZpbmQoKHZhbHVlOiBhbnkpID0+IHZhbHVlLnR5cGUgPT0gJ3NoaXBtZW50JykgfHwgbnVsbDtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMuZXJyb3IkXG4gICAgICAgICAgICAucGlwZSh0YWtlVW50aWxEZXN0cm95ZWQodGhpcy5fZGVzdHJveVJlZikpXG4gICAgICAgICAgICAuc3Vic2NyaWJlKGVycm9yS2V5ID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLnNoaXBtZW50RXJyb3JLZXkgPSBlcnJvcktleTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgIGlmICghdGhpcy5jb21wYWN0U2hpcG1lbnRWaWV3KSB7XG4gICAgICAgICAgICB0aGlzLnN0YXRlJFxuICAgICAgICAgICAgICAgIC5waXBlKHRha2VVbnRpbERlc3Ryb3llZCh0aGlzLl9kZXN0cm95UmVmKSlcbiAgICAgICAgICAgICAgICAuc3Vic2NyaWJlKHJlcyA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChyZXMuZGF0YSAmJiByZXMuZGF0YS5tZXRob2QpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRNZXRob2RDb2RlID0gcmVzLmRhdGEubWV0aG9kO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zeW5jTGVnYWN5U2VsZWN0aW9uU3RhdGUoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICB0aGlzLm1ldGhvZHMkXG4gICAgICAgICAgICAgICAgLnBpcGUodGFrZVVudGlsRGVzdHJveWVkKHRoaXMuX2Rlc3Ryb3lSZWYpKVxuICAgICAgICAgICAgICAgIC5zdWJzY3JpYmUobWV0aG9kcyA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmICghbWV0aG9kcz8ubGVuZ3RoIHx8ICF0aGlzLnNlbGVjdGVkTWV0aG9kQ29kZSkgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBmb3VuZE1ldGhvZCA9IG1ldGhvZHMuZmluZCgobWV0aG9kOiBhbnkpID0+IG1ldGhvZC5jb2RlID09PSB0aGlzLnNlbGVjdGVkTWV0aG9kQ29kZSk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChmb3VuZE1ldGhvZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5tZXRob2RTZWxlY3QgPSBmb3VuZE1ldGhvZDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB0aGlzLnN5bmNMZWdhY3lTZWxlY3Rpb25TdGF0ZSgpO1xuICAgICAgICAgICAgICAgICAgICAvLyBXaGVuIHRoZSB1c2VyIG5hdmlnYXRlcyBiYWNrIHRvIGFkZHJlc3MgYW5kIHJlc3VibWl0cywgdGhlIHNlcnZlciBjbGVhcnNcbiAgICAgICAgICAgICAgICAgICAgLy8gdGhlIHNoaXBtZW50IHN0YXRlLiBUaGUgY2xpZW50IHN0aWxsIHNob3dzIHRoZSBwcmV2aW91c2x5IHNlbGVjdGVkIG1ldGhvZFxuICAgICAgICAgICAgICAgICAgICAvLyBidXQgc2V0Q29udHJhY3QoKSB3b3VsZCBmYWlsIHNpbGVudGx5IGJlY2F1c2UgdGhlIHNlcnZlciBubyBsb25nZXIgaGFzXG4gICAgICAgICAgICAgICAgICAgIC8vIHRoZSBtZXRob2Qgc2V0LiBSZS1jYWxsIHNldE1ldGhvZCgpIHRvIHJlc3RvcmUgc2VydmVyLXNpZGUgc3RhdGUuXG4gICAgICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgICAgICF0aGlzLnJlc3RvcmVkT25Jbml0ICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAhdGhpcy5fY2hlY2tvdXRTZXJ2aWNlLmlzU3RlcFJlYWR5KCdzaGlwbWVudCcpICYmXG4gICAgICAgICAgICAgICAgICAgICAgICBmb3VuZE1ldGhvZFxuICAgICAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucmVzdG9yZWRPbkluaXQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRNZXRob2QoZm91bmRNZXRob2QpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5jb21wYWN0U2hpcG1lbnRWaWV3KSB7XG4gICAgICAgICAgICB0aGlzLl9jaGVja291dFNlcnZpY2Uuc3RhdGUkXG4gICAgICAgICAgICAgICAgLnBpcGUodGFrZVVudGlsRGVzdHJveWVkKHRoaXMuX2Rlc3Ryb3lSZWYpKVxuICAgICAgICAgICAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBhZGRyZXNzRGF0YSA9IHRoaXMuX2NoZWNrb3V0U2VydmljZS5nZXRTdGVwRGF0YSgnYWRkcmVzcycpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoIWFkZHJlc3NEYXRhKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmxhc3RBZGRyZXNzS2V5ID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3NoaXBtZW50U2VydmljZS5yZXN0YXJ0U3RlcCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZE9wdGlvbklkID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2luZ2xlT3B0aW9ucyA9IFtdO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5ncm91cGVkT3B0aW9ucyA9IFtdO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy51bmF2YWlsYWJsZU1ldGhvZHMgPSB7fTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2hpcG1lbnRFcnJvcktleSA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnN1bW1hcnlDaGFuZ2UuZW1pdCh7fSk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgY29uc3Qga2V5ID0gSlNPTi5zdHJpbmdpZnkoYWRkcmVzc0RhdGEpO1xuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5sYXN0QWRkcmVzc0tleSA9PT0ga2V5KSByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgIHRoaXMubGFzdEFkZHJlc3NLZXkgPSBrZXk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX3NoaXBtZW50U2VydmljZS5yZXN0YXJ0U3RlcCgpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkT3B0aW9uSWQgPSBudWxsO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnN1bW1hcnlDaGFuZ2UuZW1pdCh7fSk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucHJlbG9hZFNpbmdsZU9wdGlvbnMoKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5ncm91cGVkT3B0aW9ucyA9IFtdO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5tb3JlSW5mb0luTWV0aG9kID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBmaWx0ZXJNZXRob2RzKG1ldGhvZHM6IGFueSkge1xuICAgICAgICByZXR1cm4gbWV0aG9kcy5maWx0ZXIoKG1ldGhvZDogYW55KSA9PiAhdGhpcy5faGlkZGVuTWV0aG9kcy5pbmNsdWRlcyhtZXRob2QubmFtZSkpO1xuICAgIH1cblxuICAgIGFzeW5jIHNlbGVjdE1ldGhvZChtZXRob2Q6IGFueSwgZXZlbnQ6IGFueSkge1xuICAgICAgICB0aGlzLnNldEFjdGl2ZUJ1dHRvbihldmVudCk7XG4gICAgICAgIGF3YWl0IHRoaXMuc2V0TWV0aG9kKG1ldGhvZCk7XG4gICAgfVxuXG4gICAgc2V0QWN0aXZlQnV0dG9uKGV2ZW50OiBhbnkpIHtcbiAgICAgICAgY29uc3QgcGFyZW50ID0gZXZlbnQudGFyZ2V0LnBhcmVudEVsZW1lbnQuY2hpbGRyZW47XG4gICAgICAgIGZvciAoY29uc3QgYnV0dG9uIG9mIHBhcmVudCkge1xuICAgICAgICAgICAgaWYgKGJ1dHRvbi5jbGFzc0xpc3QuY29udGFpbnMoJ2FjdGl2ZScpKSB7XG4gICAgICAgICAgICAgICAgYnV0dG9uLmNsYXNzTGlzdC5yZW1vdmUoJ2FjdGl2ZScpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGV2ZW50LnRhcmdldC5jbGFzc0xpc3QuYWRkKCdhY3RpdmUnKTtcbiAgICB9XG5cbiAgICBzZXRBY3RpdmUoJGV2ZW50OiBhbnkpIHtcbiAgICAgICAgdGhpcy5zZXRBY3RpdmVCdXR0b24oJGV2ZW50KTtcbiAgICB9XG5cbiAgICBpc01ldGhvZEFjdGl2ZShtZXRob2RDb2RlOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc2VsZWN0ZWRNZXRob2RDb2RlID09PSBtZXRob2RDb2RlO1xuICAgIH1cblxuICAgIHNldE1ldGhvZChtZXRob2Q6IGFueSkge1xuICAgICAgICB0aGlzLm1ldGhvZFNlbGVjdCA9IG1ldGhvZDtcbiAgICAgICAgdGhpcy5zZWxlY3RlZE1ldGhvZENvZGUgPSBtZXRob2QuY29kZTtcbiAgICAgICAgdGhpcy5sb2FkaW5nSW50ZXJuYWwgPSB0cnVlO1xuICAgICAgICB0aGlzLmJ1dHRvbnNEaXNhYmxlZCA9IHRydWU7XG4gICAgICAgIHRoaXMuZW5hYmxlZENvbmZpcm1CdXR0b24gPSBmYWxzZTtcblxuICAgICAgICB0aGlzLl9zaGlwbWVudFNlcnZpY2Uuc2V0TWV0aG9kKG1ldGhvZC5jb2RlKS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMubG9hZGluZ0ludGVybmFsID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLmVuYWJsZWRDb25maXJtQnV0dG9uID0gdGhpcy5fY2hlY2tvdXRTZXJ2aWNlLmlzU3RlcFJlYWR5KCdzaGlwbWVudCcpO1xuICAgICAgICAgICAgdGhpcy5idXR0b25zRGlzYWJsZWQgPSBmYWxzZTtcbiAgICAgICAgfSkuY2F0Y2goKGVycm9yKSA9PiB7XG4gICAgICAgICAgICB0aGlzLl9jaGVja291dFNlcnZpY2Uubm90aWZ5Q2hlY2tvdXRFcnJvcihlcnJvcik7XG4gICAgICAgICAgICB0aGlzLmxvYWRpbmdJbnRlcm5hbCA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5lbmFibGVkQ29uZmlybUJ1dHRvbiA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5idXR0b25zRGlzYWJsZWQgPSBmYWxzZTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzeW5jTGVnYWN5U2VsZWN0aW9uU3RhdGUoKSB7XG4gICAgICAgIGlmICh0aGlzLmNvbXBhY3RTaGlwbWVudFZpZXcgfHwgIXRoaXMuX2NoZWNrb3V0U2VydmljZS5pc1N0ZXBSZWFkeSgnc2hpcG1lbnQnKSkgcmV0dXJuO1xuICAgICAgICB0aGlzLmVuYWJsZWRDb25maXJtQnV0dG9uID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5idXR0b25zRGlzYWJsZWQgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5sb2FkaW5nSW50ZXJuYWwgPSBmYWxzZTtcbiAgICB9XG5cbiAgICB2YWxpZE5hbWUobmFtZTogYW55LCBjb3N0TmFtZT86IHN0cmluZykge1xuICAgICAgICBpZiAoY29zdE5hbWU/LmluY2x1ZGVzKCdwaWNrdXBfc3RvcmUnKSkge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGlzTmFOKG5hbWUpO1xuICAgIH1cblxuICAgIGVtaXRSZXN1bHQgPSBhc3luYyAobWV0aG9kX25hbWU6IHN0cmluZywgY29udHJhY3RfZGF0YTogYW55KSA9PiB7XG4gICAgICAgIGNvbnRyYWN0X2RhdGEgPSB7XG4gICAgICAgICAgICAuLi5jb250cmFjdF9kYXRhLFxuICAgICAgICAgICAgc2hpcHBpbmdfbWV0aG9kX2NvbnRyYWN0OiBtZXRob2RfbmFtZSArICdfJyArIGNvbnRyYWN0X2RhdGEubmFtZSxcbiAgICAgICAgICAgIHNoaXBwaW5nX21ldGhvZF9icmFuY2hfY29kZTogbWV0aG9kX25hbWUgPT0gJ2JyYW5jaF9kZWxpdmVyeSdcbiAgICAgICAgICAgICAgICA/IGNvbnRyYWN0X2RhdGEuc3VjdXJzYWxfaWRcbiAgICAgICAgICAgICAgICA6IChjb250cmFjdF9kYXRhLnNoaXBwaW5nX21ldGhvZF9icmFuY2hfY29kZSB8fCBjb250cmFjdF9kYXRhLm5hbWUpLFxuICAgICAgICB9O1xuICAgICAgICB0aGlzLmxvYWRpbmdJbnRlcm5hbCA9IHRydWU7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBhd2FpdCB0aGlzLl9zaGlwbWVudFNlcnZpY2Uuc2V0Q29udHJhY3QoY29udHJhY3RfZGF0YSk7XG4gICAgICAgICAgICB0aGlzLmVuYWJsZWRDb25maXJtQnV0dG9uID0gdHJ1ZTtcbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgIHRoaXMuX2NoZWNrb3V0U2VydmljZS5ub3RpZnlDaGVja291dEVycm9yKGVycm9yKTtcbiAgICAgICAgICAgIHRoaXMuZW5hYmxlZENvbmZpcm1CdXR0b24gPSBmYWxzZTtcbiAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICAgIHRoaXMubG9hZGluZ0ludGVybmFsID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB2ZXJpZnlWYWxpZGF0ZShjb3N0czogYW55W10sIGNvbnRyYWN0OiBhbnksIGRhdGE6IGFueSkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgY29zdHMuZm9yRWFjaCgoY29zdDogYW55KSA9PiAoY29zdD8uY29udHJhY3RzIHx8IFtdKS5mb3JFYWNoKChjbzogYW55KSA9PiBjby5zZWxlY3RlZCA9IGZhbHNlKSk7XG4gICAgICAgICAgICBjb25zdCBzZWxlY3RlZENvc3QgPSBjb3N0cy5maW5kKChjb3N0OiBhbnkpID0+IGNvc3Q/Lm5hbWUgPT0gY29udHJhY3QpO1xuICAgICAgICAgICAgY29uc3Qgc2VsZWN0ZWRDb250cmFjdCA9IChzZWxlY3RlZENvc3Q/LmNvbnRyYWN0cyB8fCBbXSkuZmluZCgoY29udHJhOiBhbnkpID0+IGNvbnRyYT8ubmFtZSA9PSBkYXRhPy5uYW1lKTtcbiAgICAgICAgICAgIGlmIChzZWxlY3RlZENvbnRyYWN0KSB7XG4gICAgICAgICAgICAgICAgc2VsZWN0ZWRDb250cmFjdC5zZWxlY3RlZCA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICBjb25zb2xlLmxvZygnZXJyb3IgYWwgYnVzY2FyIGNvbnRyYXRvJywgZXJyb3IpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuZW1pdFJlc3VsdChjb250cmFjdCwgZGF0YSk7XG4gICAgfVxuXG4gICAgYXN5bmMgcHJlbG9hZFNpbmdsZU9wdGlvbnMoKSB7XG4gICAgICAgIGNvbnN0IHJlcXVlc3RJZCA9ICsrdGhpcy5wcmVsb2FkUmVxdWVzdElkO1xuICAgICAgICB0aGlzLmxvYWRpbmdQcmVsb2FkID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5zaW5nbGVPcHRpb25zID0gW107XG4gICAgICAgIHRoaXMuZ3JvdXBlZE9wdGlvbnMgPSBbXTtcbiAgICAgICAgdGhpcy5zZWxlY3RlZE9wdGlvbklkID0gbnVsbDtcbiAgICAgICAgdGhpcy51bmF2YWlsYWJsZU1ldGhvZHMgPSB7fTtcbiAgICAgICAgdGhpcy5zaGlwbWVudEVycm9yS2V5ID0gbnVsbDtcbiAgICAgICAgY29uc3QgbWV0aG9kT3B0aW9ucyA9IGF3YWl0IHRoaXMuX3NoaXBtZW50U2VydmljZS5nZXRTaGlwcGluZ09wdGlvbnMoKTtcbiAgICAgICAgaWYgKHJlcXVlc3RJZCAhPT0gdGhpcy5wcmVsb2FkUmVxdWVzdElkKSB7XG4gICAgICAgICAgICAvLyBBIG5ld2VyIGNhbGwgc3VwZXJzZWRlZCB0aGlzIG9uZSDigJQgZGlzY2FyZCBzdGFsZSByZXN1bHRzIHRvIHByZXZlbnQgZHVwbGljYXRlc1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmICghbWV0aG9kT3B0aW9ucyB8fCAhbWV0aG9kT3B0aW9ucy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHRoaXMuc2hpcG1lbnRFcnJvcktleSA9ICduby1zaGlwcGluZy1vcHRpb25zLWhlbHAnO1xuICAgICAgICAgICAgdGhpcy5sb2FkaW5nUHJlbG9hZCA9IGZhbHNlO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGxldCBvcHRpb25JbmRleCA9IDA7XG4gICAgICAgIGZvciAoY29uc3QgZW50cnkgb2YgbWV0aG9kT3B0aW9ucykge1xuICAgICAgICAgICAgY29uc3QgbWV0aG9kID0gZW50cnk/Lm1ldGhvZDtcbiAgICAgICAgICAgIGlmICghbWV0aG9kIHx8IG1ldGhvZC5uYW1lID09PSAnVVBTJykgY29udGludWU7XG4gICAgICAgICAgICBjb25zdCBvcHRpb25zID0gZW50cnk/Lm9wdGlvbnMgfHwgW107XG4gICAgICAgICAgICBsZXQgaGFzQ29udHJhY3RzID0gZmFsc2U7XG4gICAgICAgICAgICBvcHRpb25zLmZvckVhY2goKG9wdGlvbjogYW55KSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgY29udHJhY3RzID0gb3B0aW9uPy5jb250cmFjdHMgfHwgW107XG4gICAgICAgICAgICAgICAgaWYgKCFjb250cmFjdHMubGVuZ3RoKSByZXR1cm47XG4gICAgICAgICAgICAgICAgaGFzQ29udHJhY3RzID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICBjb250cmFjdHMuZm9yRWFjaCgoY29udHJhY3Q6IGFueSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBub3JtYWxpemVkQ29udHJhY3QgPSB7IC4uLmNvbnRyYWN0IH07XG4gICAgICAgICAgICAgICAgICAgIGlmICghbm9ybWFsaXplZENvbnRyYWN0LmNvbnRyYWN0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBub3JtYWxpemVkQ29udHJhY3QuY29udHJhY3QgPSBvcHRpb24ubmFtZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBvcHRpb25JbmRleCArPSAxO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNpbmdsZU9wdGlvbnMucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZDogYCR7bWV0aG9kLmNvZGV9LSR7b3B0aW9uLm5hbWV9LSR7Y29udHJhY3QubmFtZX0tJHtvcHRpb25JbmRleH1gLFxuICAgICAgICAgICAgICAgICAgICAgICAgbWV0aG9kLFxuICAgICAgICAgICAgICAgICAgICAgICAgY29zdE5hbWU6IG9wdGlvbi5uYW1lLFxuICAgICAgICAgICAgICAgICAgICAgICAgY29udHJhY3Q6IG5vcm1hbGl6ZWRDb250cmFjdFxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgaWYgKCFoYXNDb250cmFjdHMpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnVuYXZhaWxhYmxlTWV0aG9kc1ttZXRob2QuY29kZV0gPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHRoaXMuZ3JvdXBlZE9wdGlvbnMgPSB0aGlzLmJ1aWxkR3JvdXBlZE9wdGlvbnModGhpcy5zaW5nbGVPcHRpb25zKTtcbiAgICAgICAgaWYgKCF0aGlzLnNpbmdsZU9wdGlvbnMubGVuZ3RoICYmIE9iamVjdC5rZXlzKHRoaXMudW5hdmFpbGFibGVNZXRob2RzKS5sZW5ndGgpIHtcbiAgICAgICAgICAgIHRoaXMuc2hpcG1lbnRFcnJvcktleSA9ICduby1zaGlwcGluZy1vcHRpb25zLWhlbHAnO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMubG9hZGluZ1ByZWxvYWQgPSBmYWxzZTtcbiAgICB9XG5cbiAgICBhc3luYyBzZWxlY3RTaW5nbGVPcHRpb24ob3B0aW9uOiBhbnkpIHtcbiAgICAgICAgaWYgKCFvcHRpb24pIHJldHVybjtcbiAgICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRPcHRpb25JZCA9PT0gb3B0aW9uLmlkICYmICF0aGlzLmxvYWRpbmdJbnRlcm5hbCkgcmV0dXJuO1xuICAgICAgICB0aGlzLnNlbGVjdGVkT3B0aW9uSWQgPSBvcHRpb24uaWQ7XG4gICAgICAgIHRoaXMubG9hZGluZ0ludGVybmFsID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5zaGlwbWVudEVycm9yS2V5ID0gbnVsbDtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGxldCBjb250cmFjdERhdGEgPSB7IC4uLihvcHRpb24uY29udHJhY3QgfHwge30pIH07XG4gICAgICAgICAgICBjb25zdCBpbml0aWFsQ29udHJhY3ROYW1lID0gY29udHJhY3REYXRhLm5hbWUgfHwgb3B0aW9uLmNvbnRyYWN0Py5uYW1lO1xuICAgICAgICAgICAgaWYgKHRoaXMuc2hvdWxkRW5yaWNoRnJvbUxlZ2FjeShvcHRpb24pKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgbGVnYWN5Q29udHJhY3REYXRhID0gYXdhaXQgdGhpcy5nZXRMZWdhY3lDb250cmFjdERhdGEoXG4gICAgICAgICAgICAgICAgICAgIG9wdGlvbi5tZXRob2Q/LmNvZGUsXG4gICAgICAgICAgICAgICAgICAgIG9wdGlvbi5jb3N0TmFtZSxcbiAgICAgICAgICAgICAgICAgICAgaW5pdGlhbENvbnRyYWN0TmFtZVxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgaWYgKGxlZ2FjeUNvbnRyYWN0RGF0YSkge1xuICAgICAgICAgICAgICAgICAgICBjb250cmFjdERhdGEgPSB7IC4uLmNvbnRyYWN0RGF0YSwgLi4ubGVnYWN5Q29udHJhY3REYXRhIH07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgY29udHJhY3RUeXBlID0gY29udHJhY3REYXRhLmNvbnRyYWN0IHx8IG9wdGlvbi5jb3N0TmFtZTtcbiAgICAgICAgICAgIGNvbnN0IGNvbnRyYWN0TmFtZSA9IGNvbnRyYWN0RGF0YS5uYW1lIHx8IG9wdGlvbi5jb250cmFjdD8ubmFtZTtcbiAgICAgICAgICAgIGNvbnN0IHNoaXBwaW5nTWV0aG9kQ29udHJhY3QgPSBgJHtvcHRpb24uY29zdE5hbWV9XyR7Y29udHJhY3ROYW1lfWA7XG4gICAgICAgICAgICBjb25zdCBzaGlwcGluZ01ldGhvZEJyYW5jaENvZGUgPSBvcHRpb24uY29zdE5hbWUgPT09ICdicmFuY2hfZGVsaXZlcnknXG4gICAgICAgICAgICAgICAgPyAoY29udHJhY3REYXRhLnN1Y3Vyc2FsX2lkIHx8IGNvbnRyYWN0RGF0YS5udW1iZXIgfHwgY29udHJhY3REYXRhLmJyYW5jaF9wcm9wZXJ0eT8ubnVtYmVyIHx8IGNvbnRyYWN0TmFtZSlcbiAgICAgICAgICAgICAgICA6IGNvbnRyYWN0TmFtZTtcbiAgICAgICAgICAgIGNvbnN0IHNhbml0aXplZENvbnRyYWN0RGF0YSA9IHsgLi4uY29udHJhY3REYXRhIH07XG4gICAgICAgICAgICBkZWxldGUgc2FuaXRpemVkQ29udHJhY3REYXRhLmJyYW5jaF9wcm9wZXJ0eTtcbiAgICAgICAgICAgIGRlbGV0ZSBzYW5pdGl6ZWRDb250cmFjdERhdGEub3B0aW9uO1xuICAgICAgICAgICAgY29uc3QgcmVxdWVzdFBheWxvYWQgPSB7XG4gICAgICAgICAgICAgICAgLi4uc2FuaXRpemVkQ29udHJhY3REYXRhLFxuICAgICAgICAgICAgICAgIHNoaXBwaW5nSWQ6IG9wdGlvbi5tZXRob2QuY29kZSxcbiAgICAgICAgICAgICAgICBtZXRob2Q6IG9wdGlvbi5tZXRob2QuY29kZSxcbiAgICAgICAgICAgICAgICBvcHRpb246IG9wdGlvbi5jb3N0TmFtZSxcbiAgICAgICAgICAgICAgICBjb250cmFjdDogY29udHJhY3RUeXBlLFxuICAgICAgICAgICAgICAgIG5hbWU6IGNvbnRyYWN0TmFtZSxcbiAgICAgICAgICAgICAgICBwcmljZTogY29udHJhY3REYXRhLnByaWNlLFxuICAgICAgICAgICAgICAgIHNlbGVjdGVkOiB0cnVlLFxuICAgICAgICAgICAgICAgIHNoaXBwaW5nX21ldGhvZF9jb250cmFjdDogc2hpcHBpbmdNZXRob2RDb250cmFjdCxcbiAgICAgICAgICAgICAgICBzaGlwcGluZ19tZXRob2RfYnJhbmNoX2NvZGU6IHNoaXBwaW5nTWV0aG9kQnJhbmNoQ29kZVxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGNvbnN0IHN0ZXBEYXRhID0ge1xuICAgICAgICAgICAgICAgIC4uLnJlcXVlc3RQYXlsb2FkLFxuICAgICAgICAgICAgICAgIG1ldGhvZF9uYW1lOiBvcHRpb24ubWV0aG9kPy5uYW1lLFxuICAgICAgICAgICAgICAgIGNvbnRyYWN0X25hbWU6IGNvbnRyYWN0TmFtZVxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuX3NoaXBtZW50U2VydmljZS5zZXRTaGlwcGluZ09wdGlvbihyZXF1ZXN0UGF5bG9hZCwgc3RlcERhdGEpO1xuICAgICAgICAgICAgY29uc3QgbWV0aG9kTGFiZWwgPSBvcHRpb24ubWV0aG9kPy5uYW1lID8gdGhpcy5fdHJhbnNsYXRlU2VydmljZS5pbnN0YW50KG9wdGlvbi5tZXRob2QubmFtZSkgOiAnJztcbiAgICAgICAgICAgIGNvbnN0IGNvbnRyYWN0TGFiZWwgPSBjb250cmFjdE5hbWUgPyB0aGlzLl90cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoY29udHJhY3ROYW1lKSA6ICcnO1xuICAgICAgICAgICAgY29uc3QgZ3JvdXBMYWJlbCA9IG9wdGlvbi5jb3N0TmFtZSA/IHRoaXMuX3RyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudCh0aGlzLnJlc29sdmVHcm91cExhYmVsKG9wdGlvbi5jb3N0TmFtZSkpIDogJyc7XG4gICAgICAgICAgICBjb25zdCBsYWJlbCA9IFtncm91cExhYmVsLCBtZXRob2RMYWJlbCwgY29udHJhY3RMYWJlbF0uZmlsdGVyKEJvb2xlYW4pLmpvaW4oJyDCtyAnKTtcbiAgICAgICAgICAgIGNvbnN0IGRldGFpbCA9IGNvbnRyYWN0RGF0YT8uY29tcHV0ZWQgfHwgY29udHJhY3REYXRhPy5kZXRhaWwgfHwgb3B0aW9uLmNvbnRyYWN0Py5jb21wdXRlZCB8fCBvcHRpb24uY29udHJhY3Q/LmRldGFpbCB8fCAnJztcbiAgICAgICAgICAgIHRoaXMuc3VtbWFyeUNoYW5nZS5lbWl0KHsgbGFiZWw6IGxhYmVsIHx8IHVuZGVmaW5lZCwgZGV0YWlsOiBkZXRhaWwgfHwgdW5kZWZpbmVkIH0pO1xuICAgICAgICAgICAgaWYgKHRoaXMuY29tcGFjdFNoaXBtZW50Vmlldykge1xuICAgICAgICAgICAgICAgIHRoaXMuYWR2YW5jZVN0ZXAuZW1pdCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgdGhpcy5zaGlwbWVudEVycm9yS2V5ID0gdGhpcy5fY2hlY2tvdXRTZXJ2aWNlLmdldENoZWNrb3V0RXJyb3JNZXNzYWdlKGVycm9yKTtcbiAgICAgICAgICAgIHRoaXMuX2NoZWNrb3V0U2VydmljZS5ub3RpZnlDaGVja291dEVycm9yKGVycm9yKTtcbiAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICAgIHRoaXMubG9hZGluZ0ludGVybmFsID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIHNob3VsZEVucmljaEZyb21MZWdhY3kob3B0aW9uOiBhbnkpOiBib29sZWFuIHtcbiAgICAgICAgaWYgKCFvcHRpb24gfHwgb3B0aW9uLmNvc3ROYW1lICE9PSAnYnJhbmNoX2RlbGl2ZXJ5JykgcmV0dXJuIGZhbHNlO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldExlZ2FjeUNvbnRyYWN0RGF0YSA9IGFzeW5jIChcbiAgICAgICAgbWV0aG9kQ29kZTogc3RyaW5nIHwgdW5kZWZpbmVkLFxuICAgICAgICBjb3N0TmFtZTogc3RyaW5nIHwgdW5kZWZpbmVkLFxuICAgICAgICBjb250cmFjdE5hbWU6IHN0cmluZyB8IHVuZGVmaW5lZFxuICAgICkgPT4ge1xuICAgICAgICBpZiAoIW1ldGhvZENvZGUgfHwgIWNvc3ROYW1lIHx8ICFjb250cmFjdE5hbWUpIHJldHVybiBudWxsO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgY29uc3QgY29zdHMgPSBhd2FpdCB0aGlzLl9zaGlwbWVudFNlcnZpY2UuZ2V0Q29zdHNGb3JNZXRob2QobWV0aG9kQ29kZSk7XG4gICAgICAgICAgICBjb25zdCBzZWxlY3RlZENvc3QgPSAoY29zdHMgfHwgW10pLmZpbmQoKGNvc3Q6IGFueSkgPT4gU3RyaW5nKGNvc3Q/Lm5hbWUgfHwgJycpID09PSBTdHJpbmcoY29zdE5hbWUpKTtcbiAgICAgICAgICAgIGlmICghc2VsZWN0ZWRDb3N0Py5jb250cmFjdHM/Lmxlbmd0aCkgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICBjb25zdCBzZWxlY3RlZENvbnRyYWN0ID0gc2VsZWN0ZWRDb3N0LmNvbnRyYWN0cy5maW5kKChjb250cmFjdDogYW55KSA9PlxuICAgICAgICAgICAgICAgIFN0cmluZyhjb250cmFjdD8ubmFtZSB8fCAnJykgPT09IFN0cmluZyhjb250cmFjdE5hbWUpXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgcmV0dXJuIHNlbGVjdGVkQ29udHJhY3QgfHwgbnVsbDtcbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBidWlsZEdyb3VwZWRPcHRpb25zKG9wdGlvbnM6IGFueVtdKSB7XG4gICAgICAgIGlmICghb3B0aW9ucz8ubGVuZ3RoKSByZXR1cm4gW107XG4gICAgICAgIGNvbnN0IGdyb3VwcyA9IG5ldyBNYXA8c3RyaW5nLCBhbnlbXT4oKTtcbiAgICAgICAgb3B0aW9ucy5mb3JFYWNoKG9wdGlvbiA9PiB7XG4gICAgICAgICAgICBjb25zdCBrZXkgPSBvcHRpb24/LmNvc3ROYW1lIHx8ICdkZWZhdWx0JztcbiAgICAgICAgICAgIGlmICghZ3JvdXBzLmhhcyhrZXkpKSBncm91cHMuc2V0KGtleSwgW10pO1xuICAgICAgICAgICAgZ3JvdXBzLmdldChrZXkpPy5wdXNoKG9wdGlvbik7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gQXJyYXkuZnJvbShncm91cHMuZW50cmllcygpKS5tYXAoKFtrZXksIGdyb3VwT3B0aW9uc10pID0+ICh7XG4gICAgICAgICAgICBrZXksXG4gICAgICAgICAgICBsYWJlbDogdGhpcy5yZXNvbHZlR3JvdXBMYWJlbChrZXksIGdyb3VwT3B0aW9ucz8uWzBdPy5tZXRob2Q/Lm5hbWUpLFxuICAgICAgICAgICAgb3B0aW9uczogZ3JvdXBPcHRpb25zXG4gICAgICAgIH0pKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHJlc29sdmVHcm91cExhYmVsKGNvc3ROYW1lOiBzdHJpbmcgfCB1bmRlZmluZWQgfCBudWxsLCBtZXRob2ROYW1lPzogc3RyaW5nKSB7XG4gICAgICAgIGlmIChjb3N0TmFtZSkge1xuICAgICAgICAgICAgY29uc3Qgbm9ybWFsaXplZCA9IGNvc3ROYW1lLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgICAgICBpZiAobm9ybWFsaXplZCA9PT0gJ2JyYW5jaF9kZWxpdmVyeScpIHJldHVybiAnUmV0aXJvIGVuIHN1Y3Vyc2FsJztcbiAgICAgICAgICAgIGlmIChub3JtYWxpemVkID09PSAnaG9tZV9kZWxpdmVyeScpIHJldHVybiAnRW52w61vIGEgZG9taWNpbGlvJztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbWV0aG9kTmFtZSB8fCAoY29zdE5hbWUgfHwgJycpO1xuICAgIH1cblxuICAgIGdvQmFjaygpIHtcbiAgICAgICAgdGhpcy5fY2hlY2tvdXRTZXJ2aWNlLmJhY2soKTtcbiAgICB9XG5cbiAgICBpc05leHREaXNhYmxlZCgpIHtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIHRoaXMubG9hZGluZ0ludGVybmFsIHx8XG4gICAgICAgICAgICB0aGlzLmxvYWRpbmdTdGVwIHx8XG4gICAgICAgICAgICB0aGlzLmJ1dHRvbnNEaXNhYmxlZCB8fFxuICAgICAgICAgICAgIXRoaXMuZW5hYmxlZENvbmZpcm1CdXR0b24gfHxcbiAgICAgICAgICAgICF0aGlzLl9jaGVja291dFNlcnZpY2UuaXNTdGVwUmVhZHkoJ3NoaXBtZW50JylcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBvbk5leHRCdXR0b25Db250YWluZXJDbGljaygpIHtcbiAgICAgICAgaWYgKCF0aGlzLmlzTmV4dERpc2FibGVkKCkpIHJldHVybjtcbiAgICAgICAgdGhpcy5uZXh0KCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXROZXh0QmxvY2tlZE1lc3NhZ2UoKSB7XG4gICAgICAgIGlmICh0aGlzLmxvYWRpbmdJbnRlcm5hbCB8fCB0aGlzLmxvYWRpbmdTdGVwIHx8IHRoaXMuYnV0dG9uc0Rpc2FibGVkKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghdGhpcy5fY2hlY2tvdXRTZXJ2aWNlLmlzU3RlcFJlYWR5KCdzaGlwbWVudCcpKSB7XG4gICAgICAgICAgICByZXR1cm4gJ3NoaXBtZW50LXNlbGVjdGlvbi1yZXF1aXJlZCc7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBuZXh0KCkge1xuICAgICAgICBjb25zdCBibG9ja2VkTWVzc2FnZSA9IHRoaXMuZ2V0TmV4dEJsb2NrZWRNZXNzYWdlKCk7XG4gICAgICAgIGlmIChibG9ja2VkTWVzc2FnZSkge1xuICAgICAgICAgICAgdGhpcy5fdG9hc3RTZXJ2aWNlLnNob3coYmxvY2tlZE1lc3NhZ2UpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgdGhpcy5sb2FkaW5nSW50ZXJuYWwgfHxcbiAgICAgICAgICAgIHRoaXMubG9hZGluZ1N0ZXAgfHxcbiAgICAgICAgICAgIHRoaXMuYnV0dG9uc0Rpc2FibGVkIHx8XG4gICAgICAgICAgICAhdGhpcy5lbmFibGVkQ29uZmlybUJ1dHRvbiB8fFxuICAgICAgICAgICAgIXRoaXMuX2NoZWNrb3V0U2VydmljZS5pc1N0ZXBSZWFkeSgnc2hpcG1lbnQnKVxuICAgICAgICApIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9jaGVja291dFNlcnZpY2UubmV4dCgpO1xuICAgIH1cbn1cbiIsIkBpZihjb21wYWN0U2hpcG1lbnRWaWV3KXtcbjxhcHAtc2hpcG1lbnQtZWMtc2luZ2xlIFtsb2FkaW5nSW50ZXJuYWxdPVwibG9hZGluZ0ludGVybmFsXCIgW2xvYWRpbmdQcmVsb2FkXT1cImxvYWRpbmdQcmVsb2FkXCJcbiAgICBbc2luZ2xlT3B0aW9uc109XCJzaW5nbGVPcHRpb25zXCIgW2dyb3VwZWRPcHRpb25zXT1cImdyb3VwZWRPcHRpb25zXCIgW3NlbGVjdGVkT3B0aW9uSWRdPVwic2VsZWN0ZWRPcHRpb25JZFwiXG4gICAgW3VuYXZhaWxhYmxlTWV0aG9kc109XCJ1bmF2YWlsYWJsZU1ldGhvZHNcIiBbbWV0aG9kc109XCJtZXRob2RzJCB8IGFzeW5jXCIgW3NoaXBtZW50RXJyb3JLZXldPVwic2hpcG1lbnRFcnJvcktleVwiXG4gICAgW2lzRnJlZVNoaXBwaW5nXT1cImNvc3Rvcz8uYW1vdW50ID09IDBcIiAoc2VsZWN0T3B0aW9uKT1cInNlbGVjdFNpbmdsZU9wdGlvbigkZXZlbnQpXCI+XG48L2FwcC1zaGlwbWVudC1lYy1zaW5nbGU+XG59IEBlbHNlIHtcbjxkaXYgY2xhc3M9XCJjb250YWluZXItZmx1aWRcIj5cbiAgICA8ZGl2IGNsYXNzPVwiY29sLTEyXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkIHRleHQtY2VudGVyXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZC1oZWFkZXIgdGV4dC1kYXJrXCI+XG4gICAgICAgICAgICAgICAgPGg0Pnt7ICdzZWxlY3QtbWV0aG9kJyB8IHRyYW5zbGF0ZSB9fTwvaDQ+XG4gICAgICAgICAgICAgICAgQGlmKG1ldGhvZHNMb2FkaW5nJCB8IGFzeW5jKXtcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGZsZXgtY29sdW1uIGFsaWduLWl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIG10LTMgbWItMlwiPlxuICAgICAgICAgICAgICAgICAgICA8YXBwLWxvYWRpbmctaW5saW5lLWVjPjwvYXBwLWxvYWRpbmctaW5saW5lLWVjPlxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRleHQtc2Vjb25kYXJ5IG10LTJcIj57eyAnbG9hZGluZycgfCB0cmFuc2xhdGUgfX0uLi48L3NwYW4+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgfSBAZWxzZSB7XG4gICAgICAgICAgICAgICAgQGlmKG1ldGhvZHMkIHwgYXN5bmM7IGFzIG1ldGhvZHMpe1xuICAgICAgICAgICAgICAgIEBpZihmaWx0ZXJNZXRob2RzKG1ldGhvZHMpLmxlbmd0aCl7XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImJ0bi10b29sYmFyIGp1c3RpZnktY29udGVudC1jZW50ZXJcIiByb2xlPVwidG9vbGJhclwiIGFyaWEtbGFiZWw9XCJFbnZpb3MgdG9vbGJhclwiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiXCIgcm9sZT1cImdyb3VwXCIgYXJpYS1sYWJlbD1cIkdydXBvIGJvdG9uZXMgZW52aW9cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggYWxpZ24tY29udGVudC1zdGFydCBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIGZsZXgtd3JhcFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBmb3IobWV0aG9kIG9mIGZpbHRlck1ldGhvZHMobWV0aG9kcyk7IHRyYWNrICRpbmRleCl7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBbZGlzYWJsZWRdPVwiYnV0dG9uc0Rpc2FibGVkXCIgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzc109XCInYnRuIGJ0bi1vdXRsaW5lLXNlY29uZGFyeSBteC0xIG1iLTEnICsgKGlzTWV0aG9kQWN0aXZlKG1ldGhvZC5jb2RlKSA/ICcgYWN0aXZlJyA6ICcnKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJzZXRNZXRob2QobWV0aG9kKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBtZXRob2QubmFtZSB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICB9IEBlbHNlIHtcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGZsZXgtcm93IHctMTAwIGp1c3RpZnktY29udGVudC1jZW50ZXIgbXQtMlwiPlxuICAgICAgICAgICAgICAgICAgICA8aDUgY2xhc3M9XCJ0ZXh0LXNlY29uZGFyeVwiPnt7J25vLXNoaXBtZW50LW1ldGhvZHMnfHRyYW5zbGF0ZX19PC9oNT5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtYm9keVwiPlxuICAgICAgICAgICAgICAgIEBpZihtb3JlSW5mb0luTWV0aG9kICYmIG1ldGhvZFNlbGVjdCAmJiBtZXRob2RTZWxlY3QuZGVzY3JpcHRpb24pe1xuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3cganVzdGlmeS1jb250ZW50LWNlbnRlciBtYi0yXCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMTIgY29sLW1kLTYgY29sLWxnLTQgZC1mbGV4IGZsZXgtY29sdW1uIG1iLTJcIiBbaWRdPVwibWV0aG9kU2VsZWN0LmNvZGVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIEBmb3IobGluZSBvZiBtZXRob2RTZWxlY3QuZGVzY3JpcHRpb24uc3BsaXQoJ1xcclxcbicpOyB0cmFjayAkaW5kZXg7IGxldCBpPSRpbmRleCl7XG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBbaWRdPVwibWV0aG9kU2VsZWN0LmNvZGUrJy0nK2lcIiBbY2xhc3NdPVwiJ2xpbmUtJytpXCI+e3tsaW5lfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBAaWYoY29zdHMkIHwgYXN5bmM7IGFzIGNvc3RzKXtcbiAgICAgICAgICAgICAgICBAaWYobG9hZGluZ0ludGVybmFsICYmIG1ldGhvZFNlbGVjdCAmJiAhY29zdHMubGVuZ3RoKXtcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGZsZXgtY29sdW1uIGFsaWduLWl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIHB5LTRcIj5cbiAgICAgICAgICAgICAgICAgICAgPGFwcC1sb2FkaW5nLWlubGluZS1lYz48L2FwcC1sb2FkaW5nLWlubGluZS1lYz5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0ZXh0LXNlY29uZGFyeSBtdC0yXCI+e3sgJ2xvYWRpbmcnIHwgdHJhbnNsYXRlIH19Li4uPC9zcGFuPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIH0gQGVsc2Uge1xuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3cganVzdGlmeS1jb250ZW50LWNlbnRlclwiPlxuICAgICAgICAgICAgICAgICAgICBAZm9yKGNvc3Qgb2YgY29zdHM7IHRyYWNrICRpbmRleDsgbGV0IHkgPSAkaW5kZXgpe1xuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLWF1dG8gdGV4dC1kYXJrXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICBAaWYoKGNvc3QuY29udHJhY3RzIHx8IFtdKS5sZW5ndGggPiAwKXtcbiAgICAgICAgICAgICAgICAgICAgICAgIEBpZihjb3N0cy5sZW5ndGggPiAxKXtcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPjxiPnt7IGNvc3QubmFtZSB8IHRyYW5zbGF0ZSB9fTwvYj48L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICA8aHIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgIH0gQGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+PGI+e3sgbWV0aG9kU2VsZWN0Lm5hbWUgfCB0cmFuc2xhdGUgfX08L2I+PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGhyIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBAZm9yKGNvbnRyYWN0IG9mIChjb3N0LmNvbnRyYWN0cyB8fCBbXSk7IHRyYWNrICRpbmRleDsgbGV0IGkgPSAkaW5kZXgpe1xuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm9wdGlvblwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWNoZWNrIGN1cnJlbnQtY29udHJhY3RcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IGNsYXNzPVwiZm9ybS1jaGVjay1pbnB1dFwiIFtjaGVja2VkXT1cImNvbnRyYWN0LnNlbGVjdGVkXCIgdHlwZT1cInJhZGlvXCIgbmFtZT1cImNhcmRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2lkXT1cImNvc3QubmFtZSArIGlcIiBbZGlzYWJsZWRdPVwibG9hZGluZ0ludGVybmFsIHx8IChsb2FkaW5nU3RlcCQgfCBhc3luYylcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU9XCJkYXJrXCIgKGNsaWNrKT1cInZlcmlmeVZhbGlkYXRlKGNvc3RzLGNvc3QubmFtZSwgY29udHJhY3QpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImZvcm0tY2hlY2stbGFiZWxcIiBbZm9yXT1cImNvc3QubmFtZSArIGlcIiBhcmlhLWxhYmVsPVwiRGFyayBncmV5XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAaWYodmFsaWROYW1lKGNvbnRyYWN0Lm5hbWUsIGNvc3QubmFtZSkpe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3NdPVwiKGNvc3QubmFtZSA9PSAnaG9tZV9kZWxpdmVyeScpID8gJ3NoaXBtZW50LWNvbnRyYWN0bmFtZSBob21lX2RlbGl2ZXJ5JyA6ICdzaGlwbWVudC1jb250cmFjdG5hbWUnIFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IChjb3N0Lm5hbWUgPT0gJ3BpY2t1cF9zdG9yZScgJiYgIXZhbGlkTmFtZShjb250cmFjdC5uYW1lKSkgPyAobWV0aG9kU2VsZWN0Py5uYW1lIHx8IGNvc3QubmFtZSkgOiAoY29udHJhY3QubmFtZSB8IHRyYW5zbGF0ZSkgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBpZihjb250cmFjdC5jb21wdXRlZCl7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj48YnIgY2xhc3M9XCJzaGlwbWVudC1jb250cmFjdG5hbWVcIj57eyBjb250cmFjdC5jb21wdXRlZCB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxiciBjbGFzcz1cInNoaXBtZW50LWNvbnRyYWN0bmFtZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQGlmKGNvbnRyYWN0LmRldGFpbCl7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29udHJhY3QtZGV0YWlsXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQGZvcihsaW5lIG9mIGNvbnRyYWN0LmRldGFpbC5zcGxpdCgnIC0gJyk7IHRyYWNrICRpbmRleDsgbGV0IGkgPSAkaW5kZXgpe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgW2NsYXNzXT1cIidjb250cmF0LWl0ZW0tJytpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBpZihpID09IDApezxzcGFuPjxiPnt7IGxpbmUgfX08L2I+PC9zcGFuPn1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQGlmKGkgPiAwKXs8c3BhbiBjbGFzcz1cImluc2lkZS1kZXRhaWxcIj57eyBsaW5lIH19PC9zcGFuPn1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBpZighY29udHJhY3QuY29tcHV0ZWQgJiYgIWNvbnRyYWN0LmRldGFpbCAmJiAhdmFsaWROYW1lKGNvbnRyYWN0Lm5hbWUpKXtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwic2hpcG1lbnQtY29udHJhY3RuYW1lXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgbWV0aG9kU2VsZWN0Py5uYW1lIHx8IGNvc3QubmFtZSB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQGlmKGNvbnRyYWN0LnByaWNlID4gMCl7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBbY2xhc3NdPVwiJ2luc2lkZS1kZXRhaWwgJyArICggY29zdG9zPy5hbW91bnQgPT0gMCA/ICcgZnJlZSAnIDogJycpIFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBpZighY29udHJhY3QuY29tcHV0ZWQpezxiciBjbGFzcz1cInNoaXBtZW50LWNvbnRyYWN0bmFtZVwiPn1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyAoJ3ByaWNlJ3x0cmFuc2xhdGUpICsgJzogJyArIChjb250cmFjdC5wcmljZSB8IGVjQ3VycmVuY3lTeW1ib2wpIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJyPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cInJvdyBkLWZsZXggZmxleC1yb3dcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMTIgZC1mbGV4IGp1c3RpZnktY29udGVudC1iZXR3ZWVuXCI+XG4gICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0biBidG4tcHJpbWFyeSB0ZXh0LXdoaXRlXCIgW2Rpc2FibGVkXT1cImxvYWRpbmdJbnRlcm5hbCB8fCAobG9hZGluZ1N0ZXAkIHwgYXN5bmMpXCJcbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImdvQmFjaygpXCI+e3snYmFjayd8dHJhbnNsYXRlfX08L2J1dHRvbj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZGlzYWJsZWQtY2xpY2stdGFyZ2V0XCIgKGNsaWNrKT1cIm9uTmV4dEJ1dHRvbkNvbnRhaW5lckNsaWNrKClcIj5cbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgKGNsaWNrKT1cIm5leHQoKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiaXNOZXh0RGlzYWJsZWQoKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImJ0biBidG4tcHJpbWFyeSB0ZXh0LXdoaXRlIGFsbG93LWRpc2FibGVkLWNsaWNrXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICBAaWYobG9hZGluZ0ludGVybmFsKXtcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwic3Bpbm5lci1ib3JkZXIgc3Bpbm5lci1ib3JkZXItc20gbWUtMlwiIHJvbGU9XCJzdGF0dXNcIiBhcmlhLWhpZGRlbj1cInRydWVcIj48L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICB7eyAnbG9hZGluZycgfCB0cmFuc2xhdGUgfX0uLi5cbiAgICAgICAgICAgICAgICAgICAgICAgIH0gQGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAge3soaXNMYXN0T25lID8gJ2ZpbmlzaC1jaGVja291dCcgOidyZWFkeS1mb3JtJykgfCB0cmFuc2xhdGV9fVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbjwvZGl2PlxufVxuIl19
430
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2hpcG1lbnQtZWMuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmctZWFzeWNvbW1lcmNlLXYxOC9zcmMvbGliL2VjLWNvbXBvbmVudHMvY2hlY2tvdXQtZWMvc2hpcG1lbnQtZWMvc2hpcG1lbnQtZWMuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmctZWFzeWNvbW1lcmNlLXYxOC9zcmMvbGliL2VjLWNvbXBvbmVudHMvY2hlY2tvdXQtZWMvc2hpcG1lbnQtZWMvc2hpcG1lbnQtZWMuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFVLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDdkYsT0FBTyxFQUFFLGVBQWUsRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3hFLE9BQU8sRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFFdEQsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDaEUsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUUzQyxPQUFPLEVBQUUsZUFBZSxFQUFFLGVBQWUsRUFBRSxZQUFZLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUN0RixPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUN4RCxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUNwRixPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSxtREFBbUQsQ0FBQzs7O0FBUzlGLE1BQU0sT0FBTyxtQkFBbUI7SUFDcEIsZ0JBQWdCLEdBQW9CLE1BQU0sQ0FBQyxlQUFlLENBQUMsQ0FBQztJ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cUIsRUFBRSxDQUFDO1FBQ3BELElBQUksY0FBYyxFQUFFLENBQUM7WUFDakIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUM7WUFDeEMsT0FBTztRQUNYLENBQUM7UUFFRCxJQUNJLElBQUksQ0FBQyxlQUFlO1lBQ3BCLElBQUksQ0FBQyxXQUFXO1lBQ2hCLElBQUksQ0FBQyxlQUFlO1lBQ3BCLENBQUMsSUFBSSxDQUFDLG9CQUFvQjtZQUMxQixDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxXQUFXLENBQUMsVUFBVSxDQUFDLEVBQ2hELENBQUM7WUFDQyxPQUFPO1FBQ1gsQ0FBQztRQUNELElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUNqQyxDQUFDO3dHQXBiUSxtQkFBbUI7NEZBQW5CLG1CQUFtQiw0TUNuQmhDLGt5UUE2SUEsNnFCRDVIc0Msd0JBQXdCLG1GQUFFLGVBQWUsdUZBQUUsU0FBUyx5Q0FBRSxvQkFBb0IseURBQVkseUJBQXlCOzs0RkFFeEksbUJBQW1CO2tCQVAvQixTQUFTOytCQUNJLGlCQUFpQixjQUNmLElBQUksV0FHUCxDQUFDLHNCQUFzQixFQUFFLHdCQUF3QixFQUFFLGVBQWUsRUFBRSxTQUFTLEVBQUUsb0JBQW9CLEVBQUUsUUFBUSxFQUFFLHlCQUF5QixDQUFDO3dEQVN6SSxtQkFBbUI7c0JBQTNCLEtBQUs7Z0JBQ0ksYUFBYTtzQkFBdEIsTUFBTTtnQkFDRyxXQUFXO3NCQUFwQixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBFdmVudEVtaXR0ZXIsIElucHV0LCBPbkluaXQsIE91dHB1dCwgaW5qZWN0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBUcmFuc2xhdGVNb2R1bGUsIFRyYW5zbGF0ZVNlcnZpY2UgfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcbmltcG9ydCB7IEFzeW5jUGlwZSwgSnNvblBpcGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgdGFrZVVudGlsRGVzdHJveWVkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZS9yeGpzLWludGVyb3AnO1xuaW1wb3J0IHsgRGVzdHJveVJlZiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5pbXBvcnQgeyBDaGVja291dFNlcnZpY2UsIFNoaXBtZW50U2VydmljZSwgVG9hc3RTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vZWMtc2VydmljZXMnO1xuaW1wb3J0IHsgRWNDdXJyZW5jeVN5bWJvbFBpcGUgfSBmcm9tICcuLi8uLi8uLi9lYy1waXBlJztcbmltcG9ydCB7IExvYWRpbmdGdWxsRWNDb21wb25lbnQsIExvYWRpbmdJbmxpbmVFY0NvbXBvbmVudCB9IGZyb20gJy4uLy4uL3dpZGdldHMtZWMnO1xuaW1wb3J0IHsgU2hpcG1lbnRFY1NpbmdsZUNvbXBvbmVudCB9IGZyb20gJy4vc2hpcG1lbnQtZWMtc2luZ2xlL3NoaXBtZW50LWVjLXNpbmdsZS5jb21wb25lbnQnO1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ2FwcC1zaGlwbWVudC1lYycsXG4gICAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgICB0ZW1wbGF0ZVVybDogJy4vc2hpcG1lbnQtZWMuY29tcG9uZW50Lmh0bWwnLFxuICAgIHN0eWxlVXJsczogWycuL3NoaXBtZW50LWVjLmNvbXBvbmVudC5zY3NzJ10sXG4gICAgaW1wb3J0czogW0xvYWRpbmdGdWxsRWNDb21wb25lbnQsIExvYWRpbmdJbmxpbmVFY0NvbXBvbmVudCwgVHJhbnNsYXRlTW9kdWxlLCBBc3luY1BpcGUsIEVjQ3VycmVuY3lTeW1ib2xQaXBlLCBKc29uUGlwZSwgU2hpcG1lbnRFY1NpbmdsZUNvbXBvbmVudF1cbn0pXG5leHBvcnQgY2xhc3MgU2hpcG1lbnRFY0NvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gICAgcHJpdmF0ZSBfc2hpcG1lbnRTZXJ2aWNlOiBTaGlwbWVudFNlcnZpY2UgPSBpbmplY3QoU2hpcG1lbnRTZXJ2aWNlKTtcbiAgICBwcml2YXRlIF9jaGVja291dFNlcnZpY2U6IENoZWNrb3V0U2VydmljZSA9IGluamVjdChDaGVja291dFNlcnZpY2UpO1xuICAgIHByaXZhdGUgX3RyYW5zbGF0ZVNlcnZpY2U6IFRyYW5zbGF0ZVNlcnZpY2UgPSBpbmplY3QoVHJhbnNsYXRlU2VydmljZSk7XG4gICAgcHJpdmF0ZSBfdG9hc3RTZXJ2aWNlOiBUb2FzdFNlcnZpY2UgPSBpbmplY3QoVG9hc3RTZXJ2aWNlKTtcbiAgICBwcml2YXRlIF9kZXN0cm95UmVmID0gaW5qZWN0KERlc3Ryb3lSZWYpO1xuXG4gICAgQElucHV0KCkgY29tcGFjdFNoaXBtZW50VmlldzogYm9vbGVhbiA9IGZhbHNlO1xuICAgIEBPdXRwdXQoKSBzdW1tYXJ5Q2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjx7IGxhYmVsPzogc3RyaW5nOyBkZXRhaWw/OiBzdHJpbmcgfT4oKTtcbiAgICBAT3V0cHV0KCkgYWR2YW5jZVN0ZXAgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG5cbiAgICBwdWJsaWMgbWV0aG9kcyQgPSB0aGlzLl9zaGlwbWVudFNlcnZpY2UubWV0aG9kcyQ7XG4gICAgcHVibGljIG1ldGhvZHNMb2FkaW5nJCA9IHRoaXMuX3NoaXBtZW50U2VydmljZS5tZXRob2RzTG9hZGluZyQ7XG4gICAgcHVibGljIGlzTGFzdFN0ZXAkID0gdGhpcy5fY2hlY2tvdXRTZXJ2aWNlLmlzTGFzdFN0ZXAkO1xuICAgIHB1YmxpYyBzdGF0ZSQgPSB0aGlzLl9zaGlwbWVudFNlcnZpY2Uuc3RhdGUkO1xuICAgIHB1YmxpYyBlcnJvciQgPSB0aGlzLl9zaGlwbWVudFNlcnZpY2UuZXJyb3IkO1xuICAgIHB1YmxpYyBsb2FkaW5nU3RlcCQgPSB0aGlzLl9jaGVja291dFNlcnZpY2UubG9hZGluZ1N0ZXAkO1xuXG4gICAgcHJpdmF0ZSBfaGlkZGVuTWV0aG9kczogc3RyaW5nW10gPSBbJ1VQUyddO1xuICAgIHB1YmxpYyBidXR0b25zRGlzYWJsZWQ6IGJvb2xlYW4gPSBmYWxzZTtcbiAgICBwdWJsaWMgbWV0aG9kU2VsZWN0OiBhbnk7XG4gICAgcHVibGljIHNlbGVjdGVkTWV0aG9kQ29kZTogc3RyaW5nIHwgbnVsbCA9IG51bGw7XG4gICAgcHVibGljIGxvYWRpbmdJbnRlcm5hbDogYm9vbGVhbiA9IGZhbHNlO1xuICAgIHB1YmxpYyBsb2FkaW5nUHJlbG9hZDogYm9vbGVhbiA9IGZhbHNlO1xuICAgIHByaXZhdGUgcmVzdG9yZWRPbkluaXQ6IGJvb2xlYW4gPSBmYWxzZTtcbiAgICBwdWJsaWMgbW9yZUluZm9Jbk1ldGhvZDogYm9vbGVhbiA9IGZhbHNlO1xuICAgIHB1YmxpYyBjb3N0b3M6IGFueSA9IG51bGw7XG4gICAgcHVibGljIGNvc3RzJDogT2JzZXJ2YWJsZTxhbnlbXT4gPSB0aGlzLl9zaGlwbWVudFNlcnZpY2UuY29zdHMkO1xuICAgIHB1YmxpYyBpc0xhc3RPbmU6IGJvb2xlYW4gPSBmYWxzZTtcbiAgICBwdWJsaWMgZW5hYmxlZENvbmZpcm1CdXR0b246IGJvb2xlYW4gPSBmYWxzZTtcbiAgICBwdWJsaWMgc2hpcG1lbnRFcnJvcktleTogc3RyaW5nIHwgbnVsbCA9IG51bGw7XG4gICAgcHVibGljIHNpbmdsZU9wdGlvbnM6IGFueVtdID0gW107XG4gICAgcHVibGljIHNlbGVjdGVkT3B0aW9uSWQ6IHN0cmluZyB8IG51bGwgPSBudWxsO1xuICAgIHB1YmxpYyB1bmF2YWlsYWJsZU1ldGhvZHM6IFJlY29yZDxzdHJpbmcsIGJvb2xlYW4+ID0ge307XG4gICAgcHVibGljIGdyb3VwZWRPcHRpb25zOiB7IGtleTogc3RyaW5nOyBsYWJlbDogc3RyaW5nOyBvcHRpb25zOiBhbnlbXSB9W10gPSBbXTtcblxuICAgIHByaXZhdGUgbGFzdEFkZHJlc3NLZXk6IHN0cmluZyB8IG51bGwgPSBudWxsO1xuICAgIHByaXZhdGUgbG9hZGluZ1N0ZXAgPSBmYWxzZTtcbiAgICBwcml2YXRlIHByZWxvYWRSZXF1ZXN0SWQgPSAwO1xuXG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHRoaXMuaXNMYXN0U3RlcCQucGlwZSh0YWtlVW50aWxEZXN0cm95ZWQodGhpcy5fZGVzdHJveVJlZikpLnN1YnNjcmliZShyZXMgPT4gdGhpcy5pc0xhc3RPbmUgPSByZXMpO1xuICAgICAgICB0aGlzLmxvYWRpbmdTdGVwJC5waXBlKHRha2VVbnRpbERlc3Ryb3llZCh0aGlzLl9kZXN0cm95UmVmKSkuc3Vic2NyaWJlKHJlcyA9PiB0aGlzLmxvYWRpbmdTdGVwID0gISFyZXMpO1xuICAgIH1cblxuICAgIG5nT25Jbml0KCkge1xuICAgICAgICBpZiAoIXRoaXMuY29tcGFjdFNoaXBtZW50Vmlldykge1xuICAgICAgICAgICAgdGhpcy5fc2hpcG1lbnRTZXJ2aWNlLmdldFNoaXBtZW50TWV0aG9kcygpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fY2hlY2tvdXRTZXJ2aWNlLmFzc29jaWF0ZWREYXRhJFxuICAgICAgICAgICAgLnBpcGUodGFrZVVudGlsRGVzdHJveWVkKHRoaXMuX2Rlc3Ryb3lSZWYpKVxuICAgICAgICAgICAgLnN1YnNjcmliZShkYXRhID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmNvc3RvcyA9IGRhdGEgJiYgZGF0YS5maW5kKCh2YWx1ZTogYW55KSA9PiB2YWx1ZS50eXBlID09ICdzaGlwbWVudCcpIHx8IG51bGw7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLmVycm9yJFxuICAgICAgICAgICAgLnBpcGUodGFrZVVudGlsRGVzdHJveWVkKHRoaXMuX2Rlc3Ryb3lSZWYpKVxuICAgICAgICAgICAgLnN1YnNjcmliZShlcnJvcktleSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5zaGlwbWVudEVycm9yS2V5ID0gZXJyb3JLZXk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICBpZiAoIXRoaXMuY29tcGFjdFNoaXBtZW50Vmlldykge1xuICAgICAgICAgICAgdGhpcy5zdGF0ZSRcbiAgICAgICAgICAgICAgICAucGlwZSh0YWtlVW50aWxEZXN0cm95ZWQodGhpcy5fZGVzdHJveVJlZikpXG4gICAgICAgICAgICAgICAgLnN1YnNjcmliZShyZXMgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAocmVzLmRhdGEgJiYgcmVzLmRhdGEubWV0aG9kKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkTWV0aG9kQ29kZSA9IHJlcy5kYXRhLm1ldGhvZDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc3luY0xlZ2FjeVNlbGVjdGlvblN0YXRlKCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgdGhpcy5tZXRob2RzJFxuICAgICAgICAgICAgICAgIC5waXBlKHRha2VVbnRpbERlc3Ryb3llZCh0aGlzLl9kZXN0cm95UmVmKSlcbiAgICAgICAgICAgICAgICAuc3Vic2NyaWJlKG1ldGhvZHMgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAoIW1ldGhvZHM/Lmxlbmd0aCB8fCAhdGhpcy5zZWxlY3RlZE1ldGhvZENvZGUpIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZm91bmRNZXRob2QgPSBtZXRob2RzLmZpbmQoKG1ldGhvZDogYW55KSA9PiBtZXRob2QuY29kZSA9PT0gdGhpcy5zZWxlY3RlZE1ldGhvZENvZGUpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoZm91bmRNZXRob2QpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubWV0aG9kU2VsZWN0ID0gZm91bmRNZXRob2Q7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zeW5jTGVnYWN5U2VsZWN0aW9uU3RhdGUoKTtcbiAgICAgICAgICAgICAgICAgICAgLy8gV2hlbiB0aGUgdXNlciBuYXZpZ2F0ZXMgYmFjayB0byBhZGRyZXNzIGFuZCByZXN1Ym1pdHMsIHRoZSBzZXJ2ZXIgY2xlYXJzXG4gICAgICAgICAgICAgICAgICAgIC8vIHRoZSBzaGlwbWVudCBzdGF0ZS4gVGhlIGNsaWVudCBzdGlsbCBzaG93cyB0aGUgcHJldmlvdXNseSBzZWxlY3RlZCBtZXRob2RcbiAgICAgICAgICAgICAgICAgICAgLy8gYnV0IHNldENvbnRyYWN0KCkgd291bGQgZmFpbCBzaWxlbnRseSBiZWNhdXNlIHRoZSBzZXJ2ZXIgbm8gbG9uZ2VyIGhhc1xuICAgICAgICAgICAgICAgICAgICAvLyB0aGUgbWV0aG9kIHNldC4gUmUtY2FsbCBzZXRNZXRob2QoKSB0byByZXN0b3JlIHNlcnZlci1zaWRlIHN0YXRlLlxuICAgICAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAhdGhpcy5yZXN0b3JlZE9uSW5pdCAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgIXRoaXMuX2NoZWNrb3V0U2VydmljZS5pc1N0ZXBSZWFkeSgnc2hpcG1lbnQnKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgZm91bmRNZXRob2RcbiAgICAgICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnJlc3RvcmVkT25Jbml0ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0TWV0aG9kKGZvdW5kTWV0aG9kKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuY29tcGFjdFNoaXBtZW50Vmlldykge1xuICAgICAgICAgICAgdGhpcy5fY2hlY2tvdXRTZXJ2aWNlLnN0YXRlJFxuICAgICAgICAgICAgICAgIC5waXBlKHRha2VVbnRpbERlc3Ryb3llZCh0aGlzLl9kZXN0cm95UmVmKSlcbiAgICAgICAgICAgICAgICAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgYWRkcmVzc0RhdGEgPSB0aGlzLl9jaGVja291dFNlcnZpY2UuZ2V0U3RlcERhdGEoJ2FkZHJlc3MnKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFhZGRyZXNzRGF0YSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5sYXN0QWRkcmVzc0tleSA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9zaGlwbWVudFNlcnZpY2UucmVzdGFydFN0ZXAoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRPcHRpb25JZCA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNpbmdsZU9wdGlvbnMgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZ3JvdXBlZE9wdGlvbnMgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudW5hdmFpbGFibGVNZXRob2RzID0ge307XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNoaXBtZW50RXJyb3JLZXkgPSBudWxsO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zdW1tYXJ5Q2hhbmdlLmVtaXQoe30pO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGtleSA9IEpTT04uc3RyaW5naWZ5KGFkZHJlc3NEYXRhKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMubGFzdEFkZHJlc3NLZXkgPT09IGtleSkgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmxhc3RBZGRyZXNzS2V5ID0ga2V5O1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9zaGlwbWVudFNlcnZpY2UucmVzdGFydFN0ZXAoKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZE9wdGlvbklkID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zdW1tYXJ5Q2hhbmdlLmVtaXQoe30pO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnByZWxvYWRTaW5nbGVPcHRpb25zKCk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZ3JvdXBlZE9wdGlvbnMgPSBbXTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMubW9yZUluZm9Jbk1ldGhvZCA9IHRydWU7XG4gICAgfVxuXG4gICAgZmlsdGVyTWV0aG9kcyhtZXRob2RzOiBhbnkpIHtcbiAgICAgICAgcmV0dXJuIG1ldGhvZHMuZmlsdGVyKChtZXRob2Q6IGFueSkgPT4gIXRoaXMuX2hpZGRlbk1ldGhvZHMuaW5jbHVkZXMobWV0aG9kLm5hbWUpKTtcbiAgICB9XG5cbiAgICBhc3luYyBzZWxlY3RNZXRob2QobWV0aG9kOiBhbnksIGV2ZW50OiBhbnkpIHtcbiAgICAgICAgdGhpcy5zZXRBY3RpdmVCdXR0b24oZXZlbnQpO1xuICAgICAgICBhd2FpdCB0aGlzLnNldE1ldGhvZChtZXRob2QpO1xuICAgIH1cblxuICAgIHNldEFjdGl2ZUJ1dHRvbihldmVudDogYW55KSB7XG4gICAgICAgIGNvbnN0IHBhcmVudCA9IGV2ZW50LnRhcmdldC5wYXJlbnRFbGVtZW50LmNoaWxkcmVuO1xuICAgICAgICBmb3IgKGNvbnN0IGJ1dHRvbiBvZiBwYXJlbnQpIHtcbiAgICAgICAgICAgIGlmIChidXR0b24uY2xhc3NMaXN0LmNvbnRhaW5zKCdhY3RpdmUnKSkge1xuICAgICAgICAgICAgICAgIGJ1dHRvbi5jbGFzc0xpc3QucmVtb3ZlKCdhY3RpdmUnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBldmVudC50YXJnZXQuY2xhc3NMaXN0LmFkZCgnYWN0aXZlJyk7XG4gICAgfVxuXG4gICAgc2V0QWN0aXZlKCRldmVudDogYW55KSB7XG4gICAgICAgIHRoaXMuc2V0QWN0aXZlQnV0dG9uKCRldmVudCk7XG4gICAgfVxuXG4gICAgaXNNZXRob2RBY3RpdmUobWV0aG9kQ29kZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLnNlbGVjdGVkTWV0aG9kQ29kZSA9PT0gbWV0aG9kQ29kZTtcbiAgICB9XG5cbiAgICBzZXRNZXRob2QobWV0aG9kOiBhbnkpIHtcbiAgICAgICAgdGhpcy5tZXRob2RTZWxlY3QgPSBtZXRob2Q7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRNZXRob2RDb2RlID0gbWV0aG9kLmNvZGU7XG4gICAgICAgIHRoaXMubG9hZGluZ0ludGVybmFsID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5idXR0b25zRGlzYWJsZWQgPSB0cnVlO1xuICAgICAgICB0aGlzLmVuYWJsZWRDb25maXJtQnV0dG9uID0gZmFsc2U7XG5cbiAgICAgICAgdGhpcy5fc2hpcG1lbnRTZXJ2aWNlLnNldE1ldGhvZChtZXRob2QuY29kZSkudGhlbigoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmxvYWRpbmdJbnRlcm5hbCA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5lbmFibGVkQ29uZmlybUJ1dHRvbiA9IHRoaXMuX2NoZWNrb3V0U2VydmljZS5pc1N0ZXBSZWFkeSgnc2hpcG1lbnQnKTtcbiAgICAgICAgICAgIHRoaXMuYnV0dG9uc0Rpc2FibGVkID0gZmFsc2U7XG4gICAgICAgIH0pLmNhdGNoKChlcnJvcikgPT4ge1xuICAgICAgICAgICAgdGhpcy5fY2hlY2tvdXRTZXJ2aWNlLm5vdGlmeUNoZWNrb3V0RXJyb3IoZXJyb3IpO1xuICAgICAgICAgICAgdGhpcy5sb2FkaW5nSW50ZXJuYWwgPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMuZW5hYmxlZENvbmZpcm1CdXR0b24gPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMuYnV0dG9uc0Rpc2FibGVkID0gZmFsc2U7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgc3luY0xlZ2FjeVNlbGVjdGlvblN0YXRlKCkge1xuICAgICAgICBpZiAodGhpcy5jb21wYWN0U2hpcG1lbnRWaWV3IHx8ICF0aGlzLl9jaGVja291dFNlcnZpY2UuaXNTdGVwUmVhZHkoJ3NoaXBtZW50JykpIHJldHVybjtcbiAgICAgICAgdGhpcy5lbmFibGVkQ29uZmlybUJ1dHRvbiA9IHRydWU7XG4gICAgICAgIHRoaXMuYnV0dG9uc0Rpc2FibGVkID0gZmFsc2U7XG4gICAgICAgIHRoaXMubG9hZGluZ0ludGVybmFsID0gZmFsc2U7XG4gICAgfVxuXG4gICAgdmFsaWROYW1lKG5hbWU6IGFueSwgY29zdE5hbWU/OiBzdHJpbmcpIHtcbiAgICAgICAgaWYgKGNvc3ROYW1lPy5pbmNsdWRlcygncGlja3VwX3N0b3JlJykpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBpc05hTihuYW1lKTtcbiAgICB9XG5cbiAgICBlbWl0UmVzdWx0ID0gYXN5bmMgKG1ldGhvZF9uYW1lOiBzdHJpbmcsIGNvbnRyYWN0X2RhdGE6IGFueSkgPT4ge1xuICAgICAgICBjb250cmFjdF9kYXRhID0ge1xuICAgICAgICAgICAgLi4uY29udHJhY3RfZGF0YSxcbiAgICAgICAgICAgIHNoaXBwaW5nX21ldGhvZF9jb250cmFjdDogbWV0aG9kX25hbWUgKyAnXycgKyBjb250cmFjdF9kYXRhLm5hbWUsXG4gICAgICAgICAgICBzaGlwcGluZ19tZXRob2RfYnJhbmNoX2NvZGU6IG1ldGhvZF9uYW1lID09ICdicmFuY2hfZGVsaXZlcnknXG4gICAgICAgICAgICAgICAgPyBjb250cmFjdF9kYXRhLnN1Y3Vyc2FsX2lkXG4gICAgICAgICAgICAgICAgOiAoY29udHJhY3RfZGF0YS5zaGlwcGluZ19tZXRob2RfYnJhbmNoX2NvZGUgfHwgY29udHJhY3RfZGF0YS5uYW1lKSxcbiAgICAgICAgfTtcbiAgICAgICAgdGhpcy5sb2FkaW5nSW50ZXJuYWwgPSB0cnVlO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgYXdhaXQgdGhpcy5fc2hpcG1lbnRTZXJ2aWNlLnNldENvbnRyYWN0KGNvbnRyYWN0X2RhdGEpO1xuICAgICAgICAgICAgdGhpcy5lbmFibGVkQ29uZmlybUJ1dHRvbiA9IHRydWU7XG4gICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICB0aGlzLl9jaGVja291dFNlcnZpY2Uubm90aWZ5Q2hlY2tvdXRFcnJvcihlcnJvcik7XG4gICAgICAgICAgICB0aGlzLmVuYWJsZWRDb25maXJtQnV0dG9uID0gZmFsc2U7XG4gICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgICB0aGlzLmxvYWRpbmdJbnRlcm5hbCA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgdmVyaWZ5VmFsaWRhdGUoY29zdHM6IGFueVtdLCBjb250cmFjdDogYW55LCBkYXRhOiBhbnkpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvc3RzLmZvckVhY2goKGNvc3Q6IGFueSkgPT4gKGNvc3Q/LmNvbnRyYWN0cyB8fCBbXSkuZm9yRWFjaCgoY286IGFueSkgPT4gY28uc2VsZWN0ZWQgPSBmYWxzZSkpO1xuICAgICAgICAgICAgY29uc3Qgc2VsZWN0ZWRDb3N0ID0gY29zdHMuZmluZCgoY29zdDogYW55KSA9PiBjb3N0Py5uYW1lID09IGNvbnRyYWN0KTtcbiAgICAgICAgICAgIGNvbnN0IHNlbGVjdGVkQ29udHJhY3QgPSAoc2VsZWN0ZWRDb3N0Py5jb250cmFjdHMgfHwgW10pLmZpbmQoKGNvbnRyYTogYW55KSA9PiBjb250cmE/Lm5hbWUgPT0gZGF0YT8ubmFtZSk7XG4gICAgICAgICAgICBpZiAoc2VsZWN0ZWRDb250cmFjdCkge1xuICAgICAgICAgICAgICAgIHNlbGVjdGVkQ29udHJhY3Quc2VsZWN0ZWQgPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgY29uc29sZS5sb2coJ2Vycm9yIGFsIGJ1c2NhciBjb250cmF0bycsIGVycm9yKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmVtaXRSZXN1bHQoY29udHJhY3QsIGRhdGEpO1xuICAgIH1cblxuICAgIGFzeW5jIHByZWxvYWRTaW5nbGVPcHRpb25zKCkge1xuICAgICAgICBjb25zdCByZXF1ZXN0SWQgPSArK3RoaXMucHJlbG9hZFJlcXVlc3RJZDtcbiAgICAgICAgdGhpcy5sb2FkaW5nUHJlbG9hZCA9IHRydWU7XG4gICAgICAgIHRoaXMuc2luZ2xlT3B0aW9ucyA9IFtdO1xuICAgICAgICB0aGlzLmdyb3VwZWRPcHRpb25zID0gW107XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRPcHRpb25JZCA9IG51bGw7XG4gICAgICAgIHRoaXMudW5hdmFpbGFibGVNZXRob2RzID0ge307XG4gICAgICAgIHRoaXMuc2hpcG1lbnRFcnJvcktleSA9IG51bGw7XG4gICAgICAgIGNvbnN0IG1ldGhvZE9wdGlvbnMgPSBhd2FpdCB0aGlzLl9zaGlwbWVudFNlcnZpY2UuZ2V0U2hpcHBpbmdPcHRpb25zKCk7XG4gICAgICAgIGlmIChyZXF1ZXN0SWQgIT09IHRoaXMucHJlbG9hZFJlcXVlc3RJZCkge1xuICAgICAgICAgICAgLy8gQSBuZXdlciBjYWxsIHN1cGVyc2VkZWQgdGhpcyBvbmUg4oCUIGRpc2NhcmQgc3RhbGUgcmVzdWx0cyB0byBwcmV2ZW50IGR1cGxpY2F0ZXNcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5fc2hpcG1lbnRTZXJ2aWNlLnNoaXBwaW5nQmxvY2tlZEJ5U3RvY2spIHtcbiAgICAgICAgICAgIHRoaXMubG9hZGluZ1ByZWxvYWQgPSBmYWxzZTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIW1ldGhvZE9wdGlvbnMubGVuZ3RoKSB7XG4gICAgICAgICAgICB0aGlzLnNoaXBtZW50RXJyb3JLZXkgPSAnbm8tc2hpcHBpbmctb3B0aW9ucy1oZWxwJztcbiAgICAgICAgICAgIHRoaXMubG9hZGluZ1ByZWxvYWQgPSBmYWxzZTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBsZXQgb3B0aW9uSW5kZXggPSAwO1xuICAgICAgICBmb3IgKGNvbnN0IGVudHJ5IG9mIG1ldGhvZE9wdGlvbnMpIHtcbiAgICAgICAgICAgIGNvbnN0IG1ldGhvZCA9IGVudHJ5Py5tZXRob2Q7XG4gICAgICAgICAgICBpZiAoIW1ldGhvZCB8fCBtZXRob2QubmFtZSA9PT0gJ1VQUycpIGNvbnRpbnVlO1xuICAgICAgICAgICAgY29uc3Qgb3B0aW9ucyA9IGVudHJ5Py5vcHRpb25zIHx8IFtdO1xuICAgICAgICAgICAgbGV0IGhhc0NvbnRyYWN0cyA9IGZhbHNlO1xuICAgICAgICAgICAgb3B0aW9ucy5mb3JFYWNoKChvcHRpb246IGFueSkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGNvbnRyYWN0cyA9IG9wdGlvbj8uY29udHJhY3RzIHx8IFtdO1xuICAgICAgICAgICAgICAgIGlmICghY29udHJhY3RzLmxlbmd0aCkgcmV0dXJuO1xuICAgICAgICAgICAgICAgIGhhc0NvbnRyYWN0cyA9IHRydWU7XG4gICAgICAgICAgICAgICAgY29udHJhY3RzLmZvckVhY2goKGNvbnRyYWN0OiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgbm9ybWFsaXplZENvbnRyYWN0ID0geyAuLi5jb250cmFjdCB9O1xuICAgICAgICAgICAgICAgICAgICBpZiAoIW5vcm1hbGl6ZWRDb250cmFjdC5jb250cmFjdCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgbm9ybWFsaXplZENvbnRyYWN0LmNvbnRyYWN0ID0gb3B0aW9uLm5hbWU7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgb3B0aW9uSW5kZXggKz0gMTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zaW5nbGVPcHRpb25zLnB1c2goe1xuICAgICAgICAgICAgICAgICAgICAgICAgaWQ6IGAke21ldGhvZC5jb2RlfS0ke29wdGlvbi5uYW1lfS0ke2NvbnRyYWN0Lm5hbWV9LSR7b3B0aW9uSW5kZXh9YCxcbiAgICAgICAgICAgICAgICAgICAgICAgIG1ldGhvZCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvc3ROYW1lOiBvcHRpb24ubmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRyYWN0OiBub3JtYWxpemVkQ29udHJhY3RcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGlmICghaGFzQ29udHJhY3RzKSB7XG4gICAgICAgICAgICAgICAgdGhpcy51bmF2YWlsYWJsZU1ldGhvZHNbbWV0aG9kLmNvZGVdID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB0aGlzLmdyb3VwZWRPcHRpb25zID0gdGhpcy5idWlsZEdyb3VwZWRPcHRpb25zKHRoaXMuc2luZ2xlT3B0aW9ucyk7XG4gICAgICAgIGlmICghdGhpcy5zaW5nbGVPcHRpb25zLmxlbmd0aCAmJiBPYmplY3Qua2V5cyh0aGlzLnVuYXZhaWxhYmxlTWV0aG9kcykubGVuZ3RoKSB7XG4gICAgICAgICAgICB0aGlzLnNoaXBtZW50RXJyb3JLZXkgPSAnbm8tc2hpcHBpbmctb3B0aW9ucy1oZWxwJztcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmxvYWRpbmdQcmVsb2FkID0gZmFsc2U7XG4gICAgfVxuXG4gICAgYXN5bmMgc2VsZWN0U2luZ2xlT3B0aW9uKG9wdGlvbjogYW55KSB7XG4gICAgICAgIGlmICghb3B0aW9uKSByZXR1cm47XG4gICAgICAgIGlmICh0aGlzLnNlbGVjdGVkT3B0aW9uSWQgPT09IG9wdGlvbi5pZCAmJiAhdGhpcy5sb2FkaW5nSW50ZXJuYWwpIHJldHVybjtcbiAgICAgICAgdGhpcy5zZWxlY3RlZE9wdGlvbklkID0gb3B0aW9uLmlkO1xuICAgICAgICB0aGlzLmxvYWRpbmdJbnRlcm5hbCA9IHRydWU7XG4gICAgICAgIHRoaXMuc2hpcG1lbnRFcnJvcktleSA9IG51bGw7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBsZXQgY29udHJhY3REYXRhID0geyAuLi4ob3B0aW9uLmNvbnRyYWN0IHx8IHt9KSB9O1xuICAgICAgICAgICAgY29uc3QgaW5pdGlhbENvbnRyYWN0TmFtZSA9IGNvbnRyYWN0RGF0YS5uYW1lIHx8IG9wdGlvbi5jb250cmFjdD8ubmFtZTtcbiAgICAgICAgICAgIGlmICh0aGlzLnNob3VsZEVucmljaEZyb21MZWdhY3kob3B0aW9uKSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGxlZ2FjeUNvbnRyYWN0RGF0YSA9IGF3YWl0IHRoaXMuZ2V0TGVnYWN5Q29udHJhY3REYXRhKFxuICAgICAgICAgICAgICAgICAgICBvcHRpb24ubWV0aG9kPy5jb2RlLFxuICAgICAgICAgICAgICAgICAgICBvcHRpb24uY29zdE5hbWUsXG4gICAgICAgICAgICAgICAgICAgIGluaXRpYWxDb250cmFjdE5hbWVcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIGlmIChsZWdhY3lDb250cmFjdERhdGEpIHtcbiAgICAgICAgICAgICAgICAgICAgY29udHJhY3REYXRhID0geyAuLi5jb250cmFjdERhdGEsIC4uLmxlZ2FjeUNvbnRyYWN0RGF0YSB9O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IGNvbnRyYWN0VHlwZSA9IGNvbnRyYWN0RGF0YS5jb250cmFjdCB8fCBvcHRpb24uY29zdE5hbWU7XG4gICAgICAgICAgICBjb25zdCBjb250cmFjdE5hbWUgPSBjb250cmFjdERhdGEubmFtZSB8fCBvcHRpb24uY29udHJhY3Q/Lm5hbWU7XG4gICAgICAgICAgICBjb25zdCBzaGlwcGluZ01ldGhvZENvbnRyYWN0ID0gYCR7b3B0aW9uLmNvc3ROYW1lfV8ke2NvbnRyYWN0TmFtZX1gO1xuICAgICAgICAgICAgY29uc3Qgc2hpcHBpbmdNZXRob2RCcmFuY2hDb2RlID0gb3B0aW9uLmNvc3ROYW1lID09PSAnYnJhbmNoX2RlbGl2ZXJ5J1xuICAgICAgICAgICAgICAgID8gKGNvbnRyYWN0RGF0YS5zdWN1cnNhbF9pZCB8fCBjb250cmFjdERhdGEubnVtYmVyIHx8IGNvbnRyYWN0RGF0YS5icmFuY2hfcHJvcGVydHk/Lm51bWJlciB8fCBjb250cmFjdE5hbWUpXG4gICAgICAgICAgICAgICAgOiBjb250cmFjdE5hbWU7XG4gICAgICAgICAgICBjb25zdCBzYW5pdGl6ZWRDb250cmFjdERhdGEgPSB7IC4uLmNvbnRyYWN0RGF0YSB9O1xuICAgICAgICAgICAgZGVsZXRlIHNhbml0aXplZENvbnRyYWN0RGF0YS5icmFuY2hfcHJvcGVydHk7XG4gICAgICAgICAgICBkZWxldGUgc2FuaXRpemVkQ29udHJhY3REYXRhLm9wdGlvbjtcbiAgICAgICAgICAgIGNvbnN0IHJlcXVlc3RQYXlsb2FkID0ge1xuICAgICAgICAgICAgICAgIC4uLnNhbml0aXplZENvbnRyYWN0RGF0YSxcbiAgICAgICAgICAgICAgICBzaGlwcGluZ0lkOiBvcHRpb24ubWV0aG9kLmNvZGUsXG4gICAgICAgICAgICAgICAgbWV0aG9kOiBvcHRpb24ubWV0aG9kLmNvZGUsXG4gICAgICAgICAgICAgICAgb3B0aW9uOiBvcHRpb24uY29zdE5hbWUsXG4gICAgICAgICAgICAgICAgY29udHJhY3Q6IGNvbnRyYWN0VHlwZSxcbiAgICAgICAgICAgICAgICBuYW1lOiBjb250cmFjdE5hbWUsXG4gICAgICAgICAgICAgICAgcHJpY2U6IGNvbnRyYWN0RGF0YS5wcmljZSxcbiAgICAgICAgICAgICAgICBzZWxlY3RlZDogdHJ1ZSxcbiAgICAgICAgICAgICAgICBzaGlwcGluZ19tZXRob2RfY29udHJhY3Q6IHNoaXBwaW5nTWV0aG9kQ29udHJhY3QsXG4gICAgICAgICAgICAgICAgc2hpcHBpbmdfbWV0aG9kX2JyYW5jaF9jb2RlOiBzaGlwcGluZ01ldGhvZEJyYW5jaENvZGVcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBjb25zdCBzdGVwRGF0YSA9IHtcbiAgICAgICAgICAgICAgICAuLi5yZXF1ZXN0UGF5bG9hZCxcbiAgICAgICAgICAgICAgICBtZXRob2RfbmFtZTogb3B0aW9uLm1ldGhvZD8ubmFtZSxcbiAgICAgICAgICAgICAgICBjb250cmFjdF9uYW1lOiBjb250cmFjdE5hbWVcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBhd2FpdCB0aGlzLl9zaGlwbWVudFNlcnZpY2Uuc2V0U2hpcHBpbmdPcHRpb24ocmVxdWVzdFBheWxvYWQsIHN0ZXBEYXRhKTtcbiAgICAgICAgICAgIGNvbnN0IG1ldGhvZExhYmVsID0gb3B0aW9uLm1ldGhvZD8ubmFtZSA/IHRoaXMuX3RyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudChvcHRpb24ubWV0aG9kLm5hbWUpIDogJyc7XG4gICAgICAgICAgICBjb25zdCBjb250cmFjdExhYmVsID0gY29udHJhY3ROYW1lID8gdGhpcy5fdHJhbnNsYXRlU2VydmljZS5pbnN0YW50KGNvbnRyYWN0TmFtZSkgOiAnJztcbiAgICAgICAgICAgIGNvbnN0IGdyb3VwTGFiZWwgPSBvcHRpb24uY29zdE5hbWUgPyB0aGlzLl90cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQodGhpcy5yZXNvbHZlR3JvdXBMYWJlbChvcHRpb24uY29zdE5hbWUpKSA6ICcnO1xuICAgICAgICAgICAgY29uc3QgbGFiZWwgPSBbZ3JvdXBMYWJlbCwgbWV0aG9kTGFiZWwsIGNvbnRyYWN0TGFiZWxdLmZpbHRlcihCb29sZWFuKS5qb2luKCcgwrcgJyk7XG4gICAgICAgICAgICBjb25zdCBkZXRhaWwgPSBjb250cmFjdERhdGE/LmNvbXB1dGVkIHx8IGNvbnRyYWN0RGF0YT8uZGV0YWlsIHx8IG9wdGlvbi5jb250cmFjdD8uY29tcHV0ZWQgfHwgb3B0aW9uLmNvbnRyYWN0Py5kZXRhaWwgfHwgJyc7XG4gICAgICAgICAgICB0aGlzLnN1bW1hcnlDaGFuZ2UuZW1pdCh7IGxhYmVsOiBsYWJlbCB8fCB1bmRlZmluZWQsIGRldGFpbDogZGV0YWlsIHx8IHVuZGVmaW5lZCB9KTtcbiAgICAgICAgICAgIGlmICh0aGlzLmNvbXBhY3RTaGlwbWVudFZpZXcpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmFkdmFuY2VTdGVwLmVtaXQoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgIHRoaXMuc2hpcG1lbnRFcnJvcktleSA9IHRoaXMuX2NoZWNrb3V0U2VydmljZS5nZXRDaGVja291dEVycm9yTWVzc2FnZShlcnJvcik7XG4gICAgICAgICAgICB0aGlzLl9jaGVja291dFNlcnZpY2Uubm90aWZ5Q2hlY2tvdXRFcnJvcihlcnJvcik7XG4gICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgICB0aGlzLmxvYWRpbmdJbnRlcm5hbCA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzaG91bGRFbnJpY2hGcm9tTGVnYWN5KG9wdGlvbjogYW55KTogYm9vbGVhbiB7XG4gICAgICAgIGlmICghb3B0aW9uIHx8IG9wdGlvbi5jb3N0TmFtZSAhPT0gJ2JyYW5jaF9kZWxpdmVyeScpIHJldHVybiBmYWxzZTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRMZWdhY3lDb250cmFjdERhdGEgPSBhc3luYyAoXG4gICAgICAgIG1ldGhvZENvZGU6IHN0cmluZyB8IHVuZGVmaW5lZCxcbiAgICAgICAgY29zdE5hbWU6IHN0cmluZyB8IHVuZGVmaW5lZCxcbiAgICAgICAgY29udHJhY3ROYW1lOiBzdHJpbmcgfCB1bmRlZmluZWRcbiAgICApID0+IHtcbiAgICAgICAgaWYgKCFtZXRob2RDb2RlIHx8ICFjb3N0TmFtZSB8fCAhY29udHJhY3ROYW1lKSByZXR1cm4gbnVsbDtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IGNvc3RzID0gYXdhaXQgdGhpcy5fc2hpcG1lbnRTZXJ2aWNlLmdldENvc3RzRm9yTWV0aG9kKG1ldGhvZENvZGUpO1xuICAgICAgICAgICAgY29uc3Qgc2VsZWN0ZWRDb3N0ID0gKGNvc3RzIHx8IFtdKS5maW5kKChjb3N0OiBhbnkpID0+IFN0cmluZyhjb3N0Py5uYW1lIHx8ICcnKSA9PT0gU3RyaW5nKGNvc3ROYW1lKSk7XG4gICAgICAgICAgICBpZiAoIXNlbGVjdGVkQ29zdD8uY29udHJhY3RzPy5sZW5ndGgpIHJldHVybiBudWxsO1xuICAgICAgICAgICAgY29uc3Qgc2VsZWN0ZWRDb250cmFjdCA9IHNlbGVjdGVkQ29zdC5jb250cmFjdHMuZmluZCgoY29udHJhY3Q6IGFueSkgPT5cbiAgICAgICAgICAgICAgICBTdHJpbmcoY29udHJhY3Q/Lm5hbWUgfHwgJycpID09PSBTdHJpbmcoY29udHJhY3ROYW1lKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIHJldHVybiBzZWxlY3RlZENvbnRyYWN0IHx8IG51bGw7XG4gICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgYnVpbGRHcm91cGVkT3B0aW9ucyhvcHRpb25zOiBhbnlbXSkge1xuICAgICAgICBpZiAoIW9wdGlvbnM/Lmxlbmd0aCkgcmV0dXJuIFtdO1xuICAgICAgICBjb25zdCBncm91cHMgPSBuZXcgTWFwPHN0cmluZywgYW55W10+KCk7XG4gICAgICAgIG9wdGlvbnMuZm9yRWFjaChvcHRpb24gPT4ge1xuICAgICAgICAgICAgY29uc3Qga2V5ID0gb3B0aW9uPy5jb3N0TmFtZSB8fCAnZGVmYXVsdCc7XG4gICAgICAgICAgICBpZiAoIWdyb3Vwcy5oYXMoa2V5KSkgZ3JvdXBzLnNldChrZXksIFtdKTtcbiAgICAgICAgICAgIGdyb3Vwcy5nZXQoa2V5KT8ucHVzaChvcHRpb24pO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIEFycmF5LmZyb20oZ3JvdXBzLmVudHJpZXMoKSkubWFwKChba2V5LCBncm91cE9wdGlvbnNdKSA9PiAoe1xuICAgICAgICAgICAga2V5LFxuICAgICAgICAgICAgbGFiZWw6IHRoaXMucmVzb2x2ZUdyb3VwTGFiZWwoa2V5LCBncm91cE9wdGlvbnM/LlswXT8ubWV0aG9kPy5uYW1lKSxcbiAgICAgICAgICAgIG9wdGlvbnM6IGdyb3VwT3B0aW9uc1xuICAgICAgICB9KSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSByZXNvbHZlR3JvdXBMYWJlbChjb3N0TmFtZTogc3RyaW5nIHwgdW5kZWZpbmVkIHwgbnVsbCwgbWV0aG9kTmFtZT86IHN0cmluZykge1xuICAgICAgICBpZiAoY29zdE5hbWUpIHtcbiAgICAgICAgICAgIGNvbnN0IG5vcm1hbGl6ZWQgPSBjb3N0TmFtZS50b0xvd2VyQ2FzZSgpO1xuICAgICAgICAgICAgaWYgKG5vcm1hbGl6ZWQgPT09ICdicmFuY2hfZGVsaXZlcnknKSByZXR1cm4gJ1JldGlybyBlbiBzdWN1cnNhbCc7XG4gICAgICAgICAgICBpZiAobm9ybWFsaXplZCA9PT0gJ2hvbWVfZGVsaXZlcnknKSByZXR1cm4gJ0VudsOtbyBhIGRvbWljaWxpbyc7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG1ldGhvZE5hbWUgfHwgKGNvc3ROYW1lIHx8ICcnKTtcbiAgICB9XG5cbiAgICBnb0JhY2soKSB7XG4gICAgICAgIHRoaXMuX2NoZWNrb3V0U2VydmljZS5iYWNrKCk7XG4gICAgfVxuXG4gICAgaXNOZXh0RGlzYWJsZWQoKSB7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICB0aGlzLmxvYWRpbmdJbnRlcm5hbCB8fFxuICAgICAgICAgICAgdGhpcy5sb2FkaW5nU3RlcCB8fFxuICAgICAgICAgICAgdGhpcy5idXR0b25zRGlzYWJsZWQgfHxcbiAgICAgICAgICAgICF0aGlzLmVuYWJsZWRDb25maXJtQnV0dG9uIHx8XG4gICAgICAgICAgICAhdGhpcy5fY2hlY2tvdXRTZXJ2aWNlLmlzU3RlcFJlYWR5KCdzaGlwbWVudCcpXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgb25OZXh0QnV0dG9uQ29udGFpbmVyQ2xpY2soKSB7XG4gICAgICAgIGlmICghdGhpcy5pc05leHREaXNhYmxlZCgpKSByZXR1cm47XG4gICAgICAgIHRoaXMubmV4dCgpO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0TmV4dEJsb2NrZWRNZXNzYWdlKCkge1xuICAgICAgICBpZiAodGhpcy5sb2FkaW5nSW50ZXJuYWwgfHwgdGhpcy5sb2FkaW5nU3RlcCB8fCB0aGlzLmJ1dHRvbnNEaXNhYmxlZCkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIXRoaXMuX2NoZWNrb3V0U2VydmljZS5pc1N0ZXBSZWFkeSgnc2hpcG1lbnQnKSkge1xuICAgICAgICAgICAgcmV0dXJuICdzaGlwbWVudC1zZWxlY3Rpb24tcmVxdWlyZWQnO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgbmV4dCgpIHtcbiAgICAgICAgY29uc3QgYmxvY2tlZE1lc3NhZ2UgPSB0aGlzLmdldE5leHRCbG9ja2VkTWVzc2FnZSgpO1xuICAgICAgICBpZiAoYmxvY2tlZE1lc3NhZ2UpIHtcbiAgICAgICAgICAgIHRoaXMuX3RvYXN0U2VydmljZS5zaG93KGJsb2NrZWRNZXNzYWdlKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChcbiAgICAgICAgICAgIHRoaXMubG9hZGluZ0ludGVybmFsIHx8XG4gICAgICAgICAgICB0aGlzLmxvYWRpbmdTdGVwIHx8XG4gICAgICAgICAgICB0aGlzLmJ1dHRvbnNEaXNhYmxlZCB8fFxuICAgICAgICAgICAgIXRoaXMuZW5hYmxlZENvbmZpcm1CdXR0b24gfHxcbiAgICAgICAgICAgICF0aGlzLl9jaGVja291dFNlcnZpY2UuaXNTdGVwUmVhZHkoJ3NoaXBtZW50JylcbiAgICAgICAgKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fY2hlY2tvdXRTZXJ2aWNlLm5leHQoKTtcbiAgICB9XG59XG4iLCJAaWYoY29tcGFjdFNoaXBtZW50Vmlldyl7XG48YXBwLXNoaXBtZW50LWVjLXNpbmdsZSBbbG9hZGluZ0ludGVybmFsXT1cImxvYWRpbmdJbnRlcm5hbFwiIFtsb2FkaW5nUHJlbG9hZF09XCJsb2FkaW5nUHJlbG9hZFwiXG4gICAgW3NpbmdsZU9wdGlvbnNdPVwic2luZ2xlT3B0aW9uc1wiIFtncm91cGVkT3B0aW9uc109XCJncm91cGVkT3B0aW9uc1wiIFtzZWxlY3RlZE9wdGlvbklkXT1cInNlbGVjdGVkT3B0aW9uSWRcIlxuICAgIFt1bmF2YWlsYWJsZU1ldGhvZHNdPVwidW5hdmFpbGFibGVNZXRob2RzXCIgW21ldGhvZHNdPVwibWV0aG9kcyQgfCBhc3luY1wiIFtzaGlwbWVudEVycm9yS2V5XT1cInNoaXBtZW50RXJyb3JLZXlcIlxuICAgIFtpc0ZyZWVTaGlwcGluZ109XCJjb3N0b3M/LmFtb3VudCA9PSAwXCIgKHNlbGVjdE9wdGlvbik9XCJzZWxlY3RTaW5nbGVPcHRpb24oJGV2ZW50KVwiPlxuPC9hcHAtc2hpcG1lbnQtZWMtc2luZ2xlPlxufSBAZWxzZSB7XG48ZGl2IGNsYXNzPVwiY29udGFpbmVyLWZsdWlkXCI+XG4gICAgPGRpdiBjbGFzcz1cImNvbC0xMlwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZCB0ZXh0LWNlbnRlclwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtaGVhZGVyIHRleHQtZGFya1wiPlxuICAgICAgICAgICAgICAgIDxoND57eyAnc2VsZWN0LW1ldGhvZCcgfCB0cmFuc2xhdGUgfX08L2g0PlxuICAgICAgICAgICAgICAgIEBpZihtZXRob2RzTG9hZGluZyQgfCBhc3luYyl7XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBmbGV4LWNvbHVtbiBhbGlnbi1pdGVtcy1jZW50ZXIganVzdGlmeS1jb250ZW50LWNlbnRlciBtdC0zIG1iLTJcIj5cbiAgICAgICAgICAgICAgICAgICAgPGFwcC1sb2FkaW5nLWlubGluZS1lYz48L2FwcC1sb2FkaW5nLWlubGluZS1lYz5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0ZXh0LXNlY29uZGFyeSBtdC0yXCI+e3sgJ2xvYWRpbmcnIHwgdHJhbnNsYXRlIH19Li4uPC9zcGFuPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIH0gQGVsc2Uge1xuICAgICAgICAgICAgICAgIEBpZihtZXRob2RzJCB8IGFzeW5jOyBhcyBtZXRob2RzKXtcbiAgICAgICAgICAgICAgICBAaWYoZmlsdGVyTWV0aG9kcyhtZXRob2RzKS5sZW5ndGgpe1xuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJidG4tdG9vbGJhciBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyXCIgcm9sZT1cInRvb2xiYXJcIiBhcmlhLWxhYmVsPVwiRW52aW9zIHRvb2xiYXJcIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIlwiIHJvbGU9XCJncm91cFwiIGFyaWEtbGFiZWw9XCJHcnVwbyBib3RvbmVzIGVudmlvXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGFsaWduLWNvbnRlbnQtc3RhcnQganVzdGlmeS1jb250ZW50LWNlbnRlciBmbGV4LXdyYXBcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBAZm9yKG1ldGhvZCBvZiBmaWx0ZXJNZXRob2RzKG1ldGhvZHMpOyB0cmFjayAkaW5kZXgpe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gW2Rpc2FibGVkXT1cImJ1dHRvbnNEaXNhYmxlZFwiIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3NdPVwiJ2J0biBidG4tb3V0bGluZS1zZWNvbmRhcnkgbXgtMSBtYi0xJyArIChpc01ldGhvZEFjdGl2ZShtZXRob2QuY29kZSkgPyAnIGFjdGl2ZScgOiAnJylcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwic2V0TWV0aG9kKG1ldGhvZClcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgbWV0aG9kLm5hbWUgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgfSBAZWxzZSB7XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBmbGV4LXJvdyB3LTEwMCBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIG10LTJcIj5cbiAgICAgICAgICAgICAgICAgICAgPGg1IGNsYXNzPVwidGV4dC1zZWNvbmRhcnlcIj57eyduby1zaGlwbWVudC1tZXRob2RzJ3x0cmFuc2xhdGV9fTwvaDU+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLWJvZHlcIj5cbiAgICAgICAgICAgICAgICBAaWYobW9yZUluZm9Jbk1ldGhvZCAmJiBtZXRob2RTZWxlY3QgJiYgbWV0aG9kU2VsZWN0LmRlc2NyaXB0aW9uKXtcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93IGp1c3RpZnktY29udGVudC1jZW50ZXIgbWItMlwiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTEyIGNvbC1tZC02IGNvbC1sZy00IGQtZmxleCBmbGV4LWNvbHVtbiBtYi0yXCIgW2lkXT1cIm1ldGhvZFNlbGVjdC5jb2RlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICBAZm9yKGxpbmUgb2YgbWV0aG9kU2VsZWN0LmRlc2NyaXB0aW9uLnNwbGl0KCdcXHJcXG4nKTsgdHJhY2sgJGluZGV4OyBsZXQgaT0kaW5kZXgpe1xuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gW2lkXT1cIm1ldGhvZFNlbGVjdC5jb2RlKyctJytpXCIgW2NsYXNzXT1cIidsaW5lLScraVwiPnt7bGluZX19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgQGlmKGNvc3RzJCB8IGFzeW5jOyBhcyBjb3N0cyl7XG4gICAgICAgICAgICAgICAgQGlmKGxvYWRpbmdJbnRlcm5hbCAmJiBtZXRob2RTZWxlY3QgJiYgIWNvc3RzLmxlbmd0aCl7XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBmbGV4LWNvbHVtbiBhbGlnbi1pdGVtcy1jZW50ZXIganVzdGlmeS1jb250ZW50LWNlbnRlciBweS00XCI+XG4gICAgICAgICAgICAgICAgICAgIDxhcHAtbG9hZGluZy1pbmxpbmUtZWM+PC9hcHAtbG9hZGluZy1pbmxpbmUtZWM+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidGV4dC1zZWNvbmRhcnkgbXQtMlwiPnt7ICdsb2FkaW5nJyB8IHRyYW5zbGF0ZSB9fS4uLjwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICB9IEBlbHNlIHtcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93IGp1c3RpZnktY29udGVudC1jZW50ZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgQGZvcihjb3N0IG9mIGNvc3RzOyB0cmFjayAkaW5kZXg7IGxldCB5ID0gJGluZGV4KXtcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1hdXRvIHRleHQtZGFya1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgQGlmKChjb3N0LmNvbnRyYWN0cyB8fCBbXSkubGVuZ3RoID4gMCl7XG4gICAgICAgICAgICAgICAgICAgICAgICBAaWYoY29zdHMubGVuZ3RoID4gMSl7XG4gICAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj48Yj57eyBjb3N0Lm5hbWUgfCB0cmFuc2xhdGUgfX08L2I+PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGhyIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICB9IEBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPjxiPnt7IG1ldGhvZFNlbGVjdC5uYW1lIHwgdHJhbnNsYXRlIH19PC9iPjwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxociAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgQGZvcihjb250cmFjdCBvZiAoY29zdC5jb250cmFjdHMgfHwgW10pOyB0cmFjayAkaW5kZXg7IGxldCBpID0gJGluZGV4KXtcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJvcHRpb25cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1jaGVjayBjdXJyZW50LWNvbnRyYWN0XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBjbGFzcz1cImZvcm0tY2hlY2staW5wdXRcIiBbY2hlY2tlZF09XCJjb250cmFjdC5zZWxlY3RlZFwiIHR5cGU9XCJyYWRpb1wiIG5hbWU9XCJjYXJkXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtpZF09XCJjb3N0Lm5hbWUgKyBpXCIgW2Rpc2FibGVkXT1cImxvYWRpbmdJbnRlcm5hbCB8fCAobG9hZGluZ1N0ZXAkIHwgYXN5bmMpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlPVwiZGFya1wiIChjbGljayk9XCJ2ZXJpZnlWYWxpZGF0ZShjb3N0cyxjb3N0Lm5hbWUsIGNvbnRyYWN0KVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJmb3JtLWNoZWNrLWxhYmVsXCIgW2Zvcl09XCJjb3N0Lm5hbWUgKyBpXCIgYXJpYS1sYWJlbD1cIkRhcmsgZ3JleVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQGlmKHZhbGlkTmFtZShjb250cmFjdC5uYW1lLCBjb3N0Lm5hbWUpKXtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzXT1cIihjb3N0Lm5hbWUgPT0gJ2hvbWVfZGVsaXZlcnknKSA/ICdzaGlwbWVudC1jb250cmFjdG5hbWUgaG9tZV9kZWxpdmVyeScgOiAnc2hpcG1lbnQtY29udHJhY3RuYW1lJyBcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyAoY29zdC5uYW1lID09ICdwaWNrdXBfc3RvcmUnICYmICF2YWxpZE5hbWUoY29udHJhY3QubmFtZSkpID8gKG1ldGhvZFNlbGVjdD8ubmFtZSB8fCBjb3N0Lm5hbWUpIDogKGNvbnRyYWN0Lm5hbWUgfCB0cmFuc2xhdGUpIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAaWYoY29udHJhY3QuY29tcHV0ZWQpe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+PGJyIGNsYXNzPVwic2hpcG1lbnQtY29udHJhY3RuYW1lXCI+e3sgY29udHJhY3QuY29tcHV0ZWQgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnIgY2xhc3M9XCJzaGlwbWVudC1jb250cmFjdG5hbWVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBpZihjb250cmFjdC5kZXRhaWwpe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbnRyYWN0LWRldGFpbFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBmb3IobGluZSBvZiBjb250cmFjdC5kZXRhaWwuc3BsaXQoJyAtICcpOyB0cmFjayAkaW5kZXg7IGxldCBpID0gJGluZGV4KXtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IFtjbGFzc109XCInY29udHJhdC1pdGVtLScraVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAaWYoaSA9PSAwKXs8c3Bhbj48Yj57eyBsaW5lIH19PC9iPjwvc3Bhbj59XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBpZihpID4gMCl7PHNwYW4gY2xhc3M9XCJpbnNpZGUtZGV0YWlsXCI+e3sgbGluZSB9fTwvc3Bhbj59XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAaWYoIWNvbnRyYWN0LmNvbXB1dGVkICYmICFjb250cmFjdC5kZXRhaWwgJiYgIXZhbGlkTmFtZShjb250cmFjdC5uYW1lKSl7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInNoaXBtZW50LWNvbnRyYWN0bmFtZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IG1ldGhvZFNlbGVjdD8ubmFtZSB8fCBjb3N0Lm5hbWUgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBpZihjb250cmFjdC5wcmljZSA+IDApe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gW2NsYXNzXT1cIidpbnNpZGUtZGV0YWlsICcgKyAoIGNvc3Rvcz8uYW1vdW50ID09IDAgPyAnIGZyZWUgJyA6ICcnKSBcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAaWYoIWNvbnRyYWN0LmNvbXB1dGVkKXs8YnIgY2xhc3M9XCJzaGlwbWVudC1jb250cmFjdG5hbWVcIj59XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgKCdwcmljZSd8dHJhbnNsYXRlKSArICc6ICcgKyAoY29udHJhY3QucHJpY2UgfCBlY0N1cnJlbmN5U3ltYm9sKSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxicj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJyb3cgZC1mbGV4IGZsZXgtcm93XCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTEyIGQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlblwiPlxuICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLXByaW1hcnkgdGV4dC13aGl0ZVwiIFtkaXNhYmxlZF09XCJsb2FkaW5nSW50ZXJuYWwgfHwgKGxvYWRpbmdTdGVwJCB8IGFzeW5jKVwiXG4gICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJnb0JhY2soKVwiPnt7J2JhY2snfHRyYW5zbGF0ZX19PC9idXR0b24+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImRpc2FibGVkLWNsaWNrLXRhcmdldFwiIChjbGljayk9XCJvbk5leHRCdXR0b25Db250YWluZXJDbGljaygpXCI+XG4gICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIChjbGljayk9XCJuZXh0KClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImlzTmV4dERpc2FibGVkKClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJidG4gYnRuLXByaW1hcnkgdGV4dC13aGl0ZSBhbGxvdy1kaXNhYmxlZC1jbGlja1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgQGlmKGxvYWRpbmdJbnRlcm5hbCl7XG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInNwaW5uZXItYm9yZGVyIHNwaW5uZXItYm9yZGVyLXNtIG1lLTJcIiByb2xlPVwic3RhdHVzXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAge3sgJ2xvYWRpbmcnIHwgdHJhbnNsYXRlIH19Li4uXG4gICAgICAgICAgICAgICAgICAgICAgICB9IEBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHt7KGlzTGFzdE9uZSA/ICdmaW5pc2gtY2hlY2tvdXQnIDoncmVhZHktZm9ybScpIHwgdHJhbnNsYXRlfX1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG48L2Rpdj5cbn1cbiJdfQ==
@@ -1,7 +1,8 @@
1
1
  import { inject, Injectable } from '@angular/core';
2
2
  import { ApiConstantsService } from '../constants';
3
- import { BehaviorSubject, map, shareReplay } from 'rxjs';
3
+ import { BehaviorSubject } from 'rxjs';
4
4
  import { ConnectionService } from '../api';
5
+ import { AuthService } from './auth.service';
5
6
  import * as i0 from "@angular/core";
6
7
  /**
7
8
  * Servicio que maneja los bloques como repositorio.
@@ -16,6 +17,10 @@ export class BlocksRepositoryService {
16
17
  * Menaja las conexiones con la API
17
18
  */
18
19
  connection = inject(ConnectionService);
20
+ /**
21
+ * Estado de autenticación del usuario actual.
22
+ */
23
+ authService = inject(AuthService);
19
24
  /**
20
25
  * Subject para manejar los bloques recibidos.
21
26
  */
@@ -24,6 +29,13 @@ export class BlocksRepositoryService {
24
29
  * Observable de bloques.
25
30
  */
26
31
  blocks$ = this.blocksSubject.asObservable();
32
+ /**
33
+ * Respuesta cruda del último request para re-filtrar si cambia la sesión.
34
+ */
35
+ currentBlocks = [];
36
+ constructor() {
37
+ this.authService.loggedIn$.subscribe(() => this.emitFilteredBlocks());
38
+ }
27
39
  //API URLS
28
40
  /**
29
41
  * Devuelve la url para obtener los bloques segun la sección.
@@ -37,21 +49,50 @@ export class BlocksRepositoryService {
37
49
  * @returns Un observable de los bloques.
38
50
  */
39
51
  getBlocks(section) {
40
- //if(this.blocksSubject.getValue() != null){
41
- this.connection.get(this.blocksAPI(section)).pipe(shareReplay(1), map((response) => {
42
- //console.log(response)
43
- this.blocksSubject.next(response.items);
44
- return response;
45
- })).subscribe();
46
- //}
52
+ this.connection.get(this.blocksAPI(section)).subscribe((response) => {
53
+ this.currentBlocks = Array.isArray(response?.items) ? response.items : [];
54
+ this.emitFilteredBlocks();
55
+ });
47
56
  return this.blocks$;
48
57
  }
49
- /* private hasSectionBlocks = (section: string) => {
50
-
51
- } */
52
- appendBlock = (blocks, section) => {
53
- const new_block = { section, blocks };
54
- };
58
+ emitFilteredBlocks() {
59
+ this.blocksSubject.next(this.filterBlocksByVisibility(this.currentBlocks, this.authService.isAuthenticated()));
60
+ }
61
+ filterBlocksByVisibility(blocks, isLoggedIn) {
62
+ return blocks
63
+ .filter((block) => this.canShowByVisibility(block?.visibility, isLoggedIn))
64
+ .map((block) => {
65
+ const banners = Array.isArray(block.banners) ? this.filterBannersByVisibility(block.banners, isLoggedIn) : block.banners;
66
+ return {
67
+ ...block,
68
+ banners,
69
+ };
70
+ })
71
+ .filter((block) => block.contentType !== 'banner' || (Array.isArray(block.banners) && block.banners.length > 0));
72
+ }
73
+ filterBannersByVisibility(banners, isLoggedIn) {
74
+ return banners.filter((banner) => this.canShowByVisibility(banner?.visibility, isLoggedIn));
75
+ }
76
+ canShowByVisibility(visibility, isLoggedIn) {
77
+ const normalizedVisibility = this.normalizeVisibility(visibility);
78
+ if (normalizedVisibility === 'logged_in') {
79
+ return isLoggedIn;
80
+ }
81
+ if (normalizedVisibility === 'logged_out') {
82
+ return !isLoggedIn;
83
+ }
84
+ return true;
85
+ }
86
+ normalizeVisibility(visibility) {
87
+ if (!visibility) {
88
+ return 'all';
89
+ }
90
+ const normalized = visibility.trim().toLowerCase().replace('-', '_');
91
+ if (normalized === 'logged_in' || normalized === 'logged_out' || normalized === 'all') {
92
+ return normalized;
93
+ }
94
+ return 'all';
95
+ }
55
96
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: BlocksRepositoryService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
56
97
  static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: BlocksRepositoryService, providedIn: 'root' });
57
98
  }
@@ -60,5 +101,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
60
101
  args: [{
61
102
  providedIn: 'root'
62
103
  }]
63
- }] });
64
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmxvY2tzLXJlcG9zaXRvcnkuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25nLWVhc3ljb21tZXJjZS12MTgvc3JjL2xpYi9lYy1zZXJ2aWNlcy9ibG9ja3MtcmVwb3NpdG9yeS5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ25ELE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUNuRCxPQUFPLEVBQUUsZUFBZSxFQUFFLEdBQUcsRUFBYyxXQUFXLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFFckUsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sUUFBUSxDQUFDOztBQUMzQzs7O0dBR0c7QUFJSCxNQUFNLE9BQU8sdUJBQXVCO0lBQ25DOztPQUVHO0lBQ0ssWUFBWSxHQUFHLE1BQU0sQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO0lBQ25EOztPQUVHO0lBQ0ssVUFBVSxHQUFHLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQyxDQUFBO0lBQzlDOztPQUVHO0lBQ0ssYUFBYSxHQUFHLElBQUksZUFBZSxDQUFXLEVBQUUsQ0FBQyxDQUFBO0lBQ3pEOztPQUVHO0lBQ0ssT0FBTyxHQUF5QixJQUFJLENBQUMsYUFBYSxDQUFDLFlBQVksRUFBRSxDQUFDO0lBRTFFLFVBQVU7SUFDVjs7OztPQUlHO0lBQ0gsU0FBUyxDQUFDLE9BQWUsSUFBSSxPQUFPLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxPQUFPLG1CQUFtQixPQUFPLFdBQVcsSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNLEVBQUUsQ0FBQSxDQUFDLENBQUM7SUFFN0o7Ozs7T0FJRztJQUNJLFNBQVMsQ0FBQyxPQUFlO1FBQy9CLDRDQUE0QztRQUM1QyxJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUNoRCxXQUFXLENBQUMsQ0FBQyxDQUFDLEVBQ2QsR0FBRyxDQUFDLENBQUMsUUFBYSxFQUFFLEVBQUU7WUFDckIsdUJBQXVCO1lBQ3ZCLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQTtZQUN2QyxPQUFPLFFBQVEsQ0FBQTtRQUNoQixDQUFDLENBQUMsQ0FDRixDQUFDLFNBQVMsRUFBRSxDQUFBO1FBQ2IsR0FBRztRQUNILE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQTtJQUNwQixDQUFDO0lBRUQ7O1FBRUk7SUFFSSxXQUFXLEdBQUcsQ0FBQyxNQUFnQixFQUFFLE9BQWUsRUFBRSxFQUFFO1FBQzNELE1BQU0sU0FBUyxHQUFlLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxDQUFDO0lBRW5ELENBQUMsQ0FBQTt3R0FwRFcsdUJBQXVCOzRHQUF2Qix1QkFBdUIsY0FGdkIsTUFBTTs7NEZBRU4sdUJBQXVCO2tCQUhuQyxVQUFVO21CQUFDO29CQUNYLFVBQVUsRUFBRSxNQUFNO2lCQUNsQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGluamVjdCwgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQXBpQ29uc3RhbnRzU2VydmljZSB9IGZyb20gJy4uL2NvbnN0YW50cyc7XG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIG1hcCwgT2JzZXJ2YWJsZSwgc2hhcmVSZXBsYXkgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IElCbG9jaywgSUJsb2NrSW5mbyB9IGZyb20gJy4uL2ludGVyZmFjZXMnO1xuaW1wb3J0IHsgQ29ubmVjdGlvblNlcnZpY2UgfSBmcm9tICcuLi9hcGknO1xuLyoqXG4gKiBTZXJ2aWNpbyBxdWUgbWFuZWphIGxvcyBibG9xdWVzIGNvbW8gcmVwb3NpdG9yaW8uXG4gKiBAY2xhc3MgQmxvY2tzUmVwb3NpdG9yeVNlcnZpY2VcbiAqL1xuQEluamVjdGFibGUoe1xuXHRwcm92aWRlZEluOiAncm9vdCdcbn0pXG5leHBvcnQgY2xhc3MgQmxvY2tzUmVwb3NpdG9yeVNlcnZpY2Uge1xuXHQvKipcblx0ICogQ29uc3RhbnRlcyBkZSBsYSBBUElcblx0ICovXG5cdHByaXZhdGUgYXBpQ29uc3RhbnRzID0gaW5qZWN0KEFwaUNvbnN0YW50c1NlcnZpY2UpO1xuXHQvKipcblx0ICogTWVuYWphIGxhcyBjb25leGlvbmVzIGNvbiBsYSBBUElcblx0ICovXG5cdHByaXZhdGUgY29ubmVjdGlvbiA9IGluamVjdChDb25uZWN0aW9uU2VydmljZSlcblx0LyoqXG5cdCAqIFN1YmplY3QgcGFyYSBtYW5lamFyIGxvcyBibG9xdWVzIHJlY2liaWRvcy5cblx0ICovXG5cdHByaXZhdGUgYmxvY2tzU3ViamVjdCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8SUJsb2NrW10+KFtdKVxuXHQvKipcblx0ICogT2JzZXJ2YWJsZSBkZSBibG9xdWVzLlxuXHQgKi9cblx0cHJpdmF0ZSBibG9ja3MkOiBPYnNlcnZhYmxlPElCbG9ja1tdPiA9IHRoaXMuYmxvY2tzU3ViamVjdC5hc09ic2VydmFibGUoKTtcblxuXHQvL0FQSSBVUkxTXG5cdC8qKlxuXHQgKiBEZXZ1ZWx2ZSBsYSB1cmwgcGFyYSBvYnRlbmVyIGxvcyBibG9xdWVzIHNlZ3VuIGxhIHNlY2Npw7NuLlxuXHQgKiBAcGFyYW0gc2VjdGlvbiBcblx0ICogQHJldHVybnMgXG5cdCAqL1xuXHRibG9ja3NBUEkoc2VjdGlvbjogc3RyaW5nKSB7IHJldHVybiBgJHt0aGlzLmFwaUNvbnN0YW50cy5DTVNfVVJMfSR7dGhpcy5hcGlDb25zdGFudHMuQ0hBTk5FTH0vYmxvY2tzL3NlY3Rpb24vJHtzZWN0aW9ufT9sb2NhbGU9JHt0aGlzLmFwaUNvbnN0YW50cy5MT0NBTEV9YCB9XG5cblx0LyoqXG5cdCAqIE9idGllbmUgbG9zIGJsb3F1ZXMgc2VndW4gbGEgc2VjY2lvbiBkZWwgQmFja2VuZC5cblx0ICogQHBhcmFtIHNlY3Rpb24gXG5cdCAqIEByZXR1cm5zIFVuIG9ic2VydmFibGUgZGUgbG9zIGJsb3F1ZXMuXG5cdCAqL1xuXHRwdWJsaWMgZ2V0QmxvY2tzKHNlY3Rpb246IHN0cmluZyk6IE9ic2VydmFibGU8SUJsb2NrW10+IHtcblx0XHQvL2lmKHRoaXMuYmxvY2tzU3ViamVjdC5nZXRWYWx1ZSgpICE9IG51bGwpe1xuXHRcdHRoaXMuY29ubmVjdGlvbi5nZXQodGhpcy5ibG9ja3NBUEkoc2VjdGlvbikpLnBpcGUoXG5cdFx0XHRzaGFyZVJlcGxheSgxKSxcblx0XHRcdG1hcCgocmVzcG9uc2U6IGFueSkgPT4ge1xuXHRcdFx0XHQvL2NvbnNvbGUubG9nKHJlc3BvbnNlKVxuXHRcdFx0XHR0aGlzLmJsb2Nrc1N1YmplY3QubmV4dChyZXNwb25zZS5pdGVtcylcblx0XHRcdFx0cmV0dXJuIHJlc3BvbnNlXG5cdFx0XHR9KVxuXHRcdCkuc3Vic2NyaWJlKClcblx0XHQvL31cblx0XHRyZXR1cm4gdGhpcy5ibG9ja3MkXG5cdH1cblxuXHQvKiBwcml2YXRlIGhhc1NlY3Rpb25CbG9ja3MgPSAoc2VjdGlvbjogc3RyaW5nKSA9PiB7XG5cdFx0XG5cdH0gKi9cblxuXHRwcml2YXRlIGFwcGVuZEJsb2NrID0gKGJsb2NrczogSUJsb2NrW10sIHNlY3Rpb246IHN0cmluZykgPT4ge1xuXHRcdGNvbnN0IG5ld19ibG9jazogSUJsb2NrSW5mbyA9IHsgc2VjdGlvbiwgYmxvY2tzIH07XG5cblx0fVxuXG59XG4iXX0=
104
+ }], ctorParameters: () => [] });
105
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmxvY2tzLXJlcG9zaXRvcnkuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25nLWVhc3ljb21tZXJjZS12MTgvc3JjL2xpYi9lYy1zZXJ2aWNlcy9ibG9ja3MtcmVwb3NpdG9yeS5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ25ELE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUNuRCxPQUFPLEVBQUUsZUFBZSxFQUFjLE1BQU0sTUFBTSxDQUFDO0FBRW5ELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLFFBQVEsQ0FBQztBQUMzQyxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7O0FBQzdDOzs7R0FHRztBQUlILE1BQU0sT0FBTyx1QkFBdUI7SUFDbkM7O09BRUc7SUFDSyxZQUFZLEdBQUcsTUFBTSxDQUFDLG1CQUFtQixDQUFDLENBQUM7SUFDbkQ7O09BRUc7SUFDSyxVQUFVLEdBQUcsTUFBTSxDQUFDLGlCQUFpQixDQUFDLENBQUE7SUFDOUM7O09BRUc7SUFDSyxXQUFXLEdBQUcsTUFBTSxDQUFDLFdBQVcsQ0FBQyxDQUFDO0lBQzFDOztPQUVHO0lBQ0ssYUFBYSxHQUFHLElBQUksZUFBZSxDQUFXLEVBQUUsQ0FBQyxDQUFBO0lBQ3pEOztPQUVHO0lBQ0ssT0FBTyxHQUF5QixJQUFJLENBQUMsYUFBYSxDQUFDLFlBQVksRUFBRSxDQUFDO0lBQzFFOztPQUVHO0lBQ0ssYUFBYSxHQUFhLEVBQUUsQ0FBQztJQUVyQztRQUNDLElBQUksQ0FBQyxXQUFXLENBQUMsU0FBUyxDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQyxDQUFDO0lBQ3ZFLENBQUM7SUFFRCxVQUFVO0lBQ1Y7Ozs7T0FJRztJQUNILFNBQVMsQ0FBQyxPQUFlLElBQUksT0FBTyxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsT0FBTyxtQkFBbUIsT0FBTyxXQUFXLElBQUksQ0FBQyxZQUFZLENBQUMsTUFBTSxFQUFFLENBQUEsQ0FBQyxDQUFDO0lBRTdKOzs7O09BSUc7SUFDSSxTQUFTLENBQUMsT0FBZTtRQUMvQixJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsUUFBYSxFQUFFLEVBQUU7WUFDeEUsSUFBSSxDQUFDLGFBQWEsR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDLFFBQVEsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1lBQzFFLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO1FBQzNCLENBQUMsQ0FBQyxDQUFDO1FBQ0gsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFBO0lBQ3BCLENBQUM7SUFFTyxrQkFBa0I7UUFDekIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLHdCQUF3QixDQUFDLElBQUksQ0FBQyxhQUFhLEVBQUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxlQUFlLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDaEgsQ0FBQztJQUVPLHdCQUF3QixDQUFDLE1BQWdCLEVBQUUsVUFBbUI7UUFDckUsT0FBTyxNQUFNO2FBQ1gsTUFBTSxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsS0FBSyxFQUFFLFVBQVUsRUFBRSxVQUFVLENBQUMsQ0FBQzthQUMxRSxHQUFHLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRTtZQUNkLE1BQU0sT0FBTyxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMseUJBQXlCLENBQUMsS0FBSyxDQUFDLE9BQU8sRUFBRSxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQztZQUV6SCxPQUFPO2dCQUNOLEdBQUcsS0FBSztnQkFDUixPQUFPO2FBQ1AsQ0FBQztRQUNILENBQUMsQ0FBQzthQUNELE1BQU0sQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxDQUFDLFdBQVcsS0FBSyxRQUFRLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ25ILENBQUM7SUFFTyx5QkFBeUIsQ0FBQyxPQUFpQixFQUFFLFVBQW1CO1FBQ3ZFLE9BQU8sT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLE1BQU0sRUFBRSxVQUFVLEVBQUUsVUFBVSxDQUFDLENBQUMsQ0FBQztJQUM3RixDQUFDO0lBRU8sbUJBQW1CLENBQUMsVUFBa0QsRUFBRSxVQUFtQjtRQUNsRyxNQUFNLG9CQUFvQixHQUFHLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUVsRSxJQUFJLG9CQUFvQixLQUFLLFdBQVcsRUFBRSxDQUFDO1lBQzFDLE9BQU8sVUFBVSxDQUFDO1FBQ25CLENBQUM7UUFFRCxJQUFJLG9CQUFvQixLQUFLLFlBQVksRUFBRSxDQUFDO1lBQzNDLE9BQU8sQ0FBQyxVQUFVLENBQUM7UUFDcEIsQ0FBQztRQUVELE9BQU8sSUFBSSxDQUFDO0lBQ2IsQ0FBQztJQUVPLG1CQUFtQixDQUFDLFVBQWtEO1FBQzdFLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztZQUNqQixPQUFPLEtBQUssQ0FBQztRQUNkLENBQUM7UUFFRCxNQUFNLFVBQVUsR0FBRyxVQUFVLENBQUMsSUFBSSxFQUFFLENBQUMsV0FBVyxFQUFFLENBQUMsT0FBTyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztRQUVyRSxJQUFJLFVBQVUsS0FBSyxXQUFXLElBQUksVUFBVSxLQUFLLFlBQVksSUFBSSxVQUFVLEtBQUssS0FBSyxFQUFFLENBQUM7WUFDdkYsT0FBTyxVQUF3QixDQUFDO1FBQ2pDLENBQUM7UUFFRCxPQUFPLEtBQUssQ0FBQztJQUNkLENBQUM7d0dBbkdXLHVCQUF1Qjs0R0FBdkIsdUJBQXVCLGNBRnZCLE1BQU07OzRGQUVOLHVCQUF1QjtrQkFIbkMsVUFBVTttQkFBQztvQkFDWCxVQUFVLEVBQUUsTUFBTTtpQkFDbEIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBpbmplY3QsIEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEFwaUNvbnN0YW50c1NlcnZpY2UgfSBmcm9tICcuLi9jb25zdGFudHMnO1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBCYW5uZXIsIElCbG9jaywgVmlzaWJpbGl0eSB9IGZyb20gJy4uL2ludGVyZmFjZXMnO1xuaW1wb3J0IHsgQ29ubmVjdGlvblNlcnZpY2UgfSBmcm9tICcuLi9hcGknO1xuaW1wb3J0IHsgQXV0aFNlcnZpY2UgfSBmcm9tICcuL2F1dGguc2VydmljZSc7XG4vKipcbiAqIFNlcnZpY2lvIHF1ZSBtYW5lamEgbG9zIGJsb3F1ZXMgY29tbyByZXBvc2l0b3Jpby5cbiAqIEBjbGFzcyBCbG9ja3NSZXBvc2l0b3J5U2VydmljZVxuICovXG5ASW5qZWN0YWJsZSh7XG5cdHByb3ZpZGVkSW46ICdyb290J1xufSlcbmV4cG9ydCBjbGFzcyBCbG9ja3NSZXBvc2l0b3J5U2VydmljZSB7XG5cdC8qKlxuXHQgKiBDb25zdGFudGVzIGRlIGxhIEFQSVxuXHQgKi9cblx0cHJpdmF0ZSBhcGlDb25zdGFudHMgPSBpbmplY3QoQXBpQ29uc3RhbnRzU2VydmljZSk7XG5cdC8qKlxuXHQgKiBNZW5hamEgbGFzIGNvbmV4aW9uZXMgY29uIGxhIEFQSVxuXHQgKi9cblx0cHJpdmF0ZSBjb25uZWN0aW9uID0gaW5qZWN0KENvbm5lY3Rpb25TZXJ2aWNlKVxuXHQvKipcblx0ICogRXN0YWRvIGRlIGF1dGVudGljYWNpw7NuIGRlbCB1c3VhcmlvIGFjdHVhbC5cblx0ICovXG5cdHByaXZhdGUgYXV0aFNlcnZpY2UgPSBpbmplY3QoQXV0aFNlcnZpY2UpO1xuXHQvKipcblx0ICogU3ViamVjdCBwYXJhIG1hbmVqYXIgbG9zIGJsb3F1ZXMgcmVjaWJpZG9zLlxuXHQgKi9cblx0cHJpdmF0ZSBibG9ja3NTdWJqZWN0ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxJQmxvY2tbXT4oW10pXG5cdC8qKlxuXHQgKiBPYnNlcnZhYmxlIGRlIGJsb3F1ZXMuXG5cdCAqL1xuXHRwcml2YXRlIGJsb2NrcyQ6IE9ic2VydmFibGU8SUJsb2NrW10+ID0gdGhpcy5ibG9ja3NTdWJqZWN0LmFzT2JzZXJ2YWJsZSgpO1xuXHQvKipcblx0ICogUmVzcHVlc3RhIGNydWRhIGRlbCDDumx0aW1vIHJlcXVlc3QgcGFyYSByZS1maWx0cmFyIHNpIGNhbWJpYSBsYSBzZXNpw7NuLlxuXHQgKi9cblx0cHJpdmF0ZSBjdXJyZW50QmxvY2tzOiBJQmxvY2tbXSA9IFtdO1xuXG5cdGNvbnN0cnVjdG9yKCkge1xuXHRcdHRoaXMuYXV0aFNlcnZpY2UubG9nZ2VkSW4kLnN1YnNjcmliZSgoKSA9PiB0aGlzLmVtaXRGaWx0ZXJlZEJsb2NrcygpKTtcblx0fVxuXG5cdC8vQVBJIFVSTFNcblx0LyoqXG5cdCAqIERldnVlbHZlIGxhIHVybCBwYXJhIG9idGVuZXIgbG9zIGJsb3F1ZXMgc2VndW4gbGEgc2VjY2nDs24uXG5cdCAqIEBwYXJhbSBzZWN0aW9uIFxuXHQgKiBAcmV0dXJucyBcblx0ICovXG5cdGJsb2Nrc0FQSShzZWN0aW9uOiBzdHJpbmcpIHsgcmV0dXJuIGAke3RoaXMuYXBpQ29uc3RhbnRzLkNNU19VUkx9JHt0aGlzLmFwaUNvbnN0YW50cy5DSEFOTkVMfS9ibG9ja3Mvc2VjdGlvbi8ke3NlY3Rpb259P2xvY2FsZT0ke3RoaXMuYXBpQ29uc3RhbnRzLkxPQ0FMRX1gIH1cblxuXHQvKipcblx0ICogT2J0aWVuZSBsb3MgYmxvcXVlcyBzZWd1biBsYSBzZWNjaW9uIGRlbCBCYWNrZW5kLlxuXHQgKiBAcGFyYW0gc2VjdGlvbiBcblx0ICogQHJldHVybnMgVW4gb2JzZXJ2YWJsZSBkZSBsb3MgYmxvcXVlcy5cblx0ICovXG5cdHB1YmxpYyBnZXRCbG9ja3Moc2VjdGlvbjogc3RyaW5nKTogT2JzZXJ2YWJsZTxJQmxvY2tbXT4ge1xuXHRcdHRoaXMuY29ubmVjdGlvbi5nZXQodGhpcy5ibG9ja3NBUEkoc2VjdGlvbikpLnN1YnNjcmliZSgocmVzcG9uc2U6IGFueSkgPT4ge1xuXHRcdFx0dGhpcy5jdXJyZW50QmxvY2tzID0gQXJyYXkuaXNBcnJheShyZXNwb25zZT8uaXRlbXMpID8gcmVzcG9uc2UuaXRlbXMgOiBbXTtcblx0XHRcdHRoaXMuZW1pdEZpbHRlcmVkQmxvY2tzKCk7XG5cdFx0fSk7XG5cdFx0cmV0dXJuIHRoaXMuYmxvY2tzJFxuXHR9XG5cblx0cHJpdmF0ZSBlbWl0RmlsdGVyZWRCbG9ja3MoKTogdm9pZCB7XG5cdFx0dGhpcy5ibG9ja3NTdWJqZWN0Lm5leHQodGhpcy5maWx0ZXJCbG9ja3NCeVZpc2liaWxpdHkodGhpcy5jdXJyZW50QmxvY2tzLCB0aGlzLmF1dGhTZXJ2aWNlLmlzQXV0aGVudGljYXRlZCgpKSk7XG5cdH1cblxuXHRwcml2YXRlIGZpbHRlckJsb2Nrc0J5VmlzaWJpbGl0eShibG9ja3M6IElCbG9ja1tdLCBpc0xvZ2dlZEluOiBib29sZWFuKTogSUJsb2NrW10ge1xuXHRcdHJldHVybiBibG9ja3Ncblx0XHRcdC5maWx0ZXIoKGJsb2NrKSA9PiB0aGlzLmNhblNob3dCeVZpc2liaWxpdHkoYmxvY2s/LnZpc2liaWxpdHksIGlzTG9nZ2VkSW4pKVxuXHRcdFx0Lm1hcCgoYmxvY2spID0+IHtcblx0XHRcdFx0Y29uc3QgYmFubmVycyA9IEFycmF5LmlzQXJyYXkoYmxvY2suYmFubmVycykgPyB0aGlzLmZpbHRlckJhbm5lcnNCeVZpc2liaWxpdHkoYmxvY2suYmFubmVycywgaXNMb2dnZWRJbikgOiBibG9jay5iYW5uZXJzO1xuXG5cdFx0XHRcdHJldHVybiB7XG5cdFx0XHRcdFx0Li4uYmxvY2ssXG5cdFx0XHRcdFx0YmFubmVycyxcblx0XHRcdFx0fTtcblx0XHRcdH0pXG5cdFx0XHQuZmlsdGVyKChibG9jaykgPT4gYmxvY2suY29udGVudFR5cGUgIT09ICdiYW5uZXInIHx8IChBcnJheS5pc0FycmF5KGJsb2NrLmJhbm5lcnMpICYmIGJsb2NrLmJhbm5lcnMubGVuZ3RoID4gMCkpO1xuXHR9XG5cblx0cHJpdmF0ZSBmaWx0ZXJCYW5uZXJzQnlWaXNpYmlsaXR5KGJhbm5lcnM6IEJhbm5lcltdLCBpc0xvZ2dlZEluOiBib29sZWFuKTogQmFubmVyW10ge1xuXHRcdHJldHVybiBiYW5uZXJzLmZpbHRlcigoYmFubmVyKSA9PiB0aGlzLmNhblNob3dCeVZpc2liaWxpdHkoYmFubmVyPy52aXNpYmlsaXR5LCBpc0xvZ2dlZEluKSk7XG5cdH1cblxuXHRwcml2YXRlIGNhblNob3dCeVZpc2liaWxpdHkodmlzaWJpbGl0eTogVmlzaWJpbGl0eSB8IHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWQsIGlzTG9nZ2VkSW46IGJvb2xlYW4pOiBib29sZWFuIHtcblx0XHRjb25zdCBub3JtYWxpemVkVmlzaWJpbGl0eSA9IHRoaXMubm9ybWFsaXplVmlzaWJpbGl0eSh2aXNpYmlsaXR5KTtcblxuXHRcdGlmIChub3JtYWxpemVkVmlzaWJpbGl0eSA9PT0gJ2xvZ2dlZF9pbicpIHtcblx0XHRcdHJldHVybiBpc0xvZ2dlZEluO1xuXHRcdH1cblxuXHRcdGlmIChub3JtYWxpemVkVmlzaWJpbGl0eSA9PT0gJ2xvZ2dlZF9vdXQnKSB7XG5cdFx0XHRyZXR1cm4gIWlzTG9nZ2VkSW47XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRydWU7XG5cdH1cblxuXHRwcml2YXRlIG5vcm1hbGl6ZVZpc2liaWxpdHkodmlzaWJpbGl0eTogVmlzaWJpbGl0eSB8IHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWQpOiBWaXNpYmlsaXR5IHtcblx0XHRpZiAoIXZpc2liaWxpdHkpIHtcblx0XHRcdHJldHVybiAnYWxsJztcblx0XHR9XG5cblx0XHRjb25zdCBub3JtYWxpemVkID0gdmlzaWJpbGl0eS50cmltKCkudG9Mb3dlckNhc2UoKS5yZXBsYWNlKCctJywgJ18nKTtcblxuXHRcdGlmIChub3JtYWxpemVkID09PSAnbG9nZ2VkX2luJyB8fCBub3JtYWxpemVkID09PSAnbG9nZ2VkX291dCcgfHwgbm9ybWFsaXplZCA9PT0gJ2FsbCcpIHtcblx0XHRcdHJldHVybiBub3JtYWxpemVkIGFzIFZpc2liaWxpdHk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuICdhbGwnO1xuXHR9XG5cbn1cbiJdfQ==
@@ -118,9 +118,18 @@ export class CheckoutService {
118
118
  }
119
119
  return payload?.message || fallback;
120
120
  }
121
+ isOutOfStockError(error) {
122
+ const payload = error?.error || error || {};
123
+ const code = payload?.code || error?.code;
124
+ const status = error?.status || payload?.status;
125
+ return code === 'out_of_stock' || status === 450;
126
+ }
121
127
  notifyCheckoutError(error, fallback = 'operation-error') {
122
128
  const message = this.getCheckoutErrorMessage(error, fallback);
123
129
  this._toastService.show(message);
130
+ if (this.isOutOfStockError(error)) {
131
+ this._router.navigate(['/cart']);
132
+ }
124
133
  return message;
125
134
  }
126
135
  complete = async () => {
@@ -259,4 +268,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
259
268
  providedIn: 'root'
260
269
  }]
261
270
  }], ctorParameters: () => [] });
262
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hlY2tvdXQuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25nLWVhc3ljb21tZXJjZS12MTgvc3JjL2xpYi9lYy1zZXJ2aWNlcy9jaGVja291dC5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ25ELE9BQU8sRUFBRSxlQUFlLEVBQUUsYUFBYSxFQUFFLGNBQWMsRUFBYyxhQUFhLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDakcsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRTdDLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLFFBQVEsQ0FBQztBQUMzQyxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDL0MsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQ25ELE9BQU8sRUFBRSxJQUFJLEVBQVEsTUFBTSxZQUFZLENBQUM7QUFDeEMsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzdDLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQzlELE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUN6QyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7O0FBSy9DLE1BQU0sT0FBTyxlQUFlO0lBRW5CLFlBQVksR0FBZ0IsTUFBTSxDQUFDLFdBQVcsQ0FBQyxDQUFDO0lBQ2hELFdBQVcsR0FBc0IsTUFBTSxDQUFDLGlCQUFpQixDQUFDLENBQUM7SUFDM0QsaUJBQWlCLEdBQXFCLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO0lBQy9ELE9BQU8sR0FBd0IsTUFBTSxDQUFDLG1CQUFtQixDQUFDLENBQUM7SUFDM0QsWUFBWSxHQUFn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QyxDQUFDO1FBQ3ZDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDbkMsQ0FBQyxDQUFBO3dHQTVRVyxlQUFlOzRHQUFmLGVBQWUsY0FGZixNQUFNOzs0RkFFTixlQUFlO2tCQUgzQixVQUFVO21CQUFDO29CQUNYLFVBQVUsRUFBRSxNQUFNO2lCQUNsQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGluamVjdCwgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBjb21iaW5lTGF0ZXN0LCBmaXJzdFZhbHVlRnJvbSwgT2JzZXJ2YWJsZSwgUmVwbGF5U3ViamVjdCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgQ2FydFNlcnZpY2UgfSBmcm9tICcuL2NhcnQuc2VydmljZSc7XG5pbXBvcnQgeyBDaGVja291dERhdGEsIElTdGVwLCBTdGVwVHlwZSB9IGZyb20gJy4uL2ludGVyZmFjZXMnO1xuaW1wb3J0IHsgQ29ubmVjdGlvblNlcnZpY2UgfSBmcm9tICcuLi9hcGknO1xuaW1wb3J0IHsgQW5hbHl0aWNzU2VydmljZSB9IGZyb20gJy4vYW5hbHl0aWNzJztcbmltcG9ydCB7IEFwaUNvbnN0YW50c1NlcnZpY2UgfSBmcm9tICcuLi9jb25zdGFudHMnO1xuaW1wb3J0IHsgU3RlcCwgVXNlciB9IGZyb20gJy4uL2NsYXNzZXMnO1xuaW1wb3J0IHsgQXV0aFNlcnZpY2UgfSBmcm9tICcuL2F1dGguc2VydmljZSc7XG5pbXBvcnQgeyBPcmRlclV0aWxpdHlTZXJ2aWNlIH0gZnJvbSAnLi9vcmRlci11dGlsaXR5LnNlcnZpY2UnO1xuaW1wb3J0IHsgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7IFRvYXN0U2VydmljZSB9IGZyb20gJy4vdG9hc3Quc2VydmljZSc7XG5cbkBJbmplY3RhYmxlKHtcblx0cHJvdmlkZWRJbjogJ3Jvb3QnXG59KVxuZXhwb3J0IGNsYXNzIENoZWNrb3V0U2VydmljZSB7XG5cblx0cHJpdmF0ZSBfY2FydFNlcnZpY2U6IENhcnRTZXJ2aWNlID0gaW5qZWN0KENhcnRTZXJ2aWNlKTtcblx0cHJpdmF0ZSBfY29ubmVjdGlvbjogQ29ubmVjdGlvblNlcnZpY2UgPSBpbmplY3QoQ29ubmVjdGlvblNlcnZpY2UpO1xuXHRwcml2YXRlIF9hbmFseXRpY3NTZXJ2aWNlOiBBbmFseXRpY3NTZXJ2aWNlID0gaW5qZWN0KEFuYWx5dGljc1NlcnZpY2UpO1xuXHRwcml2YXRlIF9jb25zdHM6IEFwaUNvbnN0YW50c1NlcnZpY2UgPSBpbmplY3QoQXBpQ29uc3RhbnRzU2VydmljZSk7XG5cdHByaXZhdGUgX2F1dGhTZXJ2aWNlOiBBdXRoU2VydmljZSA9IGluamVjdChBdXRoU2VydmljZSk7XG5cdHByaXZhdGUgX29yZGVyVXRpbGl0eVNlcnZpY2U6IE9yZGVyVXRpbGl0eVNlcnZpY2UgPSBpbmplY3QoT3JkZXJVdGlsaXR5U2VydmljZSk7XG5cdHByaXZhdGUgX3JvdXRlcjogUm91dGVyID0gaW5qZWN0KFJvdXRlcik7XG5cdHByaXZhdGUgX3RvYXN0U2VydmljZTogVG9hc3RTZXJ2aWNlID0gaW5qZWN0KFRvYXN0U2VydmljZSk7XG5cblx0cHJpdmF0ZSBfY2FuQ2hlY2tvdXRTdWJqZWN0ID0gbmV3IFJlcGxheVN1YmplY3Q8Ym9vbGVhbj4oKTtcblx0cHJpdmF0ZSBfc3RhdGVTdWJqZWN0ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxTdGVwW10+KFtdKVxuXHRwcml2YXRlIF9sYXN0U3RlcFN1YmplY3QgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcblx0cHJpdmF0ZSBfbG9hZGluZ1N1YmplY3QgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcblx0cHJpdmF0ZSBfb3JkZXJTdWJqZWN0ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxhbnk+KG51bGwpO1xuXHRwcml2YXRlIF9hc3NvY2lhdGVkRGF0YVN1YmplY3QgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PENoZWNrb3V0RGF0YVtdIHwgbnVsbD4obnVsbCk7XG5cdHByaXZhdGUgX2xvYWRpbmdTdGVwU3ViamVjdCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuXG5cdHB1YmxpYyBjYW5DaGVja291dCQ6IE9ic2VydmFibGU8Ym9vbGVhbj4gPSB0aGlzLl9jYW5DaGVja291dFN1YmplY3QuYXNPYnNlcnZhYmxlKCk7XG5cdHB1YmxpYyBzdGF0ZSQ6IE9ic2VydmFibGU8YW55PiA9IHRoaXMuX3N0YXRlU3ViamVjdC5hc09ic2VydmFibGUoKTtcblx0cHVibGljIGlzTGFzdFN0ZXAkOiBPYnNlcnZhYmxlPGJvb2xlYW4+ID0gdGhpcy5fbGFzdFN0ZXBTdWJqZWN0LmFzT2JzZXJ2YWJsZSgpO1xuXHRwdWJsaWMgYXNzb2NpYXRlZERhdGEkOiBPYnNlcnZhYmxlPGFueT4gPSB0aGlzLl9hc3NvY2lhdGVkRGF0YVN1YmplY3QuYXNPYnNlcnZhYmxlKCk7XG5cdHB1YmxpYyBvcmRlciQ6IE9ic2VydmFibGU8YW55PiA9IHRoaXMuX29yZGVyU3ViamVjdC5hc09ic2VydmFibGUoKTtcblx0cHVibGljIGxvYWRpbmdTdGVwJDpPYnNlcnZhYmxlPGJvb2xlYW4+ID0gdGhpcy5fbG9hZGluZ1N0ZXBTdWJqZWN0LmFzT2JzZXJ2YWJsZSgpO1xuXHRwdWJsaWMgbG9hZGluZyQ6IE9ic2VydmFibGU8Ym9vbGVhbj4gPSB0aGlzLl9sb2FkaW5nU3ViamVjdC5hc09ic2VydmFibGUoKTtcblxuXHRwdWJsaWMgdG90YWw6IGFueTtcblx0cHVibGljIGNhcnRMb2NhbDogYW55O1xuXHRwcml2YXRlIGNoZWNrb3V0RGF0YTogYW55ID0ge307XG5cdHByaXZhdGUgb3JkZXI6IGFueTtcblxuXHQvL0FQSSBNZXRob2RzXG5cdGJhc2VBcGkgPSAoKSA9PiAnc2hvcC1hcGkvJyArIHRoaXMuX2NvbnN0cy5DSEFOTkVMICsgJy9jaGVja291dC8nICsgdGhpcy5fY2FydFNlcnZpY2UuZ2V0Q2FydFRva2VuKCk7XG5cdGdldEhhc1B1cmNoYXNlQ29uZGl0aW9ucygpIHsgcmV0dXJuICdzaG9wLWFwaS8nICsgdGhpcy5fY29uc3RzLkNIQU5ORUwgKyAnL2NhcnRzLycgKyB0aGlzLl9jYXJ0U2VydmljZS5nZXRDYXJ0VG9rZW4oKSArICcvaGFzX3B1cmNoYXNlX2NvbmRpdGlvbnMnIH07XG5cdGNvbXBsZXRlQXBpKCkgeyByZXR1cm4gdGhpcy5iYXNlQXBpKCkgKyAnL2NvbXBsZXRlJyB9O1xuXG5cblx0Y29uc3RydWN0b3IoKSB7XG5cdFx0Y29tYmluZUxhdGVzdChbdGhpcy5fY2FydFNlcnZpY2UuY2FydEl0ZW1zJCwgdGhpcy5fY2FydFNlcnZpY2UubG9hZGluZyRdKS5zdWJzY3JpYmUoKFtpdGVtcywgbG9hZGluZ10pID0+IHtcblx0XHRcdGlmICghbG9hZGluZyAmJiBpdGVtcy5sZW5ndGggPiAwKSB7XG5cdFx0XHRcdHRoaXMuX2NhbkNoZWNrb3V0U3ViamVjdC5uZXh0KHRydWUpO1xuXHRcdFx0XHR0aGlzLl9jYXJ0U2VydmljZS5nZXRUb3RhbEFtb3VudCgpLnN1YnNjcmliZSgocmVzOiBhbnkpID0+IHtcblx0XHRcdFx0XHR0aGlzLnRvdGFsID0gcmVzO1xuXHRcdFx0XHR9KVxuXHRcdFx0fVxuXHRcdH0pXG5cdFx0dGhpcy5fY2FydFNlcnZpY2UuY2FydCQuc3Vic2NyaWJlKGNhcnQgPT4gY2FydCAmJiAodGhpcy5jYXJ0TG9jYWwgPSBjYXJ0KSAmJiB0aGlzLnVwZGF0ZUFzb2NpYXRlZERhdGEoY2FydCkpO1xuXHRcdHRoaXMub3JkZXIkLnN1YnNjcmliZShvcmRlciA9PiBvcmRlciAmJiB0aGlzLnVwZGF0ZUFzb2NpYXRlZERhdGEob3JkZXIpKVxuXHR9XG5cblx0c2V0U3RlcHMoc3RlcHM6IElTdGVwW10pIHtcblx0XHRsZXQgZmluYWxfc3RlcHM6IFN0ZXBbXSA9IFtdO1xuXHRcdHN0ZXBzLmZvckVhY2goKHN0ZXAsIGkpID0+IGZpbmFsX3N0ZXBzLnB1c2gobmV3IFN0ZXAoc3RlcC5uYW1lLCBzdGVwLnByaW9yaXR5IHx8IChpICsgMSksIHN0ZXAubGFiZWwsIHN0ZXAuc3RhdGUpKSk7XG5cdFx0dGhpcy5fc3RhdGVTdWJqZWN0Lm5leHQoZmluYWxfc3RlcHMpO1xuXHRcdGlmIChmaW5hbF9zdGVwcy5sZW5ndGggPT0gMSkge1xuXHRcdFx0dGhpcy5fbGFzdFN0ZXBTdWJqZWN0Lm5leHQodHJ1ZSk7XG5cdFx0fVxuXHRcdC8vIGNvbnNvbGUubG9nKGZpbmFsX3N0ZXBzKTtcblx0XHRmaXJzdFZhbHVlRnJvbSh0aGlzLl9jb25uZWN0aW9uLmdldCh0aGlzLmdldEhhc1B1cmNoYXNlQ29uZGl0aW9ucygpKSkudGhlbihcblx0XHRcdHJlcyA9PiB7XG5cdFx0XHRcdHRoaXMuX2FuYWx5dGljc1NlcnZpY2UuY2FsbEV2ZW50KCdjaGVja291dF9pbml0JywgeyAuLi50aGlzLmNhcnRMb2NhbCwgY3VycmVuY3k6IHRoaXMuY2FydExvY2FsPy5jdXJyZW5jeSwgdmFsdWU6IHRoaXMuY2FydExvY2FsPy50b3RhbCB9KVxuXHRcdFx0fVxuXHRcdClcblx0fVxuXG5cdG5leHQoKSB7XG5cdFx0dGhpcy5fbG9hZGluZ1N0ZXBTdWJqZWN0Lm5leHQodHJ1ZSk7XG5cdFx0Y29uc3Qgc3RlcHMgPSB0aGlzLl9zdGF0ZVN1YmplY3QuZ2V0VmFsdWUoKVxuXHRcdGNvbnN0IHJlYWR5U3RlcCA9IHN0ZXBzLmZpbmRJbmRleChzdGVwID0+IHN0ZXAuc3RhdGUgPT09ICdyZWFkeScpO1xuXHRcdGlmIChzdGVwc1tyZWFkeVN0ZXAgKyAxXSkge1xuXHRcdFx0c3RlcHNbcmVhZHlTdGVwXS5zdGF0ZSA9ICdkb2luZydcblx0XHRcdHN0ZXBzW3JlYWR5U3RlcCArIDFdLnN0YXRlID0gJ3JlYWR5Jztcblx0XHRcdGlmICghc3RlcHNbcmVhZHlTdGVwICsgMl0pIHRoaXMuX2xhc3RTdGVwU3ViamVjdC5uZXh0KHRydWUpO1xuXHRcdFx0dGhpcy5fbG9hZGluZ1N0ZXBTdWJqZWN0Lm5leHQoZmFsc2UpXG5cdFx0fSBlbHNlIHtcblx0XHRcdHRoaXMuY29tcGxldGUoKS50aGVuKFxuXHRcdFx0XHRyZXMgPT4ge1xuXHRcdFx0XHRcdGlmIChyZXMub2spIHtcblx0XHRcdFx0XHRcdHRoaXMuX3JvdXRlci5uYXZpZ2F0ZShbJ2NoZWNrb3V0L29yZGVyX3N1Y2Nlc3MnXSlcblx0XHRcdFx0XHRcdCBpZiAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcpIHtcblx0XHRcdFx0XHRcdCAgIHdpbmRvdy5zY3JvbGxUbygwLCAwKTtcblx0XHRcdFx0XHRcdCB9XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdCFyZXMubm90aWZpZWQgJiYgdGhpcy5fdG9hc3RTZXJ2aWNlLnNob3cocmVzLm1lc3NhZ2UgfHwgJ29wZXJhdGlvbi1lcnJvcicpXG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdHRoaXMuX2xvYWRpbmdTdGVwU3ViamVjdC5uZXh0KGZhbHNlKVxuXHRcdFx0XHR9LFxuXHRcdFx0XHRlcnIgPT4ge1xuXHRcdFx0XHRcdC8vIGNvbnNvbGUubG9nKGVycilcblx0XHRcdFx0XHR0aGlzLl9sb2FkaW5nU3RlcFN1YmplY3QubmV4dChmYWxzZSlcblx0XHRcdFx0XHR0aGlzLl90b2FzdFNlcnZpY2Uuc2hvdygnb3BlcmF0aW9uLWVycm9yJylcblx0XHRcdFx0fVxuXHRcdFx0KVxuXHRcdH1cblx0fVxuXG5cdGJhY2soKSB7XG5cdFx0Y29uc3Qgc3RlcHMgPSB0aGlzLl9zdGF0ZVN1YmplY3QuZ2V0VmFsdWUoKVxuXHRcdGNvbnN0IHJlYWR5U3RlcCA9IHN0ZXBzLmZpbmRJbmRleChzdGVwID0+IHN0ZXAuc3RhdGUgPT09ICdyZWFkeScpO1xuXHRcdHRoaXMuX2xhc3RTdGVwU3ViamVjdC5uZXh0KGZhbHNlKTtcblx0XHRpZiAoc3RlcHNbcmVhZHlTdGVwIC0gMV0pIHtcblx0XHRcdHN0ZXBzW3JlYWR5U3RlcF0uc3RhdGUgPSAncGVuZGluZydcblx0XHRcdHN0ZXBzW3JlYWR5U3RlcCAtIDFdLnN0YXRlID0gJ3JlYWR5Jztcblx0XHR9XG5cdH1cblxuXHRzZXRPcmRlciA9IChvcmRlcjogYW55KSA9PiB7IHRoaXMub3JkZXIgPSBvcmRlciwgdGhpcy5fb3JkZXJTdWJqZWN0Lm5leHQob3JkZXIpIH07XG5cdC8vZ2V0T3JkZXIgPSAoKSA9PiB0aGlzLm9yZGVyIHx8IHRoaXMub3JkZXJTdWJqZWN0LnZhbHVlO1xuXG5cdHByaXZhdGUgY29tcGxldGVPcmRlciA9ICgpID0+IGZpcnN0VmFsdWVGcm9tKHRoaXMuX2Nvbm5lY3Rpb24ucHV0KHRoaXMuY29tcGxldGVBcGkoKSwgeyBlbWFpbDogdGhpcy5jaGVja291dERhdGEuZW1haWwsIG5vdGVzOiB0aGlzLmNoZWNrb3V0RGF0YS5ub3RlcyB8fCAnJyB9KSk7XG5cblx0Z2V0Q2hlY2tvdXRFcnJvck1lc3NhZ2UoZXJyb3I6IGFueSwgZmFsbGJhY2s6IHN0cmluZyA9ICdvcGVyYXRpb24tZXJyb3InKSB7XG5cdFx0Y29uc3QgcGF5bG9hZCA9IGVycm9yPy5lcnJvciB8fCBlcnJvciB8fCB7fTtcblx0XHRjb25zdCBjb2RlID0gcGF5bG9hZD8uY29kZSB8fCBlcnJvcj8uY29kZTtcblx0XHRjb25zdCBzdGF0dXMgPSBlcnJvcj8uc3RhdHVzIHx8IHBheWxvYWQ/LnN0YXR1cztcblx0XHRpZiAoY29kZSA9PT0gJ291dF9vZl9zdG9jaycgfHwgc3RhdHVzID09PSA0NTApIHtcblx0XHRcdHJldHVybiBwYXlsb2FkPy5tZXNzYWdlIHx8ICdvdXQtb2Ytc3RvY2stYWN0dWFsbHknO1xuXHRcdH1cblx0XHRyZXR1cm4gcGF5bG9hZD8ubWVzc2FnZSB8fCBmYWxsYmFjaztcblx0fVxuXG5cdG5vdGlmeUNoZWNrb3V0RXJyb3IoZXJyb3I6IGFueSwgZmFsbGJhY2s6IHN0cmluZyA9ICdvcGVyYXRpb24tZXJyb3InKSB7XG5cdFx0Y29uc3QgbWVzc2FnZSA9IHRoaXMuZ2V0Q2hlY2tvdXRFcnJvck1lc3NhZ2UoZXJyb3IsIGZhbGxiYWNrKTtcblx0XHR0aGlzLl90b2FzdFNlcnZpY2Uuc2hvdyhtZXNzYWdlKTtcblx0XHRyZXR1cm4gbWVzc2FnZTtcblx0fVxuXG5cdGNvbXBsZXRlID0gYXN5bmMgKCkgPT4ge1xuXHRcdHRyeSB7XG5cdFx0XHR0aGlzLl9sb2FkaW5nU3ViamVjdC5uZXh0KHRydWUpO1xuXHRcdFx0bGV0IHJlc3VsdCA9IGF3YWl0IHRoaXMuY29tcGxldGVPcmRlcigpO1xuXHRcdFx0XG5cdFx0XHRpZiAocmVzdWx0ICYmIHJlc3VsdC5lcnJvcikge1xuXHRcdFx0XHR0aGlzLl9jYXJ0U2VydmljZS5jaGFuZ2VIYXZlVG9VcGRhdGUoZmFsc2UpO1xuXHRcdFx0XHR0aGlzLl9sb2FkaW5nU3ViamVjdC5uZXh0KGZhbHNlKTtcblx0XHRcdFx0Y29uc3QgbWVzc2FnZSA9IHRoaXMubm90aWZ5Q2hlY2tvdXRFcnJvcihyZXN1bHQsICdub3QtY29tcGxldGVkJyk7XG5cdFx0XHRcdHJldHVybiAoeyBvazogZmFsc2UsIHJlcXVpcmVfbG9naW46IHRydWUsIG1lc3NhZ2UsIG5vdGlmaWVkOiB0cnVlIH0pO1xuXHRcdFx0fVxuXG5cdFx0XHR0aGlzLnNldE9yZGVyKHJlc3VsdCk7XG5cdFx0XHR0aGlzLl9hbmFseXRpY3NTZXJ2aWNlLmNhbGxFdmVudCgncHVyY2hhc2UnLCB7IC4uLnJlc3VsdCwgY3VycmVuY3k6IHJlc3VsdC5jdXJyZW5jeSwgdmFsdWU6IHJlc3VsdC50b3RhbCB9KTtcblx0XHRcdHRoaXMuX2NhcnRTZXJ2aWNlLmNsZWFyQW5kUmVzZXRDYXJ0KCk7XG5cdFx0XHR0aGlzLl9jYW5DaGVja291dFN1YmplY3QubmV4dChmYWxzZSk7XG5cdFx0XHQvL3RoaXMuX29uUmVhZHlTdWJqZWN0Lm5leHQoZmFsc2UpO1xuXHRcdFx0dGhpcy5fbG9hZGluZ1N1YmplY3QubmV4dChmYWxzZSk7XG5cdFx0XHRcblx0XHRcdC8vIOKaoO+4jyBGSVg6IFJlc2V0IGNoZWNrb3V0IGRhdGEgYWZ0ZXIgb3JkZXIgY29tcGxldGlvblxuXHRcdFx0dGhpcy5yZXNldENoZWNrb3V0U3RhdGUoKTtcblxuXHRcdFx0cmV0dXJuICh7IG9rOiB0cnVlLCByZXF1aXJlX2xvZ2luOiBmYWxzZSwgbWVzc2FnZTogJycgfSk7XG5cdFx0fSBjYXRjaCAoZXJyb3IpIHtcblx0XHRcdHRoaXMuX2xvYWRpbmdTdWJqZWN0Lm5leHQoZmFsc2UpO1xuXHRcdFx0Y29uc29sZS5lcnJvcignRXJyb3IgaW4gY29tcGxldGU6JywgZXJyb3IpO1xuXHRcdFx0Y29uc3QgbWVzc2FnZSA9IHRoaXMubm90aWZ5Q2hlY2tvdXRFcnJvcihlcnJvcik7XG5cdFx0XHRyZXR1cm4geyBvazogZmFsc2UsIHJlcXVpcmVfbG9naW46IGZhbHNlLCBtZXNzYWdlLCBub3RpZmllZDogdHJ1ZSB9O1xuXHRcdH1cblxuXHR9XG5cblx0Ly8gdXBkYXRlQXNvY2lhdGVkRGF0YSA9IChjYXJ0OiBhbnkpID0+IHtcblx0Ly8gXHRsZXQgcmVzdWx0ID0gdGhpcy5fb3JkZXJVdGlsaXR5U2VydmljZS5nZXRQcm9tb3Rpb25zKGNhcnQpO1xuXHQvLyBcdGNvbnN0IHVzZXJQcm9maWxlOiBVc2VyID0gVXNlci5mcm9tSnNvbih0aGlzLl9hdXRoU2VydmljZS5nZXRVc2VyUHJvZmlsZUFzVXNlcigpKTtcblx0Ly8gXHRpZiAocmVzdWx0KSB7XG5cdC8vIFx0XHRpZiAodXNlclByb2ZpbGUuaXNXaG9sZXNhbGVyKCkgJiYgY2FydC50b3RhbHMudGF4ZXMgIT0gMCkge1xuXHQvLyBcdFx0XHRsZXQgdG90YWwgPSB7IC4uLnJlc3VsdFtyZXN1bHQubGVuZ3RoIC0gMV0gfTtcblx0Ly8gXHRcdFx0cmVzdWx0W3Jlc3VsdC5sZW5ndGggLSAxXSA9IHtcblx0Ly8gXHRcdFx0XHR0eXBlOiAndGF4ZXMnLFxuXHQvLyBcdFx0XHRcdG5hbWU6ICd0YXhlcycsXG5cdC8vIFx0XHRcdFx0YW1vdW50OiBjYXJ0LnRvdGFscy50YXhlc1xuXHQvLyBcdFx0XHR9XG5cdC8vIFx0XHRcdHJlc3VsdC5wdXNoKHRvdGFsKTtcblx0Ly8gXHRcdH1cblx0Ly8gXHRcdGxldCBzaGlwbWVudCA9IHJlc3VsdD8uZmluZCgocHJvbW90aW9uOiBhbnkpID0+IHByb21vdGlvbi50eXBlID09IFwic2hpcG1lbnRcIik7XG5cdC8vIFx0XHRpZiAoIXNoaXBtZW50ICYmIGNhcnQudG90YWxzLnNoaXBwaW5nICE9IDApIHtcblxuXHQvLyBcdFx0XHRpZiAocmVzdWx0Py5sZW5ndGggJiYgIXJlc3VsdC5maW5kKChpdGVtOiBhbnkpID0+IGl0ZW0udHlwZSA9PT0gXCJzaGlwbWVudFwiKSkge1xuXHQvLyBcdFx0XHRcdGxldCB0b3RhbCA9IHsgLi4ucmVzdWx0W3Jlc3VsdC5sZW5ndGggLSAxXSB9O1xuXHQvLyBcdFx0XHRcdHJlc3VsdFtyZXN1bHQubGVuZ3RoIC0gMV0gPSB7XG5cdC8vIFx0XHRcdFx0XHR0eXBlOiAnc2hpcG1lbnQnLFxuXHQvLyBcdFx0XHRcdFx0bmFtZTogJ3NoaXBtZW50Jyxcblx0Ly8gXHRcdFx0XHRcdGFtb3VudDogY2FydC50b3RhbHMuc2hpcHBpbmdcblx0Ly8gXHRcdFx0XHR9XG5cdC8vIFx0XHRcdFx0cmVzdWx0LnB1c2godG90YWwpO1xuXHQvLyBcdFx0XHR9XG5cdC8vIFx0XHR9XG5cdC8vIFx0XHR0aGlzLl9hc3NvY2lhdGVkRGF0YVN1YmplY3QubmV4dChyZXN1bHQpO1xuXHQvLyBcdH1cblx0Ly8gfVxuXHR1cGRhdGVBc29jaWF0ZWREYXRhID0gKGNhcnQ6IGFueSkgPT4ge1xuICAgICAgICBsZXQgcmVzdWx0ID0gdGhpcy5fb3JkZXJVdGlsaXR5U2VydmljZS5nZXRQcm9tb3Rpb25zKGNhcnQpO1xuXHRcdGlmIChjYXJ0LnRvdGFscy50YXhlcyAhPSAwICYmIHJlc3VsdCAmJiByZXN1bHQubGVuZ3RoID4gMCkge1xuXHRcdFx0bGV0IHRvdGFsID0geyAuLi5yZXN1bHRbcmVzdWx0Lmxlbmd0aCAtIDFdIH07XG5cdFx0XHRyZXN1bHRbcmVzdWx0Lmxlbmd0aCAtIDFdID0ge1xuXHRcdFx0XHR0eXBlOiAndGF4ZXMnLFxuXHRcdFx0XHRuYW1lOiAndGF4ZXMnLFxuXHRcdFx0XHRhbW91bnQ6IGNhcnQudG90YWxzLnRheGVzXG5cdFx0XHR9XG5cdFx0XHRyZXN1bHQucHVzaCh0b3RhbCk7XG5cdFx0fVxuICAgICAgICBsZXQgc2hpcG1lbnQgPSByZXN1bHQ/LmZpbmQocHJvbW90aW9uID0+IHByb21vdGlvbi50eXBlID09IFwic2hpcG1lbnRcIik7XG4gICAgICAgIGlmICghc2hpcG1lbnQgJiYgY2FydC50b3RhbHMuc2hpcHBpbmcgIT0gMCkge1xuXG4gICAgICAgICAgICBpZiAocmVzdWx0Py5sZW5ndGggJiYgIXJlc3VsdC5maW5kKGl0ZW0gPT4gaXRlbS50eXBlID09PSBcInNoaXBtZW50XCIpKSB7XG4gICAgICAgICAgICAgICAgbGV0IHRvdGFsID0geyAuLi5yZXN1bHRbcmVzdWx0Lmxlbmd0aCAtIDFdIH07XG4gICAgICAgICAgICAgICAgcmVzdWx0W3Jlc3VsdC5sZW5ndGggLSAxXSA9IHtcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogJ3NoaXBtZW50JyxcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogJ3NoaXBtZW50JyxcbiAgICAgICAgICAgICAgICAgICAgYW1vdW50OiBjYXJ0LnRvdGFscy5zaGlwcGluZ1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXN1bHQucHVzaCh0b3RhbCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblx0XHR0aGlzLl9hc3NvY2lhdGVkRGF0YVN1YmplY3QubmV4dChyZXN1bHQgPz8gbnVsbCk7XG5cdH1cblxuXHRzZXRDaGVja291dE5vdGVzID0gKG5vdGVzOiBzdHJpbmcpID0+IHtcblx0XHR0aGlzLmNoZWNrb3V0RGF0YS5ub3RlcyA9IG5vdGVzIHx8ICcnO1xuXHR9XG5cblx0Z2V0Q2hlY2tvdXROb3RlcyA9ICgpID0+IHRoaXMuY2hlY2tvdXREYXRhLm5vdGVzIHx8ICcnO1xuXG5cdGdldFN0ZXBEYXRhID0gKHN0ZXBfbmFtZTogU3RlcFR5cGUpID0+IHtcblx0XHRsZXQgc3RlcF9yZXN1bHQgPSB0aGlzLl9zdGF0ZVN1YmplY3QuZ2V0VmFsdWUoKS5maW5kKHN0ZXAgPT4gc3RlcC5uYW1lID09IHN0ZXBfbmFtZSk7XG5cdFx0cmV0dXJuIChzdGVwX3Jlc3VsdCAmJiBzdGVwX3Jlc3VsdC5kYXRhKTtcblx0fVxuXG5cdGNsZWFyU3RlcERhdGEoc3RlcF9uYW1lOiBTdGVwVHlwZSkge1xuXHRcdGNvbnN0IHN0ZXBzID0gdGhpcy5fc3RhdGVTdWJqZWN0LmdldFZhbHVlKCk7XG5cdFx0Y29uc3QgaW5kZXggPSBzdGVwcy5maW5kSW5kZXgoc3RlcCA9PiBzdGVwLm5hbWUgPT0gc3RlcF9uYW1lKTtcblx0XHRpZiAoaW5kZXggPT09IC0xKSByZXR1cm47XG5cdFx0Zm9yIChsZXQgaSA9IGluZGV4OyBpIDwgc3RlcHMubGVuZ3RoOyBpICs9IDEpIHtcblx0XHRcdHN0ZXBzW2ldLnJlc3RhcnQoKTtcblx0XHR9XG5cdFx0dGhpcy5fc3RhdGVTdWJqZWN0Lm5leHQoc3RlcHMpO1xuXHR9XG5cblx0Z2V0U3RlcCA9IChzdGVwX25hbWU6IFN0ZXBUeXBlKSA9PiB0aGlzLl9zdGF0ZVN1YmplY3QuZ2V0VmFsdWUoKS5maW5kKHN0ZXAgPT4gc3RlcC5uYW1lID09IHN0ZXBfbmFtZSk7XG5cblx0aXNTdGVwUmVhZHkgPSAoc3RlcF9uYW1lOiBTdGVwVHlwZSkgPT4ge1xuXHRcdGNvbnN0IHN0ZXAgPSB0aGlzLmdldFN0ZXAoc3RlcF9uYW1lKTtcblx0XHRyZXR1cm4gISFzdGVwPy5kYXRhO1xuXHR9XG5cblx0Z2V0U3RlcHNTbmFwc2hvdCA9ICgpID0+IHRoaXMuX3N0YXRlU3ViamVjdC5nZXRWYWx1ZSgpO1xuXG5cdHNldFN0ZXBEYXRhID0gKHN0ZXBfbmFtZTogU3RlcFR5cGUsIGRhdGE6IGFueSkgPT4ge1xuXHRcdGNvbnN0IHN0ZXBzID0gdGhpcy5fc3RhdGVTdWJqZWN0LmdldFZhbHVlKCk7XG5cdFx0Y29uc3QgaW5kZXggPSBzdGVwcy5maW5kSW5kZXgoc3RlcCA9PiBzdGVwLm5hbWUgPT0gc3RlcF9uYW1lKTtcblx0XHRpZiAoaW5kZXggPT09IC0xKSByZXR1cm47XG5cdFx0Zm9yIChsZXQgaSA9IGluZGV4ICsgMTsgaSA8IHN0ZXBzLmxlbmd0aDsgaSArPSAxKSB7XG5cdFx0XHRzdGVwc1tpXS5yZXN0YXJ0KCk7XG5cdFx0fVxuXHRcdHN0ZXBzW2luZGV4XS5yZWFkeShkYXRhKTtcblx0XHR0aGlzLl9zdGF0ZVN1YmplY3QubmV4dChzdGVwcyk7XG5cdFx0LyogaWYgKGRhdGEpIHtcblx0XHRcdHRoaXMuX29yZGVyU3ViamVjdC5uZXh0KGRhdGEpO1xuXHRcdFx0dGhpcy50b3RhbCA9IGRhdGEudG90YWxzLnRvdGFsO1xuXHRcdH0gKi9cblx0fVxuXG5cdC8vIOKaoO+4jyBGSVg6IFJlc2V0IGNoZWNrb3V0IHN0YXRlIGFmdGVyIG9yZGVyIGNvbXBsZXRpb25cblx0cHJpdmF0ZSByZXNldENoZWNrb3V0U3RhdGUgPSAoKSA9PiB7XG5cdFx0dGhpcy5jaGVja291dERhdGEgPSB7fTtcblx0XHR0aGlzLm9yZGVyID0gbnVsbDtcblx0XHR0aGlzLl9zdGF0ZVN1YmplY3QubmV4dChbXSk7XG5cdFx0dGhpcy5fYXNzb2NpYXRlZERhdGFTdWJqZWN0Lm5leHQobnVsbCk7XG5cdFx0dGhpcy5fbGFzdFN0ZXBTdWJqZWN0Lm5leHQoZmFsc2UpO1xuXHR9XG59XG4iXX0=
271
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hlY2tvdXQuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25nLWVhc3ljb21tZXJjZS12MTgvc3JjL2xpYi9lYy1zZXJ2aWNlcy9jaGVja291dC5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ25ELE9BQU8sRUFBRSxlQUFlLEVBQUUsYUFBYSxFQUFFLGNBQWMsRUFBYyxhQUFhLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDakcsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRTdDLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLFFBQVEsQ0FBQztBQUMzQyxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDL0MsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQ25ELE9BQU8sRUFBRSxJQUFJLEVBQVEsTUFBTSxZQUFZLENBQUM7QUFDeEMsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzdDLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQzlELE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUN6QyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7O0FBSy9DLE1BQU0sT0FBTyxlQUFlO0lBRW5CLFlBQVksR0FBZ0IsTUFBTSxDQUFDLFdBQVcsQ0FBQyxDQUFDO0lBQ2hELFdBQVcsR0FBc0IsTUFBTSxDQUFDLGlCQUFpQixDQUFDLENBQUM7SUFDM0QsaUJBQWlCLEdBQXFCLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO0lBQy9ELE9BQU8sR0FBd0IsTUFBTSxDQUFDLG1CQUFtQixDQUFDLENBQUM7SUFDM0QsWUFBWSxHQUFn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SyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQ3BCLENBQUM7UUFDRCxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3pCLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQy9COzs7WUFHSTtJQUNMLENBQUMsQ0FBQTtJQUVELHNEQUFzRDtJQUM5QyxrQkFBa0IsR0FBRyxHQUFHLEVBQUU7UUFDakMsSUFBSSxDQUFDLFlBQVksR0FBRyxFQUFFLENBQUM7UUFDdkIsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUM7UUFDbEIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDNUIsSUFBSSxDQUFDLHNCQUFzQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN2QyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ25DLENBQUMsQ0FBQTt3R0F0UlcsZUFBZTs0R0FBZixlQUFlLGNBRmYsTUFBTTs7NEZBRU4sZUFBZTtrQkFIM0IsVUFBVTttQkFBQztvQkFDWCxVQUFVLEVBQUUsTUFBTTtpQkFDbEIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBpbmplY3QsIEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgY29tYmluZUxhdGVzdCwgZmlyc3RWYWx1ZUZyb20sIE9ic2VydmFibGUsIFJlcGxheVN1YmplY3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IENhcnRTZXJ2aWNlIH0gZnJvbSAnLi9jYXJ0LnNlcnZpY2UnO1xuaW1wb3J0IHsgQ2hlY2tvdXREYXRhLCBJU3RlcCwgU3RlcFR5cGUgfSBmcm9tICcuLi9pbnRlcmZhY2VzJztcbmltcG9ydCB7IENvbm5lY3Rpb25TZXJ2aWNlIH0gZnJvbSAnLi4vYXBpJztcbmltcG9ydCB7IEFuYWx5dGljc1NlcnZpY2UgfSBmcm9tICcuL2FuYWx5dGljcyc7XG5pbXBvcnQgeyBBcGlDb25zdGFudHNTZXJ2aWNlIH0gZnJvbSAnLi4vY29uc3RhbnRzJztcbmltcG9ydCB7IFN0ZXAsIFVzZXIgfSBmcm9tICcuLi9jbGFzc2VzJztcbmltcG9ydCB7IEF1dGhTZXJ2aWNlIH0gZnJvbSAnLi9hdXRoLnNlcnZpY2UnO1xuaW1wb3J0IHsgT3JkZXJVdGlsaXR5U2VydmljZSB9IGZyb20gJy4vb3JkZXItdXRpbGl0eS5zZXJ2aWNlJztcbmltcG9ydCB7IFJvdXRlciB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQgeyBUb2FzdFNlcnZpY2UgfSBmcm9tICcuL3RvYXN0LnNlcnZpY2UnO1xuXG5ASW5qZWN0YWJsZSh7XG5cdHByb3ZpZGVkSW46ICdyb290J1xufSlcbmV4cG9ydCBjbGFzcyBDaGVja291dFNlcnZpY2Uge1xuXG5cdHByaXZhdGUgX2NhcnRTZXJ2aWNlOiBDYXJ0U2VydmljZSA9IGluamVjdChDYXJ0U2VydmljZSk7XG5cdHByaXZhdGUgX2Nvbm5lY3Rpb246IENvbm5lY3Rpb25TZXJ2aWNlID0gaW5qZWN0KENvbm5lY3Rpb25TZXJ2aWNlKTtcblx0cHJpdmF0ZSBfYW5hbHl0aWNzU2VydmljZTogQW5hbHl0aWNzU2VydmljZSA9IGluamVjdChBbmFseXRpY3NTZXJ2aWNlKTtcblx0cHJpdmF0ZSBfY29uc3RzOiBBcGlDb25zdGFudHNTZXJ2aWNlID0gaW5qZWN0KEFwaUNvbnN0YW50c1NlcnZpY2UpO1xuXHRwcml2YXRlIF9hdXRoU2VydmljZTogQXV0aFNlcnZpY2UgPSBpbmplY3QoQXV0aFNlcnZpY2UpO1xuXHRwcml2YXRlIF9vcmRlclV0aWxpdHlTZXJ2aWNlOiBPcmRlclV0aWxpdHlTZXJ2aWNlID0gaW5qZWN0KE9yZGVyVXRpbGl0eVNlcnZpY2UpO1xuXHRwcml2YXRlIF9yb3V0ZXI6IFJvdXRlciA9IGluamVjdChSb3V0ZXIpO1xuXHRwcml2YXRlIF90b2FzdFNlcnZpY2U6IFRvYXN0U2VydmljZSA9IGluamVjdChUb2FzdFNlcnZpY2UpO1xuXG5cdHByaXZhdGUgX2NhbkNoZWNrb3V0U3ViamVjdCA9IG5ldyBSZXBsYXlTdWJqZWN0PGJvb2xlYW4+KCk7XG5cdHByaXZhdGUgX3N0YXRlU3ViamVjdCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8U3RlcFtdPihbXSlcblx0cHJpdmF0ZSBfbGFzdFN0ZXBTdWJqZWN0ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG5cdHByaXZhdGUgX2xvYWRpbmdTdWJqZWN0ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG5cdHByaXZhdGUgX29yZGVyU3ViamVjdCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8YW55PihudWxsKTtcblx0cHJpdmF0ZSBfYXNzb2NpYXRlZERhdGFTdWJqZWN0ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxDaGVja291dERhdGFbXSB8IG51bGw+KG51bGwpO1xuXHRwcml2YXRlIF9sb2FkaW5nU3RlcFN1YmplY3QgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcblxuXHRwdWJsaWMgY2FuQ2hlY2tvdXQkOiBPYnNlcnZhYmxlPGJvb2xlYW4+ID0gdGhpcy5fY2FuQ2hlY2tvdXRTdWJqZWN0LmFzT2JzZXJ2YWJsZSgpO1xuXHRwdWJsaWMgc3RhdGUkOiBPYnNlcnZhYmxlPGFueT4gPSB0aGlzLl9zdGF0ZVN1YmplY3QuYXNPYnNlcnZhYmxlKCk7XG5cdHB1YmxpYyBpc0xhc3RTdGVwJDogT2JzZXJ2YWJsZTxib29sZWFuPiA9IHRoaXMuX2xhc3RTdGVwU3ViamVjdC5hc09ic2VydmFibGUoKTtcblx0cHVibGljIGFzc29jaWF0ZWREYXRhJDogT2JzZXJ2YWJsZTxhbnk+ID0gdGhpcy5fYXNzb2NpYXRlZERhdGFTdWJqZWN0LmFzT2JzZXJ2YWJsZSgpO1xuXHRwdWJsaWMgb3JkZXIkOiBPYnNlcnZhYmxlPGFueT4gPSB0aGlzLl9vcmRlclN1YmplY3QuYXNPYnNlcnZhYmxlKCk7XG5cdHB1YmxpYyBsb2FkaW5nU3RlcCQ6T2JzZXJ2YWJsZTxib29sZWFuPiA9IHRoaXMuX2xvYWRpbmdTdGVwU3ViamVjdC5hc09ic2VydmFibGUoKTtcblx0cHVibGljIGxvYWRpbmckOiBPYnNlcnZhYmxlPGJvb2xlYW4+ID0gdGhpcy5fbG9hZGluZ1N1YmplY3QuYXNPYnNlcnZhYmxlKCk7XG5cblx0cHVibGljIHRvdGFsOiBhbnk7XG5cdHB1YmxpYyBjYXJ0TG9jYWw6IGFueTtcblx0cHJpdmF0ZSBjaGVja291dERhdGE6IGFueSA9IHt9O1xuXHRwcml2YXRlIG9yZGVyOiBhbnk7XG5cblx0Ly9BUEkgTWV0aG9kc1xuXHRiYXNlQXBpID0gKCkgPT4gJ3Nob3AtYXBpLycgKyB0aGlzLl9jb25zdHMuQ0hBTk5FTCArICcvY2hlY2tvdXQvJyArIHRoaXMuX2NhcnRTZXJ2aWNlLmdldENhcnRUb2tlbigpO1xuXHRnZXRIYXNQdXJjaGFzZUNvbmRpdGlvbnMoKSB7IHJldHVybiAnc2hvcC1hcGkvJyArIHRoaXMuX2NvbnN0cy5DSEFOTkVMICsgJy9jYXJ0cy8nICsgdGhpcy5fY2FydFNlcnZpY2UuZ2V0Q2FydFRva2VuKCkgKyAnL2hhc19wdXJjaGFzZV9jb25kaXRpb25zJyB9O1xuXHRjb21wbGV0ZUFwaSgpIHsgcmV0dXJuIHRoaXMuYmFzZUFwaSgpICsgJy9jb21wbGV0ZScgfTtcblxuXG5cdGNvbnN0cnVjdG9yKCkge1xuXHRcdGNvbWJpbmVMYXRlc3QoW3RoaXMuX2NhcnRTZXJ2aWNlLmNhcnRJdGVtcyQsIHRoaXMuX2NhcnRTZXJ2aWNlLmxvYWRpbmckXSkuc3Vic2NyaWJlKChbaXRlbXMsIGxvYWRpbmddKSA9PiB7XG5cdFx0XHRpZiAoIWxvYWRpbmcgJiYgaXRlbXMubGVuZ3RoID4gMCkge1xuXHRcdFx0XHR0aGlzLl9jYW5DaGVja291dFN1YmplY3QubmV4dCh0cnVlKTtcblx0XHRcdFx0dGhpcy5fY2FydFNlcnZpY2UuZ2V0VG90YWxBbW91bnQoKS5zdWJzY3JpYmUoKHJlczogYW55KSA9PiB7XG5cdFx0XHRcdFx0dGhpcy50b3RhbCA9IHJlcztcblx0XHRcdFx0fSlcblx0XHRcdH1cblx0XHR9KVxuXHRcdHRoaXMuX2NhcnRTZXJ2aWNlLmNhcnQkLnN1YnNjcmliZShjYXJ0ID0+IGNhcnQgJiYgKHRoaXMuY2FydExvY2FsID0gY2FydCkgJiYgdGhpcy51cGRhdGVBc29jaWF0ZWREYXRhKGNhcnQpKTtcblx0XHR0aGlzLm9yZGVyJC5zdWJzY3JpYmUob3JkZXIgPT4gb3JkZXIgJiYgdGhpcy51cGRhdGVBc29jaWF0ZWREYXRhKG9yZGVyKSlcblx0fVxuXG5cdHNldFN0ZXBzKHN0ZXBzOiBJU3RlcFtdKSB7XG5cdFx0bGV0IGZpbmFsX3N0ZXBzOiBTdGVwW10gPSBbXTtcblx0XHRzdGVwcy5mb3JFYWNoKChzdGVwLCBpKSA9PiBmaW5hbF9zdGVwcy5wdXNoKG5ldyBTdGVwKHN0ZXAubmFtZSwgc3RlcC5wcmlvcml0eSB8fCAoaSArIDEpLCBzdGVwLmxhYmVsLCBzdGVwLnN0YXRlKSkpO1xuXHRcdHRoaXMuX3N0YXRlU3ViamVjdC5uZXh0KGZpbmFsX3N0ZXBzKTtcblx0XHRpZiAoZmluYWxfc3RlcHMubGVuZ3RoID09IDEpIHtcblx0XHRcdHRoaXMuX2xhc3RTdGVwU3ViamVjdC5uZXh0KHRydWUpO1xuXHRcdH1cblx0XHQvLyBjb25zb2xlLmxvZyhmaW5hbF9zdGVwcyk7XG5cdFx0Zmlyc3RWYWx1ZUZyb20odGhpcy5fY29ubmVjdGlvbi5nZXQodGhpcy5nZXRIYXNQdXJjaGFzZUNvbmRpdGlvbnMoKSkpLnRoZW4oXG5cdFx0XHRyZXMgPT4ge1xuXHRcdFx0XHR0aGlzLl9hbmFseXRpY3NTZXJ2aWNlLmNhbGxFdmVudCgnY2hlY2tvdXRfaW5pdCcsIHsgLi4udGhpcy5jYXJ0TG9jYWwsIGN1cnJlbmN5OiB0aGlzLmNhcnRMb2NhbD8uY3VycmVuY3ksIHZhbHVlOiB0aGlzLmNhcnRMb2NhbD8udG90YWwgfSlcblx0XHRcdH1cblx0XHQpXG5cdH1cblxuXHRuZXh0KCkge1xuXHRcdHRoaXMuX2xvYWRpbmdTdGVwU3ViamVjdC5uZXh0KHRydWUpO1xuXHRcdGNvbnN0IHN0ZXBzID0gdGhpcy5fc3RhdGVTdWJqZWN0LmdldFZhbHVlKClcblx0XHRjb25zdCByZWFkeVN0ZXAgPSBzdGVwcy5maW5kSW5kZXgoc3RlcCA9PiBzdGVwLnN0YXRlID09PSAncmVhZHknKTtcblx0XHRpZiAoc3RlcHNbcmVhZHlTdGVwICsgMV0pIHtcblx0XHRcdHN0ZXBzW3JlYWR5U3RlcF0uc3RhdGUgPSAnZG9pbmcnXG5cdFx0XHRzdGVwc1tyZWFkeVN0ZXAgKyAxXS5zdGF0ZSA9ICdyZWFkeSc7XG5cdFx0XHRpZiAoIXN0ZXBzW3JlYWR5U3RlcCArIDJdKSB0aGlzLl9sYXN0U3RlcFN1YmplY3QubmV4dCh0cnVlKTtcblx0XHRcdHRoaXMuX2xvYWRpbmdTdGVwU3ViamVjdC5uZXh0KGZhbHNlKVxuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aGlzLmNvbXBsZXRlKCkudGhlbihcblx0XHRcdFx0cmVzID0+IHtcblx0XHRcdFx0XHRpZiAocmVzLm9rKSB7XG5cdFx0XHRcdFx0XHR0aGlzLl9yb3V0ZXIubmF2aWdhdGUoWydjaGVja291dC9vcmRlcl9zdWNjZXNzJ10pXG5cdFx0XHRcdFx0XHQgaWYgKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnKSB7XG5cdFx0XHRcdFx0XHQgICB3aW5kb3cuc2Nyb2xsVG8oMCwgMCk7XG5cdFx0XHRcdFx0XHQgfVxuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHQhcmVzLm5vdGlmaWVkICYmIHRoaXMuX3RvYXN0U2VydmljZS5zaG93KHJlcy5tZXNzYWdlIHx8ICdvcGVyYXRpb24tZXJyb3InKVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHR0aGlzLl9sb2FkaW5nU3RlcFN1YmplY3QubmV4dChmYWxzZSlcblx0XHRcdFx0fSxcblx0XHRcdFx0ZXJyID0+IHtcblx0XHRcdFx0XHQvLyBjb25zb2xlLmxvZyhlcnIpXG5cdFx0XHRcdFx0dGhpcy5fbG9hZGluZ1N0ZXBTdWJqZWN0Lm5leHQoZmFsc2UpXG5cdFx0XHRcdFx0dGhpcy5fdG9hc3RTZXJ2aWNlLnNob3coJ29wZXJhdGlvbi1lcnJvcicpXG5cdFx0XHRcdH1cblx0XHRcdClcblx0XHR9XG5cdH1cblxuXHRiYWNrKCkge1xuXHRcdGNvbnN0IHN0ZXBzID0gdGhpcy5fc3RhdGVTdWJqZWN0LmdldFZhbHVlKClcblx0XHRjb25zdCByZWFkeVN0ZXAgPSBzdGVwcy5maW5kSW5kZXgoc3RlcCA9PiBzdGVwLnN0YXRlID09PSAncmVhZHknKTtcblx0XHR0aGlzLl9sYXN0U3RlcFN1YmplY3QubmV4dChmYWxzZSk7XG5cdFx0aWYgKHN0ZXBzW3JlYWR5U3RlcCAtIDFdKSB7XG5cdFx0XHRzdGVwc1tyZWFkeVN0ZXBdLnN0YXRlID0gJ3BlbmRpbmcnXG5cdFx0XHRzdGVwc1tyZWFkeVN0ZXAgLSAxXS5zdGF0ZSA9ICdyZWFkeSc7XG5cdFx0fVxuXHR9XG5cblx0c2V0T3JkZXIgPSAob3JkZXI6IGFueSkgPT4geyB0aGlzLm9yZGVyID0gb3JkZXIsIHRoaXMuX29yZGVyU3ViamVjdC5uZXh0KG9yZGVyKSB9O1xuXHQvL2dldE9yZGVyID0gKCkgPT4gdGhpcy5vcmRlciB8fCB0aGlzLm9yZGVyU3ViamVjdC52YWx1ZTtcblxuXHRwcml2YXRlIGNvbXBsZXRlT3JkZXIgPSAoKSA9PiBmaXJzdFZhbHVlRnJvbSh0aGlzLl9jb25uZWN0aW9uLnB1dCh0aGlzLmNvbXBsZXRlQXBpKCksIHsgZW1haWw6IHRoaXMuY2hlY2tvdXREYXRhLmVtYWlsLCBub3RlczogdGhpcy5jaGVja291dERhdGEubm90ZXMgfHwgJycgfSkpO1xuXG5cdGdldENoZWNrb3V0RXJyb3JNZXNzYWdlKGVycm9yOiBhbnksIGZhbGxiYWNrOiBzdHJpbmcgPSAnb3BlcmF0aW9uLWVycm9yJykge1xuXHRcdGNvbnN0IHBheWxvYWQgPSBlcnJvcj8uZXJyb3IgfHwgZXJyb3IgfHwge307XG5cdFx0Y29uc3QgY29kZSA9IHBheWxvYWQ/LmNvZGUgfHwgZXJyb3I/LmNvZGU7XG5cdFx0Y29uc3Qgc3RhdHVzID0gZXJyb3I/LnN0YXR1cyB8fCBwYXlsb2FkPy5zdGF0dXM7XG5cdFx0aWYgKGNvZGUgPT09ICdvdXRfb2Zfc3RvY2snIHx8IHN0YXR1cyA9PT0gNDUwKSB7XG5cdFx0XHRyZXR1cm4gcGF5bG9hZD8ubWVzc2FnZSB8fCAnb3V0LW9mLXN0b2NrLWFjdHVhbGx5Jztcblx0XHR9XG5cdFx0cmV0dXJuIHBheWxvYWQ/Lm1lc3NhZ2UgfHwgZmFsbGJhY2s7XG5cdH1cblxuXHRwcml2YXRlIGlzT3V0T2ZTdG9ja0Vycm9yKGVycm9yOiBhbnkpOiBib29sZWFuIHtcblx0XHRjb25zdCBwYXlsb2FkID0gZXJyb3I/LmVycm9yIHx8IGVycm9yIHx8IHt9O1xuXHRcdGNvbnN0IGNvZGUgPSBwYXlsb2FkPy5jb2RlIHx8IGVycm9yPy5jb2RlO1xuXHRcdGNvbnN0IHN0YXR1cyA9IGVycm9yPy5zdGF0dXMgfHwgcGF5bG9hZD8uc3RhdHVzO1xuXHRcdHJldHVybiBjb2RlID09PSAnb3V0X29mX3N0b2NrJyB8fCBzdGF0dXMgPT09IDQ1MDtcblx0fVxuXG5cdG5vdGlmeUNoZWNrb3V0RXJyb3IoZXJyb3I6IGFueSwgZmFsbGJhY2s6IHN0cmluZyA9ICdvcGVyYXRpb24tZXJyb3InKSB7XG5cdFx0Y29uc3QgbWVzc2FnZSA9IHRoaXMuZ2V0Q2hlY2tvdXRFcnJvck1lc3NhZ2UoZXJyb3IsIGZhbGxiYWNrKTtcblx0XHR0aGlzLl90b2FzdFNlcnZpY2Uuc2hvdyhtZXNzYWdlKTtcblx0XHRpZiAodGhpcy5pc091dE9mU3RvY2tFcnJvcihlcnJvcikpIHtcblx0XHRcdHRoaXMuX3JvdXRlci5uYXZpZ2F0ZShbJy9jYXJ0J10pO1xuXHRcdH1cblx0XHRyZXR1cm4gbWVzc2FnZTtcblx0fVxuXG5cdGNvbXBsZXRlID0gYXN5bmMgKCkgPT4ge1xuXHRcdHRyeSB7XG5cdFx0XHR0aGlzLl9sb2FkaW5nU3ViamVjdC5uZXh0KHRydWUpO1xuXHRcdFx0bGV0IHJlc3VsdCA9IGF3YWl0IHRoaXMuY29tcGxldGVPcmRlcigpO1xuXHRcdFx0XG5cdFx0XHRpZiAocmVzdWx0ICYmIHJlc3VsdC5lcnJvcikge1xuXHRcdFx0XHR0aGlzLl9jYXJ0U2VydmljZS5jaGFuZ2VIYXZlVG9VcGRhdGUoZmFsc2UpO1xuXHRcdFx0XHR0aGlzLl9sb2FkaW5nU3ViamVjdC5uZXh0KGZhbHNlKTtcblx0XHRcdFx0Y29uc3QgbWVzc2FnZSA9IHRoaXMubm90aWZ5Q2hlY2tvdXRFcnJvcihyZXN1bHQsICdub3QtY29tcGxldGVkJyk7XG5cdFx0XHRcdHJldHVybiAoeyBvazogZmFsc2UsIHJlcXVpcmVfbG9naW46IHRydWUsIG1lc3NhZ2UsIG5vdGlmaWVkOiB0cnVlIH0pO1xuXHRcdFx0fVxuXG5cdFx0XHR0aGlzLnNldE9yZGVyKHJlc3VsdCk7XG5cdFx0XHR0aGlzLl9hbmFseXRpY3NTZXJ2aWNlLmNhbGxFdmVudCgncHVyY2hhc2UnLCB7IC4uLnJlc3VsdCwgY3VycmVuY3k6IHJlc3VsdC5jdXJyZW5jeSwgdmFsdWU6IHJlc3VsdC50b3RhbCB9KTtcblx0XHRcdHRoaXMuX2NhcnRTZXJ2aWNlLmNsZWFyQW5kUmVzZXRDYXJ0KCk7XG5cdFx0XHR0aGlzLl9jYW5DaGVja291dFN1YmplY3QubmV4dChmYWxzZSk7XG5cdFx0XHQvL3RoaXMuX29uUmVhZHlTdWJqZWN0Lm5leHQoZmFsc2UpO1xuXHRcdFx0dGhpcy5fbG9hZGluZ1N1YmplY3QubmV4dChmYWxzZSk7XG5cdFx0XHRcblx0XHRcdC8vIOKaoO+4jyBGSVg6IFJlc2V0IGNoZWNrb3V0IGRhdGEgYWZ0ZXIgb3JkZXIgY29tcGxldGlvblxuXHRcdFx0dGhpcy5yZXNldENoZWNrb3V0U3RhdGUoKTtcblxuXHRcdFx0cmV0dXJuICh7IG9rOiB0cnVlLCByZXF1aXJlX2xvZ2luOiBmYWxzZSwgbWVzc2FnZTogJycgfSk7XG5cdFx0fSBjYXRjaCAoZXJyb3IpIHtcblx0XHRcdHRoaXMuX2xvYWRpbmdTdWJqZWN0Lm5leHQoZmFsc2UpO1xuXHRcdFx0Y29uc29sZS5lcnJvcignRXJyb3IgaW4gY29tcGxldGU6JywgZXJyb3IpO1xuXHRcdFx0Y29uc3QgbWVzc2FnZSA9IHRoaXMubm90aWZ5Q2hlY2tvdXRFcnJvcihlcnJvcik7XG5cdFx0XHRyZXR1cm4geyBvazogZmFsc2UsIHJlcXVpcmVfbG9naW46IGZhbHNlLCBtZXNzYWdlLCBub3RpZmllZDogdHJ1ZSB9O1xuXHRcdH1cblxuXHR9XG5cblx0Ly8gdXBkYXRlQXNvY2lhdGVkRGF0YSA9IChjYXJ0OiBhbnkpID0+IHtcblx0Ly8gXHRsZXQgcmVzdWx0ID0gdGhpcy5fb3JkZXJVdGlsaXR5U2VydmljZS5nZXRQcm9tb3Rpb25zKGNhcnQpO1xuXHQvLyBcdGNvbnN0IHVzZXJQcm9maWxlOiBVc2VyID0gVXNlci5mcm9tSnNvbih0aGlzLl9hdXRoU2VydmljZS5nZXRVc2VyUHJvZmlsZUFzVXNlcigpKTtcblx0Ly8gXHRpZiAocmVzdWx0KSB7XG5cdC8vIFx0XHRpZiAodXNlclByb2ZpbGUuaXNXaG9sZXNhbGVyKCkgJiYgY2FydC50b3RhbHMudGF4ZXMgIT0gMCkge1xuXHQvLyBcdFx0XHRsZXQgdG90YWwgPSB7IC4uLnJlc3VsdFtyZXN1bHQubGVuZ3RoIC0gMV0gfTtcblx0Ly8gXHRcdFx0cmVzdWx0W3Jlc3VsdC5sZW5ndGggLSAxXSA9IHtcblx0Ly8gXHRcdFx0XHR0eXBlOiAndGF4ZXMnLFxuXHQvLyBcdFx0XHRcdG5hbWU6ICd0YXhlcycsXG5cdC8vIFx0XHRcdFx0YW1vdW50OiBjYXJ0LnRvdGFscy50YXhlc1xuXHQvLyBcdFx0XHR9XG5cdC8vIFx0XHRcdHJlc3VsdC5wdXNoKHRvdGFsKTtcblx0Ly8gXHRcdH1cblx0Ly8gXHRcdGxldCBzaGlwbWVudCA9IHJlc3VsdD8uZmluZCgocHJvbW90aW9uOiBhbnkpID0+IHByb21vdGlvbi50eXBlID09IFwic2hpcG1lbnRcIik7XG5cdC8vIFx0XHRpZiAoIXNoaXBtZW50ICYmIGNhcnQudG90YWxzLnNoaXBwaW5nICE9IDApIHtcblxuXHQvLyBcdFx0XHRpZiAocmVzdWx0Py5sZW5ndGggJiYgIXJlc3VsdC5maW5kKChpdGVtOiBhbnkpID0+IGl0ZW0udHlwZSA9PT0gXCJzaGlwbWVudFwiKSkge1xuXHQvLyBcdFx0XHRcdGxldCB0b3RhbCA9IHsgLi4ucmVzdWx0W3Jlc3VsdC5sZW5ndGggLSAxXSB9O1xuXHQvLyBcdFx0XHRcdHJlc3VsdFtyZXN1bHQubGVuZ3RoIC0gMV0gPSB7XG5cdC8vIFx0XHRcdFx0XHR0eXBlOiAnc2hpcG1lbnQnLFxuXHQvLyBcdFx0XHRcdFx0bmFtZTogJ3NoaXBtZW50Jyxcblx0Ly8gXHRcdFx0XHRcdGFtb3VudDogY2FydC50b3RhbHMuc2hpcHBpbmdcblx0Ly8gXHRcdFx0XHR9XG5cdC8vIFx0XHRcdFx0cmVzdWx0LnB1c2godG90YWwpO1xuXHQvLyBcdFx0XHR9XG5cdC8vIFx0XHR9XG5cdC8vIFx0XHR0aGlzLl9hc3NvY2lhdGVkRGF0YVN1YmplY3QubmV4dChyZXN1bHQpO1xuXHQvLyBcdH1cblx0Ly8gfVxuXHR1cGRhdGVBc29jaWF0ZWREYXRhID0gKGNhcnQ6IGFueSkgPT4ge1xuICAgICAgICBsZXQgcmVzdWx0ID0gdGhpcy5fb3JkZXJVdGlsaXR5U2VydmljZS5nZXRQcm9tb3Rpb25zKGNhcnQpO1xuXHRcdGlmIChjYXJ0LnRvdGFscy50YXhlcyAhPSAwICYmIHJlc3VsdCAmJiByZXN1bHQubGVuZ3RoID4gMCkge1xuXHRcdFx0bGV0IHRvdGFsID0geyAuLi5yZXN1bHRbcmVzdWx0Lmxlbmd0aCAtIDFdIH07XG5cdFx0XHRyZXN1bHRbcmVzdWx0Lmxlbmd0aCAtIDFdID0ge1xuXHRcdFx0XHR0eXBlOiAndGF4ZXMnLFxuXHRcdFx0XHRuYW1lOiAndGF4ZXMnLFxuXHRcdFx0XHRhbW91bnQ6IGNhcnQudG90YWxzLnRheGVzXG5cdFx0XHR9XG5cdFx0XHRyZXN1bHQucHVzaCh0b3RhbCk7XG5cdFx0fVxuICAgICAgICBsZXQgc2hpcG1lbnQgPSByZXN1bHQ/LmZpbmQocHJvbW90aW9uID0+IHByb21vdGlvbi50eXBlID09IFwic2hpcG1lbnRcIik7XG4gICAgICAgIGlmICghc2hpcG1lbnQgJiYgY2FydC50b3RhbHMuc2hpcHBpbmcgIT0gMCkge1xuXG4gICAgICAgICAgICBpZiAocmVzdWx0Py5sZW5ndGggJiYgIXJlc3VsdC5maW5kKGl0ZW0gPT4gaXRlbS50eXBlID09PSBcInNoaXBtZW50XCIpKSB7XG4gICAgICAgICAgICAgICAgbGV0IHRvdGFsID0geyAuLi5yZXN1bHRbcmVzdWx0Lmxlbmd0aCAtIDFdIH07XG4gICAgICAgICAgICAgICAgcmVzdWx0W3Jlc3VsdC5sZW5ndGggLSAxXSA9IHtcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogJ3NoaXBtZW50JyxcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogJ3NoaXBtZW50JyxcbiAgICAgICAgICAgICAgICAgICAgYW1vdW50OiBjYXJ0LnRvdGFscy5zaGlwcGluZ1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXN1bHQucHVzaCh0b3RhbCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblx0XHR0aGlzLl9hc3NvY2lhdGVkRGF0YVN1YmplY3QubmV4dChyZXN1bHQgPz8gbnVsbCk7XG5cdH1cblxuXHRzZXRDaGVja291dE5vdGVzID0gKG5vdGVzOiBzdHJpbmcpID0+IHtcblx0XHR0aGlzLmNoZWNrb3V0RGF0YS5ub3RlcyA9IG5vdGVzIHx8ICcnO1xuXHR9XG5cblx0Z2V0Q2hlY2tvdXROb3RlcyA9ICgpID0+IHRoaXMuY2hlY2tvdXREYXRhLm5vdGVzIHx8ICcnO1xuXG5cdGdldFN0ZXBEYXRhID0gKHN0ZXBfbmFtZTogU3RlcFR5cGUpID0+IHtcblx0XHRsZXQgc3RlcF9yZXN1bHQgPSB0aGlzLl9zdGF0ZVN1YmplY3QuZ2V0VmFsdWUoKS5maW5kKHN0ZXAgPT4gc3RlcC5uYW1lID09IHN0ZXBfbmFtZSk7XG5cdFx0cmV0dXJuIChzdGVwX3Jlc3VsdCAmJiBzdGVwX3Jlc3VsdC5kYXRhKTtcblx0fVxuXG5cdGNsZWFyU3RlcERhdGEoc3RlcF9uYW1lOiBTdGVwVHlwZSkge1xuXHRcdGNvbnN0IHN0ZXBzID0gdGhpcy5fc3RhdGVTdWJqZWN0LmdldFZhbHVlKCk7XG5cdFx0Y29uc3QgaW5kZXggPSBzdGVwcy5maW5kSW5kZXgoc3RlcCA9PiBzdGVwLm5hbWUgPT0gc3RlcF9uYW1lKTtcblx0XHRpZiAoaW5kZXggPT09IC0xKSByZXR1cm47XG5cdFx0Zm9yIChsZXQgaSA9IGluZGV4OyBpIDwgc3RlcHMubGVuZ3RoOyBpICs9IDEpIHtcblx0XHRcdHN0ZXBzW2ldLnJlc3RhcnQoKTtcblx0XHR9XG5cdFx0dGhpcy5fc3RhdGVTdWJqZWN0Lm5leHQoc3RlcHMpO1xuXHR9XG5cblx0Z2V0U3RlcCA9IChzdGVwX25hbWU6IFN0ZXBUeXBlKSA9PiB0aGlzLl9zdGF0ZVN1YmplY3QuZ2V0VmFsdWUoKS5maW5kKHN0ZXAgPT4gc3RlcC5uYW1lID09IHN0ZXBfbmFtZSk7XG5cblx0aXNTdGVwUmVhZHkgPSAoc3RlcF9uYW1lOiBTdGVwVHlwZSkgPT4ge1xuXHRcdGNvbnN0IHN0ZXAgPSB0aGlzLmdldFN0ZXAoc3RlcF9uYW1lKTtcblx0XHRyZXR1cm4gISFzdGVwPy5kYXRhO1xuXHR9XG5cblx0Z2V0U3RlcHNTbmFwc2hvdCA9ICgpID0+IHRoaXMuX3N0YXRlU3ViamVjdC5nZXRWYWx1ZSgpO1xuXG5cdHNldFN0ZXBEYXRhID0gKHN0ZXBfbmFtZTogU3RlcFR5cGUsIGRhdGE6IGFueSkgPT4ge1xuXHRcdGNvbnN0IHN0ZXBzID0gdGhpcy5fc3RhdGVTdWJqZWN0LmdldFZhbHVlKCk7XG5cdFx0Y29uc3QgaW5kZXggPSBzdGVwcy5maW5kSW5kZXgoc3RlcCA9PiBzdGVwLm5hbWUgPT0gc3RlcF9uYW1lKTtcblx0XHRpZiAoaW5kZXggPT09IC0xKSByZXR1cm47XG5cdFx0Zm9yIChsZXQgaSA9IGluZGV4ICsgMTsgaSA8IHN0ZXBzLmxlbmd0aDsgaSArPSAxKSB7XG5cdFx0XHRzdGVwc1tpXS5yZXN0YXJ0KCk7XG5cdFx0fVxuXHRcdHN0ZXBzW2luZGV4XS5yZWFkeShkYXRhKTtcblx0XHR0aGlzLl9zdGF0ZVN1YmplY3QubmV4dChzdGVwcyk7XG5cdFx0LyogaWYgKGRhdGEpIHtcblx0XHRcdHRoaXMuX29yZGVyU3ViamVjdC5uZXh0KGRhdGEpO1xuXHRcdFx0dGhpcy50b3RhbCA9IGRhdGEudG90YWxzLnRvdGFsO1xuXHRcdH0gKi9cblx0fVxuXG5cdC8vIOKaoO+4jyBGSVg6IFJlc2V0IGNoZWNrb3V0IHN0YXRlIGFmdGVyIG9yZGVyIGNvbXBsZXRpb25cblx0cHJpdmF0ZSByZXNldENoZWNrb3V0U3RhdGUgPSAoKSA9PiB7XG5cdFx0dGhpcy5jaGVja291dERhdGEgPSB7fTtcblx0XHR0aGlzLm9yZGVyID0gbnVsbDtcblx0XHR0aGlzLl9zdGF0ZVN1YmplY3QubmV4dChbXSk7XG5cdFx0dGhpcy5fYXNzb2NpYXRlZERhdGFTdWJqZWN0Lm5leHQobnVsbCk7XG5cdFx0dGhpcy5fbGFzdFN0ZXBTdWJqZWN0Lm5leHQoZmFsc2UpO1xuXHR9XG59XG4iXX0=