single-scripture-rcl 3.3.1-beta.2 → 3.3.1

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.
@@ -1,9 +1,8 @@
1
1
  import "core-js/modules/es.array.concat.js";
2
2
  import "core-js/modules/es.array.includes.js";
3
3
  import "core-js/modules/es.array.is-array.js";
4
- import "core-js/modules/es.date.to-string.js";
5
- import "core-js/modules/es.object.to-string.js";
6
- import "core-js/modules/es.regexp.to-string.js";
4
+ import "core-js/modules/es.array.map.js";
5
+ import "core-js/modules/es.parse-int.js";
7
6
  import "core-js/modules/es.string.includes.js";
8
7
  import "regenerator-runtime/runtime.js";
9
8
 
@@ -43,10 +42,13 @@ import * as React from 'react';
43
42
  import * as PropTypes from 'prop-types';
44
43
  import { RxLink2, RxLinkBreak2 } from 'react-icons/rx';
45
44
  import { Card, useCardState, useUserBranch, ERROR_STATE, MANIFEST_NOT_LOADED_ERROR } from 'translation-helps-rcl';
45
+ import { WordAligner } from 'word-aligner-rcl';
46
+ import CheckOutlinedIcon from '@mui/icons-material/CheckOutlined';
47
+ import CancelOutlinedIcon from '@mui/icons-material/CancelOutlined';
46
48
  import { IconButton } from '@mui/material';
47
49
  import { ScripturePane, ScriptureSelector } from '..';
48
50
  import { useScriptureSettings } from '../../hooks/useScriptureSettings';
49
- import { getResourceLink, getResourceMessage, getScriptureVersionSettings, isOriginalBible } from '../../utils/ScriptureSettings';
51
+ import { getVerseDataFromScripConfig, getResourceLink, getResourceMessage, getScriptureVersionSettings, isOriginalBible } from '../../utils/ScriptureSettings';
50
52
  import { Title } from '../ScripturePane/styled';
51
53
  import { NT_ORIG_LANG, ORIGINAL_SOURCE, OT_ORIG_LANG } from '../../utils';
52
54
  import { useScriptureAlignmentEdit } from '../../hooks/useScriptureAlignmentEdit';
@@ -56,8 +58,26 @@ var style = {
56
58
  marginTop: '16px',
57
59
  width: '500px'
58
60
  };
