@appium/support 2.55.0 → 2.55.4

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.
@@ -143,4 +143,4 @@ var _default = SECURE_VALUES_PREPROCESSOR;
143
143
  exports.default = _default;require('source-map-support').install();
144
144
 
145
145
 
146
- //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi9sb2ctaW50ZXJuYWwuanMiXSwibmFtZXMiOlsiREVGQVVMVF9SRVBMQUNFUiIsIlNlY3VyZVZhbHVlc1ByZXByb2Nlc3NvciIsImNvbnN0cnVjdG9yIiwiX3J1bGVzIiwicnVsZXMiLCJwYXJzZVJ1bGUiLCJydWxlIiwicmFpc2VFcnJvciIsIm1zZyIsIkVycm9yIiwiSlNPTiIsInN0cmluZ2lmeSIsInBhdHRlcm4iLCJyZXBsYWNlciIsImZsYWdzIiwiXyIsImlzU3RyaW5nIiwibGVuZ3RoIiwiZXNjYXBlUmVnRXhwIiwiaXNQbGFpbk9iamVjdCIsImhhcyIsInRleHQiLCJmbGFnIiwiaW5jbHVkZXMiLCJwdXNoIiwidW5pcSIsIlJlZ0V4cCIsImpvaW4iLCJlIiwibWVzc2FnZSIsImxvYWRSdWxlcyIsInNvdXJjZSIsImlzQXJyYXkiLCJmcyIsImV4aXN0cyIsInBhcnNlIiwicmVhZEZpbGUiLCJpc3N1ZXMiLCJwcmVwcm9jZXNzIiwic3RyIiwicmVzdWx0IiwicmVwbGFjZSIsIlNFQ1VSRV9WQUxVRVNfUFJFUFJPQ0VTU09SIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7OztBQUFBOztBQUNBOztBQUVBLE1BQU1BLGdCQUFnQixHQUFHLFlBQXpCOztBQVNBLE1BQU1DLHdCQUFOLENBQStCO0FBQzdCQyxFQUFBQSxXQUFXLEdBQUk7QUFDYixTQUFLQyxNQUFMLEdBQWMsRUFBZDtBQUNEOztBQU1RLE1BQUxDLEtBQUssR0FBSTtBQUNYLFdBQU8sS0FBS0QsTUFBWjtBQUNEOztBQXVCREUsRUFBQUEsU0FBUyxDQUFFQyxJQUFGLEVBQVE7QUFDZixVQUFNQyxVQUFVLEdBQUlDLEdBQUQsSUFBUztBQUMxQixZQUFNLElBQUlDLEtBQUosQ0FBVyxHQUFFQyxJQUFJLENBQUNDLFNBQUwsQ0FBZUwsSUFBZixDQUFxQixPQUFNRSxHQUFJLEVBQTVDLENBQU47QUFDRCxLQUZEOztBQUlBLFFBQUlJLE9BQUo7QUFDQSxRQUFJQyxRQUFRLEdBQUdiLGdCQUFmO0FB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LEVBQWdDO0FBQzlCcUMsTUFBQUEsTUFBTSxHQUFHQSxNQUFNLENBQUNDLE9BQVAsQ0FBZW5DLElBQUksQ0FBQ00sT0FBcEIsRUFBNkJOLElBQUksQ0FBQ08sUUFBbEMsQ0FBVDtBQUNEOztBQUNELFdBQU8yQixNQUFQO0FBQ0Q7O0FBcEo0Qjs7O0FBdUovQixNQUFNRSwwQkFBMEIsR0FBRyxJQUFJekMsd0JBQUosRUFBbkM7O2VBR2V5QywwQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBmcyBmcm9tICcuL2ZzJztcbmltcG9ydCBfIGZyb20gJ2xvZGFzaCc7XG5cbmNvbnN0IERFRkFVTFRfUkVQTEFDRVIgPSAnKipTRUNVUkUqKic7XG5cbi8qKlxuICogQHR5cGVkZWYge09iamVjdH0gU2VjdXJlVmFsdWVQcmVwcm9jZXNzaW5nUnVsZVxuICogQHByb3BlcnR5IHtSZWdFeHB9IHBhdHRlcm4gVGhlIHBhcnNlZCBwYXR0ZXJuIHdoaWNoIGlzIGdvaW5nIHRvIGJlIHVzZWQgZm9yIHJlcGxhY2VtZW50XG4gKiBAcHJvcGVydHkge3N0cmluZ30gcmVwbGFjZXIgW0RFRkFVTFRfU0VDVVJFX1JFUExBQ0VSXSBUaGUgcmVwbGFjZXIgdmFsdWUgdG8gdXNlLiBCeSBkZWZhdWx0XG4gKiBlcXVhbHMgdG8gYERFRkFVTFRfU0VDVVJFX1JFUExBQ0VSYFxuICovXG5cbmNsYXNzIFNlY3VyZVZhbHVlc1ByZXByb2Nlc3NvciB7XG4gIGNvbnN0cnVjdG9yICgpIHtcbiAgICB0aGlzLl9ydWxlcyA9IFtdO1xuICB9XG5cbiAgLyoqXG4gICAqIEByZXR1cm5zIHtBcnJheTxTZWN1cmVWYWx1ZVByZXByb2Nlc3NpbmdSdWxlPn0gVGhlIGxpc3Qgb2Ygc3VjY2Vzc2Z1bGx5XG4gICAqIHBhcnNlZCBwcmVwcm9jZXNzaW5nIHJ1bGVzXG4gICAqL1xuICBnZXQgcnVsZXMgKCkge1xuICAgIHJldHVybiB0aGlzLl9ydWxlcztcbiAgfVxuXG4gIC8qKlxuICAgKiBAdHlwZWRlZiB7T2JqZWN0fSBSdWxlXG4gICAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBwYXR0ZXJuIEEgdmFsaWQgUmVnRXhwIHBhdHRlcm4gdG8gYmUgcmVwbGFjZWRcbiAgICogQHByb3BlcnR5IHtzdHJpbmd9IHRleHQgQSB0ZXh0IG1hdGNoIHRvIHJlcGxhY2UuIEVpdGhlciB0aGlzIHByb3BlcnR5IG9yIHRoZVxuICAgKiBhYm92ZSBvbmUgbXVzdCBiZSBwcm92aWRlZC4gYHBhdHRlcm5gIGhhcyBwcmlvcml0eSBvdmVyIGB0ZXh0YCBpZiBib3RoIGFyZSBwcm92aWRlZC5cbiAgICogQHByb3BlcnR5IHtzdHJpbmd9IGZsYWdzIFsnZyddIFJlZ3VsYXIgZXhwcmVzc2lvbiBmbGFncyBmb3IgdGhlIGdpdmVuIHBhdHRlcm4uXG4gICAqIFN1cHBvcnRlZCBmbGFnIGFyZSB0aGUgc2FtZSBhcyBmb3IgdGhlIHN0YW5kYXJkIEphdmFTY3JpcHQgUmVnRXhwIGNvbnN0cnVjdG9yOlxuICAgKiBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9KYXZhU2NyaXB0L0d1aWRlL1JlZ3VsYXJfRXhwcmVzc2lvbnMjQWR2YW5jZWRfc2VhcmNoaW5nX3dpdGhfZmxhZ3NfMlxuICAgKiBUaGUgJ2cnIChnbG9iYWwgbWF0Y2hpbmcpIGlzIGFsd2F5cyBlbmFibGVkIHRob3VnaC5cbiAgICogQHByb3BlcnR5IHtzdHJpbmd9IHJlcGxhY2VyIFtERUZBVUxUX1NFQ1VSRV9SRVBMQUNFUl0gVGhlIHJlcGxhY2VyIHZhbHVlIHRvIHVzZS4gQnkgZGVmYXVsdFxuICAgKiBlcXVhbHMgdG8gYERFRkFVTFRfU0VDVVJFX1JFUExBQ0VSYFxuICAgKi9cblxuICAvKipcbiAgICogUGFyc2VzIHNpbmdsZSBydWxlIGZyb20gdGhlIGdpdmVuIEpTT04gZmlsZVxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ3xSdWxlfSBydWxlIFRoZSBydWxlIG1pZ2h0IGVpdGhlciBiZSByZXByZXNlbnRlZCBhcyBhIHNpbmdsZSBzdHJpbmdcbiAgICogb3IgYSBjb25maWd1cmF0aW9uIG9iamVjdFxuICAgKiBAdGhyb3dzIHtFcnJvcn0gSWYgdGhlcmUgd2FzIGFuIGVycm9yIHdoaWxlIHBhcnNpbmcgdGhlIHJ1bGVcbiAgICogQHJldHVybnMge1NlY3VyZVZhbHVlUHJlcHJvY2Vzc2luZ1J1bGV9IFRoZSBwYXJzZWQgcnVsZVxuICAgKi9cbiAgcGFyc2VSdWxlIChydWxlKSB7XG4gICAgY29uc3QgcmFpc2VFcnJvciA9IChtc2cpID0+IHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgJHtKU09OLnN0cmluZ2lmeShydWxlKX0gLT4gJHttc2d9YCk7XG4gICAgfTtcblxuICAgIGxldCBwYXR0ZXJuO1xuICAgIGxldCByZXBsYWNlciA9IERFRkFVTFRfUkVQTEFDRVI7XG4gICAgbGV0IGZsYWdzID0gWydnJ107XG4gICAgaWYgKF8uaXNTdHJpbmcocnVsZSkpIHtcbiAgICAgIGlmIChydWxlLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICByYWlzZUVycm9yKCdUaGUgdmFsdWUgbXVzdCBub3QgYmUgZW1wdHknKTtcbiAgICAgIH1cbiAgICAgIHBhdHRlcm4gPSBgXFxcXGIke18uZXNjYXBlUmVnRXhwKHJ1bGUpfVxcXFxiYDtcbiAgICB9IGVsc2UgaWYgKF8uaXNQbGFpbk9iamVjdChydWxlKSkge1xuICAgICAgaWYgKF8uaGFzKHJ1bGUsICdwYXR0ZXJuJykpIHtcbiAgICAgICAgaWYgKCFfLmlzU3RyaW5nKHJ1bGUucGF0dGVybikgfHwgcnVsZS5wYXR0ZXJuLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgIHJhaXNlRXJyb3IoYFRoZSB2YWx1ZSBvZiAncGF0dGVybicgbXVzdCBiZSBhIHZhbGlkIG5vbi1lbXB0eSBzdHJpbmdgKTtcbiAgICAgICAgfVxuICAgICAgICBwYXR0ZXJuID0gcnVsZS5wYXR0ZXJuO1xuICAgICAgfSBlbHNlIGlmIChfLmhhcyhydWxlLCAndGV4dCcpKSB7XG4gICAgICAgIGlmICghXy5pc1N0cmluZyhydWxlLnRleHQpIHx8IHJ1bGUudGV4dC5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICByYWlzZUVycm9yKGBUaGUgdmFsdWUgb2YgJ3RleHQnIG11c3QgYmUgYSB2YWxpZCBub24tZW1wdHkgc3RyaW5nYCk7XG4gICAgICAgIH1cbiAgICAgICAgcGF0dGVybiA9IGBcXFxcYiR7Xy5lc2NhcGVSZWdFeHAocnVsZS50ZXh0KX1cXFxcYmA7XG4gICAgICB9XG4gICAgICBpZiAoIXBhdHRlcm4pIHtcbiAgICAgICAgcmFpc2VFcnJvcihgTXVzdCBlaXRoZXIgaGF2ZSBhIGZpZWxkIG5hbWVkICdwYXR0ZXJuJyBvciAndGV4dCdgKTtcbiAgICAgIH1cblxuICAgICAgaWYgKF8uaGFzKHJ1bGUsICdmbGFncycpKSB7XG4gICAgICAgIC8vIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0phdmFTY3JpcHQvR3VpZGUvUmVndWxhcl9FeHByZXNzaW9ucyNBZHZhbmNlZF9zZWFyY2hpbmdfd2l0aF9mbGFnc18yXG4gICAgICAgIGZvciAoY29uc3QgZmxhZyBvZiBbJ2knLCAnZycsICdtJywgJ3MnLCAndScsICd5J10pIHtcbiAgICAgICAgICBpZiAoXy5pbmNsdWRlcyhydWxlLmZsYWdzLCBmbGFnKSkge1xuICAgICAgICAgICAgZmxhZ3MucHVzaChmbGFnKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZmxhZ3MgPSBfLnVuaXEoZmxhZ3MpO1xuICAgICAgfVxuXG4gICAgICBpZiAoXy5pc1N0cmluZyhydWxlLnJlcGxhY2VyKSkge1xuICAgICAgICByZXBsYWNlciA9IHJ1bGUucmVwbGFjZXI7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHJhaXNlRXJyb3IoJ011c3QgZWl0aGVyIGJlIGEgc3RyaW5nIG9yIGFuIG9iamVjdCcpO1xuICAgIH1cblxuICAgIHRyeSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBwYXR0ZXJuOiBuZXcgUmVnRXhwKHBhdHRlcm4sIGZsYWdzLmpvaW4oJycpKSxcbiAgICAgICAgcmVwbGFjZXIsXG4gICAgICB9O1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHJhaXNlRXJyb3IoZS5tZXNzYWdlKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogTG9hZHMgcnVsZXMgZnJvbSB0aGUgZ2l2ZW4gSlNPTiBmaWxlXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfEFycmF5PHN0cmluZ3xSdWxlPn0gc291cmNlIFRoZSBmdWxsIHBhdGggdG8gdGhlIEpTT04gZmlsZSBjb250YWluaW5nIHNlY3VyZVxuICAgKiB2YWx1ZXMgcmVwbGFjZW1lbnQgcnVsZXMgb3IgdGhlIHJ1bGVzIHRoZW1zZWx2ZXMgcmVwcmVzZW50ZWQgYXMgYW4gYXJyYXlcbiAgICogQHRocm93cyB7RXJyb3J9IElmIHRoZSBmb3JtYXQgb2YgdGhlIHNvdXJjZSBmaWxlIGlzIGludmFsaWQgb3JcbiAgICogaXQgZG9lcyBub3QgZXhpc3RcbiAgICogQHJldHVybnMge0FycmF5PHN0cmluZz59IFRoZSBsaXN0IG9mIGlzc3VlcyBmb3VuZCB3aGlsZSBwYXJzaW5nIGVhY2ggcnVsZS5cbiAgICogQW4gZW1wdHkgbGlzdCBpcyByZXR1cm5lZCBpZiBubyBydWxlIHBhcnNpbmcgaXNzdWVzIHdlcmUgZm91bmRcbiAgICovXG4gIGFzeW5jIGxvYWRSdWxlcyAoc291cmNlKSB7XG4gICAgbGV0IHJ1bGVzO1xuICAgIGlmIChfLmlzQXJyYXkoc291cmNlKSkge1xuICAgICAgcnVsZXMgPSBzb3VyY2U7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmICghYXdhaXQgZnMuZXhpc3RzKHNvdXJjZSkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGAnJHtzb3VyY2V9JyBkb2VzIG5vdCBleGlzdCBvciBpcyBub3QgYWNjZXNzaWJsZWApO1xuICAgICAgfVxuICAgICAgdHJ5IHtcbiAgICAgICAgcnVsZXMgPSBKU09OLnBhcnNlKGF3YWl0IGZzLnJlYWRGaWxlKHNvdXJjZSwgJ3V0ZjgnKSk7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgJyR7c291cmNlfScgbXVzdCBiZSBhIHZhbGlkIEpTT04gZmlsZS4gT3JpZ2luYWwgZXJyb3I6ICR7ZS5tZXNzYWdlfWApO1xuICAgICAgfVxuICAgICAgaWYgKCFfLmlzQXJyYXkocnVsZXMpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgJyR7c291cmNlfScgbXVzdCBjb250YWluIGEgdmFsaWQgSlNPTiBhcnJheWApO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IGlzc3VlcyA9IFtdO1xuICAgIHRoaXMuX3J1bGVzID0gW107XG4gICAgZm9yIChjb25zdCBydWxlIG9mIHJ1bGVzKSB7XG4gICAgICB0cnkge1xuICAgICAgICB0aGlzLl9ydWxlcy5wdXNoKHRoaXMucGFyc2VSdWxlKHJ1bGUpKTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgaXNzdWVzLnB1c2goZS5tZXNzYWdlKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGlzc3VlcztcbiAgfVxuXG4gIC8qKlxuICAgKiBQZXJmb3JtcyBzZWN1cmUgdmFsdWVzIHJlcGxhY2VtZW50IGluc2lkZSB0aGUgZ2l2ZW4gc3RyaW5nXG4gICAqIGFjY29yZGluZyB0byB0aGUgcHJldmlvdXNseSBsb2FkZWQgcnVsZXMuIE5vIHJlcGxhY2VtZW50IGlzIG1hZGVcbiAgICogaWYgdGhlcmUgYXJlIG5vIHJ1bGVzIG9yIHRoZSBnaXZlbiB2YWx1ZSBpcyBub3QgYSBzdHJpbmdcbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IHN0ciBUaGUgc3RyaW5nIHRvIG1ha2UgcmVwbGFjZW1lbnRzIGluXG4gICAqIEByZXR1cm5zIHtzdHJpbmd9IFRoZSBzdHJpbmcgd2l0aCByZXBsYWNlbWVudHMgbWFkZVxuICAgKi9cbiAgcHJlcHJvY2VzcyAoc3RyKSB7XG4gICAgaWYgKHRoaXMuX3J1bGVzLmxlbmd0aCA9PT0gMCB8fCAhXy5pc1N0cmluZyhzdHIpKSB7XG4gICAgICByZXR1cm4gc3RyO1xuICAgIH1cblxuICAgIGxldCByZXN1bHQgPSBzdHI7XG4gICAgZm9yIChjb25zdCBydWxlIG9mIHRoaXMuX3J1bGVzKSB7XG4gICAgICByZXN1bHQgPSByZXN1bHQucmVwbGFjZShydWxlLnBhdHRlcm4sIHJ1bGUucmVwbGFjZXIpO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG59XG5cbmNvbnN0IFNFQ1VSRV9WQUxVRVNfUFJFUFJPQ0VTU09SID0gbmV3IFNlY3VyZVZhbHVlc1ByZXByb2Nlc3NvcigpO1xuXG5leHBvcnQgeyBTRUNVUkVfVkFMVUVTX1BSRVBST0NFU1NPUiwgU2VjdXJlVmFsdWVzUHJlcHJvY2Vzc29yIH07XG5leHBvcnQgZGVmYXVsdCBTRUNVUkVfVkFMVUVTX1BSRVBST0NFU1NPUjtcbiJdLCJmaWxlIjoibGliL2xvZy1pbnRlcm5hbC5qcyIsInNvdXJjZVJvb3QiOiIuLi8uLiJ9
146
+ //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi9sb2ctaW50ZXJuYWwuanMiXSwibmFtZXMiOlsiREVGQVVMVF9SRVBMQUNFUiIsIlNlY3VyZVZhbHVlc1ByZXByb2Nlc3NvciIsImNvbnN0cnVjdG9yIiwiX3J1bGVzIiwicnVsZXMiLCJwYXJzZVJ1bGUiLCJydWxlIiwicmFpc2VFcnJvciIsIm1zZyIsIkVycm9yIiwiSlNPTiIsInN0cmluZ2lmeSIsInBhdHRlcm4iLCJyZXBsYWNlciIsImZsYWdzIiwiXyIsImlzU3RyaW5nIiwibGVuZ3RoIiwiZXNjYXBlUmVnRXhwIiwiaXNQbGFpbk9iamVjdCIsImhhcyIsInRleHQiLCJmbGFnIiwiaW5jbHVkZXMiLCJwdXNoIiwidW5pcSIsIlJlZ0V4cCIsImpvaW4iLCJlIiwibWVzc2FnZSIsImxvYWRSdWxlcyIsInNvdXJjZSIsImlzQXJyYXkiLCJmcyIsImV4aXN0cyIsInBhcnNlIiwicmVhZEZpbGUiLCJpc3N1ZXMiLCJwcmVwcm9jZXNzIiwic3RyIiwicmVzdWx0IiwicmVwbGFjZSIsIlNFQ1VSRV9WQUxVRVNfUFJFUFJPQ0VTU09SIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7OztBQUFBOztBQUNBOztBQUVBLE1BQU1BLGdCQUFnQixHQUFHLFlBQXpCOztBQVNBLE1BQU1DLHdCQUFOLENBQStCO0FBQzdCQyxFQUFBQSxXQUFXLEdBQUk7QUFDYixTQUFLQyxNQUFMLEdBQWMsRUFBZDtBQUNEOztBQU1RLE1BQUxDLEtBQUssR0FBSTtBQUNYLFdBQU8sS0FBS0QsTUFBWjtBQUNEOztBQXVCREUsRUFBQUEsU0FBUyxDQUFFQyxJQUFGLEVBQVE7QUFDZixVQUFNQyxVQUFVLEdBQUlDLEdBQUQsSUFBUztBQUMxQixZQUFNLElBQUlDLEtBQUosQ0FBVyxHQUFFQyxJQUFJLENBQUNDLFNBQUwsQ0FBZUwsSUFBZixDQUFxQixPQUFNRSxHQUFJLEVBQTVDLENBQU47QUFDRCxLQUZEOztBQUlBLFFBQUlJLE9BQUo7QUFDQSxRQUFJQyxRQUFRLEdBQUdiLGdCQUFmO0FB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LEVBQWdDO0FBQzlCcUMsTUFBQUEsTUFBTSxHQUFHQSxNQUFNLENBQUNDLE9BQVAsQ0FBZW5DLElBQUksQ0FBQ00sT0FBcEIsRUFBNkJOLElBQUksQ0FBQ08sUUFBbEMsQ0FBVDtBQUNEOztBQUNELFdBQU8yQixNQUFQO0FBQ0Q7O0FBcEo0Qjs7O0FBdUovQixNQUFNRSwwQkFBMEIsR0FBRyxJQUFJekMsd0JBQUosRUFBbkM7O2VBR2V5QywwQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBmcyBmcm9tICcuL2ZzJztcbmltcG9ydCBfIGZyb20gJ2xvZGFzaCc7XG5cbmNvbnN0IERFRkFVTFRfUkVQTEFDRVIgPSAnKipTRUNVUkUqKic7XG5cbi8qKlxuICogQHR5cGVkZWYge09iamVjdH0gU2VjdXJlVmFsdWVQcmVwcm9jZXNzaW5nUnVsZVxuICogQHByb3BlcnR5IHtSZWdFeHB9IHBhdHRlcm4gVGhlIHBhcnNlZCBwYXR0ZXJuIHdoaWNoIGlzIGdvaW5nIHRvIGJlIHVzZWQgZm9yIHJlcGxhY2VtZW50XG4gKiBAcHJvcGVydHkge3N0cmluZ30gcmVwbGFjZXIgW0RFRkFVTFRfU0VDVVJFX1JFUExBQ0VSXSBUaGUgcmVwbGFjZXIgdmFsdWUgdG8gdXNlLiBCeSBkZWZhdWx0XG4gKiBlcXVhbHMgdG8gYERFRkFVTFRfU0VDVVJFX1JFUExBQ0VSYFxuICovXG5cbmNsYXNzIFNlY3VyZVZhbHVlc1ByZXByb2Nlc3NvciB7XG4gIGNvbnN0cnVjdG9yICgpIHtcbiAgICB0aGlzLl9ydWxlcyA9IFtdO1xuICB9XG5cbiAgLyoqXG4gICAqIEByZXR1cm5zIHtBcnJheTxTZWN1cmVWYWx1ZVByZXByb2Nlc3NpbmdSdWxlPn0gVGhlIGxpc3Qgb2Ygc3VjY2Vzc2Z1bGx5XG4gICAqIHBhcnNlZCBwcmVwcm9jZXNzaW5nIHJ1bGVzXG4gICAqL1xuICBnZXQgcnVsZXMgKCkge1xuICAgIHJldHVybiB0aGlzLl9ydWxlcztcbiAgfVxuXG4gIC8qKlxuICAgKiBAdHlwZWRlZiB7T2JqZWN0fSBSdWxlXG4gICAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBwYXR0ZXJuIEEgdmFsaWQgUmVnRXhwIHBhdHRlcm4gdG8gYmUgcmVwbGFjZWRcbiAgICogQHByb3BlcnR5IHtzdHJpbmd9IHRleHQgQSB0ZXh0IG1hdGNoIHRvIHJlcGxhY2UuIEVpdGhlciB0aGlzIHByb3BlcnR5IG9yIHRoZVxuICAgKiBhYm92ZSBvbmUgbXVzdCBiZSBwcm92aWRlZC4gYHBhdHRlcm5gIGhhcyBwcmlvcml0eSBvdmVyIGB0ZXh0YCBpZiBib3RoIGFyZSBwcm92aWRlZC5cbiAgICogQHByb3BlcnR5IHtzdHJpbmd9IGZsYWdzIFsnZyddIFJlZ3VsYXIgZXhwcmVzc2lvbiBmbGFncyBmb3IgdGhlIGdpdmVuIHBhdHRlcm4uXG4gICAqIFN1cHBvcnRlZCBmbGFnIGFyZSB0aGUgc2FtZSBhcyBmb3IgdGhlIHN0YW5kYXJkIEphdmFTY3JpcHQgUmVnRXhwIGNvbnN0cnVjdG9yOlxuICAgKiBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9KYXZhU2NyaXB0L0d1aWRlL1JlZ3VsYXJfRXhwcmVzc2lvbnMjQWR2YW5jZWRfc2VhcmNoaW5nX3dpdGhfZmxhZ3NfMlxuICAgKiBUaGUgJ2cnIChnbG9iYWwgbWF0Y2hpbmcpIGlzIGFsd2F5cyBlbmFibGVkIHRob3VnaC5cbiAgICogQHByb3BlcnR5IHtzdHJpbmd9IHJlcGxhY2VyIFtERUZBVUxUX1NFQ1VSRV9SRVBMQUNFUl0gVGhlIHJlcGxhY2VyIHZhbHVlIHRvIHVzZS4gQnkgZGVmYXVsdFxuICAgKiBlcXVhbHMgdG8gYERFRkFVTFRfU0VDVVJFX1JFUExBQ0VSYFxuICAgKi9cblxuICAvKipcbiAgICogUGFyc2VzIHNpbmdsZSBydWxlIGZyb20gdGhlIGdpdmVuIEpTT04gZmlsZVxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ3xSdWxlfSBydWxlIFRoZSBydWxlIG1pZ2h0IGVpdGhlciBiZSByZXByZXNlbnRlZCBhcyBhIHNpbmdsZSBzdHJpbmdcbiAgICogb3IgYSBjb25maWd1cmF0aW9uIG9iamVjdFxuICAgKiBAdGhyb3dzIHtFcnJvcn0gSWYgdGhlcmUgd2FzIGFuIGVycm9yIHdoaWxlIHBhcnNpbmcgdGhlIHJ1bGVcbiAgICogQHJldHVybnMge1NlY3VyZVZhbHVlUHJlcHJvY2Vzc2luZ1J1bGV9IFRoZSBwYXJzZWQgcnVsZVxuICAgKi9cbiAgcGFyc2VSdWxlIChydWxlKSB7XG4gICAgY29uc3QgcmFpc2VFcnJvciA9IChtc2cpID0+IHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgJHtKU09OLnN0cmluZ2lmeShydWxlKX0gLT4gJHttc2d9YCk7XG4gICAgfTtcblxuICAgIGxldCBwYXR0ZXJuO1xuICAgIGxldCByZXBsYWNlciA9IERFRkFVTFRfUkVQTEFDRVI7XG4gICAgbGV0IGZsYWdzID0gWydnJ107XG4gICAgaWYgKF8uaXNTdHJpbmcocnVsZSkpIHtcbiAgICAgIGlmIChydWxlLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICByYWlzZUVycm9yKCdUaGUgdmFsdWUgbXVzdCBub3QgYmUgZW1wdHknKTtcbiAgICAgIH1cbiAgICAgIHBhdHRlcm4gPSBgXFxcXGIke18uZXNjYXBlUmVnRXhwKHJ1bGUpfVxcXFxiYDtcbiAgICB9IGVsc2UgaWYgKF8uaXNQbGFpbk9iamVjdChydWxlKSkge1xuICAgICAgaWYgKF8uaGFzKHJ1bGUsICdwYXR0ZXJuJykpIHtcbiAgICAgICAgaWYgKCFfLmlzU3RyaW5nKHJ1bGUucGF0dGVybikgfHwgcnVsZS5wYXR0ZXJuLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgIHJhaXNlRXJyb3IoYFRoZSB2YWx1ZSBvZiAncGF0dGVybicgbXVzdCBiZSBhIHZhbGlkIG5vbi1lbXB0eSBzdHJpbmdgKTtcbiAgICAgICAgfVxuICAgICAgICBwYXR0ZXJuID0gcnVsZS5wYXR0ZXJuO1xuICAgICAgfSBlbHNlIGlmIChfLmhhcyhydWxlLCAndGV4dCcpKSB7XG4gICAgICAgIGlmICghXy5pc1N0cmluZyhydWxlLnRleHQpIHx8IHJ1bGUudGV4dC5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICByYWlzZUVycm9yKGBUaGUgdmFsdWUgb2YgJ3RleHQnIG11c3QgYmUgYSB2YWxpZCBub24tZW1wdHkgc3RyaW5nYCk7XG4gICAgICAgIH1cbiAgICAgICAgcGF0dGVybiA9IGBcXFxcYiR7Xy5lc2NhcGVSZWdFeHAocnVsZS50ZXh0KX1cXFxcYmA7XG4gICAgICB9XG4gICAgICBpZiAoIXBhdHRlcm4pIHtcbiAgICAgICAgcmFpc2VFcnJvcihgTXVzdCBlaXRoZXIgaGF2ZSBhIGZpZWxkIG5hbWVkICdwYXR0ZXJuJyBvciAndGV4dCdgKTtcbiAgICAgIH1cblxuICAgICAgaWYgKF8uaGFzKHJ1bGUsICdmbGFncycpKSB7XG4gICAgICAgIC8vIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0phdmFTY3JpcHQvR3VpZGUvUmVndWxhcl9FeHByZXNzaW9ucyNBZHZhbmNlZF9zZWFyY2hpbmdfd2l0aF9mbGFnc18yXG4gICAgICAgIGZvciAoY29uc3QgZmxhZyBvZiBbJ2knLCAnZycsICdtJywgJ3MnLCAndScsICd5J10pIHtcbiAgICAgICAgICBpZiAoXy5pbmNsdWRlcyhydWxlLmZsYWdzLCBmbGFnKSkge1xuICAgICAgICAgICAgZmxhZ3MucHVzaChmbGFnKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZmxhZ3MgPSBfLnVuaXEoZmxhZ3MpO1xuICAgICAgfVxuXG4gICAgICBpZiAoXy5pc1N0cmluZyhydWxlLnJlcGxhY2VyKSkge1xuICAgICAgICByZXBsYWNlciA9IHJ1bGUucmVwbGFjZXI7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHJhaXNlRXJyb3IoJ011c3QgZWl0aGVyIGJlIGEgc3RyaW5nIG9yIGFuIG9iamVjdCcpO1xuICAgIH1cblxuICAgIHRyeSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBwYXR0ZXJuOiBuZXcgUmVnRXhwKHBhdHRlcm4sIGZsYWdzLmpvaW4oJycpKSxcbiAgICAgICAgcmVwbGFjZXIsXG4gICAgICB9O1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHJhaXNlRXJyb3IoZS5tZXNzYWdlKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogTG9hZHMgcnVsZXMgZnJvbSB0aGUgZ2l2ZW4gSlNPTiBmaWxlXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfHN0cmluZ1tdfFJ1bGVbXT59IHNvdXJjZSBUaGUgZnVsbCBwYXRoIHRvIHRoZSBKU09OIGZpbGUgY29udGFpbmluZyBzZWN1cmVcbiAgICogdmFsdWVzIHJlcGxhY2VtZW50IHJ1bGVzIG9yIHRoZSBydWxlcyB0aGVtc2VsdmVzIHJlcHJlc2VudGVkIGFzIGFuIGFycmF5XG4gICAqIEB0aHJvd3Mge0Vycm9yfSBJZiB0aGUgZm9ybWF0IG9mIHRoZSBzb3VyY2UgZmlsZSBpcyBpbnZhbGlkIG9yXG4gICAqIGl0IGRvZXMgbm90IGV4aXN0XG4gICAqIEByZXR1cm5zIHtBcnJheTxzdHJpbmc+fSBUaGUgbGlzdCBvZiBpc3N1ZXMgZm91bmQgd2hpbGUgcGFyc2luZyBlYWNoIHJ1bGUuXG4gICAqIEFuIGVtcHR5IGxpc3QgaXMgcmV0dXJuZWQgaWYgbm8gcnVsZSBwYXJzaW5nIGlzc3VlcyB3ZXJlIGZvdW5kXG4gICAqL1xuICBhc3luYyBsb2FkUnVsZXMgKHNvdXJjZSkge1xuICAgIGxldCBydWxlcztcbiAgICBpZiAoXy5pc0FycmF5KHNvdXJjZSkpIHtcbiAgICAgIHJ1bGVzID0gc291cmNlO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoIWF3YWl0IGZzLmV4aXN0cyhzb3VyY2UpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgJyR7c291cmNlfScgZG9lcyBub3QgZXhpc3Qgb3IgaXMgbm90IGFjY2Vzc2libGVgKTtcbiAgICAgIH1cbiAgICAgIHRyeSB7XG4gICAgICAgIHJ1bGVzID0gSlNPTi5wYXJzZShhd2FpdCBmcy5yZWFkRmlsZShzb3VyY2UsICd1dGY4JykpO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYCcke3NvdXJjZX0nIG11c3QgYmUgYSB2YWxpZCBKU09OIGZpbGUuIE9yaWdpbmFsIGVycm9yOiAke2UubWVzc2FnZX1gKTtcbiAgICAgIH1cbiAgICAgIGlmICghXy5pc0FycmF5KHJ1bGVzKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYCcke3NvdXJjZX0nIG11c3QgY29udGFpbiBhIHZhbGlkIEpTT04gYXJyYXlgKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBpc3N1ZXMgPSBbXTtcbiAgICB0aGlzLl9ydWxlcyA9IFtdO1xuICAgIGZvciAoY29uc3QgcnVsZSBvZiBydWxlcykge1xuICAgICAgdHJ5IHtcbiAgICAgICAgdGhpcy5fcnVsZXMucHVzaCh0aGlzLnBhcnNlUnVsZShydWxlKSk7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIGlzc3Vlcy5wdXNoKGUubWVzc2FnZSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBpc3N1ZXM7XG4gIH1cblxuICAvKipcbiAgICogUGVyZm9ybXMgc2VjdXJlIHZhbHVlcyByZXBsYWNlbWVudCBpbnNpZGUgdGhlIGdpdmVuIHN0cmluZ1xuICAgKiBhY2NvcmRpbmcgdG8gdGhlIHByZXZpb3VzbHkgbG9hZGVkIHJ1bGVzLiBObyByZXBsYWNlbWVudCBpcyBtYWRlXG4gICAqIGlmIHRoZXJlIGFyZSBubyBydWxlcyBvciB0aGUgZ2l2ZW4gdmFsdWUgaXMgbm90IGEgc3RyaW5nXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBzdHIgVGhlIHN0cmluZyB0byBtYWtlIHJlcGxhY2VtZW50cyBpblxuICAgKiBAcmV0dXJucyB7c3RyaW5nfSBUaGUgc3RyaW5nIHdpdGggcmVwbGFjZW1lbnRzIG1hZGVcbiAgICovXG4gIHByZXByb2Nlc3MgKHN0cikge1xuICAgIGlmICh0aGlzLl9ydWxlcy5sZW5ndGggPT09IDAgfHwgIV8uaXNTdHJpbmcoc3RyKSkge1xuICAgICAgcmV0dXJuIHN0cjtcbiAgICB9XG5cbiAgICBsZXQgcmVzdWx0ID0gc3RyO1xuICAgIGZvciAoY29uc3QgcnVsZSBvZiB0aGlzLl9ydWxlcykge1xuICAgICAgcmVzdWx0ID0gcmVzdWx0LnJlcGxhY2UocnVsZS5wYXR0ZXJuLCBydWxlLnJlcGxhY2VyKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxufVxuXG5jb25zdCBTRUNVUkVfVkFMVUVTX1BSRVBST0NFU1NPUiA9IG5ldyBTZWN1cmVWYWx1ZXNQcmVwcm9jZXNzb3IoKTtcblxuZXhwb3J0IHsgU0VDVVJFX1ZBTFVFU19QUkVQUk9DRVNTT1IsIFNlY3VyZVZhbHVlc1ByZXByb2Nlc3NvciB9O1xuZXhwb3J0IGRlZmF1bHQgU0VDVVJFX1ZBTFVFU19QUkVQUk9DRVNTT1I7XG4iXSwiZmlsZSI6ImxpYi9sb2ctaW50ZXJuYWwuanMiLCJzb3VyY2VSb290IjoiLi4vLi4ifQ==
@@ -130,4 +130,4 @@ var _default = log;
130
130
  exports.default = _default;require('source-map-support').install();
