parse-server 6.2.0 → 6.3.0-alpha.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.
- package/lib/Adapters/Cache/LRUCache.js +3 -3
- package/lib/Adapters/Files/GridFSBucketAdapter.js +27 -44
- package/lib/Adapters/Storage/Mongo/MongoStorageAdapter.js +5 -4
- package/lib/Adapters/Storage/Postgres/PostgresStorageAdapter.js +12 -8
- package/lib/Auth.js +57 -3
- package/lib/Config.js +16 -3
- package/lib/Controllers/HooksController.js +2 -2
- package/lib/Controllers/UserController.js +69 -34
- package/lib/LiveQuery/ParseLiveQueryServer.js +12 -5
- package/lib/LiveQuery/QueryTools.js +6 -1
- package/lib/LiveQuery/SessionTokenCache.js +3 -3
- package/lib/Options/Definitions.js +33 -3
- package/lib/Options/docs.js +8 -2
- package/lib/Options/index.js +1 -1
- package/lib/ParseServer.js +16 -2
- package/lib/RestWrite.js +62 -18
- package/lib/Routers/FunctionsRouter.js +9 -3
- package/lib/Routers/PagesRouter.js +2 -2
- package/lib/Routers/PublicAPIRouter.js +2 -2
- package/lib/Routers/UsersRouter.js +21 -21
- package/lib/cli/utils/commander.js +2 -2
- package/lib/cloud-code/Parse.Cloud.js +3 -3
- package/lib/cloud-code/Parse.Server.js +21 -0
- package/lib/middlewares.js +24 -4
- package/package.json +16 -16
- package/postinstall.js +1 -1
|
@@ -4,7 +4,7 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
6
|
exports.default = exports.LRUCache = void 0;
|
|
7
|
-
var _lruCache =
|
|
7
|
+
var _lruCache = require("lru-cache");
|
|
8
8
|
var _defaults = _interopRequireDefault(require("../../defaults"));
|
|
9
9
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
10
10
|
class LRUCache {
|
|
@@ -12,7 +12,7 @@ class LRUCache {
|
|
|
12
12
|
ttl = _defaults.default.cacheTTL,
|
|
13
13
|
maxSize = _defaults.default.cacheMaxSize
|
|
14
14
|
}) {
|
|
15
|
-
this.cache = new _lruCache.
|
|
15
|
+
this.cache = new _lruCache.LRUCache({
|
|
16
16
|
max: maxSize,
|
|
17
17
|
ttl
|
|
18
18
|
});
|
|
@@ -33,4 +33,4 @@ class LRUCache {
|
|
|
33
33
|
exports.LRUCache = LRUCache;
|
|
34
34
|
var _default = LRUCache;
|
|
35
35
|
exports.default = _default;
|
|
36
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,
|
|
36
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJMUlVDYWNoZSIsImNvbnN0cnVjdG9yIiwidHRsIiwiZGVmYXVsdHMiLCJjYWNoZVRUTCIsIm1heFNpemUiLCJjYWNoZU1heFNpemUiLCJjYWNoZSIsIkxSVSIsIm1heCIsImdldCIsImtleSIsInB1dCIsInZhbHVlIiwic2V0IiwiZGVsIiwiZGVsZXRlIiwiY2xlYXIiXSwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvQWRhcHRlcnMvQ2FjaGUvTFJVQ2FjaGUuanMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTFJVQ2FjaGUgYXMgTFJVIH0gZnJvbSAnbHJ1LWNhY2hlJztcbmltcG9ydCBkZWZhdWx0cyBmcm9tICcuLi8uLi9kZWZhdWx0cyc7XG5cbmV4cG9ydCBjbGFzcyBMUlVDYWNoZSB7XG4gIGNvbnN0cnVjdG9yKHsgdHRsID0gZGVmYXVsdHMuY2FjaGVUVEwsIG1heFNpemUgPSBkZWZhdWx0cy5jYWNoZU1heFNpemUgfSkge1xuICAgIHRoaXMuY2FjaGUgPSBuZXcgTFJVKHtcbiAgICAgIG1heDogbWF4U2l6ZSxcbiAgICAgIHR0bCxcbiAgICB9KTtcbiAgfVxuXG4gIGdldChrZXkpIHtcbiAgICByZXR1cm4gdGhpcy5jYWNoZS5nZXQoa2V5KSB8fCBudWxsO1xuICB9XG5cbiAgcHV0KGtleSwgdmFsdWUsIHR0bCA9IHRoaXMudHRsKSB7XG4gICAgdGhpcy5jYWNoZS5zZXQoa2V5LCB2YWx1ZSwgdHRsKTtcbiAgfVxuXG4gIGRlbChrZXkpIHtcbiAgICB0aGlzLmNhY2hlLmRlbGV0ZShrZXkpO1xuICB9XG5cbiAgY2xlYXIoKSB7XG4gICAgdGhpcy5jYWNoZS5jbGVhcigpO1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IExSVUNhY2hlO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQTtBQUNBO0FBQXNDO0FBRS9CLE1BQU1BLFFBQVEsQ0FBQztFQUNwQkMsV0FBVyxDQUFDO0lBQUVDLEdBQUcsR0FBR0MsaUJBQVEsQ0FBQ0MsUUFBUTtJQUFFQyxPQUFPLEdBQUdGLGlCQUFRLENBQUNHO0VBQWEsQ0FBQyxFQUFFO0lBQ3hFLElBQUksQ0FBQ0MsS0FBSyxHQUFHLElBQUlDLGtCQUFHLENBQUM7TUFDbkJDLEdBQUcsRUFBRUosT0FBTztNQUNaSDtJQUNGLENBQUMsQ0FBQztFQUNKO0VBRUFRLEdBQUcsQ0FBQ0MsR0FBRyxFQUFFO0lBQ1AsT0FBTyxJQUFJLENBQUNKLEtBQUssQ0FBQ0csR0FBRyxDQUFDQyxHQUFHLENBQUMsSUFBSSxJQUFJO0VBQ3BDO0VBRUFDLEdBQUcsQ0FBQ0QsR0FBRyxFQUFFRSxLQUFLLEVBQUVYLEdBQUcsR0FBRyxJQUFJLENBQUNBLEdBQUcsRUFBRTtJQUM5QixJQUFJLENBQUNLLEtBQUssQ0FBQ08sR0FBRyxDQUFDSCxHQUFHLEVBQUVFLEtBQUssRUFBRVgsR0FBRyxDQUFDO0VBQ2pDO0VBRUFhLEdBQUcsQ0FBQ0osR0FBRyxFQUFFO0lBQ1AsSUFBSSxDQUFDSixLQUFLLENBQUNTLE1BQU0sQ0FBQ0wsR0FBRyxDQUFDO0VBQ3hCO0VBRUFNLEtBQUssR0FBRztJQUNOLElBQUksQ0FBQ1YsS0FBSyxDQUFDVSxLQUFLLEVBQUU7RUFDcEI7QUFDRjtBQUFDO0FBQUEsZUFFY2pCLFFBQVE7QUFBQSJ9
|
|
@@ -24,12 +24,16 @@ class GridFSBucketAdapter extends _FilesAdapter.FilesAdapter {
|
|
|
24
24
|
super();
|
|
25
25
|
this._databaseURI = mongoDatabaseURI;
|
|
26
26
|
this._algorithm = 'aes-256-gcm';
|
|
27
|
-
this._encryptionKey = encryptionKey !== undefined ? crypto.createHash('sha256').update(String(encryptionKey)).digest('base64').
|
|
27
|
+
this._encryptionKey = encryptionKey !== undefined ? crypto.createHash('sha256').update(String(encryptionKey)).digest('base64').substring(0, 32) : null;
|
|
28
28
|
const defaultMongoOptions = {
|
|
29
29
|
useNewUrlParser: true,
|
|
30
30
|
useUnifiedTopology: true
|
|
31
31
|
};
|
|
32
|
-
|
|
32
|
+
const _mongoOptions = Object.assign(defaultMongoOptions, mongoOptions);
|
|
33
|
+
for (const key of ['enableSchemaHooks', 'schemaCacheTtl', 'maxTimeMS']) {
|
|
34
|
+
delete _mongoOptions[key];
|
|
35
|
+
}
|
|
36
|
+
this._mongoOptions = _mongoOptions;
|
|
33
37
|
}
|
|
34
38
|
_connect() {
|
|
35
39
|
if (!this._connectionPromise) {
|
|
@@ -117,8 +121,8 @@ class GridFSBucketAdapter extends _FilesAdapter.FilesAdapter {
|
|
|
117
121
|
});
|
|
118
122
|
}
|
|
119
123
|
async rotateEncryptionKey(options = {}) {
|
|
120
|
-
|
|
121
|
-
|
|
124
|
+
let fileNames = [];
|
|
125
|
+
let oldKeyFileAdapter = {};
|
|
122
126
|
const bucket = await this._getBucket();
|
|
123
127
|
if (options.oldKey !== undefined) {
|
|
124
128
|
oldKeyFileAdapter = new GridFSBucketAdapter(this._databaseURI, this._mongoOptions, options.oldKey);
|
|
@@ -133,46 +137,25 @@ class GridFSBucketAdapter extends _FilesAdapter.FilesAdapter {
|
|
|
133
137
|
fileNames.push(file.filename);
|
|
134
138
|
});
|
|
135
139
|
}
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
fileNamesNotRotated = fileNamesNotRotated.filter(function (value) {
|
|
147
|
-
return value !== fileName;
|
|
148
|
-
});
|
|
149
|
-
fileNameIndex += 1;
|
|
150
|
-
if (fileNameIndex == fileNameTotal) {
|
|
151
|
-
resolve({
|
|
152
|
-
rotated: fileNamesRotated,
|
|
153
|
-
notRotated: fileNamesNotRotated
|
|
154
|
-
});
|
|
155
|
-
}
|
|
156
|
-
}).catch(() => {
|
|
157
|
-
fileNameIndex += 1;
|
|
158
|
-
if (fileNameIndex == fileNameTotal) {
|
|
159
|
-
resolve({
|
|
160
|
-
rotated: fileNamesRotated,
|
|
161
|
-
notRotated: fileNamesNotRotated
|
|
162
|
-
});
|
|
163
|
-
}
|
|
164
|
-
});
|
|
165
|
-
}).catch(() => {
|
|
166
|
-
fileNameIndex += 1;
|
|
167
|
-
if (fileNameIndex == fileNameTotal) {
|
|
168
|
-
resolve({
|
|
169
|
-
rotated: fileNamesRotated,
|
|
170
|
-
notRotated: fileNamesNotRotated
|
|
171
|
-
});
|
|
172
|
-
}
|
|
140
|
+
let fileNamesNotRotated = fileNames;
|
|
141
|
+
const fileNamesRotated = [];
|
|
142
|
+
for (const fileName of fileNames) {
|
|
143
|
+
try {
|
|
144
|
+
const plainTextData = await oldKeyFileAdapter.getFileData(fileName);
|
|
145
|
+
// Overwrite file with data encrypted with new key
|
|
146
|
+
await this.createFile(fileName, plainTextData);
|
|
147
|
+
fileNamesRotated.push(fileName);
|
|
148
|
+
fileNamesNotRotated = fileNamesNotRotated.filter(function (value) {
|
|
149
|
+
return value !== fileName;
|
|
173
150
|
});
|
|
174
|
-
})
|
|
175
|
-
|
|
151
|
+
} catch (err) {
|
|
152
|
+
continue;
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
return {
|
|
156
|
+
rotated: fileNamesRotated,
|
|
157
|
+
notRotated: fileNamesNotRotated
|
|
158
|
+
};
|
|
176
159
|
}
|
|
177
160
|
getFileLocation(config, filename) {
|
|
178
161
|
return config.mount + '/files/' + config.applicationId + '/' + encodeURIComponent(filename);
|
|
@@ -248,4 +231,4 @@ class GridFSBucketAdapter extends _FilesAdapter.FilesAdapter {
|
|
|
248
231
|
exports.GridFSBucketAdapter = GridFSBucketAdapter;
|
|
249
232
|
var _default = GridFSBucketAdapter;
|
|
250
233
|
exports.default = _default;
|
|
251
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJjcnlwdG8iLCJyZXF1aXJlIiwiR3JpZEZTQnVja2V0QWRhcHRlciIsIkZpbGVzQWRhcHRlciIsImNvbnN0cnVjdG9yIiwibW9uZ29EYXRhYmFzZVVSSSIsImRlZmF1bHRzIiwiRGVmYXVsdE1vbmdvVVJJIiwibW9uZ29PcHRpb25zIiwiZW5jcnlwdGlvbktleSIsInVuZGVmaW5lZCIsIl9kYXRhYmFzZVVSSSIsIl9hbGdvcml0aG0iLCJfZW5jcnlwdGlvbktleSIsImNyZWF0ZUhhc2giLCJ1cGRhdGUiLCJTdHJpbmciLCJkaWdlc3QiLCJzdWJzdHIiLCJkZWZhdWx0TW9uZ29PcHRpb25zIiwidXNlTmV3VXJsUGFyc2VyIiwidXNlVW5pZmllZFRvcG9sb2d5IiwiX21vbmdvT3B0aW9ucyIsIk9iamVjdCIsImFzc2lnbiIsIl9jb25uZWN0IiwiX2Nvbm5lY3Rpb25Qcm9taXNlIiwiTW9uZ29DbGllbnQiLCJjb25uZWN0IiwidGhlbiIsImNsaWVudCIsIl9jbGllbnQiLCJkYiIsInMiLCJvcHRpb25zIiwiZGJOYW1lIiwiX2dldEJ1Y2tldCIsImRhdGFiYXNlIiwiR3JpZEZTQnVja2V0IiwiY3JlYXRlRmlsZSIsImZpbGVuYW1lIiwiZGF0YSIsImNvbnRlbnRUeXBlIiwiYnVja2V0Iiwic3RyZWFtIiwib3BlblVwbG9hZFN0cmVhbSIsIm1ldGFkYXRhIiwiaXYiLCJyYW5kb21CeXRlcyIsImNpcGhlciIsImNyZWF0ZUNpcGhlcml2IiwiZW5jcnlwdGVkUmVzdWx0IiwiQnVmZmVyIiwiY29uY2F0IiwiZmluYWwiLCJnZXRBdXRoVGFnIiwid3JpdGUiLCJlcnIiLCJQcm9taXNlIiwicmVzb2x2ZSIsInJlamVjdCIsImVuZCIsIm9uIiwiZGVsZXRlRmlsZSIsImRvY3VtZW50cyIsImZpbmQiLCJ0b0FycmF5IiwibGVuZ3RoIiwiRXJyb3IiLCJhbGwiLCJtYXAiLCJkb2MiLCJkZWxldGUiLCJfaWQiLCJnZXRGaWxlRGF0YSIsIm9wZW5Eb3dubG9hZFN0cmVhbUJ5TmFtZSIsInJlYWQiLCJjaHVua3MiLCJwdXNoIiwiYXV0aFRhZ0xvY2F0aW9uIiwiaXZMb2NhdGlvbiIsImF1dGhUYWciLCJzbGljZSIsImVuY3J5cHRlZCIsImRlY2lwaGVyIiwiY3JlYXRlRGVjaXBoZXJpdiIsInNldEF1dGhUYWciLCJkZWNyeXB0ZWQiLCJyb3RhdGVFbmNyeXB0aW9uS2V5IiwiZmlsZU5hbWVzIiwib2xkS2V5RmlsZUFkYXB0ZXIiLCJvbGRLZXkiLCJmaWxlTmFtZXNJdGVyYXRvciIsImZvckVhY2giLCJmaWxlIiwiZmlsZU5hbWVzTm90Um90YXRlZCIsImZpbGVOYW1lc1JvdGF0ZWQiLCJmaWxlTmFtZVRvdGFsIiwiZmlsZU5hbWVJbmRleCIsImZpbGVOYW1lIiwicGxhaW5UZXh0RGF0YSIsImZpbHRlciIsInZhbHVlIiwicm90YXRlZCIsIm5vdFJvdGF0ZWQiLCJjYXRjaCIsImdldEZpbGVMb2NhdGlvbiIsImNvbmZpZyIsIm1vdW50IiwiYXBwbGljYXRpb25JZCIsImVuY29kZVVSSUNvbXBvbmVudCIsImdldE1ldGFkYXRhIiwiZmlsZXMiLCJoYW5kbGVGaWxlU3RyZWFtIiwicmVxIiwicmVzIiwicGFydHMiLCJnZXQiLCJyZXBsYWNlIiwic3BsaXQiLCJwYXJ0aWFsc3RhcnQiLCJwYXJ0aWFsZW5kIiwiZmlsZUxlbmd0aCIsImZpbGVTdGFydCIsInBhcnNlSW50IiwiZmlsZUVuZCIsInN0YXJ0IiwiTWF0aCIsIm1pbiIsIm1heCIsImlzTmFOIiwic3RhdHVzIiwiaGVhZGVyIiwiY2h1bmsiLCJlIiwic2VuZCIsIm1lc3NhZ2UiLCJoYW5kbGVTaHV0ZG93biIsImNsb3NlIiwidmFsaWRhdGVGaWxlbmFtZSJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9BZGFwdGVycy9GaWxlcy9HcmlkRlNCdWNrZXRBZGFwdGVyLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuIEdyaWRGU0J1Y2tldEFkYXB0ZXJcbiBTdG9yZXMgZmlsZXMgaW4gTW9uZ28gdXNpbmcgR3JpZEZTXG4gUmVxdWlyZXMgdGhlIGRhdGFiYXNlIGFkYXB0ZXIgdG8gYmUgYmFzZWQgb24gbW9uZ29jbGllbnRcblxuIEBmbG93IHdlYWtcbiAqL1xuXG4vLyBAZmxvdy1kaXNhYmxlLW5leHRcbmltcG9ydCB7IE1vbmdvQ2xpZW50LCBHcmlkRlNCdWNrZXQsIERiIH0gZnJvbSAnbW9uZ29kYic7XG5pbXBvcnQgeyBGaWxlc0FkYXB0ZXIsIHZhbGlkYXRlRmlsZW5hbWUgfSBmcm9tICcuL0ZpbGVzQWRhcHRlcic7XG5pbXBvcnQgZGVmYXVsdHMgZnJvbSAnLi4vLi4vZGVmYXVsdHMnO1xuY29uc3QgY3J5cHRvID0gcmVxdWlyZSgnY3J5cHRvJyk7XG5cbmV4cG9ydCBjbGFzcyBHcmlkRlNCdWNrZXRBZGFwdGVyIGV4dGVuZHMgRmlsZXNBZGFwdGVyIHtcbiAgX2RhdGFiYXNlVVJJOiBzdHJpbmc7XG4gIF9jb25uZWN0aW9uUHJvbWlzZTogUHJvbWlzZTxEYj47XG4gIF9tb25nb09wdGlvbnM6IE9iamVjdDtcbiAgX2FsZ29yaXRobTogc3RyaW5nO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIG1vbmdvRGF0YWJhc2VVUkkgPSBkZWZhdWx0cy5EZWZhdWx0TW9uZ29VUkksXG4gICAgbW9uZ29PcHRpb25zID0ge30sXG4gICAgZW5jcnlwdGlvbktleSA9IHVuZGVmaW5lZFxuICApIHtcbiAgICBzdXBlcigpO1xuICAgIHRoaXMuX2RhdGFiYXNlVVJJID0gbW9uZ29EYXRhYmFzZVVSSTtcbiAgICB0aGlzLl9hbGdvcml0aG0gPSAnYWVzLTI1Ni1nY20nO1xuICAgIHRoaXMuX2VuY3J5cHRpb25LZXkgPVxuICAgICAgZW5jcnlwdGlvbktleSAhPT0gdW5kZWZpbmVkXG4gICAgICAgID8gY3J5cHRvLmNyZWF0ZUhhc2goJ3NoYTI1NicpLnVwZGF0ZShTdHJpbmcoZW5jcnlwdGlvbktleSkpLmRpZ2VzdCgnYmFzZTY0Jykuc3Vic3RyKDAsIDMyKVxuICAgICAgICA6IG51bGw7XG4gICAgY29uc3QgZGVmYXVsdE1vbmdvT3B0aW9ucyA9IHtcbiAgICAgIHVzZU5ld1VybFBhcnNlcjogdHJ1ZSxcbiAgICAgIHVzZVVuaWZpZWRUb3BvbG9neTogdHJ1ZSxcbiAgICB9O1xuICAgIHRoaXMuX21vbmdvT3B0aW9ucyA9IE9iamVjdC5hc3NpZ24oZGVmYXVsdE1vbmdvT3B0aW9ucywgbW9uZ29PcHRpb25zKTtcbiAgfVxuXG4gIF9jb25uZWN0KCkge1xuICAgIGlmICghdGhpcy5fY29ubmVjdGlvblByb21pc2UpIHtcbiAgICAgIHRoaXMuX2Nvbm5lY3Rpb25Qcm9taXNlID0gTW9uZ29DbGllbnQuY29ubmVjdCh0aGlzLl9kYXRhYmFzZVVSSSwgdGhpcy5fbW9uZ29PcHRpb25zKS50aGVuKFxuICAgICAgICBjbGllbnQgPT4ge1xuICAgICAgICAgIHRoaXMuX2NsaWVudCA9IGNsaWVudDtcbiAgICAgICAgICByZXR1cm4gY2xpZW50LmRiKGNsaWVudC5zLm9wdGlvbnMuZGJOYW1lKTtcbiAgICAgICAgfVxuICAgICAgKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuX2Nvbm5lY3Rpb25Qcm9taXNlO1xuICB9XG5cbiAgX2dldEJ1Y2tldCgpIHtcbiAgICByZXR1cm4gdGhpcy5fY29ubmVjdCgpLnRoZW4oZGF0YWJhc2UgPT4gbmV3IEdyaWRGU0J1Y2tldChkYXRhYmFzZSkpO1xuICB9XG5cbiAgLy8gRm9yIGEgZ2l2ZW4gY29uZmlnIG9iamVjdCwgZmlsZW5hbWUsIGFuZCBkYXRhLCBzdG9yZSBhIGZpbGVcbiAgLy8gUmV0dXJucyBhIHByb21pc2VcbiAgYXN5bmMgY3JlYXRlRmlsZShmaWxlbmFtZTogc3RyaW5nLCBkYXRhLCBjb250ZW50VHlwZSwgb3B0aW9ucyA9IHt9KSB7XG4gICAgY29uc3QgYnVja2V0ID0gYXdhaXQgdGhpcy5fZ2V0QnVja2V0KCk7XG4gICAgY29uc3Qgc3RyZWFtID0gYXdhaXQgYnVja2V0Lm9wZW5VcGxvYWRTdHJlYW0oZmlsZW5hbWUsIHtcbiAgICAgIG1ldGFkYXRhOiBvcHRpb25zLm1ldGFkYXRhLFxuICAgIH0pO1xuICAgIGlmICh0aGlzLl9lbmNyeXB0aW9uS2V5ICE9PSBudWxsKSB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCBpdiA9IGNyeXB0by5yYW5kb21CeXRlcygxNik7XG4gICAgICAgIGNvbnN0IGNpcGhlciA9IGNyeXB0by5jcmVhdGVDaXBoZXJpdih0aGlzLl9hbGdvcml0aG0sIHRoaXMuX2VuY3J5cHRpb25LZXksIGl2KTtcbiAgICAgICAgY29uc3QgZW5jcnlwdGVkUmVzdWx0ID0gQnVmZmVyLmNvbmNhdChbXG4gICAgICAgICAgY2lwaGVyLnVwZGF0ZShkYXRhKSxcbiAgICAgICAgICBjaXBoZXIuZmluYWwoKSxcbiAgICAgICAgICBpdixcbiAgICAgICAgICBjaXBoZXIuZ2V0QXV0aFRhZygpLFxuICAgICAgICBdKTtcbiAgICAgICAgYXdhaXQgc3RyZWFtLndyaXRlKGVuY3J5cHRlZFJlc3VsdCk7XG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgICByZXR1cm4gcmVqZWN0KGVycik7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBhd2FpdCBzdHJlYW0ud3JpdGUoZGF0YSk7XG4gICAgfVxuICAgIHN0cmVhbS5lbmQoKTtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgc3RyZWFtLm9uKCdmaW5pc2gnLCByZXNvbHZlKTtcbiAgICAgIHN0cmVhbS5vbignZXJyb3InLCByZWplY3QpO1xuICAgIH0pO1xuICB9XG5cbiAgYXN5bmMgZGVsZXRlRmlsZShmaWxlbmFtZTogc3RyaW5nKSB7XG4gICAgY29uc3QgYnVja2V0ID0gYXdhaXQgdGhpcy5fZ2V0QnVja2V0KCk7XG4gICAgY29uc3QgZG9jdW1lbnRzID0gYXdhaXQgYnVja2V0LmZpbmQoeyBmaWxlbmFtZSB9KS50b0FycmF5KCk7XG4gICAgaWYgKGRvY3VtZW50cy5sZW5ndGggPT09IDApIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignRmlsZU5vdEZvdW5kJyk7XG4gICAgfVxuICAgIHJldHVybiBQcm9taXNlLmFsbChcbiAgICAgIGRvY3VtZW50cy5tYXAoZG9jID0+IHtcbiAgICAgICAgcmV0dXJuIGJ1Y2tldC5kZWxldGUoZG9jLl9pZCk7XG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuICBhc3luYyBnZXRGaWxlRGF0YShmaWxlbmFtZTogc3RyaW5nKSB7XG4gICAgY29uc3QgYnVja2V0ID0gYXdhaXQgdGhpcy5fZ2V0QnVja2V0KCk7XG4gICAgY29uc3Qgc3RyZWFtID0gYnVja2V0Lm9wZW5Eb3dubG9hZFN0cmVhbUJ5TmFtZShmaWxlbmFtZSk7XG4gICAgc3RyZWFtLnJlYWQoKTtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgY29uc3QgY2h1bmtzID0gW107XG4gICAgICBzdHJlYW0ub24oJ2RhdGEnLCBkYXRhID0+IHtcbiAgICAgICAgY2h1bmtzLnB1c2goZGF0YSk7XG4gICAgICB9KTtcbiAgICAgIHN0cmVhbS5vbignZW5kJywgKCkgPT4ge1xuICAgICAgICBjb25zdCBkYXRhID0gQnVmZmVyLmNvbmNhdChjaHVua3MpO1xuICAgICAgICBpZiAodGhpcy5fZW5jcnlwdGlvbktleSAhPT0gbnVsbCkge1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCBhdXRoVGFnTG9jYXRpb24gPSBkYXRhLmxlbmd0aCAtIDE2O1xuICAgICAgICAgICAgY29uc3QgaXZMb2NhdGlvbiA9IGRhdGEubGVuZ3RoIC0gMzI7XG4gICAgICAgICAgICBjb25zdCBhdXRoVGFnID0gZGF0YS5zbGljZShhdXRoVGFnTG9jYXRpb24pO1xuICAgICAgICAgICAgY29uc3QgaXYgPSBkYXRhLnNsaWNlKGl2TG9jYXRpb24sIGF1dGhUYWdMb2NhdGlvbik7XG4gICAgICAgICAgICBjb25zdCBlbmNyeXB0ZWQgPSBkYXRhLnNsaWNlKDAsIGl2TG9jYXRpb24pO1xuICAgICAgICAgICAgY29uc3QgZGVjaXBoZXIgPSBjcnlwdG8uY3JlYXRlRGVjaXBoZXJpdih0aGlzLl9hbGdvcml0aG0sIHRoaXMuX2VuY3J5cHRpb25LZXksIGl2KTtcbiAgICAgICAgICAgIGRlY2lwaGVyLnNldEF1dGhUYWcoYXV0aFRhZyk7XG4gICAgICAgICAgICBjb25zdCBkZWNyeXB0ZWQgPSBCdWZmZXIuY29uY2F0KFtkZWNpcGhlci51cGRhdGUoZW5jcnlwdGVkKSwgZGVjaXBoZXIuZmluYWwoKV0pO1xuICAgICAgICAgICAgcmV0dXJuIHJlc29sdmUoZGVjcnlwdGVkKTtcbiAgICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgIHJldHVybiByZWplY3QoZXJyKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmVzb2x2ZShkYXRhKTtcbiAgICAgIH0pO1xuICAgICAgc3RyZWFtLm9uKCdlcnJvcicsIGVyciA9PiB7XG4gICAgICAgIHJlamVjdChlcnIpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICBhc3luYyByb3RhdGVFbmNyeXB0aW9uS2V5KG9wdGlvbnMgPSB7fSkge1xuICAgIHZhciBmaWxlTmFtZXMgPSBbXTtcbiAgICB2YXIgb2xkS2V5RmlsZUFkYXB0ZXIgPSB7fTtcbiAgICBjb25zdCBidWNrZXQgPSBhd2FpdCB0aGlzLl9nZXRCdWNrZXQoKTtcbiAgICBpZiAob3B0aW9ucy5vbGRLZXkgIT09IHVuZGVmaW5lZCkge1xuICAgICAgb2xkS2V5RmlsZUFkYXB0ZXIgPSBuZXcgR3JpZEZTQnVja2V0QWRhcHRlcihcbiAgICAgICAgdGhpcy5fZGF0YWJhc2VVUkksXG4gICAgICAgIHRoaXMuX21vbmdvT3B0aW9ucyxcbiAgICAgICAgb3B0aW9ucy5vbGRLZXlcbiAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgIG9sZEtleUZpbGVBZGFwdGVyID0gbmV3IEdyaWRGU0J1Y2tldEFkYXB0ZXIodGhpcy5fZGF0YWJhc2VVUkksIHRoaXMuX21vbmdvT3B0aW9ucyk7XG4gICAgfVxuICAgIGlmIChvcHRpb25zLmZpbGVOYW1lcyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBmaWxlTmFtZXMgPSBvcHRpb25zLmZpbGVOYW1lcztcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgZmlsZU5hbWVzSXRlcmF0b3IgPSBhd2FpdCBidWNrZXQuZmluZCgpLnRvQXJyYXkoKTtcbiAgICAgIGZpbGVOYW1lc0l0ZXJhdG9yLmZvckVhY2goZmlsZSA9PiB7XG4gICAgICAgIGZpbGVOYW1lcy5wdXNoKGZpbGUuZmlsZW5hbWUpO1xuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHtcbiAgICAgIHZhciBmaWxlTmFtZXNOb3RSb3RhdGVkID0gZmlsZU5hbWVzO1xuICAgICAgdmFyIGZpbGVOYW1lc1JvdGF0ZWQgPSBbXTtcbiAgICAgIHZhciBmaWxlTmFtZVRvdGFsID0gZmlsZU5hbWVzLmxlbmd0aDtcbiAgICAgIHZhciBmaWxlTmFtZUluZGV4ID0gMDtcbiAgICAgIGZpbGVOYW1lcy5mb3JFYWNoKGZpbGVOYW1lID0+IHtcbiAgICAgICAgb2xkS2V5RmlsZUFkYXB0ZXJcbiAgICAgICAgICAuZ2V0RmlsZURhdGEoZmlsZU5hbWUpXG4gICAgICAgICAgLnRoZW4ocGxhaW5UZXh0RGF0YSA9PiB7XG4gICAgICAgICAgICAvL092ZXJ3cml0ZSBmaWxlIHdpdGggZGF0YSBlbmNyeXB0ZWQgd2l0aCBuZXcga2V5XG4gICAgICAgICAgICB0aGlzLmNyZWF0ZUZpbGUoZmlsZU5hbWUsIHBsYWluVGV4dERhdGEpXG4gICAgICAgICAgICAgIC50aGVuKCgpID0+IHtcbiAgICAgICAgICAgICAgICBmaWxlTmFtZXNSb3RhdGVkLnB1c2goZmlsZU5hbWUpO1xuICAgICAgICAgICAgICAgIGZpbGVOYW1lc05vdFJvdGF0ZWQgPSBmaWxlTmFtZXNOb3RSb3RhdGVkLmZpbHRlcihmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZSAhPT0gZmlsZU5hbWU7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgZmlsZU5hbWVJbmRleCArPSAxO1xuICAgICAgICAgICAgICAgIGlmIChmaWxlTmFtZUluZGV4ID09IGZpbGVOYW1lVG90YWwpIHtcbiAgICAgICAgICAgICAgICAgIHJlc29sdmUoe1xuICAgICAgICAgICAgICAgICAgICByb3RhdGVkOiBmaWxlTmFtZXNSb3RhdGVkLFxuICAgICAgICAgICAgICAgICAgICBub3RSb3RhdGVkOiBmaWxlTmFtZXNOb3RSb3RhdGVkLFxuICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAuY2F0Y2goKCkgPT4ge1xuICAgICAgICAgICAgICAgIGZpbGVOYW1lSW5kZXggKz0gMTtcbiAgICAgICAgICAgICAgICBpZiAoZmlsZU5hbWVJbmRleCA9PSBmaWxlTmFtZVRvdGFsKSB7XG4gICAgICAgICAgICAgICAgICByZXNvbHZlKHtcbiAgICAgICAgICAgICAgICAgICAgcm90YXRlZDogZmlsZU5hbWVzUm90YXRlZCxcbiAgICAgICAgICAgICAgICAgICAgbm90Um90YXRlZDogZmlsZU5hbWVzTm90Um90YXRlZCxcbiAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSlcbiAgICAgICAgICAuY2F0Y2goKCkgPT4ge1xuICAgICAgICAgICAgZmlsZU5hbWVJbmRleCArPSAxO1xuICAgICAgICAgICAgaWYgKGZpbGVOYW1lSW5kZXggPT0gZmlsZU5hbWVUb3RhbCkge1xuICAgICAgICAgICAgICByZXNvbHZlKHtcbiAgICAgICAgICAgICAgICByb3RhdGVkOiBmaWxlTmFtZXNSb3RhdGVkLFxuICAgICAgICAgICAgICAgIG5vdFJvdGF0ZWQ6IGZpbGVOYW1lc05vdFJvdGF0ZWQsXG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICBnZXRGaWxlTG9jYXRpb24oY29uZmlnLCBmaWxlbmFtZSkge1xuICAgIHJldHVybiBjb25maWcubW91bnQgKyAnL2ZpbGVzLycgKyBjb25maWcuYXBwbGljYXRpb25JZCArICcvJyArIGVuY29kZVVSSUNvbXBvbmVudChmaWxlbmFtZSk7XG4gIH1cblxuICBhc3luYyBnZXRNZXRhZGF0YShmaWxlbmFtZSkge1xuICAgIGNvbnN0IGJ1Y2tldCA9IGF3YWl0IHRoaXMuX2dldEJ1Y2tldCgpO1xuICAgIGNvbnN0IGZpbGVzID0gYXdhaXQgYnVja2V0LmZpbmQoeyBmaWxlbmFtZSB9KS50b0FycmF5KCk7XG4gICAgaWYgKGZpbGVzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuIHt9O1xuICAgIH1cbiAgICBjb25zdCB7IG1ldGFkYXRhIH0gPSBmaWxlc1swXTtcbiAgICByZXR1cm4geyBtZXRhZGF0YSB9O1xuICB9XG5cbiAgYXN5bmMgaGFuZGxlRmlsZVN0cmVhbShmaWxlbmFtZTogc3RyaW5nLCByZXEsIHJlcywgY29udGVudFR5cGUpIHtcbiAgICBjb25zdCBidWNrZXQgPSBhd2FpdCB0aGlzLl9nZXRCdWNrZXQoKTtcbiAgICBjb25zdCBmaWxlcyA9IGF3YWl0IGJ1Y2tldC5maW5kKHsgZmlsZW5hbWUgfSkudG9BcnJheSgpO1xuICAgIGlmIChmaWxlcy5sZW5ndGggPT09IDApIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignRmlsZU5vdEZvdW5kJyk7XG4gICAgfVxuICAgIGNvbnN0IHBhcnRzID0gcmVxXG4gICAgICAuZ2V0KCdSYW5nZScpXG4gICAgICAucmVwbGFjZSgvYnl0ZXM9LywgJycpXG4gICAgICAuc3BsaXQoJy0nKTtcbiAgICBjb25zdCBwYXJ0aWFsc3RhcnQgPSBwYXJ0c1swXTtcbiAgICBjb25zdCBwYXJ0aWFsZW5kID0gcGFydHNbMV07XG5cbiAgICBjb25zdCBmaWxlTGVuZ3RoID0gZmlsZXNbMF0ubGVuZ3RoO1xuICAgIGNvbnN0IGZpbGVTdGFydCA9IHBhcnNlSW50KHBhcnRpYWxzdGFydCwgMTApO1xuICAgIGNvbnN0IGZpbGVFbmQgPSBwYXJ0aWFsZW5kID8gcGFyc2VJbnQocGFydGlhbGVuZCwgMTApIDogZmlsZUxlbmd0aDtcblxuICAgIGxldCBzdGFydCA9IE1hdGgubWluKGZpbGVTdGFydCB8fCAwLCBmaWxlRW5kLCBmaWxlTGVuZ3RoKTtcbiAgICBsZXQgZW5kID0gTWF0aC5tYXgoZmlsZVN0YXJ0IHx8IDAsIGZpbGVFbmQpICsgMSB8fCBmaWxlTGVuZ3RoO1xuICAgIGlmIChpc05hTihmaWxlU3RhcnQpKSB7XG4gICAgICBzdGFydCA9IGZpbGVMZW5ndGggLSBlbmQgKyAxO1xuICAgICAgZW5kID0gZmlsZUxlbmd0aDtcbiAgICB9XG4gICAgZW5kID0gTWF0aC5taW4oZW5kLCBmaWxlTGVuZ3RoKTtcbiAgICBzdGFydCA9IE1hdGgubWF4KHN0YXJ0LCAwKTtcblxuICAgIHJlcy5zdGF0dXMoMjA2KTtcbiAgICByZXMuaGVhZGVyKCdBY2NlcHQtUmFuZ2VzJywgJ2J5dGVzJyk7XG4gICAgcmVzLmhlYWRlcignQ29udGVudC1MZW5ndGgnLCBlbmQgLSBzdGFydCk7XG4gICAgcmVzLmhlYWRlcignQ29udGVudC1SYW5nZScsICdieXRlcyAnICsgc3RhcnQgKyAnLScgKyBlbmQgKyAnLycgKyBmaWxlTGVuZ3RoKTtcbiAgICByZXMuaGVhZGVyKCdDb250ZW50LVR5cGUnLCBjb250ZW50VHlwZSk7XG4gICAgY29uc3Qgc3RyZWFtID0gYnVja2V0Lm9wZW5Eb3dubG9hZFN0cmVhbUJ5TmFtZShmaWxlbmFtZSk7XG4gICAgc3RyZWFtLnN0YXJ0KHN0YXJ0KTtcbiAgICBpZiAoZW5kKSB7XG4gICAgICBzdHJlYW0uZW5kKGVuZCk7XG4gICAgfVxuICAgIHN0cmVhbS5vbignZGF0YScsIGNodW5rID0+IHtcbiAgICAgIHJlcy53cml0ZShjaHVuayk7XG4gICAgfSk7XG4gICAgc3RyZWFtLm9uKCdlcnJvcicsIGUgPT4ge1xuICAgICAgcmVzLnN0YXR1cyg0MDQpO1xuICAgICAgcmVzLnNlbmQoZS5tZXNzYWdlKTtcbiAgICB9KTtcbiAgICBzdHJlYW0ub24oJ2VuZCcsICgpID0+IHtcbiAgICAgIHJlcy5lbmQoKTtcbiAgICB9KTtcbiAgfVxuXG4gIGhhbmRsZVNodXRkb3duKCkge1xuICAgIGlmICghdGhpcy5fY2xpZW50KSB7XG4gICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLl9jbGllbnQuY2xvc2UoZmFsc2UpO1xuICB9XG5cbiAgdmFsaWRhdGVGaWxlbmFtZShmaWxlbmFtZSkge1xuICAgIHJldHVybiB2YWxpZGF0ZUZpbGVuYW1lKGZpbGVuYW1lKTtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBHcmlkRlNCdWNrZXRBZGFwdGVyO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7QUFTQTtBQUNBO0FBQ0E7QUFBc0M7QUFYdEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBSUEsTUFBTUEsTUFBTSxHQUFHQyxPQUFPLENBQUMsUUFBUSxDQUFDO0FBRXpCLE1BQU1DLG1CQUFtQixTQUFTQywwQkFBWSxDQUFDO0VBTXBEQyxXQUFXLENBQ1RDLGdCQUFnQixHQUFHQyxpQkFBUSxDQUFDQyxlQUFlLEVBQzNDQyxZQUFZLEdBQUcsQ0FBQyxDQUFDLEVBQ2pCQyxhQUFhLEdBQUdDLFNBQVMsRUFDekI7SUFDQSxLQUFLLEVBQUU7SUFDUCxJQUFJLENBQUNDLFlBQVksR0FBR04sZ0JBQWdCO0lBQ3BDLElBQUksQ0FBQ08sVUFBVSxHQUFHLGFBQWE7SUFDL0IsSUFBSSxDQUFDQyxjQUFjLEdBQ2pCSixhQUFhLEtBQUtDLFNBQVMsR0FDdkJWLE1BQU0sQ0FBQ2MsVUFBVSxDQUFDLFFBQVEsQ0FBQyxDQUFDQyxN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
|
|
234
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJjcnlwdG8iLCJyZXF1aXJlIiwiR3JpZEZTQnVja2V0QWRhcHRlciIsIkZpbGVzQWRhcHRlciIsImNvbnN0cnVjdG9yIiwibW9uZ29EYXRhYmFzZVVSSSIsImRlZmF1bHRzIiwiRGVmYXVsdE1vbmdvVVJJIiwibW9uZ29PcHRpb25zIiwiZW5jcnlwdGlvbktleSIsInVuZGVmaW5lZCIsIl9kYXRhYmFzZVVSSSIsIl9hbGdvcml0aG0iLCJfZW5jcnlwdGlvbktleSIsImNyZWF0ZUhhc2giLCJ1cGRhdGUiLCJTdHJpbmciLCJkaWdlc3QiLCJzdWJzdHJpbmciLCJkZWZhdWx0TW9uZ29PcHRpb25zIiwidXNlTmV3VXJsUGFyc2VyIiwidXNlVW5pZmllZFRvcG9sb2d5IiwiX21vbmdvT3B0aW9ucyIsIk9iamVjdCIsImFzc2lnbiIsImtleSIsIl9jb25uZWN0IiwiX2Nvbm5lY3Rpb25Qcm9taXNlIiwiTW9uZ29DbGllbnQiLCJjb25uZWN0IiwidGhlbiIsImNsaWVudCIsIl9jbGllbnQiLCJkYiIsInMiLCJvcHRpb25zIiwiZGJOYW1lIiwiX2dldEJ1Y2tldCIsImRhdGFiYXNlIiwiR3JpZEZTQnVja2V0IiwiY3JlYXRlRmlsZSIsImZpbGVuYW1lIiwiZGF0YSIsImNvbnRlbnRUeXBlIiwiYnVja2V0Iiwic3RyZWFtIiwib3BlblVwbG9hZFN0cmVhbSIsIm1ldGFkYXRhIiwiaXYiLCJyYW5kb21CeXRlcyIsImNpcGhlciIsImNyZWF0ZUNpcGhlcml2IiwiZW5jcnlwdGVkUmVzdWx0IiwiQnVmZmVyIiwiY29uY2F0IiwiZmluYWwiLCJnZXRBdXRoVGFnIiwid3JpdGUiLCJlcnIiLCJQcm9taXNlIiwicmVzb2x2ZSIsInJlamVjdCIsImVuZCIsIm9uIiwiZGVsZXRlRmlsZSIsImRvY3VtZW50cyIsImZpbmQiLCJ0b0FycmF5IiwibGVuZ3RoIiwiRXJyb3IiLCJhbGwiLCJtYXAiLCJkb2MiLCJkZWxldGUiLCJfaWQiLCJnZXRGaWxlRGF0YSIsIm9wZW5Eb3dubG9hZFN0cmVhbUJ5TmFtZSIsInJlYWQiLCJjaHVua3MiLCJwdXNoIiwiYXV0aFRhZ0xvY2F0aW9uIiwiaXZMb2NhdGlvbiIsImF1dGhUYWciLCJzbGljZSIsImVuY3J5cHRlZCIsImRlY2lwaGVyIiwiY3JlYXRlRGVjaXBoZXJpdiIsInNldEF1dGhUYWciLCJkZWNyeXB0ZWQiLCJyb3RhdGVFbmNyeXB0aW9uS2V5IiwiZmlsZU5hbWVzIiwib2xkS2V5RmlsZUFkYXB0ZXIiLCJvbGRLZXkiLCJmaWxlTmFtZXNJdGVyYXRvciIsImZvckVhY2giLCJmaWxlIiwiZmlsZU5hbWVzTm90Um90YXRlZCIsImZpbGVOYW1lc1JvdGF0ZWQiLCJmaWxlTmFtZSIsInBsYWluVGV4dERhdGEiLCJmaWx0ZXIiLCJ2YWx1ZSIsInJvdGF0ZWQiLCJub3RSb3RhdGVkIiwiZ2V0RmlsZUxvY2F0aW9uIiwiY29uZmlnIiwibW91bnQiLCJhcHBsaWNhdGlvbklkIiwiZW5jb2RlVVJJQ29tcG9uZW50IiwiZ2V0TWV0YWRhdGEiLCJmaWxlcyIsImhhbmRsZUZpbGVTdHJlYW0iLCJyZXEiLCJyZXMiLCJwYXJ0cyIsImdldCIsInJlcGxhY2UiLCJzcGxpdCIsInBhcnRpYWxzdGFydCIsInBhcnRpYWxlbmQiLCJmaWxlTGVuZ3RoIiwiZmlsZVN0YXJ0IiwicGFyc2VJbnQiLCJmaWxlRW5kIiwic3RhcnQiLCJNYXRoIiwibWluIiwibWF4IiwiaXNOYU4iLCJzdGF0dXMiLCJoZWFkZXIiLCJjaHVuayIsImUiLCJzZW5kIiwibWVzc2FnZSIsImhhbmRsZVNodXRkb3duIiwiY2xvc2UiLCJ2YWxpZGF0ZUZpbGVuYW1lIl0sInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL0FkYXB0ZXJzL0ZpbGVzL0dyaWRGU0J1Y2tldEFkYXB0ZXIuanMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gR3JpZEZTQnVja2V0QWRhcHRlclxuIFN0b3JlcyBmaWxlcyBpbiBNb25nbyB1c2luZyBHcmlkRlNcbiBSZXF1aXJlcyB0aGUgZGF0YWJhc2UgYWRhcHRlciB0byBiZSBiYXNlZCBvbiBtb25nb2NsaWVudFxuXG4gQGZsb3cgd2Vha1xuICovXG5cbi8vIEBmbG93LWRpc2FibGUtbmV4dFxuaW1wb3J0IHsgTW9uZ29DbGllbnQsIEdyaWRGU0J1Y2tldCwgRGIgfSBmcm9tICdtb25nb2RiJztcbmltcG9ydCB7IEZpbGVzQWRhcHRlciwgdmFsaWRhdGVGaWxlbmFtZSB9IGZyb20gJy4vRmlsZXNBZGFwdGVyJztcbmltcG9ydCBkZWZhdWx0cyBmcm9tICcuLi8uLi9kZWZhdWx0cyc7XG5jb25zdCBjcnlwdG8gPSByZXF1aXJlKCdjcnlwdG8nKTtcblxuZXhwb3J0IGNsYXNzIEdyaWRGU0J1Y2tldEFkYXB0ZXIgZXh0ZW5kcyBGaWxlc0FkYXB0ZXIge1xuICBfZGF0YWJhc2VVUkk6IHN0cmluZztcbiAgX2Nvbm5lY3Rpb25Qcm9taXNlOiBQcm9taXNlPERiPjtcbiAgX21vbmdvT3B0aW9uczogT2JqZWN0O1xuICBfYWxnb3JpdGhtOiBzdHJpbmc7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgbW9uZ29EYXRhYmFzZVVSSSA9IGRlZmF1bHRzLkRlZmF1bHRNb25nb1VSSSxcbiAgICBtb25nb09wdGlvbnMgPSB7fSxcbiAgICBlbmNyeXB0aW9uS2V5ID0gdW5kZWZpbmVkXG4gICkge1xuICAgIHN1cGVyKCk7XG4gICAgdGhpcy5fZGF0YWJhc2VVUkkgPSBtb25nb0RhdGFiYXNlVVJJO1xuICAgIHRoaXMuX2FsZ29yaXRobSA9ICdhZXMtMjU2LWdjbSc7XG4gICAgdGhpcy5fZW5jcnlwdGlvbktleSA9XG4gICAgICBlbmNyeXB0aW9uS2V5ICE9PSB1bmRlZmluZWRcbiAgICAgICAgPyBjcnlwdG9cbiAgICAgICAgICAuY3JlYXRlSGFzaCgnc2hhMjU2JylcbiAgICAgICAgICAudXBkYXRlKFN0cmluZyhlbmNyeXB0aW9uS2V5KSlcbiAgICAgICAgICAuZGlnZXN0KCdiYXNlNjQnKVxuICAgICAgICAgIC5zdWJzdHJpbmcoMCwgMzIpXG4gICAgICAgIDogbnVsbDtcbiAgICBjb25zdCBkZWZhdWx0TW9uZ29PcHRpb25zID0ge1xuICAgICAgdXNlTmV3VXJsUGFyc2VyOiB0cnVlLFxuICAgICAgdXNlVW5pZmllZFRvcG9sb2d5OiB0cnVlLFxuICAgIH07XG4gICAgY29uc3QgX21vbmdvT3B0aW9ucyA9IE9iamVjdC5hc3NpZ24oZGVmYXVsdE1vbmdvT3B0aW9ucywgbW9uZ29PcHRpb25zKTtcbiAgICBmb3IgKGNvbnN0IGtleSBvZiBbJ2VuYWJsZVNjaGVtYUhvb2tzJywgJ3NjaGVtYUNhY2hlVHRsJywgJ21heFRpbWVNUyddKSB7XG4gICAgICBkZWxldGUgX21vbmdvT3B0aW9uc1trZXldO1xuICAgIH1cbiAgICB0aGlzLl9tb25nb09wdGlvbnMgPSBfbW9uZ29PcHRpb25zO1xuICB9XG5cbiAgX2Nvbm5lY3QoKSB7XG4gICAgaWYgKCF0aGlzLl9jb25uZWN0aW9uUHJvbWlzZSkge1xuICAgICAgdGhpcy5fY29ubmVjdGlvblByb21pc2UgPSBNb25nb0NsaWVudC5jb25uZWN0KHRoaXMuX2RhdGFiYXNlVVJJLCB0aGlzLl9tb25nb09wdGlvbnMpLnRoZW4oXG4gICAgICAgIGNsaWVudCA9PiB7XG4gICAgICAgICAgdGhpcy5fY2xpZW50ID0gY2xpZW50O1xuICAgICAgICAgIHJldHVybiBjbGllbnQuZGIoY2xpZW50LnMub3B0aW9ucy5kYk5hbWUpO1xuICAgICAgICB9XG4gICAgICApO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5fY29ubmVjdGlvblByb21pc2U7XG4gIH1cblxuICBfZ2V0QnVja2V0KCkge1xuICAgIHJldHVybiB0aGlzLl9jb25uZWN0KCkudGhlbihkYXRhYmFzZSA9PiBuZXcgR3JpZEZTQnVja2V0KGRhdGFiYXNlKSk7XG4gIH1cblxuICAvLyBGb3IgYSBnaXZlbiBjb25maWcgb2JqZWN0LCBmaWxlbmFtZSwgYW5kIGRhdGEsIHN0b3JlIGEgZmlsZVxuICAvLyBSZXR1cm5zIGEgcHJvbWlzZVxuICBhc3luYyBjcmVhdGVGaWxlKGZpbGVuYW1lOiBzdHJpbmcsIGRhdGEsIGNvbnRlbnRUeXBlLCBvcHRpb25zID0ge30pIHtcbiAgICBjb25zdCBidWNrZXQgPSBhd2FpdCB0aGlzLl9nZXRCdWNrZXQoKTtcbiAgICBjb25zdCBzdHJlYW0gPSBhd2FpdCBidWNrZXQub3BlblVwbG9hZFN0cmVhbShmaWxlbmFtZSwge1xuICAgICAgbWV0YWRhdGE6IG9wdGlvbnMubWV0YWRhdGEsXG4gICAgfSk7XG4gICAgaWYgKHRoaXMuX2VuY3J5cHRpb25LZXkgIT09IG51bGwpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IGl2ID0gY3J5cHRvLnJhbmRvbUJ5dGVzKDE2KTtcbiAgICAgICAgY29uc3QgY2lwaGVyID0gY3J5cHRvLmNyZWF0ZUNpcGhlcml2KHRoaXMuX2FsZ29yaXRobSwgdGhpcy5fZW5jcnlwdGlvbktleSwgaXYpO1xuICAgICAgICBjb25zdCBlbmNyeXB0ZWRSZXN1bHQgPSBCdWZmZXIuY29uY2F0KFtcbiAgICAgICAgICBjaXBoZXIudXBkYXRlKGRhdGEpLFxuICAgICAgICAgIGNpcGhlci5maW5hbCgpLFxuICAgICAgICAgIGl2LFxuICAgICAgICAgIGNpcGhlci5nZXRBdXRoVGFnKCksXG4gICAgICAgIF0pO1xuICAgICAgICBhd2FpdCBzdHJlYW0ud3JpdGUoZW5jcnlwdGVkUmVzdWx0KTtcbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICAgIHJldHVybiByZWplY3QoZXJyKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGF3YWl0IHN0cmVhbS53cml0ZShkYXRhKTtcbiAgICB9XG4gICAgc3RyZWFtLmVuZCgpO1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICBzdHJlYW0ub24oJ2ZpbmlzaCcsIHJlc29sdmUpO1xuICAgICAgc3RyZWFtLm9uKCdlcnJvcicsIHJlamVjdCk7XG4gICAgfSk7XG4gIH1cblxuICBhc3luYyBkZWxldGVGaWxlKGZpbGVuYW1lOiBzdHJpbmcpIHtcbiAgICBjb25zdCBidWNrZXQgPSBhd2FpdCB0aGlzLl9nZXRCdWNrZXQoKTtcbiAgICBjb25zdCBkb2N1bWVudHMgPSBhd2FpdCBidWNrZXQuZmluZCh7IGZpbGVuYW1lIH0pLnRvQXJyYXkoKTtcbiAgICBpZiAoZG9jdW1lbnRzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdGaWxlTm90Rm91bmQnKTtcbiAgICB9XG4gICAgcmV0dXJuIFByb21pc2UuYWxsKFxuICAgICAgZG9jdW1lbnRzLm1hcChkb2MgPT4ge1xuICAgICAgICByZXR1cm4gYnVja2V0LmRlbGV0ZShkb2MuX2lkKTtcbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIGFzeW5jIGdldEZpbGVEYXRhKGZpbGVuYW1lOiBzdHJpbmcpIHtcbiAgICBjb25zdCBidWNrZXQgPSBhd2FpdCB0aGlzLl9nZXRCdWNrZXQoKTtcbiAgICBjb25zdCBzdHJlYW0gPSBidWNrZXQub3BlbkRvd25sb2FkU3RyZWFtQnlOYW1lKGZpbGVuYW1lKTtcbiAgICBzdHJlYW0ucmVhZCgpO1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICBjb25zdCBjaHVua3MgPSBbXTtcbiAgICAgIHN0cmVhbS5vbignZGF0YScsIGRhdGEgPT4ge1xuICAgICAgICBjaHVua3MucHVzaChkYXRhKTtcbiAgICAgIH0pO1xuICAgICAgc3RyZWFtLm9uKCdlbmQnLCAoKSA9PiB7XG4gICAgICAgIGNvbnN0IGRhdGEgPSBCdWZmZXIuY29uY2F0KGNodW5rcyk7XG4gICAgICAgIGlmICh0aGlzLl9lbmNyeXB0aW9uS2V5ICE9PSBudWxsKSB7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IGF1dGhUYWdMb2NhdGlvbiA9IGRhdGEubGVuZ3RoIC0gMTY7XG4gICAgICAgICAgICBjb25zdCBpdkxvY2F0aW9uID0gZGF0YS5sZW5ndGggLSAzMjtcbiAgICAgICAgICAgIGNvbnN0IGF1dGhUYWcgPSBkYXRhLnNsaWNlKGF1dGhUYWdMb2NhdGlvbik7XG4gICAgICAgICAgICBjb25zdCBpdiA9IGRhdGEuc2xpY2UoaXZMb2NhdGlvbiwgYXV0aFRhZ0xvY2F0aW9uKTtcbiAgICAgICAgICAgIGNvbnN0IGVuY3J5cHRlZCA9IGRhdGEuc2xpY2UoMCwgaXZMb2NhdGlvbik7XG4gICAgICAgICAgICBjb25zdCBkZWNpcGhlciA9IGNyeXB0by5jcmVhdGVEZWNpcGhlcml2KHRoaXMuX2FsZ29yaXRobSwgdGhpcy5fZW5jcnlwdGlvbktleSwgaXYpO1xuICAgICAgICAgICAgZGVjaXBoZXIuc2V0QXV0aFRhZyhhdXRoVGFnKTtcbiAgICAgICAgICAgIGNvbnN0IGRlY3J5cHRlZCA9IEJ1ZmZlci5jb25jYXQoW2RlY2lwaGVyLnVwZGF0ZShlbmNyeXB0ZWQpLCBkZWNpcGhlci5maW5hbCgpXSk7XG4gICAgICAgICAgICByZXR1cm4gcmVzb2x2ZShkZWNyeXB0ZWQpO1xuICAgICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgcmV0dXJuIHJlamVjdChlcnIpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXNvbHZlKGRhdGEpO1xuICAgICAgfSk7XG4gICAgICBzdHJlYW0ub24oJ2Vycm9yJywgZXJyID0+IHtcbiAgICAgICAgcmVqZWN0KGVycik7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIGFzeW5jIHJvdGF0ZUVuY3J5cHRpb25LZXkob3B0aW9ucyA9IHt9KSB7XG4gICAgbGV0IGZpbGVOYW1lcyA9IFtdO1xuICAgIGxldCBvbGRLZXlGaWxlQWRhcHRlciA9IHt9O1xuICAgIGNvbnN0IGJ1Y2tldCA9IGF3YWl0IHRoaXMuX2dldEJ1Y2tldCgpO1xuICAgIGlmIChvcHRpb25zLm9sZEtleSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBvbGRLZXlGaWxlQWRhcHRlciA9IG5ldyBHcmlkRlNCdWNrZXRBZGFwdGVyKFxuICAgICAgICB0aGlzLl9kYXRhYmFzZVVSSSxcbiAgICAgICAgdGhpcy5fbW9uZ29PcHRpb25zLFxuICAgICAgICBvcHRpb25zLm9sZEtleVxuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgb2xkS2V5RmlsZUFkYXB0ZXIgPSBuZXcgR3JpZEZTQnVja2V0QWRhcHRlcih0aGlzLl9kYXRhYmFzZVVSSSwgdGhpcy5fbW9uZ29PcHRpb25zKTtcbiAgICB9XG4gICAgaWYgKG9wdGlvbnMuZmlsZU5hbWVzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGZpbGVOYW1lcyA9IG9wdGlvbnMuZmlsZU5hbWVzO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBmaWxlTmFtZXNJdGVyYXRvciA9IGF3YWl0IGJ1Y2tldC5maW5kKCkudG9BcnJheSgpO1xuICAgICAgZmlsZU5hbWVzSXRlcmF0b3IuZm9yRWFjaChmaWxlID0+IHtcbiAgICAgICAgZmlsZU5hbWVzLnB1c2goZmlsZS5maWxlbmFtZSk7XG4gICAgICB9KTtcbiAgICB9XG4gICAgbGV0IGZpbGVOYW1lc05vdFJvdGF0ZWQgPSBmaWxlTmFtZXM7XG4gICAgY29uc3QgZmlsZU5hbWVzUm90YXRlZCA9IFtdO1xuICAgIGZvciAoY29uc3QgZmlsZU5hbWUgb2YgZmlsZU5hbWVzKSB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCBwbGFpblRleHREYXRhID0gYXdhaXQgb2xkS2V5RmlsZUFkYXB0ZXIuZ2V0RmlsZURhdGEoZmlsZU5hbWUpO1xuICAgICAgICAvLyBPdmVyd3JpdGUgZmlsZSB3aXRoIGRhdGEgZW5jcnlwdGVkIHdpdGggbmV3IGtleVxuICAgICAgICBhd2FpdCB0aGlzLmNyZWF0ZUZpbGUoZmlsZU5hbWUsIHBsYWluVGV4dERhdGEpO1xuICAgICAgICBmaWxlTmFtZXNSb3RhdGVkLnB1c2goZmlsZU5hbWUpO1xuICAgICAgICBmaWxlTmFtZXNOb3RSb3RhdGVkID0gZmlsZU5hbWVzTm90Um90YXRlZC5maWx0ZXIoZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgICAgcmV0dXJuIHZhbHVlICE9PSBmaWxlTmFtZTtcbiAgICAgICAgfSk7XG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB7IHJvdGF0ZWQ6IGZpbGVOYW1lc1JvdGF0ZWQsIG5vdFJvdGF0ZWQ6IGZpbGVOYW1lc05vdFJvdGF0ZWQgfTtcbiAgfVxuXG4gIGdldEZpbGVMb2NhdGlvbihjb25maWcsIGZpbGVuYW1lKSB7XG4gICAgcmV0dXJuIGNvbmZpZy5tb3VudCArICcvZmlsZXMvJyArIGNvbmZpZy5hcHBsaWNhdGlvbklkICsgJy8nICsgZW5jb2RlVVJJQ29tcG9uZW50KGZpbGVuYW1lKTtcbiAgfVxuXG4gIGFzeW5jIGdldE1ldGFkYXRhKGZpbGVuYW1lKSB7XG4gICAgY29uc3QgYnVja2V0ID0gYXdhaXQgdGhpcy5fZ2V0QnVja2V0KCk7XG4gICAgY29uc3QgZmlsZXMgPSBhd2FpdCBidWNrZXQuZmluZCh7IGZpbGVuYW1lIH0pLnRvQXJyYXkoKTtcbiAgICBpZiAoZmlsZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4ge307XG4gICAgfVxuICAgIGNvbnN0IHsgbWV0YWRhdGEgfSA9IGZpbGVzWzBdO1xuICAgIHJldHVybiB7IG1ldGFkYXRhIH07XG4gIH1cblxuICBhc3luYyBoYW5kbGVGaWxlU3RyZWFtKGZpbGVuYW1lOiBzdHJpbmcsIHJlcSwgcmVzLCBjb250ZW50VHlwZSkge1xuICAgIGNvbnN0IGJ1Y2tldCA9IGF3YWl0IHRoaXMuX2dldEJ1Y2tldCgpO1xuICAgIGNvbnN0IGZpbGVzID0gYXdhaXQgYnVja2V0LmZpbmQoeyBmaWxlbmFtZSB9KS50b0FycmF5KCk7XG4gICAgaWYgKGZpbGVzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdGaWxlTm90Rm91bmQnKTtcbiAgICB9XG4gICAgY29uc3QgcGFydHMgPSByZXFcbiAgICAgIC5nZXQoJ1JhbmdlJylcbiAgICAgIC5yZXBsYWNlKC9ieXRlcz0vLCAnJylcbiAgICAgIC5zcGxpdCgnLScpO1xuICAgIGNvbnN0IHBhcnRpYWxzdGFydCA9IHBhcnRzWzBdO1xuICAgIGNvbnN0IHBhcnRpYWxlbmQgPSBwYXJ0c1sxXTtcblxuICAgIGNvbnN0IGZpbGVMZW5ndGggPSBmaWxlc1swXS5sZW5ndGg7XG4gICAgY29uc3QgZmlsZVN0YXJ0ID0gcGFyc2VJbnQocGFydGlhbHN0YXJ0LCAxMCk7XG4gICAgY29uc3QgZmlsZUVuZCA9IHBhcnRpYWxlbmQgPyBwYXJzZUludChwYXJ0aWFsZW5kLCAxMCkgOiBmaWxlTGVuZ3RoO1xuXG4gICAgbGV0IHN0YXJ0ID0gTWF0aC5taW4oZmlsZVN0YXJ0IHx8IDAsIGZpbGVFbmQsIGZpbGVMZW5ndGgpO1xuICAgIGxldCBlbmQgPSBNYXRoLm1heChmaWxlU3RhcnQgfHwgMCwgZmlsZUVuZCkgKyAxIHx8IGZpbGVMZW5ndGg7XG4gICAgaWYgKGlzTmFOKGZpbGVTdGFydCkpIHtcbiAgICAgIHN0YXJ0ID0gZmlsZUxlbmd0aCAtIGVuZCArIDE7XG4gICAgICBlbmQgPSBmaWxlTGVuZ3RoO1xuICAgIH1cbiAgICBlbmQgPSBNYXRoLm1pbihlbmQsIGZpbGVMZW5ndGgpO1xuICAgIHN0YXJ0ID0gTWF0aC5tYXgoc3RhcnQsIDApO1xuXG4gICAgcmVzLnN0YXR1cygyMDYpO1xuICAgIHJlcy5oZWFkZXIoJ0FjY2VwdC1SYW5nZXMnLCAnYnl0ZXMnKTtcbiAgICByZXMuaGVhZGVyKCdDb250ZW50LUxlbmd0aCcsIGVuZCAtIHN0YXJ0KTtcbiAgICByZXMuaGVhZGVyKCdDb250ZW50LVJhbmdlJywgJ2J5dGVzICcgKyBzdGFydCArICctJyArIGVuZCArICcvJyArIGZpbGVMZW5ndGgpO1xuICAgIHJlcy5oZWFkZXIoJ0NvbnRlbnQtVHlwZScsIGNvbnRlbnRUeXBlKTtcbiAgICBjb25zdCBzdHJlYW0gPSBidWNrZXQub3BlbkRvd25sb2FkU3RyZWFtQnlOYW1lKGZpbGVuYW1lKTtcbiAgICBzdHJlYW0uc3RhcnQoc3RhcnQpO1xuICAgIGlmIChlbmQpIHtcbiAgICAgIHN0cmVhbS5lbmQoZW5kKTtcbiAgICB9XG4gICAgc3RyZWFtLm9uKCdkYXRhJywgY2h1bmsgPT4ge1xuICAgICAgcmVzLndyaXRlKGNodW5rKTtcbiAgICB9KTtcbiAgICBzdHJlYW0ub24oJ2Vycm9yJywgZSA9PiB7XG4gICAgICByZXMuc3RhdHVzKDQwNCk7XG4gICAgICByZXMuc2VuZChlLm1lc3NhZ2UpO1xuICAgIH0pO1xuICAgIHN0cmVhbS5vbignZW5kJywgKCkgPT4ge1xuICAgICAgcmVzLmVuZCgpO1xuICAgIH0pO1xuICB9XG5cbiAgaGFuZGxlU2h1dGRvd24oKSB7XG4gICAgaWYgKCF0aGlzLl9jbGllbnQpIHtcbiAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuX2NsaWVudC5jbG9zZShmYWxzZSk7XG4gIH1cblxuICB2YWxpZGF0ZUZpbGVuYW1lKGZpbGVuYW1lKSB7XG4gICAgcmV0dXJuIHZhbGlkYXRlRmlsZW5hbWUoZmlsZW5hbWUpO1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IEdyaWRGU0J1Y2tldEFkYXB0ZXI7XG4iXSwibWFwcGluZ3MiOiI7Ozs7OztBQVNBO0FBQ0E7QUFDQTtBQUFzQztBQVh0QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFJQSxNQUFNQSxNQUFNLEdBQUdDLE9BQU8sQ0FBQyxRQUFRLENBQUM7QUFFekIsTUFBTUMsbUJBQW1CLFNBQVNDLDBCQUFZLENBQUM7RUFNcERDLFdBQVcsQ0FDVEMsZ0JBQWdCLEdBQUdDLGlCQUFRLENBQUNDLGVBQWUsRUFDM0NDLFlBQVksR0FBRyxDQUFDLENBQUMsRUFDakJDLGFBQWEsR0FBR0MsU0FBUyxFQUN6QjtJQUNBLEtBQUssRUFBRTtJQUNQLElBQUksQ0FBQ0MsWUFBWSxHQUFHTixnQkFBZ0I7SUFDcEMsSUFBSSxDQUFDTyxVQUFVLEdBQUcsYUFBYTtJQUMvQixJQUFJLENBQUNDLGNBQWMsR0FDakJKLGFBQWEsS0FBS0MsU0FBUyxHQUN2QlYsTUFBTSxDQUNMYyxVQUFVLENBQUMsUUFBUSxDQUFDLENBQ3BCQyxNQUFNLENBQUNDLE1BQU0sQ0FBQ1AsYUFBYSxDQUFDLENBQUMsQ0FDN0JRLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FDaEJDLFNBQVMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEdBQ2pCLElBQUk7SUFDVixNQUFNQyxtQkFBbUIsR0FBRztNQUMxQkMsZUFBZSxFQUFFLElBQUk7TUFDckJDLGtCQUFrQixFQUFFO0lBQ3RCLENBQUM7SUFDRCxNQUFNQyxhQUFhLEdBQUdDLE1BQU0sQ0FBQ0MsTUFBTSxDQUFDTCxtQkFBbUIsRUFBRVgsWUFBWSxDQUFDO0lBQ3RFLEtBQUssTUFBTWlCLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixFQUFFLGdCQUFnQixFQUFFLFdBQVcsQ0FBQyxFQUFFO01BQ3RFLE9BQU9ILGFBQWEsQ0FBQ0csR0FBRyxDQUFDO0lBQzNCO0lBQ0EsSUFBSSxDQUFDSCxhQUFhLEdBQUdBLGFBQWE7RUFDcEM7RUFFQUksUUFBUSxHQUFHO0lBQ1QsSUFBSSxDQUFDLElBQUksQ0FBQ0Msa0JBQWtCLEVBQUU7TUFDNUIsSUFBSSxDQUFDQSxrQkFBa0IsR0FBR0Msb0JBQVcsQ0FBQ0MsT0FBTyxDQUFDLElBQUksQ0FBQ2xCLFlBQVksRUFBRSxJQUFJLENBQUNXLGFBQWEsQ0FBQyxDQUFDUSxJQUFJLENBQ3ZGQyxNQUFNLElBQUk7UUFDUixJQUFJLENBQUNDLE9BQU8sR0FBR0QsTUFBTTtRQUNyQixPQUFPQSxNQUFNLENBQUNFLEVBQUUsQ0FBQ0YsTUFBTSxDQUFDRyxDQUFDLENBQUNDLE9BQU8sQ0FBQ0MsTUFBTSxDQUFDO01BQzNDLENBQUMsQ0FDRjtJQUNIO0lBQ0EsT0FBTyxJQUFJLENBQUNULGtCQUFrQjtFQUNoQztFQUVBVSxVQUFVLEdBQUc7SUFDWCxPQUFPLElBQUksQ0FBQ1gsUUFBUSxFQUFFLENBQUNJLElBQUksQ0FBQ1EsUUFBUSxJQUFJLElBQUlDLHFCQUFZLENBQUNELFFBQVEsQ0FBQyxDQUFDO0VBQ3JFOztFQUVBO0VBQ0E7RUFDQSxNQUFNRSxVQUFVLENBQUNDLFFBQWdCLEVBQUVDLElBQUksRUFBRUMsV0FBVyxFQUFFUixPQUFPLEdBQUcsQ0FBQyxDQUFDLEVBQUU7SUFDbEUsTUFBTVMsTUFBTSxHQUFHLE1BQU0sSUFBSSxDQUFDUCxVQUFVLEVBQUU7SUFDdEMsTUFBTVEsTUFBTSxHQUFHLE1BQU1ELE1BQU0sQ0FBQ0UsZ0JBQWdCLENBQUNMLFFBQVEsRUFBRTtNQUNyRE0sUUFBUSxFQUFFWixPQUFPLENBQUNZO0lBQ3BCLENBQUMsQ0FBQztJQUNGLElBQUksSUFBSSxDQUFDbEMsY0FBYyxLQUFLLElBQUksRUFBRTtNQUNoQyxJQUFJO1FBQ0YsTUFBTW1DLEVBQUUsR0FBR2hELE1BQU0sQ0FBQ2lELFdBQVcsQ0FBQyxFQUFFLENBQUM7UUFDakMsTUFBTUMsTUFBTSxHQUFHbEQsTUFBTSxDQUFDbUQsY0FBYyxDQUFDLElBQUksQ0FBQ3ZDLFVBQVUsRUFBRSxJQUFJLENBQUNDLGNBQWMsRUFBRW1DLEVBQUUsQ0FBQztRQUM5RSxNQUFNSSxlQUFlLEdBQUdDLE1BQU0sQ0FBQ0MsTUFBTSxDQUFDLENBQ3BDSixNQUFNLENBQUNuQyxNQUFNLENBQUMyQixJQUFJLENBQUMsRUFDbkJRLE1BQU0sQ0FBQ0ssS0FBSyxFQUFFLEVBQ2RQLEVBQUUsRUFDRkUsTUFBTSxDQUFDTSxVQUFVLEVBQUUsQ0FDcEIsQ0FBQztRQUNGLE1BQU1YLE1BQU0sQ0FBQ1ksS0FBSyxDQUFDTCxlQUFlLENBQUM7TUFDckMsQ0FBQyxDQUFDLE9BQU9NLEdBQUcsRUFBRTtRQUNaLE9BQU8sSUFBSUMsT0FBTyxDQUFDLENBQUNDLE9BQU8sRUFBRUMsTUFBTSxLQUFLO1VBQ3RDLE9BQU9BLE1BQU0sQ0FBQ0gsR0FBRyxDQUFDO1FBQ3BCLENBQUMsQ0FBQztNQUNKO0lBQ0YsQ0FBQyxNQUFNO01BQ0wsTUFBTWIsTUFBTSxDQUFDWSxLQUFLLENBQUNmLElBQUksQ0FBQztJQUMxQjtJQUNBRyxNQUFNLENBQUNpQixHQUFHLEVBQUU7SUFDWixPQUFPLElBQUlILE9BQU8sQ0FBQyxDQUFDQyxPQUFPLEVBQUVDLE1BQU0sS0FBSztNQUN0Q2hCLE1BQU0sQ0FBQ2tCLEVBQUUsQ0FBQyxRQUFRLEVBQUVILE9BQU8sQ0FBQztNQUM1QmYsTUFBTSxDQUFDa0IsRUFBRSxDQUFDLE9BQU8sRUFBRUYsTUFBTSxDQUFDO0lBQzVCLENBQUMsQ0FBQztFQUNKO0VBRUEsTUFBTUcsVUFBVSxDQUFDdkIsUUFBZ0IsRUFBRTtJQUNqQyxNQUFNRyxNQUFNLEdBQUcsTUFBTSxJQUFJLENBQUNQLFVBQVUsRUFBRTtJQUN0QyxNQUFNNEIsU0FBUyxHQUFHLE1BQU1yQixNQUFNLENBQUNzQixJQUFJLENBQUM7TUFBRXpCO0lBQVMsQ0FBQyxDQUFDLENBQUMwQixPQUFPLEVBQUU7SUFDM0QsSUFBSUYsU0FBUyxDQUFDRyxNQUFNLEtBQUssQ0FBQyxFQUFFO01BQzFCLE1BQU0sSUFBSUMsS0FBSyxDQUFDLGNBQWMsQ0FBQztJQUNqQztJQUNBLE9BQU9WLE9BQU8sQ0FBQ1csR0FBRyxDQUNoQkwsU0FBUyxDQUFDTSxHQUFHLENBQUNDLEdBQUcsSUFBSTtNQUNuQixPQUFPNUIsTUFBTSxDQUFDNkIsTUFBTSxDQUFDRCxHQUFHLENBQUNFLEdBQUcsQ0FBQztJQUMvQixDQUFDLENBQUMsQ0FDSDtFQUNIO0VBRUEsTUFBTUMsV0FBVyxDQUFDbEMsUUFBZ0IsRUFBRTtJQUNsQyxNQUFNRyxNQUFNLEdBQUcsTUFBTSxJQUFJLENBQUNQLFVBQVUsRUFBRTtJQUN0QyxNQUFNUSxNQUFNLEdBQUdELE1BQU0sQ0FBQ2dDLHdCQUF3QixDQUFDbkMsUUFBUSxDQUFDO0lBQ3hESSxNQUFNLENBQUNnQyxJQUFJLEVBQUU7SUFDYixPQUFPLElBQUlsQixPQUFPLENBQUMsQ0FBQ0MsT0FBTyxFQUFFQyxNQUFNLEtBQUs7TUFDdEMsTUFBTWlCLE1BQU0sR0FBRyxFQUFFO01BQ2pCakMsTUFBTSxDQUFDa0IsRUFBRSxDQUFDLE1BQU0sRUFBRXJCLElBQUksSUFBSTtRQUN4Qm9DLE1BQU0sQ0FBQ0MsSUFBSSxDQUFDckMsSUFBSSxDQUFDO01BQ25CLENBQUMsQ0FBQztNQUNGRyxNQUFNLENBQUNrQixFQUFFLENBQUMsS0FBSyxFQUFFLE1BQU07UUFDckIsTUFBTXJCLElBQUksR0FBR1csTUFBTSxDQUFDQyxNQUFNLENBQUN3QixNQUFNLENBQUM7UUFDbEMsSUFBSSxJQUFJLENBQUNqRSxjQUFjLEtBQUssSUFBSSxFQUFFO1VBQ2hDLElBQUk7WUFDRixNQUFNbUUsZUFBZSxHQUFHdEMsSUFBSSxDQUFDMEIsTUFBTSxHQUFHLEVBQUU7WUFDeEMsTUFBTWEsVUFBVSxHQUFHdkMsSUFBSSxDQUFDMEIsTUFBTSxHQUFHLEVBQUU7WUFDbkMsTUFBTWMsT0FBTyxHQUFHeEMsSUFBSSxDQUFDeUMsS0FBSyxDQUFDSCxlQUFlLENBQUM7WUFDM0MsTUFBTWhDLEVBQUUsR0FBR04sSUFBSSxDQUFDeUMsS0FBSyxDQUFDRixVQUFVLEVBQUVELGVBQWUsQ0FBQztZQUNsRCxNQUFNSSxTQUFTLEdBQUcxQyxJQUFJLENBQUN5QyxLQUFLLENBQUMsQ0FBQyxFQUFFRixVQUFVLENBQUM7WUFDM0MsTUFBTUksUUFBUSxHQUFHckYsTUFBTSxDQUFDc0YsZ0JBQWdCLENBQUMsSUFBSSxDQUFDMUUsVUFBVSxFQUFFLElBQUksQ0FBQ0MsY0FBYyxFQUFFbUMsRUFBRSxDQUFDO1lBQ2xGcUMsUUFBUSxDQUFDRSxVQUFVLENBQUNMLE9BQU8sQ0FBQztZQUM1QixNQUFNTSxTQUFTLEdBQUduQyxNQUFNLENBQUNDLE1BQU0sQ0FBQyxDQUFDK0IsUUFBUSxDQUFDdEUsTUFBTSxDQUFDcUUsU0FBUyxDQUFDLEVBQUVDLFFBQVEsQ0FBQzlCLEtBQUssRUFBRSxDQUFDLENBQUM7WUFDL0UsT0FBT0ssT0FBTyxDQUFDNEIsU0FBUyxDQUFDO1VBQzNCLENBQUMsQ0FBQyxPQUFPOUIsR0FBRyxFQUFFO1lBQ1osT0FBT0csTUFBTSxDQUFDSCxHQUFHLENBQUM7VUFDcEI7UUFDRjtRQUNBRSxPQUFPLENBQUNsQixJQUFJLENBQUM7TUFDZixDQUFDLENBQUM7TUFDRkcsTUFBTSxDQUFDa0IsRUFBRSxDQUFDLE9BQU8sRUFBRUwsR0FBRyxJQUFJO1FBQ3hCRyxNQUFNLENBQUNILEdBQUcsQ0FBQztNQUNiLENBQUMsQ0FBQztJQUNKLENBQUMsQ0FBQztFQUNKO0VBRUEsTUFBTStCLG1CQUFtQixDQUFDdEQsT0FBTyxHQUFHLENBQUMsQ0FBQyxFQUFFO0lBQ3RDLElBQUl1RCxTQUFTLEdBQUcsRUFBRTtJQUNsQixJQUFJQyxpQkFBaUIsR0FBRyxDQUFDLENBQUM7SUFDMUIsTUFBTS9DLE1BQU0sR0FBRyxNQUFNLElBQUksQ0FBQ1AsVUFBVSxFQUFFO0lBQ3RDLElBQUlGLE9BQU8sQ0FBQ3lELE1BQU0sS0FBS2xGLFNBQVMsRUFBRTtNQUNoQ2lGLGlCQUFpQixHQUFHLElBQUl6RixtQkFBbUIsQ0FDekMsSUFBSSxDQUFDUyxZQUFZLEVBQ2pCLElBQUksQ0FBQ1csYUFBYSxFQUNsQmEsT0FBTyxDQUFDeUQsTUFBTSxDQUNmO0lBQ0gsQ0FBQyxNQUFNO01BQ0xELGlCQUFpQixHQUFHLElBQUl6RixtQkFBbUIsQ0FBQyxJQUFJLENBQUNTLFlBQVksRUFBRSxJQUFJLENBQUNXLGFBQWEsQ0FBQztJQUNwRjtJQUNBLElBQUlhLE9BQU8sQ0FBQ3VELFNBQVMsS0FBS2hGLFNBQVMsRUFBRTtNQUNuQ2dGLFNBQVMsR0FBR3ZELE9BQU8sQ0FBQ3VELFNBQVM7SUFDL0IsQ0FBQyxNQUFNO01BQ0wsTUFBTUcsaUJBQWlCLEdBQUcsTUFBTWpELE1BQU0sQ0FBQ3NCLElBQUksRUFBRSxDQUFDQyxPQUFPLEVBQUU7TUFDdkQwQixpQkFBaUIsQ0FBQ0MsT0FBTyxDQUFDQyxJQUFJLElBQUk7UUFDaENMLFNBQVMsQ0FBQ1gsSUFBSSxDQUFDZ0IsSUFBSSxDQUFDdEQsUUFBUSxDQUFDO01BQy9CLENBQUMsQ0FBQztJQUNKO0lBQ0EsSUFBSXVELG1CQUFtQixHQUFHTixTQUFTO0lBQ25DLE1BQU1PLGdCQUFnQixHQUFHLEVBQUU7SUFDM0IsS0FBSyxNQUFNQyxRQUFRLElBQUlSLFNBQVMsRUFBRTtNQUNoQyxJQUFJO1FBQ0YsTUFBTVMsYUFBYSxHQUFHLE1BQU1SLGlCQUFpQixDQUFDaEIsV0FBVyxDQUFDdUIsUUFBUSxDQUFDO1FBQ25FO1FBQ0EsTUFBTSxJQUFJLENBQUMxRCxVQUFVLENBQUMwRCxRQUFRLEVBQUVDLGFBQWEsQ0FBQztRQUM5Q0YsZ0JBQWdCLENBQUNsQixJQUFJLENBQUNtQixRQUFRLENBQUM7UUFDL0JGLG1CQUFtQixHQUFHQSxtQkFBbUIsQ0FBQ0ksTUFBTSxDQUFDLFVBQVVDLEtBQUssRUFBRTtVQUNoRSxPQUFPQSxLQUFLLEtBQUtILFFBQVE7UUFDM0IsQ0FBQyxDQUFDO01BQ0osQ0FBQyxDQUFDLE9BQU94QyxHQUFHLEVBQUU7UUFDWjtNQUNGO0lBQ0Y7SUFDQSxPQUFPO01BQUU0QyxPQUFPLEVBQUVMLGdCQUFnQjtNQUFFTSxVQUFVLEVBQUVQO0lBQW9CLENBQUM7RUFDdkU7RUFFQVEsZUFBZSxDQUFDQyxNQUFNLEVBQUVoRSxRQUFRLEVBQUU7SUFDaEMsT0FBT2dFLE1BQU0sQ0FBQ0MsS0FBSyxHQUFHLFNBQVMsR0FBR0QsTUFBTSxDQUFDRSxhQUFhLEdBQUcsR0FBRyxHQUFHQyxrQkFBa0IsQ0FBQ25FLFFBQVEsQ0FBQztFQUM3RjtFQUVBLE1BQU1vRSxXQUFXLENBQUNwRSxRQUFRLEVBQUU7SUFDMUIsTUFBTUcsTUFBTSxHQUFHLE1BQU0sSUFBSSxDQUFDUCxVQUFVLEVBQUU7SUFDdEMsTUFBTXlFLEtBQUssR0FBRyxNQUFNbEUsTUFBTSxDQUFDc0IsSUFBSSxDQUFDO01BQUV6QjtJQUFTLENBQUMsQ0FBQyxDQUFDMEIsT0FBTyxFQUFFO0lBQ3ZELElBQUkyQyxLQUFLLENBQUMxQyxNQUFNLEtBQUssQ0FBQyxFQUFFO01BQ3RCLE9BQU8sQ0FBQyxDQUFDO0lBQ1g7SUFDQSxNQUFNO01BQUVyQjtJQUFTLENBQUMsR0FBRytELEtBQUssQ0FBQyxDQUFDLENBQUM7SUFDN0IsT0FBTztNQUFFL0Q7SUFBUyxDQUFDO0VBQ3JCO0VBRUEsTUFBTWdFLGdCQUFnQixDQUFDdEUsUUFBZ0IsRUFBRXVFLEdBQUcsRUFBRUMsR0FBRyxFQUFFdEUsV0FBVyxFQUFFO0lBQzlELE1BQU1DLE1BQU0sR0FBRyxNQUFNLElBQUksQ0FBQ1AsVUFBVSxFQUFFO0lBQ3RDLE1BQU15RSxLQUFLLEdBQUcsTUFBTWxFLE1BQU0sQ0FBQ3NCLElBQUksQ0FBQztNQUFFekI7SUFBUyxDQUFDLENBQUMsQ0FBQzBCLE9BQU8sRUFBRTtJQUN2RCxJQUFJMkMsS0FBSyxDQUFDMUMsTUFBTSxLQUFLLENBQUMsRUFBRTtNQUN0QixNQUFNLElBQUlDLEtBQUssQ0FBQyxjQUFjLENBQUM7SUFDakM7SUFDQSxNQUFNNkMsS0FBSyxHQUFHRixHQUFHLENBQ2RHLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FDWkMsT0FBTyxDQUFDLFFBQVEsRUFBRSxFQUFFLENBQUMsQ0FDckJDLEtBQUssQ0FBQyxHQUFHLENBQUM7SUFDYixNQUFNQyxZQUFZLEdBQUdKLEtBQUssQ0FBQyxDQUFDLENBQUM7SUFDN0IsTUFBTUssVUFBVSxHQUFHTCxLQUFLLENBQUMsQ0FBQyxDQUFDO0lBRTNCLE1BQU1NLFVBQVUsR0FBR1YsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDMUMsTUFBTTtJQUNsQyxNQUFNcUQsU0FBUyxHQUFHQyxRQUFRLENBQUNKLFlBQVksRUFBRSxFQUFFLENBQUM7SUFDNUMsTUFBTUssT0FBTyxHQUFHSixVQUFVLEdBQUdHLFFBQVEsQ0FBQ0gsVUFBVSxFQUFFLEVBQUUsQ0FBQyxHQUFHQyxVQUFVO0lBRWxFLElBQUlJLEtBQUssR0FBR0MsSUFBSSxDQUFDQyxHQUFHLENBQUNMLFNBQVMsSUFBSSxDQUFDLEVBQUVFLE9BQU8sRUFBRUgsVUFBVSxDQUFDO0lBQ3pELElBQUkxRCxHQUFHLEdBQUcrRCxJQUFJLENBQUNFLEdBQUcsQ0FBQ04sU0FBUyxJQUFJLENBQUMsRUFBRUUsT0FBTyxDQUFDLEdBQUcsQ0FBQyxJQUFJSCxVQUFVO0lBQzdELElBQUlRLEtBQUssQ0FBQ1AsU0FBUyxDQUFDLEVBQUU7TUFDcEJHLEtBQUssR0FBR0osVUFBVSxHQUFHMUQsR0FBRyxHQUFHLENBQUM7TUFDNUJBLEdBQUcsR0FBRzBELFVBQVU7SUFDbEI7SUFDQTFELEdBQUcsR0FBRytELElBQUksQ0FBQ0MsR0FBRyxDQUFDaEUsR0FBRyxFQUFFMEQsVUFBVSxDQUFDO0lBQy9CSSxLQUFLLEdBQUdDLElBQUksQ0FBQ0UsR0FBRyxDQUFDSCxLQUFLLEVBQUUsQ0FBQyxDQUFDO0lBRTFCWCxHQUFHLENBQUNnQixNQUFNLENBQUMsR0FBRyxDQUFDO0lBQ2ZoQixHQUFHLENBQUNpQixNQUFNLENBQUMsZUFBZSxFQUFFLE9BQU8sQ0FBQztJQUNwQ2pCLEdBQUcsQ0FBQ2lCLE1BQU0sQ0FBQyxnQkFBZ0IsRUFBRXBFLEdBQUcsR0FBRzhELEtBQUssQ0FBQztJQUN6Q1gsR0FBRyxDQUFDaUIsTUFBTSxDQUFDLGVBQWUsRUFBRSxRQUFRLEdBQUdOLEtBQUssR0FBRyxHQUFHLEdBQUc5RCxHQUFHLEdBQUcsR0FBRyxHQUFHMEQsVUFBVSxDQUFDO0lBQzVFUCxHQUFHLENBQUNpQixNQUFNLENBQUMsY0FBYyxFQUFFdkYsV0FBVyxDQUFDO0lBQ3ZDLE1BQU1FLE1BQU0sR0FBR0QsTUFBTSxDQUFDZ0Msd0JBQXdCLENBQUNuQyxRQUFRLENBQUM7SUFDeERJLE1BQU0sQ0FBQytFLEtBQUssQ0FBQ0EsS0FBSyxDQUFDO0lBQ25CLElBQUk5RCxHQUFHLEVBQUU7TUFDUGpCLE1BQU0sQ0FBQ2lCLEdBQUcsQ0FBQ0EsR0FBRyxDQUFDO0lBQ2pCO0lBQ0FqQixNQUFNLENBQUNrQixFQUFFLENBQUMsTUFBTSxFQUFFb0UsS0FBSyxJQUFJO01BQ3pCbEIsR0FBRyxDQUFDeEQsS0FBSyxDQUFDMEUsS0FBSyxDQUFDO0lBQ2xCLENBQUMsQ0FBQztJQUNGdEYsTUFBTSxDQUFDa0IsRUFBRSxDQUFDLE9BQU8sRUFBRXFFLENBQUMsSUFBSTtNQUN0Qm5CLEdBQUcsQ0FBQ2dCLE1BQU0sQ0FBQyxHQUFHLENBQUM7TUFDZmhCLEdBQUcsQ0FBQ29CLElBQUksQ0FBQ0QsQ0FBQyxDQUFDRSxPQUFPLENBQUM7SUFDckIsQ0FBQyxDQUFDO0lBQ0Z6RixNQUFNLENBQUNrQixFQUFFLENBQUMsS0FBSyxFQUFFLE1BQU07TUFDckJrRCxHQUFHLENBQUNuRCxHQUFHLEVBQUU7SUFDWCxDQUFDLENBQUM7RUFDSjtFQUVBeUUsY0FBYyxHQUFHO0lBQ2YsSUFBSSxDQUFDLElBQUksQ0FBQ3ZHLE9BQU8sRUFBRTtNQUNqQixPQUFPMkIsT0FBTyxDQUFDQyxPQUFPLEVBQUU7SUFDMUI7SUFDQSxPQUFPLElBQUksQ0FBQzVCLE9BQU8sQ0FBQ3dHLEtBQUssQ0FBQyxLQUFLLENBQUM7RUFDbEM7RUFFQUMsZ0JBQWdCLENBQUNoRyxRQUFRLEVBQUU7SUFDekIsT0FBTyxJQUFBZ0csOEJBQWdCLEVBQUNoRyxRQUFRLENBQUM7RUFDbkM7QUFDRjtBQUFDO0FBQUEsZUFFY3ZDLG1CQUFtQjtBQUFBIn0=
|