UNPKG

browserfs

Version:

A filesystem in your browser!

113 lines 16.5 kB
"use strict"; var __extends = (this && this.__extends) || function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; function __() { this.constructor = d; } d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); }; (function (ErrorCode) { ErrorCode[ErrorCode["EPERM"] = 1] = "EPERM"; ErrorCode[ErrorCode["ENOENT"] = 2] = "ENOENT"; ErrorCode[ErrorCode["EIO"] = 5] = "EIO"; ErrorCode[ErrorCode["EBADF"] = 9] = "EBADF"; ErrorCode[ErrorCode["EACCES"] = 13] = "EACCES"; ErrorCode[ErrorCode["EBUSY"] = 16] = "EBUSY"; ErrorCode[ErrorCode["EEXIST"] = 17] = "EEXIST"; ErrorCode[ErrorCode["ENOTDIR"] = 20] = "ENOTDIR"; ErrorCode[ErrorCode["EISDIR"] = 21] = "EISDIR"; ErrorCode[ErrorCode["EINVAL"] = 22] = "EINVAL"; ErrorCode[ErrorCode["EFBIG"] = 27] = "EFBIG"; ErrorCode[ErrorCode["ENOSPC"] = 28] = "ENOSPC"; ErrorCode[ErrorCode["EROFS"] = 30] = "EROFS"; ErrorCode[ErrorCode["ENOTEMPTY"] = 39] = "ENOTEMPTY"; ErrorCode[ErrorCode["ENOTSUP"] = 95] = "ENOTSUP"; })(exports.ErrorCode || (exports.ErrorCode = {})); var ErrorCode = exports.ErrorCode; exports.ErrorStrings = {}; exports.ErrorStrings[ErrorCode.EPERM] = 'Operation not permitted.'; exports.ErrorStrings[ErrorCode.ENOENT] = 'No such file or directory.'; exports.ErrorStrings[ErrorCode.EIO] = 'Input/output error.'; exports.ErrorStrings[ErrorCode.EBADF] = 'Bad file descriptor.'; exports.ErrorStrings[ErrorCode.EACCES] = 'Permission denied.'; exports.ErrorStrings[ErrorCode.EBUSY] = 'Resource busy or locked.'; exports.ErrorStrings[ErrorCode.EEXIST] = 'File exists.'; exports.ErrorStrings[ErrorCode.ENOTDIR] = 'File is not a directory.'; exports.ErrorStrings[ErrorCode.EISDIR] = 'File is a directory.'; exports.ErrorStrings[ErrorCode.EINVAL] = 'Invalid argument.'; exports.ErrorStrings[ErrorCode.EFBIG] = 'File is too big.'; exports.ErrorStrings[ErrorCode.ENOSPC] = 'No space left on disk.'; exports.ErrorStrings[ErrorCode.EROFS] = 'Cannot modify a read-only file system.'; exports.ErrorStrings[ErrorCode.ENOTEMPTY] = 'Directory is not empty.'; exports.ErrorStrings[ErrorCode.ENOTSUP] = 'Operation is not supported.'; var ApiError = (function (_super) { __extends(ApiError, _super); function ApiError(type, message, path) { if (message === void 0) { message = exports.ErrorStrings[type]; } if (path === void 0) { path = null; } _super.call(this, message); this.syscall = ""; this.errno = type; this.code = ErrorCode[type]; this.path = path; this.stack = (new Error()).stack; this.message = "Error: " + this.code + ": " + message + (this.path ? ", '" + this.path + "'" : ''); } ApiError.prototype.toString = function () { return this.message; }; ApiError.prototype.toJSON = function () { return { errno: this.errno, code: this.code, path: this.path, stack: this.stack, message: this.message }; }; ApiError.fromJSON = function (json) { var err = new ApiError(0); err.errno = json.errno; err.code = json.code; err.path = json.path; err.stack = json.stack; err.message = json.message; return err; }; ApiError.prototype.writeToBuffer = function (buffer, i) { if (buffer === void 0) { buffer = new Buffer(this.bufferSize()); } if (i === void 0) { i = 0; } var bytesWritten = buffer.write(JSON.stringify(this.toJSON()), i + 4); buffer.writeUInt32LE(bytesWritten, i); return buffer; }; ApiError.fromBuffer = function (buffer, i) { if (i === void 0) { i = 0; } return ApiError.fromJSON(JSON.parse(buffer.toString('utf8', i + 4, i + 4 + buffer.readUInt32LE(i)))); }; ApiError.prototype.bufferSize = function () { return 4 + Buffer.byteLength(JSON.stringify(this.toJSON())); }; ApiError.FileError = function (code, p) { return new ApiError(code, exports.ErrorStrings[code], p); }; ApiError.ENOENT = function (path) { return this.FileError(ErrorCode.ENOENT, path); }; ApiError.EEXIST = function (path) { return this.FileError(ErrorCode.EEXIST, path); }; ApiError.EISDIR = function (path) { return this.FileError(ErrorCode.EISDIR, path); }; ApiError.ENOTDIR = function (path) { return this.FileError(ErrorCode.ENOTDIR, path); }; ApiError.EPERM = function (path) { return this.FileError(ErrorCode.EPERM, path); }; ApiError.ENOTEMPTY = function (path) { return this.FileError(ErrorCode.ENOTEMPTY, path); }; return ApiError; }(Error)); exports.ApiError = ApiError; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBpX2Vycm9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2NvcmUvYXBpX2Vycm9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7OztBQUtBLFdBQVksU0FBUztJQUNuQiwyQ0FBYSxDQUFBO0lBQ2IsNkNBQWEsQ0FBQTtJQUNiLHVDQUFhLENBQUE7SUFDYiwyQ0FBYSxDQUFBO0lBQ2IsOENBQWMsQ0FBQTtJQUNkLDRDQUFjLENBQUE7SUFDZCw4Q0FBYyxDQUFBO0lBQ2QsZ0RBQWMsQ0FBQTtJQUNkLDhDQUFjLENBQUE7SUFDZCw4Q0FBYyxDQUFBO0lBQ2QsNENBQWMsQ0FBQTtJQUNkLDhDQUFjLENBQUE7SUFDZCw0Q0FBYyxDQUFBO0lBQ2Qsb0RBQWMsQ0FBQTtJQUNkLGdEQUFjLENBQUE7QUFDaEIsQ0FBQyxFQWhCVyxpQkFBUyxLQUFULGlCQUFTLFFBZ0JwQjtBQWhCRCxJQUFZLFNBQVMsR0FBVCxpQkFnQlgsQ0FBQTtBQUlZLG9CQUFZLEdBQXNELEVBQUUsQ0FBQztBQUNsRixvQkFBWSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRywwQkFBMEIsQ0FBQztBQUMzRCxvQkFBWSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsR0FBRyw0QkFBNEIsQ0FBQztBQUM5RCxvQkFBWSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRyxxQkFBcUIsQ0FBQztBQUNwRCxvQkFBWSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRyxzQkFBc0IsQ0FBQztBQUN2RCxvQkFBWSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsR0FBRyxvQkFBb0IsQ0FBQztBQUN0RCxvQkFBWSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRywwQkFBMEIsQ0FBQztBQUMzRCxvQkFBWSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDaEQsb0JBQVksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLEdBQUcsMEJBQTBCLENBQUM7QUFDN0Qsb0JBQVksQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLEdBQUcsc0JBQXNCLENBQUM7QUFDeEQsb0JBQVksQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLEdBQUcsbUJBQW1CLENBQUM7QUFDckQsb0JBQVksQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLEdBQUcsa0JBQWtCLENBQUM7QUFDbkQsb0JBQVksQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLEdBQUcsd0JBQXdCLENBQUM7QUFDMUQsb0JBQVksQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLEdBQUcsd0NBQXdDLENBQUM7QUFDekUsb0JBQVksQ0FBQyxTQUFTLENBQUMsU0FBUyxDQUFDLEdBQUcseUJBQXlCLENBQUM7QUFDOUQsb0JBQVksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLEdBQUcsNkJBQTZCLENBQUM7QUFXaEU7SUFBOEIsNEJBQUs7SUFrQmpDLGtCQUFZLElBQWUsRUFBRSxPQUFvQyxFQUFFLElBQW1CO1FBQXpELHVCQUFvQyxHQUFwQyxVQUFrQixvQkFBWSxDQUFDLElBQUksQ0FBQztRQUFFLG9CQUFtQixHQUFuQixXQUFtQjtRQUNwRixrQkFBTSxPQUFPLENBQUMsQ0FBQztRQWRWLFlBQU8sR0FBVyxFQUFFLENBQUM7UUFlMUIsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUM7UUFDbEIsSUFBSSxDQUFDLElBQUksR0FBRyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDNUIsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7UUFDakIsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFNLElBQUksS0FBSyxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUM7UUFDdEMsSUFBSSxDQUFDLE9BQU8sR0FBRyxZQUFVLElBQUksQ0FBQyxJQUFJLFVBQUssT0FBTyxJQUFHLElBQUksQ0FBQyxJQUFJLEdBQUcsUUFBTSxJQUFJLENBQUMsSUFBSSxNQUFHLEdBQUcsRUFBRSxDQUFFLENBQUM7SUFDekYsQ0FBQztJQUtNLDJCQUFRLEdBQWY7UUFDRSxNQUFNLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQztJQUN0QixDQUFDO0lBRU0seUJBQU0sR0FBYjtRQUNFLE1BQU0sQ0FBQztZQUNMLEtBQUssRUFBRSxJQUFJLENBQUMsS0FBSztZQUNqQixJQUFJLEVBQUUsSUFBSSxDQUFDLElBQUk7WUFDZixJQUFJLEVBQUUsSUFBSSxDQUFDLElBQUk7WUFDZixLQUFLLEVBQUUsSUFBSSxDQUFDLEtBQUs7WUFDakIsT0FBTyxFQUFFLElBQUksQ0FBQyxPQUFPO1NBQ3RCLENBQUM7SUFDSixDQUFDO0lBRWEsaUJBQVEsR0FBdEIsVUFBdUIsSUFBUztRQUM5QixJQUFJLEdBQUcsR0FBRyxJQUFJLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUMxQixHQUFHLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7UUFDdkIsR0FBRyxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDO1FBQ3JCLEdBQUcsQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQztRQUNyQixHQUFHLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7UUFDdkIsR0FBRyxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDO1FBQzNCLE1BQU0sQ0FBQyxHQUFHLENBQUM7SUFDYixDQUFDO0lBS00sZ0NBQWEsR0FBcEIsVUFBcUIsTUFBOEMsRUFBRSxDQUFhO1FBQTdELHNCQUE4QyxHQUE5QyxhQUFxQixNQUFNLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO1FBQUUsaUJBQWEsR0FBYixLQUFhO1FBQ2hGLElBQUksWUFBWSxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFDdEUsTUFBTSxDQUFDLGFBQWEsQ0FBQyxZQUFZLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDdEMsTUFBTSxDQUFDLE1BQU0sQ0FBQztJQUNoQixDQUFDO0lBS2EsbUJBQVUsR0FBeEIsVUFBeUIsTUFBYyxFQUFFLENBQWE7UUFBYixpQkFBYSxHQUFiLEtBQWE7UUFDcEQsTUFBTSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLE1BQU0sRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsTUFBTSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN2RyxDQUFDO0lBS00sNkJBQVUsR0FBakI7UUFFRSxNQUFNLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQzlELENBQUM7SUFFYSxrQkFBUyxHQUF2QixVQUF3QixJQUFlLEVBQUUsQ0FBUztRQUNoRCxNQUFNLENBQUMsSUFBSSxRQUFRLENBQUMsSUFBSSxFQUFFLG9CQUFZLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDbkQsQ0FBQztJQUNhLGVBQU0sR0FBcEIsVUFBcUIsSUFBWTtRQUMvQixNQUFNLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxTQUFTLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQ2hELENBQUM7SUFFYSxlQUFNLEdBQXBCLFVBQXFCLElBQVk7UUFDL0IsTUFBTSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsU0FBUyxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQztJQUNoRCxDQUFDO0lBRWEsZUFBTSxHQUFwQixVQUFxQixJQUFZO1FBQy9CLE1BQU0sQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLFNBQVMsQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDaEQsQ0FBQztJQUVhLGdCQUFPLEdBQXJCLFVBQXNCLElBQVk7UUFDaEMsTUFBTSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsU0FBUyxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsQ0FBQztJQUNqRCxDQUFDO0lBRWEsY0FBSyxHQUFuQixVQUFvQixJQUFZO1FBQzlCLE1BQU0sQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLFNBQVMsQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDL0MsQ0FBQztJQUVhLGtCQUFTLEdBQXZCLFVBQXdCLElBQVk7UUFDbEMsTUFBTSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsU0FBUyxDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUMsQ0FBQztJQUNuRCxDQUFDO0lBQ0gsZUFBQztBQUFELENBQUMsQUF4R0QsQ0FBOEIsS0FBSyxHQXdHbEM7QUF4R1ksZ0JBQVEsV0F3R3BCLENBQUEiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFN0YW5kYXJkIGxpYmMgZXJyb3IgY29kZXMuIEFkZCBtb3JlIHRvIHRoaXMgZW51bSBhbmQgRXJyb3JTdHJpbmdzIGFzIHRoZXkgYXJlXG4gKiBuZWVkZWQuXG4gKiBAdXJsIGh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS9saWJjL21hbnVhbC9odG1sX25vZGUvRXJyb3ItQ29kZXMuaHRtbFxuICovXG5leHBvcnQgZW51bSBFcnJvckNvZGUge1xuICBFUEVSTSAgICAgPSAxLFxuICBFTk9FTlQgICAgPSAyLFxuICBFSU8gICAgICAgPSA1LFxuICBFQkFERiAgICAgPSA5LFxuICBFQUNDRVMgICAgPSAxMyxcbiAgRUJVU1kgICAgID0gMTYsXG4gIEVFWElTVCAgICA9IDE3LFxuICBFTk9URElSICAgPSAyMCxcbiAgRUlTRElSICAgID0gMjEsXG4gIEVJTlZBTCAgICA9IDIyLFxuICBFRkJJRyAgICAgPSAyNyxcbiAgRU5PU1BDICAgID0gMjgsXG4gIEVST0ZTICAgICA9IDMwLFxuICBFTk9URU1QVFkgPSAzOSxcbiAgRU5PVFNVUCAgID0gOTUsXG59XG4vKipcbiAqIFN0cmluZ3MgYXNzb2NpYXRlZCB3aXRoIGVhY2ggZXJyb3IgY29kZS5cbiAqL1xuZXhwb3J0IGNvbnN0IEVycm9yU3RyaW5nczoge1tjb2RlOiBzdHJpbmddOiBzdHJpbmc7IFtjb2RlOiBudW1iZXJdOiBzdHJpbmc7fSA9IHt9O1xuRXJyb3JTdHJpbmdzW0Vycm9yQ29kZS5FUEVSTV0gPSAnT3BlcmF0aW9uIG5vdCBwZXJtaXR0ZWQuJztcbkVycm9yU3RyaW5nc1tFcnJvckNvZGUuRU5PRU5UXSA9ICdObyBzdWNoIGZpbGUgb3IgZGlyZWN0b3J5Lic7XG5FcnJvclN0cmluZ3NbRXJyb3JDb2RlLkVJT10gPSAnSW5wdXQvb3V0cHV0IGVycm9yLic7XG5FcnJvclN0cmluZ3NbRXJyb3JDb2RlLkVCQURGXSA9ICdCYWQgZmlsZSBkZXNjcmlwdG9yLic7XG5FcnJvclN0cmluZ3NbRXJyb3JDb2RlLkVBQ0NFU10gPSAnUGVybWlzc2lvbiBkZW5pZWQuJztcbkVycm9yU3RyaW5nc1tFcnJvckNvZGUuRUJVU1ldID0gJ1Jlc291cmNlIGJ1c3kgb3IgbG9ja2VkLic7XG5FcnJvclN0cmluZ3NbRXJyb3JDb2RlLkVFWElTVF0gPSAnRmlsZSBleGlzdHMuJztcbkVycm9yU3RyaW5nc1tFcnJvckNvZGUuRU5PVERJUl0gPSAnRmlsZSBpcyBub3QgYSBkaXJlY3RvcnkuJztcbkVycm9yU3RyaW5nc1tFcnJvckNvZGUuRUlTRElSXSA9ICdGaWxlIGlzIGEgZGlyZWN0b3J5Lic7XG5FcnJvclN0cmluZ3NbRXJyb3JDb2RlLkVJTlZBTF0gPSAnSW52YWxpZCBhcmd1bWVudC4nO1xuRXJyb3JTdHJpbmdzW0Vycm9yQ29kZS5FRkJJR10gPSAnRmlsZSBpcyB0b28gYmlnLic7XG5FcnJvclN0cmluZ3NbRXJyb3JDb2RlLkVOT1NQQ10gPSAnTm8gc3BhY2UgbGVmdCBvbiBkaXNrLic7XG5FcnJvclN0cmluZ3NbRXJyb3JDb2RlLkVST0ZTXSA9ICdDYW5ub3QgbW9kaWZ5IGEgcmVhZC1vbmx5IGZpbGUgc3lzdGVtLic7XG5FcnJvclN0cmluZ3NbRXJyb3JDb2RlLkVOT1RFTVBUWV0gPSAnRGlyZWN0b3J5IGlzIG5vdCBlbXB0eS4nO1xuRXJyb3JTdHJpbmdzW0Vycm9yQ29kZS5FTk9UU1VQXSA9ICdPcGVyYXRpb24gaXMgbm90IHN1cHBvcnRlZC4nO1xuXG4vKipcbiAqIFJlcHJlc2VudHMgYSBCcm93c2VyRlMgZXJyb3IuIFBhc3NlZCBiYWNrIHRvIGFwcGxpY2F0aW9ucyBhZnRlciBhIGZhaWxlZFxuICogY2FsbCB0byB0aGUgQnJvd3NlckZTIEFQSS5cbiAqIGVycm5vPzogbnVtYmVyO1xuICAgICAgICBjb2RlPzogc3RyaW5nO1xuICAgICAgICBwYXRoPzogc3RyaW5nO1xuICAgICAgICBzeXNjYWxsPzogc3RyaW5nO1xuICAgICAgICBzdGFjaz86IHN0cmluZztcbiAqL1xuZXhwb3J0IGNsYXNzIEFwaUVycm9yIGV4dGVuZHMgRXJyb3IgaW1wbGVtZW50cyBOb2RlSlMuRXJybm9FeGNlcHRpb24ge1xuICBwdWJsaWMgZXJybm86IEVycm9yQ29kZTtcbiAgcHVibGljIGNvZGU6IHN0cmluZztcbiAgcHVibGljIHBhdGg6IHN0cmluZztcbiAgLy8gVW5zdXBwb3J0ZWQuXG4gIHB1YmxpYyBzeXNjYWxsOiBzdHJpbmcgPSBcIlwiO1xuICBwdWJsaWMgc3RhY2s6IHN0cmluZztcblxuICAvKipcbiAgICogUmVwcmVzZW50cyBhIEJyb3dzZXJGUyBlcnJvci4gUGFzc2VkIGJhY2sgdG8gYXBwbGljYXRpb25zIGFmdGVyIGEgZmFpbGVkXG4gICAqIGNhbGwgdG8gdGhlIEJyb3dzZXJGUyBBUEkuXG4gICAqXG4gICAqIEVycm9yIGNvZGVzIG1pcnJvciB0aG9zZSByZXR1cm5lZCBieSByZWd1bGFyIFVuaXggZmlsZSBvcGVyYXRpb25zLCB3aGljaCBpc1xuICAgKiB3aGF0IE5vZGUgcmV0dXJucy5cbiAgICogQGNvbnN0cnVjdG9yIEFwaUVycm9yXG4gICAqIEBwYXJhbSB0eXBlIFRoZSB0eXBlIG9mIHRoZSBlcnJvci5cbiAgICogQHBhcmFtIFttZXNzYWdlXSBBIGRlc2NyaXB0aXZlIGVycm9yIG1lc3NhZ2UuXG4gICAqL1xuICBjb25zdHJ1Y3Rvcih0eXBlOiBFcnJvckNvZGUsIG1lc3NhZ2U6IHN0cmluZyA9IEVycm9yU3RyaW5nc1t0eXBlXSwgcGF0aDogc3RyaW5nID0gbnVsbCkge1xuICAgIHN1cGVyKG1lc3NhZ2UpO1xuICAgIHRoaXMuZXJybm8gPSB0eXBlO1xuICAgIHRoaXMuY29kZSA9IEVycm9yQ29kZVt0eXBlXTtcbiAgICB0aGlzLnBhdGggPSBwYXRoO1xuICAgIHRoaXMuc3RhY2sgPSAoPGFueT5uZXcgRXJyb3IoKSkuc3RhY2s7XG4gICAgdGhpcy5tZXNzYWdlID0gYEVycm9yOiAke3RoaXMuY29kZX06ICR7bWVzc2FnZX0ke3RoaXMucGF0aCA/IGAsICcke3RoaXMucGF0aH0nYCA6ICcnfWA7XG4gIH1cblxuICAvKipcbiAgICogQHJldHVybiBBIGZyaWVuZGx5IGVycm9yIG1lc3NhZ2UuXG4gICAqL1xuICBwdWJsaWMgdG9TdHJpbmcoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5tZXNzYWdlO1xuICB9XG5cbiAgcHVibGljIHRvSlNPTigpOiBhbnkge1xuICAgIHJldHVybiB7XG4gICAgICBlcnJubzogdGhpcy5lcnJubyxcbiAgICAgIGNvZGU6IHRoaXMuY29kZSxcbiAgICAgIHBhdGg6IHRoaXMucGF0aCxcbiAgICAgIHN0YWNrOiB0aGlzLnN0YWNrLFxuICAgICAgbWVzc2FnZTogdGhpcy5tZXNzYWdlXG4gICAgfTtcbiAgfVxuXG4gIHB1YmxpYyBzdGF0aWMgZnJvbUpTT04oanNvbjogYW55KTogQXBpRXJyb3Ige1xuICAgIHZhciBlcnIgPSBuZXcgQXBpRXJyb3IoMCk7XG4gICAgZXJyLmVycm5vID0ganNvbi5lcnJubztcbiAgICBlcnIuY29kZSA9IGpzb24uY29kZTtcbiAgICBlcnIucGF0aCA9IGpzb24ucGF0aDtcbiAgICBlcnIuc3RhY2sgPSBqc29uLnN0YWNrO1xuICAgIGVyci5tZXNzYWdlID0ganNvbi5tZXNzYWdlO1xuICAgIHJldHVybiBlcnI7XG4gIH1cblxuICAvKipcbiAgICogV3JpdGVzIHRoZSBBUEkgZXJyb3IgaW50byBhIGJ1ZmZlci5cbiAgICovXG4gIHB1YmxpYyB3cml0ZVRvQnVmZmVyKGJ1ZmZlcjogQnVmZmVyID0gbmV3IEJ1ZmZlcih0aGlzLmJ1ZmZlclNpemUoKSksIGk6IG51bWJlciA9IDApOiBCdWZmZXIge1xuICAgIHZhciBieXRlc1dyaXR0ZW4gPSBidWZmZXIud3JpdGUoSlNPTi5zdHJpbmdpZnkodGhpcy50b0pTT04oKSksIGkgKyA0KTtcbiAgICBidWZmZXIud3JpdGVVSW50MzJMRShieXRlc1dyaXR0ZW4sIGkpO1xuICAgIHJldHVybiBidWZmZXI7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlcyBhbiBBcGlFcnJvciBvYmplY3QgZnJvbSBhIGJ1ZmZlci5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgZnJvbUJ1ZmZlcihidWZmZXI6IEJ1ZmZlciwgaTogbnVtYmVyID0gMCk6IEFwaUVycm9yIHtcbiAgICByZXR1cm4gQXBpRXJyb3IuZnJvbUpTT04oSlNPTi5wYXJzZShidWZmZXIudG9TdHJpbmcoJ3V0ZjgnLCBpICsgNCwgaSArIDQgKyBidWZmZXIucmVhZFVJbnQzMkxFKGkpKSkpO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBzaXplIG9mIHRoZSBBUEkgZXJyb3IgaW4gYnVmZmVyLWZvcm0gaW4gYnl0ZXMuXG4gICAqL1xuICBwdWJsaWMgYnVmZmVyU2l6ZSgpOiBudW1iZXIge1xuICAgIC8vIDQgYnl0ZXMgZm9yIHN0cmluZyBsZW5ndGguXG4gICAgcmV0dXJuIDQgKyBCdWZmZXIuYnl0ZUxlbmd0aChKU09OLnN0cmluZ2lmeSh0aGlzLnRvSlNPTigpKSk7XG4gIH1cblxuICBwdWJsaWMgc3RhdGljIEZpbGVFcnJvcihjb2RlOiBFcnJvckNvZGUsIHA6IHN0cmluZyk6IEFwaUVycm9yIHtcbiAgICByZXR1cm4gbmV3IEFwaUVycm9yKGNvZGUsIEVycm9yU3RyaW5nc1tjb2RlXSwgcCk7XG4gIH1cbiAgcHVibGljIHN0YXRpYyBFTk9FTlQocGF0aDogc3RyaW5nKTogQXBpRXJyb3Ige1xuICAgIHJldHVybiB0aGlzLkZpbGVFcnJvcihFcnJvckNvZGUuRU5PRU5ULCBwYXRoKTtcbiAgfVxuXG4gIHB1YmxpYyBzdGF0aWMgRUVYSVNUKHBhdGg6IHN0cmluZyk6IEFwaUVycm9yIHtcbiAgICByZXR1cm4gdGhpcy5GaWxlRXJyb3IoRXJyb3JDb2RlLkVFWElTVCwgcGF0aCk7XG4gIH1cblxuICBwdWJsaWMgc3RhdGljIEVJU0RJUihwYXRoOiBzdHJpbmcpOiBBcGlFcnJvciB7XG4gICAgcmV0dXJuIHRoaXMuRmlsZUVycm9yKEVycm9yQ29kZS5FSVNESVIsIHBhdGgpO1xuICB9XG5cbiAgcHVibGljIHN0YXRpYyBFTk9URElSKHBhdGg6IHN0cmluZyk6IEFwaUVycm9yIHtcbiAgICByZXR1cm4gdGhpcy5GaWxlRXJyb3IoRXJyb3JDb2RlLkVOT1RESVIsIHBhdGgpO1xuICB9XG5cbiAgcHVibGljIHN0YXRpYyBFUEVSTShwYXRoOiBzdHJpbmcpOiBBcGlFcnJvciB7XG4gICAgcmV0dXJuIHRoaXMuRmlsZUVycm9yKEVycm9yQ29kZS5FUEVSTSwgcGF0aCk7XG4gIH1cblxuICBwdWJsaWMgc3RhdGljIEVOT1RFTVBUWShwYXRoOiBzdHJpbmcpOiBBcGlFcnJvciB7XG4gICAgcmV0dXJuIHRoaXMuRmlsZUVycm9yKEVycm9yQ29kZS5FTk9URU1QVFksIHBhdGgpO1xuICB9XG59XG4iXX0=