single-scripture-rcl 3.4.7 → 3.4.8
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.
|
@@ -41,7 +41,7 @@ import useDeepCompareEffect from 'use-deep-compare-effect';
|
|
|
41
41
|
import { getVerses } from 'bible-reference-range';
|
|
42
42
|
import * as isEqual from 'deep-equal';
|
|
43
43
|
import { delay } from '../utils';
|
|
44
|
-
import { cleanupVerseObjects, getBookNameFromUsfmFileName, getResourceLink } from '../utils/ScriptureSettings';
|
|
44
|
+
import { cleanupVerseObjects, getBookNameFromUsfmFileName, getResourceLink, parseResourceLink } from '../utils/ScriptureSettings';
|
|
45
45
|
import { ServerConfig, ScriptureResource, ScriptureReference } from '../types';
|
|
46
46
|
import { parseResourceManifest } from './parseResourceManifest';
|
|
47
47
|
|
|
@@ -110,16 +110,16 @@ export function getVersesForRef(reference, bookObjects, languageId) {
|
|
|
110
110
|
var refStr = "".concat(reference.chapter, ":").concat(reference.verse);
|
|
111
111
|
return getVersesForRefStr(refStr, bookObjects, languageId);
|
|
112
112
|
}
|
|
113
|
-
export function useScripture(
|
|
113
|
+
export function useScripture(_ref2) {
|
|
114
114
|
var _resourceStatus, _fetchParams$referenc;
|
|
115
115
|
|
|
116
|
-
var config =
|
|
117
|
-
readyForFetch =
|
|
118
|
-
reference =
|
|
119
|
-
resource_ =
|
|
120
|
-
resourceLink_ =
|
|
121
|
-
|
|
122
|
-
wholeBook =
|
|
116
|
+
var config = _ref2.config,
|
|
117
|
+
readyForFetch = _ref2.readyForFetch,
|
|
118
|
+
reference = _ref2.reference,
|
|
119
|
+
resource_ = _ref2.resource,
|
|
120
|
+
resourceLink_ = _ref2.resourceLink,
|
|
121
|
+
_ref2$wholeBook = _ref2.wholeBook,
|
|
122
|
+
wholeBook = _ref2$wholeBook === void 0 ? false : _ref2$wholeBook;
|
|
123
123
|
|
|
124
124
|
var _useState = useState({
|
|
125
125
|
bibleUsfm: null,
|
|
@@ -128,9 +128,9 @@ export function useScripture(_ref) {
|
|
|
128
128
|
fetched: false,
|
|
129
129
|
fetchedBook: '',
|
|
130
130
|
fetchParams: {
|
|
131
|
-
|
|
131
|
+
config: {},
|
|
132
132
|
reference: {},
|
|
133
|
-
|
|
133
|
+
resourceLink: ''
|
|
134
134
|
},
|
|
135
135
|
ignoreSha: null,
|
|
136
136
|
initialized: false,
|
|
@@ -152,16 +152,16 @@ export function useScripture(_ref) {
|
|
|
152
152
|
state = _useState2[0],
|
|
153
153
|
setState_ = _useState2[1];
|
|
154
154
|
|
|
155
|
-
var
|
|
156
|
-
owner =
|
|
157
|
-
languageId =
|
|
158
|
-
|
|
159
|
-
branch =
|
|
160
|
-
|
|
161
|
-
ref =
|
|
155
|
+
var _ref3 = resource_ || {},
|
|
156
|
+
owner = _ref3.owner,
|
|
157
|
+
languageId = _ref3.languageId,
|
|
158
|
+
_ref3$branch = _ref3.branch,
|
|
159
|
+
branch = _ref3$branch === void 0 ? 'master' : _ref3$branch,
|
|
160
|
+
_ref3$ref = _ref3.ref,
|
|
161
|
+
ref = _ref3$ref === void 0 ? null : _ref3$ref;
|
|
162
162
|
|
|
163
|
-
var
|
|
164
|
-
bookId =
|
|
163
|
+
var _ref4 = reference || {},
|
|
164
|
+
bookId = _ref4.projectId;
|
|
165
165
|
|
|
166
166
|
var bibleUsfm = state.bibleUsfm,
|
|
167
167
|
bookObjects = state.bookObjects,
|
|
@@ -187,66 +187,47 @@ export function useScripture(_ref) {
|
|
|
187
187
|
}
|
|
188
188
|
|
|
189
189
|
function initiateBookFetch() {
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
if (!resourceLink_ && resource_) {
|
|
204
|
-
ref_ = ref || branch;
|
|
205
|
-
resourceLink = getResourceLink({
|
|
206
|
-
owner: owner,
|
|
207
|
-
languageId: languageId,
|
|
208
|
-
resourceId: bookId,
|
|
209
|
-
ref: ref_
|
|
210
|
-
});
|
|
211
|
-
}
|
|
190
|
+
console.log("useScripture - readyForFetch true, initializing");
|
|
191
|
+
var resourceLink = readyForFetch && resourceLink_;
|
|
192
|
+
|
|
193
|
+
if (!resourceLink_ && resource_) {
|
|
194
|
+
var ref_ = ref || branch;
|
|
195
|
+
resourceLink = getResourceLink({
|
|
196
|
+
owner: owner,
|
|
197
|
+
languageId: languageId,
|
|
198
|
+
resourceId: bookId,
|
|
199
|
+
ref: ref_
|
|
200
|
+
});
|
|
201
|
+
}
|
|
212
202
|
|
|
213
|
-
|
|
203
|
+
var bookRef = _objectSpread({}, reference);
|
|
214
204
|
|
|
215
|
-
|
|
216
|
-
|
|
205
|
+
if (wholeBook) {
|
|
206
|
+
delete bookRef.chapter; // remove the chapter and verse so the whole book is fetched
|
|
217
207
|
|
|
218
|
-
|
|
219
|
-
|
|
208
|
+
delete bookRef.verse;
|
|
209
|
+
}
|
|
220
210
|
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
211
|
+
if (resourceLink !== (fetchParams === null || fetchParams === void 0 ? void 0 : fetchParams.resourceLink)) {
|
|
212
|
+
console.log("useScripture - for ".concat(resource_ === null || resource_ === void 0 ? void 0 : resource_.projectId, " resourceLink is now ").concat(resourceLink, " and resourceLink_=").concat(resourceLink_));
|
|
213
|
+
} else if (bookRef !== (fetchParams === null || fetchParams === void 0 ? void 0 : fetchParams.reference)) {
|
|
214
|
+
console.log("useScripture - book changed to ".concat(resource_ === null || resource_ === void 0 ? void 0 : resource_.projectId, " resourceLink is now ").concat(resourceLink));
|
|
215
|
+
}
|
|
226
216
|
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
if (!isEqual(newFetchParams, fetchParams)) {
|
|
234
|
-
setState({
|
|
235
|
-
fetchParams: newFetchParams,
|
|
236
|
-
fetched: false,
|
|
237
|
-
initialized: true
|
|
238
|
-
});
|
|
239
|
-
fetchBook(newFetchParams);
|
|
240
|
-
}
|
|
217
|
+
var newFetchParams = {
|
|
218
|
+
config: config,
|
|
219
|
+
reference: bookRef,
|
|
220
|
+
resourceLink: resourceLink
|
|
221
|
+
};
|
|
241
222
|
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
}
|
|
248
|
-
|
|
249
|
-
|
|
223
|
+
if (!isEqual(newFetchParams, fetchParams)) {
|
|
224
|
+
setState({
|
|
225
|
+
fetchParams: newFetchParams,
|
|
226
|
+
fetched: false,
|
|
227
|
+
initialized: true
|
|
228
|
+
});
|
|
229
|
+
fetchBook(newFetchParams);
|
|
230
|
+
}
|
|
250
231
|
}
|
|
251
232
|
}, [readyForFetch, owner, languageId, bookId, branch, ref]);
|
|
252
233
|
/**
|
|
@@ -260,10 +241,15 @@ export function useScripture(_ref) {
|
|
|
260
241
|
}
|
|
261
242
|
|
|
262
243
|
function _fetchBook() {
|
|
263
|
-
_fetchBook = _asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function
|
|
244
|
+
_fetchBook = _asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee(fetchParams) {
|
|
264
245
|
var ignoreSha,
|
|
246
|
+
_fetchParams$referenc2,
|
|
247
|
+
_resourceState$resour,
|
|
265
248
|
_resource$project,
|
|
266
249
|
_resource$project2,
|
|
250
|
+
fetchLink,
|
|
251
|
+
shaToBeIgnored,
|
|
252
|
+
_resourceState$resour2,
|
|
267
253
|
_fetchCount,
|
|
268
254
|
_resource,
|
|
269
255
|
errorMsg,
|
|
@@ -271,91 +257,104 @@ export function useScripture(_ref) {
|
|
|
271
257
|
_bibleUsfm,
|
|
272
258
|
_bookObjects3,
|
|
273
259
|
_errorMsg,
|
|
274
|
-
|
|
260
|
+
_ref5,
|
|
275
261
|
name,
|
|
276
262
|
sha,
|
|
277
263
|
url,
|
|
278
|
-
|
|
264
|
+
_args = arguments;
|
|
279
265
|
|
|
280
|
-
return regeneratorRuntime.wrap(function
|
|
266
|
+
return regeneratorRuntime.wrap(function _callee$(_context) {
|
|
281
267
|
while (1) {
|
|
282
|
-
switch (
|
|
268
|
+
switch (_context.prev = _context.next) {
|
|
283
269
|
case 0:
|
|
284
|
-
ignoreSha =
|
|
285
|
-
|
|
270
|
+
ignoreSha = _args.length > 1 && _args[1] !== undefined ? _args[1] : null;
|
|
271
|
+
_context.prev = 1;
|
|
272
|
+
fetchLink = "".concat(fetchParams === null || fetchParams === void 0 ? void 0 : fetchParams.resourceLink, "/").concat(fetchParams === null || fetchParams === void 0 ? void 0 : (_fetchParams$referenc2 = fetchParams.reference) === null || _fetchParams$referenc2 === void 0 ? void 0 : _fetchParams$referenc2.projectId);
|
|
273
|
+
shaToBeIgnored = ignoreSha && ignoreSha === (resourceState === null || resourceState === void 0 ? void 0 : resourceState.sha); // we will reload if ignoreSha given and it matches current sha
|
|
274
|
+
|
|
275
|
+
if (!(fetchLink === (resourceState === null || resourceState === void 0 ? void 0 : (_resourceState$resour = resourceState.resource) === null || _resourceState$resour === void 0 ? void 0 : _resourceState$resour.resourceLink) && !shaToBeIgnored)) {
|
|
276
|
+
_context.next = 7;
|
|
277
|
+
break;
|
|
278
|
+
}
|
|
279
|
+
|
|
280
|
+
// see if we already fetched this
|
|
281
|
+
console.log("useScripture.fetchBook() - Already fetching resourceLink ".concat(resourceState === null || resourceState === void 0 ? void 0 : (_resourceState$resour2 = resourceState.resource) === null || _resourceState$resour2 === void 0 ? void 0 : _resourceState$resour2.resourceLink, " and ignoreSha=").concat(ignoreSha), fetchParams);
|
|
282
|
+
return _context.abrupt("return");
|
|
283
|
+
|
|
284
|
+
case 7:
|
|
286
285
|
_fetchCount = fetchCount + 1;
|
|
287
|
-
console.log("useScripture - FETCHING bible ".concat(resource_ === null || resource_ === void 0 ? void 0 : resource_.projectId, " resourceLink is now ").concat(fetchParams === null || fetchParams === void 0 ? void 0 : fetchParams.resourceLink, " and
|
|
286
|
+
console.log("useScripture.fetchBook() - FETCHING bible ".concat(resource_ === null || resource_ === void 0 ? void 0 : resource_.projectId, " resourceLink is now ").concat(fetchParams === null || fetchParams === void 0 ? void 0 : fetchParams.resourceLink, " and ignoreSha=").concat(ignoreSha), fetchParams);
|
|
288
287
|
setState({
|
|
289
|
-
resourceState: {
|
|
290
|
-
loadingResource: true
|
|
291
|
-
},
|
|
292
288
|
fetchCount: _fetchCount,
|
|
293
289
|
fetched: false,
|
|
294
|
-
ignoreSha: ignoreSha
|
|
290
|
+
ignoreSha: ignoreSha,
|
|
291
|
+
resourceState: {
|
|
292
|
+
loadingResource: true
|
|
293
|
+
}
|
|
295
294
|
}); // fetch manifest data
|
|
296
295
|
|
|
297
|
-
|
|
296
|
+
_context.next = 12;
|
|
298
297
|
return delay(100);
|
|
299
298
|
|
|
300
|
-
case
|
|
301
|
-
|
|
299
|
+
case 12:
|
|
300
|
+
_context.next = 14;
|
|
302
301
|
return core.resourceFromResourceLink(fetchParams);
|
|
303
302
|
|
|
304
|
-
case
|
|
305
|
-
_resource =
|
|
303
|
+
case 14:
|
|
304
|
+
_resource = _context.sent;
|
|
306
305
|
|
|
307
306
|
if (!(!(_resource !== null && _resource !== void 0 && _resource.manifest) || !(_resource !== null && _resource !== void 0 && (_resource$project = _resource.project) !== null && _resource$project !== void 0 && _resource$project.file))) {
|
|
308
|
-
|
|
307
|
+
_context.next = 20;
|
|
309
308
|
break;
|
|
310
309
|
}
|
|
311
310
|
|
|
312
311
|
errorMsg = _resource !== null && _resource !== void 0 && _resource.manifest ? 'parsing resource manifest' : 'loading resource manifest';
|
|
313
|
-
console.warn("useScripture - error ".concat(errorMsg), fetchParams);
|
|
312
|
+
console.warn("useScripture.fetchBook() - error ".concat(errorMsg), fetchParams);
|
|
314
313
|
setState({
|
|
315
314
|
resourceState: {
|
|
316
315
|
loadingResource: false,
|
|
317
316
|
resource: _resource
|
|
318
317
|
}
|
|
319
318
|
});
|
|
320
|
-
return
|
|
319
|
+
return _context.abrupt("return");
|
|
321
320
|
|
|
322
|
-
case
|
|
323
|
-
console.log("useScripture - LOADED bible manifest, fetching book ".concat(resource_ === null || resource_ === void 0 ? void 0 : resource_.projectId, " resourceLink is now ").concat(fetchParams === null || fetchParams === void 0 ? void 0 : fetchParams.resourceLink, " and resourceLink_=").concat(fetchParams === null || fetchParams === void 0 ? void 0 : fetchParams.resourceLink_), fetchParams);
|
|
324
|
-
|
|
321
|
+
case 20:
|
|
322
|
+
console.log("useScripture.fetchBook() - LOADED bible manifest, fetching book ".concat(resource_ === null || resource_ === void 0 ? void 0 : resource_.projectId, " resourceLink is now ").concat(fetchParams === null || fetchParams === void 0 ? void 0 : fetchParams.resourceLink, " and resourceLink_=").concat(fetchParams === null || fetchParams === void 0 ? void 0 : fetchParams.resourceLink_), fetchParams);
|
|
323
|
+
_context.next = 23;
|
|
325
324
|
return delay(100);
|
|
326
325
|
|
|
327
|
-
case
|
|
328
|
-
|
|
326
|
+
case 23:
|
|
327
|
+
_context.next = 25;
|
|
329
328
|
return _resource === null || _resource === void 0 ? void 0 : (_resource$project2 = _resource.project) === null || _resource$project2 === void 0 ? void 0 : _resource$project2.file();
|
|
330
329
|
|
|
331
|
-
case
|
|
332
|
-
response =
|
|
330
|
+
case 25:
|
|
331
|
+
response = _context.sent;
|
|
333
332
|
// parse book usfm
|
|
334
333
|
_bibleUsfm = response && core.getResponseData(response);
|
|
335
|
-
|
|
334
|
+
_context.next = 29;
|
|
336
335
|
return delay(100);
|
|
337
336
|
|
|
338
|
-
case
|
|
337
|
+
case 29:
|
|
339
338
|
_bookObjects3 = _bibleUsfm && usfmjs.toJSON(_bibleUsfm); // convert to bible objects
|
|
340
339
|
|
|
341
340
|
if (_bookObjects3) {
|
|
342
|
-
|
|
341
|
+
_context.next = 35;
|
|
343
342
|
break;
|
|
344
343
|
}
|
|
345
344
|
|
|
346
345
|
_errorMsg = _bibleUsfm ? 'fetching book of the bible' : 'parsing book of the bible';
|
|
347
|
-
console.warn("useScripture - error ".concat(_errorMsg), fetchParams);
|
|
346
|
+
console.warn("useScripture.fetchBook() - error ".concat(_errorMsg), fetchParams);
|
|
348
347
|
setState({
|
|
349
348
|
resourceState: {
|
|
350
349
|
loadingResource: false,
|
|
351
350
|
resource: _resource
|
|
352
351
|
}
|
|
353
352
|
});
|
|
354
|
-
return
|
|
353
|
+
return _context.abrupt("return");
|
|
355
354
|
|
|
356
|
-
case
|
|
357
|
-
|
|
358
|
-
console.log("useScripture - LOADED bible book ".concat(resource_ === null || resource_ === void 0 ? void 0 : resource_.projectId, " resourceLink is now ").concat(fetchParams === null || fetchParams === void 0 ? void 0 : fetchParams.resourceLink, " and resourceLink_=").concat(fetchParams === null || fetchParams === void 0 ? void 0 : fetchParams.resourceLink_), fetchParams);
|
|
355
|
+
case 35:
|
|
356
|
+
_ref5 = (response === null || response === void 0 ? void 0 : response.data) || {}, name = _ref5.name, sha = _ref5.sha, url = _ref5.url;
|
|
357
|
+
console.log("useScripture.fetchBook() - LOADED bible book ".concat(resource_ === null || resource_ === void 0 ? void 0 : resource_.projectId, " resourceLink is now ").concat(fetchParams === null || fetchParams === void 0 ? void 0 : fetchParams.resourceLink, " and resourceLink_=").concat(fetchParams === null || fetchParams === void 0 ? void 0 : fetchParams.resourceLink_), fetchParams);
|
|
359
358
|
setState({
|
|
360
359
|
resourceState: {
|
|
361
360
|
loadingResource: false,
|
|
@@ -364,25 +363,32 @@ export function useScripture(_ref) {
|
|
|
364
363
|
bookObjects: _bookObjects3,
|
|
365
364
|
fetchCount: _fetchCount,
|
|
366
365
|
name: name,
|
|
366
|
+
reference: fetchParams === null || fetchParams === void 0 ? void 0 : fetchParams.reference,
|
|
367
367
|
sha: sha,
|
|
368
368
|
url: url
|
|
369
369
|
})
|
|
370
370
|
}
|
|
371
371
|
});
|
|
372
|
-
|
|
372
|
+
_context.next = 44;
|
|
373
373
|
break;
|
|
374
374
|
|
|
375
|
-
case
|
|
376
|
-
|
|
377
|
-
|
|
378
|
-
console.error("useScripture - hard error loading resource", fetchParams,
|
|
375
|
+
case 40:
|
|
376
|
+
_context.prev = 40;
|
|
377
|
+
_context.t0 = _context["catch"](1);
|
|
378
|
+
console.error("useScripture.fetchBook() - hard error loading resource", fetchParams, _context.t0);
|
|
379
|
+
setState({
|
|
380
|
+
resourceState: {
|
|
381
|
+
loadingResource: false,
|
|
382
|
+
resource: null
|
|
383
|
+
}
|
|
384
|
+
});
|
|
379
385
|
|
|
380
|
-
case
|
|
386
|
+
case 44:
|
|
381
387
|
case "end":
|
|
382
|
-
return
|
|
388
|
+
return _context.stop();
|
|
383
389
|
}
|
|
384
390
|
}
|
|
385
|
-
},
|
|
391
|
+
}, _callee, null, [[1, 40]]);
|
|
386
392
|
}));
|
|
387
393
|
return _fetchBook.apply(this, arguments);
|
|
388
394
|
}
|
|
@@ -571,14 +577,41 @@ export function useScripture(_ref) {
|
|
|
571
577
|
return null;
|
|
572
578
|
}
|
|
573
579
|
/**
|
|
574
|
-
* force reload of
|
|
580
|
+
* force reload of resource
|
|
575
581
|
* @param {string|undefined} ignoreSha - optional sha to ignore
|
|
582
|
+
* @param {string|undefined} ref - optional reference to fetch
|
|
576
583
|
*/
|
|
577
584
|
|
|
578
585
|
|
|
579
586
|
function reloadResource() {
|
|
580
587
|
var ignoreSha = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;
|
|
581
|
-
|
|
588
|
+
var ref = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;
|
|
589
|
+
console.log("useScripture.reloadResource() ignoreSha: ".concat(ignoreSha));
|
|
590
|
+
|
|
591
|
+
var _fetchParams = _objectSpread({}, fetchParams);
|
|
592
|
+
|
|
593
|
+
if (ref && fetchParams !== null && fetchParams !== void 0 && fetchParams.resourceLink) {
|
|
594
|
+
var _parseResourceLink = parseResourceLink(fetchParams.resourceLink),
|
|
595
|
+
_owner = _parseResourceLink.owner,
|
|
596
|
+
_languageId = _parseResourceLink.languageId,
|
|
597
|
+
resourceId = _parseResourceLink.resourceId,
|
|
598
|
+
_ref = _parseResourceLink.ref;
|
|
599
|
+
|
|
600
|
+
if (ref !== _ref) {
|
|
601
|
+
// if ref changed, update resourcelink
|
|
602
|
+
var _resourceLink = getResourceLink({
|
|
603
|
+
owner: _owner,
|
|
604
|
+
languageId: _languageId,
|
|
605
|
+
resourceId: resourceId,
|
|
606
|
+
ref: ref
|
|
607
|
+
});
|
|
608
|
+
|
|
609
|
+
console.log("useScripture.reloadResource() old ref is different ".concat(_ref, ", switching to load ref: ").concat(ref, ", new resourceLink: ").concat(_resourceLink));
|
|
610
|
+
_fetchParams.resourceLink = _resourceLink;
|
|
611
|
+
}
|
|
612
|
+
}
|
|
613
|
+
|
|
614
|
+
fetchBook(_fetchParams, ignoreSha);
|
|
582
615
|
} // @ts-ignore
|
|
583
616
|
|
|
584
617
|
|
|
@@ -633,4 +666,4 @@ export function useScripture(_ref) {
|
|
|
633
666
|
versesForRef: versesForRef
|
|
634
667
|
};
|
|
635
668
|
}
|
|
636
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9ob29rcy91c2VTY3JpcHR1cmUudHN4Il0sIm5hbWVzIjpbInVzZUVmZmVjdCIsInVzZVN0YXRlIiwiY29yZSIsInVzZm1qcyIsIkNPTlRFTlRfTk9UX0ZPVU5EX0VSUk9SIiwiRVJST1JfU1RBVEUiLCJJTklUSUFMSVpFRF9TVEFURSIsIklOVkFMSURfTUFOSUZFU1RfRVJST1IiLCJMT0FESU5HX1NUQVRFIiwiTUFOSUZFU1RfTk9UX0xPQURFRF9FUlJPUiIsIlNDUklQVFVSRV9OT1RfTE9BREVEX0VSUk9SIiwidXNlRGVlcENvbXBhcmVFZmZlY3QiLCJnZXRWZXJzZXMiLCJpc0VxdWFsIiwiZGVsYXkiLCJjbGVhbnVwVmVyc2VPYmplY3RzIiwiZ2V0Qm9va05hbWVGcm9tVXNmbUZpbGVOYW1lIiwiZ2V0UmVzb3VyY2VMaW5rIiwiU2VydmVyQ29uZmlnIiwiU2NyaXB0dXJlUmVzb3VyY2UiLCJTY3JpcHR1cmVSZWZlcmVuY2UiLCJwYXJzZVJlc291cmNlTWFuaWZlc3QiLCJnZXRCcmFuY2hOYW1lIiwicmVzb3VyY2VMaW5rIiwiYnJhbmNoIiwicGFydHMiLCJzcGxpdCIsImxlbmd0aCIsIl9wYXJ0cyIsImdldFZlcnNlc0ZvclJlZlN0ciIsInJlZlN0ciIsImJvb2tPYmplY3RzIiwibGFuZ3VhZ2VJZCIsInZlcnNlcyIsImNoYXB0ZXJzIiwibWFwIiwidmVyc2UiLCJ2ZXJzZURhdGEiLCJ2ZXJzZU9iamVjdHMiLCJ2ZXJzZU9iamVjdHNfIiwib2NjdXJyZW5jZUluamVjdFZlcnNlT2JqZWN0cyIsImdldFZlcnNlc0ZvclJlZiIsInJlZmVyZW5jZSIsImNoYXB0ZXIiLCJ1c2VTY3JpcHR1cmUiLCJjb25maWciLCJyZWFkeUZvckZldGNoIiwicmVzb3VyY2VfIiwicmVzb3VyY2UiLCJyZXNvdXJjZUxpbmtfIiwid2hvbGVCb29rIiwiYmlibGVVc2ZtIiwiZmV0Y2hDb3VudCIsImZldGNoZWQiLCJmZXRjaGVkQm9vayIsImZldGNoUGFyYW1zIiwiaWdub3JlU2hhIiwiaW5pdGlhbGl6ZWQiLCJyZXNvdXJjZVN0YXRlIiwiY29udGVudCIsImZldGNoUmVzcG9uc2UiLCJmZXRjaGVkUmVzb3VyY2VzIiwibG9hZGluZ1Jlc291cmNlIiwibG9hZGluZ0NvbnRlbnQiLCJzaGEiLCJ1cmwiLCJ2ZXJzZXNGb3JSZWYiLCJzdGF0ZSIsInNldFN0YXRlXyIsIm93bmVyIiwicmVmIiwiYm9va0lkIiwicHJvamVjdElkIiwic2V0U3RhdGUiLCJuZXdTdGF0ZSIsInByZXZTdGF0ZSIsImluaXRpYXRlQm9va0ZldGNoIiwiY29uc29sZSIsImxvZyIsInJlZl8iLCJyZXNvdXJjZUlkIiwiYm9va1JlZiIsIm5ld0ZldGNoUGFyYW1zIiwiZmV0Y2hCb29rIiwiX2ZldGNoQ291bnQiLCJyZXNvdXJjZUZyb21SZXNvdXJjZUxpbmsiLCJfcmVzb3VyY2UiLCJtYW5pZmVzdCIsInByb2plY3QiLCJmaWxlIiwiZXJyb3JNc2ciLCJ3YXJuIiwicmVzcG9uc2UiLCJnZXRSZXNwb25zZURhdGEiLCJ0b0pTT04iLCJkYXRhIiwibmFtZSIsImVycm9yIiwidmFsaWRhdGVSZXNwb25zZSIsImlzU2FtZUJvb2siLCJleHBlY3RlZEJvb2tJZCIsInRvTG93ZXJDYXNlIiwiaW5jbHVkZXMiLCJmZXRjaGVkQnJhbmNoIiwiZmV0Y2hpbmdCcmFuY2giLCJiaWJsZVVzZm1fIiwiZmV0Y2hWZXJzZXNGb3JSZWYiLCJ0aGVuIiwidGl0bGUiLCJ2ZXJzaW9uIiwibG9hZGluZyIsImNvbnRlbnROb3RGb3VuZEVycm9yIiwic2NyaXB0dXJlTm90TG9hZGVkRXJyb3IiLCJtYW5pZmVzdE5vdEZvdW5kRXJyb3IiLCJpbnZhbGlkTWFuaWZlc3RFcnJvciIsInJlc291cmNlU3RhdHVzIiwiaW50aWFsaXplZCIsIl9nZXRWZXJzZXNGb3JSZWYiLCJjb250ZW50XyIsInVwZGF0ZVZlcnNlIiwiYm9va09iamVjdHNfIiwiX2Jvb2tPYmplY3RzIiwibmV3VmVyc2VzRm9yUmVmIiwicmVsb2FkUmVzb3Vy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LENBQUViLFNBSm5CO0FBS0xpRixJQUFBQSxjQUFjLEVBQWRBLGNBTEs7QUFNTHBHLElBQUFBLFlBQVksRUFBRWdDLFdBQUYsYUFBRUEsV0FBRix1QkFBRUEsV0FBVyxDQUFFaEMsWUFOdEI7QUFPTG1DLElBQUFBLGFBQWEsRUFBYkEsYUFQSztBQU9VO0FBQ2Z5RCxJQUFBQSxjQUFjLEVBQWRBLGNBUks7QUFRVztBQUNoQlAsSUFBQUEsS0FBSyxFQUFMQSxLQVRLO0FBVUxXLElBQUFBLFdBQVcsRUFBWEEsV0FWSztBQVdMVixJQUFBQSxPQUFPLEVBQVBBLE9BWEs7QUFZTDNDLElBQUFBLFlBQVksRUFBWkE7QUFaSyxHQUFQO0FBY0QiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBAdHMtaWdub3JlXG5pbXBvcnQge1xuICB1c2VFZmZlY3QsXG4gIHVzZVN0YXRlLFxufSBmcm9tICdyZWFjdCdcbmltcG9ydCB7IGNvcmUgfSBmcm9tICdzY3JpcHR1cmUtcmVzb3VyY2VzLXJjbCdcbmltcG9ydCB1c2ZtanMgZnJvbSAndXNmbS1qcydcbmltcG9ydCB7XG4gIENPTlRFTlRfTk9UX0ZPVU5EX0VSUk9SLFxuICBFUlJPUl9TVEFURSxcbiAgSU5JVElBTElaRURfU1RBVEUsXG4gIElOVkFMSURfTUFOSUZFU1RfRVJST1IsXG4gIExPQURJTkdfU1RBVEUsXG4gIE1BTklGRVNUX05PVF9MT0FERURfRVJST1IsXG4gIFNDUklQVFVSRV9OT1RfTE9BREVEX0VSUk9SLFxufSBmcm9tICd0cmFuc2xhdGlvbi1oZWxwcy1yY2wnXG5pbXBvcnQgdXNlRGVlcENvbXBhcmVFZmZlY3QgZnJvbSAndXNlLWRlZXAtY29tcGFyZS1lZmZlY3QnXG5pbXBvcnQgeyBnZXRWZXJzZXMgfSBmcm9tICdiaWJsZS1yZWZlcmVuY2UtcmFuZ2UnXG5pbXBvcnQgKiBhcyBpc0VxdWFsIGZyb20gJ2RlZXAtZXF1YWwnXG5pbXBvcnQgeyBkZWxheSB9IGZyb20gJy4uL3V0aWxzJ1xuaW1wb3J0IHtcbiAgY2xlYW51cFZlcnNlT2JqZWN0cyxcbiAgZ2V0Qm9va05hbWVGcm9tVXNmbUZpbGVOYW1lLFxuICBnZXRSZXNvdXJjZUxpbmssXG59IGZyb20gJy4uL3V0aWxzL1NjcmlwdHVyZVNldHRpbmdzJ1xuaW1wb3J0IHtcbiAgU2VydmVyQ29uZmlnLFxuICBTY3JpcHR1cmVSZXNvdXJjZSxcbiAgU2NyaXB0dXJlUmVmZXJlbmNlLFxufSBmcm9tICcuLi90eXBlcydcbmltcG9ydCB7IHBhcnNlUmVzb3VyY2VNYW5pZmVzdCB9IGZyb20gJy4vcGFyc2VSZXNvdXJjZU1hbmlmZXN0J1xuXG5pbnRlcmZhY2UgUHJvcHMge1xuICAvKiogcmVmZXJlbmNlIGZvciBzY3JpcHR1cmUgKiovXG4gIHJlZmVyZW5jZTogU2NyaXB0dXJlUmVmZXJlbmNlO1xuICAvKiogd2hlcmUgdG8gZ2V0IGRhdGEgKiovXG4gIGNvbmZpZzogU2VydmVyQ29uZmlnO1xuICAvKiogb3B0aW9uYWwgZGlyZWN0IHBhdGggdG8gYmlibGUgcmVzb3VyY2UsIGluIGZvcm1hdCAke293bmVyfS8ke2xhbmd1YWdlSWR9LyR7cHJvamVjdElkfS8ke2JyYW5jaH0gKiovXG4gIHJlc291cmNlTGluazogc3RyaW5nfHVuZGVmaW5lZDtcbiAgLyoqIG9wdGlvbmFsIHJlc291cmNlIG9iamVjdCB0byB1c2UgdG8gYnVpbGQgcmVzb3VyY2VMaW5rICoqL1xuICByZXNvdXJjZTogU2NyaXB0dXJlUmVzb3VyY2V8dW5kZWZpbmVkO1xuICAvKiogaWYgdHJ1ZSB0aGVuIGZldGNoIHRoZSBlbnRpcmUgYm9vayAqL1xuICB3aG9sZUJvb2s6IGJvb2xlYW47XG4gIC8qKiBpZiB0cnVlIHRoZW4gc2V0dGluZ3MgYXJlIHJlYWR5IGZvciBmZXRjaGluZyBkYXRhICovXG4gIHJlYWR5Rm9yRmV0Y2g6IGJvb2xlYW47XG59XG5cbi8qKlxuICogZXh0cmFjdCBicmFuY2ggZnJvbSByZXNvdXJjZSBsaW5rXG4gKiBAcGFyYW0gcmVzb3VyY2VMaW5rXG4gKi9cbmZ1bmN0aW9uIGdldEJyYW5jaE5hbWUocmVzb3VyY2VMaW5rOiBzdHJpbmcpIHtcbiAgbGV0IGJyYW5jaCA9IG51bGxcbiAgcmVzb3VyY2VMaW5rID0gcmVzb3VyY2VMaW5rIHx8ICcnXG4gIGNvbnN0IHBhcnRzID0gcmVzb3VyY2VMaW5rLnNwbGl0KCc/cmVmPScpXG5cbiAgaWYgKHBhcnRzLmxlbmd0aCA+IDEpIHsgLy8gaWYgcmVmIHBhcmFtZXRlciBmb3VuZCwgZ2V0IGJyYW5jaCBuYW1lIGFmdGVyXG4gICAgYnJhbmNoID0gcGFydHM/LlsxXVxuICB9IGVsc2UgeyAvLyBmYWxsIGJhY2sgdG8gdXNpbmcgdXNlUnNyYyBmb3JtYXQgc3VjaCBhcyBcInVuZm9sZGluZ1dvcmQvZW4vdXN0L21hc3RlclwiXG4gICAgY29uc3QgX3BhcnRzID0gcmVzb3VyY2VMaW5rLnNwbGl0KCcvJylcbiAgICBicmFuY2ggPSBfcGFydHM/LlszXVxuICB9XG4gIHJldHVybiBicmFuY2hcbn1cblxuLyoqXG4gKiBnZXQgdGhlIHZlcnNlIG9iamVjdHMgZm9yIHRoZSByZWZlcmVuY2Ugc3RyaW5nXG4gKiBAcGFyYW0ge3N0cmluZ30gcmVmU3RyIC0gaW4gZm9ybWF0IDxjaGFwdGVyPjo8dmVyc2U+XG4gKiBAcGFyYW0ge29iamVjdH0gYm9va09iamVjdHMgLSBwYXJzZWQgdXNmbSBmb3IgYm9va1xuICogQHBhcmFtIHtzdHJpbmd9IGxhbmd1YWdlSWRcbiAqIEByZXR1cm4ge2FycmF5fG51bGx9IC0gb2YgdmVyc2VPYmplY3RzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRWZXJzZXNGb3JSZWZTdHIocmVmU3RyLCBib29rT2JqZWN0cywgbGFuZ3VhZ2VJZCkge1xuICBpZiAoYm9va09iamVjdHMpIHtcbiAgICBsZXQgdmVyc2VzID0gZ2V0VmVyc2VzKGJvb2tPYmplY3RzLmNoYXB0ZXJzLCByZWZTdHIpXG5cbiAgICBpZiAobGFuZ3VhZ2VJZCA9PT0gJ2VsLXgta29pbmUnIHx8IGxhbmd1YWdlSWQgPT09ICdoYm8nKSB7XG4gICAgICB2ZXJzZXMgPSB2ZXJzZXMubWFwKHZlcnNlID0+IHtcbiAgICAgICAgaWYgKCB2ZXJzZT8udmVyc2VEYXRhPy52ZXJzZU9iamVjdHMpIHtcbiAgICAgICAgICBsZXQgdmVyc2VPYmplY3RzXyA9IGNvcmUub2NjdXJyZW5jZUluamVjdFZlcnNlT2JqZWN0cyggdmVyc2UudmVyc2VEYXRhLnZlcnNlT2JqZWN0cylcbiAgICAgICAgICB2ZXJzZU9iamVjdHNfID0gY2xlYW51cFZlcnNlT2JqZWN0cyh2ZXJzZU9iamVjdHNfKVxuICAgICAgICAgIHZlcnNlLnZlcnNlRGF0YS52ZXJzZU9iamVjdHMgPSB2ZXJzZU9iamVjdHNfXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHZlcnNlXG4gICAgICB9KVxuICAgIH1cblxuICAgIHJldHVybiB2ZXJzZXNcbiAgfVxuICByZXR1cm4gbnVsbFxufVxuXG4vKipcbiAqIGdldCB0aGUgdmVyc2Ugb2JqZWN0cyBmb3IgdGhlIHJlZmVyZW5jZSBvYmplY3RcbiAqIEBwYXJhbSB7b2JqZWN0fSByZWZlcmVuY2VcbiAqIEBwYXJhbSB7b2JqZWN0fSBib29rT2JqZWN0cyAtIHBhcnNlZCB1c2ZtIGZvciBib29rXG4gKiBAcGFyYW0ge3N0cmluZ30gbGFuZ3VhZ2VJZFxuICogQHJldHVybiB7YXJyYXl8bnVsbH0gLSBvZiB2ZXJzZU9iamVjdHNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFZlcnNlc0ZvclJlZihyZWZlcmVuY2UsIGJvb2tPYmplY3RzLCBsYW5ndWFnZUlkKSB7XG4gIGNvbnN0IHJlZlN0ciA9IGAke3JlZmVyZW5jZS5jaGFwdGVyfToke3JlZmVyZW5jZS52ZXJzZX1gXG4gIHJldHVybiBnZXRWZXJzZXNGb3JSZWZTdHIocmVmU3RyLCBib29rT2JqZWN0cywgbGFuZ3VhZ2VJZClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHVzZVNjcmlwdHVyZSh7IC8vIGhvb2sgZm9yIGZldGNoaW5nIHNjcmlwdHVyZVxuICBjb25maWcsXG4gIHJlYWR5Rm9yRmV0Y2gsXG4gIHJlZmVyZW5jZSxcbiAgcmVzb3VyY2U6IHJlc291cmNlXyxcbiAgcmVzb3VyY2VMaW5rOiByZXNvdXJjZUxpbmtfLFxuICB3aG9sZUJvb2sgPSBmYWxzZSxcbn0gOiBQcm9wcykge1xuICBjb25zdCBbc3RhdGUsIHNldFN0YXRlX10gPSB1c2VTdGF0ZSh7XG4gICAgYmlibGVVc2ZtOiBudWxsLFxuICAgIGJvb2tPYmplY3RzOiBudWxsLFxuICAgIGZldGNoQ291bnQ6IDAsXG4gICAgZmV0Y2hlZDogZmFsc2UsXG4gICAgZmV0Y2hlZEJvb2s6ICcnLFxuICAgIGZldGNoUGFyYW1zOiB7XG4gICAgICByZXNvdXJjZUxpbms6ICcnLFxuICAgICAgcmVmZXJlbmNlOiB7fSxcbiAgICAgIGNvbmZpZzoge30sXG4gICAgfSxcbiAgICBpZ25vcmVTaGE6IG51bGwsXG4gICAgaW5pdGlhbGl6ZWQ6IGZhbHNlLFxuICAgIHJlc291cmNlU3RhdGU6IHtcbiAgICAgIGJvb2tPYmplY3RzOiBudWxsLFxuICAgICAgYmlibGVVc2ZtOiBudWxsLFxuICAgICAgY29udGVudDogbnVsbCxcbiAgICAgIGZldGNoUmVzcG9uc2U6IG51bGwsXG4gICAgICBmZXRjaGVkUmVzb3VyY2VzOiBudWxsLFxuICAgICAgbG9hZGluZ1Jlc291cmNlOiBmYWxzZSxcbiAgICAgIGxvYWRpbmdDb250ZW50OiBmYWxzZSxcbiAgICAgIHJlc291cmNlOiBudWxsLFxuICAgICAgc2hhOiBudWxsLFxuICAgICAgdXJsOiBudWxsLFxuICAgIH0sXG4gICAgdmVyc2VzRm9yUmVmOiBbXSxcbiAgfSlcblxuICBjb25zdCB7XG4gICAgb3duZXIsXG4gICAgbGFuZ3VhZ2VJZCxcbiAgICBicmFuY2ggPSAnbWFzdGVyJyxcbiAgICByZWYgPSBudWxsLFxuICB9ID0gcmVzb3VyY2VfIHx8IHt9XG5cbiAgY29uc3QgeyBwcm9qZWN0SWQ6IGJvb2tJZH0gPSByZWZlcmVuY2UgfHwge31cblxuICBjb25zdCB7XG4gICAgYmlibGVVc2ZtLFxuICAgIGJvb2tPYmplY3RzLFxuICAgIGZldGNoQ291bnQsXG4gICAgZmV0Y2hlZCxcbiAgICBmZXRjaGVkQm9vayxcbiAgICBmZXRjaFBhcmFtcyxcbiAgICBpZ25vcmVTaGEsXG4gICAgaW5pdGlhbGl6ZWQsXG4gICAgcmVzb3VyY2VTdGF0ZSxcbiAgICB2ZXJzZXNGb3JSZWYsXG4gIH0gPSBzdGF0ZVxuICBjb25zdCBmZXRjaGVkUmVzb3VyY2VzID0gcmVzb3VyY2VTdGF0ZT8uZmV0Y2hlZFJlc291cmNlc1xuXG4gIGZ1bmN0aW9uIHNldFN0YXRlKG5ld1N0YXRlKSB7XG4gICAgc2V0U3RhdGVfKHByZXZTdGF0ZSA9PiAoeyAuLi5wcmV2U3RhdGUsIC4uLm5ld1N0YXRlIH0pKVxuICB9XG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAocmVhZHlGb3JGZXRjaCkge1xuICAgICAgaW5pdGlhdGVCb29rRmV0Y2goKVxuICAgIH1cblxuICAgIGFzeW5jIGZ1bmN0aW9uIGluaXRpYXRlQm9va0ZldGNoKCkge1xuICAgICAgY29uc29sZS5sb2coYHVzZVNjcmlwdHVyZSAtIHJlYWR5Rm9yRmV0Y2ggdHJ1ZSwgaW5pdGlhbGl6aW5nYClcbiAgICAgIGxldCByZXNvdXJjZUxpbmsgPSByZWFkeUZvckZldGNoICYmIHJlc291cmNlTGlua19cblxuICAgICAgaWYgKCFyZXNvdXJjZUxpbmtfICYmIHJlc291cmNlXykge1xuICAgICAgICBjb25zdCByZWZfID0gcmVmIHx8IGJyYW5jaFxuXG4gICAgICAgIHJlc291cmNlTGluayA9IGdldFJlc291cmNlTGluayh7XG4gICAgICAgICAgb3duZXIsXG4gICAgICAgICAgbGFuZ3VhZ2VJZCxcbiAgICAgICAgICByZXNvdXJjZUlkOiBib29rSWQsXG4gICAgICAgICAgcmVmOiByZWZfLFxuICAgICAgICB9KVxuICAgICAgfVxuXG4gICAgICBjb25zdCBib29rUmVmID0geyAuLi5yZWZlcmVuY2UgfVxuXG4gICAgICBpZiAod2hvbGVCb29rKSB7XG4gICAgICAgIGRlbGV0ZSBib29rUmVmLmNoYXB0ZXIgLy8gcmVtb3ZlIHRoZSBjaGFwdGVyIGFuZCB2ZXJzZSBzbyB0aGUgd2hvbGUgYm9vayBpcyBmZXRjaGVkXG4gICAgICAgIGRlbGV0ZSBib29rUmVmLnZlcnNlXG4gICAgICB9XG5cbiAgICAgIGlmIChyZXNvdXJjZUxpbmsgIT09IGZldGNoUGFyYW1zPy5yZXNvdXJjZUxpbmspIHtcbiAgICAgICAgY29uc29sZS5sb2coYHVzZVNjcmlwdHVyZSAtIGZvciAke3Jlc291cmNlXz8ucHJvamVjdElkfSByZXNvdXJjZUxpbmsgaXMgbm93ICR7cmVzb3VyY2VMaW5rfSBhbmQgcmVzb3VyY2VMaW5rXz0ke3Jlc291cmNlTGlua199YClcbiAgICAgIH0gZWxzZSBpZiAoYm9va1JlZiAhPT0gZmV0Y2hQYXJhbXM/LnJlZmVyZW5jZSkge1xuICAgICAgICBjb25zb2xlLmxvZyhgdXNlU2NyaXB0dXJlIC0gYm9vayBjaGFuZ2VkIHRvICR7cmVzb3VyY2VfPy5wcm9qZWN0SWR9IHJlc291cmNlTGluayBpcyBub3cgJHtyZXNvdXJjZUxpbmt9YClcbiAgICAgIH1cblxuICAgICAgY29uc3QgbmV3RmV0Y2hQYXJhbXMgPSB7XG4gICAgICAgIHJlc291cmNlTGluayxcbiAgICAgICAgcmVmZXJlbmNlOiBib29rUmVmLFxuICAgICAgICBjb25maWcsXG4gICAgICB9XG5cbiAgICAgIGlmICghaXNFcXVhbChuZXdGZXRjaFBhcmFtcywgZmV0Y2hQYXJhbXMpKSB7XG4gICAgICAgIHNldFN0YXRlKHtcbiAgICAgICAgICBmZXRjaFBhcmFtczogbmV3RmV0Y2hQYXJhbXMsXG4gICAgICAgICAgZmV0Y2hlZDogZmFsc2UsXG4gICAgICAgICAgaW5pdGlhbGl6ZWQ6IHRydWUsXG4gICAgICAgIH0pXG5cbiAgICAgICAgZmV0Y2hCb29rKG5ld0ZldGNoUGFyYW1zKVxuICAgICAgfVxuICAgIH1cbiAgfSwgW1xuICAgIHJlYWR5Rm9yRmV0Y2gsXG4gICAgb3duZXIsXG4gICAgbGFuZ3VhZ2VJZCxcbiAgICBib29rSWQsXG4gICAgYnJhbmNoLFxuICAgIHJlZixcbiAgXSlcblxuICAvKipcbiAgICogZG8gYSBmZXRjaCBvZiBtYW5pZmVzdCBhbmQgYm9vayBvZiB0aGUgYmlibGUgc3BlY2lmaWVkIGluIGZldGNoUGFyYW1zXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBmZXRjaFBhcmFtc1xuICAgKiBAcGFyYW0ge3N0cmluZ30gaWdub3JlU2hhIC0gb3B0aW9uYWwgcHJldmlvdXMgc2hhIC0gaWdub3JlIHJlc3BvbnNlcyB0aGF0IGNhbWUgYmFjayBmb3IgdGhpcyBwcmV2aW91cyBib29rIGNvbW1pdFxuICAgKi9cbiAgYXN5bmMgZnVuY3Rpb24gZmV0Y2hCb29rKGZldGNoUGFyYW1zLCBpZ25vcmVTaGEgPSBudWxsKSB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IF9mZXRjaENvdW50ID0gZmV0Y2hDb3VudCArIDFcbiAgICAgIGNvbnNvbGUubG9nKGB1c2VTY3JpcHR1cmUgLSBGRVRDSElORyBiaWJsZSAke3Jlc291cmNlXz8ucHJvamVjdElkfSByZXNvdXJjZUxpbmsgaXMgbm93ICR7ZmV0Y2hQYXJhbXM/LnJlc291cmNlTGlua30gYW5kIHJlc291cmNlTGlua189JHtmZXRjaFBhcmFtcz8ucmVzb3VyY2VMaW5rX31gLCBmZXRjaFBhcmFtcylcbiAgICAgIHNldFN0YXRlKHtcbiAgICAgICAgcmVzb3VyY2VTdGF0ZTogeyBsb2FkaW5nUmVzb3VyY2U6IHRydWUgfSxcbiAgICAgICAgZmV0Y2hDb3VudDogX2ZldGNoQ291bnQsXG4gICAgICAgIGZldGNoZWQ6IGZhbHNlLFxuICAgICAgICBpZ25vcmVTaGEsXG4gICAgICB9KVxuXG4gICAgICAvLyBmZXRjaCBtYW5pZmVzdCBkYXRhXG4gICAgICBhd2FpdCBkZWxheSgxMDApXG4gICAgICBjb25zdCBfcmVzb3VyY2UgPSBhd2FpdCBjb3JlLnJlc291cmNlRnJvbVJlc291cmNlTGluayhmZXRjaFBhcmFtcylcblxuICAgICAgaWYgKCFfcmVzb3VyY2U/Lm1hbmlmZXN0IHx8ICFfcmVzb3VyY2U/LnByb2plY3Q/LmZpbGUpIHtcbiAgICAgICAgY29uc3QgZXJyb3JNc2cgPSBfcmVzb3VyY2U/Lm1hbmlmZXN0ID8gJ3BhcnNpbmcgcmVzb3VyY2UgbWFuaWZlc3QnIDogJ2xvYWRpbmcgcmVzb3VyY2UgbWFuaWZlc3QnXG4gICAgICAgIGNvbnNvbGUud2FybihgdXNlU2NyaXB0dXJlIC0gZXJyb3IgJHtlcnJvck1zZ31gLCBmZXRjaFBhcmFtcyApXG4gICAgICAgIHNldFN0YXRlKHtcbiAgICAgICAgICByZXNvdXJjZVN0YXRlOiB7XG4gICAgICAgICAgICBsb2FkaW5nUmVzb3VyY2U6IGZhbHNlLFxuICAgICAgICAgICAgcmVzb3VyY2U6IF9yZXNvdXJjZSxcbiAgICAgICAgICB9LFxuICAgICAgICB9KVxuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgY29uc29sZS5sb2coYHVzZVNjcmlwdHVyZSAtIExPQURFRCBiaWJsZSBtYW5pZmVzdCwgZmV0Y2hpbmcgYm9vayAke3Jlc291cmNlXz8ucHJvamVjdElkfSByZXNvdXJjZUxpbmsgaXMgbm93ICR7ZmV0Y2hQYXJhbXM/LnJlc291cmNlTGlua30gYW5kIHJlc291cmNlTGlua189JHtmZXRjaFBhcmFtcz8ucmVzb3VyY2VMaW5rX31gLCBmZXRjaFBhcmFtcylcbiAgICAgIGF3YWl0IGRlbGF5KDEwMClcbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgX3Jlc291cmNlPy5wcm9qZWN0Py5maWxlKClcbiAgICAgIC8vIHBhcnNlIGJvb2sgdXNmbVxuICAgICAgY29uc3QgYmlibGVVc2ZtID0gcmVzcG9uc2UgJiYgY29yZS5nZXRSZXNwb25zZURhdGEocmVzcG9uc2UpXG4gICAgICBhd2FpdCBkZWxheSgxMDApXG4gICAgICBjb25zdCBib29rT2JqZWN0cyA9IGJpYmxlVXNmbSAmJiB1c2ZtanMudG9KU09OKGJpYmxlVXNmbSkgLy8gY29udmVydCB0byBiaWJsZSBvYmplY3RzXG5cbiAgICAgIGlmICghYm9va09iamVjdHMpIHtcbiAgICAgICAgY29uc3QgZXJyb3JNc2cgPSBiaWJsZVVzZm0gPyAnZmV0Y2hpbmcgYm9vayBvZiB0aGUgYmlibGUnIDogJ3BhcnNpbmcgYm9vayBvZiB0aGUgYmlibGUnXG4gICAgICAgIGNvbnNvbGUud2FybihgdXNlU2NyaXB0dXJlIC0gZXJyb3IgJHtlcnJvck1zZ31gLCBmZXRjaFBhcmFtcyApXG4gICAgICAgIHNldFN0YXRlKHtcbiAgICAgICAgICByZXNvdXJjZVN0YXRlOiB7XG4gICAgICAgICAgICBsb2FkaW5nUmVzb3VyY2U6IGZhbHNlLFxuICAgICAgICAgICAgcmVzb3VyY2U6IF9yZXNvdXJjZSxcbiAgICAgICAgICB9LFxuICAgICAgICB9KVxuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgY29uc3QgeyBuYW1lLCBzaGEsIHVybCB9ID0gcmVzcG9uc2U/LmRhdGEgfHwge31cblxuICAgICAgY29uc29sZS5sb2coYHVzZVNjcmlwdHVyZSAtIExPQURFRCBiaWJsZSBib29rICR7cmVzb3VyY2VfPy5wcm9qZWN0SWR9IHJlc291cmNlTGluayBpcyBub3cgJHtmZXRjaFBhcmFtcz8ucmVzb3VyY2VMaW5rfSBhbmQgcmVzb3VyY2VMaW5rXz0ke2ZldGNoUGFyYW1zPy5yZXNvdXJjZUxpbmtffWAsIGZldGNoUGFyYW1zKVxuICAgICAgc2V0U3RhdGUoXG4gICAgICAgIHtcbiAgICAgICAgICByZXNvdXJjZVN0YXRlOiB7XG4gICAgICAgICAgICBsb2FkaW5nUmVzb3VyY2U6IGZhbHNlLFxuICAgICAgICAgICAgZmV0Y2hlZFJlc291cmNlczoge1xuICAgICAgICAgICAgICAuLi5fcmVzb3VyY2UsXG4gICAgICAgICAgICAgIGJpYmxlVXNmbSxcbiAgICAgICAgICAgICAgYm9va09iamVjdHMsXG4gICAgICAgICAgICAgIGZldGNoQ291bnQ6IF9mZXRjaENvdW50LFxuICAgICAgICAgICAgICBuYW1lLFxuICAgICAgICAgICAgICBzaGEsXG4gICAgICAgICAgICAgIHVybCxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgIClcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBjb25zb2xlLmVycm9yKGB1c2VTY3JpcHR1cmUgLSBoYXJkIGVycm9yIGxvYWRpbmcgcmVzb3VyY2VgLCBmZXRjaFBhcmFtcywgZSApXG4gICAgfVxuICB9XG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBjb25zb2xlLmxvZyhgdXNlU2NyaXB0dXJlIC0gZm9yICR7cmVzb3VyY2VfPy5wcm9qZWN0SWR9IHJlYWR5Rm9yRmV0Y2ggaXMgbm93ICR7cmVhZHlGb3JGZXRjaH1gKVxuICB9LCBbcmVhZHlGb3JGZXRjaF0pXG5cbiAgLyoqXG4gICAqIG1ha2Ugc3VyZSBsYXN0IGZldGNoIHJlc3BvbnNlIGlzIGZvciBjdXJyZW50IGJvb2svYnJhbmNoXG4gICAqL1xuICBmdW5jdGlvbiB2YWxpZGF0ZVJlc3BvbnNlKCkge1xuICAgIGxldCBpc1NhbWVCb29rID0gZmFsc2VcbiAgICAvLyBAdHMtaWdub3JlXG4gICAgY29uc3QgZXhwZWN0ZWRCb29rSWQgPSBib29rSWQgfHwgJ3p6eidcbiAgICBjb25zdCBmZXRjaGVkQm9vayA9IGdldEJvb2tOYW1lRnJvbVVzZm1GaWxlTmFtZShmZXRjaGVkUmVzb3VyY2VzPy5uYW1lKVxuICAgIGNvbnNvbGUubG9nKGB1c2VTY3JpcHR1cmUudmFsaWRhdGVSZXNwb25zZSgpIC0gQ3VycmVudCBib29rSWQgaXMgJHtib29rSWR9IGFuZCBzZWVpbmcgJHtmZXRjaGVkQm9va30gaW4gVVNGTWApXG4gICAgaXNTYW1lQm9vayA9IGZldGNoZWRCb29rPy50b0xvd2VyQ2FzZSgpPy5pbmNsdWRlcyhib29rSWQpXG5cbiAgICBjb25zdCBzaGEgPSBmZXRjaGVkUmVzb3VyY2VzPy5zaGEgfHwgbnVsbFxuICAgIGNvbnN0IHVybCA9IGZldGNoZWRSZXNvdXJjZXM/LnVybCB8fCBudWxsXG5cbiAgICBpZiAoaXNTYW1lQm9vaykgeyAvLyBhbHNvIG1ha2Ugc3VyZSBpdCBpcyB0aGUgc2FtZSBicmFuY2hcbiAgICAgIGNvbnN0IGZldGNoZWRCcmFuY2ggPSBnZXRCcmFuY2hOYW1lKHVybClcbiAgICAgIGNvbnN0IGZldGNoaW5nQnJhbmNoID0gZ2V0QnJhbmNoTmFtZShmZXRjaFBhcmFtcz8ucmVzb3VyY2VMaW5rKVxuXG4gICAgICBpZiAoZmV0Y2hlZEJyYW5jaCAhPT0gZmV0Y2hpbmdCcmFuY2gpIHtcbiAgICAgICAgY29uc29sZS5sb2coYHVzZVNjcmlwdHVyZS52YWxpZGF0ZVJlc3BvbnNlKCkgaW52YWxpZCBicmFuY2gsIGV4cGVjdGVkIGJyYW5jaCBpcyAke2ZldGNoaW5nQnJhbmNofSwgYnV0IGZldGNoZWRCcmFuY2ggaXMgJHtmZXRjaGVkQnJhbmNofWAsIHsgc2hhLCB1cmwgfSlcbiAgICAgICAgaXNTYW1lQm9vayA9IGZhbHNlXG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnNvbGUubG9nKGB1c2VTY3JpcHR1cmUudmFsaWRhdGVSZXNwb25zZSgpIC0gIGludmFsaWQgYm9vaywgZXhwZWN0ZWRCb29rSWQgaXMgJHtleHBlY3RlZEJvb2tJZH0sIGJ1dCByZWNlaXZlZCBib29rIG5hbWUgJHtmZXRjaGVkQm9va31gLCB7IHNoYSwgdXJsIH0pXG4gICAgfVxuXG4gICAgaWYgKGlnbm9yZVNoYSA9PT0gc2hhKSB7XG4gICAgICBjb25zb2xlLmxvZyhgdXNlU2NyaXB0dXJlLnZhbGlkYXRlUmVzcG9uc2UoKSAtIHRoZSBzaGEgaXMgdGhlIHNhbWUgYXMgdGhlIGlnbm9yZSBzaGEgJHtzaGF9YCwgeyBzaGEsIHVybCB9KVxuICAgICAgaXNTYW1lQm9vayA9IGZhbHNlXG4gICAgfVxuXG4gICAgaWYgKGlzU2FtZUJvb2spIHtcbiAgICAgIGNvbnN0IGJpYmxlVXNmbV8gPSBmZXRjaGVkUmVzb3VyY2VzPy5iaWJsZVVzZm1cbiAgICAgIGNvbnN0IGJvb2tPYmplY3RzID0gZmV0Y2hlZFJlc291cmNlcz8uYm9va09iamVjdHNcbiAgICAgIGNvbnN0IHZlcnNlc0ZvclJlZiA9IGZldGNoVmVyc2VzRm9yUmVmKGJvb2tPYmplY3RzKVxuXG4gICAgICBjb25zb2xlLmxvZyhgdXNlU2NyaXB0dXJlLnZhbGlkYXRlUmVzcG9uc2UoKSAtIGNvcnJlY3QgYm9vaywgZXhwZWN0ZWRCb29rSWQgaXMgJHtleHBlY3RlZEJvb2tJZH1gLCB7IHNoYSwgdXJsIH0pXG4gICAgICBjb25zdCBuZXdTdGF0ZSA9IHtcbiAgICAgICAgYmlibGVVc2ZtOiBiaWJsZVVzZm1fLFxuICAgICAgICBib29rT2JqZWN0cyxcbiAgICAgICAgZmV0Y2hlZDogdHJ1ZSxcbiAgICAgICAgZmV0Y2hlZEJvb2s6IGV4cGVjdGVkQm9va0lkLFxuICAgICAgICBpZ25vcmVTaGE6IG51bGwsXG4gICAgICAgIHJlc291cmNlU3RhdGU6IHtcbiAgICAgICAgICBib29rT2JqZWN0cyxcbiAgICAgICAgICBiaWJsZVVzZm06IGJpYmxlVXNmbV8sXG4gICAgICAgICAgbG9hZGluZ1Jlc291cmNlOiBmYWxzZSxcbiAgICAgICAgICBsb2FkaW5nQ29udGVudDogZmFsc2UsXG4gICAgICAgICAgcmVzb3VyY2U6IGZldGNoZWRSZXNvdXJjZXMsXG4gICAgICAgICAgc2hhLFxuICAgICAgICAgIHVybCxcbiAgICAgICAgfSxcbiAgICAgICAgdmVyc2VzRm9yUmVmLFxuICAgICAgfVxuXG4gICAgICBzZXRTdGF0ZShuZXdTdGF0ZSlcbiAgICB9XG4gIH1cblxuICB1c2VEZWVwQ29tcGFyZUVmZmVjdCgoKSA9PiB7IC8vIHZhbGlkYXRlIHJlc3BvbnNlIHRvIG1ha2Ugc3VyZSBmcm9tIGxhdGVzdCByZXF1ZXN0XG4gICAgaWYgKHJlYWR5Rm9yRmV0Y2ggJiYgZmV0Y2hlZFJlc291cmNlcykge1xuICAgICAgaWYgKCFmZXRjaGVkICYmIGZldGNoZWRSZXNvdXJjZXM/LmZldGNoQ291bnQgPT09IGZldGNoQ291bnQpIHtcbiAgICAgICAgZGVsYXkoNTAwKS50aGVuKCgpID0+IHtcbiAgICAgICAgICB2YWxpZGF0ZVJlc3BvbnNlKClcbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICB9XG4gIH0sIFt7IHJlYWR5Rm9yRmV0Y2gsIGZldGNoZWRSZXNvdXJjZXMgfV0pXG5cbiAgY29uc3QgcmVzb3VyY2UgPSByZXNvdXJjZVN0YXRlPy5yZXNvdXJjZVxuICBjb25zdCB7IHRpdGxlLCB2ZXJzaW9uIH0gPSBwYXJzZVJlc291cmNlTWFuaWZlc3QocmVzb3VyY2UpXG4gIGNvbnN0IGxvYWRpbmcgPSByZXNvdXJjZVN0YXRlPy5sb2FkaW5nUmVzb3VyY2UgfHwgcmVzb3VyY2VTdGF0ZT8ubG9hZGluZ0NvbnRlbnQgfHwgIXJlYWR5Rm9yRmV0Y2hcbiAgY29uc3QgY29udGVudE5vdEZvdW5kRXJyb3IgPSAhcmVzb3VyY2VTdGF0ZT8uYmlibGVVc2ZtXG4gIGNvbnN0IHNjcmlwdHVyZU5vdExvYWRlZEVycm9yID0gIXJlc291cmNlU3RhdGU/LmJvb2tPYmplY3RzXG4gIGNvbnN0IG1hbmlmZXN0Tm90Rm91bmRFcnJvciA9ICFyZXNvdXJjZT8ubWFuaWZlc3RcbiAgY29uc3QgaW52YWxpZE1hbmlmZXN0RXJyb3IgPSAhdGl0bGUgfHwgIXZlcnNpb24gfHwgIWxhbmd1YWdlSWRcbiAgY29uc3QgZXJyb3IgPSByZWFkeUZvckZldGNoICYmIGluaXRpYWxpemVkICYmICFsb2FkaW5nICYmXG4gICAgKGNvbnRlbnROb3RGb3VuZEVycm9yIHx8IHNjcmlwdHVyZU5vdExvYWRlZEVycm9yIHx8IG1hbmlmZXN0Tm90Rm91bmRFcnJvciB8fCBpbnZhbGlkTWFuaWZlc3RFcnJvcilcbiAgY29uc3QgcmVzb3VyY2VTdGF0dXMgPSB7XG4gICAgW0xPQURJTkdfU1RBVEVdOiBsb2FkaW5nLFxuICAgIFtDT05URU5UX05PVF9GT1VORF9FUlJPUl06IGNvbnRlbnROb3RGb3VuZEVycm9yLFxuICAgIFtTQ1JJUFRVUkVfTk9UX0xPQURFRF9FUlJPUl06IHNjcmlwdHVyZU5vdExvYWRlZEVycm9yLFxuICAgIFtNQU5JRkVTVF9OT1RfTE9BREVEX0VSUk9SXTogbWFuaWZlc3ROb3RGb3VuZEVycm9yLFxuICAgIFtJTlZBTElEX01BTklGRVNUX0VSUk9SXTogaW52YWxpZE1hbmlmZXN0RXJyb3IsXG4gICAgW0VSUk9SX1NUQVRFXTogZXJyb3IsXG4gICAgW0lOSVRJQUxJWkVEX1NUQVRFXTogaW5pdGlhbGl6ZWQsXG4gIH1cblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmICghcmVhZHlGb3JGZXRjaCkge1xuICAgICAgaWYgKGluaXRpYWxpemVkKSB7XG4gICAgICAgIHNldFN0YXRlKHsgaW50aWFsaXplZDogZmFsc2UgfSlcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKCFpbml0aWFsaXplZCkge1xuICAgICAgaWYgKGxvYWRpbmcpIHsgLy8gb25jZSBmaXJzdCBsb2FkIGhhcyBiZWd1biwgd2UgYXJlIGluaXRpYWxpemVkXG4gICAgICAgIHNldFN0YXRlKHsgaW50aWFsaXplZDogdHJ1ZSB9KVxuICAgICAgfVxuICAgIH1cbiAgfSwgW2xvYWRpbmcsIHJlYWR5Rm9yRmV0Y2hdKVxuXG4gIC8qKlxuICAgKiBnZXQgdmVyc2VzIGZvciByZWZcbiAgICogQHBhcmFtIHtzdHJpbmd9IHJlZlN0clxuICAgKiBAcGFyYW0ge29iamVjdH0gY29udGVudF9cbiAgICovXG4gIGZ1bmN0aW9uIF9nZXRWZXJzZXNGb3JSZWYocmVmU3RyLCBjb250ZW50XyA9IGJvb2tPYmplY3RzKSB7XG4gICAgaWYgKGNvbnRlbnRfKSB7XG4gICAgICByZXR1cm4gZ2V0VmVyc2VzRm9yUmVmU3RyKHJlZlN0ciwgY29udGVudF8sIGxhbmd1YWdlSWQpXG4gICAgfVxuICAgIHJldHVybiBudWxsXG4gIH1cblxuICAvKipcbiAgICogdXBkYXRlIHZlcnNlIGRhdGEgZm9yIGN1cnJlbnQgYm9va1xuICAgKiBAcGFyYW0ge3N0cmluZ30gY2hhcHRlclxuICAgKiBAcGFyYW0ge3N0cmluZ30gdmVyc2VcbiAgICogQHBhcmFtIHtvYmplY3R9IHZlcnNlRGF0YVxuICAgKi9cbiAgZnVuY3Rpb24gdXBkYXRlVmVyc2UoY2hhcHRlciwgdmVyc2UsIHZlcnNlRGF0YSkge1xuICAgIGlmIChib29rT2JqZWN0cykge1xuICAgICAgY29uc3QgYm9va09iamVjdHNfID0geyAuLi5ib29rT2JqZWN0cyB9IC8vIHNoYWxsb3cgY29weVxuXG4gICAgICBpZiAoYm9va09iamVjdHNfPy5jaGFwdGVycykge1xuICAgICAgICBib29rT2JqZWN0c18uY2hhcHRlcnMgPSB7IC4uLmJvb2tPYmplY3RzXy5jaGFwdGVycyB9IC8vIHNoYWxsb3cgY29weSBjaGFwdGVyc1xuXG4gICAgICAgIGlmIChib29rT2JqZWN0c18uY2hhcHRlcnNbY2hhcHRlcl0pIHtcbiAgICAgICAgICBib29rT2JqZWN0c18uY2hhcHRlcnNbY2hhcHRlcl0gPSB7IC4uLmJvb2tPYmplY3RzXy5jaGFwdGVyc1tjaGFwdGVyXSB9IC8vIHNoYWxsb3cgY29weSB2ZXJzZXNcbiAgICAgICAgICBib29rT2JqZWN0c18uY2hhcHRlcnNbY2hhcHRlcl1bdmVyc2VdID0gdmVyc2VEYXRhXG4gICAgICAgICAgc2V0U3RhdGUoeyBib29rT2JqZWN0czogYm9va09iamVjdHNfIH0pXG4gICAgICAgICAgcmV0dXJuIGJvb2tPYmplY3RzX1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBudWxsXG4gIH1cblxuICAvKipcbiAgICogZ2V0IHRoZSB2ZXJzZXMgZm9yIGN1cnJlbnQgcmVmZXJlbmNlIG9yIHJlZmVyZW5jZSByYW5nZVxuICAgKiBAcGFyYW0ge29iamVjdH0gX2Jvb2tPYmplY3RzXG4gICAqL1xuICBmdW5jdGlvbiBmZXRjaFZlcnNlc0ZvclJlZihfYm9va09iamVjdHMgPSBib29rT2JqZWN0cykge1xuICAgIGxldCBuZXdWZXJzZXNGb3JSZWYgPSBbXVxuXG4gICAgaWYgKF9ib29rT2JqZWN0cykge1xuICAgICAgbmV3VmVyc2VzRm9yUmVmID0gZ2V0VmVyc2VzRm9yUmVmKHJlZmVyZW5jZSwgX2Jvb2tPYmplY3RzLCBsYW5ndWFnZUlkKVxuICAgICAgcmV0dXJuIG5ld1ZlcnNlc0ZvclJlZlxuICAgIH1cblxuICAgIHJldHVybiBudWxsXG4gIH1cblxuICAvKipcbiAgICogZm9yY2UgcmVsb2FkIG9mIGN1cnJlbnQgcmVzb3VyY2VcbiAgICogQHBhcmFtIHtzdHJpbmd8dW5kZWZpbmVkfSBpZ25vcmVTaGEgLSBvcHRpb25hbCBzaGEgdG8gaWdub3JlXG4gICAqL1xuICBmdW5jdGlvbiByZWxvYWRSZXNvdXJjZShpZ25vcmVTaGEgPSBudWxsKSB7XG4gICAgZmV0Y2hCb29rKGZldGNoUGFyYW1zLCBpZ25vcmVTaGEpXG4gIH1cblxuICAvLyBAdHMtaWdub3JlXG4gIGNvbnN0IGN1cnJlbnRCb29rUmVmID0gZmV0Y2hQYXJhbXM/LnJlZmVyZW5jZT8ucHJvamVjdElkXG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoY3VycmVudEJvb2tSZWYpIHtcbiAgICAgIGNvbnNvbGUubG9nKGB1c2VTY3JpcHR1cmUgZmV0Y2hlZCBib29rIGNoYW5nZWQgdG8gJHtjdXJyZW50Qm9va1JlZn0sICR7cmVzb3VyY2VMaW5rX31gLCBmZXRjaFBhcmFtcyApXG4gICAgICBzZXRTdGF0ZSh7IGJvb2tPYmplY3RzOiBudWxsLCBiaWJsZVVzZm06IG51bGwgfSlcbiAgICB9XG4gICAgLy8gQHRzLWlnbm9yZVxuICB9LCBbY3VycmVudEJvb2tSZWZdKVxuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgY29uc29sZS5sb2coYHVzZVNjcmlwdHVyZSBib29rIHJlZiBjaGFuZ2VkIHRvICR7Ym9va0lkfSwgJHtyZXNvdXJjZUxpbmtffWApXG4gICAgLy8gQHRzLWlnbm9yZVxuICB9LCBbYm9va0lkXSlcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGNvbnN0IGV4cGVjdGVkQm9va0lkID0gYm9va0lkIHx8ICcnXG4gICAgY29uc3QgZmV0Y2hlZEJvb2tTYW1lID0gZmV0Y2hlZEJvb2sgJiYgKGZldGNoZWRCb29rID09PSBleHBlY3RlZEJvb2tJZClcbiAgICBsZXQgX3ZlcnNlc0ZvclJlZiA9IFtdXG5cbiAgICBpZiAoIWZldGNoZWRCb29rU2FtZSkge1xuICAgICAgLy8gaWYgKGV4cGVjdGVkQm9va0lkICYmIGZldGNoZWRCb29rKSB7XG4gICAgICAvLyAgIGNvbnNvbGUubG9nKGB1c2VTY3JpcHR1cmUgZXhwZWN0ZWQgYm9vayAke2V4cGVjdGVkQm9va0lkfSBidXQgZmV0Y2hlZCBib29rIHdhcyAke2ZldGNoZWRCb29rfSAtIGNsZWFyaW5nYClcbiAgICAgIC8vIH1cbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgX2Jvb2tPYmplY3RzID0gZmV0Y2hlZEJvb2tTYW1lID8gYm9va09iamVjdHMgOiBudWxsXG4gICAgICBfdmVyc2VzRm9yUmVmID0gZmV0Y2hWZXJzZXNGb3JSZWYoX2Jvb2tPYmplY3RzKVxuICAgICAgLy8gY29uc29sZS5sb2coYHVzZVNjcmlwdHVyZSBfYm9va09iamVjdHMgaXMgJHshIV9ib29rT2JqZWN0c30gYW5kIGJvb2tzIGFyZSB0aGUgc2FtZSAke2ZldGNoZWRCb29rfWAsIHsgY29udGVudCwgZmV0Y2hQYXJhbXMgfSlcbiAgICB9XG5cbiAgICBpZiAoIWlzRXF1YWwoX3ZlcnNlc0ZvclJlZiwgdmVyc2VzRm9yUmVmKSkge1xuICAgICAgc2V0U3RhdGUoeyB2ZXJzZXNGb3JSZWY6IF92ZXJzZXNGb3JSZWYgfSlcbiAgICB9XG4gIH0sIFtyZWZlcmVuY2VdKVxuXG4gIHJldHVybiB7XG4gICAgYmlibGVVc2ZtLFxuICAgIGJvb2tPYmplY3RzLFxuICAgIGdldFZlcnNlc0ZvclJlZjogX2dldFZlcnNlc0ZvclJlZixcbiAgICByZWZlcmVuY2U6IGZldGNoUGFyYW1zPy5yZWZlcmVuY2UsXG4gICAgcmVsb2FkUmVzb3VyY2UsXG4gICAgcmVzb3VyY2VMaW5rOiBmZXRjaFBhcmFtcz8ucmVzb3VyY2VMaW5rLFxuICAgIHJlc291cmNlU3RhdGUsIC8vIHN0YXRlIGluZm9ybWF0aW9uIGZvciBsYXRlc3QgZmV0Y2hlZCByZXNvdXJjZVxuICAgIHJlc291cmNlU3RhdHVzLCAvLyBzdGF0dXMgZmxhZ3MgZm9yIGZldGNoZWQgcmVzb3VyY2VcbiAgICB0aXRsZSxcbiAgICB1cGRhdGVWZXJzZSxcbiAgICB2ZXJzaW9uLFxuICAgIHZlcnNlc0ZvclJlZixcbiAgfVxufVxuIl19
|
|
669
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9ob29rcy91c2VTY3JpcHR1cmUudHN4Il0sIm5hbWVzIjpbInVzZUVmZmVjdCIsInVzZVN0YXRlIiwiY29yZSIsInVzZm1qcyIsIkNPTlRFTlRfTk9UX0ZPVU5EX0VSUk9SIiwiRVJST1JfU1RBVEUiLCJJTklUSUFMSVpFRF9TVEFURSIsIklOVkFMSURfTUFOSUZFU1RfRVJST1IiLCJMT0FESU5HX1NUQVRFIiwiTUFOSUZFU1RfTk9UX0xPQURFRF9FUlJPUiIsIlNDUklQVFVSRV9OT1RfTE9BREVEX0VSUk9SIiwidXNlRGVlcENvbXBhcmVFZmZlY3QiLCJnZXRWZXJzZXMiLCJpc0VxdWFsIiwiZGVsYXkiLCJjbGVhbnVwVmVyc2VPYmplY3RzIiwiZ2V0Qm9va05hbWVGcm9tVXNmbUZpbGVOYW1lIiwiZ2V0UmVzb3VyY2VMaW5rIiwicGFyc2VSZXNvdXJjZUxpbmsiLCJTZXJ2ZXJDb25maWciLCJTY3JpcHR1cmVSZXNvdXJjZSIsIlNjcmlwdHVyZVJlZmVyZW5jZSIsInBhcnNlUmVzb3VyY2VNYW5pZmVzdCIsImdldEJyYW5jaE5hbWUiLCJyZXNvdXJjZUxpbmsiLCJicmFuY2giLCJwYXJ0cyIsInNwbGl0IiwibGVuZ3RoIiwiX3BhcnRzIiwiZ2V0VmVyc2VzRm9yUmVmU3RyIiwicmVmU3RyIiwiYm9va09iamVjdHMiLCJsYW5ndWFnZUlkIiwidmVyc2VzIiwiY2hhcHRlcnMiLCJtYXAiLCJ2ZXJzZSIsInZlcnNlRGF0YSIsInZlcnNlT2JqZWN0cyIsInZlcnNlT2JqZWN0c18iLCJvY2N1cnJlbmNlSW5qZWN0VmVyc2VPYmplY3RzIiwiZ2V0VmVyc2VzRm9yUmVmIiwicmVmZXJlbmNlIiwiY2hhcHRlciIsInVzZVNjcmlwdHVyZSIsImNvbmZpZyIsInJlYWR5Rm9yRmV0Y2giLCJyZXNvdXJjZV8iLCJyZXNvdXJjZSIsInJlc291cmNlTGlua18iLCJ3aG9sZUJvb2siLCJiaWJsZVVzZm0iLCJmZXRjaENvdW50IiwiZmV0Y2hlZCIsImZldGNoZWRCb29rIiwiZmV0Y2hQYXJhbXMiLCJpZ25vcmVTaGEiLCJpbml0aWFsaXplZCIsInJlc291cmNlU3RhdGUiLCJjb250ZW50IiwiZmV0Y2hSZXNwb25zZSIsImZldGNoZWRSZXNvdXJjZXMiLCJsb2FkaW5nUmVzb3VyY2UiLCJsb2FkaW5nQ29udGVudCIsInNoYSIsInVybCIsInZlcnNlc0ZvclJlZiIsInN0YXRlIiwic2V0U3RhdGVfIiwib3duZXIiLCJyZWYiLCJib29rSWQiLCJwcm9qZWN0SWQiLCJzZXRTdGF0ZSIsIm5ld1N0YXRlIiwicHJldlN0YXRlIiwiaW5pdGlhdGVCb29rRmV0Y2giLCJjb25zb2xlIiwibG9nIiwicmVmXyIsInJlc291cmNlSWQiLCJib29rUmVmIiwibmV3RmV0Y2hQYXJhbXMiLCJmZXRjaEJvb2siLCJmZXRjaExpbmsiLCJzaGFUb0JlSWdub3JlZCIsIl9mZXRjaENvdW50IiwicmVzb3VyY2VGcm9tUmVzb3VyY2VMaW5rIiwiX3Jlc291cmNlIiwibWFuaWZlc3QiLCJwcm9qZWN0IiwiZmlsZSIsImVycm9yTXNnIiwid2FybiIsInJlc3BvbnNlIiwiZ2V0UmVzcG9uc2VEYXRhIiwidG9KU09OIiwiZGF0YSIsIm5hbWUiLCJlcnJvciIsInZhbGlkYXRlUmVzcG9uc2UiLCJpc1NhbWVCb29rIiwiZXhwZWN0ZWRCb29rSWQiLCJ0b0xvd2VyQ2FzZSIsImluY2x1ZGVzIiwiZmV0Y2hlZEJyYW5jaCIsImZldGNoaW5nQnJhbmNoIiwiYmlibGVVc2ZtXyIsImZldGNoVmVyc2VzRm9yUmVmIiwidGhlbiIsInRpdGxlIiwidmVyc2lvbiIsImxvYWRpbmciLCJjb250ZW50Tm90Rm91bmRFcnJvciIsInNjcmlwdHVyZU5vdExvYWRlZEVycm9yIiwibWFuaWZlc3ROb3RGb3VuZEVycm9yIiwiaW52YWxpZE1hbmlmZXN0RXJyb3IiLCJyZXNvdXJjZVN0YXR1cyIsImludGlhbGl6ZWQiLCJfZ2V0VmVyc2VzRm9yUmVmIiwiY29udGVudF8iLCJ1cGRhdGVWZXJzZSIsImJvb2tPYmplY3RzXyIsIl9ib29rT2JqZWN0cyIsIm5ld1ZlcnNlc0ZvclJlZiIsInJlbG9hZFJlc291cmNlIiwiX2ZldGNoUGFyYW1zIiwiX3JlZiIsIl9yZXNvdXJjZUxpbmsiLCJjdXJyZW50Qm9va1JlZiIsImZldGNoZWRCb29rU2FtZSIsIl92ZXJzZXNGb3JSZWYiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUNBLFNBQ0VBLFNBREYsRUFFRUMsUUFGRixRQUdPLE9BSFA7QUFJQSxTQUFTQyxJQUFULFFBQXFCLHlCQUFyQjtBQUNBLE9BQU9DLE1BQVAsTUFBbUIsU0FBbkI7QUFDQSxTQUNFQyx1QkFERixFQUVFQyxXQUZGLEVBR0VDLGlCQUhGLEVBSUVDLHNCQUpGLEVBS0VDLGFBTEYsRUFNRUMseUJBTkYsRUFPRUMsMEJBUEYsUUFRTyx1QkFSUDtBQVNBLE9BQU9DLG9CQUFQLE1BQWlDLHlCQUFqQztBQUNBLFNBQVNDLFNBQVQsUUFBMEIsdUJBQTFCO0FBQ0EsT0FBTyxLQUFLQyxPQUFaLE1BQXlCLFlBQXpCO0FBQ0EsU0FBU0MsS0FBVCxRQUFzQixVQUF0QjtBQUNBLFNBQ0VDLG1CQURGLEVBRUVDLDJCQUZGLEVBR0VDLGVBSEYsRUFJRUMsaUJBSkYsUUFLTyw0QkFMUDtBQU1BLFNBQ0VDLFlBREYsRUFFRUMsaUJBRkYsRUFHRUMsa0JBSEYsUUFJTyxVQUpQO0FBS0EsU0FBU0MscUJBQVQsUUFBc0MseUJBQXRDOztBQWlCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVNDLGFBQVQsQ0FBdUJDLFlBQXZCLEVBQTZDO0FBQzNDLE1BQUlDLE1BQU0sR0FBRyxJQUFiO0FBQ0FELEVBQUFBLFlBQVksR0FBR0EsWUFBWSxJQUFJLEVBQS9CO0FBQ0EsTUFBTUUsS0FBSyxHQUFHRixZQUFZLENBQUNHLEtBQWIsQ0FBbUIsT0FBbkIsQ0FBZDs7QUFFQSxNQUFJRCxLQUFLLENBQUNFLE1BQU4sR0FBZSxDQUFuQixFQUFzQjtBQUFFO0FBQ3RCSCxJQUFBQSxNQUFNLEdBQUdD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QXNCLENBQ3BCO0FBQ0E7QUFDQTtBQUNELEtBSkQsTUFJTztBQUNMLFVBQU1QLFlBQVksR0FBR08sZUFBZSxHQUFHbkcsV0FBSCxHQUFpQixJQUFyRDs7QUFDQW9HLE1BQUFBLGFBQWEsR0FBR3ZCLGlCQUFpQixDQUFDZSxZQUFELENBQWpDLENBRkssQ0FHTDtBQUNEOztBQUVELFFBQUksQ0FBQy9HLE9BQU8sQ0FBQ3VILGFBQUQsRUFBZ0JqRSxZQUFoQixDQUFaLEVBQTJDO0FBQ3pDTyxNQUFBQSxRQUFRLENBQUM7QUFBRVAsUUFBQUEsWUFBWSxFQUFFaUU7QUFBaEIsT0FBRCxDQUFSO0FBQ0Q7QUFDRixHQWxCUSxFQWtCTixDQUFDekYsU0FBRCxDQWxCTSxDQUFUO0FBb0JBLFNBQU87QUFDTFMsSUFBQUEsU0FBUyxFQUFUQSxTQURLO0FBRUxwQixJQUFBQSxXQUFXLEVBQVhBLFdBRks7QUFHTFUsSUFBQUEsZUFBZSxFQUFFOEUsZ0JBSFo7QUFJTDdFLElBQUFBLFNBQVMsRUFBRWEsV0FBRixhQUFFQSxXQUFGLHVCQUFFQSxXQUFXLENBQUViLFNBSm5CO0FBS0xtRixJQUFBQSxjQUFjLEVBQWRBLGNBTEs7QUFNTHRHLElBQUFBLFlBQVksRUFBRWdDLFdBQUYsYUFBRUEsV0FBRix1QkFBRUEsV0FBVyxDQUFFaEMsWUFOdEI7QUFPTG1DLElBQUFBLGFBQWEsRUFBYkEsYUFQSztBQU9VO0FBQ2YyRCxJQUFBQSxjQUFjLEVBQWRBLGNBUks7QUFRVztBQUNoQlAsSUFBQUEsS0FBSyxFQUFMQSxLQVRLO0FBVUxXLElBQUFBLFdBQVcsRUFBWEEsV0FWSztBQVdMVixJQUFBQSxPQUFPLEVBQVBBLE9BWEs7QUFZTDdDLElBQUFBLFlBQVksRUFBWkE7QUFaSyxHQUFQO0FBY0QiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBAdHMtaWdub3JlXG5pbXBvcnQge1xuICB1c2VFZmZlY3QsXG4gIHVzZVN0YXRlLFxufSBmcm9tICdyZWFjdCdcbmltcG9ydCB7IGNvcmUgfSBmcm9tICdzY3JpcHR1cmUtcmVzb3VyY2VzLXJjbCdcbmltcG9ydCB1c2ZtanMgZnJvbSAndXNmbS1qcydcbmltcG9ydCB7XG4gIENPTlRFTlRfTk9UX0ZPVU5EX0VSUk9SLFxuICBFUlJPUl9TVEFURSxcbiAgSU5JVElBTElaRURfU1RBVEUsXG4gIElOVkFMSURfTUFOSUZFU1RfRVJST1IsXG4gIExPQURJTkdfU1RBVEUsXG4gIE1BTklGRVNUX05PVF9MT0FERURfRVJST1IsXG4gIFNDUklQVFVSRV9OT1RfTE9BREVEX0VSUk9SLFxufSBmcm9tICd0cmFuc2xhdGlvbi1oZWxwcy1yY2wnXG5pbXBvcnQgdXNlRGVlcENvbXBhcmVFZmZlY3QgZnJvbSAndXNlLWRlZXAtY29tcGFyZS1lZmZlY3QnXG5pbXBvcnQgeyBnZXRWZXJzZXMgfSBmcm9tICdiaWJsZS1yZWZlcmVuY2UtcmFuZ2UnXG5pbXBvcnQgKiBhcyBpc0VxdWFsIGZyb20gJ2RlZXAtZXF1YWwnXG5pbXBvcnQgeyBkZWxheSB9IGZyb20gJy4uL3V0aWxzJ1xuaW1wb3J0IHtcbiAgY2xlYW51cFZlcnNlT2JqZWN0cyxcbiAgZ2V0Qm9va05hbWVGcm9tVXNmbUZpbGVOYW1lLFxuICBnZXRSZXNvdXJjZUxpbmssXG4gIHBhcnNlUmVzb3VyY2VMaW5rLFxufSBmcm9tICcuLi91dGlscy9TY3JpcHR1cmVTZXR0aW5ncydcbmltcG9ydCB7XG4gIFNlcnZlckNvbmZpZyxcbiAgU2NyaXB0dXJlUmVzb3VyY2UsXG4gIFNjcmlwdHVyZVJlZmVyZW5jZSxcbn0gZnJvbSAnLi4vdHlwZXMnXG5pbXBvcnQgeyBwYXJzZVJlc291cmNlTWFuaWZlc3QgfSBmcm9tICcuL3BhcnNlUmVzb3VyY2VNYW5pZmVzdCdcblxuaW50ZXJmYWNlIFByb3BzIHtcbiAgLyoqIHJlZmVyZW5jZSBmb3Igc2NyaXB0dXJlICoqL1xuICByZWZlcmVuY2U6IFNjcmlwdHVyZVJlZmVyZW5jZTtcbiAgLyoqIHdoZXJlIHRvIGdldCBkYXRhICoqL1xuICBjb25maWc6IFNlcnZlckNvbmZpZztcbiAgLyoqIG9wdGlvbmFsIGRpcmVjdCBwYXRoIHRvIGJpYmxlIHJlc291cmNlLCBpbiBmb3JtYXQgJHtvd25lcn0vJHtsYW5ndWFnZUlkfS8ke3Byb2plY3RJZH0vJHticmFuY2h9ICoqL1xuICByZXNvdXJjZUxpbms6IHN0cmluZ3x1bmRlZmluZWQ7XG4gIC8qKiBvcHRpb25hbCByZXNvdXJjZSBvYmplY3QgdG8gdXNlIHRvIGJ1aWxkIHJlc291cmNlTGluayAqKi9cbiAgcmVzb3VyY2U6IFNjcmlwdHVyZVJlc291cmNlfHVuZGVmaW5lZDtcbiAgLyoqIGlmIHRydWUgdGhlbiBmZXRjaCB0aGUgZW50aXJlIGJvb2sgKi9cbiAgd2hvbGVCb29rOiBib29sZWFuO1xuICAvKiogaWYgdHJ1ZSB0aGVuIHNldHRpbmdzIGFyZSByZWFkeSBmb3IgZmV0Y2hpbmcgZGF0YSAqL1xuICByZWFkeUZvckZldGNoOiBib29sZWFuO1xufVxuXG4vKipcbiAqIGV4dHJhY3QgYnJhbmNoIGZyb20gcmVzb3VyY2UgbGlua1xuICogQHBhcmFtIHJlc291cmNlTGlua1xuICovXG5mdW5jdGlvbiBnZXRCcmFuY2hOYW1lKHJlc291cmNlTGluazogc3RyaW5nKSB7XG4gIGxldCBicmFuY2ggPSBudWxsXG4gIHJlc291cmNlTGluayA9IHJlc291cmNlTGluayB8fCAnJ1xuICBjb25zdCBwYXJ0cyA9IHJlc291cmNlTGluay5zcGxpdCgnP3JlZj0nKVxuXG4gIGlmIChwYXJ0cy5sZW5ndGggPiAxKSB7IC8vIGlmIHJlZiBwYXJhbWV0ZXIgZm91bmQsIGdldCBicmFuY2ggbmFtZSBhZnRlclxuICAgIGJyYW5jaCA9IHBhcnRzPy5bMV1cbiAgfSBlbHNlIHsgLy8gZmFsbCBiYWNrIHRvIHVzaW5nIHVzZVJzcmMgZm9ybWF0IHN1Y2ggYXMgXCJ1bmZvbGRpbmdXb3JkL2VuL3VzdC9tYXN0ZXJcIlxuICAgIGNvbnN0IF9wYXJ0cyA9IHJlc291cmNlTGluay5zcGxpdCgnLycpXG4gICAgYnJhbmNoID0gX3BhcnRzPy5bM11cbiAgfVxuICByZXR1cm4gYnJhbmNoXG59XG5cbi8qKlxuICogZ2V0IHRoZSB2ZXJzZSBvYmplY3RzIGZvciB0aGUgcmVmZXJlbmNlIHN0cmluZ1xuICogQHBhcmFtIHtzdHJpbmd9IHJlZlN0ciAtIGluIGZvcm1hdCA8Y2hhcHRlcj46PHZlcnNlPlxuICogQHBhcmFtIHtvYmplY3R9IGJvb2tPYmplY3RzIC0gcGFyc2VkIHVzZm0gZm9yIGJvb2tcbiAqIEBwYXJhbSB7c3RyaW5nfSBsYW5ndWFnZUlkXG4gKiBAcmV0dXJuIHthcnJheXxudWxsfSAtIG9mIHZlcnNlT2JqZWN0c1xuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0VmVyc2VzRm9yUmVmU3RyKHJlZlN0ciwgYm9va09iamVjdHMsIGxhbmd1YWdlSWQpIHtcbiAgaWYgKGJvb2tPYmplY3RzKSB7XG4gICAgbGV0IHZlcnNlcyA9IGdldFZlcnNlcyhib29rT2JqZWN0cy5jaGFwdGVycywgcmVmU3RyKVxuXG4gICAgaWYgKGxhbmd1YWdlSWQgPT09ICdlbC14LWtvaW5lJyB8fCBsYW5ndWFnZUlkID09PSAnaGJvJykge1xuICAgICAgdmVyc2VzID0gdmVyc2VzLm1hcCh2ZXJzZSA9PiB7XG4gICAgICAgIGlmICggdmVyc2U/LnZlcnNlRGF0YT8udmVyc2VPYmplY3RzKSB7XG4gICAgICAgICAgbGV0IHZlcnNlT2JqZWN0c18gPSBjb3JlLm9jY3VycmVuY2VJbmplY3RWZXJzZU9iamVjdHMoIHZlcnNlLnZlcnNlRGF0YS52ZXJzZU9iamVjdHMpXG4gICAgICAgICAgdmVyc2VPYmplY3RzXyA9IGNsZWFudXBWZXJzZU9iamVjdHModmVyc2VPYmplY3RzXylcbiAgICAgICAgICB2ZXJzZS52ZXJzZURhdGEudmVyc2VPYmplY3RzID0gdmVyc2VPYmplY3RzX1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB2ZXJzZVxuICAgICAgfSlcbiAgICB9XG5cbiAgICByZXR1cm4gdmVyc2VzXG4gIH1cbiAgcmV0dXJuIG51bGxcbn1cblxuLyoqXG4gKiBnZXQgdGhlIHZlcnNlIG9iamVjdHMgZm9yIHRoZSByZWZlcmVuY2Ugb2JqZWN0XG4gKiBAcGFyYW0ge29iamVjdH0gcmVmZXJlbmNlXG4gKiBAcGFyYW0ge29iamVjdH0gYm9va09iamVjdHMgLSBwYXJzZWQgdXNmbSBmb3IgYm9va1xuICogQHBhcmFtIHtzdHJpbmd9IGxhbmd1YWdlSWRcbiAqIEByZXR1cm4ge2FycmF5fG51bGx9IC0gb2YgdmVyc2VPYmplY3RzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRWZXJzZXNGb3JSZWYocmVmZXJlbmNlLCBib29rT2JqZWN0cywgbGFuZ3VhZ2VJZCkge1xuICBjb25zdCByZWZTdHIgPSBgJHtyZWZlcmVuY2UuY2hhcHRlcn06JHtyZWZlcmVuY2UudmVyc2V9YFxuICByZXR1cm4gZ2V0VmVyc2VzRm9yUmVmU3RyKHJlZlN0ciwgYm9va09iamVjdHMsIGxhbmd1YWdlSWQpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiB1c2VTY3JpcHR1cmUoeyAvLyBob29rIGZvciBmZXRjaGluZyBzY3JpcHR1cmVcbiAgY29uZmlnLFxuICByZWFkeUZvckZldGNoLFxuICByZWZlcmVuY2UsXG4gIHJlc291cmNlOiByZXNvdXJjZV8sXG4gIHJlc291cmNlTGluazogcmVzb3VyY2VMaW5rXyxcbiAgd2hvbGVCb29rID0gZmFsc2UsXG59IDogUHJvcHMpIHtcbiAgY29uc3QgW3N0YXRlLCBzZXRTdGF0ZV9dID0gdXNlU3RhdGUoe1xuICAgIGJpYmxlVXNmbTogbnVsbCxcbiAgICBib29rT2JqZWN0czogbnVsbCxcbiAgICBmZXRjaENvdW50OiAwLFxuICAgIGZldGNoZWQ6IGZhbHNlLFxuICAgIGZldGNoZWRCb29rOiAnJyxcbiAgICBmZXRjaFBhcmFtczoge1xuICAgICAgY29uZmlnOiB7fSxcbiAgICAgIHJlZmVyZW5jZToge30sXG4gICAgICByZXNvdXJjZUxpbms6ICcnLFxuICAgIH0sXG4gICAgaWdub3JlU2hhOiBudWxsLFxuICAgIGluaXRpYWxpemVkOiBmYWxzZSxcbiAgICByZXNvdXJjZVN0YXRlOiB7XG4gICAgICBib29rT2JqZWN0czogbnVsbCxcbiAgICAgIGJpYmxlVXNmbTogbnVsbCxcbiAgICAgIGNvbnRlbnQ6IG51bGwsXG4gICAgICBmZXRjaFJlc3BvbnNlOiBudWxsLFxuICAgICAgZmV0Y2hlZFJlc291cmNlczogbnVsbCxcbiAgICAgIGxvYWRpbmdSZXNvdXJjZTogZmFsc2UsXG4gICAgICBsb2FkaW5nQ29udGVudDogZmFsc2UsXG4gICAgICByZXNvdXJjZTogbnVsbCxcbiAgICAgIHNoYTogbnVsbCxcbiAgICAgIHVybDogbnVsbCxcbiAgICB9LFxuICAgIHZlcnNlc0ZvclJlZjogW10sXG4gIH0pXG5cbiAgY29uc3Qge1xuICAgIG93bmVyLFxuICAgIGxhbmd1YWdlSWQsXG4gICAgYnJhbmNoID0gJ21hc3RlcicsXG4gICAgcmVmID0gbnVsbCxcbiAgfSA9IHJlc291cmNlXyB8fCB7fVxuXG4gIGNvbnN0IHsgcHJvamVjdElkOiBib29rSWR9ID0gcmVmZXJlbmNlIHx8IHt9XG5cbiAgY29uc3Qge1xuICAgIGJpYmxlVXNmbSxcbiAgICBib29rT2JqZWN0cyxcbiAgICBmZXRjaENvdW50LFxuICAgIGZldGNoZWQsXG4gICAgZmV0Y2hlZEJvb2ssXG4gICAgZmV0Y2hQYXJhbXMsXG4gICAgaWdub3JlU2hhLFxuICAgIGluaXRpYWxpemVkLFxuICAgIHJlc291cmNlU3RhdGUsXG4gICAgdmVyc2VzRm9yUmVmLFxuICB9ID0gc3RhdGVcbiAgY29uc3QgZmV0Y2hlZFJlc291cmNlcyA9IHJlc291cmNlU3RhdGU/LmZldGNoZWRSZXNvdXJjZXNcblxuICBmdW5jdGlvbiBzZXRTdGF0ZShuZXdTdGF0ZSkge1xuICAgIHNldFN0YXRlXyhwcmV2U3RhdGUgPT4gKHsgLi4ucHJldlN0YXRlLCAuLi5uZXdTdGF0ZSB9KSlcbiAgfVxuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKHJlYWR5Rm9yRmV0Y2gpIHtcbiAgICAgIGluaXRpYXRlQm9va0ZldGNoKClcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpbml0aWF0ZUJvb2tGZXRjaCgpIHtcbiAgICAgIGNvbnNvbGUubG9nKGB1c2VTY3JpcHR1cmUgLSByZWFkeUZvckZldGNoIHRydWUsIGluaXRpYWxpemluZ2ApXG4gICAgICBsZXQgcmVzb3VyY2VMaW5rID0gcmVhZHlGb3JGZXRjaCAmJiByZXNvdXJjZUxpbmtfXG5cbiAgICAgIGlmICghcmVzb3VyY2VMaW5rXyAmJiByZXNvdXJjZV8pIHtcbiAgICAgICAgY29uc3QgcmVmXyA9IHJlZiB8fCBicmFuY2hcblxuICAgICAgICByZXNvdXJjZUxpbmsgPSBnZXRSZXNvdXJjZUxpbmsoe1xuICAgICAgICAgIG93bmVyLFxuICAgICAgICAgIGxhbmd1YWdlSWQsXG4gICAgICAgICAgcmVzb3VyY2VJZDogYm9va0lkLFxuICAgICAgICAgIHJlZjogcmVmXyxcbiAgICAgICAgfSlcbiAgICAgIH1cblxuICAgICAgY29uc3QgYm9va1JlZiA9IHsgLi4ucmVmZXJlbmNlIH1cblxuICAgICAgaWYgKHdob2xlQm9vaykge1xuICAgICAgICBkZWxldGUgYm9va1JlZi5jaGFwdGVyIC8vIHJlbW92ZSB0aGUgY2hhcHRlciBhbmQgdmVyc2Ugc28gdGhlIHdob2xlIGJvb2sgaXMgZmV0Y2hlZFxuICAgICAgICBkZWxldGUgYm9va1JlZi52ZXJzZVxuICAgICAgfVxuXG4gICAgICBpZiAocmVzb3VyY2VMaW5rICE9PSBmZXRjaFBhcmFtcz8ucmVzb3VyY2VMaW5rKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKGB1c2VTY3JpcHR1cmUgLSBmb3IgJHtyZXNvdXJjZV8/LnByb2plY3RJZH0gcmVzb3VyY2VMaW5rIGlzIG5vdyAke3Jlc291cmNlTGlua30gYW5kIHJlc291cmNlTGlua189JHtyZXNvdXJjZUxpbmtffWApXG4gICAgICB9IGVsc2UgaWYgKGJvb2tSZWYgIT09IGZldGNoUGFyYW1zPy5yZWZlcmVuY2UpIHtcbiAgICAgICAgY29uc29sZS5sb2coYHVzZVNjcmlwdHVyZSAtIGJvb2sgY2hhbmdlZCB0byAke3Jlc291cmNlXz8ucHJvamVjdElkfSByZXNvdXJjZUxpbmsgaXMgbm93ICR7cmVzb3VyY2VMaW5rfWApXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IG5ld0ZldGNoUGFyYW1zID0ge1xuICAgICAgICBjb25maWcsXG4gICAgICAgIHJlZmVyZW5jZTogYm9va1JlZixcbiAgICAgICAgcmVzb3VyY2VMaW5rLFxuICAgICAgfVxuXG4gICAgICBpZiAoIWlzRXF1YWwobmV3RmV0Y2hQYXJhbXMsIGZldGNoUGFyYW1zKSkge1xuICAgICAgICBzZXRTdGF0ZSh7XG4gICAgICAgICAgZmV0Y2hQYXJhbXM6IG5ld0ZldGNoUGFyYW1zLFxuICAgICAgICAgIGZldGNoZWQ6IGZhbHNlLFxuICAgICAgICAgIGluaXRpYWxpemVkOiB0cnVlLFxuICAgICAgICB9KVxuXG4gICAgICAgIGZldGNoQm9vayhuZXdGZXRjaFBhcmFtcylcbiAgICAgIH1cbiAgICB9XG4gIH0sIFtcbiAgICByZWFkeUZvckZldGNoLFxuICAgIG93bmVyLFxuICAgIGxhbmd1YWdlSWQsXG4gICAgYm9va0lkLFxuICAgIGJyYW5jaCxcbiAgICByZWYsXG4gIF0pXG5cbiAgLyoqXG4gICAqIGRvIGEgZmV0Y2ggb2YgbWFuaWZlc3QgYW5kIGJvb2sgb2YgdGhlIGJpYmxlIHNwZWNpZmllZCBpbiBmZXRjaFBhcmFtc1xuICAgKiBAcGFyYW0ge29iamVjdH0gZmV0Y2hQYXJhbXNcbiAgICogQHBhcmFtIHtzdHJpbmd9IGlnbm9yZVNoYSAtIG9wdGlvbmFsIHByZXZpb3VzIHNoYSAtIGlnbm9yZSByZXNwb25zZXMgdGhhdCBjYW1lIGJhY2sgZm9yIHRoaXMgcHJldmlvdXMgYm9vayBjb21taXRcbiAgICovXG4gIGFzeW5jIGZ1bmN0aW9uIGZldGNoQm9vayhmZXRjaFBhcmFtcywgaWdub3JlU2hhID0gbnVsbCkge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBmZXRjaExpbmsgPSBgJHtmZXRjaFBhcmFtcz8ucmVzb3VyY2VMaW5rfS8ke2ZldGNoUGFyYW1zPy5yZWZlcmVuY2U/LnByb2plY3RJZH1gXG4gICAgICBjb25zdCBzaGFUb0JlSWdub3JlZCA9IGlnbm9yZVNoYSAmJiBpZ25vcmVTaGEgPT09IHJlc291cmNlU3RhdGU/LnNoYSAvLyB3ZSB3aWxsIHJlbG9hZCBpZiBpZ25vcmVTaGEgZ2l2ZW4gYW5kIGl0IG1hdGNoZXMgY3VycmVudCBzaGFcblxuICAgICAgaWYgKChmZXRjaExpbmsgPT09IHJlc291cmNlU3RhdGU/LnJlc291cmNlPy5yZXNvdXJjZUxpbmspICYmICFzaGFUb0JlSWdub3JlZCkgeyAvLyBzZWUgaWYgd2UgYWxyZWFkeSBmZXRjaGVkIHRoaXNcbiAgICAgICAgY29uc29sZS5sb2coYHVzZVNjcmlwdHVyZS5mZXRjaEJvb2soKSAtIEFscmVhZHkgZmV0Y2hpbmcgcmVzb3VyY2VMaW5rICR7cmVzb3VyY2VTdGF0ZT8ucmVzb3VyY2U/LnJlc291cmNlTGlua30gYW5kIGlnbm9yZVNoYT0ke2lnbm9yZVNoYX1gLCBmZXRjaFBhcmFtcylcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IF9mZXRjaENvdW50ID0gZmV0Y2hDb3VudCArIDFcbiAgICAgIGNvbnNvbGUubG9nKGB1c2VTY3JpcHR1cmUuZmV0Y2hCb29rKCkgLSBGRVRDSElORyBiaWJsZSAke3Jlc291cmNlXz8ucHJvamVjdElkfSByZXNvdXJjZUxpbmsgaXMgbm93ICR7ZmV0Y2hQYXJhbXM/LnJlc291cmNlTGlua30gYW5kIGlnbm9yZVNoYT0ke2lnbm9yZVNoYX1gLCBmZXRjaFBhcmFtcylcbiAgICAgIHNldFN0YXRlKHtcbiAgICAgICAgZmV0Y2hDb3VudDogX2ZldGNoQ291bnQsXG4gICAgICAgIGZldGNoZWQ6IGZhbHNlLFxuICAgICAgICBpZ25vcmVTaGEsXG4gICAgICAgIHJlc291cmNlU3RhdGU6IHsgbG9hZGluZ1Jlc291cmNlOiB0cnVlIH0sXG4gICAgICB9KVxuXG4gICAgICAvLyBmZXRjaCBtYW5pZmVzdCBkYXRhXG4gICAgICBhd2FpdCBkZWxheSgxMDApXG4gICAgICBjb25zdCBfcmVzb3VyY2UgPSBhd2FpdCBjb3JlLnJlc291cmNlRnJvbVJlc291cmNlTGluayhmZXRjaFBhcmFtcylcblxuICAgICAgaWYgKCFfcmVzb3VyY2U/Lm1hbmlmZXN0IHx8ICFfcmVzb3VyY2U/LnByb2plY3Q/LmZpbGUpIHtcbiAgICAgICAgY29uc3QgZXJyb3JNc2cgPSBfcmVzb3VyY2U/Lm1hbmlmZXN0ID8gJ3BhcnNpbmcgcmVzb3VyY2UgbWFuaWZlc3QnIDogJ2xvYWRpbmcgcmVzb3VyY2UgbWFuaWZlc3QnXG4gICAgICAgIGNvbnNvbGUud2FybihgdXNlU2NyaXB0dXJlLmZldGNoQm9vaygpIC0gZXJyb3IgJHtlcnJvck1zZ31gLCBmZXRjaFBhcmFtcyApXG4gICAgICAgIHNldFN0YXRlKHtcbiAgICAgICAgICByZXNvdXJjZVN0YXRlOiB7XG4gICAgICAgICAgICBsb2FkaW5nUmVzb3VyY2U6IGZhbHNlLFxuICAgICAgICAgICAgcmVzb3VyY2U6IF9yZXNvdXJjZSxcbiAgICAgICAgICB9LFxuICAgICAgICB9KVxuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgY29uc29sZS5sb2coYHVzZVNjcmlwdHVyZS5mZXRjaEJvb2soKSAtIExPQURFRCBiaWJsZSBtYW5pZmVzdCwgZmV0Y2hpbmcgYm9vayAke3Jlc291cmNlXz8ucHJvamVjdElkfSByZXNvdXJjZUxpbmsgaXMgbm93ICR7ZmV0Y2hQYXJhbXM/LnJlc291cmNlTGlua30gYW5kIHJlc291cmNlTGlua189JHtmZXRjaFBhcmFtcz8ucmVzb3VyY2VMaW5rX31gLCBmZXRjaFBhcmFtcylcbiAgICAgIGF3YWl0IGRlbGF5KDEwMClcbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgX3Jlc291cmNlPy5wcm9qZWN0Py5maWxlKClcbiAgICAgIC8vIHBhcnNlIGJvb2sgdXNmbVxuICAgICAgY29uc3QgYmlibGVVc2ZtID0gcmVzcG9uc2UgJiYgY29yZS5nZXRSZXNwb25zZURhdGEocmVzcG9uc2UpXG4gICAgICBhd2FpdCBkZWxheSgxMDApXG4gICAgICBjb25zdCBib29rT2JqZWN0cyA9IGJpYmxlVXNmbSAmJiB1c2ZtanMudG9KU09OKGJpYmxlVXNmbSkgLy8gY29udmVydCB0byBiaWJsZSBvYmplY3RzXG5cbiAgICAgIGlmICghYm9va09iamVjdHMpIHtcbiAgICAgICAgY29uc3QgZXJyb3JNc2cgPSBiaWJsZVVzZm0gPyAnZmV0Y2hpbmcgYm9vayBvZiB0aGUgYmlibGUnIDogJ3BhcnNpbmcgYm9vayBvZiB0aGUgYmlibGUnXG4gICAgICAgIGNvbnNvbGUud2FybihgdXNlU2NyaXB0dXJlLmZldGNoQm9vaygpIC0gZXJyb3IgJHtlcnJvck1zZ31gLCBmZXRjaFBhcmFtcyApXG4gICAgICAgIHNldFN0YXRlKHtcbiAgICAgICAgICByZXNvdXJjZVN0YXRlOiB7XG4gICAgICAgICAgICBsb2FkaW5nUmVzb3VyY2U6IGZhbHNlLFxuICAgICAgICAgICAgcmVzb3VyY2U6IF9yZXNvdXJjZSxcbiAgICAgICAgICB9LFxuICAgICAgICB9KVxuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgY29uc3QgeyBuYW1lLCBzaGEsIHVybCB9ID0gcmVzcG9uc2U/LmRhdGEgfHwge31cblxuICAgICAgY29uc29sZS5sb2coYHVzZVNjcmlwdHVyZS5mZXRjaEJvb2soKSAtIExPQURFRCBiaWJsZSBib29rICR7cmVzb3VyY2VfPy5wcm9qZWN0SWR9IHJlc291cmNlTGluayBpcyBub3cgJHtmZXRjaFBhcmFtcz8ucmVzb3VyY2VMaW5rfSBhbmQgcmVzb3VyY2VMaW5rXz0ke2ZldGNoUGFyYW1zPy5yZXNvdXJjZUxpbmtffWAsIGZldGNoUGFyYW1zKVxuICAgICAgc2V0U3RhdGUoXG4gICAgICAgIHtcbiAgICAgICAgICByZXNvdXJjZVN0YXRlOiB7XG4gICAgICAgICAgICBsb2FkaW5nUmVzb3VyY2U6IGZhbHNlLFxuICAgICAgICAgICAgZmV0Y2hlZFJlc291cmNlczoge1xuICAgICAgICAgICAgICAuLi5fcmVzb3VyY2UsXG4gICAgICAgICAgICAgIGJpYmxlVXNmbSxcbiAgICAgICAgICAgICAgYm9va09iamVjdHMsXG4gICAgICAgICAgICAgIGZldGNoQ291bnQ6IF9mZXRjaENvdW50LFxuICAgICAgICAgICAgICBuYW1lLFxuICAgICAgICAgICAgICByZWZlcmVuY2U6IGZldGNoUGFyYW1zPy5yZWZlcmVuY2UsXG4gICAgICAgICAgICAgIHNoYSxcbiAgICAgICAgICAgICAgdXJsLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgKVxuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoYHVzZVNjcmlwdHVyZS5mZXRjaEJvb2soKSAtIGhhcmQgZXJyb3IgbG9hZGluZyByZXNvdXJjZWAsIGZldGNoUGFyYW1zLCBlIClcbiAgICAgIHNldFN0YXRlKHtcbiAgICAgICAgcmVzb3VyY2VTdGF0ZToge1xuICAgICAgICAgIGxvYWRpbmdSZXNvdXJjZTogZmFsc2UsXG4gICAgICAgICAgcmVzb3VyY2U6IG51bGwsXG4gICAgICAgIH0sXG4gICAgICB9KVxuICAgIH1cbiAgfVxuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgY29uc29sZS5sb2coYHVzZVNjcmlwdHVyZSAtIGZvciAke3Jlc291cmNlXz8ucHJvamVjdElkfSByZWFkeUZvckZldGNoIGlzIG5vdyAke3JlYWR5Rm9yRmV0Y2h9YClcbiAgfSwgW3JlYWR5Rm9yRmV0Y2hdKVxuXG4gIC8qKlxuICAgKiBtYWtlIHN1cmUgbGFzdCBmZXRjaCByZXNwb25zZSBpcyBmb3IgY3VycmVudCBib29rL2JyYW5jaFxuICAgKi9cbiAgZnVuY3Rpb24gdmFsaWRhdGVSZXNwb25zZSgpIHtcbiAgICBsZXQgaXNTYW1lQm9vayA9IGZhbHNlXG4gICAgLy8gQHRzLWlnbm9yZVxuICAgIGNvbnN0IGV4cGVjdGVkQm9va0lkID0gYm9va0lkIHx8ICd6enonXG4gICAgY29uc3QgZmV0Y2hlZEJvb2sgPSBnZXRCb29rTmFtZUZyb21Vc2ZtRmlsZU5hbWUoZmV0Y2hlZFJlc291cmNlcz8ubmFtZSlcbiAgICBjb25zb2xlLmxvZyhgdXNlU2NyaXB0dXJlLnZhbGlkYXRlUmVzcG9uc2UoKSAtIEN1cnJlbnQgYm9va0lkIGlzICR7Ym9va0lkfSBhbmQgc2VlaW5nICR7ZmV0Y2hlZEJvb2t9IGluIFVTRk1gKVxuICAgIGlzU2FtZUJvb2sgPSBmZXRjaGVkQm9vaz8udG9Mb3dlckNhc2UoKT8uaW5jbHVkZXMoYm9va0lkKVxuXG4gICAgY29uc3Qgc2hhID0gZmV0Y2hlZFJlc291cmNlcz8uc2hhIHx8IG51bGxcbiAgICBjb25zdCB1cmwgPSBmZXRjaGVkUmVzb3VyY2VzPy51cmwgfHwgbnVsbFxuXG4gICAgaWYgKGlzU2FtZUJvb2spIHsgLy8gYWxzbyBtYWtlIHN1cmUgaXQgaXMgdGhlIHNhbWUgYnJhbmNoXG4gICAgICBjb25zdCBmZXRjaGVkQnJhbmNoID0gZ2V0QnJhbmNoTmFtZSh1cmwpXG4gICAgICBjb25zdCBmZXRjaGluZ0JyYW5jaCA9IGdldEJyYW5jaE5hbWUoZmV0Y2hQYXJhbXM/LnJlc291cmNlTGluaylcblxuICAgICAgaWYgKGZldGNoZWRCcmFuY2ggIT09IGZldGNoaW5nQnJhbmNoKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKGB1c2VTY3JpcHR1cmUudmFsaWRhdGVSZXNwb25zZSgpIGludmFsaWQgYnJhbmNoLCBleHBlY3RlZCBicmFuY2ggaXMgJHtmZXRjaGluZ0JyYW5jaH0sIGJ1dCBmZXRjaGVkQnJhbmNoIGlzICR7ZmV0Y2hlZEJyYW5jaH1gLCB7IHNoYSwgdXJsIH0pXG4gICAgICAgIGlzU2FtZUJvb2sgPSBmYWxzZVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBjb25zb2xlLmxvZyhgdXNlU2NyaXB0dXJlLnZhbGlkYXRlUmVzcG9uc2UoKSAtICBpbnZhbGlkIGJvb2ssIGV4cGVjdGVkQm9va0lkIGlzICR7ZXhwZWN0ZWRCb29rSWR9LCBidXQgcmVjZWl2ZWQgYm9vayBuYW1lICR7ZmV0Y2hlZEJvb2t9YCwgeyBzaGEsIHVybCB9KVxuICAgIH1cblxuICAgIGlmIChpZ25vcmVTaGEgPT09IHNoYSkge1xuICAgICAgY29uc29sZS5sb2coYHVzZVNjcmlwdHVyZS52YWxpZGF0ZVJlc3BvbnNlKCkgLSB0aGUgc2hhIGlzIHRoZSBzYW1lIGFzIHRoZSBpZ25vcmUgc2hhICR7c2hhfWAsIHsgc2hhLCB1cmwgfSlcbiAgICAgIGlzU2FtZUJvb2sgPSBmYWxzZVxuICAgIH1cblxuICAgIGlmIChpc1NhbWVCb29rKSB7XG4gICAgICBjb25zdCBiaWJsZVVzZm1fID0gZmV0Y2hlZFJlc291cmNlcz8uYmlibGVVc2ZtXG4gICAgICBjb25zdCBib29rT2JqZWN0cyA9IGZldGNoZWRSZXNvdXJjZXM/LmJvb2tPYmplY3RzXG4gICAgICBjb25zdCB2ZXJzZXNGb3JSZWYgPSBmZXRjaFZlcnNlc0ZvclJlZihib29rT2JqZWN0cylcblxuICAgICAgY29uc29sZS5sb2coYHVzZVNjcmlwdHVyZS52YWxpZGF0ZVJlc3BvbnNlKCkgLSBjb3JyZWN0IGJvb2ssIGV4cGVjdGVkQm9va0lkIGlzICR7ZXhwZWN0ZWRCb29rSWR9YCwgeyBzaGEsIHVybCB9KVxuICAgICAgY29uc3QgbmV3U3RhdGUgPSB7XG4gICAgICAgIGJpYmxlVXNmbTogYmlibGVVc2ZtXyxcbiAgICAgICAgYm9va09iamVjdHMsXG4gICAgICAgIGZldGNoZWQ6IHRydWUsXG4gICAgICAgIGZldGNoZWRCb29rOiBleHBlY3RlZEJvb2tJZCxcbiAgICAgICAgaWdub3JlU2hhOiBudWxsLFxuICAgICAgICByZXNvdXJjZVN0YXRlOiB7XG4gICAgICAgICAgYm9va09iamVjdHMsXG4gICAgICAgICAgYmlibGVVc2ZtOiBiaWJsZVVzZm1fLFxuICAgICAgICAgIGxvYWRpbmdSZXNvdXJjZTogZmFsc2UsXG4gICAgICAgICAgbG9hZGluZ0NvbnRlbnQ6IGZhbHNlLFxuICAgICAgICAgIHJlc291cmNlOiBmZXRjaGVkUmVzb3VyY2VzLFxuICAgICAgICAgIHNoYSxcbiAgICAgICAgICB1cmwsXG4gICAgICAgIH0sXG4gICAgICAgIHZlcnNlc0ZvclJlZixcbiAgICAgIH1cblxuICAgICAgc2V0U3RhdGUobmV3U3RhdGUpXG4gICAgfVxuICB9XG5cbiAgdXNlRGVlcENvbXBhcmVFZmZlY3QoKCkgPT4geyAvLyB2YWxpZGF0ZSByZXNwb25zZSB0byBtYWtlIHN1cmUgZnJvbSBsYXRlc3QgcmVxdWVzdFxuICAgIGlmIChyZWFkeUZvckZldGNoICYmIGZldGNoZWRSZXNvdXJjZXMpIHtcbiAgICAgIGlmICghZmV0Y2hlZCAmJiBmZXRjaGVkUmVzb3VyY2VzPy5mZXRjaENvdW50ID09PSBmZXRjaENvdW50KSB7XG4gICAgICAgIGRlbGF5KDUwMCkudGhlbigoKSA9PiB7XG4gICAgICAgICAgdmFsaWRhdGVSZXNwb25zZSgpXG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgfVxuICB9LCBbeyByZWFkeUZvckZldGNoLCBmZXRjaGVkUmVzb3VyY2VzIH1dKVxuXG4gIGNvbnN0IHJlc291cmNlID0gcmVzb3VyY2VTdGF0ZT8ucmVzb3VyY2VcbiAgY29uc3QgeyB0aXRsZSwgdmVyc2lvbiB9ID0gcGFyc2VSZXNvdXJjZU1hbmlmZXN0KHJlc291cmNlKVxuICBjb25zdCBsb2FkaW5nID0gcmVzb3VyY2VTdGF0ZT8ubG9hZGluZ1Jlc291cmNlIHx8IHJlc291cmNlU3RhdGU/LmxvYWRpbmdDb250ZW50IHx8ICFyZWFkeUZvckZldGNoXG4gIGNvbnN0IGNvbnRlbnROb3RGb3VuZEVycm9yID0gIXJlc291cmNlU3RhdGU/LmJpYmxlVXNmbVxuICBjb25zdCBzY3JpcHR1cmVOb3RMb2FkZWRFcnJvciA9ICFyZXNvdXJjZVN0YXRlPy5ib29rT2JqZWN0c1xuICBjb25zdCBtYW5pZmVzdE5vdEZvdW5kRXJyb3IgPSAhcmVzb3VyY2U/Lm1hbmlmZXN0XG4gIGNvbnN0IGludmFsaWRNYW5pZmVzdEVycm9yID0gIXRpdGxlIHx8ICF2ZXJzaW9uIHx8ICFsYW5ndWFnZUlkXG4gIGNvbnN0IGVycm9yID0gcmVhZHlGb3JGZXRjaCAmJiBpbml0aWFsaXplZCAmJiAhbG9hZGluZyAmJlxuICAgIChjb250ZW50Tm90Rm91bmRFcnJvciB8fCBzY3JpcHR1cmVOb3RMb2FkZWRFcnJvciB8fCBtYW5pZmVzdE5vdEZvdW5kRXJyb3IgfHwgaW52YWxpZE1hbmlmZXN0RXJyb3IpXG4gIGNvbnN0IHJlc291cmNlU3RhdHVzID0ge1xuICAgIFtMT0FESU5HX1NUQVRFXTogbG9hZGluZyxcbiAgICBbQ09OVEVOVF9OT1RfRk9VTkRfRVJST1JdOiBjb250ZW50Tm90Rm91bmRFcnJvcixcbiAgICBbU0NSSVBUVVJFX05PVF9MT0FERURfRVJST1JdOiBzY3JpcHR1cmVOb3RMb2FkZWRFcnJvcixcbiAgICBbTUFOSUZFU1RfTk9UX0xPQURFRF9FUlJPUl06IG1hbmlmZXN0Tm90Rm91bmRFcnJvcixcbiAgICBbSU5WQUxJRF9NQU5JRkVTVF9FUlJPUl06IGludmFsaWRNYW5pZmVzdEVycm9yLFxuICAgIFtFUlJPUl9TVEFURV06IGVycm9yLFxuICAgIFtJTklUSUFMSVpFRF9TVEFURV06IGluaXRpYWxpemVkLFxuICB9XG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoIXJlYWR5Rm9yRmV0Y2gpIHtcbiAgICAgIGlmIChpbml0aWFsaXplZCkge1xuICAgICAgICBzZXRTdGF0ZSh7IGludGlhbGl6ZWQ6IGZhbHNlIH0pXG4gICAgICB9XG4gICAgfSBlbHNlIGlmICghaW5pdGlhbGl6ZWQpIHtcbiAgICAgIGlmIChsb2FkaW5nKSB7IC8vIG9uY2UgZmlyc3QgbG9hZCBoYXMgYmVndW4sIHdlIGFyZSBpbml0aWFsaXplZFxuICAgICAgICBzZXRTdGF0ZSh7IGludGlhbGl6ZWQ6IHRydWUgfSlcbiAgICAgIH1cbiAgICB9XG4gIH0sIFtsb2FkaW5nLCByZWFkeUZvckZldGNoXSlcblxuICAvKipcbiAgICogZ2V0IHZlcnNlcyBmb3IgcmVmXG4gICAqIEBwYXJhbSB7c3RyaW5nfSByZWZTdHJcbiAgICogQHBhcmFtIHtvYmplY3R9IGNvbnRlbnRfXG4gICAqL1xuICBmdW5jdGlvbiBfZ2V0VmVyc2VzRm9yUmVmKHJlZlN0ciwgY29udGVudF8gPSBib29rT2JqZWN0cykge1xuICAgIGlmIChjb250ZW50Xykge1xuICAgICAgcmV0dXJuIGdldFZlcnNlc0ZvclJlZlN0cihyZWZTdHIsIGNvbnRlbnRfLCBsYW5ndWFnZUlkKVxuICAgIH1cbiAgICByZXR1cm4gbnVsbFxuICB9XG5cbiAgLyoqXG4gICAqIHVwZGF0ZSB2ZXJzZSBkYXRhIGZvciBjdXJyZW50IGJvb2tcbiAgICogQHBhcmFtIHtzdHJpbmd9IGNoYXB0ZXJcbiAgICogQHBhcmFtIHtzdHJpbmd9IHZlcnNlXG4gICAqIEBwYXJhbSB7b2JqZWN0fSB2ZXJzZURhdGFcbiAgICovXG4gIGZ1bmN0aW9uIHVwZGF0ZVZlcnNlKGNoYXB0ZXIsIHZlcnNlLCB2ZXJzZURhdGEpIHtcbiAgICBpZiAoYm9va09iamVjdHMpIHtcbiAgICAgIGNvbnN0IGJvb2tPYmplY3RzXyA9IHsgLi4uYm9va09iamVjdHMgfSAvLyBzaGFsbG93IGNvcHlcblxuICAgICAgaWYgKGJvb2tPYmplY3RzXz8uY2hhcHRlcnMpIHtcbiAgICAgICAgYm9va09iamVjdHNfLmNoYXB0ZXJzID0geyAuLi5ib29rT2JqZWN0c18uY2hhcHRlcnMgfSAvLyBzaGFsbG93IGNvcHkgY2hhcHRlcnNcblxuICAgICAgICBpZiAoYm9va09iamVjdHNfLmNoYXB0ZXJzW2NoYXB0ZXJdKSB7XG4gICAgICAgICAgYm9va09iamVjdHNfLmNoYXB0ZXJzW2NoYXB0ZXJdID0geyAuLi5ib29rT2JqZWN0c18uY2hhcHRlcnNbY2hhcHRlcl0gfSAvLyBzaGFsbG93IGNvcHkgdmVyc2VzXG4gICAgICAgICAgYm9va09iamVjdHNfLmNoYXB0ZXJzW2NoYXB0ZXJdW3ZlcnNlXSA9IHZlcnNlRGF0YVxuICAgICAgICAgIHNldFN0YXRlKHsgYm9va09iamVjdHM6IGJvb2tPYmplY3RzXyB9KVxuICAgICAgICAgIHJldHVybiBib29rT2JqZWN0c19cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbnVsbFxuICB9XG5cbiAgLyoqXG4gICAqIGdldCB0aGUgdmVyc2VzIGZvciBjdXJyZW50IHJlZmVyZW5jZSBvciByZWZlcmVuY2UgcmFuZ2VcbiAgICogQHBhcmFtIHtvYmplY3R9IF9ib29rT2JqZWN0c1xuICAgKi9cbiAgZnVuY3Rpb24gZmV0Y2hWZXJzZXNGb3JSZWYoX2Jvb2tPYmplY3RzID0gYm9va09iamVjdHMpIHtcbiAgICBsZXQgbmV3VmVyc2VzRm9yUmVmID0gW11cblxuICAgIGlmIChfYm9va09iamVjdHMpIHtcbiAgICAgIG5ld1ZlcnNlc0ZvclJlZiA9IGdldFZlcnNlc0ZvclJlZihyZWZlcmVuY2UsIF9ib29rT2JqZWN0cywgbGFuZ3VhZ2VJZClcbiAgICAgIHJldHVybiBuZXdWZXJzZXNGb3JSZWZcbiAgICB9XG5cbiAgICByZXR1cm4gbnVsbFxuICB9XG5cbiAgLyoqXG4gICAqIGZvcmNlIHJlbG9hZCBvZiByZXNvdXJjZVxuICAgKiBAcGFyYW0ge3N0cmluZ3x1bmRlZmluZWR9IGlnbm9yZVNoYSAtIG9wdGlvbmFsIHNoYSB0byBpZ25vcmVcbiAgICogQHBhcmFtIHtzdHJpbmd8dW5kZWZpbmVkfSByZWYgLSBvcHRpb25hbCByZWZlcmVuY2UgdG8gZmV0Y2hcbiAgICovXG4gIGZ1bmN0aW9uIHJlbG9hZFJlc291cmNlKGlnbm9yZVNoYSA9IG51bGwsIHJlZiA9IG51bGwpIHtcbiAgICBjb25zb2xlLmxvZyhgdXNlU2NyaXB0dXJlLnJlbG9hZFJlc291cmNlKCkgaWdub3JlU2hhOiAke2lnbm9yZVNoYX1gIClcbiAgICBjb25zdCBfZmV0Y2hQYXJhbXMgPSB7IC4uLmZldGNoUGFyYW1zIH1cblxuICAgIGlmIChyZWYgJiYgZmV0Y2hQYXJhbXM/LnJlc291cmNlTGluaykge1xuICAgICAgY29uc3Qge1xuICAgICAgICBvd25lcixcbiAgICAgICAgbGFuZ3VhZ2VJZCxcbiAgICAgICAgcmVzb3VyY2VJZCxcbiAgICAgICAgcmVmOiBfcmVmLFxuICAgICAgfSA9IHBhcnNlUmVzb3VyY2VMaW5rKGZldGNoUGFyYW1zLnJlc291cmNlTGluaylcblxuICAgICAgaWYgKHJlZiAhPT0gX3JlZikgeyAvLyBpZiByZWYgY2hhbmdlZCwgdXBkYXRlIHJlc291cmNlbGlua1xuICAgICAgICBjb25zdCBfcmVzb3VyY2VMaW5rID0gZ2V0UmVzb3VyY2VMaW5rKHtcbiAgICAgICAgICBvd25lcixcbiAgICAgICAgICBsYW5ndWFnZUlkLFxuICAgICAgICAgIHJlc291cmNlSWQsXG4gICAgICAgICAgcmVmLFxuICAgICAgICB9KVxuICAgICAgICBjb25zb2xlLmxvZyhgdXNlU2NyaXB0dXJlLnJlbG9hZFJlc291cmNlKCkgb2xkIHJlZiBpcyBkaWZmZXJlbnQgJHtfcmVmfSwgc3dpdGNoaW5nIHRvIGxvYWQgcmVmOiAke3JlZn0sIG5ldyByZXNvdXJjZUxpbms6ICR7X3Jlc291cmNlTGlua31gIClcbiAgICAgICAgX2ZldGNoUGFyYW1zLnJlc291cmNlTGluayA9IF9yZXNvdXJjZUxpbmtcbiAgICAgIH1cbiAgICB9XG4gICAgZmV0Y2hCb29rKF9mZXRjaFBhcmFtcywgaWdub3JlU2hhKVxuICB9XG5cbiAgLy8gQHRzLWlnbm9yZVxuICBjb25zdCBjdXJyZW50Qm9va1JlZiA9IGZldGNoUGFyYW1zPy5yZWZlcmVuY2U/LnByb2plY3RJZFxuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKGN1cnJlbnRCb29rUmVmKSB7XG4gICAgICBjb25zb2xlLmxvZyhgdXNlU2NyaXB0dXJlIGZldGNoZWQgYm9vayBjaGFuZ2VkIHRvICR7Y3VycmVudEJvb2tSZWZ9LCAke3Jlc291cmNlTGlua199YCwgZmV0Y2hQYXJhbXMgKVxuICAgICAgc2V0U3RhdGUoeyBib29rT2JqZWN0czogbnVsbCwgYmlibGVVc2ZtOiBudWxsIH0pXG4gICAgfVxuICAgIC8vIEB0cy1pZ25vcmVcbiAgfSwgW2N1cnJlbnRCb29rUmVmXSlcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGNvbnNvbGUubG9nKGB1c2VTY3JpcHR1cmUgYm9vayByZWYgY2hhbmdlZCB0byAke2Jvb2tJZH0sICR7cmVzb3VyY2VMaW5rX31gKVxuICAgIC8vIEB0cy1pZ25vcmVcbiAgfSwgW2Jvb2tJZF0pXG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBjb25zdCBleHBlY3RlZEJvb2tJZCA9IGJvb2tJZCB8fCAnJ1xuICAgIGNvbnN0IGZldGNoZWRCb29rU2FtZSA9IGZldGNoZWRCb29rICYmIChmZXRjaGVkQm9vayA9PT0gZXhwZWN0ZWRCb29rSWQpXG4gICAgbGV0IF92ZXJzZXNGb3JSZWYgPSBbXVxuXG4gICAgaWYgKCFmZXRjaGVkQm9va1NhbWUpIHtcbiAgICAgIC8vIGlmIChleHBlY3RlZEJvb2tJZCAmJiBmZXRjaGVkQm9vaykge1xuICAgICAgLy8gICBjb25zb2xlLmxvZyhgdXNlU2NyaXB0dXJlIGV4cGVjdGVkIGJvb2sgJHtleHBlY3RlZEJvb2tJZH0gYnV0IGZldGNoZWQgYm9vayB3YXMgJHtmZXRjaGVkQm9va30gLSBjbGVhcmluZ2ApXG4gICAgICAvLyB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IF9ib29rT2JqZWN0cyA9IGZldGNoZWRCb29rU2FtZSA/IGJvb2tPYmplY3RzIDogbnVsbFxuICAgICAgX3ZlcnNlc0ZvclJlZiA9IGZldGNoVmVyc2VzRm9yUmVmKF9ib29rT2JqZWN0cylcbiAgICAgIC8vIGNvbnNvbGUubG9nKGB1c2VTY3JpcHR1cmUgX2Jvb2tPYmplY3RzIGlzICR7ISFfYm9va09iamVjdHN9IGFuZCBib29rcyBhcmUgdGhlIHNhbWUgJHtmZXRjaGVkQm9va31gLCB7IGNvbnRlbnQsIGZldGNoUGFyYW1zIH0pXG4gICAgfVxuXG4gICAgaWYgKCFpc0VxdWFsKF92ZXJzZXNGb3JSZWYsIHZlcnNlc0ZvclJlZikpIHtcbiAgICAgIHNldFN0YXRlKHsgdmVyc2VzRm9yUmVmOiBfdmVyc2VzRm9yUmVmIH0pXG4gICAgfVxuICB9LCBbcmVmZXJlbmNlXSlcblxuICByZXR1cm4ge1xuICAgIGJpYmxlVXNmbSxcbiAgICBib29rT2JqZWN0cyxcbiAgICBnZXRWZXJzZXNGb3JSZWY6IF9nZXRWZXJzZXNGb3JSZWYsXG4gICAgcmVmZXJlbmNlOiBmZXRjaFBhcmFtcz8ucmVmZXJlbmNlLFxuICAgIHJlbG9hZFJlc291cmNlLFxuICAgIHJlc291cmNlTGluazogZmV0Y2hQYXJhbXM/LnJlc291cmNlTGluayxcbiAgICByZXNvdXJjZVN0YXRlLCAvLyBzdGF0ZSBpbmZvcm1hdGlvbiBmb3IgbGF0ZXN0IGZldGNoZWQgcmVzb3VyY2VcbiAgICByZXNvdXJjZVN0YXR1cywgLy8gc3RhdHVzIGZsYWdzIGZvciBmZXRjaGVkIHJlc291cmNlXG4gICAgdGl0bGUsXG4gICAgdXBkYXRlVmVyc2UsXG4gICAgdmVyc2lvbixcbiAgICB2ZXJzZXNGb3JSZWYsXG4gIH1cbn1cbiJdfQ==
|