sigesp 1.1.75-20251014 → 1.1.79-20251127

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.
@@ -59,6 +59,7 @@ import { MComunidad } from './core/models/CFG/comunidad.model';
59
59
  import { MExchangeRate } from './core/models/CFG/TasaCambio.model';
60
60
  import { MCargosAdicionales } from './core/models/STB/MCargosAdicionales';
61
61
  import { MClient } from './core/models/SFV/MClienteModel';
62
+ import { MPlantillaIntegracion } from './core/models/SCG/MPlantillaIntegracion.model';
62
63
  import * as i0 from "@angular/core";
63
64
  import * as i1 from "@angular/common/http";
64
65
  import * as i2 from "@angular/material/dialog";
@@ -1426,6 +1427,24 @@ export class SigespService {
1426
1427
  userHasRights(column) {
1427
1428
  return this.http.get(`${this.URL}/dao/sss/derechos_usuario_dao.php?idComponent=${this.currentComponent.id}&column=${column}`, { headers: this.getHttpHeaders() });
1428
1429
  }
1430
+ /**
1431
+ * @description Obtener las plantillas de integracion
1432
+ * @return Observable<IResponse>
1433
+ * @param fecha: fecha a comparar
1434
+ * @param lineaEmpresa: linea empresa del documento
1435
+ * @param periodoFiscal : fecha del periodo a evaluar '1900-01-01'
1436
+ * @author Dimaly Crespo
1437
+ * @fecha 27-11-2025
1438
+ *
1439
+ */
1440
+ getPlantillaIntegracion(idEnterprise, sistema, periodoFiscal) {
1441
+ return this.http.get(`${this.URL}/dao/scg/plantilla_integracion.php?tipo=${'sistema'}&e=${idEnterprise}&sis=${sistema}&per=${periodoFiscal}`, { headers: this.getHttpHeaders() }).pipe(map((res) => {
1442
+ if (res.success) {
1443
+ res.data = res.data.map(e => new MPlantillaIntegracion(e));
1444
+ }
1445
+ return res;
1446
+ }));
1447
+ }
1429
1448
  /**
1430
1449
  * @description Retorna los headers para hacer las peticiones
1431
1450
  * @params type: Tipo MIME permitido por defecto se toma application/json
@@ -1826,4 +1845,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImpor
1826
1845
  providedIn: 'root'
1827
1846
  }]
1828
1847
  }], ctorParameters: function () { return [{ type: i1.HttpClient }, { type: i2.MatDialog }, { type: i3.ToastrService }]; } });
1829
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2lnZXNwLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9zaWdlc3Avc3JjL2xpYi9zaWdlc3Auc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFDNUQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBQ2pFLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSx5Q0FBeUMsQ0FBQztBQUMxRSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0scUNBQXFDLENBQUM7QUFDbEUsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDeEQsT0FBTyxFQUFpQyxXQUFXLEVBQUMsTUFBTSxzQkFBc0IsQ0FBQztBQUVqRixPQUFPLEVBQWMsVUFBVSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQzlDLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUNqRSxPQUFPLEVBQUUsR0FBRyxFQUFFLFVBQVUsRUFBRSxLQUFLLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUV4RCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFFckUsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0saURBQWlELENBQUM7QUFDcEYsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sMkNBQTJDLENBQUM7QUFDL0UsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sNkNBQTZDLENBQUM7QUFDbkYsT0FBTyxFQUFFLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUV4RSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSwwQ0FBMEMsQ0FBQztBQUU3RSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSwrQ0FBK0MsQ0FBQztBQUNqRixPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSwwQ0FBMEMsQ0FBQztBQUU3RSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSx5REFBeUQsQ0FBQztBQUMvRixPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSwwQ0FBMEMsQ0FBQztBQUM3RSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0scUNBQXFDLENBQUM7QUFDbkUsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sOENBQThDLENBQUM7QUFDckYsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLDBDQUEwQyxDQUFDO0FBQzFFLE9BQU8sRUFBRSw0QkFBNEIsRUFBRSxNQUFNLHlFQUF5RSxDQUFDO0FBRXZILE9BQU8sRUFBRSwyQkFBMkIsRUFBRSxNQUFNLHlFQUF5RSxDQUFDO0FBQ3RILE9BQU8sRUFBRSxRQUFRLEVBQUUsZUFBZSxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFFdEUsT0FBTyxFQUFFLGlDQUFpQyxFQUFFLGtDQUFrQyxFQUFFLE1BQU0sbURBQW1ELENBQUM7QUFDMUksT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQ2xFLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLGdEQUFnRCxDQUFDO0FBQ3pGLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLDBDQUEwQyxDQUFDO0FBQzdFLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUMvRCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFDN0QsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHVDQUF1QyxDQUFDO0FBQ3ZFLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLGFBQWEsRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLFVBQVUsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBQ2hILE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLDZDQUE2QyxDQUFDO0FBQ25GLE9BQU8sRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFFLGdCQUFnQixFQUFFLGFBQWEsRUFBRSxZQUFZLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUVsSCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSwwQ0FBMEMsQ0FBQztBQUM3RSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sMENBQTBDLENBQUM7QUFDdEUsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHVDQUF1QyxDQUFDO0FBQ3ZFLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUN4RCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsVUFBVSxFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFDbkYsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLCtDQUErQyxDQUFDO0FBQzNFLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxZQUFZLEVBQUUsTUFBTSw0Q0FBNEMsQ0FBQztBQUMvRixPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFFL0QsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHVDQUF1QyxDQUFDO0FBQ3ZFLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUMzRCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sdUNBQXVDLENBQUM7QUFDdEUsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sMkNBQTJDLENBQUM7QUFDOUUsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sMkNBQTJDLENBQUM7QUFDOUUsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sMkNBQTJDLENBQUM7QUFDOUUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sMENBQTBDLENBQUM7QUFDNUUsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHVDQUF1QyxDQUFDO0FBQ3RFLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUM5RCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSw0Q0FBNEMsQ0FBQztBQUNqRixPQUFPLElBQUksTUFBTSxhQUFhLENBQUE7QUFDOUIsT0FBTyxLQUFLLFFBQVEsTUFBTSxXQUFXLENBQUM7QUFFdEMsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHdDQUF3QyxDQUFDO0FBQ3hFLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUMvRCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFDbkUsT0FBTyxFQUFFLGtCQUFrQixFQUFDLE1BQU0sc0NBQXNDLENBQUM7QUFDekUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLGlDQUFpQyxDQUFDOzs7OztBQU14RCxNQUFNLE9BQU8sYUFBYTtJQU94Qix5REFBeUQ7SUFDekQsOEJBQThCO0lBQzlCLGtCQUFrQjtJQUNsQix1Q0FBdUM7SUFDdkMsMEJBQTBCO0lBQzFCLHlCQUF5QjtJQUN6Qix5REFBeUQ7SUFDekQsK0JBQStCO0lBQy9CLHNCQUFzQjtJQUN0QixnQ0FBZ0M7SUFDaEMsT0FBTztJQUNQLGVBQWU7SUFDZixhQUFhO0lBQ2IsbUNBQW1DO0lBQ25DLDRCQUE0QjtJQUM1QixPQUFPO0lBQ1Asc0JBQXNCO0lBQ3RCLDBhQUEwYTtJQUMxYSxJQUFJO0lBQ0osOEJBQThCO0lBQzlCLDBCQUEwQjtJQUcxQixZQUFvQixJQUFnQixFQUFVLE1BQWlCLEVBQVUsS0FBb0I7UUFBekUsU0FBSSxHQUFKLElBQUksQ0FBWTtRQUFVLFdBQU0sR0FBTixNQUFNLENBQVc7UUFBVSxVQUFLLEdBQUwsS0FBSyxDQUFlO1FBNUJ0RixrQkFBYSxHQUFhLElBQUksQ0FBQztRQUUvQixxQkFBZ0IsR0FBZSxJQUFJLENBQUM7UUFDcEMsYUFBUSxHQUFJLElBQUksQ0FBQztRQUNqQixjQUFTLEdBQUcsV0FBVyxDQUFDO0lBd0JrRSxDQUFDO0lBRWxHOzs7T0FHRztJQUNJLGtCQUFrQixDQUFDLEtBQVU7UUFDbEMsSUFBSSxLQUFLLENBQUMsR0FBRyxLQUFLLEdBQUcsSUFBSSxLQUFLLENBQUMsR0FBRyxLQUFLLEdBQUcsRUFBRTtZQUMxQyxPQUFPLElBQUksQ0FBQztTQUNiO1FBQ0QsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0lBQ0Q7O09BRUc7SUFDSSx1QkFBdUIsQ0FBQyxNQUFjLEVBQUUsYUFBcUI7UUFDbEUsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBTSxHQUFHLElBQUksQ0FBQyxHQUFHLHlDQUF5QyxFQUFFO1lBQzlFLE1BQU0sRUFBRSxNQUFNO1lBQ2QsY0FBYyxFQUFFLGFBQWE7U0FDOUIsRUFBRTtZQUNELE9BQU8sRUFBRSxJQUFJLENBQUMsY0FBYyxFQUFFO1NBQy9CLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRDs7O09BR0c7SUFDSSxzQ0FBc0MsQ0FBQyxXQUE4QztRQUMxRixPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFNLEdBQUcsSUFBSSxDQUFDLEdBQUcscURBQXFELEVBQzFGLEVBQUUsR0FBRyxXQUFXLEVBQUUsRUFBRSxFQUFFLFdBQVcsQ0FBQyxZQUFZLEVBQUUsRUFBRSxFQUFFLE9BQU8sRUFBRSxJQUFJLENBQUMsY0FBYyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQ3hGLENBQUM7SUFFRDs7T0FFRztJQUNJLG1DQUFtQztRQUN4QyxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFzQyxHQUFHLElBQUksQ0FBQyxHQUFHLHFEQUFxRCxFQUFFO1lBQzFILE9BQU8sRUFBRSxJQUFJLENBQUMsY0FBYyxFQUFFO1NBQy9CLENBQUMsQ0FBQyxJQUFJLENBQ0wsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUNSLFVBQVUsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLEVBQzdCLEdBQUcsQ0FBQyxDQUFDLEdBQVEsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxJQUFJLGlDQUFpQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FDM0YsQ0FBQztJQUNKLENBQUM7SUFFRDs7O09BR0c7SUFDSSx1Q0FBdUMsQ0FBQyxXQUErQztRQUM1RixPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFNLEdBQUcsSUFBSSxDQUFDLEdBQUcscURBQXFELEVBQzFGLEVBQUUsR0FBRyxXQUFXLEVBQUUsRUFBRSxFQUFFLFdBQVcsQ0FBQyxZQUFZLEVBQUUsRUFBRSxFQUFFLE9BQU8sRUFBRSxJQUFJLENBQUMsY0FBYyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQ3hGLENBQUM7SUFFRDs7T0FFRztJQUNJLG9DQUFvQztRQUN6QyxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUF1QyxHQUFHLElBQUksQ0FBQyxHQUFHLHNEQUFzRCxFQUFFO1lBQzVILE9BQU8sRUFBRSxJQUFJLENBQUMsY0FBYyxFQUFFO1NBQy9CLENBQUMsQ0FBQyxJQUFJLENBQ0wsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUNSLFVBQVUsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLEVBQzdCLEdBQUcsQ0FBQyxDQUFDLEdBQVEsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxJQUFJLGtDQUFrQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FDNUYsQ0FBQztJQUNKLENBQUM7SUFFRDs7O09BR0c7SUFDSSxnQ0FBZ0MsQ0FBQyxZQUFpQztRQUN2RSxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsa0NBQWtDLEVBQUUsWUFBWSxFQUNoRixFQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsY0FBYyxFQUFFLEVBQUMsQ0FBQyxDQUFDO0lBQ3BDLENBQUM7SUFFRTs7O0lBR0E7SUFDTyxpQ0FBaUMsQ0FBQyxZQUFvQztRQUM1RSxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsa0NBQWtDLEVBQUUsWUFBWSxFQUNoRixFQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsY0FBYyxFQUFFLEVBQUMsQ0FBQyxDQUFDO0lBQ3BDLENBQUM7SUFFSDs7O09BR0c7SUFDSSwrQkFBK0IsQ0FBQyxZQUF5QztRQUM5RSxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFZLEdBQUcsSUFBSSxDQUFDLEdBQUcsbUNBQW1DLEVBQUUsWUFBWSxFQUM1RixFQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsY0FBYyxFQUFFLEVBQUMsQ0FBQzthQUNoQyxJQUFJLENBQ0gsR0FBRyxDQUFDLENBQUMsR0FBUSxFQUFFLEVBQUU7WUFDZixJQUFJLEdBQUcsQ0FBQyxPQUFPLEVBQUM7Z0JBQ2QsR0FBRyxDQUFDLElBQUksR0FBRyxJQUFJLGVBQWUsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7YUFDMUM7WUFDRCxPQUFPLEdBQUcsQ0FBQztRQUNiLENBQUMsQ0FBQyxDQUNILENBQUM7SUFDSixDQUFDO0lBRU0sZ0NBQWdDLENBQUMsWUFBNEM7UUFDbEYsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBWSxHQUFHLElBQUksQ0FBQyxHQUFHLG1DQUFtQyxFQUFFLFlBQVksRUFDNUYsRUFBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLGNBQWMsRUFBRSxFQUFDLENBQUM7YUFDaEMsSUFBSSxDQUNILEdBQUcsQ0FBQyxDQUFDLEdBQVEsRUFBRSxFQUFFO1lBQ2YsSUFBSSxHQUFHLENBQUMsT0FBTyxFQUFDO2dCQUNkLEdBQUcsQ0FBQyxJQUFJLEdBQUcsSUFBSSxlQUFlLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO2FBQzFDO1lBQ0QsT0FBTyxHQUFHLENBQUM7UUFDYixDQUFDLENBQUMsQ0FDSCxDQUFDO0lBQ0osQ0FBQztJQUVEOzs7T0FHRztJQUNJLHdDQUF3QyxDQUFDLFlBQXlDLEVBQUUsS0FBYTtRQUN0RyxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFZLEdBQUcsSUFBSSxDQUFDLEdBQUcsNkNBQTZDLEVBQUUsWUFBWSxFQUN0RyxFQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsY0FBYyxFQUFFLEVBQUMsQ0FBQzthQUNoQyxJQUFJLENBQ0gsR0FBRyxDQUFDLENBQUMsR0FBUSxFQUFFLEVBQUU7WUFDZixJQUFJLEdBQUcsQ0FBQyxPQUFPLEVBQUM7Z0JBQ2QsR0FBRyxDQUFDLElBQUksR0FBRyxJQUFJLHVCQUF1QixDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUM7YUFDekQ7WUFDRCxPQUFPLEdBQUcsQ0FBQztRQUNiLENBQUMsQ0FBQyxDQUNILENBQUM7SUFDSixDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSSxvQkFBb0IsQ0FBQyxPQUFZLE1BQU0sRUFBQyxZQUFtQixFQUFDLGFBQW9CLEVBQUUsT0FBYyxFQUFDLEtBQVksRUFBQyxVQUFlLEVBQUU7UUFDcEksT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBbUIsR0FBRyxJQUFJLENBQUMsR0FBRyx5Q0FBeUMsSUFBSSxNQUFNLFlBQVksWUFBWSxhQUFhLE9BQU8sT0FBTyxVQUFVLEtBQUssUUFBUSxPQUFPLEVBQUUsRUFDeEwsRUFBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLGNBQWMsRUFBRSxFQUFDLENBQUM7YUFDaEMsSUFBSSxDQUNILEdBQUcsQ0FBQyxDQUFDLEdBQU8sRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxJQUFJLGNBQWMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQ3ZFLENBQUE7SUFDSCxDQUFDO0lBR0Q7Ozs7OztPQU1HO0lBQ0ksb0NBQW9DLENBQUMsSUFBVyxFQUFFLGFBQWdDO1FBQ3ZGLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLDRCQUE0QixFQUFFO1lBQzlELElBQUksRUFBRTtnQkFDSixJQUFJO2dCQUNKLGFBQWE7YUFDZDtZQUNELEtBQUssRUFBRSxRQUFRO1lBQ2YsU0FBUyxFQUFFLE1BQU07U0FDbEIsQ0FBQyxDQUFDO1FBQ0gsT0FBTyxRQUFRLENBQUMsV0FBVyxFQUFFLENBQUMsU0FBUyxFQUFFLENBQUM7SUFDNUMsQ0FBQztJQUdGOzs7Ozs7O09BT0c7SUFDSywwQkFBMEIsQ0FBQyxPQUFZLFVBQVUsRUFBQyxZQUFtQixFQUFFLGFBQW9CLEVBQUMsU0FBYyxFQUFFO1FBQ2pILE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQ2xCLEdBQUcsSUFBSSxDQUFDLEdBQUcsbURBQW1ELElBQUksTUFBTSxZQUFZLFFBQVEsYUFBYSxRQUFRLE1BQU0sRUFBRSxFQUMzSCxFQUFFLE9BQU8sRUFBRSxJQUFJLENBQUMsY0FBYyxFQUFFLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FDdEMsR0FBRyxDQUFDLENBQUMsSUFBUyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLElBQUksWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FDNUQsQ0FBQztJQUNKLENBQUM7SUFFRDs7OztPQUlHO0lBQ0ksbUJBQW1CLENBQUMsWUFBbUIsRUFBRSxhQUFvQjtRQUVsRSxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFvQixHQUFHLElBQUksQ0FBQyxHQUFHLG1EQUFtRCxZQUFZLFlBQVksYUFBYSxFQUFFLEVBQzdJLEVBQUUsT0FBTyxFQUFFLElBQUksQ0FBQyxjQUFjLEVBQUUsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUN0QyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQ1IsVUFBVSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsRUFDN0IsR0FBRyxDQUFDLENBQUMsSUFBUyxFQUFFLEVBQUUsQ0FBQyxJQUFJLGlCQUFpQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUN4RCxDQUFDO0lBQ0osQ0FBQztJQUNEOzs7O09BSUc7SUFDSSxtQkFBbUI7UUFFeEIsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBb0IsR0FBRyxJQUFJLENBQUMsR0FBRyxtQ0FBbUMsRUFDdEYsRUFBRSxPQUFPLEVBQUUsSUFBSSxDQUFDLGNBQWMsRUFBRSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQ3RDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFDUixVQUFVLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxFQUM3QixHQUFHLENBQUMsQ0FBQyxJQUFlLEVBQUUsRUFBRTtZQUN0QixJQUFJLElBQUksQ0FBQyxPQUFPLEVBQUU7Z0JBQ2hCLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUE7YUFDN0M7WUFDRCxPQUFPLElBQUksQ0FBQTtRQUNiLENBQUMsQ0FBQyxDQUNILENBQUM7SUFDSixDQUFDO0lBRUQ7Ozs7T0FJRztJQUNLLG1CQUFtQixDQUFDLFlBQW1CO1FBRTdDLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQVksR0FBRyxJQUFJLENBQUMsR0FBRyx1Q0FBdUMsZUFBZSxNQUFNLFlBQVksRUFBRSxFQUNySCxFQUFFLE9BQU8sRUFBRSxJQUFJLENBQUMsY0FBYyxFQUFFLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FDdEMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUNSLFVBQVUsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLEVBQzdCLEdBQUcsQ0FBQyxDQUFDLElBQWUsRUFBRSxFQUFFO1lBQ3RCLElBQUksSUFBSSxDQUFDLE9BQU8sRUFBRTtnQkFDaEIsSUFBRyxJQUFJLENBQUMsSUFBSSxJQUFHLElBQUksRUFBQztvQkFDbEIsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLElBQUksaUJBQWlCLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztpQkFDMUQ7YUFDRjtZQUNELE9BQU8sSUFBSSxDQUFBO1FBQ2IsQ0FBQyxDQUFDLENBQ0gsQ0FBQztJQUNKLENBQUM7SUFHTSxZQUFZLENBQUMsSUFBVTtRQUM1QixPQUFPLEdBQUcsSUFBSSxDQUFDLFdBQVcsRUFBRSxJQUMxQixJQUFJLENBQUMsUUFBUSxFQUFFLEdBQUcsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsUUFBUSxFQUFFLEdBQUcsQ0FBQyxFQUMzRSxJQUNFLElBQUksQ0FBQyxPQUFPLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsT0FBTyxFQUFFLEVBQzVELEVBQUUsQ0FBQTtJQUNKLENBQUM7SUFFRDs7OztPQUlHO0lBQ0ksWUFBWSxDQUFDLGVBQW9CLENBQUM7UUFFdkMsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBWSxHQUFHLElBQUksQ0FBQyxHQUFHLHVDQUF1QyxZQUFZLEVBQUUsRUFDaEcsRUFBRSxPQUFPLEVBQUUsSUFBSSxDQUFDLGNBQWMsRUFBRSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQ3RDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFDUixVQUFVLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxFQUM3QixHQUFHLENBQUMsQ0FBQyxJQUFlLEVBQUUsRUFBRTtZQUN0QixJQUFJLElBQUksQ0FBQyxPQUFPLEVBQUU7Z0JBQ2hCLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxVQUFVLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFBO2FBQ3RDO1lBQ0QsT0FBTyxJQUFJLENBQUE7UUFDYixDQUFDLENBQUMsQ0FDSCxDQUFDO0lBQ0osQ0FBQztJQUVNLGFBQWEsQ0FBQyxhQUFxQixJQUFJLEVBQUUsTUFBZTtRQUU3RCxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUNsQixHQUFHLElBQUksQ0FBQyxHQUFHLGdDQUFnQyxVQUFVLENBQUMsQ0FBQyxDQUFDLFVBQVUsVUFBVSxHQUMxRSxNQUFNLENBQUMsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsRUFDNUIsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFDVCxFQUFFLE9BQU8sRUFBRSxJQUFJLENBQUMsY0FBYyxFQUFFLEVBQUUsQ0FDbkMsQ0FBQyxJQUFJLENBRUosR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFO1lBQ1IsSUFBSSxHQUFHLENBQUMsT0FBTyxFQUFFO2dCQUNmLEdBQUcsQ0FBQyxJQUFJLEdBQUcsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO2FBQ2pEO1lBQ0QsT0FBTyxHQUFHLENBQUM7UUFDYixDQUFDLENBQUMsQ0FDSCxDQUFBO0lBRUgsQ0FBQztJQUVEOzs7O09BSUc7SUFDSSx1QkFBdUIsQ0FBQyxZQUFtQixFQUFDLGFBQW9CO1FBQ3JFLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQTBCLEdBQUcsSUFBSSxDQUFDLEdBQUcsNENBQTRDLFlBQVksUUFBUSxhQUFhLEVBQUUsRUFDeEksRUFBRSxPQUFPLEVBQUUsSUFBSSxDQUFDLGNBQWMsRUFBRSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQ3RDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFDUixVQUFVLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxFQUM3QixHQUFHLENBQUMsQ0FBQyxJQUFTLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsSUFBSSxxQkFBcUIsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQ2pGLENBQUM7SUFDSixDQUFDO0lBRUQ7Ozs7T0FJRztJQUNJLGNBQWMsQ0FBQyxJQUFXLEVBQUMsWUFBbUIsRUFBQyxhQUFvQjtRQUN4RSxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFZLEdBQUcsSUFBSSxDQUFDLEdBQUcsc0NBQXNDLElBQUksTUFBTSxZQUFZLFlBQVksYUFBYSxFQUFFLEVBQ2xJLEVBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxjQUFjLEVBQUUsRUFBQyxDQUMvQixDQUFDLElBQUksQ0FDSixHQUFHLENBQUMsQ0FBQyxHQUFjLEVBQUUsRUFBRTtZQUNyQixJQUFJLEdBQUcsQ0FBQyxPQUFPLEVBQUU7Z0JBQ2YsR0FBRyxDQUFDLElBQUksR0FBRyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLElBQUksWUFBWSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUE7YUFDOUQ7WUFDRCxPQUFPLEdBQUcsQ0FBQTtRQUNaLENBQUMsQ0FBQyxDQUNILENBQUM7SUFDSixDQUFDO0lBRU0sZ0NBQWdDLENBQUMsSUFBVyxFQUFDLFlBQW1CLEVBQUMsYUFBb0IsRUFBQyxzQkFBNkI7UUFDeEgsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBWSxHQUFHLElBQUksQ0FBQyxHQUFHLCtDQUErQyxJQUFJLE1BQU0sWUFBWSxZQUFZLGFBQWEsT0FBTyxzQkFBc0IsRUFBRSxFQUN4SyxFQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsY0FBYyxFQUFFLEVBQUMsQ0FDL0IsQ0FBQyxJQUFJLENBQ0osR0FBRyxDQUFDLENBQUMsR0FBYyxFQUFFLEVBQUU7WUFDckIsSUFBSSxHQUFHLENBQUMsT0FBTyxFQUFFO2dCQUNmLEdBQUcsQ0FBQyxJQUFJLEdBQUcsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxJQUFJLFlBQVksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFBO2FBQzlEO1lBQ0QsT0FBTyxHQUFHLENBQUE7UUFDWixDQUFDLENBQUMsQ0FDSCxDQUFDO0lBQ0osQ0FBQztJQUVNLGdDQUFnQyxDQUFDLElBQVcsRUFBQyxZQUFtQixFQUFDLGFBQW9CLEVBQUMsc0JBQTZCO1FBQ3hILE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQVksR0FBRyxJQUFJLENBQUMsR0FBRywrQ0FBK0MsSUFBSSxNQUFNLFlBQVksWUFBWSxhQUFhLE9BQU8sc0JBQXNCLEVBQUUsRUFDeEssRUFBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLGNBQWMsRUFBRSxFQUFDLENBQy9CLENBQUMsSUFBSSxDQUNKLEdBQUcsQ0FBQyxDQUFDLEdBQWMsRUFBRSxFQUFFO1lBQ3JCLElBQUksR0FBRyxDQUFDLE9BQU8sRUFBRTtnQkFDZixHQUFHLENBQUMsSUFBSSxHQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsSUFBSSxZQUFZLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQTthQUM5RDtZQUNELE9BQU8sR0FBRyxDQUFBO1FBQ1osQ0FBQyxDQUFDLENBQ0gsQ0FBQztJQUNKLENBQUM7SUFNRDs7Ozs7T0FLRztJQUNJLHFCQUFxQjtJQUMxQixzQkFBc0I7SUFDdEIsa0JBQWtCO0lBQ2xCLHFCQUFxQjtJQUNyQix5QkFBeUI7SUFDekIsT0FBaUIsRUFDakIsS0FBYSxFQUNiLFVBQWlCLEVBQ2pCLGNBQXdCLElBQUksRUFDNUIsUUFBZ0IsUUFBUSxFQUN4QixVQUlJO1FBQ0YsWUFBWSxFQUFFLEtBQUs7UUFDbkIsV0FBVyxFQUFFLEtBQUs7UUFDcEIsOEJBQThCO0tBQzdCO1FBRUQsSUFBSSxTQUFTLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsb0JBQW9CLEVBQUU7WUFDckQsSUFBSSxFQUFFO2dCQUNKLEtBQUssRUFBRSxLQUFLO2dCQUNaLE9BQU8sRUFBRSxPQUFPO2dCQUNoQixVQUFVLEVBQUUsVUFBVTtnQkFDdEIsV0FBVztnQkFDWixtREFBbUQ7YUFDbkQ7WUFDRCxLQUFLLEVBQUUsS0FBSztZQUNaLFNBQVMsRUFBRSxNQUFNO1lBQ2pCLFdBQVcsRUFBRSxPQUFPLENBQUMsV0FBVztZQUNoQyxZQUFZLEVBQUUsT0FBTyxDQUFDLFlBQVk7U0FDbkMsQ0FBQyxDQUFDO1FBRUgsT0FBTyxTQUFTLENBQUMsV0FBVyxFQUFFLENBQUMsU0FBUyxFQUFFLENBQUM7SUFDN0MsQ0FBQztJQUlEOzs7OztPQUtHO0lBQ0ksbUJBQW1CLENBQUMsWUFBbUIsRUFBQyxhQUFvQjtRQUNqRSxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFzQixHQUFHLElBQUksQ0FBQyxHQUFHLG9EQUFvRCxTQUFTLE1BQU0sWUFBWSxZQUFZLGFBQWEsRUFBRSxFQUMvSixFQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsY0FBYyxFQUFFLEVBQUMsQ0FDL0IsQ0FBQyxJQUFJLENBQ0osS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUNSLFVBQVUsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLEVBQzdCLEdBQUcsQ0FBQyxDQUFDLElBQVMsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxJQUFJLGlCQUFpQixDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FDN0UsQ0FBQTtJQUNILENBQUM7SUFFRDs7Ozs7O09BTUc7SUFDSSxpQkFBaUIsQ0FBQyxLQUFhLEVBQUUsT0FBZ0I7UUFDdEQsSUFBSSxTQUFTLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLEVBQUU7WUFDakQsSUFBSSxFQUFFO2dCQUNKLEtBQUssRUFBRSxLQUFLO2dCQUNaLE9BQU8sRUFBRSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLElBQUk7YUFDcEM7WUFDRCxLQUFLLEVBQUUsUUFBUTtZQUNmLFNBQVMsRUFBRSxNQUFNO1NBQ2xCLENBQUMsQ0FBQztRQUVILE9BQU8sU0FBUyxDQUFDLFdBQVcsRUFBRSxDQUFDLFNBQVMsRUFBRSxDQUFDO0lBQzdDLENBQUM7SUFFRDs7Ozs7O09BTUc7SUFDSSxpQkFBaUIsQ0FBQyxTQUEyQixFQUFFLElBQVk7UUFDaEUsSUFBSSxDQUFDLGtCQUFrQixDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUMsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUMsQ0FBQyxLQUFLLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQztJQUNsSCxDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ0ksa0JBQWtCLENBQUMsU0FBMkIsRUFBRSxJQUFZO1FBQ2pFLE9BQU8sU0FBUyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUM3QixDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ0ksV0FBVyxDQUFDLEtBQVc7UUFDMUIsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsSUFBSSxLQUFLLENBQUMsT0FBTyxJQUFJLEVBQUUsRUFBRTtZQUM3QyxPQUFPLElBQUksQ0FBQztTQUNiO1FBQ0QsT0FBTyxLQUFLLENBQUM7SUFDakIsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0ksV0FBVyxDQUFDLEtBQVc7UUFDNUIsc0JBQXNCO1FBQ3RCLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLElBQUksS0FBSyxDQUFDLE9BQU8sSUFBSSxFQUFFLEVBQUU7WUFDN0MsT0FBTyxJQUFJLENBQUM7U0FDYjtRQUNELE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQztJQUVBOzs7OztNQUtFO0lBQ0ksWUFBWSxDQUFDLEtBQVc7UUFDN0IsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsSUFBSyxLQUFLLENBQUMsT0FBTyxJQUFJLENBQUMsSUFBSSxLQUFLLENBQUMsT0FBTyxJQUFJLEVBQUUsRUFBRTtZQUNwRSxPQUFPLElBQUksQ0FBQztTQUNiO1FBQ0QsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0lBRUE7Ozs7O01BS0U7SUFDSyxpQkFBaUIsQ0FBQyxLQUFXO1FBQ25DLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLElBQUksS0FBSyxDQUFDLE9BQU8sSUFBSSxDQUFDLElBQUssS0FBSyxDQUFDLE9BQU8sSUFBSSxFQUFFLElBQUssS0FBSyxDQUFDLE9BQU8sSUFBSSxFQUFFO2VBQ3pGLEtBQUssQ0FBQyxPQUFPLElBQUksRUFBRSxJQUFJLEtBQUssQ0FBQyxPQUFPLElBQUksRUFBRSxJQUFJLEtBQUssQ0FBQyxPQUFPLElBQUksR0FBRyxFQUFFO1lBQ3JFLE9BQU8sSUFBSSxDQUFDO1NBQ2I7UUFDRCxPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7SUFFQTs7Ozs7O01BTUU7SUFDTSxRQUFRLENBQUMsS0FBVztRQUN6QixJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsSUFBRSxHQUFHLElBQUksS0FBSyxDQUFDLEdBQUcsSUFBRSxHQUFHLENBQUMsSUFBSyxDQUFDLEtBQUssQ0FBQyxHQUFHLElBQUUsR0FBRyxJQUFJLEtBQUssQ0FBQyxHQUFHLElBQUUsR0FBRyxDQUFDLElBQUssS0FBSyxDQUFDLEdBQUcsSUFBRSxHQUFHLElBQUssS0FBSyxDQUFDLEdBQUcsSUFBRSxHQUFHO2VBQzlHLENBQUMsS0FBSyxDQUFDLEdBQUcsSUFBRSxHQUFHLElBQUksS0FBSyxDQUFDLEdBQUcsSUFBRSxHQUFHLENBQUMsSUFBSSxLQUFLLENBQUMsR0FBRyxJQUFFLEdBQUcsSUFBSyxLQUFLLENBQUMsR0FBRyxJQUFFLEdBQUcsSUFBSyxLQUFLLENBQUMsR0FBRyxJQUFFLEdBQUcsSUFBSyxLQUFLLENBQUMsT0FBTyxJQUFFLEVBQUU7ZUFDL0csS0FBSyxDQUFDLEdBQUcsSUFBRSxHQUFHLElBQUssS0FBSyxDQUFDLEdBQUcsSUFBRSxHQUFHLElBQUksS0FBSyxDQUFDLE9BQU8sSUFBSSxDQUFDLElBQUssS0FBSyxDQUFDLE9BQU8sSUFBSSxFQUFFLElBQUssS0FBSyxDQUFDLE9BQU8sSUFBSSxFQUFFLEVBQUc7WUFDOUcsT0FBTyxJQUFJLENBQUM7U0FDYjtRQUNELE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQztJQUNIOzs7Ozs7T0FNRztJQUNNLFFBQVEsQ0FBQyxLQUFXO1FBQ3pCLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxJQUFFLEdBQUcsSUFBSyxLQUFLLENBQUMsR0FBRyxJQUFFLEdBQUcsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsSUFBRSxHQUFHLElBQUksS0FBSyxDQUFDLEdBQUcsSUFBRSxHQUFHLENBQUMsSUFBSSxLQUFLLENBQUMsR0FBRyxJQUFFLEdBQUcsSUFBSSxLQUFLLENBQUMsR0FBRyxJQUFFLEdBQUc7ZUFDNUcsQ0FBQyxLQUFLLENBQUMsR0FBRyxJQUFFLEdBQUcsSUFBSSxLQUFLLENBQUMsR0FBRyxJQUFFLEdBQUcsQ0FBQyxJQUFJLEtBQUssQ0FBQyxHQUFHLElBQUUsR0FBRyxJQUFJLEtBQUssQ0FBQyxHQUFHLElBQUUsR0FBRyxJQUFJLEtBQUssQ0FBQyxHQUFHLElBQUUsR0FBRyxJQUFJLEtBQUssQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUM7ZUFDN0csS0FBSyxDQUFDLEdBQUcsSUFBRSxHQUFHLElBQU0sS0FBSyxDQUFDLEdBQUcsSUFBRSxHQUFHLElBQUksS0FBSyxDQUFDLEdBQUcsSUFBRSxHQUFHLElBQUssS0FBSyxDQUFDLEdBQUcsSUFBRSxHQUFHLElBQUcsS0FBSyxDQUFDLEdBQUcsSUFBRSxHQUFHLElBQUksS0FBSyxDQUFDLEdBQUcsSUFBRSxHQUFHO2VBQzFHLEtBQUssQ0FBQyxHQUFHLElBQUUsR0FBRyxJQUFNLEtBQUssQ0FBQyxHQUFHLElBQUUsR0FBRyxJQUFJLEtBQUssQ0FBQyxHQUFHLElBQUUsR0FBRyxJQUFJLEtBQUssQ0FBQyxHQUFHLElBQUUsR0FBRyxJQUFJLEtBQUssQ0FBQyxHQUFHLElBQUUsR0FBRyxJQUFJLEtBQUssQ0FBQyxHQUFHLElBQUUsR0FBRztlQUMxRyxLQUFLLENBQUMsR0FBRyxJQUFFLEdBQUcsSUFBSSxLQUFLLENBQUMsR0FBRyxJQUFFLEdBQUcsSUFBRyxLQUFLLENBQUMsT0FBTyxJQUFFLElBQUksSUFBSyxLQUFLLENBQUMsT0FBTyxJQUFFLEdBQUcsSUFBRyxLQUFLLENBQUMsT0FBTyxJQUFFLEdBQUc7ZUFDbEcsS0FBSyxDQUFDLE9BQU8sSUFBSSxDQUFDLElBQUssS0FBSyxDQUFD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QUNwRixDQUFDOzswR0FwekVZLGFBQWE7OEdBQWIsYUFBYSxjQUZaLE1BQU07MkZBRVAsYUFBYTtrQkFIekIsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBNUHJlZmlqbyB9IGZyb20gJy4vY29yZS9tb2RlbHMvQ0ZHL01QcmVmaWpvLm1vZGVsJztcclxuaW1wb3J0IHsgTUVudGVycHJpc2UgfSBmcm9tICcuL2NvcmUvbW9kZWxzL0NGRy9FbnRlcnByaXNlLm1vZGVsJztcclxuaW1wb3J0IHsgTVBlcnNvbmFsTm9taW5hIH0gZnJvbSAnLi9jb3JlL21vZGVscy9TTk8vTVBlcnNvbmFsTm9taW5hLm1vZGVsJztcclxuaW1wb3J0IHsgTUhvamFUaWVtcG8gfSBmcm9tICcuL2NvcmUvbW9kZWxzL1NOTy9NSG9qYVRpZW1wby5tb2RlbCc7XHJcbmltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgTVVzdWFyaW8gfSBmcm9tICcuL2NvcmUvbW9kZWxzL1NTUy91c2VyLm1vZGVsJztcclxuaW1wb3J0IHsgSHR0cENsaWVudCwgSHR0cEVycm9yUmVzcG9uc2UsIEh0dHBIZWFkZXJzfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XHJcbmltcG9ydCB7IElSZXF1ZXN0IH0gZnJvbSAnLi9jb3JlL2ludGVyZmFjZXMvUmVxdWVzdCc7XHJcbmltcG9ydCB7IE9ic2VydmFibGUsIHRocm93RXJyb3IgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgTVByb3ZlZWRvciB9IGZyb20gJy4vY29yZS9tb2RlbHMvUlBDL3Byb3ZlZWRvcmVzLm1vZGVsJztcclxuaW1wb3J0IHsgbWFwLCBjYXRjaEVycm9yLCByZXRyeSB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcclxuaW1wb3J0IHsgTWF0RGlhbG9nIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZGlhbG9nJztcclxuaW1wb3J0IHsgTVVzdWFyaW9QcmVmaWpvIH0gZnJvbSAnLi9jb3JlL21vZGVscy9DRkcvdXNlclByZWZpeC5tb2RlbCc7XHJcbmltcG9ydCB7IElDYXRhbG9nbywgZmlsdGVyRGF0YSB9IGZyb20gJy4vY29yZS9pbnRlcmZhY2VzL0NhdGFsb2dvJztcclxuaW1wb3J0IHsgQ2F0YWxvZ29Db21wb25lbnQgfSBmcm9tICcuL3NoYXJlZC9jb21wb25lbnRzL2NhdGFsb2dvL2NhdGFsb2dvLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IE1DdWVudGFQcmVzdXB1ZXN0byB9IGZyb20gJy4vY29yZS9tb2RlbHMvU1BHL2N1ZW50YVByZXN1cHVlc3RvLm1vZGVsJztcclxuaW1wb3J0IHsgTUN1ZW50YUluc3RpdHVjaW9uYWwgfSBmcm9tICcuL2NvcmUvbW9kZWxzL1NDRy9jdWVudGFJbnN0aXR1Y2lvbmFsLm1vZGVsJztcclxuaW1wb3J0IHsgTU1vbmVkYSwgTU1vbmVkYUNvbmZpZyB9IGZyb20gJy4vY29yZS9tb2RlbHMvQ0ZHL21vbmVkYS5tb2RlbCc7XHJcbmltcG9ydCB7IFRvYXN0clNlcnZpY2UgfSBmcm9tICduZ3gtdG9hc3RyJztcclxuaW1wb3J0IHsgTVVuaWRhZFRyaWJ1dGFyaWEgfSBmcm9tICcuL2NvcmUvbW9kZWxzL1NUQi91bmlkYWRUcmlidXRhcmlhLm1vZGVsJztcclxuaW1wb3J0IHsgQWJzdHJhY3RDb250cm9sLCBVbnR5cGVkRm9ybUdyb3VwIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQgeyBDb25maXJtQ29tcG9uZW50IH0gZnJvbSAnLi9zaGFyZWQvY29tcG9uZW50cy9jb25maXJtL2NvbmZpcm0uY29tcG9uZW50JztcclxuaW1wb3J0IHsgTUNvbmZpZ3VyYWNpb25TQ0cgfSBmcm9tICcuL2NvcmUvbW9kZWxzL1NDRy9jb25maWd1cmFjaW9uU0NHLm1vZGVsJztcclxuaW1wb3J0IHsgSUNvbmV4aW9uIH0gZnJvbSAnLi9jb3JlL2ludGVyZmFjZXMvVXN1YXJpbyc7XHJcbmltcG9ydCB7IFRhYmxlU2VsZWN0Q29tcG9uZW50IH0gZnJvbSAnLi9zaGFyZWQvY29tcG9uZW50cy90YWJsZS1zZWxlY3QvdGFibGUtc2VsZWN0LmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IE1Db25maWd1cmF0aW9uU1BHIH0gZnJvbSAnLi9jb3JlL21vZGVscy9TUEcvY29uZmlndXJhdGlvblNQRy5tb2RlbCc7XHJcbmltcG9ydCB7IE1DZW50cm9Db3N0byB9IGZyb20gJy4vY29yZS9tb2RlbHMvU0NHL2NlbnRyb0Nvc3RvLm1vZGVsJztcclxuaW1wb3J0IHsgTUZ1ZW50ZUZpbmFuY2lhbWllbnRvIH0gZnJvbSAnLi9jb3JlL21vZGVscy9TUEcvZnVlbnRlRmluYW5jaWFtaWVudG8ubW9kZWwnO1xyXG5pbXBvcnQgeyBNQ3VlbnRhRWdyZXNvcyB9IGZyb20gJy4vY29yZS9tb2RlbHMvU1BHL2V4cGVuc2l2ZUFjY291bnQubW9kZWwnO1xyXG5pbXBvcnQgeyBDYXRhbG9nb0VzdHJ1Y3R1cmFzQ29tcG9uZW50IH0gZnJvbSAnLi9zaGFyZWQvY29tcG9uZW50cy9jYXRhbG9nby1lc3RydWN0dXJhcy9jYXRhbG9nby1lc3RydWN0dXJhcy5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBJVXBkYXRlRGlzdHJpYnV0aW9uLCBJVXBkYXRlRGlzdHJpYnV0aW9uMiwgSVVwZGF0ZURpc3RyaWJ1dGlvbkluZ3Jlc29zLCBJVXBkYXRlRGlzdHJpYnV0aW9uSW5ncmVzb3MyIH0gZnJvbSAnLi9jb3JlL2ludGVyZmFjZXMvQ3VlbnRhRWdyZXNvcyc7XHJcbmltcG9ydCB7IENhdGFsb2dvRG9ibGVJbnB1dENvbXBvbmVudCB9IGZyb20gJy4vc2hhcmVkL2NvbXBvbmVudHMvY2F0YWxvZ28tZG9ibGUtaW5wdXQvY2F0YWxvZ28tZG9ibGUtaW5wdXQuY29tcG9uZW50JztcclxuaW1wb3J0IHsgTVNpc3RlbWEsIE1Vc3VhcmlvU2lzdGVtYSB9IGZyb20gJy4vY29yZS9tb2RlbHMvU1NTL3Npc3RlbWEnO1xyXG5pbXBvcnQgeyBJQ29tcHJvYmFudGVQcmVzdXB1ZXN0YXJpb0VncmVzb3MsIElDb21wcm9iYW50ZVByZXN1cHVlc3RhcmlvSW5ncmVzb3MgfSBmcm9tICcuL2NvcmUvaW50ZXJmYWNlcy9Db21wcm9iYW50ZVByZXN1cHVlc3RhcmlvJztcclxuaW1wb3J0IHsgTUNvbXByb2JhbnRlUHJlc3VwdWVzdGFyaW9FZ3Jlc29zLCBNQ29tcHJvYmFudGVQcmVzdXB1ZXN0YXJpb0luZ3Jlc29zIH0gZnJvbSAnLi9jb3JlL21vZGVscy9TUEcvY29tcHJvYmFudGVQcmVzdXB1ZXN0YXJpby5tb2RlbCc7XHJcbmltcG9ydCB7IE1DdWVudGFJbmdyZXNvcyB9IGZyb20gJy4vY29yZS9tb2RlbHMvU0NHL0luY29tZUFjY291bnQnO1xyXG5pbXBvcnQgeyBNSW5jb21lU3RydWN0dXJlQWNjb3VudCB9IGZyb20gJy4vY29yZS9tb2RlbHMvU1BHL2luY29tZVN0cnVjdHVyZUFjY291bnQubW9kZWwnO1xyXG5pbXBvcnQgeyBNT3JnYW5pemF0aW9uVHlwZSB9IGZyb20gJy4vY29yZS9tb2RlbHMvU1BHL29yZ2FuaXphdGlvblR5cGUubW9kZWwnO1xyXG5pbXBvcnQgeyBNU3BlY2lhbHR5IH0gZnJvbSAnLi9jb3JlL21vZGVscy9SUEMvc3BlY2lhbHR5Lm1vZGVsJztcclxuaW1wb3J0IHsgTURvY3VtZW50IH0gZnJvbSAnLi9jb3JlL21vZGVscy9SUEMvZG9jdW1lbnQubW9kZWwnO1xyXG5pbXBvcnQgeyBNQ2xhc2lmaWNhdGlvbiB9IGZyb20gJy4vY29yZS9tb2RlbHMvUlBDL2NsYXNpZmljYXRpb24ubW9kZWwnO1xyXG5pbXBvcnQgeyBNQ291bnRyeSwgTVN0YXRlLCBNTXVuaWNpcGFsaXR5LCBNUGFyaXNoLCBNQ2l0eSwgTUNvbW11bml0eSB9IGZyb20gJy4vY29yZS9tb2RlbHMvQ0ZHL2xvY2F0aW9ucy5tb2RlbCc7XHJcbmltcG9ydCB7IE1Qcm92aWRlckJlbmVmaWNpYXJ5IH0gZnJvbSAnLi9jb3JlL21vZGVscy9SUEMvcHJvdmlkZXJCZW5lZmljaWFyeS5tb2RlbCc7XHJcbmltcG9ydCB7IE1TaWdlY29mQmFuaywgTUJhbmssIE1CYW5rQWNjb3VudFR5cGUsIE1BZ2VuY2lhQmFuY28sIE1DdWVudGFCYW5jbyB9IGZyb20gJy4vY29yZS9tb2RlbHMvU0NCL2JhbmsubW9kZWwnO1xyXG5pbXBvcnQgeyBJUmVzcG9uc2UgfSBmcm9tICcuL2NvcmUvaW50ZXJmYWNlcy9SZXNwb25zZSc7XHJcbmltcG9ydCB7IE1Db25maWd1cmF0aW9uUlBDIH0gZnJvbSAnLi9jb3JlL21vZGVscy9SUEMvY29uZmlndXJhY2lvblJQQy5tb2RlbCc7XHJcbmltcG9ydCB7IE1Db25maWdTT0MgfSBmcm9tICcuL2NvcmUvbW9kZWxzL1NPQy9jb25maWd1cmFjaW9uU09DLm1vZGVsJztcclxuaW1wb3J0IHsgTURlZHVjdGlvblR5cGUgfSBmcm9tICcuL2NvcmUvbW9kZWxzL1NUQi9kZWR1Y3Rpb25UeXBlLm1vZGVsJztcclxuaW1wb3J0IHsgTUNhcmdvIH0gZnJvbSAnLi9jb3JlL21vZGVscy9TT0MvY2hhcmdlLm1vZGVsJztcclxuaW1wb3J0IHsgTUNvbmNlcHRvUmV0ZW5jaW9uLCBNRGVkdWN0aW9uIH0gZnJvbSAnLi9jb3JlL21vZGVscy9TVEIvZGVkdWN0aW9uLm1vZGVsJztcclxuaW1wb3J0IHsgTUNvbmZpZ1NTUyB9IGZyb20gJy4vY29yZS9tb2RlbHMvU1NTL3NlY3VyaXR5Q29uZmlndXJhdGlvbi5tb2RlbCc7XHJcbmltcG9ydCB7IE1BZG1pbmlzdHJhdGl2ZVVuaXQsIE1Fc3RydWN0dXJhcyB9IGZyb20gJy4vY29yZS9tb2RlbHMvU1BHL2FkbWluaXN0cmF0aXZlVW5pdC5tb2RlbCc7XHJcbmltcG9ydCB7IE1Db21wb25lbnQgfSBmcm9tICcuL2NvcmUvbW9kZWxzL1NTUy9jb21wb25lbnQubW9kZWwnO1xyXG5pbXBvcnQgeyBNTG9nIH0gZnJvbSAnLi9jb3JlL21vZGVscy9TU1MvbG9nLm1vZGVsJztcclxuaW1wb3J0IHsgTVNlcnZpY2VDaGFyZ2UgfSBmcm9tICcuL2NvcmUvbW9kZWxzL1NPQy9zZXJ2aWNlQ2hhcmdlLm1vZGVsJztcclxuaW1wb3J0IHsgTUVtcHJlc2EgfSBmcm9tICcuL2NvcmUvbW9kZWxzL0NGRy9FbXByZXNhLm1vZGVsJztcclxuaW1wb3J0IHsgTUNvbmNlcHRvc0NYUCB9IGZyb20gJy4vY29yZS9tb2RlbHMvQ1hQL01Db25jZXB0b3NDWFAubW9kZWwnO1xyXG5pbXBvcnQgeyBNVGlwb0RvY3VtZW50b0NYUCB9IGZyb20gJy4vY29yZS9tb2RlbHMvQ1hQL01UaXBvRG9jdW1lbnRvQ1hQLm1vZGVsJztcclxuaW1wb3J0IHsgTUNvbmZpZ3VyYWNpb25TTk8gfSBmcm9tICcuL2NvcmUvbW9kZWxzL1NOTy9NQ29uZmlndXJhY2lvblNOTy5tb2RlbCc7XHJcbmltcG9ydCB7IE1EZWZpbmljaW9uTm9taW5hIH0gZnJvbSAnLi9jb3JlL21vZGVscy9TTk8vTURlZmluaWNpb25Ob21pbmEubW9kZWwnO1xyXG5pbXBvcnQgeyBNQXNpZ25hY2lvbkNhcmdvIH0gZnJvbSAnLi9jb3JlL21vZGVscy9TTk8vTUFzaWduYWNpb25DYXJnby5tb2RlbCc7XHJcbmltcG9ydCB7IE1Ob21pbmFTaW1wbGUgfSBmcm9tICcuL2NvcmUvbW9kZWxzL1NOTy9NTm9taW5hU2ltcGxlLm1vZGVsJztcclxuaW1wb3J0IHsgTVBlcnNvbmFsIH0gZnJvbSAnLi9jb3JlL21vZGVscy9TTk8vTVBlcnNvbmFsLm1vZGVsJztcclxuaW1wb3J0IHsgTUVudHJhZGFTdW1pbmlzdHJvcyB9IGZyb20gJy4vY29yZS9tb2RlbHMvU0lWL01FbnRyYWRhU3VtaW5pc3Ryby5tb2RlbCc7XHJcbmltcG9ydCBTd2FsIGZyb20gJ3N3ZWV0YWxlcnQyJ1xyXG5pbXBvcnQgKiBhcyBDcnlwdG9KUyBmcm9tICdjcnlwdG8tanMnOyBcclxuaW1wb3J0IHsgTVNub0xvZyB9IGZyb20gJy4vY29yZS9tb2RlbHMvU05PL01BdWRpdG9yaWEubW9kZWwnO1xyXG5pbXBvcnQgeyBNVGlwb0RlcG9zaXRvcyB9IGZyb20gJy4vY29yZS9tb2RlbHMvU0lWL01UaXBvRGVwb3NpdG9zLm1vZGVsJztcclxuaW1wb3J0IHsgTUNvbXVuaWRhZCB9IGZyb20gJy4vY29yZS9tb2RlbHMvQ0ZHL2NvbXVuaWRhZC5tb2RlbCc7XHJcbmltcG9ydCB7IE1FeGNoYW5nZVJhdGUgfSBmcm9tICcuL2NvcmUvbW9kZWxzL0NGRy9UYXNhQ2FtYmlvLm1vZGVsJztcclxuaW1wb3J0IHsgTUNhcmdvc0FkaWNpb25hbGVzfSBmcm9tICcuL2NvcmUvbW9kZWxzL1NUQi9NQ2FyZ29zQWRpY2lvbmFsZXMnO1xyXG5pbXBvcnQgeyBNQ2xpZW50IH0gZnJvbSAnLi9jb3JlL21vZGVscy9TRlYvTUNsaWVudGVNb2RlbCc7XHJcblxyXG4gIFxyXG4gIEBJbmplY3RhYmxlKHtcclxuICAgIHByb3ZpZGVkSW46ICdyb290J1xyXG4gIH0pXHJcbiAgZXhwb3J0IGNsYXNzIFNpZ2VzcFNlcnZpY2Uge1xyXG5cclxuICAgIHB1YmxpYyB1c3VhcmlvQWN0aXZvOiBNVXN1YXJpbyA9IG51bGw7XHJcbiAgICBwdWJsaWMgVVJMOiBzdHJpbmc7XHJcbiAgICBwdWJsaWMgY3VycmVudENvbXBvbmVudDogTUNvbXBvbmVudCA9IG51bGw7XHJcbiAgICBwdWJsaWMgdXNlck1lbnUgID0gbnVsbDsgXHJcbiAgICBwdWJsaWMgaXBfYWRyZXNzID0gJzEyNy4wLjAuMSc7XHJcbiAgICAvLyBwdWJsaWMgVVJMOiBzdHJpbmcgPSBcImh0dHA6Ly8xOTIuMTY4LjEuNjcvc2lnZXNwX3BocFwiO1xyXG4gICAgLy8gdXN1YXJpb0FjdGl2bzogTVVzdWFyaW8gPSB7XHJcbiAgICAvLyAgIGNvbmV4aW9uREI6IHtcclxuICAgIC8vICAgICBiYXNlRGVEYXRvczogXCJkYl9zaWdlc3BfZGVtb3YzXCIsXHJcbiAgICAvLyAgICAgZ2VzdG9yOiBcInBvc3RncmVzXCIsXHJcbiAgICAvLyAgICAgbG9naW46IFwicG9zdGdyZXNcIixcclxuICAgIC8vICAgICBub21icmU6IFwiU0lHRVNQIEMuQSwgc2Vydmlkb3IgODUgKFNFIFBVRURFIFVTQVIpXCIsXHJcbiAgICAvLyAgICAgcGFzc3dvcmQ6IFwiYWRtaW5zaWdlc3BcIixcclxuICAgIC8vICAgICBwdWVydG86IFwiNTQzMlwiLFxyXG4gICAgLy8gICAgIHNlcnZpZG9yOiBcIjE5Mi4xNjguMS42N1wiLFxyXG4gICAgLy8gICB9LFxyXG4gICAgLy8gICBlbXByZXNhOiB7XHJcbiAgICAvLyAgICAgaWQ6IDEsXHJcbiAgICAvLyAgICAgcGVyaW9kb0Zpc2NhbDogXCIyMDE5LTAxLTAxXCIsXHJcbiAgICAvLyAgICAgdGl0dWxvOiBcIlNJR0VTUCBDLkEuXCJcclxuICAgIC8vICAgfSxcclxuICAgIC8vICAgbm9tYnJlOiBcIlNJR0VTUFwiLFxyXG4gICAgLy8gICB0b2tlbjogXCJleUowZVhBaU9pSktWMVFpTENKaGJHY2lPaUpJVXpNNE5DSjkuZXlKd1lYTnpkMjl5WkY5MWMzVWlPaUl4TWpNME5UWTNPQ0lzSW1sa1gyVnRjSEpsYzJFaU9pSXhJaXdpZEdsMFpXMXdJam9pVTBsSFJWTlFJRU11UVM0aUxDSndaWEptYVhOallXd2lPaUl5TURFNUxUQXhMVEF4SWl3aWJGOTFjM1ZoY21sdklqb2lVMGxIUlZOUUlpd2ljMlZ5ZG1sa2IzSWlPaUl4T1RJdU1UWTRMakV1TmpjaUxDSndkV1Z5ZEc4aU9pSTFORE15SWl3aVltRnpaV1JsWkdGMGIzTWlPaUprWWw5emFXZGxjM0JmWkdWdGIzWXpJaXdpYkc5bmFXNGlPaUp3YjNOMFozSmxjeUlzSW5CaGMzTjNiM0prSWpvaVlXUnRhVzV6YVdkbGMzQWlmUS5QSVNCU2Z1ZVJBZHNXc0oxQWFHY1ZDZ1ctMmFKa2d0dkxkc1cwQmdvNWx0eVlvd0Q4b3lfbnFLNXNqRTJVUkdrXCJcclxuICAgIC8vIH1cclxuICAgIC8vIHByb2NlZGU6IHN0cmluZyA9ICdTQ0dDTVAnO1xyXG4gICAgLy8gY29kc2lzOiBzdHJpbmcgPSAnU0NHJztcclxuXHJcblxyXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSBodHRwOiBIdHRwQ2xpZW50LCBwcml2YXRlIGRpYWxvZzogTWF0RGlhbG9nLCBwcml2YXRlIHRvYXN0OiBUb2FzdHJTZXJ2aWNlKSB7IH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEBkZXNjcmlwdGlvbiBWYWxpZGEgcXVlIHNlbG8gc2UgZXNjcmliYW4gZ3Vpb25lcyB5IDlcclxuICAgICAqIEBwYXJhbSBldmVudFxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgb25seUd1aW9uZXNBbmROaW5lKGV2ZW50OiBhbnkpIHtcclxuICAgICAgaWYgKGV2ZW50LmtleSA9PT0gJy0nIHx8IGV2ZW50LmtleSA9PT0gJzknKSB7XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gICAgLyoqXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gQWN0dWFsaXphIGVsIG1vbmNtcCBkZSBzaWdlc3BfY29tcHJvYmFudGVcclxuICAgICAqL1xyXG4gICAgcHVibGljIHVwZGF0ZUNvbXByb2JhbnRlQW1vdW50KGFtb3VudDogbnVtYmVyLCBpZENvbXByb2JhbnRlOiBudW1iZXIpOiBPYnNlcnZhYmxlPGFueT4ge1xyXG4gICAgICByZXR1cm4gdGhpcy5odHRwLnB1dDxhbnk+KGAke3RoaXMuVVJMfS9kYW8vc2lnL2NvbXByb2JhbnRlX2Rhby5waHA/bW9udG89dHJ1ZWAsIHtcclxuICAgICAgICBtb25jbXA6IGFtb3VudCxcclxuICAgICAgICBpZF9jb21wcm9iYW50ZTogaWRDb21wcm9iYW50ZVxyXG4gICAgICB9LCB7XHJcbiAgICAgICAgaGVhZGVyczogdGhpcy5nZXRIdHRwSGVhZGVycygpXHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQGRlc2NyaXB0aW9uIEFjdHVhbGl6YSBlbCBjb21wcm9iYW50ZSBwcnN1cHVlc3RhcmlvIGRlIEVncmVzb3NcclxuICAgICAqIEBwYXJhbSBjb21wcm9iYW50ZVxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgdXBkYXRlQ29tcHJvYmFudGVQcmVzdXB1ZXN0YXJpb0VncmVzb3MoY29tcHJvYmFudGU6IElDb21wcm9iYW50ZVByZXN1cHVlc3RhcmlvRWdyZXNvcyk6IE9ic2VydmFibGU8YW55PiB7XHJcbiAgICAgIHJldHVybiB0aGlzLmh0dHAucHV0PGFueT4oYCR7dGhpcy5VUkx9L2Rhby9zcGcvY29tcHJvYmFudGVfcHJlc3VwdWVzdGFyaW9fZWdyZXNvc19kYW8ucGhwYCxcclxuICAgICAgeyAuLi5jb21wcm9iYW50ZSwgaWQ6IGNvbXByb2JhbnRlLmlkX2R0X3NwZ2NtcCB9LCB7IGhlYWRlcnM6IHRoaXMuZ2V0SHR0cEhlYWRlcnMoKSB9KTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEBkZXNjcmlwdGlvbiBPYnRpZW5lIGVsIGNvbXByb2JhbnRlIHByZXN1cHVlc3RhcmlvIGRlIEVncmVzb3NcclxuICAgICAqL1xyXG4gICAgcHVibGljIGdldENvbXByb2JhbnRlUHJlc3VwdWVzdGFyaW9FZ3Jlc29zKCk6IE9ic2VydmFibGU8TUNvbXByb2JhbnRlUHJlc3VwdWVzdGFyaW9FZ3Jlc29zW10+IHtcclxuICAgICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8TUNvbXByb2JhbnRlUHJlc3VwdWVzdGFyaW9FZ3Jlc29zW10+KGAke3RoaXMuVVJMfS9kYW8vc3BnL2NvbXByb2JhbnRlX3ByZXN1cHVlc3RhcmlvX2VncmVzb3NfZGFvLnBocGAsIHtcclxuICAgICAgICBoZWFkZXJzOiB0aGlzLmdldEh0dHBIZWFkZXJzKClcclxuICAgICAgfSkucGlwZShcclxuICAgICAgICByZXRyeSgzKSxcclxuICAgICAgICBjYXRjaEVycm9yKHRoaXMuaGFuZGxlckVycm9yKSxcclxuICAgICAgICBtYXAoKHJlczogYW55KSA9PiByZXMuZGF0YS5tYXAoZWxlbWVudCA9PiBuZXcgTUNvbXByb2JhbnRlUHJlc3VwdWVzdGFyaW9FZ3Jlc29zKGVsZW1lbnQpKSlcclxuICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEBkZXNjcmlwdGlvbiBBY3R1YWxpemEgZWwgY29tcHJvYmFudGUgcHJzdXB1ZXN0YXJpbyBkZSBJbmdyZXNvc1xyXG4gICAgICogQHBhcmFtIGNvbXByb2JhbnRlXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyB1cGRhdGVDb21wcm9iYW50ZVByZXN1cHVlc3RhcmlvSW5ncmVzb3MoY29tcHJvYmFudGU6IElDb21wcm9iYW50ZVByZXN1cHVlc3RhcmlvSW5ncmVzb3MpOiBPYnNlcnZhYmxlPGFueT4ge1xyXG4gICAgICByZXR1cm4gdGhpcy5odHRwLnB1dDxhbnk+KGAke3RoaXMuVVJMfS9kYW8vc3BnL2NvbXByb2JhbnRlX3ByZXN1cHVlc3RhcmlvX2VncmVzb3NfZGFvLnBocGAsXHJcbiAgICAgIHsgLi4uY29tcHJvYmFudGUsIGlkOiBjb21wcm9iYW50ZS5pZF9kdF9zcGljbXAgfSwgeyBoZWFkZXJzOiB0aGlzLmdldEh0dHBIZWFkZXJzKCkgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gT2J0aWVuZSBlbCBjb21wcm9iYW50ZSBwcmVzdXB1ZXN0YXJpbyBkZSBJbmdyZXNvc1xyXG4gICAgICovXHJcbiAgICBwdWJsaWMgZ2V0Q29tcHJvYmFudGVQcmVzdXB1ZXN0YXJpb0luZ3Jlc29zKCk6IE9ic2VydmFibGU8TUNvbXByb2JhbnRlUHJlc3VwdWVzdGFyaW9JbmdyZXNvc1tdPiB7XHJcbiAgICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PE1Db21wcm9iYW50ZVByZXN1cHVlc3RhcmlvSW5ncmVzb3NbXT4oYCR7dGhpcy5VUkx9L2Rhby9zcGkvY29tcHJvYmFudGVfcHJlc3VwdWVzdGFyaW9faW5ncmVzb3NfZGFvLnBocGAsIHtcclxuICAgICAgICBoZWFkZXJzOiB0aGlzLmdldEh0dHBIZWFkZXJzKClcclxuICAgICAgfSkucGlwZShcclxuICAgICAgICByZXRyeSgzKSxcclxuICAgICAgICBjYXRjaEVycm9yKHRoaXMuaGFuZGxlckVycm9yKSxcclxuICAgICAgICBtYXAoKHJlczogYW55KSA9PiByZXMuZGF0YS5tYXAoZWxlbWVudCA9PiBuZXcgTUNvbXByb2JhbnRlUHJlc3VwdWVzdGFyaW9JbmdyZXNvcyhlbGVtZW50KSkpXHJcbiAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAQWN0dWFsaXphIGxhIGRpc3RyaWJ1Y2nDs24gZGUgbGEgY3VlbnRhIGRlIGVncmVzb1xyXG4gICAgICogQHBhcmFtIGRpc3RyaWJ1dGlvblxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgdXBkYXRlRGlzdHJpYnV0aW9uRXhwZW5zZUFjY291bnQoZGlzdHJpYnV0aW9uOiBJVXBkYXRlRGlzdHJpYnV0aW9uKTogT2JzZXJ2YWJsZTxhbnk+IHtcclxuICAgICAgcmV0dXJuIHRoaXMuaHR0cC5wdXQoYCR7dGhpcy5VUkx9L2Rhby9zcGcvY3VlbnRhc19lZ3Jlc29zX2Rhby5waHBgLCBkaXN0cmlidXRpb24sXHJcbiAgICAgIHtoZWFkZXJzOiB0aGlzLmdldEh0dHBIZWFkZXJzKCl9KTtcclxuICAgIH1cclxuXHJcbiAgICAgICAvKipcclxuICAgICAqIEBBY3R1YWxpemEgbGEgZGlzdHJpYnVjacOzbiBkZSBsYSBjdWVudGEgZGUgZWdyZXNvXHJcbiAgICAgKiBAcGFyYW0gZGlzdHJpYnV0aW9uXHJcbiAgICAgKi9cclxuICAgICAgIHB1YmxpYyB1cGRhdGVEaXN0cmlidXRpb25FeHBlbnNlQWNjb3VudDIoZGlzdHJpYnV0aW9uOiBJVXBkYXRlRGlzdHJpYnV0aW9uMltdKTogT2JzZXJ2YWJsZTxhbnk+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy5odHRwLnB1dChgJHt0aGlzLlVSTH0vZGFvL3NwZy9jdWVudGFzX2VncmVzb3NfZGFvLnBocGAsIGRpc3RyaWJ1dGlvbixcclxuICAgICAgICB7aGVhZGVyczogdGhpcy5nZXRIdHRwSGVhZGVycygpfSk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEBBY3R1YWxpemEgbGEgZGlzdHJpYnVjacOzbiBkZSBsYSBjdWVudGEgZGUgSW5ncmVzb1xyXG4gICAgICogQHBhcmFtIGRpc3RyaWJ1dGlvblxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgdXBkYXRlRGlzdHJpYnV0aW9uSW5jb21lQWNjb3VudChkaXN0cmlidXRpb246IElVcGRhdGVEaXN0cmlidXRpb25JbmdyZXNvcyk6IE9ic2VydmFibGU8SVJlc3BvbnNlPiB7XHJcbiAgICAgIHJldHVybiB0aGlzLmh0dHAucHV0PElSZXNwb25zZT4oYCR7dGhpcy5VUkx9L2Rhby9zcGkvY3VlbnRhc19pbmdyZXNvc19kYW8ucGhwYCwgZGlzdHJpYnV0aW9uLFxyXG4gICAgICB7aGVhZGVyczogdGhpcy5nZXRIdHRwSGVhZGVycygpfSlcclxuICAgICAgLnBpcGUoXHJcbiAgICAgICAgbWFwKChyZXM6IGFueSkgPT4ge1xyXG4gICAgICAgICAgaWYgKHJlcy5zdWNjZXNzKXtcclxuICAgICAgICAgICAgcmVzLmRhdGEgPSBuZXcgTUN1ZW50YUluZ3Jlc29zKHJlcy5kYXRhKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHJldHVybiByZXM7XHJcbiAgICAgICAgfSlcclxuICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgdXBkYXRlRGlzdHJpYnV0aW9uSW5jb21lQWNjb3VudDIoZGlzdHJpYnV0aW9uOiBJVXBkYXRlRGlzdHJpYnV0aW9uSW5ncmVzb3MyW10pOiBPYnNlcnZhYmxlPElSZXNwb25zZT4ge1xyXG4gICAgICByZXR1cm4gdGhpcy5odHRwLnB1dDxJUmVzcG9uc2U+KGAke3RoaXMuVVJMfS9kYW8vc3BpL2N1ZW50YXNfaW5ncmVzb3NfZGFvLnBocGAsIGRpc3RyaWJ1dGlvbixcclxuICAgICAge2hlYWRlcnM6IHRoaXMuZ2V0SHR0cEhlYWRlcnMoKX0pXHJcbiAgICAgIC5waXBlKFxyXG4gICAgICAgIG1hcCgocmVzOiBhbnkpID0+IHtcclxuICAgICAgICAgIGlmIChyZXMuc3VjY2Vzcyl7XHJcbiAgICAgICAgICAgIHJlcy5kYXRhID0gbmV3IE1DdWVudGFJbmdyZXNvcyhyZXMuZGF0YSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICByZXR1cm4gcmVzO1xyXG4gICAgICAgIH0pXHJcbiAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAQWN0dWFsaXphIGxhIGRpc3RyaWJ1Y2nDs24gZGUgbGEgY3VlbnRhIGRlIEluZ3Jlc28gZGUgRXN0cnVjdHVyYVxyXG4gICAgICogQHBhcmFtIGRpc3RyaWJ1dGlvblxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgdXBkYXRlRGlzdHJpYnV0aW9uSW5jb21lU3RydWN0dXJlQWNjb3VudChkaXN0cmlidXRpb246IElVcGRhdGVEaXN0cmlidXRpb25JbmdyZXNvcywgbGV2ZWw6IG51bWJlcik6IE9ic2VydmFibGU8SVJlc3BvbnNlPiB7XHJcbiAgICAgIHJldHVybiB0aGlzLmh0dHAucHV0PElSZXNwb25zZT4oYCR7dGhpcy5VUkx9L2Rhby9zcGkvY3VlbnRhX2VzdHJ1Y3R1cmFfaW5ncmVzb3NfZGFvLnBocGAsIGRpc3RyaWJ1dGlvbixcclxuICAgICAge2hlYWRlcnM6IHRoaXMuZ2V0SHR0cEhlYWRlcnMoKX0pXHJcbiAgICAgIC5waXBlKFxyXG4gICAgICAgIG1hcCgocmVzOiBhbnkpID0+IHtcclxuICAgICAgICAgIGlmIChyZXMuc3VjY2Vzcyl7XHJcbiAgICAgICAgICAgIHJlcy5kYXRhID0gbmV3IE1JbmNvbWVTdHJ1Y3R1cmVBY2NvdW50KHJlcy5kYXRhLCBsZXZlbCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICByZXR1cm4gcmVzO1xyXG4gICAgICAgIH0pXHJcbiAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gT2J0aWVuZSBlbCBwbGFuIGRlIGN1ZW50YXNcclxuICAgICAqIEBwYXJhbSBsZXZlbCBOw7ptZXJvIGRlIG5pdmVsZXMgZGUgbGEgY29uZmlndXJhY2nDs25cclxuICAgICAqIEBwYXJhbSBpZCBkZSBsYSBlc3RydWN0dXJhIGVsIGlkRXAzIG8gaWRFcDVcclxuICAgICAqIEByZXR1cm4gT2JzZXJ2YWJsZTxNQ3VlbnRhRWdyZXNvc1tdPlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgcGxhbkluc3RpdHVjaW9uYWxTUEcodGlwbzpzdHJpbmc9J3BsYW4nLGlkRW50ZXJwcmlzZTpudW1iZXIscGVyaW9kb0Zpc2NhbDpudW1iZXIsIGlkRVAzbzU6bnVtYmVyLG5pdmVsOm51bWJlcixlc3RhdHVzOnN0cmluZz0nJyk6IE9ic2VydmFibGU8TUN1ZW50YUVncmVzb3NbXT57XHJcbiAgICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PE1DdWVudGFFZ3Jlc29zW10+KGAke3RoaXMuVVJMfS9kYW8vc3BnL2N1ZW50YXNfZWdyZXNvc19kYW8ucGhwP3RpcG89JHt0aXBvfSZlPSR7aWRFbnRlcnByaXNlfSZwZXJpb2RvPSR7cGVyaW9kb0Zpc2NhbH0maWQ9JHtpZEVQM281fSZuaXZlbD0ke25pdmVsfSZlc3Q9JHtlc3RhdHVzfWAsXHJcbiAgICAgIHtoZWFkZXJzOiB0aGlzLmdldEh0dHBIZWFkZXJzKCl9KVxyXG4gICAgICAucGlwZShcclxuICAgICAgICBtYXAoKHJlczphbnkpID0+IHJlcy5kYXRhLm1hcChlbGVtZW50ID0+IG5ldyBNQ3VlbnRhRWdyZXNvcyhlbGVtZW50KSkpXHJcbiAgICAgIClcclxuICAgIH1cclxuXHJcbiAgICBcclxuICAgIC8qKlxyXG4gICAgICogQGRlc2NyaXB0aW9uIEFicmUgZWwgY2F0w6Fsb2dvIGRlIGVzdHJ1Y3R1cmEgcHJlc3VwdWVzYXJpYVxyXG4gICAgICogQHBhcmFtIGRhdGEgRGF0YSBxdWUgc2UgdmEgYSBtb3N0cmFyXHJcbiAgICAgKiBAcGFyYW0gY29uZmlndXJhdGlvbiBDb25maWd1cmFjacOzbiBkZSBsYSBlc3RydWN0dXJhXHJcbiAgICAgKiBAcmV0dXJuIFByb21pc2U8YW55PlxyXG4gICAgICogQGF1dGhvciBNaWd1ZWwgUmFtw61yZXpcclxuICAgICAqL1xyXG4gICAgcHVibGljIG9wZW5DYXRhbG9nb0VzdHJ1Y3R1cmFQcmVzdXB1ZXN0YXJpYShkYXRhOiBhbnlbXSwgY29uZmlndXJhdGlvbjogTUNvbmZpZ3VyYXRpb25TUEcpOiBQcm9taXNlPGFueT4ge1xyXG4gICAgICBjb25zdCBjYXRhbG9nbyA9IHRoaXMuZGlhbG9nLm9wZW4oQ2F0YWxvZ29Fc3RydWN0dXJhc0NvbXBvbmVudCwge1xyXG4gICAgICAgIGRhdGE6IHtcclxuICAgICAgICAgIGRhdGEsXHJcbiAgICAgICAgICBjb25maWd1cmF0aW9uXHJcbiAgICAgICAgfSxcclxuICAgICAgICB3aWR0aDogJzEwMDBweCcsXHJcbiAgICAgICAgbWF4SGVpZ2h0OiAnOTB2aCdcclxuICAgICAgfSk7XHJcbiAgICAgIHJldHVybiBjYXRhbG9nby5hZnRlckNsb3NlZCgpLnRvUHJvbWlzZSgpO1xyXG4gICAgfVxyXG5cclxuXHJcbiAgIC8qKlxyXG4gICAgKiBcclxuICAgICogQHBhcmFtIHRpcG8gezEsMiwzLDQsY29tcGxldGF9XHJcbiAgICAqIEBwYXJhbSBpZEVudGVycHJpc2UgXHJcbiAgICAqIEBwYXJhbSBwZXJpb2RvRmlzY2FsIFxyXG4gICAgKiBAcGFyYW0gY29kaWdvIHtjb2RpZ28gZGUgbGEgZXN0cnVjdHVyYSB9XHJcbiAgICAqIEByZXR1cm5zIFxyXG4gICAgKi9cclxuICAgIHB1YmxpYyBnZXRCdWRnZXRTdHJ1Y3R1cmVDb21wbGV0ZSh0aXBvOnN0cmluZz0nY29tcGxldGEnLGlkRW50ZXJwcmlzZTpudW1iZXIsIHBlcmlvZG9GaXNjYWw6bnVtYmVyLGNvZGlnbzpzdHJpbmc9JycgKTogT2JzZXJ2YWJsZTxNRXN0cnVjdHVyYXNbXT4ge1xyXG4gICAgICByZXR1cm4gdGhpcy5odHRwLmdldDxNRXN0cnVjdHVyYXNbXT4oXHJcbiAgICAgICAgYCR7dGhpcy5VUkx9L2Rhby9zcGcvZXN0cnVjdHVyYV9wcmVzdXB1ZXN0YXJpYV9kYW8ucGhwP3RpcG89JHt0aXBvfSZlPSR7aWRFbnRlcnByaXNlfSZwZXI9JHtwZXJpb2RvRmlzY2FsfSZjb2Q9JHtjb2RpZ299YCxcclxuICAgICAgeyBoZWFkZXJzOiB0aGlzLmdldEh0dHBIZWFkZXJzKCkgfSkucGlwZSggICAgICAgXHJcbiAgICAgICAgbWFwKChyZXNwOiBhbnkpID0+IHJlc3AuZGF0YS5tYXAoZSA9PiBuZXcgTUVzdHJ1Y3R1cmFzKGUpKSlcclxuICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEBkZXNjcmlwdGlvbiBPYnRpZW5lIGxhcyBjb25maWd1cmFjaW9uZXMgZGUgbGEgZXN0cnVjdHVyYSBwcmVzdXB1ZXN0YXJpYVxyXG4gICAgICogQHJldHVybiBPYnNlcnZhYmxlPE1Db25maWd1cmF0aW9uU1BHW10+XHJcbiAgICAgKiBAYXV0aG9yIE1pZ3VlbCBSYW3DrXJlelxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgZ2V0Q29uZmlndXJhdGlvblNQRyhpZEVudGVycHJpc2U6bnVtYmVyLCBwZXJpb2RvRmlzY2FsOm51bWJlcik6IE9ic2VydmFibGU8TUNvbmZpZ3VyYXRpb25TUEc+IHtcclxuXHJcbiAgICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PE1Db25maWd1cmF0aW9uU1BHPihgJHt0aGlzLlVSTH0vZGFvL3NwZy9jb25maWd1cmFjaW9uX3ByZXN1cHVlc3RhcmlhX2Rhby5waHA/ZT0ke2lkRW50ZXJwcmlzZX0mcGVyaW9kbz0ke3BlcmlvZG9GaXNjYWx9YCxcclxuICAgICAgeyBoZWFkZXJzOiB0aGlzLmdldEh0dHBIZWFkZXJzKCkgfSkucGlwZShcclxuICAgICAgICByZXRyeSgzKSxcclxuICAgICAgICBjYXRjaEVycm9yKHRoaXMuaGFuZGxlckVycm9yKSxcclxuICAgICAgICBtYXAoKHJlc3A6IGFueSkgPT4gbmV3IE1Db25maWd1cmF0aW9uU1BHKHJlc3AuZGF0YVswXSkpXHJcbiAgICAgICk7XHJcbiAgICB9XHJcbiAgICAvKipcclxuICAgICAqIEBkZXNjcmlwdGlvbiBPYnRpZW5lIGxhcyBjb25maWd1cmFjaW9uZXMgZGUgbG9zIHByb3ZlZWRvcmVzXHJcbiAgICAgKiBAcmV0dXJuIE9ic2VydmFibGU8TUNvbmZpZ3VyYXRpb25SUENbXT5cclxuICAgICAqIEBhdXRob3IgQ2FybG9zIEFsYm9ybm96XHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBnZXRDb25maWd1cmF0aW9uUlBDKCk6IE9ic2VydmFibGU8SVJlc3BvbnNlPiB7XHJcblxyXG4gICAgICByZXR1cm4gdGhpcy5odHRwLmdldDxNQ29uZmlndXJhdGlvblJQQz4oYCR7dGhpcy5VUkx9L2Rhby9ycGMvcHJvdmVlZG9yX2NvbmZpZ19kYW8ucGhwYCxcclxuICAgICAgeyBoZWFkZXJzOiB0aGlzLmdldEh0dHBIZWFkZXJzKCkgfSkucGlwZShcclxuICAgICAgICByZXRyeSgzKSxcclxuICAgICAgICBjYXRjaEVycm9yKHRoaXMuaGFuZGxlckVycm9yKSxcclxuICAgICAgICBtYXAoKHJlc3A6IElSZXNwb25zZSkgPT4ge1xyXG4gICAgICAgICAgaWYgKHJlc3Auc3VjY2Vzcykge1xyXG4gICAgICAgICAgICByZXNwLmRhdGEgPSBuZXcgTUNvbmZpZ3VyYXRpb25SUEMocmVzcC5kYXRhKVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgcmV0dXJuIHJlc3BcclxuICAgICAgICB9KVxyXG4gICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQGRlc2NyaXB0aW9uIE9idGllbmUgbGFzIE1Db25maWd1cmFjaW9uU05PIGRlIGxhIG5vbWluYVxyXG4gICAgICogQHJldHVybiBPYnNlcnZhYmxlPE1Db25maWd1cmFjaW9uU05PW10+XHJcbiAgICAgKiBAZGF0ZSAyNy0wNy0yMDIxXHJcbiAgICAgKi9cclxuICAgICBwdWJsaWMgZ2V0Q29uZmlndXJhdGlvblNOTyhpZEVudGVycHJpc2U6bnVtYmVyKTogT2JzZXJ2YWJsZTxJUmVzcG9uc2U+IHtcclxuXHJcbiAgICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PElSZXNwb25zZT4oYCR7dGhpcy5VUkx9L2Rhby9zbm8vY29uZmlndXJhY2lvbl9kYW8ucGhwP3RpcG89JHsnY29uZmlndXJhY2lvbid9JmU9JHtpZEVudGVycHJpc2V9YCxcclxuICAgICAgeyBoZWFkZXJzOiB0aGlzLmdldEh0dHBIZWFkZXJzKCkgfSkucGlwZShcclxuICAgICAgICByZXRyeSgzKSxcclxuICAgICAgICBjYXRjaEVycm9yKHRoaXMuaGFuZGxlckVycm9yKSxcclxuICAgICAgICBtYXAoKHJlc3A6IElSZXNwb25zZSkgPT4ge1xyXG4gICAgICAgICAgaWYgKHJlc3Auc3VjY2Vzcykge1xyXG4gICAgICAgICAgICBpZihyZXNwLmRhdGEgIT1udWxsKXtcclxuICAgICAgICAgICAgICByZXNwLmRhdGEgPSByZXNwLmRhdGEubWFwKGUgPT4gbmV3IE1Db25maWd1cmFjaW9uU05PKGUpKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgcmV0dXJuIHJlc3BcclxuICAgICAgICB9KVxyXG4gICAgICApO1xyXG4gICAgfVxyXG5cclxuXHJcbiAgICBwdWJsaWMgZGF0ZVRvU3RyaW5nKGRhdGU6IERhdGUpOiBzdHJpbmd7XHJcbiAgICAgIHJldHVybiBgJHtkYXRlLmdldEZ1bGxZZWFyKCl9LSR7XHJcbiAgICAgICAgZGF0ZS5nZXRNb250aCgpICsgMSA+PSAxMCA/IGRhdGUuZ2V0TW9udGgoKSArIDEgOiBgMCR7ZGF0ZS5nZXRNb250aCgpICsgMX1gXHJcbiAgICAgIH0tJHtcclxuICAgICAgICBkYXRlLmdldERhdGUoKSA+PSAxMCA/IGRhdGUuZ2V0RGF0ZSgpIDogYDAke2RhdGUuZ2V0RGF0ZSgpfWBcclxuICAgICAgfWBcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEBkZXNjcmlwdGlvbiBPYnRpZW5lIGxhcyBjb25maWd1cmFjaW9uZXMgZGUgU2VndXJpZGFkXHJcbiAgICAgKiBAcmV0dXJuIE9ic2VydmFibGU8SVJlc3BvbnNlPlxyXG4gICAgICogQGF1dGhvciBDYXJsb3MgQWxib3Jub3pcclxuICAgICAqL1xyXG4gICAgcHVibGljIGdldENvbmZpZ1NTUyhpZEVudGVycHJpc2U6bnVtYmVyPTApOiBPYnNlcnZhYmxlPElSZXNwb25zZT4ge1xyXG5cclxuICAgICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8SVJlc3BvbnNlPihgJHt0aGlzLlVSTH0vZGFvL3Nzcy9zZWd1cmlkYWRfY29uZmlnX2Rhby5waHA/ZT0ke2lkRW50ZXJwcmlzZX1gLFxyXG4gICAgICB7IGhlYWRlcnM6IHRoaXMuZ2V0SHR0cEhlYWRlcnMoKSB9KS5waXBlKFxyXG4gICAgICAgIHJldHJ5KDMpLFxyXG4gICAgICAgIGNhdGNoRXJyb3IodGhpcy5oYW5kbGVyRXJyb3IpLFxyXG4gICAgICAgIG1hcCgocmVzcDogSVJlc3BvbnNlKSA9PiB7XHJcbiAgICAgICAgICBpZiAocmVzcC5zdWNjZXNzKSB7XHJcbiAgICAgICAgICAgIHJlc3AuZGF0YSA9IG5ldyBNQ29uZmlnU1NTKHJlc3AuZGF0YSlcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHJldHVybiByZXNwXHJcbiAgICAgICAgfSlcclxuICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0Q29tcG9uZW50cyhzeXN0ZW1Db2RlOiBzdHJpbmcgPSBudWxsLCBwZXJtaXQ6IGJvb2xlYW4pOiBPYnNlcnZhYmxlPElSZXNwb25zZT57XHJcblxyXG4gICAgICByZXR1cm4gdGhpcy5odHRwLmdldDxJUmVzcG9uc2U+KFxyXG4gICAgICAgIGAke3RoaXMuVVJMfS9kYW8vc3NzL2NvbXBvbmVudGVzX2Rhby5waHA/JHtzeXN0ZW1Db2RlID8gYGNvZHNpcz0ke3N5c3RlbUNvZGV9JHtcclxuICAgICAgICAgIHBlcm1pdCA/IGAmcGVybWl0PXRydWVgIDogJydcclxuICAgICAgICB9YCA6ICcnfWAsXHJcbiAgICAgICAgeyBoZWFkZXJzOiB0aGlzLmdldEh0dHBIZWFkZXJzKCkgfVxyXG4gICAgICApLnBpcGUoXHJcbiAgXHJcbiAgICAgICAgbWFwKHJlcyA9PiB7XHJcbiAgICAgICAgICBpZiAocmVzLnN1Y2Nlc3MpIHtcclxuICAgICAgICAgICAgcmVzLmRhdGEgPSByZXMuZGF0YS5tYXAoZSA9PiBuZXcgTUNvbXBvbmVudChlKSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICByZXR1cm4gcmVzO1xyXG4gICAgICAgIH0pXHJcbiAgICAgIClcclxuICBcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEBkZXNjcmlwdGlvbiBPYnRpZW5lIGxhcyBmdWVudGVzIGRlIGZpbmFuY2lhbWllbnRvXHJcbiAgICAgKiBAcmV0dXJuIE9ic2VydmFibGU8TUZ1ZW50ZUZpbmFuY2lhbWllbnRvW10+XHJcbiAgICAgKiBAYXV0aG9yIE1pZ3VlbCBSYW3DrXJlelxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgZ2V0RnVlbnRlRmluYW5jaWFtaWVudG8oaWRFbnRlcnByaXNlOm51bWJlcixwZXJpb2RvRmlzY2FsOm51bWJlcik6IE9ic2VydmFibGU8TUZ1ZW50ZUZpbmFuY2lhbWllbnRvW10+IHtcclxuICAgICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8TUZ1ZW50ZUZpbmFuY2lhbWllbnRvW10+KGAke3RoaXMuVVJMfS9kYW8vc3BnL2Z1ZW50ZV9maW5hbmNpYW1pZW50b19kYW8ucGhwP2U9JHtpZEVudGVycHJpc2V9JnBlcj0ke3BlcmlvZG9GaXNjYWx9YCxcclxuICAgICAgeyBoZWFkZXJzOiB0aGlzLmdldEh0dHBIZWFkZXJzKCkgfSkucGlwZShcclxuICAgICAgICByZXRyeSgzKSxcclxuICAgICAgICBjYXRjaEVycm9yKHRoaXMuaGFuZGxlckVycm9yKSxcclxuICAgICAgICBtYXAoKHJlc3A6IGFueSkgPT4gcmVzcC5kYXRhLm1hcChlbGVtZW50ID0+IG5ldyBNRnVlbnRlRmluYW5jaWFtaWVudG8oZWxlbWVudCkpKVxyXG4gICAgICApO1xyXG4gICAgfSBcclxuXHJcbiAgICAvKipcclxuICAgICAqIEBkZXNjcmlwdGlvbiBPYnRpZW5lIGxvcyBjZW50cm9zIGRlIGNvc3RvXHJcbiAgICAgKiBAcmV0dXJuIE9ic2VydmFibGU8SVJlc3BvbnNlPlxyXG4gICAgICogbW9kaWZpY2FkbyAyOC0xMi0yMDIyXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBnZXRDZW50cm9Db3N0byh0aXBvOnN0cmluZyxpZEVudGVycHJpc2U6bnVtYmVyLHBlcmlvZG9GaXNjYWw6bnVtYmVyKTogT2JzZXJ2YWJsZTxJUmVzcG9uc2U+IHtcclxuICAgICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8SVJlc3BvbnNlPihgJHt0aGlzLlVSTH0vZGFvL3NjZy9jZW50cm9fY29zdG9fZGFvLnBocD90aXBvPSR7dGlwb30mZT0ke2lkRW50ZXJwcmlzZX0mcGVyaW9kbz0ke3BlcmlvZG9GaXNjYWx9YCwgXHJcbiAgICAgIHtoZWFkZXJzOiB0aGlzLmdldEh0dHBIZWFkZXJzKCl9XHJcbiAgICAgICkucGlwZShcclxuICAgICAgICBtYXAoKHJlczogSVJlc3BvbnNlKSA9PiB7XHJcbiAgICAgICAgICBpZiAocmVzLnN1Y2Nlc3MpIHtcclxuICAgICAgICAgICAgcmVzLmRhdGEgPSByZXMuZGF0YS5tYXAoZWxlbWVudCA9PiBuZXcgTUNlbnRyb0Nvc3RvKGVsZW1lbnQpKVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgcmV0dXJuIHJlc1xyXG4gICAgICAgIH0pXHJcbiAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldENlbnRyb0Nvc3RvVW5pZGFkT3JnYW5pemF0aXZhKHRpcG86c3RyaW5nLGlkRW50ZXJwcmlzZTpudW1iZXIscGVyaW9kb0Zpc2NhbDpudW1iZXIsaWRVbmlkYWRBZG1pbmlzdHJhdGl2YTpudW1iZXIpOiBPYnNlcnZhYmxlPElSZXNwb25zZT4ge1xyXG4gICAgICByZXR1cm4gdGhpcy5odHRwLmdldDxJUmVzcG9uc2U+KGAke3RoaXMuVVJMfS9kYW8vc3BnL3VuaWRhZF9hZG1pbmlzdHJhdGl2YV9kYW8ucGhwP3RpcG89JHt0aXBvfSZlPSR7aWRFbnRlcnByaXNlfSZwZXJpb2RvPSR7cGVyaW9kb0Zpc2NhbH0maWQ9JHtpZFVuaWRhZEFkbWluaXN0cmF0aXZhfWAsIFxyXG4gICAgICB7aGVhZGVyczogdGhpcy5nZXRIdHRwSGVhZGVycygpfVxyXG4gICAgICApLnBpcGUoXHJcbiAgICAgICAgbWFwKChyZXM6IElSZXNwb25zZSkgPT4ge1xyXG4gICAgICAgICAgaWYgKHJlcy5zdWNjZXNzKSB7XHJcbiAgICAgICAgICAgIHJlcy5kYXRhID0gcmVzLmRhdGEubWFwKGVsZW1lbnQgPT4gbmV3IE1DZW50cm9Db3N0byhlbGVtZW50KSlcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHJldHVybiByZXNcclxuICAgICAgICB9KVxyXG4gICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXRFc3RydWN0dXJhc1VuaWRhZE9yZ2FuaXphdGl2YSh0aXBvOnN0cmluZyxpZEVudGVycHJpc2U6bnVtYmVyLHBlcmlvZG9GaXNjYWw6bnVtYmVyLGlkVW5pZGFkQWRtaW5pc3RyYXRpdmE6bnVtYmVyKTogT2JzZXJ2YWJsZTxJUmVzcG9uc2U+IHtcclxuICAgICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8SVJlc3BvbnNlPihgJHt0aGlzLlVSTH0vZGFvL3NwZy91bmlkYWRfYWRtaW5pc3RyYXRpdmFfZGFvLnBocD90aXBvPSR7dGlwb30mZT0ke2lkRW50ZXJwcmlzZX0mcGVyaW9kbz0ke3BlcmlvZG9GaXNjYWx9JmlkPSR7aWRVbmlkYWRBZG1pbmlzdHJhdGl2YX1gLCBcclxuICAgICAge2hlYWRlcnM6IHRoaXMuZ2V0SHR0cEhlYWRlcnMoKX1cclxuICAgICAgKS5waXBlKFxyXG4gICAgICAgIG1hcCgocmVzOiBJUmVzcG9uc2UpID0+IHtcclxuICAgICAgICAgIGlmIChyZXMuc3VjY2Vzcykge1xyXG4gICAgICAgICAgICByZXMuZGF0YSA9IHJlcy5kYXRhLm1hcChlbGVtZW50ID0+IG5ldyBNRXN0cnVjdHVyYXMoZWxlbWVudCkpXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICByZXR1cm4gcmVzXHJcbiAgICAgICAgfSlcclxuICAgICAgKTtcclxuICAgIH1cclxuXHJcblxyXG4gIFxyXG5cclxuXHJcbiAgICAvKipcclxuICAgICAqIEBkZXNjcmlwdGlvbiBBYnJlIGVsIGRpYWxvZyBkZSBjaGVja2tzXHJcbiAgICAgKiBAcGFyYW0gY29sdW1ucyBDb2x1bW5hcyBxdWUgdmEgYSB0ZW5lciBsYSB0YWJsYVxyXG4gICAgICogQHBhcmFtIHRpdGxlIFTDrXR1bG8gZGUgbGEgbW9kYWxcclxuICAgICAqIEBwYXJhbSBkYXRhU291cmNlIERhdGEgcXVlIHMgZXZhIGEgbW9zdHJhciBlbiBsYSB0YWJsYVxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgb3BlbkRpYWxvZ011bHRpU2VsZWN0KFxyXG4gICAgICAvLyBjb2x1bW5zOiBzdHJpbmdbXSwgXHJcbiAgICAgIC8vIHRpdGxlOiBzdHJpbmcsIFxyXG4gICAgICAvLyBkYXRhU291cmNlOiBhbnlbXSxcclxuICAgICAgLy8gY29sdW1uTmFtZXM/OiBzdHJpbmdbXVxyXG4gICAgICBjb2x1bW5zOiBzdHJpbmdbXSwgXHJcbiAgICAgIHRpdGxlOiBzdHJpbmcsIFxyXG4gICAgICBkYXRhU291cmNlOiBhbnlbXSwgXHJcbiAgICAgIGNvbHVtbk5hbWVzOiBzdHJpbmdbXSA9IG51bGwsIFxyXG4gICAgICB3aWR0aDogc3RyaW5nID0gJzEwMDBweCcsXHJcbiAgICAgIG9wdGlvbnM6IHtcclxuICAgICAgICBoYXNCYWNrZHJvcD86IGJvb2xlYW4sXHJcbiAgICAgICAgZGlzYWJsZUNsb3NlPzogYm9vbGVhbixcclxuICAgICAgIC8vIGRpc2FibGVNYXN0ZXJUb2dnbGU/OiBib29sZWFuXHJcbiAgICAgIH0gPSB7XHJcbiAgICAgICAgZGlzYWJsZUNsb3NlOiBmYWxzZSwgXHJcbiAgICAgICAgaGFzQmFja2Ryb3A6IGZhbHNlLCBcclxuICAgICAgLy8gIGRpc2FibGVNYXN0ZXJUb2dnbGU6IGZhbHNlXHJcbiAgICAgIH1cclxuICAgICk6IFByb21pc2U8YW55W10+IHtcclxuICAgICAgbGV0IGRpYWxvZ1JlZiA9IHRoaXMuZGlhbG9nLm9wZW4oVGFibGVTZWxlY3RDb21wb25lbnQsIHtcclxuICAgICAgICBkYXRhOiB7XHJcbiAgICAgICAgICB0aXRsZTogdGl0bGUsXHJcbiAgICAgICAgICBjb2x1bW5zOiBjb2x1bW5zLFxyXG4gICAgICAgICAgZGF0YVNvdXJjZTogZGF0YVNvdXJjZSxcclxuICAgICAgICAgIGNvbHVtbk5hbWVzLFxyXG4gICAgICAgICAvLyBkaXNhYmxlTWFzdGVyVG9nZ2xlOiBvcHRpb25zLmRpc2FibGVNYXN0ZXJUb2dnbGVcclxuICAgICAgICB9LFxyXG4gICAgICAgIHdpZHRoOiB3aWR0aCxcclxuICAgICAgICBtYXhIZWlnaHQ6ICc5MHZoJyxcclxuICAgICAgICBoYXNCYWNrZHJvcDogb3B0aW9ucy5oYXNCYWNrZHJvcCxcclxuICAgICAgICBkaXNhYmxlQ2xvc2U6IG9wdGlvbnMuZGlzYWJsZUNsb3NlXHJcbiAgICAgIH0pO1xyXG5cclxuICAgICAgcmV0dXJuIGRpYWxvZ1JlZi5hZnRlckNsb3NlZCgpLnRvUHJvbWlzZSgpO1xyXG4gICAgfVxyXG4gXHJcblxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQGRlc2NyaXB0aW9uIE9idGllbmUgbGEgY29uZmlndXJhY2nDs24gZGUgU0NHXHJcbiAgICAgKiBAcmV0dXJuIE9ic2VydmFibGU8TUNvbmZpZ3VyYWNpb25TQ0dbXT5cclxuICAgICAqIEBhdXRob3IgTWlndWVsIFJhbcOtcmV6XHJcbiAgICAgKiBAbW9kaWZpdCAyNS0wNy0yMDIxXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBnZXRDb25maWd1cmF0aW9uU0NHKGxpbmVhRW1wcmVzYTpudW1iZXIscGVyaW9kb0Zpc2NhbDpudW1iZXIpOiBPYnNlcnZhYmxlPE1Db25maWd1cmFjaW9uU0NHW10+IHsgICAgICBcclxuICAgICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8TUNvbmZpZ3VyYWNpb25TQ0dbXT4oYCR7dGhpcy5VUkx9L2Rhby9zY2cvY29uZmlndXJhY2lvbl9jb250YWJpbGlkYWRfZGFvLnBocD90aXBvPSR7J2RlZmF1bHQnfSZlPSR7bGluZWFFbXByZXNhfSZwZXJpb2RvPSR7cGVyaW9kb0Zpc2NhbH1gLFxyXG4gICAgICB7aGVhZGVyczogdGhpcy5nZXRIdHRwSGVhZGVycygpfVxyXG4gICAgICApLnBpcGUoXHJcbiAgICAgICAgcmV0cnkoMyksXHJcbiAgICAgICAgY2F0Y2hFcnJvcih0aGlzLmhhbmRsZXJFcnJvciksXHJcbiAgICAgICAgbWFwKChyZXNwOiBhbnkpID0+IHJlc3AuZGF0YS5tYXAoZWxlbWVudCA9PiBuZXcgTUNvbmZpZ3VyYWNpb25TQ0coZWxlbWVudCkpKVxyXG4gICAgICApXHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gQWJyZSB1biBkaWFsb2cgZGUgY29uZmlybWFjacOzblxyXG4gICAgICogQHBhcmFtIHRpdGxlIFTDrXR1bG8gZGUgbGEgbW9kYWwgZGUgY29uZmlybVxyXG4gICAgICogQHBhcmFtIG1lc3NhZ2UgTWVuc2FqZSAob3BjaW9uYWwpIHBhcmEgZWwgdXN1c2FyaW9cclxuICAgICAqIEByZXR1cm4gUHJvbWlzZTxib29sZWFuPlxyXG4gICAgICogQGF1dGhvciBNaWd1ZWwgUmFtw61yZXpcclxuICAgICAqL1xyXG4gICAgcHVibGljIG9wZW5EaWFsb2dDb25maXJtKHRpdGxlOiBzdHJpbmcsIG1lc3NhZ2U/OiBzdHJpbmcpOiBQcm9taXNlPGJvb2xlYW4+IHtcclxuICAgICAgbGV0IGRpYWxvZ1JlZiA9IHRoaXMuZGlhbG9nLm9wZW4oQ29uZmlybUNvbXBvbmVudCwge1xyXG4gICAgICAgIGRhdGE6IHtcclxuICAgICAgICAgIHRpdGxlOiB0aXRsZSxcclxuICAgICAgICAgIG1lc3NhZ2U6IChtZXNzYWdlKSA/IG1lc3NhZ2UgOiBudWxsXHJcbiAgICAgICAgfSxcclxuICAgICAgICB3aWR0aDogJzEwMDBweCcsXHJcbiAgICAgICAgbWF4SGVpZ2h0OiAnOTB2aCdcclxuICAgICAgfSk7XHJcblxyXG4gICAgICByZXR1cm4gZGlhbG9nUmVmLmFmdGVyQ2xvc2VkKCkudG9Qcm9taXNlKCk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gQ29udmllcnRlIGVsIGNvbnRlbmlkbyBkZSB1biBBYnN0cmFjdENvbnRyb2wgZW4gbWF5w7pzY3VsYSAoVXNhciBlbiBldmVudG8ga2V5dXApXHJcbiAgICAgKiBAcGFyYW0gZm9ybUdyb3VwIEZvcm11bGFyaW8gZMOzbmRlIHNlIHZhIGEgYnVzY2FyIGVsIEFic3RyYWN0Q29udHJvbFxyXG4gICAgICogQHBhcmFtIG5hbWUgTm9tYnJlIGRlbCBBYnN0cmFjdENvbnRyb2xcclxuICAgICAqIEByZXR1cm4gdm9pZFxyXG4gICAgICogQGF1dGhvciBNaWd1ZWwgUmFtw61yZXpcclxuICAgICAqL1xyXG4gICAgcHVibGljIGNoYW5nZVRvVXBwZXJDYXNlKGZvcm1Hcm91cDogVW50eXBlZEZvcm1Hcm91cCwgbmFtZTogc3RyaW5nKTogdm9pZCB7XHJcbiAgICAgIHRoaXMuZ2V0QWJzdHJhY3RDb250cm9sKGZvcm1Hcm91cCwgbmFtZSkuc2V0VmFsdWUodGhpcy5nZXRBYnN0cmFjdENvbnRyb2woZm9ybUdyb3VwLCBuYW1lKS52YWx1ZS50b1VwcGVyQ2FzZSgpKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEBkZXNjcmlwdGlvbiBPYnRpZW5lIGVsIEFic3RyYWN0Q29udHJvbCBkZSB1biBmb3JtdWxhcmlvXHJcbiAgICAgKiBAcGFyYW0gZm9ybUdyb3VwIEZvcm11bGFyaW8gZG9uZGUgc2UgdmEgYSBidXNjYXIgZWwgQWJzdHJhY3RDb250cm9sXHJcbiAgICAgKiBAcGFyYW0gbmFtZSBOb21icmUgZGVsIEFic3RyYWN0Q29udHJvbFxyXG4gICAgICogQHJldHVybiBBYnN0cmFjdENvbnRyb2xcclxuICAgICAqIEBhdXRob3IgTWlndWVsIFJhbcOtcmV6XHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBnZXRBYnN0cmFjdENvbnRyb2woZm9ybUdyb3VwOiBVbnR5cGVkRm9ybUdyb3VwLCBuYW1lOiBzdHJpbmcpOiBBYnN0cmFjdENvbnRyb2wge1xyXG4gICAgICByZXR1cm4gZm9ybUdyb3VwLmdldChuYW1lKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEBkZXNjcmlwdGlvbiBQcmV2aWVuZSBxdWUgc2UgZXNjcmliYW4gbGV0cmFzIGVuIGVsIGlucHV0IChVc2FyIGVuIGtleXByZXNzKVxyXG4gICAgICogQHBhcmFtIGV2ZW50IEV2ZW50byBkZWwgdGVjbGFkb1xyXG4gICAgICogQHJldHVybiBib29sZWFuXHJcbiAgICAgKiBAYXV0aG9yIE1pZ3VlbCBSYW3DrXJlelxyXG4gICAgICogQG1vZGlmaWNhZG8gY29tbyBvbmx5TnVtZXJvIHBhcmEgY29ycmVnaXIgY29kaWdvLCB1c2FyIGN1cnJlbmN5LWlucHV0IHNpIHF1aWVyZSB1c2FyIGRlY2ltYWxlcyBcclxuICAgICAqL1xyXG4gICAgcHVibGljIG9ubHlEZWNpbWFsKGV2ZW50PzogYW55KTogYm9vbGVhbiB7XHJcbiAgICAgICAgaWYgKCFpc05hTigrZXZlbnQua2V5KSAmJiBldmVudC5rZXlDb2RlICE9IDMyKSB7XHJcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlOyAgICAgIFxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQGRlc2NyaXB0aW9uIFByZXZpZW5lIHF1ZSBzZSBlc2NyaWJhbiBsZXRyYXMgZW4gZWwgaW5wdXQgKFVzYXIgZW4ga2V5cHJlc3MpXHJcbiAgICAgKiBAcGFyYW0gZXZlbnQgRXZlbnRvIGRlbCB0ZWNsYWRvXHJcbiAgICAgKiBAcmV0dXJuIGJvb2xlYW5cclxuICAgICAqIEBhdXRob3IgTWlndWVsIFJhbcOtcmV6XHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBvbmx5TnVtYmVycyhldmVudD86IGFueSk6IGJvb2xlYW4ge1xyXG4gICAgICAvLyBjb25zb2xlLmxvZyhldmVudCk7XHJcbiAgICAgIGlmICghaXNOYU4oK2V2ZW50LmtleSkgJiYgZXZlbnQua2V5Q29kZSAhPSAzMikge1xyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICAgLyoqXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gQWNlcHRhIHNvbG8gbnVtZXJvLCBkZWxldGUgeSBiYWNrc3BhY2VcclxuICAgICAqIEBwYXJhbSBldmVudCBFdmVudG8gZGVsIHRlY2xhZG9cclxuICAgICAqIEByZXR1cm4gYm9vbGVhblxyXG4gICAgICogQGF1dGhvciBEaW1hbHkgQ3Jlc3BvXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBvbmx5TnVtYmVyczIoZXZlbnQ/OiBhbnkpOiBib29sZWFuIHtcclxuICAgICAgaWYgKCFpc05hTigrZXZlbnQua2V5KSAgfHwgZXZlbnQua2V5Q29kZSA9PSA4IHx8IGV2ZW50LmtleUNvZGUgPT0gNDYpIHtcclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgIC8qKlxyXG4gICAgICogQGRlc2NyaXB0aW9uIEFjZXB0YSBzb2xvIG51bWVybyxndWlvbmVzLCBwYXJlbnRlc2lzLGVzcGFjaW9zXHJcbiAgICAgKiBAcGFyYW0gZXZlbnQgRXZlbnRvIGRlbCB0ZWNsYWRvXHJcbiAgICAgKiBAcmV0dXJuIGJvb2xlYW5cclxuICAgICAqIEBhdXRob3IgRGltYWx5IENyZXNwb1xyXG4gICAgICovXHJcbiAgICAgcHVibGljIHR5cGVOdW1iZXJzSHlwaGVuKGV2ZW50PzogYW55KTogYm9vbGVhbiB7XHJcbiAgICAgIGlmICghaXNOYU4oK2V2ZW50LmtleSkgfHwgZXZlbnQua2V5Q29kZSA9PSA4IHx8ICBldmVudC5rZXlDb2RlID09IDMyICB8fCBldmVudC5rZXlDb2RlID09IDQ2IFxyXG4gICAgICB8fCBldmVudC5rZXlDb2RlID09IDU4IHx8IGV2ZW50LmtleUNvZGUgPT0gNTcgfHwgZXZlbnQua2V5Q29kZSA9PSAxODkpIHtcclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgIC8qKlxyXG4gICAgICogQGRlc2NyaXB0aW9uIFBlcm1pdGUgKGEteiBBLVogw6Etw7ogw7HDkSDDvMOcICcsLikgcXVlIHNlIGVzY3JpYmFuIG51bWVyb3MgZW4gZWwgaW5wdXQgKFVzYXIgZW4ga2V5cHJlc3MpXHJcbiAgICAgKiBAcGFyYW0gZXZlbnQgRXZlbnRvIGRlbCB0ZWNsYWRvXHJcbiAgICAgKiBAcmV0dXJuIGJvb2xlYW5cclxuICAgICAqIEBkYXRlIDE0LTA1LTIwMjJcclxuICAgICAqIFxyXG4gICAgICovXHJcbiAgICAgIHB1YmxpYyB0eXBlTmFtZShldmVudD86IGFueSk6IGJvb2xlYW4ge1xyXG4gICAgICAgIGlmICgoZXZlbnQua2V5Pj0nYScgJiYgZXZlbnQua2V5PD0neicpICB8fCAoZXZlbnQua2V5Pj0nQScgJiYgZXZlbnQua2V5PD0nWicpIHx8ICBldmVudC5rZXk9PVwiw7FcIiB8fCAgZXZlbnQua2V5PT1cIsORXCIgXHJcbiAgICAgICAgICB8fCAoZXZlbnQua2V5Pj0nw6EnICYmIGV2ZW50LmtleTw9J8O6JykgfHwgZXZlbnQua2V5Pj0nw7wnICB8fCBldmVudC5rZXk+PSfDnCcgIHx8IGV2ZW50LmtleT09XCInXCIgIHx8IGV2ZW50LmtleUNvZGU9PTMyIFxyXG4gICAgICAgICAgfHwgIGV2ZW50LmtleT09XCIuXCIgfHwgIGV2ZW50LmtleT09XCIsXCIgfHwgZXZlbnQua2V5Q29kZSA9PSA4IHx8ICBldmVudC5rZXlDb2RlID09IDMyICB8fCBldmVudC5rZXlDb2RlID09IDQ2ICApe1xyXG4gICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgfVxyXG4gICAgLyoqXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gUGVybWl0ZSAoMC05IGEteiBBLVogw6Etw7ogw7HDkSDDvMOcICcsLi1fLzooKSUjwromJOKCrMKjwqUpIHF1ZSBzZSBlc2NyaWJhbiAgZW4gZWwgaW5wdXQgKFVzYXIgZW4ga2V5cHJlc3MpXHJcbiAgICAgKiBAcGFyYW0gZXZlbnQgRXZlbnRvIGRlbCB0ZWNsYWRvXHJcbiAgICAgKiBAcmV0dXJuIGJvb2xlYW5cclxuICAgICAqIEBkYXRlIDE0LTA1LTIwMjJcclxuICAgICAqIFxyXG4gICAgICovXHJcbiAgICAgIHB1YmxpYyB0eXBlVGV4dChldmVudD86IGFueSk6IGJvb2xlYW4geyAgICAgIFxyXG4gICAgICAgIGlmICgoZXZlbnQua2V5Pj0nYScgICYmIGV2ZW50LmtleTw9J3onKSB8fCAoZXZlbnQua2V5Pj0nQScgJiYgZXZlbnQua2V5PD0nWicpIHx8IGV2ZW50LmtleT09XCLDsVwiIHx8IGV2ZW50LmtleT09XCLDkVwiIFxyXG4gICAgICAgICAgfHwgKGV2ZW50LmtleT49J8OhJyAmJiBldmVudC5rZXk8PSfDuicpIHx8IGV2ZW50LmtleT09J8O8JyB8fCBldmVudC5rZXk9PSfDnCcgfHwgZXZlbnQua2V5PT1cIidcIiB8fCBpc05hTigrZXZlbnQua2V5KSBcclxuICAgICAgICAgIHx8IGV2ZW50LmtleT09XCIuXCIgIHx8ICBldmVudC5rZXk9PVwiLFwiIHx8IGV2ZW50LmtleT09XCImXCIgfHwgIGV2ZW50LmtleT09XCJfXCJ8fCBldmVudC5rZXk9PVwiLVwiIHx8IGV2ZW50LmtleT09XCIjXCJcclxuICAgICAgICAgIHx8IGV2ZW50LmtleT09XCLCulwiICB8fCAgZXZlbnQua2V5PT1cIiRcIiB8fCBldmVudC5rZXk9PVwiKFwiIHx8IGV2ZW50LmtleT09XCIpXCIgfHwgZXZlbnQua2V5PT1cIiVcIiB8fCBldmVudC5rZXk9PScgJ1xyXG4gICAgICAgICAgfHwgZXZlbnQua2V5PT0nOicgIHx8ZXZlbnQua2V5PT0nLyd8fCBldmVudC5rZXlDb2RlPT04MzY0IHx8ICBldmVudC5rZXlDb2RlPT0xNjUgfHxldmVudC5rZXlDb2RlPT0xNjMgXHJcbiAgICAgICAgICB8fCBldmVudC5rZXlDb2RlID09IDggfHwgIGV2ZW50LmtleUNvZGUgPT0gMzIgIHx8IGV2ZW50LmtleUNvZGUgPT0gNDYgKXtcclxuICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgIH0gICAgICAgIFxyXG4gICAgICAgIHJldHVybiBmYWxzZTsgICAgICBcclxuICAgICAgfVxyXG5cclxuICAgICAgLyoqXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gUGVybWl0ZSAoMC05IGEteiBBLVogw7HDkSAuLV8pIHF1ZSBzZSBlc2NyaWJhbiAgZW4gZWwgaW5wdXQgKFVzYXIgZW4ga2V5cHJlc3MpXHJcbiAgICAgKiBAcGFyYW0gZXZlbnQgRXZlbnRvIGRlbCB0ZWNsYWRvXHJcbiAgICAgKiBAcmV0dXJuIGJvb2xlYW5cclxuICAgICAqIEBkYXRlIDE0LTA1LTIwMjJcclxuICAgICAqL1xyXG4gICAgICAgcHVibGljIHR5cGVDb2RlKGV2ZW50PzogYW55KTogYm9vbGVhbiB7XHJcbiAgICAgICAgaWYgKChldmVudC5rZXk+PSdhJyAgJiYgZXZlbnQua2V5PD0neicpIHx8IChldmVudC5rZXk+PSdBJyAmJiBldmVudC5rZXk8PSdaJykgIHx8IGV2ZW50LmtleT09XCLDsVwiIHx8IGV2ZW50LmtleT09XCLDkVwiIFxyXG4gICAgICAgICAgfHxpc05hTigrZXZlbnQua2V5KSB8fCBldmVudC5rZXk9PVwiLlwiIHx8ICBldmVudC5rZXk9PVwiX1wiIHx8IGV2ZW50LmtleT09XCItXCIgfHwgZXZlbnQua2V5Q29kZSA9PSA4IHx8ICBldmVudC5rZXlDb2RlID09IDMyICB8fCBldmVudC5rZXlDb2RlID09IDQ2ICl7XHJcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICB9ICAgICAgICBcclxuICAgICAgICByZXR1cm4gZmFsc2U7ICAgICAgXHJcbiAgICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEBkZXNjcmlwdGlvbiBBYnJlIGVsIGRpYWxvZyBkZSBsYXMgY29tdW5pZGFkZXNcclxuICAgICAqIEByZXR1cm4gUHJvbWlzZTxNQ29tdW5pZGFkPlxyXG4gICAgICogQGF1dGhvciBNaWd1ZWwgUmFtw61yZXpcclxuICAgICAqL1xyXG4gICAgcHVibGljIGFzeW5jIG9wZW5EaWFsb2dVbmlkYWRlc1RyaWJ1dGFyaWFzKCk6IFByb21pc2U8YW55PiB7XHJcbiAgICAgIGxldCB1ZFRyaWJ1dGFyaWFzOiBNVW5pZGFkVHJpYnV0YXJpYVtdID0gYXdhaXQgdGhpcy5nZXRVbmlkYWRlc1RyaWJ1dGFyaWFzKCkudG9Qcm9taXNlKCk7XHJcbiAgICAgIGxldCBkaWFsb2dSZWYgPSB0aGlzLmRpYWxvZy5vcGVuKENhdGFsb2dvQ29tcG9uZW50LCB7XHJcbiAgICAgICAgZGF0YToge1xyXG4gICAgICAgICAgY29sdW1uczogWydhw7FvJywgJ25yb19kZWNyZXRvJywgJ2ZlY2hhX2RlY3JldG8nLCAnZW50cmFkYV92aWRlbmNpYScsICdwdWJsaWNhY2lvbl9nYWNldGEnLCAnbnJvX2dhY2V0YScsICd2YWxvcnV0J10sXHJcbiAgICAgICAgICB0aXRsZTogJ0NhdMOhbG9nbyBkZSBVbmlkYWRlcyBUcmlidXRhcmlhcycsXHJcbiAgICAgICAgICBkYXRhU291cmNlOiB1ZFRyaWJ1dGFyaWFzXHJcbiAgICAgICAgfSBhcyBJQ2F0YWxvZ28sXHJcbiAgICAgICAgd2lkdGg6ICcxMDAweCcsXHJcbiAgICAgICAgbWF4SGVpZ2h0OiAnOTB2aCdcclxuICAgICAgfSk7XHJcbiAgICAgIHJldHVybiBkaWFsb2dSZWYuYWZ0ZXJDbG9zZWQoKS50b1Byb21pc2UoKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEBkZXNjcmlwdGlvbiBPYnRpZW5lIGxhcyB1bmlkYWRlcyB0cmlidXRhcmlhc1xyXG4gICAgICogQHJldHVybiBPYnNlcnZhYmxlPGFueT5cclxuICAgICAqIEBhdXRob3IgTWlndWVsIFJhbcOtcmV6XHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBnZXRVbmlkYWRlc1RyaWJ1dGFyaWFzKCk6IE9ic2VydmFibGU8TVVuaWRhZFRyaWJ1dGFyaWFbXT4ge1xyXG4gICAgICBjb25zdCByZXF1ZXN0OiBJUmVxdWVzdCA9IHtcclxuICAgICAgICBvcGVyYWNpb246ICdvYnRlbmVyRGF0YScsXHJcbiAgICAgICAgc2lnZXNwX2NvbmV4aW9uOiB7XHJcbiAgICAgICAgICBzZXJ2aWRvcjogdGhpcy5VUkwsXHJcbiAgICAgICAgICB1c3VhcmlvOiB0aGlzLnVzdWFyaW9BY3Rpdm8uZ2V0SW50ZXJmYWNlKClcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0PE1VbmlkYWRUcmlidXRhcmlhW10+KGAke3RoaXMuVVJMfS9kYW8vY2ZnL3VuZHRyaWJ1dGFyaWFfZGFvLnBocGAsIHJlcXVlc3QpLnBpcGUoXHJcbiAgICAgICAgcmV0cnkoMyksXHJcbiAgICAgICAgY2F0Y2hFcnJvcih0aGlzLmhhbmRsZXJFcnJvciksXHJcbiAgICAgICAgbWFwKChyZXNwOiBhbnlbXSkgPT4gcmVzcC5tYXAoZWxlbWVudCA9PiBuZXcgTVVuaWRhZFRyaWJ1dGFyaWEoZWxlbWVudCkpKVxyXG4gICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQGRlc2NyaXB0aW9uIEFicmUgdW5hIG1vZGFsIGfDqW5lcmljYVxyXG4gICAgICogQHBhcmFtIGNvbHVtbnMgQ29sdW1uYXMgcXVlIHZhIGEgdGVuZXIgbGEgdGFibGFcclxuICAgICAqIEBwYXJhbSB0aXRsZSBUw610dWxvIGRlbCBkaWFsb2dcclxuICAgICAqIEBwYXJhbSBkYXRhU291cmNlIERhdGEgcXVlIHNlIHZhIGEgbW9zdHJhciBlbiBsYSB0YWJsYVxyXG4gICAgICogQHJldHVybiBQcm9taXNlPGFueT5cclxuICAgICAqIEBhdXRob3IgTWlndWVsIFJhbcOtcmV6XHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBhc3luYyBvcGVuQ2F0YWxvZ29HZW5lcmljbyhcclxuICAgICAgY29sdW1uczogc3RyaW5nW10sIFxyXG4gICAgICB0aXRsZTogc3RyaW5nLCBcclxuICAgICAgZGF0YVNvdXJjZTogYW55W10sIFxyXG4gICAgICBjb2x1bW5OYW1lczogc3RyaW5nW10gPSBudWxsLCBcclxuICAgICAgd2lkdGg6IHN0cmluZyA9ICcxMDAwcHgnLFxyXG4gICAgICBvcHRpb25zOiB7XHJcbiAgICAgICAgaGFzQmFja2Ryb3A/OiBib29sZWFuLFxyXG4gICAgICAgIGRpc2FibGVDbG9zZT86IGJvb2xlYW5cclxuICAgICAgfSA9IHtkaXNhYmxlQ2xvc2U6IGZhbHNlLCBoYXNCYWNrZHJvcDogZmFsc2V9XHJcbiAgICApOiBQcm9taXNlPGFueT4ge1xyXG4gICAgICBsZXQgZGlhbG9nUmVmID0gdGhpcy5kaWFsb2cub3BlbihDYXRhbG9nb0NvbXBvbmVudCwge1xyXG4gICAgICAgIGRhdGE6IHtcclxuICAgICAgICAgIGNvbHVtbnMsXHJcbiAgICAgICAgICB0aXRsZSxcclxuICAgICAgICAgIGRhdGFTb3VyY2UsXHJcbiAgICAgICAgICBjb2x1bW5OYW1lc1xyXG4gICAgICAgIH0gYXMgSUNhdGFsb2dvLFxyXG4gICAgICAgIHdpZHRoOiB3aWR0aCxcclxuICAgICAgICBtYXhIZWlnaHQ6ICc5MHZoJyxcclxuICAgICAgICBoYXNCYWNrZHJvcDogb3B0aW9ucy5oYXNCYWNrZHJvcCA/IG9wdGlvbnMuaGFzQmFja2Ryb3AgOiBmYWxzZSxcclxuICAgICAgICBkaXNhYmxlQ2xvc2U6IG9wdGlvbnMuZGlzYWJsZUNsb3NlID8gb3B0aW9ucy5kaXNhYmxlQ2xvc2UgOiBmYWxzZSxcclxuICAgICAgfSk7XHJcbiAgICAgIHJldHVybiBkaWFsb2dSZWYuYWZ0ZXJDbG9zZWQoKS50b1Byb21pc2UoKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEBkZXNjcmlwdGlvbiBBYnJlIHVuYSBtb2RhbCBnw6luZXJpY2EgY29uIDIgaW5wdXRzXHJcbiAgICAgKiBAcGFyYW0gY29sdW1ucyBDb2x1bW5hcyBxdWUgdmEgYSB0ZW5lciBsYSB0YWJsYVxyXG4gICAgICogQHBhcmFtIHRpdGxlIFTDrXR1bG8gZGVsIGRpYWxvZ1xyXG4gICAgICogQHBhcmFtIGRhdGFTb3VyY2UgRGF0YSBxdWUgc2UgdmEgYSBtb3N0cmFyIGVuIGxhIHRhYmxhXHJcbiAgICAgKiBAcmV0dXJuIFByb21pc2U8YW55PlxyXG4gICAgICogQGF1dGhvciBDYXJsb3MgQWxib3Jub3pcclxuICAgICAqL1xyXG4gICAgcHVibGljIGFzeW5jIG9wZW5DYXRhbG9nb0Rvc0lucHV0cyhcclxuICAgICAgY29sdW1uczogc3RyaW5nW10sXHJcbiAgICAgIHRpdGxlOiBzdHJpbmcsIFxyXG4gICAgICBkYXRhU291cmNlOiBhbnlbXSwgXHJcbiAgICAgIGZpbHRlckRhdGE6IGZpbHRlckRhdGFbXSxcclxuICAgICAgY29sdW1uTmFtZXM6IHN0cmluZ1tdID0gbnVsbCxcclxuICAgICAgd2lkdGg6IHN0cmluZyA9IFwiMTAwMHB4XCJcclxuICAgICk6IFByb21pc2U8YW55PiB7XHJcbiAgICAgIGxldCBkaWFsb2dSZWYgPSB0aGlzLmRpYWxvZy5vcGVuKENhdGFsb2dvRG9ibGVJbnB1dENvbXBvbmVudCwge1xyXG4gICAgICAgIGRhdGE6IHtcclxuICAgICAgICAgIGNvbHVtbnMsXHJcbiAgICAgICAgICB0aXRsZSxcclxuICAgICAgICAgIGRhdGFTb3VyY2UsXHJcbiAgICAgICAgICBjb2x1bW5OYW1lcyxcclxuICAgICAgICAgIGZpbHRlckRhdGFcclxuICAgICAgICB9IGFzIElDYXRhbG9nbyxcclxuICAgICAgICB3aWR0aDogd2lkdGgsXHJcbiAgICAgICAgbWF4SGVpZ2h0OiAnOTB2aCdcclxuICAgICAgfSk7XHJcbiAgICAgIHJldHVybiBkaWFsb2dSZWYuYWZ0ZXJDbG9zZWQoKS50b1Byb21pc2UoKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEBkZXNjcmlwdGlvbiBBYnJlIGVsIGRpYWxvZyBkZSBsYXMgY29tdW5pZGFkZXNcclxuICAgICAqIEByZXR1cm4gUHJvbWlzZTxNQ29tdW5pZGFkPlxyXG4gICAgICogQGF1dGhvciBNaWd1ZWwgUmFtw61yZXpcclxuICAgICAqL1xyXG4gICAgcHVibGljIGFzeW5jIG9wZW5EaWFsb2dDb211bmlkYWQoKTogUHJvbWlzZTxNQ29tdW5pZGFkPiB7XHJcbiAgICAgIGxldCBjb211bmlkYWRlczogTUNvbXVuaWRhZFtdID0gYXdhaXQgdGhpcy5nZXRDb211bmlkYWRlcygpLnRvUHJvbWlzZSgpO1xyXG4gICAgICBsZXQgZGlhbG9nUmVmID0gdGhpcy5kaWFsb2cub3BlbihDYXRhbG9nb0NvbXBvbmVudCwge1xyXG4gICAgICAgIGRhdGE6IHtcclxuICAgICAgICAgIGNvbHVtbnM6IFsncHJlZmlqbycsICdwYWlzJywgJ2VzdGFkbycsICdtdW5pY2lwaW8nLCAncGFycm9xdWlhJywgJ2NvZGlnbycsICdjb211bmlkYWQnXSxcclxuICAgICAgICAgIHRpdGxlOiAnQ2F0w6Fsb2dvIGRlIENvbXVuaWRhZGVzJyxcclxuICAgICAgICAgIGRhdGFTb3VyY2U6IGNvbXVuaWRhZGVzXHJcbiAgICAgICAgfSBhcyBJQ2F0YWxvZ28sXHJcbiAgICAgICAgd2lkdGg6ICcxMDAwcHgnLFxyXG4gICAgICAgIG1heEhlaWdodDogJzkwdmgnXHJcbiAgICAgIH0pO1xyXG4gICAgICByZXR1cm4gZGlhbG9nUmVmLmFmdGVyQ2xvc2VkKCkudG9Qcm9taXNlKCk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gT2J0aWVuZSBsYXMgY29tdW5pZGFkZXNcclxuICAgICAqIEByZXR1cm4gT2JzZXJ2YWJsZTxNQ29tdW5pZGFkW10+XHJcbiAgICAgKiBAYXV0aG9yIE1pZ3VlbCBSYW3DrXJlelxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgZ2V0Q29tdW5pZGFkZXMoKTogT2JzZXJ2YWJsZTxNQ29tdW5pZGFkW10+IHtcclxuICAgICAgY29uc3QgcmVxdWVzdDogSVJlcXVlc3QgPSB7XHJcbiAgICAgICAgb3BlcmFjaW9uOiAnb2J0ZW5lckRhdGEnLFxyXG4gICAgICAgIHNpZ2VzcF9jb25leGlvbjoge1xyXG4gICAgICAgICAgc2Vydmlkb3I6IHRoaXMuVVJMLFxyXG4gICAgICAgICAgdXN1YXJpbzogdGhpcy51c3VhcmlvQWN0aXZvLmdldEludGVyZmFjZSgpXHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiB0aGlzLmh0dHAucG9zdDxNQ29tdW5pZGFkW10+KGAke3RoaXMuVVJMfS9kYW8vY2ZnL2NvbXVuaWRhZGVzX2Rhby5waHBgLCByZXF1ZXN0KS5waXBlKCAgICAgXHJcbiAgICAgICAgbWFwKChyZXNwOiBhbnlbXSkgPT4gcmVzcC5tYXAoZWxlbWVudCA9PiBuZXcgTUNvbXVuaWRhZChlbGVtZW50KSkpXHJcbiAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gQWJyZSBlbCBkaWFsb2cgZGUgbGFzIGxhcyBtb25lZGFzXHJcbiAgICAgKiBAcmV0dXJuIFByb21pc2U8TU1vbmVkYT5cclxuICAgICAqIEBhdXRob3IgTWlndWVsIFJhbcOtcmV6XHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBhc3luYyBvcGVuRGlhbG9nTW9uZWRhcygpOiBQcm9taXNlPE1Nb25lZGE+IHtcclxuICAgICAgbGV0IGNvaW5zOiBNTW9uZWRhW10gPSBhd2FpdCB0aGlzLmdldE1vbmVkYXMoJ3RvZGFzJykudG9Qcm9taXNlKCk7XHJcbiAgICAgIGxldCBkaWFsb2dSZWYgPSB0aGlzLmRpYWxvZy5vcGVuKENhdGFsb2dvQ29tcG9uZW50LCB7XHJcbiAgICAgICAgZGF0YToge1xyXG4gICAgICAgICAgY29sdW1uczogWydjb2RpZ28nLCAnZGVub21pbmFjaW9uJywgJ2NvZGlnb0lzbycsICdzaW1ib2xvJ10sXHJcbiAgICAgICAgICB0aXRsZTogJ0NhdMOhbG9nbyBkZSBNb25lZGFzJyxcclxuICAgICAgICAgIGNvbHVtbk5hbWVzOiBbJ2PDs2RpZ28nLCAnZGVub21pbmFjacOzbicsICdpc28nLCAnc2ltYm9sbyddLFxyXG4gICAgICAgICAgZGF0YVNvdXJjZTogY29pbnNcclxuICAgICAgICB9IGFzIElDYXRhbG9nbyxcclxuICAgICAgICB3aWR0aDogJzEwMDBweCcsXHJcbiAgICAgICAgbWF4SGVpZ2h0OiAnOTB2aCdcclxuICAgICAgfSk7XHJcbiAgICAgIHJldHVybiBkaWFsb2dSZWYuYWZ0ZXJDbG9zZWQoKS50b1Byb21pc2UoKTtcclxuICAgIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQGRlc2NyaXB0aW9uIE9idGllbmUgbGFzIG1vbmVkYXNcclxuICAgKiBAcmV0dXJuIE9ic2VydmFibGU8TU1vbmVkYVtdPlxyXG4gICAqIEBhdXRob3IgTWlndWVsIFJhbcOtcmV6XHJcbiAgICogYWN0dWFsaXphZG8gNC0xMi0yMDIyXHJcbiAgICogQHBhcmFtIHRpcG8gOnN0cmluZyB7J3RvZGFzJywndW5vJywnYWN0dWFsfVxyXG4gICAqIEBwYXJhbSBpZCA6IG51bWJlclxyXG4gICAqIEByZXR1cm5zIFxyXG4gICAqLyBcclxuICAgIFxyXG4gICAgXHJcbiAgICBwdWJsaWMgZ2V0TW9uZWRhcyh0aXBvOnN0cmluZyxpZD86bnVtYmVyKTogT2JzZXJ2YWJsZTxNTW9uZWRhW10+IHsgICAgIFxyXG4gICAgICByZXR1cm4gdGhpcy5odHRwLmdldDxNTW9uZWRhW10+KGAke3RoaXMuVVJMfS9kYW8vY2ZnL21vbmVkYV9kYW8ucGhwP3RpcG89JHt0aXBvfSZpZD0ke2lkfWAsXHJcbiAgICAgIHsgaGVhZGVyczogdGhpcy5nZXRIdHRwSGVhZGVycygpfSkucGlwZSggICAgICBcclxuICAgICAgICBtYXAoKHJlc3A6IGFueSkgPT4gcmVzcC5kYXRhLm1hcChlbGVtZW50ID0+IG5ldyBNTW9uZWRhKGVsZW1lbnQpKSlcclxuICAgICAgKTtcclxuICAgIH1cclxuXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBARGVzY3JpcHRpb246IE9idGllbmUgbGEgdGFzYSBkZSBjYW1iaW8gYXNvY2lhZGFzIGEgdW5vIG8gdmFyaWFzIG1vbmVkYXNcclxuICAgICAqIEBwYXJhbSB0aXBvIHN0cmluZ1xyXG4gICAgICogQHBhcmFtIGlkIGNvZGlnbyBtb25lZGFcclxuICAgICAqIEByZXR1cm5zIGFycmF5L251bGxcclxuICAgICAqIEB0aXBvOmFsbC0+dG9kYXMsIChtb25lZGEtPnVuYSBtb25lZGEgaWQtPmlkIGRlIG1vbmVkYSlcclxuICAgICAqL1xyXG4gICAgcHVibGljIGdldEN1cnJlbmN5RXhjaGFuZ2VSYXRlKHRpcG86ICdhbGwnfCAnbW9uZWRhJz0gbnVsbCwgaWQ/Om51bWJlcik6IE9ic2VydmFibGU8TUV4Y2hhbmdlUmF0ZVtdPiB7ICAgICBcclxuICAgICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8TUV4Y2hhbmdlUmF0ZVtdPihgJHt0aGlzLlVSTH0vZGFvL2NmZy90YXNhX2NhbWJpb19kYW8ucGhwP3RpcG89JHt0aXBvfSZpZD0ke2lkfWAsXHJcbiAgICAgIHsgaGVhZGVyczogdGhpcy5nZXRIdHRwSGVhZGVycygpfSkucGlwZSggICAgICAgIFxyXG4gICAgICAgIG1hcCgocmVzcDogYW55KSA9PiByZXNwLmRhdGEubWFwKGVsZW1lbnQgPT4gbmV3IE1FeGNoYW5nZVJhdGUoZWxlbWVudCkpKVxyXG4gICAgICApO1xyXG4gICAgfVxyXG5cclxuXHJcblxyXG4gIFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQGRlc2NyaXB0aW9uIEFicmUgZWwgZGlhbG9nIGRlIGxhcyBsYXMgY3VlbnRhcyBjb250YWJsZXMgKEN1ZW50YXMgSW5zdGl0dWNpb25hbGVzKVxyXG4gICAgICogQHJldHVybiBQcm9taXNlPE1jdWVudGFJbnN0aXR1Y2lvbmFsPlxyXG4gICAgICogQGF1dGhvciBNaWd1ZWwgUmFtw61yZXpcclxuICAgICAqL1xyXG4gICAgcHVibGljIGFzeW5jIG9wZW5EaWFsb2dDdWVudGFzSW5zdGl0dWNpb25hbGVzKGlkRW50ZXJwcmlzZTpudW1iZXIsIHBlcmlvZG9GaXNjYWw6bnVtYmVyKTogUHJvbWlzZTxNQ3VlbnRhSW5zdGl0dWNpb25hbD4ge1xyXG4gICAgICBsZXQgYWNjb3VudHM6IE1DdWVudGFJbnN0aXR1Y2lvbmFsW10gPSBhd2FpdCB0aGlzLmdldEN1ZW50YXNJbnN0aXR1Y2lvbmFsZXMoaWRFbnRlcnByaXNlLCBwZXJpb2RvRmlzY2FsKS50b1Byb21pc2UoKTtcclxuICAgICAgbGV0IGRpYWxvZ1JlZiA9IHRoaXMuZGlhbG9nLm9wZW4oQ2F0YWxvZ29Db21wb25lbnQsIHtcclxuICAgICAgICBkYXRhOiB7XHJcbiAgICAgICAgICBjb2x1bW5zOiBbJ2N1ZW50YScsICdkZW5vbWluYWNpb24nXSxcclxuICAgICAgICAgIGNvbHVtbk5hbWVzOiBbJ2N1ZW50YScsICdkZW5vbWluYWNpw7NuJ10sXHJcbiAgICAgICAgICB0aXRsZTogJ0NhdMOhbG9nbyBkZSBQbGFuIGRlIEN1ZW50YSBJbnN0aXR1Y2lvbmFsJyxcclxuICAgICAgICAgIGRhdGFTb3VyY2U6IGFjY291bnRzXHJcbiAgICAgICAgfSBhcyBJQ2F0YWxvZ28sXHJcbiAgICAgICAgd2lkdGg6ICcxMDAwcHgnLFxyXG4gICAgICAgIG1heEhlaWdodDogJzkwdmgnXHJcbiAgICAgIH0pO1xyXG4gICAgICByZXR1cm4gZGlhbG9nUmVmLmFmdGVyQ2xvc2VkKCkudG9Qcm9taXNlKCk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gT2J0aWVuZSBsYXMgY3VlbnRhcyBjb250YWJsZXMgKEN1ZW50YXMgSW5zdGl0dWNpb25hbGVzKVxyXG4gICAgICogQHJldHVybiBPYnNlcnZhYmxlPE1DdWVudGFJbnN0aXR1Y2lvbmFsW10+XHJcbiAgICAgKiBAYXV0aG9yIE1pZ3VlbCBSYW3DrXJlelxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgZ2V0Q3VlbnRhc0luc3RpdHVjaW9uYWxlcyhpZEVudGVycHJpc2U6bnVtYmVyLCBwZXJpb2RvRmlzY2FsOm51bWJlciwgaW52ZW50b3J5PzogYm9vbGVhbik6IE9ic2VydmFibGU8TUN1ZW50YUluc3RpdHVjaW9uYWxbXT4ge1xyXG4gICAgICByZXR1cm4gdGhpcy5odHRwLmdldDxNQ3VlbnRhSW5zdGl0dWNpb25hbFtdPihgJHt0aGlzLlVSTH0vZGFvL3NjZy9jdWVudGFzX2Rhby5waHA/ZT0ke2lkRW50ZXJwcmlzZX0mcGVyaW9kbz0ke3BlcmlvZG9GaXNjYWx9JHsoaW52ZW50b3J5KT8gJyZpbnZlbnRvcnk9dHJ1ZScgOiAnJ31gLFxyXG4gICAgICB7IGhlYWRlcnM6IHRoaXMuZ2V0SHR0cEhlYWRlcnMoKSB9KS5waXBlKCAgICAgIFxyXG4gICAgICAgIG1hcCgocmVzcDogYW55KSA9PiByZXNwLmRhdGEubWFwKGVsZW1lbnQgPT4gbmV3IE1DdWVudGFJbnN0aXR1Y2lvbmFsKGVsZW1lbnQpKSlcclxuICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEBkZXNjcmlwdGlvbiBBYnJlIGVsIGRpYWxvZyBkZSBsYXMgY3VlbnRhcyBkZSBwcmVzdXB1ZXN0byAoUmVjdXJzb3MgeSBFZ3Jlc29zKVxyXG4gICAgICogQHJldHVybiBQcm9taXNlPE1DdWVudGFQcmVzdXB1ZXN0bz5cclxuICAgICAqIEBhdXRob3IgTWlndWVsIFJhbcOtcmV6XHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBhc3luYyBvcGVuRGlhbG9nQ3VlbnRhc1ByZXN1cHVlc3RvKGlkRW50ZXJwcmlzZTpudW1iZXIscGVyaW9kb0Zpc2NhbDpudW1iZXIpOiBQcm9taXNlPE1DdWVudGFQcmVzdXB1ZXN0bz4ge1xyXG4gICAgICBsZXQgYWNjb3VudHM6IE1DdWVudGFQcmVzdXB1ZXN0b1tdID0gYXdhaXQgdGhpcy5nZXRDdWVudGFzUHJlc3VwdWVzdG8oaWRFbnRlcnByaXNlLHBlcmlvZG9GaXNjYWwpLnRvUHJvbWlzZSgpO1xyXG4gICAgICBsZXQgZGlhbG9nUmVmID0gdGhpcy5kaWFsb2cub3BlbihDYXRhbG9nb0NvbXBvbmVudCwge1xyXG4gICAgICAgIGRhdGE6IHtcclxuICAgICAgICAgIGNvbHVtbk5hbWVzOiBbJ2N1ZW50YScsICdkZW5vbWluYWNpw7NuJ10sXHJcbiAgICAgICAgICBjb2x1bW5zOiBbJ2N1ZW50YScsICdkZW5vbWluYWNpb24nXSxcclxuICAgICAgICAgIHRpdGxlOiAnQ2F0w6Fsb2dvIGRlIEN1ZW50YXMgZGUgUHJlc3VwdWVzdG8nLFxyXG4gICAgICAgICAgZGF0YVNvdXJjZTogYWNjb3VudHNcclxuICAgICAgICB9IGFzIElDYXRhbG9nbyxcclxuICAgICAgICB3aWR0aDogJzEwMDBweCcsXHJcbiAgICAgICAgbWF4SGVpZ2h0OiAnOTB2aCdcclxuICAgICAgfSk7XHJcbiAgICAgIHJldHVybiBkaWFsb2dSZWYuYWZ0ZXJDbG9zZWQoKS50b1Byb21pc2UoKTtcclxuICAgICBcclxuICAgIH1cclxuXHJcbiAgIC8qKiAgICBcclxuICAgICogQGRlc2NyaXB0aW9uIE9idGllbmUgbGFzIGN1ZW50YXMgZGUgcmVjdXJzb3MgeSBlZ3Jlc29zXHJcbiAgICAqIEByZXR1cm4gT2JzZXJ2YWJsZTxNQ3VlbnRhUHJlc3VwdWVzdG8+XHJcbiAgICAqIEBhdXRob3IgTWlndWVsIFJhbcOtcmV6ICAgICAgICAgXHJcbiAgICAqIEBwYXJhbSBmaWx0ZXIge251bWVybyxzbm8sQyxlZ3Jlc28saW5ncmVzb31cclxuICAgICogQHBhcmFtIGlkRW50ZXJwcmlzZSBcclxuICAgICogQHBhcmFtIHBlcmlkb0Zpc2NhbCBcclxuICAgICogQHJldHVybnMgXHJcbiAgICAqL1xyXG4gICAgcHVibGljIGdldEN1ZW50YXNQcmVzdXB1ZXN0byhpZEVudGVycHJpc2U6bnVtYmVyLHBlcmlkb0Zpc2NhbDpudW1iZXIsZmlsdGVyOnN0cmluZz0nZGVmYXVsdCcpOiBPYnNlcnZhYmxlPE1DdWVudGFQcmVzdXB1ZXN0b1tdPiB7XHJcbiAgICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PE1DdWVudGFQcmVzdXB1ZXN0bz4oYCR7dGhpcy5VUkx9L2Rhby9zcGcvcGxhbl9jdWVudGFzX3JlY3Vyc29zX2VncmVzb3NfZGFvLnBocD9maWx0ZXI9JHtmaWx0ZXJ9JmU9JHtpZEVudGVycHJpc2V9JnBlcj0ke3Blcmlkb0Zpc2NhbH1gLFxyXG4gICAgICB7IGhlYWRlcnM6IHRoaXMuZ2V0SHR0cEhlYWRlcnMoKSB9KS5waXBlKCBtYXAoKHJlczogYW55KSA9PiByZXMuZGF0YS5tYXAoZWxlbWVudCA9PiBuZXcgTUN1ZW50YVByZXN1cHVlc3RvKGVsZW1lbnQpKSkpO1xyXG4gICAgfVxyXG5cclxuXHJcbiAgICAvKipcclxuICAgICAqIEBkZXNjcmlwdGlvbiBBYnJlIGVsIGPDoXRhbG9nbyBkZSBjdWVudGFzIGRlIGxhIHRhYmxhIFwic3BnX2N1ZW50YXNcIlxyXG4gICAgICogQHJldHVybnMgUHJvbWlzZTxNQ3VlbnRhRWdyZXNvcz5cclxuICAgICAqIEBhdXRob3IgQ2FybG9zIEFsYm9ybm96XHJcbiAgICAgKiBAcGFyYW1zIHByZXN1cHVlc3RvOiBJbmRpY2Egc2kgc2UgYSB0cmFiYWphciBjb24gZXN0cnVjdHVyYSBkZSBwcmVzdXB1ZXN0byBvIG5vXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBhc3luYyBvcGVuQ2F0YWxvZ29DdWVudGFzRWdyZXNvKGlkRW50ZXJwcmlzZTpudW1iZXIsIHBlcmlvZG9GaXNjYWw6bnVtYmVyLHRpdHVsbzogc3RyaW5nLCBwcmVzdXB1ZXN0bzogYm9vbGVhbiA9IHRydWUsYW5jaG86IHN0cmluZyA9IFwiMTAwMHB4XCIpOiBQcm9taXNlPE1DdWVudGFFZ3Jlc29zPntcclxuICAgICAgbGV0IGN1ZW50YXM6IE1DdWVudGFFZ3Jlc29zW10gPSBbXTtcclxuICAgICAgYXdhaXQgdGhpcy5nZXRFeHBlbnNlQWNjb3VudHMoaWRFbnRlcnByaXNlLHBlcmlvZG9GaXNjYWwpLnRvUHJvbWlzZSgpLnRoZW4ocmVzID0+IHtcclxuICAgICAgICBjdWVudGFzID0gcmVzXHJcbiAgICAgICAgY3VlbnRhcyA9IGN1ZW50YXMuZmlsdGVyKGUgPT4ge1xyXG4gICAgICAgICAgcmV0dXJuIGUuc3RhdHVzID09IFwiQ1wiXHJcbiAgICAgICAgfSkubWFwKGUgPT4ge1xyXG4gICAgICAgICAgZVsncHJvdlN0YXR1cyddID0gZS5zdGF0dXMgPT0gXCJDXCIgPyBcIk1vdmltaWVudG9zXCIgOiBcIlRvdGFsaXphZG9yYVwiXHJcbiAgICAgICAgICByZXR1cm4gZTtcclxuICAgICAgICB9KVxyXG4gICAgICB9KVxyXG4gICAgICBpZiAocHJlc3VwdWVzdG8pIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5vcGVuQ2F0YWxvZ29Eb3NJbnB1dHMoXHJcbiAgICAgICAgICBbXCJjdWVudGFcIixcImRlbm9taW5hY2lvblwiLFwiZXN0cnVjdHVyYVwiLFwicHJvdlN0YXR1c1wiXSxcclxuICAgICAgICAgIHRpdHVsbyxcclxuICAgICAgICAgIGN1ZW50YXMsXHJcbiAgICAgICAgICBbe1xyXG4gICAgICAgICAgICBwbGFjZWhvbGRlcjogXCJDdWVudGFcIixcclxuICAgICAgICAgICAgcHJvcGVydHk6IFwiY3VlbnRhXCJcclxuICAgICAgICAgIH0sIHtcclxuICAgICAgICAgICAgcGxhY2Vob2xkZXI6IFwiRXN0cnVjdHVyYVwiLFxyXG4gICAgICAgICAgICBwcm9wZXJ0eTogXCJlc3RydWN0dXJhXCJcclxuICAgICAgICAgIH1dLFxyXG4gICAgICAgICAgW1wiQ3VlbnRhXCIsIFwiRGVub21pbmFjacOzblwiLCBcIkVzdHJ1Y3R1cmFcIiwgXCJFc3RhZG9cIl0sXHJcbiAgICAgICAgICBhbmNob1xyXG4gICAgICAgIClcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBsZXQgZmlsdGVyZWRBY2NvdW50czogTUN1ZW50YUVncmVzb3NbXSA9IFtdO1xyXG4gICAgICAgIGN1ZW50YXMuZm9yRWFjaChjID0+IHtcclxuICAgICAgICAgIGlmICghZmlsdGVyZWRBY2NvdW50cy5maW5kKGUgPT4gZS5jdWVudGEgPT0gYy5jdWVudGEpKSB7XHJcbiAgICAgICAgICAgIGZpbHRlcmVkQWNjb3VudHMucHVzaChjKVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pXHJcbiAgICAgICAgcmV0dXJuIHRoaXMub3BlbkNhdGFsb2dvR2VuZXJpY28oXHJcbiAgICAgICAgICBbXCJjdWVudGFcIixcImRlbm9taW5hY2lvblwiLFwicHJvdlN0YXR1c1wiXSxcclxuICAgICAgICAgIHRpdHVsbyxcclxuICAgICAgICAgIGZpbHRlcmVkQWNjb3VudHMsXHJcbiAgICAgICAgICBbXCJDdWVudGFcIiwgXCJEZW5vbWluYWNpw7NuXCIsIFwiRXN0YWRvXCJdLFxyXG4gICAgICAgICAgYW5jaG9cclxuICAgICAgICApXHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0RXhwZW5zZUFjY291bnRzKGlkRW50ZXJwcmlzZTpudW1iZXIscGVyaW9kb0Zpc2NhbDpudW1iZXIsZXN0YXR1cz86c3RyaW5nKTogT2JzZXJ2YWJsZTxNQ3VlbnRhRWdyZXNvc1tdPntcclxuICAgICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8TUN1ZW50YUVncmVzb3NbXT4oYCR7dGhpcy5VUkx9L2Rhby9zcGcvY3VlbnRhc19lZ3Jlc29zX2Rhby5waHA/ZT0ke2lkRW50ZXJwcmlzZX0mcGVyaW9kbz0ke3BlcmlvZG9GaXNjYWx9JmVzdD0ke2VzdGF0dXN9YCxcclxuICAgICAge2hlYWRlcnM6IHRoaXMuZ2V0SHR0cEhlYWRlcnMoKX0pXHJcbiAgICAgIC5waXBlKFxyXG4gICAgICAgIG1hcCgocmVzOmFueSkgPT4gcmVzLmRhdGEubWFwKGVsZW1lbnQgPT4gbmV3IE1DdWVudGFFZ3Jlc29zKGVsZW1lbnQpKSlcclxuICAgICAgKVxyXG4gICAgfVxyXG5cclxuXHJcbiAgIFxyXG4gICAgLyoqXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gQWJyZSBlbCBjw6F0YWxvZ28gZGUgY3VlbnRhcyBkZSBsYSB0YWJsYSBcInNjZ19wbGFuX3VuaWNvX3JlXCJcclxuICAgICAqIEByZXR1cm5zIFByb21pc2U8TUN1ZW50YVByZXN1cHVlc3RvPlxyXG4gICAgICogQGF1dGhvciBDYXJsb3MgQWxib3Jub3pcclxuICAgICAqIEBwYXJhbXMgZmlsdHJvOiBJbmRpY2EgYmFqbyBxdWUgcGFyYW1ldHJvcyBzZSB2YSBhIGZpbHRyYXIgZWwgY2F0YWxvZ29cclxuICAgICAqL1xyXG4gICAgcHVibGljIGFzeW5jIG9wZW5DYXRhbG9nb0N1ZW50YXNQcmVzdXNwdWVzdG8oICAgICAgXHJcbiAgICAgIHRpdHVsbzogc3RyaW5nLCAgIFxyXG4gICAgICBpZEVudGVycHJpc2U6bnVtYmVyLFxyXG4gICAgICBwZXJpb2RvRmlzY2FsOm51bWJlciwgICBcclxuICAgICAgZmlsdHJvOiBmaWx0cm9DdWVudGFzUHJlc3VwdWVzdG8gPSBudWxsLFxyXG4gICAgICBhbmNobzogc3RyaW5nID0gJzEwMDBweCcsICAgICBcclxuICAgICk6IFByb21pc2U8TUN1ZW50YVByZXN1cHVlc3RvPiB7XHJcbiAgICAgIGxldCBjdWVudGFzOiBNQ3VlbnRhUHJlc3VwdWVzdG9bXSA9IFtdO1xyXG4gICAgICBcclxuICAgICAgYXdhaXQgdGhpcy5nZXRDdWVudGFzUHJlc3VwdWVzdG8oaWRFbnRlcnByaXNlLHBlcmlvZG9GaXNjYWwpLnRvUHJvbWlzZSgpLnRoZW4oKHJlcykgPT4ge1xyXG4gICAgICAgIGN1ZW50YXMgPSByZXM7XHJcbiAgICAgICAgaWYgKGZpbHRybykge1xyXG4gICAgICAgICAgaWYgKGZpbHRyby5lc3RhZG8pIHtcclxuICAgICAgICAgICAgY3VlbnRhcyA9IGN1ZW50YXMuZmlsdGVyKGMgPT4ge1xyXG4gICAgICAgICAgICAgIHJldHVybiBjLnN0YXR1cyA9PSBmaWx0cm8uZXN0YWRvXHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBpZiAoZmlsdHJvLnRpcG8pIHtcclxuICAgICAgICAgICAgY3VlbnRhcyA9IGN1ZW50YXMuZmlsdGVyKGMgPT4ge1xyXG4gICAgICAgICAgICAgIHJldHVybiBjLnRpcG8gPT0gZmlsdHJvLnRpcG9cclxuICAgICAgICAgICAgfSlcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgY3VlbnRhcyA9IGN1ZW50YXMubWFwKGUgPT4ge1xyXG4gICAgICAgICAgZVsncHJvdlN0YXR1cyddID0gZS5zdGF0dXMgPT0gXCJDXCIgPyBcIk1vdmltaWVudG9zXCIgOiBcIlRvdGFsaXphZG9yYVwiXHJcbiAgICAgICAgICBlWydwcm92VHlwZSddID0gZS5zdGF0dXMgPT0gXCJSXCIgPyBcIlJlY3Vyc29zXCIgOiBcIkluZ3Jlc29zXCJcclxuICAgICAgICAgIHJldHVybiBlXHJcbiAgICAgICAgfSlcclxuICAgICAgfSlcclxuICAgICAgcmV0dXJuIHRoaXMub3BlbkNhdGFsb2dvR2VuZXJpY28oXHJcbiAgICAgICAgW1wiY3VlbnRhXCIsXCJkZW5vbWluYWNpb25cIixcInByb3ZTdGF0dXNcIixcInByb3ZUeXBlXCJdLFxyXG4gICAgICAgIHRpdHVsbyxcclxuICAgICAgICBjdWVudGFzLFxyXG4gICAgICAgIFtcIkN1ZW50YVwiLFwiRGVub21pbmFjacOzblwiLFwiRXN0YWRvXCIsXCJUaXBvXCJdLFxyXG4gICAgICAgIGFuY2hvXHJcbiAgICAgIClcclxuICAgIH1cclxuXHJcblxyXG5cclxuXHJcbiAgICAvKipcclxuICAgICAqIEBkZXNjcmlwdGlvbiBBYnJlIGVsIGPDoXRhbG9nbyBkZSBjdWVudGFzIGRlIGxhIHRhYmxhIFwic3BpX2N1ZW50YXNcIlxyXG4gICAgICogQHJldHVybnMgUHJvbWlzZTxNQ3VlbnRhSW5ncmVzb3M+XHJcbiAgICAgKiBAYXV0aG9yIENhcmxvcyBBbGJvcm5velxyXG4gICAgICogQHBhcmFtcyBwcmVzdXB1ZXN0bzogSW5kaWNhIHNpIHNlIGEgdHJhYmFqYXIgY29uIGVzdHJ1Y3R1cmEgZGUgcHJlc3VwdWVzdG8gbyBub1xyXG4gICAgICovXHJcbiAgICBwdWJsaWMgYXN5bmMgb3BlbkNhdGFsb2dvQ3VlbnRhc0luZ3Jlc28oaWRFbnRlcnByaXNlOm51bWJlcixwZXJpb2RvRmlzY2FsOm51bWJlcixuaXZlbDpudW1iZXIsaWRFUDpudW1iZXIsdGl0dWxvOiBzdHJpbmcsYW5jaG86IHN0cmluZyA9IFwiMTAwMHB4XCIsIHByZXN1cHVlc3RvOmJvb2xlYW49ZmFsc2VcclxuICAgICk6IFByb21pc2U8TUN1ZW50YUluZ3Jlc29zPntcclxuICAgICAgbGV0IGN1ZW50YXM6IE1DdWVudGFJbmdyZXNvc1tdID0gW107XHJcbiAgICAgIGF3YWl0IHRoaXMuZ2V0SW5jb21lQWNjb3VudHMoJ2RlZmF1bHQnLGlkRW50ZXJwcmlzZSxwZXJpb2RvRmlzY2FsLG5pdmVsLGlkRVApLnRvUHJvbWlzZSgpLnRoZW4oKHJlczogSVJlc3BvbnNlKSA9PiB7XHJcbiAgICAgICAgY3VlbnRhcyA9IHJlcy5kYXRhXHJcbiAgICAgICAgY3VlbnRhcyA9IGN1ZW50YXMuZmlsdGVyKGUgPT4ge1xyXG4gICAgICAgICAgcmV0dXJuIGUuZXN0YWRvID09IFwiQ1wiXHJcbiAgICAgICAgfSkubWFwKGUgPT4ge1xyXG4gICAgICAgICAgZVsncHJvdlN0YXR1cyddID0gZS5lc3RhZG8gPT0gXCJDXCIgPyBcIk1vdmltaWVudG9zXCIgOiBcIlRvdGFsaXphZG9yYVwiXHJcbiAgICAgICAgICByZXR1cm4gZTtcclxuICAgICAgICB9KVxyXG4gICAgICB9KVxyXG4gICAgICBpZiAocHJlc3VwdWVzdG8pIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5vcGVuQ2F0YWxvZ29Eb3NJbnB1dHMoXHJcbiAgICAgICAgICBbXCJjdWVudGFcIixcImRlbm9taW5hY2lvblwiLFwiZXN0cnVjdHVyYVwiLFwicHJvdlN0YXR1c1wiXSxcclxuICAgICAgICAgIHRpdHVsbyxcclxuICAgICAgICAgIGN1ZW50YXMsXHJcbiAgICAgICAgICBbe1xyXG4gICAgICAgICAgICBwbGFjZWhvbGRlcjogXCJDdWVudGFcIixcclxuICAgICAgICAgICAgcHJvcGVydHk6IFwiY3VlbnRhXCJcclxuICAgICAgICAgIH0sIHtcclxuICAgICAgICAgICAgcGxhY2Vob2xkZXI6IFwiRXN0cnVjdHVyYVwiLFxyXG4gICAgICAgICAgICBwcm9wZXJ0eTogXCJlc3RydWN0dXJhXCJcclxuICAgICAgICAgIH1dLFxyXG4gICAgICAgICAgW1wiQ3VlbnRhXCIsIFwiRGVub21pbmFjacOzblwiLCBcIkVzdHJ1Y3R1cmFcIiwgXCJFc3RhZG9cIl0sXHJcbiAgICAgICAgICBhbmNob1xyXG4gICAgICAgIClcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBsZXQgZmlsdGVyZWRBY2NvdW50czogTUN1ZW50YUluZ3Jlc29zW10gPSBbXTtcclxuICAgICAgICBjdWVudGFzLmZvckVhY2goYyA9PiB7XHJcbiAgICAgICAgICBpZiAoIWZpbHRlcmVkQWNjb3VudHMuZmluZChlID0+IGUuY3VlbnRhID09IGMuY3VlbnRhKSkge1xyXG4gICAgICAgICAgICBmaWx0ZXJlZEFjY291bnRzLnB1c2goYylcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KVxyXG4gICAgICAgIHJldHVybiB0aGlzLm9wZW5DYXRhbG9nb0dlbmVyaWNvKFxyXG4gICAgICAgICAgW1wiY3VlbnRhXCIsXCJkZW5vbWluYWNpb25cIixcInByb3ZTdGF0dXNcIl0sXHJcbiAgICAgICAgICB0aXR1bG8sXHJcbiAgICAgICAgICBmaWx0ZXJlZEFjY291bnRzLFxyXG4gICAgICAgICAgW1wiQ3VlbnRhXCIsIFwiRGVub21pbmFjacOzblwiLCBcIkVzdGFkb1wiXSxcclxuICAgICAgICAgIGFuY2hvXHJcbiAgICAgICAgKVxyXG4gICAgICB9XHJcbiAgICB9ICAgIFxyXG5cclxuICAgIHB1YmxpYyBnZXRVbmlkYWRBZG1pbmlzdHJhdGl2YSh0aXBvPzpzdHJpbmcsaWRFbnRlcnByaXNlPzpudW1iZXIscGVyaW9kb0Zpc2NhbD86bnVtYmVyLGlkVW5pZGFkT3JnYW5pemF0aXZhPzpudW1iZXIpe1xyXG4gICAgICByZXR1cm4gdGhpcy5odHRwLmdldChgJHt0aGlzLlVSTH0vZGFvL3NwZy91bmlkYWRfYWRtaW5pc3RyYXRpdmFfZGFvLnBocD90aXBvPSR7dGlwb30mZT0ke2lkRW50ZXJwcmlzZX0mcGVyaW9kbz0ke3BlcmlvZG9GaXNjYWx9JmlkPSR7aWRVbmlkYWRPcmdhbml6YXRpdmF9YCxcclxuICAgICAge2hlYWRlcnM6IHRoaXMuZ2V0SHR0cEhlYWRlcnMoKX0pXHJcbiAgICAgIC5waXBlKFxyXG4gICAgICAgIG1hcCgocmVzOmFueSkgPT4ge1xyXG4gICAgICAgICAgaWYgKHJlcy5zdWNjZXNzKSB7XHJcbiAgICAgICAgICAgIHJlcy5kYXRhID0gcmVzLmRhdGEubWFwKGUgPT4gbmV3IE1BZG1pbmlzdHJhdGl2ZVVuaXQoZSkpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgcmV0dXJuIHJlcztcclxuICAgICAgICB9KSBcclxuICAgICAgKVxyXG4gICAgfVxyXG5cclxuICAgIC8qKiBcclxuICAgICAqIEBkZXNjcmlwdGlvbiBPYnRpZW5lIGxvcyBjYXJnb3MgZGUgc2VydmljaW9zXHJcbiAgICAgKiBAcmV0dXJuIE9ic2VydmFibGU8SVJlc3BvbnNlPlxyXG4gICAgICogQGF1dGhvciBDYXJsb3MgQWxib3Jub3pcclxuICAgICAqL1xyXG4gICAgcHVibGljIGdldFNlcnZpY2VDaGFyZ2VzKHNlcnZpY2VJZDpudW1iZXIgPSBudWxsKTogT2JzZXJ2YWJsZTxJUmVzcG9uc2U+IHtcclxuICAgICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8SVJlc3BvbnNlPihgJHt0aGlzLlVSTH0vZGFvL3NvYy9zZXJ2aWNpb19jYXJnb19kYW8ucGhwJHtcclxuICAgICAgICBzZXJ2aWNlSWQgPyBgP3NlcnZpY2VfaWQ9JHtzZXJ2aWNlSWR9YCA6ICcnXHJcbiAgICAgIH1gLFxyXG4gICAgICB7IGhlYWRlcnM6IHRoaXMuZ2V0SHR0cEhlYWRlcnMoKSB9KS5waXBlKFxyXG4gICAgICAgIHJldHJ5KDMpLFxyXG4gICAgICAgIGNhdGNoRXJyb3IodGhpcy5oYW5kbGVyRXJyb3IpLFxyXG4gICAgICAgIG1hcCgocmVzOiBhbnkpID0+IHtcclxuICAgICAgICAgIGlmIChyZXMuc3VjY2Vzcykge1xyXG4gICAgICAgICAgICByZXMuZGF0YSA9IHJlcy5kYXRhLm1hcChlID0+IG5ldyBNU2VydmljZUNoYXJnZShlKSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICByZXR1cm4gcmVzO1xyXG4gICAgICAgIH0pXHJcbiAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgIC8qKiBcclxuICAgICAqIEBkZXNjcmlwdGlvbiBPYnRpZW5lIGxvcyBwYWlzZXNcclxuICAgICAqIEByZXR1cm4gT2JzZXJ2YWJsZTxNQ291bnRyeT5cclxuICAgICAqIEBhdXRob3IgQ2FybG9zIEFsYm9ybm96XHJcbiAgICAgKiBAbW9kaWZpZWQgMTAtMDEtMjAyMlxyXG4gICAgICogQHBhcmFtIGNvZGlnbzogQ29kaWdvIGRlbCBwYWlzXHJcblxyXG4gICAgICovXHJcbiAgICAgIHB1YmxpYyBnZXRDb3VudHJpZXMoY29kaWdvPzpzdHJpbmcpOiBPYnNlcnZhYmxlPE1Db3VudHJ5W10+IHtcclxuICAgICAgICBcclxuICAgICAgICByZXR1cm4gdGhpcy5odHRwLmdldDxNQ291bnRyeT4oYCR7dGhpcy5VUkx9L2Rhby9jZmcvcGFpc2VzX2Rhby5waHA/Y29kaWdvPSR7Y29kaWdvfWAsXHJcbiAgICAgICAgeyBoZWFkZXJzOiB0aGlzLmdldEh0dHBIZWFkZXJzKCkgfSkucGlwZShcclxuICAgICAgICAgIHJldHJ5KDMpLFxyXG4gICAgICAgICAgY2F0Y2hFcnJvcih0aGlzLmhhbmRsZXJFcnJvciksXHJcbiAgICAgICAgICBtYXAoKHJlczogYW55KSA9PiByZXMuZGF0YS5tYXAoZSA9PiBuZXcgTUNvdW50cnkoZSkpKVxyXG4gICAgICAgICk7XHJcbiAgICAgIH1cclxuICBcclxuICAgICAgLyoqXHJcbiAgICAgICAqIEBkZXNjcmlwdGlvbiBPYnRpZW5lIGxvcyBlc3RhZG9zXHJcbiAgICAgICAqIEByZXR1cm4gT2JzZXJ2YWJsZTxNU3RhdGU+XHJcbiAgICAgICAqIEBhdXRob3IgQ2FybG9zIEFsYm9ybm96XHJcbiAgICAgICAqIEBtb2RpZmljYWRvIDQtMTItMjAyMlxyXG4gICAgICAgKiBAcGFyYW0gY29kaWdvOiBDb2RpZ28gZGVsIHBhaXNcclxuICAgICAgICovXHJcbiAgICAgIHB1YmxpYyBnZXRTdGF0ZXMoY29kaWdvPzpzdHJpbmcpOiBPYnNlcnZhYmxlPE1TdGF0ZVtdPiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8TVN0YXRlPihgJHt0aGlzLlVSTH0vZGFvL2NmZy9lc3RhZG9zX2Rhby5waHA/Y29kaWdvPSR7Y29kaWdvfWAsXHJcbiAgICAgICAgeyBoZWFkZXJzOiB0aGlzLmdldEh0dHBIZWFkZXJzKCkgfSkucGlwZShcclxuICAgICAgICAgIHJldHJ5KDMpLFxyXG4gICAgICAgICAgY2F0Y2hFcnJvcih0aGlzLmhhbmRsZXJFcnJvciksXHJcbiAgICAgICAgICBtYXAoKHJlczogYW55KSA9PiByZXMuZGF0YS5tYXAoZSA9PiBuZXcgTVN0YXRlKGUpKSlcclxuICAgICAgICApO1xyXG4gICAgICB9XHJcbiAgXHJcbiAgICAgIC8qKlxyXG4gICAgICAgKiBAZGVzY3JpcHRpb24gT2J0aWVuZSBsb3MgbXVuaWNpcGlvc1xyXG4gICAgICAgKiBAcmV0dXJuIE9ic2VydmFibGU8TU11bmljaXBhbGl0eT5cclxuICAgICAgICogQGF1dGhvciBDYXJsb3MgQWxib3Jub3pcclxuICAgICAgICogQG1vZGlmaWNhZG8gMTAtMDEtMjAyMlxyXG4gICAgICAgKiBAcGFyYW0gcGFpczogQ29kaWdvIGRlbCBwYWlzICxcclxuICAgICAgICogQHBhcmFtIGVzdGFkbzogQ29kaWdvIGRlbCBlc3RhZG9cclxuICAgICAgICogQGFjdHVhbGl6YWRvIDQtMTItMjAyMlxyXG4gICAgICAgKi9cclxuICAgICAgcHVibGljIGdldE11bmljaXBhbGl0aWVzKHBhaXM/OnN0cmluZyxlc3RhZG8/OnN0cmluZyk6IE9ic2VydmFibGU8TU11bmljaXBhbGl0eVtdPiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8TU11bmljaXBhbGl0eT4oYCR7dGhpcy5VUkx9L2Rhby9jZmcvbXVuaWNpcGlvc19kYW8ucGhwP3BhaXM9JHtwYWlzfSZlc3RhZG89JHtlc3RhZG99YCxcclxuICAgICAgICB7IGhlYWRlcnM6IHRoaXMuZ2V0SHR0cEhlYWRlcnMoKSB9KS5waXBlKFxyXG4gICAgICAgICAgcmV0cnkoMyksXHJcbiAgICAgICAgICBjYXRjaEVycm9yKHRoaXMuaGFuZGxlckVycm9yKSxcclxuICAgICAgICAgIG1hcCgocmVzOiBhbnkpID0+IHJlcy5kYXRhLm1hcChlID0+IG5ldyBNTXVuaWNpcGFsaXR5KGUpKSlcclxuICAgICAgICApO1xyXG4gICAgICB9XHJcbiAgXHJcbiAgICAgIC8qKlxyXG4gICAgICAgKiBAZGVzY3JpcHRpb24gT2J0aWVuZSBsYXMgcGFycm9xdWlhcyBcclxuICAgICAgICogQHJldHVybiBPYnNlcnZhYmxlPE1QYXJpc2g+XHJcbiAgICAgICAqIEBhdXRob3IgQ2FybG9zIEFsYm9ybm96XHJcbiAgICAgICAqIEBtb2RpZmljYWRvIDEwLTAxLTIwMjJcclxuICAgICAgICogQHBhcmFtIHBhaXM6IENvZGlnbyBkZWwgcGFpc1xyXG4gICAgICAgKiBAcGFyYW0gZXN0YWRvOiBDb2RpZ28gZGVsIGVzdGFkb1xyXG4gICAgICAgKiBAcGFyYW0gbXVuaWNpcGlvOmNvZGlnbyBNdW5pY2lwaW9cclxuICAgICAgICogQGFjdHVhbGl6YWRvIDQtMTItMjAyMlxyXG5cclxuICAgICAgICovXHJcbiAgICAgIHB1YmxpYyBnZXRQYXJpc2hlcyhwYWlzPzpzdHJpbmcsZXN0YWRvPzpzdHJpbmcsbXVuaWNpcGlvPzpzdHJpbmcpOiBPYnNlcnZhYmxlPE1QYXJpc2hbXT4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PE1QYXJpc2g+KGAke3RoaXMuVVJMfS9kYW8vY2ZnL3BhcnJvcXVpYXNfZGFvLnBocD9wYWlzPSR7cGFpc30mZXN0YWRvPSR7ZXN0YWRvfSZtdW5pY2lwaW89JHttdW5pY2lwaW99YCxcclxuICAgICAgICB7IGhlYWRlcnM6IHRoaXMuZ2V0SHR0cEhlYWRlcnMoKSB9KS5waXBlKFxyXG4gICAgICAgICAgcmV0cnkoMyksXHJcbiAgICAgICAgICBjYXRjaEVycm9yKHRoaXMuaGFuZGxlckVycm9yKSxcclxuICAgICAgICAgIG1hcCgocmVzOiBhbnkpID0+IHJlcy5kYXRhLm1hcChlID0+IG5ldyBNUGFyaXNoKGUpKSlcclxuICAgICAgICApO1xyXG4gICAgICB9XHJcbiAgXHJcbiAgICAgIC8qKlxyXG4gICAgICAgKiBAZGVzY3JpcHRpb24gT2J0aWVuZSBsYXMgY2l1ZGFkZXNcclxuICAgICAgICogQHJldHVybiBPYnNlcnZhYmxlPE1QYXJpc2g+XHJcbiAgICAgICAqIEBhdXRob3IgQ2FybG9zIEFsYm9ybm96XHJcbiAgICAgICAqIEBtb2RpZmljYWRvIDEwLTAxLTIwMjJcclxuICAgICAgICogQHBhcmFtIHBhaXM6IENvZGlnbyBkZWwgcGFpc1xyXG4gICAgICAgKiBAcGFyYW0gZXN0YWRvOiBDb2RpZ28gZGVsIGVzdGFkb1xyXG5cclxuXHJcbiAgICAgICAqL1xyXG4gICAgICAgIHB1YmxpYyBnZXRDaXR5KHBhaXM/OnN0cmluZyxlc3RhZG8/OnN0cmluZyk6IE9ic2VydmFibGU8TUNpdHlbXT4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PE1DaXR5PihgJHt0aGlzLlVSTH0vZGFvL2NmZy9jaXVkYWRlc19kYW8ucGhwP3BhaXM9JHtwYWlzfSZlc3RhZG89JHtlc3RhZG99YCxcclxuICAgICAgICB7IGhlYWRlcnM6IHRoaXMuZ2V0SHR0cEhlYWRlcnMoKSB9KS5waXBlKFxyXG4gICAgICAgICAgcmV0cnkoMyksXHJcbiAgICAgICAgICBjYXRjaEVycm9yKHRoaXMuaGFuZGxlckVycm9yKSxcclxuICAgICAgICAgIG1hcCgocmVzOiBhbnkpID0+IHJlcy5kYXRhLm1hcChlID0+IG5ldyBNQ2l0eShlKSkpXHJcbiAgICAgICAgKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgICAgICAgLyoqXHJcbiAgICAgICAqIEBkZXNjcmlwdGlvbiBPYnRpZW5lIGxhcyBjaXVkYWRlc1xyXG4gICAgICAgKiBAcmV0dXJuIE9ic2VydmFibGU8TVBhcmlzaD5cclxuICAgICAgICogQGF1dGhvciBEaW1hbHkgQ3Jlc3BvXHJcbiAgICAgICAqIEBtb2RpZmljYWRvIDEwLTAxLTIwMjJcclxuICAgICAgICogQHBhcmFtIHBhaXM6IENvZGlnbyBkZWwgcGFpc1xyXG5cclxuICAgICAgICovXHJcbiAgICAgICAgcHVibGljIGdldENvbW11bml0aWVzKHBhaXM/OnN0cmluZyxlc3RhZG8/OnN0cmluZywgbXVuaWNpcGlvPzpzdHJpbmcscGFycm9xdWlhPzpzdHJpbmcpOiBPYnNlcnZhYmxlPE1Db21tdW5pdHlbXT4ge1xyXG4gICAgICAgICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8TUNvbW11bml0eT4oYCR7dGhpcy5VUkx9L2Rhby9jZmcvY29tdW5pZGFkZXNfZGFvLnBocD9wYWlzPSR7cGFpc30mZXN0YWRvPSR7ZXN0YWRvfSZtdW5pY2lwaW89JHttdW5pY2lwaW99JnBhcnJvcXVpYT0ke3BhcnJvcXVpYX1gLFxyXG4gICAgICAgICAgeyBoZWFkZXJzOiB0aGlzLmdldEh0dHBIZWFkZXJzKCkgfSkucGlwZShcclxuICAgICAgICAgICAgcmV0cnkoMyksXHJcbiAgICAgICAgICAgIGNhdGNoRXJyb3IodGhpcy5oYW5kbGVyRXJyb3IpLFxyXG4gICAgICAgICAgICBtYXAoKHJlczogYW55KSA9PiByZXMuZGF0YS5tYXAoZSA9PiBuZXcgTUNvbW11bml0eShlKSkpXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgIH1cclxuICBcclxuICAgIC8qKlxyXG4gICAgICogQGRlc2NyaXB0aW9uIE9idGllbmUgbG9zIHNpc3RlbWFzIGFjdGl2YXNcclxuICAgICAqIEByZXR1cm4gT2JzZXJ2YWJsZTxNU2lzdGVtYT5cclxuICAgICAqIEBhdXRob3IgQ2FybG9zIEFsYm9ybm96XHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBnZXRTaXN0ZW1hcygpOiBPYnNlcnZhYmxlPE1TaXN0ZW1hW10+IHtcclxuICAgICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8TVNpc3RlbWE+KGAke3RoaXMuVVJMfS9kYW8vc3NzL3Npc3RlbWFzX2Rhby5waHBgLFxyXG4gICAgICB7IGhlYWRlcnM6IHRoaXMuZ2V0SHR0cEhlYWRlcnMoKSB9KS5waXBlKFxyXG4gICAgICAgIHJldHJ5KDMpLFxyXG4gICAgICAgIGNhdGNoRXJyb3IodGhpcy5oYW5kbGVyRXJyb3IpLFxyXG4gICAgICAgIG1hcCgocmVzOiBhbnkpID0+IHJlcy5kYXRhLm1hcChlID0+IG5ldyBNU2lzdGVtYShlKSkpXHJcbiAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gT2J0aWVuZSBsYSBtb25lZGEgYWN0dWFsXHJcbiAgICAgKiBAcmV0dXJuIE9ic2VydmFibGU8SVJlc3BvbnNlPlxyXG4gICAgICogQGF1dGhvciBDYXJsb3MgQWxib3Jub3pcclxuICAgICAqIEBhY3R1YWxpemFkbzogNC0xMi0yMDIyMlxyXG4gICAgICogQHBhcmFtcyBpZDogaWQgZGUgbGEgbW9uZWRhLFxyXG4gICAgICogQHBhcmFtcyB0aXBvOiB0b2Rhcy0+b2J0aWVuZSB0b2RhcyBsYXMgbW9uZWRhLCAodW5vLT4gb2J0aWVuZSB1bmEgbW9uZWRhICsgaWQpXHJcbiAgICAgKiAobW9uOmZvcm1hdG8gcGFyYSBpbnB1dEN1cnJlbmN5ICsgaWQgKVxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgZ2V0Q3VycmVudEN1cnJlbmN5KHRpcG86J3RvZGFzJ3wndW5vJ3wnbW9uJz1udWxsLGlkPzpudW1iZXIpOiBPYnNlcnZhYmxlPElSZXNwb25zZT4ge1xyXG4gICAgICByZXR1cm4gdGhpcy5odHRwLmdldDxJUmVzcG9uc2U+KGAke3RoaXMuVVJMfS9kYW8vY2ZnL21vbmVkYV9kYW8ucGhwP3RpcG89JHt0aXBvfSZpZD0ke2lkfWAsXHJcbiAgICAgIHsgaGVhZGVyczogdGhpcy5nZXRIdHRwSGVhZGVycygpIH0pLnBpcGUoICAgICAgIFxyXG4gICAgICAgIG1hcCgocmVzOiBhbnkpID0+IHtcclxuICAgICAgICAgIGlmIChyZXMuc3VjY2Vzcykge1xyXG4gICAgICAgICAgICBpZih0aXBvPT0ndG9kYXMnKXtcclxuICAgICAgICAgICAgICByZXMuZGF0YSA9IHJlcy5kYXRhLm1hcChlID0+IG5ldyBNTW9uZWRhQ29uZmlnKGUpKTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICByZXMuZGF0YSA9IG5ldyBNTW9uZWRhQ29uZmlnKHJlcy5kYXRhKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHJldHVybiByZXM7XHJcbiAgICAgICAgfSlcclxuICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gT2J0aWVuZSBsYSBsaW5lYSBlbXByZXNhXHJcbiAgICAgKiBAcmV0dXJuIE9ic2VydmFibGU8SVJlc3BvbnNlPlxyXG4gICAgICogQGF1dGhvciBEaW1hbHkgQ3Jlc3BvXHJcbiAgICAgKiBAYWN0dWFsaXphZG86IDUtMTItMjAyMjJcclxuICAgICAqL1xyXG4gICAgICAgICBwdWJsaWMgZ2V0RW50ZXJwcmlzZSh0aXBvOidsaW5lYScgfCdwcm9jZXNvJ3wnZGVmYXVsdCc9bnVsbCAsaWQ/Om51bWJlcik6IE9ic2VydmFibGU8SVJlc3BvbnNlPiB7XHJcbiAgICAgICAgICByZXR1cm4gdGhpcy5odHRwLmdldDxJUmVzcG9uc2U+KGAke3RoaXMuVVJMfS9kYW8vY2ZnL2VudGVycHJpc2VfZGFvLnBocD90aXBvPSR7dGlwb31gLFxyXG4gICAgICAgICAgeyBoZWFkZXJzOiB0aGlzLmdldEh0dHBIZWFkZXJzKCkgfSkucGlwZShcclxuICAgICAgICAgICAgcmV0cnkoMyksXHJcbiAgICAgICAgICAgIGNhdGNoRXJyb3IodGhpcy5oYW5kbGVyRXJyb3IpLFxyXG4gICAgICAgICAgICBtYXAoKHJlczogYW55KSA9PiB7XHJcbiAgICAgICAgICAgICAgaWYgKHJlcy5zdWNjZXNzKSB7XHJcbiAgICAgICAgICAgICAgICByZXMuZGF0YSA9IHJlcy5kYXRhLm1hcChlID0+IG5ldyBNRW50ZXJwcmlzZShlKSk7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIHJldHVybiByZXM7XHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgIH1cclxuICAgIFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQGRlc2NyaXB0aW9uIE9idGllbmUgbG9zIHRpcG9zIGRlIG9yZ2FuaXphY2lvblxyXG4gICAgICogQHJldHVybiBPYnNlcnZhYmxlPElSZXNwb25zZT5cclxuICAgICAqIEBhdXRob3IgQ2FybG9zIEFsYm9ybm96XHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBnZXRPcmdhbml6YXRpb25UeXBlcygpOiBPYnNlcnZhYmxlPElSZXNwb25zZT4ge1xyXG4gICAgICByZXR1cm4gdGhpcy5odHRwLmdldDxJUmVzcG9uc2U+KGAke3RoaXMuVVJMfS9kYW8vcnBjL3RpcG9fb3JnYW5pemFjaW9uX2Rhby5waHBgLFxyXG4gICAgICB7IGhlYWRlcnM6IHRoaXMuZ2V0SHR0cEhlYWRlcnMoKSB9KS5waXBlKFxyXG4gICAgICAgIHJldHJ5KDMpLFxyXG4gICAgICAgIGNhdGNoRXJyb3IodGhpcy5oYW5kbGVyRXJyb3IpLFxyXG4gICAgICAgIG1hcCgocmVzOiBhbnkpID0+IHtcclxuICAgICAgICAgIGlmIChyZXMuc3VjY2Vzcykge1xyXG4gICAgICAgICAgICByZXMuZGF0YSA9IHJlcy5kYXRhLm1hcChlID0+IG5ldyBNT3JnYW5pemF0aW9uVHlwZShlKSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICByZXR1cm4gcmVzO1xyXG4gICAgICAgIH0pXHJcbiAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gT2J0aWVuZSBsb3MgdGlwb3MgZGUgb3JnYW5pemFjaW9uXHJcbiAgICAgKiBAcmV0dXJuIE9ic2VydmFibGU8SVJlc3BvbnNlPlxyXG4gICAgICogQGF1dGhvciBDYXJsb3MgQWxib3Jub3pcclxuICAgICAqL1xyXG4gICAgcHVibGljIGdldFNwZWNpYWx0aWVzKCk6IE9ic2VydmFibGU8SVJlc3BvbnNlPiB7XHJcbiAgICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PElSZXNwb25zZT4oYCR7dGhpcy5VUkx9L2Rhby9ycGMvZXNwZWNpYWxpZGFkX2Rhby5waHBgLFxyXG4gICAgICB7IGhlYWRlcnM6IHRoaXMuZ2V0SHR0cEhlYWRlcnMoKSB9KS5waXBlKFxyXG4gICAgICAgIHJldHJ5KDMpLFxyXG4gICAgICAgIGNhdGNoRXJyb3IodGhpcy5oYW5kbGVyRXJyb3IpLFxyXG4gICAgICAgIG1hcCgocmVzOiBhbnkpID0+IHtcclxuICAgICAgICAgIGlmIChyZXMuc3VjY2Vzcykge1xyXG4gICAgICAgICAgICByZXMuZGF0YSA9IHJlcy5kYXRhLm1hcChlID0+IG5ldyBNU3BlY2lhbHR5KGUpKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHJldHVybiByZXM7XHJcbiAgICAgICAgfSlcclxuICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEBkZXNjcmlwdGlvbiBPYnRpZW5lIGxvcyBkb2N1bWVudG9zXHJcbiAgICAgKiBAcmV0dXJuIE9ic2VydmFibGU8SVJlc3BvbnNlPlxyXG4gICAgICogQGF1dGhvciBDYXJsb3MgQWxib3Jub3pcclxuICAgICAqL1xyXG4gICAgcHVibGljIGdldERvY3VtZW50cygpOiBPYnNlcnZhYmxlPElSZXNwb25zZT4ge1xyXG4gICAgICByZXR1cm4gdGhpcy5odHRwLmdldDxJUmVzcG9uc2U+KGAke3RoaXMuVVJMfS9kYW8vcnBjL2RvY3VtZW50b19kYW8ucGhwYCxcclxuICAgICAgeyBoZWFkZXJzOiB0aGlzLmdldEh0dHBIZWFkZXJzKCkgfSkucGlwZShcclxuICAgICAgICByZXRyeSgzKSxcclxuICAgICAgICBjYXRjaEVycm9yKHRoaXMuaGFuZGxlckVycm9yKSxcclxuICAgICAgICBtYXAoKHJlczogYW55KSA9PiB7XHJcbiAgICAgICAgICBpZiAocmVzLnN1Y2Nlc3MpIHtcclxuICAgICAgICAgICAgcmVzLmRhdGEgPSByZXMuZGF0YS5tYXAoZSA9PiBuZXcgTURvY3VtZW50KGUpKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHJldHVybiByZXM7XHJcbiAgICAgICAgfSlcclxuICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEBkZXNjcmlwdGlvbiBPYnRpZW5lIGxhcyBjbGFzaWZpY2FjaW9uZXNcclxuICAgICAqIEByZXR1cm4gT2JzZXJ2YWJsZTxJUmVzcG9uc2U+XHJcbiAgICAgKiBAYXV0aG9yIENhcmxvcyBBbGJvcm5velxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgZ2V0Q2xhc2lmaWNhdGlvbnMoKTogT2JzZXJ2YWJsZTxJUmVzcG9uc2U+IHtcclxuICAgICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8SVJlc3BvbnNlPihgJHt0aGlzLlVSTH0vZGFvL3JwYy9jbGFzaWZpY2FjaW9uX2Rhby5waHBgLFxyXG4gICAgICB7IGhlYWRlcnM6IHRoaXMuZ2V0SHR0cEhlYWRlcnMoKSB9KS5waXBlKFxyXG4gICAgICAgIHJldHJ5KDMpLFxyXG4gICAgICAgIGNhdGNoRXJyb3IodGhpcy5oYW5kbGVyRXJyb3IpLFxyXG4gICAgICAgIG1hcCgocmVzOiBhbnkpID0+IHtcclxuICAgICAgICAgIGlmIChyZXMuc3VjY2Vzcykge1xyXG4gICAgICAgICAgICByZXMuZGF0YSA9IHJlcy5kYXRhLm1hcChlID0+IG5ldyBNQ2xhc2lmaWNhdGlvbihlKSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICByZXR1cm4gcmVzO1xyXG4gICAgICAgIH0pXHJcbiAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gT2J0aWVuZSBlbCBwcmVmaWpvIGRlIGxvcyB1c3Vhcmlvc1xyXG4gICAgICogQHBhcmFtIHByb2NlZGUgRGUgcXVlIG3Ds2R1bG8gcHJvY2VkZVxyXG4gICAgICogQHBhcmFtIGNvZHNpcyBDw7NkaWdvIGRlbCBzaXN0ZW1hXHJcbiAgICAgKiBAcmV0dXJuIE9ic2VydmFibGU8TVVzdWFyaW9QcmVmaWpvW10+XHJcbiAgICAgKiBAYXV0aG9yIENhcmxvcyBBbGJvcm5velxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgZ2V0VXNlclByZWZpeChmaWx0ZXI6ICdkZXRhaWwnID0gbnVsbCwgY29kZTogc3RyaW5nID0gbnVsbCwgaWRFbnRlcnByaXNlOm51bWJlciwgcGVyaW9kbzpudW1iZXIpOiBPYnNlcnZhYmxlPElSZXNwb25zZT4ge1xyXG4gICAgICByZXR1cm4gdGhpcy5odHRwLmdldDxJUmVzcG9uc2U+KGAke3RoaXMuVVJMfS9kYW8vY2ZnL2NvbnRyb2xfbnVtZXJvX2Rhby5waHAke1xyXG4gICAgICAgIGZpbHRlciA/IGA/ZmlsdGVyPSR7ZmlsdGVyfSZjb2RlPSR7Y29kZX0mZT0ke2lkRW50ZXJwcmlzZX0mcGVyaW9kbz0ke3BlcmlvZG99YCA6ICcnXHJcbiAgICAgIH1gLFxyXG4gICAgICB7IGhlYWRlcnM6IHRoaXMuZ2V0SHR0cEhlYWRlcnMoKSB9KS5waXBlKFxyXG4gICAgICAgIHJldHJ5KDMpLFxyXG4gICAgICAgIGNhdGNoRXJyb3IodGhpcy5oYW5kbGVyRXJyb3IpLFxyXG4gICAgICAgIG1hcCgocmVzOiBhbnkpID0+IHtcclxuICAgICAgICAgIGlmIChyZXMuc3VjY2Vzcykge1xyXG4gICAgICAgICAgICByZXMuZGF0YSA9IHJlcy5kYXRhLm1hcChlID0+IG5ldyBNVXN1YXJpb1ByZWZpam8oZSkpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgcmV0dXJuIHJlcztcclxuICAgICAgICB9KVxyXG4gICAgICApO1xyXG4gICAgfVxyXG5cclxuXHJcbiAgICAvKipcclxuICAgICAqIEBkZXNjcmlwdGlvbiBPYnRpZW5lIGxvcyBwZWZpam9cclxuICAgICAqIEBwYXJhbSBwcm9jZWRlIERlIHF1ZSBtw7NkdWxvIHByb2NlZGVcclxuICAgICAqIEBwYXJhbSBjb2RzaXMgQ8OzZGlnbyBkZWwgc2lzdGVtYVxyXG4gICAgICogQHJldHVybiBPYnNlcnZhYmxlPE1Vc3VhcmlvUHJlZmlqb1tdPlxyXG4gICAgICogQGF1dGhvciBEaW1hbHlDcmVzcG8gMTctMTItMjAyMlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgZ2V0UHJlZml4KGZpbHRlcjogJ2FsbCcgfCAnb25lJyA9IG51bGwsIGNvZGU6IHN0cmluZyA9IG51bGwpOiBPYnNlcnZhYmxlPElSZXNwb25zZT4ge1xyXG5cclxuICAgICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8SVJlc3BvbnNlPihgJHt0aGlzLlVSTH0vZGFvL2NmZy9jb250cm9sX251bWVyb19kYW8ucGhwJHtcclxuICAgICAgICBmaWx0ZXIgPyBgP2ZpbHRlcj0ke2ZpbHRlcn0mY29kZT0ke2NvZGV9YCA6ICcnXHJcbiAgICAgIH1gLFxyXG4gICAgICB7IGhlYWRlcnM6IHRoaXMuZ2V0SHR0cEhlYWRlcnMoKSB9KS5waXBlKFxyXG4gICAgICAgIHJldHJ5KDMpLFxyXG4gICAgICAgIGNhdGNoRXJyb3IodGhpcy5oYW5kbGVyRXJyb3IpLFxyXG4gICAgICAgIG1hcCgocmVzOiBhbnkpID0+IHtcclxuICAgICAgICAgIGlmIChyZXMuc3VjY2Vzcykge1xyXG4gICAgICAgICAgICByZXMuZGF0YSA9IHJlcy5kYXRhLm1hcChlID0+IG5ldyBNUHJlZmlqbyhlKSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICByZXR1cm4gcmVzO1xyXG4gICAgICAgIH0pXHJcbiAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gQWJyZSBlbCBkaWFsb2cgcGFyYSBidXNjYXIgbG9zIHByb3ZlZWRvcmVzXHJcbiAgICAgKiBAcmV0dXJuIFByb21pc2U8TVByb3ZlZWRvcj5cclxuICAgICAqIEBhdXRob3IgTWlndWVsIFJhbcOtcmV6XHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBhc3luYyBvcGVuRGlhbG9nUHJvdmVlZG9yZXMoaWRFbnRlcnByaXNlOm51bWJlcik6IFByb21pc2U8TVByb3ZlZWRvcj4ge1xyXG4gICAgICBsZXQgcHJvdmVlZG9yZXM6IE1Qcm92ZWVkb3JbXSA9IGF3YWl0IHRoaXMuZ2V0UHJvdmVlZG9yZXMoaWRFbnRlcnByaXNlKS50b1Byb21pc2UoKTtcclxuICAgICAgbGV0IGRpYWxvZ1JlZiA9IHRoaXMuZGlhbG9nLm9wZW4oQ2F0YWxvZ29Db21wb25lbnQsIHtcclxuICAgICAgICBkYXRhOiB7XHJcbiAgICAgICAgICBjb2x1bW5zOiBbJ3RpcG8nLCAncmlmJywgJ25vbWJyZSddLFxyXG4gICAgICAgICAgdGl0bGU6ICdDYXTDoWxvZ28gZGUgUHJvdmVlZG9yZXMgeSBCZW5lZmljaWFyaW9zJyxcclxuICAgICAgICAgIGRhdGFTb3VyY2U6IHByb3ZlZWRvcmVzXHJcbiAgICAgICAgfSBhcyBJQ2F0YWxvZ28sXHJcbiAgICAgICAgd2lkdGg6ICc0NTBweCcsXHJcbiAgICAgICAgbWF4SGVpZ2h0OiAnOTB2aCdcclxuICAgICAgfSk7XHJcblxyXG4gICAgICByZXR1cm4gZGlhbG9nUmVmLmFmdGVyQ2xvc2VkKCkudG9Qcm9taXNlKCk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gT2J0aWVuZSBsb3MgcHJvdmVlZG9yZXNcclxuICAgICAqIEByZXR1cm4gT2JzZXJ2YWJsZTxNUHJvdmVlZG9yW10+XHJcbiAgICAgKiBAYXV0aG9yIE1pZ3VlbCBSYW3DrXJlelxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgZ2V0UHJvdmVlZG9yZXMoaWRFbnRlcnByaXNlOm51bWJlcik6IE9ic2VydmFibGU8TVByb3ZlZWRvcltdPiB7XHJcbiAgICAgIGxldCByZXF1ZXN0OiBJUmVxdWVzdCA9IHtcclxuICAgICAgICBvcGVyYWNpb246ICdvYnRlbmVyRGF0YScsXHJcbiAgICAgICAgc2lnZXNwX2NvbmV4aW9uOiB7XHJcbiAgICAgICAgICBzZXJ2aWRvcjogdGhpcy5VUkwsXHJcbiAgICAgICAgICB1c3VhcmlvOiB0aGlzLnVzdWFyaW9BY3Rpdm8uZ2V0SW50ZXJmYWNlKClcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0PE1Qcm92ZWVkb3JbXT4oYCR7dGhpcy5VUkx9L2Rhby9ycGMvcHJvdmVlZG9yX2JlbmVmaWNpYXJpb19kYW8ucGhwP2U9JHtpZEVudGVycHJpc2V9YCwgcmVxdWVzdCkucGlwZShcclxuICAgICAgICBtYXAoKHJlczogYW55KSA9PiByZXMubWFwKGVsZW1lbnQgPT4gbmV3IE1Qcm92ZWVkb3IoZWxlbWVudCkpKVxyXG4gICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQGRlc2NyaXB0aW9uIE9idGllbmUgbG9zIHByb3ZlZWRvcmVzIHkgYmVuZWZpY2lhcmlvc1xyXG4gICAgICogQE5vdGUgU2kgcXVpZXJlIHNvbG8gbG9zIGRhdG9zIGJhc2ljb3MgdXNlIGxvcyBwYXJhbWV0cm9zICgnUycsJ1AnLCdOJylcclxuICAgICAqIEByZXR1cm4gT2JzZXJ2YWJsZTxJUmVzcG9uc2U+XHJcbiAgICAgKiBAYXV0aG9yIENhcmxvcyBBbGJvcm5velxyXG4gICAgICogQHR5cGUgPXsnUCcsJ0InLCdTJ31cclxuICAgICAqIEBkZXN0aW5hdGlvbiA9eydQJywnQicsJ0MnLCdBJywnTid94omIe1Byb3ZlZWRvcixCZW5lZmljaWFyaW8sQ29udGF0aXN0YSxBbWJvcyxOaW5ndW5vfVxyXG4gICAgICogQGFjY291bnQgPXsnUycsJ04nfSBwYXJhIHRyYWVyIGxhcyBjdWVudGFzIGJhbmNhcmlhcyBkZWwgcHJvdmVlZG9yIHBvciBkZWZlY3RvIGVzdGEgZW4gTlxyXG4gICAgICogQG1vZGlmaWNhZG8gMTctMDctMjAyM1xyXG4gICAgICovXHJcblxyXG4gICAgcHVibGljIGdldFByb3ZpZGVyc0FuZEJlbmVmaWNpYXJpZXModHlwZTogc3RyaW5nID0nZGVmYXVsdCcsIGlkRW50ZXJwcmlzZTpudW1iZXIsZGVzdGluYXRpb246c3RyaW5nPW51bGwsIGFjY291bnQ6c3RyaW5nPSdOJyk6IE9ic2VydmFibGU8SVJlc3BvbnNlPiB7XHJcbiAgICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PElSZXNwb25zZT4oYCR7dGhpcy5VUkx9L2Rhby9ycGMvcHJvdmVlZG9yX2JlbmVmaWNpYXJpb19kYW8ucGhwP3Byb3ZpZGVyX3R5cGU9JHt0eXBlfSZlPSR7aWRFbnRlcnByaXNlfSZkZXN0aW5hdGlvbj0ke2Rlc3RpbmF0aW9ufSZhY2NvdW50PSR7YWNjb3VudH1gLCBcclxuICAgICAgeyBoZWFkZXJzOiB0aGlzLmdldEh0dHBIZWFkZXJzKCkgfSkucGlwZShcclxuICAgICAgICBtYXAoKHJlczogYW55KSA9PiB7XHJcbiAgICAgICAgICBpZiAocmVzLnN1Y2Nlc3MpIHtcclxuICAgICAgICAgICAgcmVzLmRhdGEgPSByZXMuZGF0YS5tYXAoZSA9PiBuZXcgTVByb3ZpZGVyQmVuZWZpY2lhcnkoZSkpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgcmV0dXJuIHJlcztcclxuICAgICAgICB9KVxyXG4gICAgICApO1xyXG4gICAgfVxyXG5cclxuXHJcbiAgICAvKipcclxuICAgICAqIEBkZXNjcmlwdGlvbiBPYnRpZW5lIHVuIFVzdWFyaW8gc2VndW4gc3UgSURcclxuICAgICAqIEByZXR1cm4gT2JzZXJ2YWJsZTxJUmVzcG9uc2U+XHJcbiAgICAgKiBAYXV0aG9yIENhcmxvcyBBbGJvcm5velxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgZ2V0VXNlckJ5SWQoaWQ6IG51bWJlcik6IE9ic2VydmFibGU8SVJlc3BvbnNlPiB7XHJcbiAgICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PElSZXNwb25zZT4oYCR7dGhpcy5VUkx9L2Rhby9zc3MvdXN1YXJpb19kYW8ucGhwP2lkPSR7aWR9YCwgXHJcbiAgICAgIHsgaGVhZGVyczogdGhpcy5nZXRIdHRwSGVhZGVycygpIH0pLnBpcGUoXHJcbiAgICAgICAgcmV0cnkoMyksXHJcbiAgICAgICAgY2F0Y2hFcnJvcih0aGlzLmhhbmRsZXJFcnJvciksXHJcbiAgICAgICAgbWFwKChyZXM6IGFueSkgPT4ge1xyXG4gICAgICAgICAgaWYgKHJlcy5zdWNjZXNzKSB7XHJcbiAgICAgICAgICAgIHJlcy5kYXRhID0gbmV3IE1Vc3VhcmlvKHJlcy5kYXRhKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHJldHVybiByZXM7XHJcbiAgICAgICAgfSlcclxuICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEBkZXNjcmlwdGlvbiBPYnRpZW5lIGxvcyBiYW5jb3NcclxuICAgICAqIEByZXR1cm4gT2JzZXJ2YWJsZTxJUmVzcG9uc2U+XHJcbiAgICAgKiBAYXV0aG9yIENhcmxvcyBBbGJvcm5velxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgZ2V0QmFua3MoaWRFbnRlcnByaXNlPzpudW1iZXIpOiBPYnNlcnZhYmxlPElSZXNwb25zZT4ge1xyXG4gICAgICByZXR1cm4gdGhpcy5odHRwLmdldDxJUmVzcG9uc2U+KGAke3RoaXMuVVJMfS9kYW8vc2NiL2JhbmNvX2Rhby5waHA/ZT0ke2lkRW50ZXJwcmlzZX1gLCBcclxuICAgICAgeyBoZWFkZXJzOiB0aGlzLmdldEh0dHBIZWFkZXJzKCkgfSkucGlwZShcclxuICAgICAgICByZXRyeSgzKSxcclxuICAgICAgICBjYXRjaEVycm9yKHRoaXMuaGFuZGxlckVycm9yKSxcclxuICAgICAgICBtYXAoKHJlczogYW55KSA9PiB7XHJcbiAgICAgICAgICBpZiAocmVzLnN1Y2Nlc3MpIHtcclxuICAgICAgICAgICAgcmVzLmRhdGEgPSByZXMuZGF0YS5tYXAoZSA9PiBuZXcgTUJhbmsoZSkpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgcmV0dXJuIHJlcztcclxuICAgICAgICB9KVxyXG4gICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQGRlc2NyaXB0aW9uIE9idGllbmUgbG9zIHRpcG9zIGRlIGN1ZW50YSBiYW5jYXJpYXNcclxuICAgICAqIEByZXR1cm4gT2JzZXJ2YWJsZTxJUmVzcG9uc2U+XHJcbiAgICAgKiBAYXV0aG9yIENhcmxvcyBBbGJvcm5velxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgZ2V0QmFua0FjY291bnRUeXBlcygpOiBPYnNlcnZhYmxlPElSZXNwb25zZT4ge1xyXG4gICAgICByZXR1cm4gdGhpcy5odHRwLmdldDxJUmVzcG9uc2U+KGAke3RoaXMuVVJMfS9kYW8vc2NiL2JhbmNvX3RpcG9fY3VlbnRhX2Rhby5waHBgLCBcclxuICAgICAgeyBoZWFkZXJzOiB0aGlzLmdldEh0dHBIZWFkZXJzKCkgfSkucGlwZShcclxuICAgICAgICByZXRyeSgzKSxcclxuICAgICAgICBjYXRjaEVycm9yKHRoaXMuaGFuZGxlckVycm9yKSxcclxuICAgICAgICBtYXAoKHJlczogYW55KSA9PiB7XHJcbiAgICAgICAgICBpZiAocmVzLnN1Y2Nlc3MpIHtcclxuICAgICAgICAgICAgcmVzLmRhdGEgPSByZXMuZGF0YS5tYXAoZSA9PiBuZXcgTUJhbmtBY2NvdW50VHlwZShlKSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICByZXR1cm4gcmVzO1xyXG4gICAgICAgIH0pXHJcbiAgICAgICk7XHJcbiAgICB9XHJcblxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQGRlc2NyaXB0aW9uIG9idGllbmUgbGFzIGN1ZW50YSBzZWd1biBlbCBpZFxyXG4gICAgICogQHBhcmFtIHRpcG8geydiYW5jbycsICdkZWZhdWx0J31cclxuICAgICAqIEBwYXJhbSBpZCBwYXJhIGxhIG9wY2lvbiBiYW5jbyB1c2FyIGlkPWlkQmFuY28sIG9wY2lvbiBkZWZhdWxmIGlkPWlkRW50ZXJwcmlzZVxyXG4gICAgICogQHJldHVybnMgXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBnZXRBbGxCYW5rQWNjb3VudCh0aXBvOnN0cmluZyxpZDpudW1iZXIpeyAgICAgICAgXHJcbiAgICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0KGAke3RoaXMuVVJMfS9kYW8vc2NiL2N1ZW50YV9iYW5jb19kYW8ucGhwP3RpcG89JHt0aXBvfSZlPSR7aWR9YCxcclxuICAgICAge2hlYWRlcnM6IHRoaXMuZ2V0SHR0cEhlYWRlcnMoKX0pXHJcbiAgICAgIC5waXBlKFxyXG4gICAgICAgIG1hcCgocmVzOmFueSkgPT4ge1xyXG4gICAgICAgICAgaWYgKHJlcy5zdWNjZXNzKSB7XHJcbiAgICAgICAgICAgIHJlcy5kYXRhID0gcmVzLmRhdGEubWFwKGVsZW1lbnQgPT4gbmV3IE1DdWVudGFCYW5jbyhlbGVtZW50KSk7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICByZXMuZGF0YSA9IFtdO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgcmV0dXJuIHJlc1xyXG4gICAgICAgIH0pIFxyXG4gICAgICApXHJcbiAgICB9IFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQGRlc2NyaXB0aW9uIE9idGllbmUgbG9zIGJhbmNvcyBzaWdlY29mXHJcbiAgICAgKiBAcmV0dXJuIE9ic2VydmFibGU8SVJlc3BvbnNlPlxyXG4gICAgICogQGF1dGhvciBDYXJsb3MgQWxib3Jub3pcclxuICAgICAqL1xyXG4gICAgcHVibGljIGdldFNpZ2Vjb2ZCYW5rcygpOiBPYnNlcnZhYmxlPElSZXNwb25zZT4ge1xyXG4gICAgICByZXR1cm4gdGhpcy5odHRwLmdldDxJUmVzcG9uc2U+KGAke3RoaXMuVVJMfS9kYW8vY2ZnL2JhbmNvX3NpZ2Vjb2ZfZGFvLnBocGAsIFxyXG4gICAgICB7IGhlYWRlcnM6IHRoaXMuZ2V0SHR0cEhlYWRlcnMoKSB9KS5waXBlKFxyXG4gICAgICAgIHJldHJ5KDMpLFxyXG4gICAgICAgIGNhdGNoRXJyb3IodGhpcy5oYW5kbGVyRXJyb3IpLFxyXG4gICAgICAgIG1hcCgocmVzOiBhbnkpID0+IHtcclxuICAgICAgICAgIGlmIChyZXMuc3VjY2Vzcykge1xyXG4gICAgICAgICAgICByZXMuZGF0YSA9IHJlcy5kYXRhLm1hcChlID0+IG5ldyBNU2lnZWNvZkJhbmsoZSkpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgcmV0dXJuIHJlcztcclxuICAgICAgICB9KVxyXG4gICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQGRlc2NyaXB0aW9uIE9idGllbmUgbGEgY29uZmlndXJhY2lvbiBkZSBTT0NcclxuICAgICAqIEByZXR1cm4gT2JzZXJ2YWJsZTxJUmVzcG9uc2U+XHJcbiAgICAgKiBAYXV0aG9yIENhcmxvcyBBbGJvcm5velxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgZ2V0Q29uZmlnU09DKGlkRW50ZXJwcmlzZTpudW1iZXIpOiBPYnNlcnZhYmxlPElSZXNwb25zZT4ge1xyXG4gICAgICByZXR1cm4gdGhpcy5odHRwLmdldDxJUmVzcG9uc2U+KGAke3RoaXMuVVJMfS9kYW8vc29jL2NvbmZpZ3VyYWNpb25fZGFvLnBocD9lPSR7aWRFbnRlcnByaXNlfWAsIFxyXG4gICAgICB7IGhlYWRlcnM6IHRoaXMuZ2V0SHR0cEhlYWRlcnMoKSB9KS5waXBlKFxyXG4gICAgICAgIHJldHJ5KDMpLFxyXG4gICAgICAgIGNhdGNoRXJyb3IodGhpcy5oYW5kbGVyRXJyb3IpLFxyXG4gICAgICAgIG1hcCgocmVzOiBhbnkpID0+IHtcclxuICAgICAgICAgIGlmIChyZXMuc3VjY2Vzcykge1xyXG4gICAgICAgICAgICByZXMuZGF0YSA9IG5ldyBNQ29uZmlnU09DKHJlcy5kYXRhKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHJldHVybiByZXM7XHJcbiAgICAgICAgfSlcclxuICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEBkZXNjcmlwdGlvbiBPYnRpZW5lIGxvcyB0aXBvcyBkZSBkZWR1Y2Npb25cclxuICAgICAqIEByZXR1cm4gT2JzZXJ2YWJsZTxJUmVzcG9uc2U+XHJcbiAgICAgKiBAYXV0aG9yIENhcmxvcyBBbGJvcm5velxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgZ2V0RGVkdWN0aW9uVHlwZXMoKTogT2JzZXJ2YWJsZTxJUmVzcG9uc2U+IHtcclxuICAgICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8SVJlc3BvbnNlPihgJHt0aGlzLlVSTH0vZGFvL3N0Yi90aXBvX2RlZHVjY2lvbl9kYW8ucGhwYCxcclxuICAgICAgeyBoZWFkZXJzOiB0aGlzLmdldEh0dHBIZWFkZXJzKCkgfSkucGlwZShcclxuICAgICAgICByZXRyeSgzKSxcclxuICAgICAgICBjYXRjaEVycm9yKHRoaXMuaGFuZGxlckVycm9yKSxcclxuICAgICAgICBtYXAoKHJlczogYW55KSA9PiB7XHJcbiAgICAgICAgICBpZiAocmVzLnN1Y2Nlc3MpIHtcclxuICAgICAgICAgICAgcmVzLmRhdGEgPSByZXMuZGF0YS5tYXAoZSA9PiBuZXcgTURlZHVjdGlvblR5cGUoZSkpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgcmV0dXJuIHJlcztcclxuICAgICAgICB9KVxyXG4gICAgICApO1xyXG4gICAgfVxyXG5cclxuXHJcblxyXG4gICAgcHVibGljIGdldEluY29tZUFjY291bnRzKHRpcG86c3RyaW5nLGlkRW50ZXJwcmlzZTpudW1iZXIscGVyaW9kb0Zpc2NhbDpudW1iZXIsbml2ZWw9MCxpZEVQPzpudW1iZXIsZXN0YXR1czpzdHJpbmc9JycpOiBPYnNlcnZhYmxlPGFueT57XHJcbiAgICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0KGAke3RoaXMuVVJMfS9kYW8vc3BpL2N1ZW50YXNfaW5ncmVzb3NfZGFvLnBocD90aXBvPSR7dGlwb30mZT0ke2lkRW50ZXJwcmlzZX0mcGVyPSR7cGVyaW9kb0Zpc2NhbH0mbml2PSR7bml2ZWx9JmVwPSR7aWRFUH0mZXN0PSR7ZXN0YXR1c31gLFxyXG4gICAgICAge2hlYWRlcnM6IHRoaXMuZ2V0SHR0cEhlYWRlcnMoKX0pLnBpcGUoXHJcbiAgICAgICAgbWFwKChyZXM6YW55KSA9PiB7XHJcbiAgICAgICAgICBpZiAocmVzLnN1Y2Nlc3MpIHtcclxuICAgICAgICAgICAgcmVzLmRhdGEgPSByZXMuZGF0YS5tYXAoZSA9PiBuZXcgTUN1ZW50YUluZ3Jlc29zKGUpKVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgcmV0dXJuIHJlcztcclxuICAgICAgICB9KVxyXG4gICAgICApXHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldENoYXJnZXMoaWRFbnRlcnByaXNlOm51bWJlcil7XHJcblxyXG4gICAgICByZXR1cm4gdGhpcy5odHRwLmdldDxJUmVzcG9uc2U+KFxyXG4gICAgICAgIGAke3RoaXMuVVJMfS9kYW8vc3RiL2Nhcmdvc19kYW8ucGhwP2xpbmVhPSR7aWRFbnRlcnByaXNlfWAsIFxyXG4gICAgICAgIHsgaGVhZGVyczogdGhpcy5nZXRIdHRwSGVhZGVycygpIH1cclxuICAgICAgKS5waXBlKFxyXG4gICAgICAgIG1hcCgocmVzOiBJUmVzcG9uc2UpID0+IHtcclxuICAgICAgICAgIGlmIChyZXMuc3VjY2Vzcykge1xyXG4gICAgICAgICAgICByZXMuZGF0YSA9IHJlcy5kYXRhLm1hcChlID0+IG5ldyBNQ2FyZ28oZSkpXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICByZXR1cm4gcmVzO1xyXG4gICAgICAgIH0pXHJcbiAgICAgIClcclxuICBcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0RGVkdWN0aW9ucyhpZEVudGVycHJpc2U6bnVtYmVyKXtcclxuICAgICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8SVJlc3BvbnNlPihcclxuICAgICAgICBgJHt0aGlzLlVSTH0vZGFvL3N0Yi9kZWR1Y2Npb25lc19kYW8ucGhwP2xpbmVhPSR7aWRFbnRlcnByaXNlfWAsIFxyXG4gICAgICAgIHsgaGVhZGVyczogdGhpcy5nZXRIdHRwSGVhZGVycygpIH1cclxuICAgICAgKS5waXBlKFxyXG4gICAgICAgIG1hcCgocmVzOiBJUmVzcG9uc2UpID0+IHtcclxuICAgICAgICAgIGlmIChyZXMuc3VjY2Vzcykge1xyXG4gICAgICAgICAgICByZXMuZGF0YSA9IHJlcy5kYXRhLm1hcChlID0+IG5ldyBNRGVkdWN0aW9uKGUpKVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgcmV0dXJuIHJlcztcclxuICAgICAgICB9KVxyXG4gICAgICApICBcclxuICAgIH1cclxuXHJcbiAgICAvKiogXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gT2J0aWVuZSBsYSBsb3MgZGF0b3MgZGUgRW1wcmVzYVxyXG4gICAgICogQHJldHVybiBPYnNlcnZhYmxlPElSZXNwb25zZT5cclxuICAgICAqIEBhdXRob3IgRGltYWx5IENyZXNwb1xyXG4gICAgICogXHJcbiAgICAgKi9cclxuICAgICBwdWJsaWMgZ2V0Q29tcGFueSh0aXBvPzpzdHJpbmcsaWQ/Om51bWJlcik6IE9ic2VydmFibGU8SVJlc3BvbnNlPiB7XHJcbiAgICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PElSZXNwb25zZT4oYCR7dGhpcy5VUkx9L2Rhby9jZmcvZW1wcmVzYXNfZGFvLnBocD90aXBvPSR7dGlwb30maWQ9JHtpZH1gLFxyXG4gICAgICB7IGhlYWRlcnM6IHRoaXMuZ2V0SHR0cEhlYWRlcnMoKSB9KS5waXBlKCAgICAgICAgXHJcbiAgICAgICAgbWFwKChyZXM6IGFueSkgPT4ge1xyXG4gICAgICAgICAgaWYgKHJlcy5zdWNjZXNzKSB7XHJcbiAgICAgICAgICAgIHJlcy5kYXRhID0gcmVzLmRhdGEubWFwKGUgPT4gbmV3IE1FbXByZXNhKGUpKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHJldHVybiByZXM7XHJcbiAgICAgICAgfSlcclxuICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICAgLyoqIFxyXG4gICAgICogQGRlc2NyaXB0aW9uIE9idGllbmUgbG9zIHRpcG9zIGRlIGRvY3VtZW50b3MgcmVnaXN0cmFkb3MgZW4gQ1hQXHJcbiAgICAgKiBAcmV0dXJuIE9ic2VydmFibGU8SVJlc3BvbnNlPlxyXG4gICAgICogQGF1dGhvciBEaW1hbHkgQ3Jlc3BvXHJcbiAgICAgKiBAZGF0ZSAyMC0wNy0yMDIxXHJcbiAgICAgKi9cclxuICAgICAgcHVibGljIGdldFRpcG9zRG9jdW1ldG9zKGlkRW50ZXJwcmlzZTpudW1iZXIpOiBPYnNlcnZhYmxlPElSZXNwb25zZT4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PElSZXNwb25zZT4oYCR7dGhpcy5VUkx9L2Rhby9jeHAvdGlwb19kb2N1bWVudG9fZGFvLnBocD9vcGVyYWNpb249JHsnYnVzY2FyJ30maT0ke2lkRW50ZXJwcmlzZX1gLFxyXG4gICAgICAgIHsgaGVhZGVyczogdGhpcy5nZXRIdHRwSGVhZGVycygpIH0pLnBpcGUoXHJcbiAgICAgICAgICByZXRyeSgzKSxcclxuICAgICAgICAgIGNhdGNoRXJyb3IodGhpcy5oYW5kbGVyRXJyb3IpLFxyXG4gICAgICAgICAgbWFwKChyZXM6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICBpZiAocmVzLnN1Y2Nlc3MpIHsgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgIHJlcy5kYXRhID0gcmVzLmRhdGEubWFwKGUgPT4gbmV3IE1UaXBvRG9jdW1lbnRvQ1hQKGUpKTsgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiByZXM7XHJcbiAgICAgICAgICB9KVxyXG4gICAgICAgICk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgLyoqXHJcbiAgICAgICogQHBhcmFtIGdldCB0b21hIGxvcyB2YWxvcmVzOiBbIGlkT3JkZW5Db21wcmEgLCdyZWNlcGNpb24nLCdleGlzdGVuJywnY29kaWdvJywgJ29yZGVuZXNTT0MnLCAnb3AnLCAnYXJ0JyBdXHJcbiAgICAgICogQHBhcmFtIG4gY29kaWdvIERvY3VtZW50byBPcmRlbiwgc2UgdXNhIHBhcmEgb2J0ZW5lciBsb3MgZGV0YWxsZXMgZGUgbGEgb3JkZW4gZGUgY29tcHJhLCBlcyBvYmxpZ2F0b3JpbyBhbCBjb21iaW5hciBjb24gbGEgb3BjaW9uIGdldDogaWRPcmRlbkNvbXByYVxyXG4gICAgICAqIEBkZXNjcmlwdGlvbiAncmVjZXBjaW9uJzogT2J0aW5lIGxhcyBvcmRlbmVzIGRlIHN1bWluaXN0cm8sXHJcbiAgICAgICogZXhpc3RlIHkgY29kaWdvOiBPYnRpZW5lIGxvcyBjb2RpZ29zIHJlZ2lzdHJhZG9zLCBcclxuICAgICAgKiBvcmRlbmVzU09DOiBvYnRpZW5lIGxhcyBvcmRlbmVzIGRlIGNvbXByYSxcclxuICAgICAgKiBvcDogb2J0aWVuZSBsYXMgb3JkZW5lcyBwZW5kaWVudGVzXHJcbiAgICAgICogYXJ0OiBvYnRpZW5lIGxvcyBhcnRpY3Vsb3MgXHJcbiAgICAgICogQHJldHVybiBPYnNlcnZhYmxlPElSZXNwb25zZT5cclxuICAgICAgKiBAZGF0ZSAzLTEwLTIwMjFcclxuICAgICAgKiBAcmV0dXJucyBcclxuICAgICAgKi9cclxuICAgICAgIHB1YmxpYyBnZXRFbnRyYWRhU3VtaW5pc3Ryb3MoZ2V0OmFueSwgbj86c3RyaW5nKTogT2JzZXJ2YWJsZTxJUmVzcG9uc2U+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy5odHRwLmdldDxJUmVzcG9uc2U+KGAke3RoaXMuVVJMfS9kYW8vc2l2L2VudHJhZGFfc3VtaW5pc3Ryb19kYW8ucGhwP2dldD0ke2dldH0mbj0ke259YCxcclxuICAgICAgICB7IGhlYWRlcnM6IHRoaXMuZ2V0SHR0cEhlYWRlcnMoKSB9KS5waXBlKFxyXG4gICAgICAgICAgcmV0cnkoMyksXHJcbiAgICAgICAgICBjYXRjaEVycm9yKHRoaXMuaGFuZGxlckVycm9yKSxcclxuICAgICAgICAgIG1hcCgocmVzOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgaWYgKHJlcy5zdWNjZXNzKSB7ICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgcmVzLmRhdGEgPSByZXMuZGF0YS5tYXAoZSA9PiBuZXcgTUVudHJhZGFTdW1pbmlzdHJvcyhlKSlcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gcmVzO1xyXG4gICAgICAgICAgfSlcclxuICAgICAgICApO1xyXG4gICAgICB9XHJcbiAgICAvKiogXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gT2J0aWVuZSBsb3MgdGlwb3MgZGUgZG9jdW1lbnRvcyByZWdpc3RyYWRvcyBlbiBDWFBcclxuICAgICAqIEByZXR1cm4gT2JzZXJ2YWJsZTxJUmVzcG9uc2U+XHJcbiAgICAgKiBAYXV0aG9yIERpbWFseSBDcmVzcG9cclxuICAgICAqIEBkYXRlIDIwLTA3LTIwMjFcclxuICAgICAqL1xyXG5cclxuICAgICAgcHVibGljIGdldENvbmNlcHRvc0N4UChpZEVudGVycHJpc2U6bnVtYmVyKXtcclxuICAgICAgICByZXR1cm4gdGhpcy5odHRwLmdldDxJUmVzcG9uc2U+KGAke3RoaXMuVVJMfS9kYW8vY3hwL2NvbmNlcHRvX2Rhby5waHA/b3BlcmFjaW9uPSR7J2J1c2Nhcid9Jmk9JHtpZEVudGVycHJpc2V9YCxcclxuICAgICAgICB7IGhlYWRlcnM6IHRoaXMuZ2V0SHR0cEhlYWRlcnMoKSB9KS5waXBlKFxyXG4gICAgICAgICAgcmV0cnkoMyksXHJcbiAgICAgICAgICBjYXRjaEVycm9yKHRoaXMuaGFuZGxlckVycm9yKSxcclxuICAgICAgICAgIG1hcCgocmVzOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgaWYgKHJlcy5zdWNjZXNzKSB7ICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICByZXMuZGF0YSA9IHJlcy5kYXRhLm1hcChlID0+IG5ldyBNQ29uY2VwdG9zQ1hQKGUpKTsgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiByZXM7XHJcbiAgICAgICAgICB9KVxyXG4gICAgICAgICk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgICAvKiogXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gT2J0aWVuZSBsb3MgbG9zIGNvbmNlcHRvcyBSZXRlbmNpb24gSVNSTFxyXG4gICAgICogQHJldHVybiBPYnNlcnZhYmxlPElSZXNwb25zZT5cclxuICAgICAqIEBhdXRob3IgRGltYWx5IENyZXNwb1xyXG4gICAgICogQGRhdGUgMjYtMDctMjAyMVxyXG4gICAgICovXHJcblxyXG4gICAgICAgIHB1YmxpYyBnZXRDb25jZXB0b3NSZXRlbmNpb24odGlwbzpzdHJpbmcsaWRUaXBvRGVkdWNjaW9uOm51bWJlcil7XHJcbiAgICAgICAgICByZXR1cm4gdGhpcy5odHRwLmdldDxJUmVzcG9uc2U+KGAke3RoaXMuVVJMfS9kYW8vc3RiL2RlZHVjY2lvbmVzX2Rhby5waHA/dGlwbz0ke3RpcG99JmNvZGU9JHtpZFRpcG9EZWR1Y2Npb259YCxcclxuICAgICAgICAgIHsgaGVhZGVyczogdGhpcy5nZXRIdHRwSGVhZGVycygpIH0pLnBpcGUoXHJcbiAgICAgICAgICAgIHJldHJ5KDMpLFxyXG4gICAgICAgICAgICBjYXRjaEVycm9yKHRoaXMuaGFuZGxlckVycm9yKSxcclxuICAgICAgICAgICAgbWFwKChyZXM6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICAgIGlmIChyZXMuc3VjY2VzcykgeyAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICByZXMuZGF0YSA9IHJlcy5kYXRhLm1hcChlID0+IG5ldyBNQ29uY2VwdG9SZXRlbmNpb24oZSkpOyAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIHJldHVybiByZXM7XHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgLyoqIFxyXG4gICAgICogQGRlc2NyaXB0aW9uIE9idGllbmUgbGEgY29uZmlndXJhY2nDs24gZGUgUlJISCB5IGRlIFNOT1xyXG4gICAgICogQHJldHVybiBPYnNlcnZhYmxlPElSZXNwb25zZT5cclxuICAgICAqIEBhdXRob3IgRGltYWx5IENyZXNwb1xyXG4gICAgICovXHJcbiAgICAgIHB1YmxpYyBvYnRlbmVyQ29uZmlndXJhY2lvblNOTyhpZEVudGVycHJpc2U6bnVtYmVyKXtcclxuICAgICAgXHJcbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8SVJlc3BvbnNlPihgJHt0aGlzLlVSTH0vZGFvL3Nuby9jb25maWd1cmFjaW9uX2Rhby5waHA/dGlwbz0keydjb25maWd1cmFjaW9uJ31lPSR7aWRFbnRlcnByaXNlfWAsXHJcbiAgICAgICAgeyBoZWFkZXJzOiB0aGlzLmdldEh0dHBIZWFkZXJzKCkgfSkucGlwZShcclxuICAgICAgICAgIHJldHJ5KDMpLFxyXG4gICAgICAgICAgY2F0Y2hFcnJvcih0aGlzLmhhbmRsZXJFcnJvciksXHJcbiAgICAgICAgICBtYXAoKHJlczogYW55KSA9PiB7XHJcbiAgICAgICAgICAgIGlmIChyZXMuc3VjY2VzcykgeyBcclxuICAgICAgICAgICAgICAgIGlmIChyZXMuZGF0YS5sZW5ndGg+MCl7XHJcbiAgICAgICAgICAgICAgICAgIHJlcy5kYXRhID0gcmVzLmRhdGEubWFwKGUgPT4gbmV3IE1Db25maWd1cmFjaW9uU05PKGUpKTsgIFxyXG4gICAgICAgICAgICAgICAgfSAgICAgICAgXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIHJlcztcclxuICAgICAgICAgIH0pXHJcbiAgICAgICAgKTtcclxuICAgICAgICAgIFxyXG4gICAgICB9XHJcblxyXG4gICAgIC8qKlxyXG4gICAgICAqIFxyXG4gICAgICAqIEBwYXJhbSB0aXBvIFsnZGVmYXVsdCcsICd1bm8nLCAnY2FyZ29zJywnbGluZWEnXSBkYWZhdWx0OlRvZGFzIGxhcyBub21pbmFzLCB1bm86IHVuYSBub21pbmEsIFxyXG4gICAgICAqICAgJ2Nhcmdvcyc6IG5vbWluYXMgcG9yIGNhcmdvcywgJ2xpbmVhJzogbm9taW5hcyBhY3RpdmFzIHBvciBsaW5lYXNcclxuICAgICAgKiBAcGFyYW0gaWQgOiBQYXJhIGxvcyB0aXBvOiB1bm8geSBjYXJnb3MgZWwgaWQgZXMgaWROb21pbmEuIFBhcmEgbGluZWE6IGlkIGVzIGVsIGlkRW50ZXJwcmlzZVxyXG4gICAgICAqIEByZXR1cm5zIGFycmF5KCkgICAgICBcclxuICAgICAgKiBAZGVzY3JpcHRpb24gT2J0aWVuZSBsYXMgbm9taW5hcyByZWdpc3RyYWRhc1xyXG4gICAgICAqIEByZXR1cm4gT2JzZXJ2YWJsZTxJUmVzcG9uc2U+XHJcbiAgICAgICogQGRhdGUgMjAtMTAtMjFcclxuICAgICAgKiBAYWN0dWFsaXphZG8gMjYtMDUtMjAyNFxyXG4gICAgICAqXHJcbiAgICAgKi8gICAgIFxyXG5cclxuICAgICAgIHB1YmxpYyBnZXROb21pbmEodGlwbzpzdHJpbmcsaWRFbnRlcnByaXNlOm51bWJlcixpZD86bnVtYmVyLGFjdD86bnVtYmVyKXtcclxuICAgICAgICByZXR1cm4gdGhpcy5odHRwLmdldDxJUmVzcG9uc2U+KGAke3RoaXMuVVJMfS9kYW8vc25vL2RlZmluaWNpb25fbm9taW5hX2Rhby5waHA/dGlwbz0ke3RpcG99JmlkPSR7aWR9JmU9JHtpZEVudGVycHJpc2V9YCxcclxuICAgICAgICB7IGhlYWRlcnM6IHRoaXMuZ2V0SHR0cEhlYWRlcnMoKSB9KS5waXBlKCAgICAgICAgIFxyXG4gICAgICAgICAgbWFwKChyZXM6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICBpZiAocmVzLnN1Y2Nlc3MpIHsgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgIHJlcy5kYXRhID0gcmVzLmRhdGEubWFwKGUgPT4gbmV3IE1EZWZpbmljaW9uTm9taW5hKGUpKTsgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiByZXM7XHJcbiAgICAgICAgICB9KVxyXG4gICAgICAgICk7XHJcbiAgICAgIH1cclxuXHJcbiAgIC8qKlxyXG4gICAgKiBAZGVzY3JpcHRpb24gT2J0aWVuZSBsb3MgY2FyZ29zIGRlIGxhcyBub21pbmFcclxuICAgICogQHBhcmFtIHRpcG8gWydjb2RpZ28nLCdkZWZhdWx0J10gLT5jb2RpZ286IG9idGllbmUgZWwgcHJveGltbyBjb2RpZ28uIC0+ZGVmYXVsdDogb2J0aWVuZSB0b2RvcyBsb3MgY2FyZ29zIGRlIGxhIG5vbWluYVxyXG4gICAgKiBAcGFyYW0gaWQgaWQgZGUgbGEgbm9taW5hXHJcbiAgICAqIEByZXR1cm5zIGFycmF5KClcclxuICAgICovXHJcbiAgICAgIHB1YmxpYyBnZXRDYXJnb3NOb21pbmEodGlwbzpzdHJpbmcsaWQ/Om51bWJlcil7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8SVJlc3BvbnNlPihgJHt0aGlzLlVSTH0vZGFvL3Nuby9hc2lnbmFjaW9uX2Nhcmdvc19kYW8ucGhwP3RpcG89JHt0aXBvfSZpZD0ke2lkfWAsXHJcbiAgICAgICAgeyBoZWFkZXJzOiB0aGlzLmdldEh0dHBIZWFkZXJzKCkgfSkucGlwZShcclxuICAgICAgICAgIHJldHJ5KDMpLFxyXG4gICAgICAgICAgY2F0Y2hFcnJvcih0aGlzLmhhbmRsZXJFcnJvciksXHJcbiAgICAgICAgICBtYXAoKHJlczogYW55KSA9PiB7XHJcbiAgICAgICAgICAgIGlmIChyZXMuc3VjY2VzcykgeyAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgcmVzLmRhdGEgPSByZXMuZGF0YS5tYXAoZSA9PiBuZXcgTUFzaWduYWNpb25DYXJnbyhlKSk7ICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gcmVzO1xyXG4gICAgICAgICAgfSlcclxuICAgICAgICApO1xyXG4gICAgICB9ICBcclxuICAgICAgXHJcbiAgICAgIC8qKlxyXG4gICAgICogQGRlc2NyaXB0aW9uIE9idGllbmUgdW4gcGVyc29uYWwgZGUgbGEgbsOzbWluYVxyXG4gICAgICogQHJldHVybiBPYnNlcnZhYmxlPElSZXNwb25zZT5cclxuICAgICAqIEBhdXRob3IgRGltYWx5IENyZXNwb1xyXG4gICAgICovXHJcbiAgICAgICBwdWJsaWMgZ2V0UGVyc29uYWxTUkgodGlwbzpzdHJpbmcsaWRFbnRlcnByaXNlOm51bWJlcixpZD86bnVtYmVyKXtcclxuICAgICAgICByZXR1cm4gdGhpcy5odHRwLmdldDxJUmVzcG9uc2U+KGAke3RoaXMuVVJMfS9kYW8vc25vL3BlcnNvbmFsX2Rhby5waHA/dGlwbz0ke3RpcG99JmlkPSR7aWR9JmU9JHtpZEVudGVycHJpc2V9YCxcclxuICAgICAgICB7IGhlYWRlcnM6IHRoaXMuZ2V0SHR0cEhlYWRlcnMoKSB9KS5waXBlKFxyXG4gICAgICAgICAgcmV0cnkoMyksXHJcbiAgICAgICAgICBjYXRjaEVycm9yKHRoaXMuaGFuZGxlckVycm9yKSxcclxuICAgICAgICAgIG1hcCgocmVzOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgaWYgKHJlcy5zdWNjZXNzKSB7ICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICByZXMuZGF0YSA9IHJlcy5kYXRhLm1hcChlID0+IG5ldyBNUGVyc29uYWwoZSkpOyAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIHJlcztcclxuICAgICAgICAgIH0pXHJcbiAgICAgICAgKTtcclxuICAgICAgfSBcclxuXHJcbiAgICAgIC8qKlxyXG4gICAgICogQGRlc2NyaXB0aW9uIE9idGllbmUgbGFzIGFnZW5jaWEgZGUgYmFuY29cclxuICAgICAqIEByZXR1cm4gT2JzZXJ2YWJsZTxJUmVzcG9uc2U+XHJcbiAgICAgKiBAYXV0aG9yIERpbWFseSBDcmVzcG9cclxuICAgICAqL1xyXG4gICAgICAgcHVibGljIGdldEFnZW5jaWFCYW5jbyh0aXBvOnN0cmluZyxpZEVudGVycHJpc2U/Om51bWJlciwgaWQ/Om51bWJlcil7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8SVJlc3BvbnNlPihgJHt0aGlzLlVSTH0vZGFvL3NjYi9hZ2VuY2lhX2Rhby5waHA/Y29kZT0ke3RpcG99JmlkPSR7aWR9ZT0ke2lkRW50ZXJwcmlzZX1gLFxyXG4gICAgICAgIHsgaGVhZGVyczogdGhpcy5nZXRIdHRwSGVhZGVycygpIH0pLnBpcGUoXHJcbiAgICAgICAgICByZXRyeSgzKSxcclxuICAgICAgICAgIGNhdGNoRXJyb3IodGhpcy5oYW5kbGVyRXJyb3IpLFxyXG4gICAgICAgICAgbWFwKChyZXM6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICBpZiAocmVzLnN1Y2Nlc3MpIHsgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgIHJlcy5kYXRhID0gcmVzLmRhdGEubWFwKGUgPT4gbmV3IE1BZ2VuY2lhQmFuY28oZSkpOyAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIHJlcztcclxuICAgICAgICAgIH0pXHJcbiAgICAgICAgKTtcclxuICAgICAgfSBcclxuXHJcbiAgICAvKipcclxuICAgICAqIEBkZXNjcmlwdGlvbiBPYnRpZW5lIGxhIGhvamFzIGRlIHRpZW1wb1xyXG4gICAgICogQHJldHVybiBPYnNlcnZhYmxlPElSZXNwb25zZT5cclxuICAgICAqIEBhdXRob3IgRGltYWx5IENyZXNwb1xyXG4gICAgICovXHJcbiAgICAgICAgICAgcHVibGljIGdldEhvamFUaWVtcG8odGlwbzpzdHJpbmcsaWRQZXJzb25hbD86bnVtYmVyLGlkTm9taW5hPzpudW1iZXIpe1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5odHRwLmdldDxJUmVzcG9uc2U+KGAke3RoaXMuVVJMfS9kYW8vc25vL2hvamFfdGllbXBvX2Rhby5waHA/aWRQZXJzb25hbD0ke2lkUGVyc29uYWx9JmlkTm9taW5hPSR7aWROb21pbmF9YCxcclxuICAgICAgICAgICAgeyBoZWFkZXJzOiB0aGlzLmdldEh0dHBIZWFkZXJzKCkgfSkucGlwZShcclxuICAgICAgICAgICAgICByZXRyeSgzKSxcclxuICAgICAgICAgICAgICBjYXRjaEVycm9yKHRoaXMuaGFuZGxlckVycm9yKSxcclxuICAgICAgICAgICAgICBtYXAoKHJlczogYW55KSA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAocmVzLnN1Y2Nlc3MpIHsgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICByZXMuZGF0YSA9IHJlcy5kYXRhLm1hcChlID0+IG5ldyBNSG9qYVRpZW1wbyhlKSk7ICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHJldHVybiByZXM7XHJcbiAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgIH0gICAgICAgICBcclxuICAgICAgICAgXHJcbiAgICAvKipcclxuICAgICAqIEBkZXNjcmlwdGlvbiBPYnRpZW5lIGxvcyBjbGllbnRlcyBcclxuICAgICAqIEByZXR1cm4gT2JzZXJ2YWJsZTxJUmVzcG9uc2U+XHJcbiAgICAgKiBAYXV0aG9yIERpbWFseSBDcmVzcG9cclxuICAgICAqIEB0aXBvIFtiYXNpY28sY29kaWdvLGNlZHVsYV1cclxuICAgICAqIFxyXG4gICAgICovXHJcblxyXG4gICAgcHVibGljIGdldENsaWVudGUodGlwbzogc3RyaW5nID0nZGVmYXVsdCcsIGlkOm51bWJlcj0wLCBjb2RpZ286c3RyaW5nPScnLCBjZWR1bGE6c3RyaW5nPScnKTogT2JzZXJ2YWJsZTxJUmVzcG9uc2U+IHtcclxuICAgICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8SVJlc3BvbnNlPihgJHt0aGlzLlVSTH0vZGFvL3Nmdi9jbGllbnRfZGFvLnBocD90aXBvPSR7dGlwb30maWQ9JHtpZH0mY29kaWdvPSR7Y29kaWdvfSZjZWRyaWZjbGk9JHtjZWR1bGF9YCwgXHJcbiAgICAgIHsgaGVhZGVyczogdGhpcy5nZXRIdHRwSGVhZGVycygpIH0pLnBpcGUoICAgICAgIFxyXG4gICAgICAgIG1hcCgocmVzOiBhbnkpID0+IHtcclxuICAgICAgICAgIGlmIChyZXMuc3VjY2Vzcykge1xyXG4gICAgICAgICAgICByZXMuZGF0YSA9IHJlcy5kYXRhLm1hcChlID0+IG5ldyBNQ2xpZW50KGUpKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHJldHVybiByZXM7XHJcbiAgICAgICAgfSlcclxuICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEBkZXNjcmlwdGlvbiBWYWxpZGEgc2kgbGEgZmVjaGEgZXN0YSBkZW50cm8gZGVsIHBlcmlvZG8gZmlzY2FsIHkgZWwgbWVzIGVzdGEgYWJpZXJ0byBvIGNlcnJhZG9cclxuICAgICAqIEByZXR1cm4gT2JzZXJ2YWJsZTxJUmVzcG9uc2U+XHJcbiAgICAgKiBAcGFyYW0gZmVjaGE6IGZlY2hhIGEgY29tcGFyYXJcclxuICAgICAqIEBwYXJhbSBsaW5lYUVtcHJlc2E6IGxpbmVhIGVtcHJlc2EgZGVsIGRvY3VtZW50b1xyXG4gICAgICogQHBhcmFtIHBlcmlvZG9GaXNjYWwgOiBmZWNoYSBkZWwgcGVyaW9kbyBhIGV2YWx1YXIgJzE5MDAtMDEtMDEnXHJcbiAgICAgKiBAYXV0aG9yIERpbWFseSBDcmVzcG9cclxuICAgICAqIEBmZWNoYSAxMS0xMC0yMDIzXHJcbiAgICAgKiBcclxuICAgICAqL1xyXG4gICAgICAgcHVibGljIGdldFZhbGlkYXJQZXJpb2RvKGZlY2hhOnN0cmluZywgcGVyaW9kb0Zpc2NhbDpzdHJpbmcsIGxpbmVhRW1wcmVzYTpudW1iZXIpe1xyXG4gICAgICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PElSZXNwb25zZT4oYCR7dGhpcy5VUkx9L2Rhby9zY2cvY29uZmlndXJhY2lvbl9jb250YWJpbGlkYWRfZGFvLnBocD90aXBvPSR7J3ZhbGlkYUZlY2hhJ30mZmVjaGE9JHtmZWNoYX0mcGVyaW9kbz0ke3BlcmlvZG9GaXNjYWx9JmU9JHtsaW5lYUVtcHJlc2F9YCxcclxuICAgICAgICB7IGhlYWRlcnM6IHRoaXMuZ2V0SHR0cEhlYWRlcnMoKSB9KS5waXBlKG1hcCgocmVzOiBhbnkpID0+IHsgcmV0dXJuIHJlczt9KSk7XHJcbiAgICAgIH0gXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICogQGRlc2NyaXB0aW9uIE9idGllbmUgbG9zIHBlcmlvZG8gZmlzY2FsZXMgY29uZmlndXJhZG9zIGVuIFNDRyB5IFNQRyBtZW5vcmVzIG8gaWd1YWxlcyBhbCBwZXJpb2RvIGZpc2NhbCBhY3R1YWwuXHJcbiAgICAgKiBAcmV0dXJuIE9ic2VydmFibGU8SVJlc3BvbnNlPlxyXG4gICAgICogQHBhcmFtIGxpbmVhRW1wcmVzYTogbGluZWEgZW1wcmVzYSBkZWwgZG9jdW1lbnRvXHJcbiAgICAgKiBAYXV0aG9yIERpbWFseSBDcmVzcG9cclxuICAgICAqIEBmZWNoYSAwMS0xMC0yMDI0ICAgIFxyXG4gICAgICovXHJcbiAgICAgIHB1YmxpYyBnZXRQZXJpb2Rvc0NvbmZpZ3VyYWRvcyhsaW5lYUVtcHJlc2E6bnVtYmVyKXtcclxuICAgICAgICByZXR1cm4gdGhpcy5odHRwLmdldDxJUmVzcG9uc2U+KGAke3RoaXMuVVJMfS9kYW8vc2NnL2NvbmZpZ3VyYWNpb25fY29udGFiaWxpZGFkX2Rhby5waHA/dGlwbz0keydwZXJpb2RvQ29uZmlnJ30mZT0ke2xpbmVhRW1wcmVzYX1gLFxyXG4gICAgICAgIHsgaGVhZGVyczogdGhpcy5nZXRIdHRwSGVhZGVycygpIH0pLnBpcGUobWFwKChyZXM6IGFueSkgPT4geyByZXR1cm4gcmVzO30pKTtcclxuICAgICAgfSBcclxuXHJcblxyXG4gICAgICAgICAvKipcclxuICAgICAqIEBkZXNjcmlwdGlvbiBPYnRpZW5lIGxvcyBwZXJpb2RvIGZpc2NhbGVzIGNvbmZpZ3VyYWRvcyBlbiBTQ0cgeSBTUEcgbWVub3JlcyBhbCBwZXJpb2RvIGZpc2NhbCBhY3R1YWwgeSBlbCBpbm1lZGlhdG8uXHJcbiAgICAgKiBAcmV0dXJuIE9ic2VydmFibGU8SVJlc3BvbnNlPlxyXG4gICAgICogQHBhcmFtIGxpbmVhRW1wcmVzYTogbGluZWEgZW1wcmVzYSBkZWwgZG9jdW1lbnRvXHJcbiAgICAgKiBAYXV0aG9yIERpbWFseSBDcmVzcG9cclxuICAgICAqIEBmZWNoYSAwMS0xMC0yMDI0ICAgIFxyXG4gICAgICovXHJcbiAgICAgICAgIHB1YmxpYyBnZXRQZXJpb2Rvc0NvbmZpZ3VyYWRvc1NDR1NQRyhsaW5lYUVtcHJlc2E6bnVtYmVyKXtcclxuICAgICAgICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PElSZXNwb25zZT4oYCR7dGhpcy5VUkx9L2Rhby9zY2cvY29uZmlndXJhY2lvbl9jb250YWJpbGlkYWRfZGFvLnBocD90aXBvPSR7J3BlcmlvZG9TQ0dTUEcnfSZlPSR7bGluZWFFbXByZXNhfWAsXHJcbiAgICAgICAgICB7IGhlYWRlcnM6IHRoaXMuZ2V0SHR0cEhlYWRlcnMoKSB9KS5waXBlKG1hcCgocmVzOiBhbnkpID0+IHsgcmV0dXJuIHJlczt9KSk7XHJcbiAgICAgICAgfSBcclxuXHJcblxyXG4gICAgcHVibGljIHVzZXJIYXNSaWdodHMoY29sdW1uOidhZG1pbmlzdHJhZG9yJyB8ICdpbnNlcnRhcicgfCAnYWN0dWFsaXphcicgfCAnY29uc3VsdGFyJyBcclxuICAgIHwgJ2VsaW1pbmFyJyB8ICdhbnVsYXInIHwnZGVzY2FyZ2FyJyB8ICdlamVjdXRhcl9fcHJvY2VzYXJfJyB8ICdpbXByaW1pcicgXHJcbiAgICB8ICdlbnZpYXJfX2NvcnJlb18nIHwgJ3Zpc2libGUnKXtcclxuXHJcbiAgICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PElSZXNwb25zZT4oXHJcbiAgICAgICAgYCR7dGhpcy5VUkx9L2Rhby9zc3MvZGVyZWNob3NfdXN1YXJpb19kYW8ucGhwP2lkQ29tcG9uZW50PSR7XHJcbiAgICAgICAgICB0aGlzLmN1cnJlbnRDb21wb25lbnQuaWRcclxuICAgICAgICB9JmNvbHVtbj0ke2NvbHVtbn1gLCBcclxuICAgICAgICB7IGhlYWRlcnM6IHRoaXMuZ2V0SHR0cEhlYWRlcnMoKSB9XHJcbiAgICAgIClcclxuXHJcbiAgICB9XHJcblxyXG4gICAvKipcclxuICAgICAqIEBkZXNjcmlwdGlvbiBSZXRvcm5hIGxvcyBoZWFkZXJzIHBhcmEgaGFjZXIgbGFzIHBldGljaW9uZXNcclxuICAgICAqIEBwYXJhbXMgdHlwZTogVGlwbyBNSU1FIHBlcm1pdGlkbyBwb3IgZGVmZWN0byBzZSB0b21hIGFwcGxpY2F0aW9uL2pzb25cclxuICAgICAqIEByZXR1cm4gSHR0cEhlYWRlcnNcclxuICAgICAqIEBhdXRob3IgTWlndWVsIFJhbcOtcmV6XHJcbiAgICAgKiBAZGF0ZS11cGRhdGU6IDE1LTA2LTIwMjIgXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBnZXRIdHRwSGVhZGVycyh0eXBlPzpzdHJpbmcpOiBIdHRwSGVhZGVycyB7IFxyXG4gICAgICAhdHlwZT8gdHlwZT0nYXBwbGljYXRpb24vanNvbic6Jyc7ICAgICAgXHJcbiAgICAgIGNvbnN0IGhlYWRlcnMgPSBuZXcgSHR0cEhlYWRlcnMoe1xyXG4gICAgICAgICdDb250ZW50LVR5cGUnOiB0eXBlLFxyXG4gICAgICAgICdBdXRob3JpemF0aW9uJzogYCR7dGhpcy51c3VhcmlvQWN0aXZvLnRva2VufWBcclxuICAgICAgfSk7XHJcbiAgICAgIHJldHVybiBoZWFkZXJzO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQGRlc2NyaXB0aW9uIE9idGllbmUgZWwgc2Vydmlkb3IgZ3VhcmRhZG8gZW4gZWwgc2Vzc2lvblN0b3JhZ2VcclxuICAgICAqIEByZXR1cm4gc3RyaW5nXHJcbiAgICAgKiBAYXV0aG9yIE1pZ3VlbCBSYW3DrXJlelxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgZ2V0U2VydmVyKCk6IHN0cmluZyB7XHJcbiAgICAgIHJldHVybiB0aGlzLlVSTDtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEBkZXNjcmlwdGlvbiBPYnRpZW5lIGVsIHVzdWFyaW8gZ3VhcmRhZG8gZW4gZWwgc2Vzc2lvblN0b3JhZ2VcclxuICAgICAqIEByZXR1cm4gTVVzdWFyaW9cclxuICAgICAqIEBhdXRob3IgTWlndWVsIFJhbcOtcmV6XHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBhc3luYyBnZXRVc2VyKCkge1xyXG4gICAgICBsZXQgY29uZXhpb246IElDb25leGlvbiA9IGF3YWl0IChzZXNzaW9uU3RvcmFnZS5nZXRJdGVtKCd1c2VyJykpID8gSlNPTi5wYXJzZShhdG9iKHNlc3Npb25TdG9yYWdlLmdldEl0ZW0oJ3VzZXInKSkpIDogbnVsbDtcclxuICAgICAgLy9jb25zb2xlLmxvZyhjb25leGlvbilcclxuICAgICAgLy8gZGVidWdnZXJcclxuICAgICAgaWYgKGNvbmV4aW9uKSB7XHJcbiAgICAgICAgdGhpcy51c3VhcmlvQWN0aXZvID0gbmV3IE1Vc3VhcmlvKGNvbmV4aW9uLnVzdWFyaW8pO1xyXG4gICAgICAgIHRoaXMuVVJMID0gY29uZXhpb24uc2Vydmlkb3I7XHJcbiAgICAgIH1cclxuXHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gTXVlc3RyYSB1biB0b2FzdCBkZSBzdWNjZXNzXHJcbiAgICAgKiBAcGFyYW0gbWVzc2FnZSBNZW5zYWplIHF1ZSBzZSB2YSBhIG1vc3RyYXJcclxuICAgICAqIEByZXR1cm4gdm9pZFxyXG4gICAgICogQGF1dGhvciBNaWd1ZWwgUmFtw61yZXpcclxuICAgICAqL1xyXG4gICAgcHVibGljIHNob3dUb2FzdFN1Y2Nlc3MobWVzc2FnZTogc3RyaW5nKTogdm9pZCB7XHJcbiAgICAgIHRoaXMudG9hc3Quc3VjY2VzcyhtZXNzYWdlKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEBkZXNjcmlwdGlvbiBNdWVzdHJhIHVuIHRvYXN0IGRlIGVycm9yXHJcbiAgICAgKiBAcGFyYW0gbWVzc2FnZSBNZW5zYWplIHF1ZSBzZSB2YSBhIG1vc3RyYXJcclxuICAgICAqIEByZXR1cm4gdm9pZFxyXG4gICAgICogQGF1dGhvciBNaWd1ZWwgUmFtw61yZXpcclxuICAgICAqL1xyXG4gICAgcHVibGljIHNob3dUb2FzdEVycm9yKG1lc3NhZ2U6IHN0cmluZyk6IHZvaWQge1xyXG4gICAgICB0aGlzLnRvYXN0LmVycm9yKG1lc3NhZ2UpO1xyXG4gICAgfVxyXG5cclxuICAgICAgLyoqXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gTXVlc3RyYSB1biBzd2VldGFsZXJ0MiBkZSDDqXhpdG9cclxuICAgICAqIEBwYXJhbSBtZXNzYWdlIE1lbnNhamUgcXVlIHNlIHZhIGEgbW9zdHJhclxyXG4gICAgICogQHJldHVybiB2b2lkXHJcbiAgICAgKiBAZGF0ZSAyMi0xMS0yMDIxXHJcbiAgICAgKi9cclxuICAgICAgIHB1YmxpYyBzaG93VG9hc3RTdWNjZXNzU3dhbChtZXNzYWdlOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgICAgICBTd2FsLmZpcmUoe1xyXG4gICAgICAgICAgaWNvbjogJ3N1Y2Nlc3MnLFxyXG4gICAgICAgICAgdGl0bGU6ICfDiXhpdG8nLFxyXG4gICAgICAgICAgdGV4dDogbWVzc2FnZSwgIFxyXG4gICAgICAgIH0pXHJcbiAgICAgIH1cclxuXHJcbiAgICAgIFxyXG5cclxuICAgICAvKipcclxuICAgICAqIEBkZXNjcmlwdGlvbiBNdWVzdHJhIHVuIHN3ZWV0YWxlcnQyIGRlIGVycm9yXHJcbiAgICAgKiBAcGFyYW0gbWVzc2FnZSBNZW5zYWplIHF1ZSBzZSB2YSBhIG1vc3RyYXJcclxuICAgICAqIEByZXR1cm4gdm9pZFxyXG4gICAgICogQGRhdGUgMjItMTEtMjAyMVxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgc2hvd1RvYXN0RXJyb3JTd2FsKG1lc3NhZ2U6IHN0cmluZyk6IHZvaWQge1xyXG4gICAgICBTd2FsLmZpcmUoe1xyXG4gICAgICAgIGljb246ICdlcnJvcicsXHJcbiAgICAgICAgdGl0bGU6ICfCoUVycm9yIScsXHJcbiAgICAgICAgdGV4dDogbWVzc2FnZSwgIFxyXG4gICAgICAgICAgICAgXHJcbiAgICAgIH0pXHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gR3VhcmRhIGVsIHVzdWFyaW8gbG9ndWVhZG8gZW4gZWwgU2Vzc2lvblN0b3JhZ2VcclxuICAgICAqIEBwYXJhbSB1c2VyIFVzdWFyaW8gcXVlIHNlIHZhIGEgZ3VhcmRhciBlbiBlbCBTZXNzaW9uU3RvcmFnZVxyXG4gICAgICogQHJldHVybiB2b2lkXHJcbiAgICAgKiBAYXV0aG9yIE1pZ3VlbCBSYW3DrXJlelxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgc2F2ZVVzZXIoZGF0YTogSUNvbmV4aW9uKTogdm9pZCB7XHJcbiAgICAgIHRoaXMudXN1YXJpb0FjdGl2byA9IG5ldyBNVXN1YXJpbyhkYXRhLnVzdWFyaW8pO1xyXG4gICAgICB0aGlzLlVSTCA9IGRhdGEuc2Vydmlkb3I7XHJcbiAgICAgIGxldCBlbmNyeXB0ZWRVc2VyOiBzdHJpbmcgPSBidG9hKEpTT04uc3RyaW5naWZ5KGRhdGEpKTtcclxuICAgICAgc2Vzc2lvblN0b3JhZ2Uuc2V0SXRlbSgndXNlcicsIGVuY3J5cHRlZFVzZXIpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQGRlc2NyaXB0aW9uIFNldGUgYSBsYSB1cmwgYSBsYSBjdWFsIHNlIGxlIHZhbiBhIHJlYWxpemFyIHBldGljaW9uZXMgYWwgYmFja0VuZFxyXG4gICAgICogQHBhcmFtIHVybCBVUmwgZG9uZGUgc2UgdmFuIGEgcmVhbGl6YXIgbGFzIHBldGljaW9uZXNcclxuICAgICAqIEByZXR1cm4gdm9pZFxyXG4gICAgICogQGF1dGhvciBNaWd1ZWwgUmFtw61yZXpcclxuICAgICAqL1xyXG4gICAgcHVibGljIHNldFVybCh1cmw6IHN0cmluZyk6IHZvaWQge1xyXG4gICAgICB0aGlzLlVSTCA9IHVybDtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEBkZXNjcmlwdGlvbiBJbmljaWFsaXphIGVsIHNlcnZpY2lvIGRlIHNpZ2VzcFxyXG4gICAgICogQHJldHVybiB2b2lkXHJcbiAgICAgKiBAYXV0aG9yIE1pZ3VlbCBSYW3DrXJlelxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgaW5pdCgpOiB2b2lkIHtcclxuICAgICAgLy8gVmVyaWZpY2Ftb3Mgc2kgaGF5IHVuIHVzdWFyaW8gZW4gbGEgc2Vzc2lvblN0b3JhZ2UsIGVzdG8gZXMgbmVjZXNhcmlvIHBhcmEgcmVjYXJnYXIgbGEgcMOhZ2luYVxyXG4gICAgICBpZiAoc2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbSgndXNlcicpKSB7XHJcbiAgICAgICAgLy8gY29uc29sZS5sb2coc2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbSgndXNlcicpKVxyXG4gICAgICAgIHRoaXMuZ2V0VXNlcigpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gVmVyaWZpY2Egc2kgdW4gdXN1YXJpbyBlc3TDoSBsb2d1ZWFkb1xyXG4gICAgICogQHJldHVybiBQcm9taXNlPGJvb2xlYW4+XHJcbiAgICAgKiBAYXV0aG9yIE1pZ3VlbCBSYW3DrXJlelxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgYXN5bmMgaXNMb2dnZWQoKTogUHJvbWlzZTxib29sZWFuPiB7XHJcbiAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XHJcbiAgICAgICAgaWYgKHNlc3Npb25TdG9yYWdlLmdldEl0ZW0oJ3VzZXInKSkge1xyXG4gICAgICAgICAgcmVzb2x2ZSh0cnVlKVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICByZXNvbHZlKGZhbHNlKVxyXG4gICAgICAgIH1cclxuICAgICAgfSlcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGhhbmRsZXJFcnJvcihlcnJvcjogSHR0cEVycm9yUmVzcG9uc2UpOiBhbnkge1xyXG4gICAgICByZXR1cm4gdGhyb3dFcnJvcignT2N1cnJpw7MgdW4gZXJyb3InKVxyXG4gICAgfVxyXG5cclxuICAgICAgLyoqXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gb2J0aWVuZSBlbCBwZXJzb25hbCBzZWd1biBmaWx0cm9cclxuICAgICAqIEByZXR1cm4gT2JzZXJ2YWJsZTxJUmVzcG9uc2U+XHJcbiAgICAgKiBAZGF0ZSAxNS0xMS0yMDIxXHJcbiAgICAgKiBAcGFyYW0gdGlwbzogdmFsb3JlcyBbJ2NhdGFsb2dvJywnY2F0YWxvZ29Tbm8nLCdkZWZhdWx0Jywnbm9taW5hJywncmVzcG9uc2FibGVzJ11cclxuICAgICAqIEBwYXJhbXMgZGF0bzpvYmplY3Qge25vbWJyZTpzdHJpbmcsIGFwZWxsaWRvOnN0cmluZywgY2VkdWxhLnN0cmluZ30gdXNlIHBhcmEgbGEgb3BjaW9uICdjYXRhbG9nbycgbyAnY2F0YWxvZ29Tbm8nXHJcbiAgICAgKi9cclxuICAgICAgIHB1YmxpYyBnZXRQZXJzb25hbCh0aXBvOnN0cmluZywgZGF0bz86YW55KXtcclxuICAgICAgICAgIGxldCBjZWR1bGE9Jyc7XHJcbiAgICAgICAgICBsZXQgbm9tYnJlPScnO1xyXG4gICAgICAgICAgbGV0IGFwZWxsaWRvPScnO1xyXG4gICAgICAgICAgbGV0IGlkRW50ZXJwcmlzZT0wO1xyXG4gICAgICAgIGlmKGRhdG8pe1xyXG4gICAgICAgICAgY2VkdWxhPWRhdG8uY2VkdWxhXHJcbiAgICAgICAgICBub21icmU9ZGF0by5ub21icmVcclxuICAgICAgICAgIGFwZWxsaWRvPWRhdG8uYXBlbGxpZG9cclxuICAgICAgICAgIGlkRW50ZXJwcmlzZT1kYXRvLmlkRW50ZXJwcmlzZVxyXG4gICAgICAgIH0gICAgICAgIFxyXG4gICAgICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PElSZXNwb25zZT4oYCR7dGhpcy5VUkx9L2Rhby9zbm8vcGVyc29uYWxfZGFvLnBocD90aXBvPSR7dGlwb30mY2VkdWxhPSR7Y2VkdWxhfSZub21icmU9JHtub21icmV9JmFwZWxsaWRvPSR7YXBlbGxpZG99JmU9JHtpZEVudGVycHJpc2V9YCxcclxuICAgICAgICB7IGhlYWRlcnM6IHRoaXMuZ2V0SHR0cEhlYWRlcnMoKSB9KS5waXBlKFxyXG4gICAgICAgICAgcmV0cnkoMyksXHJcbiAgICAgICAgICBjYXRjaEVycm9yKHRoaXMuaGFuZGxlckVycm9yKSxcclxuICAgICAgICAgIG1hcCgocmVzOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgaWYgKHJlcy5zdWNjZXNzKSB7ICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICByZXMuZGF0YSA9IHJlcy5kYXRhLm1hcChlID0+IG5ldyBNUGVyc29uYWwoZSkpOyAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIHJlcztcclxuICAgICAgICAgIH0pXHJcbiAgICAgICAgKTtcclxuICAgICAgfSBcclxuXHJcbiAgICAgIC8qKlxyXG4gICAgICogQGRlc2NyaXB0aW9uIG9idGVuZXIgcGVyc29uYWwgTm9taW5hIHNlZ3VuIGZpbHRyb1xyXG4gICAgICogQHJldHVybiBPYnNlcnZhYmxlPElSZXNwb25zZT5cclxuICAgICAqIEBkYXRlIDE1LTExLTIwMjFcclxuICAgICAqICogQHBhcmFtIHRpcG86IHZhbG9yZXMgWydjYXRhbG9nbycsJ2RlZmF1bHQnLCdub21pbmEnXVxyXG4gICAgICogQHBhcmFtcyBkYXRvOm9iamVjdCB7bm9tYnJlOnN0cmluZywgYXBlbGxpZG86c3RyaW5nLCBjZWR1bGEuc3RyaW5nfSB1c2UgcGFyYSBsYSBvcGNpb24gJ2NhdGFsb2dvJ1xyXG5cclxuICAgICAqL1xyXG4gICAgICAgIHB1YmxpYyBnZXRQZXJzb25hbE5vbWluYSh0aXBvOnN0cmluZyxkYXRvPzphbnkpe1xyXG4gICAgICAgICAgbGV0IGNlZHVsYT0nJztcclxuICAgICAgICAgIGxldCBub21icmU9Jyc7XHJcbiAgICAgICAgICBsZXQgYXBlbGxpZG89Jyc7XHJcbiAgICAgICAgICBsZXQgaWRFbnRlcnByaXNlPTA7XHJcbiAgICAgICAgICBsZXQgaWROb21pbmE9MDtcclxuICAgICAgICBpZihkYXRvKXtcclxuICAgICAgICAgIGNlZHVsYT1kYXRvLmNlZHVsYVxyXG4gICAgICAgICAgbm9tYnJlPWRhdG8ubm9tYnJlXHJcbiAgICAgICAgICBhcGVsbGlkbz1kYXRvLmFwZWxsaWRvXHJcbiAgICAgICAgICBpZEVudGVycHJpc2U9ZGF0by5pZEVudGVycHJpc2VcclxuICAgICAgICAgIGlkTm9taW5hPWRhdG8uaWROb21pbmFcclxuICAgICAgICB9ICAgICAgICBcclxuICAgICAgICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PElSZXNwb25zZT4oYCR7dGhpcy5VUkx9L2Rhby9zbm8vYXNpZ25hY2lvbl9wZXJzb25hbF9ub21pbmFfZGFvLnBocD9cclxuICAgICAgICAgIHRpcG89JHt0aXBvfSZjZWR1bGE9JHtjZWR1bGF9Jm5vbWJyZT0ke25vbWJyZX0mYXBlbGxpZG89JHthcGVsbGlkb30maWROb21pbmE9JHtpZE5vbWluYX0maWRFbnRlcnByaXNlPSR7aWRFbnRlcnByaXNlfWAsXHJcbiAgICAgICAgICB7IGhlYWRlcnM6IHRoaXMuZ2V0SHR0cEhlYWRlcnMoKSB9KS5waXBlKCAgICAgICAgICAgXHJcbiAgICAgICAgICAgIG1hcCgocmVzOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgICBpZiAocmVzLnN1Y2Nlc3MpIHsgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgcmVzLmRhdGEgPSByZXMuZGF0YS5tYXAoZSA9PiBuZXcgTVBlcnNvbmFsTm9taW5hKGUpKTsgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICByZXR1cm4gcmVzO1xyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgICAgKTtcclxuICAgICAgICB9XHJcblxyXG5cclxuICAvKipcclxuICAgKiBAcGFyYW0gaWRQZXJzb25hbDogaWQgZGVsIHBlcnNvbmFsXHJcbiAgICogQHBhcmFtIHRpcG86IHZhbG9yZXNbJ25vbWluYV9wZXJzb25hbCddIFxyXG4gICAqIEBkZXNjcmlwdGlvbiBPYnRpZW5lIGxhcyBub21pbmFzIGRlbCBwZXJzb25hbCByZXN1bWlkYVxyXG4gICAqIEBkZXByZWNhdGVkOyAyMC0wMS0yMlxyXG4gICAqIEByZXR1cm5zIFxyXG4gICAqL1xyXG4gIFxyXG4gIHB1YmxpYyBnZXRQZXJzb25hbE5vbWluYVJlc3VtaWRhKGlkUGVyc29uYWw6bnVtYmVyLHRpcG86c3RyaW5nKXtcclxuICAgICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8SVJlc3BvbnNlPihgJHt0aGlzLlVSTH0vZGFvL3Nuby9wZXJzb25hbF9kYW8ucGhwP2lkUGVyc29uYWw9JHtpZFBlcnNvbmFsfSZ0aXBvPSR7dGlwb31gLFxyXG4gICAgICB7IGhlYWRlcnM6IHRoaXMuZ2V0SHR0cEhlYWRlcnMoKSB9KS5waXBlKCAgICAgICBcclxuICAgICAgICBtYXAoKHJlczogYW55KSA9PiB7XHJcbiAgICAgICAgICBpZiAocmVzLnN1Y2Nlc3MpIHsgICAgICAgICAgICBcclxuICAgICAgICAgICAgICByZXMuZGF0YSA9IHJlcy5kYXRhLm1hcChlID0+IG5ldyBNTm9taW5hU2ltcGxlKGUpKTsgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgcmV0dXJuIHJlcztcclxuICAgICAgICB9KVxyXG4gICAgICApO1xyXG4gIH1cclxuXHJcbiAgICAgICAvKipcclxuICAgICAgICogQGRlc2NyaXB0aW9uIE9idGllbmUgZWwgSnNvbiBTaXN0ZW1hcyBwYXJhIGVsIHVzdWFyaW8gZGVmaW5pZG8gc2VndW4gc3UgcGVybWlzb2xvZ2lhIGRlbCBTaXN0ZW1hXHJcbiAgICAgICAqIEByZXR1cm4gSnNvbiBkYXRhXHJcbiAgICAgICAqIEBhdXRob3IgSW5nLiBEaW1hbHkgQ3Jlc3BvXHJcbiAgICAgICAqL1xyXG4gICAgICAgcHVibGljIGdldFBlcmZpbFNpc3RlbWEoaWRfdXN1YXJpbzpudW1iZXIgKXtcclxuICAgICAgICByZXR1cm4gdGhpcy5odHRwLmdldChgJHt0aGlzLlVSTH0vZGFvL3Nzcy91c3Vhcmlvc19zaXN0ZW1hc19kYW8ucGhwP2lkX3VzdWFyaW89JHtpZF91c3VhcmlvfWAsXHJcbiAgICAgICAgeyBoZWFkZXJzOiB0aGlzLmdldEh0dHBIZWFkZXJzKCkgfSkucGlwZSggICAgICAgICAgXHJcbiAgICAgICAgICBtYXAoKHJlczogYW55KSA9PiB7IFxyXG4gICAgICAgICAgICBpZihyZXMuZGF0YS5sZW5ndGg+MCl7XHJcbiAgICAgICAgICAgICAgcmVzLmRhdGEgPSByZXMuZGF0YS5tYXAoZSA9PiBuZXcgTVVzdWFyaW9TaXN0ZW1hKGUpKTsgIFxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiByZXM7ICAgICBcclxuICAgICAgICAgICB9KVxyXG4gICAgICAgICAgXHJcbiAgICAgICAgKTtcclxuICAgICAgXHJcbiAgIH1cclxuXHJcbiAgXHJcbiAgICAgICAvKipcclxuICAgICAgICogQGRlc2NyaXB0aW9uIE9idGllbmUgZWwgSnNvbiBNZW51IHBhcmEgZWwgdXN1YXJpbyBkZWZpbmlkbyBzZWd1biBzdSBwZXJtaXNvbG9naWEgZGVsIFNpc3RlbWFcclxuICAgICAgICogQHJldHVybiBKc29uIGRhdGFcclxuICAgICAgICogQGF1dGhvciBJbmcuIFdpbG1lciBCcmljZW5vXHJcbiAgICAgICAqL1xyXG4gICAgICAgICAgcHVibGljIGdldFBlcmZpbE5vQ29tcG9uZW50KGlkX3VzdWFyaW86bnVtYmVyLHNpc3RlbWE6c3RyaW5nLCBuYW1lQ29tcG9uZW50OiBzdHJpbmcgKXtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQoYCR7dGhpcy5VUkx9L2Rhby9zc3MvZGVyZWNob3NfdXN1YXJpb19kYW8ucGhwP2lkX3VzdWFyaW89JHtpZF91c3VhcmlvfSZzaXN0ZW1hPSR7c2lzdGVtYX0mbmFtZWNvbXBvbmVudD0ke25hbWVDb21wb25lbnR9YCxcclxuICAgICAgICAgICAgeyBoZWFkZXJzOiB0aGlzLmdldEh0dHBIZWFkZXJzKCkgfSkucGlwZSggICAgICAgICAgXHJcbiAgICAgICAgICAgICAgbWFwKChyZXM6IGFueSkgPT4geyBcclxuICAgICAgICAgICAgICAgICByZXR1cm4gcmVzO1xyXG4gICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgICAgXHJcbiAgICAgICB9XHJcbiAgXHJcbiAgICAgICAvKipcclxuICAgICAgICogQGRlc2NyaXB0aW9uIE9idGllbmUgZWwgSnNvbiBNZW51IHBhcmEgZWwgdXN1YXJpbyBkZWZpbmlkbyBzZWd1biBzdSBwZXJtaXNvbG9naWEgZGVsIFNpc3RlbWFcclxuICAgICAgICogQHJldHVybiBKc29uIGRhdGFcclxuICAgICAgICogQGF1dGhvciBJbmcuIFdpbG1lciBCcmljZW5vXHJcbiAgICAgICAqL1xyXG4gICAgICAgIHB1YmxpYyBnZXRKc29uTWVudShpZF91c3VhcmlvOm51bWJlcixzaXN0ZW1hOnN0cmluZyl7XHJcbiAgICAgICAgICByZXR1cm4gdGhpcy5odHRwLmdldChgJHt0aGlzLlVSTH0vZGFvL3Nzcy9tZW51X2Rhby5waHA/aWRfdXN1YXJpbz0ke2lkX3VzdWFyaW99JnNpc3RlbWE9JHtzaXN0ZW1hfWAsXHJcbiAgICAgICAgICB7IGhlYWRlcnM6IHRoaXMuZ2V0SHR0cEhlYWRlcnMoKSB9KS5waXBlKCAgICAgICAgICBcclxuICAgICAgICAgICAgbWFwKChyZXM6IGFueSkgPT4geyBcclxuICAgICAgICAgICAgICAgdGhpcy51c2VyTWVudSA9IHJlcy5kYXRhO1xyXG4gICAgICAgICAgICAgICByZXR1cm4gdGhpcy51c2VyTWVudTtcclxuICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgIFxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgIC8qKlxyXG4gICAgICAqIEBkZXNjcmlwdGlvbiBPYnRpZW5lIGVsIEpzb24gTWVudSBwYXJhIGVsIHVzdWFyaW8gZGVmaW5pZG8gc2VndW4gc3UgcGVybWlzb2xvZ2lhIGRlbCBTaXN0ZW1hXHJcbiAgICAgICogQHJldHVybiBKc29uIGRhdGFcclxuICAgICAgKiBAYXV0aG9yIEluZy4gV2lsbWVyIEJyaWNlbm9cclxuICAgICAgKi9cclxuICAgICAgcHVibGljIGxvZyhib2R5OiBNTG9nICl7ICBcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0KGAke3RoaXMuVVJMfS9kYW8vc3NzL2xvZ19kYW8ucGhwYCwgYm9keSAsIHtcclxuICAgICAgICAgICAgICBoZWFkZXJzOiB0aGlzLmdldEh0dHBIZWFkZXJzKClcclxuICAgICAgICB9KS5waXBlKCAgXHJcbiAgICAgICAgICBtYXAoKHJlczogYW55KSA9PiB7ICBcclxuICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgcmV0dXJuIHJlcztcclxuICAgICAgICAgIH0pXHJcbiAgICAgICAgKVxyXG4gICAgXHJcbiAgICB9XHJcblxyXG4gIFxyXG4gICAgICAgIFxyXG4gICAvKipcclxuICAgICogQG5hbWUgRW5jcnlwdERhdGFcclxuICAgICogQGRlc2NyaXB0aW9uIEVuc2NyaXB0YSB1bmEgZXhwcmVzaW9uIGRhdGFcclxuICAgICogQGF1dGhvciBJbmcuIFdpbG1lciBCcmljZcOxb1xyXG4gICAgKi9cclxuICAgIHB1YmxpYyBFbmNyeXB0RGF0YSggZXhwcmVzaW9uIDogc3RyaW5nKXtcclxuICAgICAgIGNvbnN0IGtleSA9IENyeXB0b0pTLmVuYy5VdGY4LnBhcnNlIChcIjAxMjM0NTY3ODlTSUdFU1BcIik7IC8vIG7Dum1lcm8gaGV4YWRlY2ltYWwgZGUgMTYgZMOtZ2l0b3MgY29tbyBjbGF2ZVxyXG4gICAgICAgY29uc3QgaXYgPSBDcnlwdG9KUy5lbmMuVXRmOC5wYXJzZSAoJ1NJR0VTUDAxMjM0NTY3ODknKTsgLy8gTsO6bWVybyBoZXhhZGVjaW1hbCBjb21vIGRlc3BsYXphbWllbnRvIGRlIGNsYXZlXHJcbiAgICAgICBsZXQgc3JjcyA9IENyeXB0b0pTLmVuYy5VdGY4LnBhcnNlKGV4cHJlc2lvbik7XHJcbiAgICAgICBsZXQgZW5jcnlwdGVkID0gQ3J5cHRvSlMuQUVTLmVuY3J5cHQoc3Jjcywga2V5LCB7IGl2OiBpdiwgbW9kZTogQ3J5cHRvSlMubW9kZS5DQkMsIHBhZGRpbmc6IENyeXB0b0pTLnBhZC5Qa2NzNyB9KTtcclxuICAgICAgIHJldHVybiBlbmNyeXB0ZWQuY2lwaGVydGV4dC50b1N0cmluZygpLnRvVXBwZXJDYXNlKCk7XHJcbiAgICB9XHJcbiBcclxuICAgIC8qKlxyXG4gICAgKiBAbmFtZSBEZWNyeXB0RGF0YVxyXG4gICAgKiBAZGVzY3JpcHRpb24gRGVzZW5jcmlwdGEgdW5hIGV4cHJlc2lvbiBkYXRhXHJcbiAgICAqIEBhdXRob3IgSW5nLiBXaWxtZXIgQnJpY2XDsW9cclxuICAgICovXHJcbiAgICBwdWJsaWMgRGVjcnlwdERhdGEoIGV4cHJlc2lvbiA6IHN0cmluZyl7XHJcbiAgICAgICBjb25zdCBrZXkgPSBDcnlwdG9KUy5lbmMuVXRmOC5wYXJzZSAoXCIwMTIzNDU2Nzg5U0lHRVNQXCIpOyAvLyBuw7ptZXJvIGhleGFkZWNpbWFsIGRlIDE2IGTDrWdpdG9zIGNvbW8gY2xhdmVcclxuICAgICAgIGNvbnN0IGl2ID0gQ3J5cHRvSlMuZW5jLlV0ZjgucGFyc2UgKCdTSUdFU1AwMTIzNDU2Nzg5Jyk7IC8vIE7Dum1lcm8gaGV4YWRlY2ltYWwgY29tbyBkZXNwbGF6YW1pZW50byBkZSBjbGF2ZVxyXG4gICAgICAgbGV0IGVuY3J5cHRlZEhleFN0ciA9IENyeXB0b0pTLmVuYy5IZXgucGFyc2UoZXhwcmVzaW9uKTtcclxuICAgICAgIGxldCBzcmNzID0gQ3J5cHRvSlMuZW5jLkJhc2U2NC5zdHJpbmdpZnkoZW5jcnlwdGVkSGV4U3RyKTtcclxuICAgICAgIGxldCBkZWNyeXB0ID0gQ3J5cHRvSlMuQUVTLmRlY3J5cHQoc3Jjcywga2V5LCB7IGl2OiBpdiwgbW9kZTogQ3J5cHRvSlMubW9kZS5DQkMsIHBhZGRpbmc6IENyeXB0b0pTLnBhZC5Qa2NzNyB9KTtcclxuICAgICAgIGxldCBkZWNyeXB0ZWRTdHIgPSBkZWNyeXB0LnRvU3RyaW5nKENyeXB0b0pTLmVuYy5VdGY4KTtcclxuICAgICAgIHJldHVybiBkZWNyeXB0ZWRTdHIudG9TdHJpbmcoKTtcclxuICAgIH1cclxuIFxyXG4gXHJcbiAgICAvKipcclxuICAgICogQG5hbWUgZ2V0UmVzcG9uc2VQZXJmaWxUb29sYmFyXHJcbiAgICAqIEBkZXNjcmlwdGlvbiBNZXRvZG8gcXVlIG9idGllbmUgdW5hIHJlc3B1ZXN0YSB0cnVlIG8gZmFsc2UgYmFzYWRvIGVuIHVuYSBlc3RydWN0dXJhIHNyaW5nIGJpbmFucmlhIHNlZ3VuIFxyXG4gICAgKiAgICAgICAgICAgICAgbGEgcG9zaWNpb24gZGFkYSBkZWwgdG9vbGJhci4gc2UgcGFzYSBzdHJpbmcgYmluYXJpbyBxdWUgY29udGllbmUgMSB5IDAgZW4gcmVwcmVzZW50YWNpb24gXHJcbiAgICAqICAgICAgICAgICAgICBkZSBsYXMgcHJvcGllc3RhZGVzIGFkbWluaXN0cmFkb3IsY29uc3VsdGFyLGVqZWN1dGFyLGltcHJpbWlyIGV0YyAuLi4gY2FkYSBwb3NpY2lvbiBzZWN1ZW5jaWFsIFxyXG4gICAgKiAgICAgICAgICAgICAgc2kgZXN0YSBlbiAxIGVzIHRydWUgeSAwIGVuIGZhbHNlIHkgZGV2dWxldmUgZWwgdmFsb3Igc2VndW4gbG8gcmVxdWllcmEgZWwgdXN1YXJpbzpcclxuICAgICogICAgICAgICAgICAgIHN0cmluZ2JpbmFyaW8gOiAnMTAxMScgeSBwb3NpY2lvbiBlcyAyLCBwb3IgdGFudG8gc2UgdGFyZSAwIHkgZXMgZmFsc2UgcXVlIHJlcHJlc2VudGEgb3BjaW9uIGNvbnN1bHRhci5cclxuICAgICogICAgICAgICAgICAgIEVzdHJ1Y3R1cmEgc3RyaW5nIGJpbmFyaW86XHJcbiAgICAqICAgICAgICAgICAgICBQb3NpY2nDs24gOlxyXG4gICAgKiAgICAgICAgICAgICAgMC4gIEFkbWluaXN0cmFkb3IgICAgICAgIDYuICBEZXNjYXJnYXIgICAgICAxMi4gUmV2ZXJzYXIgYXByb2JhciAgICAgIDE4LiBSZXZlcnNhciBhbnVsYXIgY29udGFiaWxpemFkb1xyXG4gICAgKiAgICAgICAgICAgICAgMS4gIGluc2VydGFyICAgICAgICAgICAgIDcuICBFamVjdXRhciAgICAgICAxMy4gQW51bGFyLlxyXG4gICAgKiAgICAgICAgICAgICAgMi4gIEFjdHVhbGl6YXIgICAgICAgICAgIDguICBFbnZpYXIgICAgICAgICAxNC4gcmV2ZXJzYXIgYW51bGFyXHJcbiAgICAqICAgICAgICAgICAgICAzLiAgY29uc3VsdGFyICAgICAgICAgICAgOS4gSW1wcmltaXIgICAgICAgIDE1LiBjb250YWJpbGl6YXJcclxuICAgICogICAgICAgICAgICAgIDQuICBFbGltaW5hciAgICAgICAgICAgICAxMC4gVmlzaWJsZSAgICAgICAgMTYuIHJldmVyc2FyIGNvbnRhYmlsaXphclxyXG4gICAgKiAgICAgICAgICAgICAgNS4gIEFudWxhciAgICAgICAgICAgICAgIDExLiBBcHJvYmFyICAgICAgICAxNy4gYW51bGFyIGNvbnRhYmlsaXphZG8gICAgICAgXHJcbiAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAqIEBhdXRob3IgSW5nLiBXaWxtZXIgQnJpY2XDsW9cclxuICAgICovXHJcbiAgICAgcHVibGljIGdldFJlc3BvbnNlUGVyZmlsVG9vbGJhciggc3RyaW5nYmluYXJpbyA6IHN0cmluZywgcG9zaXRpb24gOiBudW1iZXIgKXtcclxuICAgICAgICAgIGxldCBiaW5hcmlvID0gc3RyaW5nYmluYXJpby5zdWJzdHJpbmcocG9zaXRpb24scG9zaXRpb24rMSkgO1xyXG4gICAgICAgICAgaWYgKGJpbmFyaW89PVwiMVwiKXtcclxuICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsgXHJcbiAgICAgICAgICB9ICAgXHJcbiAgICAgICAgICByZXR1cm4gZmFsc2U7IFxyXG4gICAgIH1cclxuXHJcbiAvKipcclxuICAgICogQGRlc2NyaXB0aW9uIE9idGllbmUgZWwgSXAgZGVsIGNsaWVudGVcclxuICAgICogQHJldHVybiBKc29uIGRhdGFcclxuICAgICogQGF1dGhvciBJbmcuIFdpbG1lciBCcmljZW5vXHJcbiAgICAqL1xyXG4gIHB1YmxpYyBnZXRJUEFkZHJlc3MoKXsgIFxyXG5cclxuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0KFwiaHR0cDovL2FwaS5pcGlmeS5vcmcvP2Zvcm1hdD1qc29uXCIpIFxyXG4gICAgLnBpcGUoXHJcbiAgICAgIGNhdGNoRXJyb3IoKGVycikgPT4ge1xyXG4gICAgICAgIGNvbnNvbGUubG9nKCdlcnJvciBjYXVnaHQgaW4gc2VydmljZScpXHJcbiAgICAgICAgY29uc29sZS5lcnJvcihlcnIpO1xyXG4gICAgICAgIHNlc3Npb25TdG9yYWdlLnNldEl0ZW0oJ2lwX2FkcmVzcycsICcxMjcuMC4wLjEnKTtcclxuICAgICAgICAvL0hhbmRsZSB0aGUgZXJyb3IgaGVyZVxyXG5cclxuICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihlcnIpOyAgICAvL1JldGhyb3cgaXQgYmFjayB0byBjb21wb25lbnRcclxuICAgICAgfSlcclxuICAgICk7XHJcbiAgICBcclxuICB9XHJcbiAvKipcclxuICAqIEBkZXNjcmlwdGlvbiBPYnRpZW5lIGVsIElwIGRlbCBjbGllbnRlXHJcbiAgKiBAcmV0dXJuIEpzb24gZGF0YVxyXG4gICogQGF1dGhvciBJbmcuIFdpbG1lciBCcmljZW5vXHJcbiAgKi9cclxuICBwdWJsaWMgc2V0SXBBZHJlc3MoKXtcclxuICAgIHRoaXMuZ2V0SVBBZGRyZXNzKCkuc3Vic2NyaWJlKCAocmVzcDogYW55KSAgID0+IHtcclxuICAgICAgICAgc2Vzc2lvblN0b3JhZ2Uuc2V0SXRlbSgnaXBfYWRyZXNzJywgcmVzcC5pcCk7XHJcbiAgICAgICAgIHRoaXMuaXBfYWRyZXNzID0gcmVzcC5pcDtcclxuICAgIH0pOyAgXHJcbiAgfSBcclxuIC8qKlxyXG4gICogQGRlc2NyaXB0aW9uIE9idGllbmUgZWwgSXAgZGVsIGNsaWVudGVcclxuICAqIEByZXR1cm4gSnNvbiBkYXRhXHJcbiAgKiBAYXV0aG9yIEluZy4gV2lsbWVyIEJyaWNlbm9cclxuICAqL1xyXG4gIHB1YmxpYyBnZXRJcEFkcmVzcygpe1xyXG4gICAgdGhpcy5pcF9hZHJlc3MgPSBzZXNzaW9uU3RvcmFnZS5nZXRJdGVtKCdpcF9hZHJlc3MnKTsgIFxyXG4gIH0gXHJcblxyXG4gICAvKipcclxuICAqIEBkZXNjcmlwdGlvbiBPYnRpZW5lIGVsIElwIGRlbCBjbGllbnRlXHJcbiAgKiBAcmV0dXJuIEpzb24gZGF0YVxyXG4gICogQGRpYSAxOS0wNS0yMDIyXHJcbiAgKi8gIFxyXG5cclxuICAgIHB1YmxpYyBjcmVhdGVBdWRpdG9yaWEoc25vOk1Tbm9Mb2dbXSl7XHJcbiAgICAgIGxldCBib2R5PVtdO1xyXG4gICAgICBzbm8uZm9yRWFjaChlPT4ge2JvZHkucHVzaChlLmRhdGFJbnRlZmFjZSgpKX0pO1xyXG4gICAgICByZXR1cm4gdGhpcy5odHRwLnBvc3Q8SVJlc3BvbnNlPihgJHt0aGlzLlVSTH0vZGFvL3Nuby9zZWd1cmlkYWRfZGFvLnBocD9gLGJvZHksXHJcbiAgICAgIHsgaGVhZGVyczogdGhpcy5nZXRIdHRwSGVhZGVycygpfSlcclxuICAgICAgLnBpcGUoXHJcbiAgICAgICAgbWFwKChyZXM6IGFueSkgPT4ge3JldHVybiByZXM7fSlcclxuICAgICAgKTtcclxuICAgIH0gIFxyXG5cclxuIC8qKiAgXHJcbiAgKiBAZGVzY3JpcHRpb24gT2J0aWVuZSBsb3MgdGlwb3MgZGUgZGVwb3NpdG9zICAqIFxyXG4gICogQHBhcmFtIHByb2NlZGUgOiBwcm9jZWRlIGRlbCBtb2R1bG9cclxuICAqIEBwYXJhbSBpZE1hdGVyaWFsIDogaWQgZGVsIGFydGljdWxvXHJcbiAgKiBAcGFyYW0gaWRVc3VhcmlvIDogaWQgdXN1YXJpbyBwZXJtaXRpZG9cclxuICAqIEByZXR1cm5zIFxyXG4gICogQGF1dGhvciBEaW1hbHkgQ3Jlc3BvXHJcbiAgKiBAZGF0ZSAyMy0wMS0yMDI1XHJcbiAgKi8gICAgICBcclxuICBwdWJsaWMgZ2V0RGVwb3NpdFR5cGUocHJvY2VkZTpzdHJpbmcsaWRNYXRlcmlhbDpudW1iZXIsaWRFbnRlcnByaXNlOm51bWJlcil7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldDxJUmVzcG9uc2U+KGAke3RoaXMuVVJMfS9kYW8vc2l2L2NhdGFsb2dvX3BhcmFtZXRyaXphZG9fZGFvLnBocD9nZXQ9JHtwcm9jZWRlfSZpZD0ke2lkTWF0ZXJpYWx9Jmk9JHtpZEVudGVycHJpc2V9YCxcclxuICAgIHsgaGVhZGVyczogdGhpcy5nZXRIdHRwSGVhZGVycygpIH0pLnBpcGUoICAgICBcclxuICAgICAgbWFwKChyZXM6IGFueSkgPT4ge1xyXG4gICAgICAgIGlmIChyZXMuc3VjY2VzcykgeyAgICAgICAgICAgIFxyXG4gICAgICAgICAgICByZXMuZGF0YSA9IHJlcy5kYXRhLm1hcChlID0+IG5ldyBNVGlwb0RlcG9zaXRvcyhlKSk7ICAgICAgICAgICAgICBcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHJlcztcclxuICAgICAgfSlcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICAvKiogIFxyXG4gICogQGRlc2NyaXB0aW9uIE9idGllbmUgQ2FyZ29zIEFkaWNpb25hbGVzICAqIFxyXG4gICogQHBhcmFtIHRpcG8gOiBvbmUsZGVmYXVsdFxyXG4gICogQHBhcmFtIGlkIDogaWQgZGVsIGNhcmdvIFxyXG4gICogQHJldHVybnMgXHJcbiAgKiBAYXV0aG9yIERpbWFseSBDcmVzcG9cclxuICAqIEBkYXRlIDEzLTExLTIwMjJcclxuICAqLyAgICAgIFxyXG4gIHB1YmxpYyBnZXRDYXJnb3NBZGljaW9uYWxlcyh0aXBvOnN0cmluZyxpZD86bnVtYmVyKXtcclxuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PElSZXNwb25zZT4oYCR7dGhpcy5VUkx9L2Rhby9zdGIvY2FyZ29zX2FkaWNpb25hbGVzX2Rhby5waHA/dGlwbz0ke3RpcG99JmlkPSR7aWR9YCxcclxuICAgIHsgaGVhZGVyczogdGhpcy5nZXRIdHRwSGVhZGVycygpIH0pLnBpcGUoICAgIFxyXG4gICAgICBtYXAoKHJlczogYW55KSA9PiB7XHJcbiAgICAgICAgaWYgKHJlcy5zdWNjZXNzKSB7ICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIHJlcy5kYXRhID0gcmVzLmRhdGEubWFwKGUgPT4gbmV3IE1DYXJnb3NBZGljaW9uYWxlcyhlKSk7ICAgICAgICAgICAgICBcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHJlcztcclxuICAgICAgfSlcclxuICAgICk7XHJcbiAgfVxyXG5cclxuXHJcbiAgLyoqICBcclxuICAqIEBkZXNjcmlwdGlvbiBPYnRpZW5lIGxvcyByZWxlYXNlIFxyXG4gICogQHBhcmFtIHRpcG8gOiByZWxlYXNlIChvYnRpZW5lIGVsIHVsdGltbyByZWxlYXNlIGRlbCBzaXN0ZW1hKSx2ZXJpZmljYXIodmVyaWZpY2Egc2kgc2UgZWplY3V0byBlbCB1bHRpbW8gcmVsZWFzZSlcclxuICAqIEBwYXJhbSBzaXN0ZW1hIDogc2lzdGVtYSBcclxuICAqIEBwYXJhbSBzZWNjaW9uIDogdGlwbyAnUkVMRUFTRScgXHJcbiAgKiBAcmV0dXJucyBzdHJpbmdcclxuICAqIEBhdXRob3IgRGltYWx5IENyZXNwb1xyXG4gICogQGRhdGUgMjEtMDYtMjAyNFxyXG4gICovICAgICAgXHJcbiAgcHVibGljIGdldFZlcmlmaWNhclJlbGVhc2UodGlwbzpzdHJpbmcsc2lzdGVtYTpzdHJpbmcsc2VjY2lvbjpzdHJpbmc9bnVsbCl7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldDxJUmVzcG9uc2U+KGAke3RoaXMuVVJMfS9kYW8vaW5zL2luc3RhbGFfZGFvLnBocD90aXBvPSR7dGlwb30mc2lzdGVtYT0ke3Npc3RlbWF9JnNlY2Npb249JHtzZWNjaW9ufWAsXHJcbiAgICB7IGhlYWRlcnM6IHRoaXMuZ2V0SHR0cEhlYWRlcnMoKSB9KS5waXBlKCAgICBcclxuICAgICAgbWFwKChyZXM6IGFueSkgPT4ge3JldHVybiByZXM7fSlcclxuICAgICk7XHJcbiAgfSAgICAgICBcclxuXHJcblxyXG4gIHB1YmxpYyBnZXRSZXBvcnRlUGVyc29uYWxpemFkbyh0aXBvOnN0cmluZz0nZGVmYXVsdCcsaWRFbnRlcnByaXNlOm51bWJlcixzaXN0ZW1hOnN0cmluZyxjYXNvOnN0cmluZyl7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldDxJUmVzcG9uc2U+KGAke3RoaXMuVVJMfS9kYW8vY2ZnL2NvbmZpZ3VyYWNpb25FcnBfZGFvLnBocD90aXBvPSR7dGlwb30mZT0ke2lkRW50ZXJwcmlzZX0mc2lzPSR7c2lzdGVtYX0mY2FzPSR7Y2Fzb31gLFxyXG4gICAgeyBoZWFkZXJzOiB0aGlzLmdldEh0dHBIZWFkZXJzKCkgfSkucGlwZSggbWFwKChyZXM6IGFueSkgPT4ge3JldHVybiByZXMuZGF0YTt9KSApO1xyXG4gIH0gICAgICAgXHJcbn1cclxuXHJcblxyXG4gIFxyXG5pbnRlcmZhY2UgZmlsdHJvQ3VlbnRhc1ByZXN1cHVlc3RvIHtcclxuICB0aXBvPzogJ0UnIHwgJ1InLFxyXG4gIGVzdGFkbz86ICdDJyB8ICdTJ1xyXG59XHJcblxyXG5cclxuIl19
1848
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2lnZXNwLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9zaWdlc3Avc3JjL2xpYi9zaWdlc3Auc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFDNUQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBQ2pFLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSx5Q0FBeUMsQ0FBQztBQUMxRSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0scUNBQXFDLENBQUM7QUFDbEUsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDeEQsT0FBTyxFQUFpQyxXQUFXLEVBQUMsTUFBTSxzQkFBc0IsQ0FBQztBQUVqRixPQUFPLEVBQWMsVUFBVSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQzlDLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUNqRSxPQUFPLEVBQUUsR0FBRyxFQUFFLFVBQVUsRUFBRSxLQUFLLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUV4RCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFFckUsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0saURBQWlELENBQUM7QUFDcEYsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sMkNBQTJDLENBQUM7QUFDL0UsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sNkNBQTZDLENBQUM7QUFDbkYsT0FBTyxFQUFFLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUV4RSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSwwQ0FBMEMsQ0FBQztBQUU3RSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFB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LENBQUMsR0FBRyxJQUFFLEdBQUcsSUFBSyxLQUFLLENBQUMsR0FBRyxJQUFFLEdBQUcsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsSUFBRSxHQUFHLElBQUksS0FBSyxDQUFDLEdBQUcsSUFBRSxHQUFHLENBQUMsSUFBSSxLQUFLLENBQUMsR0FBRyxJQUFFLEdBQUcsSUFBSSxLQUFLLENBQUMsR0FBRyxJQUFFLEdBQUc7ZUFDNUcsQ0FBQyxLQUFLLENBQUMsR0FBRyxJQUFFLEdBQUcsSUFBSSxLQUFLLENBQUMsR0FBRyxJQUFFLEdBQUcsQ0FBQyxJQUFJLEtBQUssQ0FBQyxHQUFHLElBQUUsR0FBRyxJQUFJLEtBQUssQ0FBQyxHQUFHLElBQUUsR0FBRyxJQUFJLEtBQUssQ0FBQyxHQUFHLElBQUUsR0FBRyxJQUFJLEtBQUssQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUM7ZUFDN0csS0FBSyxDQUFDLEdBQUcsSUFBRSxHQUFHLElBQU0sS0FBSyxDQUFDLEdBQUcsSUFBRSxHQUFHLElBQUksS0FBSyxDQUFDLEdBQUcsSUFBRSxHQUFHLElBQUssS0FBSyxDQUFDLEdBQUcsSUFBRSxHQUFHLElBQUcsS0FBSyxDQUFDLEdBQUcsSUFBRSxHQUFHLElBQUksS0FBSyxDQUFDLEdBQUcsSUFBRSxHQUFHO2VBQzFHLEtBQUssQ0FBQyxHQUFHLElBQUUsR0FBRyxJQUFNLEtBQUssQ0FBQyxHQUFHLElBQUUsR0FBRyxJQUFJLEtBQUssQ0FBQyxHQUFHLElBQUUsR0FBRyxJQUFJLEtBQUssQ0FBQyxHQUFHLElBQUUsR0FBRyxJQUFJLEtBQUssQ0FBQyxHQUFHLElBQUUsR0FBRyxJQUFJLEtBQUssQ0FBQyxHQUFHLElBQUUsR0FBRztlQUMxRyxLQUFLLENBQUMsR0FBRyxJQUFFLEdBQUcsSUFBSSxLQUFLLENBQUMsR0FBRyxJQUFFLEdBQUcsSUFBRyxLQUFLLENBQUMsT0FBTyxJQUFFLElBQUksSUFBSyxLQUFLLENBQUMsT0FBTyxJQUFFLEdBQUcsSUFBRyxLQUFLLENBQUMsT0FBTyxJQUFFLEdBQUc7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QUFDLEdBQUcsaUNBQWlDLElBQUksWUFBWSxPQUFPLFlBQVksT0FBTyxFQUFFLEVBQ3hILEVBQUUsT0FBTyxFQUFFLElBQUksQ0FBQyxjQUFjLEVBQUUsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUN0QyxHQUFHLENBQUMsQ0FBQyxHQUFRLEVBQUUsRUFBRSxHQUFFLE9BQU8sR0FBRyxDQUFDLENBQUEsQ0FBQyxDQUFDLENBQ2pDLENBQUM7SUFDSixDQUFDO0lBR00sdUJBQXVCLENBQUMsT0FBWSxTQUFTLEVBQUMsWUFBbUIsRUFBQyxPQUFjLEVBQUMsSUFBVztRQUNqRyxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFZLEdBQUcsSUFBSSxDQUFDLEdBQUcsMENBQTBDLElBQUksTUFBTSxZQUFZLFFBQVEsT0FBTyxRQUFRLElBQUksRUFBRSxFQUN4SSxFQUFFLE9BQU8sRUFBRSxJQUFJLENBQUMsY0FBYyxFQUFFLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBRSxHQUFHLENBQUMsQ0FBQyxHQUFRLEVBQUUsRUFBRSxHQUFFLE9BQU8sR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFBLENBQUMsQ0FBQyxDQUFFLENBQUM7SUFDcEYsQ0FBQzs7MEdBOTBFWSxhQUFhOzhHQUFiLGFBQWEsY0FGWixNQUFNOzJGQUVQLGFBQWE7a0JBSHpCLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTVByZWZpam8gfSBmcm9tICcuL2NvcmUvbW9kZWxzL0NGRy9NUHJlZmlqby5tb2RlbCc7XHJcbmltcG9ydCB7IE1FbnRlcnByaXNlIH0gZnJvbSAnLi9jb3JlL21vZGVscy9DRkcvRW50ZXJwcmlzZS5tb2RlbCc7XHJcbmltcG9ydCB7IE1QZXJzb25hbE5vbWluYSB9IGZyb20gJy4vY29yZS9tb2RlbHMvU05PL01QZXJzb25hbE5vbWluYS5tb2RlbCc7XHJcbmltcG9ydCB7IE1Ib2phVGllbXBvIH0gZnJvbSAnLi9jb3JlL21vZGVscy9TTk8vTUhvamFUaWVtcG8ubW9kZWwnO1xyXG5pbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IE1Vc3VhcmlvIH0gZnJvbSAnLi9jb3JlL21vZGVscy9TU1MvdXNlci5tb2RlbCc7XHJcbmltcG9ydCB7IEh0dHBDbGllbnQsIEh0dHBFcnJvclJlc3BvbnNlLCBIdHRwSGVhZGVyc30gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xyXG5pbXBvcnQgeyBJUmVxdWVzdCB9IGZyb20gJy4vY29yZS9pbnRlcmZhY2VzL1JlcXVlc3QnO1xyXG5pbXBvcnQgeyBPYnNlcnZhYmxlLCB0aHJvd0Vycm9yIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IE1Qcm92ZWVkb3IgfSBmcm9tICcuL2NvcmUvbW9kZWxzL1JQQy9wcm92ZWVkb3Jlcy5tb2RlbCc7XHJcbmltcG9ydCB7IG1hcCwgY2F0Y2hFcnJvciwgcmV0cnkgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XHJcbmltcG9ydCB7IE1hdERpYWxvZyB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2RpYWxvZyc7XHJcbmltcG9ydCB7IE1Vc3VhcmlvUHJlZmlqbyB9IGZyb20gJy4vY29yZS9tb2RlbHMvQ0ZHL3VzZXJQcmVmaXgubW9kZWwnO1xyXG5pbXBvcnQgeyBJQ2F0YWxvZ28sIGZpbHRlckRhdGEgfSBmcm9tICcuL2NvcmUvaW50ZXJmYWNlcy9DYXRhbG9nbyc7XHJcbmltcG9ydCB7IENhdGFsb2dvQ29tcG9uZW50IH0gZnJvbSAnLi9zaGFyZWQvY29tcG9uZW50cy9jYXRhbG9nby9jYXRhbG9nby5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBNQ3VlbnRhUHJlc3VwdWVzdG8gfSBmcm9tICcuL2NvcmUvbW9kZWxzL1NQRy9jdWVudGFQcmVzdXB1ZXN0by5tb2RlbCc7XHJcbmltcG9ydCB7IE1DdWVudGFJbnN0aXR1Y2lvbmFsIH0gZnJvbSAnLi9jb3JlL21vZGVscy9TQ0cvY3VlbnRhSW5zdGl0dWNpb25hbC5tb2RlbCc7XHJcbmltcG9ydCB7IE1Nb25lZGEsIE1Nb25lZGFDb25maWcgfSBmcm9tICcuL2NvcmUvbW9kZWxzL0NGRy9tb25lZGEubW9kZWwnO1xyXG5pbXBvcnQgeyBUb2FzdHJTZXJ2aWNlIH0gZnJvbSAnbmd4LXRvYXN0cic7XHJcbmltcG9ydCB7IE1VbmlkYWRUcmlidXRhcmlhIH0gZnJvbSAnLi9jb3JlL21vZGVscy9TVEIvdW5pZGFkVHJpYnV0YXJpYS5tb2RlbCc7XHJcbmltcG9ydCB7IEFic3RyYWN0Q29udHJvbCwgVW50eXBlZEZvcm1Hcm91cCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHsgQ29uZmlybUNvbXBvbmVudCB9IGZyb20gJy4vc2hhcmVkL2NvbXBvbmVudHMvY29uZmlybS9jb25maXJtLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IE1Db25maWd1cmFjaW9uU0NHIH0gZnJvbSAnLi9jb3JlL21vZGVscy9TQ0cvY29uZmlndXJhY2lvblNDRy5tb2RlbCc7XHJcbmltcG9ydCB7IElDb25leGlvbiB9IGZyb20gJy4vY29yZS9pbnRlcmZhY2VzL1VzdWFyaW8nO1xyXG5pbXBvcnQgeyBUYWJsZVNlbGVjdENvbXBvbmVudCB9IGZyb20gJy4vc2hhcmVkL2NvbXBvbmVudHMvdGFibGUtc2VsZWN0L3RhYmxlLXNlbGVjdC5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBNQ29uZmlndXJhdGlvblNQRyB9IGZyb20gJy4vY29yZS9tb2RlbHMvU1BHL2NvbmZpZ3VyYXRpb25TUEcubW9kZWwnO1xyXG5pbXBvcnQgeyBNQ2VudHJvQ29zdG8gfSBmcm9tICcuL2NvcmUvbW9kZWxzL1NDRy9jZW50cm9Db3N0by5tb2RlbCc7XHJcbmltcG9ydCB7IE1GdWVudGVGaW5hbmNpYW1pZW50byB9IGZyb20gJy4vY29yZS9tb2RlbHMvU1BHL2Z1ZW50ZUZpbmFuY2lhbWllbnRvLm1vZGVsJztcclxuaW1wb3J0IHsgTUN1ZW50YUVncmVzb3MgfSBmcm9tICcuL2NvcmUvbW9kZWxzL1NQRy9leHBlbnNpdmVBY2NvdW50Lm1vZGVsJztcclxuaW1wb3J0IHsgQ2F0YWxvZ29Fc3RydWN0dXJhc0NvbXBvbmVudCB9IGZyb20gJy4vc2hhcmVkL2NvbXBvbmVudHMvY2F0YWxvZ28tZXN0cnVjdHVyYXMvY2F0YWxvZ28tZXN0cnVjdHVyYXMuY29tcG9uZW50JztcclxuaW1wb3J0IHsgSVVwZGF0ZURpc3RyaWJ1dGlvbiwgSVVwZGF0ZURpc3RyaWJ1dGlvbjIsIElVcGRhdGVEaXN0cmlidXRpb25JbmdyZXNvcywgSVVwZGF0ZURpc3RyaWJ1dGlvbkluZ3Jlc29zMiB9IGZyb20gJy4vY29yZS9pbnRlcmZhY2VzL0N1ZW50YUVncmVzb3MnO1xyXG5pbXBvcnQgeyBDYXRhbG9nb0RvYmxlSW5wdXRDb21wb25lbnQgfSBmcm9tICcuL3NoYXJlZC9jb21wb25lbnRzL2NhdGFsb2dvLWRvYmxlLWlucHV0L2NhdGFsb2dvLWRvYmxlLWlucHV0LmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IE1TaXN0ZW1hLCBNVXN1YXJpb1Npc3RlbWEgfSBmcm9tICcuL2NvcmUvbW9kZWxzL1NTUy9zaXN0ZW1hJztcclxuaW1wb3J0IHsgSUNvbXByb2JhbnRlUHJlc3VwdWVzdGFyaW9FZ3Jlc29zLCBJQ29tcHJvYmFudGVQcmVzdXB1ZXN0YXJpb0luZ3Jlc29zIH0gZnJvbSAnLi9jb3JlL2ludGVyZmFjZXMvQ29tcHJvYmFudGVQcmVzdXB1ZXN0YXJpbyc7XHJcbmltcG9ydCB7IE1Db21wcm9iYW50ZVByZXN1cHVlc3RhcmlvRWdyZXNvcywgTUNvbXByb2JhbnRlUHJlc3VwdWVzdGFyaW9JbmdyZXNvcyB9IGZyb20gJy4vY29yZS9tb2RlbHMvU1BHL2NvbXByb2JhbnRlUHJlc3VwdWVzdGFyaW8ubW9kZWwnO1xyXG5pbXBvcnQgeyBNQ3VlbnRhSW5ncmVzb3MgfSBmcm9tICcuL2NvcmUvbW9kZWxzL1NDRy9JbmNvbWVBY2NvdW50JztcclxuaW1wb3J0IHsgTUluY29tZVN0cnVjdHVyZUFjY291bnQgfSBmcm9tICcuL2NvcmUvbW9kZWxzL1NQRy9pbmNvbWVTdHJ1Y3R1cmVBY2NvdW50Lm1vZGVsJztcclxuaW1wb3J0IHsgTU9yZ2FuaXphdGlvblR5cGUgfSBmcm9tICcuL2NvcmUvbW9kZWxzL1NQRy9vcmdhbml6YXRpb25UeXBlLm1vZGVsJztcclxuaW1wb3J0IHsgTVNwZWNpYWx0eSB9IGZyb20gJy4vY29yZS9tb2RlbHMvUlBDL3NwZWNpYWx0eS5tb2RlbCc7XHJcbmltcG9ydCB7IE1Eb2N1bWVudCB9IGZyb20gJy4vY29yZS9tb2RlbHMvUlBDL2RvY3VtZW50Lm1vZGVsJztcclxuaW1wb3J0IHsgTUNsYXNpZmljYXRpb24gfSBmcm9tICcuL2NvcmUvbW9kZWxzL1JQQy9jbGFzaWZpY2F0aW9uLm1vZGVsJztcclxuaW1wb3J0IHsgTUNvdW50cnksIE1TdGF0ZSwgTU11bmljaXBhbGl0eSwgTVBhcmlzaCwgTUNpdHksIE1Db21tdW5pdHkgfSBmcm9tICcuL2NvcmUvbW9kZWxzL0NGRy9sb2NhdGlvbnMubW9kZWwnO1xyXG5pbXBvcnQgeyBNUHJvdmlkZXJCZW5lZmljaWFyeSB9IGZyb20gJy4vY29yZS9tb2RlbHMvUlBDL3Byb3ZpZGVyQmVuZWZpY2lhcnkubW9kZWwnO1xyXG5pbXBvcnQgeyBNU2lnZWNvZkJhbmssIE1CYW5rLCBNQmFua0FjY291bnRUeXBlLCBNQWdlbmNpYUJhbmNvLCBNQ3VlbnRhQmFuY28gfSBmcm9tICcuL2NvcmUvbW9kZWxzL1NDQi9iYW5rLm1vZGVsJztcclxuaW1wb3J0IHsgSVJlc3BvbnNlIH0gZnJvbSAnLi9jb3JlL2ludGVyZmFjZXMvUmVzcG9uc2UnO1xyXG5pbXBvcnQgeyBNQ29uZmlndXJhdGlvblJQQyB9IGZyb20gJy4vY29yZS9tb2RlbHMvUlBDL2NvbmZpZ3VyYWNpb25SUEMubW9kZWwnO1xyXG5pbXBvcnQgeyBNQ29uZmlnU09DIH0gZnJvbSAnLi9jb3JlL21vZGVscy9TT0MvY29uZmlndXJhY2lvblNPQy5tb2RlbCc7XHJcbmltcG9ydCB7IE1EZWR1Y3Rpb25UeXBlIH0gZnJvbSAnLi9jb3JlL21vZGVscy9TVEIvZGVkdWN0aW9uVHlwZS5tb2RlbCc7XHJcbmltcG9ydCB7IE1DYXJnbyB9IGZyb20gJy4vY29yZS9tb2RlbHMvU09DL2NoYXJnZS5tb2RlbCc7XHJcbmltcG9ydCB7IE1Db25jZXB0b1JldGVuY2lvbiwgTURlZHVjdGlvbiB9IGZyb20gJy4vY29yZS9tb2RlbHMvU1RCL2RlZHVjdGlvbi5tb2RlbCc7XHJcbmltcG9ydCB7IE1Db25maWdTU1MgfSBmcm9tICcuL2NvcmUvbW9kZWxzL1NTUy9zZWN1cml0eUNvbmZpZ3VyYXRpb24ubW9kZWwnO1xyXG5pbXBvcnQgeyBNQWRtaW5pc3RyYXRpdmVVbml0LCBNRXN0cnVjdHVyYXMgfSBmcm9tICcuL2NvcmUvbW9kZWxzL1NQRy9hZG1pbmlzdHJhdGl2ZVVuaXQubW9kZWwnO1xyXG5pbXBvcnQgeyBNQ29tcG9uZW50IH0gZnJvbSAnLi9jb3JlL21vZGVscy9TU1MvY29tcG9uZW50Lm1vZGVsJztcclxuaW1wb3J0IHsgTUxvZyB9IGZyb20gJy4vY29yZS9tb2RlbHMvU1NTL2xvZy5tb2RlbCc7XHJcbmltcG9ydCB7IE1TZXJ2aWNlQ2hhcmdlIH0gZnJvbSAnLi9jb3JlL21vZGVscy9TT0Mvc2VydmljZUNoYXJnZS5tb2RlbCc7XHJcbmltcG9ydCB7IE1FbXByZXNhIH0gZnJvbSAnLi9jb3JlL21vZGVscy9DRkcvRW1wcmVzYS5tb2RlbCc7XHJcbmltcG9ydCB7IE1Db25jZXB0b3NDWFAgfSBmcm9tICcuL2NvcmUvbW9kZWxzL0NYUC9NQ29uY2VwdG9zQ1hQLm1vZGVsJztcclxuaW1wb3J0IHsgTVRpcG9Eb2N1bWVudG9DWFAgfSBmcm9tICcuL2NvcmUvbW9kZWxzL0NYUC9NVGlwb0RvY3VtZW50b0NYUC5tb2RlbCc7XHJcbmltcG9ydCB7IE1Db25maWd1cmFjaW9uU05PIH0gZnJvbSAnLi9jb3JlL21vZGVscy9TTk8vTUNvbmZpZ3VyYWNpb25TTk8ubW9kZWwnO1xyXG5pbXBvcnQgeyBNRGVmaW5pY2lvbk5vbWluYSB9IGZyb20gJy4vY29yZS9tb2RlbHMvU05PL01EZWZpbmljaW9uTm9taW5hLm1vZGVsJztcclxuaW1wb3J0IHsgTUFzaWduYWNpb25DYXJnbyB9IGZyb20gJy4vY29yZS9tb2RlbHMvU05PL01Bc2lnbmFjaW9uQ2FyZ28ubW9kZWwnO1xyXG5pbXBvcnQgeyBNTm9taW5hU2ltcGxlIH0gZnJvbSAnLi9jb3JlL21vZGVscy9TTk8vTU5vbWluYVNpbXBsZS5tb2RlbCc7XHJcbmltcG9ydCB7IE1QZXJzb25hbCB9IGZyb20gJy4vY29yZS9tb2RlbHMvU05PL01QZXJzb25hbC5tb2RlbCc7XHJcbmltcG9ydCB7IE1FbnRyYWRhU3VtaW5pc3Ryb3MgfSBmcm9tICcuL2NvcmUvbW9kZWxzL1NJVi9NRW50cmFkYVN1bWluaXN0cm8ubW9kZWwnO1xyXG5pbXBvcnQgU3dhbCBmcm9tICdzd2VldGFsZXJ0MidcclxuaW1wb3J0ICogYXMgQ3J5cHRvSlMgZnJvbSAnY3J5cHRvLWpzJzsgXHJcbmltcG9ydCB7IE1Tbm9Mb2cgfSBmcm9tICcuL2NvcmUvbW9kZWxzL1NOTy9NQXVkaXRvcmlhLm1vZGVsJztcclxuaW1wb3J0IHsgTVRpcG9EZXBvc2l0b3MgfSBmcm9tICcuL2NvcmUvbW9kZWxzL1NJVi9NVGlwb0RlcG9zaXRvcy5tb2RlbCc7XHJcbmltcG9ydCB7IE1Db211bmlkYWQgfSBmcm9tICcuL2NvcmUvbW9kZWxzL0NGRy9jb211bmlkYWQubW9kZWwnO1xyXG5pbXBvcnQgeyBNRXhjaGFuZ2VSYXRlIH0gZnJvbSAnLi9jb3JlL21vZGVscy9DRkcvVGFzYUNhbWJpby5tb2RlbCc7XHJcbmltcG9ydCB7IE1DYXJnb3NBZGljaW9uYWxlc30gZnJvbSAnLi9jb3JlL21vZGVscy9TVEIvTUNhcmdvc0FkaWNpb25hbGVzJztcclxuaW1wb3J0IHsgTUNsaWVudCB9IGZyb20gJy4vY29yZS9tb2RlbHMvU0ZWL01DbGllbnRlTW9kZWwnO1xyXG5pbXBvcnQgeyBNUGxhbnRpbGxhSW50ZWdyYWNpb24gfSBmcm9tICcuL2NvcmUvbW9kZWxzL1NDRy9NUGxhbnRpbGxhSW50ZWdyYWNpb24ubW9kZWwnO1xyXG5cclxuICBcclxuICBASW5qZWN0YWJsZSh7XHJcbiAgICBwcm92aWRlZEluOiAncm9vdCdcclxuICB9KVxyXG4gIGV4cG9ydCBjbGFzcyBTaWdlc3BTZXJ2aWNlIHtcclxuXHJcbiAgICBwdWJsaWMgdXN1YXJpb0FjdGl2bzogTVVzdWFyaW8gPSBudWxsO1xyXG4gICAgcHVibGljIFVSTDogc3RyaW5nO1xyXG4gICAgcHVibGljIGN1cnJlbnRDb21wb25lbnQ6IE1Db21wb25lbnQgPSBudWxsO1xyXG4gICAgcHVibGljIHVzZXJNZW51ICA9IG51bGw7IFxyXG4gICAgcHVibGljIGlwX2FkcmVzcyA9ICcxMjcuMC4wLjEnO1xyXG4gICAgLy8gcHVibGljIFVSTDogc3RyaW5nID0gXCJodHRwOi8vMTkyLjE2OC4xLjY3L3NpZ2VzcF9waHBcIjtcclxuICAgIC8vIHVzdWFyaW9BY3Rpdm86IE1Vc3VhcmlvID0ge1xyXG4gICAgLy8gICBjb25leGlvbkRCOiB7XHJcbiAgICAvLyAgICAgYmFzZURlRGF0b3M6IFwiZGJfc2lnZXNwX2RlbW92M1wiLFxyXG4gICAgLy8gICAgIGdlc3RvcjogXCJwb3N0Z3Jlc1wiLFxyXG4gICAgLy8gICAgIGxvZ2luOiBcInBvc3RncmVzXCIsXHJcbiAgICAvLyAgICAgbm9tYnJlOiBcIlNJR0VTUCBDLkEsIHNlcnZpZG9yIDg1IChTRSBQVUVERSBVU0FSKVwiLFxyXG4gICAgLy8gICAgIHBhc3N3b3JkOiBcImFkbWluc2lnZXNwXCIsXHJcbiAgICAvLyAgICAgcHVlcnRvOiBcIjU0MzJcIixcclxuICAgIC8vICAgICBzZXJ2aWRvcjogXCIxOTIuMTY4LjEuNjdcIixcclxuICAgIC8vICAgfSxcclxuICAgIC8vICAgZW1wcmVzYToge1xyXG4gICAgLy8gICAgIGlkOiAxLFxyXG4gICAgLy8gICAgIHBlcmlvZG9GaXNjYWw6IFwiMjAxOS0wMS0wMVwiLFxyXG4gICAgLy8gICAgIHRpdHVsbzogXCJTSUdFU1AgQy5BLlwiXHJcbiAgICAvLyAgIH0sXHJcbiAgICAvLyAgIG5vbWJyZTogXCJTSUdFU1BcIixcclxuICAgIC8vICAgdG9rZW46IFwiZXlKMGVYQWlPaUpLVjFRaUxDSmhiR2NpT2lKSVV6TTROQ0o5LmV5SndZWE56ZDI5eVpGOTFjM1VpT2lJeE1qTTBOVFkzT0NJc0ltbGtYMlZ0Y0hKbGMyRWlPaUl4SWl3aWRHbDBaVzF3SWpvaVUwbEhSVk5RSUVNdVFTNGlMQ0p3WlhKbWFYTmpZV3dpT2lJeU1ERTVMVEF4TFRBeElpd2liRjkxYzNWaGNtbHZJam9pVTBsSFJWTlFJaXdpYzJWeWRtbGtiM0lpT2lJeE9USXVNVFk0TGpFdU5qY2lMQ0p3ZFdWeWRHOGlPaUkxTkRNeUlpd2lZbUZ6WldSbFpHRjBiM01pT2lKa1lsOXphV2RsYzNCZlpHVnRiM1l6SWl3aWJHOW5hVzRpT2lKd2IzTjBaM0psY3lJc0luQmhjM04zYjNKa0lqb2lZV1J0YVc1emFXZGxjM0FpZlEuUElTQlNmdWVSQWRzV3NKMUFhR2NWQ2dXLTJhSmtndHZMZHNXMEJnbzVsdHlZb3dEOG95X25xSzVzakUyVVJHa1wiXHJcbiAgICAvLyB9XHJcbiAgICAvLyBwcm9jZWRlOiBzdHJpbmcgPSAnU0NHQ01QJztcclxuICAgIC8vIGNvZHNpczogc3RyaW5nID0gJ1NDRyc7XHJcblxyXG5cclxuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgaHR0cDogSHR0cENsaWVudCwgcHJpdmF0ZSBkaWFsb2c6IE1hdERpYWxvZywgcHJpdmF0ZSB0b2FzdDogVG9hc3RyU2VydmljZSkgeyB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gVmFsaWRhIHF1ZSBzZWxvIHNlIGVzY3JpYmFuIGd1aW9uZXMgeSA5XHJcbiAgICAgKiBAcGFyYW0gZXZlbnRcclxuICAgICAqL1xyXG4gICAgcHVibGljIG9ubHlHdWlvbmVzQW5kTmluZShldmVudDogYW55KSB7XHJcbiAgICAgIGlmIChldmVudC5rZXkgPT09ICctJyB8fCBldmVudC5rZXkgPT09ICc5Jykge1xyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICAgIC8qKlxyXG4gICAgICogQGRlc2NyaXB0aW9uIEFjdHVhbGl6YSBlbCBtb25jbXAgZGUgc2lnZXNwX2NvbXByb2JhbnRlXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyB1cGRhdGVDb21wcm9iYW50ZUFtb3VudChhbW91bnQ6IG51bWJlciwgaWRDb21wcm9iYW50ZTogbnVtYmVyKTogT2JzZXJ2YWJsZTxhbnk+IHtcclxuICAgICAgcmV0dXJuIHRoaXMuaHR0cC5wdXQ8YW55PihgJHt0aGlzLlVSTH0vZGFvL3NpZy9jb21wcm9iYW50ZV9kYW8ucGhwP21vbnRvPXRydWVgLCB7XHJcbiAgICAgICAgbW9uY21wOiBhbW91bnQsXHJcbiAgICAgICAgaWRfY29tcHJvYmFudGU6IGlkQ29tcHJvYmFudGVcclxuICAgICAgfSwge1xyXG4gICAgICAgIGhlYWRlcnM6IHRoaXMuZ2V0SHR0cEhlYWRlcnMoKVxyXG4gICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEBkZXNjcmlwdGlvbiBBY3R1YWxpemEgZWwgY29tcHJvYmFudGUgcHJzdXB1ZXN0YXJpbyBkZSBFZ3Jlc29zXHJcbiAgICAgKiBAcGFyYW0gY29tcHJvYmFudGVcclxuICAgICAqL1xyXG4gICAgcHVibGljIHVwZGF0ZUNvbXByb2JhbnRlUHJlc3VwdWVzdGFyaW9FZ3Jlc29zKGNvbXByb2JhbnRlOiBJQ29tcHJvYmFudGVQcmVzdXB1ZXN0YXJpb0VncmVzb3MpOiBPYnNlcnZhYmxlPGFueT4ge1xyXG4gICAgICByZXR1cm4gdGhpcy5odHRwLnB1dDxhbnk+KGAke3RoaXMuVVJMfS9kYW8vc3BnL2NvbXByb2JhbnRlX3ByZXN1cHVlc3RhcmlvX2VncmVzb3NfZGFvLnBocGAsXHJcbiAgICAgIHsgLi4uY29tcHJvYmFudGUsIGlkOiBjb21wcm9iYW50ZS5pZF9kdF9zcGdjbXAgfSwgeyBoZWFkZXJzOiB0aGlzLmdldEh0dHBIZWFkZXJzKCkgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gT2J0aWVuZSBlbCBjb21wcm9iYW50ZSBwcmVzdXB1ZXN0YXJpbyBkZSBFZ3Jlc29zXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBnZXRDb21wcm9iYW50ZVByZXN1cHVlc3RhcmlvRWdyZXNvcygpOiBPYnNlcnZhYmxlPE1Db21wcm9iYW50ZVByZXN1cHVlc3RhcmlvRWdyZXNvc1tdPiB7XHJcbiAgICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PE1Db21wcm9iYW50ZVByZXN1cHVlc3RhcmlvRWdyZXNvc1tdPihgJHt0aGlzLlVSTH0vZGFvL3NwZy9jb21wcm9iYW50ZV9wcmVzdXB1ZXN0YXJpb19lZ3Jlc29zX2Rhby5waHBgLCB7XHJcbiAgICAgICAgaGVhZGVyczogdGhpcy5nZXRIdHRwSGVhZGVycygpXHJcbiAgICAgIH0pLnBpcGUoXHJcbiAgICAgICAgcmV0cnkoMyksXHJcbiAgICAgICAgY2F0Y2hFcnJvcih0aGlzLmhhbmRsZXJFcnJvciksXHJcbiAgICAgICAgbWFwKChyZXM6IGFueSkgPT4gcmVzLmRhdGEubWFwKGVsZW1lbnQgPT4gbmV3IE1Db21wcm9iYW50ZVByZXN1cHVlc3RhcmlvRWdyZXNvcyhlbGVtZW50KSkpXHJcbiAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gQWN0dWFsaXphIGVsIGNvbXByb2JhbnRlIHByc3VwdWVzdGFyaW8gZGUgSW5ncmVzb3NcclxuICAgICAqIEBwYXJhbSBjb21wcm9iYW50ZVxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgdXBkYXRlQ29tcHJvYmFudGVQcmVzdXB1ZXN0YXJpb0luZ3Jlc29zKGNvbXByb2JhbnRlOiBJQ29tcHJvYmFudGVQcmVzdXB1ZXN0YXJpb0luZ3Jlc29zKTogT2JzZXJ2YWJsZTxhbnk+IHtcclxuICAgICAgcmV0dXJuIHRoaXMuaHR0cC5wdXQ8YW55PihgJHt0aGlzLlVSTH0vZGFvL3NwZy9jb21wcm9iYW50ZV9wcmVzdXB1ZXN0YXJpb19lZ3Jlc29zX2Rhby5waHBgLFxyXG4gICAgICB7IC4uLmNvbXByb2JhbnRlLCBpZDogY29tcHJvYmFudGUuaWRfZHRfc3BpY21wIH0sIHsgaGVhZGVyczogdGhpcy5nZXRIdHRwSGVhZGVycygpIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQGRlc2NyaXB0aW9uIE9idGllbmUgZWwgY29tcHJvYmFudGUgcHJlc3VwdWVzdGFyaW8gZGUgSW5ncmVzb3NcclxuICAgICAqL1xyXG4gICAgcHVibGljIGdldENvbXByb2JhbnRlUHJlc3VwdWVzdGFyaW9JbmdyZXNvcygpOiBPYnNlcnZhYmxlPE1Db21wcm9iYW50ZVByZXN1cHVlc3RhcmlvSW5ncmVzb3NbXT4ge1xyXG4gICAgICByZXR1cm4gdGhpcy5odHRwLmdldDxNQ29tcHJvYmFudGVQcmVzdXB1ZXN0YXJpb0luZ3Jlc29zW10+KGAke3RoaXMuVVJMfS9kYW8vc3BpL2NvbXByb2JhbnRlX3ByZXN1cHVlc3RhcmlvX2luZ3Jlc29zX2Rhby5waHBgLCB7XHJcbiAgICAgICAgaGVhZGVyczogdGhpcy5nZXRIdHRwSGVhZGVycygpXHJcbiAgICAgIH0pLnBpcGUoXHJcbiAgICAgICAgcmV0cnkoMyksXHJcbiAgICAgICAgY2F0Y2hFcnJvcih0aGlzLmhhbmRsZXJFcnJvciksXHJcbiAgICAgICAgbWFwKChyZXM6IGFueSkgPT4gcmVzLmRhdGEubWFwKGVsZW1lbnQgPT4gbmV3IE1Db21wcm9iYW50ZVByZXN1cHVlc3RhcmlvSW5ncmVzb3MoZWxlbWVudCkpKVxyXG4gICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQEFjdHVhbGl6YSBsYSBkaXN0cmlidWNpw7NuIGRlIGxhIGN1ZW50YSBkZSBlZ3Jlc29cclxuICAgICAqIEBwYXJhbSBkaXN0cmlidXRpb25cclxuICAgICAqL1xyXG4gICAgcHVibGljIHVwZGF0ZURpc3RyaWJ1dGlvbkV4cGVuc2VBY2NvdW50KGRpc3RyaWJ1dGlvbjogSVVwZGF0ZURpc3RyaWJ1dGlvbik6IE9ic2VydmFibGU8YW55PiB7XHJcbiAgICAgIHJldHVybiB0aGlzLmh0dHAucHV0KGAke3RoaXMuVVJMfS9kYW8vc3BnL2N1ZW50YXNfZWdyZXNvc19kYW8ucGhwYCwgZGlzdHJpYnV0aW9uLFxyXG4gICAgICB7aGVhZGVyczogdGhpcy5nZXRIdHRwSGVhZGVycygpfSk7XHJcbiAgICB9XHJcblxyXG4gICAgICAgLyoqXHJcbiAgICAgKiBAQWN0dWFsaXphIGxhIGRpc3RyaWJ1Y2nDs24gZGUgbGEgY3VlbnRhIGRlIGVncmVzb1xyXG4gICAgICogQHBhcmFtIGRpc3RyaWJ1dGlvblxyXG4gICAgICovXHJcbiAgICAgICBwdWJsaWMgdXBkYXRlRGlzdHJpYnV0aW9uRXhwZW5zZUFjY291bnQyKGRpc3RyaWJ1dGlvbjogSVVwZGF0ZURpc3RyaWJ1dGlvbjJbXSk6IE9ic2VydmFibGU8YW55PiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cC5wdXQoYCR7dGhpcy5VUkx9L2Rhby9zcGcvY3VlbnRhc19lZ3Jlc29zX2Rhby5waHBgLCBkaXN0cmlidXRpb24sXHJcbiAgICAgICAge2hlYWRlcnM6IHRoaXMuZ2V0SHR0cEhlYWRlcnMoKX0pO1xyXG4gICAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAQWN0dWFsaXphIGxhIGRpc3RyaWJ1Y2nDs24gZGUgbGEgY3VlbnRhIGRlIEluZ3Jlc29cclxuICAgICAqIEBwYXJhbSBkaXN0cmlidXRpb25cclxuICAgICAqL1xyXG4gICAgcHVibGljIHVwZGF0ZURpc3RyaWJ1dGlvbkluY29tZUFjY291bnQoZGlzdHJpYnV0aW9uOiBJVXBkYXRlRGlzdHJpYnV0aW9uSW5ncmVzb3MpOiBPYnNlcnZhYmxlPElSZXNwb25zZT4ge1xyXG4gICAgICByZXR1cm4gdGhpcy5odHRwLnB1dDxJUmVzcG9uc2U+KGAke3RoaXMuVVJMfS9kYW8vc3BpL2N1ZW50YXNfaW5ncmVzb3NfZGFvLnBocGAsIGRpc3RyaWJ1dGlvbixcclxuICAgICAge2hlYWRlcnM6IHRoaXMuZ2V0SHR0cEhlYWRlcnMoKX0pXHJcbiAgICAgIC5waXBlKFxyXG4gICAgICAgIG1hcCgocmVzOiBhbnkpID0+IHtcclxuICAgICAgICAgIGlmIChyZXMuc3VjY2Vzcyl7XHJcbiAgICAgICAgICAgIHJlcy5kYXRhID0gbmV3IE1DdWVudGFJbmdyZXNvcyhyZXMuZGF0YSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICByZXR1cm4gcmVzO1xyXG4gICAgICAgIH0pXHJcbiAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHVwZGF0ZURpc3RyaWJ1dGlvbkluY29tZUFjY291bnQyKGRpc3RyaWJ1dGlvbjogSVVwZGF0ZURpc3RyaWJ1dGlvbkluZ3Jlc29zMltdKTogT2JzZXJ2YWJsZTxJUmVzcG9uc2U+IHtcclxuICAgICAgcmV0dXJuIHRoaXMuaHR0cC5wdXQ8SVJlc3BvbnNlPihgJHt0aGlzLlVSTH0vZGFvL3NwaS9jdWVudGFzX2luZ3Jlc29zX2Rhby5waHBgLCBkaXN0cmlidXRpb24sXHJcbiAgICAgIHtoZWFkZXJzOiB0aGlzLmdldEh0dHBIZWFkZXJzKCl9KVxyXG4gICAgICAucGlwZShcclxuICAgICAgICBtYXAoKHJlczogYW55KSA9PiB7XHJcbiAgICAgICAgICBpZiAocmVzLnN1Y2Nlc3Mpe1xyXG4gICAgICAgICAgICByZXMuZGF0YSA9IG5ldyBNQ3VlbnRhSW5ncmVzb3MocmVzLmRhdGEpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgcmV0dXJuIHJlcztcclxuICAgICAgICB9KVxyXG4gICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQEFjdHVhbGl6YSBsYSBkaXN0cmlidWNpw7NuIGRlIGxhIGN1ZW50YSBkZSBJbmdyZXNvIGRlIEVzdHJ1Y3R1cmFcclxuICAgICAqIEBwYXJhbSBkaXN0cmlidXRpb25cclxuICAgICAqL1xyXG4gICAgcHVibGljIHVwZGF0ZURpc3RyaWJ1dGlvbkluY29tZVN0cnVjdHVyZUFjY291bnQoZGlzdHJpYnV0aW9uOiBJVXBkYXRlRGlzdHJpYnV0aW9uSW5ncmVzb3MsIGxldmVsOiBudW1iZXIpOiBPYnNlcnZhYmxlPElSZXNwb25zZT4ge1xyXG4gICAgICByZXR1cm4gdGhpcy5odHRwLnB1dDxJUmVzcG9uc2U+KGAke3RoaXMuVVJMfS9kYW8vc3BpL2N1ZW50YV9lc3RydWN0dXJhX2luZ3Jlc29zX2Rhby5waHBgLCBkaXN0cmlidXRpb24sXHJcbiAgICAgIHtoZWFkZXJzOiB0aGlzLmdldEh0dHBIZWFkZXJzKCl9KVxyXG4gICAgICAucGlwZShcclxuICAgICAgICBtYXAoKHJlczogYW55KSA9PiB7XHJcbiAgICAgICAgICBpZiAocmVzLnN1Y2Nlc3Mpe1xyXG4gICAgICAgICAgICByZXMuZGF0YSA9IG5ldyBNSW5jb21lU3RydWN0dXJlQWNjb3VudChyZXMuZGF0YSwgbGV2ZWwpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgcmV0dXJuIHJlcztcclxuICAgICAgICB9KVxyXG4gICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQGRlc2NyaXB0aW9uIE9idGllbmUgZWwgcGxhbiBkZSBjdWVudGFzXHJcbiAgICAgKiBAcGFyYW0gbGV2ZWwgTsO6bWVybyBkZSBuaXZlbGVzIGRlIGxhIGNvbmZpZ3VyYWNpw7NuXHJcbiAgICAgKiBAcGFyYW0gaWQgZGUgbGEgZXN0cnVjdHVyYSBlbCBpZEVwMyBvIGlkRXA1XHJcbiAgICAgKiBAcmV0dXJuIE9ic2VydmFibGU8TUN1ZW50YUVncmVzb3NbXT5cclxuICAgICAqL1xyXG4gICAgcHVibGljIHBsYW5JbnN0aXR1Y2lvbmFsU1BHKHRpcG86c3RyaW5nPSdwbGFuJyxpZEVudGVycHJpc2U6bnVtYmVyLHBlcmlvZG9GaXNjYWw6bnVtYmVyLCBpZEVQM281Om51bWJlcixuaXZlbDpudW1iZXIsZXN0YXR1czpzdHJpbmc9JycpOiBPYnNlcnZhYmxlPE1DdWVudGFFZ3Jlc29zW10+e1xyXG4gICAgICByZXR1cm4gdGhpcy5odHRwLmdldDxNQ3VlbnRhRWdyZXNvc1tdPihgJHt0aGlzLlVSTH0vZGFvL3NwZy9jdWVudGFzX2VncmVzb3NfZGFvLnBocD90aXBvPSR7dGlwb30mZT0ke2lkRW50ZXJwcmlzZX0mcGVyaW9kbz0ke3BlcmlvZG9GaXNjYWx9JmlkPSR7aWRFUDNvNX0mbml2ZWw9JHtuaXZlbH0mZXN0PSR7ZXN0YXR1c31gLFxyXG4gICAgICB7aGVhZGVyczogdGhpcy5nZXRIdHRwSGVhZGVycygpfSlcclxuICAgICAgLnBpcGUoXHJcbiAgICAgICAgbWFwKChyZXM6YW55KSA9PiByZXMuZGF0YS5tYXAoZWxlbWVudCA9PiBuZXcgTUN1ZW50YUVncmVzb3MoZWxlbWVudCkpKVxyXG4gICAgICApXHJcbiAgICB9XHJcblxyXG4gICAgXHJcbiAgICAvKipcclxuICAgICAqIEBkZXNjcmlwdGlvbiBBYnJlIGVsIGNhdMOhbG9nbyBkZSBlc3RydWN0dXJhIHByZXN1cHVlc2FyaWFcclxuICAgICAqIEBwYXJhbSBkYXRhIERhdGEgcXVlIHNlIHZhIGEgbW9zdHJhclxyXG4gICAgICogQHBhcmFtIGNvbmZpZ3VyYXRpb24gQ29uZmlndXJhY2nDs24gZGUgbGEgZXN0cnVjdHVyYVxyXG4gICAgICogQHJldHVybiBQcm9taXNlPGFueT5cclxuICAgICAqIEBhdXRob3IgTWlndWVsIFJhbcOtcmV6XHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBvcGVuQ2F0YWxvZ29Fc3RydWN0dXJhUHJlc3VwdWVzdGFyaWEoZGF0YTogYW55W10sIGNvbmZpZ3VyYXRpb246IE1Db25maWd1cmF0aW9uU1BHKTogUHJvbWlzZTxhbnk+IHtcclxuICAgICAgY29uc3QgY2F0YWxvZ28gPSB0aGlzLmRpYWxvZy5vcGVuKENhdGFsb2dvRXN0cnVjdHVyYXNDb21wb25lbnQsIHtcclxuICAgICAgICBkYXRhOiB7XHJcbiAgICAgICAgICBkYXRhLFxyXG4gICAgICAgICAgY29uZmlndXJhdGlvblxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgd2lkdGg6ICcxMDAwcHgnLFxyXG4gICAgICAgIG1heEhlaWdodDogJzkwdmgnXHJcbiAgICAgIH0pO1xyXG4gICAgICByZXR1cm4gY2F0YWxvZ28uYWZ0ZXJDbG9zZWQoKS50b1Byb21pc2UoKTtcclxuICAgIH1cclxuXHJcblxyXG4gICAvKipcclxuICAgICogXHJcbiAgICAqIEBwYXJhbSB0aXBvIHsxLDIsMyw0LGNvbXBsZXRhfVxyXG4gICAgKiBAcGFyYW0gaWRFbnRlcnByaXNlIFxyXG4gICAgKiBAcGFyYW0gcGVyaW9kb0Zpc2NhbCBcclxuICAgICogQHBhcmFtIGNvZGlnbyB7Y29kaWdvIGRlIGxhIGVzdHJ1Y3R1cmEgfVxyXG4gICAgKiBAcmV0dXJucyBcclxuICAgICovXHJcbiAgICBwdWJsaWMgZ2V0QnVkZ2V0U3RydWN0dXJlQ29tcGxldGUodGlwbzpzdHJpbmc9J2NvbXBsZXRhJyxpZEVudGVycHJpc2U6bnVtYmVyLCBwZXJpb2RvRmlzY2FsOm51bWJlcixjb2RpZ286c3RyaW5nPScnICk6IE9ic2VydmFibGU8TUVzdHJ1Y3R1cmFzW10+IHtcclxuICAgICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8TUVzdHJ1Y3R1cmFzW10+KFxyXG4gICAgICAgIGAke3RoaXMuVVJMfS9kYW8vc3BnL2VzdHJ1Y3R1cmFfcHJlc3VwdWVzdGFyaWFfZGFvLnBocD90aXBvPSR7dGlwb30mZT0ke2lkRW50ZXJwcmlzZX0mcGVyPSR7cGVyaW9kb0Zpc2NhbH0mY29kPSR7Y29kaWdvfWAsXHJcbiAgICAgIHsgaGVhZGVyczogdGhpcy5nZXRIdHRwSGVhZGVycygpIH0pLnBpcGUoICAgICAgIFxyXG4gICAgICAgIG1hcCgocmVzcDogYW55KSA9PiByZXNwLmRhdGEubWFwKGUgPT4gbmV3IE1Fc3RydWN0dXJhcyhlKSkpXHJcbiAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gT2J0aWVuZSBsYXMgY29uZmlndXJhY2lvbmVzIGRlIGxhIGVzdHJ1Y3R1cmEgcHJlc3VwdWVzdGFyaWFcclxuICAgICAqIEByZXR1cm4gT2JzZXJ2YWJsZTxNQ29uZmlndXJhdGlvblNQR1tdPlxyXG4gICAgICogQGF1dGhvciBNaWd1ZWwgUmFtw61yZXpcclxuICAgICAqL1xyXG4gICAgcHVibGljIGdldENvbmZpZ3VyYXRpb25TUEcoaWRFbnRlcnByaXNlOm51bWJlciwgcGVyaW9kb0Zpc2NhbDpudW1iZXIpOiBPYnNlcnZhYmxlPE1Db25maWd1cmF0aW9uU1BHPiB7XHJcblxyXG4gICAgICByZXR1cm4gdGhpcy5odHRwLmdldDxNQ29uZmlndXJhdGlvblNQRz4oYCR7dGhpcy5VUkx9L2Rhby9zcGcvY29uZmlndXJhY2lvbl9wcmVzdXB1ZXN0YXJpYV9kYW8ucGhwP2U9JHtpZEVudGVycHJpc2V9JnBlcmlvZG89JHtwZXJpb2RvRmlzY2FsfWAsXHJcbiAgICAgIHsgaGVhZGVyczogdGhpcy5nZXRIdHRwSGVhZGVycygpIH0pLnBpcGUoXHJcbiAgICAgICAgcmV0cnkoMyksXHJcbiAgICAgICAgY2F0Y2hFcnJvcih0aGlzLmhhbmRsZXJFcnJvciksXHJcbiAgICAgICAgbWFwKChyZXNwOiBhbnkpID0+IG5ldyBNQ29uZmlndXJhdGlvblNQRyhyZXNwLmRhdGFbMF0pKVxyXG4gICAgICApO1xyXG4gICAgfVxyXG4gICAgLyoqXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gT2J0aWVuZSBsYXMgY29uZmlndXJhY2lvbmVzIGRlIGxvcyBwcm92ZWVkb3Jlc1xyXG4gICAgICogQHJldHVybiBPYnNlcnZhYmxlPE1Db25maWd1cmF0aW9uUlBDW10+XHJcbiAgICAgKiBAYXV0aG9yIENhcmxvcyBBbGJvcm5velxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgZ2V0Q29uZmlndXJhdGlvblJQQygpOiBPYnNlcnZhYmxlPElSZXNwb25zZT4ge1xyXG5cclxuICAgICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8TUNvbmZpZ3VyYXRpb25SUEM+KGAke3RoaXMuVVJMfS9kYW8vcnBjL3Byb3ZlZWRvcl9jb25maWdfZGFvLnBocGAsXHJcbiAgICAgIHsgaGVhZGVyczogdGhpcy5nZXRIdHRwSGVhZGVycygpIH0pLnBpcGUoXHJcbiAgICAgICAgcmV0cnkoMyksXHJcbiAgICAgICAgY2F0Y2hFcnJvcih0aGlzLmhhbmRsZXJFcnJvciksXHJcbiAgICAgICAgbWFwKChyZXNwOiBJUmVzcG9uc2UpID0+IHtcclxuICAgICAgICAgIGlmIChyZXNwLnN1Y2Nlc3MpIHtcclxuICAgICAgICAgICAgcmVzcC5kYXRhID0gbmV3IE1Db25maWd1cmF0aW9uUlBDKHJlc3AuZGF0YSlcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHJldHVybiByZXNwXHJcbiAgICAgICAgfSlcclxuICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEBkZXNjcmlwdGlvbiBPYnRpZW5lIGxhcyBNQ29uZmlndXJhY2lvblNOTyBkZSBsYSBub21pbmFcclxuICAgICAqIEByZXR1cm4gT2JzZXJ2YWJsZTxNQ29uZmlndXJhY2lvblNOT1tdPlxyXG4gICAgICogQGRhdGUgMjctMDctMjAyMVxyXG4gICAgICovXHJcbiAgICAgcHVibGljIGdldENvbmZpZ3VyYXRpb25TTk8oaWRFbnRlcnByaXNlOm51bWJlcik6IE9ic2VydmFibGU8SVJlc3BvbnNlPiB7XHJcblxyXG4gICAgICByZXR1cm4gdGhpcy5odHRwLmdldDxJUmVzcG9uc2U+KGAke3RoaXMuVVJMfS9kYW8vc25vL2NvbmZpZ3VyYWNpb25fZGFvLnBocD90aXBvPSR7J2NvbmZpZ3VyYWNpb24nfSZlPSR7aWRFbnRlcnByaXNlfWAsXHJcbiAgICAgIHsgaGVhZGVyczogdGhpcy5nZXRIdHRwSGVhZGVycygpIH0pLnBpcGUoXHJcbiAgICAgICAgcmV0cnkoMyksXHJcbiAgICAgICAgY2F0Y2hFcnJvcih0aGlzLmhhbmRsZXJFcnJvciksXHJcbiAgICAgICAgbWFwKChyZXNwOiBJUmVzcG9uc2UpID0+IHtcclxuICAgICAgICAgIGlmIChyZXNwLnN1Y2Nlc3MpIHtcclxuICAgICAgICAgICAgaWYocmVzcC5kYXRhICE9bnVsbCl7XHJcbiAgICAgICAgICAgICAgcmVzcC5kYXRhID0gcmVzcC5kYXRhLm1hcChlID0+IG5ldyBNQ29uZmlndXJhY2lvblNOTyhlKSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHJldHVybiByZXNwXHJcbiAgICAgICAgfSlcclxuICAgICAgKTtcclxuICAgIH1cclxuXHJcblxyXG4gICAgcHVibGljIGRhdGVUb1N0cmluZyhkYXRlOiBEYXRlKTogc3RyaW5ne1xyXG4gICAgICByZXR1cm4gYCR7ZGF0ZS5nZXRGdWxsWWVhcigpfS0ke1xyXG4gICAgICAgIGRhdGUuZ2V0TW9udGgoKSArIDEgPj0gMTAgPyBkYXRlLmdldE1vbnRoKCkgKyAxIDogYDAke2RhdGUuZ2V0TW9udGgoKSArIDF9YFxyXG4gICAgICB9LSR7XHJcbiAgICAgICAgZGF0ZS5nZXREYXRlKCkgPj0gMTAgPyBkYXRlLmdldERhdGUoKSA6IGAwJHtkYXRlLmdldERhdGUoKX1gXHJcbiAgICAgIH1gXHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gT2J0aWVuZSBsYXMgY29uZmlndXJhY2lvbmVzIGRlIFNlZ3VyaWRhZFxyXG4gICAgICogQHJldHVybiBPYnNlcnZhYmxlPElSZXNwb25zZT5cclxuICAgICAqIEBhdXRob3IgQ2FybG9zIEFsYm9ybm96XHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBnZXRDb25maWdTU1MoaWRFbnRlcnByaXNlOm51bWJlcj0wKTogT2JzZXJ2YWJsZTxJUmVzcG9uc2U+IHtcclxuXHJcbiAgICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PElSZXNwb25zZT4oYCR7dGhpcy5VUkx9L2Rhby9zc3Mvc2VndXJpZGFkX2NvbmZpZ19kYW8ucGhwP2U9JHtpZEVudGVycHJpc2V9YCxcclxuICAgICAgeyBoZWFkZXJzOiB0aGlzLmdldEh0dHBIZWFkZXJzKCkgfSkucGlwZShcclxuICAgICAgICByZXRyeSgzKSxcclxuICAgICAgICBjYXRjaEVycm9yKHRoaXMuaGFuZGxlckVycm9yKSxcclxuICAgICAgICBtYXAoKHJlc3A6IElSZXNwb25zZSkgPT4ge1xyXG4gICAgICAgICAgaWYgKHJlc3Auc3VjY2Vzcykge1xyXG4gICAgICAgICAgICByZXNwLmRhdGEgPSBuZXcgTUNvbmZpZ1NTUyhyZXNwLmRhdGEpXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICByZXR1cm4gcmVzcFxyXG4gICAgICAgIH0pXHJcbiAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldENvbXBvbmVudHMoc3lzdGVtQ29kZTogc3RyaW5nID0gbnVsbCwgcGVybWl0OiBib29sZWFuKTogT2JzZXJ2YWJsZTxJUmVzcG9uc2U+e1xyXG5cclxuICAgICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8SVJlc3BvbnNlPihcclxuICAgICAgICBgJHt0aGlzLlVSTH0vZGFvL3Nzcy9jb21wb25lbnRlc19kYW8ucGhwPyR7c3lzdGVtQ29kZSA/IGBjb2RzaXM9JHtzeXN0ZW1Db2RlfSR7XHJcbiAgICAgICAgICBwZXJtaXQgPyBgJnBlcm1pdD10cnVlYCA6ICcnXHJcbiAgICAgICAgfWAgOiAnJ31gLFxyXG4gICAgICAgIHsgaGVhZGVyczogdGhpcy5nZXRIdHRwSGVhZGVycygpIH1cclxuICAgICAgKS5waXBlKFxyXG4gIFxyXG4gICAgICAgIG1hcChyZXMgPT4ge1xyXG4gICAgICAgICAgaWYgKHJlcy5zdWNjZXNzKSB7XHJcbiAgICAgICAgICAgIHJlcy5kYXRhID0gcmVzLmRhdGEubWFwKGUgPT4gbmV3IE1Db21wb25lbnQoZSkpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgcmV0dXJuIHJlcztcclxuICAgICAgICB9KVxyXG4gICAgICApXHJcbiAgXHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gT2J0aWVuZSBsYXMgZnVlbnRlcyBkZSBmaW5hbmNpYW1pZW50b1xyXG4gICAgICogQHJldHVybiBPYnNlcnZhYmxlPE1GdWVudGVGaW5hbmNpYW1pZW50b1tdPlxyXG4gICAgICogQGF1dGhvciBNaWd1ZWwgUmFtw61yZXpcclxuICAgICAqL1xyXG4gICAgcHVibGljIGdldEZ1ZW50ZUZpbmFuY2lhbWllbnRvKGlkRW50ZXJwcmlzZTpudW1iZXIscGVyaW9kb0Zpc2NhbDpudW1iZXIpOiBPYnNlcnZhYmxlPE1GdWVudGVGaW5hbmNpYW1pZW50b1tdPiB7XHJcbiAgICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PE1GdWVudGVGaW5hbmNpYW1pZW50b1tdPihgJHt0aGlzLlVSTH0vZGFvL3NwZy9mdWVudGVfZmluYW5jaWFtaWVudG9fZGFvLnBocD9lPSR7aWRFbnRlcnByaXNlfSZwZXI9JHtwZXJpb2RvRmlzY2FsfWAsXHJcbiAgICAgIHsgaGVhZGVyczogdGhpcy5nZXRIdHRwSGVhZGVycygpIH0pLnBpcGUoXHJcbiAgICAgICAgcmV0cnkoMyksXHJcbiAgICAgICAgY2F0Y2hFcnJvcih0aGlzLmhhbmRsZXJFcnJvciksXHJcbiAgICAgICAgbWFwKChyZXNwOiBhbnkpID0+IHJlc3AuZGF0YS5tYXAoZWxlbWVudCA9PiBuZXcgTUZ1ZW50ZUZpbmFuY2lhbWllbnRvKGVsZW1lbnQpKSlcclxuICAgICAgKTtcclxuICAgIH0gXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gT2J0aWVuZSBsb3MgY2VudHJvcyBkZSBjb3N0b1xyXG4gICAgICogQHJldHVybiBPYnNlcnZhYmxlPElSZXNwb25zZT5cclxuICAgICAqIG1vZGlmaWNhZG8gMjgtMTItMjAyMlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgZ2V0Q2VudHJvQ29zdG8odGlwbzpzdHJpbmcsaWRFbnRlcnByaXNlOm51bWJlcixwZXJpb2RvRmlzY2FsOm51bWJlcik6IE9ic2VydmFibGU8SVJlc3BvbnNlPiB7XHJcbiAgICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PElSZXNwb25zZT4oYCR7dGhpcy5VUkx9L2Rhby9zY2cvY2VudHJvX2Nvc3RvX2Rhby5waHA/dGlwbz0ke3RpcG99JmU9JHtpZEVudGVycHJpc2V9JnBlcmlvZG89JHtwZXJpb2RvRmlzY2FsfWAsIFxyXG4gICAgICB7aGVhZGVyczogdGhpcy5nZXRIdHRwSGVhZGVycygpfVxyXG4gICAgICApLnBpcGUoXHJcbiAgICAgICAgbWFwKChyZXM6IElSZXNwb25zZSkgPT4ge1xyXG4gICAgICAgICAgaWYgKHJlcy5zdWNjZXNzKSB7XHJcbiAgICAgICAgICAgIHJlcy5kYXRhID0gcmVzLmRhdGEubWFwKGVsZW1lbnQgPT4gbmV3IE1DZW50cm9Db3N0byhlbGVtZW50KSlcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHJldHVybiByZXNcclxuICAgICAgICB9KVxyXG4gICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXRDZW50cm9Db3N0b1VuaWRhZE9yZ2FuaXphdGl2YSh0aXBvOnN0cmluZyxpZEVudGVycHJpc2U6bnVtYmVyLHBlcmlvZG9GaXNjYWw6bnVtYmVyLGlkVW5pZGFkQWRtaW5pc3RyYXRpdmE6bnVtYmVyKTogT2JzZXJ2YWJsZTxJUmVzcG9uc2U+IHtcclxuICAgICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8SVJlc3BvbnNlPihgJHt0aGlzLlVSTH0vZGFvL3NwZy91bmlkYWRfYWRtaW5pc3RyYXRpdmFfZGFvLnBocD90aXBvPSR7dGlwb30mZT0ke2lkRW50ZXJwcmlzZX0mcGVyaW9kbz0ke3BlcmlvZG9GaXNjYWx9JmlkPSR7aWRVbmlkYWRBZG1pbmlzdHJhdGl2YX1gLCBcclxuICAgICAge2hlYWRlcnM6IHRoaXMuZ2V0SHR0cEhlYWRlcnMoKX1cclxuICAgICAgKS5waXBlKFxyXG4gICAgICAgIG1hcCgocmVzOiBJUmVzcG9uc2UpID0+IHtcclxuICAgICAgICAgIGlmIChyZXMuc3VjY2Vzcykge1xyXG4gICAgICAgICAgICByZXMuZGF0YSA9IHJlcy5kYXRhLm1hcChlbGVtZW50ID0+IG5ldyBNQ2VudHJvQ29zdG8oZWxlbWVudCkpXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICByZXR1cm4gcmVzXHJcbiAgICAgICAgfSlcclxuICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0RXN0cnVjdHVyYXNVbmlkYWRPcmdhbml6YXRpdmEodGlwbzpzdHJpbmcsaWRFbnRlcnByaXNlOm51bWJlcixwZXJpb2RvRmlzY2FsOm51bWJlcixpZFVuaWRhZEFkbWluaXN0cmF0aXZhOm51bWJlcik6IE9ic2VydmFibGU8SVJlc3BvbnNlPiB7XHJcbiAgICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PElSZXNwb25zZT4oYCR7dGhpcy5VUkx9L2Rhby9zcGcvdW5pZGFkX2FkbWluaXN0cmF0aXZhX2Rhby5waHA/dGlwbz0ke3RpcG99JmU9JHtpZEVudGVycHJpc2V9JnBlcmlvZG89JHtwZXJpb2RvRmlzY2FsfSZpZD0ke2lkVW5pZGFkQWRtaW5pc3RyYXRpdmF9YCwgXHJcbiAgICAgIHtoZWFkZXJzOiB0aGlzLmdldEh0dHBIZWFkZXJzKCl9XHJcbiAgICAgICkucGlwZShcclxuICAgICAgICBtYXAoKHJlczogSVJlc3BvbnNlKSA9PiB7XHJcbiAgICAgICAgICBpZiAocmVzLnN1Y2Nlc3MpIHtcclxuICAgICAgICAgICAgcmVzLmRhdGEgPSByZXMuZGF0YS5tYXAoZWxlbWVudCA9PiBuZXcgTUVzdHJ1Y3R1cmFzKGVsZW1lbnQpKVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgcmV0dXJuIHJlc1xyXG4gICAgICAgIH0pXHJcbiAgICAgICk7XHJcbiAgICB9XHJcblxyXG5cclxuICBcclxuXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gQWJyZSBlbCBkaWFsb2cgZGUgY2hlY2trc1xyXG4gICAgICogQHBhcmFtIGNvbHVtbnMgQ29sdW1uYXMgcXVlIHZhIGEgdGVuZXIgbGEgdGFibGFcclxuICAgICAqIEBwYXJhbSB0aXRsZSBUw610dWxvIGRlIGxhIG1vZGFsXHJcbiAgICAgKiBAcGFyYW0gZGF0YVNvdXJjZSBEYXRhIHF1ZSBzIGV2YSBhIG1vc3RyYXIgZW4gbGEgdGFibGFcclxuICAgICAqL1xyXG4gICAgcHVibGljIG9wZW5EaWFsb2dNdWx0aVNlbGVjdChcclxuICAgICAgLy8gY29sdW1uczogc3RyaW5nW10sIFxyXG4gICAgICAvLyB0aXRsZTogc3RyaW5nLCBcclxuICAgICAgLy8gZGF0YVNvdXJjZTogYW55W10sXHJcbiAgICAgIC8vIGNvbHVtbk5hbWVzPzogc3RyaW5nW11cclxuICAgICAgY29sdW1uczogc3RyaW5nW10sIFxyXG4gICAgICB0aXRsZTogc3RyaW5nLCBcclxuICAgICAgZGF0YVNvdXJjZTogYW55W10sIFxyXG4gICAgICBjb2x1bW5OYW1lczogc3RyaW5nW10gPSBudWxsLCBcclxuICAgICAgd2lkdGg6IHN0cmluZyA9ICcxMDAwcHgnLFxyXG4gICAgICBvcHRpb25zOiB7XHJcbiAgICAgICAgaGFzQmFja2Ryb3A/OiBib29sZWFuLFxyXG4gICAgICAgIGRpc2FibGVDbG9zZT86IGJvb2xlYW4sXHJcbiAgICAgICAvLyBkaXNhYmxlTWFzdGVyVG9nZ2xlPzogYm9vbGVhblxyXG4gICAgICB9ID0ge1xyXG4gICAgICAgIGRpc2FibGVDbG9zZTogZmFsc2UsIFxyXG4gICAgICAgIGhhc0JhY2tkcm9wOiBmYWxzZSwgXHJcbiAgICAgIC8vICBkaXNhYmxlTWFzdGVyVG9nZ2xlOiBmYWxzZVxyXG4gICAgICB9XHJcbiAgICApOiBQcm9taXNlPGFueVtdPiB7XHJcbiAgICAgIGxldCBkaWFsb2dSZWYgPSB0aGlzLmRpYWxvZy5vcGVuKFRhYmxlU2VsZWN0Q29tcG9uZW50LCB7XHJcbiAgICAgICAgZGF0YToge1xyXG4gICAgICAgICAgdGl0bGU6IHRpdGxlLFxyXG4gICAgICAgICAgY29sdW1uczogY29sdW1ucyxcclxuICAgICAgICAgIGRhdGFTb3VyY2U6IGRhdGFTb3VyY2UsXHJcbiAgICAgICAgICBjb2x1bW5OYW1lcyxcclxuICAgICAgICAgLy8gZGlzYWJsZU1hc3RlclRvZ2dsZTogb3B0aW9ucy5kaXNhYmxlTWFzdGVyVG9nZ2xlXHJcbiAgICAgICAgfSxcclxuICAgICAgICB3aWR0aDogd2lkdGgsXHJcbiAgICAgICAgbWF4SGVpZ2h0OiAnOTB2aCcsXHJcbiAgICAgICAgaGFzQmFja2Ryb3A6IG9wdGlvbnMuaGFzQmFja2Ryb3AsXHJcbiAgICAgICAgZGlzYWJsZUNsb3NlOiBvcHRpb25zLmRpc2FibGVDbG9zZVxyXG4gICAgICB9KTtcclxuXHJcbiAgICAgIHJldHVybiBkaWFsb2dSZWYuYWZ0ZXJDbG9zZWQoKS50b1Byb21pc2UoKTtcclxuICAgIH1cclxuIFxyXG5cclxuXHJcbiAgICAvKipcclxuICAgICAqIEBkZXNjcmlwdGlvbiBPYnRpZW5lIGxhIGNvbmZpZ3VyYWNpw7NuIGRlIFNDR1xyXG4gICAgICogQHJldHVybiBPYnNlcnZhYmxlPE1Db25maWd1cmFjaW9uU0NHW10+XHJcbiAgICAgKiBAYXV0aG9yIE1pZ3VlbCBSYW3DrXJlelxyXG4gICAgICogQG1vZGlmaXQgMjUtMDctMjAyMVxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgZ2V0Q29uZmlndXJhdGlvblNDRyhsaW5lYUVtcHJlc2E6bnVtYmVyLHBlcmlvZG9GaXNjYWw6bnVtYmVyKTogT2JzZXJ2YWJsZTxNQ29uZmlndXJhY2lvblNDR1tdPiB7ICAgICAgXHJcbiAgICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PE1Db25maWd1cmFjaW9uU0NHW10+KGAke3RoaXMuVVJMfS9kYW8vc2NnL2NvbmZpZ3VyYWNpb25fY29udGFiaWxpZGFkX2Rhby5waHA/dGlwbz0keydkZWZhdWx0J30mZT0ke2xpbmVhRW1wcmVzYX0mcGVyaW9kbz0ke3BlcmlvZG9GaXNjYWx9YCxcclxuICAgICAge2hlYWRlcnM6IHRoaXMuZ2V0SHR0cEhlYWRlcnMoKX1cclxuICAgICAgKS5waXBlKFxyXG4gICAgICAgIHJldHJ5KDMpLFxyXG4gICAgICAgIGNhdGNoRXJyb3IodGhpcy5oYW5kbGVyRXJyb3IpLFxyXG4gICAgICAgIG1hcCgocmVzcDogYW55KSA9PiByZXNwLmRhdGEubWFwKGVsZW1lbnQgPT4gbmV3IE1Db25maWd1cmFjaW9uU0NHKGVsZW1lbnQpKSlcclxuICAgICAgKVxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQGRlc2NyaXB0aW9uIEFicmUgdW4gZGlhbG9nIGRlIGNvbmZpcm1hY2nDs25cclxuICAgICAqIEBwYXJhbSB0aXRsZSBUw610dWxvIGRlIGxhIG1vZGFsIGRlIGNvbmZpcm1cclxuICAgICAqIEBwYXJhbSBtZXNzYWdlIE1lbnNhamUgKG9wY2lvbmFsKSBwYXJhIGVsIHVzdXNhcmlvXHJcbiAgICAgKiBAcmV0dXJuIFByb21pc2U8Ym9vbGVhbj5cclxuICAgICAqIEBhdXRob3IgTWlndWVsIFJhbcOtcmV6XHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBvcGVuRGlhbG9nQ29uZmlybSh0aXRsZTogc3RyaW5nLCBtZXNzYWdlPzogc3RyaW5nKTogUHJvbWlzZTxib29sZWFuPiB7XHJcbiAgICAgIGxldCBkaWFsb2dSZWYgPSB0aGlzLmRpYWxvZy5vcGVuKENvbmZpcm1Db21wb25lbnQsIHtcclxuICAgICAgICBkYXRhOiB7XHJcbiAgICAgICAgICB0aXRsZTogdGl0bGUsXHJcbiAgICAgICAgICBtZXNzYWdlOiAobWVzc2FnZSkgPyBtZXNzYWdlIDogbnVsbFxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgd2lkdGg6ICcxMDAwcHgnLFxyXG4gICAgICAgIG1heEhlaWdodDogJzkwdmgnXHJcbiAgICAgIH0pO1xyXG5cclxuICAgICAgcmV0dXJuIGRpYWxvZ1JlZi5hZnRlckNsb3NlZCgpLnRvUHJvbWlzZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQGRlc2NyaXB0aW9uIENvbnZpZXJ0ZSBlbCBjb250ZW5pZG8gZGUgdW4gQWJzdHJhY3RDb250cm9sIGVuIG1hecO6c2N1bGEgKFVzYXIgZW4gZXZlbnRvIGtleXVwKVxyXG4gICAgICogQHBhcmFtIGZvcm1Hcm91cCBGb3JtdWxhcmlvIGTDs25kZSBzZSB2YSBhIGJ1c2NhciBlbCBBYnN0cmFjdENvbnRyb2xcclxuICAgICAqIEBwYXJhbSBuYW1lIE5vbWJyZSBkZWwgQWJzdHJhY3RDb250cm9sXHJcbiAgICAgKiBAcmV0dXJuIHZvaWRcclxuICAgICAqIEBhdXRob3IgTWlndWVsIFJhbcOtcmV6XHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBjaGFuZ2VUb1VwcGVyQ2FzZShmb3JtR3JvdXA6IFVudHlwZWRGb3JtR3JvdXAsIG5hbWU6IHN0cmluZyk6IHZvaWQge1xyXG4gICAgICB0aGlzLmdldEFic3RyYWN0Q29udHJvbChmb3JtR3JvdXAsIG5hbWUpLnNldFZhbHVlKHRoaXMuZ2V0QWJzdHJhY3RDb250cm9sKGZvcm1Hcm91cCwgbmFtZSkudmFsdWUudG9VcHBlckNhc2UoKSk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gT2J0aWVuZSBlbCBBYnN0cmFjdENvbnRyb2wgZGUgdW4gZm9ybXVsYXJpb1xyXG4gICAgICogQHBhcmFtIGZvcm1Hcm91cCBGb3JtdWxhcmlvIGRvbmRlIHNlIHZhIGEgYnVzY2FyIGVsIEFic3RyYWN0Q29udHJvbFxyXG4gICAgICogQHBhcmFtIG5hbWUgTm9tYnJlIGRlbCBBYnN0cmFjdENvbnRyb2xcclxuICAgICAqIEByZXR1cm4gQWJzdHJhY3RDb250cm9sXHJcbiAgICAgKiBAYXV0aG9yIE1pZ3VlbCBSYW3DrXJlelxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgZ2V0QWJzdHJhY3RDb250cm9sKGZvcm1Hcm91cDogVW50eXBlZEZvcm1Hcm91cCwgbmFtZTogc3RyaW5nKTogQWJzdHJhY3RDb250cm9sIHtcclxuICAgICAgcmV0dXJuIGZvcm1Hcm91cC5nZXQobmFtZSk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gUHJldmllbmUgcXVlIHNlIGVzY3JpYmFuIGxldHJhcyBlbiBlbCBpbnB1dCAoVXNhciBlbiBrZXlwcmVzcylcclxuICAgICAqIEBwYXJhbSBldmVudCBFdmVudG8gZGVsIHRlY2xhZG9cclxuICAgICAqIEByZXR1cm4gYm9vbGVhblxyXG4gICAgICogQGF1dGhvciBNaWd1ZWwgUmFtw61yZXpcclxuICAgICAqIEBtb2RpZmljYWRvIGNvbW8gb25seU51bWVybyBwYXJhIGNvcnJlZ2lyIGNvZGlnbywgdXNhciBjdXJyZW5jeS1pbnB1dCBzaSBxdWllcmUgdXNhciBkZWNpbWFsZXMgXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBvbmx5RGVjaW1hbChldmVudD86IGFueSk6IGJvb2xlYW4ge1xyXG4gICAgICAgIGlmICghaXNOYU4oK2V2ZW50LmtleSkgJiYgZXZlbnQua2V5Q29kZSAhPSAzMikge1xyXG4gICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBmYWxzZTsgICAgICBcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEBkZXNjcmlwdGlvbiBQcmV2aWVuZSBxdWUgc2UgZXNjcmliYW4gbGV0cmFzIGVuIGVsIGlucHV0IChVc2FyIGVuIGtleXByZXNzKVxyXG4gICAgICogQHBhcmFtIGV2ZW50IEV2ZW50byBkZWwgdGVjbGFkb1xyXG4gICAgICogQHJldHVybiBib29sZWFuXHJcbiAgICAgKiBAYXV0aG9yIE1pZ3VlbCBSYW3DrXJlelxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgb25seU51bWJlcnMoZXZlbnQ/OiBhbnkpOiBib29sZWFuIHtcclxuICAgICAgLy8gY29uc29sZS5sb2coZXZlbnQpO1xyXG4gICAgICBpZiAoIWlzTmFOKCtldmVudC5rZXkpICYmIGV2ZW50LmtleUNvZGUgIT0gMzIpIHtcclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgIC8qKlxyXG4gICAgICogQGRlc2NyaXB0aW9uIEFjZXB0YSBzb2xvIG51bWVybywgZGVsZXRlIHkgYmFja3NwYWNlXHJcbiAgICAgKiBAcGFyYW0gZXZlbnQgRXZlbnRvIGRlbCB0ZWNsYWRvXHJcbiAgICAgKiBAcmV0dXJuIGJvb2xlYW5cclxuICAgICAqIEBhdXRob3IgRGltYWx5IENyZXNwb1xyXG4gICAgICovXHJcbiAgICBwdWJsaWMgb25seU51bWJlcnMyKGV2ZW50PzogYW55KTogYm9vbGVhbiB7XHJcbiAgICAgIGlmICghaXNOYU4oK2V2ZW50LmtleSkgIHx8IGV2ZW50LmtleUNvZGUgPT0gOCB8fCBldmVudC5rZXlDb2RlID09IDQ2KSB7XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgICAvKipcclxuICAgICAqIEBkZXNjcmlwdGlvbiBBY2VwdGEgc29sbyBudW1lcm8sZ3Vpb25lcywgcGFyZW50ZXNpcyxlc3BhY2lvc1xyXG4gICAgICogQHBhcmFtIGV2ZW50IEV2ZW50byBkZWwgdGVjbGFkb1xyXG4gICAgICogQHJldHVybiBib29sZWFuXHJcbiAgICAgKiBAYXV0aG9yIERpbWFseSBDcmVzcG9cclxuICAgICAqL1xyXG4gICAgIHB1YmxpYyB0eXBlTnVtYmVyc0h5cGhlbihldmVudD86IGFueSk6IGJvb2xlYW4ge1xyXG4gICAgICBpZiAoIWlzTmFOKCtldmVudC5rZXkpIHx8IGV2ZW50LmtleUNvZGUgPT0gOCB8fCAgZXZlbnQua2V5Q29kZSA9PSAzMiAgfHwgZXZlbnQua2V5Q29kZSA9PSA0NiBcclxuICAgICAgfHwgZXZlbnQua2V5Q29kZSA9PSA1OCB8fCBldmVudC5rZXlDb2RlID09IDU3IHx8IGV2ZW50LmtleUNvZGUgPT0gMTg5KSB7XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgICAvKipcclxuICAgICAqIEBkZXNjcmlwdGlvbiBQZXJtaXRlIChhLXogQS1aIMOhLcO6IMOxw5Egw7zDnCAnLC4pIHF1ZSBzZSBlc2NyaWJhbiBudW1lcm9zIGVuIGVsIGlucHV0IChVc2FyIGVuIGtleXByZXNzKVxyXG4gICAgICogQHBhcmFtIGV2ZW50IEV2ZW50byBkZWwgdGVjbGFkb1xyXG4gICAgICogQHJldHVybiBib29sZWFuXHJcbiAgICAgKiBAZGF0ZSAxNC0wNS0yMDIyXHJcbiAgICAgKiBcclxuICAgICAqL1xyXG4gICAgICBwdWJsaWMgdHlwZU5hbWUoZXZlbnQ/OiBhbnkpOiBib29sZWFuIHtcclxuICAgICAgICBpZiAoKGV2ZW50LmtleT49J2EnICYmIGV2ZW50LmtleTw9J3onKSAgfHwgKGV2ZW50LmtleT49J0EnICYmIGV2ZW50LmtleTw9J1onKSB8fCAgZXZlbnQua2V5PT1cIsOxXCIgfHwgIGV2ZW50LmtleT09XCLDkVwiIFxyXG4gICAgICAgICAgfHwgKGV2ZW50LmtleT49J8OhJyAmJiBldmVudC5rZXk8PSfDuicpIHx8IGV2ZW50LmtleT49J8O8JyAgfHwgZXZlbnQua2V5Pj0nw5wnICB8fCBldmVudC5rZXk9PVwiJ1wiICB8fCBldmVudC5rZXlDb2RlPT0zMiBcclxuICAgICAgICAgIHx8ICBldmVudC5rZXk9PVwiLlwiIHx8ICBldmVudC5rZXk9PVwiLFwiIHx8IGV2ZW50LmtleUNvZGUgPT0gOCB8fCAgZXZlbnQua2V5Q29kZSA9PSAzMiAgfHwgZXZlbnQua2V5Q29kZSA9PSA0NiAgKXtcclxuICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgIH1cclxuICAgIC8qKlxyXG4gICAgICogQGRlc2NyaXB0aW9uIFBlcm1pdGUgKDAtOSBhLXogQS1aIMOhLcO6IMOxw5Egw7zDnCAnLC4tXy86KCklI8K6JiTigqzCo8KlKSBxdWUgc2UgZXNjcmliYW4gIGVuIGVsIGlucHV0IChVc2FyIGVuIGtleXByZXNzKVxyXG4gICAgICogQHBhcmFtIGV2ZW50IEV2ZW50byBkZWwgdGVjbGFkb1xyXG4gICAgICogQHJldHVybiBib29sZWFuXHJcbiAgICAgKiBAZGF0ZSAxNC0wNS0yMDIyXHJcbiAgICAgKiBcclxuICAgICAqL1xyXG4gICAgICBwdWJsaWMgdHlwZVRleHQoZXZlbnQ/OiBhbnkpOiBib29sZWFuIHsgICAgICBcclxuICAgICAgICBpZiAoKGV2ZW50LmtleT49J2EnICAmJiBldmVudC5rZXk8PSd6JykgfHwgKGV2ZW50LmtleT49J0EnICYmIGV2ZW50LmtleTw9J1onKSB8fCBldmVudC5rZXk9PVwiw7FcIiB8fCBldmVudC5rZXk9PVwiw5FcIiBcclxuICAgICAgICAgIHx8IChldmVudC5rZXk+PSfDoScgJiYgZXZlbnQua2V5PD0nw7onKSB8fCBldmVudC5rZXk9PSfDvCcgfHwgZXZlbnQua2V5PT0nw5wnIHx8IGV2ZW50LmtleT09XCInXCIgfHwgaXNOYU4oK2V2ZW50LmtleSkgXHJcbiAgICAgICAgICB8fCBldmVudC5rZXk9PVwiLlwiICB8fCAgZXZlbnQua2V5PT1cIixcIiB8fCBldmVudC5rZXk9PVwiJlwiIHx8ICBldmVudC5rZXk9PVwiX1wifHwgZXZlbnQua2V5PT1cIi1cIiB8fCBldmVudC5rZXk9PVwiI1wiXHJcbiAgICAgICAgICB8fCBldmVudC5rZXk9PVwiwrpcIiAgfHwgIGV2ZW50LmtleT09XCIkXCIgfHwgZXZlbnQua2V5PT1cIihcIiB8fCBldmVudC5rZXk9PVwiKVwiIHx8IGV2ZW50LmtleT09XCIlXCIgfHwgZXZlbnQua2V5PT0nICdcclxuICAgICAgICAgIHx8IGV2ZW50LmtleT09JzonICB8fGV2ZW50LmtleT09Jy8nfHwgZXZlbnQua2V5Q29kZT09ODM2NCB8fCAgZXZlbnQua2V5Q29kZT09MTY1IHx8ZXZlbnQua2V5Q29kZT09MTYzIFxyXG4gICAgICAgICAgfHwgZXZlbnQua2V5Q29kZSA9PSA4IHx8ICBldmVudC5rZXlDb2RlID09IDMyICB8fCBldmVudC5rZXlDb2RlID09IDQ2ICl7XHJcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICB9ICAgICAgICBcclxuICAgICAgICByZXR1cm4gZmFsc2U7ICAgICAgXHJcbiAgICAgIH1cclxuXHJcbiAgICAgIC8qKlxyXG4gICAgICogQGRlc2NyaXB0aW9uIFBlcm1pdGUgKDAtOSBhLXogQS1aIMOxw5EgLi1fKSBxdWUgc2UgZXNjcmliYW4gIGVuIGVsIGlucHV0IChVc2FyIGVuIGtleXByZXNzKVxyXG4gICAgICogQHBhcmFtIGV2ZW50IEV2ZW50byBkZWwgdGVjbGFkb1xyXG4gICAgICogQHJldHVybiBib29sZWFuXHJcbiAgICAgKiBAZGF0ZSAxNC0wNS0yMDIyXHJcbiAgICAgKi9cclxuICAgICAgIHB1YmxpYyB0eXBlQ29kZShldmVudD86IGFueSk6IGJvb2xlYW4ge1xyXG4gICAgICAgIGlmICgoZXZlbnQua2V5Pj0nYScgICYmIGV2ZW50LmtleTw9J3onKSB8fCAoZXZlbnQua2V5Pj0nQScgJiYgZXZlbnQua2V5PD0nWicpICB8fCBldmVudC5rZXk9PVwiw7FcIiB8fCBldmVudC5rZXk9PVwiw5FcIiBcclxuICAgICAgICAgIHx8aXNOYU4oK2V2ZW50LmtleSkgfHwgZXZlbnQua2V5PT1cIi5cIiB8fCAgZXZlbnQua2V5PT1cIl9cIiB8fCBldmVudC5rZXk9PVwiLVwiIHx8IGV2ZW50LmtleUNvZGUgPT0gOCB8fCAgZXZlbnQua2V5Q29kZSA9PSAzMiAgfHwgZXZlbnQua2V5Q29kZSA9PSA0NiApe1xyXG4gICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgfSAgICAgICAgXHJcbiAgICAgICAgcmV0dXJuIGZhbHNlOyAgICAgIFxyXG4gICAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gQWJyZSBlbCBkaWFsb2cgZGUgbGFzIGNvbXVuaWRhZGVzXHJcbiAgICAgKiBAcmV0dXJuIFByb21pc2U8TUNvbXVuaWRhZD5cclxuICAgICAqIEBhdXRob3IgTWlndWVsIFJhbcOtcmV6XHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBhc3luYyBvcGVuRGlhbG9nVW5pZGFkZXNUcmlidXRhcmlhcygpOiBQcm9taXNlPGFueT4ge1xyXG4gICAgICBsZXQgdWRUcmlidXRhcmlhczogTVVuaWRhZFRyaWJ1dGFyaWFbXSA9IGF3YWl0IHRoaXMuZ2V0VW5pZGFkZXNUcmlidXRhcmlhcygpLnRvUHJvbWlzZSgpO1xyXG4gICAgICBsZXQgZGlhbG9nUmVmID0gdGhpcy5kaWFsb2cub3BlbihDYXRhbG9nb0NvbXBvbmVudCwge1xyXG4gICAgICAgIGRhdGE6IHtcclxuICAgICAgICAgIGNvbHVtbnM6IFsnYcOxbycsICducm9fZGVjcmV0bycsICdmZWNoYV9kZWNyZXRvJywgJ2VudHJhZGFfdmlkZW5jaWEnLCAncHVibGljYWNpb25fZ2FjZXRhJywgJ25yb19nYWNldGEnLCAndmFsb3J1dCddLFxyXG4gICAgICAgICAgdGl0bGU6ICdDYXTDoWxvZ28gZGUgVW5pZGFkZXMgVHJpYnV0YXJpYXMnLFxyXG4gICAgICAgICAgZGF0YVNvdXJjZTogdWRUcmlidXRhcmlhc1xyXG4gICAgICAgIH0gYXMgSUNhdGFsb2dvLFxyXG4gICAgICAgIHdpZHRoOiAnMTAwMHgnLFxyXG4gICAgICAgIG1heEhlaWdodDogJzkwdmgnXHJcbiAgICAgIH0pO1xyXG4gICAgICByZXR1cm4gZGlhbG9nUmVmLmFmdGVyQ2xvc2VkKCkudG9Qcm9taXNlKCk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gT2J0aWVuZSBsYXMgdW5pZGFkZXMgdHJpYnV0YXJpYXNcclxuICAgICAqIEByZXR1cm4gT2JzZXJ2YWJsZTxhbnk+XHJcbiAgICAgKiBAYXV0aG9yIE1pZ3VlbCBSYW3DrXJlelxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgZ2V0VW5pZGFkZXNUcmlidXRhcmlhcygpOiBPYnNlcnZhYmxlPE1VbmlkYWRUcmlidXRhcmlhW10+IHtcclxuICAgICAgY29uc3QgcmVxdWVzdDogSVJlcXVlc3QgPSB7XHJcbiAgICAgICAgb3BlcmFjaW9uOiAnb2J0ZW5lckRhdGEnLFxyXG4gICAgICAgIHNpZ2VzcF9jb25leGlvbjoge1xyXG4gICAgICAgICAgc2Vydmlkb3I6IHRoaXMuVVJMLFxyXG4gICAgICAgICAgdXN1YXJpbzogdGhpcy51c3VhcmlvQWN0aXZvLmdldEludGVyZmFjZSgpXHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiB0aGlzLmh0dHAucG9zdDxNVW5pZGFkVHJpYnV0YXJpYVtdPihgJHt0aGlzLlVSTH0vZGFvL2NmZy91bmR0cmlidXRhcmlhX2Rhby5waHBgLCByZXF1ZXN0KS5waXBlKFxyXG4gICAgICAgIHJldHJ5KDMpLFxyXG4gICAgICAgIGNhdGNoRXJyb3IodGhpcy5oYW5kbGVyRXJyb3IpLFxyXG4gICAgICAgIG1hcCgocmVzcDogYW55W10pID0+IHJlc3AubWFwKGVsZW1lbnQgPT4gbmV3IE1VbmlkYWRUcmlidXRhcmlhKGVsZW1lbnQpKSlcclxuICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEBkZXNjcmlwdGlvbiBBYnJlIHVuYSBtb2RhbCBnw6luZXJpY2FcclxuICAgICAqIEBwYXJhbSBjb2x1bW5zIENvbHVtbmFzIHF1ZSB2YSBhIHRlbmVyIGxhIHRhYmxhXHJcbiAgICAgKiBAcGFyYW0gdGl0bGUgVMOtdHVsbyBkZWwgZGlhbG9nXHJcbiAgICAgKiBAcGFyYW0gZGF0YVNvdXJjZSBEYXRhIHF1ZSBzZSB2YSBhIG1vc3RyYXIgZW4gbGEgdGFibGFcclxuICAgICAqIEByZXR1cm4gUHJvbWlzZTxhbnk+XHJcbiAgICAgKiBAYXV0aG9yIE1pZ3VlbCBSYW3DrXJlelxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgYXN5bmMgb3BlbkNhdGFsb2dvR2VuZXJpY28oXHJcbiAgICAgIGNvbHVtbnM6IHN0cmluZ1tdLCBcclxuICAgICAgdGl0bGU6IHN0cmluZywgXHJcbiAgICAgIGRhdGFTb3VyY2U6IGFueVtdLCBcclxuICAgICAgY29sdW1uTmFtZXM6IHN0cmluZ1tdID0gbnVsbCwgXHJcbiAgICAgIHdpZHRoOiBzdHJpbmcgPSAnMTAwMHB4JyxcclxuICAgICAgb3B0aW9uczoge1xyXG4gICAgICAgIGhhc0JhY2tkcm9wPzogYm9vbGVhbixcclxuICAgICAgICBkaXNhYmxlQ2xvc2U/OiBib29sZWFuXHJcbiAgICAgIH0gPSB7ZGlzYWJsZUNsb3NlOiBmYWxzZSwgaGFzQmFja2Ryb3A6IGZhbHNlfVxyXG4gICAgKTogUHJvbWlzZTxhbnk+IHtcclxuICAgICAgbGV0IGRpYWxvZ1JlZiA9IHRoaXMuZGlhbG9nLm9wZW4oQ2F0YWxvZ29Db21wb25lbnQsIHtcclxuICAgICAgICBkYXRhOiB7XHJcbiAgICAgICAgICBjb2x1bW5zLFxyXG4gICAgICAgICAgdGl0bGUsXHJcbiAgICAgICAgICBkYXRhU291cmNlLFxyXG4gICAgICAgICAgY29sdW1uTmFtZXNcclxuICAgICAgICB9IGFzIElDYXRhbG9nbyxcclxuICAgICAgICB3aWR0aDogd2lkdGgsXHJcbiAgICAgICAgbWF4SGVpZ2h0OiAnOTB2aCcsXHJcbiAgICAgICAgaGFzQmFja2Ryb3A6IG9wdGlvbnMuaGFzQmFja2Ryb3AgPyBvcHRpb25zLmhhc0JhY2tkcm9wIDogZmFsc2UsXHJcbiAgICAgICAgZGlzYWJsZUNsb3NlOiBvcHRpb25zLmRpc2FibGVDbG9zZSA/IG9wdGlvbnMuZGlzYWJsZUNsb3NlIDogZmFsc2UsXHJcbiAgICAgIH0pO1xyXG4gICAgICByZXR1cm4gZGlhbG9nUmVmLmFmdGVyQ2xvc2VkKCkudG9Qcm9taXNlKCk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gQWJyZSB1bmEgbW9kYWwgZ8OpbmVyaWNhIGNvbiAyIGlucHV0c1xyXG4gICAgICogQHBhcmFtIGNvbHVtbnMgQ29sdW1uYXMgcXVlIHZhIGEgdGVuZXIgbGEgdGFibGFcclxuICAgICAqIEBwYXJhbSB0aXRsZSBUw610dWxvIGRlbCBkaWFsb2dcclxuICAgICAqIEBwYXJhbSBkYXRhU291cmNlIERhdGEgcXVlIHNlIHZhIGEgbW9zdHJhciBlbiBsYSB0YWJsYVxyXG4gICAgICogQHJldHVybiBQcm9taXNlPGFueT5cclxuICAgICAqIEBhdXRob3IgQ2FybG9zIEFsYm9ybm96XHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBhc3luYyBvcGVuQ2F0YWxvZ29Eb3NJbnB1dHMoXHJcbiAgICAgIGNvbHVtbnM6IHN0cmluZ1tdLFxyXG4gICAgICB0aXRsZTogc3RyaW5nLCBcclxuICAgICAgZGF0YVNvdXJjZTogYW55W10sIFxyXG4gICAgICBmaWx0ZXJEYXRhOiBmaWx0ZXJEYXRhW10sXHJcbiAgICAgIGNvbHVtbk5hbWVzOiBzdHJpbmdbXSA9IG51bGwsXHJcbiAgICAgIHdpZHRoOiBzdHJpbmcgPSBcIjEwMDBweFwiXHJcbiAgICApOiBQcm9taXNlPGFueT4ge1xyXG4gICAgICBsZXQgZGlhbG9nUmVmID0gdGhpcy5kaWFsb2cub3BlbihDYXRhbG9nb0RvYmxlSW5wdXRDb21wb25lbnQsIHtcclxuICAgICAgICBkYXRhOiB7XHJcbiAgICAgICAgICBjb2x1bW5zLFxyXG4gICAgICAgICAgdGl0bGUsXHJcbiAgICAgICAgICBkYXRhU291cmNlLFxyXG4gICAgICAgICAgY29sdW1uTmFtZXMsXHJcbiAgICAgICAgICBmaWx0ZXJEYXRhXHJcbiAgICAgICAgfSBhcyBJQ2F0YWxvZ28sXHJcbiAgICAgICAgd2lkdGg6IHdpZHRoLFxyXG4gICAgICAgIG1heEhlaWdodDogJzkwdmgnXHJcbiAgICAgIH0pO1xyXG4gICAgICByZXR1cm4gZGlhbG9nUmVmLmFmdGVyQ2xvc2VkKCkudG9Qcm9taXNlKCk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gQWJyZSBlbCBkaWFsb2cgZGUgbGFzIGNvbXVuaWRhZGVzXHJcbiAgICAgKiBAcmV0dXJuIFByb21pc2U8TUNvbXVuaWRhZD5cclxuICAgICAqIEBhdXRob3IgTWlndWVsIFJhbcOtcmV6XHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBhc3luYyBvcGVuRGlhbG9nQ29tdW5pZGFkKCk6IFByb21pc2U8TUNvbXVuaWRhZD4ge1xyXG4gICAgICBsZXQgY29tdW5pZGFkZXM6IE1Db211bmlkYWRbXSA9IGF3YWl0IHRoaXMuZ2V0Q29tdW5pZGFkZXMoKS50b1Byb21pc2UoKTtcclxuICAgICAgbGV0IGRpYWxvZ1JlZiA9IHRoaXMuZGlhbG9nLm9wZW4oQ2F0YWxvZ29Db21wb25lbnQsIHtcclxuICAgICAgICBkYXRhOiB7XHJcbiAgICAgICAgICBjb2x1bW5zOiBbJ3ByZWZpam8nLCAncGFpcycsICdlc3RhZG8nLCAnbXVuaWNpcGlvJywgJ3BhcnJvcXVpYScsICdjb2RpZ28nLCAnY29tdW5pZGFkJ10sXHJcbiAgICAgICAgICB0aXRsZTogJ0NhdMOhbG9nbyBkZSBDb211bmlkYWRlcycsXHJcbiAgICAgICAgICBkYXRhU291cmNlOiBjb211bmlkYWRlc1xyXG4gICAgICAgIH0gYXMgSUNhdGFsb2dvLFxyXG4gICAgICAgIHdpZHRoOiAnMTAwMHB4JyxcclxuICAgICAgICBtYXhIZWlnaHQ6ICc5MHZoJ1xyXG4gICAgICB9KTtcclxuICAgICAgcmV0dXJuIGRpYWxvZ1JlZi5hZnRlckNsb3NlZCgpLnRvUHJvbWlzZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQGRlc2NyaXB0aW9uIE9idGllbmUgbGFzIGNvbXVuaWRhZGVzXHJcbiAgICAgKiBAcmV0dXJuIE9ic2VydmFibGU8TUNvbXVuaWRhZFtdPlxyXG4gICAgICogQGF1dGhvciBNaWd1ZWwgUmFtw61yZXpcclxuICAgICAqL1xyXG4gICAgcHVibGljIGdldENvbXVuaWRhZGVzKCk6IE9ic2VydmFibGU8TUNvbXVuaWRhZFtdPiB7XHJcbiAgICAgIGNvbnN0IHJlcXVlc3Q6IElSZXF1ZXN0ID0ge1xyXG4gICAgICAgIG9wZXJhY2lvbjogJ29idGVuZXJEYXRhJyxcclxuICAgICAgICBzaWdlc3BfY29uZXhpb246IHtcclxuICAgICAgICAgIHNlcnZpZG9yOiB0aGlzLlVSTCxcclxuICAgICAgICAgIHVzdWFyaW86IHRoaXMudXN1YXJpb0FjdGl2by5nZXRJbnRlcmZhY2UoKVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gdGhpcy5odHRwLnBvc3Q8TUNvbXVuaWRhZFtdPihgJHt0aGlzLlVSTH0vZGFvL2NmZy9jb211bmlkYWRlc19kYW8ucGhwYCwgcmVxdWVzdCkucGlwZSggICAgIFxyXG4gICAgICAgIG1hcCgocmVzcDogYW55W10pID0+IHJlc3AubWFwKGVsZW1lbnQgPT4gbmV3IE1Db211bmlkYWQoZWxlbWVudCkpKVxyXG4gICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQGRlc2NyaXB0aW9uIEFicmUgZWwgZGlhbG9nIGRlIGxhcyBsYXMgbW9uZWRhc1xyXG4gICAgICogQHJldHVybiBQcm9taXNlPE1Nb25lZGE+XHJcbiAgICAgKiBAYXV0aG9yIE1pZ3VlbCBSYW3DrXJlelxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgYXN5bmMgb3BlbkRpYWxvZ01vbmVkYXMoKTogUHJvbWlzZTxNTW9uZWRhPiB7XHJcbiAgICAgIGxldCBjb2luczogTU1vbmVkYVtdID0gYXdhaXQgdGhpcy5nZXRNb25lZGFzKCd0b2RhcycpLnRvUHJvbWlzZSgpO1xyXG4gICAgICBsZXQgZGlhbG9nUmVmID0gdGhpcy5kaWFsb2cub3BlbihDYXRhbG9nb0NvbXBvbmVudCwge1xyXG4gICAgICAgIGRhdGE6IHtcclxuICAgICAgICAgIGNvbHVtbnM6IFsnY29kaWdvJywgJ2Rlbm9taW5hY2lvbicsICdjb2RpZ29Jc28nLCAnc2ltYm9sbyddLFxyXG4gICAgICAgICAgdGl0bGU6ICdDYXTDoWxvZ28gZGUgTW9uZWRhcycsXHJcbiAgICAgICAgICBjb2x1bW5OYW1lczogWydjw7NkaWdvJywgJ2Rlbm9taW5hY2nDs24nLCAnaXNvJywgJ3NpbWJvbG8nXSxcclxuICAgICAgICAgIGRhdGFTb3VyY2U6IGNvaW5zXHJcbiAgICAgICAgfSBhcyBJQ2F0YWxvZ28sXHJcbiAgICAgICAgd2lkdGg6ICcxMDAwcHgnLFxyXG4gICAgICAgIG1heEhlaWdodDogJzkwdmgnXHJcbiAgICAgIH0pO1xyXG4gICAgICByZXR1cm4gZGlhbG9nUmVmLmFmdGVyQ2xvc2VkKCkudG9Qcm9taXNlKCk7XHJcbiAgICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEBkZXNjcmlwdGlvbiBPYnRpZW5lIGxhcyBtb25lZGFzXHJcbiAgICogQHJldHVybiBPYnNlcnZhYmxlPE1Nb25lZGFbXT5cclxuICAgKiBAYXV0aG9yIE1pZ3VlbCBSYW3DrXJlelxyXG4gICAqIGFjdHVhbGl6YWRvIDQtMTItMjAyMlxyXG4gICAqIEBwYXJhbSB0aXBvIDpzdHJpbmcgeyd0b2RhcycsJ3VubycsJ2FjdHVhbH1cclxuICAgKiBAcGFyYW0gaWQgOiBudW1iZXJcclxuICAgKiBAcmV0dXJucyBcclxuICAgKi8gXHJcbiAgICBcclxuICAgIFxyXG4gICAgcHVibGljIGdldE1vbmVkYXModGlwbzpzdHJpbmcsaWQ/Om51bWJlcik6IE9ic2VydmFibGU8TU1vbmVkYVtdPiB7ICAgICBcclxuICAgICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8TU1vbmVkYVtdPihgJHt0aGlzLlVSTH0vZGFvL2NmZy9tb25lZGFfZGFvLnBocD90aXBvPSR7dGlwb30maWQ9JHtpZH1gLFxyXG4gICAgICB7IGhlYWRlcnM6IHRoaXMuZ2V0SHR0cEhlYWRlcnMoKX0pLnBpcGUoICAgICAgXHJcbiAgICAgICAgbWFwKChyZXNwOiBhbnkpID0+IHJlc3AuZGF0YS5tYXAoZWxlbWVudCA9PiBuZXcgTU1vbmVkYShlbGVtZW50KSkpXHJcbiAgICAgICk7XHJcbiAgICB9XHJcblxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQERlc2NyaXB0aW9uOiBPYnRpZW5lIGxhIHRhc2EgZGUgY2FtYmlvIGFzb2NpYWRhcyBhIHVubyBvIHZhcmlhcyBtb25lZGFzXHJcbiAgICAgKiBAcGFyYW0gdGlwbyBzdHJpbmdcclxuICAgICAqIEBwYXJhbSBpZCBjb2RpZ28gbW9uZWRhXHJcbiAgICAgKiBAcmV0dXJucyBhcnJheS9udWxsXHJcbiAgICAgKiBAdGlwbzphbGwtPnRvZGFzLCAobW9uZWRhLT51bmEgbW9uZWRhIGlkLT5pZCBkZSBtb25lZGEpXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBnZXRDdXJyZW5jeUV4Y2hhbmdlUmF0ZSh0aXBvOiAnYWxsJ3wgJ21vbmVkYSc9IG51bGwsIGlkPzpudW1iZXIpOiBPYnNlcnZhYmxlPE1FeGNoYW5nZVJhdGVbXT4geyAgICAgXHJcbiAgICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PE1FeGNoYW5nZVJhdGVbXT4oYCR7dGhpcy5VUkx9L2Rhby9jZmcvdGFzYV9jYW1iaW9fZGFvLnBocD90aXBvPSR7dGlwb30maWQ9JHtpZH1gLFxyXG4gICAgICB7IGhlYWRlcnM6IHRoaXMuZ2V0SHR0cEhlYWRlcnMoKX0pLnBpcGUoICAgICAgICBcclxuICAgICAgICBtYXAoKHJlc3A6IGFueSkgPT4gcmVzcC5kYXRhLm1hcChlbGVtZW50ID0+IG5ldyBNRXhjaGFuZ2VSYXRlKGVsZW1lbnQpKSlcclxuICAgICAgKTtcclxuICAgIH1cclxuXHJcblxyXG5cclxuICBcclxuXHJcbiAgICAvKipcclxuICAgICAqIEBkZXNjcmlwdGlvbiBBYnJlIGVsIGRpYWxvZyBkZSBsYXMgbGFzIGN1ZW50YXMgY29udGFibGVzIChDdWVudGFzIEluc3RpdHVjaW9uYWxlcylcclxuICAgICAqIEByZXR1cm4gUHJvbWlzZTxNY3VlbnRhSW5zdGl0dWNpb25hbD5cclxuICAgICAqIEBhdXRob3IgTWlndWVsIFJhbcOtcmV6XHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBhc3luYyBvcGVuRGlhbG9nQ3VlbnRhc0luc3RpdHVjaW9uYWxlcyhpZEVudGVycHJpc2U6bnVtYmVyLCBwZXJpb2RvRmlzY2FsOm51bWJlcik6IFByb21pc2U8TUN1ZW50YUluc3RpdHVjaW9uYWw+IHtcclxuICAgICAgbGV0IGFjY291bnRzOiBNQ3VlbnRhSW5zdGl0dWNpb25hbFtdID0gYXdhaXQgdGhpcy5nZXRDdWVudGFzSW5zdGl0dWNpb25hbGVzKGlkRW50ZXJwcmlzZSwgcGVyaW9kb0Zpc2NhbCkudG9Qcm9taXNlKCk7XHJcbiAgICAgIGxldCBkaWFsb2dSZWYgPSB0aGlzLmRpYWxvZy5vcGVuKENhdGFsb2dvQ29tcG9uZW50LCB7XHJcbiAgICAgICAgZGF0YToge1xyXG4gICAgICAgICAgY29sdW1uczogWydjdWVudGEnLCAnZGVub21pbmFjaW9uJ10sXHJcbiAgICAgICAgICBjb2x1bW5OYW1lczogWydjdWVudGEnLCAnZGVub21pbmFjacOzbiddLFxyXG4gICAgICAgICAgdGl0bGU6ICdDYXTDoWxvZ28gZGUgUGxhbiBkZSBDdWVudGEgSW5zdGl0dWNpb25hbCcsXHJcbiAgICAgICAgICBkYXRhU291cmNlOiBhY2NvdW50c1xyXG4gICAgICAgIH0gYXMgSUNhdGFsb2dvLFxyXG4gICAgICAgIHdpZHRoOiAnMTAwMHB4JyxcclxuICAgICAgICBtYXhIZWlnaHQ6ICc5MHZoJ1xyXG4gICAgICB9KTtcclxuICAgICAgcmV0dXJuIGRpYWxvZ1JlZi5hZnRlckNsb3NlZCgpLnRvUHJvbWlzZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQGRlc2NyaXB0aW9uIE9idGllbmUgbGFzIGN1ZW50YXMgY29udGFibGVzIChDdWVudGFzIEluc3RpdHVjaW9uYWxlcylcclxuICAgICAqIEByZXR1cm4gT2JzZXJ2YWJsZTxNQ3VlbnRhSW5zdGl0dWNpb25hbFtdPlxyXG4gICAgICogQGF1dGhvciBNaWd1ZWwgUmFtw61yZXpcclxuICAgICAqL1xyXG4gICAgcHVibGljIGdldEN1ZW50YXNJbnN0aXR1Y2lvbmFsZXMoaWRFbnRlcnByaXNlOm51bWJlciwgcGVyaW9kb0Zpc2NhbDpudW1iZXIsIGludmVudG9yeT86IGJvb2xlYW4pOiBPYnNlcnZhYmxlPE1DdWVudGFJbnN0aXR1Y2lvbmFsW10+IHtcclxuICAgICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8TUN1ZW50YUluc3RpdHVjaW9uYWxbXT4oYCR7dGhpcy5VUkx9L2Rhby9zY2cvY3VlbnRhc19kYW8ucGhwP2U9JHtpZEVudGVycHJpc2V9JnBlcmlvZG89JHtwZXJpb2RvRmlzY2FsfSR7KGludmVudG9yeSk/ICcmaW52ZW50b3J5PXRydWUnIDogJyd9YCxcclxuICAgICAgeyBoZWFkZXJzOiB0aGlzLmdldEh0dHBIZWFkZXJzKCkgfSkucGlwZSggICAgICBcclxuICAgICAgICBtYXAoKHJlc3A6IGFueSkgPT4gcmVzcC5kYXRhLm1hcChlbGVtZW50ID0+IG5ldyBNQ3VlbnRhSW5zdGl0dWNpb25hbChlbGVtZW50KSkpXHJcbiAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gQWJyZSBlbCBkaWFsb2cgZGUgbGFzIGN1ZW50YXMgZGUgcHJlc3VwdWVzdG8gKFJlY3Vyc29zIHkgRWdyZXNvcylcclxuICAgICAqIEByZXR1cm4gUHJvbWlzZTxNQ3VlbnRhUHJlc3VwdWVzdG8+XHJcbiAgICAgKiBAYXV0aG9yIE1pZ3VlbCBSYW3DrXJlelxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgYXN5bmMgb3BlbkRpYWxvZ0N1ZW50YXNQcmVzdXB1ZXN0byhpZEVudGVycHJpc2U6bnVtYmVyLHBlcmlvZG9GaXNjYWw6bnVtYmVyKTogUHJvbWlzZTxNQ3VlbnRhUHJlc3VwdWVzdG8+IHtcclxuICAgICAgbGV0IGFjY291bnRzOiBNQ3VlbnRhUHJlc3VwdWVzdG9bXSA9IGF3YWl0IHRoaXMuZ2V0Q3VlbnRhc1ByZXN1cHVlc3RvKGlkRW50ZXJwcmlzZSxwZXJpb2RvRmlzY2FsKS50b1Byb21pc2UoKTtcclxuICAgICAgbGV0IGRpYWxvZ1JlZiA9IHRoaXMuZGlhbG9nLm9wZW4oQ2F0YWxvZ29Db21wb25lbnQsIHtcclxuICAgICAgICBkYXRhOiB7XHJcbiAgICAgICAgICBjb2x1bW5OYW1lczogWydjdWVudGEnLCAnZGVub21pbmFjacOzbiddLFxyXG4gICAgICAgICAgY29sdW1uczogWydjdWVudGEnLCAnZGVub21pbmFjaW9uJ10sXHJcbiAgICAgICAgICB0aXRsZTogJ0NhdMOhbG9nbyBkZSBDdWVudGFzIGRlIFByZXN1cHVlc3RvJyxcclxuICAgICAgICAgIGRhdGFTb3VyY2U6IGFjY291bnRzXHJcbiAgICAgICAgfSBhcyBJQ2F0YWxvZ28sXHJcbiAgICAgICAgd2lkdGg6ICcxMDAwcHgnLFxyXG4gICAgICAgIG1heEhlaWdodDogJzkwdmgnXHJcbiAgICAgIH0pO1xyXG4gICAgICByZXR1cm4gZGlhbG9nUmVmLmFmdGVyQ2xvc2VkKCkudG9Qcm9taXNlKCk7XHJcbiAgICAgXHJcbiAgICB9XHJcblxyXG4gICAvKiogICAgXHJcbiAgICAqIEBkZXNjcmlwdGlvbiBPYnRpZW5lIGxhcyBjdWVudGFzIGRlIHJlY3Vyc29zIHkgZWdyZXNvc1xyXG4gICAgKiBAcmV0dXJuIE9ic2VydmFibGU8TUN1ZW50YVByZXN1cHVlc3RvPlxyXG4gICAgKiBAYXV0aG9yIE1pZ3VlbCBSYW3DrXJleiAgICAgICAgIFxyXG4gICAgKiBAcGFyYW0gZmlsdGVyIHtudW1lcm8sc25vLEMsZWdyZXNvLGluZ3Jlc299XHJcbiAgICAqIEBwYXJhbSBpZEVudGVycHJpc2UgXHJcbiAgICAqIEBwYXJhbSBwZXJpZG9GaXNjYWwgXHJcbiAgICAqIEByZXR1cm5zIFxyXG4gICAgKi9cclxuICAgIHB1YmxpYyBnZXRDdWVudGFzUHJlc3VwdWVzdG8oaWRFbnRlcnByaXNlOm51bWJlcixwZXJpZG9GaXNjYWw6bnVtYmVyLGZpbHRlcjpzdHJpbmc9J2RlZmF1bHQnKTogT2JzZXJ2YWJsZTxNQ3VlbnRhUHJlc3VwdWVzdG9bXT4ge1xyXG4gICAgICByZXR1cm4gdGhpcy5odHRwLmdldDxNQ3VlbnRhUHJlc3VwdWVzdG8+KGAke3RoaXMuVVJMfS9kYW8vc3BnL3BsYW5fY3VlbnRhc19yZWN1cnNvc19lZ3Jlc29zX2Rhby5waHA/ZmlsdGVyPSR7ZmlsdGVyfSZlPSR7aWRFbnRlcnByaXNlfSZwZXI9JHtwZXJpZG9GaXNjYWx9YCxcclxuICAgICAgeyBoZWFkZXJzOiB0aGlzLmdldEh0dHBIZWFkZXJzKCkgfSkucGlwZSggbWFwKChyZXM6IGFueSkgPT4gcmVzLmRhdGEubWFwKGVsZW1lbnQgPT4gbmV3IE1DdWVudGFQcmVzdXB1ZXN0byhlbGVtZW50KSkpKTtcclxuICAgIH1cclxuXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gQWJyZSBlbCBjw6F0YWxvZ28gZGUgY3VlbnRhcyBkZSBsYSB0YWJsYSBcInNwZ19jdWVudGFzXCJcclxuICAgICAqIEByZXR1cm5zIFByb21pc2U8TUN1ZW50YUVncmVzb3M+XHJcbiAgICAgKiBAYXV0aG9yIENhcmxvcyBBbGJvcm5velxyXG4gICAgICogQHBhcmFtcyBwcmVzdXB1ZXN0bzogSW5kaWNhIHNpIHNlIGEgdHJhYmFqYXIgY29uIGVzdHJ1Y3R1cmEgZGUgcHJlc3VwdWVzdG8gbyBub1xyXG4gICAgICovXHJcbiAgICBwdWJsaWMgYXN5bmMgb3BlbkNhdGFsb2dvQ3VlbnRhc0VncmVzbyhpZEVudGVycHJpc2U6bnVtYmVyLCBwZXJpb2RvRmlzY2FsOm51bWJlcix0aXR1bG86IHN0cmluZywgcHJlc3VwdWVzdG86IGJvb2xlYW4gPSB0cnVlLGFuY2hvOiBzdHJpbmcgPSBcIjEwMDBweFwiKTogUHJvbWlzZTxNQ3VlbnRhRWdyZXNvcz57XHJcbiAgICAgIGxldCBjdWVudGFzOiBNQ3VlbnRhRWdyZXNvc1tdID0gW107XHJcbiAgICAgIGF3YWl0IHRoaXMuZ2V0RXhwZW5zZUFjY291bnRzKGlkRW50ZXJwcmlzZSxwZXJpb2RvRmlzY2FsKS50b1Byb21pc2UoKS50aGVuKHJlcyA9PiB7XHJcbiAgICAgICAgY3VlbnRhcyA9IHJlc1xyXG4gICAgICAgIGN1ZW50YXMgPSBjdWVudGFzLmZpbHRlcihlID0+IHtcclxuICAgICAgICAgIHJldHVybiBlLnN0YXR1cyA9PSBcIkNcIlxyXG4gICAgICAgIH0pLm1hcChlID0+IHtcclxuICAgICAgICAgIGVbJ3Byb3ZTdGF0dXMnXSA9IGUuc3RhdHVzID09IFwiQ1wiID8gXCJNb3ZpbWllbnRvc1wiIDogXCJUb3RhbGl6YWRvcmFcIlxyXG4gICAgICAgICAgcmV0dXJuIGU7XHJcbiAgICAgICAgfSlcclxuICAgICAgfSlcclxuICAgICAgaWYgKHByZXN1cHVlc3RvKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMub3BlbkNhdGFsb2dvRG9zSW5wdXRzKFxyXG4gICAgICAgICAgW1wiY3VlbnRhXCIsXCJkZW5vbWluYWNpb25cIixcImVzdHJ1Y3R1cmFcIixcInByb3ZTdGF0dXNcIl0sXHJcbiAgICAgICAgICB0aXR1bG8sXHJcbiAgICAgICAgICBjdWVudGFzLFxyXG4gICAgICAgICAgW3tcclxuICAgICAgICAgICAgcGxhY2Vob2xkZXI6IFwiQ3VlbnRhXCIsXHJcbiAgICAgICAgICAgIHByb3BlcnR5OiBcImN1ZW50YVwiXHJcbiAgICAgICAgICB9LCB7XHJcbiAgICAgICAgICAgIHBsYWNlaG9sZGVyOiBcIkVzdHJ1Y3R1cmFcIixcclxuICAgICAgICAgICAgcHJvcGVydHk6IFwiZXN0cnVjdHVyYVwiXHJcbiAgICAgICAgICB9XSxcclxuICAgICAgICAgIFtcIkN1ZW50YVwiLCBcIkRlbm9taW5hY2nDs25cIiwgXCJFc3RydWN0dXJhXCIsIFwiRXN0YWRvXCJdLFxyXG4gICAgICAgICAgYW5jaG9cclxuICAgICAgICApXHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgbGV0IGZpbHRlcmVkQWNjb3VudHM6IE1DdWVudGFFZ3Jlc29zW10gPSBbXTtcclxuICAgICAgICBjdWVudGFzLmZvckVhY2goYyA9PiB7XHJcbiAgICAgICAgICBpZiAoIWZpbHRlcmVkQWNjb3VudHMuZmluZChlID0+IGUuY3VlbnRhID09IGMuY3VlbnRhKSkge1xyXG4gICAgICAgICAgICBmaWx0ZXJlZEFjY291bnRzLnB1c2goYylcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KVxyXG4gICAgICAgIHJldHVybiB0aGlzLm9wZW5DYXRhbG9nb0dlbmVyaWNvKFxyXG4gICAgICAgICAgW1wiY3VlbnRhXCIsXCJkZW5vbWluYWNpb25cIixcInByb3ZTdGF0dXNcIl0sXHJcbiAgICAgICAgICB0aXR1bG8sXHJcbiAgICAgICAgICBmaWx0ZXJlZEFjY291bnRzLFxyXG4gICAgICAgICAgW1wiQ3VlbnRhXCIsIFwiRGVub21pbmFjacOzblwiLCBcIkVzdGFkb1wiXSxcclxuICAgICAgICAgIGFuY2hvXHJcbiAgICAgICAgKVxyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldEV4cGVuc2VBY2NvdW50cyhpZEVudGVycHJpc2U6bnVtYmVyLHBlcmlvZG9GaXNjYWw6bnVtYmVyLGVzdGF0dXM/OnN0cmluZyk6IE9ic2VydmFibGU8TUN1ZW50YUVncmVzb3NbXT57XHJcbiAgICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PE1DdWVudGFFZ3Jlc29zW10+KGAke3RoaXMuVVJMfS9kYW8vc3BnL2N1ZW50YXNfZWdyZXNvc19kYW8ucGhwP2U9JHtpZEVudGVycHJpc2V9JnBlcmlvZG89JHtwZXJpb2RvRmlzY2FsfSZlc3Q9JHtlc3RhdHVzfWAsXHJcbiAgICAgIHtoZWFkZXJzOiB0aGlzLmdldEh0dHBIZWFkZXJzKCl9KVxyXG4gICAgICAucGlwZShcclxuICAgICAgICBtYXAoKHJlczphbnkpID0+IHJlcy5kYXRhLm1hcChlbGVtZW50ID0+IG5ldyBNQ3VlbnRhRWdyZXNvcyhlbGVtZW50KSkpXHJcbiAgICAgIClcclxuICAgIH1cclxuXHJcblxyXG4gICBcclxuICAgIC8qKlxyXG4gICAgICogQGRlc2NyaXB0aW9uIEFicmUgZWwgY8OhdGFsb2dvIGRlIGN1ZW50YXMgZGUgbGEgdGFibGEgXCJzY2dfcGxhbl91bmljb19yZVwiXHJcbiAgICAgKiBAcmV0dXJucyBQcm9taXNlPE1DdWVudGFQcmVzdXB1ZXN0bz5cclxuICAgICAqIEBhdXRob3IgQ2FybG9zIEFsYm9ybm96XHJcbiAgICAgKiBAcGFyYW1zIGZpbHRybzogSW5kaWNhIGJham8gcXVlIHBhcmFtZXRyb3Mgc2UgdmEgYSBmaWx0cmFyIGVsIGNhdGFsb2dvXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBhc3luYyBvcGVuQ2F0YWxvZ29DdWVudGFzUHJlc3VzcHVlc3RvKCAgICAgIFxyXG4gICAgICB0aXR1bG86IHN0cmluZywgICBcclxuICAgICAgaWRFbnRlcnByaXNlOm51bWJlcixcclxuICAgICAgcGVyaW9kb0Zpc2NhbDpudW1iZXIsICAgXHJcbiAgICAgIGZpbHRybzogZmlsdHJvQ3VlbnRhc1ByZXN1cHVlc3RvID0gbnVsbCxcclxuICAgICAgYW5jaG86IHN0cmluZyA9ICcxMDAwcHgnLCAgICAgXHJcbiAgICApOiBQcm9taXNlPE1DdWVudGFQcmVzdXB1ZXN0bz4ge1xyXG4gICAgICBsZXQgY3VlbnRhczogTUN1ZW50YVByZXN1cHVlc3RvW10gPSBbXTtcclxuICAgICAgXHJcbiAgICAgIGF3YWl0IHRoaXMuZ2V0Q3VlbnRhc1ByZXN1cHVlc3RvKGlkRW50ZXJwcmlzZSxwZXJpb2RvRmlzY2FsKS50b1Byb21pc2UoKS50aGVuKChyZXMpID0+IHtcclxuICAgICAgICBjdWVudGFzID0gcmVzO1xyXG4gICAgICAgIGlmIChmaWx0cm8pIHtcclxuICAgICAgICAgIGlmIChmaWx0cm8uZXN0YWRvKSB7XHJcbiAgICAgICAgICAgIGN1ZW50YXMgPSBjdWVudGFzLmZpbHRlcihjID0+IHtcclxuICAgICAgICAgICAgICByZXR1cm4gYy5zdGF0dXMgPT0gZmlsdHJvLmVzdGFkb1xyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgaWYgKGZpbHRyby50aXBvKSB7XHJcbiAgICAgICAgICAgIGN1ZW50YXMgPSBjdWVudGFzLmZpbHRlcihjID0+IHtcclxuICAgICAgICAgICAgICByZXR1cm4gYy50aXBvID09IGZpbHRyby50aXBvXHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGN1ZW50YXMgPSBjdWVudGFzLm1hcChlID0+IHtcclxuICAgICAgICAgIGVbJ3Byb3ZTdGF0dXMnXSA9IGUuc3RhdHVzID09IFwiQ1wiID8gXCJNb3ZpbWllbnRvc1wiIDogXCJUb3RhbGl6YWRvcmFcIlxyXG4gICAgICAgICAgZVsncHJvdlR5cGUnXSA9IGUuc3RhdHVzID09IFwiUlwiID8gXCJSZWN1cnNvc1wiIDogXCJJbmdyZXNvc1wiXHJcbiAgICAgICAgICByZXR1cm4gZVxyXG4gICAgICAgIH0pXHJcbiAgICAgIH0pXHJcbiAgICAgIHJldHVybiB0aGlzLm9wZW5DYXRhbG9nb0dlbmVyaWNvKFxyXG4gICAgICAgIFtcImN1ZW50YVwiLFwiZGVub21pbmFjaW9uXCIsXCJwcm92U3RhdHVzXCIsXCJwcm92VHlwZVwiXSxcclxuICAgICAgICB0aXR1bG8sXHJcbiAgICAgICAgY3VlbnRhcyxcclxuICAgICAgICBbXCJDdWVudGFcIixcIkRlbm9taW5hY2nDs25cIixcIkVzdGFkb1wiLFwiVGlwb1wiXSxcclxuICAgICAgICBhbmNob1xyXG4gICAgICApXHJcbiAgICB9XHJcblxyXG5cclxuXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gQWJyZSBlbCBjw6F0YWxvZ28gZGUgY3VlbnRhcyBkZSBsYSB0YWJsYSBcInNwaV9jdWVudGFzXCJcclxuICAgICAqIEByZXR1cm5zIFByb21pc2U8TUN1ZW50YUluZ3Jlc29zPlxyXG4gICAgICogQGF1dGhvciBDYXJsb3MgQWxib3Jub3pcclxuICAgICAqIEBwYXJhbXMgcHJlc3VwdWVzdG86IEluZGljYSBzaSBzZSBhIHRyYWJhamFyIGNvbiBlc3RydWN0dXJhIGRlIHByZXN1cHVlc3RvIG8gbm9cclxuICAgICAqL1xyXG4gICAgcHVibGljIGFzeW5jIG9wZW5DYXRhbG9nb0N1ZW50YXNJbmdyZXNvKGlkRW50ZXJwcmlzZTpudW1iZXIscGVyaW9kb0Zpc2NhbDpudW1iZXIsbml2ZWw6bnVtYmVyLGlkRVA6bnVtYmVyLHRpdHVsbzogc3RyaW5nLGFuY2hvOiBzdHJpbmcgPSBcIjEwMDBweFwiLCBwcmVzdXB1ZXN0bzpib29sZWFuPWZhbHNlXHJcbiAgICApOiBQcm9taXNlPE1DdWVudGFJbmdyZXNvcz57XHJcbiAgICAgIGxldCBjdWVudGFzOiBNQ3VlbnRhSW5ncmVzb3NbXSA9IFtdO1xyXG4gICAgICBhd2FpdCB0aGlzLmdldEluY29tZUFjY291bnRzKCdkZWZhdWx0JyxpZEVudGVycHJpc2UscGVyaW9kb0Zpc2NhbCxuaXZlbCxpZEVQKS50b1Byb21pc2UoKS50aGVuKChyZXM6IElSZXNwb25zZSkgPT4ge1xyXG4gICAgICAgIGN1ZW50YXMgPSByZXMuZGF0YVxyXG4gICAgICAgIGN1ZW50YXMgPSBjdWVudGFzLmZpbHRlcihlID0+IHtcclxuICAgICAgICAgIHJldHVybiBlLmVzdGFkbyA9PSBcIkNcIlxyXG4gICAgICAgIH0pLm1hcChlID0+IHtcclxuICAgICAgICAgIGVbJ3Byb3ZTdGF0dXMnXSA9IGUuZXN0YWRvID09IFwiQ1wiID8gXCJNb3ZpbWllbnRvc1wiIDogXCJUb3RhbGl6YWRvcmFcIlxyXG4gICAgICAgICAgcmV0dXJuIGU7XHJcbiAgICAgICAgfSlcclxuICAgICAgfSlcclxuICAgICAgaWYgKHByZXN1cHVlc3RvKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMub3BlbkNhdGFsb2dvRG9zSW5wdXRzKFxyXG4gICAgICAgICAgW1wiY3VlbnRhXCIsXCJkZW5vbWluYWNpb25cIixcImVzdHJ1Y3R1cmFcIixcInByb3ZTdGF0dXNcIl0sXHJcbiAgICAgICAgICB0aXR1bG8sXHJcbiAgICAgICAgICBjdWVudGFzLFxyXG4gICAgICAgICAgW3tcclxuICAgICAgICAgICAgcGxhY2Vob2xkZXI6IFwiQ3VlbnRhXCIsXHJcbiAgICAgICAgICAgIHByb3BlcnR5OiBcImN1ZW50YVwiXHJcbiAgICAgICAgICB9LCB7XHJcbiAgICAgICAgICAgIHBsYWNlaG9sZGVyOiBcIkVzdHJ1Y3R1cmFcIixcclxuICAgICAgICAgICAgcHJvcGVydHk6IFwiZXN0cnVjdHVyYVwiXHJcbiAgICAgICAgICB9XSxcclxuICAgICAgICAgIFtcIkN1ZW50YVwiLCBcIkRlbm9taW5hY2nDs25cIiwgXCJFc3RydWN0dXJhXCIsIFwiRXN0YWRvXCJdLFxyXG4gICAgICAgICAgYW5jaG9cclxuICAgICAgICApXHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgbGV0IGZpbHRlcmVkQWNjb3VudHM6IE1DdWVudGFJbmdyZXNvc1tdID0gW107XHJcbiAgICAgICAgY3VlbnRhcy5mb3JFYWNoKGMgPT4ge1xyXG4gICAgICAgICAgaWYgKCFmaWx0ZXJlZEFjY291bnRzLmZpbmQoZSA9PiBlLmN1ZW50YSA9PSBjLmN1ZW50YSkpIHtcclxuICAgICAgICAgICAgZmlsdGVyZWRBY2NvdW50cy5wdXNoKGMpXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSlcclxuICAgICAgICByZXR1cm4gdGhpcy5vcGVuQ2F0YWxvZ29HZW5lcmljbyhcclxuICAgICAgICAgIFtcImN1ZW50YVwiLFwiZGVub21pbmFjaW9uXCIsXCJwcm92U3RhdHVzXCJdLFxyXG4gICAgICAgICAgdGl0dWxvLFxyXG4gICAgICAgICAgZmlsdGVyZWRBY2NvdW50cyxcclxuICAgICAgICAgIFtcIkN1ZW50YVwiLCBcIkRlbm9taW5hY2nDs25cIiwgXCJFc3RhZG9cIl0sXHJcbiAgICAgICAgICBhbmNob1xyXG4gICAgICAgIClcclxuICAgICAgfVxyXG4gICAgfSAgICBcclxuXHJcbiAgICBwdWJsaWMgZ2V0VW5pZGFkQWRtaW5pc3RyYXRpdmEodGlwbz86c3RyaW5nLGlkRW50ZXJwcmlzZT86bnVtYmVyLHBlcmlvZG9GaXNjYWw/Om51bWJlcixpZFVuaWRhZE9yZ2FuaXphdGl2YT86bnVtYmVyKXtcclxuICAgICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQoYCR7dGhpcy5VUkx9L2Rhby9zcGcvdW5pZGFkX2FkbWluaXN0cmF0aXZhX2Rhby5waHA/dGlwbz0ke3RpcG99JmU9JHtpZEVudGVycHJpc2V9JnBlcmlvZG89JHtwZXJpb2RvRmlzY2FsfSZpZD0ke2lkVW5pZGFkT3JnYW5pemF0aXZhfWAsXHJcbiAgICAgIHtoZWFkZXJzOiB0aGlzLmdldEh0dHBIZWFkZXJzKCl9KVxyXG4gICAgICAucGlwZShcclxuICAgICAgICBtYXAoKHJlczphbnkpID0+IHtcclxuICAgICAgICAgIGlmIChyZXMuc3VjY2Vzcykge1xyXG4gICAgICAgICAgICByZXMuZGF0YSA9IHJlcy5kYXRhLm1hcChlID0+IG5ldyBNQWRtaW5pc3RyYXRpdmVVbml0KGUpKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHJldHVybiByZXM7XHJcbiAgICAgICAgfSkgXHJcbiAgICAgIClcclxuICAgIH1cclxuXHJcbiAgICAvKiogXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gT2J0aWVuZSBsb3MgY2FyZ29zIGRlIHNlcnZpY2lvc1xyXG4gICAgICogQHJldHVybiBPYnNlcnZhYmxlPElSZXNwb25zZT5cclxuICAgICAqIEBhdXRob3IgQ2FybG9zIEFsYm9ybm96XHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBnZXRTZXJ2aWNlQ2hhcmdlcyhzZXJ2aWNlSWQ6bnVtYmVyID0gbnVsbCk6IE9ic2VydmFibGU8SVJlc3BvbnNlPiB7XHJcbiAgICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PElSZXNwb25zZT4oYCR7dGhpcy5VUkx9L2Rhby9zb2Mvc2VydmljaW9fY2FyZ29fZGFvLnBocCR7XHJcbiAgICAgICAgc2VydmljZUlkID8gYD9zZXJ2aWNlX2lkPSR7c2VydmljZUlkfWAgOiAnJ1xyXG4gICAgICB9YCxcclxuICAgICAgeyBoZWFkZXJzOiB0aGlzLmdldEh0dHBIZWFkZXJzKCkgfSkucGlwZShcclxuICAgICAgICByZXRyeSgzKSxcclxuICAgICAgICBjYXRjaEVycm9yKHRoaXMuaGFuZGxlckVycm9yKSxcclxuICAgICAgICBtYXAoKHJlczogYW55KSA9PiB7XHJcbiAgICAgICAgICBpZiAocmVzLnN1Y2Nlc3MpIHtcclxuICAgICAgICAgICAgcmVzLmRhdGEgPSByZXMuZGF0YS5tYXAoZSA9PiBuZXcgTVNlcnZpY2VDaGFyZ2UoZSkpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgcmV0dXJuIHJlcztcclxuICAgICAgICB9KVxyXG4gICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgICAvKiogXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gT2J0aWVuZSBsb3MgcGFpc2VzXHJcbiAgICAgKiBAcmV0dXJuIE9ic2VydmFibGU8TUNvdW50cnk+XHJcbiAgICAgKiBAYXV0aG9yIENhcmxvcyBBbGJvcm5velxyXG4gICAgICogQG1vZGlmaWVkIDEwLTAxLTIwMjJcclxuICAgICAqIEBwYXJhbSBjb2RpZ286IENvZGlnbyBkZWwgcGFpc1xyXG5cclxuICAgICAqL1xyXG4gICAgICBwdWJsaWMgZ2V0Q291bnRyaWVzKGNvZGlnbz86c3RyaW5nKTogT2JzZXJ2YWJsZTxNQ291bnRyeVtdPiB7XHJcbiAgICAgICAgXHJcbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8TUNvdW50cnk+KGAke3RoaXMuVVJMfS9kYW8vY2ZnL3BhaXNlc19kYW8ucGhwP2NvZGlnbz0ke2NvZGlnb31gLFxyXG4gICAgICAgIHsgaGVhZGVyczogdGhpcy5nZXRIdHRwSGVhZGVycygpIH0pLnBpcGUoXHJcbiAgICAgICAgICByZXRyeSgzKSxcclxuICAgICAgICAgIGNhdGNoRXJyb3IodGhpcy5oYW5kbGVyRXJyb3IpLFxyXG4gICAgICAgICAgbWFwKChyZXM6IGFueSkgPT4gcmVzLmRhdGEubWFwKGUgPT4gbmV3IE1Db3VudHJ5KGUpKSlcclxuICAgICAgICApO1xyXG4gICAgICB9XHJcbiAgXHJcbiAgICAgIC8qKlxyXG4gICAgICAgKiBAZGVzY3JpcHRpb24gT2J0aWVuZSBsb3MgZXN0YWRvc1xyXG4gICAgICAgKiBAcmV0dXJuIE9ic2VydmFibGU8TVN0YXRlPlxyXG4gICAgICAgKiBAYXV0aG9yIENhcmxvcyBBbGJvcm5velxyXG4gICAgICAgKiBAbW9kaWZpY2FkbyA0LTEyLTIwMjJcclxuICAgICAgICogQHBhcmFtIGNvZGlnbzogQ29kaWdvIGRlbCBwYWlzXHJcbiAgICAgICAqL1xyXG4gICAgICBwdWJsaWMgZ2V0U3RhdGVzKGNvZGlnbz86c3RyaW5nKTogT2JzZXJ2YWJsZTxNU3RhdGVbXT4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PE1TdGF0ZT4oYCR7dGhpcy5VUkx9L2Rhby9jZmcvZXN0YWRvc19kYW8ucGhwP2NvZGlnbz0ke2NvZGlnb31gLFxyXG4gICAgICAgIHsgaGVhZGVyczogdGhpcy5nZXRIdHRwSGVhZGVycygpIH0pLnBpcGUoXHJcbiAgICAgICAgICByZXRyeSgzKSxcclxuICAgICAgICAgIGNhdGNoRXJyb3IodGhpcy5oYW5kbGVyRXJyb3IpLFxyXG4gICAgICAgICAgbWFwKChyZXM6IGFueSkgPT4gcmVzLmRhdGEubWFwKGUgPT4gbmV3IE1TdGF0ZShlKSkpXHJcbiAgICAgICAgKTtcclxuICAgICAgfVxyXG4gIFxyXG4gICAgICAvKipcclxuICAgICAgICogQGRlc2NyaXB0aW9uIE9idGllbmUgbG9zIG11bmljaXBpb3NcclxuICAgICAgICogQHJldHVybiBPYnNlcnZhYmxlPE1NdW5pY2lwYWxpdHk+XHJcbiAgICAgICAqIEBhdXRob3IgQ2FybG9zIEFsYm9ybm96XHJcbiAgICAgICAqIEBtb2RpZmljYWRvIDEwLTAxLTIwMjJcclxuICAgICAgICogQHBhcmFtIHBhaXM6IENvZGlnbyBkZWwgcGFpcyAsXHJcbiAgICAgICAqIEBwYXJhbSBlc3RhZG86IENvZGlnbyBkZWwgZXN0YWRvXHJcbiAgICAgICAqIEBhY3R1YWxpemFkbyA0LTEyLTIwMjJcclxuICAgICAgICovXHJcbiAgICAgIHB1YmxpYyBnZXRNdW5pY2lwYWxpdGllcyhwYWlzPzpzdHJpbmcsZXN0YWRvPzpzdHJpbmcpOiBPYnNlcnZhYmxlPE1NdW5pY2lwYWxpdHlbXT4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PE1NdW5pY2lwYWxpdHk+KGAke3RoaXMuVVJMfS9kYW8vY2ZnL211bmljaXBpb3NfZGFvLnBocD9wYWlzPSR7cGFpc30mZXN0YWRvPSR7ZXN0YWRvfWAsXHJcbiAgICAgICAgeyBoZWFkZXJzOiB0aGlzLmdldEh0dHBIZWFkZXJzKCkgfSkucGlwZShcclxuICAgICAgICAgIHJldHJ5KDMpLFxyXG4gICAgICAgICAgY2F0Y2hFcnJvcih0aGlzLmhhbmRsZXJFcnJvciksXHJcbiAgICAgICAgICBtYXAoKHJlczogYW55KSA9PiByZXMuZGF0YS5tYXAoZSA9PiBuZXcgTU11bmljaXBhbGl0eShlKSkpXHJcbiAgICAgICAgKTtcclxuICAgICAgfVxyXG4gIFxyXG4gICAgICAvKipcclxuICAgICAgICogQGRlc2NyaXB0aW9uIE9idGllbmUgbGFzIHBhcnJvcXVpYXMgXHJcbiAgICAgICAqIEByZXR1cm4gT2JzZXJ2YWJsZTxNUGFyaXNoPlxyXG4gICAgICAgKiBAYXV0aG9yIENhcmxvcyBBbGJvcm5velxyXG4gICAgICAgKiBAbW9kaWZpY2FkbyAxMC0wMS0yMDIyXHJcbiAgICAgICAqIEBwYXJhbSBwYWlzOiBDb2RpZ28gZGVsIHBhaXNcclxuICAgICAgICogQHBhcmFtIGVzdGFkbzogQ29kaWdvIGRlbCBlc3RhZG9cclxuICAgICAgICogQHBhcmFtIG11bmljaXBpbzpjb2RpZ28gTXVuaWNpcGlvXHJcbiAgICAgICAqIEBhY3R1YWxpemFkbyA0LTEyLTIwMjJcclxuXHJcbiAgICAgICAqL1xyXG4gICAgICBwdWJsaWMgZ2V0UGFyaXNoZXMocGFpcz86c3RyaW5nLGVzdGFkbz86c3RyaW5nLG11bmljaXBpbz86c3RyaW5nKTogT2JzZXJ2YWJsZTxNUGFyaXNoW10+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy5odHRwLmdldDxNUGFyaXNoPihgJHt0aGlzLlVSTH0vZGFvL2NmZy9wYXJyb3F1aWFzX2Rhby5waHA/cGFpcz0ke3BhaXN9JmVzdGFkbz0ke2VzdGFkb30mbXVuaWNpcGlvPSR7bXVuaWNpcGlvfWAsXHJcbiAgICAgICAgeyBoZWFkZXJzOiB0aGlzLmdldEh0dHBIZWFkZXJzKCkgfSkucGlwZShcclxuICAgICAgICAgIHJldHJ5KDMpLFxyXG4gICAgICAgICAgY2F0Y2hFcnJvcih0aGlzLmhhbmRsZXJFcnJvciksXHJcbiAgICAgICAgICBtYXAoKHJlczogYW55KSA9PiByZXMuZGF0YS5tYXAoZSA9PiBuZXcgTVBhcmlzaChlKSkpXHJcbiAgICAgICAgKTtcclxuICAgICAgfVxyXG4gIFxyXG4gICAgICAvKipcclxuICAgICAgICogQGRlc2NyaXB0aW9uIE9idGllbmUgbGFzIGNpdWRhZGVzXHJcbiAgICAgICAqIEByZXR1cm4gT2JzZXJ2YWJsZTxNUGFyaXNoPlxyXG4gICAgICAgKiBAYXV0aG9yIENhcmxvcyBBbGJvcm5velxyXG4gICAgICAgKiBAbW9kaWZpY2FkbyAxMC0wMS0yMDIyXHJcbiAgICAgICAqIEBwYXJhbSBwYWlzOiBDb2RpZ28gZGVsIHBhaXNcclxuICAgICAgICogQHBhcmFtIGVzdGFkbzogQ29kaWdvIGRlbCBlc3RhZG9cclxuXHJcblxyXG4gICAgICAgKi9cclxuICAgICAgICBwdWJsaWMgZ2V0Q2l0eShwYWlzPzpzdHJpbmcsZXN0YWRvPzpzdHJpbmcpOiBPYnNlcnZhYmxlPE1DaXR5W10+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy5odHRwLmdldDxNQ2l0eT4oYCR7dGhpcy5VUkx9L2Rhby9jZmcvY2l1ZGFkZXNfZGFvLnBocD9wYWlzPSR7cGFpc30mZXN0YWRvPSR7ZXN0YWRvfWAsXHJcbiAgICAgICAgeyBoZWFkZXJzOiB0aGlzLmdldEh0dHBIZWFkZXJzKCkgfSkucGlwZShcclxuICAgICAgICAgIHJldHJ5KDMpLFxyXG4gICAgICAgICAgY2F0Y2hFcnJvcih0aGlzLmhhbmRsZXJFcnJvciksXHJcbiAgICAgICAgICBtYXAoKHJlczogYW55KSA9PiByZXMuZGF0YS5tYXAoZSA9PiBuZXcgTUNpdHkoZSkpKVxyXG4gICAgICAgICk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIC8qKlxyXG4gICAgICAgKiBAZGVzY3JpcHRpb24gT2J0aWVuZSBsYXMgY2l1ZGFkZXNcclxuICAgICAgICogQHJldHVybiBPYnNlcnZhYmxlPE1QYXJpc2g+XHJcbiAgICAgICAqIEBhdXRob3IgRGltYWx5IENyZXNwb1xyXG4gICAgICAgKiBAbW9kaWZpY2FkbyAxMC0wMS0yMDIyXHJcbiAgICAgICAqIEBwYXJhbSBwYWlzOiBDb2RpZ28gZGVsIHBhaXNcclxuXHJcbiAgICAgICAqL1xyXG4gICAgICAgIHB1YmxpYyBnZXRDb21tdW5pdGllcyhwYWlzPzpzdHJpbmcsZXN0YWRvPzpzdHJpbmcsIG11bmljaXBpbz86c3RyaW5nLHBhcnJvcXVpYT86c3RyaW5nKTogT2JzZXJ2YWJsZTxNQ29tbXVuaXR5W10+IHtcclxuICAgICAgICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PE1Db21tdW5pdHk+KGAke3RoaXMuVVJMfS9kYW8vY2ZnL2NvbXVuaWRhZGVzX2Rhby5waHA/cGFpcz0ke3BhaXN9JmVzdGFkbz0ke2VzdGFkb30mbXVuaWNpcGlvPSR7bXVuaWNpcGlvfSZwYXJyb3F1aWE9JHtwYXJyb3F1aWF9YCxcclxuICAgICAgICAgIHsgaGVhZGVyczogdGhpcy5nZXRIdHRwSGVhZGVycygpIH0pLnBpcGUoXHJcbiAgICAgICAgICAgIHJldHJ5KDMpLFxyXG4gICAgICAgICAgICBjYXRjaEVycm9yKHRoaXMuaGFuZGxlckVycm9yKSxcclxuICAgICAgICAgICAgbWFwKChyZXM6IGFueSkgPT4gcmVzLmRhdGEubWFwKGUgPT4gbmV3IE1Db21tdW5pdHkoZSkpKVxyXG4gICAgICAgICAgKTtcclxuICAgICAgICB9XHJcbiAgXHJcbiAgICAvKipcclxuICAgICAqIEBkZXNjcmlwdGlvbiBPYnRpZW5lIGxvcyBzaXN0ZW1hcyBhY3RpdmFzXHJcbiAgICAgKiBAcmV0dXJuIE9ic2VydmFibGU8TVNpc3RlbWE+XHJcbiAgICAgKiBAYXV0aG9yIENhcmxvcyBBbGJvcm5velxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgZ2V0U2lzdGVtYXMoKTogT2JzZXJ2YWJsZTxNU2lzdGVtYVtdPiB7XHJcbiAgICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PE1TaXN0ZW1hPihgJHt0aGlzLlVSTH0vZGFvL3Nzcy9zaXN0ZW1hc19kYW8ucGhwYCxcclxuICAgICAgeyBoZWFkZXJzOiB0aGlzLmdldEh0dHBIZWFkZXJzKCkgfSkucGlwZShcclxuICAgICAgICByZXRyeSgzKSxcclxuICAgICAgICBjYXRjaEVycm9yKHRoaXMuaGFuZGxlckVycm9yKSxcclxuICAgICAgICBtYXAoKHJlczogYW55KSA9PiByZXMuZGF0YS5tYXAoZSA9PiBuZXcgTVNpc3RlbWEoZSkpKVxyXG4gICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQGRlc2NyaXB0aW9uIE9idGllbmUgbGEgbW9uZWRhIGFjdHVhbFxyXG4gICAgICogQHJldHVybiBPYnNlcnZhYmxlPElSZXNwb25zZT5cclxuICAgICAqIEBhdXRob3IgQ2FybG9zIEFsYm9ybm96XHJcbiAgICAgKiBAYWN0dWFsaXphZG86IDQtMTItMjAyMjJcclxuICAgICAqIEBwYXJhbXMgaWQ6IGlkIGRlIGxhIG1vbmVkYSxcclxuICAgICAqIEBwYXJhbXMgdGlwbzogdG9kYXMtPm9idGllbmUgdG9kYXMgbGFzIG1vbmVkYSwgKHVuby0+IG9idGllbmUgdW5hIG1vbmVkYSArIGlkKVxyXG4gICAgICogKG1vbjpmb3JtYXRvIHBhcmEgaW5wdXRDdXJyZW5jeSArIGlkIClcclxuICAgICAqL1xyXG4gICAgcHVibGljIGdldEN1cnJlbnRDdXJyZW5jeSh0aXBvOid0b2Rhcyd8J3Vubyd8J21vbic9bnVsbCxpZD86bnVtYmVyKTogT2JzZXJ2YWJsZTxJUmVzcG9uc2U+IHtcclxuICAgICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8SVJlc3BvbnNlPihgJHt0aGlzLlVSTH0vZGFvL2NmZy9tb25lZGFfZGFvLnBocD90aXBvPSR7dGlwb30maWQ9JHtpZH1gLFxyXG4gICAgICB7IGhlYWRlcnM6IHRoaXMuZ2V0SHR0cEhlYWRlcnMoKSB9KS5waXBlKCAgICAgICBcclxuICAgICAgICBtYXAoKHJlczogYW55KSA9PiB7XHJcbiAgICAgICAgICBpZiAocmVzLnN1Y2Nlc3MpIHtcclxuICAgICAgICAgICAgaWYodGlwbz09J3RvZGFzJyl7XHJcbiAgICAgICAgICAgICAgcmVzLmRhdGEgPSByZXMuZGF0YS5tYXAoZSA9PiBuZXcgTU1vbmVkYUNvbmZpZyhlKSk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgcmVzLmRhdGEgPSBuZXcgTU1vbmVkYUNvbmZpZyhyZXMuZGF0YSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICByZXR1cm4gcmVzO1xyXG4gICAgICAgIH0pXHJcbiAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICogQGRlc2NyaXB0aW9uIE9idGllbmUgbGEgbGluZWEgZW1wcmVzYVxyXG4gICAgICogQHJldHVybiBPYnNlcnZhYmxlPElSZXNwb25zZT5cclxuICAgICAqIEBhdXRob3IgRGltYWx5IENyZXNwb1xyXG4gICAgICogQGFjdHVhbGl6YWRvOiA1LTEyLTIwMjIyXHJcbiAgICAgKi9cclxuICAgICAgICAgcHVibGljIGdldEVudGVycHJpc2UodGlwbzonbGluZWEnIHwncHJvY2Vzbyd8J2RlZmF1bHQnPW51bGwgLGlkPzpudW1iZXIpOiBPYnNlcnZhYmxlPElSZXNwb25zZT4ge1xyXG4gICAgICAgICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8SVJlc3BvbnNlPihgJHt0aGlzLlVSTH0vZGFvL2NmZy9lbnRlcnByaXNlX2Rhby5waHA/dGlwbz0ke3RpcG99YCxcclxuICAgICAgICAgIHsgaGVhZGVyczogdGhpcy5nZXRIdHRwSGVhZGVycygpIH0pLnBpcGUoXHJcbiAgICAgICAgICAgIHJldHJ5KDMpLFxyXG4gICAgICAgICAgICBjYXRjaEVycm9yKHRoaXMuaGFuZGxlckVycm9yKSxcclxuICAgICAgICAgICAgbWFwKChyZXM6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICAgIGlmIChyZXMuc3VjY2Vzcykge1xyXG4gICAgICAgICAgICAgICAgcmVzLmRhdGEgPSByZXMuZGF0YS5tYXAoZSA9PiBuZXcgTUVudGVycHJpc2UoZSkpO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICByZXR1cm4gcmVzO1xyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgICAgKTtcclxuICAgICAgICB9XHJcbiAgICBcclxuXHJcbiAgICAvKipcclxuICAgICAqIEBkZXNjcmlwdGlvbiBPYnRpZW5lIGxvcyB0aXBvcyBkZSBvcmdhbml6YWNpb25cclxuICAgICAqIEByZXR1cm4gT2JzZXJ2YWJsZTxJUmVzcG9uc2U+XHJcbiAgICAgKiBAYXV0aG9yIENhcmxvcyBBbGJvcm5velxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgZ2V0T3JnYW5pemF0aW9uVHlwZXMoKTogT2JzZXJ2YWJsZTxJUmVzcG9uc2U+IHtcclxuICAgICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8SVJlc3BvbnNlPihgJHt0aGlzLlVSTH0vZGFvL3JwYy90aXBvX29yZ2FuaXphY2lvbl9kYW8ucGhwYCxcclxuICAgICAgeyBoZWFkZXJzOiB0aGlzLmdldEh0dHBIZWFkZXJzKCkgfSkucGlwZShcclxuICAgICAgICByZXRyeSgzKSxcclxuICAgICAgICBjYXRjaEVycm9yKHRoaXMuaGFuZGxlckVycm9yKSxcclxuICAgICAgICBtYXAoKHJlczogYW55KSA9PiB7XHJcbiAgICAgICAgICBpZiAocmVzLnN1Y2Nlc3MpIHtcclxuICAgICAgICAgICAgcmVzLmRhdGEgPSByZXMuZGF0YS5tYXAoZSA9PiBuZXcgTU9yZ2FuaXphdGlvblR5cGUoZSkpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgcmV0dXJuIHJlcztcclxuICAgICAgICB9KVxyXG4gICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQGRlc2NyaXB0aW9uIE9idGllbmUgbG9zIHRpcG9zIGRlIG9yZ2FuaXphY2lvblxyXG4gICAgICogQHJldHVybiBPYnNlcnZhYmxlPElSZXNwb25zZT5cclxuICAgICAqIEBhdXRob3IgQ2FybG9zIEFsYm9ybm96XHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBnZXRTcGVjaWFsdGllcygpOiBPYnNlcnZhYmxlPElSZXNwb25zZT4ge1xyXG4gICAgICByZXR1cm4gdGhpcy5odHRwLmdldDxJUmVzcG9uc2U+KGAke3RoaXMuVVJMfS9kYW8vcnBjL2VzcGVjaWFsaWRhZF9kYW8ucGhwYCxcclxuICAgICAgeyBoZWFkZXJzOiB0aGlzLmdldEh0dHBIZWFkZXJzKCkgfSkucGlwZShcclxuICAgICAgICByZXRyeSgzKSxcclxuICAgICAgICBjYXRjaEVycm9yKHRoaXMuaGFuZGxlckVycm9yKSxcclxuICAgICAgICBtYXAoKHJlczogYW55KSA9PiB7XHJcbiAgICAgICAgICBpZiAocmVzLnN1Y2Nlc3MpIHtcclxuICAgICAgICAgICAgcmVzLmRhdGEgPSByZXMuZGF0YS5tYXAoZSA9PiBuZXcgTVNwZWNpYWx0eShlKSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICByZXR1cm4gcmVzO1xyXG4gICAgICAgIH0pXHJcbiAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gT2J0aWVuZSBsb3MgZG9jdW1lbnRvc1xyXG4gICAgICogQHJldHVybiBPYnNlcnZhYmxlPElSZXNwb25zZT5cclxuICAgICAqIEBhdXRob3IgQ2FybG9zIEFsYm9ybm96XHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBnZXREb2N1bWVudHMoKTogT2JzZXJ2YWJsZTxJUmVzcG9uc2U+IHtcclxuICAgICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8SVJlc3BvbnNlPihgJHt0aGlzLlVSTH0vZGFvL3JwYy9kb2N1bWVudG9fZGFvLnBocGAsXHJcbiAgICAgIHsgaGVhZGVyczogdGhpcy5nZXRIdHRwSGVhZGVycygpIH0pLnBpcGUoXHJcbiAgICAgICAgcmV0cnkoMyksXHJcbiAgICAgICAgY2F0Y2hFcnJvcih0aGlzLmhhbmRsZXJFcnJvciksXHJcbiAgICAgICAgbWFwKChyZXM6IGFueSkgPT4ge1xyXG4gICAgICAgICAgaWYgKHJlcy5zdWNjZXNzKSB7XHJcbiAgICAgICAgICAgIHJlcy5kYXRhID0gcmVzLmRhdGEubWFwKGUgPT4gbmV3IE1Eb2N1bWVudChlKSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICByZXR1cm4gcmVzO1xyXG4gICAgICAgIH0pXHJcbiAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gT2J0aWVuZSBsYXMgY2xhc2lmaWNhY2lvbmVzXHJcbiAgICAgKiBAcmV0dXJuIE9ic2VydmFibGU8SVJlc3BvbnNlPlxyXG4gICAgICogQGF1dGhvciBDYXJsb3MgQWxib3Jub3pcclxuICAgICAqL1xyXG4gICAgcHVibGljIGdldENsYXNpZmljYXRpb25zKCk6IE9ic2VydmFibGU8SVJlc3BvbnNlPiB7XHJcbiAgICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PElSZXNwb25zZT4oYCR7dGhpcy5VUkx9L2Rhby9ycGMvY2xhc2lmaWNhY2lvbl9kYW8ucGhwYCxcclxuICAgICAgeyBoZWFkZXJzOiB0aGlzLmdldEh0dHBIZWFkZXJzKCkgfSkucGlwZShcclxuICAgICAgICByZXRyeSgzKSxcclxuICAgICAgICBjYXRjaEVycm9yKHRoaXMuaGFuZGxlckVycm9yKSxcclxuICAgICAgICBtYXAoKHJlczogYW55KSA9PiB7XHJcbiAgICAgICAgICBpZiAocmVzLnN1Y2Nlc3MpIHtcclxuICAgICAgICAgICAgcmVzLmRhdGEgPSByZXMuZGF0YS5tYXAoZSA9PiBuZXcgTUNsYXNpZmljYXRpb24oZSkpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgcmV0dXJuIHJlcztcclxuICAgICAgICB9KVxyXG4gICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQGRlc2NyaXB0aW9uIE9idGllbmUgZWwgcHJlZmlqbyBkZSBsb3MgdXN1YXJpb3NcclxuICAgICAqIEBwYXJhbSBwcm9jZWRlIERlIHF1ZSBtw7NkdWxvIHByb2NlZGVcclxuICAgICAqIEBwYXJhbSBjb2RzaXMgQ8OzZGlnbyBkZWwgc2lzdGVtYVxyXG4gICAgICogQHJldHVybiBPYnNlcnZhYmxlPE1Vc3VhcmlvUHJlZmlqb1tdPlxyXG4gICAgICogQGF1dGhvciBDYXJsb3MgQWxib3Jub3pcclxuICAgICAqL1xyXG4gICAgcHVibGljIGdldFVzZXJQcmVmaXgoZmlsdGVyOiAnZGV0YWlsJyA9IG51bGwsIGNvZGU6IHN0cmluZyA9IG51bGwsIGlkRW50ZXJwcmlzZTpudW1iZXIsIHBlcmlvZG86bnVtYmVyKTogT2JzZXJ2YWJsZTxJUmVzcG9uc2U+IHtcclxuICAgICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8SVJlc3BvbnNlPihgJHt0aGlzLlVSTH0vZGFvL2NmZy9jb250cm9sX251bWVyb19kYW8ucGhwJHtcclxuICAgICAgICBmaWx0ZXIgPyBgP2ZpbHRlcj0ke2ZpbHRlcn0mY29kZT0ke2NvZGV9JmU9JHtpZEVudGVycHJpc2V9JnBlcmlvZG89JHtwZXJpb2RvfWAgOiAnJ1xyXG4gICAgICB9YCxcclxuICAgICAgeyBoZWFkZXJzOiB0aGlzLmdldEh0dHBIZWFkZXJzKCkgfSkucGlwZShcclxuICAgICAgICByZXRyeSgzKSxcclxuICAgICAgICBjYXRjaEVycm9yKHRoaXMuaGFuZGxlckVycm9yKSxcclxuICAgICAgICBtYXAoKHJlczogYW55KSA9PiB7XHJcbiAgICAgICAgICBpZiAocmVzLnN1Y2Nlc3MpIHtcclxuICAgICAgICAgICAgcmVzLmRhdGEgPSByZXMuZGF0YS5tYXAoZSA9PiBuZXcgTVVzdWFyaW9QcmVmaWpvKGUpKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHJldHVybiByZXM7XHJcbiAgICAgICAgfSlcclxuICAgICAgKTtcclxuICAgIH1cclxuXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gT2J0aWVuZSBsb3MgcGVmaWpvXHJcbiAgICAgKiBAcGFyYW0gcHJvY2VkZSBEZSBxdWUgbcOzZHVsbyBwcm9jZWRlXHJcbiAgICAgKiBAcGFyYW0gY29kc2lzIEPDs2RpZ28gZGVsIHNpc3RlbWFcclxuICAgICAqIEByZXR1cm4gT2JzZXJ2YWJsZTxNVXN1YXJpb1ByZWZpam9bXT5cclxuICAgICAqIEBhdXRob3IgRGltYWx5Q3Jlc3BvIDE3LTEyLTIwMjJcclxuICAgICAqL1xyXG4gICAgcHVibGljIGdldFByZWZpeChmaWx0ZXI6ICdhbGwnIHwgJ29uZScgPSBudWxsLCBjb2RlOiBzdHJpbmcgPSBudWxsKTogT2JzZXJ2YWJsZTxJUmVzcG9uc2U+IHtcclxuXHJcbiAgICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PElSZXNwb25zZT4oYCR7dGhpcy5VUkx9L2Rhby9jZmcvY29udHJvbF9udW1lcm9fZGFvLnBocCR7XHJcbiAgICAgICAgZmlsdGVyID8gYD9maWx0ZXI9JHtmaWx0ZXJ9JmNvZGU9JHtjb2RlfWAgOiAnJ1xyXG4gICAgICB9YCxcclxuICAgICAgeyBoZWFkZXJzOiB0aGlzLmdldEh0dHBIZWFkZXJzKCkgfSkucGlwZShcclxuICAgICAgICByZXRyeSgzKSxcclxuICAgICAgICBjYXRjaEVycm9yKHRoaXMuaGFuZGxlckVycm9yKSxcclxuICAgICAgICBtYXAoKHJlczogYW55KSA9PiB7XHJcbiAgICAgICAgICBpZiAocmVzLnN1Y2Nlc3MpIHtcclxuICAgICAgICAgICAgcmVzLmRhdGEgPSByZXMuZGF0YS5tYXAoZSA9PiBuZXcgTVByZWZpam8oZSkpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgcmV0dXJuIHJlcztcclxuICAgICAgICB9KVxyXG4gICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQGRlc2NyaXB0aW9uIEFicmUgZWwgZGlhbG9nIHBhcmEgYnVzY2FyIGxvcyBwcm92ZWVkb3Jlc1xyXG4gICAgICogQHJldHVybiBQcm9taXNlPE1Qcm92ZWVkb3I+XHJcbiAgICAgKiBAYXV0aG9yIE1pZ3VlbCBSYW3DrXJlelxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgYXN5bmMgb3BlbkRpYWxvZ1Byb3ZlZWRvcmVzKGlkRW50ZXJwcmlzZTpudW1iZXIpOiBQcm9taXNlPE1Qcm92ZWVkb3I+IHtcclxuICAgICAgbGV0IHByb3ZlZWRvcmVzOiBNUHJvdmVlZG9yW10gPSBhd2FpdCB0aGlzLmdldFByb3ZlZWRvcmVzKGlkRW50ZXJwcmlzZSkudG9Qcm9taXNlKCk7XHJcbiAgICAgIGxldCBkaWFsb2dSZWYgPSB0aGlzLmRpYWxvZy5vcGVuKENhdGFsb2dvQ29tcG9uZW50LCB7XHJcbiAgICAgICAgZGF0YToge1xyXG4gICAgICAgICAgY29sdW1uczogWyd0aXBvJywgJ3JpZicsICdub21icmUnXSxcclxuICAgICAgICAgIHRpdGxlOiAnQ2F0w6Fsb2dvIGRlIFByb3ZlZWRvcmVzIHkgQmVuZWZpY2lhcmlvcycsXHJcbiAgICAgICAgICBkYXRhU291cmNlOiBwcm92ZWVkb3Jlc1xyXG4gICAgICAgIH0gYXMgSUNhdGFsb2dvLFxyXG4gICAgICAgIHdpZHRoOiAnNDUwcHgnLFxyXG4gICAgICAgIG1heEhlaWdodDogJzkwdmgnXHJcbiAgICAgIH0pO1xyXG5cclxuICAgICAgcmV0dXJuIGRpYWxvZ1JlZi5hZnRlckNsb3NlZCgpLnRvUHJvbWlzZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQGRlc2NyaXB0aW9uIE9idGllbmUgbG9zIHByb3ZlZWRvcmVzXHJcbiAgICAgKiBAcmV0dXJuIE9ic2VydmFibGU8TVByb3ZlZWRvcltdPlxyXG4gICAgICogQGF1dGhvciBNaWd1ZWwgUmFtw61yZXpcclxuICAgICAqL1xyXG4gICAgcHVibGljIGdldFByb3ZlZWRvcmVzKGlkRW50ZXJwcmlzZTpudW1iZXIpOiBPYnNlcnZhYmxlPE1Qcm92ZWVkb3JbXT4ge1xyXG4gICAgICBsZXQgcmVxdWVzdDogSVJlcXVlc3QgPSB7XHJcbiAgICAgICAgb3BlcmFjaW9uOiAnb2J0ZW5lckRhdGEnLFxyXG4gICAgICAgIHNpZ2VzcF9jb25leGlvbjoge1xyXG4gICAgICAgICAgc2Vydmlkb3I6IHRoaXMuVVJMLFxyXG4gICAgICAgICAgdXN1YXJpbzogdGhpcy51c3VhcmlvQWN0aXZvLmdldEludGVyZmFjZSgpXHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiB0aGlzLmh0dHAucG9zdDxNUHJvdmVlZG9yW10+KGAke3RoaXMuVVJMfS9kYW8vcnBjL3Byb3ZlZWRvcl9iZW5lZmljaWFyaW9fZGFvLnBocD9lPSR7aWRFbnRlcnByaXNlfWAsIHJlcXVlc3QpLnBpcGUoXHJcbiAgICAgICAgbWFwKChyZXM6IGFueSkgPT4gcmVzLm1hcChlbGVtZW50ID0+IG5ldyBNUHJvdmVlZG9yKGVsZW1lbnQpKSlcclxuICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEBkZXNjcmlwdGlvbiBPYnRpZW5lIGxvcyBwcm92ZWVkb3JlcyB5IGJlbmVmaWNpYXJpb3NcclxuICAgICAqIEBOb3RlIFNpIHF1aWVyZSBzb2xvIGxvcyBkYXRvcyBiYXNpY29zIHVzZSBsb3MgcGFyYW1ldHJvcyAoJ1MnLCdQJywnTicpXHJcbiAgICAgKiBAcmV0dXJuIE9ic2VydmFibGU8SVJlc3BvbnNlPlxyXG4gICAgICogQGF1dGhvciBDYXJsb3MgQWxib3Jub3pcclxuICAgICAqIEB0eXBlID17J1AnLCdCJywnUyd9XHJcbiAgICAgKiBAZGVzdGluYXRpb24gPXsnUCcsJ0InLCdDJywnQScsJ04nfeKJiHtQcm92ZWVkb3IsQmVuZWZpY2lhcmlvLENvbnRhdGlzdGEsQW1ib3MsTmluZ3Vub31cclxuICAgICAqIEBhY2NvdW50ID17J1MnLCdOJ30gcGFyYSB0cmFlciBsYXMgY3VlbnRhcyBiYW5jYXJpYXMgZGVsIHByb3ZlZWRvciBwb3IgZGVmZWN0byBlc3RhIGVuIE5cclxuICAgICAqIEBtb2RpZmljYWRvIDE3LTA3LTIwMjNcclxuICAgICAqL1xyXG5cclxuICAgIHB1YmxpYyBnZXRQcm92aWRlcnNBbmRCZW5lZmljaWFyaWVzKHR5cGU6IHN0cmluZyA9J2RlZmF1bHQnLCBpZEVudGVycHJpc2U6bnVtYmVyLGRlc3RpbmF0aW9uOnN0cmluZz1udWxsLCBhY2NvdW50OnN0cmluZz0nTicpOiBPYnNlcnZhYmxlPElSZXNwb25zZT4ge1xyXG4gICAgICByZXR1cm4gdGhpcy5odHRwLmdldDxJUmVzcG9uc2U+KGAke3RoaXMuVVJMfS9kYW8vcnBjL3Byb3ZlZWRvcl9iZW5lZmljaWFyaW9fZGFvLnBocD9wcm92aWRlcl90eXBlPSR7dHlwZX0mZT0ke2lkRW50ZXJwcmlzZX0mZGVzdGluYXRpb249JHtkZXN0aW5hdGlvbn0mYWNjb3VudD0ke2FjY291bnR9YCwgXHJcbiAgICAgIHsgaGVhZGVyczogdGhpcy5nZXRIdHRwSGVhZGVycygpIH0pLnBpcGUoXHJcbiAgICAgICAgbWFwKChyZXM6IGFueSkgPT4ge1xyXG4gICAgICAgICAgaWYgKHJlcy5zdWNjZXNzKSB7XHJcbiAgICAgICAgICAgIHJlcy5kYXRhID0gcmVzLmRhdGEubWFwKGUgPT4gbmV3IE1Qcm92aWRlckJlbmVmaWNpYXJ5KGUpKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHJldHVybiByZXM7XHJcbiAgICAgICAgfSlcclxuICAgICAgKTtcclxuICAgIH1cclxuXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gT2J0aWVuZSB1biBVc3VhcmlvIHNlZ3VuIHN1IElEXHJcbiAgICAgKiBAcmV0dXJuIE9ic2VydmFibGU8SVJlc3BvbnNlPlxyXG4gICAgICogQGF1dGhvciBDYXJsb3MgQWxib3Jub3pcclxuICAgICAqL1xyXG4gICAgcHVibGljIGdldFVzZXJCeUlkKGlkOiBudW1iZXIpOiBPYnNlcnZhYmxlPElSZXNwb25zZT4ge1xyXG4gICAgICByZXR1cm4gdGhpcy5odHRwLmdldDxJUmVzcG9uc2U+KGAke3RoaXMuVVJMfS9kYW8vc3NzL3VzdWFyaW9fZGFvLnBocD9pZD0ke2lkfWAsIFxyXG4gICAgICB7IGhlYWRlcnM6IHRoaXMuZ2V0SHR0cEhlYWRlcnMoKSB9KS5waXBlKFxyXG4gICAgICAgIHJldHJ5KDMpLFxyXG4gICAgICAgIGNhdGNoRXJyb3IodGhpcy5oYW5kbGVyRXJyb3IpLFxyXG4gICAgICAgIG1hcCgocmVzOiBhbnkpID0+IHtcclxuICAgICAgICAgIGlmIChyZXMuc3VjY2Vzcykge1xyXG4gICAgICAgICAgICByZXMuZGF0YSA9IG5ldyBNVXN1YXJpbyhyZXMuZGF0YSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICByZXR1cm4gcmVzO1xyXG4gICAgICAgIH0pXHJcbiAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gT2J0aWVuZSBsb3MgYmFuY29zXHJcbiAgICAgKiBAcmV0dXJuIE9ic2VydmFibGU8SVJlc3BvbnNlPlxyXG4gICAgICogQGF1dGhvciBDYXJsb3MgQWxib3Jub3pcclxuICAgICAqL1xyXG4gICAgcHVibGljIGdldEJhbmtzKGlkRW50ZXJwcmlzZT86bnVtYmVyKTogT2JzZXJ2YWJsZTxJUmVzcG9uc2U+IHtcclxuICAgICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8SVJlc3BvbnNlPihgJHt0aGlzLlVSTH0vZGFvL3NjYi9iYW5jb19kYW8ucGhwP2U9JHtpZEVudGVycHJpc2V9YCwgXHJcbiAgICAgIHsgaGVhZGVyczogdGhpcy5nZXRIdHRwSGVhZGVycygpIH0pLnBpcGUoXHJcbiAgICAgICAgcmV0cnkoMyksXHJcbiAgICAgICAgY2F0Y2hFcnJvcih0aGlzLmhhbmRsZXJFcnJvciksXHJcbiAgICAgICAgbWFwKChyZXM6IGFueSkgPT4ge1xyXG4gICAgICAgICAgaWYgKHJlcy5zdWNjZXNzKSB7XHJcbiAgICAgICAgICAgIHJlcy5kYXRhID0gcmVzLmRhdGEubWFwKGUgPT4gbmV3IE1CYW5rKGUpKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHJldHVybiByZXM7XHJcbiAgICAgICAgfSlcclxuICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEBkZXNjcmlwdGlvbiBPYnRpZW5lIGxvcyB0aXBvcyBkZSBjdWVudGEgYmFuY2FyaWFzXHJcbiAgICAgKiBAcmV0dXJuIE9ic2VydmFibGU8SVJlc3BvbnNlPlxyXG4gICAgICogQGF1dGhvciBDYXJsb3MgQWxib3Jub3pcclxuICAgICAqL1xyXG4gICAgcHVibGljIGdldEJhbmtBY2NvdW50VHlwZXMoKTogT2JzZXJ2YWJsZTxJUmVzcG9uc2U+IHtcclxuICAgICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8SVJlc3BvbnNlPihgJHt0aGlzLlVSTH0vZGFvL3NjYi9iYW5jb190aXBvX2N1ZW50YV9kYW8ucGhwYCwgXHJcbiAgICAgIHsgaGVhZGVyczogdGhpcy5nZXRIdHRwSGVhZGVycygpIH0pLnBpcGUoXHJcbiAgICAgICAgcmV0cnkoMyksXHJcbiAgICAgICAgY2F0Y2hFcnJvcih0aGlzLmhhbmRsZXJFcnJvciksXHJcbiAgICAgICAgbWFwKChyZXM6IGFueSkgPT4ge1xyXG4gICAgICAgICAgaWYgKHJlcy5zdWNjZXNzKSB7XHJcbiAgICAgICAgICAgIHJlcy5kYXRhID0gcmVzLmRhdGEubWFwKGUgPT4gbmV3IE1CYW5rQWNjb3VudFR5cGUoZSkpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgcmV0dXJuIHJlcztcclxuICAgICAgICB9KVxyXG4gICAgICApO1xyXG4gICAgfVxyXG5cclxuXHJcbiAgICAvKipcclxuICAgICAqIEBkZXNjcmlwdGlvbiBvYnRpZW5lIGxhcyBjdWVudGEgc2VndW4gZWwgaWRcclxuICAgICAqIEBwYXJhbSB0aXBvIHsnYmFuY28nLCAnZGVmYXVsdCd9XHJcbiAgICAgKiBAcGFyYW0gaWQgcGFyYSBsYSBvcGNpb24gYmFuY28gdXNhciBpZD1pZEJhbmNvLCBvcGNpb24gZGVmYXVsZiBpZD1pZEVudGVycHJpc2VcclxuICAgICAqIEByZXR1cm5zIFxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgZ2V0QWxsQmFua0FjY291bnQodGlwbzpzdHJpbmcsaWQ6bnVtYmVyKXsgICAgICAgIFxyXG4gICAgICByZXR1cm4gdGhpcy5odHRwLmdldChgJHt0aGlzLlVSTH0vZGFvL3NjYi9jdWVudGFfYmFuY29fZGFvLnBocD90aXBvPSR7dGlwb30mZT0ke2lkfWAsXHJcbiAgICAgIHtoZWFkZXJzOiB0aGlzLmdldEh0dHBIZWFkZXJzKCl9KVxyXG4gICAgICAucGlwZShcclxuICAgICAgICBtYXAoKHJlczphbnkpID0+IHtcclxuICAgICAgICAgIGlmIChyZXMuc3VjY2Vzcykge1xyXG4gICAgICAgICAgICByZXMuZGF0YSA9IHJlcy5kYXRhLm1hcChlbGVtZW50ID0+IG5ldyBNQ3VlbnRhQmFuY28oZWxlbWVudCkpO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgcmVzLmRhdGEgPSBbXTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHJldHVybiByZXNcclxuICAgICAgICB9KSBcclxuICAgICAgKVxyXG4gICAgfSBcclxuXHJcbiAgICAvKipcclxuICAgICAqIEBkZXNjcmlwdGlvbiBPYnRpZW5lIGxvcyBiYW5jb3Mgc2lnZWNvZlxyXG4gICAgICogQHJldHVybiBPYnNlcnZhYmxlPElSZXNwb25zZT5cclxuICAgICAqIEBhdXRob3IgQ2FybG9zIEFsYm9ybm96XHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBnZXRTaWdlY29mQmFua3MoKTogT2JzZXJ2YWJsZTxJUmVzcG9uc2U+IHtcclxuICAgICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8SVJlc3BvbnNlPihgJHt0aGlzLlVSTH0vZGFvL2NmZy9iYW5jb19zaWdlY29mX2Rhby5waHBgLCBcclxuICAgICAgeyBoZWFkZXJzOiB0aGlzLmdldEh0dHBIZWFkZXJzKCkgfSkucGlwZShcclxuICAgICAgICByZXRyeSgzKSxcclxuICAgICAgICBjYXRjaEVycm9yKHRoaXMuaGFuZGxlckVycm9yKSxcclxuICAgICAgICBtYXAoKHJlczogYW55KSA9PiB7XHJcbiAgICAgICAgICBpZiAocmVzLnN1Y2Nlc3MpIHtcclxuICAgICAgICAgICAgcmVzLmRhdGEgPSByZXMuZGF0YS5tYXAoZSA9PiBuZXcgTVNpZ2Vjb2ZCYW5rKGUpKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHJldHVybiByZXM7XHJcbiAgICAgICAgfSlcclxuICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEBkZXNjcmlwdGlvbiBPYnRpZW5lIGxhIGNvbmZpZ3VyYWNpb24gZGUgU09DXHJcbiAgICAgKiBAcmV0dXJuIE9ic2VydmFibGU8SVJlc3BvbnNlPlxyXG4gICAgICogQGF1dGhvciBDYXJsb3MgQWxib3Jub3pcclxuICAgICAqL1xyXG4gICAgcHVibGljIGdldENvbmZpZ1NPQyhpZEVudGVycHJpc2U6bnVtYmVyKTogT2JzZXJ2YWJsZTxJUmVzcG9uc2U+IHtcclxuICAgICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8SVJlc3BvbnNlPihgJHt0aGlzLlVSTH0vZGFvL3NvYy9jb25maWd1cmFjaW9uX2Rhby5waHA/ZT0ke2lkRW50ZXJwcmlzZX1gLCBcclxuICAgICAgeyBoZWFkZXJzOiB0aGlzLmdldEh0dHBIZWFkZXJzKCkgfSkucGlwZShcclxuICAgICAgICByZXRyeSgzKSxcclxuICAgICAgICBjYXRjaEVycm9yKHRoaXMuaGFuZGxlckVycm9yKSxcclxuICAgICAgICBtYXAoKHJlczogYW55KSA9PiB7XHJcbiAgICAgICAgICBpZiAocmVzLnN1Y2Nlc3MpIHtcclxuICAgICAgICAgICAgcmVzLmRhdGEgPSBuZXcgTUNvbmZpZ1NPQyhyZXMuZGF0YSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICByZXR1cm4gcmVzO1xyXG4gICAgICAgIH0pXHJcbiAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gT2J0aWVuZSBsb3MgdGlwb3MgZGUgZGVkdWNjaW9uXHJcbiAgICAgKiBAcmV0dXJuIE9ic2VydmFibGU8SVJlc3BvbnNlPlxyXG4gICAgICogQGF1dGhvciBDYXJsb3MgQWxib3Jub3pcclxuICAgICAqL1xyXG4gICAgcHVibGljIGdldERlZHVjdGlvblR5cGVzKCk6IE9ic2VydmFibGU8SVJlc3BvbnNlPiB7XHJcbiAgICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PElSZXNwb25zZT4oYCR7dGhpcy5VUkx9L2Rhby9zdGIvdGlwb19kZWR1Y2Npb25fZGFvLnBocGAsXHJcbiAgICAgIHsgaGVhZGVyczogdGhpcy5nZXRIdHRwSGVhZGVycygpIH0pLnBpcGUoXHJcbiAgICAgICAgcmV0cnkoMyksXHJcbiAgICAgICAgY2F0Y2hFcnJvcih0aGlzLmhhbmRsZXJFcnJvciksXHJcbiAgICAgICAgbWFwKChyZXM6IGFueSkgPT4ge1xyXG4gICAgICAgICAgaWYgKHJlcy5zdWNjZXNzKSB7XHJcbiAgICAgICAgICAgIHJlcy5kYXRhID0gcmVzLmRhdGEubWFwKGUgPT4gbmV3IE1EZWR1Y3Rpb25UeXBlKGUpKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHJldHVybiByZXM7XHJcbiAgICAgICAgfSlcclxuICAgICAgKTtcclxuICAgIH1cclxuXHJcblxyXG5cclxuICAgIHB1YmxpYyBnZXRJbmNvbWVBY2NvdW50cyh0aXBvOnN0cmluZyxpZEVudGVycHJpc2U6bnVtYmVyLHBlcmlvZG9GaXNjYWw6bnVtYmVyLG5pdmVsPTAsaWRFUD86bnVtYmVyLGVzdGF0dXM6c3RyaW5nPScnKTogT2JzZXJ2YWJsZTxhbnk+e1xyXG4gICAgICByZXR1cm4gdGhpcy5odHRwLmdldChgJHt0aGlzLlVSTH0vZGFvL3NwaS9jdWVudGFzX2luZ3Jlc29zX2Rhby5waHA/dGlwbz0ke3RpcG99JmU9JHtpZEVudGVycHJpc2V9JnBlcj0ke3BlcmlvZG9GaXNjYWx9Jm5pdj0ke25pdmVsfSZlcD0ke2lkRVB9JmVzdD0ke2VzdGF0dXN9YCxcclxuICAgICAgIHtoZWFkZXJzOiB0aGlzLmdldEh0dHBIZWFkZXJzKCl9KS5waXBlKFxyXG4gICAgICAgIG1hcCgocmVzOmFueSkgPT4ge1xyXG4gICAgICAgICAgaWYgKHJlcy5zdWNjZXNzKSB7XHJcbiAgICAgICAgICAgIHJlcy5kYXRhID0gcmVzLmRhdGEubWFwKGUgPT4gbmV3IE1DdWVudGFJbmdyZXNvcyhlKSlcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHJldHVybiByZXM7XHJcbiAgICAgICAgfSlcclxuICAgICAgKVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXRDaGFyZ2VzKGlkRW50ZXJwcmlzZTpudW1iZXIpe1xyXG5cclxuICAgICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8SVJlc3BvbnNlPihcclxuICAgICAgICBgJHt0aGlzLlVSTH0vZGFvL3N0Yi9jYXJnb3NfZGFvLnBocD9saW5lYT0ke2lkRW50ZXJwcmlzZX1gLCBcclxuICAgICAgICB7IGhlYWRlcnM6IHRoaXMuZ2V0SHR0cEhlYWRlcnMoKSB9XHJcbiAgICAgICkucGlwZShcclxuICAgICAgICBtYXAoKHJlczogSVJlc3BvbnNlKSA9PiB7XHJcbiAgICAgICAgICBpZiAocmVzLnN1Y2Nlc3MpIHtcclxuICAgICAgICAgICAgcmVzLmRhdGEgPSByZXMuZGF0YS5tYXAoZSA9PiBuZXcgTUNhcmdvKGUpKVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgcmV0dXJuIHJlcztcclxuICAgICAgICB9KVxyXG4gICAgICApXHJcbiAgXHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldERlZHVjdGlvbnMoaWRFbnRlcnByaXNlOm51bWJlcil7XHJcbiAgICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PElSZXNwb25zZT4oXHJcbiAgICAgICAgYCR7dGhpcy5VUkx9L2Rhby9zdGIvZGVkdWNjaW9uZXNfZGFvLnBocD9saW5lYT0ke2lkRW50ZXJwcmlzZX1gLCBcclxuICAgICAgICB7IGhlYWRlcnM6IHRoaXMuZ2V0SHR0cEhlYWRlcnMoKSB9XHJcbiAgICAgICkucGlwZShcclxuICAgICAgICBtYXAoKHJlczogSVJlc3BvbnNlKSA9PiB7XHJcbiAgICAgICAgICBpZiAocmVzLnN1Y2Nlc3MpIHtcclxuICAgICAgICAgICAgcmVzLmRhdGEgPSByZXMuZGF0YS5tYXAoZSA9PiBuZXcgTURlZHVjdGlvbihlKSlcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHJldHVybiByZXM7XHJcbiAgICAgICAgfSlcclxuICAgICAgKSAgXHJcbiAgICB9XHJcblxyXG4gICAgLyoqIFxyXG4gICAgICogQGRlc2NyaXB0aW9uIE9idGllbmUgbGEgbG9zIGRhdG9zIGRlIEVtcHJlc2FcclxuICAgICAqIEByZXR1cm4gT2JzZXJ2YWJsZTxJUmVzcG9uc2U+XHJcbiAgICAgKiBAYXV0aG9yIERpbWFseSBDcmVzcG9cclxuICAgICAqIFxyXG4gICAgICovXHJcbiAgICAgcHVibGljIGdldENvbXBhbnkodGlwbz86c3RyaW5nLGlkPzpudW1iZXIpOiBPYnNlcnZhYmxlPElSZXNwb25zZT4ge1xyXG4gICAgICByZXR1cm4gdGhpcy5odHRwLmdldDxJUmVzcG9uc2U+KGAke3RoaXMuVVJMfS9kYW8vY2ZnL2VtcHJlc2FzX2Rhby5waHA/dGlwbz0ke3RpcG99JmlkPSR7aWR9YCxcclxuICAgICAgeyBoZWFkZXJzOiB0aGlzLmdldEh0dHBIZWFkZXJzKCkgfSkucGlwZSggICAgICAgIFxyXG4gICAgICAgIG1hcCgocmVzOiBhbnkpID0+IHtcclxuICAgICAgICAgIGlmIChyZXMuc3VjY2Vzcykge1xyXG4gICAgICAgICAgICByZXMuZGF0YSA9IHJlcy5kYXRhLm1hcChlID0+IG5ldyBNRW1wcmVzYShlKSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICByZXR1cm4gcmVzO1xyXG4gICAgICAgIH0pXHJcbiAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgIC8qKiBcclxuICAgICAqIEBkZXNjcmlwdGlvbiBPYnRpZW5lIGxvcyB0aXBvcyBkZSBkb2N1bWVudG9zIHJlZ2lzdHJhZG9zIGVuIENYUFxyXG4gICAgICogQHJldHVybiBPYnNlcnZhYmxlPElSZXNwb25zZT5cclxuICAgICAqIEBhdXRob3IgRGltYWx5IENyZXNwb1xyXG4gICAgICogQGRhdGUgMjAtMDctMjAyMVxyXG4gICAgICovXHJcbiAgICAgIHB1YmxpYyBnZXRUaXBvc0RvY3VtZXRvcyhpZEVudGVycHJpc2U6bnVtYmVyKTogT2JzZXJ2YWJsZTxJUmVzcG9uc2U+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy5odHRwLmdldDxJUmVzcG9uc2U+KGAke3RoaXMuVVJMfS9kYW8vY3hwL3RpcG9fZG9jdW1lbnRvX2Rhby5waHA/b3BlcmFjaW9uPSR7J2J1c2Nhcid9Jmk9JHtpZEVudGVycHJpc2V9YCxcclxuICAgICAgICB7IGhlYWRlcnM6IHRoaXMuZ2V0SHR0cEhlYWRlcnMoKSB9KS5waXBlKFxyXG4gICAgICAgICAgcmV0cnkoMyksXHJcbiAgICAgICAgICBjYXRjaEVycm9yKHRoaXMuaGFuZGxlckVycm9yKSxcclxuICAgICAgICAgIG1hcCgocmVzOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgaWYgKHJlcy5zdWNjZXNzKSB7ICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICByZXMuZGF0YSA9IHJlcy5kYXRhLm1hcChlID0+IG5ldyBNVGlwb0RvY3VtZW50b0NYUChlKSk7ICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gcmVzO1xyXG4gICAgICAgICAgfSlcclxuICAgICAgICApO1xyXG4gICAgICB9XHJcblxyXG4gICAgIC8qKlxyXG4gICAgICAqIEBwYXJhbSBnZXQgdG9tYSBsb3MgdmFsb3JlczogWyBpZE9yZGVuQ29tcHJhICwncmVjZXBjaW9uJywnZXhpc3RlbicsJ2NvZGlnbycsICdvcmRlbmVzU09DJywgJ29wJywgJ2FydCcgXVxyXG4gICAgICAqIEBwYXJhbSBuIGNvZGlnbyBEb2N1bWVudG8gT3JkZW4sIHNlIHVzYSBwYXJhIG9idGVuZXIgbG9zIGRldGFsbGVzIGRlIGxhIG9yZGVuIGRlIGNvbXByYSwgZXMgb2JsaWdhdG9yaW8gYWwgY29tYmluYXIgY29uIGxhIG9wY2lvbiBnZXQ6IGlkT3JkZW5Db21wcmFcclxuICAgICAgKiBAZGVzY3JpcHRpb24gJ3JlY2VwY2lvbic6IE9idGluZSBsYXMgb3JkZW5lcyBkZSBzdW1pbmlzdHJvLFxyXG4gICAgICAqIGV4aXN0ZSB5IGNvZGlnbzogT2J0aWVuZSBsb3MgY29kaWdvcyByZWdpc3RyYWRvcywgXHJcbiAgICAgICogb3JkZW5lc1NPQzogb2J0aWVuZSBsYXMgb3JkZW5lcyBkZSBjb21wcmEsXHJcbiAgICAgICogb3A6IG9idGllbmUgbGFzIG9yZGVuZXMgcGVuZGllbnRlc1xyXG4gICAgICAqIGFydDogb2J0aWVuZSBsb3MgYXJ0aWN1bG9zIFxyXG4gICAgICAqIEByZXR1cm4gT2JzZXJ2YWJsZTxJUmVzcG9uc2U+XHJcbiAgICAgICogQGRhdGUgMy0xMC0yMDIxXHJcbiAgICAgICogQHJldHVybnMgXHJcbiAgICAgICovXHJcbiAgICAgICBwdWJsaWMgZ2V0RW50cmFkYVN1bWluaXN0cm9zKGdldDphbnksIG4/OnN0cmluZyk6IE9ic2VydmFibGU8SVJlc3BvbnNlPiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8SVJlc3BvbnNlPihgJHt0aGlzLlVSTH0vZGFvL3Npdi9lbnRyYWRhX3N1bWluaXN0cm9fZGFvLnBocD9nZXQ9JHtnZXR9Jm49JHtufWAsXHJcbiAgICAgICAgeyBoZWFkZXJzOiB0aGlzLmdldEh0dHBIZWFkZXJzKCkgfSkucGlwZShcclxuICAgICAgICAgIHJldHJ5KDMpLFxyXG4gICAgICAgICAgY2F0Y2hFcnJvcih0aGlzLmhhbmRsZXJFcnJvciksXHJcbiAgICAgICAgICBtYXAoKHJlczogYW55KSA9PiB7XHJcbiAgICAgICAgICAgIGlmIChyZXMuc3VjY2VzcykgeyAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgIHJlcy5kYXRhID0gcmVzLmRhdGEubWFwKGUgPT4gbmV3IE1FbnRyYWRhU3VtaW5pc3Ryb3MoZSkpXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIHJlcztcclxuICAgICAgICAgIH0pXHJcbiAgICAgICAgKTtcclxuICAgICAgfVxyXG4gICAgLyoqIFxyXG4gICAgICogQGRlc2NyaXB0aW9uIE9idGllbmUgbG9zIHRpcG9zIGRlIGRvY3VtZW50b3MgcmVnaXN0cmFkb3MgZW4gQ1hQXHJcbiAgICAgKiBAcmV0dXJuIE9ic2VydmFibGU8SVJlc3BvbnNlPlxyXG4gICAgICogQGF1dGhvciBEaW1hbHkgQ3Jlc3BvXHJcbiAgICAgKiBAZGF0ZSAyMC0wNy0yMDIxXHJcbiAgICAgKi9cclxuXHJcbiAgICAgIHB1YmxpYyBnZXRDb25jZXB0b3NDeFAoaWRFbnRlcnByaXNlOm51bWJlcil7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8SVJlc3BvbnNlPihgJHt0aGlzLlVSTH0vZGFvL2N4cC9jb25jZXB0b19kYW8ucGhwP29wZXJhY2lvbj0keydidXNjYXInfSZpPSR7aWRFbnRlcnByaXNlfWAsXHJcbiAgICAgICAgeyBoZWFkZXJzOiB0aGlzLmdldEh0dHBIZWFkZXJzKCkgfSkucGlwZShcclxuICAgICAgICAgIHJldHJ5KDMpLFxyXG4gICAgICAgICAgY2F0Y2hFcnJvcih0aGlzLmhhbmRsZXJFcnJvciksXHJcbiAgICAgICAgICBtYXAoKHJlczogYW55KSA9PiB7XHJcbiAgICAgICAgICAgIGlmIChyZXMuc3VjY2VzcykgeyAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgcmVzLmRhdGEgPSByZXMuZGF0YS5tYXAoZSA9PiBuZXcgTUNvbmNlcHRvc0NYUChlKSk7ICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gcmVzO1xyXG4gICAgICAgICAgfSlcclxuICAgICAgICApO1xyXG4gICAgICB9XHJcblxyXG4gICAgICAgLyoqIFxyXG4gICAgICogQGRlc2NyaXB0aW9uIE9idGllbmUgbG9zIGxvcyBjb25jZXB0b3MgUmV0ZW5jaW9uIElTUkxcclxuICAgICAqIEByZXR1cm4gT2JzZXJ2YWJsZTxJUmVzcG9uc2U+XHJcbiAgICAgKiBAYXV0aG9yIERpbWFseSBDcmVzcG9cclxuICAgICAqIEBkYXRlIDI2LTA3LTIwMjFcclxuICAgICAqL1xyXG5cclxuICAgICAgICBwdWJsaWMgZ2V0Q29uY2VwdG9zUmV0ZW5jaW9uKHRpcG86c3RyaW5nLGlkVGlwb0RlZHVjY2lvbjpudW1iZXIpe1xyXG4gICAgICAgICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8SVJlc3BvbnNlPihgJHt0aGlzLlVSTH0vZGFvL3N0Yi9kZWR1Y2Npb25lc19kYW8ucGhwP3RpcG89JHt0aXBvfSZjb2RlPSR7aWRUaXBvRGVkdWNjaW9ufWAsXHJcbiAgICAgICAgICB7IGhlYWRlcnM6IHRoaXMuZ2V0SHR0cEhlYWRlcnMoKSB9KS5waXBlKFxyXG4gICAgICAgICAgICByZXRyeSgzKSxcclxuICAgICAgICAgICAgY2F0Y2hFcnJvcih0aGlzLmhhbmRsZXJFcnJvciksXHJcbiAgICAgICAgICAgIG1hcCgocmVzOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgICBpZiAocmVzLnN1Y2Nlc3MpIHsgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgcmVzLmRhdGEgPSByZXMuZGF0YS5tYXAoZSA9PiBuZXcgTUNvbmNlcHRvUmV0ZW5jaW9uKGUpKTsgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICByZXR1cm4gcmVzO1xyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgICAgKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgIC8qKiBcclxuICAgICAqIEBkZXNjcmlwdGlvbiBPYnRpZW5lIGxhIGNvbmZpZ3VyYWNpw7NuIGRlIFJSSEggeSBkZSBTTk9cclxuICAgICAqIEByZXR1cm4gT2JzZXJ2YWJsZTxJUmVzcG9uc2U+XHJcbiAgICAgKiBAYXV0aG9yIERpbWFseSBDcmVzcG9cclxuICAgICAqL1xyXG4gICAgICBwdWJsaWMgb2J0ZW5lckNvbmZpZ3VyYWNpb25TTk8oaWRFbnRlcnByaXNlOm51bWJlcil7XHJcbiAgICAgIFxyXG4gICAgICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PElSZXNwb25zZT4oYCR7dGhpcy5VUkx9L2Rhby9zbm8vY29uZmlndXJhY2lvbl9kYW8ucGhwP3RpcG89JHsnY29uZmlndXJhY2lvbid9ZT0ke2lkRW50ZXJwcmlzZX1gLFxyXG4gICAgICAgIHsgaGVhZGVyczogdGhpcy5nZXRIdHRwSGVhZGVycygpIH0pLnBpcGUoXHJcbiAgICAgICAgICByZXRyeSgzKSxcclxuICAgICAgICAgIGNhdGNoRXJyb3IodGhpcy5oYW5kbGVyRXJyb3IpLFxyXG4gICAgICAgICAgbWFwKChyZXM6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICBpZiAocmVzLnN1Y2Nlc3MpIHsgXHJcbiAgICAgICAgICAgICAgICBpZiAocmVzLmRhdGEubGVuZ3RoPjApe1xyXG4gICAgICAgICAgICAgICAgICByZXMuZGF0YSA9IHJlcy5kYXRhLm1hcChlID0+IG5ldyBNQ29uZmlndXJhY2lvblNOTyhlKSk7ICBcclxuICAgICAgICAgICAgICAgIH0gICAgICAgIFxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiByZXM7XHJcbiAgICAgICAgICB9KVxyXG4gICAgICAgICk7XHJcbiAgICAgICAgICBcclxuICAgICAgfVxyXG5cclxuICAgICAvKipcclxuICAgICAgKiBcclxuICAgICAgKiBAcGFyYW0gdGlwbyBbJ2RlZmF1bHQnLCAndW5vJywgJ2NhcmdvcycsJ2xpbmVhJ10gZGFmYXVsdDpUb2RhcyBsYXMgbm9taW5hcywgdW5vOiB1bmEgbm9taW5hLCBcclxuICAgICAgKiAgICdjYXJnb3MnOiBub21pbmFzIHBvciBjYXJnb3MsICdsaW5lYSc6IG5vbWluYXMgYWN0aXZhcyBwb3IgbGluZWFzXHJcbiAgICAgICogQHBhcmFtIGlkIDogUGFyYSBsb3MgdGlwbzogdW5vIHkgY2FyZ29zIGVsIGlkIGVzIGlkTm9taW5hLiBQYXJhIGxpbmVhOiBpZCBlcyBlbCBpZEVudGVycHJpc2VcclxuICAgICAgKiBAcmV0dXJucyBhcnJheSgpICAgICAgXHJcbiAgICAgICogQGRlc2NyaXB0aW9uIE9idGllbmUgbGFzIG5vbWluYXMgcmVnaXN0cmFkYXNcclxuICAgICAgKiBAcmV0dXJuIE9ic2VydmFibGU8SVJlc3BvbnNlPlxyXG4gICAgICAqIEBkYXRlIDIwLTEwLTIxXHJcbiAgICAgICogQGFjdHVhbGl6YWRvIDI2LTA1LTIwMjRcclxuICAgICAgKlxyXG4gICAgICovICAgICBcclxuXHJcbiAgICAgICBwdWJsaWMgZ2V0Tm9taW5hKHRpcG86c3RyaW5nLGlkRW50ZXJwcmlzZTpudW1iZXIsaWQ/Om51bWJlcixhY3Q/Om51bWJlcil7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8SVJlc3BvbnNlPihgJHt0aGlzLlVSTH0vZGFvL3Nuby9kZWZpbmljaW9uX25vbWluYV9kYW8ucGhwP3RpcG89JHt0aXBvfSZpZD0ke2lkfSZlPSR7aWRFbnRlcnByaXNlfWAsXHJcbiAgICAgICAgeyBoZWFkZXJzOiB0aGlzLmdldEh0dHBIZWFkZXJzKCkgfSkucGlwZSggICAgICAgICBcclxuICAgICAgICAgIG1hcCgocmVzOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgaWYgKHJlcy5zdWNjZXNzKSB7ICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICByZXMuZGF0YSA9IHJlcy5kYXRhLm1hcChlID0+IG5ldyBNRGVmaW5pY2lvbk5vbWluYShlKSk7ICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gcmVzO1xyXG4gICAgICAgICAgfSlcclxuICAgICAgICApO1xyXG4gICAgICB9XHJcblxyXG4gICAvKipcclxuICAgICogQGRlc2NyaXB0aW9uIE9idGllbmUgbG9zIGNhcmdvcyBkZSBsYXMgbm9taW5hXHJcbiAgICAqIEBwYXJhbSB0aXBvIFsnY29kaWdvJywnZGVmYXVsdCddIC0+Y29kaWdvOiBvYnRpZW5lIGVsIHByb3hpbW8gY29kaWdvLiAtPmRlZmF1bHQ6IG9idGllbmUgdG9kb3MgbG9zIGNhcmdvcyBkZSBsYSBub21pbmFcclxuICAgICogQHBhcmFtIGlkIGlkIGRlIGxhIG5vbWluYVxyXG4gICAgKiBAcmV0dXJucyBhcnJheSgpXHJcbiAgICAqL1xyXG4gICAgICBwdWJsaWMgZ2V0Q2FyZ29zTm9taW5hKHRpcG86c3RyaW5nLGlkPzpudW1iZXIpe1xyXG4gICAgICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PElSZXNwb25zZT4oYCR7dGhpcy5VUkx9L2Rhby9zbm8vYXNpZ25hY2lvbl9jYXJnb3NfZGFvLnBocD90aXBvPSR7dGlwb30maWQ9JHtpZH1gLFxyXG4gICAgICAgIHsgaGVhZGVyczogdGhpcy5nZXRIdHRwSGVhZGVycygpIH0pLnBpcGUoXHJcbiAgICAgICAgICByZXRyeSgzKSxcclxuICAgICAgICAgIGNhdGNoRXJyb3IodGhpcy5oYW5kbGVyRXJyb3IpLFxyXG4gICAgICAgICAgbWFwKChyZXM6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICBpZiAocmVzLnN1Y2Nlc3MpIHsgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgIHJlcy5kYXRhID0gcmVzLmRhdGEubWFwKGUgPT4gbmV3IE1Bc2lnbmFjaW9uQ2FyZ28oZSkpOyAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIHJlcztcclxuICAgICAgICAgIH0pXHJcbiAgICAgICAgKTtcclxuICAgICAgfSAgXHJcbiAgICAgIFxyXG4gICAgICAvKipcclxuICAgICAqIEBkZXNjcmlwdGlvbiBPYnRpZW5lIHVuIHBlcnNvbmFsIGRlIGxhIG7Ds21pbmFcclxuICAgICAqIEByZXR1cm4gT2JzZXJ2YWJsZTxJUmVzcG9uc2U+XHJcbiAgICAgKiBAYXV0aG9yIERpbWFseSBDcmVzcG9cclxuICAgICAqL1xyXG4gICAgICAgcHVibGljIGdldFBlcnNvbmFsU1JIKHRpcG86c3RyaW5nLGlkRW50ZXJwcmlzZTpudW1iZXIsaWQ/Om51bWJlcil7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8SVJlc3BvbnNlPihgJHt0aGlzLlVSTH0vZGFvL3Nuby9wZXJzb25hbF9kYW8ucGhwP3RpcG89JHt0aXBvfSZpZD0ke2lkfSZlPSR7aWRFbnRlcnByaXNlfWAsXHJcbiAgICAgICAgeyBoZWFkZXJzOiB0aGlzLmdldEh0dHBIZWFkZXJzKCkgfSkucGlwZShcclxuICAgICAgICAgIHJldHJ5KDMpLFxyXG4gICAgICAgICAgY2F0Y2hFcnJvcih0aGlzLmhhbmRsZXJFcnJvciksXHJcbiAgICAgICAgICBtYXAoKHJlczogYW55KSA9PiB7XHJcbiAgICAgICAgICAgIGlmIChyZXMuc3VjY2VzcykgeyAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgcmVzLmRhdGEgPSByZXMuZGF0YS5tYXAoZSA9PiBuZXcgTVBlcnNvbmFsKGUpKTsgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiByZXM7XHJcbiAgICAgICAgICB9KVxyXG4gICAgICAgICk7XHJcbiAgICAgIH0gXHJcblxyXG4gICAgICAvKipcclxuICAgICAqIEBkZXNjcmlwdGlvbiBPYnRpZW5lIGxhcyBhZ2VuY2lhIGRlIGJhbmNvXHJcbiAgICAgKiBAcmV0dXJuIE9ic2VydmFibGU8SVJlc3BvbnNlPlxyXG4gICAgICogQGF1dGhvciBEaW1hbHkgQ3Jlc3BvXHJcbiAgICAgKi9cclxuICAgICAgIHB1YmxpYyBnZXRBZ2VuY2lhQmFuY28odGlwbzpzdHJpbmcsaWRFbnRlcnByaXNlPzpudW1iZXIsIGlkPzpudW1iZXIpe1xyXG4gICAgICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PElSZXNwb25zZT4oYCR7dGhpcy5VUkx9L2Rhby9zY2IvYWdlbmNpYV9kYW8ucGhwP2NvZGU9JHt0aXBvfSZpZD0ke2lkfWU9JHtpZEVudGVycHJpc2V9YCxcclxuICAgICAgICB7IGhlYWRlcnM6IHRoaXMuZ2V0SHR0cEhlYWRlcnMoKSB9KS5waXBlKFxyXG4gICAgICAgICAgcmV0cnkoMyksXHJcbiAgICAgICAgICBjYXRjaEVycm9yKHRoaXMuaGFuZGxlckVycm9yKSxcclxuICAgICAgICAgIG1hcCgocmVzOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgaWYgKHJlcy5zdWNjZXNzKSB7ICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICByZXMuZGF0YSA9IHJlcy5kYXRhLm1hcChlID0+IG5ldyBNQWdlbmNpYUJhbmNvKGUpKTsgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiByZXM7XHJcbiAgICAgICAgICB9KVxyXG4gICAgICAgICk7XHJcbiAgICAgIH0gXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gT2J0aWVuZSBsYSBob2phcyBkZSB0aWVtcG9cclxuICAgICAqIEByZXR1cm4gT2JzZXJ2YWJsZTxJUmVzcG9uc2U+XHJcbiAgICAgKiBAYXV0aG9yIERpbWFseSBDcmVzcG9cclxuICAgICAqL1xyXG4gICAgICAgICAgIHB1YmxpYyBnZXRIb2phVGllbXBvKHRpcG86c3RyaW5nLGlkUGVyc29uYWw/Om51bWJlcixpZE5vbWluYT86bnVtYmVyKXtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8SVJlc3BvbnNlPihgJHt0aGlzLlVSTH0vZGFvL3Nuby9ob2phX3RpZW1wb19kYW8ucGhwP2lkUGVyc29uYWw9JHtpZFBlcnNvbmFsfSZpZE5vbWluYT0ke2lkTm9taW5hfWAsXHJcbiAgICAgICAgICAgIHsgaGVhZGVyczogdGhpcy5nZXRIdHRwSGVhZGVycygpIH0pLnBpcGUoXHJcbiAgICAgICAgICAgICAgcmV0cnkoMyksXHJcbiAgICAgICAgICAgICAgY2F0Y2hFcnJvcih0aGlzLmhhbmRsZXJFcnJvciksXHJcbiAgICAgICAgICAgICAgbWFwKChyZXM6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKHJlcy5zdWNjZXNzKSB7ICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgcmVzLmRhdGEgPSByZXMuZGF0YS5tYXAoZSA9PiBuZXcgTUhvamFUaWVtcG8oZSkpOyAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzO1xyXG4gICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICB9ICAgICAgICAgXHJcbiAgICAgICAgIFxyXG4gICAgLyoqXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gT2J0aWVuZSBsb3MgY2xpZW50ZXMgXHJcbiAgICAgKiBAcmV0dXJuIE9ic2VydmFibGU8SVJlc3BvbnNlPlxyXG4gICAgICogQGF1dGhvciBEaW1hbHkgQ3Jlc3BvXHJcbiAgICAgKiBAdGlwbyBbYmFzaWNvLGNvZGlnbyxjZWR1bGFdXHJcbiAgICAgKiBcclxuICAgICAqL1xyXG5cclxuICAgIHB1YmxpYyBnZXRDbGllbnRlKHRpcG86IHN0cmluZyA9J2RlZmF1bHQnLCBpZDpudW1iZXI9MCwgY29kaWdvOnN0cmluZz0nJywgY2VkdWxhOnN0cmluZz0nJyk6IE9ic2VydmFibGU8SVJlc3BvbnNlPiB7XHJcbiAgICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PElSZXNwb25zZT4oYCR7dGhpcy5VUkx9L2Rhby9zZnYvY2xpZW50X2Rhby5waHA/dGlwbz0ke3RpcG99JmlkPSR7aWR9JmNvZGlnbz0ke2NvZGlnb30mY2VkcmlmY2xpPSR7Y2VkdWxhfWAsIFxyXG4gICAgICB7IGhlYWRlcnM6IHRoaXMuZ2V0SHR0cEhlYWRlcnMoKSB9KS5waXBlKCAgICAgICBcclxuICAgICAgICBtYXAoKHJlczogYW55KSA9PiB7XHJcbiAgICAgICAgICBpZiAocmVzLnN1Y2Nlc3MpIHtcclxuICAgICAgICAgICAgcmVzLmRhdGEgPSByZXMuZGF0YS5tYXAoZSA9PiBuZXcgTUNsaWVudChlKSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICByZXR1cm4gcmVzO1xyXG4gICAgICAgIH0pXHJcbiAgICAgICk7XHJcbiAgICB9XHJcblxyXG5cclxuXHJcbiAgICAvKipcclxuICAgICAqIEBkZXNjcmlwdGlvbiBWYWxpZGEgc2kgbGEgZmVjaGEgZXN0YSBkZW50cm8gZGVsIHBlcmlvZG8gZmlzY2FsIHkgZWwgbWVzIGVzdGEgYWJpZXJ0byBvIGNlcnJhZG9cclxuICAgICAqIEByZXR1cm4gT2JzZXJ2YWJsZTxJUmVzcG9uc2U+XHJcbiAgICAgKiBAcGFyYW0gZmVjaGE6IGZlY2hhIGEgY29tcGFyYXJcclxuICAgICAqIEBwYXJhbSBsaW5lYUVtcHJlc2E6IGxpbmVhIGVtcHJlc2EgZGVsIGRvY3VtZW50b1xyXG4gICAgICogQHBhcmFtIHBlcmlvZG9GaXNjYWwgOiBmZWNoYSBkZWwgcGVyaW9kbyBhIGV2YWx1YXIgJzE5MDAtMDEtMDEnXHJcbiAgICAgKiBAYXV0aG9yIERpbWFseSBDcmVzcG9cclxuICAgICAqIEBmZWNoYSAxMS0xMC0yMDIzXHJcbiAgICAgKiBcclxuICAgICAqL1xyXG4gICAgICAgcHVibGljIGdldFZhbGlkYXJQZXJpb2RvKGZlY2hhOnN0cmluZywgcGVyaW9kb0Zpc2NhbDpzdHJpbmcsIGxpbmVhRW1wcmVzYTpudW1iZXIpe1xyXG4gICAgICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PElSZXNwb25zZT4oYCR7dGhpcy5VUkx9L2Rhby9zY2cvY29uZmlndXJhY2lvbl9jb250YWJpbGlkYWRfZGFvLnBocD90aXBvPSR7J3ZhbGlkYUZlY2hhJ30mZmVjaGE9JHtmZWNoYX0mcGVyaW9kbz0ke3BlcmlvZG9GaXNjYWx9JmU9JHtsaW5lYUVtcHJlc2F9YCxcclxuICAgICAgICB7IGhlYWRlcnM6IHRoaXMuZ2V0SHR0cEhlYWRlcnMoKSB9KS5waXBlKG1hcCgocmVzOiBhbnkpID0+IHsgcmV0dXJuIHJlczt9KSk7XHJcbiAgICAgIH0gXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICogQGRlc2NyaXB0aW9uIE9idGllbmUgbG9zIHBlcmlvZG8gZmlzY2FsZXMgY29uZmlndXJhZG9zIGVuIFNDRyB5IFNQRyBtZW5vcmVzIG8gaWd1YWxlcyBhbCBwZXJpb2RvIGZpc2NhbCBhY3R1YWwuXHJcbiAgICAgKiBAcmV0dXJuIE9ic2VydmFibGU8SVJlc3BvbnNlPlxyXG4gICAgICogQHBhcmFtIGxpbmVhRW1wcmVzYTogbGluZWEgZW1wcmVzYSBkZWwgZG9jdW1lbnRvXHJcbiAgICAgKiBAYXV0aG9yIERpbWFseSBDcmVzcG9cclxuICAgICAqIEBmZWNoYSAwMS0xMC0yMDI0ICAgIFxyXG4gICAgICovXHJcbiAgICAgIHB1YmxpYyBnZXRQZXJpb2Rvc0NvbmZpZ3VyYWRvcyhsaW5lYUVtcHJlc2E6bnVtYmVyKXtcclxuICAgICAgICByZXR1cm4gdGhpcy5odHRwLmdldDxJUmVzcG9uc2U+KGAke3RoaXMuVVJMfS9kYW8vc2NnL2NvbmZpZ3VyYWNpb25fY29udGFiaWxpZGFkX2Rhby5waHA/dGlwbz0keydwZXJpb2RvQ29uZmlnJ30mZT0ke2xpbmVhRW1wcmVzYX1gLFxyXG4gICAgICAgIHsgaGVhZGVyczogdGhpcy5nZXRIdHRwSGVhZGVycygpIH0pLnBpcGUobWFwKChyZXM6IGFueSkgPT4geyByZXR1cm4gcmVzO30pKTtcclxuICAgICAgfSBcclxuXHJcblxyXG4gICAgICAgICAvKipcclxuICAgICAqIEBkZXNjcmlwdGlvbiBPYnRpZW5lIGxvcyBwZXJpb2RvIGZpc2NhbGVzIGNvbmZpZ3VyYWRvcyBlbiBTQ0cgeSBTUEcgbWVub3JlcyBhbCBwZXJpb2RvIGZpc2NhbCBhY3R1YWwgeSBlbCBpbm1lZGlhdG8uXHJcbiAgICAgKiBAcmV0dXJuIE9ic2VydmFibGU8SVJlc3BvbnNlPlxyXG4gICAgICogQHBhcmFtIGxpbmVhRW1wcmVzYTogbGluZWEgZW1wcmVzYSBkZWwgZG9jdW1lbnRvXHJcbiAgICAgKiBAYXV0aG9yIERpbWFseSBDcmVzcG9cclxuICAgICAqIEBmZWNoYSAwMS0xMC0yMDI0ICAgIFxyXG4gICAgICovXHJcbiAgICAgICAgIHB1YmxpYyBnZXRQZXJpb2Rvc0NvbmZpZ3VyYWRvc1NDR1NQRyhsaW5lYUVtcHJlc2E6bnVtYmVyKXtcclxuICAgICAgICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PElSZXNwb25zZT4oYCR7dGhpcy5VUkx9L2Rhby9zY2cvY29uZmlndXJhY2lvbl9jb250YWJpbGlkYWRfZGFvLnBocD90aXBvPSR7J3BlcmlvZG9TQ0dTUEcnfSZlPSR7bGluZWFFbXByZXNhfWAsXHJcbiAgICAgICAgICB7IGhlYWRlcnM6IHRoaXMuZ2V0SHR0cEhlYWRlcnMoKSB9KS5waXBlKG1hcCgocmVzOiBhbnkpID0+IHsgcmV0dXJuIHJlczt9KSk7XHJcbiAgICAgICAgfSBcclxuXHJcblxyXG4gICAgcHVibGljIHVzZXJIYXNSaWdodHMoY29sdW1uOidhZG1pbmlzdHJhZG9yJyB8ICdpbnNlcnRhcicgfCAnYWN0dWFsaXphcicgfCAnY29uc3VsdGFyJyBcclxuICAgIHwgJ2VsaW1pbmFyJyB8ICdhbnVsYXInIHwnZGVzY2FyZ2FyJyB8ICdlamVjdXRhcl9fcHJvY2VzYXJfJyB8ICdpbXByaW1pcicgXHJcbiAgICB8ICdlbnZpYXJfX2NvcnJlb18nIHwgJ3Zpc2libGUnKXtcclxuXHJcbiAgICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PElSZXNwb25zZT4oXHJcbiAgICAgICAgYCR7dGhpcy5VUkx9L2Rhby9zc3MvZGVyZWNob3NfdXN1YXJpb19kYW8ucGhwP2lkQ29tcG9uZW50PSR7XHJcbiAgICAgICAgICB0aGlzLmN1cnJlbnRDb21wb25lbnQuaWRcclxuICAgICAgICB9JmNvbHVtbj0ke2NvbHVtbn1gLCBcclxuICAgICAgICB7IGhlYWRlcnM6IHRoaXMuZ2V0SHR0cEhlYWRlcnMoKSB9XHJcbiAgICAgIClcclxuXHJcbiAgICB9XHJcblxyXG4gICAgXHJcbiAgICAvKipcclxuICAgICAqIEBkZXNjcmlwdGlvbiBPYnRlbmVyIGxhcyBwbGFudGlsbGFzIGRlIGludGVncmFjaW9uXHJcbiAgICAgKiBAcmV0dXJuIE9ic2VydmFibGU8SVJlc3BvbnNlPlxyXG4gICAgICogQHBhcmFtIGZlY2hhOiBmZWNoYSBhIGNvbXBhcmFyXHJcbiAgICAgKiBAcGFyYW0gbGluZWFFbXByZXNhOiBsaW5lYSBlbXByZXNhIGRlbCBkb2N1bWVudG9cclxuICAgICAqIEBwYXJhbSBwZXJpb2RvRmlzY2FsIDogZmVjaGEgZGVsIHBlcmlvZG8gYSBldmFsdWFyICcxOTAwLTAxLTAxJ1xyXG4gICAgICogQGF1dGhvciBEaW1hbHkgQ3Jlc3BvXHJcbiAgICAgKiBAZmVjaGEgMjctMTEtMjAyNVxyXG4gICAgICogXHJcbiAgICAgKi9cclxuICAgICAgcHVibGljIGdldFBsYW50aWxsYUludGVncmFjaW9uKGlkRW50ZXJwcmlzZTpudW1iZXIsc2lzdGVtYTpzdHJpbmcscGVyaW9kb0Zpc2NhbDpudW1iZXIpeyAgIFxyXG4gICAgICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0KGAke3RoaXMuVVJMfS9kYW8vc2NnL3BsYW50aWxsYV9pbnRlZ3JhY2lvbi5waHA/dGlwbz0keydzaXN0ZW1hJ30mZT0ke2lkRW50ZXJwcmlzZX0mc2lzPSR7c2lzdGVtYX0mcGVyPSR7cGVyaW9kb0Zpc2NhbH1gLFxyXG4gICAgICAgIHsgaGVhZGVyczogdGhpcy5nZXRIdHRwSGVhZGVycygpIH0pLnBpcGUoXHJcbiAgICAgICAgICAgbWFwKChyZXM6IGFueSkgPT4ge1xyXG4gICAgICAgICAgaWYgKHJlcy5zdWNjZXNzKSB7XHJcbiAgICAgICAgICAgIHJlcy5kYXRhID0gcmVzLmRhdGEubWFwKGUgPT4gbmV3IE1QbGFudGlsbGFJbnRlZ3JhY2lvbihlKSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICByZXR1cm4gcmVzO1xyXG4gICAgICAgIH0pXHJcbiAgICAgICAgKTtcclxuICAgICAgfSBcclxuXHJcblxyXG4gICAvKipcclxuICAgICAqIEBkZXNjcmlwdGlvbiBSZXRvcm5hIGxvcyBoZWFkZXJzIHBhcmEgaGFjZXIgbGFzIHBldGljaW9uZXNcclxuICAgICAqIEBwYXJhbXMgdHlwZTogVGlwbyBNSU1FIHBlcm1pdGlkbyBwb3IgZGVmZWN0byBzZSB0b21hIGFwcGxpY2F0aW9uL2pzb25cclxuICAgICAqIEByZXR1cm4gSHR0cEhlYWRlcnNcclxuICAgICAqIEBhdXRob3IgTWlndWVsIFJhbcOtcmV6XHJcbiAgICAgKiBAZGF0ZS11cGRhdGU6IDE1LTA2LTIwMjIgXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBnZXRIdHRwSGVhZGVycyh0eXBlPzpzdHJpbmcpOiBIdHRwSGVhZGVycyB7IFxyXG4gICAgICAhdHlwZT8gdHlwZT0nYXBwbGljYXRpb24vanNvbic6Jyc7ICAgICAgXHJcbiAgICAgIGNvbnN0IGhlYWRlcnMgPSBuZXcgSHR0cEhlYWRlcnMoe1xyXG4gICAgICAgICdDb250ZW50LVR5cGUnOiB0eXBlLFxyXG4gICAgICAgICdBdXRob3JpemF0aW9uJzogYCR7dGhpcy51c3VhcmlvQWN0aXZvLnRva2VufWBcclxuICAgICAgfSk7XHJcbiAgICAgIHJldHVybiBoZWFkZXJzO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQGRlc2NyaXB0aW9uIE9idGllbmUgZWwgc2Vydmlkb3IgZ3VhcmRhZG8gZW4gZWwgc2Vzc2lvblN0b3JhZ2VcclxuICAgICAqIEByZXR1cm4gc3RyaW5nXHJcbiAgICAgKiBAYXV0aG9yIE1pZ3VlbCBSYW3DrXJlelxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgZ2V0U2VydmVyKCk6IHN0cmluZyB7XHJcbiAgICAgIHJldHVybiB0aGlzLlVSTDtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEBkZXNjcmlwdGlvbiBPYnRpZW5lIGVsIHVzdWFyaW8gZ3VhcmRhZG8gZW4gZWwgc2Vzc2lvblN0b3JhZ2VcclxuICAgICAqIEByZXR1cm4gTVVzdWFyaW9cclxuICAgICAqIEBhdXRob3IgTWlndWVsIFJhbcOtcmV6XHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBhc3luYyBnZXRVc2VyKCkge1xyXG4gICAgICBsZXQgY29uZXhpb246IElDb25leGlvbiA9IGF3YWl0IChzZXNzaW9uU3RvcmFnZS5nZXRJdGVtKCd1c2VyJykpID8gSlNPTi5wYXJzZShhdG9iKHNlc3Npb25TdG9yYWdlLmdldEl0ZW0oJ3VzZXInKSkpIDogbnVsbDtcclxuICAgICAgLy9jb25zb2xlLmxvZyhjb25leGlvbilcclxuICAgICAgLy8gZGVidWdnZXJcclxuICAgICAgaWYgKGNvbmV4aW9uKSB7XHJcbiAgICAgICAgdGhpcy51c3VhcmlvQWN0aXZvID0gbmV3IE1Vc3VhcmlvKGNvbmV4aW9uLnVzdWFyaW8pO1xyXG4gICAgICAgIHRoaXMuVVJMID0gY29uZXhpb24uc2Vydmlkb3I7XHJcbiAgICAgIH1cclxuXHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gTXVlc3RyYSB1biB0b2FzdCBkZSBzdWNjZXNzXHJcbiAgICAgKiBAcGFyYW0gbWVzc2FnZSBNZW5zYWplIHF1ZSBzZSB2YSBhIG1vc3RyYXJcclxuICAgICAqIEByZXR1cm4gdm9pZFxyXG4gICAgICogQGF1dGhvciBNaWd1ZWwgUmFtw61yZXpcclxuICAgICAqL1xyXG4gICAgcHVibGljIHNob3dUb2FzdFN1Y2Nlc3MobWVzc2FnZTogc3RyaW5nKTogdm9pZCB7XHJcbiAgICAgIHRoaXMudG9hc3Quc3VjY2VzcyhtZXNzYWdlKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEBkZXNjcmlwdGlvbiBNdWVzdHJhIHVuIHRvYXN0IGRlIGVycm9yXHJcbiAgICAgKiBAcGFyYW0gbWVzc2FnZSBNZW5zYWplIHF1ZSBzZSB2YSBhIG1vc3RyYXJcclxuICAgICAqIEByZXR1cm4gdm9pZFxyXG4gICAgICogQGF1dGhvciBNaWd1ZWwgUmFtw61yZXpcclxuICAgICAqL1xyXG4gICAgcHVibGljIHNob3dUb2FzdEVycm9yKG1lc3NhZ2U6IHN0cmluZyk6IHZvaWQge1xyXG4gICAgICB0aGlzLnRvYXN0LmVycm9yKG1lc3NhZ2UpO1xyXG4gICAgfVxyXG5cclxuICAgICAgLyoqXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gTXVlc3RyYSB1biBzd2VldGFsZXJ0MiBkZSDDqXhpdG9cclxuICAgICAqIEBwYXJhbSBtZXNzYWdlIE1lbnNhamUgcXVlIHNlIHZhIGEgbW9zdHJhclxyXG4gICAgICogQHJldHVybiB2b2lkXHJcbiAgICAgKiBAZGF0ZSAyMi0xMS0yMDIxXHJcbiAgICAgKi9cclxuICAgICAgIHB1YmxpYyBzaG93VG9hc3RTdWNjZXNzU3dhbChtZXNzYWdlOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgICAgICBTd2FsLmZpcmUoe1xyXG4gICAgICAgICAgaWNvbjogJ3N1Y2Nlc3MnLFxyXG4gICAgICAgICAgdGl0bGU6ICfDiXhpdG8nLFxyXG4gICAgICAgICAgdGV4dDogbWVzc2FnZSwgIFxyXG4gICAgICAgIH0pXHJcbiAgICAgIH1cclxuXHJcbiAgICAgIFxyXG5cclxuICAgICAvKipcclxuICAgICAqIEBkZXNjcmlwdGlvbiBNdWVzdHJhIHVuIHN3ZWV0YWxlcnQyIGRlIGVycm9yXHJcbiAgICAgKiBAcGFyYW0gbWVzc2FnZSBNZW5zYWplIHF1ZSBzZSB2YSBhIG1vc3RyYXJcclxuICAgICAqIEByZXR1cm4gdm9pZFxyXG4gICAgICogQGRhdGUgMjItMTEtMjAyMVxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgc2hvd1RvYXN0RXJyb3JTd2FsKG1lc3NhZ2U6IHN0cmluZyk6IHZvaWQge1xyXG4gICAgICBTd2FsLmZpcmUoe1xyXG4gICAgICAgIGljb246ICdlcnJvcicsXHJcbiAgICAgICAgdGl0bGU6ICfCoUVycm9yIScsXHJcbiAgICAgICAgdGV4dDogbWVzc2FnZSwgIFxyXG4gICAgICAgICAgICAgXHJcbiAgICAgIH0pXHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gR3VhcmRhIGVsIHVzdWFyaW8gbG9ndWVhZG8gZW4gZWwgU2Vzc2lvblN0b3JhZ2VcclxuICAgICAqIEBwYXJhbSB1c2VyIFVzdWFyaW8gcXVlIHNlIHZhIGEgZ3VhcmRhciBlbiBlbCBTZXNzaW9uU3RvcmFnZVxyXG4gICAgICogQHJldHVybiB2b2lkXHJcbiAgICAgKiBAYXV0aG9yIE1pZ3VlbCBSYW3DrXJlelxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgc2F2ZVVzZXIoZGF0YTogSUNvbmV4aW9uKTogdm9pZCB7XHJcbiAgICAgIHRoaXMudXN1YXJpb0FjdGl2byA9IG5ldyBNVXN1YXJpbyhkYXRhLnVzdWFyaW8pO1xyXG4gICAgICB0aGlzLlVSTCA9IGRhdGEuc2Vydmlkb3I7XHJcbiAgICAgIGxldCBlbmNyeXB0ZWRVc2VyOiBzdHJpbmcgPSBidG9hKEpTT04uc3RyaW5naWZ5KGRhdGEpKTtcclxuICAgICAgc2Vzc2lvblN0b3JhZ2Uuc2V0SXRlbSgndXNlcicsIGVuY3J5cHRlZFVzZXIpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQGRlc2NyaXB0aW9uIFNldGUgYSBsYSB1cmwgYSBsYSBjdWFsIHNlIGxlIHZhbiBhIHJlYWxpemFyIHBldGljaW9uZXMgYWwgYmFja0VuZFxyXG4gICAgICogQHBhcmFtIHVybCBVUmwgZG9uZGUgc2UgdmFuIGEgcmVhbGl6YXIgbGFzIHBldGljaW9uZXNcclxuICAgICAqIEByZXR1cm4gdm9pZFxyXG4gICAgICogQGF1dGhvciBNaWd1ZWwgUmFtw61yZXpcclxuICAgICAqL1xyXG4gICAgcHVibGljIHNldFVybCh1cmw6IHN0cmluZyk6IHZvaWQge1xyXG4gICAgICB0aGlzLlVSTCA9IHVybDtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEBkZXNjcmlwdGlvbiBJbmljaWFsaXphIGVsIHNlcnZpY2lvIGRlIHNpZ2VzcFxyXG4gICAgICogQHJldHVybiB2b2lkXHJcbiAgICAgKiBAYXV0aG9yIE1pZ3VlbCBSYW3DrXJlelxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgaW5pdCgpOiB2b2lkIHtcclxuICAgICAgLy8gVmVyaWZpY2Ftb3Mgc2kgaGF5IHVuIHVzdWFyaW8gZW4gbGEgc2Vzc2lvblN0b3JhZ2UsIGVzdG8gZXMgbmVjZXNhcmlvIHBhcmEgcmVjYXJnYXIgbGEgcMOhZ2luYVxyXG4gICAgICBpZiAoc2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbSgndXNlcicpKSB7XHJcbiAgICAgICAgLy8gY29uc29sZS5sb2coc2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbSgndXNlcicpKVxyXG4gICAgICAgIHRoaXMuZ2V0VXNlcigpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gVmVyaWZpY2Egc2kgdW4gdXN1YXJpbyBlc3TDoSBsb2d1ZWFkb1xyXG4gICAgICogQHJldHVybiBQcm9taXNlPGJvb2xlYW4+XHJcbiAgICAgKiBAYXV0aG9yIE1pZ3VlbCBSYW3DrXJlelxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgYXN5bmMgaXNMb2dnZWQoKTogUHJvbWlzZTxib29sZWFuPiB7XHJcbiAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XHJcbiAgICAgICAgaWYgKHNlc3Npb25TdG9yYWdlLmdldEl0ZW0oJ3VzZXInKSkge1xyXG4gICAgICAgICAgcmVzb2x2ZSh0cnVlKVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICByZXNvbHZlKGZhbHNlKVxyXG4gICAgICAgIH1cclxuICAgICAgfSlcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGhhbmRsZXJFcnJvcihlcnJvcjogSHR0cEVycm9yUmVzcG9uc2UpOiBhbnkge1xyXG4gICAgICByZXR1cm4gdGhyb3dFcnJvcignT2N1cnJpw7MgdW4gZXJyb3InKVxyXG4gICAgfVxyXG5cclxuICAgICAgLyoqXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gb2J0aWVuZSBlbCBwZXJzb25hbCBzZWd1biBmaWx0cm9cclxuICAgICAqIEByZXR1cm4gT2JzZXJ2YWJsZTxJUmVzcG9uc2U+XHJcbiAgICAgKiBAZGF0ZSAxNS0xMS0yMDIxXHJcbiAgICAgKiBAcGFyYW0gdGlwbzogdmFsb3JlcyBbJ2NhdGFsb2dvJywnY2F0YWxvZ29Tbm8nLCdkZWZhdWx0Jywnbm9taW5hJywncmVzcG9uc2FibGVzJ11cclxuICAgICAqIEBwYXJhbXMgZGF0bzpvYmplY3Qge25vbWJyZTpzdHJpbmcsIGFwZWxsaWRvOnN0cmluZywgY2VkdWxhLnN0cmluZ30gdXNlIHBhcmEgbGEgb3BjaW9uICdjYXRhbG9nbycgbyAnY2F0YWxvZ29Tbm8nXHJcbiAgICAgKi9cclxuICAgICAgIHB1YmxpYyBnZXRQZXJzb25hbCh0aXBvOnN0cmluZywgZGF0bz86YW55KXtcclxuICAgICAgICAgIGxldCBjZWR1bGE9Jyc7XHJcbiAgICAgICAgICBsZXQgbm9tYnJlPScnO1xyXG4gICAgICAgICAgbGV0IGFwZWxsaWRvPScnO1xyXG4gICAgICAgICAgbGV0IGlkRW50ZXJwcmlzZT0wO1xyXG4gICAgICAgIGlmKGRhdG8pe1xyXG4gICAgICAgICAgY2VkdWxhPWRhdG8uY2VkdWxhXHJcbiAgICAgICAgICBub21icmU9ZGF0by5ub21icmVcclxuICAgICAgICAgIGFwZWxsaWRvPWRhdG8uYXBlbGxpZG9cclxuICAgICAgICAgIGlkRW50ZXJwcmlzZT1kYXRvLmlkRW50ZXJwcmlzZVxyXG4gICAgICAgIH0gICAgICAgIFxyXG4gICAgICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PElSZXNwb25zZT4oYCR7dGhpcy5VUkx9L2Rhby9zbm8vcGVyc29uYWxfZGFvLnBocD90aXBvPSR7dGlwb30mY2VkdWxhPSR7Y2VkdWxhfSZub21icmU9JHtub21icmV9JmFwZWxsaWRvPSR7YXBlbGxpZG99JmU9JHtpZEVudGVycHJpc2V9YCxcclxuICAgICAgICB7IGhlYWRlcnM6IHRoaXMuZ2V0SHR0cEhlYWRlcnMoKSB9KS5waXBlKFxyXG4gICAgICAgICAgcmV0cnkoMyksXHJcbiAgICAgICAgICBjYXRjaEVycm9yKHRoaXMuaGFuZGxlckVycm9yKSxcclxuICAgICAgICAgIG1hcCgocmVzOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgaWYgKHJlcy5zdWNjZXNzKSB7ICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICByZXMuZGF0YSA9IHJlcy5kYXRhLm1hcChlID0+IG5ldyBNUGVyc29uYWwoZSkpOyAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIHJlcztcclxuICAgICAgICAgIH0pXHJcbiAgICAgICAgKTtcclxuICAgICAgfSBcclxuXHJcbiAgICAgIC8qKlxyXG4gICAgICogQGRlc2NyaXB0aW9uIG9idGVuZXIgcGVyc29uYWwgTm9taW5hIHNlZ3VuIGZpbHRyb1xyXG4gICAgICogQHJldHVybiBPYnNlcnZhYmxlPElSZXNwb25zZT5cclxuICAgICAqIEBkYXRlIDE1LTExLTIwMjFcclxuICAgICAqICogQHBhcmFtIHRpcG86IHZhbG9yZXMgWydjYXRhbG9nbycsJ2RlZmF1bHQnLCdub21pbmEnXVxyXG4gICAgICogQHBhcmFtcyBkYXRvOm9iamVjdCB7bm9tYnJlOnN0cmluZywgYXBlbGxpZG86c3RyaW5nLCBjZWR1bGEuc3RyaW5nfSB1c2UgcGFyYSBsYSBvcGNpb24gJ2NhdGFsb2dvJ1xyXG5cclxuICAgICAqL1xyXG4gICAgICAgIHB1YmxpYyBnZXRQZXJzb25hbE5vbWluYSh0aXBvOnN0cmluZyxkYXRvPzphbnkpe1xyXG4gICAgICAgICAgbGV0IGNlZHVsYT0nJztcclxuICAgICAgICAgIGxldCBub21icmU9Jyc7XHJcbiAgICAgICAgICBsZXQgYXBlbGxpZG89Jyc7XHJcbiAgICAgICAgICBsZXQgaWRFbnRlcnByaXNlPTA7XHJcbiAgICAgICAgICBsZXQgaWROb21pbmE9MDtcclxuICAgICAgICBpZihkYXRvKXtcclxuICAgICAgICAgIGNlZHVsYT1kYXRvLmNlZHVsYVxyXG4gICAgICAgICAgbm9tYnJlPWRhdG8ubm9tYnJlXHJcbiAgICAgICAgICBhcGVsbGlkbz1kYXRvLmFwZWxsaWRvXHJcbiAgICAgICAgICBpZEVudGVycHJpc2U9ZGF0by5pZEVudGVycHJpc2VcclxuICAgICAgICAgIGlkTm9taW5hPWRhdG8uaWROb21pbmFcclxuICAgICAgICB9ICAgICAgICBcclxuICAgICAgICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PElSZXNwb25zZT4oYCR7dGhpcy5VUkx9L2Rhby9zbm8vYXNpZ25hY2lvbl9wZXJzb25hbF9ub21pbmFfZGFvLnBocD9cclxuICAgICAgICAgIHRpcG89JHt0aXBvfSZjZWR1bGE9JHtjZWR1bGF9Jm5vbWJyZT0ke25vbWJyZX0mYXBlbGxpZG89JHthcGVsbGlkb30maWROb21pbmE9JHtpZE5vbWluYX0maWRFbnRlcnByaXNlPSR7aWRFbnRlcnByaXNlfWAsXHJcbiAgICAgICAgICB7IGhlYWRlcnM6IHRoaXMuZ2V0SHR0cEhlYWRlcnMoKSB9KS5waXBlKCAgICAgICAgICAgXHJcbiAgICAgICAgICAgIG1hcCgocmVzOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgICBpZiAocmVzLnN1Y2Nlc3MpIHsgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgcmVzLmRhdGEgPSByZXMuZGF0YS5tYXAoZSA9PiBuZXcgTVBlcnNvbmFsTm9taW5hKGUpKTsgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICByZXR1cm4gcmVzO1xyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgICAgKTtcclxuICAgICAgICB9XHJcblxyXG5cclxuICAvKipcclxuICAgKiBAcGFyYW0gaWRQZXJzb25hbDogaWQgZGVsIHBlcnNvbmFsXHJcbiAgICogQHBhcmFtIHRpcG86IHZhbG9yZXNbJ25vbWluYV9wZXJzb25hbCddIFxyXG4gICAqIEBkZXNjcmlwdGlvbiBPYnRpZW5lIGxhcyBub21pbmFzIGRlbCBwZXJzb25hbCByZXN1bWlkYVxyXG4gICAqIEBkZXByZWNhdGVkOyAyMC0wMS0yMlxyXG4gICAqIEByZXR1cm5zIFxyXG4gICAqL1xyXG4gIFxyXG4gIHB1YmxpYyBnZXRQZXJzb25hbE5vbWluYVJlc3VtaWRhKGlkUGVyc29uYWw6bnVtYmVyLHRpcG86c3RyaW5nKXtcclxuICAgICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8SVJlc3BvbnNlPihgJHt0aGlzLlVSTH0vZGFvL3Nuby9wZXJzb25hbF9kYW8ucGhwP2lkUGVyc29uYWw9JHtpZFBlcnNvbmFsfSZ0aXBvPSR7dGlwb31gLFxyXG4gICAgICB7IGhlYWRlcnM6IHRoaXMuZ2V0SHR0cEhlYWRlcnMoKSB9KS5waXBlKCAgICAgICBcclxuICAgICAgICBtYXAoKHJlczogYW55KSA9PiB7XHJcbiAgICAgICAgICBpZiAocmVzLnN1Y2Nlc3MpIHsgICAgICAgICAgICBcclxuICAgICAgICAgICAgICByZXMuZGF0YSA9IHJlcy5kYXRhLm1hcChlID0+IG5ldyBNTm9taW5hU2ltcGxlKGUpKTsgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgcmV0dXJuIHJlcztcclxuICAgICAgICB9KVxyXG4gICAgICApO1xyXG4gIH1cclxuXHJcbiAgICAgICAvKipcclxuICAgICAgICogQGRlc2NyaXB0aW9uIE9idGllbmUgZWwgSnNvbiBTaXN0ZW1hcyBwYXJhIGVsIHVzdWFyaW8gZGVmaW5pZG8gc2VndW4gc3UgcGVybWlzb2xvZ2lhIGRlbCBTaXN0ZW1hXHJcbiAgICAgICAqIEByZXR1cm4gSnNvbiBkYXRhXHJcbiAgICAgICAqIEBhdXRob3IgSW5nLiBEaW1hbHkgQ3Jlc3BvXHJcbiAgICAgICAqL1xyXG4gICAgICAgcHVibGljIGdldFBlcmZpbFNpc3RlbWEoaWRfdXN1YXJpbzpudW1iZXIgKXtcclxuICAgICAgICByZXR1cm4gdGhpcy5odHRwLmdldChgJHt0aGlzLlVSTH0vZGFvL3Nzcy91c3Vhcmlvc19zaXN0ZW1hc19kYW8ucGhwP2lkX3VzdWFyaW89JHtpZF91c3VhcmlvfWAsXHJcbiAgICAgICAgeyBoZWFkZXJzOiB0aGlzLmdldEh0dHBIZWFkZXJzKCkgfSkucGlwZSggICAgICAgICAgXHJcbiAgICAgICAgICBtYXAoKHJlczogYW55KSA9PiB7IFxyXG4gICAgICAgICAgICBpZihyZXMuZGF0YS5sZW5ndGg+MCl7XHJcbiAgICAgICAgICAgICAgcmVzLmRhdGEgPSByZXMuZGF0YS5tYXAoZSA9PiBuZXcgTVVzdWFyaW9TaXN0ZW1hKGUpKTsgIFxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiByZXM7ICAgICBcclxuICAgICAgICAgICB9KVxyXG4gICAgICAgICAgXHJcbiAgICAgICAgKTtcclxuICAgICAgXHJcbiAgIH1cclxuXHJcbiAgXHJcbiAgICAgICAvKipcclxuICAgICAgICogQGRlc2NyaXB0aW9uIE9idGllbmUgZWwgSnNvbiBNZW51IHBhcmEgZWwgdXN1YXJpbyBkZWZpbmlkbyBzZWd1biBzdSBwZXJtaXNvbG9naWEgZGVsIFNpc3RlbWFcclxuICAgICAgICogQHJldHVybiBKc29uIGRhdGFcclxuICAgICAgICogQGF1dGhvciBJbmcuIFdpbG1lciBCcmljZW5vXHJcbiAgICAgICAqL1xyXG4gICAgICAgICAgcHVibGljIGdldFBlcmZpbE5vQ29tcG9uZW50KGlkX3VzdWFyaW86bnVtYmVyLHNpc3RlbWE6c3RyaW5nLCBuYW1lQ29tcG9uZW50OiBzdHJpbmcgKXtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQoYCR7dGhpcy5VUkx9L2Rhby9zc3MvZGVyZWNob3NfdXN1YXJpb19kYW8ucGhwP2lkX3VzdWFyaW89JHtpZF91c3VhcmlvfSZzaXN0ZW1hPSR7c2lzdGVtYX0mbmFtZWNvbXBvbmVudD0ke25hbWVDb21wb25lbnR9YCxcclxuICAgICAgICAgICAgeyBoZWFkZXJzOiB0aGlzLmdldEh0dHBIZWFkZXJzKCkgfSkucGlwZSggICAgICAgICAgXHJcbiAgICAgICAgICAgICAgbWFwKChyZXM6IGFueSkgPT4geyBcclxuICAgICAgICAgICAgICAgICByZXR1cm4gcmVzO1xyXG4gICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgICAgXHJcbiAgICAgICB9XHJcbiAgXHJcbiAgICAgICAvKipcclxuICAgICAgICogQGRlc2NyaXB0aW9uIE9idGllbmUgZWwgSnNvbiBNZW51IHBhcmEgZWwgdXN1YXJpbyBkZWZpbmlkbyBzZWd1biBzdSBwZXJtaXNvbG9naWEgZGVsIFNpc3RlbWFcclxuICAgICAgICogQHJldHVybiBKc29uIGRhdGFcclxuICAgICAgICogQGF1dGhvciBJbmcuIFdpbG1lciBCcmljZW5vXHJcbiAgICAgICAqL1xyXG4gICAgICAgIHB1YmxpYyBnZXRKc29uTWVudShpZF91c3VhcmlvOm51bWJlcixzaXN0ZW1hOnN0cmluZyl7XHJcbiAgICAgICAgICByZXR1cm4gdGhpcy5odHRwLmdldChgJHt0aGlzLlVSTH0vZGFvL3Nzcy9tZW51X2Rhby5waHA/aWRfdXN1YXJpbz0ke2lkX3VzdWFyaW99JnNpc3RlbWE9JHtzaXN0ZW1hfWAsXHJcbiAgICAgICAgICB7IGhlYWRlcnM6IHRoaXMuZ2V0SHR0cEhlYWRlcnMoKSB9KS5waXBlKCAgICAgICAgICBcclxuICAgICAgICAgICAgbWFwKChyZXM6IGFueSkgPT4geyBcclxuICAgICAgICAgICAgICAgdGhpcy51c2VyTWVudSA9IHJlcy5kYXRhO1xyXG4gICAgICAgICAgICAgICByZXR1cm4gdGhpcy51c2VyTWVudTtcclxuICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgIFxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgIC8qKlxyXG4gICAgICAqIEBkZXNjcmlwdGlvbiBPYnRpZW5lIGVsIEpzb24gTWVudSBwYXJhIGVsIHVzdWFyaW8gZGVmaW5pZG8gc2VndW4gc3UgcGVybWlzb2xvZ2lhIGRlbCBTaXN0ZW1hXHJcbiAgICAgICogQHJldHVybiBKc29uIGRhdGFcclxuICAgICAgKiBAYXV0aG9yIEluZy4gV2lsbWVyIEJyaWNlbm9cclxuICAgICAgKi9cclxuICAgICAgcHVibGljIGxvZyhib2R5OiBNTG9nICl7ICBcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0KGAke3RoaXMuVVJMfS9kYW8vc3NzL2xvZ19kYW8ucGhwYCwgYm9keSAsIHtcclxuICAgICAgICAgICAgICBoZWFkZXJzOiB0aGlzLmdldEh0dHBIZWFkZXJzKClcclxuICAgICAgICB9KS5waXBlKCAgXHJcbiAgICAgICAgICBtYXAoKHJlczogYW55KSA9PiB7ICBcclxuICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgcmV0dXJuIHJlcztcclxuICAgICAgICAgIH0pXHJcbiAgICAgICAgKVxyXG4gICAgXHJcbiAgICB9XHJcblxyXG4gIFxyXG4gICAgICAgIFxyXG4gICAvKipcclxuICAgICogQG5hbWUgRW5jcnlwdERhdGFcclxuICAgICogQGRlc2NyaXB0aW9uIEVuc2NyaXB0YSB1bmEgZXhwcmVzaW9uIGRhdGFcclxuICAgICogQGF1dGhvciBJbmcuIFdpbG1lciBCcmljZcOxb1xyXG4gICAgKi9cclxuICAgIHB1YmxpYyBFbmNyeXB0RGF0YSggZXhwcmVzaW9uIDogc3RyaW5nKXtcclxuICAgICAgIGNvbnN0IGtleSA9IENyeXB0b0pTLmVuYy5VdGY4LnBhcnNlIChcIjAxMjM0NTY3ODlTSUdFU1BcIik7IC8vIG7Dum1lcm8gaGV4YWRlY2ltYWwgZGUgMTYgZMOtZ2l0b3MgY29tbyBjbGF2ZVxyXG4gICAgICAgY29uc3QgaXYgPSBDcnlwdG9KUy5lbmMuVXRmOC5wYXJzZSAoJ1NJR0VTUDAxMjM0NTY3ODknKTsgLy8gTsO6bWVybyBoZXhhZGVjaW1hbCBjb21vIGRlc3BsYXphbWllbnRvIGRlIGNsYXZlXHJcbiAgICAgICBsZXQgc3JjcyA9IENyeXB0b0pTLmVuYy5VdGY4LnBhcnNlKGV4cHJlc2lvbik7XHJcbiAgICAgICBsZXQgZW5jcnlwdGVkID0gQ3J5cHRvSlMuQUVTLmVuY3J5cHQoc3Jjcywga2V5LCB7IGl2OiBpdiwgbW9kZTogQ3J5cHRvSlMubW9kZS5DQkMsIHBhZGRpbmc6IENyeXB0b0pTLnBhZC5Qa2NzNyB9KTtcclxuICAgICAgIHJldHVybiBlbmNyeXB0ZWQuY2lwaGVydGV4dC50b1N0cmluZygpLnRvVXBwZXJDYXNlKCk7XHJcbiAgICB9XHJcbiBcclxuICAgIC8qKlxyXG4gICAgKiBAbmFtZSBEZWNyeXB0RGF0YVxyXG4gICAgKiBAZGVzY3JpcHRpb24gRGVzZW5jcmlwdGEgdW5hIGV4cHJlc2lvbiBkYXRhXHJcbiAgICAqIEBhdXRob3IgSW5nLiBXaWxtZXIgQnJpY2XDsW9cclxuICAgICovXHJcbiAgICBwdWJsaWMgRGVjcnlwdERhdGEoIGV4cHJlc2lvbiA6IHN0cmluZyl7XHJcbiAgICAgICBjb25zdCBrZXkgPSBDcnlwdG9KUy5lbmMuVXRmOC5wYXJzZSAoXCIwMTIzNDU2Nzg5U0lHRVNQXCIpOyAvLyBuw7ptZXJvIGhleGFkZWNpbWFsIGRlIDE2IGTDrWdpdG9zIGNvbW8gY2xhdmVcclxuICAgICAgIGNvbnN0IGl2ID0gQ3J5cHRvSlMuZW5jLlV0ZjgucGFyc2UgKCdTSUdFU1AwMTIzNDU2Nzg5Jyk7IC8vIE7Dum1lcm8gaGV4YWRlY2ltYWwgY29tbyBkZXNwbGF6YW1pZW50byBkZSBjbGF2ZVxyXG4gICAgICAgbGV0IGVuY3J5cHRlZEhleFN0ciA9IENyeXB0b0pTLmVuYy5IZXgucGFyc2UoZXhwcmVzaW9uKTtcclxuICAgICAgIGxldCBzcmNzID0gQ3J5cHRvSlMuZW5jLkJhc2U2NC5zdHJpbmdpZnkoZW5jcnlwdGVkSGV4U3RyKTtcclxuICAgICAgIGxldCBkZWNyeXB0ID0gQ3J5cHRvSlMuQUVTLmRlY3J5cHQoc3Jjcywga2V5LCB7IGl2OiBpdiwgbW9kZTogQ3J5cHRvSlMubW9kZS5DQkMsIHBhZGRpbmc6IENyeXB0b0pTLnBhZC5Qa2NzNyB9KTtcclxuICAgICAgIGxldCBkZWNyeXB0ZWRTdHIgPSBkZWNyeXB0LnRvU3RyaW5nKENyeXB0b0pTLmVuYy5VdGY4KTtcclxuICAgICAgIHJldHVybiBkZWNyeXB0ZWRTdHIudG9TdHJpbmcoKTtcclxuICAgIH1cclxuIFxyXG4gXHJcbiAgICAvKipcclxuICAgICogQG5hbWUgZ2V0UmVzcG9uc2VQZXJmaWxUb29sYmFyXHJcbiAgICAqIEBkZXNjcmlwdGlvbiBNZXRvZG8gcXVlIG9idGllbmUgdW5hIHJlc3B1ZXN0YSB0cnVlIG8gZmFsc2UgYmFzYWRvIGVuIHVuYSBlc3RydWN0dXJhIHNyaW5nIGJpbmFucmlhIHNlZ3VuIFxyXG4gICAgKiAgICAgICAgICAgICAgbGEgcG9zaWNpb24gZGFkYSBkZWwgdG9vbGJhci4gc2UgcGFzYSBzdHJpbmcgYmluYXJpbyBxdWUgY29udGllbmUgMSB5IDAgZW4gcmVwcmVzZW50YWNpb24gXHJcbiAgICAqICAgICAgICAgICAgICBkZSBsYXMgcHJvcGllc3RhZGVzIGFkbWluaXN0cmFkb3IsY29uc3VsdGFyLGVqZWN1dGFyLGltcHJpbWlyIGV0YyAuLi4gY2FkYSBwb3NpY2lvbiBzZWN1ZW5jaWFsIFxyXG4gICAgKiAgICAgICAgICAgICAgc2kgZXN0YSBlbiAxIGVzIHRydWUgeSAwIGVuIGZhbHNlIHkgZGV2dWxldmUgZWwgdmFsb3Igc2VndW4gbG8gcmVxdWllcmEgZWwgdXN1YXJpbzpcclxuICAgICogICAgICAgICAgICAgIHN0cmluZ2JpbmFyaW8gOiAnMTAxMScgeSBwb3NpY2lvbiBlcyAyLCBwb3IgdGFudG8gc2UgdGFyZSAwIHkgZXMgZmFsc2UgcXVlIHJlcHJlc2VudGEgb3BjaW9uIGNvbnN1bHRhci5cclxuICAgICogICAgICAgICAgICAgIEVzdHJ1Y3R1cmEgc3RyaW5nIGJpbmFyaW86XHJcbiAgICAqICAgICAgICAgICAgICBQb3NpY2nDs24gOlxyXG4gICAgKiAgICAgICAgICAgICAgMC4gIEFkbWluaXN0cmFkb3IgICAgICAgIDYuICBEZXNjYXJnYXIgICAgICAxMi4gUmV2ZXJzYXIgYXByb2JhciAgICAgIDE4LiBSZXZlcnNhciBhbnVsYXIgY29udGFiaWxpemFkb1xyXG4gICAgKiAgICAgICAgICAgICAgMS4gIGluc2VydGFyICAgICAgICAgICAgIDcuICBFamVjdXRhciAgICAgICAxMy4gQW51bGFyLlxyXG4gICAgKiAgICAgICAgICAgICAgMi4gIEFjdHVhbGl6YXIgICAgICAgICAgIDguICBFbnZpYXIgICAgICAgICAxNC4gcmV2ZXJzYXIgYW51bGFyXHJcbiAgICAqICAgICAgICAgICAgICAzLiAgY29uc3VsdGFyICAgICAgICAgICAgOS4gSW1wcmltaXIgICAgICAgIDE1LiBjb250YWJpbGl6YXJcclxuICAgICogICAgICAgICAgICAgIDQuICBFbGltaW5hciAgICAgICAgICAgICAxMC4gVmlzaWJsZSAgICAgICAgMTYuIHJldmVyc2FyIGNvbnRhYmlsaXphclxyXG4gICAgKiAgICAgICAgICAgICAgNS4gIEFudWxhciAgICAgICAgICAgICAgIDExLiBBcHJvYmFyICAgICAgICAxNy4gYW51bGFyIGNvbnRhYmlsaXphZG8gICAgICAgXHJcbiAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAqIEBhdXRob3IgSW5nLiBXaWxtZXIgQnJpY2XDsW9cclxuICAgICovXHJcbiAgICAgcHVibGljIGdldFJlc3BvbnNlUGVyZmlsVG9vbGJhciggc3RyaW5nYmluYXJpbyA6IHN0cmluZywgcG9zaXRpb24gOiBudW1iZXIgKXtcclxuICAgICAgICAgIGxldCBiaW5hcmlvID0gc3RyaW5nYmluYXJpby5zdWJzdHJpbmcocG9zaXRpb24scG9zaXRpb24rMSkgO1xyXG4gICAgICAgICAgaWYgKGJpbmFyaW89PVwiMVwiKXtcclxuICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsgXHJcbiAgICAgICAgICB9ICAgXHJcbiAgICAgICAgICByZXR1cm4gZmFsc2U7IFxyXG4gICAgIH1cclxuXHJcbiAvKipcclxuICAgICogQGRlc2NyaXB0aW9uIE9idGllbmUgZWwgSXAgZGVsIGNsaWVudGVcclxuICAgICogQHJldHVybiBKc29uIGRhdGFcclxuICAgICogQGF1dGhvciBJbmcuIFdpbG1lciBCcmljZW5vXHJcbiAgICAqL1xyXG4gIHB1YmxpYyBnZXRJUEFkZHJlc3MoKXsgIFxyXG5cclxuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0KFwiaHR0cDovL2FwaS5pcGlmeS5vcmcvP2Zvcm1hdD1qc29uXCIpIFxyXG4gICAgLnBpcGUoXHJcbiAgICAgIGNhdGNoRXJyb3IoKGVycikgPT4ge1xyXG4gICAgICAgIGNvbnNvbGUubG9nKCdlcnJvciBjYXVnaHQgaW4gc2VydmljZScpXHJcbiAgICAgICAgY29uc29sZS5lcnJvcihlcnIpO1xyXG4gICAgICAgIHNlc3Npb25TdG9yYWdlLnNldEl0ZW0oJ2lwX2FkcmVzcycsICcxMjcuMC4wLjEnKTtcclxuICAgICAgICAvL0hhbmRsZSB0aGUgZXJyb3IgaGVyZVxyXG5cclxuICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihlcnIpOyAgICAvL1JldGhyb3cgaXQgYmFjayB0byBjb21wb25lbnRcclxuICAgICAgfSlcclxuICAgICk7XHJcbiAgICBcclxuICB9XHJcbiAvKipcclxuICAqIEBkZXNjcmlwdGlvbiBPYnRpZW5lIGVsIElwIGRlbCBjbGllbnRlXHJcbiAgKiBAcmV0dXJuIEpzb24gZGF0YVxyXG4gICogQGF1dGhvciBJbmcuIFdpbG1lciBCcmljZW5vXHJcbiAgKi9cclxuICBwdWJsaWMgc2V0SXBBZHJlc3MoKXtcclxuICAgIHRoaXMuZ2V0SVBBZGRyZXNzKCkuc3Vic2NyaWJlKCAocmVzcDogYW55KSAgID0+IHtcclxuICAgICAgICAgc2Vzc2lvblN0b3JhZ2Uuc2V0SXRlbSgnaXBfYWRyZXNzJywgcmVzcC5pcCk7XHJcbiAgICAgICAgIHRoaXMuaXBfYWRyZXNzID0gcmVzcC5pcDtcclxuICAgIH0pOyAgXHJcbiAgfSBcclxuIC8qKlxyXG4gICogQGRlc2NyaXB0aW9uIE9idGllbmUgZWwgSXAgZGVsIGNsaWVudGVcclxuICAqIEByZXR1cm4gSnNvbiBkYXRhXHJcbiAgKiBAYXV0aG9yIEluZy4gV2lsbWVyIEJyaWNlbm9cclxuICAqL1xyXG4gIHB1YmxpYyBnZXRJcEFkcmVzcygpe1xyXG4gICAgdGhpcy5pcF9hZHJlc3MgPSBzZXNzaW9uU3RvcmFnZS5nZXRJdGVtKCdpcF9hZHJlc3MnKTsgIFxyXG4gIH0gXHJcblxyXG4gICAvKipcclxuICAqIEBkZXNjcmlwdGlvbiBPYnRpZW5lIGVsIElwIGRlbCBjbGllbnRlXHJcbiAgKiBAcmV0dXJuIEpzb24gZGF0YVxyXG4gICogQGRpYSAxOS0wNS0yMDIyXHJcbiAgKi8gIFxyXG5cclxuICAgIHB1YmxpYyBjcmVhdGVBdWRpdG9yaWEoc25vOk1Tbm9Mb2dbXSl7XHJcbiAgICAgIGxldCBib2R5PVtdO1xyXG4gICAgICBzbm8uZm9yRWFjaChlPT4ge2JvZHkucHVzaChlLmRhdGFJbnRlZmFjZSgpKX0pO1xyXG4gICAgICByZXR1cm4gdGhpcy5odHRwLnBvc3Q8SVJlc3BvbnNlPihgJHt0aGlzLlVSTH0vZGFvL3Nuby9zZWd1cmlkYWRfZGFvLnBocD9gLGJvZHksXHJcbiAgICAgIHsgaGVhZGVyczogdGhpcy5nZXRIdHRwSGVhZGVycygpfSlcclxuICAgICAgLnBpcGUoXHJcbiAgICAgICAgbWFwKChyZXM6IGFueSkgPT4ge3JldHVybiByZXM7fSlcclxuICAgICAgKTtcclxuICAgIH0gIFxyXG5cclxuIC8qKiAgXHJcbiAgKiBAZGVzY3JpcHRpb24gT2J0aWVuZSBsb3MgdGlwb3MgZGUgZGVwb3NpdG9zICAqIFxyXG4gICogQHBhcmFtIHByb2NlZGUgOiBwcm9jZWRlIGRlbCBtb2R1bG9cclxuICAqIEBwYXJhbSBpZE1hdGVyaWFsIDogaWQgZGVsIGFydGljdWxvXHJcbiAgKiBAcGFyYW0gaWRVc3VhcmlvIDogaWQgdXN1YXJpbyBwZXJtaXRpZG9cclxuICAqIEByZXR1cm5zIFxyXG4gICogQGF1dGhvciBEaW1hbHkgQ3Jlc3BvXHJcbiAgKiBAZGF0ZSAyMy0wMS0yMDI1XHJcbiAgKi8gICAgICBcclxuICBwdWJsaWMgZ2V0RGVwb3NpdFR5cGUocHJvY2VkZTpzdHJpbmcsaWRNYXRlcmlhbDpudW1iZXIsaWRFbnRlcnByaXNlOm51bWJlcil7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldDxJUmVzcG9uc2U+KGAke3RoaXMuVVJMfS9kYW8vc2l2L2NhdGFsb2dvX3BhcmFtZXRyaXphZG9fZGFvLnBocD9nZXQ9JHtwcm9jZWRlfSZpZD0ke2lkTWF0ZXJpYWx9Jmk9JHtpZEVudGVycHJpc2V9YCxcclxuICAgIHsgaGVhZGVyczogdGhpcy5nZXRIdHRwSGVhZGVycygpIH0pLnBpcGUoICAgICBcclxuICAgICAgbWFwKChyZXM6IGFueSkgPT4ge1xyXG4gICAgICAgIGlmIChyZXMuc3VjY2VzcykgeyAgICAgICAgICAgIFxyXG4gICAgICAgICAgICByZXMuZGF0YSA9IHJlcy5kYXRhLm1hcChlID0+IG5ldyBNVGlwb0RlcG9zaXRvcyhlKSk7ICAgICAgICAgICAgICBcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHJlcztcclxuICAgICAgfSlcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICAvKiogIFxyXG4gICogQGRlc2NyaXB0aW9uIE9idGllbmUgQ2FyZ29zIEFkaWNpb25hbGVzICAqIFxyXG4gICogQHBhcmFtIHRpcG8gOiBvbmUsZGVmYXVsdFxyXG4gICogQHBhcmFtIGlkIDogaWQgZGVsIGNhcmdvIFxyXG4gICogQHJldHVybnMgXHJcbiAgKiBAYXV0aG9yIERpbWFseSBDcmVzcG9cclxuICAqIEBkYXRlIDEzLTExLTIwMjJcclxuICAqLyAgICAgIFxyXG4gIHB1YmxpYyBnZXRDYXJnb3NBZGljaW9uYWxlcyh0aXBvOnN0cmluZyxpZD86bnVtYmVyKXtcclxuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PElSZXNwb25zZT4oYCR7dGhpcy5VUkx9L2Rhby9zdGIvY2FyZ29zX2FkaWNpb25hbGVzX2Rhby5waHA/dGlwbz0ke3RpcG99JmlkPSR7aWR9YCxcclxuICAgIHsgaGVhZGVyczogdGhpcy5nZXRIdHRwSGVhZGVycygpIH0pLnBpcGUoICAgIFxyXG4gICAgICBtYXAoKHJlczogYW55KSA9PiB7XHJcbiAgICAgICAgaWYgKHJlcy5zdWNjZXNzKSB7ICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIHJlcy5kYXRhID0gcmVzLmRhdGEubWFwKGUgPT4gbmV3IE1DYXJnb3NBZGljaW9uYWxlcyhlKSk7ICAgICAgICAgICAgICBcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHJlcztcclxuICAgICAgfSlcclxuICAgICk7XHJcbiAgfVxyXG5cclxuXHJcbiAgLyoqICBcclxuICAqIEBkZXNjcmlwdGlvbiBPYnRpZW5lIGxvcyByZWxlYXNlIFxyXG4gICogQHBhcmFtIHRpcG8gOiByZWxlYXNlIChvYnRpZW5lIGVsIHVsdGltbyByZWxlYXNlIGRlbCBzaXN0ZW1hKSx2ZXJpZmljYXIodmVyaWZpY2Egc2kgc2UgZWplY3V0byBlbCB1bHRpbW8gcmVsZWFzZSlcclxuICAqIEBwYXJhbSBzaXN0ZW1hIDogc2lzdGVtYSBcclxuICAqIEBwYXJhbSBzZWNjaW9uIDogdGlwbyAnUkVMRUFTRScgXHJcbiAgKiBAcmV0dXJucyBzdHJpbmdcclxuICAqIEBhdXRob3IgRGltYWx5IENyZXNwb1xyXG4gICogQGRhdGUgMjEtMDYtMjAyNFxyXG4gICovICAgICAgXHJcbiAgcHVibGljIGdldFZlcmlmaWNhclJlbGVhc2UodGlwbzpzdHJpbmcsc2lzdGVtYTpzdHJpbmcsc2VjY2lvbjpzdHJpbmc9bnVsbCl7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldDxJUmVzcG9uc2U+KGAke3RoaXMuVVJMfS9kYW8vaW5zL2luc3RhbGFfZGFvLnBocD90aXBvPSR7dGlwb30mc2lzdGVtYT0ke3Npc3RlbWF9JnNlY2Npb249JHtzZWNjaW9ufWAsXHJcbiAgICB7IGhlYWRlcnM6IHRoaXMuZ2V0SHR0cEhlYWRlcnMoKSB9KS5waXBlKCAgICBcclxuICAgICAgbWFwKChyZXM6IGFueSkgPT4ge3JldHVybiByZXM7fSlcclxuICAgICk7XHJcbiAgfSAgICAgICBcclxuXHJcblxyXG4gIHB1YmxpYyBnZXRSZXBvcnRlUGVyc29uYWxpemFkbyh0aXBvOnN0cmluZz0nZGVmYXVsdCcsaWRFbnRlcnByaXNlOm51bWJlcixzaXN0ZW1hOnN0cmluZyxjYXNvOnN0cmluZyl7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldDxJUmVzcG9uc2U+KGAke3RoaXMuVVJMfS9kYW8vY2ZnL2NvbmZpZ3VyYWNpb25FcnBfZGFvLnBocD90aXBvPSR7dGlwb30mZT0ke2lkRW50ZXJwcmlzZX0mc2lzPSR7c2lzdGVtYX0mY2FzPSR7Y2Fzb31gLFxyXG4gICAgeyBoZWFkZXJzOiB0aGlzLmdldEh0dHBIZWFkZXJzKCkgfSkucGlwZSggbWFwKChyZXM6IGFueSkgPT4ge3JldHVybiByZXMuZGF0YTt9KSApO1xyXG4gIH0gICAgICAgXHJcbn1cclxuXHJcblxyXG4gIFxyXG5pbnRlcmZhY2UgZmlsdHJvQ3VlbnRhc1ByZXN1cHVlc3RvIHtcclxuICB0aXBvPzogJ0UnIHwgJ1InLFxyXG4gIGVzdGFkbz86ICdDJyB8ICdTJ1xyXG59XHJcblxyXG5cclxuIl19