61
+
62
+ function initializeVerseNumber(verse) {
63
+ var initialVerse = verse;
64
+
65
+ if (typeof verse === 'string' && verse.includes('-')) {
66
+ initialVerse = parseInt(verse.charAt(0));
67
+ }
68
+
69
+ return initialVerse;
70
+ }
71
+
72
+ function getVerseObjectsForVerse(scriptureConfig, currentVerseNum) {
73
+ var _currentVerseData$ver;
74
+
75
+ var currentVerseData = getVerseDataFromScripConfig(scriptureConfig, currentVerseNum) || null;
76
+ return (currentVerseData === null || currentVerseData === void 0 ? void 0 : (_currentVerseData$ver = currentVerseData.verseData) === null || _currentVerseData$ver === void 0 ? void 0 : _currentVerseData$ver.verseObjects) || null;
77
+ }
78
+
59
79
  export default function ScriptureCard(_ref) {
60
- var _scriptureConfig$reso, _scriptureConfig$vers, _currentVerseData_$ve, _scriptureConfig$reso2, _scriptureConfig$reso4, _scriptureConfig$reso5, _scriptureConfig$reso6, _scriptureAlignmentEd4;
80
+ var _scriptureConfig$reso, _scriptureConfig$reso2, _scriptureConfig$reso4, _scriptureConfig$reso5, _scriptureConfig$reso6, _scriptureConfig$vers;
61
81
 
62
82
  var id = _ref.id,
63
83
  isNT = _ref.isNT,
@@ -91,16 +111,13 @@ export default function ScriptureCard(_ref) {
91
111
  authentication = _ref.authentication,
92
112
  setSavedChanges = _ref.setSavedChanges,
93
113
  bookIndex = _ref.bookIndex,
94
- addVerseRange = _ref.addVerseRange,
95
- setWordAlignerStatus = _ref.setWordAlignerStatus;
114
+ addVerseRange = _ref.addVerseRange;
96
115
 
97
116
  var _React$useState = React.useState({
98
- currentVerseNum: 0,
99
- //TODO will be used in future when need to support multiple verses in card
117
+ currentVerseNum: initializeVerseNumber(verse),
100
118
  ref: appRef,
101
119
  urlError: null,
102
- usingUserBranch: false,
103
- doingAlignment: false
120
+ usingUserBranch: false
104
121
  }),
105
122
  _React$useState2 = _slicedToArray(_React$useState, 2),
106
123
  state = _React$useState2[0],
@@ -109,8 +126,7 @@ export default function ScriptureCard(_ref) {
109
126
  var currentVerseNum = state.currentVerseNum,
110
127
  ref = state.ref,
111
128
  urlError = state.urlError,
112
- usingUserBranch = state.usingUserBranch,
113
- doingAlignment = state.doingAlignment;
129
+ usingUserBranch = state.usingUserBranch;
114
130
 
115
131
  var _useUserLocalStorage = useUserLocalStorage(KEY_FONT_SIZE_BASE + cardNum, 100),
116
132
  _useUserLocalStorage2 = _slicedToArray(_useUserLocalStorage, 2),
@@ -163,12 +179,11 @@ export default function ScriptureCard(_ref) {
163
179
  scriptureConfig = _useScriptureSettings.scriptureConfig,
164
180
  setScripture = _useScriptureSettings.setScripture,
165
181
  scriptureSettings = _useScriptureSettings.scriptureSettings,
166
- scriptureVersionHist = _useScriptureSettings.scriptureVersionHist; // @ts-ignore
182
+ scriptureVersionHist = _useScriptureSettings.scriptureVersionHist;
167
183
 
184
+ var currentVerseObjects = getVerseObjectsForVerse(scriptureConfig, currentVerseNum); // @ts-ignore
168
185
 
169
- var cardResourceId = (scriptureConfig === null || scriptureConfig === void 0 ? void 0 : (_scriptureConfig$reso = scriptureConfig.resource) === null || _scriptureConfig$reso === void 0 ? void 0 : _scriptureConfig$reso.projectId) || resourceId;
170
- var currentVerseData_ = (scriptureConfig === null || scriptureConfig === void 0 ? void 0 : (_scriptureConfig$vers = scriptureConfig.versesForRef) === null || _scriptureConfig$vers === void 0 ? void 0 : _scriptureConfig$vers[currentVerseNum]) || null;
171
- var initialVerseObjects = (currentVerseData_ === null || currentVerseData_ === void 0 ? void 0 : (_currentVerseData_$ve = currentVerseData_.verseData) === null || _currentVerseData_$ve === void 0 ? void 0 : _currentVerseData_$ve.verseObjects) || null; // @ts-ignore
186
+ var cardResourceId = (scriptureConfig === null || scriptureConfig === void 0 ? void 0 : (_scriptureConfig$reso = scriptureConfig.resource) === null || _scriptureConfig$reso === void 0 ? void 0 : _scriptureConfig$reso.projectId) || resourceId; // @ts-ignore
172
187
 
173
188
  var ref_ = (scriptureConfig === null || scriptureConfig === void 0 ? void 0 : (_scriptureConfig$reso2 = scriptureConfig.resource) === null || _scriptureConfig$reso2 === void 0 ? void 0 : _scriptureConfig$reso2.ref) || appRef;
174
189
  var canUseEditBranch = loggedInUser && authentication && resourceId !== ORIGINAL_SOURCE && (ref_ === 'master' || ref_.substring(0, loggedInUser.length) === loggedInUser); // not tag
@@ -191,6 +206,11 @@ export default function ScriptureCard(_ref) {
191
206
  startEditBranch = _useUserBranch.actions.startEdit;
192
207
 
193
208
  var workingRef = canUseEditBranch ? workingResourceBranch : appRef;
209
+ var reference_ = {
210
+ bookId: bookId,
211
+ chapter: chapter,
212
+ verse: verse
213
+ };
194
214
  var scriptureTitle;
195
215
  React.useEffect(function () {
196
216
  // select correct working ref - could be master, user branch, or release
@@ -270,11 +290,10 @@ export default function ScriptureCard(_ref) {
270
290
  var fontFactor = isHebrew ? 1.4 : 1; // we automatically scale up font size for Hebrew
271
291
 
272
292
  var scaledFontSize = fontSize * fontFactor;
273
- var currentVerseStr = currentVerseData_ === null || currentVerseData_ === void 0 ? void 0 : currentVerseData_.verse.toString();
274
293
 
275
- if (currentVerseStr && currentVerseStr !== reference.verse) {
276
- // support for verse span
277
- reference.verse = currentVerseStr;
294
+ if (scriptureConfig.matchedVerse) {
295
+ // support verse ranges
296
+ reference.verse = scriptureConfig.matchedVerse;
278
297
  }
279
298
 
280
299
  var items = null;
@@ -321,13 +340,13 @@ export default function ScriptureCard(_ref) {
321
340
  while (1) {
322
341
  switch (_context.prev = _context.next) {
323
342
  case 0:
324
- if (!(!disableWordPopover && initialVerseObjects && fetchGlossesForVerse)) {
343
+ if (!(!disableWordPopover && currentVerseObjects && fetchGlossesForVerse)) {
325
344
  _context.next = 3;
326
345
  break;
327
346
  }
328
347
 
329
348
  _context.next = 3;
330
- return fetchGlossesForVerse(initialVerseObjects, languageId_);
349
+ return fetchGlossesForVerse(currentVerseObjects, languageId_);
331
350
 
332
351
  case 3:
333
352
  case "end":
@@ -343,18 +362,17 @@ export default function ScriptureCard(_ref) {
343
362
  }();
344
363
 
345
364
  fetchGlossDataForVerse();
346
- }, [initialVerseObjects, disableWordPopover, languageId_, fetchGlossesForVerse]);
365
+ }, [currentVerseObjects, disableWordPopover, languageId_, fetchGlossesForVerse]);
347
366
  var enableEdit = !usingOriginalBible;
348
367
  var enableAlignment = !usingOriginalBible;
349
368
  var originalRepoUrl = isNewTestament ? greekRepoUrl : hebrewRepoUrl;
350
369
 
351
- var _scriptureAlignmentEdit = useScriptureAlignmentEdit({
370
+ var _useScriptureAlignmen = useScriptureAlignmentEdit({
352
371
  authentication: canUseEditBranch ? authentication : null,
353
- currentVerseRef: reference,
354
372
  enableEdit: enableEdit,
355
373
  enableAlignment: enableAlignment,
356
374
  httpConfig: httpConfig,
357
- initialVerseObjects: initialVerseObjects,
375
+ initialVerseObjects: currentVerseObjects,
358
376
  isNewTestament: isNewTestament,
359
377
  // @ts-ignore
360
378
  loggedInUser: canUseEditBranch ? loggedInUser : null,
@@ -366,44 +384,35 @@ export default function ScriptureCard(_ref) {
366
384
  startEditBranch: startEditBranch,
367
385
  bookIndex: bookIndex,
368
386
  workingResourceBranch: ref,
369
- currentVerseNum: currentVerseNum,
370
- targetLanguage: language,
371
- sourceLanguage: isNT_ ? NT_ORIG_LANG : OT_ORIG_LANG,
372
- title: scriptureTitle
373
- });
374
-
375
- var _scriptureAlignmentEd = _scriptureAlignmentEdit.actions,
376
- currentVerseObjects = _scriptureAlignmentEd.currentVerseObjects,
377
- handleAlignmentClick = _scriptureAlignmentEd.handleAlignmentClick,
378
- setEditing = _scriptureAlignmentEd.setEditing,
379
- setVerseChanged = _scriptureAlignmentEd.setVerseChanged,
380
- saveChangesToCloud = _scriptureAlignmentEd.saveChangesToCloud,
381
- _scriptureAlignmentEd2 = _scriptureAlignmentEdit.state,
382
- aligned = _scriptureAlignmentEd2.aligned,
383
- alignerData = _scriptureAlignmentEd2.alignerData,
384
- doingSave = _scriptureAlignmentEd2.doingSave,
385
- editing = _scriptureAlignmentEd2.editing,
386
- unsavedChanges = _scriptureAlignmentEd2.unsavedChanges;
387
- React.useEffect(function () {
388
- var _scriptureAlignmentEd3;
387
+ currentVerseNum: currentVerseNum
388
+ }),
389
+ _useScriptureAlignmen2 = _useScriptureAlignmen.actions,
390
+ cancelAlignment = _useScriptureAlignmen2.cancelAlignment,
391
+ editedVerseObjects = _useScriptureAlignmen2.editedVerseObjects,
392
+ handleAlignmentClick = _useScriptureAlignmen2.handleAlignmentClick,
393
+ onAlignmentsChange = _useScriptureAlignmen2.onAlignmentsChange,
394
+ saveAlignment = _useScriptureAlignmen2.saveAlignment,
395
+ setEditing = _useScriptureAlignmen2.setEditing,
396
+ setVerseChanged = _useScriptureAlignmen2.setVerseChanged,
397
+ saveChangesToCloud = _useScriptureAlignmen2.saveChangesToCloud,
398
+ _useScriptureAlignmen3 = _useScriptureAlignmen.state,
399
+ aligned = _useScriptureAlignmen3.aligned,
400
+ alignerData = _useScriptureAlignmen3.alignerData,
401
+ editing = _useScriptureAlignmen3.editing,
402
+ unsavedChanges = _useScriptureAlignmen3.unsavedChanges;
389
403
 
390
- if (_scriptureAlignmentEdit !== null && _scriptureAlignmentEdit !== void 0 && (_scriptureAlignmentEd3 = _scriptureAlignmentEdit.state) !== null && _scriptureAlignmentEd3 !== void 0 && _scriptureAlignmentEd3.alignerData && !doingAlignment) {
391
- setWordAlignerStatus(_scriptureAlignmentEdit);
392
- setState({
393
- doingAlignment: true
394
- });
395
- } else if (doingAlignment) {
396
- setWordAlignerStatus(_scriptureAlignmentEdit);
397
- setState({
398
- doingAlignment: false
399
- });
400
- }
401
- }, [_scriptureAlignmentEdit === null || _scriptureAlignmentEdit === void 0 ? void 0 : (_scriptureAlignmentEd4 = _scriptureAlignmentEdit.state) === null || _scriptureAlignmentEd4 === void 0 ? void 0 : _scriptureAlignmentEd4.alignerData]);
402
404
  React.useEffect(function () {
403
405
  // set saved changes whenever user edits verse text or alignments or if alignments are open
404
406
  var unsavedChanges_ = unsavedChanges || alignerData;
405
407
  setSavedChanges && setSavedChanges(resourceId, !unsavedChanges_);
406
408
  }, [unsavedChanges, alignerData]);
409
+
410
+ function showPopover(PopoverTitle, wordDetails, positionCoord, rawData) {
411
+ // TODO: make show popover pretty
412
+ console.log("showPopover", rawData);
413
+ window.prompt("User clicked on ".concat(JSON.stringify(rawData.token)));
414
+ }
415
+
407
416
  var checkingState = aligned ? 'valid' : 'invalid';
408
417
  var titleText = checkingState === 'valid' ? 'Alignment is Valid' : 'Alignment is Invalid';
409
418
 
@@ -431,7 +440,7 @@ export default function ScriptureCard(_ref) {
431
440
 
432
441
  React.useEffect(function () {
433
442
  // check for verse range
434
- var _verse = reference.verse;
443
+ var _verse = scriptureConfig === null || scriptureConfig === void 0 ? void 0 : scriptureConfig.matchedVerse;
435
444
 
436
445
  if (addVerseRange && typeof _verse === 'string') {
437
446
  // @ts-ignore
@@ -441,7 +450,31 @@ export default function ScriptureCard(_ref) {
441
450
  addVerseRange("".concat(scriptureConfig === null || scriptureConfig === void 0 ? void 0 : (_scriptureConfig$refe = scriptureConfig.reference) === null || _scriptureConfig$refe === void 0 ? void 0 : _scriptureConfig$refe.chapter, ":").concat(_verse));
442
451
  }
443
452
  }
444
- }, [reference.verse]);
453
+ }, [scriptureConfig === null || scriptureConfig === void 0 ? void 0 : scriptureConfig.matchedVerse]);
454
+ var renderedScripturePanes = scriptureConfig === null || scriptureConfig === void 0 ? void 0 : (_scriptureConfig$vers = scriptureConfig.versesForRef) === null || _scriptureConfig$vers === void 0 ? void 0 : _scriptureConfig$vers.map(function (_ref4, index) {
455
+ var verse = _ref4.verse;
456
+ var mappedVerseObjects = getVerseObjectsForVerse(scriptureConfig, verse);
457
+ return /*#__PURE__*/React.createElement(ScripturePane, _extends({
458
+ key: index,
459
+ refStyle: refStyle
460
+ }, scriptureConfig, {
461
+ verseObjects: mappedVerseObjects,
462
+ isNT: isNT_,
463
+ server: server,
464
+ reference: _objectSpread(_objectSpread({}, reference), {}, {
465
+ verse: verse
466
+ }),
467
+ direction: direction,
468
+ contentStyle: contentStyle,
469
+ fontSize: fontSize,
470
+ disableWordPopover: disableWordPopover_,
471
+ getLexiconData: getLexiconData,
472
+ translate: translate,
473
+ editing: editing,
474
+ setEditing: setEditing,
475
+ setVerseChanged: setVerseChanged
476
+ }));
477
+ });
445
478
  return /*#__PURE__*/React.createElement(Card, {
446
479
  id: "scripture_card_".concat(cardNum),
447
480
  title: scriptureLabel,
@@ -464,30 +497,65 @@ export default function ScriptureCard(_ref) {
464
497
  return onMinimize(id);
465
498
  } : null,
466
499
  editable: enableEdit || enableAlignment,
467
- saved: doingSave || !unsavedChanges,
500
+ saved: !unsavedChanges,
468
501
  onSaveEdit: saveChangesToCloud,
469
502
  onBlur: function onBlur() {
470
503
  return setEditing(false);
471
504
  },
472
505
  onRenderToolbar: onRenderToolbar
473
- }, /*#__PURE__*/React.createElement(ScripturePane, _extends({
474
- refStyle: refStyle
475
- }, scriptureConfig, {
476
- verseObjects: currentVerseObjects,
477
- isNT: isNT_,
478
- server: server,
479
- reference: reference,
480
- direction: direction,
481
- contentStyle: contentStyle,
482
- fontSize: fontSize,
483
- disableWordPopover: disableWordPopover_,
484
- getLexiconData: getLexiconData,
506
+ }, alignerData ? /*#__PURE__*/React.createElement("div", {
507
+ style: {
508
+ flexDirection: 'column'
509
+ }
510
+ }, /*#__PURE__*/React.createElement(WordAligner, {
511
+ style: {
512
+ maxHeight: '450px',
513
+ overflowY: 'auto'
514
+ },
515
+ verseAlignments: alignerData.alignments,
516
+ targetWords: alignerData.wordBank,
485
517
  translate: translate,
486
- editing: editing,
487
- setEditing: setEditing,
488
- setVerseChanged: setVerseChanged,
489
- saving: doingSave
490
- })));
518
+ contextId: {
519
+ reference: reference_
520
+ },
521
+ targetLanguage: language,
522
+ targetLanguageFont: '',
523
+ sourceLanguage: isNT_ ? NT_ORIG_LANG : OT_ORIG_LANG,
524
+ showPopover: showPopover,
525
+ lexicons: {},
526
+ loadLexiconEntry: getLexiconData,
527
+ onChange: function onChange(results) {
528
+ return onAlignmentsChange(results);
529
+ }
530
+ }), /*#__PURE__*/React.createElement("br", null), /*#__PURE__*/React.createElement("div", {
531
+ style: {
532
+ width: '100%'
533
+ }
534
+ }, /*#__PURE__*/React.createElement(IconButton, {
535
+ disabled: false,
536
+ className: classes.margin,
537
+ key: "alignment-save",
538
+ onClick: function onClick() {
539
+ return saveAlignment();
540
+ },
541
+ "aria-label": 'Alignment Save'
542
+ }, /*#__PURE__*/React.createElement(CheckOutlinedIcon, {
543
+ id: "alignment-save-icon",
544
+ htmlColor: "#000"
545
+ })), /*#__PURE__*/React.createElement(IconButton, {
546
+ disabled: false,
547
+ className: classes.margin,
548
+ key: "alignment-cancel",
549
+ onClick: function onClick() {
550
+ return cancelAlignment();
551
+ },
552
+ "aria-label": 'Alignment Cancel'
553
+ }, /*#__PURE__*/React.createElement(CancelOutlinedIcon, {
554
+ id: "alignment-cancel-icon",
555
+ htmlColor: "#000"
556
+ })))) : /*#__PURE__*/React.createElement("div", {
557
+ id: "scripture-pane-list"
558
+ }, renderedScripturePanes));
491
559
  }
492
560
  ScriptureCard.propTypes = {
493
561
  /** html identifier to use for card */
@@ -588,9 +656,6 @@ ScriptureCard.propTypes = {
588
656
  bookIndex: PropTypes.string,
589
657
 
590
658
  /** callback to indicate that we are using a verse range here */
591
- addVerseRange: PropTypes.func,
592
-
593
- /** callback to update word aligner state */
594
- setWordAlignerStatus: PropTypes.func
659
+ addVerseRange: PropTypes.func
595
660
  };
596
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jb21wb25lbnRzL1NjcmlwdHVyZUNhcmQvU2NyaXB0dXJlQ2FyZC50c3giXSwibmFtZXMiOlsiUmVhY3QiLCJQcm9wVHlwZXMiLCJSeExpbmsyIiwiUnhMaW5rQnJlYWsyIiwiQ2FyZCIsInVzZUNhcmRTdGF0ZSIsInVzZVVzZXJCcmFuY2giLCJFUlJPUl9TVEFURSIsIk1BTklGRVNUX05PVF9MT0FERURfRVJST1IiLCJJY29uQnV0dG9uIiwiU2NyaXB0dXJlUGFuZSIsIlNjcmlwdHVyZVNlbGVjdG9yIiwidXNlU2NyaXB0dXJlU2V0dGluZ3MiLCJnZXRSZXNvdXJjZUxpbmsiLCJnZXRSZXNvdXJjZU1lc3NhZ2UiLCJnZXRTY3JpcHR1cmVWZXJzaW9uU2V0dGluZ3MiLCJpc09yaWdpbmFsQmlibGUiLCJUaXRsZSIsIk5UX09SSUdfTEFORyIsIk9SSUdJTkFMX1NPVVJDRSIsIk9UX09SSUdfTEFORyIsInVzZVNjcmlwdHVyZUFsaWdubWVudEVkaXQiLCJLRVlfRk9OVF9TSVpFX0JBU0UiLCJsYWJlbCIsInN0eWxlIiwibWFyZ2luVG9wIiwid2lkdGgiLCJTY3JpcHR1cmVDYXJkIiwiaWQiLCJpc05UIiwidGl0bGUiLCJzZXJ2ZXIiLCJhcHBSZWYiLCJjYXJkTnVtIiwiY2xhc3NlcyIsInJlc291cmNlIiwib3duZXIiLCJsYW5ndWFnZUlkIiwicmVzb3VyY2VJZCIsIm9yaWdpbmFsTGFuZ3VhZ2VPd25lciIsImdldExhbmd1YWdlIiwicmVmZXJlbmNlIiwidmVyc2UiLCJjaGFwdGVyIiwiYm9va0lkIiwicHJvamVjdElkIiwicmVzb3VyY2VMaW5rIiwidXNlVXNlckxvY2FsU3RvcmFnZSIsImRpc2FibGVXb3JkUG9wb3ZlciIsIm9uUmVzb3VyY2VFcnJvciIsImh0dHBDb25maWciLCJncmVla1JlcG9VcmwiLCJoZWJyZXdSZXBvVXJsIiwiZ2V0TGV4aWNvbkRhdGEiLCJmZXRjaEdsb3NzZXNGb3JWZXJzZSIsInRyYW5zbGF0ZSIsIm9uTWluaW1pemUiLCJsb2dnZWRJblVzZXIiLCJhdXRoZW50aWNhdGlvbiIsInNldFNhdmVkQ2hhbmdlcyIsImJvb2tJbmRleCIsImFkZFZlcnNlUmFuZ2UiLCJzZXRXb3JkQWxpZ25lclN0YXR1cyIsInVzZVN0YXRlIiwiY3VycmVudFZlcnNlTnVtIiwicmVmIiwidXJsRXJyb3IiLCJ1c2luZ1VzZXJCcmFuY2giLCJkb2luZ0FsaWdubWVudCIsInN0YXRlIiwic2V0U3RhdGVfIiwiZm9udFNpemUiLCJzZXRGb250U2l6ZSIsImlzTlRfIiwic2V0U3RhdGUiLCJuZXdTdGF0ZSIsInByZXZTdGF0ZSIsImNhY2hlIiwibWF4QWdlIiwic2V0VXJsRXJyb3IiLCJlcnJvciIsIndob2xlQm9vayIsImlzTmV3VGVzdGFtZW50Iiwic2NyaXB0dXJlQ29uZmlnIiwic2V0U2NyaXB0dXJlIiwic2NyaXB0dXJlU2V0dGluZ3MiLCJzY3JpcHR1cmVWZXJzaW9uSGlzdCIsImNhcmRSZXNvdXJjZUlkIiwiY3VycmVudFZlcnNlRGF0YV8iLCJ2ZXJzZXNGb3JSZWYiLCJpbml0aWFsVmVyc2VPYmplY3RzIiwidmVyc2VEYXRhIiwidmVyc2VPYmplY3RzIiwicmVmXyIsImNhblVzZUVkaXRCcmFuY2giLCJzdWJzdHJpbmciLCJsZW5ndGgiLCJjYXJkSWQiLCJ3b3JraW5nUmVzb3VyY2VCcmFuY2giLCJ1c2luZ1VzZXJCcmFuY2hfIiwic3RhcnRFZGl0QnJhbmNoIiwiYWN0aW9ucyIsInN0YXJ0RWRpdCIsIndvcmtpbmdSZWYiLCJzY3JpcHR1cmVUaXRsZSIsInVzZUVmZmVjdCIsIndvcmtpbmdSZWZfIiwicmVzb3VyY2VTdGF0dXMiLCJtZXNzYWdlIiwiaXNBY2Nlc3NFcnJvciIsInZlcnNpb24iLCJ1cGRhdGVUaXRsZSIsImdldFNjcmlwdHVyZVNlbGVjdG9yIiwic2NyaXB0dXJlU2VsZWN0aW9uQ29uZmlnIiwib25NZW51Q2xvc2UiLCJsYW5ndWFnZUlkXyIsImxhbmd1YWdlIiwiZGlyZWN0aW9uIiwiaXNIZWJyZXciLCJmb250RmFjdG9yIiwic2NhbGVkRm9udFNpemUiLCJjdXJyZW50VmVyc2VTdHIiLCJ0b1N0cmluZyIsIml0ZW1zIiwiaGVhZGVycyIsImZpbHRlcnMiLCJpdGVtSW5kZXgiLCJtYXJrZG93blZpZXciLCJzZXRGaWx0ZXJzIiwic2V0SXRlbUluZGV4Iiwic2V0TWFya2Rvd25WaWV3IiwicmVmU3R5bGUiLCJ1c2VNZW1vIiwiZm9udEZhbWlseSIsIk1hdGgiLCJyb3VuZCIsImNvbnRlbnRTdHlsZSIsInNjcmlwdHVyZUxhYmVsIiwiZGlzYWJsZVdvcmRQb3BvdmVyXyIsInVzaW5nT3JpZ2luYWxCaWJsZSIsInVuZGVmaW5lZCIsImZldGNoR2xvc3NEYXRhRm9yVmVyc2UiLCJlbmFibGVFZGl0IiwiZW5hYmxlQWxpZ25tZW50Iiwib3JpZ2luYWxSZXBvVXJsIiwiX3NjcmlwdHVyZUFsaWdubWVudEVkaXQiLCJjdXJyZW50VmVyc2VSZWYiLCJ0YXJnZXRMYW5ndWFnZSIsInNvdXJjZUxhbmd1YWdlIiwiY3VycmVudFZlcnNlT2JqZWN0cyIsImhhbmRsZUFsaWdubWVudENsaWNrIiwic2V0RWRpdGluZyIsInNldFZlcnNlQ2hhbmdlZCIsInNhdmVDaGFuZ2VzVG9DbG91ZCIsImFsaWduZWQiLCJhbGlnbmVyRGF0YSIsImRvaW5nU2F2ZSIsImVkaXRpbmciLCJ1bnNhdmVkQ2hhbmdlcyIsInVuc2F2ZWRDaGFuZ2VzXyIsImNoZWNraW5nU3RhdGUiLCJ0aXRsZVRleHQiLCJvblJlbmRlclRvb2xiYXIiLCJtYXJnaW4iLCJjdXJzb3IiLCJfdmVyc2UiLCJpbmNsdWRlcyIsInByb3BUeXBlcyIsInN0cmluZyIsImZ1bmMiLCJpc1JlcXVpcmVkIiwibnVtYmVyIiwic2hhcGUiLCJvbmVPZlR5cGUiLCJib29sIiwib2JqZWN0IiwiYW55Il0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLE9BQU8sS0FBS0EsS0FBWixNQUF1QixPQUF2QjtBQUNBLE9BQU8sS0FB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RXhCO0FBQ0FwSCxFQUFBQSxlQUFlLEVBQUUxRCxTQUFTLENBQUN3SyxJQWxFSDs7QUFtRXhCO0FBQ0E3RyxFQUFBQSxTQUFTLEVBQUUzRCxTQUFTLENBQUN1SyxNQXBFRzs7QUFxRXhCO0FBQ0EzRyxFQUFBQSxhQUFhLEVBQUU1RCxTQUFTLENBQUN3SyxJQXRFRDs7QUF1RXhCO0FBQ0EzRyxFQUFBQSxvQkFBb0IsRUFBRTdELFNBQVMsQ0FBQ3dLO0FBeEVSLENBQTFCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnXG5pbXBvcnQgKiBhcyBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcydcbmltcG9ydCB7IFJ4TGluazIsIFJ4TGlua0JyZWFrMiB9IGZyb20gJ3JlYWN0LWljb25zL3J4J1xuXG5pbXBvcnQge1xuICBDYXJkLFxuICB1c2VDYXJkU3RhdGUsXG4gIHVzZVVzZXJCcmFuY2gsXG4gIEVSUk9SX1NUQVRFLFxuICBNQU5JRkVTVF9OT1RfTE9BREVEX0VSUk9SLFxufSBmcm9tICd0cmFuc2xhdGlvbi1oZWxwcy1yY2wnXG5pbXBvcnQgeyBJY29uQnV0dG9uIH0gZnJvbSAnQG11aS9tYXRlcmlhbCdcbmltcG9ydCB7IFNjcmlwdHVyZVBhbmUsIFNjcmlwdHVyZVNlbGVjdG9yIH0gZnJvbSAnLi4nXG5pbXBvcnQgeyB1c2VTY3JpcHR1cmVTZXR0aW5ncyB9IGZyb20gJy4uLy4uL2hvb2tzL3VzZVNjcmlwdHVyZVNldHRpbmdzJ1xuaW1wb3J0IHtcbiAgZ2V0UmVzb3VyY2VMaW5rLFxuICBnZXRSZXNvdXJjZU1lc3NhZ2UsXG4gIGdldFNjcmlwdHVyZVZlcnNpb25TZXR0aW5ncyxcbiAgaXNPcmlnaW5hbEJpYmxlLFxufSBmcm9tICcuLi8uLi91dGlscy9TY3JpcHR1cmVTZXR0aW5ncydcbmltcG9ydCB7IFRpdGxlIH0gZnJvbSAnLi4vU2NyaXB0dXJlUGFuZS9zdHlsZWQnXG5pbXBvcnQge1xuICBOVF9PUklHX0xBTkcsXG4gIE9SSUdJTkFMX1NPVVJDRSxcbiAgT1RfT1JJR19MQU5HLFxufSBmcm9tICcuLi8uLi91dGlscydcbmltcG9ydCB7IHVzZVNjcmlwdHVyZUFsaWdubWVudEVkaXQgfSBmcm9tICcuLi8uLi9ob29rcy91c2VTY3JpcHR1cmVBbGlnbm1lbnRFZGl0J1xuXG5jb25zdCBLRVlfRk9OVF9TSVpFX0JBU0UgPSAnc2NyaXB0dXJlUGFuZUZvbnRTaXplXydcbmNvbnN0IGxhYmVsID0gJ1ZlcnNpb24nXG5jb25zdCBzdHlsZSA9IHsgbWFyZ2luVG9wOiAnMTZweCcsIHdpZHRoOiAnNTAwcHgnIH1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gU2NyaXB0dXJlQ2FyZCh7XG4gIGlkLFxuICBpc05ULFxuICB0aXRsZSxcbiAgc2VydmVyLFxuICBhcHBSZWYsXG4gIGNhcmROdW0sXG4gIGNsYXNzZXMsXG4gIHJlc291cmNlOiB7XG4gICAgb3duZXIsXG4gICAgbGFuZ3VhZ2VJZCxcbiAgICByZXNvdXJjZUlkLFxuICAgIG9yaWdpbmFsTGFuZ3VhZ2VPd25lcixcbiAgfSxcbiAgZ2V0TGFuZ3VhZ2UsXG4gIHJlZmVyZW5jZToge1xuICAgIHZlcnNlLFxuICAgIGNoYXB0ZXIsXG4gICAgcHJvamVjdElkOiBib29rSWQsXG4gIH0sXG4gIHJlc291cmNlTGluayxcbiAgdXNlVXNlckxvY2FsU3RvcmFnZSxcbiAgZGlzYWJsZVdvcmRQb3BvdmVyLFxuICBvblJlc291cmNlRXJyb3IsXG4gIGh0dHBDb25maWcsXG4gIGdyZWVrUmVwb1VybCxcbiAgaGVicmV3UmVwb1VybCxcbiAgZ2V0TGV4aWNvbkRhdGEsXG4gIGZldGNoR2xvc3Nlc0ZvclZlcnNlLFxuICB0cmFuc2xhdGUsXG4gIG9uTWluaW1pemUsXG4gIGxvZ2dlZEluVXNlcixcbiAgYXV0aGVudGljYXRpb24sXG4gIHNldFNhdmVkQ2hhbmdlcyxcbiAgYm9va0luZGV4LFxuICBhZGRWZXJzZVJhbmdlLFxuICBzZXRXb3JkQWxpZ25lclN0YXR1cyxcbn0pIHtcbiAgY29uc3QgW3N0YXRlLCBzZXRTdGF0ZV9dID0gUmVhY3QudXNlU3RhdGUoe1xuICAgIGN1cnJlbnRWZXJzZU51bTogMCwgLy9UT0RPIHdpbGwgYmUgdXNlZCBpbiBmdXR1cmUgd2hlbiBuZWVkIHRvIHN1cHBvcnQgbXVsdGlwbGUgdmVyc2VzIGluIGNhcmRcbiAgICByZWY6IGFwcFJlZixcbiAgICB1cmxFcnJvcjogbnVsbCxcbiAgICB1c2luZ1VzZXJCcmFuY2g6IGZhbHNlLFxuICAgIGRvaW5nQWxpZ25tZW50OiBmYWxzZSxcbiAgfSlcbiAgY29uc3Qge1xuICAgIGN1cnJlbnRWZXJzZU51bSxcbiAgICByZWYsXG4gICAgdXJsRXJyb3IsXG4gICAgdXNpbmdVc2VyQnJhbmNoLFxuICAgIGRvaW5nQWxpZ25tZW50LFxuICB9ID0gc3RhdGVcblxuICBjb25zdCBbZm9udFNpemUsIHNldEZvbnRTaXplXSA9IHVzZVVzZXJMb2NhbFN0b3JhZ2UoS0VZX0ZPTlRfU0laRV9CQVNFICsgY2FyZE51bSwgMTAwKVxuICBjb25zdCBpc05UXyA9IGlzTlQoYm9va0lkKVxuXG4gIGZ1bmN0aW9uIHNldFN0YXRlKG5ld1N0YXRlKSB7XG4gICAgc2V0U3RhdGVfKHByZXZTdGF0ZSA9PiAoeyAuLi5wcmV2U3RhdGUsIC4uLm5ld1N0YXRlIH0pKVxuICB9XG5cbiAgaWYgKHVzaW5nVXNlckJyYW5jaCkge1xuICAgIGh0dHBDb25maWcgPSB7IC4uLmh0dHBDb25maWcsIGNhY2hlOiB7IG1heEFnZTogMCB9IH0gLy8gZGlzYWJsZSBodHRwIGNhY2hpbmdcbiAgfVxuXG4gIGNvbnN0IHtcbiAgICBpc05ld1Rlc3RhbWVudCxcbiAgICBzY3JpcHR1cmVDb25maWcsXG4gICAgc2V0U2NyaXB0dXJlLFxuICAgIHNjcmlwdHVyZVNldHRpbmdzLFxuICAgIHNjcmlwdHVyZVZlcnNpb25IaXN0LFxuICB9ID0gdXNlU2NyaXB0dXJlU2V0dGluZ3Moe1xuICAgIGlzTlQsXG4gICAgdGl0bGUsXG4gICAgdmVyc2UsXG4gICAgb3duZXIsXG4gICAgYm9va0lkLFxuICAgIGFwcFJlZjogcmVmLFxuICAgIHNlcnZlcixcbiAgICBjYXJkTnVtLFxuICAgIGNoYXB0ZXIsXG4gICAgbGFuZ3VhZ2VJZCxcbiAgICByZXNvdXJjZUlkLFxuICAgIHJlc291cmNlTGluayxcbiAgICB1c2VVc2VyTG9jYWxTdG9yYWdlLFxuICAgIGRpc2FibGVXb3JkUG9wb3ZlcixcbiAgICBvcmlnaW5hbExhbmd1YWdlT3duZXIsXG4gICAgc2V0VXJsRXJyb3I6IChlcnJvcikgPT4gc2V0U3RhdGUoeyB1cmxFcnJvcjogZXJyb3IgfSksXG4gICAgaHR0cENvbmZpZyxcbiAgICBncmVla1JlcG9VcmwsXG4gICAgaGVicmV3UmVwb1VybCxcbiAgICB3aG9sZUJvb2s6IHRydWUsXG4gIH0pXG5cbiAgLy8gQHRzLWlnbm9yZVxuICBjb25zdCBjYXJkUmVzb3VyY2VJZCA9IHNjcmlwdHVyZUNvbmZpZz8ucmVzb3VyY2U/LnByb2plY3RJZCB8fCByZXNvdXJjZUlkXG4gIGNvbnN0IGN1cnJlbnRWZXJzZURhdGFfID0gc2NyaXB0dXJlQ29uZmlnPy52ZXJzZXNGb3JSZWY/LltjdXJyZW50VmVyc2VOdW1dIHx8IG51bGxcbiAgY29uc3QgaW5pdGlhbFZlcnNlT2JqZWN0cyA9IGN1cnJlbnRWZXJzZURhdGFfPy52ZXJzZURhdGE/LnZlcnNlT2JqZWN0cyB8fCBudWxsXG4gIC8vIEB0cy1pZ25vcmVcbiAgbGV0IHJlZl8gPSBzY3JpcHR1cmVDb25maWc/LnJlc291cmNlPy5yZWYgfHwgYXBwUmVmXG4gIGNvbnN0IGNhblVzZUVkaXRCcmFuY2ggPSBsb2dnZWRJblVzZXIgJiYgYXV0aGVudGljYXRpb24gJiZcbiAgICAocmVzb3VyY2VJZCAhPT0gT1JJR0lOQUxfU09VUkNFKSAmJlxuICAgICgocmVmXyA9PT0gJ21hc3RlcicpIHx8IChyZWZfLnN1YnN0cmluZygwLCBsb2dnZWRJblVzZXIubGVuZ3RoKSA9PT0gbG9nZ2VkSW5Vc2VyKSApIC8vIG5vdCB0YWdcblxuICBjb25zdCB7XG4gICAgc3RhdGU6IHsgd29ya2luZ1Jlc291cmNlQnJhbmNoLCB1c2luZ1VzZXJCcmFuY2g6IHVzaW5nVXNlckJyYW5jaF8gfSxcbiAgICBhY3Rpb25zOiB7IHN0YXJ0RWRpdDogc3RhcnRFZGl0QnJhbmNoIH0sXG4gIH0gPSB1c2VVc2VyQnJhbmNoKHtcbiAgICBvd25lcixcbiAgICBzZXJ2ZXIsXG4gICAgYXBwUmVmLFxuICAgIGxhbmd1YWdlSWQsXG4gICAgY2FyZElkOiBpZCxcbiAgICBsb2dnZWRJblVzZXI6IGNhblVzZUVkaXRCcmFuY2ggPyBsb2dnZWRJblVzZXIgOiBudWxsLFxuICAgIGF1dGhlbnRpY2F0aW9uOiBjYW5Vc2VFZGl0QnJhbmNoID8gYXV0aGVudGljYXRpb24gOiBudWxsLFxuICAgIGNhcmRSZXNvdXJjZUlkLFxuICAgIG9uUmVzb3VyY2VFcnJvcixcbiAgICB1c2VVc2VyTG9jYWxTdG9yYWdlLFxuICB9KVxuXG4gIGNvbnN0IHdvcmtpbmdSZWYgPSBjYW5Vc2VFZGl0QnJhbmNoID8gd29ya2luZ1Jlc291cmNlQnJhbmNoIDogYXBwUmVmXG4gIGxldCBzY3JpcHR1cmVUaXRsZVxuXG4gIFJlYWN0LnVzZUVmZmVjdCgoKSA9PiB7IC8vIHNlbGVjdCBjb3JyZWN0IHdvcmtpbmcgcmVmIC0gY291bGQgYmUgbWFzdGVyLCB1c2VyIGJyYW5jaCwgb3IgcmVsZWFzZVxuICAgIGlmICh1c2luZ1VzZXJCcmFuY2hfICE9PSB1c2luZ1VzZXJCcmFuY2gpIHtcbiAgICAgIHNldFN0YXRlKHsgdXNpbmdVc2VyQnJhbmNoOiB1c2luZ1VzZXJCcmFuY2hfIH0pXG4gICAgfVxuICB9LCBbdXNpbmdVc2VyQnJhbmNoXywgdXNpbmdVc2VyQnJhbmNoXSlcblxuICBSZWFjdC51c2VFZmZlY3QoKCkgPT4geyAvLyBzZWxlY3QgY29ycmVjdCB3b3JraW5nIHJlZiAtIGNvdWxkIGJlIG1hc3RlciwgdXNlciBicmFuY2gsIG9yIHJlbGVhc2VcbiAgICBsZXQgd29ya2luZ1JlZl8gPSB3b3JraW5nUmVmIHx8IGFwcFJlZlxuXG4gICAgaWYgKHJlZiAhPT0gd29ya2luZ1JlZl8pIHtcbiAgICAgIHNldFN0YXRlKHsgcmVmOiB3b3JraW5nUmVmXyB9KVxuICAgIH1cbiAgfSwgW3dvcmtpbmdSZWYsIHJlZiwgYXBwUmVmXSlcblxuICBSZWFjdC51c2VFZmZlY3QoKCkgPT4geyAvLyB1cGRhdGUgZGlzcGxheSBzdGF0dXMgaWYgZXJyb3JcbiAgICBjb25zdCBlcnJvciA9IHNjcmlwdHVyZUNvbmZpZz8ucmVzb3VyY2VTdGF0dXM/LltFUlJPUl9TVEFURV1cblxuICAgIGlmIChlcnJvcikgeyAvLyBpZiBlcnJvciB3YXMgZm91bmQgZG8gY2FsbGJhY2tcbiAgICAgIGNvbnN0IHJlc291cmNlU3RhdHVzID0gc2NyaXB0dXJlQ29uZmlnPy5yZXNvdXJjZVN0YXR1c1xuICAgICAgY29uc3QgcmVzb3VyY2VMaW5rID0gZ2V0UmVzb3VyY2VMaW5rKHNjcmlwdHVyZUNvbmZpZylcbiAgICAgIGNvbnN0IG1lc3NhZ2UgPSBnZXRSZXNvdXJjZU1lc3NhZ2UocmVzb3VyY2VTdGF0dXMsIHNlcnZlciwgcmVzb3VyY2VMaW5rLCBpc05UXylcbiAgICAgIGNvbnN0IGlzQWNjZXNzRXJyb3IgPSByZXNvdXJjZVN0YXR1c1tNQU5JRkVTVF9OT1RfTE9BREVEX0VSUk9SXVxuICAgICAgb25SZXNvdXJjZUVycm9yICYmIG9uUmVzb3VyY2VFcnJvcihtZXNzYWdlLCBpc0FjY2Vzc0Vycm9yLCByZXNvdXJjZVN0YXR1cylcbiAgICB9XG4gIH0sIFtzY3JpcHR1cmVDb25maWc/LnJlc291cmNlU3RhdHVzPy5bRVJST1JfU1RBVEVdLCBvblJlc291cmNlRXJyb3JdKVxuXG4gIGlmIChzY3JpcHR1cmVDb25maWcudGl0bGUgJiYgc2NyaXB0dXJlQ29uZmlnLnZlcnNpb24pIHtcbiAgICBzY3JpcHR1cmVUaXRsZSA9IGAke3NjcmlwdHVyZUNvbmZpZy50aXRsZX0gdiR7c2NyaXB0dXJlQ29uZmlnLnZlcnNpb259YFxuICAgIHNjcmlwdHVyZVZlcnNpb25IaXN0LnVwZGF0ZVRpdGxlKHNjcmlwdHVyZUNvbmZpZy5yZXNvdXJjZUxpbmssIHNjcmlwdHVyZVRpdGxlKVxuICB9IGVsc2Uge1xuICAgIHNjcmlwdHVyZVRpdGxlID0gYFRpdGxlIG1pc3NpbmcgZnJvbSBwcm9qZWN0IG1hbmlmZXN0YFxuICB9XG5cbiAgLyoqIER5bmFtaWNhbGx5IGNyZWF0ZXMgdGhlIHNjcmlwdHVyZSBzZWxlY3Rpb24gZHJvcGRvd24gdG8gYmUgaW5zZXJ0ZWQgaW50byBjYXJkIHNldHRpbmdzICovXG4gIGZ1bmN0aW9uIGdldFNjcmlwdHVyZVNlbGVjdG9yKCkge1xuICAgIGNvbnN0IHNjcmlwdHVyZVNlbGVjdGlvbkNvbmZpZyA9IGdldFNjcmlwdHVyZVZlcnNpb25TZXR0aW5ncyh7XG4gICAgICBsYWJlbCxcbiAgICAgIHJlc291cmNlTGluazogc2NyaXB0dXJlQ29uZmlnLnJlc291cmNlTGluayxcbiAgICAgIHNldFNjcmlwdHVyZSxcbiAgICAgIHNjcmlwdHVyZVZlcnNpb25IaXN0LFxuICAgIH0pXG5cbiAgICByZXR1cm4gPFNjcmlwdHVyZVNlbGVjdG9yIHsuLi5zY3JpcHR1cmVTZWxlY3Rpb25Db25maWd9IHN0eWxlPXtzdHlsZX0gZXJyb3JNZXNzYWdlPXt1cmxFcnJvcn0gLz5cbiAgfVxuXG4gIGZ1bmN0aW9uIG9uTWVudUNsb3NlKCkge1xuICAgIC8vIGNvbnNvbGUubG9nKGBvbk1lbnVDbG9zZSgpYClcbiAgICBzZXRTdGF0ZSh7IHVybEVycm9yOiBudWxsIH0pXG4gIH1cblxuICAvLyBAdHMtaWdub3JlXG4gIGNvbnN0IGxhbmd1YWdlSWRfID0gc2NyaXB0dXJlQ29uZmlnPy5yZXNvdXJjZT8ubGFuZ3VhZ2VJZFxuICBjb25zdCBsYW5ndWFnZSA9IGdldExhbmd1YWdlKHsgbGFuZ3VhZ2VJZDogbGFuZ3VhZ2VJZF8gfSlcbiAgY29uc3QgZGlyZWN0aW9uID0gKGxhbmd1YWdlPy5kaXJlY3Rpb24pIHx8ICdsdHInXG4gIGNvbnN0IHJlZmVyZW5jZSA9IHsgLi4uc2NyaXB0dXJlQ29uZmlnLnJlZmVyZW5jZSB9XG5cbiAgY29uc3QgaXNIZWJyZXcgPSAobGFuZ3VhZ2VJZF8gPT09ICdoYm8nKVxuICBjb25zdCBmb250RmFjdG9yID0gaXNIZWJyZXcgPyAxLjQgOiAxIC8vIHdlIGF1dG9tYXRpY2FsbHkgc2NhbGUgdXAgZm9udCBzaXplIGZvciBIZWJyZXdcbiAgY29uc3Qgc2NhbGVkRm9udFNpemUgPSBmb250U2l6ZSAqIGZvbnRGYWN0b3JcbiAgY29uc3QgY3VycmVudFZlcnNlU3RyID0gY3VycmVudFZlcnNlRGF0YV8/LnZlcnNlLnRvU3RyaW5nKClcblxuICBpZiAoY3VycmVudFZlcnNlU3RyICYmIChjdXJyZW50VmVyc2VTdHIgIT09IHJlZmVyZW5jZS52ZXJzZSkpIHsgLy8gc3VwcG9ydCBmb3IgdmVyc2Ugc3BhblxuICAgIHJlZmVyZW5jZS52ZXJzZSA9IGN1cnJlbnRWZXJzZVN0clxuICB9XG5cbiAgY29uc3QgaXRlbXMgPSBudWxsXG4gIGNvbnN0IHtcbiAgICBzdGF0ZToge1xuICAgICAgaGVhZGVycywgZmlsdGVycywgaXRlbUluZGV4LCBtYXJrZG93blZpZXcsXG4gICAgfSxcbiAgICBhY3Rpb25zOiB7XG4gICAgICBzZXRGaWx0ZXJzLCBzZXRJdGVtSW5kZXgsIHNldE1hcmtkb3duVmlldyxcbiAgICB9LFxuICB9ID0gdXNlQ2FyZFN0YXRlKHsgaXRlbXMgfSlcblxuICBjb25zdCByZWZTdHlsZSA9IFJlYWN0LnVzZU1lbW8oKCkgPT4gKHtcbiAgICBmb250RmFtaWx5OiAnTm90byBTYW5zJyxcbiAgICBmb250U2l6ZTogYCR7TWF0aC5yb3VuZChzY2FsZWRGb250U2l6ZSAqIDAuOSl9JWAsXG4gIH0pLCBbc2NhbGVkRm9udFNpemVdKVxuXG4gIGNvbnN0IGNvbnRlbnRTdHlsZSA9IFJlYWN0LnVzZU1lbW8oKCkgPT4gKHtcbiAgICBmb250RmFtaWx5OiAnTm90byBTYW5zJyxcbiAgICBmb250U2l6ZTogYCR7c2NhbGVkRm9udFNpemV9JWAsXG4gIH0pLCBbc2NhbGVkRm9udFNpemVdKVxuXG4gIGNvbnN0IHNjcmlwdHVyZUxhYmVsID0gPFRpdGxlPntzY3JpcHR1cmVUaXRsZX08L1RpdGxlPlxuICBsZXQgZGlzYWJsZVdvcmRQb3BvdmVyXyA9IGRpc2FibGVXb3JkUG9wb3ZlclxuICBjb25zdCB1c2luZ09yaWdpbmFsQmlibGUgPSBpc09yaWdpbmFsQmlibGUoc2NyaXB0dXJlQ29uZmlnWydyZXNvdXJjZSddPy5wcm9qZWN0SWQpXG5cbiAgaWYgKGRpc2FibGVXb3JkUG9wb3ZlciA9PT0gdW5kZWZpbmVkKSB7IC8vIGlmIG5vdCBzcGVjaWZpZWQsIHRoZW4gZGV0ZXJtaW5lIGlmIG9yaWdpbmFsIGxhbmd1YWdlIHJlc291cmNlXG4gICAgZGlzYWJsZVdvcmRQb3BvdmVyXyA9ICF1c2luZ09yaWdpbmFsQmlibGVcbiAgfVxuXG4gIFJlYWN0LnVzZUVmZmVjdCgoKSA9PiB7IC8vIHByZS1jYWNoZSBnbG9zc2VzIG9uIHZlcnNlIGNoYW5nZVxuICAgIGNvbnN0IGZldGNoR2xvc3NEYXRhRm9yVmVyc2UgPSBhc3luYyAoKSA9PiB7XG4gICAgICBpZiAoIWRpc2FibGVXb3JkUG9wb3ZlciAmJiBpbml0aWFsVmVyc2VPYmplY3RzICYmIGZldGNoR2xvc3Nlc0ZvclZlcnNlKSB7XG4gICAgICAgIGF3YWl0IGZldGNoR2xvc3Nlc0ZvclZlcnNlKGluaXRpYWxWZXJzZU9iamVjdHMsIGxhbmd1YWdlSWRfKVxuICAgICAgfVxuICAgIH1cblxuICAgIGZldGNoR2xvc3NEYXRhRm9yVmVyc2UoKVxuICB9LCBbIGluaXRpYWxWZXJzZU9iamVjdHMsIGRpc2FibGVXb3JkUG9wb3ZlciwgbGFuZ3VhZ2VJZF8sIGZldGNoR2xvc3Nlc0ZvclZlcnNlIF0pXG5cbiAgY29uc3QgZW5hYmxlRWRpdCA9ICF1c2luZ09yaWdpbmFsQmlibGVcbiAgY29uc3QgZW5hYmxlQWxpZ25tZW50ID0gIXVzaW5nT3JpZ2luYWxCaWJsZVxuICBjb25zdCBvcmlnaW5hbFJlcG9VcmwgPSBpc05ld1Rlc3RhbWVudCA/IGdyZWVrUmVwb1VybCA6IGhlYnJld1JlcG9VcmxcbiAgY29uc3QgX3NjcmlwdHVyZUFsaWdubWVudEVkaXQgPSB1c2VTY3JpcHR1cmVBbGlnbm1lbnRFZGl0KHtcbiAgICBhdXRoZW50aWNhdGlvbjogY2FuVXNlRWRpdEJyYW5jaCA/IGF1dGhlbnRpY2F0aW9uIDogbnVsbCxcbiAgICBjdXJyZW50VmVyc2VSZWY6IHJlZmVyZW5jZSxcbiAgICBlbmFibGVFZGl0LFxuICAgIGVuYWJsZUFsaWdubWVudCxcbiAgICBodHRwQ29uZmlnLFxuICAgIGluaXRpYWxWZXJzZU9iamVjdHMsXG4gICAgaXNOZXdUZXN0YW1lbnQsXG4gICAgLy8gQHRzLWlnbm9yZVxuICAgIGxvZ2dlZEluVXNlcjogY2FuVXNlRWRpdEJyYW5jaCA/IGxvZ2dlZEluVXNlciA6IG51bGwsXG4gICAgb3JpZ2luYWxMYW5ndWFnZU93bmVyLFxuICAgIG9yaWdpbmFsUmVwb1VybCxcbiAgICAvLyBAdHMtaWdub3JlXG4gICAgc2NyaXB0dXJlQ29uZmlnLFxuICAgIHNjcmlwdHVyZVNldHRpbmdzLFxuICAgIHN0YXJ0RWRpdEJyYW5jaCxcbiAgICBib29rSW5kZXgsXG4gICAgd29ya2luZ1Jlc291cmNlQnJhbmNoOiByZWYsXG4gICAgY3VycmVudFZlcnNlTnVtLFxuICAgIHRhcmdldExhbmd1YWdlOiBsYW5ndWFnZSxcbiAgICBzb3VyY2VMYW5ndWFnZTogaXNOVF8gPyBOVF9PUklHX0xBTkcgOiBPVF9PUklHX0xBTkcsXG4gICAgdGl0bGU6IHNjcmlwdHVyZVRpdGxlLFxuICB9KVxuICBjb25zdCB7XG4gICAgYWN0aW9uczoge1xuICAgICAgY3VycmVudFZlcnNlT2JqZWN0cyxcbiAgICAgIGhhbmRsZUFsaWdubWVudENsaWNrLFxuICAgICAgc2V0RWRpdGluZyxcbiAgICAgIHNldFZlcnNlQ2hhbmdlZCxcbiAgICAgIHNhdmVDaGFuZ2VzVG9DbG91ZCxcbiAgICB9LFxuICAgIHN0YXRlOiB7XG4gICAgICBhbGlnbmVkLFxuICAgICAgYWxpZ25lckRhdGEsXG4gICAgICBkb2luZ1NhdmUsXG4gICAgICBlZGl0aW5nLFxuICAgICAgdW5zYXZlZENoYW5nZXMsXG4gICAgfSxcbiAgfSA9IF9zY3JpcHR1cmVBbGlnbm1lbnRFZGl0XG5cbiAgUmVhY3QudXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoX3NjcmlwdHVyZUFsaWdubWVudEVkaXQ/LnN0YXRlPy5hbGlnbmVyRGF0YSAmJiAhZG9pbmdBbGlnbm1lbnQpIHtcbiAgICAgIHNldFdvcmRBbGlnbmVyU3RhdHVzKF9zY3JpcHR1cmVBbGlnbm1lbnRFZGl0KVxuICAgICAgc2V0U3RhdGUoeyBkb2luZ0FsaWdubWVudDogdHJ1ZSB9KVxuICAgIH0gZWxzZSBpZiAoZG9pbmdBbGlnbm1lbnQpIHtcbiAgICAgIHNldFdvcmRBbGlnbmVyU3RhdHVzKF9zY3JpcHR1cmVBbGlnbm1lbnRFZGl0KVxuICAgICAgc2V0U3RhdGUoeyBkb2luZ0FsaWdubWVudDogZmFsc2UgfSlcbiAgICB9XG4gIH0sIFtfc2NyaXB0dXJlQWxpZ25tZW50RWRpdD8uc3RhdGU/LmFsaWduZXJEYXRhXSlcblxuICBSZWFjdC51c2VFZmZlY3QoKCkgPT4geyAvLyBzZXQgc2F2ZWQgY2hhbmdlcyB3aGVuZXZlciB1c2VyIGVkaXRzIHZlcnNlIHRleHQgb3IgYWxpZ25tZW50cyBvciBpZiBhbGlnbm1lbnRzIGFyZSBvcGVuXG4gICAgY29uc3QgdW5zYXZlZENoYW5nZXNfID0gdW5zYXZlZENoYW5nZXMgfHwgYWxpZ25lckRhdGFcbiAgICBzZXRTYXZlZENoYW5nZXMgJiYgc2V0U2F2ZWRDaGFuZ2VzKHJlc291cmNlSWQsICF1bnNhdmVkQ2hhbmdlc18pXG4gIH0sIFt1bnNhdmVkQ2hhbmdlcywgYWxpZ25lckRhdGFdKVxuXG4gIGNvbnN0IGNoZWNraW5nU3RhdGUgPSBhbGlnbmVkID8gJ3ZhbGlkJyA6ICdpbnZhbGlkJ1xuICBjb25zdCB0aXRsZVRleHQgPSBjaGVja2luZ1N0YXRlID09PSAndmFsaWQnID8gJ0FsaWdubWVudCBpcyBWYWxpZCcgOiAnQWxpZ25tZW50IGlzIEludmFsaWQnXG4gIGNvbnN0IG9uUmVuZGVyVG9vbGJhciA9ICh7IGl0ZW1zIH0pID0+IFtcbiAgICAuLi5pdGVtcyxcbiAgICA8SWNvbkJ1dHRvblxuICAgICAgY2xhc3NOYW1lPXtjbGFzc2VzLm1hcmdpbn1cbiAgICAgIGtleT0nY2hlY2tpbmctYnV0dG9uJ1xuICAgICAgb25DbGljaz17KCkgPT4gaGFuZGxlQWxpZ25tZW50Q2xpY2soKX1cbiAgICAgIHRpdGxlPXt0aXRsZVRleHR9XG4gICAgICBhcmlhLWxhYmVsPXt0aXRsZVRleHR9XG4gICAgICBzdHlsZT17eyBjdXJzb3I6ICdwb2ludGVyJyB9fVxuICAgID5cbiAgICAgIHtjaGVja2luZ1N0YXRlID09PSAndmFsaWQnID8gKFxuICAgICAgICA8UnhMaW5rMiBpZD0ndmFsaWRfaWNvbicgY29sb3I9JyNCQkInIC8+XG4gICAgICApIDogKFxuICAgICAgICA8UnhMaW5rQnJlYWsyIGlkPSdpbnZhbGlkX2ljb24nIGNvbG9yPScjMDAwJyAvPlxuICAgICAgKX1cbiAgICA8L0ljb25CdXR0b24+LFxuICBdXG5cbiAgUmVhY3QudXNlRWZmZWN0KCgpID0+IHtcbiAgICAvLyBjaGVjayBmb3IgdmVyc2UgcmFuZ2VcbiAgICBjb25zdCBfdmVyc2UgPSByZWZlcmVuY2UudmVyc2VcblxuICAgIGlmIChhZGRWZXJzZVJhbmdlICYmICh0eXBlb2YgX3ZlcnNlID09PSAnc3RyaW5nJykpIHtcbiAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgIGlmIChfdmVyc2UuaW5jbHVkZXMoJy0nKSkge1xuICAgICAgICBhZGRWZXJzZVJhbmdlKGAke3NjcmlwdHVyZUNvbmZpZz8ucmVmZXJlbmNlPy5jaGFwdGVyfToke192ZXJzZX1gKVxuICAgICAgfVxuICAgIH1cbiAgfSwgW3JlZmVyZW5jZS52ZXJzZV0pXG5cbiAgcmV0dXJuIChcbiAgICA8Q2FyZFxuICAgICAgaWQ9e2BzY3JpcHR1cmVfY2FyZF8ke2NhcmROdW19YH1cbiAgICAgIHRpdGxlPXtzY3JpcHR1cmVMYWJlbH1cbiAgICAgIHNldHRpbmdzVGl0bGU9e3NjcmlwdHVyZVRpdGxlICsgJyBTZXR0aW5ncyd9XG4gICAgICBpdGVtcz17aXRlbXN9XG4gICAgICBjbGFzc2VzPXtjbGFzc2VzfVxuICAgICAgaGVhZGVycz17aGVhZGVyc31cbiAgICAgIGZpbHRlcnM9e2ZpbHRlcnN9XG4gICAgICBmb250U2l6ZT17Zm9udFNpemV9XG4gICAgICBpdGVtSW5kZXg9e2l0ZW1JbmRleH1cbiAgICAgIHNldEZpbHRlcnM9e3NldEZpbHRlcnN9XG4gICAgICBzZXRGb250U2l6ZT17c2V0Rm9udFNpemV9XG4gICAgICBzZXRJdGVtSW5kZXg9e3NldEl0ZW1JbmRleH1cbiAgICAgIG1hcmtkb3duVmlldz17bWFya2Rvd25WaWV3fVxuICAgICAgc2V0TWFya2Rvd25WaWV3PXtzZXRNYXJrZG93blZpZXd9XG4gICAgICBnZXRDdXN0b21Db21wb25lbnQ9e2dldFNjcmlwdHVyZVNlbGVjdG9yfVxuICAgICAgaGlkZU1hcmtkb3duVG9nZ2xlXG4gICAgICBvbk1lbnVDbG9zZT17b25NZW51Q2xvc2V9XG4gICAgICBvbk1pbmltaXplPXtvbk1pbmltaXplID8gKCkgPT4gb25NaW5pbWl6ZShpZCkgOiBudWxsfVxuICAgICAgZWRpdGFibGU9e2VuYWJsZUVkaXQgfHwgZW5hYmxlQWxpZ25tZW50fVxuICAgICAgc2F2ZWQ9e2RvaW5nU2F2ZSB8fCAhdW5zYXZlZENoYW5nZXN9XG4gICAgICBvblNhdmVFZGl0PXtzYXZlQ2hhbmdlc1RvQ2xvdWR9XG4gICAgICBvbkJsdXI9eygpID0+IHNldEVkaXRpbmcoZmFsc2UpfVxuICAgICAgb25SZW5kZXJUb29sYmFyPXtvblJlbmRlclRvb2xiYXJ9XG4gICAgPlxuICAgICAgPFNjcmlwdHVyZVBhbmVcbiAgICAgICAgcmVmU3R5bGU9e3JlZlN0eWxlfVxuICAgICAgICB7Li4uc2NyaXB0dXJlQ29uZmlnfVxuICAgICAgICB2ZXJzZU9iamVjdHM9e2N1cnJlbnRWZXJzZU9iamVjdHN9XG4gICAgICAgIGlzTlQ9e2lzTlRffVxuICAgICAgICBzZXJ2ZXI9e3NlcnZlcn1cbiAgICAgICAgcmVmZXJlbmNlPXtyZWZlcmVuY2V9XG4gICAgICAgIGRpcmVjdGlvbj17ZGlyZWN0aW9ufVxuICAgICAgICBjb250ZW50U3R5bGU9e2NvbnRlbnRTdHlsZX1cbiAgICAgICAgZm9udFNpemU9e2ZvbnRTaXplfVxuICAgICAgICBkaXNhYmxlV29yZFBvcG92ZXI9e2Rpc2FibGVXb3JkUG9wb3Zlcl99XG4gICAgICAgIGdldExleGljb25EYXRhPXtnZXRMZXhpY29uRGF0YX1cbiAgICAgICAgdHJhbnNsYXRlPXt0cmFuc2xhdGV9XG4gICAgICAgIGVkaXRpbmc9e2VkaXRpbmd9XG4gICAgICAgIHNldEVkaXRpbmc9e3NldEVkaXRpbmd9XG4gICAgICAgIHNldFZlcnNlQ2hhbmdlZD17c2V0VmVyc2VDaGFuZ2VkfVxuICAgICAgICBzYXZpbmc9e2RvaW5nU2F2ZX1cbiAgICAgIC8+XG4gICAgPC9DYXJkPlxuICApXG59XG5cblNjcmlwdHVyZUNhcmQucHJvcFR5cGVzID0ge1xuICAvKiogaHRtbCBpZGVudGlmaWVyIHRvIHVzZSBmb3IgY2FyZCAqL1xuICBpZDogUHJvcFR5cGVzLnN0cmluZyxcbiAgLyoqIG1ldGhvZCB0byBkZXRlcm1pbmUgaWYgTlQgb3IgT1QgKi9cbiAgaXNOVDogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbiAgLyoqIHRpdGxlIGZvciBzY3JpcHR1cmUgY2FyZCAqL1xuICB0aXRsZTogUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLFxuICAvKiogZ2V0IGxhbmd1YWdlIGRldGFpbHMgKi9cbiAgZ2V0TGFuZ3VhZ2U6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4gIC8qKiBzY3JpcHR1cmUgY2FyZCBudW1iZXIgKDAgdG8gMiBmb3IgZXhhbXBsZSkgKi9cbiAgY2FyZE51bTogUHJvcFR5cGVzLm51bWJlci5pc1JlcXVpcmVkLFxuICAvKiogcmVzb3VyY2Ugb2JqZWN0ICovXG4gIHJlc291cmNlOiBQcm9wVHlwZXMuc2hhcGUoe1xuICAgIC8qKiByZXNvdXJjZSBsYW5ndWFnZSB0byB1c2UgKi9cbiAgICBsYW5ndWFnZUlkOiBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsXG4gICAgLyoqIHJlcG8gb3duZXIgc3VjaCBhcyB1bmZvbGRpbmdXb3JkICovXG4gICAgb3duZXI6IFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCxcbiAgICAvKiogcmVzb3VyY2VJZCB0byB1c2UgKGUuZy4gdWdudCkgKi9cbiAgICByZXNvdXJjZUlkOiBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsXG4gICAgLyoqIHJlcG8gb3duZXIgZm9yIG9yaWdpbmFsIGxhbmd1YWdlcyBzdWNoIGFzIHVuZm9sZGluZ1dvcmQgKi9cbiAgICBvcmlnaW5hbExhbmd1YWdlT3duZXI6IFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCxcbiAgfSksXG4gIHJlZmVyZW5jZTogUHJvcFR5cGVzLnNoYXBlKHtcbiAgICAvKiogcHJvamVjdElkIChib29rSUQpIHRvIHVzZSAqL1xuICAgIHByb2plY3RJZDogUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLFxuICAgIC8qKiBjdXJyZW50IGNoYXB0ZXIgbnVtYmVyICovXG4gICAgY2hhcHRlcjogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLm51bWJlciwgUHJvcFR5cGVzLnN0cmluZ10pLmlzUmVxdWlyZWQsXG4gICAgLyoqIGN1cnJlbnQgdmVyc2UgbnVtYmVyICovXG4gICAgdmVyc2U6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5udW1iZXIsIFByb3BUeXBlcy5zdHJpbmddKS5pc1JlcXVpcmVkLFxuICB9KSxcbiAgLyoqIHNlcnZlciAoZS5nLiAnaHR0cHM6Ly9naXQuZG9vcjQzLm9yZycpICovXG4gIHNlcnZlcjogUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLFxuICAvKiogcmVwbyBicmFuY2ggb3IgdGFnIHN1Y2ggYXMgbWFzdGVyICovXG4gIGFwcFJlZjogUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLFxuICAvKiogaWYgdHJ1ZSB0aGVuIHdvcmQgZGF0YSBob3ZlciBpcyBzaG93biAqL1xuICBkaXNhYmxlV29yZFBvcG92ZXI6IFByb3BUeXBlcy5ib29sLFxuICAvKiogQ1NTIGNsYXNzZXMgKi9cbiAgY2xhc3NlczogUHJvcFR5cGVzLm9iamVjdCxcbiAgLyoqIHJlc291cmNlTGluayAqL1xuICByZXNvdXJjZUxpbms6IFByb3BUeXBlcy5hbnksXG4gIC8qKiB1c2UgbWV0aG9kIGZvciB1c2luZyBsb2NhbCBzdG9yYWdlIHNwZWNpZmljIGZvciB1c2VyICovXG4gIHVzZVVzZXJMb2NhbFN0b3JhZ2U6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4gIC8qKiBvcHRpb25hbCBjYWxsYmFjayBpZiBlcnJvciBsb2FkaW5nIHJlc291cmNlLCBwYXJhbWV0ZXIgcmV0dXJuZWQgYXJlOlxuICAgKiAgICAoe3N0cmluZ30gZXJyb3JNZXNzYWdlLCB7Ym9vbGVhbn0gaXNBY2Nlc3NFcnJvciwge29iamVjdH0gcmVzb3VyY2VTdGF0dXMpXG4gICAqICAgICAgLSBpc0FjY2Vzc0Vycm9yIC0gaXMgdHJ1ZSBpZiB0aGlzIHdhcyBhbiBlcnJvciB0cnlpbmcgdG8gYWNjZXNzIGZpbGVcbiAgICogICAgICAtIHJlc291cmNlU3RhdHVzIC0gaXMgb2JqZWN0IGNvbnRhaW5pbmcgZGV0YWlscyBhYm91dCBwcm9ibGVtcyBmZXRjaGluZyByZXNvdXJjZSAqL1xuICBvblJlc291cmNlRXJyb3I6IFByb3BUeXBlcy5mdW5jLFxuICAvKiogb3B0aW9uYWwgaHR0cCB0aW1lb3V0IGluIG1pbGxpc2Vjb25kcyBmb3IgZmV0Y2hpbmcgcmVzb3VyY2VzLCBkZWZhdWx0IGlzIDAgKHZlcnkgbG9uZyB3YWl0KSAqL1xuICBodHRwQ29uZmlnOiBQcm9wVHlwZXMub2JqZWN0LFxuICAvKiogb3B0aW9uYWwgdXJsIGZvciBncmVlayByZXBvICovXG4gIGdyZWVrUmVwb1VybDogUHJvcFR5cGVzLnN0cmluZyxcbiAgLyoqIG9wdGlvbmFsIHVybCBmb3IgaGVicmV3IHJlcG8gKi9cbiAgaGVicmV3UmVwb1VybDogUHJvcFR5cGVzLnN0cmluZyxcbiAgLyoqIGZ1bmN0aW9uIHRvIGdldCBsYXRlc3QgbGV4aWNvbiBkYXRhICovXG4gIGdldExleGljb25EYXRhOiBQcm9wVHlwZXMuZnVuYyxcbiAgLyoqIGZ1bmN0aW9uIHRvIHByZS1sb2FkIGxleGljb24gZGF0YSBmb3IgdmVyc2UgKi9cbiAgZmV0Y2hHbG9zc2VzRm9yVmVyc2U6IFByb3BUeXBlcy5mdW5jLFxuICAvKiogb3B0aW9uYWwgZnVuY3Rpb24gZm9yIGxvY2FsaXphdGlvbiAqL1xuICB0cmFuc2xhdGU6IFByb3BUeXBlcy5mdW5jLFxuICAvKiogZnVuY3Rpb24gdG8gbWluaW1pemUgdGhlIGNhcmQgKG9wdGlvbmFsKSAqL1xuICBvbk1pbmltaXplOiBQcm9wVHlwZXMuZnVuYyxcbiAgLyoqIHVzZXItbmFtZSAqL1xuICBsb2dnZWRJblVzZXI6IFByb3BUeXBlcy5zdHJpbmcsXG4gIC8qKiBhdXRoZW50aWNhdGlvbiBpbmZvICovXG4gIGF1dGhlbnRpY2F0aW9uOiBQcm9wVHlwZXMub2JqZWN0LFxuICAvKiogZnVuY3Rpb24gdG8gc2V0IHN0YXRlIGluIGFwcCB0aGF0IHRoZXJlIGFyZSB1bnNhdmVkIGNoYW5nZXMgKi9cbiAgc2V0U2F2ZWRDaGFuZ2VzOiBQcm9wVHlwZXMuZnVuYyxcbiAgLyoqIGluZGV4IGZvciBjdXJyZW50IGJvb2sgKGUuZy4gJzAxJyBmb3IgJ2dlbicpKi9cbiAgYm9va0luZGV4OiBQcm9wVHlwZXMuc3RyaW5nLFxuICAvKiogY2FsbGJhY2sgdG8gaW5kaWNhdGUgdGhhdCB3ZSBhcmUgdXNpbmcgYSB2ZXJzZSByYW5nZSBoZXJlICovXG4gIGFkZFZlcnNlUmFuZ2U6IFByb3BUeXBlcy5mdW5jLFxuICAvKiogY2FsbGJhY2sgdG8gdXBkYXRlIHdvcmQgYWxpZ25lciBzdGF0ZSAqL1xuICBzZXRXb3JkQWxpZ25lclN0YXR1czogUHJvcFR5cGVzLmZ1bmMsXG59XG4iXX0=
661
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jb21wb25lbnRzL1NjcmlwdHVyZUNhcmQvU2NyaXB0dXJlQ2FyZC50c3giXSwibmFtZXMiOlsiUmVhY3QiLCJQcm9wVHlwZXMiLCJSeExpbmsyIiwiUnhMaW5rQnJlYWsyIiwiQ2FyZCIsInVzZUNhcmRTdGF0ZSIsInVzZVVzZXJCcmFuY2giLCJFUlJPUl9TVEFURSIsIk1BTklGRVNUX05PVF9MT0FERURfRVJST1IiLCJXb3JkQWxpZ25lciIsIkNoZWNrT3V0bGluZWRJY29uIiwiQ2FuY2VsT3V0bGluZWRJY29uIiwiSWNvbkJ1dHRvbiIsIlNjcmlwdHVyZVBhbmUiLCJTY3JpcHR1cmVTZWxlY3RvciIsInVzZVNjcmlwdHVyZVNldHRpbmdzIiwiZ2V0VmVyc2VEYXRhRnJvbVNjcmlwQ29uZmlnIiwiZ2V0UmVzb3VyY2VMaW5rIiwiZ2V0UmVzb3VyY2VNZXNzYWdlIiwiZ2V0U2NyaXB0dXJlVmVyc2lvblNldHRpbmdzIiwiaXNPcmlnaW5hbEJpYmxlIiwiVGl0bGUiLCJOVF9PUklHX0xBTkciLCJPUklHSU5BTF9TT1VSQ0UiLCJPVF9PUklHX0xBTkciLCJ1c2VTY3JpcHR1cmVBbGlnbm1lbnRFZGl0IiwiS0VZX0ZPTlRfU0laRV9CQVNFIiwibGFiZWwiLCJzdHlsZSIsIm1hcmdpblRvcCIsIndpZHRoIiwiaW5pdGlhbGl6ZVZlcnNlTnVtYmVyIiwidmVyc2UiLCJpbml0aWFsVmVyc2UiLCJpbmNsdWRlcyIsInBhcnNlSW50IiwiY2hhckF0IiwiZ2V0VmVyc2VPYmplY3RzRm9yVmVyc2UiLCJzY3JpcHR1cmVDb25maWciLCJjdXJyZW50VmVyc2VOdW0iLCJjdXJyZW50VmVyc2VEYXRhIiwidmVyc2VEYXRhIiwidmVyc2VPYmplY3RzIiwiU2NyaXB0dXJlQ2FyZCIsImlkIiwiaXNOVCIsInRpdGxlIiwic2VydmVyIiwiYXBwUmVmIiwiY2FyZE51bSIsImNsYXNzZXMiLCJyZXNvdXJjZSIsIm93bmVyIiwibGFuZ3VhZ2VJZCIsInJlc291cmNlSWQiLCJvcmlnaW5hbExhbmd1YWdlT3duZXIiLCJnZXRMYW5ndWFnZSIsInJlZmVyZW5jZSIsImNoYXB0ZXIiLCJib29rSWQiLCJwcm9qZWN0SWQiLCJyZXNvdXJjZUxpbmsiLCJ1c2VVc2VyTG9jYWxTdG9yYWdlIiwiZGlzYWJsZVdvcmRQb3BvdmVyIiwib25SZXNvdXJjZUVycm9yIiwiaHR0cENvbmZpZyIsImdyZWVrUmVwb1VybCIsImhlYnJld1JlcG9VcmwiLCJnZXRMZXhpY29uRGF0YSIsImZldGNoR2xvc3Nlc0ZvclZlcnNlIiwidHJhbnNsYXRlIiwib25NaW5pbWl6ZSIsImxvZ2dlZEluVXNlciIsImF1dGhlbnRpY2F0aW9uIiwic2V0U2F2ZWRDaGFuZ2VzIiwiYm9va0luZGV4IiwiYWRkVmVyc2VSYW5nZSIsInVzZVN0YXRlIiwicmVmIiwidXJsRXJyb3IiLCJ1c2luZ1VzZXJCcmFuY2giLCJzdGF0ZSIsInNldFN0YXRlXyIsImZvbnRTaXplIiwic2V0Rm9udFNpemUiLCJpc05UXyIsInNldFN0YXRlIiwibmV3U3RhdGUiLCJwcmV2U3RhdGUiLCJjYWNoZSIsIm1heEFnZSIsInNldFVybEVycm9yIiwiZXJyb3IiLCJ3aG9sZUJvb2siLCJpc05ld1Rlc3RhbWVudCIsInNldFNjcmlwdHVyZSIsInNjcmlwdHVyZVNldHRpbmdzIiwic2NyaXB0dXJlVmVyc2lvbkhpc3QiLCJjdXJyZW50VmVyc2VPYmplY3RzIiwiY2FyZFJlc291cmNlSWQiLCJyZWZfIiwiY2FuVXNlRWRpdEJyYW5jaCIsInN1YnN0cmluZyIsImxlbmd0aCIsImNhcmRJZCIsIndvcmtpbmdSZXNvdXJjZUJyYW5jaCIsInVzaW5nVXNlckJyYW5jaF8iLCJzdGFydEVkaXRCcmFuY2giLCJhY3Rpb25zIiwic3RhcnRFZGl0Iiwid29ya2luZ1JlZiIsInJlZmVyZW5jZV8iLCJzY3JpcHR1cmVUaXRsZSIsInVzZUVmZmVjdCIsIndvcmtpbmdSZWZfIiwicmVzb3VyY2VTdGF0dXMiLCJtZXNzYWdlIiwiaXNBY2Nlc3NFcnJvciIsInZlcnNpb24iLCJ1cGRhdGVUaXRsZSIsImdldFNjcmlwdHVyZVNlbGVjdG9yIiwic2NyaXB0dXJlU2VsZWN0aW9uQ29uZmlnIiwib25NZW51Q2xvc2UiLCJsYW5ndWFnZUlkXyIsImxhbmd1YWdlIiwiZGlyZWN0aW9uIiwiaXNIZWJyZXciLCJmb250RmFjdG9yIiwic2NhbGVkRm9udFNpemUiLCJtYXRjaGVkVmVyc2UiLCJpdGVtcyIsImhlYWRlcnMiLCJmaWx0ZXJzIiwiaXRlbUluZGV4IiwibWFya2Rvd25WaWV3Iiwic2V0RmlsdGVycyIsInNldEl0ZW1JbmRleCIsInNldE1hcmtkb3duVmlldyIsInJlZlN0eWxlIiwidXNlTWVtbyIsImZvbnRGYW1pbHkiLCJNYXRoIiwicm91bmQiLCJjb250ZW50U3R5bGUiLCJzY3JpcHR1cmVMYWJlbCIsImRpc2FibGVXb3JkUG9wb3Zlcl8iLCJ1c2luZ09yaWdpbmFsQmlibGUiLCJ1bmRlZmluZWQiLCJmZXRjaEdsb3NzRGF0YUZvclZlcnNlIiwiZW5hYmxlRWRpdCIsImVuYWJsZUFsaWdubWVudCIsIm9yaWdpbmFsUmVwb1VybCIsImluaXRpYWxWZXJzZU9iamVjdHMiLCJjYW5jZWxBbGlnbm1lbnQiLCJlZGl0ZWRWZXJzZU9iamVjdHMiLCJoYW5kbGVBbGlnbm1lbnRDbGljayIsIm9uQWxpZ25tZW50c0NoYW5nZSIsInNhdmVBbGlnbm1lbnQiLCJzZXRFZGl0aW5nIiwic2V0VmVyc2VDaGFuZ2VkIiwic2F2ZUNoYW5nZXNUb0Nsb3VkIiwiYWxpZ25lZCIsImFsaWduZXJEYXRhIiwiZWRpdGluZyIsInVuc2F2ZWRDaGFuZ2VzIiwidW5zYXZlZENoYW5nZXNfIiwic2hvd1BvcG92ZXIiLCJQb3BvdmVyVGl0bGUiLCJ3b3JkRGV0YWlscyIsInBvc2l0aW9uQ29vcmQiLCJyYXdEYXRhIiwiY29uc29sZSIsImxvZyIsIndpbmRvdyIsInByb21wdCIsIkpTT04iLCJzdHJpbmdpZnkiLCJ0b2tlbiIsImNoZWNraW5nU3RhdGUiLCJ0aXRsZVRleHQiLCJvblJlbmRlclRvb2xiYXIiLCJtYXJnaW4iLCJjdXJzb3IiLCJfdmVyc2UiLCJyZW5kZXJlZFNjcmlwdHVyZVBhbmVzIiwidmVyc2VzRm9yUmVmIiwibWFwIiwiaW5kZXgiLCJtYXBwZWRWZXJzZU9iamVjdHMiLCJmbGV4RGlyZWN0aW9uIiwibWF4SGVpZ2h0Iiwib3ZlcmZsb3dZIiwiYWxpZ25tZW50cyIsIndvcmRCYW5rIiwicmVzdWx0cyIsInByb3BUeXBlcyIsInN0cmluZyIsImZ1bmMiLCJpc1JlcXVpcmVkIiwibnVtYmVyIiwic2hhcGUiLCJvbmVPZlR5cGUiLCJib29sIiwib2JqZWN0IiwiYW55Il0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsT0FBTyxLQUFLQSxLQUFaLE1BQXVCLE9BQXZCO0FBQ0EsT0FBTyxLQUFLQyxTQUFaLE1BQTJCLFlBQTNCO0FBQ0EsU0FBU0MsT0FBVCxFQUFrQkMsWUFBbEIsUUFBc0MsZ0JBQXRDO0FBRUEsU0FDRUMsSUFERixFQUVFQyxZQUZGLEVBR0VDLGFBSEYsRUFJRUMsV0FKRixFQUtFQyx5QkFMRixRQU1PLHVCQU5QO0FBT0EsU0FBU0MsV0FBVCxRQUE0QixrQkFBNUI7QUFDQSxPQUFPQyxpQkFBUCxNQUE4QixtQ0FBOUI7QUFDQSxPQUFPQyxrQkFBUCxNQUErQixvQ0FBL0I7QUFDQSxTQUFTQyxVQUFULFFBQTJCLGVBQTNCO0FBQ0EsU0FBU0MsYUFBVCxFQUF3QkMsaUJBQXhCLFFBQWlELElBQWpEO0FBQ0EsU0FBU0Msb0JBQVQsUUFBcUMsa0NBQXJDO0FBQ0EsU0FDRUMsMkJBREYsRUFFRUMsZUFGRixFQUdFQyxrQkFIRixFQUlFQywyQkFKRixFQUtFQyxlQUxGLFFBTU8sK0JBTlA7QUFPQSxTQUFTQyxLQUFULFFBQXNCLHlCQUF0QjtBQUNBLFNBQ0VDLFlBREYsRUFFRUMsZUFGRixFQUdFQyxZQUhGLFFBSU8sYUFKUDtBQUtBLFNBQVNDLHlCQUFULFFBQTBDLHVDQUExQztBQUVBLElBQU1DLGtCQUFrQixH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QjtBQUNBN0gsRUFBQUEsWUFBWSxFQUFFdkUsU0FBUyxDQUFDbU0sTUE5REE7O0FBK0R4QjtBQUNBM0gsRUFBQUEsY0FBYyxFQUFFeEUsU0FBUyxDQUFDME0sTUFoRUY7O0FBaUV4QjtBQUNBakksRUFBQUEsZUFBZSxFQUFFekUsU0FBUyxDQUFDb00sSUFsRUg7O0FBbUV4QjtBQUNBMUgsRUFBQUEsU0FBUyxFQUFFMUUsU0FBUyxDQUFDbU0sTUFwRUc7O0FBcUV4QjtBQUNBeEgsRUFBQUEsYUFBYSxFQUFFM0UsU0FBUyxDQUFDb007QUF0RUQsQ0FBMUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCdcbmltcG9ydCAqIGFzIFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJ1xuaW1wb3J0IHsgUnhMaW5rMiwgUnhMaW5rQnJlYWsyIH0gZnJvbSAncmVhY3QtaWNvbnMvcngnXG5cbmltcG9ydCB7XG4gIENhcmQsXG4gIHVzZUNhcmRTdGF0ZSxcbiAgdXNlVXNlckJyYW5jaCxcbiAgRVJST1JfU1RBVEUsXG4gIE1BTklGRVNUX05PVF9MT0FERURfRVJST1IsXG59IGZyb20gJ3RyYW5zbGF0aW9uLWhlbHBzLXJjbCdcbmltcG9ydCB7IFdvcmRBbGlnbmVyIH0gZnJvbSAnd29yZC1hbGlnbmVyLXJjbCdcbmltcG9ydCBDaGVja091dGxpbmVkSWNvbiBmcm9tICdAbXVpL2ljb25zLW1hdGVyaWFsL0NoZWNrT3V0bGluZWQnXG5pbXBvcnQgQ2FuY2VsT3V0bGluZWRJY29uIGZyb20gJ0BtdWkvaWNvbnMtbWF0ZXJpYWwvQ2FuY2VsT3V0bGluZWQnXG5pbXBvcnQgeyBJY29uQnV0dG9uIH0gZnJvbSAnQG11aS9tYXRlcmlhbCdcbmltcG9ydCB7IFNjcmlwdHVyZVBhbmUsIFNjcmlwdHVyZVNlbGVjdG9yIH0gZnJvbSAnLi4nXG5pbXBvcnQgeyB1c2VTY3JpcHR1cmVTZXR0aW5ncyB9IGZyb20gJy4uLy4uL2hvb2tzL3VzZVNjcmlwdHVyZVNldHRpbmdzJ1xuaW1wb3J0IHtcbiAgZ2V0VmVyc2VEYXRhRnJvbVNjcmlwQ29uZmlnLFxuICBnZXRSZXNvdXJjZUxpbmssXG4gIGdldFJlc291cmNlTWVzc2FnZSxcbiAgZ2V0U2NyaXB0dXJlVmVyc2lvblNldHRpbmdzLFxuICBpc09yaWdpbmFsQmlibGUsXG59IGZyb20gJy4uLy4uL3V0aWxzL1NjcmlwdHVyZVNldHRpbmdzJ1xuaW1wb3J0IHsgVGl0bGUgfSBmcm9tICcuLi9TY3JpcHR1cmVQYW5lL3N0eWxlZCdcbmltcG9ydCB7XG4gIE5UX09SSUdfTEFORyxcbiAgT1JJR0lOQUxfU09VUkNFLFxuICBPVF9PUklHX0xBTkcsXG59IGZyb20gJy4uLy4uL3V0aWxzJ1xuaW1wb3J0IHsgdXNlU2NyaXB0dXJlQWxpZ25tZW50RWRpdCB9IGZyb20gJy4uLy4uL2hvb2tzL3VzZVNjcmlwdHVyZUFsaWdubWVudEVkaXQnXG5cbmNvbnN0IEtFWV9GT05UX1NJWkVfQkFTRSA9ICdzY3JpcHR1cmVQYW5lRm9udFNpemVfJ1xuY29uc3QgbGFiZWwgPSAnVmVyc2lvbidcbmNvbnN0IHN0eWxlID0geyBtYXJnaW5Ub3A6ICcxNnB4Jywgd2lkdGg6ICc1MDBweCcgfVxuXG5mdW5jdGlvbiBpbml0aWFsaXplVmVyc2VOdW1iZXIodmVyc2UpIHtcbiAgbGV0IGluaXRpYWxWZXJzZSA9IHZlcnNlXG4gIGlmICh0eXBlb2YgdmVyc2UgPT09ICdzdHJpbmcnICYmIHZlcnNlLmluY2x1ZGVzKCctJykpIHtcbiAgICBpbml0aWFsVmVyc2UgPSBwYXJzZUludCh2ZXJzZS5jaGFyQXQoMCkpXG4gIH1cbiAgcmV0dXJuIGluaXRpYWxWZXJzZVxufVxuXG5mdW5jdGlvbiBnZXRWZXJzZU9iamVjdHNGb3JWZXJzZShzY3JpcHR1cmVDb25maWcsIGN1cnJlbnRWZXJzZU51bSkge1xuICBjb25zdCBjdXJyZW50VmVyc2VEYXRhID0gZ2V0VmVyc2VEYXRhRnJvbVNjcmlwQ29uZmlnKHNjcmlwdHVyZUNvbmZpZywgY3VycmVudFZlcnNlTnVtKSB8fCBudWxsXG4gIHJldHVybiBjdXJyZW50VmVyc2VEYXRhPy52ZXJzZURhdGE/LnZlcnNlT2JqZWN0cyB8fCBudWxsXG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIFNjcmlwdHVyZUNhcmQoe1xuICBpZCxcbiAgaXNOVCxcbiAgdGl0bGUsXG4gIHNlcnZlcixcbiAgYXBwUmVmLFxuICBjYXJkTnVtLFxuICBjbGFzc2VzLFxuICByZXNvdXJjZToge1xuICAgIG93bmVyLFxuICAgIGxhbmd1YWdlSWQsXG4gICAgcmVzb3VyY2VJZCxcbiAgICBvcmlnaW5hbExhbmd1YWdlT3duZXIsXG4gIH0sXG4gIGdldExhbmd1YWdlLFxuICByZWZlcmVuY2U6IHtcbiAgICB2ZXJzZSxcbiAgICBjaGFwdGVyLFxuICAgIHByb2plY3RJZDogYm9va0lkLFxuICB9LFxuICByZXNvdXJjZUxpbmssXG4gIHVzZVVzZXJMb2NhbFN0b3JhZ2UsXG4gIGRpc2FibGVXb3JkUG9wb3ZlcixcbiAgb25SZXNvdXJjZUVycm9yLFxuICBodHRwQ29uZmlnLFxuICBncmVla1JlcG9VcmwsXG4gIGhlYnJld1JlcG9VcmwsXG4gIGdldExleGljb25EYXRhLFxuICBmZXRjaEdsb3NzZXNGb3JWZXJzZSxcbiAgdHJhbnNsYXRlLFxuICBvbk1pbmltaXplLFxuICBsb2dnZWRJblVzZXIsXG4gIGF1dGhlbnRpY2F0aW9uLFxuICBzZXRTYXZlZENoYW5nZXMsXG4gIGJvb2tJbmRleCxcbiAgYWRkVmVyc2VSYW5nZSxcbn0pIHtcbiAgY29uc3QgW3N0YXRlLCBzZXRTdGF0ZV9dID0gUmVhY3QudXNlU3RhdGUoe1xuICAgIGN1cnJlbnRWZXJzZU51bTogaW5pdGlhbGl6ZVZlcnNlTnVtYmVyKHZlcnNlKSxcbiAgICByZWY6IGFwcFJlZixcbiAgICB1cmxFcnJvcjogbnVsbCxcbiAgICB1c2luZ1VzZXJCcmFuY2g6IGZhbHNlLFxuICB9KVxuICBjb25zdCB7XG4gICAgY3VycmVudFZlcnNlTnVtLFxuICAgIHJlZixcbiAgICB1cmxFcnJvcixcbiAgICB1c2luZ1VzZXJCcmFuY2gsXG4gIH0gPSBzdGF0ZVxuXG4gIGNvbnN0IFtmb250U2l6ZSwgc2V0Rm9udFNpemVdID0gdXNlVXNlckxvY2FsU3RvcmFnZShLRVlfRk9OVF9TSVpFX0JBU0UgKyBjYXJkTnVtLCAxMDApXG4gIGNvbnN0IGlzTlRfID0gaXNOVChib29rSWQpXG5cbiAgZnVuY3Rpb24gc2V0U3RhdGUobmV3U3RhdGUpIHtcbiAgICBzZXRTdGF0ZV8ocHJldlN0YXRlID0+ICh7IC4uLnByZXZTdGF0ZSwgLi4ubmV3U3RhdGUgfSkpXG4gIH1cblxuICBpZiAodXNpbmdVc2VyQnJhbmNoKSB7XG4gICAgaHR0cENvbmZpZyA9IHsgLi4uaHR0cENvbmZpZywgY2FjaGU6IHsgbWF4QWdlOiAwIH0gfSAvLyBkaXNhYmxlIGh0dHAgY2FjaGluZ1xuICB9XG5cbiAgY29uc3Qge1xuICAgIGlzTmV3VGVzdGFtZW50LFxuICAgIHNjcmlwdHVyZUNvbmZpZyxcbiAgICBzZXRTY3JpcHR1cmUsXG4gICAgc2NyaXB0dXJlU2V0dGluZ3MsXG4gICAgc2NyaXB0dXJlVmVyc2lvbkhpc3QsXG4gIH0gPSB1c2VTY3JpcHR1cmVTZXR0aW5ncyh7XG4gICAgaXNOVCxcbiAgICB0aXRsZSxcbiAgICB2ZXJzZSxcbiAgICBvd25lcixcbiAgICBib29rSWQsXG4gICAgYXBwUmVmOiByZWYsXG4gICAgc2VydmVyLFxuICAgIGNhcmROdW0sXG4gICAgY2hhcHRlcixcbiAgICBsYW5ndWFnZUlkLFxuICAgIHJlc291cmNlSWQsXG4gICAgcmVzb3VyY2VMaW5rLFxuICAgIHVzZVVzZXJMb2NhbFN0b3JhZ2UsXG4gICAgZGlzYWJsZVdvcmRQb3BvdmVyLFxuICAgIG9yaWdpbmFsTGFuZ3VhZ2VPd25lcixcbiAgICBzZXRVcmxFcnJvcjogKGVycm9yKSA9PiBzZXRTdGF0ZSh7IHVybEVycm9yOiBlcnJvciB9KSxcbiAgICBodHRwQ29uZmlnLFxuICAgIGdyZWVrUmVwb1VybCxcbiAgICBoZWJyZXdSZXBvVXJsLFxuICAgIHdob2xlQm9vazogdHJ1ZSxcbiAgfSlcblxuICBjb25zdCBjdXJyZW50VmVyc2VPYmplY3RzID0gZ2V0VmVyc2VPYmplY3RzRm9yVmVyc2Uoc2NyaXB0dXJlQ29uZmlnLCBjdXJyZW50VmVyc2VOdW0pXG5cbiAgLy8gQHRzLWlnbm9yZVxuICBjb25zdCBjYXJkUmVzb3VyY2VJZCA9IHNjcmlwdHVyZUNvbmZpZz8ucmVzb3VyY2U/LnByb2plY3RJZCB8fCByZXNvdXJjZUlkXG5cbiAgLy8gQHRzLWlnbm9yZVxuICBsZXQgcmVmXyA9IHNjcmlwdHVyZUNvbmZpZz8ucmVzb3VyY2U/LnJlZiB8fCBhcHBSZWZcbiAgY29uc3QgY2FuVXNlRWRpdEJyYW5jaCA9IGxvZ2dlZEluVXNlciAmJiBhdXRoZW50aWNhdGlvbiAmJlxuICAgIChyZXNvdXJjZUlkICE9PSBPUklHSU5BTF9TT1VSQ0UpICYmXG4gICAgKChyZWZfID09PSAnbWFzdGVyJykgfHwgKHJlZl8uc3Vic3RyaW5nKDAsIGxvZ2dlZEluVXNlci5sZW5ndGgpID09PSBsb2dnZWRJblVzZXIpICkgLy8gbm90IHRhZ1xuXG4gIGNvbnN0IHtcbiAgICBzdGF0ZTogeyB3b3JraW5nUmVzb3VyY2VCcmFuY2gsIHVzaW5nVXNlckJyYW5jaDogdXNpbmdVc2VyQnJhbmNoXyB9LFxuICAgIGFjdGlvbnM6IHsgc3RhcnRFZGl0OiBzdGFydEVkaXRCcmFuY2ggfSxcbiAgfSA9IHVzZVVzZXJCcmFuY2goe1xuICAgIG93bmVyLFxuICAgIHNlcnZlcixcbiAgICBhcHBSZWYsXG4gICAgbGFuZ3VhZ2VJZCxcbiAgICBjYXJkSWQ6IGlkLFxuICAgIGxvZ2dlZEluVXNlcjogY2FuVXNlRWRpdEJyYW5jaCA/IGxvZ2dlZEluVXNlciA6IG51bGwsXG4gICAgYXV0aGVudGljYXRpb246IGNhblVzZUVkaXRCcmFuY2ggPyBhdXRoZW50aWNhdGlvbiA6IG51bGwsXG4gICAgY2FyZFJlc291cmNlSWQsXG4gICAgb25SZXNvdXJjZUVycm9yLFxuICAgIHVzZVVzZXJMb2NhbFN0b3JhZ2UsXG4gIH0pXG5cbiAgY29uc3Qgd29ya2luZ1JlZiA9IGNhblVzZUVkaXRCcmFuY2ggPyB3b3JraW5nUmVzb3VyY2VCcmFuY2ggOiBhcHBSZWZcbiAgY29uc3QgcmVmZXJlbmNlXyA9IHsgYm9va0lkLCBjaGFwdGVyLCB2ZXJzZSB9XG4gIGxldCBzY3JpcHR1cmVUaXRsZVxuXG4gIFJlYWN0LnVzZUVmZmVjdCgoKSA9PiB7IC8vIHNlbGVjdCBjb3JyZWN0IHdvcmtpbmcgcmVmIC0gY291bGQgYmUgbWFzdGVyLCB1c2VyIGJyYW5jaCwgb3IgcmVsZWFzZVxuICAgIGlmICh1c2luZ1VzZXJCcmFuY2hfICE9PSB1c2luZ1VzZXJCcmFuY2gpIHtcbiAgICAgIHNldFN0YXRlKHsgdXNpbmdVc2VyQnJhbmNoOiB1c2luZ1VzZXJCcmFuY2hfIH0pXG4gICAgfVxuICB9LCBbdXNpbmdVc2VyQnJhbmNoXywgdXNpbmdVc2VyQnJhbmNoXSlcblxuICBSZWFjdC51c2VFZmZlY3QoKCkgPT4geyAvLyBzZWxlY3QgY29ycmVjdCB3b3JraW5nIHJlZiAtIGNvdWxkIGJlIG1hc3RlciwgdXNlciBicmFuY2gsIG9yIHJlbGVhc2VcbiAgICBsZXQgd29ya2luZ1JlZl8gPSB3b3JraW5nUmVmIHx8IGFwcFJlZlxuXG4gICAgaWYgKHJlZiAhPT0gd29ya2luZ1JlZl8pIHtcbiAgICAgIHNldFN0YXRlKHsgcmVmOiB3b3JraW5nUmVmXyB9KVxuICAgIH1cbiAgfSwgW3dvcmtpbmdSZWYsIHJlZiwgYXBwUmVmXSlcblxuICBSZWFjdC51c2VFZmZlY3QoKCkgPT4geyAvLyB1cGRhdGUgZGlzcGxheSBzdGF0dXMgaWYgZXJyb3JcbiAgICBjb25zdCBlcnJvciA9IHNjcmlwdHVyZUNvbmZpZz8ucmVzb3VyY2VTdGF0dXM/LltFUlJPUl9TVEFURV1cblxuICAgIGlmIChlcnJvcikgeyAvLyBpZiBlcnJvciB3YXMgZm91bmQgZG8gY2FsbGJhY2tcbiAgICAgIGNvbnN0IHJlc291cmNlU3RhdHVzID0gc2NyaXB0dXJlQ29uZmlnPy5yZXNvdXJjZVN0YXR1c1xuICAgICAgY29uc3QgcmVzb3VyY2VMaW5rID0gZ2V0UmVzb3VyY2VMaW5rKHNjcmlwdHVyZUNvbmZpZylcbiAgICAgIGNvbnN0IG1lc3NhZ2UgPSBnZXRSZXNvdXJjZU1lc3NhZ2UocmVzb3VyY2VTdGF0dXMsIHNlcnZlciwgcmVzb3VyY2VMaW5rLCBpc05UXylcbiAgICAgIGNvbnN0IGlzQWNjZXNzRXJyb3IgPSByZXNvdXJjZVN0YXR1c1tNQU5JRkVTVF9OT1RfTE9BREVEX0VSUk9SXVxuICAgICAgb25SZXNvdXJjZUVycm9yICYmIG9uUmVzb3VyY2VFcnJvcihtZXNzYWdlLCBpc0FjY2Vzc0Vycm9yLCByZXNvdXJjZVN0YXR1cylcbiAgICB9XG4gIH0sIFtzY3JpcHR1cmVDb25maWc/LnJlc291cmNlU3RhdHVzPy5bRVJST1JfU1RBVEVdLCBvblJlc291cmNlRXJyb3JdKVxuXG4gIGlmIChzY3JpcHR1cmVDb25maWcudGl0bGUgJiYgc2NyaXB0dXJlQ29uZmlnLnZlcnNpb24pIHtcbiAgICBzY3JpcHR1cmVUaXRsZSA9IGAke3NjcmlwdHVyZUNvbmZpZy50aXRsZX0gdiR7c2NyaXB0dXJlQ29uZmlnLnZlcnNpb259YFxuICAgIHNjcmlwdHVyZVZlcnNpb25IaXN0LnVwZGF0ZVRpdGxlKHNjcmlwdHVyZUNvbmZpZy5yZXNvdXJjZUxpbmssIHNjcmlwdHVyZVRpdGxlKVxuICB9IGVsc2Uge1xuICAgIHNjcmlwdHVyZVRpdGxlID0gYFRpdGxlIG1pc3NpbmcgZnJvbSBwcm9qZWN0IG1hbmlmZXN0YFxuICB9XG5cbiAgLyoqIER5bmFtaWNhbGx5IGNyZWF0ZXMgdGhlIHNjcmlwdHVyZSBzZWxlY3Rpb24gZHJvcGRvd24gdG8gYmUgaW5zZXJ0ZWQgaW50byBjYXJkIHNldHRpbmdzICovXG4gIGZ1bmN0aW9uIGdldFNjcmlwdHVyZVNlbGVjdG9yKCkge1xuICAgIGNvbnN0IHNjcmlwdHVyZVNlbGVjdGlvbkNvbmZpZyA9IGdldFNjcmlwdHVyZVZlcnNpb25TZXR0aW5ncyh7XG4gICAgICBsYWJlbCxcbiAgICAgIHJlc291cmNlTGluazogc2NyaXB0dXJlQ29uZmlnLnJlc291cmNlTGluayxcbiAgICAgIHNldFNjcmlwdHVyZSxcbiAgICAgIHNjcmlwdHVyZVZlcnNpb25IaXN0LFxuICAgIH0pXG5cbiAgICByZXR1cm4gPFNjcmlwdHVyZVNlbGVjdG9yIHsuLi5zY3JpcHR1cmVTZWxlY3Rpb25Db25maWd9IHN0eWxlPXtzdHlsZX0gZXJyb3JNZXNzYWdlPXt1cmxFcnJvcn0gLz5cbiAgfVxuXG4gIGZ1bmN0aW9uIG9uTWVudUNsb3NlKCkge1xuICAgIC8vIGNvbnNvbGUubG9nKGBvbk1lbnVDbG9zZSgpYClcbiAgICBzZXRTdGF0ZSh7IHVybEVycm9yOiBudWxsIH0pXG4gIH1cblxuICAvLyBAdHMtaWdub3JlXG4gIGNvbnN0IGxhbmd1YWdlSWRfID0gc2NyaXB0dXJlQ29uZmlnPy5yZXNvdXJjZT8ubGFuZ3VhZ2VJZFxuICBjb25zdCBsYW5ndWFnZSA9IGdldExhbmd1YWdlKHsgbGFuZ3VhZ2VJZDogbGFuZ3VhZ2VJZF8gfSlcbiAgY29uc3QgZGlyZWN0aW9uID0gKGxhbmd1YWdlPy5kaXJlY3Rpb24pIHx8ICdsdHInXG4gIGNvbnN0IHJlZmVyZW5jZSA9IHsgLi4uc2NyaXB0dXJlQ29uZmlnLnJlZmVyZW5jZSB9XG5cbiAgY29uc3QgaXNIZWJyZXcgPSAobGFuZ3VhZ2VJZF8gPT09ICdoYm8nKVxuICBjb25zdCBmb250RmFjdG9yID0gaXNIZWJyZXcgPyAxLjQgOiAxIC8vIHdlIGF1dG9tYXRpY2FsbHkgc2NhbGUgdXAgZm9udCBzaXplIGZvciBIZWJyZXdcbiAgY29uc3Qgc2NhbGVkRm9udFNpemUgPSBmb250U2l6ZSAqIGZvbnRGYWN0b3JcblxuICBpZiAoc2NyaXB0dXJlQ29uZmlnLm1hdGNoZWRWZXJzZSkgeyAvLyBzdXBwb3J0IHZlcnNlIHJhbmdlc1xuICAgIHJlZmVyZW5jZS52ZXJzZSA9IHNjcmlwdHVyZUNvbmZpZy5tYXRjaGVkVmVyc2VcbiAgfVxuXG4gIGNvbnN0IGl0ZW1zID0gbnVsbFxuICBjb25zdCB7XG4gICAgc3RhdGU6IHtcbiAgICAgIGhlYWRlcnMsIGZpbHRlcnMsIGl0ZW1JbmRleCwgbWFya2Rvd25WaWV3LFxuICAgIH0sXG4gICAgYWN0aW9uczoge1xuICAgICAgc2V0RmlsdGVycywgc2V0SXRlbUluZGV4LCBzZXRNYXJrZG93blZpZXcsXG4gICAgfSxcbiAgfSA9IHVzZUNhcmRTdGF0ZSh7IGl0ZW1zIH0pXG5cbiAgY29uc3QgcmVmU3R5bGUgPSBSZWFjdC51c2VNZW1vKCgpID0+ICh7XG4gICAgZm9udEZhbWlseTogJ05vdG8gU2FucycsXG4gICAgZm9udFNpemU6IGAke01hdGgucm91bmQoc2NhbGVkRm9udFNpemUgKiAwLjkpfSVgLFxuICB9KSwgW3NjYWxlZEZvbnRTaXplXSlcblxuICBjb25zdCBjb250ZW50U3R5bGUgPSBSZWFjdC51c2VNZW1vKCgpID0+ICh7XG4gICAgZm9udEZhbWlseTogJ05vdG8gU2FucycsXG4gICAgZm9udFNpemU6IGAke3NjYWxlZEZvbnRTaXplfSVgLFxuICB9KSwgW3NjYWxlZEZvbnRTaXplXSlcblxuICBjb25zdCBzY3JpcHR1cmVMYWJlbCA9IDxUaXRsZT57c2NyaXB0dXJlVGl0bGV9PC9UaXRsZT5cbiAgbGV0IGRpc2FibGVXb3JkUG9wb3Zlcl8gPSBkaXNhYmxlV29yZFBvcG92ZXJcbiAgY29uc3QgdXNpbmdPcmlnaW5hbEJpYmxlID0gaXNPcmlnaW5hbEJpYmxlKHNjcmlwdHVyZUNvbmZpZ1sncmVzb3VyY2UnXT8ucHJvamVjdElkKVxuXG4gIGlmIChkaXNhYmxlV29yZFBvcG92ZXIgPT09IHVuZGVmaW5lZCkgeyAvLyBpZiBub3Qgc3BlY2lmaWVkLCB0aGVuIGRldGVybWluZSBpZiBvcmlnaW5hbCBsYW5ndWFnZSByZXNvdXJjZVxuICAgIGRpc2FibGVXb3JkUG9wb3Zlcl8gPSAhdXNpbmdPcmlnaW5hbEJpYmxlXG4gIH1cblxuICBSZWFjdC51c2VFZmZlY3QoKCkgPT4geyAvLyBwcmUtY2FjaGUgZ2xvc3NlcyBvbiB2ZXJzZSBjaGFuZ2VcbiAgICBjb25zdCBmZXRjaEdsb3NzRGF0YUZvclZlcnNlID0gYXN5bmMgKCkgPT4ge1xuICAgICAgaWYgKCFkaXNhYmxlV29yZFBvcG92ZXIgJiYgY3VycmVudFZlcnNlT2JqZWN0cyAmJiBmZXRjaEdsb3NzZXNGb3JWZXJzZSkge1xuICAgICAgICBhd2FpdCBmZXRjaEdsb3NzZXNGb3JWZXJzZShjdXJyZW50VmVyc2VPYmplY3RzLCBsYW5ndWFnZUlkXylcbiAgICAgIH1cbiAgICB9XG5cbiAgICBmZXRjaEdsb3NzRGF0YUZvclZlcnNlKClcbiAgfSwgWyBjdXJyZW50VmVyc2VPYmplY3RzLCBkaXNhYmxlV29yZFBvcG92ZXIsIGxhbmd1YWdlSWRfLCBmZXRjaEdsb3NzZXNGb3JWZXJzZSBdKVxuXG4gIGNvbnN0IGVuYWJsZUVkaXQgPSAhdXNpbmdPcmlnaW5hbEJpYmxlXG4gIGNvbnN0IGVuYWJsZUFsaWdubWVudCA9ICF1c2luZ09yaWdpbmFsQmlibGVcbiAgY29uc3Qgb3JpZ2luYWxSZXBvVXJsID0gaXNOZXdUZXN0YW1lbnQgPyBncmVla1JlcG9VcmwgOiBoZWJyZXdSZXBvVXJsXG4gIGNvbnN0IHtcbiAgICBhY3Rpb25zOiB7XG4gICAgICBjYW5jZWxBbGlnbm1lbnQsXG4gICAgICBlZGl0ZWRWZXJzZU9iamVjdHMsXG4gICAgICBoYW5kbGVBbGlnbm1lbnRDbGljayxcbiAgICAgIG9uQWxpZ25tZW50c0NoYW5nZSxcbiAgICAgIHNhdmVBbGlnbm1lbnQsXG4gICAgICBzZXRFZGl0aW5nLFxuICAgICAgc2V0VmVyc2VDaGFuZ2VkLFxuICAgICAgc2F2ZUNoYW5nZXNUb0Nsb3VkLFxuICAgIH0sXG4gICAgc3RhdGU6IHtcbiAgICAgIGFsaWduZWQsXG4gICAgICBhbGlnbmVyRGF0YSxcbiAgICAgIGVkaXRpbmcsXG4gICAgICB1bnNhdmVkQ2hhbmdlcyxcbiAgICB9LFxuICB9ID0gdXNlU2NyaXB0dXJlQWxpZ25tZW50RWRpdCh7XG4gICAgYXV0aGVudGljYXRpb246IGNhblVzZUVkaXRCcmFuY2ggPyBhdXRoZW50aWNhdGlvbiA6IG51bGwsXG4gICAgZW5hYmxlRWRpdCxcbiAgICBlbmFibGVBbGlnbm1lbnQsXG4gICAgaHR0cENvbmZpZyxcbiAgICBpbml0aWFsVmVyc2VPYmplY3RzOiBjdXJyZW50VmVyc2VPYmplY3RzLFxuICAgIGlzTmV3VGVzdGFtZW50LFxuICAgIC8vIEB0cy1pZ25vcmVcbiAgICBsb2dnZWRJblVzZXI6IGNhblVzZUVkaXRCcmFuY2ggPyBsb2dnZWRJblVzZXIgOiBudWxsLFxuICAgIG9yaWdpbmFsTGFuZ3VhZ2VPd25lcixcbiAgICBvcmlnaW5hbFJlcG9VcmwsXG4gICAgLy8gQHRzLWlnbm9yZVxuICAgIHNjcmlwdHVyZUNvbmZpZyxcbiAgICBzY3JpcHR1cmVTZXR0aW5ncyxcbiAgICBzdGFydEVkaXRCcmFuY2gsXG4gICAgYm9va0luZGV4LFxuICAgIHdvcmtpbmdSZXNvdXJjZUJyYW5jaDogcmVmLFxuICAgIGN1cnJlbnRWZXJzZU51bSxcbiAgfSlcblxuICBSZWFjdC51c2VFZmZlY3QoKCkgPT4geyAvLyBzZXQgc2F2ZWQgY2hhbmdlcyB3aGVuZXZlciB1c2VyIGVkaXRzIHZlcnNlIHRleHQgb3IgYWxpZ25tZW50cyBvciBpZiBhbGlnbm1lbnRzIGFyZSBvcGVuXG4gICAgY29uc3QgdW5zYXZlZENoYW5nZXNfID0gdW5zYXZlZENoYW5nZXMgfHwgYWxpZ25lckRhdGFcbiAgICBzZXRTYXZlZENoYW5nZXMgJiYgc2V0U2F2ZWRDaGFuZ2VzKHJlc291cmNlSWQsICF1bnNhdmVkQ2hhbmdlc18pXG4gIH0sIFt1bnNhdmVkQ2hhbmdlcywgYWxpZ25lckRhdGFdKVxuXG4gIGZ1bmN0aW9uIHNob3dQb3BvdmVyKFBvcG92ZXJUaXRsZSwgd29yZERldGFpbHMsIHBvc2l0aW9uQ29vcmQsIHJhd0RhdGEpIHtcbiAgICAvLyBUT0RPOiBtYWtlIHNob3cgcG9wb3ZlciBwcmV0dHlcbiAgICBjb25zb2xlLmxvZyhgc2hvd1BvcG92ZXJgLCByYXdEYXRhKVxuICAgIHdpbmRvdy5wcm9tcHQoYFVzZXIgY2xpY2tlZCBvbiAke0pTT04uc3RyaW5naWZ5KHJhd0RhdGEudG9rZW4pfWApXG4gIH1cblxuICBjb25zdCBjaGVja2luZ1N0YXRlID0gYWxpZ25lZCA/ICd2YWxpZCcgOiAnaW52YWxpZCdcbiAgY29uc3QgdGl0bGVUZXh0ID0gY2hlY2tpbmdTdGF0ZSA9PT0gJ3ZhbGlkJyA/ICdBbGlnbm1lbnQgaXMgVmFsaWQnIDogJ0FsaWdubWVudCBpcyBJbnZhbGlkJ1xuICBjb25zdCBvblJlbmRlclRvb2xiYXIgPSAoeyBpdGVtcyB9KSA9PiBbXG4gICAgLi4uaXRlbXMsXG4gICAgPEljb25CdXR0b25cbiAgICAgIGNsYXNzTmFtZT17Y2xhc3Nlcy5tYXJnaW59XG4gICAgICBrZXk9J2NoZWNraW5nLWJ1dHRvbidcbiAgICAgIG9uQ2xpY2s9eygpID0+IGhhbmRsZUFsaWdubWVudENsaWNrKCl9XG4gICAgICB0aXRsZT17dGl0bGVUZXh0fVxuICAgICAgYXJpYS1sYWJlbD17dGl0bGVUZXh0fVxuICAgICAgc3R5bGU9e3sgY3Vyc29yOiAncG9pbnRlcicgfX1cbiAgICA+XG4gICAgICB7Y2hlY2tpbmdTdGF0ZSA9PT0gJ3ZhbGlkJyA/IChcbiAgICAgICAgPFJ4TGluazIgaWQ9J3ZhbGlkX2ljb24nIGNvbG9yPScjQkJCJyAvPlxuICAgICAgKSA6IChcbiAgICAgICAgPFJ4TGlua0JyZWFrMiBpZD0naW52YWxpZF9pY29uJyBjb2xvcj0nIzAwMCcgLz5cbiAgICAgICl9XG4gICAgPC9JY29uQnV0dG9uPixcbiAgXVxuXG4gIFJlYWN0LnVzZUVmZmVjdCgoKSA9PiB7XG4gICAgLy8gY2hlY2sgZm9yIHZlcnNlIHJhbmdlXG4gICAgY29uc3QgX3ZlcnNlID0gc2NyaXB0dXJlQ29uZmlnPy5tYXRjaGVkVmVyc2VcblxuICAgIGlmIChhZGRWZXJzZVJhbmdlICYmICh0eXBlb2YgX3ZlcnNlID09PSAnc3RyaW5nJykpIHtcbiAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgIGlmIChfdmVyc2UuaW5jbHVkZXMoJy0nKSkge1xuICAgICAgICBhZGRWZXJzZVJhbmdlKGAke3NjcmlwdHVyZUNvbmZpZz8ucmVmZXJlbmNlPy5jaGFwdGVyfToke192ZXJzZX1gKVxuICAgICAgfVxuICAgIH1cbiAgfSwgW3NjcmlwdHVyZUNvbmZpZz8ubWF0Y2hlZFZlcnNlXSlcblxuXG4gIGNvbnN0IHJlbmRlcmVkU2NyaXB0dXJlUGFuZXMgPSBzY3JpcHR1cmVDb25maWc/LnZlcnNlc0ZvclJlZj8ubWFwKCh7dmVyc2V9LCBpbmRleCkgPT4ge1xuICAgIGNvbnN0IG1hcHBlZFZlcnNlT2JqZWN0cyA9IGdldFZlcnNlT2JqZWN0c0ZvclZlcnNlKHNjcmlwdHVyZUNvbmZpZywgdmVyc2UpXG5cbiAgICByZXR1cm4gKFxuICAgICAgPFNjcmlwdHVyZVBhbmVcbiAgICAgICAga2V5PXtpbmRleH1cbiAgICAgICAgcmVmU3R5bGU9e3JlZlN0eWxlfVxuICAgICAgICB7Li4uc2NyaXB0dXJlQ29uZmlnfVxuICAgICAgICB2ZXJzZU9iamVjdHM9e21hcHBlZFZlcnNlT2JqZWN0c31cbiAgICAgICAgaXNOVD17aXNOVF99XG4gICAgICAgIHNlcnZlcj17c2VydmVyfVxuICAgICAgICByZWZlcmVuY2U9e3suLi5yZWZlcmVuY2UsIHZlcnNlfX1cbiAgICAgICAgZGlyZWN0aW9uPXtkaXJlY3Rpb259XG4gICAgICAgIGNvbnRlbnRTdHlsZT17Y29udGVudFN0eWxlfVxuICAgICAgICBmb250U2l6ZT17Zm9udFNpemV9XG4gICAgICAgIGRpc2FibGVXb3JkUG9wb3Zlcj17ZGlzYWJsZVdvcmRQb3BvdmVyX31cbiAgICAgICAgZ2V0TGV4aWNvbkRhdGE9e2dldExleGljb25EYXRhfVxuICAgICAgICB0cmFuc2xhdGU9e3RyYW5zbGF0ZX1cbiAgICAgICAgZWRpdGluZz17ZWRpdGluZ31cbiAgICAgICAgc2V0RWRpdGluZz17c2V0RWRpdGluZ31cbiAgICAgICAgc2V0VmVyc2VDaGFuZ2VkPXtzZXRWZXJzZUNoYW5nZWR9XG4gICAgICAvPlxuICAgIClcbiAgfSlcblxuICByZXR1cm4gKFxuICAgIDxDYXJkXG4gICAgICBpZD17YHNjcmlwdHVyZV9jYXJkXyR7Y2FyZE51bX1gfVxuICAgICAgdGl0bGU9e3NjcmlwdHVyZUxhYmVsfVxuICAgICAgc2V0dGluZ3NUaXRsZT17c2NyaXB0dXJlVGl0bGUgKyAnIFNldHRpbmdzJ31cbiAgICAgIGl0ZW1zPXtpdGVtc31cbiAgICAgIGNsYXNzZXM9e2NsYXNzZXN9XG4gICAgICBoZWFkZXJzPXtoZWFkZXJzfVxuICAgICAgZmlsdGVycz17ZmlsdGVyc31cbiAgICAgIGZvbnRTaXplPXtmb250U2l6ZX1cbiAgICAgIGl0ZW1JbmRleD17aXRlbUluZGV4fVxuICAgICAgc2V0RmlsdGVycz17c2V0RmlsdGVyc31cbiAgICAgIHNldEZvbnRTaXplPXtzZXRGb250U2l6ZX1cbiAgICAgIHNldEl0ZW1JbmRleD17c2V0SXRlbUluZGV4fVxuICAgICAgbWFya2Rvd25WaWV3PXttYXJrZG93blZpZXd9XG4gICAgICBzZXRNYXJrZG93blZpZXc9e3NldE1hcmtkb3duVmlld31cbiAgICAgIGdldEN1c3RvbUNvbXBvbmVudD17Z2V0U2NyaXB0dXJlU2VsZWN0b3J9XG4gICAgICBoaWRlTWFya2Rvd25Ub2dnbGVcbiAgICAgIG9uTWVudUNsb3NlPXtvbk1lbnVDbG9zZX1cbiAgICAgIG9uTWluaW1pemU9e29uTWluaW1pemUgPyAoKSA9PiBvbk1pbmltaXplKGlkKSA6IG51bGx9XG4gICAgICBlZGl0YWJsZT17ZW5hYmxlRWRpdCB8fCBlbmFibGVBbGlnbm1lbnR9XG4gICAgICBzYXZlZD17IXVuc2F2ZWRDaGFuZ2VzfVxuICAgICAgb25TYXZlRWRpdD17c2F2ZUNoYW5nZXNUb0Nsb3VkfVxuICAgICAgb25CbHVyPXsoKSA9PiBzZXRFZGl0aW5nKGZhbHNlKX1cbiAgICAgIG9uUmVuZGVyVG9vbGJhcj17b25SZW5kZXJUb29sYmFyfVxuICAgID5cbiAgICAgIHthbGlnbmVyRGF0YSA/XG4gICAgICAgIDxkaXYgc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ2NvbHVtbicgfX0+XG4gICAgICAgICAgPFdvcmRBbGlnbmVyXG4gICAgICAgICAgICBzdHlsZT17eyBtYXhIZWlnaHQ6ICc0NTBweCcsIG92ZXJmbG93WTogJ2F1dG8nIH19XG4gICAgICAgICAgICB2ZXJzZUFsaWdubWVudHM9e2FsaWduZXJEYXRhLmFsaWdubWVudHN9XG4gICAgICAgICAgICB0YXJnZXRXb3Jkcz17YWxpZ25lckRhdGEud29yZEJhbmt9XG4gICAgICAgICAgICB0cmFuc2xhdGU9e3RyYW5zbGF0ZX1cbiAgICAgICAgICAgIGNvbnRleHRJZD17eyByZWZlcmVuY2U6IHJlZmVyZW5jZV8gfX1cbiAgICAgICAgICAgIHRhcmdldExhbmd1YWdlPXtsYW5ndWFnZX1cbiAgICAgICAgICAgIHRhcmdldExhbmd1YWdlRm9udD17Jyd9XG4gICAgICAgICAgICBzb3VyY2VMYW5ndWFnZT17aXNOVF8gPyBOVF9PUklHX0xBTkcgOiBPVF9PUklHX0xBTkd9XG4gICAgICAgICAgICBzaG93UG9wb3Zlcj17c2hvd1BvcG92ZXJ9XG4gICAgICAgICAgICBsZXhpY29ucz17e319XG4gICAgICAgICAgICBsb2FkTGV4aWNvbkVudHJ5PXtnZXRMZXhpY29uRGF0YX1cbiAgICAgICAgICAgIG9uQ2hhbmdlPXsocmVzdWx0cykgPT4gb25BbGlnbm1lbnRzQ2hhbmdlKHJlc3VsdHMpfVxuICAgICAgICAgIC8+XG4gICAgICAgICAgPGJyIC8+XG4gICAgICAgICAgPGRpdiBzdHlsZT17eyB3aWR0aDogJzEwMCUnIH19PlxuICAgICAgICAgICAgPEljb25CdXR0b25cbiAgICAgICAgICAgICAgZGlzYWJsZWQ9e2ZhbHNlfVxuICAgICAgICAgICAgICBjbGFzc05hbWU9e2NsYXNzZXMubWFyZ2lufVxuICAgICAgICAgICAgICBrZXk9J2FsaWdubWVudC1zYXZlJ1xuICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiBzYXZlQWxpZ25tZW50KCl9XG4gICAgICAgICAgICAgIGFyaWEtbGFiZWw9eydBbGlnbm1lbnQgU2F2ZSd9XG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxDaGVja091dGxpbmVkSWNvbiBpZD0nYWxpZ25tZW50LXNhdmUtaWNvbicgaHRtbENvbG9yPScjMDAwJyAvPlxuICAgICAgICAgICAgPC9JY29uQnV0dG9uPlxuICAgICAgICAgICAgPEljb25CdXR0b25cbiAgICAgICAgICAgICAgZGlzYWJsZWQ9e2ZhbHNlfVxuICAgICAgICAgICAgICBjbGFzc05hbWU9e2NsYXNzZXMubWFyZ2lufVxuICAgICAgICAgICAgICBrZXk9J2FsaWdubWVudC1jYW5jZWwnXG4gICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IGNhbmNlbEFsaWdubWVudCgpfVxuICAgICAgICAgICAgICBhcmlhLWxhYmVsPXsnQWxpZ25tZW50IENhbmNlbCd9XG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxDYW5jZWxPdXRsaW5lZEljb24gaWQ9J2FsaWdubWVudC1jYW5jZWwtaWNvbicgaHRtbENvbG9yPScjMDAwJyAvPlxuICAgICAgICAgICAgPC9JY29uQnV0dG9uPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgOlxuICAgICAgICA8ZGl2IGlkPVwic2NyaXB0dXJlLXBhbmUtbGlzdFwiPlxuICAgICAgICAgIHtyZW5kZXJlZFNjcmlwdHVyZVBhbmVzfVxuICAgICAgICA8L2Rpdj5cbiAgICAgIH1cbiAgICA8L0NhcmQ+XG4gIClcbn1cblxuU2NyaXB0dXJlQ2FyZC5wcm9wVHlwZXMgPSB7XG4gIC8qKiBodG1sIGlkZW50aWZpZXIgdG8gdXNlIGZvciBjYXJkICovXG4gIGlkOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAvKiogbWV0aG9kIHRvIGRldGVybWluZSBpZiBOVCBvciBPVCAqL1xuICBpc05UOiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuICAvKiogdGl0bGUgZm9yIHNjcmlwdHVyZSBjYXJkICovXG4gIHRpdGxlOiBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsXG4gIC8qKiBnZXQgbGFuZ3VhZ2UgZGV0YWlscyAqL1xuICBnZXRMYW5ndWFnZTogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbiAgLyoqIHNjcmlwdHVyZSBjYXJkIG51bWJlciAoMCB0byAyIGZvciBleGFtcGxlKSAqL1xuICBjYXJkTnVtOiBQcm9wVHlwZXMubnVtYmVyLmlzUmVxdWlyZWQsXG4gIC8qKiByZXNvdXJjZSBvYmplY3QgKi9cbiAgcmVzb3VyY2U6IFByb3BUeXBlcy5zaGFwZSh7XG4gICAgLyoqIHJlc291cmNlIGxhbmd1YWdlIHRvIHVzZSAqL1xuICAgIGxhbmd1YWdlSWQ6IFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCxcbiAgICAvKiogcmVwbyBvd25lciBzdWNoIGFzIHVuZm9sZGluZ1dvcmQgKi9cbiAgICBvd25lcjogUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLFxuICAgIC8qKiByZXNvdXJjZUlkIHRvIHVzZSAoZS5nLiB1Z250KSAqL1xuICAgIHJlc291cmNlSWQ6IFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCxcbiAgICAvKiogcmVwbyBvd25lciBmb3Igb3JpZ2luYWwgbGFuZ3VhZ2VzIHN1Y2ggYXMgdW5mb2xkaW5nV29yZCAqL1xuICAgIG9yaWdpbmFsTGFuZ3VhZ2VPd25lcjogUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLFxuICB9KSxcbiAgcmVmZXJlbmNlOiBQcm9wVHlwZXMuc2hhcGUoe1xuICAgIC8qKiBwcm9qZWN0SWQgKGJvb2tJRCkgdG8gdXNlICovXG4gICAgcHJvamVjdElkOiBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsXG4gICAgLyoqIGN1cnJlbnQgY2hhcHRlciBudW1iZXIgKi9cbiAgICBjaGFwdGVyOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMubnVtYmVyLCBQcm9wVHlwZXMuc3RyaW5nXSkuaXNSZXF1aXJlZCxcbiAgICAvKiogY3VycmVudCB2ZXJzZSBudW1iZXIgKi9cbiAgICB2ZXJzZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLm51bWJlciwgUHJvcFR5cGVzLnN0cmluZ10pLmlzUmVxdWlyZWQsXG4gIH0pLFxuICAvKiogc2VydmVyIChlLmcuICdodHRwczovL2dpdC5kb29yNDMub3JnJykgKi9cbiAgc2VydmVyOiBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsXG4gIC8qKiByZXBvIGJyYW5jaCBvciB0YWcgc3VjaCBhcyBtYXN0ZXIgKi9cbiAgYXBwUmVmOiBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsXG4gIC8qKiBpZiB0cnVlIHRoZW4gd29yZCBkYXRhIGhvdmVyIGlzIHNob3duICovXG4gIGRpc2FibGVXb3JkUG9wb3ZlcjogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKiBDU1MgY2xhc3NlcyAqL1xuICBjbGFzc2VzOiBQcm9wVHlwZXMub2JqZWN0LFxuICAvKiogcmVzb3VyY2VMaW5rICovXG4gIHJlc291cmNlTGluazogUHJvcFR5cGVzLmFueSxcbiAgLyoqIHVzZSBtZXRob2QgZm9yIHVzaW5nIGxvY2FsIHN0b3JhZ2Ugc3BlY2lmaWMgZm9yIHVzZXIgKi9cbiAgdXNlVXNlckxvY2FsU3RvcmFnZTogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbiAgLyoqIG9wdGlvbmFsIGNhbGxiYWNrIGlmIGVycm9yIGxvYWRpbmcgcmVzb3VyY2UsIHBhcmFtZXRlciByZXR1cm5lZCBhcmU6XG4gICAqICAgICh7c3RyaW5nfSBlcnJvck1lc3NhZ2UsIHtib29sZWFufSBpc0FjY2Vzc0Vycm9yLCB7b2JqZWN0fSByZXNvdXJjZVN0YXR1cylcbiAgICogICAgICAtIGlzQWNjZXNzRXJyb3IgLSBpcyB0cnVlIGlmIHRoaXMgd2FzIGFuIGVycm9yIHRyeWluZyB0byBhY2Nlc3MgZmlsZVxuICAgKiAgICAgIC0gcmVzb3VyY2VTdGF0dXMgLSBpcyBvYmplY3QgY29udGFpbmluZyBkZXRhaWxzIGFib3V0IHByb2JsZW1zIGZldGNoaW5nIHJlc291cmNlICovXG4gIG9uUmVzb3VyY2VFcnJvcjogUHJvcFR5cGVzLmZ1bmMsXG4gIC8qKiBvcHRpb25hbCBodHRwIHRpbWVvdXQgaW4gbWlsbGlzZWNvbmRzIGZvciBmZXRjaGluZyByZXNvdXJjZXMsIGRlZmF1bHQgaXMgMCAodmVyeSBsb25nIHdhaXQpICovXG4gIGh0dHBDb25maWc6IFByb3BUeXBlcy5vYmplY3QsXG4gIC8qKiBvcHRpb25hbCB1cmwgZm9yIGdyZWVrIHJlcG8gKi9cbiAgZ3JlZWtSZXBvVXJsOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAvKiogb3B0aW9uYWwgdXJsIGZvciBoZWJyZXcgcmVwbyAqL1xuICBoZWJyZXdSZXBvVXJsOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAvKiogZnVuY3Rpb24gdG8gZ2V0IGxhdGVzdCBsZXhpY29uIGRhdGEgKi9cbiAgZ2V0TGV4aWNvbkRhdGE6IFByb3BUeXBlcy5mdW5jLFxuICAvKiogZnVuY3Rpb24gdG8gcHJlLWxvYWQgbGV4aWNvbiBkYXRhIGZvciB2ZXJzZSAqL1xuICBmZXRjaEdsb3NzZXNGb3JWZXJzZTogUHJvcFR5cGVzLmZ1bmMsXG4gIC8qKiBvcHRpb25hbCBmdW5jdGlvbiBmb3IgbG9jYWxpemF0aW9uICovXG4gIHRyYW5zbGF0ZTogUHJvcFR5cGVzLmZ1bmMsXG4gIC8qKiBmdW5jdGlvbiB0byBtaW5pbWl6ZSB0aGUgY2FyZCAob3B0aW9uYWwpICovXG4gIG9uTWluaW1pemU6IFByb3BUeXBlcy5mdW5jLFxuICAvKiogdXNlci1uYW1lICovXG4gIGxvZ2dlZEluVXNlcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgLyoqIGF1dGhlbnRpY2F0aW9uIGluZm8gKi9cbiAgYXV0aGVudGljYXRpb246IFByb3BUeXBlcy5vYmplY3QsXG4gIC8qKiBmdW5jdGlvbiB0byBzZXQgc3RhdGUgaW4gYXBwIHRoYXQgdGhlcmUgYXJlIHVuc2F2ZWQgY2hhbmdlcyAqL1xuICBzZXRTYXZlZENoYW5nZXM6IFByb3BUeXBlcy5mdW5jLFxuICAvKiogaW5kZXggZm9yIGN1cnJlbnQgYm9vayAoZS5nLiAnMDEnIGZvciAnZ2VuJykqL1xuICBib29rSW5kZXg6IFByb3BUeXBlcy5zdHJpbmcsXG4gIC8qKiBjYWxsYmFjayB0byBpbmRpY2F0ZSB0aGF0IHdlIGFyZSB1c2luZyBhIHZlcnNlIHJhbmdlIGhlcmUgKi9cbiAgYWRkVmVyc2VSYW5nZTogUHJvcFR5cGVzLmZ1bmMsXG59XG4iXX0=