single-scripture-rcl 3.3.3-beta.7 → 3.3.3-beta.80
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 +487 -115
- package/dist/components/ScripturePane/ScripturePane.js +52 -38
- package/dist/components/VerseSelectorPopup/VerseSelectorPopup.js +104 -0
- package/dist/components/VerseSelectorPopup/index.js +2 -0
- package/dist/hooks/useScripture.js +268 -92
- package/dist/hooks/useScriptureAlignmentEdit.js +13 -10
- package/dist/hooks/useScriptureResources.js +20 -18
- package/dist/hooks/useScriptureSelector.js +12 -12
- package/dist/hooks/useScriptureSettings.js +35 -39
- package/dist/utils/ScriptureSettings.js +11 -6
- package/dist/utils/index.js +2 -1
- package/dist/utils/maps.js +41 -0
- package/package.json +3 -2
|
@@ -1,16 +1,33 @@
|
|
|
1
1
|
import "core-js/modules/es.array.concat.js";
|
|
2
|
+
import "core-js/modules/es.array.every.js";
|
|
2
3
|
import "core-js/modules/es.array.find-index.js";
|
|
4
|
+
import "core-js/modules/es.array.for-each.js";
|
|
3
5
|
import "core-js/modules/es.array.includes.js";
|
|
4
6
|
import "core-js/modules/es.array.is-array.js";
|
|
7
|
+
import "core-js/modules/es.array.iterator.js";
|
|
5
8
|
import "core-js/modules/es.array.join.js";
|
|
6
9
|
import "core-js/modules/es.array.map.js";
|
|
10
|
+
import "core-js/modules/es.map.js";
|
|
7
11
|
import "core-js/modules/es.object.keys.js";
|
|
12
|
+
import "core-js/modules/es.object.to-string.js";
|
|
13
|
+
import "core-js/modules/es.object.values.js";
|
|
8
14
|
import "core-js/modules/es.parse-int.js";
|
|
9
15
|
import "core-js/modules/es.regexp.exec.js";
|
|
10
16
|
import "core-js/modules/es.string.includes.js";
|
|
17
|
+
import "core-js/modules/es.string.iterator.js";
|
|
11
18
|
import "core-js/modules/es.string.split.js";
|
|
19
|
+
import "core-js/modules/web.dom-collections.for-each.js";
|
|
20
|
+
import "core-js/modules/web.dom-collections.iterator.js";
|
|
12
21
|
import "regenerator-runtime/runtime.js";
|
|
13
22
|
|
|
23
|
+
function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); }
|
|
24
|
+
|
|
25
|
+
function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
|
|
26
|
+
|
|
27
|
+
function _iterableToArray(iter) { if (typeof Symbol !== "undefined" && Symbol.iterator in Object(iter)) return Array.from(iter); }
|
|
28
|
+
|
|
29
|
+
function _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); }
|
|
30
|
+
|
|
14
31
|
function _createForOfIteratorHelper(o, allowArrayLike) { var it; if (typeof Symbol === "undefined" || o[Symbol.iterator] == null) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e2) { throw _e2; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = o[Symbol.iterator](); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e3) { didErr = true; err = _e3; }, f: function f() { try { if (!normalCompletion && it["return"] != null) it["return"](); } finally { if (didErr) throw err; } } }; }
|
|
15
32
|
|
|
16
33
|
function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }
|
|
@@ -39,17 +56,24 @@ function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
|
|
|
39
56
|
|
|
40
57
|
import * as React from 'react';
|
|
41
58
|
import * as PropTypes from 'prop-types';
|
|
42
|
-
import { core } from 'scripture-resources-rcl';
|
|
59
|
+
import { core, SelectionsContextProvider } from 'scripture-resources-rcl';
|
|
43
60
|
import usfmjs from 'usfm-js';
|
|
44
61
|
import { useEdit } from 'gitea-react-toolkit';
|
|
62
|
+
import { IconButton } from '@mui/material';
|
|
63
|
+
import { RxLink2, RxLinkBreak2 } from 'react-icons/rx';
|
|
45
64
|
import { Card, useCardState, useUserBranch, ERROR_STATE, MANIFEST_NOT_LOADED_ERROR } from 'translation-helps-rcl';
|
|
65
|
+
import { getQuoteMatchesInBookRef } from 'uw-quote-helpers';
|
|
46
66
|
import { AlignmentHelpers, UsfmFileConversionHelpers } from 'word-aligner-rcl';
|
|
47
67
|
import * as isEqual from 'deep-equal';
|
|
68
|
+
import { getVerses } from 'bible-reference-range';
|
|
48
69
|
import { ScripturePane, ScriptureSelector } from '..';
|
|
49
70
|
import { useScriptureSettings } from '../../hooks/useScriptureSettings';
|
|
50
|
-
import { getResourceLink, getResourceMessage, getScriptureVersionSettings, isOriginalBible } from '../../utils/ScriptureSettings';
|
|
71
|
+
import { cleanupVerseObjects, fixOccurrence, getResourceLink, getResourceMessage, getScriptureVersionSettings, isOriginalBible } from '../../utils/ScriptureSettings';
|
|
72
|
+
import { delay } from '../../utils/delay';
|
|
73
|
+
import { areMapsTheSame } from '../../utils/maps';
|
|
51
74
|
import { Title } from '../ScripturePane/styled';
|
|
52
75
|
import { NT_ORIG_LANG, ORIGINAL_SOURCE, OT_ORIG_LANG } from '../../utils';
|
|
76
|
+
import { VerseSelectorPopup } from '../VerseSelectorPopup';
|
|
53
77
|
var KEY_FONT_SIZE_BASE = 'scripturePaneFontSize_';
|
|
54
78
|
var label = 'Version';
|
|
55
79
|
var style = {
|
|
@@ -57,68 +81,88 @@ var style = {
|
|
|
57
81
|
width: '500px'
|
|
58
82
|
};
|
|
59
83
|
export default function ScriptureCard(_ref) {
|
|
60
|
-
var _scriptureConfig$reso, _scriptureConfig$reso2, _scriptureConfig$reso3, _scriptureConfig$reso4, _scriptureConfig$reso6, _scriptureConfig$reso7, _scriptureConfig$reso8, _httpConfig, _httpConfig2;
|
|
84
|
+
var _scriptureConfig$reso, _scriptureConfig$reso2, _scriptureConfig$reso3, _scriptureConfig$reso4, _scriptureConfig$reso6, _scriptureConfig$reso7, _scriptureConfig$reso8, _httpConfig, _httpConfig2, _versesForRef2, _versesForRef3;
|
|
61
85
|
|
|
62
|
-
var
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
server = _ref.server,
|
|
66
|
-
appRef = _ref.appRef,
|
|
86
|
+
var appRef = _ref.appRef,
|
|
87
|
+
authentication = _ref.authentication,
|
|
88
|
+
bookIndex = _ref.bookIndex,
|
|
67
89
|
cardNum = _ref.cardNum,
|
|
68
90
|
classes = _ref.classes,
|
|
91
|
+
disableWordPopover = _ref.disableWordPopover,
|
|
92
|
+
fetchGlossesForVerse = _ref.fetchGlossesForVerse,
|
|
93
|
+
getLanguage = _ref.getLanguage,
|
|
94
|
+
getLexiconData = _ref.getLexiconData,
|
|
95
|
+
greekRepoUrl = _ref.greekRepoUrl,
|
|
96
|
+
hebrewRepoUrl = _ref.hebrewRepoUrl,
|
|
97
|
+
httpConfig = _ref.httpConfig,
|
|
98
|
+
id = _ref.id,
|
|
99
|
+
isNT = _ref.isNT,
|
|
100
|
+
loggedInUser = _ref.loggedInUser,
|
|
101
|
+
onMinimize = _ref.onMinimize,
|
|
102
|
+
onResourceError = _ref.onResourceError,
|
|
103
|
+
reference = _ref.reference,
|
|
69
104
|
_ref$resource = _ref.resource,
|
|
70
105
|
owner = _ref$resource.owner,
|
|
71
106
|
languageId = _ref$resource.languageId,
|
|
72
107
|
resourceId = _ref$resource.resourceId,
|
|
73
108
|
originalLanguageOwner = _ref$resource.originalLanguageOwner,
|
|
74
|
-
getLanguage = _ref.getLanguage,
|
|
75
|
-
_ref$reference = _ref.reference,
|
|
76
|
-
verse = _ref$reference.verse,
|
|
77
|
-
chapter = _ref$reference.chapter,
|
|
78
|
-
bookId = _ref$reference.projectId,
|
|
79
109
|
resourceLink = _ref.resourceLink,
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
onResourceError = _ref.onResourceError,
|
|
83
|
-
httpConfig = _ref.httpConfig,
|
|
84
|
-
greekRepoUrl = _ref.greekRepoUrl,
|
|
85
|
-
hebrewRepoUrl = _ref.hebrewRepoUrl,
|
|
86
|
-
getLexiconData = _ref.getLexiconData,
|
|
87
|
-
fetchGlossesForVerse = _ref.fetchGlossesForVerse,
|
|
88
|
-
translate = _ref.translate,
|
|
89
|
-
onMinimize = _ref.onMinimize,
|
|
90
|
-
loggedInUser = _ref.loggedInUser,
|
|
91
|
-
authentication = _ref.authentication,
|
|
110
|
+
selectedQuote = _ref.selectedQuote,
|
|
111
|
+
server = _ref.server,
|
|
92
112
|
setSavedChanges = _ref.setSavedChanges,
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
113
|
+
setWordAlignerStatus = _ref.setWordAlignerStatus,
|
|
114
|
+
translate = _ref.translate,
|
|
115
|
+
title = _ref.title,
|
|
116
|
+
useUserLocalStorage = _ref.useUserLocalStorage;
|
|
117
|
+
var bookId = reference === null || reference === void 0 ? void 0 : reference.projectId;
|
|
96
118
|
|
|
97
119
|
var _React$useState = React.useState({
|
|
120
|
+
checkForEditBranch: 0,
|
|
121
|
+
currentReference: null,
|
|
122
|
+
editBranchReady: false,
|
|
98
123
|
haveUnsavedChanges: false,
|
|
124
|
+
lastSelectedQuote: null,
|
|
125
|
+
originalVerseObjects: null,
|
|
126
|
+
readyForFetch: false,
|
|
99
127
|
ref: appRef,
|
|
100
128
|
saveClicked: false,
|
|
101
129
|
saveContent: null,
|
|
130
|
+
selections: new Map(),
|
|
102
131
|
sha: null,
|
|
103
132
|
startSave: false,
|
|
104
133
|
urlError: null,
|
|
105
134
|
usingUserBranch: false,
|
|
106
135
|
unsavedChangesList: {},
|
|
107
|
-
versesForRef: null
|
|
136
|
+
versesForRef: null,
|
|
137
|
+
showAlignmentPopup: false,
|
|
138
|
+
verseSelectedForAlignment: null,
|
|
139
|
+
versesAlignmentStatus: null,
|
|
140
|
+
verseObjectsMap: new Map()
|
|
108
141
|
}),
|
|
109
142
|
_React$useState2 = _slicedToArray(_React$useState, 2),
|
|
110
143
|
state = _React$useState2[0],
|
|
111
144
|
setState_ = _React$useState2[1];
|
|
112
145
|
|
|
113
|
-
var
|
|
146
|
+
var checkForEditBranch = state.checkForEditBranch,
|
|
147
|
+
currentReference = state.currentReference,
|
|
148
|
+
editBranchReady = state.editBranchReady,
|
|
149
|
+
haveUnsavedChanges = state.haveUnsavedChanges,
|
|
150
|
+
lastSelectedQuote = state.lastSelectedQuote,
|
|
151
|
+
originalVerseObjects = state.originalVerseObjects,
|
|
152
|
+
readyForFetch = state.readyForFetch,
|
|
153
|
+
ref = state.ref,
|
|
114
154
|
saveClicked = state.saveClicked,
|
|
115
155
|
saveContent = state.saveContent,
|
|
156
|
+
selections = state.selections,
|
|
116
157
|
sha = state.sha,
|
|
158
|
+
showAlignmentPopup = state.showAlignmentPopup,
|
|
117
159
|
startSave = state.startSave,
|
|
118
160
|
urlError = state.urlError,
|
|
119
161
|
usingUserBranch = state.usingUserBranch,
|
|
120
162
|
unsavedChangesList = state.unsavedChangesList,
|
|
121
|
-
|
|
163
|
+
verseObjectsMap = state.verseObjectsMap,
|
|
164
|
+
verseSelectedForAlignment = state.verseSelectedForAlignment,
|
|
165
|
+
versesAlignmentStatus = state.versesAlignmentStatus,
|
|
122
166
|
versesForRef = state.versesForRef;
|
|
123
167
|
|
|
124
168
|
var _useUserLocalStorage = useUserLocalStorage(KEY_FONT_SIZE_BASE + cardNum, 100),
|
|
@@ -134,24 +178,40 @@ export default function ScriptureCard(_ref) {
|
|
|
134
178
|
});
|
|
135
179
|
}
|
|
136
180
|
|
|
181
|
+
function setOriginalScriptureResource(newResource) {
|
|
182
|
+
var _newResource$referenc;
|
|
183
|
+
|
|
184
|
+
var newBookObjects = (newResource === null || newResource === void 0 ? void 0 : newResource.bookObjects) || {};
|
|
185
|
+
var bookId = newResource === null || newResource === void 0 ? void 0 : (_newResource$referenc = newResource.reference) === null || _newResource$referenc === void 0 ? void 0 : _newResource$referenc.projectId;
|
|
186
|
+
|
|
187
|
+
var _newBookObjects = _objectSpread(_objectSpread({}, newBookObjects), {}, {
|
|
188
|
+
bookId: bookId
|
|
189
|
+
});
|
|
190
|
+
|
|
191
|
+
if (!isEqual(_newBookObjects, originalVerseObjects)) {
|
|
192
|
+
setState({
|
|
193
|
+
originalVerseObjects: _newBookObjects
|
|
194
|
+
});
|
|
195
|
+
}
|
|
196
|
+
}
|
|
197
|
+
|
|
137
198
|
if (usingUserBranch) {
|
|
138
199
|
httpConfig = _objectSpread(_objectSpread({}, httpConfig), {}, {
|
|
139
200
|
cache: {
|
|
140
201
|
maxAge: 0
|
|
141
|
-
}
|
|
202
|
+
},
|
|
203
|
+
noCache: true
|
|
142
204
|
}); // disable http caching
|
|
143
205
|
}
|
|
144
206
|
|
|
145
207
|
var _useScriptureSettings = useScriptureSettings({
|
|
146
208
|
isNT: isNT,
|
|
147
209
|
title: title,
|
|
148
|
-
verse: verse,
|
|
149
210
|
owner: owner,
|
|
150
|
-
|
|
211
|
+
reference: currentReference,
|
|
151
212
|
appRef: ref,
|
|
152
213
|
server: server,
|
|
153
214
|
cardNum: cardNum,
|
|
154
|
-
chapter: chapter,
|
|
155
215
|
languageId: languageId,
|
|
156
216
|
resourceId: resourceId,
|
|
157
217
|
resourceLink: resourceLink,
|
|
@@ -166,7 +226,8 @@ export default function ScriptureCard(_ref) {
|
|
|
166
226
|
httpConfig: httpConfig,
|
|
167
227
|
greekRepoUrl: greekRepoUrl,
|
|
168
228
|
hebrewRepoUrl: hebrewRepoUrl,
|
|
169
|
-
wholeBook: true
|
|
229
|
+
wholeBook: true,
|
|
230
|
+
readyForFetch: readyForFetch
|
|
170
231
|
}),
|
|
171
232
|
isNewTestament = _useScriptureSettings.isNewTestament,
|
|
172
233
|
scriptureConfig = _useScriptureSettings.scriptureConfig,
|
|
@@ -179,14 +240,15 @@ export default function ScriptureCard(_ref) {
|
|
|
179
240
|
var repo = "".concat(scriptureConfig === null || scriptureConfig === void 0 ? void 0 : (_scriptureConfig$reso = scriptureConfig.resource) === null || _scriptureConfig$reso === void 0 ? void 0 : _scriptureConfig$reso.languageId, "_").concat(scriptureConfig === null || scriptureConfig === void 0 ? void 0 : (_scriptureConfig$reso2 = scriptureConfig.resource) === null || _scriptureConfig$reso2 === void 0 ? void 0 : _scriptureConfig$reso2.projectId);
|
|
180
241
|
var reference_ = (scriptureConfig === null || scriptureConfig === void 0 ? void 0 : scriptureConfig.reference) || null;
|
|
181
242
|
React.useEffect(function () {
|
|
182
|
-
var _fetchResp_$data;
|
|
243
|
+
var _fetchResp_$data, _fetchResp_$data2;
|
|
183
244
|
|
|
184
245
|
// get the _sha from last scripture download
|
|
185
246
|
var _sha = (fetchResp_ === null || fetchResp_ === void 0 ? void 0 : (_fetchResp_$data = fetchResp_.data) === null || _fetchResp_$data === void 0 ? void 0 : _fetchResp_$data.sha) || null;
|
|
186
247
|
|
|
187
|
-
|
|
248
|
+
var url = (fetchResp_ === null || fetchResp_ === void 0 ? void 0 : (_fetchResp_$data2 = fetchResp_.data) === null || _fetchResp_$data2 === void 0 ? void 0 : _fetchResp_$data2.download_url) || null;
|
|
188
249
|
|
|
189
250
|
if (_sha !== sha) {
|
|
251
|
+
console.log("ScriptureCard: for ".concat(url, " ").concat(JSON.stringify(reference_), " new sha is ").concat(_sha));
|
|
190
252
|
setState({
|
|
191
253
|
sha: _sha
|
|
192
254
|
});
|
|
@@ -196,7 +258,8 @@ export default function ScriptureCard(_ref) {
|
|
|
196
258
|
var cardResourceId = (scriptureConfig === null || scriptureConfig === void 0 ? void 0 : (_scriptureConfig$reso3 = scriptureConfig.resource) === null || _scriptureConfig$reso3 === void 0 ? void 0 : _scriptureConfig$reso3.projectId) || resourceId; // @ts-ignore
|
|
197
259
|
|
|
198
260
|
var ref_ = (scriptureConfig === null || scriptureConfig === void 0 ? void 0 : (_scriptureConfig$reso4 = scriptureConfig.resource) === null || _scriptureConfig$reso4 === void 0 ? void 0 : _scriptureConfig$reso4.ref) || appRef;
|
|
199
|
-
var canUseEditBranch = loggedInUser && authentication && resourceId !== ORIGINAL_SOURCE && (
|
|
261
|
+
var canUseEditBranch = !!(loggedInUser && authentication && resourceId !== ORIGINAL_SOURCE && ( // TRICKY if not original language and we have login data, then we can use the edit branch
|
|
262
|
+
ref_ === 'master' || ref_.includes(loggedInUser))); // also make sure not a version tag
|
|
200
263
|
|
|
201
264
|
var _useUserBranch = useUserBranch({
|
|
202
265
|
appRef: appRef,
|
|
@@ -204,6 +267,7 @@ export default function ScriptureCard(_ref) {
|
|
|
204
267
|
bookId: bookId,
|
|
205
268
|
cardId: id,
|
|
206
269
|
cardResourceId: cardResourceId,
|
|
270
|
+
checkForEditBranch: checkForEditBranch,
|
|
207
271
|
languageId: languageId,
|
|
208
272
|
loggedInUser: canUseEditBranch ? loggedInUser : null,
|
|
209
273
|
owner: owner,
|
|
@@ -212,30 +276,65 @@ export default function ScriptureCard(_ref) {
|
|
|
212
276
|
useUserLocalStorage: useUserLocalStorage
|
|
213
277
|
}),
|
|
214
278
|
_useUserBranch$state = _useUserBranch.state,
|
|
279
|
+
branchDetermined = _useUserBranch$state.branchDetermined,
|
|
280
|
+
userEditBranchName = _useUserBranch$state.userEditBranchName,
|
|
281
|
+
_usingUserBranch = _useUserBranch$state.usingUserBranch,
|
|
215
282
|
workingResourceBranch = _useUserBranch$state.workingResourceBranch,
|
|
216
|
-
usingUserBranch_ = _useUserBranch$state.usingUserBranch,
|
|
217
283
|
startEditBranch = _useUserBranch.actions.startEdit;
|
|
218
284
|
|
|
219
285
|
var workingRef = canUseEditBranch ? workingResourceBranch : appRef;
|
|
220
286
|
var scriptureTitle;
|
|
287
|
+
|
|
288
|
+
if (!canUseEditBranch && !readyForFetch) {
|
|
289
|
+
// if bible not eligible for user branch, make sure it's ready
|
|
290
|
+
setState({
|
|
291
|
+
readyForFetch: true
|
|
292
|
+
});
|
|
293
|
+
}
|
|
294
|
+
|
|
221
295
|
React.useEffect(function () {
|
|
222
|
-
|
|
223
|
-
|
|
296
|
+
console.log("ScriptureCard book changed", {
|
|
297
|
+
bookId: bookId,
|
|
298
|
+
owner: owner,
|
|
299
|
+
languageId: languageId,
|
|
300
|
+
resourceId: resourceId
|
|
301
|
+
});
|
|
302
|
+
|
|
303
|
+
if (canUseEditBranch) {
|
|
304
|
+
// if bible eligible for user branch, refresh it
|
|
224
305
|
setState({
|
|
225
|
-
|
|
306
|
+
readyForFetch: false,
|
|
307
|
+
checkForEditBranch: checkForEditBranch + 1
|
|
226
308
|
});
|
|
227
309
|
}
|
|
228
|
-
}, [
|
|
310
|
+
}, [bookId, owner, languageId, resourceId]);
|
|
229
311
|
React.useEffect(function () {
|
|
230
|
-
|
|
231
|
-
|
|
312
|
+
if (!isEqual(reference, currentReference)) {
|
|
313
|
+
console.log("ScriptureCard reference changed", reference);
|
|
314
|
+
setState({
|
|
315
|
+
currentReference: reference
|
|
316
|
+
});
|
|
317
|
+
}
|
|
318
|
+
}, [reference]);
|
|
319
|
+
React.useEffect(function () {
|
|
320
|
+
// waiting for branch fetch to complete
|
|
321
|
+
console.log("ScriptureCard branchDetermined is ".concat(branchDetermined, " and workingRef is ").concat(workingRef, " and readyForFetch is ").concat(readyForFetch));
|
|
232
322
|
|
|
233
|
-
if (
|
|
323
|
+
if (!readyForFetch && branchDetermined) {
|
|
324
|
+
setState({
|
|
325
|
+
readyForFetch: true,
|
|
326
|
+
ref: workingRef
|
|
327
|
+
});
|
|
328
|
+
}
|
|
329
|
+
}, [branchDetermined]);
|
|
330
|
+
React.useEffect(function () {
|
|
331
|
+
// select correct working ref - could be master, user branch, or release
|
|
332
|
+
if (_usingUserBranch !== usingUserBranch) {
|
|
234
333
|
setState({
|
|
235
|
-
|
|
334
|
+
usingUserBranch: _usingUserBranch
|
|
236
335
|
});
|
|
237
336
|
}
|
|
238
|
-
}, [
|
|
337
|
+
}, [_usingUserBranch, usingUserBranch]);
|
|
239
338
|
React.useEffect(function () {
|
|
240
339
|
var _scriptureConfig$reso5;
|
|
241
340
|
|
|
@@ -290,7 +389,7 @@ export default function ScriptureCard(_ref) {
|
|
|
290
389
|
});
|
|
291
390
|
var direction = (language === null || language === void 0 ? void 0 : language.direction) || 'ltr';
|
|
292
391
|
|
|
293
|
-
var
|
|
392
|
+
var _reference = _objectSpread({}, scriptureConfig.reference);
|
|
294
393
|
|
|
295
394
|
var isHebrew = languageId_ === 'hbo';
|
|
296
395
|
var fontFactor = isHebrew ? 1.4 : 1; // we automatically scale up font size for Hebrew
|
|
@@ -391,7 +490,7 @@ export default function ScriptureCard(_ref) {
|
|
|
391
490
|
var scriptureAlignmentEditConfig = {
|
|
392
491
|
authentication: canUseEditBranch ? authentication : null,
|
|
393
492
|
bookIndex: bookIndex,
|
|
394
|
-
currentVerseRef:
|
|
493
|
+
currentVerseRef: _reference,
|
|
395
494
|
enableEdit: enableEdit,
|
|
396
495
|
enableAlignment: enableAlignment,
|
|
397
496
|
httpConfig: httpConfig,
|
|
@@ -510,40 +609,31 @@ export default function ScriptureCard(_ref) {
|
|
|
510
609
|
filepath: filepath,
|
|
511
610
|
repo: repo
|
|
512
611
|
}),
|
|
612
|
+
saveError = _useEdit.error,
|
|
613
|
+
isSaveError = _useEdit.isError,
|
|
513
614
|
onSaveEdit = _useEdit.onSaveEdit;
|
|
514
615
|
|
|
616
|
+
React.useEffect(function () {
|
|
617
|
+
// when we get a save saveError
|
|
618
|
+
if (saveError && isSaveError) {
|
|
619
|
+
console.log("save error", saveError); // onResourceError && onResourceError(null, false, null, `Error saving ${languageId_}_${resourceId} ${saveError}`, true)
|
|
620
|
+
}
|
|
621
|
+
}, [saveError, isSaveError]);
|
|
515
622
|
React.useEffect(function () {
|
|
516
623
|
// when startSave goes true, save edits to user branch and then clear startSave
|
|
517
624
|
var _saveEdit = /*#__PURE__*/function () {
|
|
518
625
|
var _ref4 = _asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee2() {
|
|
519
|
-
var branch;
|
|
520
626
|
return regeneratorRuntime.wrap(function _callee2$(_context2) {
|
|
521
627
|
while (1) {
|
|
522
628
|
switch (_context2.prev = _context2.next) {
|
|
523
629
|
case 0:
|
|
524
630
|
// begin uploading new USFM
|
|
525
|
-
|
|
526
|
-
|
|
527
|
-
|
|
528
|
-
_context2.next = 5;
|
|
529
|
-
break;
|
|
530
|
-
}
|
|
531
|
-
|
|
532
|
-
_context2.next = 4;
|
|
533
|
-
return startEditBranch();
|
|
534
|
-
|
|
535
|
-
case 4:
|
|
536
|
-
branch = _context2.sent;
|
|
537
|
-
|
|
538
|
-
case 5:
|
|
539
|
-
_context2.next = 7;
|
|
540
|
-
return onSaveEdit(branch).then(function (success) {
|
|
631
|
+
console.info("saveChangesToCloud() - Using sha: ".concat(sha));
|
|
632
|
+
_context2.next = 3;
|
|
633
|
+
return onSaveEdit(userEditBranchName).then(function (success) {
|
|
541
634
|
// push changed to server
|
|
542
635
|
if (success) {
|
|
543
636
|
console.log("saveChangesToCloud() - save scripture edits success");
|
|
544
|
-
setState({
|
|
545
|
-
startSave: false
|
|
546
|
-
});
|
|
547
637
|
var unsavedCardIndices = Object.keys(unsavedChangesList);
|
|
548
638
|
|
|
549
639
|
if (unsavedCardIndices !== null && unsavedCardIndices !== void 0 && unsavedCardIndices.length) {
|
|
@@ -564,7 +654,14 @@ export default function ScriptureCard(_ref) {
|
|
|
564
654
|
}
|
|
565
655
|
|
|
566
656
|
console.info('saveChangesToCloud() - Reloading resource');
|
|
567
|
-
|
|
657
|
+
setState({
|
|
658
|
+
startSave: false,
|
|
659
|
+
readyForFetch: true,
|
|
660
|
+
ref: userEditBranchName
|
|
661
|
+
});
|
|
662
|
+
delay(500).then(function () {
|
|
663
|
+
scriptureConfig === null || scriptureConfig === void 0 ? void 0 : scriptureConfig.reloadResource();
|
|
664
|
+
});
|
|
568
665
|
} else {
|
|
569
666
|
console.error('saveChangesToCloud() - saving changed scripture failed');
|
|
570
667
|
setState({
|
|
@@ -573,7 +670,7 @@ export default function ScriptureCard(_ref) {
|
|
|
573
670
|
}
|
|
574
671
|
});
|
|
575
672
|
|
|
576
|
-
case
|
|
673
|
+
case 3:
|
|
577
674
|
case "end":
|
|
578
675
|
return _context2.stop();
|
|
579
676
|
}
|
|
@@ -587,11 +684,17 @@ export default function ScriptureCard(_ref) {
|
|
|
587
684
|
}();
|
|
588
685
|
|
|
589
686
|
if (startSave) {
|
|
590
|
-
|
|
591
|
-
|
|
592
|
-
|
|
687
|
+
if (!editBranchReady) {
|
|
688
|
+
console.log("saveChangesToCloud - edit branch not yet created");
|
|
689
|
+
} else if (!sha) {
|
|
690
|
+
console.log("saveChangesToCloud - save sha not yet ready");
|
|
691
|
+
} else {
|
|
692
|
+
console.log("saveChangesToCloud - calling _saveEdit()");
|
|
693
|
+
|
|
694
|
+
_saveEdit();
|
|
695
|
+
}
|
|
593
696
|
}
|
|
594
|
-
}, [startSave]);
|
|
697
|
+
}, [startSave, editBranchReady, sha]);
|
|
595
698
|
/**
|
|
596
699
|
* convert updatedVerseObjects to USFM and merge into the bibleUsfm
|
|
597
700
|
* @param {string} bibleUsfm - USFM of bible
|
|
@@ -628,6 +731,41 @@ export default function ScriptureCard(_ref) {
|
|
|
628
731
|
React.useEffect(function () {
|
|
629
732
|
// for each unsaved change, call into versePane to get latest changes for verse to save
|
|
630
733
|
if (saveClicked) {
|
|
734
|
+
var createEditBranch = !_usingUserBranch;
|
|
735
|
+
|
|
736
|
+
if (!createEditBranch) {
|
|
737
|
+
// if already using the user branch
|
|
738
|
+
if (workingResourceBranch !== userEditBranchName) {
|
|
739
|
+
console.warn("saveChangesToCloud - state conflict - should be in user branch ".concat(userEditBranchName, ", but actually using ").concat(workingResourceBranch));
|
|
740
|
+
createEditBranch = true;
|
|
741
|
+
} else {
|
|
742
|
+
console.log("saveChangesToCloud - already using edit branch: ".concat(workingResourceBranch));
|
|
743
|
+
setState({
|
|
744
|
+
editBranchReady: true
|
|
745
|
+
});
|
|
746
|
+
}
|
|
747
|
+
}
|
|
748
|
+
|
|
749
|
+
if (createEditBranch) {
|
|
750
|
+
// if not using the user branch, create it
|
|
751
|
+
console.log("saveChangesToCloud - creating edit branch");
|
|
752
|
+
setState({
|
|
753
|
+
editBranchReady: false,
|
|
754
|
+
readyForFetch: false,
|
|
755
|
+
sha: null
|
|
756
|
+
}); // we will need a new sha for book/branch
|
|
757
|
+
|
|
758
|
+
startEditBranch().then(function (success) {
|
|
759
|
+
if (success) {
|
|
760
|
+
console.log("saveChangesToCloud - edit branch created");
|
|
761
|
+
setState({
|
|
762
|
+
editBranchReady: true,
|
|
763
|
+
readyForFetch: true
|
|
764
|
+
});
|
|
765
|
+
}
|
|
766
|
+
});
|
|
767
|
+
}
|
|
768
|
+
|
|
631
769
|
var unsavedCardIndices = Object.keys(unsavedChangesList);
|
|
632
770
|
|
|
633
771
|
if (unsavedCardIndices !== null && unsavedCardIndices !== void 0 && unsavedCardIndices.length) {
|
|
@@ -737,50 +875,186 @@ export default function ScriptureCard(_ref) {
|
|
|
737
875
|
});
|
|
738
876
|
}
|
|
739
877
|
}
|
|
740
|
-
}, [saveClicked]);
|
|
878
|
+
}, [saveClicked]); // @ts-ignore
|
|
879
|
+
|
|
880
|
+
var _ref7 = _reference || {},
|
|
881
|
+
chapter = _ref7.chapter,
|
|
882
|
+
verse = _ref7.verse;
|
|
883
|
+
|
|
741
884
|
React.useEffect(function () {
|
|
742
|
-
|
|
743
|
-
var _versesForRef = scriptureConfig === null || scriptureConfig === void 0 ? void 0 : scriptureConfig.versesForRef;
|
|
885
|
+
var _versesForRef = scriptureConfig === null || scriptureConfig === void 0 ? void 0 : scriptureConfig.versesForRef;
|
|
744
886
|
|
|
745
|
-
|
|
746
|
-
|
|
747
|
-
|
|
887
|
+
var newSelections = new Map();
|
|
888
|
+
var updateSelections = false;
|
|
889
|
+
var _map = newSelections;
|
|
890
|
+
var originalBookId = originalVerseObjects === null || originalVerseObjects === void 0 ? void 0 : originalVerseObjects.bookId;
|
|
891
|
+
var bookVerseObject = originalVerseObjects === null || originalVerseObjects === void 0 ? void 0 : originalVerseObjects.chapters;
|
|
892
|
+
var newSelectedQuote = null; // if we have everything we need to calculate selections
|
|
893
|
+
|
|
894
|
+
if (_versesForRef !== null && _versesForRef !== void 0 && _versesForRef.length && bookVerseObject && bookId === originalBookId && bookVerseObject[chapter] && // we need to have data for chapter
|
|
895
|
+
selectedQuote !== null && selectedQuote !== void 0 && selectedQuote.quote) {
|
|
896
|
+
// if quote is different than last
|
|
897
|
+
if (!isEqual(lastSelectedQuote, selectedQuote) || !isEqual(versesForRef, _versesForRef)) {
|
|
898
|
+
var _selectedQuote$refere3;
|
|
899
|
+
|
|
900
|
+
var originalVerses = {};
|
|
901
|
+
var substitute = {}; // keep track of verse substitutions
|
|
902
|
+
|
|
903
|
+
var startVerse = _versesForRef[0].verse;
|
|
904
|
+
|
|
905
|
+
if (typeof startVerse === 'string') {
|
|
906
|
+
startVerse = parseInt(startVerse);
|
|
907
|
+
}
|
|
908
|
+
|
|
909
|
+
var lastVerse = startVerse;
|
|
910
|
+
|
|
911
|
+
for (var i = 0, l = _versesForRef.length; i < l; i++) {
|
|
912
|
+
var verseRef = _versesForRef[i];
|
|
913
|
+
var _chapter2 = verseRef.chapter,
|
|
914
|
+
_verse2 = verseRef.verse; // TRICKY - we remap verses in reference range to a linear series of verses so verse spans don't choke getQuoteMatchesInBookRef
|
|
915
|
+
|
|
916
|
+
var _verse = startVerse + i;
|
|
917
|
+
|
|
918
|
+
lastVerse = _verse;
|
|
919
|
+
substitute["".concat(_chapter2, ":").concat(_verse)] = "".concat(_chapter2, ":").concat(_verse2);
|
|
920
|
+
|
|
921
|
+
if (!originalVerses[_chapter2]) {
|
|
922
|
+
originalVerses[_chapter2] = {};
|
|
923
|
+
}
|
|
748
924
|
|
|
749
|
-
|
|
750
|
-
_step5;
|
|
925
|
+
var verseObjects = [];
|
|
751
926
|
|
|
752
|
-
|
|
753
|
-
|
|
754
|
-
var verseRef = _step5.value;
|
|
755
|
-
// check for verse range
|
|
756
|
-
var _verse = verseRef.verse;
|
|
927
|
+
if (typeof _verse2 === 'string' && _verse2.includes('-')) {
|
|
928
|
+
var verses = getVerses(bookVerseObject, "".concat(_chapter2, ":").concat(_verse2));
|
|
757
929
|
|
|
758
|
-
|
|
759
|
-
|
|
760
|
-
if (_verse.includes('-')) {
|
|
761
|
-
var _scriptureConfig$refe2;
|
|
930
|
+
var _iterator5 = _createForOfIteratorHelper(verses),
|
|
931
|
+
_step5;
|
|
762
932
|
|
|
763
|
-
|
|
933
|
+
try {
|
|
934
|
+
for (_iterator5.s(); !(_step5 = _iterator5.n()).done;) {
|
|
935
|
+
var verseItem = _step5.value;
|
|
936
|
+
var vo = verseItem.verseData.verseObjects;
|
|
937
|
+
verseObjects = verseObjects.concat(vo);
|
|
938
|
+
}
|
|
939
|
+
} catch (err) {
|
|
940
|
+
_iterator5.e(err);
|
|
941
|
+
} finally {
|
|
942
|
+
_iterator5.f();
|
|
764
943
|
}
|
|
944
|
+
} else {
|
|
945
|
+
var _bookVerseObject$_cha;
|
|
946
|
+
|
|
947
|
+
verseObjects = (_bookVerseObject$_cha = bookVerseObject[_chapter2][_verse2]) === null || _bookVerseObject$_cha === void 0 ? void 0 : _bookVerseObject$_cha.verseObjects;
|
|
948
|
+
}
|
|
949
|
+
|
|
950
|
+
if (verseObjects) {
|
|
951
|
+
verseObjects = cleanupVerseObjects(verseObjects);
|
|
952
|
+
originalVerses[_chapter2][_verse] = {
|
|
953
|
+
verseObjects: verseObjects
|
|
954
|
+
};
|
|
955
|
+
|
|
956
|
+
_map.set("".concat(_chapter2, ":").concat(_verse2), verseObjects);
|
|
765
957
|
}
|
|
958
|
+
} // create new reference range for new linear verse range
|
|
959
|
+
|
|
960
|
+
|
|
961
|
+
var _selectedQuote$refere = selectedQuote === null || selectedQuote === void 0 ? void 0 : (_selectedQuote$refere3 = selectedQuote.reference) === null || _selectedQuote$refere3 === void 0 ? void 0 : _selectedQuote$refere3.split(':'),
|
|
962
|
+
_selectedQuote$refere2 = _slicedToArray(_selectedQuote$refere, 1),
|
|
963
|
+
_chapter = _selectedQuote$refere2[0];
|
|
964
|
+
|
|
965
|
+
var subRef = "".concat(_chapter, ":").concat(startVerse);
|
|
966
|
+
|
|
967
|
+
if (lastVerse != startVerse) {
|
|
968
|
+
subRef += "-".concat(lastVerse);
|
|
969
|
+
}
|
|
970
|
+
|
|
971
|
+
var quoteMatches = getQuoteMatchesInBookRef({
|
|
972
|
+
bookObject: originalVerses,
|
|
973
|
+
ref: subRef,
|
|
974
|
+
quote: selectedQuote === null || selectedQuote === void 0 ? void 0 : selectedQuote.quote,
|
|
975
|
+
occurrence: selectedQuote === null || selectedQuote === void 0 ? void 0 : selectedQuote.occurrence
|
|
976
|
+
});
|
|
977
|
+
|
|
978
|
+
var _selections = new Map();
|
|
979
|
+
|
|
980
|
+
if (quoteMatches !== null && quoteMatches !== void 0 && quoteMatches.size) {
|
|
981
|
+
quoteMatches.forEach(function (words, key) {
|
|
982
|
+
var _key = substitute[key];
|
|
983
|
+
|
|
984
|
+
_selections.set(_key, words.map(function (word) {
|
|
985
|
+
return _objectSpread(_objectSpread({}, word), {}, {
|
|
986
|
+
text: core.normalizeString(word.text)
|
|
987
|
+
});
|
|
988
|
+
}));
|
|
989
|
+
});
|
|
766
990
|
}
|
|
767
|
-
|
|
768
|
-
|
|
769
|
-
|
|
770
|
-
|
|
991
|
+
|
|
992
|
+
newSelections = _selections;
|
|
993
|
+
newSelectedQuote = selectedQuote;
|
|
994
|
+
updateSelections = true;
|
|
995
|
+
}
|
|
996
|
+
}
|
|
997
|
+
|
|
998
|
+
var newState = {}; // update states that have changed
|
|
999
|
+
|
|
1000
|
+
if (!areMapsTheSame(verseObjectsMap, _map)) {
|
|
1001
|
+
newState.verseObjectsMap = _map;
|
|
1002
|
+
}
|
|
1003
|
+
|
|
1004
|
+
if (!isEqual(Object.keys(versesForRef || {}), Object.keys(_versesForRef || {}))) {
|
|
1005
|
+
newState.versesForRef = _versesForRef;
|
|
1006
|
+
newState.lastSelectedQuote = newSelectedQuote;
|
|
1007
|
+
newState.selections = newSelections;
|
|
1008
|
+
}
|
|
1009
|
+
|
|
1010
|
+
if (newSelectedQuote) {
|
|
1011
|
+
newState.lastSelectedQuote = newSelectedQuote;
|
|
1012
|
+
}
|
|
1013
|
+
|
|
1014
|
+
if (updateSelections) {
|
|
1015
|
+
if (!areMapsTheSame(selections || new Map(), newSelections)) {
|
|
1016
|
+
newState.selections = newSelections;
|
|
771
1017
|
}
|
|
772
1018
|
}
|
|
773
|
-
|
|
774
|
-
|
|
1019
|
+
|
|
1020
|
+
if (Object.keys(newState).length) {
|
|
1021
|
+
setState(newState);
|
|
1022
|
+
}
|
|
1023
|
+
}, [owner, resourceId, bookId, languageId_, scriptureConfig === null || scriptureConfig === void 0 ? void 0 : scriptureConfig.versesForRef, originalVerseObjects, selectedQuote]);
|
|
1024
|
+
React.useEffect(function () {
|
|
1025
|
+
setState({
|
|
1026
|
+
versesAlignmentStatus: null
|
|
1027
|
+
});
|
|
1028
|
+
}, [verse]);
|
|
1029
|
+
|
|
1030
|
+
var updateVersesAlignmentStatus = function updateVersesAlignmentStatus(reference, aligned) {
|
|
1031
|
+
setState_(function (prevState) {
|
|
1032
|
+
return _objectSpread(_objectSpread({}, prevState), {}, {
|
|
1033
|
+
versesAlignmentStatus: _objectSpread(_objectSpread({}, prevState.versesAlignmentStatus), {}, _defineProperty({}, "".concat(reference.chapter, ":").concat(reference.verse), aligned))
|
|
1034
|
+
});
|
|
1035
|
+
});
|
|
1036
|
+
};
|
|
1037
|
+
|
|
1038
|
+
var _versesForRef = scriptureConfig === null || scriptureConfig === void 0 ? void 0 : scriptureConfig.versesForRef;
|
|
1039
|
+
|
|
1040
|
+
if (!((_versesForRef2 = _versesForRef) !== null && _versesForRef2 !== void 0 && _versesForRef2.length)) {
|
|
1041
|
+
// if empty of references, create single empty reference
|
|
1042
|
+
_versesForRef = [_objectSpread({}, reference)];
|
|
1043
|
+
}
|
|
1044
|
+
|
|
1045
|
+
React.useEffect(function () {
|
|
1046
|
+
console.log("_versesForRef changed", scriptureConfig);
|
|
1047
|
+
}, [_versesForRef]);
|
|
1048
|
+
var renderedScripturePanes = (_versesForRef3 = _versesForRef) === null || _versesForRef3 === void 0 ? void 0 : _versesForRef3.map(function (_currentVerseData, index) {
|
|
775
1049
|
var _currentVerseData$ver;
|
|
776
1050
|
|
|
777
|
-
var initialVerseObjects = (_currentVerseData === null || _currentVerseData === void 0 ? void 0 : (_currentVerseData$ver = _currentVerseData.verseData) === null || _currentVerseData$ver === void 0 ? void 0 : _currentVerseData$ver.verseObjects) ||
|
|
1051
|
+
var initialVerseObjects = (_currentVerseData === null || _currentVerseData === void 0 ? void 0 : (_currentVerseData$ver = _currentVerseData.verseData) === null || _currentVerseData$ver === void 0 ? void 0 : _currentVerseData$ver.verseObjects) || []; // @ts-ignore
|
|
778
1052
|
|
|
779
|
-
var
|
|
780
|
-
chapter =
|
|
781
|
-
verse =
|
|
1053
|
+
var _ref8 = _currentVerseData || {},
|
|
1054
|
+
chapter = _ref8.chapter,
|
|
1055
|
+
verse = _ref8.verse;
|
|
782
1056
|
|
|
783
|
-
var _reference = _objectSpread(_objectSpread({},
|
|
1057
|
+
var _reference = _objectSpread(_objectSpread({}, _versesForRef), {}, {
|
|
784
1058
|
chapter: chapter,
|
|
785
1059
|
verse: verse
|
|
786
1060
|
});
|
|
@@ -791,9 +1065,16 @@ export default function ScriptureCard(_ref) {
|
|
|
791
1065
|
reference: _reference
|
|
792
1066
|
});
|
|
793
1067
|
|
|
1068
|
+
var isVerseSelectedForAlignment = false;
|
|
1069
|
+
|
|
1070
|
+
if (verseSelectedForAlignment) {
|
|
1071
|
+
isVerseSelectedForAlignment = verseSelectedForAlignment.chapter === chapter && verseSelectedForAlignment.verse === verse;
|
|
1072
|
+
}
|
|
1073
|
+
|
|
794
1074
|
return /*#__PURE__*/React.createElement(ScripturePane, _extends({}, scriptureConfig, {
|
|
795
1075
|
contentStyle: contentStyle,
|
|
796
1076
|
currentIndex: index,
|
|
1077
|
+
determiningBranch: !readyForFetch,
|
|
797
1078
|
direction: direction,
|
|
798
1079
|
disableWordPopover: disableWordPopover_,
|
|
799
1080
|
fontSize: fontSize,
|
|
@@ -807,10 +1088,84 @@ export default function ScriptureCard(_ref) {
|
|
|
807
1088
|
scriptureAlignmentEditConfig: _scriptureAlignmentEditConfig,
|
|
808
1089
|
setWordAlignerStatus: setWordAlignerStatus,
|
|
809
1090
|
server: server,
|
|
810
|
-
translate: translate
|
|
1091
|
+
translate: translate,
|
|
1092
|
+
isVerseSelectedForAlignment: isVerseSelectedForAlignment,
|
|
1093
|
+
onAlignmentFinish: function onAlignmentFinish() {
|
|
1094
|
+
return setState({
|
|
1095
|
+
verseSelectedForAlignment: null
|
|
1096
|
+
});
|
|
1097
|
+
},
|
|
1098
|
+
updateVersesAlignmentStatus: updateVersesAlignmentStatus,
|
|
1099
|
+
setOriginalScriptureResource: !index && setOriginalScriptureResource
|
|
811
1100
|
}));
|
|
812
1101
|
});
|
|
813
|
-
|
|
1102
|
+
|
|
1103
|
+
var handleAlignButtonClick = function handleAlignButtonClick() {
|
|
1104
|
+
if ((versesForRef === null || versesForRef === void 0 ? void 0 : versesForRef.length) > 1) {
|
|
1105
|
+
setState({
|
|
1106
|
+
showAlignmentPopup: true
|
|
1107
|
+
});
|
|
1108
|
+
} else if ((versesForRef === null || versesForRef === void 0 ? void 0 : versesForRef.length) === 1) {
|
|
1109
|
+
setState({
|
|
1110
|
+
verseSelectedForAlignment: versesForRef[0]
|
|
1111
|
+
});
|
|
1112
|
+
}
|
|
1113
|
+
};
|
|
1114
|
+
|
|
1115
|
+
var onRenderToolbar = function onRenderToolbar(_ref9) {
|
|
1116
|
+
var items = _ref9.items;
|
|
1117
|
+
|
|
1118
|
+
var newItems = _toConsumableArray(items);
|
|
1119
|
+
|
|
1120
|
+
var allVersesAligned = false; // Check if all values in versesAlignmentStatus are true
|
|
1121
|
+
|
|
1122
|
+
if (versesAlignmentStatus) {
|
|
1123
|
+
allVersesAligned = Object.values(versesAlignmentStatus).every(function (alignStatus) {
|
|
1124
|
+
return alignStatus === true;
|
|
1125
|
+
});
|
|
1126
|
+
}
|
|
1127
|
+
|
|
1128
|
+
var alignIcon = null;
|
|
1129
|
+
var alignButtonText = '';
|
|
1130
|
+
|
|
1131
|
+
if (allVersesAligned) {
|
|
1132
|
+
alignIcon = /*#__PURE__*/React.createElement(RxLink2, {
|
|
1133
|
+
id: "valid_icon_".concat(resourceId),
|
|
1134
|
+
color: "#BBB"
|
|
1135
|
+
});
|
|
1136
|
+
alignButtonText = 'Alignment is Valid';
|
|
1137
|
+
} else {
|
|
1138
|
+
alignIcon = /*#__PURE__*/React.createElement(RxLinkBreak2, {
|
|
1139
|
+
id: "invalid_alignment_icon_".concat(resourceId),
|
|
1140
|
+
color: "#000"
|
|
1141
|
+
});
|
|
1142
|
+
alignButtonText = 'Alignment is Invalid';
|
|
1143
|
+
}
|
|
1144
|
+
|
|
1145
|
+
if (setWordAlignerStatus && resourceId !== 'ORIGINAL_SOURCE') {
|
|
1146
|
+
newItems.push( /*#__PURE__*/React.createElement(IconButton, {
|
|
1147
|
+
id: "alignment_icon_".concat(resourceId),
|
|
1148
|
+
key: "checking-button",
|
|
1149
|
+
onClick: handleAlignButtonClick,
|
|
1150
|
+
title: alignButtonText,
|
|
1151
|
+
"aria-label": alignButtonText,
|
|
1152
|
+
style: {
|
|
1153
|
+
cursor: 'pointer'
|
|
1154
|
+
}
|
|
1155
|
+
}, alignIcon));
|
|
1156
|
+
}
|
|
1157
|
+
|
|
1158
|
+
return newItems;
|
|
1159
|
+
};
|
|
1160
|
+
|
|
1161
|
+
return /*#__PURE__*/React.createElement(SelectionsContextProvider, {
|
|
1162
|
+
selections: selections,
|
|
1163
|
+
onSelections: function onSelections(newSelections) {// console.log('onSelections', newSelections)
|
|
1164
|
+
},
|
|
1165
|
+
quote: selectedQuote === null || selectedQuote === void 0 ? void 0 : selectedQuote.quote,
|
|
1166
|
+
occurrence: fixOccurrence(selectedQuote === null || selectedQuote === void 0 ? void 0 : selectedQuote.occurrence),
|
|
1167
|
+
verseObjectsMap: verseObjectsMap
|
|
1168
|
+
}, /*#__PURE__*/React.createElement(Card, {
|
|
814
1169
|
id: "scripture_card_".concat(cardNum),
|
|
815
1170
|
title: scriptureLabel,
|
|
816
1171
|
settingsTitle: scriptureTitle + ' Settings',
|
|
@@ -837,10 +1192,27 @@ export default function ScriptureCard(_ref) {
|
|
|
837
1192
|
return setState({
|
|
838
1193
|
saveClicked: true
|
|
839
1194
|
});
|
|
840
|
-
}
|
|
1195
|
+
},
|
|
1196
|
+
onRenderToolbar: onRenderToolbar
|
|
841
1197
|
}, /*#__PURE__*/React.createElement("div", {
|
|
842
1198
|
id: "scripture-pane-list"
|
|
843
|
-
}, renderedScripturePanes))
|
|
1199
|
+
}, renderedScripturePanes)), /*#__PURE__*/React.createElement(VerseSelectorPopup, {
|
|
1200
|
+
resourceId: resourceId,
|
|
1201
|
+
open: showAlignmentPopup,
|
|
1202
|
+
onClose: function onClose() {
|
|
1203
|
+
return setState({
|
|
1204
|
+
showAlignmentPopup: false
|
|
1205
|
+
});
|
|
1206
|
+
},
|
|
1207
|
+
versesForRef: versesForRef,
|
|
1208
|
+
versesAlignmentStatus: versesAlignmentStatus,
|
|
1209
|
+
onVerseSelect: function onVerseSelect(verse) {
|
|
1210
|
+
return setState({
|
|
1211
|
+
verseSelectedForAlignment: verse,
|
|
1212
|
+
showAlignmentPopup: false
|
|
1213
|
+
});
|
|
1214
|
+
}
|
|
1215
|
+
}));
|
|
844
1216
|
}
|
|
845
1217
|
ScriptureCard.propTypes = {
|
|
846
1218
|
/** html identifier to use for card */
|
|
@@ -940,10 +1312,10 @@ ScriptureCard.propTypes = {
|
|
|
940
1312
|
/** index for current book (e.g. '01' for 'gen')*/
|
|
941
1313
|
bookIndex: PropTypes.string,
|
|
942
1314
|
|
|
943
|
-
/** callback to indicate that we are using a verse range here */
|
|
944
|
-
addVerseRange: PropTypes.func,
|
|
945
|
-
|
|
946
1315
|
/** callback to update word aligner state */
|
|
947
|
-
setWordAlignerStatus: PropTypes.func
|
|
1316
|
+
setWordAlignerStatus: PropTypes.func,
|
|
1317
|
+
|
|
1318
|
+
/**This is currently selected quote */
|
|
1319
|
+
selectedQuote: PropTypes.object
|
|
948
1320
|
};
|
|
949
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jb21wb25lbnRzL1NjcmlwdHVyZUNhcmQvU2NyaXB0dXJlQ2FyZC50c3giXSwibmFtZXMiOlsiUmVhY3QiLCJQcm9wVHlwZXMiLCJjb3JlIiwidXNmbWpzIiwidXNlRWRpdCIsIkNhcmQiLCJ1c2VDYXJkU3RhdGUiLCJ1c2VVc2VyQnJhbmNoIiwiRVJST1JfU1RBVEUiLCJNQU5JRkVTVF9OT1RfTE9BREVEX0VSUk9SIiwiQWxpZ25tZW50SGVscGVycyIsIlVzZm1GaWxlQ29udmVyc2lvbkhlbHBlcnMiLCJpc0VxdWFsIiwiU2NyaXB0dXJlUGFuZSIsIlNjcmlwdHVyZVNlbGVjdG9yIiwidXNlU2NyaXB0dXJlU2V0dGluZ3MiLCJnZXRSZXNvdXJjZUxpbmsiLCJnZXRSZXNvdXJjZU1lc3NhZ2UiLCJnZXRTY3JpcHR1cmVWZXJzaW9uU2V0dGluZ3MiLCJpc09yaWdpbmFsQmlibGUiLCJUaXRsZSIsIk5UX09SSUdfTEFORyIsIk9SSUdJTkFMX1NPVVJDRSIsIk9UX09SSUdfTEFORyIsIktFWV9GT05UX1NJWkVfQkFTRSIsImxhYmVsIiwic3R5bGUiLCJtYXJnaW5Ub3AiLCJ3aWR0aCIsIlNjcmlwdHVyZUNhcmQiLCJpZCIsImlzTlQiLCJ0aXRsZSIsInNlcnZlciIsImFwcFJlZiIsImNhcmROdW0iLCJjbGFzc2VzIiwicmVzb3VyY2UiLCJvd25lciIsImxhbmd1YWdlSWQiLCJyZXNvdXJjZUlkIiwib3JpZ2luYWxMYW5ndWFnZU93bmVyIiwiZ2V0TGFuZ3VhZ2UiLCJyZWZlcmVuY2UiLCJ2ZXJzZSIsImNoYXB0ZXIiLCJib29rSWQiLCJwcm9qZWN0SWQiLCJyZXNvdXJjZUxpbmsiLCJ1c2VVc2VyTG9jYWxTdG9yYWdlIiwiZGlzYWJsZVdvcmRQb3BvdmVyIiwib25SZXNvdXJjZUVycm9yIiwiaHR0cENvbmZpZyIsImdyZWVrUmVwb1VybCIsImhlYnJld1JlcG9VcmwiLCJnZXRMZXhpY29uRGF0YSIsImZldGNoR2xvc3Nlc0ZvclZlcnNlIiwidHJhbnNsYXRlIiwib25NaW5pbWl6ZSIsImxvZ2dlZEluVXNlciIsImF1dGhlbnRpY2F0aW9uIiwic2V0U2F2ZWRDaGFuZ2VzIiwiYm9va0luZGV4IiwiYWRkVmVyc2VSYW5nZSIsInNldFdvcmRBbGlnbmVyU3RhdHVzIiwidXNlU3RhdGUiLCJoYXZlVW5zYXZlZENoYW5nZXMiLCJyZWYiLCJzYXZlQ2xpY2tlZCIsInNhdmVDb250ZW50Iiwic2hhIiwic3RhcnRTYXZlIiwidXJsRXJyb3IiLCJ1c2luZ1VzZXJCcmFuY2giLCJ1bnNhdmVkQ2hhbmdlc0xpc3QiLCJ2ZXJzZXNGb3JSZWYiLCJzdGF0ZSIsInNldFN0YXRlXyIsImZvbnRTaXplIiwic2V0Rm9udFNpemUiLCJpc05UXyIsInNldFN0YXRlIiwibmV3U3RhdGUiLCJwcmV2U3RhdGUiLCJjYWNoZSIsIm1heEFnZSIsInNldFVybEVycm9yIiwiZXJyb3IiLCJ3aG9sZUJvb2siLCJpc05ld1Rlc3RhbWVudCIsInNjcmlwdHVyZUNvbmZpZyIsInNldFNjcmlwdHVyZSIsInNjcmlwdHVyZVNldHRpbmdzIiwic2NyaXB0dXJlVmVyc2lvbkhpc3QiLCJmZXRjaFJlc3BfIiwiZmV0Y2hSZXNwb25zZSIsInJlcG8iLCJyZWZlcmVuY2VfIiwidXNlRWZmZWN0IiwiX3NoYSIsImRhdGEiLCJjb25zb2xlIiwibG9nIiwiSlNPTiIsInN0cmluZ2lmeSIsImNhcmRSZXNvdXJjZUlkIiwicmVmXyIsImNhblVzZUVkaXRCcmFuY2giLCJpbmNsdWRlcyIsImNhcmRJZCIsIndvcmtpbmdSZXNvdXJjZUJyYW5jaCIsInVzaW5nVXNlckJyYW5jaF8iLCJzdGFydEVkaXRCcmFuY2giLCJhY3Rpb25zIiwic3RhcnRFZGl0Iiwid29ya2luZ1JlZiIsInNjcmlwdHVyZVRpdGxlIiwid29ya2luZ1JlZl8iLCJyZXNvdXJjZVN0YXR1cyIsIm1lc3NhZ2UiLCJpc0FjY2Vzc0Vycm9yIiwidmVyc2lvbiIsInVwZGF0ZVRpdGxlIiwiZ2V0U2NyaXB0dXJlU2VsZWN0b3IiLCJzY3JpcHR1cmVTZWxlY3Rpb25Db25maWciLCJvbk1lbnVDbG9zZSIsImxhbmd1YWdlSWRfIiwibGFuZ3VhZ2UiLCJkaXJlY3Rpb24iLCJpc0hlYnJldyIsImZvbnRGYWN0b3IiLCJzY2FsZWRGb250U2l6ZSIsIml0ZW1zIiwiaGVhZGVycyIsImZpbHRlcnMiLCJpdGVtSW5kZXgiLCJtYXJrZG93blZpZXciLCJzZXRGaWx0ZXJzIiwic2V0SXRlbUluZGV4Iiwic2V0TWFya2Rvd25WaWV3IiwicmVmU3R5bGUiLCJ1c2VNZW1vIiwiZm9udEZhbWlseSIsIk1hdGgiLCJyb3VuZCIsImNvbnRlbnRTdHlsZSIsInNjcmlwdHVyZUxhYmVsIiwiZGlzYWJsZVdvcmRQb3BvdmVyXyIsInVzaW5nT3JpZ2luYWxCaWJsZSIsInVuZGVmaW5lZCIsImZldGNoR2xvc3NEYXRhRm9yVmVyc2UiLCJ2ZXJzZU9iamVjdHMiLCJ2ZXJzZVJlZiIsIl92ZXJzZU9iamVjdHMiLCJ2ZXJzZURhdGEiLCJjb25jYXQiLCJsZW5ndGgiLCJlbmFibGVFZGl0IiwiZW5hYmxlQWxpZ25tZW50Iiwib3JpZ2luYWxSZXBvVXJsIiwic2NyaXB0dXJlQWxpZ25tZW50RWRpdENvbmZpZyIsImN1cnJlbnRWZXJzZVJlZiIsIl9zZXRTYXZlZENoYW5nZXMiLCJzb3VyY2VMYW5ndWFnZSIsInRhcmdldExhbmd1YWdlIiwiY3VycmVudEluZGV4Iiwic2F2ZWQiLCJnZXRDaGFuZ2VzIiwiY2xlYXJDaGFuZ2VzIiwiX3Vuc2F2ZWRDaGFuZ2VzTGlzdCIsImhhc093blByb3BlcnR5IiwiX2hhdmVVbnNhdmVkQ2hhbmdlcyIsIk9iamVjdCIsImtleXMiLCJmaW5kUmVmSW5BcnJheSIsImZpbmRJdGVtIiwiY2h1bmtzIiwicmVmTGVuIiwiaW5kZXgiLCJmaW5kSW5kZXgiLCJjaHVuayIsImlkeCIsInN1YnN0cmluZyIsIm5leHRDaGFyIiwiZ2V0Qm9va05hbWUiLCJib29rQ2FwcyIsInRvVXBwZXJDYXNlIiwiZmlsZXBhdGgiLCJjb250ZW50IiwiY29uZmlnIiwidG9rZW4iLCJ0aW1lb3V0Iiwic2VydmVyVGltZU91dCIsImF1dGhvciIsImJyYW5jaCIsIm9uU2F2ZUVkaXQiLCJfc2F2ZUVkaXQiLCJ0aGVuIiwic3VjY2VzcyIsInVuc2F2ZWRDYXJkSW5kaWNlcyIsImNhcmRJbmRleCIsImluZm8iLCJyZWxvYWRSZXNvdXJjZSIsIm1lcmdlVmVyc2VPYmplY3RzSW50b0JpYmxlVXNmbSIsImJpYmxlVXNmbSIsInVwZGF0ZWRWZXJzZU9iamVjdHMiLCJuZXdVc2ZtIiwiY2hhcHRlckNodW5rcyIsInNwbGl0IiwiY2hhcHRlckluZGV4IiwiY3VycmVudENoYXB0ZXIiLCJ2ZXJzZUNodW5rcyIsInZlcnNlSW5kZXgiLCJuZXdWZXJzZVVzZm0iLCJjb252ZXJ0VmVyc2VEYXRhVG9VU0ZNIiwib2xkVmVyc2UiLCJ2ZXJzZU51bUxlbiIsIm5ld0NoYXB0ZXIiLCJqb2luIiwiZ2V0UmVzcG9uc2VEYXRhIiwibWVyZ2VGYWlsIiwicGFyc2VJbnQiLCJuZXdCb29rSnNvbiIsIm5ld1ZlcnNlVGV4dCIsInRhcmdldFZlcnNlT2JqZWN0c18iLCJ1cGRhdGVBbGlnbm1lbnRzVG9UYXJnZXRWZXJzZSIsInRhcmdldFZlcnNlT2JqZWN0cyIsInVwZGF0ZVZlcnNlIiwidG9VU0ZNIiwiZm9yY2VkTmV3TGluZXMiLCJfdmVyc2UiLCJyZW5kZXJlZFNjcmlwdHVyZVBhbmVzIiwibWFwIiwiX2N1cnJlbnRWZXJzZURhdGEiLCJpbml0aWFsVmVyc2VPYmplY3RzIiwiX3JlZmVyZW5jZSIsIl9zY3JpcHR1cmVBbGlnbm1lbnRFZGl0Q29uZmlnIiwicHJvcFR5cGVzIiwic3RyaW5nIiwiZnVuYyIsImlzUmVxdWlyZWQiLCJudW1iZXIiLCJzaGFwZSIsIm9uZU9mVHlwZSIsImJvb2wiLCJvYmplY3QiLCJhbnkiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLE9BQU8sS0FBS0EsS0FBWixNQUF1QixPQUF2QjtBQUNBLE9BQU8sS0FB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RUFBRXJELFNBQVMsQ0FBQzZPLE1BcEREOztBQXFEeEI7QUFDQXZMLEVBQUFBLGNBQWMsRUFBRXRELFNBQVMsQ0FBQzhPLElBdERGOztBQXVEeEI7QUFDQXZMLEVBQUFBLG9CQUFvQixFQUFFdkQsU0FBUyxDQUFDOE8sSUF4RFI7O0FBeUR4QjtBQUNBdEwsRUFBQUEsU0FBUyxFQUFFeEQsU0FBUyxDQUFDOE8sSUExREc7O0FBMkR4QjtBQUNBckwsRUFBQUEsVUFBVSxFQUFFekQsU0FBUyxDQUFDOE8sSUE1REU7O0FBNkR4QjtBQUNBcEwsRUFBQUEsWUFBWSxFQUFFMUQsU0FBUyxDQUFDNk8sTUE5REE7O0FBK0R4QjtBQUNBbEwsRUFBQUEsY0FBYyxFQUFFM0QsU0FBUyxDQUFDb1AsTUFoRUY7O0FBaUV4QjtBQUNBeEwsRUFBQUEsZUFBZSxFQUFFNUQsU0FBUyxDQUFDOE8sSUFsRUg7O0FBbUV4QjtBQUNBakwsRUFBQUEsU0FBUyxFQUFFN0QsU0FBUyxDQUFDNk8sTUFwRUc7O0FBcUV4QjtBQUNBL0ssRUFBQUEsYUFBYSxFQUFFOUQsU0FBUyxDQUFDOE8sSUF0RUQ7O0FBdUV4QjtBQUNBL0ssRUFBQUEsb0JBQW9CLEVBQUUvRCxTQUFTLENBQUM4TztBQXhFUixDQUExQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0J1xuaW1wb3J0ICogYXMgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnXG5pbXBvcnQgeyBjb3JlIH0gZnJvbSAnc2NyaXB0dXJlLXJlc291cmNlcy1yY2wnXG5pbXBvcnQgdXNmbWpzIGZyb20gJ3VzZm0tanMnXG5pbXBvcnQgeyB1c2VFZGl0IH0gZnJvbSAnZ2l0ZWEtcmVhY3QtdG9vbGtpdCdcbmltcG9ydCB7XG4gIENhcmQsXG4gIHVzZUNhcmRTdGF0ZSxcbiAgdXNlVXNlckJyYW5jaCxcbiAgRVJST1JfU1RBVEUsXG4gIE1BTklGRVNUX05PVF9MT0FERURfRVJST1IsXG59IGZyb20gJ3RyYW5zbGF0aW9uLWhlbHBzLXJjbCdcbmltcG9ydCB7IEFsaWdubWVudEhlbHBlcnMsIFVzZm1GaWxlQ29udmVyc2lvbkhlbHBlcnMgfSBmcm9tICd3b3JkLWFsaWduZXItcmNsJ1xuaW1wb3J0ICogYXMgaXNFcXVhbCBmcm9tICdkZWVwLWVxdWFsJ1xuaW1wb3J0IHsgU2NyaXB0dXJlUGFuZSwgU2NyaXB0dXJlU2VsZWN0b3IgfSBmcm9tICcuLidcbmltcG9ydCB7IHVzZVNjcmlwdHVyZVNldHRpbmdzIH0gZnJvbSAnLi4vLi4vaG9va3MvdXNlU2NyaXB0dXJlU2V0dGluZ3MnXG5pbXBvcnQge1xuICBnZXRSZXNvdXJjZUxpbmssXG4gIGdldFJlc291cmNlTWVzc2FnZSxcbiAgZ2V0U2NyaXB0dXJlVmVyc2lvblNldHRpbmdzLFxuICBpc09yaWdpbmFsQmlibGUsXG59IGZyb20gJy4uLy4uL3V0aWxzL1NjcmlwdHVyZVNldHRpbmdzJ1xuaW1wb3J0IHsgVGl0bGUgfSBmcm9tICcuLi9TY3JpcHR1cmVQYW5lL3N0eWxlZCdcbmltcG9ydCB7XG4gIE5UX09SSUdfTEFORyxcbiAgT1JJR0lOQUxfU09VUkNFLFxuICBPVF9PUklHX0xBTkcsXG59IGZyb20gJy4uLy4uL3V0aWxzJ1xuXG5jb25zdCBLRVlfRk9OVF9TSVpFX0JBU0UgPSAnc2NyaXB0dXJlUGFuZUZvbnRTaXplXydcbmNvbnN0IGxhYmVsID0gJ1ZlcnNpb24nXG5jb25zdCBzdHlsZSA9IHsgbWFyZ2luVG9wOiAnMTZweCcsIHdpZHRoOiAnNTAwcHgnIH1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gU2NyaXB0dXJlQ2FyZCh7XG4gIGlkLFxuICBpc05ULFxuICB0aXRsZSxcbiAgc2VydmVyLFxuICBhcHBSZWYsXG4gIGNhcmROdW0sXG4gIGNsYXNzZXMsXG4gIHJlc291cmNlOiB7XG4gICAgb3duZXIsXG4gICAgbGFuZ3VhZ2VJZCxcbiAgICByZXNvdXJjZUlkLFxuICAgIG9yaWdpbmFsTGFuZ3VhZ2VPd25lcixcbiAgfSxcbiAgZ2V0TGFuZ3VhZ2UsXG4gIHJlZmVyZW5jZToge1xuICAgIHZlcnNlLFxuICAgIGNoYXB0ZXIsXG4gICAgcHJvamVjdElkOiBib29rSWQsXG4gIH0sXG4gIHJlc291cmNlTGluayxcbiAgdXNlVXNlckxvY2FsU3RvcmFnZSxcbiAgZGlzYWJsZVdvcmRQb3BvdmVyLFxuICBvblJlc291cmNlRXJyb3IsXG4gIGh0dHBDb25maWcsXG4gIGdyZWVrUmVwb1VybCxcbiAgaGVicmV3UmVwb1VybCxcbiAgZ2V0TGV4aWNvbkRhdGEsXG4gIGZldGNoR2xvc3Nlc0ZvclZlcnNlLFxuICB0cmFuc2xhdGUsXG4gIG9uTWluaW1pemUsXG4gIGxvZ2dlZEluVXNlcixcbiAgYXV0aGVudGljYXRpb24sXG4gIHNldFNhdmVkQ2hhbmdlcyxcbiAgYm9va0luZGV4LFxuICBhZGRWZXJzZVJhbmdlLFxuICBzZXRXb3JkQWxpZ25lclN0YXR1cyxcbn0pIHtcbiAgY29uc3QgW3N0YXRlLCBzZXRTdGF0ZV9dID0gUmVhY3QudXNlU3RhdGUoe1xuICAgIGhhdmVVbnNhdmVkQ2hhbmdlczogZmFsc2UsXG4gICAgcmVmOiBhcHBSZWYsXG4gICAgc2F2ZUNsaWNrZWQ6IGZhbHNlLFxuICAgIHNhdmVDb250ZW50OiBudWxsLFxuICAgIHNoYTogbnVsbCxcbiAgICBzdGFydFNhdmU6IGZhbHNlLFxuICAgIHVybEVycm9yOiBudWxsLFxuICAgIHVzaW5nVXNlckJyYW5jaDogZmFsc2UsXG4gICAgdW5zYXZlZENoYW5nZXNMaXN0OiB7fSxcbiAgICB2ZXJzZXNGb3JSZWY6IG51bGwsXG4gIH0pXG4gIGNvbnN0IHtcbiAgICByZWYsXG4gICAgc2F2ZUNsaWNrZWQsXG4gICAgc2F2ZUNvbnRlbnQsXG4gICAgc2hhLFxuICAgIHN0YXJ0U2F2ZSxcbiAgICB1cmxFcnJvcixcbiAgICB1c2luZ1VzZXJCcmFuY2gsXG4gICAgdW5zYXZlZENoYW5nZXNMaXN0LFxuICAgIGhhdmVVbnNhdmVkQ2hhbmdlcyxcbiAgICB2ZXJzZXNGb3JSZWYsXG4gIH0gPSBzdGF0ZVxuXG4gIGNvbnN0IFtmb250U2l6ZSwgc2V0Rm9udFNpemVdID0gdXNlVXNlckxvY2FsU3RvcmFnZShLRVlfRk9OVF9TSVpFX0JBU0UgKyBjYXJkTnVtLCAxMDApXG4gIGNvbnN0IGlzTlRfID0gaXNOVChib29rSWQpXG5cbiAgZnVuY3Rpb24gc2V0U3RhdGUobmV3U3RhdGUpIHtcbiAgICBzZXRTdGF0ZV8ocHJldlN0YXRlID0+ICh7IC4uLnByZXZTdGF0ZSwgLi4ubmV3U3RhdGUgfSkpXG4gIH1cblxuICBpZiAodXNpbmdVc2VyQnJhbmNoKSB7XG4gICAgaHR0cENvbmZpZyA9IHsgLi4uaHR0cENvbmZpZywgY2FjaGU6IHsgbWF4QWdlOiAwIH0gfSAvLyBkaXNhYmxlIGh0dHAgY2FjaGluZ1xuICB9XG5cbiAgY29uc3Qge1xuICAgIGlzTmV3VGVzdGFtZW50LFxuICAgIHNjcmlwdHVyZUNvbmZpZyxcbiAgICBzZXRTY3JpcHR1cmUsXG4gICAgc2NyaXB0dXJlU2V0dGluZ3MsXG4gICAgc2NyaXB0dXJlVmVyc2lvbkhpc3QsXG4gIH0gPSB1c2VTY3JpcHR1cmVTZXR0aW5ncyh7XG4gICAgaXNOVCxcbiAgICB0aXRsZSxcbiAgICB2ZXJzZSxcbiAgICBvd25lcixcbiAgICBib29rSWQsXG4gICAgYXBwUmVmOiByZWYsXG4gICAgc2VydmVyLFxuICAgIGNhcmROdW0sXG4gICAgY2hhcHRlcixcbiAgICBsYW5ndWFnZUlkLFxuICAgIHJlc291cmNlSWQsXG4gICAgcmVzb3VyY2VMaW5rLFxuICAgIHVzZVVzZXJMb2NhbFN0b3JhZ2UsXG4gICAgZGlzYWJsZVdvcmRQb3BvdmVyLFxuICAgIG9yaWdpbmFsTGFuZ3VhZ2VPd25lcixcbiAgICBzZXRVcmxFcnJvcjogKGVycm9yKSA9PiBzZXRTdGF0ZSh7IHVybEVycm9yOiBlcnJvciB9KSxcbiAgICBodHRwQ29uZmlnLFxuICAgIGdyZWVrUmVwb1VybCxcbiAgICBoZWJyZXdSZXBvVXJsLFxuICAgIHdob2xlQm9vazogdHJ1ZSxcbiAgfSlcblxuICBjb25zdCBmZXRjaFJlc3BfID0gc2NyaXB0dXJlQ29uZmlnPy5mZXRjaFJlc3BvbnNlXG4gIC8vIEB0cy1pZ25vcmVcbiAgY29uc3QgcmVwbyA9IGAke3NjcmlwdHVyZUNvbmZpZz8ucmVzb3VyY2U/Lmxhbmd1YWdlSWR9XyR7c2NyaXB0dXJlQ29uZmlnPy5yZXNvdXJjZT8ucHJvamVjdElkfWBcbiAgY29uc3QgcmVmZXJlbmNlXyA9IHNjcmlwdHVyZUNvbmZpZz8ucmVmZXJlbmNlIHx8IG51bGxcblxuICBSZWFjdC51c2VFZmZlY3QoKCkgPT4geyAvLyBnZXQgdGhlIF9zaGEgZnJvbSBsYXN0IHNjcmlwdHVyZSBkb3dubG9hZFxuICAgIGNvbnN0IF9zaGEgPSBmZXRjaFJlc3BfPy5kYXRhPy5zaGEgfHwgbnVsbFxuICAgIGNvbnNvbGUubG9nKGBmb3IgJHtKU09OLnN0cmluZ2lmeShyZWZlcmVuY2VfKX0gbmV3IHNoYSBpcyAke19zaGF9YClcblxuICAgIGlmIChfc2hhICE9PSBzaGEpIHtcbiAgICAgIHNldFN0YXRlKHsgc2hhOiBfc2hhIH0pXG4gICAgfVxuICB9LCBbZmV0Y2hSZXNwX10pXG5cbiAgLy8gQHRzLWlnbm9yZVxuICBjb25zdCBjYXJkUmVzb3VyY2VJZCA9IHNjcmlwdHVyZUNvbmZpZz8ucmVzb3VyY2U/LnByb2plY3RJZCB8fCByZXNvdXJjZUlkXG4gIC8vIEB0cy1pZ25vcmVcbiAgbGV0IHJlZl8gPSBzY3JpcHR1cmVDb25maWc/LnJlc291cmNlPy5yZWYgfHwgYXBwUmVmXG4gIGNvbnN0IGNhblVzZUVkaXRCcmFuY2ggPSBsb2dnZWRJblVzZXIgJiYgYXV0aGVudGljYXRpb24gJiZcbiAgICAocmVzb3VyY2VJZCAhPT0gT1JJR0lOQUxfU09VUkNFKSAmJlxuICAgICgocmVmXyA9PT0gJ21hc3RlcicpIHx8IChyZWZfLmluY2x1ZGVzKGxvZ2dlZEluVXNlcikpICkgLy8gbm90IGEgdmVyc2lvbiB0YWdcblxuICBjb25zdCB7XG4gICAgc3RhdGU6IHsgd29ya2luZ1Jlc291cmNlQnJhbmNoLCB1c2luZ1VzZXJCcmFuY2g6IHVzaW5nVXNlckJyYW5jaF8gfSxcbiAgICBhY3Rpb25zOiB7IHN0YXJ0RWRpdDogc3RhcnRFZGl0QnJhbmNoIH0sXG4gIH0gPSB1c2VVc2VyQnJhbmNoKHtcbiAgICBhcHBSZWYsXG4gICAgYXV0aGVudGljYXRpb246IGNhblVzZUVkaXRCcmFuY2ggPyBhdXRoZW50aWNhdGlvbiA6IG51bGwsXG4gICAgYm9va0lkLFxuICAgIGNhcmRJZDogaWQsXG4gICAgY2FyZFJlc291cmNlSWQsXG4gICAgbGFuZ3VhZ2VJZCxcbiAgICBsb2dnZWRJblVzZXI6IGNhblVzZUVkaXRCcmFuY2ggPyBsb2dnZWRJblVzZXIgOiBudWxsLFxuICAgIG93bmVyLFxuICAgIG9uUmVzb3VyY2VFcnJvcixcbiAgICBzZXJ2ZXIsXG4gICAgdXNlVXNlckxvY2FsU3RvcmFnZSxcbiAgfSlcblxuICBjb25zdCB3b3JraW5nUmVmID0gY2FuVXNlRWRpdEJyYW5jaCA/IHdvcmtpbmdSZXNvdXJjZUJyYW5jaCA6IGFwcFJlZlxuICBsZXQgc2NyaXB0dXJlVGl0bGVcblxuICBSZWFjdC51c2VFZmZlY3QoKCkgPT4geyAvLyBzZWxlY3QgY29ycmVjdCB3b3JraW5nIHJlZiAtIGNvdWxkIGJlIG1hc3RlciwgdXNlciBicmFuY2gsIG9yIHJlbGVhc2VcbiAgICBpZiAodXNpbmdVc2VyQnJhbmNoXyAhPT0gdXNpbmdVc2VyQnJhbmNoKSB7XG4gICAgICBzZXRTdGF0ZSh7IHVzaW5nVXNlckJyYW5jaDogdXNpbmdVc2VyQnJhbmNoXyB9KVxuICAgIH1cbiAgfSwgW3VzaW5nVXNlckJyYW5jaF8sIHVzaW5nVXNlckJyYW5jaF0pXG5cbiAgUmVhY3QudXNlRWZmZWN0KCgpID0+IHsgLy8gc2VsZWN0IGNvcnJlY3Qgd29ya2luZyByZWYgLSBjb3VsZCBiZSBtYXN0ZXIsIHVzZXIgYnJhbmNoLCBvciByZWxlYXNlXG4gICAgbGV0IHdvcmtpbmdSZWZfID0gd29ya2luZ1JlZiB8fCBhcHBSZWZcblxuICAgIGlmIChyZWYgIT09IHdvcmtpbmdSZWZfKSB7XG4gICAgICBzZXRTdGF0ZSh7IHJlZjogd29ya2luZ1JlZl8gfSlcbiAgICB9XG4gIH0sIFt3b3JraW5nUmVmLCByZWYsIGFwcFJlZl0pXG5cbiAgUmVhY3QudXNlRWZmZWN0KCgpID0+IHsgLy8gdXBkYXRlIGRpc3BsYXkgc3RhdHVzIGlmIGVycm9yXG4gICAgY29uc3QgZXJyb3IgPSBzY3JpcHR1cmVDb25maWc/LnJlc291cmNlU3RhdHVzPy5bRVJST1JfU1RBVEVdXG5cbiAgICBpZiAoZXJyb3IpIHsgLy8gaWYgZXJyb3Igd2FzIGZvdW5kIGRvIGNhbGxiYWNrXG4gICAgICBjb25zdCByZXNvdXJjZVN0YXR1cyA9IHNjcmlwdHVyZUNvbmZpZz8ucmVzb3VyY2VTdGF0dXNcbiAgICAgIGNvbnN0IHJlc291cmNlTGluayA9IGdldFJlc291cmNlTGluayhzY3JpcHR1cmVDb25maWcpXG4gICAgICBjb25zdCBtZXNzYWdlID0gZ2V0UmVzb3VyY2VNZXNzYWdlKHJlc291cmNlU3RhdHVzLCBzZXJ2ZXIsIHJlc291cmNlTGluaywgaXNOVF8pXG4gICAgICBjb25zdCBpc0FjY2Vzc0Vycm9yID0gcmVzb3VyY2VTdGF0dXNbTUFOSUZFU1RfTk9UX0xPQURFRF9FUlJPUl1cbiAgICAgIG9uUmVzb3VyY2VFcnJvciAmJiBvblJlc291cmNlRXJyb3IobWVzc2FnZSwgaXNBY2Nlc3NFcnJvciwgcmVzb3VyY2VTdGF0dXMpXG4gICAgfVxuICB9LCBbc2NyaXB0dXJlQ29uZmlnPy5yZXNvdXJjZVN0YXR1cz8uW0VSUk9SX1NUQVRFXV0pXG5cbiAgaWYgKHNjcmlwdHVyZUNvbmZpZy50aXRsZSAmJiBzY3JpcHR1cmVDb25maWcudmVyc2lvbikge1xuICAgIHNjcmlwdHVyZVRpdGxlID0gYCR7c2NyaXB0dXJlQ29uZmlnLnRpdGxlfSB2JHtzY3JpcHR1cmVDb25maWcudmVyc2lvbn1gXG4gICAgc2NyaXB0dXJlVmVyc2lvbkhpc3QudXBkYXRlVGl0bGUoc2NyaXB0dXJlQ29uZmlnLnJlc291cmNlTGluaywgc2NyaXB0dXJlVGl0bGUpXG4gIH0gZWxzZSB7XG4gICAgc2NyaXB0dXJlVGl0bGUgPSBgVGl0bGUgbWlzc2luZyBmcm9tIHByb2plY3QgbWFuaWZlc3RgXG4gIH1cblxuICAvKiogRHluYW1pY2FsbHkgY3JlYXRlcyB0aGUgc2NyaXB0dXJlIHNlbGVjdGlvbiBkcm9wZG93biB0byBiZSBpbnNlcnRlZCBpbnRvIGNhcmQgc2V0dGluZ3MgKi9cbiAgZnVuY3Rpb24gZ2V0U2NyaXB0dXJlU2VsZWN0b3IoKSB7XG4gICAgY29uc3Qgc2NyaXB0dXJlU2VsZWN0aW9uQ29uZmlnID0gZ2V0U2NyaXB0dXJlVmVyc2lvblNldHRpbmdzKHtcbiAgICAgIGxhYmVsLFxuICAgICAgcmVzb3VyY2VMaW5rOiBzY3JpcHR1cmVDb25maWcucmVzb3VyY2VMaW5rLFxuICAgICAgc2V0U2NyaXB0dXJlLFxuICAgICAgc2NyaXB0dXJlVmVyc2lvbkhpc3QsXG4gICAgfSlcblxuICAgIHJldHVybiA8U2NyaXB0dXJlU2VsZWN0b3Igey4uLnNjcmlwdHVyZVNlbGVjdGlvbkNvbmZpZ30gc3R5bGU9e3N0eWxlfSBlcnJvck1lc3NhZ2U9e3VybEVycm9yfSAvPlxuICB9XG5cbiAgZnVuY3Rpb24gb25NZW51Q2xvc2UoKSB7XG4gICAgLy8gY29uc29sZS5sb2coYG9uTWVudUNsb3NlKClgKVxuICAgIHNldFN0YXRlKHsgdXJsRXJyb3I6IG51bGwgfSlcbiAgfVxuXG4gIC8vIEB0cy1pZ25vcmVcbiAgY29uc3QgbGFuZ3VhZ2VJZF8gPSBzY3JpcHR1cmVDb25maWc/LnJlc291cmNlPy5sYW5ndWFnZUlkXG4gIGNvbnN0IGxhbmd1YWdlID0gZ2V0TGFuZ3VhZ2UoeyBsYW5ndWFnZUlkOiBsYW5ndWFnZUlkXyB9KVxuICBjb25zdCBkaXJlY3Rpb24gPSAobGFuZ3VhZ2U/LmRpcmVjdGlvbikgfHwgJ2x0cidcbiAgY29uc3QgcmVmZXJlbmNlID0geyAuLi5zY3JpcHR1cmVDb25maWcucmVmZXJlbmNlIH1cblxuICBjb25zdCBpc0hlYnJldyA9IChsYW5ndWFnZUlkXyA9PT0gJ2hibycpXG4gIGNvbnN0IGZvbnRGYWN0b3IgPSBpc0hlYnJldyA/IDEuNCA6IDEgLy8gd2UgYXV0b21hdGljYWxseSBzY2FsZSB1cCBmb250IHNpemUgZm9yIEhlYnJld1xuICBjb25zdCBzY2FsZWRGb250U2l6ZSA9IGZvbnRTaXplICogZm9udEZhY3RvclxuXG4gIGNvbnN0IGl0ZW1zID0gbnVsbFxuICBjb25zdCB7XG4gICAgc3RhdGU6IHtcbiAgICAgIGhlYWRlcnMsIGZpbHRlcnMsIGl0ZW1JbmRleCwgbWFya2Rvd25WaWV3LFxuICAgIH0sXG4gICAgYWN0aW9uczoge1xuICAgICAgc2V0RmlsdGVycywgc2V0SXRlbUluZGV4LCBzZXRNYXJrZG93blZpZXcsXG4gICAgfSxcbiAgfSA9IHVzZUNhcmRTdGF0ZSh7IGl0ZW1zIH0pXG5cbiAgY29uc3QgcmVmU3R5bGUgPSBSZWFjdC51c2VNZW1vKCgpID0+ICh7XG4gICAgZm9udEZhbWlseTogJ05vdG8gU2FucycsXG4gICAgZm9udFNpemU6IGAke01hdGgucm91bmQoc2NhbGVkRm9udFNpemUgKiAwLjkpfSVgLFxuICB9KSwgW3NjYWxlZEZvbnRTaXplXSlcblxuICBjb25zdCBjb250ZW50U3R5bGUgPSBSZWFjdC51c2VNZW1vKCgpID0+ICh7XG4gICAgZm9udEZhbWlseTogJ05vdG8gU2FucycsXG4gICAgZm9udFNpemU6IGAke3NjYWxlZEZvbnRTaXplfSVgLFxuICB9KSwgW3NjYWxlZEZvbnRTaXplXSlcblxuICBjb25zdCBzY3JpcHR1cmVMYWJlbCA9IDxUaXRsZT57c2NyaXB0dXJlVGl0bGV9PC9UaXRsZT5cbiAgbGV0IGRpc2FibGVXb3JkUG9wb3Zlcl8gPSBkaXNhYmxlV29yZFBvcG92ZXJcbiAgY29uc3QgdXNpbmdPcmlnaW5hbEJpYmxlID0gaXNPcmlnaW5hbEJpYmxlKHNjcmlwdHVyZUNvbmZpZ1sncmVzb3VyY2UnXT8ucHJvamVjdElkKVxuXG4gIGlmIChkaXNhYmxlV29yZFBvcG92ZXIgPT09IHVuZGVmaW5lZCkgeyAvLyBpZiBub3Qgc3BlY2lmaWVkLCB0aGVuIGRldGVybWluZSBpZiBvcmlnaW5hbCBsYW5ndWFnZSByZXNvdXJjZVxuICAgIGRpc2FibGVXb3JkUG9wb3Zlcl8gPSAhdXNpbmdPcmlnaW5hbEJpYmxlXG4gIH1cblxuICBSZWFjdC51c2VFZmZlY3QoKCkgPT4geyAvLyBwcmUtY2FjaGUgZ2xvc3NlcyBvbiB2ZXJzZSBjaGFuZ2VcbiAgICBjb25zdCBmZXRjaEdsb3NzRGF0YUZvclZlcnNlID0gYXN5bmMgKCkgPT4ge1xuICAgICAgbGV0IHZlcnNlT2JqZWN0cyA9IFtdXG5cbiAgICAgIC8vIGdldCB2ZXJzZSBvYmplY3RzIG9mIGFsbCB0aGUgdmVyc2VzXG4gICAgICBmb3IgKGNvbnN0IHZlcnNlUmVmIG9mIHNjcmlwdHVyZUNvbmZpZz8udmVyc2VzRm9yUmVmIHx8IFtdKSB7XG4gICAgICAgIGNvbnN0IF92ZXJzZU9iamVjdHMgPSB2ZXJzZVJlZj8udmVyc2VEYXRhPy52ZXJzZU9iamVjdHNcbiAgICAgICAgdmVyc2VPYmplY3RzID0gdmVyc2VPYmplY3RzLmNvbmNhdChfdmVyc2VPYmplY3RzKVxuICAgICAgfVxuXG4gICAgICBpZiAoIWRpc2FibGVXb3JkUG9wb3ZlciAmJiB2ZXJzZU9iamVjdHM/Lmxlbmd0aCAmJiBmZXRjaEdsb3NzZXNGb3JWZXJzZSkge1xuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tYXdhaXQtaW4tbG9vcFxuICAgICAgICBhd2FpdCBmZXRjaEdsb3NzZXNGb3JWZXJzZSh2ZXJzZU9iamVjdHMsIGxhbmd1YWdlSWRfKVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh1c2luZ09yaWdpbmFsQmlibGUpIHtcbiAgICAgIGZldGNoR2xvc3NEYXRhRm9yVmVyc2UoKVxuICAgIH1cbiAgfSwgWyB2ZXJzZXNGb3JSZWYsIGxhbmd1YWdlSWRfIF0pXG5cbiAgY29uc3QgZW5hYmxlRWRpdCA9ICF1c2luZ09yaWdpbmFsQmlibGVcbiAgY29uc3QgZW5hYmxlQWxpZ25tZW50ID0gIXVzaW5nT3JpZ2luYWxCaWJsZVxuICBjb25zdCBvcmlnaW5hbFJlcG9VcmwgPSBpc05ld1Rlc3RhbWVudCA/IGdyZWVrUmVwb1VybCA6IGhlYnJld1JlcG9VcmxcbiAgY29uc3Qgc2NyaXB0dXJlQWxpZ25tZW50RWRpdENvbmZpZyA9IHtcbiAgICBhdXRoZW50aWNhdGlvbjogY2FuVXNlRWRpdEJyYW5jaCA/IGF1dGhlbnRpY2F0aW9uIDogbnVsbCxcbiAgICBib29rSW5kZXgsXG4gICAgY3VycmVudFZlcnNlUmVmOiByZWZlcmVuY2UsXG4gICAgZW5hYmxlRWRpdCxcbiAgICBlbmFibGVBbGlnbm1lbnQsXG4gICAgaHR0cENvbmZpZyxcbiAgICAvLyBAdHMtaWdub3JlXG4gICAgaXNOZXdUZXN0YW1lbnQsXG4gICAgbG9nZ2VkSW5Vc2VyOiBjYW5Vc2VFZGl0QnJhbmNoID8gbG9nZ2VkSW5Vc2VyIDogbnVsbCxcbiAgICBvcmlnaW5hbExhbmd1YWdlT3duZXIsXG4gICAgLy8gQHRzLWlnbm9yZVxuICAgIG9yaWdpbmFsUmVwb1VybCxcbiAgICBzY3JpcHR1cmVDb25maWcsXG4gICAgc2NyaXB0dXJlU2V0dGluZ3MsXG4gICAgc3RhcnRFZGl0QnJhbmNoLFxuICAgIHNldFNhdmVkQ2hhbmdlczogX3NldFNhdmVkQ2hhbmdlcyxcbiAgICBzb3VyY2VMYW5ndWFnZTogaXNOVF8gPyBOVF9PUklHX0xBTkcgOiBPVF9PUklHX0xBTkcsXG4gICAgdGFyZ2V0TGFuZ3VhZ2U6IGxhbmd1YWdlLFxuICAgIHRpdGxlOiBzY3JpcHR1cmVUaXRsZSxcbiAgICB3b3JraW5nUmVzb3VyY2VCcmFuY2g6IHJlZixcbiAgfVxuXG4gIC8qKlxuICAgKiB0aGlzIGdldHMgY2FsbGVkIHdoZW5ldmVyIGEgc2NyaXB0dXJlIHBhbmUgaGFzIGEgY2hhbmdlIGluIHNhdmUgc3RhdGVcbiAgICogQHBhcmFtIHtudW1iZXJ9IGN1cnJlbnRJbmRleFxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IHNhdmVkXG4gICAqIEBwYXJhbSB7ZnVuY3Rpb259IGdldENoYW5nZXMgLSB3aWxsIGJlIGNhbGxlZCB3aGVuZXZlciB1c2VyIGNsaWNrcyBzYXZlIGJ1dHRvblxuICAgKiBAcGFyYW0ge2Z1bmN0aW9ufSBjbGVhckNoYW5nZXMgLSB3aWxsIGJlIGNhbGxlZCB3aGVuZXZlciBzYXZlIGhhcyBjb21wbGV0ZWRcbiAgICogQHBhcmFtIHtvYmplY3R9IHN0YXRlIC0gY3VycmVudCBzdGF0ZSBvZiB3b3JkIGFsaWdubWVudC9lZGl0XG4gICAqL1xuICBmdW5jdGlvbiBfc2V0U2F2ZWRDaGFuZ2VzKGN1cnJlbnRJbmRleCwgc2F2ZWQsIHsgZ2V0Q2hhbmdlcyA9IG51bGwsIGNsZWFyQ2hhbmdlcyA9IG51bGwsIHN0YXRlID0gbnVsbCB9KSB7XG4gICAgY29uc3QgX3Vuc2F2ZWRDaGFuZ2VzTGlzdCA9IHsgLi4udW5zYXZlZENoYW5nZXNMaXN0IH1cblxuICAgIGlmIChzYXZlZCkge1xuICAgICAgaWYgKF91bnNhdmVkQ2hhbmdlc0xpc3QuaGFzT3duUHJvcGVydHkoY3VycmVudEluZGV4KSkge1xuICAgICAgICBkZWxldGUgX3Vuc2F2ZWRDaGFuZ2VzTGlzdFtjdXJyZW50SW5kZXhdXG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIF91bnNhdmVkQ2hhbmdlc0xpc3RbY3VycmVudEluZGV4XSA9IHsgZ2V0Q2hhbmdlcywgY2xlYXJDaGFuZ2VzLCBzdGF0ZSB9IC8vIHVwZGF0ZSB3aXRoIGxhdGVzdFxuICAgIH1cblxuICAgIGNvbnN0IF9oYXZlVW5zYXZlZENoYW5nZXMgPSAhIU9iamVjdC5rZXlzKF91bnNhdmVkQ2hhbmdlc0xpc3QpLmxlbmd0aFxuXG4gICAgaWYgKGhhdmVVbnNhdmVkQ2hhbmdlcyAhPSBfaGF2ZVVuc2F2ZWRDaGFuZ2VzKSB7XG4gICAgICBzZXRTYXZlZENoYW5nZXMgJiYgc2V0U2F2ZWRDaGFuZ2VzKHJlc291cmNlSWQsICFfaGF2ZVVuc2F2ZWRDaGFuZ2VzKVxuICAgICAgc2V0U3RhdGUoeyBoYXZlVW5zYXZlZENoYW5nZXM6IF9oYXZlVW5zYXZlZENoYW5nZXMgfSlcbiAgICB9XG5cbiAgICBpZiAoIWlzRXF1YWwoX3Vuc2F2ZWRDaGFuZ2VzTGlzdCwgdW5zYXZlZENoYW5nZXNMaXN0KSkge1xuICAgICAgc2V0U3RhdGUoeyB1bnNhdmVkQ2hhbmdlc0xpc3Q6IF91bnNhdmVkQ2hhbmdlc0xpc3QgfSlcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogc2VhcmNoIGNoYXB0ZXIgb3IgdmVyc2UgY2h1bmsgdG8gbGluZSB0aGF0IHN0YXJ0cyB3aXRoIGZpbmRJdGVtXG4gICAqIEBwYXJhbSB7bnVtYmVyfHN0cmluZ30gZmluZEl0ZW1cbiAgICogQHBhcmFtIHtzdHJpbmdbXX0gY2h1bmtzXG4gICAqL1xuICBmdW5jdGlvbiBmaW5kUmVmSW5BcnJheShmaW5kSXRlbSwgY2h1bmtzKSB7XG4gICAgY29uc3QgcmVmXyA9IGZpbmRJdGVtICsgJydcbiAgICBjb25zdCByZWZMZW4gPSByZWZfLmxlbmd0aFxuICAgIGNvbnN0IGluZGV4ID0gY2h1bmtzLmZpbmRJbmRleCgoY2h1bmssIGlkeCkgPT4ge1xuICAgICAgaWYgKGlkeCA+IDApIHtcbiAgICAgICAgaWYgKGNodW5rLnN1YnN0cmluZygwLCByZWZMZW4pID09PSByZWZfKSB7XG4gICAgICAgICAgY29uc3QgbmV4dENoYXIgPSBjaHVua1tyZWZMZW5dXG5cbiAgICAgICAgICBpZiAoKG5leHRDaGFyID4gJzknKSB8fCAobmV4dENoYXIgPCAnMCcpKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfSlcbiAgICByZXR1cm4gaW5kZXhcbiAgfVxuXG4gIGZ1bmN0aW9uIGdldEJvb2tOYW1lKCkge1xuICAgIGNvbnN0IGJvb2tDYXBzID0gc2NyaXB0dXJlQ29uZmlnPy5yZWZlcmVuY2U/LnByb2plY3RJZCA/IHNjcmlwdHVyZUNvbmZpZy5yZWZlcmVuY2UucHJvamVjdElkLnRvVXBwZXJDYXNlKCkgOiAnJ1xuICAgIHJldHVybiBgJHtib29rSW5kZXh9LSR7Ym9va0NhcHN9LnVzZm1gXG4gIH1cblxuICBjb25zdCBmaWxlcGF0aCA9IGdldEJvb2tOYW1lKClcblxuICAvLyBrZWVwIHRyYWNrIG9mIHZlcnNlIGVkaXQgc3RhdGVcbiAgY29uc3QgeyBvblNhdmVFZGl0IH0gPSB1c2VFZGl0KHtcbiAgICBzaGEsXG4gICAgb3duZXIsXG4gICAgY29udGVudDogc2F2ZUNvbnRlbnQsXG4gICAgY29uZmlnOiB7XG4gICAgICBjYWNoZTogeyBtYXhBZ2U6IDAgfSxcbiAgICAgIC4uLmF1dGhlbnRpY2F0aW9uPy5jb25maWcsXG4gICAgICB0b2tlbjogYXV0aGVudGljYXRpb24/LnRva2VuLFxuICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgdGltZW91dDogaHR0cENvbmZpZz8uc2VydmVyVGltZU91dCB8fCBodHRwQ29uZmlnPy50aW1lb3V0IHx8IDUwMDAsXG4gICAgfSxcbiAgICBhdXRob3I6IGxvZ2dlZEluVXNlcixcbiAgICB0b2tlbjogYXV0aGVudGljYXRpb24/LnRva2VuLFxuICAgIGJyYW5jaDogd29ya2luZ1Jlc291cmNlQnJhbmNoLFxuICAgIGZpbGVwYXRoLFxuICAgIHJlcG8sXG4gIH0pXG5cbiAgUmVhY3QudXNlRWZmZWN0KCgpID0+IHsgLy8gd2hlbiBzdGFydFNhdmUgZ29lcyB0cnVlLCBzYXZlIGVkaXRzIHRvIHVzZXIgYnJhbmNoIGFuZCB0aGVuIGNsZWFyIHN0YXJ0U2F2ZVxuICAgIGNvbnN0IF9zYXZlRWRpdCA9IGFzeW5jICgpID0+IHsgLy8gYmVnaW4gdXBsb2FkaW5nIG5ldyBVU0ZNXG4gICAgICBsZXQgYnJhbmNoID0gKHdvcmtpbmdSZXNvdXJjZUJyYW5jaCAhPT0gJ21hc3RlcicpID8gd29ya2luZ1Jlc291cmNlQnJhbmNoIDogdW5kZWZpbmVkXG5cbiAgICAgIGlmICghYnJhbmNoKSB7XG4gICAgICAgIGJyYW5jaCA9IGF3YWl0IHN0YXJ0RWRpdEJyYW5jaCgpIC8vIG1ha2Ugc3VyZSB1c2VyIGJyYW5jaCBleGlzdHMgYW5kIGdldCBuYW1lXG4gICAgICB9XG5cbiAgICAgIGF3YWl0IG9uU2F2ZUVkaXQoYnJhbmNoKS50aGVuKChzdWNjZXNzKSA9PiB7IC8vIHB1c2ggY2hhbmdlZCB0byBzZXJ2ZXJcbiAgICAgICAgaWYgKHN1Y2Nlc3MpIHtcbiAgICAgICAgICBjb25zb2xlLmxvZyhgc2F2ZUNoYW5nZXNUb0Nsb3VkKCkgLSBzYXZlIHNjcmlwdHVyZSBlZGl0cyBzdWNjZXNzYClcbiAgICAgICAgICBzZXRTdGF0ZSh7XG4gICAgICAgICAgICBzdGFydFNhdmU6IGZhbHNlLFxuICAgICAgICAgIH0pXG5cbiAgICAgICAgICBjb25zdCB1bnNhdmVkQ2FyZEluZGljZXMgPSBPYmplY3Qua2V5cyh1bnNhdmVkQ2hhbmdlc0xpc3QpXG5cbiAgICAgICAgICBpZiAodW5zYXZlZENhcmRJbmRpY2VzPy5sZW5ndGgpIHtcbiAgICAgICAgICAgIGZvciAoY29uc3QgY2FyZEluZGV4IG9mIHVuc2F2ZWRDYXJkSW5kaWNlcykge1xuICAgICAgICAgICAgICBjb25zdCB7IGNsZWFyQ2hhbmdlcyB9ID0gdW5zYXZlZENoYW5nZXNMaXN0W2NhcmRJbmRleF1cbiAgICAgICAgICAgICAgY2xlYXJDaGFuZ2VzICYmIGNsZWFyQ2hhbmdlcygpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY29uc29sZS5pbmZvKCdzYXZlQ2hhbmdlc1RvQ2xvdWQoKSAtIFJlbG9hZGluZyByZXNvdXJjZScpXG4gICAgICAgICAgc2NyaXB0dXJlQ29uZmlnPy5yZWxvYWRSZXNvdXJjZSgpXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcignc2F2ZUNoYW5nZXNUb0Nsb3VkKCkgLSBzYXZpbmcgY2hhbmdlZCBzY3JpcHR1cmUgZmFpbGVkJylcbiAgICAgICAgICBzZXRTdGF0ZSh7IHN0YXJ0U2F2ZTogZmFsc2UgfSlcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICB9XG5cbiAgICBpZiAoc3RhcnRTYXZlKSB7XG4gICAgICBjb25zb2xlLmxvZyhgc2F2ZUNoYW5nZXNUb0Nsb3VkIC0gY2FsbGluZyBfc2F2ZUVkaXQoKWApXG4gICAgICBfc2F2ZUVkaXQoKVxuICAgIH1cbiAgfSwgW3N0YXJ0U2F2ZV0pXG5cbiAgLyoqXG4gICAqIGNvbnZlcnQgdXBkYXRlZFZlcnNlT2JqZWN0cyB0byBVU0ZNIGFuZCBtZXJnZSBpbnRvIHRoZSBiaWJsZVVzZm1cbiAgICogQHBhcmFtIHtzdHJpbmd9IGJpYmxlVXNmbSAtIFVTRk0gb2YgYmlibGVcbiAgICogQHBhcmFtIHtvYmplY3R9IHJlZiAtIHJlZmVyZW5jZSBvZiB2ZXJzZSB0byBtZXJnZSBpblxuICAgKiBAcGFyYW0ge29iamVjdFtdfSB1cGRhdGVkVmVyc2VPYmplY3RzIC0gbmV3IHZlcnNlIGluIHZlcnNlT2JqZWN0IGZvcm1hdFxuICAgKiBAcGFyYW0ge251bWJlcn0gY2FyZE51bVxuICAgKi9cbiAgZnVuY3Rpb24gbWVyZ2VWZXJzZU9iamVjdHNJbnRvQmlibGVVc2ZtKGJpYmxlVXNmbSwgcmVmLCB1cGRhdGVkVmVyc2VPYmplY3RzLCBjYXJkTnVtOiBudW1iZXIpIHtcbiAgICBsZXQgbmV3VXNmbVxuICAgIGNvbnN0IGNoYXB0ZXJDaHVua3MgPSBiaWJsZVVzZm0/LnNwbGl0KCdcXFxcYyAnKVxuICAgIGNvbnN0IGNoYXB0ZXJJbmRleCA9IGZpbmRSZWZJbkFycmF5KHJlZj8uY2hhcHRlciwgY2hhcHRlckNodW5rcylcblxuICAgIGlmIChjaGFwdGVySW5kZXggPj0gMCkge1xuICAgICAgY29uc3QgY3VycmVudENoYXB0ZXIgPSBjaGFwdGVyQ2h1bmtzW2NoYXB0ZXJJbmRleF1cbiAgICAgIGNvbnN0IHZlcnNlQ2h1bmtzID0gY3VycmVudENoYXB0ZXIuc3BsaXQoJ1xcXFx2ICcpXG4gICAgICBjb25zdCB2ZXJzZUluZGV4ID0gZmluZFJlZkluQXJyYXkocmVmPy52ZXJzZSwgdmVyc2VDaHVua3MpXG5cbiAgICAgIGlmICh2ZXJzZUluZGV4ID49IDApIHtcbiAgICAgICAgY29uc3QgbmV3VmVyc2VVc2ZtID0gVXNmbUZpbGVDb252ZXJzaW9uSGVscGVycy5jb252ZXJ0VmVyc2VEYXRhVG9VU0ZNKHVwZGF0ZWRWZXJzZU9iamVjdHMpXG4gICAgICAgIGNvbnNvbGUubG9nKGBzYXZlQ2hhbmdlc1RvQ2xvdWQoJHtjYXJkTnVtfSkgLSBuZXcgVVNGTSBmb3IgY2FyZDp9IC0gJHtuZXdWZXJzZVVzZm0uc3Vic3RyaW5nKDAsIDEwMCl9YClcbiAgICAgICAgY29uc3Qgb2xkVmVyc2UgPSB2ZXJzZUNodW5rc1t2ZXJzZUluZGV4XVxuICAgICAgICBjb25zdCB2ZXJzZU51bUxlbiA9IChyZWY/LnZlcnNlICsgJycpLmxlbmd0aFxuICAgICAgICB2ZXJzZUNodW5rc1t2ZXJzZUluZGV4XSA9IG9sZFZlcnNlLnN1YnN0cmluZygwLCB2ZXJzZU51bUxlbiArIDEpICsgbmV3VmVyc2VVc2ZtXG4gICAgICAgIGNvbnN0IG5ld0NoYXB0ZXIgPSB2ZXJzZUNodW5rcy5qb2luKCdcXFxcdiAnKVxuICAgICAgICBjaGFwdGVyQ2h1bmtzW2NoYXB0ZXJJbmRleF0gPSBuZXdDaGFwdGVyXG4gICAgICAgIG5ld1VzZm0gPSBjaGFwdGVyQ2h1bmtzLmpvaW4oJ1xcXFxjICcpXG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBuZXdVc2ZtXG4gIH1cblxuICBSZWFjdC51c2VFZmZlY3QoKCkgPT4geyAvLyBmb3IgZWFjaCB1bnNhdmVkIGNoYW5nZSwgY2FsbCBpbnRvIHZlcnNlUGFuZSB0byBnZXQgbGF0ZXN0IGNoYW5nZXMgZm9yIHZlcnNlIHRvIHNhdmVcbiAgICBpZiAoc2F2ZUNsaWNrZWQpIHtcbiAgICAgIGNvbnN0IHVuc2F2ZWRDYXJkSW5kaWNlcyA9IE9iamVjdC5rZXlzKHVuc2F2ZWRDaGFuZ2VzTGlzdClcblxuICAgICAgaWYgKHVuc2F2ZWRDYXJkSW5kaWNlcz8ubGVuZ3RoKSB7XG4gICAgICAgIGxldCBiaWJsZVVzZm0gPSBjb3JlLmdldFJlc3BvbnNlRGF0YShzY3JpcHR1cmVDb25maWc/LmZldGNoUmVzcG9uc2UpXG4gICAgICAgIGxldCBtZXJnZUZhaWwgPSBmYWxzZVxuICAgICAgICBsZXQgY2FyZE51bSA9IDBcblxuICAgICAgICBmb3IgKGNvbnN0IGNhcmRJbmRleCBvZiB1bnNhdmVkQ2FyZEluZGljZXMpIHtcbiAgICAgICAgICBjYXJkTnVtID0gcGFyc2VJbnQoY2FyZEluZGV4KVxuICAgICAgICAgIGNvbnN0IHsgZ2V0Q2hhbmdlcywgc3RhdGUgfSA9IHVuc2F2ZWRDaGFuZ2VzTGlzdFtjYXJkTnVtXVxuXG4gICAgICAgICAgaWYgKGdldENoYW5nZXMpIHtcbiAgICAgICAgICAgIGxldCBuZXdVc2ZtXG4gICAgICAgICAgICBjb25zdCB7XG4gICAgICAgICAgICAgIHJlZixcbiAgICAgICAgICAgICAgdXBkYXRlZFZlcnNlT2JqZWN0cyxcbiAgICAgICAgICAgIH0gPSBnZXRDaGFuZ2VzKHN0YXRlKVxuXG4gICAgICAgICAgICBpZiAodXBkYXRlZFZlcnNlT2JqZWN0cyAmJiBiaWJsZVVzZm0pIHsgLy8ganVzdCByZXBsYWNlIHZlcnNlXG4gICAgICAgICAgICAgIG5ld1VzZm0gPSBtZXJnZVZlcnNlT2JqZWN0c0ludG9CaWJsZVVzZm0oYmlibGVVc2ZtLCByZWYsIHVwZGF0ZWRWZXJzZU9iamVjdHMsIGNhcmROdW0pXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChuZXdVc2ZtKSB7XG4gICAgICAgICAgICAgIGJpYmxlVXNmbSA9IG5ld1VzZm1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIG1lcmdlRmFpbCA9IHRydWVcbiAgICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAobWVyZ2VGYWlsKSB7IC8vIGlmIHdlIGZhaWxlZCB0byBtZXJnZSwgZmFsbGJhY2sgdG8gYnJ1dGUgZm9yY2UgdmVyc2Ugb2JqZWN0cyB0byBVU0ZNXG4gICAgICAgICAgY29uc29sZS5sb2coYHNhdmVDaGFuZ2VzVG9DbG91ZCgke2NhcmROdW19KSAtIHZlcnNlIG5vdCBmb3VuZCwgZmFsbGluZyBiYWNrIHRvIGluc2VydGluZyB2ZXJzZSBvYmplY3RgKVxuICAgICAgICAgIGxldCBuZXdCb29rSnNvblxuXG4gICAgICAgICAgZm9yIChjb25zdCBjYXJkSW5kZXggb2YgdW5zYXZlZENhcmRJbmRpY2VzKSB7XG4gICAgICAgICAgICBjb25zdCBjYXJkTnVtID0gcGFyc2VJbnQoY2FyZEluZGV4KVxuICAgICAgICAgICAgY29uc3QgeyBnZXRDaGFuZ2VzLCBzdGF0ZSB9ID0gdW5zYXZlZENoYW5nZXNMaXN0W2NhcmROdW1dXG5cbiAgICAgICAgICAgIGlmIChnZXRDaGFuZ2VzKSB7XG4gICAgICAgICAgICAgIGxldCBuZXdVc2ZtXG4gICAgICAgICAgICAgIGNvbnN0IHtcbiAgICAgICAgICAgICAgICBuZXdWZXJzZVRleHQsXG4gICAgICAgICAgICAgICAgcmVmLFxuICAgICAgICAgICAgICAgIHVwZGF0ZWRWZXJzZU9iamVjdHMsXG4gICAgICAgICAgICAgIH0gPSBnZXRDaGFuZ2VzKHN0YXRlKVxuXG4gICAgICAgICAgICAgIGlmICh1cGRhdGVkVmVyc2VPYmplY3RzICYmICFuZXdVc2ZtKSB7XG4gICAgICAgICAgICAgICAgbGV0IHRhcmdldFZlcnNlT2JqZWN0c18gPSBudWxsXG5cbiAgICAgICAgICAgICAgICBpZiAocmVmKSB7XG4gICAgICAgICAgICAgICAgICBpZiAobmV3VmVyc2VUZXh0KSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHsgdGFyZ2V0VmVyc2VPYmplY3RzIH0gPSBBbGlnbm1lbnRIZWxwZXJzLnVwZGF0ZUFsaWdubWVudHNUb1RhcmdldFZlcnNlKHVwZGF0ZWRWZXJzZU9iamVjdHMsIG5ld1ZlcnNlVGV4dClcbiAgICAgICAgICAgICAgICAgICAgdGFyZ2V0VmVyc2VPYmplY3RzXyA9IHRhcmdldFZlcnNlT2JqZWN0c1xuICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGFyZ2V0VmVyc2VPYmplY3RzXyA9IHVwZGF0ZWRWZXJzZU9iamVjdHNcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIG5ld0Jvb2tKc29uID0gdGFyZ2V0VmVyc2VPYmplY3RzXyAmJiBzY3JpcHR1cmVDb25maWc/LnVwZGF0ZVZlcnNlKHJlZi5jaGFwdGVyLCByZWYudmVyc2UsIHsgdmVyc2VPYmplY3RzOiB0YXJnZXRWZXJzZU9iamVjdHNfIH0pXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgYmlibGVVc2ZtID0gdXNmbWpzLnRvVVNGTShuZXdCb29rSnNvbiwgeyBmb3JjZWROZXdMaW5lczogdHJ1ZSB9KVxuICAgICAgICB9XG5cbiAgICAgICAgY29uc29sZS5sb2coYHNhdmVDaGFuZ2VzVG9DbG91ZCgpIC0gc2F2aW5nIG5ldyBVU0ZNOiAke2JpYmxlVXNmbS5zdWJzdHJpbmcoMCwgMTAwKX0uLi5gKVxuICAgICAgICBzZXRTdGF0ZSh7IHNhdmVDb250ZW50OiBiaWJsZVVzZm0sIHN0YXJ0U2F2ZTogdHJ1ZSwgc2F2ZUNsaWNrZWQ6IGZhbHNlIH0pXG4gICAgICB9XG4gICAgfVxuICB9LCBbc2F2ZUNsaWNrZWRdKVxuXG4gIFJlYWN0LnVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKCFpc0VxdWFsKHZlcnNlc0ZvclJlZiwgc2NyaXB0dXJlQ29uZmlnPy52ZXJzZXNGb3JSZWYpKSB7XG4gICAgICBjb25zdCB2ZXJzZXNGb3JSZWYgPSBzY3JpcHR1cmVDb25maWc/LnZlcnNlc0ZvclJlZlxuICAgICAgc2V0U3RhdGUoeyB2ZXJzZXNGb3JSZWYgfSlcblxuICAgICAgZm9yIChjb25zdCB2ZXJzZVJlZiBvZiB2ZXJzZXNGb3JSZWYgfHwgW10pIHtcbiAgICAgICAgLy8gY2hlY2sgZm9yIHZlcnNlIHJhbmdlXG4gICAgICAgIGNvbnN0IF92ZXJzZSA9IHZlcnNlUmVmLnZlcnNlXG5cbiAgICAgICAgaWYgKGFkZFZlcnNlUmFuZ2UgJiYgKHR5cGVvZiBfdmVyc2UgPT09ICdzdHJpbmcnKSkge1xuICAgICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgICBpZiAoX3ZlcnNlLmluY2x1ZGVzKCctJykpIHtcbiAgICAgICAgICAgIGFkZFZlcnNlUmFuZ2UoYCR7c2NyaXB0dXJlQ29uZmlnPy5yZWZlcmVuY2U/LmNoYXB0ZXJ9OiR7X3ZlcnNlfWApXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9LCBbc2NyaXB0dXJlQ29uZmlnPy52ZXJzZXNGb3JSZWZdKVxuXG4gIGNvbnN0IHJlbmRlcmVkU2NyaXB0dXJlUGFuZXMgPSB2ZXJzZXNGb3JSZWY/Lm1hcCgoX2N1cnJlbnRWZXJzZURhdGEsIGluZGV4KSA9PiB7XG4gICAgY29uc3QgaW5pdGlhbFZlcnNlT2JqZWN0cyA9IF9jdXJyZW50VmVyc2VEYXRhPy52ZXJzZURhdGE/LnZlcnNlT2JqZWN0cyB8fCBudWxsXG4gICAgLy8gQHRzLWlnbm9yZVxuICAgIGNvbnN0IHsgY2hhcHRlciwgdmVyc2UgfSA9IF9jdXJyZW50VmVyc2VEYXRhIHx8IHt9XG4gICAgY29uc3QgX3JlZmVyZW5jZSA9IHtcbiAgICAgIC4uLnJlZmVyZW5jZSxcbiAgICAgIGNoYXB0ZXIsXG4gICAgICB2ZXJzZSxcbiAgICB9XG4gICAgY29uc3QgX3NjcmlwdHVyZUFsaWdubWVudEVkaXRDb25maWcgPSB7XG4gICAgICAuLi5zY3JpcHR1cmVBbGlnbm1lbnRFZGl0Q29uZmlnLFxuICAgICAgY3VycmVudEluZGV4OiBpbmRleCxcbiAgICAgIGluaXRpYWxWZXJzZU9iamVjdHMsXG4gICAgICByZWZlcmVuY2U6IF9yZWZlcmVuY2UsXG4gICAgfVxuXG4gICAgcmV0dXJuIChcbiAgICAgIDxTY3JpcHR1cmVQYW5lXG4gICAgICAgIHsuLi5zY3JpcHR1cmVDb25maWd9XG4gICAgICAgIGNvbnRlbnRTdHlsZT17Y29udGVudFN0eWxlfVxuICAgICAgICBjdXJyZW50SW5kZXg9e2luZGV4fVxuICAgICAgICBkaXJlY3Rpb249e2RpcmVjdGlvbn1cbiAgICAgICAgZGlzYWJsZVdvcmRQb3BvdmVyPXtkaXNhYmxlV29yZFBvcG92ZXJffVxuICAgICAgICBmb250U2l6ZT17Zm9udFNpemV9XG4gICAgICAgIGdldExleGljb25EYXRhPXtnZXRMZXhpY29uRGF0YX1cbiAgICAgICAgaXNOVD17aXNOVF99XG4gICAgICAgIGtleT17aW5kZXh9XG4gICAgICAgIHJlZlN0eWxlPXtyZWZTdHlsZX1cbiAgICAgICAgcmVmZXJlbmNlPXtfcmVmZXJlbmNlfVxuICAgICAgICBzYXZpbmc9e3N0YXJ0U2F2ZX1cbiAgICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgICBzY3JpcHR1cmVBbGlnbm1lbnRFZGl0Q29uZmlnPXtfc2NyaXB0dXJlQWxpZ25tZW50RWRpdENvbmZpZ31cbiAgICAgICAgc2V0V29yZEFsaWduZXJTdGF0dXM9e3NldFdvcmRBbGlnbmVyU3RhdHVzfVxuICAgICAgICBzZXJ2ZXI9e3NlcnZlcn1cbiAgICAgICAgdHJhbnNsYXRlPXt0cmFuc2xhdGV9XG4gICAgICAvPlxuICAgIClcbiAgfSlcblxuICByZXR1cm4gKFxuICAgIDxDYXJkXG4gICAgICBpZD17YHNjcmlwdHVyZV9jYXJkXyR7Y2FyZE51bX1gfVxuICAgICAgdGl0bGU9e3NjcmlwdHVyZUxhYmVsfVxuICAgICAgc2V0dGluZ3NUaXRsZT17c2NyaXB0dXJlVGl0bGUgKyAnIFNldHRpbmdzJ31cbiAgICAgIGl0ZW1zPXtpdGVtc31cbiAgICAgIGNsYXNzZXM9e2NsYXNzZXN9XG4gICAgICBoZWFkZXJzPXtoZWFkZXJzfVxuICAgICAgZmlsdGVycz17ZmlsdGVyc31cbiAgICAgIGZvbnRTaXplPXtmb250U2l6ZX1cbiAgICAgIGl0ZW1JbmRleD17aXRlbUluZGV4fVxuICAgICAgc2V0RmlsdGVycz17c2V0RmlsdGVyc31cbiAgICAgIHNldEZvbnRTaXplPXtzZXRGb250U2l6ZX1cbiAgICAgIHNldEl0ZW1JbmRleD17c2V0SXRlbUluZGV4fVxuICAgICAgbWFya2Rvd25WaWV3PXttYXJrZG93blZpZXd9XG4gICAgICBzZXRNYXJrZG93blZpZXc9e3NldE1hcmtkb3duVmlld31cbiAgICAgIGdldEN1c3RvbUNvbXBvbmVudD17Z2V0U2NyaXB0dXJlU2VsZWN0b3J9XG4gICAgICBoaWRlTWFya2Rvd25Ub2dnbGVcbiAgICAgIG9uTWVudUNsb3NlPXtvbk1lbnVDbG9zZX1cbiAgICAgIG9uTWluaW1pemU9e29uTWluaW1pemUgPyAoKSA9PiBvbk1pbmltaXplKGlkKSA6IG51bGx9XG4gICAgICBlZGl0YWJsZT17ZW5hYmxlRWRpdCB8fCBlbmFibGVBbGlnbm1lbnR9XG4gICAgICBzYXZlZD17c3RhcnRTYXZlIHx8ICFoYXZlVW5zYXZlZENoYW5nZXN9XG4gICAgICBvblNhdmVFZGl0PXsoKSA9PiBzZXRTdGF0ZSh7IHNhdmVDbGlja2VkOiB0cnVlIH0pfVxuICAgID5cbiAgICAgIDxkaXYgaWQ9XCJzY3JpcHR1cmUtcGFuZS1saXN0XCI+XG4gICAgICAgIHtyZW5kZXJlZFNjcmlwdHVyZVBhbmVzfVxuICAgICAgPC9kaXY+XG4gICAgPC9DYXJkPlxuICApXG59XG5cblNjcmlwdHVyZUNhcmQucHJvcFR5cGVzID0ge1xuICAvKiogaHRtbCBpZGVudGlmaWVyIHRvIHVzZSBmb3IgY2FyZCAqL1xuICBpZDogUHJvcFR5cGVzLnN0cmluZyxcbiAgLyoqIG1ldGhvZCB0byBkZXRlcm1pbmUgaWYgTlQgb3IgT1QgKi9cbiAgaXNOVDogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbiAgLyoqIHRpdGxlIGZvciBzY3JpcHR1cmUgY2FyZCAqL1xuICB0aXRsZTogUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLFxuICAvKiogZ2V0IGxhbmd1YWdlIGRldGFpbHMgKi9cbiAgZ2V0TGFuZ3VhZ2U6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4gIC8qKiBzY3JpcHR1cmUgY2FyZCBudW1iZXIgKDAgdG8gMiBmb3IgZXhhbXBsZSkgKi9cbiAgY2FyZE51bTogUHJvcFR5cGVzLm51bWJlci5pc1JlcXVpcmVkLFxuICAvKiogcmVzb3VyY2Ugb2JqZWN0ICovXG4gIHJlc291cmNlOiBQcm9wVHlwZXMuc2hhcGUoe1xuICAgIC8qKiByZXNvdXJjZSBsYW5ndWFnZSB0byB1c2UgKi9cbiAgICBsYW5ndWFnZUlkOiBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsXG4gICAgLyoqIHJlcG8gb3duZXIgc3VjaCBhcyB1bmZvbGRpbmdXb3JkICovXG4gICAgb3duZXI6IFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCxcbiAgICAvKiogcmVzb3VyY2VJZCB0byB1c2UgKGUuZy4gdWdudCkgKi9cbiAgICByZXNvdXJjZUlkOiBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsXG4gICAgLyoqIHJlcG8gb3duZXIgZm9yIG9yaWdpbmFsIGxhbmd1YWdlcyBzdWNoIGFzIHVuZm9sZGluZ1dvcmQgKi9cbiAgICBvcmlnaW5hbExhbmd1YWdlT3duZXI6IFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCxcbiAgfSksXG4gIHJlZmVyZW5jZTogUHJvcFR5cGVzLnNoYXBlKHtcbiAgICAvKiogcHJvamVjdElkIChib29rSUQpIHRvIHVzZSAqL1xuICAgIHByb2plY3RJZDogUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLFxuICAgIC8qKiBjdXJyZW50IGNoYXB0ZXIgbnVtYmVyICovXG4gICAgY2hhcHRlcjogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLm51bWJlciwgUHJvcFR5cGVzLnN0cmluZ10pLmlzUmVxdWlyZWQsXG4gICAgLyoqIGN1cnJlbnQgdmVyc2UgbnVtYmVyICovXG4gICAgdmVyc2U6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5udW1iZXIsIFByb3BUeXBlcy5zdHJpbmddKS5pc1JlcXVpcmVkLFxuICB9KSxcbiAgLyoqIHNlcnZlciAoZS5nLiAnaHR0cHM6Ly9naXQuZG9vcjQzLm9yZycpICovXG4gIHNlcnZlcjogUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLFxuICAvKiogcmVwbyBicmFuY2ggb3IgdGFnIHN1Y2ggYXMgbWFzdGVyICovXG4gIGFwcFJlZjogUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLFxuICAvKiogaWYgdHJ1ZSB0aGVuIHdvcmQgZGF0YSBob3ZlciBpcyBzaG93biAqL1xuICBkaXNhYmxlV29yZFBvcG92ZXI6IFByb3BUeXBlcy5ib29sLFxuICAvKiogQ1NTIGNsYXNzZXMgKi9cbiAgY2xhc3NlczogUHJvcFR5cGVzLm9iamVjdCxcbiAgLyoqIHJlc291cmNlTGluayAqL1xuICByZXNvdXJjZUxpbms6IFByb3BUeXBlcy5hbnksXG4gIC8qKiB1c2UgbWV0aG9kIGZvciB1c2luZyBsb2NhbCBzdG9yYWdlIHNwZWNpZmljIGZvciB1c2VyICovXG4gIHVzZVVzZXJMb2NhbFN0b3JhZ2U6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4gIC8qKiBvcHRpb25hbCBjYWxsYmFjayBpZiBlcnJvciBsb2FkaW5nIHJlc291cmNlLCBwYXJhbWV0ZXIgcmV0dXJuZWQgYXJlOlxuICAgKiAgICAoe3N0cmluZ30gZXJyb3JNZXNzYWdlLCB7Ym9vbGVhbn0gaXNBY2Nlc3NFcnJvciwge29iamVjdH0gcmVzb3VyY2VTdGF0dXMpXG4gICAqICAgICAgLSBpc0FjY2Vzc0Vycm9yIC0gaXMgdHJ1ZSBpZiB0aGlzIHdhcyBhbiBlcnJvciB0cnlpbmcgdG8gYWNjZXNzIGZpbGVcbiAgICogICAgICAtIHJlc291cmNlU3RhdHVzIC0gaXMgb2JqZWN0IGNvbnRhaW5pbmcgZGV0YWlscyBhYm91dCBwcm9ibGVtcyBmZXRjaGluZyByZXNvdXJjZSAqL1xuICBvblJlc291cmNlRXJyb3I6IFByb3BUeXBlcy5mdW5jLFxuICAvKiogb3B0aW9uYWwgaHR0cCB0aW1lb3V0IGluIG1pbGxpc2Vjb25kcyBmb3IgZmV0Y2hpbmcgcmVzb3VyY2VzLCBkZWZhdWx0IGlzIDAgKHZlcnkgbG9uZyB3YWl0KSAqL1xuICBodHRwQ29uZmlnOiBQcm9wVHlwZXMub2JqZWN0LFxuICAvKiogb3B0aW9uYWwgdXJsIGZvciBncmVlayByZXBvICovXG4gIGdyZWVrUmVwb1VybDogUHJvcFR5cGVzLnN0cmluZyxcbiAgLyoqIG9wdGlvbmFsIHVybCBmb3IgaGVicmV3IHJlcG8gKi9cbiAgaGVicmV3UmVwb1VybDogUHJvcFR5cGVzLnN0cmluZyxcbiAgLyoqIGZ1bmN0aW9uIHRvIGdldCBsYXRlc3QgbGV4aWNvbiBkYXRhICovXG4gIGdldExleGljb25EYXRhOiBQcm9wVHlwZXMuZnVuYyxcbiAgLyoqIGZ1bmN0aW9uIHRvIHByZS1sb2FkIGxleGljb24gZGF0YSBmb3IgdmVyc2UgKi9cbiAgZmV0Y2hHbG9zc2VzRm9yVmVyc2U6IFByb3BUeXBlcy5mdW5jLFxuICAvKiogb3B0aW9uYWwgZnVuY3Rpb24gZm9yIGxvY2FsaXphdGlvbiAqL1xuICB0cmFuc2xhdGU6IFByb3BUeXBlcy5mdW5jLFxuICAvKiogZnVuY3Rpb24gdG8gbWluaW1pemUgdGhlIGNhcmQgKG9wdGlvbmFsKSAqL1xuICBvbk1pbmltaXplOiBQcm9wVHlwZXMuZnVuYyxcbiAgLyoqIHVzZXItbmFtZSAqL1xuICBsb2dnZWRJblVzZXI6IFByb3BUeXBlcy5zdHJpbmcsXG4gIC8qKiBhdXRoZW50aWNhdGlvbiBpbmZvICovXG4gIGF1dGhlbnRpY2F0aW9uOiBQcm9wVHlwZXMub2JqZWN0LFxuICAvKiogZnVuY3Rpb24gdG8gc2V0IHN0YXRlIGluIGFwcCB0aGF0IHRoZXJlIGFyZSB1bnNhdmVkIGNoYW5nZXMgKi9cbiAgc2V0U2F2ZWRDaGFuZ2VzOiBQcm9wVHlwZXMuZnVuYyxcbiAgLyoqIGluZGV4IGZvciBjdXJyZW50IGJvb2sgKGUuZy4gJzAxJyBmb3IgJ2dlbicpKi9cbiAgYm9va0luZGV4OiBQcm9wVHlwZXMuc3RyaW5nLFxuICAvKiogY2FsbGJhY2sgdG8gaW5kaWNhdGUgdGhhdCB3ZSBhcmUgdXNpbmcgYSB2ZXJzZSByYW5nZSBoZXJlICovXG4gIGFkZFZlcnNlUmFuZ2U6IFByb3BUeXBlcy5mdW5jLFxuICAvKiogY2FsbGJhY2sgdG8gdXBkYXRlIHdvcmQgYWxpZ25lciBzdGF0ZSAqL1xuICBzZXRXb3JkQWxpZ25lclN0YXR1czogUHJvcFR5cGVzLmZ1bmMsXG59XG4iXX0=
|
|
1321
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jb21wb25lbnRzL1NjcmlwdHVyZUNhcmQvU2NyaXB0dXJlQ2FyZC50c3giXSwibmFtZXMiOlsiUmVhY3QiLCJQcm9wVHlwZXMiLCJjb3JlIiwiU2VsZWN0aW9uc0NvbnRleHRQcm92aWRlciIsInVzZm1qcyIsInVzZUVkaXQiLCJJY29uQnV0dG9uIiwiUnhMaW5rMiIsIlJ4TGlua0JyZWFrMiIsIkNhcmQiLCJ1c2VDYXJkU3RhdGUiLCJ1c2VVc2VyQnJhbmNoIiwiRVJST1JfU1RBVEUiLCJNQU5JRkVTVF9OT1RfTE9BREVEX0VSUk9SIiwiZ2V0UXVvdGVNYXRjaGVzSW5Cb29rUmVmIiwiQWxpZ25tZW50SGVscGVycyIsIlVzZm1GaWxlQ29udmVyc2lvbkhlbHBlcnMiLCJpc0VxdWFsIiwiZ2V0VmVyc2VzIiwiU2NyaXB0dXJlUGFuZSIsIlNjcmlwdHVyZVNlbGVjdG9yIiwidXNlU2NyaXB0dXJlU2V0dGluZ3MiLCJjbGVhbnVwVmVyc2VPYmplY3RzIiwiZml4T2NjdXJyZW5jZSIsImdldFJlc291cmNlTGluayIsImdldFJlc291cmNlTWVzc2FnZSIsImdldFNjcmlwdHVyZVZlcnNpb25TZXR0aW5ncyIsImlzT3JpZ2luYWxCaWJsZSIsImRlbGF5IiwiYXJlTWFwc1RoZVNhbWUiLCJUaXRsZSIsIk5UX09SSUdfTEFORyIsIk9SSUdJTkFMX1NPVVJDRSIsIk9UX09SSUdfTEFORyIsIlZlcnNlU2VsZWN0b3JQb3B1cCIsIktFWV9GT05UX1NJWkVfQkFTRSIsImxhYmVsIiwic3R5bGUiLCJtYXJnaW5Ub3AiLCJ3aWR0aCIsIlNjcmlwdHVyZUNhcmQiLCJhcHBSZWYiLCJhdXRoZW50aWNhdGlvbiIsImJvb2tJbmRleCIsImNhcmROdW0iLCJjbGFzc2VzIiwiZGlzYWJsZVdvcmRQb3BvdmVyIiwiZmV0Y2hHbG9zc2VzRm9yVmVyc2UiLCJnZXRMYW5ndWFnZSIsImdldExleGljb25EYXRhIiwiZ3JlZWtSZXBvVXJsIiwiaGVicmV3UmVwb1VybCIsImh0dHBDb25maWciLCJpZCIsImlzTlQiLCJsb2dnZWRJblVzZXIiLCJvbk1pbmltaXplIiwib25SZXNvdXJjZUVycm9yIiwicmVmZXJlbmNlIiwicmVzb3VyY2UiLCJvd25lciIsImxhbmd1YWdlSWQiLCJyZXNvdXJjZUlkIiwib3JpZ2luYWxMYW5ndWFnZU93bmVyIiwicmVzb3VyY2VMaW5rIiwic2VsZWN0ZWRRdW90ZSIsInNlcnZlciIsInNldFNhdmVkQ2hhbmdlcyIsInNldFdvcmRBbGlnbmVyU3RhdHVzIiwidHJhbnNsYXRlIiwidGl0bGUiLCJ1c2VVc2VyTG9jYWxTdG9yYWdlIiwiYm9va0lkIiwicHJvamVjdElkIiwidXNlU3RhdGUiLCJjaGVja0ZvckVkaXRCcmFuY2giLCJjdXJyZW50UmVmZXJlbmNlIiwiZWRpdEJyYW5jaFJlYWR5IiwiaGF2ZVVuc2F2ZWRDaGFuZ2VzIiwibGFzdFNlbGVjdGVkUXVvdGUiLCJvcmlnaW5hbFZlcnNlT2JqZWN0cyIsInJlYWR5Rm9yRmV0Y2giLCJyZWYiLCJzYXZlQ2xpY2tlZCIsInNhdmVDb250ZW50Iiwic2VsZWN0aW9ucyIsIk1hcCIsInNoYSIsInN0YXJ0U2F2ZSIsInVybEVycm9yIiwidXNpbmdVc2VyQnJhbmNoIiwidW5zYXZlZENoYW5nZXNMaXN0IiwidmVyc2VzRm9yUmVmIiwic2hvd0FsaWdubWVudFBvcHVwIiwidmVyc2VTZWxlY3RlZEZvckFsaWdubWVudCIsInZlcnNlc0FsaWdubWVudFN0YXR1cyIsInZlcnNlT2JqZWN0c01hcCIsInN0YXRlIiwic2V0U3RhdGVfIiwiZm9udFNpemUiLCJzZXRGb250U2l6ZSIsImlzTlRfIiwic2V0U3RhdGUiLCJuZXdTdGF0ZSIsInByZXZTdGF0ZSIsInNldE9yaWdpbmFsU2NyaXB0dXJlUmVzb3VyY2UiLCJuZXdSZXNvdXJjZSIsIm5ld0Jvb2tPYmplY3RzIiwiYm9va09iamVjdHMiLCJfbmV3Qm9va09iamVjdHMiLCJjYWNoZSIsIm1heEFnZSIsIm5vQ2FjaGUiLCJzZXRVcmxFcnJvciIsImVycm9yIiwid2hvbGVCb29rIiwiaXNOZXdUZXN0YW1lbnQiLCJzY3JpcHR1cmVDb25maWciLCJzZXRTY3JpcHR1cmUiLCJzY3JpcHR1cmVTZXR0aW5ncyIsInNjcmlwdHVyZVZlcnNpb25IaXN0IiwiZmV0Y2hSZXNwXyIsImZldGNoUmVzcG9uc2UiLCJyZXBvIiwicmVmZXJlbmNlXyIsInVzZUVmZmVjdCIsIl9zaGEiLCJkYXRhIiwidXJsIiwiZG93bmxvYWRfdXJsIiwiY29uc29sZSIsImxvZyIsIkpTT04iLCJzdHJpbmdpZnkiLCJjYXJkUmVzb3VyY2VJZCIsInJlZl8iLCJjYW5Vc2VFZGl0QnJhbmNoIiwiaW5jbHVkZXMiLCJjYXJkSWQiLCJicmFuY2hEZXRlcm1pbmVkIiwidXNlckVkaXRCcmFuY2hOYW1lIiwiX3VzaW5nVXNlckJyYW5jaCIsIndvcmtpbmdSZXNvdXJjZUJyYW5jaCIsInN0YXJ0RWRpdEJyYW5jaCIsImFjdGlvbnMiLCJzdGFydEVkaXQiLCJ3b3JraW5nUmVmIiwic2NyaXB0dXJlVGl0bGUiLCJyZXNvdXJjZVN0YXR1cyIsIm1lc3NhZ2UiLCJpc0FjY2Vzc0Vycm9yIiwidmVyc2lvbiIsInVwZGF0ZVRpdGxlIiwiZ2V0U2NyaXB0dXJlU2VsZWN0b3IiLCJzY3JpcHR1cmVTZWxlY3Rpb25Db25maWciLCJvbk1lbnVDbG9zZSIsImxhbmd1YWdlSWRfIiwibGFuZ3VhZ2UiLCJkaXJlY3Rpb24iLCJfcmVmZXJlbmNlIiwiaXNIZWJyZXciLCJmb250RmFjdG9yIiwic2NhbGVkRm9udFNpemUiLCJpdGVtcyIsImhlYWRlcnMiLCJmaWx0ZXJzIiwiaXRlbUluZGV4IiwibWFya2Rvd25WaWV3Iiwic2V0RmlsdGVycyIsInNldEl0ZW1JbmRleCIsInNldE1hcmtkb3duVmlldyIsInJlZlN0eWxlIiwidXNlTWVtbyIsImZvbnRGYW1pbHkiLCJNYXRoIiwicm91bmQiLCJjb250ZW50U3R5bGUiLCJzY3JpcHR1cmVMYWJlbCIsImRpc2FibGVXb3JkUG9wb3Zlcl8iLCJ1c2luZ09yaWdpbmFsQmlibGUiLCJ1bmRlZmluZWQiLCJmZXRjaEdsb3NzRGF0YUZvclZlcnNlIiwidmVyc2VPYmplY3RzIiwidmVyc2VSZWYiLCJfdmVyc2VPYmplY3RzIiwidmVyc2VEYXRhIiwiY29uY2F0IiwibGVuZ3RoIiwiZW5hYmxlRWRpdCIsImVuYWJsZUFsaWdubWVudCIsIm9yaWdpbmFsUmVwb1VybCIsInNjcmlwdHVyZUFsaWdubWVudEVkaXRDb25maWciLCJjdXJyZW50VmVyc2VSZWYiLCJfc2V0U2F2ZWRDaGFuZ2VzIiwic291cmNlTGFuZ3VhZ2UiLCJ0YXJnZXRMYW5ndWFnZSIsImN1cnJlbnRJbmRleCIsInNhdmVkIiwiZ2V0Q2hhbmdlcyIsImNsZWFyQ2hhbmdlcyIsIl91bnNhdmVkQ2hhbmdlc0xpc3QiLCJoYXNPd25Qcm9wZXJ0eSIsIl9oYXZlVW5zYXZlZENoYW5nZXMiLCJPYmplY3QiLCJrZXlzIiwiZmluZFJlZkluQXJyYXkiLCJmaW5kSXRlbSIsImNodW5rcyIsInJlZkxlbiIsImluZGV4IiwiZmluZEluZGV4IiwiY2h1bmsiLCJpZHgiLCJzdWJzdHJpbmciLCJuZXh0Q2hhciIsImdldEJvb2tOYW1lIiwiYm9va0NhcHMiLCJ0b1VwcGVyQ2FzZSIsImZpbGVwYXRoIiwiY29udGVudCIsImNvbmZpZyIsInRva2VuIiwidGltZW91dCIsInNlcnZlclRpbWVPdXQiLCJhdXRob3IiLCJicmFuY2giLCJzYXZlRXJyb3IiLCJpc1NhdmVFcnJvciIsImlzRXJyb3IiLCJvblNhdmVFZGl0IiwiX3NhdmVFZGl0IiwiaW5mbyIsInRoZW4iLCJzdWNjZXNzIiwidW5zYXZlZENhcmRJbmRpY2VzIiwiY2FyZEluZGV4IiwicmVsb2FkUmVzb3VyY2UiLCJtZXJnZVZlcnNlT2JqZWN0c0ludG9CaWJsZVVzZm0iLCJiaWJsZVVzZm0iLCJ1cGRhdGVkVmVyc2VPYmplY3RzIiwibmV3VXNmbSIsImNoYXB0ZXJDaHVua3MiLCJzcGxpdCIsImNoYXB0ZXJJbmRleCIsImNoYXB0ZXIiLCJjdXJyZW50Q2hhcHRlciIsInZlcnNlQ2h1bmtzIiwidmVyc2VJbmRleCIsInZlcnNlIiwibmV3VmVyc2VVc2ZtIiwiY29udmVydFZlcnNlRGF0YVRvVVNGTSIsIm9sZFZlcnNlIiwidmVyc2VOdW1MZW4iLCJuZXdDaGFwdGVyIiwiam9pbiIsImNyZWF0ZUVkaXRCcmFuY2giLCJ3YXJuIiwiZ2V0UmVzcG9uc2VEYXRhIiwibWVyZ2VGYWlsIiwicGFyc2VJbnQiLCJuZXdCb29rSnNvbiIsIm5ld1ZlcnNlVGV4dCIsInRhcmdldFZlcnNlT2JqZWN0c18iLCJ1cGRhdGVBbGlnbm1lbnRzVG9UYXJnZXRWZXJzZSIsInRhcmdldFZlcnNlT2JqZWN0cyIsInVwZGF0ZVZlcnNlIiwidG9VU0ZNIiwiZm9yY2VkTmV3TGluZXMiLCJfdmVyc2VzRm9yUmVmIiwibmV3U2VsZWN0aW9ucyIsInVwZGF0ZVNlbGVjdGlvbnMiLCJfbWFwIiwib3JpZ2luYWxCb29rSWQiLCJib29rVmVyc2VPYmplY3QiLCJjaGFwdGVycyIsIm5ld1NlbGVjdGVkUXVvdGUiLCJxdW90ZSIsIm9yaWdpbmFsVmVyc2VzIiwic3Vic3RpdHV0ZSIsInN0YXJ0VmVyc2UiLCJsYXN0VmVyc2UiLCJpIiwibCIsIl92ZXJzZSIsInZlcnNlcyIsInZlcnNlSXRlbSIsInZvIiwic2V0Iiwic3ViUmVmIiwicXVvdGVNYXRjaGVzIiwiYm9va09iamVjdCIsIm9jY3VycmVuY2UiLCJzaXplIiwiZm9yRWFjaCIsIndvcmRzIiwia2V5IiwiX2tleSIsIm1hcCIsIndvcmQiLCJ0ZXh0Iiwibm9ybWFsaXplU3RyaW5nIiwidXBkYXRlVmVyc2VzQWxpZ25tZW50U3RhdHVzIiwiYWxpZ25lZCIsInJlbmRlcmVkU2NyaXB0dXJlUGFuZXMiLCJfY3VycmVudFZlcnNlRGF0YSIsImluaXRpYWxWZXJzZU9iamVjdHMiLCJfc2NyaXB0dXJlQWxpZ25tZW50RWRpdENvbmZpZyIsImlzVmVyc2VTZWxlY3RlZEZvckFsaWdubWVudCIsImhhbmRsZUFsaWduQnV0dG9uQ2xpY2siLCJvblJlbmRlclRvb2xiYXIiLCJuZXdJdGVtcyIsImFsbFZlcnNlc0FsaWduZWQiLCJ2YWx1ZXMiLCJldmVyeSIsImFsaWduU3RhdHVzIiwiYWxpZ25JY29uIiwiYWxpZ25CdXR0b25UZXh0IiwicHVzaCIsImN1cnNvciIsInByb3BUeXBlcyIsInN0cmluZyIsImZ1bmMiLCJpc1JlcXVpcmVkIiwibnVtYmVyIiwic2hhcGUiLCJvbmVPZlR5cGUiLCJib29sIiwib2JqZWN0IiwiYW55Il0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLE9BQU8sS0FBS0EsS0FBWixNQUF1QixPQUF2QjtBQUNBLE9BQU8sS0FBS0MsU0FBWixNQUEyQixZQUEzQjtBQUNBLFNBQVNDLElBQVQsRUFBZUMseUJBQWYsUUFBZ0QseUJBQWhEO0FBQ0EsT0FBT0MsTUFBUCxNQUFtQixTQUFuQjtBQUNBLFNBQVNDLE9BQVQsUUFBd0IscUJBQXhCO0FBQ0EsU0FBU0MsVUFBVCxRQUEyQixlQUEzQjtBQUNBLFNBQVNDLE9BQVQsRUFBa0JDLFlBQWxCLFFBQXNDLGdCQUF0QztBQUNBLFNBQ0VDLElBREYsRUFHRUMsWUFIRixFQUlFQyxhQUpGLEVBS0VDLFdBTEYsRUFNRUMseUJBTkYsUUFPTyx1QkFQUDtBQVFBLFNBQVNDLHdCQUFULFFBQXlDLGtCQUF6QztBQUNBLFNBQVNDLGdCQUFULEVBQTJCQyx5QkFBM0IsUUFBNEQsa0JBQTVEO0FBQ0EsT0FBTyxLQUFLQyxPQUFaLE1BQXlCLFlBQXpCO0FBQ0EsU0FBU0MsU0FBVCxRQUEwQix1QkFBMUI7QUFDQSxTQUFTQyxhQUFULEVBQXdCQyxpQkFBeEIsUUFBaUQsSUFBakQ7QUFDQSxTQUFTQyxvQkFBVCxRQUFxQyxrQ0FBckM7QUFDQSxTQUNFQyxtQkFERixFQUVFQyxhQUZGLEVBR0VDLGVBSEYsRUFJRUMsa0JBSkYsRUFLRUMsMkJBTEYsRUFNRUMsZUFORixRQU9PLCtCQVBQO0FBUUEsU0FBU0MsS0FBVCxRQUFzQixtQkFBdEI7QUFDQSxT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cEREOztBQXFEeEI7QUFDQS9RLEVBQUFBLGNBQWMsRUFBRWhELFNBQVMsQ0FBQ2dVLElBdERGOztBQXVEeEI7QUFDQWxSLEVBQUFBLG9CQUFvQixFQUFFOUMsU0FBUyxDQUFDZ1UsSUF4RFI7O0FBeUR4QjtBQUNBNVAsRUFBQUEsU0FBUyxFQUFFcEUsU0FBUyxDQUFDZ1UsSUExREc7O0FBMkR4QjtBQUNBelEsRUFBQUEsVUFBVSxFQUFFdkQsU0FBUyxDQUFDZ1UsSUE1REU7O0FBNkR4QjtBQUNBMVEsRUFBQUEsWUFBWSxFQUFFdEQsU0FBUyxDQUFDK1QsTUE5REE7O0FBK0R4QjtBQUNBdFIsRUFBQUEsY0FBYyxFQUFFekMsU0FBUyxDQUFDc1UsTUFoRUY7O0FBaUV4QjtBQUNBcFEsRUFBQUEsZUFBZSxFQUFFbEUsU0FBUyxDQUFDZ1UsSUFsRUg7O0FBbUV4QjtBQUNBdFIsRUFBQUEsU0FBUyxFQUFFMUMsU0FBUyxDQUFDK1QsTUFwRUc7O0FBcUV4QjtBQUNBNVAsRUFBQUEsb0JBQW9CLEVBQUVuRSxTQUFTLENBQUNnVSxJQXRFUjs7QUF1RXhCO0FBQ0FoUSxFQUFBQSxhQUFhLEVBQUVoRSxTQUFTLENBQUNzVTtBQXhFRCxDQUExQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0J1xuaW1wb3J0ICogYXMgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnXG5pbXBvcnQgeyBjb3JlLCBTZWxlY3Rpb25zQ29udGV4dFByb3ZpZGVyIH0gZnJvbSAnc2NyaXB0dXJlLXJlc291cmNlcy1yY2wnXG5pbXBvcnQgdXNmbWpzIGZyb20gJ3VzZm0tanMnXG5pbXBvcnQgeyB1c2VFZGl0IH0gZnJvbSAnZ2l0ZWEtcmVhY3QtdG9vbGtpdCdcbmltcG9ydCB7IEljb25CdXR0b24gfSBmcm9tICdAbXVpL21hdGVyaWFsJ1xuaW1wb3J0IHsgUnhMaW5rMiwgUnhMaW5rQnJlYWsyIH0gZnJvbSAncmVhY3QtaWNvbnMvcngnXG5pbXBvcnQge1xuICBDYXJkLFxuXG4gIHVzZUNhcmRTdGF0ZSxcbiAgdXNlVXNlckJyYW5jaCxcbiAgRVJST1JfU1RBVEUsXG4gIE1BTklGRVNUX05PVF9MT0FERURfRVJST1IsXG59IGZyb20gJ3RyYW5zbGF0aW9uLWhlbHBzLXJjbCdcbmltcG9ydCB7IGdldFF1b3RlTWF0Y2hlc0luQm9va1JlZiB9IGZyb20gJ3V3LXF1b3RlLWhlbHBlcnMnXG5pbXBvcnQgeyBBbGlnbm1lbnRIZWxwZXJzLCBVc2ZtRmlsZUNvbnZlcnNpb25IZWxwZXJzIH0gZnJvbSAnd29yZC1hbGlnbmVyLXJjbCdcbmltcG9ydCAqIGFzIGlzRXF1YWwgZnJvbSAnZGVlcC1lcXVhbCdcbmltcG9ydCB7IGdldFZlcnNlcyB9IGZyb20gJ2JpYmxlLXJlZmVyZW5jZS1yYW5nZSdcbmltcG9ydCB7IFNjcmlwdHVyZVBhbmUsIFNjcmlwdHVyZVNlbGVjdG9yIH0gZnJvbSAnLi4nXG5pbXBvcnQgeyB1c2VTY3JpcHR1cmVTZXR0aW5ncyB9IGZyb20gJy4uLy4uL2hvb2tzL3VzZVNjcmlwdHVyZVNldHRpbmdzJ1xuaW1wb3J0IHtcbiAgY2xlYW51cFZlcnNlT2JqZWN0cyxcbiAgZml4T2NjdXJyZW5jZSxcbiAgZ2V0UmVzb3VyY2VMaW5rLFxuICBnZXRSZXNvdXJjZU1lc3NhZ2UsXG4gIGdldFNjcmlwdHVyZVZlcnNpb25TZXR0aW5ncyxcbiAgaXNPcmlnaW5hbEJpYmxlLFxufSBmcm9tICcuLi8uLi91dGlscy9TY3JpcHR1cmVTZXR0aW5ncydcbmltcG9ydCB7IGRlbGF5IH0gZnJvbSAnLi4vLi4vdXRpbHMvZGVsYXknXG5pbXBvcnQgeyBhcmVNYXBzVGhlU2FtZSB9IGZyb20gJy4uLy4uL3V0aWxzL21hcHMnXG5pbXBvcnQgeyBUaXRsZSB9IGZyb20gJy4uL1NjcmlwdHVyZVBhbmUvc3R5bGVkJ1xuaW1wb3J0IHtcbiAgTlRfT1JJR19MQU5HLFxuICBPUklHSU5BTF9TT1VSQ0UsXG4gIE9UX09SSUdfTEFORyxcbn0gZnJvbSAnLi4vLi4vdXRpbHMnXG5pbXBvcnQgeyBWZXJzZVNlbGVjdG9yUG9wdXAgfSBmcm9tICcuLi9WZXJzZVNlbGVjdG9yUG9wdXAnXG5cbmNvbnN0IEtFWV9GT05UX1NJWkVfQkFTRSA9ICdzY3JpcHR1cmVQYW5lRm9udFNpemVfJ1xuY29uc3QgbGFiZWwgPSAnVmVyc2lvbidcbmNvbnN0IHN0eWxlID0geyBtYXJnaW5Ub3A6ICcxNnB4Jywgd2lkdGg6ICc1MDBweCcgfVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBTY3JpcHR1cmVDYXJkKHtcbiAgYXBwUmVmLFxuICBhdXRoZW50aWNhdGlvbixcbiAgYm9va0luZGV4LFxuICBjYXJkTnVtLFxuICBjbGFzc2VzLFxuICBkaXNhYmxlV29yZFBvcG92ZXIsXG4gIGZldGNoR2xvc3Nlc0ZvclZlcnNlLFxuICBnZXRMYW5ndWFnZSxcbiAgZ2V0TGV4aWNvbkRhdGEsXG4gIGdyZWVrUmVwb1VybCxcbiAgaGVicmV3UmVwb1VybCxcbiAgaHR0cENvbmZpZyxcbiAgaWQsXG4gIGlzTlQsXG4gIGxvZ2dlZEluVXNlcixcbiAgb25NaW5pbWl6ZSxcbiAgb25SZXNvdXJjZUVycm9yLFxuICByZWZlcmVuY2UsXG4gIHJlc291cmNlOiB7XG4gICAgb3duZXIsXG4gICAgbGFuZ3VhZ2VJZCxcbiAgICByZXNvdXJjZUlkLFxuICAgIG9yaWdpbmFsTGFuZ3VhZ2VPd25lcixcbiAgfSxcbiAgcmVzb3VyY2VMaW5rLFxuICBzZWxlY3RlZFF1b3RlLFxuICBzZXJ2ZXIsXG4gIHNldFNhdmVkQ2hhbmdlcyxcbiAgc2V0V29yZEFsaWduZXJTdGF0dXMsXG4gIHRyYW5zbGF0ZSxcbiAgdGl0bGUsXG4gIHVzZVVzZXJMb2NhbFN0b3JhZ2UsXG59KSB7XG4gIGNvbnN0IGJvb2tJZCA9IHJlZmVyZW5jZT8ucHJvamVjdElkXG4gIGNvbnN0IFtzdGF0ZSwgc2V0U3RhdGVfXSA9IFJlYWN0LnVzZVN0YXRlKHtcbiAgICBjaGVja0ZvckVkaXRCcmFuY2g6IDAsXG4gICAgY3VycmVudFJlZmVyZW5jZTogbnVsbCxcbiAgICBlZGl0QnJhbmNoUmVhZHk6IGZhbHNlLFxuICAgIGhhdmVVbnNhdmVkQ2hhbmdlczogZmFsc2UsXG4gICAgbGFzdFNlbGVjdGVkUXVvdGU6IG51bGwsXG4gICAgb3JpZ2luYWxWZXJzZU9iamVjdHM6IG51bGwsXG4gICAgcmVhZHlGb3JGZXRjaDogZmFsc2UsXG4gICAgcmVmOiBhcHBSZWYsXG4gICAgc2F2ZUNsaWNrZWQ6IGZhbHNlLFxuICAgIHNhdmVDb250ZW50OiBudWxsLFxuICAgIHNlbGVjdGlvbnM6IG5ldyBNYXAoKSxcbiAgICBzaGE6IG51bGwsXG4gICAgc3RhcnRTYXZlOiBmYWxzZSxcbiAgICB1cmxFcnJvcjogbnVsbCxcbiAgICB1c2luZ1VzZXJCcmFuY2g6IGZhbHNlLFxuICAgIHVuc2F2ZWRDaGFuZ2VzTGlzdDoge30sXG4gICAgdmVyc2VzRm9yUmVmOiBudWxsLFxuICAgIHNob3dBbGlnbm1lbnRQb3B1cDogZmFsc2UsXG4gICAgdmVyc2VTZWxlY3RlZEZvckFsaWdubWVudDogbnVsbCxcbiAgICB2ZXJzZXNBbGlnbm1lbnRTdGF0dXM6IG51bGwsXG4gICAgdmVyc2VPYmplY3RzTWFwOiBuZXcgTWFwKCksXG4gIH0pXG4gIGNvbnN0IHtcbiAgICBjaGVja0ZvckVkaXRCcmFuY2gsXG4gICAgY3VycmVudFJlZmVyZW5jZSxcbiAgICBlZGl0QnJhbmNoUmVhZHksXG4gICAgaGF2ZVVuc2F2ZWRDaGFuZ2VzLFxuICAgIGxhc3RTZWxlY3RlZFF1b3RlLFxuICAgIG9yaWdpbmFsVmVyc2VPYmplY3RzLFxuICAgIHJlYWR5Rm9yRmV0Y2gsXG4gICAgcmVmLFxuICAgIHNhdmVDbGlja2VkLFxuICAgIHNhdmVDb250ZW50LFxuICAgIHNlbGVjdGlvbnMsXG4gICAgc2hhLFxuICAgIHNob3dBbGlnbm1lbnRQb3B1cCxcbiAgICBzdGFydFNhdmUsXG4gICAgdXJsRXJyb3IsXG4gICAgdXNpbmdVc2VyQnJhbmNoLFxuICAgIHVuc2F2ZWRDaGFuZ2VzTGlzdCxcbiAgICB2ZXJzZU9iamVjdHNNYXAsXG4gICAgdmVyc2VTZWxlY3RlZEZvckFsaWdubWVudCxcbiAgICB2ZXJzZXNBbGlnbm1lbnRTdGF0dXMsXG4gICAgdmVyc2VzRm9yUmVmLFxuICB9ID0gc3RhdGVcblxuICBjb25zdCBbZm9udFNpemUsIHNldEZvbnRTaXplXSA9IHVzZVVzZXJMb2NhbFN0b3JhZ2UoS0VZX0ZPTlRfU0laRV9CQVNFICsgY2FyZE51bSwgMTAwKVxuICBjb25zdCBpc05UXyA9IGlzTlQoYm9va0lkKVxuXG4gIGZ1bmN0aW9uIHNldFN0YXRlKG5ld1N0YXRlKSB7XG4gICAgc2V0U3RhdGVfKHByZXZTdGF0ZSA9PiAoeyAuLi5wcmV2U3RhdGUsIC4uLm5ld1N0YXRlIH0pKVxuICB9XG5cbiAgZnVuY3Rpb24gc2V0T3JpZ2luYWxTY3JpcHR1cmVSZXNvdXJjZShuZXdSZXNvdXJjZSkge1xuICAgIGNvbnN0IG5ld0Jvb2tPYmplY3RzID0gbmV3UmVzb3VyY2U/LmJvb2tPYmplY3RzIHx8IHt9XG4gICAgY29uc3QgYm9va0lkID0gbmV3UmVzb3VyY2U/LnJlZmVyZW5jZT8ucHJvamVjdElkXG4gICAgY29uc3QgX25ld0Jvb2tPYmplY3RzID0ge1xuICAgICAgLi4ubmV3Qm9va09iamVjdHMsXG4gICAgICBib29rSWQsXG4gICAgfVxuXG4gICAgaWYgKCFpc0VxdWFsKF9uZXdCb29rT2JqZWN0cywgb3JpZ2luYWxWZXJzZU9iamVjdHMpKSB7XG4gICAgICBzZXRTdGF0ZSh7IG9yaWdpbmFsVmVyc2VPYmplY3RzOiBfbmV3Qm9va09iamVjdHMgfSlcbiAgICB9XG4gIH1cblxuICBpZiAodXNpbmdVc2VyQnJhbmNoKSB7XG4gICAgaHR0cENvbmZpZyA9IHtcbiAgICAgIC4uLmh0dHBDb25maWcsXG4gICAgICBjYWNoZTogeyBtYXhBZ2U6IDAgfSxcbiAgICAgIG5vQ2FjaGU6IHRydWUsXG4gICAgfSAvLyBkaXNhYmxlIGh0dHAgY2FjaGluZ1xuICB9XG5cbiAgY29uc3Qge1xuICAgIGlzTmV3VGVzdGFtZW50LFxuICAgIHNjcmlwdHVyZUNvbmZpZyxcbiAgICBzZXRTY3JpcHR1cmUsXG4gICAgc2NyaXB0dXJlU2V0dGluZ3MsXG4gICAgc2NyaXB0dXJlVmVyc2lvbkhpc3QsXG4gIH0gPSB1c2VTY3JpcHR1cmVTZXR0aW5ncyh7XG4gICAgaXNOVCxcbiAgICB0aXRsZSxcbiAgICBvd25lcixcbiAgICByZWZlcmVuY2U6IGN1cnJlbnRSZWZlcmVuY2UsXG4gICAgYXBwUmVmOiByZWYsXG4gICAgc2VydmVyLFxuICAgIGNhcmROdW0sXG4gICAgbGFuZ3VhZ2VJZCxcbiAgICByZXNvdXJjZUlkLFxuICAgIHJlc291cmNlTGluayxcbiAgICB1c2VVc2VyTG9jYWxTdG9yYWdlLFxuICAgIGRpc2FibGVXb3JkUG9wb3ZlcixcbiAgICBvcmlnaW5hbExhbmd1YWdlT3duZXIsXG4gICAgc2V0VXJsRXJyb3I6IChlcnJvcikgPT4gc2V0U3RhdGUoeyB1cmxFcnJvcjogZXJyb3IgfSksXG4gICAgaHR0cENvbmZpZyxcbiAgICBncmVla1JlcG9VcmwsXG4gICAgaGVicmV3UmVwb1VybCxcbiAgICB3aG9sZUJvb2s6IHRydWUsXG4gICAgcmVhZHlGb3JGZXRjaCxcbiAgfSlcblxuICBjb25zdCBmZXRjaFJlc3BfID0gc2NyaXB0dXJlQ29uZmlnPy5mZXRjaFJlc3BvbnNlXG4gIC8vIEB0cy1pZ25vcmVcbiAgY29uc3QgcmVwbyA9IGAke3NjcmlwdHVyZUNvbmZpZz8ucmVzb3VyY2U/Lmxhbmd1YWdlSWR9XyR7c2NyaXB0dXJlQ29uZmlnPy5yZXNvdXJjZT8ucHJvamVjdElkfWBcbiAgY29uc3QgcmVmZXJlbmNlXyA9IHNjcmlwdHVyZUNvbmZpZz8ucmVmZXJlbmNlIHx8IG51bGxcblxuICBSZWFjdC51c2VFZmZlY3QoKCkgPT4geyAvLyBnZXQgdGhlIF9zaGEgZnJvbSBsYXN0IHNjcmlwdHVyZSBkb3dubG9hZFxuICAgIGNvbnN0IF9zaGEgPSBmZXRjaFJlc3BfPy5kYXRhPy5zaGEgfHwgbnVsbFxuICAgIGNvbnN0IHVybCA9IGZldGNoUmVzcF8/LmRhdGE/LmRvd25sb2FkX3VybCB8fCBudWxsXG5cbiAgICBpZiAoX3NoYSAhPT0gc2hhKSB7XG4gICAgICBjb25zb2xlLmxvZyhgU2NyaXB0dXJlQ2FyZDogZm9yICR7dXJsfSAke0pTT04uc3RyaW5naWZ5KHJlZmVyZW5jZV8pfSBuZXcgc2hhIGlzICR7X3NoYX1gKVxuICAgICAgc2V0U3RhdGUoeyBzaGE6IF9zaGEgfSlcbiAgICB9XG4gIH0sIFtmZXRjaFJlc3BfXSlcblxuICAvLyBAdHMtaWdub3JlXG4gIGNvbnN0IGNhcmRSZXNvdXJjZUlkID0gc2NyaXB0dXJlQ29uZmlnPy5yZXNvdXJjZT8ucHJvamVjdElkIHx8IHJlc291cmNlSWRcbiAgLy8gQHRzLWlnbm9yZVxuICBsZXQgcmVmXyA9IHNjcmlwdHVyZUNvbmZpZz8ucmVzb3VyY2U/LnJlZiB8fCBhcHBSZWZcbiAgY29uc3QgY2FuVXNlRWRpdEJyYW5jaCA9ICEhKGxvZ2dlZEluVXNlciAmJiBhdXRoZW50aWNhdGlvbiAmJiAocmVzb3VyY2VJZCAhPT0gT1JJR0lOQUxfU09VUkNFKSAmJiAvLyBUUklDS1kgaWYgbm90IG9yaWdpbmFsIGxhbmd1YWdlIGFuZCB3ZSBoYXZlIGxvZ2luIGRhdGEsIHRoZW4gd2UgY2FuIHVzZSB0aGUgZWRpdCBicmFuY2hcbiAgICAoKHJlZl8gPT09ICdtYXN0ZXInKSB8fCAocmVmXy5pbmNsdWRlcyhsb2dnZWRJblVzZXIpKSkpIC8vIGFsc28gbWFrZSBzdXJlIG5vdCBhIHZlcnNpb24gdGFnXG5cbiAgY29uc3Qge1xuICAgIHN0YXRlOiB7XG4gICAgICBicmFuY2hEZXRlcm1pbmVkLFxuICAgICAgdXNlckVkaXRCcmFuY2hOYW1lLFxuICAgICAgdXNpbmdVc2VyQnJhbmNoOiBfdXNpbmdVc2VyQnJhbmNoLFxuICAgICAgd29ya2luZ1Jlc291cmNlQnJhbmNoLFxuICAgIH0sXG4gICAgYWN0aW9uczogeyBzdGFydEVkaXQ6IHN0YXJ0RWRpdEJyYW5jaCB9LFxuICB9ID0gdXNlVXNlckJyYW5jaCh7XG4gICAgYXBwUmVmLFxuICAgIGF1dGhlbnRpY2F0aW9uOiBjYW5Vc2VFZGl0QnJhbmNoID8gYXV0aGVudGljYXRpb24gOiBudWxsLFxuICAgIGJvb2tJZCxcbiAgICBjYXJkSWQ6IGlkLFxuICAgIGNhcmRSZXNvdXJjZUlkLFxuICAgIGNoZWNrRm9yRWRpdEJyYW5jaCxcbiAgICBsYW5ndWFnZUlkLFxuICAgIGxvZ2dlZEluVXNlcjogY2FuVXNlRWRpdEJyYW5jaCA/IGxvZ2dlZEluVXNlciA6IG51bGwsXG4gICAgb3duZXIsXG4gICAgb25SZXNvdXJjZUVycm9yLFxuICAgIHNlcnZlcixcbiAgICB1c2VVc2VyTG9jYWxTdG9yYWdlLFxuICB9KVxuXG4gIGNvbnN0IHdvcmtpbmdSZWYgPSBjYW5Vc2VFZGl0QnJhbmNoID8gd29ya2luZ1Jlc291cmNlQnJhbmNoIDogYXBwUmVmXG4gIGxldCBzY3JpcHR1cmVUaXRsZVxuXG4gIGlmICghY2FuVXNlRWRpdEJyYW5jaCAmJiAhcmVhZHlGb3JGZXRjaCkgeyAvLyBpZiBiaWJsZSBub3QgZWxpZ2libGUgZm9yIHVzZXIgYnJhbmNoLCBtYWtlIHN1cmUgaXQncyByZWFkeVxuICAgIHNldFN0YXRlKHsgcmVhZHlGb3JGZXRjaDogdHJ1ZSB9KVxuICB9XG5cbiAgUmVhY3QudXNlRWZmZWN0KCgpID0+IHtcbiAgICBjb25zb2xlLmxvZyhgU2NyaXB0dXJlQ2FyZCBib29rIGNoYW5nZWRgLCB7IGJvb2tJZCwgb3duZXIsIGxhbmd1YWdlSWQsIHJlc291cmNlSWQgfSlcblxuICAgIGlmIChjYW5Vc2VFZGl0QnJhbmNoKSB7IC8vIGlmIGJpYmxlIGVsaWdpYmxlIGZvciB1c2VyIGJyYW5jaCwgcmVmcmVzaCBpdFxuICAgICAgc2V0U3RhdGUoeyByZWFkeUZvckZldGNoOiBmYWxzZSwgY2hlY2tGb3JFZGl0QnJhbmNoOiBjaGVja0ZvckVkaXRCcmFuY2ggKyAxIH0pXG4gICAgfVxuICB9LCBbYm9va0lkLCBvd25lciwgbGFuZ3VhZ2VJZCwgcmVzb3VyY2VJZF0pXG5cbiAgUmVhY3QudXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoIWlzRXF1YWwocmVmZXJlbmNlLCBjdXJyZW50UmVmZXJlbmNlKSkge1xuICAgICAgY29uc29sZS5sb2coYFNjcmlwdHVyZUNhcmQgcmVmZXJlbmNlIGNoYW5nZWRgLCByZWZlcmVuY2UpXG4gICAgICBzZXRTdGF0ZSh7IGN1cnJlbnRSZWZlcmVuY2U6IHJlZmVyZW5jZSB9KVxuICAgIH1cbiAgfSwgW3JlZmVyZW5jZV0pXG5cbiAgUmVhY3QudXNlRWZmZWN0KCgpID0+IHsgLy8gd2FpdGluZyBmb3IgYnJhbmNoIGZldGNoIHRvIGNvbXBsZXRlXG4gICAgY29uc29sZS5sb2coYFNjcmlwdHVyZUNhcmQgYnJhbmNoRGV0ZXJtaW5lZCBpcyAke2JyYW5jaERldGVybWluZWR9IGFuZCB3b3JraW5nUmVmIGlzICR7d29ya2luZ1JlZn0gYW5kIHJlYWR5Rm9yRmV0Y2ggaXMgJHtyZWFkeUZvckZldGNofWApXG5cbiAgICBpZiAoIXJlYWR5Rm9yRmV0Y2ggJiYgYnJhbmNoRGV0ZXJtaW5lZCApIHtcbiAgICAgIHNldFN0YXRlKHsgcmVhZHlGb3JGZXRjaDogdHJ1ZSwgcmVmOiB3b3JraW5nUmVmIH0pXG4gICAgfVxuICB9LCBbYnJhbmNoRGV0ZXJtaW5lZF0pXG5cbiAgUmVhY3QudXNlRWZmZWN0KCgpID0+IHsgLy8gc2VsZWN0IGNvcnJlY3Qgd29ya2luZyByZWYgLSBjb3VsZCBiZSBtYXN0ZXIsIHVzZXIgYnJhbmNoLCBvciByZWxlYXNlXG4gICAgaWYgKF91c2luZ1VzZXJCcmFuY2ggIT09IHVzaW5nVXNlckJyYW5jaCkge1xuICAgICAgc2V0U3RhdGUoeyB1c2luZ1VzZXJCcmFuY2g6IF91c2luZ1VzZXJCcmFuY2ggfSlcbiAgICB9XG4gIH0sIFtfdXNpbmdVc2VyQnJhbmNoLCB1c2luZ1VzZXJCcmFuY2hdKVxuXG4gIFJlYWN0LnVzZUVmZmVjdCgoKSA9PiB7IC8vIHVwZGF0ZSBkaXNwbGF5IHN0YXR1cyBpZiBlcnJvclxuICAgIGNvbnN0IGVycm9yID0gc2NyaXB0dXJlQ29uZmlnPy5yZXNvdXJjZVN0YXR1cz8uW0VSUk9SX1NUQVRFXVxuXG4gICAgaWYgKGVycm9yKSB7IC8vIGlmIGVycm9yIHdhcyBmb3VuZCBkbyBjYWxsYmFja1xuICAgICAgY29uc3QgcmVzb3VyY2VTdGF0dXMgPSBzY3JpcHR1cmVDb25maWc/LnJlc291cmNlU3RhdHVzXG4gICAgICBjb25zdCByZXNvdXJjZUxpbmsgPSBnZXRSZXNvdXJjZUxpbmsoc2NyaXB0dXJlQ29uZmlnKVxuICAgICAgY29uc3QgbWVzc2FnZSA9IGdldFJlc291cmNlTWVzc2FnZShyZXNvdXJjZVN0YXR1cywgc2VydmVyLCByZXNvdXJjZUxpbmssIGlzTlRfKVxuICAgICAgY29uc3QgaXNBY2Nlc3NFcnJvciA9IHJlc291cmNlU3RhdHVzW01BTklGRVNUX05PVF9MT0FERURfRVJST1JdXG4gICAgICBvblJlc291cmNlRXJyb3IgJiYgb25SZXNvdXJjZUVycm9yKG1lc3NhZ2UsIGlzQWNjZXNzRXJyb3IsIHJlc291cmNlU3RhdHVzKVxuICAgIH1cbiAgfSwgW3NjcmlwdHVyZUNvbmZpZz8ucmVzb3VyY2VTdGF0dXM/LltFUlJPUl9TVEFURV1dKVxuXG4gIGlmIChzY3JpcHR1cmVDb25maWcudGl0bGUgJiYgc2NyaXB0dXJlQ29uZmlnLnZlcnNpb24pIHtcbiAgICBzY3JpcHR1cmVUaXRsZSA9IGAke3NjcmlwdHVyZUNvbmZpZy50aXRsZX0gdiR7c2NyaXB0dXJlQ29uZmlnLnZlcnNpb259YFxuICAgIHNjcmlwdHVyZVZlcnNpb25IaXN0LnVwZGF0ZVRpdGxlKHNjcmlwdHVyZUNvbmZpZy5yZXNvdXJjZUxpbmssIHNjcmlwdHVyZVRpdGxlKVxuICB9IGVsc2Uge1xuICAgIHNjcmlwdHVyZVRpdGxlID0gYFRpdGxlIG1pc3NpbmcgZnJvbSBwcm9qZWN0IG1hbmlmZXN0YFxuICB9XG5cbiAgLyoqIER5bmFtaWNhbGx5IGNyZWF0ZXMgdGhlIHNjcmlwdHVyZSBzZWxlY3Rpb24gZHJvcGRvd24gdG8gYmUgaW5zZXJ0ZWQgaW50byBjYXJkIHNldHRpbmdzICovXG4gIGZ1bmN0aW9uIGdldFNjcmlwdHVyZVNlbGVjdG9yKCkge1xuICAgIGNvbnN0IHNjcmlwdHVyZVNlbGVjdGlvbkNvbmZpZyA9IGdldFNjcmlwdHVyZVZlcnNpb25TZXR0aW5ncyh7XG4gICAgICBsYWJlbCxcbiAgICAgIHJlc291cmNlTGluazogc2NyaXB0dXJlQ29uZmlnLnJlc291cmNlTGluayxcbiAgICAgIHNldFNjcmlwdHVyZSxcbiAgICAgIHNjcmlwdHVyZVZlcnNpb25IaXN0LFxuICAgIH0pXG5cbiAgICByZXR1cm4gPFNjcmlwdHVyZVNlbGVjdG9yIHsuLi5zY3JpcHR1cmVTZWxlY3Rpb25Db25maWd9IHN0eWxlPXtzdHlsZX0gZXJyb3JNZXNzYWdlPXt1cmxFcnJvcn0gLz5cbiAgfVxuXG4gIGZ1bmN0aW9uIG9uTWVudUNsb3NlKCkge1xuICAgIC8vIGNvbnNvbGUubG9nKGBvbk1lbnVDbG9zZSgpYClcbiAgICBzZXRTdGF0ZSh7IHVybEVycm9yOiBudWxsIH0pXG4gIH1cblxuICAvLyBAdHMtaWdub3JlXG4gIGNvbnN0IGxhbmd1YWdlSWRfID0gc2NyaXB0dXJlQ29uZmlnPy5yZXNvdXJjZT8ubGFuZ3VhZ2VJZFxuICBjb25zdCBsYW5ndWFnZSA9IGdldExhbmd1YWdlKHsgbGFuZ3VhZ2VJZDogbGFuZ3VhZ2VJZF8gfSlcbiAgY29uc3QgZGlyZWN0aW9uID0gKGxhbmd1YWdlPy5kaXJlY3Rpb24pIHx8ICdsdHInXG4gIGNvbnN0IF9yZWZlcmVuY2UgPSB7IC4uLnNjcmlwdHVyZUNvbmZpZy5yZWZlcmVuY2UgfVxuXG4gIGNvbnN0IGlzSGVicmV3ID0gKGxhbmd1YWdlSWRfID09PSAnaGJvJylcbiAgY29uc3QgZm9udEZhY3RvciA9IGlzSGVicmV3ID8gMS40IDogMSAvLyB3ZSBhdXRvbWF0aWNhbGx5IHNjYWxlIHVwIGZvbnQgc2l6ZSBmb3IgSGVicmV3XG4gIGNvbnN0IHNjYWxlZEZvbnRTaXplID0gZm9udFNpemUgKiBmb250RmFjdG9yXG5cbiAgY29uc3QgaXRlbXMgPSBudWxsXG4gIGNvbnN0IHtcbiAgICBzdGF0ZToge1xuICAgICAgaGVhZGVycywgZmlsdGVycywgaXRlbUluZGV4LCBtYXJrZG93blZpZXcsXG4gICAgfSxcbiAgICBhY3Rpb25zOiB7XG4gICAgICBzZXRGaWx0ZXJzLCBzZXRJdGVtSW5kZXgsIHNldE1hcmtkb3duVmlldyxcbiAgICB9LFxuICB9ID0gdXNlQ2FyZFN0YXRlKHsgaXRlbXMgfSlcblxuICBjb25zdCByZWZTdHlsZSA9IFJlYWN0LnVzZU1lbW8oKCkgPT4gKHtcbiAgICBmb250RmFtaWx5OiAnTm90byBTYW5zJyxcbiAgICBmb250U2l6ZTogYCR7TWF0aC5yb3VuZChzY2FsZWRGb250U2l6ZSAqIDAuOSl9JWAsXG4gIH0pLCBbc2NhbGVkRm9udFNpemVdKVxuXG4gIGNvbnN0IGNvbnRlbnRTdHlsZSA9IFJlYWN0LnVzZU1lbW8oKCkgPT4gKHtcbiAgICBmb250RmFtaWx5OiAnTm90byBTYW5zJyxcbiAgICBmb250U2l6ZTogYCR7c2NhbGVkRm9udFNpemV9JWAsXG4gIH0pLCBbc2NhbGVkRm9udFNpemVdKVxuXG4gIGNvbnN0IHNjcmlwdHVyZUxhYmVsID0gPFRpdGxlPntzY3JpcHR1cmVUaXRsZX08L1RpdGxlPlxuICBsZXQgZGlzYWJsZVdvcmRQb3BvdmVyXyA9IGRpc2FibGVXb3JkUG9wb3ZlclxuICBjb25zdCB1c2luZ09yaWdpbmFsQmlibGUgPSBpc09yaWdpbmFsQmlibGUoc2NyaXB0dXJlQ29uZmlnWydyZXNvdXJjZSddPy5wcm9qZWN0SWQpXG5cbiAgaWYgKGRpc2FibGVXb3JkUG9wb3ZlciA9PT0gdW5kZWZpbmVkKSB7IC8vIGlmIG5vdCBzcGVjaWZpZWQsIHRoZW4gZGV0ZXJtaW5lIGlmIG9yaWdpbmFsIGxhbmd1YWdlIHJlc291cmNlXG4gICAgZGlzYWJsZVdvcmRQb3BvdmVyXyA9ICF1c2luZ09yaWdpbmFsQmlibGVcbiAgfVxuXG4gIFJlYWN0LnVzZUVmZmVjdCgoKSA9PiB7IC8vIHByZS1jYWNoZSBnbG9zc2VzIG9uIHZlcnNlIGNoYW5nZVxuICAgIGNvbnN0IGZldGNoR2xvc3NEYXRhRm9yVmVyc2UgPSBhc3luYyAoKSA9PiB7XG4gICAgICBsZXQgdmVyc2VPYmplY3RzID0gW11cblxuICAgICAgLy8gZ2V0IHZlcnNlIG9iamVjdHMgb2YgYWxsIHRoZSB2ZXJzZXNcbiAgICAgIGZvciAoY29uc3QgdmVyc2VSZWYgb2Ygc2NyaXB0dXJlQ29uZmlnPy52ZXJzZXNGb3JSZWYgfHwgW10pIHtcbiAgICAgICAgY29uc3QgX3ZlcnNlT2JqZWN0cyA9IHZlcnNlUmVmPy52ZXJzZURhdGE/LnZlcnNlT2JqZWN0c1xuICAgICAgICB2ZXJzZU9iamVjdHMgPSB2ZXJzZU9iamVjdHMuY29uY2F0KF92ZXJzZU9iamVjdHMpXG4gICAgICB9XG5cbiAgICAgIGlmICghZGlzYWJsZVdvcmRQb3BvdmVyICYmIHZlcnNlT2JqZWN0cz8ubGVuZ3RoICYmIGZldGNoR2xvc3Nlc0ZvclZlcnNlKSB7XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1hd2FpdC1pbi1sb29wXG4gICAgICAgIGF3YWl0IGZldGNoR2xvc3Nlc0ZvclZlcnNlKHZlcnNlT2JqZWN0cywgbGFuZ3VhZ2VJZF8pXG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHVzaW5nT3JpZ2luYWxCaWJsZSkge1xuICAgICAgZmV0Y2hHbG9zc0RhdGFGb3JWZXJzZSgpXG4gICAgfVxuICB9LCBbIHZlcnNlc0ZvclJlZiwgbGFuZ3VhZ2VJZF8gXSlcblxuICBjb25zdCBlbmFibGVFZGl0ID0gIXVzaW5nT3JpZ2luYWxCaWJsZVxuICBjb25zdCBlbmFibGVBbGlnbm1lbnQgPSAhdXNpbmdPcmlnaW5hbEJpYmxlXG4gIGNvbnN0IG9yaWdpbmFsUmVwb1VybCA9IGlzTmV3VGVzdGFtZW50ID8gZ3JlZWtSZXBvVXJsIDogaGVicmV3UmVwb1VybFxuICBjb25zdCBzY3JpcHR1cmVBbGlnbm1lbnRFZGl0Q29uZmlnID0ge1xuICAgIGF1dGhlbnRpY2F0aW9uOiBjYW5Vc2VFZGl0QnJhbmNoID8gYXV0aGVudGljYXRpb24gOiBudWxsLFxuICAgIGJvb2tJbmRleCxcbiAgICBjdXJyZW50VmVyc2VSZWY6IF9yZWZlcmVuY2UsXG4gICAgZW5hYmxlRWRpdCxcbiAgICBlbmFibGVBbGlnbm1lbnQsXG4gICAgaHR0cENvbmZpZyxcbiAgICAvLyBAdHMtaWdub3JlXG4gICAgaXNOZXdUZXN0YW1lbnQsXG4gICAgbG9nZ2VkSW5Vc2VyOiBjYW5Vc2VFZGl0QnJhbmNoID8gbG9nZ2VkSW5Vc2VyIDogbnVsbCxcbiAgICBvcmlnaW5hbExhbmd1YWdlT3duZXIsXG4gICAgLy8gQHRzLWlnbm9yZVxuICAgIG9yaWdpbmFsUmVwb1VybCxcbiAgICBzY3JpcHR1cmVDb25maWcsXG4gICAgc2NyaXB0dXJlU2V0dGluZ3MsXG4gICAgc3RhcnRFZGl0QnJhbmNoLFxuICAgIHNldFNhdmVkQ2hhbmdlczogX3NldFNhdmVkQ2hhbmdlcyxcbiAgICBzb3VyY2VMYW5ndWFnZTogaXNOVF8gPyBOVF9PUklHX0xBTkcgOiBPVF9PUklHX0xBTkcsXG4gICAgdGFyZ2V0TGFuZ3VhZ2U6IGxhbmd1YWdlLFxuICAgIHRpdGxlOiBzY3JpcHR1cmVUaXRsZSxcbiAgICB3b3JraW5nUmVzb3VyY2VCcmFuY2g6IHJlZixcbiAgfVxuXG4gIC8qKlxuICAgKiB0aGlzIGdldHMgY2FsbGVkIHdoZW5ldmVyIGEgc2NyaXB0dXJlIHBhbmUgaGFzIGEgY2hhbmdlIGluIHNhdmUgc3RhdGVcbiAgICogQHBhcmFtIHtudW1iZXJ9IGN1cnJlbnRJbmRleFxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IHNhdmVkXG4gICAqIEBwYXJhbSB7ZnVuY3Rpb259IGdldENoYW5nZXMgLSB3aWxsIGJlIGNhbGxlZCB3aGVuZXZlciB1c2VyIGNsaWNrcyBzYXZlIGJ1dHRvblxuICAgKiBAcGFyYW0ge2Z1bmN0aW9ufSBjbGVhckNoYW5nZXMgLSB3aWxsIGJlIGNhbGxlZCB3aGVuZXZlciBzYXZlIGhhcyBjb21wbGV0ZWRcbiAgICogQHBhcmFtIHtvYmplY3R9IHN0YXRlIC0gY3VycmVudCBzdGF0ZSBvZiB3b3JkIGFsaWdubWVudC9lZGl0XG4gICAqL1xuICBmdW5jdGlvbiBfc2V0U2F2ZWRDaGFuZ2VzKGN1cnJlbnRJbmRleCwgc2F2ZWQsIHsgZ2V0Q2hhbmdlcyA9IG51bGwsIGNsZWFyQ2hhbmdlcyA9IG51bGwsIHN0YXRlID0gbnVsbCB9KSB7XG4gICAgY29uc3QgX3Vuc2F2ZWRDaGFuZ2VzTGlzdCA9IHsgLi4udW5zYXZlZENoYW5nZXNMaXN0IH1cblxuICAgIGlmIChzYXZlZCkge1xuICAgICAgaWYgKF91bnNhdmVkQ2hhbmdlc0xpc3QuaGFzT3duUHJvcGVydHkoY3VycmVudEluZGV4KSkge1xuICAgICAgICBkZWxldGUgX3Vuc2F2ZWRDaGFuZ2VzTGlzdFtjdXJyZW50SW5kZXhdXG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIF91bnNhdmVkQ2hhbmdlc0xpc3RbY3VycmVudEluZGV4XSA9IHsgZ2V0Q2hhbmdlcywgY2xlYXJDaGFuZ2VzLCBzdGF0ZSB9IC8vIHVwZGF0ZSB3aXRoIGxhdGVzdFxuICAgIH1cblxuICAgIGNvbnN0IF9oYXZlVW5zYXZlZENoYW5nZXMgPSAhIU9iamVjdC5rZXlzKF91bnNhdmVkQ2hhbmdlc0xpc3QpLmxlbmd0aFxuXG4gICAgaWYgKGhhdmVVbnNhdmVkQ2hhbmdlcyAhPSBfaGF2ZVVuc2F2ZWRDaGFuZ2VzKSB7XG4gICAgICBzZXRTYXZlZENoYW5nZXMgJiYgc2V0U2F2ZWRDaGFuZ2VzKHJlc291cmNlSWQsICFfaGF2ZVVuc2F2ZWRDaGFuZ2VzKVxuICAgICAgc2V0U3RhdGUoeyBoYXZlVW5zYXZlZENoYW5nZXM6IF9oYXZlVW5zYXZlZENoYW5nZXMgfSlcbiAgICB9XG5cbiAgICBpZiAoIWlzRXF1YWwoX3Vuc2F2ZWRDaGFuZ2VzTGlzdCwgdW5zYXZlZENoYW5nZXNMaXN0KSkge1xuICAgICAgc2V0U3RhdGUoeyB1bnNhdmVkQ2hhbmdlc0xpc3Q6IF91bnNhdmVkQ2hhbmdlc0xpc3QgfSlcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogc2VhcmNoIGNoYXB0ZXIgb3IgdmVyc2UgY2h1bmsgdG8gbGluZSB0aGF0IHN0YXJ0cyB3aXRoIGZpbmRJdGVtXG4gICAqIEBwYXJhbSB7bnVtYmVyfHN0cmluZ30gZmluZEl0ZW1cbiAgICogQHBhcmFtIHtzdHJpbmdbXX0gY2h1bmtzXG4gICAqL1xuICBmdW5jdGlvbiBmaW5kUmVmSW5BcnJheShmaW5kSXRlbSwgY2h1bmtzKSB7XG4gICAgY29uc3QgcmVmXyA9IGZpbmRJdGVtICsgJydcbiAgICBjb25zdCByZWZMZW4gPSByZWZfLmxlbmd0aFxuICAgIGNvbnN0IGluZGV4ID0gY2h1bmtzLmZpbmRJbmRleCgoY2h1bmssIGlkeCkgPT4ge1xuICAgICAgaWYgKGlkeCA+IDApIHtcbiAgICAgICAgaWYgKGNodW5rLnN1YnN0cmluZygwLCByZWZMZW4pID09PSByZWZfKSB7XG4gICAgICAgICAgY29uc3QgbmV4dENoYXIgPSBjaHVua1tyZWZMZW5dXG5cbiAgICAgICAgICBpZiAoKG5leHRDaGFyID4gJzknKSB8fCAobmV4dENoYXIgPCAnMCcpKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfSlcbiAgICByZXR1cm4gaW5kZXhcbiAgfVxuXG4gIGZ1bmN0aW9uIGdldEJvb2tOYW1lKCkge1xuICAgIGNvbnN0IGJvb2tDYXBzID0gc2NyaXB0dXJlQ29uZmlnPy5yZWZlcmVuY2U/LnByb2plY3RJZCA/IHNjcmlwdHVyZUNvbmZpZy5yZWZlcmVuY2UucHJvamVjdElkLnRvVXBwZXJDYXNlKCkgOiAnJ1xuICAgIHJldHVybiBgJHtib29rSW5kZXh9LSR7Ym9va0NhcHN9LnVzZm1gXG4gIH1cblxuICBjb25zdCBmaWxlcGF0aCA9IGdldEJvb2tOYW1lKClcblxuICAvLyBrZWVwIHRyYWNrIG9mIHZlcnNlIGVkaXQgc3RhdGVcbiAgY29uc3Qge1xuICAgIGVycm9yOiBzYXZlRXJyb3IsXG4gICAgaXNFcnJvcjogaXNTYXZlRXJyb3IsXG4gICAgb25TYXZlRWRpdCxcbiAgfSA9IHVzZUVkaXQoe1xuICAgIHNoYSxcbiAgICBvd25lcixcbiAgICBjb250ZW50OiBzYXZlQ29udGVudCxcbiAgICBjb25maWc6IHtcbiAgICAgIGNhY2hlOiB7IG1heEFnZTogMCB9LFxuICAgICAgLi4uYXV0aGVudGljYXRpb24/LmNvbmZpZyxcbiAgICAgIHRva2VuOiBhdXRoZW50aWNhdGlvbj8udG9rZW4sXG4gICAgICAvLyBAdHMtaWdub3JlXG4gICAgICB0aW1lb3V0OiBodHRwQ29uZmlnPy5zZXJ2ZXJUaW1lT3V0IHx8IGh0dHBDb25maWc/LnRpbWVvdXQgfHwgNTAwMCxcbiAgICB9LFxuICAgIGF1dGhvcjogbG9nZ2VkSW5Vc2VyLFxuICAgIHRva2VuOiBhdXRoZW50aWNhdGlvbj8udG9rZW4sXG4gICAgYnJhbmNoOiB3b3JraW5nUmVzb3VyY2VCcmFuY2gsXG4gICAgZmlsZXBhdGgsXG4gICAgcmVwbyxcbiAgfSlcblxuICBSZWFjdC51c2VFZmZlY3QoKCkgPT4geyAvLyB3aGVuIHdlIGdldCBhIHNhdmUgc2F2ZUVycm9yXG4gICAgaWYgKHNhdmVFcnJvciAmJiBpc1NhdmVFcnJvcikge1xuICAgICAgY29uc29sZS5sb2coYHNhdmUgZXJyb3JgLCBzYXZlRXJyb3IpXG4gICAgICAvLyBvblJlc291cmNlRXJyb3IgJiYgb25SZXNvdXJjZUVycm9yKG51bGwsIGZhbHNlLCBudWxsLCBgRXJyb3Igc2F2aW5nICR7bGFuZ3VhZ2VJZF99XyR7cmVzb3VyY2VJZH0gJHtzYXZlRXJyb3J9YCwgdHJ1ZSlcbiAgICB9XG4gIH0sIFtzYXZlRXJyb3IsIGlzU2F2ZUVycm9yXSlcblxuICBSZWFjdC51c2VFZmZlY3QoKCkgPT4geyAvLyB3aGVuIHN0YXJ0U2F2ZSBnb2VzIHRydWUsIHNhdmUgZWRpdHMgdG8gdXNlciBicmFuY2ggYW5kIHRoZW4gY2xlYXIgc3RhcnRTYXZlXG4gICAgY29uc3QgX3NhdmVFZGl0ID0gYXN5bmMgKCkgPT4geyAvLyBiZWdpbiB1cGxvYWRpbmcgbmV3IFVTRk1cbiAgICAgIGNvbnNvbGUuaW5mbyhgc2F2ZUNoYW5nZXNUb0Nsb3VkKCkgLSBVc2luZyBzaGE6ICR7c2hhfWApXG4gICAgICBhd2FpdCBvblNhdmVFZGl0KHVzZXJFZGl0QnJhbmNoTmFtZSkudGhlbigoc3VjY2VzcykgPT4geyAvLyBwdXNoIGNoYW5nZWQgdG8gc2VydmVyXG4gICAgICAgIGlmIChzdWNjZXNzKSB7XG4gICAgICAgICAgY29uc29sZS5sb2coYHNhdmVDaGFuZ2VzVG9DbG91ZCgpIC0gc2F2ZSBzY3JpcHR1cmUgZWRpdHMgc3VjY2Vzc2ApXG4gICAgICAgICAgY29uc3QgdW5zYXZlZENhcmRJbmRpY2VzID0gT2JqZWN0LmtleXModW5zYXZlZENoYW5nZXNMaXN0KVxuXG4gICAgICAgICAgaWYgKHVuc2F2ZWRDYXJkSW5kaWNlcz8ubGVuZ3RoKSB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGNhcmRJbmRleCBvZiB1bnNhdmVkQ2FyZEluZGljZXMpIHtcbiAgICAgICAgICAgICAgY29uc3QgeyBjbGVhckNoYW5nZXMgfSA9IHVuc2F2ZWRDaGFuZ2VzTGlzdFtjYXJkSW5kZXhdXG4gICAgICAgICAgICAgIGNsZWFyQ2hhbmdlcyAmJiBjbGVhckNoYW5nZXMoKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIGNvbnNvbGUuaW5mbygnc2F2ZUNoYW5nZXNUb0Nsb3VkKCkgLSBSZWxvYWRpbmcgcmVzb3VyY2UnKVxuICAgICAgICAgIHNldFN0YXRlKHtcbiAgICAgICAgICAgIHN0YXJ0U2F2ZTogZmFsc2UsXG4gICAgICAgICAgICByZWFkeUZvckZldGNoOiB0cnVlLFxuICAgICAgICAgICAgcmVmOiB1c2VyRWRpdEJyYW5jaE5hbWUsXG4gICAgICAgICAgfSlcbiAgICAgICAgICBkZWxheSg1MDApLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgc2NyaXB0dXJlQ29uZmlnPy5yZWxvYWRSZXNvdXJjZSgpXG4gICAgICAgICAgfSlcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKCdzYXZlQ2hhbmdlc1RvQ2xvdWQoKSAtIHNhdmluZyBjaGFuZ2VkIHNjcmlwdHVyZSBmYWlsZWQnKVxuICAgICAgICAgIHNldFN0YXRlKHsgc3RhcnRTYXZlOiBmYWxzZSB9KVxuICAgICAgICB9XG4gICAgICB9KVxuICAgIH1cblxuICAgIGlmIChzdGFydFNhdmUpIHtcbiAgICAgIGlmICghZWRpdEJyYW5jaFJlYWR5KSB7XG4gICAgICAgIGNvbnNvbGUubG9nKGBzYXZlQ2hhbmdlc1RvQ2xvdWQgLSBlZGl0IGJyYW5jaCBub3QgeWV0IGNyZWF0ZWRgKVxuICAgICAgfSBlbHNlIGlmICghc2hhKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKGBzYXZlQ2hhbmdlc1RvQ2xvdWQgLSBzYXZlIHNoYSBub3QgeWV0IHJlYWR5YClcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnNvbGUubG9nKGBzYXZlQ2hhbmdlc1RvQ2xvdWQgLSBjYWxsaW5nIF9zYXZlRWRpdCgpYClcbiAgICAgICAgX3NhdmVFZGl0KClcbiAgICAgIH1cbiAgICB9XG4gIH0sIFtzdGFydFNhdmUsIGVkaXRCcmFuY2hSZWFkeSwgc2hhXSlcblxuICAvKipcbiAgICogY29udmVydCB1cGRhdGVkVmVyc2VPYmplY3RzIHRvIFVTRk0gYW5kIG1lcmdlIGludG8gdGhlIGJpYmxlVXNmbVxuICAgKiBAcGFyYW0ge3N0cmluZ30gYmlibGVVc2ZtIC0gVVNGTSBvZiBiaWJsZVxuICAgKiBAcGFyYW0ge29iamVjdH0gcmVmIC0gcmVmZXJlbmNlIG9mIHZlcnNlIHRvIG1lcmdlIGluXG4gICAqIEBwYXJhbSB7b2JqZWN0W119IHVwZGF0ZWRWZXJzZU9iamVjdHMgLSBuZXcgdmVyc2UgaW4gdmVyc2VPYmplY3QgZm9ybWF0XG4gICAqIEBwYXJhbSB7bnVtYmVyfSBjYXJkTnVtXG4gICAqL1xuICBmdW5jdGlvbiBtZXJnZVZlcnNlT2JqZWN0c0ludG9CaWJsZVVzZm0oYmlibGVVc2ZtLCByZWYsIHVwZGF0ZWRWZXJzZU9iamVjdHMsIGNhcmROdW06IG51bWJlcikge1xuICAgIGxldCBuZXdVc2ZtXG4gICAgY29uc3QgY2hhcHRlckNodW5rcyA9IGJpYmxlVXNmbT8uc3BsaXQoJ1xcXFxjICcpXG4gICAgY29uc3QgY2hhcHRlckluZGV4ID0gZmluZFJlZkluQXJyYXkocmVmPy5jaGFwdGVyLCBjaGFwdGVyQ2h1bmtzKVxuXG4gICAgaWYgKGNoYXB0ZXJJbmRleCA+PSAwKSB7XG4gICAgICBjb25zdCBjdXJyZW50Q2hhcHRlciA9IGNoYXB0ZXJDaHVua3NbY2hhcHRlckluZGV4XVxuICAgICAgY29uc3QgdmVyc2VDaHVua3MgPSBjdXJyZW50Q2hhcHRlci5zcGxpdCgnXFxcXHYgJylcbiAgICAgIGNvbnN0IHZlcnNlSW5kZXggPSBmaW5kUmVmSW5BcnJheShyZWY/LnZlcnNlLCB2ZXJzZUNodW5rcylcblxuICAgICAgaWYgKHZlcnNlSW5kZXggPj0gMCkge1xuICAgICAgICBjb25zdCBuZXdWZXJzZVVzZm0gPSBVc2ZtRmlsZUNvbnZlcnNpb25IZWxwZXJzLmNvbnZlcnRWZXJzZURhdGFUb1VTRk0odXBkYXRlZFZlcnNlT2JqZWN0cylcbiAgICAgICAgY29uc29sZS5sb2coYHNhdmVDaGFuZ2VzVG9DbG91ZCgke2NhcmROdW19KSAtIG5ldyBVU0ZNIGZvciBjYXJkOn0gLSAke25ld1ZlcnNlVXNmbS5zdWJzdHJpbmcoMCwgMTAwKX1gKVxuICAgICAgICBjb25zdCBvbGRWZXJzZSA9IHZlcnNlQ2h1bmtzW3ZlcnNlSW5kZXhdXG4gICAgICAgIGNvbnN0IHZlcnNlTnVtTGVuID0gKHJlZj8udmVyc2UgKyAnJykubGVuZ3RoXG4gICAgICAgIHZlcnNlQ2h1bmtzW3ZlcnNlSW5kZXhdID0gb2xkVmVyc2Uuc3Vic3RyaW5nKDAsIHZlcnNlTnVtTGVuICsgMSkgKyBuZXdWZXJzZVVzZm1cbiAgICAgICAgY29uc3QgbmV3Q2hhcHRlciA9IHZlcnNlQ2h1bmtzLmpvaW4oJ1xcXFx2ICcpXG4gICAgICAgIGNoYXB0ZXJDaHVua3NbY2hhcHRlckluZGV4XSA9IG5ld0NoYXB0ZXJcbiAgICAgICAgbmV3VXNmbSA9IGNoYXB0ZXJDaHVua3Muam9pbignXFxcXGMgJylcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG5ld1VzZm1cbiAgfVxuXG4gIFJlYWN0LnVzZUVmZmVjdCgoKSA9PiB7IC8vIGZvciBlYWNoIHVuc2F2ZWQgY2hhbmdlLCBjYWxsIGludG8gdmVyc2VQYW5lIHRvIGdldCBsYXRlc3QgY2hhbmdlcyBmb3IgdmVyc2UgdG8gc2F2ZVxuICAgIGlmIChzYXZlQ2xpY2tlZCkge1xuICAgICAgbGV0IGNyZWF0ZUVkaXRCcmFuY2ggPSAhX3VzaW5nVXNlckJyYW5jaFxuXG4gICAgICBpZiAoIWNyZWF0ZUVkaXRCcmFuY2gpIHsgLy8gaWYgYWxyZWFkeSB1c2luZyB0aGUgdXNlciBicmFuY2hcbiAgICAgICAgaWYgKHdvcmtpbmdSZXNvdXJjZUJyYW5jaCAhPT0gdXNlckVkaXRCcmFuY2hOYW1lKSB7XG4gICAgICAgICAgY29uc29sZS53YXJuKGBzYXZlQ2hhbmdlc1RvQ2xvdWQgLSBzdGF0ZSBjb25mbGljdCAtIHNob3VsZCBiZSBpbiB1c2VyIGJyYW5jaCAke3VzZXJFZGl0QnJhbmNoTmFtZX0sIGJ1dCBhY3R1YWxseSB1c2luZyAke3dvcmtpbmdSZXNvdXJjZUJyYW5jaH1gKVxuICAgICAgICAgIGNyZWF0ZUVkaXRCcmFuY2ggPSB0cnVlXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29uc29sZS5sb2coYHNhdmVDaGFuZ2VzVG9DbG91ZCAtIGFscmVhZHkgdXNpbmcgZWRpdCBicmFuY2g6ICR7d29ya2luZ1Jlc291cmNlQnJhbmNofWApXG4gICAgICAgICAgc2V0U3RhdGUoeyBlZGl0QnJhbmNoUmVhZHk6IHRydWUgfSlcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoY3JlYXRlRWRpdEJyYW5jaCkgeyAvLyBpZiBub3QgdXNpbmcgdGhlIHVzZXIgYnJhbmNoLCBjcmVhdGUgaXRcbiAgICAgICAgY29uc29sZS5sb2coYHNhdmVDaGFuZ2VzVG9DbG91ZCAtIGNyZWF0aW5nIGVkaXQgYnJhbmNoYClcbiAgICAgICAgc2V0U3RhdGUoeyBlZGl0QnJhbmNoUmVhZHk6IGZhbHNlLCByZWFkeUZvckZldGNoOiBmYWxzZSwgc2hhOiBudWxsIH0pIC8vIHdlIHdpbGwgbmVlZCBhIG5ldyBzaGEgZm9yIGJvb2svYnJhbmNoXG4gICAgICAgIHN0YXJ0RWRpdEJyYW5jaCgpLnRoZW4oKHN1Y2Nlc3MpID0+IHtcbiAgICAgICAgICBpZiAoc3VjY2Vzcykge1xuICAgICAgICAgICAgY29uc29sZS5sb2coYHNhdmVDaGFuZ2VzVG9DbG91ZCAtIGVkaXQgYnJhbmNoIGNyZWF0ZWRgKVxuICAgICAgICAgICAgc2V0U3RhdGUoeyBlZGl0QnJhbmNoUmVhZHk6IHRydWUsIHJlYWR5Rm9yRmV0Y2g6IHRydWUgfSlcbiAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHVuc2F2ZWRDYXJkSW5kaWNlcyA9IE9iamVjdC5rZXlzKHVuc2F2ZWRDaGFuZ2VzTGlzdClcblxuICAgICAgaWYgKHVuc2F2ZWRDYXJkSW5kaWNlcz8ubGVuZ3RoKSB7XG4gICAgICAgIGxldCBiaWJsZVVzZm0gPSBjb3JlLmdldFJlc3BvbnNlRGF0YShzY3JpcHR1cmVDb25maWc/LmZldGNoUmVzcG9uc2UpXG4gICAgICAgIGxldCBtZXJnZUZhaWwgPSBmYWxzZVxuICAgICAgICBsZXQgY2FyZE51bSA9IDBcblxuICAgICAgICBmb3IgKGNvbnN0IGNhcmRJbmRleCBvZiB1bnNhdmVkQ2FyZEluZGljZXMpIHtcbiAgICAgICAgICBjYXJkTnVtID0gcGFyc2VJbnQoY2FyZEluZGV4KVxuICAgICAgICAgIGNvbnN0IHsgZ2V0Q2hhbmdlcywgc3RhdGUgfSA9IHVuc2F2ZWRDaGFuZ2VzTGlzdFtjYXJkTnVtXVxuXG4gICAgICAgICAgaWYgKGdldENoYW5nZXMpIHtcbiAgICAgICAgICAgIGxldCBuZXdVc2ZtXG4gICAgICAgICAgICBjb25zdCB7XG4gICAgICAgICAgICAgIHJlZixcbiAgICAgICAgICAgICAgdXBkYXRlZFZlcnNlT2JqZWN0cyxcbiAgICAgICAgICAgIH0gPSBnZXRDaGFuZ2VzKHN0YXRlKVxuXG4gICAgICAgICAgICBpZiAodXBkYXRlZFZlcnNlT2JqZWN0cyAmJiBiaWJsZVVzZm0pIHsgLy8ganVzdCByZXBsYWNlIHZlcnNlXG4gICAgICAgICAgICAgIG5ld1VzZm0gPSBtZXJnZVZlcnNlT2JqZWN0c0ludG9CaWJsZVVzZm0oYmlibGVVc2ZtLCByZWYsIHVwZGF0ZWRWZXJzZU9iamVjdHMsIGNhcmROdW0pXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChuZXdVc2ZtKSB7XG4gICAgICAgICAgICAgIGJpYmxlVXNmbSA9IG5ld1VzZm1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIG1lcmdlRmFpbCA9IHRydWVcbiAgICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAobWVyZ2VGYWlsKSB7IC8vIGlmIHdlIGZhaWxlZCB0byBtZXJnZSwgZmFsbGJhY2sgdG8gYnJ1dGUgZm9yY2UgdmVyc2Ugb2JqZWN0cyB0byBVU0ZNXG4gICAgICAgICAgY29uc29sZS5sb2coYHNhdmVDaGFuZ2VzVG9DbG91ZCgke2NhcmROdW19KSAtIHZlcnNlIG5vdCBmb3VuZCwgZmFsbGluZyBiYWNrIHRvIGluc2VydGluZyB2ZXJzZSBvYmplY3RgKVxuICAgICAgICAgIGxldCBuZXdCb29rSnNvblxuXG4gICAgICAgICAgZm9yIChjb25zdCBjYXJkSW5kZXggb2YgdW5zYXZlZENhcmRJbmRpY2VzKSB7XG4gICAgICAgICAgICBjb25zdCBjYXJkTnVtID0gcGFyc2VJbnQoY2FyZEluZGV4KVxuICAgICAgICAgICAgY29uc3QgeyBnZXRDaGFuZ2VzLCBzdGF0ZSB9ID0gdW5zYXZlZENoYW5nZXNMaXN0W2NhcmROdW1dXG5cbiAgICAgICAgICAgIGlmIChnZXRDaGFuZ2VzKSB7XG4gICAgICAgICAgICAgIGxldCBuZXdVc2ZtXG4gICAgICAgICAgICAgIGNvbnN0IHtcbiAgICAgICAgICAgICAgICBuZXdWZXJzZVRleHQsXG4gICAgICAgICAgICAgICAgcmVmLFxuICAgICAgICAgICAgICAgIHVwZGF0ZWRWZXJzZU9iamVjdHMsXG4gICAgICAgICAgICAgIH0gPSBnZXRDaGFuZ2VzKHN0YXRlKVxuXG4gICAgICAgICAgICAgIGlmICh1cGRhdGVkVmVyc2VPYmplY3RzICYmICFuZXdVc2ZtKSB7XG4gICAgICAgICAgICAgICAgbGV0IHRhcmdldFZlcnNlT2JqZWN0c18gPSBudWxsXG5cbiAgICAgICAgICAgICAgICBpZiAocmVmKSB7XG4gICAgICAgICAgICAgICAgICBpZiAobmV3VmVyc2VUZXh0KSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHsgdGFyZ2V0VmVyc2VPYmplY3RzIH0gPSBBbGlnbm1lbnRIZWxwZXJzLnVwZGF0ZUFsaWdubWVudHNUb1RhcmdldFZlcnNlKHVwZGF0ZWRWZXJzZU9iamVjdHMsIG5ld1ZlcnNlVGV4dClcbiAgICAgICAgICAgICAgICAgICAgdGFyZ2V0VmVyc2VPYmplY3RzXyA9IHRhcmdldFZlcnNlT2JqZWN0c1xuICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGFyZ2V0VmVyc2VPYmplY3RzXyA9IHVwZGF0ZWRWZXJzZU9iamVjdHNcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIG5ld0Jvb2tKc29uID0gdGFyZ2V0VmVyc2VPYmplY3RzXyAmJiBzY3JpcHR1cmVDb25maWc/LnVwZGF0ZVZlcnNlKHJlZi5jaGFwdGVyLCByZWYudmVyc2UsIHsgdmVyc2VPYmplY3RzOiB0YXJnZXRWZXJzZU9iamVjdHNfIH0pXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgYmlibGVVc2ZtID0gdXNmbWpzLnRvVVNGTShuZXdCb29rSnNvbiwgeyBmb3JjZWROZXdMaW5lczogdHJ1ZSB9KVxuICAgICAgICB9XG5cbiAgICAgICAgY29uc29sZS5sb2coYHNhdmVDaGFuZ2VzVG9DbG91ZCgpIC0gc2F2aW5nIG5ldyBVU0ZNOiAke2JpYmxlVXNmbS5zdWJzdHJpbmcoMCwgMTAwKX0uLi5gKVxuICAgICAgICBzZXRTdGF0ZSh7IHNhdmVDb250ZW50OiBiaWJsZVVzZm0sIHN0YXJ0U2F2ZTogdHJ1ZSwgc2F2ZUNsaWNrZWQ6IGZhbHNlIH0pXG4gICAgICB9XG4gICAgfVxuICB9LCBbc2F2ZUNsaWNrZWRdKVxuXG4gIC8vIEB0cy1pZ25vcmVcbiAgY29uc3QgeyBjaGFwdGVyLCB2ZXJzZSB9ID0gX3JlZmVyZW5jZSB8fCB7fVxuXG4gIFJlYWN0LnVzZUVmZmVjdCgoKSA9PiB7XG4gICAgY29uc3QgX3ZlcnNlc0ZvclJlZiA9IHNjcmlwdHVyZUNvbmZpZz8udmVyc2VzRm9yUmVmXG4gICAgbGV0IG5ld1NlbGVjdGlvbnMgPSBuZXcgTWFwKClcbiAgICBsZXQgdXBkYXRlU2VsZWN0aW9ucyA9IGZhbHNlXG4gICAgY29uc3QgX21hcCA9IG5ld1NlbGVjdGlvbnNcbiAgICBjb25zdCBvcmlnaW5hbEJvb2tJZCA9IG9yaWdpbmFsVmVyc2VPYmplY3RzPy5ib29rSWRcbiAgICBjb25zdCBib29rVmVyc2VPYmplY3QgPSBvcmlnaW5hbFZlcnNlT2JqZWN0cz8uY2hhcHRlcnNcbiAgICBsZXQgbmV3U2VsZWN0ZWRRdW90ZSA9IG51bGxcblxuICAgIC8vIGlmIHdlIGhhdmUgZXZlcnl0aGluZyB3ZSBuZWVkIHRvIGNhbGN1bGF0ZSBzZWxlY3Rpb25zXG4gICAgaWYgKF92ZXJzZXNGb3JSZWY/Lmxlbmd0aCAmJlxuICAgICAgYm9va1ZlcnNlT2JqZWN0ICYmXG4gICAgICAoYm9va0lkID09PSBvcmlnaW5hbEJvb2tJZCkgJiZcbiAgICAgIGJvb2tWZXJzZU9iamVjdFtjaGFwdGVyXSAmJiAvLyB3ZSBuZWVkIHRvIGhhdmUgZGF0YSBmb3IgY2hhcHRlclxuICAgICAgc2VsZWN0ZWRRdW90ZT8ucXVvdGVcbiAgICApIHtcbiAgICAgIC8vIGlmIHF1b3RlIGlzIGRpZmZlcmVudCB0aGFuIGxhc3RcbiAgICAgIGlmICghaXNFcXVhbChsYXN0U2VsZWN0ZWRRdW90ZSwgc2VsZWN0ZWRRdW90ZSkgfHxcbiAgICAgICAgIWlzRXF1YWwodmVyc2VzRm9yUmVmLCBfdmVyc2VzRm9yUmVmKSkge1xuICAgICAgICBjb25zdCBvcmlnaW5hbFZlcnNlcyA9IHt9XG4gICAgICAgIGNvbnN0IHN1YnN0aXR1dGUgPSB7fSAvLyBrZWVwIHRyYWNrIG9mIHZlcnNlIHN1YnN0aXR1dGlvbnNcbiAgICAgICAgbGV0IHN0YXJ0VmVyc2UgPSBfdmVyc2VzRm9yUmVmWzBdLnZlcnNlXG5cbiAgICAgICAgaWYgKHR5cGVvZiBzdGFydFZlcnNlID09PSAnc3RyaW5nJykge1xuICAgICAgICAgIHN0YXJ0VmVyc2UgPSBwYXJzZUludChzdGFydFZlcnNlKVxuICAgICAgICB9XG5cbiAgICAgICAgbGV0IGxhc3RWZXJzZSA9IHN0YXJ0VmVyc2VcblxuICAgICAgICBmb3IgKGxldCBpID0gMCwgbCA9IF92ZXJzZXNGb3JSZWYubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgICAgICAgY29uc3QgdmVyc2VSZWYgPSBfdmVyc2VzRm9yUmVmW2ldXG4gICAgICAgICAgY29uc3Qge1xuICAgICAgICAgICAgY2hhcHRlcixcbiAgICAgICAgICAgIHZlcnNlLFxuICAgICAgICAgIH0gPSB2ZXJzZVJlZlxuICAgICAgICAgIC8vIFRSSUNLWSAtIHdlIHJlbWFwIHZlcnNlcyBpbiByZWZlcmVuY2UgcmFuZ2UgdG8gYSBsaW5lYXIgc2VyaWVzIG9mIHZlcnNlcyBzbyB2ZXJzZSBzcGFucyBkb24ndCBjaG9rZSBnZXRRdW90ZU1hdGNoZXNJbkJvb2tSZWZcbiAgICAgICAgICBsZXQgX3ZlcnNlID0gc3RhcnRWZXJzZSArIGlcbiAgICAgICAgICBsYXN0VmVyc2UgPSBfdmVyc2VcbiAgICAgICAgICBzdWJzdGl0dXRlW2Ake2NoYXB0ZXJ9OiR7X3ZlcnNlfWBdID0gYCR7Y2hhcHRlcn06JHt2ZXJzZX1gXG5cbiAgICAgICAgICBpZiAoIW9yaWdpbmFsVmVyc2VzW2NoYXB0ZXJdKSB7XG4gICAgICAgICAgICBvcmlnaW5hbFZlcnNlc1tjaGFwdGVyXSA9IHt9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgbGV0IHZlcnNlT2JqZWN0cyA9IFtdXG5cbiAgICAgICAgICBpZiAoKHR5cGVvZiB2ZXJzZSA9PT0gJ3N0cmluZycpICYmICh2ZXJzZS5pbmNsdWRlcygnLScpKSkge1xuICAgICAgICAgICAgY29uc3QgdmVyc2VzID0gZ2V0VmVyc2VzKGJvb2tWZXJzZU9iamVjdCwgYCR7Y2hhcHRlcn06JHt2ZXJzZX1gKVxuXG4gICAgICAgICAgICBmb3IgKGNvbnN0IHZlcnNlSXRlbSBvZiB2ZXJzZXMpIHtcbiAgICAgICAgICAgICAgY29uc3Qgdm8gPSB2ZXJzZUl0ZW0udmVyc2VEYXRhLnZlcnNlT2JqZWN0c1xuICAgICAgICAgICAgICB2ZXJzZU9iamVjdHMgPSB2ZXJzZU9iamVjdHMuY29uY2F0KHZvKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB2ZXJzZU9iamVjdHMgPSBib29rVmVyc2VPYmplY3RbY2hhcHRlcl1bdmVyc2VdPy52ZXJzZU9iamVjdHNcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAodmVyc2VPYmplY3RzKSB7XG4gICAgICAgICAgICB2ZXJzZU9iamVjdHMgPSBjbGVhbnVwVmVyc2VPYmplY3RzKHZlcnNlT2JqZWN0cylcbiAgICAgICAgICAgIG9yaWdpbmFsVmVyc2VzW2NoYXB0ZXJdW192ZXJzZV0gPSB7IHZlcnNlT2JqZWN0cyB9XG4gICAgICAgICAgICBfbWFwLnNldChgJHtjaGFwdGVyfToke3ZlcnNlfWAsIHZlcnNlT2JqZWN0cylcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvLyBjcmVhdGUgbmV3IHJlZmVyZW5jZSByYW5nZSBmb3IgbmV3IGxpbmVhciB2ZXJzZSByYW5nZVxuICAgICAgICBjb25zdCBbY2hhcHRlcl0gPSBzZWxlY3RlZFF1b3RlPy5yZWZlcmVuY2U/LnNwbGl0KCc6JylcbiAgICAgICAgbGV0IHN1YlJlZiA9IGAke2NoYXB0ZXJ9OiR7c3RhcnRWZXJzZX1gXG5cbiAgICAgICAgaWYgKGxhc3RWZXJzZSAhPSBzdGFydFZlcnNlKSB7XG4gICAgICAgICAgc3ViUmVmICs9IGAtJHtsYXN0VmVyc2V9YFxuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgcXVvdGVNYXRjaGVzID0gZ2V0UXVvdGVNYXRjaGVzSW5Cb29rUmVmKHtcbiAgICAgICAgICBib29rT2JqZWN0OiBvcmlnaW5hbFZlcnNlcyxcbiAgICAgICAgICByZWY6IHN1YlJlZixcbiAgICAgICAgICBxdW90ZTogc2VsZWN0ZWRRdW90ZT8ucXVvdGUsXG4gICAgICAgICAgb2NjdXJyZW5jZTogc2VsZWN0ZWRRdW90ZT8ub2NjdXJyZW5jZSxcbiAgICAgICAgfSlcblxuICAgICAgICBjb25zdCBzZWxlY3Rpb25zID0gbmV3IE1hcCgpXG5cbiAgICAgICAgaWYgKHF1b3RlTWF0Y2hlcz8uc2l6ZSkge1xuICAgICAgICAgIHF1b3RlTWF0Y2hlcy5mb3JFYWNoKCh3b3Jkcywga2V5KSA9PiB7XG4gICAgICAgICAgICBjb25zdCBfa2V5ID0gc3Vic3RpdHV0ZVtrZXldXG5cbiAgICAgICAgICAgIHNlbGVjdGlvbnMuc2V0KF9rZXksIHdvcmRzLm1hcCh3b3JkID0+IChcbiAgICAgICAgICAgICAgeyAuLi53b3JkLCB0ZXh0OiBjb3JlLm5vcm1hbGl6ZVN0cmluZyh3b3JkLnRleHQpIH1cbiAgICAgICAgICAgICkpKVxuICAgICAgICAgIH0pXG4gICAgICAgIH1cbiAgICAgICAgbmV3U2VsZWN0aW9ucyA9IHNlbGVjdGlvbnNcbiAgICAgICAgbmV3U2VsZWN0ZWRRdW90ZSA9IHNlbGVjdGVkUXVvdGVcbiAgICAgICAgdXBkYXRlU2VsZWN0aW9ucyA9IHRydWVcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBuZXdTdGF0ZTogYW55ID0ge31cblxuICAgIC8vIHVwZGF0ZSBzdGF0ZXMgdGhhdCBoYXZlIGNoYW5nZWRcbiAgICBpZiAoIWFyZU1hcHNUaGVTYW1lKHZlcnNlT2JqZWN0c01hcCwgX21hcCkpIHtcbiAgICAgIG5ld1N0YXRlLnZlcnNlT2JqZWN0c01hcCA9IF9tYXBcbiAgICB9XG5cbiAgICBpZiAoIWlzRXF1YWwoT2JqZWN0LmtleXModmVyc2VzRm9yUmVmIHx8IHt9KSwgT2JqZWN0LmtleXMoX3ZlcnNlc0ZvclJlZiB8fCB7fSkpKSB7XG4gICAgICBuZXdTdGF0ZS52ZXJzZXNGb3JSZWYgPSBfdmVyc2VzRm9yUmVmXG4gICAgICBuZXdTdGF0ZS5sYXN0U2VsZWN0ZWRRdW90ZSA9IG5ld1NlbGVjdGVkUXVvdGVcbiAgICAgIG5ld1N0YXRlLnNlbGVjdGlvbnMgPSBuZXdTZWxlY3Rpb25zXG4gICAgfVxuXG4gICAgaWYgKG5ld1NlbGVjdGVkUXVvdGUpIHtcbiAgICAgIG5ld1N0YXRlLmxhc3RTZWxlY3RlZFF1b3RlID0gbmV3U2VsZWN0ZWRRdW90ZVxuICAgIH1cblxuICAgIGlmICh1cGRhdGVTZWxlY3Rpb25zKSB7XG4gICAgICBpZiAoIWFyZU1hcHNUaGVTYW1lKHNlbGVjdGlvbnMgfHwgKG5ldyBNYXAoKSksIG5ld1NlbGVjdGlvbnMpKSB7XG4gICAgICAgIG5ld1N0YXRlLnNlbGVjdGlvbnMgPSBuZXdTZWxlY3Rpb25zXG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKE9iamVjdC5rZXlzKG5ld1N0YXRlKS5sZW5ndGgpIHtcbiAgICAgIHNldFN0YXRlKG5ld1N0YXRlKVxuICAgIH1cbiAgfSwgW293bmVyLCByZXNvdXJjZUlkLCBib29rSWQsIGxhbmd1YWdlSWRfLCBzY3JpcHR1cmVDb25maWc/LnZlcnNlc0ZvclJlZiwgb3JpZ2luYWxWZXJzZU9iamVjdHMsIHNlbGVjdGVkUXVvdGVdKVxuXG4gIFJlYWN0LnVzZUVmZmVjdCgoKSA9PiB7XG4gICAgc2V0U3RhdGUoeyB2ZXJzZXNBbGlnbm1lbnRTdGF0dXM6IG51bGwgfSlcbiAgfSwgW3ZlcnNlXSlcblxuICBjb25zdCB1cGRhdGVWZXJzZXNBbGlnbm1lbnRTdGF0dXMgPSAocmVmZXJlbmNlLCBhbGlnbmVkKSA9PiB7XG4gICAgc2V0U3RhdGVfKHByZXZTdGF0ZSA9PiAoe1xuICAgICAgLi4ucHJldlN0YXRlLFxuICAgICAgdmVyc2VzQWxpZ25tZW50U3RhdHVzOiB7Li4ucHJldlN0YXRlLnZlcnNlc0FsaWdubWVudFN0YXR1cywgW2Ake3JlZmVyZW5jZS5jaGFwdGVyfToke3JlZmVyZW5jZS52ZXJzZX1gXTogYWxpZ25lZH0sXG4gICAgfSkpXG4gIH1cblxuICBsZXQgX3ZlcnNlc0ZvclJlZiA9IHNjcmlwdHVyZUNvbmZpZz8udmVyc2VzRm9yUmVmXG5cbiAgaWYgKCFfdmVyc2VzRm9yUmVmPy5sZW5ndGgpIHsgLy8gaWYgZW1wdHkgb2YgcmVmZXJlbmNlcywgY3JlYXRlIHNpbmdsZSBlbXB0eSByZWZlcmVuY2VcbiAgICBfdmVyc2VzRm9yUmVmID0gW3sgLi4ucmVmZXJlbmNlIH1dXG4gIH1cblxuICBSZWFjdC51c2VFZmZlY3QoKCkgPT4ge1xuICAgIGNvbnNvbGUubG9nKGBfdmVyc2VzRm9yUmVmIGNoYW5nZWRgLCBzY3JpcHR1cmVDb25maWcpXG4gIH0sIFtfdmVyc2VzRm9yUmVmXSlcblxuICBjb25zdCByZW5kZXJlZFNjcmlwdHVyZVBhbmVzID0gX3ZlcnNlc0ZvclJlZj8ubWFwKChfY3VycmVudFZlcnNlRGF0YSwgaW5kZXgpID0+IHtcbiAgICBjb25zdCBpbml0aWFsVmVyc2VPYmplY3RzID0gX2N1cnJlbnRWZXJzZURhdGE/LnZlcnNlRGF0YT8udmVyc2VPYmplY3RzIHx8IFtdXG4gICAgLy8gQHRzLWlnbm9yZVxuICAgIGNvbnN0IHsgY2hhcHRlciwgdmVyc2UgfSA9IF9jdXJyZW50VmVyc2VEYXRhIHx8IHt9XG4gICAgY29uc3QgX3JlZmVyZW5jZSA9IHtcbiAgICAgIC4uLl92ZXJzZXNGb3JSZWYsXG4gICAgICBjaGFwdGVyLFxuICAgICAgdmVyc2UsXG4gICAgfVxuICAgIGNvbnN0IF9zY3JpcHR1cmVBbGlnbm1lbnRFZGl0Q29uZmlnID0ge1xuICAgICAgLi4uc2NyaXB0dXJlQWxpZ25tZW50RWRpdENvbmZpZyxcbiAgICAgIGN1cnJlbnRJbmRleDogaW5kZXgsXG4gICAgICBpbml0aWFsVmVyc2VPYmplY3RzLFxuICAgICAgcmVmZXJlbmNlOiBfcmVmZXJlbmNlLFxuICAgIH1cblxuICAgIGxldCBpc1ZlcnNlU2VsZWN0ZWRGb3JBbGlnbm1lbnQgPSBmYWxzZVxuXG4gICAgaWYgKHZlcnNlU2VsZWN0ZWRGb3JBbGlnbm1lbnQpIHtcbiAgICAgIGlzVmVyc2VTZWxlY3RlZEZvckFsaWdubWVudCA9IHZlcnNlU2VsZWN0ZWRGb3JBbGlnbm1lbnQuY2hhcHRlciA9PT0gY2hhcHRlciAmJiB2ZXJzZVNlbGVjdGVkRm9yQWxpZ25tZW50LnZlcnNlID09PSB2ZXJzZVxuICAgIH1cblxuICAgIHJldHVybiAoXG4gICAgICA8U2NyaXB0dXJlUGFuZVxuICAgICAgICB7Li4uc2NyaXB0dXJlQ29uZmlnfVxuICAgICAgICBjb250ZW50U3R5bGU9e2NvbnRlbnRTdHlsZX1cbiAgICAgICAgY3VycmVudEluZGV4PXtpbmRleH1cbiAgICAgICAgZGV0ZXJtaW5pbmdCcmFuY2g9eyFyZWFkeUZvckZldGNofVxuICAgICAgICBkaXJlY3Rpb249e2RpcmVjdGlvbn1cbiAgICAgICAgZGlzYWJsZVdvcmRQb3BvdmVyPXtkaXNhYmxlV29yZFBvcG92ZXJffVxuICAgICAgICBmb250U2l6ZT17Zm9udFNpemV9XG4gICAgICAgIGdldExleGljb25EYXRhPXtnZXRMZXhpY29uRGF0YX1cbiAgICAgICAgaXNOVD17aXNOVF99XG4gICAgICAgIGtleT17aW5kZXh9XG4gICAgICAgIHJlZlN0eWxlPXtyZWZTdHlsZX1cbiAgICAgICAgcmVmZXJlbmNlPXtfcmVmZXJlbmNlfVxuICAgICAgICBzYXZpbmc9e3N0YXJ0U2F2ZX1cbiAgICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgICBzY3JpcHR1cmVBbGlnbm1lbnRFZGl0Q29uZmlnPXtfc2NyaXB0dXJlQWxpZ25tZW50RWRpdENvbmZpZ31cbiAgICAgICAgc2V0V29yZEFsaWduZXJTdGF0dXM9e3NldFdvcmRBbGlnbmVyU3RhdHVzfVxuICAgICAgICBzZXJ2ZXI9e3NlcnZlcn1cbiAgICAgICAgdHJhbnNsYXRlPXt0cmFuc2xhdGV9XG4gICAgICAgIGlzVmVyc2VTZWxlY3RlZEZvckFsaWdubWVudD17aXNWZXJzZVNlbGVjdGVkRm9yQWxpZ25tZW50fVxuICAgICAgICBvbkFsaWdubWVudEZpbmlzaD17KCkgPT4gc2V0U3RhdGUoeyB2ZXJzZVNlbGVjdGVkRm9yQWxpZ25tZW50OiBudWxsIH0pfVxuICAgICAgICB1cGRhdGVWZXJzZXNBbGlnbm1lbnRTdGF0dXM9e3VwZGF0ZVZlcnNlc0FsaWdubWVudFN0YXR1c31cbiAgICAgICAgc2V0T3JpZ2luYWxTY3JpcHR1cmVSZXNvdXJjZT17IWluZGV4ICYmIHNldE9yaWdpbmFsU2NyaXB0dXJlUmVzb3VyY2V9XG4gICAgICAvPlxuICAgIClcbiAgfSlcblxuICBjb25zdCBoYW5kbGVBbGlnbkJ1dHRvbkNsaWNrID0gKCkgPT4ge1xuICAgIGlmICh2ZXJzZXNGb3JSZWY/Lmxlbmd0aCA+IDEpIHtcbiAgICAgIHNldFN0YXRlKHsgc2hvd0FsaWdubWVudFBvcHVwOiB0cnVlIH0pXG4gICAgfSBlbHNlIGlmICh2ZXJzZXNGb3JSZWY/Lmxlbmd0aCA9PT0gMSkge1xuICAgICAgc2V0U3RhdGUoeyB2ZXJzZVNlbGVjdGVkRm9yQWxpZ25tZW50OiB2ZXJzZXNGb3JSZWZbMF0gfSlcbiAgICB9XG4gIH1cblxuICBjb25zdCBvblJlbmRlclRvb2xiYXIgPSAoeyBpdGVtcyB9KSA9PiB7XG4gICAgY29uc3QgbmV3SXRlbXMgPSBbLi4uaXRlbXNdXG5cbiAgICBsZXQgYWxsVmVyc2VzQWxpZ25lZCA9IGZhbHNlXG5cbiAgICAvLyBDaGVjayBpZiBhbGwgdmFsdWVzIGluIHZlcnNlc0FsaWdubWVudFN0YXR1cyBhcmUgdHJ1ZVxuICAgIGlmICh2ZXJzZXNBbGlnbm1lbnRTdGF0dXMpIHtcbiAgICAgIGFsbFZlcnNlc0FsaWduZWQgPSBPYmplY3QudmFsdWVzKHZlcnNlc0FsaWdubWVudFN0YXR1cykuZXZlcnkoYWxpZ25TdGF0dXMgPT4gYWxpZ25TdGF0dXMgPT09IHRydWUpXG4gICAgfVxuICAgIGxldCBhbGlnbkljb24gPSBudWxsXG4gICAgbGV0IGFsaWduQnV0dG9uVGV4dCA9ICcnXG4gICAgaWYgKGFsbFZlcnNlc0FsaWduZWQpIHtcbiAgICAgIGFsaWduSWNvbiA9IDxSeExpbmsyIGlkPXtgdmFsaWRfaWNvbl8ke3Jlc291cmNlSWR9YH0gY29sb3I9JyNCQkInLz5cbiAgICAgIGFsaWduQnV0dG9uVGV4dCA9ICdBbGlnbm1lbnQgaXMgVmFsaWQnXG4gICAgfSBlbHNlIHtcbiAgICAgIGFsaWduSWNvbiA9IDxSeExpbmtCcmVhazIgaWQ9e2BpbnZhbGlkX2FsaWdubWVudF9pY29uXyR7cmVzb3VyY2VJZH1gfSBjb2xvcj0nIzAwMCcvPlxuICAgICAgYWxpZ25CdXR0b25UZXh0ID0gJ0FsaWdubWVudCBpcyBJbnZhbGlkJ1xuICAgIH1cblxuICAgIGlmIChzZXRXb3JkQWxpZ25lclN0YXR1cyAmJiByZXNvdXJjZUlkICE9PSAnT1JJR0lOQUxfU09VUkNFJykge1xuICAgICAgbmV3SXRlbXMucHVzaChcbiAgICAgICAgPEljb25CdXR0b25cbiAgICAgICAgICBpZD17YGFsaWdubWVudF9pY29uXyR7cmVzb3VyY2VJZH1gfVxuICAgICAgICAgIGtleT0nY2hlY2tpbmctYnV0dG9uJ1xuICAgICAgICAgIG9uQ2xpY2s9e2hhbmRsZUFsaWduQnV0dG9uQ2xpY2t9XG4gICAgICAgICAgdGl0bGU9e2FsaWduQnV0dG9uVGV4dH1cbiAgICAgICAgICBhcmlhLWxhYmVsPXthbGlnbkJ1dHRvblRleHR9XG4gICAgICAgICAgc3R5bGU9e3sgY3Vyc29yOiAncG9pbnRlcicgfX1cbiAgICAgICAgPlxuICAgICAgICAgIHthbGlnbkljb259XG4gICAgICAgIDwvSWNvbkJ1dHRvbj5cbiAgICAgIClcbiAgICB9XG5cbiAgICByZXR1cm4gbmV3SXRlbXNcbiAgfVxuXG4gIHJldHVybiAoXG5cbiAgICA8U2VsZWN0aW9uc0NvbnRleHRQcm92aWRlclxuICAgICAgc2VsZWN0aW9ucz17c2VsZWN0aW9uc31cbiAgICAgIG9uU2VsZWN0aW9ucz17bmV3U2VsZWN0aW9ucyA9PiB7XG4gICAgICAgIC8vIGNvbnNvbGUubG9nKCdvblNlbGVjdGlvbnMnLCBuZXdTZWxlY3Rpb25zKVxuICAgICAgfX1cbiAgICAgIHF1b3RlPXtzZWxlY3RlZFF1b3RlPy5xdW90ZX1cbiAgICAgIG9jY3VycmVuY2U9e2ZpeE9jY3VycmVuY2Uoc2VsZWN0ZWRRdW90ZT8ub2NjdXJyZW5jZSl9XG4gICAgICB2ZXJzZU9iamVjdHNNYXA9e3ZlcnNlT2JqZWN0c01hcH1cbiAgICA+XG4gICAgICA8Q2FyZFxuICAgICAgICBpZD17YHNjcmlwdHVyZV9jYXJkXyR7Y2FyZE51bX1gfVxuICAgICAgICB0aXRsZT17c2NyaXB0dXJlTGFiZWx9XG4gICAgICAgIHNldHRpbmdzVGl0bGU9e3NjcmlwdHVyZVRpdGxlICsgJyBTZXR0aW5ncyd9XG4gICAgICAgIGl0ZW1zPXtpdGVtc31cbiAgICAgICAgY2xhc3Nlcz17Y2xhc3Nlc31cbiAgICAgICAgaGVhZGVycz17aGVhZGVyc31cbiAgICAgICAgZmlsdGVycz17ZmlsdGVyc31cbiAgICAgICAgZm9udFNpemU9e2ZvbnRTaXplfVxuICAgICAgICBpdGVtSW5kZXg9e2l0ZW1JbmRleH1cbiAgICAgICAgc2V0RmlsdGVycz17c2V0RmlsdGVyc31cbiAgICAgICAgc2V0Rm9udFNpemU9e3NldEZvbnRTaXplfVxuICAgICAgICBzZXRJdGVtSW5kZXg9e3NldEl0ZW1JbmRleH1cbiAgICAgICAgbWFya2Rvd25WaWV3PXttYXJrZG93blZpZXd9XG4gICAgICAgIHNldE1hcmtkb3duVmlldz17c2V0TWFya2Rvd25WaWV3fVxuICAgICAgICBnZXRDdXN0b21Db21wb25lbnQ9e2dldFNjcmlwdHVyZVNlbGVjdG9yfVxuICAgICAgICBoaWRlTWFya2Rvd25Ub2dnbGVcbiAgICAgICAgb25NZW51Q2xvc2U9e29uTWVudUNsb3NlfVxuICAgICAgICBvbk1pbmltaXplPXtvbk1pbmltaXplID8gKCkgPT4gb25NaW5pbWl6ZShpZCkgOiBudWxsfVxuICAgICAgICBlZGl0YWJsZT17ZW5hYmxlRWRpdCB8fCBlbmFibGVBbGlnbm1lbnR9XG4gICAgICAgIHNhdmVkPXtzdGFydFNhdmUgfHwgIWhhdmVVbnNhdmVkQ2hhbmdlc31cbiAgICAgICAgb25TYXZlRWRpdD17KCkgPT4gc2V0U3RhdGUoeyBzYXZlQ2xpY2tlZDogdHJ1ZSB9KX1cbiAgICAgICAgb25SZW5kZXJUb29sYmFyPXtvblJlbmRlclRvb2xiYXJ9XG4gICAgICA+XG4gICAgICAgIDxkaXYgaWQ9XCJzY3JpcHR1cmUtcGFuZS1saXN0XCI+XG4gICAgICAgICAge3JlbmRlcmVkU2NyaXB0dXJlUGFuZXN9XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9DYXJkPlxuICAgICAgPFZlcnNlU2VsZWN0b3JQb3B1cFxuICAgICAgICByZXNvdXJjZUlkPXtyZXNvdXJjZUlkfVxuICAgICAgICBvcGVuPXtzaG93QWxpZ25tZW50UG9wdXB9XG4gICAgICAgIG9uQ2xvc2U9eygpID0+IHNldFN0YXRlKHsgc2hvd0FsaWdubWVudFBvcHVwOiBmYWxzZSB9KX1cbiAgICAgICAgdmVyc2VzRm9yUmVmPXt2ZXJzZXNGb3JSZWZ9XG4gICAgICAgIHZlcnNlc0FsaWdubWVudFN0YXR1cz17dmVyc2VzQWxpZ25tZW50U3RhdHVzfVxuICAgICAgICBvblZlcnNlU2VsZWN0PXsodmVyc2UpID0+IHNldFN0YXRlKHtcbiAgICAgICAgICB2ZXJzZVNlbGVjdGVkRm9yQWxpZ25tZW50OiB2ZXJzZSxcbiAgICAgICAgICBzaG93QWxpZ25tZW50UG9wdXA6IGZhbHNlXG4gICAgICAgIH0pfVxuICAgICAgLz5cbiAgICA8L1NlbGVjdGlvbnNDb250ZXh0UHJvdmlkZXI+XG4gIClcbn1cblxuU2NyaXB0dXJlQ2FyZC5wcm9wVHlwZXMgPSB7XG4gIC8qKiBodG1sIGlkZW50aWZpZXIgdG8gdXNlIGZvciBjYXJkICovXG4gIGlkOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAvKiogbWV0aG9kIHRvIGRldGVybWluZSBpZiBOVCBvciBPVCAqL1xuICBpc05UOiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuICAvKiogdGl0bGUgZm9yIHNjcmlwdHVyZSBjYXJkICovXG4gIHRpdGxlOiBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsXG4gIC8qKiBnZXQgbGFuZ3VhZ2UgZGV0YWlscyAqL1xuICBnZXRMYW5ndWFnZTogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbiAgLyoqIHNjcmlwdHVyZSBjYXJkIG51bWJlciAoMCB0byAyIGZvciBleGFtcGxlKSAqL1xuICBjYXJkTnVtOiBQcm9wVHlwZXMubnVtYmVyLmlzUmVxdWlyZWQsXG4gIC8qKiByZXNvdXJjZSBvYmplY3QgKi9cbiAgcmVzb3VyY2U6IFByb3BUeXBlcy5zaGFwZSh7XG4gICAgLyoqIHJlc291cmNlIGxhbmd1YWdlIHRvIHVzZSAqL1xuICAgIGxhbmd1YWdlSWQ6IFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCxcbiAgICAvKiogcmVwbyBvd25lciBzdWNoIGFzIHVuZm9sZGluZ1dvcmQgKi9cbiAgICBvd25lcjogUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLFxuICAgIC8qKiByZXNvdXJjZUlkIHRvIHVzZSAoZS5nLiB1Z250KSAqL1xuICAgIHJlc291cmNlSWQ6IFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCxcbiAgICAvKiogcmVwbyBvd25lciBmb3Igb3JpZ2luYWwgbGFuZ3VhZ2VzIHN1Y2ggYXMgdW5mb2xkaW5nV29yZCAqL1xuICAgIG9yaWdpbmFsTGFuZ3VhZ2VPd25lcjogUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLFxuICB9KSxcbiAgcmVmZXJlbmNlOiBQcm9wVHlwZXMuc2hhcGUoe1xuICAgIC8qKiBwcm9qZWN0SWQgKGJvb2tJRCkgdG8gdXNlICovXG4gICAgcHJvamVjdElkOiBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsXG4gICAgLyoqIGN1cnJlbnQgY2hhcHRlciBudW1iZXIgKi9cbiAgICBjaGFwdGVyOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMubnVtYmVyLCBQcm9wVHlwZXMuc3RyaW5nXSkuaXNSZXF1aXJlZCxcbiAgICAvKiogY3VycmVudCB2ZXJzZSBudW1iZXIgKi9cbiAgICB2ZXJzZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLm51bWJlciwgUHJvcFR5cGVzLnN0cmluZ10pLmlzUmVxdWlyZWQsXG4gIH0pLFxuICAvKiogc2VydmVyIChlLmcuICdodHRwczovL2dpdC5kb29yNDMub3JnJykgKi9cbiAgc2VydmVyOiBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsXG4gIC8qKiByZXBvIGJyYW5jaCBvciB0YWcgc3VjaCBhcyBtYXN0ZXIgKi9cbiAgYXBwUmVmOiBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsXG4gIC8qKiBpZiB0cnVlIHRoZW4gd29yZCBkYXRhIGhvdmVyIGlzIHNob3duICovXG4gIGRpc2FibGVXb3JkUG9wb3ZlcjogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKiBDU1MgY2xhc3NlcyAqL1xuICBjbGFzc2VzOiBQcm9wVHlwZXMub2JqZWN0LFxuICAvKiogcmVzb3VyY2VMaW5rICovXG4gIHJlc291cmNlTGluazogUHJvcFR5cGVzLmFueSxcbiAgLyoqIHVzZSBtZXRob2QgZm9yIHVzaW5nIGxvY2FsIHN0b3JhZ2Ugc3BlY2lmaWMgZm9yIHVzZXIgKi9cbiAgdXNlVXNlckxvY2FsU3RvcmFnZTogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbiAgLyoqIG9wdGlvbmFsIGNhbGxiYWNrIGlmIGVycm9yIGxvYWRpbmcgcmVzb3VyY2UsIHBhcmFtZXRlciByZXR1cm5lZCBhcmU6XG4gICAqICAgICh7c3RyaW5nfSBlcnJvck1lc3NhZ2UsIHtib29sZWFufSBpc0FjY2Vzc0Vycm9yLCB7b2JqZWN0fSByZXNvdXJjZVN0YXR1cylcbiAgICogICAgICAtIGlzQWNjZXNzRXJyb3IgLSBpcyB0cnVlIGlmIHRoaXMgd2FzIGFuIGVycm9yIHRyeWluZyB0byBhY2Nlc3MgZmlsZVxuICAgKiAgICAgIC0gcmVzb3VyY2VTdGF0dXMgLSBpcyBvYmplY3QgY29udGFpbmluZyBkZXRhaWxzIGFib3V0IHByb2JsZW1zIGZldGNoaW5nIHJlc291cmNlICovXG4gIG9uUmVzb3VyY2VFcnJvcjogUHJvcFR5cGVzLmZ1bmMsXG4gIC8qKiBvcHRpb25hbCBodHRwIHRpbWVvdXQgaW4gbWlsbGlzZWNvbmRzIGZvciBmZXRjaGluZyByZXNvdXJjZXMsIGRlZmF1bHQgaXMgMCAodmVyeSBsb25nIHdhaXQpICovXG4gIGh0dHBDb25maWc6IFByb3BUeXBlcy5vYmplY3QsXG4gIC8qKiBvcHRpb25hbCB1cmwgZm9yIGdyZWVrIHJlcG8gKi9cbiAgZ3JlZWtSZXBvVXJsOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAvKiogb3B0aW9uYWwgdXJsIGZvciBoZWJyZXcgcmVwbyAqL1xuICBoZWJyZXdSZXBvVXJsOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAvKiogZnVuY3Rpb24gdG8gZ2V0IGxhdGVzdCBsZXhpY29uIGRhdGEgKi9cbiAgZ2V0TGV4aWNvbkRhdGE6IFByb3BUeXBlcy5mdW5jLFxuICAvKiogZnVuY3Rpb24gdG8gcHJlLWxvYWQgbGV4aWNvbiBkYXRhIGZvciB2ZXJzZSAqL1xuICBmZXRjaEdsb3NzZXNGb3JWZXJzZTogUHJvcFR5cGVzLmZ1bmMsXG4gIC8qKiBvcHRpb25hbCBmdW5jdGlvbiBmb3IgbG9jYWxpemF0aW9uICovXG4gIHRyYW5zbGF0ZTogUHJvcFR5cGVzLmZ1bmMsXG4gIC8qKiBmdW5jdGlvbiB0byBtaW5pbWl6ZSB0aGUgY2FyZCAob3B0aW9uYWwpICovXG4gIG9uTWluaW1pemU6IFByb3BUeXBlcy5mdW5jLFxuICAvKiogdXNlci1uYW1lICovXG4gIGxvZ2dlZEluVXNlcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgLyoqIGF1dGhlbnRpY2F0aW9uIGluZm8gKi9cbiAgYXV0aGVudGljYXRpb246IFByb3BUeXBlcy5vYmplY3QsXG4gIC8qKiBmdW5jdGlvbiB0byBzZXQgc3RhdGUgaW4gYXBwIHRoYXQgdGhlcmUgYXJlIHVuc2F2ZWQgY2hhbmdlcyAqL1xuICBzZXRTYXZlZENoYW5nZXM6IFByb3BUeXBlcy5mdW5jLFxuICAvKiogaW5kZXggZm9yIGN1cnJlbnQgYm9vayAoZS5nLiAnMDEnIGZvciAnZ2VuJykqL1xuICBib29rSW5kZXg6IFByb3BUeXBlcy5zdHJpbmcsXG4gIC8qKiBjYWxsYmFjayB0byB1cGRhdGUgd29yZCBhbGlnbmVyIHN0YXRlICovXG4gIHNldFdvcmRBbGlnbmVyU3RhdHVzOiBQcm9wVHlwZXMuZnVuYyxcbiAgLyoqVGhpcyBpcyBjdXJyZW50bHkgc2VsZWN0ZWQgcXVvdGUgKi9cbiAgc2VsZWN0ZWRRdW90ZTogUHJvcFR5cGVzLm9iamVjdCxcbn1cbiJdfQ==
|