131
131
 
132
132
 
133
- //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi9sb2dnaW5nLmpzIl0sIm5hbWVzIjpbIk5QTV9MRVZFTFMiLCJNQVhfTE9HX1JFQ09SRFNfQ09VTlQiLCJQUkVGSVhfVElNRVNUQU1QX0ZPUk1BVCIsIm1vY2tMb2ciLCJsZXZlbCIsInBhdGNoTG9nZ2VyIiwibG9nZ2VyIiwiZGVidWciLCJhZGRMZXZlbCIsImZnIiwiYmciLCJfZ2V0TG9nZ2VyIiwidGVzdGluZ01vZGUiLCJwYXJzZUludCIsInByb2Nlc3MiLCJlbnYiLCJfVEVTVElORyIsImZvcmNlTG9nTW9kZSIsIl9GT1JDRV9MT0dTIiwidXNpbmdHbG9iYWxMb2ciLCJnbG9iYWwiLCJfZ2xvYmFsX25wbWxvZyIsIm5wbWxvZyIsIm1heFJlY29yZFNpemUiLCJnZXRBY3R1YWxQcmVmaXgiLCJwcmVmaXgiLCJsb2dUaW1lc3RhbXAiLCJhY3R1YWxQcmVmaXgiLCJfIiwiaXNGdW5jdGlvbiIsImZvcm1hdCIsImdldExvZ2dlciIsIndyYXBwZWRMb2dnZXIiLCJ1bndyYXAiLCJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsImdldCIsInNldCIsIm5ld1ZhbHVlIiwiZW51bWVyYWJsZSIsImNvbmZpZ3VyYWJsZSIsIl9MT0dfVElNRVNUQU1QIiwiYXJncyIsImFyZyIsIm91dCIsImlzRXJyb3IiLCJzdGFjayIsImxpbmUiLCJzcGxpdCIsInVubGVha2VkTGluZSIsIlNFQ1VSRV9WQUxVRVNfUFJFUFJPQ0VTU09SIiwicHJlcHJvY2VzcyIsImVycm9yQW5kVGhyb3ciLCJlcnIiLCJlcnJvciIsIkVycm9yIiwibGV2ZWxzIiwibG9hZFNlY3VyZVZhbHVlc1ByZXByb2Nlc3NpbmdSdWxlcyIsInJ1bGVzSnNvblBhdGgiLCJpc3N1ZXMiLCJsb2FkUnVsZXMiLCJydWxlcyIsImNsb25lRGVlcCIsImxvZyJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBR0EsTUFBTUEsVUFBVSxHQUFHLENBQUMs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REMsYUFBbkQsRUFBa0U7QUFDaEUsUUFBTUMsTUFBTSxHQUFHLE1BQU1ULHFCQUEyQlUsU0FBM0IsQ0FBcUNGLGFBQXJDLENBQXJCO0FBQ0EsU0FBTztBQUNMQyxJQUFBQSxNQURLO0FBRUxFLElBQUFBLEtBQUssRUFBRWpDLGdCQUFFa0MsU0FBRixDQUFZWixxQkFBMkJXLEtBQXZDO0FBRkYsR0FBUDtBQUlEOztBQUdELE1BQU1FLEdBQUcsR0FBR2hDLFNBQVMsRUFBckI7O2VBR2VnQyxHIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IG5wbWxvZyBmcm9tICducG1sb2cnO1xuaW1wb3J0IF8gZnJvbSAnbG9kYXNoJztcbmltcG9ydCB7IHVubGVha1N0cmluZyB9IGZyb20gJy4vdXRpbCc7XG5pbXBvcnQgbW9tZW50IGZyb20gJ21vbWVudCc7XG5pbXBvcnQgU0VDVVJFX1ZBTFVFU19QUkVQUk9DRVNTT1IgZnJvbSAnLi9sb2ctaW50ZXJuYWwnO1xuXG4vLyBsZXZlbHMgdGhhdCBhcmUgYXZhaWxhYmxlIGZyb20gYG5wbWxvZ2BcbmNvbnN0IE5QTV9MRVZFTFMgPSBbJ3NpbGx5JywgJ3ZlcmJvc2UnLCAnZGVidWcnLCAnaW5mbycsICdodHRwJywgJ3dhcm4nLCAnZXJyb3InXTtcbmNvbnN0IE1BWF9MT0dfUkVDT1JEU19DT1VOVCA9IDMwMDA7XG5cbmNvbnN0IFBSRUZJWF9USU1FU1RBTVBfRk9STUFUID0gJ0hILW1tLXNzOlNTUyc7XG5cbi8vIG1vY2sgbG9nIG9iamVjdCB1c2VkIGluIHRlc3RpbmcgbW9kZVxubGV0IG1vY2tMb2cgPSB7fTtcbmZvciAobGV0IGxldmVsIG9mIE5QTV9MRVZFTFMpIHtcbiAgbW9ja0xvZ1tsZXZlbF0gPSAoKSA9PiB7fTtcbn1cblxuZnVuY3Rpb24gcGF0Y2hMb2dnZXIgKGxvZ2dlcikge1xuICBpZiAoIWxvZ2dlci5kZWJ1Zykge1xuICAgIGxvZ2dlci5hZGRMZXZlbCgnZGVidWcnLCAxMDAwLCB7IGZnOiAnYmx1ZScsIGJnOiAnYmxhY2snIH0sICdkYnVnJyk7XG4gIH1cbn1cblxuZnVuY3Rpb24gX2dldExvZ2dlciAoKSB7XG4gIC8vIGNoZWNrIGlmIHRoZSB1c2VyIHNldCB0aGUgYF9URVNUSU5HYCBvciBgX0ZPUkNFX0xPR1NgIGZsYWdcbiAgY29uc3QgdGVzdGluZ01vZGUgPSBwYXJzZUludChwcm9jZXNzLmVudi5fVEVTVElORywgMTApID09PSAxO1xuICBjb25zdCBmb3JjZUxvZ01vZGUgPSBwYXJzZUludChwcm9jZXNzLmVudi5fRk9SQ0VfTE9HUywgMTApID09PSAxO1xuXG4gIC8vIGlmIGlzIHBvc3NpYmxlIHRoYXQgdGhlcmUgaXMgYSBsb2dnZXIgaW5zdGFuY2UgdGhhdCBpcyBhbHJlYWR5IGFyb3VuZCxcbiAgLy8gaW4gd2hpY2ggY2FzZSB3ZSB3YW50IHQgbyB1c2UgdGhhdFxuICBjb25zdCB1c2luZ0dsb2JhbExvZyA9ICEhZ2xvYmFsLl9nbG9iYWxfbnBtbG9nO1xuICBsZXQgbG9nZ2VyO1xuICBpZiAodGVzdGluZ01vZGUgJiYgIWZvcmNlTG9nTW9kZSkge1xuICAgIC8vIGluIHRlc3RpbmcgbW9kZSwgdXNlIGEgbW9jayBsb2dnZXIgb2JqZWN0IHRoYXQgd2UgY2FuIHF1ZXJ5XG4gICAgbG9nZ2VyID0gbW9ja0xvZztcbiAgfSBlbHNlIHtcbiAgICAvLyBvdGhlcndpc2UsIGVpdGhlciB1c2UgdGhlIGdsb2JhbCwgb3IgYSBuZXcgYG5wbWxvZ2Agb2JqZWN0XG4gICAgbG9nZ2VyID0gZ2xvYmFsLl9nbG9iYWxfbnBtbG9nIHx8IG5wbWxvZztcbiAgICAvLyBUaGUgZGVmYXVsdCB2YWx1ZSBpcyAxMDAwMCwgd2hpY2ggY2F1c2VzIGV4Y2Vzc2l2ZSBtZW1vcnkgdXNhZ2VcbiAgICBsb2dnZXIubWF4UmVjb3JkU2l6ZSA9IE1BWF9MT0dfUkVDT1JEU19DT1VOVDtcbiAgfVxuICBwYXRjaExvZ2dlcihsb2dnZXIpO1xuICByZXR1cm4gW2xvZ2dlciwgdXNpbmdHbG9iYWxMb2ddO1xufVxuXG5mdW5jdGlvbiBnZXRBY3R1YWxQcmVmaXggKHByZWZpeCwgbG9nVGltZXN0YW1wID0gZmFsc2UpIHtcbiAgbGV0IGFjdHVhbFByZWZpeCA9IF8uaXNGdW5jdGlvbihwcmVmaXgpID8gcHJlZml4KCkgOiBwcmVmaXg7XG4gIGlmIChsb2dUaW1lc3RhbXApIHtcbiAgICBhY3R1YWxQcmVmaXggPSBgWyR7bW9tZW50KCkuZm9ybWF0KFBSRUZJWF9USU1FU1RBTVBfRk9STUFUKX1dICR7YWN0dWFsUHJlZml4fWA7XG4gIH1cbiAgcmV0dXJuIGFjdHVhbFByZWZpeDtcbn1cblxuZnVuY3Rpb24gZ2V0TG9nZ2VyIChwcmVmaXggPSBudWxsKSB7XG4gIGxldCBbbG9nZ2VyLCB1c2luZ0dsb2JhbExvZ10gPSBfZ2V0TG9nZ2VyKCk7XG5cbiAgLy8gd3JhcCB0aGUgbG9nZ2VyIHNvIHRoYXQgd2UgY2FuIGNhdGNoIGFuZCBtb2RpZnkgYW55IGxvZ2dpbmdcbiAgbGV0IHdyYXBwZWRMb2dnZXIgPSB7dW53cmFwOiAoKSA9PiBsb2dnZXJ9O1xuXG4gIC8vIGFsbG93IGFjY2VzcyB0byB0aGUgbGV2ZWwgb2YgdGhlIHVuZGVybHlpbmcgbG9nZ2VyXG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh3cmFwcGVkTG9nZ2VyLCAnbGV2ZWwnLCB7XG4gICAgZ2V0ICgpIHtcbiAgICAgIHJldHVybiBsb2dnZXIubGV2ZWw7XG4gICAgfSxcbiAgICBzZXQgKG5ld1ZhbHVlKSB7XG4gICAgICBsb2dnZXIubGV2ZWwgPSBuZXdWYWx1ZTtcbiAgICB9LFxuICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgY29uZmlndXJhYmxlOiB0cnVlXG4gIH0pO1xuXG4gIGNvbnN0IGxvZ1RpbWVzdGFtcCA9IHBhcnNlSW50KHByb2Nlc3MuZW52Ll9MT0dfVElNRVNUQU1QLCAxMCkgPT09IDE7XG5cbiAgLy8gYWRkIGFsbCB0aGUgbGV2ZWxzIGZyb20gYG5wbWxvZ2AsIGFuZCBtYXAgdG8gdGhlIHVuZGVybHlpbmcgbG9nZ2VyXG4gIGZvciAoY29uc3QgbGV2ZWwgb2YgTlBNX0xFVkVMUykge1xuICAgIHdyYXBwZWRMb2dnZXJbbGV2ZWxdID0gZnVuY3Rpb24gKC4uLmFyZ3MpIHtcbiAgICAgIGNvbnN0IGFjdHVhbFByZWZpeCA9IGdldEFjdHVhbFByZWZpeChwcmVmaXgsIGxvZ1RpbWVzdGFtcCk7XG4gICAgICBmb3IgKGNvbnN0IGFyZyBvZiBhcmdzKSB7XG4gICAgICAgIGNvbnN0IG91dCA9IChfLmlzRXJyb3IoYXJnKSAmJiBhcmcuc3RhY2spID8gYXJnLnN0YWNrIDogYCR7YXJnfWA7XG4gICAgICAgIGZvciAoY29uc3QgbGluZSBvZiBvdXQuc3BsaXQoJ1xcbicpKSB7XG4gICAgICAgICAgLy8gaXQgaXMgbmVjZXNzYXJ5IHRvIHVubGVhayBlYWNoIGxpbmUgYmVjYXVzZSBgc3BsaXRgIGNhbGxcbiAgICAgICAgICAvLyBjcmVhdGVzIFwidmlld3NcIiB0byB0aGUgb3JpZ2luYWwgc3RyaW5nIGFzIHdlbGwgYXMgdGhlIGBzdWJzdHJpbmdgIG9uZVxuICAgICAgICAgIGNvbnN0IHVubGVha2VkTGluZSA9IHVubGVha1N0cmluZyhsaW5lKTtcbiAgICAgICAgICBsb2dnZXJbbGV2ZWxdKGFjdHVhbFByZWZpeCwgU0VDVVJFX1ZBTFVFU19QUkVQUk9DRVNTT1IucHJlcHJvY2Vzcyh1bmxlYWtlZExpbmUpKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH07XG4gIH1cbiAgLy8gYWRkIG1ldGhvZCB0byBsb2cgYW4gZXJyb3IsIGFuZCB0aHJvdyBpdCwgZm9yIGNvbnZlbmllbmNlXG4gIHdyYXBwZWRMb2dnZXIuZXJyb3JBbmRUaHJvdyA9IGZ1bmN0aW9uIChlcnIpIHtcbiAgICB0aGlzLmVycm9yKGVycik7XG4gICAgLy8gbWFrZSBzdXJlIHdlIGhhdmUgYW4gYEVycm9yYCBvYmplY3QuIFdyYXAgaWYgbmVjZXNzYXJ5XG4gICAgdGhyb3cgKF8uaXNFcnJvcihlcnIpID8gZXJyIDogbmV3IEVycm9yKHVubGVha1N0cmluZyhlcnIpKSk7XG4gIH07XG4gIGlmICghdXNpbmdHbG9iYWxMb2cpIHtcbiAgICAvLyBpZiB3ZSdyZSBub3QgdXNpbmcgYSBnbG9iYWwgbG9nIHNwZWNpZmllZCBmcm9tIHNvbWUgdG9wLWxldmVsIHBhY2thZ2UsXG4gICAgLy8gc2V0IHRoZSBsb2cgbGV2ZWwgdG8gYSBkZWZhdWx0IG9mIHZlcmJvc2UuIE90aGVyd2lzZSwgbGV0IHRoZSB0b3AtbGV2ZWxcbiAgICAvLyBwYWNrYWdlIHNldCB0aGUgbG9nIGxldmVsXG4gICAgd3JhcHBlZExvZ2dlci5sZXZlbCA9ICd2ZXJib3NlJztcbiAgfVxuICB3cmFwcGVkTG9nZ2VyLmxldmVscyA9IE5QTV9MRVZFTFM7XG4gIHJldHVybiB3cmFwcGVkTG9nZ2VyO1xufVxuXG4vKipcbiAqIEB0eXBlZGVmIHtPYmplY3R9IExvYWRSZXN1bHRcbiAqIEBwcm9wZXJ0eSB7TGlzdDxzdHJpbmc+fSBpc3N1ZXMgVGhlIGxpc3Qgb2YgcnVsZSBwYXJzaW5nIGlzc3VlcyAob25lIGl0ZW0gcGVyIHJ1bGUpLlxuICogUnVsZXMgd2l0aCBpc3N1ZXMgYXJlIHNraXBwZWQuIEFuIGVtcHR5IGxpc3QgaXMgcmV0dXJuZWQgaWYgbm8gcGFyc2luZyBpc3N1ZXMgZXhpc3QuXG4gKiBAcHJvcGVydHkge0xpc3Q8U2VjdXJlVmFsdWVQcmVwcm9jZXNzaW5nUnVsZT59IHJ1bGVzIFRoZSBsaXN0IG9mIHN1Y2Nlc3NmdWxseSBsb2FkZWRcbiAqIHJlcGxhY2VtZW50IHJ1bGVzLiBUaGUgbGlzdCBjb3VsZCBiZSBlbXB0eSBpZiBubyBydWxlcyB3ZXJlIGxvYWRlZC5cbiAqL1xuXG4vKipcbiAqIExvYWRzIHRoZSBKU09OIGZpbGUgY29udGFpbmluZyBzZWN1cmUgdmFsdWVzIHJlcGxhY2VtZW50IHJ1bGVzLlxuICogVGhpcyBtaWdodCBiZSBuZWNlc3NhcnkgdG8gaGlkZSBzZW5zaXRpdmUgdmFsdWVzIHRoYXQgbWF5IHBvc3NpYmx5XG4gKiBhcHBlYXIgaW4gQXBwaXVtIGxvZ3MuXG4gKiBFYWNoIGNhbGwgdG8gdGhpcyBtZXRob2QgcmVwbGFjZXMgdGhlIHByZXZpb3VzbHkgbG9hZGVkIHJ1bGVzIGlmIGFueSBleGlzdGVkLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBydWxlc0pzb25QYXRoIFRoZSBmdWxsIHBhdGggdG8gdGhlIEpTT04gZmlsZSBjb250YWluaW5nXG4gKiB0aGUgcmVwbGFjZW1lbnQgcnVsZXMuIEVhY2ggcnVsZSBjb3VsZCBlaXRoZXIgYmUgYSBzdHJpbmcgdG8gYmUgcmVwbGFjZWRcbiAqIG9yIGFuIG9iamVjdCB3aXRoIHByZWRlZmluZWQgcHJvcGVydGllcy4gU2VlIHRoZSBgUnVsZWAgdHlwZSBkZWZpbml0aW9uIGluXG4gKiBgbG9nLWludGVybmFscy5qc2AgdG8gZ2V0IG1vcmUgZGV0YWlscyBvbiBpdHMgZm9ybWF0LlxuICogQHRocm93cyB7RXJyb3J9IElmIHRoZSBnaXZlbiBmaWxlIGNhbm5vdCBiZSBsb2FkZWRcbiAqIEByZXR1cm5zIHtMb2FkUmVzdWx0fVxuICovXG5hc3luYyBmdW5jdGlvbiBsb2FkU2VjdXJlVmFsdWVzUHJlcHJvY2Vzc2luZ1J1bGVzIChydWxlc0pzb25QYXRoKSB7XG4gIGNvbnN0IGlzc3VlcyA9IGF3YWl0IFNFQ1VSRV9WQUxVRVNfUFJFUFJPQ0VTU09SLmxvYWRSdWxlcyhydWxlc0pzb25QYXRoKTtcbiAgcmV0dXJuIHtcbiAgICBpc3N1ZXMsXG4gICAgcnVsZXM6IF8uY2xvbmVEZWVwKFNFQ1VSRV9WQUxVRVNfUFJFUFJPQ0VTU09SLnJ1bGVzKSxcbiAgfTtcbn1cblxuLy8gZXhwb3J0IGEgZGVmYXVsdCBsb2dnZXIgd2l0aCBubyBwcmVmaXhcbmNvbnN0IGxvZyA9IGdldExvZ2dlcigpO1xuXG5leHBvcnQgeyBsb2csIHBhdGNoTG9nZ2VyLCBnZXRMb2dnZXIsIGxvYWRTZWN1cmVWYWx1ZXNQcmVwcm9jZXNzaW5nUnVsZXMgfTtcbmV4cG9ydCBkZWZhdWx0IGxvZztcbiJdLCJmaWxlIjoibGliL2xvZ2dpbmcuanMiLCJzb3VyY2VSb290IjoiLi4vLi4ifQ==
133
+ //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi9sb2dnaW5nLmpzIl0sIm5hbWVzIjpbIk5QTV9MRVZFTFMiLCJNQVhfTE9HX1JFQ09SRFNfQ09VTlQiLCJQUkVGSVhfVElNRVNUQU1QX0ZPUk1BVCIsIm1vY2tMb2ciLCJsZXZlbCIsInBhdGNoTG9nZ2VyIiwibG9nZ2VyIiwiZGVidWciLCJhZGRMZXZlbCIsImZnIiwiYmciLCJfZ2V0TG9nZ2VyIiwidGVzdGluZ01vZGUiLCJwYXJzZUludCIsInByb2Nlc3MiLCJlbnYiLCJfVEVTVElORyIsImZvcmNlTG9nTW9kZSIsIl9GT1JDRV9MT0dTIiwidXNpbmdHbG9iYWxMb2ciLCJnbG9iYWwiLCJfZ2xvYmFsX25wbWxvZyIsIm5wbWxvZyIsIm1heFJlY29yZFNpemUiLCJnZXRBY3R1YWxQcmVmaXgiLCJwcmVmaXgiLCJsb2dUaW1lc3RhbXAiLCJhY3R1YWxQcmVmaXgiLCJfIiwiaXNGdW5jdGlvbiIsImZvcm1hdCIsImdldExvZ2dlciIsIndyYXBwZWRMb2dnZXIiLCJ1bndyYXAiLCJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsImdldCIsInNldCIsIm5ld1ZhbHVlIiwiZW51bWVyYWJsZSIsImNvbmZpZ3VyYWJsZSIsIl9MT0dfVElNRVNUQU1QIiwiYXJncyIsImFyZyIsIm91dCIsImlzRXJyb3IiLCJzdGFjayIsImxpbmUiLCJzcGxpdCIsInVubGVha2VkTGluZSIsIlNFQ1VSRV9WQUxVRVNfUFJFUFJPQ0VTU09SIiwicHJlcHJvY2VzcyIsImVycm9yQW5kVGhyb3ciLCJlcnIiLCJlcnJvciIsIkVycm9yIiwibGV2ZWxzIiwibG9hZFNlY3VyZVZhbHVlc1ByZXByb2Nlc3NpbmdSdWxlcyIsInJ1bGVzSnNvblBhdGgiLCJpc3N1ZXMiLCJsb2FkUnVsZXMiLCJydWxlcyIsImNsb25lRGVlcCIsImxvZyJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBR0EsTUFBTUEsVUFBVSxHQUFHLENBQUMs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REMsYUFBbkQsRUFBa0U7QUFDaEUsUUFBTUMsTUFBTSxHQUFHLE1BQU1ULHFCQUEyQlUsU0FBM0IsQ0FBcUNGLGFBQXJDLENBQXJCO0FBQ0EsU0FBTztBQUNMQyxJQUFBQSxNQURLO0FBRUxFLElBQUFBLEtBQUssRUFBRWpDLGdCQUFFa0MsU0FBRixDQUFZWixxQkFBMkJXLEtBQXZDO0FBRkYsR0FBUDtBQUlEOztBQUdELE1BQU1FLEdBQUcsR0FBR2hDLFNBQVMsRUFBckI7O2VBR2VnQyxHIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IG5wbWxvZyBmcm9tICducG1sb2cnO1xuaW1wb3J0IF8gZnJvbSAnbG9kYXNoJztcbmltcG9ydCB7IHVubGVha1N0cmluZyB9IGZyb20gJy4vdXRpbCc7XG5pbXBvcnQgbW9tZW50IGZyb20gJ21vbWVudCc7XG5pbXBvcnQgU0VDVVJFX1ZBTFVFU19QUkVQUk9DRVNTT1IgZnJvbSAnLi9sb2ctaW50ZXJuYWwnO1xuXG4vLyBsZXZlbHMgdGhhdCBhcmUgYXZhaWxhYmxlIGZyb20gYG5wbWxvZ2BcbmNvbnN0IE5QTV9MRVZFTFMgPSBbJ3NpbGx5JywgJ3ZlcmJvc2UnLCAnZGVidWcnLCAnaW5mbycsICdodHRwJywgJ3dhcm4nLCAnZXJyb3InXTtcbmNvbnN0IE1BWF9MT0dfUkVDT1JEU19DT1VOVCA9IDMwMDA7XG5cbmNvbnN0IFBSRUZJWF9USU1FU1RBTVBfRk9STUFUID0gJ0hILW1tLXNzOlNTUyc7XG5cbi8vIG1vY2sgbG9nIG9iamVjdCB1c2VkIGluIHRlc3RpbmcgbW9kZVxubGV0IG1vY2tMb2cgPSB7fTtcbmZvciAobGV0IGxldmVsIG9mIE5QTV9MRVZFTFMpIHtcbiAgbW9ja0xvZ1tsZXZlbF0gPSAoKSA9PiB7fTtcbn1cblxuZnVuY3Rpb24gcGF0Y2hMb2dnZXIgKGxvZ2dlcikge1xuICBpZiAoIWxvZ2dlci5kZWJ1Zykge1xuICAgIGxvZ2dlci5hZGRMZXZlbCgnZGVidWcnLCAxMDAwLCB7IGZnOiAnYmx1ZScsIGJnOiAnYmxhY2snIH0sICdkYnVnJyk7XG4gIH1cbn1cblxuZnVuY3Rpb24gX2dldExvZ2dlciAoKSB7XG4gIC8vIGNoZWNrIGlmIHRoZSB1c2VyIHNldCB0aGUgYF9URVNUSU5HYCBvciBgX0ZPUkNFX0xPR1NgIGZsYWdcbiAgY29uc3QgdGVzdGluZ01vZGUgPSBwYXJzZUludChwcm9jZXNzLmVudi5fVEVTVElORywgMTApID09PSAxO1xuICBjb25zdCBmb3JjZUxvZ01vZGUgPSBwYXJzZUludChwcm9jZXNzLmVudi5fRk9SQ0VfTE9HUywgMTApID09PSAxO1xuXG4gIC8vIGlmIGlzIHBvc3NpYmxlIHRoYXQgdGhlcmUgaXMgYSBsb2dnZXIgaW5zdGFuY2UgdGhhdCBpcyBhbHJlYWR5IGFyb3VuZCxcbiAgLy8gaW4gd2hpY2ggY2FzZSB3ZSB3YW50IHQgbyB1c2UgdGhhdFxuICBjb25zdCB1c2luZ0dsb2JhbExvZyA9ICEhZ2xvYmFsLl9nbG9iYWxfbnBtbG9nO1xuICBsZXQgbG9nZ2VyO1xuICBpZiAodGVzdGluZ01vZGUgJiYgIWZvcmNlTG9nTW9kZSkge1xuICAgIC8vIGluIHRlc3RpbmcgbW9kZSwgdXNlIGEgbW9jayBsb2dnZXIgb2JqZWN0IHRoYXQgd2UgY2FuIHF1ZXJ5XG4gICAgbG9nZ2VyID0gbW9ja0xvZztcbiAgfSBlbHNlIHtcbiAgICAvLyBvdGhlcndpc2UsIGVpdGhlciB1c2UgdGhlIGdsb2JhbCwgb3IgYSBuZXcgYG5wbWxvZ2Agb2JqZWN0XG4gICAgbG9nZ2VyID0gZ2xvYmFsLl9nbG9iYWxfbnBtbG9nIHx8IG5wbWxvZztcbiAgICAvLyBUaGUgZGVmYXVsdCB2YWx1ZSBpcyAxMDAwMCwgd2hpY2ggY2F1c2VzIGV4Y2Vzc2l2ZSBtZW1vcnkgdXNhZ2VcbiAgICBsb2dnZXIubWF4UmVjb3JkU2l6ZSA9IE1BWF9MT0dfUkVDT1JEU19DT1VOVDtcbiAgfVxuICBwYXRjaExvZ2dlcihsb2dnZXIpO1xuICByZXR1cm4gW2xvZ2dlciwgdXNpbmdHbG9iYWxMb2ddO1xufVxuXG5mdW5jdGlvbiBnZXRBY3R1YWxQcmVmaXggKHByZWZpeCwgbG9nVGltZXN0YW1wID0gZmFsc2UpIHtcbiAgbGV0IGFjdHVhbFByZWZpeCA9IF8uaXNGdW5jdGlvbihwcmVmaXgpID8gcHJlZml4KCkgOiBwcmVmaXg7XG4gIGlmIChsb2dUaW1lc3RhbXApIHtcbiAgICBhY3R1YWxQcmVmaXggPSBgWyR7bW9tZW50KCkuZm9ybWF0KFBSRUZJWF9USU1FU1RBTVBfRk9STUFUKX1dICR7YWN0dWFsUHJlZml4fWA7XG4gIH1cbiAgcmV0dXJuIGFjdHVhbFByZWZpeDtcbn1cblxuZnVuY3Rpb24gZ2V0TG9nZ2VyIChwcmVmaXggPSBudWxsKSB7XG4gIGxldCBbbG9nZ2VyLCB1c2luZ0dsb2JhbExvZ10gPSBfZ2V0TG9nZ2VyKCk7XG5cbiAgLy8gd3JhcCB0aGUgbG9nZ2VyIHNvIHRoYXQgd2UgY2FuIGNhdGNoIGFuZCBtb2RpZnkgYW55IGxvZ2dpbmdcbiAgbGV0IHdyYXBwZWRMb2dnZXIgPSB7dW53cmFwOiAoKSA9PiBsb2dnZXJ9O1xuXG4gIC8vIGFsbG93IGFjY2VzcyB0byB0aGUgbGV2ZWwgb2YgdGhlIHVuZGVybHlpbmcgbG9nZ2VyXG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh3cmFwcGVkTG9nZ2VyLCAnbGV2ZWwnLCB7XG4gICAgZ2V0ICgpIHtcbiAgICAgIHJldHVybiBsb2dnZXIubGV2ZWw7XG4gICAgfSxcbiAgICBzZXQgKG5ld1ZhbHVlKSB7XG4gICAgICBsb2dnZXIubGV2ZWwgPSBuZXdWYWx1ZTtcbiAgICB9LFxuICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgY29uZmlndXJhYmxlOiB0cnVlXG4gIH0pO1xuXG4gIGNvbnN0IGxvZ1RpbWVzdGFtcCA9IHBhcnNlSW50KHByb2Nlc3MuZW52Ll9MT0dfVElNRVNUQU1QLCAxMCkgPT09IDE7XG5cbiAgLy8gYWRkIGFsbCB0aGUgbGV2ZWxzIGZyb20gYG5wbWxvZ2AsIGFuZCBtYXAgdG8gdGhlIHVuZGVybHlpbmcgbG9nZ2VyXG4gIGZvciAoY29uc3QgbGV2ZWwgb2YgTlBNX0xFVkVMUykge1xuICAgIHdyYXBwZWRMb2dnZXJbbGV2ZWxdID0gZnVuY3Rpb24gKC4uLmFyZ3MpIHtcbiAgICAgIGNvbnN0IGFjdHVhbFByZWZpeCA9IGdldEFjdHVhbFByZWZpeChwcmVmaXgsIGxvZ1RpbWVzdGFtcCk7XG4gICAgICBmb3IgKGNvbnN0IGFyZyBvZiBhcmdzKSB7XG4gICAgICAgIGNvbnN0IG91dCA9IChfLmlzRXJyb3IoYXJnKSAmJiBhcmcuc3RhY2spID8gYXJnLnN0YWNrIDogYCR7YXJnfWA7XG4gICAgICAgIGZvciAoY29uc3QgbGluZSBvZiBvdXQuc3BsaXQoJ1xcbicpKSB7XG4gICAgICAgICAgLy8gaXQgaXMgbmVjZXNzYXJ5IHRvIHVubGVhayBlYWNoIGxpbmUgYmVjYXVzZSBgc3BsaXRgIGNhbGxcbiAgICAgICAgICAvLyBjcmVhdGVzIFwidmlld3NcIiB0byB0aGUgb3JpZ2luYWwgc3RyaW5nIGFzIHdlbGwgYXMgdGhlIGBzdWJzdHJpbmdgIG9uZVxuICAgICAgICAgIGNvbnN0IHVubGVha2VkTGluZSA9IHVubGVha1N0cmluZyhsaW5lKTtcbiAgICAgICAgICBsb2dnZXJbbGV2ZWxdKGFjdHVhbFByZWZpeCwgU0VDVVJFX1ZBTFVFU19QUkVQUk9DRVNTT1IucHJlcHJvY2Vzcyh1bmxlYWtlZExpbmUpKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH07XG4gIH1cbiAgLy8gYWRkIG1ldGhvZCB0byBsb2cgYW4gZXJyb3IsIGFuZCB0aHJvdyBpdCwgZm9yIGNvbnZlbmllbmNlXG4gIHdyYXBwZWRMb2dnZXIuZXJyb3JBbmRUaHJvdyA9IGZ1bmN0aW9uIChlcnIpIHtcbiAgICB0aGlzLmVycm9yKGVycik7XG4gICAgLy8gbWFrZSBzdXJlIHdlIGhhdmUgYW4gYEVycm9yYCBvYmplY3QuIFdyYXAgaWYgbmVjZXNzYXJ5XG4gICAgdGhyb3cgKF8uaXNFcnJvcihlcnIpID8gZXJyIDogbmV3IEVycm9yKHVubGVha1N0cmluZyhlcnIpKSk7XG4gIH07XG4gIGlmICghdXNpbmdHbG9iYWxMb2cpIHtcbiAgICAvLyBpZiB3ZSdyZSBub3QgdXNpbmcgYSBnbG9iYWwgbG9nIHNwZWNpZmllZCBmcm9tIHNvbWUgdG9wLWxldmVsIHBhY2thZ2UsXG4gICAgLy8gc2V0IHRoZSBsb2cgbGV2ZWwgdG8gYSBkZWZhdWx0IG9mIHZlcmJvc2UuIE90aGVyd2lzZSwgbGV0IHRoZSB0b3AtbGV2ZWxcbiAgICAvLyBwYWNrYWdlIHNldCB0aGUgbG9nIGxldmVsXG4gICAgd3JhcHBlZExvZ2dlci5sZXZlbCA9ICd2ZXJib3NlJztcbiAgfVxuICB3cmFwcGVkTG9nZ2VyLmxldmVscyA9IE5QTV9MRVZFTFM7XG4gIHJldHVybiB3cmFwcGVkTG9nZ2VyO1xufVxuXG4vKipcbiAqIEB0eXBlZGVmIHtPYmplY3R9IExvYWRSZXN1bHRcbiAqIEBwcm9wZXJ0eSB7TGlzdDxzdHJpbmc+fSBpc3N1ZXMgVGhlIGxpc3Qgb2YgcnVsZSBwYXJzaW5nIGlzc3VlcyAob25lIGl0ZW0gcGVyIHJ1bGUpLlxuICogUnVsZXMgd2l0aCBpc3N1ZXMgYXJlIHNraXBwZWQuIEFuIGVtcHR5IGxpc3QgaXMgcmV0dXJuZWQgaWYgbm8gcGFyc2luZyBpc3N1ZXMgZXhpc3QuXG4gKiBAcHJvcGVydHkge0xpc3Q8U2VjdXJlVmFsdWVQcmVwcm9jZXNzaW5nUnVsZT59IHJ1bGVzIFRoZSBsaXN0IG9mIHN1Y2Nlc3NmdWxseSBsb2FkZWRcbiAqIHJlcGxhY2VtZW50IHJ1bGVzLiBUaGUgbGlzdCBjb3VsZCBiZSBlbXB0eSBpZiBubyBydWxlcyB3ZXJlIGxvYWRlZC5cbiAqL1xuXG4vKipcbiAqIExvYWRzIHRoZSBKU09OIGZpbGUgY29udGFpbmluZyBzZWN1cmUgdmFsdWVzIHJlcGxhY2VtZW50IHJ1bGVzLlxuICogVGhpcyBtaWdodCBiZSBuZWNlc3NhcnkgdG8gaGlkZSBzZW5zaXRpdmUgdmFsdWVzIHRoYXQgbWF5IHBvc3NpYmx5XG4gKiBhcHBlYXIgaW4gQXBwaXVtIGxvZ3MuXG4gKiBFYWNoIGNhbGwgdG8gdGhpcyBtZXRob2QgcmVwbGFjZXMgdGhlIHByZXZpb3VzbHkgbG9hZGVkIHJ1bGVzIGlmIGFueSBleGlzdGVkLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfHN0cmluZ1tdfFJ1bGVbXX0gcnVsZXNKc29uUGF0aCBUaGUgZnVsbCBwYXRoIHRvIHRoZSBKU09OIGZpbGUgY29udGFpbmluZ1xuICogdGhlIHJlcGxhY2VtZW50IHJ1bGVzLiBFYWNoIHJ1bGUgY291bGQgZWl0aGVyIGJlIGEgc3RyaW5nIHRvIGJlIHJlcGxhY2VkXG4gKiBvciBhbiBvYmplY3Qgd2l0aCBwcmVkZWZpbmVkIHByb3BlcnRpZXMuIFNlZSB0aGUgYFJ1bGVgIHR5cGUgZGVmaW5pdGlvbiBpblxuICogYGxvZy1pbnRlcm5hbHMuanNgIHRvIGdldCBtb3JlIGRldGFpbHMgb24gaXRzIGZvcm1hdC5cbiAqIEB0aHJvd3Mge0Vycm9yfSBJZiB0aGUgZ2l2ZW4gZmlsZSBjYW5ub3QgYmUgbG9hZGVkXG4gKiBAcmV0dXJucyB7TG9hZFJlc3VsdH1cbiAqL1xuYXN5bmMgZnVuY3Rpb24gbG9hZFNlY3VyZVZhbHVlc1ByZXByb2Nlc3NpbmdSdWxlcyAocnVsZXNKc29uUGF0aCkge1xuICBjb25zdCBpc3N1ZXMgPSBhd2FpdCBTRUNVUkVfVkFMVUVTX1BSRVBST0NFU1NPUi5sb2FkUnVsZXMocnVsZXNKc29uUGF0aCk7XG4gIHJldHVybiB7XG4gICAgaXNzdWVzLFxuICAgIHJ1bGVzOiBfLmNsb25lRGVlcChTRUNVUkVfVkFMVUVTX1BSRVBST0NFU1NPUi5ydWxlcyksXG4gIH07XG59XG5cbi8vIGV4cG9ydCBhIGRlZmF1bHQgbG9nZ2VyIHdpdGggbm8gcHJlZml4XG5jb25zdCBsb2cgPSBnZXRMb2dnZXIoKTtcblxuZXhwb3J0IHsgbG9nLCBwYXRjaExvZ2dlciwgZ2V0TG9nZ2VyLCBsb2FkU2VjdXJlVmFsdWVzUHJlcHJvY2Vzc2luZ1J1bGVzIH07XG5leHBvcnQgZGVmYXVsdCBsb2c7XG4iXSwiZmlsZSI6ImxpYi9sb2dnaW5nLmpzIiwic291cmNlUm9vdCI6Ii4uLy4uIn0=
@@ -0,0 +1,28 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
3
+ <plist version="1.0">
4
+ <dict>
5
+ <key>com.apple.locationd.bundle-/System/Library/PrivateFrameworks/Parsec.framework</key>
6
+ <dict>
7
+ <key>Whitelisted</key>
8
+ <false/>
9
+ <key>Executable</key>
10
+ <string></string>
11
+ <key>BundlePath</key>
12
+ <string>/System/Library/PrivateFrameworks/Parsec.framework</string>
13
+ <key>Registered</key>
14
+ <string></string>
15
+ </dict>
16
+ <key>com.apple.locationd.bundle-/System/Library/PrivateFrameworks/WirelessDiagnostics.framework</key>
17
+ <dict>
18
+ <key>Whitelisted</key>
19
+ <false/>
20
+ <key>Executable</key>
21
+ <string></string>
22
+ <key>BundlePath</key>
23
+ <string>/System/Library/PrivateFrameworks/WirelessDiagnostics.framework</string>
24
+ <key>Registered</key>
25
+ <string></string>
26
+ </dict>
27
+ </dict>
28
+ </plist>
@@ -0,0 +1,264 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+
5
+ require("source-map-support/register");
6
+
7
+ var _index = require("../lib/index.js");
8
+
9
+ var _path = _interopRequireDefault(require("path"));
10
+
11
+ var _teen_process = require("teen_process");
12
+
13
+ var _bluebird = _interopRequireDefault(require("bluebird"));
14
+
15
+ var _lodash = _interopRequireDefault(require("lodash"));
16
+
17
+ const MOCHA_TIMEOUT = 20000;
18
+ describe('fs', function () {
19
+ this.timeout(MOCHA_TIMEOUT);
20
+
21
+ const existingPath = _path.default.resolve(__dirname, 'fs-specs.js');
22
+
23
+ it('should have expected methods', function () {
24
+ should.exist(_index.fs.open);
25
+ should.exist(_index.fs.close);
26
+ should.exist(_index.fs.access);
27
+ should.exist(_index.fs.mkdir);
28
+ should.exist(_index.fs.readlink);
29
+ should.exist(_index.fs.exists);
30
+ should.exist(_index.fs.rimraf);
31
+ should.exist(_index.fs.rimrafSync);
32
+ should.exist(_index.fs.readFile);
33
+ should.exist(_index.fs.writeFile);
34
+ should.exist(_index.fs.lstat);
35
+ should.exist(_index.fs.mv);
36
+ });
37
+ describe('mkdir', function () {
38
+ let dirName = _path.default.resolve(__dirname, 'tmp');
39
+
40
+ it('should make a directory that does not exist', async function () {
41
+ await _index.fs.rimraf(dirName);
42
+ await _index.fs.mkdir(dirName);
43
+ let exists = await _index.fs.hasAccess(dirName);
44
+ exists.should.be.true;
45
+ });
46
+ it('should not complain if the dir already exists', async function () {
47
+ let exists = await _index.fs.hasAccess(dirName);
48
+ exists.should.be.true;
49
+ await _index.fs.mkdir(dirName);
50
+ });
51
+ it('should still throw an error if something else goes wrong', async function () {
52
+ await _index.fs.mkdir('/bin/foo').should.be.rejected;
53
+ });
54
+ });
55
+ it('hasAccess', async function () {
56
+ (await _index.fs.exists(existingPath)).should.be.ok;
57
+
58
+ let nonExistingPath = _path.default.resolve(__dirname, 'wrong-specs.js');
59
+
60
+ (await _index.fs.hasAccess(nonExistingPath)).should.not.be.ok;
61
+ });
62
+ it('exists', async function () {
63
+ (await _index.fs.exists(existingPath)).should.be.ok;
64
+
65
+ let nonExistingPath = _path.default.resolve(__dirname, 'wrong-specs.js');
66
+
67
+ (await _index.fs.exists(nonExistingPath)).should.not.be.ok;
68
+ });
69
+ it('readFile', async function () {
70
+ (await _index.fs.readFile(existingPath, 'utf8')).should.contain('readFile');
71
+ });
72
+ describe('copyFile', function () {
73
+ it('should be able to copy a file', async function () {
74
+ let newPath = _path.default.resolve(await _index.tempDir.openDir(), 'fs-specs.js');
75
+
76
+ await _index.fs.copyFile(existingPath, newPath);
77
+ (await _index.fs.readFile(newPath, 'utf8')).should.contain('readFile');
78
+ });
79
+ it('should throw an error if the source does not exist', async function () {
80
+ await _index.fs.copyFile('/sdfsdfsdfsdf', '/tmp/bla').should.eventually.be.rejected;
81
+ });
82
+ });
83
+ it('rimraf', async function () {
84
+ let newPath = _path.default.resolve(await _index.tempDir.openDir(), 'fs-specs.js');
85
+
86
+ await _index.fs.copyFile(existingPath, newPath);
87
+ (await _index.fs.exists(newPath)).should.be.true;
88
+ await _index.fs.rimraf(newPath);
89
+ (await _index.fs.exists(newPath)).should.be.false;
90
+ });
91
+ it('sanitizeName', function () {
92
+ _index.fs.sanitizeName(':file?.txt', {
93
+ replacement: '-'
94
+ }).should.eql('-file-.txt');
95
+ });
96
+ it('rimrafSync', async function () {
97
+ let newPath = _path.default.resolve(await _index.tempDir.openDir(), 'fs-specs.js');
98
+
99
+ await _index.fs.copyFile(existingPath, newPath);
100
+ (await _index.fs.exists(newPath)).should.be.true;
101
+
102
+ _index.fs.rimrafSync(newPath);
103
+
104
+ (await _index.fs.exists(newPath)).should.be.false;
105
+ });
106
+ describe('md5', function () {
107
+ this.timeout(1200000);
108
+ let smallFilePath;
109
+ let bigFilePath;
110
+ before(async function () {
111
+ smallFilePath = existingPath;
112
+ bigFilePath = _path.default.resolve(await _index.tempDir.openDir(), 'enormous.txt');
113
+ let file = await _index.fs.open(bigFilePath, 'w');
114
+ let fileData = '';
115
+
116
+ for (let i = 0; i < 4096; i++) {
117
+ fileData += '1';
118
+ }
119
+
120
+ for (let i = 0; i < 40000; i++) {
121
+ await _index.fs.write(file, fileData);
122
+ }
123
+
124
+ await _index.fs.close(file);
125
+ });
126
+ after(async function () {
127
+ await _index.fs.unlink(bigFilePath);
128
+ });
129
+ it('should calculate hash of correct length', async function () {
130
+ (await _index.fs.md5(smallFilePath)).should.have.length(32);
131
+ });
132
+ it('should be able to run on huge file', async function () {
133
+ (await _index.fs.md5(bigFilePath)).should.have.length(32);
134
+ });
135
+ });
136
+ describe('hash', function () {
137
+ it('should calculate sha1 hash', async function () {
138
+ (await _index.fs.hash(existingPath, 'sha1')).should.have.length(40);
139
+ });
140
+ it('should calculate md5 hash', async function () {
141
+ (await _index.fs.hash(existingPath, 'md5')).should.have.length(32);
142
+ });
143
+ });
144
+ it('stat', async function () {
145
+ let stat = await _index.fs.stat(existingPath);
146
+ stat.should.have.property('atime');
147
+ });
148
+ describe('which', function () {
149
+ it('should find correct executable', async function () {
150
+ let systemNpmPath = (await (0, _teen_process.exec)('which', ['npm'])).stdout.trim();
151
+ let npmPath = await _index.fs.which('npm');
152
+ npmPath.should.equal(systemNpmPath);
153
+ });
154
+ it('should fail gracefully', async function () {
155
+ await _index.fs.which('something_that_does_not_exist').should.eventually.be.rejected;
156
+ });
157
+ });
158
+ it('glob', async function () {
159
+ let glob = '*-specs.js';
160
+ let tests = await _index.fs.glob(glob, {
161
+ cwd: __dirname
162
+ });
163
+ tests.should.be.an('array');
164
+ tests.should.have.length.above(2);
165
+ });
166
+ describe('walkDir', function () {
167
+ it('walkDir recursive', async function () {
168
+ let inCallback = 0;
169
+ const filePath = await _index.fs.walkDir(__dirname, true, async item => {
170
+ if (item.endsWith('logger/helpers.js')) {
171
+ ++inCallback;
172
+ await _bluebird.default.delay(500);
173
+ --inCallback;
174
+ return true;
175
+ }
176
+ });
177
+ inCallback.should.equal(0);
178
+ filePath.should.not.be.null;
179
+ });
180
+ it('should walk all elements recursive', async function () {
181
+ let inCallback = 0;
182
+ const filePath = await _index.fs.walkDir(__dirname, true, async () => {
183
+ ++inCallback;
184
+ await _bluebird.default.delay(500);
185
+ --inCallback;
186
+ });
187
+ inCallback.should.equal(0);
188
+ _lodash.default.isNil(filePath).should.be.true;
189
+ });
190
+ it('should throw error through callback', async function () {
191
+ let processed = 0;
192
+ await chai.expect(_index.fs.walkDir(__dirname, true, () => {
193
+ ++processed;
194
+ throw 'Callback error';
195
+ })).to.be.rejectedWith('Callback error');
196
+ processed.should.equal(1);
197
+ });
198
+ it('should traverse non-recursively', async function () {
199
+ const filePath = await _index.fs.walkDir(__dirname, false, item => item.endsWith('logger/helpers.js'));
200
+ _lodash.default.isNil(filePath).should.be.true;
201
+ });
202
+ });
203
+ describe('findRoot()', function () {
204
+ describe('when not provided an argument', function () {
205
+ it('should throw', function () {
206
+ (() => _index.fs.findRoot()).should.throw(TypeError);
207
+ });
208
+ });
209
+ describe('when provided a relative path', function () {
210
+ it('should throw', function () {
211
+ (() => _index.fs.findRoot('./foo')).should.throw(TypeError);
212
+ });
213
+ });
214
+ describe('when provided an empty string', function () {
215
+ it('should throw', function () {
216
+ (() => _index.fs.findRoot('')).should.throw(TypeError);
217
+ });
218
+ });
219
+ describe('when provided an absolute path', function () {
220
+ describe('when the path has a parent `package.json`', function () {
221
+ it('should locate the dir with the closest `package.json`', function () {
222
+ _index.fs.findRoot(__dirname).should.be.a('string');
223
+ });
224
+ });
225
+ describe('when the path does not have a parent `package.json`', function () {
226
+ it('should throw', function () {
227
+ (() => _index.fs.findRoot('/')).should.throw(Error);
228
+ });
229
+ });
230
+ });
231
+ });
232
+ describe('readPackageJsonFrom()', function () {
233
+ describe('when not provided an argument', function () {
234
+ it('should throw', function () {
235
+ (() => _index.fs.readPackageJsonFrom()).should.throw(TypeError, /non-empty, absolute path/);
236
+ });
237
+ });
238
+ describe('when provided a relative path', function () {
239
+ it('should throw', function () {
240
+ (() => _index.fs.readPackageJsonFrom('./foo')).should.throw(TypeError);
241
+ });
242
+ });
243
+ describe('when provided an empty string', function () {
244
+ it('should throw', function () {
245
+ (() => _index.fs.readPackageJsonFrom('')).should.throw(TypeError);
246
+ });
247
+ });
248
+ describe('when provided an absolute path', function () {
249
+ describe('when the path does not have a parent `package.json`', function () {
250
+ it('should throw', function () {
251
+ (() => _index.fs.readPackageJsonFrom('/')).should.throw(Error);
252
+ });
253
+ });
254
+ describe('when the path has a parent `package.json`', function () {
255
+ it('should read the `package.json` found in the root dir', function () {
256
+ _index.fs.readPackageJsonFrom(__dirname).should.be.an('object');
257
+ });
258
+ });
259
+ });
260
+ });
261
+ });require('source-map-support').install();
262
+
263
+
264
+ //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInRlc3QvZnMtc3BlY3MuanMiXSwibmFtZXMiOlsiTU9DSEFfVElNRU9VVCIsImRlc2NyaWJlIiwidGltZW91dCIsImV4aXN0aW5nUGF0aCIsInBhdGgiLCJyZXNvbHZlIiwiX19kaXJuYW1lIiwiaXQiLCJzaG91bGQiLCJleGlzdCIsImZzIiwib3BlbiIsImNsb3NlIiwiYWNjZXNzIiwibWtkaXIiLCJyZWFkbGluayIsImV4aXN0cyIsInJpbXJhZiIsInJpbXJhZlN5bmMiLCJyZWFkRmlsZSIsIndyaXRlRmlsZSIsImxzdGF0IiwibXYiLCJkaXJOYW1lIiwiaGFzQWNjZXNzIiwiYmUiLCJ0cnVlIiwicmVqZWN0ZWQiLCJvayIsIm5vbkV4aXN0aW5nUGF0aCIsIm5vdCIsImNvbnRhaW4iLCJuZXdQYXRoIiwidGVtcERpciIsIm9wZW5EaXIiLCJjb3B5RmlsZSIsImV2ZW50dWFsbHkiLCJmYWxzZSIsInNhbml0aXplTmFtZSIsInJlcGxhY2VtZW50IiwiZXFsIiwic21hbGxGaWxlUGF0aCIsImJpZ0ZpbGVQYXRoIiwiYmVmb3JlIiwiZmlsZSIsImZpbGVEYXRhIiwiaSIsIndyaXRlIiwiYWZ0ZXIiLCJ1bmxpbmsiLCJtZDUiLCJoYXZlIiwibGVuZ3RoIiwiaGFzaCIsInN0YXQiLCJwcm9wZXJ0eSIsInN5c3RlbU5wbVBhdGgiLCJzdGRvdXQiLCJ0cmltIiwibnBtUGF0aCIsIndoaWNoIiwiZXF1YWwiLCJnbG9iIiwidGVzdHMiLCJjd2QiLCJhbiIsImFib3ZlIiwiaW5DYWxsYmFjayIsImZpbGVQYXRoIiwid2Fsa0RpciIsIml0ZW0iLCJlbmRzV2l0aCIsIkIiLCJkZWxheSIsIm51bGwiLCJfIiwiaXNOaWwiLCJwcm9jZXNzZWQiLCJjaGFpIiwiZXhwZWN0IiwidG8iLCJyZWplY3RlZFdpdGgiLCJmaW5kUm9vdCIsInRocm93IiwiVHlwZUVycm9yIiwiYSIsIkVycm9yIiwicmVhZFBhY2thZ2VKc29uRnJvbSJdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUE7O0FB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Qy9FLE1BQXhDLENBQStDMkUsS0FBL0MsQ0FBcURDLFNBQXJEO0FBQ0QsT0FGQyxDQUFGO0FBR0QsS0FKTyxDQUFSO0FBTUFuRixJQUFBQSxRQUFRLENBQUMsK0JBQUQsRUFBa0MsWUFBWTtBQUNwRE0sTUFBQUEsRUFBRSxDQUFDLGNBQUQsRUFBaUIsWUFBWTtBQUM3QixTQUFDLE1BQU1HLFVBQUc2RSxtQkFBSCxDQUF1QixFQUF2QixDQUFQLEVBQW1DL0UsTUFBbkMsQ0FBMEMyRSxLQUExQyxDQUFnREMsU0FBaEQ7QUFDRCxPQUZDLENBQUY7QUFHRCxLQUpPLENBQVI7QUFNQW5GLElBQUFBLFFBQVEsQ0FBQyxnQ0FBRCxFQUFtQyxZQUFZO0FBQ3JEQSxNQUFBQSxRQUFRLENBQUMscURBQUQsRUFBd0QsWUFBWTtBQUMxRU0sUUFBQUEsRUFBRSxDQUFDLGNBQUQsRUFBaUIsWUFBWTtBQUM3QixXQUFDLE1BQU1HLFVBQUc2RSxtQkFBSCxDQUF1QixHQUF2QixDQUFQLEVBQW9DL0UsTUFBcEMsQ0FBMkMyRSxLQUEzQyxDQUFpREcsS0FBakQ7QUFDRCxTQUZDLENBQUY7QUFHRCxPQUpPLENBQVI7QUFNQXJGLE1BQUFBLFFBQVEsQ0FBQywyQ0FBRCxFQUE4QyxZQUFZO0FBQ2hFTSxRQUFBQSxFQUFFLENBQUMsc0RBQUQsRUFBeUQsWUFBWTtBQUNyRUcsb0JBQUc2RSxtQkFBSCxDQUF1QmpGLFNBQXZCLEVBQWtDRSxNQUFsQyxDQUF5Q2lCLEVBQXpDLENBQTRDd0MsRUFBNUMsQ0FBK0MsUUFBL0M7QUFDRCxTQUZDLENBQUY7QUFHRCxPQUpPLENBQVI7QUFLRCxLQVpPLENBQVI7QUFhRCxHQWhDTyxDQUFSO0FBaUNELENBOVBPLENBQVIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBmcywgdGVtcERpciB9IGZyb20gJy4uL2xpYi9pbmRleC5qcyc7XG5pbXBvcnQgcGF0aCBmcm9tICdwYXRoJztcbmltcG9ydCB7IGV4ZWMgfSBmcm9tICd0ZWVuX3Byb2Nlc3MnO1xuaW1wb3J0IEIgZnJvbSAnYmx1ZWJpcmQnO1xuaW1wb3J0IF8gZnJvbSAnbG9kYXNoJztcblxuXG5jb25zdCBNT0NIQV9USU1FT1VUID0gMjAwMDA7XG5cbmRlc2NyaWJlKCdmcycsIGZ1bmN0aW9uICgpIHtcbiAgdGhpcy50aW1lb3V0KE1PQ0hBX1RJTUVPVVQpO1xuXG4gIGNvbnN0IGV4aXN0aW5nUGF0aCA9IHBhdGgucmVzb2x2ZShfX2Rpcm5hbWUsICdmcy1zcGVjcy5qcycpO1xuXG4gIGl0KCdzaG91bGQgaGF2ZSBleHBlY3RlZCBtZXRob2RzJywgZnVuY3Rpb24gKCkge1xuICAgIHNob3VsZC5leGlzdChmcy5vcGVuKTtcbiAgICBzaG91bGQuZXhpc3QoZnMuY2xvc2UpO1xuICAgIHNob3VsZC5leGlzdChmcy5hY2Nlc3MpO1xuICAgIHNob3VsZC5leGlzdChmcy5ta2Rpcik7XG4gICAgc2hvdWxkLmV4aXN0KGZzLnJlYWRsaW5rKTtcbiAgICBzaG91bGQuZXhpc3QoZnMuZXhpc3RzKTtcbiAgICBzaG91bGQuZXhpc3QoZnMucmltcmFmKTtcbiAgICBzaG91bGQuZXhpc3QoZnMucmltcmFmU3luYyk7XG4gICAgc2hvdWxkLmV4aXN0KGZzLnJlYWRGaWxlKTtcbiAgICBzaG91bGQuZXhpc3QoZnMud3JpdGVGaWxlKTtcbiAgICBzaG91bGQuZXhpc3QoZnMubHN0YXQpO1xuICAgIHNob3VsZC5leGlzdChmcy5tdik7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdta2RpcicsIGZ1bmN0aW9uICgpIHtcbiAgICBsZXQgZGlyTmFtZSA9IHBhdGgucmVzb2x2ZShfX2Rpcm5hbWUsICd0bXAnKTtcblxuICAgIGl0KCdzaG91bGQgbWFrZSBhIGRpcmVjdG9yeSB0aGF0IGRvZXMgbm90IGV4aXN0JywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgYXdhaXQgZnMucmltcmFmKGRpck5hbWUpO1xuICAgICAgYXdhaXQgZnMubWtkaXIoZGlyTmFtZSk7XG4gICAgICBsZXQgZXhpc3RzID0gYXdhaXQgZnMuaGFzQWNjZXNzKGRpck5hbWUpO1xuICAgICAgZXhpc3RzLnNob3VsZC5iZS50cnVlO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBub3QgY29tcGxhaW4gaWYgdGhlIGRpciBhbHJlYWR5IGV4aXN0cycsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGxldCBleGlzdHMgPSBhd2FpdCBmcy5oYXNBY2Nlc3MoZGlyTmFtZSk7XG4gICAgICBleGlzdHMuc2hvdWxkLmJlLnRydWU7XG4gICAgICBhd2FpdCBmcy5ta2RpcihkaXJOYW1lKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgc3RpbGwgdGhyb3cgYW4gZXJyb3IgaWYgc29tZXRoaW5nIGVsc2UgZ29lcyB3cm9uZycsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGF3YWl0IGZzLm1rZGlyKCcvYmluL2ZvbycpLnNob3VsZC5iZS5yZWplY3RlZDtcbiAgICB9KTtcbiAgfSk7XG5cbiAgaXQoJ2hhc0FjY2VzcycsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAoYXdhaXQgZnMuZXhpc3RzKGV4aXN0aW5nUGF0aCkpLnNob3VsZC5iZS5vaztcbiAgICBsZXQgbm9uRXhpc3RpbmdQYXRoID0gcGF0aC5yZXNvbHZlKF9fZGlybmFtZSwgJ3dyb25nLXNwZWNzLmpzJyk7XG4gICAgKGF3YWl0IGZzLmhhc0FjY2Vzcyhub25FeGlzdGluZ1BhdGgpKS5zaG91bGQubm90LmJlLm9rO1xuICB9KTtcbiAgaXQoJ2V4aXN0cycsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAoYXdhaXQgZnMuZXhpc3RzKGV4aXN0aW5nUGF0aCkpLnNob3VsZC5iZS5vaztcbiAgICBsZXQgbm9uRXhpc3RpbmdQYXRoID0gcGF0aC5yZXNvbHZlKF9fZGlybmFtZSwgJ3dyb25nLXNwZWNzLmpzJyk7XG4gICAgKGF3YWl0IGZzLmV4aXN0cyhub25FeGlzdGluZ1BhdGgpKS5zaG91bGQubm90LmJlLm9rO1xuICB9KTtcbiAgaXQoJ3JlYWRGaWxlJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgIChhd2FpdCBmcy5yZWFkRmlsZShleGlzdGluZ1BhdGgsICd1dGY4JykpLnNob3VsZC5jb250YWluKCdyZWFkRmlsZScpO1xuICB9KTtcblxuICBkZXNjcmliZSgnY29weUZpbGUnLCBmdW5jdGlvbiAoKSB7XG4gICAgaXQoJ3Nob3VsZCBiZSBhYmxlIHRvIGNvcHkgYSBmaWxlJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgbGV0IG5ld1BhdGggPSBwYXRoLnJlc29sdmUoYXdhaXQgdGVtcERpci5vcGVuRGlyKCksICdmcy1zcGVjcy5qcycpO1xuICAgICAgYXdhaXQgZnMuY29weUZpbGUoZXhpc3RpbmdQYXRoLCBuZXdQYXRoKTtcbiAgICAgIChhd2FpdCBmcy5yZWFkRmlsZShuZXdQYXRoLCAndXRmOCcpKS5zaG91bGQuY29udGFpbigncmVhZEZpbGUnKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgdGhyb3cgYW4gZXJyb3IgaWYgdGhlIHNvdXJjZSBkb2VzIG5vdCBleGlzdCcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGF3YWl0IGZzLmNvcHlGaWxlKCcvc2Rmc2Rmc2Rmc2RmJywgJy90bXAvYmxhJykuc2hvdWxkLmV2ZW50dWFsbHkuYmUucmVqZWN0ZWQ7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGl0KCdyaW1yYWYnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgbGV0IG5ld1BhdGggPSBwYXRoLnJlc29sdmUoYXdhaXQgdGVtcERpci5vcGVuRGlyKCksICdmcy1zcGVjcy5qcycpO1xuICAgIGF3YWl0IGZzLmNvcHlGaWxlKGV4aXN0aW5nUGF0aCwgbmV3UGF0aCk7XG4gICAgKGF3YWl0IGZzLmV4aXN0cyhuZXdQYXRoKSkuc2hvdWxkLmJlLnRydWU7XG4gICAgYXdhaXQgZnMucmltcmFmKG5ld1BhdGgpO1xuICAgIChhd2FpdCBmcy5leGlzdHMobmV3UGF0aCkpLnNob3VsZC5iZS5mYWxzZTtcbiAgfSk7XG4gIGl0KCdzYW5pdGl6ZU5hbWUnLCBmdW5jdGlvbiAoKSB7XG4gICAgZnMuc2FuaXRpemVOYW1lKCc6ZmlsZT8udHh0Jywge1xuICAgICAgcmVwbGFjZW1lbnQ6ICctJyxcbiAgICB9KS5zaG91bGQuZXFsKCctZmlsZS0udHh0Jyk7XG4gIH0pO1xuICBpdCgncmltcmFmU3luYycsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICBsZXQgbmV3UGF0aCA9IHBhdGgucmVzb2x2ZShhd2FpdCB0ZW1wRGlyLm9wZW5EaXIoKSwgJ2ZzLXNwZWNzLmpzJyk7XG4gICAgYXdhaXQgZnMuY29weUZpbGUoZXhpc3RpbmdQYXRoLCBuZXdQYXRoKTtcbiAgICAoYXdhaXQgZnMuZXhpc3RzKG5ld1BhdGgpKS5zaG91bGQuYmUudHJ1ZTtcbiAgICBmcy5yaW1yYWZTeW5jKG5ld1BhdGgpO1xuICAgIChhd2FpdCBmcy5leGlzdHMobmV3UGF0aCkpLnNob3VsZC5iZS5mYWxzZTtcbiAgfSk7XG4gIGRlc2NyaWJlKCdtZDUnLCBmdW5jdGlvbiAoKSB7XG4gICAgdGhpcy50aW1lb3V0KDEyMDAwMDApO1xuICAgIGxldCBzbWFsbEZpbGVQYXRoO1xuICAgIGxldCBiaWdGaWxlUGF0aDtcbiAgICBiZWZvcmUoYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgLy8gZ2V0IHRoZSBwYXRoIG9mIGEgc21hbGwgZmlsZSAodGhpcyBzb3VyY2UgZmlsZSlcbiAgICAgIHNtYWxsRmlsZVBhdGggPSBleGlzdGluZ1BhdGg7XG5cbiAgICAgIC8vIGNyZWF0ZSBhIGxhcmdlIGZpbGUgdG8gdGVzdCwgYWJvdXQgMTYzODQwMDAwIGJ5dGVzXG4gICAgICBiaWdGaWxlUGF0aCA9IHBhdGgucmVzb2x2ZShhd2FpdCB0ZW1wRGlyLm9wZW5EaXIoKSwgJ2Vub3Jtb3VzLnR4dCcpO1xuICAgICAgbGV0IGZpbGUgPSBhd2FpdCBmcy5vcGVuKGJpZ0ZpbGVQYXRoLCAndycpO1xuICAgICAgbGV0IGZpbGVEYXRhID0gJyc7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IDQwOTY7IGkrKykge1xuICAgICAgICBmaWxlRGF0YSArPSAnMSc7XG4gICAgICB9XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IDQwMDAwOyBpKyspIHtcbiAgICAgICAgYXdhaXQgZnMud3JpdGUoZmlsZSwgZmlsZURhdGEpO1xuICAgICAgfVxuICAgICAgYXdhaXQgZnMuY2xvc2UoZmlsZSk7XG4gICAgfSk7XG4gICAgYWZ0ZXIoYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgYXdhaXQgZnMudW5saW5rKGJpZ0ZpbGVQYXRoKTtcbiAgICB9KTtcbiAgICBpdCgnc2hvdWxkIGNhbGN1bGF0ZSBoYXNoIG9mIGNvcnJlY3QgbGVuZ3RoJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgKGF3YWl0IGZzLm1kNShzbWFsbEZpbGVQYXRoKSkuc2hvdWxkLmhhdmUubGVuZ3RoKDMyKTtcbiAgICB9KTtcbiAgICBpdCgnc2hvdWxkIGJlIGFibGUgdG8gcnVuIG9uIGh1Z2UgZmlsZScsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIChhd2FpdCBmcy5tZDUoYmlnRmlsZVBhdGgpKS5zaG91bGQuaGF2ZS5sZW5ndGgoMzIpO1xuICAgIH0pO1xuICB9KTtcbiAgZGVzY3JpYmUoJ2hhc2gnLCBmdW5jdGlvbiAoKSB7XG4gICAgaXQoJ3Nob3VsZCBjYWxjdWxhdGUgc2hhMSBoYXNoJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgKGF3YWl0IGZzLmhhc2goZXhpc3RpbmdQYXRoLCAnc2hhMScpKS5zaG91bGQuaGF2ZS5sZW5ndGgoNDApO1xuICAgIH0pO1xuICAgIGl0KCdzaG91bGQgY2FsY3VsYXRlIG1kNSBoYXNoJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgKGF3YWl0IGZzLmhhc2goZXhpc3RpbmdQYXRoLCAnbWQ1JykpLnNob3VsZC5oYXZlLmxlbmd0aCgzMik7XG4gICAgfSk7XG4gIH0pO1xuICBpdCgnc3RhdCcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICBsZXQgc3RhdCA9IGF3YWl0IGZzLnN0YXQoZXhpc3RpbmdQYXRoKTtcbiAgICBzdGF0LnNob3VsZC5oYXZlLnByb3BlcnR5KCdhdGltZScpO1xuICB9KTtcbiAgZGVzY3JpYmUoJ3doaWNoJywgZnVuY3Rpb24gKCkge1xuICAgIGl0KCdzaG91bGQgZmluZCBjb3JyZWN0IGV4ZWN1dGFibGUnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBsZXQgc3lzdGVtTnBtUGF0aCA9IChhd2FpdCBleGVjKCd3aGljaCcsIFsnbnBtJ10pKS5zdGRvdXQudHJpbSgpO1xuICAgICAgbGV0IG5wbVBhdGggPSBhd2FpdCBmcy53aGljaCgnbnBtJyk7XG4gICAgICBucG1QYXRoLnNob3VsZC5lcXVhbChzeXN0ZW1OcG1QYXRoKTtcbiAgICB9KTtcbiAgICBpdCgnc2hvdWxkIGZhaWwgZ3JhY2VmdWxseScsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGF3YWl0IGZzLndoaWNoKCdzb21ldGhpbmdfdGhhdF9kb2VzX25vdF9leGlzdCcpXG4gICAgICAgIC5zaG91bGQuZXZlbnR1YWxseS5iZS5yZWplY3RlZDtcbiAgICB9KTtcbiAgfSk7XG4gIGl0KCdnbG9iJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgIGxldCBnbG9iID0gJyotc3BlY3MuanMnO1xuICAgIGxldCB0ZXN0cyA9IGF3YWl0IGZzLmdsb2IoZ2xvYiwge2N3ZDogX19kaXJuYW1lfSk7XG4gICAgdGVzdHMuc2hvdWxkLmJlLmFuKCdhcnJheScpO1xuICAgIHRlc3RzLnNob3VsZC5oYXZlLmxlbmd0aC5hYm92ZSgyKTtcbiAgfSk7XG4gIGRlc2NyaWJlKCd3YWxrRGlyJywgZnVuY3Rpb24gKCkge1xuICAgIGl0KCd3YWxrRGlyIHJlY3Vyc2l2ZScsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGxldCBpbkNhbGxiYWNrID0gMDtcbiAgICAgIGNvbnN0IGZpbGVQYXRoID0gYXdhaXQgZnMud2Fsa0RpcihfX2Rpcm5hbWUsIHRydWUsIGFzeW5jIChpdGVtKSA9PiB7XG4gICAgICAgIGlmIChpdGVtLmVuZHNXaXRoKCdsb2dnZXIvaGVscGVycy5qcycpKSB7XG4gICAgICAgICAgKytpbkNhbGxiYWNrO1xuICAgICAgICAgIC8vIFRoaXMgaXMgdG8gdmVyaWZ5IHByb3BlciBhd2FpdCBmdW5jdGlvbmFsaXR5IG9mIHRoZVxuICAgICAgICAgIC8vIGNhbGxiYWNrIGludm9jYXRpb24gaW5zaWRlIHRoZSBmaWxlIHN5c3RlbSB3YWxrZXJcbiAgICAgICAgICBhd2FpdCBCLmRlbGF5KDUwMCk7XG4gICAgICAgICAgLS1pbkNhbGxiYWNrO1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIGluQ2FsbGJhY2suc2hvdWxkLmVxdWFsKDApO1xuICAgICAgZmlsZVBhdGguc2hvdWxkLm5vdC5iZS5udWxsO1xuICAgIH0pO1xuICAgIGl0KCdzaG91bGQgd2FsayBhbGwgZWxlbWVudHMgcmVjdXJzaXZlJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgbGV0IGluQ2FsbGJhY2sgPSAwO1xuICAgICAgY29uc3QgZmlsZVBhdGggPSBhd2FpdCBmcy53YWxrRGlyKF9fZGlybmFtZSwgdHJ1ZSwgYXN5bmMgKCkgPT4ge1xuICAgICAgICArK2luQ2FsbGJhY2s7XG4gICAgICAgIGF3YWl0IEIuZGVsYXkoNTAwKTtcbiAgICAgICAgLS1pbkNhbGxiYWNrO1xuXG4gICAgICB9KTtcbiAgICAgIGluQ2FsbGJhY2suc2hvdWxkLmVxdWFsKDApO1xuICAgICAgXy5pc05pbChmaWxlUGF0aCkuc2hvdWxkLmJlLnRydWU7XG4gICAgfSk7XG4gICAgaXQoJ3Nob3VsZCB0aHJvdyBlcnJvciB0aHJvdWdoIGNhbGxiYWNrJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgbGV0IHByb2Nlc3NlZCA9IDA7XG4gICAgICBhd2FpdCBjaGFpLmV4cGVjdChmcy53YWxrRGlyKF9fZGlybmFtZSwgdHJ1ZSxcbiAgICAgICAgKCkgPT4ge1xuICAgICAgICAgICsrcHJvY2Vzc2VkO1xuICAgICAgICAgIHRocm93ICdDYWxsYmFjayBlcnJvcic7XG4gICAgICAgIH0pKS50by5iZS5yZWplY3RlZFdpdGgoJ0NhbGxiYWNrIGVycm9yJyk7XG4gICAgICBwcm9jZXNzZWQuc2hvdWxkLmVxdWFsKDEpO1xuICAgIH0pO1xuICAgIGl0KCdzaG91bGQgdHJhdmVyc2Ugbm9uLXJlY3Vyc2l2ZWx5JywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgZmlsZVBhdGggPSBhd2FpdCBmcy53YWxrRGlyKF9fZGlybmFtZSwgZmFsc2UsIChpdGVtKSA9PiBpdGVtLmVuZHNXaXRoKCdsb2dnZXIvaGVscGVycy5qcycpKTtcbiAgICAgIF8uaXNOaWwoZmlsZVBhdGgpLnNob3VsZC5iZS50cnVlO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnZmluZFJvb3QoKScsIGZ1bmN0aW9uICgpIHtcbiAgICBkZXNjcmliZSgnd2hlbiBub3QgcHJvdmlkZWQgYW4gYXJndW1lbnQnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBpdCgnc2hvdWxkIHRocm93JywgZnVuY3Rpb24gKCkge1xuICAgICAgICAoKCkgPT4gZnMuZmluZFJvb3QoKSkuc2hvdWxkLnRocm93KFR5cGVFcnJvcik7XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCd3aGVuIHByb3ZpZGVkIGEgcmVsYXRpdmUgcGF0aCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGl0KCdzaG91bGQgdGhyb3cnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICgoKSA9PiBmcy5maW5kUm9vdCgnLi9mb28nKSkuc2hvdWxkLnRocm93KFR5cGVFcnJvcik7XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCd3aGVuIHByb3ZpZGVkIGFuIGVtcHR5IHN0cmluZycsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGl0KCdzaG91bGQgdGhyb3cnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICgoKSA9PiBmcy5maW5kUm9vdCgnJykpLnNob3VsZC50aHJvdyhUeXBlRXJyb3IpO1xuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgnd2hlbiBwcm92aWRlZCBhbiBhYnNvbHV0ZSBwYXRoJywgZnVuY3Rpb24gKCkge1xuICAgICAgZGVzY3JpYmUoJ3doZW4gdGhlIHBhdGggaGFzIGEgcGFyZW50IGBwYWNrYWdlLmpzb25gJywgZnVuY3Rpb24gKCkge1xuICAgICAgICBpdCgnc2hvdWxkIGxvY2F0ZSB0aGUgZGlyIHdpdGggdGhlIGNsb3Nlc3QgYHBhY2thZ2UuanNvbmAnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgZnMuZmluZFJvb3QoX19kaXJuYW1lKS5zaG91bGQuYmUuYSgnc3RyaW5nJyk7XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG5cbiAgICAgIGRlc2NyaWJlKCd3aGVuIHRoZSBwYXRoIGRvZXMgbm90IGhhdmUgYSBwYXJlbnQgYHBhY2thZ2UuanNvbmAnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGl0KCdzaG91bGQgdGhyb3cnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgKCgpID0+IGZzLmZpbmRSb290KCcvJykpLnNob3VsZC50aHJvdyhFcnJvcik7XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdyZWFkUGFja2FnZUpzb25Gcm9tKCknLCBmdW5jdGlvbiAoKSB7XG4gICAgZGVzY3JpYmUoJ3doZW4gbm90IHByb3ZpZGVkIGFuIGFyZ3VtZW50JywgZnVuY3Rpb24gKCkge1xuICAgICAgaXQoJ3Nob3VsZCB0aHJvdycsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgKCgpID0+IGZzLnJlYWRQYWNrYWdlSnNvbkZyb20oKSkuc2hvdWxkLnRocm93KFR5cGVFcnJvciwgL25vbi1lbXB0eSwgYWJzb2x1dGUgcGF0aC8pO1xuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgnd2hlbiBwcm92aWRlZCBhIHJlbGF0aXZlIHBhdGgnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBpdCgnc2hvdWxkIHRocm93JywgZnVuY3Rpb24gKCkge1xuICAgICAgICAoKCkgPT4gZnMucmVhZFBhY2thZ2VKc29uRnJvbSgnLi9mb28nKSkuc2hvdWxkLnRocm93KFR5cGVFcnJvcik7XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCd3aGVuIHByb3ZpZGVkIGFuIGVtcHR5IHN0cmluZycsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGl0KCdzaG91bGQgdGhyb3cnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICgoKSA9PiBmcy5yZWFkUGFja2FnZUpzb25Gcm9tKCcnKSkuc2hvdWxkLnRocm93KFR5cGVFcnJvcik7XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCd3aGVuIHByb3ZpZGVkIGFuIGFic29sdXRlIHBhdGgnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBkZXNjcmliZSgnd2hlbiB0aGUgcGF0aCBkb2VzIG5vdCBoYXZlIGEgcGFyZW50IGBwYWNrYWdlLmpzb25gJywgZnVuY3Rpb24gKCkge1xuICAgICAgICBpdCgnc2hvdWxkIHRocm93JywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICgoKSA9PiBmcy5yZWFkUGFja2FnZUpzb25Gcm9tKCcvJykpLnNob3VsZC50aHJvdyhFcnJvcik7XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG5cbiAgICAgIGRlc2NyaWJlKCd3aGVuIHRoZSBwYXRoIGhhcyBhIHBhcmVudCBgcGFja2FnZS5qc29uYCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaXQoJ3Nob3VsZCByZWFkIHRoZSBgcGFja2FnZS5qc29uYCBmb3VuZCBpbiB0aGUgcm9vdCBkaXInLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgZnMucmVhZFBhY2thZ2VKc29uRnJvbShfX2Rpcm5hbWUpLnNob3VsZC5iZS5hbignb2JqZWN0Jyk7XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH0pO1xufSk7XG4iXSwiZmlsZSI6InRlc3QvZnMtc3BlY3MuanMiLCJzb3VyY2VSb290IjoiLi4vLi4ifQ==
@@ -0,0 +1,35 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.MockReadWriteStream = void 0;
7
+
8
+ require("source-map-support/register");
9
+
10
+ var _events = require("events");
11
+
12
+ class MockReadWriteStream extends _events.EventEmitter {
13
+ resume() {}
14
+
15
+ pause() {}
16
+
17
+ setEncoding() {}
18
+
19
+ flush() {}
20
+
21
+ write(msg) {
22
+ this.emit('data', msg);
23
+ }
24
+
25
+ end() {
26
+ this.emit('end');
27
+ this.emit('finish');
28
+ }
29
+
30
+ }
31
+
32
+ exports.MockReadWriteStream = MockReadWriteStream;require('source-map-support').install();
33
+
34
+
35
+ //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInRlc3QvaGVscGVycy5qcyJdLCJuYW1lcyI6WyJNb2NrUmVhZFdyaXRlU3RyZWFtIiwiRXZlbnRFbWl0dGVyIiwicmVzdW1lIiwicGF1c2UiLCJzZXRFbmNvZGluZyIsImZsdXNoIiwid3JpdGUiLCJtc2ciLCJlbWl0IiwiZW5kIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7QUFBQTs7QUFFQSxNQUFNQSxtQkFBTixTQUFrQ0Msb0JBQWxDLENBQStDO0FBQzdDQyxFQUFBQSxNQUFNLEdBQUksQ0FBRTs7QUFFWkMsRUFBQUEsS0FBSyxHQUFJLENBQUU7O0FBRVhDLEVBQUFBLFdBQVcsR0FBSSxDQUFFOztBQUVqQkMsRUFBQUEsS0FBSyxHQUFJLENBQUU7O0FBRVhDLEVBQUFBLEtBQUssQ0FBRUMsR0FBRixFQUFPO0FBQ1YsU0FBS0MsSUFBTCxDQUFVLE1BQVYsRUFBa0JELEdBQWxCO0FBQ0Q7O0FBRURFLEVBQUFBLEdBQUcsR0FBSTtBQUNMLFNBQUtELElBQUwsQ0FBVSxLQUFWO0FBQ0EsU0FBS0EsSUFBTCxDQUFVLFFBQVY7QUFDRDs7QUFoQjRDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRXZlbnRFbWl0dGVyIH0gZnJvbSAnZXZlbnRzJztcblxuY2xhc3MgTW9ja1JlYWRXcml0ZVN0cmVhbSBleHRlbmRzIEV2ZW50RW1pdHRlciB7XG4gIHJlc3VtZSAoKSB7fVxuXG4gIHBhdXNlICgpIHt9XG5cbiAgc2V0RW5jb2RpbmcgKCkge31cblxuICBmbHVzaCAoKSB7fVxuXG4gIHdyaXRlIChtc2cpIHtcbiAgICB0aGlzLmVtaXQoJ2RhdGEnLCBtc2cpO1xuICB9XG5cbiAgZW5kICgpIHtcbiAgICB0aGlzLmVtaXQoJ2VuZCcpO1xuICAgIHRoaXMuZW1pdCgnZmluaXNoJyk7XG4gIH1cbn1cblxuZXhwb3J0IHsgTW9ja1JlYWRXcml0ZVN0cmVhbSB9O1xuIl0sImZpbGUiOiJ0ZXN0L2hlbHBlcnMuanMiLCJzb3VyY2VSb290IjoiLi4vLi4ifQ==
@@ -0,0 +1,78 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+
5
+ require("source-map-support/register");
6
+
7
+ var _imageUtil = require("../lib/image-util");
8
+
9
+ var _path = _interopRequireDefault(require("path"));
10
+
11
+ var _lodash = _interopRequireDefault(require("lodash"));
12
+
13
+ var _lib = require("../lib");
14
+
15
+ const FIXTURES_ROOT = _path.default.resolve(__dirname, '..', '..', 'test', 'images');
16
+
17
+ async function getImage(name) {
18
+ const imagePath = _path.default.resolve(FIXTURES_ROOT, name);
19
+
20
+ return await _lib.fs.readFile(imagePath, 'utf8');
21
+ }
22
+
23
+ describe('image-util', function () {
24
+ describe('cropBase64Image', function () {
25
+ let originalImage = null;
26
+ before(async function () {
27
+ const originalImage64 = await getImage('full-image.b64');
28
+ originalImage = await (0, _imageUtil.base64ToImage)(originalImage64);
29
+ originalImage.width.should.be.equal(640, 'unexpected width');
30
+ originalImage.height.should.be.equal(1136, 'unexpected height');
31
+ });
32
+ it('should verify that an image is cropped correctly', async function () {
33
+ const croppedImage = await (0, _imageUtil.cropImage)(originalImage, {
34
+ left: 35,
35
+ top: 107,
36
+ width: 323,
37
+ height: 485
38
+ });
39
+ croppedImage.width.should.be.equal(323, 'unexpected width');
40
+ croppedImage.height.should.be.equal(485, 'unexpected height');
41
+ const croppedImageShouldBe = await getImage('cropped-image.b64');
42
+ const croppedImage64 = await (0, _imageUtil.imageToBase64)(croppedImage);
43
+ croppedImage64.should.be.equal(croppedImageShouldBe);
44
+ });
45
+ });
46
+ describe('Jimp helpers', function () {
47
+ it('should get a jimp object using image buffer', async function () {
48
+ const base64Image = await getImage('cropped-image.b64');
49
+ const imageBuffer = Buffer.from(base64Image, 'base64');
50
+ const jimpImg = await (0, _imageUtil.getJimpImage)(imageBuffer);
51
+ jimpImg.hash().should.eql('80000000000');
52
+ jimpImg.bitmap.height.should.eql(485);
53
+ jimpImg.bitmap.width.should.eql(323);
54
+ });
55
+ it('should get a jimp object using b64 string', async function () {
56
+ const base64Image = await getImage('cropped-image.b64');
57
+ const jimpImg = await (0, _imageUtil.getJimpImage)(base64Image);
58
+ jimpImg.hash().should.eql('80000000000');
59
+ jimpImg.bitmap.height.should.eql(485);
60
+ jimpImg.bitmap.width.should.eql(323);
61
+ });
62
+ it('should error with incorrect data type', async function () {
63
+ await (0, _imageUtil.getJimpImage)(1234).should.eventually.be.rejectedWith(/string or buffer/);
64
+ });
65
+ it('should error with incorrect image data', async function () {
66
+ await (0, _imageUtil.getJimpImage)('foo').should.eventually.be.rejectedWith(/Could not find MIME for Buffer/);
67
+ });
68
+ it('should get an image buffer via the overridden getBuffer method', async function () {
69
+ const base64Image = await getImage('cropped-image.b64');
70
+ const jimpImg = await (0, _imageUtil.getJimpImage)(base64Image);
71
+ const buf = await jimpImg.getBuffer(_imageUtil.MIME_PNG);
72
+ _lodash.default.isBuffer(buf).should.be.true;
73
+ });
74
+ });
75
+ });require('source-map-support').install();
76
+
77
+
78
+ //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInRlc3QvaW1hZ2UtdXRpbC1lMmUtc3BlY3MuanMiXSwibmFtZXMiOlsiRklYVFVSRVNfUk9PVCIsInBhdGgiLCJyZXNvbHZlIiwiX19kaXJuYW1lIiwiZ2V0SW1hZ2UiLCJuYW1lIiwiaW1hZ2VQYXRoIiwiZnMiLCJyZWFkRmlsZSIsImRlc2NyaWJlIiwib3JpZ2luYWxJbWFnZSIsImJlZm9yZSIsIm9yaWdpbmFsSW1hZ2U2NCIsIndpZHRoIiwic2hvdWxkIiwiYmUiLCJlcXVhbCIsImhlaWdodCIsIml0IiwiY3JvcHBlZEltYWdlIiwibGVmdCIsInRvcCIsImNyb3BwZWRJbWFnZVNob3VsZEJlIiwiY3JvcHBlZEltYWdlNjQiLCJiYXNlNjRJbWFnZSIsImltYWdlQnVmZmVyIiwiQnVmZmVyIiwiZnJvbSIsImppbXBJbWciLCJoYXNoIiwiZXFsIiwiYml0bWFwIiwiZXZlbnR1YWxseSIsInJlamVjdGVkV2l0aCIsImJ1ZiIsImdldEJ1ZmZlciIsIk1JTUVfUE5HIiwiXyIsImlzQnVmZmVyIiwidHJ1ZSJdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUE7O0FBSUE7O0FBQ0E7O0FBQ0E7O0FBR0EsTUFBTUEsYUFBYSxHQUFHQyxjQUFLQyxPQUFMLENBQWFDLFNBQWIsRUFBd0IsSUFBeEIsRUFBOEIsSUFBOUIsRUFBb0MsTUFBcEMsRUFBNEMsUUFBNUMsQ0FBdEI7O0FBRUEsZUFBZUMsUUFBZixDQUF5QkMsSUFBekIsRUFBK0I7QUFDN0IsUUFBTUMsU0FBUyxHQUFHTCxjQUFLQyxPQUFMLENBQWFGLGFBQWIsRUFBNEJLLElBQTVCLENBQWxCOztBQUNBLFNBQU8sTUFBTUUsUUFBR0MsUUFBSCxDQUFZRixTQUFaLEVBQXVCLE1BQXZCLENBQWI7QUFDRDs7QUFFREcsUUFBUSxDQUFDLFlBQUQsRUFBZSxZQUFZO0FBRWpDQSxFQUFBQSxRQUFRLENBQUMsaUJBQUQsRUFBb0IsWUFBWTtBQUN0QyxRQUFJQyxhQUFhLEdBQUcsSUFBcEI7QUFFQUMsSUFBQUEsTUFBTSxDQUFD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NkJBQWEsSUFBYixFQUFtQkosTUFBbkIsQ0FBMEJrQixVQUExQixDQUFxQ2pCLEVBQXJDLENBQXdDa0IsWUFBeEMsQ0FBcUQsa0JBQXJELENBQU47QUFDRCxLQUZDLENBQUY7QUFHQWYsSUFBQUEsRUFBRSxDQUFDLHdDQUFELEVBQTJDLGtCQUFrQjtBQUM3RCxZQUFNLDZCQUFhLEtBQWIsRUFBb0JKLE1BQXBCLENBQTJCa0IsVUFBM0IsQ0FBc0NqQixFQUF0QyxDQUF5Q2tCLFlBQXpDLENBQXNELGdDQUF0RCxDQUFOO0FBQ0QsS0FGQyxDQUFGO0FBR0FmLElBQUFBLEVBQUUsQ0FBQyxnRUFBRCxFQUFtRSxrQkFBa0I7QUFDckYsWUFBTU0sV0FBVyxHQUFHLE1BQU1wQixRQUFRLENBQUMsbUJBQUQsQ0FBbEM7QUFDQSxZQUFNd0IsT0FBTyxHQUFHLE1BQU0sNkJBQWFKLFdBQWIsQ0FBdEI7QUFDQSxZQUFNVSxHQUFHLEdBQUcsTUFBTU4sT0FBTyxDQUFDTyxTQUFSLENBQWtCQyxtQkFBbEIsQ0FBbEI7QUFDQUMsc0JBQUVDLFFBQUYsQ0FBV0osR0FBWCxFQUFnQnBCLE1BQWhCLENBQXVCQyxFQUF2QixDQUEwQndCLElBQTFCO0FBQ0QsS0FMQyxDQUFGO0FBTUQsR0E1Qk8sQ0FBUjtBQTZCRCxDQXpETyxDQUFSIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgYmFzZTY0VG9JbWFnZSwgaW1hZ2VUb0Jhc2U2NCwgY3JvcEltYWdlLFxuICBnZXRKaW1wSW1hZ2UsIE1JTUVfUE5HLFxufSBmcm9tICcuLi9saWIvaW1hZ2UtdXRpbCc7XG5pbXBvcnQgcGF0aCBmcm9tICdwYXRoJztcbmltcG9ydCBfIGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgeyBmcyB9IGZyb20gJy4uL2xpYic7XG5cblxuY29uc3QgRklYVFVSRVNfUk9PVCA9IHBhdGgucmVzb2x2ZShfX2Rpcm5hbWUsICcuLicsICcuLicsICd0ZXN0JywgJ2ltYWdlcycpO1xuXG5hc3luYyBmdW5jdGlvbiBnZXRJbWFnZSAobmFtZSkge1xuICBjb25zdCBpbWFnZVBhdGggPSBwYXRoLnJlc29sdmUoRklYVFVSRVNfUk9PVCwgbmFtZSk7XG4gIHJldHVybiBhd2FpdCBmcy5yZWFkRmlsZShpbWFnZVBhdGgsICd1dGY4Jyk7XG59XG5cbmRlc2NyaWJlKCdpbWFnZS11dGlsJywgZnVuY3Rpb24gKCkge1xuXG4gIGRlc2NyaWJlKCdjcm9wQmFzZTY0SW1hZ2UnLCBmdW5jdGlvbiAoKSB7XG4gICAgbGV0IG9yaWdpbmFsSW1hZ2UgPSBudWxsO1xuXG4gICAgYmVmb3JlKGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IG9yaWdpbmFsSW1hZ2U2NCA9IGF3YWl0IGdldEltYWdlKCdmdWxsLWltYWdlLmI2NCcpO1xuICAgICAgb3JpZ2luYWxJbWFnZSA9IGF3YWl0IGJhc2U2NFRvSW1hZ2Uob3JpZ2luYWxJbWFnZTY0KTtcblxuICAgICAgLy8gdmVyaWZ5IG9yaWdpbmFsIGltYWdlIHNpemUsIHRvIGJlIHN1cmUgdGhhdCBvcmlnaW5hbCBpbWFnZSBpcyBjb3JyZWN0XG4gICAgICBvcmlnaW5hbEltYWdlLndpZHRoLnNob3VsZC5iZS5lcXVhbCg2NDAsICd1bmV4cGVjdGVkIHdpZHRoJyk7XG4gICAgICBvcmlnaW5hbEltYWdlLmhlaWdodC5zaG91bGQuYmUuZXF1YWwoMTEzNiwgJ3VuZXhwZWN0ZWQgaGVpZ2h0Jyk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHZlcmlmeSB0aGF0IGFuIGltYWdlIGlzIGNyb3BwZWQgY29ycmVjdGx5JywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgY3JvcHBlZEltYWdlID0gYXdhaXQgY3JvcEltYWdlKG9yaWdpbmFsSW1hZ2UsIHtsZWZ0OiAzNSwgdG9wOiAxMDcsIHdpZHRoOiAzMjMsIGhlaWdodDogNDg1fSk7XG5cbiAgICAgIC8vIHZlcmlmeSBjcm9wcGVkIGltYWdlIHNpemUsIGl0IHNob3VsZCBiZSBsZXNzIHRoYW4gb3JpZ2luYWwgaW1hZ2UgYWNjb3JkaW5nIHRvIGNyb3AgcmVnaW9uXG4gICAgICBjcm9wcGVkSW1hZ2Uud2lkdGguc2hvdWxkLmJlLmVxdWFsKDMyMywgJ3VuZXhwZWN0ZWQgd2lkdGgnKTtcbiAgICAgIGNyb3BwZWRJbWFnZS5oZWlnaHQuc2hvdWxkLmJlLmVxdWFsKDQ4NSwgJ3VuZXhwZWN0ZWQgaGVpZ2h0Jyk7XG5cbiAgICAgIC8vIHZlcmlmeSB0aGF0IGltYWdlIGNyb3BwZWQsIGNvbXBhcmUgYmFzZTY0IHJlcHJlc2VudGF0aW9uXG4gICAgICBjb25zdCBjcm9wcGVkSW1hZ2VTaG91bGRCZSA9IGF3YWl0IGdldEltYWdlKCdjcm9wcGVkLWltYWdlLmI2NCcpO1xuICAgICAgY29uc3QgY3JvcHBlZEltYWdlNjQgPSBhd2FpdCBpbWFnZVRvQmFzZTY0KGNyb3BwZWRJbWFnZSk7XG4gICAgICBjcm9wcGVkSW1hZ2U2NC5zaG91bGQuYmUuZXF1YWwoY3JvcHBlZEltYWdlU2hvdWxkQmUpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnSmltcCBoZWxwZXJzJywgZnVuY3Rpb24gKCkge1xuICAgIGl0KCdzaG91bGQgZ2V0IGEgamltcCBvYmplY3QgdXNpbmcgaW1hZ2UgYnVmZmVyJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgYmFzZTY0SW1hZ2UgPSBhd2FpdCBnZXRJbWFnZSgnY3JvcHBlZC1pbWFnZS5iNjQnKTtcbiAgICAgIGNvbnN0IGltYWdlQnVmZmVyID0gQnVmZmVyLmZyb20oYmFzZTY0SW1hZ2UsICdiYXNlNjQnKTtcbiAgICAgIGNvbnN0IGppbXBJbWcgPSBhd2FpdCBnZXRKaW1wSW1hZ2UoaW1hZ2VCdWZmZXIpO1xuICAgICAgamltcEltZy5oYXNoKCkuc2hvdWxkLmVxbCgnODAwMDAwMDAwMDAnKTtcbiAgICAgIGppbXBJbWcuYml0bWFwLmhlaWdodC5zaG91bGQuZXFsKDQ4NSk7XG4gICAgICBqaW1wSW1nLmJpdG1hcC53aWR0aC5zaG91bGQuZXFsKDMyMyk7XG4gICAgfSk7XG4gICAgaXQoJ3Nob3VsZCBnZXQgYSBqaW1wIG9iamVjdCB1c2luZyBiNjQgc3RyaW5nJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgYmFzZTY0SW1hZ2UgPSBhd2FpdCBnZXRJbWFnZSgnY3JvcHBlZC1pbWFnZS5iNjQnKTtcbiAgICAgIGNvbnN0IGppbXBJbWcgPSBhd2FpdCBnZXRKaW1wSW1hZ2UoYmFzZTY0SW1hZ2UpO1xuICAgICAgamltcEltZy5oYXNoKCkuc2hvdWxkLmVxbCgnODAwMDAwMDAwMDAnKTtcbiAgICAgIGppbXBJbWcuYml0bWFwLmhlaWdodC5zaG91bGQuZXFsKDQ4NSk7XG4gICAgICBqaW1wSW1nLmJpdG1hcC53aWR0aC5zaG91bGQuZXFsKDMyMyk7XG4gICAgfSk7XG4gICAgaXQoJ3Nob3VsZCBlcnJvciB3aXRoIGluY29ycmVjdCBkYXRhIHR5cGUnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBhd2FpdCBnZXRKaW1wSW1hZ2UoMTIzNCkuc2hvdWxkLmV2ZW50dWFsbHkuYmUucmVqZWN0ZWRXaXRoKC9zdHJpbmcgb3IgYnVmZmVyLyk7XG4gICAgfSk7XG4gICAgaXQoJ3Nob3VsZCBlcnJvciB3aXRoIGluY29ycmVjdCBpbWFnZSBkYXRhJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgYXdhaXQgZ2V0SmltcEltYWdlKCdmb28nKS5zaG91bGQuZXZlbnR1YWxseS5iZS5yZWplY3RlZFdpdGgoL0NvdWxkIG5vdCBmaW5kIE1JTUUgZm9yIEJ1ZmZlci8pO1xuICAgIH0pO1xuICAgIGl0KCdzaG91bGQgZ2V0IGFuIGltYWdlIGJ1ZmZlciB2aWEgdGhlIG92ZXJyaWRkZW4gZ2V0QnVmZmVyIG1ldGhvZCcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IGJhc2U2NEltYWdlID0gYXdhaXQgZ2V0SW1hZ2UoJ2Nyb3BwZWQtaW1hZ2UuYjY0Jyk7XG4gICAgICBjb25zdCBqaW1wSW1nID0gYXdhaXQgZ2V0SmltcEltYWdlKGJhc2U2NEltYWdlKTtcbiAgICAgIGNvbnN0IGJ1ZiA9IGF3YWl0IGppbXBJbWcuZ2V0QnVmZmVyKE1JTUVfUE5HKTtcbiAgICAgIF8uaXNCdWZmZXIoYnVmKS5zaG91bGQuYmUudHJ1ZTtcbiAgICB9KTtcbiAgfSk7XG59KTtcbiJdLCJmaWxlIjoidGVzdC9pbWFnZS11dGlsLWUyZS1zcGVjcy5qcyIsInNvdXJjZVJvb3QiOiIuLi8uLiJ9