single-scripture-rcl 3.3.3-patch.3 → 3.3.3-patch.4
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/dist/components/ScriptureCard/ScriptureCard.js +537 -377
- package/dist/components/ScripturePane/ScripturePane.js +43 -30
- package/dist/hooks/index.js +2 -2
- package/dist/hooks/useScripture.js +388 -112
- package/dist/hooks/useScriptureAlignmentEdit.js +58 -73
- package/dist/hooks/useScriptureResources.js +20 -18
- package/dist/hooks/useScriptureSelector.js +12 -12
- package/dist/hooks/useScriptureSettings.js +35 -39
- package/dist/utils/maps.js +1 -1
- package/package.json +4 -4
|
@@ -1,6 +1,11 @@
|
|
|
1
1
|
import "core-js/modules/es.array.concat.js";
|
|
2
|
+
import "core-js/modules/es.array.includes.js";
|
|
2
3
|
import "core-js/modules/es.array.is-array.js";
|
|
3
4
|
import "core-js/modules/es.array.map.js";
|
|
5
|
+
import "core-js/modules/es.function.name.js";
|
|
6
|
+
import "core-js/modules/es.regexp.exec.js";
|
|
7
|
+
import "core-js/modules/es.string.includes.js";
|
|
8
|
+
import "core-js/modules/es.string.split.js";
|
|
4
9
|
|
|
5
10
|
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }
|
|
6
11
|
|
|
@@ -21,135 +26,352 @@ function _iterableToArrayLimit(arr, i) { if (typeof Symbol === "undefined" || !(
|
|
|
21
26
|
function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
|
|
22
27
|
|
|
23
28
|
// @ts-ignore
|
|
24
|
-
import { useEffect,
|
|
29
|
+
import { useEffect, useState } from 'react';
|
|
25
30
|
import { core, useRsrc } from 'scripture-resources-rcl';
|
|
26
31
|
import { CONTENT_NOT_FOUND_ERROR, ERROR_STATE, INITIALIZED_STATE, INVALID_MANIFEST_ERROR, LOADING_STATE, MANIFEST_NOT_LOADED_ERROR, SCRIPTURE_NOT_LOADED_ERROR } from 'translation-helps-rcl';
|
|
27
32
|
import { getVerses } from 'bible-reference-range';
|
|
33
|
+
import * as isEqual from 'deep-equal';
|
|
28
34
|
import { cleanupVerseObjects, getResourceLink } from '../utils/ScriptureSettings';
|
|
29
35
|
import { ServerConfig, ScriptureResource, ScriptureReference } from '../types';
|
|
30
36
|
import { parseResourceManifest } from './parseResourceManifest';
|
|
37
|
+
|
|
38
|
+
/**
|
|
39
|
+
* extract branch from resource link
|
|
40
|
+
* @param resourceLink
|
|
41
|
+
*/
|
|
42
|
+
function getBranchName(resourceLink) {
|
|
43
|
+
var branch = null;
|
|
44
|
+
resourceLink = resourceLink || '';
|
|
45
|
+
var parts = resourceLink.split('?ref=');
|
|
46
|
+
|
|
47
|
+
if (parts.length > 1) {
|
|
48
|
+
// if ref parameter found, get branch name after
|
|
49
|
+
branch = parts === null || parts === void 0 ? void 0 : parts[1];
|
|
50
|
+
} else {
|
|
51
|
+
// fall back to using useRsrc format such as "unfoldingWord/en/ust/master"
|
|
52
|
+
var _parts = resourceLink.split('/');
|
|
53
|
+
|
|
54
|
+
branch = _parts === null || _parts === void 0 ? void 0 : _parts[3];
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
return branch;
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* get the verse objects for the reference string
|
|
61
|
+
* @param {string} refStr - in format <chapter>:<verse>
|
|
62
|
+
* @param {object} bookObjects - parsed usfm for book
|
|
63
|
+
* @param {string} languageId
|
|
64
|
+
* @return {array|null} - of verseObjects
|
|
65
|
+
*/
|
|
66
|
+
|
|
67
|
+
|
|
68
|
+
export function getVersesForRefStr(refStr, bookObjects, languageId) {
|
|
69
|
+
if (bookObjects) {
|
|
70
|
+
var verses = getVerses(bookObjects.chapters, refStr);
|
|
71
|
+
|
|
72
|
+
if (languageId === 'el-x-koine' || languageId === 'hbo') {
|
|
73
|
+
verses = verses.map(function (verse) {
|
|
74
|
+
var _verse$verseData;
|
|
75
|
+
|
|
76
|
+
if (verse !== null && verse !== void 0 && (_verse$verseData = verse.verseData) !== null && _verse$verseData !== void 0 && _verse$verseData.verseObjects) {
|
|
77
|
+
var verseObjects_ = core.occurrenceInjectVerseObjects(verse.verseData.verseObjects);
|
|
78
|
+
verseObjects_ = cleanupVerseObjects(verseObjects_);
|
|
79
|
+
verse.verseData.verseObjects = verseObjects_;
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
return verse;
|
|
83
|
+
});
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
return verses;
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
return null;
|
|
90
|
+
}
|
|
91
|
+
/**
|
|
92
|
+
* get the verse objects for the reference object
|
|
93
|
+
* @param {object} reference
|
|
94
|
+
* @param {object} bookObjects - parsed usfm for book
|
|
95
|
+
* @param {string} languageId
|
|
96
|
+
* @return {array|null} - of verseObjects
|
|
97
|
+
*/
|
|
98
|
+
|
|
99
|
+
export function getVersesForRef(reference, bookObjects, languageId) {
|
|
100
|
+
var refStr = "".concat(reference.chapter, ":").concat(reference.verse);
|
|
101
|
+
return getVersesForRefStr(refStr, bookObjects, languageId);
|
|
102
|
+
}
|
|
31
103
|
export function useScripture(_ref) {
|
|
32
|
-
var _resourceStatus;
|
|
104
|
+
var _resourceStatus, _fetchParams$referenc;
|
|
33
105
|
|
|
34
106
|
var config = _ref.config,
|
|
107
|
+
readyForFetch = _ref.readyForFetch,
|
|
35
108
|
reference = _ref.reference,
|
|
36
109
|
resource_ = _ref.resource,
|
|
37
110
|
resourceLink_ = _ref.resourceLink,
|
|
38
111
|
_ref$wholeBook = _ref.wholeBook,
|
|
39
112
|
wholeBook = _ref$wholeBook === void 0 ? false : _ref$wholeBook;
|
|
40
113
|
|
|
41
|
-
var _useState = useState(
|
|
114
|
+
var _useState = useState({
|
|
115
|
+
bookObjects: null,
|
|
116
|
+
fetchedBook: '',
|
|
117
|
+
fetchParams: {
|
|
118
|
+
resourceLink: '',
|
|
119
|
+
reference: {},
|
|
120
|
+
config: {}
|
|
121
|
+
},
|
|
122
|
+
ignoreSha: null,
|
|
123
|
+
initialized: false,
|
|
124
|
+
fetched: false,
|
|
125
|
+
resourceState: {
|
|
126
|
+
bibleJson: null,
|
|
127
|
+
matchedVerse: null,
|
|
128
|
+
resource: null,
|
|
129
|
+
content: null,
|
|
130
|
+
loadingResource: false,
|
|
131
|
+
loadingContent: false,
|
|
132
|
+
fetchResponse: null
|
|
133
|
+
},
|
|
134
|
+
versesForRef: []
|
|
135
|
+
}),
|
|
42
136
|
_useState2 = _slicedToArray(_useState, 2),
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
var
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
versesForRef =
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
owner = _ref2.owner,
|
|
61
|
-
_languageId = _ref2.languageId,
|
|
62
|
-
projectId = _ref2.projectId,
|
|
63
|
-
_ref2$branch = _ref2.branch,
|
|
64
|
-
branch = _ref2$branch === void 0 ? 'master' : _ref2$branch,
|
|
65
|
-
_ref2$ref = _ref2.ref,
|
|
66
|
-
ref = _ref2$ref === void 0 ? null : _ref2$ref;
|
|
67
|
-
|
|
68
|
-
var ref_ = ref || branch;
|
|
69
|
-
resourceLink = getResourceLink({
|
|
70
|
-
owner: owner,
|
|
71
|
-
languageId: _languageId,
|
|
72
|
-
resourceId: projectId,
|
|
73
|
-
ref: ref_
|
|
137
|
+
state = _useState2[0],
|
|
138
|
+
setState_ = _useState2[1];
|
|
139
|
+
|
|
140
|
+
var bookObjects = state.bookObjects,
|
|
141
|
+
fetchedBook = state.fetchedBook,
|
|
142
|
+
fetchParams = state.fetchParams,
|
|
143
|
+
fetched = state.fetched,
|
|
144
|
+
ignoreSha = state.ignoreSha,
|
|
145
|
+
initialized = state.initialized,
|
|
146
|
+
resourceState = state.resourceState,
|
|
147
|
+
versesForRef = state.versesForRef;
|
|
148
|
+
|
|
149
|
+
var _bookId = reference === null || reference === void 0 ? void 0 : reference.projectId;
|
|
150
|
+
|
|
151
|
+
function setState(newState) {
|
|
152
|
+
setState_(function (prevState) {
|
|
153
|
+
return _objectSpread(_objectSpread({}, prevState), newState);
|
|
74
154
|
});
|
|
75
155
|
}
|
|
76
156
|
|
|
157
|
+
useEffect(function () {
|
|
158
|
+
if (readyForFetch) {
|
|
159
|
+
console.log("useScripture - readyForFetch true, initializing");
|
|
160
|
+
var resourceLink = readyForFetch && resourceLink_;
|
|
161
|
+
|
|
162
|
+
if (!resourceLink_ && resource_) {
|
|
163
|
+
var _ref2 = resource_ || {},
|
|
164
|
+
owner = _ref2.owner,
|
|
165
|
+
_languageId = _ref2.languageId,
|
|
166
|
+
projectId = _ref2.projectId,
|
|
167
|
+
_ref2$branch = _ref2.branch,
|
|
168
|
+
branch = _ref2$branch === void 0 ? 'master' : _ref2$branch,
|
|
169
|
+
_ref2$ref = _ref2.ref,
|
|
170
|
+
ref = _ref2$ref === void 0 ? null : _ref2$ref;
|
|
171
|
+
|
|
172
|
+
var ref_ = ref || branch;
|
|
173
|
+
resourceLink = getResourceLink({
|
|
174
|
+
owner: owner,
|
|
175
|
+
languageId: _languageId,
|
|
176
|
+
resourceId: projectId,
|
|
177
|
+
ref: ref_
|
|
178
|
+
});
|
|
179
|
+
}
|
|
180
|
+
|
|
181
|
+
var bookRef = _objectSpread({}, reference);
|
|
182
|
+
|
|
183
|
+
if (wholeBook) {
|
|
184
|
+
delete bookRef.chapter; // remove the chapter and verse so the whole book is fetched
|
|
185
|
+
|
|
186
|
+
delete bookRef.verse;
|
|
187
|
+
}
|
|
188
|
+
|
|
189
|
+
if (resourceLink !== (fetchParams === null || fetchParams === void 0 ? void 0 : fetchParams.resourceLink)) {
|
|
190
|
+
console.log("useScripture - for ".concat(resource_ === null || resource_ === void 0 ? void 0 : resource_.projectId, " resourceLink is now ").concat(resourceLink, " and resourceLink_=").concat(resourceLink_));
|
|
191
|
+
} else if (bookRef !== (fetchParams === null || fetchParams === void 0 ? void 0 : fetchParams.reference)) {
|
|
192
|
+
console.log("useScripture - book changed to ".concat(resource_ === null || resource_ === void 0 ? void 0 : resource_.projectId, " resourceLink is now ").concat(resourceLink));
|
|
193
|
+
}
|
|
194
|
+
|
|
195
|
+
var newFetchParams = {
|
|
196
|
+
resourceLink: resourceLink,
|
|
197
|
+
reference: bookRef,
|
|
198
|
+
config: config
|
|
199
|
+
};
|
|
200
|
+
|
|
201
|
+
if (!isEqual(newFetchParams, fetchParams)) {
|
|
202
|
+
console.log("useScripture - FETCHING new params ".concat(resource_ === null || resource_ === void 0 ? void 0 : resource_.projectId, " resourceLink is now ").concat(resourceLink, " and resourceLink_=").concat(resourceLink_), newFetchParams);
|
|
203
|
+
setState({
|
|
204
|
+
fetchParams: newFetchParams,
|
|
205
|
+
fetched: false,
|
|
206
|
+
ignoreSha: null
|
|
207
|
+
});
|
|
208
|
+
}
|
|
209
|
+
}
|
|
210
|
+
}, [readyForFetch, _bookId, resourceLink_]);
|
|
211
|
+
useEffect(function () {
|
|
212
|
+
console.log("useScripture - for ".concat(resource_ === null || resource_ === void 0 ? void 0 : resource_.projectId, " readyForFetch is now ").concat(readyForFetch));
|
|
213
|
+
}, [readyForFetch]);
|
|
77
214
|
var options = {
|
|
78
215
|
getBibleJson: true
|
|
79
216
|
};
|
|
80
|
-
var bookRef = useMemo(function () {
|
|
81
|
-
var bookRef = _objectSpread({}, reference);
|
|
82
217
|
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
218
|
+
var _resourceResults = useRsrc({
|
|
219
|
+
config: fetchParams === null || fetchParams === void 0 ? void 0 : fetchParams.config,
|
|
220
|
+
reference: fetchParams === null || fetchParams === void 0 ? void 0 : fetchParams.reference,
|
|
221
|
+
resourceLink: fetchParams === null || fetchParams === void 0 ? void 0 : fetchParams.resourceLink,
|
|
222
|
+
options: options
|
|
223
|
+
}); // only use the results if readyToFetch
|
|
86
224
|
|
|
87
|
-
return bookRef;
|
|
88
|
-
}, [reference, wholeBook]);
|
|
89
225
|
|
|
90
|
-
var
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
226
|
+
var bibleJson = resourceState.bibleJson,
|
|
227
|
+
content = resourceState.content,
|
|
228
|
+
fetchResponse = resourceState.fetchResponse,
|
|
229
|
+
loadingResource = resourceState.loadingResource,
|
|
230
|
+
loadingContent = resourceState.loadingContent,
|
|
231
|
+
matchedVerse = resourceState.matchedVerse,
|
|
232
|
+
resource = resourceState.resource;
|
|
233
|
+
useEffect(function () {
|
|
234
|
+
// validate response to make sure from latest request
|
|
235
|
+
if (readyForFetch) {
|
|
236
|
+
var currentResourceState = _resourceResults === null || _resourceResults === void 0 ? void 0 : _resourceResults.state;
|
|
237
|
+
|
|
238
|
+
if (!fetched && !isEqual(currentResourceState, resourceState)) {
|
|
239
|
+
var _content = currentResourceState.content,
|
|
240
|
+
_fetchResponse = currentResourceState.fetchResponse,
|
|
241
|
+
_loadingContent = currentResourceState.loadingContent,
|
|
242
|
+
_loadingResource = currentResourceState.loadingResource; // console.log(`useScripture resources changed`, { content, fetchParams, fetchResponse })
|
|
243
|
+
|
|
244
|
+
if (!_loadingContent && !_loadingResource && _content && _fetchResponse) {
|
|
245
|
+
var _fetchResponse$data, _fetchResponse$data2;
|
|
246
|
+
|
|
247
|
+
var newState = {
|
|
248
|
+
resourceState: currentResourceState
|
|
249
|
+
};
|
|
250
|
+
console.log("useScripture content changed", {
|
|
251
|
+
content: _content,
|
|
252
|
+
fetchParams: fetchParams,
|
|
253
|
+
fetchResponse: _fetchResponse
|
|
254
|
+
}); // TRICKY - responses from server can come back from previous requests. So we make sure this response is for the current requested book
|
|
255
|
+
|
|
256
|
+
var sameBook = false; // @ts-ignore
|
|
257
|
+
|
|
258
|
+
var expectedBookId = _bookId || '';
|
|
259
|
+
var _fetchedBook = _content.name;
|
|
260
|
+
|
|
261
|
+
if (_fetchedBook && expectedBookId) {
|
|
262
|
+
var _fetchedBook$split = _fetchedBook.split('.'),
|
|
263
|
+
_fetchedBook$split2 = _slicedToArray(_fetchedBook$split, 2),
|
|
264
|
+
name = _fetchedBook$split2[0],
|
|
265
|
+
ext = _fetchedBook$split2[1];
|
|
266
|
+
|
|
267
|
+
if (ext.toLowerCase() === 'usfm') {
|
|
268
|
+
sameBook = name.toLowerCase().includes(expectedBookId.toLowerCase());
|
|
269
|
+
}
|
|
270
|
+
}
|
|
271
|
+
|
|
272
|
+
var sha = (_fetchResponse === null || _fetchResponse === void 0 ? void 0 : (_fetchResponse$data = _fetchResponse.data) === null || _fetchResponse$data === void 0 ? void 0 : _fetchResponse$data.sha) || null;
|
|
273
|
+
var url = (_fetchResponse === null || _fetchResponse === void 0 ? void 0 : (_fetchResponse$data2 = _fetchResponse.data) === null || _fetchResponse$data2 === void 0 ? void 0 : _fetchResponse$data2.url) || null;
|
|
274
|
+
|
|
275
|
+
if (sameBook) {
|
|
276
|
+
// also make sure it is the same branch
|
|
277
|
+
var fetchedBranch = getBranchName(url);
|
|
278
|
+
var fetchingBranch = getBranchName(fetchParams === null || fetchParams === void 0 ? void 0 : fetchParams.resourceLink);
|
|
279
|
+
|
|
280
|
+
if (fetchedBranch !== fetchingBranch) {
|
|
281
|
+
console.log("useScripture invalid branch, expected branch is ".concat(fetchingBranch, ", but fetchedBranch is ").concat(fetchedBranch), {
|
|
282
|
+
sha: sha,
|
|
283
|
+
url: url
|
|
284
|
+
});
|
|
285
|
+
sameBook = false;
|
|
286
|
+
}
|
|
287
|
+
}
|
|
288
|
+
|
|
289
|
+
if (ignoreSha === sha) {
|
|
290
|
+
console.log("useScripture - the sha is the same as the ignore sha ".concat(sha), {
|
|
291
|
+
sha: sha,
|
|
292
|
+
url: url
|
|
293
|
+
});
|
|
294
|
+
sameBook = false;
|
|
295
|
+
}
|
|
296
|
+
|
|
297
|
+
if (!sameBook) {
|
|
298
|
+
console.log("useScripture invalid book, expectedBookId is ".concat(expectedBookId, ", but received book name ").concat(_fetchedBook), {
|
|
299
|
+
sha: sha,
|
|
300
|
+
url: url
|
|
301
|
+
});
|
|
302
|
+
} else {
|
|
303
|
+
newState['bookObjects'] = _content;
|
|
304
|
+
newState['versesForRef'] = updateVersesForRef(_content);
|
|
305
|
+
newState['fetchedBook'] = expectedBookId;
|
|
306
|
+
|
|
307
|
+
if (!isEqual(newState, {
|
|
308
|
+
bookObjects: bookObjects,
|
|
309
|
+
versesForRef: versesForRef,
|
|
310
|
+
fetchedBook: expectedBookId,
|
|
311
|
+
resourceState: resourceState
|
|
312
|
+
})) {
|
|
313
|
+
console.log("useScripture correct book, expectedBookId is ".concat(expectedBookId), {
|
|
314
|
+
sha: sha,
|
|
315
|
+
url: url
|
|
316
|
+
});
|
|
317
|
+
newState['fetched'] = true;
|
|
318
|
+
newState['ignoreSha'] = null;
|
|
319
|
+
setState(newState);
|
|
320
|
+
}
|
|
321
|
+
}
|
|
322
|
+
} else {
|
|
323
|
+
if (!isEqual(currentResourceState, resourceState)) {
|
|
324
|
+
// console.log(`useScripture state changed, but no content`, currentResourceState)
|
|
325
|
+
setState({
|
|
326
|
+
resourceState: currentResourceState
|
|
327
|
+
});
|
|
328
|
+
}
|
|
329
|
+
}
|
|
330
|
+
}
|
|
331
|
+
}
|
|
332
|
+
}, [readyForFetch, _resourceResults === null || _resourceResults === void 0 ? void 0 : _resourceResults.state]);
|
|
105
333
|
|
|
106
334
|
var _parseResourceManifes = parseResourceManifest(resource),
|
|
107
335
|
title = _parseResourceManifes.title,
|
|
108
336
|
version = _parseResourceManifes.version;
|
|
109
337
|
|
|
110
|
-
var _ref3 =
|
|
111
|
-
|
|
338
|
+
var _ref3 = resource_ || {},
|
|
339
|
+
languageId = _ref3.languageId;
|
|
112
340
|
|
|
113
|
-
var
|
|
114
|
-
languageId = _ref4.languageId;
|
|
115
|
-
|
|
116
|
-
var loading = loadingResource || loadingContent;
|
|
341
|
+
var loading = loadingResource || loadingContent || !readyForFetch;
|
|
117
342
|
var contentNotFoundError = !content;
|
|
118
343
|
var scriptureNotLoadedError = !bibleJson;
|
|
119
344
|
var manifestNotFoundError = !(resource !== null && resource !== void 0 && resource.manifest);
|
|
120
345
|
var invalidManifestError = !title || !version || !languageId;
|
|
121
|
-
var error = initialized && !loading && (contentNotFoundError || scriptureNotLoadedError || manifestNotFoundError || invalidManifestError);
|
|
346
|
+
var error = readyForFetch && initialized && !loading && (contentNotFoundError || scriptureNotLoadedError || manifestNotFoundError || invalidManifestError);
|
|
122
347
|
var resourceStatus = (_resourceStatus = {}, _defineProperty(_resourceStatus, LOADING_STATE, loading), _defineProperty(_resourceStatus, CONTENT_NOT_FOUND_ERROR, contentNotFoundError), _defineProperty(_resourceStatus, SCRIPTURE_NOT_LOADED_ERROR, scriptureNotLoadedError), _defineProperty(_resourceStatus, MANIFEST_NOT_LOADED_ERROR, manifestNotFoundError), _defineProperty(_resourceStatus, INVALID_MANIFEST_ERROR, invalidManifestError), _defineProperty(_resourceStatus, ERROR_STATE, error), _defineProperty(_resourceStatus, INITIALIZED_STATE, initialized), _resourceStatus);
|
|
123
348
|
useEffect(function () {
|
|
124
|
-
if (!
|
|
349
|
+
if (!readyForFetch) {
|
|
350
|
+
if (initialized) {
|
|
351
|
+
setState({
|
|
352
|
+
intialized: false
|
|
353
|
+
});
|
|
354
|
+
}
|
|
355
|
+
} else if (!initialized) {
|
|
125
356
|
if (loading) {
|
|
126
357
|
// once first load has begun, we are initialized
|
|
127
|
-
|
|
358
|
+
setState({
|
|
359
|
+
intialized: true
|
|
360
|
+
});
|
|
128
361
|
}
|
|
129
362
|
}
|
|
130
|
-
}, [loading]);
|
|
131
|
-
|
|
132
|
-
|
|
363
|
+
}, [loading, readyForFetch]);
|
|
364
|
+
/**
|
|
365
|
+
* get verses for ref
|
|
366
|
+
* @param refStr
|
|
367
|
+
* @param content_
|
|
368
|
+
*/
|
|
369
|
+
|
|
370
|
+
function _getVersesForRef(refStr) {
|
|
133
371
|
var content_ = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : bookObjects;
|
|
134
372
|
|
|
135
373
|
if (content_) {
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
if (languageId === 'el-x-koine' || languageId === 'hbo') {
|
|
139
|
-
verses = verses.map(function (verse) {
|
|
140
|
-
var _verse$verseData;
|
|
141
|
-
|
|
142
|
-
if (verse !== null && verse !== void 0 && (_verse$verseData = verse.verseData) !== null && _verse$verseData !== void 0 && _verse$verseData.verseObjects) {
|
|
143
|
-
var verseObjects_ = core.occurrenceInjectVerseObjects(verse.verseData.verseObjects);
|
|
144
|
-
verseObjects_ = cleanupVerseObjects(verseObjects_);
|
|
145
|
-
verse.verseData.verseObjects = verseObjects_;
|
|
146
|
-
}
|
|
147
|
-
|
|
148
|
-
return verse;
|
|
149
|
-
});
|
|
150
|
-
}
|
|
151
|
-
|
|
152
|
-
return verses;
|
|
374
|
+
return getVersesForRefStr(refStr, content_, languageId);
|
|
153
375
|
}
|
|
154
376
|
|
|
155
377
|
return null;
|
|
@@ -167,7 +389,9 @@ export function useScripture(_ref) {
|
|
|
167
389
|
bookObjects_.chapters[chapter] = _objectSpread({}, bookObjects_.chapters[chapter]); // shallow copy verses
|
|
168
390
|
|
|
169
391
|
bookObjects_.chapters[chapter][verse] = verseData;
|
|
170
|
-
|
|
392
|
+
setState({
|
|
393
|
+
bookObjects: bookObjects_
|
|
394
|
+
});
|
|
171
395
|
return bookObjects_;
|
|
172
396
|
}
|
|
173
397
|
}
|
|
@@ -176,41 +400,93 @@ export function useScripture(_ref) {
|
|
|
176
400
|
return null;
|
|
177
401
|
}
|
|
178
402
|
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
var _ref5 = "".concat(reference.chapter, ":").concat(reference.verse);
|
|
403
|
+
function updateVersesForRef() {
|
|
404
|
+
var _bookObjects = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : bookObjects;
|
|
182
405
|
|
|
183
|
-
|
|
406
|
+
var newVersesForRef = [];
|
|
184
407
|
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
408
|
+
if (_bookObjects) {
|
|
409
|
+
newVersesForRef = getVersesForRef(reference, _bookObjects, languageId);
|
|
410
|
+
return newVersesForRef;
|
|
188
411
|
}
|
|
189
|
-
}, [bookObjects]);
|
|
190
|
-
useEffect(function () {
|
|
191
|
-
setBookObjects(content);
|
|
192
|
-
}, [content]);
|
|
193
412
|
|
|
194
|
-
|
|
195
|
-
verseObjects = core.occurrenceInjectVerseObjects(verseObjects);
|
|
196
|
-
verseObjects = cleanupVerseObjects(verseObjects);
|
|
413
|
+
return null;
|
|
197
414
|
}
|
|
415
|
+
/**
|
|
416
|
+
* force reload of current resource
|
|
417
|
+
* @param {string|undefined} ignoreSha - optional sha to ignore
|
|
418
|
+
*/
|
|
419
|
+
|
|
420
|
+
|
|
421
|
+
function reloadResource(ignoreSha) {
|
|
422
|
+
var _reloadResource = _resourceResults === null || _resourceResults === void 0 ? void 0 : _resourceResults.actions.reloadResource;
|
|
423
|
+
|
|
424
|
+
if (_reloadResource) {
|
|
425
|
+
var newState = {
|
|
426
|
+
fetched: false
|
|
427
|
+
};
|
|
428
|
+
|
|
429
|
+
if (ignoreSha) {
|
|
430
|
+
// TRICKY - if the response was for this sha (which was the previous sha) then we need to ignore it
|
|
431
|
+
newState['ignoreSha'] = ignoreSha;
|
|
432
|
+
}
|
|
198
433
|
|
|
434
|
+
setState(newState);
|
|
435
|
+
|
|
436
|
+
_reloadResource();
|
|
437
|
+
}
|
|
438
|
+
} // @ts-ignore
|
|
439
|
+
|
|
440
|
+
|
|
441
|
+
var currentBookRef = fetchParams === null || fetchParams === void 0 ? void 0 : (_fetchParams$referenc = fetchParams.reference) === null || _fetchParams$referenc === void 0 ? void 0 : _fetchParams$referenc.projectId;
|
|
442
|
+
useEffect(function () {
|
|
443
|
+
if (currentBookRef) {
|
|
444
|
+
console.log("useScripture fetched book changed to ".concat(currentBookRef, ", ").concat(resourceLink_), {
|
|
445
|
+
content: content,
|
|
446
|
+
fetchParams: fetchParams
|
|
447
|
+
});
|
|
448
|
+
setState({
|
|
449
|
+
bookObjects: null
|
|
450
|
+
});
|
|
451
|
+
} // @ts-ignore
|
|
452
|
+
|
|
453
|
+
}, [currentBookRef]);
|
|
454
|
+
useEffect(function () {
|
|
455
|
+
console.log("useScripture book ref changed to ".concat(_bookId, ", ").concat(resourceLink_)); // @ts-ignore
|
|
456
|
+
}, [_bookId]);
|
|
457
|
+
useEffect(function () {
|
|
458
|
+
var expectedBookId = _bookId || '';
|
|
459
|
+
var fetchedBookSame = fetchedBook && fetchedBook === expectedBookId;
|
|
460
|
+
var _versesForRef = [];
|
|
461
|
+
|
|
462
|
+
if (!fetchedBookSame) {// if (expectedBookId && fetchedBook) {
|
|
463
|
+
// console.log(`useScripture expected book ${expectedBookId} but fetched book was ${fetchedBook} - clearing`)
|
|
464
|
+
// }
|
|
465
|
+
} else {
|
|
466
|
+
var _bookObjects = fetchedBookSame ? bookObjects : null;
|
|
467
|
+
|
|
468
|
+
_versesForRef = updateVersesForRef(_bookObjects); // console.log(`useScripture _bookObjects is ${!!_bookObjects} and books are the same ${fetchedBook}`, { content, fetchParams })
|
|
469
|
+
}
|
|
470
|
+
|
|
471
|
+
if (!isEqual(_versesForRef, versesForRef)) {
|
|
472
|
+
setState({
|
|
473
|
+
versesForRef: _versesForRef
|
|
474
|
+
});
|
|
475
|
+
}
|
|
476
|
+
}, [reference]);
|
|
199
477
|
return {
|
|
200
|
-
title: title,
|
|
201
|
-
version: version,
|
|
202
|
-
reference: reference,
|
|
203
|
-
resourceLink: resourceLink,
|
|
204
|
-
matchedVerse: matchedVerse,
|
|
205
|
-
verseObjects: verseObjects,
|
|
206
478
|
bookObjects: bookObjects,
|
|
207
|
-
resourceStatus: resourceStatus,
|
|
208
479
|
fetchResponse: fetchResponse,
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
480
|
+
getVersesForRef: _getVersesForRef,
|
|
481
|
+
matchedVerse: matchedVerse,
|
|
482
|
+
reference: fetchParams === null || fetchParams === void 0 ? void 0 : fetchParams.reference,
|
|
483
|
+
reloadResource: reloadResource,
|
|
484
|
+
resourceLink: fetchParams === null || fetchParams === void 0 ? void 0 : fetchParams.resourceLink,
|
|
485
|
+
resourceStatus: resourceStatus,
|
|
486
|
+
title: title,
|
|
212
487
|
updateVerse: updateVerse,
|
|
213
|
-
|
|
488
|
+
version: version,
|
|
489
|
+
versesForRef: versesForRef
|
|
214
490
|
};
|
|
215
491
|
}
|
|
216
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9ob29rcy91c2VTY3JpcHR1cmUudHN4Il0sIm5hbWVzIjpbInVzZUVmZmVjdCIsInVzZU1lbW8iLCJ1c2VTdGF0ZSIsImNvcmUiLCJ1c2VSc3JjIiwiQ09OVEVOVF9OT1RfRk9VTkRfRVJST1IiLCJFUlJPUl9TVEFURSIsIklOSVRJQUxJWkVEX1NUQVRFIiwiSU5WQUxJRF9NQU5JRkVTVF9FUlJPUiIsIkxPQURJTkdfU1RBVEUiLCJNQU5JRkVTVF9OT1RfTE9BREVEX0VSUk9SIiwiU0NSSVBUVVJFX05PVF9MT0FERURfRVJST1IiLCJnZXRWZXJzZXMiLCJjbGVhbnVwVmVyc2VPYmplY3RzIiwiZ2V0UmVzb3VyY2VMaW5rIiwiU2VydmVyQ29uZmlnIiwiU2NyaXB0dXJlUmVzb3VyY2UiLCJTY3JpcHR1cmVSZWZlcmVuY2UiLCJwYXJzZVJlc291cmNlTWFuaWZlc3QiLCJ1c2VTY3JpcHR1cmUiLCJjb25maWciLCJyZWZlcmVuY2UiLCJyZXNvdXJjZV8iLCJyZXNvdXJjZSIsInJlc291cmNlTGlua18iLCJyZXNvdXJjZUxpbmsiLCJ3aG9sZUJvb2siLCJpbml0aWFsaXplZCIsInNldEluaXRpYWxpemVkIiwiYm9va09iamVjdHMiLCJzZXRCb29rT2JqZWN0cyIsInZlcnNlc0ZvclJlZiIsInNldFZlcnNlc0ZvclJlZiIsIm93bmVyIiwibGFuZ3VhZ2VJZCIsInByb2plY3RJZCIsImJyYW5jaCIsInJlZiIsInJlZl8iLCJyZXNvdXJjZUlkIiwib3B0aW9ucyIsImdldEJpYmxlSnNvbiIsImJvb2tSZWYiLCJjaGFwdGVyIiwic3RhdGUiLCJiaWJsZUpzb24iLCJtYXRjaGVkVmVyc2UiLCJjb250ZW50IiwibG9hZGluZ1Jlc291cmNlIiwibG9hZGluZ0NvbnRlbnQiLCJmZXRjaFJlc3BvbnNlIiwicmVsb2FkUmVzb3VyY2UiLCJhY3Rpb25zIiwidGl0bGUiLCJ2ZXJzaW9uIiwidmVyc2VPYmplY3RzIiwibG9hZGluZyIsImNvbnRlbnROb3RGb3VuZEVycm9yIiwic2NyaXB0dXJlTm90TG9hZGVkRXJyb3IiLCJtYW5pZmVzdE5vdEZvdW5kRXJyb3IiLCJtYW5pZmVzdCIsImludmFsaWRNYW5pZmVzdEVycm9yIiwiZXJyb3IiLCJyZXNvdXJjZVN0YXR1cyIsImdldFZlcnNlc0ZvclJlZiIsImNvbnRlbnRfIiwidmVyc2VzIiwiY2hhcHRlcnMiLCJtYXAiLCJ2ZXJzZSIsInZlcnNlRGF0YSIsInZlcnNlT2JqZWN0c18iLCJvY2N1cnJlbmNlSW5qZWN0VmVyc2VPYmplY3RzIiwidXBkYXRlVmVyc2UiLCJib29rT2JqZWN0c18iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUNBLFNBQVNBLFNBQVQsRUFBb0JDLE9BQXBCLEVBQTZCQyxRQUE3QixRQUE2QyxPQUE3QztBQUNBLFNBQ0VDLElBREYsRUFFRUMsT0FGRixRQUdPLHlCQUhQO0FBSUEsU0FDRUMsdUJBREYsRUFFRUMsV0FGRixFQUdFQyxpQkFIRixFQUlFQyxzQkFKRixFQUtFQyxhQUxGLEVBTUVDLHlCQU5GLEVBT0VDLDBCQVBGLFFBUU8sdUJBUlA7QUFTQSxTQUFTQyxTQUFULFFBQTBCLHVCQUExQjtBQUNBLFNBQVNDLG1CQUFULEVBQThCQyxlQUE5QixRQUFxRCw0QkFBckQ7QUFDQSxTQUNFQyxZQURGLEVBRUVDLGlCQUZGLEVBR0VDLGtCQUhGLFFBSU8sVUFKUDtBQUtBLFNBQVNDLHFCQUFULFFBQXNDLHlCQUF0QztBQWVBLE9BQU8sU0FBU0MsWUFBVCxPQU1JO0FBQUE7O0FBQUEsTUFMVEMsTUFLUyxRQUxUQSxNQUtTO0FBQUEsTUFKVEMsU0FJUyxRQUpUQSxTQUlTO0FBQUEsTUFIQ0MsU0FHRCxRQUhUQyxRQUdTO0FBQUEsTUFGS0MsYUFFTCxRQUZUQyxZQUVTO0FBQUEsNEJBRFRDLFNBQ1M7QUFBQSxNQURUQSxTQUNTLCtCQURHLEtBQ0g7O0FBQUEsa0JBQzZCeEIsUUFBUSxDQUFDLEtBQUQsQ0FEckM7QUFBQTtBQUFBLE1BQ0Z5QixXQURFO0FBQUEsTUFD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SUFBQUEsV0FBVyxFQUFYQSxXQWJLO0FBY0x0QixJQUFBQSxjQUFjLEVBQWRBO0FBZEssR0FBUDtBQWdCRCIsInNvdXJjZXNDb250ZW50IjpbIi8vIEB0cy1pZ25vcmVcbmltcG9ydCB7IHVzZUVmZmVjdCwgdXNlTWVtbywgdXNlU3RhdGUgfSBmcm9tICdyZWFjdCdcbmltcG9ydCB7XG4gIGNvcmUsXG4gIHVzZVJzcmMsXG59IGZyb20gJ3NjcmlwdHVyZS1yZXNvdXJjZXMtcmNsJ1xuaW1wb3J0IHtcbiAgQ09OVEVOVF9OT1RfRk9VTkRfRVJST1IsXG4gIEVSUk9SX1NUQVRFLFxuICBJTklUSUFMSVpFRF9TVEFURSxcbiAgSU5WQUxJRF9NQU5JRkVTVF9FUlJPUixcbiAgTE9BRElOR19TVEFURSxcbiAgTUFOSUZFU1RfTk9UX0xPQURFRF9FUlJPUixcbiAgU0NSSVBUVVJFX05PVF9MT0FERURfRVJST1IsXG59IGZyb20gJ3RyYW5zbGF0aW9uLWhlbHBzLXJjbCdcbmltcG9ydCB7IGdldFZlcnNlcyB9IGZyb20gJ2JpYmxlLXJlZmVyZW5jZS1yYW5nZSdcbmltcG9ydCB7IGNsZWFudXBWZXJzZU9iamVjdHMsIGdldFJlc291cmNlTGluayB9IGZyb20gJy4uL3V0aWxzL1NjcmlwdHVyZVNldHRpbmdzJ1xuaW1wb3J0IHtcbiAgU2VydmVyQ29uZmlnLFxuICBTY3JpcHR1cmVSZXNvdXJjZSxcbiAgU2NyaXB0dXJlUmVmZXJlbmNlLFxufSBmcm9tICcuLi90eXBlcydcbmltcG9ydCB7IHBhcnNlUmVzb3VyY2VNYW5pZmVzdCB9IGZyb20gJy4vcGFyc2VSZXNvdXJjZU1hbmlmZXN0J1xuXG5pbnRlcmZhY2UgUHJvcHMge1xuICAvKiogcmVmZXJlbmNlIGZvciBzY3JpcHR1cmUgKiovXG4gIHJlZmVyZW5jZTogU2NyaXB0dXJlUmVmZXJlbmNlO1xuICAvKiogd2hlcmUgdG8gZ2V0IGRhdGEgKiovXG4gIGNvbmZpZzogU2VydmVyQ29uZmlnO1xuICAvKiogb3B0aW9uYWwgZGlyZWN0IHBhdGggdG8gYmlibGUgcmVzb3VyY2UsIGluIGZvcm1hdCAke293bmVyfS8ke2xhbmd1YWdlSWR9LyR7cHJvamVjdElkfS8ke2JyYW5jaH0gKiovXG4gIHJlc291cmNlTGluazogc3RyaW5nfHVuZGVmaW5lZDtcbiAgLyoqIG9wdGlvbmFsIHJlc291cmNlIG9iamVjdCB0byB1c2UgdG8gYnVpbGQgcmVzb3VyY2VMaW5rICoqL1xuICByZXNvdXJjZTogU2NyaXB0dXJlUmVzb3VyY2V8dW5kZWZpbmVkO1xuICAvKiogaWYgdHJ1ZSB0aGVuIGZldGNoIHRoZSBlbnRpcmUgYm9vayAqL1xuICB3aG9sZUJvb2s6IGJvb2xlYW47XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB1c2VTY3JpcHR1cmUoe1xuICBjb25maWcsXG4gIHJlZmVyZW5jZSxcbiAgcmVzb3VyY2U6IHJlc291cmNlXyxcbiAgcmVzb3VyY2VMaW5rOiByZXNvdXJjZUxpbmtfLFxuICB3aG9sZUJvb2sgPSBmYWxzZSxcbn0gOiBQcm9wcykge1xuICBjb25zdCBbaW5pdGlhbGl6ZWQsIHNldEluaXRpYWxpemVkXSA9IHVzZVN0YXRlKGZhbHNlKVxuICBjb25zdCBbYm9va09iamVjdHMsIHNldEJvb2tPYmplY3RzXSA9IHVzZVN0YXRlKG51bGwpXG4gIGNvbnN0IFt2ZXJzZXNGb3JSZWYsIHNldFZlcnNlc0ZvclJlZl0gPSB1c2VTdGF0ZShudWxsKVxuICBsZXQgcmVzb3VyY2VMaW5rID0gcmVzb3VyY2VMaW5rX1xuXG4gIGlmICghcmVzb3VyY2VMaW5rXyAmJiByZXNvdXJjZV8pIHtcbiAgICBjb25zdCB7XG4gICAgICBvd25lcixcbiAgICAgIGxhbmd1YWdlSWQsXG4gICAgICBwcm9qZWN0SWQsXG4gICAgICBicmFuY2ggPSAnbWFzdGVyJyxcbiAgICAgIHJlZiA9IG51bGwsXG4gICAgfSA9IHJlc291cmNlXyB8fCB7fVxuICAgIGNvbnN0IHJlZl8gPSByZWYgfHwgYnJhbmNoXG4gICAgcmVzb3VyY2VMaW5rID0gZ2V0UmVzb3VyY2VMaW5rKHtcbiAgICAgIG93bmVyLFxuICAgICAgbGFuZ3VhZ2VJZCxcbiAgICAgIHJlc291cmNlSWQ6IHByb2plY3RJZCxcbiAgICAgIHJlZjogcmVmXyxcbiAgICB9KVxuICB9XG5cbiAgY29uc3Qgb3B0aW9ucyA9IHsgZ2V0QmlibGVKc29uOiB0cnVlIH1cbiAgY29uc3QgYm9va1JlZiA9IHVzZU1lbW8oKCkgPT4ge1xuICAgIGNvbnN0IGJvb2tSZWYgPSB7IC4uLnJlZmVyZW5jZSB9XG5cbiAgICBpZiAod2hvbGVCb29rKSB7XG4gICAgICBkZWxldGUgYm9va1JlZi5jaGFwdGVyIC8vIHJlbW92ZSB0aGUgY2hhcHRlciBzbyB0aGUgd2hvbGUgYm9vayBpcyBmZXRjaGVkXG4gICAgfVxuICAgIHJldHVybiBib29rUmVmXG4gIH0sIFtyZWZlcmVuY2UsIHdob2xlQm9va10pXG5cbiAgY29uc3Qge1xuICAgIHN0YXRlOiB7XG4gICAgICBiaWJsZUpzb24sXG4gICAgICBtYXRjaGVkVmVyc2UsXG4gICAgICByZXNvdXJjZSxcbiAgICAgIGNvbnRlbnQsXG4gICAgICBsb2FkaW5nUmVzb3VyY2UsXG4gICAgICBsb2FkaW5nQ29udGVudCxcbiAgICAgIGZldGNoUmVzcG9uc2UsXG4gICAgfSxcbiAgICBhY3Rpb25zOiB7IHJlbG9hZFJlc291cmNlIH0sXG4gIH0gPSB1c2VSc3JjKHtcbiAgICBjb25maWcsIHJlZmVyZW5jZTogYm9va1JlZiwgcmVzb3VyY2VMaW5rLCBvcHRpb25zLFxuICB9KVxuXG4gIGNvbnN0IHsgdGl0bGUsIHZlcnNpb24gfSA9IHBhcnNlUmVzb3VyY2VNYW5pZmVzdChyZXNvdXJjZSlcbiAgbGV0IHsgdmVyc2VPYmplY3RzIH0gPSBiaWJsZUpzb24gfHwge31cbiAgY29uc3QgeyBsYW5ndWFnZUlkIH0gPSByZXNvdXJjZV8gfHwge31cbiAgY29uc3QgbG9hZGluZyA9IGxvYWRpbmdSZXNvdXJjZSB8fCBsb2FkaW5nQ29udGVudFxuICBjb25zdCBjb250ZW50Tm90Rm91bmRFcnJvciA9ICFjb250ZW50XG4gIGNvbnN0IHNjcmlwdHVyZU5vdExvYWRlZEVycm9yID0gIWJpYmxlSnNvblxuICBjb25zdCBtYW5pZmVzdE5vdEZvdW5kRXJyb3IgPSAhcmVzb3VyY2U/Lm1hbmlmZXN0XG4gIGNvbnN0IGludmFsaWRNYW5pZmVzdEVycm9yID0gIXRpdGxlIHx8ICF2ZXJzaW9uIHx8ICFsYW5ndWFnZUlkXG4gIGNvbnN0IGVycm9yID0gaW5pdGlhbGl6ZWQgJiYgIWxvYWRpbmcgJiZcbiAgICAoY29udGVudE5vdEZvdW5kRXJyb3IgfHwgc2NyaXB0dXJlTm90TG9hZGVkRXJyb3IgfHwgbWFuaWZlc3ROb3RGb3VuZEVycm9yIHx8IGludmFsaWRNYW5pZmVzdEVycm9yKVxuICBjb25zdCByZXNvdXJjZVN0YXR1cyA9IHtcbiAgICBbTE9BRElOR19TVEFURV06IGxvYWRpbmcsXG4gICAgW0NPTlRFTlRfTk9UX0ZPVU5EX0VSUk9SXTogY29udGVudE5vdEZvdW5kRXJyb3IsXG4gICAgW1NDUklQVFVSRV9OT1RfTE9BREVEX0VSUk9SXTogc2NyaXB0dXJlTm90TG9hZGVkRXJyb3IsXG4gICAgW01BTklGRVNUX05PVF9MT0FERURfRVJST1JdOiBtYW5pZmVzdE5vdEZvdW5kRXJyb3IsXG4gICAgW0lOVkFMSURfTUFOSUZFU1RfRVJST1JdOiBpbnZhbGlkTWFuaWZlc3RFcnJvcixcbiAgICBbRVJST1JfU1RBVEVdOiBlcnJvcixcbiAgICBbSU5JVElBTElaRURfU1RBVEVdOiBpbml0aWFsaXplZCxcbiAgfVxuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKCFpbml0aWFsaXplZCkge1xuICAgICAgaWYgKGxvYWRpbmcpIHsgLy8gb25jZSBmaXJzdCBsb2FkIGhhcyBiZWd1biwgd2UgYXJlIGluaXRpYWxpemVkXG4gICAgICAgIHNldEluaXRpYWxpemVkKHRydWUpXG4gICAgICB9XG4gICAgfVxuICB9LCBbbG9hZGluZ10pXG5cbiAgZnVuY3Rpb24gZ2V0VmVyc2VzRm9yUmVmKHJlZiwgY29udGVudF8gPSBib29rT2JqZWN0cykge1xuICAgIGlmIChjb250ZW50Xykge1xuICAgICAgbGV0IHZlcnNlcyA9IGdldFZlcnNlcyhjb250ZW50Xy5jaGFwdGVycywgcmVmKVxuXG4gICAgICBpZiAobGFuZ3VhZ2VJZCA9PT0gJ2VsLXgta29pbmUnIHx8IGxhbmd1YWdlSWQgPT09ICdoYm8nKSB7XG4gICAgICAgIHZlcnNlcyA9IHZlcnNlcy5tYXAodmVyc2UgPT4ge1xuICAgICAgICAgIGlmICggdmVyc2U/LnZlcnNlRGF0YT8udmVyc2VPYmplY3RzKSB7XG4gICAgICAgICAgICBsZXQgdmVyc2VPYmplY3RzXyA9IGNvcmUub2NjdXJyZW5jZUluamVjdFZlcnNlT2JqZWN0cyggdmVyc2UudmVyc2VEYXRhLnZlcnNlT2JqZWN0cylcbiAgICAgICAgICAgIHZlcnNlT2JqZWN0c18gPSBjbGVhbnVwVmVyc2VPYmplY3RzKHZlcnNlT2JqZWN0c18pXG4gICAgICAgICAgICB2ZXJzZS52ZXJzZURhdGEudmVyc2VPYmplY3RzID0gdmVyc2VPYmplY3RzX1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gdmVyc2VcbiAgICAgICAgfSlcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHZlcnNlc1xuICAgIH1cbiAgICByZXR1cm4gbnVsbFxuICB9XG5cbiAgZnVuY3Rpb24gdXBkYXRlVmVyc2UoY2hhcHRlciwgdmVyc2UsIHZlcnNlRGF0YSkge1xuICAgIGlmIChib29rT2JqZWN0cykge1xuICAgICAgY29uc3QgYm9va09iamVjdHNfID0geyAuLi5ib29rT2JqZWN0cyB9IC8vIHNoYWxsb3cgY29weVxuXG4gICAgICBpZiAoYm9va09iamVjdHNfPy5jaGFwdGVycykge1xuICAgICAgICBib29rT2JqZWN0c18uY2hhcHRlcnMgPSB7IC4uLmJvb2tPYmplY3RzXy5jaGFwdGVycyB9IC8vIHNoYWxsb3cgY29weSBjaGFwdGVyc1xuXG4gICAgICAgIGlmIChib29rT2JqZWN0c18uY2hhcHRlcnNbY2hhcHRlcl0pIHtcbiAgICAgICAgICBib29rT2JqZWN0c18uY2hhcHRlcnNbY2hhcHRlcl0gPSB7IC4uLmJvb2tPYmplY3RzXy5jaGFwdGVyc1tjaGFwdGVyXSB9IC8vIHNoYWxsb3cgY29weSB2ZXJzZXNcbiAgICAgICAgICBib29rT2JqZWN0c18uY2hhcHRlcnNbY2hhcHRlcl1bdmVyc2VdID0gdmVyc2VEYXRhXG4gICAgICAgICAgc2V0Qm9va09iamVjdHMoYm9va09iamVjdHNfKVxuICAgICAgICAgIHJldHVybiBib29rT2JqZWN0c19cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbnVsbFxuICB9XG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoYm9va09iamVjdHMpIHtcbiAgICAgIGNvbnN0IHJlZiA9IGAke3JlZmVyZW5jZS5jaGFwdGVyfToke3JlZmVyZW5jZS52ZXJzZX1gXG4gICAgICBjb25zdCB2ZXJzZXNGb3JSZWYgPSBnZXRWZXJzZXNGb3JSZWYocmVmLCBib29rT2JqZWN0cylcbiAgICAgIHNldFZlcnNlc0ZvclJlZih2ZXJzZXNGb3JSZWYpXG4gICAgfSBlbHNlIHtcbiAgICAgIHNldFZlcnNlc0ZvclJlZihudWxsKVxuICAgIH1cbiAgfSwgW2Jvb2tPYmplY3RzXSlcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIHNldEJvb2tPYmplY3RzKGNvbnRlbnQpXG4gIH0sIFtjb250ZW50XSlcblxuICBpZiAobGFuZ3VhZ2VJZCA9PT0gJ2VsLXgta29pbmUnIHx8IGxhbmd1YWdlSWQgPT09ICdoYm8nKSB7XG4gICAgdmVyc2VPYmplY3RzID0gY29yZS5vY2N1cnJlbmNlSW5qZWN0VmVyc2VPYmplY3RzKHZlcnNlT2JqZWN0cylcbiAgICB2ZXJzZU9iamVjdHMgPSBjbGVhbnVwVmVyc2VPYmplY3RzKHZlcnNlT2JqZWN0cylcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgdGl0bGUsXG4gICAgdmVyc2lvbixcbiAgICByZWZlcmVuY2UsXG4gICAgcmVzb3VyY2VMaW5rLFxuICAgIG1hdGNoZWRWZXJzZSxcbiAgICB2ZXJzZU9iamVjdHMsXG4gICAgYm9va09iamVjdHMsXG4gICAgcmVzb3VyY2VTdGF0dXMsXG4gICAgZmV0Y2hSZXNwb25zZSxcbiAgICBzZXRCb29rT2JqZWN0cyxcbiAgICBnZXRWZXJzZXNGb3JSZWYsXG4gICAgdmVyc2VzRm9yUmVmLFxuICAgIHVwZGF0ZVZlcnNlLFxuICAgIHJlbG9hZFJlc291cmNlLFxuICB9XG59XG4iXX0=
|
|
492
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9ob29rcy91c2VTY3JpcHR1cmUudHN4Il0sIm5hbWVzIjpbInVzZUVmZmVjdCIsInVzZVN0YXRlIiwiY29yZSIsInVzZVJzcmMiLCJDT05URU5UX05PVF9GT1VORF9FUlJPUiIsIkVSUk9SX1NUQVRFIiwiSU5JVElBTElaRURfU1RBVEUiLCJJTlZBTElEX01BTklGRVNUX0VSUk9SIiwiTE9BRElOR19TVEFURSIsIk1BTklGRVNUX05PVF9MT0FERURfRVJST1IiLCJTQ1JJUFRVUkVfTk9UX0xPQURFRF9FUlJPUiIsImdldFZlcnNlcyIsImlzRXF1YWwiLCJjbGVhbnVwVmVyc2VPYmplY3RzIiwiZ2V0UmVzb3VyY2VMaW5rIiwiU2VydmVyQ29uZmlnIiwiU2NyaXB0dXJlUmVzb3VyY2UiLCJTY3JpcHR1cmVSZWZlcmVuY2UiLCJwYXJzZVJlc291cmNlTWFuaWZlc3QiLCJnZXRCcmFuY2hOYW1lIiwicmVzb3VyY2VMaW5rIiwiYnJhbmNoIiwicGFydHMiLCJzcGxpdCIsImxlbmd0aCIsIl9wYXJ0cyIsImdldFZlcnNlc0ZvclJlZlN0ciIsInJlZlN0ciIsImJvb2tPYmplY3RzIiwibGFuZ3VhZ2VJZCIsInZlcnNlcyIsImNoYXB0ZXJzIiwibWFwIiwidmVyc2UiLCJ2ZXJzZURhdGEiLCJ2ZXJzZU9iamVjdHMiLCJ2ZXJzZU9iamVjdHNfIiwib2NjdXJyZW5jZUluamVjdFZlcnNlT2JqZWN0cyIsImdldFZlcnNlc0ZvclJlZiIsInJlZmVyZW5jZSIsImNoYXB0ZXIiLCJ1c2VTY3JpcHR1cmUiLCJjb25maWciLCJyZWFkeUZvckZldGNoIiwicmVzb3VyY2VfIiwicmVzb3VyY2UiLCJyZXNvdXJjZUxpbmtfIiwid2hvbGVCb29rIiwiZmV0Y2hlZEJvb2siLCJmZXRjaFBhcmFtcyIsImlnbm9yZVNoYSIsImluaXRpYWxpemVkIiwiZmV0Y2hlZCIsInJlc291cmNlU3RhdGUiLCJiaWJsZUpzb24iLCJtYXRjaGVkVmVyc2UiLCJjb250ZW50IiwibG9hZGluZ1Jlc291cmNlIiwibG9hZGluZ0NvbnRlbnQiLCJmZXRjaFJlc3BvbnNlIiwidmVyc2VzRm9yUmVmIiwic3RhdGUiLCJzZXRTdGF0ZV8iLCJfYm9va0lkIiwicHJvamVjdElkIiwic2V0U3RhdGUiLCJuZXdTdGF0ZSIsInByZXZTdGF0ZSIsImNvbnNvbGUiLCJsb2ciLCJvd25lciIsInJlZiIsInJlZl8iLCJyZXNvdXJjZUlkIiwiYm9va1JlZiIsIm5ld0ZldGNoUGFyYW1zIiwib3B0aW9ucyIsImdldEJpYmxlSnNvbiIsIl9yZXNvdXJjZVJlc3VsdHMiLCJjdXJyZW50UmVzb3VyY2VTdGF0ZSIsInNhbWVCb29rIiwiZXhwZWN0ZWRCb29rSWQiLCJuYW1lIiwiZXh0IiwidG9Mb3dlckNhc2UiLCJpbmNsdWRlcyIsInNoYSIsImRhdGEiLCJ1cmwiLCJmZXRjaGVkQnJhbmNoIiwiZmV0Y2hpbmdCcmFuY2giLCJ1cGRhdGVWZXJzZXNGb3JSZWYiLCJ0aXRsZSIsInZlcnNpb24iLCJsb2FkaW5nIiwiY29udGVudE5vdEZvdW5kRXJyb3IiLCJzY3JpcHR1cmVOb3RMb2FkZWRFcnJvciIsIm1hbmlmZXN0Tm90Rm91bmRFcnJvciIsIm1hbmlmZXN0IiwiaW52YWxpZE1hbmlmZXN0RXJyb3IiLCJlcnJvciIsInJlc291cmNlU3RhdHVzIiwiaW50aWFsaXplZCIsIl9nZXRWZXJzZXNGb3JSZWYiLCJjb250ZW50XyIsInVwZGF0ZVZlcnNlIiwiYm9va09iamVjdHNfIiwiX2Jvb2tPYmplY3RzIiwibmV3VmVyc2VzRm9yUmVmIiwicmVsb2FkUmVzb3VyY2UiLCJfcmVsb2FkUmVzb3VyY2UiLCJhY3Rpb25zIiwiY3VycmVudEJvb2tSZWYiLCJmZXRjaGVkQm9va1NhbWUiLCJfdmVyc2VzRm9yUmVmIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUNBLFNBQ0VBLFNBREYsRUFFRUMsUUFGRixRQUdPLE9BSFA7QUFJQSxTQUNFQyxJQURGLEVBRUVDLE9BRkYsUUFHTyx5QkFI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LFFBQVEsQ0FBQztBQUFFTCxRQUFBQSxZQUFZLEVBQUVzRDtBQUFoQixPQUFELENBQVI7QUFDRDtBQUNGLEdBbEJRLEVBa0JOLENBQUMzRSxTQUFELENBbEJNLENBQVQ7QUFvQkEsU0FBTztBQUNMWCxJQUFBQSxXQUFXLEVBQVhBLFdBREs7QUFFTCtCLElBQUFBLGFBQWEsRUFBYkEsYUFGSztBQUdMckIsSUFBQUEsZUFBZSxFQUFFaUUsZ0JBSFo7QUFJTGhELElBQUFBLFlBQVksRUFBWkEsWUFKSztBQUtMaEIsSUFBQUEsU0FBUyxFQUFFVSxXQUFGLGFBQUVBLFdBQUYsdUJBQUVBLFdBQVcsQ0FBRVYsU0FMbkI7QUFNTHNFLElBQUFBLGNBQWMsRUFBZEEsY0FOSztBQU9MekYsSUFBQUEsWUFBWSxFQUFFNkIsV0FBRixhQUFFQSxXQUFGLHVCQUFFQSxXQUFXLENBQUU3QixZQVB0QjtBQVFMaUYsSUFBQUEsY0FBYyxFQUFkQSxjQVJLO0FBU0xULElBQUFBLEtBQUssRUFBTEEsS0FUSztBQVVMYSxJQUFBQSxXQUFXLEVBQVhBLFdBVks7QUFXTFosSUFBQUEsT0FBTyxFQUFQQSxPQVhLO0FBWUxqQyxJQUFBQSxZQUFZLEVBQVpBO0FBWkssR0FBUDtBQWNEIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQHRzLWlnbm9yZVxuaW1wb3J0IHtcbiAgdXNlRWZmZWN0LFxuICB1c2VTdGF0ZSxcbn0gZnJvbSAncmVhY3QnXG5pbXBvcnQge1xuICBjb3JlLFxuICB1c2VSc3JjLFxufSBmcm9tICdzY3JpcHR1cmUtcmVzb3VyY2VzLXJjbCdcbmltcG9ydCB7XG4gIENPTlRFTlRfTk9UX0ZPVU5EX0VSUk9SLFxuICBFUlJPUl9TVEFURSxcbiAgSU5JVElBTElaRURfU1RBVEUsXG4gIElOVkFMSURfTUFOSUZFU1RfRVJST1IsXG4gIExPQURJTkdfU1RBVEUsXG4gIE1BTklGRVNUX05PVF9MT0FERURfRVJST1IsXG4gIFNDUklQVFVSRV9OT1RfTE9BREVEX0VSUk9SLFxufSBmcm9tICd0cmFuc2xhdGlvbi1oZWxwcy1yY2wnXG5pbXBvcnQgeyBnZXRWZXJzZXMgfSBmcm9tICdiaWJsZS1yZWZlcmVuY2UtcmFuZ2UnXG5pbXBvcnQgKiBhcyBpc0VxdWFsIGZyb20gJ2RlZXAtZXF1YWwnXG5pbXBvcnQgeyBjbGVhbnVwVmVyc2VPYmplY3RzLCBnZXRSZXNvdXJjZUxpbmsgfSBmcm9tICcuLi91dGlscy9TY3JpcHR1cmVTZXR0aW5ncydcbmltcG9ydCB7XG4gIFNlcnZlckNvbmZpZyxcbiAgU2NyaXB0dXJlUmVzb3VyY2UsXG4gIFNjcmlwdHVyZVJlZmVyZW5jZSxcbn0gZnJvbSAnLi4vdHlwZXMnXG5pbXBvcnQgeyBwYXJzZVJlc291cmNlTWFuaWZlc3QgfSBmcm9tICcuL3BhcnNlUmVzb3VyY2VNYW5pZmVzdCdcblxuaW50ZXJmYWNlIFByb3BzIHtcbiAgLyoqIHJlZmVyZW5jZSBmb3Igc2NyaXB0dXJlICoqL1xuICByZWZlcmVuY2U6IFNjcmlwdHVyZVJlZmVyZW5jZTtcbiAgLyoqIHdoZXJlIHRvIGdldCBkYXRhICoqL1xuICBjb25maWc6IFNlcnZlckNvbmZpZztcbiAgLyoqIG9wdGlvbmFsIGRpcmVjdCBwYXRoIHRvIGJpYmxlIHJlc291cmNlLCBpbiBmb3JtYXQgJHtvd25lcn0vJHtsYW5ndWFnZUlkfS8ke3Byb2plY3RJZH0vJHticmFuY2h9ICoqL1xuICByZXNvdXJjZUxpbms6IHN0cmluZ3x1bmRlZmluZWQ7XG4gIC8qKiBvcHRpb25hbCByZXNvdXJjZSBvYmplY3QgdG8gdXNlIHRvIGJ1aWxkIHJlc291cmNlTGluayAqKi9cbiAgcmVzb3VyY2U6IFNjcmlwdHVyZVJlc291cmNlfHVuZGVmaW5lZDtcbiAgLyoqIGlmIHRydWUgdGhlbiBmZXRjaCB0aGUgZW50aXJlIGJvb2sgKi9cbiAgd2hvbGVCb29rOiBib29sZWFuO1xuICAvKiogaWYgdHJ1ZSB0aGVuIHNldHRpbmdzIGFyZSByZWFkeSBmb3IgZmV0Y2hpbmcgZGF0YSAqL1xuICByZWFkeUZvckZldGNoOiBib29sZWFuO1xufVxuXG4vKipcbiAqIGV4dHJhY3QgYnJhbmNoIGZyb20gcmVzb3VyY2UgbGlua1xuICogQHBhcmFtIHJlc291cmNlTGlua1xuICovXG5mdW5jdGlvbiBnZXRCcmFuY2hOYW1lKHJlc291cmNlTGluazogc3RyaW5nKSB7XG4gIGxldCBicmFuY2ggPSBudWxsXG4gIHJlc291cmNlTGluayA9IHJlc291cmNlTGluayB8fCAnJ1xuICBjb25zdCBwYXJ0cyA9IHJlc291cmNlTGluay5zcGxpdCgnP3JlZj0nKVxuXG4gIGlmIChwYXJ0cy5sZW5ndGggPiAxKSB7IC8vIGlmIHJlZiBwYXJhbWV0ZXIgZm91bmQsIGdldCBicmFuY2ggbmFtZSBhZnRlclxuICAgIGJyYW5jaCA9IHBhcnRzPy5bMV1cbiAgfSBlbHNlIHsgLy8gZmFsbCBiYWNrIHRvIHVzaW5nIHVzZVJzcmMgZm9ybWF0IHN1Y2ggYXMgXCJ1bmZvbGRpbmdXb3JkL2VuL3VzdC9tYXN0ZXJcIlxuICAgIGNvbnN0IF9wYXJ0cyA9IHJlc291cmNlTGluay5zcGxpdCgnLycpXG4gICAgYnJhbmNoID0gX3BhcnRzPy5bM11cbiAgfVxuICByZXR1cm4gYnJhbmNoXG59XG5cbi8qKlxuICogZ2V0IHRoZSB2ZXJzZSBvYmplY3RzIGZvciB0aGUgcmVmZXJlbmNlIHN0cmluZ1xuICogQHBhcmFtIHtzdHJpbmd9IHJlZlN0ciAtIGluIGZvcm1hdCA8Y2hhcHRlcj46PHZlcnNlPlxuICogQHBhcmFtIHtvYmplY3R9IGJvb2tPYmplY3RzIC0gcGFyc2VkIHVzZm0gZm9yIGJvb2tcbiAqIEBwYXJhbSB7c3RyaW5nfSBsYW5ndWFnZUlkXG4gKiBAcmV0dXJuIHthcnJheXxudWxsfSAtIG9mIHZlcnNlT2JqZWN0c1xuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0VmVyc2VzRm9yUmVmU3RyKHJlZlN0ciwgYm9va09iamVjdHMsIGxhbmd1YWdlSWQpIHtcbiAgaWYgKGJvb2tPYmplY3RzKSB7XG4gICAgbGV0IHZlcnNlcyA9IGdldFZlcnNlcyhib29rT2JqZWN0cy5jaGFwdGVycywgcmVmU3RyKVxuXG4gICAgaWYgKGxhbmd1YWdlSWQgPT09ICdlbC14LWtvaW5lJyB8fCBsYW5ndWFnZUlkID09PSAnaGJvJykge1xuICAgICAgdmVyc2VzID0gdmVyc2VzLm1hcCh2ZXJzZSA9PiB7XG4gICAgICAgIGlmICggdmVyc2U/LnZlcnNlRGF0YT8udmVyc2VPYmplY3RzKSB7XG4gICAgICAgICAgbGV0IHZlcnNlT2JqZWN0c18gPSBjb3JlLm9jY3VycmVuY2VJbmplY3RWZXJzZU9iamVjdHMoIHZlcnNlLnZlcnNlRGF0YS52ZXJzZU9iamVjdHMpXG4gICAgICAgICAgdmVyc2VPYmplY3RzXyA9IGNsZWFudXBWZXJzZU9iamVjdHModmVyc2VPYmplY3RzXylcbiAgICAgICAgICB2ZXJzZS52ZXJzZURhdGEudmVyc2VPYmplY3RzID0gdmVyc2VPYmplY3RzX1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB2ZXJzZVxuICAgICAgfSlcbiAgICB9XG5cbiAgICByZXR1cm4gdmVyc2VzXG4gIH1cbiAgcmV0dXJuIG51bGxcbn1cblxuLyoqXG4gKiBnZXQgdGhlIHZlcnNlIG9iamVjdHMgZm9yIHRoZSByZWZlcmVuY2Ugb2JqZWN0XG4gKiBAcGFyYW0ge29iamVjdH0gcmVmZXJlbmNlXG4gKiBAcGFyYW0ge29iamVjdH0gYm9va09iamVjdHMgLSBwYXJzZWQgdXNmbSBmb3IgYm9va1xuICogQHBhcmFtIHtzdHJpbmd9IGxhbmd1YWdlSWRcbiAqIEByZXR1cm4ge2FycmF5fG51bGx9IC0gb2YgdmVyc2VPYmplY3RzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRWZXJzZXNGb3JSZWYocmVmZXJlbmNlLCBib29rT2JqZWN0cywgbGFuZ3VhZ2VJZCkge1xuICBjb25zdCByZWZTdHIgPSBgJHtyZWZlcmVuY2UuY2hhcHRlcn06JHtyZWZlcmVuY2UudmVyc2V9YFxuICByZXR1cm4gZ2V0VmVyc2VzRm9yUmVmU3RyKHJlZlN0ciwgYm9va09iamVjdHMsIGxhbmd1YWdlSWQpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiB1c2VTY3JpcHR1cmUoeyAvLyBob29rIGZvciBmZXRjaGluZyBzY3JpcHR1cmVcbiAgY29uZmlnLFxuICByZWFkeUZvckZldGNoLFxuICByZWZlcmVuY2UsXG4gIHJlc291cmNlOiByZXNvdXJjZV8sXG4gIHJlc291cmNlTGluazogcmVzb3VyY2VMaW5rXyxcbiAgd2hvbGVCb29rID0gZmFsc2UsXG59IDogUHJvcHMpIHtcbiAgY29uc3QgW3N0YXRlLCBzZXRTdGF0ZV9dID0gdXNlU3RhdGUoe1xuICAgIGJvb2tPYmplY3RzOiBudWxsLFxuICAgIGZldGNoZWRCb29rOiAnJyxcbiAgICBmZXRjaFBhcmFtczoge1xuICAgICAgcmVzb3VyY2VMaW5rOiAnJyxcbiAgICAgIHJlZmVyZW5jZToge30sXG4gICAgICBjb25maWc6IHt9LFxuICAgIH0sXG4gICAgaWdub3JlU2hhOiBudWxsLFxuICAgIGluaXRpYWxpemVkOiBmYWxzZSxcbiAgICBmZXRjaGVkOiBmYWxzZSxcbiAgICByZXNvdXJjZVN0YXRlOiB7XG4gICAgICBiaWJsZUpzb246IG51bGwsXG4gICAgICBtYXRjaGVkVmVyc2U6IG51bGwsXG4gICAgICByZXNvdXJjZTogbnVsbCxcbiAgICAgIGNvbnRlbnQ6IG51bGwsXG4gICAgICBsb2FkaW5nUmVzb3VyY2U6IGZhbHNlLFxuICAgICAgbG9hZGluZ0NvbnRlbnQ6IGZhbHNlLFxuICAgICAgZmV0Y2hSZXNwb25zZTogbnVsbCxcbiAgICB9LFxuICAgIHZlcnNlc0ZvclJlZjogW10sXG4gIH0pXG5cbiAgY29uc3Qge1xuICAgIGJvb2tPYmplY3RzLFxuICAgIGZldGNoZWRCb29rLFxuICAgIGZldGNoUGFyYW1zLFxuICAgIGZldGNoZWQsXG4gICAgaWdub3JlU2hhLFxuICAgIGluaXRpYWxpemVkLFxuICAgIHJlc291cmNlU3RhdGUsXG4gICAgdmVyc2VzRm9yUmVmLFxuICB9ID0gc3RhdGVcbiAgY29uc3QgX2Jvb2tJZCA9IHJlZmVyZW5jZT8ucHJvamVjdElkXG5cbiAgZnVuY3Rpb24gc2V0U3RhdGUobmV3U3RhdGUpIHtcbiAgICBzZXRTdGF0ZV8ocHJldlN0YXRlID0+ICh7IC4uLnByZXZTdGF0ZSwgLi4ubmV3U3RhdGUgfSkpXG4gIH1cblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmIChyZWFkeUZvckZldGNoKSB7XG4gICAgICBjb25zb2xlLmxvZyhgdXNlU2NyaXB0dXJlIC0gcmVhZHlGb3JGZXRjaCB0cnVlLCBpbml0aWFsaXppbmdgKVxuICAgICAgbGV0IHJlc291cmNlTGluayA9IHJlYWR5Rm9yRmV0Y2ggJiYgcmVzb3VyY2VMaW5rX1xuXG4gICAgICBpZiAoIXJlc291cmNlTGlua18gJiYgcmVzb3VyY2VfKSB7XG4gICAgICAgIGNvbnN0IHtcbiAgICAgICAgICBvd25lcixcbiAgICAgICAgICBsYW5ndWFnZUlkLFxuICAgICAgICAgIHByb2plY3RJZCxcbiAgICAgICAgICBicmFuY2ggPSAnbWFzdGVyJyxcbiAgICAgICAgICByZWYgPSBudWxsLFxuICAgICAgICB9ID0gcmVzb3VyY2VfIHx8IHt9XG4gICAgICAgIGNvbnN0IHJlZl8gPSByZWYgfHwgYnJhbmNoXG5cbiAgICAgICAgcmVzb3VyY2VMaW5rID0gZ2V0UmVzb3VyY2VMaW5rKHtcbiAgICAgICAgICBvd25lcixcbiAgICAgICAgICBsYW5ndWFnZUlkLFxuICAgICAgICAgIHJlc291cmNlSWQ6IHByb2plY3RJZCxcbiAgICAgICAgICByZWY6IHJlZl8sXG4gICAgICAgIH0pXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGJvb2tSZWYgPSB7IC4uLnJlZmVyZW5jZSB9XG5cbiAgICAgIGlmICh3aG9sZUJvb2spIHtcbiAgICAgICAgZGVsZXRlIGJvb2tSZWYuY2hhcHRlciAvLyByZW1vdmUgdGhlIGNoYXB0ZXIgYW5kIHZlcnNlIHNvIHRoZSB3aG9sZSBib29rIGlzIGZldGNoZWRcbiAgICAgICAgZGVsZXRlIGJvb2tSZWYudmVyc2VcbiAgICAgIH1cblxuICAgICAgaWYgKHJlc291cmNlTGluayAhPT0gZmV0Y2hQYXJhbXM/LnJlc291cmNlTGluaykge1xuICAgICAgICBjb25zb2xlLmxvZyhgdXNlU2NyaXB0dXJlIC0gZm9yICR7cmVzb3VyY2VfPy5wcm9qZWN0SWR9IHJlc291cmNlTGluayBpcyBub3cgJHtyZXNvdXJjZUxpbmt9IGFuZCByZXNvdXJjZUxpbmtfPSR7cmVzb3VyY2VMaW5rX31gKVxuICAgICAgfSBlbHNlIGlmIChib29rUmVmICE9PSBmZXRjaFBhcmFtcz8ucmVmZXJlbmNlKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKGB1c2VTY3JpcHR1cmUgLSBib29rIGNoYW5nZWQgdG8gJHtyZXNvdXJjZV8/LnByb2plY3RJZH0gcmVzb3VyY2VMaW5rIGlzIG5vdyAke3Jlc291cmNlTGlua31gKVxuICAgICAgfVxuXG4gICAgICBjb25zdCBuZXdGZXRjaFBhcmFtcyA9IHtcbiAgICAgICAgcmVzb3VyY2VMaW5rLFxuICAgICAgICByZWZlcmVuY2U6IGJvb2tSZWYsXG4gICAgICAgIGNvbmZpZyxcbiAgICAgIH1cblxuICAgICAgaWYgKCFpc0VxdWFsKG5ld0ZldGNoUGFyYW1zLCBmZXRjaFBhcmFtcykpIHtcbiAgICAgICAgY29uc29sZS5sb2coYHVzZVNjcmlwdHVyZSAtIEZFVENISU5HIG5ldyBwYXJhbXMgJHtyZXNvdXJjZV8/LnByb2plY3RJZH0gcmVzb3VyY2VMaW5rIGlzIG5vdyAke3Jlc291cmNlTGlua30gYW5kIHJlc291cmNlTGlua189JHtyZXNvdXJjZUxpbmtffWAsIG5ld0ZldGNoUGFyYW1zKVxuICAgICAgICBzZXRTdGF0ZSh7XG4gICAgICAgICAgZmV0Y2hQYXJhbXM6IG5ld0ZldGNoUGFyYW1zLFxuICAgICAgICAgIGZldGNoZWQ6IGZhbHNlLFxuICAgICAgICAgIGlnbm9yZVNoYTogbnVsbCxcbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICB9XG4gIH0sIFtyZWFkeUZvckZldGNoLCBfYm9va0lkLCByZXNvdXJjZUxpbmtfXSlcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGNvbnNvbGUubG9nKGB1c2VTY3JpcHR1cmUgLSBmb3IgJHtyZXNvdXJjZV8/LnByb2plY3RJZH0gcmVhZHlGb3JGZXRjaCBpcyBub3cgJHtyZWFkeUZvckZldGNofWApXG4gIH0sIFtyZWFkeUZvckZldGNoXSlcblxuICBjb25zdCBvcHRpb25zID0geyBnZXRCaWJsZUpzb246IHRydWUgfVxuXG4gIGNvbnN0IF9yZXNvdXJjZVJlc3VsdHMgPSB1c2VSc3JjKHtcbiAgICBjb25maWc6IGZldGNoUGFyYW1zPy5jb25maWcsXG4gICAgcmVmZXJlbmNlOiBmZXRjaFBhcmFtcz8ucmVmZXJlbmNlLFxuICAgIHJlc291cmNlTGluazogZmV0Y2hQYXJhbXM/LnJlc291cmNlTGluayxcbiAgICBvcHRpb25zLFxuICB9KVxuXG4gIC8vIG9ubHkgdXNlIHRoZSByZXN1bHRzIGlmIHJlYWR5VG9GZXRjaFxuICBjb25zdCB7XG4gICAgYmlibGVKc29uLFxuICAgIGNvbnRlbnQsXG4gICAgZmV0Y2hSZXNwb25zZSxcbiAgICBsb2FkaW5nUmVzb3VyY2UsXG4gICAgbG9hZGluZ0NvbnRlbnQsXG4gICAgbWF0Y2hlZFZlcnNlLFxuICAgIHJlc291cmNlLFxuICB9ID0gcmVzb3VyY2VTdGF0ZVxuXG4gIHVzZUVmZmVjdCgoKSA9PiB7IC8vIHZhbGlkYXRlIHJlc3BvbnNlIHRvIG1ha2Ugc3VyZSBmcm9tIGxhdGVzdCByZXF1ZXN0XG4gICAgaWYgKHJlYWR5Rm9yRmV0Y2gpIHtcbiAgICAgIGNvbnN0IGN1cnJlbnRSZXNvdXJjZVN0YXRlID0gX3Jlc291cmNlUmVzdWx0cz8uc3RhdGVcblxuICAgICAgaWYgKCFmZXRjaGVkICYmICFpc0VxdWFsKGN1cnJlbnRSZXNvdXJjZVN0YXRlLCByZXNvdXJjZVN0YXRlKSkge1xuICAgICAgICBjb25zdCB7XG4gICAgICAgICAgY29udGVudCxcbiAgICAgICAgICBmZXRjaFJlc3BvbnNlLFxuICAgICAgICAgIGxvYWRpbmdDb250ZW50LFxuICAgICAgICAgIGxvYWRpbmdSZXNvdXJjZSxcbiAgICAgICAgfSA9IGN1cnJlbnRSZXNvdXJjZVN0YXRlXG4gICAgICAgIC8vIGNvbnNvbGUubG9nKGB1c2VTY3JpcHR1cmUgcmVzb3VyY2VzIGNoYW5nZWRgLCB7IGNvbnRlbnQsIGZldGNoUGFyYW1zLCBmZXRjaFJlc3BvbnNlIH0pXG5cbiAgICAgICAgaWYgKCFsb2FkaW5nQ29udGVudCAmJiAhbG9hZGluZ1Jlc291cmNlICYmIGNvbnRlbnQgJiYgZmV0Y2hSZXNwb25zZSkge1xuICAgICAgICAgIGNvbnN0IG5ld1N0YXRlID0geyByZXNvdXJjZVN0YXRlOiBjdXJyZW50UmVzb3VyY2VTdGF0ZSB9XG5cbiAgICAgICAgICBjb25zb2xlLmxvZyhgdXNlU2NyaXB0dXJlIGNvbnRlbnQgY2hhbmdlZGAsIHtcbiAgICAgICAgICAgIGNvbnRlbnQsXG4gICAgICAgICAgICBmZXRjaFBhcmFtcyxcbiAgICAgICAgICAgIGZldGNoUmVzcG9uc2UsXG4gICAgICAgICAgfSlcblxuICAgICAgICAgIC8vIFRSSUNLWSAtIHJlc3BvbnNlcyBmcm9tIHNlcnZlciBjYW4gY29tZSBiYWNrIGZyb20gcHJldmlvdXMgcmVxdWVzdHMuICBTbyB3ZSBtYWtlIHN1cmUgdGhpcyByZXNwb25zZSBpcyBmb3IgdGhlIGN1cnJlbnQgcmVxdWVzdGVkIGJvb2tcbiAgICAgICAgICBsZXQgc2FtZUJvb2sgPSBmYWxzZVxuICAgICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgICBjb25zdCBleHBlY3RlZEJvb2tJZCA9IF9ib29rSWQgfHwgJydcbiAgICAgICAgICBjb25zdCBmZXRjaGVkQm9vayA9IGNvbnRlbnQubmFtZVxuXG4gICAgICAgICAgaWYgKGZldGNoZWRCb29rICYmIGV4cGVjdGVkQm9va0lkKSB7XG4gICAgICAgICAgICBjb25zdCBbbmFtZSwgZXh0XSA9IGZldGNoZWRCb29rLnNwbGl0KCcuJylcblxuICAgICAgICAgICAgaWYgKGV4dC50b0xvd2VyQ2FzZSgpID09PSAndXNmbScpIHtcbiAgICAgICAgICAgICAgc2FtZUJvb2sgPSBuYW1lLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoZXhwZWN0ZWRCb29rSWQudG9Mb3dlckNhc2UoKSlcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjb25zdCBzaGEgPSBmZXRjaFJlc3BvbnNlPy5kYXRhPy5zaGEgfHwgbnVsbFxuICAgICAgICAgIGNvbnN0IHVybCA9IGZldGNoUmVzcG9uc2U/LmRhdGE/LnVybCB8fCBudWxsXG5cbiAgICAgICAgICBpZiAoc2FtZUJvb2spIHsgLy8gYWxzbyBtYWtlIHN1cmUgaXQgaXMgdGhlIHNhbWUgYnJhbmNoXG4gICAgICAgICAgICBjb25zdCBmZXRjaGVkQnJhbmNoID0gZ2V0QnJhbmNoTmFtZSh1cmwpXG4gICAgICAgICAgICBjb25zdCBmZXRjaGluZ0JyYW5jaCA9IGdldEJyYW5jaE5hbWUoZmV0Y2hQYXJhbXM/LnJlc291cmNlTGluaylcblxuICAgICAgICAgICAgaWYgKGZldGNoZWRCcmFuY2ggIT09IGZldGNoaW5nQnJhbmNoKSB7XG4gICAgICAgICAgICAgIGNvbnNvbGUubG9nKGB1c2VTY3JpcHR1cmUgaW52YWxpZCBicmFuY2gsIGV4cGVjdGVkIGJyYW5jaCBpcyAke2ZldGNoaW5nQnJhbmNofSwgYnV0IGZldGNoZWRCcmFuY2ggaXMgJHtmZXRjaGVkQnJhbmNofWAsIHsgc2hhLCB1cmwgfSlcbiAgICAgICAgICAgICAgc2FtZUJvb2sgPSBmYWxzZVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChpZ25vcmVTaGEgPT09IHNoYSkge1xuICAgICAgICAgICAgY29uc29sZS5sb2coYHVzZVNjcmlwdHVyZSAtIHRoZSBzaGEgaXMgdGhlIHNhbWUgYXMgdGhlIGlnbm9yZSBzaGEgJHtzaGF9YCwgeyBzaGEsIHVybCB9KVxuICAgICAgICAgICAgc2FtZUJvb2sgPSBmYWxzZVxuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmICghc2FtZUJvb2spIHtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKGB1c2VTY3JpcHR1cmUgaW52YWxpZCBib29rLCBleHBlY3RlZEJvb2tJZCBpcyAke2V4cGVjdGVkQm9va0lkfSwgYnV0IHJlY2VpdmVkIGJvb2sgbmFtZSAke2ZldGNoZWRCb29rfWAsIHsgc2hhLCB1cmwgfSlcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbmV3U3RhdGVbJ2Jvb2tPYmplY3RzJ10gPSBjb250ZW50XG4gICAgICAgICAgICBuZXdTdGF0ZVsndmVyc2VzRm9yUmVmJ10gPSB1cGRhdGVWZXJzZXNGb3JSZWYoY29udGVudClcbiAgICAgICAgICAgIG5ld1N0YXRlWydmZXRjaGVkQm9vayddID0gZXhwZWN0ZWRCb29rSWRcblxuICAgICAgICAgICAgaWYgKCFpc0VxdWFsKG5ld1N0YXRlLCB7XG4gICAgICAgICAgICAgIGJvb2tPYmplY3RzLFxuICAgICAgICAgICAgICB2ZXJzZXNGb3JSZWYsXG4gICAgICAgICAgICAgIGZldGNoZWRCb29rOiBleHBlY3RlZEJvb2tJZCxcbiAgICAgICAgICAgICAgcmVzb3VyY2VTdGF0ZSxcbiAgICAgICAgICAgIH0pKSB7XG4gICAgICAgICAgICAgIGNvbnNvbGUubG9nKGB1c2VTY3JpcHR1cmUgY29ycmVjdCBib29rLCBleHBlY3RlZEJvb2tJZCBpcyAke2V4cGVjdGVkQm9va0lkfWAsIHsgc2hhLCB1cmwgfSlcbiAgICAgICAgICAgICAgbmV3U3RhdGVbJ2ZldGNoZWQnXSA9IHRydWVcbiAgICAgICAgICAgICAgbmV3U3RhdGVbJ2lnbm9yZVNoYSddID0gbnVsbFxuICAgICAgICAgICAgICBzZXRTdGF0ZShuZXdTdGF0ZSlcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaWYgKCFpc0VxdWFsKGN1cnJlbnRSZXNvdXJjZVN0YXRlLCByZXNvdXJjZVN0YXRlKSkge1xuICAgICAgICAgICAgLy8gY29uc29sZS5sb2coYHVzZVNjcmlwdHVyZSBzdGF0ZSBjaGFuZ2VkLCBidXQgbm8gY29udGVudGAsIGN1cnJlbnRSZXNvdXJjZVN0YXRlKVxuICAgICAgICAgICAgc2V0U3RhdGUoeyByZXNvdXJjZVN0YXRlOiBjdXJyZW50UmVzb3VyY2VTdGF0ZSB9KVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfSwgW3JlYWR5Rm9yRmV0Y2gsIF9yZXNvdXJjZVJlc3VsdHM/LnN0YXRlXSlcblxuICBjb25zdCB7IHRpdGxlLCB2ZXJzaW9uIH0gPSBwYXJzZVJlc291cmNlTWFuaWZlc3QocmVzb3VyY2UpXG4gIGNvbnN0IHsgbGFuZ3VhZ2VJZCB9ID0gcmVzb3VyY2VfIHx8IHt9XG4gIGNvbnN0IGxvYWRpbmcgPSBsb2FkaW5nUmVzb3VyY2UgfHwgbG9hZGluZ0NvbnRlbnQgfHwgIXJlYWR5Rm9yRmV0Y2hcbiAgY29uc3QgY29udGVudE5vdEZvdW5kRXJyb3IgPSAhY29udGVudFxuICBjb25zdCBzY3JpcHR1cmVOb3RMb2FkZWRFcnJvciA9ICFiaWJsZUpzb25cbiAgY29uc3QgbWFuaWZlc3ROb3RGb3VuZEVycm9yID0gIXJlc291cmNlPy5tYW5pZmVzdFxuICBjb25zdCBpbnZhbGlkTWFuaWZlc3RFcnJvciA9ICF0aXRsZSB8fCAhdmVyc2lvbiB8fCAhbGFuZ3VhZ2VJZFxuICBjb25zdCBlcnJvciA9IHJlYWR5Rm9yRmV0Y2ggJiYgaW5pdGlhbGl6ZWQgJiYgIWxvYWRpbmcgJiZcbiAgICAoY29udGVudE5vdEZvdW5kRXJyb3IgfHwgc2NyaXB0dXJlTm90TG9hZGVkRXJyb3IgfHwgbWFuaWZlc3ROb3RGb3VuZEVycm9yIHx8IGludmFsaWRNYW5pZmVzdEVycm9yKVxuICBjb25zdCByZXNvdXJjZVN0YXR1cyA9IHtcbiAgICBbTE9BRElOR19TVEFURV06IGxvYWRpbmcsXG4gICAgW0NPTlRFTlRfTk9UX0ZPVU5EX0VSUk9SXTogY29udGVudE5vdEZvdW5kRXJyb3IsXG4gICAgW1NDUklQVFVSRV9OT1RfTE9BREVEX0VSUk9SXTogc2NyaXB0dXJlTm90TG9hZGVkRXJyb3IsXG4gICAgW01BTklGRVNUX05PVF9MT0FERURfRVJST1JdOiBtYW5pZmVzdE5vdEZvdW5kRXJyb3IsXG4gICAgW0lOVkFMSURfTUFOSUZFU1RfRVJST1JdOiBpbnZhbGlkTWFuaWZlc3RFcnJvcixcbiAgICBbRVJST1JfU1RBVEVdOiBlcnJvcixcbiAgICBbSU5JVElBTElaRURfU1RBVEVdOiBpbml0aWFsaXplZCxcbiAgfVxuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKCFyZWFkeUZvckZldGNoKSB7XG4gICAgICBpZiAoaW5pdGlhbGl6ZWQpIHtcbiAgICAgICAgc2V0U3RhdGUoeyBpbnRpYWxpemVkOiBmYWxzZSB9KVxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoIWluaXRpYWxpemVkKSB7XG4gICAgICBpZiAobG9hZGluZykgeyAvLyBvbmNlIGZpcnN0IGxvYWQgaGFzIGJlZ3VuLCB3ZSBhcmUgaW5pdGlhbGl6ZWRcbiAgICAgICAgc2V0U3RhdGUoeyBpbnRpYWxpemVkOiB0cnVlIH0pXG4gICAgICB9XG4gICAgfVxuICB9LCBbbG9hZGluZywgcmVhZHlGb3JGZXRjaF0pXG5cbiAgLyoqXG4gICAqIGdldCB2ZXJzZXMgZm9yIHJlZlxuICAgKiBAcGFyYW0gcmVmU3RyXG4gICAqIEBwYXJhbSBjb250ZW50X1xuICAgKi9cbiAgZnVuY3Rpb24gX2dldFZlcnNlc0ZvclJlZihyZWZTdHIsIGNvbnRlbnRfID0gYm9va09iamVjdHMpIHtcbiAgICBpZiAoY29udGVudF8pIHtcbiAgICAgIHJldHVybiBnZXRWZXJzZXNGb3JSZWZTdHIocmVmU3RyLCBjb250ZW50XywgbGFuZ3VhZ2VJZClcbiAgICB9XG4gICAgcmV0dXJuIG51bGxcbiAgfVxuXG4gIGZ1bmN0aW9uIHVwZGF0ZVZlcnNlKGNoYXB0ZXIsIHZlcnNlLCB2ZXJzZURhdGEpIHtcbiAgICBpZiAoYm9va09iamVjdHMpIHtcbiAgICAgIGNvbnN0IGJvb2tPYmplY3RzXyA9IHsgLi4uYm9va09iamVjdHMgfSAvLyBzaGFsbG93IGNvcHlcblxuICAgICAgaWYgKGJvb2tPYmplY3RzXz8uY2hhcHRlcnMpIHtcbiAgICAgICAgYm9va09iamVjdHNfLmNoYXB0ZXJzID0geyAuLi5ib29rT2JqZWN0c18uY2hhcHRlcnMgfSAvLyBzaGFsbG93IGNvcHkgY2hhcHRlcnNcblxuICAgICAgICBpZiAoYm9va09iamVjdHNfLmNoYXB0ZXJzW2NoYXB0ZXJdKSB7XG4gICAgICAgICAgYm9va09iamVjdHNfLmNoYXB0ZXJzW2NoYXB0ZXJdID0geyAuLi5ib29rT2JqZWN0c18uY2hhcHRlcnNbY2hhcHRlcl0gfSAvLyBzaGFsbG93IGNvcHkgdmVyc2VzXG4gICAgICAgICAgYm9va09iamVjdHNfLmNoYXB0ZXJzW2NoYXB0ZXJdW3ZlcnNlXSA9IHZlcnNlRGF0YVxuICAgICAgICAgIHNldFN0YXRlKHsgYm9va09iamVjdHM6IGJvb2tPYmplY3RzXyB9KVxuICAgICAgICAgIHJldHVybiBib29rT2JqZWN0c19cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbnVsbFxuICB9XG5cbiAgZnVuY3Rpb24gdXBkYXRlVmVyc2VzRm9yUmVmKF9ib29rT2JqZWN0cyA9IGJvb2tPYmplY3RzKSB7XG4gICAgbGV0IG5ld1ZlcnNlc0ZvclJlZiA9IFtdXG5cbiAgICBpZiAoX2Jvb2tPYmplY3RzKSB7XG4gICAgICBuZXdWZXJzZXNGb3JSZWYgPSBnZXRWZXJzZXNGb3JSZWYocmVmZXJlbmNlLCBfYm9va09iamVjdHMsIGxhbmd1YWdlSWQpXG4gICAgICByZXR1cm4gbmV3VmVyc2VzRm9yUmVmXG4gICAgfVxuXG4gICAgcmV0dXJuIG51bGxcbiAgfVxuXG4gIC8qKlxuICAgKiBmb3JjZSByZWxvYWQgb2YgY3VycmVudCByZXNvdXJjZVxuICAgKiBAcGFyYW0ge3N0cmluZ3x1bmRlZmluZWR9IGlnbm9yZVNoYSAtIG9wdGlvbmFsIHNoYSB0byBpZ25vcmVcbiAgICovXG4gIGZ1bmN0aW9uIHJlbG9hZFJlc291cmNlKGlnbm9yZVNoYSkge1xuICAgIGNvbnN0IF9yZWxvYWRSZXNvdXJjZSA9IF9yZXNvdXJjZVJlc3VsdHM/LmFjdGlvbnMucmVsb2FkUmVzb3VyY2VcblxuICAgIGlmIChfcmVsb2FkUmVzb3VyY2UpIHtcbiAgICAgIGNvbnN0IG5ld1N0YXRlID0geyBmZXRjaGVkOiBmYWxzZSB9XG5cbiAgICAgIGlmIChpZ25vcmVTaGEpIHsgLy8gVFJJQ0tZIC0gaWYgdGhlIHJlc3BvbnNlIHdhcyBmb3IgdGhpcyBzaGEgKHdoaWNoIHdhcyB0aGUgcHJldmlvdXMgc2hhKSB0aGVuIHdlIG5lZWQgdG8gaWdub3JlIGl0XG4gICAgICAgIG5ld1N0YXRlWydpZ25vcmVTaGEnXSA9IGlnbm9yZVNoYVxuICAgICAgfVxuICAgICAgc2V0U3RhdGUoIG5ld1N0YXRlKVxuICAgICAgX3JlbG9hZFJlc291cmNlKClcbiAgICB9XG4gIH1cblxuICAvLyBAdHMtaWdub3JlXG4gIGNvbnN0IGN1cnJlbnRCb29rUmVmID0gZmV0Y2hQYXJhbXM/LnJlZmVyZW5jZT8ucHJvamVjdElkXG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoY3VycmVudEJvb2tSZWYpIHtcbiAgICAgIGNvbnNvbGUubG9nKGB1c2VTY3JpcHR1cmUgZmV0Y2hlZCBib29rIGNoYW5nZWQgdG8gJHtjdXJyZW50Qm9va1JlZn0sICR7cmVzb3VyY2VMaW5rX31gLCB7IGNvbnRlbnQsIGZldGNoUGFyYW1zIH0pXG4gICAgICBzZXRTdGF0ZSh7IGJvb2tPYmplY3RzOiBudWxsIH0pXG4gICAgfVxuICAgIC8vIEB0cy1pZ25vcmVcbiAgfSwgW2N1cnJlbnRCb29rUmVmXSlcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGNvbnNvbGUubG9nKGB1c2VTY3JpcHR1cmUgYm9vayByZWYgY2hhbmdlZCB0byAke19ib29rSWR9LCAke3Jlc291cmNlTGlua199YClcbiAgICAvLyBAdHMtaWdub3JlXG4gIH0sIFtfYm9va0lkXSlcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGNvbnN0IGV4cGVjdGVkQm9va0lkID0gX2Jvb2tJZCB8fCAnJ1xuICAgIGNvbnN0IGZldGNoZWRCb29rU2FtZSA9IGZldGNoZWRCb29rICYmIChmZXRjaGVkQm9vayA9PT0gZXhwZWN0ZWRCb29rSWQpXG4gICAgbGV0IF92ZXJzZXNGb3JSZWYgPSBbXVxuXG4gICAgaWYgKCFmZXRjaGVkQm9va1NhbWUpIHtcbiAgICAgIC8vIGlmIChleHBlY3RlZEJvb2tJZCAmJiBmZXRjaGVkQm9vaykge1xuICAgICAgLy8gICBjb25zb2xlLmxvZyhgdXNlU2NyaXB0dXJlIGV4cGVjdGVkIGJvb2sgJHtleHBlY3RlZEJvb2tJZH0gYnV0IGZldGNoZWQgYm9vayB3YXMgJHtmZXRjaGVkQm9va30gLSBjbGVhcmluZ2ApXG4gICAgICAvLyB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IF9ib29rT2JqZWN0cyA9IGZldGNoZWRCb29rU2FtZSA/IGJvb2tPYmplY3RzIDogbnVsbFxuICAgICAgX3ZlcnNlc0ZvclJlZiA9IHVwZGF0ZVZlcnNlc0ZvclJlZihfYm9va09iamVjdHMpXG4gICAgICAvLyBjb25zb2xlLmxvZyhgdXNlU2NyaXB0dXJlIF9ib29rT2JqZWN0cyBpcyAkeyEhX2Jvb2tPYmplY3RzfSBhbmQgYm9va3MgYXJlIHRoZSBzYW1lICR7ZmV0Y2hlZEJvb2t9YCwgeyBjb250ZW50LCBmZXRjaFBhcmFtcyB9KVxuICAgIH1cblxuICAgIGlmICghaXNFcXVhbChfdmVyc2VzRm9yUmVmLCB2ZXJzZXNGb3JSZWYpKSB7XG4gICAgICBzZXRTdGF0ZSh7IHZlcnNlc0ZvclJlZjogX3ZlcnNlc0ZvclJlZiB9KVxuICAgIH1cbiAgfSwgW3JlZmVyZW5jZV0pXG5cbiAgcmV0dXJuIHtcbiAgICBib29rT2JqZWN0cyxcbiAgICBmZXRjaFJlc3BvbnNlLFxuICAgIGdldFZlcnNlc0ZvclJlZjogX2dldFZlcnNlc0ZvclJlZixcbiAgICBtYXRjaGVkVmVyc2UsXG4gICAgcmVmZXJlbmNlOiBmZXRjaFBhcmFtcz8ucmVmZXJlbmNlLFxuICAgIHJlbG9hZFJlc291cmNlLFxuICAgIHJlc291cmNlTGluazogZmV0Y2hQYXJhbXM/LnJlc291cmNlTGluayxcbiAgICByZXNvdXJjZVN0YXR1cyxcbiAgICB0aXRsZSxcbiAgICB1cGRhdGVWZXJzZSxcbiAgICB2ZXJzaW9uLFxuICAgIHZlcnNlc0ZvclJlZixcbiAgfVxufVxuIl19
|