tnx-shared 5.0.55 → 5.0.57

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.
@@ -564,7 +564,7 @@ export class CrudService {
564
564
  if (model.hasOwnProperty(sourceField)) {
565
565
  valueFilter = model[sourceField];
566
566
  if (canAccessSubField(valueFilter)) {
567
- if (isArray(valueFilter)) {
567
+ if (isArray(valueFilter) && typeof subField === 'string') {
568
568
  valueFilter = valueFilter.map(x => x[subField]);
569
569
  }
570
570
  else {
@@ -722,6 +722,7 @@ export class CrudService {
722
722
  });
723
723
  }
724
724
  mergeRefDataToDatasource(dataSource, schema, data) {
725
+ data !== null && data !== void 0 ? data : (data = []);
725
726
  const field = schema.field;
726
727
  let funcGetLabel = item => item[schema.displayField] || item['label'];
727
728
  if (schema.funcGetLabel) {
@@ -777,4 +778,4 @@ CrudService.ctorParameters = () => [
777
778
  { type: DatePipe },
778
779
  { type: NotifierService }
779
780
  ];
780
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3J1ZC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6Ii4uLy4uLy4uLy4uL3Byb2plY3RzL3RueC1zaGFyZWQvc3JjL2xpYi8iLCJzb3VyY2VzIjpbInNlcnZpY2VzL2NydWQuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzNDLE9BQU8sRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3JELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBRXZELE9BQU8sRUFBRSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDekUsT0FBTyxFQUF5QixlQUFlLEVBQW9CLFFBQVEsRUFBNEIsTUFBTSx3QkFBd0IsQ0FBQztBQUN0SSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDM0QsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHVDQUF1QyxDQUFDO0FBQ3hFLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUU3QyxPQUFPLEVBQUUsNEJBQTRCLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUNuRixPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDakQsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDMUQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLG9CQUFvQixDQUFDOzs7OztBQUtyRCxNQUFNLE9BQU8sV0FBVztJQUNwQixZQUNZLFNBQW1CLEVBQ25CLGlCQUFtQyxFQUNuQyxRQUFrQixFQUNsQixnQkFBaUM7UUFIakMsY0FBUyxHQUFULFNBQVMsQ0FBVTtRQUNuQixzQkFBaUIsR0FBakIsaUJBQWlCLENBQWtCO1FBQ25DLGFBQVEsR0FBUixRQUFRLENBQVU7UUFDbEIscUJBQWdCLEdBQWhCLGdCQUFnQixD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Z0JBQWdCO1lBRmhCLFFBQVE7WUFhUixlQUFlIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRGF0ZVBpcGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xyXG5pbXBvcnQgeyBJbmplY3RhYmxlLCBJbmplY3RvciB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBUcmFuc2xhdGVTZXJ2aWNlIH0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XHJcbmltcG9ydCB7IFRyZWVOb2RlIH0gZnJvbSAndG4tY3VzdG9tLXByaW1lbmcvYXBpJztcclxuaW1wb3J0IHsgaXNBcnJheSwgaXNMaXRlcmFsT2JqZWN0IH0gZnJvbSAnLi4vY2xhc3Nlcy9lbnZpcm9ubWVudC1zY2hlbWEnO1xyXG5pbXBvcnQgeyBEcm9wZG93bkNvbnRyb2xTY2hlbWEsIERyb3Bkb3duT3B0aW9ucywgR2V0UmVmRGF0YVNjaGVtYSwgT3BlcmF0b3IsIFJlZkZpZWxkLCBUcmVlRGF0YU9wdGlvbiB9IGZyb20gJy4uL2NsYXNzZXMvZm9ybS1zY2hlbWEnO1xyXG5pbXBvcnQgeyBWYWxpZGF0aW9uIH0gZnJvbSAnLi4vY29uZmlncy9jb21wb25lbnQtY29udGFudHMnO1xyXG5pbXBvcnQgeyBDb21DdHhDb25zdGFudHMgfSBmcm9tICcuLi9jb25maWdzL2NvbXBvbmVudC1jb250ZXh0LmNvbnN0YW50JztcclxuaW1wb3J0IHsgRmlsdGVyIH0gZnJvbSAnLi4vbW9kZWxzL2dyaWQtaW5mbyc7XHJcbmltcG9ydCB7IFJlc3BvbnNlUmVzdWx0IH0gZnJvbSAnLi4vbW9kZWxzL3Jlc3BvbnNlLXJlc3VsdCc7XHJcbmltcG9ydCB7IERhdGFTb3VyY2VXb3JrZmxvd0NvcmVTdGF0dXMgfSBmcm9tICcuLi9tb2RlbHMvd29ya2Zsb3ctY29yZS1zdGF0dXMuZW51bSc7XHJcbmltcG9ydCB7IENvbW1vblNlcnZpY2UgfSBmcm9tICcuL2NvbW1vbi5zZXJ2aWNlJztcclxuaW1wb3J0IHsgTWFzdGVyRGF0YVNlcnZpY2UgfSBmcm9tICcuL21hc3Rlci1kYXRhLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBOb3RpZmllclNlcnZpY2UgfSBmcm9tICcuL25vdGlmaWVyLnNlcnZpY2UnO1xyXG5cclxuQEluamVjdGFibGUoe1xyXG4gICAgcHJvdmlkZWRJbjogJ3Jvb3QnLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgQ3J1ZFNlcnZpY2Uge1xyXG4gICAgY29uc3RydWN0b3IoXHJcbiAgICAgICAgcHJpdmF0ZSBfaW5qZWN0b3I6IEluamVjdG9yLFxyXG4gICAgICAgIHByaXZhdGUgX3RyYW5zbGF0ZVNlcnZpY2U6IFRyYW5zbGF0ZVNlcnZpY2UsXHJcbiAgICAgICAgcHJpdmF0ZSBkYXRlUGlwZTogRGF0ZVBpcGUsXHJcbiAgICAgICAgcHJpdmF0ZSBfbm90aWZpZXJTZXJ2aWNlOiBOb3RpZmllclNlcnZpY2VcclxuICAgICkgeyB9XHJcblxyXG4gICAgcmVuZGVyRGF0ZVRpbWUoZGF0ZXRpbWUsIGZvcm1hdDogJ25vcm1hbCcgfCAnZnJvbU5vdycgPSAnZnJvbU5vdycpIHtcclxuICAgICAgICBpZiAoIWRhdGV0aW1lKSByZXR1cm4gJyc7XHJcbiAgICAgICAgaWYgKHR5cGVvZiBkYXRldGltZSA9PT0gJ3N0cmluZycpIHtcclxuICAgICAgICAgICAgZGF0ZXRpbWUgPSBuZXcgRGF0ZShkYXRldGltZSArICcnKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChmb3JtYXQgPT09ICdub3JtYWwnKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmRhdGVQaXBlLnRyYW5zZm9ybShkYXRldGltZSwgJ2RkL01NL3l5eXkgSEg6bW0nKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbnN0IG5vdzogYW55ID0gbmV3IERhdGUoKTtcclxuICAgICAgICBjb25zdCBtaWxpc2Vjb25kID0gbm93IC0gZGF0ZXRpbWU7XHJcbiAgICAgICAgbGV0IHRleHQxID0gJ3RyxrDhu5tjJywgdGV4dDIgPSAnSMO0bSBxdWEnO1xyXG4gICAgICAgIGlmIChtaWxpc2Vjb25kIDwgMCkge1xyXG4gICAgICAgICAgICB0ZXh0MSA9ICdu4buvYScsIHRleHQyID0gJ05nw6B5IG1haSc7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChtaWxpc2Vjb25kIDwgMzAwMDApIHtcclxuICAgICAgICAgICAgLy8gMzAgZ2nDonlcclxuICAgICAgICAgICAgcmV0dXJuIGBWw6BpIGdpw6J5ICR7dGV4dDF9YDtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKG1pbGlzZWNvbmQgPCA5MDAwMCkge1xyXG4gICAgICAgICAgICAvLyAzMCBnacOieSAtIDkwIGdpw6J5XHJcbiAgICAgICAgICAgIHJldHVybiBgTeG7mXQgcGjDunQgJHt0ZXh0MX1gO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAobWlsaXNlY29uZCA8IDMwMDAwMCkge1xyXG4gICAgICAgICAgICAvLyA1IHBow7p0XHJcbiAgICAgICAgICAgIHJldHVybiBgVsOgaSBwaMO6dCAke3RleHQxfWA7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChtaWxpc2Vjb25kIDwgMzYwMDAwMCkge1xyXG4gICAgICAgICAgICAvLyBkxrDhu5tpIDEgdGnhur9uZ1xyXG4gICAgICAgICAgICByZXR1cm4gYCR7TWF0aC5jZWlsKG1pbGlzZWNvbmQgLyA2MDAwMCl9IHBow7p0ICR7dGV4dDF9YDtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKG1pbGlzZWNvbmQgPCAxODAwMDAwMCkge1xyXG4gICAgICAgICAgICAvLyBkxrDhu5tpIDUgdGnhur9uZ1xyXG4gICAgICAgICAgICByZXR1cm4gYFbDoGkgZ2nhu50gJHt0ZXh0MX1gO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAobWlsaXNlY29uZCA8IDg2NDAwMDAwKSB7XHJcbiAgICAgICAgICAgIC8vIGTGsOG7m2kgMSBuZ8OgeVxyXG4gICAgICAgICAgICBpZiAoZGF0ZXRpbWUuZ2V0RGF0ZSgpID09IG5vdy5nZXREYXRlKCkpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBgJHtNYXRoLmNlaWwobWlsaXNlY29uZCAvIDM2MDAwMDApfSBnaeG7nSAke3RleHQxfWA7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIGAke3RleHQyfSBsw7pjICR7dGhpcy5kYXRlUGlwZS50cmFuc2Zvcm0oZGF0ZXRpbWUsICdISDptbScpfWA7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb25zdCB0ZXh0SG91ckFuZE1pbnV0ZSA9IGAgbMO6YyAke3RoaXMuZGF0ZVBpcGUudHJhbnNmb3JtKGRhdGV0aW1lLCAnSEg6bW0nKX1gO1xyXG4gICAgICAgIGlmIChkYXRldGltZS5nZXRZZWFyKCkgPT0gbm93LmdldFllYXIoKVxyXG4gICAgICAgICAgICAmJiBkYXRldGltZS5nZXRNb250aCgpID09IG5vdy5nZXRNb250aCgpXHJcbiAgICAgICAgKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGRhdGVEaWZmID0gbm93LmdldERhdGUoKSAtIGRhdGV0aW1lLmdldERhdGUoKTtcclxuICAgICAgICAgICAgaWYgKGRhdGVEaWZmID09IDEpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBgJHt0ZXh0Mn0ke3RleHRIb3VyQW5kTWludXRlfWA7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKGRhdGVEaWZmID09IDIpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBgSGFpIG5nw6B5ICR7dGV4dDF9JHt0ZXh0SG91ckFuZE1pbnV0ZX1gO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChkYXRlRGlmZiA9PSAzKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gYEJhIG5nw6B5ICR7dGV4dDF9JHt0ZXh0SG91ckFuZE1pbnV0ZX1gO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0aGlzLmRhdGVQaXBlLnRyYW5zZm9ybShcclxuICAgICAgICAgICAgZGF0ZXRpbWUsXHJcbiAgICAgICAgICAgICdkZC9NTS95eXl5IEhIOm1tJ1xyXG4gICAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgcmVuZGVyRGF0ZShkYXRldGltZSwgZm9ybWF0OiAnbm9ybWFsJyB8ICdmcm9tTm93JyA9ICdub3JtYWwnKSB7XHJcbiAgICAgICAgaWYgKCFkYXRldGltZSkgcmV0dXJuICcnO1xyXG4gICAgICAgIGlmICh0eXBlb2YgZGF0ZXRpbWUgPT09ICdzdHJpbmcnKSB7XHJcbiAgICAgICAgICAgIGRhdGV0aW1lID0gbmV3IERhdGUoZGF0ZXRpbWUgKyAnJyk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoZm9ybWF0ID09PSAnbm9ybWFsJykge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5kYXRlUGlwZS50cmFuc2Zvcm0oZGF0ZXRpbWUsICdkZC9NTS95eXl5Jyk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb25zdCBub3c6IGFueSA9IG5ldyBEYXRlKCk7XHJcbiAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICBkYXRldGltZS5nZXRNb250aCgpID09IG5vdy5nZXRNb250aCgpXHJcbiAgICAgICAgICAgICYmIGRhdGV0aW1lLmdldFllYXIoKSA9PSBub3cuZ2V0WWVhcigpXHJcbiAgICAgICAgKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGRheXMgPSBkYXRldGltZS5nZXREYXRlKCkgLSBub3cuZ2V0RGF0ZSgpO1xyXG4gICAgICAgICAgICBpZiAoZGF5cyA9PSAwKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gJ0jDtG0gbmF5JztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIGlmIChkYXlzID09IDEpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiAnTmfDoHkgbWFpJztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIGlmIChkYXlzID09IC0xKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gJ0jDtG0gcXVhJztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIGlmIChkYXlzID09IDIpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiAnSGFpIG5nw6B5IG7hu69hJztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIGlmIChkYXlzID09IC0yKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gJ0hhaSBuZ8OgeSB0csaw4bubYyc7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSBpZiAoZGF5cyA9PSAzKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gJ0JhIG5nw6B5IG7hu69hJztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIGlmIChkYXlzID09IC0zKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gJ0JhIG5nw6B5IHRyxrDhu5tjJztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdGhpcy5kYXRlUGlwZS50cmFuc2Zvcm0oZGF0ZXRpbWUsICdkZC9NTS95eXl5Jyk7XHJcbiAgICB9XHJcblxyXG4gICAgaGlkZUNvbnRyb2xBbmRMYWJlbCgpIHsgfVxyXG5cclxuICAgIGJ1aWxkRmlsdGVyKGZpZWxkOiBzdHJpbmcsIG9wZXJhdG9yOiBPcGVyYXRvciwgdmFsdWU6IHN0cmluZyk6IEZpbHRlciB7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBGaWx0ZXIoeyBmaWVsZCwgb3BlcmF0b3IsIHZhbHVlIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGJ1aWxkRmlsdGVyRGF0ZShmaWVsZDogc3RyaW5nLCBvcGVyYXRvcjogT3BlcmF0b3IsIHZhbHVlOiBEYXRlKTogRmlsdGVyIHtcclxuICAgICAgICByZXR1cm4gbmV3IEZpbHRlcih7IGZpZWxkLCBvcGVyYXRvciwgdmFsdWU6IHRoaXMuZ2V0RGF0ZSh2YWx1ZSkgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0RGF0ZSh2YWx1ZTogRGF0ZSk6IHN0cmluZyB7XHJcbiAgICAgICAgcmV0dXJuIGAke3ZhbHVlLmdldERhdGUoKX0vJHt2YWx1ZS5nZXRNb250aCgpICsgMX0vJHt2YWx1ZS5nZXRGdWxsWWVhcigpfWA7XHJcbiAgICB9XHJcblxyXG4gICAgYnVpbGRGaWx0ZXJEYXRlSW5MaXN0UmFuZ2UoZmllbGQ6IHN0cmluZywgYXJyTWluTWF4OiBEYXRlW11bXSwgb3BlcmF0b3JMZWZ0OiBzdHJpbmcgPSAnZ3RlJywgb3BlcmF0b3JSaWdodDogc3RyaW5nID0gJ2x0ZScpOiBGaWx0ZXIge1xyXG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IG5ldyBGaWx0ZXIoe1xyXG4gICAgICAgICAgICBsb2dpYzogJ29yJyxcclxuICAgICAgICAgICAgZmlsdGVyczogW11cclxuICAgICAgICB9KTtcclxuICAgICAgICBhcnJNaW5NYXguZm9yRWFjaChtaW5NYXggPT4ge1xyXG4gICAgICAgICAgICBjb25zdCBzdHJTdGFydCA9IHRoaXMuZ2V0U3RyaW5nRGF0ZVZhbHVlKG1pbk1heFswXSk7XHJcbiAgICAgICAgICAgIGNvbnN0IHN0ckVuZCA9IHRoaXMuZ2V0U3RyaW5nRGF0ZVZhbHVlKG1pbk1heFsxXSk7XHJcbiAgICAgICAgICAgIHJlc3VsdC5maWx0ZXJzLnB1c2goXHJcbiAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgbG9naWM6ICdhbmQnLFxyXG4gICAgICAgICAgICAgICAgICAgIGZpbHRlcnM6IFtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5idWlsZEZpbHRlcihmaWVsZCwgT3BlcmF0b3IuZ3JlYXRlclRoYW5FcXVhbCwgc3RyU3RhcnQpLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmJ1aWxkRmlsdGVyKGZpZWxkLCBPcGVyYXRvci5sb3dlclRoYW5FcXVhbCwgc3RyRW5kKVxyXG4gICAgICAgICAgICAgICAgICAgIF1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgKTtcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgIH1cclxuXHJcbiAgICBnZXRTdHJpbmdEYXRlVmFsdWUodmFsdWU6IERhdGUpIHtcclxuICAgICAgICByZXR1cm4gYCR7dmFsdWUuZ2V0VVRDRGF0ZSgpfS8ke3ZhbHVlLmdldFVUQ01vbnRoKCkgKyAxfS8ke3ZhbHVlLmdldFVUQ0Z1bGxZZWFyKCl9ICR7dmFsdWUuZ2V0VVRDSG91cnMoKX06JHt2YWx1ZS5nZXRVVENNaW51dGVzKCl9OiR7dmFsdWUuZ2V0VVRDU2Vjb25kcygpfWA7XHJcbiAgICB9XHJcblxyXG4gICAgYnVpbGRNdWx0aUZpbHRlckNvbnRhaW5zKGZpZWxkczogc3RyaW5nW10sIHZhbHVlOiBzdHJpbmcpOiBGaWx0ZXIge1xyXG4gICAgICAgIGNvbnN0IGZpbHRlciA9IG5ldyBGaWx0ZXIoeyBsb2dpYzogJ29yJywgZmlsdGVyczogW10gfSk7XHJcbiAgICAgICAgZmllbGRzLmZvckVhY2goZmllbGQgPT4ge1xyXG4gICAgICAgICAgICBmaWx0ZXIuZmlsdGVycy5wdXNoKG5ldyBGaWx0ZXIoe1xyXG4gICAgICAgICAgICAgICAgZmllbGQsXHJcbiAgICAgICAgICAgICAgICBvcGVyYXRvcjogT3BlcmF0b3IuY29udGFpbixcclxuICAgICAgICAgICAgICAgIHZhbHVlXHJcbiAgICAgICAgICAgIH0pKTtcclxuICAgICAgICB9KTtcclxuICAgICAgICByZXR1cm4gZmlsdGVyO1xyXG4gICAgfVxyXG5cclxuICAgIGJ1aWxkRmlsdGVyQ29udGFpbk11bHRpVmFsdWVzKGZpZWxkOiBzdHJpbmcsIHZhbHVlczogc3RyaW5nW10pOiBGaWx0ZXIge1xyXG4gICAgICAgIGNvbnN0IGZpbHRlciA9IG5ldyBGaWx0ZXIoeyBsb2dpYzogJ29yJywgZmlsdGVyczogW10gfSk7XHJcbiAgICAgICAgdmFsdWVzLmZvckVhY2godmFsdWUgPT4ge1xyXG4gICAgICAgICAgICBmaWx0ZXIuZmlsdGVycy5wdXNoKG5ldyBGaWx0ZXIoe1xyXG4gICAgICAgICAgICAgICAgZmllbGQsXHJcbiAgICAgICAgICAgICAgICBvcGVyYXRvcjogT3BlcmF0b3IuY29udGFpbixcclxuICAgICAgICAgICAgICAgIHZhbHVlXHJcbiAgICAgICAgICAgIH0pKTtcclxuICAgICAgICB9KTtcclxuICAgICAgICByZXR1cm4gZmlsdGVyO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgY3JlYXRlRHJvcGRvd25PcHRpb25zKHNjaGVtYTogRHJvcGRvd25Db250cm9sU2NoZW1hKSB7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBEcm9wZG93bk9wdGlvbnMoe1xyXG4gICAgICAgICAgICBmaWVsZFBhcmVudFRyZWVJdGVtOiBzY2hlbWEuZmllbGRQYXJlbnRUcmVlSXRlbSxcclxuICAgICAgICAgICAgZGlzcGxheUZpZWxkOiBzY2hlbWEuZGlzcGxheUZpZWxkLFxyXG4gICAgICAgICAgICB2YWx1ZUZpZWxkOiBzY2hlbWEudmFsdWVGaWVsZCxcclxuICAgICAgICAgICAgZmllbGRQbHVzOiBzY2hlbWEuZmllbGRQbHVzLFxyXG4gICAgICAgICAgICBmaWVsZFRyZWU6IHNjaGVtYS5maWVsZFRyZWUsXHJcbiAgICAgICAgICAgIGZ1bmNHZXRMYWJlbDogc2NoZW1hLmZ1bmNHZXRMYWJlbCxcclxuICAgICAgICAgICAgc29ydHM6IHNjaGVtYS5zb3J0cyxcclxuICAgICAgICAgICAgc29ydEZpZWxkOiBzY2hlbWEuc29ydEZpZWxkLFxyXG4gICAgICAgICAgICBzb3J0RGlyOiBzY2hlbWEuc29ydERpcixcclxuICAgICAgICAgICAgcGx1c1VybDogc2NoZW1hLnBsdXNVcmwsXHJcbiAgICAgICAgICAgIGNhbGxiYWNrRGF0YUZpbmlzaDogc2NoZW1hLmNhbGxiYWNrRGF0YUZpbmlzaCxcclxuICAgICAgICAgICAgLy8gVE9ETzogQ+G6p24gxJFp4buBbiB2w6BvIGtow7RuZyBjw7MgbOG7l2kga2jDtG5nIGNo4bqheSDEkcaw4bujY1xyXG4gICAgICAgICAgICBzZWxlY3RDaGlsZEl0ZW06IG51bGwsXHJcbiAgICAgICAgICAgIHBhZ2VTaXplOiBudWxsXHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0UmVmRGF0YUluRGF0YXNvdXJjZShkYXRhU291cmNlOiBhbnlbXSwgc2NoZW1hczogR2V0UmVmRGF0YVNjaGVtYVtdKSB7XHJcbiAgICAgICAgaWYgKGRhdGFTb3VyY2UubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICBpZiAoc2NoZW1hcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICBzY2hlbWFzLmZvckVhY2goc2NoZW1hID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBmaWVsZCA9IHNjaGVtYS5maWVsZDtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBhcnJWYWx1ZSA9IFtdO1xyXG4gICAgICAgICAgICAgICAgICAgIGRhdGFTb3VyY2UuZm9yRWFjaChpdGVtRGF0YSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRWYWx1ZSA9IGl0ZW1EYXRhW2ZpZWxkXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGN1cnJlbnRWYWx1ZSAhPSBudWxsICYmICFhcnJWYWx1ZS5zb21lKHAgPT4gcCA9PSBjdXJyZW50VmFsdWUpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcnJWYWx1ZS5wdXNoKGN1cnJlbnRWYWx1ZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoYXJyVmFsdWUubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgcHJvbWlzZSA9IG51bGw7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzY2hlbWEuZmllbGRQbHVzICYmIHNjaGVtYS5maWVsZFBsdXMubGVuZ3RoID4gMCAmJiAhc2NoZW1hLmZpZWxkUGx1cy5zdGFydHNXaXRoKCcsJykpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjaGVtYS5maWVsZFBsdXMgPSAnLCcgKyBzY2hlbWEuZmllbGRQbHVzO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzY2hlbWEuYmFzZVNlcnZpY2UgaW5zdGFuY2VvZiBNYXN0ZXJEYXRhU2VydmljZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvbWlzZSA9IHNjaGVtYS5iYXNlU2VydmljZS5nZXREYXRhRHJvcGRvd24oXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2NoZW1hLmdyb3VwQ29kZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgYXJyVmFsdWVcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBUT0RPOiBOYW1OSCBmaXggdOG6oW0sIGtow7RuZyB0aMOsIGzhu5dpIGtow7RuZyBidWlsZCDEkcaw4bujY1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgdGhpcy5jcmVhdGVEcm9wZG93bk9wdGlvbnMoPGFueT5zY2hlbWEpKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb21pc2UgPSBzY2hlbWEuYmFzZVNlcnZpY2UuZ2V0RGF0YURyb3Bkb3duQnlGaWx0ZXIoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3tcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmllbGQ6IHNjaGVtYS52YWx1ZUZpZWxkLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcGVyYXRvcjogT3BlcmF0b3IuaW4sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBhcnJWYWx1ZS50b1N0cmluZygpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfV0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gVE9ETzogTmFtTkggZml4IHThuqFtLCBraMO0bmcgdGjDrCBs4buXaSBraMO0bmcgYnVpbGQgxJHGsOG7o2Mgc2NoZW1hID0+IDxhbnk+c2NoZW1hXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jcmVhdGVEcm9wZG93bk9wdGlvbnMoPGFueT5zY2hlbWEpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHByb21pc2UudGhlbihyZXMgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGZ1bmNTZXRWYWx1ZVJvdzogRnVuY3Rpb24gPSAocm93SXRlbSwgZGF0YSkgPT4geyB9O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNjaGVtYS5mdW5jU2V0VmFsdWVSb3cpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdW5jU2V0VmFsdWVSb3cgPSBzY2hlbWEuZnVuY1NldFZhbHVlUm93O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YVNvdXJjZS5mb3JFYWNoKGl0ZW1EYXRhID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCByZWZJdGVtID0gcmVzLmZpbmQoaSA9PiBpLnZhbHVlID09IGl0ZW1EYXRhW2ZpZWxkXSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlZkl0ZW0gIT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtRGF0YVsnc3RyJyArIGZpZWxkXSA9IHJlZkl0ZW0ubGFiZWw7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmNTZXRWYWx1ZVJvdyhpdGVtRGF0YSwgcmVmSXRlbSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHNwbGl0VG9MaXN0TnVtYmVyKHN0cjogc3RyaW5nLCBzZXBhcmF0b3I6IHN0cmluZyA9ICcsJyk6IG51bWJlcltdIHtcclxuICAgICAgICByZXR1cm4gc3RyLnNwbGl0KHNlcGFyYXRvcikubWFwKGl0ZW0gPT4gTnVtYmVyKGl0ZW0pKTtcclxuICAgIH1cclxuXHJcbiAgICBwdXNoQXNjKGFycjogYW55W10sIGl0ZW06IGFueSwgZmllbGRPcmRlcjogc3RyaW5nKSB7XHJcbiAgICAgICAgaWYgKGFyci5sZW5ndGggPT0gMCkge1xyXG4gICAgICAgICAgICBhcnIucHVzaChpdGVtKTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBmb3IgKGxldCBpID0gYXJyLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XHJcbiAgICAgICAgICAgIGlmIChpdGVtW2ZpZWxkT3JkZXJdID49IGFycltpXVtmaWVsZE9yZGVyXSkge1xyXG4gICAgICAgICAgICAgICAgYXJyLnNwbGljZShpICsgMSwgMCwgaXRlbSk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgYXJyLnNwbGljZSgwLCAwLCBpdGVtKTtcclxuICAgIH1cclxuXHJcbiAgICBwdXNoRGVzYyhhcnI6IGFueVtdLCBpdGVtOiBhbnksIGZpZWxkT3JkZXI6IHN0cmluZykge1xyXG4gICAgICAgIGlmIChhcnIubGVuZ3RoID09IDApIHtcclxuICAgICAgICAgICAgYXJyLnB1c2goaXRlbSk7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBhcnIubGVuZ3RoIC0gMTsgaSsrKSB7XHJcbiAgICAgICAgICAgIGlmIChpdGVtW2ZpZWxkT3JkZXJdID49IGFycltpXVtmaWVsZE9yZGVyXSkge1xyXG4gICAgICAgICAgICAgICAgYXJyLnNwbGljZShpLCAwLCBpdGVtKTtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBhcnIucHVzaChpdGVtKTtcclxuICAgIH1cclxuXHJcbiAgICBwdXNoQXNjQnlGdW5jKGFycjogYW55W10sIGl0ZW06IGFueSwgZnVuYzogRnVuY3Rpb24pOiBudW1iZXIge1xyXG4gICAgICAgIGlmIChhcnIubGVuZ3RoID09IDApIHtcclxuICAgICAgICAgICAgYXJyLnB1c2goaXRlbSk7XHJcbiAgICAgICAgICAgIHJldHVybiBhcnIubGVuZ3RoIC0gMTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IGFyci5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xyXG4gICAgICAgICAgICBpZiAoZnVuYyhpdGVtKSA+PSBmdW5jKGFycltpXSkpIHtcclxuICAgICAgICAgICAgICAgIGFyci5zcGxpY2UoaSArIDEsIDAsIGl0ZW0pO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGkgKyAxO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGFyci5zcGxpY2UoMCwgMCwgaXRlbSk7XHJcbiAgICAgICAgcmV0dXJuIDA7XHJcbiAgICB9XHJcblxyXG4gICAgcHVzaERlc2NCeUZ1bmMoYXJyOiBhbnlbXSwgaXRlbTogYW55LCBmdW5jOiBGdW5jdGlvbikge1xyXG4gICAgICAgIGlmIChhcnIubGVuZ3RoID09IDApIHtcclxuICAgICAgICAgICAgYXJyLnB1c2goaXRlbSk7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBhcnIubGVuZ3RoIC0gMTsgaSsrKSB7XHJcbiAgICAgICAgICAgIGlmIChmdW5jKGl0ZW0pID49IGZ1bmMoYXJyW2ldKSkge1xyXG4gICAgICAgICAgICAgICAgYXJyLnNwbGljZShpLCAwLCBpdGVtKTtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBhcnIucHVzaChpdGVtKTtcclxuICAgIH1cclxuXHJcbiAgICBnZXRUcmVlVGFibGVEYXRhV2l0aE9yZGVyKGRhdGFTb3VyY2U6IGFueVtdLCBmaWVsZFRyZWU6IHN0cmluZywgZmllbGRPcmRlcjogc3RyaW5nLFxyXG4gICAgICAgIHZhbHVlUGFyZW50Um9vdDogYW55ID0gLTEsIGRpck9yZGVyOiBudW1iZXIgPSAxLCBsZXZlbENsb3NlOiBudW1iZXIgPSA5OTk5LCBvcHRpb25zOiBhbnkgPSB7fVxyXG4gICAgKTogVHJlZU5vZGVbXSB7XHJcbiAgICAgICAgY29uc3QgcmVzdWx0OiBUcmVlTm9kZVtdID0gW107XHJcbiAgICAgICAgY29uc3QgZnVuY0dldFZhbHVlT3JkZXIgPSBpdGVtID0+IHtcclxuICAgICAgICAgICAgcmV0dXJuIGl0ZW0uZGF0YVtmaWVsZE9yZGVyXTtcclxuICAgICAgICB9O1xyXG4gICAgICAgIGRhdGFTb3VyY2UuZm9yRWFjaChpdGVtID0+IHtcclxuICAgICAgICAgICAgaWYgKGl0ZW1bZmllbGRUcmVlXSA9PSB2YWx1ZVBhcmVudFJvb3QpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHJvb3RJdGVtID0gPFRyZWVOb2RlPntcclxuICAgICAgICAgICAgICAgICAgICBkYXRhOiBpdGVtLFxyXG4gICAgICAgICAgICAgICAgICAgIGxldmVsOiAxLFxyXG4gICAgICAgICAgICAgICAgICAgIGxlYWY6IHRydWUsXHJcbiAgICAgICAgICAgICAgICAgICAgY2hpbGRyZW46IFtdXHJcbiAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAgICAgaWYgKGRpck9yZGVyID09IDEpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnB1c2hBc2NCeUZ1bmMocmVzdWx0LCByb290SXRlbSwgZnVuY0dldFZhbHVlT3JkZXIpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5wdXNoRGVzY0J5RnVuYyhyZXN1bHQsIHJvb3RJdGVtLCBmdW5jR2V0VmFsdWVPcmRlcik7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBpZiAocm9vdEl0ZW1bJ2xldmVsJ10gPj0gbGV2ZWxDbG9zZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJvb3RJdGVtLmV4cGFuZGVkID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICByb290SXRlbS5leHBhbmRlZCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB0aGlzLmRlUXV5R2V0VHJlZVRhYmxlRGF0YVdpdGhPcmRlcihyb290SXRlbSwgZGF0YVNvdXJjZSwgZmllbGRUcmVlLCBkaXJPcmRlciwgZnVuY0dldFZhbHVlT3JkZXIsIGxldmVsQ2xvc2UsIG9wdGlvbnMpO1xyXG4gICAgICAgICAgICAgICAgaWYgKHJvb3RJdGVtLmNoaWxkcmVuLmxlbmd0aCA9PSAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZGVsZXRlIHJvb3RJdGVtLmNoaWxkcmVuO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaWYgKG9wdGlvbnMubW9kaWZ5VHJlZU5vZGUpIHtcclxuICAgICAgICAgICAgICAgICAgICBvcHRpb25zLm1vZGlmeVRyZWVOb2RlKHJvb3RJdGVtLCBpdGVtKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBkZVF1eUdldFRyZWVUYWJsZURhdGFXaXRoT3JkZXIobm9kZVBhcmVudDogVHJlZU5vZGUsIGRhdGFTb3VyY2U6IGFueVtdLCBmaWVsZFRyZWU6IHN0cmluZyxcclxuICAgICAgICBkaXJPcmRlcjogbnVtYmVyLCBmdW5jR2V0VmFsdWVPcmRlcjogRnVuY3Rpb24sIGxldmVsQ2xvc2U6IG51bWJlciwgb3B0aW9uczogYW55ID0ge31cclxuICAgICkge1xyXG4gICAgICAgIGRhdGFTb3VyY2UuZm9yRWFjaChpdGVtID0+IHtcclxuICAgICAgICAgICAgaWYgKGl0ZW1bZmllbGRUcmVlXSA9PSBub2RlUGFyZW50LmRhdGEuaWQpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGl0ZW1DaGlsZHJlbiA9IDxUcmVlTm9kZT57XHJcbiAgICAgICAgICAgICAgICAgICAgZGF0YTogaXRlbSxcclxuICAgICAgICAgICAgICAgICAgICBsZXZlbDogbm9kZVBhcmVudFsnbGV2ZWwnXSArIDEsXHJcbiAgICAgICAgICAgICAgICAgICAgbGVhZjogdHJ1ZSxcclxuICAgICAgICAgICAgICAgICAgICBjaGlsZHJlbjogW11cclxuICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgICBpZiAoZGlyT3JkZXIgPT0gMSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucHVzaEFzY0J5RnVuYyhub2RlUGFyZW50LmNoaWxkcmVuLCBpdGVtQ2hpbGRyZW4sIGZ1bmNHZXRWYWx1ZU9yZGVyKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucHVzaERlc2NCeUZ1bmMobm9kZVBhcmVudC5jaGlsZHJlbiwgaXRlbUNoaWxkcmVuLCBmdW5jR2V0VmFsdWVPcmRlcik7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBpZiAoaXRlbUNoaWxkcmVuWydsZXZlbCddID49IGxldmVsQ2xvc2UpIHtcclxuICAgICAgICAgICAgICAgICAgICBpdGVtQ2hpbGRyZW4uZXhwYW5kZWQgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIGl0ZW1DaGlsZHJlbi5leHBhbmRlZCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB0aGlzLmRlUXV5R2V0VHJlZVRhYmxlRGF0YVdpdGhPcmRlcihpdGVtQ2hpbGRyZW4sIGRhdGFTb3VyY2UsIGZpZWxkVHJlZSwgZGlyT3JkZXIsIGZ1bmNHZXRWYWx1ZU9yZGVyLCBsZXZlbENsb3NlLCBvcHRpb25zKTtcclxuICAgICAgICAgICAgICAgIGlmIChpdGVtQ2hpbGRyZW4uY2hpbGRyZW4ubGVuZ3RoID09IDApIHtcclxuICAgICAgICAgICAgICAgICAgICBkZWxldGUgaXRlbUNoaWxkcmVuLmNoaWxkcmVuO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaWYgKG9wdGlvbnMubW9kaWZ5VHJlZU5vZGUpIHtcclxuICAgICAgICAgICAgICAgICAgICBvcHRpb25zLm1vZGlmeVRyZWVOb2RlKGl0ZW1DaGlsZHJlbiwgaXRlbSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBnZXRUcmVlVGFibGVEYXRhKGRhdGFTb3VyY2U6IGFueVtdLCBmaWVsZFRyZWU6IHN0cmluZywgdmFsdWVQYXJlbnRSb290OiBhbnkgPSAtMSwgbGV2ZWxDbG9zZTogbnVtYmVyID0gOTk5OSwgb3B0aW9uczogYW55ID0ge30pOiBUcmVlTm9kZVtdIHtcclxuICAgICAgICBjb25zdCByZXN1bHQ6IFRyZWVOb2RlW10gPSBbXTtcclxuICAgICAgICBkYXRhU291cmNlLmZvckVhY2goaXRlbSA9PiB7XHJcbiAgICAgICAgICAgIGlmIChpdGVtW2ZpZWxkVHJlZV0gPT0gdmFsdWVQYXJlbnRSb290KSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCByb290SXRlbSA9IDxUcmVlTm9kZT57XHJcbiAgICAgICAgICAgICAgICAgICAgZGF0YTogaXRlbSxcclxuICAgICAgICAgICAgICAgICAgICBsZXZlbDogMSxcclxuICAgICAgICAgICAgICAgICAgICBsZWFmOiB0cnVlLFxyXG4gICAgICAgICAgICAgICAgICAgIGNoaWxkcmVuOiBbXVxyXG4gICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKHJvb3RJdGVtKTtcclxuICAgICAgICAgICAgICAgIGlmIChyb290SXRlbVsnbGV2ZWwnXSA+PSBsZXZlbENsb3NlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcm9vdEl0ZW0uZXhwYW5kZWQgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIHJvb3RJdGVtLmV4cGFuZGVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHRoaXMuZGVRdXlHZXRUcmVlVGFibGVEYXRhKHJvb3RJdGVtLCBkYXRhU291cmNlLCBmaWVsZFRyZWUsIGxldmVsQ2xvc2UsIG9wdGlvbnMpO1xyXG4gICAgICAgICAgICAgICAgaWYgKHJvb3RJdGVtLmNoaWxkcmVuLmxlbmd0aCA9PSAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZGVsZXRlIHJvb3RJdGVtLmNoaWxkcmVuO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaWYgKG9wdGlvbnMubW9kaWZ5VHJlZU5vZGUpIHtcclxuICAgICAgICAgICAgICAgICAgICBvcHRpb25zLm1vZGlmeVRyZWVOb2RlKHJvb3RJdGVtLCBpdGVtKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBkZVF1eUdldFRyZWVUYWJsZURhdGEobm9kZVBhcmVudDogVHJlZU5vZGUsIGRhdGFTb3VyY2U6IGFueVtdLCBmaWVsZFRyZWU6IHN0cmluZywgbGV2ZWxDbG9zZTogbnVtYmVyLCBvcHRpb25zOiBhbnkgPSB7fSkge1xyXG4gICAgICAgIGRhdGFTb3VyY2UuZm9yRWFjaChpdGVtID0+IHtcclxuICAgICAgICAgICAgaWYgKGl0ZW1bZmllbGRUcmVlXSA9PSBub2RlUGFyZW50LmRhdGEuaWQpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGl0ZW1DaGlsZHJlbiA9IDxUcmVlTm9kZT57XHJcbiAgICAgICAgICAgICAgICAgICAgZGF0YTogaXRlbSxcclxuICAgICAgICAgICAgICAgICAgICBsZXZlbDogbm9kZVBhcmVudFsnbGV2ZWwnXSArIDEsXHJcbiAgICAgICAgICAgICAgICAgICAgbGVhZjogdHJ1ZSxcclxuICAgICAgICAgICAgICAgICAgICBjaGlsZHJlbjogW11cclxuICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgICBub2RlUGFyZW50LmNoaWxkcmVuLnB1c2goaXRlbUNoaWxkcmVuKTtcclxuICAgICAgICAgICAgICAgIGlmIChpdGVtQ2hpbGRyZW5bJ2xldmVsJ10gPj0gbGV2ZWxDbG9zZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGl0ZW1DaGlsZHJlbi5leHBhbmRlZCA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaXRlbUNoaWxkcmVuLmV4cGFuZGVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHRoaXMuZGVRdXlHZXRUcmVlVGFibGVEYXRhKGl0ZW1DaGlsZHJlbiwgZGF0YVNvdXJjZSwgZmllbGRUcmVlLCBsZXZlbENsb3NlLCBvcHRpb25zKTtcclxuICAgICAgICAgICAgICAgIGlmIChpdGVtQ2hpbGRyZW4uY2hpbGRyZW4ubGVuZ3RoID09IDApIHtcclxuICAgICAgICAgICAgICAgICAgICBkZWxldGUgaXRlbUNoaWxkcmVuLmNoaWxkcmVuO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaWYgKG9wdGlvbnMubW9kaWZ5VHJlZU5vZGUpIHtcclxuICAgICAgICAgICAgICAgICAgICBvcHRpb25zLm1vZGlmeVRyZWVOb2RlKGl0ZW1DaGlsZHJlbiwgaXRlbSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBnZXRUcmVlRGF0YShkYXRhU291cmNlOiBhbnlbXSwgZmllbGRUcmVlOiBzdHJpbmcsIG9wdGlvbjogVHJlZURhdGFPcHRpb24sIHZhbHVlUGFyZW50Um9vdDogYW55ID0gLTEsIGxldmVsQ2xvc2U6IG51bWJlciA9IDk5OTkpOiBUcmVlTm9kZVtdIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5nZXRUcmVlVGFibGVEYXRhKGRhdGFTb3VyY2UsIGZpZWxkVHJlZSwgdmFsdWVQYXJlbnRSb290LCBsZXZlbENsb3NlLCB7XHJcbiAgICAgICAgICAgIG1vZGlmeVRyZWVOb2RlOiAoaXRlbVRyZWUsIGl0ZW1EYXRhKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBpdGVtVHJlZS5sYWJlbCA9IGl0ZW1EYXRhW29wdGlvbi5kaXNwbGF5RmllbGRdO1xyXG4gICAgICAgICAgICAgICAgaXRlbVRyZWUuZXhwYW5kZWRJY29uID0gb3B0aW9uLmV4cGFuZGVkSWNvbjtcclxuICAgICAgICAgICAgICAgIGl0ZW1UcmVlLmNvbGxhcHNlZEljb24gPSBvcHRpb24uY29sbGFwc2VkSWNvbjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGdldFRyZWVEYXRhV2l0aE9yZGVyKGRhdGFTb3VyY2U6IGFueVtdLCBmaWVsZFRyZWU6IHN0cmluZywgZmllbGRPcmRlcjogc3RyaW5nLFxyXG4gICAgICAgIG9wdGlvbjogVHJlZURhdGFPcHRpb24sIHZhbHVlUGFyZW50Um9vdDogYW55ID0gLTEsIGRpck9yZGVyOiBudW1iZXIgPSAxLCBsZXZlbENsb3NlOiBudW1iZXIgPSA5OTk5XHJcbiAgICApOiBUcmVlTm9kZVtdIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5nZXRUcmVlVGFibGVEYXRhV2l0aE9yZGVyKGRhdGFTb3VyY2UsIGZpZWxkVHJlZSwgZmllbGRPcmRlciwgdmFsdWVQYXJlbnRSb290LCBkaXJPcmRlciwgbGV2ZWxDbG9zZSwge1xyXG4gICAgICAgICAgICBtb2RpZnlUcmVlTm9kZTogKGl0ZW1UcmVlLCBpdGVtRGF0YSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgaXRlbVRyZWUubGFiZWwgPSBpdGVtRGF0YVtvcHRpb24uZGlzcGxheUZpZWxkXTtcclxuICAgICAgICAgICAgICAgIGl0ZW1UcmVlLnNob3J0TGFiZWwgPSBpdGVtRGF0YVtvcHRpb24uc2hvcnREaXNwbGF5RmllbGRdO1xyXG4gICAgICAgICAgICAgICAgaXRlbVRyZWUuZXhwYW5kZWRJY29uID0gb3B0aW9uLmV4cGFuZGVkSWNvbjtcclxuICAgICAgICAgICAgICAgIGl0ZW1UcmVlLmNvbGxhcHNlZEljb24gPSBvcHRpb24uY29sbGFwc2VkSWNvbjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGNyZWF0ZUd1aWQoKSB7XHJcbiAgICAgICAgcmV0dXJuICd4eHh4eHh4eC14eHh4LTR4eHgteXh4eC14eHh4eHh4eHh4eHgnLnJlcGxhY2UoL1t4eV0vZywgZnVuY3Rpb24gKGMpIHtcclxuICAgICAgICAgICAgY29uc3QgciA9IE1hdGgucmFuZG9tKCkgKiAxNiB8IDAsIHYgPSBjID09PSAneCcgPyByIDogKHIgJiAweDMgfCAweDgpO1xyXG4gICAgICAgICAgICByZXR1cm4gdi50b1N0cmluZygxNik7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gR2V0IMSRaeG7gXUga2nhu4duIHTDrG0ga2nhur9tIG3hurdjIMSR4buLbmggKEPhuqV1IGjDrG5oIGjhu4cgxJHDoG8gdOG6oW8sIG7Eg20gaOG7jWMsIGjhu41jIGvhu7MpXHJcbiAgICAvLyBDaOG7iSBz4butIGThu6VuZyBjaG8gcGjhuqduIG3hu4FtIHF14bqjbiBsw70gxJHDoG8gdOG6oW9cclxuICAgIGdldERlZmF1bHRTZWFyY2hEYXRhKCkge1xyXG4gICAgICAgIGNvbnN0IGxvY2FsRGF0YSA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKENvbUN0eENvbnN0YW50cy5MT0NBTFNUT1JBR0VfS0VZLkRFRkFVTFRfREFUQSk7XHJcbiAgICAgICAgaWYgKGxvY2FsRGF0YSAhPSBudWxsICYmIGxvY2FsRGF0YSAhPSAnJykge1xyXG4gICAgICAgICAgICByZXR1cm4gSlNPTi5wYXJzZShsb2NhbERhdGEpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4ge307XHJcbiAgICB9XHJcblxyXG4gICAgZm9yY2VTZWxlY3REZWZhdWx0RGF0YShfY29tcG9uZW50LCBjYikge1xyXG4gICAgICAgIF9jb21wb25lbnQuZGF0YVNlYXJjaERlZmF1bHQgPSB0aGlzLmdldERlZmF1bHRTZWFyY2hEYXRhKCk7XHJcbiAgICAgICAgaWYgKCFfY29tcG9uZW50LmRhdGFTZWFyY2hEZWZhdWx0LmhlRGFvVGFvXHJcbiAgICAgICAgICAgIHx8ICFfY29tcG9uZW50LmRhdGFTZWFyY2hEZWZhdWx0Lm5hbUhvY1xyXG4gICAgICAgICAgICB8fCAhX2NvbXBvbmVudC5kYXRhU2VhcmNoRGVmYXVsdC5ob2NLeVxyXG4gICAgICAgICkge1xyXG4gICAgICAgICAgICBfY29tcG9uZW50Lm1vZGVsLnJlYWR5VG9HZXREYXRhID0gZmFsc2U7XHJcbiAgICAgICAgICAgIF9jb21wb25lbnQucm9vdENvbnRleHQuc3Vic2NyaWJlKENvbUN0eENvbnN0YW50cy5ST09UX1VTTUFSVC5DT05GSUdfREFUQV9ERUZBVUxUX0NMT1NFRCwgZiA9PiB7XHJcbiAgICAgICAgICAgICAgICBfY29tcG9uZW50LmRhdGFTZWFyY2hEZWZhdWx0ID0gdGhpcy5nZXREZWZhdWx0U2VhcmNoRGF0YSgpO1xyXG4gICAgICAgICAgICAgICAgaWYgKCFfY29tcG9uZW50LmRhdGFTZWFyY2hEZWZhdWx0LmhlRGFvVGFvXHJcbiAgICAgICAgICAgICAgICAgICAgfHwgIV9jb21wb25lbnQuZGF0YVNlYXJjaERlZmF1bHQubmFtSG9jXHJcbiAgICAgICAgICAgICAgICAgICAgfHwgIV9jb21wb25lbnQuZGF0YVNlYXJjaERlZmF1bHQuaG9jS3lcclxuICAgICAgICAgICAgICAgICkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2luamVjdG9yLmdldChOb3RpZmllclNlcnZpY2UpLnNob3dFcnJvcignQuG6oW4gcGjhuqNpIGPhuqV1IGjDrG5oIHRow7RuZyB0aW4gKGjhu4cgxJHDoG8gdOG6oW8sIG7Eg20gaOG7jWMsIGjhu41jIGvhu7MpIHRyxrDhu5tjJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgX2NvbXBvbmVudC5yb290Q29udGV4dC5maXJlRXZlbnQoQ29tQ3R4Q29uc3RhbnRzLlJPT1RfVVNNQVJULlNIT1dfQ09ORklHX0RBVEFfREVGQVVMVCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICBfY29tcG9uZW50LnJvb3RDb250ZXh0LmZpcmVFdmVudChDb21DdHhDb25zdGFudHMuUk9PVF9VU01BUlQuU0hPV19DT05GSUdfREFUQV9ERUZBVUxUKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAoY2IpIHtcclxuICAgICAgICAgICAgY2IoX2NvbXBvbmVudC5kYXRhU2VhcmNoRGVmYXVsdCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGZvcmNlU2VsZWN0RGVmYXVsdERhdGFXaXRoRmllbGRzKF9jb21wb25lbnQsIGFyckZpZWxkLCBhcnJGaWVsZE5hbWUsIGNiKSB7XHJcbiAgICAgICAgaWYgKCFhcnJGaWVsZCB8fCBhcnJGaWVsZC5sZW5ndGggPT0gMCkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBfY29tcG9uZW50LmRhdGFTZWFyY2hEZWZhdWx0ID0gdGhpcy5nZXREZWZhdWx0U2VhcmNoRGF0YSgpO1xyXG4gICAgICAgIGxldCBlbm91Z2hGaWVsZHMgPSB0cnVlO1xyXG4gICAgICAgIGFyckZpZWxkLmZvckVhY2goZmllbGQgPT4ge1xyXG4gICAgICAgICAgICBpZiAoIV9jb21wb25lbnQuZGF0YVNlYXJjaERlZmF1bHRbZmllbGRdKSB7XHJcbiAgICAgICAgICAgICAgICBlbm91Z2hGaWVsZHMgPSBmYWxzZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICBpZiAoIWVub3VnaEZpZWxkcykge1xyXG4gICAgICAgICAgICBfY29tcG9uZW50Lm1vZGVsLnJlYWR5VG9HZXREYXRhID0gZmFsc2U7XHJcbiAgICAgICAgICAgIF9jb21wb25lbnQucm9vdENvbnRleHQuc3Vic2NyaWJlKENvbUN0eENvbnN0YW50cy5ST09UX1VTTUFSVC5DT05GSUdfREFUQV9ERUZBVUxUX0NMT1NFRCwgZiA9PiB7XHJcbiAgICAgICAgICAgICAgICBfY29tcG9uZW50LmRhdGFTZWFyY2hEZWZhdWx0ID0gdGhpcy5nZXREZWZhdWx0U2VhcmNoRGF0YSgpO1xyXG4gICAgICAgICAgICAgICAgZW5vdWdoRmllbGRzID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIGFyckZpZWxkLmZvckVhY2goZmllbGQgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICghX2NvbXBvbmVudC5kYXRhU2VhcmNoRGVmYXVsdFtmaWVsZF0pIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZW5vdWdoRmllbGRzID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICBpZiAoIWVub3VnaEZpZWxkcykge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2luamVjdG9yLmdldChOb3RpZmllclNlcnZpY2UpLnNob3dFcnJvcihgQuG6oW4gcGjhuqNpIGPhuqV1IGjDrG5oIHRow7RuZyB0aW4gKCR7YXJyRmllbGROYW1lLnRvU3RyaW5nKCl9KSB0csaw4bubY2ApO1xyXG4gICAgICAgICAgICAgICAgICAgIF9jb21wb25lbnQucm9vdENvbnRleHQuZmlyZUV2ZW50KENvbUN0eENvbnN0YW50cy5ST09UX1VTTUFSVC5TSE9XX0NPTkZJR19EQVRBX0RFRkFVTFQpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgX2NvbXBvbmVudC5yb290Q29udGV4dC5maXJlRXZlbnQoQ29tQ3R4Q29uc3RhbnRzLlJPT1RfVVNNQVJULlNIT1dfQ09ORklHX0RBVEFfREVGQVVMVCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKGNiKSB7XHJcbiAgICAgICAgICAgIGNiKF9jb21wb25lbnQuZGF0YVNlYXJjaERlZmF1bHQpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICByZXNldEZpZWxkKG1vZGVsLCBhcnJGaWVsZCkge1xyXG4gICAgICAgIGFyckZpZWxkLmZvckVhY2goZmllbGQgPT4ge1xyXG4gICAgICAgICAgICBtb2RlbC5kYXRhW2ZpZWxkXSA9IG51bGw7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJvY2Vzc0Vycm9yUmVzcG9uc2UocnMpIHtcclxuICAgICAgICBzd2l0Y2ggKHJzLmVycm9yKSB7XHJcbiAgICAgICAgICAgIGNhc2UgVmFsaWRhdGlvbi5FUlJfQlVTSU5FU1M6XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9ub3RpZmllclNlcnZpY2Uuc2hvd1dhcm5pbmcocnMubWVzc2FnZSk7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSBWYWxpZGF0aW9uLkVSUl9TWVNfREVWOlxyXG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coYF9fX19fX19fX18gRVJSX1NZU19ERVYgX19fX19fX19fXyAgOiAke3JzLm1lc3NhZ2V9YCk7XHJcbiAgICAgICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9ub3RpZmllclNlcnZpY2Uuc2hvd1dhcm5pbmcoJ1RoYW8gdMOhYyBjaMawYSB0aMOgbmggY8O0bmcuIFZ1aSBsw7JuZyB0aOG7rSBs4bqhaSBzYXUhJyk7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgaGFuZGxlUmVzcG9uc2UocmVzOiBSZXNwb25zZVJlc3VsdCwgbWVzc2FnZT86IHN0cmluZywgY2FsbEJhY2s/OiBGdW5jdGlvbiwgY2FsbEJhY2tFcnJvcj86IEZ1bmN0aW9uKSB7XHJcbiAgICAgICAgaWYgKCFyZXMuc3VjY2Vzcykge1xyXG4gICAgICAgICAgICBpZiAocmVzLmVycm9yID09IFZhbGlkYXRpb24uRVJSX1NZU19ERVYpIHtcclxuICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IocmVzLm1lc3NhZ2UpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5faW5qZWN0b3IuZ2V0KE5vdGlmaWVyU2VydmljZSkuc2hvd1dhcm5pbmcoJ0PDsyBs4buXaSB44bqjeSByYS4gTGnDqm4gaOG7hyBxdeG6o24gdHLhu4sgdmnDqm4gxJHhu4MgYmnhur90IHRow6ptIGNoaSB0aeG6v3QuJyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBsZXQgbWVzcyA9IHJlcy5lcnJvcjtcclxuICAgICAgICAgICAgICAgIGlmIChyZXMubWVzc2FnZSAhPSBudWxsICYmIHJlcy5tZXNzYWdlICE9ICcnKSBtZXNzID0gcmVzLm1lc3NhZ2U7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9pbmplY3Rvci5nZXQoTm90aWZpZXJTZXJ2aWNlKS5zaG93V2FybmluZyhtZXNzKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAoY2FsbEJhY2tFcnJvcikgY2FsbEJhY2tFcnJvcihyZXMpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChtZXNzYWdlKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX2luamVjdG9yLmdldChOb3RpZmllclNlcnZpY2UpLnNob3dTdWNjZXNzKG1lc3NhZ2UpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoY2FsbEJhY2spIGNhbGxCYWNrKHJlcyk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0RmlsdGVyRnJvbVRlbXBsYXRlKHRlbXBsYXRlRmlsdGVyOiBGaWx0ZXJbXSwgbW9kZWw6IGFueSwgcm9vdE1vZGVsPzogYW55KSB7XHJcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gW107XHJcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkodGVtcGxhdGVGaWx0ZXIpKSB7XHJcbiAgICAgICAgICAgIHRlbXBsYXRlRmlsdGVyLmZvckVhY2goZiA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmRlUXV5UmVwbGFjZVZhbHVlKHJlc3VsdCwgZiwgbW9kZWwsIHJvb3RNb2RlbCk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5kZVF1eVJlcGxhY2VWYWx1ZShyZXN1bHQsIHRlbXBsYXRlRmlsdGVyLCBtb2RlbCwgcm9vdE1vZGVsKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGRlUXV5UmVwbGFjZVZhbHVlKGZpbHRlcnM6IEZpbHRlcltdLCBmaWx0ZXI6IEZpbHRlciwgbW9kZWw6IGFueSwgcm9vdE1vZGVsPzogYW55KSB7XHJcbiAgICAgICAgbGV0IHZhbHVlRmlsdGVyID0gbnVsbDtcclxuXHJcbiAgICAgICAgY29uc3Qgc291cmNlRmllbGQgPSBmaWx0ZXIuc291cmNlRmllbGQ7XHJcbiAgICAgICAgY29uc3Qgc3ViRmllbGQgPSBmaWx0ZXIuc3ViRmllbGQ7XHJcbiAgICAgICAgY29uc3QgY2FuQWNjZXNzU3ViRmllbGQgPSAodmFsdWUpID0+IHtcclxuICAgICAgICAgICAgcmV0dXJuIHN1YkZpZWxkICE9IG51bGxcclxuICAgICAgICAgICAgICAgICYmIHN1YkZpZWxkICE9PSAnJ1xyXG4gICAgICAgICAgICAgICAgJiYgKGlzQXJyYXkodmFsdWUpIHx8IGlzTGl0ZXJhbE9iamVjdCh2YWx1ZSkpO1xyXG4gICAgICAgIH07XHJcbiAgICAgICAgaWYgKG1vZGVsLmhhc093blByb3BlcnR5KHNvdXJjZUZpZWxkKSkge1xyXG4gICAgICAgICAgICB2YWx1ZUZpbHRlciA9IG1vZGVsW3NvdXJjZUZpZWxkXTtcclxuICAgICAgICAgICAgaWYgKGNhbkFjY2Vzc1N1YkZpZWxkKHZhbHVlRmlsdGVyKSkge1xyXG4gICAgICAgICAgICAgICAgaWYgKGlzQXJyYXkodmFsdWVGaWx0ZXIpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFsdWVGaWx0ZXIgPSB2YWx1ZUZpbHRlci5tYXAoeCA9PiB4W3N1YkZpZWxkXSk7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlRmlsdGVyID0gdmFsdWVGaWx0ZXJbc3ViRmllbGRdO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKHJvb3RNb2RlbCkge1xyXG4gICAgICAgICAgICBpZiAocm9vdE1vZGVsLmhhc093blByb3BlcnR5KHNvdXJjZUZpZWxkKSkge1xyXG4gICAgICAgICAgICAgICAgdmFsdWVGaWx0ZXIgPSByb290TW9kZWxbc291cmNlRmllbGRdO1xyXG4gICAgICAgICAgICAgICAgaWYgKGNhbkFjY2Vzc1N1YkZpZWxkKHZhbHVlRmlsdGVyKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChpc0FycmF5KHZhbHVlRmlsdGVyKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZUZpbHRlciA9IHZhbHVlRmlsdGVyLm1hcCh4ID0+IHhbc3ViRmllbGRdKTtcclxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZUZpbHRlciA9IHZhbHVlRmlsdGVyW3N1YkZpZWxkXTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBmaWVsZHMgPSBzb3VyY2VGaWVsZC5zcGxpdCgnLicpO1xyXG4gICAgICAgICAgICAgICAgbGV0IHRlbXAgPSByb290TW9kZWw7XHJcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGYgb2YgZmllbGRzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRlbXAuaGFzT3duUHJvcGVydHkoZikpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGVtcCA9IHRlbXBbZl07XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0ZW1wID0gbnVsbDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaWYgKGNhbkFjY2Vzc1N1YkZpZWxkKHRlbXApKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGlzQXJyYXkodGVtcCkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVGaWx0ZXIgPSB0ZW1wLm1hcCh4ID0+IHhbc3ViRmllbGRdKTtcclxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZUZpbHRlciA9IHRlbXBbc3ViRmllbGRdO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKGZpbHRlci5sb2dpYyA9PSBudWxsICYmICh2YWx1ZUZpbHRlciA9PSBudWxsIHx8IHZhbHVlRmlsdGVyID09PSAnJyB8fCB2YWx1ZUZpbHRlci5sZW5ndGggPT0gMCkpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29uc3QgdG1wRmlsdGVyID0gbmV3IEZpbHRlcihmaWx0ZXIpO1xyXG4gICAgICAgIGRlbGV0ZSB0bXBGaWx0ZXIuc291cmNlRmllbGQ7XHJcbiAgICAgICAgaWYgKHRtcEZpbHRlci5mdW5jR2V0VmFsdWUpIHtcclxuICAgICAgICAgICAgdmFsdWVGaWx0ZXIgPSB0bXBGaWx0ZXIuZnVuY0dldFZhbHVlKHZhbHVlRmlsdGVyKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdG1wRmlsdGVyLnZhbHVlID0gSlNPTi5zdHJpbmdpZnkodmFsdWVGaWx0ZXIpO1xyXG4gICAgICAgIGlmICh0bXBGaWx0ZXIubW9kaWZ5VmFsdWUpIHtcclxuICAgICAgICAgICAgdmFsdWVGaWx0ZXIgPSB0bXBGaWx0ZXIubW9kaWZ5VmFsdWUodmFsdWVGaWx0ZXIpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0bXBGaWx0ZXIuZmlsdGVycyA9IFtdO1xyXG4gICAgICAgIGlmIChmaWx0ZXIubG9naWMgJiYgZmlsdGVyLmZpbHRlcnMpIHtcclxuICAgICAgICAgICAgZmlsdGVyLmZpbHRlcnMuZm9yRWFjaChmID0+IHRoaXMuZGVRdXlSZXBsYWNlVmFsdWUodG1wRmlsdGVyLmZpbHRlcnMsIGYsIG1vZGVsLCByb290TW9kZWwpKTtcclxuICAgICAgICAgICAgaWYgKHRtcEZpbHRlci5maWx0ZXJzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICAgIGZpbHRlcnMucHVzaCh0bXBGaWx0ZXIpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBmaWx0ZXJzLnB1c2godG1wRmlsdGVyKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0V29ya2Zsb3dDb3JlU3RhdHVzVGV4dCh3b3JrZmxvd0NvcmVTdGF0dXNWYWx1ZTogbnVtYmVyKSB7XHJcbiAgICAgICAgY29uc3QgaXRlbSA9IERhdGFTb3VyY2VXb3JrZmxvd0NvcmVTdGF0dXMuZmluZCh4ID0+IHguaWQgPT0gd29ya2Zsb3dDb3JlU3RhdHVzVmFsdWUpO1xyXG4gICAgICAgIGlmICghaXRlbSkgcmV0dXJuICcnO1xyXG4gICAgICAgIHJldHVybiBpdGVtLnRlbjtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGNyZWF0ZURyb3Bkb3duT3B0aW9uUmVmRmllbGQoc2NoZW1hOiBSZWZGaWVsZCkge1xyXG4gICAgICAgIHJldHVybiBuZXcgRHJvcGRvd25PcHRpb25zKHtcclxuICAgICAgICAgICAgZGlzcGxheUZpZWxkOiBzY2hlbWEuZGlzcGxheUZpZWxkLFxyXG4gICAgICAgICAgICB2YWx1ZUZpZWxkOiBzY2hlbWEudmFsdWVGaWVsZCxcclxuICAgICAgICAgICAgZmllbGRQbHVzOiBzY2hlbWEuZmllbGRQbHVzLFxyXG4gICAgICAgICAgICBmaWVsZFRyZWU6IHNjaGVtYS5maWVsZFRyZWUsXHJcbiAgICAgICAgICAgIGZpZWxkUGFyZW50VHJlZUl0ZW06IHNjaGVtYS5maWVsZFBhcmVudFRyZWVJdGVtLFxyXG4gICAgICAgICAgICBmdW5jR2V0TGFiZWw6IHNjaGVtYS5mdW5jR2V0TGFiZWwsXHJcbiAgICAgICAgICAgIHNvcnRGaWVsZDogc2NoZW1hLnNvcnRGaWVsZCxcclxuICAgICAgICAgICAgc29ydERpcjogc2NoZW1hLnNvcnREaXIsXHJcbiAgICAgICAgICAgIGNhbGxiYWNrRGF0YUZpbmlzaDogc2NoZW1hLmNhbGxiYWNrRGF0YUZpbmlzaFxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGdldFJlZkRhdGEoZGF0YVNvdXJjZTogYW55W10sIG9wdGlvbnM6IERyb3Bkb3duT3B0aW9ucyk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgICAgIGNvbnN0IF9ub3RpZmllclNlcnZpY2UgPSB0aGlzLl9pbmplY3Rvci5nZXQoTm90aWZpZXJTZXJ2aWNlKTtcclxuICAgICAgICBjb25zdCBfY29tbW9uU2VydmljZSA9IHRoaXMuX2luamVjdG9yLmdldChDb21tb25TZXJ2aWNlKTtcclxuICAgICAgICBpZiAob3B0aW9ucy5yZWZGaWVsZHMgJiYgb3B0aW9ucy5yZWZGaWVsZHMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICBjb25zdCBhcnJQcm9taXNlRG9udE5lZWRXYWl0ID0gW107XHJcbiAgICAgICAgICAgIGNvbnN0IGFyclNjaGVtYURvbnROZWVkV2FpdCA9IFtdO1xyXG4gICAgICAgICAgICBmb3IgKGNvbnN0IHNjaGVtYSBvZiBvcHRpb25zLnJlZkZpZWxkcykge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgZmllbGQgPSBzY2hlbWEuZmllbGQ7XHJcbiAgICAgICAgICAgICAgICBpZiAoc2NoZW1hLmJhc2VTZXJ2aWNlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgYXJyVmFsdWUgPSBbXTtcclxuICAgICAgICAgICAgICAgICAgICBkYXRhU291cmNlLmZvckVhY2goaXRlbURhdGEgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjdXJyZW50VmFsdWUgPSBpdGVtRGF0YVtmaWVsZF07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjdXJyZW50VmFsdWUgIT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNjaGVtYS5tdWx0aXBsZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBpZHMgPSBjdXJyZW50VmFsdWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KGlkcykpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWRzID0gaWRzLnNwbGl0KCcsJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkcy5mb3JFYWNoKGlkID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFhcnJWYWx1ZS5zb21lKHAgPT4gcCA9PSBpZCkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyclZhbHVlLnB1c2goaWQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmICghYXJyVmFsdWUuc29tZShwID0+IHAgPT0gY3VycmVudFZhbHVlKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyclZhbHVlLnB1c2goY3VycmVudFZhbHVlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChhcnJWYWx1ZS5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBwcm9taXNlID0gbnVsbDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNjaGVtYS5iYXNlU2VydmljZSBpbnN0YW5jZW9mIE1hc3RlckRhdGFTZXJ2aWNlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9taXNlID0gc2NoZW1hLmJhc2VTZXJ2aWNlLmdldERhdGFEcm9wZG93bihcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzY2hlbWEuZ3JvdXBDb2RlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCBhcnJWYWx1ZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgdGhpcy5jcmVhdGVEcm9wZG93bk9wdGlvblJlZkZpZWxkKHNjaGVtYSkpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvbWlzZSA9IHNjaGVtYS5iYXNlU2VydmljZS5nZXREYXRhRHJvcGRvd25CeUZpbHRlcihcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbX2NvbW1vblNlcnZpY2UubmV3RmlsdGVyKHNjaGVtYS52YWx1ZUZpZWxkLCBPcGVyYXRvci5pbiwgYXJyVmFsdWUpXSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNyZWF0ZURyb3Bkb3duT3B0aW9uUmVmRmllbGQoc2NoZW1hKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoc2NoZW1hLm9yZGVyICE9IG51bGwpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHByb21pc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm1lcmdlUmVmRGF0YVRvRGF0YXNvdXJjZShkYXRhU291cmNlLCBzY2hlbWEsIHJlc3VsdCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcnJQcm9taXNlRG9udE5lZWRXYWl0LnB1c2gocHJvbWlzZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcnJTY2hlbWFEb250TmVlZFdhaXQucHVzaChzY2hlbWEpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFzY2hlbWEuZGF0YVNvdXJjZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBfbm90aWZpZXJTZXJ2aWNlLnNob3dXYXJuaW5nKCdD4bqldSBow6xuaCBSZWZGaWVsZCBwaOG6o2kgY8OzIGRhdGFTb3VyY2UgaG/hurdjIGJhc2VTZXJ2aWNlJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGxldCBmdW5jR2V0TGFiZWwgPSBpdGVtID0+IGl0ZW1bc2NoZW1hLmRpc3BsYXlGaWVsZF0gfHwgaXRlbVsnbGFiZWwnXTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoc2NoZW1hLmZ1bmNHZXRMYWJlbCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBmdW5jR2V0TGFiZWwgPSBzY2hlbWEuZnVuY0dldExhYmVsO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBkYXRhU291cmNlLmZvckVhY2goaXRlbURhdGEgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCByZWZJdGVtID0gc2NoZW1hLmRhdGFTb3VyY2UuZmluZChpID0+IHNjaGVtYS5mdW5jQ29tcGFyZShpLCBpdGVtRGF0YVtmaWVsZF0pKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlZkl0ZW0gIT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbURhdGFbJ3N0cicgKyBmaWVsZF0gPSBmdW5jR2V0TGFiZWwocmVmSXRlbSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAoYXJyUHJvbWlzZURvbnROZWVkV2FpdC5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBhcnJSZXMgPSBhd2FpdCBQcm9taXNlLmFsbChhcnJQcm9taXNlRG9udE5lZWRXYWl0KTtcclxuICAgICAgICAgICAgICAgIGFyclNjaGVtYURvbnROZWVkV2FpdC5mb3JFYWNoKChzY2hlbWEsIGluZGV4KSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5tZXJnZVJlZkRhdGFUb0RhdGFzb3VyY2UoZGF0YVNvdXJjZSwgc2NoZW1hLCBhcnJSZXNbaW5kZXhdKTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgbWVyZ2VSZWZEYXRhVG9EYXRhc291cmNlKGRhdGFTb3VyY2U6IGFueVtdLCBzY2hlbWE6IFJlZkZpZWxkLCBkYXRhOiBhbnlbXSkge1xyXG4gICAgICAgIGNvbnN0IGZpZWxkID0gc2NoZW1hLmZpZWxkO1xyXG4gICAgICAgIGxldCBmdW5jR2V0TGFiZWwgPSBpdGVtID0+IGl0ZW1bc2NoZW1hLmRpc3BsYXlGaWVsZF0gfHwgaXRlbVsnbGFiZWwnXTtcclxuICAgICAgICBpZiAoc2NoZW1hLmZ1bmNHZXRMYWJlbCkge1xyXG4gICAgICAgICAgICBmdW5jR2V0TGFiZWwgPSBzY2hlbWEuZnVuY0dldExhYmVsO1xyXG4gICAgICAgIH1cclxuICAgICAgICBsZXQgZnVuY1NldFZhbHVlUm93ID0gKHJvd0l0ZW0sIGRhdGEpID0+IHsgfTtcclxuICAgICAgICBsZXQgZnVuY0dldFJlZkRhdGFSb3cgPSAocmVmSXRlbXMpID0+IHtcclxuICAgICAgICAgICAgcmV0dXJuIHJlZkl0ZW1zLm1hcChpdGVtID0+IGZ1bmNHZXRMYWJlbChpdGVtKSkuam9pbihgJHtzY2hlbWEuc2VwYXJhdG9yfSBgKTtcclxuICAgICAgICB9O1xyXG4gICAgICAgIGlmIChzY2hlbWEuZnVuY1NldFZhbHVlUm93KSB7XHJcbiAgICAgICAgICAgIGZ1bmNTZXRWYWx1ZVJvdyA9IHNjaGVtYS5mdW5jU2V0VmFsdWVSb3c7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChzY2hlbWEuZnVuY0dldFJlZkRhdGFSb3cpIHtcclxuICAgICAgICAgICAgZnVuY0dldFJlZkRhdGFSb3cgPSBzY2hlbWEuZnVuY0dldFJlZkRhdGFSb3c7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChzY2hlbWEubXVsdGlwbGUpIHtcclxuICAgICAgICAgICAgZGF0YVNvdXJjZS5mb3JFYWNoKGl0ZW1EYXRhID0+IHtcclxuICAgICAgICAgICAgICAgIGlmIChpdGVtRGF0YVtmaWVsZF0gIT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCBpZHMgPSBpdGVtRGF0YVtmaWVsZF07XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KGlkcykpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWRzID0gaWRzLnNwbGl0KCcsJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlZkl0ZW1zID0gZGF0YS5maWx0ZXIoaSA9PiBpZHMuc29tZShxID0+IHNjaGVtYS5mdW5jQ29tcGFyZShpLCBxKSkpO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChyZWZJdGVtcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW1EYXRhWydzdHInICsgZmllbGRdID0gZnVuY0dldFJlZkRhdGFSb3cocmVmSXRlbXMpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBmdW5jU2V0VmFsdWVSb3coaXRlbURhdGEsIHJlZkl0ZW1zKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgZGF0YVNvdXJjZS5mb3JFYWNoKGl0ZW1EYXRhID0+IHtcclxuICAgICAgICAgICAgICAgIGlmIChpdGVtRGF0YVtmaWVsZF0gIT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlZkl0ZW0gPSBkYXRhLmZpbmQoaSA9PiBzY2hlbWEuZnVuY0NvbXBhcmUoaSwgaXRlbURhdGFbZmllbGRdKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJlZkl0ZW0gIT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpdGVtRGF0YVsnc3RyJyArIGZpZWxkXSA9IGZ1bmNHZXRMYWJlbChyZWZJdGVtKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZnVuY1NldFZhbHVlUm93KGl0ZW1EYXRhLCByZWZJdGVtKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbn1cclxuIl19
781
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3J1ZC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6Ii4uLy4uLy4uLy4uL3Byb2plY3RzL3RueC1zaGFyZWQvc3JjL2xpYi8iLCJzb3VyY2VzIjpbInNlcnZpY2VzL2NydWQuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzNDLE9BQU8sRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3JELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBRXZELE9BQU8sRUFBRSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDekUsT0FBTyxFQUF5QixlQUFlLEVBQW9CLFFBQVEsRUFBNEIsTUFBTSx3QkFBd0IsQ0FBQztBQUN0SSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDM0QsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHVDQUF1QyxDQUFDO0FBQ3hFLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUU3QyxPQUFPLEVBQUUsNEJBQTRCLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUNuRixPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDakQsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDMUQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLG9CQUFvQixDQUFDOzs7OztBQUtyRCxNQUFNLE9BQU8sV0FBVztJQUNwQixZQUNZLFNBQW1CLEVBQ25CLGlCQUFtQyxFQUNuQyxRQUFrQixFQUNsQixnQkFBaUM7UUFIakMsY0FBUyxHQUFULFNBQVMsQ0FBVTtRQUNuQixzQkFBaUIsR0FBakIsaUJBQWlCLENBQWtCO1FBQ25DLGFBQVEsR0FBUixRQUFRLENBQVU7UUFDbEIscUJBQWdCLEdBQWhCLGdCQUFnQixD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Q047SUFDTCxDQUFDOzs7O1lBL3lCSixVQUFVLFNBQUM7Z0JBQ1IsVUFBVSxFQUFFLE1BQU07YUFDckI7OztZQWhCb0IsUUFBUTtZQUNwQixnQkFBZ0I7WUFGaEIsUUFBUTtZQWFSLGVBQWUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEYXRlUGlwZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XHJcbmltcG9ydCB7IEluamVjdGFibGUsIEluamVjdG9yIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IFRyYW5zbGF0ZVNlcnZpY2UgfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcclxuaW1wb3J0IHsgVHJlZU5vZGUgfSBmcm9tICd0bi1jdXN0b20tcHJpbWVuZy9hcGknO1xyXG5pbXBvcnQgeyBpc0FycmF5LCBpc0xpdGVyYWxPYmplY3QgfSBmcm9tICcuLi9jbGFzc2VzL2Vudmlyb25tZW50LXNjaGVtYSc7XHJcbmltcG9ydCB7IERyb3Bkb3duQ29udHJvbFNjaGVtYSwgRHJvcGRvd25PcHRpb25zLCBHZXRSZWZEYXRhU2NoZW1hLCBPcGVyYXRvciwgUmVmRmllbGQsIFRyZWVEYXRhT3B0aW9uIH0gZnJvbSAnLi4vY2xhc3Nlcy9mb3JtLXNjaGVtYSc7XHJcbmltcG9ydCB7IFZhbGlkYXRpb24gfSBmcm9tICcuLi9jb25maWdzL2NvbXBvbmVudC1jb250YW50cyc7XHJcbmltcG9ydCB7IENvbUN0eENvbnN0YW50cyB9IGZyb20gJy4uL2NvbmZpZ3MvY29tcG9uZW50LWNvbnRleHQuY29uc3RhbnQnO1xyXG5pbXBvcnQgeyBGaWx0ZXIgfSBmcm9tICcuLi9tb2RlbHMvZ3JpZC1pbmZvJztcclxuaW1wb3J0IHsgUmVzcG9uc2VSZXN1bHQgfSBmcm9tICcuLi9tb2RlbHMvcmVzcG9uc2UtcmVzdWx0JztcclxuaW1wb3J0IHsgRGF0YVNvdXJjZVdvcmtmbG93Q29yZVN0YXR1cyB9IGZyb20gJy4uL21vZGVscy93b3JrZmxvdy1jb3JlLXN0YXR1cy5lbnVtJztcclxuaW1wb3J0IHsgQ29tbW9uU2VydmljZSB9IGZyb20gJy4vY29tbW9uLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBNYXN0ZXJEYXRhU2VydmljZSB9IGZyb20gJy4vbWFzdGVyLWRhdGEuc2VydmljZSc7XHJcbmltcG9ydCB7IE5vdGlmaWVyU2VydmljZSB9IGZyb20gJy4vbm90aWZpZXIuc2VydmljZSc7XHJcblxyXG5ASW5qZWN0YWJsZSh7XHJcbiAgICBwcm92aWRlZEluOiAncm9vdCcsXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBDcnVkU2VydmljZSB7XHJcbiAgICBjb25zdHJ1Y3RvcihcclxuICAgICAgICBwcml2YXRlIF9pbmplY3RvcjogSW5qZWN0b3IsXHJcbiAgICAgICAgcHJpdmF0ZSBfdHJhbnNsYXRlU2VydmljZTogVHJhbnNsYXRlU2VydmljZSxcclxuICAgICAgICBwcml2YXRlIGRhdGVQaXBlOiBEYXRlUGlwZSxcclxuICAgICAgICBwcml2YXRlIF9ub3RpZmllclNlcnZpY2U6IE5vdGlmaWVyU2VydmljZVxyXG4gICAgKSB7IH1cclxuXHJcbiAgICByZW5kZXJEYXRlVGltZShkYXRldGltZSwgZm9ybWF0OiAnbm9ybWFsJyB8ICdmcm9tTm93JyA9ICdmcm9tTm93Jykge1xyXG4gICAgICAgIGlmICghZGF0ZXRpbWUpIHJldHVybiAnJztcclxuICAgICAgICBpZiAodHlwZW9mIGRhdGV0aW1lID09PSAnc3RyaW5nJykge1xyXG4gICAgICAgICAgICBkYXRldGltZSA9IG5ldyBEYXRlKGRhdGV0aW1lICsgJycpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKGZvcm1hdCA9PT0gJ25vcm1hbCcpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZGF0ZVBpcGUudHJhbnNmb3JtKGRhdGV0aW1lLCAnZGQvTU0veXl5eSBISDptbScpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29uc3Qgbm93OiBhbnkgPSBuZXcgRGF0ZSgpO1xyXG4gICAgICAgIGNvbnN0IG1pbGlzZWNvbmQgPSBub3cgLSBkYXRldGltZTtcclxuICAgICAgICBsZXQgdGV4dDEgPSAndHLGsOG7m2MnLCB0ZXh0MiA9ICdIw7RtIHF1YSc7XHJcbiAgICAgICAgaWYgKG1pbGlzZWNvbmQgPCAwKSB7XHJcbiAgICAgICAgICAgIHRleHQxID0gJ27hu69hJywgdGV4dDIgPSAnTmfDoHkgbWFpJztcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKG1pbGlzZWNvbmQgPCAzMDAwMCkge1xyXG4gICAgICAgICAgICAvLyAzMCBnacOieVxyXG4gICAgICAgICAgICByZXR1cm4gYFbDoGkgZ2nDonkgJHt0ZXh0MX1gO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAobWlsaXNlY29uZCA8IDkwMDAwKSB7XHJcbiAgICAgICAgICAgIC8vIDMwIGdpw6J5IC0gOTAgZ2nDonlcclxuICAgICAgICAgICAgcmV0dXJuIGBN4buZdCBwaMO6dCAke3RleHQxfWA7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChtaWxpc2Vjb25kIDwgMzAwMDAwKSB7XHJcbiAgICAgICAgICAgIC8vIDUgcGjDunRcclxuICAgICAgICAgICAgcmV0dXJuIGBWw6BpIHBow7p0ICR7dGV4dDF9YDtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKG1pbGlzZWNvbmQgPCAzNjAwMDAwKSB7XHJcbiAgICAgICAgICAgIC8vIGTGsOG7m2kgMSB0aeG6v25nXHJcbiAgICAgICAgICAgIHJldHVybiBgJHtNYXRoLmNlaWwobWlsaXNlY29uZCAvIDYwMDAwKX0gcGjDunQgJHt0ZXh0MX1gO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAobWlsaXNlY29uZCA8IDE4MDAwMDAwKSB7XHJcbiAgICAgICAgICAgIC8vIGTGsOG7m2kgNSB0aeG6v25nXHJcbiAgICAgICAgICAgIHJldHVybiBgVsOgaSBnaeG7nSAke3RleHQxfWA7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChtaWxpc2Vjb25kIDwgODY0MDAwMDApIHtcclxuICAgICAgICAgICAgLy8gZMaw4bubaSAxIG5nw6B5XHJcbiAgICAgICAgICAgIGlmIChkYXRldGltZS5nZXREYXRlKCkgPT0gbm93LmdldERhdGUoKSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGAke01hdGguY2VpbChtaWxpc2Vjb25kIC8gMzYwMDAwMCl9IGdp4budICR7dGV4dDF9YDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gYCR7dGV4dDJ9IGzDumMgJHt0aGlzLmRhdGVQaXBlLnRyYW5zZm9ybShkYXRldGltZSwgJ0hIOm1tJyl9YDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbnN0IHRleHRIb3VyQW5kTWludXRlID0gYCBsw7pjICR7dGhpcy5kYXRlUGlwZS50cmFuc2Zvcm0oZGF0ZXRpbWUsICdISDptbScpfWA7XHJcbiAgICAgICAgaWYgKGRhdGV0aW1lLmdldFllYXIoKSA9PSBub3cuZ2V0WWVhcigpXHJcbiAgICAgICAgICAgICYmIGRhdGV0aW1lLmdldE1vbnRoKCkgPT0gbm93LmdldE1vbnRoKClcclxuICAgICAgICApIHtcclxuICAgICAgICAgICAgY29uc3QgZGF0ZURpZmYgPSBub3cuZ2V0RGF0ZSgpIC0gZGF0ZXRpbWUuZ2V0RGF0ZSgpO1xyXG4gICAgICAgICAgICBpZiAoZGF0ZURpZmYgPT0gMSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGAke3RleHQyfSR7dGV4dEhvdXJBbmRNaW51dGV9YDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAoZGF0ZURpZmYgPT0gMikge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGBIYWkgbmfDoHkgJHt0ZXh0MX0ke3RleHRIb3VyQW5kTWludXRlfWA7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKGRhdGVEaWZmID09IDMpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBgQmEgbmfDoHkgJHt0ZXh0MX0ke3RleHRIb3VyQW5kTWludXRlfWA7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZGF0ZVBpcGUudHJhbnNmb3JtKFxyXG4gICAgICAgICAgICBkYXRldGltZSxcclxuICAgICAgICAgICAgJ2RkL01NL3l5eXkgSEg6bW0nXHJcbiAgICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICByZW5kZXJEYXRlKGRhdGV0aW1lLCBmb3JtYXQ6ICdub3JtYWwnIHwgJ2Zyb21Ob3cnID0gJ25vcm1hbCcpIHtcclxuICAgICAgICBpZiAoIWRhdGV0aW1lKSByZXR1cm4gJyc7XHJcbiAgICAgICAgaWYgKHR5cGVvZiBkYXRldGltZSA9PT0gJ3N0cmluZycpIHtcclxuICAgICAgICAgICAgZGF0ZXRpbWUgPSBuZXcgRGF0ZShkYXRldGltZSArICcnKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChmb3JtYXQgPT09ICdub3JtYWwnKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmRhdGVQaXBlLnRyYW5zZm9ybShkYXRldGltZSwgJ2RkL01NL3l5eXknKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbnN0IG5vdzogYW55ID0gbmV3IERhdGUoKTtcclxuICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgIGRhdGV0aW1lLmdldE1vbnRoKCkgPT0gbm93LmdldE1vbnRoKClcclxuICAgICAgICAgICAgJiYgZGF0ZXRpbWUuZ2V0WWVhcigpID09IG5vdy5nZXRZZWFyKClcclxuICAgICAgICApIHtcclxuICAgICAgICAgICAgY29uc3QgZGF5cyA9IGRhdGV0aW1lLmdldERhdGUoKSAtIG5vdy5nZXREYXRlKCk7XHJcbiAgICAgICAgICAgIGlmIChkYXlzID09IDApIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiAnSMO0bSBuYXknO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2UgaWYgKGRheXMgPT0gMSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuICdOZ8OgeSBtYWknO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2UgaWYgKGRheXMgPT0gLTEpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiAnSMO0bSBxdWEnO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2UgaWYgKGRheXMgPT0gMikge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuICdIYWkgbmfDoHkgbuG7r2EnO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2UgaWYgKGRheXMgPT0gLTIpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiAnSGFpIG5nw6B5IHRyxrDhu5tjJztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIGlmIChkYXlzID09IDMpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiAnQmEgbmfDoHkgbuG7r2EnO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2UgaWYgKGRheXMgPT0gLTMpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiAnQmEgbmfDoHkgdHLGsOG7m2MnO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0aGlzLmRhdGVQaXBlLnRyYW5zZm9ybShkYXRldGltZSwgJ2RkL01NL3l5eXknKTtcclxuICAgIH1cclxuXHJcbiAgICBoaWRlQ29udHJvbEFuZExhYmVsKCkgeyB9XHJcblxyXG4gICAgYnVpbGRGaWx0ZXIoZmllbGQ6IHN0cmluZywgb3BlcmF0b3I6IE9wZXJhdG9yLCB2YWx1ZTogc3RyaW5nKTogRmlsdGVyIHtcclxuICAgICAgICByZXR1cm4gbmV3IEZpbHRlcih7IGZpZWxkLCBvcGVyYXRvciwgdmFsdWUgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgYnVpbGRGaWx0ZXJEYXRlKGZpZWxkOiBzdHJpbmcsIG9wZXJhdG9yOiBPcGVyYXRvciwgdmFsdWU6IERhdGUpOiBGaWx0ZXIge1xyXG4gICAgICAgIHJldHVybiBuZXcgRmlsdGVyKHsgZmllbGQsIG9wZXJhdG9yLCB2YWx1ZTogdGhpcy5nZXREYXRlKHZhbHVlKSB9KTtcclxuICAgIH1cclxuXHJcbiAgICBnZXREYXRlKHZhbHVlOiBEYXRlKTogc3RyaW5nIHtcclxuICAgICAgICByZXR1cm4gYCR7dmFsdWUuZ2V0RGF0ZSgpfS8ke3ZhbHVlLmdldE1vbnRoKCkgKyAxfS8ke3ZhbHVlLmdldEZ1bGxZZWFyKCl9YDtcclxuICAgIH1cclxuXHJcbiAgICBidWlsZEZpbHRlckRhdGVJbkxpc3RSYW5nZShmaWVsZDogc3RyaW5nLCBhcnJNaW5NYXg6IERhdGVbXVtdLCBvcGVyYXRvckxlZnQ6IHN0cmluZyA9ICdndGUnLCBvcGVyYXRvclJpZ2h0OiBzdHJpbmcgPSAnbHRlJyk6IEZpbHRlciB7XHJcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gbmV3IEZpbHRlcih7XHJcbiAgICAgICAgICAgIGxvZ2ljOiAnb3InLFxyXG4gICAgICAgICAgICBmaWx0ZXJzOiBbXVxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGFyck1pbk1heC5mb3JFYWNoKG1pbk1heCA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IHN0clN0YXJ0ID0gdGhpcy5nZXRTdHJpbmdEYXRlVmFsdWUobWluTWF4WzBdKTtcclxuICAgICAgICAgICAgY29uc3Qgc3RyRW5kID0gdGhpcy5nZXRTdHJpbmdEYXRlVmFsdWUobWluTWF4WzFdKTtcclxuICAgICAgICAgICAgcmVzdWx0LmZpbHRlcnMucHVzaChcclxuICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICBsb2dpYzogJ2FuZCcsXHJcbiAgICAgICAgICAgICAgICAgICAgZmlsdGVyczogW1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmJ1aWxkRmlsdGVyKGZpZWxkLCBPcGVyYXRvci5ncmVhdGVyVGhhbkVxdWFsLCBzdHJTdGFydCksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYnVpbGRGaWx0ZXIoZmllbGQsIE9wZXJhdG9yLmxvd2VyVGhhbkVxdWFsLCBzdHJFbmQpXHJcbiAgICAgICAgICAgICAgICAgICAgXVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgfVxyXG5cclxuICAgIGdldFN0cmluZ0RhdGVWYWx1ZSh2YWx1ZTogRGF0ZSkge1xyXG4gICAgICAgIHJldHVybiBgJHt2YWx1ZS5nZXRVVENEYXRlKCl9LyR7dmFsdWUuZ2V0VVRDTW9udGgoKSArIDF9LyR7dmFsdWUuZ2V0VVRDRnVsbFllYXIoKX0gJHt2YWx1ZS5nZXRVVENIb3VycygpfToke3ZhbHVlLmdldFVUQ01pbnV0ZXMoKX06JHt2YWx1ZS5nZXRVVENTZWNvbmRzKCl9YDtcclxuICAgIH1cclxuXHJcbiAgICBidWlsZE11bHRpRmlsdGVyQ29udGFpbnMoZmllbGRzOiBzdHJpbmdbXSwgdmFsdWU6IHN0cmluZyk6IEZpbHRlciB7XHJcbiAgICAgICAgY29uc3QgZmlsdGVyID0gbmV3IEZpbHRlcih7IGxvZ2ljOiAnb3InLCBmaWx0ZXJzOiBbXSB9KTtcclxuICAgICAgICBmaWVsZHMuZm9yRWFjaChmaWVsZCA9PiB7XHJcbiAgICAgICAgICAgIGZpbHRlci5maWx0ZXJzLnB1c2gobmV3IEZpbHRlcih7XHJcbiAgICAgICAgICAgICAgICBmaWVsZCxcclxuICAgICAgICAgICAgICAgIG9wZXJhdG9yOiBPcGVyYXRvci5jb250YWluLFxyXG4gICAgICAgICAgICAgICAgdmFsdWVcclxuICAgICAgICAgICAgfSkpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHJldHVybiBmaWx0ZXI7XHJcbiAgICB9XHJcblxyXG4gICAgYnVpbGRGaWx0ZXJDb250YWluTXVsdGlWYWx1ZXMoZmllbGQ6IHN0cmluZywgdmFsdWVzOiBzdHJpbmdbXSk6IEZpbHRlciB7XHJcbiAgICAgICAgY29uc3QgZmlsdGVyID0gbmV3IEZpbHRlcih7IGxvZ2ljOiAnb3InLCBmaWx0ZXJzOiBbXSB9KTtcclxuICAgICAgICB2YWx1ZXMuZm9yRWFjaCh2YWx1ZSA9PiB7XHJcbiAgICAgICAgICAgIGZpbHRlci5maWx0ZXJzLnB1c2gobmV3IEZpbHRlcih7XHJcbiAgICAgICAgICAgICAgICBmaWVsZCxcclxuICAgICAgICAgICAgICAgIG9wZXJhdG9yOiBPcGVyYXRvci5jb250YWluLFxyXG4gICAgICAgICAgICAgICAgdmFsdWVcclxuICAgICAgICAgICAgfSkpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHJldHVybiBmaWx0ZXI7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBjcmVhdGVEcm9wZG93bk9wdGlvbnMoc2NoZW1hOiBEcm9wZG93bkNvbnRyb2xTY2hlbWEpIHtcclxuICAgICAgICByZXR1cm4gbmV3IERyb3Bkb3duT3B0aW9ucyh7XHJcbiAgICAgICAgICAgIGZpZWxkUGFyZW50VHJlZUl0ZW06IHNjaGVtYS5maWVsZFBhcmVudFRyZWVJdGVtLFxyXG4gICAgICAgICAgICBkaXNwbGF5RmllbGQ6IHNjaGVtYS5kaXNwbGF5RmllbGQsXHJcbiAgICAgICAgICAgIHZhbHVlRmllbGQ6IHNjaGVtYS52YWx1ZUZpZWxkLFxyXG4gICAgICAgICAgICBmaWVsZFBsdXM6IHNjaGVtYS5maWVsZFBsdXMsXHJcbiAgICAgICAgICAgIGZpZWxkVHJlZTogc2NoZW1hLmZpZWxkVHJlZSxcclxuICAgICAgICAgICAgZnVuY0dldExhYmVsOiBzY2hlbWEuZnVuY0dldExhYmVsLFxyXG4gICAgICAgICAgICBzb3J0czogc2NoZW1hLnNvcnRzLFxyXG4gICAgICAgICAgICBzb3J0RmllbGQ6IHNjaGVtYS5zb3J0RmllbGQsXHJcbiAgICAgICAgICAgIHNvcnREaXI6IHNjaGVtYS5zb3J0RGlyLFxyXG4gICAgICAgICAgICBwbHVzVXJsOiBzY2hlbWEucGx1c1VybCxcclxuICAgICAgICAgICAgY2FsbGJhY2tEYXRhRmluaXNoOiBzY2hlbWEuY2FsbGJhY2tEYXRhRmluaXNoLFxyXG4gICAgICAgICAgICAvLyBUT0RPOiBD4bqnbiDEkWnhu4FuIHbDoG8ga2jDtG5nIGPDsyBs4buXaSBraMO0bmcgY2jhuqF5IMSRxrDhu6NjXHJcbiAgICAgICAgICAgIHNlbGVjdENoaWxkSXRlbTogbnVsbCxcclxuICAgICAgICAgICAgcGFnZVNpemU6IG51bGxcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBnZXRSZWZEYXRhSW5EYXRhc291cmNlKGRhdGFTb3VyY2U6IGFueVtdLCBzY2hlbWFzOiBHZXRSZWZEYXRhU2NoZW1hW10pIHtcclxuICAgICAgICBpZiAoZGF0YVNvdXJjZS5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgIGlmIChzY2hlbWFzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICAgIHNjaGVtYXMuZm9yRWFjaChzY2hlbWEgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGZpZWxkID0gc2NoZW1hLmZpZWxkO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGFyclZhbHVlID0gW107XHJcbiAgICAgICAgICAgICAgICAgICAgZGF0YVNvdXJjZS5mb3JFYWNoKGl0ZW1EYXRhID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY3VycmVudFZhbHVlID0gaXRlbURhdGFbZmllbGRdO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoY3VycmVudFZhbHVlICE9IG51bGwgJiYgIWFyclZhbHVlLnNvbWUocCA9PiBwID09IGN1cnJlbnRWYWx1ZSkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyclZhbHVlLnB1c2goY3VycmVudFZhbHVlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChhcnJWYWx1ZS5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBwcm9taXNlID0gbnVsbDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNjaGVtYS5maWVsZFBsdXMgJiYgc2NoZW1hLmZpZWxkUGx1cy5sZW5ndGggPiAwICYmICFzY2hlbWEuZmllbGRQbHVzLnN0YXJ0c1dpdGgoJywnKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2NoZW1hLmZpZWxkUGx1cyA9ICcsJyArIHNjaGVtYS5maWVsZFBsdXM7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNjaGVtYS5iYXNlU2VydmljZSBpbnN0YW5jZW9mIE1hc3RlckRhdGFTZXJ2aWNlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9taXNlID0gc2NoZW1hLmJhc2VTZXJ2aWNlLmdldERhdGFEcm9wZG93bihcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzY2hlbWEuZ3JvdXBDb2RlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCBhcnJWYWx1ZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRPRE86IE5hbU5IIGZpeCB04bqhbSwga2jDtG5nIHRow6wgbOG7l2kga2jDtG5nIGJ1aWxkIMSRxrDhu6NjXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCB0aGlzLmNyZWF0ZURyb3Bkb3duT3B0aW9ucyg8YW55PnNjaGVtYSkpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvbWlzZSA9IHNjaGVtYS5iYXNlU2VydmljZS5nZXREYXRhRHJvcGRvd25CeUZpbHRlcihcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWVsZDogc2NoZW1hLnZhbHVlRmllbGQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wZXJhdG9yOiBPcGVyYXRvci5pbixcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGFyclZhbHVlLnRvU3RyaW5nKClcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBUT0RPOiBOYW1OSCBmaXggdOG6oW0sIGtow7RuZyB0aMOsIGzhu5dpIGtow7RuZyBidWlsZCDEkcaw4bujYyBzY2hlbWEgPT4gPGFueT5zY2hlbWFcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNyZWF0ZURyb3Bkb3duT3B0aW9ucyg8YW55PnNjaGVtYSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgcHJvbWlzZS50aGVuKHJlcyA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgZnVuY1NldFZhbHVlUm93OiBGdW5jdGlvbiA9IChyb3dJdGVtLCBkYXRhKSA9PiB7IH07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc2NoZW1hLmZ1bmNTZXRWYWx1ZVJvdykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmNTZXRWYWx1ZVJvdyA9IHNjaGVtYS5mdW5jU2V0VmFsdWVSb3c7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhU291cmNlLmZvckVhY2goaXRlbURhdGEgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlZkl0ZW0gPSByZXMuZmluZChpID0+IGkudmFsdWUgPT0gaXRlbURhdGFbZmllbGRdKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVmSXRlbSAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW1EYXRhWydzdHInICsgZmllbGRdID0gcmVmSXRlbS5sYWJlbDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnVuY1NldFZhbHVlUm93KGl0ZW1EYXRhLCByZWZJdGVtKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgc3BsaXRUb0xpc3ROdW1iZXIoc3RyOiBzdHJpbmcsIHNlcGFyYXRvcjogc3RyaW5nID0gJywnKTogbnVtYmVyW10ge1xyXG4gICAgICAgIHJldHVybiBzdHIuc3BsaXQoc2VwYXJhdG9yKS5tYXAoaXRlbSA9PiBOdW1iZXIoaXRlbSkpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1c2hBc2MoYXJyOiBhbnlbXSwgaXRlbTogYW55LCBmaWVsZE9yZGVyOiBzdHJpbmcpIHtcclxuICAgICAgICBpZiAoYXJyLmxlbmd0aCA9PSAwKSB7XHJcbiAgICAgICAgICAgIGFyci5wdXNoKGl0ZW0pO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGZvciAobGV0IGkgPSBhcnIubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcclxuICAgICAgICAgICAgaWYgKGl0ZW1bZmllbGRPcmRlcl0gPj0gYXJyW2ldW2ZpZWxkT3JkZXJdKSB7XHJcbiAgICAgICAgICAgICAgICBhcnIuc3BsaWNlKGkgKyAxLCAwLCBpdGVtKTtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBhcnIuc3BsaWNlKDAsIDAsIGl0ZW0pO1xyXG4gICAgfVxyXG5cclxuICAgIHB1c2hEZXNjKGFycjogYW55W10sIGl0ZW06IGFueSwgZmllbGRPcmRlcjogc3RyaW5nKSB7XHJcbiAgICAgICAgaWYgKGFyci5sZW5ndGggPT0gMCkge1xyXG4gICAgICAgICAgICBhcnIucHVzaChpdGVtKTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGFyci5sZW5ndGggLSAxOyBpKyspIHtcclxuICAgICAgICAgICAgaWYgKGl0ZW1bZmllbGRPcmRlcl0gPj0gYXJyW2ldW2ZpZWxkT3JkZXJdKSB7XHJcbiAgICAgICAgICAgICAgICBhcnIuc3BsaWNlKGksIDAsIGl0ZW0pO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGFyci5wdXNoKGl0ZW0pO1xyXG4gICAgfVxyXG5cclxuICAgIHB1c2hBc2NCeUZ1bmMoYXJyOiBhbnlbXSwgaXRlbTogYW55LCBmdW5jOiBGdW5jdGlvbik6IG51bWJlciB7XHJcbiAgICAgICAgaWYgKGFyci5sZW5ndGggPT0gMCkge1xyXG4gICAgICAgICAgICBhcnIucHVzaChpdGVtKTtcclxuICAgICAgICAgICAgcmV0dXJuIGFyci5sZW5ndGggLSAxO1xyXG4gICAgICAgIH1cclxuICAgICAgICBmb3IgKGxldCBpID0gYXJyLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XHJcbiAgICAgICAgICAgIGlmIChmdW5jKGl0ZW0pID49IGZ1bmMoYXJyW2ldKSkge1xyXG4gICAgICAgICAgICAgICAgYXJyLnNwbGljZShpICsgMSwgMCwgaXRlbSk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gaSArIDE7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgYXJyLnNwbGljZSgwLCAwLCBpdGVtKTtcclxuICAgICAgICByZXR1cm4gMDtcclxuICAgIH1cclxuXHJcbiAgICBwdXNoRGVzY0J5RnVuYyhhcnI6IGFueVtdLCBpdGVtOiBhbnksIGZ1bmM6IEZ1bmN0aW9uKSB7XHJcbiAgICAgICAgaWYgKGFyci5sZW5ndGggPT0gMCkge1xyXG4gICAgICAgICAgICBhcnIucHVzaChpdGVtKTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGFyci5sZW5ndGggLSAxOyBpKyspIHtcclxuICAgICAgICAgICAgaWYgKGZ1bmMoaXRlbSkgPj0gZnVuYyhhcnJbaV0pKSB7XHJcbiAgICAgICAgICAgICAgICBhcnIuc3BsaWNlKGksIDAsIGl0ZW0pO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGFyci5wdXNoKGl0ZW0pO1xyXG4gICAgfVxyXG5cclxuICAgIGdldFRyZWVUYWJsZURhdGFXaXRoT3JkZXIoZGF0YVNvdXJjZTogYW55W10sIGZpZWxkVHJlZTogc3RyaW5nLCBmaWVsZE9yZGVyOiBzdHJpbmcsXHJcbiAgICAgICAgdmFsdWVQYXJlbnRSb290OiBhbnkgPSAtMSwgZGlyT3JkZXI6IG51bWJlciA9IDEsIGxldmVsQ2xvc2U6IG51bWJlciA9IDk5OTksIG9wdGlvbnM6IGFueSA9IHt9XHJcbiAgICApOiBUcmVlTm9kZVtdIHtcclxuICAgICAgICBjb25zdCByZXN1bHQ6IFRyZWVOb2RlW10gPSBbXTtcclxuICAgICAgICBjb25zdCBmdW5jR2V0VmFsdWVPcmRlciA9IGl0ZW0gPT4ge1xyXG4gICAgICAgICAgICByZXR1cm4gaXRlbS5kYXRhW2ZpZWxkT3JkZXJdO1xyXG4gICAgICAgIH07XHJcbiAgICAgICAgZGF0YVNvdXJjZS5mb3JFYWNoKGl0ZW0gPT4ge1xyXG4gICAgICAgICAgICBpZiAoaXRlbVtmaWVsZFRyZWVdID09IHZhbHVlUGFyZW50Um9vdCkge1xyXG4gICAgICAgICAgICAgICAgY29uc3Qgcm9vdEl0ZW0gPSA8VHJlZU5vZGU+e1xyXG4gICAgICAgICAgICAgICAgICAgIGRhdGE6IGl0ZW0sXHJcbiAgICAgICAgICAgICAgICAgICAgbGV2ZWw6IDEsXHJcbiAgICAgICAgICAgICAgICAgICAgbGVhZjogdHJ1ZSxcclxuICAgICAgICAgICAgICAgICAgICBjaGlsZHJlbjogW11cclxuICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgICBpZiAoZGlyT3JkZXIgPT0gMSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucHVzaEFzY0J5RnVuYyhyZXN1bHQsIHJvb3RJdGVtLCBmdW5jR2V0VmFsdWVPcmRlcik7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnB1c2hEZXNjQnlGdW5jKHJlc3VsdCwgcm9vdEl0ZW0sIGZ1bmNHZXRWYWx1ZU9yZGVyKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGlmIChyb290SXRlbVsnbGV2ZWwnXSA+PSBsZXZlbENsb3NlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcm9vdEl0ZW0uZXhwYW5kZWQgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIHJvb3RJdGVtLmV4cGFuZGVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHRoaXMuZGVRdXlHZXRUcmVlVGFibGVEYXRhV2l0aE9yZGVyKHJvb3RJdGVtLCBkYXRhU291cmNlLCBmaWVsZFRyZWUsIGRpck9yZGVyLCBmdW5jR2V0VmFsdWVPcmRlciwgbGV2ZWxDbG9zZSwgb3B0aW9ucyk7XHJcbiAgICAgICAgICAgICAgICBpZiAocm9vdEl0ZW0uY2hpbGRyZW4ubGVuZ3RoID09IDApIHtcclxuICAgICAgICAgICAgICAgICAgICBkZWxldGUgcm9vdEl0ZW0uY2hpbGRyZW47XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBpZiAob3B0aW9ucy5tb2RpZnlUcmVlTm9kZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIG9wdGlvbnMubW9kaWZ5VHJlZU5vZGUocm9vdEl0ZW0sIGl0ZW0pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGRlUXV5R2V0VHJlZVRhYmxlRGF0YVdpdGhPcmRlcihub2RlUGFyZW50OiBUcmVlTm9kZSwgZGF0YVNvdXJjZTogYW55W10sIGZpZWxkVHJlZTogc3RyaW5nLFxyXG4gICAgICAgIGRpck9yZGVyOiBudW1iZXIsIGZ1bmNHZXRWYWx1ZU9yZGVyOiBGdW5jdGlvbiwgbGV2ZWxDbG9zZTogbnVtYmVyLCBvcHRpb25zOiBhbnkgPSB7fVxyXG4gICAgKSB7XHJcbiAgICAgICAgZGF0YVNvdXJjZS5mb3JFYWNoKGl0ZW0gPT4ge1xyXG4gICAgICAgICAgICBpZiAoaXRlbVtmaWVsZFRyZWVdID09IG5vZGVQYXJlbnQuZGF0YS5pZCkge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgaXRlbUNoaWxkcmVuID0gPFRyZWVOb2RlPntcclxuICAgICAgICAgICAgICAgICAgICBkYXRhOiBpdGVtLFxyXG4gICAgICAgICAgICAgICAgICAgIGxldmVsOiBub2RlUGFyZW50WydsZXZlbCddICsgMSxcclxuICAgICAgICAgICAgICAgICAgICBsZWFmOiB0cnVlLFxyXG4gICAgICAgICAgICAgICAgICAgIGNoaWxkcmVuOiBbXVxyXG4gICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICAgIGlmIChkaXJPcmRlciA9PSAxKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5wdXNoQXNjQnlGdW5jKG5vZGVQYXJlbnQuY2hpbGRyZW4sIGl0ZW1DaGlsZHJlbiwgZnVuY0dldFZhbHVlT3JkZXIpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5wdXNoRGVzY0J5RnVuYyhub2RlUGFyZW50LmNoaWxkcmVuLCBpdGVtQ2hpbGRyZW4sIGZ1bmNHZXRWYWx1ZU9yZGVyKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGlmIChpdGVtQ2hpbGRyZW5bJ2xldmVsJ10gPj0gbGV2ZWxDbG9zZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGl0ZW1DaGlsZHJlbi5leHBhbmRlZCA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaXRlbUNoaWxkcmVuLmV4cGFuZGVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHRoaXMuZGVRdXlHZXRUcmVlVGFibGVEYXRhV2l0aE9yZGVyKGl0ZW1DaGlsZHJlbiwgZGF0YVNvdXJjZSwgZmllbGRUcmVlLCBkaXJPcmRlciwgZnVuY0dldFZhbHVlT3JkZXIsIGxldmVsQ2xvc2UsIG9wdGlvbnMpO1xyXG4gICAgICAgICAgICAgICAgaWYgKGl0ZW1DaGlsZHJlbi5jaGlsZHJlbi5sZW5ndGggPT0gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBpdGVtQ2hpbGRyZW4uY2hpbGRyZW47XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBpZiAob3B0aW9ucy5tb2RpZnlUcmVlTm9kZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIG9wdGlvbnMubW9kaWZ5VHJlZU5vZGUoaXRlbUNoaWxkcmVuLCBpdGVtKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGdldFRyZWVUYWJsZURhdGEoZGF0YVNvdXJjZTogYW55W10sIGZpZWxkVHJlZTogc3RyaW5nLCB2YWx1ZVBhcmVudFJvb3Q6IGFueSA9IC0xLCBsZXZlbENsb3NlOiBudW1iZXIgPSA5OTk5LCBvcHRpb25zOiBhbnkgPSB7fSk6IFRyZWVOb2RlW10ge1xyXG4gICAgICAgIGNvbnN0IHJlc3VsdDogVHJlZU5vZGVbXSA9IFtdO1xyXG4gICAgICAgIGRhdGFTb3VyY2UuZm9yRWFjaChpdGVtID0+IHtcclxuICAgICAgICAgICAgaWYgKGl0ZW1bZmllbGRUcmVlXSA9PSB2YWx1ZVBhcmVudFJvb3QpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHJvb3RJdGVtID0gPFRyZWVOb2RlPntcclxuICAgICAgICAgICAgICAgICAgICBkYXRhOiBpdGVtLFxyXG4gICAgICAgICAgICAgICAgICAgIGxldmVsOiAxLFxyXG4gICAgICAgICAgICAgICAgICAgIGxlYWY6IHRydWUsXHJcbiAgICAgICAgICAgICAgICAgICAgY2hpbGRyZW46IFtdXHJcbiAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAgICAgcmVzdWx0LnB1c2gocm9vdEl0ZW0pO1xyXG4gICAgICAgICAgICAgICAgaWYgKHJvb3RJdGVtWydsZXZlbCddID49IGxldmVsQ2xvc2UpIHtcclxuICAgICAgICAgICAgICAgICAgICByb290SXRlbS5leHBhbmRlZCA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcm9vdEl0ZW0uZXhwYW5kZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgdGhpcy5kZVF1eUdldFRyZWVUYWJsZURhdGEocm9vdEl0ZW0sIGRhdGFTb3VyY2UsIGZpZWxkVHJlZSwgbGV2ZWxDbG9zZSwgb3B0aW9ucyk7XHJcbiAgICAgICAgICAgICAgICBpZiAocm9vdEl0ZW0uY2hpbGRyZW4ubGVuZ3RoID09IDApIHtcclxuICAgICAgICAgICAgICAgICAgICBkZWxldGUgcm9vdEl0ZW0uY2hpbGRyZW47XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBpZiAob3B0aW9ucy5tb2RpZnlUcmVlTm9kZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIG9wdGlvbnMubW9kaWZ5VHJlZU5vZGUocm9vdEl0ZW0sIGl0ZW0pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGRlUXV5R2V0VHJlZVRhYmxlRGF0YShub2RlUGFyZW50OiBUcmVlTm9kZSwgZGF0YVNvdXJjZTogYW55W10sIGZpZWxkVHJlZTogc3RyaW5nLCBsZXZlbENsb3NlOiBudW1iZXIsIG9wdGlvbnM6IGFueSA9IHt9KSB7XHJcbiAgICAgICAgZGF0YVNvdXJjZS5mb3JFYWNoKGl0ZW0gPT4ge1xyXG4gICAgICAgICAgICBpZiAoaXRlbVtmaWVsZFRyZWVdID09IG5vZGVQYXJlbnQuZGF0YS5pZCkge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgaXRlbUNoaWxkcmVuID0gPFRyZWVOb2RlPntcclxuICAgICAgICAgICAgICAgICAgICBkYXRhOiBpdGVtLFxyXG4gICAgICAgICAgICAgICAgICAgIGxldmVsOiBub2RlUGFyZW50WydsZXZlbCddICsgMSxcclxuICAgICAgICAgICAgICAgICAgICBsZWFmOiB0cnVlLFxyXG4gICAgICAgICAgICAgICAgICAgIGNoaWxkcmVuOiBbXVxyXG4gICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICAgIG5vZGVQYXJlbnQuY2hpbGRyZW4ucHVzaChpdGVtQ2hpbGRyZW4pO1xyXG4gICAgICAgICAgICAgICAgaWYgKGl0ZW1DaGlsZHJlblsnbGV2ZWwnXSA+PSBsZXZlbENsb3NlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaXRlbUNoaWxkcmVuLmV4cGFuZGVkID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBpdGVtQ2hpbGRyZW4uZXhwYW5kZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgdGhpcy5kZVF1eUdldFRyZWVUYWJsZURhdGEoaXRlbUNoaWxkcmVuLCBkYXRhU291cmNlLCBmaWVsZFRyZWUsIGxldmVsQ2xvc2UsIG9wdGlvbnMpO1xyXG4gICAgICAgICAgICAgICAgaWYgKGl0ZW1DaGlsZHJlbi5jaGlsZHJlbi5sZW5ndGggPT0gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBpdGVtQ2hpbGRyZW4uY2hpbGRyZW47XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBpZiAob3B0aW9ucy5tb2RpZnlUcmVlTm9kZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIG9wdGlvbnMubW9kaWZ5VHJlZU5vZGUoaXRlbUNoaWxkcmVuLCBpdGVtKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGdldFRyZWVEYXRhKGRhdGFTb3VyY2U6IGFueVtdLCBmaWVsZFRyZWU6IHN0cmluZywgb3B0aW9uOiBUcmVlRGF0YU9wdGlvbiwgdmFsdWVQYXJlbnRSb290OiBhbnkgPSAtMSwgbGV2ZWxDbG9zZTogbnVtYmVyID0gOTk5OSk6IFRyZWVOb2RlW10ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmdldFRyZWVUYWJsZURhdGEoZGF0YVNvdXJjZSwgZmllbGRUcmVlLCB2YWx1ZVBhcmVudFJvb3QsIGxldmVsQ2xvc2UsIHtcclxuICAgICAgICAgICAgbW9kaWZ5VHJlZU5vZGU6IChpdGVtVHJlZSwgaXRlbURhdGEpID0+IHtcclxuICAgICAgICAgICAgICAgIGl0ZW1UcmVlLmxhYmVsID0gaXRlbURhdGFbb3B0aW9uLmRpc3BsYXlGaWVsZF07XHJcbiAgICAgICAgICAgICAgICBpdGVtVHJlZS5leHBhbmRlZEljb24gPSBvcHRpb24uZXhwYW5kZWRJY29uO1xyXG4gICAgICAgICAgICAgICAgaXRlbVRyZWUuY29sbGFwc2VkSWNvbiA9IG9wdGlvbi5jb2xsYXBzZWRJY29uO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0VHJlZURhdGFXaXRoT3JkZXIoZGF0YVNvdXJjZTogYW55W10sIGZpZWxkVHJlZTogc3RyaW5nLCBmaWVsZE9yZGVyOiBzdHJpbmcsXHJcbiAgICAgICAgb3B0aW9uOiBUcmVlRGF0YU9wdGlvbiwgdmFsdWVQYXJlbnRSb290OiBhbnkgPSAtMSwgZGlyT3JkZXI6IG51bWJlciA9IDEsIGxldmVsQ2xvc2U6IG51bWJlciA9IDk5OTlcclxuICAgICk6IFRyZWVOb2RlW10ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmdldFRyZWVUYWJsZURhdGFXaXRoT3JkZXIoZGF0YVNvdXJjZSwgZmllbGRUcmVlLCBmaWVsZE9yZGVyLCB2YWx1ZVBhcmVudFJvb3QsIGRpck9yZGVyLCBsZXZlbENsb3NlLCB7XHJcbiAgICAgICAgICAgIG1vZGlmeVRyZWVOb2RlOiAoaXRlbVRyZWUsIGl0ZW1EYXRhKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBpdGVtVHJlZS5sYWJlbCA9IGl0ZW1EYXRhW29wdGlvbi5kaXNwbGF5RmllbGRdO1xyXG4gICAgICAgICAgICAgICAgaXRlbVRyZWUuc2hvcnRMYWJlbCA9IGl0ZW1EYXRhW29wdGlvbi5zaG9ydERpc3BsYXlGaWVsZF07XHJcbiAgICAgICAgICAgICAgICBpdGVtVHJlZS5leHBhbmRlZEljb24gPSBvcHRpb24uZXhwYW5kZWRJY29uO1xyXG4gICAgICAgICAgICAgICAgaXRlbVRyZWUuY29sbGFwc2VkSWNvbiA9IG9wdGlvbi5jb2xsYXBzZWRJY29uO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgY3JlYXRlR3VpZCgpIHtcclxuICAgICAgICByZXR1cm4gJ3h4eHh4eHh4LXh4eHgtNHh4eC15eHh4LXh4eHh4eHh4eHh4eCcucmVwbGFjZSgvW3h5XS9nLCBmdW5jdGlvbiAoYykge1xyXG4gICAgICAgICAgICBjb25zdCByID0gTWF0aC5yYW5kb20oKSAqIDE2IHwgMCwgdiA9IGMgPT09ICd4JyA/IHIgOiAociAmIDB4MyB8IDB4OCk7XHJcbiAgICAgICAgICAgIHJldHVybiB2LnRvU3RyaW5nKDE2KTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBHZXQgxJFp4buBdSBraeG7h24gdMOsbSBraeG6v20gbeG6t2MgxJHhu4tuaCAoQ+G6pXUgaMOsbmggaOG7hyDEkcOgbyB04bqhbywgbsSDbSBo4buNYywgaOG7jWMga+G7sylcclxuICAgIC8vIENo4buJIHPhu60gZOG7pW5nIGNobyBwaOG6p24gbeG7gW0gcXXhuqNuIGzDvSDEkcOgbyB04bqhb1xyXG4gICAgZ2V0RGVmYXVsdFNlYXJjaERhdGEoKSB7XHJcbiAgICAgICAgY29uc3QgbG9jYWxEYXRhID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oQ29tQ3R4Q29uc3RhbnRzLkxPQ0FMU1RPUkFHRV9LRVkuREVGQVVMVF9EQVRBKTtcclxuICAgICAgICBpZiAobG9jYWxEYXRhICE9IG51bGwgJiYgbG9jYWxEYXRhICE9ICcnKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBKU09OLnBhcnNlKGxvY2FsRGF0YSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB7fTtcclxuICAgIH1cclxuXHJcbiAgICBmb3JjZVNlbGVjdERlZmF1bHREYXRhKF9jb21wb25lbnQsIGNiKSB7XHJcbiAgICAgICAgX2NvbXBvbmVudC5kYXRhU2VhcmNoRGVmYXVsdCA9IHRoaXMuZ2V0RGVmYXVsdFNlYXJjaERhdGEoKTtcclxuICAgICAgICBpZiAoIV9jb21wb25lbnQuZGF0YVNlYXJjaERlZmF1bHQuaGVEYW9UYW9cclxuICAgICAgICAgICAgfHwgIV9jb21wb25lbnQuZGF0YVNlYXJjaERlZmF1bHQubmFtSG9jXHJcbiAgICAgICAgICAgIHx8ICFfY29tcG9uZW50LmRhdGFTZWFyY2hEZWZhdWx0LmhvY0t5XHJcbiAgICAgICAgKSB7XHJcbiAgICAgICAgICAgIF9jb21wb25lbnQubW9kZWwucmVhZHlUb0dldERhdGEgPSBmYWxzZTtcclxuICAgICAgICAgICAgX2NvbXBvbmVudC5yb290Q29udGV4dC5zdWJzY3JpYmUoQ29tQ3R4Q29uc3RhbnRzLlJPT1RfVVNNQVJULkNPTkZJR19EQVRBX0RFRkFVTFRfQ0xPU0VELCBmID0+IHtcclxuICAgICAgICAgICAgICAgIF9jb21wb25lbnQuZGF0YVNlYXJjaERlZmF1bHQgPSB0aGlzLmdldERlZmF1bHRTZWFyY2hEYXRhKCk7XHJcbiAgICAgICAgICAgICAgICBpZiAoIV9jb21wb25lbnQuZGF0YVNlYXJjaERlZmF1bHQuaGVEYW9UYW9cclxuICAgICAgICAgICAgICAgICAgICB8fCAhX2NvbXBvbmVudC5kYXRhU2VhcmNoRGVmYXVsdC5uYW1Ib2NcclxuICAgICAgICAgICAgICAgICAgICB8fCAhX2NvbXBvbmVudC5kYXRhU2VhcmNoRGVmYXVsdC5ob2NLeVxyXG4gICAgICAgICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5faW5qZWN0b3IuZ2V0KE5vdGlmaWVyU2VydmljZSkuc2hvd0Vycm9yKCdC4bqhbiBwaOG6o2kgY+G6pXUgaMOsbmggdGjDtG5nIHRpbiAoaOG7hyDEkcOgbyB04bqhbywgbsSDbSBo4buNYywgaOG7jWMga+G7sykgdHLGsOG7m2MnKTtcclxuICAgICAgICAgICAgICAgICAgICBfY29tcG9uZW50LnJvb3RDb250ZXh0LmZpcmVFdmVudChDb21DdHhDb25zdGFudHMuUk9PVF9VU01BUlQuU0hPV19DT05GSUdfREFUQV9ERUZBVUxUKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIF9jb21wb25lbnQucm9vdENvbnRleHQuZmlyZUV2ZW50KENvbUN0eENvbnN0YW50cy5ST09UX1VTTUFSVC5TSE9XX0NPTkZJR19EQVRBX0RFRkFVTFQpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmIChjYikge1xyXG4gICAgICAgICAgICBjYihfY29tcG9uZW50LmRhdGFTZWFyY2hEZWZhdWx0KTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgZm9yY2VTZWxlY3REZWZhdWx0RGF0YVdpdGhGaWVsZHMoX2NvbXBvbmVudCwgYXJyRmllbGQsIGFyckZpZWxkTmFtZSwgY2IpIHtcclxuICAgICAgICBpZiAoIWFyckZpZWxkIHx8IGFyckZpZWxkLmxlbmd0aCA9PSAwKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIF9jb21wb25lbnQuZGF0YVNlYXJjaERlZmF1bHQgPSB0aGlzLmdldERlZmF1bHRTZWFyY2hEYXRhKCk7XHJcbiAgICAgICAgbGV0IGVub3VnaEZpZWxkcyA9IHRydWU7XHJcbiAgICAgICAgYXJyRmllbGQuZm9yRWFjaChmaWVsZCA9PiB7XHJcbiAgICAgICAgICAgIGlmICghX2NvbXBvbmVudC5kYXRhU2VhcmNoRGVmYXVsdFtmaWVsZF0pIHtcclxuICAgICAgICAgICAgICAgIGVub3VnaEZpZWxkcyA9IGZhbHNlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIGlmICghZW5vdWdoRmllbGRzKSB7XHJcbiAgICAgICAgICAgIF9jb21wb25lbnQubW9kZWwucmVhZHlUb0dldERhdGEgPSBmYWxzZTtcclxuICAgICAgICAgICAgX2NvbXBvbmVudC5yb290Q29udGV4dC5zdWJzY3JpYmUoQ29tQ3R4Q29uc3RhbnRzLlJPT1RfVVNNQVJULkNPTkZJR19EQVRBX0RFRkFVTFRfQ0xPU0VELCBmID0+IHtcclxuICAgICAgICAgICAgICAgIF9jb21wb25lbnQuZGF0YVNlYXJjaERlZmF1bHQgPSB0aGlzLmdldERlZmF1bHRTZWFyY2hEYXRhKCk7XHJcbiAgICAgICAgICAgICAgICBlbm91Z2hGaWVsZHMgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgYXJyRmllbGQuZm9yRWFjaChmaWVsZCA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFfY29tcG9uZW50LmRhdGFTZWFyY2hEZWZhdWx0W2ZpZWxkXSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBlbm91Z2hGaWVsZHMgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIGlmICghZW5vdWdoRmllbGRzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5faW5qZWN0b3IuZ2V0KE5vdGlmaWVyU2VydmljZSkuc2hvd0Vycm9yKGBC4bqhbiBwaOG6o2kgY+G6pXUgaMOsbmggdGjDtG5nIHRpbiAoJHthcnJGaWVsZE5hbWUudG9TdHJpbmcoKX0pIHRyxrDhu5tjYCk7XHJcbiAgICAgICAgICAgICAgICAgICAgX2NvbXBvbmVudC5yb290Q29udGV4dC5maXJlRXZlbnQoQ29tQ3R4Q29uc3RhbnRzLlJPT1RfVVNNQVJULlNIT1dfQ09ORklHX0RBVEFfREVGQVVMVCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICBfY29tcG9uZW50LnJvb3RDb250ZXh0LmZpcmVFdmVudChDb21DdHhDb25zdGFudHMuUk9PVF9VU01BUlQuU0hPV19DT05GSUdfREFUQV9ERUZBVUxUKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAoY2IpIHtcclxuICAgICAgICAgICAgY2IoX2NvbXBvbmVudC5kYXRhU2VhcmNoRGVmYXVsdCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHJlc2V0RmllbGQobW9kZWwsIGFyckZpZWxkKSB7XHJcbiAgICAgICAgYXJyRmllbGQuZm9yRWFjaChmaWVsZCA9PiB7XHJcbiAgICAgICAgICAgIG1vZGVsLmRhdGFbZmllbGRdID0gbnVsbDtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBwcm9jZXNzRXJyb3JSZXNwb25zZShycykge1xyXG4gICAgICAgIHN3aXRjaCAocnMuZXJyb3IpIHtcclxuICAgICAgICAgICAgY2FzZSBWYWxpZGF0aW9uLkVSUl9CVVNJTkVTUzpcclxuICAgICAgICAgICAgICAgIHRoaXMuX25vdGlmaWVyU2VydmljZS5zaG93V2FybmluZyhycy5tZXNzYWdlKTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIFZhbGlkYXRpb24uRVJSX1NZU19ERVY6XHJcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhgX19fX19fX19fXyBFUlJfU1lTX0RFViBfX19fX19fX19fICA6ICR7cnMubWVzc2FnZX1gKTtcclxuICAgICAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgICAgICAgIHRoaXMuX25vdGlmaWVyU2VydmljZS5zaG93V2FybmluZygnVGhhbyB0w6FjIGNoxrBhIHRow6BuaCBjw7RuZy4gVnVpIGzDsm5nIHRo4butIGzhuqFpIHNhdSEnKTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBoYW5kbGVSZXNwb25zZShyZXM6IFJlc3BvbnNlUmVzdWx0LCBtZXNzYWdlPzogc3RyaW5nLCBjYWxsQmFjaz86IEZ1bmN0aW9uLCBjYWxsQmFja0Vycm9yPzogRnVuY3Rpb24pIHtcclxuICAgICAgICBpZiAoIXJlcy5zdWNjZXNzKSB7XHJcbiAgICAgICAgICAgIGlmIChyZXMuZXJyb3IgPT0gVmFsaWRhdGlvbi5FUlJfU1lTX0RFVikge1xyXG4gICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihyZXMubWVzc2FnZSk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9pbmplY3Rvci5nZXQoTm90aWZpZXJTZXJ2aWNlKS5zaG93V2FybmluZygnQ8OzIGzhu5dpIHjhuqN5IHJhLiBMacOqbiBo4buHIHF14bqjbiB0cuG7iyB2acOqbiDEkeG7gyBiaeG6v3QgdGjDqm0gY2hpIHRp4bq/dC4nKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGxldCBtZXNzID0gcmVzLmVycm9yO1xyXG4gICAgICAgICAgICAgICAgaWYgKHJlcy5tZXNzYWdlICE9IG51bGwgJiYgcmVzLm1lc3NhZ2UgIT0gJycpIG1lc3MgPSByZXMubWVzc2FnZTtcclxuICAgICAgICAgICAgICAgIHRoaXMuX2luamVjdG9yLmdldChOb3RpZmllclNlcnZpY2UpLnNob3dXYXJuaW5nKG1lc3MpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChjYWxsQmFja0Vycm9yKSBjYWxsQmFja0Vycm9yKHJlcyk7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKG1lc3NhZ2UpIHtcclxuICAgICAgICAgICAgdGhpcy5faW5qZWN0b3IuZ2V0KE5vdGlmaWVyU2VydmljZSkuc2hvd1N1Y2Nlc3MobWVzc2FnZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChjYWxsQmFjaykgY2FsbEJhY2socmVzKTtcclxuICAgIH1cclxuXHJcbiAgICBnZXRGaWx0ZXJGcm9tVGVtcGxhdGUodGVtcGxhdGVGaWx0ZXI6IEZpbHRlcltdLCBtb2RlbDogYW55LCByb290TW9kZWw/OiBhbnkpIHtcclxuICAgICAgICBjb25zdCByZXN1bHQgPSBbXTtcclxuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheSh0ZW1wbGF0ZUZpbHRlcikpIHtcclxuICAgICAgICAgICAgdGVtcGxhdGVGaWx0ZXIuZm9yRWFjaChmID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMuZGVRdXlSZXBsYWNlVmFsdWUocmVzdWx0LCBmLCBtb2RlbCwgcm9vdE1vZGVsKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLmRlUXV5UmVwbGFjZVZhbHVlKHJlc3VsdCwgdGVtcGxhdGVGaWx0ZXIsIG1vZGVsLCByb290TW9kZWwpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgZGVRdXlSZXBsYWNlVmFsdWUoZmlsdGVyczogRmlsdGVyW10sIGZpbHRlcjogRmlsdGVyLCBtb2RlbDogYW55LCByb290TW9kZWw/OiBhbnkpIHtcclxuICAgICAgICBsZXQgdmFsdWVGaWx0ZXIgPSBudWxsO1xyXG5cclxuICAgICAgICBjb25zdCBzb3VyY2VGaWVsZCA9IGZpbHRlci5zb3VyY2VGaWVsZDtcclxuICAgICAgICBjb25zdCBzdWJGaWVsZCA9IGZpbHRlci5zdWJGaWVsZDtcclxuICAgICAgICBjb25zdCBjYW5BY2Nlc3NTdWJGaWVsZCA9ICh2YWx1ZSkgPT4ge1xyXG4gICAgICAgICAgICByZXR1cm4gc3ViRmllbGQgIT0gbnVsbFxyXG4gICAgICAgICAgICAgICAgJiYgc3ViRmllbGQgIT09ICcnXHJcbiAgICAgICAgICAgICAgICAmJiAoaXNBcnJheSh2YWx1ZSkgfHwgaXNMaXRlcmFsT2JqZWN0KHZhbHVlKSk7XHJcbiAgICAgICAgfTtcclxuICAgICAgICBpZiAobW9kZWwuaGFzT3duUHJvcGVydHkoc291cmNlRmllbGQpKSB7XHJcbiAgICAgICAgICAgIHZhbHVlRmlsdGVyID0gbW9kZWxbc291cmNlRmllbGRdO1xyXG4gICAgICAgICAgICBpZiAoY2FuQWNjZXNzU3ViRmllbGQodmFsdWVGaWx0ZXIpKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoaXNBcnJheSh2YWx1ZUZpbHRlcikgJiYgdHlwZW9mIHN1YkZpZWxkID09PSAnc3RyaW5nJykge1xyXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlRmlsdGVyID0gdmFsdWVGaWx0ZXIubWFwKHggPT4geFtzdWJGaWVsZF0pO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICB2YWx1ZUZpbHRlciA9IHZhbHVlRmlsdGVyW3N1YkZpZWxkXTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmIChyb290TW9kZWwpIHtcclxuICAgICAgICAgICAgaWYgKHJvb3RNb2RlbC5oYXNPd25Qcm9wZXJ0eShzb3VyY2VGaWVsZCkpIHtcclxuICAgICAgICAgICAgICAgIHZhbHVlRmlsdGVyID0gcm9vdE1vZGVsW3NvdXJjZUZpZWxkXTtcclxuICAgICAgICAgICAgICAgIGlmIChjYW5BY2Nlc3NTdWJGaWVsZCh2YWx1ZUZpbHRlcikpIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoaXNBcnJheSh2YWx1ZUZpbHRlcikpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVGaWx0ZXIgPSB2YWx1ZUZpbHRlci5tYXAoeCA9PiB4W3N1YkZpZWxkXSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVGaWx0ZXIgPSB2YWx1ZUZpbHRlcltzdWJGaWVsZF07XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgZmllbGRzID0gc291cmNlRmllbGQuc3BsaXQoJy4nKTtcclxuICAgICAgICAgICAgICAgIGxldCB0ZW1wID0gcm9vdE1vZGVsO1xyXG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBmIG9mIGZpZWxkcykge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICh0ZW1wLmhhc093blByb3BlcnR5KGYpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRlbXAgPSB0ZW1wW2ZdO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGVtcCA9IG51bGw7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGlmIChjYW5BY2Nlc3NTdWJGaWVsZCh0ZW1wKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChpc0FycmF5KHRlbXApKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlRmlsdGVyID0gdGVtcC5tYXAoeCA9PiB4W3N1YkZpZWxkXSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVGaWx0ZXIgPSB0ZW1wW3N1YkZpZWxkXTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChmaWx0ZXIubG9naWMgPT0gbnVsbCAmJiAodmFsdWVGaWx0ZXIgPT0gbnVsbCB8fCB2YWx1ZUZpbHRlciA9PT0gJycgfHwgdmFsdWVGaWx0ZXIubGVuZ3RoID09IDApKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbnN0IHRtcEZpbHRlciA9IG5ldyBGaWx0ZXIoZmlsdGVyKTtcclxuICAgICAgICBkZWxldGUgdG1wRmlsdGVyLnNvdXJjZUZpZWxkO1xyXG4gICAgICAgIGlmICh0bXBGaWx0ZXIuZnVuY0dldFZhbHVlKSB7XHJcbiAgICAgICAgICAgIHZhbHVlRmlsdGVyID0gdG1wRmlsdGVyLmZ1bmNHZXRWYWx1ZSh2YWx1ZUZpbHRlcik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRtcEZpbHRlci52YWx1ZSA9IEpTT04uc3RyaW5naWZ5KHZhbHVlRmlsdGVyKTtcclxuICAgICAgICBpZiAodG1wRmlsdGVyLm1vZGlmeVZhbHVlKSB7XHJcbiAgICAgICAgICAgIHZhbHVlRmlsdGVyID0gdG1wRmlsdGVyLm1vZGlmeVZhbHVlKHZhbHVlRmlsdGVyKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdG1wRmlsdGVyLmZpbHRlcnMgPSBbXTtcclxuICAgICAgICBpZiAoZmlsdGVyLmxvZ2ljICYmIGZpbHRlci5maWx0ZXJzKSB7XHJcbiAgICAgICAgICAgIGZpbHRlci5maWx0ZXJzLmZvckVhY2goZiA9PiB0aGlzLmRlUXV5UmVwbGFjZVZhbHVlKHRtcEZpbHRlci5maWx0ZXJzLCBmLCBtb2RlbCwgcm9vdE1vZGVsKSk7XHJcbiAgICAgICAgICAgIGlmICh0bXBGaWx0ZXIuZmlsdGVycy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICBmaWx0ZXJzLnB1c2godG1wRmlsdGVyKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgZmlsdGVycy5wdXNoKHRtcEZpbHRlcik7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGdldFdvcmtmbG93Q29yZVN0YXR1c1RleHQod29ya2Zsb3dDb3JlU3RhdHVzVmFsdWU6IG51bWJlcikge1xyXG4gICAgICAgIGNvbnN0IGl0ZW0gPSBEYXRhU291cmNlV29ya2Zsb3dDb3JlU3RhdHVzLmZpbmQoeCA9PiB4LmlkID09IHdvcmtmbG93Q29yZVN0YXR1c1ZhbHVlKTtcclxuICAgICAgICBpZiAoIWl0ZW0pIHJldHVybiAnJztcclxuICAgICAgICByZXR1cm4gaXRlbS50ZW47XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBjcmVhdGVEcm9wZG93bk9wdGlvblJlZkZpZWxkKHNjaGVtYTogUmVmRmllbGQpIHtcclxuICAgICAgICByZXR1cm4gbmV3IERyb3Bkb3duT3B0aW9ucyh7XHJcbiAgICAgICAgICAgIGRpc3BsYXlGaWVsZDogc2NoZW1hLmRpc3BsYXlGaWVsZCxcclxuICAgICAgICAgICAgdmFsdWVGaWVsZDogc2NoZW1hLnZhbHVlRmllbGQsXHJcbiAgICAgICAgICAgIGZpZWxkUGx1czogc2NoZW1hLmZpZWxkUGx1cyxcclxuICAgICAgICAgICAgZmllbGRUcmVlOiBzY2hlbWEuZmllbGRUcmVlLFxyXG4gICAgICAgICAgICBmaWVsZFBhcmVudFRyZWVJdGVtOiBzY2hlbWEuZmllbGRQYXJlbnRUcmVlSXRlbSxcclxuICAgICAgICAgICAgZnVuY0dldExhYmVsOiBzY2hlbWEuZnVuY0dldExhYmVsLFxyXG4gICAgICAgICAgICBzb3J0RmllbGQ6IHNjaGVtYS5zb3J0RmllbGQsXHJcbiAgICAgICAgICAgIHNvcnREaXI6IHNjaGVtYS5zb3J0RGlyLFxyXG4gICAgICAgICAgICBjYWxsYmFja0RhdGFGaW5pc2g6IHNjaGVtYS5jYWxsYmFja0RhdGFGaW5pc2hcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBnZXRSZWZEYXRhKGRhdGFTb3VyY2U6IGFueVtdLCBvcHRpb25zOiBEcm9wZG93bk9wdGlvbnMpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgICAgICBjb25zdCBfbm90aWZpZXJTZXJ2aWNlID0gdGhpcy5faW5qZWN0b3IuZ2V0KE5vdGlmaWVyU2VydmljZSk7XHJcbiAgICAgICAgY29uc3QgX2NvbW1vblNlcnZpY2UgPSB0aGlzLl9pbmplY3Rvci5nZXQoQ29tbW9uU2VydmljZSk7XHJcbiAgICAgICAgaWYgKG9wdGlvbnMucmVmRmllbGRzICYmIG9wdGlvbnMucmVmRmllbGRzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgY29uc3QgYXJyUHJvbWlzZURvbnROZWVkV2FpdCA9IFtdO1xyXG4gICAgICAgICAgICBjb25zdCBhcnJTY2hlbWFEb250TmVlZFdhaXQgPSBbXTtcclxuICAgICAgICAgICAgZm9yIChjb25zdCBzY2hlbWEgb2Ygb3B0aW9ucy5yZWZGaWVsZHMpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGZpZWxkID0gc2NoZW1hLmZpZWxkO1xyXG4gICAgICAgICAgICAgICAgaWYgKHNjaGVtYS5iYXNlU2VydmljZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGFyclZhbHVlID0gW107XHJcbiAgICAgICAgICAgICAgICAgICAgZGF0YVNvdXJjZS5mb3JFYWNoKGl0ZW1EYXRhID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY3VycmVudFZhbHVlID0gaXRlbURhdGFbZmllbGRdO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoY3VycmVudFZhbHVlICE9IG51bGwpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzY2hlbWEubXVsdGlwbGUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgaWRzID0gY3VycmVudFZhbHVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghQXJyYXkuaXNBcnJheShpZHMpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkcyA9IGlkcy5zcGxpdCgnLCcpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZHMuZm9yRWFjaChpZCA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghYXJyVmFsdWUuc29tZShwID0+IHAgPT0gaWQpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcnJWYWx1ZS5wdXNoKGlkKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoIWFyclZhbHVlLnNvbWUocCA9PiBwID09IGN1cnJlbnRWYWx1ZSkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcnJWYWx1ZS5wdXNoKGN1cnJlbnRWYWx1ZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoYXJyVmFsdWUubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgcHJvbWlzZSA9IG51bGw7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzY2hlbWEuYmFzZVNlcnZpY2UgaW5zdGFuY2VvZiBNYXN0ZXJEYXRhU2VydmljZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvbWlzZSA9IHNjaGVtYS5iYXNlU2VydmljZS5nZXREYXRhRHJvcGRvd24oXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2NoZW1hLmdyb3VwQ29kZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgYXJyVmFsdWVcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsIHRoaXMuY3JlYXRlRHJvcGRvd25PcHRpb25SZWZGaWVsZChzY2hlbWEpKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb21pc2UgPSBzY2hlbWEuYmFzZVNlcnZpY2UuZ2V0RGF0YURyb3Bkb3duQnlGaWx0ZXIoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW19jb21tb25TZXJ2aWNlLm5ld0ZpbHRlcihzY2hlbWEudmFsdWVGaWVsZCwgT3BlcmF0b3IuaW4sIGFyclZhbHVlKV0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jcmVhdGVEcm9wZG93bk9wdGlvblJlZkZpZWxkKHNjaGVtYSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNjaGVtYS5vcmRlciAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBwcm9taXNlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5tZXJnZVJlZkRhdGFUb0RhdGFzb3VyY2UoZGF0YVNvdXJjZSwgc2NoZW1hLCByZXN1bHQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJyUHJvbWlzZURvbnROZWVkV2FpdC5wdXNoKHByb21pc2UpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJyU2NoZW1hRG9udE5lZWRXYWl0LnB1c2goc2NoZW1hKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICghc2NoZW1hLmRhdGFTb3VyY2UpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgX25vdGlmaWVyU2VydmljZS5zaG93V2FybmluZygnQ+G6pXUgaMOsbmggUmVmRmllbGQgcGjhuqNpIGPDsyBkYXRhU291cmNlIGhv4bq3YyBiYXNlU2VydmljZScpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBsZXQgZnVuY0dldExhYmVsID0gaXRlbSA9PiBpdGVtW3NjaGVtYS5kaXNwbGF5RmllbGRdIHx8IGl0ZW1bJ2xhYmVsJ107XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHNjaGVtYS5mdW5jR2V0TGFiZWwpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZnVuY0dldExhYmVsID0gc2NoZW1hLmZ1bmNHZXRMYWJlbDtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgZGF0YVNvdXJjZS5mb3JFYWNoKGl0ZW1EYXRhID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVmSXRlbSA9IHNjaGVtYS5kYXRhU291cmNlLmZpbmQoaSA9PiBzY2hlbWEuZnVuY0NvbXBhcmUoaSwgaXRlbURhdGFbZmllbGRdKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZWZJdGVtICE9IG51bGwpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW1EYXRhWydzdHInICsgZmllbGRdID0gZnVuY0dldExhYmVsKHJlZkl0ZW0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKGFyclByb21pc2VEb250TmVlZFdhaXQubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgYXJyUmVzID0gYXdhaXQgUHJvbWlzZS5hbGwoYXJyUHJvbWlzZURvbnROZWVkV2FpdCk7XHJcbiAgICAgICAgICAgICAgICBhcnJTY2hlbWFEb250TmVlZFdhaXQuZm9yRWFjaCgoc2NoZW1hLCBpbmRleCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMubWVyZ2VSZWZEYXRhVG9EYXRhc291cmNlKGRhdGFTb3VyY2UsIHNjaGVtYSwgYXJyUmVzW2luZGV4XSk7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIG1lcmdlUmVmRGF0YVRvRGF0YXNvdXJjZShkYXRhU291cmNlOiBhbnlbXSwgc2NoZW1hOiBSZWZGaWVsZCwgZGF0YTogYW55W10pIHtcclxuICAgICAgICBkYXRhID8/PSBbXTtcclxuICAgICAgICBjb25zdCBmaWVsZCA9IHNjaGVtYS5maWVsZDtcclxuICAgICAgICBsZXQgZnVuY0dldExhYmVsID0gaXRlbSA9PiBpdGVtW3NjaGVtYS5kaXNwbGF5RmllbGRdIHx8IGl0ZW1bJ2xhYmVsJ107XHJcbiAgICAgICAgaWYgKHNjaGVtYS5mdW5jR2V0TGFiZWwpIHtcclxuICAgICAgICAgICAgZnVuY0dldExhYmVsID0gc2NoZW1hLmZ1bmNHZXRMYWJlbDtcclxuICAgICAgICB9XHJcbiAgICAgICAgbGV0IGZ1bmNTZXRWYWx1ZVJvdyA9IChyb3dJdGVtLCBkYXRhKSA9PiB7IH07XHJcbiAgICAgICAgbGV0IGZ1bmNHZXRSZWZEYXRhUm93ID0gKHJlZkl0ZW1zKSA9PiB7XHJcbiAgICAgICAgICAgIHJldHVybiByZWZJdGVtcy5tYXAoaXRlbSA9PiBmdW5jR2V0TGFiZWwoaXRlbSkpLmpvaW4oYCR7c2NoZW1hLnNlcGFyYXRvcn0gYCk7XHJcbiAgICAgICAgfTtcclxuICAgICAgICBpZiAoc2NoZW1hLmZ1bmNTZXRWYWx1ZVJvdykge1xyXG4gICAgICAgICAgICBmdW5jU2V0VmFsdWVSb3cgPSBzY2hlbWEuZnVuY1NldFZhbHVlUm93O1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoc2NoZW1hLmZ1bmNHZXRSZWZEYXRhUm93KSB7XHJcbiAgICAgICAgICAgIGZ1bmNHZXRSZWZEYXRhUm93ID0gc2NoZW1hLmZ1bmNHZXRSZWZEYXRhUm93O1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoc2NoZW1hLm11bHRpcGxlKSB7XHJcbiAgICAgICAgICAgIGRhdGFTb3VyY2UuZm9yRWFjaChpdGVtRGF0YSA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAoaXRlbURhdGFbZmllbGRdICE9IG51bGwpIHtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgaWRzID0gaXRlbURhdGFbZmllbGRdO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICghQXJyYXkuaXNBcnJheShpZHMpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlkcyA9IGlkcy5zcGxpdCgnLCcpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBjb25zdCByZWZJdGVtcyA9IGRhdGEuZmlsdGVyKGkgPT4gaWRzLnNvbWUocSA9PiBzY2hlbWEuZnVuY0NvbXBhcmUoaSwgcSkpKTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAocmVmSXRlbXMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpdGVtRGF0YVsnc3RyJyArIGZpZWxkXSA9IGZ1bmNHZXRSZWZEYXRhUm93KHJlZkl0ZW1zKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZnVuY1NldFZhbHVlUm93KGl0ZW1EYXRhLCByZWZJdGVtcyk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIGRhdGFTb3VyY2UuZm9yRWFjaChpdGVtRGF0YSA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAoaXRlbURhdGFbZmllbGRdICE9IG51bGwpIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCByZWZJdGVtID0gZGF0YS5maW5kKGkgPT4gc2NoZW1hLmZ1bmNDb21wYXJlKGksIGl0ZW1EYXRhW2ZpZWxkXSkpO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChyZWZJdGVtICE9IG51bGwpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaXRlbURhdGFbJ3N0cicgKyBmaWVsZF0gPSBmdW5jR2V0TGFiZWwocmVmSXRlbSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmNTZXRWYWx1ZVJvdyhpdGVtRGF0YSwgcmVmSXRlbSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59XHJcbiJdfQ==