parse-server 8.0.0-alpha.11 → 8.0.0-alpha.13

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.
@@ -33,7 +33,7 @@ class RedisCacheAdapter {
33
33
  if (this.client.isOpen) {
34
34
  return;
35
35
  }
36
- return this.client.connect();
36
+ return await this.client.connect();
37
37
  }
38
38
  async handleShutdown() {
39
39
  if (!this.client) {
@@ -106,4 +106,4 @@ class RedisCacheAdapter {
106
106
  }
107
107
  exports.RedisCacheAdapter = RedisCacheAdapter;
108
108
  var _default = exports.default = RedisCacheAdapter;
109
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfcmVkaXMiLCJyZXF1aXJlIiwiX2xvZ2dlciIsIl9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCJfS2V5UHJvbWlzZVF1ZXVlIiwiZSIsIl9fZXNNb2R1bGUiLCJkZWZhdWx0IiwiREVGQVVMVF9SRURJU19UVEwiLCJGTFVTSF9EQl9LRVkiLCJkZWJ1ZyIsImFyZ3MiLCJtZXNzYWdlIiwiYXJndW1lbnRzIiwiY29uY2F0Iiwic2xpY2UiLCJsZW5ndGgiLCJsb2dnZXIiLCJhcHBseSIsImlzVmFsaWRUVEwiLCJ0dGwiLCJSZWRpc0NhY2hlQWRhcHRlciIsImNvbnN0cnVjdG9yIiwicmVkaXNDdHgiLCJjbGllbnQiLCJjcmVhdGVDbGllbnQiLCJxdWV1ZSIsIktleVByb21pc2VRdWV1ZSIsIm9uIiwiZXJyIiwiZXJyb3IiLCJjb25uZWN0IiwiaXNPcGVuIiwiaGFuZGxlU2h1dGRvd24iLCJxdWl0IiwiZ2V0Iiwia2V5IiwiZW5xdWV1ZSIsInJlcyIsIkpTT04iLCJwYXJzZSIsInB1dCIsInZhbHVlIiwic3RyaW5naWZ5IiwiSW5maW5pdHkiLCJzZXQiLCJQWCIsImRlbCIsImNsZWFyIiwic2VuZENvbW1hbmQiLCJnZXRBbGxLZXlzIiwia2V5cyIsImV4cG9ydHMiLCJfZGVmYXVsdCJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9BZGFwdGVycy9DYWNoZS9SZWRpc0NhY2hlQWRhcHRlci5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBjcmVhdGVDbGllbnQgfSBmcm9tICdyZWRpcyc7XG5pbXBvcnQgbG9nZ2VyIGZyb20gJy4uLy4uL2xvZ2dlcic7XG5pbXBvcnQgeyBLZXlQcm9taXNlUXVldWUgfSBmcm9tICcuLi8uLi9LZXlQcm9taXNlUXVldWUnO1xuXG5jb25zdCBERUZBVUxUX1JFRElTX1RUTCA9IDMwICogMTAwMDsgLy8gMzAgc2Vjb25kcyBpbiBtaWxsaXNlY29uZHNcbmNvbnN0IEZMVVNIX0RCX0tFWSA9ICdfX2ZsdXNoX2RiX18nO1xuXG5mdW5jdGlvbiBkZWJ1ZyguLi5hcmdzOiBhbnkpIHtcbiAgY29uc3QgbWVzc2FnZSA9IFsnUmVkaXNDYWNoZUFkYXB0ZXI6ICcgKyBhcmd1bWVudHNbMF1dLmNvbmNhdChhcmdzLnNsaWNlKDEsIGFyZ3MubGVuZ3RoKSk7XG4gIGxvZ2dlci5kZWJ1Zy5hcHBseShsb2dnZXIsIG1lc3NhZ2UpO1xufVxuXG5jb25zdCBpc1ZhbGlkVFRMID0gdHRsID0+IHR5cGVvZiB0dGwgPT09ICdudW1iZXInICYmIHR0bCA+IDA7XG5cbmV4cG9ydCBjbGFzcyBSZWRpc0NhY2hlQWRhcHRlciB7XG4gIGNvbnN0cnVjdG9yKHJlZGlzQ3R4LCB0dGwgPSBERUZBVUxUX1JFRElTX1RUTCkge1xuICAgIHRoaXMudHRsID0gaXNWYWxpZFRUTCh0dGwpID8gdHRsIDogREVGQVVMVF9SRURJU19UVEw7XG4gICAgdGhpcy5jbGllbnQgPSBjcmVhdGVDbGllbnQocmVkaXNDdHgpO1xuICAgIHRoaXMucXVldWUgPSBuZXcgS2V5UHJvbWlzZVF1ZXVlKCk7XG4gICAgdGhpcy5jbGllbnQub24oJ2Vycm9yJywgZXJyID0+IHsgbG9nZ2VyLmVycm9yKCdSZWRpc0NhY2hlQWRhcHRlciBjbGllbnQgZXJyb3InLCB7IGVycm9yOiBlcnIgfSkgfSk7XG4gICAgdGhpcy5jbGllbnQub24oJ2Nvbm5lY3QnLCAoKSA9PiB7fSk7XG4gICAgdGhpcy5jbGllbnQub24oJ3JlY29ubmVjdGluZycsICgpID0+IHt9KTtcbiAgICB0aGlzLmNsaWVudC5vbigncmVhZHknLCAoKSA9PiB7fSk7XG4gIH1cblxuICBhc3luYyBjb25uZWN0KCkge1xuICAgIGlmICh0aGlzLmNsaWVudC5pc09wZW4pIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuY2xpZW50LmNvbm5lY3QoKTtcbiAgfVxuXG4gIGFzeW5jIGhhbmRsZVNodXRkb3duKCkge1xuICAgIGlmICghdGhpcy5jbGllbnQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IHRoaXMuY2xpZW50LnF1aXQoKTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGxvZ2dlci5lcnJvcignUmVkaXNDYWNoZUFkYXB0ZXIgZXJyb3Igb24gc2h1dGRvd24nLCB7IGVycm9yOiBlcnIgfSk7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgZ2V0KGtleSkge1xuICAgIGRlYnVnKCdnZXQnLCB7IGtleSB9KTtcbiAgICB0cnkge1xuICAgICAgYXdhaXQgdGhpcy5xdWV1ZS5lbnF1ZXVlKGtleSk7XG4gICAgICBjb25zdCByZXMgPSBhd2FpdCB0aGlzLmNsaWVudC5nZXQoa2V5KTtcbiAgICAgIGlmICghcmVzKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuICAgICAgcmV0dXJuIEpTT04ucGFyc2UocmVzKTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGxvZ2dlci5lcnJvcignUmVkaXNDYWNoZUFkYXB0ZXIgZXJyb3Igb24gZ2V0JywgeyBlcnJvcjogZXJyIH0pO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIHB1dChrZXksIHZhbHVlLCB0dGwgPSB0aGlzLnR0bCkge1xuICAgIHZhbHVlID0gSlNPTi5zdHJpbmdpZnkodmFsdWUpO1xuICAgIGRlYnVnKCdwdXQnLCB7IGtleSwgdmFsdWUsIHR0bCB9KTtcbiAgICBhd2FpdCB0aGlzLnF1ZXVlLmVucXVldWUoa2V5KTtcbiAgICBpZiAodHRsID09PSAwKSB7XG4gICAgICAvLyB0dGwgb2YgemVybyBpcyBhIGxvZ2ljYWwgbm8tb3AsIGJ1dCByZWRpcyBjYW5ub3Qgc2V0IGV4cGlyZSB0aW1lIG9mIHplcm9cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAodHRsID09PSBJbmZpbml0eSkge1xuICAgICAgcmV0dXJuIHRoaXMuY2xpZW50LnNldChrZXksIHZhbHVlKTtcbiAgICB9XG5cbiAgICBpZiAoIWlzVmFsaWRUVEwodHRsKSkge1xuICAgICAgdHRsID0gdGhpcy50dGw7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmNsaWVudC5zZXQoa2V5LCB2YWx1ZSwgeyBQWDogdHRsIH0pO1xuICB9XG5cbiAgYXN5bmMgZGVsKGtleSkge1xuICAgIGRlYnVnKCdkZWwnLCB7IGtleSB9KTtcbiAgICBhd2FpdCB0aGlzLnF1ZXVlLmVucXVldWUoa2V5KTtcbiAgICByZXR1cm4gdGhpcy5jbGllbnQuZGVsKGtleSk7XG4gIH1cblxuICBhc3luYyBjbGVhcigpIHtcbiAgICBkZWJ1ZygnY2xlYXInKTtcbiAgICBhd2FpdCB0aGlzLnF1ZXVlLmVucXVldWUoRkxVU0hfREJfS0VZKTtcbiAgICByZXR1cm4gdGhpcy5jbGllbnQuc2VuZENvbW1hbmQoWydGTFVTSERCJ10pO1xuICB9XG5cbiAgLy8gVXNlZCBmb3IgdGVzdGluZ1xuICBnZXRBbGxLZXlzKCkge1xuICAgIHJldHVybiB0aGlzLmNsaWVudC5rZXlzKCcqJyk7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgUmVkaXNDYWNoZUFkYXB0ZXI7XG4iXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBLElBQUFBLE1BQUEsR0FBQUMsT0FBQTtBQUNBLElBQUFDLE9BQUEsR0FBQUMsc0JBQUEsQ0FBQUYsT0FBQTtBQUNBLElBQUFHLGdCQUFBLEdBQUFILE9BQUE7QUFBd0QsU0FBQUUsdUJBQUFFLENBQUEsV0FBQUEsQ0FBQSxJQUFBQSxDQUFBLENBQUFDLFVBQUEsR0FBQUQsQ0FBQSxLQUFBRSxPQUFBLEVBQUFGLENBQUE7QUFFeEQsTUFBTUcsaUJBQWlCLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDO0FBQ3JDLE1BQU1DLFlBQVksR0FBRyxjQUFjO0FBRW5DLFNBQVNDLEtBQUtBLENBQUMsR0FBR0MsSUFBUyxFQUFFO0VBQzNCLE1BQU1DLE9BQU8sR0FBRyxDQUFDLHFCQUFxQixHQUFHQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQ0MsTUFBTSxDQUFDSCxJQUFJLENBQUNJLEtBQUssQ0FBQyxDQUFDLEVBQUVKLElBQUksQ0FBQ0ss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
109
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfcmVkaXMiLCJyZXF1aXJlIiwiX2xvZ2dlciIsIl9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCJfS2V5UHJvbWlzZVF1ZXVlIiwiZSIsIl9fZXNNb2R1bGUiLCJkZWZhdWx0IiwiREVGQVVMVF9SRURJU19UVEwiLCJGTFVTSF9EQl9LRVkiLCJkZWJ1ZyIsImFyZ3MiLCJtZXNzYWdlIiwiYXJndW1lbnRzIiwiY29uY2F0Iiwic2xpY2UiLCJsZW5ndGgiLCJsb2dnZXIiLCJhcHBseSIsImlzVmFsaWRUVEwiLCJ0dGwiLCJSZWRpc0NhY2hlQWRhcHRlciIsImNvbnN0cnVjdG9yIiwicmVkaXNDdHgiLCJjbGllbnQiLCJjcmVhdGVDbGllbnQiLCJxdWV1ZSIsIktleVByb21pc2VRdWV1ZSIsIm9uIiwiZXJyIiwiZXJyb3IiLCJjb25uZWN0IiwiaXNPcGVuIiwiaGFuZGxlU2h1dGRvd24iLCJxdWl0IiwiZ2V0Iiwia2V5IiwiZW5xdWV1ZSIsInJlcyIsIkpTT04iLCJwYXJzZSIsInB1dCIsInZhbHVlIiwic3RyaW5naWZ5IiwiSW5maW5pdHkiLCJzZXQiLCJQWCIsImRlbCIsImNsZWFyIiwic2VuZENvbW1hbmQiLCJnZXRBbGxLZXlzIiwia2V5cyIsImV4cG9ydHMiLCJfZGVmYXVsdCJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9BZGFwdGVycy9DYWNoZS9SZWRpc0NhY2hlQWRhcHRlci5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBjcmVhdGVDbGllbnQgfSBmcm9tICdyZWRpcyc7XG5pbXBvcnQgbG9nZ2VyIGZyb20gJy4uLy4uL2xvZ2dlcic7XG5pbXBvcnQgeyBLZXlQcm9taXNlUXVldWUgfSBmcm9tICcuLi8uLi9LZXlQcm9taXNlUXVldWUnO1xuXG5jb25zdCBERUZBVUxUX1JFRElTX1RUTCA9IDMwICogMTAwMDsgLy8gMzAgc2Vjb25kcyBpbiBtaWxsaXNlY29uZHNcbmNvbnN0IEZMVVNIX0RCX0tFWSA9ICdfX2ZsdXNoX2RiX18nO1xuXG5mdW5jdGlvbiBkZWJ1ZyguLi5hcmdzOiBhbnkpIHtcbiAgY29uc3QgbWVzc2FnZSA9IFsnUmVkaXNDYWNoZUFkYXB0ZXI6ICcgKyBhcmd1bWVudHNbMF1dLmNvbmNhdChhcmdzLnNsaWNlKDEsIGFyZ3MubGVuZ3RoKSk7XG4gIGxvZ2dlci5kZWJ1Zy5hcHBseShsb2dnZXIsIG1lc3NhZ2UpO1xufVxuXG5jb25zdCBpc1ZhbGlkVFRMID0gdHRsID0+IHR5cGVvZiB0dGwgPT09ICdudW1iZXInICYmIHR0bCA+IDA7XG5cbmV4cG9ydCBjbGFzcyBSZWRpc0NhY2hlQWRhcHRlciB7XG4gIGNvbnN0cnVjdG9yKHJlZGlzQ3R4LCB0dGwgPSBERUZBVUxUX1JFRElTX1RUTCkge1xuICAgIHRoaXMudHRsID0gaXNWYWxpZFRUTCh0dGwpID8gdHRsIDogREVGQVVMVF9SRURJU19UVEw7XG4gICAgdGhpcy5jbGllbnQgPSBjcmVhdGVDbGllbnQocmVkaXNDdHgpO1xuICAgIHRoaXMucXVldWUgPSBuZXcgS2V5UHJvbWlzZVF1ZXVlKCk7XG4gICAgdGhpcy5jbGllbnQub24oJ2Vycm9yJywgZXJyID0+IHsgbG9nZ2VyLmVycm9yKCdSZWRpc0NhY2hlQWRhcHRlciBjbGllbnQgZXJyb3InLCB7IGVycm9yOiBlcnIgfSkgfSk7XG4gICAgdGhpcy5jbGllbnQub24oJ2Nvbm5lY3QnLCAoKSA9PiB7fSk7XG4gICAgdGhpcy5jbGllbnQub24oJ3JlY29ubmVjdGluZycsICgpID0+IHt9KTtcbiAgICB0aGlzLmNsaWVudC5vbigncmVhZHknLCAoKSA9PiB7fSk7XG4gIH1cblxuICBhc3luYyBjb25uZWN0KCkge1xuICAgIGlmICh0aGlzLmNsaWVudC5pc09wZW4pIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgcmV0dXJuIGF3YWl0IHRoaXMuY2xpZW50LmNvbm5lY3QoKTtcbiAgfVxuXG4gIGFzeW5jIGhhbmRsZVNodXRkb3duKCkge1xuICAgIGlmICghdGhpcy5jbGllbnQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IHRoaXMuY2xpZW50LnF1aXQoKTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGxvZ2dlci5lcnJvcignUmVkaXNDYWNoZUFkYXB0ZXIgZXJyb3Igb24gc2h1dGRvd24nLCB7IGVycm9yOiBlcnIgfSk7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgZ2V0KGtleSkge1xuICAgIGRlYnVnKCdnZXQnLCB7IGtleSB9KTtcbiAgICB0cnkge1xuICAgICAgYXdhaXQgdGhpcy5xdWV1ZS5lbnF1ZXVlKGtleSk7XG4gICAgICBjb25zdCByZXMgPSBhd2FpdCB0aGlzLmNsaWVudC5nZXQoa2V5KTtcbiAgICAgIGlmICghcmVzKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuICAgICAgcmV0dXJuIEpTT04ucGFyc2UocmVzKTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGxvZ2dlci5lcnJvcignUmVkaXNDYWNoZUFkYXB0ZXIgZXJyb3Igb24gZ2V0JywgeyBlcnJvcjogZXJyIH0pO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIHB1dChrZXksIHZhbHVlLCB0dGwgPSB0aGlzLnR0bCkge1xuICAgIHZhbHVlID0gSlNPTi5zdHJpbmdpZnkodmFsdWUpO1xuICAgIGRlYnVnKCdwdXQnLCB7IGtleSwgdmFsdWUsIHR0bCB9KTtcbiAgICBhd2FpdCB0aGlzLnF1ZXVlLmVucXVldWUoa2V5KTtcbiAgICBpZiAodHRsID09PSAwKSB7XG4gICAgICAvLyB0dGwgb2YgemVybyBpcyBhIGxvZ2ljYWwgbm8tb3AsIGJ1dCByZWRpcyBjYW5ub3Qgc2V0IGV4cGlyZSB0aW1lIG9mIHplcm9cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAodHRsID09PSBJbmZpbml0eSkge1xuICAgICAgcmV0dXJuIHRoaXMuY2xpZW50LnNldChrZXksIHZhbHVlKTtcbiAgICB9XG5cbiAgICBpZiAoIWlzVmFsaWRUVEwodHRsKSkge1xuICAgICAgdHRsID0gdGhpcy50dGw7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmNsaWVudC5zZXQoa2V5LCB2YWx1ZSwgeyBQWDogdHRsIH0pO1xuICB9XG5cbiAgYXN5bmMgZGVsKGtleSkge1xuICAgIGRlYnVnKCdkZWwnLCB7IGtleSB9KTtcbiAgICBhd2FpdCB0aGlzLnF1ZXVlLmVucXVldWUoa2V5KTtcbiAgICByZXR1cm4gdGhpcy5jbGllbnQuZGVsKGtleSk7XG4gIH1cblxuICBhc3luYyBjbGVhcigpIHtcbiAgICBkZWJ1ZygnY2xlYXInKTtcbiAgICBhd2FpdCB0aGlzLnF1ZXVlLmVucXVldWUoRkxVU0hfREJfS0VZKTtcbiAgICByZXR1cm4gdGhpcy5jbGllbnQuc2VuZENvbW1hbmQoWydGTFVTSERCJ10pO1xuICB9XG5cbiAgLy8gVXNlZCBmb3IgdGVzdGluZ1xuICBnZXRBbGxLZXlzKCkge1xuICAgIHJldHVybiB0aGlzLmNsaWVudC5rZXlzKCcqJyk7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgUmVkaXNDYWNoZUFkYXB0ZXI7XG4iXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBLElBQUFBLE1BQUEsR0FBQUMsT0FBQTtBQUNBLElBQUFDLE9BQUEsR0FBQUMsc0JBQUEsQ0FBQUYsT0FBQTtBQUNBLElBQUFHLGdCQUFBLEdBQUFILE9BQUE7QUFBd0QsU0FBQUUsdUJBQUFFLENBQUEsV0FBQUEsQ0FBQSxJQUFBQSxDQUFBLENBQUFDLFVBQUEsR0FBQUQsQ0FBQSxLQUFBRSxPQUFBLEVBQUFGLENBQUE7QUFFeEQsTUFBTUcsaUJBQWlCLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDO0FBQ3JDLE1BQU1DLFlBQVksR0FBRyxjQUFjO0FBRW5DLFNBQVNDLEtBQUtBLENBQUMsR0FBR0MsSUFBUyxFQUFFO0VBQzNCLE1BQU1DLE9BQU8sR0FBRyxDQUFDLHFCQUFxQixHQUFHQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQ0MsTUFBTSxDQUFDSCxJQUFJLENBQUNJLEtBQUssQ0FBQyxDQUFDLEVBQUVKLElBQUks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
@@ -5,28 +5,47 @@ Object.defineProperty(exports, "__esModule", {
5
5
  });
6
6
  exports.RedisPubSub = void 0;
7
7
  var _redis = require("redis");
8
+ var _logger = require("../../logger");
8
9
  function createPublisher({
9
10
  redisURL,
10
11
  redisOptions = {}
11
12
  }) {
12
13
  redisOptions.no_ready_check = true;
13
- return (0, _redis.createClient)({
14
+ const client = (0, _redis.createClient)({
14
15
  url: redisURL,
15
16
  ...redisOptions
16
17
  });
18
+ client.on('error', err => {
19
+ _logger.logger.error('RedisPubSub Publisher client error', {
20
+ error: err
21
+ });
22
+ });
23
+ client.on('connect', () => {});
24
+ client.on('reconnecting', () => {});
25
+ client.on('ready', () => {});
26
+ return client;
17
27
  }
18
28
  function createSubscriber({
19
29
  redisURL,
20
30
  redisOptions = {}
21
31
  }) {
22
32
  redisOptions.no_ready_check = true;
23
- return (0, _redis.createClient)({
33
+ const client = (0, _redis.createClient)({
24
34
  url: redisURL,
25
35
  ...redisOptions
26
36
  });
37
+ client.on('error', err => {
38
+ _logger.logger.error('RedisPubSub Subscriber client error', {
39
+ error: err
40
+ });
41
+ });
42
+ client.on('connect', () => {});
43
+ client.on('reconnecting', () => {});
44
+ client.on('ready', () => {});
45
+ return client;
27
46
  }
28
47
  const RedisPubSub = exports.RedisPubSub = {
29
48
  createPublisher,
30
49
  createSubscriber
31
50
  };
32
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfcmVkaXMiLCJyZXF1aXJlIiwiY3JlYXRlUHVibGlzaGVyIiwicmVkaXNVUkwiLCJyZWRpc09wdGlvbnMiLCJub19yZWFkeV9jaGVjayIsImNyZWF0ZUNsaWVudCIsInVybCIsImNyZWF0ZVN1YnNjcmliZXIiLCJSZWRpc1B1YlN1YiIsImV4cG9ydHMiXSwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvQWRhcHRlcnMvUHViU3ViL1JlZGlzUHViU3ViLmpzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGNyZWF0ZUNsaWVudCB9IGZyb20gJ3JlZGlzJztcblxuZnVuY3Rpb24gY3JlYXRlUHVibGlzaGVyKHsgcmVkaXNVUkwsIHJlZGlzT3B0aW9ucyA9IHt9IH0pOiBhbnkge1xuICByZWRpc09wdGlvbnMubm9fcmVhZHlfY2hlY2sgPSB0cnVlO1xuICByZXR1cm4gY3JlYXRlQ2xpZW50KHsgdXJsOiByZWRpc1VSTCwgLi4ucmVkaXNPcHRpb25zIH0pO1xufVxuXG5mdW5jdGlvbiBjcmVhdGVTdWJzY3JpYmVyKHsgcmVkaXNVUkwsIHJlZGlzT3B0aW9ucyA9IHt9IH0pOiBhbnkge1xuICByZWRpc09wdGlvbnMubm9fcmVhZHlfY2hlY2sgPSB0cnVlO1xuICByZXR1cm4gY3JlYXRlQ2xpZW50KHsgdXJsOiByZWRpc1VSTCwgLi4ucmVkaXNPcHRpb25zIH0pO1xufVxuXG5jb25zdCBSZWRpc1B1YlN1YiA9IHtcbiAgY3JlYXRlUHVibGlzaGVyLFxuICBjcmVhdGVTdWJzY3JpYmVyLFxufTtcblxuZXhwb3J0IHsgUmVkaXNQdWJTdWIgfTtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUEsSUFBQUEsTUFBQSxHQUFBQyxPQUFBO0FBRUEsU0FBU0MsZUFBZUEsQ0FBQztFQUFFQyxRQUFRO0VBQUVDLFlBQVksR0FBRyxDQUFDO0FBQUUsQ0FBQyxFQUFPO0VBQzdEQSxZQUFZLENBQUNDLGNBQWMsR0FBRyxJQUFJO0VBQ2xDLE9BQU8sSUFBQUMsbUJBQVksRUFBQztJQUFFQyxHQUFHLEVBQUVKLFFBQVE7SUFBRSxHQUFHQztFQUFhLENBQUMsQ0FBQztBQUN6RDtBQUVBLFNBQVNJLGdCQUFnQkEsQ0FBQztFQUFFTCxRQUFRO0VBQUVDLFlBQVksR0FBRyxDQUFDO0FBQUUsQ0FBQyxFQUFPO0VBQzlEQSxZQUFZLENBQUNDLGNBQWMsR0FBRyxJQUFJO0VBQ2xDLE9BQU8sSUFBQUMsbUJBQVksRUFBQztJQUFFQyxHQUFHLEVBQUVKLFFBQVE7SUFBRSxHQUFHQztFQUFhLENBQUMsQ0FBQztBQUN6RDtBQUVBLE1BQU1LLFdBQVcsR0FBQUMsT0FBQSxDQUFBRCxXQUFBLEdBQUc7RUFDbEJQLGVBQWU7RUFDZk07QUFDRixDQUFDIiwiaWdub3JlTGlzdCI6W119
51
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfcmVkaXMiLCJyZXF1aXJlIiwiX2xvZ2dlciIsImNyZWF0ZVB1Ymxpc2hlciIsInJlZGlzVVJMIiwicmVkaXNPcHRpb25zIiwibm9fcmVhZHlfY2hlY2siLCJjbGllbnQiLCJjcmVhdGVDbGllbnQiLCJ1cmwiLCJvbiIsImVyciIsImxvZ2dlciIsImVycm9yIiwiY3JlYXRlU3Vic2NyaWJlciIsIlJlZGlzUHViU3ViIiwiZXhwb3J0cyJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9BZGFwdGVycy9QdWJTdWIvUmVkaXNQdWJTdWIuanMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgY3JlYXRlQ2xpZW50IH0gZnJvbSAncmVkaXMnO1xuaW1wb3J0IHsgbG9nZ2VyIH0gZnJvbSAnLi4vLi4vbG9nZ2VyJztcblxuZnVuY3Rpb24gY3JlYXRlUHVibGlzaGVyKHsgcmVkaXNVUkwsIHJlZGlzT3B0aW9ucyA9IHt9IH0pOiBhbnkge1xuICByZWRpc09wdGlvbnMubm9fcmVhZHlfY2hlY2sgPSB0cnVlO1xuICBjb25zdCBjbGllbnQgPSBjcmVhdGVDbGllbnQoeyB1cmw6IHJlZGlzVVJMLCAuLi5yZWRpc09wdGlvbnMgfSk7XG4gIGNsaWVudC5vbignZXJyb3InLCBlcnIgPT4geyBsb2dnZXIuZXJyb3IoJ1JlZGlzUHViU3ViIFB1Ymxpc2hlciBjbGllbnQgZXJyb3InLCB7IGVycm9yOiBlcnIgfSkgfSk7XG4gIGNsaWVudC5vbignY29ubmVjdCcsICgpID0+IHt9KTtcbiAgY2xpZW50Lm9uKCdyZWNvbm5lY3RpbmcnLCAoKSA9PiB7fSk7XG4gIGNsaWVudC5vbigncmVhZHknLCAoKSA9PiB7fSk7XG4gIHJldHVybiBjbGllbnQ7XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZVN1YnNjcmliZXIoeyByZWRpc1VSTCwgcmVkaXNPcHRpb25zID0ge30gfSk6IGFueSB7XG4gIHJlZGlzT3B0aW9ucy5ub19yZWFkeV9jaGVjayA9IHRydWU7XG4gIGNvbnN0IGNsaWVudCA9IGNyZWF0ZUNsaWVudCh7IHVybDogcmVkaXNVUkwsIC4uLnJlZGlzT3B0aW9ucyB9KTtcbiAgY2xpZW50Lm9uKCdlcnJvcicsIGVyciA9PiB7IGxvZ2dlci5lcnJvcignUmVkaXNQdWJTdWIgU3Vic2NyaWJlciBjbGllbnQgZXJyb3InLCB7IGVycm9yOiBlcnIgfSkgfSk7XG4gIGNsaWVudC5vbignY29ubmVjdCcsICgpID0+IHt9KTtcbiAgY2xpZW50Lm9uKCdyZWNvbm5lY3RpbmcnLCAoKSA9PiB7fSk7XG4gIGNsaWVudC5vbigncmVhZHknLCAoKSA9PiB7fSk7XG4gIHJldHVybiBjbGllbnQ7XG59XG5cbmNvbnN0IFJlZGlzUHViU3ViID0ge1xuICBjcmVhdGVQdWJsaXNoZXIsXG4gIGNyZWF0ZVN1YnNjcmliZXIsXG59O1xuXG5leHBvcnQgeyBSZWRpc1B1YlN1YiB9O1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQSxJQUFBQSxNQUFBLEdBQUFDLE9BQUE7QUFDQSxJQUFBQyxPQUFBLEdBQUFELE9BQUE7QUFFQSxTQUFTRSxlQUFlQSxDQUFDO0VBQUVDLFFBQVE7RUFBRUMsWUFBWSxHQUFHLENBQUM7QUFBRSxDQUFDLEVBQU87RUFDN0RBLFlBQVksQ0FBQ0MsY0FBYyxHQUFHLElBQUk7RUFDbEMsTUFBTUMsTUFBTSxHQUFHLElBQUFDLG1CQUFZLEVBQUM7SUFBRUMsR0FBRyxFQUFFTCxRQUFRO0lBQUUsR0FBR0M7RUFBYSxDQUFDLENBQUM7RUFDL0RFLE1BQU0sQ0FBQ0csRUFBRSxDQUFDLE9BQU8sRUFBRUMsR0FBRyxJQUFJO0lBQUVDLGNBQU0sQ0FBQ0MsS0FBSyxDQUFDLG9DQUFvQyxFQUFFO01BQUVBLEtBQUssRUFBRUY7SUFBSSxDQUFDLENBQUM7RUFBQyxDQUFDLENBQUM7RUFDakdKLE1BQU0sQ0FBQ0csRUFBRSxDQUFDLFNBQVMsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDO0VBQzlCSCxNQUFNLENBQUNHLEVBQUUsQ0FBQyxjQUFjLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQztFQUNuQ0gsTUFBTSxDQUFDRyxFQUFFLENBQUMsT0FBTyxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUM7RUFDNUIsT0FBT0gsTUFBTTtBQUNmO0FBRUEsU0FBU08sZ0JBQWdCQSxDQUFDO0VBQUVWLFFBQVE7RUFBRUMsWUFBWSxHQUFHLENBQUM7QUFBRSxDQUFDLEVBQU87RUFDOURBLFlBQVksQ0FBQ0MsY0FBYyxHQUFHLElBQUk7RUFDbEMsTUFBTUMsTUFBTSxHQUFHLElBQUFDLG1CQUFZLEVBQUM7SUFBRUMsR0FBRyxFQUFFTCxRQUFRO0lBQUUsR0FBR0M7RUFBYSxDQUFDLENBQUM7RUFDL0RFLE1BQU0sQ0FBQ0csRUFBRSxDQUFDLE9BQU8sRUFBRUMsR0FBRyxJQUFJO0lBQUVDLGNBQU0sQ0FBQ0MsS0FBSyxDQUFDLHFDQUFxQyxFQUFFO01BQUVBLEtBQUssRUFBRUY7SUFBSSxDQUFDLENBQUM7RUFBQyxDQUFDLENBQUM7RUFDbEdKLE1BQU0sQ0FBQ0csRUFBRSxDQUFDLFNBQVMsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDO0VBQzlCSCxNQUFNLENBQUNHLEVBQUUsQ0FBQyxjQUFjLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQztFQUNuQ0gsTUFBTSxDQUFDRyxFQUFFLENBQUMsT0FBTyxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUM7RUFDNUIsT0FBT0gsTUFBTTtBQUNmO0FBRUEsTUFBTVEsV0FBVyxHQUFBQyxPQUFBLENBQUFELFdBQUEsR0FBRztFQUNsQlosZUFBZTtFQUNmVztBQUNGLENBQUMiLCJpZ25vcmVMaXN0IjpbXX0=
@@ -50,14 +50,13 @@ class UserController extends _AdaptableController.default {
50
50
  }
51
51
  return true;
52
52
  }
53
- async verifyEmail(username, token) {
53
+ async verifyEmail(token) {
54
54
  if (!this.shouldVerifyEmails) {
55
55
  // Trying to verify email when not enabled
56
56
  // TODO: Better error here.
57
57
  throw undefined;
58
58
  }
59
59
  const query = {
60
- username: username,
61
60
  _email_verify_token: token
62
61
  };
63
62
  const updateFields = {
@@ -79,45 +78,38 @@ class UserController extends _AdaptableController.default {
79
78
  };
80
79
  }
81
80
  const maintenanceAuth = Auth.maintenance(this.config);
82
- var findUserForEmailVerification = await RestQuery({
81
+ const restQuery = await RestQuery({
83
82
  method: RestQuery.Method.get,
84
83
  config: this.config,
85
84
  auth: maintenanceAuth,
86
85
  className: '_User',
87
- restWhere: {
88
- username
89
- }
90
- });
91
- return findUserForEmailVerification.execute().then(result => {
92
- if (result.results.length && result.results[0].emailVerified) {
93
- return Promise.resolve(result.results.length[0]);
94
- } else if (result.results.length) {
95
- query.objectId = result.results[0].objectId;
96
- }
97
- return _rest.default.update(this.config, maintenanceAuth, '_User', query, updateFields);
86
+ restWhere: query
98
87
  });
88
+ const result = await restQuery.execute();
89
+ if (result.results.length) {
90
+ query.objectId = result.results[0].objectId;
91
+ }
92
+ return await _rest.default.update(this.config, maintenanceAuth, '_User', query, updateFields);
99
93
  }
100
- checkResetTokenValidity(username, token) {
101
- return this.config.database.find('_User', {
102
- username: username,
94
+ async checkResetTokenValidity(token) {
95
+ const results = await this.config.database.find('_User', {
103
96
  _perishable_token: token
104
97
  }, {
105
98
  limit: 1
106
- }, Auth.maintenance(this.config)).then(results => {
107
- if (results.length != 1) {
108
- throw 'Failed to reset password: username / email / token is invalid';
99
+ }, Auth.maintenance(this.config));
100
+ if (results.length !== 1) {
101
+ throw 'Failed to reset password: username / email / token is invalid';
102
+ }
103
+ if (this.config.passwordPolicy && this.config.passwordPolicy.resetTokenValidityDuration) {
104
+ let expiresDate = results[0]._perishable_token_expires_at;
105
+ if (expiresDate && expiresDate.__type == 'Date') {
106
+ expiresDate = new Date(expiresDate.iso);
109
107
  }
110
- if (this.config.passwordPolicy && this.config.passwordPolicy.resetTokenValidityDuration) {
111
- let expiresDate = results[0]._perishable_token_expires_at;
112
- if (expiresDate && expiresDate.__type == 'Date') {
113
- expiresDate = new Date(expiresDate.iso);
114
- }
115
- if (expiresDate < new Date()) {
116
- throw 'The password reset link has expired';
117
- }
108
+ if (expiresDate < new Date()) {
109
+ throw 'The password reset link has expired';
118
110
  }
119
- return results[0];
120
- });
111
+ }
112
+ return results[0];
121
113
  }
122
114
  async getUserIfNeeded(user) {
123
115
  var where = {};
@@ -127,6 +119,9 @@ class UserController extends _AdaptableController.default {
127
119
  if (user.email) {
128
120
  where.email = user.email;
129
121
  }
122
+ if (user._email_verify_token) {
123
+ where._email_verify_token = user._email_verify_token;
124
+ }
130
125
  var query = await RestQuery({
131
126
  method: RestQuery.Method.get,
132
127
  config: this.config,
@@ -163,8 +158,7 @@ class UserController extends _AdaptableController.default {
163
158
  if (!shouldSendEmail) {
164
159
  return;
165
160
  }
166
- const username = encodeURIComponent(fetchedUser.username);
167
- const link = buildEmailLink(this.config.verifyEmailURL, username, token, this.config);
161
+ const link = buildEmailLink(this.config.verifyEmailURL, token, this.config);
168
162
  const options = {
169
163
  appName: this.config.appName,
170
164
  link: link,
@@ -212,9 +206,10 @@ class UserController extends _AdaptableController.default {
212
206
  username: user.username
213
207
  }, user);
214
208
  }
215
- async resendVerificationEmail(username, req) {
209
+ async resendVerificationEmail(username, req, token) {
216
210
  const aUser = await this.getUserIfNeeded({
217
- username: username
211
+ username,
212
+ _email_verify_token: token
218
213
  });
219
214
  if (!aUser || aUser.emailVerified) {
220
215
  throw undefined;
@@ -281,8 +276,7 @@ class UserController extends _AdaptableController.default {
281
276
  user = await this.setPasswordResetToken(email);
282
277
  }
283
278
  const token = encodeURIComponent(user._perishable_token);
284
- const username = encodeURIComponent(user.username);
285
- const link = buildEmailLink(this.config.requestResetPasswordURL, username, token, this.config);
279
+ const link = buildEmailLink(this.config.requestResetPasswordURL, token, this.config);
286
280
  const options = {
287
281
  appName: this.config.appName,
288
282
  link: link,
@@ -295,18 +289,19 @@ class UserController extends _AdaptableController.default {
295
289
  }
296
290
  return Promise.resolve(user);
297
291
  }
298
- updatePassword(username, token, password) {
299
- return this.checkResetTokenValidity(username, token).then(user => updateUserPassword(user, password, this.config)).then(user => {
292
+ async updatePassword(token, password) {
293
+ try {
294
+ const rawUser = await this.checkResetTokenValidity(token);
295
+ const user = await updateUserPassword(rawUser, password, this.config);
300
296
  const accountLockoutPolicy = new _AccountLockout.default(user, this.config);
301
- return accountLockoutPolicy.unlockAccount();
302
- }).catch(error => {
297
+ return await accountLockoutPolicy.unlockAccount();
298
+ } catch (error) {
303
299
  if (error && error.message) {
304
300
  // in case of Parse.Error, fail with the error message only
305
301
  return Promise.reject(error.message);
306
- } else {
307
- return Promise.reject(error);
308
302
  }
309
- });
303
+ return Promise.reject(error);
304
+ }
310
305
  }
311
306
  defaultVerificationEmail({
312
307
  link,
@@ -347,14 +342,14 @@ function updateUserPassword(user, password, config) {
347
342
  password: password
348
343
  }).then(() => user);
349
344
  }
350
- function buildEmailLink(destination, username, token, config) {
351
- const usernameAndToken = `token=${token}&username=${username}`;
345
+ function buildEmailLink(destination, token, config) {
346
+ token = `token=${token}`;
352
347
  if (config.parseFrameURL) {
353
348
  const destinationWithoutHost = destination.replace(config.publicServerURL, '');
354
- return `${config.parseFrameURL}?link=${encodeURIComponent(destinationWithoutHost)}&${usernameAndToken}`;
349
+ return `${config.parseFrameURL}?link=${encodeURIComponent(destinationWithoutHost)}&${token}`;
355
350
  } else {
356
- return `${destination}?${usernameAndToken}`;
351
+ return `${destination}?${token}`;
357
352
  }
358
353
  }
359
354
  var _default = exports.default = UserController;
360
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfY3J5cHRvVXRpbHMiLCJyZXF1aXJlIiwiX3RyaWdnZXJzIiwiX0FkYXB0YWJsZUNvbnRyb2xsZXIiLCJfaW50ZXJvcFJlcXVpcmVEZWZhdWx0IiwiX01haWxBZGFwdGVyIiwiX3Jlc3QiLCJfbm9kZSIsIl9BY2NvdW50TG9ja291dCIsIl9Db25maWciLCJlIiwiX19lc01vZHVsZSIsImRlZmF1bHQiLCJSZXN0UXVlcnkiLCJBdXRoIiwiVXNlckNvbnRyb2xsZXIiLCJBZGFwdGFibGVDb250cm9sbGVyIiwiY29uc3RydWN0b3IiLCJhZGFwdGVyIiwiYXBwSWQiLCJvcHRpb25zIiwiY29uZmlnIiwiQ29uZmlnIiwiZ2V0IiwidmFsaWRhdGVBZGFwdGVyIiwic2hvdWxkVmVyaWZ5RW1haWxzIiwiZXhwZWN0ZWRBZGFwdGVyVHlwZSIsIk1haWxBZGFwdGVyIiwidmVyaWZ5VXNlckVtYWlscyIsInNldEVtYWlsVmVyaWZ5VG9rZW4iLCJ1c2VyIiwicmVxIiwic3RvcmFnZSIsInNob3VsZFNlbmRFbWFpbCIsIlByb21pc2UiLCJyZXNvbHZlIiwic2VuZFZlcmlmaWNhdGlvbkVtYWlsIiwiX2VtYWlsX3ZlcmlmeV90b2tlbiIsInJhbmRvbVN0cmluZyIsImZpZWxkc0NoYW5nZWRCeVRyaWdnZXIiLCJpbmNsdWRlcyIsImVtYWlsVmVyaWZpZWQiLCJlbWFpbFZlcmlmeVRva2VuVmFsaWRpdHlEdXJhdGlvbiIsIl9lbWFpbF92ZXJpZnlfdG9rZW5fZXhwaXJlc19hdCIsIlBhcnNlIiwiX2VuY29kZSIsImdlbmVyYXRlRW1haWxWZXJpZnlUb2tlbkV4cGlyZXNBdCIsInZlcmlmeUVtYWlsIiwidXNlcm5hbWUiLCJ0b2tlbiIsInVuZGVmaW5lZCIsInF1ZXJ5IiwidXBkYXRlRmllbGRzIiwiX19vcCIsIiRndCIsIkRhdGUiLCJtYWludGVuYW5jZUF1dGgiLCJtYWludGVuYW5jZSIsImZpbmRVc2VyRm9yRW1haWxWZXJpZmljYXRpb24iLCJtZXRob2QiLCJNZXRob2QiLCJhdXRoIiwiY2xhc3NOYW1lIiwicmVzdFdoZXJlIiwiZXhlY3V0ZSIsInRoZW4iLCJyZXN1bHQiLCJyZXN1bHRzIiwibGVuZ3RoIiwib2JqZWN0SWQiLCJyZXN0IiwidXBkYXRlIiwiY2hlY2tSZXNldFRva2VuVmFsaWRpdHkiLCJkYXRhYmFzZSIsImZpbmQiLCJfcGVyaXNoYWJsZV90b2tlbiIsImxpbWl0IiwicGFzc3dvcmRQb2xpY3kiLCJyZXNldFRva2VuVmFsaWRpdHlEdXJhdGlvbiIsImV4cGlyZXNEYXRlIiwiX3BlcmlzaGFibGVfdG9rZW5fZXhwaXJlc19hdCIsIl9fdHlwZSIsImlzbyIsImdldFVzZXJJZk5lZWRlZCIsIndoZXJlIiwiZW1haWwiLCJydW5CZWZvcmVGaW5kIiwibWFzdGVyIiwiZW5jb2RlVVJJQ29tcG9uZW50IiwiZmV0Y2hlZFVzZXIiLCJzZW5kVXNlckVtYWlsVmVyaWZpY2F0aW9uIiwicmVzcG9uc2UiLCJPYmplY3QiLCJmcm9tSlNPTiIsImlzTWFzdGVyIiwibGluayIsImJ1aWxkRW1haWxMaW5rIiwidmVyaWZ5RW1haWxVUkwiLCJhcHBOYW1lIiwiaW5mbGF0ZSIsInNlbmRNYWlsIiwiZGVmYXVsdFZlcmlmaWNhdGlvbkVtYWlsIiwicmVnZW5lcmF0ZUVtYWlsVmVyaWZ5VG9rZW4iLCJpbnN0YWxsYXRpb25JZCIsImlwIiwiZW1haWxWZXJpZnlUb2tlblJldXNlSWZWYWxpZCIsInNob3VsZFNlbmQiLCJvYmplY3QiLCJVc2VyIiwiYXNzaWduIiwicmVzZW5kUmVxdWVzdCIsInJlc2VuZFZlcmlmaWNhdGlvbkVtYWlsIiwiYVVzZXIiLCJnZW5lcmF0ZSIsInNldFBhc3N3b3JkUmVzZXRUb2tlbiIsImdlbmVyYXRlUGFzc3dvcmRSZXNldFRva2VuRXhwaXJlc0F0IiwiJG9yIiwiJGV4aXN0cyIsInNlbmRQYXNzd29yZFJlc2V0RW1haWwiLCJyZXNldFRva2VuUmV1c2VJZlZhbGlkIiwicmVxdWVzdFJlc2V0UGFzc3dvcmRVUkwiLCJkZWZhdWx0UmVzZXRQYXNzd29yZEVtYWlsIiwidXBkYXRlUGFzc3dvcmQiLCJwYXNzd29yZCIsInVwZGF0ZVVzZXJQYXNzd29yZCIsImFjY291bnRMb2Nrb3V0UG9saWN5IiwiQWNjb3VudExvY2tvdXQiLCJ1bmxvY2tBY2NvdW50IiwiY2F0Y2giLCJlcnJvciIsIm1lc3NhZ2UiLCJyZWplY3QiLCJ0ZXh0IiwidG8iLCJzdWJqZWN0IiwiZXhwb3J0cyIsImRlc3RpbmF0aW9uIiwidXNlcm5hbWVBbmRUb2tlbiIsInBhcnNlRnJhbWVVUkwiLCJkZXN0aW5hdGlvbldpdGhvdXRIb3N0IiwicmVwbGFjZSIsInB1YmxpY1NlcnZlclVSTCIsIl9kZWZhdWx0Il0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL0NvbnRyb2xsZXJzL1VzZXJDb250cm9sbGVyLmpzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHJhbmRvbVN0cmluZyB9IGZyb20gJy4uL2NyeXB0b1V0aWxzJztcbmltcG9ydCB7IGluZmxhdGUgfSBmcm9tICcuLi90cmlnZ2Vycyc7XG5pbXBvcnQgQWRhcHRhYmxlQ29udHJvbGxlciBmcm9tICcuL0FkYXB0YWJsZUNvbnRyb2xsZXInO1xuaW1wb3J0IE1haWxBZGFwdGVyIGZyb20gJy4uL0FkYXB0ZXJzL0VtYWlsL01haWxBZGFwdGVyJztcbmltcG9ydCByZXN0IGZyb20gJy4uL3Jlc3QnO1xuaW1wb3J0IFBhcnNlIGZyb20gJ3BhcnNlL25vZGUnO1xuaW1wb3J0IEFjY291bnRMb2Nrb3V0IGZyb20gJy4uL0FjY291bnRMb2Nrb3V0JztcbmltcG9ydCBDb25maWcgZnJvbSAnLi4vQ29uZmlnJztcblxudmFyIFJlc3RRdWVyeSA9IHJlcXVpcmUoJy4uL1Jlc3RRdWVyeScpO1xudmFyIEF1dGggPSByZXF1aXJlKCcuLi9BdXRoJyk7XG5cbmV4cG9ydCBjbGFzcyBVc2VyQ29udHJvbGxlciBleHRlbmRzIEFkYXB0YWJsZUNvbnRyb2xsZXIge1xuICBjb25zdHJ1Y3RvcihhZGFwdGVyLCBhcHBJZCwgb3B0aW9ucyA9IHt9KSB7XG4gICAgc3VwZXIoYWRhcHRlciwgYXBwSWQsIG9wdGlvbnMpO1xuICB9XG5cbiAgZ2V0IGNvbmZpZygpIHtcbiAgICByZXR1cm4gQ29uZmlnLmdldCh0aGlzLmFwcElkKTtcbiAgfVxuXG4gIHZhbGlkYXRlQWRhcHRlcihhZGFwdGVyKSB7XG4gICAgLy8gQWxsb3cgbm8gYWRhcHRlclxuICAgIGlmICghYWRhcHRlciAmJiAhdGhpcy5zaG91bGRWZXJpZnlFbWFpbHMpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgc3VwZXIudmFsaWRhdGVBZGFwdGVyKGFkYXB0ZXIpO1xuICB9XG5cbiAgZXhwZWN0ZWRBZGFwdGVyVHlwZSgpIHtcbiAgICByZXR1cm4gTWFpbEFkYXB0ZXI7XG4gIH1cblxuICBnZXQgc2hvdWxkVmVyaWZ5RW1haWxzKCkge1xuICAgIHJldHVybiAodGhpcy5jb25maWcgfHwgdGhpcy5vcHRpb25zKS52ZXJpZnlVc2VyRW1haWxzO1xuICB9XG5cbiAgYXN5bmMgc2V0RW1haWxWZXJpZnlUb2tlbih1c2VyLCByZXEsIHN0b3JhZ2UgPSB7fSkge1xuICAgIGNvbnN0IHNob3VsZFNlbmRFbWFpbCA9XG4gICAgICB0aGlzLnNob3VsZFZlcmlmeUVtYWlscyA9PT0gdHJ1ZSB8fFxuICAgICAgKHR5cGVvZiB0aGlzLnNob3VsZFZlcmlmeUVtYWlscyA9PT0gJ2Z1bmN0aW9uJyAmJlxuICAgICAgICAoYXdhaXQgUHJvbWlzZS5yZXNvbHZlKHRoaXMuc2hvdWxkVmVyaWZ5RW1haWxzKHJlcSkpKSA9PT0gdHJ1ZSk7XG4gICAgaWYgKCFzaG91bGRTZW5kRW1haWwpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgc3RvcmFnZS5zZW5kVmVyaWZpY2F0aW9uRW1haWwgPSB0cnVlO1xuICAgIHVzZXIuX2VtYWlsX3ZlcmlmeV90b2tlbiA9IHJhbmRvbVN0cmluZygyNSk7XG4gICAgaWYgKFxuICAgICAgIXN0b3JhZ2UuZmllbGRzQ2hhbmdlZEJ5VHJpZ2dlciB8fFxuICAgICAgIXN0b3JhZ2UuZmllbGRzQ2hhbmdlZEJ5VHJpZ2dlci5pbmNsdWRlcygnZW1haWxWZXJpZmllZCcpXG4gICAgKSB7XG4gICAgICB1c2VyLmVtYWlsVmVyaWZpZWQgPSBmYWxzZTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5jb25maWcuZW1haWxWZXJpZnlUb2tlblZhbGlkaXR5RHVyYXRpb24pIHtcbiAgICAgIHVzZXIuX2VtYWlsX3ZlcmlmeV90b2tlbl9leHBpcmVzX2F0ID0gUGFyc2UuX2VuY29kZShcbiAgICAgICAgdGhpcy5jb25maWcuZ2VuZXJhdGVFbWFpbFZlcmlmeVRva2VuRXhwaXJlc0F0KClcbiAgICAgICk7XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgYXN5bmMgdmVyaWZ5RW1haWwodXNlcm5hbWUsIHRva2VuKSB7XG4gICAgaWYgKCF0aGlzLnNob3VsZFZlcmlmeUVtYWlscykge1xuICAgICAgLy8gVHJ5aW5nIHRvIHZlcmlmeSBlbWFpbCB3aGVuIG5vdCBlbmFibGVkXG4gICAgICAvLyBUT0RPOiBCZXR0ZXIgZXJyb3IgaGVyZS5cbiAgICAgIHRocm93IHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICBjb25zdCBxdWVyeSA9IHsgdXNlcm5hbWU6IHVzZXJuYW1lLCBfZW1haWxfdmVyaWZ5X3Rva2VuOiB0b2tlbiB9O1xuICAgIGNvbnN0IHVwZGF0ZUZpZWxkcyA9IHtcbiAgICAgIGVtYWlsVmVyaWZpZWQ6IHRydWUsXG4gICAgICBfZW1haWxfdmVyaWZ5X3Rva2VuOiB7IF9fb3A6ICdEZWxldGUnIH0sXG4gICAgfTtcblxuICAgIC8vIGlmIHRoZSBlbWFpbCB2ZXJpZnkgdG9rZW4gbmVlZHMgdG8gYmUgdmFsaWRhdGVkIHRoZW5cbiAgICAvLyBhZGQgYWRkaXRpb25hbCBxdWVyeSBwYXJhbXMgYW5kIGFkZGl0aW9uYWwgZmllbGRzIHRoYXQgbmVlZCB0byBiZSB1cGRhdGVkXG4gICAgaWYgKHRoaXMuY29uZmlnLmVtYWlsVmVyaWZ5VG9rZW5WYWxpZGl0eUR1cmF0aW9uKSB7XG4gICAgICBxdWVyeS5lbWFpbFZlcmlmaWVkID0gZmFsc2U7XG4gICAgICBxdWVyeS5fZW1haWxfdmVyaWZ5X3Rva2VuX2V4cGlyZXNfYXQgPSB7ICRndDogUGFyc2UuX2VuY29kZShuZXcgRGF0ZSgpKSB9O1xuXG4gICAgICB1cGRhdGVGaWVsZHMuX2VtYWlsX3ZlcmlmeV90b2tlbl9leHBpcmVzX2F0ID0geyBfX29wOiAnRGVsZXRlJyB9O1xuICAgIH1cbiAgICBjb25zdCBtYWludGVuYW5jZUF1dGggPSBBdXRoLm1haW50ZW5hbmNlKHRoaXMuY29uZmlnKTtcbiAgICB2YXIgZmluZFVzZXJGb3JFbWFpbFZlcmlmaWNhdGlvbiA9IGF3YWl0IFJlc3RRdWVyeSh7XG4gICAgICBtZXRob2Q6IFJlc3RRdWVyeS5NZXRob2QuZ2V0LFxuICAgICAgY29uZmlnOiB0aGlzLmNvbmZpZyxcbiAgICAgIGF1dGg6IG1haW50ZW5hbmNlQXV0aCxcbiAgICAgIGNsYXNzTmFtZTogJ19Vc2VyJyxcbiAgICAgIHJlc3RXaGVyZToge1xuICAgICAgICB1c2VybmFtZSxcbiAgICAgIH0sXG4gICAgfSk7XG4gICAgcmV0dXJuIGZpbmRVc2VyRm9yRW1haWxWZXJpZmljYXRpb24uZXhlY3V0ZSgpLnRoZW4ocmVzdWx0ID0+IHtcbiAgICAgIGlmIChyZXN1bHQucmVzdWx0cy5sZW5ndGggJiYgcmVzdWx0LnJlc3VsdHNbMF0uZW1haWxWZXJpZmllZCkge1xuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHJlc3VsdC5yZXN1bHRzLmxlbmd0aFswXSk7XG4gICAgICB9IGVsc2UgaWYgKHJlc3VsdC5yZXN1bHRzLmxlbmd0aCkge1xuICAgICAgICBxdWVyeS5vYmplY3RJZCA9IHJlc3VsdC5yZXN1bHRzWzBdLm9iamVjdElkO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHJlc3QudXBkYXRlKHRoaXMuY29uZmlnLCBtYWludGVuYW5jZUF1dGgsICdfVXNlcicsIHF1ZXJ5LCB1cGRhdGVGaWVsZHMpO1xuICAgIH0pO1xuICB9XG5cbiAgY2hlY2tSZXNldFRva2VuVmFsaWRpdHkodXNlcm5hbWUsIHRva2VuKSB7XG4gICAgcmV0dXJuIHRoaXMuY29uZmlnLmRhdGFiYXNlXG4gICAgICAuZmluZChcbiAgICAgICAgJ19Vc2VyJyxcbiAgICAgICAge1xuICAgICAgICAgIHVzZXJuYW1lOiB1c2VybmFtZSxcbiAgICAgICAgICBfcGVyaXNoYWJsZV90b2tlbjogdG9rZW4sXG4gICAgICAgIH0sXG4gICAgICAgIHsgbGltaXQ6IDEgfSxcbiAgICAgICAgQXV0aC5tYWludGVuYW5jZSh0aGlzLmNvbmZpZylcbiAgICAgIClcbiAgICAgIC50aGVuKHJlc3VsdHMgPT4ge1xuICAgICAgICBpZiAocmVzdWx0cy5sZW5ndGggIT0gMSkge1xuICAgICAgICAgIHRocm93ICdGYWlsZWQgdG8gcmVzZXQgcGFzc3dvcmQ6IHVzZXJuYW1lIC8gZW1haWwgLyB0b2tlbiBpcyBpbnZhbGlkJztcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLmNvbmZpZy5wYXNzd29yZFBvbGljeSAmJiB0aGlzLmNvbmZpZy5wYXNzd29yZFBvbGljeS5yZXNldFRva2VuVmFsaWRpdHlEdXJhdGlvbikge1xuICAgICAgICAgIGxldCBleHBpcmVzRGF0ZSA9IHJlc3VsdHNbMF0uX3BlcmlzaGFibGVfdG9rZW5fZXhwaXJlc19hdDtcbiAgICAgICAgICBpZiAoZXhwaXJlc0RhdGUgJiYgZXhwaXJlc0RhdGUuX190eXBlID09ICdEYXRlJykge1xuICAgICAgICAgICAgZXhwaXJlc0RhdGUgPSBuZXcgRGF0ZShleHBpcmVzRGF0ZS5pc28pO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoZXhwaXJlc0RhdGUgPCBuZXcgRGF0ZSgpKSB7IHRocm93ICdUaGUgcGFzc3dvcmQgcmVzZXQgbGluayBoYXMgZXhwaXJlZCc7IH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0c1swXTtcbiAgICAgIH0pO1xuICB9XG5cbiAgYXN5bmMgZ2V0VXNlcklmTmVlZGVkKHVzZXIpIHtcbiAgICB2YXIgd2hlcmUgPSB7fTtcbiAgICBpZiAodXNlci51c2VybmFtZSkge1xuICAgICAgd2hlcmUudXNlcm5hbWUgPSB1c2VyLnVzZXJuYW1lO1xuICAgIH1cbiAgICBpZiAodXNlci5lbWFpbCkge1xuICAgICAgd2hlcmUuZW1haWwgPSB1c2VyLmVtYWlsO1xuICAgIH1cblxuICAgIHZhciBxdWVyeSA9IGF3YWl0IFJlc3RRdWVyeSh7XG4gICAgICBtZXRob2Q6IFJlc3RRdWVyeS5NZXRob2QuZ2V0LFxuICAgICAgY29uZmlnOiB0aGlzLmNvbmZpZyxcbiAgICAgIHJ1bkJlZm9yZUZpbmQ6IGZhbHNlLFxuICAgICAgYXV0aDogQXV0aC5tYXN0ZXIodGhpcy5jb25maWcpLFxuICAgICAgY2xhc3NOYW1lOiAnX1VzZXInLFxuICAgICAgcmVzdFdoZXJlOiB3aGVyZSxcbiAgICB9KTtcbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBxdWVyeS5leGVjdXRlKCk7XG4gICAgaWYgKHJlc3VsdC5yZXN1bHRzLmxlbmd0aCAhPSAxKSB7XG4gICAgICB0aHJvdyB1bmRlZmluZWQ7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQucmVzdWx0c1swXTtcbiAgfVxuXG4gIGFzeW5jIHNlbmRWZXJpZmljYXRpb25FbWFpbCh1c2VyLCByZXEpIHtcbiAgICBpZiAoIXRoaXMuc2hvdWxkVmVyaWZ5RW1haWxzKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IHRva2VuID0gZW5jb2RlVVJJQ29tcG9uZW50KHVzZXIuX2VtYWlsX3ZlcmlmeV90b2tlbik7XG4gICAgLy8gV2UgbWF5IG5lZWQgdG8gZmV0Y2ggdGhlIHVzZXIgaW4gY2FzZSBvZiB1cGRhdGUgZW1haWw7IG9ubHkgdXNlIHRoZSBgZmV0Y2hlZFVzZXJgXG4gICAgLy8gZnJvbSB0aGlzIHBvaW50IG9ud2FyZHM7IGRvIG5vdCB1c2UgdGhlIGB1c2VyYCBhcyBpdCBtYXkgbm90IGNvbnRhaW4gYWxsIGZpZWxkcy5cbiAgICBjb25zdCBmZXRjaGVkVXNlciA9IGF3YWl0IHRoaXMuZ2V0VXNlcklmTmVlZGVkKHVzZXIpO1xuICAgIGxldCBzaG91bGRTZW5kRW1haWwgPSB0aGlzLmNvbmZpZy5zZW5kVXNlckVtYWlsVmVyaWZpY2F0aW9uO1xuICAgIGlmICh0eXBlb2Ygc2hvdWxkU2VuZEVtYWlsID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IFByb21pc2UucmVzb2x2ZShcbiAgICAgICAgdGhpcy5jb25maWcuc2VuZFVzZXJFbWFpbFZlcmlmaWNhdGlvbih7XG4gICAgICAgICAgdXNlcjogUGFyc2UuT2JqZWN0LmZyb21KU09OKHsgY2xhc3NOYW1lOiAnX1VzZXInLCAuLi5mZXRjaGVkVXNlciB9KSxcbiAgICAgICAgICBtYXN0ZXI6IHJlcS5hdXRoPy5pc01hc3RlcixcbiAgICAgICAgfSlcbiAgICAgICk7XG4gICAgICBzaG91bGRTZW5kRW1haWwgPSAhIXJlc3BvbnNlO1xuICAgIH1cbiAgICBpZiAoIXNob3VsZFNlbmRFbWFpbCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCB1c2VybmFtZSA9IGVuY29kZVVSSUNvbXBvbmVudChmZXRjaGVkVXNlci51c2VybmFtZSk7XG5cbiAgICBjb25zdCBsaW5rID0gYnVpbGRFbWFpbExpbmsodGhpcy5jb25maWcudmVyaWZ5RW1haWxVUkwsIHVzZXJuYW1lLCB0b2tlbiwgdGhpcy5jb25maWcpO1xuICAgIGNvbnN0IG9wdGlvbnMgPSB7XG4gICAgICBhcHBOYW1lOiB0aGlzLmNvbmZpZy5hcHBOYW1lLFxuICAgICAgbGluazogbGluayxcbiAgICAgIHVzZXI6IGluZmxhdGUoJ19Vc2VyJywgZmV0Y2hlZFVzZXIpLFxuICAgIH07XG4gICAgaWYgKHRoaXMuYWRhcHRlci5zZW5kVmVyaWZpY2F0aW9uRW1haWwpIHtcbiAgICAgIHRoaXMuYWRhcHRlci5zZW5kVmVyaWZpY2F0aW9uRW1haWwob3B0aW9ucyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuYWRhcHRlci5zZW5kTWFpbCh0aGlzLmRlZmF1bHRWZXJpZmljYXRpb25FbWFpbChvcHRpb25zKSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJlZ2VuZXJhdGVzIHRoZSBnaXZlbiB1c2VyJ3MgZW1haWwgdmVyaWZpY2F0aW9uIHRva2VuXG4gICAqXG4gICAqIEBwYXJhbSB1c2VyXG4gICAqIEByZXR1cm5zIHsqfVxuICAgKi9cbiAgYXN5bmMgcmVnZW5lcmF0ZUVtYWlsVmVyaWZ5VG9rZW4odXNlciwgbWFzdGVyLCBpbnN0YWxsYXRpb25JZCwgaXApIHtcbiAgICBjb25zdCB7IF9lbWFpbF92ZXJpZnlfdG9rZW4gfSA9IHVzZXI7XG4gICAgbGV0IHsgX2VtYWlsX3ZlcmlmeV90b2tlbl9leHBpcmVzX2F0IH0gPSB1c2VyO1xuICAgIGlmIChfZW1haWxfdmVyaWZ5X3Rva2VuX2V4cGlyZXNfYXQgJiYgX2VtYWlsX3ZlcmlmeV90b2tlbl9leHBpcmVzX2F0Ll9fdHlwZSA9PT0gJ0RhdGUnKSB7XG4gICAgICBfZW1haWxfdmVyaWZ5X3Rva2VuX2V4cGlyZXNfYXQgPSBfZW1haWxfdmVyaWZ5X3Rva2VuX2V4cGlyZXNfYXQuaXNvO1xuICAgIH1cbiAgICBpZiAoXG4gICAgICB0aGlzLmNvbmZpZy5lbWFpbFZlcmlmeVRva2VuUmV1c2VJZlZhbGlkICYmXG4gICAgICB0aGlzLmNvbmZpZy5lbWFpbFZlcmlmeVRva2VuVmFsaWRpdHlEdXJhdGlvbiAmJlxuICAgICAgX2VtYWlsX3ZlcmlmeV90b2tlbiAmJlxuICAgICAgbmV3IERhdGUoKSA8IG5ldyBEYXRlKF9lbWFpbF92ZXJpZnlfdG9rZW5fZXhwaXJlc19hdClcbiAgICApIHtcbiAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUodHJ1ZSk7XG4gICAgfVxuICAgIGNvbnN0IHNob3VsZFNlbmQgPSBhd2FpdCB0aGlzLnNldEVtYWlsVmVyaWZ5VG9rZW4odXNlciwge1xuICAgICAgb2JqZWN0OiBQYXJzZS5Vc2VyLmZyb21KU09OKE9iamVjdC5hc3NpZ24oeyBjbGFzc05hbWU6ICdfVXNlcicgfSwgdXNlcikpLFxuICAgICAgbWFzdGVyLFxuICAgICAgaW5zdGFsbGF0aW9uSWQsXG4gICAgICBpcCxcbiAgICAgIHJlc2VuZFJlcXVlc3Q6IHRydWVcbiAgICB9KTtcbiAgICBpZiAoIXNob3VsZFNlbmQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuY29uZmlnLmRhdGFiYXNlLnVwZGF0ZSgnX1VzZXInLCB7IHVzZXJuYW1lOiB1c2VyLnVzZXJuYW1lIH0sIHVzZXIpO1xuICB9XG5cbiAgYXN5bmMgcmVzZW5kVmVyaWZpY2F0aW9uRW1haWwodXNlcm5hbWUsIHJlcSkge1xuICAgIGNvbnN0IGFVc2VyID0gYXdhaXQgdGhpcy5nZXRVc2VySWZOZWVkZWQoeyB1c2VybmFtZTogdXNlcm5hbWUgfSk7XG4gICAgaWYgKCFhVXNlciB8fCBhVXNlci5lbWFpbFZlcmlmaWVkKSB7XG4gICAgICB0aHJvdyB1bmRlZmluZWQ7XG4gICAgfVxuICAgIGNvbnN0IGdlbmVyYXRlID0gYXdhaXQgdGhpcy5yZWdlbmVyYXRlRW1haWxWZXJpZnlUb2tlbihhVXNlciwgcmVxLmF1dGg/LmlzTWFzdGVyLCByZXEuYXV0aD8uaW5zdGFsbGF0aW9uSWQsIHJlcS5pcCk7XG4gICAgaWYgKGdlbmVyYXRlKSB7XG4gICAgICB0aGlzLnNlbmRWZXJpZmljYXRpb25FbWFpbChhVXNlciwgcmVxKTtcbiAgICB9XG4gIH1cblxuICBzZXRQYXNzd29yZFJlc2V0VG9rZW4oZW1haWwpIHtcbiAgICBjb25zdCB0b2tlbiA9IHsgX3BlcmlzaGFibGVfdG9rZW46IHJhbmRvbVN0cmluZygyNSkgfTtcblxuICAgIGlmICh0aGlzLmNvbmZpZy5wYXNzd29yZFBvbGljeSAmJiB0aGlzLmNvbmZpZy5wYXNzd29yZFBvbGljeS5yZXNldFRva2VuVmFsaWRpdHlEdXJhdGlvbikge1xuICAgICAgdG9rZW4uX3BlcmlzaGFibGVfdG9rZW5fZXhwaXJlc19hdCA9IFBhcnNlLl9lbmNvZGUoXG4gICAgICAgIHRoaXMuY29uZmlnLmdlbmVyYXRlUGFzc3dvcmRSZXNldFRva2VuRXhwaXJlc0F0KClcbiAgICAgICk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuY29uZmlnLmRhdGFiYXNlLnVwZGF0ZShcbiAgICAgICdfVXNlcicsXG4gICAgICB7ICRvcjogW3sgZW1haWwgfSwgeyB1c2VybmFtZTogZW1haWwsIGVtYWlsOiB7ICRleGlzdHM6IGZhbHNlIH0gfV0gfSxcbiAgICAgIHRva2VuLFxuICAgICAge30sXG4gICAgICB0cnVlXG4gICAgKTtcbiAgfVxuXG4gIGFzeW5jIHNlbmRQYXNzd29yZFJlc2V0RW1haWwoZW1haWwpIHtcbiAgICBpZiAoIXRoaXMuYWRhcHRlcikge1xuICAgICAgdGhyb3cgJ1RyeWluZyB0byBzZW5kIGEgcmVzZXQgcGFzc3dvcmQgYnV0IG5vIGFkYXB0ZXIgaXMgc2V0JztcbiAgICAgIC8vICBUT0RPOiBObyBhZGFwdGVyP1xuICAgIH1cbiAgICBsZXQgdXNlcjtcbiAgICBpZiAoXG4gICAgICB0aGlzLmNvbmZpZy5wYXNzd29yZFBvbGljeSAmJlxuICAgICAgdGhpcy5jb25maWcucGFzc3dvcmRQb2xpY3kucmVzZXRUb2tlblJldXNlSWZWYWxpZCAmJlxuICAgICAgdGhpcy5jb25maWcucGFzc3dvcmRQb2xpY3kucmVzZXRUb2tlblZhbGlkaXR5RHVyYXRpb25cbiAgICApIHtcbiAgICAgIGNvbnN0IHJlc3VsdHMgPSBhd2FpdCB0aGlzLmNvbmZpZy5kYXRhYmFzZS5maW5kKFxuICAgICAgICAnX1VzZXInLFxuICAgICAgICB7XG4gICAgICAgICAgJG9yOiBbXG4gICAgICAgICAgICB7IGVtYWlsLCBfcGVyaXNoYWJsZV90b2tlbjogeyAkZXhpc3RzOiB0cnVlIH0gfSxcbiAgICAgICAgICAgIHsgdXNlcm5hbWU6IGVtYWlsLCBlbWFpbDogeyAkZXhpc3RzOiBmYWxzZSB9LCBfcGVyaXNoYWJsZV90b2tlbjogeyAkZXhpc3RzOiB0cnVlIH0gfSxcbiAgICAgICAgICBdLFxuICAgICAgICB9LFxuICAgICAgICB7IGxpbWl0OiAxIH0sXG4gICAgICAgIEF1dGgubWFpbnRlbmFuY2UodGhpcy5jb25maWcpXG4gICAgICApO1xuICAgICAgaWYgKHJlc3VsdHMubGVuZ3RoID09IDEpIHtcbiAgICAgICAgbGV0IGV4cGlyZXNEYXRlID0gcmVzdWx0c1swXS5fcGVyaXNoYWJsZV90b2tlbl9leHBpcmVzX2F0O1xuICAgICAgICBpZiAoZXhwaXJlc0RhdGUgJiYgZXhwaXJlc0RhdGUuX190eXBlID09ICdEYXRlJykge1xuICAgICAgICAgIGV4cGlyZXNEYXRlID0gbmV3IERhdGUoZXhwaXJlc0RhdGUuaXNvKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZXhwaXJlc0RhdGUgPiBuZXcgRGF0ZSgpKSB7XG4gICAgICAgICAgdXNlciA9IHJlc3VsdHNbMF07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKCF1c2VyIHx8ICF1c2VyLl9wZXJpc2hhYmxlX3Rva2VuKSB7XG4gICAgICB1c2VyID0gYXdhaXQgdGhpcy5zZXRQYXNzd29yZFJlc2V0VG9rZW4oZW1haWwpO1xuICAgIH1cbiAgICBjb25zdCB0b2tlbiA9IGVuY29kZVVSSUNvbXBvbmVudCh1c2VyLl9wZXJpc2hhYmxlX3Rva2VuKTtcbiAgICBjb25zdCB1c2VybmFtZSA9IGVuY29kZVVSSUNvbXBvbmVudCh1c2VyLnVzZXJuYW1lKTtcblxuICAgIGNvbnN0IGxpbmsgPSBidWlsZEVtYWlsTGluayh0aGlzLmNvbmZpZy5yZXF1ZXN0UmVzZXRQYXNzd29yZFVSTCwgdXNlcm5hbWUsIHRva2VuLCB0aGlzLmNvbmZpZyk7XG4gICAgY29uc3Qgb3B0aW9ucyA9IHtcbiAgICAgIGFwcE5hbWU6IHRoaXMuY29uZmlnLmFwcE5hbWUsXG4gICAgICBsaW5rOiBsaW5rLFxuICAgICAgdXNlcjogaW5mbGF0ZSgnX1VzZXInLCB1c2VyKSxcbiAgICB9O1xuXG4gICAgaWYgKHRoaXMuYWRhcHRlci5zZW5kUGFzc3dvcmRSZXNldEVtYWlsKSB7XG4gICAgICB0aGlzLmFkYXB0ZXIuc2VuZFBhc3N3b3JkUmVzZXRFbWFpbChvcHRpb25zKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5hZGFwdGVyLnNlbmRNYWlsKHRoaXMuZGVmYXVsdFJlc2V0UGFzc3dvcmRFbWFpbChvcHRpb25zKSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh1c2VyKTtcbiAgfVxuXG4gIHVwZGF0ZVBhc3N3b3JkKHVzZXJuYW1lLCB0b2tlbiwgcGFzc3dvcmQpIHtcbiAgICByZXR1cm4gdGhpcy5jaGVja1Jlc2V0VG9rZW5WYWxpZGl0eSh1c2VybmFtZSwgdG9rZW4pXG4gICAgICAudGhlbih1c2VyID0+IHVwZGF0ZVVzZXJQYXNzd29yZCh1c2VyLCBwYXNzd29yZCwgdGhpcy5jb25maWcpKVxuICAgICAgLnRoZW4odXNlciA9PiB7XG4gICAgICAgIGNvbnN0IGFjY291bnRMb2Nrb3V0UG9saWN5ID0gbmV3IEFjY291bnRMb2Nrb3V0KHVzZXIsIHRoaXMuY29uZmlnKTtcbiAgICAgICAgcmV0dXJuIGFjY291bnRMb2Nrb3V0UG9saWN5LnVubG9ja0FjY291bnQoKTtcbiAgICAgIH0pXG4gICAgICAuY2F0Y2goZXJyb3IgPT4ge1xuICAgICAgICBpZiAoZXJyb3IgJiYgZXJyb3IubWVzc2FnZSkge1xuICAgICAgICAgIC8vIGluIGNhc2Ugb2YgUGFyc2UuRXJyb3IsIGZhaWwgd2l0aCB0aGUgZXJyb3IgbWVzc2FnZSBvbmx5XG4gICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KGVycm9yLm1lc3NhZ2UpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChlcnJvcik7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICB9XG5cbiAgZGVmYXVsdFZlcmlmaWNhdGlvbkVtYWlsKHsgbGluaywgdXNlciwgYXBwTmFtZSB9KSB7XG4gICAgY29uc3QgdGV4dCA9XG4gICAgICAnSGksXFxuXFxuJyArXG4gICAgICAnWW91IGFyZSBiZWluZyBhc2tlZCB0byBjb25maXJtIHRoZSBlLW1haWwgYWRkcmVzcyAnICtcbiAgICAgIHVzZXIuZ2V0KCdlbWFpbCcpICtcbiAgICAgICcgd2l0aCAnICtcbiAgICAgIGFwcE5hbWUgK1xuICAgICAgJ1xcblxcbicgK1xuICAgICAgJycgK1xuICAgICAgJ0NsaWNrIGhlcmUgdG8gY29uZmlybSBpdDpcXG4nICtcbiAgICAgIGxpbms7XG4gICAgY29uc3QgdG8gPSB1c2VyLmdldCgnZW1haWwnKTtcbiAgICBjb25zdCBzdWJqZWN0ID0gJ1BsZWFzZSB2ZXJpZnkgeW91ciBlLW1haWwgZm9yICcgKyBhcHBOYW1lO1xuICAgIHJldHVybiB7IHRleHQsIHRvLCBzdWJqZWN0IH07XG4gIH1cblxuICBkZWZhdWx0UmVzZXRQYXNzd29yZEVtYWlsKHsgbGluaywgdXNlciwgYXBwTmFtZSB9KSB7XG4gICAgY29uc3QgdGV4dCA9XG4gICAgICAnSGksXFxuXFxuJyArXG4gICAgICAnWW91IHJlcXVlc3RlZCB0byByZXNldCB5b3VyIHBhc3N3b3JkIGZvciAnICtcbiAgICAgIGFwcE5hbWUgK1xuICAgICAgKHVzZXIuZ2V0KCd1c2VybmFtZScpID8gXCIgKHlvdXIgdXNlcm5hbWUgaXMgJ1wiICsgdXNlci5nZXQoJ3VzZXJuYW1lJykgKyBcIicpXCIgOiAnJykgK1xuICAgICAgJy5cXG5cXG4nICtcbiAgICAgICcnICtcbiAgICAgICdDbGljayBoZXJlIHRvIHJlc2V0IGl0OlxcbicgK1xuICAgICAgbGluaztcbiAgICBjb25zdCB0byA9IHVzZXIuZ2V0KCdlbWFpbCcpIHx8IHVzZXIuZ2V0KCd1c2VybmFtZScpO1xuICAgIGNvbnN0IHN1YmplY3QgPSAnUGFzc3dvcmQgUmVzZXQgZm9yICcgKyBhcHBOYW1lO1xuICAgIHJldHVybiB7IHRleHQsIHRvLCBzdWJqZWN0IH07XG4gIH1cbn1cblxuLy8gTWFyayB0aGlzIHByaXZhdGVcbmZ1bmN0aW9uIHVwZGF0ZVVzZXJQYXNzd29yZCh1c2VyLCBwYXNzd29yZCwgY29uZmlnKSB7XG4gIHJldHVybiByZXN0XG4gICAgLnVwZGF0ZShcbiAgICAgIGNvbmZpZyxcbiAgICAgIEF1dGgubWFzdGVyKGNvbmZpZyksXG4gICAgICAnX1VzZXInLFxuICAgICAgeyBvYmplY3RJZDogdXNlci5vYmplY3RJZCB9LFxuICAgICAge1xuICAgICAgICBwYXNzd29yZDogcGFzc3dvcmQsXG4gICAgICB9XG4gICAgKVxuICAgIC50aGVuKCgpID0+IHVzZXIpO1xufVxuXG5mdW5jdGlvbiBidWlsZEVtYWlsTGluayhkZXN0aW5hdGlvbiwgdXNlcm5hbWUsIHRva2VuLCBjb25maWcpIHtcbiAgY29uc3QgdXNlcm5hbWVBbmRUb2tlbiA9IGB0b2tlbj0ke3Rva2VufSZ1c2VybmFtZT0ke3VzZXJuYW1lfWA7XG5cbiAgaWYgKGNvbmZpZy5wYXJzZUZyYW1lVVJMKSB7XG4gICAgY29uc3QgZGVzdGluYXRpb25XaXRob3V0SG9zdCA9IGRlc3RpbmF0aW9uLnJlcGxhY2UoY29uZmlnLnB1YmxpY1NlcnZlclVSTCwgJycpO1xuXG4gICAgcmV0dXJuIGAke2NvbmZpZy5wYXJzZUZyYW1lVVJMfT9saW5rPSR7ZW5jb2RlVVJJQ29tcG9uZW50KFxuICAgICAgZGVzdGluYXRpb25XaXRob3V0SG9zdFxuICAgICl9JiR7dXNlcm5hbWVBbmRUb2tlbn1gO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBgJHtkZXN0aW5hdGlvbn0/JHt1c2VybmFtZUFuZFRva2VufWA7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgVXNlckNvbnRyb2xsZXI7XG4iXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBLElBQUFBLFlBQUEsR0FBQUMsT0FBQTtBQUNBLElBQUFDLFNBQUEsR0FBQUQsT0FBQTtBQUNBLElBQUFFLG9CQUFBLEdBQUFDLHNCQUFBLENBQUFILE9BQUE7QUFDQSxJQUFBSSxZQUFBLEdBQUFELHNCQUFB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
355
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfY3J5cHRvVXRpbHMiLCJyZXF1aXJlIiwiX3RyaWdnZXJzIiwiX0FkYXB0YWJsZUNvbnRyb2xsZXIiLCJfaW50ZXJvcFJlcXVpcmVEZWZhdWx0IiwiX01haWxBZGFwdGVyIiwiX3Jlc3QiLCJfbm9kZSIsIl9BY2NvdW50TG9ja291dCIsIl9Db25maWciLCJlIiwiX19lc01vZHVsZSIsImRlZmF1bHQiLCJSZXN0UXVlcnkiLCJBdXRoIiwiVXNlckNvbnRyb2xsZXIiLCJBZGFwdGFibGVDb250cm9sbGVyIiwiY29uc3RydWN0b3IiLCJhZGFwdGVyIiwiYXBwSWQiLCJvcHRpb25zIiwiY29uZmlnIiwiQ29uZmlnIiwiZ2V0IiwidmFsaWRhdGVBZGFwdGVyIiwic2hvdWxkVmVyaWZ5RW1haWxzIiwiZXhwZWN0ZWRBZGFwdGVyVHlwZSIsIk1haWxBZGFwdGVyIiwidmVyaWZ5VXNlckVtYWlscyIsInNldEVtYWlsVmVyaWZ5VG9rZW4iLCJ1c2VyIiwicmVxIiwic3RvcmFnZSIsInNob3VsZFNlbmRFbWFpbCIsIlByb21pc2UiLCJyZXNvbHZlIiwic2VuZFZlcmlmaWNhdGlvbkVtYWlsIiwiX2VtYWlsX3ZlcmlmeV90b2tlbiIsInJhbmRvbVN0cmluZyIsImZpZWxkc0NoYW5nZWRCeVRyaWdnZXIiLCJpbmNsdWRlcyIsImVtYWlsVmVyaWZpZWQiLCJlbWFpbFZlcmlmeVRva2VuVmFsaWRpdHlEdXJhdGlvbiIsIl9lbWFpbF92ZXJpZnlfdG9rZW5fZXhwaXJlc19hdCIsIlBhcnNlIiwiX2VuY29kZSIsImdlbmVyYXRlRW1haWxWZXJpZnlUb2tlbkV4cGlyZXNBdCIsInZlcmlmeUVtYWlsIiwidG9rZW4iLCJ1bmRlZmluZWQiLCJxdWVyeSIsInVwZGF0ZUZpZWxkcyIsIl9fb3AiLCIkZ3QiLCJEYXRlIiwibWFpbnRlbmFuY2VBdXRoIiwibWFpbnRlbmFuY2UiLCJyZXN0UXVlcnkiLCJtZXRob2QiLCJNZXRob2QiLCJhdXRoIiwiY2xhc3NOYW1lIiwicmVzdFdoZXJlIiwicmVzdWx0IiwiZXhlY3V0ZSIsInJlc3VsdHMiLCJsZW5ndGgiLCJvYmplY3RJZCIsInJlc3QiLCJ1cGRhdGUiLCJjaGVja1Jlc2V0VG9rZW5WYWxpZGl0eSIsImRhdGFiYXNlIiwiZmluZCIsIl9wZXJpc2hhYmxlX3Rva2VuIiwibGltaXQiLCJwYXNzd29yZFBvbGljeSIsInJlc2V0VG9rZW5WYWxpZGl0eUR1cmF0aW9uIiwiZXhwaXJlc0RhdGUiLCJfcGVyaXNoYWJsZV90b2tlbl9leHBpcmVzX2F0IiwiX190eXBlIiwiaXNvIiwiZ2V0VXNlcklmTmVlZGVkIiwid2hlcmUiLCJ1c2VybmFtZSIsImVtYWlsIiwicnVuQmVmb3JlRmluZCIsIm1hc3RlciIsImVuY29kZVVSSUNvbXBvbmVudCIsImZldGNoZWRVc2VyIiwic2VuZFVzZXJFbWFpbFZlcmlmaWNhdGlvbiIsInJlc3BvbnNlIiwiT2JqZWN0IiwiZnJvbUpTT04iLCJpc01hc3RlciIsImxpbmsiLCJidWlsZEVtYWlsTGluayIsInZlcmlmeUVtYWlsVVJMIiwiYXBwTmFtZSIsImluZmxhdGUiLCJzZW5kTWFpbCIsImRlZmF1bHRWZXJpZmljYXRpb25FbWFpbCIsInJlZ2VuZXJhdGVFbWFpbFZlcmlmeVRva2VuIiwiaW5zdGFsbGF0aW9uSWQiLCJpcCIsImVtYWlsVmVyaWZ5VG9rZW5SZXVzZUlmVmFsaWQiLCJzaG91bGRTZW5kIiwib2JqZWN0IiwiVXNlciIsImFzc2lnbiIsInJlc2VuZFJlcXVlc3QiLCJyZXNlbmRWZXJpZmljYXRpb25FbWFpbCIsImFVc2VyIiwiZ2VuZXJhdGUiLCJzZXRQYXNzd29yZFJlc2V0VG9rZW4iLCJnZW5lcmF0ZVBhc3N3b3JkUmVzZXRUb2tlbkV4cGlyZXNBdCIsIiRvciIsIiRleGlzdHMiLCJzZW5kUGFzc3dvcmRSZXNldEVtYWlsIiwicmVzZXRUb2tlblJldXNlSWZWYWxpZCIsInJlcXVlc3RSZXNldFBhc3N3b3JkVVJMIiwiZGVmYXVsdFJlc2V0UGFzc3dvcmRFbWFpbCIsInVwZGF0ZVBhc3N3b3JkIiwicGFzc3dvcmQiLCJyYXdVc2VyIiwidXBkYXRlVXNlclBhc3N3b3JkIiwiYWNjb3VudExvY2tvdXRQb2xpY3kiLCJBY2NvdW50TG9ja291dCIsInVubG9ja0FjY291bnQiLCJlcnJvciIsIm1lc3NhZ2UiLCJyZWplY3QiLCJ0ZXh0IiwidG8iLCJzdWJqZWN0IiwiZXhwb3J0cyIsInRoZW4iLCJkZXN0aW5hdGlvbiIsInBhcnNlRnJhbWVVUkwiLCJkZXN0aW5hdGlvbldpdGhvdXRIb3N0IiwicmVwbGFjZSIsInB1YmxpY1NlcnZlclVSTCIsIl9kZWZhdWx0Il0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL0NvbnRyb2xsZXJzL1VzZXJDb250cm9sbGVyLmpzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHJhbmRvbVN0cmluZyB9IGZyb20gJy4uL2NyeXB0b1V0aWxzJztcbmltcG9ydCB7IGluZmxhdGUgfSBmcm9tICcuLi90cmlnZ2Vycyc7XG5pbXBvcnQgQWRhcHRhYmxlQ29udHJvbGxlciBmcm9tICcuL0FkYXB0YWJsZUNvbnRyb2xsZXInO1xuaW1wb3J0IE1haWxBZGFwdGVyIGZyb20gJy4uL0FkYXB0ZXJzL0VtYWlsL01haWxBZGFwdGVyJztcbmltcG9ydCByZXN0IGZyb20gJy4uL3Jlc3QnO1xuaW1wb3J0IFBhcnNlIGZyb20gJ3BhcnNlL25vZGUnO1xuaW1wb3J0IEFjY291bnRMb2Nrb3V0IGZyb20gJy4uL0FjY291bnRMb2Nrb3V0JztcbmltcG9ydCBDb25maWcgZnJvbSAnLi4vQ29uZmlnJztcblxudmFyIFJlc3RRdWVyeSA9IHJlcXVpcmUoJy4uL1Jlc3RRdWVyeScpO1xudmFyIEF1dGggPSByZXF1aXJlKCcuLi9BdXRoJyk7XG5cbmV4cG9ydCBjbGFzcyBVc2VyQ29udHJvbGxlciBleHRlbmRzIEFkYXB0YWJsZUNvbnRyb2xsZXIge1xuICBjb25zdHJ1Y3RvcihhZGFwdGVyLCBhcHBJZCwgb3B0aW9ucyA9IHt9KSB7XG4gICAgc3VwZXIoYWRhcHRlciwgYXBwSWQsIG9wdGlvbnMpO1xuICB9XG5cbiAgZ2V0IGNvbmZpZygpIHtcbiAgICByZXR1cm4gQ29uZmlnLmdldCh0aGlzLmFwcElkKTtcbiAgfVxuXG4gIHZhbGlkYXRlQWRhcHRlcihhZGFwdGVyKSB7XG4gICAgLy8gQWxsb3cgbm8gYWRhcHRlclxuICAgIGlmICghYWRhcHRlciAmJiAhdGhpcy5zaG91bGRWZXJpZnlFbWFpbHMpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgc3VwZXIudmFsaWRhdGVBZGFwdGVyKGFkYXB0ZXIpO1xuICB9XG5cbiAgZXhwZWN0ZWRBZGFwdGVyVHlwZSgpIHtcbiAgICByZXR1cm4gTWFpbEFkYXB0ZXI7XG4gIH1cblxuICBnZXQgc2hvdWxkVmVyaWZ5RW1haWxzKCkge1xuICAgIHJldHVybiAodGhpcy5jb25maWcgfHwgdGhpcy5vcHRpb25zKS52ZXJpZnlVc2VyRW1haWxzO1xuICB9XG5cbiAgYXN5bmMgc2V0RW1haWxWZXJpZnlUb2tlbih1c2VyLCByZXEsIHN0b3JhZ2UgPSB7fSkge1xuICAgIGNvbnN0IHNob3VsZFNlbmRFbWFpbCA9XG4gICAgICB0aGlzLnNob3VsZFZlcmlmeUVtYWlscyA9PT0gdHJ1ZSB8fFxuICAgICAgKHR5cGVvZiB0aGlzLnNob3VsZFZlcmlmeUVtYWlscyA9PT0gJ2Z1bmN0aW9uJyAmJlxuICAgICAgICAoYXdhaXQgUHJvbWlzZS5yZXNvbHZlKHRoaXMuc2hvdWxkVmVyaWZ5RW1haWxzKHJlcSkpKSA9PT0gdHJ1ZSk7XG4gICAgaWYgKCFzaG91bGRTZW5kRW1haWwpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgc3RvcmFnZS5zZW5kVmVyaWZpY2F0aW9uRW1haWwgPSB0cnVlO1xuICAgIHVzZXIuX2VtYWlsX3ZlcmlmeV90b2tlbiA9IHJhbmRvbVN0cmluZygyNSk7XG4gICAgaWYgKFxuICAgICAgIXN0b3JhZ2UuZmllbGRzQ2hhbmdlZEJ5VHJpZ2dlciB8fFxuICAgICAgIXN0b3JhZ2UuZmllbGRzQ2hhbmdlZEJ5VHJpZ2dlci5pbmNsdWRlcygnZW1haWxWZXJpZmllZCcpXG4gICAgKSB7XG4gICAgICB1c2VyLmVtYWlsVmVyaWZpZWQgPSBmYWxzZTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5jb25maWcuZW1haWxWZXJpZnlUb2tlblZhbGlkaXR5RHVyYXRpb24pIHtcbiAgICAgIHVzZXIuX2VtYWlsX3ZlcmlmeV90b2tlbl9leHBpcmVzX2F0ID0gUGFyc2UuX2VuY29kZShcbiAgICAgICAgdGhpcy5jb25maWcuZ2VuZXJhdGVFbWFpbFZlcmlmeVRva2VuRXhwaXJlc0F0KClcbiAgICAgICk7XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgYXN5bmMgdmVyaWZ5RW1haWwodG9rZW4pIHtcbiAgICBpZiAoIXRoaXMuc2hvdWxkVmVyaWZ5RW1haWxzKSB7XG4gICAgICAvLyBUcnlpbmcgdG8gdmVyaWZ5IGVtYWlsIHdoZW4gbm90IGVuYWJsZWRcbiAgICAgIC8vIFRPRE86IEJldHRlciBlcnJvciBoZXJlLlxuICAgICAgdGhyb3cgdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIGNvbnN0IHF1ZXJ5ID0geyBfZW1haWxfdmVyaWZ5X3Rva2VuOiB0b2tlbiB9O1xuICAgIGNvbnN0IHVwZGF0ZUZpZWxkcyA9IHtcbiAgICAgIGVtYWlsVmVyaWZpZWQ6IHRydWUsXG4gICAgICBfZW1haWxfdmVyaWZ5X3Rva2VuOiB7IF9fb3A6ICdEZWxldGUnIH0sXG4gICAgfTtcblxuICAgIC8vIGlmIHRoZSBlbWFpbCB2ZXJpZnkgdG9rZW4gbmVlZHMgdG8gYmUgdmFsaWRhdGVkIHRoZW5cbiAgICAvLyBhZGQgYWRkaXRpb25hbCBxdWVyeSBwYXJhbXMgYW5kIGFkZGl0aW9uYWwgZmllbGRzIHRoYXQgbmVlZCB0byBiZSB1cGRhdGVkXG4gICAgaWYgKHRoaXMuY29uZmlnLmVtYWlsVmVyaWZ5VG9rZW5WYWxpZGl0eUR1cmF0aW9uKSB7XG4gICAgICBxdWVyeS5lbWFpbFZlcmlmaWVkID0gZmFsc2U7XG4gICAgICBxdWVyeS5fZW1haWxfdmVyaWZ5X3Rva2VuX2V4cGlyZXNfYXQgPSB7ICRndDogUGFyc2UuX2VuY29kZShuZXcgRGF0ZSgpKSB9O1xuXG4gICAgICB1cGRhdGVGaWVsZHMuX2VtYWlsX3ZlcmlmeV90b2tlbl9leHBpcmVzX2F0ID0geyBfX29wOiAnRGVsZXRlJyB9O1xuICAgIH1cbiAgICBjb25zdCBtYWludGVuYW5jZUF1dGggPSBBdXRoLm1haW50ZW5hbmNlKHRoaXMuY29uZmlnKTtcbiAgICBjb25zdCByZXN0UXVlcnkgPSBhd2FpdCBSZXN0UXVlcnkoe1xuICAgICAgbWV0aG9kOiBSZXN0UXVlcnkuTWV0aG9kLmdldCxcbiAgICAgIGNvbmZpZzogdGhpcy5jb25maWcsXG4gICAgICBhdXRoOiBtYWludGVuYW5jZUF1dGgsXG4gICAgICBjbGFzc05hbWU6ICdfVXNlcicsXG4gICAgICByZXN0V2hlcmU6IHF1ZXJ5LFxuICAgIH0pO1xuXG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgcmVzdFF1ZXJ5LmV4ZWN1dGUoKTtcbiAgICBpZiAocmVzdWx0LnJlc3VsdHMubGVuZ3RoKSB7XG4gICAgICBxdWVyeS5vYmplY3RJZCA9IHJlc3VsdC5yZXN1bHRzWzBdLm9iamVjdElkO1xuICAgIH1cbiAgICByZXR1cm4gYXdhaXQgcmVzdC51cGRhdGUodGhpcy5jb25maWcsIG1haW50ZW5hbmNlQXV0aCwgJ19Vc2VyJywgcXVlcnksIHVwZGF0ZUZpZWxkcyk7XG4gIH1cblxuICBhc3luYyBjaGVja1Jlc2V0VG9rZW5WYWxpZGl0eSh0b2tlbikge1xuICAgIGNvbnN0IHJlc3VsdHMgPSBhd2FpdCB0aGlzLmNvbmZpZy5kYXRhYmFzZS5maW5kKFxuICAgICAgJ19Vc2VyJyxcbiAgICAgIHtcbiAgICAgICAgX3BlcmlzaGFibGVfdG9rZW46IHRva2VuLFxuICAgICAgfSxcbiAgICAgIHsgbGltaXQ6IDEgfSxcbiAgICAgIEF1dGgubWFpbnRlbmFuY2UodGhpcy5jb25maWcpXG4gICAgKTtcbiAgICBpZiAocmVzdWx0cy5sZW5ndGggIT09IDEpIHtcbiAgICAgIHRocm93ICdGYWlsZWQgdG8gcmVzZXQgcGFzc3dvcmQ6IHVzZXJuYW1lIC8gZW1haWwgLyB0b2tlbiBpcyBpbnZhbGlkJztcbiAgICB9XG5cbiAgICBpZiAodGhpcy5jb25maWcucGFzc3dvcmRQb2xpY3kgJiYgdGhpcy5jb25maWcucGFzc3dvcmRQb2xpY3kucmVzZXRUb2tlblZhbGlkaXR5RHVyYXRpb24pIHtcbiAgICAgIGxldCBleHBpcmVzRGF0ZSA9IHJlc3VsdHNbMF0uX3BlcmlzaGFibGVfdG9rZW5fZXhwaXJlc19hdDtcbiAgICAgIGlmIChleHBpcmVzRGF0ZSAmJiBleHBpcmVzRGF0ZS5fX3R5cGUgPT0gJ0RhdGUnKSB7XG4gICAgICAgIGV4cGlyZXNEYXRlID0gbmV3IERhdGUoZXhwaXJlc0RhdGUuaXNvKTtcbiAgICAgIH1cbiAgICAgIGlmIChleHBpcmVzRGF0ZSA8IG5ldyBEYXRlKCkpIHtcbiAgICAgICAgdGhyb3cgJ1RoZSBwYXNzd29yZCByZXNldCBsaW5rIGhhcyBleHBpcmVkJztcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gcmVzdWx0c1swXTtcbiAgfVxuXG4gIGFzeW5jIGdldFVzZXJJZk5lZWRlZCh1c2VyKSB7XG4gICAgdmFyIHdoZXJlID0ge307XG4gICAgaWYgKHVzZXIudXNlcm5hbWUpIHtcbiAgICAgIHdoZXJlLnVzZXJuYW1lID0gdXNlci51c2VybmFtZTtcbiAgICB9XG4gICAgaWYgKHVzZXIuZW1haWwpIHtcbiAgICAgIHdoZXJlLmVtYWlsID0gdXNlci5lbWFpbDtcbiAgICB9XG4gICAgaWYgKHVzZXIuX2VtYWlsX3ZlcmlmeV90b2tlbikge1xuICAgICAgd2hlcmUuX2VtYWlsX3ZlcmlmeV90b2tlbiA9IHVzZXIuX2VtYWlsX3ZlcmlmeV90b2tlbjtcbiAgICB9XG5cbiAgICB2YXIgcXVlcnkgPSBhd2FpdCBSZXN0UXVlcnkoe1xuICAgICAgbWV0aG9kOiBSZXN0UXVlcnkuTWV0aG9kLmdldCxcbiAgICAgIGNvbmZpZzogdGhpcy5jb25maWcsXG4gICAgICBydW5CZWZvcmVGaW5kOiBmYWxzZSxcbiAgICAgIGF1dGg6IEF1dGgubWFzdGVyKHRoaXMuY29uZmlnKSxcbiAgICAgIGNsYXNzTmFtZTogJ19Vc2VyJyxcbiAgICAgIHJlc3RXaGVyZTogd2hlcmUsXG4gICAgfSk7XG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgcXVlcnkuZXhlY3V0ZSgpO1xuICAgIGlmIChyZXN1bHQucmVzdWx0cy5sZW5ndGggIT0gMSkge1xuICAgICAgdGhyb3cgdW5kZWZpbmVkO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0LnJlc3VsdHNbMF07XG4gIH1cblxuICBhc3luYyBzZW5kVmVyaWZpY2F0aW9uRW1haWwodXNlciwgcmVxKSB7XG4gICAgaWYgKCF0aGlzLnNob3VsZFZlcmlmeUVtYWlscykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCB0b2tlbiA9IGVuY29kZVVSSUNvbXBvbmVudCh1c2VyLl9lbWFpbF92ZXJpZnlfdG9rZW4pO1xuICAgIC8vIFdlIG1heSBuZWVkIHRvIGZldGNoIHRoZSB1c2VyIGluIGNhc2Ugb2YgdXBkYXRlIGVtYWlsOyBvbmx5IHVzZSB0aGUgYGZldGNoZWRVc2VyYFxuICAgIC8vIGZyb20gdGhpcyBwb2ludCBvbndhcmRzOyBkbyBub3QgdXNlIHRoZSBgdXNlcmAgYXMgaXQgbWF5IG5vdCBjb250YWluIGFsbCBmaWVsZHMuXG4gICAgY29uc3QgZmV0Y2hlZFVzZXIgPSBhd2FpdCB0aGlzLmdldFVzZXJJZk5lZWRlZCh1c2VyKTtcbiAgICBsZXQgc2hvdWxkU2VuZEVtYWlsID0gdGhpcy5jb25maWcuc2VuZFVzZXJFbWFpbFZlcmlmaWNhdGlvbjtcbiAgICBpZiAodHlwZW9mIHNob3VsZFNlbmRFbWFpbCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBQcm9taXNlLnJlc29sdmUoXG4gICAgICAgIHRoaXMuY29uZmlnLnNlbmRVc2VyRW1haWxWZXJpZmljYXRpb24oe1xuICAgICAgICAgIHVzZXI6IFBhcnNlLk9iamVjdC5mcm9tSlNPTih7IGNsYXNzTmFtZTogJ19Vc2VyJywgLi4uZmV0Y2hlZFVzZXIgfSksXG4gICAgICAgICAgbWFzdGVyOiByZXEuYXV0aD8uaXNNYXN0ZXIsXG4gICAgICAgIH0pXG4gICAgICApO1xuICAgICAgc2hvdWxkU2VuZEVtYWlsID0gISFyZXNwb25zZTtcbiAgICB9XG4gICAgaWYgKCFzaG91bGRTZW5kRW1haWwpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgbGluayA9IGJ1aWxkRW1haWxMaW5rKHRoaXMuY29uZmlnLnZlcmlmeUVtYWlsVVJMLCB0b2tlbiwgdGhpcy5jb25maWcpO1xuICAgIGNvbnN0IG9wdGlvbnMgPSB7XG4gICAgICBhcHBOYW1lOiB0aGlzLmNvbmZpZy5hcHBOYW1lLFxuICAgICAgbGluazogbGluayxcbiAgICAgIHVzZXI6IGluZmxhdGUoJ19Vc2VyJywgZmV0Y2hlZFVzZXIpLFxuICAgIH07XG4gICAgaWYgKHRoaXMuYWRhcHRlci5zZW5kVmVyaWZpY2F0aW9uRW1haWwpIHtcbiAgICAgIHRoaXMuYWRhcHRlci5zZW5kVmVyaWZpY2F0aW9uRW1haWwob3B0aW9ucyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuYWRhcHRlci5zZW5kTWFpbCh0aGlzLmRlZmF1bHRWZXJpZmljYXRpb25FbWFpbChvcHRpb25zKSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJlZ2VuZXJhdGVzIHRoZSBnaXZlbiB1c2VyJ3MgZW1haWwgdmVyaWZpY2F0aW9uIHRva2VuXG4gICAqXG4gICAqIEBwYXJhbSB1c2VyXG4gICAqIEByZXR1cm5zIHsqfVxuICAgKi9cbiAgYXN5bmMgcmVnZW5lcmF0ZUVtYWlsVmVyaWZ5VG9rZW4odXNlciwgbWFzdGVyLCBpbnN0YWxsYXRpb25JZCwgaXApIHtcbiAgICBjb25zdCB7IF9lbWFpbF92ZXJpZnlfdG9rZW4gfSA9IHVzZXI7XG4gICAgbGV0IHsgX2VtYWlsX3ZlcmlmeV90b2tlbl9leHBpcmVzX2F0IH0gPSB1c2VyO1xuICAgIGlmIChfZW1haWxfdmVyaWZ5X3Rva2VuX2V4cGlyZXNfYXQgJiYgX2VtYWlsX3ZlcmlmeV90b2tlbl9leHBpcmVzX2F0Ll9fdHlwZSA9PT0gJ0RhdGUnKSB7XG4gICAgICBfZW1haWxfdmVyaWZ5X3Rva2VuX2V4cGlyZXNfYXQgPSBfZW1haWxfdmVyaWZ5X3Rva2VuX2V4cGlyZXNfYXQuaXNvO1xuICAgIH1cbiAgICBpZiAoXG4gICAgICB0aGlzLmNvbmZpZy5lbWFpbFZlcmlmeVRva2VuUmV1c2VJZlZhbGlkICYmXG4gICAgICB0aGlzLmNvbmZpZy5lbWFpbFZlcmlmeVRva2VuVmFsaWRpdHlEdXJhdGlvbiAmJlxuICAgICAgX2VtYWlsX3ZlcmlmeV90b2tlbiAmJlxuICAgICAgbmV3IERhdGUoKSA8IG5ldyBEYXRlKF9lbWFpbF92ZXJpZnlfdG9rZW5fZXhwaXJlc19hdClcbiAgICApIHtcbiAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUodHJ1ZSk7XG4gICAgfVxuICAgIGNvbnN0IHNob3VsZFNlbmQgPSBhd2FpdCB0aGlzLnNldEVtYWlsVmVyaWZ5VG9rZW4odXNlciwge1xuICAgICAgb2JqZWN0OiBQYXJzZS5Vc2VyLmZyb21KU09OKE9iamVjdC5hc3NpZ24oeyBjbGFzc05hbWU6ICdfVXNlcicgfSwgdXNlcikpLFxuICAgICAgbWFzdGVyLFxuICAgICAgaW5zdGFsbGF0aW9uSWQsXG4gICAgICBpcCxcbiAgICAgIHJlc2VuZFJlcXVlc3Q6IHRydWVcbiAgICB9KTtcbiAgICBpZiAoIXNob3VsZFNlbmQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuY29uZmlnLmRhdGFiYXNlLnVwZGF0ZSgnX1VzZXInLCB7IHVzZXJuYW1lOiB1c2VyLnVzZXJuYW1lIH0sIHVzZXIpO1xuICB9XG5cbiAgYXN5bmMgcmVzZW5kVmVyaWZpY2F0aW9uRW1haWwodXNlcm5hbWUsIHJlcSwgdG9rZW4pIHtcbiAgICBjb25zdCBhVXNlciA9IGF3YWl0IHRoaXMuZ2V0VXNlcklmTmVlZGVkKHsgdXNlcm5hbWUsIF9lbWFpbF92ZXJpZnlfdG9rZW46IHRva2VuIH0pO1xuICAgIGlmICghYVVzZXIgfHwgYVVzZXIuZW1haWxWZXJpZmllZCkge1xuICAgICAgdGhyb3cgdW5kZWZpbmVkO1xuICAgIH1cbiAgICBjb25zdCBnZW5lcmF0ZSA9IGF3YWl0IHRoaXMucmVnZW5lcmF0ZUVtYWlsVmVyaWZ5VG9rZW4oYVVzZXIsIHJlcS5hdXRoPy5pc01hc3RlciwgcmVxLmF1dGg/Lmluc3RhbGxhdGlvbklkLCByZXEuaXApO1xuICAgIGlmIChnZW5lcmF0ZSkge1xuICAgICAgdGhpcy5zZW5kVmVyaWZpY2F0aW9uRW1haWwoYVVzZXIsIHJlcSk7XG4gICAgfVxuICB9XG5cbiAgc2V0UGFzc3dvcmRSZXNldFRva2VuKGVtYWlsKSB7XG4gICAgY29uc3QgdG9rZW4gPSB7IF9wZXJpc2hhYmxlX3Rva2VuOiByYW5kb21TdHJpbmcoMjUpIH07XG5cbiAgICBpZiAodGhpcy5jb25maWcucGFzc3dvcmRQb2xpY3kgJiYgdGhpcy5jb25maWcucGFzc3dvcmRQb2xpY3kucmVzZXRUb2tlblZhbGlkaXR5RHVyYXRpb24pIHtcbiAgICAgIHRva2VuLl9wZXJpc2hhYmxlX3Rva2VuX2V4cGlyZXNfYXQgPSBQYXJzZS5fZW5jb2RlKFxuICAgICAgICB0aGlzLmNvbmZpZy5nZW5lcmF0ZVBhc3N3b3JkUmVzZXRUb2tlbkV4cGlyZXNBdCgpXG4gICAgICApO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLmNvbmZpZy5kYXRhYmFzZS51cGRhdGUoXG4gICAgICAnX1VzZXInLFxuICAgICAgeyAkb3I6IFt7IGVtYWlsIH0sIHsgdXNlcm5hbWU6IGVtYWlsLCBlbWFpbDogeyAkZXhpc3RzOiBmYWxzZSB9IH1dIH0sXG4gICAgICB0b2tlbixcbiAgICAgIHt9LFxuICAgICAgdHJ1ZVxuICAgICk7XG4gIH1cblxuICBhc3luYyBzZW5kUGFzc3dvcmRSZXNldEVtYWlsKGVtYWlsKSB7XG4gICAgaWYgKCF0aGlzLmFkYXB0ZXIpIHtcbiAgICAgIHRocm93ICdUcnlpbmcgdG8gc2VuZCBhIHJlc2V0IHBhc3N3b3JkIGJ1dCBubyBhZGFwdGVyIGlzIHNldCc7XG4gICAgICAvLyAgVE9ETzogTm8gYWRhcHRlcj9cbiAgICB9XG4gICAgbGV0IHVzZXI7XG4gICAgaWYgKFxuICAgICAgdGhpcy5jb25maWcucGFzc3dvcmRQb2xpY3kgJiZcbiAgICAgIHRoaXMuY29uZmlnLnBhc3N3b3JkUG9saWN5LnJlc2V0VG9rZW5SZXVzZUlmVmFsaWQgJiZcbiAgICAgIHRoaXMuY29uZmlnLnBhc3N3b3JkUG9saWN5LnJlc2V0VG9rZW5WYWxpZGl0eUR1cmF0aW9uXG4gICAgKSB7XG4gICAgICBjb25zdCByZXN1bHRzID0gYXdhaXQgdGhpcy5jb25maWcuZGF0YWJhc2UuZmluZChcbiAgICAgICAgJ19Vc2VyJyxcbiAgICAgICAge1xuICAgICAgICAgICRvcjogW1xuICAgICAgICAgICAgeyBlbWFpbCwgX3BlcmlzaGFibGVfdG9rZW46IHsgJGV4aXN0czogdHJ1ZSB9IH0sXG4gICAgICAgICAgICB7IHVzZXJuYW1lOiBlbWFpbCwgZW1haWw6IHsgJGV4aXN0czogZmFsc2UgfSwgX3BlcmlzaGFibGVfdG9rZW46IHsgJGV4aXN0czogdHJ1ZSB9IH0sXG4gICAgICAgICAgXSxcbiAgICAgICAgfSxcbiAgICAgICAgeyBsaW1pdDogMSB9LFxuICAgICAgICBBdXRoLm1haW50ZW5hbmNlKHRoaXMuY29uZmlnKVxuICAgICAgKTtcbiAgICAgIGlmIChyZXN1bHRzLmxlbmd0aCA9PSAxKSB7XG4gICAgICAgIGxldCBleHBpcmVzRGF0ZSA9IHJlc3VsdHNbMF0uX3BlcmlzaGFibGVfdG9rZW5fZXhwaXJlc19hdDtcbiAgICAgICAgaWYgKGV4cGlyZXNEYXRlICYmIGV4cGlyZXNEYXRlLl9fdHlwZSA9PSAnRGF0ZScpIHtcbiAgICAgICAgICBleHBpcmVzRGF0ZSA9IG5ldyBEYXRlKGV4cGlyZXNEYXRlLmlzbyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGV4cGlyZXNEYXRlID4gbmV3IERhdGUoKSkge1xuICAgICAgICAgIHVzZXIgPSByZXN1bHRzWzBdO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIGlmICghdXNlciB8fCAhdXNlci5fcGVyaXNoYWJsZV90b2tlbikge1xuICAgICAgdXNlciA9IGF3YWl0IHRoaXMuc2V0UGFzc3dvcmRSZXNldFRva2VuKGVtYWlsKTtcbiAgICB9XG4gICAgY29uc3QgdG9rZW4gPSBlbmNvZGVVUklDb21wb25lbnQodXNlci5fcGVyaXNoYWJsZV90b2tlbik7XG5cbiAgICBjb25zdCBsaW5rID0gYnVpbGRFbWFpbExpbmsodGhpcy5jb25maWcucmVxdWVzdFJlc2V0UGFzc3dvcmRVUkwsIHRva2VuLCB0aGlzLmNvbmZpZyk7XG4gICAgY29uc3Qgb3B0aW9ucyA9IHtcbiAgICAgIGFwcE5hbWU6IHRoaXMuY29uZmlnLmFwcE5hbWUsXG4gICAgICBsaW5rOiBsaW5rLFxuICAgICAgdXNlcjogaW5mbGF0ZSgnX1VzZXInLCB1c2VyKSxcbiAgICB9O1xuXG4gICAgaWYgKHRoaXMuYWRhcHRlci5zZW5kUGFzc3dvcmRSZXNldEVtYWlsKSB7XG4gICAgICB0aGlzLmFkYXB0ZXIuc2VuZFBhc3N3b3JkUmVzZXRFbWFpbChvcHRpb25zKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5hZGFwdGVyLnNlbmRNYWlsKHRoaXMuZGVmYXVsdFJlc2V0UGFzc3dvcmRFbWFpbChvcHRpb25zKSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh1c2VyKTtcbiAgfVxuXG4gIGFzeW5jIHVwZGF0ZVBhc3N3b3JkKHRva2VuLCBwYXNzd29yZCkge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCByYXdVc2VyID0gYXdhaXQgdGhpcy5jaGVja1Jlc2V0VG9rZW5WYWxpZGl0eSh0b2tlbik7XG4gICAgICBjb25zdCB1c2VyID0gYXdhaXQgdXBkYXRlVXNlclBhc3N3b3JkKHJhd1VzZXIsIHBhc3N3b3JkLCB0aGlzLmNvbmZpZyk7XG5cbiAgICAgIGNvbnN0IGFjY291bnRMb2Nrb3V0UG9saWN5ID0gbmV3IEFjY291bnRMb2Nrb3V0KHVzZXIsIHRoaXMuY29uZmlnKTtcbiAgICAgIHJldHVybiBhd2FpdCBhY2NvdW50TG9ja291dFBvbGljeS51bmxvY2tBY2NvdW50KCk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGlmIChlcnJvciAmJiBlcnJvci5tZXNzYWdlKSB7XG4gICAgICAgIC8vIGluIGNhc2Ugb2YgUGFyc2UuRXJyb3IsIGZhaWwgd2l0aCB0aGUgZXJyb3IgbWVzc2FnZSBvbmx5XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChlcnJvci5tZXNzYWdlKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChlcnJvcik7XG4gICAgfVxuICB9XG5cbiAgZGVmYXVsdFZlcmlmaWNhdGlvbkVtYWlsKHsgbGluaywgdXNlciwgYXBwTmFtZSB9KSB7XG4gICAgY29uc3QgdGV4dCA9XG4gICAgICAnSGksXFxuXFxuJyArXG4gICAgICAnWW91IGFyZSBiZWluZyBhc2tlZCB0byBjb25maXJtIHRoZSBlLW1haWwgYWRkcmVzcyAnICtcbiAgICAgIHVzZXIuZ2V0KCdlbWFpbCcpICtcbiAgICAgICcgd2l0aCAnICtcbiAgICAgIGFwcE5hbWUgK1xuICAgICAgJ1xcblxcbicgK1xuICAgICAgJycgK1xuICAgICAgJ0NsaWNrIGhlcmUgdG8gY29uZmlybSBpdDpcXG4nICtcbiAgICAgIGxpbms7XG4gICAgY29uc3QgdG8gPSB1c2VyLmdldCgnZW1haWwnKTtcbiAgICBjb25zdCBzdWJqZWN0ID0gJ1BsZWFzZSB2ZXJpZnkgeW91ciBlLW1haWwgZm9yICcgKyBhcHBOYW1lO1xuICAgIHJldHVybiB7IHRleHQsIHRvLCBzdWJqZWN0IH07XG4gIH1cblxuICBkZWZhdWx0UmVzZXRQYXNzd29yZEVtYWlsKHsgbGluaywgdXNlciwgYXBwTmFtZSB9KSB7XG4gICAgY29uc3QgdGV4dCA9XG4gICAgICAnSGksXFxuXFxuJyArXG4gICAgICAnWW91IHJlcXVlc3RlZCB0byByZXNldCB5b3VyIHBhc3N3b3JkIGZvciAnICtcbiAgICAgIGFwcE5hbWUgK1xuICAgICAgKHVzZXIuZ2V0KCd1c2VybmFtZScpID8gXCIgKHlvdXIgdXNlcm5hbWUgaXMgJ1wiICsgdXNlci5nZXQoJ3VzZXJuYW1lJykgKyBcIicpXCIgOiAnJykgK1xuICAgICAgJy5cXG5cXG4nICtcbiAgICAgICcnICtcbiAgICAgICdDbGljayBoZXJlIHRvIHJlc2V0IGl0OlxcbicgK1xuICAgICAgbGluaztcbiAgICBjb25zdCB0byA9IHVzZXIuZ2V0KCdlbWFpbCcpIHx8IHVzZXIuZ2V0KCd1c2VybmFtZScpO1xuICAgIGNvbnN0IHN1YmplY3QgPSAnUGFzc3dvcmQgUmVzZXQgZm9yICcgKyBhcHBOYW1lO1xuICAgIHJldHVybiB7IHRleHQsIHRvLCBzdWJqZWN0IH07XG4gIH1cbn1cblxuLy8gTWFyayB0aGlzIHByaXZhdGVcbmZ1bmN0aW9uIHVwZGF0ZVVzZXJQYXNzd29yZCh1c2VyLCBwYXNzd29yZCwgY29uZmlnKSB7XG4gIHJldHVybiByZXN0XG4gICAgLnVwZGF0ZShcbiAgICAgIGNvbmZpZyxcbiAgICAgIEF1dGgubWFzdGVyKGNvbmZpZyksXG4gICAgICAnX1VzZXInLFxuICAgICAgeyBvYmplY3RJZDogdXNlci5vYmplY3RJZCB9LFxuICAgICAge1xuICAgICAgICBwYXNzd29yZDogcGFzc3dvcmQsXG4gICAgICB9XG4gICAgKVxuICAgIC50aGVuKCgpID0+IHVzZXIpO1xufVxuXG5mdW5jdGlvbiBidWlsZEVtYWlsTGluayhkZXN0aW5hdGlvbiwgdG9rZW4sIGNvbmZpZykge1xuICB0b2tlbiA9IGB0b2tlbj0ke3Rva2VufWA7XG4gIGlmIChjb25maWcucGFyc2VGcmFtZVVSTCkge1xuICAgIGNvbnN0IGRlc3RpbmF0aW9uV2l0aG91dEhvc3QgPSBkZXN0aW5hdGlvbi5yZXBsYWNlKGNvbmZpZy5wdWJsaWNTZXJ2ZXJVUkwsICcnKTtcblxuICAgIHJldHVybiBgJHtjb25maWcucGFyc2VGcmFtZVVSTH0/bGluaz0ke2VuY29kZVVSSUNvbXBvbmVudChkZXN0aW5hdGlvbldpdGhvdXRIb3N0KX0mJHt0b2tlbn1gO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBgJHtkZXN0aW5hdGlvbn0/JHt0b2tlbn1gO1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IFVzZXJDb250cm9sbGVyO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQSxJQUFBQSxZQUFBLEdBQUFDLE9BQUE7QUFDQSxJQUFBQyxTQUFBLEdBQUFELE9BQUE7QUFDQSxJQUFBRSxvQkFBQSxHQUFBQyxzQkFBQSxDQUFBSCxPQUFBO0FBQ0EsSUFBQUksWUFBQSxHQUFBRCxzQkFBQSxDQUFBSCxPQUFBO0FBQ0EsSUFBQUssS0FBQSxHQUFBRixzQkFBQSxDQUFBSCxPQUFBO0FBQ0EsSUFBQU0sS0FBQSxHQUFBSCxzQkFBQSxDQUFBSCxPQUFBO0FBQ0EsSUFBQU8sZUFBQSxHQUFBSixzQkFBQSxDQUFBSCxPQUFBO0FBQ0EsSUFBQVEsT0FBQSxHQUFBTCxzQkFBQSxDQUFBSCxPQUFBO0FBQStCLFNBQUFHLHVCQUFBTSxDQUFBLFdBQUFBLENBQUEsSUFBQUEsQ0FBQSxDQUFBQyxVQUFBLEdBQUFELENBQUEsS0FBQUUsT0FBQSxFQUFBRixDQUFBO0FBRS9CLElBQUlHLFNBQVMsR0FBR1osT0FBTyxDQUFDLGNBQWMsQ0FBQztBQUN2QyxJQUFJYSxJQUFJLEdBQUdiLE9BQU8sQ0FBQyxTQUFTLENBQUM7QUFFdEIsTUFBTWMsY0FBYyxTQUFTQyw0QkFBbUIsQ0FBQztFQUN0REMsV0FBV0EsQ0FBQ0MsT0FBTyxFQUFFQyxLQUFLLEVBQUVDLE9BQU8sR0FBRyxDQUFDLENBQUMsRUFBRTtJQUN4QyxLQUFLLENBQUNGLE9BQU8sRUFBRUMsS0FBSyxFQUFFQyxPQUFPLENBQUM7RUFDaEM7RUFFQSxJQUFJQyxNQUFNQSxD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