necessary 17.1.0 → 17.1.2

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.
@@ -16,26 +16,19 @@ _export(exports, {
16
16
  return log;
17
17
  }
18
18
  });
19
- var _path = /*#__PURE__*/ _interop_require_default(require("path"));
20
- var _array = require("../utilities/array");
21
- var _path1 = require("../utilities/path");
22
- var _constants = require("../constants");
23
- var _fileSystem = require("../utilities/fileSystem");
24
- var _defaults = require("../defaults");
25
- var _levels = require("../levels");
26
- function _instanceof(left, right) {
27
- if (right != null && typeof Symbol !== "undefined" && right[Symbol.hasInstance]) {
28
- return !!right[Symbol.hasInstance](left);
29
- } else {
30
- return left instanceof right;
31
- }
32
- }
19
+ const _path = /*#__PURE__*/ _interop_require_default(require("path"));
20
+ const _array = require("../utilities/array");
21
+ const _path1 = require("../utilities/path");
22
+ const _constants = require("../constants");
23
+ const _fileSystem = require("../utilities/fileSystem");
24
+ const _defaults = require("../defaults");
25
+ const _levels = require("../levels");
33
26
  function _interop_require_default(obj) {
34
27
  return obj && obj.__esModule ? obj : {
35
28
  default: obj
36
29
  };
37
30
  }
