Comparing version 1.0.1 to 2.0.0
@@ -9,4 +9,8 @@ "use strict"; | ||
const _ = require('lodash'); | ||
const _isString = require('lodash.isstring'); | ||
const _isBuffer = require('lodash.isbuffer'); | ||
const _isObject = require('lodash.isobject'); | ||
const safeStringify = require('fast-safe-stringify'); | ||
@@ -40,3 +44,4 @@ | ||
this.__toFile = universalify.fromPromise(this.__toFile); | ||
this.__toBuffer = universalify.fromPromise(this.__toBuffer); | ||
this.__toBuffer = universalify.fromPromise(this.__toBuffer); // eslint-disable-next-line no-constructor-return | ||
return input => { | ||
@@ -63,5 +68,5 @@ this.__input = input; | ||
// - background (String | Object) | ||
if (_.isString(input) || _.isBuffer(input)) this.__input = input; | ||
else if (_.isObject(this.__input)) this.__options = input; | ||
if (!_.isObject(this.__input) && _.isObject(options)) | ||
if (_isString(input) || _isBuffer(input)) this.__input = input; | ||
else if (_isObject(this.__input)) this.__options = input; | ||
if (!_isObject(this.__input) && _isObject(options)) | ||
this._options = options; | ||
@@ -75,30 +80,30 @@ return this; | ||
const body = new FormData(); | ||
if (_.isString(this.__input)) body.append('input', fs.createReadStream(this.__input));else if (_.isBuffer(this.__input)) body.append('input', this.__input);else if (_.isObject(this.__input)) body.append('options', safeStringify(this.__input)); | ||
if (_isString(this.__input)) body.append('input', fs.createReadStream(this.__input));else if (_isBuffer(this.__input)) body.append('input', this.__input);else if (_isObject(this.__input)) body.append('options', safeStringify(this.__input)); | ||
body.append('queue', safeStringify(this.__queue)); | ||
this.__queue = []; | ||
const res = await this.__api.post('/', { | ||
const response = await this.__api.post('/', { | ||
body | ||
}); | ||
if (res.err) throw res.err; | ||
return res.body; | ||
if (response.err) throw response.err; | ||
return response.body; | ||
} | ||
async __toFile(fileOut) { | ||
if (!_.isString(fileOut)) throw new Error('File output path required'); | ||
if (!_isString(fileOut)) throw new Error('File output path required'); | ||
const body = new FormData(); | ||
if (_.isString(this.__input)) body.append('input', fs.createReadStream(this.__input));else if (_.isBuffer(this.__input)) body.append('input', this.__input);else if (_.isObject(this.__input)) body.append('options', safeStringify(this.__input)); | ||
if (_isString(this.__input)) body.append('input', fs.createReadStream(this.__input));else if (_isBuffer(this.__input)) body.append('input', this.__input);else if (_isObject(this.__input)) body.append('options', safeStringify(this.__input)); | ||
body.append('queue', safeStringify(this.__queue)); | ||
this.__queue = []; | ||
const res = await this.__api.post('/', { | ||
const response = await this.__api.post('/', { | ||
body, | ||
raw: true | ||
}); | ||
if (res.err) throw res.err; | ||
if (response.err) throw response.err; | ||
this.__info = { | ||
format: res.headers.get('x-sharp-format'), | ||
size: Number(res.headers.get('x-sharp-size')), | ||
width: Number(res.headers.get('x-sharp-width')), | ||
height: Number(res.headers.get('x-sharp-height')), | ||
channels: Number(res.headers.get('x-sharp-channels')), | ||
premultiplied: boolean(res.headers.get('x-sharp-multiplied')) | ||
format: response.headers.get('x-sharp-format'), | ||
size: Number(response.headers.get('x-sharp-size')), | ||
width: Number(response.headers.get('x-sharp-width')), | ||
height: Number(response.headers.get('x-sharp-height')), | ||
channels: Number(response.headers.get('x-sharp-channels')), | ||
premultiplied: boolean(response.headers.get('x-sharp-multiplied')) | ||
}; | ||
@@ -117,3 +122,3 @@ const stream = fs.createWriteStream(fileOut); // let timer; | ||
}); | ||
res.body.on('error', reject).pipe(stream); | ||
response.body.on('error', reject).pipe(stream); | ||
}); | ||
@@ -125,20 +130,20 @@ return promise; | ||
const body = new FormData(); | ||
if (_.isString(this.__input)) body.append('input', fs.createReadStream(this.__input));else if (_.isBuffer(this.__input)) body.append('input', this.__input);else if (_.isObject(this.__input)) body.append('options', safeStringify(this.__input)); | ||
if (_isString(this.__input)) body.append('input', fs.createReadStream(this.__input));else if (_isBuffer(this.__input)) body.append('input', this.__input);else if (_isObject(this.__input)) body.append('options', safeStringify(this.__input)); | ||
body.append('queue', safeStringify(this.__queue)); | ||
this.__queue = []; | ||
const res = await this.__api.post('/', { | ||
const response = await this.__api.post('/', { | ||
body, | ||
raw: true | ||
}); | ||
if (res.err) throw res.err; | ||
if (response.err) throw response.err; | ||
this.__info = { | ||
format: res.headers.get('x-sharp-format'), | ||
size: Number(res.headers.get('x-sharp-size')), | ||
width: Number(res.headers.get('x-sharp-width')), | ||
height: Number(res.headers.get('x-sharp-height')), | ||
channels: Number(res.headers.get('x-sharp-channels')), | ||
premultiplied: boolean(res.headers.get('x-sharp-multiplied')) | ||
format: response.headers.get('x-sharp-format'), | ||
size: Number(response.headers.get('x-sharp-size')), | ||
width: Number(response.headers.get('x-sharp-width')), | ||
height: Number(response.headers.get('x-sharp-height')), | ||
channels: Number(response.headers.get('x-sharp-channels')), | ||
premultiplied: boolean(response.headers.get('x-sharp-multiplied')) | ||
}; | ||
const data = await res.buffer(); | ||
if (_.isObject(options) && boolean(options.resolveWithObject)) return { | ||
const data = await response.buffer(); | ||
if (_isObject(options) && boolean(options.resolveWithObject)) return { | ||
data, | ||
@@ -157,3 +162,3 @@ info: this.__info | ||
keys.forEach(key => { | ||
for (const key of keys) { | ||
Lipo.prototype[key] = function (...args) { | ||
@@ -175,7 +180,12 @@ if (!['toFile', 'toBuffer', 'metadata'].includes(key)) { | ||
}; | ||
}); // Sourced from `lib/resize.js`: | ||
} | ||
function lipo(config) { | ||
return new Lipo(config); | ||
} // Sourced from `lib/resize.js`: | ||
// <https://github.com/lovell/sharp/blob/master/lib/resize.js> | ||
// Weighting to apply when using contain/cover fit. | ||
Lipo.gravity = { | ||
lipo.gravity = { | ||
center: 0, | ||
@@ -193,3 +203,3 @@ centre: 0, | ||
Lipo.position = { | ||
lipo.position = { | ||
top: 1, | ||
@@ -205,3 +215,3 @@ right: 2, | ||
Lipo.strategy = { | ||
lipo.strategy = { | ||
entropy: 16, | ||
@@ -211,3 +221,3 @@ attention: 17 | ||
Lipo.kernel = { | ||
lipo.kernel = { | ||
nearest: 'nearest', | ||
@@ -219,3 +229,3 @@ cubic: 'cubic', | ||
Lipo.fit = { | ||
lipo.fit = { | ||
contain: 'contain', | ||
@@ -227,3 +237,3 @@ cover: 'cover', | ||
}; | ||
module.exports = Lipo; | ||
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9pbmRleC5qcyJdLCJuYW1lcyI6WyJmcyIsInJlcXVpcmUiLCJGb3JtRGF0YSIsIkZyaXNiZWUiLCJfIiwic2FmZVN0cmluZ2lmeSIsInVuaXZlcnNhbGlmeSIsImJvb2xlYW4iLCJrZXlzIiwiTGlwbyIsImNvbnN0cnVjdG9yIiwiY29uZmlnIiwiX19jb25maWciLCJrZXkiLCJwcm9jZXNzIiwiZW52IiwiTElQT19LRVkiLCJiYXNlVVJJIiwiTElQTyIsIl9fYXBpIiwiaGVhZGVycyIsIkFjY2VwdCIsImF1dGgiLCJfX3F1ZXVlIiwiX19tZXRhZGF0YSIsImZyb21Qcm9taXNlIiwiX190b0ZpbGUiLCJfX3RvQnVmZmVyIiwiaW5wdXQiLCJfX2lucHV0IiwiYm9keSIsImlzU3RyaW5nIiwiYXBwZW5kIiwiY3JlYXRlUmVhZFN0cmVhbSIsImlzQnVmZmVyIiwiaXNPYmplY3QiLCJyZXMiLCJwb3N0IiwiZXJyIiwiZmlsZU91dCIsIkVycm9yIiwicmF3IiwiX19pbmZvIiwiZm9ybWF0IiwiZ2V0Iiwic2l6ZSIsIk51bWJlciIsIndpZHRoIiwiaGVpZ2h0IiwiY2hhbm5lbHMiLCJwcmVtdWx0aXBsaWVkIiwic3RyZWFtIiwiY3JlYXRlV3JpdGVTdHJlYW0iLCJwcm9taXNlIiwiUHJvbWlzZSIsInJlc29sdmUiLCJyZWplY3QiLCJvbiIsInBpcGUiLCJvcHRpb25zIiwiZGF0YSIsImJ1ZmZlciIsInJlc29sdmVXaXRoT2JqZWN0IiwiaW5mbyIsImNsb25lIiwiZm9yRWFjaCIsInByb3RvdHlwZSIsImFyZ3MiLCJpbmNsdWRlcyIsInB1c2giLCJjb25jYXQiLCJncmF2aXR5IiwiY2VudGVyIiwiY2VudHJlIiwibm9ydGgiLCJlYXN0Iiwic291dGgiLCJ3ZXN0Iiwibm9ydGhlYXN0Iiwic291dGhlYXN0Iiwic291dGh3ZXN0Iiwibm9ydGh3ZXN0IiwicG9zaXRpb24iLCJ0b3AiLCJyaWdodCIsImJvdHRvbSIsImxlZnQiLCJzdHJhdGVneSIsImVudHJvcHkiLCJhdHRlbnRpb24iLCJrZXJuZWwiLCJuZWFyZXN0IiwiY3ViaWMiLCJsYW5jem9zMiIsImxhbmN6b3MzIiwiZml0IiwiY29udGFpbiIsImNvdmVyIiwiZmlsbCIsImluc2lkZSIsIm91dHNpZGUiLCJtb2R1bGUiLCJleHBvcnRzIl0sIm1hcHBpbmdzIjoiOztBQUFBLE1BQU1BLEVBQUUsR0FBR0MsT0FBTyxDQUFDLElBQUQsQ0FBbEI7O0FBRUEsTUFBTUMsUUFBUSxHQUFHRCxPQUFPLENBQUMsV0FBRCxDQUF4Qjs7QUFDQSxNQUFNRSxPQUFPLEdBQUdGLE9BQU8sQ0FBQyxTQUFELENBQXZCOztBQUNBLE1BQU1HLENBQUMsR0FBR0gsT0FBTyxDQUFDLFFBQUQsQ0FBakI7O0FBQ0EsTUFBTUksYUFBYSxHQUFHSixPQUFPLENBQUMscUJBQUQsQ0FBN0I7O0FBQ0EsTUFBTUssWUFBWSxHQUFHTCxPQUFPLENBQUMsY0FBRCxDQUE1Qjs7QUFDQSxNQUFNO0FBQUVNLEVBQUFBO0FBQUYsSUFBY04sT0FBTyxDQUFDLFNBQUQsQ0FBM0IsQyxDQUVBOzs7QUFDQSxNQUFNTyxJQUFJLEdBQUcsQ0FDWCxVQURXLEVBRVgsa0JBRlcsRUFHWCxnQkFIVyxFQUlYLFFBSlcsRUFLWCxNQUxXLEVBTVgsT0FOVyxFQU9YLEtBUFcsRUFRWCxLQVJXLEVBU1gsbUJBVFcsRUFVWCxvQkFWVyxFQVdYLGFBWFcsRUFZWCxRQVpXLEVBYVgsU0FiVyxFQWNYLE1BZFcsRUFlWCxNQWZXLEVBZ0JYLFNBaEJXLEVBaUJYLE1BakJXLEVBa0JYLFFBbEJXLEVBbUJYLFNBbkJXLEVBb0JYLE1BcEJXLEVBcUJYLE9BckJXLEVBc0JYLFFBdEJXLEVBdUJYLFdBdkJXLEVBd0JYLFdBeEJXLEVBeUJYLFVBekJXLEVBMEJYLFdBMUJXLEVBMkJYLFNBM0JXLEVBNEJYLFlBNUJXLEVBNkJYLFdBN0JXLEVBOEJYLFdBOUJXLEVBK0JYLGVBL0JXLEVBZ0NYLGNBaENXLEVBaUNYLGdCQWpDVyxFQWtDWCxhQWxDVyxFQW1DWCxVQW5DVyxFQW9DWCxR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LE9BRks7QUFHWkMsRUFBQUEsUUFBUSxFQUFFLFVBSEU7QUFJWkMsRUFBQUEsUUFBUSxFQUFFO0FBSkUsQ0FBZCxDLENBT0E7O0FBQ0FyRixJQUFJLENBQUNzRixHQUFMLEdBQVc7QUFDVEMsRUFBQUEsT0FBTyxFQUFFLFNBREE7QUFFVEMsRUFBQUEsS0FBSyxFQUFFLE9BRkU7QUFHVEMsRUFBQUEsSUFBSSxFQUFFLE1BSEc7QUFJVEMsRUFBQUEsTUFBTSxFQUFFLFFBSkM7QUFLVEMsRUFBQUEsT0FBTyxFQUFFO0FBTEEsQ0FBWDtBQVFBQyxNQUFNLENBQUNDLE9BQVAsR0FBaUI3RixJQUFqQiIsInNvdXJjZXNDb250ZW50IjpbImNvbnN0IGZzID0gcmVxdWlyZSgnZnMnKTtcblxuY29uc3QgRm9ybURhdGEgPSByZXF1aXJlKCdmb3JtLWRhdGEnKTtcbmNvbnN0IEZyaXNiZWUgPSByZXF1aXJlKCdmcmlzYmVlJyk7XG5jb25zdCBfID0gcmVxdWlyZSgnbG9kYXNoJyk7XG5jb25zdCBzYWZlU3RyaW5naWZ5ID0gcmVxdWlyZSgnZmFzdC1zYWZlLXN0cmluZ2lmeScpO1xuY29uc3QgdW5pdmVyc2FsaWZ5ID0gcmVxdWlyZSgndW5pdmVyc2FsaWZ5Jyk7XG5jb25zdCB7IGJvb2xlYW4gfSA9IHJlcXVpcmUoJ2Jvb2xlYW4nKTtcblxuLy8gT2JqZWN0LmtleXMocmVxdWlyZSgnc2hhcnAnKS5wcm90b3R5cGUpLmZpbHRlcihrZXkgPT4gIWtleS5zdGFydHNXaXRoKCdfJykpXG5jb25zdCBrZXlzID0gW1xuICAnbWV0YWRhdGEnLFxuICAnbGltaXRJbnB1dFBpeGVscycsXG4gICdzZXF1ZW50aWFsUmVhZCcsXG4gICdyZXNpemUnLFxuICAnY3JvcCcsXG4gICdlbWJlZCcsXG4gICdtYXgnLFxuICAnbWluJyxcbiAgJ2lnbm9yZUFzcGVjdFJhdGlvJyxcbiAgJ3dpdGhvdXRFbmxhcmdlbWVudCcsXG4gICdvdmVybGF5V2l0aCcsXG4gICdyb3RhdGUnLFxuICAnZXh0cmFjdCcsXG4gICdmbGlwJyxcbiAgJ2Zsb3AnLFxuICAnc2hhcnBlbicsXG4gICdibHVyJyxcbiAgJ2V4dGVuZCcsXG4gICdmbGF0dGVuJyxcbiAgJ3RyaW0nLFxuICAnZ2FtbWEnLFxuICAnbmVnYXRlJyxcbiAgJ25vcm1hbGlzZScsXG4gICdub3JtYWxpemUnLFxuICAnY29udm9sdmUnLFxuICAndGhyZXNob2xkJyxcbiAgJ2Jvb2xlYW4nLFxuICAnYmFja2dyb3VuZCcsXG4gICdncmV5c2NhbGUnLFxuICAnZ3JheXNjYWxlJyxcbiAgJ3RvQ29sb3Vyc3BhY2UnLFxuICAndG9Db2xvcnNwYWNlJyxcbiAgJ2V4dHJhY3RDaGFubmVsJyxcbiAgJ2pvaW5DaGFubmVsJyxcbiAgJ2JhbmRib29sJyxcbiAgJ3RvRmlsZScsXG4gICd0b0J1ZmZlcicsXG4gICd3aXRoTWV0YWRhdGEnLFxuICAnanBlZycsXG4gICdwbmcnLFxuICAnd2VicCcsXG4gICd0aWZmJyxcbiAgJ3JhdycsXG4gICd0b0Zvcm1hdCcsXG4gICd0aWxlJ1xuXTtcblxuY2xhc3MgTGlwbyB7XG4gIGNvbnN0cnVjdG9yKGNvbmZpZyA9IHt9KSB7XG4gICAgdGhpcy5fX2NvbmZpZyA9IHtcbiAgICAgIGtleTogcHJvY2Vzcy5lbnYuTElQT19LRVkgfHwgJycsXG4gICAgICBiYXNlVVJJOlxuICAgICAgICBwcm9jZXNzLmVudi5MSVBPID09PSAndHJ1ZSdcbiAgICAgICAgICA/ICdodHRwOi8vbG9jYWxob3N0OjMwMDAnXG4gICAgICAgICAgOiAnaHR0cHM6Ly9hcGkubGlwby5pbycsXG4gICAgICAuLi5jb25maWdcbiAgICB9O1xuXG4gICAgdGhpcy5fX2FwaSA9IG5ldyBGcmlzYmVlKHtcbiAgICAgIGJhc2VVUkk6IHRoaXMuX19jb25maWcuYmFzZVVSSSxcbiAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgQWNjZXB0OiAnYXBwbGljYXRpb24vanNvbidcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGlmICh0aGlzLl9fY29uZmlnLmtleSkgdGhpcy5fX2FwaS5hdXRoKHRoaXMuX19jb25maWcua2V5KTtcblxuICAgIHRoaXMuX19xdWV1ZSA9IFtdO1xuXG4gICAgdGhpcy5fX21ldGFkYXRhID0gdW5pdmVyc2FsaWZ5LmZyb21Qcm9taXNlKHRoaXMuX19tZXRhZGF0YSk7XG4gICAgdGhpcy5fX3RvRmlsZSA9IHVuaXZlcnNhbGlmeS5mcm9tUHJvbWlzZSh0aGlzLl9fdG9GaWxlKTtcbiAgICB0aGlzLl9fdG9CdWZmZXIgPSB1bml2ZXJzYWxpZnkuZnJvbVByb21pc2UodGhpcy5fX3RvQnVmZmVyKTtcblxuICAgIHJldHVybiBpbnB1dCA9PiB7XG4gICAgICB0aGlzLl9faW5wdXQgPSBpbnB1dDtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH07XG5cbiAgICAvKlxuICAgIC8vIDxodHRwczovL2dpdGh1Yi5jb20vbG92ZWxsL3NoYXJwL2lzc3Vlcy8xMDQ1PlxuICAgIHJldHVybiAoaW5wdXQsIG9wdGlvbnMgPSB7fSkgPT4ge1xuICAgICAgdGhpcy5fX2lucHV0ID0gbnVsbDtcbiAgICAgIHRoaXMuX19vcHRpb25zID0ge307XG4gICAgICAvLyBpbnB1dCA9IEJ1ZmZlciB8IFN0cmluZ1xuICAgICAgLy8gb3B0aW9ucyA9IE9iamVjdFxuICAgICAgLy8gLSBkZW5zaXR5IChOdW1iZXIpXG4gICAgICAvLyAtIHJhdyAoT2JqZWN0KVxuICAgICAgLy8gICAtIHdpZHRoIChOdW1iZXIpXG4gICAgICAvLyAgIC0gaGVpZ2h0IChOdW1iZXIpXG4gICAgICAvLyAgIC0gY2hhbm5lbHMgKE51bWJlcjsgMS00KVxuICAgICAgLy8gLSBjcmVhdGUgKE9iamVjdClcbiAgICAgIC8vICAgLSB3aWR0aCAoTnVtYmVyKVxuICAgICAgLy8gICAtIGhlaWdodCAoTnVtYmVyKVxuICAgICAgLy8gICAtIGNoYW5uZWxzIChOdW1iZXI7IDMtNClcbiAgICAgIC8vICAgLSBiYWNrZ3JvdW5kIChTdHJpbmcgfCBPYmplY3QpXG4gICAgICBpZiAoXy5pc1N0cmluZyhpbnB1dCkgfHwgXy5pc0J1ZmZlcihpbnB1dCkpIHRoaXMuX19pbnB1dCA9IGlucHV0O1xuICAgICAgZWxzZSBpZiAoXy5pc09iamVjdCh0aGlzLl9faW5wdXQpKSB0aGlzLl9fb3B0aW9ucyA9IGlucHV0O1xuICAgICAgaWYgKCFfLmlzT2JqZWN0KHRoaXMuX19pbnB1dCkgJiYgXy5pc09iamVjdChvcHRpb25zKSlcbiAgICAgICAgdGhpcy5fb3B0aW9ucyA9IG9wdGlvbnM7XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9O1xuICAgICovXG4gIH1cblxuICBhc3luYyBfX21ldGFkYXRhKCkge1xuICAgIGNvbnN0IGJvZHkgPSBuZXcgRm9ybURhdGEoKTtcbiAgICBpZiAoXy5pc1N0cmluZyh0aGlzLl9faW5wdXQpKVxuICAgICAgYm9keS5hcHBlbmQoJ2lucHV0JywgZnMuY3JlYXRlUmVhZFN0cmVhbSh0aGlzLl9faW5wdXQpKTtcbiAgICBlbHNlIGlmIChfLmlzQnVmZmVyKHRoaXMuX19pbnB1dCkpIGJvZHkuYXBwZW5kKCdpbnB1dCcsIHRoaXMuX19pbnB1dCk7XG4gICAgZWxzZSBpZiAoXy5pc09iamVjdCh0aGlzLl9faW5wdXQpKVxuICAgICAgYm9keS5hcHBlbmQoJ29wdGlvbnMnLCBzYWZlU3RyaW5naWZ5KHRoaXMuX19pbnB1dCkpO1xuICAgIGJvZHkuYXBwZW5kKCdxdWV1ZScsIHNhZmVTdHJpbmdpZnkodGhpcy5fX3F1ZXVlKSk7XG4gICAgdGhpcy5fX3F1ZXVlID0gW107XG4gICAgY29uc3QgcmVzID0gYXdhaXQgdGhpcy5fX2FwaS5wb3N0KCcvJywgeyBib2R5IH0pO1xuICAgIGlmIChyZXMuZXJyKSB0aHJvdyByZXMuZXJyO1xuICAgIHJldHVybiByZXMuYm9keTtcbiAgfVxuXG4gIGFzeW5jIF9fdG9GaWxlKGZpbGVPdXQpIHtcbiAgICBpZiAoIV8uaXNTdHJpbmcoZmlsZU91dCkpIHRocm93IG5ldyBFcnJvcignRmlsZSBvdXRwdXQgcGF0aCByZXF1aXJlZCcpO1xuICAgIGNvbnN0IGJvZHkgPSBuZXcgRm9ybURhdGEoKTtcbiAgICBpZiAoXy5pc1N0cmluZyh0aGlzLl9faW5wdXQpKVxuICAgICAgYm9keS5hcHBlbmQoJ2lucHV0JywgZnMuY3JlYXRlUmVhZFN0cmVhbSh0aGlzLl9faW5wdXQpKTtcbiAgICBlbHNlIGlmIChfLmlzQnVmZmVyKHRoaXMuX19pbnB1dCkpIGJvZHkuYXBwZW5kKCdpbnB1dCcsIHRoaXMuX19pbnB1dCk7XG4gICAgZWxzZSBpZiAoXy5pc09iamVjdCh0aGlzLl9faW5wdXQpKVxuICAgICAgYm9keS5hcHBlbmQoJ29wdGlvbnMnLCBzYWZlU3RyaW5naWZ5KHRoaXMuX19pbnB1dCkpO1xuICAgIGJvZHkuYXBwZW5kKCdxdWV1ZScsIHNhZmVTdHJpbmdpZnkodGhpcy5fX3F1ZXVlKSk7XG4gICAgdGhpcy5fX3F1ZXVlID0gW107XG4gICAgY29uc3QgcmVzID0gYXdhaXQgdGhpcy5fX2FwaS5wb3N0KCcvJywgeyBib2R5LCByYXc6IHRydWUgfSk7XG4gICAgaWYgKHJlcy5lcnIpIHRocm93IHJlcy5lcnI7XG4gICAgdGhpcy5fX2luZm8gPSB7XG4gICAgICBmb3JtYXQ6IHJlcy5oZWFkZXJzLmdldCgneC1zaGFycC1mb3JtYXQnKSxcbiAgICAgIHNpemU6IE51bWJlcihyZXMuaGVhZGVycy5nZXQoJ3gtc2hhcnAtc2l6ZScpKSxcbiAgICAgIHdpZHRoOiBOdW1iZXIocmVzLmhlYWRlcnMuZ2V0KCd4LXNoYXJwLXdpZHRoJykpLFxuICAgICAgaGVpZ2h0OiBOdW1iZXIocmVzLmhlYWRlcnMuZ2V0KCd4LXNoYXJwLWhlaWdodCcpKSxcbiAgICAgIGNoYW5uZWxzOiBOdW1iZXIocmVzLmhlYWRlcnMuZ2V0KCd4LXNoYXJwLWNoYW5uZWxzJykpLFxuICAgICAgcHJlbXVsdGlwbGllZDogYm9vbGVhbihyZXMuaGVhZGVycy5nZXQoJ3gtc2hhcnAtbXVsdGlwbGllZCcpKVxuICAgIH07XG4gICAgY29uc3Qgc3RyZWFtID0gZnMuY3JlYXRlV3JpdGVTdHJlYW0oZmlsZU91dCk7XG4gICAgLy8gbGV0IHRpbWVyO1xuICAgIC8vIHN0cmVhbS5vbignb3BlbicsICgpID0+IHtcbiAgICAvLyAgIHRpbWVyID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgLy8gICAgIHN0cmVhbS5jbG9zZSgpO1xuICAgIC8vICAgICByZWplY3QobmV3IEVycm9yKCdUaW1lZCBvdXQgd2hpbGUgd3JpdGluZyBmaWxlJykpO1xuICAgIC8vICAgfSwgMTAwMDApO1xuICAgIC8vIH0pO1xuICAgIGNvbnN0IHByb21pc2UgPSBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICBzdHJlYW0ub24oJ2Vycm9yJywgcmVqZWN0KS5vbignZmluaXNoJywgKCkgPT4ge1xuICAgICAgICByZXNvbHZlKHRoaXMuX19pbmZvKTtcbiAgICAgIH0pO1xuICAgICAgcmVzLmJvZHkub24oJ2Vycm9yJywgcmVqZWN0KS5waXBlKHN0cmVhbSk7XG4gICAgfSk7XG4gICAgcmV0dXJuIHByb21pc2U7XG4gIH1cblxuICBhc3luYyBfX3RvQnVmZmVyKG9wdGlvbnMgPSB7fSkge1xuICAgIGNvbnN0IGJvZHkgPSBuZXcgRm9ybURhdGEoKTtcbiAgICBpZiAoXy5pc1N0cmluZyh0aGlzLl9faW5wdXQpKVxuICAgICAgYm9keS5hcHBlbmQoJ2lucHV0JywgZnMuY3JlYXRlUmVhZFN0cmVhbSh0aGlzLl9faW5wdXQpKTtcbiAgICBlbHNlIGlmIChfLmlzQnVmZmVyKHRoaXMuX19pbnB1dCkpIGJvZHkuYXBwZW5kKCdpbnB1dCcsIHRoaXMuX19pbnB1dCk7XG4gICAgZWxzZSBpZiAoXy5pc09iamVjdCh0aGlzLl9faW5wdXQpKVxuICAgICAgYm9keS5hcHBlbmQoJ29wdGlvbnMnLCBzYWZlU3RyaW5naWZ5KHRoaXMuX19pbnB1dCkpO1xuICAgIGJvZHkuYXBwZW5kKCdxdWV1ZScsIHNhZmVTdHJpbmdpZnkodGhpcy5fX3F1ZXVlKSk7XG4gICAgdGhpcy5fX3F1ZXVlID0gW107XG4gICAgY29uc3QgcmVzID0gYXdhaXQgdGhpcy5fX2FwaS5wb3N0KCcvJywgeyBib2R5LCByYXc6IHRydWUgfSk7XG4gICAgaWYgKHJlcy5lcnIpIHRocm93IHJlcy5lcnI7XG4gICAgdGhpcy5fX2luZm8gPSB7XG4gICAgICBmb3JtYXQ6IHJlcy5oZWFkZXJzLmdldCgneC1zaGFycC1mb3JtYXQnKSxcbiAgICAgIHNpemU6IE51bWJlcihyZXMuaGVhZGVycy5nZXQoJ3gtc2hhcnAtc2l6ZScpKSxcbiAgICAgIHdpZHRoOiBOdW1iZXIocmVzLmhlYWRlcnMuZ2V0KCd4LXNoYXJwLXdpZHRoJykpLFxuICAgICAgaGVpZ2h0OiBOdW1iZXIocmVzLmhlYWRlcnMuZ2V0KCd4LXNoYXJwLWhlaWdodCcpKSxcbiAgICAgIGNoYW5uZWxzOiBOdW1iZXIocmVzLmhlYWRlcnMuZ2V0KCd4LXNoYXJwLWNoYW5uZWxzJykpLFxuICAgICAgcHJlbXVsdGlwbGllZDogYm9vbGVhbihyZXMuaGVhZGVycy5nZXQoJ3gtc2hhcnAtbXVsdGlwbGllZCcpKVxuICAgIH07XG4gICAgY29uc3QgZGF0YSA9IGF3YWl0IHJlcy5idWZmZXIoKTtcbiAgICBpZiAoXy5pc09iamVjdChvcHRpb25zKSAmJiBib29sZWFuKG9wdGlvbnMucmVzb2x2ZVdpdGhPYmplY3QpKVxuICAgICAgcmV0dXJuIHsgZGF0YSwgaW5mbzogdGhpcy5fX2luZm8gfTtcbiAgICByZXR1cm4gZGF0YTtcbiAgfVxuXG4gIGNsb25lKCkge1xuICAgIHJldHVybiBuZXcgTGlwbyh7IC4uLnRoaXMuX19jb25maWcgfSkodGhpcy5fX2lucHV0KTtcbiAgfVxufVxuXG5rZXlzLmZvckVhY2goa2V5ID0+IHtcbiAgTGlwby5wcm90b3R5cGVba2V5XSA9IGZ1bmN0aW9uKC4uLmFyZ3MpIHtcbiAgICBpZiAoIVsndG9GaWxlJywgJ3RvQnVmZmVyJywgJ21ldGFkYXRhJ10uaW5jbHVkZXMoa2V5KSkge1xuICAgICAgdGhpcy5fX3F1ZXVlLnB1c2goW2tleV0uY29uY2F0KGFyZ3MpKTtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIGlmIChrZXkgPT09ICdtZXRhZGF0YScpIHtcbiAgICAgIHRoaXMuX19xdWV1ZS5wdXNoKFsnbWV0YWRhdGEnXSk7XG4gICAgICByZXR1cm4gdGhpcy5fX21ldGFkYXRhKC4uLmFyZ3MpO1xuICAgIH1cblxuICAgIGlmIChrZXkgPT09ICd0b0ZpbGUnKSByZXR1cm4gdGhpcy5fX3RvRmlsZSguLi5hcmdzKTtcbiAgICByZXR1cm4gdGhpcy5fX3RvQnVmZmVyKC4uLmFyZ3MpO1xuICB9O1xufSk7XG5cbi8vIFNvdXJjZWQgZnJvbSBgbGliL3Jlc2l6ZS5qc2A6XG4vLyA8aHR0cHM6Ly9naXRodWIuY29tL2xvdmVsbC9zaGFycC9ibG9iL21hc3Rlci9saWIvcmVzaXplLmpzPlxuXG4vLyBXZWlnaHRpbmcgdG8gYXBwbHkgd2hlbiB1c2luZyBjb250YWluL2NvdmVyIGZpdC5cbkxpcG8uZ3Jhdml0eSA9IHtcbiAgY2VudGVyOiAwLFxuICBjZW50cmU6IDAsXG4gIG5vcnRoOiAxLFxuICBlYXN0OiAyLFxuICBzb3V0aDogMyxcbiAgd2VzdDogNCxcbiAgbm9ydGhlYXN0OiA1LFxuICBzb3V0aGVhc3Q6IDYsXG4gIHNvdXRod2VzdDogNyxcbiAgbm9ydGh3ZXN0OiA4XG59O1xuXG4vLyBQb3NpdGlvbiB0byBhcHBseSB3aGVuIHVzaW5nIGNvbnRhaW4vY292ZXIgZml0LlxuTGlwby5wb3NpdGlvbiA9IHtcbiAgdG9wOiAxLFxuICByaWdodDogMixcbiAgYm90dG9tOiAzLFxuICBsZWZ0OiA0LFxuICAncmlnaHQgdG9wJzogNSxcbiAgJ3JpZ2h0IGJvdHRvbSc6IDYsXG4gICdsZWZ0IGJvdHRvbSc6IDcsXG4gICdsZWZ0IHRvcCc6IDhcbn07XG5cbi8vIFN0cmF0ZWdpZXMgZm9yIGF1dG9tYWdpYyBjb3ZlciBiZWhhdmlvdXIuXG5MaXBvLnN0cmF0ZWd5ID0ge1xuICBlbnRyb3B5OiAxNixcbiAgYXR0ZW50aW9uOiAxN1xufTtcblxuLy8gUmVkdWN0aW9uIGtlcm5lbHMuXG5MaXBvLmtlcm5lbCA9IHtcbiAgbmVhcmVzdDogJ25lYXJlc3QnLFxuICBjdWJpYzogJ2N1YmljJyxcbiAgbGFuY3pvczI6ICdsYW5jem9zMicsXG4gIGxhbmN6b3MzOiAnbGFuY3pvczMnXG59O1xuXG4vLyBNZXRob2RzIGJ5IHdoaWNoIGFuIGltYWdlIGNhbiBiZSByZXNpemVkIHRvIGZpdCB0aGUgcHJvdmlkZWQgZGltZW5zaW9ucy5cbkxpcG8uZml0ID0ge1xuICBjb250YWluOiAnY29udGFpbicsXG4gIGNvdmVyOiAnY292ZXInLFxuICBmaWxsOiAnZmlsbCcsXG4gIGluc2lkZTogJ2luc2lkZScsXG4gIG91dHNpZGU6ICdvdXRzaWRlJ1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBMaXBvO1xuIl19 | ||
module.exports = lipo; | ||
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9pbmRleC5qcyJdLCJuYW1lcyI6WyJmcyIsInJlcXVpcmUiLCJGb3JtRGF0YSIsIkZyaXNiZWUiLCJfaXNTdHJpbmciLCJfaXNCdWZmZXIiLCJfaXNPYmplY3QiLCJzYWZlU3RyaW5naWZ5IiwidW5pdmVyc2FsaWZ5IiwiYm9vbGVhbiIsImtleXMiLCJMaXBvIiwiY29uc3RydWN0b3IiLCJjb25maWciLCJfX2NvbmZpZyIsImtleSIsInByb2Nlc3MiLCJlbnYiLCJMSVBPX0tFWSIsImJhc2VVUkkiLCJMSVBPIiwiX19hcGkiLCJoZWFkZXJzIiwiQWNjZXB0IiwiYXV0aCIsIl9fcXVldWUiLCJfX21ldGFkYXRhIiwiZnJvbVByb21pc2UiLCJfX3RvRmlsZSIsIl9fdG9CdWZmZXIiLCJpbnB1dCIsIl9faW5wdXQiLCJib2R5IiwiYXBwZW5kIiwiY3JlYXRlUmVhZFN0cmVhbSIsInJlc3BvbnNlIiwicG9zdCIsImVyciIsImZpbGVPdXQiLCJFcnJvciIsInJhdyIsIl9faW5mbyIsImZvcm1hdCIsImdldCIsInNpemUiLCJOdW1iZXIiLCJ3aWR0aCIsImhlaWdodCIsImNoYW5uZWxzIiwicHJlbXVsdGlwbGllZCIsInN0cmVhbSIsImNyZWF0ZVdyaXRlU3RyZWFtIiwicHJvbWlzZSIsIlByb21pc2UiLCJyZXNvbHZlIiwicmVqZWN0Iiwib24iLCJwaXBlIiwib3B0aW9ucyIsImRhdGEiLCJidWZmZXIiLCJyZXNvbHZlV2l0aE9iamVjdCIsImluZm8iLCJjbG9uZSIsInByb3RvdHlwZSIsImFyZ3MiLCJpbmNsdWRlcyIsInB1c2giLCJjb25jYXQiLCJsaXBvIiwiZ3Jhdml0eSIsImNlbnRlciIsImNlbnRyZSIsIm5vcnRoIiwiZWFzdCIsInNvdXRoIiwid2VzdCIsIm5vcnRoZWFzdCIsInNvdXRoZWFzdCIsInNvdXRod2VzdCIsIm5vcnRod2VzdCIsInBvc2l0aW9uIiwidG9wIiwicmlnaHQiLCJib3R0b20iLCJsZWZ0Iiwic3RyYXRlZ3kiLCJlbnRyb3B5IiwiYXR0ZW50aW9uIiwia2VybmVsIiwibmVhcmVzdCIsImN1YmljIiwibGFuY3pvczIiLCJsYW5jem9zMyIsImZpdCIsImNvbnRhaW4iLCJjb3ZlciIsImZpbGwiLCJpbnNpZGUiLCJvdXRzaWRlIiwibW9kdWxlIiwiZXhwb3J0cyJdLCJtYXBwaW5ncyI6Ijs7QUFBQSxNQUFNQSxFQUFFLEdBQUdDLE9BQU8sQ0FBQyxJQUFELENBQWxCOztBQUVBLE1BQU1DLFFBQVEsR0FBR0QsT0FBTyxDQUFDLFdBQUQsQ0FBeEI7O0FBQ0EsTUFBTUUsT0FBTyxHQUFHRixPQUFPLENBQUMsU0FBRCxDQUF2Qjs7QUFDQSxNQUFNRyxTQUFTLEdBQUdILE9BQU8sQ0FBQyxpQkFBRCxDQUF6Qjs7QUFDQSxNQUFNSSxTQUFTLEdBQUdKLE9BQU8sQ0FBQyxpQkFBRCxDQUF6Qjs7QUFDQSxNQUFNSyxTQUFTLEdBQUdMLE9BQU8sQ0FBQyxpQkFBRCxDQUF6Qjs7QUFDQSxNQUFNTSxhQUFhLEdBQUdOLE9BQU8sQ0FBQyxxQkFBRCxDQUE3Qjs7QUFDQSxNQUFNTyxZQUFZLEdBQUdQLE9BQU8sQ0FBQyxjQUFELENBQTVCOztBQUNBLE1BQU07QUFBRVEsRUFBQUE7QUFBRixJQUFjUixPQUFPLENBQUMsU0FBRCxDQUEzQixDLENBRUE7OztBQUNBLE1BQU1TLElBQUksR0FBRyxDQUNYLFVBRFcsRUFFWCxrQkFGVyxFQUdYLGdCQUhXLEVBSVgsUUFKVyxFQUtYLE1BTFcsRUFNWCxPQU5XLEVBT1gsS0FQVyxFQVFYLEtBUlcsRUFTWCxtQkFUVyxFQVVYLG9CQVZXLEVBV1gsYUFYVyxFQVlYLFFBWlcsRUFhWCxTQWJXLEVBY1gsTUFkVyxFQWVYLE1BZlcsRUFnQlgsU0FoQlcsRUFpQlgsTUFqQlcsRUFrQlgsUUFsQlcsRUFtQlgsU0FuQlcsRUFvQlgsTUFwQlcsRUFxQlgsT0FyQlcsRUFzQlgsUUF0QlcsRUF1QlgsV0F2QlcsRUF3QlgsV0F4QlcsRUF5QlgsVUF6QlcsRUEwQlgsV0ExQlcsRUEyQlgsU0EzQlcsRUE0QlgsWUE1QlcsRUE2QlgsV0E3QlcsRUE4QlgsV0E5QlcsRUErQlgsZUEvQlcsRUFnQ1gsY0FoQ1csRUFpQ1gsZ0JBakNXLEVBa0NYLGFBbENXLEVBbUNYLFVBbkNXLEVBb0NYLFFBcENXLEVBcUNYLFVBckNXLEVBc0NYLGNBdENXLEVBdUNYLE1BdkNXLEVBd0NYLEtBeENXLEVBeUNYLE1BekNXLEVBMENYLE1BMUNXLEVBMkNYLEtBM0NXLEVBNENYLFVBNUNXLEVBNkNYLE1BN0NXLENBQWI7O0FBZ0RBLE1BQU1DLElBQU4sQ0FBVztBQUNUQyxFQUFBQSxXQUFXLENBQUNDLE1BQU0sR0FBRyxFQUFWLEVBQWM7QUFDdkIsU0FBS0MsUUFBTCxHQUFnQjtBQUNkQyxNQUFBQSxHQUFHLEVBQUVDLE9BQU8sQ0FBQ0MsR0FBUixDQUFZQyxRQUFaLElBQXdCLEVBRGY7QUFFZEMsTUFBQUEsT0FBTyxFQUNMSCxPQUFPLENBQUNDLEdBQVIsQ0FBWUcsSUFBWixLQUFxQixNQUFyQixHQUNJLHVCQURKLEdBRUkscUJBTFE7QUFNZCxTQUFHUDtBQU5XLEtBQWhCO0FBU0EsU0FBS1EsS0FBTCxHQUFhLElBQUlsQixPQUFKLENBQVk7QUFDdkJnQixNQUFBQSxPQUFPLEVBQUUsS0FBS0wsUUFBTCxDQUFjSyxPQURBO0FBRXZCRyxNQUFBQSxPQUFPLEVBQUU7QUFDUEMsUUFBQUEsTUFBTSxFQUFFO0FBREQ7QUFGYyxLQUFaLENBQWI7QUFPQSxRQUFJLEtBQUtULFFBQUwsQ0FBY0MsR0FBbEIsRUFBdUIsS0FBS00sS0FBTCxDQUFXRyxJQUFYLENBQWdCLEtBQUtWLFFBQUwsQ0FBY0MsR0FBOUI7QUFFdkIsU0FBS1UsT0FBTCxHQUFlLEVBQWY7QUFFQSxTQUFLQyxVQUFMLEdBQWtCbEIsWUFBWSxDQUFDbUIsV0FBYixDQUF5QixLQUFLRCxVQUE5QixDQUFsQjtBQUNBLFNBQUtFLFFBQUwsR0FBZ0JwQixZQUFZLENBQUNtQixXQUFiLENBQXlCLEtBQUtDLFFBQTlCLENBQWhCO0FBQ0EsU0FBS0MsVUFBTCxHQUFrQnJCLFlBQVksQ0FBQ21CLFdBQWIsQ0FBeUIsS0FBS0UsVUFBOUIsQ0FBbEIsQ0F2QnVCLENBeUJ2Qjs7QUFDQSxXQUFRQyxLQUFELElBQVc7QUFDaEIsV0FBS0MsT0FBTCxHQUFlRCxLQUFmO0FBQ0EsYUFBTyxJQUFQO0FBQ0QsS0FIRDtBQUtBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUF3QkQ7O0FBRUQsUUFBTUosVUFBTixHQUFtQjtBQUNqQixVQUFNTSxJQUFJLEdBQUcsSUFBSTlCLFFBQUosRUFBYjtBQUNBLFFBQUlFLFNBQVMsQ0FBQyxLQUFLMkIsT0FBTixDQUFiLEVBQ0VDLElBQUksQ0FBQ0MsTUFBTCxDQUFZLE9BQVosRUFBcUJqQyxFQUFFLENBQUNrQyxnQkFBSCxDQUFvQixLQUFLSCxPQUF6QixDQUFyQixFQURGLEtBRUssSUFBSTFCLFNBQVMsQ0FBQyxLQUFLMEIsT0FBTixDQUFiLEVBQTZCQyxJQUFJLENBQUNDLE1BQUwsQ0FBWSxPQUFaLEVBQXFCLEtBQUtGLE9BQTFCLEVBQTdCLEtBQ0EsSUFBSXpCLFNBQVMsQ0FBQyxLQUFLeUIsT0FBTixDQUFiLEVBQ0hDLElBQUksQ0FBQ0MsTUFBTCxDQUFZLFNBQVosRUFBdUIxQixhQUFhLENBQUMsS0FBS3dCLE9BQU4sQ0FBcEM7QUFDRkMsSUFBQUEsSUFBSSxDQUFDQyxNQUFMLENBQVksT0FBWixFQUFxQjFCLGFBQWEsQ0FBQyxLQUFLa0IsT0FBTixDQUFsQztBQUNBLFNBQUtBLE9BQUwsR0FBZSxFQUFmO0FBQ0EsVUFBTVUsUUFBUSxHQUFHLE1BQU0sS0FBS2QsS0FBTCxDQUFXZSxJQUFYLENBQWdCLEdBQWhCLEVBQXFCO0FBQUVKLE1BQUFBO0FBQUYsS0FBckIsQ0FBdkI7QUFDQSxRQUFJRyxRQUFRLENBQUNFLEdBQWIsRUFBa0IsTUFBTUYsUUFBUSxDQUFDRSxHQUFmO0FBQ2xCLFdBQU9GLFFBQVEsQ0FBQ0gsSUFBaEI7QUFDRDs7QUFFRCxRQUFNSixRQUFOLENBQWVVLE9BQWYsRUFBd0I7QUFDdEIsUUFBSSxDQUFDbEMsU0FBUyxDQUFDa0MsT0FBRCxDQUFkLEVBQXlCLE1BQU0sSUFBSUMsS0FBSixDQUFVLDJCQUFWLENBQU47QUFDekIsVUFBTVAsSUFBSSxHQUFHLElBQUk5QixRQUFKLEVBQWI7QUFDQSxRQUFJRSxTQUFTLENBQUMsS0FBSzJCLE9BQU4sQ0FBYixFQUNFQyxJQUFJLENBQUNDLE1BQUwsQ0FBWSxPQUFaLEVBQXFCakMsRUFBRSxDQUFDa0MsZ0JBQUgsQ0FBb0IsS0FBS0gsT0FBekIsQ0FBckIsRUFERixLQUVLLElBQUkxQixTQUFTLENBQUMsS0FBSzBCLE9BQU4sQ0FBYixFQUE2QkMsSUFBSSxDQUFDQyxNQUFMLENBQVksT0FBWixFQUFxQixLQUFLRixPQUExQixFQUE3QixLQUNBLElBQUl6QixTQUFTLENBQUMsS0FBS3lCLE9BQU4sQ0FBYixFQUNIQyxJQUFJLENBQUNDLE1BQUwsQ0FBWSxTQUFaLEVBQXVCMUIsYUFBYSxDQUFDLEtBQUt3QixPQUFOLENBQXBDO0FBQ0ZDLElBQUFBLElBQUksQ0FBQ0MsTUFBTCxDQUFZLE9BQVosRUFBcUIxQixhQUFhLENBQUMsS0FBS2tCLE9BQU4sQ0FBbEM7QUFDQSxTQUFLQSxPQUFMLEdBQWUsRUFBZjtBQUNBLFVBQU1VLFFBQVEsR0FBRyxNQUFNLEtBQUtkLEtBQUwsQ0FBV2UsSUFBWCxDQUFnQixHQUFoQixFQUFxQjtBQUFFSixNQUFBQSxJQUFGO0FBQVFRLE1BQUFBLEdBQUcsRUFBRTtBQUFiLEtBQXJCLENBQXZCO0FBQ0EsUUFBSUwsUUFBUSxDQUFDRSxHQUFiLEVBQWtCLE1BQU1GLFFBQVEsQ0FBQ0UsR0FBZjtBQUNsQixTQUFLSSxNQUFMLEdBQWM7QUFDWkMsTUFBQUEsTUFBTSxFQUFFUCxRQUFRLENBQUNiLE9BQVQsQ0FBaUJxQixHQUFqQixDQUFxQixnQkFBckIsQ0FESTtBQUVaQyxNQUFBQSxJQUFJLEVBQUVDLE1BQU0sQ0FBQ1YsUUFBUSxDQUFDYixPQUFULENBQWlCcUIsR0FBakIsQ0FBcUIsY0FBckIsQ0FBRCxDQUZBO0FBR1pHLE1BQUFBLEtBQUssRUFBRUQsTUFBTSxDQUFDVixRQUFRLENBQUNiLE9BQVQsQ0FBaUJxQixHQUFqQixDQUFxQixlQUFyQixDQUFELENBSEQ7QUFJWkksTUFBQUEsTUFBTSxFQUFFRixNQUFNLENBQUNWLFFBQVEsQ0FBQ2IsT0FBVCxDQUFpQnFCLEdBQWpCLENBQXFCLGdCQUFyQixDQUFELENBSkY7QUFLWkssTUFBQUEsUUFBUSxFQUFFSCxNQUFNLENBQUNWLFFBQVEsQ0FBQ2IsT0FBVCxDQUFpQnFCLEdBQWpCLENBQXFCLGtCQUFyQixDQUFELENBTEo7QUFNWk0sTUFBQUEsYUFBYSxFQUFFeEMsT0FBTyxDQUFDMEIsUUFBUSxDQUFDYixPQUFULENBQWlCcUIsR0FBakIsQ0FBcUIsb0JBQXJCLENBQUQ7QUFOVixLQUFkO0FBUUEsVUFBTU8sTUFBTSxHQUFHbEQsRUFBRSxDQUFDbUQsaUJBQUgsQ0FBcUJiLE9BQXJCLENBQWYsQ0FwQnNCLENBcUJ0QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFDQSxVQUFNYyxPQUFPLEdBQUcsSUFBSUMsT0FBSixDQUFZLENBQUNDLE9BQUQsRUFBVUMsTUFBVixLQUFxQjtBQUMvQ0wsTUFBQUEsTUFBTSxDQUFDTSxFQUFQLENBQVUsT0FBVixFQUFtQkQsTUFBbkIsRUFBMkJDLEVBQTNCLENBQThCLFFBQTlCLEVBQXdDLE1BQU07QUFDNUNGLFFBQUFBLE9BQU8sQ0FBQyxLQUFLYixNQUFOLENBQVA7QUFDRCxPQUZEO0FBR0FOLE1BQUFBLFFBQVEsQ0FBQ0gsSUFBVCxDQUFjd0IsRUFBZCxDQUFpQixPQUFqQixFQUEwQkQsTUFBMUIsRUFBa0NFLElBQWxDLENBQXVDUCxNQUF2QztBQUNELEtBTGUsQ0FBaEI7QUFNQSxXQUFPRSxPQUFQO0FBQ0Q7O0FBRUQsUUFBTXZCLFVBQU4sQ0FBaUI2QixPQUFPLEdBQUcsRUFBM0IsRUFBK0I7QUFDN0IsVUFBTTFCLElBQUksR0FBRyxJQUFJOUIsUUFBSixFQUFiO0FBQ0EsUUFBSUUsU0FBUyxDQUFDLEtBQUsyQixPQUFOLENBQWIsRUFDRUMsSUFBSSxDQUFDQyxNQUFMLENBQVksT0FBWixFQUFxQmpDLEVBQUUsQ0FBQ2tDLGdCQUFILENBQW9CLEtBQUtILE9BQXpCLENBQXJCLEVBREYsS0FFSyxJQUFJMUIsU0FBUyxDQUFDLEtBQUswQixPQUFOLENBQWIsRUFBNkJDLElBQUksQ0FBQ0MsTUFBTCxDQUFZLE9BQVosRUFBcUIsS0FBS0YsT0FBMUIsRUFBN0IsS0FDQSxJQUFJekIsU0FBUyxDQUFDLEtBQUt5QixPQUFOLENBQWIsRUFDSEMsSUFBSSxDQUFDQyxNQUFMLENBQVksU0FBWixFQUF1QjFCLGFBQWEsQ0FBQyxLQUFLd0IsT0FBTixDQUFwQztBQUNGQyxJQUFBQSxJQUFJLENBQUNDLE1BQUwsQ0FBWSxPQUFaLEVBQXFCMUIsYUFBYSxDQUFDLEtBQUtrQixPQUFOLENBQWxDO0FBQ0EsU0FBS0EsT0FBTCxHQUFlLEVBQWY7QUFDQSxVQUFNVSxRQUFRLEdBQUcsTUFBTSxLQUFLZCxLQUFMLENBQVdlLElBQVgsQ0FBZ0IsR0FBaEIsRUFBcUI7QUFBRUosTUFBQUEsSUFBRjtBQUFRUSxNQUFBQSxHQUFHLEVBQUU7QUFBYixLQUFyQixDQUF2QjtBQUNBLFFBQUlMLFFBQVEsQ0FBQ0UsR0FBYixFQUFrQixNQUFNRixRQUFRLENBQUNFLEdBQWY7QUFDbEIsU0FBS0ksTUFBTCxHQUFjO0FBQ1pDLE1BQUFBLE1BQU0sRUFBRVAsUUFBUSxDQUFDYixPQUFULENBQWlCcUIsR0FBakIsQ0FBcUIsZ0JBQXJCLENBREk7QUFFWkMsTUFBQUEsSUFBSSxFQUFFQyxNQUFNLENBQUNWLFFBQVEsQ0FBQ2IsT0FBVCxDQUFpQnFCLEdBQWpCLENBQXFCLGNBQXJCLENBQUQsQ0FGQTtBQUdaRyxNQUFBQSxLQUFLLEVBQUVELE1BQU0sQ0FBQ1YsUUFBUSxDQUFDYixPQUFULENBQWlCcUIsR0FBakIsQ0FBcUIsZUFBckIsQ0FBRCxDQUhEO0FBSVpJLE1BQUFBLE1BQU0sRUFBRUYsTUFBTSxDQUFDVixRQUFRLENBQUNiLE9BQVQsQ0FBaUJxQixHQUFqQixDQUFxQixnQkFBckIsQ0FBRCxDQUpGO0FBS1pLLE1BQUFBLFFBQVEsRUFBRUgsTUFBTSxDQUFDVixRQUFRLENBQUNiLE9BQVQsQ0FBaUJxQixHQUFqQixDQUFxQixrQkFBckIsQ0FBRCxDQUxKO0FBTVpNLE1BQUFBLGFBQWEsRUFBRXhDLE9BQU8sQ0FBQzBCLFFBQVEsQ0FBQ2IsT0FBVCxDQUFpQnFCLEdBQWpCLENBQXFCLG9CQUFyQixDQUFEO0FBTlYsS0FBZDtBQVFBLFVBQU1nQixJQUFJLEdBQUcsTUFBTXhCLFFBQVEsQ0FBQ3lCLE1BQVQsRUFBbkI7QUFDQSxRQUFJdEQsU0FBUyxDQUFDb0QsT0FBRCxDQUFULElBQXNCakQsT0FBTyxDQUFDaUQsT0FBTyxDQUFDRyxpQkFBVCxDQUFqQyxFQUNFLE9BQU87QUFBRUYsTUFBQUEsSUFBRjtBQUFRRyxNQUFBQSxJQUFJLEVBQUUsS0FBS3JCO0FBQW5CLEtBQVA7QUFDRixXQUFPa0IsSUFBUDtBQUNEOztBQUVESSxFQUFBQSxLQUFLLEdBQUc7QUFDTixXQUFPLElBQUlwRCxJQUFKLENBQVMsRUFBRSxHQUFHLEtBQUtHO0FBQVYsS0FBVCxFQUErQixLQUFLaUIsT0FBcEMsQ0FBUDtBQUNEOztBQXhJUTs7QUEySVgsS0FBSyxNQUFNaEIsR0FBWCxJQUFrQkwsSUFBbEIsRUFBd0I7QUFDdEJDLEVBQUFBLElBQUksQ0FBQ3FELFNBQUwsQ0FBZWpELEdBQWYsSUFBc0IsVUFBVSxHQUFHa0QsSUFBYixFQUFtQjtBQUN2QyxRQUFJLENBQUMsQ0FBQyxRQUFELEVBQVcsVUFBWCxFQUF1QixVQUF2QixFQUFtQ0MsUUFBbkMsQ0FBNENuRCxHQUE1QyxDQUFMLEVBQXVEO0FBQ3JELFdBQUtVLE9BQUwsQ0FBYTBDLElBQWIsQ0FBa0IsQ0FBQ3BELEdBQUQsRUFBTXFELE1BQU4sQ0FBYUgsSUFBYixDQUFsQjs7QUFDQSxhQUFPLElBQVA7QUFDRDs7QUFFRCxRQUFJbEQsR0FBRyxLQUFLLFVBQVosRUFBd0I7QUFDdEIsV0FBS1UsT0FBTCxDQUFhMEMsSUFBYixDQUFrQixDQUFDLFVBQUQsQ0FBbEI7O0FBQ0EsYUFBTyxLQUFLekMsVUFBTCxDQUFnQixHQUFHdUMsSUFBbkIsQ0FBUDtBQUNEOztBQUVELFFBQUlsRCxHQUFHLEtBQUssUUFBWixFQUFzQixPQUFPLEtBQUthLFFBQUwsQ0FBYyxHQUFHcUMsSUFBakIsQ0FBUDtBQUN0QixXQUFPLEtBQUtwQyxVQUFMLENBQWdCLEdBQUdvQyxJQUFuQixDQUFQO0FBQ0QsR0FiRDtBQWNEOztBQUVELFNBQVNJLElBQVQsQ0FBY3hELE1BQWQsRUFBc0I7QUFDcEIsU0FBTyxJQUFJRixJQUFKLENBQVNFLE1BQVQsQ0FBUDtBQUNELEMsQ0FFRDtBQUNBO0FBRUE7OztBQUNBd0QsSUFBSSxDQUFDQyxPQUFMLEdBQWU7QUFDYkMsRUFBQUEsTUFBTSxFQUFFLENBREs7QUFFYkMsRUFBQUEsTUFBTSxFQUFFLENBRks7QUFHYkMsRUFBQUEsS0FBSyxFQUFFLENBSE07QUFJYkMsRUFBQUEsSUFBSSxFQUFFLENBSk87QUFLYkMsRUFBQUEsS0FBSyxFQUFFLENBTE07QUFNYkMsRUFBQUEsSUFBSSxFQUFFLENBTk87QUFPYkMsRUFBQUEsU0FBUyxFQUFFLENBUEU7QUFRYkMsRUFBQUEsU0FBUyxFQUFFLENBUkU7QUFTYkMsRUFBQUEsU0FBUyxFQUFFLENBVEU7QUFVYkMsRUFBQUEsU0FBUyxFQUFFO0FBVkUsQ0FBZixDLENBYUE7O0FBQ0FYLElBQUksQ0FBQ1ksUUFBTCxHQUFnQjtBQUNkQyxFQUFBQSxHQUFHLEVBQUUsQ0FEUztBQUVkQyxFQUFBQSxLQUFLLEVBQUUsQ0FGTztBQUdkQyxFQUFBQSxNQUFNLEVBQUUsQ0FITTtBQUlkQyxFQUFBQSxJQUFJLEVBQUUsQ0FKUTtBQUtkLGVBQWEsQ0FMQztBQU1kLGtCQUFnQixDQU5GO0FBT2QsaUJBQWUsQ0FQRDtBQVFkLGNBQVk7QUFSRSxDQUFoQixDLENBV0E7O0FBQ0FoQixJQUFJLENBQUNpQixRQUFMLEdBQWdCO0FBQ2RDLEVBQUFBLE9BQU8sRUFBRSxFQURLO0FBRWRDLEVBQUFBLFNBQVMsRUFBRTtBQUZHLENBQWhCLEMsQ0FLQTs7QUFDQW5CLElBQUksQ0FBQ29CLE1BQUwsR0FBYztBQUNaQyxFQUFBQSxPQUFPLEVBQUUsU0FERztBQUVaQyxFQUFBQSxLQUFLLEVBQUUsT0FGSztBQUdaQyxFQUFBQSxRQUFRLEVBQUUsVUFIRTtBQUlaQyxFQUFBQSxRQUFRLEVBQUU7QUFKRSxDQUFkLEMsQ0FPQTs7QUFDQXhCLElBQUksQ0FBQ3lCLEdBQUwsR0FBVztBQUNUQyxFQUFBQSxPQUFPLEVBQUUsU0FEQTtBQUVUQyxFQUFBQSxLQUFLLEVBQUUsT0FGRTtBQUdUQyxFQUFBQSxJQUFJLEVBQUUsTUFIRztBQUlUQyxFQUFBQSxNQUFNLEVBQUUsUUFKQztBQUtUQyxFQUFBQSxPQUFPLEVBQUU7QUFMQSxDQUFYO0FBUUFDLE1BQU0sQ0FBQ0MsT0FBUCxHQUFpQmhDLElBQWpCIiwic291cmNlc0NvbnRlbnQiOlsiY29uc3QgZnMgPSByZXF1aXJlKCdmcycpO1xuXG5jb25zdCBGb3JtRGF0YSA9IHJlcXVpcmUoJ2Zvcm0tZGF0YScpO1xuY29uc3QgRnJpc2JlZSA9IHJlcXVpcmUoJ2ZyaXNiZWUnKTtcbmNvbnN0IF9pc1N0cmluZyA9IHJlcXVpcmUoJ2xvZGFzaC5pc3N0cmluZycpO1xuY29uc3QgX2lzQnVmZmVyID0gcmVxdWlyZSgnbG9kYXNoLmlzYnVmZmVyJyk7XG5jb25zdCBfaXNPYmplY3QgPSByZXF1aXJlKCdsb2Rhc2guaXNvYmplY3QnKTtcbmNvbnN0IHNhZmVTdHJpbmdpZnkgPSByZXF1aXJlKCdmYXN0LXNhZmUtc3RyaW5naWZ5Jyk7XG5jb25zdCB1bml2ZXJzYWxpZnkgPSByZXF1aXJlKCd1bml2ZXJzYWxpZnknKTtcbmNvbnN0IHsgYm9vbGVhbiB9ID0gcmVxdWlyZSgnYm9vbGVhbicpO1xuXG4vLyBPYmplY3Qua2V5cyhyZXF1aXJlKCdzaGFycCcpLnByb3RvdHlwZSkuZmlsdGVyKGtleSA9PiAha2V5LnN0YXJ0c1dpdGgoJ18nKSlcbmNvbnN0IGtleXMgPSBbXG4gICdtZXRhZGF0YScsXG4gICdsaW1pdElucHV0UGl4ZWxzJyxcbiAgJ3NlcXVlbnRpYWxSZWFkJyxcbiAgJ3Jlc2l6ZScsXG4gICdjcm9wJyxcbiAgJ2VtYmVkJyxcbiAgJ21heCcsXG4gICdtaW4nLFxuICAnaWdub3JlQXNwZWN0UmF0aW8nLFxuICAnd2l0aG91dEVubGFyZ2VtZW50JyxcbiAgJ292ZXJsYXlXaXRoJyxcbiAgJ3JvdGF0ZScsXG4gICdleHRyYWN0JyxcbiAgJ2ZsaXAnLFxuICAnZmxvcCcsXG4gICdzaGFycGVuJyxcbiAgJ2JsdXInLFxuICAnZXh0ZW5kJyxcbiAgJ2ZsYXR0ZW4nLFxuICAndHJpbScsXG4gICdnYW1tYScsXG4gICduZWdhdGUnLFxuICAnbm9ybWFsaXNlJyxcbiAgJ25vcm1hbGl6ZScsXG4gICdjb252b2x2ZScsXG4gICd0aHJlc2hvbGQnLFxuICAnYm9vbGVhbicsXG4gICdiYWNrZ3JvdW5kJyxcbiAgJ2dyZXlzY2FsZScsXG4gICdncmF5c2NhbGUnLFxuICAndG9Db2xvdXJzcGFjZScsXG4gICd0b0NvbG9yc3BhY2UnLFxuICAnZXh0cmFjdENoYW5uZWwnLFxuICAnam9pbkNoYW5uZWwnLFxuICAnYmFuZGJvb2wnLFxuICAndG9GaWxlJyxcbiAgJ3RvQnVmZmVyJyxcbiAgJ3dpdGhNZXRhZGF0YScsXG4gICdqcGVnJyxcbiAgJ3BuZycsXG4gICd3ZWJwJyxcbiAgJ3RpZmYnLFxuICAncmF3JyxcbiAgJ3RvRm9ybWF0JyxcbiAgJ3RpbGUnXG5dO1xuXG5jbGFzcyBMaXBvIHtcbiAgY29uc3RydWN0b3IoY29uZmlnID0ge30pIHtcbiAgICB0aGlzLl9fY29uZmlnID0ge1xuICAgICAga2V5OiBwcm9jZXNzLmVudi5MSVBPX0tFWSB8fCAnJyxcbiAgICAgIGJhc2VVUkk6XG4gICAgICAgIHByb2Nlc3MuZW52LkxJUE8gPT09ICd0cnVlJ1xuICAgICAgICAgID8gJ2h0dHA6Ly9sb2NhbGhvc3Q6MzAwMCdcbiAgICAgICAgICA6ICdodHRwczovL2FwaS5saXBvLmlvJyxcbiAgICAgIC4uLmNvbmZpZ1xuICAgIH07XG5cbiAgICB0aGlzLl9fYXBpID0gbmV3IEZyaXNiZWUoe1xuICAgICAgYmFzZVVSSTogdGhpcy5fX2NvbmZpZy5iYXNlVVJJLFxuICAgICAgaGVhZGVyczoge1xuICAgICAgICBBY2NlcHQ6ICdhcHBsaWNhdGlvbi9qc29uJ1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgaWYgKHRoaXMuX19jb25maWcua2V5KSB0aGlzLl9fYXBpLmF1dGgodGhpcy5fX2NvbmZpZy5rZXkpO1xuXG4gICAgdGhpcy5fX3F1ZXVlID0gW107XG5cbiAgICB0aGlzLl9fbWV0YWRhdGEgPSB1bml2ZXJzYWxpZnkuZnJvbVByb21pc2UodGhpcy5fX21ldGFkYXRhKTtcbiAgICB0aGlzLl9fdG9GaWxlID0gdW5pdmVyc2FsaWZ5LmZyb21Qcm9taXNlKHRoaXMuX190b0ZpbGUpO1xuICAgIHRoaXMuX190b0J1ZmZlciA9IHVuaXZlcnNhbGlmeS5mcm9tUHJvbWlzZSh0aGlzLl9fdG9CdWZmZXIpO1xuXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnN0cnVjdG9yLXJldHVyblxuICAgIHJldHVybiAoaW5wdXQpID0+IHtcbiAgICAgIHRoaXMuX19pbnB1dCA9IGlucHV0O1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfTtcblxuICAgIC8qXG4gICAgLy8gPGh0dHBzOi8vZ2l0aHViLmNvbS9sb3ZlbGwvc2hhcnAvaXNzdWVzLzEwNDU+XG4gICAgcmV0dXJuIChpbnB1dCwgb3B0aW9ucyA9IHt9KSA9PiB7XG4gICAgICB0aGlzLl9faW5wdXQgPSBudWxsO1xuICAgICAgdGhpcy5fX29wdGlvbnMgPSB7fTtcbiAgICAgIC8vIGlucHV0ID0gQnVmZmVyIHwgU3RyaW5nXG4gICAgICAvLyBvcHRpb25zID0gT2JqZWN0XG4gICAgICAvLyAtIGRlbnNpdHkgKE51bWJlcilcbiAgICAgIC8vIC0gcmF3IChPYmplY3QpXG4gICAgICAvLyAgIC0gd2lkdGggKE51bWJlcilcbiAgICAgIC8vICAgLSBoZWlnaHQgKE51bWJlcilcbiAgICAgIC8vICAgLSBjaGFubmVscyAoTnVtYmVyOyAxLTQpXG4gICAgICAvLyAtIGNyZWF0ZSAoT2JqZWN0KVxuICAgICAgLy8gICAtIHdpZHRoIChOdW1iZXIpXG4gICAgICAvLyAgIC0gaGVpZ2h0IChOdW1iZXIpXG4gICAgICAvLyAgIC0gY2hhbm5lbHMgKE51bWJlcjsgMy00KVxuICAgICAgLy8gICAtIGJhY2tncm91bmQgKFN0cmluZyB8IE9iamVjdClcbiAgICAgIGlmIChfaXNTdHJpbmcoaW5wdXQpIHx8IF9pc0J1ZmZlcihpbnB1dCkpIHRoaXMuX19pbnB1dCA9IGlucHV0O1xuICAgICAgZWxzZSBpZiAoX2lzT2JqZWN0KHRoaXMuX19pbnB1dCkpIHRoaXMuX19vcHRpb25zID0gaW5wdXQ7XG4gICAgICBpZiAoIV9pc09iamVjdCh0aGlzLl9faW5wdXQpICYmIF9pc09iamVjdChvcHRpb25zKSlcbiAgICAgICAgdGhpcy5fb3B0aW9ucyA9IG9wdGlvbnM7XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9O1xuICAgICovXG4gIH1cblxuICBhc3luYyBfX21ldGFkYXRhKCkge1xuICAgIGNvbnN0IGJvZHkgPSBuZXcgRm9ybURhdGEoKTtcbiAgICBpZiAoX2lzU3RyaW5nKHRoaXMuX19pbnB1dCkpXG4gICAgICBib2R5LmFwcGVuZCgnaW5wdXQnLCBmcy5jcmVhdGVSZWFkU3RyZWFtKHRoaXMuX19pbnB1dCkpO1xuICAgIGVsc2UgaWYgKF9pc0J1ZmZlcih0aGlzLl9faW5wdXQpKSBib2R5LmFwcGVuZCgnaW5wdXQnLCB0aGlzLl9faW5wdXQpO1xuICAgIGVsc2UgaWYgKF9pc09iamVjdCh0aGlzLl9faW5wdXQpKVxuICAgICAgYm9keS5hcHBlbmQoJ29wdGlvbnMnLCBzYWZlU3RyaW5naWZ5KHRoaXMuX19pbnB1dCkpO1xuICAgIGJvZHkuYXBwZW5kKCdxdWV1ZScsIHNhZmVTdHJpbmdpZnkodGhpcy5fX3F1ZXVlKSk7XG4gICAgdGhpcy5fX3F1ZXVlID0gW107XG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLl9fYXBpLnBvc3QoJy8nLCB7IGJvZHkgfSk7XG4gICAgaWYgKHJlc3BvbnNlLmVycikgdGhyb3cgcmVzcG9uc2UuZXJyO1xuICAgIHJldHVybiByZXNwb25zZS5ib2R5O1xuICB9XG5cbiAgYXN5bmMgX190b0ZpbGUoZmlsZU91dCkge1xuICAgIGlmICghX2lzU3RyaW5nKGZpbGVPdXQpKSB0aHJvdyBuZXcgRXJyb3IoJ0ZpbGUgb3V0cHV0IHBhdGggcmVxdWlyZWQnKTtcbiAgICBjb25zdCBib2R5ID0gbmV3IEZvcm1EYXRhKCk7XG4gICAgaWYgKF9pc1N0cmluZyh0aGlzLl9faW5wdXQpKVxuICAgICAgYm9keS5hcHBlbmQoJ2lucHV0JywgZnMuY3JlYXRlUmVhZFN0cmVhbSh0aGlzLl9faW5wdXQpKTtcbiAgICBlbHNlIGlmIChfaXNCdWZmZXIodGhpcy5fX2lucHV0KSkgYm9keS5hcHBlbmQoJ2lucHV0JywgdGhpcy5fX2lucHV0KTtcbiAgICBlbHNlIGlmIChfaXNPYmplY3QodGhpcy5fX2lucHV0KSlcbiAgICAgIGJvZHkuYXBwZW5kKCdvcHRpb25zJywgc2FmZVN0cmluZ2lmeSh0aGlzLl9faW5wdXQpKTtcbiAgICBib2R5LmFwcGVuZCgncXVldWUnLCBzYWZlU3RyaW5naWZ5KHRoaXMuX19xdWV1ZSkpO1xuICAgIHRoaXMuX19xdWV1ZSA9IFtdO1xuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5fX2FwaS5wb3N0KCcvJywgeyBib2R5LCByYXc6IHRydWUgfSk7XG4gICAgaWYgKHJlc3BvbnNlLmVycikgdGhyb3cgcmVzcG9uc2UuZXJyO1xuICAgIHRoaXMuX19pbmZvID0ge1xuICAgICAgZm9ybWF0OiByZXNwb25zZS5oZWFkZXJzLmdldCgneC1zaGFycC1mb3JtYXQnKSxcbiAgICAgIHNpemU6IE51bWJlcihyZXNwb25zZS5oZWFkZXJzLmdldCgneC1zaGFycC1zaXplJykpLFxuICAgICAgd2lkdGg6IE51bWJlcihyZXNwb25zZS5oZWFkZXJzLmdldCgneC1zaGFycC13aWR0aCcpKSxcbiAgICAgIGhlaWdodDogTnVtYmVyKHJlc3BvbnNlLmhlYWRlcnMuZ2V0KCd4LXNoYXJwLWhlaWdodCcpKSxcbiAgICAgIGNoYW5uZWxzOiBOdW1iZXIocmVzcG9uc2UuaGVhZGVycy5nZXQoJ3gtc2hhcnAtY2hhbm5lbHMnKSksXG4gICAgICBwcmVtdWx0aXBsaWVkOiBib29sZWFuKHJlc3BvbnNlLmhlYWRlcnMuZ2V0KCd4LXNoYXJwLW11bHRpcGxpZWQnKSlcbiAgICB9O1xuICAgIGNvbnN0IHN0cmVhbSA9IGZzLmNyZWF0ZVdyaXRlU3RyZWFtKGZpbGVPdXQpO1xuICAgIC8vIGxldCB0aW1lcjtcbiAgICAvLyBzdHJlYW0ub24oJ29wZW4nLCAoKSA9PiB7XG4gICAgLy8gICB0aW1lciA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgIC8vICAgICBzdHJlYW0uY2xvc2UoKTtcbiAgICAvLyAgICAgcmVqZWN0KG5ldyBFcnJvcignVGltZWQgb3V0IHdoaWxlIHdyaXRpbmcgZmlsZScpKTtcbiAgICAvLyAgIH0sIDEwMDAwKTtcbiAgICAvLyB9KTtcbiAgICBjb25zdCBwcm9taXNlID0gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgc3RyZWFtLm9uKCdlcnJvcicsIHJlamVjdCkub24oJ2ZpbmlzaCcsICgpID0+IHtcbiAgICAgICAgcmVzb2x2ZSh0aGlzLl9faW5mbyk7XG4gICAgICB9KTtcbiAgICAgIHJlc3BvbnNlLmJvZHkub24oJ2Vycm9yJywgcmVqZWN0KS5waXBlKHN0cmVhbSk7XG4gICAgfSk7XG4gICAgcmV0dXJuIHByb21pc2U7XG4gIH1cblxuICBhc3luYyBfX3RvQnVmZmVyKG9wdGlvbnMgPSB7fSkge1xuICAgIGNvbnN0IGJvZHkgPSBuZXcgRm9ybURhdGEoKTtcbiAgICBpZiAoX2lzU3RyaW5nKHRoaXMuX19pbnB1dCkpXG4gICAgICBib2R5LmFwcGVuZCgnaW5wdXQnLCBmcy5jcmVhdGVSZWFkU3RyZWFtKHRoaXMuX19pbnB1dCkpO1xuICAgIGVsc2UgaWYgKF9pc0J1ZmZlcih0aGlzLl9faW5wdXQpKSBib2R5LmFwcGVuZCgnaW5wdXQnLCB0aGlzLl9faW5wdXQpO1xuICAgIGVsc2UgaWYgKF9pc09iamVjdCh0aGlzLl9faW5wdXQpKVxuICAgICAgYm9keS5hcHBlbmQoJ29wdGlvbnMnLCBzYWZlU3RyaW5naWZ5KHRoaXMuX19pbnB1dCkpO1xuICAgIGJvZHkuYXBwZW5kKCdxdWV1ZScsIHNhZmVTdHJpbmdpZnkodGhpcy5fX3F1ZXVlKSk7XG4gICAgdGhpcy5fX3F1ZXVlID0gW107XG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLl9fYXBpLnBvc3QoJy8nLCB7IGJvZHksIHJhdzogdHJ1ZSB9KTtcbiAgICBpZiAocmVzcG9uc2UuZXJyKSB0aHJvdyByZXNwb25zZS5lcnI7XG4gICAgdGhpcy5fX2luZm8gPSB7XG4gICAgICBmb3JtYXQ6IHJlc3BvbnNlLmhlYWRlcnMuZ2V0KCd4LXNoYXJwLWZvcm1hdCcpLFxuICAgICAgc2l6ZTogTnVtYmVyKHJlc3BvbnNlLmhlYWRlcnMuZ2V0KCd4LXNoYXJwLXNpemUnKSksXG4gICAgICB3aWR0aDogTnVtYmVyKHJlc3BvbnNlLmhlYWRlcnMuZ2V0KCd4LXNoYXJwLXdpZHRoJykpLFxuICAgICAgaGVpZ2h0OiBOdW1iZXIocmVzcG9uc2UuaGVhZGVycy5nZXQoJ3gtc2hhcnAtaGVpZ2h0JykpLFxuICAgICAgY2hhbm5lbHM6IE51bWJlcihyZXNwb25zZS5oZWFkZXJzLmdldCgneC1zaGFycC1jaGFubmVscycpKSxcbiAgICAgIHByZW11bHRpcGxpZWQ6IGJvb2xlYW4ocmVzcG9uc2UuaGVhZGVycy5nZXQoJ3gtc2hhcnAtbXVsdGlwbGllZCcpKVxuICAgIH07XG4gICAgY29uc3QgZGF0YSA9IGF3YWl0IHJlc3BvbnNlLmJ1ZmZlcigpO1xuICAgIGlmIChfaXNPYmplY3Qob3B0aW9ucykgJiYgYm9vbGVhbihvcHRpb25zLnJlc29sdmVXaXRoT2JqZWN0KSlcbiAgICAgIHJldHVybiB7IGRhdGEsIGluZm86IHRoaXMuX19pbmZvIH07XG4gICAgcmV0dXJuIGRhdGE7XG4gIH1cblxuICBjbG9uZSgpIHtcbiAgICByZXR1cm4gbmV3IExpcG8oeyAuLi50aGlzLl9fY29uZmlnIH0pKHRoaXMuX19pbnB1dCk7XG4gIH1cbn1cblxuZm9yIChjb25zdCBrZXkgb2Yga2V5cykge1xuICBMaXBvLnByb3RvdHlwZVtrZXldID0gZnVuY3Rpb24gKC4uLmFyZ3MpIHtcbiAgICBpZiAoIVsndG9GaWxlJywgJ3RvQnVmZmVyJywgJ21ldGFkYXRhJ10uaW5jbHVkZXMoa2V5KSkge1xuICAgICAgdGhpcy5fX3F1ZXVlLnB1c2goW2tleV0uY29uY2F0KGFyZ3MpKTtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIGlmIChrZXkgPT09ICdtZXRhZGF0YScpIHtcbiAgICAgIHRoaXMuX19xdWV1ZS5wdXNoKFsnbWV0YWRhdGEnXSk7XG4gICAgICByZXR1cm4gdGhpcy5fX21ldGFkYXRhKC4uLmFyZ3MpO1xuICAgIH1cblxuICAgIGlmIChrZXkgPT09ICd0b0ZpbGUnKSByZXR1cm4gdGhpcy5fX3RvRmlsZSguLi5hcmdzKTtcbiAgICByZXR1cm4gdGhpcy5fX3RvQnVmZmVyKC4uLmFyZ3MpO1xuICB9O1xufVxuXG5mdW5jdGlvbiBsaXBvKGNvbmZpZykge1xuICByZXR1cm4gbmV3IExpcG8oY29uZmlnKTtcbn1cblxuLy8gU291cmNlZCBmcm9tIGBsaWIvcmVzaXplLmpzYDpcbi8vIDxodHRwczovL2dpdGh1Yi5jb20vbG92ZWxsL3NoYXJwL2Jsb2IvbWFzdGVyL2xpYi9yZXNpemUuanM+XG5cbi8vIFdlaWdodGluZyB0byBhcHBseSB3aGVuIHVzaW5nIGNvbnRhaW4vY292ZXIgZml0LlxubGlwby5ncmF2aXR5ID0ge1xuICBjZW50ZXI6IDAsXG4gIGNlbnRyZTogMCxcbiAgbm9ydGg6IDEsXG4gIGVhc3Q6IDIsXG4gIHNvdXRoOiAzLFxuICB3ZXN0OiA0LFxuICBub3J0aGVhc3Q6IDUsXG4gIHNvdXRoZWFzdDogNixcbiAgc291dGh3ZXN0OiA3LFxuICBub3J0aHdlc3Q6IDhcbn07XG5cbi8vIFBvc2l0aW9uIHRvIGFwcGx5IHdoZW4gdXNpbmcgY29udGFpbi9jb3ZlciBmaXQuXG5saXBvLnBvc2l0aW9uID0ge1xuICB0b3A6IDEsXG4gIHJpZ2h0OiAyLFxuICBib3R0b206IDMsXG4gIGxlZnQ6IDQsXG4gICdyaWdodCB0b3AnOiA1LFxuICAncmlnaHQgYm90dG9tJzogNixcbiAgJ2xlZnQgYm90dG9tJzogNyxcbiAgJ2xlZnQgdG9wJzogOFxufTtcblxuLy8gU3RyYXRlZ2llcyBmb3IgYXV0b21hZ2ljIGNvdmVyIGJlaGF2aW91ci5cbmxpcG8uc3RyYXRlZ3kgPSB7XG4gIGVudHJvcHk6IDE2LFxuICBhdHRlbnRpb246IDE3XG59O1xuXG4vLyBSZWR1Y3Rpb24ga2VybmVscy5cbmxpcG8ua2VybmVsID0ge1xuICBuZWFyZXN0OiAnbmVhcmVzdCcsXG4gIGN1YmljOiAnY3ViaWMnLFxuICBsYW5jem9zMjogJ2xhbmN6b3MyJyxcbiAgbGFuY3pvczM6ICdsYW5jem9zMydcbn07XG5cbi8vIE1ldGhvZHMgYnkgd2hpY2ggYW4gaW1hZ2UgY2FuIGJlIHJlc2l6ZWQgdG8gZml0IHRoZSBwcm92aWRlZCBkaW1lbnNpb25zLlxubGlwby5maXQgPSB7XG4gIGNvbnRhaW46ICdjb250YWluJyxcbiAgY292ZXI6ICdjb3ZlcicsXG4gIGZpbGw6ICdmaWxsJyxcbiAgaW5zaWRlOiAnaW5zaWRlJyxcbiAgb3V0c2lkZTogJ291dHNpZGUnXG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGxpcG87XG4iXX0= |
{ | ||
"name": "lipo", | ||
"description": "Free image manipulation API service built on top of Sharp (an alternative to Jimp, Graphics Magic, Image Magick, and PhantomJS)", | ||
"version": "1.0.1", | ||
"version": "2.0.0", | ||
"author": "Nick Baugh <niftylettuce@gmail.com> (http://niftylettuce.com/)", | ||
@@ -21,42 +21,46 @@ "ava": { | ||
"contributors": [ | ||
"Nick Baugh <niftylettuce@gmail.com> (http://niftylettuce.com/)" | ||
"Nick Baugh <niftylettuce@gmail.com> (http://niftylettuce.com/)", | ||
"Imed Jaberi <imed_jebari@hotmail.fr> (https://3imed-jaberi.com/)" | ||
], | ||
"dependencies": { | ||
"boolean": "^3.0.0", | ||
"boolean": "^3.0.1", | ||
"fast-safe-stringify": "^2.0.7", | ||
"form-data": "3.0.0", | ||
"frisbee": "^3.1.2", | ||
"lodash": "^4.17.15", | ||
"frisbee": "^3.1.4", | ||
"lodash.isbuffer": "^4.3.4", | ||
"lodash.isobject": "^3.0.2", | ||
"lodash.isstring": "^4.0.1", | ||
"universalify": "^0.1.2" | ||
}, | ||
"devDependencies": { | ||
"@babel/cli": "^7.7.4", | ||
"@babel/core": "^7.7.4", | ||
"@babel/preset-env": "^7.7.4", | ||
"@commitlint/cli": "^8.2.0", | ||
"@commitlint/config-conventional": "^8.2.0", | ||
"@koa/multer": "^2.0.1", | ||
"ava": "^2.4.0", | ||
"@babel/cli": "^7.10.4", | ||
"@babel/core": "^7.10.4", | ||
"@babel/preset-env": "^7.10.4", | ||
"@commitlint/cli": "^9.0.1", | ||
"@commitlint/config-conventional": "^9.0.1", | ||
"@koa/multer": "2.x", | ||
"ava": "^3.10.1", | ||
"bytes": "^3.1.0", | ||
"codecov": "^3.6.1", | ||
"cross-env": "^6.0.3", | ||
"codecov": "^3.7.0", | ||
"cross-env": "^7.0.2", | ||
"errorhandler": "^1.5.1", | ||
"eslint": "^6.7.1", | ||
"eslint": "^7.4.0", | ||
"eslint-config-xo-lass": "^1.0.3", | ||
"eslint-plugin-compat": "^3.3.0", | ||
"eslint-plugin-node": "^10.0.0", | ||
"eslint-plugin-compat": "^3.8.0", | ||
"eslint-plugin-node": "^11.1.0", | ||
"express": "^4.17.1", | ||
"husky": "^3.1.0", | ||
"koa": "^2.11.0", | ||
"koa-better-error-handler": "^3.0.3", | ||
"koa-bodyparser": "^4.2.1", | ||
"lint-staged": "^9.5.0", | ||
"lipo-express": "^0.0.4", | ||
"lipo-koa": "^0.1.3", | ||
"husky": "^4.2.5", | ||
"koa": "^2.13.0", | ||
"koa-better-error-handler": "^5.0.0", | ||
"koa-bodyparser": "^4.3.0", | ||
"lint-staged": "^10.2.11", | ||
"lipo-express": "^0.0.5", | ||
"lipo-koa": "^0.1.5", | ||
"multer": "^2.0.0-beta.1", | ||
"nyc": "^14.1.1", | ||
"remark-cli": "^7.0.1", | ||
"remark-preset-github": "^0.0.16", | ||
"uuid": "^3.3.3", | ||
"xo": "^0.25.3" | ||
"nyc": "^15.1.0", | ||
"remark-cli": "^8.0.0", | ||
"remark-preset-github": "^2.0.2", | ||
"rimraf": "^3.0.2", | ||
"uuid": "^8.2.0", | ||
"xo": "^0.32.1" | ||
}, | ||
@@ -139,11 +143,14 @@ "engines": { | ||
"scripts": { | ||
"ava": "cross-env NODE_ENV=test LIPO=true ava", | ||
"build": "node_modules/.bin/babel src --out-dir lib", | ||
"build": "babel src --out-dir lib", | ||
"coverage": "nyc report --reporter=text-lcov > coverage.lcov && codecov", | ||
"lint": "xo && remark . -qfo", | ||
"nyc": "cross-env NODE_ENV=test LIPO=true nyc ava", | ||
"lint": "npm run lint:c && npm run lint:md", | ||
"lint:c": "xo", | ||
"lint:md": "remark . -qfo", | ||
"postbuild": "npm run lint", | ||
"prebuild": "rimraf lib", | ||
"precommit": "lint-staged && npm test", | ||
"test": "npm run build && npm run lint && npm run ava", | ||
"test-coverage": "npm run build && npm run lint && npm run nyc", | ||
"watch": "node_modules/.bin/babel src --watch --out-dir lib" | ||
"pretest": "npm run build", | ||
"test": "cross-env NODE_ENV=test LIPO=true ava", | ||
"test-coverage": "cross-env NODE_ENV=test LIPO=true nyc test", | ||
"watch": "babel src --watch --out-dir lib" | ||
}, | ||
@@ -150,0 +157,0 @@ "xo": { |
@@ -5,3 +5,3 @@ <h1 align="center"> | ||
<div align="center"> | ||
<a href="https://slack.crocodilejs.com"><img src="https://slack.crocodilejs.com/badge.svg" alt="chat" /></a> | ||
<a href="https://join.slack.com/t/ladjs/shared_invite/zt-fqei6z11-Bq2trhwHQxVc5x~ifiZG0g"><img src="https://img.shields.io/badge/chat-join%20slack-brightgreen" alt="chat" /></a> | ||
<a href="https://travis-ci.org/lipojs/lipo"><img src="https://img.shields.io/travis/lipojs/lipo.svg" alt="build status" /></a> | ||
@@ -64,4 +64,3 @@ <a href="https://codecov.io/github/lipojs/lipo"><img src="https://img.shields.io/codecov/c/github/lipojs/lipo/master.svg" alt="code coverage" /></a> | ||
```js | ||
const Lipo = require('lipo'); | ||
const lipo = new Lipo(); | ||
const lipo = require('lipo'); | ||
lipo('input.jpg') | ||
@@ -81,4 +80,3 @@ .resize(300, 300) | ||
-const sharp = require('sharp'); | ||
+const Lipo = require('lipo'); | ||
+const lipo = new Lipo(); | ||
+const lipo = require('lipo'); | ||
-sharp('input.jpg') | ||
@@ -109,3 +107,3 @@ +lipo('input.jpg') | ||
Once you sign up for a key, you can pass it as `const lipo = new Lipo({ key: 'YOUR_API_KEY_HERE' });` or as an environment variable (e.g. `LIPO_KEY=YOUR_API_KEY_HERE node app.js`). | ||
Once you sign up for a key, you can pass it as `const lipo = require('lipo')({ key: 'YOUR_API_KEY_HERE' });` or as an environment variable (e.g. `LIPO_KEY=YOUR_API_KEY_HERE node app.js`). | ||
@@ -149,5 +147,6 @@ | ||
| Name | Website | | ||
| -------------- | -------------------------- | | ||
| **Nick Baugh** | <http://niftylettuce.com/> | | ||
| Name | Website | | ||
| --------------- | --------------------------- | | ||
| **Nick Baugh** | <http://niftylettuce.com/> | | ||
| **Imed Jaberi** | <https://3imed-jaberi.com/> | | ||
@@ -154,0 +153,0 @@ |
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
Major refactor
Supply chain riskPackage has recently undergone a major refactor. It may be unstable or indicate significant internal changes. Use caution when updating to versions that include significant changes.
Found 1 instance in 1 package
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
39943
195
8
30
198
1
+ Addedlodash.isbuffer@^4.3.4
+ Addedlodash.isobject@^3.0.2
+ Addedlodash.isstring@^4.0.1
+ Addedlodash.isbuffer@4.3.4(transitive)
+ Addedlodash.isobject@3.0.2(transitive)
+ Addedlodash.isstring@4.0.1(transitive)
- Removedlodash@^4.17.15
- Removedlodash@4.17.21(transitive)
Updatedboolean@^3.0.1
Updatedfrisbee@^3.1.4