@sumaris-net/ngx-components 1.20.34 → 1.20.37

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.
@@ -57,7 +57,7 @@ export class LocalSettingsService extends StartableService {
57
57
  }
58
58
  get usageMode() {
59
59
  var _a;
60
- if (isNil((_a = this._data) === null || _a === void 0 ? void 0 : _a.mobile)) {
60
+ if (isNil((_a = this._data) === null || _a === void 0 ? void 0 : _a.usageMode)) {
61
61
  console.warn("[settings] Accessing to property 'usageMode' BEFORE service started! Please use ready()");
62
62
  return isCordova(window) ? 'FIELD' : 'DESK';
63
63
  }
@@ -457,4 +457,4 @@ LocalSettingsService.ctorParameters = () => [
457
457
  { type: undefined, decorators: [{ type: Optional }, { type: Inject, args: [APP_LOCAL_SETTINGS,] }] },
458
458
  { type: undefined, decorators: [{ type: Optional }, { type: Inject, args: [APP_LOCAL_SETTINGS_OPTIONS,] }] }
459
459
  ];
460
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9jYWwtc2V0dGluZ3Muc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvY29yZS9zZXJ2aWNlcy9sb2NhbC1zZXR0aW5ncy5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUMsWUFBWSxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsY0FBYyxFQUFFLFFBQVEsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUV6RixPQUFPLEVBQUMsSUFBSSxFQUFDLE1BQU0sb0JBQW9CLENBQUM7QUFDeEMsT0FBTyxFQUFDLGdCQUFnQixFQUFDLE1BQU0scUJBQXFCLENBQUM7QUFDckQsT0FBTyxFQUFDLE9BQU8sRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBRXZDLE9BQU8sRUFBQyxNQUFNLEVBQUUsaUJBQWlCLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBRSxlQUFlLEVBQUUsUUFBUSxFQUFFLGVBQWUsRUFBQyxNQUFNLHdCQUF3QixDQUFDO0FBQ2xJLE9BQU8sRUFBQyxPQUFPLEVBQUMsTUFBTSxNQUFNLENBQUM7QUFDN0IsT0FBTyxFQUFDLFFBQVEsRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBRXhDLE9BQU8sS0FBSyxjQUFjLE1BQU0sUUFBUSxDQUFDO0FBRXpDLE9BQU8sRUFBQyxZQUFZLEVBQUUsTUFBTSxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFFcEQsT0FBTyxFQUFDLFdBQVcsRUFBRSxXQUFXLEVBQUMsTUFBTSx5Q0FBeUMsQ0FBQztBQUNqRixPQUFPLEVBQUMsV0FBVyxFQUFDLE1BQU0sbUNBQW1DLENBQUM7QUFDOUQsT0FBTyxFQUFDLGlCQUFpQixFQUFDLE1BQU0sb0JBQW9CLENBQUM7QUFFckQsT0FBTyxFQUFDLGdCQUFnQixFQUFDLE1BQU0sK0NBQStDLENBQUM7QUFDL0UsT0FBTyxFQUFDLFNBQVMsRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBQyxN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QU0sU0FBQywwQkFBMEIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0V2ZW50RW1pdHRlciwgSW5qZWN0LCBJbmplY3RhYmxlLCBJbmplY3Rpb25Ub2tlbiwgT3B0aW9uYWx9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtMb2NhbFNldHRpbmdzLCBPZmZsaW5lRmVhdHVyZSwgVXNhZ2VNb2RlfSBmcm9tICcuL21vZGVsL3NldHRpbmdzLm1vZGVsJztcbmltcG9ydCB7UGVlcn0gZnJvbSAnLi9tb2RlbC9wZWVyLm1vZGVsJztcbmltcG9ydCB7VHJhbnNsYXRlU2VydmljZX0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XG5pbXBvcnQge1N0b3JhZ2V9IGZyb20gJ0Bpb25pYy9zdG9yYWdlJztcblxuaW1wb3J0IHtlcXVhbHMsIGdldFByb3BlcnR5QnlQYXRoLCBpc0VtcHR5QXJyYXksIGlzTmlsLCBpc05vdEVtcHR5QXJyYXksIGlzTm90TmlsLCBpc05vdE5pbE9yQmxhbmt9IGZyb20gJy4uLy4uL3NoYXJlZC9mdW5jdGlvbnMnO1xuaW1wb3J0IHtTdWJqZWN0fSBmcm9tICdyeGpzJztcbmltcG9ydCB7UGxhdGZvcm19IGZyb20gJ0Bpb25pYy9hbmd1bGFyJztcbmltcG9ydCB7Rm9ybUZpZWxkRGVmaW5pdGlvbiwgRm9ybUZpZWxkRGVmaW5pdGlvbk1hcH0gZnJvbSAnLi4vLi4vc2hhcmVkL2Zvcm0vZmllbGQubW9kZWwnO1xuaW1wb3J0ICogYXMgbW9tZW50SW1wb3J0ZWQgZnJvbSAnbW9tZW50JztcbmltcG9ydCB7TW9tZW50fSBmcm9tICdtb21lbnQnO1xuaW1wb3J0IHtkZWJvdW5jZVRpbWUsIGZpbHRlcn0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHtMYXRMb25nUGF0dGVybn0gZnJvbSAnLi4vLi4vc2hhcmVkL21hdGVyaWFsL2xhdGxvbmcvbGF0bG9uZy51dGlscyc7XG5pbXBvcnQge0Vudmlyb25tZW50LCBFTlZJUk9OTUVOVH0gZnJvbSAnLi4vLi4vLi4vZW52aXJvbm1lbnRzL2Vudmlyb25tZW50LmNsYXNzJztcbmltcG9ydCB7ZW52aXJvbm1lbnR9IGZyb20gJy4uLy4uLy4uL2Vudmlyb25tZW50cy9lbnZpcm9ubWVudCc7XG5pbXBvcnQge2Zyb21EYXRlSVNPU3RyaW5nfSBmcm9tICcuLi8uLi9zaGFyZWQvZGF0ZXMnO1xuaW1wb3J0IHtIaXN0b3J5UGFnZVJlZmVyZW5jZX0gZnJvbSAnLi9tb2RlbC9oaXN0b3J5Lm1vZGVsJztcbmltcG9ydCB7U3RhcnRhYmxlU2VydmljZX0gZnJvbSAnLi4vLi4vc2hhcmVkL3NlcnZpY2VzL3N0YXJ0YWJsZS1zZXJ2aWNlLmNsYXNzJztcbmltcG9ydCB7aXNBbmRyb2lkLCBpc0NvcmRvdmEsIGlzSU9TLCBpc01vYmlsZX0gZnJvbSAnLi4vLi4vc2hhcmVkL3BsYXRmb3Jtcyc7XG5cbmNvbnN0IG1vbWVudCA9IG1vbWVudEltcG9ydGVkO1xuXG5leHBvcnQgY29uc3QgU0VUVElOR1NfU1RPUkFHRV9LRVkgPSAnc2V0dGluZ3MnO1xuZXhwb3J0IGNvbnN0IFNFVFRJTkdTX1RSQU5TSUVOVF9QUk9QRVJUSUVTID0gWydtb2JpbGUnLCAndG91Y2hVaScvKmRlcHJlY2F0ZWQqL107XG5cbi8vIGZpeG1lOiB0aGlzIGNvbnN0YW50IHBvaW50cyB0byBzdGF0aWMgZW52aXJvbm1lbnRcbmNvbnN0IERFRkFVTFRfU0VUVElOR1M6IExvY2FsU2V0dGluZ3MgPSB7XG4gIGFjY291bnRJbmhlcml0YW5jZTogdHJ1ZSxcbiAgbG9jYWxlOiBlbnZpcm9ubWVudC5kZWZhdWx0TG9jYWxlLFxuICBsYXRMb25nRm9ybWF0OiBlbnZpcm9ubWVudC5kZWZhdWx0TGF0TG9uZ0Zvcm1hdCB8fCAnRERNTScsXG4gIHBhZ2VIaXN0b3J5TWF4U2l6ZTogM1xufTtcblxuZXhwb3J0IGNvbnN0IEFQUF9MT0NBTF9TRVRUSU5HUyA9IG5ldyBJbmplY3Rpb25Ub2tlbjxQYXJ0aWFsPExvY2FsU2V0dGluZ3M+PignRGVmYXVsdExvY2FsU2V0dGluZ3MnKTtcbmV4cG9ydCBjb25zdCBBUFBfTE9DQUxfU0VUVElOR1NfT1BUSU9OUyA9IG5ldyBJbmplY3Rpb25Ub2tlbjxGb3JtRmllbGREZWZpbml0aW9uTWFwPignTG9jYWxTZXR0aW5nc09wdGlvbnMnKTtcblxuZXhwb3J0IGRlY2xhcmUgaW50ZXJmYWNlIEFkZFRvUGFnZUhpc3RvcnlPcHRpb25zIHtcbiAgcmVtb3ZlUGF0aFF1ZXJ5UGFyYW1zPzogYm9vbGVhbjtcbiAgcmVtb3ZlVGl0bGVTbWFsbFRhZz86IGJvb2xlYW47XG4gIGVtaXRFdmVudD86IGJvb2xlYW47XG59XG5cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnXG4gIC8vZGVwczogW0FQUF9MT0NBTF9TRVRUSU5HUywgQVBQX0xPQ0FMX1NFVFRJTkdTX09QVElPTlNdXG59KVxuZXhwb3J0IGNsYXNzIExvY2FsU2V0dGluZ3NTZXJ2aWNlIGV4dGVuZHMgU3RhcnRhYmxlU2VydmljZTxMb2NhbFNldHRpbmdzPiB7XG5cbiAgb25DaGFuZ2UgPSBuZXcgU3ViamVjdDxMb2NhbFNldHRpbmdzPigpO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgX29wdGlvbkRlZnM6IEZvcm1GaWVsZERlZmluaXRpb25bXTtcbiAgcHJpdmF0ZSBfJHBlcnNpc3Q6IEV2ZW50RW1pdHRlcjxhbnk+O1xuXG4gIGdldCBzZXR0aW5ncygpOiBMb2NhbFNldHRpbmdzIHtcbiAgICByZXR1cm4gdGhpcy5fZGF0YSB8fCB0aGlzLmRlZmF1bHRTZXR0aW5ncztcbiAgfVxuXG4gIGdldCBsb2NhbGUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fZGF0YSAmJiB0aGlzLl9kYXRhLmxvY2FsZSB8fCB0aGlzLnRyYW5zbGF0ZS5jdXJyZW50TGFuZyB8fCB0aGlzLnRyYW5zbGF0ZS5kZWZhdWx0TGFuZztcbiAgfVxuXG4gIGdldCBsYXRMb25nRm9ybWF0KCk6IExhdExvbmdQYXR0ZXJuIHtcbiAgICByZXR1cm4gdGhpcy5fZGF0YSAmJiB0aGlzLl9kYXRhLmxhdExvbmdGb3JtYXQgfHwgJ0RETU0nO1xuICB9XG5cbiAgZ2V0IHVzYWdlTW9kZSgpOiBVc2FnZU1vZGUge1xuICAgIGlmIChpc05pbCh0aGlzLl9kYXRhPy5tb2JpbGUpKSB7XG4gICAgICBjb25zb2xlLndhcm4oXCJbc2V0dGluZ3NdIEFjY2Vzc2luZyB0byBwcm9wZXJ0eSAndXNhZ2VNb2RlJyBCRUZPUkUgc2VydmljZSBzdGFydGVkISBQbGVhc2UgdXNlIHJlYWR5KClcIik7XG4gICAgICByZXR1cm4gaXNDb3Jkb3ZhKHdpbmRvdykgPyAnRklFTEQnIDogJ0RFU0snO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5fZGF0YS51c2FnZU1vZGU7XG4gIH1cblxuICBnZXQgbW9iaWxlKCk6IGJvb2xlYW4ge1xuICAgIGlmIChpc05pbCh0aGlzLl9kYXRhPy5tb2JpbGUpKSB7XG4gICAgICBjb25zb2xlLndhcm4oXCJbc2V0dGluZ3NdIEFjY2Vzc2luZyB0byBwcm9wZXJ0eSAnbW9iaWxlJyBCRUZPUkUgc2VydmljZSBzdGFydGVkISBQbGVhc2UgdXNlIHJlYWR5KClcIik7XG4gICAgICByZXR1cm4gaXNNb2JpbGUod2luZG93KTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuX2RhdGEubW9iaWxlO1xuICB9XG5cbiAgc2V0IG1vYmlsZSh2YWx1ZTogYm9vbGVhbikge1xuICAgIHRoaXMuX2RhdGEubW9iaWxlID0gdmFsdWU7XG4gIH1cblxuICBnZXQgcGFnZUhpc3RvcnkoKTogSGlzdG9yeVBhZ2VSZWZlcmVuY2VbXSB7XG4gICAgcmV0dXJuICh0aGlzLl9kYXRhICYmIHRoaXMuX2RhdGEucGFnZUhpc3RvcnkgfHwgW10pO1xuICB9XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSB0cmFuc2xhdGU6IFRyYW5zbGF0ZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBwbGF0Zm9ybTogUGxhdGZvcm0sXG4gICAgcHJpdmF0ZSBzdG9yYWdlOiBTdG9yYWdlLFxuICAgIEBJbmplY3QoRU5WSVJPTk1FTlQpIHByb3RlY3RlZCByZWFkb25seSBlbnZpcm9ubWVudDogRW52aXJvbm1lbnQsXG4gICAgQE9wdGlvbmFsKCkgQEluamVjdChBUFBfTE9DQUxfU0VUVElOR1MpIHByaXZhdGUgcmVhZG9ubHkgZGVmYXVsdFNldHRpbmdzOiBMb2NhbFNldHRpbmdzLFxuICAgIEBPcHRpb25hbCgpIEBJbmplY3QoQVBQX0xPQ0FMX1NFVFRJTkdTX09QVElPTlMpIGRlZmF1bHRPcHRpb25zTWFwOiBGb3JtRmllbGREZWZpbml0aW9uTWFwXG4gICkge1xuICAgIHN1cGVyKHBsYXRmb3JtKTtcbiAgICB0aGlzLmRlZmF1bHRTZXR0aW5ncyA9IHsuLi5ERUZBVUxUX1NFVFRJTkdTLCAuLi50aGlzLmRlZmF1bHRTZXR0aW5nc307XG5cbiAgICB0aGlzLl9vcHRpb25EZWZzID0gT2JqZWN0LnZhbHVlcyhkZWZhdWx0T3B0aW9uc01hcCk7XG5cbiAgICB0aGlzLnJlc2V0RGF0YSgpO1xuXG4gICAgdGhpcy5fZGVidWcgPSAhZW52aXJvbm1lbnQucHJvZHVjdGlvbjtcbiAgICBpZiAodGhpcy5fZGVidWcpIGNvbnNvbGUuZGVidWcoJ1tzZXR0aW5nc10gQ3JlYXRpbmcgc2VydmljZScpO1xuICB9XG5cbiAgbmdPblN0YXJ0KCk6IFByb21pc2U8TG9jYWxTZXR0aW5ncz4ge1xuXG4gICAgY29uc29sZS5pbmZvKCdbc2V0dGluZ3NdIFN0YXJ0aW5nIHNlcnZpY2UuLi4nKTtcblxuICAgIC8vIFJlc3RvcmluZyBsb2NhbCBzZXR0aW5nc1xuICAgIHRoaXMuX2RhdGEubW9iaWxlID0gaXNOb3ROaWwodGhpcy5fZGF0YS5tb2JpbGUpID8gdGhpcy5fZGF0YS5tb2JpbGUgOiAoaXNDb3Jkb3ZhKHdpbmRvdykgfHwgaXNNb2JpbGUod2luZG93KSk7XG4gICAgdGhpcy5fZGF0YS51c2FnZU1vZGUgPSAoaXNBbmRyb2lkKHdpbmRvdykgfHwgaXNJT1Mod2luZG93KSkgPyAnRklFTEQnIDogJ0RFU0snOyAvLyBGSUVMRCBieSBkZWZhdWx0IGlmIEFuZHJvaWQgb3IgaU9TXG5cbiAgICAvLyBSZXN0b3JpbmcgbG9jYWwgc2V0dGluZ3NcbiAgICByZXR1cm4gdGhpcy5yZXN0b3JlTG9jYWxseSgpO1xuICB9XG5cbiAgaXNVc2FnZU1vZGUobW9kZTogVXNhZ2VNb2RlKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMudXNhZ2VNb2RlID09PSBtb2RlO1xuICB9XG5cbiAgaXNPbkZpZWxkTW9kZSh2YWx1ZT86IFVzYWdlTW9kZSk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAodmFsdWUgfHwgdGhpcy51c2FnZU1vZGUpID09PSAnRklFTEQnO1xuICB9XG5cbiAgYXN5bmMgcmVzdG9yZUxvY2FsbHkoKTogUHJvbWlzZTxMb2NhbFNldHRpbmdzIHwgdW5kZWZpbmVkPiB7XG4gICAgbGV0IGRhdGEgPSB0aGlzLl9kYXRhIHx8IDxMb2NhbFNldHRpbmdzPnt9O1xuXG4gICAgLy8gUmVzdG9yZSBmcm9tIHN0b3JhZ2VcbiAgICBjb25zdCBzZXR0aW5nc1N0ciA9IGF3YWl0IHRoaXMuc3RvcmFnZS5nZXQoU0VUVElOR1NfU1RPUkFHRV9LRVkpO1xuXG4gICAgLy8gUmVzdG9yZSBsb2NhbCBzZXR0aW5ncyAob3Iga2VlcCBvbGQgc2V0dGluZ3MpXG4gICAgaWYgKGlzTm90TmlsT3JCbGFuayhzZXR0aW5nc1N0cikpIHtcbiAgICAgIGNvbnNvbGUuaW5mbygnW3NldHRpbmdzXSBSZXN0b3JpbmcgcHJldmlvdXMgc2V0dGluZ3MuLi4nKTtcblxuICAgICAgY29uc3QgcmVzdG9yZWREYXRhID0gSlNPTi5wYXJzZShzZXR0aW5nc1N0cik7XG5cbiAgICAgIC8vIEF2b2lkIHRvIG92ZXJyaWRlIHRyYW5zaWVudCBwcm9wZXJ0aWVzXG4gICAgICBTRVRUSU5HU19UUkFOU0lFTlRfUFJPUEVSVElFUy5mb3JFYWNoKHRyYW5zaWVudEtleSA9PiB7XG4gICAgICAgIGRlbGV0ZSByZXN0b3JlZERhdGFbdHJhbnNpZW50S2V5XTtcbiAgICAgIH0pO1xuXG4gICAgICAvLyBNZXJnZSBpbnRvIGV4aXN0aW5nIGRhdGFcbiAgICAgIGRhdGEgPSBPYmplY3QuYXNzaWduKGRhdGEsIHJlc3RvcmVkRGF0YSk7XG4gICAgfVxuXG4gICAgLy8gRW1pdCBldmVudFxuICAgIHRoaXMub25DaGFuZ2UubmV4dChkYXRhKTtcblxuICAgIHJldHVybiBkYXRhO1xuICB9XG5cbiAgc2V0UHJvcGVydHk8VCA9IHN0cmluZz4oa2V5T3JEZWY6IHN0cmluZ3xGb3JtRmllbGREZWZpbml0aW9uLCB2YWx1ZTogVCl7XG4gICAgaWYgKCF0aGlzLl9kYXRhIHx8ICFrZXlPckRlZikgcmV0dXJuO1xuICAgIGlmICh0eXBlb2Yga2V5T3JEZWYgPT09ICdvYmplY3QnKSB7XG4gICAgICB0aGlzLnNldFByb3BlcnR5KGtleU9yRGVmLmtleSwgdmFsdWUpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLl9kYXRhLnByb3BlcnRpZXMgPSB0aGlzLl9kYXRhLnByb3BlcnRpZXMgfHwge307XG4gICAgdGhpcy5fZGF0YS5wcm9wZXJ0aWVzW2tleU9yRGVmXSA9IGlzTmlsKHZhbHVlKSA/IHVuZGVmaW5lZCA6IHZhbHVlLnRvU3RyaW5nKCk7XG4gIH1cblxuICBnZXRQcm9wZXJ0eShrZXlPckRlZjogc3RyaW5nfEZvcm1GaWVsZERlZmluaXRpb24sIGRlZmF1bHRWYWx1ZT86IGFueSk6IGFueSB7XG4gICAgaWYgKHR5cGVvZiBrZXlPckRlZiA9PT0gJ29iamVjdCcpIHtcbiAgICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5KGtleU9yRGVmLmtleSwgaXNOaWwoZGVmYXVsdFZhbHVlKSA/IGtleU9yRGVmLmRlZmF1bHRWYWx1ZSA6IGRlZmF1bHRWYWx1ZSk7XG4gICAgfVxuICAgIGNvbnN0IHZhbHVlID0gdGhpcy5fZGF0YSAmJiB0aGlzLl9kYXRhLnByb3BlcnRpZXMgJiYgdGhpcy5fZGF0YS5wcm9wZXJ0aWVzW2tleU9yRGVmXTtcbiAgICByZXR1cm4gaXNOb3ROaWwodmFsdWUpID8gdmFsdWUgOiBkZWZhdWx0VmFsdWU7XG4gIH1cblxuICBnZXRQcm9wZXJ0eUFzQm9vbGVhbihkZWZpbml0aW9uOiBGb3JtRmllbGREZWZpbml0aW9uLCBkZWZhdWx0VmFsdWU/OiBib29sZWFuKTogYm9vbGVhbiB7XG4gICAgY29uc3QgdmFsdWUgPSB0aGlzLmdldFByb3BlcnR5KGRlZmluaXRpb24sIGRlZmF1bHRWYWx1ZSk7XG4gICAgcmV0dXJuIGlzTm90TmlsKHZhbHVlKSA/ICh2YWx1ZSAmJiB2YWx1ZSAhPT0gJ2ZhbHNlJykgOiB1bmRlZmluZWQ7XG4gIH1cblxuICBnZXRQcm9wZXJ0eUFzSW50KGRlZmluaXRpb246IEZvcm1GaWVsZERlZmluaXRpb24sIGRlZmF1bHRWYWx1ZT86IG51bWJlcik6IG51bWJlciB7XG4gICAgY29uc3QgdmFsdWUgPSB0aGlzLmdldFByb3BlcnR5KGRlZmluaXRpb24sIGRlZmF1bHRWYWx1ZSk7XG4gICAgcmV0dXJuIGlzTm90TmlsKHZhbHVlKSA/IHBhcnNlSW50KHZhbHVlKSA6IHVuZGVmaW5lZDtcbiAgfVxuXG4gIGdldFByb3BlcnR5QXNOdW1iZXJzKGRlZmluaXRpb246IEZvcm1GaWVsZERlZmluaXRpb24sIGRlZmF1bHRWYWx1ZT86IG51bWJlcltdKTogbnVtYmVyW10ge1xuICAgIGNvbnN0IHZhbHVlID0gdGhpcy5nZXRQcm9wZXJ0eShkZWZpbml0aW9uLCBkZWZhdWx0VmFsdWUpO1xuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnKSByZXR1cm4gdmFsdWUuc3BsaXQoJywnKS5tYXAocGFyc2VGbG9hdCkgfHwgdW5kZWZpbmVkO1xuICAgIHJldHVybiBpc05vdE5pbCh2YWx1ZSkgPyBbcGFyc2VGbG9hdCh2YWx1ZSldIDogdW5kZWZpbmVkO1xuICB9XG5cbiAgZ2V0UHJvcGVydHlBc1N0cmluZ3MoZGVmaW5pdGlvbjogRm9ybUZpZWxkRGVmaW5pdGlvbiwgZGVmYXVsdFZhbHVlPzogc3RyaW5nW10pOiBzdHJpbmdbXSB7XG4gICAgY29uc3QgdmFsdWUgPSB0aGlzLmdldFByb3BlcnR5KGRlZmluaXRpb24sIGRlZmF1bHRWYWx1ZSk7XG4gICAgcmV0dXJuIHZhbHVlICYmIHZhbHVlLnNwbGl0KCcsJykgfHwgdW5kZWZpbmVkO1xuICB9XG5cbiAgYXN5bmMgYXBwbHkoc2V0dGluZ3M6IFBhcnRpYWw8TG9jYWxTZXR0aW5ncz4sIG9wdHM/OiB7IGVtaXRFdmVudD86IGJvb2xlYW47IHBlcnNpc3RJbW1lZGlhdGU/OiBib29sZWFuIH0pIHtcbiAgICBpZiAoIXRoaXMuc3RhcnRlZCkgYXdhaXQgdGhpcy5yZWFkeSgpO1xuXG4gICAgY29uc3QgZGF0YSA9IHsgLi4udGhpcy5fZGF0YSwgLi4uc2V0dGluZ3N9O1xuXG4gICAgaWYgKGVxdWFscyhkYXRhLCB0aGlzLl9kYXRhKSkgcmV0dXJuOyAvLyBTa2lwIGlmIG5vIGNoYW5nZXNcblxuICAgIHRoaXMuX2RhdGEgPSBkYXRhO1xuXG4gICAgLy8gU2F2ZSBsb2NhbGx5XG4gICAgaWYgKG9wdHMgJiYgb3B0cy5wZXJzaXN0SW1tZWRpYXRlKSB7XG4gICAgICBhd2FpdCB0aGlzLnBlcnNpc3RMb2NhbGx5KHRydWUpO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIHRoaXMucGVyc2lzdExvY2FsbHkoKTsgLy8gTm8gQVdBSVRcbiAgICB9XG5cbiAgICAvLyBFbWl0IGV2ZW50XG4gICAgaWYgKCFvcHRzIHx8IG9wdHMuZW1pdEV2ZW50ICE9PSBmYWxzZSkge1xuICAgICAgdGhpcy5vbkNoYW5nZS5uZXh0KHRoaXMuX2RhdGEpO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGFwcGx5UHJvcGVydHkoa2V5OiBrZXlvZiBMb2NhbFNldHRpbmdzLCB2YWx1ZTogYW55LCBvcHRzPzogeyBlbWl0RXZlbnQ/OiBib29sZWFuOyBwZXJzaXN0SW1tZWRpYXRlPzogYm9vbGVhbiB9KSB7XG4gICAgY29uc3QgY2hhbmdlcyA9IHt9O1xuICAgIGNoYW5nZXNba2V5XSA9IHZhbHVlO1xuICAgIGF3YWl0IHRoaXMuYXBwbHkoY2hhbmdlcywgb3B0cyk7XG4gIH1cblxuICBnZXRQYWdlU2V0dGluZ3M8VCA9IGFueT4ocGFnZUlkOiBzdHJpbmcsIHByb3BlcnR5TmFtZT86IHN0cmluZyk6IFQge1xuICAgIGlmICghdGhpcy5fZGF0YSB8fCAhdGhpcy5fZGF0YS5wYWdlcykgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICBjb25zdCBrZXkgPSBwYWdlSWQucmVwbGFjZSgvWy9dL2csICdfXycpO1xuICAgIGlmIChpc05vdE5pbE9yQmxhbmsocHJvcGVydHlOYW1lKSkge1xuICAgICAgcmV0dXJuIGdldFByb3BlcnR5QnlQYXRoKHRoaXMuX2RhdGEucGFnZXMsIGtleSArICcuJyArIHByb3BlcnR5TmFtZSk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLl9kYXRhLnBhZ2VzW2tleV07XG4gIH1cblxuICBhc3luYyBzYXZlUGFnZVNldHRpbmcocGFnZUlkOiBzdHJpbmcsIHZhbHVlOiBhbnksIHByb3BlcnR5TmFtZT86IHN0cmluZykge1xuICAgIHRoaXMuX2RhdGEgPSB0aGlzLl9kYXRhIHx8IHRoaXMuZGVmYXVsdFNldHRpbmdzO1xuICAgIHRoaXMuX2RhdGEucGFnZXMgPSB0aGlzLl9kYXRhLnBhZ2VzIHx8IHt9O1xuXG4gICAgY29uc3Qga2V5ID0gcGFnZUlkLnJlcGxhY2UoL1svXS9nLCAnX18nKTtcbiAgICBpZiAocHJvcGVydHlOYW1lKSB7XG4gICAgICB0aGlzLl9kYXRhLnBhZ2VzW2tleV0gPSB0aGlzLl9kYXRhLnBhZ2VzW2tleV0gfHwge307XG4gICAgICB0aGlzLl9kYXRhLnBhZ2VzW2tleV1bcHJvcGVydHlOYW1lXSA9IHZhbHVlO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIHRoaXMuX2RhdGEucGFnZXNba2V5XSA9IHZhbHVlO1xuICAgIH1cblxuICAgIC8vIFVwZGF0ZSBsb2NhbCBzZXR0aW5nc1xuICAgIHRoaXMucGVyc2lzdExvY2FsbHkoKTtcbiAgfVxuXG5cbiAgZ2V0T2ZmbGluZUZlYXR1cmUoZmVhdHVyZU5hbWU6IHN0cmluZyk6IE9mZmxpbmVGZWF0dXJlIHtcbiAgICBpZiAoIXRoaXMuX2RhdGEgfHwgIXRoaXMuX2RhdGEub2ZmbGluZUZlYXR1cmVzIHx8IGlzRW1wdHlBcnJheSh0aGlzLl9kYXRhLm9mZmxpbmVGZWF0dXJlcykpXG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIGlmICghZmVhdHVyZU5hbWUpIHRocm93IEVycm9yKCdNaXNzaW5nIFxcJ2ZlYXR1cmVOYW1lXFwnIGFyZ3VtZW50Jyk7XG5cbiAgICBmZWF0dXJlTmFtZSA9IGZlYXR1cmVOYW1lLnRvTG93ZXJDYXNlKCk7XG4gICAgY29uc3QgZmVhdHVyZVByZWZpeCA9IGZlYXR1cmVOYW1lICsgJyMnO1xuICAgIGNvbnN0IGZlYXR1cmUgPSB0aGlzLl9kYXRhLm9mZmxpbmVGZWF0dXJlcy5maW5kKGYgPT4ge1xuICAgICAgaWYgKHR5cGVvZiBmID09PSAnc3RyaW5nJykgcmV0dXJuIGYudG9Mb3dlckNhc2UoKS5zdGFydHNXaXRoKGZlYXR1cmVQcmVmaXgpO1xuICAgICAgaWYgKGYgJiYgdHlwZW9mIGYgPT09ICdvYmplY3QnICYmIGYubmFtZSkgcmV0dXJuIGYubmFtZSA9PT0gZmVhdHVyZU5hbWU7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfSk7XG4gICAgaWYgKCFmZWF0dXJlKSByZXR1cm47IC8vIE5vdCBmb3VuZFxuICAgIGlmICh0eXBlb2YgZmVhdHVyZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgIGNvbnN0IGxhc3RTeW5jRGF0ZSA9IGZlYXR1cmUuc3Vic3RyaW5nKGZlYXR1cmVQcmVmaXgubGVuZ3RoKTtcbiAgICAgIGNvbnNvbGUuZGVidWcoYFske2ZlYXR1cmVOYW1lfV0gTGFzdCBzeW5jaHJvbml6YXRpb24gZGF0ZTogJHtsYXN0U3luY0RhdGV9YCk7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBuYW1lOiBmZWF0dXJlTmFtZSxcbiAgICAgICAgbGFzdFN5bmNEYXRlXG4gICAgICB9O1xuICAgIH1cbiAgICByZXR1cm4gZmVhdHVyZTtcbiAgfVxuXG4gIGdldE9mZmxpbmVGZWF0dXJlTGFzdFN5bmNEYXRlKGZlYXR1cmVOYW1lOiBzdHJpbmcpOiBNb21lbnQge1xuICAgIGNvbnN0IGZlYXR1cmUgPSB0aGlzLmdldE9mZmxpbmVGZWF0dXJlKGZlYXR1cmVOYW1lKTtcbiAgICByZXR1cm4gZmVhdHVyZSAmJiBmcm9tRGF0ZUlTT1N0cmluZyhmZWF0dXJlLmxhc3RTeW5jRGF0ZSk7XG4gIH1cblxuICBoYXNPZmZsaW5lRmVhdHVyZShmZWF0dXJlTmFtZT86IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIGlmIChmZWF0dXJlTmFtZSkgcmV0dXJuIGlzTm90TmlsKHRoaXMuZ2V0T2ZmbGluZUZlYXR1cmUoZmVhdHVyZU5hbWUpKTtcbiAgICByZXR1cm4gdGhpcy5fZGF0YSAmJiBpc05vdEVtcHR5QXJyYXkodGhpcy5fZGF0YS5vZmZsaW5lRmVhdHVyZXMpO1xuICB9XG5cbiAgc2F2ZU9mZmxpbmVGZWF0dXJlKGZlYXR1cmU6IE9mZmxpbmVGZWF0dXJlKSB7XG4gICAgdGhpcy5fZGF0YSA9IHRoaXMuX2RhdGEgfHwgdGhpcy5kZWZhdWx0U2V0dGluZ3M7XG4gICAgdGhpcy5fZGF0YS5vZmZsaW5lRmVhdHVyZXMgPSB0aGlzLl9kYXRhLm9mZmxpbmVGZWF0dXJlcyB8fCBbXTtcblxuICAgIGZlYXR1cmUubmFtZSA9IGZlYXR1cmUubmFtZS50b0xvd2VyQ2FzZSgpO1xuXG4gICAgY29uc3QgZmVhdHVyZVByZWZpeCA9IGZlYXR1cmUubmFtZSArICcjJztcbiAgICBjb25zdCBleGlzdGluZ0luZGV4ID0gdGhpcy5fZGF0YS5vZmZsaW5lRmVhdHVyZXMuZmluZEluZGV4KGYgPT4ge1xuICAgICAgaWYgKHR5cGVvZiBmID09PSAnc3RyaW5nJykgcmV0dXJuIGYudG9Mb3dlckNhc2UoKS5zdGFydHNXaXRoKGZlYXR1cmVQcmVmaXgpO1xuICAgICAgaWYgKGYgJiYgdHlwZW9mIGYgPT09ICdvYmplY3QnICYmIGYubmFtZSkgcmV0dXJuIGYubmFtZSA9PT0gZmVhdHVyZS5uYW1lO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH0pO1xuICAgIGlmIChleGlzdGluZ0luZGV4ICE9PSAtMSkge1xuICAgICAgdGhpcy5fZGF0YS5vZmZsaW5lRmVhdHVyZXNbZXhpc3RpbmdJbmRleF0gPSBmZWF0dXJlO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIHRoaXMuX2RhdGEub2ZmbGluZUZlYXR1cmVzLnB1c2goZmVhdHVyZSk7XG4gICAgfVxuXG4gICAgLy8gVXBkYXRlIGxvY2FsIHNldHRpbmdzXG4gICAgdGhpcy5wZXJzaXN0TG9jYWxseSgpO1xuICB9XG5cbiAgbWFya09mZmxpbmVGZWF0dXJlQXNTeW5jKGZlYXR1cmVOYW1lOiBzdHJpbmcpIHtcbiAgICBsZXQgZmVhdHVyZSA9IHRoaXMuZ2V0T2ZmbGluZUZlYXR1cmUoZmVhdHVyZU5hbWUpO1xuXG4gICAgaWYgKCFmZWF0dXJlKSB7XG4gICAgICBmZWF0dXJlID0gPE9mZmxpbmVGZWF0dXJlPntcbiAgICAgICAgbmFtZTogZmVhdHVyZU5hbWUudG9Mb3dlckNhc2UoKSxcbiAgICAgICAgbGFzdFN5bmNEYXRlOiBtb21lbnQoKS50b0lTT1N0cmluZygpXG4gICAgICB9O1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIGZlYXR1cmUubGFzdFN5bmNEYXRlID0gbW9tZW50KCkudG9JU09TdHJpbmcoKTtcbiAgICB9XG5cbiAgICB0aGlzLnNhdmVPZmZsaW5lRmVhdHVyZShmZWF0dXJlKTtcbiAgfVxuXG4gIHJlbW92ZU9mZmxpbmVGZWF0dXJlcygpIHtcbiAgICBpZiAodGhpcy5fZGF0YSAmJiB0aGlzLl9kYXRhLm9mZmxpbmVGZWF0dXJlcykge1xuICAgICAgdGhpcy5fZGF0YS5vZmZsaW5lRmVhdHVyZXMgPSBbXTtcblxuICAgICAgLy8gVXBkYXRlIGxvY2FsIHNldHRpbmdzXG4gICAgICB0aGlzLnBlcnNpc3RMb2NhbGx5KCk7XG4gICAgfVxuICB9XG5cbiAgZ2V0RmllbGREaXNwbGF5QXR0cmlidXRlcyhmaWVsZE5hbWU6IHN0cmluZywgZGVmYXVsdEF0dHJpYnV0ZXM/OiBzdHJpbmdbXSk6IHN0cmluZ1tdIHtcbiAgICBjb25zdCB2YWx1ZSA9IHRoaXMuX2RhdGEgJiYgdGhpcy5fZGF0YS5wcm9wZXJ0aWVzICYmICB0aGlzLl9kYXRhLnByb3BlcnRpZXNbYHN1bWFyaXMuZmllbGQuJHtmaWVsZE5hbWV9LmF0dHJpYnV0ZXNgXTtcbiAgICAvLyBOb3RoaW5nIGZvdW5kIGluIHNldHRpbmdzOiByZXR1cm4gZGVmYXVsdHNcbiAgICBpZiAoIXZhbHVlKSByZXR1cm4gZGVmYXVsdEF0dHJpYnV0ZXMgfHwgWydsYWJlbCcsICduYW1lJ107XG5cbiAgICByZXR1cm4gdmFsdWUuc3BsaXQoJywnKTtcbiAgfVxuXG4gIGdldFBhZ2VGaWVsZERlZmF1bHRWYWx1ZShwYWdlSWQ6IHN0cmluZywgZmllbGROYW1lOiBzdHJpbmcpOiBhbnkge1xuICAgIHJldHVybiB0aGlzLmdldFBhZ2VTZXR0aW5ncyhwYWdlSWQsIGBmaWVsZC4ke2ZpZWxkTmFtZX0uZGVmYXVsdFZhbHVlYCk7XG4gIH1cblxuICBnZXQgb3B0aW9uRGVmcygpOiBGb3JtRmllbGREZWZpbml0aW9uW10ge1xuICAgIHJldHVybiB0aGlzLl9vcHRpb25EZWZzO1xuICB9XG5cbiAgcmVnaXN0ZXJPcHRpb24oZGVmOiBGb3JtRmllbGREZWZpbml0aW9uKSB7XG4gICAgaWYgKHRoaXMuX29wdGlvbkRlZnMuZmluZEluZGV4KGYgPT4gZi5rZXkgPT09IGRlZi5rZXkpICE9PSAtMSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBBZGRpdGlvbmFsIGFkZGl0aW9uYWwgcHJvcGVydHkgeyR7ZGVmLmtleX19IGFscmVhZHkgZGVmaW5lLmApO1xuICAgIH1cbiAgICBpZiAodGhpcy5fZGVidWcpIGNvbnNvbGUuZGVidWcoYFtzZXR0aW5nc10gQWRkaW5nIGFkZGl0aW9uYWwgcHJvcGVydHkgeyR7ZGVmLmtleX19YCwgZGVmKTtcbiAgICB0aGlzLl9vcHRpb25EZWZzLnB1c2goZGVmKTtcbiAgfVxuXG4gIHJlZ2lzdGVyT3B0aW9ucyhkZWZzOiBGb3JtRmllbGREZWZpbml0aW9uW10pIHtcbiAgICAoZGVmcyB8fCBbXSkuZm9yRWFjaChkZWYgPT4gdGhpcy5yZWdpc3Rlck9wdGlvbihkZWYpKTtcbiAgfVxuXG4gIGFzeW5jIGFkZFRvUGFnZUhpc3RvcnkocGFnZTogSGlzdG9yeVBhZ2VSZWZlcmVuY2UsXG4gICAgICAgICAgICAgICAgICAgICAgICAgb3B0cz86IEFkZFRvUGFnZUhpc3RvcnlPcHRpb25zLFxuICAgICAgICAgICAgICAgICAgICAgICAgIHBhZ2VIaXN0b3J5PzogSGlzdG9yeVBhZ2VSZWZlcmVuY2VbXSAvLyB1c2VkIGZvciByZWN1cnNpdmUgY2FsbCB0byBjaGlsZHJlblxuICApIHtcbiAgICAvLyBJZiBub3QgaW5zaWRlIHJlY3Vyc2l2ZSBjYWxsOiBmaWxsIHBhZ2UgaGlzdG9yeSBkZWZhdWx0c1xuICAgIGlmICghcGFnZUhpc3RvcnkpIHRoaXMuZmlsbFBhZ2VIaXN0b3J5RGVmYXVsdHMocGFnZSwgb3B0cyk7XG5cbiAgICBwYWdlSGlzdG9yeSA9IHBhZ2VIaXN0b3J5IHx8IHRoaXMuX2RhdGEucGFnZUhpc3Rvcnk7XG5cbiAgICBjb25zdCBpbmRleCA9IHBhZ2VIaXN0b3J5LmZpbmRJbmRleChwID0+IChcbiAgICAgIC8vIHNhbWUgcGF0aFxuICAgICAgcC5wYXRoID09PSBwYWdlLnBhdGhcbiAgICAgIC8vIG9yIHN1Yi1wYXRoXG4gICAgICB8fCBwYWdlLnBhdGguc3RhcnRzV2l0aChwLnBhdGggKyAnLycpKVxuICAgICk7XG5cbiAgICAvLyBOZXcgcGFnZTogaW5zZXJ0IGl0XG4gICAgaWYgKGluZGV4ID09PSAtMSkge1xuICAgICAgLy9pZiAodGhpcy5fZGVidWcpXG4gICAgICBjb25zb2xlLmRlYnVnKCdbc2V0dGluZ3NdIEFkZGluZyBwYWdlIHRvIGhpc3Rvcnk6ICcsIHBhZ2UpO1xuXG4gICAgICAvLyBQcmVwZW5kIHRvIGxpc3RcbiAgICAgIHBhZ2VIaXN0b3J5LnNwbGljZSgwLCAwLCBwYWdlKTtcbiAgICB9XG5cbiAgICBlbHNlIHtcbiAgICAgIGNvbnN0IGV4aXN0aW5nUGFnZSA9IHBhZ2VIaXN0b3J5W2luZGV4XTtcblxuICAgICAgLy8gU2FtZSBwYXRoOiByZXBsYWNlIGV4aXN0aW5nIHBhZ2VcbiAgICAgIGlmIChwYWdlSGlzdG9yeVtpbmRleF0ucGF0aCA9PT0gcGFnZS5wYXRoKSB7XG4gICAgICAgIC8vaWYgKHRoaXMuX2RlYnVnKVxuICAgICAgICBjb25zb2xlLmRlYnVnKCdbc2V0dGluZ3NdIFVwZGF0aW5nIGV4aXN0aW5nIHBhZ2UgaW4gaGlzdG9yeTogJywgcGFnZSk7XG4gICAgICAgIHBhZ2VIaXN0b3J5LnNwbGljZShpbmRleCwgMSk7XG5cbiAgICAgICAgLy8gQ29weSBleGl0aW5nIGNoaWxkcmVuXG4gICAgICAgIHBhZ2UuY2hpbGRyZW4gPSBleGlzdGluZ1BhZ2UuY2hpbGRyZW4gfHwgW107XG5cbiAgICAgICAgLy8gUHJlcGVuZCB0byBsaXN0XG4gICAgICAgIHBhZ2VIaXN0b3J5LnNwbGljZSgwLCAwLCBwYWdlKTtcbiAgICAgIH1cblxuICAgICAgLy8gTm90IHNhbWUgcGF0aCAoc2hvdWxkIGJlIGEgcGFyZW50IHBhZ2UpXG4gICAgICBlbHNlIHtcbiAgICAgICAgLy8gQ3JlYXRlIHBhcmVudCdzIGNoaWxkcmVuIGFycmF5LCBpZiBub3QgZXhpc3RzXG4gICAgICAgIGV4aXN0aW5nUGFnZS5jaGlsZHJlbiA9IGV4aXN0aW5nUGFnZS5jaGlsZHJlbiB8fCBbXTtcblxuICAgICAgICAvLyBVcGRhdGUgdGhlIHBhcmVudCB0aW1lXG4gICAgICAgIGV4aXN0aW5nUGFnZS50aW1lID0gcGFnZS50aW1lO1xuXG4gICAgICAgIC8vIEFkZCBwYWdlIGFzIHBhcmVudCdzIGNoaWxkcmVuIChyZWN1cnNpdmUgY2FsbClcbiAgICAgICAgYXdhaXQgdGhpcy5hZGRUb1BhZ2VIaXN0b3J5KHBhZ2UsIG9wdHMsIGV4aXN0aW5nUGFnZS5jaGlsZHJlbik7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gU2F2ZSBsb2NhbGx5IChvbmx5IGlmIG5vdCBhIHJlY3Vyc2l2ZSBleGVjdXRpb24pXG4gICAgaWYgKHBhZ2VIaXN0b3J5ID09PSB0aGlzLl9kYXRhLnBhZ2VIaXN0b3J5KSB7XG5cbiAgICAgIC8vIElmIG1heCBoYXMgYmVlbiByZWFjaGVkLCByZW1vdmUgb2xkIHBhZ2VzXG4gICAgICBpZiAodGhpcy5fZGF0YS5wYWdlSGlzdG9yeS5sZW5ndGggPiB0aGlzLl9kYXRhLnBhZ2VIaXN0b3J5TWF4U2l6ZSkge1xuICAgICAgICBjb25zdCByZW1vdmVkUGFnZXMgPSBwYWdlSGlzdG9yeS5zcGxpY2UodGhpcy5fZGF0YS5wYWdlSGlzdG9yeU1heFNpemUsIHBhZ2VIaXN0b3J5Lmxlbmd0aCAtIHRoaXMuX2RhdGEucGFnZUhpc3RvcnlNYXhTaXplKTtcbiAgICAgICAgY29uc29sZS5kZWJ1ZygnW3NldHRpbmdzXSBQYWdlcyByZW1vdmVkIGZyb20gaGlzdG9yeTogJywgcmVtb3ZlZFBhZ2VzKTtcbiAgICAgIH1cblxuICAgICAgLy8gQXBwbHkgbmV3IHZhbHVlXG4gICAgICBhd2FpdCB0aGlzLmFwcGx5UHJvcGVydHkoJ3BhZ2VIaXN0b3J5JywgcGFnZUhpc3RvcnkpO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIHJlbW92ZVBhZ2VIaXN0b3J5KHBhdGg6IHN0cmluZyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0cz86IHtlbWl0RXZlbnQ/OiBib29sZWFuIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHBhZ2VIaXN0b3J5PzogSGlzdG9yeVBhZ2VSZWZlcmVuY2VbXSAvLyB1c2VkIGZvciByZWN1cnNpdmUgY2FsbCB0byBjaGlsZHJlbilcbiAgKSB7XG4gICAgcGFnZUhpc3RvcnkgPSBwYWdlSGlzdG9yeSB8fCB0aGlzLl9kYXRhLnBhZ2VIaXN0b3J5O1xuXG4gICAgY29uc3QgaW5kZXggPSBwYWdlSGlzdG9yeS5maW5kSW5kZXgocCA9PiBwLnBhdGggPT09IHBhdGgpO1xuICAgIGxldCBmb3VuZCA9IGluZGV4ICE9PSAtMTtcbiAgICBpZiAoZm91bmQpIHtcbiAgICAgIGNvbnNvbGUuZGVidWcoJ1tzZXR0aW5nc10gUmVtb3ZlIHBhZ2UgaGlzdG9yeTogJywgcGF0aCk7XG4gICAgICAvLyBSZW1vdmUgdmFsdWVcbiAgICAgIHBhZ2VIaXN0b3J5LnNwbGljZShpbmRleCwgMSk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgLy8gU2VhcmNoIHBhdGggb24gY2hpbGRyZW4gKHN0b3Agd2hlbiBmb3VuZClcbiAgICAgIGZvdW5kID0gcGFnZUhpc3RvcnlcbiAgICAgICAgLm1hcChwID0+IHAuY2hpbGRyZW4pXG4gICAgICAgIC5maWx0ZXIoaXNOb3RFbXB0eUFycmF5KVxuICAgICAgICAuZmluZEluZGV4KGNoaWxkcmVuID0+IHRoaXMucmVtb3ZlUGFnZUhpc3RvcnkocGF0aCwgb3B0cywgY2hpbGRyZW4pKSAhPT0gLTE7XG4gICAgfVxuXG4gICAgLy8gU2F2ZSBsb2NhbGx5IChvbmx5IGlmIG5vdCBhIHJlY3Vyc2l2ZSBleGVjdXRpb24pXG4gICAgaWYgKGZvdW5kICYmIHBhZ2VIaXN0b3J5ID09PSB0aGlzLl9kYXRhLnBhZ2VIaXN0b3J5KSB7XG4gICAgICAvLyBBcHBseSBjaGFuZ2VzXG4gICAgICBhd2FpdCB0aGlzLmFwcGx5UHJvcGVydHkoJ3BhZ2VIaXN0b3J5JywgdGhpcy5fZGF0YS5wYWdlSGlzdG9yeSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZvdW5kO1xuICB9XG5cbiAgYXN5bmMgY2xlYXJQYWdlSGlzdG9yeSgpIHtcbiAgICAvLyBSZXNldCBhbGwgcGFnZSBoaXN0b3J5XG4gICAgYXdhaXQgdGhpcy5hcHBseVByb3BlcnR5KCdwYWdlSGlzdG9yeScsIFtdLCB7cGVyc2lzdEltbWVkaWF0ZTogdHJ1ZX0pO1xuICB9XG5cbiAgLyogLS0gUHJvdGVjdGVkIG1ldGhvZHMgLS0gKi9cblxuICBwcml2YXRlIHJlc2V0RGF0YSgpIHtcbiAgICB0aGlzLl9kYXRhID0gey4uLnRoaXMuX2RhdGEsIC4uLnRoaXMuZGVmYXVsdFNldHRpbmdzfTtcblxuICAgIHRoaXMuX2RhdGEubG9jYWxlID0gdGhpcy50cmFuc2xhdGUuY3VycmVudExhbmcgfHwgdGhpcy50cmFuc2xhdGUuZGVmYXVsdExhbmc7XG4gICAgdGhpcy5fZGF0YS5tb2JpbGUgPSB1bmRlZmluZWQ7XG4gICAgdGhpcy5fZGF0YS51c2FnZU1vZGUgPSB1bmRlZmluZWQ7XG4gICAgdGhpcy5fZGF0YS5wYWdlSGlzdG9yeSA9IFtdO1xuXG4gICAgY29uc3QgZGVmYXVsdFBlZXIgPSB0aGlzLmVudmlyb25tZW50LmRlZmF1bHRQZWVyICYmIFBlZXIuZnJvbU9iamVjdCh0aGlzLmVudmlyb25tZW50LmRlZmF1bHRQZWVyKTtcbiAgICB0aGlzLl9kYXRhLnBlZXJVcmwgPSBkZWZhdWx0UGVlciAmJiBkZWZhdWx0UGVlci51cmwgfHwgdW5kZWZpbmVkO1xuXG4gICAgaWYgKHRoaXMuc3RhcnRlZCkgdGhpcy5vbkNoYW5nZS5uZXh0KHRoaXMuX2RhdGEpO1xuICB9XG5cbiAgcHJpdmF0ZSBwZXJzaXN0TG9jYWxseShpbW1lZGlhdGU/OiBib29sZWFuKTogUHJvbWlzZTxhbnk+IHtcblxuICAgIC8vIEV4ZWN1dGUgaW1tZWRpYXRlXG4gICAgaWYgKGltbWVkaWF0ZSkge1xuICAgICAgaWYgKCF0aGlzLl9kYXRhKSB7XG4gICAgICAgIGNvbnNvbGUuZGVidWcoJ1tzZXR0aW5nc10gUmVtb3ZpbmcgbG9jYWwgc2V0dGluZ3MgZnJvbSBzdG9yYWdlJyk7XG4gICAgICAgIHJldHVybiB0aGlzLnN0b3JhZ2UucmVtb3ZlKFNFVFRJTkdTX1NUT1JBR0VfS0VZKTtcbiAgICAgIH1cbiAgICAgIGVsc2Uge1xuICAgICAgICBjb25zb2xlLmRlYnVnKCdbc2V0dGluZ3NdIFN0b3JlIGxvY2FsIHNldHRpbmdzJywgdGhpcy5fZGF0YSk7XG4gICAgICAgIHJldHVybiB0aGlzLnN0b3JhZ2Uuc2V0KFNFVFRJTkdTX1NUT1JBR0VfS0VZLCBKU09OLnN0cmluZ2lmeSh0aGlzLl9kYXRhKSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gRXhlY3V0ZSB3aXRoIGRlbGF5XG4gICAgZWxzZSB7XG5cbiAgICAgIC8vIENyZWF0ZSB0aGUgZXZlbnQgZW1pdHRlclxuICAgICAgaWYgKCF0aGlzLl8kcGVyc2lzdCkge1xuICAgICAgICB0aGlzLl8kcGVyc2lzdCA9IG5ldyBFdmVudEVtaXR0ZXI8YW55Pih0cnVlKTtcbiAgICAgICAgdGhpcy5fJHBlcnNpc3RcbiAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgIGRlYm91bmNlVGltZSgyMDAwKSwgLy8gYWRkIGEgZGVsYXkgb2YgMnNcbiAgICAgICAgICAgIGZpbHRlcigoKSA9PiB0aGlzLnN0YXJ0ZWQpXG4gICAgICAgICAgKVxuICAgICAgICAgIC5zdWJzY3JpYmUoKCkgPT4gdGhpcy5wZXJzaXN0TG9jYWxseSh0cnVlKSk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuXyRwZXJzaXN0LmVtaXQoKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGZpbGxQYWdlSGlzdG9yeURlZmF1bHRzKHBhZ2U6IEhpc3RvcnlQYWdlUmVmZXJlbmNlLCBvcHRzPzoge1xuICAgICAgcmVtb3ZlUGF0aFF1ZXJ5UGFyYW1zPzogYm9vbGVhbjtcbiAgICByZW1vdmVUaXRsZVNtYWxsVGFnPzogYm9vbGVhbjtcbiAgfSk6IEhpc3RvcnlQYWdlUmVmZXJlbmNlIHtcbiAgICBpZiAoIXBhZ2UgfHwgIXBhZ2UudGl0bGUgfHwgIXBhZ2UucGF0aCkgdGhyb3cgRXJyb3IoJ01pc3NpbmcgcmVxdWlyZWQgYXJndW1lbnQgXFwncGFnZVxcJywgXFwncGFnZS5wYXRoXFwnIG9yIFxcJ3BhZ2UudGl0bGVcXCcnKTtcblxuICAgIC8vIFNldCB0aW1lXG4gICAgcGFnZS50aW1lID0gcGFnZS50aW1lIHx8IG1vbWVudCgpO1xuXG4gICAgLy8gQ2xlYW4gdGhlIHRpdGxlIChyZW1vdmUgPHNtYWxsPiB0YWdzKVxuICAgIGlmICghb3B0cyB8fCBvcHRzLnJlbW92ZVRpdGxlU21hbGxUYWcgIT09IGZhbHNlKSB7XG4gICAgICBjb25zdCB0YWdJbmRleCA9IHBhZ2UudGl0bGUuaW5kZXhPZignPC9zbWFsbD4nKTtcbiAgICAgIGlmICh0YWdJbmRleCAhPT0gLTEpIHtcbiAgICAgICAgcGFnZS50aXRsZSA9IHBhZ2UudGl0bGUuc3Vic3RyaW5nKHRhZ0luZGV4ICsgJzwvc21hbGw+Jy5sZW5ndGgpO1xuICAgICAgfVxuICAgICAgcGFnZS50aXRsZSA9IHBhZ2UudGl0bGUucmVwbGFjZSgvWyBdKmNsYXNzPSdoaWRkZW4teHMgaGlkZGVuLXNtJy9nLCAnJyk7XG4gICAgfVxuXG4gICAgLy8gUmVtb3ZlIHF1ZXJ5IHBhcmFtc1xuICAgIGlmICghb3B0cyB8fCBvcHRzLnJlbW92ZVBhdGhRdWVyeVBhcmFtcyAhPT0gZmFsc2UpIHtcbiAgICAgIHBhZ2UucGF0aCA9IHBhZ2UucGF0aC5yZXBsYWNlKC9bP10uKiQvLCAnJyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHBhZ2U7XG4gIH1cbn1cbiJdfQ==
460
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9jYWwtc2V0dGluZ3Muc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvY29yZS9zZXJ2aWNlcy9sb2NhbC1zZXR0aW5ncy5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUMsWUFBWSxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsY0FBYyxFQUFFLFFBQVEsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUV6RixPQUFPLEVBQUMsSUFBSSxFQUFDLE1BQU0sb0JBQW9CLENBQUM7QUFDeEMsT0FBTyxFQUFDLGdCQUFnQixFQUFDLE1BQU0scUJBQXFCLENBQUM7QUFDckQsT0FBTyxFQUFDLE9BQU8sRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBRXZDLE9BQU8sRUFBQyxNQUFNLEVBQUUsaUJBQWlCLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBRSxlQUFlLEVBQUUsUUFBUSxFQUFFLGVBQWUsRUFBQyxNQUFNLHdCQUF3QixDQUFDO0FBQ2xJLE9BQU8sRUFBQyxPQUFPLEVBQUMsTUFBTSxNQUFNLENBQUM7QUFDN0IsT0FBTyxFQUFDLFFBQVEsRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBRXhDLE9BQU8sS0FBSyxjQUFjLE1BQU0sUUFBUSxDQUFDO0FBRXpDLE9BQU8sRUFBQyxZQUFZLEVBQUUsTUFBTSxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFFcEQsT0FBTyxFQUFDLFdBQVcsRUFBRSxXQUFXLEVBQUMsTUFBTSx5Q0FBeUMsQ0FBQztBQUNqRixPQUFPLEVBQUMsV0FBVyxFQUFDLE1BQU0sbUNBQW1DLENBQUM7QUFDOUQsT0FBTyxFQUFDLGlCQUFpQixFQUFDLE1BQU0sb0JBQW9CLENBQUM7QUFFckQsT0FBTyxFQUFDLGdCQUFnQixFQUFDLE1BQU0sK0NBQStDLENBQUM7QUFDL0UsT0FBTyxFQUFDLFNBQVMsRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBQyxN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QU0sU0FBQywwQkFBMEIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0V2ZW50RW1pdHRlciwgSW5qZWN0LCBJbmplY3RhYmxlLCBJbmplY3Rpb25Ub2tlbiwgT3B0aW9uYWx9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtMb2NhbFNldHRpbmdzLCBPZmZsaW5lRmVhdHVyZSwgVXNhZ2VNb2RlfSBmcm9tICcuL21vZGVsL3NldHRpbmdzLm1vZGVsJztcbmltcG9ydCB7UGVlcn0gZnJvbSAnLi9tb2RlbC9wZWVyLm1vZGVsJztcbmltcG9ydCB7VHJhbnNsYXRlU2VydmljZX0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XG5pbXBvcnQge1N0b3JhZ2V9IGZyb20gJ0Bpb25pYy9zdG9yYWdlJztcblxuaW1wb3J0IHtlcXVhbHMsIGdldFByb3BlcnR5QnlQYXRoLCBpc0VtcHR5QXJyYXksIGlzTmlsLCBpc05vdEVtcHR5QXJyYXksIGlzTm90TmlsLCBpc05vdE5pbE9yQmxhbmt9IGZyb20gJy4uLy4uL3NoYXJlZC9mdW5jdGlvbnMnO1xuaW1wb3J0IHtTdWJqZWN0fSBmcm9tICdyeGpzJztcbmltcG9ydCB7UGxhdGZvcm19IGZyb20gJ0Bpb25pYy9hbmd1bGFyJztcbmltcG9ydCB7Rm9ybUZpZWxkRGVmaW5pdGlvbiwgRm9ybUZpZWxkRGVmaW5pdGlvbk1hcH0gZnJvbSAnLi4vLi4vc2hhcmVkL2Zvcm0vZmllbGQubW9kZWwnO1xuaW1wb3J0ICogYXMgbW9tZW50SW1wb3J0ZWQgZnJvbSAnbW9tZW50JztcbmltcG9ydCB7TW9tZW50fSBmcm9tICdtb21lbnQnO1xuaW1wb3J0IHtkZWJvdW5jZVRpbWUsIGZpbHRlcn0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHtMYXRMb25nUGF0dGVybn0gZnJvbSAnLi4vLi4vc2hhcmVkL21hdGVyaWFsL2xhdGxvbmcvbGF0bG9uZy51dGlscyc7XG5pbXBvcnQge0Vudmlyb25tZW50LCBFTlZJUk9OTUVOVH0gZnJvbSAnLi4vLi4vLi4vZW52aXJvbm1lbnRzL2Vudmlyb25tZW50LmNsYXNzJztcbmltcG9ydCB7ZW52aXJvbm1lbnR9IGZyb20gJy4uLy4uLy4uL2Vudmlyb25tZW50cy9lbnZpcm9ubWVudCc7XG5pbXBvcnQge2Zyb21EYXRlSVNPU3RyaW5nfSBmcm9tICcuLi8uLi9zaGFyZWQvZGF0ZXMnO1xuaW1wb3J0IHtIaXN0b3J5UGFnZVJlZmVyZW5jZX0gZnJvbSAnLi9tb2RlbC9oaXN0b3J5Lm1vZGVsJztcbmltcG9ydCB7U3RhcnRhYmxlU2VydmljZX0gZnJvbSAnLi4vLi4vc2hhcmVkL3NlcnZpY2VzL3N0YXJ0YWJsZS1zZXJ2aWNlLmNsYXNzJztcbmltcG9ydCB7aXNBbmRyb2lkLCBpc0NvcmRvdmEsIGlzSU9TLCBpc01vYmlsZX0gZnJvbSAnLi4vLi4vc2hhcmVkL3BsYXRmb3Jtcyc7XG5cbmNvbnN0IG1vbWVudCA9IG1vbWVudEltcG9ydGVkO1xuXG5leHBvcnQgY29uc3QgU0VUVElOR1NfU1RPUkFHRV9LRVkgPSAnc2V0dGluZ3MnO1xuZXhwb3J0IGNvbnN0IFNFVFRJTkdTX1RSQU5TSUVOVF9QUk9QRVJUSUVTID0gWydtb2JpbGUnLCAndG91Y2hVaScvKmRlcHJlY2F0ZWQqL107XG5cbi8vIGZpeG1lOiB0aGlzIGNvbnN0YW50IHBvaW50cyB0byBzdGF0aWMgZW52aXJvbm1lbnRcbmNvbnN0IERFRkFVTFRfU0VUVElOR1M6IExvY2FsU2V0dGluZ3MgPSB7XG4gIGFjY291bnRJbmhlcml0YW5jZTogdHJ1ZSxcbiAgbG9jYWxlOiBlbnZpcm9ubWVudC5kZWZhdWx0TG9jYWxlLFxuICBsYXRMb25nRm9ybWF0OiBlbnZpcm9ubWVudC5kZWZhdWx0TGF0TG9uZ0Zvcm1hdCB8fCAnRERNTScsXG4gIHBhZ2VIaXN0b3J5TWF4U2l6ZTogM1xufTtcblxuZXhwb3J0IGNvbnN0IEFQUF9MT0NBTF9TRVRUSU5HUyA9IG5ldyBJbmplY3Rpb25Ub2tlbjxQYXJ0aWFsPExvY2FsU2V0dGluZ3M+PignRGVmYXVsdExvY2FsU2V0dGluZ3MnKTtcbmV4cG9ydCBjb25zdCBBUFBfTE9DQUxfU0VUVElOR1NfT1BUSU9OUyA9IG5ldyBJbmplY3Rpb25Ub2tlbjxGb3JtRmllbGREZWZpbml0aW9uTWFwPignTG9jYWxTZXR0aW5nc09wdGlvbnMnKTtcblxuZXhwb3J0IGRlY2xhcmUgaW50ZXJmYWNlIEFkZFRvUGFnZUhpc3RvcnlPcHRpb25zIHtcbiAgcmVtb3ZlUGF0aFF1ZXJ5UGFyYW1zPzogYm9vbGVhbjtcbiAgcmVtb3ZlVGl0bGVTbWFsbFRhZz86IGJvb2xlYW47XG4gIGVtaXRFdmVudD86IGJvb2xlYW47XG59XG5cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnXG4gIC8vZGVwczogW0FQUF9MT0NBTF9TRVRUSU5HUywgQVBQX0xPQ0FMX1NFVFRJTkdTX09QVElPTlNdXG59KVxuZXhwb3J0IGNsYXNzIExvY2FsU2V0dGluZ3NTZXJ2aWNlIGV4dGVuZHMgU3RhcnRhYmxlU2VydmljZTxMb2NhbFNldHRpbmdzPiB7XG5cbiAgb25DaGFuZ2UgPSBuZXcgU3ViamVjdDxMb2NhbFNldHRpbmdzPigpO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgX29wdGlvbkRlZnM6IEZvcm1GaWVsZERlZmluaXRpb25bXTtcbiAgcHJpdmF0ZSBfJHBlcnNpc3Q6IEV2ZW50RW1pdHRlcjxhbnk+O1xuXG4gIGdldCBzZXR0aW5ncygpOiBMb2NhbFNldHRpbmdzIHtcbiAgICByZXR1cm4gdGhpcy5fZGF0YSB8fCB0aGlzLmRlZmF1bHRTZXR0aW5ncztcbiAgfVxuXG4gIGdldCBsb2NhbGUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fZGF0YSAmJiB0aGlzLl9kYXRhLmxvY2FsZSB8fCB0aGlzLnRyYW5zbGF0ZS5jdXJyZW50TGFuZyB8fCB0aGlzLnRyYW5zbGF0ZS5kZWZhdWx0TGFuZztcbiAgfVxuXG4gIGdldCBsYXRMb25nRm9ybWF0KCk6IExhdExvbmdQYXR0ZXJuIHtcbiAgICByZXR1cm4gdGhpcy5fZGF0YSAmJiB0aGlzLl9kYXRhLmxhdExvbmdGb3JtYXQgfHwgJ0RETU0nO1xuICB9XG5cbiAgZ2V0IHVzYWdlTW9kZSgpOiBVc2FnZU1vZGUge1xuICAgIGlmIChpc05pbCh0aGlzLl9kYXRhPy51c2FnZU1vZGUpKSB7XG4gICAgICBjb25zb2xlLndhcm4oXCJbc2V0dGluZ3NdIEFjY2Vzc2luZyB0byBwcm9wZXJ0eSAndXNhZ2VNb2RlJyBCRUZPUkUgc2VydmljZSBzdGFydGVkISBQbGVhc2UgdXNlIHJlYWR5KClcIik7XG4gICAgICByZXR1cm4gaXNDb3Jkb3ZhKHdpbmRvdykgPyAnRklFTEQnIDogJ0RFU0snO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5fZGF0YS51c2FnZU1vZGU7XG4gIH1cblxuICBnZXQgbW9iaWxlKCk6IGJvb2xlYW4ge1xuICAgIGlmIChpc05pbCh0aGlzLl9kYXRhPy5tb2JpbGUpKSB7XG4gICAgICBjb25zb2xlLndhcm4oXCJbc2V0dGluZ3NdIEFjY2Vzc2luZyB0byBwcm9wZXJ0eSAnbW9iaWxlJyBCRUZPUkUgc2VydmljZSBzdGFydGVkISBQbGVhc2UgdXNlIHJlYWR5KClcIik7XG4gICAgICByZXR1cm4gaXNNb2JpbGUod2luZG93KTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuX2RhdGEubW9iaWxlO1xuICB9XG5cbiAgc2V0IG1vYmlsZSh2YWx1ZTogYm9vbGVhbikge1xuICAgIHRoaXMuX2RhdGEubW9iaWxlID0gdmFsdWU7XG4gIH1cblxuICBnZXQgcGFnZUhpc3RvcnkoKTogSGlzdG9yeVBhZ2VSZWZlcmVuY2VbXSB7XG4gICAgcmV0dXJuICh0aGlzLl9kYXRhICYmIHRoaXMuX2RhdGEucGFnZUhpc3RvcnkgfHwgW10pO1xuICB9XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSB0cmFuc2xhdGU6IFRyYW5zbGF0ZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBwbGF0Zm9ybTogUGxhdGZvcm0sXG4gICAgcHJpdmF0ZSBzdG9yYWdlOiBTdG9yYWdlLFxuICAgIEBJbmplY3QoRU5WSVJPTk1FTlQpIHByb3RlY3RlZCByZWFkb25seSBlbnZpcm9ubWVudDogRW52aXJvbm1lbnQsXG4gICAgQE9wdGlvbmFsKCkgQEluamVjdChBUFBfTE9DQUxfU0VUVElOR1MpIHByaXZhdGUgcmVhZG9ubHkgZGVmYXVsdFNldHRpbmdzOiBMb2NhbFNldHRpbmdzLFxuICAgIEBPcHRpb25hbCgpIEBJbmplY3QoQVBQX0xPQ0FMX1NFVFRJTkdTX09QVElPTlMpIGRlZmF1bHRPcHRpb25zTWFwOiBGb3JtRmllbGREZWZpbml0aW9uTWFwXG4gICkge1xuICAgIHN1cGVyKHBsYXRmb3JtKTtcbiAgICB0aGlzLmRlZmF1bHRTZXR0aW5ncyA9IHsuLi5ERUZBVUxUX1NFVFRJTkdTLCAuLi50aGlzLmRlZmF1bHRTZXR0aW5nc307XG5cbiAgICB0aGlzLl9vcHRpb25EZWZzID0gT2JqZWN0LnZhbHVlcyhkZWZhdWx0T3B0aW9uc01hcCk7XG5cbiAgICB0aGlzLnJlc2V0RGF0YSgpO1xuXG4gICAgdGhpcy5fZGVidWcgPSAhZW52aXJvbm1lbnQucHJvZHVjdGlvbjtcbiAgICBpZiAodGhpcy5fZGVidWcpIGNvbnNvbGUuZGVidWcoJ1tzZXR0aW5nc10gQ3JlYXRpbmcgc2VydmljZScpO1xuICB9XG5cbiAgbmdPblN0YXJ0KCk6IFByb21pc2U8TG9jYWxTZXR0aW5ncz4ge1xuXG4gICAgY29uc29sZS5pbmZvKCdbc2V0dGluZ3NdIFN0YXJ0aW5nIHNlcnZpY2UuLi4nKTtcblxuICAgIC8vIFJlc3RvcmluZyBsb2NhbCBzZXR0aW5nc1xuICAgIHRoaXMuX2RhdGEubW9iaWxlID0gaXNOb3ROaWwodGhpcy5fZGF0YS5tb2JpbGUpID8gdGhpcy5fZGF0YS5tb2JpbGUgOiAoaXNDb3Jkb3ZhKHdpbmRvdykgfHwgaXNNb2JpbGUod2luZG93KSk7XG4gICAgdGhpcy5fZGF0YS51c2FnZU1vZGUgPSAoaXNBbmRyb2lkKHdpbmRvdykgfHwgaXNJT1Mod2luZG93KSkgPyAnRklFTEQnIDogJ0RFU0snOyAvLyBGSUVMRCBieSBkZWZhdWx0IGlmIEFuZHJvaWQgb3IgaU9TXG5cbiAgICAvLyBSZXN0b3JpbmcgbG9jYWwgc2V0dGluZ3NcbiAgICByZXR1cm4gdGhpcy5yZXN0b3JlTG9jYWxseSgpO1xuICB9XG5cbiAgaXNVc2FnZU1vZGUobW9kZTogVXNhZ2VNb2RlKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMudXNhZ2VNb2RlID09PSBtb2RlO1xuICB9XG5cbiAgaXNPbkZpZWxkTW9kZSh2YWx1ZT86IFVzYWdlTW9kZSk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAodmFsdWUgfHwgdGhpcy51c2FnZU1vZGUpID09PSAnRklFTEQnO1xuICB9XG5cbiAgYXN5bmMgcmVzdG9yZUxvY2FsbHkoKTogUHJvbWlzZTxMb2NhbFNldHRpbmdzIHwgdW5kZWZpbmVkPiB7XG4gICAgbGV0IGRhdGEgPSB0aGlzLl9kYXRhIHx8IDxMb2NhbFNldHRpbmdzPnt9O1xuXG4gICAgLy8gUmVzdG9yZSBmcm9tIHN0b3JhZ2VcbiAgICBjb25zdCBzZXR0aW5nc1N0ciA9IGF3YWl0IHRoaXMuc3RvcmFnZS5nZXQoU0VUVElOR1NfU1RPUkFHRV9LRVkpO1xuXG4gICAgLy8gUmVzdG9yZSBsb2NhbCBzZXR0aW5ncyAob3Iga2VlcCBvbGQgc2V0dGluZ3MpXG4gICAgaWYgKGlzTm90TmlsT3JCbGFuayhzZXR0aW5nc1N0cikpIHtcbiAgICAgIGNvbnNvbGUuaW5mbygnW3NldHRpbmdzXSBSZXN0b3JpbmcgcHJldmlvdXMgc2V0dGluZ3MuLi4nKTtcblxuICAgICAgY29uc3QgcmVzdG9yZWREYXRhID0gSlNPTi5wYXJzZShzZXR0aW5nc1N0cik7XG5cbiAgICAgIC8vIEF2b2lkIHRvIG92ZXJyaWRlIHRyYW5zaWVudCBwcm9wZXJ0aWVzXG4gICAgICBTRVRUSU5HU19UUkFOU0lFTlRfUFJPUEVSVElFUy5mb3JFYWNoKHRyYW5zaWVudEtleSA9PiB7XG4gICAgICAgIGRlbGV0ZSByZXN0b3JlZERhdGFbdHJhbnNpZW50S2V5XTtcbiAgICAgIH0pO1xuXG4gICAgICAvLyBNZXJnZSBpbnRvIGV4aXN0aW5nIGRhdGFcbiAgICAgIGRhdGEgPSBPYmplY3QuYXNzaWduKGRhdGEsIHJlc3RvcmVkRGF0YSk7XG4gICAgfVxuXG4gICAgLy8gRW1pdCBldmVudFxuICAgIHRoaXMub25DaGFuZ2UubmV4dChkYXRhKTtcblxuICAgIHJldHVybiBkYXRhO1xuICB9XG5cbiAgc2V0UHJvcGVydHk8VCA9IHN0cmluZz4oa2V5T3JEZWY6IHN0cmluZ3xGb3JtRmllbGREZWZpbml0aW9uLCB2YWx1ZTogVCl7XG4gICAgaWYgKCF0aGlzLl9kYXRhIHx8ICFrZXlPckRlZikgcmV0dXJuO1xuICAgIGlmICh0eXBlb2Yga2V5T3JEZWYgPT09ICdvYmplY3QnKSB7XG4gICAgICB0aGlzLnNldFByb3BlcnR5KGtleU9yRGVmLmtleSwgdmFsdWUpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLl9kYXRhLnByb3BlcnRpZXMgPSB0aGlzLl9kYXRhLnByb3BlcnRpZXMgfHwge307XG4gICAgdGhpcy5fZGF0YS5wcm9wZXJ0aWVzW2tleU9yRGVmXSA9IGlzTmlsKHZhbHVlKSA/IHVuZGVmaW5lZCA6IHZhbHVlLnRvU3RyaW5nKCk7XG4gIH1cblxuICBnZXRQcm9wZXJ0eShrZXlPckRlZjogc3RyaW5nfEZvcm1GaWVsZERlZmluaXRpb24sIGRlZmF1bHRWYWx1ZT86IGFueSk6IGFueSB7XG4gICAgaWYgKHR5cGVvZiBrZXlPckRlZiA9PT0gJ29iamVjdCcpIHtcbiAgICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5KGtleU9yRGVmLmtleSwgaXNOaWwoZGVmYXVsdFZhbHVlKSA/IGtleU9yRGVmLmRlZmF1bHRWYWx1ZSA6IGRlZmF1bHRWYWx1ZSk7XG4gICAgfVxuICAgIGNvbnN0IHZhbHVlID0gdGhpcy5fZGF0YSAmJiB0aGlzLl9kYXRhLnByb3BlcnRpZXMgJiYgdGhpcy5fZGF0YS5wcm9wZXJ0aWVzW2tleU9yRGVmXTtcbiAgICByZXR1cm4gaXNOb3ROaWwodmFsdWUpID8gdmFsdWUgOiBkZWZhdWx0VmFsdWU7XG4gIH1cblxuICBnZXRQcm9wZXJ0eUFzQm9vbGVhbihkZWZpbml0aW9uOiBGb3JtRmllbGREZWZpbml0aW9uLCBkZWZhdWx0VmFsdWU/OiBib29sZWFuKTogYm9vbGVhbiB7XG4gICAgY29uc3QgdmFsdWUgPSB0aGlzLmdldFByb3BlcnR5KGRlZmluaXRpb24sIGRlZmF1bHRWYWx1ZSk7XG4gICAgcmV0dXJuIGlzTm90TmlsKHZhbHVlKSA/ICh2YWx1ZSAmJiB2YWx1ZSAhPT0gJ2ZhbHNlJykgOiB1bmRlZmluZWQ7XG4gIH1cblxuICBnZXRQcm9wZXJ0eUFzSW50KGRlZmluaXRpb246IEZvcm1GaWVsZERlZmluaXRpb24sIGRlZmF1bHRWYWx1ZT86IG51bWJlcik6IG51bWJlciB7XG4gICAgY29uc3QgdmFsdWUgPSB0aGlzLmdldFByb3BlcnR5KGRlZmluaXRpb24sIGRlZmF1bHRWYWx1ZSk7XG4gICAgcmV0dXJuIGlzTm90TmlsKHZhbHVlKSA/IHBhcnNlSW50KHZhbHVlKSA6IHVuZGVmaW5lZDtcbiAgfVxuXG4gIGdldFByb3BlcnR5QXNOdW1iZXJzKGRlZmluaXRpb246IEZvcm1GaWVsZERlZmluaXRpb24sIGRlZmF1bHRWYWx1ZT86IG51bWJlcltdKTogbnVtYmVyW10ge1xuICAgIGNvbnN0IHZhbHVlID0gdGhpcy5nZXRQcm9wZXJ0eShkZWZpbml0aW9uLCBkZWZhdWx0VmFsdWUpO1xuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnKSByZXR1cm4gdmFsdWUuc3BsaXQoJywnKS5tYXAocGFyc2VGbG9hdCkgfHwgdW5kZWZpbmVkO1xuICAgIHJldHVybiBpc05vdE5pbCh2YWx1ZSkgPyBbcGFyc2VGbG9hdCh2YWx1ZSldIDogdW5kZWZpbmVkO1xuICB9XG5cbiAgZ2V0UHJvcGVydHlBc1N0cmluZ3MoZGVmaW5pdGlvbjogRm9ybUZpZWxkRGVmaW5pdGlvbiwgZGVmYXVsdFZhbHVlPzogc3RyaW5nW10pOiBzdHJpbmdbXSB7XG4gICAgY29uc3QgdmFsdWUgPSB0aGlzLmdldFByb3BlcnR5KGRlZmluaXRpb24sIGRlZmF1bHRWYWx1ZSk7XG4gICAgcmV0dXJuIHZhbHVlICYmIHZhbHVlLnNwbGl0KCcsJykgfHwgdW5kZWZpbmVkO1xuICB9XG5cbiAgYXN5bmMgYXBwbHkoc2V0dGluZ3M6IFBhcnRpYWw8TG9jYWxTZXR0aW5ncz4sIG9wdHM/OiB7IGVtaXRFdmVudD86IGJvb2xlYW47IHBlcnNpc3RJbW1lZGlhdGU/OiBib29sZWFuIH0pIHtcbiAgICBpZiAoIXRoaXMuc3RhcnRlZCkgYXdhaXQgdGhpcy5yZWFkeSgpO1xuXG4gICAgY29uc3QgZGF0YSA9IHsgLi4udGhpcy5fZGF0YSwgLi4uc2V0dGluZ3N9O1xuXG4gICAgaWYgKGVxdWFscyhkYXRhLCB0aGlzLl9kYXRhKSkgcmV0dXJuOyAvLyBTa2lwIGlmIG5vIGNoYW5nZXNcblxuICAgIHRoaXMuX2RhdGEgPSBkYXRhO1xuXG4gICAgLy8gU2F2ZSBsb2NhbGx5XG4gICAgaWYgKG9wdHMgJiYgb3B0cy5wZXJzaXN0SW1tZWRpYXRlKSB7XG4gICAgICBhd2FpdCB0aGlzLnBlcnNpc3RMb2NhbGx5KHRydWUpO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIHRoaXMucGVyc2lzdExvY2FsbHkoKTsgLy8gTm8gQVdBSVRcbiAgICB9XG5cbiAgICAvLyBFbWl0IGV2ZW50XG4gICAgaWYgKCFvcHRzIHx8IG9wdHMuZW1pdEV2ZW50ICE9PSBmYWxzZSkge1xuICAgICAgdGhpcy5vbkNoYW5nZS5uZXh0KHRoaXMuX2RhdGEpO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGFwcGx5UHJvcGVydHkoa2V5OiBrZXlvZiBMb2NhbFNldHRpbmdzLCB2YWx1ZTogYW55LCBvcHRzPzogeyBlbWl0RXZlbnQ/OiBib29sZWFuOyBwZXJzaXN0SW1tZWRpYXRlPzogYm9vbGVhbiB9KSB7XG4gICAgY29uc3QgY2hhbmdlcyA9IHt9O1xuICAgIGNoYW5nZXNba2V5XSA9IHZhbHVlO1xuICAgIGF3YWl0IHRoaXMuYXBwbHkoY2hhbmdlcywgb3B0cyk7XG4gIH1cblxuICBnZXRQYWdlU2V0dGluZ3M8VCA9IGFueT4ocGFnZUlkOiBzdHJpbmcsIHByb3BlcnR5TmFtZT86IHN0cmluZyk6IFQge1xuICAgIGlmICghdGhpcy5fZGF0YSB8fCAhdGhpcy5fZGF0YS5wYWdlcykgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICBjb25zdCBrZXkgPSBwYWdlSWQucmVwbGFjZSgvWy9dL2csICdfXycpO1xuICAgIGlmIChpc05vdE5pbE9yQmxhbmsocHJvcGVydHlOYW1lKSkge1xuICAgICAgcmV0dXJuIGdldFByb3BlcnR5QnlQYXRoKHRoaXMuX2RhdGEucGFnZXMsIGtleSArICcuJyArIHByb3BlcnR5TmFtZSk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLl9kYXRhLnBhZ2VzW2tleV07XG4gIH1cblxuICBhc3luYyBzYXZlUGFnZVNldHRpbmcocGFnZUlkOiBzdHJpbmcsIHZhbHVlOiBhbnksIHByb3BlcnR5TmFtZT86IHN0cmluZykge1xuICAgIHRoaXMuX2RhdGEgPSB0aGlzLl9kYXRhIHx8IHRoaXMuZGVmYXVsdFNldHRpbmdzO1xuICAgIHRoaXMuX2RhdGEucGFnZXMgPSB0aGlzLl9kYXRhLnBhZ2VzIHx8IHt9O1xuXG4gICAgY29uc3Qga2V5ID0gcGFnZUlkLnJlcGxhY2UoL1svXS9nLCAnX18nKTtcbiAgICBpZiAocHJvcGVydHlOYW1lKSB7XG4gICAgICB0aGlzLl9kYXRhLnBhZ2VzW2tleV0gPSB0aGlzLl9kYXRhLnBhZ2VzW2tleV0gfHwge307XG4gICAgICB0aGlzLl9kYXRhLnBhZ2VzW2tleV1bcHJvcGVydHlOYW1lXSA9IHZhbHVlO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIHRoaXMuX2RhdGEucGFnZXNba2V5XSA9IHZhbHVlO1xuICAgIH1cblxuICAgIC8vIFVwZGF0ZSBsb2NhbCBzZXR0aW5nc1xuICAgIHRoaXMucGVyc2lzdExvY2FsbHkoKTtcbiAgfVxuXG5cbiAgZ2V0T2ZmbGluZUZlYXR1cmUoZmVhdHVyZU5hbWU6IHN0cmluZyk6IE9mZmxpbmVGZWF0dXJlIHtcbiAgICBpZiAoIXRoaXMuX2RhdGEgfHwgIXRoaXMuX2RhdGEub2ZmbGluZUZlYXR1cmVzIHx8IGlzRW1wdHlBcnJheSh0aGlzLl9kYXRhLm9mZmxpbmVGZWF0dXJlcykpXG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIGlmICghZmVhdHVyZU5hbWUpIHRocm93IEVycm9yKCdNaXNzaW5nIFxcJ2ZlYXR1cmVOYW1lXFwnIGFyZ3VtZW50Jyk7XG5cbiAgICBmZWF0dXJlTmFtZSA9IGZlYXR1cmVOYW1lLnRvTG93ZXJDYXNlKCk7XG4gICAgY29uc3QgZmVhdHVyZVByZWZpeCA9IGZlYXR1cmVOYW1lICsgJyMnO1xuICAgIGNvbnN0IGZlYXR1cmUgPSB0aGlzLl9kYXRhLm9mZmxpbmVGZWF0dXJlcy5maW5kKGYgPT4ge1xuICAgICAgaWYgKHR5cGVvZiBmID09PSAnc3RyaW5nJykgcmV0dXJuIGYudG9Mb3dlckNhc2UoKS5zdGFydHNXaXRoKGZlYXR1cmVQcmVmaXgpO1xuICAgICAgaWYgKGYgJiYgdHlwZW9mIGYgPT09ICdvYmplY3QnICYmIGYubmFtZSkgcmV0dXJuIGYubmFtZSA9PT0gZmVhdHVyZU5hbWU7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfSk7XG4gICAgaWYgKCFmZWF0dXJlKSByZXR1cm47IC8vIE5vdCBmb3VuZFxuICAgIGlmICh0eXBlb2YgZmVhdHVyZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgIGNvbnN0IGxhc3RTeW5jRGF0ZSA9IGZlYXR1cmUuc3Vic3RyaW5nKGZlYXR1cmVQcmVmaXgubGVuZ3RoKTtcbiAgICAgIGNvbnNvbGUuZGVidWcoYFske2ZlYXR1cmVOYW1lfV0gTGFzdCBzeW5jaHJvbml6YXRpb24gZGF0ZTogJHtsYXN0U3luY0RhdGV9YCk7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBuYW1lOiBmZWF0dXJlTmFtZSxcbiAgICAgICAgbGFzdFN5bmNEYXRlXG4gICAgICB9O1xuICAgIH1cbiAgICByZXR1cm4gZmVhdHVyZTtcbiAgfVxuXG4gIGdldE9mZmxpbmVGZWF0dXJlTGFzdFN5bmNEYXRlKGZlYXR1cmVOYW1lOiBzdHJpbmcpOiBNb21lbnQge1xuICAgIGNvbnN0IGZlYXR1cmUgPSB0aGlzLmdldE9mZmxpbmVGZWF0dXJlKGZlYXR1cmVOYW1lKTtcbiAgICByZXR1cm4gZmVhdHVyZSAmJiBmcm9tRGF0ZUlTT1N0cmluZyhmZWF0dXJlLmxhc3RTeW5jRGF0ZSk7XG4gIH1cblxuICBoYXNPZmZsaW5lRmVhdHVyZShmZWF0dXJlTmFtZT86IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIGlmIChmZWF0dXJlTmFtZSkgcmV0dXJuIGlzTm90TmlsKHRoaXMuZ2V0T2ZmbGluZUZlYXR1cmUoZmVhdHVyZU5hbWUpKTtcbiAgICByZXR1cm4gdGhpcy5fZGF0YSAmJiBpc05vdEVtcHR5QXJyYXkodGhpcy5fZGF0YS5vZmZsaW5lRmVhdHVyZXMpO1xuICB9XG5cbiAgc2F2ZU9mZmxpbmVGZWF0dXJlKGZlYXR1cmU6IE9mZmxpbmVGZWF0dXJlKSB7XG4gICAgdGhpcy5fZGF0YSA9IHRoaXMuX2RhdGEgfHwgdGhpcy5kZWZhdWx0U2V0dGluZ3M7XG4gICAgdGhpcy5fZGF0YS5vZmZsaW5lRmVhdHVyZXMgPSB0aGlzLl9kYXRhLm9mZmxpbmVGZWF0dXJlcyB8fCBbXTtcblxuICAgIGZlYXR1cmUubmFtZSA9IGZlYXR1cmUubmFtZS50b0xvd2VyQ2FzZSgpO1xuXG4gICAgY29uc3QgZmVhdHVyZVByZWZpeCA9IGZlYXR1cmUubmFtZSArICcjJztcbiAgICBjb25zdCBleGlzdGluZ0luZGV4ID0gdGhpcy5fZGF0YS5vZmZsaW5lRmVhdHVyZXMuZmluZEluZGV4KGYgPT4ge1xuICAgICAgaWYgKHR5cGVvZiBmID09PSAnc3RyaW5nJykgcmV0dXJuIGYudG9Mb3dlckNhc2UoKS5zdGFydHNXaXRoKGZlYXR1cmVQcmVmaXgpO1xuICAgICAgaWYgKGYgJiYgdHlwZW9mIGYgPT09ICdvYmplY3QnICYmIGYubmFtZSkgcmV0dXJuIGYubmFtZSA9PT0gZmVhdHVyZS5uYW1lO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH0pO1xuICAgIGlmIChleGlzdGluZ0luZGV4ICE9PSAtMSkge1xuICAgICAgdGhpcy5fZGF0YS5vZmZsaW5lRmVhdHVyZXNbZXhpc3RpbmdJbmRleF0gPSBmZWF0dXJlO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIHRoaXMuX2RhdGEub2ZmbGluZUZlYXR1cmVzLnB1c2goZmVhdHVyZSk7XG4gICAgfVxuXG4gICAgLy8gVXBkYXRlIGxvY2FsIHNldHRpbmdzXG4gICAgdGhpcy5wZXJzaXN0TG9jYWxseSgpO1xuICB9XG5cbiAgbWFya09mZmxpbmVGZWF0dXJlQXNTeW5jKGZlYXR1cmVOYW1lOiBzdHJpbmcpIHtcbiAgICBsZXQgZmVhdHVyZSA9IHRoaXMuZ2V0T2ZmbGluZUZlYXR1cmUoZmVhdHVyZU5hbWUpO1xuXG4gICAgaWYgKCFmZWF0dXJlKSB7XG4gICAgICBmZWF0dXJlID0gPE9mZmxpbmVGZWF0dXJlPntcbiAgICAgICAgbmFtZTogZmVhdHVyZU5hbWUudG9Mb3dlckNhc2UoKSxcbiAgICAgICAgbGFzdFN5bmNEYXRlOiBtb21lbnQoKS50b0lTT1N0cmluZygpXG4gICAgICB9O1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIGZlYXR1cmUubGFzdFN5bmNEYXRlID0gbW9tZW50KCkudG9JU09TdHJpbmcoKTtcbiAgICB9XG5cbiAgICB0aGlzLnNhdmVPZmZsaW5lRmVhdHVyZShmZWF0dXJlKTtcbiAgfVxuXG4gIHJlbW92ZU9mZmxpbmVGZWF0dXJlcygpIHtcbiAgICBpZiAodGhpcy5fZGF0YSAmJiB0aGlzLl9kYXRhLm9mZmxpbmVGZWF0dXJlcykge1xuICAgICAgdGhpcy5fZGF0YS5vZmZsaW5lRmVhdHVyZXMgPSBbXTtcblxuICAgICAgLy8gVXBkYXRlIGxvY2FsIHNldHRpbmdzXG4gICAgICB0aGlzLnBlcnNpc3RMb2NhbGx5KCk7XG4gICAgfVxuICB9XG5cbiAgZ2V0RmllbGREaXNwbGF5QXR0cmlidXRlcyhmaWVsZE5hbWU6IHN0cmluZywgZGVmYXVsdEF0dHJpYnV0ZXM/OiBzdHJpbmdbXSk6IHN0cmluZ1tdIHtcbiAgICBjb25zdCB2YWx1ZSA9IHRoaXMuX2RhdGEgJiYgdGhpcy5fZGF0YS5wcm9wZXJ0aWVzICYmICB0aGlzLl9kYXRhLnByb3BlcnRpZXNbYHN1bWFyaXMuZmllbGQuJHtmaWVsZE5hbWV9LmF0dHJpYnV0ZXNgXTtcbiAgICAvLyBOb3RoaW5nIGZvdW5kIGluIHNldHRpbmdzOiByZXR1cm4gZGVmYXVsdHNcbiAgICBpZiAoIXZhbHVlKSByZXR1cm4gZGVmYXVsdEF0dHJpYnV0ZXMgfHwgWydsYWJlbCcsICduYW1lJ107XG5cbiAgICByZXR1cm4gdmFsdWUuc3BsaXQoJywnKTtcbiAgfVxuXG4gIGdldFBhZ2VGaWVsZERlZmF1bHRWYWx1ZShwYWdlSWQ6IHN0cmluZywgZmllbGROYW1lOiBzdHJpbmcpOiBhbnkge1xuICAgIHJldHVybiB0aGlzLmdldFBhZ2VTZXR0aW5ncyhwYWdlSWQsIGBmaWVsZC4ke2ZpZWxkTmFtZX0uZGVmYXVsdFZhbHVlYCk7XG4gIH1cblxuICBnZXQgb3B0aW9uRGVmcygpOiBGb3JtRmllbGREZWZpbml0aW9uW10ge1xuICAgIHJldHVybiB0aGlzLl9vcHRpb25EZWZzO1xuICB9XG5cbiAgcmVnaXN0ZXJPcHRpb24oZGVmOiBGb3JtRmllbGREZWZpbml0aW9uKSB7XG4gICAgaWYgKHRoaXMuX29wdGlvbkRlZnMuZmluZEluZGV4KGYgPT4gZi5rZXkgPT09IGRlZi5rZXkpICE9PSAtMSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBBZGRpdGlvbmFsIGFkZGl0aW9uYWwgcHJvcGVydHkgeyR7ZGVmLmtleX19IGFscmVhZHkgZGVmaW5lLmApO1xuICAgIH1cbiAgICBpZiAodGhpcy5fZGVidWcpIGNvbnNvbGUuZGVidWcoYFtzZXR0aW5nc10gQWRkaW5nIGFkZGl0aW9uYWwgcHJvcGVydHkgeyR7ZGVmLmtleX19YCwgZGVmKTtcbiAgICB0aGlzLl9vcHRpb25EZWZzLnB1c2goZGVmKTtcbiAgfVxuXG4gIHJlZ2lzdGVyT3B0aW9ucyhkZWZzOiBGb3JtRmllbGREZWZpbml0aW9uW10pIHtcbiAgICAoZGVmcyB8fCBbXSkuZm9yRWFjaChkZWYgPT4gdGhpcy5yZWdpc3Rlck9wdGlvbihkZWYpKTtcbiAgfVxuXG4gIGFzeW5jIGFkZFRvUGFnZUhpc3RvcnkocGFnZTogSGlzdG9yeVBhZ2VSZWZlcmVuY2UsXG4gICAgICAgICAgICAgICAgICAgICAgICAgb3B0cz86IEFkZFRvUGFnZUhpc3RvcnlPcHRpb25zLFxuICAgICAgICAgICAgICAgICAgICAgICAgIHBhZ2VIaXN0b3J5PzogSGlzdG9yeVBhZ2VSZWZlcmVuY2VbXSAvLyB1c2VkIGZvciByZWN1cnNpdmUgY2FsbCB0byBjaGlsZHJlblxuICApIHtcbiAgICAvLyBJZiBub3QgaW5zaWRlIHJlY3Vyc2l2ZSBjYWxsOiBmaWxsIHBhZ2UgaGlzdG9yeSBkZWZhdWx0c1xuICAgIGlmICghcGFnZUhpc3RvcnkpIHRoaXMuZmlsbFBhZ2VIaXN0b3J5RGVmYXVsdHMocGFnZSwgb3B0cyk7XG5cbiAgICBwYWdlSGlzdG9yeSA9IHBhZ2VIaXN0b3J5IHx8IHRoaXMuX2RhdGEucGFnZUhpc3Rvcnk7XG5cbiAgICBjb25zdCBpbmRleCA9IHBhZ2VIaXN0b3J5LmZpbmRJbmRleChwID0+IChcbiAgICAgIC8vIHNhbWUgcGF0aFxuICAgICAgcC5wYXRoID09PSBwYWdlLnBhdGhcbiAgICAgIC8vIG9yIHN1Yi1wYXRoXG4gICAgICB8fCBwYWdlLnBhdGguc3RhcnRzV2l0aChwLnBhdGggKyAnLycpKVxuICAgICk7XG5cbiAgICAvLyBOZXcgcGFnZTogaW5zZXJ0IGl0XG4gICAgaWYgKGluZGV4ID09PSAtMSkge1xuICAgICAgLy9pZiAodGhpcy5fZGVidWcpXG4gICAgICBjb25zb2xlLmRlYnVnKCdbc2V0dGluZ3NdIEFkZGluZyBwYWdlIHRvIGhpc3Rvcnk6ICcsIHBhZ2UpO1xuXG4gICAgICAvLyBQcmVwZW5kIHRvIGxpc3RcbiAgICAgIHBhZ2VIaXN0b3J5LnNwbGljZSgwLCAwLCBwYWdlKTtcbiAgICB9XG5cbiAgICBlbHNlIHtcbiAgICAgIGNvbnN0IGV4aXN0aW5nUGFnZSA9IHBhZ2VIaXN0b3J5W2luZGV4XTtcblxuICAgICAgLy8gU2FtZSBwYXRoOiByZXBsYWNlIGV4aXN0aW5nIHBhZ2VcbiAgICAgIGlmIChwYWdlSGlzdG9yeVtpbmRleF0ucGF0aCA9PT0gcGFnZS5wYXRoKSB7XG4gICAgICAgIC8vaWYgKHRoaXMuX2RlYnVnKVxuICAgICAgICBjb25zb2xlLmRlYnVnKCdbc2V0dGluZ3NdIFVwZGF0aW5nIGV4aXN0aW5nIHBhZ2UgaW4gaGlzdG9yeTogJywgcGFnZSk7XG4gICAgICAgIHBhZ2VIaXN0b3J5LnNwbGljZShpbmRleCwgMSk7XG5cbiAgICAgICAgLy8gQ29weSBleGl0aW5nIGNoaWxkcmVuXG4gICAgICAgIHBhZ2UuY2hpbGRyZW4gPSBleGlzdGluZ1BhZ2UuY2hpbGRyZW4gfHwgW107XG5cbiAgICAgICAgLy8gUHJlcGVuZCB0byBsaXN0XG4gICAgICAgIHBhZ2VIaXN0b3J5LnNwbGljZSgwLCAwLCBwYWdlKTtcbiAgICAgIH1cblxuICAgICAgLy8gTm90IHNhbWUgcGF0aCAoc2hvdWxkIGJlIGEgcGFyZW50IHBhZ2UpXG4gICAgICBlbHNlIHtcbiAgICAgICAgLy8gQ3JlYXRlIHBhcmVudCdzIGNoaWxkcmVuIGFycmF5LCBpZiBub3QgZXhpc3RzXG4gICAgICAgIGV4aXN0aW5nUGFnZS5jaGlsZHJlbiA9IGV4aXN0aW5nUGFnZS5jaGlsZHJlbiB8fCBbXTtcblxuICAgICAgICAvLyBVcGRhdGUgdGhlIHBhcmVudCB0aW1lXG4gICAgICAgIGV4aXN0aW5nUGFnZS50aW1lID0gcGFnZS50aW1lO1xuXG4gICAgICAgIC8vIEFkZCBwYWdlIGFzIHBhcmVudCdzIGNoaWxkcmVuIChyZWN1cnNpdmUgY2FsbClcbiAgICAgICAgYXdhaXQgdGhpcy5hZGRUb1BhZ2VIaXN0b3J5KHBhZ2UsIG9wdHMsIGV4aXN0aW5nUGFnZS5jaGlsZHJlbik7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gU2F2ZSBsb2NhbGx5IChvbmx5IGlmIG5vdCBhIHJlY3Vyc2l2ZSBleGVjdXRpb24pXG4gICAgaWYgKHBhZ2VIaXN0b3J5ID09PSB0aGlzLl9kYXRhLnBhZ2VIaXN0b3J5KSB7XG5cbiAgICAgIC8vIElmIG1heCBoYXMgYmVlbiByZWFjaGVkLCByZW1vdmUgb2xkIHBhZ2VzXG4gICAgICBpZiAodGhpcy5fZGF0YS5wYWdlSGlzdG9yeS5sZW5ndGggPiB0aGlzLl9kYXRhLnBhZ2VIaXN0b3J5TWF4U2l6ZSkge1xuICAgICAgICBjb25zdCByZW1vdmVkUGFnZXMgPSBwYWdlSGlzdG9yeS5zcGxpY2UodGhpcy5fZGF0YS5wYWdlSGlzdG9yeU1heFNpemUsIHBhZ2VIaXN0b3J5Lmxlbmd0aCAtIHRoaXMuX2RhdGEucGFnZUhpc3RvcnlNYXhTaXplKTtcbiAgICAgICAgY29uc29sZS5kZWJ1ZygnW3NldHRpbmdzXSBQYWdlcyByZW1vdmVkIGZyb20gaGlzdG9yeTogJywgcmVtb3ZlZFBhZ2VzKTtcbiAgICAgIH1cblxuICAgICAgLy8gQXBwbHkgbmV3IHZhbHVlXG4gICAgICBhd2FpdCB0aGlzLmFwcGx5UHJvcGVydHkoJ3BhZ2VIaXN0b3J5JywgcGFnZUhpc3RvcnkpO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIHJlbW92ZVBhZ2VIaXN0b3J5KHBhdGg6IHN0cmluZyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0cz86IHtlbWl0RXZlbnQ/OiBib29sZWFuIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHBhZ2VIaXN0b3J5PzogSGlzdG9yeVBhZ2VSZWZlcmVuY2VbXSAvLyB1c2VkIGZvciByZWN1cnNpdmUgY2FsbCB0byBjaGlsZHJlbilcbiAgKSB7XG4gICAgcGFnZUhpc3RvcnkgPSBwYWdlSGlzdG9yeSB8fCB0aGlzLl9kYXRhLnBhZ2VIaXN0b3J5O1xuXG4gICAgY29uc3QgaW5kZXggPSBwYWdlSGlzdG9yeS5maW5kSW5kZXgocCA9PiBwLnBhdGggPT09IHBhdGgpO1xuICAgIGxldCBmb3VuZCA9IGluZGV4ICE9PSAtMTtcbiAgICBpZiAoZm91bmQpIHtcbiAgICAgIGNvbnNvbGUuZGVidWcoJ1tzZXR0aW5nc10gUmVtb3ZlIHBhZ2UgaGlzdG9yeTogJywgcGF0aCk7XG4gICAgICAvLyBSZW1vdmUgdmFsdWVcbiAgICAgIHBhZ2VIaXN0b3J5LnNwbGljZShpbmRleCwgMSk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgLy8gU2VhcmNoIHBhdGggb24gY2hpbGRyZW4gKHN0b3Agd2hlbiBmb3VuZClcbiAgICAgIGZvdW5kID0gcGFnZUhpc3RvcnlcbiAgICAgICAgLm1hcChwID0+IHAuY2hpbGRyZW4pXG4gICAgICAgIC5maWx0ZXIoaXNOb3RFbXB0eUFycmF5KVxuICAgICAgICAuZmluZEluZGV4KGNoaWxkcmVuID0+IHRoaXMucmVtb3ZlUGFnZUhpc3RvcnkocGF0aCwgb3B0cywgY2hpbGRyZW4pKSAhPT0gLTE7XG4gICAgfVxuXG4gICAgLy8gU2F2ZSBsb2NhbGx5IChvbmx5IGlmIG5vdCBhIHJlY3Vyc2l2ZSBleGVjdXRpb24pXG4gICAgaWYgKGZvdW5kICYmIHBhZ2VIaXN0b3J5ID09PSB0aGlzLl9kYXRhLnBhZ2VIaXN0b3J5KSB7XG4gICAgICAvLyBBcHBseSBjaGFuZ2VzXG4gICAgICBhd2FpdCB0aGlzLmFwcGx5UHJvcGVydHkoJ3BhZ2VIaXN0b3J5JywgdGhpcy5fZGF0YS5wYWdlSGlzdG9yeSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZvdW5kO1xuICB9XG5cbiAgYXN5bmMgY2xlYXJQYWdlSGlzdG9yeSgpIHtcbiAgICAvLyBSZXNldCBhbGwgcGFnZSBoaXN0b3J5XG4gICAgYXdhaXQgdGhpcy5hcHBseVByb3BlcnR5KCdwYWdlSGlzdG9yeScsIFtdLCB7cGVyc2lzdEltbWVkaWF0ZTogdHJ1ZX0pO1xuICB9XG5cbiAgLyogLS0gUHJvdGVjdGVkIG1ldGhvZHMgLS0gKi9cblxuICBwcml2YXRlIHJlc2V0RGF0YSgpIHtcbiAgICB0aGlzLl9kYXRhID0gey4uLnRoaXMuX2RhdGEsIC4uLnRoaXMuZGVmYXVsdFNldHRpbmdzfTtcblxuICAgIHRoaXMuX2RhdGEubG9jYWxlID0gdGhpcy50cmFuc2xhdGUuY3VycmVudExhbmcgfHwgdGhpcy50cmFuc2xhdGUuZGVmYXVsdExhbmc7XG4gICAgdGhpcy5fZGF0YS5tb2JpbGUgPSB1bmRlZmluZWQ7XG4gICAgdGhpcy5fZGF0YS51c2FnZU1vZGUgPSB1bmRlZmluZWQ7XG4gICAgdGhpcy5fZGF0YS5wYWdlSGlzdG9yeSA9IFtdO1xuXG4gICAgY29uc3QgZGVmYXVsdFBlZXIgPSB0aGlzLmVudmlyb25tZW50LmRlZmF1bHRQZWVyICYmIFBlZXIuZnJvbU9iamVjdCh0aGlzLmVudmlyb25tZW50LmRlZmF1bHRQZWVyKTtcbiAgICB0aGlzLl9kYXRhLnBlZXJVcmwgPSBkZWZhdWx0UGVlciAmJiBkZWZhdWx0UGVlci51cmwgfHwgdW5kZWZpbmVkO1xuXG4gICAgaWYgKHRoaXMuc3RhcnRlZCkgdGhpcy5vbkNoYW5nZS5uZXh0KHRoaXMuX2RhdGEpO1xuICB9XG5cbiAgcHJpdmF0ZSBwZXJzaXN0TG9jYWxseShpbW1lZGlhdGU/OiBib29sZWFuKTogUHJvbWlzZTxhbnk+IHtcblxuICAgIC8vIEV4ZWN1dGUgaW1tZWRpYXRlXG4gICAgaWYgKGltbWVkaWF0ZSkge1xuICAgICAgaWYgKCF0aGlzLl9kYXRhKSB7XG4gICAgICAgIGNvbnNvbGUuZGVidWcoJ1tzZXR0aW5nc10gUmVtb3ZpbmcgbG9jYWwgc2V0dGluZ3MgZnJvbSBzdG9yYWdlJyk7XG4gICAgICAgIHJldHVybiB0aGlzLnN0b3JhZ2UucmVtb3ZlKFNFVFRJTkdTX1NUT1JBR0VfS0VZKTtcbiAgICAgIH1cbiAgICAgIGVsc2Uge1xuICAgICAgICBjb25zb2xlLmRlYnVnKCdbc2V0dGluZ3NdIFN0b3JlIGxvY2FsIHNldHRpbmdzJywgdGhpcy5fZGF0YSk7XG4gICAgICAgIHJldHVybiB0aGlzLnN0b3JhZ2Uuc2V0KFNFVFRJTkdTX1NUT1JBR0VfS0VZLCBKU09OLnN0cmluZ2lmeSh0aGlzLl9kYXRhKSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gRXhlY3V0ZSB3aXRoIGRlbGF5XG4gICAgZWxzZSB7XG5cbiAgICAgIC8vIENyZWF0ZSB0aGUgZXZlbnQgZW1pdHRlclxuICAgICAgaWYgKCF0aGlzLl8kcGVyc2lzdCkge1xuICAgICAgICB0aGlzLl8kcGVyc2lzdCA9IG5ldyBFdmVudEVtaXR0ZXI8YW55Pih0cnVlKTtcbiAgICAgICAgdGhpcy5fJHBlcnNpc3RcbiAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgIGRlYm91bmNlVGltZSgyMDAwKSwgLy8gYWRkIGEgZGVsYXkgb2YgMnNcbiAgICAgICAgICAgIGZpbHRlcigoKSA9PiB0aGlzLnN0YXJ0ZWQpXG4gICAgICAgICAgKVxuICAgICAgICAgIC5zdWJzY3JpYmUoKCkgPT4gdGhpcy5wZXJzaXN0TG9jYWxseSh0cnVlKSk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuXyRwZXJzaXN0LmVtaXQoKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGZpbGxQYWdlSGlzdG9yeURlZmF1bHRzKHBhZ2U6IEhpc3RvcnlQYWdlUmVmZXJlbmNlLCBvcHRzPzoge1xuICAgICAgcmVtb3ZlUGF0aFF1ZXJ5UGFyYW1zPzogYm9vbGVhbjtcbiAgICByZW1vdmVUaXRsZVNtYWxsVGFnPzogYm9vbGVhbjtcbiAgfSk6IEhpc3RvcnlQYWdlUmVmZXJlbmNlIHtcbiAgICBpZiAoIXBhZ2UgfHwgIXBhZ2UudGl0bGUgfHwgIXBhZ2UucGF0aCkgdGhyb3cgRXJyb3IoJ01pc3NpbmcgcmVxdWlyZWQgYXJndW1lbnQgXFwncGFnZVxcJywgXFwncGFnZS5wYXRoXFwnIG9yIFxcJ3BhZ2UudGl0bGVcXCcnKTtcblxuICAgIC8vIFNldCB0aW1lXG4gICAgcGFnZS50aW1lID0gcGFnZS50aW1lIHx8IG1vbWVudCgpO1xuXG4gICAgLy8gQ2xlYW4gdGhlIHRpdGxlIChyZW1vdmUgPHNtYWxsPiB0YWdzKVxuICAgIGlmICghb3B0cyB8fCBvcHRzLnJlbW92ZVRpdGxlU21hbGxUYWcgIT09IGZhbHNlKSB7XG4gICAgICBjb25zdCB0YWdJbmRleCA9IHBhZ2UudGl0bGUuaW5kZXhPZignPC9zbWFsbD4nKTtcbiAgICAgIGlmICh0YWdJbmRleCAhPT0gLTEpIHtcbiAgICAgICAgcGFnZS50aXRsZSA9IHBhZ2UudGl0bGUuc3Vic3RyaW5nKHRhZ0luZGV4ICsgJzwvc21hbGw+Jy5sZW5ndGgpO1xuICAgICAgfVxuICAgICAgcGFnZS50aXRsZSA9IHBhZ2UudGl0bGUucmVwbGFjZSgvWyBdKmNsYXNzPSdoaWRkZW4teHMgaGlkZGVuLXNtJy9nLCAnJyk7XG4gICAgfVxuXG4gICAgLy8gUmVtb3ZlIHF1ZXJ5IHBhcmFtc1xuICAgIGlmICghb3B0cyB8fCBvcHRzLnJlbW92ZVBhdGhRdWVyeVBhcmFtcyAhPT0gZmFsc2UpIHtcbiAgICAgIHBhZ2UucGF0aCA9IHBhZ2UucGF0aC5yZXBsYWNlKC9bP10uKiQvLCAnJyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHBhZ2U7XG4gIH1cbn1cbiJdfQ==