38
- var levels = [
31
+ const levels = [
39
32
  _levels.TRACE_LEVEL,
40
33
  _levels.DEBUG_LEVEL,
41
34
  _levels.INFO_LEVEL,
@@ -43,38 +36,37 @@ var levels = [
43
36
  _levels.ERROR_LEVEL,
44
37
  _levels.FATAL_LEVEL
45
38
  ];
46
- var logLevel = _defaults.DEFAULT_LOG_LEVEL, logFileBaseName = _defaults.DEFAULT_LOG_FILE_BASE_NAME, logDirectoryPath = _defaults.DEFAULT_LOG_DIRECTORY_PATH;
47
- function log(messageOrError) {
48
- var level = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : _constants.EMPTY_STRING;
49
- var salientStackMessageIndex = 1;
39
+ let logLevel = _defaults.DEFAULT_LOG_LEVEL, logFileBaseName = _defaults.DEFAULT_LOG_FILE_BASE_NAME, logDirectoryPath = _defaults.DEFAULT_LOG_DIRECTORY_PATH;
40
+ function log(messageOrError, level = _constants.EMPTY_STRING) {
41
+ let salientStackMessageIndex = 1;
50
42
  if (level !== _constants.EMPTY_STRING) {
51
- var levelIndex = levels.indexOf(level), logLevelIndex = levels.indexOf(logLevel);
43
+ const levelIndex = levels.indexOf(level), logLevelIndex = levels.indexOf(logLevel);
52
44
  if (levelIndex < logLevelIndex) {
53
45
  return;
54
46
  }
55
47
  salientStackMessageIndex += 2;
56
- level = "".concat(level); ///
48
+ level = `${level}`; ///
57
49
  }
58
- var _$error, message;
59
- if (_instanceof(messageOrError, Error)) {
60
- _$error = messageOrError; ///
61
- message = _$error.message;
50
+ let error, message;
51
+ if (messageOrError instanceof Error) {
52
+ error = messageOrError; ///
53
+ ({ message } = error);
62
54
  } else {
63
55
  message = messageOrError; ///
64
- _$error = new Error(message);
56
+ error = new Error(message);
65
57
  }
66
- var stack = _$error.stack, stackMessages = stackMessagesFromStack(stack), salientStackMessage = stackMessages[salientStackMessageIndex], stackMessage = salientStackMessage, upperCaseLevel = level.toUpperCase(), currentDateAndTimeString = getCurrentDateAndTimeString(), filePath = filePathFromStackMessage(stackMessage), lineNumber = lineNumberFromStackMessage(stackMessage);
67
- message = "".concat(upperCaseLevel, " ").concat(currentDateAndTimeString, " ").concat(filePath, "(").concat(lineNumber, ") ").concat(message);
58
+ const { stack } = error, stackMessages = stackMessagesFromStack(stack), salientStackMessage = stackMessages[salientStackMessageIndex], stackMessage = salientStackMessage, upperCaseLevel = level.toUpperCase(), currentDateAndTimeString = getCurrentDateAndTimeString(), filePath = filePathFromStackMessage(stackMessage), lineNumber = lineNumberFromStackMessage(stackMessage);
59
+ message = `${upperCaseLevel} ${currentDateAndTimeString} ${filePath}(${lineNumber}) ${message}`;
68
60
  console.log(message);
69
61
  if (logDirectoryPath !== null) {
70
62
  rollOverLogFile();
71
- var logFilePath = getLogFilePath(), logFileContent = "".concat(message, "\n");
63
+ const logFilePath = getLogFilePath(), logFileContent = `${message}\n`;
72
64
  (0, _fileSystem.appendToFile)(logFilePath, logFileContent);
73
65
  }
74
66
  return message;
75
67
  }
76
- var _default = {
77
- log: log
68
+ const _default = {
69
+ log
78
70
  };
79
71
  function trace(message) {
80
72
  return log(message, _levels.TRACE_LEVEL);
@@ -98,13 +90,13 @@ function setLogLevel(level) {
98
90
  logLevel = level;
99
91
  }
100
92
  function setLogOptions(logOptions) {
101
- var level = logOptions.level, fileBaseName = logOptions.fileBaseName, directoryPath = logOptions.directoryPath;
93
+ const { level, fileBaseName, directoryPath } = logOptions;
102
94
  setLogLevel(level);
103
95
  setLogFileBaseName(fileBaseName);
104
96
  setLogDirectoryPath(directoryPath);
105
97
  }
106
98
  function getLogFileContent() {
107
- var logFilePath = getLogFilePath(), logFileContent = (0, _fileSystem.readFile)(logFilePath);
99
+ const logFilePath = getLogFilePath(), logFileContent = (0, _fileSystem.readFile)(logFilePath);
108
100
  return logFileContent;
109
101
  }
110
102
  function setLogFileBaseName(fileBaseName) {
@@ -114,59 +106,59 @@ function setLogDirectoryPath(directoryPath) {
114
106
  logDirectoryPath = directoryPath;
115
107
  }
116
108
  Object.assign(log, {
117
- trace: trace,
118
- debug: debug,
119
- info: info,
120
- warning: warning,
121
- error: error,
122
- fatal: fatal,
123
- setLogLevel: setLogLevel,
124
- setLogOptions: setLogOptions,
125
- getLogFileContent: getLogFileContent,
126
- setLogFileBaseName: setLogFileBaseName,
127
- setLogDirectoryPath: setLogDirectoryPath
109
+ trace,
110
+ debug,
111
+ info,
112
+ warning,
113
+ error,
114
+ fatal,
115
+ setLogLevel,
116
+ setLogOptions,
117
+ getLogFileContent,
118
+ setLogFileBaseName,
119
+ setLogDirectoryPath
128
120
  });
129
121
  function getLogFilePath() {
130
- var logFileName = "".concat(logFileBaseName, ".log"), logFilePath = (0, _path1.concatenatePaths)(logDirectoryPath, logFileName);
122
+ const logFileName = `${logFileBaseName}.log`, logFilePath = (0, _path1.concatenatePaths)(logDirectoryPath, logFileName);
131
123
  return logFilePath;
132
124
  }
133
125
  function getRolledOverLogFilePath() {
134
- var currentDateString = getCurrentDateString(), rolledOverLogFileName = "".concat(logFileBaseName, ".").concat(currentDateString, ".log"), rolledOverLogFilePath = (0, _path1.concatenatePaths)(logDirectoryPath, rolledOverLogFileName);
126
+ const currentDateString = getCurrentDateString(), rolledOverLogFileName = `${logFileBaseName}.${currentDateString}.log`, rolledOverLogFilePath = (0, _path1.concatenatePaths)(logDirectoryPath, rolledOverLogFileName);
135
127
  return rolledOverLogFilePath;
136
128
  }
137
129
  function getLogFileLastModifiedDate() {
138
- var logFilePath = getLogFilePath(), logFileStats = (0, _fileSystem.getStats)(logFilePath), mtime = logFileStats.mtime, logFileLastModifiedDate = new Date(mtime); ///
130
+ const logFilePath = getLogFilePath(), logFileStats = (0, _fileSystem.getStats)(logFilePath), { mtime } = logFileStats, logFileLastModifiedDate = new Date(mtime); ///
139
131
  return logFileLastModifiedDate;
140
132
  }
141
133
  function rollOverLogFile() {
142
- var logFilePath = getLogFilePath(), logFileExists = (0, _fileSystem.checkFileExists)(logFilePath);
134
+ const logFilePath = getLogFilePath(), logFileExists = (0, _fileSystem.checkFileExists)(logFilePath);
143
135
  if (!logFileExists) {
144
136
  return;
145
137
  }
146
- var logFileLastModifiedDate = getLogFileLastModifiedDate(), logFileLastModifiedDateCurrentDate = isDateCurrentDate(logFileLastModifiedDate);
138
+ const logFileLastModifiedDate = getLogFileLastModifiedDate(), logFileLastModifiedDateCurrentDate = isDateCurrentDate(logFileLastModifiedDate);
147
139
  if (!logFileLastModifiedDateCurrentDate) {
148
- var rolledOverLogFilePath = getRolledOverLogFilePath();
140
+ const rolledOverLogFilePath = getRolledOverLogFilePath();
149
141
  (0, _fileSystem.renameFile)(logFilePath, rolledOverLogFilePath);
150
142
  }
151
143
  }
152
144
  function isDateCurrentDate(date) {
153
- var currentDate = new Date(), dateString = date.toDateString(), currentDateString = currentDate.toDateString(), dateCurrentDate = dateString === currentDateString;
145
+ const currentDate = new Date(), dateString = date.toDateString(), currentDateString = currentDate.toDateString(), dateCurrentDate = dateString === currentDateString;
154
146
  return dateCurrentDate;
155
147
  }
156
148
  function getCurrentDateString() {
157
- var date = new Date(), day = padStartWithZeroes(date.getDate(), 2), month = padStartWithZeroes(date.getMonth() + 1, 2), year = date.getFullYear(), currentDateAndTimeString = "".concat(day, "-").concat(month, "-").concat(year);
149
+ const date = new Date(), day = padStartWithZeroes(date.getDate(), 2), month = padStartWithZeroes(date.getMonth() + 1, 2), year = date.getFullYear(), currentDateAndTimeString = `${day}-${month}-${year}`;
158
150
  return currentDateAndTimeString;
159
151
  }
160
152
  function getCurrentDateAndTimeString() {
161
- var date = new Date(), day = padStartWithZeroes(date.getDate(), 2), month = padStartWithZeroes(date.getMonth() + 1, 2), year = date.getFullYear(), hours = padStartWithZeroes(date.getHours(), 2), minutes = padStartWithZeroes(date.getMinutes(), 2), seconds = padStartWithZeroes(date.getSeconds(), 2), milliseconds = padStartWithZeroes(date.getMilliseconds(), 3), currentDateAndTimeString = "".concat(day, "-").concat(month, "-").concat(year, " ").concat(hours, ":").concat(minutes, ":").concat(seconds, ".").concat(milliseconds);
153
+ const date = new Date(), day = padStartWithZeroes(date.getDate(), 2), month = padStartWithZeroes(date.getMonth() + 1, 2), year = date.getFullYear(), hours = padStartWithZeroes(date.getHours(), 2), minutes = padStartWithZeroes(date.getMinutes(), 2), seconds = padStartWithZeroes(date.getSeconds(), 2), milliseconds = padStartWithZeroes(date.getMilliseconds(), 3), currentDateAndTimeString = `${day}-${month}-${year} ${hours}:${minutes}:${seconds}.${milliseconds}`;
162
154
  return currentDateAndTimeString;
163
155
  }
164
156
  function stackMessagesFromStack(stack) {
165
- var stackMessages = [], stackLines = stack.split(/\r\n|\n/);
166
- var stackMessage = _constants.EMPTY_STRING;
167
- stackLines.forEach(function(stackLine) {
168
- var matches = /^\s*at.*/.test(stackLine);
169
- stackMessage = stackMessage === _constants.EMPTY_STRING ? stackLine : "".concat(stackMessage, "\n").concat(stackLine);
157
+ const stackMessages = [], stackLines = stack.split(/\r\n|\n/);
158
+ let stackMessage = _constants.EMPTY_STRING;
159
+ stackLines.forEach((stackLine)=>{
160
+ const matches = /^\s*at.*/.test(stackLine);
161
+ stackMessage = stackMessage === _constants.EMPTY_STRING ? stackLine : `${stackMessage}\n${stackLine}`;
170
162
  if (matches) {
171
163
  stackMessages.push(stackMessage);
172
164
  stackMessage = _constants.EMPTY_STRING;
@@ -175,24 +167,24 @@ function stackMessagesFromStack(stack) {
175
167
  return stackMessages;
176
168
  }
177
169
  function filePathFromStackMessage(stackMessage) {
178
- var matches = stackMessage.match(/(\/.+):\d+:\d+/m), secondMatch = (0, _array.second)(matches), absoluteFilePath = secondMatch, currentWorkingDirectoryPath = _path.default.resolve("."), currentWorkingDirectoryPathLength = currentWorkingDirectoryPath.length, start = currentWorkingDirectoryPathLength + 1, filePath = absoluteFilePath.substr(start);
170
+ const matches = stackMessage.match(/(\/.+):\d+:\d+/m), secondMatch = (0, _array.second)(matches), absoluteFilePath = secondMatch, currentWorkingDirectoryPath = _path.default.resolve("."), currentWorkingDirectoryPathLength = currentWorkingDirectoryPath.length, start = currentWorkingDirectoryPathLength + 1, filePath = absoluteFilePath.substr(start);
179
171
  return filePath;
180
172
  }
181
173
  function lineNumberFromStackMessage(stackMessage) {
182
- var matches = stackMessage.match(/:(\d+)/m), secondMatch = (0, _array.second)(matches), lineNumber = secondMatch; ///
174
+ const matches = stackMessage.match(/:(\d+)/m), secondMatch = (0, _array.second)(matches), lineNumber = secondMatch; ///
183
175
  return lineNumber;
184
176
  }
185
177
  function padStartWithZeroes(string, length) {
186
- var padString = _constants.ZERO, paddedString = padStart(string, length, padString);
178
+ const padString = _constants.ZERO, paddedString = padStart(string, length, padString);
187
179
  return paddedString;
188
180
  }
189
181
  function padStart(string, length, padString) {
190
- var padding = _constants.EMPTY_STRING;
191
- for(var index = 0; index < length; index++){
182
+ let padding = _constants.EMPTY_STRING;
183
+ for(let index = 0; index < length; index++){
192
184
  padding += padString;
193
185
  }
194
- var paddedString = "".concat(padding).concat(string).substr(-length);
186
+ const paddedString = `${padding}${string}`.substr(-length);
195
187
  return paddedString;
196
188
  }
197
189
 
198
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlsaXRpZXMvbG9nZ2luZy5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHBhdGggZnJvbSBcInBhdGhcIjtcblxuaW1wb3J0IHsgc2Vjb25kIH0gZnJvbSBcIi4uL3V0aWxpdGllcy9hcnJheVwiO1xuaW1wb3J0IHsgY29uY2F0ZW5hdGVQYXRocyB9IGZyb20gXCIuLi91dGlsaXRpZXMvcGF0aFwiO1xuaW1wb3J0IHsgWkVSTywgRU1QVFlfU1RSSU5HIH0gZnJvbSBcIi4uL2NvbnN0YW50c1wiO1xuaW1wb3J0IHsgY2hlY2tGaWxlRXhpc3RzLCByZWFkRmlsZSwgYXBwZW5kVG9GaWxlLCByZW5hbWVGaWxlLCBnZXRTdGF0cyB9IGZyb20gXCIuLi91dGlsaXRpZXMvZmlsZVN5c3RlbVwiO1xuaW1wb3J0IHsgREVGQVVMVF9MT0dfTEVWRUwsIERFRkFVTFRfTE9HX0ZJTEVfQkFTRV9OQU1FLCBERUZBVUxUX0xPR19ESVJFQ1RPUllfUEFUSCB9IGZyb20gXCIuLi9kZWZhdWx0c1wiO1xuaW1wb3J0IHsgVFJBQ0VfTEVWRUwsIERFQlVHX0xFVkVMLCBJTkZPX0xFVkVMLCBXQVJOSU5HX0xFVkVMLCBFUlJPUl9MRVZFTCwgRkFUQUxfTEVWRUwgfSBmcm9tIFwiLi4vbGV2ZWxzXCI7XG5cbmNvbnN0IGxldmVscyA9IFtcbiAgVFJBQ0VfTEVWRUwsXG4gIERFQlVHX0xFVkVMLFxuICBJTkZPX0xFVkVMLFxuICBXQVJOSU5HX0xFVkVMLFxuICBFUlJPUl9MRVZFTCxcbiAgRkFUQUxfTEVWRUwsXG5dO1xuXG5sZXQgbG9nTGV2ZWwgPSBERUZBVUxUX0xPR19MRVZFTCxcbiAgICBsb2dGaWxlQmFzZU5hbWUgPSBERUZBVUxUX0xPR19GSUxFX0JBU0VfTkFNRSxcbiAgICBsb2dEaXJlY3RvcnlQYXRoID0gREVGQVVMVF9MT0dfRElSRUNUT1JZX1BBVEg7XG5cbmV4cG9ydCBmdW5jdGlvbiBsb2cobWVzc2FnZU9yRXJyb3IsIGxldmVsID0gRU1QVFlfU1RSSU5HKSB7XG4gIGxldCBzYWxpZW50U3RhY2tNZXNzYWdlSW5kZXggPSAxO1xuXG4gIGlmIChsZXZlbCAhPT0gRU1QVFlfU1RSSU5HKSB7XG4gICAgY29uc3QgbGV2ZWxJbmRleCA9IGxldmVscy5pbmRleE9mKGxldmVsKSxcbiAgICAgICAgICBsb2dMZXZlbEluZGV4ID0gbGV2ZWxzLmluZGV4T2YobG9nTGV2ZWwpO1xuXG4gICAgaWYgKGxldmVsSW5kZXggPCBsb2dMZXZlbEluZGV4KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgc2FsaWVudFN0YWNrTWVzc2FnZUluZGV4ICs9IDI7XG5cbiAgICBsZXZlbCA9IGAke2xldmVsfWA7ICAvLy9cbiAgfVxuXG4gIGxldCBlcnJvcixcbiAgICAgIG1lc3NhZ2U7XG5cbiAgaWYgKG1lc3NhZ2VPckVycm9yIGluc3RhbmNlb2YgRXJyb3IpIHtcbiAgICBlcnJvciA9IG1lc3NhZ2VPckVycm9yOyAvLy9cblxuICAgICh7IG1lc3NhZ2UgfSA9IGVycm9yKTtcbiAgfSBlbHNlIHtcbiAgICBtZXNzYWdlID0gbWVzc2FnZU9yRXJyb3I7IC8vL1xuXG4gICAgZXJyb3IgPSBuZXcgRXJyb3IobWVzc2FnZSk7XG4gIH1cblxuICBjb25zdCB7IHN0YWNrIH0gPSBlcnJvcixcbiAgICAgICAgc3RhY2tNZXNzYWdlcyA9IHN0YWNrTWVzc2FnZXNGcm9tU3RhY2soc3RhY2spLFxuICAgICAgICBzYWxpZW50U3RhY2tNZXNzYWdlID0gc3RhY2tNZXNzYWdlc1tzYWxpZW50U3RhY2tNZXNzYWdlSW5kZXhdLFxuICAgICAgICBzdGFja01lc3NhZ2UgPSBzYWxpZW50U3RhY2tNZXNzYWdlLCAvLy9cbiAgICAgICAgdXBwZXJDYXNlTGV2ZWwgPSBsZXZlbC50b1VwcGVyQ2FzZSgpLFxuICAgICAgICBjdXJyZW50RGF0ZUFuZFRpbWVTdHJpbmcgPSBnZXRDdXJyZW50RGF0ZUFuZFRpbWVTdHJpbmcoKSxcbiAgICAgICAgZmlsZVBhdGggPSBmaWxlUGF0aEZyb21TdGFja01lc3NhZ2Uoc3RhY2tNZXNzYWdlKSxcbiAgICAgICAgbGluZU51bWJlciA9IGxpbmVOdW1iZXJGcm9tU3RhY2tNZXNzYWdlKHN0YWNrTWVzc2FnZSk7XG5cbiAgbWVzc2FnZSA9IGAke3VwcGVyQ2FzZUxldmVsfSAke2N1cnJlbnREYXRlQW5kVGltZVN0cmluZ30gJHtmaWxlUGF0aH0oJHtsaW5lTnVtYmVyfSkgJHttZXNzYWdlfWA7XG5cbiAgY29uc29sZS5sb2cobWVzc2FnZSk7XG5cbiAgaWYgKGxvZ0RpcmVjdG9yeVBhdGggIT09IG51bGwpIHtcbiAgICByb2xsT3ZlckxvZ0ZpbGUoKTtcblxuICAgIGNvbnN0IGxvZ0ZpbGVQYXRoID0gZ2V0TG9nRmlsZVBhdGgoKSxcbiAgICAgICAgICBsb2dGaWxlQ29udGVudCA9IGAke21lc3NhZ2V9XFxuYDtcblxuICAgIGFwcGVuZFRvRmlsZShsb2dGaWxlUGF0aCwgbG9nRmlsZUNvbnRlbnQpO1xuICB9XG5cbiAgcmV0dXJuIG1lc3NhZ2U7XG59XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgbG9nXG59XG5cbmZ1bmN0aW9uIHRyYWNlKG1lc3NhZ2UpIHsgcmV0dXJuIGxvZyhtZXNzYWdlLCBUUkFDRV9MRVZFTCk7IH1cblxuZnVuY3Rpb24gZGVidWcobWVzc2FnZSkgeyByZXR1cm4gbG9nKG1lc3NhZ2UsIERFQlVHX0xFVkVMKTsgfVxuXG5mdW5jdGlvbiBpbmZvKG1lc3NhZ2UpIHsgcmV0dXJuIGxvZyhtZXNzYWdlLCBJTkZPX0xFVkVMKTsgfVxuXG5mdW5jdGlvbiB3YXJuaW5nKG1lc3NhZ2UpIHsgcmV0dXJuIGxvZyhtZXNzYWdlLCBXQVJOSU5HX0xFVkVMKTsgfVxuXG5mdW5jdGlvbiBlcnJvcihtZXNzYWdlKSB7IHJldHVybiBsb2cobWVzc2FnZSwgRVJST1JfTEVWRUwpOyB9XG5cbmZ1bmN0aW9uIGZhdGFsKG1lc3NhZ2UpIHsgcmV0dXJuIGxvZyhtZXNzYWdlLCBGQVRBTF9MRVZFTCk7IH1cblxuZnVuY3Rpb24gc2V0TG9nTGV2ZWwobGV2ZWwpIHsgbG9nTGV2ZWwgPSBsZXZlbDsgfVxuXG5mdW5jdGlvbiBzZXRMb2dPcHRpb25zKGxvZ09wdGlvbnMpIHtcbiAgY29uc3QgeyBsZXZlbCwgZmlsZUJhc2VOYW1lLCBkaXJlY3RvcnlQYXRoIH0gPSBsb2dPcHRpb25zO1xuXG4gIHNldExvZ0xldmVsKGxldmVsKTtcblxuICBzZXRMb2dGaWxlQmFzZU5hbWUoZmlsZUJhc2VOYW1lKTtcblxuICBzZXRMb2dEaXJlY3RvcnlQYXRoKGRpcmVjdG9yeVBhdGgpO1xufVxuXG5mdW5jdGlvbiBnZXRMb2dGaWxlQ29udGVudCgpIHtcbiAgY29uc3QgbG9nRmlsZVBhdGggPSBnZXRMb2dGaWxlUGF0aCgpLFxuICAgICAgICBsb2dGaWxlQ29udGVudCA9IHJlYWRGaWxlKGxvZ0ZpbGVQYXRoKTtcblxuICByZXR1cm4gbG9nRmlsZUNvbnRlbnQ7XG59XG5cbmZ1bmN0aW9uIHNldExvZ0ZpbGVCYXNlTmFtZShmaWxlQmFzZU5hbWUpIHsgbG9nRmlsZUJhc2VOYW1lID0gZmlsZUJhc2VOYW1lOyB9XG5cbmZ1bmN0aW9uIHNldExvZ0RpcmVjdG9yeVBhdGgoZGlyZWN0b3J5UGF0aCkgeyBsb2dEaXJlY3RvcnlQYXRoID0gZGlyZWN0b3J5UGF0aDsgfVxuXG5PYmplY3QuYXNzaWduKGxvZywge1xuICB0cmFjZSxcbiAgZGVidWcsXG4gIGluZm8sXG4gIHdhcm5pbmcsXG4gIGVycm9yLFxuICBmYXRhbCxcbiAgc2V0TG9nTGV2ZWwsXG4gIHNldExvZ09wdGlvbnMsXG4gIGdldExvZ0ZpbGVDb250ZW50LFxuICBzZXRMb2dGaWxlQmFzZU5hbWUsXG4gIHNldExvZ0RpcmVjdG9yeVBhdGhcbn0pO1xuXG5mdW5jdGlvbiBnZXRMb2dGaWxlUGF0aCgpIHtcbiAgY29uc3QgbG9nRmlsZU5hbWUgPSBgJHtsb2dGaWxlQmFzZU5hbWV9LmxvZ2AsXG4gICAgICAgIGxvZ0ZpbGVQYXRoID0gY29uY2F0ZW5hdGVQYXRocyhsb2dEaXJlY3RvcnlQYXRoLCBsb2dGaWxlTmFtZSk7XG5cbiAgcmV0dXJuIGxvZ0ZpbGVQYXRoO1xufVxuXG5mdW5jdGlvbiBnZXRSb2xsZWRPdmVyTG9nRmlsZVBhdGgoKSB7XG4gIGNvbnN0IGN1cnJlbnREYXRlU3RyaW5nID0gZ2V0Q3VycmVudERhdGVTdHJpbmcoKSxcbiAgICAgICAgcm9sbGVkT3ZlckxvZ0ZpbGVOYW1lID0gYCR7bG9nRmlsZUJhc2VOYW1lfS4ke2N1cnJlbnREYXRlU3RyaW5nfS5sb2dgLFxuICAgICAgICByb2xsZWRPdmVyTG9nRmlsZVBhdGggPSBjb25jYXRlbmF0ZVBhdGhzKGxvZ0RpcmVjdG9yeVBhdGgsIHJvbGxlZE92ZXJMb2dGaWxlTmFtZSk7XG5cbiAgcmV0dXJuIHJvbGxlZE92ZXJMb2dGaWxlUGF0aDtcbn1cblxuZnVuY3Rpb24gZ2V0TG9nRmlsZUxhc3RNb2RpZmllZERhdGUoKSB7XG4gIGNvbnN0IGxvZ0ZpbGVQYXRoID0gZ2V0TG9nRmlsZVBhdGgoKSxcbiAgICAgICAgbG9nRmlsZVN0YXRzID0gZ2V0U3RhdHMobG9nRmlsZVBhdGgpLFxuICAgICAgICB7IG10aW1lIH0gPSBsb2dGaWxlU3RhdHMsXG4gICAgICAgIGxvZ0ZpbGVMYXN0TW9kaWZpZWREYXRlID0gbmV3IERhdGUobXRpbWUpOyAgLy8vXG5cbiAgcmV0dXJuIGxvZ0ZpbGVMYXN0TW9kaWZpZWREYXRlO1xufVxuXG5mdW5jdGlvbiByb2xsT3ZlckxvZ0ZpbGUoKSB7XG4gIGNvbnN0IGxvZ0ZpbGVQYXRoID0gZ2V0TG9nRmlsZVBhdGgoKSxcbiAgICAgICAgbG9nRmlsZUV4aXN0cyA9IGNoZWNrRmlsZUV4aXN0cyhsb2dGaWxlUGF0aCk7XG5cbiAgaWYgKCFsb2dGaWxlRXhpc3RzKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgY29uc3QgbG9nRmlsZUxhc3RNb2RpZmllZERhdGUgPSBnZXRMb2dGaWxlTGFzdE1vZGlmaWVkRGF0ZSgpLFxuICAgICAgICBsb2dGaWxlTGFzdE1vZGlmaWVkRGF0ZUN1cnJlbnREYXRlID0gaXNEYXRlQ3VycmVudERhdGUobG9nRmlsZUxhc3RNb2RpZmllZERhdGUpO1xuXG4gIGlmICghbG9nRmlsZUxhc3RNb2RpZmllZERhdGVDdXJyZW50RGF0ZSkge1xuICAgIGNvbnN0IHJvbGxlZE92ZXJMb2dGaWxlUGF0aCA9IGdldFJvbGxlZE92ZXJMb2dGaWxlUGF0aCgpO1xuXG4gICAgcmVuYW1lRmlsZShsb2dGaWxlUGF0aCwgcm9sbGVkT3ZlckxvZ0ZpbGVQYXRoKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBpc0RhdGVDdXJyZW50RGF0ZShkYXRlKSB7XG4gIGNvbnN0IGN1cnJlbnREYXRlID0gbmV3IERhdGUoKSxcbiAgICAgICAgZGF0ZVN0cmluZyA9IGRhdGUudG9EYXRlU3RyaW5nKCksXG4gICAgICAgIGN1cnJlbnREYXRlU3RyaW5nID0gY3VycmVudERhdGUudG9EYXRlU3RyaW5nKCksXG4gICAgICAgIGRhdGVDdXJyZW50RGF0ZSA9IChkYXRlU3RyaW5nID09PSBjdXJyZW50RGF0ZVN0cmluZyk7XG5cbiAgcmV0dXJuIGRhdGVDdXJyZW50RGF0ZTtcbn1cblxuZnVuY3Rpb24gZ2V0Q3VycmVudERhdGVTdHJpbmcoKSB7XG4gIGNvbnN0IGRhdGUgPSBuZXcgRGF0ZSgpLFxuICAgICAgICBkYXkgPSBwYWRTdGFydFdpdGhaZXJvZXMoZGF0ZS5nZXREYXRlKCksIDIpLCAgLy8vXG4gICAgICAgIG1vbnRoID0gcGFkU3RhcnRXaXRoWmVyb2VzKGRhdGUuZ2V0TW9udGgoKSArIDEsIDIpLCAvLy9cbiAgICAgICAgeWVhciA9IGRhdGUuZ2V0RnVsbFllYXIoKSxcbiAgICAgICAgY3VycmVudERhdGVBbmRUaW1lU3RyaW5nID0gYCR7ZGF5fS0ke21vbnRofS0ke3llYXJ9YDtcblxuICByZXR1cm4gY3VycmVudERhdGVBbmRUaW1lU3RyaW5nO1xufVxuXG5mdW5jdGlvbiBnZXRDdXJyZW50RGF0ZUFuZFRpbWVTdHJpbmcoKSB7XG4gIGNvbnN0IGRhdGUgPSBuZXcgRGF0ZSgpLFxuICAgICAgICBkYXkgPSBwYWRTdGFydFdpdGhaZXJvZXMoZGF0ZS5nZXREYXRlKCksIDIpLCAgLy8vXG4gICAgICAgIG1vbnRoID0gcGFkU3RhcnRXaXRoWmVyb2VzKGRhdGUuZ2V0TW9udGgoKSArIDEsIDIpLCAvLy9cbiAgICAgICAgeWVhciA9IGRhdGUuZ2V0RnVsbFllYXIoKSxcbiAgICAgICAgaG91cnMgPSBwYWRTdGFydFdpdGhaZXJvZXMoZGF0ZS5nZXRIb3VycygpLCAyKSxcbiAgICAgICAgbWludXRlcyA9IHBhZFN0YXJ0V2l0aFplcm9lcyhkYXRlLmdldE1pbnV0ZXMoKSwgMiksXG4gICAgICAgIHNlY29uZHMgPSBwYWRTdGFydFdpdGhaZXJvZXMoZGF0ZS5nZXRTZWNvbmRzKCksIDIpLFxuICAgICAgICBtaWxsaXNlY29uZHMgPSBwYWRTdGFydFdpdGhaZXJvZXMoZGF0ZS5nZXRNaWxsaXNlY29uZHMoKSwgMyksXG4gICAgICAgIGN1cnJlbnREYXRlQW5kVGltZVN0cmluZyA9IGAke2RheX0tJHttb250aH0tJHt5ZWFyfSAke2hvdXJzfToke21pbnV0ZXN9OiR7c2Vjb25kc30uJHttaWxsaXNlY29uZHN9YDtcblxuICByZXR1cm4gY3VycmVudERhdGVBbmRUaW1lU3RyaW5nO1xufVxuXG5mdW5jdGlvbiBzdGFja01lc3NhZ2VzRnJvbVN0YWNrKHN0YWNrKSB7XG4gIGNvbnN0IHN0YWNrTWVzc2FnZXMgPSBbXSxcbiAgICAgICAgc3RhY2tMaW5lcyA9IHN0YWNrLnNwbGl0KC9cXHJcXG58XFxuLyk7XG5cbiAgbGV0IHN0YWNrTWVzc2FnZSA9IEVNUFRZX1NUUklORztcblxuICBzdGFja0xpbmVzLmZvckVhY2goKHN0YWNrTGluZSkgPT4ge1xuICAgIGNvbnN0IG1hdGNoZXMgPSAvXlxccyphdC4qLy50ZXN0KHN0YWNrTGluZSk7XG5cbiAgICBzdGFja01lc3NhZ2UgPSAoc3RhY2tNZXNzYWdlID09PSBFTVBUWV9TVFJJTkcpID9cbiAgICAgICAgICAgICAgICAgICAgICBzdGFja0xpbmUgOlxuICAgICAgICAgICAgICAgICAgICAgICAgYCR7c3RhY2tNZXNzYWdlfVxcbiR7c3RhY2tMaW5lfWA7XG5cbiAgICBpZiAobWF0Y2hlcykge1xuICAgICAgc3RhY2tNZXNzYWdlcy5wdXNoKHN0YWNrTWVzc2FnZSk7XG5cbiAgICAgIHN0YWNrTWVzc2FnZSA9IEVNUFRZX1NUUklORztcbiAgICB9XG4gIH0pO1xuXG4gIHJldHVybiBzdGFja01lc3NhZ2VzO1xufVxuXG5mdW5jdGlvbiBmaWxlUGF0aEZyb21TdGFja01lc3NhZ2Uoc3RhY2tNZXNzYWdlKSB7XG4gIGNvbnN0IG1hdGNoZXMgPSBzdGFja01lc3NhZ2UubWF0Y2goLyhcXC8uKyk6XFxkKzpcXGQrL20pLFxuICAgICAgICBzZWNvbmRNYXRjaCA9IHNlY29uZChtYXRjaGVzKSxcbiAgICAgICAgYWJzb2x1dGVGaWxlUGF0aCA9IHNlY29uZE1hdGNoLCAgLy8vXG4gICAgICAgIGN1cnJlbnRXb3JraW5nRGlyZWN0b3J5UGF0aCA9IHBhdGgucmVzb2x2ZShcIi5cIiksICAvLy9cbiAgICAgICAgY3VycmVudFdvcmtpbmdEaXJlY3RvcnlQYXRoTGVuZ3RoID0gY3VycmVudFdvcmtpbmdEaXJlY3RvcnlQYXRoLmxlbmd0aCxcbiAgICAgICAgc3RhcnQgPSBjdXJyZW50V29ya2luZ0RpcmVjdG9yeVBhdGhMZW5ndGggKyAxLCAgLy8vXG4gICAgICAgIGZpbGVQYXRoID0gYWJzb2x1dGVGaWxlUGF0aC5zdWJzdHIoc3RhcnQpO1xuXG4gIHJldHVybiBmaWxlUGF0aDtcbn1cblxuZnVuY3Rpb24gbGluZU51bWJlckZyb21TdGFja01lc3NhZ2Uoc3RhY2tNZXNzYWdlKSB7XG4gIGNvbnN0IG1hdGNoZXMgPSBzdGFja01lc3NhZ2UubWF0Y2goLzooXFxkKykvbSksXG4gICAgICAgIHNlY29uZE1hdGNoID0gc2Vjb25kKG1hdGNoZXMpLFxuICAgICAgICBsaW5lTnVtYmVyID0gc2Vjb25kTWF0Y2g7IC8vL1xuXG4gIHJldHVybiBsaW5lTnVtYmVyO1xufVxuXG5mdW5jdGlvbiBwYWRTdGFydFdpdGhaZXJvZXMoc3RyaW5nLCBsZW5ndGgpIHtcbiAgY29uc3QgcGFkU3RyaW5nID0gWkVSTywgLy8vXG4gICAgICAgIHBhZGRlZFN0cmluZyA9IHBhZFN0YXJ0KHN0cmluZywgbGVuZ3RoLCBwYWRTdHJpbmcpO1xuXG4gIHJldHVybiBwYWRkZWRTdHJpbmc7XG59XG5cbmZ1bmN0aW9uIHBhZFN0YXJ0KHN0cmluZywgbGVuZ3RoLCBwYWRTdHJpbmcpIHtcbiAgbGV0IHBhZGRpbmcgPSBFTVBUWV9TVFJJTkc7XG5cbiAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IGxlbmd0aDsgaW5kZXgrKykge1xuICAgIHBhZGRpbmcgKz0gcGFkU3RyaW5nO1xuICB9XG5cbiAgY29uc3QgcGFkZGVkU3RyaW5nID0gYCR7cGFkZGluZ30ke3N0cmluZ31gLnN1YnN0cigtbGVuZ3RoKTtcblxuICByZXR1cm4gcGFkZGVkU3RyaW5nO1xufVxuIl0sIm5hbWVzIjpbImxvZyIsImxldmVscyIsIlRSQUNFX0xFVkVMIiwiREVCVUdfTEVWRUwiLCJJTkZPX0xFVkVMIiwiV0FSTklOR19MRVZFTCIsIkVSUk9SX0xFVkVMIiwiRkFUQUxfTEVWRUwiLCJsb2dMZXZlbCIsIkRFRkFVTFRfTE9HX0xFVkVMIiwibG9nRmlsZUJhc2VOYW1lIiwiREVGQVVMVF9MT0dfRklMRV9CQVNFX05BTUUiLCJsb2dEaXJlY3RvcnlQYXRoIiwiREVGQVVMVF9MT0dfRElSRUNUT1JZX1BBVEgiLCJtZXNzYWdlT3JFcnJvciIsImxldmVsIiwiRU1QVFlfU1RSSU5HIiwic2FsaWVudFN0YWNrTWVzc2FnZUluZGV4IiwibGV2ZWxJbmRleCIsImluZGV4T2YiLCJsb2dMZXZlbEluZGV4IiwiZXJyb3IiLCJtZXNzYWdlIiwiRXJyb3IiLCJzdGFjayIsInN0YWNrTWVzc2FnZXMiLCJzdGFja01lc3NhZ2VzRnJvbVN0YWNrIiwic2FsaWVudFN0YWNrTWVzc2FnZSIsInN0YWNrTWVzc2FnZSIsInVwcGVyQ2FzZUxldmVsIiwidG9VcHBlckNhc2UiLCJjdXJyZW50RGF0ZUFuZFRpbWVTdHJpbmciLCJnZXRDdXJyZW50RGF0ZUFuZFRpbWVTdHJpbmciLCJmaWxlUGF0aCIsImZpbGVQYXRoRnJvbVN0YWNrTWVzc2FnZSIsImxpbmVOdW1iZXIiLCJsaW5lTnVtYmVyRnJvbVN0YWNrTWVzc2FnZSIsImNvbnNvbGUiLCJyb2xsT3ZlckxvZ0ZpbGUiLCJsb2dGaWxlUGF0aCIsImdldExvZ0ZpbGVQYXRoIiwibG9nRmlsZUNvbnRlbnQiLCJhcHBlbmRUb0ZpbGUiLCJ0cmFjZSIsImRlYnVnIiwiaW5mbyIsIndhcm5pbmciLCJmYXRhbCIsInNldExvZ0xldmVsIiwic2V0TG9nT3B0aW9ucyIsImxvZ09wdGlvbnMiLCJmaWxlQmFzZU5hbWUiLCJkaXJlY3RvcnlQYXRoIiwic2V0TG9nRmlsZUJhc2VOYW1lIiwic2V0TG9nRGlyZWN0b3J5UGF0aCIsImdldExvZ0ZpbGVDb250ZW50IiwicmVhZEZpbGUiLCJPYmplY3QiLCJhc3NpZ24iLCJsb2dGaWxlTmFtZSIsImNvbmNhdGVuYXRlUGF0aHMiLCJnZXRSb2xsZWRPdmVyTG9nRmlsZVBhdGgiLCJjdXJyZW50RGF0ZVN0cmluZyIsImdldEN1cnJlbnREYXRlU3RyaW5nIiwicm9sbGVkT3ZlckxvZ0ZpbGVOYW1lIiwicm9sbGVkT3ZlckxvZ0ZpbGVQYXRoIiwiZ2V0TG9nRmlsZUxhc3RNb2RpZmllZERhdGUiLCJsb2dGaWxlU3RhdHMiLCJnZXRTdGF0cyIsIm10aW1lIiwibG9nRmlsZUxhc3RNb2RpZmllZERhdGUiLCJEYXRlIiwibG9nRmlsZUV4aXN0cyIsImNoZWNrRmlsZUV4aXN0cyIsImxvZ0ZpbGVMYXN0TW9kaWZpZWREYXRlQ3VycmVudERhdGUiLCJpc0RhdGVDdXJyZW50RGF0ZSIsInJlbmFtZUZpbGUiLCJkYXRlIiwiY3VycmVudERhdGUiLCJkYXRlU3RyaW5nIiwidG9EYXRlU3RyaW5nIiwiZGF0ZUN1cnJlbnREYXRlIiwiZGF5IiwicGFkU3RhcnRXaXRoWmVyb2VzIiwiZ2V0RGF0ZSIsIm1vbnRoIiwiZ2V0TW9udGgiLCJ5ZWFyIiwiZ2V0RnVsbFllYXIiLCJob3VycyIsImdldEhvdXJzIiwibWludXRlcyIsImdldE1pbnV0ZXMiLCJzZWNvbmRzIiwiZ2V0U2Vjb25kcyIsIm1pbGxpc2Vjb25kcyIsImdldE1pbGxpc2Vjb25kcyIsInN0YWNrTGluZXMiLCJzcGxpdCIsImZvckVhY2giLCJzdGFja0xpbmUiLCJtYXRjaGVzIiwidGVzdCIsInB1c2giLCJtYXRjaCIsInNlY29uZE1hdGNoIiwic2Vjb25kIiwiYWJzb2x1dGVGaWxlUGF0aCIsImN1cnJlbnRXb3JraW5nRGlyZWN0b3J5UGF0aCIsInBhdGgiLCJyZXNvbHZlIiwiY3VycmVudFdvcmtpbmdEaXJlY3RvcnlQYXRoTGVuZ3RoIiwibGVuZ3RoIiwic3RhcnQiLCJzdWJzdHIiLCJzdHJpbmciLCJwYWRTdHJpbmciLCJaRVJPIiwicGFkZGVkU3RyaW5nIiwicGFkU3RhcnQiLCJwYWRkaW5nIiwiaW5kZXgiXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7OztRQThFQTtlQUFBOztRQXREZ0JBO2VBQUFBOzs7MkRBdEJDO3FCQUVNO3FCQUNVO3lCQUNFOzBCQUMyQzt3QkFDWTtzQkFDSTs7Ozs7Ozs7Ozs7OztBQUU5RixJQUFNQyxTQUFTO0lBQ2JDLG1CQUFXO0lBQ1hDLG1CQUFXO0lBQ1hDLGtCQUFVO0lBQ1ZDLHFCQUFhO0lBQ2JDLG1CQUFXO0lBQ1hDLG1CQUFXO0NBQ1o7QUFFRCxJQUFJQyxXQUFXQywyQkFBaUIsRUFDNUJDLGtCQUFrQkMsb0NBQTBCLEVBQzVDQyxtQkFBbUJDLG9DQUEwQjtBQUUxQyxTQUFTYixJQUFJYyxjQUFjO1FBQUVDLFFBQUFBLGlFQUFRQyx1QkFBWTtJQUN0RCxJQUFJQywyQkFBMkI7SUFFL0IsSUFBSUYsVUFBVUMsdUJBQVksRUFBRTtRQUMxQixJQUFNRSxhQUFhakIsT0FBT2tCLE9BQU8sQ0FBQ0osUUFDNUJLLGdCQUFnQm5CLE9BQU9rQixPQUFPLENBQUNYO1FBRXJDLElBQUlVLGFBQWFFLGVB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
190
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlsaXRpZXMvbG9nZ2luZy5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHBhdGggZnJvbSBcInBhdGhcIjtcblxuaW1wb3J0IHsgc2Vjb25kIH0gZnJvbSBcIi4uL3V0aWxpdGllcy9hcnJheVwiO1xuaW1wb3J0IHsgY29uY2F0ZW5hdGVQYXRocyB9IGZyb20gXCIuLi91dGlsaXRpZXMvcGF0aFwiO1xuaW1wb3J0IHsgWkVSTywgRU1QVFlfU1RSSU5HIH0gZnJvbSBcIi4uL2NvbnN0YW50c1wiO1xuaW1wb3J0IHsgY2hlY2tGaWxlRXhpc3RzLCByZWFkRmlsZSwgYXBwZW5kVG9GaWxlLCByZW5hbWVGaWxlLCBnZXRTdGF0cyB9IGZyb20gXCIuLi91dGlsaXRpZXMvZmlsZVN5c3RlbVwiO1xuaW1wb3J0IHsgREVGQVVMVF9MT0dfTEVWRUwsIERFRkFVTFRfTE9HX0ZJTEVfQkFTRV9OQU1FLCBERUZBVUxUX0xPR19ESVJFQ1RPUllfUEFUSCB9IGZyb20gXCIuLi9kZWZhdWx0c1wiO1xuaW1wb3J0IHsgVFJBQ0VfTEVWRUwsIERFQlVHX0xFVkVMLCBJTkZPX0xFVkVMLCBXQVJOSU5HX0xFVkVMLCBFUlJPUl9MRVZFTCwgRkFUQUxfTEVWRUwgfSBmcm9tIFwiLi4vbGV2ZWxzXCI7XG5cbmNvbnN0IGxldmVscyA9IFtcbiAgVFJBQ0VfTEVWRUwsXG4gIERFQlVHX0xFVkVMLFxuICBJTkZPX0xFVkVMLFxuICBXQVJOSU5HX0xFVkVMLFxuICBFUlJPUl9MRVZFTCxcbiAgRkFUQUxfTEVWRUwsXG5dO1xuXG5sZXQgbG9nTGV2ZWwgPSBERUZBVUxUX0xPR19MRVZFTCxcbiAgICBsb2dGaWxlQmFzZU5hbWUgPSBERUZBVUxUX0xPR19GSUxFX0JBU0VfTkFNRSxcbiAgICBsb2dEaXJlY3RvcnlQYXRoID0gREVGQVVMVF9MT0dfRElSRUNUT1JZX1BBVEg7XG5cbmV4cG9ydCBmdW5jdGlvbiBsb2cobWVzc2FnZU9yRXJyb3IsIGxldmVsID0gRU1QVFlfU1RSSU5HKSB7XG4gIGxldCBzYWxpZW50U3RhY2tNZXNzYWdlSW5kZXggPSAxO1xuXG4gIGlmIChsZXZlbCAhPT0gRU1QVFlfU1RSSU5HKSB7XG4gICAgY29uc3QgbGV2ZWxJbmRleCA9IGxldmVscy5pbmRleE9mKGxldmVsKSxcbiAgICAgICAgICBsb2dMZXZlbEluZGV4ID0gbGV2ZWxzLmluZGV4T2YobG9nTGV2ZWwpO1xuXG4gICAgaWYgKGxldmVsSW5kZXggPCBsb2dMZXZlbEluZGV4KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgc2FsaWVudFN0YWNrTWVzc2FnZUluZGV4ICs9IDI7XG5cbiAgICBsZXZlbCA9IGAke2xldmVsfWA7ICAvLy9cbiAgfVxuXG4gIGxldCBlcnJvcixcbiAgICAgIG1lc3NhZ2U7XG5cbiAgaWYgKG1lc3NhZ2VPckVycm9yIGluc3RhbmNlb2YgRXJyb3IpIHtcbiAgICBlcnJvciA9IG1lc3NhZ2VPckVycm9yOyAvLy9cblxuICAgICh7IG1lc3NhZ2UgfSA9IGVycm9yKTtcbiAgfSBlbHNlIHtcbiAgICBtZXNzYWdlID0gbWVzc2FnZU9yRXJyb3I7IC8vL1xuXG4gICAgZXJyb3IgPSBuZXcgRXJyb3IobWVzc2FnZSk7XG4gIH1cblxuICBjb25zdCB7IHN0YWNrIH0gPSBlcnJvcixcbiAgICAgICAgc3RhY2tNZXNzYWdlcyA9IHN0YWNrTWVzc2FnZXNGcm9tU3RhY2soc3RhY2spLFxuICAgICAgICBzYWxpZW50U3RhY2tNZXNzYWdlID0gc3RhY2tNZXNzYWdlc1tzYWxpZW50U3RhY2tNZXNzYWdlSW5kZXhdLFxuICAgICAgICBzdGFja01lc3NhZ2UgPSBzYWxpZW50U3RhY2tNZXNzYWdlLCAvLy9cbiAgICAgICAgdXBwZXJDYXNlTGV2ZWwgPSBsZXZlbC50b1VwcGVyQ2FzZSgpLFxuICAgICAgICBjdXJyZW50RGF0ZUFuZFRpbWVTdHJpbmcgPSBnZXRDdXJyZW50RGF0ZUFuZFRpbWVTdHJpbmcoKSxcbiAgICAgICAgZmlsZVBhdGggPSBmaWxlUGF0aEZyb21TdGFja01lc3NhZ2Uoc3RhY2tNZXNzYWdlKSxcbiAgICAgICAgbGluZU51bWJlciA9IGxpbmVOdW1iZXJGcm9tU3RhY2tNZXNzYWdlKHN0YWNrTWVzc2FnZSk7XG5cbiAgbWVzc2FnZSA9IGAke3VwcGVyQ2FzZUxldmVsfSAke2N1cnJlbnREYXRlQW5kVGltZVN0cmluZ30gJHtmaWxlUGF0aH0oJHtsaW5lTnVtYmVyfSkgJHttZXNzYWdlfWA7XG5cbiAgY29uc29sZS5sb2cobWVzc2FnZSk7XG5cbiAgaWYgKGxvZ0RpcmVjdG9yeVBhdGggIT09IG51bGwpIHtcbiAgICByb2xsT3ZlckxvZ0ZpbGUoKTtcblxuICAgIGNvbnN0IGxvZ0ZpbGVQYXRoID0gZ2V0TG9nRmlsZVBhdGgoKSxcbiAgICAgICAgICBsb2dGaWxlQ29udGVudCA9IGAke21lc3NhZ2V9XFxuYDtcblxuICAgIGFwcGVuZFRvRmlsZShsb2dGaWxlUGF0aCwgbG9nRmlsZUNvbnRlbnQpO1xuICB9XG5cbiAgcmV0dXJuIG1lc3NhZ2U7XG59XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgbG9nXG59XG5cbmZ1bmN0aW9uIHRyYWNlKG1lc3NhZ2UpIHsgcmV0dXJuIGxvZyhtZXNzYWdlLCBUUkFDRV9MRVZFTCk7IH1cblxuZnVuY3Rpb24gZGVidWcobWVzc2FnZSkgeyByZXR1cm4gbG9nKG1lc3NhZ2UsIERFQlVHX0xFVkVMKTsgfVxuXG5mdW5jdGlvbiBpbmZvKG1lc3NhZ2UpIHsgcmV0dXJuIGxvZyhtZXNzYWdlLCBJTkZPX0xFVkVMKTsgfVxuXG5mdW5jdGlvbiB3YXJuaW5nKG1lc3NhZ2UpIHsgcmV0dXJuIGxvZyhtZXNzYWdlLCBXQVJOSU5HX0xFVkVMKTsgfVxuXG5mdW5jdGlvbiBlcnJvcihtZXNzYWdlKSB7IHJldHVybiBsb2cobWVzc2FnZSwgRVJST1JfTEVWRUwpOyB9XG5cbmZ1bmN0aW9uIGZhdGFsKG1lc3NhZ2UpIHsgcmV0dXJuIGxvZyhtZXNzYWdlLCBGQVRBTF9MRVZFTCk7IH1cblxuZnVuY3Rpb24gc2V0TG9nTGV2ZWwobGV2ZWwpIHsgbG9nTGV2ZWwgPSBsZXZlbDsgfVxuXG5mdW5jdGlvbiBzZXRMb2dPcHRpb25zKGxvZ09wdGlvbnMpIHtcbiAgY29uc3QgeyBsZXZlbCwgZmlsZUJhc2VOYW1lLCBkaXJlY3RvcnlQYXRoIH0gPSBsb2dPcHRpb25zO1xuXG4gIHNldExvZ0xldmVsKGxldmVsKTtcblxuICBzZXRMb2dGaWxlQmFzZU5hbWUoZmlsZUJhc2VOYW1lKTtcblxuICBzZXRMb2dEaXJlY3RvcnlQYXRoKGRpcmVjdG9yeVBhdGgpO1xufVxuXG5mdW5jdGlvbiBnZXRMb2dGaWxlQ29udGVudCgpIHtcbiAgY29uc3QgbG9nRmlsZVBhdGggPSBnZXRMb2dGaWxlUGF0aCgpLFxuICAgICAgICBsb2dGaWxlQ29udGVudCA9IHJlYWRGaWxlKGxvZ0ZpbGVQYXRoKTtcblxuICByZXR1cm4gbG9nRmlsZUNvbnRlbnQ7XG59XG5cbmZ1bmN0aW9uIHNldExvZ0ZpbGVCYXNlTmFtZShmaWxlQmFzZU5hbWUpIHsgbG9nRmlsZUJhc2VOYW1lID0gZmlsZUJhc2VOYW1lOyB9XG5cbmZ1bmN0aW9uIHNldExvZ0RpcmVjdG9yeVBhdGgoZGlyZWN0b3J5UGF0aCkgeyBsb2dEaXJlY3RvcnlQYXRoID0gZGlyZWN0b3J5UGF0aDsgfVxuXG5PYmplY3QuYXNzaWduKGxvZywge1xuICB0cmFjZSxcbiAgZGVidWcsXG4gIGluZm8sXG4gIHdhcm5pbmcsXG4gIGVycm9yLFxuICBmYXRhbCxcbiAgc2V0TG9nTGV2ZWwsXG4gIHNldExvZ09wdGlvbnMsXG4gIGdldExvZ0ZpbGVDb250ZW50LFxuICBzZXRMb2dGaWxlQmFzZU5hbWUsXG4gIHNldExvZ0RpcmVjdG9yeVBhdGhcbn0pO1xuXG5mdW5jdGlvbiBnZXRMb2dGaWxlUGF0aCgpIHtcbiAgY29uc3QgbG9nRmlsZU5hbWUgPSBgJHtsb2dGaWxlQmFzZU5hbWV9LmxvZ2AsXG4gICAgICAgIGxvZ0ZpbGVQYXRoID0gY29uY2F0ZW5hdGVQYXRocyhsb2dEaXJlY3RvcnlQYXRoLCBsb2dGaWxlTmFtZSk7XG5cbiAgcmV0dXJuIGxvZ0ZpbGVQYXRoO1xufVxuXG5mdW5jdGlvbiBnZXRSb2xsZWRPdmVyTG9nRmlsZVBhdGgoKSB7XG4gIGNvbnN0IGN1cnJlbnREYXRlU3RyaW5nID0gZ2V0Q3VycmVudERhdGVTdHJpbmcoKSxcbiAgICAgICAgcm9sbGVkT3ZlckxvZ0ZpbGVOYW1lID0gYCR7bG9nRmlsZUJhc2VOYW1lfS4ke2N1cnJlbnREYXRlU3RyaW5nfS5sb2dgLFxuICAgICAgICByb2xsZWRPdmVyTG9nRmlsZVBhdGggPSBjb25jYXRlbmF0ZVBhdGhzKGxvZ0RpcmVjdG9yeVBhdGgsIHJvbGxlZE92ZXJMb2dGaWxlTmFtZSk7XG5cbiAgcmV0dXJuIHJvbGxlZE92ZXJMb2dGaWxlUGF0aDtcbn1cblxuZnVuY3Rpb24gZ2V0TG9nRmlsZUxhc3RNb2RpZmllZERhdGUoKSB7XG4gIGNvbnN0IGxvZ0ZpbGVQYXRoID0gZ2V0TG9nRmlsZVBhdGgoKSxcbiAgICAgICAgbG9nRmlsZVN0YXRzID0gZ2V0U3RhdHMobG9nRmlsZVBhdGgpLFxuICAgICAgICB7IG10aW1lIH0gPSBsb2dGaWxlU3RhdHMsXG4gICAgICAgIGxvZ0ZpbGVMYXN0TW9kaWZpZWREYXRlID0gbmV3IERhdGUobXRpbWUpOyAgLy8vXG5cbiAgcmV0dXJuIGxvZ0ZpbGVMYXN0TW9kaWZpZWREYXRlO1xufVxuXG5mdW5jdGlvbiByb2xsT3ZlckxvZ0ZpbGUoKSB7XG4gIGNvbnN0IGxvZ0ZpbGVQYXRoID0gZ2V0TG9nRmlsZVBhdGgoKSxcbiAgICAgICAgbG9nRmlsZUV4aXN0cyA9IGNoZWNrRmlsZUV4aXN0cyhsb2dGaWxlUGF0aCk7XG5cbiAgaWYgKCFsb2dGaWxlRXhpc3RzKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgY29uc3QgbG9nRmlsZUxhc3RNb2RpZmllZERhdGUgPSBnZXRMb2dGaWxlTGFzdE1vZGlmaWVkRGF0ZSgpLFxuICAgICAgICBsb2dGaWxlTGFzdE1vZGlmaWVkRGF0ZUN1cnJlbnREYXRlID0gaXNEYXRlQ3VycmVudERhdGUobG9nRmlsZUxhc3RNb2RpZmllZERhdGUpO1xuXG4gIGlmICghbG9nRmlsZUxhc3RNb2RpZmllZERhdGVDdXJyZW50RGF0ZSkge1xuICAgIGNvbnN0IHJvbGxlZE92ZXJMb2dGaWxlUGF0aCA9IGdldFJvbGxlZE92ZXJMb2dGaWxlUGF0aCgpO1xuXG4gICAgcmVuYW1lRmlsZShsb2dGaWxlUGF0aCwgcm9sbGVkT3ZlckxvZ0ZpbGVQYXRoKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBpc0RhdGVDdXJyZW50RGF0ZShkYXRlKSB7XG4gIGNvbnN0IGN1cnJlbnREYXRlID0gbmV3IERhdGUoKSxcbiAgICAgICAgZGF0ZVN0cmluZyA9IGRhdGUudG9EYXRlU3RyaW5nKCksXG4gICAgICAgIGN1cnJlbnREYXRlU3RyaW5nID0gY3VycmVudERhdGUudG9EYXRlU3RyaW5nKCksXG4gICAgICAgIGRhdGVDdXJyZW50RGF0ZSA9IChkYXRlU3RyaW5nID09PSBjdXJyZW50RGF0ZVN0cmluZyk7XG5cbiAgcmV0dXJuIGRhdGVDdXJyZW50RGF0ZTtcbn1cblxuZnVuY3Rpb24gZ2V0Q3VycmVudERhdGVTdHJpbmcoKSB7XG4gIGNvbnN0IGRhdGUgPSBuZXcgRGF0ZSgpLFxuICAgICAgICBkYXkgPSBwYWRTdGFydFdpdGhaZXJvZXMoZGF0ZS5nZXREYXRlKCksIDIpLCAgLy8vXG4gICAgICAgIG1vbnRoID0gcGFkU3RhcnRXaXRoWmVyb2VzKGRhdGUuZ2V0TW9udGgoKSArIDEsIDIpLCAvLy9cbiAgICAgICAgeWVhciA9IGRhdGUuZ2V0RnVsbFllYXIoKSxcbiAgICAgICAgY3VycmVudERhdGVBbmRUaW1lU3RyaW5nID0gYCR7ZGF5fS0ke21vbnRofS0ke3llYXJ9YDtcblxuICByZXR1cm4gY3VycmVudERhdGVBbmRUaW1lU3RyaW5nO1xufVxuXG5mdW5jdGlvbiBnZXRDdXJyZW50RGF0ZUFuZFRpbWVTdHJpbmcoKSB7XG4gIGNvbnN0IGRhdGUgPSBuZXcgRGF0ZSgpLFxuICAgICAgICBkYXkgPSBwYWRTdGFydFdpdGhaZXJvZXMoZGF0ZS5nZXREYXRlKCksIDIpLCAgLy8vXG4gICAgICAgIG1vbnRoID0gcGFkU3RhcnRXaXRoWmVyb2VzKGRhdGUuZ2V0TW9udGgoKSArIDEsIDIpLCAvLy9cbiAgICAgICAgeWVhciA9IGRhdGUuZ2V0RnVsbFllYXIoKSxcbiAgICAgICAgaG91cnMgPSBwYWRTdGFydFdpdGhaZXJvZXMoZGF0ZS5nZXRIb3VycygpLCAyKSxcbiAgICAgICAgbWludXRlcyA9IHBhZFN0YXJ0V2l0aFplcm9lcyhkYXRlLmdldE1pbnV0ZXMoKSwgMiksXG4gICAgICAgIHNlY29uZHMgPSBwYWRTdGFydFdpdGhaZXJvZXMoZGF0ZS5nZXRTZWNvbmRzKCksIDIpLFxuICAgICAgICBtaWxsaXNlY29uZHMgPSBwYWRTdGFydFdpdGhaZXJvZXMoZGF0ZS5nZXRNaWxsaXNlY29uZHMoKSwgMyksXG4gICAgICAgIGN1cnJlbnREYXRlQW5kVGltZVN0cmluZyA9IGAke2RheX0tJHttb250aH0tJHt5ZWFyfSAke2hvdXJzfToke21pbnV0ZXN9OiR7c2Vjb25kc30uJHttaWxsaXNlY29uZHN9YDtcblxuICByZXR1cm4gY3VycmVudERhdGVBbmRUaW1lU3RyaW5nO1xufVxuXG5mdW5jdGlvbiBzdGFja01lc3NhZ2VzRnJvbVN0YWNrKHN0YWNrKSB7XG4gIGNvbnN0IHN0YWNrTWVzc2FnZXMgPSBbXSxcbiAgICAgICAgc3RhY2tMaW5lcyA9IHN0YWNrLnNwbGl0KC9cXHJcXG58XFxuLyk7XG5cbiAgbGV0IHN0YWNrTWVzc2FnZSA9IEVNUFRZX1NUUklORztcblxuICBzdGFja0xpbmVzLmZvckVhY2goKHN0YWNrTGluZSkgPT4ge1xuICAgIGNvbnN0IG1hdGNoZXMgPSAvXlxccyphdC4qLy50ZXN0KHN0YWNrTGluZSk7XG5cbiAgICBzdGFja01lc3NhZ2UgPSAoc3RhY2tNZXNzYWdlID09PSBFTVBUWV9TVFJJTkcpID9cbiAgICAgICAgICAgICAgICAgICAgICBzdGFja0xpbmUgOlxuICAgICAgICAgICAgICAgICAgICAgICAgYCR7c3RhY2tNZXNzYWdlfVxcbiR7c3RhY2tMaW5lfWA7XG5cbiAgICBpZiAobWF0Y2hlcykge1xuICAgICAgc3RhY2tNZXNzYWdlcy5wdXNoKHN0YWNrTWVzc2FnZSk7XG5cbiAgICAgIHN0YWNrTWVzc2FnZSA9IEVNUFRZX1NUUklORztcbiAgICB9XG4gIH0pO1xuXG4gIHJldHVybiBzdGFja01lc3NhZ2VzO1xufVxuXG5mdW5jdGlvbiBmaWxlUGF0aEZyb21TdGFja01lc3NhZ2Uoc3RhY2tNZXNzYWdlKSB7XG4gIGNvbnN0IG1hdGNoZXMgPSBzdGFja01lc3NhZ2UubWF0Y2goLyhcXC8uKyk6XFxkKzpcXGQrL20pLFxuICAgICAgICBzZWNvbmRNYXRjaCA9IHNlY29uZChtYXRjaGVzKSxcbiAgICAgICAgYWJzb2x1dGVGaWxlUGF0aCA9IHNlY29uZE1hdGNoLCAgLy8vXG4gICAgICAgIGN1cnJlbnRXb3JraW5nRGlyZWN0b3J5UGF0aCA9IHBhdGgucmVzb2x2ZShcIi5cIiksICAvLy9cbiAgICAgICAgY3VycmVudFdvcmtpbmdEaXJlY3RvcnlQYXRoTGVuZ3RoID0gY3VycmVudFdvcmtpbmdEaXJlY3RvcnlQYXRoLmxlbmd0aCxcbiAgICAgICAgc3RhcnQgPSBjdXJyZW50V29ya2luZ0RpcmVjdG9yeVBhdGhMZW5ndGggKyAxLCAgLy8vXG4gICAgICAgIGZpbGVQYXRoID0gYWJzb2x1dGVGaWxlUGF0aC5zdWJzdHIoc3RhcnQpO1xuXG4gIHJldHVybiBmaWxlUGF0aDtcbn1cblxuZnVuY3Rpb24gbGluZU51bWJlckZyb21TdGFja01lc3NhZ2Uoc3RhY2tNZXNzYWdlKSB7XG4gIGNvbnN0IG1hdGNoZXMgPSBzdGFja01lc3NhZ2UubWF0Y2goLzooXFxkKykvbSksXG4gICAgICAgIHNlY29uZE1hdGNoID0gc2Vjb25kKG1hdGNoZXMpLFxuICAgICAgICBsaW5lTnVtYmVyID0gc2Vjb25kTWF0Y2g7IC8vL1xuXG4gIHJldHVybiBsaW5lTnVtYmVyO1xufVxuXG5mdW5jdGlvbiBwYWRTdGFydFdpdGhaZXJvZXMoc3RyaW5nLCBsZW5ndGgpIHtcbiAgY29uc3QgcGFkU3RyaW5nID0gWkVSTywgLy8vXG4gICAgICAgIHBhZGRlZFN0cmluZyA9IHBhZFN0YXJ0KHN0cmluZywgbGVuZ3RoLCBwYWRTdHJpbmcpO1xuXG4gIHJldHVybiBwYWRkZWRTdHJpbmc7XG59XG5cbmZ1bmN0aW9uIHBhZFN0YXJ0KHN0cmluZywgbGVuZ3RoLCBwYWRTdHJpbmcpIHtcbiAgbGV0IHBhZGRpbmcgPSBFTVBUWV9TVFJJTkc7XG5cbiAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IGxlbmd0aDsgaW5kZXgrKykge1xuICAgIHBhZGRpbmcgKz0gcGFkU3RyaW5nO1xuICB9XG5cbiAgY29uc3QgcGFkZGVkU3RyaW5nID0gYCR7cGFkZGluZ30ke3N0cmluZ31gLnN1YnN0cigtbGVuZ3RoKTtcblxuICByZXR1cm4gcGFkZGVkU3RyaW5nO1xufVxuIl0sIm5hbWVzIjpbImxvZyIsImxldmVscyIsIlRSQUNFX0xFVkVMIiwiREVCVUdfTEVWRUwiLCJJTkZPX0xFVkVMIiwiV0FSTklOR19MRVZFTCIsIkVSUk9SX0xFVkVMIiwiRkFUQUxfTEVWRUwiLCJsb2dMZXZlbCIsIkRFRkFVTFRfTE9HX0xFVkVMIiwibG9nRmlsZUJhc2VOYW1lIiwiREVGQVVMVF9MT0dfRklMRV9CQVNFX05BTUUiLCJsb2dEaXJlY3RvcnlQYXRoIiwiREVGQVVMVF9MT0dfRElSRUNUT1JZX1BBVEgiLCJtZXNzYWdlT3JFcnJvciIsImxldmVsIiwiRU1QVFlfU1RSSU5HIiwic2FsaWVudFN0YWNrTWVzc2FnZUluZGV4IiwibGV2ZWxJbmRleCIsImluZGV4T2YiLCJsb2dMZXZlbEluZGV4IiwiZXJyb3IiLCJtZXNzYWdlIiwiRXJyb3IiLCJzdGFjayIsInN0YWNrTWVzc2FnZXMiLCJzdGFja01lc3NhZ2VzRnJvbVN0YWNrIiwic2FsaWVudFN0YWNrTWVzc2FnZSIsInN0YWNrTWVzc2FnZSIsInVwcGVyQ2FzZUxldmVsIiwidG9VcHBlckNhc2UiLCJjdXJyZW50RGF0ZUFuZFRpbWVTdHJpbmciLCJnZXRDdXJyZW50RGF0ZUFuZFRpbWVTdHJpbmciLCJmaWxlUGF0aCIsImZpbGVQYXRoRnJvbVN0YWNrTWVzc2FnZSIsImxpbmVOdW1iZXIiLCJsaW5lTnVtYmVyRnJvbVN0YWNrTWVzc2FnZSIsImNvbnNvbGUiLCJyb2xsT3ZlckxvZ0ZpbGUiLCJsb2dGaWxlUGF0aCIsImdldExvZ0ZpbGVQYXRoIiwibG9nRmlsZUNvbnRlbnQiLCJhcHBlbmRUb0ZpbGUiLCJ0cmFjZSIsImRlYnVnIiwiaW5mbyIsIndhcm5pbmciLCJmYXRhbCIsInNldExvZ0xldmVsIiwic2V0TG9nT3B0aW9ucyIsImxvZ09wdGlvbnMiLCJmaWxlQmFzZU5hbWUiLCJkaXJlY3RvcnlQYXRoIiwic2V0TG9nRmlsZUJhc2VOYW1lIiwic2V0TG9nRGlyZWN0b3J5UGF0aCIsImdldExvZ0ZpbGVDb250ZW50IiwicmVhZEZpbGUiLCJPYmplY3QiLCJhc3NpZ24iLCJsb2dGaWxlTmFtZSIsImNvbmNhdGVuYXRlUGF0aHMiLCJnZXRSb2xsZWRPdmVyTG9nRmlsZVBhdGgiLCJjdXJyZW50RGF0ZVN0cmluZyIsImdldEN1cnJlbnREYXRlU3RyaW5nIiwicm9sbGVkT3ZlckxvZ0ZpbGVOYW1lIiwicm9sbGVkT3ZlckxvZ0ZpbGVQYXRoIiwiZ2V0TG9nRmlsZUxhc3RNb2RpZmllZERhdGUiLCJsb2dGaWxlU3RhdHMiLCJnZXRTdGF0cyIsIm10aW1lIiwibG9nRmlsZUxhc3RNb2RpZmllZERhdGUiLCJEYXRlIiwibG9nRmlsZUV4aXN0cyIsImNoZWNrRmlsZUV4aXN0cyIsImxvZ0ZpbGVMYXN0TW9kaWZpZWREYXRlQ3VycmVudERhdGUiLCJpc0RhdGVDdXJyZW50RGF0ZSIsInJlbmFtZUZpbGUiLCJkYXRlIiwiY3VycmVudERhdGUiLCJkYXRlU3RyaW5nIiwidG9EYXRlU3RyaW5nIiwiZGF0ZUN1cnJlbnREYXRlIiwiZGF5IiwicGFkU3RhcnRXaXRoWmVyb2VzIiwiZ2V0RGF0ZSIsIm1vbnRoIiwiZ2V0TW9udGgiLCJ5ZWFyIiwiZ2V0RnVsbFllYXIiLCJob3VycyIsImdldEhvdXJzIiwibWludXRlcyIsImdldE1pbnV0ZXMiLCJzZWNvbmRzIiwiZ2V0U2Vjb25kcyIsIm1pbGxpc2Vjb25kcyIsImdldE1pbGxpc2Vjb25kcyIsInN0YWNrTGluZXMiLCJzcGxpdCIsImZvckVhY2giLCJzdGFja0xpbmUiLCJtYXRjaGVzIiwidGVzdCIsInB1c2giLCJtYXRjaCIsInNlY29uZE1hdGNoIiwic2Vjb25kIiwiYWJzb2x1dGVGaWxlUGF0aCIsImN1cnJlbnRXb3JraW5nRGlyZWN0b3J5UGF0aCIsInBhdGgiLCJyZXNvbHZlIiwiY3VycmVudFdvcmtpbmdEaXJlY3RvcnlQYXRoTGVuZ3RoIiwibGVuZ3RoIiwic3RhcnQiLCJzdWJzdHIiLCJzdHJpbmciLCJwYWRTdHJpbmciLCJaRVJPIiwicGFkZGVkU3RyaW5nIiwicGFkU3RhcnQiLCJwYWRkaW5nIiwiaW5kZXgiXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7OztRQThFQTtlQUFBOztRQXREZ0JBO2VBQUFBOzs7NkRBdEJDO3VCQUVNO3VCQUNVOzJCQUNFOzRCQUMyQzswQkFDWTt3QkFDSTs7Ozs7O0FBRTlGLE1BQU1DLFNBQVM7SUFDYkMsbUJBQVc7SUFDWEMsbUJBQVc7SUFDWEMsa0JBQVU7SUFDVkMscUJBQWE7SUFDYkMsbUJBQVc7SUFDWEMsbUJBQVc7Q0FDWjtBQUVELElBQUlDLFdBQVdDLDJCQUFpQixFQUM1QkMsa0JBQWtCQyxvQ0FBMEIsRUFDNUNDLG1CQUFtQkMsb0NBQTBCO0FBRTFDLFNBQVNiLElBQUljLGNBQWMsRUFBRUMsUUFBUUMsdUJBQVk7SUFDdEQsSUFBSUMsMkJBQTJCO0lBRS9CLElBQUlGLFVBQVVDLHVCQUFZLEVBQUU7UUFDMUIsTUFBTUUsYUFBYWpCLE9BQU9rQixPQUFPLENBQUNKLFFBQzVCSyxnQkFBZ0JuQixPQUFPa0IsT0FBTyxDQUFDWDtRQUVyQyxJQUFJVSxhQUFhRSxlQUFlO1lBQzlCO1FBQ0Y7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
@@ -31,45 +31,45 @@ _export(exports, {
31
31
  return getVersion;
32
32
  }
33
33
  });
34
- var _array = require("../utilities/array");
35
- var _fileSystem = require("../utilities/fileSystem");
36
- var _path = require("../utilities/path");
37
- var PACKAGE_JSON = require("../constants").PACKAGE_JSON;
38
- var packageJSON = null;
34
+ const _array = require("../utilities/array");
35
+ const _fileSystem = require("../utilities/fileSystem");
36
+ const _path = require("../utilities/path");
37
+ const { PACKAGE_JSON } = require("../constants");
38
+ let packageJSON = null;
39
39
  function getName() {
40
- var packageJSON = getPackageJSON(), _packageJSON_name = packageJSON.name, name = _packageJSON_name === void 0 ? null : _packageJSON_name;
40
+ const packageJSON = getPackageJSON(), { name = null } = packageJSON;
41
41
  return name;
42
42
  }
43
43
  function getAuthor() {
44
- var packageJSON = getPackageJSON(), _packageJSON_author = packageJSON.author, author = _packageJSON_author === void 0 ? null : _packageJSON_author;
44
+ const packageJSON = getPackageJSON(), { author = null } = packageJSON;
45
45
  return author;
46
46
  }
47
47
  function getVersion() {
48
- var packageJSON = getPackageJSON(), _packageJSON_version = packageJSON.version, version = _packageJSON_version === void 0 ? null : _packageJSON_version;
48
+ const packageJSON = getPackageJSON(), { version = null } = packageJSON;
49
49
  return version;
50
50
  }
51
51
  function getLicense() {
52
- var packageJSON = getPackageJSON(), _packageJSON_license = packageJSON.license, license = _packageJSON_license === void 0 ? null : _packageJSON_license;
52
+ const packageJSON = getPackageJSON(), { license = null } = packageJSON;
53
53
  return license;
54
54
  }
55
55
  function getPackagePath() {
56
- var matches = __dirname.match(/^(.+)[\/\\]node_modules/), secondMatch = (0, _array.second)(matches), packagePath = secondMatch; ///
56
+ const matches = __dirname.match(/^(.+)[\/\\]node_modules/), secondMatch = (0, _array.second)(matches), packagePath = secondMatch; ///
57
57
  return packagePath;
58
58
  }
59
59
  function getPackageJSON() {
60
60
  if (packageJSON === null) {
61
- var packagePath = getPackagePath(), packageJSONFilePath = (0, _path.concatenatePaths)(packagePath, PACKAGE_JSON), packageJSONFileContent = (0, _fileSystem.readFile)(packageJSONFilePath);
61
+ const packagePath = getPackagePath(), packageJSONFilePath = (0, _path.concatenatePaths)(packagePath, PACKAGE_JSON), packageJSONFileContent = (0, _fileSystem.readFile)(packageJSONFilePath);
62
62
  packageJSON = JSON.parse(packageJSONFileContent);
63
63
  }
64
64
  return packageJSON;
65
65
  }
66
- var _default = {
67
- getName: getName,
68
- getAuthor: getAuthor,
69
- getVersion: getVersion,
70
- getLicense: getLicense,
71
- getPackagePath: getPackagePath,
72
- getPackageJSON: getPackageJSON
66
+ const _default = {
67
+ getName,
68
+ getAuthor,
69
+ getVersion,
70
+ getLicense,
71
+ getPackagePath,
72
+ getPackageJSON
73
73
  };
74
74
 
75
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlsaXRpZXMvcGFja2FnZS5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcblxuY29uc3QgeyBQQUNLQUdFX0pTT04gfSA9IHJlcXVpcmUoXCIuLi9jb25zdGFudHNcIik7XG5cbmltcG9ydCB7IHNlY29uZCB9IGZyb20gXCIuLi91dGlsaXRpZXMvYXJyYXlcIjtcbmltcG9ydCB7IHJlYWRGaWxlIH0gZnJvbSBcIi4uL3V0aWxpdGllcy9maWxlU3lzdGVtXCI7XG5pbXBvcnQgeyBjb25jYXRlbmF0ZVBhdGhzIH0gZnJvbSBcIi4uL3V0aWxpdGllcy9wYXRoXCI7XG5cbmxldCBwYWNrYWdlSlNPTiA9IG51bGw7XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXROYW1lKCkge1xuICBjb25zdCBwYWNrYWdlSlNPTiA9IGdldFBhY2thZ2VKU09OKCksXG4gICAgICAgIHsgbmFtZSA9IG51bGwgfSA9IHBhY2thZ2VKU09OO1xuXG4gIHJldHVybiBuYW1lO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0QXV0aG9yKCkge1xuICBjb25zdCBwYWNrYWdlSlNPTiA9IGdldFBhY2thZ2VKU09OKCksXG4gICAgICAgIHsgYXV0aG9yID0gbnVsbCB9ID0gcGFja2FnZUpTT047XG5cbiAgcmV0dXJuIGF1dGhvcjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFZlcnNpb24oKSB7XG4gIGNvbnN0IHBhY2thZ2VKU09OID0gZ2V0UGFja2FnZUpTT04oKSxcbiAgICAgICAgeyB2ZXJzaW9uID0gbnVsbCB9ID0gcGFja2FnZUpTT047XG5cbiAgcmV0dXJuIHZlcnNpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRMaWNlbnNlKCkge1xuICBjb25zdCBwYWNrYWdlSlNPTiA9IGdldFBhY2thZ2VKU09OKCksXG4gICAgICAgIHsgbGljZW5zZSA9IG51bGwgfSA9IHBhY2thZ2VKU09OO1xuXG4gIHJldHVybiBsaWNlbnNlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0UGFja2FnZVBhdGgoKSB7XG4gIGNvbnN0IG1hdGNoZXMgPSBfX2Rpcm5hbWUubWF0Y2goL14oLispW1xcL1xcXFxdbm9kZV9tb2R1bGVzLyksXG4gICAgICAgIHNlY29uZE1hdGNoID0gc2Vjb25kKG1hdGNoZXMpLFxuICAgICAgICBwYWNrYWdlUGF0aCA9IHNlY29uZE1hdGNoOyAvLy9cblxuICByZXR1cm4gcGFja2FnZVBhdGg7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRQYWNrYWdlSlNPTigpIHtcbiAgaWYgKHBhY2thZ2VKU09OID09PSBudWxsKSB7XG4gICAgY29uc3QgcGFja2FnZVBhdGggPSBnZXRQYWNrYWdlUGF0aCgpLFxuICAgICAgICAgIHBhY2thZ2VKU09ORmlsZVBhdGggPSBjb25jYXRlbmF0ZVBhdGhzKHBhY2thZ2VQYXRoLCBQQUNLQUdFX0pTT04pLFxuICAgICAgICAgIHBhY2thZ2VKU09ORmlsZUNvbnRlbnQgPSByZWFkRmlsZShwYWNrYWdlSlNPTkZpbGVQYXRoKTtcblxuICAgIHBhY2thZ2VKU09OID0gSlNPTi5wYXJzZShwYWNrYWdlSlNPTkZpbGVDb250ZW50KTtcbiAgfVxuXG4gIHJldHVybiBwYWNrYWdlSlNPTjtcbn1cblxuZXhwb3J0IGRlZmF1bHQge1xuICBnZXROYW1lLFxuICBnZXRBdXRob3IsXG4gIGdldFZlcnNpb24sXG4gIGdldExpY2Vuc2UsXG4gIGdldFBhY2thZ2VQYXRoLFxuICBnZXRQYWNrYWdlSlNPTlxufTtcbiJdLCJuYW1lcyI6WyJnZXRBdXRob3IiLCJnZXRMaWNlbnNlIiwiZ2V0TmFtZSIsImdldFBhY2thZ2VKU09OIiwiZ2V0UGFja2FnZVBhdGgiLCJnZXRWZXJzaW9uIiwiUEFDS0FHRV9KU09OIiwicmVxdWlyZSIsInBhY2thZ2VKU09OIiwibmFtZSIsImF1dGhvciIsInZlcnNpb24iLCJsaWNlbnNlIiwibWF0Y2hlcyIsIl9fZGlybmFtZSIsIm1hdGNoIiwic2Vjb25kTWF0Y2giLCJzZWNvbmQiLCJwYWNrYWdlUGF0aCIsInBhY2thZ2VKU09ORmlsZVBhdGgiLCJjb25jYXRlbmF0ZVBhdGhzIiwicGFja2FnZUpTT05GaWxlQ29udGVudCIsInJlYWRGaWxlIiwiSlNPTiIsInBhcnNlIl0sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7UUEwREE7ZUFBQTs7UUF6Q2dCQTtlQUFBQTs7UUFjQUM7ZUFBQUE7O1FBckJBQztlQUFBQTs7UUFvQ0FDO2VBQUFBOztRQVJBQztlQUFBQTs7UUFkQUM7ZUFBQUE7OztxQkFwQk87MEJBQ0U7b0JBQ1E7QUFKakMsSUFBTSxBQUFFQyxlQUFpQkMsUUFBUSxnQkFBekJEO0FBTVIsSUFBSUUsY0FBYztBQUVYLFNBQVNOO0lBQ2QsSUFBTU0sY0FBY0wsc0NBQ0lLLFlBQWhCQyxNQUFBQSxzQ0FBTztJQUVmLE9BQU9BO0FBQ1Q7QUFFTyxTQUFTVDtJQUNkLElBQU1RLGNBQWNMLHdDQUNNSyxZQUFsQkUsUUFBQUEsMENBQVM7SUFFakIsT0FBT0E7QUFDVDtBQUVPLFNBQVNMO0lBQ2QsSUFBTUcsY0FBY0wseUNBQ09LLFlBQW5CRyxTQUFBQSw0Q0FBVTtJQUVsQixPQUFPQTtBQUNUO0FBRU8sU0FBU1Y7SUFDZCxJQUFNTyxjQUFjTCx5Q0FDT0ssWUFBbkJJLFNBQUFBLDRDQUFVO0lBRWxCLE9BQU9BO0FBQ1Q7QUFFTyxTQUFTUjtJQUNkLElBQU1TLFVBQVVDLFVBQVVDLEtBQUssQ0FBQyw0QkFDMUJDLGNBQWNDLElBQUFBLGFBQU0sRUFBQ0osVUFDckJLLGNBQWNGLGFBQWEsR0FBRztJQUVwQyxPQUFPRTtBQUNUO0FBRU8sU0FBU2Y7SUFDZCxJQUFJSyxnQkFBZ0IsTUFBTTtRQUN4QixJQUFNVSxjQUFjZCxrQkFDZGUsc0JBQXNCQyxJQUFBQSxzQkFBZ0IsRUFBQ0YsYUFBYVosZUFDcERlLHlCQUF5QkMsSUFBQUEsb0JBQVEsRUFBQ0g7UUFFeENYLGNBQWNlLEtBQUtDLEtBQUssQ0FBQ0g7SUFDM0I7SUFFQSxPQUFPYjtBQUNUO0lBRUEsV0FBZTtJQUNiTixTQUFBQTtJQUNBRixXQUFBQTtJQUNBSyxZQUFBQTtJQUNBSixZQUFBQTtJQUNBRyxnQkFBQUE7SUFDQUQsZ0JBQUFBO0FBQ0YifQ==
75
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlsaXRpZXMvcGFja2FnZS5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcblxuY29uc3QgeyBQQUNLQUdFX0pTT04gfSA9IHJlcXVpcmUoXCIuLi9jb25zdGFudHNcIik7XG5cbmltcG9ydCB7IHNlY29uZCB9IGZyb20gXCIuLi91dGlsaXRpZXMvYXJyYXlcIjtcbmltcG9ydCB7IHJlYWRGaWxlIH0gZnJvbSBcIi4uL3V0aWxpdGllcy9maWxlU3lzdGVtXCI7XG5pbXBvcnQgeyBjb25jYXRlbmF0ZVBhdGhzIH0gZnJvbSBcIi4uL3V0aWxpdGllcy9wYXRoXCI7XG5cbmxldCBwYWNrYWdlSlNPTiA9IG51bGw7XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXROYW1lKCkge1xuICBjb25zdCBwYWNrYWdlSlNPTiA9IGdldFBhY2thZ2VKU09OKCksXG4gICAgICAgIHsgbmFtZSA9IG51bGwgfSA9IHBhY2thZ2VKU09OO1xuXG4gIHJldHVybiBuYW1lO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0QXV0aG9yKCkge1xuICBjb25zdCBwYWNrYWdlSlNPTiA9IGdldFBhY2thZ2VKU09OKCksXG4gICAgICAgIHsgYXV0aG9yID0gbnVsbCB9ID0gcGFja2FnZUpTT047XG5cbiAgcmV0dXJuIGF1dGhvcjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFZlcnNpb24oKSB7XG4gIGNvbnN0IHBhY2thZ2VKU09OID0gZ2V0UGFja2FnZUpTT04oKSxcbiAgICAgICAgeyB2ZXJzaW9uID0gbnVsbCB9ID0gcGFja2FnZUpTT047XG5cbiAgcmV0dXJuIHZlcnNpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRMaWNlbnNlKCkge1xuICBjb25zdCBwYWNrYWdlSlNPTiA9IGdldFBhY2thZ2VKU09OKCksXG4gICAgICAgIHsgbGljZW5zZSA9IG51bGwgfSA9IHBhY2thZ2VKU09OO1xuXG4gIHJldHVybiBsaWNlbnNlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0UGFja2FnZVBhdGgoKSB7XG4gIGNvbnN0IG1hdGNoZXMgPSBfX2Rpcm5hbWUubWF0Y2goL14oLispW1xcL1xcXFxdbm9kZV9tb2R1bGVzLyksXG4gICAgICAgIHNlY29uZE1hdGNoID0gc2Vjb25kKG1hdGNoZXMpLFxuICAgICAgICBwYWNrYWdlUGF0aCA9IHNlY29uZE1hdGNoOyAvLy9cblxuICByZXR1cm4gcGFja2FnZVBhdGg7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRQYWNrYWdlSlNPTigpIHtcbiAgaWYgKHBhY2thZ2VKU09OID09PSBudWxsKSB7XG4gICAgY29uc3QgcGFja2FnZVBhdGggPSBnZXRQYWNrYWdlUGF0aCgpLFxuICAgICAgICAgIHBhY2thZ2VKU09ORmlsZVBhdGggPSBjb25jYXRlbmF0ZVBhdGhzKHBhY2thZ2VQYXRoLCBQQUNLQUdFX0pTT04pLFxuICAgICAgICAgIHBhY2thZ2VKU09ORmlsZUNvbnRlbnQgPSByZWFkRmlsZShwYWNrYWdlSlNPTkZpbGVQYXRoKTtcblxuICAgIHBhY2thZ2VKU09OID0gSlNPTi5wYXJzZShwYWNrYWdlSlNPTkZpbGVDb250ZW50KTtcbiAgfVxuXG4gIHJldHVybiBwYWNrYWdlSlNPTjtcbn1cblxuZXhwb3J0IGRlZmF1bHQge1xuICBnZXROYW1lLFxuICBnZXRBdXRob3IsXG4gIGdldFZlcnNpb24sXG4gIGdldExpY2Vuc2UsXG4gIGdldFBhY2thZ2VQYXRoLFxuICBnZXRQYWNrYWdlSlNPTlxufTtcbiJdLCJuYW1lcyI6WyJnZXRBdXRob3IiLCJnZXRMaWNlbnNlIiwiZ2V0TmFtZSIsImdldFBhY2thZ2VKU09OIiwiZ2V0UGFja2FnZVBhdGgiLCJnZXRWZXJzaW9uIiwiUEFDS0FHRV9KU09OIiwicmVxdWlyZSIsInBhY2thZ2VKU09OIiwibmFtZSIsImF1dGhvciIsInZlcnNpb24iLCJsaWNlbnNlIiwibWF0Y2hlcyIsIl9fZGlybmFtZSIsIm1hdGNoIiwic2Vjb25kTWF0Y2giLCJzZWNvbmQiLCJwYWNrYWdlUGF0aCIsInBhY2thZ2VKU09ORmlsZVBhdGgiLCJjb25jYXRlbmF0ZVBhdGhzIiwicGFja2FnZUpTT05GaWxlQ29udGVudCIsInJlYWRGaWxlIiwiSlNPTiIsInBhcnNlIl0sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7UUEwREE7ZUFBQTs7UUF6Q2dCQTtlQUFBQTs7UUFjQUM7ZUFBQUE7O1FBckJBQztlQUFBQTs7UUFvQ0FDO2VBQUFBOztRQVJBQztlQUFBQTs7UUFkQUM7ZUFBQUE7Ozt1QkFwQk87NEJBQ0U7c0JBQ1E7QUFKakMsTUFBTSxFQUFFQyxZQUFZLEVBQUUsR0FBR0MsUUFBUTtBQU1qQyxJQUFJQyxjQUFjO0FBRVgsU0FBU047SUFDZCxNQUFNTSxjQUFjTCxrQkFDZCxFQUFFTSxPQUFPLElBQUksRUFBRSxHQUFHRDtJQUV4QixPQUFPQztBQUNUO0FBRU8sU0FBU1Q7SUFDZCxNQUFNUSxjQUFjTCxrQkFDZCxFQUFFTyxTQUFTLElBQUksRUFBRSxHQUFHRjtJQUUxQixPQUFPRTtBQUNUO0FBRU8sU0FBU0w7SUFDZCxNQUFNRyxjQUFjTCxrQkFDZCxFQUFFUSxVQUFVLElBQUksRUFBRSxHQUFHSDtJQUUzQixPQUFPRztBQUNUO0FBRU8sU0FBU1Y7SUFDZCxNQUFNTyxjQUFjTCxrQkFDZCxFQUFFUyxVQUFVLElBQUksRUFBRSxHQUFHSjtJQUUzQixPQUFPSTtBQUNUO0FBRU8sU0FBU1I7SUFDZCxNQUFNUyxVQUFVQyxVQUFVQyxLQUFLLENBQUMsNEJBQzFCQyxjQUFjQyxJQUFBQSxhQUFNLEVBQUNKLFVBQ3JCSyxjQUFjRixhQUFhLEdBQUc7SUFFcEMsT0FBT0U7QUFDVDtBQUVPLFNBQVNmO0lBQ2QsSUFBSUssZ0JBQWdCLE1BQU07UUFDeEIsTUFBTVUsY0FBY2Qsa0JBQ2RlLHNCQUFzQkMsSUFBQUEsc0JBQWdCLEVBQUNGLGFBQWFaLGVBQ3BEZSx5QkFBeUJDLElBQUFBLG9CQUFRLEVBQUNIO1FBRXhDWCxjQUFjZSxLQUFLQyxLQUFLLENBQUNIO0lBQzNCO0lBRUEsT0FBT2I7QUFDVDtNQUVBLFdBQWU7SUFDYk47SUFDQUY7SUFDQUs7SUFDQUo7SUFDQUc7SUFDQUQ7QUFDRiJ9
@@ -49,58 +49,33 @@ _export(exports, {
49
49
  return topmostDirectoryPathFromPath;
50
50
  }
51
51
  });
52
- var _constants = require("../constants");
53
- var _array = require("../utilities/array");
54
- function _array_like_to_array(arr, len) {
55
- if (len == null || len > arr.length) len = arr.length;
56
- for(var i = 0, arr2 = new Array(len); i < len; i++)arr2[i] = arr[i];
57
- return arr2;
58
- }
59
- function _array_without_holes(arr) {
60
- if (Array.isArray(arr)) return _array_like_to_array(arr);
61
- }
62
- function _iterable_to_array(iter) {
63
- if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) return Array.from(iter);
64
- }
65
- function _non_iterable_spread() {
66
- throw new TypeError("Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
67
- }
68
- function _to_consumable_array(arr) {
69
- return _array_without_holes(arr) || _iterable_to_array(arr) || _unsupported_iterable_to_array(arr) || _non_iterable_spread();
70
- }
71
- function _unsupported_iterable_to_array(o, minLen) {
72
- if (!o) return;
73
- if (typeof o === "string") return _array_like_to_array(o, minLen);
74
- var n = Object.prototype.toString.call(o).slice(8, -1);
75
- if (n === "Object" && o.constructor) n = o.constructor.name;
76
- if (n === "Map" || n === "Set") return Array.from(n);
77
- if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _array_like_to_array(o, minLen);
78
- }
52
+ const _constants = require("../constants");
53
+ const _array = require("../utilities/array");
79
54
  function isPathName(path) {
80
55
  path = path.replace(/^\//, _constants.EMPTY_STRING).replace(/\/$/, _constants.EMPTY_STRING); ///
81
- var pathName = /\//.test(path) === false;
56
+ const pathName = /\//.test(path) === false;
82
57
  return pathName;
83
58
  }
84
59
  function isPathTopmostName(path) {
85
- var pathName = isPathName(path), pathAbsolutePath = isPathAbsolutePath(path), pathTopmostName = pathName && pathAbsolutePath;
60
+ const pathName = isPathName(path), pathAbsolutePath = isPathAbsolutePath(path), pathTopmostName = pathName && pathAbsolutePath;
86
61
  return pathTopmostName;
87
62
  }
88
63
  function isPathRelativePath(path) {
89
- var pathRelativePath = !/^\//.test(path);
64
+ const pathRelativePath = !/^\//.test(path);
90
65
  return pathRelativePath;
91
66
  }
92
67
  function isPathAbsolutePath(path) {
93
- var pathAbsolutePath = /^\//.test(path);
68
+ const pathAbsolutePath = /^\//.test(path);
94
69
  return pathAbsolutePath;
95
70
  }
96
71
  function isTopmostNameInAbsolutePath(topmostName, absolutePath) {
97
- var regExp = new RegExp("^".concat(topmostName, "(?:\\/.+)?$")), topmostNameInAbsolutePath = regExp.test(absolutePath);
72
+ const regExp = new RegExp(`^${topmostName}(?:\\/.+)?$`), topmostNameInAbsolutePath = regExp.test(absolutePath);
98
73
  return topmostNameInAbsolutePath;
99
74
  }
100
75
  function combinePaths(path, relativePath) {
101
- var combinedPath = null;
102
- var pathNames = path.split(/\//), relativePathNames = relativePath.split(/\//);
103
- var lastPathName, firstRelativePathName = (0, _array.first)(relativePathNames);
76
+ let combinedPath = null;
77
+ const pathNames = path.split(/\//), relativePathNames = relativePath.split(/\//);
78
+ let lastPathName, firstRelativePathName = (0, _array.first)(relativePathNames);
104
79
  if (firstRelativePathName === ".") {
105
80
  relativePathNames.shift();
106
81
  }
@@ -113,81 +88,75 @@ function combinePaths(path, relativePath) {
113
88
  lastPathName = (0, _array.last)(pathNames);
114
89
  }
115
90
  if (lastPathName !== undefined) {
116
- var combinedPathNames = [].concat(pathNames).concat(relativePathNames);
91
+ const combinedPathNames = [].concat(pathNames).concat(relativePathNames);
117
92
  combinedPath = combinedPathNames.join("/");
118
93
  }
119
94
  return combinedPath;
120
95
  }
121
- function concatenatePaths(path, relativePath) {
122
- for(var _len = arguments.length, remainingArguments = new Array(_len > 2 ? _len - 2 : 0), _key = 2; _key < _len; _key++){
123
- remainingArguments[_key - 2] = arguments[_key];
124
- }
125
- var concatenatedPath;
96
+ function concatenatePaths(path, relativePath, ...remainingArguments) {
97
+ let concatenatedPath;
126
98
  path = path.replace(/\/$/, _constants.EMPTY_STRING); ///
127
- concatenatedPath = "".concat(path, "/").concat(relativePath);
128
- var remainingAArgumentsLength = remainingArguments.length;
99
+ concatenatedPath = `${path}/${relativePath}`;
100
+ const remainingAArgumentsLength = remainingArguments.length;
129
101
  if (remainingAArgumentsLength > 0) {
130
- var _$path = concatenatedPath, _$relativePath = remainingArguments.shift();
131
- concatenatedPath = concatenatePaths.apply(void 0, [
132
- _$path,
133
- _$relativePath
134
- ].concat(_to_consumable_array(remainingArguments)));
102
+ const path = concatenatedPath, relativePath = remainingArguments.shift();
103
+ concatenatedPath = concatenatePaths(path, relativePath, ...remainingArguments);
135
104
  }
136
105
  return concatenatedPath;
137
106
  }
138
107
  function bottommostNameFromPath(path) {
139
- var bottommostName = null;
140
- var matches = path.match(/^.*\/([^\/]+\/?)$/);
108
+ let bottommostName = null;
109
+ const matches = path.match(/^.*\/([^\/]+\/?)$/);
141
110
  if (matches !== null) {
142
- var secondMatch = (0, _array.second)(matches);
111
+ const secondMatch = (0, _array.second)(matches);
143
112
  bottommostName = secondMatch; ///
144
113
  }
145
114
  return bottommostName;
146
115
  }
147
116
  function topmostDirectoryPathFromPath(path) {
148
- var matches = path.match(/^(.+)\/[^\/]+\/?$/), secondMatch = (0, _array.second)(matches), topmostDirectoryPath = secondMatch; ///
117
+ const matches = path.match(/^(.+)\/[^\/]+\/?$/), secondMatch = (0, _array.second)(matches), topmostDirectoryPath = secondMatch; ///
149
118
  return topmostDirectoryPath;
150
119
  }
151
120
  function topmostDirectoryNameFromPath(path) {
152
- var topmostDirectoryName = null;
153
- var matches = path.match(/^([^\/]+)\/.+$/);
121
+ let topmostDirectoryName = null;
122
+ const matches = path.match(/^([^\/]+)\/.+$/);
154
123
  if (matches !== null) {
155
- var secondMatch = (0, _array.second)(matches);
124
+ const secondMatch = (0, _array.second)(matches);
156
125
  topmostDirectoryName = secondMatch; ///
157
126
  }
158
127
  return topmostDirectoryName;
159
128
  }
160
129
  function pathWithoutBottommostNameFromPath(path) {
161
- var pathWithoutBottommostName = null;
162
- var matches = path.match(/^(.*)\/[^\/]+\/?$/);
130
+ let pathWithoutBottommostName = null;
131
+ const matches = path.match(/^(.*)\/[^\/]+\/?$/);
163
132
  if (matches !== null) {
164
- var secondMatch = (0, _array.second)(matches);
133
+ const secondMatch = (0, _array.second)(matches);
165
134
  pathWithoutBottommostName = secondMatch; ///
166
135
  }
167
136
  return pathWithoutBottommostName;
168
137
  }
169
138
  function pathWithoutTopmostDirectoryNameFromPath(path) {
170
- var pathWithoutTopmostDirectoryName = null;
171
- var matches = path.match(/^[^\/]+\/(.+)$/);
139
+ let pathWithoutTopmostDirectoryName = null;
140
+ const matches = path.match(/^[^\/]+\/(.+)$/);
172
141
  if (matches !== null) {
173
- var secondMatch = (0, _array.second)(matches);
142
+ const secondMatch = (0, _array.second)(matches);
174
143
  pathWithoutTopmostDirectoryName = secondMatch;
175
144
  }
176
145
  return pathWithoutTopmostDirectoryName;
177
146
  }
178
- var _default = {
179
- isPathName: isPathName,
180
- isPathTopmostName: isPathTopmostName,
181
- isPathRelativePath: isPathRelativePath,
182
- isPathAbsolutePath: isPathAbsolutePath,
183
- isTopmostNameInAbsolutePath: isTopmostNameInAbsolutePath,
184
- combinePaths: combinePaths,
185
- concatenatePaths: concatenatePaths,
186
- bottommostNameFromPath: bottommostNameFromPath,
187
- topmostDirectoryPathFromPath: topmostDirectoryPathFromPath,
188
- topmostDirectoryNameFromPath: topmostDirectoryNameFromPath,
189
- pathWithoutBottommostNameFromPath: pathWithoutBottommostNameFromPath,
190
- pathWithoutTopmostDirectoryNameFromPath: pathWithoutTopmostDirectoryNameFromPath
147
+ const _default = {
148
+ isPathName,
149
+ isPathTopmostName,
150
+ isPathRelativePath,
151
+ isPathAbsolutePath,
152
+ isTopmostNameInAbsolutePath,
153
+ combinePaths,
154
+ concatenatePaths,
155
+ bottommostNameFromPath,
156
+ topmostDirectoryPathFromPath,
157
+ topmostDirectoryNameFromPath,
158
+ pathWithoutBottommostNameFromPath,
159
+ pathWithoutTopmostDirectoryNameFromPath
191
160
  };
192
161
 
193
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlsaXRpZXMvcGF0aC5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgRU1QVFlfU1RSSU5HIH0gZnJvbSBcIi4uL2NvbnN0YW50c1wiO1xuaW1wb3J0IHsgZmlyc3QsIHNlY29uZCwgbGFzdCB9IGZyb20gXCIuLi91dGlsaXRpZXMvYXJyYXlcIjtcblxuZXhwb3J0IGZ1bmN0aW9uIGlzUGF0aE5hbWUocGF0aCkge1xuICBwYXRoID0gcGF0aC5yZXBsYWNlKC9eXFwvLywgRU1QVFlfU1RSSU5HKS5yZXBsYWNlKC9cXC8kLywgRU1QVFlfU1RSSU5HKTsgLy8vXG5cbiAgY29uc3QgcGF0aE5hbWUgPSAoL1xcLy8udGVzdChwYXRoKSA9PT0gZmFsc2UpO1xuXG4gIHJldHVybiBwYXRoTmFtZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzUGF0aFRvcG1vc3ROYW1lKHBhdGgpIHtcbiAgY29uc3QgcGF0aE5hbWUgPSBpc1BhdGhOYW1lKHBhdGgpLFxuICAgICAgICBwYXRoQWJzb2x1dGVQYXRoID0gaXNQYXRoQWJzb2x1dGVQYXRoKHBhdGgpLFxuICAgICAgICBwYXRoVG9wbW9zdE5hbWUgPSAocGF0aE5hbWUgJiYgcGF0aEFic29sdXRlUGF0aCk7XG5cbiAgcmV0dXJuIHBhdGhUb3Btb3N0TmFtZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzUGF0aFJlbGF0aXZlUGF0aChwYXRoKSB7XG4gIGNvbnN0IHBhdGhSZWxhdGl2ZVBhdGggPSAhL15cXC8vLnRlc3QocGF0aCk7XG5cbiAgcmV0dXJuIHBhdGhSZWxhdGl2ZVBhdGg7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc1BhdGhBYnNvbHV0ZVBhdGgocGF0aCkge1xuICBjb25zdCBwYXRoQWJzb2x1dGVQYXRoID0gL15cXC8vLnRlc3QocGF0aCk7XG5cbiAgcmV0dXJuIHBhdGhBYnNvbHV0ZVBhdGg7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc1RvcG1vc3ROYW1lSW5BYnNvbHV0ZVBhdGgodG9wbW9zdE5hbWUsIGFic29sdXRlUGF0aCkge1xuICBjb25zdCByZWdFeHAgPSBuZXcgUmVnRXhwKGBeJHt0b3Btb3N0TmFtZX0oPzpcXFxcLy4rKT8kYCksXG4gICAgICAgIHRvcG1vc3ROYW1lSW5BYnNvbHV0ZVBhdGggPSByZWdFeHAudGVzdChhYnNvbHV0ZVBhdGgpO1xuXG4gIHJldHVybiB0b3Btb3N0TmFtZUluQWJzb2x1dGVQYXRoXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb21iaW5lUGF0aHMocGF0aCwgcmVsYXRpdmVQYXRoKSB7XG4gIGxldCBjb21iaW5lZFBhdGggPSBudWxsO1xuXG4gIGNvbnN0IHBhdGhOYW1lcyA9IHBhdGguc3BsaXQoL1xcLy8pLFxuICAgICAgICByZWxhdGl2ZVBhdGhOYW1lcyA9IHJlbGF0aXZlUGF0aC5zcGxpdCgvXFwvLyk7XG5cbiAgbGV0IGxhc3RQYXRoTmFtZSxcbiAgICAgIGZpcnN0UmVsYXRpdmVQYXRoTmFtZSA9IGZpcnN0KHJlbGF0aXZlUGF0aE5hbWVzKTtcblxuICBpZiAoZmlyc3RSZWxhdGl2ZVBhdGhOYW1lID09PSBcIi5cIikge1xuICAgIHJlbGF0aXZlUGF0aE5hbWVzLnNoaWZ0KCk7XG4gIH1cblxuICBmaXJzdFJlbGF0aXZlUGF0aE5hbWUgPSBmaXJzdChyZWxhdGl2ZVBhdGhOYW1lcyk7XG4gIGxhc3RQYXRoTmFtZSA9IGxhc3QocGF0aE5hbWVzKTtcblxuICB3aGlsZSAoKGZpcnN0UmVsYXRpdmVQYXRoTmFtZSA9PT0gXCIuLlwiKSAmJiAobGFzdFBhdGhOYW1lICE9PSB1bmRlZmluZWQpKSB7XG4gICAgcmVsYXRpdmVQYXRoTmFtZXMuc2hpZnQoKTtcbiAgICBwYXRoTmFtZXMucG9wKCk7XG5cbiAgICBmaXJzdFJlbGF0aXZlUGF0aE5hbWUgPSBmaXJzdChyZWxhdGl2ZVBhdGhOYW1lcyk7XG4gICAgbGFzdFBhdGhOYW1lID0gbGFzdChwYXRoTmFtZXMpO1xuICB9XG5cbiAgaWYgKGxhc3RQYXRoTmFtZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgY29uc3QgY29tYmluZWRQYXRoTmFtZXMgPSBbXS5jb25jYXQocGF0aE5hbWVzKS5jb25jYXQocmVsYXRpdmVQYXRoTmFtZXMpO1xuXG4gICAgY29tYmluZWRQYXRoID0gY29tYmluZWRQYXRoTmFtZXMuam9pbihcIi9cIik7XG4gIH1cblxuICByZXR1cm4gY29tYmluZWRQYXRoO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY29uY2F0ZW5hdGVQYXRocyhwYXRoLCByZWxhdGl2ZVBhdGgsIC4uLnJlbWFpbmluZ0FyZ3VtZW50cykge1xuICBsZXQgY29uY2F0ZW5hdGVkUGF0aDtcblxuICBwYXRoID0gcGF0aC5yZXBsYWNlKC9cXC8kLywgRU1QVFlfU1RSSU5HKTsgIC8vL1xuXG4gIGNvbmNhdGVuYXRlZFBhdGggPSBgJHtwYXRofS8ke3JlbGF0aXZlUGF0aH1gO1xuXG4gIGNvbnN0IHJlbWFpbmluZ0FBcmd1bWVudHNMZW5ndGggPSByZW1haW5pbmdBcmd1bWVudHMubGVuZ3RoO1xuXG4gIGlmIChyZW1haW5pbmdBQXJndW1lbnRzTGVuZ3RoID4gMCkge1xuICAgIGNvbnN0IHBhdGggPSBjb25jYXRlbmF0ZWRQYXRoLCAgLy8vXG4gICAgICAgICAgcmVsYXRpdmVQYXRoID0gcmVtYWluaW5nQXJndW1lbnRzLnNoaWZ0KCk7XG5cbiAgICBjb25jYXRlbmF0ZWRQYXRoID0gY29uY2F0ZW5hdGVQYXRocyhwYXRoLCByZWxhdGl2ZVBhdGgsIC4uLnJlbWFpbmluZ0FyZ3VtZW50cyk7XG4gIH1cblxuICByZXR1cm4gY29uY2F0ZW5hdGVkUGF0aDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGJvdHRvbW1vc3ROYW1lRnJvbVBhdGgocGF0aCkge1xuICBsZXQgYm90dG9tbW9zdE5hbWUgPSBudWxsO1xuXG4gIGNvbnN0IG1hdGNoZXMgPSBwYXRoLm1hdGNoKC9eLipcXC8oW15cXC9dK1xcLz8pJC8pO1xuXG4gIGlmIChtYXRjaGVzICE9PSBudWxsKSB7XG4gICAgY29uc3Qgc2Vjb25kTWF0Y2ggPSBzZWNvbmQobWF0Y2hlcyk7XG5cbiAgICBib3R0b21tb3N0TmFtZSA9IHNlY29uZE1hdGNoOyAgLy8vXG4gIH1cblxuICByZXR1cm4gYm90dG9tbW9zdE5hbWU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0b3Btb3N0RGlyZWN0b3J5UGF0aEZyb21QYXRoKHBhdGgpIHtcbiAgY29uc3QgbWF0Y2hlcyA9IHBhdGgubWF0Y2goL14oLispXFwvW15cXC9dK1xcLz8kLyksXG4gICAgICAgIHNlY29uZE1hdGNoID0gc2Vjb25kKG1hdGNoZXMpLFxuICAgICAgICB0b3Btb3N0RGlyZWN0b3J5UGF0aCA9IHNlY29uZE1hdGNoOyAvLy9cblxuICByZXR1cm4gdG9wbW9zdERpcmVjdG9yeVBhdGg7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0b3Btb3N0RGlyZWN0b3J5TmFtZUZyb21QYXRoKHBhdGgpIHtcbiAgbGV0IHRvcG1vc3REaXJlY3RvcnlOYW1lID0gbnVsbDtcblxuICBjb25zdCBtYXRjaGVzID0gcGF0aC5tYXRjaCgvXihbXlxcL10rKVxcLy4rJC8pO1xuXG4gIGlmIChtYXRjaGVzICE9PSBudWxsKSB7XG4gICAgY29uc3Qgc2Vjb25kTWF0Y2ggPSBzZWNvbmQobWF0Y2hlcyk7XG5cbiAgICB0b3Btb3N0RGlyZWN0b3J5TmFtZSA9IHNlY29uZE1hdGNoOyAgLy8vXG4gIH1cblxuICByZXR1cm4gdG9wbW9zdERpcmVjdG9yeU5hbWU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwYXRoV2l0aG91dEJvdHRvbW1vc3ROYW1lRnJvbVBhdGgocGF0aCkge1xuICBsZXQgcGF0aFdpdGhvdXRCb3R0b21tb3N0TmFtZSA9IG51bGw7XG5cbiAgY29uc3QgbWF0Y2hlcyA9IHBhdGgubWF0Y2goL14oLiopXFwvW15cXC9dK1xcLz8kLyk7XG5cbiAgaWYgKG1hdGNoZXMgIT09IG51bGwpIHtcbiAgICBjb25zdCBzZWNvbmRNYXRjaCA9IHNlY29uZChtYXRjaGVzKTtcblxuICAgIHBhdGhXaXRob3V0Qm90dG9tbW9zdE5hbWUgPSBzZWNvbmRNYXRjaDsgLy8vXG4gIH1cblxuICByZXR1cm4gcGF0aFdpdGhvdXRCb3R0b21tb3N0TmFtZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBhdGhXaXRob3V0VG9wbW9zdERpcmVjdG9yeU5hbWVGcm9tUGF0aChwYXRoKSB7XG4gIGxldCBwYXRoV2l0aG91dFRvcG1vc3REaXJlY3RvcnlOYW1lID0gbnVsbDtcblxuICBjb25zdCBtYXRjaGVzID0gcGF0aC5tYXRjaCgvXlteXFwvXStcXC8oLispJC8pO1xuXG4gIGlmIChtYXRjaGVzICE9PSBudWxsKSB7XG4gICAgY29uc3Qgc2Vjb25kTWF0Y2ggPSBzZWNvbmQobWF0Y2hlcyk7XG5cbiAgICBwYXRoV2l0aG91dFRvcG1vc3REaXJlY3RvcnlOYW1lID0gc2Vjb25kTWF0Y2g7XG4gIH1cblxuICByZXR1cm4gcGF0aFdpdGhvdXRUb3Btb3N0RGlyZWN0b3J5TmFtZTtcbn1cblxuZXhwb3J0IGRlZmF1bHQge1xuICBpc1BhdGhOYW1lLFxuICBpc1BhdGhUb3Btb3N0TmFtZSxcbiAgaXNQYXRoUmVsYXRpdmVQYXRoLFxuICBpc1BhdGhBYnNvbHV0ZVBhdGgsXG4gIGlzVG9wbW9zdE5hbWVJbkFic29sdXRlUGF0aCxcbiAgY29tYmluZVBhdGhzLFxuICBjb25jYXRlbmF0ZVBhdGhzLFxuICBib3R0b21tb3N0TmFtZUZyb21QYXRoLFxuICB0b3Btb3N0RGlyZWN0b3J5UGF0aEZyb21QYXRoLFxuICB0b3Btb3N0RGlyZWN0b3J5TmFtZUZyb21QYXRoLFxuICBwYXRoV2l0aG91dEJvdHRvbW1vc3ROYW1lRnJvbVBhdGgsXG4gIHBhdGhXaXRob3V0VG9wbW9zdERpcmVjdG9yeU5hbWVGcm9tUGF0aFxufTtcbiJdLCJuYW1lcyI6WyJib3R0b21tb3N0TmFtZUZyb21QYXRoIiwiY29tYmluZVBhdGhzIiwiY29uY2F0ZW5hdGVQYXRocyIsImlzUGF0aEFic29sdXRlUGF0aCIsImlzUGF0aE5hbWUiLCJpc1BhdGhSZWxhdGl2ZVBhdGgiLCJpc1BhdGhUb3Btb3N0TmFtZSIsImlzVG9wbW9zdE5hbWVJbkFic29sdXRlUGF0aCIsInBhdGhXaXRob3V0Qm90dG9tbW9zdE5hbWVGcm9tUGF0aCIsInBhdGhXaXRob3V0VG9wbW9zdERpcmVjdG9yeU5hbWVGcm9tUGF0aCIsInRvcG1vc3REaXJlY3RvcnlOYW1lRnJvbVBhdGgiLCJ0b3Btb3N0RGlyZWN0b3J5UGF0aEZyb21QYXRoIiwicGF0aCIsInJlcGxhY2UiLCJFTVBUWV9TVFJJTkciLCJwYXRoTmFtZSIsInRlc3QiLCJwYXRoQWJzb2x1dGVQYXRoIiwicGF0aFRvcG1vc3ROYW1lIiwicGF0aFJlbGF0aXZlUGF0aCIsInRvcG1vc3ROYW1lIiwiYWJzb2x1dGVQYXRoIiwicmVnRXhwIiwiUmVnRXhwIiwidG9wbW9zdE5hbWVJbkFic29sdXRlUGF0aCIsInJlbGF0aXZlUGF0aCIsImNvbWJpbmVkUGF0aCIsInBhdGhOYW1lcyIsInNwbGl0IiwicmVsYXRpdmVQYXRoTmFtZXMiLCJsYXN0UGF0aE5hbWUiLCJmaXJzdFJlbGF0aXZlUGF0aE5hbWUiLCJmaXJzdCIsInNoaWZ0IiwibGFzdCIsInVuZGVmaW5lZCIsInBvcCIsImNvbWJpbmVkUGF0aE5hbWVzIiwiY29uY2F0Iiwiam9pbiIsInJlbWFpbmluZ0FyZ3VtZW50cyIsImNvbmNhdGVuYXRlZFBhdGgiLCJyZW1haW5pbmdBQXJndW1lbnRzTGVuZ3RoIiwibGVuZ3RoIiwiYm90dG9tbW9zdE5hbWUiLCJtYXRjaGVzIiwibWF0Y2giLCJzZWNvbmRNYXRjaCIsInNlY29uZCIsInRvcG1vc3REaXJlY3RvcnlQYXRoIiwidG9wbW9zdERpcmVjdG9yeU5hbWUiLCJwYXRoV2l0aG91dEJvdHRvbW1vc3ROYW1lIiwicGF0aFdpdGhvdXRUb3Btb3N0RGlyZWN0b3J5TmFtZSJdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7O1FBNEZnQkE7ZUFBQUE7O1FBcERBQztlQUFBQTs7UUFpQ0FDO2VBQUFBOztRQW1GaEI7ZUFBQTs7UUFqSWdC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
162
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlsaXRpZXMvcGF0aC5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgRU1QVFlfU1RSSU5HIH0gZnJvbSBcIi4uL2NvbnN0YW50c1wiO1xuaW1wb3J0IHsgZmlyc3QsIHNlY29uZCwgbGFzdCB9IGZyb20gXCIuLi91dGlsaXRpZXMvYXJyYXlcIjtcblxuZXhwb3J0IGZ1bmN0aW9uIGlzUGF0aE5hbWUocGF0aCkge1xuICBwYXRoID0gcGF0aC5yZXBsYWNlKC9eXFwvLywgRU1QVFlfU1RSSU5HKS5yZXBsYWNlKC9cXC8kLywgRU1QVFlfU1RSSU5HKTsgLy8vXG5cbiAgY29uc3QgcGF0aE5hbWUgPSAoL1xcLy8udGVzdChwYXRoKSA9PT0gZmFsc2UpO1xuXG4gIHJldHVybiBwYXRoTmFtZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzUGF0aFRvcG1vc3ROYW1lKHBhdGgpIHtcbiAgY29uc3QgcGF0aE5hbWUgPSBpc1BhdGhOYW1lKHBhdGgpLFxuICAgICAgICBwYXRoQWJzb2x1dGVQYXRoID0gaXNQYXRoQWJzb2x1dGVQYXRoKHBhdGgpLFxuICAgICAgICBwYXRoVG9wbW9zdE5hbWUgPSAocGF0aE5hbWUgJiYgcGF0aEFic29sdXRlUGF0aCk7XG5cbiAgcmV0dXJuIHBhdGhUb3Btb3N0TmFtZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzUGF0aFJlbGF0aXZlUGF0aChwYXRoKSB7XG4gIGNvbnN0IHBhdGhSZWxhdGl2ZVBhdGggPSAhL15cXC8vLnRlc3QocGF0aCk7XG5cbiAgcmV0dXJuIHBhdGhSZWxhdGl2ZVBhdGg7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc1BhdGhBYnNvbHV0ZVBhdGgocGF0aCkge1xuICBjb25zdCBwYXRoQWJzb2x1dGVQYXRoID0gL15cXC8vLnRlc3QocGF0aCk7XG5cbiAgcmV0dXJuIHBhdGhBYnNvbHV0ZVBhdGg7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc1RvcG1vc3ROYW1lSW5BYnNvbHV0ZVBhdGgodG9wbW9zdE5hbWUsIGFic29sdXRlUGF0aCkge1xuICBjb25zdCByZWdFeHAgPSBuZXcgUmVnRXhwKGBeJHt0b3Btb3N0TmFtZX0oPzpcXFxcLy4rKT8kYCksXG4gICAgICAgIHRvcG1vc3ROYW1lSW5BYnNvbHV0ZVBhdGggPSByZWdFeHAudGVzdChhYnNvbHV0ZVBhdGgpO1xuXG4gIHJldHVybiB0b3Btb3N0TmFtZUluQWJzb2x1dGVQYXRoXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb21iaW5lUGF0aHMocGF0aCwgcmVsYXRpdmVQYXRoKSB7XG4gIGxldCBjb21iaW5lZFBhdGggPSBudWxsO1xuXG4gIGNvbnN0IHBhdGhOYW1lcyA9IHBhdGguc3BsaXQoL1xcLy8pLFxuICAgICAgICByZWxhdGl2ZVBhdGhOYW1lcyA9IHJlbGF0aXZlUGF0aC5zcGxpdCgvXFwvLyk7XG5cbiAgbGV0IGxhc3RQYXRoTmFtZSxcbiAgICAgIGZpcnN0UmVsYXRpdmVQYXRoTmFtZSA9IGZpcnN0KHJlbGF0aXZlUGF0aE5hbWVzKTtcblxuICBpZiAoZmlyc3RSZWxhdGl2ZVBhdGhOYW1lID09PSBcIi5cIikge1xuICAgIHJlbGF0aXZlUGF0aE5hbWVzLnNoaWZ0KCk7XG4gIH1cblxuICBmaXJzdFJlbGF0aXZlUGF0aE5hbWUgPSBmaXJzdChyZWxhdGl2ZVBhdGhOYW1lcyk7XG4gIGxhc3RQYXRoTmFtZSA9IGxhc3QocGF0aE5hbWVzKTtcblxuICB3aGlsZSAoKGZpcnN0UmVsYXRpdmVQYXRoTmFtZSA9PT0gXCIuLlwiKSAmJiAobGFzdFBhdGhOYW1lICE9PSB1bmRlZmluZWQpKSB7XG4gICAgcmVsYXRpdmVQYXRoTmFtZXMuc2hpZnQoKTtcbiAgICBwYXRoTmFtZXMucG9wKCk7XG5cbiAgICBmaXJzdFJlbGF0aXZlUGF0aE5hbWUgPSBmaXJzdChyZWxhdGl2ZVBhdGhOYW1lcyk7XG4gICAgbGFzdFBhdGhOYW1lID0gbGFzdChwYXRoTmFtZXMpO1xuICB9XG5cbiAgaWYgKGxhc3RQYXRoTmFtZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgY29uc3QgY29tYmluZWRQYXRoTmFtZXMgPSBbXS5jb25jYXQocGF0aE5hbWVzKS5jb25jYXQocmVsYXRpdmVQYXRoTmFtZXMpO1xuXG4gICAgY29tYmluZWRQYXRoID0gY29tYmluZWRQYXRoTmFtZXMuam9pbihcIi9cIik7XG4gIH1cblxuICByZXR1cm4gY29tYmluZWRQYXRoO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY29uY2F0ZW5hdGVQYXRocyhwYXRoLCByZWxhdGl2ZVBhdGgsIC4uLnJlbWFpbmluZ0FyZ3VtZW50cykge1xuICBsZXQgY29uY2F0ZW5hdGVkUGF0aDtcblxuICBwYXRoID0gcGF0aC5yZXBsYWNlKC9cXC8kLywgRU1QVFlfU1RSSU5HKTsgIC8vL1xuXG4gIGNvbmNhdGVuYXRlZFBhdGggPSBgJHtwYXRofS8ke3JlbGF0aXZlUGF0aH1gO1xuXG4gIGNvbnN0IHJlbWFpbmluZ0FBcmd1bWVudHNMZW5ndGggPSByZW1haW5pbmdBcmd1bWVudHMubGVuZ3RoO1xuXG4gIGlmIChyZW1haW5pbmdBQXJndW1lbnRzTGVuZ3RoID4gMCkge1xuICAgIGNvbnN0IHBhdGggPSBjb25jYXRlbmF0ZWRQYXRoLCAgLy8vXG4gICAgICAgICAgcmVsYXRpdmVQYXRoID0gcmVtYWluaW5nQXJndW1lbnRzLnNoaWZ0KCk7XG5cbiAgICBjb25jYXRlbmF0ZWRQYXRoID0gY29uY2F0ZW5hdGVQYXRocyhwYXRoLCByZWxhdGl2ZVBhdGgsIC4uLnJlbWFpbmluZ0FyZ3VtZW50cyk7XG4gIH1cblxuICByZXR1cm4gY29uY2F0ZW5hdGVkUGF0aDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGJvdHRvbW1vc3ROYW1lRnJvbVBhdGgocGF0aCkge1xuICBsZXQgYm90dG9tbW9zdE5hbWUgPSBudWxsO1xuXG4gIGNvbnN0IG1hdGNoZXMgPSBwYXRoLm1hdGNoKC9eLipcXC8oW15cXC9dK1xcLz8pJC8pO1xuXG4gIGlmIChtYXRjaGVzICE9PSBudWxsKSB7XG4gICAgY29uc3Qgc2Vjb25kTWF0Y2ggPSBzZWNvbmQobWF0Y2hlcyk7XG5cbiAgICBib3R0b21tb3N0TmFtZSA9IHNlY29uZE1hdGNoOyAgLy8vXG4gIH1cblxuICByZXR1cm4gYm90dG9tbW9zdE5hbWU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0b3Btb3N0RGlyZWN0b3J5UGF0aEZyb21QYXRoKHBhdGgpIHtcbiAgY29uc3QgbWF0Y2hlcyA9IHBhdGgubWF0Y2goL14oLispXFwvW15cXC9dK1xcLz8kLyksXG4gICAgICAgIHNlY29uZE1hdGNoID0gc2Vjb25kKG1hdGNoZXMpLFxuICAgICAgICB0b3Btb3N0RGlyZWN0b3J5UGF0aCA9IHNlY29uZE1hdGNoOyAvLy9cblxuICByZXR1cm4gdG9wbW9zdERpcmVjdG9yeVBhdGg7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0b3Btb3N0RGlyZWN0b3J5TmFtZUZyb21QYXRoKHBhdGgpIHtcbiAgbGV0IHRvcG1vc3REaXJlY3RvcnlOYW1lID0gbnVsbDtcblxuICBjb25zdCBtYXRjaGVzID0gcGF0aC5tYXRjaCgvXihbXlxcL10rKVxcLy4rJC8pO1xuXG4gIGlmIChtYXRjaGVzICE9PSBudWxsKSB7XG4gICAgY29uc3Qgc2Vjb25kTWF0Y2ggPSBzZWNvbmQobWF0Y2hlcyk7XG5cbiAgICB0b3Btb3N0RGlyZWN0b3J5TmFtZSA9IHNlY29uZE1hdGNoOyAgLy8vXG4gIH1cblxuICByZXR1cm4gdG9wbW9zdERpcmVjdG9yeU5hbWU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwYXRoV2l0aG91dEJvdHRvbW1vc3ROYW1lRnJvbVBhdGgocGF0aCkge1xuICBsZXQgcGF0aFdpdGhvdXRCb3R0b21tb3N0TmFtZSA9IG51bGw7XG5cbiAgY29uc3QgbWF0Y2hlcyA9IHBhdGgubWF0Y2goL14oLiopXFwvW15cXC9dK1xcLz8kLyk7XG5cbiAgaWYgKG1hdGNoZXMgIT09IG51bGwpIHtcbiAgICBjb25zdCBzZWNvbmRNYXRjaCA9IHNlY29uZChtYXRjaGVzKTtcblxuICAgIHBhdGhXaXRob3V0Qm90dG9tbW9zdE5hbWUgPSBzZWNvbmRNYXRjaDsgLy8vXG4gIH1cblxuICByZXR1cm4gcGF0aFdpdGhvdXRCb3R0b21tb3N0TmFtZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBhdGhXaXRob3V0VG9wbW9zdERpcmVjdG9yeU5hbWVGcm9tUGF0aChwYXRoKSB7XG4gIGxldCBwYXRoV2l0aG91dFRvcG1vc3REaXJlY3RvcnlOYW1lID0gbnVsbDtcblxuICBjb25zdCBtYXRjaGVzID0gcGF0aC5tYXRjaCgvXlteXFwvXStcXC8oLispJC8pO1xuXG4gIGlmIChtYXRjaGVzICE9PSBudWxsKSB7XG4gICAgY29uc3Qgc2Vjb25kTWF0Y2ggPSBzZWNvbmQobWF0Y2hlcyk7XG5cbiAgICBwYXRoV2l0aG91dFRvcG1vc3REaXJlY3RvcnlOYW1lID0gc2Vjb25kTWF0Y2g7XG4gIH1cblxuICByZXR1cm4gcGF0aFdpdGhvdXRUb3Btb3N0RGlyZWN0b3J5TmFtZTtcbn1cblxuZXhwb3J0IGRlZmF1bHQge1xuICBpc1BhdGhOYW1lLFxuICBpc1BhdGhUb3Btb3N0TmFtZSxcbiAgaXNQYXRoUmVsYXRpdmVQYXRoLFxuICBpc1BhdGhBYnNvbHV0ZVBhdGgsXG4gIGlzVG9wbW9zdE5hbWVJbkFic29sdXRlUGF0aCxcbiAgY29tYmluZVBhdGhzLFxuICBjb25jYXRlbmF0ZVBhdGhzLFxuICBib3R0b21tb3N0TmFtZUZyb21QYXRoLFxuICB0b3Btb3N0RGlyZWN0b3J5UGF0aEZyb21QYXRoLFxuICB0b3Btb3N0RGlyZWN0b3J5TmFtZUZyb21QYXRoLFxuICBwYXRoV2l0aG91dEJvdHRvbW1vc3ROYW1lRnJvbVBhdGgsXG4gIHBhdGhXaXRob3V0VG9wbW9zdERpcmVjdG9yeU5hbWVGcm9tUGF0aFxufTtcbiJdLCJuYW1lcyI6WyJib3R0b21tb3N0TmFtZUZyb21QYXRoIiwiY29tYmluZVBhdGhzIiwiY29uY2F0ZW5hdGVQYXRocyIsImlzUGF0aEFic29sdXRlUGF0aCIsImlzUGF0aE5hbWUiLCJpc1BhdGhSZWxhdGl2ZVBhdGgiLCJpc1BhdGhUb3Btb3N0TmFtZSIsImlzVG9wbW9zdE5hbWVJbkFic29sdXRlUGF0aCIsInBhdGhXaXRob3V0Qm90dG9tbW9zdE5hbWVGcm9tUGF0aCIsInBhdGhXaXRob3V0VG9wbW9zdERpcmVjdG9yeU5hbWVGcm9tUGF0aCIsInRvcG1vc3REaXJlY3RvcnlOYW1lRnJvbVBhdGgiLCJ0b3Btb3N0RGlyZWN0b3J5UGF0aEZyb21QYXRoIiwicGF0aCIsInJlcGxhY2UiLCJFTVBUWV9TVFJJTkciLCJwYXRoTmFtZSIsInRlc3QiLCJwYXRoQWJzb2x1dGVQYXRoIiwicGF0aFRvcG1vc3ROYW1lIiwicGF0aFJlbGF0aXZlUGF0aCIsInRvcG1vc3ROYW1lIiwiYWJzb2x1dGVQYXRoIiwicmVnRXhwIiwiUmVnRXhwIiwidG9wbW9zdE5hbWVJbkFic29sdXRlUGF0aCIsInJlbGF0aXZlUGF0aCIsImNvbWJpbmVkUGF0aCIsInBhdGhOYW1lcyIsInNwbGl0IiwicmVsYXRpdmVQYXRoTmFtZXMiLCJsYXN0UGF0aE5hbWUiLCJmaXJzdFJlbGF0aXZlUGF0aE5hbWUiLCJmaXJzdCIsInNoaWZ0IiwibGFzdCIsInVuZGVmaW5lZCIsInBvcCIsImNvbWJpbmVkUGF0aE5hbWVzIiwiY29uY2F0Iiwiam9pbiIsInJlbWFpbmluZ0FyZ3VtZW50cyIsImNvbmNhdGVuYXRlZFBhdGgiLCJyZW1haW5pbmdBQXJndW1lbnRzTGVuZ3RoIiwibGVuZ3RoIiwiYm90dG9tbW9zdE5hbWUiLCJtYXRjaGVzIiwibWF0Y2giLCJzZWNvbmRNYXRjaCIsInNlY29uZCIsInRvcG1vc3REaXJlY3RvcnlQYXRoIiwidG9wbW9zdERpcmVjdG9yeU5hbWUiLCJwYXRoV2l0aG91dEJvdHRvbW1vc3ROYW1lIiwicGF0aFdpdGhvdXRUb3Btb3N0RGlyZWN0b3J5TmFtZSJdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7O1FBNEZnQkE7ZUFBQUE7O1FBcERBQztlQUFBQTs7UUFpQ0FDO2VBQUFBOztRQW1GaEI7ZUFBQTs7UUFqSWdCQztlQUFBQTs7UUF0QkFDO2VBQUFBOztRQWdCQUM7ZUFBQUE7O1FBUkFDO2VBQUFBOztRQW9CQUM7ZUFBQUE7O1FBK0ZBQztlQUFBQTs7UUFjQUM7ZUFBQUE7O1FBNUJBQztlQUFBQTs7UUFSQUM7ZUFBQUE7OzsyQkF4R2E7dUJBQ087QUFFN0IsU0FBU1AsV0FBV1EsSUFBSTtJQUM3QkEsT0FBT0EsS0FBS0MsT0FBTyxDQUFDLE9BQU9DLHVCQUFZLEVBQUVELE9BQU8sQ0FBQyxPQUFPQyx1QkFBWSxHQUFHLEdBQUc7SUFFMUUsTUFBTUMsV0FBWSxLQUFLQyxJQUFJLENBQUNKLFVBQVU7SUFFdEMsT0FBT0c7QUFDVDtBQUVPLFNBQVNULGtCQUFrQk0sSUFBSTtJQUNwQyxNQUFNRyxXQUFXWCxXQUFXUSxPQUN0QkssbUJBQW1CZCxtQkFBbUJTLE9BQ3RDTSxrQkFBbUJILFlBQVlFO0lBRXJDLE9BQU9DO0FBQ1Q7QUFFTyxTQUFTYixtQkFBbUJPLElBQUk7SUFDckMsTUFBTU8sbUJBQW1CLENBQUMsTUFBTUgsSUFBSSxDQUFDSjtJQUVyQyxPQUFPTztBQUNUO0FBRU8sU0FBU2hCLG1CQUFtQlMsSUFBSTtJQUNyQyxNQUFNSyxtQkFBbUIsTUFBTUQsSUFBSSxDQUFDSjtJQUVwQyxPQUFPSztBQUNUO0FBRU8sU0FBU1YsNEJBQTRCYSxXQUFXLEVBQUVDLFlBQVk7SUFDbkUsTUFBTUMsU0FBUyxJQUFJQyxPQUFPLENBQUMsQ0FBQyxFQUFFSCxZQUFZLFdBQVcsQ0FBQyxHQUNoREksNEJBQTRCRixPQUFPTixJQUFJLENBQUNLO0lBRTlDLE9BQU9HO0FBQ1Q7QUFFTyxTQUFTdkIsYUFBYVcsSUFBSSxFQUFFYSxZQUFZO0lBQzdDLElBQUlDLGVBQWU7SUFFbkIsTUFBTUMsWUFBWWYsS0FBS2dCLEtBQUssQ0FBQyxPQUN2QkMsb0JBQW9CSixhQUFhRyxLQUFLLENBQUM7SUFFN0MsSUFBSUUsY0FDQUMsd0JBQXdCQyxJQUFBQSxZQUFLLEVBQUNIO0lBRWxDLElBQUlFLDBCQUEwQixLQUFLO1FBQ2pDRixrQkFBa0JJLEtBQUs7SUFDekI7SUFFQUYsd0JBQXdCQyxJQUFBQSxZQUFLLEVBQUNIO0lBQzlCQyxlQUFlSSxJQUFBQSxXQUFJLEVBQUNQO0lBRXBCLE1BQU8sQUFBQ0ksMEJBQTBCLFFBQVVELGlCQUFpQkssVUFBWTtRQUN2RU4sa0JBQWtCSSxLQUFLO1FBQ3ZCTixVQUFVUyxHQUFHO1FBRWJMLHdCQUF3QkMsSUFBQUEsWUFBSyxFQUFDSDtRQUM5QkMsZUFBZUksSUFBQUEsV0FBSSxFQUFDUDtJQUN0QjtJQUVBLElBQUlHLGlCQUFpQkssV0FBVztRQUM5QixNQUFNRSxvQkFBb0IsRUFBRSxDQUFDQyxNQUFNLENBQUNYLFdBQVdXLE1BQU0sQ0FBQ1Q7UUFFdERILGVBQWVXLGtCQUFrQkUsSUFBSSxDQUFDO0lBQ3hDO0lBRUEsT0FBT2I7QUFDVDtBQUVPLFNBQVN4QixpQkFBaUJVLElBQUksRUFBRWEsWUFBWSxFQUFFLEdBQUdlLGtCQUFrQjtJQUN4RSxJQUFJQztJQUVKN0IsT0FBT0EsS0FBS0MsT0FBTyxDQUFDLE9BQU9DLHVCQUFZLEdBQUksR0FBRztJQUU5QzJCLG1CQUFtQixHQUFHN0IsS0FBSyxDQUFDLEVBQUVhLGNBQWM7SUFFNUMsTUFBTWlCLDRCQUE0QkYsbUJBQW1CRyxNQUFNO0lBRTNELElBQUlELDRCQUE0QixHQUFHO1FBQ2pDLE1BQU05QixPQUFPNkIsa0JBQ1BoQixlQUFlZSxtQkFBbUJQLEtBQUs7UUFFN0NRLG1CQUFtQnZDLGlCQUFpQlUsTUFBTWEsaUJBQWlCZTtJQUM3RDtJQUVBLE9BQU9DO0FBQ1Q7QUFFTyxTQUFTekMsdUJBQXVCWSxJQUFJO0lBQ3pDLElBQUlnQyxpQkFBaUI7SUFFckIsTUFBTUMsVUFBVWpDLEtBQUtrQyxLQUFLLENBQUM7SUFFM0IsSUFBSUQsWUFBWSxNQUFNO1FBQ3BCLE1BQU1FLGNBQWNDLElBQUFBLGFBQU0sRUFBQ0g7UUFFM0JELGlCQUFpQkcsYUFBYyxHQUFHO0lBQ3BDO0lBRUEsT0FBT0g7QUFDVDtBQUVPLFNBQVNqQyw2QkFBNkJDLElBQUk7SUFDL0MsTUFBTWlDLFVBQVVqQyxLQUFLa0MsS0FBSyxDQUFDLHNCQUNyQkMsY0FBY0MsSUFBQUEsYUFBTSxFQUFDSCxVQUNyQkksdUJBQXVCRixhQUFhLEdBQUc7SUFFN0MsT0FBT0U7QUFDVDtBQUVPLFNBQVN2Qyw2QkFBNkJFLElBQUk7SUFDL0MsSUFBSXNDLHVCQUF1QjtJQUUzQixNQUFNTCxVQUFVakMsS0FBS2tDLEtBQUssQ0FBQztJQUUzQixJQUFJRCxZQUFZLE1BQU07UUFDcEIsTUFBTUUsY0FBY0MsSUFBQUEsYUFBTSxFQUFDSDtRQUUzQkssdUJBQXVCSCxhQUFjLEdBQUc7SUFDMUM7SUFFQSxPQUFPRztBQUNUO0FBRU8sU0FBUzFDLGtDQUFrQ0ksSUFBSTtJQUNwRCxJQUFJdUMsNEJBQTRCO0lBRWhDLE1BQU1OLFVBQVVqQyxLQUFLa0MsS0FBSyxDQUFDO0lBRTNCLElBQUlELFlBQVksTUFBTTtRQUNwQixNQUFNRSxjQUFjQyxJQUFBQSxhQUFNLEVBQUNIO1FBRTNCTSw0QkFBNEJKLGFBQWEsR0FBRztJQUM5QztJQUVBLE9BQU9JO0FBQ1Q7QUFFTyxTQUFTMUMsd0NBQXdDRyxJQUFJO0lBQzFELElBQUl3QyxrQ0FBa0M7SUFFdEMsTUFBTVAsVUFBVWpDLEtBQUtrQyxLQUFLLENBQUM7SUFFM0IsSUFBSUQsWUFBWSxNQUFNO1FBQ3BCLE1BQU1FLGNBQWNDLElBQUFBLGFBQU0sRUFBQ0g7UUFFM0JPLGtDQUFrQ0w7SUFDcEM7SUFFQSxPQUFPSztBQUNUO01BRUEsV0FBZTtJQUNiaEQ7SUFDQUU7SUFDQUQ7SUFDQUY7SUFDQUk7SUFDQU47SUFDQUM7SUFDQUY7SUFDQVc7SUFDQUQ7SUFDQUY7SUFDQUM7QUFDRiJ9