parse-server 9.5.0-alpha.2 → 9.5.0-alpha.3

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.
@@ -268,6 +268,12 @@ class FilesRouter {
268
268
  };
269
269
  }
270
270
  async createHandler(req, res, next) {
271
+ if (req.auth.isReadOnly) {
272
+ const error = (0, _Error.createSanitizedHttpError)(403, "read-only masterKey isn't allowed to create a file.", req.config);
273
+ res.status(error.status);
274
+ res.end(`{"error":"${error.message}"}`);
275
+ return;
276
+ }
271
277
  const config = req.config;
272
278
  const user = req.auth.user;
273
279
  const isMaster = req.auth.isMaster;
@@ -605,6 +611,12 @@ class FilesRouter {
605
611
  }
606
612
  }
607
613
  async deleteHandler(req, res, next) {
614
+ if (req.auth.isReadOnly) {
615
+ const error = (0, _Error.createSanitizedHttpError)(403, "read-only masterKey isn't allowed to delete a file.", req.config);
616
+ res.status(error.status);
617
+ res.end(`{"error":"${error.message}"}`);
618
+ return;
619
+ }
608
620
  try {
609
621
  const {
610
622
  filesController
@@ -657,4 +669,4 @@ function isFileStreamable(req, filesController) {
657
669
  const end = Number(range[1]);
658
670
  return (!isNaN(start) || !isNaN(end)) && typeof filesController.adapter.handleFileStream === 'function';
659
671
  }
660
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfZXhwcmVzcyIsIl9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCJyZXF1aXJlIiwiTWlkZGxld2FyZXMiLCJfaW50ZXJvcFJlcXVpcmVXaWxkY2FyZCIsIl9ub2RlIiwiX0NvbmZpZyIsIl9sb2dnZXIiLCJfc3RyZWFtIiwiX0Vycm9yIiwiZSIsInQiLCJXZWFrTWFwIiwiciIsIm4iLCJfX2VzTW9kdWxlIiwibyIsImkiLCJmIiwiX19wcm90b19fIiwiZGVmYXVsdCIsImhhcyIsImdldCIsInNldCIsImhhc093blByb3BlcnR5IiwiY2FsbCIsIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIiwidHJpZ2dlcnMiLCJVdGlscyIsImNyZWF0ZVNpemVMaW1pdGVkU3RyZWFtIiwic291cmNlIiwibWF4Qnl0ZXMiLCJ0b3RhbEJ5dGVzIiwic3RhcnRlZCIsInNvdXJjZUVuZGVkIiwib25EYXRhIiwib25FbmQiLCJvbkVycm9yIiwib3V0cHV0IiwiUmVhZGFibGUiLCJyZWFkIiwiY2h1bmsiLCJsZW5ndGgiLCJkZXN0cm95IiwiUGFyc2UiLCJFcnJvciIsIkZJTEVfU0FWRV9FUlJPUiIsInB1c2giLCJwYXVzZSIsImVyciIsIm9uIiwicmVzdW1lIiwiY2FsbGJhY2siLCJyZW1vdmVMaXN0ZW5lciIsIlJFU0VSVkVEX0RJUkVDVE9SWV9TRUdNRU5UUyIsImV4cG9ydHMiLCJGaWxlc1JvdXRlciIsImV4cHJlc3NSb3V0ZXIiLCJtYXhVcGxvYWRTaXplIiwicm91dGVyIiwiZXhwcmVzcyIsIlJvdXRlciIsIm1ldGFkYXRhSGFuZGxlciIsImdldEhhbmRsZXIiLCJwb3N0IiwicmVxIiwicmVzIiwibmV4dCIsIklOVkFMSURfRklMRV9OQU1FIiwiX2Vhcmx5SGVhZGVyc01pZGRsZXdhcmUiLCJfYm9keVBhcnNpbmdNaWRkbGV3YXJlIiwiaGFuZGxlUGFyc2VIZWFkZXJzIiwiaGFuZGxlUGFyc2VTZXNzaW9uIiwiY3JlYXRlSGFuZGxlciIsImJpbmQiLCJkZWxldGUiLCJlbmZvcmNlTWFzdGVyS2V5QWNjZXNzIiwiZGVsZXRlSGFuZGxlciIsIl9nZXRGaWxlbmFtZUZyb21QYXJhbXMiLCJwYXJ0cyIsInBhcmFtcyIsImZpbGVwYXRoIiwiQXJyYXkiLCJpc0FycmF5Iiwiam9pbiIsInZhbGlkYXRlRGlyZWN0b3J5IiwiZGlyZWN0b3J5IiwiaW5jbHVkZXMiLCJzdGFydHNXaXRoIiwiZW5kc1dpdGgiLCJmaXJzdFNlZ21lbnQiLCJzcGxpdCIsImRpclJlZ2V4IiwidGVzdCIsImNvbmZpZyIsIkNvbmZpZyIsImFwcElkIiwiZXJyb3IiLCJjcmVhdGVTYW5pdGl6ZWRIdHRwRXJyb3IiLCJzdGF0dXMiLCJqc29uIiwibWVzc2FnZSIsImZpbGVuYW1lIiwiZmlsZXNDb250cm9sbGVyIiwibWltZSIsImNvbnRlbnRUeXBlIiwiZ2V0VHlwZSIsImZpbGUiLCJGaWxlIiwiYmFzZTY0IiwidHJpZ2dlclJlc3VsdCIsIm1heWJlUnVuRmlsZVRyaWdnZXIiLCJUeXBlcyIsImJlZm9yZUZpbmQiLCJhdXRoIiwiX25hbWUiLCJpc0ZpbGVTdHJlYW1hYmxlIiwiaGFuZGxlRmlsZVN0cmVhbSIsImNhdGNoIiwiZW5kIiwiZGF0YSIsImdldEZpbGVEYXRhIiwidG9TdHJpbmciLCJhZnRlckZpbmQiLCJmb3JjZURvd25sb2FkIiwiQnVmZmVyIiwiZnJvbSIsIl9kYXRhIiwicmVzb2x2ZUVycm9yIiwiY29kZSIsIlNDUklQVF9GQUlMRUQiLCJtYXhVcGxvYWRTaXplT3ZlcnJpZGUiLCJ1bmRlZmluZWQiLCJtYXN0ZXJLZXkiLCJsb2FkTWFzdGVyS2V5IiwibWFzdGVyS2V5SXBzIiwiY2hlY2tJcCIsImlwIiwibWFzdGVyS2V5SXBzU3RvcmUiLCJwYXJzZWRCeXRlcyIsInBhcnNlU2l6ZVRvQnl0ZXMiLCJfbWF4VXBsb2FkU2l6ZU92ZXJyaWRlIiwiZGVmYXVsdE1heEJ5dGVzIiwiX21heFVwbG9hZFNpemVCeXRlcyIsImxpbWl0IiwicmF3IiwidHlwZSIsInVzZXIiLCJpc01hc3RlciIsImlzTGlua2VkIiwiQW5vbnltb3VzVXRpbHMiLCJmaWxlVXBsb2FkIiwiZW5hYmxlRm9yQW5vbnltb3VzVXNlciIsImVuYWJsZUZvckF1dGhlbnRpY2F0ZWRVc2VyIiwiZW5hYmxlRm9yUHVibGljIiwidmFsaWRhdGVGaWxlbmFtZSIsImZpbGVFeHRlbnNpb25zIiwiaXNWYWxpZEV4dGVuc2lvbiIsImV4dGVuc2lvbiIsInNvbWUiLCJleHQiLCJyZWdleCIsIlJlZ0V4cCIsInN1YnN0cmluZyIsImxhc3RJbmRleE9mIiwiZmlsZURhdGEiLCJwYXJzZWQiLCJKU09OIiwicGFyc2UiLCJtZXRhZGF0YSIsIklOVkFMSURfSlNPTiIsInRhZ3MiLCJPUEVSQVRJT05fRk9SQklEREVOIiwiZGlyZWN0b3J5RXJyb3IiLCJib2R5IiwiX2hhbmRsZUJ1ZmZlcmVkVXBsb2FkIiwiX2hhbmRsZVN0cmVhbVVwbG9hZCIsImNoZWNrUHJvaGliaXRlZEtleXdvcmRzIiwiSU5WQUxJRF9LRVlfTkFNRSIsInNldFRhZ3MiLCJzZXRNZXRhZGF0YSIsInNldERpcmVjdG9yeSIsImZpbGVTaXplIiwiYnl0ZUxlbmd0aCIsImZpbGVPYmplY3QiLCJiZWZvcmVTYXZlIiwic2F2ZVJlc3VsdCIsInVybCIsIm5hbWUiLCJidWZmZXJEYXRhIiwiX3NvdXJjZSIsImZvcm1hdCIsImJ1ZmZlciIsImZpbGVPcHRpb25zIiwiX21ldGFkYXRhIiwiZmlsZVRhZ3MiLCJrZXlzIiwiX3RhZ3MiLCJhc3NpZ24iLCJfZGlyZWN0b3J5IiwiY3JlYXRlRmlsZVJlc3VsdCIsImNyZWF0ZUZpbGUiLCJfdXJsIiwiX3JlcXVlc3RUYXNrIiwiX3ByZXZpb3VzU2F2ZSIsIlByb21pc2UiLCJyZXNvbHZlIiwiYWZ0ZXJTYXZlIiwibG9nZ2VyIiwic3RyZWFtIiwiY29udGVudExlbmd0aCIsInBhcnNlSW50IiwiaGFzRXh0ZW5zaW9uIiwic291cmNlVHlwZSIsImFkYXB0ZXIiLCJnZXRGaWxlTG9jYXRpb24iLCJiZWZvcmVEZWxldGUiLCJkZWxldGVGaWxlIiwiYWZ0ZXJEZWxldGUiLCJGSUxFX0RFTEVURV9FUlJPUiIsImdldE1ldGFkYXRhIiwicmFuZ2UiLCJzdGFydCIsIk51bWJlciIsImlzTmFOIl0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL1JvdXRlcnMvRmlsZXNSb3V0ZXIuanMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGV4cHJlc3MgZnJvbSAnZXhwcmVzcyc7XG5pbXBvcnQgKiBhcyBNaWRkbGV3YXJlcyBmcm9tICcuLi9taWRkbGV3YXJlcyc7XG5pbXBvcnQgUGFyc2UgZnJvbSAncGFyc2Uvbm9kZSc7XG5pbXBvcnQgQ29uZmlnIGZyb20gJy4uL0NvbmZpZyc7XG5pbXBvcnQgbG9nZ2VyIGZyb20gJy4uL2xvZ2dlcic7XG5jb25zdCB0cmlnZ2VycyA9IHJlcXVpcmUoJy4uL3RyaWdnZXJzJyk7XG5jb25zdCBVdGlscyA9IHJlcXVpcmUoJy4uL1V0aWxzJyk7XG5pbXBvcnQgeyBSZWFkYWJsZSB9IGZyb20gJ3N0cmVhbSc7XG5pbXBvcnQgeyBjcmVhdGVTYW5pdGl6ZWRIdHRwRXJyb3IgfSBmcm9tICcuLi9FcnJvcic7XG5cbi8qKlxuICogV3JhcHMgYSByZWFkYWJsZSBzdHJlYW0gaW4gYSBSZWFkYWJsZSB0aGF0IGVuZm9yY2VzIGEgYnl0ZSBzaXplIGxpbWl0LlxuICogRGF0YSBmbG93IGlzIGxhenk6IHRoZSBzb3VyY2UgaXMgbm90IHJlYWQgdW50aWwgYSBjb25zdW1lciBzdGFydHMgcmVhZGluZ1xuICogZnJvbSB0aGUgcmV0dXJuZWQgc3RyZWFtICh2aWEgcGlwZSBvciAnZGF0YScgbGlzdGVuZXIpLiBUaGlzIGVuc3VyZXMgdGhlXG4gKiBjb25zdW1lcidzIGVycm9yIGxpc3RlbmVyIGlzIGF0dGFjaGVkIGJlZm9yZSBhbnkgZGF0YSAob3IgZXJyb3IpIGlzIGVtaXR0ZWQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVTaXplTGltaXRlZFN0cmVhbShzb3VyY2UsIG1heEJ5dGVzKSB7XG4gIGxldCB0b3RhbEJ5dGVzID0gMDtcbiAgbGV0IHN0YXJ0ZWQgPSBmYWxzZTtcbiAgbGV0IHNvdXJjZUVuZGVkID0gZmFsc2U7XG4gIGxldCBvbkRhdGEsIG9uRW5kLCBvbkVycm9yO1xuXG4gIGNvbnN0IG91dHB1dCA9IG5ldyBSZWFkYWJsZSh7XG4gICAgcmVhZCgpIHtcbiAgICAgIGlmICghc3RhcnRlZCkge1xuICAgICAgICBzdGFydGVkID0gdHJ1ZTtcblxuICAgICAgICBvbkRhdGEgPSAoY2h1bmspID0+IHtcbiAgICAgICAgICB0b3RhbEJ5dGVzICs9IGNodW5rLmxlbmd0aDtcbiAgICAgICAgICBpZiAodG90YWxCeXRlcyA+IG1heEJ5dGVzKSB7XG4gICAgICAgICAgICBvdXRwdXQuZGVzdHJveShcbiAgICAgICAgICAgICAgbmV3IFBhcnNlLkVycm9yKFxuICAgICAgICAgICAgICAgIFBhcnNlLkVycm9yLkZJTEVfU0FWRV9FUlJPUixcbiAgICAgICAgICAgICAgICBgRmlsZSBzaXplIGV4Y2VlZHMgbWF4aW11bSBhbGxvd2VkOiAke21heEJ5dGVzfSBieXRlcy5gXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICghb3V0cHV0LnB1c2goY2h1bmspKSB7XG4gICAgICAgICAgICBzb3VyY2UucGF1c2UoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH07XG5cbiAgICAgICAgb25FbmQgPSAoKSA9PiB7XG4gICAgICAgICAgc291cmNlRW5kZWQgPSB0cnVlO1xuICAgICAgICAgIG91dHB1dC5wdXNoKG51bGwpO1xuICAgICAgICB9O1xuXG4gICAgICAgIG9uRXJyb3IgPSAoZXJyKSA9PiBvdXRwdXQuZGVzdHJveShlcnIpO1xuXG4gICAgICAgIHNvdXJjZS5vbignZGF0YScsIG9uRGF0YSk7XG4gICAgICAgIHNvdXJjZS5vbignZW5kJywgb25FbmQpO1xuICAgICAgICBzb3VyY2Uub24oJ2Vycm9yJywgb25FcnJvcik7XG4gICAgICB9XG5cbiAgICAgIC8vIFJlc3VtZSBzb3VyY2UgaW4gY2FzZSBpdCB3YXMgcGF1c2VkIGR1ZSB0byBiYWNrcHJlc3N1cmVcbiAgICAgIGlmICghc291cmNlRW5kZWQpIHtcbiAgICAgICAgc291cmNlLnJlc3VtZSgpO1xuICAgICAgfVxuICAgIH0sXG4gICAgZGVzdHJveShlcnIsIGNhbGxiYWNrKSB7XG4gICAgICBpZiAob25EYXRhKSB7XG4gICAgICAgIHNvdXJjZS5yZW1vdmVMaXN0ZW5lcignZGF0YScsIG9uRGF0YSk7XG4gICAgICB9XG4gICAgICBpZiAob25FbmQpIHtcbiAgICAgICAgc291cmNlLnJlbW92ZUxpc3RlbmVyKCdlbmQnLCBvbkVuZCk7XG4gICAgICB9XG4gICAgICBpZiAob25FcnJvcikge1xuICAgICAgICBzb3VyY2UucmVtb3ZlTGlzdGVuZXIoJ2Vycm9yJywgb25FcnJvcik7XG4gICAgICB9XG4gICAgICAvLyBTdXBwcmVzcyBlcnJvcnMgZW1pdHRlZCBkdXJpbmcgZHJhaW4gKGUuZy4gY2xpZW50IGRpc2Nvbm5lY3QpXG4gICAgICBzb3VyY2Uub24oJ2Vycm9yJywgKCkgPT4ge30pO1xuICAgICAgaWYgKCFzb3VyY2VFbmRlZCkge1xuICAgICAgICBzb3VyY2UucmVzdW1lKCk7XG4gICAgICB9XG4gICAgICBjYWxsYmFjayhlcnIpO1xuICAgIH1cbiAgfSk7XG5cbiAgcmV0dXJuIG91dHB1dDtcbn1cblxuLy8gU2VnbWVudHMgdGhhdCBjb25mbGljdCB3aXRoIHN1Yi1yb3V0ZXMgdW5kZXIgR0VUIC9maWxlcy86YXBwSWQvKi4gSWYgYSBmaWxlXG4vLyBkaXJlY3Rvcnkgc3RhcnRzIHdpdGggb25lIG9mIHRoZXNlLCBpdHMgVVJMIHdvdWxkIG1hdGNoIHRoZSB3cm9uZyByb3V0ZVxuLy8gaGFuZGxlci4gVXBkYXRlIHRoaXMgbGlzdCB3aGVuIGFkZGluZyBuZXcgc3ViLXJvdXRlcyB0byBleHByZXNzUm91dGVyKCkuXG5leHBvcnQgY29uc3QgUkVTRVJWRURfRElSRUNUT1JZX1NFR01FTlRTID0gWydtZXRhZGF0YSddO1xuXG5leHBvcnQgY2xhc3MgRmlsZXNSb3V0ZXIge1xuICBleHByZXNzUm91dGVyKHsgbWF4VXBsb2FkU2l6ZSA9ICcyME1iJyB9ID0ge30pIHtcbiAgICB2YXIgcm91dGVyID0gZXhwcmVzcy5Sb3V0ZXIoKTtcbiAgICAvLyBNZXRhZGF0YSByb3V0ZSBtdXN0IGNvbWUgYmVmb3JlIHRoZSBjYXRjaC1hbGwgR0VUIHJvdXRlXG4gICAgcm91dGVyLmdldCgnL2ZpbGVzLzphcHBJZC9tZXRhZGF0YS8qZmlsZXBhdGgnLCB0aGlzLm1ldGFkYXRhSGFuZGxlcik7XG4gICAgcm91dGVyLmdldCgnL2ZpbGVzLzphcHBJZC8qZmlsZXBhdGgnLCB0aGlzLmdldEhhbmRsZXIpO1xuXG4gICAgcm91dGVyLnBvc3QoJy9maWxlcycsIGZ1bmN0aW9uIChyZXEsIHJlcywgbmV4dCkge1xuICAgICAgbmV4dChuZXcgUGFyc2UuRXJyb3IoUGFyc2UuRXJyb3IuSU5WQUxJRF9GSUxFX05BTUUsICdGaWxlbmFtZSBub3QgcHJvdmlkZWQuJykpO1xuICAgIH0pO1xuXG4gICAgcm91dGVyLnBvc3QoXG4gICAgICAnL2ZpbGVzLzpmaWxlbmFtZScsXG4gICAgICB0aGlzLl9lYXJseUhlYWRlcnNNaWRkbGV3YXJlKCksXG4gICAgICB0aGlzLl9ib2R5UGFyc2luZ01pZGRsZXdhcmUobWF4VXBsb2FkU2l6ZSksXG4gICAgICBNaWRkbGV3YXJlcy5oYW5kbGVQYXJzZUhlYWRlcnMsXG4gICAgICBNaWRkbGV3YXJlcy5oYW5kbGVQYXJzZVNlc3Npb24sXG4gICAgICB0aGlzLmNyZWF0ZUhhbmRsZXIuYmluZCh0aGlzKVxuICAgICk7XG5cbiAgICByb3V0ZXIuZGVsZXRlKFxuICAgICAgJy9maWxlcy8qZmlsZXBhdGgnLFxuICAgICAgTWlkZGxld2FyZXMuaGFuZGxlUGFyc2VIZWFkZXJzLFxuICAgICAgTWlkZGxld2FyZXMuaGFuZGxlUGFyc2VTZXNzaW9uLFxuICAgICAgTWlkZGxld2FyZXMuZW5mb3JjZU1hc3RlcktleUFjY2VzcyxcbiAgICAgIHRoaXMuZGVsZXRlSGFuZGxlclxuICAgICk7XG4gICAgcmV0dXJuIHJvdXRlcjtcbiAgfVxuXG4gIHN0YXRpYyBfZ2V0RmlsZW5hbWVGcm9tUGFyYW1zKHJlcSkge1xuICAgIGNvbnN0IHBhcnRzID0gcmVxLnBhcmFtcy5maWxlcGF0aDtcbiAgICByZXR1cm4gQXJyYXkuaXNBcnJheShwYXJ0cykgPyBwYXJ0cy5qb2luKCcvJykgOiBwYXJ0cztcbiAgfVxuXG4gIHN0YXRpYyB2YWxpZGF0ZURpcmVjdG9yeShkaXJlY3RvcnkpIHtcbiAgICBpZiAodHlwZW9mIGRpcmVjdG9yeSAhPT0gJ3N0cmluZycpIHtcbiAgICAgIHJldHVybiBuZXcgUGFyc2UuRXJyb3IoUGFyc2UuRXJyb3IuSU5WQUxJRF9GSUxFX05BTUUsICdEaXJlY3RvcnkgbXVzdCBiZSBhIHN0cmluZy4nKTtcbiAgICB9XG4gICAgaWYgKGRpcmVjdG9yeS5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybiBuZXcgUGFyc2UuRXJyb3IoUGFyc2UuRXJyb3IuSU5WQUxJRF9GSUxFX05BTUUsICdEaXJlY3RvcnkgbXVzdCBub3QgYmUgZW1wdHkuJyk7XG4gICAgfVxuICAgIGlmIChkaXJlY3RvcnkubGVuZ3RoID4gMjU2KSB7XG4gICAgICByZXR1cm4gbmV3IFBhcnNlLkVycm9yKFBhcnNlLkVycm9yLklOVkFMSURfRklMRV9OQU1FLCAnRGlyZWN0b3J5IHBhdGggaXMgdG9vIGxvbmcuJyk7XG4gICAgfVxuICAgIGlmIChkaXJlY3RvcnkuaW5jbHVkZXMoJy4uJykpIHtcbiAgICAgIHJldHVybiBuZXcgUGFyc2UuRXJyb3IoUGFyc2UuRXJyb3IuSU5WQUxJRF9GSUxFX05BTUUsICdEaXJlY3RvcnkgbXVzdCBub3QgY29udGFpbiBcIi4uXCIuJyk7XG4gICAgfVxuICAgIGlmIChkaXJlY3Rvcnkuc3RhcnRzV2l0aCgnLycpIHx8IGRpcmVjdG9yeS5lbmRzV2l0aCgnLycpKSB7XG4gICAgICByZXR1cm4gbmV3IFBhcnNlLkVycm9yKFxuICAgICAgICBQYXJzZS5FcnJvci5JTlZBTElEX0ZJTEVfTkFNRSxcbiAgICAgICAgJ0RpcmVjdG9yeSBtdXN0IG5vdCBzdGFydCBvciBlbmQgd2l0aCBcIi9cIi4nXG4gICAgICApO1xuICAgIH1cbiAgICBpZiAoZGlyZWN0b3J5LmluY2x1ZGVzKCcvLycpKSB7XG4gICAgICByZXR1cm4gbmV3IFBhcnNlLkVycm9yKFxuICAgICAgICBQYXJzZS5FcnJvci5JTlZBTElEX0ZJTEVfTkFNRSxcbiAgICAgICAgJ0RpcmVjdG9yeSBtdXN0IG5vdCBjb250YWluIGNvbnNlY3V0aXZlIHNsYXNoZXMuJ1xuICAgICAgKTtcbiAgICB9XG4gICAgY29uc3QgZmlyc3RTZWdtZW50ID0gZGlyZWN0b3J5LnNwbGl0KCcvJylbMF07XG4gICAgaWYgKFJFU0VSVkVEX0RJUkVDVE9SWV9TRUdNRU5UUy5pbmNsdWRlcyhmaXJzdFNlZ21lbnQpKSB7XG4gICAgICByZXR1cm4gbmV3IFBhcnNlLkVycm9yKFxuICAgICAgICBQYXJzZS5FcnJvci5JTlZBTElEX0ZJTEVfTkFNRSxcbiAgICAgICAgYERpcmVjdG9yeSBtdXN0IG5vdCBzdGFydCB3aXRoIHJlc2VydmVkIHNlZ21lbnQgXCIke2ZpcnN0U2VnbWVudH1cIi5gXG4gICAgICApO1xuICAgIH1cbiAgICBjb25zdCBkaXJSZWdleCA9IC9eW2EtekEtWjAtOV1bYS16QS1aMC05X1xcLS9dKiQvO1xuICAgIGlmICghZGlyUmVnZXgudGVzdChkaXJlY3RvcnkpKSB7XG4gICAgICByZXR1cm4gbmV3IFBhcnNlLkVycm9yKFxuICAgICAgICBQYXJzZS5FcnJvci5JTlZBTElEX0ZJTEVfTkFNRSxcbiAgICAgICAgJ0RpcmVjdG9yeSBjb250YWlucyBpbnZhbGlkIGNoYXJhY3RlcnMuJ1xuICAgICAgKTtcbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBhc3luYyBnZXRIYW5kbGVyKHJlcSwgcmVzKSB7XG4gICAgY29uc3QgY29uZmlnID0gQ29uZmlnLmdldChyZXEucGFyYW1zLmFwcElkKTtcbiAgICBpZiAoIWNvbmZpZykge1xuICAgICAgY29uc3QgZXJyb3IgPSBjcmVhdGVTYW5pdGl6ZWRIdHRwRXJyb3IoNDAzLCAnSW52YWxpZCBhcHBsaWNhdGlvbiBJRC4nLCBjb25maWcpO1xuICAgICAgcmVzLnN0YXR1cyhlcnJvci5zdGF0dXMpO1xuICAgICAgcmVzLmpzb24oeyBlcnJvcjogZXJyb3IubWVzc2FnZSB9KTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBsZXQgZmlsZW5hbWUgPSBGaWxlc1JvdXRlci5fZ2V0RmlsZW5hbWVGcm9tUGFyYW1zKHJlcSk7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGZpbGVzQ29udHJvbGxlciA9IGNvbmZpZy5maWxlc0NvbnRyb2xsZXI7XG4gICAgICBjb25zdCBtaW1lID0gKGF3YWl0IGltcG9ydCgnbWltZScpKS5kZWZhdWx0O1xuICAgICAgbGV0IGNvbnRlbnRUeXBlID0gbWltZS5nZXRUeXBlKGZpbGVuYW1lKTtcbiAgICAgIGxldCBmaWxlID0gbmV3IFBhcnNlLkZpbGUoZmlsZW5hbWUsIHsgYmFzZTY0OiAnJyB9LCBjb250ZW50VHlwZSk7XG4gICAgICBjb25zdCB0cmlnZ2VyUmVzdWx0ID0gYXdhaXQgdHJpZ2dlcnMubWF5YmVSdW5GaWxlVHJpZ2dlcihcbiAgICAgICAgdHJpZ2dlcnMuVHlwZXMuYmVmb3JlRmluZCxcbiAgICAgICAgeyBmaWxlIH0sXG4gICAgICAgIGNvbmZpZyxcbiAgICAgICAgcmVxLmF1dGhcbiAgICAgICk7XG4gICAgICBpZiAodHJpZ2dlclJlc3VsdD8uZmlsZT8uX25hbWUpIHtcbiAgICAgICAgZmlsZW5hbWUgPSB0cmlnZ2VyUmVzdWx0Py5maWxlPy5fbmFtZTtcbiAgICAgICAgY29udGVudFR5cGUgPSBtaW1lLmdldFR5cGUoZmlsZW5hbWUpO1xuICAgICAgfVxuXG4gICAgICBpZiAoaXNGaWxlU3RyZWFtYWJsZShyZXEsIGZpbGVzQ29udHJvbGxlcikpIHtcbiAgICAgICAgZmlsZXNDb250cm9sbGVyLmhhbmRsZUZpbGVTdHJlYW0oY29uZmlnLCBmaWxlbmFtZSwgcmVxLCByZXMsIGNvbnRlbnRUeXBlKS5jYXRjaCgoKSA9PiB7XG4gICAgICAgICAgcmVzLnN0YXR1cyg0MDQpO1xuICAgICAgICAgIHJlcy5zZXQoJ0NvbnRlbnQtVHlwZScsICd0ZXh0L3BsYWluJyk7XG4gICAgICAgICAgcmVzLmVuZCgnRmlsZSBub3QgZm91bmQuJyk7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGxldCBkYXRhID0gYXdhaXQgZmlsZXNDb250cm9sbGVyLmdldEZpbGVEYXRhKGNvbmZpZywgZmlsZW5hbWUpLmNhdGNoKCgpID0+IHtcbiAgICAgICAgcmVzLnN0YXR1cyg0MDQpO1xuICAgICAgICByZXMuc2V0KCdDb250ZW50LVR5cGUnLCAndGV4dC9wbGFpbicpO1xuICAgICAgICByZXMuZW5kKCdGaWxlIG5vdCBmb3VuZC4nKTtcbiAgICAgIH0pO1xuICAgICAgaWYgKCFkYXRhKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGZpbGUgPSBuZXcgUGFyc2UuRmlsZShmaWxlbmFtZSwgeyBiYXNlNjQ6IGRhdGEudG9TdHJpbmcoJ2Jhc2U2NCcpIH0sIGNvbnRlbnRUeXBlKTtcbiAgICAgIGNvbnN0IGFmdGVyRmluZCA9IGF3YWl0IHRyaWdnZXJzLm1heWJlUnVuRmlsZVRyaWdnZXIoXG4gICAgICAgIHRyaWdnZXJzLlR5cGVzLmFmdGVyRmluZCxcbiAgICAgICAgeyBmaWxlLCBmb3JjZURvd25sb2FkOiBmYWxzZSB9LFxuICAgICAgICBjb25maWcsXG4gICAgICAgIHJlcS5hdXRoXG4gICAgICApO1xuXG4gICAgICBpZiAoYWZ0ZXJGaW5kPy5maWxlKSB7XG4gICAgICAgIGNvbnRlbnRUeXBlID0gbWltZS5nZXRUeXBlKGFmdGVyRmluZC5maWxlLl9uYW1lKTtcbiAgICAgICAgZGF0YSA9IEJ1ZmZlci5mcm9tKGFmdGVyRmluZC5maWxlLl9kYXRhLCAnYmFzZTY0Jyk7XG4gICAgICB9XG5cbiAgICAgIHJlcy5zdGF0dXMoMjAwKTtcbiAgICAgIHJlcy5zZXQoJ0NvbnRlbnQtVHlwZScsIGNvbnRlbnRUeXBlKTtcbiAgICAgIHJlcy5zZXQoJ0NvbnRlbnQtTGVuZ3RoJywgZGF0YS5sZW5ndGgpO1xuICAgICAgaWYgKGFmdGVyRmluZC5mb3JjZURvd25sb2FkKSB7XG4gICAgICAgIHJlcy5zZXQoJ0NvbnRlbnQtRGlzcG9zaXRpb24nLCBgYXR0YWNobWVudDtmaWxlbmFtZT0ke2FmdGVyRmluZC5maWxlLl9uYW1lfWApO1xuICAgICAgfVxuICAgICAgcmVzLmVuZChkYXRhKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBjb25zdCBlcnIgPSB0cmlnZ2Vycy5yZXNvbHZlRXJyb3IoZSwge1xuICAgICAgICBjb2RlOiBQYXJzZS5FcnJvci5TQ1JJUFRfRkFJTEVELFxuICAgICAgICBtZXNzYWdlOiBgQ291bGQgbm90IGZpbmQgZmlsZTogJHtmaWxlbmFtZX0uYCxcbiAgICAgIH0pO1xuICAgICAgcmVzLnN0YXR1cyg0MDMpO1xuICAgICAgcmVzLmpzb24oeyBjb2RlOiBlcnIuY29kZSwgZXJyb3I6IGVyci5tZXNzYWdlIH0pO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBNaWRkbGV3YXJlIHRoYXQgcnVucyBiZWZvcmUgYm9keSBwYXJzaW5nIHRvIGhhbmRsZSBoZWFkZXJzIHRoYXQgbXVzdCBiZVxuICAgKiByZXNvbHZlZCBiZWZvcmUgdGhlIHJlcXVlc3QgYm9keSBpcyBjb25zdW1lZC4gQ3VycmVudGx5IHN1cHBvcnRzOlxuICAgKlxuICAgKiAtIGBYLVBhcnNlLUZpbGUtTWF4LVVwbG9hZC1TaXplYDogT3ZlcnJpZGVzIHRoZSBzZXJ2ZXItd2lkZSBgbWF4VXBsb2FkU2l6ZWBcbiAgICogICBmb3IgdGhpcyByZXF1ZXN0LiBSZXF1aXJlcyB0aGUgbWFzdGVyIGtleS4gVGhlIHZhbHVlIHVzZXMgdGhlIHNhbWUgZm9ybWF0XG4gICAqICAgYXMgdGhlIHNlcnZlciBvcHRpb24gKGUuZy4gYCc1MG1iJ2AsIGAnMWdiJ2ApLiBTZXRzIGByZXEuX21heFVwbG9hZFNpemVPdmVycmlkZWBcbiAgICogICAoaW4gYnl0ZXMpIGZvciBgX2JvZHlQYXJzaW5nTWlkZGxld2FyZWAgdG8gdXNlLlxuICAgKi9cbiAgX2Vhcmx5SGVhZGVyc01pZGRsZXdhcmUoKSB7XG4gICAgcmV0dXJuIGFzeW5jIChyZXEsIHJlcywgbmV4dCkgPT4ge1xuICAgICAgY29uc3QgbWF4VXBsb2FkU2l6ZU92ZXJyaWRlID0gcmVxLmdldCgnWC1QYXJzZS1GaWxlLU1heC1VcGxvYWQtU2l6ZScpO1xuICAgICAgaWYgKCFtYXhVcGxvYWRTaXplT3ZlcnJpZGUpIHtcbiAgICAgICAgcmV0dXJuIG5leHQoKTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGFwcElkID0gcmVxLmdldCgnWC1QYXJzZS1BcHBsaWNhdGlvbi1JZCcpO1xuICAgICAgY29uc3QgY29uZmlnID0gQ29uZmlnLmdldChhcHBJZCk7XG4gICAgICBpZiAoIWNvbmZpZykge1xuICAgICAgICBjb25zdCBlcnJvciA9IGNyZWF0ZVNhbml0aXplZEh0dHBFcnJvcig0MDMsICdJbnZhbGlkIGFwcGxpY2F0aW9uIElELicsIHVuZGVmaW5lZCk7XG4gICAgICAgIHJlcy5zdGF0dXMoZXJyb3Iuc3RhdHVzKTtcbiAgICAgICAgcmVzLmpzb24oeyBlcnJvcjogZXJyb3IubWVzc2FnZSB9KTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgY29uc3QgbWFzdGVyS2V5ID0gYXdhaXQgY29uZmlnLmxvYWRNYXN0ZXJLZXkoKTtcbiAgICAgIGlmIChyZXEuZ2V0KCdYLVBhcnNlLU1hc3Rlci1LZXknKSAhPT0gbWFzdGVyS2V5KSB7XG4gICAgICAgIGNvbnN0IGVycm9yID0gY3JlYXRlU2FuaXRpemVkSHR0cEVycm9yKDQwMywgJ3VuYXV0aG9yaXplZDogbWFzdGVyIGtleSBpcyByZXF1aXJlZCcsIGNvbmZpZyk7XG4gICAgICAgIHJlcy5zdGF0dXMoZXJyb3Iuc3RhdHVzKTtcbiAgICAgICAgcmVzLmpzb24oeyBlcnJvcjogZXJyb3IubWVzc2FnZSB9KTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgaWYgKGNvbmZpZy5tYXN0ZXJLZXlJcHM/Lmxlbmd0aCAmJiAhTWlkZGxld2FyZXMuY2hlY2tJcChyZXEuaXAsIGNvbmZpZy5tYXN0ZXJLZXlJcHMsIGNvbmZpZy5tYXN0ZXJLZXlJcHNTdG9yZSkpIHtcbiAgICAgICAgY29uc3QgZXJyb3IgPSBjcmVhdGVTYW5pdGl6ZWRIdHRwRXJyb3IoNDAzLCAndW5hdXRob3JpemVkOiBtYXN0ZXIga2V5IGlzIHJlcXVpcmVkJywgY29uZmlnKTtcbiAgICAgICAgcmVzLnN0YXR1cyhlcnJvci5zdGF0dXMpO1xuICAgICAgICByZXMuanNvbih7IGVycm9yOiBlcnJvci5tZXNzYWdlIH0pO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBsZXQgcGFyc2VkQnl0ZXM7XG4gICAgICB0cnkge1xuICAgICAgICBwYXJzZWRCeXRlcyA9IFV0aWxzLnBhcnNlU2l6ZVRvQnl0ZXMobWF4VXBsb2FkU2l6ZU92ZXJyaWRlKTtcbiAgICAgIH0gY2F0Y2gge1xuICAgICAgICByZXR1cm4gbmV4dChcbiAgICAgICAgICBuZXcgUGFyc2UuRXJyb3IoXG4gICAgICAgICAgICBQYXJzZS5FcnJvci5GSUxFX1NBVkVfRVJST1IsXG4gICAgICAgICAgICBgSW52YWxpZCBtYXhVcGxvYWRTaXplIG92ZXJyaWRlIHZhbHVlOiAke21heFVwbG9hZFNpemVPdmVycmlkZX1gXG4gICAgICAgICAgKVxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgcmVxLl9tYXhVcGxvYWRTaXplT3ZlcnJpZGUgPSBwYXJzZWRCeXRlcztcbiAgICAgIG5leHQoKTtcbiAgICB9O1xuICB9XG5cbiAgX2JvZHlQYXJzaW5nTWlkZGxld2FyZShtYXhVcGxvYWRTaXplKSB7XG4gICAgY29uc3QgZGVmYXVsdE1heEJ5dGVzID0gVXRpbHMucGFyc2VTaXplVG9CeXRlcyhtYXhVcGxvYWRTaXplKTtcbiAgICByZXR1cm4gKHJlcSwgcmVzLCBuZXh0KSA9PiB7XG4gICAgICBpZiAocmVxLmdldCgnWC1QYXJzZS1VcGxvYWQtTW9kZScpID09PSAnc3RyZWFtJykge1xuICAgICAgICByZXEuX21heFVwbG9hZFNpemVCeXRlcyA9IHJlcS5fbWF4VXBsb2FkU2l6ZU92ZXJyaWRlID8/IGRlZmF1bHRNYXhCeXRlcztcbiAgICAgICAgcmV0dXJuIG5leHQoKTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGxpbWl0ID0gcmVxLl9tYXhVcGxvYWRTaXplT3ZlcnJpZGUgPz8gbWF4VXBsb2FkU2l6ZTtcbiAgICAgIHJldHVybiBleHByZXNzLnJhdyh7IHR5cGU6ICgpID0+IHRydWUsIGxpbWl0IH0pKHJlcSwgcmVzLCBuZXh0KTtcbiAgICB9O1xuICB9XG5cbiAgYXN5bmMgY3JlYXRlSGFuZGxlcihyZXEsIHJlcywgbmV4dCkge1xuICAgIGNvbnN0IGNvbmZpZyA9IHJlcS5jb25maWc7XG4gICAgY29uc3QgdXNlciA9IHJlcS5hdXRoLnVzZXI7XG4gICAgY29uc3QgaXNNYXN0ZXIgPSByZXEuYXV0aC5pc01hc3RlcjtcbiAgICBjb25zdCBpc0xpbmtlZCA9IHVzZXIgJiYgUGFyc2UuQW5vbnltb3VzVXRpbHMuaXNMaW5rZWQodXNlcik7XG4gICAgaWYgKCFpc01hc3RlciAmJiAhY29uZmlnLmZpbGVVcGxvYWQuZW5hYmxlRm9yQW5vbnltb3VzVXNlciAmJiBpc0xpbmtlZCkge1xuICAgICAgbmV4dChcbiAgICAgICAgbmV3IFBhcnNlLkVycm9yKFBhcnNlLkVycm9yLkZJTEVfU0FWRV9FUlJPUiwgJ0ZpbGUgdXBsb2FkIGJ5IGFub255bW91cyB1c2VyIGlzIGRpc2FibGVkLicpXG4gICAgICApO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAoIWlzTWFzdGVyICYmICFjb25maWcuZmlsZVVwbG9hZC5lbmFibGVGb3JBdXRoZW50aWNhdGVkVXNlciAmJiAhaXNMaW5rZWQgJiYgdXNlcikge1xuICAgICAgbmV4dChcbiAgICAgICAgbmV3IFBhcnNlLkVycm9yKFxuICAgICAgICAgIFBhcnNlLkVycm9yLkZJTEVfU0FWRV9FUlJPUixcbiAgICAgICAgICAnRmlsZSB1cGxvYWQgYnkgYXV0aGVudGljYXRlZCB1c2VyIGlzIGRpc2FibGVkLidcbiAgICAgICAgKVxuICAgICAgKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKCFpc01hc3RlciAmJiAhY29uZmlnLmZpbGVVcGxvYWQuZW5hYmxlRm9yUHVibGljICYmICF1c2VyKSB7XG4gICAgICBuZXh0KG5ldyBQYXJzZS5FcnJvcihQYXJzZS5FcnJvci5GSUxFX1NBVkVfRVJST1IsICdGaWxlIHVwbG9hZCBieSBwdWJsaWMgaXMgZGlzYWJsZWQuJykpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBmaWxlc0NvbnRyb2xsZXIgPSBjb25maWcuZmlsZXNDb250cm9sbGVyO1xuICAgIGNvbnN0IHsgZmlsZW5hbWUgfSA9IHJlcS5wYXJhbXM7XG4gICAgY29uc3QgY29udGVudFR5cGUgPSByZXEuZ2V0KCdDb250ZW50LXR5cGUnKTtcblxuICAgIGNvbnN0IGVycm9yID0gZmlsZXNDb250cm9sbGVyLnZhbGlkYXRlRmlsZW5hbWUoZmlsZW5hbWUpO1xuICAgIGlmIChlcnJvcikge1xuICAgICAgbmV4dChlcnJvcik7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgZmlsZUV4dGVuc2lvbnMgPSBjb25maWcuZmlsZVVwbG9hZD8uZmlsZUV4dGVuc2lvbnM7XG4gICAgaWYgKCFpc01hc3RlciAmJiBmaWxlRXh0ZW5zaW9ucykge1xuICAgICAgY29uc3QgaXNWYWxpZEV4dGVuc2lvbiA9IGV4dGVuc2lvbiA9PiB7XG4gICAgICAgIHJldHVybiBmaWxlRXh0ZW5zaW9ucy5zb21lKGV4dCA9PiB7XG4gICAgICAgICAgaWYgKGV4dCA9PT0gJyonKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgY29uc3QgcmVnZXggPSBuZXcgUmVnRXhwKGV4dCk7XG4gICAgICAgICAgaWYgKHJlZ2V4LnRlc3QoZXh0ZW5zaW9uKSkge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH07XG4gICAgICBsZXQgZXh0ZW5zaW9uID0gY29udGVudFR5cGU7XG4gICAgICBpZiAoZmlsZW5hbWUgJiYgZmlsZW5hbWUuaW5jbHVkZXMoJy4nKSkge1xuICAgICAgICBleHRlbnNpb24gPSBmaWxlbmFtZS5zdWJzdHJpbmcoZmlsZW5hbWUubGFzdEluZGV4T2YoJy4nKSArIDEpO1xuICAgICAgfSBlbHNlIGlmIChjb250ZW50VHlwZSAmJiBjb250ZW50VHlwZS5pbmNsdWRlcygnLycpKSB7XG4gICAgICAgIGV4dGVuc2lvbiA9IGNvbnRlbnRUeXBlLnNwbGl0KCcvJylbMV07XG4gICAgICB9XG4gICAgICBleHRlbnNpb24gPSBleHRlbnNpb24/LnNwbGl0KCcgJyk/LmpvaW4oJycpO1xuXG4gICAgICBpZiAoZXh0ZW5zaW9uICYmICFpc1ZhbGlkRXh0ZW5zaW9uKGV4dGVuc2lvbikpIHtcbiAgICAgICAgbmV4dChcbiAgICAgICAgICBuZXcgUGFyc2UuRXJyb3IoXG4gICAgICAgICAgICBQYXJzZS5FcnJvci5GSUxFX1NBVkVfRVJST1IsXG4gICAgICAgICAgICBgRmlsZSB1cGxvYWQgb2YgZXh0ZW5zaW9uICR7ZXh0ZW5zaW9ufSBpcyBkaXNhYmxlZC5gXG4gICAgICAgICAgKVxuICAgICAgICApO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gRm9yIHN0cmVhbWluZyB1cGxvYWRzLCByZWFkIGZpbGUgZGF0YSBmcm9tIGhlYWRlcnMgc2luY2UgdGhlIGJvZHkgaXMgdGhlIHJhdyBzdHJlYW1cbiAgICBpZiAocmVxLmdldCgnWC1QYXJzZS1VcGxvYWQtTW9kZScpID09PSAnc3RyZWFtJykge1xuICAgICAgcmVxLmZpbGVEYXRhID0ge307XG4gICAgICBpZiAocmVxLmdldCgnWC1QYXJzZS1GaWxlLURpcmVjdG9yeScpKSB7XG4gICAgICAgIHJlcS5maWxlRGF0YS5kaXJlY3RvcnkgPSByZXEuZ2V0KCdYLVBhcnNlLUZpbGUtRGlyZWN0b3J5Jyk7XG4gICAgICB9XG4gICAgICBpZiAocmVxLmdldCgnWC1QYXJzZS1GaWxlLU1ldGFkYXRhJykpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjb25zdCBwYXJzZWQgPSBKU09OLnBhcnNlKHJlcS5nZXQoJ1gtUGFyc2UtRmlsZS1NZXRhZGF0YScpKTtcbiAgICAgICAgICBpZiAoIXBhcnNlZCB8fCB0eXBlb2YgcGFyc2VkICE9PSAnb2JqZWN0JyB8fCBBcnJheS5pc0FycmF5KHBhcnNlZCkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcigpO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXEuZmlsZURhdGEubWV0YWRhdGEgPSBwYXJzZWQ7XG4gICAgICAgIH0gY2F0Y2gge1xuICAgICAgICAgIG5leHQobmV3IFBhcnNlLkVycm9yKFBhcnNlLkVycm9yLklOVkFMSURfSlNPTiwgJ0ludmFsaWQgSlNPTiBpbiBYLVBhcnNlLUZpbGUtTWV0YWRhdGEgaGVhZGVyLicpKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChyZXEuZ2V0KCdYLVBhcnNlLUZpbGUtVGFncycpKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY29uc3QgcGFyc2VkID0gSlNPTi5wYXJzZShyZXEuZ2V0KCdYLVBhcnNlLUZpbGUtVGFncycpKTtcbiAgICAgICAgICBpZiAoIXBhcnNlZCB8fCB0eXBlb2YgcGFyc2VkICE9PSAnb2JqZWN0JyB8fCBBcnJheS5pc0FycmF5KHBhcnNlZCkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcigpO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXEuZmlsZURhdGEudGFncyA9IHBhcnNlZDtcbiAgICAgICAgfSBjYXRjaCB7XG4gICAgICAgICAgbmV4dChuZXcgUGFyc2UuRXJyb3IoUGFyc2UuRXJyb3IuSU5WQUxJRF9KU09OLCAnSW52YWxpZCBKU09OIGluIFgtUGFyc2UtRmlsZS1UYWdzIGhlYWRlci4nKSk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gVmFsaWRhdGUgZGlyZWN0b3J5IG9wdGlvbiAocmVxdWlyZXMgbWFzdGVyIGtleSlcbiAgICBjb25zdCBkaXJlY3RvcnkgPSByZXEuZmlsZURhdGE/LmRpcmVjdG9yeTtcbiAgICBpZiAoZGlyZWN0b3J5ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGlmICghaXNNYXN0ZXIpIHtcbiAgICAgICAgbmV4dChcbiAgICAgICAgICBuZXcgUGFyc2UuRXJyb3IoXG4gICAgICAgICAgICBQYXJzZS5FcnJvci5PUEVSQVRJT05fRk9SQklEREVOLFxuICAgICAgICAgICAgJ0RpcmVjdG9yeSBjYW4gb25seSBiZSBzZXQgdXNpbmcgdGhlIE1hc3RlciBLZXkuJ1xuICAgICAgICAgIClcbiAgICAgICAgKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgY29uc3QgZGlyZWN0b3J5RXJyb3IgPSBGaWxlc1JvdXRlci52YWxpZGF0ZURpcmVjdG9yeShkaXJlY3RvcnkpO1xuICAgICAgaWYgKGRpcmVjdG9yeUVycm9yKSB7XG4gICAgICAgIG5leHQoZGlyZWN0b3J5RXJyb3IpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gRGlzcGF0Y2ggdG8gdGhlIGFwcHJvcHJpYXRlIGhhbmRsZXIgYmFzZWQgb24gd2hldGhlciB0aGUgYm9keSB3YXMgYnVmZmVyZWRcbiAgICBpZiAocmVxLmJvZHkgaW5zdGFuY2VvZiBCdWZmZXIpIHtcbiAgICAgIHJldHVybiB0aGlzLl9oYW5kbGVCdWZmZXJlZFVwbG9hZChyZXEsIHJlcywgbmV4dCk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLl9oYW5kbGVTdHJlYW1VcGxvYWQocmVxLCByZXMsIG5leHQpO1xuICB9XG5cbiAgYXN5bmMgX2hhbmRsZUJ1ZmZlcmVkVXBsb2FkKHJlcSwgcmVzLCBuZXh0KSB7XG4gICAgY29uc3QgY29uZmlnID0gcmVxLmNvbmZpZztcbiAgICBjb25zdCBmaWxlc0NvbnRyb2xsZXIgPSBjb25maWcuZmlsZXNDb250cm9sbGVyO1xuICAgIGNvbnN0IHsgZmlsZW5hbWUgfSA9IHJlcS5wYXJhbXM7XG4gICAgY29uc3QgY29udGVudFR5cGUgPSByZXEuZ2V0KCdDb250ZW50LXR5cGUnKTtcblxuICAgIGlmICghcmVxLmJvZHkgfHwgIXJlcS5ib2R5Lmxlbmd0aCkge1xuICAgICAgbmV4dChuZXcgUGFyc2UuRXJyb3IoUGFyc2UuRXJyb3IuRklMRV9TQVZFX0VSUk9SLCAnSW52YWxpZCBmaWxlIHVwbG9hZC4nKSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgYmFzZTY0ID0gcmVxLmJvZHkudG9TdHJpbmcoJ2Jhc2U2NCcpO1xuICAgIGNvbnN0IGZpbGUgPSBuZXcgUGFyc2UuRmlsZShmaWxlbmFtZSwgeyBiYXNlNjQgfSwgY29udGVudFR5cGUpO1xuICAgIGNvbnN0IHsgbWV0YWRhdGEgPSB7fSwgdGFncyA9IHt9LCBkaXJlY3RvcnkgfSA9IHJlcS5maWxlRGF0YSB8fCB7fTtcbiAgICB0cnkge1xuICAgICAgLy8gU2NhbiByZXF1ZXN0IGRhdGEgZm9yIGRlbmllZCBrZXl3b3Jkc1xuICAgICAgVXRpbHMuY2hlY2tQcm9oaWJpdGVkS2V5d29yZHMoY29uZmlnLCBtZXRhZGF0YSk7XG4gICAgICBVdGlscy5jaGVja1Byb2hpYml0ZWRLZXl3b3Jkcyhjb25maWcsIHRhZ3MpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBuZXh0KG5ldyBQYXJzZS5FcnJvcihQYXJzZS5FcnJvci5JTlZBTElEX0tFWV9OQU1FLCBlcnJvcikpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBmaWxlLnNldFRhZ3ModGFncyk7XG4gICAgZmlsZS5zZXRNZXRhZGF0YShtZXRhZGF0YSk7XG4gICAgaWYgKGRpcmVjdG9yeSkge1xuICAgICAgZmlsZS5zZXREaXJlY3RvcnkoZGlyZWN0b3J5KTtcbiAgICB9XG4gICAgY29uc3QgZmlsZVNpemUgPSBCdWZmZXIuYnl0ZUxlbmd0aChyZXEuYm9keSk7XG4gICAgY29uc3QgZmlsZU9iamVjdCA9IHsgZmlsZSwgZmlsZVNpemUgfTtcbiAgICB0cnkge1xuICAgICAgLy8gcnVuIGJlZm9yZVNhdmVGaWxlIHRyaWdnZXJcbiAgICAgIGNvbnN0IHRyaWdnZXJSZXN1bHQgPSBhd2FpdCB0cmlnZ2Vycy5tYXliZVJ1bkZpbGVUcmlnZ2VyKFxuICAgICAgICB0cmlnZ2Vycy5UeXBlcy5iZWZvcmVTYXZlLFxuICAgICAgICBmaWxlT2JqZWN0LFxuICAgICAgICBjb25maWcsXG4gICAgICAgIHJlcS5hdXRoXG4gICAgICApO1xuICAgICAgbGV0IHNhdmVSZXN1bHQ7XG4gICAgICAvLyBpZiBhIG5ldyBQYXJzZUZpbGUgaXMgcmV0dXJuZWQgY2hlY2sgaWYgaXQncyBhbiBhbHJlYWR5IHNhdmVkIGZpbGVcbiAgICAgIGlmICh0cmlnZ2VyUmVzdWx0IGluc3RhbmNlb2YgUGFyc2UuRmlsZSkge1xuICAgICAgICBmaWxlT2JqZWN0LmZpbGUgPSB0cmlnZ2VyUmVzdWx0O1xuICAgICAgICBpZiAodHJpZ2dlclJlc3VsdC51cmwoKSkge1xuICAgICAgICAgIC8vIHNldCBmaWxlU2l6ZSB0byBudWxsIGJlY2F1c2Ugd2Ugd29udCBrbm93IGhvdyBiaWcgaXQgaXMgaGVyZVxuICAgICAgICAgIGZpbGVPYmplY3QuZmlsZVNpemUgPSBudWxsO1xuICAgICAgICAgIHNhdmVSZXN1bHQgPSB7XG4gICAgICAgICAgICB1cmw6IHRyaWdnZXJSZXN1bHQudXJsKCksXG4gICAgICAgICAgICBuYW1lOiB0cmlnZ2VyUmVzdWx0Ll9uYW1lLFxuICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIC8vIGlmIHRoZSBmaWxlIHJldHVybmVkIGJ5IHRoZSB0cmlnZ2VyIGhhcyBhbHJlYWR5IGJlZW4gc2F2ZWQgc2tpcCBzYXZpbmcgYW55dGhpbmdcbiAgICAgIGlmICghc2F2ZVJlc3VsdCkge1xuICAgICAgICAvLyB1cGRhdGUgZmlsZVNpemVcbiAgICAgICAgbGV0IGJ1ZmZlckRhdGE7XG4gICAgICAgIGlmIChmaWxlT2JqZWN0LmZpbGUuX3NvdXJjZT8uZm9ybWF0ID09PSAnYnVmZmVyJykge1xuICAgICAgICAgIGJ1ZmZlckRhdGEgPSBmaWxlT2JqZWN0LmZpbGUuX3NvdXJjZS5idWZmZXI7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgYnVmZmVyRGF0YSA9IEJ1ZmZlci5mcm9tKGZpbGVPYmplY3QuZmlsZS5fZGF0YSwgJ2Jhc2U2NCcpO1xuICAgICAgICB9XG4gICAgICAgIGZpbGVPYmplY3QuZmlsZVNpemUgPSBCdWZmZXIuYnl0ZUxlbmd0aChidWZmZXJEYXRhKTtcbiAgICAgICAgLy8gcHJlcGFyZSBmaWxlIG9wdGlvbnNcbiAgICAgICAgY29uc3QgZmlsZU9wdGlvbnMgPSB7XG4gICAgICAgICAgbWV0YWRhdGE6IGZpbGVPYmplY3QuZmlsZS5fbWV0YWRhdGEsXG4gICAgICAgIH07XG4gICAgICAgIC8vIHNvbWUgczMtY29tcGF0aWJsZSBwcm92aWRlcnMgKERpZ2l0YWxPY2VhbiwgTGlub2RlKSBkbyBub3QgYWNjZXB0IHRhZ3NcbiAgICAgICAgLy8gc28gd2UgZG8gbm90IGluY2x1ZGUgdGhlIHRhZ3Mgb3B0aW9uIGlmIGl0IGlzIGVtcHR5LlxuICAgICAgICBjb25zdCBmaWxlVGFncyA9XG4gICAgICAgICAgT2JqZWN0LmtleXMoZmlsZU9iamVjdC5maWxlLl90YWdzKS5sZW5ndGggPiAwID8geyB0YWdzOiBmaWxlT2JqZWN0LmZpbGUuX3RhZ3MgfSA6IHt9O1xuICAgICAgICBPYmplY3QuYXNzaWduKGZpbGVPcHRpb25zLCBmaWxlVGFncyk7XG4gICAgICAgIC8vIGluY2x1ZGUgZGlyZWN0b3J5IGlmIHNldCAoZnJvbSBjbGllbnQgcmVxdWVzdCBvciBiZWZvcmVTYXZlRmlsZSB0cmlnZ2VyKVxuICAgICAgICBpZiAoZmlsZU9iamVjdC5maWxlLl9kaXJlY3RvcnkpIHtcbiAgICAgICAgICBmaWxlT3B0aW9ucy5kaXJlY3RvcnkgPSBmaWxlT2JqZWN0LmZpbGUuX2RpcmVjdG9yeTtcbiAgICAgICAgfVxuICAgICAgICAvLyBzYXZlIGZpbGVcbiAgICAgICAgY29uc3QgY3JlYXRlRmlsZVJlc3VsdCA9IGF3YWl0IGZpbGVzQ29udHJvbGxlci5jcmVhdGVGaWxlKFxuICAgICAgICAgIGNvbmZpZyxcbiAgICAgICAgICBmaWxlT2JqZWN0LmZpbGUuX25hbWUsXG4gICAgICAgICAgYnVmZmVyRGF0YSxcbiAgICAgICAgICBmaWxlT2JqZWN0LmZpbGUuX3NvdXJjZS50eXBlLFxuICAgICAgICAgIGZpbGVPcHRpb25zXG4gICAgICAgICk7XG4gICAgICAgIC8vIHVwZGF0ZSBmaWxlIHdpdGggbmV3IGRhdGFcbiAgICAgICAgZmlsZU9iamVjdC5maWxlLl9uYW1lID0gY3JlYXRlRmlsZVJlc3VsdC5uYW1lO1xuICAgICAgICBmaWxlT2JqZWN0LmZpbGUuX3VybCA9IGNyZWF0ZUZpbGVSZXN1bHQudXJsO1xuICAgICAgICBmaWxlT2JqZWN0LmZpbGUuX3JlcXVlc3RUYXNrID0gbnVsbDtcbiAgICAgICAgZmlsZU9iamVjdC5maWxlLl9wcmV2aW91c1NhdmUgPSBQcm9taXNlLnJlc29sdmUoZmlsZU9iamVjdC5maWxlKTtcbiAgICAgICAgc2F2ZVJlc3VsdCA9IHtcbiAgICAgICAgICB1cmw6IGNyZWF0ZUZpbGVSZXN1bHQudXJsLFxuICAgICAgICAgIG5hbWU6IGNyZWF0ZUZpbGVSZXN1bHQubmFtZSxcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICAgIC8vIHJ1biBhZnRlclNhdmVGaWxlIHRyaWdnZXJcbiAgICAgIGF3YWl0IHRyaWdnZXJzLm1heWJlUnVuRmlsZVRyaWdnZXIodHJpZ2dlcnMuVHlwZXMuYWZ0ZXJTYXZlLCBmaWxlT2JqZWN0LCBjb25maWcsIHJlcS5hdXRoKTtcbiAgICAgIHJlcy5zdGF0dXMoMjAxKTtcbiAgICAgIHJlcy5zZXQoJ0xvY2F0aW9uJywgc2F2ZVJlc3VsdC51cmwpO1xuICAgICAgcmVzLmpzb24oc2F2ZVJlc3VsdCk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgbG9nZ2VyLmVycm9yKCdFcnJvciBjcmVhdGluZyBhIGZpbGU6ICcsIGUpO1xuICAgICAgY29uc3QgZXJyb3IgPSB0cmlnZ2Vycy5yZXNvbHZlRXJyb3IoZSwge1xuICAgICAgICBjb2RlOiBQYXJzZS5FcnJvci5GSUxFX1NBVkVfRVJST1IsXG4gICAgICAgIG1lc3NhZ2U6IGBDb3VsZCBub3Qgc3RvcmUgZmlsZTogJHtmaWxlT2JqZWN0LmZpbGUuX25hbWV9LmAsXG4gICAgICB9KTtcbiAgICAgIG5leHQoZXJyb3IpO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIF9oYW5kbGVTdHJlYW1VcGxvYWQocmVxLCByZXMsIG5leHQpIHtcbiAgICBjb25zdCBjb25maWcgPSByZXEuY29uZmlnO1xuICAgIGNvbnN0IGZpbGVzQ29udHJvbGxlciA9IGNvbmZpZy5maWxlc0NvbnRyb2xsZXI7XG4gICAgY29uc3QgeyBmaWxlbmFtZSB9ID0gcmVxLnBhcmFtcztcbiAgICBsZXQgY29udGVudFR5cGUgPSByZXEuZ2V0KCdDb250ZW50LVR5cGUnKTtcbiAgICBjb25zdCBtYXhCeXRlcyA9IHJlcS5fbWF4VXBsb2FkU2l6ZUJ5dGVzO1xuICAgIGxldCBzdHJlYW07XG5cbiAgICB0cnkge1xuICAgICAgLy8gRWFybHkgcmVqZWN0aW9uIHZpYSBDb250ZW50LUxlbmd0aCBoZWFkZXJcbiAgICAgIGNvbnN0IGNvbnRlbnRMZW5ndGggPSByZXEuZ2V0KCdDb250ZW50LUxlbmd0aCcpO1xuICAgICAgaWYgKGNvbnRlbnRMZW5ndGggJiYgcGFyc2VJbnQoY29udGVudExlbmd0aCwgMTApID4gbWF4Qnl0ZXMpIHtcbiAgICAgICAgcmVxLnJlc3VtZSgpO1xuICAgICAgICBuZXh0KG5ldyBQYXJzZS5FcnJvcihcbiAgICAgICAgICBQYXJzZS5FcnJvci5GSUxFX1NBVkVfRVJST1IsXG4gICAgICAgICAgYEZpbGUgc2l6ZSBleGNlZWRzIG1heGltdW0gYWxsb3dlZDogJHttYXhCeXRlc30gYnl0ZXMuYFxuICAgICAgICApKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBtaW1lID0gKGF3YWl0IGltcG9ydCgnbWltZScpKS5kZWZhdWx0O1xuXG4gICAgICAvLyBJbmZlciBjb250ZW50IHR5cGUgZnJvbSBleHRlbnNpb24gb3IgYWRkIGV4dGVuc2lvbiBmcm9tIGNvbnRlbnQgdHlwZVxuICAgICAgY29uc3QgaGFzRXh0ZW5zaW9uID0gZmlsZW5hbWUgJiYgZmlsZW5hbWUuaW5jbHVkZXMoJy4nKTtcbiAgICAgIGlmIChoYXNFeHRlbnNpb24gJiYgIWNvbnRlbnRUeXBlKSB7XG4gICAgICAgIGNvbnRlbnRUeXBlID0gbWltZS5nZXRUeXBlKGZpbGVuYW1lKTtcbiAgICAgIH0gZWxzZSBpZiAoIWhhc0V4dGVuc2lvbiAmJiBjb250ZW50VHlwZSkge1xuICAgICAgICAvLyBleHRlbnNpb24gd2lsbCBiZSBhZGRlZCBieSBmaWxlc0NvbnRyb2xsZXIuY3JlYXRlRmlsZVxuICAgICAgfVxuXG4gICAgICAvLyBDcmVhdGUgc2l6ZS1saW1pdGVkIHN0cmVhbSB3cmFwcGluZyB0aGUgcmVxdWVzdFxuICAgICAgc3RyZWFtID0gY3JlYXRlU2l6ZUxpbWl0ZWRTdHJlYW0ocmVxLCBtYXhCeXRlcyk7XG5cbiAgICAgIC8vIEJ1aWxkIGEgUGFyc2UuRmlsZSB3aXRoIG5vIF9kYXRhIChzdHJlYW1pbmcgbW9kZSlcbiAgICAgIGNvbnN0IGZpbGUgPSBuZXcgUGFyc2UuRmlsZShmaWxlbmFtZSwgeyBiYXNlNjQ6ICcnIH0sIGNvbnRlbnRUeXBlKTtcbiAgICAgIGNvbnN0IHsgbWV0YWRhdGEgPSB7fSwgdGFncyA9IHt9LCBkaXJlY3RvcnkgfSA9IHJlcS5maWxlRGF0YSB8fCB7fTtcblxuICAgICAgLy8gVmFsaWRhdGUgbWV0YWRhdGEgYW5kIHRhZ3MgZm9yIHByb2hpYml0ZWQga2V5d29yZHNcbiAgICAgIHRyeSB7XG4gICAgICAgIFV0aWxzLmNoZWNrUHJvaGliaXRlZEtleXdvcmRzKGNvbmZpZywgbWV0YWRhdGEpO1xuICAgICAgICBVdGlscy5jaGVja1Byb2hpYml0ZWRLZXl3b3Jkcyhjb25maWcsIHRhZ3MpO1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgc3RyZWFtLmRlc3Ryb3koKTtcbiAgICAgICAgbmV4dChuZXcgUGFyc2UuRXJyb3IoUGFyc2UuRXJyb3IuSU5WQUxJRF9LRVlfTkFNRSwgZXJyb3IpKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBmaWxlLnNldFRhZ3ModGFncyk7XG4gICAgICBmaWxlLnNldE1ldGFkYXRhKG1ldGFkYXRhKTtcbiAgICAgIGlmIChkaXJlY3RvcnkpIHtcbiAgICAgICAgZmlsZS5zZXREaXJlY3RvcnkoZGlyZWN0b3J5KTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgZmlsZVNpemUgPSByZXEuZ2V0KCdDb250ZW50LUxlbmd0aCcpXG4gICAgICAgID8gcGFyc2VJbnQocmVxLmdldCgnQ29udGVudC1MZW5ndGgnKSwgMTApXG4gICAgICAgIDogbnVsbDtcbiAgICAgIGNvbnN0IGZpbGVPYmplY3QgPSB7IGZpbGUsIGZpbGVTaXplLCBzdHJlYW06IHRydWUgfTtcblxuICAgICAgLy8gUnVuIGJlZm9yZVNhdmVGaWxlIHRyaWdnZXJcbiAgICAgIGNvbnN0IHRyaWdnZXJSZXN1bHQgPSBhd2FpdCB0cmlnZ2Vycy5tYXliZVJ1bkZpbGVUcmlnZ2VyKFxuICAgICAgICB0cmlnZ2Vycy5UeXBlcy5iZWZvcmVTYXZlLFxuICAgICAgICBmaWxlT2JqZWN0LFxuICAgICAgICBjb25maWcsXG4gICAgICAgIHJlcS5hdXRoXG4gICAgICApO1xuXG4gICAgICBsZXQgc2F2ZVJlc3VsdDtcbiAgICAgIC8vIElmIGEgbmV3IFBhcnNlRmlsZSBpcyByZXR1cm5lZCwgY2hlY2sgaWYgaXQncyBhbiBhbHJlYWR5IHNhdmVkIGZpbGVcbiAgICAgIGlmICh0cmlnZ2VyUmVzdWx0IGluc3RhbmNlb2YgUGFyc2UuRmlsZSkge1xuICAgICAgICBmaWxlT2JqZWN0LmZpbGUgPSB0cmlnZ2VyUmVzdWx0O1xuICAgICAgICBpZiAodHJpZ2dlclJlc3VsdC51cmwoKSkge1xuICAgICAgICAgIGZpbGVPYmplY3QuZmlsZVNpemUgPSBudWxsO1xuICAgICAgICAgIHNhdmVSZXN1bHQgPSB7XG4gICAgICAgICAgICB1cmw6IHRyaWdnZXJSZXN1bHQudXJsKCksXG4gICAgICAgICAgICBuYW1lOiB0cmlnZ2VyUmVzdWx0Ll9uYW1lLFxuICAgICAgICAgIH07XG4gICAgICAgICAgLy8gRGVzdHJveSBzdHJlYW0gdG8gcmVtb3ZlIGxpc3RlbmVycyBhbmQgZHJhaW4gcmVxdWVzdFxuICAgICAgICAgIHN0cmVhbS5kZXN0cm95KCk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gSWYgdGhlIGZpbGUgcmV0dXJuZWQgYnkgdGhlIHRyaWdnZXIgaGFzIGFscmVhZHkgYmVlbiBzYXZlZCwgc2tpcCBzYXZpbmdcbiAgICAgIGlmICghc2F2ZVJlc3VsdCkge1xuICAgICAgICAvLyBQcmVwYXJlIGZpbGUgb3B0aW9uc1xuICAgICAgICBjb25zdCBmaWxlT3B0aW9ucyA9IHtcbiAgICAgICAgICBtZXRhZGF0YTogZmlsZU9iamVjdC5maWxlLl9tZXRhZGF0YSxcbiAgICAgICAgfTtcbiAgICAgICAgY29uc3QgZmlsZVRhZ3MgPVxuICAgICAgICAgIE9iamVjdC5rZXlzKGZpbGVPYmplY3QuZmlsZS5fdGFncykubGVuZ3RoID4gMCA/IHsgdGFnczogZmlsZU9iamVjdC5maWxlLl90YWdzIH0gOiB7fTtcbiAgICAgICAgT2JqZWN0LmFzc2lnbihmaWxlT3B0aW9ucywgZmlsZVRhZ3MpO1xuICAgICAgICAvLyBpbmNsdWRlIGRpcmVjdG9yeSBpZiBzZXQgKGZyb20gY2xpZW50IHJlcXVlc3Qgb3IgYmVmb3JlU2F2ZUZpbGUgdHJpZ2dlcilcbiAgICAgICAgaWYgKGZpbGVPYmplY3QuZmlsZS5fZGlyZWN0b3J5KSB7XG4gICAgICAgICAgZmlsZU9wdGlvbnMuZGlyZWN0b3J5ID0gZmlsZU9iamVjdC5maWxlLl9kaXJlY3Rvcnk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBQYXNzIHN0cmVhbSBkaXJlY3RseSB0byBmaWxlc0NvbnRyb2xsZXIg4oCUIGl0IHdpbGwgYnVmZmVyIGlmIGFkYXB0ZXIgZG9lc24ndCBzdXBwb3J0IHN0cmVhbWluZ1xuICAgICAgICBjb25zdCBzb3VyY2VUeXBlID0gZmlsZU9iamVjdC5maWxlLl9zb3VyY2U/LnR5cGUgfHwgY29udGVudFR5cGU7XG4gICAgICAgIGNvbnN0IGNyZWF0ZUZpbGVSZXN1bHQgPSBhd2FpdCBmaWxlc0NvbnRyb2xsZXIuY3JlYXRlRmlsZShcbiAgICAgICAgICBjb25maWcsXG4gICAgICAgICAgZmlsZU9iamVjdC5maWxlLl9uYW1lLFxuICAgICAgICAgIHN0cmVhbSxcbiAgICAgICAgICBzb3VyY2VUeXBlLFxuICAgICAgICAgIGZpbGVPcHRpb25zXG4gICAgICAgICk7XG5cbiAgICAgICAgLy8gVXBkYXRlIGZpbGUgd2l0aCBuZXcgZGF0YVxuICAgICAgICBmaWxlT2JqZWN0LmZpbGUuX25hbWUgPSBjcmVhdGVGaWxlUmVzdWx0Lm5hbWU7XG4gICAgICAgIGZpbGVPYmplY3QuZmlsZS5fdXJsID0gY3JlYXRlRmlsZVJlc3VsdC51cmw7XG4gICAgICAgIGZpbGVPYmplY3QuZmlsZS5fcmVxdWVzdFRhc2sgPSBudWxsO1xuICAgICAgICBmaWxlT2JqZWN0LmZpbGUuX3ByZXZpb3VzU2F2ZSA9IFByb21pc2UucmVzb2x2ZShmaWxlT2JqZWN0LmZpbGUpO1xuICAgICAgICBzYXZlUmVzdWx0ID0ge1xuICAgICAgICAgIHVybDogY3JlYXRlRmlsZVJlc3VsdC51cmwsXG4gICAgICAgICAgbmFtZTogY3JlYXRlRmlsZVJlc3VsdC5uYW1lLFxuICAgICAgICB9O1xuICAgICAgfVxuXG4gICAgICAvLyBSdW4gYWZ0ZXJTYXZlRmlsZSB0cmlnZ2VyXG4gICAgICBhd2FpdCB0cmlnZ2Vycy5tYXliZVJ1bkZpbGVUcmlnZ2VyKHRyaWdnZXJzLlR5cGVzLmFmdGVyU2F2ZSwgZmlsZU9iamVjdCwgY29uZmlnLCByZXEuYXV0aCk7XG4gICAgICByZXMuc3RhdHVzKDIwMSk7XG4gICAgICByZXMuc2V0KCdMb2NhdGlvbicsIHNhdmVSZXN1bHQudXJsKTtcbiAgICAgIHJlcy5qc29uKHNhdmVSZXN1bHQpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIC8vIERlc3Ryb3kgc3RyZWFtIHRvIHJlbW92ZSBsaXN0ZW5lcnMgYW5kIGRyYWluIHJlcXVlc3QsIG9yIHJlc3VtZSBkaXJlY3RseVxuICAgICAgaWYgKHN0cmVhbSkge1xuICAgICAgICBzdHJlYW0uZGVzdHJveSgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmVxLnJlc3VtZSgpO1xuICAgICAgfVxuICAgICAgbG9nZ2VyLmVycm9yKCdFcnJvciBjcmVhdGluZyBhIGZpbGU6ICcsIGUpO1xuICAgICAgY29uc3QgZXJyb3IgPSB0cmlnZ2Vycy5yZXNvbHZlRXJyb3IoZSwge1xuICAgICAgICBjb2RlOiBQYXJzZS5FcnJvci5GSUxFX1NBVkVfRVJST1IsXG4gICAgICAgIG1lc3NhZ2U6IGBDb3VsZCBub3Qgc3RvcmUgZmlsZTogJHtmaWxlbmFtZX0uYCxcbiAgICAgIH0pO1xuICAgICAgbmV4dChlcnJvcik7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgZGVsZXRlSGFuZGxlcihyZXEsIHJlcywgbmV4dCkge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCB7IGZpbGVzQ29udHJvbGxlciB9ID0gcmVxLmNvbmZpZztcbiAgICAgIGNvbnN0IGZpbGVuYW1lID0gRmlsZXNSb3V0ZXIuX2dldEZpbGVuYW1lRnJvbVBhcmFtcyhyZXEpO1xuICAgICAgLy8gcnVuIGJlZm9yZURlbGV0ZUZpbGUgdHJpZ2dlclxuICAgICAgY29uc3QgZmlsZSA9IG5ldyBQYXJzZS5GaWxlKGZpbGVuYW1lKTtcbiAgICAgIGZpbGUuX3VybCA9IGF3YWl0IGZpbGVzQ29udHJvbGxlci5hZGFwdGVyLmdldEZpbGVMb2NhdGlvbihyZXEuY29uZmlnLCBmaWxlbmFtZSk7XG4gICAgICBjb25zdCBmaWxlT2JqZWN0ID0geyBmaWxlLCBmaWxlU2l6ZTogbnVsbCB9O1xuICAgICAgYXdhaXQgdHJpZ2dlcnMubWF5YmVSdW5GaWxlVHJpZ2dlcihcbiAgICAgICAgdHJpZ2dlcnMuVHlwZXMuYmVmb3JlRGVsZXRlLFxuICAgICAgICBmaWxlT2JqZWN0LFxuICAgICAgICByZXEuY29uZmlnLFxuICAgICAgICByZXEuYXV0aFxuICAgICAgKTtcbiAgICAgIC8vIGRlbGV0ZSBmaWxlXG4gICAgICBhd2FpdCBmaWxlc0NvbnRyb2xsZXIuZGVsZXRlRmlsZShyZXEuY29uZmlnLCBmaWxlbmFtZSk7XG4gICAgICAvLyBydW4gYWZ0ZXJEZWxldGVGaWxlIHRyaWdnZXJcbiAgICAgIGF3YWl0IHRyaWdnZXJzLm1heWJlUnVuRmlsZVRyaWdnZXIoXG4gICAgICAgIHRyaWdnZXJzLlR5cGVzLmFmdGVyRGVsZXRlLFxuICAgICAgICBmaWxlT2JqZWN0LFxuICAgICAgICByZXEuY29uZmlnLFxuICAgICAgICByZXEuYXV0aFxuICAgICAgKTtcbiAgICAgIHJlcy5zdGF0dXMoMjAwKTtcbiAgICAgIC8vIFRPRE86IHJldHVybiB1c2VmdWwgSlNPTiBoZXJlP1xuICAgICAgcmVzLmVuZCgpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGxvZ2dlci5lcnJvcignRXJyb3IgZGVsZXRpbmcgYSBmaWxlOiAnLCBlKTtcbiAgICAgIGNvbnN0IGVycm9yID0gdHJpZ2dlcnMucmVzb2x2ZUVycm9yKGUsIHtcbiAgICAgICAgY29kZTogUGFyc2UuRXJyb3IuRklMRV9ERUxFVEVfRVJST1IsXG4gICAgICAgIG1lc3NhZ2U6ICdDb3VsZCBub3QgZGVsZXRlIGZpbGUuJyxcbiAgICAgIH0pO1xuICAgICAgbmV4dChlcnJvcik7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgbWV0YWRhdGFIYW5kbGVyKHJlcSwgcmVzKSB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGNvbmZpZyA9IENvbmZpZy5nZXQocmVxLnBhcmFtcy5hcHBJZCk7XG4gICAgICBjb25zdCB7IGZpbGVzQ29udHJvbGxlciB9ID0gY29uZmlnO1xuICAgICAgY29uc3QgZmlsZW5hbWUgPSBGaWxlc1JvdXRlci5fZ2V0RmlsZW5hbWVGcm9tUGFyYW1zKHJlcSk7XG4gICAgICBjb25zdCBkYXRhID0gYXdhaXQgZmlsZXNDb250cm9sbGVyLmdldE1ldGFkYXRhKGZpbGVuYW1lKTtcbiAgICAgIHJlcy5zdGF0dXMoMjAwKTtcbiAgICAgIHJlcy5qc29uKGRhdGEpO1xuICAgIH0gY2F0Y2gge1xuICAgICAgcmVzLnN0YXR1cygyMDApO1xuICAgICAgcmVzLmpzb24oe30pO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBpc0ZpbGVTdHJlYW1hYmxlKHJlcSwgZmlsZXNDb250cm9sbGVyKSB7XG4gIGNvbnN0IHJhbmdlID0gKHJlcS5nZXQoJ1JhbmdlJykgfHwgJy8tLycpLnNwbGl0KCctJyk7XG4gIGNvbnN0IHN0YXJ0ID0gTnVtYmVyKHJhbmdlWzBdKTtcbiAgY29uc3QgZW5kID0gTnVtYmVyKHJhbmdlWzFdKTtcbiAgcmV0dXJuIChcbiAgICAoIWlzTmFOKHN0YXJ0KSB8fCAhaXNOYU4oZW5kKSkgJiYgdHlwZW9mIGZpbGVzQ29udHJvbGxlci5hZGFwdGVyLmhhbmRsZUZpbGVTdHJlYW0gPT09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
672
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfZXhwcmVzcyIsIl9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCJyZXF1aXJlIiwiTWlkZGxld2FyZXMiLCJfaW50ZXJvcFJlcXVpcmVXaWxkY2FyZCIsIl9ub2RlIiwiX0NvbmZpZyIsIl9sb2dnZXIiLCJfc3RyZWFtIiwiX0Vycm9yIiwiZSIsInQiLCJXZWFrTWFwIiwiciIsIm4iLCJfX2VzTW9kdWxlIiwibyIsImkiLCJmIiwiX19wcm90b19fIiwiZGVmYXVsdCIsImhhcyIsImdldCIsInNldCIsImhhc093blByb3BlcnR5IiwiY2FsbCIsIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIiwidHJpZ2dlcnMiLCJVdGlscyIsImNyZWF0ZVNpemVMaW1pdGVkU3RyZWFtIiwic291cmNlIiwibWF4Qnl0ZXMiLCJ0b3RhbEJ5dGVzIiwic3RhcnRlZCIsInNvdXJjZUVuZGVkIiwib25EYXRhIiwib25FbmQiLCJvbkVycm9yIiwib3V0cHV0IiwiUmVhZGFibGUiLCJyZWFkIiwiY2h1bmsiLCJsZW5ndGgiLCJkZXN0cm95IiwiUGFyc2UiLCJFcnJvciIsIkZJTEVfU0FWRV9FUlJPUiIsInB1c2giLCJwYXVzZSIsImVyciIsIm9uIiwicmVzdW1lIiwiY2FsbGJhY2siLCJyZW1vdmVMaXN0ZW5lciIsIlJFU0VSVkVEX0RJUkVDVE9SWV9TRUdNRU5UUyIsImV4cG9ydHMiLCJGaWxlc1JvdXRlciIsImV4cHJlc3NSb3V0ZXIiLCJtYXhVcGxvYWRTaXplIiwicm91dGVyIiwiZXhwcmVzcyIsIlJvdXRlciIsIm1ldGFkYXRhSGFuZGxlciIsImdldEhhbmRsZXIiLCJwb3N0IiwicmVxIiwicmVzIiwibmV4dCIsIklOVkFMSURfRklMRV9OQU1FIiwiX2Vhcmx5SGVhZGVyc01pZGRsZXdhcmUiLCJfYm9keVBhcnNpbmdNaWRkbGV3YXJlIiwiaGFuZGxlUGFyc2VIZWFkZXJzIiwiaGFuZGxlUGFyc2VTZXNzaW9uIiwiY3JlYXRlSGFuZGxlciIsImJpbmQiLCJkZWxldGUiLCJlbmZvcmNlTWFzdGVyS2V5QWNjZXNzIiwiZGVsZXRlSGFuZGxlciIsIl9nZXRGaWxlbmFtZUZyb21QYXJhbXMiLCJwYXJ0cyIsInBhcmFtcyIsImZpbGVwYXRoIiwiQXJyYXkiLCJpc0FycmF5Iiwiam9pbiIsInZhbGlkYXRlRGlyZWN0b3J5IiwiZGlyZWN0b3J5IiwiaW5jbHVkZXMiLCJzdGFydHNXaXRoIiwiZW5kc1dpdGgiLCJmaXJzdFNlZ21lbnQiLCJzcGxpdCIsImRpclJlZ2V4IiwidGVzdCIsImNvbmZpZyIsIkNvbmZpZyIsImFwcElkIiwiZXJyb3IiLCJjcmVhdGVTYW5pdGl6ZWRIdHRwRXJyb3IiLCJzdGF0dXMiLCJqc29uIiwibWVzc2FnZSIsImZpbGVuYW1lIiwiZmlsZXNDb250cm9sbGVyIiwibWltZSIsImNvbnRlbnRUeXBlIiwiZ2V0VHlwZSIsImZpbGUiLCJGaWxlIiwiYmFzZTY0IiwidHJpZ2dlclJlc3VsdCIsIm1heWJlUnVuRmlsZVRyaWdnZXIiLCJUeXBlcyIsImJlZm9yZUZpbmQiLCJhdXRoIiwiX25hbWUiLCJpc0ZpbGVTdHJlYW1hYmxlIiwiaGFuZGxlRmlsZVN0cmVhbSIsImNhdGNoIiwiZW5kIiwiZGF0YSIsImdldEZpbGVEYXRhIiwidG9TdHJpbmciLCJhZnRlckZpbmQiLCJmb3JjZURvd25sb2FkIiwiQnVmZmVyIiwiZnJvbSIsIl9kYXRhIiwicmVzb2x2ZUVycm9yIiwiY29kZSIsIlNDUklQVF9GQUlMRUQiLCJtYXhVcGxvYWRTaXplT3ZlcnJpZGUiLCJ1bmRlZmluZWQiLCJtYXN0ZXJLZXkiLCJsb2FkTWFzdGVyS2V5IiwibWFzdGVyS2V5SXBzIiwiY2hlY2tJcCIsImlwIiwibWFzdGVyS2V5SXBzU3RvcmUiLCJwYXJzZWRCeXRlcyIsInBhcnNlU2l6ZVRvQnl0ZXMiLCJfbWF4VXBsb2FkU2l6ZU92ZXJyaWRlIiwiZGVmYXVsdE1heEJ5dGVzIiwiX21heFVwbG9hZFNpemVCeXRlcyIsImxpbWl0IiwicmF3IiwidHlwZSIsImlzUmVhZE9ubHkiLCJ1c2VyIiwiaXNNYXN0ZXIiLCJpc0xpbmtlZCIsIkFub255bW91c1V0aWxzIiwiZmlsZVVwbG9hZCIsImVuYWJsZUZvckFub255bW91c1VzZXIiLCJlbmFibGVGb3JBdXRoZW50aWNhdGVkVXNlciIsImVuYWJsZUZvclB1YmxpYyIsInZhbGlkYXRlRmlsZW5hbWUiLCJmaWxlRXh0ZW5zaW9ucyIsImlzVmFsaWRFeHRlbnNpb24iLCJleHRlbnNpb24iLCJzb21lIiwiZXh0IiwicmVnZXgiLCJSZWdFeHAiLCJzdWJzdHJpbmciLCJsYXN0SW5kZXhPZiIsImZpbGVEYXRhIiwicGFyc2VkIiwiSlNPTiIsInBhcnNlIiwibWV0YWRhdGEiLCJJTlZBTElEX0pTT04iLCJ0YWdzIiwiT1BFUkFUSU9OX0ZPUkJJRERFTiIsImRpcmVjdG9yeUVycm9yIiwiYm9keSIsIl9oYW5kbGVCdWZmZXJlZFVwbG9hZCIsIl9oYW5kbGVTdHJlYW1VcGxvYWQiLCJjaGVja1Byb2hpYml0ZWRLZXl3b3JkcyIsIklOVkFMSURfS0VZX05BTUUiLCJzZXRUYWdzIiwic2V0TWV0YWRhdGEiLCJzZXREaXJlY3RvcnkiLCJmaWxlU2l6ZSIsImJ5dGVMZW5ndGgiLCJmaWxlT2JqZWN0IiwiYmVmb3JlU2F2ZSIsInNhdmVSZXN1bHQiLCJ1cmwiLCJuYW1lIiwiYnVmZmVyRGF0YSIsIl9zb3VyY2UiLCJmb3JtYXQiLCJidWZmZXIiLCJmaWxlT3B0aW9ucyIsIl9tZXRhZGF0YSIsImZpbGVUYWdzIiwia2V5cyIsIl90YWdzIiwiYXNzaWduIiwiX2RpcmVjdG9yeSIsImNyZWF0ZUZpbGVSZXN1bHQiLCJjcmVhdGVGaWxlIiwiX3VybCIsIl9yZXF1ZXN0VGFzayIsIl9wcmV2aW91c1NhdmUiLCJQcm9taXNlIiwicmVzb2x2ZSIsImFmdGVyU2F2ZSIsImxvZ2dlciIsInN0cmVhbSIsImNvbnRlbnRMZW5ndGgiLCJwYXJzZUludCIsImhhc0V4dGVuc2lvbiIsInNvdXJjZVR5cGUiLCJhZGFwdGVyIiwiZ2V0RmlsZUxvY2F0aW9uIiwiYmVmb3JlRGVsZXRlIiwiZGVsZXRlRmlsZSIsImFmdGVyRGVsZXRlIiwiRklMRV9ERUxFVEVfRVJST1IiLCJnZXRNZXRhZGF0YSIsInJhbmdlIiwic3RhcnQiLCJOdW1iZXIiLCJpc05hTiJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9Sb3V0ZXJzL0ZpbGVzUm91dGVyLmpzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBleHByZXNzIGZyb20gJ2V4cHJlc3MnO1xuaW1wb3J0ICogYXMgTWlkZGxld2FyZXMgZnJvbSAnLi4vbWlkZGxld2FyZXMnO1xuaW1wb3J0IFBhcnNlIGZyb20gJ3BhcnNlL25vZGUnO1xuaW1wb3J0IENvbmZpZyBmcm9tICcuLi9Db25maWcnO1xuaW1wb3J0IGxvZ2dlciBmcm9tICcuLi9sb2dnZXInO1xuY29uc3QgdHJpZ2dlcnMgPSByZXF1aXJlKCcuLi90cmlnZ2VycycpO1xuY29uc3QgVXRpbHMgPSByZXF1aXJlKCcuLi9VdGlscycpO1xuaW1wb3J0IHsgUmVhZGFibGUgfSBmcm9tICdzdHJlYW0nO1xuaW1wb3J0IHsgY3JlYXRlU2FuaXRpemVkSHR0cEVycm9yIH0gZnJvbSAnLi4vRXJyb3InO1xuXG4vKipcbiAqIFdyYXBzIGEgcmVhZGFibGUgc3RyZWFtIGluIGEgUmVhZGFibGUgdGhhdCBlbmZvcmNlcyBhIGJ5dGUgc2l6ZSBsaW1pdC5cbiAqIERhdGEgZmxvdyBpcyBsYXp5OiB0aGUgc291cmNlIGlzIG5vdCByZWFkIHVudGlsIGEgY29uc3VtZXIgc3RhcnRzIHJlYWRpbmdcbiAqIGZyb20gdGhlIHJldHVybmVkIHN0cmVhbSAodmlhIHBpcGUgb3IgJ2RhdGEnIGxpc3RlbmVyKS4gVGhpcyBlbnN1cmVzIHRoZVxuICogY29uc3VtZXIncyBlcnJvciBsaXN0ZW5lciBpcyBhdHRhY2hlZCBiZWZvcmUgYW55IGRhdGEgKG9yIGVycm9yKSBpcyBlbWl0dGVkLlxuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlU2l6ZUxpbWl0ZWRTdHJlYW0oc291cmNlLCBtYXhCeXRlcykge1xuICBsZXQgdG90YWxCeXRlcyA9IDA7XG4gIGxldCBzdGFydGVkID0gZmFsc2U7XG4gIGxldCBzb3VyY2VFbmRlZCA9IGZhbHNlO1xuICBsZXQgb25EYXRhLCBvbkVuZCwgb25FcnJvcjtcblxuICBjb25zdCBvdXRwdXQgPSBuZXcgUmVhZGFibGUoe1xuICAgIHJlYWQoKSB7XG4gICAgICBpZiAoIXN0YXJ0ZWQpIHtcbiAgICAgICAgc3RhcnRlZCA9IHRydWU7XG5cbiAgICAgICAgb25EYXRhID0gKGNodW5rKSA9PiB7XG4gICAgICAgICAgdG90YWxCeXRlcyArPSBjaHVuay5sZW5ndGg7XG4gICAgICAgICAgaWYgKHRvdGFsQnl0ZXMgPiBtYXhCeXRlcykge1xuICAgICAgICAgICAgb3V0cHV0LmRlc3Ryb3koXG4gICAgICAgICAgICAgIG5ldyBQYXJzZS5FcnJvcihcbiAgICAgICAgICAgICAgICBQYXJzZS5FcnJvci5GSUxFX1NBVkVfRVJST1IsXG4gICAgICAgICAgICAgICAgYEZpbGUgc2l6ZSBleGNlZWRzIG1heGltdW0gYWxsb3dlZDogJHttYXhCeXRlc30gYnl0ZXMuYFxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoIW91dHB1dC5wdXNoKGNodW5rKSkge1xuICAgICAgICAgICAgc291cmNlLnBhdXNlKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9O1xuXG4gICAgICAgIG9uRW5kID0gKCkgPT4ge1xuICAgICAgICAgIHNvdXJjZUVuZGVkID0gdHJ1ZTtcbiAgICAgICAgICBvdXRwdXQucHVzaChudWxsKTtcbiAgICAgICAgfTtcblxuICAgICAgICBvbkVycm9yID0gKGVycikgPT4gb3V0cHV0LmRlc3Ryb3koZXJyKTtcblxuICAgICAgICBzb3VyY2Uub24oJ2RhdGEnLCBvbkRhdGEpO1xuICAgICAgICBzb3VyY2Uub24oJ2VuZCcsIG9uRW5kKTtcbiAgICAgICAgc291cmNlLm9uKCdlcnJvcicsIG9uRXJyb3IpO1xuICAgICAgfVxuXG4gICAgICAvLyBSZXN1bWUgc291cmNlIGluIGNhc2UgaXQgd2FzIHBhdXNlZCBkdWUgdG8gYmFja3ByZXNzdXJlXG4gICAgICBpZiAoIXNvdXJjZUVuZGVkKSB7XG4gICAgICAgIHNvdXJjZS5yZXN1bWUoKTtcbiAgICAgIH1cbiAgICB9LFxuICAgIGRlc3Ryb3koZXJyLCBjYWxsYmFjaykge1xuICAgICAgaWYgKG9uRGF0YSkge1xuICAgICAgICBzb3VyY2UucmVtb3ZlTGlzdGVuZXIoJ2RhdGEnLCBvbkRhdGEpO1xuICAgICAgfVxuICAgICAgaWYgKG9uRW5kKSB7XG4gICAgICAgIHNvdXJjZS5yZW1vdmVMaXN0ZW5lcignZW5kJywgb25FbmQpO1xuICAgICAgfVxuICAgICAgaWYgKG9uRXJyb3IpIHtcbiAgICAgICAgc291cmNlLnJlbW92ZUxpc3RlbmVyKCdlcnJvcicsIG9uRXJyb3IpO1xuICAgICAgfVxuICAgICAgLy8gU3VwcHJlc3MgZXJyb3JzIGVtaXR0ZWQgZHVyaW5nIGRyYWluIChlLmcuIGNsaWVudCBkaXNjb25uZWN0KVxuICAgICAgc291cmNlLm9uKCdlcnJvcicsICgpID0+IHt9KTtcbiAgICAgIGlmICghc291cmNlRW5kZWQpIHtcbiAgICAgICAgc291cmNlLnJlc3VtZSgpO1xuICAgICAgfVxuICAgICAgY2FsbGJhY2soZXJyKTtcbiAgICB9XG4gIH0pO1xuXG4gIHJldHVybiBvdXRwdXQ7XG59XG5cbi8vIFNlZ21lbnRzIHRoYXQgY29uZmxpY3Qgd2l0aCBzdWItcm91dGVzIHVuZGVyIEdFVCAvZmlsZXMvOmFwcElkLyouIElmIGEgZmlsZVxuLy8gZGlyZWN0b3J5IHN0YXJ0cyB3aXRoIG9uZSBvZiB0aGVzZSwgaXRzIFVSTCB3b3VsZCBtYXRjaCB0aGUgd3Jvbmcgcm91dGVcbi8vIGhhbmRsZXIuIFVwZGF0ZSB0aGlzIGxpc3Qgd2hlbiBhZGRpbmcgbmV3IHN1Yi1yb3V0ZXMgdG8gZXhwcmVzc1JvdXRlcigpLlxuZXhwb3J0IGNvbnN0IFJFU0VSVkVEX0RJUkVDVE9SWV9TRUdNRU5UUyA9IFsnbWV0YWRhdGEnXTtcblxuZXhwb3J0IGNsYXNzIEZpbGVzUm91dGVyIHtcbiAgZXhwcmVzc1JvdXRlcih7IG1heFVwbG9hZFNpemUgPSAnMjBNYicgfSA9IHt9KSB7XG4gICAgdmFyIHJvdXRlciA9IGV4cHJlc3MuUm91dGVyKCk7XG4gICAgLy8gTWV0YWRhdGEgcm91dGUgbXVzdCBjb21lIGJlZm9yZSB0aGUgY2F0Y2gtYWxsIEdFVCByb3V0ZVxuICAgIHJvdXRlci5nZXQoJy9maWxlcy86YXBwSWQvbWV0YWRhdGEvKmZpbGVwYXRoJywgdGhpcy5tZXRhZGF0YUhhbmRsZXIpO1xuICAgIHJvdXRlci5nZXQoJy9maWxlcy86YXBwSWQvKmZpbGVwYXRoJywgdGhpcy5nZXRIYW5kbGVyKTtcblxuICAgIHJvdXRlci5wb3N0KCcvZmlsZXMnLCBmdW5jdGlvbiAocmVxLCByZXMsIG5leHQpIHtcbiAgICAgIG5leHQobmV3IFBhcnNlLkVycm9yKFBhcnNlLkVycm9yLklOVkFMSURfRklMRV9OQU1FLCAnRmlsZW5hbWUgbm90IHByb3ZpZGVkLicpKTtcbiAgICB9KTtcblxuICAgIHJvdXRlci5wb3N0KFxuICAgICAgJy9maWxlcy86ZmlsZW5hbWUnLFxuICAgICAgdGhpcy5fZWFybHlIZWFkZXJzTWlkZGxld2FyZSgpLFxuICAgICAgdGhpcy5fYm9keVBhcnNpbmdNaWRkbGV3YXJlKG1heFVwbG9hZFNpemUpLFxuICAgICAgTWlkZGxld2FyZXMuaGFuZGxlUGFyc2VIZWFkZXJzLFxuICAgICAgTWlkZGxld2FyZXMuaGFuZGxlUGFyc2VTZXNzaW9uLFxuICAgICAgdGhpcy5jcmVhdGVIYW5kbGVyLmJpbmQodGhpcylcbiAgICApO1xuXG4gICAgcm91dGVyLmRlbGV0ZShcbiAgICAgICcvZmlsZXMvKmZpbGVwYXRoJyxcbiAgICAgIE1pZGRsZXdhcmVzLmhhbmRsZVBhcnNlSGVhZGVycyxcbiAgICAgIE1pZGRsZXdhcmVzLmhhbmRsZVBhcnNlU2Vzc2lvbixcbiAgICAgIE1pZGRsZXdhcmVzLmVuZm9yY2VNYXN0ZXJLZXlBY2Nlc3MsXG4gICAgICB0aGlzLmRlbGV0ZUhhbmRsZXJcbiAgICApO1xuICAgIHJldHVybiByb3V0ZXI7XG4gIH1cblxuICBzdGF0aWMgX2dldEZpbGVuYW1lRnJvbVBhcmFtcyhyZXEpIHtcbiAgICBjb25zdCBwYXJ0cyA9IHJlcS5wYXJhbXMuZmlsZXBhdGg7XG4gICAgcmV0dXJuIEFycmF5LmlzQXJyYXkocGFydHMpID8gcGFydHMuam9pbignLycpIDogcGFydHM7XG4gIH1cblxuICBzdGF0aWMgdmFsaWRhdGVEaXJlY3RvcnkoZGlyZWN0b3J5KSB7XG4gICAgaWYgKHR5cGVvZiBkaXJlY3RvcnkgIT09ICdzdHJpbmcnKSB7XG4gICAgICByZXR1cm4gbmV3IFBhcnNlLkVycm9yKFBhcnNlLkVycm9yLklOVkFMSURfRklMRV9OQU1FLCAnRGlyZWN0b3J5IG11c3QgYmUgYSBzdHJpbmcuJyk7XG4gICAgfVxuICAgIGlmIChkaXJlY3RvcnkubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gbmV3IFBhcnNlLkVycm9yKFBhcnNlLkVycm9yLklOVkFMSURfRklMRV9OQU1FLCAnRGlyZWN0b3J5IG11c3Qgbm90IGJlIGVtcHR5LicpO1xuICAgIH1cbiAgICBpZiAoZGlyZWN0b3J5Lmxlbmd0aCA+IDI1Nikge1xuICAgICAgcmV0dXJuIG5ldyBQYXJzZS5FcnJvcihQYXJzZS5FcnJvci5JTlZBTElEX0ZJTEVfTkFNRSwgJ0RpcmVjdG9yeSBwYXRoIGlzIHRvbyBsb25nLicpO1xuICAgIH1cbiAgICBpZiAoZGlyZWN0b3J5LmluY2x1ZGVzKCcuLicpKSB7XG4gICAgICByZXR1cm4gbmV3IFBhcnNlLkVycm9yKFBhcnNlLkVycm9yLklOVkFMSURfRklMRV9OQU1FLCAnRGlyZWN0b3J5IG11c3Qgbm90IGNvbnRhaW4gXCIuLlwiLicpO1xuICAgIH1cbiAgICBpZiAoZGlyZWN0b3J5LnN0YXJ0c1dpdGgoJy8nKSB8fCBkaXJlY3RvcnkuZW5kc1dpdGgoJy8nKSkge1xuICAgICAgcmV0dXJuIG5ldyBQYXJzZS5FcnJvcihcbiAgICAgICAgUGFyc2UuRXJyb3IuSU5WQUxJRF9GSUxFX05BTUUsXG4gICAgICAgICdEaXJlY3RvcnkgbXVzdCBub3Qgc3RhcnQgb3IgZW5kIHdpdGggXCIvXCIuJ1xuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKGRpcmVjdG9yeS5pbmNsdWRlcygnLy8nKSkge1xuICAgICAgcmV0dXJuIG5ldyBQYXJzZS5FcnJvcihcbiAgICAgICAgUGFyc2UuRXJyb3IuSU5WQUxJRF9GSUxFX05BTUUsXG4gICAgICAgICdEaXJlY3RvcnkgbXVzdCBub3QgY29udGFpbiBjb25zZWN1dGl2ZSBzbGFzaGVzLidcbiAgICAgICk7XG4gICAgfVxuICAgIGNvbnN0IGZpcnN0U2VnbWVudCA9IGRpcmVjdG9yeS5zcGxpdCgnLycpWzBdO1xuICAgIGlmIChSRVNFUlZFRF9ESVJFQ1RPUllfU0VHTUVOVFMuaW5jbHVkZXMoZmlyc3RTZWdtZW50KSkge1xuICAgICAgcmV0dXJuIG5ldyBQYXJzZS5FcnJvcihcbiAgICAgICAgUGFyc2UuRXJyb3IuSU5WQUxJRF9GSUxFX05BTUUsXG4gICAgICAgIGBEaXJlY3RvcnkgbXVzdCBub3Qgc3RhcnQgd2l0aCByZXNlcnZlZCBzZWdtZW50IFwiJHtmaXJzdFNlZ21lbnR9XCIuYFxuICAgICAgKTtcbiAgICB9XG4gICAgY29uc3QgZGlyUmVnZXggPSAvXlthLXpBLVowLTldW2EtekEtWjAtOV9cXC0vXSokLztcbiAgICBpZiAoIWRpclJlZ2V4LnRlc3QoZGlyZWN0b3J5KSkge1xuICAgICAgcmV0dXJuIG5ldyBQYXJzZS5FcnJvcihcbiAgICAgICAgUGFyc2UuRXJyb3IuSU5WQUxJRF9GSUxFX05BTUUsXG4gICAgICAgICdEaXJlY3RvcnkgY29udGFpbnMgaW52YWxpZCBjaGFyYWN0ZXJzLidcbiAgICAgICk7XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgYXN5bmMgZ2V0SGFuZGxlcihyZXEsIHJlcykge1xuICAgIGNvbnN0IGNvbmZpZyA9IENvbmZpZy5nZXQocmVxLnBhcmFtcy5hcHBJZCk7XG4gICAgaWYgKCFjb25maWcpIHtcbiAgICAgIGNvbnN0IGVycm9yID0gY3JlYXRlU2FuaXRpemVkSHR0cEVycm9yKDQwMywgJ0ludmFsaWQgYXBwbGljYXRpb24gSUQuJywgY29uZmlnKTtcbiAgICAgIHJlcy5zdGF0dXMoZXJyb3Iuc3RhdHVzKTtcbiAgICAgIHJlcy5qc29uKHsgZXJyb3I6IGVycm9yLm1lc3NhZ2UgfSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgbGV0IGZpbGVuYW1lID0gRmlsZXNSb3V0ZXIuX2dldEZpbGVuYW1lRnJvbVBhcmFtcyhyZXEpO1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBmaWxlc0NvbnRyb2xsZXIgPSBjb25maWcuZmlsZXNDb250cm9sbGVyO1xuICAgICAgY29uc3QgbWltZSA9IChhd2FpdCBpbXBvcnQoJ21pbWUnKSkuZGVmYXVsdDtcbiAgICAgIGxldCBjb250ZW50VHlwZSA9IG1pbWUuZ2V0VHlwZShmaWxlbmFtZSk7XG4gICAgICBsZXQgZmlsZSA9IG5ldyBQYXJzZS5GaWxlKGZpbGVuYW1lLCB7IGJhc2U2NDogJycgfSwgY29udGVudFR5cGUpO1xuICAgICAgY29uc3QgdHJpZ2dlclJlc3VsdCA9IGF3YWl0IHRyaWdnZXJzLm1heWJlUnVuRmlsZVRyaWdnZXIoXG4gICAgICAgIHRyaWdnZXJzLlR5cGVzLmJlZm9yZUZpbmQsXG4gICAgICAgIHsgZmlsZSB9LFxuICAgICAgICBjb25maWcsXG4gICAgICAgIHJlcS5hdXRoXG4gICAgICApO1xuICAgICAgaWYgKHRyaWdnZXJSZXN1bHQ/LmZpbGU/Ll9uYW1lKSB7XG4gICAgICAgIGZpbGVuYW1lID0gdHJpZ2dlclJlc3VsdD8uZmlsZT8uX25hbWU7XG4gICAgICAgIGNvbnRlbnRUeXBlID0gbWltZS5nZXRUeXBlKGZpbGVuYW1lKTtcbiAgICAgIH1cblxuICAgICAgaWYgKGlzRmlsZVN0cmVhbWFibGUocmVxLCBmaWxlc0NvbnRyb2xsZXIpKSB7XG4gICAgICAgIGZpbGVzQ29udHJvbGxlci5oYW5kbGVGaWxlU3RyZWFtKGNvbmZpZywgZmlsZW5hbWUsIHJlcSwgcmVzLCBjb250ZW50VHlwZSkuY2F0Y2goKCkgPT4ge1xuICAgICAgICAgIHJlcy5zdGF0dXMoNDA0KTtcbiAgICAgICAgICByZXMuc2V0KCdDb250ZW50LVR5cGUnLCAndGV4dC9wbGFpbicpO1xuICAgICAgICAgIHJlcy5lbmQoJ0ZpbGUgbm90IGZvdW5kLicpO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBsZXQgZGF0YSA9IGF3YWl0IGZpbGVzQ29udHJvbGxlci5nZXRGaWxlRGF0YShjb25maWcsIGZpbGVuYW1lKS5jYXRjaCgoKSA9PiB7XG4gICAgICAgIHJlcy5zdGF0dXMoNDA0KTtcbiAgICAgICAgcmVzLnNldCgnQ29udGVudC1UeXBlJywgJ3RleHQvcGxhaW4nKTtcbiAgICAgICAgcmVzLmVuZCgnRmlsZSBub3QgZm91bmQuJyk7XG4gICAgICB9KTtcbiAgICAgIGlmICghZGF0YSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBmaWxlID0gbmV3IFBhcnNlLkZpbGUoZmlsZW5hbWUsIHsgYmFzZTY0OiBkYXRhLnRvU3RyaW5nKCdiYXNlNjQnKSB9LCBjb250ZW50VHlwZSk7XG4gICAgICBjb25zdCBhZnRlckZpbmQgPSBhd2FpdCB0cmlnZ2Vycy5tYXliZVJ1bkZpbGVUcmlnZ2VyKFxuICAgICAgICB0cmlnZ2Vycy5UeXBlcy5hZnRlckZpbmQsXG4gICAgICAgIHsgZmlsZSwgZm9yY2VEb3dubG9hZDogZmFsc2UgfSxcbiAgICAgICAgY29uZmlnLFxuICAgICAgICByZXEuYXV0aFxuICAgICAgKTtcblxuICAgICAgaWYgKGFmdGVyRmluZD8uZmlsZSkge1xuICAgICAgICBjb250ZW50VHlwZSA9IG1pbWUuZ2V0VHlwZShhZnRlckZpbmQuZmlsZS5fbmFtZSk7XG4gICAgICAgIGRhdGEgPSBCdWZmZXIuZnJvbShhZnRlckZpbmQuZmlsZS5fZGF0YSwgJ2Jhc2U2NCcpO1xuICAgICAgfVxuXG4gICAgICByZXMuc3RhdHVzKDIwMCk7XG4gICAgICByZXMuc2V0KCdDb250ZW50LVR5cGUnLCBjb250ZW50VHlwZSk7XG4gICAgICByZXMuc2V0KCdDb250ZW50LUxlbmd0aCcsIGRhdGEubGVuZ3RoKTtcbiAgICAgIGlmIChhZnRlckZpbmQuZm9yY2VEb3dubG9hZCkge1xuICAgICAgICByZXMuc2V0KCdDb250ZW50LURpc3Bvc2l0aW9uJywgYGF0dGFjaG1lbnQ7ZmlsZW5hbWU9JHthZnRlckZpbmQuZmlsZS5fbmFtZX1gKTtcbiAgICAgIH1cbiAgICAgIHJlcy5lbmQoZGF0YSk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgY29uc3QgZXJyID0gdHJpZ2dlcnMucmVzb2x2ZUVycm9yKGUsIHtcbiAgICAgICAgY29kZTogUGFyc2UuRXJyb3IuU0NSSVBUX0ZBSUxFRCxcbiAgICAgICAgbWVzc2FnZTogYENvdWxkIG5vdCBmaW5kIGZpbGU6ICR7ZmlsZW5hbWV9LmAsXG4gICAgICB9KTtcbiAgICAgIHJlcy5zdGF0dXMoNDAzKTtcbiAgICAgIHJlcy5qc29uKHsgY29kZTogZXJyLmNvZGUsIGVycm9yOiBlcnIubWVzc2FnZSB9KTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogTWlkZGxld2FyZSB0aGF0IHJ1bnMgYmVmb3JlIGJvZHkgcGFyc2luZyB0byBoYW5kbGUgaGVhZGVycyB0aGF0IG11c3QgYmVcbiAgICogcmVzb2x2ZWQgYmVmb3JlIHRoZSByZXF1ZXN0IGJvZHkgaXMgY29uc3VtZWQuIEN1cnJlbnRseSBzdXBwb3J0czpcbiAgICpcbiAgICogLSBgWC1QYXJzZS1GaWxlLU1heC1VcGxvYWQtU2l6ZWA6IE92ZXJyaWRlcyB0aGUgc2VydmVyLXdpZGUgYG1heFVwbG9hZFNpemVgXG4gICAqICAgZm9yIHRoaXMgcmVxdWVzdC4gUmVxdWlyZXMgdGhlIG1hc3RlciBrZXkuIFRoZSB2YWx1ZSB1c2VzIHRoZSBzYW1lIGZvcm1hdFxuICAgKiAgIGFzIHRoZSBzZXJ2ZXIgb3B0aW9uIChlLmcuIGAnNTBtYidgLCBgJzFnYidgKS4gU2V0cyBgcmVxLl9tYXhVcGxvYWRTaXplT3ZlcnJpZGVgXG4gICAqICAgKGluIGJ5dGVzKSBmb3IgYF9ib2R5UGFyc2luZ01pZGRsZXdhcmVgIHRvIHVzZS5cbiAgICovXG4gIF9lYXJseUhlYWRlcnNNaWRkbGV3YXJlKCkge1xuICAgIHJldHVybiBhc3luYyAocmVxLCByZXMsIG5leHQpID0+IHtcbiAgICAgIGNvbnN0IG1heFVwbG9hZFNpemVPdmVycmlkZSA9IHJlcS5nZXQoJ1gtUGFyc2UtRmlsZS1NYXgtVXBsb2FkLVNpemUnKTtcbiAgICAgIGlmICghbWF4VXBsb2FkU2l6ZU92ZXJyaWRlKSB7XG4gICAgICAgIHJldHVybiBuZXh0KCk7XG4gICAgICB9XG4gICAgICBjb25zdCBhcHBJZCA9IHJlcS5nZXQoJ1gtUGFyc2UtQXBwbGljYXRpb24tSWQnKTtcbiAgICAgIGNvbnN0IGNvbmZpZyA9IENvbmZpZy5nZXQoYXBwSWQpO1xuICAgICAgaWYgKCFjb25maWcpIHtcbiAgICAgICAgY29uc3QgZXJyb3IgPSBjcmVhdGVTYW5pdGl6ZWRIdHRwRXJyb3IoNDAzLCAnSW52YWxpZCBhcHBsaWNhdGlvbiBJRC4nLCB1bmRlZmluZWQpO1xuICAgICAgICByZXMuc3RhdHVzKGVycm9yLnN0YXR1cyk7XG4gICAgICAgIHJlcy5qc29uKHsgZXJyb3I6IGVycm9yLm1lc3NhZ2UgfSk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGNvbnN0IG1hc3RlcktleSA9IGF3YWl0IGNvbmZpZy5sb2FkTWFzdGVyS2V5KCk7XG4gICAgICBpZiAocmVxLmdldCgnWC1QYXJzZS1NYXN0ZXItS2V5JykgIT09IG1hc3RlcktleSkge1xuICAgICAgICBjb25zdCBlcnJvciA9IGNyZWF0ZVNhbml0aXplZEh0dHBFcnJvcig0MDMsICd1bmF1dGhvcml6ZWQ6IG1hc3RlciBrZXkgaXMgcmVxdWlyZWQnLCBjb25maWcpO1xuICAgICAgICByZXMuc3RhdHVzKGVycm9yLnN0YXR1cyk7XG4gICAgICAgIHJlcy5qc29uKHsgZXJyb3I6IGVycm9yLm1lc3NhZ2UgfSk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGlmIChjb25maWcubWFzdGVyS2V5SXBzPy5sZW5ndGggJiYgIU1pZGRsZXdhcmVzLmNoZWNrSXAocmVxLmlwLCBjb25maWcubWFzdGVyS2V5SXBzLCBjb25maWcubWFzdGVyS2V5SXBzU3RvcmUpKSB7XG4gICAgICAgIGNvbnN0IGVycm9yID0gY3JlYXRlU2FuaXRpemVkSHR0cEVycm9yKDQwMywgJ3VuYXV0aG9yaXplZDogbWFzdGVyIGtleSBpcyByZXF1aXJlZCcsIGNvbmZpZyk7XG4gICAgICAgIHJlcy5zdGF0dXMoZXJyb3Iuc3RhdHVzKTtcbiAgICAgICAgcmVzLmpzb24oeyBlcnJvcjogZXJyb3IubWVzc2FnZSB9KTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgbGV0IHBhcnNlZEJ5dGVzO1xuICAgICAgdHJ5IHtcbiAgICAgICAgcGFyc2VkQnl0ZXMgPSBVdGlscy5wYXJzZVNpemVUb0J5dGVzKG1heFVwbG9hZFNpemVPdmVycmlkZSk7XG4gICAgICB9IGNhdGNoIHtcbiAgICAgICAgcmV0dXJuIG5leHQoXG4gICAgICAgICAgbmV3IFBhcnNlLkVycm9yKFxuICAgICAgICAgICAgUGFyc2UuRXJyb3IuRklMRV9TQVZFX0VSUk9SLFxuICAgICAgICAgICAgYEludmFsaWQgbWF4VXBsb2FkU2l6ZSBvdmVycmlkZSB2YWx1ZTogJHttYXhVcGxvYWRTaXplT3ZlcnJpZGV9YFxuICAgICAgICAgIClcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIHJlcS5fbWF4VXBsb2FkU2l6ZU92ZXJyaWRlID0gcGFyc2VkQnl0ZXM7XG4gICAgICBuZXh0KCk7XG4gICAgfTtcbiAgfVxuXG4gIF9ib2R5UGFyc2luZ01pZGRsZXdhcmUobWF4VXBsb2FkU2l6ZSkge1xuICAgIGNvbnN0IGRlZmF1bHRNYXhCeXRlcyA9IFV0aWxzLnBhcnNlU2l6ZVRvQnl0ZXMobWF4VXBsb2FkU2l6ZSk7XG4gICAgcmV0dXJuIChyZXEsIHJlcywgbmV4dCkgPT4ge1xuICAgICAgaWYgKHJlcS5nZXQoJ1gtUGFyc2UtVXBsb2FkLU1vZGUnKSA9PT0gJ3N0cmVhbScpIHtcbiAgICAgICAgcmVxLl9tYXhVcGxvYWRTaXplQnl0ZXMgPSByZXEuX21heFVwbG9hZFNpemVPdmVycmlkZSA/PyBkZWZhdWx0TWF4Qnl0ZXM7XG4gICAgICAgIHJldHVybiBuZXh0KCk7XG4gICAgICB9XG4gICAgICBjb25zdCBsaW1pdCA9IHJlcS5fbWF4VXBsb2FkU2l6ZU92ZXJyaWRlID8/IG1heFVwbG9hZFNpemU7XG4gICAgICByZXR1cm4gZXhwcmVzcy5yYXcoeyB0eXBlOiAoKSA9PiB0cnVlLCBsaW1pdCB9KShyZXEsIHJlcywgbmV4dCk7XG4gICAgfTtcbiAgfVxuXG4gIGFzeW5jIGNyZWF0ZUhhbmRsZXIocmVxLCByZXMsIG5leHQpIHtcbiAgICBpZiAocmVxLmF1dGguaXNSZWFkT25seSkge1xuICAgICAgY29uc3QgZXJyb3IgPSBjcmVhdGVTYW5pdGl6ZWRIdHRwRXJyb3IoNDAzLCBcInJlYWQtb25seSBtYXN0ZXJLZXkgaXNuJ3QgYWxsb3dlZCB0byBjcmVhdGUgYSBmaWxlLlwiLCByZXEuY29uZmlnKTtcbiAgICAgIHJlcy5zdGF0dXMoZXJyb3Iuc3RhdHVzKTtcbiAgICAgIHJlcy5lbmQoYHtcImVycm9yXCI6XCIke2Vycm9yLm1lc3NhZ2V9XCJ9YCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGNvbmZpZyA9IHJlcS5jb25maWc7XG4gICAgY29uc3QgdXNlciA9IHJlcS5hdXRoLnVzZXI7XG4gICAgY29uc3QgaXNNYXN0ZXIgPSByZXEuYXV0aC5pc01hc3RlcjtcbiAgICBjb25zdCBpc0xpbmtlZCA9IHVzZXIgJiYgUGFyc2UuQW5vbnltb3VzVXRpbHMuaXNMaW5rZWQodXNlcik7XG4gICAgaWYgKCFpc01hc3RlciAmJiAhY29uZmlnLmZpbGVVcGxvYWQuZW5hYmxlRm9yQW5vbnltb3VzVXNlciAmJiBpc0xpbmtlZCkge1xuICAgICAgbmV4dChcbiAgICAgICAgbmV3IFBhcnNlLkVycm9yKFBhcnNlLkVycm9yLkZJTEVfU0FWRV9FUlJPUiwgJ0ZpbGUgdXBsb2FkIGJ5IGFub255bW91cyB1c2VyIGlzIGRpc2FibGVkLicpXG4gICAgICApO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAoIWlzTWFzdGVyICYmICFjb25maWcuZmlsZVVwbG9hZC5lbmFibGVGb3JBdXRoZW50aWNhdGVkVXNlciAmJiAhaXNMaW5rZWQgJiYgdXNlcikge1xuICAgICAgbmV4dChcbiAgICAgICAgbmV3IFBhcnNlLkVycm9yKFxuICAgICAgICAgIFBhcnNlLkVycm9yLkZJTEVfU0FWRV9FUlJPUixcbiAgICAgICAgICAnRmlsZSB1cGxvYWQgYnkgYXV0aGVudGljYXRlZCB1c2VyIGlzIGRpc2FibGVkLidcbiAgICAgICAgKVxuICAgICAgKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKCFpc01hc3RlciAmJiAhY29uZmlnLmZpbGVVcGxvYWQuZW5hYmxlRm9yUHVibGljICYmICF1c2VyKSB7XG4gICAgICBuZXh0KG5ldyBQYXJzZS5FcnJvcihQYXJzZS5FcnJvci5GSUxFX1NBVkVfRVJST1IsICdGaWxlIHVwbG9hZCBieSBwdWJsaWMgaXMgZGlzYWJsZWQuJykpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBmaWxlc0NvbnRyb2xsZXIgPSBjb25maWcuZmlsZXNDb250cm9sbGVyO1xuICAgIGNvbnN0IHsgZmlsZW5hbWUgfSA9IHJlcS5wYXJhbXM7XG4gICAgY29uc3QgY29udGVudFR5cGUgPSByZXEuZ2V0KCdDb250ZW50LXR5cGUnKTtcblxuICAgIGNvbnN0IGVycm9yID0gZmlsZXNDb250cm9sbGVyLnZhbGlkYXRlRmlsZW5hbWUoZmlsZW5hbWUpO1xuICAgIGlmIChlcnJvcikge1xuICAgICAgbmV4dChlcnJvcik7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgZmlsZUV4dGVuc2lvbnMgPSBjb25maWcuZmlsZVVwbG9hZD8uZmlsZUV4dGVuc2lvbnM7XG4gICAgaWYgKCFpc01hc3RlciAmJiBmaWxlRXh0ZW5zaW9ucykge1xuICAgICAgY29uc3QgaXNWYWxpZEV4dGVuc2lvbiA9IGV4dGVuc2lvbiA9PiB7XG4gICAgICAgIHJldHVybiBmaWxlRXh0ZW5zaW9ucy5zb21lKGV4dCA9PiB7XG4gICAgICAgICAgaWYgKGV4dCA9PT0gJyonKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgY29uc3QgcmVnZXggPSBuZXcgUmVnRXhwKGV4dCk7XG4gICAgICAgICAgaWYgKHJlZ2V4LnRlc3QoZXh0ZW5zaW9uKSkge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH07XG4gICAgICBsZXQgZXh0ZW5zaW9uID0gY29udGVudFR5cGU7XG4gICAgICBpZiAoZmlsZW5hbWUgJiYgZmlsZW5hbWUuaW5jbHVkZXMoJy4nKSkge1xuICAgICAgICBleHRlbnNpb24gPSBmaWxlbmFtZS5zdWJzdHJpbmcoZmlsZW5hbWUubGFzdEluZGV4T2YoJy4nKSArIDEpO1xuICAgICAgfSBlbHNlIGlmIChjb250ZW50VHlwZSAmJiBjb250ZW50VHlwZS5pbmNsdWRlcygnLycpKSB7XG4gICAgICAgIGV4dGVuc2lvbiA9IGNvbnRlbnRUeXBlLnNwbGl0KCcvJylbMV07XG4gICAgICB9XG4gICAgICBleHRlbnNpb24gPSBleHRlbnNpb24/LnNwbGl0KCcgJyk/LmpvaW4oJycpO1xuXG4gICAgICBpZiAoZXh0ZW5zaW9uICYmICFpc1ZhbGlkRXh0ZW5zaW9uKGV4dGVuc2lvbikpIHtcbiAgICAgICAgbmV4dChcbiAgICAgICAgICBuZXcgUGFyc2UuRXJyb3IoXG4gICAgICAgICAgICBQYXJzZS5FcnJvci5GSUxFX1NBVkVfRVJST1IsXG4gICAgICAgICAgICBgRmlsZSB1cGxvYWQgb2YgZXh0ZW5zaW9uICR7ZXh0ZW5zaW9ufSBpcyBkaXNhYmxlZC5gXG4gICAgICAgICAgKVxuICAgICAgICApO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gRm9yIHN0cmVhbWluZyB1cGxvYWRzLCByZWFkIGZpbGUgZGF0YSBmcm9tIGhlYWRlcnMgc2luY2UgdGhlIGJvZHkgaXMgdGhlIHJhdyBzdHJlYW1cbiAgICBpZiAocmVxLmdldCgnWC1QYXJzZS1VcGxvYWQtTW9kZScpID09PSAnc3RyZWFtJykge1xuICAgICAgcmVxLmZpbGVEYXRhID0ge307XG4gICAgICBpZiAocmVxLmdldCgnWC1QYXJzZS1GaWxlLURpcmVjdG9yeScpKSB7XG4gICAgICAgIHJlcS5maWxlRGF0YS5kaXJlY3RvcnkgPSByZXEuZ2V0KCdYLVBhcnNlLUZpbGUtRGlyZWN0b3J5Jyk7XG4gICAgICB9XG4gICAgICBpZiAocmVxLmdldCgnWC1QYXJzZS1GaWxlLU1ldGFkYXRhJykpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjb25zdCBwYXJzZWQgPSBKU09OLnBhcnNlKHJlcS5nZXQoJ1gtUGFyc2UtRmlsZS1NZXRhZGF0YScpKTtcbiAgICAgICAgICBpZiAoIXBhcnNlZCB8fCB0eXBlb2YgcGFyc2VkICE9PSAnb2JqZWN0JyB8fCBBcnJheS5pc0FycmF5KHBhcnNlZCkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcigpO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXEuZmlsZURhdGEubWV0YWRhdGEgPSBwYXJzZWQ7XG4gICAgICAgIH0gY2F0Y2gge1xuICAgICAgICAgIG5leHQobmV3IFBhcnNlLkVycm9yKFBhcnNlLkVycm9yLklOVkFMSURfSlNPTiwgJ0ludmFsaWQgSlNPTiBpbiBYLVBhcnNlLUZpbGUtTWV0YWRhdGEgaGVhZGVyLicpKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChyZXEuZ2V0KCdYLVBhcnNlLUZpbGUtVGFncycpKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY29uc3QgcGFyc2VkID0gSlNPTi5wYXJzZShyZXEuZ2V0KCdYLVBhcnNlLUZpbGUtVGFncycpKTtcbiAgICAgICAgICBpZiAoIXBhcnNlZCB8fCB0eXBlb2YgcGFyc2VkICE9PSAnb2JqZWN0JyB8fCBBcnJheS5pc0FycmF5KHBhcnNlZCkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcigpO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXEuZmlsZURhdGEudGFncyA9IHBhcnNlZDtcbiAgICAgICAgfSBjYXRjaCB7XG4gICAgICAgICAgbmV4dChuZXcgUGFyc2UuRXJyb3IoUGFyc2UuRXJyb3IuSU5WQUxJRF9KU09OLCAnSW52YWxpZCBKU09OIGluIFgtUGFyc2UtRmlsZS1UYWdzIGhlYWRlci4nKSk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gVmFsaWRhdGUgZGlyZWN0b3J5IG9wdGlvbiAocmVxdWlyZXMgbWFzdGVyIGtleSlcbiAgICBjb25zdCBkaXJlY3RvcnkgPSByZXEuZmlsZURhdGE/LmRpcmVjdG9yeTtcbiAgICBpZiAoZGlyZWN0b3J5ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGlmICghaXNNYXN0ZXIpIHtcbiAgICAgICAgbmV4dChcbiAgICAgICAgICBuZXcgUGFyc2UuRXJyb3IoXG4gICAgICAgICAgICBQYXJzZS5FcnJvci5PUEVSQVRJT05fRk9SQklEREVOLFxuICAgICAgICAgICAgJ0RpcmVjdG9yeSBjYW4gb25seSBiZSBzZXQgdXNpbmcgdGhlIE1hc3RlciBLZXkuJ1xuICAgICAgICAgIClcbiAgICAgICAgKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgY29uc3QgZGlyZWN0b3J5RXJyb3IgPSBGaWxlc1JvdXRlci52YWxpZGF0ZURpcmVjdG9yeShkaXJlY3RvcnkpO1xuICAgICAgaWYgKGRpcmVjdG9yeUVycm9yKSB7XG4gICAgICAgIG5leHQoZGlyZWN0b3J5RXJyb3IpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gRGlzcGF0Y2ggdG8gdGhlIGFwcHJvcHJpYXRlIGhhbmRsZXIgYmFzZWQgb24gd2hldGhlciB0aGUgYm9keSB3YXMgYnVmZmVyZWRcbiAgICBpZiAocmVxLmJvZHkgaW5zdGFuY2VvZiBCdWZmZXIpIHtcbiAgICAgIHJldHVybiB0aGlzLl9oYW5kbGVCdWZmZXJlZFVwbG9hZChyZXEsIHJlcywgbmV4dCk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLl9oYW5kbGVTdHJlYW1VcGxvYWQocmVxLCByZXMsIG5leHQpO1xuICB9XG5cbiAgYXN5bmMgX2hhbmRsZUJ1ZmZlcmVkVXBsb2FkKHJlcSwgcmVzLCBuZXh0KSB7XG4gICAgY29uc3QgY29uZmlnID0gcmVxLmNvbmZpZztcbiAgICBjb25zdCBmaWxlc0NvbnRyb2xsZXIgPSBjb25maWcuZmlsZXNDb250cm9sbGVyO1xuICAgIGNvbnN0IHsgZmlsZW5hbWUgfSA9IHJlcS5wYXJhbXM7XG4gICAgY29uc3QgY29udGVudFR5cGUgPSByZXEuZ2V0KCdDb250ZW50LXR5cGUnKTtcblxuICAgIGlmICghcmVxLmJvZHkgfHwgIXJlcS5ib2R5Lmxlbmd0aCkge1xuICAgICAgbmV4dChuZXcgUGFyc2UuRXJyb3IoUGFyc2UuRXJyb3IuRklMRV9TQVZFX0VSUk9SLCAnSW52YWxpZCBmaWxlIHVwbG9hZC4nKSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgYmFzZTY0ID0gcmVxLmJvZHkudG9TdHJpbmcoJ2Jhc2U2NCcpO1xuICAgIGNvbnN0IGZpbGUgPSBuZXcgUGFyc2UuRmlsZShmaWxlbmFtZSwgeyBiYXNlNjQgfSwgY29udGVudFR5cGUpO1xuICAgIGNvbnN0IHsgbWV0YWRhdGEgPSB7fSwgdGFncyA9IHt9LCBkaXJlY3RvcnkgfSA9IHJlcS5maWxlRGF0YSB8fCB7fTtcbiAgICB0cnkge1xuICAgICAgLy8gU2NhbiByZXF1ZXN0IGRhdGEgZm9yIGRlbmllZCBrZXl3b3Jkc1xuICAgICAgVXRpbHMuY2hlY2tQcm9oaWJpdGVkS2V5d29yZHMoY29uZmlnLCBtZXRhZGF0YSk7XG4gICAgICBVdGlscy5jaGVja1Byb2hpYml0ZWRLZXl3b3Jkcyhjb25maWcsIHRhZ3MpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBuZXh0KG5ldyBQYXJzZS5FcnJvcihQYXJzZS5FcnJvci5JTlZBTElEX0tFWV9OQU1FLCBlcnJvcikpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBmaWxlLnNldFRhZ3ModGFncyk7XG4gICAgZmlsZS5zZXRNZXRhZGF0YShtZXRhZGF0YSk7XG4gICAgaWYgKGRpcmVjdG9yeSkge1xuICAgICAgZmlsZS5zZXREaXJlY3RvcnkoZGlyZWN0b3J5KTtcbiAgICB9XG4gICAgY29uc3QgZmlsZVNpemUgPSBCdWZmZXIuYnl0ZUxlbmd0aChyZXEuYm9keSk7XG4gICAgY29uc3QgZmlsZU9iamVjdCA9IHsgZmlsZSwgZmlsZVNpemUgfTtcbiAgICB0cnkge1xuICAgICAgLy8gcnVuIGJlZm9yZVNhdmVGaWxlIHRyaWdnZXJcbiAgICAgIGNvbnN0IHRyaWdnZXJSZXN1bHQgPSBhd2FpdCB0cmlnZ2Vycy5tYXliZVJ1bkZpbGVUcmlnZ2VyKFxuICAgICAgICB0cmlnZ2Vycy5UeXBlcy5iZWZvcmVTYXZlLFxuICAgICAgICBmaWxlT2JqZWN0LFxuICAgICAgICBjb25maWcsXG4gICAgICAgIHJlcS5hdXRoXG4gICAgICApO1xuICAgICAgbGV0IHNhdmVSZXN1bHQ7XG4gICAgICAvLyBpZiBhIG5ldyBQYXJzZUZpbGUgaXMgcmV0dXJuZWQgY2hlY2sgaWYgaXQncyBhbiBhbHJlYWR5IHNhdmVkIGZpbGVcbiAgICAgIGlmICh0cmlnZ2VyUmVzdWx0IGluc3RhbmNlb2YgUGFyc2UuRmlsZSkge1xuICAgICAgICBmaWxlT2JqZWN0LmZpbGUgPSB0cmlnZ2VyUmVzdWx0O1xuICAgICAgICBpZiAodHJpZ2dlclJlc3VsdC51cmwoKSkge1xuICAgICAgICAgIC8vIHNldCBmaWxlU2l6ZSB0byBudWxsIGJlY2F1c2Ugd2Ugd29udCBrbm93IGhvdyBiaWcgaXQgaXMgaGVyZVxuICAgICAgICAgIGZpbGVPYmplY3QuZmlsZVNpemUgPSBudWxsO1xuICAgICAgICAgIHNhdmVSZXN1bHQgPSB7XG4gICAgICAgICAgICB1cmw6IHRyaWdnZXJSZXN1bHQudXJsKCksXG4gICAgICAgICAgICBuYW1lOiB0cmlnZ2VyUmVzdWx0Ll9uYW1lLFxuICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIC8vIGlmIHRoZSBmaWxlIHJldHVybmVkIGJ5IHRoZSB0cmlnZ2VyIGhhcyBhbHJlYWR5IGJlZW4gc2F2ZWQgc2tpcCBzYXZpbmcgYW55dGhpbmdcbiAgICAgIGlmICghc2F2ZVJlc3VsdCkge1xuICAgICAgICAvLyB1cGRhdGUgZmlsZVNpemVcbiAgICAgICAgbGV0IGJ1ZmZlckRhdGE7XG4gICAgICAgIGlmIChmaWxlT2JqZWN0LmZpbGUuX3NvdXJjZT8uZm9ybWF0ID09PSAnYnVmZmVyJykge1xuICAgICAgICAgIGJ1ZmZlckRhdGEgPSBmaWxlT2JqZWN0LmZpbGUuX3NvdXJjZS5idWZmZXI7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgYnVmZmVyRGF0YSA9IEJ1ZmZlci5mcm9tKGZpbGVPYmplY3QuZmlsZS5fZGF0YSwgJ2Jhc2U2NCcpO1xuICAgICAgICB9XG4gICAgICAgIGZpbGVPYmplY3QuZmlsZVNpemUgPSBCdWZmZXIuYnl0ZUxlbmd0aChidWZmZXJEYXRhKTtcbiAgICAgICAgLy8gcHJlcGFyZSBmaWxlIG9wdGlvbnNcbiAgICAgICAgY29uc3QgZmlsZU9wdGlvbnMgPSB7XG4gICAgICAgICAgbWV0YWRhdGE6IGZpbGVPYmplY3QuZmlsZS5fbWV0YWRhdGEsXG4gICAgICAgIH07XG4gICAgICAgIC8vIHNvbWUgczMtY29tcGF0aWJsZSBwcm92aWRlcnMgKERpZ2l0YWxPY2VhbiwgTGlub2RlKSBkbyBub3QgYWNjZXB0IHRhZ3NcbiAgICAgICAgLy8gc28gd2UgZG8gbm90IGluY2x1ZGUgdGhlIHRhZ3Mgb3B0aW9uIGlmIGl0IGlzIGVtcHR5LlxuICAgICAgICBjb25zdCBmaWxlVGFncyA9XG4gICAgICAgICAgT2JqZWN0LmtleXMoZmlsZU9iamVjdC5maWxlLl90YWdzKS5sZW5ndGggPiAwID8geyB0YWdzOiBmaWxlT2JqZWN0LmZpbGUuX3RhZ3MgfSA6IHt9O1xuICAgICAgICBPYmplY3QuYXNzaWduKGZpbGVPcHRpb25zLCBmaWxlVGFncyk7XG4gICAgICAgIC8vIGluY2x1ZGUgZGlyZWN0b3J5IGlmIHNldCAoZnJvbSBjbGllbnQgcmVxdWVzdCBvciBiZWZvcmVTYXZlRmlsZSB0cmlnZ2VyKVxuICAgICAgICBpZiAoZmlsZU9iamVjdC5maWxlLl9kaXJlY3RvcnkpIHtcbiAgICAgICAgICBmaWxlT3B0aW9ucy5kaXJlY3RvcnkgPSBmaWxlT2JqZWN0LmZpbGUuX2RpcmVjdG9yeTtcbiAgICAgICAgfVxuICAgICAgICAvLyBzYXZlIGZpbGVcbiAgICAgICAgY29uc3QgY3JlYXRlRmlsZVJlc3VsdCA9IGF3YWl0IGZpbGVzQ29udHJvbGxlci5jcmVhdGVGaWxlKFxuICAgICAgICAgIGNvbmZpZyxcbiAgICAgICAgICBmaWxlT2JqZWN0LmZpbGUuX25hbWUsXG4gICAgICAgICAgYnVmZmVyRGF0YSxcbiAgICAgICAgICBmaWxlT2JqZWN0LmZpbGUuX3NvdXJjZS50eXBlLFxuICAgICAgICAgIGZpbGVPcHRpb25zXG4gICAgICAgICk7XG4gICAgICAgIC8vIHVwZGF0ZSBmaWxlIHdpdGggbmV3IGRhdGFcbiAgICAgICAgZmlsZU9iamVjdC5maWxlLl9uYW1lID0gY3JlYXRlRmlsZVJlc3VsdC5uYW1lO1xuICAgICAgICBmaWxlT2JqZWN0LmZpbGUuX3VybCA9IGNyZWF0ZUZpbGVSZXN1bHQudXJsO1xuICAgICAgICBmaWxlT2JqZWN0LmZpbGUuX3JlcXVlc3RUYXNrID0gbnVsbDtcbiAgICAgICAgZmlsZU9iamVjdC5maWxlLl9wcmV2aW91c1NhdmUgPSBQcm9taXNlLnJlc29sdmUoZmlsZU9iamVjdC5maWxlKTtcbiAgICAgICAgc2F2ZVJlc3VsdCA9IHtcbiAgICAgICAgICB1cmw6IGNyZWF0ZUZpbGVSZXN1bHQudXJsLFxuICAgICAgICAgIG5hbWU6IGNyZWF0ZUZpbGVSZXN1bHQubmFtZSxcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICAgIC8vIHJ1biBhZnRlclNhdmVGaWxlIHRyaWdnZXJcbiAgICAgIGF3YWl0IHRyaWdnZXJzLm1heWJlUnVuRmlsZVRyaWdnZXIodHJpZ2dlcnMuVHlwZXMuYWZ0ZXJTYXZlLCBmaWxlT2JqZWN0LCBjb25maWcsIHJlcS5hdXRoKTtcbiAgICAgIHJlcy5zdGF0dXMoMjAxKTtcbiAgICAgIHJlcy5zZXQoJ0xvY2F0aW9uJywgc2F2ZVJlc3VsdC51cmwpO1xuICAgICAgcmVzLmpzb24oc2F2ZVJlc3VsdCk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgbG9nZ2VyLmVycm9yKCdFcnJvciBjcmVhdGluZyBhIGZpbGU6ICcsIGUpO1xuICAgICAgY29uc3QgZXJyb3IgPSB0cmlnZ2Vycy5yZXNvbHZlRXJyb3IoZSwge1xuICAgICAgICBjb2RlOiBQYXJzZS5FcnJvci5GSUxFX1NBVkVfRVJST1IsXG4gICAgICAgIG1lc3NhZ2U6IGBDb3VsZCBub3Qgc3RvcmUgZmlsZTogJHtmaWxlT2JqZWN0LmZpbGUuX25hbWV9LmAsXG4gICAgICB9KTtcbiAgICAgIG5leHQoZXJyb3IpO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIF9oYW5kbGVTdHJlYW1VcGxvYWQocmVxLCByZXMsIG5leHQpIHtcbiAgICBjb25zdCBjb25maWcgPSByZXEuY29uZmlnO1xuICAgIGNvbnN0IGZpbGVzQ29udHJvbGxlciA9IGNvbmZpZy5maWxlc0NvbnRyb2xsZXI7XG4gICAgY29uc3QgeyBmaWxlbmFtZSB9ID0gcmVxLnBhcmFtcztcbiAgICBsZXQgY29udGVudFR5cGUgPSByZXEuZ2V0KCdDb250ZW50LVR5cGUnKTtcbiAgICBjb25zdCBtYXhCeXRlcyA9IHJlcS5fbWF4VXBsb2FkU2l6ZUJ5dGVzO1xuICAgIGxldCBzdHJlYW07XG5cbiAgICB0cnkge1xuICAgICAgLy8gRWFybHkgcmVqZWN0aW9uIHZpYSBDb250ZW50LUxlbmd0aCBoZWFkZXJcbiAgICAgIGNvbnN0IGNvbnRlbnRMZW5ndGggPSByZXEuZ2V0KCdDb250ZW50LUxlbmd0aCcpO1xuICAgICAgaWYgKGNvbnRlbnRMZW5ndGggJiYgcGFyc2VJbnQoY29udGVudExlbmd0aCwgMTApID4gbWF4Qnl0ZXMpIHtcbiAgICAgICAgcmVxLnJlc3VtZSgpO1xuICAgICAgICBuZXh0KG5ldyBQYXJzZS5FcnJvcihcbiAgICAgICAgICBQYXJzZS5FcnJvci5GSUxFX1NBVkVfRVJST1IsXG4gICAgICAgICAgYEZpbGUgc2l6ZSBleGNlZWRzIG1heGltdW0gYWxsb3dlZDogJHttYXhCeXRlc30gYnl0ZXMuYFxuICAgICAgICApKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBtaW1lID0gKGF3YWl0IGltcG9ydCgnbWltZScpKS5kZWZhdWx0O1xuXG4gICAgICAvLyBJbmZlciBjb250ZW50IHR5cGUgZnJvbSBleHRlbnNpb24gb3IgYWRkIGV4dGVuc2lvbiBmcm9tIGNvbnRlbnQgdHlwZVxuICAgICAgY29uc3QgaGFzRXh0ZW5zaW9uID0gZmlsZW5hbWUgJiYgZmlsZW5hbWUuaW5jbHVkZXMoJy4nKTtcbiAgICAgIGlmIChoYXNFeHRlbnNpb24gJiYgIWNvbnRlbnRUeXBlKSB7XG4gICAgICAgIGNvbnRlbnRUeXBlID0gbWltZS5nZXRUeXBlKGZpbGVuYW1lKTtcbiAgICAgIH0gZWxzZSBpZiAoIWhhc0V4dGVuc2lvbiAmJiBjb250ZW50VHlwZSkge1xuICAgICAgICAvLyBleHRlbnNpb24gd2lsbCBiZSBhZGRlZCBieSBmaWxlc0NvbnRyb2xsZXIuY3JlYXRlRmlsZVxuICAgICAgfVxuXG4gICAgICAvLyBDcmVhdGUgc2l6ZS1saW1pdGVkIHN0cmVhbSB3cmFwcGluZyB0aGUgcmVxdWVzdFxuICAgICAgc3RyZWFtID0gY3JlYXRlU2l6ZUxpbWl0ZWRTdHJlYW0ocmVxLCBtYXhCeXRlcyk7XG5cbiAgICAgIC8vIEJ1aWxkIGEgUGFyc2UuRmlsZSB3aXRoIG5vIF9kYXRhIChzdHJlYW1pbmcgbW9kZSlcbiAgICAgIGNvbnN0IGZpbGUgPSBuZXcgUGFyc2UuRmlsZShmaWxlbmFtZSwgeyBiYXNlNjQ6ICcnIH0sIGNvbnRlbnRUeXBlKTtcbiAgICAgIGNvbnN0IHsgbWV0YWRhdGEgPSB7fSwgdGFncyA9IHt9LCBkaXJlY3RvcnkgfSA9IHJlcS5maWxlRGF0YSB8fCB7fTtcblxuICAgICAgLy8gVmFsaWRhdGUgbWV0YWRhdGEgYW5kIHRhZ3MgZm9yIHByb2hpYml0ZWQga2V5d29yZHNcbiAgICAgIHRyeSB7XG4gICAgICAgIFV0aWxzLmNoZWNrUHJvaGliaXRlZEtleXdvcmRzKGNvbmZpZywgbWV0YWRhdGEpO1xuICAgICAgICBVdGlscy5jaGVja1Byb2hpYml0ZWRLZXl3b3Jkcyhjb25maWcsIHRhZ3MpO1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgc3RyZWFtLmRlc3Ryb3koKTtcbiAgICAgICAgbmV4dChuZXcgUGFyc2UuRXJyb3IoUGFyc2UuRXJyb3IuSU5WQUxJRF9LRVlfTkFNRSwgZXJyb3IpKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBmaWxlLnNldFRhZ3ModGFncyk7XG4gICAgICBmaWxlLnNldE1ldGFkYXRhKG1ldGFkYXRhKTtcbiAgICAgIGlmIChkaXJlY3RvcnkpIHtcbiAgICAgICAgZmlsZS5zZXREaXJlY3RvcnkoZGlyZWN0b3J5KTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgZmlsZVNpemUgPSByZXEuZ2V0KCdDb250ZW50LUxlbmd0aCcpXG4gICAgICAgID8gcGFyc2VJbnQocmVxLmdldCgnQ29udGVudC1MZW5ndGgnKSwgMTApXG4gICAgICAgIDogbnVsbDtcbiAgICAgIGNvbnN0IGZpbGVPYmplY3QgPSB7IGZpbGUsIGZpbGVTaXplLCBzdHJlYW06IHRydWUgfTtcblxuICAgICAgLy8gUnVuIGJlZm9yZVNhdmVGaWxlIHRyaWdnZXJcbiAgICAgIGNvbnN0IHRyaWdnZXJSZXN1bHQgPSBhd2FpdCB0cmlnZ2Vycy5tYXliZVJ1bkZpbGVUcmlnZ2VyKFxuICAgICAgICB0cmlnZ2Vycy5UeXBlcy5iZWZvcmVTYXZlLFxuICAgICAgICBmaWxlT2JqZWN0LFxuICAgICAgICBjb25maWcsXG4gICAgICAgIHJlcS5hdXRoXG4gICAgICApO1xuXG4gICAgICBsZXQgc2F2ZVJlc3VsdDtcbiAgICAgIC8vIElmIGEgbmV3IFBhcnNlRmlsZSBpcyByZXR1cm5lZCwgY2hlY2sgaWYgaXQncyBhbiBhbHJlYWR5IHNhdmVkIGZpbGVcbiAgICAgIGlmICh0cmlnZ2VyUmVzdWx0IGluc3RhbmNlb2YgUGFyc2UuRmlsZSkge1xuICAgICAgICBmaWxlT2JqZWN0LmZpbGUgPSB0cmlnZ2VyUmVzdWx0O1xuICAgICAgICBpZiAodHJpZ2dlclJlc3VsdC51cmwoKSkge1xuICAgICAgICAgIGZpbGVPYmplY3QuZmlsZVNpemUgPSBudWxsO1xuICAgICAgICAgIHNhdmVSZXN1bHQgPSB7XG4gICAgICAgICAgICB1cmw6IHRyaWdnZXJSZXN1bHQudXJsKCksXG4gICAgICAgICAgICBuYW1lOiB0cmlnZ2VyUmVzdWx0Ll9uYW1lLFxuICAgICAgICAgIH07XG4gICAgICAgICAgLy8gRGVzdHJveSBzdHJlYW0gdG8gcmVtb3ZlIGxpc3RlbmVycyBhbmQgZHJhaW4gcmVxdWVzdFxuICAgICAgICAgIHN0cmVhbS5kZXN0cm95KCk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gSWYgdGhlIGZpbGUgcmV0dXJuZWQgYnkgdGhlIHRyaWdnZXIgaGFzIGFscmVhZHkgYmVlbiBzYXZlZCwgc2tpcCBzYXZpbmdcbiAgICAgIGlmICghc2F2ZVJlc3VsdCkge1xuICAgICAgICAvLyBQcmVwYXJlIGZpbGUgb3B0aW9uc1xuICAgICAgICBjb25zdCBmaWxlT3B0aW9ucyA9IHtcbiAgICAgICAgICBtZXRhZGF0YTogZmlsZU9iamVjdC5maWxlLl9tZXRhZGF0YSxcbiAgICAgICAgfTtcbiAgICAgICAgY29uc3QgZmlsZVRhZ3MgPVxuICAgICAgICAgIE9iamVjdC5rZXlzKGZpbGVPYmplY3QuZmlsZS5fdGFncykubGVuZ3RoID4gMCA/IHsgdGFnczogZmlsZU9iamVjdC5maWxlLl90YWdzIH0gOiB7fTtcbiAgICAgICAgT2JqZWN0LmFzc2lnbihmaWxlT3B0aW9ucywgZmlsZVRhZ3MpO1xuICAgICAgICAvLyBpbmNsdWRlIGRpcmVjdG9yeSBpZiBzZXQgKGZyb20gY2xpZW50IHJlcXVlc3Qgb3IgYmVmb3JlU2F2ZUZpbGUgdHJpZ2dlcilcbiAgICAgICAgaWYgKGZpbGVPYmplY3QuZmlsZS5fZGlyZWN0b3J5KSB7XG4gICAgICAgICAgZmlsZU9wdGlvbnMuZGlyZWN0b3J5ID0gZmlsZU9iamVjdC5maWxlLl9kaXJlY3Rvcnk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBQYXNzIHN0cmVhbSBkaXJlY3RseSB0byBmaWxlc0NvbnRyb2xsZXIg4oCUIGl0IHdpbGwgYnVmZmVyIGlmIGFkYXB0ZXIgZG9lc24ndCBzdXBwb3J0IHN0cmVhbWluZ1xuICAgICAgICBjb25zdCBzb3VyY2VUeXBlID0gZmlsZU9iamVjdC5maWxlLl9zb3VyY2U/LnR5cGUgfHwgY29udGVudFR5cGU7XG4gICAgICAgIGNvbnN0IGNyZWF0ZUZpbGVSZXN1bHQgPSBhd2FpdCBmaWxlc0NvbnRyb2xsZXIuY3JlYXRlRmlsZShcbiAgICAgICAgICBjb25maWcsXG4gICAgICAgICAgZmlsZU9iamVjdC5maWxlLl9uYW1lLFxuICAgICAgICAgIHN0cmVhbSxcbiAgICAgICAgICBzb3VyY2VUeXBlLFxuICAgICAgICAgIGZpbGVPcHRpb25zXG4gICAgICAgICk7XG5cbiAgICAgICAgLy8gVXBkYXRlIGZpbGUgd2l0aCBuZXcgZGF0YVxuICAgICAgICBmaWxlT2JqZWN0LmZpbGUuX25hbWUgPSBjcmVhdGVGaWxlUmVzdWx0Lm5hbWU7XG4gICAgICAgIGZpbGVPYmplY3QuZmlsZS5fdXJsID0gY3JlYXRlRmlsZVJlc3VsdC51cmw7XG4gICAgICAgIGZpbGVPYmplY3QuZmlsZS5fcmVxdWVzdFRhc2sgPSBudWxsO1xuICAgICAgICBmaWxlT2JqZWN0LmZpbGUuX3ByZXZpb3VzU2F2ZSA9IFByb21pc2UucmVzb2x2ZShmaWxlT2JqZWN0LmZpbGUpO1xuICAgICAgICBzYXZlUmVzdWx0ID0ge1xuICAgICAgICAgIHVybDogY3JlYXRlRmlsZVJlc3VsdC51cmwsXG4gICAgICAgICAgbmFtZTogY3JlYXRlRmlsZVJlc3VsdC5uYW1lLFxuICAgICAgICB9O1xuICAgICAgfVxuXG4gICAgICAvLyBSdW4gYWZ0ZXJTYXZlRmlsZSB0cmlnZ2VyXG4gICAgICBhd2FpdCB0cmlnZ2Vycy5tYXliZVJ1bkZpbGVUcmlnZ2VyKHRyaWdnZXJzLlR5cGVzLmFmdGVyU2F2ZSwgZmlsZU9iamVjdCwgY29uZmlnLCByZXEuYXV0aCk7XG4gICAgICByZXMuc3RhdHVzKDIwMSk7XG4gICAgICByZXMuc2V0KCdMb2NhdGlvbicsIHNhdmVSZXN1bHQudXJsKTtcbiAgICAgIHJlcy5qc29uKHNhdmVSZXN1bHQpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIC8vIERlc3Ryb3kgc3RyZWFtIHRvIHJlbW92ZSBsaXN0ZW5lcnMgYW5kIGRyYWluIHJlcXVlc3QsIG9yIHJlc3VtZSBkaXJlY3RseVxuICAgICAgaWYgKHN0cmVhbSkge1xuICAgICAgICBzdHJlYW0uZGVzdHJveSgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmVxLnJlc3VtZSgpO1xuICAgICAgfVxuICAgICAgbG9nZ2VyLmVycm9yKCdFcnJvciBjcmVhdGluZyBhIGZpbGU6ICcsIGUpO1xuICAgICAgY29uc3QgZXJyb3IgPSB0cmlnZ2Vycy5yZXNvbHZlRXJyb3IoZSwge1xuICAgICAgICBjb2RlOiBQYXJzZS5FcnJvci5GSUxFX1NBVkVfRVJST1IsXG4gICAgICAgIG1lc3NhZ2U6IGBDb3VsZCBub3Qgc3RvcmUgZmlsZTogJHtmaWxlbmFtZX0uYCxcbiAgICAgIH0pO1xuICAgICAgbmV4dChlcnJvcik7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgZGVsZXRlSGFuZGxlcihyZXEsIHJlcywgbmV4dCkge1xuICAgIGlmIChyZXEuYXV0aC5pc1JlYWRPbmx5KSB7XG4gICAgICBjb25zdCBlcnJvciA9IGNyZWF0ZVNhbml0aXplZEh0dHBFcnJvcig0MDMsIFwicmVhZC1vbmx5IG1hc3RlcktleSBpc24ndCBhbGxvd2VkIHRvIGRlbGV0ZSBhIGZpbGUuXCIsIHJlcS5jb25maWcpO1xuICAgICAgcmVzLnN0YXR1cyhlcnJvci5zdGF0dXMpO1xuICAgICAgcmVzLmVuZChge1wiZXJyb3JcIjpcIiR7ZXJyb3IubWVzc2FnZX1cIn1gKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHsgZmlsZXNDb250cm9sbGVyIH0gPSByZXEuY29uZmlnO1xuICAgICAgY29uc3QgZmlsZW5hbWUgPSBGaWxlc1JvdXRlci5fZ2V0RmlsZW5hbWVGcm9tUGFyYW1zKHJlcSk7XG4gICAgICAvLyBydW4gYmVmb3JlRGVsZXRlRmlsZSB0cmlnZ2VyXG4gICAgICBjb25zdCBmaWxlID0gbmV3IFBhcnNlLkZpbGUoZmlsZW5hbWUpO1xuICAgICAgZmlsZS5fdXJsID0gYXdhaXQgZmlsZXNDb250cm9sbGVyLmFkYXB0ZXIuZ2V0RmlsZUxvY2F0aW9uKHJlcS5jb25maWcsIGZpbGVuYW1lKTtcbiAgICAgIGNvbnN0IGZpbGVPYmplY3QgPSB7IGZpbGUsIGZpbGVTaXplOiBudWxsIH07XG4gICAgICBhd2FpdCB0cmlnZ2Vycy5tYXliZVJ1bkZpbGVUcmlnZ2VyKFxuICAgICAgICB0cmlnZ2Vycy5UeXBlcy5iZWZvcmVEZWxldGUsXG4gICAgICAgIGZpbGVPYmplY3QsXG4gICAgICAgIHJlcS5jb25maWcsXG4gICAgICAgIHJlcS5hdXRoXG4gICAgICApO1xuICAgICAgLy8gZGVsZXRlIGZpbGVcbiAgICAgIGF3YWl0IGZpbGVzQ29udHJvbGxlci5kZWxldGVGaWxlKHJlcS5jb25maWcsIGZpbGVuYW1lKTtcbiAgICAgIC8vIHJ1biBhZnRlckRlbGV0ZUZpbGUgdHJpZ2dlclxuICAgICAgYXdhaXQgdHJpZ2dlcnMubWF5YmVSdW5GaWxlVHJpZ2dlcihcbiAgICAgICAgdHJpZ2dlcnMuVHlwZXMuYWZ0ZXJEZWxldGUsXG4gICAgICAgIGZpbGVPYmplY3QsXG4gICAgICAgIHJlcS5jb25maWcsXG4gICAgICAgIHJlcS5hdXRoXG4gICAgICApO1xuICAgICAgcmVzLnN0YXR1cygyMDApO1xuICAgICAgLy8gVE9ETzogcmV0dXJuIHVzZWZ1bCBKU09OIGhlcmU/XG4gICAgICByZXMuZW5kKCk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgbG9nZ2VyLmVycm9yKCdFcnJvciBkZWxldGluZyBhIGZpbGU6ICcsIGUpO1xuICAgICAgY29uc3QgZXJyb3IgPSB0cmlnZ2Vycy5yZXNvbHZlRXJyb3IoZSwge1xuICAgICAgICBjb2RlOiBQYXJzZS5FcnJvci5GSUxFX0RFTEVURV9FUlJPUixcbiAgICAgICAgbWVzc2FnZTogJ0NvdWxkIG5vdCBkZWxldGUgZmlsZS4nLFxuICAgICAgfSk7XG4gICAgICBuZXh0KGVycm9yKTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBtZXRhZGF0YUhhbmRsZXIocmVxLCByZXMpIHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgY29uZmlnID0gQ29uZmlnLmdldChyZXEucGFyYW1zLmFwcElkKTtcbiAgICAgIGNvbnN0IHsgZmlsZXNDb250cm9sbGVyIH0gPSBjb25maWc7XG4gICAgICBjb25zdCBmaWxlbmFtZSA9IEZpbGVzUm91dGVyLl9nZXRGaWxlbmFtZUZyb21QYXJhbXMocmVxKTtcbiAgICAgIGNvbnN0IGRhdGEgPSBhd2FpdCBmaWxlc0NvbnRyb2xsZXIuZ2V0TWV0YWRhdGEoZmlsZW5hbWUpO1xuICAgICAgcmVzLnN0YXR1cygyMDApO1xuICAgICAgcmVzLmpzb24oZGF0YSk7XG4gICAgfSBjYXRjaCB7XG4gICAgICByZXMuc3RhdHVzKDIwMCk7XG4gICAgICByZXMuanNvbih7fSk7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGlzRmlsZVN0cmVhbWFibGUocmVxLCBmaWxlc0NvbnRyb2xsZXIpIHtcbiAgY29uc3QgcmFuZ2UgPSAocmVxLmdldCgnUmFuZ2UnKSB8fCAnLy0vJykuc3BsaXQoJy0nKTtcbiAgY29uc3Qgc3RhcnQgPSBOdW1iZXIocmFuZ2VbMF0pO1xuICBjb25zdCBlbmQgPSBOdW1iZXIocmFuZ2VbMV0pO1xuICByZXR1cm4gKFxuICAgICghaXNOYU4oc3RhcnQpIHx8ICFpc05hTihlbmQpKSAmJiB0eXBlb2YgZmlsZXNDb250cm9sbGVyLmFkYXB0ZXIuaGFuZGxlRmlsZVN0cmVhbSA9PT0gJ2Z1bmN0aW9uJ1xuICApO1xufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7O0FBQUEsSUFBQUEsUUFBQSxHQUFBQyxzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQUMsV0FBQSxHQUFBQyx1QkFBQSxDQUFBRixPQUFBO0FBQ0EsSUFBQUcsS0FBQSxHQUFBSixzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQUksT0FBQSxHQUFBTCxzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQUssT0FBQSxHQUFBTixzQkFBQSxDQUFBQyxPQUFBO0FBR0EsSUFBQU0sT0FBQSxHQUFBTixPQUFBO0FBQ0EsSUFBQU8sTUFBQSxHQUFBUCxPQUFBO0FBQW9ELFNBQUFFLHdCQUFBTSxDQUFBLEVBQUFDLENBQUEsNkJBQUFDLE9BQUEsTUFBQUMsQ0FBQSxPQUFBRCxPQUFBLElBQUFFLENBQUEsT0FBQUYsT0FBQSxZQUFBUix1QkFBQSxZQUFBQSxDQUFBTSxDQUFBLEVBQUFDLENBQUEsU0FBQUEsQ0FBQSxJQUFBRCxDQUFBLElBQUFBLENBQUEsQ0FBQUssVUFBQSxTQUFBTCxDQUFBLE1BQUFNLENBQUEsRUFBQUMsQ0FBQSxFQUFBQyxDQUFBLEtBQUFDLFNBQUEsUUFBQUMsT0FBQSxFQUFBVixDQUFBLGlCQUFBQSxDQUFBLHVCQUFBQSxDQUFBLHlCQUFBQSxDQUFBLFNBQUFRLENBQUEsTUFBQUYsQ0FBQSxHQUFBTCxDQUFBLEdBQUFHLENBQUEsR0FBQUQsQ0FBQSxRQUFBRyxDQUFBLENBQUFLLEdBQUEsQ0FBQVgsQ0FBQSxVQUFBTSxDQUFBLENBQUFNLEdBQUEsQ0FBQVosQ0FBQSxHQUFBTSxDQUFBLENBQUFPLEdBQUEsQ0FBQWIsQ0FBQSxFQUFBUSxDQUFBLGdCQUFBUCxDQUFBLElBQUFELENBQUEsZ0JBQUFDLENBQUEsT0FBQWEsY0FBQSxDQUFBQyxJQUFBLENBQUFmLENBQUEsRUFBQUMsQ0FBQSxPQUFBTSxDQUFBLElBQUFELENBQUEsR0FBQVUsTUFBQSxDQUFBQyxjQUFBLEtBQUFELE1BQUEsQ0FBQUUsd0JBQUEsQ0FBQWxCLENBQUEsRUFBQUMsQ0FBQSxPQUFBTSxDQUFBLENBQUFLLEdBQUEsSUFBQUwsQ0FBQSxDQUFBTSxHQUFBLElBQUFQLENBQUEsQ0FBQUUsQ0FBQSxFQUFBUCxDQUFBLEVBQUFNLENBQUEsSUFBQUMsQ0FBQSxDQUFBUCxDQUFBLElBQUFELENBQUEsQ0FBQUMsQ0FBQSxXQUFBTyxDQUFBLEtBQUFSLENBQUEsRUFBQUMsQ0FBQTtBQUFBLFNBQUFWLHVCQUFBUyxDQUFBLFdBQUFBLENBQUEsSUFBQUEsQ0FBQSxDQUFBSyxVQUFBLEdBQUFMLENBQUEsS0FBQVUsT0FBQSxFQUFBVixDQUFBO0FBSHBELE1BQU1tQixRQUFRLEdBQUczQixPQUFPLENBQUMsYUFBYSxDQUFDO0FBQ3ZDLE1BQU00QixLQUFLLEdBQUc1QixPQUFPLENBQUMsVUFBVSxDQUFDO0FBSWpDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNPLFNBQVM2Qix1QkFBdUJBLENBQUNDLE1BQU0sRUFBRUMsUUFBUSxFQUFFO0VBQ3hELElBQUlDLFVBQVUsR0FBRyxDQUFDO0VBQ2xCLElBQUlDLE9BQU8sR0FBRyxLQUFLO0VBQ25CLElBQUlDLFdBQVcsR0FBRyxLQUFLO0VBQ3ZCLElBQUlDLE1BQU0sRUFBRUMsS0FBSyxFQUFFQyxPQUFPO0VBRTFCLE1BQU1DLE1BQU0sR0FBRyxJQUFJQyxnQkFBUSxDQUFDO0lBQzFCQyxJQUFJQSxDQUFBLEVBQUc7TUFDTCxJQUFJLENBQUNQLE9BQU8sRUFBRTtRQUNaQSxPQUFPLEdBQUcsSUFBSTtRQUVkRSxNQUFNLEdBQUlNLEtBQUssSUFBSztVQUNsQlQsVUFBVSxJQUFJUyxLQUFLLENBQUNDLE1BQU07VUFDMUIsSUFBSVYsVUFBVSxHQUFHRCxRQUFRLEVBQUU7WUFDekJPLE1BQU0sQ0FBQ0ssT0FBTyxDQUNaLElBQUlDLGFBQUssQ0FBQ0MsS0FBSyxDQUNiRCxhQUFLLENBQUNDLEtBQUssQ0FBQ0MsZUFBZSxFQUMzQixzQ0FBc0NmLFFBQVEsU0FDaEQsQ0FDRixDQUFDO1lBQ0Q7VUFDRjtVQUNBLElBQUksQ0FBQ08sTUFBTSxDQUFDUyxJQUFJLENBQUNOLEtBQUssQ0FBQyxFQUFFO1lBQ3ZCWCxNQUFNLENBQUNrQixLQUFLLENBQUMsQ0FBQztVQUNoQjtRQUNGLENBQUM7UUFFRFosS0FBSyxHQUFHQSxDQUFBLEtBQU07VUFDWkYsV0FBVyxHQUFHLElBQUk7VUFDbEJJLE1BQU0sQ0FBQ1MsSUFBSSxDQUFDLElBQUksQ0FBQztRQUNuQixDQUFDO1FBRURWLE9BQU8sR0FBSVksR0FBRyxJQUFLWCxNQUFNLENBQUNLLE9BQU8sQ0FBQ00sR0FBRyxDQUFDO1FBRXRDbkIsTUFBTSxDQUFDb0IsRUFBRSxDQUFDLE1BQU0sRUFBRWYsTUFBTSxDQUFDO1FBQ3pCTCxNQUFNLENBQUNvQixFQUFFLENBQUMsS0FBSyxFQUFFZCxLQUFLLENBQUM7UUFDdkJOLE1BQU0sQ0FBQ29CLEVBQUUsQ0FBQyxPQUFPLEVBQUViLE9BQU8sQ0FBQztNQUM3Qjs7TUFFQTtNQUNBLElBQUksQ0FBQ0gsV0FBVyxFQUFFO1FBQ2hCSixNQUFNLENBQUNxQixNQUFNLENBQUMsQ0FBQztNQUNqQjtJQUNGLENBQUM7SUFDRFIsT0FBT0EsQ0FBQ00sR0FBRyxFQUFFRyxRQUFRLEVBQUU7TUFDckIsSUFBSWpCLE1BQU0sRUFBRTtRQUNWTCxNQUFNLENBQUN1QixjQUFjLENBQUMsTUFBTSxFQUFFbEIsTUFBTSxDQUFDO01BQ3ZDO01BQ0EsSUFBSUMsS0FBSyxFQUFFO1FBQ1ROLE1BQU0sQ0FBQ3VCLGNBQWMsQ0FBQyxLQUFLLEVBQUVqQixLQUFLLENBQUM7TUFDckM7TUFDQSxJQUFJQyxPQUFPLEVBQUU7UUFDWFAsTUFBTSxDQUFDdUIsY0FBYyxDQUFDLE9BQU8sRUFBRWhCLE9BQU8sQ0FBQztNQUN6QztNQUNBO01BQ0FQLE1BQU0sQ0FBQ29CLEVBQUUsQ0FBQyxPQUFPLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQztNQUM1QixJQUFJLENBQUNoQixXQUFXLEVBQUU7UUFDaEJKLE1BQU0sQ0FBQ3FCLE1BQU0sQ0FBQyxDQUFDO01BQ2pCO01BQ0FDLFFBQVEsQ0FBQ0gsR0FBRyxDQUFDO0lBQ2Y7RUFDRixDQUFDLENBQUM7RUFFRixPQUFPWCxNQUFNO0FBQ2Y7O0FBRUE7QUFDQTtBQUNBO0FBQ08sTUFBTWdCLDJCQUEyQixHQUFBQyxPQUFBLENBQUFELDJCQUFBLEdBQUcsQ0FBQyxVQUFVLENBQUM7QUFFaEQsTUFBTUUsV0FBVyxDQUFDO0VBQ3ZCQyxhQUFhQSxDQUFDO0lBQUVDLGFBQWEsR0FBRztFQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRTtJQUM3QyxJQUFJQyxNQUFNLEdBQUdDLGdCQUFPLENBQUNDLE1BQU0sQ0FBQyxDQUFDO0lBQzdCO0lBQ0FGLE1BQU0sQ0FBQ3ZDLEdBQUcsQ0FBQyxrQ0FBa0MsRUFBRSxJQUFJLENBQUMwQyxlQUFlLENBQUM7SUFDcEVILE1BQU0sQ0FBQ3ZDLEdBQUcsQ0FBQyx5QkFBeUIsRUFBRSxJQUFJLENBQUMyQyxVQUFVLENBQUM7SUFFdERKLE1BQU0sQ0FBQ0ssSUFBSSxDQUFDLFFBQVEsRUFBRSxVQUFVQyxHQUFHLEVBQUVDLEdBQUcsRUFBRUMsSUFBSSxFQUFFO01BQzlDQSxJQUFJLENBQUMsSUFBSXZCLGFBQUssQ0FBQ0MsS0FBSyxDQUFDRCxhQUFLLENBQUNDLEtBQUssQ0FBQ3VCLGlCQUFpQixFQUFFLHdCQUF3QixDQUFDLENBQUM7SUFDaEYsQ0FBQyxDQUFDO0lBRUZULE1BQU0sQ0FBQ0ssSUFBSSxDQUNULGtCQUFrQixFQUNsQixJQUFJLENBQUNLLHVCQUF1QixDQUFDLENBQUMsRUFDOUIsSUFBSSxDQUFDQyxzQkFBc0IsQ0FBQ1osYUFBYSxDQUFDLEVBQzFDekQsV0FBVyxDQUFDc0Usa0JBQWtCLEVBQzlCdEUsV0FBVyxDQUFDdUUsa0JBQWtCLEVBQzlCLElBQUksQ0FBQ0MsYUFBYSxDQUFDQyxJQUFJLENBQUMsSUFBSSxDQUM5QixDQUFDO0lBRURmLE1BQU0sQ0FBQ2dCLE1BQU0sQ0FDWCxrQkFBa0IsRUFDbEIxRSxXQUFXLENBQUNzRSxrQkFBa0IsRUFDOUJ0RSxXQUFXLENBQUN1RSxrQkFBa0IsRUFDOUJ2RSxXQUFXLENBQUMyRSxzQkFBc0IsRUFDbEMsSUFBSSxDQUFDQyxhQUNQLENBQUM7SUFDRCxPQUFPbEIsTUFBTTtFQUNmO0VBRUEsT0FBT21CLHNCQUFzQkEsQ0FBQ2IsR0FBRyxFQUFFO0lBQ2pDLE1BQU1jLEtBQUssR0FBR2QsR0FBRyxDQUFDZSxNQUFNLENBQUNDLFFBQVE7SUFDakMsT0FBT0MsS0FBSyxDQUFDQyxPQUFPLENBQUNKLEtBQUssQ0FBQyxHQUFHQSxLQUFLLENBQUNLLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBR0wsS0FBSztFQUN2RDtFQUVBLE9BQU9NLGlCQUFpQkEsQ0FBQ0MsU0FBUyxFQUFFO0lBQ2xDLElBQUksT0FBT0EsU0FBUyxLQUFLLFFBQVEsRUFBRTtNQUNqQyxPQUFPLElBQUkxQyxhQUFLLENBQUNDLEtBQUssQ0FBQ0QsYUFBSyxDQUFDQyxLQUFLLENBQUN1QixpQkFBaUIsRUFBRSw2QkFBNkIsQ0FBQztJQUN0RjtJQUNBLElBQUlrQixTQUFTLENBQUM1QyxNQUFNLEtBQUssQ0FBQyxFQUFFO01BQzFCLE9BQU8sSUFBSUUsYUFBSyxDQUFDQyxLQUFLLENBQUNELGFBQUssQ0FBQ0MsS0FBSyxDQUFDdUIsaUJBQWlCLEVBQUUsOEJBQThCLENBQUM7SUFDdkY7SUFDQSxJQUFJa0IsU0FBUyxDQUFDNUMsTUFBTSxHQUFHLEdBQUcsRUFBRTtNQUMxQixPQUFPLElBQUlFLGFBQUssQ0FBQ0MsS0FBSyxDQUFDRCxhQUFLLENBQUNDLEtBQUssQ0FBQ3VCLGlCQUFpQixFQUFFLDZCQUE2QixDQUFDO0lBQ3RGO0lBQ0EsSUFBSWtCLFNBQVMsQ0FBQ0MsUUFBUSxDQUFDLElBQUksQ0FBQyxFQUFFO01BQzVCLE9BQU8sSUFBSTNDLGFBQUssQ0FBQ0MsS0FBSyxDQUFDRCxhQUFLLENBQUNDLEtBQUssQ0FBQ3VCLGlCQUFpQixFQUFFLGtDQUFrQyxDQUFDO0lBQzNGO0lBQ0EsSUFBSWtCLFNBQVMsQ0FBQ0UsVUFBVSxDQUFDLEdBQUcsQ0FBQyxJQUFJRixTQUFTLENBQUNHLFFBQVEsQ0FBQyxHQUFHLENBQUMsRUFBRTtNQUN4RCxPQUFPLElBQUk3QyxhQUFLLENBQUNDLEtBQUssQ0FDcEJELGFBQUssQ0FBQ0MsS0FBSyxDQUFDdUIsaUJBQWlCLEVBQzdCLDJDQUNGLENBQUM7SUFDSDtJQUNBLElBQUlrQixTQUFTLENBQUNDLFFBQVEsQ0FBQyxJQUFJLENBQUMsRUFBRTtNQUM1QixPQUFPLElBQUkzQyxhQUFLLENBQUNDLEtBQUssQ0FDcEJELGFBQUssQ0FBQ0MsS0FBSyxDQUFDdUIsaUJBQWlCLEVBQzdCLGlEQUNGLENBQUM7SUFDSDtJQUNBLE1BQU1zQixZQUFZLEdBQUdKLFNBQVMsQ0FBQ0ssS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUM1QyxJQUFJckMsMkJBQTJCLENBQUNpQyxRQUFRLENBQUNHLFlBQVksQ0FBQyxFQUFFO01BQ3RELE9BQU8sSUFBSTlDLGFBQUssQ0FBQ0MsS0FBSyxDQUNwQkQsYUFBSyxDQUFDQyxLQUFLLENBQUN1QixpQkFBaUIsRUFDN0IsbURBQW1Ec0IsWUFBWSxJQUNqRSxDQUFDO0lBQ0g7SUFDQSxNQUFNRSxRQUFRLEdBQUcsK0JBQStCO0lBQ2hELElBQUksQ0FBQ0EsUUFBUSxDQUFDQyxJQUFJLENBQUNQLFNBQVMsQ0FBQyxFQUFFO01BQzdCLE9BQU8sSUFBSTFDLGFBQUssQ0FBQ0MsS0FBSyxDQUNwQkQsYUFBSyxDQUFDQyxLQUFLLENBQUN1QixpQkFBaUIsRUFDN0Isd0NBQ0YsQ0FBQztJQUNIO0lBQ0EsT0FBTyxJQUFJO0VBQ2I7RUFFQSxNQUFNTCxVQUFVQSxDQUFDRSxHQUFHLEVBQUVDLEdBQUcsRUFBRTtJQUN6QixNQUFNNEIsTUFBTSxHQUFHQyxlQUFNLENBQUMzRSxHQUFHLENBQUM2QyxHQUFHLENBQUNlLE1BQU0sQ0FBQ2dCLEtBQUssQ0FBQztJQUMzQyxJQUFJLENBQUNGLE1BQU0sRUFBRTtNQUNYLE1BQU1HLEtBQUssR0FBRyxJQUFBQywrQkFBd0IsRUFBQyxHQUFHLEVBQUUseUJBQXlCLEVBQUVKLE1BQU0sQ0FBQztNQUM5RTVCLEdBQUcsQ0FBQ2lDLE1BQU0sQ0FBQ0YsS0FBSyxDQUFDRSxNQUFNLENBQUM7TUFDeEJqQyxHQUFHLENBQUNrQyxJQUFJLENBQUM7UUFBRUgsS0FBSyxFQUFFQSxLQUFLLENBQUNJO01BQVEsQ0FBQyxDQUFDO01BQ2xDO0lBQ0Y7SUFFQSxJQUFJQyxRQUFRLEdBQUc5QyxXQUFXLENBQUNzQixzQkFBc0IsQ0FBQ2IsR0FBRyxDQUFDO0lBQ3RELElBQUk7TUFDRixNQUFNc0MsZUFBZSxHQUFHVCxNQUFNLENBQUNTLGVBQWU7TUFDOUMsTUFBTUMsSUFBSSxHQUFHLENBQUMsTUFBTSxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUV0RixPQUFPO01BQzNDLElBQUl1RixXQUFXLEdBQUdELElBQUksQ0FBQ0UsT0FBTyxDQUFDSixRQUFRLENBQUM7TUFDeEMsSUFBSUssSUFBSSxHQUFHLElBQUkvRCxhQUFLLENBQUNnRSxJQUFJLENBQUNOLFFBQVEsRUFBRTtRQUFFTyxNQUFNLEVBQUU7TUFBRyxDQUFDLEVBQUVKLFdBQVcsQ0FBQztNQUNoRSxNQUFNSyxhQUFhLEdBQUcsTUFBTW5GLFFBQVEsQ0FBQ29GLG1CQUFtQixDQUN0RHBGLFFBQVEsQ0FBQ3FGLEtBQUssQ0FBQ0MsVUFBVSxFQUN6QjtRQUFFTjtNQUFLLENBQUMsRUFDUmIsTUFBTSxFQUNON0IsR0FBRyxDQUFDaUQsSUFDTixDQUFDO01BQ0QsSUFBSUosYUFBYSxFQUFFSCxJQUFJLEVBQUVRLEtBQUssRUFBRTtRQUM5QmIsUUFBUSxHQUFHUSxhQUFhLEVBQUVILElBQUksRUFBRVEsS0FBSztRQUNyQ1YsV0FBVyxHQUFHRCxJQUFJLENBQUNFLE9BQU8sQ0FBQ0osUUFBUSxDQUFDO01BQ3RDO01BRUEsSUFBSWMsZ0JBQWdCLENBQUNuRCxHQUFHLEVBQUVzQyxlQUFlLENBQUMsRUFBRTtRQUMxQ0EsZUFBZSxDQUFDYyxnQkFBZ0IsQ0FBQ3ZCLE1BQU0sRUFBRVEsUUFBUSxFQUFFckMsR0FBRyxFQUFFQyxHQUFHLEVBQUV1QyxXQUFXLENBQUMsQ0FBQ2EsS0FBSyxDQUFDLE1BQU07VUFDcEZwRCxHQUFHLENBQUNpQyxNQUFNLENBQUMsR0FBRyxDQUFDO1VBQ2ZqQyxHQUFHLENBQUM3QyxHQUFHLENBQUMsY0FBYyxFQUFFLFlBQVksQ0FBQztVQUNyQzZDLEdBQUcsQ0FBQ3FELEdBQUcsQ0FBQyxpQkFBaUIsQ0FBQztRQUM1QixDQUFDLENBQUM7UUFDRjtNQUNGO01BRUEsSUFBSUMsSUFBSSxHQUFHLE1BQU1qQixlQUFlLENBQUNrQixXQUFXLENBQUMzQixNQUFNLEVBQUVRLFFBQVEsQ0FBQyxDQUFDZ0IsS0FBSyxDQUFDLE1BQU07UUFDekVwRCxHQUFHLENBQUNpQyxNQUFNLENBQUMsR0FBRyxDQUFDO1FBQ2ZqQyxHQUFHLENBQUM3QyxHQUFHLENBQUMsY0FBYyxFQUFFLFlBQVksQ0FBQztRQUNyQzZDLEdBQUcsQ0FBQ3FELEdBQUcsQ0FBQyxpQkFBaUIsQ0FBQztNQUM1QixDQUFDLENBQUM7TUFDRixJQUFJLENBQUNDLElBQUksRUFBRTtRQUNUO01BQ0Y7TUFDQWIsSUFBSSxHQUFHLElBQUkvRCxhQUFLLENBQUNnRSxJQUFJLENBQUNOLFFBQVEsRUFBRTtRQUFFTyxNQUFNLEVBQUVXLElBQUksQ0FBQ0UsUUFBUSxDQUFDLFFBQVE7TUFBRSxDQUFDLEVBQUVqQixXQUFXLENBQUM7TUFDakYsTUFBTWtCLFNBQVMsR0FBRyxNQUFNaEcsUUFBUSxDQUFDb0YsbUJBQW1CLENBQ2xEcEYsUUFBUSxDQUFDcUYsS0FBSyxDQUFDVyxTQUFTLEVBQ3hCO1FBQUVoQixJQUFJO1FBQUVpQixhQUFhLEVBQUU7TUFBTSxDQUFDLEVBQzlCOUIsTUFBTSxFQUNON0IsR0FBRyxDQUFDaUQsSUFDTixDQUFDO01BRUQsSUFBSVMsU0FBUyxFQUFFaEIsSUFBSSxFQUFFO1FBQ25CRixXQUFXLEdBQUdELElBQUksQ0FBQ0UsT0FBTyxDQUFDaUIsU0FBUyxDQUFDaEIsSUFBSSxDQUFDUSxLQUFLLENBQUM7UUFDaERLLElBQUksR0FBR0ssTUFBTSxDQUFDQyxJQUFJLENBQUNILFNBQVMsQ0FBQ2hCLElBQUksQ0FBQ29CLEtBQUssRUFBRSxRQUFRLENBQUM7TUFDcEQ7TUFFQTdELEdBQUcsQ0FBQ2lDLE1BQU0sQ0FBQyxHQUFHLENBQUM7TUFDZmpDLEdBQUcsQ0FBQzdDLEdBQUcsQ0FBQyxjQUFjLEVBQUVvRixXQUFXLENBQUM7TUFDcEN2QyxHQUFHLENBQUM3QyxHQUFHLENBQUMsZ0JBQWdCLEVBQUVtRyxJQUFJLENBQUM5RSxNQUFNLENBQUM7TUFDdEMsSUFBSWlGLFNBQVMsQ0FBQ0MsYUFBYSxFQUFFO1FBQzNCMUQsR0FBRyxDQUFDN0MsR0FBRyxDQUFDLHFCQUFxQixFQUFFLHVCQUF1QnNHLFNBQVMsQ0FBQ2hCLElBQUksQ0FBQ1EsS0FBSyxFQUFFLENBQUM7TUFDL0U7TUFDQWpELEdBQUcsQ0FBQ3FELEdBQUcsQ0FBQ0MsSUFBSSxDQUFDO0lBQ2YsQ0FBQyxDQUFDLE9BQU9oSCxDQUFDLEVBQUU7TUFDVixNQUFNeUMsR0FBRyxHQUFHdEIsUUFBUSxDQUFDcUcsWUFBWSxDQUFDeEgsQ0FBQyxFQUFFO1FBQ25DeUgsSUFBSSxFQUFFckYsYUFBSyxDQUFDQyxLQUFLLENBQUNxRixhQUFhO1FBQy9CN0IsT0FBTyxFQUFFLHdCQUF3QkMsUUFBUTtNQUMzQyxDQUFDLENBQUM7TUFDRnBDLEdBQUcsQ0FBQ2lDLE1BQU0sQ0FBQyxHQUFHLENBQUM7TUFDZmpDLEdBQUcsQ0FBQ2tDLElBQUksQ0FBQztRQUFFNkIsSUFBSSxFQUFFaEYsR0FBRyxDQUFDZ0YsSUFBSTtRQUFFaEMsS0FBSyxFQUFFaEQsR0FBRyxDQUFDb0Q7TUFBUSxDQUFDLENBQUM7SUFDbEQ7RUFDRjs7RUFFQTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7RUFDRWhDLHVCQUF1QkEsQ0FBQSxFQUFHO0lBQ3hCLE9BQU8sT0FBT0osR0FBRyxFQUFFQyxHQUFHLEVBQUVDLElBQUksS0FBSztNQUMvQixNQUFNZ0UscUJBQXFCLEdBQUdsRSxHQUFHLENBQUM3QyxHQUFHLENBQUMsOEJBQThCLENBQUM7TUFDckUsSUFBSSxDQUFDK0cscUJBQXFCLEVBQUU7UUFDMUIsT0FBT2hFLElBQUksQ0FBQyxDQUFDO01BQ2Y7TUFDQSxNQUFNNkIsS0FBSyxHQUFHL0IsR0FBRyxDQUFDN0MsR0FBRyxDQUFDLHdCQUF3QixDQUFDO01BQy9DLE1BQU0wRSxNQUFNLEdBQUdDLGVBQU0sQ0FBQzNFLEdBQUcsQ0FBQzRFLEtBQUssQ0FBQztNQUNoQyxJQUFJLENBQUNGLE1BQU0sRUFBRTtRQUNYLE1BQU1HLEtBQUssR0FBRyxJQUFBQywrQkFBd0IsRUFBQyxHQUFHLEVBQUUseUJBQXlCLEVBQUVrQyxTQUFTLENBQUM7UUFDakZsRSxHQUFHLENBQUNpQyxNQUFNLENBQUNGLEtBQUssQ0FBQ0UsTUFBTSxDQUFDO1FBQ3hCakMsR0FBRyxDQUFDa0MsSUFBSSxDQUFDO1VBQUVILEtBQUssRUFBRUEsS0FBSyxDQUFDSTtRQUFRLENBQUMsQ0FBQztRQUNsQztNQUNGO01BQ0EsTUFBTWdDLFNBQVMsR0FBRyxNQUFNdkMsTUFBTSxDQUFDd0MsYUFBYSxDQUFDLENBQUM7TUFDOUMsSUFBSXJFLEdBQUcsQ0FBQzdDLEdBQUcsQ0FBQyxvQkFBb0IsQ0FBQyxLQUFLaUgsU0FBUyxFQUFFO1FBQy9DLE1BQU1wQyxLQUFLLEdBQUcsSUFBQUMsK0JBQXdCLEVBQUMsR0FBRyxFQUFFLHNDQUFzQyxFQUFFSixNQUFNLENBQUM7UUFDM0Y1QixHQUFHLENBQUNpQyxNQUFNLENBQUNGLEtBQUssQ0FBQ0UsTUFBTSxDQUFDO1FBQ3hCakMsR0FBRyxDQUFDa0MsSUFBSSxDQUFDO1VBQUVILEtBQUssRUFBRUEsS0FBSyxDQUFDSTtRQUFRLENBQUMsQ0FBQztRQUNsQztNQUNGO01BQ0EsSUFBSVAsTUFBTSxDQUFDeUMsWUFBWSxFQUFFN0YsTUFBTSxJQUFJLENBQUN6QyxXQUFXLENBQUN1SSxPQUFPLENBQUN2RSxHQUFHLENBQUN3RSxFQUFFLEVBQUUzQyxNQUFNLENBQUN5QyxZQUFZLEVBQUV6QyxNQUFNLENBQUM0QyxpQkFBaUIsQ0FBQyxFQUFFO1FBQzlHLE1BQU16QyxLQUFLLEdBQUcsSUFBQUMsK0JBQXdCLEVBQUMsR0FBRyxFQUFFLHNDQUFzQyxFQUFFSixNQUFNLENBQUM7UUFDM0Y1QixHQUFHLENBQUNpQyxNQUFNLENBQUNGLEtBQUssQ0FBQ0UsTUFBTSxDQUFDO1FBQ3hCakMsR0FBRyxDQUFDa0MsSUFBSSxDQUFDO1VBQUVILEtBQUssRUFBRUEsS0FBSyxDQUFDSTtRQUFRLENBQUMsQ0FBQztRQUNsQztNQUNGO01BQ0EsSUFBSXNDLFdBQVc7TUFDZixJQUFJO1FBQ0ZBLFdBQVcsR0FBRy9HLEtBQUssQ0FBQ2dILGdCQUFnQixDQUFDVCxxQkFBcUIsQ0FBQztNQUM3RCxDQUFDLENBQUMsTUFBTTtRQUNOLE9BQU9oRSxJQUFJLENBQ1QsSUFBSXZCLGFBQUssQ0FBQ0MsS0FBSyxDQUNiRCxhQUFLLENBQUNDLEtBQUssQ0FBQ0MsZUFBZSxFQUMzQix5Q0FBeUNxRixxQkFBcUIsRUFDaEUsQ0FDRixDQUFDO01BQ0g7TUFDQWxFLEdBQUcsQ0FBQzRFLHNCQUFzQixHQUFHRixXQUFXO01BQ3hDeEUsSUFBSSxDQUFDLENBQUM7SUFDUixDQUFDO0VBQ0g7RUFFQUcsc0JBQXNCQSxDQUFDWixhQUFhLEVBQUU7SUFDcEMsTUFBTW9GLGVBQWUsR0FBR2xILEtBQUssQ0FBQ2dILGdCQUFnQixDQUFDbEYsYUFBYSxDQUFDO0lBQzdELE9BQU8sQ0FBQ08sR0FBRyxFQUFFQyxHQUFHLEVBQUVDLElBQUksS0FBSztNQUN6QixJQUFJRixHQUFHLENBQUM3QyxHQUFHLENBQUMscUJBQXFCLENBQUMsS0FBSyxRQUFRLEVBQUU7UUFDL0M2QyxHQUFHLENBQUM4RSxtQkFBbUIsR0FBRzlFLEdBQUcsQ0FBQzRFLHNCQUFzQixJQUFJQyxlQUFlO1FBQ3ZFLE9BQU8zRSxJQUFJLENBQUMsQ0FBQztNQUNmO01BQ0EsTUFBTTZFLEtBQUssR0FBRy9FLEdBQUcsQ0FBQzRFLHNCQUFzQixJQUFJbkYsYUFBYTtNQUN6RCxPQUFPRSxnQkFBTyxDQUFDcUYsR0FBRyxDQUFDO1FBQUVDLElBQUksRUFBRUEsQ0FBQSxLQUFNLElBQUk7UUFBRUY7TUFBTSxDQUFDLENBQUMsQ0FBQy9FLEdBQUcsRUFBRUMsR0FBRyxFQUFFQyxJQUFJLENBQUM7SUFDakUsQ0FBQztFQUNIO0VBRUEsTUFBTU0sYUFBYUEsQ0FBQ1IsR0FBRyxFQUFFQyxHQUFHLEVBQUVDLElBQUksRUFBRTtJQUNsQyxJQUFJRixHQUFHLENBQUNpRCxJQUFJLENBQUNpQyxVQUFVLEVBQUU7TUFDdkIsTUFBTWxELEtBQUssR0FBRyxJQUFBQywrQkFBd0IsRUFBQyxHQUFHLEVBQUUscURBQXFELEVBQUVqQyxHQUFHLENBQUM2QixNQUFNLENBQUM7TUFDOUc1QixHQUFHLENBQUNpQyxNQUFNLENBQUNGLEtBQUssQ0FBQ0UsTUFBTSxDQUFDO01BQ3hCakMsR0FBRyxDQUFDcUQsR0FBRyxDQUFDLGFBQWF0QixLQUFLLENBQUNJLE9BQU8sSUFBSSxDQUFDO01BQ3ZDO0lBQ0Y7SUFDQSxNQUFNUCxNQUFNLEdBQUc3QixHQUFHLENBQUM2QixNQUFNO0lBQ3pCLE1BQU1zRCxJQUFJLEdBQUduRixHQUFHLENBQUNpRCxJQUFJLENBQUNrQyxJQUFJO0lBQzFCLE1BQU1DLFFBQVEsR0FBR3BGLEdBQUcsQ0FBQ2lELElBQUksQ0FBQ21DLFFBQVE7SUFDbEMsTUFBTUMsUUFBUSxHQUFHRixJQUFJLElBQUl4RyxhQUFLLENBQUMyRyxjQUFjLENBQUNELFFBQVEsQ0FBQ0YsSUFBSSxDQUFDO0lBQzVELElBQUksQ0FBQ0MsUUFBUSxJQUFJLENBQUN2RCxNQUFNLENBQUMwRCxVQUFVLENBQUNDLHNCQUFzQixJQUFJSCxRQUFRLEVBQUU7TUFDdEVuRixJQUFJLENBQ0YsSUFBSXZCLGFBQUssQ0FBQ0MsS0FBSyxDQUFDRCxhQUFLLENBQUNDLEtBQUssQ0FBQ0MsZUFBZSxFQUFFLDRDQUE0QyxDQUMzRixDQUFDO01BQ0Q7SUFDRjtJQUNBLElBQUksQ0FBQ3VHLFFBQVEsSUFBSSxDQUFDdkQsTUFBTSxDQUFDMEQsVUFBVSxDQUFDRSwwQkFBMEIsSUFBSSxDQUFDSixRQUFRLElBQUlGLElBQUksRUFBRTtNQUNuRmpGLElBQUksQ0FDRixJQUFJdkIsYUFBSyxDQUFDQyxLQUFLLENBQ2JELGFBQUssQ0FBQ0MsS0FBSyxDQUFDQyxlQUFlLEVBQzNCLGdEQUNGLENBQ0YsQ0FBQztNQUNEO0lBQ0Y7SUFDQSxJQUFJLENBQUN1RyxRQUFRLElBQUksQ0FBQ3ZELE1BQU0sQ0FBQzBELFVBQVUsQ0FBQ0csZUFBZSxJQUFJLENBQUNQLElBQUksRUFBRTtNQUM1RGpGLElBQUksQ0FBQyxJQUFJdkIsYUFBSyxDQUFDQyxLQUFLLENBQUNELGFBQUssQ0FBQ0MsS0FBSyxDQUFDQyxlQUFlLEVBQUUsb0NBQW9DLENBQUMsQ0FBQztNQUN4RjtJQUNGO0lBQ0EsTUFBTXlELGVBQWUsR0FBR1QsTUFBTSxDQUFDUyxlQUFlO0lBQzlDLE1BQU07TUFBRUQ7SUFBUyxDQUFDLEdBQUdyQyxHQUFHLENBQUNlLE1BQU07SUFDL0IsTUFBTXlCLFdBQVcsR0FBR3hDLEdBQUcsQ0FBQzdDLEdBQUcsQ0FBQyxjQUFjLENBQUM7SUFFM0MsTUFBTTZFLEtBQUssR0FBR00sZUFBZSxDQUFDcUQsZ0JBQWdCLENBQUN0RCxRQUFRLENBQUM7SUFDeEQsSUFBSUwsS0FBSyxFQUFFO01BQ1Q5QixJQUFJLENBQUM4QixLQUFLLENBQUM7TUFDWDtJQUNGO0lBRUEsTUFBTTRELGNBQWMsR0FBRy9ELE1BQU0sQ0FBQzBELFVBQVUsRUFBRUssY0FBYztJQUN4RCxJQUFJLENBQUNSLFFBQVEsSUFBSVEsY0FBYyxFQUFFO01BQy9CLE1BQU1DLGdCQUFnQixHQUFHQyxTQUFTLElBQUk7UUFDcEMsT0FBT0YsY0FBYyxDQUFDRyxJQUFJLENBQUNDLEdBQUcsSUFBSTtVQUNoQyxJQUFJQSxHQUFHLEtBQUssR0FBRyxFQUFFO1lBQ2YsT0FBTyxJQUFJO1VBQ2I7VUFDQSxNQUFNQyxLQUFLLEdBQUcsSUFBSUMsTUFBTSxDQUFDRixHQUFHLENBQUM7VUFDN0IsSUFBSUMsS0FBSyxDQUFDckUsSUFBSSxDQUFDa0UsU0FBUyxDQUFDLEVBQUU7WUFDekIsT0FBTyxJQUFJO1VBQ2I7UUFDRixDQUFDLENBQUM7TUFDSixDQUFDO01BQ0QsSUFBSUEsU0FBUyxHQUFHdEQsV0FBVztNQUMzQixJQUFJSCxRQUFRLElBQUlBLFFBQVEsQ0FBQ2YsUUFBUSxDQUFDLEdBQUcsQ0FBQyxFQUFFO1FBQ3RDd0UsU0FBUyxHQUFHekQsUUFBUSxDQUFDOEQsU0FBUyxDQUFDOUQsUUFBUSxDQUFDK0QsV0FBVyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztNQUMvRCxDQUFDLE1BQU0sSUFBSTVELFdBQVcsSUFBSUEsV0FBVyxDQUFDbEIsUUFBUSxDQUFDLEdBQUcsQ0FBQyxFQUFFO1FBQ25Ed0UsU0FBUyxHQUFHdEQsV0FBVyxDQUFDZCxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQ3ZDO01BQ0FvRSxTQUFTLEdBQUdBLFNBQVMsRUFBRXBFLEtBQUssQ0FBQyxHQUFHLENBQUMsRUFBRVAsSUFBSSxDQUFDLEVBQUUsQ0FBQztNQUUzQyxJQUFJMkUsU0FBUyxJQUFJLENBQUNELGdCQUFnQixDQUFDQyxTQUFTLENBQUMsRUFBRTtRQUM3QzVGLElBQUksQ0FDRixJQUFJdkIsYUFBSyxDQUFDQyxLQUFLLENBQ2JELGFBQUssQ0FBQ0MsS0FBSyxDQUFDQyxlQUFlLEVBQzNCLDRCQUE0QmlILFNBQVMsZUFDdkMsQ0FDRixDQUFDO1FBQ0Q7TUFDRjtJQUNGOztJQUVBO0lBQ0EsSUFBSTlGLEdBQUcsQ0FBQzdDLEdBQUcsQ0FBQyxxQkFBcUIsQ0FBQyxLQUFLLFFBQVEsRUFBRTtNQUMvQzZDLEdBQUcsQ0FBQ3FHLFFBQVEsR0FBRyxDQUFDLENBQUM7TUFDakIsSUFBSXJHLEdBQUcsQ0FBQzdDLEdBQUcsQ0FBQyx3QkFBd0IsQ0FBQyxFQUFFO1FBQ3JDNkMsR0FBRyxDQUFDcUcsUUFBUSxDQUFDaEYsU0FBUyxHQUFHckIsR0FBRyxDQUFDN0MsR0FBRyxDQUFDLHdCQUF3QixDQUFDO01BQzVEO01BQ0EsSUFBSTZDLEdBQUcsQ0FBQzdDLEdBQUcsQ0FBQyx1QkFBdUIsQ0FBQyxFQUFFO1FBQ3BDLElBQUk7VUFDRixNQUFNbUosTUFBTSxHQUFHQyxJQUFJLENBQUNDLEtBQUssQ0FBQ3hHLEdBQUcsQ0FBQzdDLEdBQUcsQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDO1VBQzNELElBQUksQ0FBQ21KLE1BQU0sSUFBSSxPQUFPQSxNQUFNLEtBQUssUUFBUSxJQUFJckYsS0FBSyxDQUFDQyxPQUFPLENBQUNvRixNQUFNLENBQUMsRUFBRTtZQUNsRSxNQUFNLElBQUkxSCxLQUFLLENBQUMsQ0FBQztVQUNuQjtVQUNBb0IsR0FBRyxDQUFDcUcsUUFBUSxDQUFDSSxRQUFRLEdBQUdILE1BQU07UUFDaEMsQ0FBQyxDQUFDLE1BQU07VUFDTnBHLElBQUksQ0FBQyxJQUFJdkIsYUFBSyxDQUFDQyxLQUFLLENBQUNELGFBQUssQ0FBQ0MsS0FBSyxDQUFDOEgsWUFBWSxFQUFFLCtDQUErQyxDQUFDLENBQUM7VUFDaEc7UUFDRjtNQUNGO01BQ0EsSUFBSTFHLEdBQUcsQ0FBQzdDLEdBQUcsQ0FBQyxtQkFBbUIsQ0FBQyxFQUFFO1FBQ2hDLElBQUk7VUFDRixNQUFNbUosTUFBTSxHQUFHQyxJQUFJLENBQUNDLEtBQUssQ0FBQ3hHLEdBQUcsQ0FBQzdDLEdBQUcsQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO1VBQ3ZELElBQUksQ0FBQ21KLE1BQU0sSUFBSSxPQUFPQSxNQUFNLEtBQUssUUFBUSxJQUFJckYsS0FBSyxDQUFDQyxPQUFPLENBQUNvRixNQUFNLENBQUMsRUFBRTtZQUNsRSxNQUFNLElBQUkxSCxLQUFLLENBQUMsQ0FBQztVQUNuQjtVQUNBb0IsR0FBRyxDQUFDcUcsUUFBUSxDQUFDTSxJQUFJLEdBQUdMLE1BQU07UUFDNUIsQ0FBQyxDQUFDLE1BQU07VUFDTnBHLElBQUksQ0FBQyxJQUFJdkIsYUFBSyxDQUFDQyxLQUFLLENBQUNELGFBQUssQ0FBQ0MsS0FBSyxDQUFDOEgsWUFBWSxFQUFFLDJDQUEyQyxDQUFDLENBQUM7VUFDNUY7UUFDRjtNQUNGO0lBQ0Y7O0lBRUE7SUFDQSxNQUFNckYsU0FBUyxHQUFHckIsR0FBRyxDQUFDcUcsUUFBUSxFQUFFaEYsU0FBUztJQUN6QyxJQUFJQSxTQUFTLEtBQUs4QyxTQUFTLEVBQUU7TUFDM0IsSUFBSSxDQUFDaUIsUUFBUSxFQUFFO1FBQ2JsRixJQUFJLENBQ0YsSUFBSXZCLGFBQUssQ0FBQ0MsS0FBSyxDQUNiRCxhQUFLLENBQUNDLEtBQUssQ0FBQ2dJLG1CQUFtQixFQUMvQixpREFDRixDQUNGLENBQUM7UUFDRDtNQUNGO01BQ0EsTUFBTUMsY0FBYyxHQUFHdEgsV0FBVyxDQUFDNkIsaUJBQWlCLENBQUNDLFNBQVMsQ0FBQztNQUMvRCxJQUFJd0YsY0FBYyxFQUFFO1FBQ2xCM0csSUFBSSxDQUFDMkcsY0FBYyxDQUFDO1FBQ3BCO01BQ0Y7SUFDRjs7SUFFQTtJQUNBLElBQUk3RyxHQUFHLENBQUM4RyxJQUFJLFlBQVlsRCxNQUFNLEVBQUU7TUFDOUIsT0FBTyxJQUFJLENBQUNtRCxxQkFBcUIsQ0FBQy9HLEdBQUcsRUFBRUMsR0FBRyxFQUFFQyxJQUFJLENBQUM7SUFDbkQ7SUFDQSxPQUFPLElBQUksQ0FBQzhHLG1CQUFtQixDQUFDaEgsR0FBRyxFQUFFQyxHQUFHLEVBQUVDLElBQUksQ0FBQztFQUNqRDtFQUVBLE1BQU02RyxxQkFBcUJBLENBQUMvRyxHQUFHLEVBQUVDLEdBQUcsRUFBRUMsSUFBSSxFQUFFO0lBQzFDLE1BQU0yQixNQUFNLEdBQUc3QixHQUFHLENBQUM2QixNQUFNO0lBQ3pCLE1BQU1TLGVBQWUsR0FBR1QsTUFBTSxDQUFDUyxlQUFlO0lBQzlDLE1BQU07TUFBRUQ7SUFBUyxDQUFDLEdBQUdyQyxHQUFHLENBQUNlLE1BQU07SUFDL0IsTUFBTXlCLFdBQVcsR0FBR3hDLEdBQUcsQ0FBQzdDLEdBQUcsQ0FBQyxjQUFjLENBQUM7SUFFM0MsSUFBSSxDQUFDNkMsR0FBRyxDQUFDOEcsSUFBSSxJQUFJLENBQUM5RyxHQUFHLENBQUM4RyxJQUFJLENBQUNySSxNQUFNLEVBQUU7TUFDakN5QixJQUFJLENBQUMsSUFBSXZCLGFBQUssQ0FBQ0MsS0FBSyxDQUFDRCxhQUFLLENBQUNDLEtBQUssQ0FBQ0MsZUFBZSxFQUFFLHNCQUFzQixDQUFDLENBQUM7TUFDMUU7SUFDRjtJQUVBLE1BQU0rRCxNQUFNLEdBQUc1QyxHQUFHLENBQUM4RyxJQUFJLENBQUNyRCxRQUFRLENBQUMsUUFBUSxDQUFDO0lBQzFDLE1BQU1mLElBQUksR0FBRyxJQUFJL0QsYUFBSyxDQUFDZ0UsSUFBSSxDQUFDTixRQUFRLEVBQUU7TUFBRU87SUFBTyxDQUFDLEVBQUVKLFdBQVcsQ0FBQztJQUM5RCxNQUFNO01BQUVpRSxRQUFRLEdBQUcsQ0FBQyxDQUFDO01BQUVFLElBQUksR0FBRyxDQUFDLENBQUM7TUFBRXRGO0lBQVUsQ0FBQyxHQUFHckIsR0FBRyxDQUFDcUcsUUFBUSxJQUFJLENBQUMsQ0FBQztJQUNsRSxJQUFJO01BQ0Y7TUFDQTFJLEtBQUssQ0FBQ3NKLHVCQUF1QixDQUFDcEYsTUFBTSxFQUFFNEUsUUFBUSxDQUFDO01BQy9DOUksS0FBSyxDQUFDc0osdUJBQXVCLENBQUNwRixNQUFNLEVBQUU4RSxJQUFJLENBQUM7SUFDN0MsQ0FBQyxDQUFDLE9BQU8zRSxLQUFLLEVBQUU7TUFDZDlCLElBQUksQ0FBQyxJQUFJdkIsYUFBSyxDQUFDQyxLQUFLLENBQUNELGFBQUssQ0FBQ0MsS0FBSyxDQUFDc0ksZ0JBQWdCLEVBQUVsRixLQUFLLENBQUMsQ0FBQztNQUMxRDtJQUNGO0lBQ0FVLElBQUksQ0FBQ3lFLE9BQU8sQ0FBQ1IsSUFBSSxDQUFDO0lBQ2xCakUsSUFBSSxDQUFDMEUsV0FBVyxDQUFDWCxRQUFRLENBQUM7SUFDMUIsSUFBSXBGLFNBQVMsRUFBRTtNQUNicUIsSUFBSSxDQUFDMkUsWUFBWSxDQUFDaEcsU0FBUyxDQUFDO0lBQzlCO0lBQ0EsTUFBTWlHLFFBQVEsR0FBRzFELE1BQU0sQ0FBQzJELFVBQVUsQ0FBQ3ZILEdBQUcsQ0FBQzhHLElBQUksQ0FBQztJQUM1QyxNQUFNVSxVQUFVLEdBQUc7TUFBRTlFLElBQUk7TUFBRTRFO0lBQVMsQ0FBQztJQUNyQyxJQUFJO01BQ0Y7TUFDQSxNQUFNekUsYUFBYSxHQUFHLE1BQU1uRixRQUFRLENBQUNvRixtQkFBbUIsQ0FDdERwRixRQUFRLENBQUNxRixLQUFLLENBQUMwRSxVQUFVLEVBQ3pCRCxVQUFVLEVBQ1YzRixNQUFNLEVBQ043QixHQUFHLENBQUNpRCxJQUNOLENBQUM7TUFDRCxJQUFJeUUsVUFBVTtNQUNkO01BQ0EsSUFBSTdFLGFBQWEsWUFBWWxFLGFBQUssQ0FBQ2dFLElBQUksRUFBRTtRQUN2QzZFLFVBQVUsQ0FBQzlFLElBQUksR0FBR0csYUFBYTtRQUMvQixJQUFJQSxhQUFhLENBQUM4RSxHQUFHLENBQUMsQ0FBQyxFQUFFO1VBQ3ZCO1VBQ0FILFVBQVUsQ0FBQ0YsUUFBUSxHQUFHLElBQUk7VUFDMUJJLFVBQVUsR0FBRztZQUNYQyxHQUFHLEVBQUU5RSxhQUFhLENBQUM4RSxHQUFHLENBQUMsQ0FBQztZQUN4QkMsSUFBSSxFQUFFL0UsYUFBYSxDQUFDSztVQUN0QixDQUFDO1FBQ0g7TUFDRjtNQUNBO01BQ0EsSUFBSSxDQUFDd0UsVUFBVSxFQUFFO1FBQ2Y7UUFDQSxJQUFJRyxVQUFVO1FBQ2QsSUFBSUwsVUFBVSxDQUFDOUUsSUFBSSxDQUFDb0YsT0FBTyxFQUFFQyxNQUFNLEtBQUssUUFBUSxFQUFFO1VBQ2hERixVQUFVLEdBQUdMLFVBQVUsQ0FBQzlFLElBQUksQ0FBQ29GLE9BQU8sQ0FBQ0UsTUFBTTtRQUM3QyxDQUFDLE1BQU07VUFDTEgsVUFBVSxHQUFHakUsTUFBTSxDQUFDQyxJQUFJLENBQUMyRCxVQUFVLENBQUM5RSxJQUFJLENBQUNvQixLQUFLLEVBQUUsUUFBUSxDQUFDO1FBQzNEO1FBQ0EwRCxVQUFVLENBQUNGLFFBQVEsR0FBRzFELE1BQU0sQ0FBQzJELFVBQVUsQ0FBQ00sVUFBVSxDQUFDO1FBQ25EO1FBQ0EsTUFBTUksV0FBVyxHQUFHO1VBQ2xCeEIsUUFBUSxFQUFFZSxVQUFVLENBQUM5RSxJQUFJLENBQUN3RjtRQUM1QixDQUFDO1FBQ0Q7UUFDQTtRQUNBLE1BQU1DLFFBQVEsR0FDWjVLLE1BQU0sQ0FBQzZLLElBQUksQ0FBQ1osVUFBVSxDQUFDOUUsSUFBSSxDQUFDMkYsS0FBSyxDQUFDLENBQUM1SixNQUFNLEdBQUcsQ0FBQyxHQUFHO1VBQUVrSSxJQUFJLEVBQUVhLFVBQVUsQ0FBQzlFLElBQUksQ0FBQzJGO1FBQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUN0RjlLLE1BQU0sQ0FBQytLLE1BQU0sQ0FBQ0wsV0FBVyxFQUFFRSxRQUFRLENBQUM7UUFDcEM7UUFDQSxJQUFJWCxVQUFVLENBQUM5RSxJQUFJLENBQUM2RixVQUFVLEVBQUU7VUFDOUJOLFdBQVcsQ0FBQzVHLFNBQVMsR0FBR21HLFVBQVUsQ0FBQzlFLElBQUksQ0FBQzZGLFVBQVU7UUFDcEQ7UUFDQTtRQUNBLE1BQU1DLGdCQUFnQixHQUFHLE1BQU1sRyxlQUFlLENBQUNtRyxVQUFVLENBQ3ZENUcsTUFBTSxFQUNOMkYsVUFBVSxDQUFDOUUsSUFBSSxDQUFDUSxLQUFLLEVBQ3JCMkUsVUFBVSxFQUNWTCxVQUFVLENBQUM5RSxJQUFJLENBQUNvRixPQUFPLENBQUM3QyxJQUFJLEVBQzVCZ0QsV0FDRixDQUFDO1FBQ0Q7UUFDQVQsVUFBVSxDQUFDOUUsSUFBSSxDQUFDUSxLQUFLLEdBQUdzRixnQkFBZ0IsQ0FBQ1osSUFBSTtRQUM3Q0osVUFBVSxDQUFDOUUsSUFBSSxDQUFDZ0csSUFBSSxHQUFHRixnQkFBZ0IsQ0FBQ2IsR0FBRztRQUMzQ0gsVUFBVSxDQUFDOUUsSUFBSSxDQUFDaUcsWUFBWSxHQUFHLElBQUk7UUFDbkNuQixVQUFVLENBQUM5RSxJQUFJLENBQUNrRyxhQUFhLEdBQUdDLE9BQU8sQ0FBQ0MsT0FBTyxDQUFDdEIsVUFBVSxDQUFDOUUsSUFBSSxDQUFDO1FBQ2hFZ0YsVUFBVSxHQUFHO1VBQ1hDLEdBQUcsRUFBRWEsZ0JBQWdCLENBQUNiLEdBQUc7VUFDekJDLElBQUksRUFBRVksZ0JBQWdCLENBQUNaO1FBQ3pCLENBQUM7TUFDSDtNQUNBO01BQ0EsTUFBTWxLLFFBQVEsQ0FBQ29GLG1CQUFtQixDQUFDcEYsUUFBUSxDQUFDcUYsS0FBSyxDQUFDZ0csU0FBUyxFQUFFdkIsVUFBVSxFQUFFM0YsTUFBTSxFQUFFN0IsR0FBRyxDQUFDaUQsSUFBSSxDQUFDO01BQzFGaEQsR0FBRyxDQUFDaUMsTUFBTSxDQUFDLEdBQUcsQ0FBQztNQUNmakMsR0FBRyxDQUFDN0MsR0FBRyxDQUFDLFVBQVUsRUFBRXNLLFVBQVUsQ0FBQ0MsR0FBRyxDQUFDO01BQ25DMUgsR0FBRyxDQUFDa0MsSUFBSSxDQUFDdUYsVUFBVSxDQUFDO0lBQ3RCLENBQUMsQ0FBQyxPQUFPbkwsQ0FBQyxFQUFFO01BQ1Z5TSxlQUFNLENBQUNoSCxLQUFLLENBQUMseUJBQXlCLEVBQUV6RixDQUFDLENBQUM7TUFDMUMsTUFBTXlGLEtBQUssR0FBR3RFLFFBQVEsQ0FBQ3FHLFlBQVksQ0FBQ3hILENBQUMsRUFBRTtRQUNyQ3lILElBQUksRUFBRXJGLGFBQUssQ0FBQ0MsS0FBSyxDQUFDQyxlQUFlO1FBQ2pDdUQsT0FBTyxFQUFFLHlCQUF5Qm9GLFVBQVUsQ0FBQzlFLElBQUksQ0FBQ1EsS0FBSztNQUN6RCxDQUFDLENBQUM7TUFDRmhELElBQUksQ0FBQzhCLEtBQUssQ0FBQztJQUNiO0VBQ0Y7RUFFQSxNQUFNZ0YsbUJBQW1CQSxDQUFDaEgsR0FBRyxFQUFFQyxHQUFHLEVBQUVDLElBQUksRUFBRTtJQUN4QyxNQUFNMkIsTUFBTSxHQUFHN0IsR0FBRyxDQUFDNkIsTUFBTTtJQUN6QixNQUFNUyxlQUFlLEdBQUdULE1BQU0sQ0FBQ1MsZUFBZTtJQUM5QyxNQUFNO01BQUVEO0lBQVMsQ0FBQyxHQUFHckMsR0FBRyxDQUFDZSxNQUFNO0lBQy9CLElBQUl5QixXQUFXLEdBQUd4QyxHQUFHLENBQUM3QyxHQUFHLENBQUMsY0FBYyxDQUFDO0lBQ3pDLE1BQU1XLFFBQVEsR0FBR2tDLEdBQUcsQ0FBQzhFLG1CQUFtQjtJQUN4QyxJQUFJbUUsTUFBTTtJQUVWLElBQUk7TUFDRjtNQUNBLE1BQU1DLGFBQWEsR0FBR2xKLEdBQUcsQ0FBQzdDLEdBQUcsQ0FBQyxnQkFBZ0IsQ0FBQztNQUMvQyxJQUFJK0wsYUFBYSxJQUFJQyxRQUFRLENBQUNELGFBQWEsRUFBRSxFQUFFLENBQUMsR0FBR3BMLFFBQVEsRUFBRTtRQUMzRGtDLEdBQUcsQ0FBQ2QsTUFBTSxDQUFDLENBQUM7UUFDWmdCLElBQUksQ0FBQyxJQUFJdkIsYUFBSyxDQUFDQyxLQUFLLENBQ2xCRCxhQUFLLENBQUNDLEtBQUssQ0FBQ0MsZUFBZSxFQUMzQixzQ0FBc0NmLFFBQVEsU0FDaEQsQ0FBQyxDQUFDO1FBQ0Y7TUFDRjtNQUVBLE1BQU15RSxJQUFJLEdBQUcsQ0FBQyxNQUFNLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBRXRGLE9BQU87O01BRTNDO01BQ0EsTUFBTW1NLFlBQVksR0FBRy9HLFFBQVEsSUFBSUEsUUFBUSxDQUFDZixRQUFRLENBQUMsR0FBRyxDQUFDO01BQ3ZELElBQUk4SCxZQUFZLElBQUksQ0FBQzVHLFdBQVcsRUFBRTtRQUNoQ0EsV0FBVyxHQUFHRCxJQUFJLENBQUNFLE9BQU8sQ0FBQ0osUUFBUSxDQUFDO01BQ3RDLENBQUMsTUFBTSxJQUFJLENBQUMrRyxZQUFZLElBQUk1RyxXQUFXLEVBQUU7UUFDdkM7TUFBQTs7TUFHRjtNQUNBeUcsTUFBTSxHQUFHckwsdUJBQXVCLENBQUNvQyxHQUFHLEVBQUVsQyxRQUFRLENBQUM7O01BRS9DO01BQ0EsTUFBTTRFLElBQUksR0FBRyxJQUFJL0QsYUFBSyxDQUFDZ0UsSUFBSSxDQUFDTixRQUFRLEVBQUU7UUFBRU8sTUFBTSxFQUFFO01BQUcsQ0FBQyxFQUFFSixXQUFXLENBQUM7TUFDbEUsTUFBTTtRQUFFaUUsUUFBUSxHQUFHLENBQUMsQ0FBQztRQUFFRSxJQUFJLEdBQUcsQ0FBQyxDQUFDO1FBQUV0RjtNQUFVLENBQUMsR0FBR3JCLEdBQUcsQ0FBQ3FHLFFBQVEsSUFBSSxDQUFDLENBQUM7O01BRWxFO01BQ0EsSUFBSTtRQUNGMUksS0FBSyxDQUFDc0osdUJBQXVCLENBQUNwRixNQUFNLEVBQUU0RSxRQUFRLENBQUM7UUFDL0M5SSxLQUFLLENBQUNzSix1QkFBdUIsQ0FBQ3BGLE1BQU0sRUFBRThFLElBQUksQ0FBQztNQUM3QyxDQUFDLENBQUMsT0FBTzNFLEtBQUssRUFBRTtRQUNkaUgsTUFBTSxDQUFDdkssT0FBTyxDQUFDLENBQUM7UUFDaEJ3QixJQUFJLENBQUMsSUFBSXZCLGFBQUssQ0FBQ0MsS0FBSyxDQUFDRCxhQUFLLENBQUNDLEtBQUssQ0FBQ3NJLGdCQUFnQixFQUFFbEYsS0FBSyxDQUFDLENBQUM7UUFDMUQ7TUFDRjtNQUVBVSxJQUFJLENBQUN5RSxPQUFPLENBQUNSLElBQUksQ0FBQztNQUNsQmpFLElBQUksQ0FBQzBFLFdBQVcsQ0FBQ1gsUUFBUSxDQUFDO01BQzFCLElBQUlwRixTQUFTLEVBQUU7UUFDYnFCLElBQUksQ0FBQzJFLFlBQVksQ0FBQ2hHLFNBQVMsQ0FBQztNQUM5QjtNQUVBLE1BQU1pRyxRQUFRLEdBQUd0SCxHQUFHLENBQUM3QyxHQUFHLENBQUMsZ0JBQWdCLENBQUMsR0FDdENnTSxRQUFRLENBQUNuSixHQUFHLENBQUM3QyxHQUFHLENBQUMsZ0JBQWdCLENBQUMsRUFBRSxFQUFFLENBQUMsR0FDdkMsSUFBSTtNQUNSLE1BQU1xSyxVQUFVLEdBQUc7UUFBRTlFLElBQUk7UUFBRTRFLFFBQVE7UUFBRTJCLE1BQU0sRUFBRTtNQUFLLENBQUM7O01BRW5EO01BQ0EsTUFBTXBHLGFBQWEsR0FBRyxNQUFNbkYsUUFBUSxDQUFDb0YsbUJBQW1CLENBQ3REcEYsUUFBUSxDQUFDcUYsS0FBSyxDQUFDMEUsVUFBVSxFQUN6QkQsVUFBVSxFQUNWM0YsTUFBTSxFQUNON0IsR0FBRyxDQUFDaUQsSUFDTixDQUFDO01BRUQsSUFBSXlFLFVBQVU7TUFDZDtNQUNBLElBQUk3RSxhQUFhLFlBQVlsRSxhQUFLLENBQUNnRSxJQUFJLEVBQUU7UUFDdkM2RSxVQUFVLENBQUM5RSxJQUFJLEdBQUdHLGFBQWE7UUFDL0IsSUFBSUEsYUFBYSxDQUFDOEUsR0FBRyxDQUFDLENBQUMsRUFBRTtVQUN2QkgsVUFBVSxDQUFDRixRQUFRLEdBQUcsSUFBSTtVQUMxQkksVUFBVSxHQUFHO1lBQ1hDLEdBQUcsRUFBRTlFLGFBQWEsQ0FBQzhFLEdBQUcsQ0FBQyxDQUFDO1lBQ3hCQyxJQUFJLEVBQUUvRSxhQUFhLENBQUNLO1VBQ3RCLENBQUM7VUFDRDtVQUNBK0YsTUFBTSxDQUFDdkssT0FBTyxDQUFDLENBQUM7UUFDbEI7TUFDRjs7TUFFQTtNQUNBLElBQUksQ0FBQ2dKLFVBQVUsRUFBRTtRQUNmO1FBQ0EsTUFBTU8sV0FBVyxHQUFHO1VBQ2xCeEIsUUFBUSxFQUFFZSxVQUFVLENBQUM5RSxJQUFJLENBQUN3RjtRQUM1QixDQUFDO1FBQ0QsTUFBTUMsUUFBUSxHQUNaNUssTUFBTSxDQUFDNkssSUFBSSxDQUFDWixVQUFVLENBQUM5RSxJQUFJLENBQUMyRixLQUFLLENBQUMsQ0FBQzVKLE1BQU0sR0FBRyxDQUFDLEdBQUc7VUFBRWtJLElBQUksRUFBRWEsVUFBVSxDQUFDOUUsSUFBSSxDQUFDMkY7UUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ3RGOUssTUFBTSxDQUFDK0ssTUFBTSxDQUFDTCxXQUFXLEVBQUVFLFFBQVEsQ0FBQztRQUNwQztRQUNBLElBQUlYLFVBQVUsQ0FBQzlFLElBQUksQ0FBQzZGLFVBQVUsRUFBRTtVQUM5Qk4sV0FBVyxDQUFDNUcsU0FBUyxHQUFHbUcsVUFBVSxDQUFDOUUsSUFBSSxDQUFDNkYsVUFBVTtRQUNwRDs7UUFFQTtRQUNBLE1BQU1jLFVBQVUsR0FBRzdCLFVBQVUsQ0FBQzlFLElBQUksQ0FBQ29GLE9BQU8sRUFBRTdDLElBQUksSUFBSXpDLFdBQVc7UUFDL0QsTUFBTWdHLGdCQUFnQixHQUFHLE1BQU1sRyxlQUFlLENBQUNtRyxVQUFVLENBQ3ZENUcsTUFBTSxFQUNOMkYsVUFBVSxDQUFDOUUsSUFBSSxDQUFDUSxLQUFLLEVBQ3JCK0YsTUFBTSxFQUNOSSxVQUFVLEVBQ1ZwQixXQUNGLENBQUM7O1FBRUQ7UUFDQVQsVUFBVSxDQUFDOUUsSUFBSSxDQUFDUSxLQUFLLEdBQUdzRixnQkFBZ0IsQ0FBQ1osSUFBSTtRQUM3Q0osVUFBVSxDQUFDOUUsSUFBSSxDQUFDZ0csSUFBSSxHQUFHRixnQkFBZ0IsQ0FBQ2IsR0FBRztRQUMzQ0gsVUFBVSxDQUFDOUUsSUFBSSxDQUFDaUcsWUFBWSxHQUFHLElBQUk7UUFDbkNuQixVQUFVLENBQUM5RSxJQUFJLENBQUNrRyxhQUFhLEdBQUdDLE9BQU8sQ0FBQ0MsT0FBTyxDQUFDdEIsVUFBVSxDQUFDOUUsSUFBSSxDQUFDO1FBQ2hFZ0YsVUFBVSxHQUFHO1VBQ1hDLEdBQUcsRUFBRWEsZ0JBQWdCLENBQUNiLEdBQUc7VUFDekJDLElBQUksRUFBRVksZ0JBQWdCLENBQUNaO1FBQ3pCLENBQUM7TUFDSDs7TUFFQTtNQUNBLE1BQU1sSyxRQUFRLENBQUNvRixtQkFBbUIsQ0FBQ3BGLFFBQVEsQ0FBQ3FGLEtBQUssQ0FBQ2dHLFNBQVMsRUFBRXZCLFVBQVUsRUFBRTNGLE1BQU0sRUFBRTdCLEdBQUcsQ0FBQ2lELElBQUksQ0FBQztNQUMxRmhELEdBQUcsQ0FBQ2lDLE1BQU0sQ0FBQyxHQUFHLENBQUM7TUFDZmpDLEdBQUcsQ0FBQzdDLEdBQUcsQ0FBQyxVQUFVLEVBQUVzSyxVQUFVLENBQUNDLEdBQUcsQ0FBQztNQUNuQzFILEdBQUcsQ0FBQ2tDLElBQUksQ0FBQ3VGLFVBQVUsQ0FBQztJQUN0QixDQUFDLENBQUMsT0FBT25MLENBQUMsRUFBRTtNQUNWO01BQ0EsSUFBSTBNLE1BQU0sRUFBRTtRQUNWQSxNQUFNLENBQUN2SyxPQUFPLENBQUMsQ0FBQztNQUNsQixDQUFDLE1BQU07UUFDTHNCLEdBQUcsQ0FBQ2QsTUFBTSxDQUFDLENBQUM7TUFDZDtNQUNBOEosZUFBTSxDQUFDaEgsS0FBSyxDQUFDLHlCQUF5QixFQUFFekYsQ0FBQyxDQUFDO01BQzFDLE1BQU15RixLQUFLLEdBQUd0RSxRQUFRLENBQUNxRyxZQUFZLENBQUN4SCxDQUFDLEVBQUU7UUFDckN5SCxJQUFJLEVBQUVyRixhQUFLLENBQUNDLEtBQUssQ0FBQ0MsZUFBZTtRQUNqQ3VELE9BQU8sRUFBRSx5QkFBeUJDLFFBQVE7TUFDNUMsQ0FBQyxDQUFDO01BQ0ZuQyxJQUFJLENBQUM4QixLQUFLLENBQUM7SUFDYjtFQUNGO0VBRUEsTUFBTXBCLGFBQWFBLENBQUNaLEdBQUcsRUFBRUMsR0FBRyxFQUFFQyxJQUFJLEVBQUU7SUFDbEMsSUFBSUYsR0FBRyxDQUFDaUQsSUFBSSxDQUFDaUMsVUFBVSxFQUFFO01BQ3ZCLE1BQU1sRCxLQUFLLEdBQUcsSUFBQUMsK0JBQXdCLEVBQUMsR0FBRyxFQUFFLHFEQUFxRCxFQUFFakMsR0FBRyxDQUFDNkIsTUFBTSxDQUFDO01BQzlHNUIsR0FBRyxDQUFDaUMsTUFBTSxDQUFDRixLQUFLLENBQUNFLE1BQU0sQ0FBQztNQUN4QmpDLEdBQUcsQ0FBQ3FELEdBQUcsQ0FBQyxhQUFhdEIsS0FBSyxDQUFDSSxPQUFPLElBQUksQ0FBQztNQUN2QztJQUNGO0lBQ0EsSUFBSTtNQUNGLE1BQU07UUFBRUU7TUFBZ0IsQ0FBQyxHQUFHdEMsR0FBRyxDQUFDNkIsTUFBTTtNQUN0QyxNQUFNUSxRQUFRLEdBQUc5QyxXQUFXLENBQUNzQixzQkFBc0IsQ0FBQ2IsR0FBRyxDQUFDO01BQ3hEO01BQ0EsTUFBTTBDLElBQUksR0FBRyxJQUFJL0QsYUFBSyxDQUFDZ0UsSUFBSSxDQUFDTixRQUFRLENBQUM7TUFDckNLLElBQUksQ0FBQ2dHLElBQUksR0FBRyxNQUFNcEcsZUFBZSxDQUFDZ0gsT0FBTyxDQUFDQyxlQUFlLENBQUN2SixHQUFHLENBQUM2QixNQUFNLEVBQUVRLFFBQVEsQ0FBQztNQUMvRSxNQUFNbUYsVUFBVSxHQUFHO1FBQUU5RSxJQUFJO1FBQUU0RSxRQUFRLEVBQUU7TUFBSyxDQUFDO01BQzNDLE1BQU01SixRQUFRLENBQUNvRixtQkFBbUIsQ0FDaENwRixRQUFRLENBQUNxRixLQUFLLENBQUN5RyxZQUFZLEVBQzNCaEMsVUFBVSxFQUNWeEgsR0FBRyxDQUFDNkIsTUFBTSxFQUNWN0IsR0FBRyxDQUFDaUQsSUFDTixDQUFDO01BQ0Q7TUFDQSxNQUFNWCxlQUFlLENBQUNtSCxVQUFVLENBQUN6SixHQUFHLENBQUM2QixNQUFNLEVBQUVRLFFBQVEsQ0FBQztNQUN0RDtNQUNBLE1BQU0zRSxRQUFRLENBQUNvRixtQkFBbUIsQ0FDaENwRixRQUFRLENBQUNxRixLQUFLLENBQUMyRyxXQUFXLEVBQzFCbEMsVUFBVSxFQUNWeEgsR0FBRyxDQUFDNkIsTUFBTSxFQUNWN0IsR0FBRyxDQUFDaUQsSUFDTixDQUFDO01BQ0RoRCxHQUFHLENBQUNpQyxNQUFNLENBQUMsR0FBRyxDQUFDO01BQ2Y7TUFDQWpDLEdBQUcsQ0FBQ3FELEdBQUcsQ0FBQyxDQUFDO0lBQ1gsQ0FBQyxDQUFDLE9BQU8vRyxDQUFDLEVBQUU7TUFDVnlNLGVBQU0sQ0FBQ2hILEtBQUssQ0FBQyx5QkFBeUIsRUFBRXpGLENBQUMsQ0FBQztNQUMxQyxNQUFNeUYsS0FBSyxHQUFHdEUsUUFBUSxDQUFDcUcsWUFBWSxDQUFDeEgsQ0FBQyxFQUFFO1FBQ3JDeUgsSUFBSSxFQUFFckYsYUFBSyxDQUFDQyxLQUFLLENBQUMrSyxpQkFBaUI7UUFDbkN2SCxPQUFPLEVBQUU7TUFDWCxDQUFDLENBQUM7TUFDRmxDLElBQUksQ0FBQzhCLEtBQUssQ0FBQztJQUNiO0VBQ0Y7RUFFQSxNQUFNbkMsZUFBZUEsQ0FBQ0csR0FBRyxFQUFFQyxHQUFHLEVBQUU7SUFDOUIsSUFBSTtNQUNGLE1BQU00QixNQUFNLEdBQUdDLGVBQU0sQ0FBQzNFLEdBQUcsQ0FBQzZDLEdBQUcsQ0FBQ2UsTUFBTSxDQUFDZ0IsS0FBSyxDQUFDO01BQzNDLE1BQU07UUFBRU87TUFBZ0IsQ0FBQyxHQUFHVCxNQUFNO01BQ2xDLE1BQU1RLFFBQVEsR0FBRzlDLFdBQVcsQ0FBQ3NCLHNCQUFzQixDQUFDYixHQUFHLENBQUM7TUFDeEQsTUFBTXVELElBQUksR0FBRyxNQUFNakIsZUFBZSxDQUFDc0gsV0FBVyxDQUFDdkgsUUFBUSxDQUFDO01BQ3hEcEMsR0FBRyxDQUFDaUMsTUFBTSxDQUFDLEdBQUcsQ0FBQztNQUNmakMsR0FBRyxDQUFDa0MsSUFBSSxDQUFDb0IsSUFBSSxDQUFDO0lBQ2hCLENBQUMsQ0FBQyxNQUFNO01BQ050RCxHQUFHLENBQUNpQyxNQUFNLENBQUMsR0FBRyxDQUFDO01BQ2ZqQyxHQUFHLENBQUNrQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDZDtFQUNGO0FBQ0Y7QUFBQzdDLE9BQUEsQ0FBQUMsV0FBQSxHQUFBQSxXQUFBO0FBRUQsU0FBUzRELGdCQUFnQkEsQ0FBQ25ELEdBQUcsRUFBRXNDLGVBQWUsRUFBRTtFQUM5QyxNQUFNdUgsS0FBSyxHQUFHLENBQUM3SixHQUFHLENBQUM3QyxHQUFHLENBQUMsT0FBTyxDQUFDLElBQUksS0FBSyxFQUFFdUUsS0FBSyxDQUFDLEdBQUcsQ0FBQztFQUNwRCxNQUFNb0ksS0FBSyxHQUFHQyxNQUFNLENBQUNGLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUM5QixNQUFNdkcsR0FBRyxHQUFHeUcsTUFBTSxDQUFDRixLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDNUIsT0FDRSxDQUFDLENBQUNHLEtBQUssQ0FBQ0YsS0FBSyxDQUFDLElBQUksQ0FBQ0UsS0FBSyxDQUFDMUcsR0FBRyxDQUFDLEtBQUssT0FBT2hCLGVBQWUsQ0FBQ2dILE9BQU8sQ0FBQ2xHLGdCQUFnQixLQUFLLFVBQVU7QUFFcEciLCJpZ25vcmVMaXN0IjpbXX0=
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "parse-server",
3
- "version": "9.5.0-alpha.2",
3
+ "version": "9.5.0-alpha.3",
4
4
  "description": "An express module providing a Parse-compatible API server",
5
5
  "main": "lib/index.js",
6
6
  "repository": {
@@ -137,7 +137,7 @@
137
137
  "postinstall": "node -p 'require(\"./postinstall.js\")()'",
138
138
  "madge:circular": "node_modules/.bin/madge ./src --circular",
139
139
  "benchmark": "cross-env MONGODB_VERSION=8.0.4 MONGODB_TOPOLOGY=standalone mongodb-runner exec -t standalone --version 8.0.4 -- --port 27017 -- npm run benchmark:only",
140
- "benchmark:only": "node benchmark/performance.js",
140
+ "benchmark:only": "node --expose-gc benchmark/performance.js",
141
141
  "benchmark:quick": "cross-env BENCHMARK_ITERATIONS=10 npm run benchmark:only"
142
142
  },
143
143
  "types": "types/index.d.ts",